zidane 6.2.7 → 6.2.11

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 (104) hide show
  1. package/dist/{acp-B_8CI9-1.js → acp-DuEMbOoQ.js} +4 -4
  2. package/dist/{acp-B_8CI9-1.js.map → acp-DuEMbOoQ.js.map} +1 -1
  3. package/dist/acp-cli.js +7 -7
  4. package/dist/acp.d.ts +1 -1
  5. package/dist/acp.js +1 -1
  6. package/dist/{agent-DPO6GKX5.js → agent-6iGNP46b.js} +5 -5
  7. package/dist/{agent-DPO6GKX5.js.map → agent-6iGNP46b.js.map} +1 -1
  8. package/dist/agent.d.ts +1 -1
  9. package/dist/agent.js +1 -1
  10. package/dist/{anthropic-J2tBjcSQ.js → anthropic-BD-lwEKp.js} +3 -3
  11. package/dist/{anthropic-J2tBjcSQ.js.map → anthropic-BD-lwEKp.js.map} +1 -1
  12. package/dist/{auth-Cexpxjfa.js → auth-BH6G59RL.js} +8 -8
  13. package/dist/auth-BH6G59RL.js.map +1 -0
  14. package/dist/chat/pure.d.ts +3 -3
  15. package/dist/chat.d.ts +14 -5
  16. package/dist/chat.d.ts.map +1 -1
  17. package/dist/chat.js +3 -3
  18. package/dist/contexts/daytona.d.ts +1 -1
  19. package/dist/contexts/e2b.d.ts +1 -1
  20. package/dist/eval.d.ts +1 -1
  21. package/dist/eval.js +1 -1
  22. package/dist/extensions.d.ts +1 -1
  23. package/dist/extensions.js +1 -1
  24. package/dist/headless.d.ts +1 -1
  25. package/dist/headless.js +3 -3
  26. package/dist/{index-CNyYEOy0.d.ts → index-BFNt9GAs.d.ts} +59 -7
  27. package/dist/index-BFNt9GAs.d.ts.map +1 -0
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.js +10 -10
  30. package/dist/{login-Bp_tRj_e.js → login-B5nMPF8w.js} +3 -3
  31. package/dist/{login-Bp_tRj_e.js.map → login-B5nMPF8w.js.map} +1 -1
  32. package/dist/{mcp-CkHUripi.js → mcp-BCaN_Gyg.js} +140 -29
  33. package/dist/mcp-BCaN_Gyg.js.map +1 -0
  34. package/dist/mcp.d.ts +1 -1
  35. package/dist/mcp.js +1 -1
  36. package/dist/{messages-DEPX32kc.js → messages-BDpXLFoe.js} +2 -2
  37. package/dist/{messages-DEPX32kc.js.map → messages-BDpXLFoe.js.map} +1 -1
  38. package/dist/{openai-compat-LGAsBush.js → openai-compat-J_JZ7qsw.js} +1 -19
  39. package/dist/openai-compat-J_JZ7qsw.js.map +1 -0
  40. package/dist/output/stream-json.d.ts +1 -1
  41. package/dist/output/terminal.d.ts +1 -1
  42. package/dist/presets.d.ts +1 -1
  43. package/dist/presets.js +1 -1
  44. package/dist/providers/anthropic.d.ts +1 -1
  45. package/dist/providers/anthropic.js +1 -1
  46. package/dist/providers/arcee.d.ts +1 -1
  47. package/dist/providers/arcee.js +1 -1
  48. package/dist/providers/baseten.d.ts +1 -1
  49. package/dist/providers/baseten.js +1 -1
  50. package/dist/providers/cerebras.d.ts +1 -1
  51. package/dist/providers/cerebras.js +1 -1
  52. package/dist/providers/local.d.ts +1 -1
  53. package/dist/providers/local.js +1 -1
  54. package/dist/providers/openai-compat.d.ts +1 -1
  55. package/dist/providers/openai-compat.js +1 -1
  56. package/dist/providers/openai.d.ts +1 -1
  57. package/dist/providers/openai.js +548 -1
  58. package/dist/providers/openai.js.map +1 -0
  59. package/dist/providers/openrouter.d.ts +1 -1
  60. package/dist/providers/openrouter.js +1 -1
  61. package/dist/providers/xai.d.ts +1 -1
  62. package/dist/providers/xai.js +1 -1
  63. package/dist/{providers-BM6VuE_i.js → providers-CclOzGxc.js} +3 -3
  64. package/dist/{providers-BM6VuE_i.js.map → providers-CclOzGxc.js.map} +1 -1
  65. package/dist/providers.d.ts +1 -1
  66. package/dist/providers.js +5 -5
  67. package/dist/restate.d.ts +1 -1
  68. package/dist/session/sqlite.d.ts +1 -1
  69. package/dist/{session-Dc1v4Otm.js → session-CIXE-Bzp.js} +2 -2
  70. package/dist/{session-Dc1v4Otm.js.map → session-CIXE-Bzp.js.map} +1 -1
  71. package/dist/session.d.ts +1 -1
  72. package/dist/session.js +2 -2
  73. package/dist/{skills-BlmY7QhV.js → skills-CDpejYOf.js} +168 -44
  74. package/dist/skills-CDpejYOf.js.map +1 -0
  75. package/dist/skills.d.ts +2 -2
  76. package/dist/skills.js +1 -1
  77. package/dist/{tool-formatters-B7oWiy5m.d.ts → tool-formatters-B_zQsYfa.d.ts} +2 -2
  78. package/dist/{tool-formatters-B7oWiy5m.d.ts.map → tool-formatters-B_zQsYfa.d.ts.map} +1 -1
  79. package/dist/tools/fetch-url.d.ts +1 -1
  80. package/dist/tools/web-search.d.ts +1 -1
  81. package/dist/tools.d.ts +1 -1
  82. package/dist/tools.js +1 -1
  83. package/dist/{transcript-anchors-BUZ915pM.d.ts → transcript-anchors-2wafjV-s.d.ts} +9 -2
  84. package/dist/{transcript-anchors-BUZ915pM.d.ts.map → transcript-anchors-2wafjV-s.d.ts.map} +1 -1
  85. package/dist/{transcript-anchors-DtOaKu4d.js → transcript-anchors-B_kUHJ16.js} +225 -10
  86. package/dist/transcript-anchors-B_kUHJ16.js.map +1 -0
  87. package/dist/tui.d.ts +12 -7
  88. package/dist/tui.d.ts.map +1 -1
  89. package/dist/tui.js +356 -70
  90. package/dist/tui.js.map +1 -1
  91. package/dist/{turn-operations-2Ou_DkbC.d.ts → turn-operations-DVA52KMG.d.ts} +3 -3
  92. package/dist/{turn-operations-2Ou_DkbC.d.ts.map → turn-operations-DVA52KMG.d.ts.map} +1 -1
  93. package/dist/types.d.ts +1 -1
  94. package/dist/{xai-BYAyEPiJ.js → xai-D-wALLuZ.js} +2 -2
  95. package/dist/{xai-BYAyEPiJ.js.map → xai-D-wALLuZ.js.map} +1 -1
  96. package/package.json +2 -2
  97. package/dist/auth-Cexpxjfa.js.map +0 -1
  98. package/dist/index-CNyYEOy0.d.ts.map +0 -1
  99. package/dist/mcp-CkHUripi.js.map +0 -1
  100. package/dist/openai-BcmYm0t4.js +0 -579
  101. package/dist/openai-BcmYm0t4.js.map +0 -1
  102. package/dist/openai-compat-LGAsBush.js.map +0 -1
  103. package/dist/skills-BlmY7QhV.js.map +0 -1
  104. package/dist/transcript-anchors-DtOaKu4d.js.map +0 -1
@@ -5,9 +5,17 @@ import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync,
5
5
  import { tmpdir } from "node:os";
6
6
  //#region src/skills/install.ts
