sneakoscope 6.4.0 → 6.7.0
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.
- package/README.md +26 -34
- package/config/codex-releases/{rust-v0.144.1.json → rust-v0.144.5.json} +5 -5
- package/crates/sks-core/Cargo.lock +1 -1
- package/crates/sks-core/Cargo.toml +1 -1
- package/dist/bin/install.js +1 -1
- package/dist/cli/command-manifest-lite.js +2 -3
- package/dist/cli/command-registry.js +6 -4
- package/dist/cli/help-fast.js +0 -1
- package/dist/cli/router.js +24 -3
- package/dist/commands/zellij.js +18 -29
- package/dist/config/skills-manifest.json +62 -62
- package/dist/core/agent-bridge/agent-manifest.js +22 -1
- package/dist/core/agents/agent-codex-cockpit.js +1 -81
- package/dist/core/agents/agent-effort-policy.js +13 -7
- package/dist/core/agents/agent-orchestrator.js +0 -6
- package/dist/core/agents/agent-output-validator.js +2 -1
- package/dist/core/agents/agent-patch-queue-store.js +0 -8
- package/dist/core/agents/agent-proof-evidence.js +0 -6
- package/dist/core/agents/agent-worker-pipeline.js +12 -6
- package/dist/core/agents/native-cli-worker-runtime.js +1 -16
- package/dist/core/agents/native-worker-backend-router.js +1 -1
- package/dist/core/bench.js +1 -1
- package/dist/core/codex/official-goal-mode.js +4 -2
- package/dist/core/codex-app/codex-app-fast-ui-repair.js +11 -17
- package/dist/core/codex-app/codex-app-ui-state-snapshot.js +34 -6
- package/dist/core/codex-app/menubar/constants.js +0 -1
- package/dist/core/codex-app.js +1 -1
- package/dist/core/codex-compat/codex-release-manifest.js +5 -5
- package/dist/core/codex-control/codex-0139-image-path-real-probe.js +1 -1
- package/dist/core/codex-control/codex-0139-web-search-probe.js +1 -1
- package/dist/core/codex-control/codex-control-proof.js +1 -0
- package/dist/core/codex-control/codex-fake-sdk-adapter.js +1 -1
- package/dist/core/codex-control/codex-lb-launch-recovery.js +7 -3
- package/dist/core/codex-control/codex-sdk-adapter.js +8 -7
- package/dist/core/codex-control/codex-sdk-config-policy.js +4 -24
- package/dist/core/codex-control/codex-sdk-env-policy.js +396 -11
- package/dist/core/codex-control/codex-task-runner.js +112 -57
- package/dist/core/codex-control/gpt-final-arbiter.js +1 -2
- package/dist/core/codex-control/python-codex-sdk-adapter.js +38 -15
- package/dist/core/codex-lb/codex-lb-tool-catalog.js +3 -3
- package/dist/core/codex-native/core-skill-manifest.js +4 -7
- package/dist/core/codex-runtime/resolve-codex-runtime.js +199 -0
- package/dist/core/commands/agent-bridge-command.js +46 -15
- package/dist/core/commands/basic-cli.js +1 -1
- package/dist/core/commands/command-utils.js +2 -2
- package/dist/core/commands/eval-command.js +19 -2
- package/dist/core/commands/goal-command.js +37 -86
- package/dist/core/commands/mad-sks-command.js +0 -2
- package/dist/core/commands/naruto-command.js +236 -176
- package/dist/core/doctor/current-project-guidance.js +1 -1
- package/dist/core/doctor/doctor-dirty-planner.js +1 -1
- package/dist/core/doctor/retired-managed-residue-missions.js +26 -11
- package/dist/core/doctor/retired-managed-residue-private.js +1 -1
- package/dist/core/doctor/retired-managed-residue-runtime.js +12 -2
- package/dist/core/doctor/retired-managed-residue-state.js +7 -7
- package/dist/core/evaluation.js +83 -21
- package/dist/core/feature-fixtures.js +4 -7
- package/dist/core/feature-registry.js +0 -1
- package/dist/core/fsx.js +169 -14
- package/dist/core/goal-workflow.js +71 -140
- package/dist/core/hooks-runtime/hook-io.js +2 -2
- package/dist/core/hooks-runtime.js +228 -50
- package/dist/core/init/skills.js +7 -6
- package/dist/core/init.js +52 -33
- package/dist/core/install/installed-package-smoke.js +1 -1
- package/dist/core/lean-engineering-policy.js +25 -23
- package/dist/core/locks/file-lock.js +74 -21
- package/dist/core/managed-assets/managed-assets-manifest.js +1 -1
- package/dist/core/mcp-config/health-check.js +7 -2
- package/dist/core/mission.js +99 -3
- package/dist/core/ops/upgrade-migration-fixtures.js +30 -2
- package/dist/core/pipeline-internals/runtime-core.js +67 -95
- package/dist/core/pipeline-internals/runtime-gates.js +25 -6
- package/dist/core/proof/fake-real-proof-policy.js +32 -9
- package/dist/core/proof/route-proof-gate.js +49 -1
- package/dist/core/provider/model-router.js +2 -0
- package/dist/core/questions.js +31 -5
- package/dist/core/recallpulse.js +2 -2
- package/dist/core/release/canonical-test-proof.js +135 -0
- package/dist/core/release/release-closure-contract.js +1 -0
- package/dist/core/release/release-closure-validation.js +25 -12
- package/dist/core/release/release-closure.js +34 -5
- package/dist/core/release/release-gate-contract.js +4 -3
- package/dist/core/release/release-gate-dag.js +4 -2
- package/dist/core/release/release-pack-content-scanner.js +7 -6
- package/dist/core/release/release-pack-receipt.js +33 -12
- package/dist/core/release/release-real-contract.js +41 -2
- package/dist/core/retention.js +95 -16
- package/dist/core/routes/constants.js +1 -1
- package/dist/core/routes/dollar-manifest-lite.js +1 -1
- package/dist/core/routes.js +18 -20
- package/dist/core/safety/command-contract/contracts.js +33 -0
- package/dist/core/safety/command-contract/types.js +1 -1
- package/dist/core/safety/ssot-guard.js +1 -54
- package/dist/core/stop-gate/stop-gate-check.js +0 -14
- package/dist/core/stop-gate/stop-gate-writer.js +0 -4
- package/dist/core/strategy/adhd-orchestrating-gate.js +2 -2
- package/dist/core/subagents/agent-catalog.js +28 -5
- package/dist/core/subagents/model-policy.js +52 -11
- package/dist/core/subagents/naruto-help-contract.js +2 -1
- package/dist/core/subagents/naruto-proof-projection.js +449 -0
- package/dist/core/subagents/official-subagent-preparation.js +641 -51
- package/dist/core/subagents/official-subagent-prompt.js +16 -6
- package/dist/core/subagents/official-subagent-runner.js +132 -12
- package/dist/core/subagents/subagent-evidence.js +44 -8
- package/dist/core/subagents/wave-lifecycle.js +238 -0
- package/dist/core/update-check.js +13 -4
- package/dist/core/verification/machine-feedback.js +39 -19
- package/dist/core/version.js +1 -1
- package/dist/core/zellij/zellij-lane-renderer.js +19 -19
- package/dist/core/zellij/zellij-official-subagent-activity.js +2 -0
- package/dist/core/zellij/zellij-right-column-manager.js +6 -55
- package/dist/core/zellij/zellij-slot-column-anchor.js +4 -5
- package/dist/core/zellij/zellij-slot-pane-renderer.js +1 -1
- package/dist/core/zellij/zellij-ui-mode.js +0 -7
- package/dist/core/zellij/zellij-worker-pane-manager.js +3 -11
- package/dist/native/sks-menubar/Sources/AppDelegate.swift +0 -1
- package/dist/native/sks-menubar/Sources/NotificationCoordinator.swift +1 -3
- package/dist/native/sks-menubar/Sources/OverviewViewController.swift +194 -24
- package/dist/native/sks-menubar/Sources/ProcessClient.swift +49 -4
- package/dist/native/sks-menubar/Sources/ProvidersViewController.swift +38 -10
- package/dist/native/sks-menubar/Sources/StatusItemController.swift +73 -11
- package/dist/native/sks-menubar/Sources/UpdatesViewController.swift +27 -2
- package/dist/scripts/architecture-guard-check.js +1 -9
- package/dist/scripts/canonical-test-runner.js +51 -8
- package/dist/scripts/check-architecture.js +11 -1
- package/dist/scripts/cli-output-consistency-check.js +0 -2
- package/dist/scripts/codex-0144-app-server-v2-check.js +4 -4
- package/dist/scripts/codex-0144-binary-identity-check.js +10 -4
- package/dist/scripts/codex-0144-capability-check.js +5 -5
- package/dist/scripts/codex-0144-policy-check.js +4 -0
- package/dist/scripts/codex-control-all-pipelines-check.js +2 -1
- package/dist/scripts/codex-lb-gpt56-fast-profile-check.js +3 -3
- package/dist/scripts/codex-sdk-all-pipelines-check.js +2 -1
- package/dist/scripts/codex-sdk-real-smoke-check.js +20 -2
- package/dist/scripts/current-command-surface-check.js +5 -3
- package/dist/scripts/current-surface-update-e2e-check.js +2 -2
- package/dist/scripts/docs-truthfulness-check.js +8 -6
- package/dist/scripts/doctor-fixes-codex-app-fast-ui-check.js +3 -2
- package/dist/scripts/gate-policy-audit-check.js +7 -1
- package/dist/scripts/harness-benchmark-check.js +4 -4
- package/dist/scripts/hook-latency-quantum-check.js +2 -2
- package/dist/scripts/legacy-gate-purge-check.js +4 -2
- package/dist/scripts/loop-directive-check-lib.js +14 -13
- package/dist/scripts/naruto-codex-e2e-check.js +2 -2
- package/dist/scripts/naruto-ssot-gate-aliases-check.js +9 -0
- package/dist/scripts/naruto-ssot-pipeline-default-check.js +10 -0
- package/dist/scripts/naruto-ssot-route-normalization-check.js +8 -0
- package/dist/scripts/naruto-ssot-routing-check.js +12 -0
- package/dist/scripts/product-design-plugin-routing-check.js +4 -9
- package/dist/scripts/release-affected-selector-check.js +7 -1
- package/dist/scripts/release-check-stamp.js +151 -18
- package/dist/scripts/release-dynamic-presets-check.js +5 -2
- package/dist/scripts/release-metadata-1-19-check.js +4 -0
- package/dist/scripts/release-real-check.js +21 -3
- package/dist/scripts/sks-menubar-install-check.js +5 -5
- package/dist/scripts/upgrade-migration-matrix-check.js +278 -5
- package/dist/scripts/zellij-developer-controls-check.js +3 -5
- package/dist/scripts/zellij-initial-main-only-blackbox.js +3 -8
- package/dist/scripts/zellij-pane-lock-open-worker-integration-blackbox.js +1 -2
- package/dist/scripts/zellij-right-column-headless-overflow-check.js +1 -1
- package/dist/scripts/zellij-right-column-manager-check.js +3 -4
- package/dist/scripts/zellij-slot-only-ui-check.js +2 -2
- package/dist/scripts/zellij-stacked-fallback-integration-blackbox.js +1 -2
- package/docs/demo.tape +1 -1
- package/infra-harness-gates.json +0 -27
- package/package.json +11 -6
- package/release-gates.v2.json +150 -22
- package/schemas/codex/agent-result.schema.json +4 -0
- package/schemas/codex/app-server-0.144/codex_app_server_protocol.v2.schemas.json +1 -18812
- package/schemas/codex/codex-0139-real-probe-result.schema.json +2 -2
- package/schemas/zellij/zellij-right-column-state.schema.json +0 -1
- package/dist/core/commands/ui-command.js +0 -198
- package/dist/core/loops/goal-to-loop-compat.js +0 -22
- package/dist/core/naruto/naruto-allocation-policy.js +0 -98
- package/dist/core/naruto/naruto-finalizer.js +0 -22
- package/dist/core/naruto/naruto-gpt-final-pack.js +0 -50
- package/dist/core/naruto/naruto-real-worker-child.js +0 -209
- package/dist/core/naruto/naruto-real-worker-runtime.js +0 -178
- package/dist/core/naruto/naruto-rebalance-policy.js +0 -47
- package/dist/core/naruto/naruto-verification-pool.js +0 -17
- package/dist/core/ui/dashboard-html.js +0 -110
- package/dist/core/zellij/zellij-dashboard-pane.js +0 -70
- package/dist/core/zellij/zellij-dashboard-renderer.js +0 -59
- package/dist/core/zellij/zellij-naruto-dashboard.js +0 -44
- package/dist/scripts/zellij-dashboard-pane-check.js +0 -69
- package/dist/scripts/zellij-dashboard-watch.js +0 -40
package/README.md
CHANGED
|
@@ -1,39 +1,43 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
<!-- BEGIN SKS SEARCH VISIBILITY MARKETING -->
|
|
5
|
-
## Search Visibility Positioning
|
|
6
|
-
|
|
7
|
-
sneakoscope is a proof-first Codex trust layer for bounded agent workflows, search visibility, and evidence-backed release gates.
|
|
8
|
-
|
|
9
|
-
- Source-ledger claims are kept in SKS marketing research and strategy artifacts.
|
|
10
|
-
- SEO/GEO mutation plans update only package metadata and this managed README block in this release.
|
|
11
|
-
- External visibility outcomes require separate measured evidence.
|
|
12
|
-
<!-- END SKS SEARCH VISIBILITY MARKETING -->
|
|
13
|
-
|
|
14
3
|
# Sneakoscope Codex
|
|
15
4
|
|
|
16
|
-
**
|
|
5
|
+
**Stop trusting “done.” Make Codex prove it.**
|
|
6
|
+
|
|
7
|
+
Proof-first orchestration for Codex CLI, ChatGPT Desktop, AI coding agents, multi-agent workflows, release verification, and the macOS menu bar.
|
|
17
8
|
|
|
18
9
|
[](https://www.npmjs.com/package/sneakoscope)
|
|
19
10
|
[](#requirements)
|
|
20
11
|
[](#license)
|
|
21
12
|
|
|
22
|
-

|
|
23
14
|
|
|
24
15
|
</div>
|
|
25
16
|
|
|
26
|
-
|
|
17
|
+
<!-- BEGIN SKS SEARCH VISIBILITY MARKETING -->
|
|
18
|
+
Sneakoscope Codex (`sks`) is an open-source trust layer for Codex CLI and ChatGPT Desktop. It coordinates bounded AI coding agents, records machine-verifiable evidence, preserves project memory, and blocks release claims that are not supported by current tests or artifacts. Search visibility outcomes are measured separately; SKS does not promise rankings or traffic.
|
|
19
|
+
<!-- END SKS SEARCH VISIBILITY MARKETING -->
|
|
20
|
+
|
|
21
|
+
Current release: **SKS 6.7.0**, validated against the official stable **Codex CLI 0.144.5** release from July 16, 2026. It makes the Control Center Overview report build, install, cache, rebuild, and probe health from their real authorities; adds root-owned Naruto follow-up waves with recovered thread capacity; separates Terra Medium exploration, Sol High implementation, and Sol Max judgment; and replaces duplicated global guidance with one concise Core Engineering Directive. The `0.145.0-alpha` line is intentionally excluded from the stable release baseline. See [CHANGELOG.md](CHANGELOG.md).
|
|
27
22
|
|
|
28
|
-
|
|
23
|
+
## What 6.7.0 Fixes
|
|
24
|
+
|
|
25
|
+
| Problem | 6.7.0 behavior |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| Overview mixed Menu Bar, installed SKS, and cached registry versions | Each value is labeled by authority, stale or unavailable probes remain explicit, and Refresh forces a bounded update-status refresh. |
|
|
28
|
+
| Naruto stopped creating children after its first wave | The root parent records settled waves, recovers open-thread capacity, rescans the ready DAG, and can launch later direct-child waves under the same workflow run. |
|
|
29
|
+
| Most delegated work drifted to Sol Max | Read-heavy discovery uses Terra Medium, ordinary implementation uses Sol High, and Sol Max is reserved for focused high-risk or final judgment slices. |
|
|
30
|
+
| Goal creation started a second SKS-owned mission and loop | Codex native Goal is the only persisted owner; create/edit objectives are detailed and bounded, while SKS writes no Goal state or fallback loop. |
|
|
31
|
+
| Global instructions accumulated duplicated route rules and forced synthetic tests | One Core Engineering Directive anchors all work, route-specific details stay with their route, and verification targets normal behavior, meaningful boundaries, and plausible failures. |
|
|
32
|
+
| GUI-launched status commands could hang or contaminate real update state during tests | Menu Bar commands use a safe HOME cwd, closed stdin, and timeouts; update fixtures use isolated HOME and cache paths. |
|
|
29
33
|
|
|
30
|
-
## Install
|
|
34
|
+
## Install In One Command
|
|
31
35
|
|
|
32
36
|
```sh
|
|
33
37
|
npx sneakoscope install --yes
|
|
34
38
|
```
|
|
35
39
|
|
|
36
|
-
That
|
|
40
|
+
That installs or repairs SKS, runs `sks doctor --fix`, and prepares the Codex App integration. The plugin marketplace path is also prepared through `plugins/sks/.codex-plugin/plugin.json`.
|
|
37
41
|
|
|
38
42
|
For package-managed installs:
|
|
39
43
|
|
|
@@ -42,7 +46,7 @@ npm i -g sneakoscope
|
|
|
42
46
|
sks doctor --fix
|
|
43
47
|
```
|
|
44
48
|
|
|
45
|
-
The SKS menu bar shows the installed Codex CLI version and latest known version. An `⬆` marker appears when an update is available; **Update Codex CLI Now** uses native `codex update` when the selected CLI advertises it, otherwise it verifies the installation provenance and invokes the matching official standalone-installer, npm-global, or Homebrew-cask update method. If the method cannot be verified, it fails closed instead of guessing. This is an explicit global tool mutation. **Run sks doctor --fix** performs the global-only menu repair flow without treating the user's home directory as a project.
|
|
49
|
+
The SKS menu bar shows the installed Codex CLI version and latest known version. An `⬆` marker appears when an update is available; **Update Codex CLI Now** uses native `codex update` when the selected CLI advertises it, otherwise it verifies the installation provenance and invokes the matching official standalone-installer, npm-global, or Homebrew-cask update method. If the method cannot be verified, it fails closed instead of guessing. Control Center updates keep the active UI alive until the operation receipt is durable, then relaunch the companion out of process. This is an explicit global tool mutation. **Run sks doctor --fix** performs the global-only menu repair flow without treating the user's home directory as a project.
|
|
46
50
|
|
|
47
51
|
**Manage MCP Servers…** opens a native macOS manager for the global `~/.codex/config.toml`. It can add remote URL or local stdio servers, enable/disable existing entries, remove entries after confirmation, and refresh the current state. Mutations are lock-protected, backed up, TOML-validated, and written with mode `0600`; configured environment values and command arguments are never rendered in the list. Changes apply to new Codex sessions. The same plumbing is available through the canonical `sks mcp config list|get|add|edit|duplicate|enable|disable|remove|test|login|logout|backups|restore` surface for diagnostics and automation.
|
|
48
52
|
|
|
@@ -55,7 +59,6 @@ The SKS menu bar shows the installed Codex CLI version and latest known version.
|
|
|
55
59
|
| `$sks-naruto "task"` | Runs the Codex official subagent workflow with parent-owned integration and evidence. |
|
|
56
60
|
| `$sks-mad-sks` / `sks mad-sks` | Single high-risk MAD route for scoped permission widening plus SQL-plane execution, including read-back proof and profile closure. |
|
|
57
61
|
| `$sks-review` / `sks review --staged` | Reviews diffs with `evidence: machine` findings sorted above `evidence: llm`. |
|
|
58
|
-
| `sks ui` | Opens the local live dashboard at `http://127.0.0.1:4477`. |
|
|
59
62
|
|
|
60
63
|
`sks --mad` now prioritizes the interactive ready path: independent macOS config probes run concurrently, failed read-only preflight does not repeat mutation-capable repair inspection, verified Zellij/codex-lb evidence is reused, and the remote Zellij update lookup runs after the UI is ready. Existing unreadable or malformed config still blocks safely; pass an explicit repair flag such as `--repair-config` when repair is intended.
|
|
61
64
|
|
|
@@ -69,7 +72,7 @@ Gates are task-profile aware: greetings and answer-only turns create no mission
|
|
|
69
72
|
|
|
70
73
|
Every installed Codex hook runs one common Naruto decision gate. The gate records `none`, `generic_naruto`, or `route_owned`: Answer, DFix, Wiki, Computer Use, Goal, and simple Git/control turns stay lightweight; ordinary non-trivial work defaults to two independent official subagents; critical work spanning at least three risk domains may use three. Research, AutoResearch, and QA-Loop retain their own exact orchestration contracts instead of receiving a second generic fan-out. Explicit `--agents N` remains authoritative.
|
|
71
74
|
|
|
72
|
-
SKS installs twenty-five narrow project custom agents, including native AppKit, toolchain, protocol, runtime-reliability, TriWiki-evidence, long-context, Computer Use, Browser/Chrome, and image-generation specialists. Delegation prompts inject at most the three roles recommended for the current goal rather than serializing the full catalog, so expanding role coverage does not serialize the full inventory into every prompt. TriWiki context is also bounded and query-aware: ordinary work receives up to four trust/hydration anchors and complex, parallel, or high-risk work receives up to six, with source hydration required before relying on lower-trust hints. In CLI Zellij mode, the right side is a live observability surface rather than a static lane reservation: one monitor plus one viewport by default (maximum three) shows official thread role/model, redacted live phase/task/file updates from
|
|
75
|
+
SKS installs twenty-five narrow project custom agents, including native AppKit, toolchain, protocol, runtime-reliability, TriWiki-evidence, long-context, Computer Use, Browser/Chrome, and image-generation specialists. Delegation prompts inject at most the three roles recommended for the current goal rather than serializing the full catalog, so expanding role coverage does not serialize the full inventory into every prompt. TriWiki context is also bounded and query-aware: ordinary work receives up to four trust/hydration anchors and complex, parallel, or high-risk work receives up to six, with source hydration required before relying on lower-trust hints. In CLI Zellij mode, the right side is a live observability surface rather than a static lane reservation: one monitor plus one viewport by default (maximum three) shows official thread role/model, redacted live phase/task/file updates from rollout-compatible Codex 0.144.1+ sessions while the current release baseline remains 0.144.5, plus `running`, `verifying`, and trustworthy parent-verdict completion/failure states. Rollout activity is display-only and never completion proof.
|
|
73
76
|
|
|
74
77
|
Official subagent requests use `--agents`; removed scheduler, pool, backend, and model flags fail closed.
|
|
75
78
|
|
|
@@ -80,19 +83,7 @@ Official subagent requests use `--agents`; removed scheduler, pool, backend, and
|
|
|
80
83
|
| Did tests/typecheck fail? | Another model may say so. | Machine check output is tagged `evidence: machine`. |
|
|
81
84
|
| Are findings ranked? | Usually one blended opinion. | Machine evidence sorts before LLM findings. |
|
|
82
85
|
| Can work stop? | The model decides. | Stop gates, Completion Proof, and Honest Mode decide. |
|
|
83
|
-
| Can I inspect agent-thread progress? | Usually no runtime UI. |
|
|
84
|
-
|
|
85
|
-
## Dashboard
|
|
86
|
-
|
|
87
|
-
`sks ui` serves a dependency-free localhost dashboard with:
|
|
88
|
-
|
|
89
|
-
- mission, route, elapsed time, and gate badge
|
|
90
|
-
- live official subagent thread grid with role/model badge, progress, and current task
|
|
91
|
-
- run/verify/queue/done/fail counters
|
|
92
|
-
- recent mission events
|
|
93
|
-
- current gate checklist
|
|
94
|
-
|
|
95
|
-
The dashboard binds to `127.0.0.1` only and exposes telemetry/gates/events, not config secrets.
|
|
86
|
+
| Can I inspect agent-thread progress? | Usually no runtime UI. | Use the official Codex subagent/thread surfaces and SKS Zellij monitor/viewport panes. |
|
|
96
87
|
|
|
97
88
|
## Demo
|
|
98
89
|
|
|
@@ -102,7 +93,7 @@ The reproducible VHS script lives at [docs/demo.tape](docs/demo.tape).
|
|
|
102
93
|
vhs docs/demo.tape
|
|
103
94
|
```
|
|
104
95
|
|
|
105
|
-
It shows the current quickstart flow: one-line install, `$sks-plan`, `sks review`, `sks
|
|
96
|
+
It shows the current quickstart flow: one-line install, `$sks-plan`, `sks review`, `sks status --json`, and an official `$sks-naruto` subagent run.
|
|
106
97
|
|
|
107
98
|
## Proof Surfaces
|
|
108
99
|
|
|
@@ -132,6 +123,7 @@ It shows the current quickstart flow: one-line install, `$sks-plan`, `sks review
|
|
|
132
123
|
- `Manage MCP Servers…` provides a resizable native table and add/remove/enable/disable controls for global Codex MCP configuration. Secret environment values and command arguments are accepted through native dialogs/stdin but omitted from list output and logs.
|
|
133
124
|
- `sks menubar status --json` reports a `codex_sync` object with `bundle_id`, `codex_running`, and `icon_visible_expected` to show Codex-lifecycle detection state.
|
|
134
125
|
- The menu displays the installed Codex CLI version, adds an `⬆` status icon when `sks codex update-status` sees a newer release, runs the official self-updater through `Update Codex CLI Now`, and exposes `Run sks doctor --fix` as a background repair action.
|
|
126
|
+
- Fast mode has a verified status row and direct On/Off actions. Status failures render as unavailable with neither choice falsely selected.
|
|
135
127
|
- If Codex shows `[No tool output found for custom tool call ...]`, SKS blocks reuse of that structurally ambiguous thread. Upgrade codex-lb (or explicitly run `sks codex-lb use-oauth`), inspect possible side effects, then continue the persisted mission in a fresh Codex task. SKS never rewrites session JSONL or fabricates a successful tool output.
|
|
136
128
|
- Zellij optional but recommended for terminal worker panes
|
|
137
129
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "sks.codex-release-manifest.v1",
|
|
3
|
-
"targetTag": "rust-v0.144.
|
|
4
|
-
"requiredCliVersion": "0.144.
|
|
5
|
-
"sdkVersion": "0.144.
|
|
6
|
-
"minimumSupportedVersion": "0.144.
|
|
3
|
+
"targetTag": "rust-v0.144.5",
|
|
4
|
+
"requiredCliVersion": "0.144.5",
|
|
5
|
+
"sdkVersion": "0.144.5",
|
|
6
|
+
"minimumSupportedVersion": "0.144.5",
|
|
7
7
|
"protocolMode": "app-server-v2",
|
|
8
8
|
"generatedSchemaSha256": "2b3f14fa2e728f77a16385ff39f3a1d85ab255c1020498a85c1c0fb24f3d2f3c",
|
|
9
|
-
"upstreamCommit": "rust-v0.144.
|
|
9
|
+
"upstreamCommit": "rust-v0.144.5",
|
|
10
10
|
"featurePolicies": {
|
|
11
11
|
"multiAgentMode": "probe",
|
|
12
12
|
"indexedWebSearch": "probe",
|
package/dist/bin/install.js
CHANGED
|
@@ -12,7 +12,6 @@ export const COMMAND_MANIFEST_LITE = [
|
|
|
12
12
|
{ name: 'plan', summary: 'Write a planning-only SKS plan artifact without code edits', maturity: 'stable' },
|
|
13
13
|
{ name: 'status', summary: 'Show concise active mission and trust status', maturity: 'stable', readonly: true, skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
|
|
14
14
|
{ name: 'review', summary: 'Review a git diff with machine evidence first', maturity: 'stable', allowedDuringActiveRoute: true },
|
|
15
|
-
{ name: 'ui', summary: 'Open the localhost SKS agent dashboard', maturity: 'stable', readonly: true, skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
|
|
16
15
|
{ name: 'root', summary: 'Show active SKS root', maturity: 'stable', readonly: true, skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
|
|
17
16
|
{ name: 'update', summary: 'Inspect, review, apply, or roll back the global SKS update', maturity: 'stable' },
|
|
18
17
|
{ name: 'uninstall', summary: 'Uninstall SKS global skills, hooks, config, menu bar, and optional project residue', maturity: 'stable', allowedDuringActiveRoute: true },
|
|
@@ -38,7 +37,7 @@ export const COMMAND_MANIFEST_LITE = [
|
|
|
38
37
|
{ name: 'menubar', summary: 'Inspect/install/restart/uninstall SKS menu bar', maturity: 'beta', allowedDuringActiveRoute: true, diagnostic: true },
|
|
39
38
|
{ name: 'remote', summary: 'Inspect official Remote readiness and run the proof-aware SSH stdio worker', maturity: 'beta' },
|
|
40
39
|
{ name: 'telegram', summary: 'Inspect and run the private proof-aware Telegram Hub', maturity: 'beta' },
|
|
41
|
-
{ name: 'hooks', summary: 'Explain and inspect Codex hooks', maturity: 'beta' },
|
|
40
|
+
{ name: 'hooks', summary: 'Explain and inspect Codex hooks', maturity: 'beta', skipMigrationGate: true },
|
|
42
41
|
{ name: 'zellij-lane', summary: 'Render a Zellij lane frame for SKS sessions', maturity: 'beta' },
|
|
43
42
|
{ name: 'zellij-slot-pane', summary: 'Render a compact Zellij worker slot pane', maturity: 'beta' },
|
|
44
43
|
{ name: 'zellij-monitor-pane', summary: 'Render the live Zellij MAD/Naruto monitor pane', maturity: 'beta', readonly: true, skipMigrationGate: true, allowedDuringActiveRoute: true, diagnostic: true },
|
|
@@ -74,7 +73,7 @@ export const COMMAND_MANIFEST_LITE = [
|
|
|
74
73
|
{ name: 'reasoning', summary: 'Show reasoning route', maturity: 'labs' },
|
|
75
74
|
{ name: 'aliases', summary: 'Show command aliases', maturity: 'stable' },
|
|
76
75
|
{ name: 'selftest', summary: 'Run local mock selftest', maturity: 'stable' },
|
|
77
|
-
{ name: 'goal', summary: '
|
|
76
|
+
{ name: 'goal', summary: 'Print stateless Codex native Goal controls', maturity: 'beta' },
|
|
78
77
|
{ name: 'seo-geo-optimizer', summary: 'Run unified SEO/GEO optimizer audit/research/strategy/plan/apply/verify with optional --include-marketing on the search-visibility kernel', maturity: 'beta' },
|
|
79
78
|
{ name: 'hook', summary: 'Codex hook entrypoint', maturity: 'beta', skipMigrationGate: true },
|
|
80
79
|
{ name: 'profile', summary: 'Inspect/set profile', maturity: 'labs' },
|
|
@@ -128,7 +128,6 @@ const COMMAND_DEFINITIONS = {
|
|
|
128
128
|
allowedDuringActiveRoute: true,
|
|
129
129
|
activeRoutePolicy: 'always'
|
|
130
130
|
}),
|
|
131
|
-
ui: readOnly(entry('stable', 'Open the localhost SKS agent dashboard', 'dist/core/commands/ui-command.js', argsCommand(() => import('../core/commands/ui-command.js'), 'uiCommand', 'dist/core/commands/ui-command.js'))),
|
|
132
131
|
root: readOnly(entry('stable', 'Show active SKS root', 'dist/commands/root.js', directCommand(() => import('../commands/root.js'), 'dist/commands/root.js'))),
|
|
133
132
|
update: skipMigrationGate(entry('stable', 'Inspect, review, apply, or roll back the global SKS update', 'dist/core/commands/basic-cli.js', subcommand(() => import(basicModule), 'updateCommand', 'dist/core/commands/basic-cli.js', 'now'))),
|
|
134
133
|
uninstall: entry('stable', 'Uninstall SKS global skills, hooks, config, menu bar, and optional project residue', 'dist/core/commands/uninstall-command.js', argsCommand(() => import('../core/commands/uninstall-command.js'), 'uninstallCommand', 'dist/core/commands/uninstall-command.js'), {
|
|
@@ -159,7 +158,7 @@ const COMMAND_DEFINITIONS = {
|
|
|
159
158
|
menubar: activeRouteDiagnostic(entry('beta', 'Inspect/install/restart/uninstall SKS menu bar', 'dist/core/commands/menubar-command.js', subcommand(() => import('../core/commands/menubar-command.js'), 'menubarCommand', 'dist/core/commands/menubar-command.js', 'status'))),
|
|
160
159
|
remote: entry('beta', 'Inspect official Remote readiness and run the proof-aware SSH stdio worker', 'dist/core/commands/remote-command.js', argsCommand(() => import('../core/commands/remote-command.js'), 'remoteCommand', 'dist/core/commands/remote-command.js')),
|
|
161
160
|
telegram: entry('beta', 'Inspect and run the private proof-aware Telegram Hub', 'dist/core/commands/telegram-command.js', argsCommand(() => import('../core/commands/telegram-command.js'), 'telegramCommand', 'dist/core/commands/telegram-command.js')),
|
|
162
|
-
hooks: entry('beta', 'Explain and inspect Codex hooks', 'dist/commands/hooks.js', directCommand(() => import('../commands/hooks.js'), 'dist/commands/hooks.js')),
|
|
161
|
+
hooks: skipMigrationGate(entry('beta', 'Explain and inspect Codex hooks', 'dist/commands/hooks.js', directCommand(() => import('../commands/hooks.js'), 'dist/commands/hooks.js'))),
|
|
163
162
|
'zellij-lane': entry('beta', 'Render a Zellij lane frame for SKS sessions', 'dist/commands/zellij-lane.js', directCommand(() => import('../commands/zellij-lane.js'), 'dist/commands/zellij-lane.js')),
|
|
164
163
|
'zellij-slot-pane': entry('beta', 'Render a compact Zellij worker slot pane', 'dist/commands/zellij-slot-pane.js', directCommand(() => import('../commands/zellij-slot-pane.js'), 'dist/commands/zellij-slot-pane.js')),
|
|
165
164
|
'zellij-monitor-pane': skipMigrationGate(readOnly(entry('beta', 'Render the live Zellij MAD/Naruto monitor pane', 'dist/commands/zellij-monitor-pane.js', directCommand(() => import('../commands/zellij-monitor-pane.js'), 'dist/commands/zellij-monitor-pane.js')))),
|
|
@@ -195,7 +194,7 @@ const COMMAND_DEFINITIONS = {
|
|
|
195
194
|
reasoning: entry('labs', 'Show reasoning route', 'dist/core/commands/basic-cli.js', basicArgs('reasoningCommand')),
|
|
196
195
|
aliases: entry('stable', 'Show command aliases', 'dist/core/commands/basic-cli.js', basicNoArgs('aliasesCommand')),
|
|
197
196
|
selftest: entry('stable', 'Run local mock selftest', 'dist/core/commands/basic-cli.js', basicArgs('selftestCommand')),
|
|
198
|
-
goal:
|
|
197
|
+
goal: entry('beta', 'Print stateless Codex native Goal controls', 'dist/core/commands/goal-command.js', subcommand(() => import('../core/commands/goal-command.js'), 'goalCommand', 'dist/core/commands/goal-command.js')),
|
|
199
198
|
'seo-geo-optimizer': entry('beta', 'Run unified SEO/GEO optimizer audit/plan/apply/verify on the search-visibility kernel', 'dist/core/commands/seo-command.js', argsCommand(() => import('../core/commands/seo-command.js'), 'seoGeoOptimizerCommand', 'dist/core/commands/seo-command.js')),
|
|
200
199
|
hook: skipMigrationGate(entry('beta', 'Codex hook entrypoint', 'dist/commands/hook.js', directCommand(() => import('../commands/hook.js'), 'dist/commands/hook.js'))),
|
|
201
200
|
profile: entry('labs', 'Inspect/set profile', 'dist/commands/profile.js', directCommand(() => import('../commands/profile.js'), 'dist/commands/profile.js')),
|
|
@@ -244,7 +243,10 @@ export const COMMANDS = applyCommandContractOverrides(COMMAND_DEFINITIONS, {
|
|
|
244
243
|
loop: { latency: 'long' },
|
|
245
244
|
'mad-sks': { risk: 'R3', latency: 'long' },
|
|
246
245
|
mcp: { risk: 'R2', latency: 'long', supportsJson: true, inputProfile: 'json-only' },
|
|
247
|
-
naruto: {
|
|
246
|
+
naruto: {
|
|
247
|
+
risk: 'R2', latency: 'long', supportsJson: true, remoteAllowed: false, telegramAllowed: false,
|
|
248
|
+
inputProfile: 'naruto'
|
|
249
|
+
},
|
|
248
250
|
paths: {
|
|
249
251
|
supportsJson: true, remoteAllowed: true, inputProfile: 'paths',
|
|
250
252
|
requiredCapabilities: ['project.fs.read']
|
package/dist/cli/help-fast.js
CHANGED
package/dist/cli/router.js
CHANGED
|
@@ -215,7 +215,16 @@ export function safeReadOnlySubcommand(command, args) {
|
|
|
215
215
|
return false;
|
|
216
216
|
return !args.some((arg) => ['--fix', '--yes', '-y', '--write', '--apply', '--execute', '--force', '--real'].includes(String(arg)));
|
|
217
217
|
}
|
|
218
|
-
function safeActiveRouteContinuation(command, args, state = {}) {
|
|
218
|
+
export function safeActiveRouteContinuation(command, args, state = {}) {
|
|
219
|
+
const subcommand = String(args[0] || '').toLowerCase();
|
|
220
|
+
const activeRoute = String(state.route || state.route_command || state.mode || '').replace(/^\$/, '').replace(/[-_]/g, '').toUpperCase();
|
|
221
|
+
if (command === 'naruto') {
|
|
222
|
+
if (activeRoute !== 'NARUTO' || subcommand !== 'run')
|
|
223
|
+
return false;
|
|
224
|
+
const requestedMission = optionValue(args, ['--mission', '--mission-id']);
|
|
225
|
+
return Boolean(state.mission_id)
|
|
226
|
+
&& (requestedMission === String(state.mission_id) || requestedMission === 'latest');
|
|
227
|
+
}
|
|
219
228
|
const expectedRoutes = new Map([
|
|
220
229
|
['research', ['RESEARCH']],
|
|
221
230
|
['autoresearch', ['AUTORESEARCH', 'RESEARCH']],
|
|
@@ -223,8 +232,6 @@ function safeActiveRouteContinuation(command, args, state = {}) {
|
|
|
223
232
|
]).get(command);
|
|
224
233
|
if (!expectedRoutes)
|
|
225
234
|
return false;
|
|
226
|
-
const subcommand = String(args[0] || '').toLowerCase();
|
|
227
|
-
const activeRoute = String(state.route || state.route_command || state.mode || '').replace(/^\$/, '').replace(/[-_]/g, '').toUpperCase();
|
|
228
235
|
if (!expectedRoutes.includes(activeRoute))
|
|
229
236
|
return false;
|
|
230
237
|
if (subcommand === 'prepare') {
|
|
@@ -240,6 +247,20 @@ function safeActiveRouteContinuation(command, args, state = {}) {
|
|
|
240
247
|
const requestedMission = String(args[1] || '').trim();
|
|
241
248
|
return Boolean(state.mission_id) && (requestedMission === String(state.mission_id) || requestedMission === 'latest');
|
|
242
249
|
}
|
|
250
|
+
function optionValue(args, names) {
|
|
251
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
252
|
+
const arg = String(args[index] || '');
|
|
253
|
+
for (const name of names) {
|
|
254
|
+
if (arg === name) {
|
|
255
|
+
const next = String(args[index + 1] || '').trim();
|
|
256
|
+
return next && !next.startsWith('-') ? next : '';
|
|
257
|
+
}
|
|
258
|
+
if (arg.startsWith(name + '='))
|
|
259
|
+
return arg.slice(name.length + 1).trim();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return '';
|
|
263
|
+
}
|
|
243
264
|
function activeRouteStateBlocksCommand(state = {}) {
|
|
244
265
|
if (!state?.mission_id || state.route_closed === true)
|
|
245
266
|
return false;
|
package/dist/commands/zellij.js
CHANGED
|
@@ -7,7 +7,6 @@ import { checkZellijCapability } from '../core/zellij/zellij-capability.js';
|
|
|
7
7
|
import { checkZellijUpdateNotice, upgradeZellijToLatest } from '../core/zellij/zellij-update.js';
|
|
8
8
|
import { runZellij } from '../core/zellij/zellij-command.js';
|
|
9
9
|
import { appendZellijLaneCommand, normalizeZellijSlot } from '../core/zellij/zellij-lane-runtime.js';
|
|
10
|
-
import { buildZellijDashboardSnapshot, renderZellijDashboardText } from '../core/zellij/zellij-dashboard-renderer.js';
|
|
11
10
|
import { readZellijSlotTelemetrySnapshot } from '../core/zellij/zellij-slot-telemetry.js';
|
|
12
11
|
export const ZELLIJ_COMMAND_SCHEMA = 'sks.zellij-command.v1';
|
|
13
12
|
export const ZELLIJ_REPAIR_SCHEMA = 'sks.zellij-repair.v1';
|
|
@@ -34,14 +33,29 @@ export async function run(_command = 'zellij', args = []) {
|
|
|
34
33
|
return zellijFocusWorker(root, args, json);
|
|
35
34
|
if (sub === 'worker-logs')
|
|
36
35
|
return zellijWorkerLogs(root, args, json);
|
|
37
|
-
if (sub === 'dashboard')
|
|
38
|
-
return zellijDashboard(root, args, json);
|
|
39
36
|
if (sub === 'close-drained')
|
|
40
37
|
return zellijCloseDrained(root, args, json);
|
|
41
38
|
if (sub === 'pin' || sub === 'unpin')
|
|
42
39
|
return zellijViewportPin(root, sub, args, json);
|
|
40
|
+
if (sub !== 'status' && sub !== 'capability')
|
|
41
|
+
return zellijUnknownSubcommand(sub, json);
|
|
43
42
|
return zellijStatus(root, args, json);
|
|
44
43
|
}
|
|
44
|
+
function zellijUnknownSubcommand(subcommand, json) {
|
|
45
|
+
const result = {
|
|
46
|
+
schema: ZELLIJ_COMMAND_SCHEMA,
|
|
47
|
+
subcommand,
|
|
48
|
+
ok: false,
|
|
49
|
+
status: 'unsupported_subcommand',
|
|
50
|
+
blockers: [`unsupported_zellij_subcommand:${subcommand}`]
|
|
51
|
+
};
|
|
52
|
+
if (json)
|
|
53
|
+
printJson(result);
|
|
54
|
+
else
|
|
55
|
+
console.error(`Unsupported Zellij subcommand: ${subcommand}. Run \`sks zellij help\` for the current surface.`);
|
|
56
|
+
process.exitCode = 1;
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
45
59
|
async function zellijStatus(root, args, json) {
|
|
46
60
|
const requireReal = flag(args, '--require-real') || process.env.SKS_REQUIRE_ZELLIJ === '1';
|
|
47
61
|
const capability = await checkZellijCapability({ root, require: requireReal });
|
|
@@ -186,29 +200,6 @@ async function zellijWorkerLogs(root, args, json) {
|
|
|
186
200
|
if (!out.ok)
|
|
187
201
|
process.exitCode = 1;
|
|
188
202
|
}
|
|
189
|
-
async function zellijDashboard(root, args, json) {
|
|
190
|
-
const missionId = resolveMissionId(root, readOption(args, '--mission', readOption(args, '--mission-id', 'latest') || 'latest') || 'latest');
|
|
191
|
-
const snapshot = await readJson(path.join(root, '.sneakoscope', 'missions', missionId, 'zellij-dashboard-snapshot.json'), null);
|
|
192
|
-
const state = await readJson(path.join(root, '.sneakoscope', 'missions', missionId, 'zellij-right-column-state.json'), null);
|
|
193
|
-
const watch = flag(args, '--watch');
|
|
194
|
-
const out = {
|
|
195
|
-
schema: 'sks.zellij-dashboard-command.v1',
|
|
196
|
-
ok: Boolean(snapshot || state),
|
|
197
|
-
mission_id: missionId,
|
|
198
|
-
snapshot,
|
|
199
|
-
right_column_state: state,
|
|
200
|
-
watch,
|
|
201
|
-
watch_command: `sks zellij dashboard --mission ${missionId} --watch`
|
|
202
|
-
};
|
|
203
|
-
if (json)
|
|
204
|
-
printJson(out);
|
|
205
|
-
else if (snapshot)
|
|
206
|
-
console.log(renderZellijDashboardText(buildZellijDashboardSnapshot({ ...snapshot, mission_id: snapshot.mission_id || missionId })));
|
|
207
|
-
else
|
|
208
|
-
console.log(JSON.stringify(state || out, null, 2));
|
|
209
|
-
if (!out.ok)
|
|
210
|
-
process.exitCode = 1;
|
|
211
|
-
}
|
|
212
203
|
async function zellijCloseDrained(root, args, json) {
|
|
213
204
|
const missionId = resolveMissionId(root, readOption(args, '--mission', readOption(args, '--mission-id', 'latest') || 'latest') || 'latest');
|
|
214
205
|
const state = await readJson(path.join(root, '.sneakoscope', 'missions', missionId, 'zellij-right-column-state.json'), null);
|
|
@@ -358,7 +349,7 @@ function printHelp(json) {
|
|
|
358
349
|
schema: ZELLIJ_COMMAND_SCHEMA,
|
|
359
350
|
subcommand: 'help',
|
|
360
351
|
ok: true,
|
|
361
|
-
usage: 'sks zellij status|update|repair|dispatch|send|focus-worker|worker-logs|
|
|
352
|
+
usage: 'sks zellij status|update|repair|dispatch|send|focus-worker|worker-logs|pin|unpin|close-drained [--json]',
|
|
362
353
|
subcommands: {
|
|
363
354
|
status: 'Report Zellij runtime capability and interactive-route readiness.',
|
|
364
355
|
update: 'Check the latest stable Zellij release; apply the upgrade with --yes (Homebrew).',
|
|
@@ -367,7 +358,6 @@ function printHelp(json) {
|
|
|
367
358
|
send: 'Alias for dispatch.',
|
|
368
359
|
'focus-worker': 'Focus a visible right-column worker pane by slot.',
|
|
369
360
|
'worker-logs': 'Print stdout/stderr log paths for worker slots.',
|
|
370
|
-
dashboard: 'Render the latest dashboard snapshot; --watch prints watch metadata.',
|
|
371
361
|
pin: 'Pin a dynamic worker slot to a viewport.',
|
|
372
362
|
unpin: 'Remove a worker slot pin from a viewport.',
|
|
373
363
|
'close-drained': 'Close drained right-column panes.',
|
|
@@ -384,7 +374,6 @@ function printHelp(json) {
|
|
|
384
374
|
console.log(' sks zellij dispatch --mission M --slot slot-001 --text "..." [--write-pane] [--json]');
|
|
385
375
|
console.log(' sks zellij focus-worker slot-001 [--mission M] [--json]');
|
|
386
376
|
console.log(' sks zellij worker-logs [slot-001] [--mission M] [--json]');
|
|
387
|
-
console.log(' sks zellij dashboard [--mission M] [--watch] [--json]');
|
|
388
377
|
console.log(' sks zellij pin slot-001 [--viewport 2] [--mission M] [--json]');
|
|
389
378
|
console.log(' sks zellij unpin slot-001 [--viewport 2] [--mission M] [--json]');
|
|
390
379
|
console.log(' sks zellij close-drained [--mission M] [--json]');
|