sneakoscope 6.0.3 → 6.1.2

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 (378) hide show
  1. package/README.md +29 -12
  2. package/config/codex-releases/{rust-v0.142.0.json → rust-v0.144.1.json} +6 -6
  3. package/crates/sks-core/Cargo.lock +1 -1
  4. package/crates/sks-core/Cargo.toml +1 -1
  5. package/dist/bin/fast-inline.js +18 -14
  6. package/dist/bin/sks-dispatch.js +2 -4
  7. package/dist/cli/args.js +2 -0
  8. package/dist/cli/command-manifest-lite.js +2 -3
  9. package/dist/cli/command-registry.js +3 -4
  10. package/dist/cli/help-fast.js +1 -1
  11. package/dist/cli/install-helpers.js +348 -763
  12. package/dist/cli/install-tool-helpers.js +287 -0
  13. package/dist/cli/router.js +91 -6
  14. package/dist/commands/codex-lb.js +188 -53
  15. package/dist/commands/codex.js +44 -5
  16. package/dist/commands/doctor.js +302 -46
  17. package/dist/commands/tmux.js +5 -1
  18. package/dist/commands/versioning.js +7 -0
  19. package/dist/commands/zellij-monitor-pane.js +2 -0
  20. package/dist/commands/zellij-viewport-pane.js +3 -1
  21. package/dist/commands/zellij.js +1 -1
  22. package/dist/config/skills-manifest.json +59 -59
  23. package/dist/core/agent-bridge/agent-manifest.js +48 -0
  24. package/dist/core/agents/agent-central-ledger.js +9 -0
  25. package/dist/core/agents/agent-cleanup-executor.js +334 -41
  26. package/dist/core/agents/agent-cleanup.js +20 -1
  27. package/dist/core/agents/agent-command-surface.js +3 -1
  28. package/dist/core/agents/agent-effort-policy.js +30 -38
  29. package/dist/core/agents/agent-janitor.js +9 -10
  30. package/dist/core/agents/agent-namespace-safety.js +56 -0
  31. package/dist/core/agents/agent-orchestrator.js +25 -3
  32. package/dist/core/agents/agent-output-validator.js +1 -1
  33. package/dist/core/agents/agent-plan.js +100 -21
  34. package/dist/core/agents/agent-role-config.js +43 -49
  35. package/dist/core/agents/agent-runner-codex-exec.js +18 -3
  36. package/dist/core/agents/agent-runner-process.js +1 -0
  37. package/dist/core/agents/agent-schema.js +3 -2
  38. package/dist/core/agents/fast-mode-policy.js +3 -5
  39. package/dist/core/agents/native-cli-session-swarm.js +1 -1
  40. package/dist/core/agents/native-worker-backend-router.js +2 -1
  41. package/dist/core/agents/work-partition/repo-inventory.js +68 -7
  42. package/dist/core/agents/zellij-right-lane-cockpit.js +2 -2
  43. package/dist/core/code-structure.js +5 -4
  44. package/dist/core/codex/agent-config-file-repair.js +94 -193
  45. package/dist/core/codex/codex-cli-update.js +723 -0
  46. package/dist/core/codex/codex-config-guard.js +38 -11
  47. package/dist/core/codex/codex-project-config-policy.js +3 -6
  48. package/dist/core/codex/codex-startup-config-postcheck.js +52 -42
  49. package/dist/core/codex-adapter.js +35 -22
  50. package/dist/core/codex-app/codex-agent-role-sync.js +13 -54
  51. package/dist/core/codex-app/codex-app-fast-ui-repair.js +51 -20
  52. package/dist/core/codex-app/codex-app-launcher.js +48 -17
  53. package/dist/core/codex-app/codex-app-restart.js +23 -2
  54. package/dist/core/codex-app/codex-app-ui-state-snapshot.js +11 -3
  55. package/dist/core/codex-app/sks-menubar.js +136 -5
  56. package/dist/core/codex-app.js +35 -14
  57. package/dist/core/codex-compat/codex-hook-warning-detector.js +10 -1
  58. package/dist/core/codex-compat/codex-release-manifest.js +6 -6
  59. package/dist/core/codex-control/codex-0139-doctor-real-probe.js +7 -1
  60. package/dist/core/codex-control/codex-0139-image-path-real-probe.js +29 -12
  61. package/dist/core/codex-control/codex-0139-probe-runner.js +103 -28
  62. package/dist/core/codex-control/codex-0139-real-probe-summary.js +7 -3
  63. package/dist/core/codex-control/codex-0139-real-probes.js +21 -6
  64. package/dist/core/codex-control/codex-0139-sandbox-real-probe.js +39 -13
  65. package/dist/core/codex-control/codex-0139-web-search-probe.js +28 -14
  66. package/dist/core/codex-control/{codex-0142-capability.js → codex-0144-capability.js} +22 -22
  67. package/dist/core/codex-control/codex-0144-collab-agent-real-probe.js +63 -0
  68. package/dist/core/codex-control/codex-lb-launch-recovery.js +278 -0
  69. package/dist/core/codex-control/codex-multi-agent-event-normalizer.js +5 -1
  70. package/dist/core/codex-control/codex-reliability-shield.js +93 -30
  71. package/dist/core/codex-control/codex-sdk-adapter.js +96 -13
  72. package/dist/core/codex-control/codex-sdk-config-policy.js +2 -1
  73. package/dist/core/codex-control/codex-sdk-sandbox-policy.js +6 -3
  74. package/dist/core/codex-control/codex-task-runner.js +62 -9
  75. package/dist/core/codex-control/python-codex-sdk-adapter.js +30 -3
  76. package/dist/core/codex-exec-output-schema.js +35 -6
  77. package/dist/core/codex-lb/codex-lb-env.js +30 -1
  78. package/dist/core/codex-lb/codex-lb-tool-catalog.js +478 -0
  79. package/dist/core/codex-lb/codex-lb-tool-output-recovery.js +291 -0
  80. package/dist/core/codex-native/codex-native-feature-broker.js +31 -38
  81. package/dist/core/codex-native/codex-native-feature-matrix.js +2 -2
  82. package/dist/core/codex-native/codex-native-repair-transaction.js +1 -1
  83. package/dist/core/codex-native/core-skill-manifest.js +8 -4
  84. package/dist/core/codex-native/native-capability-postcheck.js +16 -8
  85. package/dist/core/codex-native/native-capability-repair-matrix.js +76 -27
  86. package/dist/core/codex-plugins/codex-plugin-json.js +67 -21
  87. package/dist/core/codex-plugins/codex-plugin-repair.js +118 -0
  88. package/dist/core/codex-runtime/codex-desktop-config-policy.js +305 -0
  89. package/dist/core/commands/agent-bridge-command.js +23 -2
  90. package/dist/core/commands/agent-command.js +38 -5
  91. package/dist/core/commands/basic-cli.js +77 -30
  92. package/dist/core/commands/command-utils.js +1 -1
  93. package/dist/core/commands/gc-command.js +27 -4
  94. package/dist/core/commands/image-ux-review-command.js +55 -24
  95. package/dist/core/commands/mad-sks-command.js +182 -137
  96. package/dist/core/commands/naruto-command.js +643 -1153
  97. package/dist/core/commands/pipeline-command.js +1 -0
  98. package/dist/core/commands/research-command.js +293 -231
  99. package/dist/core/commands/run-command.js +100 -23
  100. package/dist/core/commands/team-command.js +2 -3
  101. package/dist/core/commands/team-legacy-observe-command.js +94 -359
  102. package/dist/core/commands/wiki-command.js +179 -83
  103. package/dist/core/computer-use-live-evidence.js +166 -3
  104. package/dist/core/computer-use-status.js +5 -2
  105. package/dist/core/daemon/sksd-hook-daemon-entrypoint.js +2 -2
  106. package/dist/core/daemon/sksd-hook-daemon.js +171 -28
  107. package/dist/core/daemon/sksd-hook-dispatch.js +2 -2
  108. package/dist/core/db-safety.js +2 -2
  109. package/dist/core/decision-lattice.js +6 -6
  110. package/dist/core/dfix/verification-selector.js +6 -4
  111. package/dist/core/doctor/browser-use-repair.js +54 -13
  112. package/dist/core/doctor/codex-0139-doctor.js +3 -2
  113. package/dist/core/doctor/codex-startup-config-repair.js +8 -3
  114. package/dist/core/doctor/computer-use-repair.js +28 -39
  115. package/dist/core/doctor/doctor-codex-startup-repair.js +24 -149
  116. package/dist/core/doctor/doctor-context7-repair.js +1 -1
  117. package/dist/core/doctor/doctor-dirty-planner.js +1 -1
  118. package/dist/core/doctor/doctor-native-capability-repair.js +74 -3
  119. package/dist/core/doctor/imagegen-repair.js +47 -12
  120. package/dist/core/doctor/legacy-global-hook-cleanup.js +179 -0
  121. package/dist/core/feature-fixture-executor.js +71 -7
  122. package/dist/core/feature-fixture-runner.js +53 -12
  123. package/dist/core/feature-fixtures.js +47 -14
  124. package/dist/core/feature-registry.js +53 -58
  125. package/dist/core/fsx.js +54 -6
  126. package/dist/core/harness-conflicts.js +19 -10
  127. package/dist/core/hooks-runtime/code-pack-freshness-preflight.js +5 -4
  128. package/dist/core/hooks-runtime/hook-invocation-dedupe.js +147 -0
  129. package/dist/core/hooks-runtime/hook-io.js +14 -4
  130. package/dist/core/hooks-runtime/light-turn.js +70 -0
  131. package/dist/core/hooks-runtime/payload-signals.js +270 -0
  132. package/dist/core/hooks-runtime/team-digest.js +0 -1
  133. package/dist/core/hooks-runtime/tool-output-quarantine.js +93 -0
  134. package/dist/core/hooks-runtime.js +418 -250
  135. package/dist/core/image/image-artifact-path-contract.js +8 -6
  136. package/dist/core/image/image-artifact-registry.js +5 -1
  137. package/dist/core/image-ux-review/imagegen-adapter.js +5 -2
  138. package/dist/core/imagegen/imagegen-capability.js +10 -13
  139. package/dist/core/imagegen/require-imagegen.js +37 -11
  140. package/dist/core/init/skills.js +16 -30
  141. package/dist/core/init.js +144 -36
  142. package/dist/core/managed-assets/managed-assets-manifest.js +417 -14
  143. package/dist/core/mission.js +24 -1
  144. package/dist/core/naruto/naruto-work-graph.js +70 -4
  145. package/dist/core/ops/reporting.js +3 -0
  146. package/dist/core/pipeline-internals/runtime-core.js +578 -180
  147. package/dist/core/pipeline-internals/runtime-gates.js +191 -49
  148. package/dist/core/ppt/style-tokens.js +1 -1
  149. package/dist/core/ppt-review/index.js +1 -1
  150. package/dist/core/ppt-review/slide-exporter.js +23 -17
  151. package/dist/core/ppt-review/slide-imagegen-review.js +1 -1
  152. package/dist/core/ppt-review/slide-issue-extraction.js +4 -2
  153. package/dist/core/preflight/parallel-preflight-engine.js +50 -1
  154. package/dist/core/product-design-plugin.js +2 -2
  155. package/dist/core/proof/route-finalizer.js +1 -1
  156. package/dist/core/proof/route-proof-gate.js +7 -2
  157. package/dist/core/proof-field.js +3 -3
  158. package/dist/core/provider/model-router.js +38 -32
  159. package/dist/core/recallpulse/policy.js +12 -28
  160. package/dist/core/recallpulse.js +11 -6
  161. package/dist/core/release/gate-manifest.js +18 -12
  162. package/dist/core/release/gate-pack-manifest.js +1 -1
  163. package/dist/core/release/npm-pack-proof.js +247 -0
  164. package/dist/core/release/package-dist-snapshot.js +151 -0
  165. package/dist/core/release/package-size-budget.js +5 -0
  166. package/dist/core/release/release-authorization-snapshot.js +115 -0
  167. package/dist/core/release/release-gate-affected-selector.js +15 -3
  168. package/dist/core/release/release-gate-cache-v2.js +30 -0
  169. package/dist/core/release/release-gate-contract.js +161 -0
  170. package/dist/core/release/release-gate-dag.js +44 -3
  171. package/dist/core/release/release-gate-hermetic-env.js +28 -17
  172. package/dist/core/release/release-real-contract.js +496 -0
  173. package/dist/core/release-parallel-full-coverage.js +31 -143
  174. package/dist/core/research/claim-evidence-matrix.js +41 -6
  175. package/dist/core/research/experiment-plan.js +14 -10
  176. package/dist/core/research/falsification.js +9 -2
  177. package/dist/core/research/implementation-blueprint-densifier.js +82 -60
  178. package/dist/core/research/implementation-blueprint.js +32 -26
  179. package/dist/core/research/mock-result.js +122 -11
  180. package/dist/core/research/replication-pack.js +15 -8
  181. package/dist/core/research/research-adversarial-review.js +1068 -0
  182. package/dist/core/research/research-claim-builder.js +69 -17
  183. package/dist/core/research/research-claim-synthesizer.js +343 -0
  184. package/dist/core/research/research-cycle-runner.js +53 -3
  185. package/dist/core/research/research-falsification-runner.js +176 -0
  186. package/dist/core/research/research-final-reviewer.js +44 -125
  187. package/dist/core/research/research-realistic-report.js +14 -6
  188. package/dist/core/research/research-review-artifact-digest.js +66 -0
  189. package/dist/core/research/research-source-evidence.js +144 -0
  190. package/dist/core/research/research-source-layer-catalog.js +68 -0
  191. package/dist/core/research/research-source-ledger-merge.js +250 -12
  192. package/dist/core/research/research-source-shards.js +26 -70
  193. package/dist/core/research/research-stage-runner.js +237 -247
  194. package/dist/core/research/research-super-search.js +184 -0
  195. package/dist/core/research/research-synthesis-prompt.js +20 -1
  196. package/dist/core/research/research-synthesis-writer.js +86 -5
  197. package/dist/core/research/research-work-graph.js +25 -18
  198. package/dist/core/research/source-quality-report.js +21 -0
  199. package/dist/core/research.js +429 -280
  200. package/dist/core/retention/retention-budget.js +25 -6
  201. package/dist/core/retention.js +980 -101
  202. package/dist/core/routes/constants.js +1 -1
  203. package/dist/core/routes/dollar-manifest-lite.js +11 -11
  204. package/dist/core/routes/evidence.js +4 -4
  205. package/dist/core/routes/ppt-policy.js +1 -1
  206. package/dist/core/routes.js +92 -64
  207. package/dist/core/runtime/task-profile.js +66 -0
  208. package/dist/core/runtime/verification-budget.js +12 -0
  209. package/dist/core/secret-redaction.js +4 -0
  210. package/dist/core/security/high-risk-contracts.js +6 -6
  211. package/dist/core/stop-gate/stop-gate-check.js +49 -12
  212. package/dist/core/subagents/agent-catalog.js +215 -0
  213. package/dist/core/subagents/model-policy.js +118 -0
  214. package/dist/core/subagents/naruto-help-contract.js +40 -0
  215. package/dist/core/subagents/official-subagent-config.js +488 -0
  216. package/dist/core/subagents/official-subagent-preparation.js +251 -0
  217. package/dist/core/subagents/official-subagent-prompt.js +137 -0
  218. package/dist/core/subagents/official-subagent-runner.js +129 -0
  219. package/dist/core/subagents/subagent-evidence.js +663 -0
  220. package/dist/core/subagents/terminology.js +16 -0
  221. package/dist/core/subagents/thread-budget.js +21 -0
  222. package/dist/core/subagents/triwiki-attention.js +65 -0
  223. package/dist/core/super-search/runtime-helpers.js +173 -19
  224. package/dist/core/super-search/runtime.js +140 -15
  225. package/dist/core/super-search/source-records.js +49 -8
  226. package/dist/core/team-review-policy.js +15 -0
  227. package/dist/core/triwiki/code-pack.js +8 -2
  228. package/dist/core/triwiki/triwiki-cache-key.js +108 -29
  229. package/dist/core/triwiki/triwiki-module-card.js +1 -1
  230. package/dist/core/triwiki-attention.js +13 -6
  231. package/dist/core/triwiki-provenance.js +274 -0
  232. package/dist/core/triwiki-runtime.js +21 -7
  233. package/dist/core/triwiki-wrongness/wrongness-ledger.js +187 -61
  234. package/dist/core/triwiki-wrongness/wrongness-retrieval.js +11 -2
  235. package/dist/core/triwiki-wrongness/wrongness-trust-policy.js +2 -0
  236. package/dist/core/update-check.js +23 -15
  237. package/dist/core/version-manager.js +51 -1
  238. package/dist/core/version.js +1 -1
  239. package/dist/core/wiki-coordinate.js +128 -12
  240. package/dist/core/work-order-ledger.js +208 -10
  241. package/dist/core/zellij/zellij-command.js +12 -1
  242. package/dist/core/zellij/zellij-dashboard-pane.js +3 -3
  243. package/dist/core/zellij/zellij-fake-adapter.js +3 -1
  244. package/dist/core/zellij/zellij-launcher.js +51 -21
  245. package/dist/core/zellij/zellij-layout-builder.js +14 -5
  246. package/dist/core/zellij/zellij-official-subagent-activity.js +477 -0
  247. package/dist/core/zellij/zellij-official-subagent-telemetry.js +264 -0
  248. package/dist/core/zellij/zellij-pane-proof.js +32 -6
  249. package/dist/core/zellij/zellij-slot-pane-renderer.js +17 -5
  250. package/dist/core/zellij/zellij-slot-telemetry.js +15 -3
  251. package/dist/core/zellij/zellij-ui-mode.js +1 -1
  252. package/dist/core/zellij/zellij-viewport-binder.js +3 -0
  253. package/dist/core/zellij/zellij-worker-pane-manager.js +5 -3
  254. package/dist/scripts/agent-fast-mode-default-check.js +48 -29
  255. package/dist/scripts/agent-role-config-repair-check.js +34 -15
  256. package/dist/scripts/agent-wiki-context-proof-check.js +16 -2
  257. package/dist/scripts/all-feature-deep-completion-check.js +14 -4
  258. package/dist/scripts/architecture-guard-check.js +8 -1
  259. package/dist/scripts/build-dist.js +17 -5
  260. package/dist/scripts/canonical-test-runner.js +188 -0
  261. package/dist/scripts/check-command-module-budget.js +38 -16
  262. package/dist/scripts/check-legacy-free.js +1 -1
  263. package/dist/scripts/check-route-modularity.js +0 -1
  264. package/dist/scripts/check-ts-contracts.js +1 -1
  265. package/dist/scripts/codex-0139-interrupt-agent-check.js +5 -1
  266. package/dist/scripts/{codex-0142-app-server-v2-check.js → codex-0144-app-server-v2-check.js} +11 -10
  267. package/dist/scripts/{codex-0142-binary-identity-check.js → codex-0144-binary-identity-check.js} +4 -4
  268. package/dist/scripts/codex-0144-capability-check.js +21 -0
  269. package/dist/scripts/{codex-0139-real-probes-check.js → codex-0144-core-real-probes-check.js} +19 -5
  270. package/dist/scripts/{codex-0142-doctor-wiring-check.js → codex-0144-doctor-wiring-check.js} +6 -6
  271. package/dist/scripts/{codex-0142-manifest-check.js → codex-0144-manifest-check.js} +11 -3
  272. package/dist/scripts/{codex-0142-policy-check.js → codex-0144-policy-check.js} +2 -2
  273. package/dist/scripts/{codex-0142-thread-store-check.js → codex-0144-thread-store-check.js} +3 -3
  274. package/dist/scripts/codex-app-provider-model-ui-check.js +53 -19
  275. package/dist/scripts/codex-app-ui-preservation-check.js +35 -4
  276. package/dist/scripts/codex-control-all-pipelines-check.js +7 -3
  277. package/dist/scripts/codex-control-side-effect-scope-check.js +2 -2
  278. package/dist/scripts/codex-control-tool-output-continuity-audit-check.js +27 -0
  279. package/dist/scripts/codex-effort-auto-discovery-check.js +1 -1
  280. package/dist/scripts/codex-lb-fast-mode-truth-check.js +1 -0
  281. package/dist/scripts/{codex-lb-gpt55-fast-profile-check.js → codex-lb-gpt56-fast-profile-check.js} +56 -5
  282. package/dist/scripts/codex-model-metadata-check.js +1 -1
  283. package/dist/scripts/codex-native-agent-role-content-check.js +15 -7
  284. package/dist/scripts/codex-native-repair-transaction-check.js +3 -1
  285. package/dist/scripts/codex-sdk-all-pipelines-check.js +7 -4
  286. package/dist/scripts/codex-sdk-research-pipeline-check.js +30 -8
  287. package/dist/scripts/codex-sdk-sandbox-policy-check.js +5 -1
  288. package/dist/scripts/codex-sdk-version-compat-check.js +2 -1
  289. package/dist/scripts/db-route-materialization-check.js +33 -0
  290. package/dist/scripts/dfix-fixture-check.js +1 -1
  291. package/dist/scripts/docs-truthfulness-check.js +4 -2
  292. package/dist/scripts/doctor-codex-startup-repair-check.js +47 -25
  293. package/dist/scripts/doctor-context7-repair-check.js +2 -1
  294. package/dist/scripts/doctor-fix-production-blackbox.js +12 -2
  295. package/dist/scripts/doctor-fixes-codex-app-fast-ui-check.js +34 -7
  296. package/dist/scripts/doctor-imagegen-repair-check.js +14 -4
  297. package/dist/scripts/doctor-startup-config-repair-blackbox.js +9 -3
  298. package/dist/scripts/doctor-startup-config-repair-check.js +13 -3
  299. package/dist/scripts/install-update-preserves-config-check.js +7 -2
  300. package/dist/scripts/legacy-gate-inventory-check.js +7 -5
  301. package/dist/scripts/legacy-strong-inventory-check.js +7 -5
  302. package/dist/scripts/legacy-upgrade-matrix-check.js +4 -4
  303. package/dist/scripts/lib/native-cli-session-swarm-check-lib.js +173 -13
  304. package/dist/scripts/mad-sks-app-ui-no-mutation-check.js +165 -6
  305. package/dist/scripts/managed-role-manifest-parity-check.js +5 -4
  306. package/dist/scripts/mutation-callsite-coverage-check.js +0 -11
  307. package/dist/scripts/naruto-codex-e2e-check.js +14 -7
  308. package/dist/scripts/naruto-shadow-clone-swarm-check.js +4 -201
  309. package/dist/scripts/npm-publish-performance-check.js +20 -12
  310. package/dist/scripts/official-subagent-workflow-check.js +145 -0
  311. package/dist/scripts/package-published-contract-check.js +6 -20
  312. package/dist/scripts/packlist-performance-check.js +17 -3
  313. package/dist/scripts/parallel-verification-engine-check.js +2 -2
  314. package/dist/scripts/postinstall-safe-side-effects-check.js +8 -3
  315. package/dist/scripts/ppt-no-mock-as-real-check.js +3 -1
  316. package/dist/scripts/prepublish-release-check-or-fast.js +23 -86
  317. package/dist/scripts/product-design-plugin-routing-check.js +1 -1
  318. package/dist/scripts/release-affected-selector-check.js +74 -1
  319. package/dist/scripts/release-check-stamp.js +324 -239
  320. package/dist/scripts/release-dag-full-coverage-check.js +7 -15
  321. package/dist/scripts/release-dynamic-presets-check.js +10 -1
  322. package/dist/scripts/release-gate-dag-runner-check.js +3 -3
  323. package/dist/scripts/release-gate-dag-runner.js +35 -11
  324. package/dist/scripts/release-gate-existence-audit.js +1 -2
  325. package/dist/scripts/release-gate-script-parity-check.js +1 -1
  326. package/dist/scripts/release-parallel-full-coverage-check.js +12 -6
  327. package/dist/scripts/release-parallel-speed-budget-check.js +18 -2
  328. package/dist/scripts/release-real-check.js +390 -157
  329. package/dist/scripts/release-registry-check.js +61 -16
  330. package/dist/scripts/release-runtime-truth-matrix-check.js +22 -0
  331. package/dist/scripts/research-blueprint-densifier-check.js +2 -2
  332. package/dist/scripts/research-real-cycle-no-legacy-final-md-check.js +11 -7
  333. package/dist/scripts/route-proof-artifact-structure-check.js +1 -0
  334. package/dist/scripts/search-visibility-gate-lib.js +1 -1
  335. package/dist/scripts/seo-geo-route-identity-check.js +30 -4
  336. package/dist/scripts/sizecheck.js +4 -4
  337. package/dist/scripts/sks-1-11-gate-lib.js +53 -6
  338. package/dist/scripts/sks-3-1-4-directive-check-lib.js +8 -2
  339. package/dist/scripts/sks-3-1-5-directive-check-lib.js +3 -2
  340. package/dist/scripts/sks-3-1-6-directive-check-lib.js +5 -3
  341. package/dist/scripts/sks-menubar-install-check.js +8 -0
  342. package/dist/scripts/sks-uninstall-regression-check.js +1 -1
  343. package/dist/scripts/sksd-daemon-check.js +16 -6
  344. package/dist/scripts/trust-fixture-check.js +32 -10
  345. package/dist/scripts/write-build-manifest.js +2 -1
  346. package/dist/scripts/wrongness-fixture-check.js +1 -1
  347. package/dist/scripts/zellij-layout-valid-check.js +36 -11
  348. package/dist/scripts/zellij-pane-proof-check.js +33 -2
  349. package/dist/scripts/zellij-real-session-cleanup-check.js +122 -2
  350. package/dist/scripts/zellij-real-session-launch-check.js +76 -5
  351. package/dist/scripts/zellij-slot-pane-renderer-check.js +4 -4
  352. package/dist/scripts/zellij-spawn-on-demand-layout-check.js +3 -3
  353. package/docs/demo.tape +1 -1
  354. package/infra-harness-gates.json +1486 -0
  355. package/package.json +32 -19
  356. package/release-gates.v2.json +4060 -0
  357. package/runtime-required-scripts.json +9 -0
  358. package/schemas/codex/{app-server-0.142 → app-server-0.144}/codex_app_server_protocol.v2.schemas.json +1146 -781
  359. package/schemas/codex/codex-0139-real-probe-result.schema.json +39 -5
  360. package/schemas/codex/ppt-slide-issue-ledger.schema.json +2 -1
  361. package/dist/commands/db.js +0 -6
  362. package/dist/core/codex-control/codex-0139-multi-agent-real-probe.js +0 -107
  363. package/dist/core/commands/db-command.js +0 -146
  364. package/dist/core/research/prompt.js +0 -15
  365. package/dist/scripts/agent-native-release-gate.js +0 -274
  366. package/dist/scripts/codex-0142-capability-check.js +0 -21
  367. package/dist/scripts/codex-control-tool-call-sequence-repair-check.js +0 -14
  368. package/dist/scripts/command-performance-scorecard-check.js +0 -204
  369. package/dist/scripts/config-managed-merge-callsite-coverage-check.js +0 -212
  370. package/dist/scripts/dollar-performance-scorecard-check.js +0 -257
  371. package/dist/scripts/gate-timing-check.js +0 -16
  372. package/dist/scripts/ops-maturity-scorecard-check.js +0 -12
  373. package/dist/scripts/performance-baseline-check.js +0 -12
  374. package/dist/scripts/performance-improvement-report-check.js +0 -58
  375. package/dist/scripts/release-parallel-check.js +0 -389
  376. package/dist/scripts/release-runner-efficiency-check.js +0 -15
  377. package/dist/scripts/retention-long-run-smoke-check.js +0 -299
  378. package/docs/assets/sneakoscope-architecture-pipeline.jpg +0 -0
