@tacuchi/agent-workflow-cli 5.5.1 → 5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/application/self/bootstrap.d.ts +22 -0
- package/dist/application/self/bootstrap.d.ts.map +1 -0
- package/dist/application/self/bootstrap.js +115 -0
- package/dist/application/self/bootstrap.js.map +1 -0
- package/dist/application/self/doctor-self.d.ts +14 -4
- package/dist/application/self/doctor-self.d.ts.map +1 -1
- package/dist/application/self/doctor-self.js +75 -14
- package/dist/application/self/doctor-self.js.map +1 -1
- package/dist/application/self/install-skill.d.ts +14 -13
- package/dist/application/self/install-skill.d.ts.map +1 -1
- package/dist/application/self/install-skill.js +120 -73
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/uninstall-skill.d.ts +21 -0
- package/dist/application/self/uninstall-skill.d.ts.map +1 -0
- package/dist/application/self/uninstall-skill.js +105 -0
- package/dist/application/self/uninstall-skill.js.map +1 -0
- package/dist/cli/commands/self.d.ts.map +1 -1
- package/dist/cli/commands/self.js +16 -3
- package/dist/cli/commands/self.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ParsedArgs } from "../../cli/parser.js";
|
|
2
|
+
import type { CliContext } from "../../cli/types.js";
|
|
3
|
+
import type { CommandResult } from "../../domain/types.js";
|
|
4
|
+
export interface BootstrapStep {
|
|
5
|
+
name: "doctor" | "uninstall-legacy" | "install-skill" | "next-steps";
|
|
6
|
+
status: "ok" | "skipped" | "error";
|
|
7
|
+
data?: unknown;
|
|
8
|
+
message?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface BootstrapNextStep {
|
|
11
|
+
harness: "claude-code" | "codex";
|
|
12
|
+
detected: boolean;
|
|
13
|
+
install_command: string;
|
|
14
|
+
description: string;
|
|
15
|
+
}
|
|
16
|
+
export interface SelfBootstrapData {
|
|
17
|
+
steps: BootstrapStep[];
|
|
18
|
+
next_steps: BootstrapNextStep[];
|
|
19
|
+
summary: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function selfBootstrap(args: ParsedArgs, ctx: CliContext): Promise<CommandResult<SelfBootstrapData>>;
|
|
22
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/application/self/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAS3D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,kBAAkB,GAAG,eAAe,GAAG,YAAY,CAAC;IACrE,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CA4D3C"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { selfDoctor } from "./doctor-self.js";
|
|
2
|
+
import { selfInstallSkill, } from "./install-skill.js";
|
|
3
|
+
import { selfUninstallSkill } from "./uninstall-skill.js";
|
|
4
|
+
export async function selfBootstrap(args, ctx) {
|
|
5
|
+
const dryRun = args.flags.has("--dry-run");
|
|
6
|
+
const steps = [];
|
|
7
|
+
const doctorResult = await selfDoctor(ctx);
|
|
8
|
+
if (!doctorResult.ok || !doctorResult.data) {
|
|
9
|
+
steps.push({
|
|
10
|
+
name: "doctor",
|
|
11
|
+
status: "error",
|
|
12
|
+
message: doctorResult.error?.message ?? "unknown doctor error",
|
|
13
|
+
});
|
|
14
|
+
return failedResult(steps, "doctor failed; aborted bootstrap");
|
|
15
|
+
}
|
|
16
|
+
const doctorData = doctorResult.data;
|
|
17
|
+
steps.push({ name: "doctor", status: "ok", data: doctorData.skill });
|
|
18
|
+
const hasLegacy = doctorData.skill.targets.some((t) => t.legacy_leftover === true);
|
|
19
|
+
if (hasLegacy) {
|
|
20
|
+
const uninstallArgs = buildUninstallArgs(dryRun);
|
|
21
|
+
const uninstallResult = await selfUninstallSkill(uninstallArgs, ctx);
|
|
22
|
+
if (!uninstallResult.ok || !uninstallResult.data) {
|
|
23
|
+
steps.push({
|
|
24
|
+
name: "uninstall-legacy",
|
|
25
|
+
status: "error",
|
|
26
|
+
message: uninstallResult.error?.message ?? "unknown uninstall error",
|
|
27
|
+
});
|
|
28
|
+
return failedResult(steps, "uninstall-legacy failed; aborted bootstrap");
|
|
29
|
+
}
|
|
30
|
+
const uninstallData = uninstallResult.data;
|
|
31
|
+
steps.push({ name: "uninstall-legacy", status: "ok", data: uninstallData });
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
steps.push({ name: "uninstall-legacy", status: "skipped", message: "no legacy leftover" });
|
|
35
|
+
}
|
|
36
|
+
const installArgs = buildInstallArgs(dryRun);
|
|
37
|
+
const installResult = await selfInstallSkill(installArgs, ctx);
|
|
38
|
+
if (!installResult.ok || !installResult.data) {
|
|
39
|
+
steps.push({
|
|
40
|
+
name: "install-skill",
|
|
41
|
+
status: "error",
|
|
42
|
+
message: installResult.error?.message ?? "unknown install error",
|
|
43
|
+
});
|
|
44
|
+
return failedResult(steps, "install-skill failed; aborted bootstrap");
|
|
45
|
+
}
|
|
46
|
+
const installData = installResult.data;
|
|
47
|
+
steps.push({ name: "install-skill", status: "ok", data: installData });
|
|
48
|
+
const nextSteps = buildNextSteps(installData.dests);
|
|
49
|
+
steps.push({ name: "next-steps", status: "ok", data: nextSteps });
|
|
50
|
+
const summary = composeSummary(steps, nextSteps);
|
|
51
|
+
return {
|
|
52
|
+
ok: true,
|
|
53
|
+
data: {
|
|
54
|
+
steps,
|
|
55
|
+
next_steps: nextSteps,
|
|
56
|
+
summary,
|
|
57
|
+
},
|
|
58
|
+
exitCode: 0,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function buildUninstallArgs(dryRun) {
|
|
62
|
+
return {
|
|
63
|
+
rest: [],
|
|
64
|
+
plugin: {},
|
|
65
|
+
flags: new Set(dryRun ? ["--legacy", "--dry-run"] : ["--legacy"]),
|
|
66
|
+
values: new Map([["target", "all"]]),
|
|
67
|
+
valuesMulti: new Map(),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function buildInstallArgs(dryRun) {
|
|
71
|
+
return {
|
|
72
|
+
rest: [],
|
|
73
|
+
plugin: {},
|
|
74
|
+
flags: new Set(dryRun ? ["--force", "--dry-run"] : ["--force"]),
|
|
75
|
+
values: new Map([["target", "all"]]),
|
|
76
|
+
valuesMulti: new Map(),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function buildNextSteps(dests) {
|
|
80
|
+
return [
|
|
81
|
+
{
|
|
82
|
+
harness: "claude-code",
|
|
83
|
+
detected: dests.some((d) => d.target === "claude"),
|
|
84
|
+
install_command: "/plugin marketplace add <marketplace-url>; /plugin install qtc",
|
|
85
|
+
description: "En Claude Code: agregá el marketplace si aún no está, después instalá el plugin 'qtc'.",
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
harness: "codex",
|
|
89
|
+
detected: dests.some((d) => d.target === "codex"),
|
|
90
|
+
install_command: "codex plugin install <marketplace-url>#qtc",
|
|
91
|
+
description: "En Codex: instalá el plugin 'qtc' desde el marketplace y reiniciá la app para refrescar el cache.",
|
|
92
|
+
},
|
|
93
|
+
];
|
|
94
|
+
}
|
|
95
|
+
function composeSummary(steps, nextSteps) {
|
|
96
|
+
const ok = steps.filter((s) => s.status === "ok").length;
|
|
97
|
+
const skipped = steps.filter((s) => s.status === "skipped").length;
|
|
98
|
+
const detected = nextSteps.filter((n) => n.detected).map((n) => n.harness);
|
|
99
|
+
const detectedFragment = detected.length > 0
|
|
100
|
+
? `Harnesses detectados: ${detected.join(", ")}.`
|
|
101
|
+
: "Sin harnesses detectados — instalá Claude Code o Codex y volvé a correr.";
|
|
102
|
+
return `Bootstrap completo: ${ok} pasos OK, ${skipped} saltados. ${detectedFragment} Ver next_steps[] para los comandos de instalación del plugin.`;
|
|
103
|
+
}
|
|
104
|
+
function failedResult(steps, summary) {
|
|
105
|
+
return {
|
|
106
|
+
ok: true,
|
|
107
|
+
data: {
|
|
108
|
+
steps,
|
|
109
|
+
next_steps: [],
|
|
110
|
+
summary,
|
|
111
|
+
},
|
|
112
|
+
exitCode: 1,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/application/self/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import type { CliContext } from "../../cli/types.js";
|
|
2
2
|
import type { CommandResult } from "../../domain/types.js";
|
|
3
|
+
import { type InstallTarget } from "./install-skill.js";
|
|
4
|
+
export interface SkillTargetReport {
|
|
5
|
+
target: InstallTarget;
|
|
6
|
+
path: string;
|
|
7
|
+
installed: boolean;
|
|
8
|
+
legacy_leftover?: boolean;
|
|
9
|
+
legacy_leftover_path?: string;
|
|
10
|
+
legacy_leftover_warning?: string;
|
|
11
|
+
lock_present?: boolean;
|
|
12
|
+
lock_canonical_entry?: boolean;
|
|
13
|
+
lock_legacy_entry?: boolean;
|
|
14
|
+
lock_warning?: string;
|
|
15
|
+
}
|
|
3
16
|
export interface SelfDoctorReport {
|
|
4
17
|
cli_version: string;
|
|
5
18
|
namespace: {
|
|
@@ -20,10 +33,7 @@ export interface SelfDoctorReport {
|
|
|
20
33
|
};
|
|
21
34
|
skill: {
|
|
22
35
|
installed: boolean;
|
|
23
|
-
|
|
24
|
-
legacy_leftover?: boolean;
|
|
25
|
-
legacy_leftover_path?: string;
|
|
26
|
-
legacy_leftover_warning?: string;
|
|
36
|
+
targets: SkillTargetReport[];
|
|
27
37
|
};
|
|
28
38
|
}
|
|
29
39
|
export declare function selfDoctor(ctx: CliContext): Promise<CommandResult<SelfDoctorReport>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-self.d.ts","sourceRoot":"","sources":["../../../src/application/self/doctor-self.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor-self.d.ts","sourceRoot":"","sources":["../../../src/application/self/doctor-self.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAEL,KAAK,aAAa,EAInB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,KAAK,EAAE;QACL,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;KAC9B,CAAC;CACH;AAID,wBAAsB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAqC1F"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
|
|
3
|
+
import { AGENTS_LOCK_REL, LEGACY_SKILL_NAME, SKILL_DIR_NAME, TARGET_ROOTS, } from "./install-skill.js";
|
|
4
|
+
const FS_TARGETS = ["claude", "codex"];
|
|
4
5
|
export async function selfDoctor(ctx) {
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
6
|
+
const home = ctx.env.homeDir();
|
|
7
|
+
const targetReports = [];
|
|
8
|
+
for (const target of FS_TARGETS) {
|
|
9
|
+
targetReports.push(await reportFsTarget(ctx, home, target));
|
|
10
|
+
}
|
|
11
|
+
const agentsReport = await reportAgentsTarget(ctx, home);
|
|
12
|
+
if (agentsReport)
|
|
13
|
+
targetReports.push(agentsReport);
|
|
9
14
|
return {
|
|
10
15
|
ok: true,
|
|
11
16
|
data: {
|
|
@@ -27,20 +32,76 @@ export async function selfDoctor(ctx) {
|
|
|
27
32
|
...(ctx.runtime.displayName ? { display_name: ctx.runtime.displayName } : {}),
|
|
28
33
|
},
|
|
29
34
|
skill: {
|
|
30
|
-
installed:
|
|
31
|
-
|
|
32
|
-
...(legacyLeftover
|
|
33
|
-
? {
|
|
34
|
-
legacy_leftover: true,
|
|
35
|
-
legacy_leftover_path: legacyPath,
|
|
36
|
-
legacy_leftover_warning: `Skill legacy detectada en ${legacyPath}. Reemplazada por '${skillPath}' tras el rename de agent-workflow-manager → agent-workflow. Recomendado: mv ${legacyPath} ${legacyPath}.bak (preserva evidencia) y cuando estés tranquilo, rm -rf el .bak.`,
|
|
37
|
-
}
|
|
38
|
-
: {}),
|
|
35
|
+
installed: targetReports.some((t) => t.installed),
|
|
36
|
+
targets: targetReports,
|
|
39
37
|
},
|
|
40
38
|
},
|
|
41
39
|
exitCode: 0,
|
|
42
40
|
};
|
|
43
41
|
}
|
|
42
|
+
async function reportFsTarget(ctx, home, target) {
|
|
43
|
+
const skillPath = join(home, ...TARGET_ROOTS[target], SKILL_DIR_NAME);
|
|
44
|
+
const legacyPath = join(home, ...TARGET_ROOTS[target], LEGACY_SKILL_NAME);
|
|
45
|
+
const installed = await ctx.fs.exists(skillPath);
|
|
46
|
+
const legacyLeftover = await ctx.fs.exists(legacyPath);
|
|
47
|
+
return {
|
|
48
|
+
target,
|
|
49
|
+
path: skillPath,
|
|
50
|
+
installed,
|
|
51
|
+
...(legacyLeftover
|
|
52
|
+
? {
|
|
53
|
+
legacy_leftover: true,
|
|
54
|
+
legacy_leftover_path: legacyPath,
|
|
55
|
+
legacy_leftover_warning: legacyWarning(legacyPath, skillPath),
|
|
56
|
+
}
|
|
57
|
+
: {}),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async function reportAgentsTarget(ctx, home) {
|
|
61
|
+
const agentsRoot = join(home, ...TARGET_ROOTS.agents.slice(0, 1));
|
|
62
|
+
if (!(await ctx.fs.exists(agentsRoot)))
|
|
63
|
+
return null;
|
|
64
|
+
const skillPath = join(home, ...TARGET_ROOTS.agents, SKILL_DIR_NAME);
|
|
65
|
+
const legacyPath = join(home, ...TARGET_ROOTS.agents, LEGACY_SKILL_NAME);
|
|
66
|
+
const installed = await ctx.fs.exists(skillPath);
|
|
67
|
+
const legacyLeftover = await ctx.fs.exists(legacyPath);
|
|
68
|
+
const lockPath = join(home, ...AGENTS_LOCK_REL);
|
|
69
|
+
const lockPresent = await ctx.fs.exists(lockPath);
|
|
70
|
+
let lockCanonical;
|
|
71
|
+
let lockLegacy;
|
|
72
|
+
let lockWarning;
|
|
73
|
+
if (lockPresent) {
|
|
74
|
+
try {
|
|
75
|
+
const raw = await ctx.fs.readText(lockPath);
|
|
76
|
+
const parsed = JSON.parse(raw);
|
|
77
|
+
const skills = parsed.skills ?? {};
|
|
78
|
+
lockCanonical = Object.hasOwn(skills, SKILL_DIR_NAME);
|
|
79
|
+
lockLegacy = Object.hasOwn(skills, LEGACY_SKILL_NAME);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
lockWarning = `Could not parse ${lockPath}: ${err.message}. Skipping lock-based detection — filesystem scan still reliable.`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
target: "agents",
|
|
87
|
+
path: skillPath,
|
|
88
|
+
installed,
|
|
89
|
+
...(legacyLeftover
|
|
90
|
+
? {
|
|
91
|
+
legacy_leftover: true,
|
|
92
|
+
legacy_leftover_path: legacyPath,
|
|
93
|
+
legacy_leftover_warning: legacyWarning(legacyPath, skillPath),
|
|
94
|
+
}
|
|
95
|
+
: {}),
|
|
96
|
+
lock_present: lockPresent,
|
|
97
|
+
...(lockCanonical !== undefined ? { lock_canonical_entry: lockCanonical } : {}),
|
|
98
|
+
...(lockLegacy !== undefined ? { lock_legacy_entry: lockLegacy } : {}),
|
|
99
|
+
...(lockWarning ? { lock_warning: lockWarning } : {}),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function legacyWarning(legacyPath, skillPath) {
|
|
103
|
+
return `Skill legacy detectada en ${legacyPath}. Reemplazada por '${skillPath}' tras el rename de agent-workflow-manager → agent-workflow. Usá 'agent-workflow self uninstall-skill --legacy' para limpiar.`;
|
|
104
|
+
}
|
|
44
105
|
function readPackageVersion() {
|
|
45
106
|
try {
|
|
46
107
|
const require = createRequire(import.meta.url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-self.js","sourceRoot":"","sources":["../../../src/application/self/doctor-self.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor-self.js","sourceRoot":"","sources":["../../../src/application/self/doctor-self.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,23 +3,24 @@ import type { CliContext } from "../../cli/types.js";
|
|
|
3
3
|
import type { CommandResult } from "../../domain/types.js";
|
|
4
4
|
export declare const SKILL_DIR_NAME = "agent-workflow";
|
|
5
5
|
export declare const BUNDLED_SKILL_REL_PATH = "skills/agent-workflow";
|
|
6
|
+
export type InstallTarget = "claude" | "codex" | "agents";
|
|
7
|
+
export declare const TARGET_ROOTS: Record<InstallTarget, readonly string[]>;
|
|
8
|
+
export declare const AGENTS_LOCK_REL: readonly [".agents", ".skill-lock.json"];
|
|
9
|
+
export declare const LEGACY_SKILL_NAME = "agent-workflow-manager";
|
|
10
|
+
export interface SelfInstallTargetResult {
|
|
11
|
+
target: InstallTarget;
|
|
12
|
+
dest: string;
|
|
13
|
+
status: "installed" | "dry-run" | "skipped";
|
|
14
|
+
overwrote_existing: boolean;
|
|
15
|
+
files_copied?: number;
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
6
18
|
export interface SelfInstallSkillData {
|
|
7
|
-
status: "installed" | "dry-run";
|
|
19
|
+
status: "installed" | "dry-run" | "partial";
|
|
8
20
|
source: string;
|
|
9
21
|
source_kind: "path" | "bundled";
|
|
10
|
-
|
|
11
|
-
files_copied?: number;
|
|
12
|
-
overwrote_existing?: boolean;
|
|
22
|
+
dests: SelfInstallTargetResult[];
|
|
13
23
|
}
|
|
14
24
|
export declare function selfInstallSkill(args: ParsedArgs, ctx: CliContext, resolveBundled?: () => Promise<string | null>): Promise<CommandResult<SelfInstallSkillData>>;
|
|
15
|
-
/**
|
|
16
|
-
* Resolve the bundled skill path by walking up from this module's directory
|
|
17
|
-
* until a `skills/agent-workflow/SKILL.md` is found. Returns the directory
|
|
18
|
-
* containing SKILL.md, or null if no candidate is reachable.
|
|
19
|
-
*
|
|
20
|
-
* Works in both dist (`dist/application/self/install-skill.js`) and dev
|
|
21
|
-
* (`src/application/self/install-skill.ts` via a runner) layouts because the
|
|
22
|
-
* walk-up looks for the marker file rather than a fixed depth.
|
|
23
|
-
*/
|
|
24
25
|
export declare function resolveBundledSkillPath(): Promise<string | null>;
|
|
25
26
|
//# sourceMappingURL=install-skill.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../../src/application/self/install-skill.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,eAAO,MAAM,sBAAsB,0BAA6B,CAAC;AAEjE,MAAM,
|
|
1
|
+
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../../src/application/self/install-skill.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,eAAO,MAAM,sBAAsB,0BAA6B,CAAC;AAEjE,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAIjE,CAAC;AAEF,eAAO,MAAM,eAAe,0CAA2C,CAAC;AACxE,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,uBAAuB,EAAE,CAAC;CAClC;AAMD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,UAAU,EACf,cAAc,GAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAA2B,GACrE,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC,CA8E9C;AAuID,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBtE"}
|
|
@@ -3,49 +3,37 @@ import { dirname, join } from "node:path";
|
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
export const SKILL_DIR_NAME = "agent-workflow";
|
|
5
5
|
export const BUNDLED_SKILL_REL_PATH = `skills/${SKILL_DIR_NAME}`;
|
|
6
|
+
export const TARGET_ROOTS = {
|
|
7
|
+
claude: [".claude", "skills"],
|
|
8
|
+
codex: [".codex", "skills"],
|
|
9
|
+
agents: [".agents", "skills"],
|
|
10
|
+
};
|
|
11
|
+
export const AGENTS_LOCK_REL = [".agents", ".skill-lock.json"];
|
|
12
|
+
export const LEGACY_SKILL_NAME = "agent-workflow-manager";
|
|
13
|
+
const TARGET_CHOICES = ["claude", "codex", "agents", "all"];
|
|
14
|
+
const ALL_INSTALL_TARGETS = ["claude", "codex"];
|
|
6
15
|
export async function selfInstallSkill(args, ctx, resolveBundled = resolveBundledSkillPath) {
|
|
7
16
|
const force = args.flags.has("--force");
|
|
8
17
|
const dryRun = args.flags.has("--dry-run");
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
sourceArg = fromArg;
|
|
25
|
-
sourceKind = "path";
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
const bundled = await resolveBundled();
|
|
29
|
-
if (bundled === null) {
|
|
30
|
-
return {
|
|
31
|
-
ok: false,
|
|
32
|
-
error: {
|
|
33
|
-
code: "BUNDLED_NOT_FOUND",
|
|
34
|
-
message: `Bundled skill not found relative to the CLI install. This usually means you are running from a dev checkout without a build, or the tarball is missing 'skills/'. Use --from <local-path> to override.`,
|
|
35
|
-
},
|
|
36
|
-
exitCode: 1,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
sourceArg = bundled;
|
|
40
|
-
sourceKind = "bundled";
|
|
41
|
-
}
|
|
42
|
-
const destExists = await ctx.fs.exists(dest);
|
|
43
|
-
if (destExists && !force && !dryRun) {
|
|
18
|
+
const targetArg = args.values.get("target") ?? "all";
|
|
19
|
+
const targetsResult = resolveTargets(targetArg);
|
|
20
|
+
if (!targetsResult.ok)
|
|
21
|
+
return targetsResult.result;
|
|
22
|
+
const targets = targetsResult.value;
|
|
23
|
+
const sourceResult = await resolveSource(args.values.get("from"), resolveBundled);
|
|
24
|
+
if (!sourceResult.ok)
|
|
25
|
+
return sourceResult.result;
|
|
26
|
+
const { sourceArg, sourceKind } = sourceResult.value;
|
|
27
|
+
const destByTarget = buildDestByTarget(ctx.env.homeDir());
|
|
28
|
+
const existingTargets = await Promise.all(targets.map(async (t) => ({ target: t, exists: await ctx.fs.exists(destByTarget[t]) })));
|
|
29
|
+
const blocking = existingTargets.filter((t) => t.exists && !force && !dryRun);
|
|
30
|
+
if (blocking.length > 0) {
|
|
31
|
+
const names = blocking.map((t) => destByTarget[t.target]).join(", ");
|
|
44
32
|
return {
|
|
45
33
|
ok: false,
|
|
46
34
|
error: {
|
|
47
35
|
code: "DEST_EXISTS",
|
|
48
|
-
message: `Destination ${
|
|
36
|
+
message: `Destination already exists: ${names}. Use --force to overwrite, --dry-run to preview, or --target <claude|codex> to install only one.`,
|
|
49
37
|
},
|
|
50
38
|
exitCode: 1,
|
|
51
39
|
};
|
|
@@ -57,14 +45,104 @@ export async function selfInstallSkill(args, ctx, resolveBundled = resolveBundle
|
|
|
57
45
|
status: "dry-run",
|
|
58
46
|
source: sourceArg,
|
|
59
47
|
source_kind: sourceKind,
|
|
60
|
-
|
|
61
|
-
|
|
48
|
+
dests: existingTargets.map((t) => ({
|
|
49
|
+
target: t.target,
|
|
50
|
+
dest: destByTarget[t.target],
|
|
51
|
+
status: "dry-run",
|
|
52
|
+
overwrote_existing: t.exists,
|
|
53
|
+
})),
|
|
62
54
|
},
|
|
63
55
|
exitCode: 0,
|
|
64
56
|
};
|
|
65
57
|
}
|
|
66
|
-
const
|
|
67
|
-
if (
|
|
58
|
+
const validation = await validateSourceContents(sourceArg, ctx);
|
|
59
|
+
if (validation)
|
|
60
|
+
return validation;
|
|
61
|
+
const results = [];
|
|
62
|
+
for (const t of existingTargets) {
|
|
63
|
+
const dest = destByTarget[t.target];
|
|
64
|
+
if (t.exists && force) {
|
|
65
|
+
await rm(dest, { recursive: true, force: true });
|
|
66
|
+
}
|
|
67
|
+
const filesCopied = await copyTree(sourceArg, dest);
|
|
68
|
+
results.push({
|
|
69
|
+
target: t.target,
|
|
70
|
+
dest,
|
|
71
|
+
status: "installed",
|
|
72
|
+
overwrote_existing: t.exists,
|
|
73
|
+
files_copied: filesCopied,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
ok: true,
|
|
78
|
+
data: {
|
|
79
|
+
status: "installed",
|
|
80
|
+
source: sourceArg,
|
|
81
|
+
source_kind: sourceKind,
|
|
82
|
+
dests: results,
|
|
83
|
+
},
|
|
84
|
+
exitCode: 0,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function resolveTargets(targetArg) {
|
|
88
|
+
if (!TARGET_CHOICES.includes(targetArg)) {
|
|
89
|
+
return {
|
|
90
|
+
ok: false,
|
|
91
|
+
result: {
|
|
92
|
+
ok: false,
|
|
93
|
+
error: {
|
|
94
|
+
code: "INVALID_TARGET",
|
|
95
|
+
message: `--target must be one of: ${TARGET_CHOICES.join(", ")}. Got '${targetArg}'.`,
|
|
96
|
+
},
|
|
97
|
+
exitCode: 1,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const targets = targetArg === "all" ? [...ALL_INSTALL_TARGETS] : [targetArg];
|
|
102
|
+
return { ok: true, value: targets };
|
|
103
|
+
}
|
|
104
|
+
async function resolveSource(fromArg, resolveBundled) {
|
|
105
|
+
if (fromArg !== undefined) {
|
|
106
|
+
if (looksLikeRemoteUrl(fromArg)) {
|
|
107
|
+
return {
|
|
108
|
+
ok: false,
|
|
109
|
+
result: {
|
|
110
|
+
ok: false,
|
|
111
|
+
error: {
|
|
112
|
+
code: "INVALID_SOURCE",
|
|
113
|
+
message: "--from must be a local filesystem path. Remote URLs are no longer supported — the skill is bundled inside the CLI tarball. Drop --from to install the bundled skill, or pass a local checkout path.",
|
|
114
|
+
},
|
|
115
|
+
exitCode: 1,
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return { ok: true, value: { sourceArg: fromArg, sourceKind: "path" } };
|
|
120
|
+
}
|
|
121
|
+
const bundled = await resolveBundled();
|
|
122
|
+
if (bundled === null) {
|
|
123
|
+
return {
|
|
124
|
+
ok: false,
|
|
125
|
+
result: {
|
|
126
|
+
ok: false,
|
|
127
|
+
error: {
|
|
128
|
+
code: "BUNDLED_NOT_FOUND",
|
|
129
|
+
message: `Bundled skill not found relative to the CLI install. This usually means you are running from a dev checkout without a build, or the tarball is missing 'skills/'. Use --from <local-path> to override.`,
|
|
130
|
+
},
|
|
131
|
+
exitCode: 1,
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return { ok: true, value: { sourceArg: bundled, sourceKind: "bundled" } };
|
|
136
|
+
}
|
|
137
|
+
function buildDestByTarget(home) {
|
|
138
|
+
return {
|
|
139
|
+
claude: join(home, ...TARGET_ROOTS.claude, SKILL_DIR_NAME),
|
|
140
|
+
codex: join(home, ...TARGET_ROOTS.codex, SKILL_DIR_NAME),
|
|
141
|
+
agents: join(home, ...TARGET_ROOTS.agents, SKILL_DIR_NAME),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
async function validateSourceContents(sourceArg, ctx) {
|
|
145
|
+
if (!(await ctx.fs.exists(sourceArg))) {
|
|
68
146
|
return {
|
|
69
147
|
ok: false,
|
|
70
148
|
error: {
|
|
@@ -74,8 +152,7 @@ export async function selfInstallSkill(args, ctx, resolveBundled = resolveBundle
|
|
|
74
152
|
exitCode: 1,
|
|
75
153
|
};
|
|
76
154
|
}
|
|
77
|
-
const
|
|
78
|
-
const skillPath = join(stagingDir, "SKILL.md");
|
|
155
|
+
const skillPath = join(sourceArg, "SKILL.md");
|
|
79
156
|
if (!(await ctx.fs.exists(skillPath))) {
|
|
80
157
|
return {
|
|
81
158
|
ok: false,
|
|
@@ -97,29 +174,8 @@ export async function selfInstallSkill(args, ctx, resolveBundled = resolveBundle
|
|
|
97
174
|
exitCode: 1,
|
|
98
175
|
};
|
|
99
176
|
}
|
|
100
|
-
|
|
101
|
-
await rm(dest, { recursive: true, force: true });
|
|
102
|
-
}
|
|
103
|
-
const filesCopied = await copyTree(stagingDir, dest);
|
|
104
|
-
return {
|
|
105
|
-
ok: true,
|
|
106
|
-
data: {
|
|
107
|
-
status: "installed",
|
|
108
|
-
source: sourceArg,
|
|
109
|
-
source_kind: sourceKind,
|
|
110
|
-
dest,
|
|
111
|
-
files_copied: filesCopied,
|
|
112
|
-
overwrote_existing: destExists,
|
|
113
|
-
},
|
|
114
|
-
exitCode: 0,
|
|
115
|
-
};
|
|
177
|
+
return null;
|
|
116
178
|
}
|
|
117
|
-
/**
|
|
118
|
-
* Reject `--from` values that look like a remote URL up front so users get a
|
|
119
|
-
* clear error instead of a confusing "path does not exist". The skill is
|
|
120
|
-
* bundled-only since v3.0.2 — the standalone repo `Tacuchi/agent-workflow-manager`
|
|
121
|
-
* is no longer maintained.
|
|
122
|
-
*/
|
|
123
179
|
function looksLikeRemoteUrl(value) {
|
|
124
180
|
return /^(https?:\/\/|git@|ssh:\/\/|git:\/\/)/.test(value);
|
|
125
181
|
}
|
|
@@ -144,15 +200,6 @@ async function copyTree(src, dest) {
|
|
|
144
200
|
});
|
|
145
201
|
return count;
|
|
146
202
|
}
|
|
147
|
-
/**
|
|
148
|
-
* Resolve the bundled skill path by walking up from this module's directory
|
|
149
|
-
* until a `skills/agent-workflow/SKILL.md` is found. Returns the directory
|
|
150
|
-
* containing SKILL.md, or null if no candidate is reachable.
|
|
151
|
-
*
|
|
152
|
-
* Works in both dist (`dist/application/self/install-skill.js`) and dev
|
|
153
|
-
* (`src/application/self/install-skill.ts` via a runner) layouts because the
|
|
154
|
-
* walk-up looks for the marker file rather than a fixed depth.
|
|
155
|
-
*/
|
|
156
203
|
export async function resolveBundledSkillPath() {
|
|
157
204
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
158
205
|
let current = here;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../../src/application/self/install-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAKzC,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../../src/application/self/install-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ParsedArgs } from "../../cli/parser.js";
|
|
2
|
+
import type { CliContext } from "../../cli/types.js";
|
|
3
|
+
import type { CommandResult } from "../../domain/types.js";
|
|
4
|
+
import { type InstallTarget } from "./install-skill.js";
|
|
5
|
+
export type UninstallTargetChoice = InstallTarget | "all";
|
|
6
|
+
export interface UninstallRemoval {
|
|
7
|
+
target: InstallTarget;
|
|
8
|
+
path: string;
|
|
9
|
+
kind: "canonical" | "legacy";
|
|
10
|
+
status: "removed" | "dry-run" | "skipped";
|
|
11
|
+
reason?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface SelfUninstallSkillData {
|
|
14
|
+
status: "removed" | "dry-run" | "noop";
|
|
15
|
+
removed: UninstallRemoval[];
|
|
16
|
+
lock_updated: boolean;
|
|
17
|
+
lock_path?: string;
|
|
18
|
+
lock_warning?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function selfUninstallSkill(args: ParsedArgs, ctx: CliContext): Promise<CommandResult<SelfUninstallSkillData>>;
|
|
21
|
+
//# sourceMappingURL=uninstall-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall-skill.d.ts","sourceRoot":"","sources":["../../../src/application/self/uninstall-skill.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAEL,KAAK,aAAa,EAInB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG,KAAK,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC7B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAKD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAwChD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { AGENTS_LOCK_REL, LEGACY_SKILL_NAME, SKILL_DIR_NAME, TARGET_ROOTS, } from "./install-skill.js";
|
|
4
|
+
const TARGET_CHOICES = ["claude", "codex", "agents", "all"];
|
|
5
|
+
const ALL_TARGETS = ["claude", "codex", "agents"];
|
|
6
|
+
export async function selfUninstallSkill(args, ctx) {
|
|
7
|
+
const dryRun = args.flags.has("--dry-run");
|
|
8
|
+
const includeLegacy = args.flags.has("--legacy");
|
|
9
|
+
const targetArg = (args.values.get("target") ?? "all");
|
|
10
|
+
if (!TARGET_CHOICES.includes(targetArg)) {
|
|
11
|
+
return {
|
|
12
|
+
ok: false,
|
|
13
|
+
error: {
|
|
14
|
+
code: "INVALID_TARGET",
|
|
15
|
+
message: `--target must be one of: ${TARGET_CHOICES.join(", ")}. Got '${targetArg}'.`,
|
|
16
|
+
},
|
|
17
|
+
exitCode: 1,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const targets = targetArg === "all" ? [...ALL_TARGETS] : [targetArg];
|
|
21
|
+
const home = ctx.env.homeDir();
|
|
22
|
+
const removals = [];
|
|
23
|
+
for (const target of targets) {
|
|
24
|
+
removals.push(...(await removeFromTarget(ctx, home, target, includeLegacy, dryRun)));
|
|
25
|
+
}
|
|
26
|
+
const lockResult = targets.includes("agents")
|
|
27
|
+
? await updateAgentsLock(ctx, home, includeLegacy, dryRun)
|
|
28
|
+
: { updated: false };
|
|
29
|
+
return {
|
|
30
|
+
ok: true,
|
|
31
|
+
data: {
|
|
32
|
+
status: resolveStatus(dryRun, removals.length),
|
|
33
|
+
removed: removals,
|
|
34
|
+
lock_updated: lockResult.updated,
|
|
35
|
+
...(lockResult.path ? { lock_path: lockResult.path } : {}),
|
|
36
|
+
...(lockResult.warning ? { lock_warning: lockResult.warning } : {}),
|
|
37
|
+
},
|
|
38
|
+
exitCode: 0,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
async function removeFromTarget(ctx, home, target, includeLegacy, dryRun) {
|
|
42
|
+
const out = [];
|
|
43
|
+
const canonical = join(home, ...TARGET_ROOTS[target], SKILL_DIR_NAME);
|
|
44
|
+
if (await ctx.fs.exists(canonical)) {
|
|
45
|
+
if (!dryRun)
|
|
46
|
+
await rm(canonical, { recursive: true, force: true });
|
|
47
|
+
out.push({
|
|
48
|
+
target,
|
|
49
|
+
path: canonical,
|
|
50
|
+
kind: "canonical",
|
|
51
|
+
status: dryRun ? "dry-run" : "removed",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
if (includeLegacy) {
|
|
55
|
+
const legacy = join(home, ...TARGET_ROOTS[target], LEGACY_SKILL_NAME);
|
|
56
|
+
if (await ctx.fs.exists(legacy)) {
|
|
57
|
+
if (!dryRun)
|
|
58
|
+
await rm(legacy, { recursive: true, force: true });
|
|
59
|
+
out.push({
|
|
60
|
+
target,
|
|
61
|
+
path: legacy,
|
|
62
|
+
kind: "legacy",
|
|
63
|
+
status: dryRun ? "dry-run" : "removed",
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
function resolveStatus(dryRun, removedCount) {
|
|
70
|
+
if (dryRun)
|
|
71
|
+
return "dry-run";
|
|
72
|
+
return removedCount === 0 ? "noop" : "removed";
|
|
73
|
+
}
|
|
74
|
+
async function updateAgentsLock(ctx, home, includeLegacy, dryRun) {
|
|
75
|
+
const lockPath = join(home, ...AGENTS_LOCK_REL);
|
|
76
|
+
if (!(await ctx.fs.exists(lockPath)))
|
|
77
|
+
return { updated: false };
|
|
78
|
+
let parsed;
|
|
79
|
+
try {
|
|
80
|
+
parsed = JSON.parse(await ctx.fs.readText(lockPath));
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
return {
|
|
84
|
+
updated: false,
|
|
85
|
+
path: lockPath,
|
|
86
|
+
warning: `Could not parse ${lockPath}: ${err.message}. Lock left untouched.`,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const skills = (parsed.skills ?? {});
|
|
90
|
+
const before = Object.keys(skills);
|
|
91
|
+
const namesToRemove = [SKILL_DIR_NAME, ...(includeLegacy ? [LEGACY_SKILL_NAME] : [])];
|
|
92
|
+
for (const name of namesToRemove) {
|
|
93
|
+
delete skills[name];
|
|
94
|
+
}
|
|
95
|
+
const after = Object.keys(skills);
|
|
96
|
+
const changed = before.length !== after.length;
|
|
97
|
+
if (!changed)
|
|
98
|
+
return { updated: false, path: lockPath };
|
|
99
|
+
if (!dryRun) {
|
|
100
|
+
parsed.skills = skills;
|
|
101
|
+
await writeFile(lockPath, `${JSON.stringify(parsed, null, 2)}\n`, "utf8");
|
|
102
|
+
}
|
|
103
|
+
return { updated: true, path: lockPath };
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=uninstall-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall-skill.js","sourceRoot":"","sources":["../../../src/application/self/uninstall-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/self.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"self.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/self.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAYjD,eAAO,MAAM,WAAW,EAAE,UAyCzB,CAAC"}
|
|
@@ -1,11 +1,20 @@
|
|
|
1
|
+
import { selfBootstrap } from "../../application/self/bootstrap.js";
|
|
1
2
|
import { selfDoctor } from "../../application/self/doctor-self.js";
|
|
2
3
|
import { selfInstallSkill } from "../../application/self/install-skill.js";
|
|
3
4
|
import { selfNamespace } from "../../application/self/namespace-info.js";
|
|
5
|
+
import { selfUninstallSkill } from "../../application/self/uninstall-skill.js";
|
|
4
6
|
import { selfUpdate } from "../../application/self/update-self.js";
|
|
5
|
-
const SELF_SUBCOMMANDS = [
|
|
7
|
+
const SELF_SUBCOMMANDS = [
|
|
8
|
+
"namespace",
|
|
9
|
+
"doctor",
|
|
10
|
+
"update",
|
|
11
|
+
"install-skill",
|
|
12
|
+
"uninstall-skill",
|
|
13
|
+
"bootstrap",
|
|
14
|
+
];
|
|
6
15
|
export const selfCommand = {
|
|
7
16
|
name: "self",
|
|
8
|
-
describe: "Manage the agent-workflow CLI itself (namespace, doctor, update, install-skill).",
|
|
17
|
+
describe: "Manage the agent-workflow CLI itself (namespace, doctor, update, install-skill, uninstall-skill, bootstrap).",
|
|
9
18
|
async execute(args, ctx) {
|
|
10
19
|
const sub = args.rest[0];
|
|
11
20
|
switch (sub) {
|
|
@@ -17,13 +26,17 @@ export const selfCommand = {
|
|
|
17
26
|
return selfUpdate(args, ctx);
|
|
18
27
|
case "install-skill":
|
|
19
28
|
return selfInstallSkill(args, ctx);
|
|
29
|
+
case "uninstall-skill":
|
|
30
|
+
return selfUninstallSkill(args, ctx);
|
|
31
|
+
case "bootstrap":
|
|
32
|
+
return selfBootstrap(args, ctx);
|
|
20
33
|
case undefined:
|
|
21
34
|
case "":
|
|
22
35
|
return {
|
|
23
36
|
ok: true,
|
|
24
37
|
data: {
|
|
25
38
|
subcommands: [...SELF_SUBCOMMANDS],
|
|
26
|
-
help_hint: "uso: aw self <subcommand>. Ej: 'aw self
|
|
39
|
+
help_hint: "uso: aw self <subcommand>. Ej: 'aw self bootstrap' (instalación limpia guiada) o 'aw self doctor'.",
|
|
27
40
|
},
|
|
28
41
|
exitCode: 0,
|
|
29
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self.js","sourceRoot":"","sources":["../../../src/cli/commands/self.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAMnE,MAAM,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"self.js","sourceRoot":"","sources":["../../../src/cli/commands/self.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAMnE,MAAM,gBAAgB,GAAG;IACvB,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,eAAe;IACf,iBAAiB;IACjB,WAAW;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAe;IACrC,IAAI,EAAE,MAAM;IACZ,QAAQ,EACN,8GAA8G;IAChH,KAAK,CAAC,OAAO,CAAC,IAAgB,EAAE,GAAe;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,WAAW;gBACd,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;YAC5B,KAAK,QAAQ;gBACX,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;YACzB,KAAK,QAAQ;gBACX,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC/B,KAAK,eAAe;gBAClB,OAAO,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACrC,KAAK,iBAAiB;gBACpB,OAAO,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACvC,KAAK,WAAW;gBACd,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAClC,KAAK,SAAS,CAAC;YACf,KAAK,EAAE;gBACL,OAAO;oBACL,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE;wBACJ,WAAW,EAAE,CAAC,GAAG,gBAAgB,CAAC;wBAClC,SAAS,EACP,oGAAoG;qBACvG;oBACD,QAAQ,EAAE,CAAC;iBACZ,CAAC;YACJ;gBACE,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE;wBACL,IAAI,EAAE,eAAe;wBACrB,OAAO,EAAE,6BAA6B,GAAG,iBAAiB,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;qBACxF;oBACD,QAAQ,EAAE,CAAC;iBACZ,CAAC;QACN,CAAC;IACH,CAAC;CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tacuchi/agent-workflow-cli",
|
|
3
|
-
"version": "5.
|
|
4
|
-
"description": "Agnostic runtime CLI for session-lifecycle workflows. Auto-detects namespace from any `.<ns>/sessions/` dir in CWD; falls back to 'agent-workflow'. Plugins like `qtc-workflow-plugin` reclaim a fixed namespace via SessionStart hook (writes to `~/.config/agent-workflow/namespace`). Bundles the universal `agent-workflow` skill in the tarball — `self install-skill` copies it from the bundled location to `~/.claude/skills/agent-workflow
|
|
3
|
+
"version": "5.7.0",
|
|
4
|
+
"description": "Agnostic runtime CLI for session-lifecycle workflows. Auto-detects namespace from any `.<ns>/sessions/` dir in CWD; falls back to 'agent-workflow'. Plugins like `qtc-workflow-plugin` reclaim a fixed namespace via SessionStart hook (writes to `~/.config/agent-workflow/namespace`). Bundles the universal `agent-workflow` skill in the tarball — `self install-skill` copies it from the bundled location to `~/.claude/skills/agent-workflow/` and `~/.codex/skills/agent-workflow/` (dual-target by default; opt-out with `--target claude|codex`). Override the source with `--from <local-path>` for skill development.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"agent-workflow": "./dist/cli/main.js",
|