@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.
- package/README.md +93 -29
- package/dist/cache-lock.js +72 -12
- package/dist/cache-lock.js.map +1 -1
- package/dist/cli/hooks.js +11 -6
- package/dist/cli/hooks.js.map +1 -1
- package/dist/cli.js +13 -4
- package/dist/cli.js.map +1 -1
- package/dist/graph.js +4 -2
- package/dist/graph.js.map +1 -1
- package/dist/implicit-baseline.d.ts +8 -0
- package/dist/implicit-baseline.js +94 -0
- package/dist/implicit-baseline.js.map +1 -0
- package/dist/init.d.ts +3 -0
- package/dist/init.js +124 -15
- package/dist/init.js.map +1 -1
- package/dist/mcp/compaction.d.ts +1 -0
- package/dist/mcp/compaction.js +24 -0
- package/dist/mcp/compaction.js.map +1 -1
- package/dist/mcp/envelope.d.ts +4 -1
- package/dist/mcp/envelope.js +45 -5
- package/dist/mcp/envelope.js.map +1 -1
- package/dist/mcp/prompts.d.ts +1 -1
- package/dist/mcp/prompts.js +5 -2
- package/dist/mcp/prompts.js.map +1 -1
- package/dist/mcp/tool-registry.d.ts +1 -0
- package/dist/mcp/tool-registry.js +5 -0
- package/dist/mcp/tool-registry.js.map +1 -1
- package/dist/mcp/tools.d.ts +1 -0
- package/dist/mcp/tools.js +6 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp-tool-catalog.d.ts +1 -1
- package/dist/mcp-tool-catalog.js +1 -1
- package/dist/mcp-tool-catalog.js.map +1 -1
- package/dist/mcp.js +31 -5
- package/dist/mcp.js.map +1 -1
- package/dist/query/post-edit/decision.d.ts +1 -0
- package/dist/query/post-edit/decision.js +13 -4
- package/dist/query/post-edit/decision.js.map +1 -1
- package/dist/query/post-edit.js +10 -2
- package/dist/query/post-edit.js.map +1 -1
- package/dist/query/verification/masking.d.ts +8 -0
- package/dist/query/verification/masking.js +82 -0
- package/dist/query/verification/masking.js.map +1 -0
- package/dist/query/verification/script-credit.d.ts +14 -0
- package/dist/query/verification/script-credit.js +232 -0
- package/dist/query/verification/script-credit.js.map +1 -0
- package/dist/query/verification/shell.d.ts +5 -1
- package/dist/query/verification/shell.js +288 -9
- package/dist/query/verification/shell.js.map +1 -1
- package/dist/query/verification.js +187 -21
- package/dist/query/verification.js.map +1 -1
- package/dist/query/workflow.js +2 -2
- package/dist/query/workflow.js.map +1 -1
- package/dist/repo-files.js +74 -14
- package/dist/repo-files.js.map +1 -1
- package/dist/resolver.js +20 -2
- package/dist/resolver.js.map +1 -1
- package/dist/retrieval.js +5 -5
- package/dist/retrieval.js.map +1 -1
- package/dist/task-snapshots.js +29 -0
- package/dist/task-snapshots.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +1 -0
- package/dist/util.js +7 -0
- package/dist/util.js.map +1 -1
- package/integrations/.claude-plugin/marketplace.json +23 -0
- package/integrations/claude-code/.claude-plugin/plugin.json +16 -0
- package/integrations/claude-code/.mcp.json +8 -0
- package/integrations/claude-code/README.md +177 -0
- package/integrations/claude-code/commands/codexa-brief.md +14 -0
- package/integrations/claude-code/commands/codexa-impact.md +14 -0
- package/integrations/claude-code/commands/codexa-plan.md +20 -0
- package/integrations/claude-code/commands/codexa-review.md +23 -0
- package/integrations/claude-code/commands/codexa-status.md +10 -0
- package/integrations/claude-code/hooks/hooks.json +39 -0
- package/integrations/claude-code/scripts/cmd/brief.sh +18 -0
- package/integrations/claude-code/scripts/cmd/impact.sh +35 -0
- package/integrations/claude-code/scripts/cmd/lib.sh +136 -0
- package/integrations/claude-code/scripts/cmd/plan.sh +52 -0
- package/integrations/claude-code/scripts/cmd/review.sh +66 -0
- package/integrations/claude-code/scripts/cmd/status.sh +52 -0
- package/integrations/claude-code/scripts/codexa-mcp.js +111 -0
- package/integrations/claude-code/scripts/lib/codexa-repo.sh +773 -0
- package/integrations/claude-code/scripts/pre-edit.sh +116 -0
- package/integrations/claude-code/scripts/session-start.sh +201 -0
- package/integrations/claude-code/scripts/stop.sh +443 -0
- package/integrations/claude-code/tests/cmd-smoke.sh +310 -0
- package/integrations/claude-code/tests/hook-smoke.sh +1412 -0
- package/package.json +4 -2
- 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
|
|
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
|
|
7
|
-
another MCP client small evidence-backed packets before and
|
|
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
|
|
65
|
-
`--
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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 (
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
|
101
|
-
|
|
102
|
-
|
|
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 (`--
|
|
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`
|
|
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.
|
|
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)):
|
package/dist/cache-lock.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
68
|
+
return claimAndRemoveOwnerLock(lockDir, owner);
|
|
60
69
|
}
|
|
61
|
-
|
|
62
|
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
94
|
-
|
|
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
|
|
113
|
-
|
|
114
|
-
|
|
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"));
|
package/dist/cache-lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-lock.js","sourceRoot":"","sources":["../src/cache-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAmB3D,MAAM,qBAAqB,GAAG,OAAO,CAAC;AACtC,MAAM,uBAAuB,GAAG,MAAM,CAAC;
|
|
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
|
|
16
|
-
if (
|
|
17
|
-
console.log(
|
|
18
|
-
return { status: "
|
|
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
|
-
|
|
21
|
-
|
|
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) {
|
package/dist/cli/hooks.js.map
CHANGED
|
@@ -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
|
|
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
|
|
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;
|