@mirnoorata/codexa 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +93 -29
  2. package/dist/cache-lock.js +72 -12
  3. package/dist/cache-lock.js.map +1 -1
  4. package/dist/cli/hooks.js +11 -6
  5. package/dist/cli/hooks.js.map +1 -1
  6. package/dist/cli.js +13 -4
  7. package/dist/cli.js.map +1 -1
  8. package/dist/graph.js +4 -2
  9. package/dist/graph.js.map +1 -1
  10. package/dist/implicit-baseline.d.ts +8 -0
  11. package/dist/implicit-baseline.js +94 -0
  12. package/dist/implicit-baseline.js.map +1 -0
  13. package/dist/init.d.ts +3 -0
  14. package/dist/init.js +124 -15
  15. package/dist/init.js.map +1 -1
  16. package/dist/mcp/compaction.d.ts +1 -0
  17. package/dist/mcp/compaction.js +24 -0
  18. package/dist/mcp/compaction.js.map +1 -1
  19. package/dist/mcp/envelope.d.ts +4 -1
  20. package/dist/mcp/envelope.js +45 -5
  21. package/dist/mcp/envelope.js.map +1 -1
  22. package/dist/mcp/prompts.d.ts +1 -1
  23. package/dist/mcp/prompts.js +5 -2
  24. package/dist/mcp/prompts.js.map +1 -1
  25. package/dist/mcp/tool-registry.d.ts +1 -0
  26. package/dist/mcp/tool-registry.js +5 -0
  27. package/dist/mcp/tool-registry.js.map +1 -1
  28. package/dist/mcp/tools.d.ts +1 -0
  29. package/dist/mcp/tools.js +6 -0
  30. package/dist/mcp/tools.js.map +1 -1
  31. package/dist/mcp-tool-catalog.d.ts +1 -1
  32. package/dist/mcp-tool-catalog.js +1 -1
  33. package/dist/mcp-tool-catalog.js.map +1 -1
  34. package/dist/mcp.js +31 -5
  35. package/dist/mcp.js.map +1 -1
  36. package/dist/query/post-edit/decision.d.ts +1 -0
  37. package/dist/query/post-edit/decision.js +13 -4
  38. package/dist/query/post-edit/decision.js.map +1 -1
  39. package/dist/query/post-edit.js +10 -2
  40. package/dist/query/post-edit.js.map +1 -1
  41. package/dist/query/verification/masking.d.ts +8 -0
  42. package/dist/query/verification/masking.js +82 -0
  43. package/dist/query/verification/masking.js.map +1 -0
  44. package/dist/query/verification/script-credit.d.ts +14 -0
  45. package/dist/query/verification/script-credit.js +232 -0
  46. package/dist/query/verification/script-credit.js.map +1 -0
  47. package/dist/query/verification/shell.d.ts +5 -1
  48. package/dist/query/verification/shell.js +288 -9
  49. package/dist/query/verification/shell.js.map +1 -1
  50. package/dist/query/verification.js +187 -21
  51. package/dist/query/verification.js.map +1 -1
  52. package/dist/query/workflow.js +2 -2
  53. package/dist/query/workflow.js.map +1 -1
  54. package/dist/repo-files.js +74 -14
  55. package/dist/repo-files.js.map +1 -1
  56. package/dist/resolver.js +20 -2
  57. package/dist/resolver.js.map +1 -1
  58. package/dist/retrieval.js +5 -5
  59. package/dist/retrieval.js.map +1 -1
  60. package/dist/task-snapshots.js +29 -0
  61. package/dist/task-snapshots.js.map +1 -1
  62. package/dist/types.d.ts +2 -0
  63. package/dist/types.js.map +1 -1
  64. package/dist/util.d.ts +1 -0
  65. package/dist/util.js +7 -0
  66. package/dist/util.js.map +1 -1
  67. package/integrations/.claude-plugin/marketplace.json +23 -0
  68. package/integrations/claude-code/.claude-plugin/plugin.json +16 -0
  69. package/integrations/claude-code/.mcp.json +8 -0
  70. package/integrations/claude-code/README.md +177 -0
  71. package/integrations/claude-code/commands/codexa-brief.md +14 -0
  72. package/integrations/claude-code/commands/codexa-impact.md +14 -0
  73. package/integrations/claude-code/commands/codexa-plan.md +20 -0
  74. package/integrations/claude-code/commands/codexa-review.md +23 -0
  75. package/integrations/claude-code/commands/codexa-status.md +10 -0
  76. package/integrations/claude-code/hooks/hooks.json +39 -0
  77. package/integrations/claude-code/scripts/cmd/brief.sh +18 -0
  78. package/integrations/claude-code/scripts/cmd/impact.sh +35 -0
  79. package/integrations/claude-code/scripts/cmd/lib.sh +136 -0
  80. package/integrations/claude-code/scripts/cmd/plan.sh +52 -0
  81. package/integrations/claude-code/scripts/cmd/review.sh +66 -0
  82. package/integrations/claude-code/scripts/cmd/status.sh +52 -0
  83. package/integrations/claude-code/scripts/codexa-mcp.js +111 -0
  84. package/integrations/claude-code/scripts/lib/codexa-repo.sh +773 -0
  85. package/integrations/claude-code/scripts/pre-edit.sh +116 -0
  86. package/integrations/claude-code/scripts/session-start.sh +201 -0
  87. package/integrations/claude-code/scripts/stop.sh +443 -0
  88. package/integrations/claude-code/tests/cmd-smoke.sh +310 -0
  89. package/integrations/claude-code/tests/hook-smoke.sh +1412 -0
  90. package/package.json +4 -2
  91. package/plugins/codexa/.codex-plugin/plugin.json +1 -1
