sneakoscope 1.21.5 → 1.21.6

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 (34) hide show
  1. package/README.md +58 -111
  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 +13 -9
  8. package/dist/commands/doctor.js +8 -1
  9. package/dist/core/codex/codex-0-136-compat.d.ts +83 -0
  10. package/dist/core/codex/codex-0-136-compat.js +230 -0
  11. package/dist/core/codex-compat/codex-compat-report.d.ts +162 -2
  12. package/dist/core/codex-compat/codex-compat-report.js +73 -5
  13. package/dist/core/codex-compat/codex-version-policy.d.ts +3 -3
  14. package/dist/core/codex-compat/codex-version-policy.js +3 -3
  15. package/dist/core/commands/team-command.js +6 -4
  16. package/dist/core/doctor/global-sks-install-cleanup.d.ts +46 -0
  17. package/dist/core/doctor/global-sks-install-cleanup.js +251 -0
  18. package/dist/core/fsx.d.ts +1 -1
  19. package/dist/core/fsx.js +3 -2
  20. package/dist/core/hooks-runtime.js +13 -8
  21. package/dist/core/proof/runtime-truth-matrix.d.ts +1 -1
  22. package/dist/core/proof/runtime-truth-matrix.js +4 -1
  23. package/dist/core/routes.js +1 -1
  24. package/dist/core/safety/mutation-guard.d.ts +2 -0
  25. package/dist/core/safety/mutation-guard.js +6 -1
  26. package/dist/core/update-check.d.ts +18 -0
  27. package/dist/core/update-check.js +111 -4
  28. package/dist/core/version.d.ts +1 -1
  29. package/dist/core/version.js +1 -1
  30. package/dist/core/zellij/zellij-clipboard-config.js +11 -14
  31. package/dist/core/zellij/zellij-lane-renderer.d.ts +20 -0
  32. package/dist/core/zellij/zellij-lane-renderer.js +222 -32
  33. package/dist/scripts/release-parallel-check.js +1 -0
  34. package/package.json +5 -3
