sneakoscope 1.18.5 → 1.18.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +34 -13
  2. package/crates/sks-core/Cargo.lock +1 -1
  3. package/crates/sks-core/Cargo.toml +1 -1
  4. package/crates/sks-core/src/main.rs +1 -1
  5. package/dist/.sks-build-stamp.json +4 -4
  6. package/dist/bin/sks.js +1 -1
  7. package/dist/build-manifest.json +31 -9
  8. package/dist/cli/command-registry.js +2 -2
  9. package/dist/commands/codex-app.js +17 -2
  10. package/dist/commands/codex.js +3 -2
  11. package/dist/commands/dfix.d.ts +14 -0
  12. package/dist/commands/image-ux-review.d.ts +30 -0
  13. package/dist/commands/ppt.d.ts +23 -0
  14. package/dist/commands/tmux.d.ts +2 -0
  15. package/dist/core/agents/agent-cleanup-executor.d.ts +9 -0
  16. package/dist/core/agents/agent-cleanup-executor.js +51 -12
  17. package/dist/core/agents/agent-codex-cockpit.d.ts +3 -0
  18. package/dist/core/agents/agent-command-surface.d.ts +7 -0
  19. package/dist/core/agents/agent-command-surface.js +9 -2
  20. package/dist/core/agents/agent-merge-coordinator.d.ts +14 -0
  21. package/dist/core/agents/agent-merge-coordinator.js +47 -0
  22. package/dist/core/agents/agent-orchestrator.d.ts +23 -0
  23. package/dist/core/agents/agent-orchestrator.js +31 -3
  24. package/dist/core/agents/agent-patch-apply-worker.d.ts +26 -0
  25. package/dist/core/agents/agent-patch-apply-worker.js +119 -0
  26. package/dist/core/agents/agent-patch-proof.d.ts +18 -0
  27. package/dist/core/agents/agent-patch-proof.js +21 -0
  28. package/dist/core/agents/agent-patch-queue.d.ts +24 -0
  29. package/dist/core/agents/agent-patch-queue.js +55 -0
  30. package/dist/core/agents/agent-patch-schema.d.ts +23 -0
  31. package/dist/core/agents/agent-patch-schema.js +41 -0
  32. package/dist/core/agents/agent-proof-evidence.d.ts +7 -0
  33. package/dist/core/agents/agent-proof-evidence.js +30 -1
  34. package/dist/core/agents/agent-runner-codex-exec.js +23 -15
  35. package/dist/core/agents/agent-schema.d.ts +7 -1
  36. package/dist/core/agents/agent-trust-report.d.ts +3 -0
  37. package/dist/core/agents/agent-trust-report.js +14 -0
  38. package/dist/core/agents/intelligent-work-graph.d.ts +2 -0
  39. package/dist/core/agents/intelligent-work-graph.js +136 -44
  40. package/dist/core/agents/route-collaboration-ledger.d.ts +23 -0
  41. package/dist/core/agents/tmux-physical-proof.d.ts +4 -0
  42. package/dist/core/agents/tmux-physical-proof.js +7 -0
  43. package/dist/core/agents/work-partition/dependency-graph.js +33 -11
  44. package/dist/core/codex/codex-0-134-compat.d.ts +76 -0
  45. package/dist/core/codex/codex-0-134-compat.js +194 -0
  46. package/dist/core/codex/managed-proxy-env.d.ts +14 -0
  47. package/dist/core/codex/managed-proxy-env.js +50 -0
  48. package/dist/core/codex-adapter.js +2 -0
  49. package/dist/core/codex-app.d.ts +6 -1
  50. package/dist/core/codex-app.js +111 -8
  51. package/dist/core/codex-compat/codex-compat-report.d.ts +90 -4
  52. package/dist/core/codex-compat/codex-compat-report.js +39 -8
  53. package/dist/core/codex-compat/codex-version-policy.d.ts +9 -3
  54. package/dist/core/codex-compat/codex-version-policy.js +21 -12
  55. package/dist/core/codex-compat/codex-version.d.ts +2 -0
  56. package/dist/core/codex-compat/codex-version.js +4 -1
  57. package/dist/core/commands/agent-command.js +3 -1
  58. package/dist/core/commands/basic-cli.d.ts +2 -0
  59. package/dist/core/commands/computer-use-command.js +31 -2
  60. package/dist/core/commands/dfix-command.d.ts +14 -0
  61. package/dist/core/commands/dfix-command.js +4 -0
  62. package/dist/core/commands/image-ux-review-command.d.ts +30 -0
  63. package/dist/core/commands/image-ux-review-command.js +41 -8
  64. package/dist/core/commands/mad-sks-command.js +72 -20
  65. package/dist/core/commands/ppt-command.d.ts +23 -0
  66. package/dist/core/commands/qa-loop-command.js +74 -10
  67. package/dist/core/commands/research-command.js +8 -3
  68. package/dist/core/commands/run-command.js +3 -3
  69. package/dist/core/commands/team-command.js +14 -4
  70. package/dist/core/computer-use-status.js +5 -5
  71. package/dist/core/decision-contract.js +2 -1
  72. package/dist/core/dfix.d.ts +14 -0
  73. package/dist/core/dfix.js +14 -0
  74. package/dist/core/feature-registry.js +10 -2
  75. package/dist/core/fsx.d.ts +1 -1
  76. package/dist/core/fsx.js +1 -1
  77. package/dist/core/hermes.js +12 -0
  78. package/dist/core/hooks-runtime.js +1 -1
  79. package/dist/core/image-ux-review/imagegen-adapter.js +16 -15
  80. package/dist/core/image-ux-review/recapture.js +9 -3
  81. package/dist/core/image-ux-review.d.ts +6 -0
  82. package/dist/core/image-ux-review.js +18 -9
  83. package/dist/core/imagegen/imagegen-capability.d.ts +21 -0
  84. package/dist/core/imagegen/imagegen-capability.js +50 -16
  85. package/dist/core/init.js +14 -15
  86. package/dist/core/mad-sks/mad-tmux-lane-proof.d.ts +26 -0
  87. package/dist/core/mad-sks/mad-tmux-lane-proof.js +50 -0
  88. package/dist/core/mad-sks/permission-model.d.ts +3 -0
  89. package/dist/core/mad-sks/permission-model.js +3 -0
  90. package/dist/core/mcp/mcp-0-134-policy.d.ts +37 -0
  91. package/dist/core/mcp/mcp-0-134-policy.js +226 -0
  92. package/dist/core/openclaw.js +13 -1
  93. package/dist/core/pipeline-internals/runtime-core.js +11 -9
  94. package/dist/core/pipeline-internals/runtime-gates.js +9 -6
  95. package/dist/core/proof/fake-real-proof-policy.d.ts +7 -0
  96. package/dist/core/proof/fake-real-proof-policy.js +42 -7
  97. package/dist/core/proof/route-finalizer.js +6 -5
  98. package/dist/core/proof/runtime-truth-matrix.d.ts +38 -0
  99. package/dist/core/proof/runtime-truth-matrix.js +173 -0
  100. package/dist/core/qa-loop.d.ts +4 -2
  101. package/dist/core/qa-loop.js +27 -17
  102. package/dist/core/questions.d.ts +1 -1
  103. package/dist/core/questions.js +3 -3
  104. package/dist/core/recallpulse.js +1 -1
  105. package/dist/core/routes.d.ts +9 -2
  106. package/dist/core/routes.js +47 -17
  107. package/dist/core/source-intelligence/codex-history-search.d.ts +26 -0
  108. package/dist/core/source-intelligence/codex-history-search.js +71 -0
  109. package/dist/core/source-intelligence/source-intelligence-proof.js +2 -1
  110. package/dist/core/source-intelligence/source-intelligence-runner.js +4 -1
  111. package/dist/core/tmux-ui.d.ts +2 -0
  112. package/dist/core/triwiki-attention.js +2 -2
  113. package/dist/core/version.d.ts +1 -1
  114. package/dist/core/version.js +1 -1
  115. package/dist/scripts/release-parallel-check.js +13 -0
  116. package/package.json +22 -7