package/README.md CHANGED
@@ -1,20 +1,55 @@
1
1
  # Codexa
2
2
 
3
- Codexa is a local codebase map for AI coding agents.
3
+ Codexa is an edit-lifecycle governance layer for AI coding agents — plan
4
+ conformance, drift review, and verification crediting — built on a local,
5
+ deterministic codebase map.
4
6
 
5
7
  In plain English: it reads a repository, builds a compact index of the files,
6
- symbols, imports, tests, risks, and workflows it can prove, then gives Codex or
7
- another MCP client small evidence-backed packets before and after edits. It is
8
- meant to help an agent answer questions like:
8
+ symbols, imports, tests, risks, and workflows it can prove, then gives Codex,
9
+ Claude Code, or another MCP client small evidence-backed packets before and
10
+ after edits. It is meant to help an agent answer questions like:
9
11
 
10
12
  - What should I read first?
11
13
  - What could this change break?
12
14
  - Which tests are relevant?
13
15
  - Did my final dirty tree match the plan I saved before editing?
16
+ - Did the verification commands the agent reported actually prove anything?
14
17
 
15
18
  It is not an autonomous coding agent. It does not edit your source files through
16
19
  MCP. It is a context compiler, query server, and verification guide.
17
20
 
21
+ ## Why Codexa
22
+
23
+ Three capabilities are deliberately hard to find elsewhere:
24
+
25
+ - **A drift loop.** `change_plan` snapshots per-file hashes plus symbol and
26
+ risk baselines before editing; `post_edit_review` diffs the real dirty tree
27
+ against that plan afterwards, rename-aware. When no plan was saved, the
28
+ pre-edit hook saves an implicit baseline automatically, so the review always
29
+ has a pre-edit reference; an explicit `change_plan` upgrades it with planned
30
+ scope and tests. Blocking is opt-in: only reviews against an explicit plan
31
+ can surface a blocking verdict to the host — implicit baselines keep the
32
+ loop informational.
33
+ - **A verification ledger.** Commands the agent reports are parsed against a
34
+ faithful POSIX-shell subset before earning coverage credit: `npm test ||
35
+ true` earns nothing, `tsc --help` is vetoed as non-compiling, `sh -c`
36
+ wrappers are unwrapped with ambiguity failing closed. Scope stated plainly:
37
+ this detects structural exit-masking in *reported* commands — it cannot
38
+ detect a wholesale fabricated report. The opt-in AutoVerify lane exists for
39
+ execution-backed evidence.
40
+ - **A fail-closed eval.** The eval harness runs real `rg`/`git` baselines and
41
+ fails a scenario outright if the raw baseline does the job better. The
42
+ archived v0.2.0 release run passed 20/20 scenarios with packets averaging
43
+ 0.66x the raw baseline output size — and the harness ships in this repo, so
44
+ you can re-run it yourself. See [Public Proof](#public-proof).
45
+
46
+ Limits, stated up front: TypeScript/JavaScript and Python are the deep lanes
47
+ (Rust/Go/Java are shallow; other languages get light file facts). Impact
48
+ expansion caps at graph depth 3. The tested envelope is repos around the
49
+ ~50K-LOC scale of Codexa itself — expect slower cold indexing and shallower
50
+ ranking on large monorepos. Everything runs locally: zero API keys and zero
51
+ network calls in the core paths.
52
+
18
53
  ## Maintainer Expectations
19
54
 
20
55
  Codexa is maintained by one person, in spare time, with a deliberately narrow
@@ -56,21 +91,33 @@ npm link
56
91
  Wire Codexa into another repository:
57
92
 
58
93
  ```bash
59
- codexa init /path/to/project
94
+ codexa init /path/to/project # Codex CLI: .codex/config.toml + hooks
95
+ codexa init /path/to/project --claude # also writes a repo-root .mcp.json for Claude Code
60
96
  codexa session-start /path/to/project
61
97
  ```
62
98
 
63
99
  After `codexa init`, the target repository gets a repo-local `.codex/config.toml`
64
- entry that lets Codex discover the Codexa MCP server automatically. Useful flags:
65
- `--tools core` exposes only the primary-loop tools (plus `impact`/`freshness`) via an
66
- `enabled_tools` allowlist to cut per-turn schema token cost (confirm your Codex CLI
67
- supports `enabled_tools` first), `--agents-md` (opt-in) writes a managed Codexa
68
- workflow block into the repo's `AGENTS.md` for Codex, and `--claude-md` (opt-in)
69
- writes the same managed block into `CLAUDE.md` for Claude Code. The region between
70
- the `<!-- >>> codexa managed -->` / `<!-- <<< codexa managed -->` markers is
71
- reserved: Codexa replaces it in place on every re-run (so the block stays current)
72
- and never edits anything outside it. Unbalanced or malformed markers abort the
73
- write instead of silently truncating the file.
100
+ entry that lets Codex discover the Codexa MCP server automatically, and with
101
+ `--claude` a repo-root `.mcp.json` so Claude Code discovers the same server
102
+ (only the codexa entry is managed; other servers in an existing `.mcp.json`
103
+ are preserved, and malformed JSON aborts the write). When init runs from an
104
+ evictable npx cache, generated configs pin `npx -y @mirnoorata/codexa@<version>`
105
+ instead of the cache path so they keep working after a cache prune.
106
+
107
+ Useful flags: the default tool profile for fresh installs is `core` only the
108
+ primary-loop tools (plus `impact`/`freshness`) are exposed, which cuts per-turn
109
+ schema token cost; `--tools full` exposes all 20 tools, and re-running plain
110
+ `codexa init` preserves whichever profile the repo already uses. On the Codex
111
+ side the core profile relies on Codex CLI honoring `enabled_tools` (older
112
+ versions ignore the key and simply expose every tool); the Claude Code
113
+ `.mcp.json` path filters server-side via `serve --tools core` and needs no
114
+ client support. `--agents-md` (opt-in) writes a managed
115
+ Codexa workflow block into the repo's `AGENTS.md` for Codex, and `--claude-md`
116
+ (opt-in) writes the same managed block into `CLAUDE.md` for Claude Code. The
117
+ region between the `<!-- >>> codexa managed -->` / `<!-- <<< codexa managed -->`
118
+ markers is reserved: Codexa replaces it in place on every re-run (so the block
119
+ stays current) and never edits anything outside it. Unbalanced or malformed
120
+ markers abort the write instead of silently truncating the file.
74
121
 
75
122
  The installed command is `codexa`, and the server can also run ad hoc:
76
123
 
@@ -86,20 +133,30 @@ Codexa is also listed in the official MCP registry as
86
133
  Codexa is deterministic and model-agnostic — its core indexing, ranking, and
87
134
  query paths call no model and need no API keys, so it serves the same
88
135
  evidence-backed context to any agent host that speaks MCP: the OpenAI Codex CLI
89
- (repo-local `.codex/config.toml`), Claude Code (the bundled plugin under
90
- `integrations/claude-code/`, plus `--claude-md` steering), and any client that
91
- discovers it through the MCP registry. There is no per-model integration to do
92
- the model lives in the host, and Codexa is the host's context server. (The one
93
- exception is the opt-in, off-by-default semantic lane, which can call a configured
94
- embedding provider such as OpenAI see [Optional Lanes](#optional-lanes).)
136
+ (repo-local `.codex/config.toml`), Claude Code (`codexa init --claude` writes a
137
+ repo-root `.mcp.json`; the bundled plugin under `integrations/claude-code/`
138
+ ships its own MCP server entry, hooks that auto-save the pre-edit baseline and
139
+ surface blocking drift verdicts to the model, and slash commands; `--claude-md`
140
+ adds workflow steering pick the plugin **or** `init --claude` for MCP wiring,
141
+ not both, or Claude Code will register the codexa server twice), and any client
142
+ that discovers it through the MCP registry. There is no per-model integration to do — the model lives in the
143
+ host, and Codexa is the host's context server. (The one exception is the
144
+ opt-in, off-by-default semantic lane, which can call a configured embedding
145
+ provider such as OpenAI — see [Optional Lanes](#optional-lanes).)
95
146
 
96
147
  Token discipline is built in: every tool description states its typical output
97
148
  cost, structured results are budget-compacted with truncation records naming
98
149
  dropped fields, hosts with small MCP result limits can set
99
150
  `CODEXA_MCP_STRUCTURED_BUDGET_BYTES`, and the big retrieval tools accept
100
- `responseFormat: "concise"` for a summary-tier packet. Because the budget caps
101
- tokens rather than dollars, the savings scale with the host model's price — they
102
- matter most on frontier-tier models.
151
+ `responseFormat: "concise"` for a summary-tier packet that compacts both the
152
+ structured payload and the text block. The `tools/list` surface is budgeted
153
+ too: the per-tool output schema defaults to a compact top-level contract
154
+ (measured on this repo: 123KB -> 54KB for the full 20-tool surface, 21KB with
155
+ the core profile; `CODEXA_MCP_OUTPUT_SCHEMA=full` restores the deep schema),
156
+ and `codexa serve --tools core` registers only the primary-loop tools for
157
+ hosts without a client-side allowlist. Because the budget caps tokens rather
158
+ than dollars, the savings scale with the host model's price — they matter most
159
+ on frontier-tier models.
103
160
 
104
161
  ### Managed cloud agents
105
162
 
@@ -139,6 +196,10 @@ Use Codexa as a guardrail around code changes:
139
196
  4. Save a change plan before non-trivial edits.
140
197
  `change_plan` with `saveSnapshot=true`, or CLI
141
198
  `change-plan --save-snapshot`, records the intended scope and test plan.
199
+ If you skip this step, the pre-edit hooks save an implicit baseline of the
200
+ dirty tree on the first edit — the review still gets changed-since-baseline
201
+ and head-drift accuracy, but only an explicit plan enables unplanned-scope
202
+ drift detection.
142
203
 
143
204
  5. Review after editing.
144
205
  `post_edit_review` / `post-edit-review` compares the actual dirty tree with
@@ -187,7 +248,7 @@ writes are allowed; source-file mutation is not exposed through MCP tools.
187
248
 
188
249
  | Command | Use it for |
189
250
  | --- | --- |
190
- | `codexa init <repo>` | Write repo-local Codex MCP config/hooks and index the repo (`--tools core` for a lean tool allowlist, `--agents-md` for an AGENTS.md workflow block). |
251
+ | `codexa init <repo>` | Write repo-local Codex MCP config/hooks and index the repo (`--claude` for a repo-root Claude Code `.mcp.json`, `--tools full` to expose every tool, `--agents-md` for an AGENTS.md workflow block). |
191
252
  | `codexa session-start <repo>` | Print cheap startup status and the automatic-use loop. |
192
253
  | `codexa index <repo>` | Build `.codex/codebase/` artifacts once. |
193
254
  | `codexa watch <repo>` | Keep artifacts fresh during active edit sessions. |
@@ -215,7 +276,7 @@ writes are allowed; source-file mutation is not exposed through MCP tools.
215
276
  | `codexa eval <repo>` | Run structured retrieval/verification benchmark scenarios. |
216
277
  | `codexa github-sync-check <repo>` | Diagnose GitHub source sync readiness. |
217
278
  | `codexa github-release <repo>` | Create release notes, tags, and GitHub Release entries. |
218
- | `codexa serve <repo>` | Start the MCP context server over stdio. |
279
+ | `codexa serve <repo>` | Start the MCP context server over stdio (`--tools core` registers only the primary-loop tools). |
219
280
  | `codexa serve <repo> --transport http --host 127.0.0.1 --port 8729` | Start loopback-only HTTP MCP. |
220
281
 
221
282
  Most context commands auto-refresh stale or missing Codexa artifacts before
@@ -471,7 +532,9 @@ scrubbed environments and write reports under `.codex/static-analysis/`.
471
532
 
472
533
  `codexa init` writes advisory hooks when Codex hooks are available:
473
534
 
474
- - `hook-pre-edit` reminds the agent to save a change-plan snapshot.
535
+ - `hook-pre-edit` saves an implicit pre-edit baseline when no change-plan
536
+ snapshot exists (and reminds the agent that an explicit `change_plan`
537
+ upgrades it with planned scope and tests).
475
538
  - `hook-post-edit` runs a bounded post-edit review after edits.
476
539
 
477
540
  AutoVerify command execution is disabled unless user-owned autonomy is
@@ -569,8 +632,9 @@ node dist/cli.js eval /path/to/project --suite all --seed codexa-v1-benchmark
569
632
  The eval scores structured query data, not prose. It compares Codexa packets
570
633
  against raw `rg`/`git status` baselines, tracks recall/precision/test
571
634
  recommendations/context size, and can run ranking experiments without changing
572
- production ranking. A scenario fails outright if the raw-grep baseline does the
573
- job better.
635
+ production ranking. The claim is deliberately falsifiable: a scenario fails
636
+ outright if the raw-grep baseline does the job better, and the harness runs in
637
+ CI — so "beats grep on its scenarios" is a gate, not a one-off benchmark.
574
638
 
575
639
  Measured results for v0.2.0 (seed `codexa-v020-release`, full suite, archived
576
640
  in [`reports/benchmarks/v0.2.0-eval.json`](reports/benchmarks/v0.2.0-eval.json)):
@@ -4,6 +4,11 @@ import path from "node:path";
4
4
  import { setTimeout as sleep } from "node:timers/promises";
5
5
  const DEFAULT_LOCK_STALE_MS = 120_000;
6
6
  const DEFAULT_LOCK_TIMEOUT_MS = 30_000;
7
+ // A live-looking owner is never stolen for a transient stall, but if its
8
+ // heartbeat freezes for this multiple of staleMs it is treated as unrecoverable
9
+ // (wedged holder, or a recycled PID whose new owner does not update this lock's
10
+ // heartbeat) and reclaimed. Far longer than any plausible GC/swap/SIGSTOP pause.
11
+ const HARD_RECLAIM_HEARTBEAT_MULTIPLIER = 8;
7
12
  export async function acquireCacheLock(options) {
8
13
  const repoRoot = path.resolve(options.repoRoot);
9
14
  const lockDir = path.isAbsolute(options.lockDir) ? options.lockDir : path.join(repoRoot, options.lockDir);
@@ -26,8 +31,7 @@ export async function acquireCacheLock(options) {
26
31
  await fs.mkdir(lockDir, { recursive: false });
27
32
  await writeLockOwner(ownerPath, owner);
28
33
  const heartbeat = setInterval(() => {
29
- owner.heartbeatAt = new Date().toISOString();
30
- void writeLockOwner(ownerPath, owner).catch(() => undefined);
34
+ void renewLockOwner(ownerPath, owner).catch(() => undefined);
31
35
  }, Math.max(10_000, Math.floor(staleMs / 3)));
32
36
  heartbeat.unref?.();
33
37
  return async () => {
@@ -55,13 +59,33 @@ async function removeStaleLock(lockDir, staleMs) {
55
59
  const stat = await fs.stat(lockDir);
56
60
  const owner = await readLockOwner(ownerPath);
57
61
  if (owner) {
62
+ // Reclaim a lock whose owning process is provably gone. A live process
63
+ // with a briefly stale heartbeat may merely be stalled (GC, swap,
64
+ // SIGSTOP, blocked event loop) and resume into its critical section;
65
+ // stealing it would let two processes hold the lock — the corruption
66
+ // this lock exists to prevent — so do not reclaim it for a short stall.
58
67
  if (!(await lockOwnerStillRunning(owner))) {
59
- return claimAndRemoveOwnerLock(lockDir, owner, () => true);
68
+ return claimAndRemoveOwnerLock(lockDir, owner);
60
69
  }
61
- if (lockOwnerHeartbeatFresh(owner, staleMs)) {
62
- return false;
70
+ // ...but a lock whose owner.json has not been rewritten far beyond any
71
+ // plausible pause means the holder is wedged, or the PID was recycled by an
72
+ // unrelated process not updating this lock. Freshness is measured by the
73
+ // owner.json file mtime, which every heartbeat bumps (write-temp + rename):
74
+ // the filesystem sets it on actual write activity, independent of the
75
+ // holder's clock or heartbeat *content*, so a live, actively-heart-beating
76
+ // holder is never stolen while a frozen one is reclaimed even if its content
77
+ // timestamp is future-dated or corrupt. Double-check at claim time so a
78
+ // holder that refreshed just before our rename keeps the lock.
79
+ const ceilingMs = staleMs * HARD_RECLAIM_HEARTBEAT_MULTIPLIER;
80
+ const ownerMtimeMs = await fileMtimeMs(ownerPath);
81
+ if (ownerMtimeMs !== undefined && Date.now() - ownerMtimeMs > ceilingMs) {
82
+ const reclaimed = await claimAndRemoveOwnerLock(lockDir, owner, ceilingMs);
83
+ if (reclaimed) {
84
+ console.error(`codexa: reclaimed a stuck cache lock (owner pid ${owner.pid}, not refreshed > ${Math.round(ceilingMs / 1000)}s): ${lockDir}`);
85
+ }
86
+ return reclaimed;
63
87
  }
64
- return claimAndRemoveOwnerLock(lockDir, owner, (claimed) => !lockOwnerHeartbeatFresh(claimed, staleMs));
88
+ return false;
65
89
  }
66
90
  if (Date.now() - stat.mtimeMs <= staleMs) {
67
91
  return false;
@@ -76,7 +100,7 @@ async function removeStaleLock(lockDir, staleMs) {
76
100
  return false;
77
101
  }
78
102
  }
79
- async function claimAndRemoveOwnerLock(lockDir, expectedOwner, shouldRemove) {
103
+ async function claimAndRemoveOwnerLock(lockDir, expectedOwner, ceilingMs) {
80
104
  const ownerPath = path.join(lockDir, "owner.json");
81
105
  const claimedOwnerPath = path.join(lockDir, `owner.json.claimed-${process.pid}-${randomUUID()}`);
82
106
  try {
@@ -90,8 +114,27 @@ async function claimAndRemoveOwnerLock(lockDir, expectedOwner, shouldRemove) {
90
114
  await restoreClaimedOwner(ownerPath, claimedOwnerPath);
91
115
  return false;
92
116
  }
93
- if (!shouldRemove(claimed)) {
94
- await restoreClaimedOwner(ownerPath, claimedOwnerPath);
117
+ // For a ceiling reclaim, re-confirm against the claimed file's preserved mtime
118
+ // (rename keeps it) that the holder really did not refresh within the ceiling.
119
+ // A holder that rewrote owner.json just before our rename shows a fresh mtime
120
+ // and must be left alone. The dead-process path passes no ceiling and removes
121
+ // unconditionally after the token check.
122
+ if (ceilingMs !== undefined) {
123
+ const claimedMtimeMs = await fileMtimeMs(claimedOwnerPath);
124
+ if (claimedMtimeMs === undefined || Date.now() - claimedMtimeMs <= ceilingMs) {
125
+ await restoreClaimedOwner(ownerPath, claimedOwnerPath);
126
+ return false;
127
+ }
128
+ }
129
+ // TOCTOU guard: the claim renamed owner.json aside, so ownerPath is now absent.
130
+ // A holder we mean to reclaim is wedged/dead and writes no heartbeats, so it
131
+ // stays absent. If a fresh owner.json has reappeared, the holder resumed and
132
+ // recreated it between the claim and now — abort rather than fs.rm the live
133
+ // holder's lock dir (which would let two processes hold the lock). The atomic
134
+ // rename of owner.json is the only thing acting as the claim token; a heartbeat
135
+ // written after it is reliably observed here because rename is atomic.
136
+ if (await readLockOwner(ownerPath)) {
137
+ await fs.rm(claimedOwnerPath, { force: true }).catch(() => undefined);
95
138
  return false;
96
139
  }
97
140
  await fs.rm(lockDir, { recursive: true, force: true });
@@ -109,15 +152,32 @@ async function restoreClaimedOwner(ownerPath, claimedOwnerPath) {
109
152
  }
110
153
  await fs.rm(claimedOwnerPath, { force: true }).catch(() => undefined);
111
154
  }
112
- function lockOwnerHeartbeatFresh(owner, staleMs) {
113
- const heartbeatMs = Date.parse(owner.heartbeatAt || owner.startedAt);
114
- return Number.isFinite(heartbeatMs) && Date.now() - heartbeatMs <= staleMs;
155
+ async function fileMtimeMs(filePath) {
156
+ try {
157
+ return (await fs.stat(filePath)).mtimeMs;
158
+ }
159
+ catch {
160
+ return undefined;
161
+ }
115
162
  }
116
163
  async function writeLockOwner(ownerPath, owner) {
117
164
  const temp = `${ownerPath}.${process.pid}.${owner.token}.tmp`;
118
165
  await fs.writeFile(temp, `${JSON.stringify(owner)}\n`, "utf8");
119
166
  await fs.rename(temp, ownerPath);
120
167
  }
168
+ async function renewLockOwner(ownerPath, owner) {
169
+ // Before renewing, confirm we still own the lock. If owner.json is gone (a
170
+ // reclaimer renamed it aside to claim a wedged lock) or now holds a different
171
+ // token, stop renewing: recreating owner.json would race the reclaimer's
172
+ // pending directory removal and let two processes hold the lock. Combined with
173
+ // the reclaimer's post-claim live re-read, this closes the resume window.
174
+ const current = await readLockOwner(ownerPath);
175
+ if (!current || current.token !== owner.token) {
176
+ return;
177
+ }
178
+ owner.heartbeatAt = new Date().toISOString();
179
+ await writeLockOwner(ownerPath, owner);
180
+ }
121
181
  async function readLockOwner(ownerPath) {
122
182
  try {
123
183
  const parsed = JSON.parse(await fs.readFile(ownerPath, "utf8"));
@@ -1 +1 @@
1
- {"version":3,"file":"cache-lock.js","sourceRoot":"","sources":["../src/cache-lock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache-lock.js","sourceRoot":"","sources":["../src/cache-lock.ts"],"names":[],"mappings":"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"}
package/dist/cli/hooks.js CHANGED
@@ -3,6 +3,7 @@ import path from "node:path";
3
3
  import { effectiveAutonomyMode } from "../autonomy.js";
4
4
  import { runAutoVerifyForPostEdit, autoVerifyPolicySignature, sanitizeAutoVerifyText } from "../autoverify.js";
5
5
  import { acquireCacheLock } from "../cache-lock.js";
6
+ import { saveImplicitBaselineSnapshot } from "../implicit-baseline.js";
6
7
  import { getFreshness } from "../indexer.js";
7
8
  import { resolveMcpRepoRoot, shouldPreferConfiguredRepoRoot } from "../mcp-repo-root.js";
8
9
  import { loadPostEditHookReviewState, postEditHookReviewSignature, recordCodexaHookEvent, savePostEditHookReviewState } from "../post-edit-outcomes.js";
@@ -12,13 +13,17 @@ export async function runPreEditHook(repo) {
12
13
  const configuredRoot = path.resolve(repo);
13
14
  await runAdvisoryHook(configuredRoot, "pre-edit", "change-plan snapshot check", async () => {
14
15
  const { activeRepoRoot } = await resolveHookRepoRoots(repo);
15
- const snapshot = await loadTaskSnapshot(activeRepoRoot);
16
- if (!snapshot.snapshot) {
17
- console.log("Codexa: no change-plan snapshot is available. For code edits, call change_plan with saveSnapshot=true before editing when the task is non-trivial.");
18
- return { status: "skipped", reason: "missing-change-plan-snapshot", taskId: snapshot.latestTaskId };
16
+ const baseline = await saveImplicitBaselineSnapshot(activeRepoRoot);
17
+ if (baseline.status === "existing-snapshot") {
18
+ console.log(`Codexa: change-plan snapshot ready (${baseline.taskId}). After edits, post_edit_review will compare planned vs actual work.`);
19
+ return { status: "ok", reason: "snapshot-ready", taskId: baseline.taskId };
19
20
  }
20
- console.log(`Codexa: change-plan snapshot ready (${snapshot.snapshot.taskId}). After edits, post_edit_review will compare planned vs actual work.`);
21
- return { status: "ok", reason: "snapshot-ready", taskId: snapshot.snapshot.taskId };
21
+ if (baseline.status === "saved") {
22
+ console.log(`Codexa: saved an implicit pre-edit baseline (${baseline.taskId}); post_edit_review will diff the final tree against it. Call change_plan with saveSnapshot=true to declare planned scope and tests.`);
23
+ return { status: "ok", reason: "implicit-baseline-saved", taskId: baseline.taskId };
24
+ }
25
+ console.log(`Codexa: no change-plan snapshot is available${baseline.reason ? ` (${baseline.reason})` : ""}. For code edits, call change_plan with saveSnapshot=true before editing when the task is non-trivial.`);
26
+ return { status: "skipped", reason: baseline.reason ?? "missing-change-plan-snapshot", taskId: baseline.latestTaskId };
22
27
  });
23
28
  }
24
29
  export async function runPostEditHook(repo) {
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/cli/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/cli/hooks.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -38,9 +38,10 @@ program
38
38
  .option("--no-hooks", "do not write hooks.json")
39
39
  .option("--index", "index the repository immediately", true)
40
40
  .option("--no-index", "only write Codex config and hooks")
41
- .option("--tools <profile>", "MCP tool exposure profile: core (primary loop only, cheaper per turn) or full", parseToolProfile, "full")
41
+ .option("--tools <profile>", "MCP tool exposure profile: core (primary loop, cheaper per turn) or full; defaults to the repo's existing profile, else core", parseToolProfile)
42
42
  .option("--agents-md", "write a managed Codexa workflow block into the repo's AGENTS.md (Codex)", false)
43
43
  .option("--claude-md", "write a managed Codexa workflow block into the repo's CLAUDE.md (Claude Code)", false)
44
+ .option("--claude", "write the codexa MCP server entry into the repo's .mcp.json for Claude Code", false)
44
45
  .description("Initialize Codexa for a project so future Codex sessions discover it automatically.")
45
46
  .action(async (repo, opts) => {
46
47
  const result = await initializeProject(repo, {
@@ -51,7 +52,8 @@ program
51
52
  serverName: opts.serverName,
52
53
  toolProfile: opts.tools,
53
54
  agentsMd: opts.agentsMd,
54
- claudeMd: opts.claudeMd
55
+ claudeMd: opts.claudeMd,
56
+ claude: opts.claude
55
57
  });
56
58
  console.log(`Codexa initialized for ${result.repoRoot}`);
57
59
  console.log(`Config: ${result.configPath}`);
@@ -64,6 +66,12 @@ program
64
66
  if (result.claudeMdPath) {
65
67
  console.log(`CLAUDE.md: ${result.claudeMdPath}`);
66
68
  }
69
+ if (result.claudeMcpPath) {
70
+ console.log(`Claude Code MCP config: ${result.claudeMcpPath}`);
71
+ }
72
+ if (result.launchNote) {
73
+ console.log(result.launchNote);
74
+ }
67
75
  console.log(`MCP server: ${result.serverName}`);
68
76
  if (result.indexed) {
69
77
  console.log(`Indexed ${result.indexed.files} files, ${result.indexed.symbols} symbols, ${result.indexed.usageSites} usage sites.`);
@@ -101,7 +109,7 @@ program
101
109
  program
102
110
  .command("hook-pre-edit")
103
111
  .argument("<repo>", "repository root")
104
- .description("Cheap hook helper that reminds Codex when no change-plan snapshot exists before an edit.")
112
+ .description("Cheap hook helper that saves an implicit pre-edit baseline when no change-plan snapshot exists before an edit.")
105
113
  .action(async (repo) => {
106
114
  await runPreEditHook(repo);
107
115
  });
@@ -779,6 +787,7 @@ program
779
787
  .option("--auto-refresh", "refresh a stale or missing index before answering MCP context tools", true)
780
788
  .option("--no-auto-refresh", "do not refresh a stale or missing index before answering MCP context tools")
781
789
  .option("--session-memory <mode>", "auto-record MCP session memory: auto or off", parseSessionMemoryMode, "auto")
790
+ .option("--tools <profile>", "server-side tool exposure: core (primary loop only, cheaper per turn) or full", parseToolProfile, "full")
782
791
  .option("--workspace-focus-file <path>", "workspace focus file to consult when <repo> is a workspace launch root")
783
792
  .option("--workspace-session <id>", "active WORKING.md session row to prefer when <repo> is a workspace launch root")
784
793
  .option("--transport <transport>", "MCP transport: stdio or http", parseMcpTransport, "stdio")
@@ -788,7 +797,7 @@ program
788
797
  .description("Start the MCP server over stdio by default, or Streamable HTTP with --transport http.")
789
798
  .action(async (repo, opts) => {
790
799
  const resolved = path.resolve(repo);
791
- const queryOptions = queryOptionsFromCli(opts);
800
+ const queryOptions = { ...queryOptionsFromCli(opts), toolProfile: opts.tools };
792
801
  if (opts.transport === "http") {
793
802
  await serveMcpHttp(resolved, queryOptions, { host: opts.host, port: opts.port, endpoint: opts.endpoint });
794
803
  return;