import { type ParsedArgs } from "@cotal-ai/core"; export declare const extFlags: readonly [{ readonly name: "json"; readonly short: "j"; readonly type: "boolean"; readonly description: "structured output on stdout"; }, { readonly name: "plain"; readonly type: "boolean"; readonly description: "plain line-oriented output"; }, { readonly name: "repair"; readonly type: "boolean"; readonly description: "seed: recover a lost ever-seeded authority from its durable backup"; }, { readonly name: "reset"; readonly type: "boolean"; readonly description: "seed: discard the authority and re-seed all built-in connectors (resurrects removed ones)"; }, { readonly name: "force"; readonly type: "boolean"; readonly description: "seed: re-seed the built-in connectors even when the stamp is current or a downgrade"; }]; /** Parent binding for update's internal isolated re-add. Ordinary `ext add` never reads it. */ export declare const EXT_UPDATE_PARENT_ENV = "COTAL_EXT_UPDATE_PARENT"; /** Classify a `cotal ext add` spec as a local path (vs a registry name). A path is a relative `.`/`./`/ * `.\` spec or an absolute one on the NATIVE platform — POSIX `/…`, Windows drive `C:\…` / `C:/…`, or * UNC `\\…`. A POSIX-only test misclassified a Windows absolute path (it starts with a drive letter, * not `/`) as a registry name, which broke first-run seeding on Windows (the seed-store spec is always * absolute). `absolute` is injectable so the classification is unit-testable for both platforms. */ export declare function isPathSpec(spec: string, absolute?: (p: string) => boolean): boolean; /** * `cotal ext` — operator-installed extensions. `add` installs an npm package into the * cotal-owned prefix (never the user's project), imports it ONCE so it self-registers into the * live `Registry`, verifies the registration actually landed, and caches every contributed key * plus command display metadata. From then on, help and read the cache (no import), and * dispatch/provider resolution imports the package lazily with live objects. * * Add-time guarantees (design-review conditions — each converts a silent failure into a loud one): * - shared `@cotal-ai/*` packages must be PEER dependencies of the extension; each is linked to * the running binary's copy (core is mandatory — otherwise the extension registers into ITS * OWN module's registry singleton and the binary never sees the commands; others, e.g. * `@cotal-ai/workspace`, would silently drift from the binary's). * - after import, the expected commands must have appeared in OUR registry, else the add fails. * - a contributed name colliding with an existing command fails the add (builtins win). */ export declare function ext(args: ParsedArgs): Promise; /** `cotal ext add `: install one extension into the operator prefix and record what it provides. * `announce` takes the closing `✓ added` line; `cotal setup` sends it to stderr when stdout carries * a result. */ export declare function addExtension(spec: string, expectedPkg?: string, borrowMutation?: boolean, announce?: (line: string) => void): Promise; /** One installed extension as the listing reports it. */ export interface ExtensionRow { readonly pkg: string; /** The manifest pin recorded at add time. */ readonly version: string; /** What `ext add` was given. */ readonly spec: string; /** Whether the built-in seed installed the entry. */ readonly seeded: boolean; /** The `kind:name` refs the package registers. */ readonly provides: readonly string[]; } //# sourceMappingURL=ext.d.ts.map