zidane 6.2.22 → 6.2.24

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 (81) hide show
  1. package/dist/{acp-Cwp_Y78H.js → acp-CTn1kFvP.js} +4 -4
  2. package/dist/{acp-Cwp_Y78H.js.map → acp-CTn1kFvP.js.map} +1 -1
  3. package/dist/acp-cli.js +2 -2
  4. package/dist/acp.d.ts +1 -1
  5. package/dist/acp.js +1 -1
  6. package/dist/{agent-IPshmLIF.js → agent-tLfGSSQw.js} +153 -21
  7. package/dist/agent-tLfGSSQw.js.map +1 -0
  8. package/dist/agent.d.ts +1 -1
  9. package/dist/agent.js +1 -1
  10. package/dist/chat/pure.d.ts +3 -3
  11. package/dist/chat/pure.js +1 -1
  12. package/dist/chat.d.ts +4 -4
  13. package/dist/chat.d.ts.map +1 -1
  14. package/dist/chat.js +4 -4
  15. package/dist/contexts/daytona.d.ts +1 -1
  16. package/dist/contexts/e2b.d.ts +1 -1
  17. package/dist/eval.d.ts +1 -1
  18. package/dist/eval.js +1 -1
  19. package/dist/extensions.d.ts +1 -1
  20. package/dist/extensions.js +1 -1
  21. package/dist/headless.d.ts +1 -1
  22. package/dist/headless.js +2 -2
  23. package/dist/{index-BDtxt4FY.d.ts → index-8zm_hwdY.d.ts} +87 -3
  24. package/dist/index-8zm_hwdY.d.ts.map +1 -0
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.js +6 -6
  27. package/dist/{login-BkZ_d5sT.js → login-DfJGuHUj.js} +2 -2
  28. package/dist/{login-BkZ_d5sT.js.map → login-DfJGuHUj.js.map} +1 -1
  29. package/dist/mcp.d.ts +1 -1
  30. package/dist/output/stream-json.d.ts +1 -1
  31. package/dist/output/terminal.d.ts +1 -1
  32. package/dist/presets.d.ts +1 -1
  33. package/dist/presets.js +1 -1
  34. package/dist/providers/anthropic.d.ts +1 -1
  35. package/dist/providers/arcee.d.ts +1 -1
  36. package/dist/providers/baseten.d.ts +1 -1
  37. package/dist/providers/cerebras.d.ts +1 -1
  38. package/dist/providers/local.d.ts +1 -1
  39. package/dist/providers/openai-compat.d.ts +1 -1
  40. package/dist/providers/openai.d.ts +1 -1
  41. package/dist/providers/openrouter.d.ts +1 -1
  42. package/dist/providers/xai.d.ts +1 -1
  43. package/dist/providers.d.ts +1 -1
  44. package/dist/{resolve-x5mlFtLX.js → resolve-BPTA1RpX.js} +23 -3
  45. package/dist/resolve-BPTA1RpX.js.map +1 -0
  46. package/dist/restate.d.ts +1 -1
  47. package/dist/session/sqlite.d.ts +1 -1
  48. package/dist/{session-DzrXKLw-.js → session-jLsc_kMH.js} +23 -3
  49. package/dist/session-jLsc_kMH.js.map +1 -0
  50. package/dist/session.d.ts +2 -2
  51. package/dist/session.js +2 -2
  52. package/dist/{skills-C1vGKbqv.js → skills-C7eIjWYm.js} +2 -2
  53. package/dist/{skills-C1vGKbqv.js.map → skills-C7eIjWYm.js.map} +1 -1
  54. package/dist/skills.d.ts +1 -1
  55. package/dist/skills.js +2 -2
  56. package/dist/{tool-formatters-CMrkqO4q.d.ts → tool-formatters-CZJYzP4x.d.ts} +2 -2
  57. package/dist/{tool-formatters-CMrkqO4q.d.ts.map → tool-formatters-CZJYzP4x.d.ts.map} +1 -1
  58. package/dist/tools/fetch-url.d.ts +1 -1
  59. package/dist/tools/web-search.d.ts +1 -1
  60. package/dist/tools.d.ts +1 -1
  61. package/dist/tools.js +1 -1
  62. package/dist/{transcript-anchors-Bvb8iMiY.d.ts → transcript-anchors-CJ2dmpQk.d.ts} +12 -4
  63. package/dist/{transcript-anchors-Bvb8iMiY.d.ts.map → transcript-anchors-CJ2dmpQk.d.ts.map} +1 -1
  64. package/dist/{transcript-anchors-DvLIRYLz.js → transcript-anchors-Ded7iJjG.js} +56 -8
  65. package/dist/transcript-anchors-Ded7iJjG.js.map +1 -0
  66. package/dist/tui.d.ts +15 -5
  67. package/dist/tui.d.ts.map +1 -1
  68. package/dist/tui.js +757 -325
  69. package/dist/tui.js.map +1 -1
  70. package/dist/{turn-operations-CokV32wf.js → turn-operations-ClGa1vnb.js} +6 -2
  71. package/dist/{turn-operations-CokV32wf.js.map → turn-operations-ClGa1vnb.js.map} +1 -1
  72. package/dist/{turn-operations-BIw6n_H2.d.ts → turn-operations-DZYpXcU1.d.ts} +3 -3
  73. package/dist/{turn-operations-BIw6n_H2.d.ts.map → turn-operations-DZYpXcU1.d.ts.map} +1 -1
  74. package/dist/types-BIarq1qE.js.map +1 -1
  75. package/dist/types.d.ts +1 -1
  76. package/package.json +1 -1
  77. package/dist/agent-IPshmLIF.js.map +0 -1
  78. package/dist/index-BDtxt4FY.d.ts.map +0 -1
  79. package/dist/resolve-x5mlFtLX.js.map +0 -1
  80. package/dist/session-DzrXKLw-.js.map +0 -1
  81. package/dist/transcript-anchors-DvLIRYLz.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"skills-C1vGKbqv.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. Overrides a\n * selector embedded in the source string; ignored when an explicit\n * `skill` option 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 over a selector\n * embedded in the source string; ignored when an explicit `skill`\n * option 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\n // Batch modes (`all` / `skills` subset) are always native — see JSDoc.\n // They also override a selector derived from the SOURCE string (a\n // skills.sh URL's third segment, a pasted `--skill`): the host's picker\n // re-runs with the same source after an ambiguous-selector error, and\n // keeping the spec selector would just re-throw the same error in a\n // loop. An explicit `opts.skill` still wins over everything.\n const batchMode = opts.all === true || (opts.skills?.length ?? 0) > 0\n const skillSelector = opts.skill ?? (batchMode ? undefined : spec.skill)\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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"}