@@ -1,18 +1,10 @@
1
1
  import path from 'node:path';
2
- import { ARTIFACT_FILES } from '../artifact-schemas.js';
3
- import { appendJsonlBounded, nowIso, readJson, readText, sksRoot, writeJsonAtomic, writeTextAtomic } from '../fsx.js';
2
+ import { readJson, readText, sksRoot } from '../fsx.js';
4
3
  import { loadMission } from '../mission.js';
5
4
  import { MIN_TEAM_REVIEWER_LANES } from '../team-review-policy.js';
6
- import { attachZellijSessionInteractive, launchTeamZellijView } from '../zellij/zellij-launcher.js';
7
5
  import { flag, readFlagValue } from './command-utils.js';
8
- const TEAM_SESSION_CLEANUP_ARTIFACT = 'team-session-cleanup.json';
9
- const TEAM_RUNTIME_TASKS_ARTIFACT = 'team-runtime-tasks.json';
10
- export const teamLegacySubcommands = new Set([
11
- 'log',
12
- 'tail',
13
- 'watch',
14
- 'lane',
15
- 'status',
6
+ const READ_ONLY_TEAM_SUBCOMMANDS = new Set(['log', 'tail', 'watch', 'lane', 'status']);
7
+ const REMOVED_TEAM_SUBCOMMANDS = new Set([
16
8
  'dashboard',
17
9
  'event',
18
10
  'message',
@@ -23,7 +15,10 @@ export const teamLegacySubcommands = new Set([
23
15
  'attach-tmux',
24
16
  'cleanup-tmux'
25
17
  ]);
18
+ export const teamLegacySubcommands = new Set([...READ_ONLY_TEAM_SUBCOMMANDS, ...REMOVED_TEAM_SUBCOMMANDS]);
26
19
  export async function teamLegacyObserveCommand(sub, args = []) {
20
+ if (!READ_ONLY_TEAM_SUBCOMMANDS.has(sub))
21
+ return removedTeamSurface(sub, args);
27
22
  const root = await sksRoot();
28
23
  const missionArg = args[0] && !String(args[0]).startsWith('--') ? args[0] : 'latest';
29
24
  const { resolveMissionId } = await import('./command-utils.js');
@@ -34,367 +29,107 @@ export async function teamLegacyObserveCommand(sub, args = []) {
34
29
  return;
35
30
  }
36
31
  const { dir } = await loadMission(root, id);
37
- if (sub === 'open-tmux' || sub === 'attach-tmux' || sub === 'cleanup-tmux') {
38
- const result = { ok: false, status: 'removed_runtime', runtime: 'tmux', replacement: 'zellij', operator_actions: ['Use `sks team open-zellij`, `attach-zellij`, or `cleanup-zellij`.'] };
39
- if (flag(args, '--json'))
40
- return console.log(JSON.stringify(result, null, 2));
41
- console.error('tmux runtime has been removed from SKS Team. Use Zellij commands instead.');
32
+ if (sub === 'status')
33
+ return renderStatus(id, dir, args);
34
+ if (sub === 'log')
35
+ return console.log(await readText(path.join(dir, 'team-live.md'), ''));
36
+ if (sub === 'lane')
37
+ return renderLane(id, dir, args);
38
+ return renderTailOrWatch(sub, id, dir, args);
39
+ }
40
+ function removedTeamSurface(sub, args) {
41
+ const result = {
42
+ schema: 'sks.team-legacy-observe.v1',
43
+ ok: false,
44
+ status: 'removed_non_read_only_surface',
45
+ subcommand: sub,
46
+ read_only_commands: [...READ_ONLY_TEAM_SUBCOMMANDS],
47
+ replacement: 'Use sks naruto status|subagents|proof for current official-subagent missions.'
48
+ };
49
+ process.exitCode = 2;
50
+ if (flag(args, '--json'))
51
+ console.log(JSON.stringify(result, null, 2));
52
+ else
53
+ console.error(`sks team ${sub} was removed because legacy Team commands are read-only. ${result.replacement}`);
54
+ return result;
55
+ }
56
+ async function renderStatus(id, dir, args) {
57
+ const dashboard = await readJson(path.join(dir, 'team-dashboard.json'), null);
58
+ if (!dashboard) {
59
+ const result = { schema: 'sks.team-legacy-observe.v1', ok: false, status: 'dashboard_missing', mission_id: id };
42
60
  process.exitCode = 2;
43
- return;
44
- }
45
- if (sub === 'open-zellij' || sub === 'attach-zellij') {
46
- const plan = await readJson(path.join(dir, 'team-plan.json'), null);
47
- if (!plan) {
48
- console.error(`Team plan missing for ${id}; cannot open Zellij Team view.`);
49
- process.exitCode = 2;
50
- return;
51
- }
52
- const slotCount = await inferTeamZellijSlotCount(dir, plan);
53
- const zellij = await launchTeamZellijView({ root, missionId: id, ledgerRoot: path.join(dir, 'agents'), slotCount, dryRun: flag(args, '--json'), attach: false });
54
61
  if (flag(args, '--json'))
55
- return console.log(JSON.stringify(zellij, null, 2));
56
- if (!zellij.ok) {
57
- console.error(`Zellij Team view blocked for ${id}: ${(zellij.blockers || []).join('; ') || 'Zellij launch failed'}`);
58
- process.exitCode = 2;
59
- return;
60
- }
61
- if (zellij.capability?.status === 'ok')
62
- console.log(`Zellij: prepared Team lane(s) in ${zellij.session_name}`);
62
+ console.log(JSON.stringify(result, null, 2));
63
63
  else
64
- console.log(`Zellij: optional live panes unavailable (${(zellij.warnings || []).join('; ') || zellij.capability?.status || 'unknown'})`);
65
- if (zellij.capability?.status === 'ok' && (sub === 'attach-zellij' || shouldAutoAttachTeamZellij(args))) {
66
- attachZellijSessionInteractive(zellij.session_name, { cwd: root, configPath: zellij.clipboard_config_path });
67
- }
68
- return;
69
- }
70
- if (sub === 'event') {
71
- const message = readFlagValue(args, '--message', '');
72
- if (!message) {
73
- console.error('Usage: sks team event [mission-id|latest] --agent <name> --phase <phase> --message "..."');
74
- process.exitCode = 1;
75
- return;
76
- }
77
- const phase = readFlagValue(args, '--phase', 'general');
78
- const record = await appendTeamEvent(dir, { agent: readFlagValue(args, '--agent', 'parent_orchestrator'), phase, type: readFlagValue(args, '--type', 'status'), artifact: readFlagValue(args, '--artifact', ''), message });
79
- if (flag(args, '--json'))
80
- return console.log(JSON.stringify(record, null, 2));
81
- console.log(`${record.ts} [${record.phase}] ${record.agent}: ${record.message}`);
82
- return;
83
- }
84
- if (sub === 'message') {
85
- const message = readFlagValue(args, '--message', '');
86
- if (!message) {
87
- console.error('Usage: sks team message [mission-id|latest] --from <agent> --to <agent|all> --message "..."');
88
- process.exitCode = 1;
89
- return;
90
- }
91
- const record = await appendTeamEvent(dir, { agent: readFlagValue(args, '--from', readFlagValue(args, '--agent', 'parent_orchestrator')), to: readFlagValue(args, '--to', 'all'), phase: readFlagValue(args, '--phase', 'communication'), type: 'message', message });
92
- if (flag(args, '--json'))
93
- return console.log(JSON.stringify(record, null, 2));
94
- console.log(`${record.ts} [${record.phase}] ${record.agent} -> ${record.to}: ${record.message}`);
95
- return;
96
- }
97
- if (sub === 'cleanup-zellij') {
98
- const control = await requestTeamSessionCleanup(dir, { missionId: id, agent: readFlagValue(args, '--agent', 'parent_orchestrator'), reason: readFlagValue(args, '--reason', 'Team session ended; clean up live follow panes.'), finalMessage: 'Team session ended.' });
99
- await appendTeamEvent(dir, { agent: readFlagValue(args, '--agent', 'parent_orchestrator'), phase: 'session_cleanup', type: 'cleanup', message: control.cleanup_reason || 'Team session cleanup requested.' });
100
- const cleanup = { ok: true, runtime: 'zellij', mission_id: id, control, close_requested: flag(args, '--close-session') || flag(args, '--close') };
101
- await writeJsonAtomic(path.join(dir, 'zellij-session-cleanup.json'), cleanup);
102
- if (flag(args, '--json'))
103
- return console.log(JSON.stringify(cleanup, null, 2));
104
- console.log('Zellij cleanup: marked complete.');
105
- console.log(renderTeamCleanupSummary(control));
106
- return;
107
- }
108
- if (sub === 'status') {
109
- const dashboard = await readTeamDashboard(dir);
110
- if (flag(args, '--json'))
111
- return console.log(JSON.stringify(dashboard || {}, null, 2));
112
- if (!dashboard) {
113
64
  console.error(`Team dashboard missing for ${id}.`);
114
- process.exitCode = 2;
115
- return;
116
- }
117
- console.log(`Team mission: ${id}`);
118
- console.log(`Updated: ${dashboard.updated_at || 'unknown'}`);
119
- console.log(`Agent sessions: ${dashboard.agent_session_count || MIN_TEAM_REVIEWER_LANES}`);
120
- if (dashboard.role_counts)
121
- console.log(`Role counts: ${formatRoleCounts(dashboard.role_counts)}`);
122
- return;
123
- }
124
- if (sub === 'dashboard') {
125
- await writeTeamDashboardState(dir, { missionId: id });
126
- const state = await readJson(path.join(dir, ARTIFACT_FILES.team_dashboard_state), {});
127
- if (flag(args, '--json'))
128
- return console.log(JSON.stringify(state, null, 2));
129
- console.log(renderTeamDashboardState(state));
130
- return;
131
- }
132
- if (sub === 'log')
133
- return console.log(await readTeamLive(dir));
134
- if (sub === 'lane') {
135
- const agent = readFlagValue(args, '--agent', 'parent_orchestrator');
136
- const phase = readFlagValue(args, '--phase', '');
137
- const lines = Number(readFlagValue(args, '--lines', '12'));
138
- const text = await renderTeamAgentLane(dir, { missionId: id, agent, phase, lines });
139
- if (flag(args, '--json'))
140
- return console.log(JSON.stringify({ mission_id: id, agent, phase, lane: text }, null, 2));
141
- console.log(text);
142
- if (flag(args, '--follow') && !teamCleanupRequested(await readTeamControl(dir)) && !isTerminalTeamAgentStatus((await readTeamDashboard(dir).catch(() => null))?.agents?.[agent]?.status || '')) {
143
- // Follow mode intentionally falls through only for interactive terminals in the full Zellij lane.
144
- }
145
- return;
146
- }
147
- if (sub === 'tail' || sub === 'watch') {
148
- const lines = readFlagValue(args, '--lines', '20');
149
- if (sub === 'watch' && !flag(args, '--raw'))
150
- console.log(await renderTeamWatch(dir, { missionId: id, lines: Number(lines) }));
151
- else
152
- for (const line of await readTeamTranscriptTail(dir, Number(lines)))
153
- console.log(line);
65
+ return result;
154
66
  }
155
- }
156
- async function inferTeamZellijSlotCount(dir, plan = {}) {
157
- const scheduler = await readJson(path.join(dir, 'agents', 'agent-scheduler-state.json'), null);
158
- const lanes = await readJson(path.join(dir, 'agents', 'agent-zellij-lanes.json'), null);
159
- const candidates = [
160
- plan?.bundle_size,
161
- plan?.agent_session_count,
162
- lanes?.lane_count,
163
- plan?.target_active_slots,
164
- scheduler?.target_active_slots
165
- ].map((value) => Number(value)).filter((value) => Number.isFinite(value) && value > 0);
166
- return Math.max(1, Math.min(100, Math.floor(candidates[0] || 5)));
167
- }
168
- function shouldAutoAttachTeamZellij(args = []) {
169
- const list = (args || []).map((arg) => String(arg));
170
- if (list.includes('--no-attach'))
171
- return false;
172
- if (list.includes('--json'))
173
- return false;
174
- if (process.env.SKS_NO_ZELLIJ_ATTACH === '1')
175
- return false;
176
- if (process.env.ZELLIJ)
177
- return false;
178
- if (list.includes('--attach'))
179
- return true;
180
- return Boolean(process.stdout.isTTY && process.stdin.isTTY);
181
- }
182
- function teamLogPaths(dir) {
183
- return {
184
- live: path.join(dir, 'team-live.md'),
185
- transcript: path.join(dir, 'team-transcript.jsonl'),
186
- dashboard: path.join(dir, 'team-dashboard.json'),
187
- control: path.join(dir, 'team-control.json')
188
- };
189
- }
190
- function defaultTeamControl(id) {
191
- return {
192
- schema_version: 1,
67
+ const result = {
68
+ schema: 'sks.team-legacy-observe.v1',
69
+ ok: true,
70
+ status: 'read_only',
193
71
  mission_id: id,
194
- status: 'running',
195
- cleanup_requested: false,
196
- cleanup_requested_at: null,
197
- cleanup_requested_by: null,
198
- cleanup_reason: null,
199
- final_message: null
200
- };
201
- }
202
- function formatRoleCounts(roleCounts = {}) {
203
- return Object.entries(roleCounts || {}).map(([role, count]) => `${role}:${count}`).join(' ');
204
- }
205
- async function readTeamDashboard(dir) {
206
- return readJson(teamLogPaths(dir).dashboard, null);
207
- }
208
- async function readTeamLive(dir) {
209
- return readText(teamLogPaths(dir).live, '');
210
- }
211
- async function readTeamTranscriptTail(dir, count = 20) {
212
- const text = await readText(teamLogPaths(dir).transcript, '');
213
- return text.split(/\n/).filter(Boolean).slice(-Math.max(1, Number(count) || 20));
214
- }
215
- async function readTeamControl(dir) {
216
- const control = await readJson(teamLogPaths(dir).control, defaultTeamControl(path.basename(dir)));
217
- const cleanup = await readJson(path.join(dir, TEAM_SESSION_CLEANUP_ARTIFACT), null).catch(() => null);
218
- if (!cleanup || (cleanup.passed !== true && cleanup.live_transcript_finalized !== true && cleanup.all_sessions_closed !== true))
219
- return control;
220
- return {
221
- ...defaultTeamControl(path.basename(dir)),
222
- ...control,
223
- status: 'ended',
224
- cleanup_requested: true,
225
- cleanup_requested_at: cleanup.updated_at || cleanup.completed_at || cleanup.closed_at || control.cleanup_requested_at || 'artifact',
226
- cleanup_requested_by: cleanup.agent || control.cleanup_requested_by || 'parent_orchestrator',
227
- cleanup_reason: cleanup.reason || control.cleanup_reason || `${TEAM_SESSION_CLEANUP_ARTIFACT} passed.`,
228
- final_message: cleanup.final_message || control.final_message || 'Team session ended. Legacy observation lanes can stop.'
229
- };
230
- }
231
- async function appendTeamEvent(dir, event) {
232
- const files = teamLogPaths(dir);
233
- const record = {
234
- ts: event.ts || nowIso(),
235
- agent: String(event.agent || 'parent_orchestrator'),
236
- phase: String(event.phase || 'general'),
237
- type: String(event.type || 'status'),
238
- to: event.to ? String(event.to).slice(0, 200) : undefined,
239
- message: String(event.message || '').slice(0, 4000),
240
- artifact: event.artifact ? String(event.artifact) : undefined
72
+ updated_at: dashboard.updated_at || null,
73
+ agent_session_count: dashboard.agent_session_count || MIN_TEAM_REVIEWER_LANES,
74
+ role_counts: dashboard.role_counts || null
241
75
  };
242
- await appendJsonlBounded(files.transcript, record, 1024 * 1024);
243
- const dashboard = await readJson(files.dashboard, null);
244
- if (dashboard) {
245
- dashboard.updated_at = record.ts;
246
- dashboard.latest_messages = [...(dashboard.latest_messages || []), record].slice(-20);
247
- dashboard.agents ||= {};
248
- dashboard.agents[record.agent] ||= {};
249
- dashboard.agents[record.agent].status = isTerminalTeamAgentStatus(record.type) ? record.type : record.type || 'active';
250
- dashboard.agents[record.agent].phase = record.phase;
251
- dashboard.agents[record.agent].last_seen = record.ts;
252
- await writeJsonAtomic(files.dashboard, dashboard);
76
+ if (flag(args, '--json'))
77
+ console.log(JSON.stringify(result, null, 2));
78
+ else {
79
+ console.log(`Team mission: ${id}`);
80
+ console.log(`Updated: ${result.updated_at || 'unknown'}`);
81
+ console.log(`Agent sessions: ${result.agent_session_count}`);
253
82
  }
254
- const target = record.to ? ` -> ${record.to}` : '';
255
- const current = await readText(files.live, '# SKS Team Live Transcript\n\n## Live Events\n');
256
- const line = `\n- ${record.ts} [${record.phase}] ${record.agent}${target}: ${record.message}${record.artifact ? ` (${record.artifact})` : ''}\n`;
257
- await writeTextAtomic(files.live, `${current.trimEnd()}${line}`);
258
- return record;
259
- }
260
- async function requestTeamSessionCleanup(dir, opts = {}) {
261
- const current = await readTeamControl(dir);
262
- const next = {
263
- ...defaultTeamControl(current?.mission_id || opts.missionId || path.basename(dir)),
264
- ...current,
265
- status: 'cleanup_requested',
266
- cleanup_requested: true,
267
- cleanup_requested_at: opts.ts || nowIso(),
268
- cleanup_requested_by: opts.agent || 'parent_orchestrator',
269
- cleanup_reason: opts.reason || 'Team session cleanup requested.',
270
- final_message: opts.finalMessage || 'Team session ended.'
271
- };
272
- await writeJsonAtomic(teamLogPaths(dir).control, next);
273
- return next;
274
- }
275
- function teamCleanupRequested(control = {}) {
276
- return Boolean(control?.cleanup_requested || control?.status === 'cleanup_requested' || control?.status === 'ended');
277
- }
278
- function isTerminalTeamAgentStatus(status = '') {
279
- return /(?:^|_)(?:done|complete|completed|closed|cleanup|cancelled|canceled|failed|ended|stopped)(?:_|$)/i.test(String(status || ''));
280
- }
281
- function renderTeamCleanupSummary(control = {}) {
282
- if (!teamCleanupRequested(control))
283
- return '';
284
- return [
285
- '# SKS Team Session Cleanup',
286
- '',
287
- `Status: ${control.status || 'cleanup_requested'}`,
288
- `Requested at: ${control.cleanup_requested_at || 'unknown'}`,
289
- `Requested by: ${control.cleanup_requested_by || 'unknown'}`,
290
- `Reason: ${control.cleanup_reason || 'Team session cleanup requested.'}`,
291
- '',
292
- control.final_message || 'Team session ended.'
293
- ].join('\n');
294
- }
295
- async function renderTeamAgentLane(dir, opts = {}) {
296
- const agent = String(opts.agent || opts.agentId || 'parent_orchestrator');
297
- const lines = Math.max(1, Number(opts.lines) || 12);
298
- const dashboard = await readTeamDashboard(dir);
299
- const control = await readTeamControl(dir);
300
- const runtime = await readJson(path.join(dir, TEAM_RUNTIME_TASKS_ARTIFACT), null);
83
+ return result;
84
+ }
85
+ async function renderLane(id, dir, args) {
86
+ const agent = readFlagValue(args, '--agent', 'parent_orchestrator');
87
+ const lines = Math.max(1, Number(readFlagValue(args, '--lines', '12')) || 12);
88
+ const [dashboard, runtime, events] = await Promise.all([
89
+ readJson(path.join(dir, 'team-dashboard.json'), {}),
90
+ readJson(path.join(dir, 'team-runtime-tasks.json'), {}),
91
+ transcriptTail(dir, lines)
92
+ ]);
301
93
  const status = dashboard?.agents?.[agent] || {};
302
94
  const tasks = (Array.isArray(runtime?.tasks) ? runtime.tasks : []).filter((task) => task?.worker === agent || task?.agent_hint === agent);
303
- const events = (await readTeamTranscriptTail(dir, lines)).map(parseTranscriptLine).filter((event) => event.raw || event.agent === agent || event.to === agent || event.to === 'all');
304
- return [
305
- '# SKS Team Agent Lane',
306
- '',
307
- `Mission: ${opts.missionId || dashboard?.mission_id || runtime?.mission_id || path.basename(dir)}`,
308
- `Agent: ${agent}`,
309
- teamCleanupRequested(control) ? `Cleanup: requested at ${control.cleanup_requested_at || 'unknown'}` : null,
310
- '',
311
- '## Agent Status',
312
- `- status: ${status.status || 'pending'}`,
313
- `- phase: ${status.phase || 'unknown'}`,
314
- `- last_seen: ${status.last_seen || 'never'}`,
315
- '',
316
- '## Assigned Runtime Tasks',
317
- ...formatRuntimeTasks(tasks),
318
- '',
319
- '## Recent Events',
320
- ...(events.length ? events.map(formatTranscriptEvent) : ['- No matching events yet.']),
321
- teamCleanupRequested(control) ? ['', renderTeamCleanupSummary(control)].join('\n') : null
322
- ].filter((line) => line !== null).join('\n');
323
- }
324
- async function renderTeamWatch(dir, opts = {}) {
325
- const lines = Math.max(1, Number(opts.lines) || 20);
326
- const dashboard = await readTeamDashboard(dir);
327
- const control = await readTeamControl(dir);
328
- const runtime = await readJson(path.join(dir, TEAM_RUNTIME_TASKS_ARTIFACT), null);
329
- const events = (await readTeamTranscriptTail(dir, lines)).map(parseTranscriptLine);
330
- const agents = Object.entries(dashboard?.agents || {}).slice(0, Math.max(3, Number(dashboard?.agent_session_count) || 3));
331
- return [
332
- '# SKS Team Legacy Observation',
333
- '',
334
- `Mission: ${opts.missionId || dashboard?.mission_id || runtime?.mission_id || path.basename(dir)}`,
335
- `Updated: ${dashboard?.updated_at || 'unknown'}`,
336
- `Agent session budget: ${dashboard?.agent_session_count || 'unknown'}`,
337
- dashboard?.role_counts ? `Role counts: ${formatRoleCounts(dashboard.role_counts)}` : null,
338
- teamCleanupRequested(control) ? `Cleanup: requested at ${control.cleanup_requested_at || 'unknown'}` : null,
339
- '',
340
- '## Visible Agent Lanes',
341
- ...(agents.length ? agents.map(([name, status]) => `- ${name}: ${status.status || 'pending'} | ${status.phase || 'unknown'} | last_seen:${status.last_seen || 'never'}`) : ['- No agent lanes registered yet.']),
342
- '',
343
- '## Runtime Task Snapshot',
344
- ...formatRuntimeTasks((Array.isArray(runtime?.tasks) ? runtime.tasks : []).slice(0, 8)),
345
- '',
346
- '## Recent Mission Events',
347
- ...(events.length ? events.map(formatTranscriptEvent) : ['- No transcript events yet.']),
348
- teamCleanupRequested(control) ? ['', renderTeamCleanupSummary(control)].join('\n') : null
349
- ].filter((line) => line !== null).join('\n');
350
- }
351
- async function writeTeamDashboardState(dir, opts = {}) {
352
- const mission = await readJson(path.join(dir, 'mission.json'), {});
353
- const dashboard = await readTeamDashboard(dir) || {};
354
- const runtime = await readJson(path.join(dir, TEAM_RUNTIME_TASKS_ARTIFACT), {});
355
- const gate = await readJson(path.join(dir, 'team-gate.json'), {});
356
- const state = {
357
- schema_version: 1,
358
- updated_at: nowIso(),
359
- mission: { id: mission.id || dashboard.mission_id || opts.missionId || 'unknown', route: mission.mode || 'team', phase: opts.phase || 'legacy_observe' },
360
- gates: Object.entries(gate || {}).filter(([, value]) => typeof value === 'boolean').map(([name, value]) => ({ name, status: value ? 'pass' : 'fail', evidence: [] })),
361
- agents: Object.entries(dashboard.agents || {}).map(([id, value]) => ({ id, role: value.role || null, status: value.status || 'pending', current_task: value.phase || null })),
362
- tasks: (runtime.tasks || []).map((task) => ({ id: task.task_id, deps: task.depends_on || [], status: task.status || 'pending' })),
363
- artifacts: ['team-plan.json', 'team-gate.json', 'team-live.md', 'team-dashboard.json', TEAM_RUNTIME_TASKS_ARTIFACT]
95
+ const result = {
96
+ schema: 'sks.team-legacy-observe.v1',
97
+ ok: true,
98
+ status: 'read_only',
99
+ mission_id: id,
100
+ agent,
101
+ agent_status: status,
102
+ tasks,
103
+ events
364
104
  };
365
- await writeJsonAtomic(path.join(dir, ARTIFACT_FILES.team_dashboard_state), state);
366
- return { ok: true, state };
367
- }
368
- function renderTeamDashboardState(state = {}) {
369
- return [
370
- `Mission: ${state.mission?.id || 'unknown'} (${state.mission?.route || 'team'})`,
371
- `Phase: ${state.mission?.phase || 'unknown'}`,
372
- '',
373
- ...(state.gates || []).map((gate) => `[${gate.name}] ${gate.status}`),
374
- ...(state.agents?.length ? [`Agents: ${state.agents.length}`] : []),
375
- ...(state.tasks?.length ? [`Tasks: ${state.tasks.length}`] : [])
376
- ].join('\n');
377
- }
378
- function parseTranscriptLine(line) {
379
- try {
380
- return JSON.parse(line);
105
+ if (flag(args, '--json'))
106
+ console.log(JSON.stringify(result, null, 2));
107
+ else {
108
+ console.log(`# SKS Team Agent Lane\n\nMission: ${id}\nAgent: ${agent}`);
109
+ console.log(`Status: ${status.status || 'pending'} | phase: ${status.phase || 'unknown'}`);
110
+ for (const task of tasks.slice(0, 12))
111
+ console.log(`- ${task.task_id || 'task'}: ${task.subject || task.symbolic_id || 'untitled'} (${task.status || 'pending'})`);
112
+ for (const event of events)
113
+ console.log(event);
381
114
  }
382
- catch {
383
- return { raw: String(line || '').slice(0, 1000) };
115
+ return result;
116
+ }
117
+ async function renderTailOrWatch(sub, id, dir, args) {
118
+ const lines = Math.max(1, Number(readFlagValue(args, '--lines', '20')) || 20);
119
+ const events = await transcriptTail(dir, lines);
120
+ const result = { schema: 'sks.team-legacy-observe.v1', ok: true, status: 'read_only', action: sub, mission_id: id, events };
121
+ if (flag(args, '--json'))
122
+ console.log(JSON.stringify(result, null, 2));
123
+ else {
124
+ if (sub === 'watch' && !flag(args, '--raw'))
125
+ console.log(`# SKS Team Legacy Observation\n\nMission: ${id}`);
126
+ for (const event of events)
127
+ console.log(event);
384
128
  }
129
+ return result;
385
130
  }
386
- function formatTranscriptEvent(event = {}) {
387
- if (event.raw)
388
- return `- ${event.raw}`;
389
- const parts = [event.ts || 'no-ts', `[${event.phase || 'general'}]`, event.agent || 'unknown', event.to ? `-> ${event.to}` : null, event.type ? `(${event.type})` : null].filter(Boolean);
390
- return `- ${parts.join(' ')}: ${String(event.message || '').slice(0, 500)}${event.artifact ? ` (${event.artifact})` : ''}`;
391
- }
392
- function formatRuntimeTasks(tasks = []) {
393
- if (!tasks.length)
394
- return ['- No assigned runtime tasks found.'];
395
- return tasks.slice(0, 12).map((task) => {
396
- const details = [task.status || 'pending', task.phase || task.role || 'team', task.depends_on?.length ? `deps:${task.depends_on.join(',')}` : null, task.file_paths?.length ? `files:${task.file_paths.slice(0, 3).join(',')}` : null].filter(Boolean).join(' | ');
397
- return `- ${task.task_id || 'task'} ${task.subject || task.symbolic_id || 'untitled'} (${details})`;
398
- });
131
+ async function transcriptTail(dir, count) {
132
+ const text = await readText(path.join(dir, 'team-transcript.jsonl'), '');
133
+ return text.split(/\n/).filter(Boolean).slice(-count);
399
134
  }
400
135
  //# sourceMappingURL=team-legacy-observe-command.js.map