package/README.md CHANGED
@@ -6,11 +6,17 @@ Sneakoscope Codex (`sks`) is a Codex CLI/App harness that makes repeatable Codex
6
6
 
7
7
  SKS does not try to clone every other harness. It focuses on one thing: making Codex work auditable, visual-evidence-bound, safety-gated, and reproducible through Completion Proof.
8
8
 
9
+ ## LLM Init Prompt for Hermes / OpenClaw Agent Builders
10
+
11
+ ```text
12
+ Set up this agent project with Sneakoscope Codex. Use [[mandarange/Sneakoscope-Codex](https://github.com/mandarange/Sneakoscope-Codex)] as the repo reference and [npm i -g sneakoscope] as the recommended global install command, then run the appropriate `sks` setup, doctor, Codex App, and proof checks for this repo. Keep generated SKS state out of source control unless documented, and record every version-facing change in CHANGELOG.md.
13
+ ```
14
+
9
15
  ![Sneakoscope Codex Trust Layer](docs/assets/sneakoscope-architecture-pipeline.jpg)
10
16
 
11
17
  ## Current Release
12
18
 
13
- SKS **1.18.5** wires the 1.18.4 real-proof tools into the runtime lifecycle: real tmux mode now writes before-drain, after-drain, and final physical pane proof artifacts; real Codex dynamic smoke validates output-schema/result-file/process cleanup and reports `fixture_instrumented_real` honestly; `sks agent close/cleanup` performs process-tree-aware SIGTERM/SIGKILL cleanup; and the task graph carries AST/import/test ownership, critical path, and runtime truth matrix evidence.
19
+ SKS **1.18.7** closes the Codex 0.134 ultra-stability loop: the release matrix now covers `--profile` as the primary selector, bounded local Codex history search, managed proxy propagation, MCP 0.134 environment/OAuth/schema/readOnlyHint policy, proof-safe parallel agent patches, runtime truth P6 rows, the 1.18.7 release gate audit, MAD-SKS as general scoped permission widening, and gpt-image-2 imagegen as a core evidence capability.
14
20
 
15
21
  ```bash
16
22
  sks mad-sks plan --target-root <path> --json
@@ -30,6 +36,13 @@ npm run agent:ast-aware-work-graph
30
36
  npm run proof:fake-vs-real-policy
31
37
  npm run proof:fake-real-policy-v2
32
38
  npm run release:runtime-truth-matrix
39
+ npm run codex:0.134-official-compat
40
+ npm run codex:profile-primary
41
+ npm run codex:managed-proxy-env
42
+ npm run mcp:0.134-modernization
43
+ npm run source-intelligence:codex-history-search
44
+ npm run agent:parallel-write-kernel
45
+ npm run release:gate-existence-audit
33
46
  npm run route:blackbox-realism
34
47
  npm run release:real-check
35
48
  npm run agent:backfill-route-blackbox
@@ -37,7 +50,7 @@ npm run team:actual-route-backfill
37
50
  npm run release:readiness
38
51
  ```
39
52
 
40
- Detailed release history lives in [CHANGELOG.md](CHANGELOG.md). Current release gate status lives in [docs/release-readiness.md](docs/release-readiness.md).
53
+ Detailed release history lives in [CHANGELOG.md](CHANGELOG.md); every version-facing change should be recorded there before release. Current release gate status lives in [docs/release-readiness.md](docs/release-readiness.md).
41
54
 
42
55
  ## Documentation
43
56
 
@@ -72,7 +85,9 @@ Detailed release history lives in [CHANGELOG.md](CHANGELOG.md). Current release
72
85
  - Agent cleanup executor: [docs/agent-cleanup-executor.md](docs/agent-cleanup-executor.md)
73
86
  - Intelligent work graph: [docs/intelligent-work-graph.md](docs/intelligent-work-graph.md)
74
87
  - Fake vs real proof policy: [docs/fake-vs-real-proof-policy.md](docs/fake-vs-real-proof-policy.md)
75
- - Migration 1.18.4 to 1.18.5: [docs/migration-1.18.4-to-1.18.5.md](docs/migration-1.18.4-to-1.18.5.md)
88
+ - Runtime truth matrix: [docs/runtime-truth-matrix.md](docs/runtime-truth-matrix.md)
89
+ - Warp MAD tmux lanes: [docs/warp-mad-tmux-lanes.md](docs/warp-mad-tmux-lanes.md)
90
+ - Migration 1.18.6 to 1.18.7: [docs/migration-1.18.6-to-1.18.7.md](docs/migration-1.18.6-to-1.18.7.md)
76
91
  - Codex official Goal mode: [docs/codex-official-goal-mode.md](docs/codex-official-goal-mode.md)