1
+ {"version":3,"file":"skills-C7eIjWYm.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. Overrides a\n * selector embedded in the source string; ignored when an explicit\n * `skill` option 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 over a selector\n * embedded in the source string; ignored when an explicit `skill`\n * option 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\n // Batch modes (`all` / `skills` subset) are always native — see JSDoc.\n // They also override a selector derived from the SOURCE string (a\n // skills.sh URL's third segment, a pasted `--skill`): the host's picker\n // re-runs with the same source after an ambiguous-selector error, and\n // keeping the spec selector would just re-throw the same error in a\n // loop. An explicit `opts.skill` still wins over everything.\n const batchMode = opts.all === true || (opts.skills?.length ?? 0) > 0\n const skillSelector = opts.skill ?? (batchMode ? undefined : spec.skill)\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 { $f as SkillResource, $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, Qf as SkillDiagnostic, Qs as SkillInstallOptions, Rs as parseAllowedToolPattern, Us as resolveSkills, Vs as validateSkillForWrite, Ws as InterpolateShellCommandsOptions, Xf as ShellInterpolationApproval, Xs as SkillInstallError, Ys as SkillInstallCandidate, Zf as SkillConfig, Zs as SkillInstallErrorCode, _c as SkillActivationState, ac as SourcedScanPath, cc as inferSource, dc as buildCatalog, ec as SkillInstallSpec, ep as SkillSource, fc as IMPLICITLY_ALLOWED_SKILL_TOOLS, gc as DeactivationReason, hc as ActiveSkill, ic as readSkillProvenance, js as defineSkill, lc as parseFrontmatter, mc as ActivationVia, nc as listSkillCandidates, oc as discoverSkills, pc as installAllowedToolsGate, qs as SKILL_PROVENANCE_FILE, rc as parseSkillInstallSpec, sc as getDefaultScanPaths, tc as installSkillFromSpec, tp as SkillsConfig, uc as parseSkillFile, vc as SkillActivationStateOptions, yc as createSkillActivationState, zs as validateResourcePath } from "./index-BDtxt4FY.js";
1
+ import { $f as SkillResource, $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, Qf as SkillDiagnostic, Qs as SkillInstallOptions, Rs as parseAllowedToolPattern, Us as resolveSkills, Vs as validateSkillForWrite, Ws as InterpolateShellCommandsOptions, Xf as ShellInterpolationApproval, Xs as SkillInstallError, Ys as SkillInstallCandidate, Zf as SkillConfig, Zs as SkillInstallErrorCode, _c as SkillActivationState, ac as SourcedScanPath, cc as inferSource, dc as buildCatalog, ec as SkillInstallSpec, ep as SkillSource, fc as IMPLICITLY_ALLOWED_SKILL_TOOLS, gc as DeactivationReason, hc as ActiveSkill, ic as readSkillProvenance, js as defineSkill, lc as parseFrontmatter, mc as ActivationVia, nc as listSkillCandidates, oc as discoverSkills, pc as installAllowedToolsGate, qs as SKILL_PROVENANCE_FILE, rc as parseSkillInstallSpec, sc as getDefaultScanPaths, tc as installSkillFromSpec, tp as SkillsConfig, uc as parseSkillFile, vc as SkillActivationStateOptions, yc as createSkillActivationState, zs as validateResourcePath } from "./index-8zm_hwdY.js";
2
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
- 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-x5mlFtLX.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-C1vGKbqv.js";
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-BPTA1RpX.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-C7eIjWYm.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 { Au as SessionMeta, Gu as ProviderKey, Mu as StreamEvent, Wu as ProviderAuth, Yu as ModelInfo, _f as SessionTurn, ju as Settings } from "./index-BDtxt4FY.js";
1
+ import { Au as SessionMeta, Gu as ProviderKey, Mu as StreamEvent, Wu as ProviderAuth, Yu as ModelInfo, _f as SessionTurn, ju as Settings } from "./index-8zm_hwdY.js";
2
2
  import { ReactNode } from "react";
3
3
 
4
4
  //#region src/chat/turn-selection.d.ts
@@ -518,4 +518,4 @@ declare function displayNameFor(name: string, input?: Record<string, unknown>):
518
518
  declare function formatToolCall(name: string, input: Record<string, unknown>): ToolFormatLine | null;
519
519
  //#endregion
520
520
  export { turnSelectionOwnership as $, highlightSegments as A, ApprovalDecision as B, SearchTurnResult as C, buildSessionSearchIndex as D, SessionSearchIndex as E, searchSessionIndex as F, useSafeModeActions as G, RequestApproval as H, searchSessionIndexAsync as I, isEditErrorResult as J, useSafeModeQueue as K, searchSessionTurns as L, searchSessionHistory as M, searchSessionHistoryIndex as N, buildSessionSearchIndexAsync as O, searchSessionHistoryIndexAsync as P, selectionAfterTurnRemoval as Q, searchTurns as R, SearchSessionResult as S, SessionSearchExcerpt as T, SafeModeActions as U, ApprovalRequest as V, SafeModeProvider as W, isVisible as X, isTurnHighlighted as Y, selectableTurnIds as Z, splitMarkdownCodeBlocks as _, formatToolCall as a, IndexedSearchTurn as b, splitPromptSegments as c, filterModelCatalog as d, indexOfEntry as f, normalizeMarkdownCodeFences as g, chunkMarkdownForRender as h, displayNameFor as i, searchHighlightRanges as j, filterSessionSearchCatalog as k, CatalogEntry as l, MarkdownSegment as m, ToolDisplayMeta as n, PromptSegment as o, MARKDOWN_RENDER_CHUNK_TARGET_BYTES as p, EDIT_TOOL_NAMES as q, ToolFormatLine as r, PromptSegmentRef as s, TOOL_DISPLAY as t, buildModelCatalog as u, HighlightRange as v, SessionHistoryMatch as w, SearchExcerpt as x, HighlightSegment as y, searchableTurnText as z };
521
- //# sourceMappingURL=tool-formatters-CMrkqO4q.d.ts.map
521
+ //# sourceMappingURL=tool-formatters-CZJYzP4x.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-formatters-CMrkqO4q.d.ts","names":[],"sources":["../src/chat/turn-selection.ts","../src/chat/safe-mode-context.tsx","../src/chat/history-search.ts","../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-CZJYzP4x.d.ts","names":[],"sources":["../src/chat/turn-selection.ts","../src/chat/safe-mode-context.tsx","../src/chat/history-search.ts","../src/chat/markdown-segments.ts","../src/chat/model-catalog.ts","../src/chat/prompt-segments.ts","../src/chat/tool-formatters.ts"],"mappings":";;;;;cAca,eAAA,EAAiB,WAAW;;AAAzC;;;;iBAOgB,yBAAA,CACd,MAAA,qBACA,SAAA,UACA,KAAA;AAHF;;;;;;;;AAG0B;AA2B1B;;;;AAA8C;AAqF9C;;;AAnHA,iBA8BgB,iBAAA,CAAkB,IAAY;;;;;;;AAqNN;AA8BxC;;;;;;iBA9JgB,SAAA,CAAU,KAAA,EAAO,WAAA,EAAa,QAAA,EAAU,QAAQ;;;;;;;;;;AAiKrB;;;;ACtQ3C;;;;AAK6B;AAQ7B;;;;;;;;AAE4B;iBDiJZ,sBAAA,CAAuB,MAAA,WAAiB,WAAA,KAAgB,GAAG;;;;;;;;;;;;iBAkE3D,iBAAA,CACd,KAAA,EAAO,IAAA,CAAK,WAAA,aACZ,cAAA,iBACA,SAAA,EAAW,WAAA;;;;;;AC9MoB;AAIjC;;;;;;;;;;;;;;iBDwOgB,iBAAA,CACd,MAAA,WAAiB,WAAA,IACjB,QAAA,GAAW,QAAA,EACX,OAAA,IAAW,KAAA,EAAO,WAAA;;;;AAtP0B;AAqF9C;;;;;;;;;KCrGY,gBAAA;EAKJ,IAAA;EAAiB,IAAI;AAAA;;;;;;AD2J8C;KCnJ/D,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;ED+MpB;EC7MA,UAAA,GAAa,kBAAA;AAAA;;KAIH,eAAA,IACV,IAAA,UACA,KAAA,EAAO,MAAA,mBACP,UAAA,GAAa,kBAAA,KACV,OAAA,CAAQ,gBAAA;AAAA,UAEI,eAAA;EDkOgB;EChO/B,eAAA,EAAiB,eAAA;EDiOA;EC/NjB,WAAA,GAAc,QAAA,EAAU,gBAAgB;EDiOtB;EC/NlB,OAAA;AAAA;;;;;iBAmBc,gBAAA;EAAmB;AAAA;EAAc,QAAA,EAAU,SAAS;AAAA,gCAAE,GAAA,CAAA,OAAA;AAAA,iBAqEtD,gBAAA,aAA6B,eAAe;AAAA,iBAI5C,kBAAA,IAAsB,eAAe;;;UCnKpC,cAAA;EACf,KAAA;EACA,GAAG;AAAA;AAAA,UAGY,gBAAA;EACf,IAAA;EACA,WAAW;AAAA;AAAA,UAGI,aAAA;EACf,IAAA;EACA,WAAA,EAAa,cAAc;AAAA;AAAA,UAGZ,eAAA;EACf,IAAA,EAAM,WAAA;EACN,IAAA;EACA,WAAA,EAAa,cAAA;EACb,QAAA,EAAU,aAAA;EACV,KAAA;EACA,SAAA;AAAA;AAAA,KAGU,gBAAA,GAAmB,eAAe;AAAA,UAE7B,mBAAA;EACf,EAAA;EACA,KAAA;EACA,SAAA;EACA,IAAA,EAAM,WAAA;EACN,IAAA;EACA,WAAA,EAAa,cAAA;EACb,QAAA,EAAU,aAAA;AAAA;AAAA,UAGK,oBAAA,SAA6B,aAAa;EACzD,MAAA;EACA,IAAA,EAAM,WAAA;AAAA;;UAIS,mBAAA;EACf,KAAA;EACA,cAAA;EACA,QAAA,EAAU,oBAAoB;AAAA;AAAA,UAGf,iBAAA;EACf,IAAA,EAAM,WAAW;;EAEjB,IAAA;EFgNO;EE9MP,SAAA;AAAA;AAAA,UAGe,kBAAA;EACf,KAAA,EAAO,iBAAiB;AAAA;AAAA,iBAiBV,uBAAA,CAAwB,KAAA,WAAgB,WAAA,KAAgB,kBAAkB;;iBAQpE,4BAAA,CACpB,KAAA,WAAgB,WAAA,IAChB,OAAA;EAAW,UAAA;EAAqB,UAAA,IAAc,OAAA,UAAiB,KAAA;EAAwB,MAAA,GAAS,WAAA;AAAA,IAC/F,OAAA,CAAQ,kBAAA;AAAA,iBAmBK,kBAAA,CAAmB,KAAA,EAAO,kBAAA,EAAoB,KAAA,UAAe,KAAA,YAAa,eAAe;;iBA+BnF,uBAAA,CACpB,KAAA,EAAO,kBAAA,EACP,KAAA,UACA,OAAA;EAAW,KAAA;EAAgB,UAAA;EAAqB,UAAA,IAAc,QAAA,UAAkB,KAAA;EAAwB,MAAA,GAAS,WAAA;AAAA,IAChH,OAAA,CAAQ,eAAA;AAAA,iBAwBK,WAAA,CAAY,KAAA,WAAgB,WAAA,IAAe,KAAA,UAAe,KAAA,YAAa,eAAe;AAAA,iBAItF,kBAAA,CAAmB,KAAA,WAAgB,WAAA,IAAe,KAAA,UAAe,WAAA,YAAkB,mBAAmB;AAAA,iBAatG,oBAAA,CAAqB,KAAA,WAAgB,WAAA,IAAe,KAAA,UAAe,WAAA,YAAkB,mBAAmB;AAAA,iBAIxG,yBAAA,CAA0B,KAAA,EAAO,kBAAA,EAAoB,KAAA,UAAe,WAAA,YAAkB,mBAAmB;AAAA,iBAInG,8BAAA,CACpB,KAAA,EAAO,kBAAA,EACP,KAAA,UACA,WAAA,WACA,UAAA,IAAc,QAAA,UAAkB,KAAA,mBAChC,MAAA,GAAS,WAAA,GACR,OAAA,CAAQ,mBAAA;AAAA,iBA6BK,0BAAA,CACd,QAAA,WAAmB,WAAA,IACnB,KAAA,UACA,cAAA,EAAgB,WAAA,SAAoB,mBAAA,IACnC,WAAA;AAAA,iBAoBa,qBAAA,CAAsB,IAAA,UAAc,KAAA,WAAgB,cAAc;AAAA,iBAiBlE,iBAAA,CAAkB,IAAA,UAAc,MAAA,WAAiB,cAAA,KAAmB,gBAAgB;;;;ADxOpG;iBCiWgB,kBAAA,CAAmB,IAAiB,EAAX,WAAW;;;;;;;AFtXpD;;;;UGSiB,eAAA;EACf,IAAA;EACA,OAAA;;EAEA,IAAA;EHLA;;;;AAEwB;AA2B1B;EGjBE,IAAA;AAAA;;AHiB4C;AAqF9C;;;;;;;;;AAAgE;AA2DhE;;;;iBG9IgB,uBAAA,CAAwB,IAAA,WAAe,eAAe;;;;;;;;;;;;AHmN9B;AA8BxC;;;;;iBGzEgB,2BAAA,CAA4B,IAAY;;;;;;;;;;cAqD3C,kCAAA;AHuB8B;;;;ACtQ3C;;;;AAK6B;AAQ7B;;;;ADyP2C,iBGQ3B,sBAAA,CAAuB,IAAA,UAAc,WAAwD;;;;UCjS5F,YAAA;EACf,WAAA,EAAa,WAAA;EACb,aAAA;EACA,KAAA,EAAO,SAAS;EJgCF;;;;AAA8B;AAqF9C;;EI7GE,YAAA;AAAA;;;;;;AJ6G8D;AA2DhE;;;;;;;iBIxJgB,iBAAA,CAAkB,IAAA;EAChC,SAAA,WAAoB,YAAA;EACpB,SAAA,GAAY,GAAA,EAAK,WAAA,cAAyB,SAAA,IJwNX;EItN/B,OAAA;IAAY,WAAA,EAAa,WAAA;IAAa,OAAA;EAAA;AAAA,IACpC,YAAA;;;;;;;;;AJwNoC;AA8BxC;iBI7MgB,kBAAA,CACd,OAAA,WAAkB,YAAA,IAClB,KAAA,WACC,YAAY;;;;;;iBAaC,YAAA,CACd,OAAA,WAAkB,YAAA,IAClB,MAAA;EAAU,WAAA,EAAa,WAAW;EAAE,OAAA;AAAA;;;;;;;AJ7FtC;;;;AAAyC;AAOzC;;;;;;;UKJiB,gBAAA;EACf,KAAA;EACA,GAAA;ELgC+B;EK9B/B,UAAA;AAAA;AL8B4C;AAqF9C;;;;;AArF8C,KKrBlC,aAAA;EACJ,IAAA;EAAe,IAAA;AAAA;EACf,IAAA;EAAc,IAAA;EAAc,UAAA;AAAA;;;;;;ALmKuC;AAkE3E;;;;;;;;;;;;;;;AAGwC;iBKhNxB,mBAAA,CACd,IAAA,UACA,IAAA,WAAe,gBAAA,KACd,aAAa;;;;;;;AL7ChB;;;;AAAyC;AAOzC;;;;;;;;UMDiB,cAAA;EN+BD;;;;AAA8B;EMzB5C,MAAA;EN8GuB;;;;;EMxGvB,IAAI;AAAA;AAAA,UAGW,eAAA;ENqG+C;AA2DhE;;;;;;;;EMtJE,WAAA,aAAwB,KAAA,EAAO,MAAA;ENwNjB;;;;;EMlNd,MAAA,GAAS,KAAA,EAAO,MAAA,sBAA4B,cAAA;AAAA;AAAA,cAOjC,YAAA,EAAc,QAAA,CAAS,MAAA,SAAe,eAAA;;;;;;;;AN8MX;AA8BxC;;;;;;;iBMoEgB,cAAA,CACd,IAAA,UACA,KAAA,GAAQ,MAAM;;;;;;;iBAkBA,cAAA,CAAe,IAAA,UAAc,KAAA,EAAO,MAAA,oBAA0B,cAAc"}
@@ -1,4 +1,4 @@
1
- import { zf as ToolDef } from "../index-BDtxt4FY.js";
1
+ import { zf as ToolDef } from "../index-8zm_hwdY.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 { zf as ToolDef } from "../index-BDtxt4FY.js";
1
+ import { zf as ToolDef } from "../index-8zm_hwdY.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 { $n as waitTask, As as matchModelEntries, Bf as ToolMap, Cr as glob, Cs as SubagentOverride, Ds as SpawnModelEntry, Es as isSpawnTool, Gf as hashContent, Hf as ReadStateEntry, Jf as readStateKey, Kf as hydrateReadStateFromSession, Os as createModelSearchTool, Qn as WAIT_TASK_TIMED_OUT_PREFIX, Rf as ToolContext, Sr as grep, Ss as SubagentDef, Ts as createSpawnTool, Uf as ReadStateMap, Vf as HydrateReadStateOptions, Wf as getReadState, Yf as resolveReadStateMap, Zn as writeFile, _r as readFile, _s as SpawnTaskInput, ar as ToolSearchToolOptions, br as InteractionToolOptions, bs as SpawnToolOptions, cr as createSkillsUseTool, dr as SkillsReadToolOptions, 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, nr as TailTruncateOptions, or as createToolSearchTool, pr as shellKill, qf as hydrateReadStateFromSessionAsync, rr as tailTruncate, sr as SkillsUseToolOptions, 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, zf as ToolDef } from "./index-BDtxt4FY.js";
1
+ import { $n as waitTask, As as matchModelEntries, Bf as ToolMap, Cr as glob, Cs as SubagentOverride, Ds as SpawnModelEntry, Es as isSpawnTool, Gf as hashContent, Hf as ReadStateEntry, Jf as readStateKey, Kf as hydrateReadStateFromSession, Os as createModelSearchTool, Qn as WAIT_TASK_TIMED_OUT_PREFIX, Rf as ToolContext, Sr as grep, Ss as SubagentDef, Ts as createSpawnTool, Uf as ReadStateMap, Vf as HydrateReadStateOptions, Wf as getReadState, Yf as resolveReadStateMap, Zn as writeFile, _r as readFile, _s as SpawnTaskInput, ar as ToolSearchToolOptions, br as InteractionToolOptions, bs as SpawnToolOptions, cr as createSkillsUseTool, dr as SkillsReadToolOptions, 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, nr as TailTruncateOptions, or as createToolSearchTool, pr as shellKill, qf as hydrateReadStateFromSessionAsync, rr as tailTruncate, sr as SkillsUseToolOptions, 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, zf as ToolDef } from "./index-8zm_hwdY.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-rDmfeLmz.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-IPshmLIF.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-tLfGSSQw.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 { Au as SessionMeta, Cs as SubagentOverride, Do as ExtensionRegistry, Gu as ProviderKey, Ka as StoredExtensionConfigItem, Mu as StreamEvent, Ou as Picked, Pa as ExtensionConfigCategory, Pu as ModelChainEntry, Tf as ToolResultContent, Wu as ProviderAuth, Yu as ModelInfo, Zu as ProviderDescriptor, _f as SessionTurn, bf as ThinkingLevel, fu as AgentRegistry, ip as SessionData, ju as Settings, op as SessionRun, pf as SessionContentBlock, qd as McpServerConfig, sp as SessionStore, t as Preset, ws as SubagentRegistry, wu as EditOutcome } from "./index-BDtxt4FY.js";
1
+ import { Au as SessionMeta, Cs as SubagentOverride, Do as ExtensionRegistry, Gu as ProviderKey, Ka as StoredExtensionConfigItem, Mu as StreamEvent, Ou as Picked, Pa as ExtensionConfigCategory, Pu as ModelChainEntry, Tf as ToolResultContent, Wu as ProviderAuth, Yu as ModelInfo, Zu as ProviderDescriptor, _f as SessionTurn, bf as ThinkingLevel, fu as AgentRegistry, ip as SessionData, ju as Settings, op as SessionRun, pf as SessionContentBlock, qd as McpServerConfig, sp as SessionStore, t as Preset, ws as SubagentRegistry, wu as EditOutcome } from "./index-8zm_hwdY.js";
2
2
  //#region src/chat/hints.d.ts
3
3
  /**
4
4
  * Single hint entry — `<key> <label>`, optionally followed by an inline
@@ -1216,12 +1216,20 @@ interface DiscoveryError {
1216
1216
  path: string;
1217
1217
  source: 'project' | 'user';
1218
1218
  message: string;
1219
+ /**
1220
+ * A deliberate, documented behavior being reported (e.g. the ruler stdio
1221
+ * security carve-out) rather than a failure. Hosts should style these as
1222
+ * info, not error — crying wolf over a working default trains users to
1223
+ * ignore the channel that also carries real parse failures.
1224
+ */
1225
+ informational?: boolean;
1219
1226
  }
