/**
* Canonical-extensions scanner: enumerates authored project type roots and
* source-qualified acquired packages beneath `agent_extensions/` or the
* corresponding user-scope `agent_extensions/` root.
*
* Per Decision 5 of the workspace read-model design, scanner output is
* occurrence-shaped. Each emitted occurrence carries the scanner-tier origin
* discriminator (`canonical-axm` | `external-axm`) plus the extension type;
* Phase 7 maps these into per-subject origin unions.
*
* Each occurrence carries structural fields the subject modules need for
* cross-platform path handling — `pathSegments` (the absolute path split via
* the `Path` service) and `subjectFile` (the canonical primary content file
* for the subject type, e.g., `
/SKILL.md` for skills) — plus a probed
* `subjectFileExists` flag so subject modules do not hardcode presence.
*
* Scanner contract:
*
* - Public effect carries no `FileSystem | Path` requirement. Construction
* takes a deps record and returns an `Effect>`.
* - Per-file partial failures (a directory we cannot enumerate) become
* diagnostic warnings, not errors. The error channel stays empty.
* - WorkspaceMutations-root path-escape is checked at provider construction (Phase 9),
* not inside the scanner.
*
* The scanner avoids `fs.stat` and uses only `fs.exists` / `fs.readDirectory`
* so it remains compatible with the fixture builder's in-memory `FileSystem`.
* "Is this a directory" is decided by whether `readDirectory` returns
* successfully; non-directory entries are silently ignored.
*/
import * as Effect from "effect/Effect";
import type * as FileSystem from "effect/FileSystem";
import type * as Path from "effect/Path";
import type { Diagnostics } from "../diagnostics.js";
import type { WorkspaceLayout } from "../../layout.js";
import type { CanonicalExtensionOccurrence } from "./types.js";
export interface CanonicalExtensionsScannerDeps {
readonly fs: FileSystem.FileSystem;
readonly path: Path.Path;
readonly workspaceRoot: string;
readonly diagnostics: Diagnostics;
readonly layout: WorkspaceLayout;
}
/**
* Closure helper: returns the dependency-closed scanner effect.
*/
export declare const makeCanonicalExtensionsScanner: (deps: CanonicalExtensionsScannerDeps) => Effect.Effect>;
//# sourceMappingURL=canonical-extensions.d.ts.map