77
92
  - Release parallel full coverage: [docs/release-parallel-full-coverage.md](docs/release-parallel-full-coverage.md)
78
93
  - Priority closure P0-P4: [docs/priority-closure-p0-p4.md](docs/priority-closure-p0-p4.md)
@@ -92,6 +107,8 @@ Detailed release history lives in [CHANGELOG.md](CHANGELOG.md). Current release
92
107
 
93
108
  ## 60-second start
94
109
 
110
+ Recommended install: use the global npm package so `sks` and the Codex App `$` skills are refreshed together.
111
+
95
112
  ```sh
96
113
  npm i -g sneakoscope
97
114
  sks root
@@ -115,7 +132,7 @@ sks rust smoke --json
115
132
 
116
133
  ## Install Options
117
134
 
118
- Install globally, then run `sks` from either a project or any global shell location:
135
+ Recommended: install globally with `npm i -g sneakoscope`, then run `sks` from either a project or any global shell location:
119
136
 
120
137
  ```sh
121
138
  npm i -g sneakoscope
@@ -123,7 +140,7 @@ sks root
123
140
  sks doctor
124
141
  ```
125
142
 
126
- `npm i -g sneakoscope` automatically refreshes the `sks` command shim, global Codex App `$` skills, and SKS bootstrap surface. When the install is run from a project, postinstall bootstraps that project. When it is run outside a repo/project marker, postinstall bootstraps the per-user global runtime root instead of writing `.sneakoscope` into a random current directory. `sks root` tells you which root SKS will use.
143
+ `npm i -g sneakoscope` is the recommended install path. It automatically refreshes the `sks` command shim, global Codex App `$` skills, and SKS bootstrap surface. When the install is run from a project, postinstall bootstraps that project. When it is run outside a repo/project marker, postinstall bootstraps the per-user global runtime root instead of writing `.sneakoscope` into a random current directory. `sks root` tells you which root SKS will use.
127
144
 
128
145
  If you only want a one-shot run without keeping `sks` installed globally:
129
146
 
@@ -184,7 +201,7 @@ The default `sks` runtime checks npm for newer `sneakoscope` and `@openai/codex`
184
201
 
185
202
  ### Global Install
186
203
 
187
- Use this when you want `sks` available from any repo:
204
+ Use this recommended path when you want `sks` available from any repo:
188
205
 
189
206
  ```sh
190
207
  npm i -g sneakoscope
@@ -278,7 +295,7 @@ sks codex-lb repair
278
295
  sks
279
296
  ```
280
297
 
281
- Bare `sks` can also prompt for codex-lb auth; SKS stores the base URL/key in `~/.codex/sks-codex-lb.env`, writes the codex-lb Codex CLI / IDE Extension provider block into `~/.codex/config.toml` for Codex App routing, loads the provider env key for tmux launches, and syncs the macOS user launch environment so the Codex App can see `CODEX_LB_API_KEY` after restart. If the provider block disappears but the stored env file is still recoverable, bare `sks`, npm postinstall upgrades, `sks doctor --fix`, and `sks codex-lb repair` restore it with `env_key = "CODEX_LB_API_KEY"`, `supports_websockets = true`, and `requires_openai_auth = false`; PPT/imagegen bridge checks treat that env-key provider as configured without requiring OpenAI OAuth. If an older SKS release left the codex-lb dashboard key only in the shared Codex `auth.json` login cache, SKS migrates that key back into `~/.codex/sks-codex-lb.env` when a codex-lb provider or env base URL is already recoverable. It does not rewrite the shared Codex `auth.json` login cache by default; set `SKS_CODEX_LB_SYNC_CODEX_LOGIN=1` only if you intentionally want the old API-key login-cache behavior. When codex-lb is active, SKS opens a fresh `sks-codex-lb-*` tmux session and sweeps older detached codex-lb sessions for the same repo before launch so stale Responses API chains are not reused. Configured launch paths run a response-chain health check. `previous_response_not_found` is treated as a stateless-LB warning and keeps codex-lb active. Hard failures are surfaced to the user; SKS only bypasses codex-lb when the user chooses OAuth fallback or `SKS_CODEX_LB_AUTOBYPASS=1` is set.
298
+ Bare `sks` can also prompt for codex-lb auth; SKS stores the base URL/key in `~/.codex/sks-codex-lb.env`, writes the codex-lb Codex CLI / IDE Extension provider block into `~/.codex/config.toml` for Codex App routing, loads the provider env key for tmux launches, and syncs the macOS user launch environment so the Codex App can see `CODEX_LB_API_KEY` after restart. If the provider block disappears but the stored env file is still recoverable, bare `sks`, npm postinstall upgrades, `sks doctor --fix`, and `sks codex-lb repair` restore it with `env_key = "CODEX_LB_API_KEY"`, `supports_websockets = true`, and `requires_openai_auth = false`; imagegen checks may record this provider as configured codex-lb routing, but it is not accepted as official Codex App `$imagegen` evidence. If an older SKS release left the codex-lb dashboard key only in the shared Codex `auth.json` login cache, SKS migrates that key back into `~/.codex/sks-codex-lb.env` when a codex-lb provider or env base URL is already recoverable. It does not rewrite the shared Codex `auth.json` login cache by default; set `SKS_CODEX_LB_SYNC_CODEX_LOGIN=1` only if you intentionally want the old API-key login-cache behavior. When codex-lb is active, SKS opens a fresh `sks-codex-lb-*` tmux session and sweeps older detached codex-lb sessions for the same repo before launch so stale Responses API chains are not reused. Configured launch paths run a response-chain health check. `previous_response_not_found` is treated as a stateless-LB warning and keeps codex-lb active. Hard failures are surfaced to the user; SKS only bypasses codex-lb when the user chooses OAuth fallback or `SKS_CODEX_LB_AUTOBYPASS=1` is set.
282
299
 
283
300
  If codex-lb provider auth drifts after launch/reinstall, run `sks doctor --fix` or `sks codex-lb repair`; to replace it, run `sks codex-lb reconfigure --host <domain> --api-key <key>`.
284
301
 
@@ -315,10 +332,10 @@ This flips `model_provider` away from `codex-lb` in the top-level Codex App conf
315
332
 
316
333
  ```sh