1220
1227
  /**
1221
1228
  * Result of {@link discoverProjectMcps}. `servers` is the per-source-priority
1222
1229
  * merged list (project beats user, first-found wins on name collision).
1223
- * `errors` is one entry per file that existed but failed to parse — empty
1224
- * on the happy path.
1230
+ * `errors` is one entry per file that existed but failed to parse, plus
1231
+ * informational entries for servers a security gate skipped (ruler stdio
1232
+ * without the foreign-agent opt-in) — empty on the happy path.
1225
1233
  */
1226
1234
  interface DiscoveryResult {
1227
1235
  servers: DiscoveredMcp[];
@@ -1459,4 +1467,4 @@ declare function computeTurnAnchors(items: readonly TranscriptItem[]): {
1459
1467
  };
1460
1468
  //#endregion
1461
1469
  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 };
1462
- //# sourceMappingURL=transcript-anchors-Bvb8iMiY.d.ts.map
1470
+ //# sourceMappingURL=transcript-anchors-CJ2dmpQk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transcript-anchors-Bvb8iMiY.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-CJ2dmpQk.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,17 +1,17 @@
1
1
  import { l as toolResultToText } from "./types-BIarq1qE.js";
2
- import { Ct as readFile$1, Ft as resolveStorageDirs, Gt as mergeKeybindings, Jt as readKeybindingsRaw, Mt as glob, Nt as edit, R as EMPTY_EXTENSION_REGISTRY, Tt as multiEdit, Yt as resolveExtensionKeybindings, Z as buildExtensionPreset, ft as waitTask, jt as grep, kt as listFiles, mt as createSpawnTool, ot as composePresets, st as definePreset, ut as writeFile$1, xt as shell, yt as shellKill } from "./agent-IPshmLIF.js";
2
+ import { Ct as readFile$1, Ft as resolveStorageDirs, Gt as mergeKeybindings, Jt as readKeybindingsRaw, Mt as glob, Nt as edit, R as EMPTY_EXTENSION_REGISTRY, Tt as multiEdit, Yt as resolveExtensionKeybindings, Z as buildExtensionPreset, ft as waitTask, jt as grep, kt as listFiles, mt as createSpawnTool, ot as composePresets, st as definePreset, ut as writeFile$1, xt as shell, yt as shellKill } from "./agent-tLfGSSQw.js";
3
3
  import { a as formatDuration, c as previewLine, i as fmtTokens, l as shortId } from "./format-BF745pLL.js";
