/** * The command shell every `axm uninstall` route shares. * * The feature settles which extensions the selector names and resolves the * removal; this module turns flags into an execution intent, typed refusals * into the error envelope, and the outcome into the report a person reads — * including the no-op wording for a selector that matched nothing. */ import * as Effect from "effect/Effect"; import { type UninstallExtensionsRequest } from "@agentxm/workspace/lifecycle"; import type { InstallableExtensionType } from "@agentxm/extension-model/unstable/extensions/installable-types"; import type { SuggestedAction } from "@agentxm/registry-protocol/unstable/suggested-action"; import { Screen } from "../../screen/index.js"; export interface UninstallCommandArgs { /** Telemetry and machine-output command identity, e.g. `skills.uninstall`. */ readonly command: string; readonly request: UninstallExtensionsRequest; /** * What the live frame calls this operation before planning settles which * extensions the selector names. The plan the feature settles carries its * own type-specific name, which is what the result document reports. */ readonly liveName: string; readonly preview: boolean; /** The command words a confirmation-recovery line reproduces. */ readonly recoveryCommand: ReadonlyArray; /** What the person typed, reproduced as the recovery line's positional. */ readonly recoveryPositionals: ReadonlyArray; readonly suggestions: (type: InstallableExtensionType) => ReadonlyArray; /** * What to say when the selector named nothing this command could remove. A * route that leaves this out reports the empty operation itself instead. */ readonly noOpMessage?: (args: { readonly type: InstallableExtensionType; /** * The subject as the settled removal names it: the selector a typed * route was given, or the extension name the root form read out of the * registry FQN. A report names the same subject either way. */ readonly selector: string; /** True when the named extensions were all already absent. */ readonly alreadyAbsent: boolean; }) => string; /** * What a preview that found nothing to remove says when the machine-output * envelope did not already say it. Only the routes that report an empty * preview as a result rather than a no-op supply this. */ readonly previewEmptyResult?: string; } /** Run one uninstall route end to end. */ export declare const runUninstallCommand: (args: UninstallCommandArgs) => Effect.Effect; //# sourceMappingURL=uninstall-command.d.ts.map