7
7
  var SkillInstallError = class extends InstallSourceError {
8
- constructor(code, message, candidates) {
8
+ /**
9
+ * Frontmatter metadata per candidate, parallel to `candidates` — set on
10
+ * the selector-less `multiple-candidates` error so host pickers can show
11
+ * descriptions without re-fetching the source. Best-effort: candidates
12
+ * whose SKILL.md fails to parse appear with no description.
13
+ */
14
+ details;
15
+ constructor(code, message, candidates, details) {
9
16
  super(code, message, candidates);
10
17
  this.name = "SkillInstallError";
18
+ if (details) this.details = details;
11
19
  }
12
20
  };
13
21
  function rethrowAsSkillError(err) {
@@ -16,6 +24,15 @@ function rethrowAsSkillError(err) {
16
24
  }
17
25
  const SKILLS_SH_URL_RE = /^(?:https?:\/\/)?(?:www\.)?skills\.sh\/([\w.-]+)\/([\w.-]+)(?:\/([\w.-]+))?\/?$/;
18
26
  /**
27
+ * Pasted install commands, as printed by skill READMEs and skills.sh
28
+ * pages — `npx skills add owner/repo`, `bunx skills add …`,
29
+ * `pnpm dlx skills add … --skill x`, or a bare `skills add …`. The
30
+ * runner + `add` verb are stripped and the remaining tokens re-enter
31
+ * the normal grammar, so users can copy a whole command into the
32
+ * install input verbatim.
33
+ */
34
+ const SKILLS_CLI_COMMAND_RE = /^(?:(?:npx|bunx|yarn\s+dlx|pnpm\s+dlx)\s+)?skills(?:@\S+)?\s+add\s+(\S.*)$/i;
35
+ /**
19
36
  * Parse a raw skill source. Accepts everything the shared grammar does
20
37
  * (`owner/repo[#ref][:subdir]`, GitHub URLs, `pkg@version`, …) plus
21
38
  * pasted skills.sh catalog URLs — `skills.sh/vercel-labs/agent-skills/
@@ -24,6 +41,8 @@ const SKILLS_SH_URL_RE = /^(?:https?:\/\/)?(?:www\.)?skills\.sh\/([\w.-]+)\/([\w
24
41
  */
25
42
  function parseSkillInstallSpec(raw) {
26
43
  const spec = raw.trim();
44
+ const cliCommand = SKILLS_CLI_COMMAND_RE.exec(spec);
45
+ if (cliCommand) return parseCliAddCommand(cliCommand[1]);
27
46
  const skillsSh = SKILLS_SH_URL_RE.exec(spec);
28
47
  if (skillsSh) return {
29
48
  source: {
@@ -44,6 +63,41 @@ function parseSkillInstallSpec(raw) {
44
63
  }
45
64
  }
46
65
  /**
66
+ * Parse the argument tail of a pasted `skills add …` command. Honors
67
+ * `--skill <name>` / `--skill=<name>` (their per-skill selector — an
68
+ * explicit selector in the URL/shorthand form wins over it), ignores
69
+ * flags that are the dialog's job here (`-y`, `-g`, `--global`, …),
70
+ * and routes the first non-flag token back through
71
+ * {@link parseSkillInstallSpec} so URLs and shorthands inside the
72
+ * command parse identically to a bare paste.
73
+ */
74
+ function parseCliAddCommand(rest) {
75
+ const tokens = rest.split(/\s+/).filter((t) => t.length > 0);
76
+ let sourceToken;
77
+ let skill;
78
+ for (let i = 0; i < tokens.length; i++) {
79
+ const token = tokens[i];
80
+ if (token === "--skill" || token === "-s") {
81
+ skill = tokens[i + 1];
82
+ i += 1;
83
+ continue;
84
+ }
85
+ const inline = /^--skill=(.+)$/.exec(token);
86
+ if (inline) {
87
+ skill = inline[1];
88
+ continue;
89
+ }
90
+ if (token.startsWith("-")) continue;
91
+ if (sourceToken === void 0) sourceToken = token;
92
+ }
93
+ if (sourceToken === void 0) throw new SkillInstallError("invalid-source", "Pasted skills command has no source — expected “skills add <owner/repo>”.");
94
+ const parsed = parseSkillInstallSpec(sourceToken);
95
+ return {
96
+ ...parsed,
97
+ ...skill !== void 0 && parsed.skill === void 0 ? { skill } : {}
98
+ };
99
+ }
100
+ /**
47
101
  * How deep the candidate walk descends. Real-world collections nest
48
102
  * skills under category directories (`skills/engineering/tdd/SKILL.md`
49
103
  * in mattpocock/skills; `.github/skills/…` elsewhere) — one-level
@@ -89,6 +143,20 @@ function listSkillCandidates(dir, fallbackName) {
89
143
  walk(dir, "", 1);
90
144
  return out.sort((a, b) => a.rel.localeCompare(b.rel));
91
145
  }
146
+ /**
147
+ * Frontmatter details for a host picker, parallel to the candidate list.
148
+ * Parsing is best-effort per candidate — a malformed SKILL.md yields a
149
+ * detail row without a description rather than failing the enumeration.
150
+ */
151
+ async function candidateDetails(candidates) {
152
+ return Promise.all(candidates.map(async (c) => {
153
+ const description = (await parseSkillFile(join(c.dir, "SKILL.md")).catch(() => null))?.description.trim();
154
+ return {
155
+ rel: c.rel,
156
+ ...description ? { description } : {}
157
+ };
158
+ }));
159
+ }
92
160
  /** Human-readable candidate list for error messages — capped, rel-qualified when ambiguous. */
93
161
  function describeCandidates(candidates) {
94
162
  const nameCounts = /* @__PURE__ */ new Map();
@@ -114,16 +182,22 @@ async function validateSkillCandidate(candidate) {
114
182
  /**
115
183
  * Install a skill (or one skill out of a multi-skill source).
116
184
  *
117
- * Engine selection: the skills.sh CLI when present on PATH (unless
118
- * `preferSkillsCli: false`), else the native fetch pipeline. Both accept
119
- * the same specs; the CLI path additionally understands anything newer
120
- * their grammar grows, since the spec passes through verbatim.
185
+ * Engine selection: targeted installs (an explicit skill selector) go
186
+ * through the skills.sh CLI when present on PATH (unless
187
+ * `preferSkillsCli: false`) keeping their cross-agent layout and
188
+ * lockfile else the native fetch pipeline. Selector-less installs are
189
+ * ALWAYS native: only native enumeration can tell single- from
190
+ * multi-skill sources, and the host's "import all?" prompt rides on the
191
+ * `multiple-candidates` error — delegating them to `skills add … -y`
192
+ * would let the CLI's own multi-skill behavior silently decide instead.
193
+ * `all: true` batches are native for the same reason (skip-existing +
194
+ * per-skill provenance are our semantics).
121
195
  */
122
196
  async function installSkillFromSpec(opts) {
123
197
  const which = (opts.io ?? {}).which ?? defaultWhich;
124
198
  const spec = parseSkillInstallSpec(opts.source);
125
199
  const skillSelector = opts.skill ?? spec.skill;
126
- if ((opts.preferSkillsCli ?? true) && which("skills")) return await installViaSkillsCli(spec, skillSelector, opts);
200
+ if (!(opts.all === true || (opts.skills?.length ?? 0) > 0) && skillSelector !== void 0 && (opts.preferSkillsCli ?? true) && which("skills")) return await installViaSkillsCli(spec, skillSelector, opts);
127
201
  return await installNatively(spec, skillSelector, opts);
128
202
  }
129
203
  /**
@@ -177,54 +251,104 @@ async function installNatively(spec, skillSelector, opts) {
177
251
  const candidates = listSkillCandidates(candidateRoot, fallbackName);
178
252
  if (candidates.length === 0) throw new SkillInstallError("no-skill", `No skill found in ${opts.source} — no SKILL.md anywhere in the tree (searched ${CANDIDATE_WALK_MAX_DEPTH} levels deep).`);
179
253
  let picked;
180
- if (skillSelector) {
254
+ if (!skillSelector && opts.skills && opts.skills.length > 0) {
255
+ const byRel = /* @__PURE__ */ new Map();
256
+ for (const sel of opts.skills) {
257
+ const matches = candidates.filter((c) => c.name === sel || c.rel === sel);
258
+ if (matches.length === 0) throw new SkillInstallError("no-skill", `No skill named "${sel}" in ${opts.source}. Available: ${describeCandidates(candidates)}`, candidates.map((c) => c.rel));
259
+ if (matches.length > 1) throw new SkillInstallError("multiple-candidates", `"${sel}" is ambiguous in ${opts.source} — pick a path: ${matches.map((c) => c.rel).join(", ")}`, matches.map((c) => c.rel));
260
+ const match = matches[0];
261
+ byRel.set(match.rel, match);
262
+ }
263
+ picked = [...byRel.values()];
264
+ } else if (skillSelector) {
181
265
  const matches = candidates.filter((c) => c.name === skillSelector || c.rel === skillSelector);
182
266
  if (matches.length === 0) throw new SkillInstallError("no-skill", `No skill named "${skillSelector}" in ${opts.source}. Available: ${describeCandidates(candidates)}`, candidates.map((c) => c.rel));
183
267
  if (matches.length > 1) throw new SkillInstallError("multiple-candidates", `"${skillSelector}" is ambiguous in ${opts.source} — pick a path: ${matches.map((c) => c.rel).join(", ")}`, matches.map((c) => c.rel));
184
- picked = matches[0];
185
- } else if (candidates.length > 1) throw new SkillInstallError("multiple-candidates", `${opts.source} contains ${candidates.length} skills — pick one: ${describeCandidates(candidates)}`, candidates.map((c) => c.rel));
186
- else picked = candidates[0];
187
- const { name } = await validateSkillCandidate(picked);
268
+ picked = [matches[0]];
269
+ } else if (candidates.length > 1 && !opts.all) throw new SkillInstallError("multiple-candidates", `${opts.source} contains ${candidates.length} skills — pick one: ${describeCandidates(candidates)}`, candidates.map((c) => c.rel), await candidateDetails(candidates));
270
+ else picked = [...candidates];
188
271
  const root = scopeRoot(opts);
189
- const targetDir = join(root, name);
190
- const backupDir = `${targetDir}.zidane-backup`;
191
- if (existsSync(targetDir) && !opts.overwrite) throw new SkillInstallError("exists", `Skill "${name}" is already installed at ${targetDir}. Overwrite to replace it.`);
192
- mkdirSync(root, { recursive: true });
193
- const hadPrevious = existsSync(targetDir);
194
- if (hadPrevious) {
195
- rmSync(backupDir, {
196
- recursive: true,
197
- force: true
198
- });
199
- renameSync(targetDir, backupDir);
200
- }
201
- try {
202
- cpSync(picked.dir, targetDir, {
203
- recursive: true,
204
- dereference: true
205
- });
206
- writeProvenance(targetDir, {
207
- spec: opts.source,
208
- ...skillSelector ? { skill: skillSelector } : {},
209
- scope: opts.scope,
210
- provenance,
211
- installedAt: Date.now()
272
+ const installed = [];
273
+ const skipped = [];
274
+ const failed = [];
275
+ let lastDir;
276
+ const batch = picked.length > 1;
277
+ const resolved = [];
278
+ const nameToRel = /* @__PURE__ */ new Map();
279
+ for (const candidate of picked) try {
280
+ const { name } = await validateSkillCandidate(candidate);
281
+ const conflict = nameToRel.get(name);
282
+ if (conflict !== void 0) {
283
+ failed.push(candidate.rel);
284
+ opts.onProgress?.(`skipping "${candidate.rel}" — name "${name}" conflicts with "${conflict}"`);
285
+ continue;
286
+ }
287
+ nameToRel.set(name, candidate.rel);
288
+ resolved.push({
289
+ candidate,
290
+ name
212
291
  });
213
292
  } catch (err) {
214
- rmSync(targetDir, {
293
+ if (!batch) throw err;
294
+ failed.push(candidate.rel);
295
+ opts.onProgress?.(`skipping "${candidate.rel}" — ${errorMessage(err)}`);
296
+ }
297
+ for (const { candidate, name } of resolved) {
298
+ const targetDir = join(root, name);
299
+ const backupDir = `${targetDir}.zidane-backup`;
300
+ if (existsSync(targetDir) && !opts.overwrite) {
301
+ if (batch) {
302
+ skipped.push(name);
303
+ opts.onProgress?.(`skipping "${name}" — already installed`);
304
+ continue;
305
+ }
306
+ throw new SkillInstallError("exists", `Skill "${name}" is already installed at ${targetDir}. Overwrite to replace it.`);
307
+ }
308
+ mkdirSync(root, { recursive: true });
309
+ const hadPrevious = existsSync(targetDir);
310
+ if (hadPrevious) {
311
+ rmSync(backupDir, {
312
+ recursive: true,
313
+ force: true
314
+ });
315
+ renameSync(targetDir, backupDir);
316
+ }
317
+ try {
318
+ cpSync(candidate.dir, targetDir, {
319
+ recursive: true,
320
+ dereference: true
321
+ });
322
+ writeProvenance(targetDir, {
323
+ spec: opts.source,
324
+ ...skillSelector ? { skill: skillSelector } : {},
325
+ scope: opts.scope,
326
+ provenance,
327
+ installedAt: Date.now()
328
+ });
329
+ } catch (err) {
330
+ rmSync(targetDir, {
331
+ recursive: true,
332
+ force: true
333
+ });
334
+ if (hadPrevious) renameSync(backupDir, targetDir);
335
+ throw new SkillInstallError("io-failed", `Writing ${targetDir} failed: ${errorMessage(err)}`);
336
+ }
337
+ rmSync(backupDir, {
215
338
  recursive: true,
216
339
  force: true
217
340
  });
218
- if (hadPrevious) renameSync(backupDir, targetDir);
219
- throw new SkillInstallError("io-failed", `Writing ${targetDir} failed: ${errorMessage(err)}`);
341
+ installed.push(name);
342
+ lastDir = targetDir;
343
+ if (batch) opts.onProgress?.(`installed "${name}" (${installed.length}/${resolved.length})`);
220
344
  }
221
- rmSync(backupDir, {
222
- recursive: true,
223
- force: true
224
- });
345
+ if (installed.length === 0 && skipped.length > 0) throw new SkillInstallError("exists", `All ${skipped.length} installable skills from ${opts.source} are already installed: ${skipped.join(", ")}. Overwrite to replace them.`);
346
+ if (installed.length === 0 && failed.length > 0) throw new SkillInstallError("validate-failed", `No skill from ${opts.source} was installable — invalid: ${failed.join(", ")}.`);
225
347
  return {
226
- installed: [name],
227
- dir: targetDir,
348
+ installed,
349
+ ...skipped.length > 0 ? { skipped } : {},
350
+ ...failed.length > 0 ? { failed } : {},
351
+ ...lastDir !== void 0 ? { dir: lastDir } : {},
228
352
  engine: "native",
229
353
  provenance
230
354
  };
@@ -292,4 +416,4 @@ function defineSkill(config) {
292
416
  //#endregion
293
417
  export { listSkillCandidates as a, installSkillFromSpec as i, SKILL_PROVENANCE_FILE as n, parseSkillInstallSpec as o, SkillInstallError as r, readSkillProvenance as s, defineSkill as t };
294
418
 
295
- //# sourceMappingURL=skills-BlmY7QhV.js.map
419
+ //# sourceMappingURL=skills-CDpejYOf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-CDpejYOf.js","names":[],"sources":["../src/skills/install.ts","../src/skills/index.ts"],"sourcesContent":["/**\n * Skill installation — fetch a skill (or a collection of skills) from\n * GitHub / npm / skills.sh and land it under the zidane skills root,\n * where the existing discovery scan picks it up.\n *\n * Built on the shared install layer (`src/install/source.ts`), so the\n * spec grammar, transports, download caps, and subdir containment are\n * byte-identical with the extensions installer. What differs:\n *\n * - **Validation never executes code.** A skill is data: candidates\n * are validated by parsing `SKILL.md` (lenient parser, same one\n * discovery uses) — unlike extensions, whose validation must import\n * the module. Installing a hostile skill can plant instructions,\n * never run a process.\n * - **skills.sh interop, two-way.** The spec grammar accepts pasted\n * `https://skills.sh/<owner>/<repo>[/<skill>]` catalog URLs (mapped\n * to the GitHub repo + a skill selector — skills.sh uses GitHub as\n * its registry). And when the `skills` CLI is on PATH,\n * {@link installSkillFromSpec} delegates to it (`skills add … -y`)\n * so installs land in the user's cross-agent `.agents/skills/`\n * layout and feed the skills.sh lockfile/leaderboard; without the\n * CLI the native fetch path installs the same repos directly.\n * - **Target roots**: `~/.zidane/skills/<name>` (user) or\n * `<gitRoot>/.zidane/skills/<name>` (project) — both already on\n * discovery's default scan paths.\n *\n * Same hardening as extensions: staged `mkdtemp` fetch, physical\n * symlink containment for `:subdir`, folder-safe names, overwrite with\n * backup/rollback, and a provenance file (`.zidane-install.json`) so a\n * future update flow can replay the spec.\n */\n\nimport type { InstallIo, InstallScope, InstallSource } from '../install/source'\nimport { cpSync, existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { basename, join, resolve } from 'node:path'\nimport { projectUserPaths } from '../chat/project-user-paths'\nimport { errorMessage } from '../errors'\nimport { defaultExec, defaultWhich, fetchInstallSource, InstallSourceError, lastLine, parseInstallSource, resolveSubdirRoot } from '../install/source'\nimport { parseSkillFile } from './discovery'\nimport { validateSkillName } from './validate'\n\n// ---------------------------------------------------------------------------\n// Errors\n// ---------------------------------------------------------------------------\n\nexport type SkillInstallErrorCode\n = | 'invalid-source'\n | 'fetch-failed'\n | 'no-skill'\n | 'multiple-candidates'\n | 'validate-failed'\n | 'exists'\n | 'cli-failed'\n | 'io-failed'\n\nexport class SkillInstallError extends InstallSourceError {\n declare readonly code: SkillInstallErrorCode\n /**\n * Frontmatter metadata per candidate, parallel to `candidates` — set on\n * the selector-less `multiple-candidates` error so host pickers can show\n * descriptions without re-fetching the source. Best-effort: candidates\n * whose SKILL.md fails to parse appear with no description.\n */\n readonly details?: readonly SkillCandidateDetail[]\n constructor(code: SkillInstallErrorCode, message: string, candidates?: readonly string[], details?: readonly SkillCandidateDetail[]) {\n super(code, message, candidates)\n this.name = 'SkillInstallError'\n if (details)\n this.details = details\n }\n}\n\n/** One pickable candidate surfaced to host UIs — see {@link SkillInstallError.details}. */\nexport interface SkillCandidateDetail {\n /** Root-relative path — the unambiguous selector (`skills` option). */\n rel: string\n /** Frontmatter description, when the candidate's SKILL.md parses. */\n description?: string\n}\n\nfunction rethrowAsSkillError(err: unknown): never {\n if (err instanceof InstallSourceError && !(err instanceof SkillInstallError))\n throw new SkillInstallError(err.code as SkillInstallErrorCode, err.message, err.candidates)\n throw err\n}\n\n// ---------------------------------------------------------------------------\n// Spec parsing (shared grammar + the skills.sh catalog URL form)\n// ---------------------------------------------------------------------------\n\nconst SKILLS_SH_URL_RE = /^(?:https?:\\/\\/)?(?:www\\.)?skills\\.sh\\/([\\w.-]+)\\/([\\w.-]+)(?:\\/([\\w.-]+))?\\/?$/\n\n/**\n * Pasted install commands, as printed by skill READMEs and skills.sh\n * pages — `npx skills add owner/repo`, `bunx skills add …`,\n * `pnpm dlx skills add … --skill x`, or a bare `skills add …`. The\n * runner + `add` verb are stripped and the remaining tokens re-enter\n * the normal grammar, so users can copy a whole command into the\n * install input verbatim.\n */\nconst SKILLS_CLI_COMMAND_RE = /^(?:(?:npx|bunx|yarn\\s+dlx|pnpm\\s+dlx)\\s+)?skills(?:@\\S+)?\\s+add\\s+(\\S.*)$/i\n\nexport interface SkillInstallSpec {\n source: InstallSource\n /**\n * Skill name selector for multi-skill sources. From a skills.sh URL's\n * third segment or the caller's explicit pick after a\n * `multiple-candidates` error.\n */\n skill?: string\n /**\n * The spec string to hand the `skills` CLI (its `add` argument).\n * skills.sh URLs pass through verbatim — the CLI understands them —\n * while parsed shorthand re-serializes to `owner/repo`.\n */\n cliSpec: string\n}\n\n/**\n * Parse a raw skill source. Accepts everything the shared grammar does\n * (`owner/repo[#ref][:subdir]`, GitHub URLs, `pkg@version`, …) plus\n * pasted skills.sh catalog URLs — `skills.sh/vercel-labs/agent-skills/\n * react-best-practices` maps to the backing GitHub repo with the third\n * segment as the skill selector.\n */\nexport function parseSkillInstallSpec(raw: string): SkillInstallSpec {\n const spec = raw.trim()\n const cliCommand = SKILLS_CLI_COMMAND_RE.exec(spec)\n if (cliCommand)\n return parseCliAddCommand(cliCommand[1] as string)\n const skillsSh = SKILLS_SH_URL_RE.exec(spec)\n if (skillsSh) {\n return {\n source: { kind: 'github', owner: skillsSh[1] as string, repo: skillsSh[2] as string },\n ...(skillsSh[3] ? { skill: skillsSh[3] } : {}),\n cliSpec: `${skillsSh[1]}/${skillsSh[2]}`,\n }\n }\n try {\n const source = parseInstallSource(spec)\n return { source, cliSpec: spec }\n }\n catch (err) {\n rethrowAsSkillError(err)\n }\n}\n\n/**\n * Parse the argument tail of a pasted `skills add …` command. Honors\n * `--skill <name>` / `--skill=<name>` (their per-skill selector — an\n * explicit selector in the URL/shorthand form wins over it), ignores\n * flags that are the dialog's job here (`-y`, `-g`, `--global`, …),\n * and routes the first non-flag token back through\n * {@link parseSkillInstallSpec} so URLs and shorthands inside the\n * command parse identically to a bare paste.\n */\nfunction parseCliAddCommand(rest: string): SkillInstallSpec {\n const tokens = rest.split(/\\s+/).filter(t => t.length > 0)\n let sourceToken: string | undefined\n let skill: string | undefined\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i] as string\n if (token === '--skill' || token === '-s') {\n skill = tokens[i + 1]\n i += 1\n continue\n }\n const inline = /^--skill=(.+)$/.exec(token)\n if (inline) {\n skill = inline[1] as string\n continue\n }\n if (token.startsWith('-'))\n continue\n if (sourceToken === undefined)\n sourceToken = token\n }\n if (sourceToken === undefined)\n throw new SkillInstallError('invalid-source', 'Pasted skills command has no source — expected “skills add <owner/repo>”.')\n const parsed = parseSkillInstallSpec(sourceToken)\n return { ...parsed, ...(skill !== undefined && parsed.skill === undefined ? { skill } : {}) }\n}\n\n// ---------------------------------------------------------------------------\n// Candidate enumeration + validation (data-only — no code execution)\n// ---------------------------------------------------------------------------\n\nexport interface SkillInstallCandidate {\n /** Directory name candidate (validated against SKILL.md frontmatter later). */\n name: string\n dir: string\n /**\n * Root-relative path (`engineering/tdd`) — the unambiguous selector\n * when the same skill NAME exists in several category directories.\n */\n rel: string\n}\n\n/**\n * How deep the candidate walk descends. Real-world collections nest\n * skills under category directories (`skills/engineering/tdd/SKILL.md`\n * in mattpocock/skills; `.github/skills/…` elsewhere) — one-level\n * enumeration missed all of them. Four levels covers every observed\n * layout while keeping the walk trivially bounded on the staged tree.\n */\nconst CANDIDATE_WALK_MAX_DEPTH = 4\n\n/**\n * List installable skills inside a fetched tree.\n *\n * A skill is ANY directory containing a `SKILL.md` — found by a\n * bounded recursive walk (depth {@link CANDIDATE_WALK_MAX_DEPTH}),\n * skipping dot-dirs and `node_modules`, and never descending INTO a\n * skill (its `references/` / `scripts/` subtree ships with it, it\n * doesn't nest further candidates). A root-level `SKILL.md` means\n * \"repo IS the skill\" and short-circuits, named from the fallback.\n *\n * Candidates carry their root-relative path (`rel`) so same-named\n * skills in different categories stay individually addressable.\n * Sorted by `rel`.\n */\nexport function listSkillCandidates(dir: string, fallbackName: string): SkillInstallCandidate[] {\n if (existsSync(join(dir, 'SKILL.md')))\n return [{ name: sanitizeName(fallbackName), dir, rel: '.' }]\n const out: SkillInstallCandidate[] = []\n const walk = (current: string, rel: string, depth: number): void => {\n if (depth > CANDIDATE_WALK_MAX_DEPTH)\n return\n for (const entry of readdirSync(current, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === 'node_modules')\n continue\n const childDir = join(current, entry.name)\n const childRel = rel.length === 0 ? entry.name : `${rel}/${entry.name}`\n if (existsSync(join(childDir, 'SKILL.md')))\n out.push({ name: entry.name, dir: childDir, rel: childRel })\n else\n walk(childDir, childRel, depth + 1)\n }\n }\n walk(dir, '', 1)\n return out.sort((a, b) => a.rel.localeCompare(b.rel))\n}\n\n/**\n * Frontmatter details for a host picker, parallel to the candidate list.\n * Parsing is best-effort per candidate — a malformed SKILL.md yields a\n * detail row without a description rather than failing the enumeration.\n */\nasync function candidateDetails(candidates: readonly SkillInstallCandidate[]): Promise<SkillCandidateDetail[]> {\n return Promise.all(candidates.map(async (c) => {\n const parsed = await parseSkillFile(join(c.dir, 'SKILL.md')).catch(() => null)\n const description = parsed?.description.trim()\n return { rel: c.rel, ...(description ? { description } : {}) }\n }))\n}\n\n/** Human-readable candidate list for error messages — capped, rel-qualified when ambiguous. */\nfunction describeCandidates(candidates: readonly SkillInstallCandidate[]): string {\n const nameCounts = new Map<string, number>()\n for (const c of candidates)\n nameCounts.set(c.name, (nameCounts.get(c.name) ?? 0) + 1)\n const labels = candidates.map(c => ((nameCounts.get(c.name) ?? 0) > 1 ? c.rel : c.name))\n const shown = labels.slice(0, 20)\n const more = labels.length - shown.length\n return shown.join(', ') + (more > 0 ? `, … and ${more} more` : '')\n}\n\n/**\n * Validate a staged candidate by PARSING its SKILL.md — the same lenient\n * parser discovery runs, so \"installs cleanly\" and \"discovers cleanly\"\n * are the same predicate. Returns the frontmatter name (which wins over\n * the directory-derived candidate name for the target folder).\n */\nasync function validateSkillCandidate(candidate: SkillInstallCandidate): Promise<{ name: string }> {\n const parsed = await parseSkillFile(join(candidate.dir, 'SKILL.md'))\n if (!parsed)\n throw new SkillInstallError('validate-failed', `${candidate.dir}/SKILL.md is not a valid skill (missing name or description in frontmatter).`)\n const name = parsed.name\n if (!validateSkillName(name))\n throw new SkillInstallError('validate-failed', `Skill name \"${name}\" is invalid (lowercase alphanumerics + single hyphens, max 64 chars).`)\n return { name }\n}\n\n// ---------------------------------------------------------------------------\n// Install\n// ---------------------------------------------------------------------------\n\nexport interface SkillInstallOptions {\n /** Raw source spec — see {@link parseSkillInstallSpec} for the grammar. */\n source: string\n scope: InstallScope\n /** Pick one skill from a multi-skill source (names from the `multiple-candidates` error). */\n skill?: string\n /**\n * Install EVERY skill a multi-skill source contains (the affirmative\n * answer to the host's \"import all?\" prompt after a\n * `multiple-candidates` error). Native engine only — already-installed\n * names are skipped (reported via `SkillInstallResult.skipped`) rather\n * than failing the batch, unless `overwrite` is also set. Ignored when\n * a `skill` selector is present.\n */\n all?: boolean\n /**\n * Install a picked SUBSET of a multi-skill source — the host's checkbox\n * picker over the `multiple-candidates` list. Entries match a skill's\n * name or its root-relative path (same rules as `skill`); duplicates\n * collapse. Batch semantics mirror `all` (skip existing, pre-validate,\n * native engine). Takes precedence over `all` and is ignored when a\n * `skill` selector is present.\n */\n skills?: readonly string[]\n /** Overwrite an existing install of the same name. */\n overwrite?: boolean\n cwd?: string\n home?: string\n /** Storage prefix (default `.zidane`) — mirrors `ResolvedConfig.prefix`. */\n prefix?: string\n io?: InstallIo\n onProgress?: (message: string) => void\n /**\n * Prefer the skills.sh CLI when `skills` is on PATH (default true).\n * The CLI owns scope + layout decisions (`.agents/skills/`, their\n * lockfile); the native path is the fallback and the forced path in\n * tests. Set false to always install natively.\n */\n preferSkillsCli?: boolean\n}\n\nexport interface SkillInstallResult {\n /** Final skill name(s) installed. The CLI path reports the spec, not names. */\n installed: readonly string[]\n /** Names skipped during an `all` import because they were already installed. */\n skipped?: readonly string[]\n /** Candidate paths excluded from an `all` import because they failed validation. */\n failed?: readonly string[]\n /** Absolute target directory (native path only — the CLI owns its layout). */\n dir?: string\n /** `skills-cli` when delegated to the skills.sh CLI, else `native`. */\n engine: 'skills-cli' | 'native'\n provenance?: string\n}\n\n/**\n * Install a skill (or one skill out of a multi-skill source).\n *\n * Engine selection: targeted installs (an explicit skill selector) go\n * through the skills.sh CLI when present on PATH (unless\n * `preferSkillsCli: false`) — keeping their cross-agent layout and\n * lockfile — else the native fetch pipeline. Selector-less installs are\n * ALWAYS native: only native enumeration can tell single- from\n * multi-skill sources, and the host's \"import all?\" prompt rides on the\n * `multiple-candidates` error — delegating them to `skills add … -y`\n * would let the CLI's own multi-skill behavior silently decide instead.\n * `all: true` batches are native for the same reason (skip-existing +\n * per-skill provenance are our semantics).\n */\nexport async function installSkillFromSpec(opts: SkillInstallOptions): Promise<SkillInstallResult> {\n const io = opts.io ?? {}\n const which = io.which ?? defaultWhich\n const spec = parseSkillInstallSpec(opts.source)\n const skillSelector = opts.skill ?? spec.skill\n\n // Batch modes (`all` / `skills` subset) are always native — see JSDoc.\n const batchMode = opts.all === true || (opts.skills?.length ?? 0) > 0\n if (!batchMode && skillSelector !== undefined && (opts.preferSkillsCli ?? true) && which('skills'))\n return await installViaSkillsCli(spec, skillSelector, opts)\n\n return await installNatively(spec, skillSelector, opts)\n}\n\n/**\n * Delegate to the skills.sh CLI. Non-interactive by construction: `-y`\n * skips confirmation prompts, `-g` maps our `user` scope to their\n * global scope (project scope is their default, keyed off cwd). The CLI\n * decides the on-disk layout (`.agents/skills/`), which zidane's\n * discovery already scans.\n */\nasync function installViaSkillsCli(\n spec: SkillInstallSpec,\n skillSelector: string | undefined,\n opts: SkillInstallOptions,\n): Promise<SkillInstallResult> {\n const exec = opts.io?.exec ?? defaultExec\n const args = ['add', spec.cliSpec, '-y']\n if (skillSelector)\n args.push('--skill', skillSelector)\n if (opts.scope === 'user')\n args.push('-g')\n opts.onProgress?.(`skills add ${spec.cliSpec}${skillSelector ? ` --skill ${skillSelector}` : ''}…`)\n const res = await exec('skills', args, { cwd: opts.cwd ?? process.cwd() })\n if (!res.ok)\n throw new SkillInstallError('cli-failed', `skills.sh CLI failed: ${lastLine(res.stderr) || lastLine(res.stdout) || 'unknown error'}`)\n return {\n installed: [skillSelector ?? spec.cliSpec],\n engine: 'skills-cli',\n }\n}\n\nasync function installNatively(\n spec: SkillInstallSpec,\n skillSelector: string | undefined,\n opts: SkillInstallOptions,\n): Promise<SkillInstallResult> {\n const io = opts.io ?? {}\n const source = spec.source\n const stage = mkdtempSync(join(tmpdir(), 'zidane-skill-install-'))\n try {\n const fetchedInto = join(stage, 'fetched')\n mkdirSync(fetchedInto, { recursive: true })\n let provenance: string\n try {\n provenance = (await fetchInstallSource(source, fetchedInto, io, opts.onProgress)).provenance\n }\n catch (err) {\n rethrowAsSkillError(err)\n }\n\n // `:subdir` re-roots the search — same physical containment as\n // extensions (hostile symlinks must not walk out of the stage).\n let candidateRoot = fetchedInto\n let fallbackName = source.kind === 'github' ? source.repo : source.pkg\n if (source.kind === 'github' && source.subdir) {\n const rooted = resolveSubdirRoot(fetchedInto, source.subdir)\n if (!rooted.ok) {\n if (rooted.reason === 'missing')\n throw new SkillInstallError('no-skill', `\"${source.subdir}\" is not a directory in ${source.owner}/${source.repo}.`)\n throw new SkillInstallError('invalid-source', `Subdirectory \"${source.subdir}\" escapes the repository root${rooted.reason === 'escape-symlink' ? ' through a symlink' : ''}.`)\n }\n candidateRoot = rooted.dir\n fallbackName = basename(resolve(fetchedInto, source.subdir))\n }\n\n const candidates = listSkillCandidates(candidateRoot, fallbackName)\n if (candidates.length === 0)\n throw new SkillInstallError('no-skill', `No skill found in ${opts.source} — no SKILL.md anywhere in the tree (searched ${CANDIDATE_WALK_MAX_DEPTH} levels deep).`)\n let picked: SkillInstallCandidate[]\n if (!skillSelector && opts.skills && opts.skills.length > 0) {\n // Host-picked subset (checkbox picker over the `multiple-candidates`\n // list). Each entry resolves with the same name-or-rel-path rules as\n // the single selector; duplicate picks collapse to one install.\n const byRel = new Map<string, SkillInstallCandidate>()\n for (const sel of opts.skills) {\n const matches = candidates.filter(c => c.name === sel || c.rel === sel)\n if (matches.length === 0)\n throw new SkillInstallError('no-skill', `No skill named \"${sel}\" in ${opts.source}. Available: ${describeCandidates(candidates)}`, candidates.map(c => c.rel))\n if (matches.length > 1)\n throw new SkillInstallError('multiple-candidates', `\"${sel}\" is ambiguous in ${opts.source} — pick a path: ${matches.map(c => c.rel).join(', ')}`, matches.map(c => c.rel))\n const match = matches[0] as SkillInstallCandidate\n byRel.set(match.rel, match)\n }\n picked = [...byRel.values()]\n }\n else if (skillSelector) {\n // Selector matches the skill name OR its root-relative path — the\n // path form disambiguates same-named skills in different category\n // directories (`engineering/tdd` vs `personal/tdd`).\n const matches = candidates.filter(c => c.name === skillSelector || c.rel === skillSelector)\n if (matches.length === 0)\n throw new SkillInstallError('no-skill', `No skill named \"${skillSelector}\" in ${opts.source}. Available: ${describeCandidates(candidates)}`, candidates.map(c => c.rel))\n if (matches.length > 1)\n throw new SkillInstallError('multiple-candidates', `\"${skillSelector}\" is ambiguous in ${opts.source} — pick a path: ${matches.map(c => c.rel).join(', ')}`, matches.map(c => c.rel))\n picked = [matches[0] as SkillInstallCandidate]\n }\n else if (candidates.length > 1 && !opts.all) {\n throw new SkillInstallError(\n 'multiple-candidates',\n `${opts.source} contains ${candidates.length} skills — pick one: ${describeCandidates(candidates)}`,\n candidates.map(c => c.rel),\n await candidateDetails(candidates),\n )\n }\n else {\n picked = [...candidates]\n }\n\n const root = scopeRoot(opts)\n const installed: string[] = []\n const skipped: string[] = []\n const failed: string[] = []\n let lastDir: string | undefined\n const batch = picked.length > 1\n\n // Validate the whole batch BEFORE installing anything — one malformed\n // candidate must not abort a half-applied import. Batch mode collects\n // failures (reported via `SkillInstallResult.failed`) and installs the\n // rest; a targeted single install keeps the hard throw.\n const resolved: Array<{ candidate: SkillInstallCandidate, name: string }> = []\n // Intra-batch name conflicts: two candidates whose frontmatter\n // validates to the same name (`engineering/tdd` + `personal/tdd`)\n // would otherwise install the first and mislabel the second as\n // \"already installed\" (or, with overwrite, silently last-wins).\n // First occurrence wins; later ones are reported as conflicts.\n const nameToRel = new Map<string, string>()\n for (const candidate of picked) {\n try {\n // Frontmatter name wins over the directory-derived candidate name —\n // mirrors \"target folder is named from the VALIDATED definition\".\n const { name } = await validateSkillCandidate(candidate)\n const conflict = nameToRel.get(name)\n if (conflict !== undefined) {\n // Only reachable in batch mode — a single pick can't conflict.\n failed.push(candidate.rel)\n opts.onProgress?.(`skipping \"${candidate.rel}\" — name \"${name}\" conflicts with \"${conflict}\"`)\n continue\n }\n nameToRel.set(name, candidate.rel)\n resolved.push({ candidate, name })\n }\n catch (err) {\n if (!batch)\n throw err\n failed.push(candidate.rel)\n opts.onProgress?.(`skipping \"${candidate.rel}\" — ${errorMessage(err)}`)\n }\n }\n\n for (const { candidate, name } of resolved) {\n const targetDir = join(root, name)\n const backupDir = `${targetDir}.zidane-backup`\n if (existsSync(targetDir) && !opts.overwrite) {\n // Batch imports skip collisions (already-installed skills are the\n // common case when re-importing a repo); a targeted single install\n // keeps the hard error so the overwrite decision stays explicit.\n if (batch) {\n skipped.push(name)\n opts.onProgress?.(`skipping \"${name}\" — already installed`)\n continue\n }\n throw new SkillInstallError('exists', `Skill \"${name}\" is already installed at ${targetDir}. Overwrite to replace it.`)\n }\n\n mkdirSync(root, { recursive: true })\n const hadPrevious = existsSync(targetDir)\n if (hadPrevious) {\n rmSync(backupDir, { recursive: true, force: true })\n renameSync(targetDir, backupDir)\n }\n try {\n // `dereference` materializes in-tree symlinked files so the install\n // has no dangling links once the stage is deleted.\n cpSync(candidate.dir, targetDir, { recursive: true, dereference: true })\n writeProvenance(targetDir, { spec: opts.source, ...(skillSelector ? { skill: skillSelector } : {}), scope: opts.scope, provenance, installedAt: Date.now() })\n }\n catch (err) {\n rmSync(targetDir, { recursive: true, force: true })\n if (hadPrevious)\n renameSync(backupDir, targetDir)\n throw new SkillInstallError('io-failed', `Writing ${targetDir} failed: ${errorMessage(err)}`)\n }\n rmSync(backupDir, { recursive: true, force: true })\n installed.push(name)\n lastDir = targetDir\n if (batch)\n opts.onProgress?.(`installed \"${name}\" (${installed.length}/${resolved.length})`)\n }\n\n if (installed.length === 0 && skipped.length > 0)\n throw new SkillInstallError('exists', `All ${skipped.length} installable skills from ${opts.source} are already installed: ${skipped.join(', ')}. Overwrite to replace them.`)\n if (installed.length === 0 && failed.length > 0)\n throw new SkillInstallError('validate-failed', `No skill from ${opts.source} was installable — invalid: ${failed.join(', ')}.`)\n\n return {\n installed,\n ...(skipped.length > 0 ? { skipped } : {}),\n ...(failed.length > 0 ? { failed } : {}),\n ...(lastDir !== undefined ? { dir: lastDir } : {}),\n engine: 'native',\n provenance,\n }\n }\n finally {\n rmSync(stage, { recursive: true, force: true })\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Provenance sidecar — lets a future update flow replay the recorded spec. */\nexport const SKILL_PROVENANCE_FILE = '.zidane-install.json'\n\ninterface SkillProvenance {\n spec: string\n skill?: string\n scope: InstallScope\n provenance: string\n installedAt: number\n}\n\nfunction writeProvenance(dir: string, data: SkillProvenance): void {\n writeFileSync(join(dir, SKILL_PROVENANCE_FILE), `${JSON.stringify(data, null, 2)}\\n`)\n}\n\n/** Read a skill directory's install provenance, `null` for hand-authored skills. */\nexport function readSkillProvenance(dir: string): (SkillProvenance & { spec: string }) | null {\n try {\n const raw = JSON.parse(readFileSync(join(dir, SKILL_PROVENANCE_FILE), 'utf8')) as Partial<SkillProvenance>\n return typeof raw.spec === 'string' && raw.spec.length > 0 ? (raw as SkillProvenance) : null\n }\n catch {\n return null\n }\n}\n\n/**\n * Native-install target root: the `<prefix>/skills` flavor of the\n * project/user convention (`~/.zidane/skills`, `<gitRoot>/.zidane/skills`).\n * The `.agents/skills` siblings stay read-only for us — they belong to\n * the cross-agent ecosystem (and the skills.sh CLI writes there).\n */\nfunction scopeRoot(opts: SkillInstallOptions): string {\n const roots = projectUserPaths({\n subPath: 'skills',\n ...(opts.cwd ? { cwd: opts.cwd } : {}),\n ...(opts.home ? { home: opts.home } : {}),\n ...(opts.prefix ? { prefix: opts.prefix } : {}),\n })\n const root = roots.find(r => r.source === opts.scope && r.path.includes(`.${(opts.prefix ?? '.zidane').replace(/^\\./, '')}`))\n if (!root)\n throw new SkillInstallError('io-failed', `No ${opts.scope} skills root resolved.`)\n return root.path\n}\n\nfunction sanitizeName(raw: string): string {\n const cleaned = raw.toLowerCase().replace(/[^a-z0-9-]+/g, '-').replace(/^-+|-+$/g, '').replace(/-{2,}/g, '-')\n return cleaned.length > 0 ? cleaned : 'skill'\n}\n","import type { SkillConfig } from './types'\nimport { validateSkillForWrite } from './validate'\n\nexport {\n type ActivationVia,\n type ActiveSkill,\n createSkillActivationState,\n type DeactivationReason,\n type SkillActivationState,\n type SkillActivationStateOptions,\n} from './activation'\nexport {\n IMPLICITLY_ALLOWED_SKILL_TOOLS,\n installAllowedToolsGate,\n} from './allowed-tools'\nexport { buildCatalog } from './catalog'\nexport {\n discoverSkills,\n getDefaultScanPaths,\n inferSource,\n parseFrontmatter,\n parseSkillFile,\n} from './discovery'\nexport type { SourcedScanPath } from './discovery'\nexport {\n installSkillFromSpec,\n listSkillCandidates,\n parseSkillInstallSpec,\n readSkillProvenance,\n SKILL_PROVENANCE_FILE,\n SkillInstallError,\n} from './install'\nexport type {\n SkillCandidateDetail,\n SkillInstallCandidate,\n SkillInstallErrorCode,\n SkillInstallOptions,\n SkillInstallResult,\n SkillInstallSpec,\n} from './install'\nexport { interpolateShellCommands, stripShellInterpolations } from './interpolate'\nexport type { InterpolateShellCommandsOptions } from './interpolate'\nexport { resolveSkills } from './resolve'\nexport type {\n ShellInterpolationApproval,\n SkillConfig,\n SkillDiagnostic,\n SkillResource,\n SkillsConfig,\n SkillSource,\n} from './types'\nexport {\n isToolAllowedByUnion,\n matchesAllowedTool,\n parseAllowedToolPattern,\n validateResourcePath,\n validateResourcePathReal,\n validateSkillForWrite,\n validateSkillName,\n} from './validate'\nexport type { SkillValidationIssue, SkillValidationResult } from './validate'\nexport { writeSkillsToDisk, writeSkillToDisk } from './writer'\n\n// ---------------------------------------------------------------------------\n// defineSkill helper\n// ---------------------------------------------------------------------------\n\n/**\n * Define an inline skill configuration.\n *\n * Strict-validates at author-time — throws if the config would be rejected by\n * `writeSkillToDisk` or the spec. Source defaults to `'inline'`.\n */\nexport function defineSkill(config: Omit<SkillConfig, 'source'> & { source?: SkillConfig['source'] }): SkillConfig {\n const normalized: SkillConfig = {\n ...config,\n source: config.source ?? 'inline',\n }\n const result = validateSkillForWrite(normalized)\n if (!result.valid) {\n const summary = result.errors.map(e => ` - [${e.code}] ${e.message}`).join('\\n')\n throw new Error(`Invalid skill \"${normalized.name}\":\\n${summary}`)\n }\n return normalized\n}\n"],"mappings":"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"}
package/dist/skills.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { $s as SkillInstallSpec, Bs as validateResourcePathReal, Fs as SkillValidationResult, Gs as interpolateShellCommands, Hs as validateSkillName, Is as isToolAllowedByUnion, Js as SkillInstallCandidate, Ks as stripShellInterpolations, Ls as matchesAllowedTool, Ms as writeSkillToDisk, Ns as writeSkillsToDisk, Ps as SkillValidationIssue, Qs as SkillInstallResult, Rs as parseAllowedToolPattern, Us as resolveSkills, Vs as validateSkillForWrite, Ws as InterpolateShellCommandsOptions, Xs as SkillInstallErrorCode, Ys as SkillInstallError, Zs as SkillInstallOptions, _c as SkillActivationStateOptions, ac as discoverSkills, ap as SkillDiagnostic, cc as parseFrontmatter, cp as SkillsConfig, dc as IMPLICITLY_ALLOWED_SKILL_TOOLS, ec as installSkillFromSpec, fc as installAllowedToolsGate, gc as SkillActivationState, hc as DeactivationReason, ic as SourcedScanPath, ip as SkillConfig, js as defineSkill, lc as parseSkillFile, mc as ActiveSkill, nc as parseSkillInstallSpec, oc as getDefaultScanPaths, op as SkillResource, pc as ActivationVia, qs as SKILL_PROVENANCE_FILE, rc as readSkillProvenance, rp as ShellInterpolationApproval, sc as inferSource, sp as SkillSource, tc as listSkillCandidates, uc as buildCatalog, vc as createSkillActivationState, zs as validateResourcePath } from "./index-CNyYEOy0.js";
2
- export { type ActivationVia, type ActiveSkill, type DeactivationReason, IMPLICITLY_ALLOWED_SKILL_TOOLS, type InterpolateShellCommandsOptions, SKILL_PROVENANCE_FILE, type ShellInterpolationApproval, type SkillActivationState, type SkillActivationStateOptions, type SkillConfig, type SkillDiagnostic, type SkillInstallCandidate, SkillInstallError, type SkillInstallErrorCode, type SkillInstallOptions, type SkillInstallResult, type SkillInstallSpec, type SkillResource, type SkillSource, type SkillValidationIssue, type SkillValidationResult, type SkillsConfig, type SourcedScanPath, buildCatalog, createSkillActivationState, defineSkill, discoverSkills, getDefaultScanPaths, inferSource, installAllowedToolsGate, installSkillFromSpec, interpolateShellCommands, isToolAllowedByUnion, listSkillCandidates, matchesAllowedTool, parseAllowedToolPattern, parseFrontmatter, parseSkillFile, parseSkillInstallSpec, readSkillProvenance, resolveSkills, stripShellInterpolations, validateResourcePath, validateResourcePathReal, validateSkillForWrite, validateSkillName, writeSkillToDisk, writeSkillsToDisk };
1
+ import { $s as SkillInstallResult, Bs as validateResourcePathReal, Fs as SkillValidationResult, Gs as interpolateShellCommands, Hs as validateSkillName, Is as isToolAllowedByUnion, Js as SkillCandidateDetail, Ks as stripShellInterpolations, Ls as matchesAllowedTool, Ms as writeSkillToDisk, Ns as writeSkillsToDisk, Ps as SkillValidationIssue, Qs as SkillInstallOptions, Rs as parseAllowedToolPattern, Us as resolveSkills, Vs as validateSkillForWrite, Ws as InterpolateShellCommandsOptions, Xs as SkillInstallError, Ys as SkillInstallCandidate, Zs as SkillInstallErrorCode, _c as SkillActivationState, ac as SourcedScanPath, ap as SkillConfig, cc as inferSource, cp as SkillSource, dc as buildCatalog, ec as SkillInstallSpec, fc as IMPLICITLY_ALLOWED_SKILL_TOOLS, gc as DeactivationReason, hc as ActiveSkill, ic as readSkillProvenance, ip as ShellInterpolationApproval, js as defineSkill, lc as parseFrontmatter, lp as SkillsConfig, mc as ActivationVia, nc as listSkillCandidates, oc as discoverSkills, op as SkillDiagnostic, pc as installAllowedToolsGate, qs as SKILL_PROVENANCE_FILE, rc as parseSkillInstallSpec, sc as getDefaultScanPaths, sp as SkillResource, tc as installSkillFromSpec, uc as parseSkillFile, vc as SkillActivationStateOptions, yc as createSkillActivationState, zs as validateResourcePath } from "./index-BFNt9GAs.js";
2
+ export { type ActivationVia, type ActiveSkill, type DeactivationReason, IMPLICITLY_ALLOWED_SKILL_TOOLS, type InterpolateShellCommandsOptions, SKILL_PROVENANCE_FILE, type ShellInterpolationApproval, type SkillActivationState, type SkillActivationStateOptions, type SkillCandidateDetail, type SkillConfig, type SkillDiagnostic, type SkillInstallCandidate, SkillInstallError, type SkillInstallErrorCode, type SkillInstallOptions, type SkillInstallResult, type SkillInstallSpec, type SkillResource, type SkillSource, type SkillValidationIssue, type SkillValidationResult, type SkillsConfig, type SourcedScanPath, buildCatalog, createSkillActivationState, defineSkill, discoverSkills, getDefaultScanPaths, inferSource, installAllowedToolsGate, installSkillFromSpec, interpolateShellCommands, isToolAllowedByUnion, listSkillCandidates, matchesAllowedTool, parseAllowedToolPattern, parseFrontmatter, parseSkillFile, parseSkillInstallSpec, readSkillProvenance, resolveSkills, stripShellInterpolations, validateResourcePath, validateResourcePathReal, validateSkillForWrite, validateSkillName, writeSkillToDisk, writeSkillsToDisk };
package/dist/skills.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { A as validateSkillName, C as stripShellInterpolations, D as validateResourcePath, E as parseAllowedToolPattern, O as validateResourcePathReal, S as interpolateShellCommands, T as matchesAllowedTool, a as getDefaultScanPaths, c as parseSkillFile, d as installAllowedToolsGate, f as createSkillActivationState, i as discoverSkills, k as validateSkillForWrite, l as buildCatalog, n as writeSkillToDisk, o as inferSource, r as writeSkillsToDisk, s as parseFrontmatter, t as resolveSkills, u as IMPLICITLY_ALLOWED_SKILL_TOOLS, w as isToolAllowedByUnion } from "./resolve-HtxmBWs9.js";
2
- import { a as listSkillCandidates, i as installSkillFromSpec, n as SKILL_PROVENANCE_FILE, o as parseSkillInstallSpec, r as SkillInstallError, s as readSkillProvenance, t as defineSkill } from "./skills-BlmY7QhV.js";
2
+ import { a as listSkillCandidates, i as installSkillFromSpec, n as SKILL_PROVENANCE_FILE, o as parseSkillInstallSpec, r as SkillInstallError, s as readSkillProvenance, t as defineSkill } from "./skills-CDpejYOf.js";
3
3
  export { IMPLICITLY_ALLOWED_SKILL_TOOLS, SKILL_PROVENANCE_FILE, SkillInstallError, buildCatalog, createSkillActivationState, defineSkill, discoverSkills, getDefaultScanPaths, inferSource, installAllowedToolsGate, installSkillFromSpec, interpolateShellCommands, isToolAllowedByUnion, listSkillCandidates, matchesAllowedTool, parseAllowedToolPattern, parseFrontmatter, parseSkillFile, parseSkillInstallSpec, readSkillProvenance, resolveSkills, stripShellInterpolations, validateResourcePath, validateResourcePathReal, validateSkillForWrite, validateSkillName, writeSkillToDisk, writeSkillsToDisk };
@@ -1,4 +1,4 @@
1
- import { Qu as ProviderKey, Ru as Settings, Zu as ProviderAuth, nd as ModelInfo, zu as StreamEvent } from "./index-CNyYEOy0.js";
1
+ import { $u as ProviderKey, Bu as StreamEvent, Qu as ProviderAuth, rd as ModelInfo, zu as Settings } from "./index-BFNt9GAs.js";
2
2
  import { ReactNode } from "react";
3
3
 
4
4
  //#region src/chat/turn-selection.d.ts
@@ -432,4 +432,4 @@ declare function displayNameFor(name: string, input?: Record<string, unknown>):
432
432
  declare function formatToolCall(name: string, input: Record<string, unknown>): ToolFormatLine | null;
433
433
  //#endregion
434
434
  export { turnSelectionOwnership as A, useSafeModeActions as C, isTurnHighlighted as D, isEditErrorResult as E, isVisible as O, SafeModeProvider as S, EDIT_TOOL_NAMES as T, splitMarkdownCodeBlocks as _, formatToolCall as a, RequestApproval as b, splitPromptSegments as c, filterModelCatalog as d, indexOfEntry as f, normalizeMarkdownCodeFences as g, chunkMarkdownForRender as h, displayNameFor as i, selectableTurnIds as k, CatalogEntry as l, MarkdownSegment as m, ToolDisplayMeta as n, PromptSegment as o, MARKDOWN_RENDER_CHUNK_TARGET_BYTES as p, ToolFormatLine as r, PromptSegmentRef as s, TOOL_DISPLAY as t, buildModelCatalog as u, ApprovalDecision as v, useSafeModeQueue as w, SafeModeActions as x, ApprovalRequest as y };
435
- //# sourceMappingURL=tool-formatters-B7oWiy5m.d.ts.map
435
+ //# sourceMappingURL=tool-formatters-B_zQsYfa.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-formatters-B7oWiy5m.d.ts","names":[],"sources":["../src/chat/turn-selection.ts","../src/chat/safe-mode-context.tsx","../src/chat/markdown-segments.ts","../src/chat/model-catalog.ts","../src/chat/prompt-segments.ts","../src/chat/tool-formatters.ts"],"mappings":"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"}
1
+ {"version":3,"file":"tool-formatters-B_zQsYfa.d.ts","names":[],"sources":["../src/chat/turn-selection.ts","../src/chat/safe-mode-context.tsx","../src/chat/markdown-segments.ts","../src/chat/model-catalog.ts","../src/chat/prompt-segments.ts","../src/chat/tool-formatters.ts"],"mappings":";;;;;cAaa,eAAA,EAAiB,WAAW;;AAAzC;;;;AAAyC;AAmBzC;;;;AAA8C;AAqE9C;;;;;;iBArEgB,iBAAA,CAAkB,IAAY;;;;;;;AAoLN;AA6BxC;;;;;;iBA5IgB,SAAA,CAAU,KAAA,EAAO,WAAA,EAAa,QAAA,EAAU,QAAQ;;;AA8I3C;;;;AChNrB;;;;AAK6B;AAQ7B;;;;;;;;AAE4B;AAE5B;;;;;;;iBD4GgB,sBAAA,CAAuB,MAAA,WAAiB,WAAA,KAAgB,GAAG;;;;;;;;;;;ACtG1C;iBDuJjB,iBAAA,CACd,KAAA,EAAO,IAAA,CAAK,WAAA,aACZ,cAAA,iBACA,SAAA,EAAW,WAAA;;;;;;;;;;;;;;;;;AClJgB;AAE7B;;;iBD6KgB,iBAAA,CACd,MAAA,WAAiB,WAAA,IACjB,QAAA,GAAW,QAAQ;;;;;AA9I2C;AA2DhE;;;;;;;;KC7HY,gBAAA;EAKJ,IAAA;EAAiB,IAAI;AAAA;;;;;;;KAQjB,kBAAA;EACJ,IAAA;AAAA;EACA,IAAA;EAAe,KAAA;AAAA;AAAA,UAEN,eAAA;EACf,EAAA;EACA,IAAA;EACA,KAAA,EAAO,MAAA;EACP,OAAA,GAAU,QAAA,EAAU,gBAAA;ED0LH;ECxLjB,UAAA,GAAa,kBAAA;AAAA;;KAIH,eAAA,IACV,IAAA,UACA,KAAA,EAAO,MAAA,mBACP,UAAA,GAAa,kBAAA,KACV,OAAA,CAAQ,gBAAA;AAAA,UAEI,eAAA;;EAEf,eAAA,EAAiB,eAAA;;EAEjB,WAAA,GAAc,QAAA,EAAU,gBAAgB;EArCd;EAuC1B,OAAA;AAAA;AAlC2B;AAQ7B;;;AAR6B,iBAqDb,gBAAA;EAAmB;AAAA;EAAc,QAAA,EAAU,SAAS;AAAA,gCAAE,GAAA,CAAA,OAAA;AAAA,iBAqEtD,gBAAA,aAA6B,eAAe;AAAA,iBAI5C,kBAAA,IAAsB,eAAe;;;;;;;ADzJrD;;;;UEUiB,eAAA;EACf,IAAA;EACA,OAAA;;EAEA,IAAA;EFK4C;AAqE9C;;;;;EEnEE,IAAA;AAAA;;;AFmE8D;AA2DhE;;;;;;;;AAA2E;AAiD3E;;;;iBE5JgB,uBAAA,CAAwB,IAAA,WAAe,eAAe;;;AF+J9B;AA6BxC;;;;;;;;;AAEqB;;;;AChNrB;iBC0LgB,2BAAA,CAA4B,IAAY;;;ADrL3B;AAQ7B;;;;;;cCkOa,kCAAA;;ADhOe;AAE5B;;;;;;;;;;;iBC6PgB,sBAAA,CAAuB,IAAA,UAAc,WAAwD;;;AFjR/D;AAAA,UGhB7B,YAAA;EACf,WAAA,EAAa,WAAA;EACb,aAAA;EACA,KAAA,EAAO,SAAS;EHkFe;;;;;AAA+B;AA2DhE;EGrIE,YAAA;AAAA;;;;;;AHqIyE;AAiD3E;;;;;;;iBGtKgB,iBAAA,CAAkB,IAAA;EAChC,SAAA,WAAoB,YAAA;EACpB,SAAA,GAAY,GAAA,EAAK,WAAA,cAAyB,SAAA,IHqK1C;EGnKA,OAAA;IAAY,WAAA,EAAa,WAAA;IAAa,OAAA;EAAA;AAAA,IACpC,YAAA;AHiMJ;;;;;;;;;AAEqB;AAFrB,iBGxJgB,kBAAA,CACd,OAAA,WAAkB,YAAA,IAClB,KAAA,WACC,YAAY;;;AFzDf;;;iBEsEgB,YAAA,CACd,OAAA,WAAkB,YAAA,IAClB,MAAA;EAAU,WAAA,EAAa,WAAW;EAAE,OAAA;AAAA;;;;;;;AH9FtC;;;;AAAyC;AAmBzC;;;;AAA8C;AAqE9C;;UIpFiB,gBAAA;EACf,KAAA;EACA,GAAA;EJkFwB;EIhFxB,UAAA;AAAA;;AJgF8D;AA2DhE;;;;KIlIY,aAAA;EACJ,IAAA;EAAe,IAAA;AAAA;EACf,IAAA;EAAc,IAAA;EAAc,UAAA;AAAA;;;;;;;;;;;;;AJoLI;AA6BxC;;;;;;;;;iBIzLgB,mBAAA,CACd,IAAA,UACA,IAAA,WAAe,gBAAA,KACd,aAAa;;;;;;;AJ9ChB;;;;AAAyC;AAmBzC;;;;AAA8C;AAqE9C;;;UKjFiB,cAAA;ELiFgB;;;;;EK3E/B,MAAA;ELsIc;;;;;EKhId,IAAI;AAAA;AAAA,UAGW,eAAA;EL6H0D;AAiD3E;;;;;;;;EKpKE,WAAA,aAAwB,KAAA,EAAO,MAAA;ELqKnB;;;;;EK/JZ,MAAA,GAAS,KAAA,EAAO,MAAA,sBAA4B,cAAA;AAAA;AAAA,cAOjC,YAAA,EAAc,QAAA,CAAS,MAAA,SAAe,eAAA;;;;;;;;;ALyL9B;;;;AChNrB;;;iBIoUgB,cAAA,CACd,IAAA,UACA,KAAA,GAAQ,MAAM;AJjUa;AAQ7B;;;;;AAR6B,iBImVb,cAAA,CAAe,IAAA,UAAc,KAAA,EAAO,MAAA,oBAA0B,cAAc"}
@@ -1,4 +1,4 @@
1
- import { Kf as ToolDef } from "../index-CNyYEOy0.js";
1
+ import { qf as ToolDef } from "../index-BFNt9GAs.js";
2
2
 
3
3
  //#region src/tools/fetch-url.d.ts
4
4
  declare function isBlockedAddress(ip: string): boolean;
@@ -1,4 +1,4 @@
1
- import { Kf as ToolDef } from "../index-CNyYEOy0.js";
1
+ import { qf as ToolDef } from "../index-BFNt9GAs.js";
2
2
 
3
3
  //#region src/tools/web-search.d.ts
4
4
  declare const webSearch: ToolDef;
package/dist/tools.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { $f as hydrateReadStateFromSession, $n as waitTask, As as matchModelEntries, Cr as glob, Cs as SubagentOverride, Ds as SpawnModelEntry, Es as isSpawnTool, Gf as ToolContext, Jf as HydrateReadStateOptions, Kf as ToolDef, Os as createModelSearchTool, Qf as hashContent, Qn as WAIT_TASK_TIMED_OUT_PREFIX, Sr as grep, Ss as SubagentDef, Ts as createSpawnTool, Xf as ReadStateMap, Yf as ReadStateEntry, Zf as getReadState, Zn as writeFile, _r as readFile, _s as SpawnTaskInput, ar as ToolSearchToolOptions, br as InteractionToolOptions, bs as SpawnToolOptions, cr as createSkillsUseTool, dr as SkillsReadToolOptions, ep as hydrateReadStateFromSessionAsync, er as ValidationResult, fr as createSkillsReadTool, gr as shell, gs as ExtensionSubagentDef, hr as createShellTool, hs as ChildAgent, ir as LazyToolEntry, ks as formatModelLine, lr as SkillsRunScriptToolOptions, mr as CreateShellToolOptions, np as resolveReadStateMap, nr as TailTruncateOptions, or as createToolSearchTool, pr as shellKill, qf as ToolMap, rr as tailTruncate, sr as SkillsUseToolOptions, tp as readStateKey, tr as validateToolArgs, ur as createSkillsRunScriptTool, vr as multiEdit, vs as SpawnTaskOutcome, wr as edit, ws as SubagentRegistry, xr as createInteractionTool, xs as SpawnToolState, yr as listFiles, ys as SpawnTool } from "./index-CNyYEOy0.js";
1
+ import { $f as hashContent, $n as waitTask, As as matchModelEntries, Cr as glob, Cs as SubagentOverride, Ds as SpawnModelEntry, Es as isSpawnTool, Jf as ToolMap, Kf as ToolContext, Os as createModelSearchTool, Qf as getReadState, Qn as WAIT_TASK_TIMED_OUT_PREFIX, Sr as grep, Ss as SubagentDef, Ts as createSpawnTool, Xf as ReadStateEntry, Yf as HydrateReadStateOptions, Zf as ReadStateMap, Zn as writeFile, _r as readFile, _s as SpawnTaskInput, ar as ToolSearchToolOptions, br as InteractionToolOptions, bs as SpawnToolOptions, cr as createSkillsUseTool, dr as SkillsReadToolOptions, ep as hydrateReadStateFromSession, er as ValidationResult, fr as createSkillsReadTool, gr as shell, gs as ExtensionSubagentDef, hr as createShellTool, hs as ChildAgent, ir as LazyToolEntry, ks as formatModelLine, lr as SkillsRunScriptToolOptions, mr as CreateShellToolOptions, np as readStateKey, nr as TailTruncateOptions, or as createToolSearchTool, pr as shellKill, qf as ToolDef, rp as resolveReadStateMap, rr as tailTruncate, sr as SkillsUseToolOptions, tp as hydrateReadStateFromSessionAsync, tr as validateToolArgs, ur as createSkillsRunScriptTool, vr as multiEdit, vs as SpawnTaskOutcome, wr as edit, ws as SubagentRegistry, xr as createInteractionTool, xs as SpawnToolState, yr as listFiles, ys as SpawnTool } from "./index-BFNt9GAs.js";
2
2
  export { type ChildAgent, type CreateShellToolOptions, type ExtensionSubagentDef, type HydrateReadStateOptions, type InteractionToolOptions, type LazyToolEntry, type ReadStateEntry, type ReadStateMap, type SkillsReadToolOptions, type SkillsRunScriptToolOptions, type SkillsUseToolOptions, type SpawnModelEntry, type SpawnTaskInput, type SpawnTaskOutcome, type SpawnTool, type SpawnToolOptions, type SpawnToolState, type SubagentDef, type SubagentOverride, type SubagentRegistry, type TailTruncateOptions, type ToolContext, type ToolDef, type ToolMap, type ToolSearchToolOptions, type ValidationResult, WAIT_TASK_TIMED_OUT_PREFIX, createInteractionTool, createModelSearchTool, createShellTool, createSkillsReadTool, createSkillsRunScriptTool, createSkillsUseTool, createSpawnTool, createToolSearchTool, edit, formatModelLine, getReadState, glob, grep, hashContent, hydrateReadStateFromSession, hydrateReadStateFromSessionAsync, isSpawnTool, listFiles, matchModelEntries, multiEdit, readFile, readStateKey, resolveReadStateMap, shell, shellKill, tailTruncate, validateToolArgs, waitTask, writeFile };
package/dist/tools.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { a as hydrateReadStateFromSessionAsync, c as resolveReadStateMap, i as hydrateReadStateFromSession, r as hashContent, s as readStateKey, t as getReadState } from "./read-state-Dq_TXUX1.js";
2
- import { At as createInteractionTool, Ct as readFile, Dt as formatModelLine, Et as createModelSearchTool, Mt as glob, Nt as edit, Ot as matchModelEntries, Pt as validateToolArgs, St as tailTruncate, Tt as multiEdit, _t as createSkillsRunScriptTool, bt as createShellTool, dt as WAIT_TASK_TIMED_OUT_PREFIX, ft as waitTask, gt as createSkillsUseTool, ht as isSpawnTool, jt as grep, kt as listFiles, mt as createSpawnTool, pt as createToolSearchTool, ut as writeFile, vt as createSkillsReadTool, xt as shell, yt as shellKill } from "./agent-DPO6GKX5.js";
2
+ import { At as createInteractionTool, Ct as readFile, Dt as formatModelLine, Et as createModelSearchTool, Mt as glob, Nt as edit, Ot as matchModelEntries, Pt as validateToolArgs, St as tailTruncate, Tt as multiEdit, _t as createSkillsRunScriptTool, bt as createShellTool, dt as WAIT_TASK_TIMED_OUT_PREFIX, ft as waitTask, gt as createSkillsUseTool, ht as isSpawnTool, jt as grep, kt as listFiles, mt as createSpawnTool, pt as createToolSearchTool, ut as writeFile, vt as createSkillsReadTool, xt as shell, yt as shellKill } from "./agent-6iGNP46b.js";
3
3
  export { WAIT_TASK_TIMED_OUT_PREFIX, createInteractionTool, createModelSearchTool, createShellTool, createSkillsReadTool, createSkillsRunScriptTool, createSkillsUseTool, createSpawnTool, createToolSearchTool, edit, formatModelLine, getReadState, glob, grep, hashContent, hydrateReadStateFromSession, hydrateReadStateFromSessionAsync, isSpawnTool, listFiles, matchModelEntries, multiEdit, readFile, readStateKey, resolveReadStateMap, shell, shellKill, tailTruncate, validateToolArgs, waitTask, writeFile };
@@ -1,4 +1,4 @@
1
- import { Cs as SubagentOverride, Df as ThinkingLevel, Do as ExtensionRegistry, Fu as Picked, Ka as StoredExtensionConfigItem, Lu as SessionMeta, Mf as ToolResultContent, Pa as ExtensionConfigCategory, Qu as ProviderKey, Ru as Settings, Vu as ModelChainEntry, Zu as ProviderAuth, bf as SessionContentBlock, dp as SessionData, ef as McpServerConfig, id as ProviderDescriptor, ju as EditOutcome, mp as SessionStore, nd as ModelInfo, pp as SessionRun, t as Preset, wf as SessionTurn, ws as SubagentRegistry, yu as AgentRegistry, zu as StreamEvent } from "./index-CNyYEOy0.js";
1
+ import { $u as ProviderKey, Bu as StreamEvent, Cs as SubagentOverride, Do as ExtensionRegistry, Hu as ModelChainEntry, Iu as Picked, Ka as StoredExtensionConfigItem, Mu as EditOutcome, Nf as ToolResultContent, Of as ThinkingLevel, Pa as ExtensionConfigCategory, Qu as ProviderAuth, Ru as SessionMeta, Tf as SessionTurn, ad as ProviderDescriptor, bu as AgentRegistry, fp as SessionData, hp as SessionStore, mp as SessionRun, rd as ModelInfo, t as Preset, tf as McpServerConfig, ws as SubagentRegistry, xf as SessionContentBlock, zu as Settings } from "./index-BFNt9GAs.js";
2
2
  //#region src/chat/hints.d.ts
3
3
  /**
4
4
  * Single hint entry — `<key> <label>`, optionally followed by an inline
@@ -1241,6 +1241,13 @@ declare function discoverProjectMcps(opts?: {
1241
1241
  cwd?: string;
1242
1242
  home?: string;
1243
1243
  prefix?: string;
1244
+ /**
1245
+ * Also read MCP configs other agents maintain (Claude Code, Codex,
1246
+ * Pi) — see `foreign-configs.ts`. Mirrors the `importForeignConfigs`
1247
+ * setting; native locations always win name collisions, and project
1248
+ * beats user within each group.
1249
+ */
1250
+ foreignAgents?: boolean;
1244
1251
  }): DiscoveryResult;
1245
1252
  /**
1246
1253
  * Map a user-toggled enable list onto the `mcpServers` array the agent
@@ -1446,4 +1453,4 @@ declare function computeTurnAnchors(items: readonly TranscriptItem[]): {
1446
1453
  };
1447
1454
  //#endregion
1448
1455
  export { KEYBINDING_KEY_COL_WIDTH as $, resolveStorageDirs as A, loadState as B, ResolvedPaths as C, StorageDirs as D, ResolveStorageDirsOptions as E, createStateStore as F, titleFromTurns as G, saveState as H, deriveSessionTitle as I, updateToolEventOutcomes as J, toolCallPreview as K, eventsFromTurns as L, StateStoreApi as M, TuiState as N, StorageMode as O, compactSummaryEvent as P, KEYBINDING_DEF_BY_ACTION as Q, lastContextSizeFromTurns as R, ResolvedConfig as S, resolveStoragePaths as T, stripSpawnTokensLine as U, marginTopFor as V, sumRunCosts as W, DEFAULT_KEYBINDINGS as X, usageByModel as Y, KEYBINDING_DEFS as Z, discoverProjectMcps as _, EMPTY_HINTS as _t, SessionExportTarget as a, ResolvedExtensionKeybinding as at, ChatOptions as b, hintsLength as bt, writeSessionExport as c, groupBindings as ct, useEnabledToggleSet as d, mergeKeybindings as dt, KeyAction as et, DiscoveredMcp as f, parseBindingSpec as ft, defaultMcpsConfigPaths as g, stripJsonComments as gt, buildMcpServers as h, resolveExtensionKeybindings as ht, SessionExportFormat as i, ParsedBinding as it, ModelUsageSummary as j, StorageSlot as k, EnabledAllowlistKey as l, keybindingsPath as lt, DiscoveryResult as m, readKeybindingsRaw as mt, computeTurnAnchors as n, KeyBindingSection as nt, renderSession as o, ensureKeybindingsFile as ot, DiscoveryError as p, readKeybindings as pt, toolResultText as q, SessionExportAnchor as r, KeyBindings as rt, resolveSessionExportTarget as s, formatBindingForDisplay as st, TranscriptItem as t, KeyBindingDef as tt, EnabledToggleSet as u, matchesBinding as ut, parseMcpsFile as v, Hint as vt, resolveConfig as w, ProviderRegistry as x, truncateTrailing as xt, AutoUpdateConfig as y, clipHintsToWidth as yt, listSessionMeta as z };
1449
- //# sourceMappingURL=transcript-anchors-BUZ915pM.d.ts.map
1456
+ //# sourceMappingURL=transcript-anchors-2wafjV-s.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transcript-anchors-BUZ915pM.d.ts","names":[],"sources":["../src/chat/hints.ts","../src/start/shared-options.ts","../src/chat/keybindings.ts","../src/chat/store.ts","../src/chat/xdg.ts","../src/chat/config.ts","../src/chat/mcps-discovery.ts","../src/chat/enabled-toggle-set.ts","../src/chat/session-export.ts","../src/chat/transcript-anchors.ts"],"mappings":"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"}
1
+ {"version":3,"file":"transcript-anchors-2wafjV-s.d.ts","names":[],"sources":["../src/chat/hints.ts","../src/start/shared-options.ts","../src/chat/keybindings.ts","../src/chat/store.ts","../src/chat/xdg.ts","../src/chat/config.ts","../src/chat/mcps-discovery.ts","../src/chat/enabled-toggle-set.ts","../src/chat/session-export.ts","../src/chat/transcript-anchors.ts"],"mappings":"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"}