4
4
  import { l as errorMessage } from "./errors-DJUxZg9b.js";
5
- import { M as findGitRoot$1, i as discoverSkills, j as projectUserPaths } from "./resolve-x5mlFtLX.js";
5
+ import { M as findGitRoot$1, i as discoverSkills, j as projectUserPaths } from "./resolve-BPTA1RpX.js";
6
6
  import { t as writeFileAtomic } from "./atomic-write-B7zr1ddF.js";
7
7
  import { n as connectMcpServers, o as normalizeMcpServers } from "./mcp-H6bqyM94.js";
8
- import { r as formatTokenUsage } from "./stats-DAKBEKjc.js";
9
8
  import { joinSystemPrompt } from "./prompt.js";
9
+ import { r as formatTokenUsage } from "./stats-DAKBEKjc.js";
10
10
  import { i as findActiveTriggers, n as collectReferences, o as mergeSuggestions, t as applyInsert } from "./completion-core-BRo86R_L.js";
11
11
  import { r as fetchUrl } from "./fetch-url-_5WKWpbQ.js";
12
12
  import { webSearch } from "./tools/web-search.js";
13
13
  import { C as restoreModelOptions, l as BUILTIN_PROVIDERS, n as applyApiKeyEnv, r as credentialsPath, t as detectAuth, v as modelSupportsReasoning, y as modelsForDescriptor } from "./auth-CpdQebUy.js";
