Repository navigation
·
101 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Highlights
- The npm package includes Developer ID-signed native addons for Apple Silicon and Intel Macs. This lets Codex Desktop load the addon when preparing review items.
- Deep Scan runs independent Standard reviews in batches. Workers can share leads and verify each other's evidence. The final report groups observations that have the same fix and retains the source locations from each review. Deep Scan guide
- External scanner imports are enabled by default in the CLI, SDK, and plugin. You can preview supported reports, save findings locally, and publish supported findings to Cloud. The scanner guides list the accepted formats and which inputs are local-only. Scanner import guides
scans logsfinds sessions faster in large compressed histories. The GitHub Action also includes scan scope limitations in its job summary, including when a scan returns zero findings.
Upgrade notes
- Deep Scan budgets.
--stop-after-no-newnow counts consecutive completed Standard reviews that add no findings. If you depend on a particular run length, review this threshold alongside--max-discovery-runsand--max-time. Deep Scan settings - Scanner imports. Remove
CODEX_SECURITY_ENABLE_EXTERNAL_IMPORTSfrom launch scripts. A legacy value of0no longer disables imports. Scanner import guides - Linux Compose deployments. The bundled seccomp profile restricts direct socket families and blocks
ptrace,process_vm_readv, andprocess_vm_writev. If a custom tool needs one of these operations, test it against your deployment's profile before upgrading. Container guide - Source builds. Sparse SDK checkouts must include
plugins/codex-security/mcp-app/src/deep-scan-settings.ts. Upgrade or roll back the bundled plugin as a unit. Source build change - Package verification. The source package checker rejects sparse tar entries. If an unsigned candidate was built with a sparse-aware archiver, recreate it with
pnpm packfromsdk/typescript. Use the original published archive for release recovery. Package verification change
All changes
What's Changed
Breaking changes
- feat!: deep scan upgrade by @ianw-oai in #2118
- refactor(package)!: reject sparse entries in release tarballs by @mldangelo-oai in #2456
- refactor!: consolidate scan, workbench and release rules by @mldangelo-oai in #2452
Features
- feat: expose durable scan lifecycle telemetry by @mldangelo-oai in #2274
- feat(imports): import saved Semgrep selections through the CLI by @mldangelo-oai in #2166
- feat(imports): collect Semgrep findings through Guardian and the Web API by @mldangelo-oai in #2167
- feat(imports): collect Snyk Code and Open Source findings locally by @mldangelo-oai in #2168
- feat(imports): publish hosted scanner findings to Cloud by @mldangelo-oai in #2085
- feat(container)!: restrict sockets and process tracing in Compose by @MauricioPerera in #160
- feat(import): collect and import Checkmarx SAST findings by @mldangelo-oai in #2269
- feat(imports): read native Trivy dependency reports in the SDK by @mldangelo-oai in #2087
- feat(deep-scan): share investigation notes between workers by @mldangelo-oai in #2265
- feat(imports): import Trivy findings locally and to Cloud by @mldangelo-oai in #2276
- feat(imports): import Tenable One code repository findings locally by @mldangelo-oai in #2343
- feat(imports): enable external scanner imports by default by @mldangelo-oai in #2360
- feat(imports): publish Guardian findings and clarify scanner evidence by @mldangelo-oai in #2377
- test(scans): cover private endpoint profile cleanup and replay by @TomCN0803 in #125
Fixes
- fix(action): use the singular for one additional finding in the job summary by @WenJing95 in #2252
- fix(dashboard): keep scrolled history in place at the history cap by @LittleYier in #2266
- fix(knowledge-base): skip macOS metadata files in knowledge-base folders by @Shizoqua in #2270
- fix(knowledge-base): keep non-breaking hyphens in DOCX text by @Shizoqua in #2272
- fix(imports): honor bounded Retry-After on hosted scanner reads by @mldangelo-oai in #2086
- fix(runtime): handle disconnected child stdin on macOS by @mldangelo-oai in #2275
- fix(deep-scan): stop workers when the plan does not include Codex by @Shizoqua in #1843
- fix(knowledge-base): skip LibreOffice lock files in knowledge-base folders by @Shizoqua in #2291
- fix(sdk): pass severity record efforts through to the host by @Shizoqua in #1842
- fix(knowledge-base): ignore DOCX tab stop definitions when extracting text by @Shizoqua in #2284
- fix(deep-scan): recognize usage limits reported during compaction by @Shizoqua in #1844
- fix(knowledge-base): omit DOCX drawing positions and sizes from extracted text by @Shizoqua in #2051
- fix(targets): report a failed ignored-but-tracked file listing by @kevin9327 in #864
- fix(targets): check resolved path types before scan registration by @sylvesterkaczmarek in #549
- fix(cost): preserve worker activity when a session log is unreadable by @feiiiiii5 in #970
- fix(activity): preserve shell-escaped whitespace in repository paths by @RakamakadoN in #2163
- fix(runtime): protect HF_TOKEN and defer the Hugging Face scan preset by @NielsRogge in #277
- fix(findings): align severity badges in finding tables by @mldangelo in #122
- fix(hooks): use trusted Git when installing hooks by @GautamSharma99 in #92
- fix(deep-scan): preserve distinct findings and bound duplicate comparisons by @mldangelo-oai in #2313
- fix(bulk-scan): reject invalid saved attempt numbers by @mldangelo-oai in #2292
- fix(cli): explain the cost limit in scan dry runs by @mldangelo-oai in #2295
- fix(windows): inspect long credential-home descendant paths by @mldangelo-oai in #2294
- fix(knowledge-base): preserve documents with AppleDouble-style names by @mldangelo-oai in #2312
- fix(sdk): persist canceled scans with their measured cost by @mldangelo-oai in #2307
- fix(imports): preserve Guardian repository identity during replay by @mldangelo-oai in #2308
- fix(deep-scan): recover the latest public findings on interruption by @mldangelo-oai in #2310
- fix(sdk): forward component scan lifecycle and deep progress by @mldangelo-oai in #2317
- fix(deep-scan): align worker artifact validation with publication by @mldangelo-oai in #2315
- fix(imports): bound remote error bodies and retain HTTP failure context by @mldangelo-oai in #2320
- fix(deep-scan): checkpoint accepted reviews before honoring stop conditions by @mldangelo-oai in #2318
- fix(dashboard): keep the viewport anchored during worker updates by @mldangelo-oai in #2298
- fix(deep-scan): attribute comparison sessions to usage and logs by @mldangelo-oai in #2299
- fix(deep-scan): require consistent evidence before merging reports by @mldangelo-oai in #2301
- fix(deep-scan): preserve inherited MCP transports and native profile server names by @mldangelo-oai in #2303
- fix(deep-scan): stop on known policy refusal messages by @SammyTourani in #1035
- fix(cost): preserve healthy worker updates on rollout I/O errors by @dipeshbabu in #2178
- fix(findings): guide cross-mode matching with saved evidence by @IvanCaceres in #832
- fix(findings): preserve valid evidence during stopped scan recovery by @Haiduongcable in #171
- fix(reports): explain omitted informational findings by @mldangelo in #155
- fix(deep-scan): avoid worker dispatch for empty targets by @Muzzy5150 in #2054
- fix(auth): honor native provider API-key settings for scans by @Alessio2405 in #139
- fix(imports): preserve Guardian attribution and Snyk evidence on replay by @mldangelo-oai in #2316
- fix(scans): preserve inference endpoints on rerun and resume by @mldangelo-oai in #2286
- fix(deep-scan): reserve worker directories across coordinator handoffs by @mldangelo-oai in #2322
- fix(history): preserve native turn failures observed before cancellation by @Hughhhhcoder in #735
- fix(workbench): preserve archived deep scans and streamline progress reads by @mldangelo-oai in #2314
- fix(deep-scan): show direct coordinator events in verbose CLI scans by @mldangelo-oai in #2323
- fix(deep-scan): report completed audits and batch consolidation by @mldangelo-oai in #2305
- fix(deep-scan): reject unpublishable worker report metadata by @mldangelo-oai in #2319
- fix(imports): distinguish empty reports from failed scanners and exclusions by @mldangelo-oai in #2082
- fix(deep-scan): preserve worker configuration, retry and failure diagnostics by @mldangelo-oai in #2309
- fix(deep-scan): run report comparisons without interactive tools by @mldangelo-oai in #2304
- fix(deep-scan): pin Deep Scan worker executable by @soyeon-oai in #764
- fix(cli): guide recovery when a refresh token was already used by @mldangelo-oai in #2289
- fix(cost): enforce scan budgets from verified usage by @mldangelo-oai in #465
- fix(deep-scan): preserve differing threat models and use primary repair sites by @mldangelo-oai in #2306
- fix(deep-scan): preserve independently fixable findings across batches and resumes by @mldangelo-oai in #2311
- fix: read oversized findings from temporary files by @ianw-oai in #2342
- fix(deep-scan): preserve disputed comparisons across context retries by @mldangelo-oai in #2321
- fix(telemetry): preserve usage coverage and operation outcomes by @mldangelo-oai in #1841
- fix(diagnostics): preserve saved-scan errors and recovery advice by @mldangelo-oai in #1266
- fix(imports): preserve AWS code scanning evidence and retries by @mldangelo-oai in #2347
- fix(deep-scan): reject directory trees emptied before dispatch by @dipeshbabu in #2181
- fix(workbench): restore usage accounting on preview databases by @mldangelo-oai in #2352
- fix(scans): count historical files for unreviewable local renames by @mldangelo-oai in #2101
- fix(sdk): privately create Windows multiscan campaign output by @cjc0013 in #2344
- fix(sdk): pass validation record efforts through to the host by @Shizoqua in #2355
- fix(runtime): batch Windows credential ACL inspection by @dipeshbabu in #2349
- fix(cli): use the singular for one finding in import prompts by @WenJing95 in #2345
- fix(imports): verify scanner evidence and route workspace findings by @mldangelo-oai in #2353
- fix(deep-scan): recheck empty targets before a resumed scan's first dispatch by @0xABCD01 in #2346
- fix(cli): respect the dedicated sign-in in the authentication prompt by @dipeshbabu in #2348
- fix(auth): preserve verified hard-linked credentials during logout by @erantianantha in #2354
- fix(sdk): add GPT-6-Cyber cost estimates by @ianw-oai in #2359
- fix(sdk): price OpenAI models by Bedrock region and inference route by @mldangelo-oai in #2362
- fix(cli): preserve line breaks in oversized finding files by @mldangelo-oai in #2361
- fix(sdk): use published Vertex AI prices for managed OpenAI models by @mldangelo-oai in #2363
- fix: preserve repaired Deep Scan coverage on Windows by @mldangelo-oai in #2366
- fix(plugin): normalize missing artifact errors on Windows by @mldangelo-oai in #2368
- fix(build): retry Windows plugin bundle renames by @mldangelo-oai in #2370
- fix: retry Windows artifact replacement while readers close by @mldangelo-oai in #2373
- fix: allow bundled helpers to start on Windows UNC shares by @mldangelo-oai in #2376
- fix: recognize OWNER RIGHTS on trusted Windows credential ancestors by @mldangelo-oai in #2379
- fix: retry Windows native wrapper publication by @mldangelo-oai in #2381
- fix(workbench): preserve large SQLite row IDs during migration by @mldangelo-oai in #2382
- fix(windows): preserve unrelated credential deny rules on local volumes by @mldangelo-oai in #2388
- fix(plugin): create private Windows scan output directories by @mldangelo-oai in #2390
- fix(workbench): preserve Windows directory symlinks in snapshot copies by @mldangelo-oai in #2391
- fix(workbench): recover long Windows root inventories with an exact Git marker by @mldangelo-oai in #2404
- fix(windows): explain unreadable plugin installation receipts by @mldangelo-oai in #2403
- fix(windows): open long state paths in JavaScript SQLite connections by @mldangelo-oai in #2380
- fix(activity): preserve quoted POSIX filenames by @JayYarlagadda in #2418
- fix: clear Deep Scan consolidation progress when a scan stops by @mldangelo-oai in #2433
- fix: report when Deep Scan times out before completing a review by @mldangelo-oai in #2434
- fix: avoid overlapping Deep Scan worker sandbox denies by @mldangelo-oai in #2416
- fix(example): bound Invoice Desk JSON request bodies by @mldangelo-oai in #2423
- fix(sdk): generate project schemas before bundling MCP by @mldangelo-oai in #2473
- fix(imports): match equivalent Python package names in Dependabot alerts by @mldangelo-oai in #2453
- fix(imports): validate Tenable repository URLs and CSV line numbers at capture by @mldangelo-oai in #2454
- fix(evals): fetch calibration revisions as source refs by @mldangelo-oai in #2425
- fix(action): show scan scope limitations in the job summary by @mldangelo-oai in #2435
- fix: show deferred validation in cost-limited Deep Scan reports by @mldangelo-oai in #2436
- fix(windows): pin directories during scan artifact operations by @mldangelo-oai in #2427
- fix(patches): publish verified saved-finding changes by @mldangelo-oai in #2429
- fix(cli): escape component names in terminal output by @mldangelo-oai in #2424
- fix(cli): hide session log hints for mock scans by @mldangelo-oai in #2488
- fix(logs): speed up compressed scan session discovery by @mldangelo-oai in #2489
- fix(release): sign macOS addons for packaged review items by @mldangelo-oai in #2331
- fix(findings): keep redirects within the configured service origin by @mldangelo-oai in #2426
- fix: keep workbench lifecycle results scoped to the selected scan by @mldangelo-oai in #2421
- fix(windows): verify scan output directory ownership and ancestry by @mldangelo-oai in #2432
- fix(release): bind Darwin signing to builds from protected main by @mldangelo-oai in #2495
- fix(windows): stage the bundled plugin for scan sandbox reads by @mldangelo-oai in #2494
- fix(history): escape severity labels in scan summaries by @mldangelo in #121
- fix(sdk): read millisecond retry delays in rate limit reconnects by @Shizoqua in #2441
- fix(sdk): preserve leading backslashes in POSIX home-relative scan paths by @mldangelo-oai in #2497
- fix(package): preserve LF in the POSIX MCP launcher on Windows by @mldangelo-oai in #2500
- fix(sdk): defer home lookup for explicitly configured Linux runtimes by @mldangelo-oai in #2501
- fix(sdk): identify the state directory in protected-root errors by @ilaigold in #1537
- fix(logs): persist terminal scan boundaries by @peter-research in #1527
- fix(scans): warn when repository HEAD changes during a scan by @Mr-Neutr0n in #360
- fix(bulk-scan): recover expired locks with null owners by @GautamSharma99 in #98
- fix(windows): retry publishing validated plugin ZIPs by @mldangelo-oai in #2498
- fix(sdk): finish plugin builds while old Windows addons are loaded by @mldangelo-oai in #2502
- fix(activity): preserve literal backslashes in POSIX file reads by @mldangelo-oai in #2503
- fix(bulk-scan): preserve occupied and replaced checkouts by @mldangelo-oai in #2438
Documentation
- docs(imports): simplify scanner imports and clarify Cloud receipts by @mldangelo-oai in #2271
- docs(plugin): clarify how saved review tasks are closed by @it-her0 in #1497
- docs(release): call out changes to scan instructions by @mldangelo-oai in #2287
- docs(cli): clarify pre-commit hook scope and upgrades by @ilaigold in #1536
- docs: make scan and integration guides evergreen by @mldangelo-oai in #2350
- docs: clarify archived scan output names by @mldangelo-oai in #2365
- docs: quote Codex overrides across Windows shells by @mldangelo-oai in #2400
Other changes
- perf(imports): avoid repeated repository and Snyk project checks by @mldangelo-oai in #2187
- ci: bump taiki-e/install-action from 2.87.32 to 2.88.0 by @dependabot[bot] in #2283
- chore(deps): bump the triage eval OpenCode SDK to 1.19.5 by @dependabot[bot] in #2281
- chore(deps): refresh the Node 26.12.1 container digest by @dependabot[bot] in #2282
- chore(deps): bump pytest from 9.1.1 to 9.2.0 in /plugins/codex-security by @dependabot[bot] in #2280
- chore(deps): refresh the GitHub Action archive matchers by @mldangelo-oai in #2290
- chore(deps): update the SDK mutation-test glob matcher by @mldangelo-oai in #2288
- chore(deps): refresh triage eval transitive dependencies by @mldangelo-oai in #2293
- chore(deps): trim Python schema format test dependencies by @mldangelo-oai in #2297
- chore: track the lockfile generated by root pnpm installs by @yaqoob1152-ai in #1758
- ci: audit bundled MCP and triage eval dependencies by @mldangelo-oai in #2328
- ci(dependabot): give Promptfoo version updates their own PRs by @mldangelo-oai in #2329
- refactor(config): simplify Cyber access feature selection by @erantianantha in #1044
- refactor(mcp): simplify lifecycle and protocol test fixtures by @mldangelo-oai in #2186
- chore(deps): bump @linear/sdk from 99.0.0 to 100.0.0 in /sdk/typescript by @dependabot[bot] in #2336
- build(sdk): ship only the embedding tokenizer and its encoding by @mldangelo-oai in #2333
- chore(deps): bump the third-party group across 3 directories with 2 updates by @dependabot[bot] in #2334
- ci: build the bundled plugin for rotating property tests by @mldangelo-oai in #2337
- refactor: clarify Python contracts and simplify scan recovery and reporting by @mldangelo-oai in #2340
- refactor: share workbench arguments and simplify SDK and eval workflows by @mldangelo-oai in #2325
- chore(deps): bump node from 26.12.1-bookworm-slim to 26.13-bookworm-slim by @dependabot[bot] in #2351
- refactor(workbench): consolidate preview migration receipt lookups by @mldangelo-oai in #2357
- chore(deps): bump napi-derive from 3.6.13 to 3.7.0 in /plugins/codex-security/native by @dependabot[bot] in #2394
- chore(deps): bump napi from 3.15.0 to 3.16.0 in /plugins/codex-security/native by @dependabot[bot] in #2395
- chore(deps): update Codex SDK and CLI to 0.167.0 by @dependabot[bot] in #2398
- ci: bump taiki-e/install-action from 2.88.0 to 2.88.1 by @dependabot[bot] in #2396
- ci: bump taiki-e/install-action from 2.88.0 to 2.88.1 in /.github/actions/audit-pnpm-lockfiles by @dependabot[bot] in #2397
- chore(deps): reduce the dependency tree for evals, SDK and tooling by @mldangelo-oai in #2409
- chore(deps): update the Bun toolchain to 1.4.4 by @khai-oai in #2417
- chore(ci): share the pinned Bun version by @mldangelo-oai in #2422
- chore(deps): bump napi from 3.16.0 to 3.16.1 in /plugins/codex-security/native by @dependabot[bot] in #2440
- ci: update taiki-e/install-action to v2.89.0 by @dependabot[bot] in #2451
- refactor(exports): share candidate metadata precedence by @mldangelo-oai in #2458
- refactor(artifacts): derive historical union types from their members by @mldangelo-oai in #2459
- refactor(ci): select required jobs in one pass by @mldangelo-oai in #2460
- refactor(cli): register only info as an MCP tool by @mldangelo-oai in #2461
- refactor(cli): share the implicit TOON output check by @mldangelo-oai in #2462
- refactor(cli): group scan comparison findings once for display by @mldangelo-oai in #2463
- refactor(recovery): reuse accepted worker coverage sources by @mldangelo-oai in #2464
- refactor(mcp): validate delivered scan identity in one place by @mldangelo-oai in #2465
- refactor(scan): derive inline review fields once before sealing by @mldangelo-oai in #2466
- ci: pass the selected Invoice Desk target directly to the scan by @mldangelo-oai in #2467
- refactor(sdk): reuse canonical decimals for legacy scanner records by @mldangelo-oai in #2468
- refactor(plugin): store each MCP runtime in one Brotli file by @mldangelo-oai in #2469
- refactor(sdk): consolidate direct model pricing by @mldangelo-oai in #2470
- refactor(config): share validation across root and profile overrides by @mldangelo-oai in #2471
- refactor(release): retire first-publish npm bootstrap by @mldangelo-oai in #2472
- refactor(release): resolve history in the GitHub publisher by @mldangelo-oai in #2475
- ci(release): share npm setup and verification by @mldangelo-oai in #2476
- refactor(sdk): share saved scan recipe settings across registration and replay by @mldangelo-oai in #2477
- refactor(artifacts): share relative path validation for draft and sealed scans by @mldangelo-oai in #2478
- refactor(sdk): share the severity review count default by @mldangelo-oai in #2479
- refactor(sdk): share the SQLite opener across history and locking by @mldangelo-oai in #2480
- refactor(cli): share terminal error listener cleanup by @mldangelo-oai in #2481
- refactor(deep-scan): stop passing host CPU counts to worker setup by @mldangelo-oai in #2482
- refactor(imports): share public Git host classification with Sonar by @mldangelo-oai in #2474
- chore(deps): update pdfjs-dist to 6.5.438 in the TypeScript SDK by @dependabot[bot] in #2484
- chore(release): 0.9.0 by @github-actions[bot] in #2273
- ci: update taiki-e/install-action to v2.89.1 by @dependabot[bot] in #2486
- chore(release): 0.9.1 by @github-actions[bot] in #2496
New Contributors
- @it-her0 made their first contribution in #1497
- @yaqoob1152-ai made their first contribution in #1758
- @cjc0013 made their first contribution in #737
- @beddows made their first contribution in #978
- @erantianantha made their first contribution in #1044
- @feiiiiii5 made their first contribution in #970
- @RakamakadoN made their first contribution in #2163
- @NielsRogge made their first contribution in #277
- @MauricioPerera made their first contribution in #160
- @SammyTourani made their first contribution in #1035
- @Haiduongcable made their first contribution in #171
- @Muzzy5150 made their first contribution in #2054
- @0xABCD01 made their first contribution in #2346
- @TomCN0803 made their first contribution in #125
Full Changelog: npm-v0.8.3...npm-v0.9.1