@tacuchi/agent-workflow-cli 5.5.1 → 5.6.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/doctor-self.d.ts +10 -4
- package/dist/application/self/doctor-self.d.ts.map +1 -1
- package/dist/application/self/doctor-self.js +25 -13
- package/dist/application/self/doctor-self.js.map +1 -1
- package/dist/application/self/install-skill.d.ts +12 -13
- package/dist/application/self/install-skill.d.ts.map +1 -1
- package/dist/application/self/install-skill.js +115 -73
- package/dist/application/self/install-skill.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,5 +1,14 @@
|
|
|
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
|
+
}
|
|
3
12
|
export interface SelfDoctorReport {
|
|
4
13
|
cli_version: string;
|
|
5
14
|
namespace: {
|
|
@@ -20,10 +29,7 @@ export interface SelfDoctorReport {
|
|
|
20
29
|
};
|
|
21
30
|
skill: {
|
|
22
31
|
installed: boolean;
|
|
23
|
-
|
|
24
|
-
legacy_leftover?: boolean;
|
|
25
|
-
legacy_leftover_path?: string;
|
|
26
|
-
legacy_leftover_warning?: string;
|
|
32
|
+
targets: SkillTargetReport[];
|
|
27
33
|
};
|
|
28
34
|
}
|
|
29
35
|
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,EAAE,KAAK,aAAa,EAAgC,MAAM,oBAAoB,CAAC;AAEtF,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;CAClC;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,CAsD1F"}
|
|
@@ -1,11 +1,30 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
import { SKILL_DIR_NAME, TARGET_ROOTS } from "./install-skill.js";
|
|
3
4
|
const LEGACY_SKILL_DIR = "agent-workflow-manager";
|
|
4
5
|
export async function selfDoctor(ctx) {
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
6
|
+
const home = ctx.env.homeDir();
|
|
7
|
+
const targets = ["claude", "codex"];
|
|
8
|
+
const targetReports = [];
|
|
9
|
+
for (const target of targets) {
|
|
10
|
+
const skillPath = join(home, ...TARGET_ROOTS[target], SKILL_DIR_NAME);
|
|
11
|
+
const legacyPath = join(home, ...TARGET_ROOTS[target], LEGACY_SKILL_DIR);
|
|
12
|
+
const installed = await ctx.fs.exists(skillPath);
|
|
13
|
+
const legacyLeftover = await ctx.fs.exists(legacyPath);
|
|
14
|
+
targetReports.push({
|
|
15
|
+
target,
|
|
16
|
+
path: skillPath,
|
|
17
|
+
installed,
|
|
18
|
+
...(legacyLeftover
|
|
19
|
+
? {
|
|
20
|
+
legacy_leftover: true,
|
|
21
|
+
legacy_leftover_path: legacyPath,
|
|
22
|
+
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.`,
|
|
23
|
+
}
|
|
24
|
+
: {}),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const installedAny = targetReports.some((t) => t.installed);
|
|
9
28
|
return {
|
|
10
29
|
ok: true,
|
|
11
30
|
data: {
|
|
@@ -27,15 +46,8 @@ export async function selfDoctor(ctx) {
|
|
|
27
46
|
...(ctx.runtime.displayName ? { display_name: ctx.runtime.displayName } : {}),
|
|
28
47
|
},
|
|
29
48
|
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
|
-
: {}),
|
|
49
|
+
installed: installedAny,
|
|
50
|
+
targets: targetReports,
|
|
39
51
|
},
|
|
40
52
|
},
|
|
41
53
|
exitCode: 0,
|
|
@@ -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,22 @@ 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";
|
|
7
|
+
export declare const TARGET_ROOTS: Record<InstallTarget, readonly string[]>;
|
|
8
|
+
export interface SelfInstallTargetResult {
|
|
9
|
+
target: InstallTarget;
|
|
10
|
+
dest: string;
|
|
11
|
+
status: "installed" | "dry-run" | "skipped";
|
|
12
|
+
overwrote_existing: boolean;
|
|
13
|
+
files_copied?: number;
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
6
16
|
export interface SelfInstallSkillData {
|
|
7
|
-
status: "installed" | "dry-run";
|
|
17
|
+
status: "installed" | "dry-run" | "partial";
|
|
8
18
|
source: string;
|
|
9
19
|
source_kind: "path" | "bundled";
|
|
10
|
-
|
|
11
|
-
files_copied?: number;
|
|
12
|
-
overwrote_existing?: boolean;
|
|
20
|
+
dests: SelfInstallTargetResult[];
|
|
13
21
|
}
|
|
14
22
|
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
23
|
export declare function resolveBundledSkillPath(): Promise<string | null>;
|
|
25
24
|
//# 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,CAAC;AAE/C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAGjE,CAAC;AAEF,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;AAID,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;AAsID,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBtE"}
|
|
@@ -3,49 +3,33 @@ 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
|
+
};
|
|
10
|
+
const TARGET_CHOICES = ["claude", "codex", "all"];
|
|
6
11
|
export async function selfInstallSkill(args, ctx, resolveBundled = resolveBundledSkillPath) {
|
|
7
12
|
const force = args.flags.has("--force");
|
|
8
13
|
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) {
|
|
14
|
+
const targetArg = args.values.get("target") ?? "all";
|
|
15
|
+
const targetsResult = resolveTargets(targetArg);
|
|
16
|
+
if (!targetsResult.ok)
|
|
17
|
+
return targetsResult.result;
|
|
18
|
+
const targets = targetsResult.value;
|
|
19
|
+
const sourceResult = await resolveSource(args.values.get("from"), resolveBundled);
|
|
20
|
+
if (!sourceResult.ok)
|
|
21
|
+
return sourceResult.result;
|
|
22
|
+
const { sourceArg, sourceKind } = sourceResult.value;
|
|
23
|
+
const destByTarget = buildDestByTarget(ctx.env.homeDir());
|
|
24
|
+
const existingTargets = await Promise.all(targets.map(async (t) => ({ target: t, exists: await ctx.fs.exists(destByTarget[t]) })));
|
|
25
|
+
const blocking = existingTargets.filter((t) => t.exists && !force && !dryRun);
|
|
26
|
+
if (blocking.length > 0) {
|
|
27
|
+
const names = blocking.map((t) => destByTarget[t.target]).join(", ");
|
|
44
28
|
return {
|
|
45
29
|
ok: false,
|
|
46
30
|
error: {
|
|
47
31
|
code: "DEST_EXISTS",
|
|
48
|
-
message: `Destination ${
|
|
32
|
+
message: `Destination already exists: ${names}. Use --force to overwrite, --dry-run to preview, or --target <claude|codex> to install only one.`,
|
|
49
33
|
},
|
|
50
34
|
exitCode: 1,
|
|
51
35
|
};
|
|
@@ -57,14 +41,103 @@ export async function selfInstallSkill(args, ctx, resolveBundled = resolveBundle
|
|
|
57
41
|
status: "dry-run",
|
|
58
42
|
source: sourceArg,
|
|
59
43
|
source_kind: sourceKind,
|
|
60
|
-
|
|
61
|
-
|
|
44
|
+
dests: existingTargets.map((t) => ({
|
|
45
|
+
target: t.target,
|
|
46
|
+
dest: destByTarget[t.target],
|
|
47
|
+
status: "dry-run",
|
|
48
|
+
overwrote_existing: t.exists,
|
|
49
|
+
})),
|
|
62
50
|
},
|
|
63
51
|
exitCode: 0,
|
|
64
52
|
};
|
|
65
53
|
}
|
|
66
|
-
const
|
|
67
|
-
if (
|
|
54
|
+
const validation = await validateSourceContents(sourceArg, ctx);
|
|
55
|
+
if (validation)
|
|
56
|
+
return validation;
|
|
57
|
+
const results = [];
|
|
58
|
+
for (const t of existingTargets) {
|
|
59
|
+
const dest = destByTarget[t.target];
|
|
60
|
+
if (t.exists && force) {
|
|
61
|
+
await rm(dest, { recursive: true, force: true });
|
|
62
|
+
}
|
|
63
|
+
const filesCopied = await copyTree(sourceArg, dest);
|
|
64
|
+
results.push({
|
|
65
|
+
target: t.target,
|
|
66
|
+
dest,
|
|
67
|
+
status: "installed",
|
|
68
|
+
overwrote_existing: t.exists,
|
|
69
|
+
files_copied: filesCopied,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
ok: true,
|
|
74
|
+
data: {
|
|
75
|
+
status: "installed",
|
|
76
|
+
source: sourceArg,
|
|
77
|
+
source_kind: sourceKind,
|
|
78
|
+
dests: results,
|
|
79
|
+
},
|
|
80
|
+
exitCode: 0,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function resolveTargets(targetArg) {
|
|
84
|
+
if (!TARGET_CHOICES.includes(targetArg)) {
|
|
85
|
+
return {
|
|
86
|
+
ok: false,
|
|
87
|
+
result: {
|
|
88
|
+
ok: false,
|
|
89
|
+
error: {
|
|
90
|
+
code: "INVALID_TARGET",
|
|
91
|
+
message: `--target must be one of: ${TARGET_CHOICES.join(", ")}. Got '${targetArg}'.`,
|
|
92
|
+
},
|
|
93
|
+
exitCode: 1,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const targets = targetArg === "all" ? ["claude", "codex"] : [targetArg];
|
|
98
|
+
return { ok: true, value: targets };
|
|
99
|
+
}
|
|
100
|
+
async function resolveSource(fromArg, resolveBundled) {
|
|
101
|
+
if (fromArg !== undefined) {
|
|
102
|
+
if (looksLikeRemoteUrl(fromArg)) {
|
|
103
|
+
return {
|
|
104
|
+
ok: false,
|
|
105
|
+
result: {
|
|
106
|
+
ok: false,
|
|
107
|
+
error: {
|
|
108
|
+
code: "INVALID_SOURCE",
|
|
109
|
+
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.",
|
|
110
|
+
},
|
|
111
|
+
exitCode: 1,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return { ok: true, value: { sourceArg: fromArg, sourceKind: "path" } };
|
|
116
|
+
}
|
|
117
|
+
const bundled = await resolveBundled();
|
|
118
|
+
if (bundled === null) {
|
|
119
|
+
return {
|
|
120
|
+
ok: false,
|
|
121
|
+
result: {
|
|
122
|
+
ok: false,
|
|
123
|
+
error: {
|
|
124
|
+
code: "BUNDLED_NOT_FOUND",
|
|
125
|
+
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.`,
|
|
126
|
+
},
|
|
127
|
+
exitCode: 1,
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return { ok: true, value: { sourceArg: bundled, sourceKind: "bundled" } };
|
|
132
|
+
}
|
|
133
|
+
function buildDestByTarget(home) {
|
|
134
|
+
return {
|
|
135
|
+
claude: join(home, ...TARGET_ROOTS.claude, SKILL_DIR_NAME),
|
|
136
|
+
codex: join(home, ...TARGET_ROOTS.codex, SKILL_DIR_NAME),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
async function validateSourceContents(sourceArg, ctx) {
|
|
140
|
+
if (!(await ctx.fs.exists(sourceArg))) {
|
|
68
141
|
return {
|
|
69
142
|
ok: false,
|
|
70
143
|
error: {
|
|
@@ -74,8 +147,7 @@ export async function selfInstallSkill(args, ctx, resolveBundled = resolveBundle
|
|
|
74
147
|
exitCode: 1,
|
|
75
148
|
};
|
|
76
149
|
}
|
|
77
|
-
const
|
|
78
|
-
const skillPath = join(stagingDir, "SKILL.md");
|
|
150
|
+
const skillPath = join(sourceArg, "SKILL.md");
|
|
79
151
|
if (!(await ctx.fs.exists(skillPath))) {
|
|
80
152
|
return {
|
|
81
153
|
ok: false,
|
|
@@ -97,29 +169,8 @@ export async function selfInstallSkill(args, ctx, resolveBundled = resolveBundle
|
|
|
97
169
|
exitCode: 1,
|
|
98
170
|
};
|
|
99
171
|
}
|
|
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
|
-
};
|
|
172
|
+
return null;
|
|
116
173
|
}
|
|
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
174
|
function looksLikeRemoteUrl(value) {
|
|
124
175
|
return /^(https?:\/\/|git@|ssh:\/\/|git:\/\/)/.test(value);
|
|
125
176
|
}
|
|
@@ -144,15 +195,6 @@ async function copyTree(src, dest) {
|
|
|
144
195
|
});
|
|
145
196
|
return count;
|
|
146
197
|
}
|
|
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
198
|
export async function resolveBundledSkillPath() {
|
|
157
199
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
158
200
|
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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"}
|
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.6.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",
|