14
- import { $ as extractEditPayload, ct as parseEditOutcomesFromResult, m as ownerOf, mt as chatReferenceTokensFromText, u as capTranscriptEvents } from "./turn-operations-CokV32wf.js";
14
+ import { $ as extractEditPayload, ct as parseEditOutcomesFromResult, m as ownerOf, mt as chatReferenceTokensFromText, u as capTranscriptEvents } from "./turn-operations-ClGa1vnb.js";
15
15
  import { createRequire } from "node:module";
16
16
  import { dirname, isAbsolute, join, posix, relative, resolve, sep } from "node:path";
17
17
  import { Buffer as Buffer$1 } from "node:buffer";
@@ -221,7 +221,7 @@ function eventsFromTurns(turns, runs = []) {
221
221
  pendingToolCallsPerRun.set(rid, pending);
222
222
  }
223
223
  const childLabelByRunId = /* @__PURE__ */ new Map();
224
- [...runById.values()].filter((r) => (r.depth ?? 0) > 0).sort((a, b) => a.startedAt - b.startedAt).forEach((r, i) => childLabelByRunId.set(r.id, `child-${i + 1}`));
224
+ [...runById.values()].filter((r) => (r.depth ?? 0) > 0).sort((a, b) => a.startedAt - b.startedAt).forEach((r, i) => childLabelByRunId.set(r.id, r.label ?? `child-${i + 1}`));
225
225
  const labelFor = (runId) => childLabelByRunId.get(runId) ?? runId;