317
334
  sks --mad
318
- sks --mad --yes
335
+ sks --mad --allow-package-install --allow-service-control --allow-network --yes
319
336
  ```
320
337
 
321
- This syncs existing codex-lb provider auth, creates/uses the `sks-mad-high` full-access profile, opens the MAD-SKS permission gate for that tmux run, and launches a single Codex CLI pane. The session recreates the named session so stale split-pane MAD sessions collapse back to one pane. Catastrophic database wipe/all-row/project-management safeguards remain active, and the pipeline contract still forbids unrequested fallback implementation code.
338
+ This syncs existing codex-lb provider auth, creates/uses the `sks-mad-high` high-power maintenance profile, opens the MAD-SKS permission gate for that tmux run, and launches a single Codex CLI pane. Bare `sks --mad` grants target-project file and shell scope only; add explicit `--allow-*` flags for packages, services, network, Computer Use, browser use, generated assets, file permissions, DB writes, or other high-risk scopes. MAD-SKS is not a DB-only unlock: it is explicit user authorization to widen approved target-project scopes. The session recreates the named session so stale split-pane MAD sessions collapse back to one pane. Catastrophic database wipe/all-row/project-management safeguards remain active, and the pipeline contract still forbids unrequested fallback implementation code.
322
339
 
323
340
  Before launching, SKS checks npm for a newer `sneakoscope`; answer `y` to update or `n` to continue. Use `--yes` to approve missing dependency installs automatically.
324
341
 
@@ -362,6 +379,7 @@ Effort is assigned per agent. Simple read-only/docs slices can run low, ordinary
362
379
  ```sh
363
380
  sks qa-loop prepare "http://localhost:3000"
364
381
  sks qa-loop run latest --max-cycles 2
382
+ sks codex-app chrome-extension --json
365
383
  sks goal create "persist this migration workflow"
366
384
  sks research prepare "evaluate this approach"
367
385
  sks research run latest --max-cycles 12 --cycle-timeout-minutes 120
@@ -395,7 +413,7 @@ sks code-structure scan --json
395
413
 
396
414
  ### Ambiguity Questions
397
415
 
398
- Clarification asks only for ambiguity that changes execution; predictable defaults are inferred and sealed. `sks skill-dream` records cheap counters and periodically writes advisory skill reports. `$Goal` controls native `/goal` persistence without replacing the selected execution route. `$Computer-Use` / `$CU` is the fast Codex Computer Use lane for UI/browser/visual work.
416
+ Clarification asks only for ambiguity that changes execution; predictable defaults are inferred and sealed. `sks skill-dream` records cheap counters and periodically writes advisory skill reports. `$Goal` controls native `/goal` persistence without replacing the selected execution route. Web, browser, localhost, website, webapp, and web-based app verification use the official Codex Chrome Extension path first; if it is not installed/enabled, SKS stops and asks the user to set it up before resuming. `$Computer-Use` / `$CU` is now reserved for native macOS, desktop-app, OS-settings, and non-web visual work.
399
417
 
400
418
  ### Create A Presentation
401
419
 
@@ -417,6 +435,7 @@ After installing, run:
417
435
  ```sh
418
436
  sks bootstrap
419
437
  sks codex-app check
438
+ sks codex-app chrome-extension --json
420
439
  sks codex-app remote-control --status
421
440
  sks dollar-commands
422
441
  ```
@@ -427,9 +446,11 @@ For headless remotely controllable Codex App/server sessions on Codex CLI 0.130.
427
446
  sks codex-app remote-control -- --help
428
447
  ```
429
448
 
430
- `sks codex-app check` reports whether the installed Codex CLI is new enough, whether the required app flags are visible, whether Fast/speed-selector config is unlocked, whether Codex App Git Actions can use Commit, Push, Commit and Push, and PR flows, and whether installed OpenAI default plugins such as Browser, Chrome, Computer Use, Documents, Presentations, Spreadsheets, and LaTeX are enabled. When codex-lb is configured, SKS keeps it selected as the top-level Codex App provider while still preserving required app flags and plugin settings. Codex CLI 0.130.0+ app-server/remote-control threads can pick up config changes live; older CLI/TUI sessions should still be restarted after `.codex/config.toml` or MCP/plugin changes.
449
+ `sks codex-app check` reports whether the installed Codex CLI is new enough, whether the required app flags are visible, whether Fast/speed-selector config is unlocked, whether Codex App Git Actions can use Commit, Push, Commit and Push, and PR flows, whether the Codex Chrome Extension path is ready for web/browser/webapp verification, and whether installed OpenAI default plugins such as Browser, Chrome, Computer Use, Documents, Presentations, Spreadsheets, and LaTeX are enabled. `sks codex-app chrome-extension --json` is the rapid preflight for web QA/UX/browser routes. When codex-lb is configured, SKS keeps it selected as the top-level Codex App provider while still preserving required app flags and plugin settings. Codex CLI 0.130.0+ app-server/remote-control threads can pick up config changes live; older CLI/TUI sessions should still be restarted after `.codex/config.toml` or MCP/plugin changes.
450
+
451
+ For web-related verification, SKS follows the official Codex Chrome Extension setup path first: https://developers.openai.com/codex/app/chrome-extension. `$QA-LOOP`, `$UX-Review`, `$Image-UX-Review`, browser smoke, authenticated web checks, localhost checks, and web visual review must halt quickly if that extension is missing or disabled. Only after the user says the extension setup is complete should the pipeline resume. Codex Computer Use is for native Mac/non-web targets only; it must not be used as browser/web-app verification evidence.
431
452
 
432
- Image-review routes are intentionally strict. `$Image-UX-Review`, `$UX-Review`, `$Visual-Review`, and `$UI-UX-Review` require real Codex App `$imagegen`/`gpt-image-2` generated annotated review images before `image-ux-review-gate.json` can pass; disabled or missing `image_generation` remains a blocker that `sks codex-app check` and selftest cover.
453
+ Imagegen is a core SKS capability, not a decorative add-on. `$Image-UX-Review`, `$UX-Review`, `$Visual-Review`, `$UI-UX-Review`, and PPT generated-review paths require real Codex App `$imagegen`/`gpt-image-2` output before full visual verification can pass. For newest-model image requests, prompts should say "Use ChatGPT Images 2.0 / GPT Image 2.0 with gpt-image-2" while still invoking Codex App `$imagegen` when live generation is needed. Use `imagegen-source-scout` when current official docs plus X/social prompt-workflow signals are needed; social sources are prompt heuristics only, not capability or evidence specs. `npm run imagegen:capability` checks that the official Codex App imagegen surface is visible and records that capability detection is not output proof; OpenAI API, Responses image-generation, codex-lb, or `CODEX_LB_API_KEY` fallbacks are non-Codex paths and do not satisfy Codex App generated-image evidence unless a separate API fallback task is explicitly requested. The README architecture asset uses the same rule: run `npm run imagegen:readme-architecture:prompt` to print/write the official prompt, generate the image in Codex App `$imagegen`, then rerun `npm run imagegen:readme-architecture -- --output <path>` after Codex App creates a real gpt-image-2 output. When exactly one current generated_images candidate exists after the prompt, `npm run imagegen:readme-architecture -- --auto-pick-latest` can select it automatically. To let the verifier wait while Codex App writes the file, use `npm run imagegen:readme-architecture -- --wait-ms <milliseconds>`; it still accepts only one current candidate under `$CODEX_HOME/generated_images`. Env forms such as `SKS_CODEX_APP_IMAGEGEN_OUTPUT=<path>` remain supported for automation. Use the selected file directly under `$CODEX_HOME/generated_images`; moved or copied files are not accepted as provenance evidence. Disabled or missing `image_generation` remains a blocker that `sks codex-app check`, `npm run imagegen:capability`, and selftest cover.
433
454
 
434
455
  Then open Codex App and use prompt commands directly in the chat. Examples:
435
456
 
@@ -577,7 +598,7 @@ sks codex-app check
577
598
  codex mcp list
578
599
  ```
