vskill 0.5.103 → 0.5.104

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.
Files changed (63) hide show
  1. package/README.md +24 -2
  2. package/agents.json +1 -1
  3. package/dist/agents/agents-registry.d.ts +13 -2
  4. package/dist/agents/agents-registry.js +120 -57
  5. package/dist/agents/agents-registry.js.map +1 -1
  6. package/dist/commands/diff.d.ts +9 -0
  7. package/dist/commands/diff.js +139 -0
  8. package/dist/commands/diff.js.map +1 -0
  9. package/dist/commands/eval/serve.js +25 -83
  10. package/dist/commands/eval/serve.js.map +1 -1
  11. package/dist/commands/skill.d.ts +32 -0
  12. package/dist/commands/skill.js +392 -0
  13. package/dist/commands/skill.js.map +1 -0
  14. package/dist/commands/update.js +15 -4
  15. package/dist/commands/update.js.map +1 -1
  16. package/dist/core/skill-emitter.d.ts +37 -0
  17. package/dist/core/skill-emitter.js +333 -0
  18. package/dist/core/skill-emitter.js.map +1 -0
  19. package/dist/core/skill-generator.d.ts +27 -0
  20. package/dist/core/skill-generator.js +100 -0
  21. package/dist/core/skill-generator.js.map +1 -0
  22. package/dist/eval/skill-scanner.d.ts +0 -5
  23. package/dist/eval/skill-scanner.js +0 -12
  24. package/dist/eval/skill-scanner.js.map +1 -1
  25. package/dist/eval-server/api-routes.d.ts +0 -7
  26. package/dist/eval-server/api-routes.js +19 -52
  27. package/dist/eval-server/api-routes.js.map +1 -1
  28. package/dist/eval-server/settings-store.d.ts +26 -33
  29. package/dist/eval-server/settings-store.js +145 -245
  30. package/dist/eval-server/settings-store.js.map +1 -1
  31. package/dist/eval-server/skill-create-routes.d.ts +62 -0
  32. package/dist/eval-server/skill-create-routes.js +79 -132
  33. package/dist/eval-server/skill-create-routes.js.map +1 -1
  34. package/dist/eval-ui/assets/{CommandPalette-6cLEufX0.js → CommandPalette-DiPALzlG.js} +1 -1
  35. package/dist/eval-ui/assets/{CreateSkillPage-kn7xDaAP.js → CreateSkillPage-BMrFELep.js} +1 -1
  36. package/dist/eval-ui/assets/{UpdateDropdown-9qR5NxTi.js → UpdateDropdown-Bj8kZzuR.js} +1 -1
  37. package/dist/eval-ui/assets/_shimNode-D3bBqrAh.js +1 -0
  38. package/dist/eval-ui/assets/{index-4LdVR3Lo.js → index-BSPDkfZG.js} +37 -37
  39. package/dist/eval-ui/assets/resolve-binary-DIxhrZ6O.js +2 -0
  40. package/dist/eval-ui/index.html +1 -1
  41. package/dist/index.js +3 -0
  42. package/dist/index.js.map +1 -1
  43. package/dist/installer/canonical.d.ts +2 -0
  44. package/dist/installer/canonical.js +35 -4
  45. package/dist/installer/canonical.js.map +1 -1
  46. package/dist/studio/lib/ops-log.js +1 -4
  47. package/dist/studio/lib/ops-log.js.map +1 -1
  48. package/dist/studio/lib/scope-transfer.d.ts +0 -10
  49. package/dist/studio/lib/scope-transfer.js +13 -116
  50. package/dist/studio/lib/scope-transfer.js.map +1 -1
  51. package/dist/studio/routes/ops.js +3 -26
  52. package/dist/studio/routes/ops.js.map +1 -1
  53. package/dist/studio/routes/promote.js +15 -9
  54. package/dist/studio/routes/promote.js.map +1 -1
  55. package/dist/studio/routes/test-install.js +11 -4
  56. package/dist/studio/routes/test-install.js.map +1 -1
  57. package/dist/utils/agent-filter.js +5 -4
  58. package/dist/utils/agent-filter.js.map +1 -1
  59. package/dist/utils/resolve-binary.d.ts +22 -0
  60. package/dist/utils/resolve-binary.js +44 -0
  61. package/dist/utils/resolve-binary.js.map +1 -1
  62. package/package.json +1 -1
  63. package/scripts/preuninstall.cjs +2 -9