226
226
  const toolByCallId = /* @__PURE__ */ new Map();
227
227
  for (const turn of turns) {
@@ -311,9 +311,10 @@ function eventsFromTurns(turns, runs = []) {
311
311
  const pushSpawnStart = (run) => {
312
312
  const taskPreview = previewLine(run.prompt, 80);
313
313
  const model = run.turnUsage?.find((u) => u.modelId)?.modelId;
314
+ const resumes = run.resumedFromRunId ? labelFor(run.resumedFromRunId) : void 0;
314
315
  events.push({
315
316
  kind: "spawn-start",
316
- text: taskPreview,
317
+ text: resumes ? `resumes ${resumes} · ${taskPreview}` : taskPreview,
317
318
  childId: labelFor(run.id),
318
319
  depth: run.depth ?? 1,
319
320
  spawn: {
@@ -5266,6 +5267,7 @@ const DEFAULT_SETTINGS = {
5266
5267
  resumeOnMaxTokens: false,
5267
5268
  maxOutputTokens: 0,
5268
5269
  maxTurns: 0,
5270
+ retryMaxAttempts: 0,
5269
5271
  maxCostUsd: 0,
5270
5272
  maxTotalTokens: 0,
5271
5273
  maxWallMinutes: 0,
@@ -5592,6 +5594,38 @@ const SETTINGS_CHOICES = [
5592
5594
  }
5593
5595
  ]
5594
5596
  },
5597
+ {
5598
+ category: "agent",
5599
+ key: "retryMaxAttempts",
5600
+ label: "Provider retry attempts",
5601
+ description: "max attempts per provider call (retryable errors + silent stream stalls) — applies to the session and its subagents",
5602
+ options: [
5603
+ {
5604
+ value: 0,
5605
+ label: "Default (3)"
5606
+ },
5607
+ {
5608
+ value: 1,
5609
+ label: "1 (no retry)"
5610
+ },
5611
+ {
5612
+ value: 2,
5613
+ label: "2"
5614
+ },
5615
+ {
5616
+ value: 3,
5617
+ label: "3"
5618
+ },
5619
+ {
5620
+ value: 5,
5621
+ label: "5"
5622
+ },
5623
+ {
5624
+ value: 8,
5625
+ label: "8"
5626
+ }
5627
+ ]
5628
+ },
5595
5629
  {
5596
5630
  category: "agent",
5597
5631
  key: "maxTurns",
@@ -7700,6 +7734,7 @@ function discoverProjectMcps(opts = {}) {
7700
7734
  const paths = mcpsDiscoveryPaths(opts).filter((p) => existsSync(p.path));
7701
7735
  const projectRoot = findGitRoot$1(opts.cwd ?? process.cwd()) ?? opts.cwd ?? process.cwd();
7702
7736
  const seen = /* @__PURE__ */ new Set();
7737
+ const droppedStdioSeen = /* @__PURE__ */ new Set();
7703
7738
  const servers = [];
7704
7739
  const errors = [];
7705
7740
  const claudeStateCache = /* @__PURE__ */ new Map();
@@ -7736,9 +7771,16 @@ function discoverProjectMcps(opts = {}) {
7736
7771
  if (process.env.ZIDANE_DEBUG) process.stderr.write(`[zidane/chat] failed to parse "${path}": ${message}\n`);
7737
7772
  continue;
7738
7773
  }
7774
+ const droppedStdio = [];
7739
7775
  for (const config of configs) {
7740
- if (dropStdio && config.transport === "stdio") continue;
7741
7776
  if (seen.has(config.name)) continue;
7777
+ if (dropStdio && config.transport === "stdio") {
7778
+ if (!droppedStdioSeen.has(config.name)) {
7779
+ droppedStdioSeen.add(config.name);
7780
+ droppedStdio.push(config.name);
7781
+ }
7782
+ continue;
7783
+ }
7742
7784
  seen.add(config.name);
7743
7785
  servers.push({
7744
7786
  config,
@@ -7746,6 +7788,12 @@ function discoverProjectMcps(opts = {}) {
7746
7788
  path
7747
7789
  });
7748
7790
  }
7791
+ if (droppedStdio.length > 0) errors.push({
7792
+ path,
7793
+ source,
7794
+ message: `${droppedStdio.length} stdio server${droppedStdio.length === 1 ? "" : "s"} (${droppedStdio.join(", ")}) skipped — running stdio commands from Ruler files needs “Import configurations from other agents” enabled.`,
7795
+ informational: true
7796
+ });
7749
7797
  }
7750
7798
  return {
7751
7799
  servers,
@@ -9313,4 +9361,4 @@ function computeTurnAnchors(items) {
9313
9361
  //#endregion
9314
9362
  export { McpAuthProvider as $, TOKEN_DISCIPLINE_DOCTRINE as $n, filterChainFallbacks as $t, runOAuthLogin as A, TODOREAD_TOOL as An, useSettings as At, mcpToolsCachePath as B, pruneTodosByRun as Bn, CATPPUCCIN_MACCHIATO as Bt, projectsFilePath as C, DEFAULT_AGENT_ID as Cn, DEFAULT_SETTINGS as Ct, formatPathForCwd as D, accentColor as Dn, SETTINGS_TOGGLES as Dt, writeProjects as E, PLAN_AGENT as En, SETTINGS_INPUTS as Et, parseJsonTolerant as F, createTodoTools as Fn, VAPORWAVE_THEME as Ft, useMcpToolToggleMap as G, COMMUNICATION_DOCTRINE as Gn, useDiscoveryOptional as Gt, saveMcpToolsCache as H, setTodosForRun as Hn, createDiscoverySlot as Ht, parseMcpsFile as I, getArchivedTodosForRun as In, GRUVBOX_DARK as It, indexOfServerRow as J, INTERACTION_GUIDANCE as Jn, resolveConfig as Jt, useMcpToolToggleSet as K, DOING_TASKS_DOCTRINE as Kn, ConfigProvider as Kt, parseClaudeState as L, getTodosForRun as Ln, GRUVBOX_LIGHT as Lt, buildMcpServers as M, TODOWRITE_TOOL as Mn, DEFAULT_THEME as Mt, defaultMcpsConfigPaths as N, TODO_STATUS_GLYPHS as Nn, resolveChipColor as Nt, fetchOAuthRedirect as O, resolveAgentId as On, SettingsProvider as Ot, discoverProjectMcps as P, TODO_WRITE_COUNTS_METADATA_KEY as Pn, resolveTheme as Pt, patchMcpCredential as Q, SUBAGENT_GUIDANCE as Qn, chainsEqual as Qt, clearMcpToolsCache as R, isTodoTool as Rn, CATPPUCCIN_FRAPPE as Rt, matchesSafelistEntry as S, BUILTIN_AGENTS as Sn, usageByModel as Sr, useEnabledToggleSet as St, suggestSafelistEntries as T, DEFAULT_PERSIST_EXCLUDE_TOOLS as Tn, SETTINGS_CHOICES as Tt, subscribeMcpToolsCache as U, useActiveTodos as Un, DiscoveryProvider as Ut, refreshMcpToolsCatalog as V, selectActiveTodos as Vn, CATPPUCCIN_MOCHA as Vt, buildToolToggle as W, ACTIONS_WITH_CARE_DOCTRINE as Wn, useDiscovery as Wt, createFileMcpCredentialStore as X, PLAN_MODE_DOCTRINE as Xn, buildRunModel as Xt, parentServerName as Y, INTERACTION_GUIDANCE_NO_PROMPTS as Yn, resolveStoragePaths as Yt, mcpCredentialsPath as Z, PLAN_MODE_DOCTRINE_NO_PROMPTS as Zn, chainPositionOf as Zt, useSafeModeQueue as _, resolvePlatformPackage as _n, sumRunCosts as _r, hintsLength as _t, useSurfaces as a, tryOpenBrowser as an, DEFAULT_SESSION_TITLE as ar, InteractionsProvider as at, getSafelist as b, renderAgentsMdBlock as bn, toolResultText as br, shortChord as bt, useStreamBuffer as c, buildUpdateHint as cn, deriveSessionTitle as cr, createInteractionTools as ct, discoverProjectSkills as d, compareSemver as dn, listSessionMeta as dr, pendingInteractionsFromTurns as dt, providerKeySetChanged as en, buildBuildSystem as er, useMcpAuthDispatch as et, renderSession as f, detectLibc as fn, loadState as fr, serializeInteractionResponse as ft, useSafeModeActions as g, performSelfUpdate as gn, stripSpawnTokensLine as gr, clipHintsToWidth as gt, SafeModeProvider as h, performInPlaceSelfUpdate as hn, serverToolResultSummary as hr, EMPTY_HINTS as ht, useSelectStyle as i, useCompletion as in, createChatTurnsReadTool as ir, ASK_USER_TOOL as it, supportsOAuth as j, TODOS_METADATA_KEY as jn, BUILTIN_THEMES as jt, oauthUsesManualCodePaste as k, singleAgentRegistry as kn, clampFps as kt, buildSkillsConfig as l, useUpdateCheck as ln, eventsFromTurns as lr, isInteractionTool as lt, writeSessionExport as m, parseSemver as mn, saveState as mr, useInteractionsQueue as mt, ThemeProvider as n, sanitizeModelChain as nn, envSection as nr, getMcpAuthStatus as nt, useSyntaxStyles as o, bootProfileEnabled as on, compactSummaryEvent as or, PRESENT_PLAN_TOOL as ot, resolveSessionExportTarget as p, detectPackageManager as pn, marginTopFor as pr, useInteractionsActions as pt, buildVisibleMcpRows as q, IDENTITY_PREFIX as qn, useConfig as qt, useColors as r, toggleChainEntry as rn, chatReferenceTokensForPrompt as rr, reduceMcpAuth as rt, useTheme as s, bootTick as sn, createStateStore as sr, buildResumedToolResultsTurn as st, computeTurnAnchors as t, restoreChainFallbacks as tn, buildPlanSystem as tr, useMcpAuthState as tt, defaultSkillScanPaths as u, checkForUpdate as un, lastContextSizeFromTurns as ur, makeRequestInteraction as ut, IMPLICITLY_SAFE_TOOLS as v, chatAutoCompactBehavior as vn, titleFromTurns as vr, truncateTrailing as vt, readProjects as w, DEFAULT_BUDGET_EXCLUDE_TOOLS as wn, SETTINGS_CATEGORIES as wt, isOnSafelist as x, BUILD_AGENT as xn, updateToolEventOutcomes as xr, listProjectFiles as xt, addToSafelist as y, discoverAgentsMd as yn, toolCallPreview as yr, buildHints as yt, loadMcpToolsCache as z, pickActiveRunId as zn, CATPPUCCIN_LATTE as zt };
9315
9363
 
9316
- //# sourceMappingURL=transcript-anchors-DvLIRYLz.js.map
9364
+ //# sourceMappingURL=transcript-anchors-Ded7iJjG.js.map