/** * Knowledge subject module: declared/resolved/actual payloads, scanner * composition, and projections via the shared helper. * * Declared bundles come from `settings.knowledge`; resolved bundles come from * `axm-lock.yaml` `knowledge`. Actual occurrences come exclusively from the * canonical-extensions scanner (`type === "knowledge"`), which enumerates * project-authored `knowledge//src`, project-acquired * `agent_extensions//`, and user-scope packages. * * Knowledge installs also write two derived artifacts — the `.axm/knowledge/index.md` * catalog and the discovery region inside the agent instructions file. Both live * outside canonical package roots, so the canonical scanner never sees them and they * cannot become occurrences; `actual` is therefore scoped to the materialized * bundle package directory by construction. * * Pack-resolved Knowledge members participate in the same direct-over-pack * projection as every other extension type. */ import * as Effect from "effect/Effect"; import * as Option from "effect/Option"; import { type ExtensionName } from "../../../extensions/common.js"; import type { KnowledgeLockEntry, Lockfile } from "../../../lockfile/schema.js"; import type { KnowledgeEntry, Settings } from "../../../settings/schema.js"; import type { Diagnostics } from "../diagnostics.js"; import type { LockfileReadError, SettingsReadError } from "../errors.js"; import type { CanonicalExtensionOccurrence } from "../scanners/types.js"; import type { ActivationState, ExtensionKey, InstallationOrigin, InstalledPackRef, Scope } from "../types.js"; export type KnowledgeDetectionOrigin = { readonly _tag: "canonical-axm-knowledge"; } | { readonly _tag: "external-axm-knowledge"; }; export interface DeclaredKnowledgeBundle { readonly name: ExtensionName; readonly entry: KnowledgeEntry; } export type DeclaredKnowledge = ReadonlyArray; export interface ResolvedKnowledgeBundle { readonly name: ExtensionName; readonly lockEntry: KnowledgeLockEntry; } export type ResolvedKnowledge = ReadonlyArray; export interface ActualKnowledgeBundle { readonly key: ExtensionKey<"knowledge">; readonly origin: KnowledgeDetectionOrigin; readonly contentRoot: string; readonly packageRoot: string | null; } export type ActualKnowledge = ReadonlyArray; export interface KnowledgePackMember { readonly name: ExtensionName; readonly providingPack: InstalledPackRef; } export interface InstalledKnowledgeBundle { readonly key: ExtensionKey<"knowledge">; readonly installationOrigin: InstallationOrigin; readonly activation: ActivationState; readonly resolved: Option.Option; readonly actual: ReadonlyArray; readonly providingPacks: ReadonlyArray; } export interface UnmanagedKnowledgeBundle { readonly key: ExtensionKey<"knowledge">; readonly actual: ActualKnowledgeBundle; } export interface KnowledgeScanners { readonly canonical: Effect.Effect>; } export interface KnowledgeScopedLoaders { readonly settings: Effect.Effect, SettingsReadError>; readonly lockfile: Effect.Effect, LockfileReadError>; } export interface KnowledgeExtensionsApiDeps { readonly scope: Scope; readonly loaders: KnowledgeScopedLoaders; readonly scanners: KnowledgeScanners; readonly installedPacks: Effect.Effect, SettingsReadError | LockfileReadError>; readonly diagnostics: Diagnostics; } export interface InstalledPackForKnowledge { readonly ref: InstalledPackRef; readonly knowledge: ReadonlyArray; } export interface KnowledgeExtensionsApi { readonly declared: Effect.Effect, SettingsReadError>; readonly resolved: Effect.Effect, LockfileReadError>; readonly actual: Effect.Effect; readonly installed: Effect.Effect, SettingsReadError | LockfileReadError>; readonly byName: (name: string) => Effect.Effect, SettingsReadError | LockfileReadError>; readonly declaredByName: (name: string) => Effect.Effect, SettingsReadError>; readonly active: Effect.Effect, SettingsReadError | LockfileReadError>; readonly unmanaged: Effect.Effect, SettingsReadError | LockfileReadError>; } /** * Build the knowledge subject API. Returns an `Effect` because the projection * cell is wrapped in `Effect.cached` so the four derived cells share one * in-flight execution per scope, mirroring `state.ts`. */ export declare const makeKnowledgeExtensionsApi: (deps: KnowledgeExtensionsApiDeps) => Effect.Effect; //# sourceMappingURL=knowledge.d.ts.map