package/README.md CHANGED
@@ -16,7 +16,16 @@ Set up this agent project with Sneakoscope Codex. Use [[mandarange/Sneakoscope-C
16
16
 
17
17
  ## Current Release
18
18
 
19
- SKS **1.21.5** restores Codex App compatibility for Codex CLI 0.135-era routing and readiness checks. User prompts that mix frustration/question marks with explicit implementation or release work now route to `$Team` instead of `$Answer`, bare `context7 mcp` wording no longer falls into the `$DB` route, and Codex App Git Actions readiness now trusts the `codex remote-control` command/version capability instead of the removed `remote_control` feature flag. Active-route follow-up prompts now re-evaluate substantive analysis, research, and code work for fresh Team/Research-style native sessions instead of collapsing into the previous single active context; plain "keep going" continuations still resume the current route, and commit-only prompts stay lightweight. `sks --mad` now starts a same-mission native agent swarm before opening the cockpit lanes, `sks-fast-high` no longer forces `workspace-write` over the Codex App Full Access selector, and `$Goal` official-mode detection also reads `codex features list`. This keeps Commit, Push, Commit and Push, PR, MAD cockpit, Goal bridge, and repeated Team-route hook checks green on modern Codex when the corresponding Codex capabilities are present. It carries forward the 1.21.4 Zellij lane, Naruto, and terminal scrollback improvements.
19
+ SKS **1.21.6** promotes OpenAI Codex CLI `rust-v0.136.0` as the current compatibility baseline. The release matrix tracks 0.136 session archive/unarchive, app-server `--stdio`, resumed-turn/status behavior, `CODEX_API_KEY` remote registration, short-lived remote-control tokens, elevated Windows sandbox setup, feature-gated image-generation extension support, ChatGPT auth refresh handling, command-safety hardening, sandbox cleanup, Bedrock region fallback, and rmcp 1.7.0 compatibility.
20
+
21
+ This release also tightens the day-to-day operator path:
22
+
23
+ - Zellij lane panes now surface the native worker session they are following, including per-slot worker status and stdout/stderr/heartbeat tails.
24
+ - Native terminal drag-copy is the default in SKS-launched Zellij sessions; hover-pane mouse routing is opt-in with `SKS_ZELLIJ_MOUSE_MODE=1`.
25
+ - Update prompts compare npm latest against an effective installed version that includes source, PATH, and global npm package metadata, so completed global updates stop being re-offered.
26
+ - `sks doctor --fix` can remove duplicate global `sks`/`sneakoscope` npm installs while exempting the Sneakoscope source checkout.
27
+
28
+ It carries forward the 0.135-era routing/readiness fixes: mixed frustration plus explicit implementation prompts still route to `$Team`, bare `context7 mcp` no longer implies `$DB`, Git Actions readiness uses the `codex remote-control` command/version capability, and repeated substantive prompts prepare fresh Team/Research-style native sessions. Zellij lane, Naruto, terminal scrollback, MAD cockpit, Goal bridge, and Fast profile fixes remain in place.
20
29
 
21
30
  SKS **1.20.4** is a targeted `sks --mad` / codex-lb Zellij usability patch: when a background MAD Zellij session launches successfully, SKS now prints the exact `Attach with: ZELLIJ_SOCKET_DIR=... zellij attach ...` command so operators can enter the fresh session without manually reconstructing the socket namespace.
22
31
 
@@ -30,61 +39,14 @@ SKS **1.20.1** introduces the **SKS Core Skill Engine** — a SkillOpt-style sel
30
39
 
31
40
  It carries forward the 1.19.x hardening unchanged: legacy 1.18.x/1.19.x→1.20.1 **zero-break upgrade** (user `model`/`service_tier`/`model_reasoning_effort` and user-disabled Codex App flags never overwritten; existing skill cards preserved), the **migration transaction journal** (`.sneakoscope/reports/migration-1.20.1-journal.jsonl`), **Zellij launch-command truth** + real-session **heartbeat-timeout blocker** + the redesigned **Zellij lane UI**, **packlist/publish-performance** gates, a **postinstall safe-side-effects** gate, and the **TS source-of-truth / Rust optional-accelerator** boundary (publish never compiles Rust). `sks zellij status`/`repair` inspects the Zellij runtime without auto-installing anything.
32
41
 
42
+ Core release checks:
43
+
33
44
  ```bash
34
- sks mad-sks plan --target-root <path> --json
35
- sks mad-sks permissions --json
36
- sks mad-sks proof --json
37
- sks mad-sks rollback-apply --rollback-plan <path> --yes --json
38
- sks features complete --json
39
- sks agent status latest --json
40
- sks agent run "release review" --agents 8 --work-items 16 --concurrency 4 --mock --json
41
- npm run source-intelligence:all-modes
42
- npm run agent:background-terminals
45
+ npm run codex:0.136-compat
43
46
  npm run zellij:lane-renderer
44
- npm run zellij:pane-proof
45
- npm run zellij:screen-proof
46
- npm run agent:cleanup-executor
47
- npm run agent:cleanup-executor-v2
48
- npm run retention:cleanup-safety
49
- npm run agent:intelligent-work-graph
50
- npm run agent:ast-aware-work-graph
51
- npm run proof:fake-vs-real-policy
52
- npm run proof:fake-real-policy-v2
53
- npm run release:runtime-truth-matrix
54
- npm run codex:0.134-official-compat
55
- npm run codex:profile-primary
56
- npm run codex:managed-proxy-env
57
- npm run strategy:adhd-orchestrating-gate
58
- npm run strategy:parallel-modification-plan
59
- npm run appshots:evidence
60
- npm run appshots:source-intelligence
61
- npm run appshots:thread-attachment-discovery
62
- npm run mcp:0.134-modernization
63
- npm run mcp:readonly-runtime-scheduler
64
- npm run codex:0.134-runner-truth
65
- npm run source-intelligence:codex-history-search
66
- npm run agent:parallel-write-kernel
67
- npm run agent:patch-swarm-runtime-truth
68
- npm run agent:patch-transaction-journal
69
- npm run agent:patch-conflict-rebase
70
- npm run agent:strategy-to-patch-strict
71
- npm run agent:rollback-command
72
- npm run agent:native-cli-session-swarm
73
- npm run agent:native-cli-session-swarm-10
74
- npm run agent:native-cli-session-swarm-20
75
- npm run agent:no-subagent-scaling
76
- npm run agent:native-cli-session-proof
77
- npm run agent:fast-mode-default
78
- npm run agent:fast-mode-worker-propagation
79
- npm run codex:fast-mode-profile-propagation
80
- npm run mad-sks:fast-mode-propagation
81
- SKS_TEST_REAL_CODEX_PATCHES=1 npm run agent:real-codex-patch-envelope-smoke
82
- npm run release:gate-existence-audit
83
- npm run route:blackbox-realism
84
- npm run release:real-check
85
- npm run agent:backfill-route-blackbox
86
- npm run team:actual-route-backfill
47
+ npm run mad-sks:zellij-launch
87
48
  npm run release:readiness
49
+ npm run release:check
88
50
  ```
89
51
 
90
52
  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).
@@ -98,9 +60,9 @@ Detailed release history lives in [CHANGELOG.md](CHANGELOG.md); every version-fa
98
60
  SKS_NARUTO_MAX_CONCURRENCY=48 sks naruto run "sweep the test suite" --clones 48
99
61
  ```
100
62
 
101
- - **Zellij trackpad scroll.** SKS-launched Zellij sessions enable `mouse_mode` so the trackpad wheel scrolls the pane under the cursor (the conversation/transcript) instead of the focused prompt input. Copy still works via `copy_command=pbcopy` + `copy_on_select`; set `SKS_ZELLIJ_MOUSE_MODE=0` to opt out.
63
+ - **Zellij scrollback and copy.** SKS launches Codex panes with `--no-alt-screen`, so the terminal keeps the conversation transcript in scrollback. Zellij `mouse_mode` is off by default so normal mouse-drag text selection works for copy. Set `SKS_ZELLIJ_MOUSE_MODE=1` only when you prefer Zellij hover-pane wheel routing; in that mode some terminals require Shift-drag for native selection.
102
64
 
103
- - **Live MAD / Naruto cockpit lanes.** `sks --mad` starts a same-mission native agent swarm and opens the right-pane cockpit against that ledger, so fan-out work shows up live instead of a permanent "Workers idle". Tune MAD fan-out with `--mad-agents`, `--mad-swarm-work-items`, and `--mad-swarm-backend`; use `--no-mad-swarm` only when you intentionally want the old UI-only launch. Each Zellij lane now has per-slot SKS state, a nonblocking JSONL command bus, dynamic pane-id reconciliation from `zellij action list-panes --json --all`, and `nice`/dispatch-throttle metadata so later lane coordination does not fall back to a single synthetic pane. If a lane's own mission ledger is idle, the renderer can still mirror the most-recent active agent mission; disable that follow behavior with `SKS_LANE_FOLLOW_ACTIVE_MISSION=0`.
65
+ - **Live MAD / Naruto cockpit lanes.** `sks --mad` starts a same-mission native agent swarm and opens the right-pane cockpit against that ledger. Lane panes follow per-slot worker artifacts such as `worker.stdout.log`, `worker.stderr.log`, and `worker-heartbeat.jsonl`, so fan-out work shows as live worker status instead of a static "Workers idle" panel. Tune MAD fan-out with `--mad-agents`, `--mad-swarm-work-items`, and `--mad-swarm-backend`; use `--no-mad-swarm` only when you intentionally want the old UI-only launch. Each Zellij lane has per-slot SKS state, a nonblocking JSONL command bus, dynamic pane-id reconciliation from `zellij action list-panes --json --all`, and `nice`/dispatch-throttle metadata. If a lane's own mission ledger is idle, the renderer can mirror the most-recent active agent mission; disable that follow behavior with `SKS_LANE_FOLLOW_ACTIVE_MISSION=0`.
104
66
 
105
67
  - **Image generation under codex-lb.** `gpt-image-2` routes through the same Codex `/responses` backend the load balancer already proxies, so `$imagegen` works when you are authenticated only through codex-lb (no direct `OPENAI_API_KEY`). The official Codex App `$imagegen` surface stays primary; the codex-lb/OpenAI API path is the fallback. Opt out with `SKS_IMAGEGEN_ALLOW_CODEX_LB_API_FALLBACK=0`.
106
68
 
@@ -113,7 +75,7 @@ Detailed release history lives in [CHANGELOG.md](CHANGELOG.md); every version-fa
113
75
  sks xai docs
114
76
  ```
115
77
 
116
- - **Quieter update prompts.** The "update available" choice is shown once per conversation and then stays quiet for a short window (default 8 min, `SKS_UPDATE_OFFER_THROTTLE_MS`) instead of repeating on every prompt.
78
+ - **Quieter update prompts.** The "update available" choice is shown once per conversation and then stays quiet for a short window (default 8 min, `SKS_UPDATE_OFFER_THROTTLE_MS`) instead of repeating on every prompt. The check compares npm latest against source metadata, PATH `sks --version`, and the global npm package, so a completed `npm i -g sneakoscope` clears stale pending/accepted offers.
117
79
 
118
80
  ## Retention And Cleanup
119
81
 
@@ -216,9 +178,9 @@ sks rust smoke --json
216
178
  2. Image Voxel TriWiki anchors and relations for every visual route
217
179
  3. Route contracts, evidence indexes, wrongness memory, trust reports, Codex App, codex-lb, hooks, Rust fallback parity, DB, route modularity, and generated fixtures verified by release gates
218
180
 
219
- ## Install Options
181
+ ## Install
220
182
 
221
- Recommended: install globally with `npm i -g sneakoscope`, then run `sks` from either a project or any global shell location:
183
+ Recommended path:
222
184
 
223
185
  ```sh
224
186
  npm i -g sneakoscope
@@ -226,22 +188,32 @@ sks root
226
188
  sks doctor
227
189
  ```
228
190
 
229
- `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.
191
+ The global npm install refreshes the `sks` command shim, generated Codex App `$` skills, and the SKS bootstrap surface together. If a project marker is present, postinstall bootstraps that project; otherwise SKS uses the per-user global runtime root. `sks root` shows the active root.
230
192
 
231
- If you only want a one-shot run without keeping `sks` installed globally:
193
+ One-shot run without keeping a global install:
232
194
 
233
195
  ```sh
234
196
  npx -y -p sneakoscope sks root
235
197
  ```
236
198
 
237
- For a repo-local install:
199
+ Project-pinned install:
238
200
 
239
201
  ```sh
240
202
  npm i -D sneakoscope
241
203
  npx sks setup --install-scope project
242
204
  ```
243
205
 
244
- Check that the install is usable:
206
+ Source checkout for developing Sneakoscope itself:
207
+
208
+ ```sh
209
+ git clone https://github.com/mandarange/Sneakoscope-Codex.git
210
+ cd Sneakoscope-Codex
211
+ npm install
212
+ npm install -g .
213
+ sks --version
214
+ ```
215
+
216
+ Install health checks:
245
217
 
246
218
  ```sh
247
219
  sks deps check
@@ -283,56 +255,10 @@ brew install zellij
283
255
 
284
256
  The default `sks` runtime checks npm for newer `sneakoscope` and `@openai/codex` versions before opening the interactive runtime. `npm i -g sneakoscope` runs a safe bootstrap/readiness pass; use `sks bootstrap --yes`, `sks deps check --yes`, or `sks --mad --yes` to install or repair Codex CLI/Zellij when Homebrew is available. `sks --mad` requires Zellij for interactive MAD/lane UI and prints the session, gate, attach command, blockers, and labeled Zellij stderr/stdout details needed to act.
285
257
 
286
- ## Installation
287
-
288
- ### Global Install
289
-
290
- Use this recommended path when you want `sks` available from any repo:
291
-
292
- ```sh
293
- npm i -g sneakoscope
294
- sks root
295
- ```
296
-
297
- `sks` commands work even when no project root is present. Project-aware commands use the nearest `.sneakoscope`, `.dcodex`, or `.git` root; if none exists, SKS uses a per-user global runtime root. Global npm install/upgrade automatically bootstraps the current project when a project marker is present, otherwise it bootstraps the global runtime root. Run `sks bootstrap` manually only when you intentionally want to initialize or repair the current project after install.
298
-
299
258
  Project setup writes shared `.gitignore` entries for generated SKS files: `.sneakoscope/`, `.codex/`, `.agents/`, and managed `AGENTS.md`. Setup, doctor repair, and npm postinstall refreshes also compare the previous SKS generated-file manifest with the current package templates and prune stale SKS-generated legacy skills or agent files while preserving user-owned custom skills. Use `sks setup --local-only` when you want those excludes kept only in `.git/info/exclude`.
300
259
 
301
260
  During npm postinstall, SKS installs generated Codex App skills and tries `skills add MohtashamMurshid/getdesign` when the `skills` CLI is available. Design work still flows through one authority: `design.md`.
302
261
 
303
- ### One-Shot Install
304
-
305
- Use this when you do not want to keep a global install:
306
-
307
- ```sh
308
- npx -y -p sneakoscope sks bootstrap
309
- ```
310
-
311
- `npx` fetches the package into npm's cache and runs the binary for that command. This is useful for first-time setup or CI-style verification.
312
-
313
- ### Project Install
314
-
315
- Use this when a repo should pin Sneakoscope as a development dependency:
316
-
317
- ```sh
318
- npm i -D sneakoscope
319
- npx sks setup --install-scope project
320
- ```
321
-
322
- Project installs are useful when a team wants a repeatable harness version checked through `package-lock.json`.
323
-
324
- ### Source Checkout
325
-
326
- Use this when developing Sneakoscope itself:
327
-
328
- ```sh
329
- git clone https://github.com/mandarange/Sneakoscope-Codex.git
330
- cd Sneakoscope-Codex
331
- npm install
332
- npm install -g .
333
- sks --version
334
- ```
335
-
336
262
  ## Terminal CLI Usage
337
263
 
338
264
  Use terminal commands when you want to inspect, set up, verify, or start a CLI-first workspace.
@@ -687,13 +613,25 @@ By default, SKS favors inspection, local files, branch-safe changes, explicit co
687
613
  ### `sks` points to an old version
688
614
 
689
615
  ```sh
690
- which sks
616
+ which -a sks
691
617
  sks --version
692
618
  node ./dist/bin/sks.js --version
619
+ npm ls -g sneakoscope --depth=0
693
620
  npm install -g .
621
+ sks doctor --fix
694
622
  ```
695
623
 
696
- If stale, reinstall globally from the repo or npm.
624
+ If PATH or npm has duplicate global installs, `sks doctor --fix` keeps one global npm install and removes duplicate global `sneakoscope` installs. The Sneakoscope source checkout is exempt so local development files are not removed.
625
+
626
+ ### SKS keeps asking to update after a global update
627
+
628
+ ```sh
629
+ sks update-check --json
630
+ npm ls -g sneakoscope --depth=0
631
+ sks doctor --fix
632
+ ```
633
+
634
+ Update prompts compare npm latest against the effective installed version from source metadata, PATH `sks --version`, and global npm package metadata. If a global update succeeded but an old shim remains earlier on PATH, `sks doctor --fix` can remove duplicate global installs and refresh the managed setup.
697
635
 
698
636
  ### Zellij is missing
699
637
 
@@ -704,6 +642,15 @@ npm run zellij:capability
704
642
 
705
643
  Install Zellij from [zellij.dev](https://zellij.dev/documentation/installation.html), then run `npm run zellij:capability` or `sks doctor --json`. Without Zellij, non-interactive checks can continue, but `sks --mad` and interactive lane UI report `mad_ready: false`.
706
644
 
645
+ ### Zellij copy or right lanes feel wrong
646
+
647
+ ```sh
648
+ sks team open-zellij latest
649
+ sks zellij status
650
+ ```
651
+
652
+ Normal mouse-drag copy is the default because SKS launches Zellij with `mouse_mode=false`. Conversation scrollback is still preserved by Codex `--no-alt-screen`. If you prefer Zellij hover-pane wheel routing, launch with `SKS_ZELLIJ_MOUSE_MODE=1`; use Shift-drag if your terminal then captures selection differently. Right lanes are renderer panes that follow SKS worker artifacts, so live native-agent output is shown from per-slot `worker.stdout.log`, `worker.stderr.log`, and `worker-heartbeat.jsonl`.
653
+
707
654
  ### Codex App tools are missing
708
655
 
709
656
  ```sh
@@ -763,7 +710,7 @@ npm run release:check
763
710
  npm run publish:dry
764
711
  ```
765
712
 
766
- `release:check` runs the current 1.20.x release-closure DAG, writes a source digest stamp under `.sneakoscope/reports/`, then refreshes release readiness so publish commands can verify the same stamp. The DAG preserves the 1.18 baseline gates and adds patch swarm runtime truth, transaction journaling, serial conflict rebase, strict strategy-to-patch proof, rollback command proof, Native CLI Session Swarm 5/10/20-process proof, Real Worker Backend Router proof, Codex child overlap proof, model-authored patch-envelope separation, Zellij layout/pane/screen/socket-dir proof, no-subagent-scaling proof, Fast mode default/worker/Codex/MAD propagation proof, Appshots attachment provenance, MCP runtime overlap evidence, Codex 0.134/0.135 runner truth, task graph expansion, schema-bound follow-up work, actual Agent/Team/Research/QA route blackboxes, scheduler proof hardening, Source Intelligence propagation, and Goal mode propagation checks. Broader live gates remain explicit scripts such as `release:real-check`; real Codex patch smoke, real Codex parallel worker proof, and real Zellij proof are optional unless their `SKS_REQUIRE_REAL_*` or `SKS_REQUIRE_ZELLIJ=1` environment variables are set. Generate the human-readable registry with `sks features inventory --write-docs`. Plain `npm publish` uses the `latest` dist-tag. npm's `prepublishOnly` verifies the fresh release stamp instead of rerunning the full gate, and `prepack` only rebuilds `dist`; publish no longer repeats the expensive release suite during packaging. `npm run publish:dry` remains the explicit dry-run helper.
713
+ `release:check` runs the current 1.21.x release-closure DAG, writes a source digest stamp under `.sneakoscope/reports/`, then refreshes release readiness so publish commands can verify the same stamp. The DAG preserves the 1.18 baseline gates and adds Codex 0.136 compatibility, inherited Codex 0.135/0.134 runner truth, patch swarm runtime truth, transaction journaling, serial conflict rebase, strict strategy-to-patch proof, rollback command proof, Native CLI Session Swarm 5/10/20-process proof, Real Worker Backend Router proof, Codex child overlap proof, model-authored patch-envelope separation, Zellij layout/pane/screen/socket-dir proof, no-subagent-scaling proof, Fast mode default/worker/Codex/MAD propagation proof, Appshots attachment provenance, MCP runtime overlap evidence, task graph expansion, schema-bound follow-up work, actual Agent/Team/Research/QA route blackboxes, scheduler proof hardening, Source Intelligence propagation, and Goal mode propagation checks. Broader live gates remain explicit scripts such as `release:real-check`; real Codex patch smoke, real Codex parallel worker proof, and real Zellij proof are optional unless their `SKS_REQUIRE_REAL_*` or `SKS_REQUIRE_ZELLIJ=1` environment variables are set. Generate the human-readable registry with `sks features inventory --write-docs`. Plain `npm publish` uses the `latest` dist-tag. npm's `prepublishOnly` verifies the fresh release stamp instead of rerunning the full gate, and `prepack` only rebuilds `dist`; publish no longer repeats the expensive release suite during packaging. `npm run publish:dry` remains the explicit dry-run helper.
767
714
 
768
715
  Version bumps are manual. Run `sks versioning bump` only when preparing release metadata; SKS will not create `.git/hooks/pre-commit` or auto-bump during ordinary commits.
769
716
 
@@ -76,7 +76,7 @@ dependencies = [
76
76
 
77
77
  [[package]]
78
78
  name = "sks-core"
79
- version = "1.21.5"
79
+ version = "1.21.6"
80
80
  dependencies = [
81
81
  "serde_json",
82
82
  ]
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "sks-core"
3
- version = "1.21.5"
3
+ version = "1.21.6"
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.21.5"),
7
+ Some("--version") => println!("sks-rs 1.21.6"),
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.21.5",
5
- "source_digest": "2fb1d498e53bcbf76f7619c1ea8f3fbef564ddf96d97d2b88b743c51f12450e7",
6
- "source_file_count": 1765,
7
- "built_at_source_time": 1780379909190
4
+ "package_version": "1.21.6",
5
+ "source_digest": "3577af7555600bd9748b9c3252bf18a727db23c92740e7a06dc778b467aa1495",
6
+ "source_file_count": 1771,
7
+ "built_at_source_time": 1780391165608
8
8
  }
package/dist/bin/sks.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const FAST_PACKAGE_VERSION = '1.21.5';
2
+ const FAST_PACKAGE_VERSION = '1.21.6';
3
3
  const args = process.argv.slice(2);
4
4
  try {
5
5
  if (args[0] === '--agent' && args[1] === 'worker') {
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "schema": "sks.dist-build.v2",
3
- "version": "1.21.5",
4
- "package_version": "1.21.5",
3
+ "version": "1.21.6",
4
+ "package_version": "1.21.6",
5
5
  "typescript": true,
6
6
  "mjs_runtime_files": 0,
7
- "compiled_file_count": 1028,
8
- "compiled_js_count": 514,
9
- "compiled_dts_count": 514,
10
- "source_digest": "2fb1d498e53bcbf76f7619c1ea8f3fbef564ddf96d97d2b88b743c51f12450e7",
11
- "source_file_count": 1765,
12
- "source_files_hash": "24cbdb061915eb66608252400a9c6feba71d0fb99480bf683049fe5e59792c89",
13
- "source_list_hash": "24cbdb061915eb66608252400a9c6feba71d0fb99480bf683049fe5e59792c89",
7
+ "compiled_file_count": 1032,
8
+ "compiled_js_count": 516,
9
+ "compiled_dts_count": 516,
10
+ "source_digest": "3577af7555600bd9748b9c3252bf18a727db23c92740e7a06dc778b467aa1495",
11
+ "source_file_count": 1771,
12
+ "source_files_hash": "1f79c92a7165654f5ae190c1719e7e8ec89337ed8f265c7a68242ef613848f19",
13
+ "source_list_hash": "1f79c92a7165654f5ae190c1719e7e8ec89337ed8f265c7a68242ef613848f19",
14
14
  "src_mjs_runtime_files": 0,
15
15
  "dist_stamp_schema": "sks.dist-build-stamp.v1",
16
16
  "files": [
@@ -404,6 +404,8 @@
404
404
  "core/codex/codex-0-134-compat.js",
405
405
  "core/codex/codex-0-135-compat.d.ts",
406
406
  "core/codex/codex-0-135-compat.js",
407
+ "core/codex/codex-0-136-compat.d.ts",
408
+ "core/codex/codex-0-136-compat.js",
407
409
  "core/codex/codex-cli-syntax-builder.d.ts",
408
410
  "core/codex/codex-cli-syntax-builder.js",
409
411
  "core/codex/codex-config-eperm-repair.d.ts",
@@ -540,6 +542,8 @@
540
542
  "core/doctor/codex-doctor-bridge.js",
541
543
  "core/doctor/doctor-readiness-matrix.d.ts",
542
544
  "core/doctor/doctor-readiness-matrix.js",
545
+ "core/doctor/global-sks-install-cleanup.d.ts",
546
+ "core/doctor/global-sks-install-cleanup.js",
543
547
  "core/doctor/macos-tcc-diagnostic.d.ts",
544
548
  "core/doctor/macos-tcc-diagnostic.js",
545
549
  "core/dogfood-loop.d.ts",
@@ -11,6 +11,7 @@ import { inspectCodexConfigReadability } from '../core/codex/codex-config-readab
11
11
  import { repairCodexConfigEperm } from '../core/codex/codex-config-eperm-repair.js';
12
12
  import { writeDoctorReadinessMatrix } from '../core/doctor/doctor-readiness-matrix.js';
13
13
  import { runCodexDoctorBridge, compareCodexDoctorBridge } from '../core/doctor/codex-doctor-bridge.js';
14
+ import { cleanDuplicateGlobalSksInstalls } from '../core/doctor/global-sks-install-cleanup.js';
14
15
  import { checkZellijCapability } from '../core/zellij/zellij-capability.js';
15
16
  import { inventoryCodexPermissionProfiles } from '../core/codex/codex-permission-profiles.js';
16
17
  import { appendMigrationEvents, hashConfigText } from '../core/migration/migration-transaction-journal.js';
@@ -76,6 +77,9 @@ export async function run(_command, args = []) {
76
77
  const codexLb = codexLbMetrics(await readCodexLbCircuit(root).catch(() => ({})));
77
78
  const zellij = await checkZellijCapability({ root, require: process.env.SKS_REQUIRE_ZELLIJ === '1' });
78
79
  const permissionProfiles = await inventoryCodexPermissionProfiles(root, { writeReport: true });
80
+ const globalSksInstallCleanup = flag(args, '--fix') && !flag(args, '--local-only')
81
+ ? await cleanDuplicateGlobalSksInstalls({ root, fix: true }).catch((err) => ({ schema: 'sks.global-sks-install-cleanup.v1', ok: false, fix: true, error: err?.message || String(err), blockers: ['global_sks_install_cleanup_exception'] }))
82
+ : null;
79
83
  const { detectImagegenCapability } = await import('../core/imagegen/imagegen-capability.js');
80
84
  const imagegen = await detectImagegenCapability({ codexBin: codexBin || undefined }).catch((err) => ({ ok: false, error: err.message, auth_readiness: null }));
81
85
  const pkgBytes = await dirSize(root).catch(() => 0);
@@ -118,7 +122,7 @@ export async function run(_command, args = []) {
118
122
  ready,
119
123
  sneakoscope: { ok: await exists(`${root}/.sneakoscope`) },
120
124
  package: { bytes: pkgBytes, human: formatBytes(pkgBytes) },
121
- repair: { setup: setupRepair, codex_config: configRepair, migration_journal: migrationJournal }
125
+ repair: { setup: setupRepair, codex_config: configRepair, migration_journal: migrationJournal, global_sks_installs: globalSksInstallCleanup }
122
126
  };
123
127
  if (flag(args, '--json')) {
124
128
  printJson(result);
@@ -172,6 +176,9 @@ export async function run(_command, args = []) {
172
176
  if (migrationJournal?.journal_path) {
173
177
  console.log(`Migration journal: ${migrationJournal.journal_path} (${migrationJournal.event_count} events, ${migrationJournal.mutations_without_rollback} without rollback)`);
174
178
  }
179
+ if (globalSksInstallCleanup) {
180
+ console.log(`Global SKS installs: kept ${globalSksInstallCleanup.kept?.length ?? 0}, removed ${globalSksInstallCleanup.removed?.filter((entry) => entry.ok).length ?? 0}, source repo exempt ${globalSksInstallCleanup.candidates?.filter((entry) => entry.source_repo_exempt).length ?? 0}`);
181
+ }
175
182
  if (!ready.ready && ready.next_actions?.length) {
176
183
  console.log('What still needs you:');
177
184
  for (const action of ready.next_actions)
@@ -0,0 +1,83 @@
1
+ export declare const CODEX_0_136_BASELINE_TAG = "rust-v0.136.0";
2
+ export declare const CODEX_0_136_VERSION = "0.136.0";
3
+ export declare const CODEX_0_136_SCHEMA = "sks.codex-0.136-compat.v1";
4
+ export type Codex0136CapabilityStatus = 'detected' | 'release_baseline' | 'unavailable' | 'blocked';
5
+ export type Codex0136CapabilityId = 'tui_hyperlink_markdown_tables' | 'session_archive_restore' | 'app_server_resume_status_stdio' | 'remote_api_key_registration_server_tokens' | 'windows_sandbox_elevated_setup' | 'native_image_generation_extension_pipeline' | 'chatgpt_auth_refresh_relogin' | 'command_safety_hardening' | 'sandbox_cleanup_deny_read_preserved' | 'tui_resume_hook_vim_stability' | 'app_server_fs_watch_search_activity' | 'bedrock_region_service_tier_hardening' | 'rmcp_1_7_compat';
6
+ export interface Codex0136Capability {
7
+ id: Codex0136CapabilityId;
8
+ priority: 'P0' | 'P1' | 'P2';
9
+ status: Codex0136CapabilityStatus;
10
+ detector: string;
11
+ notes: string[];
12
+ }
13
+ export interface Codex0136LocalEvidence {
14
+ available: boolean;
15
+ versionText: string;
16
+ doctorText: string;
17
+ archiveHelp: string;
18
+ unarchiveHelp: string;
19
+ appServerHelp: string;
20
+ sandboxSetupHelp: string;
21
+ remoteControlHelp: string;
22
+ warnings: string[];
23
+ }
24
+ export declare const CODEX_0_136_RELEASE_EVIDENCE: Readonly<{
25
+ upstream: "openai/codex";
26
+ tag: "rust-v0.136.0";
27
+ tag_url: "https://github.com/openai/codex/releases/tag/rust-v0.136.0";
28
+ commit: "7ca6113";
29
+ release_date: "2026-06-01";
30
+ local_detection: string[];
31
+ release_notes_topics: string[];
32
+ }>;
33
+ export declare function codex0136Capabilities(input?: {
34
+ version?: string | null;
35
+ available?: boolean;
36
+ doctorText?: string;
37
+ archiveHelp?: string;
38
+ unarchiveHelp?: string;
39
+ appServerHelp?: string;
40
+ sandboxSetupHelp?: string;
41
+ remoteControlHelp?: string;
42
+ }): Codex0136Capability[];
43
+ export declare function codex0136Matrix(input?: {
44
+ version?: string | null;
45
+ available?: boolean;
46
+ doctorText?: string;
47
+ archiveHelp?: string;
48
+ unarchiveHelp?: string;
49
+ appServerHelp?: string;
50
+ sandboxSetupHelp?: string;
51
+ remoteControlHelp?: string;
52
+ requireReal?: boolean;
53
+ }): {
54
+ schema: string;
55
+ baseline: string;
56
+ required_version: string;
57
+ release_evidence: Readonly<{
58
+ upstream: "openai/codex";
59
+ tag: "rust-v0.136.0";
60
+ tag_url: "https://github.com/openai/codex/releases/tag/rust-v0.136.0";
61
+ commit: "7ca6113";
62
+ release_date: "2026-06-01";
63
+ local_detection: string[];
64
+ release_notes_topics: string[];
65
+ }>;
66
+ inherited_baselines: string[];
67
+ detected_version: string | null;
68
+ available: boolean;
69
+ require_real: boolean;
70
+ capabilities: Codex0136Capability[];
71
+ session_archive_supported: boolean;
72
+ app_server_stdio_supported: boolean;
73
+ remote_api_key_registration_supported: boolean;
74
+ command_safety_hardening_supported: boolean;
75
+ native_image_generation_extension_supported: boolean;
76
+ ok: boolean;
77
+ warnings: string[];
78
+ blockers: string[];
79
+ };
80
+ export declare function collectCodex0136LocalEvidence(opts?: {
81
+ codexBin?: string | null;
82
+ }): Promise<Codex0136LocalEvidence>;
83
+ //# sourceMappingURL=codex-0-136-compat.d.ts.map