579
600
 
580
- Codex App workflows need the app installed. UI/browser evidence requires first-party Codex Computer Use, and generated raster/image-review evidence requires real `$imagegen`/`gpt-image-2` output. After setup/upgrade, start a fresh thread so Codex reloads plugin tools.
601
+ Codex App workflows need the app installed. Web/browser evidence requires the Codex Chrome Extension path, native Mac/non-web visual evidence requires first-party Codex Computer Use, and generated raster/image-review evidence requires real `$imagegen`/`gpt-image-2` output. After setup/upgrade, start a fresh thread so Codex reloads plugin tools.
581
602
 
582
603
  ### Codex App commit/push is blocked
583
604
 
@@ -76,7 +76,7 @@ dependencies = [
76
76
 
77
77
  [[package]]
78
78
  name = "sks-core"
79
- version = "1.18.5"
79
+ version = "1.18.7"
80
80
  dependencies = [
81
81
  "serde_json",
82
82
  ]
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "sks-core"
3
- version = "1.18.5"
3
+ version = "1.18.7"
4
4
  edition = "2021"
5
5
 
6
6
  [dependencies]
@@ -4,7 +4,7 @@ use std::io::{self, Read, Seek, SeekFrom};
4
4
  fn main() {
5
5
  let mut args = std::env::args().skip(1);
6
6
  match args.next().as_deref() {
7
- Some("--version") => println!("sks-rs 1.18.5"),
7
+ Some("--version") => println!("sks-rs 1.18.7"),
8
8
  Some("compact-info") => {
9
9
  let mut input = String::new();
10
10
  let _ = io::stdin().read_to_string(&mut input);
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schema": "sks.dist-build-stamp.v1",
3
3
  "package_name": "sneakoscope",
4
- "package_version": "1.18.5",
5
- "source_digest": "25698b68e8f9d6ff16ac94f404e60d99db9841e8e85a0f8c5831069a744434cc",
6
- "source_file_count": 1430,
7
- "built_at_source_time": 1779807721873
4
+ "package_version": "1.18.7",
5
+ "source_digest": "49e153f303c7d5abf79e2f2fe77ecfd9215172f34b2fb944fd34095aa9bf638c",
6
+ "source_file_count": 1466,
7
+ "built_at_source_time": 1779875860601
8
8
  }
package/dist/bin/sks.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const FAST_PACKAGE_VERSION = '1.18.3';
2
+ const FAST_PACKAGE_VERSION = '1.18.7';
3
3
  const args = process.argv.slice(2);
4
4
  try {
5
5
  if (args[0] === '--version' || args[0] === '-v' || args[0] === 'version') {
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "schema": "sks.dist-build.v2",
3
- "version": "1.18.5",
4
- "package_version": "1.18.5",
3
+ "version": "1.18.7",
4
+ "package_version": "1.18.7",
5
5
  "typescript": true,
6
6
  "mjs_runtime_files": 0,
7
- "compiled_file_count": 874,
8
- "compiled_js_count": 437,
9
- "compiled_dts_count": 437,
10
- "source_digest": "25698b68e8f9d6ff16ac94f404e60d99db9841e8e85a0f8c5831069a744434cc",
11
- "source_file_count": 1430,
12
- "source_files_hash": "f8db0c06ebed73d7f4ee1f33117ef1dc633b59312f6d976ca6abf2e525d527fe",
13
- "source_list_hash": "f8db0c06ebed73d7f4ee1f33117ef1dc633b59312f6d976ca6abf2e525d527fe",
7
+ "compiled_file_count": 896,
8
+ "compiled_js_count": 448,
9
+ "compiled_dts_count": 448,
10
+ "source_digest": "49e153f303c7d5abf79e2f2fe77ecfd9215172f34b2fb944fd34095aa9bf638c",
11
+ "source_file_count": 1466,
12
+ "source_files_hash": "743d83c31ee39e65ac8d73c42993b5baffed6474210ec913259194ca1e58900f",
13
+ "source_list_hash": "743d83c31ee39e65ac8d73c42993b5baffed6474210ec913259194ca1e58900f",
14
14
  "src_mjs_runtime_files": 0,
15
15
  "dist_stamp_schema": "sks.dist-build-stamp.v1",
16
16
  "files": [
@@ -214,12 +214,22 @@
214
214
  "core/agents/agent-ledger-schemas.js",
215
215
  "core/agents/agent-lifecycle.d.ts",
216
216
  "core/agents/agent-lifecycle.js",
217
+ "core/agents/agent-merge-coordinator.d.ts",
218
+ "core/agents/agent-merge-coordinator.js",
217
219
  "core/agents/agent-message-bus.d.ts",
218
220
  "core/agents/agent-message-bus.js",
219
221
  "core/agents/agent-orchestrator.d.ts",
220
222
  "core/agents/agent-orchestrator.js",
221
223
  "core/agents/agent-output-validator.d.ts",
222
224
  "core/agents/agent-output-validator.js",
225
+ "core/agents/agent-patch-apply-worker.d.ts",
226
+ "core/agents/agent-patch-apply-worker.js",
227
+ "core/agents/agent-patch-proof.d.ts",
228
+ "core/agents/agent-patch-proof.js",
229
+ "core/agents/agent-patch-queue.d.ts",
230
+ "core/agents/agent-patch-queue.js",
231
+ "core/agents/agent-patch-schema.d.ts",
232
+ "core/agents/agent-patch-schema.js",
223
233
  "core/agents/agent-persona.d.ts",
224
234
  "core/agents/agent-persona.js",
225
235
  "core/agents/agent-plan.d.ts",
@@ -358,8 +368,12 @@
358
368
  "core/codex-lb/codex-lb-setup.js",
359
369
  "core/codex-model-guard.d.ts",
360
370
  "core/codex-model-guard.js",
371
+ "core/codex/codex-0-134-compat.d.ts",
372
+ "core/codex/codex-0-134-compat.js",
361
373
  "core/codex/codex-web-search-adapter.d.ts",
362
374
  "core/codex/codex-web-search-adapter.js",
375
+ "core/codex/managed-proxy-env.d.ts",
376
+ "core/codex/managed-proxy-env.js",
363
377
  "core/codex/official-goal-mode.d.ts",
364
378
  "core/codex/official-goal-mode.js",
365
379
  "core/commands/agent-command.d.ts",
@@ -598,6 +612,8 @@
598
612
  "core/mad-sks/guard-middleware.js",
599
613
  "core/mad-sks/immutable-harness-guard.d.ts",
600
614
  "core/mad-sks/immutable-harness-guard.js",
615
+ "core/mad-sks/mad-tmux-lane-proof.d.ts",
616
+ "core/mad-sks/mad-tmux-lane-proof.js",
601
617
  "core/mad-sks/permission-model.d.ts",
602
618
  "core/mad-sks/permission-model.js",
603
619
  "core/mad-sks/proof-evidence.d.ts",
@@ -612,6 +628,8 @@
612
628
  "core/mad-sks/write-guard.js",
613
629
  "core/managed-paths.d.ts",
614
630
  "core/managed-paths.js",
631
+ "core/mcp/mcp-0-134-policy.d.ts",
632
+ "core/mcp/mcp-0-134-policy.js",
615
633
  "core/mcp/xai-mcp-detector.d.ts",
616
634
  "core/mcp/xai-mcp-detector.js",
617
635
  "core/mcp/xai-search-adapter.d.ts",
@@ -743,6 +761,8 @@
743
761
  "core/proof/route-proof-gate.js",
744
762
  "core/proof/route-proof-policy.d.ts",
745
763
  "core/proof/route-proof-policy.js",
764
+ "core/proof/runtime-truth-matrix.d.ts",
765
+ "core/proof/runtime-truth-matrix.js",
746
766
  "core/proof/selftest-proof-fixtures.d.ts",
747
767
  "core/proof/selftest-proof-fixtures.js",
748
768
  "core/proof/validation.d.ts",
@@ -769,6 +789,8 @@
769
789
  "core/session/project-namespace.js",
770
790
  "core/skill-forge.d.ts",
771
791
  "core/skill-forge.js",
792
+ "core/source-intelligence/codex-history-search.d.ts",
793
+ "core/source-intelligence/codex-history-search.js",
772
794
  "core/source-intelligence/source-intelligence-policy.d.ts",
773
795
  "core/source-intelligence/source-intelligence-policy.js",
774
796
  "core/source-intelligence/source-intelligence-proof.d.ts",
@@ -122,8 +122,8 @@ export const COMMANDS = {
122
122
  'ux-review': entry('labs', 'Alias for image UX review', 'dist/core/commands/image-ux-review-command.js', commandArgsCommand(() => import('../core/commands/image-ux-review-command.js'), 'imageUxReviewCommand', 'dist/core/commands/image-ux-review-command.js')),
123
123
  'visual-review': entry('labs', 'Alias for image UX review', 'dist/core/commands/image-ux-review-command.js', commandArgsCommand(() => import('../core/commands/image-ux-review-command.js'), 'imageUxReviewCommand', 'dist/core/commands/image-ux-review-command.js')),
124
124
  'ui-ux-review': entry('labs', 'Alias for image UX review', 'dist/core/commands/image-ux-review-command.js', commandArgsCommand(() => import('../core/commands/image-ux-review-command.js'), 'imageUxReviewCommand', 'dist/core/commands/image-ux-review-command.js')),
125
- 'computer-use': entry('beta', 'Record Computer Use visual evidence', 'dist/core/commands/computer-use-command.js', commandArgsCommand(() => import('../core/commands/computer-use-command.js'), 'computerUseCommand', 'dist/core/commands/computer-use-command.js')),
126
- cu: entry('beta', 'Alias for Computer Use', 'dist/core/commands/computer-use-command.js', commandArgsCommand(() => import('../core/commands/computer-use-command.js'), 'computerUseCommand', 'dist/core/commands/computer-use-command.js')),
125
+ 'computer-use': entry('beta', 'Record native Mac/non-web Computer Use visual evidence', 'dist/core/commands/computer-use-command.js', commandArgsCommand(() => import('../core/commands/computer-use-command.js'), 'computerUseCommand', 'dist/core/commands/computer-use-command.js')),
126
+ cu: entry('beta', 'Alias for native Computer Use', 'dist/core/commands/computer-use-command.js', commandArgsCommand(() => import('../core/commands/computer-use-command.js'), 'computerUseCommand', 'dist/core/commands/computer-use-command.js')),
127
127
  context7: entry('beta', 'Context7 checks and docs', 'dist/cli/context7-command.js', subcommand(() => import('./context7-command.js'), 'context7Command', 'dist/cli/context7-command.js', 'check')),
128
128
  recallpulse: entry('labs', 'RecallPulse evidence route', 'dist/commands/recallpulse.js', directCommand(() => import('../commands/recallpulse.js'), 'dist/commands/recallpulse.js')),
129
129
  pipeline: entry('beta', 'Inspect pipeline missions', 'dist/commands/pipeline.js', directCommand(() => import('../commands/pipeline.js'), 'dist/commands/pipeline.js')),
@@ -1,11 +1,26 @@
1
1
  import { flag } from '../cli/args.js';
2
2
  import { printJson } from '../cli/output.js';
3
- import { codexAccessTokenStatus, codexAppIntegrationStatus, formatCodexAppStatus } from '../core/codex-app.js';
3
+ import { codexAccessTokenStatus, codexAppIntegrationStatus, codexChromeExtensionStatus, formatCodexAppStatus } from '../core/codex-app.js';
4
4
  import { codexAppRemoteControlCommand } from '../cli/codex-app-command.js';
5
5
  export async function run(_command, args = []) {
6
6
  const action = args[0] || 'check';
7
7
  if (action === 'remote-control' || action === 'remote')
8
8
  return codexAppRemoteControlCommand(args.slice(1));
9
+ if (action === 'chrome-extension' || action === 'chrome') {
10
+ const status = await codexChromeExtensionStatus();
11
+ if (flag(args, '--json')) {
12
+ printJson(status);
13
+ if (!status.ok)
14
+ process.exitCode = 1;
15
+ return;
16
+ }
17
+ console.log(`Codex Chrome Extension: ${status.ok ? 'available' : status.status}`);
18
+ for (const line of status.guidance || [])
19
+ console.log(`- ${line}`);
20
+ if (!status.ok)
21
+ process.exitCode = 1;
22
+ return;
23
+ }
9
24
  if (action === 'pat') {
10
25
  const status = codexAccessTokenStatus();
11
26
  if (flag(args, '--json'))
@@ -29,7 +44,7 @@ export async function run(_command, args = []) {
29
44
  process.exitCode = 1;
30
45
  return;
31
46
  }
32
- console.error('Usage: sks codex-app check|status|pat status|remote-control [--json]');
47
+ console.error('Usage: sks codex-app check|status|chrome-extension|pat status|remote-control [--json]');
33
48
  process.exitCode = 1;
34
49
  }
35
50
  //# sourceMappingURL=codex-app.js.map
@@ -1,4 +1,4 @@
1
- import { flag } from '../cli/args.js';
1
+ import { flag, readOption } from '../cli/args.js';
2
2
  import { printJson } from '../cli/output.js';
3
3
  import { codexCompatibilityReport, codexDoctorReport } from '../core/codex-compat/codex-compat-report.js';
4
4
  import { codexVersionReport } from '../core/codex-compat/codex-version.js';
@@ -6,7 +6,8 @@ import { codexSchemaSnapshotReport } from '../core/codex-compat/codex-schema-sna
6
6
  export async function run(_command, args = []) {
7
7
  const action = args[0] || 'compatibility';
8
8
  if (action === 'compatibility' || action === 'compat') {
9
- const result = await codexCompatibilityReport();
9
+ const requiredBaseline = readOption(args, '--require', null);
10
+ const result = await codexCompatibilityReport({ requiredBaseline, require: requiredBaseline });
10
11
  if (flag(args, '--json'))
11
12
  return printJson(result);
12
13
  console.log(`Codex compatibility: ${result.ok ? result.status : 'blocked'} (${result.required_baseline})`);
@@ -103,6 +103,13 @@ export declare function run(command: any, args?: any): Promise<void | {
103
103
  };
104
104
  selected_template: import("../core/dfix/patch-templates.js").DfixPatchTemplate | null;
105
105
  mode: string;
106
+ route_parallel_write: {
107
+ write_mode: any;
108
+ apply_patches: boolean;
109
+ dry_run_patches: boolean;
110
+ max_write_agents: number;
111
+ route_level_flags_wired: boolean;
112
+ };
106
113
  target_file: any;
107
114
  find_text_present: boolean;
108
115
  replace_text_present: boolean;
@@ -154,6 +161,13 @@ export declare function run(command: any, args?: any): Promise<void | {
154
161
  created_at: string;
155
162
  explicit_apply_opt_in: boolean;
156
163
  apply_opt_in: boolean;
164
+ route_parallel_write: {
165
+ write_mode: any;
166
+ apply_patches: boolean;
167
+ dry_run_patches: boolean;
168
+ max_write_agents: number;
169
+ route_level_flags_wired: boolean;
170
+ };
157
171
  patch_mode: any;
158
172
  patch_result_present: boolean;
159
173
  patch_applied: any;
@@ -46,6 +46,8 @@ export declare function run(command: any, args?: any): Promise<void | {
46
46
  original_resolution_required: boolean;
47
47
  local_only_default: boolean;
48
48
  accepted_sources: string[];
49
+ web_capture_doc: string;
50
+ web_verification_policy: string;
49
51
  privacy: string;
50
52
  };
51
53
  image_generation_review: {
@@ -298,6 +300,7 @@ export declare function run(command: any, args?: any): Promise<void | {
298
300
  contract_hash: any;
299
301
  real_source_screenshot_present: boolean;
300
302
  computer_use_or_user_screenshot_source: any;
303
+ official_or_user_screenshot_source: any;
301
304
  gpt_image_2_callout_generated: boolean;
302
305
  generated_image_ingested: boolean;
303
306
  callout_extraction_schema_valid: boolean;
@@ -611,6 +614,9 @@ export declare function run(command: any, args?: any): Promise<void | {
611
614
  Proven: string[];
612
615
  Blocked: string[];
613
616
  };
617
+ runtime_truth_matrix: string | null;
618
+ proof_level_by_subsystem: any;
619
+ fake_real_policy: string | null;
614
620
  blockers: any;
615
621
  };
616
622
  wrongness: {
@@ -624,6 +630,20 @@ export declare function run(command: any, args?: any): Promise<void | {
624
630
  status: string;
625
631
  }[];
626
632
  };
633
+ parallel_write_policy: {
634
+ schema: string;
635
+ generated_at: string;
636
+ route: string;
637
+ route_command: string;
638
+ write_mode: "off" | "proof-safe" | "parallel" | "serial";
639
+ apply_patches: boolean;
640
+ dry_run_patches: boolean;
641
+ max_write_agents: number;
642
+ readonly: boolean;
643
+ patch_queue_required: boolean;
644
+ patch_apply_mode: string;
645
+ route_level_flags_wired: boolean;
646
+ };
627
647
  proof: {
628
648
  schema: string;
629
649
  ok: boolean;
@@ -635,6 +655,12 @@ export declare function run(command: any, args?: any): Promise<void | {
635
655
  route_command: string;
636
656
  route_blackbox_kind: string;
637
657
  real_route_command_used: boolean;
658
+ parallel_write_policy: string;
659
+ parallel_write_route_flags_wired: boolean;
660
+ parallel_write_mode: any;
661
+ parallel_write_apply_patches: boolean;
662
+ parallel_write_dry_run_patches: boolean;
663
+ parallel_write_max_write_agents: number;
638
664
  real_parallel_claim: boolean;
639
665
  fake_backend_disclaimer: string | null;
640
666
  agent_count: any;
@@ -793,6 +819,8 @@ export declare function run(command: any, args?: any): Promise<void | {
793
819
  original_resolution_required: boolean;
794
820
  local_only_default: boolean;
795
821
  accepted_sources: string[];
822
+ web_capture_doc: string;
823
+ web_verification_policy: string;
796
824
  privacy: string;
797
825
  };
798
826
  image_generation_review: {
@@ -1045,6 +1073,7 @@ export declare function run(command: any, args?: any): Promise<void | {
1045
1073
  contract_hash: any;
1046
1074
  real_source_screenshot_present: boolean;
1047
1075
  computer_use_or_user_screenshot_source: any;
1076
+ official_or_user_screenshot_source: any;
1048
1077
  gpt_image_2_callout_generated: boolean;
1049
1078
  generated_image_ingested: boolean;
1050
1079
  callout_extraction_schema_valid: boolean;
@@ -1185,6 +1214,7 @@ export declare function run(command: any, args?: any): Promise<void | {
1185
1214
  contract_hash: any;
1186
1215
  real_source_screenshot_present: boolean;
1187
1216
  computer_use_or_user_screenshot_source: any;
1217
+ official_or_user_screenshot_source: any;
1188
1218
  gpt_image_2_callout_generated: boolean;
1189
1219
  generated_image_ingested: boolean;
1190
1220
  callout_extraction_schema_valid: boolean;
@@ -463,6 +463,9 @@ export declare function run(command: any, args?: any): Promise<void | {
463
463
  Proven: string[];
464
464
  Blocked: string[];
465
465
  };
466
+ runtime_truth_matrix: string | null;
467
+ proof_level_by_subsystem: any;
468
+ fake_real_policy: string | null;
466
469
  blockers: any;
467
470
  };
468
471
  wrongness: {
@@ -476,6 +479,20 @@ export declare function run(command: any, args?: any): Promise<void | {
476
479
  status: string;
477
480
  }[];
478
481
  };
482
+ parallel_write_policy: {
483
+ schema: string;
484
+ generated_at: string;
485
+ route: string;
486
+ route_command: string;
487
+ write_mode: "off" | "proof-safe" | "parallel" | "serial";
488
+ apply_patches: boolean;
489
+ dry_run_patches: boolean;
490
+ max_write_agents: number;
491
+ readonly: boolean;
492
+ patch_queue_required: boolean;
493
+ patch_apply_mode: string;
494
+ route_level_flags_wired: boolean;
495
+ };
479
496
  proof: {
480
497
  schema: string;
481
498
  ok: boolean;
@@ -487,6 +504,12 @@ export declare function run(command: any, args?: any): Promise<void | {
487
504
  route_command: string;
488
505
  route_blackbox_kind: string;
489
506
  real_route_command_used: boolean;
507
+ parallel_write_policy: string;
508
+ parallel_write_route_flags_wired: boolean;
509
+ parallel_write_mode: any;
510
+ parallel_write_apply_patches: boolean;
511
+ parallel_write_dry_run_patches: boolean;
512
+ parallel_write_max_write_agents: number;
490
513
  real_parallel_claim: boolean;
491
514
  fake_backend_disclaimer: string | null;
492
515
  agent_count: any;
@@ -37,6 +37,7 @@ export declare function run(_command: any, args?: any): Promise<void | {
37
37
  plugins: {
38
38
  computer_use_cache: string | null;
39
39
  browser_use_cache: string | null;
40
+ chrome_cache: string | null;
40
41
  default_plugins: {
41
42
  ok: boolean;
42
43
  checked: boolean;
@@ -60,6 +61,7 @@ export declare function run(_command: any, args?: any): Promise<void | {
60
61
  fast_mode_config_ok: boolean;
61
62
  };
62
63
  };
64
+ chrome_extension: any;
63
65
  guidance: any[];
64
66
  }>;
65
67
  //# sourceMappingURL=tmux.d.ts.map
@@ -8,6 +8,8 @@ export interface AgentCleanupExecutorOptions {
8
8
  dryRun?: boolean;
9
9
  drain?: boolean;
10
10
  staleMs?: number;
11
+ graceMs?: number;
12
+ killEscalation?: boolean;
11
13
  }
12
14
  type CleanupActionKind = 'terminate_process' | 'close_tmux_pane' | 'remove_temp_dir' | 'remove_lock' | 'skip_active_session' | 'skip_foreign_namespace' | 'archive_transcript_keep';
13
15
  interface CleanupAction {
@@ -44,12 +46,19 @@ export declare function runAgentCleanupExecutor(opts: AgentCleanupExecutorOption
44
46
  target: string;
45
47
  tree: ProcessTreeEntry[];
46
48
  }[];
49
+ process_tree_count: number;
47
50
  sigterm_planned: string[];
48
51
  sigterm_sent: string[];
49
52
  sigkill_escalations: string[];
50
53
  process_exit_verified: string[];
54
+ sigterm_count: number;
55
+ sigkill_count: number;
56
+ verified_exited_count: number;
57
+ failed_to_kill_count: number;
51
58
  stale_tmux_panes_found: string[];
52
59
  stale_tmux_panes_closed: string[];
60
+ tmux_panes_verified_closed: string[];
61
+ tmux_close_failures: string[];
53
62
  orphan_temp_dirs_found: string[];
54
63
  orphan_temp_dirs_removed: string[];
55
64
  stale_locks_found: string[];