Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
fa6d7f1
fix(plugin): finalize diff scans and preserve resolved work
mldangelo-oai Sep 25, 2026
8f1ba39
Merge remote-tracking branch 'origin/main' into mdangelo/codex/scan-f…
mldangelo-oai Sep 26, 2026
ef94430
fix(plugin): restore Windows recovery and simplify checkpoint handling
mldangelo-oai Sep 26, 2026
1d4aeb7
Merge remote-tracking branch 'origin/main' into mdangelo/codex/scan-f…
mldangelo-oai Sep 26, 2026
f596516
fix(plugin): bind diff digests during finalization
mldangelo-oai Sep 26, 2026
b7628aa
docs(plugin): explain workbench digest binding
mldangelo-oai Sep 26, 2026
9148764
refactor(plugin): close saved review tasks by ID
mldangelo-oai Sep 26, 2026
4de08d5
Merge digest fix and latest main into review task closures
mldangelo-oai Sep 26, 2026
7e224f0
fix(plugin): preserve parent authority during recovery
mldangelo-oai Sep 26, 2026
fa2b697
Merge latest main into diff digest fix
mldangelo-oai Sep 26, 2026
7add248
Merge latest main into saved review task closures
mldangelo-oai Sep 26, 2026
a228808
Sync digest base after merging main
mldangelo-oai Sep 26, 2026
e897064
fix(plugin): preserve sealed digests through later recovery
mldangelo-oai Sep 26, 2026
393c3bf
Merge branch 'mdangelo/codex/scan-diff-digest' into mdangelo/codex/sc…
mldangelo-oai Sep 26, 2026
2cd33b8
refactor(plugin): simplify saved review reconciliation
mldangelo-oai Sep 26, 2026
c090450
fix(plugin): persist worker surface IDs before checkpoints
mldangelo-oai Sep 26, 2026
3df2c69
fix(plugin): preserve draft identities and reopened evidence
mldangelo-oai Sep 26, 2026
773162e
fix(plugin): retain subsequent progress after reopening
mldangelo-oai Sep 26, 2026
b072efd
fix(plugin): preserve accepted candidate outcomes during progress
mldangelo-oai Sep 26, 2026
8a949aa
Merge main into scan finalization
mldangelo-oai Sep 26, 2026
6eefd36
refactor(plugin): simplify saved review reconciliation
mldangelo-oai Sep 27, 2026
2fa5f92
fix(plugin): preserve pending task updates during recovery
mldangelo-oai Sep 27, 2026
734d642
Merge main into scan finalization work
mldangelo-oai Sep 28, 2026
0afe55e
fix(plugin): preserve accepted review state during publication recovery
mldangelo-oai Sep 28, 2026
e0eb11a
fix(plugin): normalize recovered tasks and candidate closures
mldangelo-oai Sep 28, 2026
a71ab47
chore(test): remove unused runtime test import
mldangelo-oai Sep 28, 2026
52a1e5e
fix(plugin): preserve legacy review identities and file-authored cove…
mldangelo-oai Sep 28, 2026
6e9526e
fix(plugin): keep rejected inventory drafts repairable
mldangelo-oai Sep 28, 2026
7f71e4b
fix(plugin): keep raw drafts without promoting rejected heads
mldangelo-oai Sep 28, 2026
789f190
fix(plugin): roll back rejected completion state and preserve legacy …
mldangelo-oai Sep 28, 2026
14c588a
chore(plugin): keep workbench within portable source limit
mldangelo-oai Sep 28, 2026
8bbc5a8
fix(plugin): retain selected worker checkpoint coverage
mldangelo-oai Sep 28, 2026
0b1ba84
refactor(plugin): simplify scan recovery and merge main
mldangelo-oai Oct 2, 2026
df19342
fix(plugin): read recovery timestamps with their snapshots
mldangelo-oai Oct 2, 2026
b15e84d
Merge main and simplify scan settlement cleanup
mldangelo-oai Oct 3, 2026
f94c5ce
fix(recovery): retain valid tasks after malformed updates
mldangelo-oai Oct 3, 2026
c523a5c
fix(recovery): retain legacy surface identities during closeout
mldangelo-oai Oct 3, 2026
3a6684b
fix(recovery): preserve legacy work across interrupted closeout
mldangelo-oai Oct 3, 2026
befa703
fix(recovery): keep reopened work incomplete and preserve task ownership
mldangelo-oai Oct 3, 2026
d19e13a
fix(completion): validate the selected checkpoint before sealing
mldangelo-oai Oct 3, 2026
5300c00
fix(recovery): restore selected checkpoint semantic context
mldangelo-oai Oct 3, 2026
b9bfe2e
fix(recovery): validate reported outcomes and selected coverage
mldangelo-oai Oct 3, 2026
6505b81
fix(recovery): preserve ambiguous legacy surfaces during replacement
mldangelo-oai Oct 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion plugins/codex-security/mcp-app/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1182,7 +1182,6 @@ export function createCodexSecurityServer(): McpServer {
parentSandbox,
artifactContext: {
pluginRoot: PLUGIN_ROOT,
scanRoot: begun.scanDir,
repoRoot: begun.targetPath,
scanId: begun.scanId,
scope: begun.scope,
Expand Down
39 changes: 34 additions & 5 deletions plugins/codex-security/mcp-app/src/artifact-io.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,39 @@ export async function readArtifactText(
context: ArtifactContext,
components: readonly string[],
label: string,
): Promise<string> {
const canonical = await artifactSourcePath(context, components, label);
try {
return await fs.readFile(canonical, "utf8");
} catch {
throw new Error(label + ": the requested artifact cannot be read.");
}
}

export async function readArtifactTextWithMetadata(
context: ArtifactContext,
components: readonly string[],
label: string,
): Promise<{ contents: string; modifiedMs: number }> {
const canonical = await artifactSourcePath(context, components, label);
try {
const handle = await fs.open(canonical, "r");
try {
const contents = await handle.readFile("utf8");
const metadata = await handle.stat();
return { contents, modifiedMs: Number(metadata.mtimeMs) };
} finally {
await handle.close();
}
} catch {
throw new Error(label + ": the requested artifact cannot be read.");
}
}

async function artifactSourcePath(
context: ArtifactContext,
components: readonly string[],
label: string,
): Promise<string> {
validateArtifactComponents(components, label);
const root = await requireArtifactRoot(context.root, label);
Expand Down Expand Up @@ -84,11 +117,7 @@ export async function readArtifactText(
label + ": the requested artifact escaped its bound context.",
);
}
try {
return await fs.readFile(canonical, "utf8");
} catch {
throw new Error(label + ": the requested artifact cannot be read.");
}
return canonical;
}

export async function readArtifactJsonObject(
Expand Down
Loading
Loading