From 997a2c1f7a1f070e1f2ed5c724fef98c6b112164 Mon Sep 17 00:00:00 2001 From: MongLong0214 Date: Fri, 14 Aug 2026 09:00:22 +0900 Subject: [PATCH 1/3] Converge CommitLore runtime identity CommitLore surfaces shared a command name while selecting independent entrypoints and package roots, so an upgrade could leave hooks, plugins, MCP, and index readers on incompatible programs. Record and compare the full runtime identity and make doctor prescribe surface-specific convergence. Ruled-out: version-only comparison | equal version strings still allow different entrypoints and package roots Blast: system Undo: easy Certainty: firm Record-Id: r-runtime001 Provenance: authored Verified: npx tsc --noEmit; runtime-identity, doctor, hooks, init, index-db, installer-hosts, mcp, codex-plugin, and doctor-snapshot Vitest suites; linux/amd64 npm ci and npm run build; dist 280 files --- dist/cli.js | 13 + dist/cli.js.map | 2 +- .../checks/runtime-runtime-identity.d.ts | 8 + .../doctor/checks/runtime-runtime-identity.js | 58 ++ .../checks/runtime-runtime-identity.js.map | 1 + dist/commands/doctor/registry.js | 2 + dist/commands/doctor/registry.js.map | 2 +- dist/commands/hooks.js | 9 +- dist/commands/hooks.js.map | 2 +- dist/commands/installer-hosts.d.ts | 3 + dist/commands/installer-hosts.js | 3 +- dist/commands/installer-hosts.js.map | 2 +- dist/commitlore.mjs | 593 +++++++++++------- dist/core/codex-plugin.js | 4 +- dist/core/codex-plugin.js.map | 2 +- dist/core/hook-target.d.ts | 3 + dist/core/hook-target.js | 25 +- dist/core/hook-target.js.map | 2 +- dist/core/runtime-identity.d.ts | 33 + dist/core/runtime-identity.js | 83 +++ dist/core/runtime-identity.js.map | 1 + dist/mcp/lifecycle.d.ts | 5 + dist/mcp/lifecycle.js | 30 +- dist/mcp/lifecycle.js.map | 2 +- dist/mcp/server.d.ts | 1 + dist/mcp/server.js | 12 +- dist/mcp/server.js.map | 2 +- package.json | 3 + src/cli.ts | 14 + .../doctor/checks/runtime-runtime-identity.ts | 69 ++ src/commands/doctor/registry.ts | 2 + src/commands/hooks.ts | 8 +- src/commands/installer-hosts.ts | 6 +- src/core/codex-plugin.ts | 4 +- src/core/hook-target.ts | 16 +- src/core/runtime-identity.ts | 106 ++++ src/mcp/lifecycle.ts | 27 +- src/mcp/server.ts | 12 +- .../doctor-snapshot.test.ts.snap | 18 +- test/installer-hosts.test.ts | 3 +- test/mcp.test.ts | 13 + test/runtime-identity.test.ts | 79 +++ 42 files changed, 1025 insertions(+), 258 deletions(-) create mode 100644 dist/commands/doctor/checks/runtime-runtime-identity.d.ts create mode 100644 dist/commands/doctor/checks/runtime-runtime-identity.js create mode 100644 dist/commands/doctor/checks/runtime-runtime-identity.js.map create mode 100644 dist/core/runtime-identity.d.ts create mode 100644 dist/core/runtime-identity.js create mode 100644 dist/core/runtime-identity.js.map create mode 100644 src/commands/doctor/checks/runtime-runtime-identity.ts create mode 100644 src/core/runtime-identity.ts create mode 100644 test/runtime-identity.test.ts diff --git a/dist/cli.js b/dist/cli.js index c0c367f1..c2dea629 100644 --- a/dist/cli.js +++ b/dist/cli.js @@ -16,6 +16,7 @@ import { register as registerAuto } from './commands/auto.js'; import { register as registerCapture } from './commands/capture.js'; import { register as registerDemo } from './commands/demo.js'; import { packageVersion } from './core/paths.js'; +import { formatRuntimeIdentity, runtimeIdentity } from './core/runtime-identity.js'; import { register as registerDoctor } from './commands/doctor.js'; import { register as registerHarvest } from './commands/harvest.js'; import { register as registerGuard } from './commands/guard.js'; @@ -98,6 +99,18 @@ program .name('commitlore') .description('Git commit trailers as institutional memory for AI coding agents') .version(pkg.version ?? '0.0.0'); +// Machine-readable on purpose: hooks, installers and MCP hosts need the +// entrypoint and root too; a version string was the ambiguity F-001 found. +program + .command('runtime-identity') + .description('print the exact CommitLore runtime this command executes') + .option('--json', 'emit the runtime identity as JSON') + .action((options) => { + const identity = runtimeIdentity(); + process.stdout.write(options.json === true + ? `${formatRuntimeIdentity(identity)}\n` + : `version ${identity.version}\nentrypoint ${identity.entrypoint}\npackage root ${identity.packageRoot}\nindex schema v${identity.indexSchemaVersion}\n`); +}); program .command('parse') .description('Parse a commit message into its CommitLore trailers (SPEC §2)') diff --git a/dist/cli.js.map b/dist/cli.js.map index c39aa544..6fbb85ad 100644 --- a/dist/cli.js.map +++ b/dist/cli.js.map @@ -1 +1 @@ -{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/commands/doctor/checks/runtime-runtime-identity.d.ts b/dist/commands/doctor/checks/runtime-runtime-identity.d.ts new file mode 100644 index 00000000..bd53e404 --- /dev/null +++ b/dist/commands/doctor/checks/runtime-runtime-identity.d.ts @@ -0,0 +1,8 @@ +/** One doctor row that compares the programs actually selected by each surface. */ +import { type DoctorCheck, type DoctorContext } from '../model.js'; +/** + * A single mismatch report, not four independent version checks. The root and + * entrypoint are compared with the version so two cache copies cannot appear + * healthy merely because their package manifests carry the same release. + */ +export declare const checkRuntimeIdentity: (ctx: DoctorContext) => DoctorCheck; diff --git a/dist/commands/doctor/checks/runtime-runtime-identity.js b/dist/commands/doctor/checks/runtime-runtime-identity.js new file mode 100644 index 00000000..3ad38d58 --- /dev/null +++ b/dist/commands/doctor/checks/runtime-runtime-identity.js @@ -0,0 +1,58 @@ +/** One doctor row that compares the programs actually selected by each surface. */ +import { existsSync } from 'node:fs'; +import { join } from 'node:path'; +import { recordedHookIdentity, readRecordedHookTarget } from '../../../core/hook-target.js'; +import { convergeIndexSchema, diagnoseRuntimeIdentities, runtimeAssetProblems, runtimeIdentity, } from '../../../core/runtime-identity.js'; +import { latestLifecycleIdentity } from '../../../mcp/lifecycle.js'; +import { check } from '../model.js'; +const pluginIdentity = () => { + const root = process.env['CLAUDE_PLUGIN_ROOT']; + if (root === undefined || root === '') + return undefined; + const entry = join(root, 'dist', 'commitlore.mjs'); + try { + return existsSync(entry) ? runtimeIdentity(entry) : undefined; + } + catch { + return undefined; + } +}; +/** + * A single mismatch report, not four independent version checks. The root and + * entrypoint are compared with the version so two cache copies cannot appear + * healthy merely because their package manifests carry the same release. + */ +export const checkRuntimeIdentity = (ctx) => { + const cwd = ctx.opts.cwd ?? process.cwd(); + const cli = runtimeIdentity(); + const hook = recordedHookIdentity(readRecordedHookTarget(cwd), cwd) ?? undefined; + const mcp = latestLifecycleIdentity(cwd) ?? undefined; + const plugin = pluginIdentity(); + const diagnosis = diagnoseRuntimeIdentities({ cli, ...(hook === undefined ? {} : { hook }), ...(mcp === undefined ? {} : { mcp }), ...(plugin === undefined ? {} : { plugin }) }); + const identities = [ + ['cli', cli], + ...(hook === undefined ? [] : [['hook', hook]]), + ...(mcp === undefined ? [] : [['mcp', mcp]]), + ...(plugin === undefined ? [] : [['plugin', plugin]]), + ]; + const missing = identities.flatMap(([surface, identity]) => runtimeAssetProblems(identity).map((path) => `${surface}: ${path}`)); + const schema = mcp === undefined ? undefined : convergeIndexSchema({ writer: cli, reader: mcp }); + const detail = [ + diagnosis.ok ? diagnosis.detail : diagnosis.detail, + ...(missing.length === 0 ? [] : [`capture assets missing: ${missing.join(', ')}`]), + ...(schema === undefined || schema.ok ? [] : [schema.detail]), + ].join('\n'); + const fixes = [ + diagnosis.ok ? '' : diagnosis.fix, + ...(missing.length === 0 ? [] : ['remove the stale package root named above, reinstall that host plugin, then restart its session']), + ...(schema === undefined || schema.ok ? [] : ['upgrade the MCP runtime, restart its host session, then run commitlore index --rebuild']), + ].filter(Boolean).join('\n'); + return check('runtime-identity', 'runtime', 'runtime identity', diagnosis.ok && missing.length === 0 && (schema === undefined || schema.ok) ? 'ok' : 'warn', detail, fixes === '' ? null : fixes, false, undefined, { evidence: { + cli: JSON.stringify(cli), + hook: hook === undefined ? 'not_observed' : JSON.stringify(hook), + mcp: mcp === undefined ? 'not_observed (start an MCP session, then rerun doctor)' : JSON.stringify(mcp), + plugin: plugin === undefined ? 'not_observed' : JSON.stringify(plugin), + missing_assets: missing.join(', ') || 'none', + } }); +}; +//# sourceMappingURL=runtime-runtime-identity.js.map \ No newline at end of file diff --git a/dist/commands/doctor/checks/runtime-runtime-identity.js.map b/dist/commands/doctor/checks/runtime-runtime-identity.js.map new file mode 100644 index 00000000..55dabbab --- /dev/null +++ b/dist/commands/doctor/checks/runtime-runtime-identity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime-runtime-identity.js","sourceRoot":"","sources":["../../../../src/commands/doctor/checks/runtime-runtime-identity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/commands/doctor/registry.js b/dist/commands/doctor/registry.js index 42144ea2..c1215e8f 100644 --- a/dist/commands/doctor/registry.js +++ b/dist/commands/doctor/registry.js @@ -17,6 +17,7 @@ import { checkHistoryDepth } from './checks/history-history-depth.js'; import { checkSquashConservation } from './checks/history-squash-conservation.js'; import { checkIndex } from './checks/index-index-health.js'; import { checkRuntime } from './checks/runtime-cli-runtime.js'; +import { checkRuntimeIdentity } from './checks/runtime-runtime-identity.js'; import { checkInstallationIntegrity } from './checks/runtime-installation-integrity.js'; import { checkGit } from './checks/runtime-git-trailers.js'; import { checkPush } from './checks/transport-notes-push.js'; @@ -49,6 +50,7 @@ const selectedHookRuntimeOf = (ctx) => ctx.selectedIds?.has('hook-runtime') === */ export const CHECK_REGISTRY = [ { id: 'cli-runtime', title: 'cli runtime', category: 'runtime', dependencies: [], optional: false, run: (ctx) => checkRuntime(ctx) }, + { id: 'runtime-identity', title: 'runtime identity', category: 'runtime', dependencies: [], optional: false, run: (ctx) => checkRuntimeIdentity(ctx) }, { id: 'installation-integrity', title: 'installation integrity', category: 'runtime', dependencies: [], optional: false, run: (ctx) => checkInstallationIntegrity(ctx) }, { id: 'notes-refspec', title: 'notes fetch refspec', category: 'transport', dependencies: [], optional: false, run: (ctx) => checkRefspec(ctx) }, { id: 'notes-push', title: 'notes push', category: 'transport', dependencies: [], optional: false, run: (ctx) => checkPush(ctx) }, diff --git a/dist/commands/doctor/registry.js.map b/dist/commands/doctor/registry.js.map index 423b9940..8f5f703b 100644 --- a/dist/commands/doctor/registry.js.map +++ b/dist/commands/doctor/registry.js.map @@ -1 +1 @@ -{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/commands/doctor/registry.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/commands/doctor/registry.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/commands/hooks.js b/dist/commands/hooks.js index a46f5fb0..26fbf4c8 100644 --- a/dist/commands/hooks.js +++ b/dist/commands/hooks.js @@ -23,7 +23,7 @@ import { randomBytes } from 'node:crypto'; import { chmodSync, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, statSync, unlinkSync, writeFileSync, } from 'node:fs'; import { join, resolve } from 'node:path'; import { execGit } from '../core/git.js'; -import { describeRecordedHookTarget, readRecordedHookTarget, } from '../core/hook-target.js'; +import { describeRecordedHookTarget, recordedHookIdentity, readRecordedHookTarget, } from '../core/hook-target.js'; import { PACKAGE_ROOT } from '../core/paths.js'; import { CHAINED_HOOK_NAME, HOOK_MARKER, HOOK_MODE, HOOK_NAME, commitMsgStub, } from '../hooks/commit-msg.js'; import { POST_COMMIT_CHAINED_HOOK_NAME, POST_COMMIT_HOOK_MARKER, POST_COMMIT_HOOK_NAME, } from '../hooks/post-commit.js'; @@ -325,9 +325,10 @@ export const uninstallHook = (input = {}) => { return success(readHookStatus(cwd), lines); }; export const hookStatus = (input = {}) => { + const cwd = input.cwd ?? process.cwd(); let status; try { - status = readHookStatus(input.cwd ?? process.cwd()); + status = readHookStatus(cwd); } catch (error) { return failure(messageOf(error)); @@ -341,10 +342,14 @@ export const hookStatus = (input = {}) => { const targetWarning = status.state === 'installed' && status.recordedTarget.problems.length > 0 ? ', recorded target warning — run `commitlore hooks install`' : ''; + const identity = recordedHookIdentity(status.recordedTarget, cwd); return success(status, [ `hooks dir: ${status.hooksDir}`, `${HOOK_NAME}: ${state}${targetWarning}`, ...describeRecordedHookTarget(status.recordedTarget), + ...(identity === null + ? [] + : [`hook runtime identity: ${JSON.stringify(identity)}`]), ...status.recordedTarget.problems.map((problem) => `warning: ${problem}`), ...describeChained(status), ]); diff --git a/dist/commands/hooks.js.map b/dist/commands/hooks.js.map index a36ba177..ca1a3ecb 100644 --- a/dist/commands/hooks.js.map +++ b/dist/commands/hooks.js.map @@ -1 +1 @@ -{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAGL,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,SAAS,EACT,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oCAAoC,EACpC,8BAA8B,EAC9B,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AAgCxC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE,CAC3C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAEzD,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAEtF,MAAM,OAAO,GAAG,CAAC,OAAe,EAAc,EAAE,CAAC,CAAC;IAChD,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,eAAe,OAAO,IAAI;CACnC,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,CAAC,MAAkB,EAAE,KAAe,EAAc,EAAE,CAAC,CAAC;IACpE,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;IAC/B,MAAM,EAAE,EAAE;IACV,MAAM;CACP,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,eAAe,GAAG,CAAC,GAAW,EAAU,EAAE;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACtE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAW,EAAE;IAC7C,IAAI,CAAC;QACH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAa,EAAE;IACpD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE3C,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;QAClF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IACtD,OAAO,QAAQ,KAAK,aAAa,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,EAAc,EAAE;IAChE,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAEtD,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC;QAC9B,WAAW;QACX,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC;QAChC,iBAAiB,EAAE,YAAY,CAAC,WAAW,CAAC;QAC5C,cAAc,EAAE,sBAAsB,CAAC,GAAG,CAAC;KAC5C,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAQ,EAAE;IAC3C,MAAM,SAAS,GAAG,GAAG,QAAQ,QAAQ,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IACrF,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/D,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAyB,EAAE,GAAW,EAAiB,EAAE;IAC7F,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAErD,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAiB,EAAE;QACxD,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAElE,6DAA6D;IAC7D,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,IAAI,GAAG,KAAK,EAAE;YAAE,SAAS;QACzB,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAW,EAAQ,EAAE;IAC1C,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClE,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO;IACnC,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACzE,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,yEAAyE;IACzE,0DAA0D;IAC1D,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7E,wEAAwE;IACxE,2EAA2E;IAC3E,+DAA+D;IAC/D,uEAAuE;IACvE,qEAAqE;IACrE,4EAA4E;IAC5E,2EAA2E;IAC3E,uEAAuE;IACvE,6DAA6D;IAC7D,IAAI,CAAC;QACH,4EAA4E;QAC5E,8EAA8E;QAC9E,yCAAyC;QACzC,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACzF,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,uEAAuE;IACzE,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAkB,EAAY,EAAE;IACvD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB;QACnC,CAAC,CAAC,wBAAwB;QAC1B,CAAC,CAAC,yEAAyE,CAAC;IAC9E,OAAO,CAAC,mBAAmB,MAAM,CAAC,WAAW,KAAK,IAAI,GAAG,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAmB,EAAE,EAAc,EAAE;IAC/D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvC,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,OAAO,CACZ,GAAG,MAAM,CAAC,QAAQ,iCAAiC,MAAM,CAAC,WAAW,oBAAoB;oBACvF,+DAA+D,CAClE,CAAC;YACJ,CAAC;YACD,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QACD,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3B,aAAa,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,yBAAyB,SAAS,UAAU,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,aAAa,SAAS,UAAU,KAAK,CAAC,QAAQ,EAAE;QACxD,OAAO,EAAE,aAAa,SAAS,UAAU,KAAK,CAAC,QAAQ,wCAAwC;QAC/F,QAAQ,EAAE,WAAW,SAAS,UAAU,KAAK,CAAC,QAAQ,EAAE;QACxD,SAAS,EAAE,GAAG,SAAS,4BAA4B,KAAK,CAAC,QAAQ,cAAc;KAChF,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhB,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AAQF;;;;;;;GAOG;AACH,MAAM,aAAa,GAA2B;IAC5C;QACE,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,8BAA8B;QACtC,WAAW,EAAE,oCAAoC;KAClD;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,uBAAuB;QAC/B,WAAW,EAAE,6BAA6B;KAC3C;IACD,0EAA0E;IAC1E,iEAAiE;IACjE;QACE,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,oBAAoB;QAC5B,WAAW,EAAE,0BAA0B;KACxC;CACF,CAAC;AAEF,wFAAwF;AACxF,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAE,IAAiB,EAAY,EAAE;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,oBAAoB,QAAQ,EAAE,CAAC,CAAC;IAElF,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;QACvE,OAAO,CAAC,GAAG,QAAQ,kDAAkD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,QAAQ,kDAAkD,CAAC,CAAC;IACzE,CAAC;IAED,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrB,6EAA6E;IAC7E,4EAA4E;IAC5E,8EAA8E;IAC9E,gBAAgB;IAChB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,UAAU,QAAQ,EAAE,CAAC,CAAC;IAChF,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,UAAU,QAAQ,EAAE,EAAE,+BAA+B,QAAQ,EAAE,CAAC,CAAC;AAC/F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAmB,EAAE,EAAc,EAAE;IACjE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvC,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,oBAAoB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CACR,GAAG,MAAM,CAAC,QAAQ,kDAAkD,EACpE,GAAG,eAAe,CAAC,MAAM,CAAC,CAC3B,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,MAAM,CAAC,OAAO;gBAAE,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,wBAAwB,SAAS,UAAU,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,WAAW,SAAS,UAAU,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,6EAA6E;IAC7E,kEAAkE;IAClE,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,wBAAwB,IAAI,CAAC,IAAI,UAAU,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAmB,EAAE,EAAc,EAAE;IAC9D,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,wBAAwB;QACnC,QAAQ,EAAE,8EAA8E;QACxF,OAAO,EAAE,sCAAsC;KAChD,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,MAAM,aAAa,GACjB,MAAM,CAAC,KAAK,KAAK,WAAW,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QACvE,CAAC,CAAC,4DAA4D;QAC9D,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,OAAO,CAAC,MAAM,EAAE;QACrB,cAAc,MAAM,CAAC,QAAQ,EAAE;QAC/B,GAAG,SAAS,KAAK,KAAK,GAAG,aAAa,EAAE;QACxC,GAAG,0BAA0B,CAAC,MAAM,CAAC,cAAc,CAAC;QACpD,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,OAAO,EAAE,CAAC;QACzE,GAAG,eAAe,CAAC,MAAM,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,MAAkB,EAAQ,EAAE;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAQ,EAAE;IACjD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,sCAAsC,SAAS,gFAAgF,CAChI,CAAC;IAEJ,KAAK;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,uEAAuE,CAAC;SACpF,MAAM,CAAC,SAAS,EAAE,qEAAqE,CAAC;SACxF,WAAW,CAAC,OAAO,EAAE,kIAAkI,CAAC;SACxJ,MAAM,CAAC,CAAC,KAA0B,EAAE,EAAE;QACrC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,4GAA4G,CAC7G;SACA,WAAW,CAAC,OAAO,EAAE,gIAAgI,CAAC;SACtJ,MAAM,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,WAAW,CAAC,OAAO,EAAE,wEAAwE,CAAC;SAC9F,MAAM,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/commands/installer-hosts.d.ts b/dist/commands/installer-hosts.d.ts index 9261dfb2..7041474c 100644 --- a/dist/commands/installer-hosts.d.ts +++ b/dist/commands/installer-hosts.d.ts @@ -7,6 +7,7 @@ * process is what makes an installer success claim useful on both platforms. */ import type { Command } from 'commander'; +import { type RuntimeIdentity } from '../core/runtime-identity.js'; export declare const INSTALLER_HOSTS_SCHEMA = "commitlore_installer_hosts.v1"; type HostOutcome = 'installed' | 'owned' | 'custom-preserved' | 'failed'; export interface HostResult { @@ -18,6 +19,8 @@ export interface HostResult { } export interface HostSummary { schema: typeof INSTALLER_HOSTS_SCHEMA; + /** Identity of the installer process that performed this live probe. */ + runtimeIdentity: RuntimeIdentity; ok: boolean; hosts: HostResult[]; notDetected: string[]; diff --git a/dist/commands/installer-hosts.js b/dist/commands/installer-hosts.js index 806a2de7..ac95fd21 100644 --- a/dist/commands/installer-hosts.js +++ b/dist/commands/installer-hosts.js @@ -10,6 +10,7 @@ import { accessSync, constants, existsSync, mkdirSync, renameSync, statSync, unl import { delimiter, dirname, join } from 'node:path'; import { randomUUID } from 'node:crypto'; import { spawn, spawnSync } from 'node:child_process'; +import { runtimeIdentity } from '../core/runtime-identity.js'; export const INSTALLER_HOSTS_SCHEMA = 'commitlore_installer_hosts.v1'; const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value); const ownEntry = (format, entry, wrapper) => { @@ -320,7 +321,7 @@ export const inspectAndApplyHosts = async (options) => { else notDetected.push('hermes'); const hosts = await Promise.all(requested); - return { schema: INSTALLER_HOSTS_SCHEMA, ok: hosts.every((host) => host.healthy), hosts, notDetected }; + return { schema: INSTALLER_HOSTS_SCHEMA, runtimeIdentity: runtimeIdentity(), ok: hosts.every((host) => host.healthy), hosts, notDetected }; }; export const register = (program) => { program.command('installer-hosts') diff --git a/dist/commands/installer-hosts.js.map b/dist/commands/installer-hosts.js.map index 86b804cb..7aa19fa5 100644 --- a/dist/commands/installer-hosts.js.map +++ b/dist/commands/installer-hosts.js.map @@ -1 +1 @@ -{"version":3,"file":"installer-hosts.js","sourceRoot":"","sources":["../../src/commands/installer-hosts.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"installer-hosts.js","sourceRoot":"","sources":["../../src/commands/installer-hosts.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/commitlore.mjs b/dist/commitlore.mjs index 81b86a24..2ab8eef4 100755 --- a/dist/commitlore.mjs +++ b/dist/commitlore.mjs @@ -2984,7 +2984,7 @@ var require_compile = __commonJS({ const schOrFunc = root.refs[ref]; if (schOrFunc) return schOrFunc; - let _sch = resolve21.call(this, root, ref); + let _sch = resolve22.call(this, root, ref); if (_sch === void 0) { const schema = (_a3 = root.localRefs) === null || _a3 === void 0 ? void 0 : _a3[ref]; const { schemaId } = this.opts; @@ -3011,7 +3011,7 @@ var require_compile = __commonJS({ function sameSchemaEnv(s1, s2) { return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId; } - function resolve21(root, ref) { + function resolve22(root, ref) { let sch; while (typeof (sch = this.refs[ref]) == "string") ref = sch; @@ -3642,7 +3642,7 @@ var require_fast_uri = __commonJS({ } return uri; } - function resolve21(baseURI, relativeURI, options) { + function resolve22(baseURI, relativeURI, options) { const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" }; const { parsed: baseParsed, malformedAuthorityOrPort: baseMalformed } = parseWithStatus(baseURI, schemelessOptions); const { parsed: relativeParsed, malformedAuthorityOrPort: relativeMalformed } = parseWithStatus(relativeURI, schemelessOptions); @@ -3926,7 +3926,7 @@ var require_fast_uri = __commonJS({ var fastUri = { SCHEMES, normalize: normalize2, - resolve: resolve21, + resolve: resolve22, resolveComponent, equal, serialize, @@ -7740,7 +7740,7 @@ var require_dist = __commonJS({ }); // src/cli.ts -import { readFileSync as readFileSync28 } from "node:fs"; +import { readFileSync as readFileSync29 } from "node:fs"; // node_modules/commander/lib/error.js var CommanderError = class extends Error { @@ -17644,7 +17644,7 @@ var register3 = (program3) => { import { execFileSync } from "node:child_process"; import { mkdtempSync, rmSync as rmSync4, writeFileSync as writeFileSync13, mkdirSync as mkdirSync9 } from "node:fs"; import { tmpdir } from "node:os"; -import { dirname as dirname7, join as join11, resolve as resolve16 } from "node:path"; +import { dirname as dirname8, join as join13, resolve as resolve17 } from "node:path"; // src/demo/fixture.ts var targetPath = "src/pricing.ts"; @@ -17681,7 +17681,7 @@ CommitLore-Version: 2.0.0 // src/commands/init.ts import { createInterface } from "node:readline"; -import { existsSync as existsSync17 } from "node:fs"; +import { existsSync as existsSync19 } from "node:fs"; // src/commands/doctor/checks/delivery-inject-runtime.ts import { resolve as resolve5 } from "node:path"; @@ -18227,12 +18227,69 @@ var checkInjectRuntime = (ctx) => { }; // src/commands/doctor/checks/capture-commit-msg-hook.ts -import { existsSync as existsSync7, readFileSync as readFileSync9 } from "node:fs"; -import { resolve as resolve7 } from "node:path"; +import { existsSync as existsSync8, readFileSync as readFileSync10 } from "node:fs"; +import { resolve as resolve8 } from "node:path"; + +// src/core/hook-target.ts +import { lstatSync, realpathSync as realpathSync2, statSync as statSync2 } from "node:fs"; +import { isAbsolute, relative, resolve as resolve7, sep } from "node:path"; + +// src/core/runtime-identity.ts +import { existsSync as existsSync7, readFileSync as readFileSync8, realpathSync } from "node:fs"; +import { dirname as dirname4, join as join4, resolve as resolve6 } from "node:path"; +var physicalPath = (path2) => { + try { + return realpathSync(path2); + } catch { + return resolve6(path2); + } +}; +var manifestAt = (root) => { + try { + return JSON.parse(readFileSync8(join4(root, "package.json"), "utf8")); + } catch { + return {}; + } +}; +var runtimeIdentity = (entrypoint) => { + const entry = physicalPath(entrypoint ?? installedPath("dist", "commitlore.mjs")); + const root = entrypoint === void 0 ? PACKAGE_ROOT : findPackageRoot(dirname4(entry)); + const manifest = manifestAt(root); + const schema = manifest.commitlore?.indexSchemaVersion; + return { + version: typeof manifest.version === "string" && manifest.version !== "" ? manifest.version : "0.0.0-unknown", + entrypoint: entry, + packageRoot: physicalPath(root), + indexSchemaVersion: typeof schema === "number" && Number.isInteger(schema) ? schema : SCHEMA_VERSION + }; +}; +var CAPTURE_ASSETS = ["spec/schema/record.schema.json"]; +var runtimeAssetProblems = (identity) => CAPTURE_ASSETS.map((asset) => join4(identity.packageRoot, asset)).filter((path2) => !existsSync7(path2)); +var printed = (identity) => `v${identity.version}; entry ${identity.entrypoint}; root ${identity.packageRoot}; schema v${identity.indexSchemaVersion}`; +var diagnoseRuntimeIdentities = (identities) => { + const cli = identities.cli; + if (cli === void 0) return { ok: false, detail: "CLI runtime identity is unavailable", fix: "run commitlore doctor from the installed CLI" }; + const mismatches = Object.entries(identities).filter(([surface, identity]) => surface !== "cli" && identity !== void 0 && (identity.version !== cli.version || identity.entrypoint !== cli.entrypoint || identity.packageRoot !== cli.packageRoot || identity.indexSchemaVersion !== cli.indexSchemaVersion)); + if (mismatches.length === 0) return { ok: true, detail: `all observed runtimes match CLI: ${printed(cli)}`, fix: "" }; + const fixes = { + hook: "commitlore hooks install", + mcp: "remove the stale MCP package root named below, update its registration, then restart the host session", + plugin: "remove and re-add the CommitLore plugin, then start a new agent session" + }; + return { + ok: false, + detail: mismatches.map(([surface, identity]) => `${surface} identity differs from CLI: ${surface} ${printed(identity)}; CLI ${printed(cli)}`).join("\n"), + fix: mismatches.map(([surface]) => fixes[surface]).join("\n") + }; +}; +var convergeIndexSchema = ({ writer, reader }) => writer.indexSchemaVersion === reader.indexSchemaVersion ? { ok: true, detail: `index writer and reader both use schema v${writer.indexSchemaVersion}`, fix: "" } : { + ok: false, + detail: `index writer schema v${writer.indexSchemaVersion} differs from reader schema v${reader.indexSchemaVersion}; rebuild the derived cache after upgrading the reader`, + fix: "commitlore index --rebuild" +}; +var formatRuntimeIdentity = (identity) => JSON.stringify(identity); // src/core/hook-target.ts -import { lstatSync, readFileSync as readFileSync8, realpathSync, statSync as statSync2 } from "node:fs"; -import { dirname as dirname4, isAbsolute, join as join4, relative, resolve as resolve6, sep } from "node:path"; var configValue = (cwd, key) => execGit(["config", "--local", "--get", key], { cwd }).stdout.trim(); var isFile = (path2) => { try { @@ -18252,7 +18309,7 @@ var isExecutableFile = (path2) => { var trustedRoot = (cwd) => configValue(cwd, "commitlore.root") || PACKAGE_ROOT; var isInsidePackage = (root, path2) => { try { - const fromRoot = relative(realpathSync(root), realpathSync(path2)); + const fromRoot = relative(realpathSync2(root), realpathSync2(path2)); return fromRoot !== ".." && !fromRoot.startsWith(`..${sep}`) && !isAbsolute(fromRoot); } catch { return false; @@ -18268,15 +18325,13 @@ var isSymlink = (path2) => { var classifyBinTarget = (path2) => path2.endsWith(".js") || path2.endsWith(".mjs") ? "script" : null; var recordedVersion = (binPath) => { try { - const manifest = readFileSync8(join4(findPackageRoot(dirname4(binPath)), "package.json"), "utf8"); - const parsed = JSON.parse(manifest); - return typeof parsed.version === "string" && parsed.version !== "" ? parsed.version : null; + return runtimeIdentity(binPath).version; } catch { return null; } }; var versionProblems = (binPath) => { - const running = packageVersion(); + const running = runtimeIdentity().version; const pinned = recordedVersion(binPath); if (pinned === null) { return [ @@ -18288,13 +18343,22 @@ var versionProblems = (binPath) => { `commitlore.bin is version ${pinned}, but this CLI is ${running} \u2014 the hook validates every commit with ${pinned}, so anything fixed since then does not apply here` ]; }; +var recordedHookIdentity = (target, cwd) => { + if (target.bin === "") return null; + const path2 = resolve7(cwd, target.bin); + try { + return isFile(path2) ? runtimeIdentity(path2) : null; + } catch { + return null; + } +}; var readRecordedHookTarget = (cwd) => { const bin = configValue(cwd, "commitlore.bin"); const node = configValue(cwd, "commitlore.node"); const problems = []; if (bin === "") problems.push("commitlore.bin is not recorded"); else { - const binPath = resolve6(cwd, bin); + const binPath = resolve7(cwd, bin); const kind = classifyBinTarget(bin); if (kind === null) { problems.push("commitlore.bin is not a .js or .mjs file"); @@ -18310,9 +18374,9 @@ var readRecordedHookTarget = (cwd) => { } if (node === "") problems.push("commitlore.node is not recorded"); else { - const nodePath = resolve6(cwd, node); + const nodePath = resolve7(cwd, node); if (!isExecutableFile(nodePath)) problems.push("commitlore.node is not an executable file"); - else if (realpathSync(nodePath) !== realpathSync(process.execPath)) { + else if (realpathSync2(nodePath) !== realpathSync2(process.execPath)) { problems.push("commitlore.node differs from this CLI interpreter"); } } @@ -18497,7 +18561,7 @@ var checkHook = (ctx, runtime) => { { evidence: { hook_path: "unavailable", bin: "not_recorded", node: "not_recorded" } } ); } - const path2 = resolve7(opts.cwd ?? process.cwd(), located.stdout.trim()); + const path2 = resolve8(opts.cwd ?? process.cwd(), located.stdout.trim()); const target = readRecordedHookTarget(opts.cwd ?? process.cwd()); const override = env["COMMITLORE_BIN"]; const hookEvidence = { @@ -18510,7 +18574,7 @@ var checkHook = (ctx, runtime) => { ...describeRecordedHookTarget(target), ...override === void 0 || override === "" ? [] : [`COMMITLORE_BIN: ${override}`] ].join("; "); - if (!existsSync7(path2)) { + if (!existsSync8(path2)) { return check( id, category, @@ -18523,7 +18587,7 @@ var checkHook = (ctx, runtime) => { { evidence: hookEvidence } ); } - const contents = readFileSync9(path2, "utf8"); + const contents = readFileSync10(path2, "utf8"); if (!contents.includes(HOOK_MARKER)) { return check( id, @@ -18616,9 +18680,9 @@ var checkHook = (ctx, runtime) => { }; // src/commands/doctor/checks/capture-hook-runtime.ts -import { existsSync as existsSync8, rmSync as rmSync2, writeFileSync as writeFileSync5 } from "node:fs"; +import { existsSync as existsSync9, rmSync as rmSync2, writeFileSync as writeFileSync5 } from "node:fs"; import { tmpdir as tmpdirPath } from "node:os"; -import { join as join5, resolve as resolve8 } from "node:path"; +import { join as join6, resolve as resolve9 } from "node:path"; var checkHookRuntime = (ctx) => { const { opts, git: git2, spawn: spawn2, env } = ctx; const title = "hook runtime"; @@ -18646,8 +18710,8 @@ var checkHookRuntime = (ctx) => { } ); } - const hook = resolve8(cwd, located.stdout.trim()); - if (!existsSync8(hook)) { + const hook = resolve9(cwd, located.stdout.trim()); + if (!existsSync9(hook)) { return check( id, category, @@ -18660,7 +18724,7 @@ var checkHookRuntime = (ctx) => { { evidence: { hook_path: hook } } ); } - const probe = join5(tmpdirPath(), `commitlore-doctor-${String(process.pid)}.txt`); + const probe = join6(tmpdirPath(), `commitlore-doctor-${String(process.pid)}.txt`); try { writeFileSync5(probe, PROBE_MESSAGE); const run = spawn2("/bin/sh", [hook, probe], { @@ -19069,15 +19133,15 @@ var checkPendingBacklog = (ctx) => { // src/core/mcp-registration.ts import { randomBytes as randomBytes4 } from "node:crypto"; import { - existsSync as existsSync9, + existsSync as existsSync10, lstatSync as lstatSync2, - readFileSync as readFileSync10, + readFileSync as readFileSync11, renameSync as renameSync3, statSync as statSync3, unlinkSync as unlinkSync4, writeFileSync as writeFileSync6 } from "node:fs"; -import { join as join6 } from "node:path"; +import { join as join7 } from "node:path"; var MCP_REGISTRATION_FILE = ".mcp.json"; var MCP_SERVER_KEY = "commitlore"; var MCP_SERVER_COMMAND = "commitlore"; @@ -19090,7 +19154,7 @@ var registeredMcpCommand = (cwd) => { if (path2 === null) return null; let parsed; try { - parsed = JSON.parse(readFileSync10(path2, "utf8")); + parsed = JSON.parse(readFileSync11(path2, "utf8")); } catch { return null; } @@ -19112,14 +19176,14 @@ var repositoryRoot = (cwd) => { }; var mcpRegistrationPath = (cwd) => { const root = repositoryRoot(cwd); - return root === null ? null : join6(root, MCP_REGISTRATION_FILE); + return root === null ? null : join7(root, MCP_REGISTRATION_FILE); }; var registersCommitloreMcpServer = (cwd) => { const path2 = mcpRegistrationPath(cwd); if (path2 === null) return false; let parsed; try { - parsed = JSON.parse(readFileSync10(path2, "utf8")); + parsed = JSON.parse(readFileSync11(path2, "utf8")); } catch { return false; } @@ -19277,7 +19341,7 @@ var registerCommitloreMcpServer = (cwd) => { if (path2 === null) { return { ok: false, path: null, error: "no git repository found here \u2014 MCP registration needs a repository" }; } - if (!existsSync9(path2)) { + if (!existsSync10(path2)) { try { writeAtomic2(path2, freshConfig()); return { ok: true, path: path2, state: "created", changed: true }; @@ -19294,7 +19358,7 @@ var registerCommitloreMcpServer = (cwd) => { } let source; try { - source = readFileSync10(path2, "utf8"); + source = readFileSync11(path2, "utf8"); } catch (error2) { return { ok: false, path: path2, error: `${MCP_REGISTRATION_FILE} could not be read: ${messageOf4(error2)}` }; } @@ -19617,20 +19681,20 @@ var checkDirectiveTrustMode = (ctx) => { }; // src/mcp/lifecycle.ts -import { appendFileSync, mkdirSync as mkdirSync4, readFileSync as readFileSync11, statSync as statSync4, writeFileSync as writeFileSync7, writeSync } from "node:fs"; -import { dirname as dirname5, join as join7, resolve as resolve9 } from "node:path"; +import { appendFileSync, mkdirSync as mkdirSync4, readFileSync as readFileSync12, statSync as statSync4, writeFileSync as writeFileSync7, writeSync } from "node:fs"; +import { dirname as dirname6, join as join8, resolve as resolve10 } from "node:path"; var MAX_BYTES = 64 * 1024; var LIFECYCLE_FILE = "mcp-lifecycle.log"; var lifecyclePath = (cwd = process.cwd()) => { - const result = execGit(["rev-parse", "--git-path", join7("commitlore", LIFECYCLE_FILE)], { cwd }); + const result = execGit(["rev-parse", "--git-path", join8("commitlore", LIFECYCLE_FILE)], { cwd }); if (result.code !== 0) return null; const path2 = result.stdout.trim(); - return path2 === "" ? null : resolve9(cwd, path2); + return path2 === "" ? null : resolve10(cwd, path2); }; var trim = (path2) => { try { if (statSync4(path2).size <= MAX_BYTES) return; - const lines = readFileSync11(path2, "utf8").split("\n"); + const lines = readFileSync12(path2, "utf8").split("\n"); writeFileSync7(path2, `${lines.slice(Math.floor(lines.length / 2)).join("\n")}`); } catch { } @@ -19639,7 +19703,7 @@ var write = (cwd, line2) => { try { const path2 = lifecyclePath(cwd); if (path2 === null) return; - mkdirSync4(dirname5(path2), { recursive: true }); + mkdirSync4(dirname6(path2), { recursive: true }); appendFileSync(path2, `${line2} `); trim(path2); @@ -19653,8 +19717,7 @@ var errorMessage4 = (error2) => { return singleLine === "" ? "unknown error" : singleLine; }; var recordServerStart = (cwd = process.cwd(), at = /* @__PURE__ */ new Date(), output = process.stdout) => { - const entry = process.argv[1] ?? "unknown"; - write(cwd, `started ${stamp(at)} pid ${String(process.pid)} ${packageVersion()} ${entry}`); + write(cwd, `started ${stamp(at)} pid ${String(process.pid)} identity ${formatRuntimeIdentity(runtimeIdentity())}`); let reason; const note = (detail, priority) => { if (reason === void 0 || priority >= reason.priority) reason = { detail, priority }; @@ -19701,11 +19764,28 @@ var recordServerStart = (cwd = process.cwd(), at = /* @__PURE__ */ new Date(), o } return { crash }; }; +var lifecycleIdentity = (entry) => { + if (entry.kind !== "started" || !entry.detail.startsWith("identity ")) return null; + try { + const value = JSON.parse(entry.detail.slice("identity ".length)); + return typeof value.version === "string" && typeof value.entrypoint === "string" && typeof value.packageRoot === "string" && typeof value.indexSchemaVersion === "number" ? { version: value.version, entrypoint: value.entrypoint, packageRoot: value.packageRoot, indexSchemaVersion: value.indexSchemaVersion } : null; + } catch { + return null; + } +}; +var latestLifecycleIdentity = (cwd = process.cwd()) => { + const started = readLifecycle(cwd).filter((entry) => entry.kind === "started"); + for (const entry of started.reverse()) { + const identity = lifecycleIdentity(entry); + if (identity !== null) return identity; + } + return null; +}; var readLifecycle = (cwd = process.cwd()) => { try { const path2 = lifecyclePath(cwd); if (path2 === null) return []; - return readFileSync11(path2, "utf8").split("\n").flatMap((line2) => { + return readFileSync12(path2, "utf8").split("\n").flatMap((line2) => { const match = /^(started|exited)\s+(\S+)\s+pid\s+(\d+)\s*(.*)$/.exec(line2.trim()); if (match === null) return []; return [ @@ -20341,13 +20421,13 @@ var checkIndex = (ctx) => { }; // src/commands/doctor/checks/runtime-cli-runtime.ts -import { existsSync as existsSync10 } from "node:fs"; +import { existsSync as existsSync11 } from "node:fs"; var checkRuntime = (ctx) => { const title = "cli runtime"; const id = "cli-runtime"; const category = "runtime"; const candidates = ["dist/commitlore.mjs", "dist/cli.js"].map((rel) => installedPath(rel)); - const entry = candidates.find((path2) => existsSync10(path2)); + const entry = candidates.find((path2) => existsSync11(path2)); if (entry === void 0) { return check( id, @@ -20431,6 +20511,63 @@ var checkRuntime = (ctx) => { ); }; +// src/commands/doctor/checks/runtime-runtime-identity.ts +import { existsSync as existsSync12 } from "node:fs"; +import { join as join9 } from "node:path"; +var pluginIdentity = () => { + const root = process.env["CLAUDE_PLUGIN_ROOT"]; + if (root === void 0 || root === "") return void 0; + const entry = join9(root, "dist", "commitlore.mjs"); + try { + return existsSync12(entry) ? runtimeIdentity(entry) : void 0; + } catch { + return void 0; + } +}; +var checkRuntimeIdentity = (ctx) => { + const cwd = ctx.opts.cwd ?? process.cwd(); + const cli = runtimeIdentity(); + const hook = recordedHookIdentity(readRecordedHookTarget(cwd), cwd) ?? void 0; + const mcp = latestLifecycleIdentity(cwd) ?? void 0; + const plugin = pluginIdentity(); + const diagnosis = diagnoseRuntimeIdentities({ cli, ...hook === void 0 ? {} : { hook }, ...mcp === void 0 ? {} : { mcp }, ...plugin === void 0 ? {} : { plugin } }); + const identities = [ + ["cli", cli], + ...hook === void 0 ? [] : [["hook", hook]], + ...mcp === void 0 ? [] : [["mcp", mcp]], + ...plugin === void 0 ? [] : [["plugin", plugin]] + ]; + const missing = identities.flatMap(([surface, identity]) => runtimeAssetProblems(identity).map((path2) => `${surface}: ${path2}`)); + const schema = mcp === void 0 ? void 0 : convergeIndexSchema({ writer: cli, reader: mcp }); + const detail = [ + diagnosis.ok ? diagnosis.detail : diagnosis.detail, + ...missing.length === 0 ? [] : [`capture assets missing: ${missing.join(", ")}`], + ...schema === void 0 || schema.ok ? [] : [schema.detail] + ].join("\n"); + const fixes = [ + diagnosis.ok ? "" : diagnosis.fix, + ...missing.length === 0 ? [] : ["remove the stale package root named above, reinstall that host plugin, then restart its session"], + ...schema === void 0 || schema.ok ? [] : ["upgrade the MCP runtime, restart its host session, then run commitlore index --rebuild"] + ].filter(Boolean).join("\n"); + return check( + "runtime-identity", + "runtime", + "runtime identity", + diagnosis.ok && missing.length === 0 && (schema === void 0 || schema.ok) ? "ok" : "warn", + detail, + fixes === "" ? null : fixes, + false, + void 0, + { evidence: { + cli: JSON.stringify(cli), + hook: hook === void 0 ? "not_observed" : JSON.stringify(hook), + mcp: mcp === void 0 ? "not_observed (start an MCP session, then rerun doctor)" : JSON.stringify(mcp), + plugin: plugin === void 0 ? "not_observed" : JSON.stringify(plugin), + missing_assets: missing.join(", ") || "none" + } } + ); +}; + // src/commands/doctor/checks/runtime-installation-integrity.ts var SHIPPED_ASSETS = [ ["package.json"], @@ -20820,6 +20957,7 @@ var hookRuntimeOf = (ctx) => { var selectedHookRuntimeOf = (ctx) => ctx.selectedIds?.has("hook-runtime") === false ? void 0 : hookRuntimeOf(ctx); var CHECK_REGISTRY = [ { id: "cli-runtime", title: "cli runtime", category: "runtime", dependencies: [], optional: false, run: (ctx) => checkRuntime(ctx) }, + { id: "runtime-identity", title: "runtime identity", category: "runtime", dependencies: [], optional: false, run: (ctx) => checkRuntimeIdentity(ctx) }, { id: "installation-integrity", title: "installation integrity", category: "runtime", dependencies: [], optional: false, run: (ctx) => checkInstallationIntegrity(ctx) }, { id: "notes-refspec", title: "notes fetch refspec", category: "transport", dependencies: [], optional: false, run: (ctx) => checkRefspec(ctx) }, { id: "notes-push", title: "notes push", category: "transport", dependencies: [], optional: false, run: (ctx) => checkPush(ctx) }, @@ -20907,8 +21045,8 @@ ${formatCheckReport(report, options)}`; }; // src/commands/doctor/report.ts -import { existsSync as existsSync11, readFileSync as readFileSync12 } from "node:fs"; -import { join as join8, resolve as resolve10, sep as sep2 } from "node:path"; +import { existsSync as existsSync13, readFileSync as readFileSync13 } from "node:fs"; +import { join as join10, resolve as resolve11, sep as sep2 } from "node:path"; // src/commands/doctor/runner.ts var containedRun = (definition, ctx, dependencies) => { @@ -21015,12 +21153,12 @@ var deriveInstallSource = ({ pluginRoot = process.env["CLAUDE_PLUGIN_ROOT"] } = {}) => { if (pluginRoot !== void 0 && pluginRoot !== "") return "plugin"; - const segments = resolve10(entryPath).split(sep2); + const segments = resolve11(entryPath).split(sep2); if (segments.includes("_npx")) return "npx"; if (segments.includes("node_modules")) return "npm"; try { - const manifest = JSON.parse(readFileSync12(join8(packageRoot, "package.json"), "utf8")); - if (manifest.name === "commitlore" && existsSync11(join8(packageRoot, ".git"))) return "source"; + const manifest = JSON.parse(readFileSync13(join10(packageRoot, "package.json"), "utf8")); + if (manifest.name === "commitlore" && existsSync13(join10(packageRoot, ".git"))) return "source"; } catch { } return "unknown"; @@ -21086,21 +21224,21 @@ var register5 = (program3) => { import { randomBytes as randomBytes8 } from "node:crypto"; import { chmodSync as chmodSync4, - existsSync as existsSync15, + existsSync as existsSync17, mkdirSync as mkdirSync8, - readFileSync as readFileSync16, - realpathSync as realpathSync2, + readFileSync as readFileSync17, + realpathSync as realpathSync3, renameSync as renameSync7, statSync as statSync5, unlinkSync as unlinkSync5, writeFileSync as writeFileSync11 } from "node:fs"; -import { join as join9, resolve as resolve14 } from "node:path"; +import { join as join11, resolve as resolve15 } from "node:path"; // src/hooks/post-commit.ts import { createHash as createHash5, randomBytes as randomBytes5 } from "node:crypto"; -import { chmodSync, existsSync as existsSync12, mkdirSync as mkdirSync5, readFileSync as readFileSync13, readdirSync as readdirSync3, renameSync as renameSync4, writeFileSync as writeFileSync8 } from "node:fs"; -import { resolve as resolve11 } from "node:path"; +import { chmodSync, existsSync as existsSync14, mkdirSync as mkdirSync5, readFileSync as readFileSync14, readdirSync as readdirSync3, renameSync as renameSync4, writeFileSync as writeFileSync8 } from "node:fs"; +import { resolve as resolve12 } from "node:path"; // src/hooks/capture-fail-open.ts var captureHookFailOpen = (label, error2) => { @@ -21130,14 +21268,14 @@ var installPostCommitHook = (cwd = process.cwd()) => { try { const result = execGit(["rev-parse", "--git-path", `hooks/${POST_COMMIT_HOOK_NAME}`], { cwd }); if (result.code !== 0) return hookFailure(result.stderr.trim() || "not a git repository"); - hookPath = resolve11(cwd, result.stdout.trim()); - mkdirSync5(resolve11(hookPath, ".."), { recursive: true }); + hookPath = resolve12(cwd, result.stdout.trim()); + mkdirSync5(resolve12(hookPath, ".."), { recursive: true }); } catch (error2) { return hookFailure(error2 instanceof Error ? error2.message : String(error2)); } try { - if (existsSync12(hookPath)) { - const current = readFileSync13(hookPath, "utf8"); + if (existsSync14(hookPath)) { + const current = readFileSync14(hookPath, "utf8"); if (!current.includes(POST_COMMIT_HOOK_MARKER)) { return hookFailure(`${hookPath} is not a commitlore hook \u2014 left in place`); } @@ -21158,11 +21296,11 @@ var installPostCommitHook = (cwd = process.cwd()) => { var resolvePendingDir2 = (cwd) => { const result = execGit(["rev-parse", "--git-path", "commitlore/pending"], { cwd }); if (result.code !== 0) return null; - return resolve11(cwd, result.stdout.trim()); + return resolve12(cwd, result.stdout.trim()); }; var readPendingFile = (filePath) => { try { - const content = readFileSync13(filePath, "utf8"); + const content = readFileSync14(filePath, "utf8"); const parsed = JSON.parse(content); if (parsed["version"] !== 1) return null; return parsed; @@ -21209,7 +21347,7 @@ var isAmendedBase = (baseHead, firstParent, cwd) => { }; var runPostCommitFinaliser = (cwd) => { const pendingDirPath = resolvePendingDir2(cwd); - if (!pendingDirPath || !existsSync12(pendingDirPath)) return; + if (!pendingDirPath || !existsSync14(pendingDirPath)) return; let files; try { files = readdirSync3(pendingDirPath).filter((f) => f.endsWith(".json")).sort(); @@ -21229,7 +21367,7 @@ var runPostCommitFinaliser = (cwd) => { if (msgResult.code !== 0) return; const commitMessage = msgResult.stdout; for (const file of files) { - const filePath = resolve11(pendingDirPath, file); + const filePath = resolve12(pendingDirPath, file); const pending = readPendingFile(filePath); if (!pending) continue; if (pending.phase !== "applied") continue; @@ -21260,8 +21398,8 @@ var register6 = (program3) => { // src/hooks/pre-push.ts import { randomBytes as randomBytes6 } from "node:crypto"; -import { chmodSync as chmodSync2, existsSync as existsSync13, mkdirSync as mkdirSync6, readFileSync as readFileSync14, renameSync as renameSync5, writeFileSync as writeFileSync9 } from "node:fs"; -import { resolve as resolve12 } from "node:path"; +import { chmodSync as chmodSync2, existsSync as existsSync15, mkdirSync as mkdirSync6, readFileSync as readFileSync15, renameSync as renameSync5, writeFileSync as writeFileSync9 } from "node:fs"; +import { resolve as resolve13 } from "node:path"; // src/core/sync.ts var gitOptions4 = (opts) => opts.cwd === void 0 ? {} : { cwd: opts.cwd }; @@ -21371,14 +21509,14 @@ var installPrePushHook = (cwd = process.cwd()) => { try { const result = execGit(["rev-parse", "--git-path", `hooks/${PRE_PUSH_HOOK_NAME}`], { cwd }); if (result.code !== 0) return hookFailure2(result.stderr.trim() || "not a git repository"); - hookPath = resolve12(cwd, result.stdout.trim()); - mkdirSync6(resolve12(hookPath, ".."), { recursive: true }); + hookPath = resolve13(cwd, result.stdout.trim()); + mkdirSync6(resolve13(hookPath, ".."), { recursive: true }); } catch (error2) { return hookFailure2(error2 instanceof Error ? error2.message : String(error2)); } try { - if (existsSync13(hookPath)) { - const current = readFileSync14(hookPath, "utf8"); + if (existsSync15(hookPath)) { + const current = readFileSync15(hookPath, "utf8"); if (!current.includes(PRE_PUSH_HOOK_MARKER)) { return hookFailure2(`${hookPath} is not a commitlore hook \u2014 left in place`); } @@ -21428,8 +21566,8 @@ var register7 = (program3) => { // src/hooks/prepare-commit-msg.ts import { createHash as createHash6, randomBytes as randomBytes7 } from "node:crypto"; -import { chmodSync as chmodSync3, existsSync as existsSync14, mkdirSync as mkdirSync7, readFileSync as readFileSync15, readdirSync as readdirSync4, renameSync as renameSync6, writeFileSync as writeFileSync10 } from "node:fs"; -import { resolve as resolve13 } from "node:path"; +import { chmodSync as chmodSync3, existsSync as existsSync16, mkdirSync as mkdirSync7, readFileSync as readFileSync16, readdirSync as readdirSync4, renameSync as renameSync6, writeFileSync as writeFileSync10 } from "node:fs"; +import { resolve as resolve14 } from "node:path"; var PREPARE_COMMIT_MSG_HOOK_MARKER = "# commitlore:prepare-commit-msg:v1"; var PREPARE_COMMIT_MSG_HOOK_NAME = "prepare-commit-msg"; var PREPARE_COMMIT_MSG_CHAINED_HOOK_NAME = `${PREPARE_COMMIT_MSG_HOOK_NAME}${CHAINED_SUFFIX}`; @@ -21439,7 +21577,7 @@ var isRecordBlock = (trailers) => trailers.some((trailer) => RECORD_KEYS.has(tra var squashMessagePath = (cwd) => { const result = execGit(["rev-parse", "--git-path", "SQUASH_MSG"], { cwd }); if (result.code !== 0) return null; - return resolve13(cwd, result.stdout.trim()); + return resolve14(cwd, result.stdout.trim()); }; var squashCommitIds = (message) => { const ids = []; @@ -21463,10 +21601,10 @@ var recordsFromSquashMessage = (cwd, message) => { }; var preserveSquashRecords = (messageFile, cwd = process.cwd()) => { const squashPath = squashMessagePath(cwd); - if (squashPath === null || !existsSync14(squashPath)) return false; - const draft = readFileSync15(messageFile, "utf8"); + if (squashPath === null || !existsSync16(squashPath)) return false; + const draft = readFileSync16(messageFile, "utf8"); if (parseRecordBlocks(draft).some(isRecordBlock)) return false; - const blocks = recordsFromSquashMessage(cwd, readFileSync15(squashPath, "utf8")); + const blocks = recordsFromSquashMessage(cwd, readFileSync16(squashPath, "utf8")); if (blocks.length === 0) return false; const separator = draft.endsWith("\n\n") ? "" : draft.endsWith("\n") ? "\n" : "\n\n"; writeFileSync10(messageFile, `${draft}${separator}${blocks.map((block) => serializeTrailers([...block])).join("\n")}`); @@ -21475,7 +21613,7 @@ var preserveSquashRecords = (messageFile, cwd = process.cwd()) => { var prepareHookPath = (cwd) => { const result = execGit(["rev-parse", "--git-path", `hooks/${PREPARE_COMMIT_MSG_HOOK_NAME}`], { cwd }); if (result.code !== 0) throw new Error(result.stderr.trim() || "not a git repository"); - return resolve13(cwd, result.stdout.trim()); + return resolve14(cwd, result.stdout.trim()); }; var hookSuccess3 = (line2) => ({ code: 0, stdout: `${line2} `, stderr: "" }); @@ -21491,13 +21629,13 @@ var installPrepareCommitMsgHook = (cwd = process.cwd()) => { let path2; try { path2 = prepareHookPath(cwd); - mkdirSync7(resolve13(path2, ".."), { recursive: true }); + mkdirSync7(resolve14(path2, ".."), { recursive: true }); } catch (error2) { return hookFailure3(error2 instanceof Error ? error2.message : String(error2)); } try { - if (existsSync14(path2)) { - const current = readFileSync15(path2, "utf8"); + if (existsSync16(path2)) { + const current = readFileSync16(path2, "utf8"); if (!current.includes(PREPARE_COMMIT_MSG_HOOK_MARKER)) { return hookFailure3(`${path2} is not a commitlore hook \u2014 left in place`); } @@ -21516,11 +21654,11 @@ var installPrepareCommitMsgHook = (cwd = process.cwd()) => { var resolvePendingDir3 = (cwd) => { const result = execGit(["rev-parse", "--git-path", "commitlore/pending"], { cwd }); if (result.code !== 0) return null; - return resolve13(cwd, result.stdout.trim()); + return resolve14(cwd, result.stdout.trim()); }; var readPendingFile2 = (filePath) => { try { - const content = readFileSync15(filePath, "utf8"); + const content = readFileSync16(filePath, "utf8"); const parsed = JSON.parse(content); if (parsed["version"] !== 1) return null; return parsed; @@ -21569,7 +21707,7 @@ var usesTemporaryCommitIndex = (cwd) => { if (!currentIndex) return false; const gitDir = execGit(["rev-parse", "--git-dir"], { cwd }); if (gitDir.code !== 0) return false; - return resolve13(cwd, currentIndex) !== resolve13(cwd, gitDir.stdout.trim(), "index"); + return resolve14(cwd, currentIndex) !== resolve14(cwd, gitDir.stdout.trim(), "index"); }; var reportDiffMismatch = (pending, cwd) => { const label = captureLabel(pending); @@ -21586,7 +21724,7 @@ var compareCaptureCandidates = (left, right) => { }; var applyCaptureRecord = (messageFile, cwd) => { const pendingDirPath = resolvePendingDir3(cwd); - if (!pendingDirPath || !existsSync14(pendingDirPath)) return; + if (!pendingDirPath || !existsSync16(pendingDirPath)) return; let files; try { files = readdirSync4(pendingDirPath).filter((f) => f.endsWith(".json")).sort(); @@ -21604,13 +21742,13 @@ var applyCaptureRecord = (messageFile, cwd) => { const now = Date.now(); let currentMessage; try { - currentMessage = readFileSync15(messageFile, "utf8"); + currentMessage = readFileSync16(messageFile, "utf8"); } catch { return; } const eligible = []; for (const file of files) { - const filePath = resolve13(pendingDirPath, file); + const filePath = resolve14(pendingDirPath, file); const pending2 = readPendingFile2(filePath); if (!pending2) continue; if (pending2.phase !== "staged" && pending2.phase !== "applied") continue; @@ -21671,7 +21809,7 @@ var resolveHooksDir = (cwd) => { if (result.code !== 0) { throw new Error(`not a git repository (${firstLine3(result.stderr)})`); } - return resolve14(cwd, result.stdout.trim()); + return resolve15(cwd, result.stdout.trim()); }; var isExecutable = (path2) => { try { @@ -21681,10 +21819,10 @@ var isExecutable = (path2) => { } }; var readHookState = (hookPath) => { - if (!existsSync15(hookPath)) return "absent"; + if (!existsSync17(hookPath)) return "absent"; let contents; try { - contents = readFileSync16(hookPath, "utf8"); + contents = readFileSync17(hookPath, "utf8"); } catch { return "foreign"; } @@ -21693,14 +21831,14 @@ var readHookState = (hookPath) => { }; var readHookStatus = (cwd = process.cwd()) => { const hooksDir = resolveHooksDir(cwd); - const hookPath = join9(hooksDir, HOOK_NAME); - const chainedPath = join9(hooksDir, CHAINED_HOOK_NAME); + const hookPath = join11(hooksDir, HOOK_NAME); + const chainedPath = join11(hooksDir, CHAINED_HOOK_NAME); return { hooksDir, hookPath, state: readHookState(hookPath), chainedPath, - chained: existsSync15(chainedPath), + chained: existsSync17(chainedPath), chainedExecutable: isExecutable(chainedPath), recordedTarget: readRecordedHookTarget(cwd) }; @@ -21720,10 +21858,10 @@ var resolveEntryForRecord = (entry, cwd) => { return null; } }; - if (entry.includes("/")) return existingFile(resolve14(cwd, entry)); + if (entry.includes("/")) return existingFile(resolve15(cwd, entry)); for (const dir of (process.env["PATH"] ?? "").split(":")) { if (dir === "") continue; - const found = existingFile(resolve14(dir, entry)); + const found = existingFile(resolve15(dir, entry)); if (found !== null) return found; } return null; @@ -21734,7 +21872,7 @@ var recordBinPath = (cwd) => { execGit(["config", "--local", "commitlore.bin", resolvedEntry], { cwd }); execGit(["config", "--local", "commitlore.node", process.execPath], { cwd }); try { - execGit(["config", "--local", "commitlore.root", realpathSync2(PACKAGE_ROOT)], { cwd }); + execGit(["config", "--local", "commitlore.root", realpathSync3(PACKAGE_ROOT)], { cwd }); } catch { } }; @@ -21795,12 +21933,12 @@ var CAPTURE_HOOKS = [ } ]; var removeCaptureHook = (hooksDir, hook) => { - const hookPath = join9(hooksDir, hook.name); - const chainedPath = join9(hooksDir, hook.chainedName); - if (!existsSync15(hookPath)) return [`no ${hook.name} hook to remove: ${hookPath}`]; + const hookPath = join11(hooksDir, hook.name); + const chainedPath = join11(hooksDir, hook.chainedName); + if (!existsSync17(hookPath)) return [`no ${hook.name} hook to remove: ${hookPath}`]; let contents; try { - contents = readFileSync16(hookPath, "utf8"); + contents = readFileSync17(hookPath, "utf8"); } catch { return [`${hookPath} was not installed by commitlore \u2014 left in place`]; } @@ -21808,7 +21946,7 @@ var removeCaptureHook = (hooksDir, hook) => { return [`${hookPath} was not installed by commitlore \u2014 left in place`]; } unlinkSync5(hookPath); - if (!existsSync15(chainedPath)) return [`removed ${hook.name} hook: ${hookPath}`]; + if (!existsSync17(chainedPath)) return [`removed ${hook.name} hook: ${hookPath}`]; renameSync7(chainedPath, hookPath); return [`removed ${hook.name} hook: ${hookPath}`, `restored the previous hook: ${hookPath}`]; }; @@ -21848,9 +21986,10 @@ var uninstallHook = (input = {}) => { return success2(readHookStatus(cwd), lines); }; var hookStatus = (input = {}) => { + const cwd = input.cwd ?? process.cwd(); let status; try { - status = readHookStatus(input.cwd ?? process.cwd()); + status = readHookStatus(cwd); } catch (error2) { return failure3(messageOf5(error2)); } @@ -21861,10 +22000,12 @@ var hookStatus = (input = {}) => { foreign: "present, not installed by commitlore" }[status.state]; const targetWarning = status.state === "installed" && status.recordedTarget.problems.length > 0 ? ", recorded target warning \u2014 run `commitlore hooks install`" : ""; + const identity = recordedHookIdentity(status.recordedTarget, cwd); return success2(status, [ `hooks dir: ${status.hooksDir}`, `${HOOK_NAME}: ${state}${targetWarning}`, ...describeRecordedHookTarget(status.recordedTarget), + ...identity === null ? [] : [`hook runtime identity: ${JSON.stringify(identity)}`], ...status.recordedTarget.problems.map((problem) => `warning: ${problem}`), ...describeChained(status) ]); @@ -21892,19 +22033,19 @@ var register9 = (program3) => { }; // src/core/agents-guidance.ts -import { existsSync as existsSync16, readFileSync as readFileSync17, renameSync as renameSync8, rmSync as rmSync3, statSync as statSync6, writeFileSync as writeFileSync12 } from "node:fs"; -import { basename as basename2, dirname as dirname6, join as join10, resolve as resolve15 } from "node:path"; +import { existsSync as existsSync18, readFileSync as readFileSync18, renameSync as renameSync8, rmSync as rmSync3, statSync as statSync6, writeFileSync as writeFileSync12 } from "node:fs"; +import { basename as basename2, dirname as dirname7, join as join12, resolve as resolve16 } from "node:path"; import { fileURLToPath as fileURLToPath2 } from "node:url"; var AGENTS_SECTION_BEGIN = ""; var AGENTS_SECTION_END = ""; var messageOf6 = (error2) => error2 instanceof Error ? error2.message : String(error2); var shippedAgentsPath = () => { const source = fileURLToPath2(import.meta.url); - const here = dirname6(source); - return basename2(here) === "dist" ? resolve15(here, "..", "AGENTS.md") : resolve15(here, "..", "..", "AGENTS.md"); + const here = dirname7(source); + return basename2(here) === "dist" ? resolve16(here, "..", "AGENTS.md") : resolve16(here, "..", "..", "AGENTS.md"); }; var readCommitloreAgentsSection = () => { - const contents = readFileSync17(shippedAgentsPath(), "utf8"); + const contents = readFileSync18(shippedAgentsPath(), "utf8"); const start = contents.indexOf(AGENTS_SECTION_BEGIN); const end = contents.indexOf(AGENTS_SECTION_END); if (start === -1 || end === -1 || end < start) { @@ -21921,21 +22062,21 @@ var replaceFile = (path2, contents) => { renameSync8(temporary, path2); } catch (error2) { try { - if (existsSync16(temporary)) rmSync3(temporary, { force: true }); + if (existsSync18(temporary)) rmSync3(temporary, { force: true }); } catch { } throw error2; } }; var installAgentsGuidance = (cwd) => { - const path2 = join10(cwd, "AGENTS.md"); + const path2 = join12(cwd, "AGENTS.md"); let section2; try { section2 = readCommitloreAgentsSection(); } catch (error2) { return { state: "write-failed", path: path2, error: messageOf6(error2) }; } - if (!existsSync16(path2)) { + if (!existsSync18(path2)) { try { writeFileSync12(path2, section2); return { state: "created", path: path2, error: null }; @@ -21945,7 +22086,7 @@ var installAgentsGuidance = (cwd) => { } let contents; try { - contents = readFileSync17(path2, "utf8"); + contents = readFileSync18(path2, "utf8"); } catch (error2) { return { state: "write-failed", path: path2, error: messageOf6(error2) }; } @@ -22362,7 +22503,7 @@ var resolveUnattendedChoice = async (options) => { if (options.unattended === true) return "enable"; if (options.unattended === false) return "decline"; const existing = capturePolicyPath(process.cwd()); - if (existing !== null && existsSync17(existing)) return "no-answer"; + if (existing !== null && existsSync19(existing)) return "no-answer"; if (options.json !== true && process.stdin.isTTY === true && process.stdout.isTTY === true) { process.stdout.write( `Unattended capture authorises an agent host to prepare, verify and stage a record without asking. @@ -22456,18 +22597,18 @@ var runDemo = async (opts = {}) => { process.prependOnceListener("SIGINT", onSignal); process.prependOnceListener("SIGTERM", onSignal); try { - tmpDir = mkdtempSync(join11(opts.tmpRoot ?? tmpdir(), "commitlore-demo-")); - const userCwd = resolve16(opts.cwd ?? process.cwd()); - const tmpResolved = resolve16(tmpDir); + tmpDir = mkdtempSync(join13(opts.tmpRoot ?? tmpdir(), "commitlore-demo-")); + const userCwd = resolve17(opts.cwd ?? process.cwd()); + const tmpResolved = resolve17(tmpDir); if (tmpResolved === userCwd || tmpResolved.startsWith(userCwd + "/") || userCwd.startsWith(tmpResolved + "/")) { throw new Error("demo: temporary directory overlaps with user repository \u2014 aborting"); } - git(["init", "--quiet", "--template=", "--initial-branch=main", tmpDir], dirname7(tmpDir)); + git(["init", "--quiet", "--template=", "--initial-branch=main", tmpDir], dirname8(tmpDir)); git(["config", "user.name", "CommitLore Demo"], tmpDir); git(["config", "user.email", "demo@commitlore.example"], tmpDir); git(["config", "commit.gpgsign", "false"], tmpDir); - const targetFullPath = join11(tmpDir, targetPath); - mkdirSync9(dirname7(targetFullPath), { recursive: true }); + const targetFullPath = join13(tmpDir, targetPath); + mkdirSync9(dirname8(targetFullPath), { recursive: true }); writeFileSync13(targetFullPath, "export const calculatePrice = () => {};\n"); git(["add", "."], tmpDir); git(["commit", "-m", predecessorCommitMessage], tmpDir); @@ -22534,7 +22675,7 @@ var register11 = (program3) => { }; // src/commands/harvest.ts -import { readFileSync as readFileSync18, writeFileSync as writeFileSync14 } from "node:fs"; +import { readFileSync as readFileSync19, writeFileSync as writeFileSync14 } from "node:fs"; var PREFIX2 = "commitlore:"; var USAGE_EXIT_CODE = 2; var skip2 = (reason) => ({ @@ -22545,7 +22686,7 @@ var skip2 = (reason) => ({ }); var readTextFile = (path2, label) => { try { - return readFileSync18(path2, "utf8"); + return readFileSync19(path2, "utf8"); } catch (error2) { const detail = error2 instanceof Error ? error2.message : String(error2); throw new Error(`cannot read ${label}: ${detail}`); @@ -22630,7 +22771,7 @@ var register12 = (program3) => { }; // src/commands/guard.ts -import { readFileSync as readFileSync19 } from "node:fs"; +import { readFileSync as readFileSync20 } from "node:fs"; var FLAGGED_EXIT_CODE = 1; var USAGE_EXIT_CODE2 = 2; var INCOMPLETE_EXIT_CODE = 3; @@ -22638,8 +22779,8 @@ var STDIN_FD = 0; var readProposal = (raw) => { if (!raw.startsWith("@")) return raw; const path2 = raw.slice(1); - if (path2 === "-") return readFileSync19(STDIN_FD, "utf8"); - return readFileSync19(path2, "utf8"); + if (path2 === "-") return readFileSync20(STDIN_FD, "utf8"); + return readFileSync20(path2, "utf8"); }; var matchThreshold = (raw) => { if (raw === void 0) return void 0; @@ -22834,12 +22975,12 @@ var register13 = (program3) => { }; // src/commands/harvest-verify.ts -import { readFileSync as readFileSync20, writeFileSync as writeFileSync15 } from "node:fs"; +import { readFileSync as readFileSync21, writeFileSync as writeFileSync15 } from "node:fs"; var PREFIX3 = "commitlore:"; var BAD_INPUT = 2; var readTextFile2 = (path2, label) => { try { - return readFileSync20(path2, "utf8"); + return readFileSync21(path2, "utf8"); } catch (error2) { const detail = error2 instanceof Error ? error2.message : String(error2); throw new Error(`cannot read ${label}: ${detail}`); @@ -22931,12 +23072,12 @@ var register14 = (program3) => { // src/commands/hermes.ts import { spawnSync as spawnSync4 } from "node:child_process"; -import { copyFileSync, existsSync as existsSync18, mkdirSync as mkdirSync10, readFileSync as readFileSync21, renameSync as renameSync9, statSync as statSync7, writeFileSync as writeFileSync16 } from "node:fs"; +import { copyFileSync, existsSync as existsSync20, mkdirSync as mkdirSync10, readFileSync as readFileSync22, renameSync as renameSync9, statSync as statSync7, writeFileSync as writeFileSync16 } from "node:fs"; import { homedir } from "node:os"; -import { basename as basename3, dirname as dirname8, join as join12, resolve as resolve18 } from "node:path"; +import { basename as basename3, dirname as dirname9, join as join14, resolve as resolve19 } from "node:path"; // src/core/hermes-config.ts -import { relative as relative2, resolve as resolve17, sep as sep3 } from "node:path"; +import { relative as relative2, resolve as resolve18, sep as sep3 } from "node:path"; var HERMES_SERVER_KEY = "commitlore"; var splitLines = (contents) => { const lines = []; @@ -23025,8 +23166,8 @@ var skillsBlock = (skillsDir, newline) => [" external_dirs:", ` - ${yamlStri var topLevelMcpBlock = (wrapperPath, newline) => [`mcp_servers:`, mcpBlock(wrapperPath, newline)].join(newline); var topLevelSkillsBlock = (skillsDir, newline) => [`skills:`, skillsBlock(skillsDir, newline)].join(newline); var isManagedHermesSkillsDir = (value, dataRoot, installedSkillsDir) => { - if (installedSkillsDir !== void 0 && resolve17(value) === resolve17(installedSkillsDir)) return true; - const rel = relative2(resolve17(dataRoot), resolve17(value)); + if (installedSkillsDir !== void 0 && resolve18(value) === resolve18(installedSkillsDir)) return true; + const rel = relative2(resolve18(dataRoot), resolve18(value)); const parts = rel.split(sep3); return parts.length === 3 && parts[0] !== "" && parts[0] !== ".." && !parts[0]?.startsWith("..") && parts[1] === "hermes" && parts[2] === "skills"; }; @@ -23156,14 +23297,14 @@ var commandExists = (command) => { }; var backupPathFor = (configPath) => { const base = `${configPath}.commitlore-backup`; - if (!existsSync18(base)) return base; + if (!existsSync20(base)) return base; for (let index = 1; ; index += 1) { const candidate = `${base}.${index}`; - if (!existsSync18(candidate)) return candidate; + if (!existsSync20(candidate)) return candidate; } }; var atomicallyWrite = (path2, contents, mode) => { - const temporary = join12(dirname8(path2), `.${basename3(path2)}.commitlore-${process.pid}.tmp`); + const temporary = join14(dirname9(path2), `.${basename3(path2)}.commitlore-${process.pid}.tmp`); try { if (mode === void 0) writeFileSync16(temporary, contents, "utf8"); else writeFileSync16(temporary, contents, { encoding: "utf8", mode }); @@ -23204,11 +23345,11 @@ var runVerification = (report, verified) => { var runHermesInstall = (options = {}) => { const home = options.home ?? homedir(); const hermesHome = process.env["HERMES_HOME"]; - const configPath = options.configPath ?? (hermesHome === void 0 ? join12(home, ".hermes", "config.yaml") : join12(hermesHome, "config.yaml")); - const dataHome = options.dataHome ?? process.env["XDG_DATA_HOME"] ?? join12(home, ".local", "share"); - const dataRoot = options.dataRoot ?? join12(dataHome, "commitlore"); + const configPath = options.configPath ?? (hermesHome === void 0 ? join14(home, ".hermes", "config.yaml") : join14(hermesHome, "config.yaml")); + const dataHome = options.dataHome ?? process.env["XDG_DATA_HOME"] ?? join14(home, ".local", "share"); + const dataRoot = options.dataRoot ?? join14(dataHome, "commitlore"); const skillsDir = options.skillsDir ?? installedPath("hermes", "skills"); - const detected = options.detected ?? (existsSync18(dirname8(configPath)) || commandExists("hermes")); + const detected = options.detected ?? (existsSync20(dirname9(configPath)) || commandExists("hermes")); const report = []; const verified = []; if (!detected) { @@ -23219,7 +23360,7 @@ var runHermesInstall = (options = {}) => { verified }; } - if (!existsSync18(skillsDir)) { + if (!existsSync20(skillsDir)) { return { exitCode: 2, report: [`could not find the CommitLore Hermes skill bundle at ${skillsDir}`], @@ -23227,11 +23368,11 @@ var runHermesInstall = (options = {}) => { verified }; } - const wrapperPath = options.wrapperPath ?? join12(home, ".local", "bin", "commitlore"); - const before = existsSync18(configPath) ? readFileSync21(configPath, "utf8") : ""; + const wrapperPath = options.wrapperPath ?? join14(home, ".local", "bin", "commitlore"); + const before = existsSync20(configPath) ? readFileSync22(configPath, "utf8") : ""; const edit = addHermesConfig(before, { wrapperPath, - skillsDir: resolve18(skillsDir), + skillsDir: resolve19(skillsDir), dataRoot }); if (edit.blocked.length > 0) { @@ -23240,13 +23381,13 @@ var runHermesInstall = (options = {}) => { } if (edit.added.length > 0) { try { - mkdirSync10(dirname8(configPath), { recursive: true }); - if (existsSync18(configPath)) { + mkdirSync10(dirname9(configPath), { recursive: true }); + if (existsSync20(configPath)) { const backup = backupPathFor(configPath); copyFileSync(configPath, backup); report.push(`backed up: ${configPath} -> ${backup}`); } - const mode = existsSync18(configPath) ? statSync7(configPath).mode : void 0; + const mode = existsSync20(configPath) ? statSync7(configPath).mode : void 0; atomicallyWrite(configPath, edit.contents, mode); report.push(`configured: ${edit.added.join(" and ")} in ${configPath}`); } catch (error2) { @@ -23379,8 +23520,8 @@ var register16 = (program3) => { }; // src/commands/inject.ts -import { readFileSync as readFileSync22, realpathSync as realpathSync3 } from "node:fs"; -import { basename as basename4, dirname as dirname9, isAbsolute as isAbsolute2, join as join13, relative as relative3, resolve as resolve19, sep as sep4 } from "node:path"; +import { readFileSync as readFileSync23, realpathSync as realpathSync4 } from "node:fs"; +import { basename as basename4, dirname as dirname10, isAbsolute as isAbsolute2, join as join15, relative as relative3, resolve as resolve20, sep as sep4 } from "node:path"; // src/core/inject.ts import { createHash as createHash7 } from "node:crypto"; @@ -23745,7 +23886,7 @@ var MAX_PAYLOAD_PATH_LENGTH = 4096; var isPlainObject2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value); var readStdin = () => { try { - return readFileSync22(0, "utf8"); + return readFileSync23(0, "utf8"); } catch { return ""; } @@ -23768,15 +23909,15 @@ var repositoryRoot2 = (cwd) => { return result.code === 0 ? result.stdout.trim() : void 0; }; var canonical = (target) => { - const absolute = resolve19(target); + const absolute = resolve20(target); const tail = []; let current = absolute; for (; ; ) { try { - const real = realpathSync3(current); - return tail.length === 0 ? real : join13(real, ...tail); + const real = realpathSync4(current); + return tail.length === 0 ? real : join15(real, ...tail); } catch { - const parent = dirname9(current); + const parent = dirname10(current); if (parent === current) return absolute; tail.unshift(basename4(current)); current = parent; @@ -23799,7 +23940,7 @@ var payloadPath = (payload, cwd) => { } const root = repositoryRoot2(cwd); if (root === void 0) throw new Error("repository root could not be resolved"); - const target = canonical(isAbsolute2(raw) ? raw : resolve19(cwd, raw)); + const target = canonical(isAbsolute2(raw) ? raw : resolve20(cwd, raw)); const scoped = relative3(canonical(root), target); if (scoped === "") throw new Error("file_path resolves to the repository root"); if (scoped === ".." || scoped.startsWith(`..${sep4}`) || isAbsolute2(scoped)) { @@ -23935,8 +24076,8 @@ var register17 = (program3) => { }; // src/commands/installer-hosts.ts -import { accessSync, constants, existsSync as existsSync19, mkdirSync as mkdirSync11, renameSync as renameSync10, statSync as statSync8, unlinkSync as unlinkSync6, writeFileSync as writeFileSync17, readFileSync as readFileSync23 } from "node:fs"; -import { delimiter, dirname as dirname10, join as join14 } from "node:path"; +import { accessSync, constants, existsSync as existsSync21, mkdirSync as mkdirSync11, renameSync as renameSync10, statSync as statSync8, unlinkSync as unlinkSync6, writeFileSync as writeFileSync17, readFileSync as readFileSync24 } from "node:fs"; +import { delimiter, dirname as dirname11, join as join16 } from "node:path"; import { randomUUID } from "node:crypto"; import { spawn, spawnSync as spawnSync5 } from "node:child_process"; var INSTALLER_HOSTS_SCHEMA = "commitlore_installer_hosts.v1"; @@ -23960,15 +24101,15 @@ var commandOf = (format, entry) => { }; var entryFor = (format, wrapper) => format === "json-mcp" ? { type: "local", command: [wrapper, "mcp"], enabled: true } : { command: wrapper, args: ["mcp"] }; var atomicJsonWrite = (path2, value) => { - mkdirSync11(dirname10(path2), { recursive: true }); - const temporary = join14(dirname10(path2), `.${String(path2.split("/").pop())}.commitlore-${process.pid}-${randomUUID()}.tmp`); + mkdirSync11(dirname11(path2), { recursive: true }); + const temporary = join16(dirname11(path2), `.${String(path2.split("/").pop())}.commitlore-${process.pid}-${randomUUID()}.tmp`); try { writeFileSync17(temporary, `${JSON.stringify(value, null, 2)} `, { encoding: "utf8", mode: 384 }); if (process.env.COMMITLORE_INSTALLER_TEST_INTERRUPT_WRITE === "1") { throw new Error("interrupted before atomic rename"); } - JSON.parse(readFileSync23(temporary, "utf8")); + JSON.parse(readFileSync24(temporary, "utf8")); renameSync10(temporary, path2); } finally { try { @@ -23989,13 +24130,13 @@ var executable = (command) => { var probeMcp = async (command, args) => { const unusable = executable(command); if (unusable !== null) return unusable; - return new Promise((resolve21) => { + return new Promise((resolve22) => { let settled = false; const finish = (problem) => { if (settled) return; settled = true; child?.kill(); - resolve21(problem); + resolve22(problem); }; let child; try { @@ -24050,10 +24191,10 @@ var jsonHost = async (host, path2, format, wrapper) => { let config3; let existed = true; try { - config3 = JSON.parse(readFileSync23(path2, "utf8")); + config3 = JSON.parse(readFileSync24(path2, "utf8")); if (!isObject3(config3)) throw new Error("root is not an object"); } catch (error2) { - if (!existsSync19(path2)) { + if (!existsSync21(path2)) { existed = false; config3 = {}; } else { @@ -24098,9 +24239,9 @@ var tomlRegistration = (source) => { var tomlHost = async (path2, wrapper) => { let source = ""; try { - source = readFileSync23(path2, "utf8"); + source = readFileSync24(path2, "utf8"); } catch (error2) { - if (existsSync19(path2)) return { host: "codex", requested: true, outcome: "failed", healthy: false, detail: `could not read config: ${String(error2)}` }; + if (existsSync21(path2)) return { host: "codex", requested: true, outcome: "failed", healthy: false, detail: `could not read config: ${String(error2)}` }; } let existing; try { @@ -24119,12 +24260,12 @@ command = ${escaped} args = ["mcp"] `; try { - mkdirSync11(dirname10(path2), { recursive: true }); - const temporary = join14(dirname10(path2), `.${String(path2.split("/").pop())}.commitlore-${process.pid}-${randomUUID()}.tmp`); + mkdirSync11(dirname11(path2), { recursive: true }); + const temporary = join16(dirname11(path2), `.${String(path2.split("/").pop())}.commitlore-${process.pid}-${randomUUID()}.tmp`); try { writeFileSync17(temporary, next, { encoding: "utf8", mode: 384 }); if (process.env.COMMITLORE_INSTALLER_TEST_INTERRUPT_WRITE === "1") throw new Error("interrupted before atomic rename"); - tomlRegistration(readFileSync23(temporary, "utf8")); + tomlRegistration(readFileSync24(temporary, "utf8")); renameSync10(temporary, path2); } finally { try { @@ -24139,7 +24280,7 @@ args = ["mcp"] return problem === null ? { host: "codex", requested: true, outcome: "installed", healthy: true, detail: "Codex config fallback added and live-verified" } : { host: "codex", requested: true, outcome: "failed", healthy: false, detail: `Codex registration was written but is unhealthy: ${problem}` }; }; var hasCommand = (command) => (process.env.PATH ?? "").split(delimiter).some((directory) => { - const path2 = join14(directory, command); + const path2 = join16(directory, command); try { return !statSync8(path2).isDirectory(); } catch { @@ -24173,25 +24314,25 @@ var inspectAndApplyHosts = async (options) => { const home = options.home; if (hasCommand("codex")) { requested.push(cliHost("codex", options.wrapper)); - } else if (existsSync19(join14(home, ".codex"))) { - requested.push(tomlHost(join14(home, ".codex", "config.toml"), options.wrapper)); + } else if (existsSync21(join16(home, ".codex"))) { + requested.push(tomlHost(join16(home, ".codex", "config.toml"), options.wrapper)); } else notDetected.push("codex"); const candidates = [ - ["gemini-cli", join14(home, ".gemini", "settings.json"), "json-mcpServers", hasCommand("gemini") || existsSync19(join14(home, ".gemini"))], - ["cursor", join14(home, ".cursor", "mcp.json"), "json-mcpServers", hasCommand("cursor") || existsSync19(join14(home, ".cursor"))], - ["windsurf", join14(home, ".codeium", "windsurf", "mcp_config.json"), "json-mcpServers", hasCommand("windsurf") || existsSync19(join14(home, ".codeium", "windsurf"))], - ["opencode", join14(home, ".config", "opencode", "opencode.json"), "json-mcp", hasCommand("opencode") || existsSync19(join14(home, ".config", "opencode"))] + ["gemini-cli", join16(home, ".gemini", "settings.json"), "json-mcpServers", hasCommand("gemini") || existsSync21(join16(home, ".gemini"))], + ["cursor", join16(home, ".cursor", "mcp.json"), "json-mcpServers", hasCommand("cursor") || existsSync21(join16(home, ".cursor"))], + ["windsurf", join16(home, ".codeium", "windsurf", "mcp_config.json"), "json-mcpServers", hasCommand("windsurf") || existsSync21(join16(home, ".codeium", "windsurf"))], + ["opencode", join16(home, ".config", "opencode", "opencode.json"), "json-mcp", hasCommand("opencode") || existsSync21(join16(home, ".config", "opencode"))] ]; for (const [host, path2, format, present2] of candidates) { if (present2) requested.push(jsonHost(host, path2, format, options.wrapper)); else notDetected.push(host); } - if (hasCommand("hermes") || existsSync19(join14(home, ".hermes"))) { - const result = spawnSync5(options.wrapper, ["hermes", "install", "--config", join14(home, ".hermes", "config.yaml"), "--command", options.wrapper, "--data-root", options.dataRoot, "--verify"], { stdio: "ignore", shell: false, timeout: 3e4 }); + if (hasCommand("hermes") || existsSync21(join16(home, ".hermes"))) { + const result = spawnSync5(options.wrapper, ["hermes", "install", "--config", join16(home, ".hermes", "config.yaml"), "--command", options.wrapper, "--data-root", options.dataRoot, "--verify"], { stdio: "ignore", shell: false, timeout: 3e4 }); requested.push(Promise.resolve(result.status === 0 ? { host: "hermes", requested: true, outcome: "installed", healthy: true, detail: "Hermes setup verified" } : { host: "hermes", requested: true, outcome: "failed", healthy: false, detail: "Hermes setup failed" })); } else notDetected.push("hermes"); const hosts = await Promise.all(requested); - return { schema: INSTALLER_HOSTS_SCHEMA, ok: hosts.every((host) => host.healthy), hosts, notDetected }; + return { schema: INSTALLER_HOSTS_SCHEMA, runtimeIdentity: runtimeIdentity(), ok: hosts.every((host) => host.healthy), hosts, notDetected }; }; var register18 = (program3) => { program3.command("installer-hosts").description("inspect, apply, and live-verify detected CommitLore host registrations").requiredOption("--wrapper ", "the verified CommitLore wrapper path").requiredOption("--data-root ", "the CommitLore data root").requiredOption("--home ", "the target user home directory").option("--json", "emit the installer host summary as JSON").action(async (options) => { @@ -24204,7 +24345,7 @@ var register18 = (program3) => { // src/mcp/server.ts import { Console } from "node:console"; -import { isAbsolute as isAbsolute3, relative as relative4, resolve as resolve20, sep as sep5 } from "node:path"; +import { isAbsolute as isAbsolute3, relative as relative4, resolve as resolve21, sep as sep5 } from "node:path"; // node_modules/zod/v4/core/core.js var _a; @@ -31524,7 +31665,7 @@ var Protocol = class { return; } const pollInterval = task2.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1e3; - await new Promise((resolve21) => setTimeout(resolve21, pollInterval)); + await new Promise((resolve22) => setTimeout(resolve22, pollInterval)); options?.signal?.throwIfAborted(); } } catch (error2) { @@ -31541,7 +31682,7 @@ var Protocol = class { */ request(request, resultSchema, options) { const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options ?? {}; - return new Promise((resolve21, reject2) => { + return new Promise((resolve22, reject2) => { const earlyReject = (error2) => { reject2(error2); }; @@ -31619,7 +31760,7 @@ var Protocol = class { if (!parseResult.success) { reject2(parseResult.error); } else { - resolve21(parseResult.data); + resolve22(parseResult.data); } } catch (error2) { reject2(error2); @@ -31880,12 +32021,12 @@ var Protocol = class { } } catch { } - return new Promise((resolve21, reject2) => { + return new Promise((resolve22, reject2) => { if (signal.aborted) { reject2(new McpError(ErrorCode.InvalidRequest, "Request cancelled")); return; } - const timeoutId = setTimeout(resolve21, interval); + const timeoutId = setTimeout(resolve22, interval); signal.addEventListener("abort", () => { clearTimeout(timeoutId); reject2(new McpError(ErrorCode.InvalidRequest, "Request cancelled")); @@ -32755,12 +32896,12 @@ var StdioServerTransport = class { this.onclose?.(); } send(message) { - return new Promise((resolve21) => { + return new Promise((resolve22) => { const json = serializeMessage(message); if (this._stdout.write(json)) { - resolve21(); + resolve22(); } else { - this._stdout.once("drain", resolve21); + this._stdout.once("drain", resolve22); } }); } @@ -33423,6 +33564,7 @@ var BEFORE_CHANGE_TOOL = "commitlore_before_change"; var PREPARE_CAPTURE_TOOL = "commitlore_prepare_capture"; var VERIFY_CAPTURE_TOOL = "commitlore_verify_capture"; var STAGE_CAPTURE_TOOL = "commitlore_stage_capture"; +var RUNTIME_IDENTITY_TOOL = "commitlore_runtime_identity"; var CONTEXT_URI_PREFIX = "commitlore://context/"; var CONTEXT_URI_TEMPLATE = `${CONTEXT_URI_PREFIX}{+path}`; var errorMessage5 = (error2) => error2 instanceof Error ? error2.message : String(error2); @@ -33432,7 +33574,7 @@ var warn = (message) => { }; var packageVersion2 = () => { try { - return packageVersion() ?? FALLBACK_VERSION; + return runtimeIdentity().version; } catch (error2) { warn(`could not read the package version (${errorMessage5(error2)})`); return FALLBACK_VERSION; @@ -33444,7 +33586,7 @@ var resolveRepoPath = (root, raw) => { if (isAbsolute3(raw)) { throw new Error(`path must be relative to the repository root: ${raw}`); } - const resolved = resolve20(root, raw); + const resolved = resolve21(root, raw); if (resolved !== root && !resolved.startsWith(`${root}${sep5}`)) { throw new Error(`path escapes the repository root: ${raw}`); } @@ -33490,6 +33632,12 @@ var asText = (value) => ({ }); var READS_ONLY = { readOnlyHint: true, destructiveHint: false, openWorldHint: false }; var TOOLS = [ + { + name: RUNTIME_IDENTITY_TOOL, + description: "Report the exact CommitLore entrypoint, package root, version and index schema this MCP server executes.", + inputSchema: { type: "object", properties: {}, additionalProperties: false }, + annotations: { ...READS_ONLY, title: "Report CommitLore runtime identity" } + }, { name: QUERY_TOOL, description: "Active CommitLore records for a path: the constraints, ruled-out alternatives and warnings recorded in git history. Same answer as `commitlore --json`.", @@ -33666,7 +33814,7 @@ var kindArg = (args) => { }; var pathArg = (root, args) => resolveRepoPath(root, stringArg(args, "path") ?? ""); var createServer = (opts = {}) => { - const root = resolve20(opts.cwd ?? process.cwd()); + const root = resolve21(opts.cwd ?? process.cwd()); const server = new Server( { name: SERVER_NAME, version: packageVersion2() }, { @@ -33686,6 +33834,7 @@ Recording: when a change carries decision context the diff cannot show \u2014 a } ); const handlers = { + [RUNTIME_IDENTITY_TOOL]: () => asText(runtimeIdentity()), [QUERY_TOOL]: (args) => { const kind = kindArg(args); return asText(contextJson(root, kind, pathArg(root, args))); @@ -33908,9 +34057,9 @@ var register21 = (program3) => { // src/core/codex-plugin.ts import { spawnSync as spawnSync6 } from "node:child_process"; -import { existsSync as existsSync20, mkdirSync as mkdirSync12, readFileSync as readFileSync24, rmSync as rmSync5, writeFileSync as writeFileSync18 } from "node:fs"; +import { existsSync as existsSync22, mkdirSync as mkdirSync12, readFileSync as readFileSync25, rmSync as rmSync5, writeFileSync as writeFileSync18 } from "node:fs"; import { homedir as homedir2 } from "node:os"; -import { join as join15 } from "node:path"; +import { join as join17 } from "node:path"; // src/core/agent-configs.ts var AGENT_CONFIGS = [ @@ -33985,7 +34134,7 @@ var isCommitloreEntry = (format, entry, wrapperPath) => { // src/core/codex-plugin.ts var MARKER_VERSION = 1; -var defaultDataHome = () => process.platform === "win32" ? process.env["LOCALAPPDATA"] ?? join15(homedir2(), "AppData", "Local") : process.env["XDG_DATA_HOME"] ?? join15(homedir2(), ".local", "share"); +var defaultDataHome = () => process.platform === "win32" ? process.env["LOCALAPPDATA"] ?? join17(homedir2(), "AppData", "Local") : process.env["XDG_DATA_HOME"] ?? join17(homedir2(), ".local", "share"); var codexSaid = (result) => { const said = (result.stderr.trim() || result.stdout.trim()).split("\n")[0]?.trim() ?? ""; if (said === "") return []; @@ -34007,7 +34156,7 @@ var config2 = () => { }; var codexPluginSelector = (plugin = config2()) => `${plugin.plugin}@${plugin.marketplace}`; var codexPluginInstallCommand = () => "commitlore plugin install-codex"; -var codexPluginMarkerPath = (plugin = config2(), dataHome = defaultDataHome()) => join15(dataHome, ...plugin.dataRelativePath); +var codexPluginMarkerPath = (plugin = config2(), dataHome = defaultDataHome()) => join17(dataHome, ...plugin.dataRelativePath); var successful = (result) => result.status === 0 && result.error === void 0; var readMarketplaceState = (json, plugin) => { const namedInText = () => json.split("\n").some((line2) => line2.trim().startsWith(`${plugin.marketplace} `)) ? { kind: "unverifiable-present" } : { kind: "unverifiable-absent" }; @@ -34044,9 +34193,9 @@ var markerFor = (plugin) => ({ }); var readCodexPluginMarker = (plugin = config2(), dataHome = defaultDataHome()) => { const markerPath = codexPluginMarkerPath(plugin, dataHome); - if (!existsSync20(markerPath)) return null; + if (!existsSync22(markerPath)) return null; try { - const parsed = JSON.parse(readFileSync24(markerPath, "utf8")); + const parsed = JSON.parse(readFileSync25(markerPath, "utf8")); if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return null; const marker = parsed; const expected = markerFor(plugin); @@ -34060,7 +34209,7 @@ var removeCodexPluginMarker = (plugin = config2(), dataHome = defaultDataHome()) }; var writeCodexPluginMarker = (plugin, dataHome) => { const markerPath = codexPluginMarkerPath(plugin, dataHome); - mkdirSync12(join15(markerPath, ".."), { recursive: true }); + mkdirSync12(join17(markerPath, ".."), { recursive: true }); writeFileSync18(markerPath, `${JSON.stringify(markerFor(plugin), null, 2)} `); }; @@ -34150,7 +34299,8 @@ var installCodexPlugin = (options = {}) => { `Codex plugin already installed: ${codexPluginSelector(plugin)} \u2014 left as it is, and not recorded as ours` ); } - report.push("start a new Codex session to load the CommitLore skill and MCP tools"); + report.push(`installer runtime identity: ${formatRuntimeIdentity(runtimeIdentity())}`); + report.push("start a new Codex session to load the CommitLore skill and MCP tools; the live MCP runtime identity is available from commitlore_runtime_identity"); return { exitCode: 0, report }; }; @@ -34172,7 +34322,7 @@ var register22 = (program3) => { }; // src/commands/squash-preserve.ts -import { readFileSync as readFileSync25, writeFileSync as writeFileSync19 } from "node:fs"; +import { readFileSync as readFileSync26, writeFileSync as writeFileSync19 } from "node:fs"; var PREFIX4 = "commitlore:"; var USAGE = "usage: commitlore squash-preserve .. [--target ] [--message-file ] [--json] [--force]"; var SHORT_SHA = 8; @@ -34213,7 +34363,7 @@ var warningsFor = (plan) => { }; var readDraft2 = (path2) => { try { - return readFileSync25(path2, "utf8"); + return readFileSync26(path2, "utf8"); } catch (error2) { throw new Error(`cannot read ${JSON.stringify(path2)}: ${messageOf8(error2)}`); } @@ -34382,7 +34532,7 @@ var register24 = (program3) => { }; // src/commands/validate.ts -import { readFileSync as readFileSync26 } from "node:fs"; +import { readFileSync as readFileSync27 } from "node:fs"; var USAGE2 = "usage: commitlore validate [--message-file | --commit | --range ..] [--json]"; var MODE_FLAGS = { messageFile: "--message-file", @@ -34590,14 +34740,14 @@ var readRange = (range, cwd) => { }; var readMessageFile = (path2) => { try { - return readFileSync26(path2, "utf8"); + return readFileSync27(path2, "utf8"); } catch (error2) { throw new Error(`cannot read ${JSON.stringify(path2)}: ${messageOf9(error2)}`); } }; var readStdinSync = () => { try { - return readFileSync26(0, "utf8"); + return readFileSync27(0, "utf8"); } catch (error2) { throw new Error(`cannot read the commit message from stdin: ${messageOf9(error2)}`); } @@ -34910,9 +35060,9 @@ var register25 = (program3) => { // src/commands/uninstall.ts import { spawnSync as spawnSync7 } from "node:child_process"; -import { existsSync as existsSync21, readFileSync as readFileSync27, rmSync as rmSync6, writeFileSync as writeFileSync20 } from "node:fs"; +import { existsSync as existsSync23, readFileSync as readFileSync28, rmSync as rmSync6, writeFileSync as writeFileSync20 } from "node:fs"; import { homedir as homedir3 } from "node:os"; -import { join as join16 } from "node:path"; +import { join as join18 } from "node:path"; var WRAPPER_MARKER = "# commitlore:wrapper:v1"; var isRecord2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value); var withoutJsonEntry = (parsed, format, wrapper) => { @@ -34956,7 +35106,7 @@ var listCodexMcp = (command) => { var isInstalledCodexServer = (server, wrapper) => server.name === SERVER_KEY && server.transport?.type === "stdio" && server.transport.command === wrapper && Array.isArray(server.transport.args) && server.transport.args.length === 1 && server.transport.args[0] === "mcp"; var runUninstall = async (options = {}) => { const home = options.home ?? homedir3(); - const dataHome = options.dataHome ?? (process.platform === "win32" ? process.env["LOCALAPPDATA"] ?? join16(home, "AppData", "Local") : process.env["XDG_DATA_HOME"] ?? join16(home, ".local", "share")); + const dataHome = options.dataHome ?? (process.platform === "win32" ? process.env["LOCALAPPDATA"] ?? join18(home, "AppData", "Local") : process.env["XDG_DATA_HOME"] ?? join18(home, ".local", "share")); const dryRun = options.dryRun === true; const say = dryRun ? "would remove" : "removed"; const report = []; @@ -34964,11 +35114,11 @@ var runUninstall = async (options = {}) => { const kept = []; const failures = []; const runCodex = options.runCodex ?? runCodexCommand; - const wrapper = join16(home, ".local", "bin", "commitlore"); - if (existsSync21(wrapper)) { + const wrapper = join18(home, ".local", "bin", "commitlore"); + if (existsSync23(wrapper)) { let contents; try { - contents = readFileSync27(wrapper, "utf8"); + contents = readFileSync28(wrapper, "utf8"); } catch { kept.push(wrapper); failures.push(wrapper); @@ -34987,7 +35137,7 @@ var runUninstall = async (options = {}) => { let retainDataRoot = false; for (const config3 of AGENT_CONFIGS.filter(isCodexPluginConfig)) { const markerPath = codexPluginMarkerPath(config3, dataHome); - if (!existsSync21(markerPath)) continue; + if (!existsSync23(markerPath)) continue; if (readCodexPluginMarker(config3, dataHome) === null) { retainDataRoot = true; kept.push(markerPath); @@ -35024,8 +35174,8 @@ var runUninstall = async (options = {}) => { removeCodexPluginMarker(config3, dataHome); removed.push(`${selector} (Codex plugin)`); } - const dataRoot = join16(dataHome, "commitlore"); - if (existsSync21(dataRoot)) { + const dataRoot = join18(dataHome, "commitlore"); + if (existsSync23(dataRoot)) { if (retainDataRoot) { kept.push(dataRoot); report.push(`kept: ${dataRoot} \u2014 it carries a Codex-plugin marker that still needs removal`); @@ -35039,7 +35189,7 @@ var runUninstall = async (options = {}) => { const codexCommand = options.codexCommand ?? (options.home === void 0 ? "codex" : void 0); const codexList = codexCommand === void 0 ? null : listCodexMcp(codexCommand); if (codexConfig !== void 0 && codexList !== null) { - const path2 = join16(home, ...codexConfig.homeRelativePath); + const path2 = join18(home, ...codexConfig.homeRelativePath); if (codexList.state === "unavailable" || codexList.state === "invalid") { kept.push(path2); failures.push(path2); @@ -35070,11 +35220,11 @@ var runUninstall = async (options = {}) => { for (const config3 of AGENT_CONFIGS) { if (!isMcpAgentConfig(config3)) continue; if (config3.agent === "codex" && codexList !== null && codexList.state !== "absent") continue; - const path2 = join16(home, ...config3.homeRelativePath); - if (!existsSync21(path2)) continue; + const path2 = join18(home, ...config3.homeRelativePath); + if (!existsSync23(path2)) continue; let contents; try { - contents = readFileSync27(path2, "utf8"); + contents = readFileSync28(path2, "utf8"); } catch { kept.push(path2); failures.push(path2); @@ -35091,7 +35241,7 @@ var runUninstall = async (options = {}) => { } if (config3.format === "yaml-mcp_servers") { const next2 = removeHermesConfig(contents, { - wrapperPath: [wrapper, join16(dataRoot, "bin", "commitlore.cmd")], + wrapperPath: [wrapper, join18(dataRoot, "bin", "commitlore.cmd")], dataRoot, installedSkillsDir: installedPath("hermes", "skills") }); @@ -35143,11 +35293,11 @@ var registerUninstall = (program3) => { var pkg = { version: packageVersion() }; var STDIN_FD2 = 0; var readMessage = (messageFile) => { - if (messageFile !== void 0) return readFileSync28(messageFile, "utf8"); + if (messageFile !== void 0) return readFileSync29(messageFile, "utf8"); if (process.stdin.isTTY) { throw new Error("no commit message on stdin \u2014 pipe one in or pass --message-file "); } - return readFileSync28(STDIN_FD2, "utf8"); + return readFileSync29(STDIN_FD2, "utf8"); }; var recordIdOf3 = (block) => block.trailers.find((trailer) => trailer.key === "Record-Id")?.value; var recordLabel = (index, total, block) => { @@ -35196,6 +35346,15 @@ ${serializeTrailers(block.trailers)}`).join("\n") }; var program2 = new Command(); program2.name("commitlore").description("Git commit trailers as institutional memory for AI coding agents").version(pkg.version ?? "0.0.0"); +program2.command("runtime-identity").description("print the exact CommitLore runtime this command executes").option("--json", "emit the runtime identity as JSON").action((options) => { + const identity = runtimeIdentity(); + process.stdout.write(options.json === true ? `${formatRuntimeIdentity(identity)} +` : `version ${identity.version} +entrypoint ${identity.entrypoint} +package root ${identity.packageRoot} +index schema v${identity.indexSchemaVersion} +`); +}); program2.command("parse").description("Parse a commit message into its CommitLore trailers (SPEC \xA72)").option("--message-file ", "read the message from a file instead of stdin").option("--json", "emit the parsed trailers as JSON").addHelpText( "after", "\nA message carrying more than one record block (SPEC \xA72.4) prints every block, labeled own (the message's own last paragraph) or earlier (a block the grammar recovered), and flags any Record-Id declared by more than one block. A single-block message is unaffected.\nExit codes: 0 parsed (including a message with no trailers), 2 the message could not be read." diff --git a/dist/core/codex-plugin.js b/dist/core/codex-plugin.js index dc688d6a..3ed28d5a 100644 --- a/dist/core/codex-plugin.js +++ b/dist/core/codex-plugin.js @@ -8,6 +8,7 @@ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node import { homedir } from 'node:os'; import { join } from 'node:path'; import { AGENT_CONFIGS, isCodexPluginConfig } from './agent-configs.js'; +import { formatRuntimeIdentity, runtimeIdentity } from './runtime-identity.js'; const MARKER_VERSION = 1; const defaultDataHome = () => process.platform === 'win32' ? process.env['LOCALAPPDATA'] ?? join(homedir(), 'AppData', 'Local') @@ -261,7 +262,8 @@ export const installCodexPlugin = (options = {}) => { else { report.push(`Codex plugin already installed: ${codexPluginSelector(plugin)} — left as it is, and not recorded as ours`); } - report.push('start a new Codex session to load the CommitLore skill and MCP tools'); + report.push(`installer runtime identity: ${formatRuntimeIdentity(runtimeIdentity())}`); + report.push('start a new Codex session to load the CommitLore skill and MCP tools; the live MCP runtime identity is available from commitlore_runtime_identity'); return { exitCode: 0, report }; }; //# sourceMappingURL=codex-plugin.js.map \ No newline at end of file diff --git a/dist/core/codex-plugin.js.map b/dist/core/codex-plugin.js.map index faf2a79c..3b456d4c 100644 --- a/dist/core/codex-plugin.js.map +++ b/dist/core/codex-plugin.js.map @@ -1 +1 @@ -{"version":3,"file":"codex-plugin.js","sourceRoot":"","sources":["../../src/core/codex-plugin.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"codex-plugin.js","sourceRoot":"","sources":["../../src/core/codex-plugin.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/core/hook-target.d.ts b/dist/core/hook-target.d.ts index 0a84576b..196e5d60 100644 --- a/dist/core/hook-target.d.ts +++ b/dist/core/hook-target.d.ts @@ -1,3 +1,4 @@ +import { type RuntimeIdentity } from './runtime-identity.js'; export interface RecordedHookTarget { readonly bin: string; readonly node: string; @@ -25,5 +26,7 @@ export declare const classifyBinTarget: (path: string) => BinKind | null; * instead of guessing at it independently. */ export declare const hasAllowedBinExtension: (path: string) => boolean; +/** The same identity the pinned hook will execute, if its file is readable. */ +export declare const recordedHookIdentity: (target: RecordedHookTarget, cwd: string) => RuntimeIdentity | null; export declare const readRecordedHookTarget: (cwd: string) => RecordedHookTarget; export declare const describeRecordedHookTarget: (target: RecordedHookTarget) => readonly string[]; diff --git a/dist/core/hook-target.js b/dist/core/hook-target.js index 42c3fe7d..d8173a39 100644 --- a/dist/core/hook-target.js +++ b/dist/core/hook-target.js @@ -1,7 +1,8 @@ -import { lstatSync, readFileSync, realpathSync, statSync } from 'node:fs'; -import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path'; +import { lstatSync, realpathSync, statSync } from 'node:fs'; +import { isAbsolute, relative, resolve, sep } from 'node:path'; import { execGit } from './git.js'; -import { PACKAGE_ROOT, findPackageRoot, packageVersion } from './paths.js'; +import { PACKAGE_ROOT } from './paths.js'; +import { runtimeIdentity } from './runtime-identity.js'; const configValue = (cwd, key) => execGit(['config', '--local', '--get', key], { cwd }).stdout.trim(); const isFile = (path) => { try { @@ -78,9 +79,7 @@ export const hasAllowedBinExtension = (path) => classifyBinTarget(path) !== null */ const recordedVersion = (binPath) => { try { - const manifest = readFileSync(join(findPackageRoot(dirname(binPath)), 'package.json'), 'utf8'); - const parsed = JSON.parse(manifest); - return typeof parsed.version === 'string' && parsed.version !== '' ? parsed.version : null; + return runtimeIdentity(binPath).version; } catch { // No manifest above it, unreadable, or not JSON. All three mean the same @@ -104,7 +103,7 @@ const recordedVersion = (binPath) => { * green here costs a repository every fix shipped since the pin was written. */ const versionProblems = (binPath) => { - const running = packageVersion(); + const running = runtimeIdentity().version; const pinned = recordedVersion(binPath); if (pinned === null) { return [ @@ -119,6 +118,18 @@ const versionProblems = (binPath) => { `every commit with ${pinned}, so anything fixed since then does not apply here`, ]; }; +/** The same identity the pinned hook will execute, if its file is readable. */ +export const recordedHookIdentity = (target, cwd) => { + if (target.bin === '') + return null; + const path = resolve(cwd, target.bin); + try { + return isFile(path) ? runtimeIdentity(path) : null; + } + catch { + return null; + } +}; export const readRecordedHookTarget = (cwd) => { const bin = configValue(cwd, 'commitlore.bin'); const node = configValue(cwd, 'commitlore.node'); diff --git a/dist/core/hook-target.js.map b/dist/core/hook-target.js.map index ec08a22e..cadc6297 100644 --- a/dist/core/hook-target.js.map +++ b/dist/core/hook-target.js.map @@ -1 +1 @@ -{"version":3,"file":"hook-target.js","sourceRoot":"","sources":["../../src/core/hook-target.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"hook-target.js","sourceRoot":"","sources":["../../src/core/hook-target.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/core/runtime-identity.d.ts b/dist/core/runtime-identity.d.ts new file mode 100644 index 00000000..67187ac0 --- /dev/null +++ b/dist/core/runtime-identity.d.ts @@ -0,0 +1,33 @@ +/** + * The exact program a CommitLore surface is executing. + * + * A command name is not an identity: hooks pin a file, plugins cache a + * checkout and MCP hosts retain a process. This one value is deliberately + * built from the entry file's own package, never from the caller's cwd. + */ +export interface RuntimeIdentity { + readonly version: string; + readonly entrypoint: string; + readonly packageRoot: string; + readonly indexSchemaVersion: number; +} +/** + * Produces every part of runtime identity from one entrypoint. Passing an + * entrypoint is for a pin or an observed MCP command; omission describes this + * running installation, even when tests launched Node from somewhere else. + */ +export declare const runtimeIdentity: (entrypoint?: string) => RuntimeIdentity; +export declare const runtimeAssetProblems: (identity: RuntimeIdentity) => string[]; +export interface IdentityDiagnosis { + readonly ok: boolean; + readonly detail: string; + readonly fix: string; +} +/** One diagnosis string for every surface identity doctor collected. */ +export declare const diagnoseRuntimeIdentities: (identities: Partial>) => IdentityDiagnosis; +/** Schema skew is never a steady-state scan fallback: the cache can be rebuilt. */ +export declare const convergeIndexSchema: ({ writer, reader }: { + writer: RuntimeIdentity; + reader: RuntimeIdentity; +}) => IdentityDiagnosis; +export declare const formatRuntimeIdentity: (identity: RuntimeIdentity) => string; diff --git a/dist/core/runtime-identity.js b/dist/core/runtime-identity.js new file mode 100644 index 00000000..12e74bfa --- /dev/null +++ b/dist/core/runtime-identity.js @@ -0,0 +1,83 @@ +/** + * The exact program a CommitLore surface is executing. + * + * A command name is not an identity: hooks pin a file, plugins cache a + * checkout and MCP hosts retain a process. This one value is deliberately + * built from the entry file's own package, never from the caller's cwd. + */ +import { existsSync, readFileSync, realpathSync } from 'node:fs'; +import { dirname, join, resolve } from 'node:path'; +import { SCHEMA_VERSION } from './index-db.js'; +import { PACKAGE_ROOT, findPackageRoot, installedPath } from './paths.js'; +const physicalPath = (path) => { + try { + return realpathSync(path); + } + catch { + return resolve(path); + } +}; +const manifestAt = (root) => { + try { + return JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')); + } + catch { + return {}; + } +}; +/** + * Produces every part of runtime identity from one entrypoint. Passing an + * entrypoint is for a pin or an observed MCP command; omission describes this + * running installation, even when tests launched Node from somewhere else. + */ +export const runtimeIdentity = (entrypoint) => { + const entry = physicalPath(entrypoint ?? installedPath('dist', 'commitlore.mjs')); + const root = entrypoint === undefined ? PACKAGE_ROOT : findPackageRoot(dirname(entry)); + const manifest = manifestAt(root); + const schema = manifest.commitlore?.indexSchemaVersion; + return { + version: typeof manifest.version === 'string' && manifest.version !== '' ? manifest.version : '0.0.0-unknown', + entrypoint: entry, + packageRoot: physicalPath(root), + indexSchemaVersion: typeof schema === 'number' && Number.isInteger(schema) ? schema : SCHEMA_VERSION, + }; +}; +/** Assets read by the capture path rather than supplied by a host. */ +const CAPTURE_ASSETS = ['spec/schema/record.schema.json']; +export const runtimeAssetProblems = (identity) => CAPTURE_ASSETS + .map((asset) => join(identity.packageRoot, asset)) + .filter((path) => !existsSync(path)); +const printed = (identity) => `v${identity.version}; entry ${identity.entrypoint}; root ${identity.packageRoot}; schema v${identity.indexSchemaVersion}`; +/** One diagnosis string for every surface identity doctor collected. */ +export const diagnoseRuntimeIdentities = (identities) => { + const cli = identities.cli; + if (cli === undefined) + return { ok: false, detail: 'CLI runtime identity is unavailable', fix: 'run commitlore doctor from the installed CLI' }; + const mismatches = Object.entries(identities) + .filter(([surface, identity]) => surface !== 'cli' && identity !== undefined && (identity.version !== cli.version || + identity.entrypoint !== cli.entrypoint || + identity.packageRoot !== cli.packageRoot || + identity.indexSchemaVersion !== cli.indexSchemaVersion)); + if (mismatches.length === 0) + return { ok: true, detail: `all observed runtimes match CLI: ${printed(cli)}`, fix: '' }; + const fixes = { + hook: 'commitlore hooks install', + mcp: 'remove the stale MCP package root named below, update its registration, then restart the host session', + plugin: 'remove and re-add the CommitLore plugin, then start a new agent session', + }; + return { + ok: false, + detail: mismatches.map(([surface, identity]) => `${surface} identity differs from CLI: ${surface} ${printed(identity)}; CLI ${printed(cli)}`).join('\n'), + fix: mismatches.map(([surface]) => fixes[surface]).join('\n'), + }; +}; +/** Schema skew is never a steady-state scan fallback: the cache can be rebuilt. */ +export const convergeIndexSchema = ({ writer, reader }) => writer.indexSchemaVersion === reader.indexSchemaVersion + ? { ok: true, detail: `index writer and reader both use schema v${writer.indexSchemaVersion}`, fix: '' } + : { + ok: false, + detail: `index writer schema v${writer.indexSchemaVersion} differs from reader schema v${reader.indexSchemaVersion}; rebuild the derived cache after upgrading the reader`, + fix: 'commitlore index --rebuild', + }; +export const formatRuntimeIdentity = (identity) => JSON.stringify(identity); +//# sourceMappingURL=runtime-identity.js.map \ No newline at end of file diff --git a/dist/core/runtime-identity.js.map b/dist/core/runtime-identity.js.map new file mode 100644 index 00000000..103f49dd --- /dev/null +++ b/dist/core/runtime-identity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime-identity.js","sourceRoot":"","sources":["../../src/core/runtime-identity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/mcp/lifecycle.d.ts b/dist/mcp/lifecycle.d.ts index 0b56f678..23c0e516 100644 --- a/dist/mcp/lifecycle.d.ts +++ b/dist/mcp/lifecycle.d.ts @@ -33,6 +33,7 @@ * first, so a long-lived checkout cannot accumulate an unbounded log from a * server that starts on every session. */ +import { type RuntimeIdentity } from '../core/runtime-identity.js'; export declare const LIFECYCLE_FILE = "mcp-lifecycle.log"; /** * `.git/commitlore/mcp-lifecycle.log`, or `null` outside a repository. @@ -75,6 +76,10 @@ export interface LifecycleEntry { readonly pid: number; readonly detail: string; } +/** The identity an MCP process actually recorded when it started, if it is a current-format entry. */ +export declare const lifecycleIdentity: (entry: LifecycleEntry) => RuntimeIdentity | null; +/** Last live-MCP identity is the process identity, not the registration's name. */ +export declare const latestLifecycleIdentity: (cwd?: string) => RuntimeIdentity | null; /** Parses the log. Unreadable or absent reads as empty — it is a breadcrumb trail. */ export declare const readLifecycle: (cwd?: string) => LifecycleEntry[]; /** A completed server process whose final record says why it crashed. */ diff --git a/dist/mcp/lifecycle.js b/dist/mcp/lifecycle.js index e9adfe04..91f80217 100644 --- a/dist/mcp/lifecycle.js +++ b/dist/mcp/lifecycle.js @@ -36,7 +36,7 @@ import { appendFileSync, mkdirSync, readFileSync, statSync, writeFileSync, writeSync } from 'node:fs'; import { dirname, join, resolve } from 'node:path'; import { execGit } from '../core/git.js'; -import { packageVersion } from '../core/paths.js'; +import { formatRuntimeIdentity, runtimeIdentity } from '../core/runtime-identity.js'; /** Kept small: this is a breadcrumb trail, not telemetry. */ const MAX_BYTES = 64 * 1024; export const LIFECYCLE_FILE = 'mcp-lifecycle.log'; @@ -103,8 +103,7 @@ const errorMessage = (error) => { * ordinary client hangup it represents. */ export const recordServerStart = (cwd = process.cwd(), at = new Date(), output = process.stdout) => { - const entry = process.argv[1] ?? 'unknown'; - write(cwd, `started ${stamp(at)} pid ${String(process.pid)} ${packageVersion()} ${entry}`); + write(cwd, `started ${stamp(at)} pid ${String(process.pid)} identity ${formatRuntimeIdentity(runtimeIdentity())}`); // The lower number is only a fallback. A crash after stdin closes is still a // crash, and a signal received while the client is closing is still a signal. let reason; @@ -158,6 +157,31 @@ export const recordServerStart = (cwd = process.cwd(), at = new Date(), output = } return { crash }; }; +/** The identity an MCP process actually recorded when it started, if it is a current-format entry. */ +export const lifecycleIdentity = (entry) => { + if (entry.kind !== 'started' || !entry.detail.startsWith('identity ')) + return null; + try { + const value = JSON.parse(entry.detail.slice('identity '.length)); + return typeof value.version === 'string' && typeof value.entrypoint === 'string' && + typeof value.packageRoot === 'string' && typeof value.indexSchemaVersion === 'number' + ? { version: value.version, entrypoint: value.entrypoint, packageRoot: value.packageRoot, indexSchemaVersion: value.indexSchemaVersion } + : null; + } + catch { + return null; + } +}; +/** Last live-MCP identity is the process identity, not the registration's name. */ +export const latestLifecycleIdentity = (cwd = process.cwd()) => { + const started = readLifecycle(cwd).filter((entry) => entry.kind === 'started'); + for (const entry of started.reverse()) { + const identity = lifecycleIdentity(entry); + if (identity !== null) + return identity; + } + return null; +}; /** Parses the log. Unreadable or absent reads as empty — it is a breadcrumb trail. */ export const readLifecycle = (cwd = process.cwd()) => { try { diff --git a/dist/mcp/lifecycle.js.map b/dist/mcp/lifecycle.js.map index dc2c0dc1..427ecb34 100644 --- a/dist/mcp/lifecycle.js.map +++ b/dist/mcp/lifecycle.js.map @@ -1 +1 @@ -{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/mcp/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACtG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,6DAA6D;AAC7D,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC;AAE5B,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE,EAAiB,EAAE;IAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACjG,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAQ,EAAE;IAClC,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS;YAAE,OAAO;QAC7C,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrD,4EAA4E;QAC5E,4DAA4D;QAC5D,aAAa,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,IAAY,EAAQ,EAAE;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO;QAC1B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC,CAAC;AAEF,kFAAkF;AAClF,MAAM,KAAK,GAAG,CAAC,EAAQ,EAAU,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;AAexE,4EAA4E;AAC5E,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE;IAC9C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrF,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,OAAO,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;AAC1D,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,MAAc,OAAO,CAAC,GAAG,EAAE,EAC3B,KAAW,IAAI,IAAI,EAAE,EACrB,SAAgC,OAAO,CAAC,MAAM,EAC3B,EAAE;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IAC3C,KAAK,CAAC,GAAG,EAAE,WAAW,KAAK,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,cAAc,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;IAE3F,6EAA6E;IAC7E,8EAA8E;IAC9E,IAAI,MAAwD,CAAC;IAC7D,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAQ,EAAE;QACtD,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,IAAI,MAAM,CAAC,QAAQ;YAAE,MAAM,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACzF,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,KAAc,EAAQ,EAAE;QACrC,MAAM,MAAM,GAAG,YAAY,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChB,wEAAwE;QACxE,sEAAsE;QACtE,0EAA0E;QAC1E,IAAI,CAAC;YACH,SAAS,CAAC,CAAC,EAAE,mBAAmB,MAAM,IAAI,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,+BAA+B;QACjC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,KAAK,CACH,GAAG,EACH,WAAW,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,MAAM,IAAI,OAAO,EAAE,CACvF,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,2EAA2E;IAC3E,wDAAwD;IACxD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;QAC7B,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;QACpC,IAAK,KAA+B,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACtD,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,KAAY,EAAE,EAAE;QACjD,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,MAAe,EAAE,EAAE;QACrD,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,MAAM,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YACxB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC,CAAC;AASF,sFAAsF;AACtF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE,EAAoB,EAAE;IAC7E,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;aAC9B,KAAK,CAAC,IAAI,CAAC;aACX,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,iDAAiD,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAClF,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,EAAE,CAAC;YAC9B,OAAO;gBACL;oBACE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAyB;oBACtC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;oBAClB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrB,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;iBAChC;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACP,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE,EAAoB,EAAE,CAC3E,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AAExG;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE,EAAoB,EAAE;IAC9E,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACpE,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3B,OAAO,KAAK,CAAC,CAAC,0CAA0C;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/mcp/lifecycle.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/mcp/server.d.ts b/dist/mcp/server.d.ts index bbcf204c..dadde763 100644 --- a/dist/mcp/server.d.ts +++ b/dist/mcp/server.d.ts @@ -52,6 +52,7 @@ export declare const BEFORE_CHANGE_TOOL = "commitlore_before_change"; export declare const PREPARE_CAPTURE_TOOL = "commitlore_prepare_capture"; export declare const VERIFY_CAPTURE_TOOL = "commitlore_verify_capture"; export declare const STAGE_CAPTURE_TOOL = "commitlore_stage_capture"; +export declare const RUNTIME_IDENTITY_TOOL = "commitlore_runtime_identity"; /** * `commitlore://context/`. The template form uses RFC 6570 reserved * expansion (`{+path}`) so a client fills it with a real path rather than one diff --git a/dist/mcp/server.js b/dist/mcp/server.js index 51c28bb7..8e767d7b 100644 --- a/dist/mcp/server.js +++ b/dist/mcp/server.js @@ -42,7 +42,7 @@ */ import { Console } from 'node:console'; import { isAbsolute, relative, resolve, sep } from 'node:path'; -import { packageVersion as readPackageVersion } from '../core/paths.js'; +import { runtimeIdentity } from '../core/runtime-identity.js'; import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListResourceTemplatesRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; @@ -78,6 +78,7 @@ export const BEFORE_CHANGE_TOOL = 'commitlore_before_change'; export const PREPARE_CAPTURE_TOOL = 'commitlore_prepare_capture'; export const VERIFY_CAPTURE_TOOL = 'commitlore_verify_capture'; export const STAGE_CAPTURE_TOOL = 'commitlore_stage_capture'; +export const RUNTIME_IDENTITY_TOOL = 'commitlore_runtime_identity'; /** * `commitlore://context/`. The template form uses RFC 6570 reserved * expansion (`{+path}`) so a client fills it with a real path rather than one @@ -97,7 +98,7 @@ const warn = (message) => { */ const packageVersion = () => { try { - return readPackageVersion() ?? FALLBACK_VERSION; + return runtimeIdentity().version; } catch (error) { warn(`could not read the package version (${errorMessage(error)})`); @@ -201,6 +202,12 @@ const asText = (value) => ({ /** Every tool here reads; none of them touches anything outside the machine. */ const READS_ONLY = { readOnlyHint: true, destructiveHint: false, openWorldHint: false }; const TOOLS = [ + { + name: RUNTIME_IDENTITY_TOOL, + description: 'Report the exact CommitLore entrypoint, package root, version and index schema this MCP server executes.', + inputSchema: { type: 'object', properties: {}, additionalProperties: false }, + annotations: { ...READS_ONLY, title: 'Report CommitLore runtime identity' }, + }, { name: QUERY_TOOL, description: 'Active CommitLore records for a path: the constraints, ruled-out alternatives and ' + @@ -444,6 +451,7 @@ export const createServer = (opts = {}) => { 'this; a rejected record is a normal outcome and never blocks the commit.', }); const handlers = { + [RUNTIME_IDENTITY_TOOL]: () => asText(runtimeIdentity()), [QUERY_TOOL]: (args) => { const kind = kindArg(args); return asText(contextJson(root, kind, pathArg(root, args))); diff --git a/dist/mcp/server.js.map b/dist/mcp/server.js.map index d63e99fe..471a95f9 100644 --- a/dist/mcp/server.js.map +++ b/dist/mcp/server.js.map @@ -1 +1 @@ -{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 46ccf79b..d7d1bc9e 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,9 @@ "description": "Git-native, lifecycle-aware decision memory for coding agents", "license": "MIT", "private": true, + "commitlore": { + "indexSchemaVersion": 4 + }, "type": "module", "files": [ "dist", diff --git a/src/cli.ts b/src/cli.ts index e8c63f52..b956e5b2 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -19,6 +19,7 @@ import { register as registerAuto } from './commands/auto.js'; import { register as registerCapture } from './commands/capture.js'; import { register as registerDemo } from './commands/demo.js'; import { packageVersion } from './core/paths.js'; +import { formatRuntimeIdentity, runtimeIdentity } from './core/runtime-identity.js'; import { register as registerDoctor } from './commands/doctor.js'; import { register as registerHarvest } from './commands/harvest.js'; import { register as registerGuard } from './commands/guard.js'; @@ -129,6 +130,19 @@ program .description('Git commit trailers as institutional memory for AI coding agents') .version(pkg.version ?? '0.0.0'); +// Machine-readable on purpose: hooks, installers and MCP hosts need the +// entrypoint and root too; a version string was the ambiguity F-001 found. +program + .command('runtime-identity') + .description('print the exact CommitLore runtime this command executes') + .option('--json', 'emit the runtime identity as JSON') + .action((options: { json?: boolean }) => { + const identity = runtimeIdentity(); + process.stdout.write(options.json === true + ? `${formatRuntimeIdentity(identity)}\n` + : `version ${identity.version}\nentrypoint ${identity.entrypoint}\npackage root ${identity.packageRoot}\nindex schema v${identity.indexSchemaVersion}\n`); + }); + program .command('parse') .description('Parse a commit message into its CommitLore trailers (SPEC §2)') diff --git a/src/commands/doctor/checks/runtime-runtime-identity.ts b/src/commands/doctor/checks/runtime-runtime-identity.ts new file mode 100644 index 00000000..c5f8916b --- /dev/null +++ b/src/commands/doctor/checks/runtime-runtime-identity.ts @@ -0,0 +1,69 @@ +/** One doctor row that compares the programs actually selected by each surface. */ + +import { existsSync } from 'node:fs'; +import { join } from 'node:path'; + +import { recordedHookIdentity, readRecordedHookTarget } from '../../../core/hook-target.js'; +import { + convergeIndexSchema, + diagnoseRuntimeIdentities, + runtimeAssetProblems, + runtimeIdentity, + type RuntimeIdentity, +} from '../../../core/runtime-identity.js'; +import { latestLifecycleIdentity } from '../../../mcp/lifecycle.js'; +import { check, type DoctorCheck, type DoctorContext } from '../model.js'; + +const pluginIdentity = (): RuntimeIdentity | undefined => { + const root = process.env['CLAUDE_PLUGIN_ROOT']; + if (root === undefined || root === '') return undefined; + const entry = join(root, 'dist', 'commitlore.mjs'); + try { return existsSync(entry) ? runtimeIdentity(entry) : undefined; } catch { return undefined; } +}; + +/** + * A single mismatch report, not four independent version checks. The root and + * entrypoint are compared with the version so two cache copies cannot appear + * healthy merely because their package manifests carry the same release. + */ +export const checkRuntimeIdentity = (ctx: DoctorContext): DoctorCheck => { + const cwd = ctx.opts.cwd ?? process.cwd(); + const cli = runtimeIdentity(); + const hook = recordedHookIdentity(readRecordedHookTarget(cwd), cwd) ?? undefined; + const mcp = latestLifecycleIdentity(cwd) ?? undefined; + const plugin = pluginIdentity(); + const diagnosis = diagnoseRuntimeIdentities({ cli, ...(hook === undefined ? {} : { hook }), ...(mcp === undefined ? {} : { mcp }), ...(plugin === undefined ? {} : { plugin }) }); + const identities: Array<['cli' | 'hook' | 'mcp' | 'plugin', RuntimeIdentity]> = [ + ['cli', cli], + ...(hook === undefined ? [] : [['hook', hook] as ['hook', RuntimeIdentity]]), + ...(mcp === undefined ? [] : [['mcp', mcp] as ['mcp', RuntimeIdentity]]), + ...(plugin === undefined ? [] : [['plugin', plugin] as ['plugin', RuntimeIdentity]]), + ]; + const missing = identities.flatMap(([surface, identity]) => runtimeAssetProblems(identity).map((path) => `${surface}: ${path}`)); + const schema = mcp === undefined ? undefined : convergeIndexSchema({ writer: cli, reader: mcp }); + const detail = [ + diagnosis.ok ? diagnosis.detail : diagnosis.detail, + ...(missing.length === 0 ? [] : [`capture assets missing: ${missing.join(', ')}`]), + ...(schema === undefined || schema.ok ? [] : [schema.detail]), + ].join('\n'); + const fixes = [ + diagnosis.ok ? '' : diagnosis.fix, + ...(missing.length === 0 ? [] : ['remove the stale package root named above, reinstall that host plugin, then restart its session']), + ...(schema === undefined || schema.ok ? [] : ['upgrade the MCP runtime, restart its host session, then run commitlore index --rebuild']), + ].filter(Boolean).join('\n'); + return check( + 'runtime-identity', 'runtime', 'runtime identity', + diagnosis.ok && missing.length === 0 && (schema === undefined || schema.ok) ? 'ok' : 'warn', + detail, + fixes === '' ? null : fixes, + false, + undefined, + { evidence: { + cli: JSON.stringify(cli), + hook: hook === undefined ? 'not_observed' : JSON.stringify(hook), + mcp: mcp === undefined ? 'not_observed (start an MCP session, then rerun doctor)' : JSON.stringify(mcp), + plugin: plugin === undefined ? 'not_observed' : JSON.stringify(plugin), + missing_assets: missing.join(', ') || 'none', + } }, + ); +}; diff --git a/src/commands/doctor/registry.ts b/src/commands/doctor/registry.ts index 623f673d..5b6e08c1 100644 --- a/src/commands/doctor/registry.ts +++ b/src/commands/doctor/registry.ts @@ -18,6 +18,7 @@ import { checkHistoryDepth } from './checks/history-history-depth.js'; import { checkSquashConservation } from './checks/history-squash-conservation.js'; import { checkIndex } from './checks/index-index-health.js'; import { checkRuntime } from './checks/runtime-cli-runtime.js'; +import { checkRuntimeIdentity } from './checks/runtime-runtime-identity.js'; import { checkInstallationIntegrity } from './checks/runtime-installation-integrity.js'; import { checkGit } from './checks/runtime-git-trailers.js'; import { checkPush } from './checks/transport-notes-push.js'; @@ -72,6 +73,7 @@ const selectedHookRuntimeOf = (ctx: DoctorContext): DoctorCheck | undefined => */ export const CHECK_REGISTRY: readonly CheckDefinition[] = [ { id: 'cli-runtime', title: 'cli runtime', category: 'runtime', dependencies: [], optional: false, run: (ctx) => checkRuntime(ctx) }, + { id: 'runtime-identity', title: 'runtime identity', category: 'runtime', dependencies: [], optional: false, run: (ctx) => checkRuntimeIdentity(ctx) }, { id: 'installation-integrity', title: 'installation integrity', category: 'runtime', dependencies: [], optional: false, run: (ctx) => checkInstallationIntegrity(ctx) }, { id: 'notes-refspec', title: 'notes fetch refspec', category: 'transport', dependencies: [], optional: false, run: (ctx) => checkRefspec(ctx) }, { id: 'notes-push', title: 'notes push', category: 'transport', dependencies: [], optional: false, run: (ctx) => checkPush(ctx) }, diff --git a/src/commands/hooks.ts b/src/commands/hooks.ts index cc61346b..4f7c7166 100644 --- a/src/commands/hooks.ts +++ b/src/commands/hooks.ts @@ -41,6 +41,7 @@ import { type RecordedHookTarget, classifyBinTarget, describeRecordedHookTarget, + recordedHookIdentity, readRecordedHookTarget, } from '../core/hook-target.js'; import { PACKAGE_ROOT } from '../core/paths.js'; @@ -415,9 +416,10 @@ export const uninstallHook = (input: HookInput = {}): HookResult => { }; export const hookStatus = (input: HookInput = {}): HookResult => { + const cwd = input.cwd ?? process.cwd(); let status: HookStatus; try { - status = readHookStatus(input.cwd ?? process.cwd()); + status = readHookStatus(cwd); } catch (error) { return failure(messageOf(error)); } @@ -432,11 +434,15 @@ export const hookStatus = (input: HookInput = {}): HookResult => { status.state === 'installed' && status.recordedTarget.problems.length > 0 ? ', recorded target warning — run `commitlore hooks install`' : ''; + const identity = recordedHookIdentity(status.recordedTarget, cwd); return success(status, [ `hooks dir: ${status.hooksDir}`, `${HOOK_NAME}: ${state}${targetWarning}`, ...describeRecordedHookTarget(status.recordedTarget), + ...(identity === null + ? [] + : [`hook runtime identity: ${JSON.stringify(identity)}`]), ...status.recordedTarget.problems.map((problem) => `warning: ${problem}`), ...describeChained(status), ]); diff --git a/src/commands/installer-hosts.ts b/src/commands/installer-hosts.ts index 849e8fad..034100c5 100644 --- a/src/commands/installer-hosts.ts +++ b/src/commands/installer-hosts.ts @@ -14,6 +14,8 @@ import { spawn, spawnSync, type ChildProcessWithoutNullStreams } from 'node:chil import type { Command } from 'commander'; +import { runtimeIdentity, type RuntimeIdentity } from '../core/runtime-identity.js'; + export const INSTALLER_HOSTS_SCHEMA = 'commitlore_installer_hosts.v1'; type JsonFormat = 'json-mcpServers' | 'json-mcp'; @@ -29,6 +31,8 @@ export interface HostResult { export interface HostSummary { schema: typeof INSTALLER_HOSTS_SCHEMA; + /** Identity of the installer process that performed this live probe. */ + runtimeIdentity: RuntimeIdentity; ok: boolean; hosts: HostResult[]; notDetected: string[]; @@ -299,7 +303,7 @@ export const inspectAndApplyHosts = async (options: Options): Promise host.healthy), hosts, notDetected }; + return { schema: INSTALLER_HOSTS_SCHEMA, runtimeIdentity: runtimeIdentity(), ok: hosts.every((host) => host.healthy), hosts, notDetected }; }; interface CommandOptions { wrapper: string; dataRoot: string; home: string; json?: boolean; } diff --git a/src/core/codex-plugin.ts b/src/core/codex-plugin.ts index d09ca43d..54ca51aa 100644 --- a/src/core/codex-plugin.ts +++ b/src/core/codex-plugin.ts @@ -10,6 +10,7 @@ import { homedir } from 'node:os'; import { join } from 'node:path'; import { AGENT_CONFIGS, isCodexPluginConfig, type CodexPluginConfig } from './agent-configs.js'; +import { formatRuntimeIdentity, runtimeIdentity } from './runtime-identity.js'; export interface CodexCommandResult { readonly status: number | null; @@ -346,6 +347,7 @@ export const installCodexPlugin = (options: CodexPluginOptions = {}): CodexPlugi ); } - report.push('start a new Codex session to load the CommitLore skill and MCP tools'); + report.push(`installer runtime identity: ${formatRuntimeIdentity(runtimeIdentity())}`); + report.push('start a new Codex session to load the CommitLore skill and MCP tools; the live MCP runtime identity is available from commitlore_runtime_identity'); return { exitCode: 0, report }; }; diff --git a/src/core/hook-target.ts b/src/core/hook-target.ts index c15464ab..06426f3b 100644 --- a/src/core/hook-target.ts +++ b/src/core/hook-target.ts @@ -2,7 +2,8 @@ import { lstatSync, readFileSync, realpathSync, statSync } from 'node:fs'; import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path'; import { execGit } from './git.js'; -import { PACKAGE_ROOT, findPackageRoot, packageVersion } from './paths.js'; +import { PACKAGE_ROOT } from './paths.js'; +import { runtimeIdentity, type RuntimeIdentity } from './runtime-identity.js'; export interface RecordedHookTarget { readonly bin: string; @@ -107,9 +108,7 @@ export const hasAllowedBinExtension = (path: string): boolean => classifyBinTarg */ const recordedVersion = (binPath: string): string | null => { try { - const manifest = readFileSync(join(findPackageRoot(dirname(binPath)), 'package.json'), 'utf8'); - const parsed = JSON.parse(manifest) as { version?: unknown }; - return typeof parsed.version === 'string' && parsed.version !== '' ? parsed.version : null; + return runtimeIdentity(binPath).version; } catch { // No manifest above it, unreadable, or not JSON. All three mean the same // thing to the caller: this pin's version is unknown. @@ -133,7 +132,7 @@ const recordedVersion = (binPath: string): string | null => { * green here costs a repository every fix shipped since the pin was written. */ const versionProblems = (binPath: string): string[] => { - const running = packageVersion(); + const running = runtimeIdentity().version; const pinned = recordedVersion(binPath); if (pinned === null) { @@ -149,6 +148,13 @@ const versionProblems = (binPath: string): string[] => { ]; }; +/** The same identity the pinned hook will execute, if its file is readable. */ +export const recordedHookIdentity = (target: RecordedHookTarget, cwd: string): RuntimeIdentity | null => { + if (target.bin === '') return null; + const path = resolve(cwd, target.bin); + try { return isFile(path) ? runtimeIdentity(path) : null; } catch { return null; } +}; + export const readRecordedHookTarget = (cwd: string): RecordedHookTarget => { const bin = configValue(cwd, 'commitlore.bin'); const node = configValue(cwd, 'commitlore.node'); diff --git a/src/core/runtime-identity.ts b/src/core/runtime-identity.ts new file mode 100644 index 00000000..91c4b79e --- /dev/null +++ b/src/core/runtime-identity.ts @@ -0,0 +1,106 @@ +/** + * The exact program a CommitLore surface is executing. + * + * A command name is not an identity: hooks pin a file, plugins cache a + * checkout and MCP hosts retain a process. This one value is deliberately + * built from the entry file's own package, never from the caller's cwd. + */ + +import { existsSync, readFileSync, realpathSync } from 'node:fs'; +import { dirname, join, resolve } from 'node:path'; + +import { SCHEMA_VERSION } from './index-db.js'; +import { PACKAGE_ROOT, findPackageRoot, installedPath } from './paths.js'; + +export interface RuntimeIdentity { + readonly version: string; + readonly entrypoint: string; + readonly packageRoot: string; + readonly indexSchemaVersion: number; +} + +interface RuntimeManifest { + readonly version?: unknown; + readonly commitlore?: { readonly indexSchemaVersion?: unknown }; +} + +const physicalPath = (path: string): string => { + try { return realpathSync(path); } catch { return resolve(path); } +}; + +const manifestAt = (root: string): RuntimeManifest => { + try { return JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) as RuntimeManifest; } + catch { return {}; } +}; + +/** + * Produces every part of runtime identity from one entrypoint. Passing an + * entrypoint is for a pin or an observed MCP command; omission describes this + * running installation, even when tests launched Node from somewhere else. + */ +export const runtimeIdentity = (entrypoint?: string): RuntimeIdentity => { + const entry = physicalPath(entrypoint ?? installedPath('dist', 'commitlore.mjs')); + const root = entrypoint === undefined ? PACKAGE_ROOT : findPackageRoot(dirname(entry)); + const manifest = manifestAt(root); + const schema = manifest.commitlore?.indexSchemaVersion; + return { + version: typeof manifest.version === 'string' && manifest.version !== '' ? manifest.version : '0.0.0-unknown', + entrypoint: entry, + packageRoot: physicalPath(root), + indexSchemaVersion: typeof schema === 'number' && Number.isInteger(schema) ? schema : SCHEMA_VERSION, + }; +}; + +/** Assets read by the capture path rather than supplied by a host. */ +const CAPTURE_ASSETS = ['spec/schema/record.schema.json'] as const; + +export const runtimeAssetProblems = (identity: RuntimeIdentity): string[] => + CAPTURE_ASSETS + .map((asset) => join(identity.packageRoot, asset)) + .filter((path) => !existsSync(path)); + +export interface IdentityDiagnosis { + readonly ok: boolean; + readonly detail: string; + readonly fix: string; +} + +const printed = (identity: RuntimeIdentity): string => + `v${identity.version}; entry ${identity.entrypoint}; root ${identity.packageRoot}; schema v${identity.indexSchemaVersion}`; + +/** One diagnosis string for every surface identity doctor collected. */ +export const diagnoseRuntimeIdentities = (identities: Partial>): IdentityDiagnosis => { + const cli = identities.cli; + if (cli === undefined) return { ok: false, detail: 'CLI runtime identity is unavailable', fix: 'run commitlore doctor from the installed CLI' }; + const mismatches = (Object.entries(identities) as Array<['cli' | 'hook' | 'mcp' | 'plugin', RuntimeIdentity | undefined]>) + .filter(([surface, identity]) => surface !== 'cli' && identity !== undefined && ( + identity.version !== cli.version || + identity.entrypoint !== cli.entrypoint || + identity.packageRoot !== cli.packageRoot || + identity.indexSchemaVersion !== cli.indexSchemaVersion + )); + if (mismatches.length === 0) return { ok: true, detail: `all observed runtimes match CLI: ${printed(cli)}`, fix: '' }; + const fixes: Record<'hook' | 'mcp' | 'plugin', string> = { + hook: 'commitlore hooks install', + mcp: 'remove the stale MCP package root named below, update its registration, then restart the host session', + plugin: 'remove and re-add the CommitLore plugin, then start a new agent session', + }; + return { + ok: false, + detail: mismatches.map(([surface, identity]) => `${surface} identity differs from CLI: ${surface} ${printed(identity!)}; CLI ${printed(cli)}`).join('\n'), + fix: mismatches.map(([surface]) => fixes[surface as 'hook' | 'mcp' | 'plugin']).join('\n'), + }; +}; + +/** Schema skew is never a steady-state scan fallback: the cache can be rebuilt. */ +export const convergeIndexSchema = ({ writer, reader }: { writer: RuntimeIdentity; reader: RuntimeIdentity }): IdentityDiagnosis => + writer.indexSchemaVersion === reader.indexSchemaVersion + ? { ok: true, detail: `index writer and reader both use schema v${writer.indexSchemaVersion}`, fix: '' } + : { + ok: false, + detail: `index writer schema v${writer.indexSchemaVersion} differs from reader schema v${reader.indexSchemaVersion}; rebuild the derived cache after upgrading the reader`, + fix: 'commitlore index --rebuild', + }; + +export const formatRuntimeIdentity = (identity: RuntimeIdentity): string => + JSON.stringify(identity); diff --git a/src/mcp/lifecycle.ts b/src/mcp/lifecycle.ts index 271bd0d2..8585955c 100644 --- a/src/mcp/lifecycle.ts +++ b/src/mcp/lifecycle.ts @@ -38,7 +38,7 @@ import { appendFileSync, mkdirSync, readFileSync, statSync, writeFileSync, write import { dirname, join, resolve } from 'node:path'; import { execGit } from '../core/git.js'; -import { packageVersion } from '../core/paths.js'; +import { formatRuntimeIdentity, runtimeIdentity, type RuntimeIdentity } from '../core/runtime-identity.js'; /** Kept small: this is a breadcrumb trail, not telemetry. */ const MAX_BYTES = 64 * 1024; @@ -125,8 +125,7 @@ export const recordServerStart = ( at: Date = new Date(), output: typeof process.stdout = process.stdout, ): LifecycleRecorder => { - const entry = process.argv[1] ?? 'unknown'; - write(cwd, `started ${stamp(at)} pid ${String(process.pid)} ${packageVersion()} ${entry}`); + write(cwd, `started ${stamp(at)} pid ${String(process.pid)} identity ${formatRuntimeIdentity(runtimeIdentity())}`); // The lower number is only a fallback. A crash after stdin closes is still a // crash, and a signal received while the client is closing is still a signal. @@ -193,6 +192,28 @@ export interface LifecycleEntry { readonly detail: string; } +/** The identity an MCP process actually recorded when it started, if it is a current-format entry. */ +export const lifecycleIdentity = (entry: LifecycleEntry): RuntimeIdentity | null => { + if (entry.kind !== 'started' || !entry.detail.startsWith('identity ')) return null; + try { + const value = JSON.parse(entry.detail.slice('identity '.length)) as Partial; + return typeof value.version === 'string' && typeof value.entrypoint === 'string' && + typeof value.packageRoot === 'string' && typeof value.indexSchemaVersion === 'number' + ? { version: value.version, entrypoint: value.entrypoint, packageRoot: value.packageRoot, indexSchemaVersion: value.indexSchemaVersion } + : null; + } catch { return null; } +}; + +/** Last live-MCP identity is the process identity, not the registration's name. */ +export const latestLifecycleIdentity = (cwd: string = process.cwd()): RuntimeIdentity | null => { + const started = readLifecycle(cwd).filter((entry) => entry.kind === 'started'); + for (const entry of started.reverse()) { + const identity = lifecycleIdentity(entry); + if (identity !== null) return identity; + } + return null; +}; + /** Parses the log. Unreadable or absent reads as empty — it is a breadcrumb trail. */ export const readLifecycle = (cwd: string = process.cwd()): LifecycleEntry[] => { try { diff --git a/src/mcp/server.ts b/src/mcp/server.ts index b5eea4b8..c2a75b1f 100644 --- a/src/mcp/server.ts +++ b/src/mcp/server.ts @@ -45,7 +45,7 @@ import { Console } from 'node:console'; import { readFileSync } from 'node:fs'; import { isAbsolute, relative, resolve, sep } from 'node:path'; -import { packageVersion as readPackageVersion } from '../core/paths.js'; +import { formatRuntimeIdentity, runtimeIdentity } from '../core/runtime-identity.js'; import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { @@ -107,6 +107,7 @@ export const BEFORE_CHANGE_TOOL = 'commitlore_before_change'; export const PREPARE_CAPTURE_TOOL = 'commitlore_prepare_capture'; export const VERIFY_CAPTURE_TOOL = 'commitlore_verify_capture'; export const STAGE_CAPTURE_TOOL = 'commitlore_stage_capture'; +export const RUNTIME_IDENTITY_TOOL = 'commitlore_runtime_identity'; /** * `commitlore://context/`. The template form uses RFC 6570 reserved @@ -137,7 +138,7 @@ const warn = (message: string): void => { */ const packageVersion = (): string => { try { - return readPackageVersion() ?? FALLBACK_VERSION; + return runtimeIdentity().version; } catch (error) { warn(`could not read the package version (${errorMessage(error)})`); return FALLBACK_VERSION; @@ -248,6 +249,12 @@ const asText = (value: unknown): CallToolResult => ({ const READS_ONLY = { readOnlyHint: true, destructiveHint: false, openWorldHint: false }; const TOOLS: readonly Tool[] = [ + { + name: RUNTIME_IDENTITY_TOOL, + description: 'Report the exact CommitLore entrypoint, package root, version and index schema this MCP server executes.', + inputSchema: { type: 'object', properties: {}, additionalProperties: false }, + annotations: { ...READS_ONLY, title: 'Report CommitLore runtime identity' }, + }, { name: QUERY_TOOL, description: @@ -519,6 +526,7 @@ export const createServer = (opts: McpServerOptions = {}): Server => { ); const handlers: Record CallToolResult> = { + [RUNTIME_IDENTITY_TOOL]: () => asText(runtimeIdentity()), [QUERY_TOOL]: (args) => { const kind = kindArg(args); return asText(contextJson(root, kind, pathArg(root, args))); diff --git a/test/__snapshots__/doctor-snapshot.test.ts.snap b/test/__snapshots__/doctor-snapshot.test.ts.snap index a68de1ed..f0473b6c 100644 --- a/test/__snapshots__/doctor-snapshot.test.ts.snap +++ b/test/__snapshots__/doctor-snapshot.test.ts.snap @@ -3,6 +3,7 @@ exports[`#462 doctor text report, pinned > pins the check set and its order independently of the rendered text 1`] = ` [ "cli-runtime", + "runtime-identity", "installation-integrity", "notes-refspec", "notes-push", @@ -23,11 +24,12 @@ exports[`#462 doctor text report, pinned > pins the check set and its order inde exports[`#462 doctor text report, pinned > renders a stable report on a repository whose hook target is missing 1`] = ` "Next action [notes-refspec]: origin does not fetch refs so records pushed by others stay invisible here — git config --add remote.origin.fetch 'refs/notes/*:refs/notes/*' -11 ok, 3 warnings, 0 failed, 2 skipped () +12 ok, 3 warnings, 0 failed, 2 skipped () 1. [warn] notes-refspec — origin does not fetch refs so records pushed by others stay invisible here (git config --add remote.origin.fetch 'refs/notes/*:refs/notes/*') 2. [warn] commit-msg-hook — a commit-msg hook exists at /.git/hooks/commit-msg but does not invoke commitlore; commitlore.bin: /cl-snap-/no-such-binary.mjs; commitlore.node: (commitlore hooks install) 3. [warn] inject-runtime — not installed in /.claude/settings.json (commitlore inject install-claude-hook) ok cli runtime — runs () +ok runtime identity — all observed runtimes match CLI: v; entry root ; schema v4 ok installation integrity — 3 shipped files are present and readable warn notes fetch refspec — origin does not fetch refs so records pushed by others stay invisible here fix: git config --add remote.origin.fetch 'refs/notes/*:refs/notes/*' @@ -50,11 +52,12 @@ skipped squash conservation — no local branch looks like the source of a squas exports[`#462 doctor text report, pinned > renders a stable report on a repository whose hook target resolves 1`] = ` "Next action [notes-refspec]: origin does not fetch refs so records pushed by others stay invisible here — git config --add remote.origin.fetch 'refs/notes/*:refs/notes/*' -11 ok, 3 warnings, 0 failed, 2 skipped () +12 ok, 3 warnings, 0 failed, 2 skipped () 1. [warn] notes-refspec — origin does not fetch refs so records pushed by others stay invisible here (git config --add remote.origin.fetch 'refs/notes/*:refs/notes/*') 2. [warn] commit-msg-hook — a commit-msg hook exists at /.git/hooks/commit-msg but does not invoke commitlore; commitlore.bin: commitlore.node: (commitlore hooks install) 3. [warn] inject-runtime — not installed in /.claude/settings.json (commitlore inject install-claude-hook) ok cli runtime — runs () +ok runtime identity — all observed runtimes match CLI: v; entry root ; schema v4 ok installation integrity — 3 shipped files are present and readable warn notes fetch refspec — origin does not fetch refs so records pushed by others stay invisible here fix: git config --add remote.origin.fetch 'refs/notes/*:refs/notes/*' @@ -78,6 +81,7 @@ skipped squash conservation — no local branch looks like the source of a squas exports[`#470 doctor text report header > keeps the per-check tail byte-identical to the pre-ticket rows 1`] = ` { "broken": "ok cli runtime — runs () +ok runtime identity — all observed runtimes match CLI: v; entry root ; schema v4 ok installation integrity — 3 shipped files are present and readable warn notes fetch refspec — origin does not fetch refs so records pushed by others stay invisible here fix: git config --add remote.origin.fetch 'refs/notes/*:refs/notes/*' @@ -97,6 +101,7 @@ ok history depth — full history is available ok index health — 3 trailers over 1 commits, current with HEAD — no FTS5 (value search falls back to LIKE) skipped squash conservation — no local branch looks like the source of a squash — nothing to check", "working": "ok cli runtime — runs () +ok runtime identity — all observed runtimes match CLI: v; entry root ; schema v4 ok installation integrity — 3 shipped files are present and readable warn notes fetch refspec — origin does not fetch refs so records pushed by others stay invisible here fix: git config --add remote.origin.fetch 'refs/notes/*:refs/notes/*' @@ -120,7 +125,7 @@ skipped squash conservation — no local branch looks like the source of a squas exports[`#470 doctor text report header > pins verbose diagnostics while the default adds no per-check lines 1`] = ` "Next action [notes-refspec]: origin does not fetch refs so records pushed by others stay invisible here — git config --add remote.origin.fetch 'refs/notes/*:refs/notes/*' -11 ok, 3 warnings, 0 failed, 2 skipped () +12 ok, 3 warnings, 0 failed, 2 skipped () 1. [warn] notes-refspec — origin does not fetch refs so records pushed by others stay invisible here (git config --add remote.origin.fetch 'refs/notes/*:refs/notes/*') 2. [warn] commit-msg-hook — a commit-msg hook exists at /.git/hooks/commit-msg but does not invoke commitlore; commitlore.bin: commitlore.node: (commitlore hooks install) 3. [warn] inject-runtime — not installed in /.claude/settings.json (commitlore inject install-claude-hook) @@ -130,6 +135,13 @@ ok cli runtime — runs () evidence.stdout_truncated: false evidence.version: durationMs: +ok runtime identity — all observed runtimes match CLI: v; entry root ; schema v4 + evidence.cli: {"version":"","entrypoint":"","packageRoot":"","indexSchemaVersion":4} + evidence.hook: {"version":"","entrypoint":"","packageRoot":"","indexSchemaVersion":4} + evidence.mcp: not_observed (start an MCP session, then rerun doctor) + evidence.missing_assets: none + evidence.plugin: not_observed + durationMs: ok installation integrity — 3 shipped files are present and readable evidence.files: package.json, spec/schema/record.schema.json, spec/SPEC.md durationMs: diff --git a/test/installer-hosts.test.ts b/test/installer-hosts.test.ts index fba176e7..121e79f6 100644 --- a/test/installer-hosts.test.ts +++ b/test/installer-hosts.test.ts @@ -22,7 +22,7 @@ afterEach(() => { interface Run { status: number | null; - summary: { schema: string; ok: boolean; hosts: Array<{ host: string; outcome: string; healthy: boolean }> }; + summary: { schema: string; runtimeIdentity: { version: string; entrypoint: string; packageRoot: string; indexSchemaVersion: number }; ok: boolean; hosts: Array<{ host: string; outcome: string; healthy: boolean }> }; } const wrapper = (root: string, name = 'commitlore'): string => { @@ -111,6 +111,7 @@ describe('installer-hosts accepts only live CommitLore registrations', () => { cursorConfig(home, { command: ours, args: ['mcp'] }); const result = run(home, ours); expect(result.status).toBe(0); + expect(result.summary.runtimeIdentity).toMatchObject({ version: '0.8.2', indexSchemaVersion: 4 }); expect(result.summary.hosts).toContainEqual(expect.objectContaining({ host: 'cursor', outcome: 'owned', healthy: true })); }); diff --git a/test/mcp.test.ts b/test/mcp.test.ts index 7ae793d4..998f28a4 100644 --- a/test/mcp.test.ts +++ b/test/mcp.test.ts @@ -529,6 +529,7 @@ describe('handshake and declarations', () => { 'commitlore_guard', 'commitlore_prepare_capture', 'commitlore_query', + 'commitlore_runtime_identity', 'commitlore_stage_capture', 'commitlore_stale', 'commitlore_verify_capture', @@ -852,6 +853,18 @@ describe('commitlore_guard', () => { }); }); + it('reports the MCP process runtime identity, not just its version', async () => { + const response = await stub.request('tools/call', { + name: 'commitlore_runtime_identity', + arguments: {}, + }); + const content = response.result?.['content'] as Array<{ text?: unknown }> | undefined; + const identity = JSON.parse(String(content?.[0]?.text ?? '')) as Record; + expect(identity).toMatchObject({ version: '0.8.2', indexSchemaVersion: 4 }); + expect(typeof identity['entrypoint']).toBe('string'); + expect(typeof identity['packageRoot']).toBe('string'); + }); + it('still enforces its own contract', async () => { const missing = await stub.request('tools/call', { name: 'commitlore_guard', diff --git a/test/runtime-identity.test.ts b/test/runtime-identity.test.ts new file mode 100644 index 00000000..942ce3a0 --- /dev/null +++ b/test/runtime-identity.test.ts @@ -0,0 +1,79 @@ +/** + * F-001: all things called "commitlore" must prove they are the same runtime, + * not merely print the same command name. + */ + +import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; + +import { afterAll, describe, expect, it } from 'vitest'; + +import { execGit } from '../src/core/git.js'; +import { runDoctor } from '../src/commands/doctor.js'; +import { createTestRepo } from './git-fixtures.js'; + +const scratch: string[] = []; + +afterAll(() => { + for (const path of scratch) rmSync(path, { recursive: true, force: true }); +}); + +const install = (version: string, schema: number, assets = true): string => { + const root = mkdtempSync(join(tmpdir(), 'commitlore-runtime-identity-')); + scratch.push(root); + mkdirSync(join(root, 'dist'), { recursive: true }); + writeFileSync(join(root, 'dist', 'commitlore.mjs'), ''); + writeFileSync( + join(root, 'package.json'), + JSON.stringify({ name: 'commitlore', version, commitlore: { indexSchemaVersion: schema } }), + ); + if (assets) { + mkdirSync(join(root, 'spec', 'schema'), { recursive: true }); + writeFileSync(join(root, 'spec', 'schema', 'record.schema.json'), '{}'); + } + return root; +}; + +describe('F-001 runtime identity convergence', () => { + it('reports a hook pin whose version and package root differ from the PATH CLI', async () => { + const identity = await import('../src/core/runtime-identity.js'); + const cli = install('0.8.2', 4); + const hook = install('0.8.0', 3); + const repo = createTestRepo({ path: mkdtempSync(join(tmpdir(), 'commitlore-runtime-hook-')) }); + scratch.push(repo); + expect(execGit(['config', '--local', 'commitlore.bin', join(hook, 'dist', 'commitlore.mjs')], { cwd: repo }).code).toBe(0); + expect(execGit(['config', '--local', 'commitlore.root', hook], { cwd: repo }).code).toBe(0); + const report = runDoctor({ cwd: repo }).checks.find((check) => check.id === 'runtime-identity'); + + expect(report?.status).toBe('warn'); + expect(report?.detail).toContain('hook'); + expect(report?.detail).toContain('0.8.0'); + expect(report?.fix).toContain('commitlore hooks install'); + }); + + it('rejects an MCP package root missing the asset capture loads', async () => { + const identity = await import('../src/core/runtime-identity.js'); + const mcp = install('0.8.2', 4, false); + const observed = identity.runtimeIdentity(join(mcp, 'dist', 'commitlore.mjs')); + + expect(identity.runtimeAssetProblems(observed)).toEqual([ + join(observed.packageRoot, 'spec', 'schema', 'record.schema.json'), + ]); + }); + + it('does not leave a v4 index permanently on the full-scan path of a v3 reader', async () => { + const identity = await import('../src/core/runtime-identity.js'); + const writer = install('0.8.2', 4); + const reader = install('0.8.0', 3); + const report = identity.convergeIndexSchema({ + writer: identity.runtimeIdentity(join(writer, 'dist', 'commitlore.mjs')), + reader: identity.runtimeIdentity(join(reader, 'dist', 'commitlore.mjs')), + }); + + expect(report.ok).toBe(false); + expect(report.fix).toBe('commitlore index --rebuild'); + expect(report.detail).toContain('writer schema v4'); + expect(report.detail).toContain('reader schema v3'); + }); +}); From 49b9d853a17c8a64d2f9b07db2e3512388732af6 Mon Sep 17 00:00:00 2001 From: MongLong0214 Date: Fri, 14 Aug 2026 11:56:16 +0900 Subject: [PATCH 2/3] Treat two entrypoints in one install as one runtime Two shipped entrypoints under one package root are the same runtime. A warning on a correct installation stops the identity check being believed when it matters. This narrows the finding faithfully: it targets surfaces running different installs; two files inside one install are not different installs. Ruled-out: filename equality | two shipped entrypoints of one install are one runtime Blast: module Undo: easy Certainty: firm Record-Id: r-oneinstall001 Provenance: authored Verified: npx tsc --noEmit; npx vitest run test/init.test.ts; npx vitest run test/doctor.test.ts; npx vitest run test/runtime-identity.test.ts test/hooks.test.ts test/index-db.test.ts; npx vitest run test/doctor.test.ts test/init.test.ts; docker linux/amd64 npm ci, build, artifact:manifest; npm ci; npm run artifact:verify --- dist/commitlore.mjs | 2 +- dist/core/runtime-identity.d.ts | 8 +++- dist/core/runtime-identity.js | 9 +++- dist/core/runtime-identity.js.map | 2 +- installer/canonical-artifact.json | 70 +++++++++++++++++++++---------- src/core/runtime-identity.ts | 9 +++- test/doctor.test.ts | 11 ++--- test/runtime-identity.test.ts | 26 ++++++++++++ 8 files changed, 102 insertions(+), 35 deletions(-) diff --git a/dist/commitlore.mjs b/dist/commitlore.mjs index 2ab8eef4..e4ecdd6e 100755 --- a/dist/commitlore.mjs +++ b/dist/commitlore.mjs @@ -18269,7 +18269,7 @@ var printed = (identity) => `v${identity.version}; entry ${identity.entrypoint}; var diagnoseRuntimeIdentities = (identities) => { const cli = identities.cli; if (cli === void 0) return { ok: false, detail: "CLI runtime identity is unavailable", fix: "run commitlore doctor from the installed CLI" }; - const mismatches = Object.entries(identities).filter(([surface, identity]) => surface !== "cli" && identity !== void 0 && (identity.version !== cli.version || identity.entrypoint !== cli.entrypoint || identity.packageRoot !== cli.packageRoot || identity.indexSchemaVersion !== cli.indexSchemaVersion)); + const mismatches = Object.entries(identities).filter(([surface, identity]) => surface !== "cli" && identity !== void 0 && (identity.version !== cli.version || identity.packageRoot !== cli.packageRoot || identity.indexSchemaVersion !== cli.indexSchemaVersion)); if (mismatches.length === 0) return { ok: true, detail: `all observed runtimes match CLI: ${printed(cli)}`, fix: "" }; const fixes = { hook: "commitlore hooks install", diff --git a/dist/core/runtime-identity.d.ts b/dist/core/runtime-identity.d.ts index 67187ac0..0f5e6894 100644 --- a/dist/core/runtime-identity.d.ts +++ b/dist/core/runtime-identity.d.ts @@ -23,7 +23,13 @@ export interface IdentityDiagnosis { readonly detail: string; readonly fix: string; } -/** One diagnosis string for every surface identity doctor collected. */ +/** + * One diagnosis string for every surface identity doctor collected. + * + * An entrypoint identifies the route into an installation and stays in the + * report, but it is not the installation boundary: the bundle and compiled + * CLI are both legitimate entrypoints under one package root. + */ export declare const diagnoseRuntimeIdentities: (identities: Partial>) => IdentityDiagnosis; /** Schema skew is never a steady-state scan fallback: the cache can be rebuilt. */ export declare const convergeIndexSchema: ({ writer, reader }: { diff --git a/dist/core/runtime-identity.js b/dist/core/runtime-identity.js index 12e74bfa..7eb800fd 100644 --- a/dist/core/runtime-identity.js +++ b/dist/core/runtime-identity.js @@ -48,14 +48,19 @@ export const runtimeAssetProblems = (identity) => CAPTURE_ASSETS .map((asset) => join(identity.packageRoot, asset)) .filter((path) => !existsSync(path)); const printed = (identity) => `v${identity.version}; entry ${identity.entrypoint}; root ${identity.packageRoot}; schema v${identity.indexSchemaVersion}`; -/** One diagnosis string for every surface identity doctor collected. */ +/** + * One diagnosis string for every surface identity doctor collected. + * + * An entrypoint identifies the route into an installation and stays in the + * report, but it is not the installation boundary: the bundle and compiled + * CLI are both legitimate entrypoints under one package root. + */ export const diagnoseRuntimeIdentities = (identities) => { const cli = identities.cli; if (cli === undefined) return { ok: false, detail: 'CLI runtime identity is unavailable', fix: 'run commitlore doctor from the installed CLI' }; const mismatches = Object.entries(identities) .filter(([surface, identity]) => surface !== 'cli' && identity !== undefined && (identity.version !== cli.version || - identity.entrypoint !== cli.entrypoint || identity.packageRoot !== cli.packageRoot || identity.indexSchemaVersion !== cli.indexSchemaVersion)); if (mismatches.length === 0) diff --git a/dist/core/runtime-identity.js.map b/dist/core/runtime-identity.js.map index 103f49dd..2feadded 100644 --- a/dist/core/runtime-identity.js.map +++ b/dist/core/runtime-identity.js.map @@ -1 +1 @@ -{"version":3,"file":"runtime-identity.js","sourceRoot":"","sources":["../../src/core/runtime-identity.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"runtime-identity.js","sourceRoot":"","sources":["../../src/core/runtime-identity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/installer/canonical-artifact.json b/installer/canonical-artifact.json index 005b05e4..bb166258 100644 --- a/installer/canonical-artifact.json +++ b/installer/canonical-artifact.json @@ -15,10 +15,10 @@ "tsconfig.json", "src" ], - "sha256": "afac2c1297498c1f15fdd0e8bd3458a320116bf2ebd6aa0173dc01c056a177ea" + "sha256": "0ea2807f160067d1abc538798a81a33b1d9d122b6762b3d7c344798fc41b4533" }, "artifact": { - "sha256": "943b331b728857cc987e6b968369c02f0889be405aa5ed86e20038b028733c5d", + "sha256": "13b8a179b182c4746c3fd8c17a836bd7666971b8a479fa1cf96c8a62e0314c2f", "files": [ { "path": "dist/cli.d.ts", @@ -26,11 +26,11 @@ }, { "path": "dist/cli.js", - "sha256": "266d24073f002fc723c72f732aeeb86186f547cb01984c790e5b3079bb267c02" + "sha256": "423e394b295326cee604419adcb7c83d7685ee966f80273b71aba980bbe253fc" }, { "path": "dist/cli.js.map", - "sha256": "2bc304be1d6b7bd673a53f6915f017a996c7329925262a363ecb4e49f5d6c09b" + "sha256": "cd50af620163af8ef14e2ad8e5ddb8fa44b0299f9cd5d504855ffc4ce2c1b3c2" }, { "path": "dist/commands/auto.d.ts", @@ -260,6 +260,18 @@ "path": "dist/commands/doctor/checks/runtime-installation-integrity.js.map", "sha256": "8cb2ce86852513f03772e4d1deda36ba1e4b41040ac2c8196af35bfe23639f95" }, + { + "path": "dist/commands/doctor/checks/runtime-runtime-identity.d.ts", + "sha256": "5a21a0fff75124c59cca2509f9f87f77496f3219507ceda4c3f1acf310b7662e" + }, + { + "path": "dist/commands/doctor/checks/runtime-runtime-identity.js", + "sha256": "a112ff27ff43ef671db1d9b75da70fb0f0b30170b3bce5c2514bfd910c761ec1" + }, + { + "path": "dist/commands/doctor/checks/runtime-runtime-identity.js.map", + "sha256": "acbe4905cc3909c1500b95bef0d5fdd9005523c4c7c05d29c8a9d1fe9b3f1baa" + }, { "path": "dist/commands/doctor/checks/transport-notes-push.d.ts", "sha256": "9b322928bfdbd46c6e2506be244f784c331932d4a6597afcacd9b6363249d23c" @@ -302,11 +314,11 @@ }, { "path": "dist/commands/doctor/registry.js", - "sha256": "ab39808823e69a14f0106fdcff666e4912d0cf209444b28d90972f4c9b2e1130" + "sha256": "33674dd3740418a56ffaacc79dcc14a35c46b3c727f2e198ad17d1aca5b57b35" }, { "path": "dist/commands/doctor/registry.js.map", - "sha256": "6cbae59d1dd8689c2fcab97e96efb4966be502cc6e56cd6531210f1fbd98cd46" + "sha256": "4b1e930d15ea80953a9ade52d2c651bc1f601e8f345a378c81e52a3b3d6af0b5" }, { "path": "dist/commands/doctor/render.d.ts", @@ -398,11 +410,11 @@ }, { "path": "dist/commands/hooks.js", - "sha256": "61cf49c775021b4f706abb3eaac4e3a2a4ef1865f13758633ee8a348ec80203c" + "sha256": "f1e6949ac22cb49141097c983f0f504f60fedefa124081f5c41a8c0e1d660700" }, { "path": "dist/commands/hooks.js.map", - "sha256": "36099f7ea7a29a2f9bf633da5dac3c5a23f8a09d6fad0955dcb5a73133223400" + "sha256": "0ca509eb36885aeb79b41e7a4cb32aacbef3d79551b7fe172dab571dda19eb15" }, { "path": "dist/commands/index-cmd.d.ts", @@ -442,15 +454,15 @@ }, { "path": "dist/commands/installer-hosts.d.ts", - "sha256": "4646755bf35e75696aa2e5f6a4ef116fd6cead1bb28c5f7d19dff19960eee8f0" + "sha256": "9a0cd789d71aaf614bfe43489bbe26fd3a94de52a423c57964aad473a4a9decc" }, { "path": "dist/commands/installer-hosts.js", - "sha256": "a114d37ec80bb6ae61e8d2803d9d1a5bed481bd7d496a936a30392aac3d57108" + "sha256": "aed67cb5fe1093df3e6ee0a745bf27b1fa901bb25a8bc7a34d1e3a0da52c5d13" }, { "path": "dist/commands/installer-hosts.js.map", - "sha256": "fe8602180869cfa854dc5e31a5e69b3e8526c4a1b4bd7e4445e6a4099ad5c597" + "sha256": "3e2d4f7712e25def2499e36c761093cf71b58c992ea4ebeadb8c885cd3d5f9df" }, { "path": "dist/commands/mcp.d.ts", @@ -562,7 +574,7 @@ }, { "path": "dist/commitlore.mjs", - "sha256": "205f65e968031c09f1cb7e2d9beba1a4052fc97a5f45632d80230182ed4cc623" + "sha256": "c19b4c0ec287ec1b6a10eb54ea417a146e8b009cf6f912e1a6eeff27d4c5a1cf" }, { "path": "dist/core/agent-configs.d.ts", @@ -690,11 +702,11 @@ }, { "path": "dist/core/codex-plugin.js", - "sha256": "ccab26a15eb06df3dc16d3c53e932fb6fb43f4ec0365a86ef183e8e6fff50663" + "sha256": "c6c3f9319c0e6cc4be25eda342be81e6ac8b69ccc988debfe840fae0439a658c" }, { "path": "dist/core/codex-plugin.js.map", - "sha256": "680bac4b1a0199e71f0cf46aac353805c2d2f12e4ab26a6f0325814109bc82db" + "sha256": "2039f519f50297055fe861bd77274023c93333d8ffa2cbc6bc2218298a089fb4" }, { "path": "dist/core/git.d.ts", @@ -770,15 +782,15 @@ }, { "path": "dist/core/hook-target.d.ts", - "sha256": "bf50e9021e067b4e5c6f8d1eacc135f624aac7d915c085acbbb2600506a288c4" + "sha256": "0877670d2c1e9b4ea00255098a8902ba9e423803aa68bf48926d063b931d16ab" }, { "path": "dist/core/hook-target.js", - "sha256": "793de26456f985e1004667ba9e16c0bc17ff5b83cb877ec752be0cf931d22728" + "sha256": "5c536b502e3b89b81dac700ca669f1d7060021c27bfd7276bc9618c89d728392" }, { "path": "dist/core/hook-target.js.map", - "sha256": "7ba0699a7ed2e0ddd802f418bf9d6a77e1b02cfd073065291cf920e94307a5d5" + "sha256": "13dd1d0a3511f7cdf1e52c63575191e5b7bea04e1d8fab6a0798680dc775978e" }, { "path": "dist/core/index-db.d.ts", @@ -876,6 +888,18 @@ "path": "dist/core/query.js.map", "sha256": "c36dcaae2da27d0514da8900c3e9334069ae8a9345c8d060acc7363c505a025f" }, + { + "path": "dist/core/runtime-identity.d.ts", + "sha256": "0f69891688dc23dc9652a57ac477ed0d6dfe25a74927b09a797cd4422c448beb" + }, + { + "path": "dist/core/runtime-identity.js", + "sha256": "158f4ea918594c0f95a91977bd3614ec9956706021fea1f00aa0e3ce1ebb0b59" + }, + { + "path": "dist/core/runtime-identity.js.map", + "sha256": "61ac12c45dbbb578c08b38fb591fad85092c3431e5a6f23933b5ddd5582b3e99" + }, { "path": "dist/core/schema.d.ts", "sha256": "fa6e30c3c26a1e441d843ae186d379733dd6682ba325fcf89944f02552b8d4f9" @@ -1070,15 +1094,15 @@ }, { "path": "dist/mcp/lifecycle.d.ts", - "sha256": "928450486b19cc369590c1ac51ca475bf1adeaea6f0a92c9e4f0f5e08490650f" + "sha256": "9381352e3ace652c2e258cdc6283229cb2d719cb4f42b4425d3605cf5e35aa16" }, { "path": "dist/mcp/lifecycle.js", - "sha256": "80ddd38628ed4499d33d69fcb2103ea4bd49b61c551b26eb9801bdff8095aa59" + "sha256": "ced7be169ac602a79721357b42fc3b13cc75be3025e61ebcc65a33affa96bcc0" }, { "path": "dist/mcp/lifecycle.js.map", - "sha256": "03fe124fe23570bcb73633c8a6574bfd435b87ac533c1b6950f46aad32d78f38" + "sha256": "b78e6846f7ab5f65a2bbe7010605efc306f0b016c0a7a1967f7dfb3aab2215cb" }, { "path": "dist/mcp/main.d.ts", @@ -1094,15 +1118,15 @@ }, { "path": "dist/mcp/server.d.ts", - "sha256": "2ecae53465a5041eba07da3960652d5610a385b3e82e5a14c62a12a616a47fdf" + "sha256": "bbcd8996ccddb21b48315332897df68848c1ec0c4e5aef6a74a6680b9d368ed0" }, { "path": "dist/mcp/server.js", - "sha256": "58d4930db69411cd04a2ae496aed07ef62cb5602dfabb85bc3e2529dea4c39a0" + "sha256": "1339a183f1fad0b721123681175fd15c0f3900e4b4d242ec71f6a1226f180301" }, { "path": "dist/mcp/server.js.map", - "sha256": "58b1e27e12261aaf43d6767c28cec0b77c7cc86a98e4614f17af3249c1bdbf9d" + "sha256": "42bd5f37121d41a32102b778e9e858a262c0f4a85a53e378d8b1a392635e9563" }, { "path": "dist/mcp/validate-args.d.ts", diff --git a/src/core/runtime-identity.ts b/src/core/runtime-identity.ts index 91c4b79e..13b817b3 100644 --- a/src/core/runtime-identity.ts +++ b/src/core/runtime-identity.ts @@ -68,14 +68,19 @@ export interface IdentityDiagnosis { const printed = (identity: RuntimeIdentity): string => `v${identity.version}; entry ${identity.entrypoint}; root ${identity.packageRoot}; schema v${identity.indexSchemaVersion}`; -/** One diagnosis string for every surface identity doctor collected. */ +/** + * One diagnosis string for every surface identity doctor collected. + * + * An entrypoint identifies the route into an installation and stays in the + * report, but it is not the installation boundary: the bundle and compiled + * CLI are both legitimate entrypoints under one package root. + */ export const diagnoseRuntimeIdentities = (identities: Partial>): IdentityDiagnosis => { const cli = identities.cli; if (cli === undefined) return { ok: false, detail: 'CLI runtime identity is unavailable', fix: 'run commitlore doctor from the installed CLI' }; const mismatches = (Object.entries(identities) as Array<['cli' | 'hook' | 'mcp' | 'plugin', RuntimeIdentity | undefined]>) .filter(([surface, identity]) => surface !== 'cli' && identity !== undefined && ( identity.version !== cli.version || - identity.entrypoint !== cli.entrypoint || identity.packageRoot !== cli.packageRoot || identity.indexSchemaVersion !== cli.indexSchemaVersion )); diff --git a/test/doctor.test.ts b/test/doctor.test.ts index ae25ff94..3d1df184 100644 --- a/test/doctor.test.ts +++ b/test/doctor.test.ts @@ -548,10 +548,10 @@ describe('doctor: the pinned CLI is a different version than the running one (#3 expect(check?.status).not.toBe('ok'); expect(check?.detail).toContain('version'); expect(check?.fix).toContain('hooks install'); - // 16 since installation-integrity joined the registry. The count is - // asserted so a check cannot be dropped without someone noticing; when it - // moves, it should move because a check was deliberately added or removed. - expect(report.checks).toHaveLength(16); + // 17 since runtime-identity joined the registry. The count is asserted so + // a check cannot be dropped without someone noticing; when it moves, it + // should move because a check was deliberately added or removed. + expect(report.checks).toHaveLength(17); }); }); @@ -999,6 +999,7 @@ describe('doctor: report', () => { expect(report.checks.map((entry) => entry.id)).toEqual([ 'cli-runtime', + 'runtime-identity', 'installation-integrity', 'notes-refspec', 'notes-push', @@ -1050,7 +1051,7 @@ describe('doctor: report', () => { const parsed = JSON.parse(JSON.stringify(report, null, 2)) as DoctorReport; expect(parsed).toEqual(report); - expect(parsed.checks).toHaveLength(16); + expect(parsed.checks).toHaveLength(17); for (const entry of parsed.checks) { expect(entry.status).toBeTypeOf('string'); expect(entry.id).toBeTypeOf('string'); diff --git a/test/runtime-identity.test.ts b/test/runtime-identity.test.ts index 942ce3a0..190261df 100644 --- a/test/runtime-identity.test.ts +++ b/test/runtime-identity.test.ts @@ -24,6 +24,7 @@ const install = (version: string, schema: number, assets = true): string => { scratch.push(root); mkdirSync(join(root, 'dist'), { recursive: true }); writeFileSync(join(root, 'dist', 'commitlore.mjs'), ''); + writeFileSync(join(root, 'dist', 'cli.js'), ''); writeFileSync( join(root, 'package.json'), JSON.stringify({ name: 'commitlore', version, commitlore: { indexSchemaVersion: schema } }), @@ -36,6 +37,31 @@ const install = (version: string, schema: number, assets = true): string => { }; describe('F-001 runtime identity convergence', () => { + it('converges two entrypoints from one installation', async () => { + const identity = await import('../src/core/runtime-identity.js'); + const root = install('0.8.2', 4); + const report = identity.diagnoseRuntimeIdentities({ + cli: identity.runtimeIdentity(join(root, 'dist', 'commitlore.mjs')), + hook: identity.runtimeIdentity(join(root, 'dist', 'cli.js')), + }); + + expect(report.ok).toBe(true); + }); + + it('reports matching releases from different package roots', async () => { + const identity = await import('../src/core/runtime-identity.js'); + const cli = install('0.8.2', 4); + const hook = install('0.8.2', 4); + const report = identity.diagnoseRuntimeIdentities({ + cli: identity.runtimeIdentity(join(cli, 'dist', 'commitlore.mjs')), + hook: identity.runtimeIdentity(join(hook, 'dist', 'commitlore.mjs')), + }); + + expect(report.ok).toBe(false); + expect(report.detail).toContain(cli); + expect(report.detail).toContain(hook); + }); + it('reports a hook pin whose version and package root differ from the PATH CLI', async () => { const identity = await import('../src/core/runtime-identity.js'); const cli = install('0.8.2', 4); From 9e9ee738e63e8aa76f915856cd7ed926faeb972b Mon Sep 17 00:00:00 2001 From: MongLong0214 Date: Fri, 14 Aug 2026 13:49:07 +0900 Subject: [PATCH 3/3] Rebuild on the canonical builder after merging main Provenance: authored Record-Id: r-canonf001b Verified: docker linux/amd64 build and artifact:manifest; artifact:verify reports e9d85e41; 280 files in dist; 101 cases across doctor, init and runtime-identity --- dist/commitlore.mjs | 593 +++++++++++++++++++----------- dist/mcp/server.js | 12 +- dist/mcp/server.js.map | 2 +- installer/canonical-artifact.json | 70 ++-- 4 files changed, 434 insertions(+), 243 deletions(-) diff --git a/dist/commitlore.mjs b/dist/commitlore.mjs index c9fbd891..980d192a 100755 --- a/dist/commitlore.mjs +++ b/dist/commitlore.mjs @@ -2984,7 +2984,7 @@ var require_compile = __commonJS({ const schOrFunc = root.refs[ref]; if (schOrFunc) return schOrFunc; - let _sch = resolve21.call(this, root, ref); + let _sch = resolve22.call(this, root, ref); if (_sch === void 0) { const schema = (_a3 = root.localRefs) === null || _a3 === void 0 ? void 0 : _a3[ref]; const { schemaId } = this.opts; @@ -3011,7 +3011,7 @@ var require_compile = __commonJS({ function sameSchemaEnv(s1, s2) { return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId; } - function resolve21(root, ref) { + function resolve22(root, ref) { let sch; while (typeof (sch = this.refs[ref]) == "string") ref = sch; @@ -3642,7 +3642,7 @@ var require_fast_uri = __commonJS({ } return uri; } - function resolve21(baseURI, relativeURI, options) { + function resolve22(baseURI, relativeURI, options) { const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" }; const { parsed: baseParsed, malformedAuthorityOrPort: baseMalformed } = parseWithStatus(baseURI, schemelessOptions); const { parsed: relativeParsed, malformedAuthorityOrPort: relativeMalformed } = parseWithStatus(relativeURI, schemelessOptions); @@ -3926,7 +3926,7 @@ var require_fast_uri = __commonJS({ var fastUri = { SCHEMES, normalize: normalize2, - resolve: resolve21, + resolve: resolve22, resolveComponent, equal, serialize, @@ -7740,7 +7740,7 @@ var require_dist = __commonJS({ }); // src/cli.ts -import { readFileSync as readFileSync28 } from "node:fs"; +import { readFileSync as readFileSync29 } from "node:fs"; // node_modules/commander/lib/error.js var CommanderError = class extends Error { @@ -17707,7 +17707,7 @@ var register3 = (program3) => { import { execFileSync } from "node:child_process"; import { mkdtempSync, rmSync as rmSync4, writeFileSync as writeFileSync13, mkdirSync as mkdirSync9 } from "node:fs"; import { tmpdir } from "node:os"; -import { dirname as dirname7, join as join11, resolve as resolve16 } from "node:path"; +import { dirname as dirname8, join as join13, resolve as resolve17 } from "node:path"; // src/demo/fixture.ts var targetPath = "src/pricing.ts"; @@ -17744,7 +17744,7 @@ CommitLore-Version: 2.0.0 // src/commands/init.ts import { createInterface } from "node:readline"; -import { existsSync as existsSync17 } from "node:fs"; +import { existsSync as existsSync19 } from "node:fs"; // src/commands/doctor/checks/delivery-inject-runtime.ts import { resolve as resolve5 } from "node:path"; @@ -18290,12 +18290,69 @@ var checkInjectRuntime = (ctx) => { }; // src/commands/doctor/checks/capture-commit-msg-hook.ts -import { existsSync as existsSync7, readFileSync as readFileSync9 } from "node:fs"; -import { resolve as resolve7 } from "node:path"; +import { existsSync as existsSync8, readFileSync as readFileSync10 } from "node:fs"; +import { resolve as resolve8 } from "node:path"; + +// src/core/hook-target.ts +import { lstatSync, realpathSync as realpathSync2, statSync as statSync2 } from "node:fs"; +import { isAbsolute, relative, resolve as resolve7, sep } from "node:path"; + +// src/core/runtime-identity.ts +import { existsSync as existsSync7, readFileSync as readFileSync8, realpathSync } from "node:fs"; +import { dirname as dirname4, join as join4, resolve as resolve6 } from "node:path"; +var physicalPath = (path2) => { + try { + return realpathSync(path2); + } catch { + return resolve6(path2); + } +}; +var manifestAt = (root) => { + try { + return JSON.parse(readFileSync8(join4(root, "package.json"), "utf8")); + } catch { + return {}; + } +}; +var runtimeIdentity = (entrypoint) => { + const entry = physicalPath(entrypoint ?? installedPath("dist", "commitlore.mjs")); + const root = entrypoint === void 0 ? PACKAGE_ROOT : findPackageRoot(dirname4(entry)); + const manifest = manifestAt(root); + const schema = manifest.commitlore?.indexSchemaVersion; + return { + version: typeof manifest.version === "string" && manifest.version !== "" ? manifest.version : "0.0.0-unknown", + entrypoint: entry, + packageRoot: physicalPath(root), + indexSchemaVersion: typeof schema === "number" && Number.isInteger(schema) ? schema : SCHEMA_VERSION + }; +}; +var CAPTURE_ASSETS = ["spec/schema/record.schema.json"]; +var runtimeAssetProblems = (identity) => CAPTURE_ASSETS.map((asset) => join4(identity.packageRoot, asset)).filter((path2) => !existsSync7(path2)); +var printed = (identity) => `v${identity.version}; entry ${identity.entrypoint}; root ${identity.packageRoot}; schema v${identity.indexSchemaVersion}`; +var diagnoseRuntimeIdentities = (identities) => { + const cli = identities.cli; + if (cli === void 0) return { ok: false, detail: "CLI runtime identity is unavailable", fix: "run commitlore doctor from the installed CLI" }; + const mismatches = Object.entries(identities).filter(([surface, identity]) => surface !== "cli" && identity !== void 0 && (identity.version !== cli.version || identity.packageRoot !== cli.packageRoot || identity.indexSchemaVersion !== cli.indexSchemaVersion)); + if (mismatches.length === 0) return { ok: true, detail: `all observed runtimes match CLI: ${printed(cli)}`, fix: "" }; + const fixes = { + hook: "commitlore hooks install", + mcp: "remove the stale MCP package root named below, update its registration, then restart the host session", + plugin: "remove and re-add the CommitLore plugin, then start a new agent session" + }; + return { + ok: false, + detail: mismatches.map(([surface, identity]) => `${surface} identity differs from CLI: ${surface} ${printed(identity)}; CLI ${printed(cli)}`).join("\n"), + fix: mismatches.map(([surface]) => fixes[surface]).join("\n") + }; +}; +var convergeIndexSchema = ({ writer, reader }) => writer.indexSchemaVersion === reader.indexSchemaVersion ? { ok: true, detail: `index writer and reader both use schema v${writer.indexSchemaVersion}`, fix: "" } : { + ok: false, + detail: `index writer schema v${writer.indexSchemaVersion} differs from reader schema v${reader.indexSchemaVersion}; rebuild the derived cache after upgrading the reader`, + fix: "commitlore index --rebuild" +}; +var formatRuntimeIdentity = (identity) => JSON.stringify(identity); // src/core/hook-target.ts -import { lstatSync, readFileSync as readFileSync8, realpathSync, statSync as statSync2 } from "node:fs"; -import { dirname as dirname4, isAbsolute, join as join4, relative, resolve as resolve6, sep } from "node:path"; var configValue = (cwd, key) => execGit(["config", "--local", "--get", key], { cwd }).stdout.trim(); var isFile = (path2) => { try { @@ -18315,7 +18372,7 @@ var isExecutableFile = (path2) => { var trustedRoot = (cwd) => configValue(cwd, "commitlore.root") || PACKAGE_ROOT; var isInsidePackage = (root, path2) => { try { - const fromRoot = relative(realpathSync(root), realpathSync(path2)); + const fromRoot = relative(realpathSync2(root), realpathSync2(path2)); return fromRoot !== ".." && !fromRoot.startsWith(`..${sep}`) && !isAbsolute(fromRoot); } catch { return false; @@ -18331,15 +18388,13 @@ var isSymlink = (path2) => { var classifyBinTarget = (path2) => path2.endsWith(".js") || path2.endsWith(".mjs") ? "script" : null; var recordedVersion = (binPath) => { try { - const manifest = readFileSync8(join4(findPackageRoot(dirname4(binPath)), "package.json"), "utf8"); - const parsed = JSON.parse(manifest); - return typeof parsed.version === "string" && parsed.version !== "" ? parsed.version : null; + return runtimeIdentity(binPath).version; } catch { return null; } }; var versionProblems = (binPath) => { - const running = packageVersion(); + const running = runtimeIdentity().version; const pinned = recordedVersion(binPath); if (pinned === null) { return [ @@ -18351,13 +18406,22 @@ var versionProblems = (binPath) => { `commitlore.bin is version ${pinned}, but this CLI is ${running} \u2014 the hook validates every commit with ${pinned}, so anything fixed since then does not apply here` ]; }; +var recordedHookIdentity = (target, cwd) => { + if (target.bin === "") return null; + const path2 = resolve7(cwd, target.bin); + try { + return isFile(path2) ? runtimeIdentity(path2) : null; + } catch { + return null; + } +}; var readRecordedHookTarget = (cwd) => { const bin = configValue(cwd, "commitlore.bin"); const node = configValue(cwd, "commitlore.node"); const problems = []; if (bin === "") problems.push("commitlore.bin is not recorded"); else { - const binPath = resolve6(cwd, bin); + const binPath = resolve7(cwd, bin); const kind = classifyBinTarget(bin); if (kind === null) { problems.push("commitlore.bin is not a .js or .mjs file"); @@ -18373,9 +18437,9 @@ var readRecordedHookTarget = (cwd) => { } if (node === "") problems.push("commitlore.node is not recorded"); else { - const nodePath = resolve6(cwd, node); + const nodePath = resolve7(cwd, node); if (!isExecutableFile(nodePath)) problems.push("commitlore.node is not an executable file"); - else if (realpathSync(nodePath) !== realpathSync(process.execPath)) { + else if (realpathSync2(nodePath) !== realpathSync2(process.execPath)) { problems.push("commitlore.node differs from this CLI interpreter"); } } @@ -18560,7 +18624,7 @@ var checkHook = (ctx, runtime) => { { evidence: { hook_path: "unavailable", bin: "not_recorded", node: "not_recorded" } } ); } - const path2 = resolve7(opts.cwd ?? process.cwd(), located.stdout.trim()); + const path2 = resolve8(opts.cwd ?? process.cwd(), located.stdout.trim()); const target = readRecordedHookTarget(opts.cwd ?? process.cwd()); const override = env["COMMITLORE_BIN"]; const hookEvidence = { @@ -18573,7 +18637,7 @@ var checkHook = (ctx, runtime) => { ...describeRecordedHookTarget(target), ...override === void 0 || override === "" ? [] : [`COMMITLORE_BIN: ${override}`] ].join("; "); - if (!existsSync7(path2)) { + if (!existsSync8(path2)) { return check( id, category, @@ -18586,7 +18650,7 @@ var checkHook = (ctx, runtime) => { { evidence: hookEvidence } ); } - const contents = readFileSync9(path2, "utf8"); + const contents = readFileSync10(path2, "utf8"); if (!contents.includes(HOOK_MARKER)) { return check( id, @@ -18679,9 +18743,9 @@ var checkHook = (ctx, runtime) => { }; // src/commands/doctor/checks/capture-hook-runtime.ts -import { existsSync as existsSync8, rmSync as rmSync2, writeFileSync as writeFileSync5 } from "node:fs"; +import { existsSync as existsSync9, rmSync as rmSync2, writeFileSync as writeFileSync5 } from "node:fs"; import { tmpdir as tmpdirPath } from "node:os"; -import { join as join5, resolve as resolve8 } from "node:path"; +import { join as join6, resolve as resolve9 } from "node:path"; var checkHookRuntime = (ctx) => { const { opts, git: git2, spawn: spawn2, env } = ctx; const title = "hook runtime"; @@ -18709,8 +18773,8 @@ var checkHookRuntime = (ctx) => { } ); } - const hook = resolve8(cwd, located.stdout.trim()); - if (!existsSync8(hook)) { + const hook = resolve9(cwd, located.stdout.trim()); + if (!existsSync9(hook)) { return check( id, category, @@ -18723,7 +18787,7 @@ var checkHookRuntime = (ctx) => { { evidence: { hook_path: hook } } ); } - const probe = join5(tmpdirPath(), `commitlore-doctor-${String(process.pid)}.txt`); + const probe = join6(tmpdirPath(), `commitlore-doctor-${String(process.pid)}.txt`); try { writeFileSync5(probe, PROBE_MESSAGE); const run = spawn2("/bin/sh", [hook, probe], { @@ -19132,15 +19196,15 @@ var checkPendingBacklog = (ctx) => { // src/core/mcp-registration.ts import { randomBytes as randomBytes4 } from "node:crypto"; import { - existsSync as existsSync9, + existsSync as existsSync10, lstatSync as lstatSync2, - readFileSync as readFileSync10, + readFileSync as readFileSync11, renameSync as renameSync3, statSync as statSync3, unlinkSync as unlinkSync4, writeFileSync as writeFileSync6 } from "node:fs"; -import { join as join6 } from "node:path"; +import { join as join7 } from "node:path"; var MCP_REGISTRATION_FILE = ".mcp.json"; var MCP_SERVER_KEY = "commitlore"; var MCP_SERVER_COMMAND = "commitlore"; @@ -19153,7 +19217,7 @@ var registeredMcpCommand = (cwd) => { if (path2 === null) return null; let parsed; try { - parsed = JSON.parse(readFileSync10(path2, "utf8")); + parsed = JSON.parse(readFileSync11(path2, "utf8")); } catch { return null; } @@ -19175,14 +19239,14 @@ var repositoryRoot = (cwd) => { }; var mcpRegistrationPath = (cwd) => { const root = repositoryRoot(cwd); - return root === null ? null : join6(root, MCP_REGISTRATION_FILE); + return root === null ? null : join7(root, MCP_REGISTRATION_FILE); }; var registersCommitloreMcpServer = (cwd) => { const path2 = mcpRegistrationPath(cwd); if (path2 === null) return false; let parsed; try { - parsed = JSON.parse(readFileSync10(path2, "utf8")); + parsed = JSON.parse(readFileSync11(path2, "utf8")); } catch { return false; } @@ -19340,7 +19404,7 @@ var registerCommitloreMcpServer = (cwd) => { if (path2 === null) { return { ok: false, path: null, error: "no git repository found here \u2014 MCP registration needs a repository" }; } - if (!existsSync9(path2)) { + if (!existsSync10(path2)) { try { writeAtomic2(path2, freshConfig()); return { ok: true, path: path2, state: "created", changed: true }; @@ -19357,7 +19421,7 @@ var registerCommitloreMcpServer = (cwd) => { } let source; try { - source = readFileSync10(path2, "utf8"); + source = readFileSync11(path2, "utf8"); } catch (error2) { return { ok: false, path: path2, error: `${MCP_REGISTRATION_FILE} could not be read: ${messageOf4(error2)}` }; } @@ -19694,20 +19758,20 @@ var checkDirectiveTrustMode = (ctx) => { }; // src/mcp/lifecycle.ts -import { appendFileSync, mkdirSync as mkdirSync4, readFileSync as readFileSync11, statSync as statSync4, writeFileSync as writeFileSync7, writeSync } from "node:fs"; -import { dirname as dirname5, join as join7, resolve as resolve9 } from "node:path"; +import { appendFileSync, mkdirSync as mkdirSync4, readFileSync as readFileSync12, statSync as statSync4, writeFileSync as writeFileSync7, writeSync } from "node:fs"; +import { dirname as dirname6, join as join8, resolve as resolve10 } from "node:path"; var MAX_BYTES = 64 * 1024; var LIFECYCLE_FILE = "mcp-lifecycle.log"; var lifecyclePath = (cwd = process.cwd()) => { - const result = execGit(["rev-parse", "--git-path", join7("commitlore", LIFECYCLE_FILE)], { cwd }); + const result = execGit(["rev-parse", "--git-path", join8("commitlore", LIFECYCLE_FILE)], { cwd }); if (result.code !== 0) return null; const path2 = result.stdout.trim(); - return path2 === "" ? null : resolve9(cwd, path2); + return path2 === "" ? null : resolve10(cwd, path2); }; var trim = (path2) => { try { if (statSync4(path2).size <= MAX_BYTES) return; - const lines = readFileSync11(path2, "utf8").split("\n"); + const lines = readFileSync12(path2, "utf8").split("\n"); writeFileSync7(path2, `${lines.slice(Math.floor(lines.length / 2)).join("\n")}`); } catch { } @@ -19716,7 +19780,7 @@ var write = (cwd, line2) => { try { const path2 = lifecyclePath(cwd); if (path2 === null) return; - mkdirSync4(dirname5(path2), { recursive: true }); + mkdirSync4(dirname6(path2), { recursive: true }); appendFileSync(path2, `${line2} `); trim(path2); @@ -19730,8 +19794,7 @@ var errorMessage4 = (error2) => { return singleLine === "" ? "unknown error" : singleLine; }; var recordServerStart = (cwd = process.cwd(), at = /* @__PURE__ */ new Date(), output = process.stdout) => { - const entry = process.argv[1] ?? "unknown"; - write(cwd, `started ${stamp(at)} pid ${String(process.pid)} ${packageVersion()} ${entry}`); + write(cwd, `started ${stamp(at)} pid ${String(process.pid)} identity ${formatRuntimeIdentity(runtimeIdentity())}`); let reason; const note = (detail, priority) => { if (reason === void 0 || priority >= reason.priority) reason = { detail, priority }; @@ -19778,11 +19841,28 @@ var recordServerStart = (cwd = process.cwd(), at = /* @__PURE__ */ new Date(), o } return { crash }; }; +var lifecycleIdentity = (entry) => { + if (entry.kind !== "started" || !entry.detail.startsWith("identity ")) return null; + try { + const value = JSON.parse(entry.detail.slice("identity ".length)); + return typeof value.version === "string" && typeof value.entrypoint === "string" && typeof value.packageRoot === "string" && typeof value.indexSchemaVersion === "number" ? { version: value.version, entrypoint: value.entrypoint, packageRoot: value.packageRoot, indexSchemaVersion: value.indexSchemaVersion } : null; + } catch { + return null; + } +}; +var latestLifecycleIdentity = (cwd = process.cwd()) => { + const started = readLifecycle(cwd).filter((entry) => entry.kind === "started"); + for (const entry of started.reverse()) { + const identity = lifecycleIdentity(entry); + if (identity !== null) return identity; + } + return null; +}; var readLifecycle = (cwd = process.cwd()) => { try { const path2 = lifecyclePath(cwd); if (path2 === null) return []; - return readFileSync11(path2, "utf8").split("\n").flatMap((line2) => { + return readFileSync12(path2, "utf8").split("\n").flatMap((line2) => { const match = /^(started|exited)\s+(\S+)\s+pid\s+(\d+)\s*(.*)$/.exec(line2.trim()); if (match === null) return []; return [ @@ -20418,13 +20498,13 @@ var checkIndex = (ctx) => { }; // src/commands/doctor/checks/runtime-cli-runtime.ts -import { existsSync as existsSync10 } from "node:fs"; +import { existsSync as existsSync11 } from "node:fs"; var checkRuntime = (ctx) => { const title = "cli runtime"; const id = "cli-runtime"; const category = "runtime"; const candidates = ["dist/commitlore.mjs", "dist/cli.js"].map((rel) => installedPath(rel)); - const entry = candidates.find((path2) => existsSync10(path2)); + const entry = candidates.find((path2) => existsSync11(path2)); if (entry === void 0) { return check( id, @@ -20508,6 +20588,63 @@ var checkRuntime = (ctx) => { ); }; +// src/commands/doctor/checks/runtime-runtime-identity.ts +import { existsSync as existsSync12 } from "node:fs"; +import { join as join9 } from "node:path"; +var pluginIdentity = () => { + const root = process.env["CLAUDE_PLUGIN_ROOT"]; + if (root === void 0 || root === "") return void 0; + const entry = join9(root, "dist", "commitlore.mjs"); + try { + return existsSync12(entry) ? runtimeIdentity(entry) : void 0; + } catch { + return void 0; + } +}; +var checkRuntimeIdentity = (ctx) => { + const cwd = ctx.opts.cwd ?? process.cwd(); + const cli = runtimeIdentity(); + const hook = recordedHookIdentity(readRecordedHookTarget(cwd), cwd) ?? void 0; + const mcp = latestLifecycleIdentity(cwd) ?? void 0; + const plugin = pluginIdentity(); + const diagnosis = diagnoseRuntimeIdentities({ cli, ...hook === void 0 ? {} : { hook }, ...mcp === void 0 ? {} : { mcp }, ...plugin === void 0 ? {} : { plugin } }); + const identities = [ + ["cli", cli], + ...hook === void 0 ? [] : [["hook", hook]], + ...mcp === void 0 ? [] : [["mcp", mcp]], + ...plugin === void 0 ? [] : [["plugin", plugin]] + ]; + const missing = identities.flatMap(([surface, identity]) => runtimeAssetProblems(identity).map((path2) => `${surface}: ${path2}`)); + const schema = mcp === void 0 ? void 0 : convergeIndexSchema({ writer: cli, reader: mcp }); + const detail = [ + diagnosis.ok ? diagnosis.detail : diagnosis.detail, + ...missing.length === 0 ? [] : [`capture assets missing: ${missing.join(", ")}`], + ...schema === void 0 || schema.ok ? [] : [schema.detail] + ].join("\n"); + const fixes = [ + diagnosis.ok ? "" : diagnosis.fix, + ...missing.length === 0 ? [] : ["remove the stale package root named above, reinstall that host plugin, then restart its session"], + ...schema === void 0 || schema.ok ? [] : ["upgrade the MCP runtime, restart its host session, then run commitlore index --rebuild"] + ].filter(Boolean).join("\n"); + return check( + "runtime-identity", + "runtime", + "runtime identity", + diagnosis.ok && missing.length === 0 && (schema === void 0 || schema.ok) ? "ok" : "warn", + detail, + fixes === "" ? null : fixes, + false, + void 0, + { evidence: { + cli: JSON.stringify(cli), + hook: hook === void 0 ? "not_observed" : JSON.stringify(hook), + mcp: mcp === void 0 ? "not_observed (start an MCP session, then rerun doctor)" : JSON.stringify(mcp), + plugin: plugin === void 0 ? "not_observed" : JSON.stringify(plugin), + missing_assets: missing.join(", ") || "none" + } } + ); +}; + // src/commands/doctor/checks/runtime-installation-integrity.ts var SHIPPED_ASSETS = [ ["package.json"], @@ -20897,6 +21034,7 @@ var hookRuntimeOf = (ctx) => { var selectedHookRuntimeOf = (ctx) => ctx.selectedIds?.has("hook-runtime") === false ? void 0 : hookRuntimeOf(ctx); var CHECK_REGISTRY = [ { id: "cli-runtime", title: "cli runtime", category: "runtime", dependencies: [], optional: false, run: (ctx) => checkRuntime(ctx) }, + { id: "runtime-identity", title: "runtime identity", category: "runtime", dependencies: [], optional: false, run: (ctx) => checkRuntimeIdentity(ctx) }, { id: "installation-integrity", title: "installation integrity", category: "runtime", dependencies: [], optional: false, run: (ctx) => checkInstallationIntegrity(ctx) }, { id: "notes-refspec", title: "notes fetch refspec", category: "transport", dependencies: [], optional: false, run: (ctx) => checkRefspec(ctx) }, { id: "notes-push", title: "notes push", category: "transport", dependencies: [], optional: false, run: (ctx) => checkPush(ctx) }, @@ -20984,8 +21122,8 @@ ${formatCheckReport(report, options)}`; }; // src/commands/doctor/report.ts -import { existsSync as existsSync11, readFileSync as readFileSync12 } from "node:fs"; -import { join as join8, resolve as resolve10, sep as sep2 } from "node:path"; +import { existsSync as existsSync13, readFileSync as readFileSync13 } from "node:fs"; +import { join as join10, resolve as resolve11, sep as sep2 } from "node:path"; // src/commands/doctor/runner.ts var containedRun = (definition, ctx, dependencies) => { @@ -21092,12 +21230,12 @@ var deriveInstallSource = ({ pluginRoot = process.env["CLAUDE_PLUGIN_ROOT"] } = {}) => { if (pluginRoot !== void 0 && pluginRoot !== "") return "plugin"; - const segments = resolve10(entryPath).split(sep2); + const segments = resolve11(entryPath).split(sep2); if (segments.includes("_npx")) return "npx"; if (segments.includes("node_modules")) return "npm"; try { - const manifest = JSON.parse(readFileSync12(join8(packageRoot, "package.json"), "utf8")); - if (manifest.name === "commitlore" && existsSync11(join8(packageRoot, ".git"))) return "source"; + const manifest = JSON.parse(readFileSync13(join10(packageRoot, "package.json"), "utf8")); + if (manifest.name === "commitlore" && existsSync13(join10(packageRoot, ".git"))) return "source"; } catch { } return "unknown"; @@ -21163,21 +21301,21 @@ var register5 = (program3) => { import { randomBytes as randomBytes8 } from "node:crypto"; import { chmodSync as chmodSync4, - existsSync as existsSync15, + existsSync as existsSync17, mkdirSync as mkdirSync8, - readFileSync as readFileSync16, - realpathSync as realpathSync2, + readFileSync as readFileSync17, + realpathSync as realpathSync3, renameSync as renameSync7, statSync as statSync5, unlinkSync as unlinkSync5, writeFileSync as writeFileSync11 } from "node:fs"; -import { join as join9, resolve as resolve14 } from "node:path"; +import { join as join11, resolve as resolve15 } from "node:path"; // src/hooks/post-commit.ts import { createHash as createHash5, randomBytes as randomBytes5 } from "node:crypto"; -import { chmodSync, existsSync as existsSync12, mkdirSync as mkdirSync5, readFileSync as readFileSync13, readdirSync as readdirSync3, renameSync as renameSync4, writeFileSync as writeFileSync8 } from "node:fs"; -import { resolve as resolve11 } from "node:path"; +import { chmodSync, existsSync as existsSync14, mkdirSync as mkdirSync5, readFileSync as readFileSync14, readdirSync as readdirSync3, renameSync as renameSync4, writeFileSync as writeFileSync8 } from "node:fs"; +import { resolve as resolve12 } from "node:path"; // src/hooks/capture-fail-open.ts var captureHookFailOpen = (label, error2) => { @@ -21207,14 +21345,14 @@ var installPostCommitHook = (cwd = process.cwd()) => { try { const result = execGit(["rev-parse", "--git-path", `hooks/${POST_COMMIT_HOOK_NAME}`], { cwd }); if (result.code !== 0) return hookFailure(result.stderr.trim() || "not a git repository"); - hookPath = resolve11(cwd, result.stdout.trim()); - mkdirSync5(resolve11(hookPath, ".."), { recursive: true }); + hookPath = resolve12(cwd, result.stdout.trim()); + mkdirSync5(resolve12(hookPath, ".."), { recursive: true }); } catch (error2) { return hookFailure(error2 instanceof Error ? error2.message : String(error2)); } try { - if (existsSync12(hookPath)) { - const current = readFileSync13(hookPath, "utf8"); + if (existsSync14(hookPath)) { + const current = readFileSync14(hookPath, "utf8"); if (!current.includes(POST_COMMIT_HOOK_MARKER)) { return hookFailure(`${hookPath} is not a commitlore hook \u2014 left in place`); } @@ -21235,11 +21373,11 @@ var installPostCommitHook = (cwd = process.cwd()) => { var resolvePendingDir2 = (cwd) => { const result = execGit(["rev-parse", "--git-path", "commitlore/pending"], { cwd }); if (result.code !== 0) return null; - return resolve11(cwd, result.stdout.trim()); + return resolve12(cwd, result.stdout.trim()); }; var readPendingFile = (filePath) => { try { - const content = readFileSync13(filePath, "utf8"); + const content = readFileSync14(filePath, "utf8"); const parsed = JSON.parse(content); if (parsed["version"] !== 1) return null; return parsed; @@ -21286,7 +21424,7 @@ var isAmendedBase = (baseHead, firstParent, cwd) => { }; var runPostCommitFinaliser = (cwd) => { const pendingDirPath = resolvePendingDir2(cwd); - if (!pendingDirPath || !existsSync12(pendingDirPath)) return; + if (!pendingDirPath || !existsSync14(pendingDirPath)) return; let files; try { files = readdirSync3(pendingDirPath).filter((f) => f.endsWith(".json")).sort(); @@ -21306,7 +21444,7 @@ var runPostCommitFinaliser = (cwd) => { if (msgResult.code !== 0) return; const commitMessage = msgResult.stdout; for (const file of files) { - const filePath = resolve11(pendingDirPath, file); + const filePath = resolve12(pendingDirPath, file); const pending = readPendingFile(filePath); if (!pending) continue; if (pending.phase !== "applied") continue; @@ -21337,8 +21475,8 @@ var register6 = (program3) => { // src/hooks/pre-push.ts import { randomBytes as randomBytes6 } from "node:crypto"; -import { chmodSync as chmodSync2, existsSync as existsSync13, mkdirSync as mkdirSync6, readFileSync as readFileSync14, renameSync as renameSync5, writeFileSync as writeFileSync9 } from "node:fs"; -import { resolve as resolve12 } from "node:path"; +import { chmodSync as chmodSync2, existsSync as existsSync15, mkdirSync as mkdirSync6, readFileSync as readFileSync15, renameSync as renameSync5, writeFileSync as writeFileSync9 } from "node:fs"; +import { resolve as resolve13 } from "node:path"; // src/core/sync.ts var gitOptions4 = (opts) => opts.cwd === void 0 ? {} : { cwd: opts.cwd }; @@ -21448,14 +21586,14 @@ var installPrePushHook = (cwd = process.cwd()) => { try { const result = execGit(["rev-parse", "--git-path", `hooks/${PRE_PUSH_HOOK_NAME}`], { cwd }); if (result.code !== 0) return hookFailure2(result.stderr.trim() || "not a git repository"); - hookPath = resolve12(cwd, result.stdout.trim()); - mkdirSync6(resolve12(hookPath, ".."), { recursive: true }); + hookPath = resolve13(cwd, result.stdout.trim()); + mkdirSync6(resolve13(hookPath, ".."), { recursive: true }); } catch (error2) { return hookFailure2(error2 instanceof Error ? error2.message : String(error2)); } try { - if (existsSync13(hookPath)) { - const current = readFileSync14(hookPath, "utf8"); + if (existsSync15(hookPath)) { + const current = readFileSync15(hookPath, "utf8"); if (!current.includes(PRE_PUSH_HOOK_MARKER)) { return hookFailure2(`${hookPath} is not a commitlore hook \u2014 left in place`); } @@ -21505,8 +21643,8 @@ var register7 = (program3) => { // src/hooks/prepare-commit-msg.ts import { createHash as createHash6, randomBytes as randomBytes7 } from "node:crypto"; -import { chmodSync as chmodSync3, existsSync as existsSync14, mkdirSync as mkdirSync7, readFileSync as readFileSync15, readdirSync as readdirSync4, renameSync as renameSync6, writeFileSync as writeFileSync10 } from "node:fs"; -import { resolve as resolve13 } from "node:path"; +import { chmodSync as chmodSync3, existsSync as existsSync16, mkdirSync as mkdirSync7, readFileSync as readFileSync16, readdirSync as readdirSync4, renameSync as renameSync6, writeFileSync as writeFileSync10 } from "node:fs"; +import { resolve as resolve14 } from "node:path"; var PREPARE_COMMIT_MSG_HOOK_MARKER = "# commitlore:prepare-commit-msg:v1"; var PREPARE_COMMIT_MSG_HOOK_NAME = "prepare-commit-msg"; var PREPARE_COMMIT_MSG_CHAINED_HOOK_NAME = `${PREPARE_COMMIT_MSG_HOOK_NAME}${CHAINED_SUFFIX}`; @@ -21516,7 +21654,7 @@ var isRecordBlock = (trailers) => trailers.some((trailer) => RECORD_KEYS.has(tra var squashMessagePath = (cwd) => { const result = execGit(["rev-parse", "--git-path", "SQUASH_MSG"], { cwd }); if (result.code !== 0) return null; - return resolve13(cwd, result.stdout.trim()); + return resolve14(cwd, result.stdout.trim()); }; var squashCommitIds = (message) => { const ids = []; @@ -21540,10 +21678,10 @@ var recordsFromSquashMessage = (cwd, message) => { }; var preserveSquashRecords = (messageFile, cwd = process.cwd()) => { const squashPath = squashMessagePath(cwd); - if (squashPath === null || !existsSync14(squashPath)) return false; - const draft = readFileSync15(messageFile, "utf8"); + if (squashPath === null || !existsSync16(squashPath)) return false; + const draft = readFileSync16(messageFile, "utf8"); if (parseRecordBlocks(draft).some(isRecordBlock)) return false; - const blocks = recordsFromSquashMessage(cwd, readFileSync15(squashPath, "utf8")); + const blocks = recordsFromSquashMessage(cwd, readFileSync16(squashPath, "utf8")); if (blocks.length === 0) return false; const separator = draft.endsWith("\n\n") ? "" : draft.endsWith("\n") ? "\n" : "\n\n"; writeFileSync10(messageFile, `${draft}${separator}${blocks.map((block) => serializeTrailers([...block])).join("\n")}`); @@ -21552,7 +21690,7 @@ var preserveSquashRecords = (messageFile, cwd = process.cwd()) => { var prepareHookPath = (cwd) => { const result = execGit(["rev-parse", "--git-path", `hooks/${PREPARE_COMMIT_MSG_HOOK_NAME}`], { cwd }); if (result.code !== 0) throw new Error(result.stderr.trim() || "not a git repository"); - return resolve13(cwd, result.stdout.trim()); + return resolve14(cwd, result.stdout.trim()); }; var hookSuccess3 = (line2) => ({ code: 0, stdout: `${line2} `, stderr: "" }); @@ -21568,13 +21706,13 @@ var installPrepareCommitMsgHook = (cwd = process.cwd()) => { let path2; try { path2 = prepareHookPath(cwd); - mkdirSync7(resolve13(path2, ".."), { recursive: true }); + mkdirSync7(resolve14(path2, ".."), { recursive: true }); } catch (error2) { return hookFailure3(error2 instanceof Error ? error2.message : String(error2)); } try { - if (existsSync14(path2)) { - const current = readFileSync15(path2, "utf8"); + if (existsSync16(path2)) { + const current = readFileSync16(path2, "utf8"); if (!current.includes(PREPARE_COMMIT_MSG_HOOK_MARKER)) { return hookFailure3(`${path2} is not a commitlore hook \u2014 left in place`); } @@ -21593,11 +21731,11 @@ var installPrepareCommitMsgHook = (cwd = process.cwd()) => { var resolvePendingDir3 = (cwd) => { const result = execGit(["rev-parse", "--git-path", "commitlore/pending"], { cwd }); if (result.code !== 0) return null; - return resolve13(cwd, result.stdout.trim()); + return resolve14(cwd, result.stdout.trim()); }; var readPendingFile2 = (filePath) => { try { - const content = readFileSync15(filePath, "utf8"); + const content = readFileSync16(filePath, "utf8"); const parsed = JSON.parse(content); if (parsed["version"] !== 1) return null; return parsed; @@ -21646,7 +21784,7 @@ var usesTemporaryCommitIndex = (cwd) => { if (!currentIndex) return false; const gitDir = execGit(["rev-parse", "--git-dir"], { cwd }); if (gitDir.code !== 0) return false; - return resolve13(cwd, currentIndex) !== resolve13(cwd, gitDir.stdout.trim(), "index"); + return resolve14(cwd, currentIndex) !== resolve14(cwd, gitDir.stdout.trim(), "index"); }; var reportDiffMismatch = (pending, cwd) => { const label = captureLabel(pending); @@ -21663,7 +21801,7 @@ var compareCaptureCandidates = (left, right) => { }; var applyCaptureRecord = (messageFile, cwd) => { const pendingDirPath = resolvePendingDir3(cwd); - if (!pendingDirPath || !existsSync14(pendingDirPath)) return; + if (!pendingDirPath || !existsSync16(pendingDirPath)) return; let files; try { files = readdirSync4(pendingDirPath).filter((f) => f.endsWith(".json")).sort(); @@ -21681,13 +21819,13 @@ var applyCaptureRecord = (messageFile, cwd) => { const now = Date.now(); let currentMessage; try { - currentMessage = readFileSync15(messageFile, "utf8"); + currentMessage = readFileSync16(messageFile, "utf8"); } catch { return; } const eligible = []; for (const file of files) { - const filePath = resolve13(pendingDirPath, file); + const filePath = resolve14(pendingDirPath, file); const pending2 = readPendingFile2(filePath); if (!pending2) continue; if (pending2.phase !== "staged" && pending2.phase !== "applied") continue; @@ -21748,7 +21886,7 @@ var resolveHooksDir = (cwd) => { if (result.code !== 0) { throw new Error(`not a git repository (${firstLine3(result.stderr)})`); } - return resolve14(cwd, result.stdout.trim()); + return resolve15(cwd, result.stdout.trim()); }; var isExecutable = (path2) => { try { @@ -21758,10 +21896,10 @@ var isExecutable = (path2) => { } }; var readHookState = (hookPath) => { - if (!existsSync15(hookPath)) return "absent"; + if (!existsSync17(hookPath)) return "absent"; let contents; try { - contents = readFileSync16(hookPath, "utf8"); + contents = readFileSync17(hookPath, "utf8"); } catch { return "foreign"; } @@ -21770,14 +21908,14 @@ var readHookState = (hookPath) => { }; var readHookStatus = (cwd = process.cwd()) => { const hooksDir = resolveHooksDir(cwd); - const hookPath = join9(hooksDir, HOOK_NAME); - const chainedPath = join9(hooksDir, CHAINED_HOOK_NAME); + const hookPath = join11(hooksDir, HOOK_NAME); + const chainedPath = join11(hooksDir, CHAINED_HOOK_NAME); return { hooksDir, hookPath, state: readHookState(hookPath), chainedPath, - chained: existsSync15(chainedPath), + chained: existsSync17(chainedPath), chainedExecutable: isExecutable(chainedPath), recordedTarget: readRecordedHookTarget(cwd) }; @@ -21797,10 +21935,10 @@ var resolveEntryForRecord = (entry, cwd) => { return null; } }; - if (entry.includes("/")) return existingFile(resolve14(cwd, entry)); + if (entry.includes("/")) return existingFile(resolve15(cwd, entry)); for (const dir of (process.env["PATH"] ?? "").split(":")) { if (dir === "") continue; - const found = existingFile(resolve14(dir, entry)); + const found = existingFile(resolve15(dir, entry)); if (found !== null) return found; } return null; @@ -21811,7 +21949,7 @@ var recordBinPath = (cwd) => { execGit(["config", "--local", "commitlore.bin", resolvedEntry], { cwd }); execGit(["config", "--local", "commitlore.node", process.execPath], { cwd }); try { - execGit(["config", "--local", "commitlore.root", realpathSync2(PACKAGE_ROOT)], { cwd }); + execGit(["config", "--local", "commitlore.root", realpathSync3(PACKAGE_ROOT)], { cwd }); } catch { } }; @@ -21872,12 +22010,12 @@ var CAPTURE_HOOKS = [ } ]; var removeCaptureHook = (hooksDir, hook) => { - const hookPath = join9(hooksDir, hook.name); - const chainedPath = join9(hooksDir, hook.chainedName); - if (!existsSync15(hookPath)) return [`no ${hook.name} hook to remove: ${hookPath}`]; + const hookPath = join11(hooksDir, hook.name); + const chainedPath = join11(hooksDir, hook.chainedName); + if (!existsSync17(hookPath)) return [`no ${hook.name} hook to remove: ${hookPath}`]; let contents; try { - contents = readFileSync16(hookPath, "utf8"); + contents = readFileSync17(hookPath, "utf8"); } catch { return [`${hookPath} was not installed by commitlore \u2014 left in place`]; } @@ -21885,7 +22023,7 @@ var removeCaptureHook = (hooksDir, hook) => { return [`${hookPath} was not installed by commitlore \u2014 left in place`]; } unlinkSync5(hookPath); - if (!existsSync15(chainedPath)) return [`removed ${hook.name} hook: ${hookPath}`]; + if (!existsSync17(chainedPath)) return [`removed ${hook.name} hook: ${hookPath}`]; renameSync7(chainedPath, hookPath); return [`removed ${hook.name} hook: ${hookPath}`, `restored the previous hook: ${hookPath}`]; }; @@ -21925,9 +22063,10 @@ var uninstallHook = (input = {}) => { return success2(readHookStatus(cwd), lines); }; var hookStatus = (input = {}) => { + const cwd = input.cwd ?? process.cwd(); let status; try { - status = readHookStatus(input.cwd ?? process.cwd()); + status = readHookStatus(cwd); } catch (error2) { return failure3(messageOf5(error2)); } @@ -21938,10 +22077,12 @@ var hookStatus = (input = {}) => { foreign: "present, not installed by commitlore" }[status.state]; const targetWarning = status.state === "installed" && status.recordedTarget.problems.length > 0 ? ", recorded target warning \u2014 run `commitlore hooks install`" : ""; + const identity = recordedHookIdentity(status.recordedTarget, cwd); return success2(status, [ `hooks dir: ${status.hooksDir}`, `${HOOK_NAME}: ${state}${targetWarning}`, ...describeRecordedHookTarget(status.recordedTarget), + ...identity === null ? [] : [`hook runtime identity: ${JSON.stringify(identity)}`], ...status.recordedTarget.problems.map((problem) => `warning: ${problem}`), ...describeChained(status) ]); @@ -21969,19 +22110,19 @@ var register9 = (program3) => { }; // src/core/agents-guidance.ts -import { existsSync as existsSync16, readFileSync as readFileSync17, renameSync as renameSync8, rmSync as rmSync3, statSync as statSync6, writeFileSync as writeFileSync12 } from "node:fs"; -import { basename as basename2, dirname as dirname6, join as join10, resolve as resolve15 } from "node:path"; +import { existsSync as existsSync18, readFileSync as readFileSync18, renameSync as renameSync8, rmSync as rmSync3, statSync as statSync6, writeFileSync as writeFileSync12 } from "node:fs"; +import { basename as basename2, dirname as dirname7, join as join12, resolve as resolve16 } from "node:path"; import { fileURLToPath as fileURLToPath2 } from "node:url"; var AGENTS_SECTION_BEGIN = ""; var AGENTS_SECTION_END = ""; var messageOf6 = (error2) => error2 instanceof Error ? error2.message : String(error2); var shippedAgentsPath = () => { const source = fileURLToPath2(import.meta.url); - const here = dirname6(source); - return basename2(here) === "dist" ? resolve15(here, "..", "AGENTS.md") : resolve15(here, "..", "..", "AGENTS.md"); + const here = dirname7(source); + return basename2(here) === "dist" ? resolve16(here, "..", "AGENTS.md") : resolve16(here, "..", "..", "AGENTS.md"); }; var readCommitloreAgentsSection = () => { - const contents = readFileSync17(shippedAgentsPath(), "utf8"); + const contents = readFileSync18(shippedAgentsPath(), "utf8"); const start = contents.indexOf(AGENTS_SECTION_BEGIN); const end = contents.indexOf(AGENTS_SECTION_END); if (start === -1 || end === -1 || end < start) { @@ -21998,21 +22139,21 @@ var replaceFile = (path2, contents) => { renameSync8(temporary, path2); } catch (error2) { try { - if (existsSync16(temporary)) rmSync3(temporary, { force: true }); + if (existsSync18(temporary)) rmSync3(temporary, { force: true }); } catch { } throw error2; } }; var installAgentsGuidance = (cwd) => { - const path2 = join10(cwd, "AGENTS.md"); + const path2 = join12(cwd, "AGENTS.md"); let section2; try { section2 = readCommitloreAgentsSection(); } catch (error2) { return { state: "write-failed", path: path2, error: messageOf6(error2) }; } - if (!existsSync16(path2)) { + if (!existsSync18(path2)) { try { writeFileSync12(path2, section2); return { state: "created", path: path2, error: null }; @@ -22022,7 +22163,7 @@ var installAgentsGuidance = (cwd) => { } let contents; try { - contents = readFileSync17(path2, "utf8"); + contents = readFileSync18(path2, "utf8"); } catch (error2) { return { state: "write-failed", path: path2, error: messageOf6(error2) }; } @@ -22439,7 +22580,7 @@ var resolveUnattendedChoice = async (options) => { if (options.unattended === true) return "enable"; if (options.unattended === false) return "decline"; const existing = capturePolicyPath(process.cwd()); - if (existing !== null && existsSync17(existing)) return "no-answer"; + if (existing !== null && existsSync19(existing)) return "no-answer"; if (options.json !== true && process.stdin.isTTY === true && process.stdout.isTTY === true) { process.stdout.write( `Unattended capture authorises an agent host to prepare, verify and stage a record without asking. @@ -22533,18 +22674,18 @@ var runDemo = async (opts = {}) => { process.prependOnceListener("SIGINT", onSignal); process.prependOnceListener("SIGTERM", onSignal); try { - tmpDir = mkdtempSync(join11(opts.tmpRoot ?? tmpdir(), "commitlore-demo-")); - const userCwd = resolve16(opts.cwd ?? process.cwd()); - const tmpResolved = resolve16(tmpDir); + tmpDir = mkdtempSync(join13(opts.tmpRoot ?? tmpdir(), "commitlore-demo-")); + const userCwd = resolve17(opts.cwd ?? process.cwd()); + const tmpResolved = resolve17(tmpDir); if (tmpResolved === userCwd || tmpResolved.startsWith(userCwd + "/") || userCwd.startsWith(tmpResolved + "/")) { throw new Error("demo: temporary directory overlaps with user repository \u2014 aborting"); } - git(["init", "--quiet", "--template=", "--initial-branch=main", tmpDir], dirname7(tmpDir)); + git(["init", "--quiet", "--template=", "--initial-branch=main", tmpDir], dirname8(tmpDir)); git(["config", "user.name", "CommitLore Demo"], tmpDir); git(["config", "user.email", "demo@commitlore.example"], tmpDir); git(["config", "commit.gpgsign", "false"], tmpDir); - const targetFullPath = join11(tmpDir, targetPath); - mkdirSync9(dirname7(targetFullPath), { recursive: true }); + const targetFullPath = join13(tmpDir, targetPath); + mkdirSync9(dirname8(targetFullPath), { recursive: true }); writeFileSync13(targetFullPath, "export const calculatePrice = () => {};\n"); git(["add", "."], tmpDir); git(["commit", "-m", predecessorCommitMessage], tmpDir); @@ -22611,7 +22752,7 @@ var register11 = (program3) => { }; // src/commands/harvest.ts -import { readFileSync as readFileSync18, writeFileSync as writeFileSync14 } from "node:fs"; +import { readFileSync as readFileSync19, writeFileSync as writeFileSync14 } from "node:fs"; var PREFIX2 = "commitlore:"; var USAGE_EXIT_CODE = 2; var skip2 = (reason) => ({ @@ -22622,7 +22763,7 @@ var skip2 = (reason) => ({ }); var readTextFile = (path2, label) => { try { - return readFileSync18(path2, "utf8"); + return readFileSync19(path2, "utf8"); } catch (error2) { const detail = error2 instanceof Error ? error2.message : String(error2); throw new Error(`cannot read ${label}: ${detail}`); @@ -22707,7 +22848,7 @@ var register12 = (program3) => { }; // src/commands/guard.ts -import { readFileSync as readFileSync19 } from "node:fs"; +import { readFileSync as readFileSync20 } from "node:fs"; var FLAGGED_EXIT_CODE = 1; var USAGE_EXIT_CODE2 = 2; var INCOMPLETE_EXIT_CODE = 3; @@ -22715,8 +22856,8 @@ var STDIN_FD = 0; var readProposal = (raw) => { if (!raw.startsWith("@")) return raw; const path2 = raw.slice(1); - if (path2 === "-") return readFileSync19(STDIN_FD, "utf8"); - return readFileSync19(path2, "utf8"); + if (path2 === "-") return readFileSync20(STDIN_FD, "utf8"); + return readFileSync20(path2, "utf8"); }; var matchThreshold = (raw) => { if (raw === void 0) return void 0; @@ -22913,12 +23054,12 @@ var register13 = (program3) => { }; // src/commands/harvest-verify.ts -import { readFileSync as readFileSync20, writeFileSync as writeFileSync15 } from "node:fs"; +import { readFileSync as readFileSync21, writeFileSync as writeFileSync15 } from "node:fs"; var PREFIX3 = "commitlore:"; var BAD_INPUT = 2; var readTextFile2 = (path2, label) => { try { - return readFileSync20(path2, "utf8"); + return readFileSync21(path2, "utf8"); } catch (error2) { const detail = error2 instanceof Error ? error2.message : String(error2); throw new Error(`cannot read ${label}: ${detail}`); @@ -23010,12 +23151,12 @@ var register14 = (program3) => { // src/commands/hermes.ts import { spawnSync as spawnSync4 } from "node:child_process"; -import { copyFileSync, existsSync as existsSync18, mkdirSync as mkdirSync10, readFileSync as readFileSync21, renameSync as renameSync9, statSync as statSync7, writeFileSync as writeFileSync16 } from "node:fs"; +import { copyFileSync, existsSync as existsSync20, mkdirSync as mkdirSync10, readFileSync as readFileSync22, renameSync as renameSync9, statSync as statSync7, writeFileSync as writeFileSync16 } from "node:fs"; import { homedir } from "node:os"; -import { basename as basename3, dirname as dirname8, join as join12, resolve as resolve18 } from "node:path"; +import { basename as basename3, dirname as dirname9, join as join14, resolve as resolve19 } from "node:path"; // src/core/hermes-config.ts -import { relative as relative2, resolve as resolve17, sep as sep3 } from "node:path"; +import { relative as relative2, resolve as resolve18, sep as sep3 } from "node:path"; var HERMES_SERVER_KEY = "commitlore"; var splitLines = (contents) => { const lines = []; @@ -23104,8 +23245,8 @@ var skillsBlock = (skillsDir, newline) => [" external_dirs:", ` - ${yamlStri var topLevelMcpBlock = (wrapperPath, newline) => [`mcp_servers:`, mcpBlock(wrapperPath, newline)].join(newline); var topLevelSkillsBlock = (skillsDir, newline) => [`skills:`, skillsBlock(skillsDir, newline)].join(newline); var isManagedHermesSkillsDir = (value, dataRoot, installedSkillsDir) => { - if (installedSkillsDir !== void 0 && resolve17(value) === resolve17(installedSkillsDir)) return true; - const rel = relative2(resolve17(dataRoot), resolve17(value)); + if (installedSkillsDir !== void 0 && resolve18(value) === resolve18(installedSkillsDir)) return true; + const rel = relative2(resolve18(dataRoot), resolve18(value)); const parts = rel.split(sep3); return parts.length === 3 && parts[0] !== "" && parts[0] !== ".." && !parts[0]?.startsWith("..") && parts[1] === "hermes" && parts[2] === "skills"; }; @@ -23235,14 +23376,14 @@ var commandExists = (command) => { }; var backupPathFor = (configPath) => { const base = `${configPath}.commitlore-backup`; - if (!existsSync18(base)) return base; + if (!existsSync20(base)) return base; for (let index = 1; ; index += 1) { const candidate = `${base}.${index}`; - if (!existsSync18(candidate)) return candidate; + if (!existsSync20(candidate)) return candidate; } }; var atomicallyWrite = (path2, contents, mode) => { - const temporary = join12(dirname8(path2), `.${basename3(path2)}.commitlore-${process.pid}.tmp`); + const temporary = join14(dirname9(path2), `.${basename3(path2)}.commitlore-${process.pid}.tmp`); try { if (mode === void 0) writeFileSync16(temporary, contents, "utf8"); else writeFileSync16(temporary, contents, { encoding: "utf8", mode }); @@ -23283,11 +23424,11 @@ var runVerification = (report, verified) => { var runHermesInstall = (options = {}) => { const home = options.home ?? homedir(); const hermesHome = process.env["HERMES_HOME"]; - const configPath = options.configPath ?? (hermesHome === void 0 ? join12(home, ".hermes", "config.yaml") : join12(hermesHome, "config.yaml")); - const dataHome = options.dataHome ?? process.env["XDG_DATA_HOME"] ?? join12(home, ".local", "share"); - const dataRoot = options.dataRoot ?? join12(dataHome, "commitlore"); + const configPath = options.configPath ?? (hermesHome === void 0 ? join14(home, ".hermes", "config.yaml") : join14(hermesHome, "config.yaml")); + const dataHome = options.dataHome ?? process.env["XDG_DATA_HOME"] ?? join14(home, ".local", "share"); + const dataRoot = options.dataRoot ?? join14(dataHome, "commitlore"); const skillsDir = options.skillsDir ?? installedPath("hermes", "skills"); - const detected = options.detected ?? (existsSync18(dirname8(configPath)) || commandExists("hermes")); + const detected = options.detected ?? (existsSync20(dirname9(configPath)) || commandExists("hermes")); const report = []; const verified = []; if (!detected) { @@ -23298,7 +23439,7 @@ var runHermesInstall = (options = {}) => { verified }; } - if (!existsSync18(skillsDir)) { + if (!existsSync20(skillsDir)) { return { exitCode: 2, report: [`could not find the CommitLore Hermes skill bundle at ${skillsDir}`], @@ -23306,11 +23447,11 @@ var runHermesInstall = (options = {}) => { verified }; } - const wrapperPath = options.wrapperPath ?? join12(home, ".local", "bin", "commitlore"); - const before = existsSync18(configPath) ? readFileSync21(configPath, "utf8") : ""; + const wrapperPath = options.wrapperPath ?? join14(home, ".local", "bin", "commitlore"); + const before = existsSync20(configPath) ? readFileSync22(configPath, "utf8") : ""; const edit = addHermesConfig(before, { wrapperPath, - skillsDir: resolve18(skillsDir), + skillsDir: resolve19(skillsDir), dataRoot }); if (edit.blocked.length > 0) { @@ -23319,13 +23460,13 @@ var runHermesInstall = (options = {}) => { } if (edit.added.length > 0) { try { - mkdirSync10(dirname8(configPath), { recursive: true }); - if (existsSync18(configPath)) { + mkdirSync10(dirname9(configPath), { recursive: true }); + if (existsSync20(configPath)) { const backup = backupPathFor(configPath); copyFileSync(configPath, backup); report.push(`backed up: ${configPath} -> ${backup}`); } - const mode = existsSync18(configPath) ? statSync7(configPath).mode : void 0; + const mode = existsSync20(configPath) ? statSync7(configPath).mode : void 0; atomicallyWrite(configPath, edit.contents, mode); report.push(`configured: ${edit.added.join(" and ")} in ${configPath}`); } catch (error2) { @@ -23458,8 +23599,8 @@ var register16 = (program3) => { }; // src/commands/inject.ts -import { readFileSync as readFileSync22, realpathSync as realpathSync3 } from "node:fs"; -import { basename as basename4, dirname as dirname9, isAbsolute as isAbsolute2, join as join13, relative as relative3, resolve as resolve19, sep as sep4 } from "node:path"; +import { readFileSync as readFileSync23, realpathSync as realpathSync4 } from "node:fs"; +import { basename as basename4, dirname as dirname10, isAbsolute as isAbsolute2, join as join15, relative as relative3, resolve as resolve20, sep as sep4 } from "node:path"; // src/core/inject.ts import { createHash as createHash7 } from "node:crypto"; @@ -23832,7 +23973,7 @@ var MAX_PAYLOAD_PATH_LENGTH = 4096; var isPlainObject2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value); var readStdin = () => { try { - return readFileSync22(0, "utf8"); + return readFileSync23(0, "utf8"); } catch { return ""; } @@ -23855,15 +23996,15 @@ var repositoryRoot2 = (cwd) => { return result.code === 0 ? result.stdout.trim() : void 0; }; var canonical = (target) => { - const absolute = resolve19(target); + const absolute = resolve20(target); const tail = []; let current = absolute; for (; ; ) { try { - const real = realpathSync3(current); - return tail.length === 0 ? real : join13(real, ...tail); + const real = realpathSync4(current); + return tail.length === 0 ? real : join15(real, ...tail); } catch { - const parent = dirname9(current); + const parent = dirname10(current); if (parent === current) return absolute; tail.unshift(basename4(current)); current = parent; @@ -23886,7 +24027,7 @@ var payloadPath = (payload, cwd) => { } const root = repositoryRoot2(cwd); if (root === void 0) throw new Error("repository root could not be resolved"); - const target = canonical(isAbsolute2(raw) ? raw : resolve19(cwd, raw)); + const target = canonical(isAbsolute2(raw) ? raw : resolve20(cwd, raw)); const scoped = relative3(canonical(root), target); if (scoped === "") throw new Error("file_path resolves to the repository root"); if (scoped === ".." || scoped.startsWith(`..${sep4}`) || isAbsolute2(scoped)) { @@ -24024,8 +24165,8 @@ var register17 = (program3) => { }; // src/commands/installer-hosts.ts -import { accessSync, constants, existsSync as existsSync19, mkdirSync as mkdirSync11, renameSync as renameSync10, statSync as statSync8, unlinkSync as unlinkSync6, writeFileSync as writeFileSync17, readFileSync as readFileSync23 } from "node:fs"; -import { delimiter, dirname as dirname10, join as join14 } from "node:path"; +import { accessSync, constants, existsSync as existsSync21, mkdirSync as mkdirSync11, renameSync as renameSync10, statSync as statSync8, unlinkSync as unlinkSync6, writeFileSync as writeFileSync17, readFileSync as readFileSync24 } from "node:fs"; +import { delimiter, dirname as dirname11, join as join16 } from "node:path"; import { randomUUID } from "node:crypto"; import { spawn, spawnSync as spawnSync5 } from "node:child_process"; var INSTALLER_HOSTS_SCHEMA = "commitlore_installer_hosts.v1"; @@ -24049,15 +24190,15 @@ var commandOf = (format, entry) => { }; var entryFor = (format, wrapper) => format === "json-mcp" ? { type: "local", command: [wrapper, "mcp"], enabled: true } : { command: wrapper, args: ["mcp"] }; var atomicJsonWrite = (path2, value) => { - mkdirSync11(dirname10(path2), { recursive: true }); - const temporary = join14(dirname10(path2), `.${String(path2.split("/").pop())}.commitlore-${process.pid}-${randomUUID()}.tmp`); + mkdirSync11(dirname11(path2), { recursive: true }); + const temporary = join16(dirname11(path2), `.${String(path2.split("/").pop())}.commitlore-${process.pid}-${randomUUID()}.tmp`); try { writeFileSync17(temporary, `${JSON.stringify(value, null, 2)} `, { encoding: "utf8", mode: 384 }); if (process.env.COMMITLORE_INSTALLER_TEST_INTERRUPT_WRITE === "1") { throw new Error("interrupted before atomic rename"); } - JSON.parse(readFileSync23(temporary, "utf8")); + JSON.parse(readFileSync24(temporary, "utf8")); renameSync10(temporary, path2); } finally { try { @@ -24078,13 +24219,13 @@ var executable = (command) => { var probeMcp = async (command, args) => { const unusable = executable(command); if (unusable !== null) return unusable; - return new Promise((resolve21) => { + return new Promise((resolve22) => { let settled = false; const finish = (problem) => { if (settled) return; settled = true; child?.kill(); - resolve21(problem); + resolve22(problem); }; let child; try { @@ -24139,10 +24280,10 @@ var jsonHost = async (host, path2, format, wrapper) => { let config3; let existed = true; try { - config3 = JSON.parse(readFileSync23(path2, "utf8")); + config3 = JSON.parse(readFileSync24(path2, "utf8")); if (!isObject3(config3)) throw new Error("root is not an object"); } catch (error2) { - if (!existsSync19(path2)) { + if (!existsSync21(path2)) { existed = false; config3 = {}; } else { @@ -24187,9 +24328,9 @@ var tomlRegistration = (source) => { var tomlHost = async (path2, wrapper) => { let source = ""; try { - source = readFileSync23(path2, "utf8"); + source = readFileSync24(path2, "utf8"); } catch (error2) { - if (existsSync19(path2)) return { host: "codex", requested: true, outcome: "failed", healthy: false, detail: `could not read config: ${String(error2)}` }; + if (existsSync21(path2)) return { host: "codex", requested: true, outcome: "failed", healthy: false, detail: `could not read config: ${String(error2)}` }; } let existing; try { @@ -24208,12 +24349,12 @@ command = ${escaped} args = ["mcp"] `; try { - mkdirSync11(dirname10(path2), { recursive: true }); - const temporary = join14(dirname10(path2), `.${String(path2.split("/").pop())}.commitlore-${process.pid}-${randomUUID()}.tmp`); + mkdirSync11(dirname11(path2), { recursive: true }); + const temporary = join16(dirname11(path2), `.${String(path2.split("/").pop())}.commitlore-${process.pid}-${randomUUID()}.tmp`); try { writeFileSync17(temporary, next, { encoding: "utf8", mode: 384 }); if (process.env.COMMITLORE_INSTALLER_TEST_INTERRUPT_WRITE === "1") throw new Error("interrupted before atomic rename"); - tomlRegistration(readFileSync23(temporary, "utf8")); + tomlRegistration(readFileSync24(temporary, "utf8")); renameSync10(temporary, path2); } finally { try { @@ -24228,7 +24369,7 @@ args = ["mcp"] return problem === null ? { host: "codex", requested: true, outcome: "installed", healthy: true, detail: "Codex config fallback added and live-verified" } : { host: "codex", requested: true, outcome: "failed", healthy: false, detail: `Codex registration was written but is unhealthy: ${problem}` }; }; var hasCommand = (command) => (process.env.PATH ?? "").split(delimiter).some((directory) => { - const path2 = join14(directory, command); + const path2 = join16(directory, command); try { return !statSync8(path2).isDirectory(); } catch { @@ -24262,25 +24403,25 @@ var inspectAndApplyHosts = async (options) => { const home = options.home; if (hasCommand("codex")) { requested.push(cliHost("codex", options.wrapper)); - } else if (existsSync19(join14(home, ".codex"))) { - requested.push(tomlHost(join14(home, ".codex", "config.toml"), options.wrapper)); + } else if (existsSync21(join16(home, ".codex"))) { + requested.push(tomlHost(join16(home, ".codex", "config.toml"), options.wrapper)); } else notDetected.push("codex"); const candidates = [ - ["gemini-cli", join14(home, ".gemini", "settings.json"), "json-mcpServers", hasCommand("gemini") || existsSync19(join14(home, ".gemini"))], - ["cursor", join14(home, ".cursor", "mcp.json"), "json-mcpServers", hasCommand("cursor") || existsSync19(join14(home, ".cursor"))], - ["windsurf", join14(home, ".codeium", "windsurf", "mcp_config.json"), "json-mcpServers", hasCommand("windsurf") || existsSync19(join14(home, ".codeium", "windsurf"))], - ["opencode", join14(home, ".config", "opencode", "opencode.json"), "json-mcp", hasCommand("opencode") || existsSync19(join14(home, ".config", "opencode"))] + ["gemini-cli", join16(home, ".gemini", "settings.json"), "json-mcpServers", hasCommand("gemini") || existsSync21(join16(home, ".gemini"))], + ["cursor", join16(home, ".cursor", "mcp.json"), "json-mcpServers", hasCommand("cursor") || existsSync21(join16(home, ".cursor"))], + ["windsurf", join16(home, ".codeium", "windsurf", "mcp_config.json"), "json-mcpServers", hasCommand("windsurf") || existsSync21(join16(home, ".codeium", "windsurf"))], + ["opencode", join16(home, ".config", "opencode", "opencode.json"), "json-mcp", hasCommand("opencode") || existsSync21(join16(home, ".config", "opencode"))] ]; for (const [host, path2, format, present2] of candidates) { if (present2) requested.push(jsonHost(host, path2, format, options.wrapper)); else notDetected.push(host); } - if (hasCommand("hermes") || existsSync19(join14(home, ".hermes"))) { - const result = spawnSync5(options.wrapper, ["hermes", "install", "--config", join14(home, ".hermes", "config.yaml"), "--command", options.wrapper, "--data-root", options.dataRoot, "--verify"], { stdio: "ignore", shell: false, timeout: 3e4 }); + if (hasCommand("hermes") || existsSync21(join16(home, ".hermes"))) { + const result = spawnSync5(options.wrapper, ["hermes", "install", "--config", join16(home, ".hermes", "config.yaml"), "--command", options.wrapper, "--data-root", options.dataRoot, "--verify"], { stdio: "ignore", shell: false, timeout: 3e4 }); requested.push(Promise.resolve(result.status === 0 ? { host: "hermes", requested: true, outcome: "installed", healthy: true, detail: "Hermes setup verified" } : { host: "hermes", requested: true, outcome: "failed", healthy: false, detail: "Hermes setup failed" })); } else notDetected.push("hermes"); const hosts = await Promise.all(requested); - return { schema: INSTALLER_HOSTS_SCHEMA, ok: hosts.every((host) => host.healthy), hosts, notDetected }; + return { schema: INSTALLER_HOSTS_SCHEMA, runtimeIdentity: runtimeIdentity(), ok: hosts.every((host) => host.healthy), hosts, notDetected }; }; var register18 = (program3) => { program3.command("installer-hosts").description("inspect, apply, and live-verify detected CommitLore host registrations").requiredOption("--wrapper ", "the verified CommitLore wrapper path").requiredOption("--data-root ", "the CommitLore data root").requiredOption("--home ", "the target user home directory").option("--json", "emit the installer host summary as JSON").action(async (options) => { @@ -24293,7 +24434,7 @@ var register18 = (program3) => { // src/mcp/server.ts import { Console } from "node:console"; -import { isAbsolute as isAbsolute3, relative as relative4, resolve as resolve20, sep as sep5 } from "node:path"; +import { isAbsolute as isAbsolute3, relative as relative4, resolve as resolve21, sep as sep5 } from "node:path"; // node_modules/zod/v4/core/core.js var _a; @@ -31613,7 +31754,7 @@ var Protocol = class { return; } const pollInterval = task2.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1e3; - await new Promise((resolve21) => setTimeout(resolve21, pollInterval)); + await new Promise((resolve22) => setTimeout(resolve22, pollInterval)); options?.signal?.throwIfAborted(); } } catch (error2) { @@ -31630,7 +31771,7 @@ var Protocol = class { */ request(request, resultSchema, options) { const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options ?? {}; - return new Promise((resolve21, reject2) => { + return new Promise((resolve22, reject2) => { const earlyReject = (error2) => { reject2(error2); }; @@ -31708,7 +31849,7 @@ var Protocol = class { if (!parseResult.success) { reject2(parseResult.error); } else { - resolve21(parseResult.data); + resolve22(parseResult.data); } } catch (error2) { reject2(error2); @@ -31969,12 +32110,12 @@ var Protocol = class { } } catch { } - return new Promise((resolve21, reject2) => { + return new Promise((resolve22, reject2) => { if (signal.aborted) { reject2(new McpError(ErrorCode.InvalidRequest, "Request cancelled")); return; } - const timeoutId = setTimeout(resolve21, interval); + const timeoutId = setTimeout(resolve22, interval); signal.addEventListener("abort", () => { clearTimeout(timeoutId); reject2(new McpError(ErrorCode.InvalidRequest, "Request cancelled")); @@ -32844,12 +32985,12 @@ var StdioServerTransport = class { this.onclose?.(); } send(message) { - return new Promise((resolve21) => { + return new Promise((resolve22) => { const json = serializeMessage(message); if (this._stdout.write(json)) { - resolve21(); + resolve22(); } else { - this._stdout.once("drain", resolve21); + this._stdout.once("drain", resolve22); } }); } @@ -33516,6 +33657,7 @@ var BEFORE_CHANGE_TOOL = "commitlore_before_change"; var PREPARE_CAPTURE_TOOL = "commitlore_prepare_capture"; var VERIFY_CAPTURE_TOOL = "commitlore_verify_capture"; var STAGE_CAPTURE_TOOL = "commitlore_stage_capture"; +var RUNTIME_IDENTITY_TOOL = "commitlore_runtime_identity"; var CONTEXT_URI_PREFIX = "commitlore://context/"; var CONTEXT_URI_TEMPLATE = `${CONTEXT_URI_PREFIX}{+path}`; var errorMessage5 = (error2) => error2 instanceof Error ? error2.message : String(error2); @@ -33525,7 +33667,7 @@ var warn = (message) => { }; var packageVersion2 = () => { try { - return packageVersion() ?? FALLBACK_VERSION; + return runtimeIdentity().version; } catch (error2) { warn(`could not read the package version (${errorMessage5(error2)})`); return FALLBACK_VERSION; @@ -33537,7 +33679,7 @@ var resolveRepoPath = (root, raw) => { if (isAbsolute3(raw)) { throw new Error(`path must be relative to the repository root: ${raw}`); } - const resolved = resolve20(root, raw); + const resolved = resolve21(root, raw); if (resolved !== root && !resolved.startsWith(`${root}${sep5}`)) { throw new Error(`path escapes the repository root: ${raw}`); } @@ -33585,6 +33727,12 @@ var asText = (value) => ({ }); var READS_ONLY = { readOnlyHint: true, destructiveHint: false, openWorldHint: false }; var TOOLS = [ + { + name: RUNTIME_IDENTITY_TOOL, + description: "Report the exact CommitLore entrypoint, package root, version and index schema this MCP server executes.", + inputSchema: { type: "object", properties: {}, additionalProperties: false }, + annotations: { ...READS_ONLY, title: "Report CommitLore runtime identity" } + }, { name: QUERY_TOOL, description: "Active CommitLore records for a path: the constraints, ruled-out alternatives and warnings recorded in git history. Same answer as `commitlore --json`.", @@ -33761,7 +33909,7 @@ var kindArg = (args) => { }; var pathArg = (root, args) => resolveRepoPath(root, stringArg(args, "path") ?? ""); var createServer = (opts = {}) => { - const root = resolve20(opts.cwd ?? process.cwd()); + const root = resolve21(opts.cwd ?? process.cwd()); const server = new Server( { name: SERVER_NAME, version: packageVersion2() }, { @@ -33781,6 +33929,7 @@ Recording: when a change carries decision context the diff cannot show \u2014 a } ); const handlers = { + [RUNTIME_IDENTITY_TOOL]: () => asText(runtimeIdentity()), [QUERY_TOOL]: (args) => { const kind = kindArg(args); return asText(contextJson(root, kind, pathArg(root, args))); @@ -34009,9 +34158,9 @@ var register21 = (program3) => { // src/core/codex-plugin.ts import { spawnSync as spawnSync6 } from "node:child_process"; -import { existsSync as existsSync20, mkdirSync as mkdirSync12, readFileSync as readFileSync24, rmSync as rmSync5, writeFileSync as writeFileSync18 } from "node:fs"; +import { existsSync as existsSync22, mkdirSync as mkdirSync12, readFileSync as readFileSync25, rmSync as rmSync5, writeFileSync as writeFileSync18 } from "node:fs"; import { homedir as homedir2 } from "node:os"; -import { join as join15 } from "node:path"; +import { join as join17 } from "node:path"; // src/core/agent-configs.ts var AGENT_CONFIGS = [ @@ -34086,7 +34235,7 @@ var isCommitloreEntry = (format, entry, wrapperPath) => { // src/core/codex-plugin.ts var MARKER_VERSION = 1; -var defaultDataHome = () => process.platform === "win32" ? process.env["LOCALAPPDATA"] ?? join15(homedir2(), "AppData", "Local") : process.env["XDG_DATA_HOME"] ?? join15(homedir2(), ".local", "share"); +var defaultDataHome = () => process.platform === "win32" ? process.env["LOCALAPPDATA"] ?? join17(homedir2(), "AppData", "Local") : process.env["XDG_DATA_HOME"] ?? join17(homedir2(), ".local", "share"); var codexSaid = (result) => { const said = (result.stderr.trim() || result.stdout.trim()).split("\n")[0]?.trim() ?? ""; if (said === "") return []; @@ -34108,7 +34257,7 @@ var config2 = () => { }; var codexPluginSelector = (plugin = config2()) => `${plugin.plugin}@${plugin.marketplace}`; var codexPluginInstallCommand = () => "commitlore plugin install-codex"; -var codexPluginMarkerPath = (plugin = config2(), dataHome = defaultDataHome()) => join15(dataHome, ...plugin.dataRelativePath); +var codexPluginMarkerPath = (plugin = config2(), dataHome = defaultDataHome()) => join17(dataHome, ...plugin.dataRelativePath); var successful = (result) => result.status === 0 && result.error === void 0; var readMarketplaceState = (json, plugin) => { const namedInText = () => json.split("\n").some((line2) => line2.trim().startsWith(`${plugin.marketplace} `)) ? { kind: "unverifiable-present" } : { kind: "unverifiable-absent" }; @@ -34145,9 +34294,9 @@ var markerFor = (plugin) => ({ }); var readCodexPluginMarker = (plugin = config2(), dataHome = defaultDataHome()) => { const markerPath = codexPluginMarkerPath(plugin, dataHome); - if (!existsSync20(markerPath)) return null; + if (!existsSync22(markerPath)) return null; try { - const parsed = JSON.parse(readFileSync24(markerPath, "utf8")); + const parsed = JSON.parse(readFileSync25(markerPath, "utf8")); if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return null; const marker = parsed; const expected = markerFor(plugin); @@ -34161,7 +34310,7 @@ var removeCodexPluginMarker = (plugin = config2(), dataHome = defaultDataHome()) }; var writeCodexPluginMarker = (plugin, dataHome) => { const markerPath = codexPluginMarkerPath(plugin, dataHome); - mkdirSync12(join15(markerPath, ".."), { recursive: true }); + mkdirSync12(join17(markerPath, ".."), { recursive: true }); writeFileSync18(markerPath, `${JSON.stringify(markerFor(plugin), null, 2)} `); }; @@ -34251,7 +34400,8 @@ var installCodexPlugin = (options = {}) => { `Codex plugin already installed: ${codexPluginSelector(plugin)} \u2014 left as it is, and not recorded as ours` ); } - report.push("start a new Codex session to load the CommitLore skill and MCP tools"); + report.push(`installer runtime identity: ${formatRuntimeIdentity(runtimeIdentity())}`); + report.push("start a new Codex session to load the CommitLore skill and MCP tools; the live MCP runtime identity is available from commitlore_runtime_identity"); return { exitCode: 0, report }; }; @@ -34273,7 +34423,7 @@ var register22 = (program3) => { }; // src/commands/squash-preserve.ts -import { readFileSync as readFileSync25, writeFileSync as writeFileSync19 } from "node:fs"; +import { readFileSync as readFileSync26, writeFileSync as writeFileSync19 } from "node:fs"; var PREFIX4 = "commitlore:"; var USAGE = "usage: commitlore squash-preserve .. [--target ] [--message-file ] [--json] [--force]"; var SHORT_SHA = 8; @@ -34314,7 +34464,7 @@ var warningsFor = (plan) => { }; var readDraft2 = (path2) => { try { - return readFileSync25(path2, "utf8"); + return readFileSync26(path2, "utf8"); } catch (error2) { throw new Error(`cannot read ${JSON.stringify(path2)}: ${messageOf8(error2)}`); } @@ -34483,7 +34633,7 @@ var register24 = (program3) => { }; // src/commands/validate.ts -import { readFileSync as readFileSync26 } from "node:fs"; +import { readFileSync as readFileSync27 } from "node:fs"; var USAGE2 = "usage: commitlore validate [--message-file | --commit | --range ..] [--json]"; var MODE_FLAGS = { messageFile: "--message-file", @@ -34691,14 +34841,14 @@ var readRange = (range, cwd) => { }; var readMessageFile = (path2) => { try { - return readFileSync26(path2, "utf8"); + return readFileSync27(path2, "utf8"); } catch (error2) { throw new Error(`cannot read ${JSON.stringify(path2)}: ${messageOf9(error2)}`); } }; var readStdinSync = () => { try { - return readFileSync26(0, "utf8"); + return readFileSync27(0, "utf8"); } catch (error2) { throw new Error(`cannot read the commit message from stdin: ${messageOf9(error2)}`); } @@ -35011,9 +35161,9 @@ var register25 = (program3) => { // src/commands/uninstall.ts import { spawnSync as spawnSync7 } from "node:child_process"; -import { existsSync as existsSync21, readFileSync as readFileSync27, rmSync as rmSync6, writeFileSync as writeFileSync20 } from "node:fs"; +import { existsSync as existsSync23, readFileSync as readFileSync28, rmSync as rmSync6, writeFileSync as writeFileSync20 } from "node:fs"; import { homedir as homedir3 } from "node:os"; -import { join as join16 } from "node:path"; +import { join as join18 } from "node:path"; var WRAPPER_MARKER = "# commitlore:wrapper:v1"; var isRecord2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value); var withoutJsonEntry = (parsed, format, wrapper) => { @@ -35057,7 +35207,7 @@ var listCodexMcp = (command) => { var isInstalledCodexServer = (server, wrapper) => server.name === SERVER_KEY && server.transport?.type === "stdio" && server.transport.command === wrapper && Array.isArray(server.transport.args) && server.transport.args.length === 1 && server.transport.args[0] === "mcp"; var runUninstall = async (options = {}) => { const home = options.home ?? homedir3(); - const dataHome = options.dataHome ?? (process.platform === "win32" ? process.env["LOCALAPPDATA"] ?? join16(home, "AppData", "Local") : process.env["XDG_DATA_HOME"] ?? join16(home, ".local", "share")); + const dataHome = options.dataHome ?? (process.platform === "win32" ? process.env["LOCALAPPDATA"] ?? join18(home, "AppData", "Local") : process.env["XDG_DATA_HOME"] ?? join18(home, ".local", "share")); const dryRun = options.dryRun === true; const say = dryRun ? "would remove" : "removed"; const report = []; @@ -35065,11 +35215,11 @@ var runUninstall = async (options = {}) => { const kept = []; const failures = []; const runCodex = options.runCodex ?? runCodexCommand; - const wrapper = join16(home, ".local", "bin", "commitlore"); - if (existsSync21(wrapper)) { + const wrapper = join18(home, ".local", "bin", "commitlore"); + if (existsSync23(wrapper)) { let contents; try { - contents = readFileSync27(wrapper, "utf8"); + contents = readFileSync28(wrapper, "utf8"); } catch { kept.push(wrapper); failures.push(wrapper); @@ -35088,7 +35238,7 @@ var runUninstall = async (options = {}) => { let retainDataRoot = false; for (const config3 of AGENT_CONFIGS.filter(isCodexPluginConfig)) { const markerPath = codexPluginMarkerPath(config3, dataHome); - if (!existsSync21(markerPath)) continue; + if (!existsSync23(markerPath)) continue; if (readCodexPluginMarker(config3, dataHome) === null) { retainDataRoot = true; kept.push(markerPath); @@ -35125,8 +35275,8 @@ var runUninstall = async (options = {}) => { removeCodexPluginMarker(config3, dataHome); removed.push(`${selector} (Codex plugin)`); } - const dataRoot = join16(dataHome, "commitlore"); - if (existsSync21(dataRoot)) { + const dataRoot = join18(dataHome, "commitlore"); + if (existsSync23(dataRoot)) { if (retainDataRoot) { kept.push(dataRoot); report.push(`kept: ${dataRoot} \u2014 it carries a Codex-plugin marker that still needs removal`); @@ -35140,7 +35290,7 @@ var runUninstall = async (options = {}) => { const codexCommand = options.codexCommand ?? (options.home === void 0 ? "codex" : void 0); const codexList = codexCommand === void 0 ? null : listCodexMcp(codexCommand); if (codexConfig !== void 0 && codexList !== null) { - const path2 = join16(home, ...codexConfig.homeRelativePath); + const path2 = join18(home, ...codexConfig.homeRelativePath); if (codexList.state === "unavailable" || codexList.state === "invalid") { kept.push(path2); failures.push(path2); @@ -35171,11 +35321,11 @@ var runUninstall = async (options = {}) => { for (const config3 of AGENT_CONFIGS) { if (!isMcpAgentConfig(config3)) continue; if (config3.agent === "codex" && codexList !== null && codexList.state !== "absent") continue; - const path2 = join16(home, ...config3.homeRelativePath); - if (!existsSync21(path2)) continue; + const path2 = join18(home, ...config3.homeRelativePath); + if (!existsSync23(path2)) continue; let contents; try { - contents = readFileSync27(path2, "utf8"); + contents = readFileSync28(path2, "utf8"); } catch { kept.push(path2); failures.push(path2); @@ -35192,7 +35342,7 @@ var runUninstall = async (options = {}) => { } if (config3.format === "yaml-mcp_servers") { const next2 = removeHermesConfig(contents, { - wrapperPath: [wrapper, join16(dataRoot, "bin", "commitlore.cmd")], + wrapperPath: [wrapper, join18(dataRoot, "bin", "commitlore.cmd")], dataRoot, installedSkillsDir: installedPath("hermes", "skills") }); @@ -35244,11 +35394,11 @@ var registerUninstall = (program3) => { var pkg = { version: packageVersion() }; var STDIN_FD2 = 0; var readMessage = (messageFile) => { - if (messageFile !== void 0) return readFileSync28(messageFile, "utf8"); + if (messageFile !== void 0) return readFileSync29(messageFile, "utf8"); if (process.stdin.isTTY) { throw new Error("no commit message on stdin \u2014 pipe one in or pass --message-file "); } - return readFileSync28(STDIN_FD2, "utf8"); + return readFileSync29(STDIN_FD2, "utf8"); }; var recordIdOf3 = (block) => block.trailers.find((trailer) => trailer.key === "Record-Id")?.value; var recordLabel = (index, total, block) => { @@ -35297,6 +35447,15 @@ ${serializeTrailers(block.trailers)}`).join("\n") }; var program2 = new Command(); program2.name("commitlore").description("Git commit trailers as institutional memory for AI coding agents").version(pkg.version ?? "0.0.0"); +program2.command("runtime-identity").description("print the exact CommitLore runtime this command executes").option("--json", "emit the runtime identity as JSON").action((options) => { + const identity = runtimeIdentity(); + process.stdout.write(options.json === true ? `${formatRuntimeIdentity(identity)} +` : `version ${identity.version} +entrypoint ${identity.entrypoint} +package root ${identity.packageRoot} +index schema v${identity.indexSchemaVersion} +`); +}); program2.command("parse").description("Parse a commit message into its CommitLore trailers (SPEC \xA72)").option("--message-file ", "read the message from a file instead of stdin").option("--json", "emit the parsed trailers as JSON").addHelpText( "after", "\nA message carrying more than one record block (SPEC \xA72.4) prints every block, labeled own (the message's own last paragraph) or earlier (a block the grammar recovered), and flags any Record-Id declared by more than one block. A single-block message is unaffected.\nExit codes: 0 parsed (including a message with no trailers), 2 the message could not be read." diff --git a/dist/mcp/server.js b/dist/mcp/server.js index 449ab10e..6545f948 100644 --- a/dist/mcp/server.js +++ b/dist/mcp/server.js @@ -42,7 +42,7 @@ */ import { Console } from 'node:console'; import { isAbsolute, relative, resolve, sep } from 'node:path'; -import { packageVersion as readPackageVersion } from '../core/paths.js'; +import { runtimeIdentity } from '../core/runtime-identity.js'; import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListResourceTemplatesRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; @@ -78,6 +78,7 @@ export const BEFORE_CHANGE_TOOL = 'commitlore_before_change'; export const PREPARE_CAPTURE_TOOL = 'commitlore_prepare_capture'; export const VERIFY_CAPTURE_TOOL = 'commitlore_verify_capture'; export const STAGE_CAPTURE_TOOL = 'commitlore_stage_capture'; +export const RUNTIME_IDENTITY_TOOL = 'commitlore_runtime_identity'; /** * `commitlore://context/`. The template form uses RFC 6570 reserved * expansion (`{+path}`) so a client fills it with a real path rather than one @@ -97,7 +98,7 @@ const warn = (message) => { */ const packageVersion = () => { try { - return readPackageVersion() ?? FALLBACK_VERSION; + return runtimeIdentity().version; } catch (error) { warn(`could not read the package version (${errorMessage(error)})`); @@ -203,6 +204,12 @@ const asText = (value) => ({ /** Every tool here reads; none of them touches anything outside the machine. */ const READS_ONLY = { readOnlyHint: true, destructiveHint: false, openWorldHint: false }; const TOOLS = [ + { + name: RUNTIME_IDENTITY_TOOL, + description: 'Report the exact CommitLore entrypoint, package root, version and index schema this MCP server executes.', + inputSchema: { type: 'object', properties: {}, additionalProperties: false }, + annotations: { ...READS_ONLY, title: 'Report CommitLore runtime identity' }, + }, { name: QUERY_TOOL, description: 'Active CommitLore records for a path: the constraints, ruled-out alternatives and ' + @@ -447,6 +454,7 @@ export const createServer = (opts = {}) => { 'this; a rejected record is a normal outcome and never blocks the commit.', }); const handlers = { + [RUNTIME_IDENTITY_TOOL]: () => asText(runtimeIdentity()), [QUERY_TOOL]: (args) => { const kind = kindArg(args); return asText(contextJson(root, kind, pathArg(root, args))); diff --git a/dist/mcp/server.js.map b/dist/mcp/server.js.map index b8cab6cf..3ee25362 100644 --- a/dist/mcp/server.js.map +++ b/dist/mcp/server.js.map @@ -1 +1 @@ -{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/installer/canonical-artifact.json b/installer/canonical-artifact.json index dceb02b0..3f30f12e 100644 --- a/installer/canonical-artifact.json +++ b/installer/canonical-artifact.json @@ -15,10 +15,10 @@ "tsconfig.json", "src" ], - "sha256": "a57c2fcbd348d287eb7ca5a9f4c73e1f1d7f98a36dcc0acc066a57d261fcb5e8" + "sha256": "775188fd6d73fe1d4999c4310044f1663131c556b6c8687913ae3a36c2ff0820" }, "artifact": { - "sha256": "ae22e89e300d6a96d7c554db4443a7ec01acd06e76be2f5af2093350031c7a07", + "sha256": "e9d85e41d711e1e36e0befda0f5fe0fdb90cde6a255143fdf8b82cec69037cb9", "files": [ { "path": "dist/cli.d.ts", @@ -26,11 +26,11 @@ }, { "path": "dist/cli.js", - "sha256": "266d24073f002fc723c72f732aeeb86186f547cb01984c790e5b3079bb267c02" + "sha256": "423e394b295326cee604419adcb7c83d7685ee966f80273b71aba980bbe253fc" }, { "path": "dist/cli.js.map", - "sha256": "2bc304be1d6b7bd673a53f6915f017a996c7329925262a363ecb4e49f5d6c09b" + "sha256": "cd50af620163af8ef14e2ad8e5ddb8fa44b0299f9cd5d504855ffc4ce2c1b3c2" }, { "path": "dist/commands/auto.d.ts", @@ -260,6 +260,18 @@ "path": "dist/commands/doctor/checks/runtime-installation-integrity.js.map", "sha256": "8cb2ce86852513f03772e4d1deda36ba1e4b41040ac2c8196af35bfe23639f95" }, + { + "path": "dist/commands/doctor/checks/runtime-runtime-identity.d.ts", + "sha256": "5a21a0fff75124c59cca2509f9f87f77496f3219507ceda4c3f1acf310b7662e" + }, + { + "path": "dist/commands/doctor/checks/runtime-runtime-identity.js", + "sha256": "a112ff27ff43ef671db1d9b75da70fb0f0b30170b3bce5c2514bfd910c761ec1" + }, + { + "path": "dist/commands/doctor/checks/runtime-runtime-identity.js.map", + "sha256": "acbe4905cc3909c1500b95bef0d5fdd9005523c4c7c05d29c8a9d1fe9b3f1baa" + }, { "path": "dist/commands/doctor/checks/transport-notes-push.d.ts", "sha256": "9b322928bfdbd46c6e2506be244f784c331932d4a6597afcacd9b6363249d23c" @@ -302,11 +314,11 @@ }, { "path": "dist/commands/doctor/registry.js", - "sha256": "ab39808823e69a14f0106fdcff666e4912d0cf209444b28d90972f4c9b2e1130" + "sha256": "33674dd3740418a56ffaacc79dcc14a35c46b3c727f2e198ad17d1aca5b57b35" }, { "path": "dist/commands/doctor/registry.js.map", - "sha256": "6cbae59d1dd8689c2fcab97e96efb4966be502cc6e56cd6531210f1fbd98cd46" + "sha256": "4b1e930d15ea80953a9ade52d2c651bc1f601e8f345a378c81e52a3b3d6af0b5" }, { "path": "dist/commands/doctor/render.d.ts", @@ -398,11 +410,11 @@ }, { "path": "dist/commands/hooks.js", - "sha256": "61cf49c775021b4f706abb3eaac4e3a2a4ef1865f13758633ee8a348ec80203c" + "sha256": "f1e6949ac22cb49141097c983f0f504f60fedefa124081f5c41a8c0e1d660700" }, { "path": "dist/commands/hooks.js.map", - "sha256": "36099f7ea7a29a2f9bf633da5dac3c5a23f8a09d6fad0955dcb5a73133223400" + "sha256": "0ca509eb36885aeb79b41e7a4cb32aacbef3d79551b7fe172dab571dda19eb15" }, { "path": "dist/commands/index-cmd.d.ts", @@ -442,15 +454,15 @@ }, { "path": "dist/commands/installer-hosts.d.ts", - "sha256": "4646755bf35e75696aa2e5f6a4ef116fd6cead1bb28c5f7d19dff19960eee8f0" + "sha256": "9a0cd789d71aaf614bfe43489bbe26fd3a94de52a423c57964aad473a4a9decc" }, { "path": "dist/commands/installer-hosts.js", - "sha256": "a114d37ec80bb6ae61e8d2803d9d1a5bed481bd7d496a936a30392aac3d57108" + "sha256": "aed67cb5fe1093df3e6ee0a745bf27b1fa901bb25a8bc7a34d1e3a0da52c5d13" }, { "path": "dist/commands/installer-hosts.js.map", - "sha256": "fe8602180869cfa854dc5e31a5e69b3e8526c4a1b4bd7e4445e6a4099ad5c597" + "sha256": "3e2d4f7712e25def2499e36c761093cf71b58c992ea4ebeadb8c885cd3d5f9df" }, { "path": "dist/commands/mcp.d.ts", @@ -562,7 +574,7 @@ }, { "path": "dist/commitlore.mjs", - "sha256": "b9cddda6bb2540e10cc2912d1af1cdafc513842f08aa0dd047b6ec4e0a55de6c" + "sha256": "2b8303d36a25e9baed9b6a57e7a63897d493267bd28d0769cd00188e2c279659" }, { "path": "dist/core/agent-configs.d.ts", @@ -690,11 +702,11 @@ }, { "path": "dist/core/codex-plugin.js", - "sha256": "ccab26a15eb06df3dc16d3c53e932fb6fb43f4ec0365a86ef183e8e6fff50663" + "sha256": "c6c3f9319c0e6cc4be25eda342be81e6ac8b69ccc988debfe840fae0439a658c" }, { "path": "dist/core/codex-plugin.js.map", - "sha256": "680bac4b1a0199e71f0cf46aac353805c2d2f12e4ab26a6f0325814109bc82db" + "sha256": "2039f519f50297055fe861bd77274023c93333d8ffa2cbc6bc2218298a089fb4" }, { "path": "dist/core/git.d.ts", @@ -770,15 +782,15 @@ }, { "path": "dist/core/hook-target.d.ts", - "sha256": "bf50e9021e067b4e5c6f8d1eacc135f624aac7d915c085acbbb2600506a288c4" + "sha256": "0877670d2c1e9b4ea00255098a8902ba9e423803aa68bf48926d063b931d16ab" }, { "path": "dist/core/hook-target.js", - "sha256": "793de26456f985e1004667ba9e16c0bc17ff5b83cb877ec752be0cf931d22728" + "sha256": "5c536b502e3b89b81dac700ca669f1d7060021c27bfd7276bc9618c89d728392" }, { "path": "dist/core/hook-target.js.map", - "sha256": "7ba0699a7ed2e0ddd802f418bf9d6a77e1b02cfd073065291cf920e94307a5d5" + "sha256": "13dd1d0a3511f7cdf1e52c63575191e5b7bea04e1d8fab6a0798680dc775978e" }, { "path": "dist/core/index-db.d.ts", @@ -876,6 +888,18 @@ "path": "dist/core/query.js.map", "sha256": "2a7cdf1e6057725a6dccaed5d4b6a5c785797862bd91a3d8b55308db9e3314c4" }, + { + "path": "dist/core/runtime-identity.d.ts", + "sha256": "0f69891688dc23dc9652a57ac477ed0d6dfe25a74927b09a797cd4422c448beb" + }, + { + "path": "dist/core/runtime-identity.js", + "sha256": "158f4ea918594c0f95a91977bd3614ec9956706021fea1f00aa0e3ce1ebb0b59" + }, + { + "path": "dist/core/runtime-identity.js.map", + "sha256": "61ac12c45dbbb578c08b38fb591fad85092c3431e5a6f23933b5ddd5582b3e99" + }, { "path": "dist/core/schema.d.ts", "sha256": "fa6e30c3c26a1e441d843ae186d379733dd6682ba325fcf89944f02552b8d4f9" @@ -1070,15 +1094,15 @@ }, { "path": "dist/mcp/lifecycle.d.ts", - "sha256": "928450486b19cc369590c1ac51ca475bf1adeaea6f0a92c9e4f0f5e08490650f" + "sha256": "9381352e3ace652c2e258cdc6283229cb2d719cb4f42b4425d3605cf5e35aa16" }, { "path": "dist/mcp/lifecycle.js", - "sha256": "80ddd38628ed4499d33d69fcb2103ea4bd49b61c551b26eb9801bdff8095aa59" + "sha256": "ced7be169ac602a79721357b42fc3b13cc75be3025e61ebcc65a33affa96bcc0" }, { "path": "dist/mcp/lifecycle.js.map", - "sha256": "03fe124fe23570bcb73633c8a6574bfd435b87ac533c1b6950f46aad32d78f38" + "sha256": "b78e6846f7ab5f65a2bbe7010605efc306f0b016c0a7a1967f7dfb3aab2215cb" }, { "path": "dist/mcp/main.d.ts", @@ -1094,15 +1118,15 @@ }, { "path": "dist/mcp/server.d.ts", - "sha256": "2ecae53465a5041eba07da3960652d5610a385b3e82e5a14c62a12a616a47fdf" + "sha256": "bbcd8996ccddb21b48315332897df68848c1ec0c4e5aef6a74a6680b9d368ed0" }, { "path": "dist/mcp/server.js", - "sha256": "ecea57bdd721c33cd311ddf9b5f8560ad85ac8909482896f9f3b0a7d74a7ecd0" + "sha256": "7fbd7972971d62bb0e454d384f28b4c52f6396564877a0b6dbe0bf6112fcf253" }, { "path": "dist/mcp/server.js.map", - "sha256": "48d59798f49f28817902bdec17876bb58ba074707ab8553218c3ebf06b1bde04" + "sha256": "03c10d55229379b7aa7d6327b0f985cd52e07ea4a83fb1a6f739d970319fa369" }, { "path": "dist/mcp/validate-args.d.ts",