@@ -0,0 +1,392 @@
1
+ // ---------------------------------------------------------------------------
2
+ // vskill skill — subcommand family for the skill-builder workflow.
3
+ //
4
+ // Increment 0670 (T-004..T-007). Exposes:
5
+ // vskill skill new — generate + emit a new skill from a prompt
6
+ // vskill skill import — re-emit an existing SKILL.md against targets
7
+ // vskill skill list — thin alias for `vskill list`
8
+ // vskill skill info — show frontmatter + divergence report
9
+ // vskill skill publish — alias for `vskill submit`
10
+ //
11
+ // Satisfies AC-US3-01..12, AC-US2-03, AC-US2-07, AC-US1-07.
12
+ // ---------------------------------------------------------------------------
13
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
14
+ import { dirname, isAbsolute, join, resolve } from "node:path";
15
+ import { AGENTS_REGISTRY, LEGACY_AGENT_IDS, getAgent, getUniversalAgents, } from "../agents/agents-registry.js";
16
+ import { generateSkill } from "../core/skill-generator.js";
17
+ import { isSkillCreatorInstalled } from "../utils/skill-creator-detection.js";
18
+ import { bold, cyan, dim, green, red } from "../utils/output.js";
19
+ import { listCommand } from "./list.js";
20
+ import { submitCommand } from "./submit.js";
21
+ function defaultEmitSkillStub(generated, options) {
22
+ const slug = generated.name || "skill";
23
+ const files = options.targetAgents.map((id) => ({
24
+ targetId: id,
25
+ relativePath: `.agents/skills/${slug}/SKILL.md`,
26
+ content: buildStubSkillMd(generated),
27
+ }));
28
+ return {
29
+ files,
30
+ divergences: [],
31
+ skipped: [],
32
+ divergenceReport: `# Divergence report for ${slug}\n\n(Chain D stub — no divergences tracked yet.)\n`,
33
+ };
34
+ }
35
+ function buildStubSkillMd(generated) {
36
+ const { name, description, model, allowedTools, body } = generated;
37
+ const fm = ["---"];
38
+ if (description)
39
+ fm.push(`description: ${JSON.stringify(description)}`);
40
+ if (allowedTools)
41
+ fm.push(`allowed-tools: ${allowedTools}`);
42
+ if (model)
43
+ fm.push(`model: ${model}`);
44
+ fm.push(`name: ${name}`);
45
+ fm.push("---", "");
46
+ return `${fm.join("\n")}${body || ""}\n`;
47
+ }
48
+ /**
49
+ * Tests inject their own mock via this setter instead of using `vi.mock()`
50
+ * on a path that may not resolve during TS compile. When Chain D merges,
51
+ * this setter disappears along with the stub above.
52
+ */
53
+ let emitSkillImpl = defaultEmitSkillStub;
54
+ export function __setEmitSkillForTest(fn) {
55
+ emitSkillImpl = fn ?? defaultEmitSkillStub;
56
+ }
57
+ // ---------------------------------------------------------------------------
58
+ // Host-agent detection for the sentinel file (AC-US1-07)
59
+ // ---------------------------------------------------------------------------
60
+ function detectHostAgent() {
61
+ const env = process.env;
62
+ if (env.CLAUDECODE || env.CLAUDE_CODE_BIN || env.CLAUDE_CODE_INSTANCE) {
63
+ return "claude-code";
64
+ }
65
+ if (env.CODEX_API_KEY || env.CODEX_SESSION || env.CODEX_HOME) {
66
+ return "codex";
67
+ }
68
+ if (env.CURSOR_SESSION || env.CURSOR_AGENT_ID)
69
+ return "cursor";
70
+ if (env.WINDSURF_SESSION_ID)
71
+ return "windsurf";
72
+ if (env.GEMINI_CLI_SESSION || env.GEMINI_API_KEY)
73
+ return "gemini-cli";
74
+ if (env.VSKILL_HOST_AGENT)
75
+ return env.VSKILL_HOST_AGENT;
76
+ return "unknown";
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // Target resolution (AC-US3-03, AC-US3-04, AC-US3-11)
80
+ // ---------------------------------------------------------------------------
81
+ function resolveTargets(flag) {
82
+ if (!flag || flag.trim() === "") {
83
+ // Default: 8 universal agents, runtime-filtered so the set expands when
84
+ // new universal agents land in the registry.
85
+ const ids = getUniversalAgents().map((a) => a.id);
86
+ return { ok: true, ids };
87
+ }
88
+ const normalized = flag.trim().toLowerCase();
89
+ if (normalized === "all") {
90
+ return { ok: true, ids: AGENTS_REGISTRY.map((a) => a.id) };
91
+ }
92
+ const requested = flag
93
+ .split(",")
94
+ .map((s) => s.trim())
95
+ .filter((s) => s.length > 0);
96
+ const resolved = [];
97
+ const seen = new Set();
98
+ for (const raw of requested) {
99
+ const canonical = LEGACY_AGENT_IDS[raw] ?? raw;
100
+ const agent = getAgent(canonical);
101
+ if (!agent) {
102
+ return {
103
+ ok: false,
104
+ error: `Unknown agent id: ${raw}. Run 'vskill skill new --list-targets' for valid ids.`,
105
+ };
106
+ }
107
+ if (!seen.has(agent.id)) {
108
+ seen.add(agent.id);
109
+ resolved.push(agent.id);
110
+ }
111
+ }
112
+ return { ok: true, ids: resolved };
113
+ }
114
+ // ---------------------------------------------------------------------------
115
+ // Pipeline helpers shared by `new` and `import`
116
+ // ---------------------------------------------------------------------------
117
+ function writeEmittedFiles(cwd, result, slug) {
118
+ for (const file of result.files) {
119
+ const fullPath = isAbsolute(file.relativePath)
120
+ ? file.relativePath
121
+ : join(cwd, file.relativePath);
122
+ mkdirSync(dirname(fullPath), { recursive: true });
123
+ writeFileSync(fullPath, file.content, "utf-8");
124
+ }
125
+ const reportPath = join(cwd, `${slug}-divergence.md`);
126
+ writeFileSync(reportPath, result.divergenceReport, "utf-8");
127
+ return { filesWritten: result.files.length, reportPath };
128
+ }
129
+ function writeSentinel(cwd, trigger, targets, prompt) {
130
+ const sentinelPath = join(cwd, ".skill-builder-invoked.json");
131
+ const sentinel = {
132
+ trigger,
133
+ agent: detectHostAgent(),
134
+ timestamp: new Date().toISOString(),
135
+ targets,
136
+ prompt,
137
+ };
138
+ writeFileSync(sentinelPath, JSON.stringify(sentinel, null, 2), "utf-8");
139
+ }
140
+ function exit(code) {
141
+ // Wrap through process.exit so the Vitest spy can intercept without
142
+ // terminating the test worker.
143
+ process.exit(code);
144
+ // process.exit does not return; the cast satisfies TS when exit is spied.
145
+ throw new Error("process.exit did not terminate");
146
+ }
147
+ async function skillNewCommand(opts) {
148
+ // AC-US3-12: prompt required
149
+ if (opts.prompt === undefined || opts.prompt === null) {
150
+ console.error(red("Error: ") + dim("--prompt is required."));
151
+ console.error(dim("Usage: ") + cyan('vskill skill new --prompt "<description>"'));
152
+ exit(1);
153
+ }
154
+ const promptText = String(opts.prompt).trim();
155
+ if (promptText.length === 0) {
156
+ console.error(red("Error: ") + dim("--prompt cannot be empty."));
157
+ console.error(dim("Usage: ") + cyan('vskill skill new --prompt "<description>"'));
158
+ exit(1);
159
+ }
160
+ const engine = opts.engine === "anthropic-skill-creator" ? "anthropic-skill-creator" : "universal";
161
+ // Resolve targets up front so argument errors never leave a half-written
162
+ // workspace (AC-US3-11: all-or-nothing).
163
+ let targets;
164
+ if (engine === "anthropic-skill-creator") {
165
+ // AC-US3-05: Claude-only emission under the skill-creator engine.
166
+ targets = ["claude-code"];
167
+ }
168
+ else {
169
+ const resolved = resolveTargets(opts.targets);
170
+ if (!resolved.ok) {
171
+ console.error(red("Error: ") + dim(resolved.error));
172
+ exit(1);
173
+ }
174
+ targets = resolved.ids;
175
+ }
176
+ const cwd = process.cwd();
177
+ // AC-US2-07: skill-creator fallback requires the Anthropic built-in.
178
+ if (engine === "anthropic-skill-creator") {
179
+ if (!isSkillCreatorInstalled(cwd)) {
180
+ console.error(red("Error: ") +
181
+ dim("--engine=anthropic-skill-creator requires skill-creator."));
182
+ console.error(dim("Remediation:"));
183
+ console.error(dim(" Install vskill: ") + cyan("npm i -g vskill"));
184
+ console.error(dim(" Install skill-creator: ") + cyan("claude plugin install skill-creator"));
185
+ exit(1);
186
+ }
187
+ // Stub delegation — a full implementation hands off to skill-creator.
188
+ // Emitting with engine="anthropic-skill-creator" is the marker Chain D
189
+ // reads to produce Claude-only output + fallback-mode divergence.
190
+ console.error("[skill-builder] delegating to anthropic-skill-creator");
191
+ console.error("[skill-builder] fallback mode — universal targets not emitted; install vskill for universal support");
192
+ }
193
+ let generated;
194
+ if (engine === "anthropic-skill-creator") {
195
+ // Skill-creator delegation path: synthesize a minimal GenerateSkillResult
196
+ // so the emitter (Chain D) can still produce a Claude-only SKILL.md.
197
+ generated = {
198
+ name: slugifyPrompt(promptText),
199
+ description: promptText.slice(0, 200),
200
+ model: "",
201
+ allowedTools: "",
202
+ body: `# ${slugifyPrompt(promptText)}\n\n(Generated via anthropic-skill-creator.)\n`,
203
+ evals: [],
204
+ reasoning: "",
205
+ };
206
+ }
207
+ else {
208
+ generated = await generateSkill({ prompt: promptText, targetAgents: targets }, { root: cwd });
209
+ }
210
+ const result = emitSkillImpl(generated, { targetAgents: targets, engine });
211
+ const slug = generated.name || "skill";
212
+ const { filesWritten, reportPath } = writeEmittedFiles(cwd, result, slug);
213
+ writeSentinel(cwd, "cli:skill:new", targets, promptText);
214
+ console.log(green(`Emitted ${filesWritten} file(s) across ${targets.length} target(s).`));
215
+ console.log(dim(`Divergences: ${result.divergences.length}`));
216
+ console.log(dim(`Report: ${reportPath}`));
217
+ }
218
+ function slugifyPrompt(prompt) {
219
+ const words = prompt
220
+ .toLowerCase()
221
+ .replace(/[^a-z0-9\s-]/g, "")
222
+ .split(/\s+/)
223
+ .filter(Boolean)
224
+ .slice(0, 4);
225
+ const slug = words.join("-");
226
+ return slug || "skill";
227
+ }
228
+ async function skillImportCommand(skillPath, opts) {
229
+ const absPath = isAbsolute(skillPath) ? skillPath : resolve(process.cwd(), skillPath);
230
+ if (!existsSync(absPath)) {
231
+ console.error(red("Error: ") + dim(`File not found: ${skillPath}`));
232
+ exit(1);
233
+ }
234
+ const resolved = resolveTargets(opts.targets);
235
+ if (!resolved.ok) {
236
+ console.error(red("Error: ") + dim(resolved.error));
237
+ exit(1);
238
+ }
239
+ const targets = resolved.ids;
240
+ const raw = readFileSync(absPath, "utf-8");
241
+ const parsed = parseSkillMd(raw);
242
+ const generated = {
243
+ name: parsed.name,
244
+ description: parsed.description,
245
+ model: parsed.model,
246
+ allowedTools: parsed.allowedTools,
247
+ body: parsed.body,
248
+ evals: [],
249
+ reasoning: "",
250
+ };
251
+ const result = emitSkillImpl(generated, {
252
+ targetAgents: targets,
253
+ engine: "universal",
254
+ });
255
+ const cwd = process.cwd();
256
+ const slug = generated.name || "skill";
257
+ const { filesWritten, reportPath } = writeEmittedFiles(cwd, result, slug);
258
+ writeSentinel(cwd, "cli:skill:import", targets, absPath);
259
+ console.log(green(`Re-emitted ${filesWritten} file(s) across ${targets.length} target(s).`));
260
+ console.log(dim(`Divergences: ${result.divergences.length}`));
261
+ console.log(dim(`Report: ${reportPath}`));
262
+ }
263
+ /**
264
+ * Minimal SKILL.md parser — extracts frontmatter (the first `---`-fenced
265
+ * YAML block) and body. We only care about a handful of canonical fields.
266
+ * A full YAML parse is deliberately avoided to stay dependency-free here;
267
+ * skill authors can rely on the full parser in src/installer/frontmatter.ts
268
+ * once Chain D stabilizes.
269
+ */
270
+ function parseSkillMd(raw) {
271
+ const fmMatch = raw.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
272
+ const frontmatter = fmMatch ? fmMatch[1] : "";
273
+ const body = fmMatch ? fmMatch[2] : raw;
274
+ const fields = {};
275
+ for (const line of frontmatter.split("\n")) {
276
+ const m = line.match(/^([a-zA-Z][a-zA-Z0-9_-]*)\s*:\s*(.+)$/);
277
+ if (!m)
278
+ continue;
279
+ const key = m[1];
280
+ let value = m[2].trim();
281
+ if ((value.startsWith('"') && value.endsWith('"')) ||
282
+ (value.startsWith("'") && value.endsWith("'"))) {
283
+ value = value.slice(1, -1);
284
+ }
285
+ fields[key] = value;
286
+ }
287
+ // Name: prefer body heading, fall back to frontmatter name/slug.
288
+ let name = fields.name ?? "";
289
+ const headingMatch = body.match(/^#\s*\/?([a-z0-9][a-z0-9-]*)/m);
290
+ if (headingMatch)
291
+ name = headingMatch[1];
292
+ if (!name)
293
+ name = "imported-skill";
294
+ return {
295
+ name,
296
+ description: fields.description ?? "",
297
+ model: fields.model ?? "",
298
+ allowedTools: fields["allowed-tools"] ?? "",
299
+ body: body.trimStart(),
300
+ };
301
+ }
302
+ // ---------------------------------------------------------------------------
303
+ // `vskill skill list | info | publish`
304
+ // ---------------------------------------------------------------------------
305
+ async function skillListCommand() {
306
+ await listCommand({});
307
+ }
308
+ async function skillInfoCommand(name) {
309
+ const cwd = process.cwd();
310
+ const candidates = [
311
+ join(cwd, ".agents/skills", name, "SKILL.md"),
312
+ ...AGENTS_REGISTRY.map((a) => join(cwd, a.localSkillsDir, name, "SKILL.md")),
313
+ ];
314
+ const skillMdPath = candidates.find((p) => existsSync(p));
315
+ if (!skillMdPath) {
316
+ console.error(red("Skill not found locally: ") + dim(name));
317
+ console.error(dim("Searched: ") + cyan(`.agents/skills/${name}/SKILL.md`) + dim(" + agent-native dirs"));
318
+ exit(1);
319
+ }
320
+ const raw = readFileSync(skillMdPath, "utf-8");
321
+ const parsed = parseSkillMd(raw);
322
+ console.log(bold(`Skill: ${parsed.name}`));
323
+ console.log(dim(`Path: ${skillMdPath}`));
324
+ if (parsed.description)
325
+ console.log(`Description: ${parsed.description}`);
326
+ if (parsed.model)
327
+ console.log(`Model: ${parsed.model}`);
328
+ if (parsed.allowedTools)
329
+ console.log(`Allowed tools: ${parsed.allowedTools}`);
330
+ // Pull divergence report if it sits beside the SKILL.md.
331
+ const reportPath = join(dirname(skillMdPath), `${parsed.name}-divergence.md`);
332
+ if (existsSync(reportPath)) {
333
+ console.log("");
334
+ console.log(bold("Divergence report:"));
335
+ console.log(readFileSync(reportPath, "utf-8"));
336
+ }
337
+ else {
338
+ console.log(dim("\n(No divergence report beside SKILL.md.)"));
339
+ }
340
+ }
341
+ async function skillPublishCommand(name) {
342
+ // `vskill submit` takes a source (owner/repo) + --skill <name>, but
343
+ // vskill skill publish is designed to publish an already-installed skill
344
+ // whose owner/repo is recorded in the lockfile. Passing the name through
345
+ // preserves the expected alias semantics — submit.ts either resolves it
346
+ // via the lockfile (future work) or errors with the same UX the user
347
+ // would see today.
348
+ await submitCommand(name, {});
349
+ }
350
+ // ---------------------------------------------------------------------------
351
+ // Command registration
352
+ // ---------------------------------------------------------------------------
353
+ export function registerSkillCommand(program) {
354
+ const skill = program
355
+ .command("skill")
356
+ .description("Skill-builder workflow: generate, import, publish universal skills");
357
+ skill
358
+ .command("new")
359
+ .description("Generate a new skill from a natural-language prompt")
360
+ .option("--prompt <text>", "Description of the skill to generate")
361
+ .option("--targets <list>", "Comma-separated agent ids, or 'all' (default: 8 universal agents)")
362
+ .option("--engine <mode>", "Generator engine: 'universal' (default) or 'anthropic-skill-creator'")
363
+ .action(async (opts) => {
364
+ await skillNewCommand(opts);
365
+ });
366
+ skill
367
+ .command("import <path>")
368
+ .description("Re-emit an existing SKILL.md against the requested targets")
369
+ .option("--targets <list>", "Comma-separated agent ids, or 'all' (default: 8 universal agents)")
370
+ .action(async (path, opts) => {
371
+ await skillImportCommand(path, opts);
372
+ });
373
+ skill
374
+ .command("list")
375
+ .description("List installed skills (thin alias for 'vskill list')")
376
+ .action(async () => {
377
+ await skillListCommand();
378
+ });
379
+ skill
380
+ .command("info <name>")
381
+ .description("Show frontmatter + divergence report for an installed skill")
382
+ .action(async (name) => {
383
+ await skillInfoCommand(name);
384
+ });
385
+ skill
386
+ .command("publish <name>")
387
+ .description("Publish a skill for verification (alias for 'vskill submit')")
388
+ .action(async (name) => {
389
+ await skillPublishCommand(name);
390
+ });
391
+ }
392
+ //# sourceMappingURL=skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@
2
2
  // vskill update -- update installed skills
3
3
  // ---------------------------------------------------------------------------
4
4
  import { unlinkSync, rmdirSync, readdirSync } from "node:fs";
5
- import { join, resolve } from "node:path";
5
+ // 0706 T-005: `relative` + `sep` for cross-platform ghost-file cleanup guard.
6
+ import { join, resolve, relative, sep as pathSep } from "node:path";
6
7
  import { readLockfile, writeLockfile } from "../lockfile/index.js";
7
8
  import { ensureSkillMdNaming } from "../installer/migrate.js";
8
9
  import { installSymlink } from "../installer/canonical.js";
@@ -26,8 +27,15 @@ function cleanupGhostFiles(skillDir, oldFiles, newFiles) {
26
27
  for (const file of oldFiles) {
27
28
  if (!newSet.has(file)) {
28
29
  const target = resolve(skillDir, file);
29
- // Guard: never delete outside the skill directory
30
- if (!target.startsWith(resolvedBase + "/") && target !== resolvedBase)
30
+ // 0706 T-005: cross-platform "is target inside resolvedBase?" check.
31
+ // The old `target.startsWith(resolvedBase + "/")` was POSIX-only and
32
+ // silently no-op'd on Windows (which uses `\`), leaving stale files
33
+ // behind. `path.relative` returns "" when equal and a leading ".."
34
+ // iff the target escapes the base — portable across separators.
35
+ const rel = relative(resolvedBase, target);
36
+ const insideBase = target === resolvedBase ||
37
+ (rel !== "" && rel !== ".." && !rel.startsWith(".." + pathSep) && !rel.startsWith("../"));
38
+ if (!insideBase && target !== resolvedBase)
31
39
  continue;
32
40
  try {
33
41
  unlinkSync(target);
@@ -42,7 +50,10 @@ function cleanupGhostFiles(skillDir, oldFiles, newFiles) {
42
50
  for (const file of oldFiles) {
43
51
  if (!newSet.has(file)) {
44
52
  const dir = resolve(skillDir, file, "..");
45
- if (dir !== resolvedBase && dir.startsWith(resolvedBase + "/")) {
53
+ // 0706 T-005: same path.relative swap for the dir-cleanup guard.
54
+ const rel = relative(resolvedBase, dir);
55
+ const strictlyInside = rel !== "" && rel !== ".." && !rel.startsWith(".." + pathSep) && !rel.startsWith("../");
56
+ if (dir !== resolvedBase && strictlyInside) {
46
57
  dirsToCheck.add(dir);
47
58
  }
48
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { GenerateSkillResult } from "./skill-generator.js";
2
+ export type EngineMode = "universal" | "anthropic-skill-creator";
3
+ export interface EmitOptions {
4
+ /** Agent IDs to emit for. Legacy aliases resolve via LEGACY_AGENT_IDS. */
5
+ targetAgents: string[];
6
+ /** 'universal' emits cross-tool; 'anthropic-skill-creator' is Claude-only. */
7
+ engine: EngineMode;
8
+ /** Injected clock — tests pass a frozen Date for deterministic output. */
9
+ now?: Date;
10
+ }
11
+ export interface EmittedFileDescriptor {
12
+ /** Canonical agent id from AGENTS_REGISTRY. */
13
+ targetId: string;
14
+ /** Path from cwd, e.g. ".claude/skills/<slug>/SKILL.md". */
15
+ relativePath: string;
16
+ /** Full file content including frontmatter. */
17
+ content: string;
18
+ }
19
+ export interface DivergenceEntry {
20
+ targetId: string;
21
+ field: string;
22
+ originalValue: unknown;
23
+ /** Human-readable translation description; null when the field was dropped. */
24
+ translation: string | null;
25
+ kind: "dropped" | "translated" | "security-critical-dropped";
26
+ }
27
+ export interface EmitResult {
28
+ files: EmittedFileDescriptor[];
29
+ divergences: DivergenceEntry[];
30
+ skipped: Array<{
31
+ targetId: string;
32
+ reason: string;
33
+ }>;
34
+ /** Markdown report destined for `<slug>-divergence.md`. */
35
+ divergenceReport: string;
36
+ }
37
+ export declare function emitSkill(generated: GenerateSkillResult, options: EmitOptions): EmitResult;