/** * 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