Repository navigation
Codex Security 0.3.0
Highlights
Codex Security Local 0.3.0 reduces unnecessary work in Deep Scan, includes more source files, and makes scan exit codes easier to use in scripts. It also improves recovery when scans are interrupted.
- Deep Scan waits for earlier results to be checked before starting more reviews, avoiding extra reviews when it already has enough information to stop. Fresh API-key and Amazon Bedrock scans also skip a model step during startup when using the bundled plugin and default Node runtime. (#1630, #1555)
- Source selection now includes text files without recognized extensions, build and test files, and JSP and ASP.NET templates. Fixes also preserve unusual filenames and the original contents of saved Git-diff and directory scans. (#1347, #1414, #1345, #1280)
- Resumed scans preserve their original knowledge context, model/provider settings, and selected paths. Interrupted scans retain usable results, and Deep Scan cancellation waits for worker cleanup and state updates before returning. Exhausted usage stops workers instead of triggering more retries. (#1556, #1501, #1602, #1260, #1638)
- The terminal dashboard batches updates during busy scan replays and avoids rereading unchanged logs. It shows token usage even when pricing is unavailable for the selected model. Cost reporting adds Cyber pricing, restores GPT-6 Sol estimates, and includes Codex context-compaction usage. (#1276, #1336, #1585, #1590)
Scan exit codes
Coverage warnings no longer turn a completed scan into a failure. Deep Scans can also finish when an optional detailed writeup is missing; the findings remain in the report.
| Exit code | Meaning |
|---|---|
0 |
The scan completed without a configured severity-threshold failure. |
1 |
Findings met the configured --fail-on-severity threshold. |
2 |
Execution, result integrity, or required output failed. |
A successful exit does not mean every file was reviewed. Check coverage details when your workflow requires that information. (#1633, #1624)
Other CLI and SDK additions
- Use
csas a shorter alias forcodex-security. Policy drafting now works when Codex is installed under your home directory, and app clients can rename and search saved scans. (#1415, #1416, #1180) - Generate and verify fixes from TypeScript with
security.patch(), using the SDK client's authentication, model settings, and cancellation support. Your application controls review, commits, and publication. When you request a pull request for a supplied issue, CLI results now include its branch and URL. (#1635, #1645) - Owner suggestions prefer committed CODEOWNERS before falling back to Git history. In Codex, the new
$cloud-findingsskill reads findings, reports, and recorded validation from existing Codex Security Cloud scans. (#1519, #1422)
Other fixes cover GitLab merge-request publication, Windows process launch and network-share database paths, configuration errors, YAML error messages, and plugin integrity checks after Python creates cache files. The package includes Codex CLI/SDK 0.162.1. Display names now say Codex Security Local; the package remains @openai/codex-security.
GitHub Action
A new GitHub Action runs repository and pull-request scans in CI. Set the source scope and time and cost budgets, review job summaries, and download saved results. You can upload findings to GitHub code scanning as SARIF and fail a job at a chosen severity.
The initial Action supports GitHub.com, Linux x64 runners, and API-key authentication. Action releases follow the verified npm release. See the Action guide. (#1015, #1418)
Upgrade notes
Read the sections that apply to your scripts, saved scans, or integrations before updating from 0.2.0.
Scripts and integrations that read scan results
If you consume scan JSON or SDK types, replace coverage.completeness, CoverageCompleteness, bulk/component incomplete counters, comparison comparable, and Action scan-status: incomplete handling with manifest.scan.status and exit codes. Action scan-status now uses completed, failed, or skipped. If a later scan does not find a previously reported finding in the code it scanned, comparison returns not_observed. Excluded paths and uncertain matches remain unknown; resolved requires explicit closure as already fixed.
New drafts, imports, worker output, and custom-validation results must use the current codeEvidence, rootCause, attackPath.dataflow, and evidenceRefs fields. Migrate unfinished drafts or finish them with their original version. Completed historical reports remain readable and exportable. (#1633)
Standalone validation
validate now assesses source in a read-only sandbox. It does not build or execute the target, run tests or proofs of concept, or contact services. Save the assessment from CLI stdout or SDK result.report; the validator no longer writes report files:
codex-security validate findings.json > assessment.mdRun a separate reproduction when you need runtime proof. Validation within Standard, Deep, and Diff scans keeps its existing behavior. (#1423)
Resuming existing scans
Keep the private .scan-knowledge.json file with scan artifacts. Resume uses this captured knowledge-base context even if the original documents change or disappear. Older individual scans that used knowledge bases but lack this snapshot require a new scan. Scans without knowledge bases and bulk scans with captured context remain resumable. Reruns use current inputs. (#1556)
Reading compressed .jsonl.zst sessions requires Node 22.15+ within 22.x, or Node 24/26. Node 22.13–22.14 still supports plain logs but cannot resume compressed sessions. (#1428)
Owner suggestion consumers
The owner-suggestion JSON report now uses schemaVersion: 2. Owners can be GitHub users, teams, or email-only identities. Check for a non-null owner, then use "handle" in owner before reading owner.handle or owner.email. Do not assume every owner has a Git name/email pair. (#1519)
Installation and Windows settings
Global installs now create the cs alias. If npm reports EEXIST because another tool owns that name, use npx @openai/codex-security. Windows defaults to the elevated sandbox backend and honors an explicit backend selection. (#1415, #1281)
Custom plugins and direct helper users
Upgrade custom plugins to the current archive/comparison protocols. New and resumed Deep scans also require directDeepScanEngine: 1, workerProviderSnapshot: 4, and isolated workers. Alternatively, omit pluginPath/--plugin-path to use the bundled plugin. Replace direct node ./mcp/server.mjs launches with the current plugin launcher.
For retained findings-storage and severity operations, replace direct calls to retired Python helpers with scripts/launch_codex_security_mcp --helper COMMAND (the .cmd launcher on Windows). Pass JSON on stdin with an absolute stateDirectory and the helper payload. Normal CLI/SDK callers need no helper migration. The selected state directory must be writable; the temporary-state fallback is removed. See the SDK compatibility notes and helper reference. (#1548, #1408, #1543)
Local deduplication and findings service removal
Saved-scan deduplication now uses local SQLite storage by default, without a running service. It caches embeddings and review progress so interrupted work can resume.
The serve command, its --port option, start:server, startFindingsServer, browser dashboard, and findings-service Compose deployment are removed. Use codex-security dedupe --scan SCAN_ID locally, or supply --findings-url for an independently hosted compatible service.
Keep existing state directories and volumes. Select the local database through CODEX_SECURITY_STATE_DIR; a separate service volume is not selected automatically. Generating or refreshing embeddings with the built-in embedder requires an API key. The @openai/codex-security/server entrypoint retains its storage and embedding exports. See the findings guide. (#1340, #1338)
What's Changed
Breaking changes
- refactor(plugin)!: move findings and dashboard helpers to Node by @mldangelo-oai in #1408
- refactor(findings)!: remove the local findings serve command by @kmbroai in #1340
- refactor!: remove legacy message and plugin compatibility by @mldangelo-oai in #1548
- refactor(severity)!: move severity persistence to Node by @mldangelo-oai in #1543
- fix(scans)!: preserve original knowledge context when resuming by @mldangelo-oai in #1556
- fix(scans)!: simplify scan outcomes by @mldangelo-oai in #1633
- feat(owners)!: prioritize CODEOWNERS in owner suggestions by @jameshiester-oai in #1519
- feat(validation)!: make standalone validation source-only by @zcrab-oai in #1423
Features
- feat(action): add Codex Security GitHub Action by @dans-oai in #1015
- feat: support custom scan names by @ianw-oai in #1180
- feat: deduplicate saved scans with local SQLite by @kmbroai in #1338
- feat(action): support optional Cyber access program selection by @dans-oai in #1516
- feat(onboarding): add cs alias and clarify onboarding by @mldangelo-oai in #1415
- feat(release): align Action publication with CLI releases by @mldangelo-oai in #1418
- feat(sdk): generate patches without managing a CLI process by @ianw-oai in #1635
- feat(cloud): read saved Cloud findings in Codex by @alandelong-oai in #1422
Fixes
- fix(deps): update vulnerable dependencies after cooldown by @mldangelo-oai in #1318
- fix(preview): preserve bounded source and finding details by @mldangelo-oai in #1275
- fix(workbench): preserve trailing whitespace in Git paths by @WenJing95 in #1135
- fix(snapshot): reject a destination that aliases the source database by @Yi-111-a in #1138
- fix(multiscan): surface run warnings in campaign summaries by @anirudhnshandilya in #1172
- fix(contract): align sealed scan reader compatibility by @choksi2212 in #1175
- fix(ci): run consistent checks for Markdown changes by @mldangelo-oai in #1257
- fix(evals): align triage graders with supported behavior by @mldangelo-oai in #1245
- fix(plugin): recover incomplete staging and preserve bundles by @mldangelo-oai in #1255
- fix(cli): preserve canonical parent IDs for scan reruns by @mldangelo-oai in #1244
- fix(evals): reject SQL injection without an execution sink by @mldangelo-oai in #1053
- fix(plugin): migrate Atlassian app and simplify finding workflows by @mldangelo-oai in #1039
- fix(ci): restore formatting and concurrent plugin repairs by @mldangelo-oai in #1328
- fix(plugin): preserve carriage-return inventory filenames by @mldangelo-oai in #1327
- fix(cli): add Cyber pricing and hide unavailable costs by @ianw-oai in #1336
- fix(plugin): include JSP and ASP.NET templates in scan inventories by @ilaigold in #1345
- fix(plugin): close C# raw strings on the matching quote count by @ilaigold in #1346
- fix(mcp): preserve questions and choice descriptions in input requests by @mldangelo-oai in #1050
- fix(workbench): preserve sealed CSV artifacts during export by @mldangelo-oai in #1047
- fix(sdk): report worker sessions without model progress markers by @mldangelo-oai in #962
- fix: preserve per-scan runtime and worker settings by @mldangelo-oai in #1281
- fix(cli): unify structured scan failure responses by @mldangelo-oai in #1080
- fix(config): inherit null overrides and preserve literal paths by @mldangelo-oai in #1290
- fix: resolve path aliases consistently across scan workflows by @mldangelo-oai in #1267
- fix(plugin): include text files in scans regardless of extension by @mldangelo-oai in #1347
- fix(plugin): include build and test files in scan inputs by @mldangelo-oai in #1414
- fix(plugin): load saved feedback and align scan completion instructions by @mldangelo-oai in #1264
- fix(ci): avoid saving interrupted pnpm caches by @mldangelo-oai in #1419
- fix: preserve Deep Scan worker context limits by @mldangelo-oai in #1417
- fix(cli): show file scope until scan review progress begins by @mldangelo-oai in #464
- fix: preserve per-scan endpoints in Deep Scan workers by @mldangelo-oai in #1326
- fix(evals): hide expected answers and test the checkout's skill by @mldangelo-oai in #1054
- fix(scans): preserve saved results when scans stop or restart by @mldangelo-oai in #1269
- fix(build): keep usable bundles after failures and preserve release labels by @mldangelo-oai in #1263
- fix(reports): preserve distinct fixes from merged findings by @mldangelo-oai in #905
- fix(plugin): read source excerpts from the scanned target by @mldangelo-oai in #1063
- fix(sdk): exclude inherited parent events from saved worker logs by @mldangelo-oai in #1060
- fix(plugin): report worker capacity from merged Codex settings by @mldangelo-oai in #1055
- fix: simplify action cleanup and stabilize provider isolation tests by @mldangelo-oai in #1421
- fix(auth): preserve logout across credential imports by @mldangelo-oai in #759
- fix: preserve severity assessments for each scan by @mldangelo-oai in #1058
- fix(cli): show active reviews and result consolidation during Deep Scan by @mldangelo-oai in #1253
- fix(sdk): keep bulk-scan knowledge and settings stable on resume by @mldangelo-oai in #1059
- fix(auth): reject plaintext remote login URLs by @anirudhnshandilya in #1331
- fix: keep unusable DOCX numeric references as literal text by @mldangelo in #123
- fix(deep-scan): finish cancellation when preflight ignores termination by @mldangelo-oai in #1049
- fix(plugin): preserve closed stdin when launching helpers by @mldangelo-oai in #1329
- fix(publish): retain recovery guidance on canceled uploads by @mldangelo-oai in #680
- fix(release): retry container releases without replacing a newer latest tag by @mldangelo-oai in #1046
- fix(sdk): read compressed Codex session logs by @LittleYier in #1428
- fix(docx): preserve manual line breaks by @dipeshbabu in #186
- fix(reports): preserve saved diff snapshot provenance by @mldangelo-oai in #1286
- fix(auth): cancel inherited pipes after the login process exits by @dipeshbabu in #1068
- fix(cli): identify local plugin and knowledge-base failures by @mldangelo-oai in #463
- fix(deep-scan): resume scans when old worker prompts are missing by @mldangelo-oai in #900
- fix(artifacts): protect saved history when archiving scan output by @mldangelo-oai in #1271
- fix(findings): preserve scan history and publication outcomes by @mldangelo-oai in #1270
- fix(deep-scan): match user context before reusing discovery by @mldangelo-oai in #1048
- fix(scan): report incomplete results as errors and deduplicate log warnings by @mldangelo-oai in #977
- fix(telemetry): preserve request attribution across CLI, SDK, and Deep Scan by @mldangelo-oai in #1424
- fix(contract): reject control characters in remote targets during finalization by @Mihir-Rabari in #1523
- fix(plugin): validate canonical code-evidence and deferred paths by @peter-research in #1522
- fix(sdk): reject special filesystem path targets before scanning by @peter-research in #1524
- fix(sdk): honor cancellation during PDF knowledge-base extraction by @peter-research in #1529
- fix(sdk): ignore status markers inside Markdown fences by @peter-research in #1525
- fix(artifacts): reject standalone collections inside the target by @mldangelo-oai in #1430
- fix(findings): preserve structured findings API errors by @mldangelo-oai in #1081
- fix(history): wrap text by terminal display width by @WenJing95 in #1513
- fix(workbench): preserve argument text and typed state failures by @mldangelo-oai in #1500
- fix(runtime): preserve worker settings and executable selection by @mldangelo-oai in #1501
- fix(discovery): normalize candidates against selected sources by @mldangelo-oai in #1502
- fix(deep-scan): preserve coordinator ownership and source novelty by @mldangelo-oai in #1503
- fix(diagnostics): retain underlying artifact and process failures by @mldangelo-oai in #1504
- fix(workbench): preserve finding queries and timestamp order by @mldangelo-oai in #1505
- fix(scans): preserve archived workflows and saved scan replay by @mldangelo-oai in #1506
- fix(publication): pass payloads in memory and preserve failures by @mldangelo-oai in #1507
- fix(evals): keep expected answers hidden and preserve each case’s settings by @mldangelo-oai in #1261
- fix(artifacts): preserve import and export representations by @mldangelo-oai in #1510
- fix(dashboard): frame terminal input and skip unused activity by @mldangelo-oai in #1511
- fix(evals): parse complete triage JSON before fenced content by @mldangelo-oai in #1512
- fix(targets): preserve scoped Git inventories and directory snapshots by @mldangelo-oai in #1280
- fix(cli): keep scan identity visible in results and failures by @mldangelo-oai in #1554
- fix(onboarding): improve policy onboarding for global installs by @mldangelo-oai in #1416
- fix(sdk): restore GPT-6 Sol cost estimates and budgets by @mldangelo-oai in #1585
- fix(scan): enforce Deep Scan scope across execution adapters by @mldangelo-oai in #1557
- fix(findings): retain requested repository paths in output by @mldangelo-oai in #1045
- fix(dashboard): keep dashboards responsive and show observed usage by @mldangelo-oai in #1276
- fix(validation): mark source review complete before custom validation by @mldangelo-oai in #1252
- fix(targets): preserve Git checkout formats and raw POSIX inventory paths by @mldangelo-oai in #1288
- fix(package): inspect unpacked files for internal references by @mldangelo-oai in #618
- fix(dashboard): retain fragmented input and final scan activity by @mldangelo-oai in #1284
- fix(deep-scan): prevent replaced coordinators from overwriting scan results by @mldangelo-oai in #916
- fix(workbench): serialize registrations with archival by @mldangelo-oai in #1587
- fix(deep-scan): preserve pager state in reducer retry guidance by @mldangelo-oai in #1589
- fix(mcp): exclude forbidden fields from artifact tool schemas by @mldangelo-oai in #1588
- fix(scan): clarify tool selection and worker follow-ups by @mldangelo-oai in #1591
- fix(cost): include native compaction usage by @mldangelo-oai in #1590
- fix(native): preserve Windows process launch behavior by @mldangelo-oai in #1601
- fix(deep-scan): preserve selected scope through recovery by @mldangelo-oai in #1602
- fix(deep-scan): finish saving cancellation before returning to callers by @mldangelo-oai in #1260
- fix(scan): resolve workflows through readable plugin paths by @mldangelo-oai in #1592
- fix(gitlab): correct GitLab patch publication by @kmbroai in #817
- fix(cli): stop --format yaml from cutting off error messages by @i098 in #1613
- fix: stop Deep Scan from starting extra reviews during result checks by @ianw-oai in #1630
- fix: Python cache files break plugin integrity checks by @ianw-oai in #1625
- fix: complete Deep scans with missing optional writeups by @mldangelo-oai in #1624
- fix: stop Deep Scan workers when usage is exhausted by @ianw-oai in #1638
- fix(config): show why configuration files fail to load by @ianw-oai in #1634
- fix: prevent generated finding IDs from breaking later draft updates by @ianw-oai in #1636
- fix(plugin): open read-only SQLite databases from Windows UNC paths by @WenJing95 in #1648
- fix(plugin): rename display surfaces to Codex Security Local by @faizan-oai in #1644
- fix(cli): return pull request details for supplied-issue patches by @WenJing95 in #1645
Documentation
- docs: clarify READMEs and separate SDK reference guides by @mldangelo-oai in #1307
- docs(deep-scan): keep workbench-derived fields out of worker draft guidance by @choksi2212 in #1177
- docs(examples): install MCP dependencies before plugin build by @mldangelo-oai in #1285
- docs: explain pull request labels in agent instructions by @mldangelo-oai in #1521
- docs(scans): explain connected repository review workflows by @mldangelo-oai in #1553
- docs(docker): clarify persistent state and credential paths by @mldangelo-oai in #1586
- docs(providers): clarify API-key model and access-program selection by @mldangelo-oai in #1037
Other changes
- refactor(mcp): share common tool annotations by @mldangelo-oai in #1258
- chore(deps): update Codex CLI and SDK to 0.162.0-alpha.16 by @dependabot[bot] in #1321
- chore(deps): update tsx and yaml tooling by @dependabot[bot] in #1322
- chore(deps): update Action Node.js type definitions by @dependabot[bot] in #1323
- chore(deps): update Action TypeScript compiler by @dependabot[bot] in #1324
- refactor(plugin): port patch-risk validation to TypeScript by @kmbroai in #838
- refactor(plugin): port deep-review input to TypeScript by @kmbroai in #839
- refactor(plugin): migrate rank shard helpers to TypeScript by @kmbroai in #841
- refactor(plugin): migrate rank pool helpers to TypeScript by @kmbroai in #842
- refactor(plugin): migrate repository scope binding to TypeScript by @kmbroai in #843
- chore(deps): bump napi from 3.12.2 to 3.13.0 in /plugins/codex-security/native by @dependabot[bot] in #1320
- chore(deps): update Action CLI runtime by @dependabot[bot] in #1325
- chore(deps): bump sharp from 0.35.4 to 0.35.5 in /evals/triage-finding by @dependabot[bot] in #1337
- refactor(workbench): simplify usage bookkeeping by @mldangelo-oai in #1349
- refactor(workbench): simplify command contexts and transactions by @mldangelo-oai in #1353
- refactor(action): derive inputs and consolidate test configuration by @mldangelo-oai in #1348
- refactor(sdk): simplify publication evidence bookkeeping by @mldangelo-oai in #1387
- refactor(sdk): reuse datetime validation for saved scan timestamps by @mldangelo-oai in #1351
- refactor(targets): share setup for Git diff scan targets by @mldangelo-oai in #1411
- refactor(multiscan): simplify saved scan settings and test setup by @mldangelo-oai in #1405
- refactor(runtime): simplify Windows credential permission parsing by @mldangelo-oai in #1392
- refactor(sdk): share CLI cancellation signal handling by @mldangelo-oai in #1371
- refactor(mcp): simplify saved-coverage and tool-registration helpers by @mldangelo-oai in #1363
- refactor(preview): simplify fitting source previews to byte limits by @mldangelo-oai in #1350
- refactor(build): infer helper types instead of duplicating declarations by @mldangelo-oai in #1358
- refactor(sdk): simplify scan usage and cost accounting by @mldangelo-oai in #1377
- refactor(sdk): share finding-group logic across scan comparisons by @mldangelo-oai in #1364
- refactor(ci): share repeated workflow steps with YAML aliases by @mldangelo-oai in #1361
- refactor(packaging): simplify inventory checks and build fixtures by @mldangelo-oai in #1389
- refactor(workbench): simplify command preparation and transactions by @mldangelo-oai in #1390
- refactor(release): share published version history and remove duplicate checks by @mldangelo-oai in #1381
- refactor(mcp): simplify artifact schemas and saved-finding handling by @mldangelo-oai in #1356
- refactor(reports): share finding formatting and finalization helpers by @mldangelo-oai in #1355
- refactor(sdk): simplify scan event callback dispatch by @mldangelo-oai in #1354
- refactor(ranking): reuse validated inputs and simplify preview sizing by @mldangelo-oai in #1369
- refactor(release): share note generation and test setup by @mldangelo-oai in #1373
- chore(deps): update Codex CLI and SDK to 0.162.0-alpha.18 by @dependabot[bot] in #1420
- refactor(mcp): simplify internal Deep Scan state and finding caches by @mldangelo-oai in #1352
- refactor(publish): simplify evidence grouping and parsing by @mldangelo-oai in #1368
- refactor(ci): reuse repeated workflow steps by @mldangelo-oai in #1385
- refactor(sdk): simplify CLI completion and display state by @mldangelo-oai in #1384
- refactor(sdk): reuse client construction and scan data by @mldangelo-oai in #1374
- refactor(workbench): simplify report formatting and scan completion by @mldangelo-oai in #1366
- refactor(tooling): remove duplicate benchmark checks and line collection by @mldangelo-oai in #1359
- refactor(plugin): replace language parsers with source previews by @mldangelo-oai in #1391
- refactor(plugin): share workbench migration SQL by @mldangelo-oai in #1333
- refactor(plugin): initialize workbench databases with Node SQLite by @mldangelo-oai in #1335
- chore(deps): bump napi-derive from 3.6.9 to 3.6.10 in /plugins/codex-security/native by @dependabot[bot] in #1437
- chore(deps): update Docker-in-Docker and Node devcontainer features by @dependabot[bot] in #1436
- chore(deps): bump napi-build from 2.5.0 to 2.6.0 in /plugins/codex-security/native by @dependabot[bot] in #1438
- chore(deps): bump the codex group across 3 directories with 2 updates by @dependabot[bot] in #1439
- chore(deps): bump the third-party group across 2 directories with 3 updates by @dependabot[bot] in #1514
- chore(deps): restore devcontainer pins during cooldown by @mldangelo-oai in #1515
- chore(ona): manage the findings service lifecycle by @kylos101 in #700
- refactor: filter model schema composition while parsing by @mldangelo-oai in #1461
- refactor: compare Deep Scan progress fields directly by @mldangelo-oai in #1458
- refactor(sdk): load scan contract documents in one sequence by @mldangelo-oai in #1481
- refactor: reuse native equality for contract lists by @mldangelo-oai in #1457
- refactor: simplify artifact export metadata transport by @mldangelo-oai in #1462
- refactor: simplify scan result construction by @mldangelo-oai in #1445
- refactor: reuse artifact JSON schema definitions by @mldangelo-oai in #1443
- refactor: reuse object validation primitives by @mldangelo-oai in #1452
- refactor: share MCP response and annotation construction by @mldangelo-oai in #1444
- chore(deps): use Codex 0.162.0 stable by @dependabot[bot] in #1533
- chore(deps): update incur and KaTeX by @dependabot[bot] in #1534
- refactor(mcp): reuse SDK validation and protocol test helpers by @mldangelo-oai in #1498
- chore(deps): bump napi from 3.13.0 to 3.14.0 in /plugins/codex-security/native by @dependabot[bot] in #1532
- refactor: group deduplication pairs by existing roots by @mldangelo-oai in #1468
- refactor(cli): simplify export and progress delegation by @mldangelo-oai in #1478
- chore(deps-dev): bump ruff from 0.16.9 to 0.16.10 in /plugins/codex-security by @dependabot[bot] in #1531
- refactor: share workbench migration repair instructions by @mldangelo-oai in #1496
- ci(tests): use Bun native sharding by @mldangelo-oai in #1479
- refactor: reuse scan contract readers and projection helpers by @mldangelo-oai in #1480
- refactor(cli): derive value options from command schemas by @mldangelo-oai in #1477
- ci(deps): enforce devcontainer cooldown before merge by @mldangelo-oai in #1517
- refactor(mcp): share tool registration and annotations by @mldangelo-oai in #1485
- refactor: consolidate workbench command handling by @mldangelo-oai in #1494
- refactor: reuse workbench finding projection metadata by @mldangelo-oai in #1442
- refactor(mcp): use native promise and array primitives by @mldangelo-oai in #1488
- refactor: simplify validated artifact reconciliation by @mldangelo-oai in #1454
- refactor(mcp): remove unused artifact declarations by @mldangelo-oai in #1483
- refactor: share workflow GitHub API calls by @mldangelo-oai in #1466
- refactor: simplify session cost tracking by @mldangelo-oai in #1456
- refactor: simplify publication reconciliation by @mldangelo-oai in #1455
- refactor: share final scan schema definitions by @mldangelo-oai in #1493
- refactor: share Deep Scan retry archiving by @mldangelo-oai in #1465
- ci: reuse repeated workflow configuration by @mldangelo-oai in #1464
- refactor: remove redundant dashboard copies by @mldangelo-oai in #1451
- refactor: consolidate Deep Scan preflight compatibility coverage by @mldangelo-oai in #1482
- refactor(mcp): use workbench for parent draft publication by @mldangelo-oai in #1487
- refactor: simplify workbench history and usage readers by @mldangelo-oai in #1495
- refactor(release): consolidate GitHub release publication by @mldangelo-oai in #1474
- refactor: simplify scan configuration processing by @mldangelo-oai in #1459
- fix(processes): preserve cancellation and child diagnostics by @mldangelo-oai in #1508
- fix(inventory): preserve filename bytes and Unicode owner evidence by @mldangelo-oai in #1509
- refactor(mcp): validate artifact requests at tool boundaries by @mldangelo-oai in #1489
- chore(deps): update Node types and string-width by @dependabot[bot] in #1545
- refactor(mcp): share candidate ledger updates by @mldangelo-oai in #1490
- refactor(runtime): share Codex response handling across scan modes by @mldangelo-oai in #917
- refactor(scan): run API-key and Bedrock Deep Scans directly by @mldangelo-oai in #1555
- chore(deps): update Codex CLI and SDK to 0.162.1 by @dependabot[bot] in #1563
- chore(deps): update native libc to 0.2.190 by @dependabot[bot] in #1564
- chore(deps): update MCP SDK to 1.32.0 by @dependabot[bot] in #1565
- ci: bump taiki-e/install-action from 2.87.22 to 2.87.23 by @dependabot[bot] in #1562
- ci: bump taiki-e/install-action from 2.87.23 to 2.87.24 by @dependabot[bot] in #1597
- chore(deps): update PDF.js to 6.4.299 by @dependabot[bot] in #1598
- chore(deps): update Ink to 8.0.0 by @dependabot[bot] in #1599
- refactor(artifacts): share scan result validation across scan modes by @mldangelo-oai in #920
- refactor(native): preserve process paths and environment values by @mldangelo-oai in #1429
- refactor(workbench): remove repeated Python message projections by @mldangelo-oai in #1576
- refactor(sdk): derive result interfaces from schemas by @mldangelo-oai in #1579
- refactor(findings): share persisted finding normalization by @mldangelo-oai in #1574
- chore(deps): bump napi from 3.14.0 to 3.14.1 in /plugins/codex-security/native by @dependabot[bot] in #1617
- chore(deps): bump the third-party group across 2 directories with 2 updates by @dependabot[bot] in #1615
- chore(deps): bump napi-derive from 3.6.10 to 3.6.11 in /plugins/codex-security/native by @dependabot[bot] in #1618
- refactor(schemas): define compact artifact contracts in Zod by @mldangelo-oai in #1575
- ci: bump taiki-e/install-action from 2.87.24 to 2.87.26 by @dependabot[bot] in #1616
- refactor(sdk): reuse runtime message and result handling by @mldangelo-oai in #1583
- refactor(workbench): share command argument encoding by @mldangelo-oai in #1577
- chore: simplify plugin tests and validation example by @mldangelo-oai in #1621
- ci: fix image pull failures and Windows diagnostic test by @mldangelo-oai in #1641
- ci: bump actions/upload-artifact from 7.0.1 to 7.0.2 by @dependabot[bot] in #1647
- ci: bump actions/setup-node from 7.0.0 to 7.1.0 by @dependabot[bot] in #1651
- ci: bump actions/download-artifact from 8.0.1 to 8.0.2 by @dependabot[bot] in #1650
- chore(deps): update Docker-in-Docker and Node devcontainer features by @dependabot[bot] in #1530
- chore(deps): bump the third-party group across 2 directories with 2 updates by @dependabot[bot] in #1652
- chore(deps): update napi and napi-derive native dependencies by @dependabot[bot] in #1646
New Contributors
- @dans-oai made their first contribution in #1015
- @Yi-111-a made their first contribution in #1138
- @choksi2212 made their first contribution in #1175
- @ilaigold made their first contribution in #1345
- @mldangelo made their first contribution in #123
- @Mihir-Rabari made their first contribution in #1523
- @peter-research made their first contribution in #1522
- @i098 made their first contribution in #1613
- @jameshiester-oai made their first contribution in #1519
- @alandelong-oai made their first contribution in #1422
Full Changelog: npm-v0.2.0...npm-v0.3.0