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.
- package/README.md +29 -12
- package/config/codex-releases/{rust-v0.142.0.json → rust-v0.144.1.json} +6 -6
- package/crates/sks-core/Cargo.lock +1 -1
- package/crates/sks-core/Cargo.toml +1 -1
- package/dist/bin/fast-inline.js +18 -14
- package/dist/bin/sks-dispatch.js +2 -4
- package/dist/cli/args.js +2 -0
- package/dist/cli/command-manifest-lite.js +2 -3
- package/dist/cli/command-registry.js +3 -4
- package/dist/cli/help-fast.js +1 -1
- package/dist/cli/install-helpers.js +348 -763
- package/dist/cli/install-tool-helpers.js +287 -0
- package/dist/cli/router.js +91 -6
- package/dist/commands/codex-lb.js +188 -53
- package/dist/commands/codex.js +44 -5
- package/dist/commands/doctor.js +302 -46
- package/dist/commands/tmux.js +5 -1
- package/dist/commands/versioning.js +7 -0
- package/dist/commands/zellij-monitor-pane.js +2 -0
- package/dist/commands/zellij-viewport-pane.js +3 -1
- package/dist/commands/zellij.js +1 -1
- package/dist/config/skills-manifest.json +59 -59
- package/dist/core/agent-bridge/agent-manifest.js +48 -0
- package/dist/core/agents/agent-central-ledger.js +9 -0
- package/dist/core/agents/agent-cleanup-executor.js +334 -41
- package/dist/core/agents/agent-cleanup.js +20 -1
- package/dist/core/agents/agent-command-surface.js +3 -1
- package/dist/core/agents/agent-effort-policy.js +30 -38
- package/dist/core/agents/agent-janitor.js +9 -10
- package/dist/core/agents/agent-namespace-safety.js +56 -0
- package/dist/core/agents/agent-orchestrator.js +25 -3
- package/dist/core/agents/agent-output-validator.js +1 -1
- package/dist/core/agents/agent-plan.js +100 -21
- package/dist/core/agents/agent-role-config.js +43 -49
- package/dist/core/agents/agent-runner-codex-exec.js +18 -3
- package/dist/core/agents/agent-runner-process.js +1 -0
- package/dist/core/agents/agent-schema.js +3 -2
- package/dist/core/agents/fast-mode-policy.js +3 -5
- package/dist/core/agents/native-cli-session-swarm.js +1 -1
- package/dist/core/agents/native-worker-backend-router.js +2 -1
- package/dist/core/agents/work-partition/repo-inventory.js +68 -7
- package/dist/core/agents/zellij-right-lane-cockpit.js +2 -2
- package/dist/core/code-structure.js +5 -4
- package/dist/core/codex/agent-config-file-repair.js +94 -193
- package/dist/core/codex/codex-cli-update.js +723 -0
- package/dist/core/codex/codex-config-guard.js +38 -11
- package/dist/core/codex/codex-project-config-policy.js +3 -6
- package/dist/core/codex/codex-startup-config-postcheck.js +52 -42
- package/dist/core/codex-adapter.js +35 -22
- package/dist/core/codex-app/codex-agent-role-sync.js +13 -54
- package/dist/core/codex-app/codex-app-fast-ui-repair.js +51 -20
- package/dist/core/codex-app/codex-app-launcher.js +48 -17
- package/dist/core/codex-app/codex-app-restart.js +23 -2
- package/dist/core/codex-app/codex-app-ui-state-snapshot.js +11 -3
- package/dist/core/codex-app/sks-menubar.js +136 -5
- package/dist/core/codex-app.js +35 -14
- package/dist/core/codex-compat/codex-hook-warning-detector.js +10 -1
- package/dist/core/codex-compat/codex-release-manifest.js +6 -6
- package/dist/core/codex-control/codex-0139-doctor-real-probe.js +7 -1
- package/dist/core/codex-control/codex-0139-image-path-real-probe.js +29 -12
- package/dist/core/codex-control/codex-0139-probe-runner.js +103 -28
- package/dist/core/codex-control/codex-0139-real-probe-summary.js +7 -3
- package/dist/core/codex-control/codex-0139-real-probes.js +21 -6
- package/dist/core/codex-control/codex-0139-sandbox-real-probe.js +39 -13
- package/dist/core/codex-control/codex-0139-web-search-probe.js +28 -14
- package/dist/core/codex-control/{codex-0142-capability.js → codex-0144-capability.js} +22 -22
- package/dist/core/codex-control/codex-0144-collab-agent-real-probe.js +63 -0
- package/dist/core/codex-control/codex-lb-launch-recovery.js +278 -0
- package/dist/core/codex-control/codex-multi-agent-event-normalizer.js +5 -1
- package/dist/core/codex-control/codex-reliability-shield.js +93 -30
- package/dist/core/codex-control/codex-sdk-adapter.js +96 -13
- package/dist/core/codex-control/codex-sdk-config-policy.js +2 -1
- package/dist/core/codex-control/codex-sdk-sandbox-policy.js +6 -3
- package/dist/core/codex-control/codex-task-runner.js +62 -9
- package/dist/core/codex-control/python-codex-sdk-adapter.js +30 -3
- package/dist/core/codex-exec-output-schema.js +35 -6
- package/dist/core/codex-lb/codex-lb-env.js +30 -1
- package/dist/core/codex-lb/codex-lb-tool-catalog.js +478 -0
- package/dist/core/codex-lb/codex-lb-tool-output-recovery.js +291 -0
- package/dist/core/codex-native/codex-native-feature-broker.js +31 -38
- package/dist/core/codex-native/codex-native-feature-matrix.js +2 -2
- package/dist/core/codex-native/codex-native-repair-transaction.js +1 -1
- package/dist/core/codex-native/core-skill-manifest.js +8 -4
- package/dist/core/codex-native/native-capability-postcheck.js +16 -8
- package/dist/core/codex-native/native-capability-repair-matrix.js +76 -27
- package/dist/core/codex-plugins/codex-plugin-json.js +67 -21
- package/dist/core/codex-plugins/codex-plugin-repair.js +118 -0
- package/dist/core/codex-runtime/codex-desktop-config-policy.js +305 -0
- package/dist/core/commands/agent-bridge-command.js +23 -2
- package/dist/core/commands/agent-command.js +38 -5
- package/dist/core/commands/basic-cli.js +77 -30
- package/dist/core/commands/command-utils.js +1 -1
- package/dist/core/commands/gc-command.js +27 -4
- package/dist/core/commands/image-ux-review-command.js +55 -24
- package/dist/core/commands/mad-sks-command.js +182 -137
- package/dist/core/commands/naruto-command.js +643 -1153
- package/dist/core/commands/pipeline-command.js +1 -0
- package/dist/core/commands/research-command.js +293 -231
- package/dist/core/commands/run-command.js +100 -23
- package/dist/core/commands/team-command.js +2 -3
- package/dist/core/commands/team-legacy-observe-command.js +94 -359
- package/dist/core/commands/wiki-command.js +179 -83
- package/dist/core/computer-use-live-evidence.js +166 -3
- package/dist/core/computer-use-status.js +5 -2
- package/dist/core/daemon/sksd-hook-daemon-entrypoint.js +2 -2
- package/dist/core/daemon/sksd-hook-daemon.js +171 -28
- package/dist/core/daemon/sksd-hook-dispatch.js +2 -2
- package/dist/core/db-safety.js +2 -2
- package/dist/core/decision-lattice.js +6 -6
- package/dist/core/dfix/verification-selector.js +6 -4
- package/dist/core/doctor/browser-use-repair.js +54 -13
- package/dist/core/doctor/codex-0139-doctor.js +3 -2
- package/dist/core/doctor/codex-startup-config-repair.js +8 -3
- package/dist/core/doctor/computer-use-repair.js +28 -39
- package/dist/core/doctor/doctor-codex-startup-repair.js +24 -149
- package/dist/core/doctor/doctor-context7-repair.js +1 -1
- package/dist/core/doctor/doctor-dirty-planner.js +1 -1
- package/dist/core/doctor/doctor-native-capability-repair.js +74 -3
- package/dist/core/doctor/imagegen-repair.js +47 -12
- package/dist/core/doctor/legacy-global-hook-cleanup.js +179 -0
- package/dist/core/feature-fixture-executor.js +71 -7
- package/dist/core/feature-fixture-runner.js +53 -12
- package/dist/core/feature-fixtures.js +47 -14
- package/dist/core/feature-registry.js +53 -58
- package/dist/core/fsx.js +54 -6
- package/dist/core/harness-conflicts.js +19 -10
- package/dist/core/hooks-runtime/code-pack-freshness-preflight.js +5 -4
- package/dist/core/hooks-runtime/hook-invocation-dedupe.js +147 -0
- package/dist/core/hooks-runtime/hook-io.js +14 -4
- package/dist/core/hooks-runtime/light-turn.js +70 -0
- package/dist/core/hooks-runtime/payload-signals.js +270 -0
- package/dist/core/hooks-runtime/team-digest.js +0 -1
- package/dist/core/hooks-runtime/tool-output-quarantine.js +93 -0
- package/dist/core/hooks-runtime.js +418 -250
- package/dist/core/image/image-artifact-path-contract.js +8 -6
- package/dist/core/image/image-artifact-registry.js +5 -1
- package/dist/core/image-ux-review/imagegen-adapter.js +5 -2
- package/dist/core/imagegen/imagegen-capability.js +10 -13
- package/dist/core/imagegen/require-imagegen.js +37 -11
- package/dist/core/init/skills.js +16 -30
- package/dist/core/init.js +144 -36
- package/dist/core/managed-assets/managed-assets-manifest.js +417 -14
- package/dist/core/mission.js +24 -1
- package/dist/core/naruto/naruto-work-graph.js +70 -4
- package/dist/core/ops/reporting.js +3 -0
- package/dist/core/pipeline-internals/runtime-core.js +578 -180
- package/dist/core/pipeline-internals/runtime-gates.js +191 -49
- package/dist/core/ppt/style-tokens.js +1 -1
- package/dist/core/ppt-review/index.js +1 -1
- package/dist/core/ppt-review/slide-exporter.js +23 -17
- package/dist/core/ppt-review/slide-imagegen-review.js +1 -1
- package/dist/core/ppt-review/slide-issue-extraction.js +4 -2
- package/dist/core/preflight/parallel-preflight-engine.js +50 -1
- package/dist/core/product-design-plugin.js +2 -2
- package/dist/core/proof/route-finalizer.js +1 -1
- package/dist/core/proof/route-proof-gate.js +7 -2
- package/dist/core/proof-field.js +3 -3
- package/dist/core/provider/model-router.js +38 -32
- package/dist/core/recallpulse/policy.js +12 -28
- package/dist/core/recallpulse.js +11 -6
- package/dist/core/release/gate-manifest.js +18 -12
- package/dist/core/release/gate-pack-manifest.js +1 -1
- package/dist/core/release/npm-pack-proof.js +247 -0
- package/dist/core/release/package-dist-snapshot.js +151 -0
- package/dist/core/release/package-size-budget.js +5 -0
- package/dist/core/release/release-authorization-snapshot.js +115 -0
- package/dist/core/release/release-gate-affected-selector.js +15 -3
- package/dist/core/release/release-gate-cache-v2.js +30 -0
- package/dist/core/release/release-gate-contract.js +161 -0
- package/dist/core/release/release-gate-dag.js +44 -3
- package/dist/core/release/release-gate-hermetic-env.js +28 -17
- package/dist/core/release/release-real-contract.js +496 -0
- package/dist/core/release-parallel-full-coverage.js +31 -143
- package/dist/core/research/claim-evidence-matrix.js +41 -6
- package/dist/core/research/experiment-plan.js +14 -10
- package/dist/core/research/falsification.js +9 -2
- package/dist/core/research/implementation-blueprint-densifier.js +82 -60
- package/dist/core/research/implementation-blueprint.js +32 -26
- package/dist/core/research/mock-result.js +122 -11
- package/dist/core/research/replication-pack.js +15 -8
- package/dist/core/research/research-adversarial-review.js +1068 -0
- package/dist/core/research/research-claim-builder.js +69 -17
- package/dist/core/research/research-claim-synthesizer.js +343 -0
- package/dist/core/research/research-cycle-runner.js +53 -3
- package/dist/core/research/research-falsification-runner.js +176 -0
- package/dist/core/research/research-final-reviewer.js +44 -125
- package/dist/core/research/research-realistic-report.js +14 -6
- package/dist/core/research/research-review-artifact-digest.js +66 -0
- package/dist/core/research/research-source-evidence.js +144 -0
- package/dist/core/research/research-source-layer-catalog.js +68 -0
- package/dist/core/research/research-source-ledger-merge.js +250 -12
- package/dist/core/research/research-source-shards.js +26 -70
- package/dist/core/research/research-stage-runner.js +237 -247
- package/dist/core/research/research-super-search.js +184 -0
- package/dist/core/research/research-synthesis-prompt.js +20 -1
- package/dist/core/research/research-synthesis-writer.js +86 -5
- package/dist/core/research/research-work-graph.js +25 -18
- package/dist/core/research/source-quality-report.js +21 -0
- package/dist/core/research.js +429 -280
- package/dist/core/retention/retention-budget.js +25 -6
- package/dist/core/retention.js +980 -101
- package/dist/core/routes/constants.js +1 -1
- package/dist/core/routes/dollar-manifest-lite.js +11 -11
- package/dist/core/routes/evidence.js +4 -4
- package/dist/core/routes/ppt-policy.js +1 -1
- package/dist/core/routes.js +92 -64
- package/dist/core/runtime/task-profile.js +66 -0
- package/dist/core/runtime/verification-budget.js +12 -0
- package/dist/core/secret-redaction.js +4 -0
- package/dist/core/security/high-risk-contracts.js +6 -6
- package/dist/core/stop-gate/stop-gate-check.js +49 -12
- package/dist/core/subagents/agent-catalog.js +215 -0
- package/dist/core/subagents/model-policy.js +118 -0
- package/dist/core/subagents/naruto-help-contract.js +40 -0
- package/dist/core/subagents/official-subagent-config.js +488 -0
- package/dist/core/subagents/official-subagent-preparation.js +251 -0
- package/dist/core/subagents/official-subagent-prompt.js +137 -0
- package/dist/core/subagents/official-subagent-runner.js +129 -0
- package/dist/core/subagents/subagent-evidence.js +663 -0
- package/dist/core/subagents/terminology.js +16 -0
- package/dist/core/subagents/thread-budget.js +21 -0
- package/dist/core/subagents/triwiki-attention.js +65 -0
- package/dist/core/super-search/runtime-helpers.js +173 -19
- package/dist/core/super-search/runtime.js +140 -15
- package/dist/core/super-search/source-records.js +49 -8
- package/dist/core/team-review-policy.js +15 -0
- package/dist/core/triwiki/code-pack.js +8 -2
- package/dist/core/triwiki/triwiki-cache-key.js +108 -29
- package/dist/core/triwiki/triwiki-module-card.js +1 -1
- package/dist/core/triwiki-attention.js +13 -6
- package/dist/core/triwiki-provenance.js +274 -0
- package/dist/core/triwiki-runtime.js +21 -7
- package/dist/core/triwiki-wrongness/wrongness-ledger.js +187 -61
- package/dist/core/triwiki-wrongness/wrongness-retrieval.js +11 -2
- package/dist/core/triwiki-wrongness/wrongness-trust-policy.js +2 -0
- package/dist/core/update-check.js +23 -15
- package/dist/core/version-manager.js +51 -1
- package/dist/core/version.js +1 -1
- package/dist/core/wiki-coordinate.js +128 -12
- package/dist/core/work-order-ledger.js +208 -10
- package/dist/core/zellij/zellij-command.js +12 -1
- package/dist/core/zellij/zellij-dashboard-pane.js +3 -3
- package/dist/core/zellij/zellij-fake-adapter.js +3 -1
- package/dist/core/zellij/zellij-launcher.js +51 -21
- package/dist/core/zellij/zellij-layout-builder.js +14 -5
- package/dist/core/zellij/zellij-official-subagent-activity.js +477 -0
- package/dist/core/zellij/zellij-official-subagent-telemetry.js +264 -0
- package/dist/core/zellij/zellij-pane-proof.js +32 -6
- package/dist/core/zellij/zellij-slot-pane-renderer.js +17 -5
- package/dist/core/zellij/zellij-slot-telemetry.js +15 -3
- package/dist/core/zellij/zellij-ui-mode.js +1 -1
- package/dist/core/zellij/zellij-viewport-binder.js +3 -0
- package/dist/core/zellij/zellij-worker-pane-manager.js +5 -3
- package/dist/scripts/agent-fast-mode-default-check.js +48 -29
- package/dist/scripts/agent-role-config-repair-check.js +34 -15
- package/dist/scripts/agent-wiki-context-proof-check.js +16 -2
- package/dist/scripts/all-feature-deep-completion-check.js +14 -4
- package/dist/scripts/architecture-guard-check.js +8 -1
- package/dist/scripts/build-dist.js +17 -5
- package/dist/scripts/canonical-test-runner.js +188 -0
- package/dist/scripts/check-command-module-budget.js +38 -16
- package/dist/scripts/check-legacy-free.js +1 -1
- package/dist/scripts/check-route-modularity.js +0 -1
- package/dist/scripts/check-ts-contracts.js +1 -1
- package/dist/scripts/codex-0139-interrupt-agent-check.js +5 -1
- package/dist/scripts/{codex-0142-app-server-v2-check.js → codex-0144-app-server-v2-check.js} +11 -10
- package/dist/scripts/{codex-0142-binary-identity-check.js → codex-0144-binary-identity-check.js} +4 -4
- package/dist/scripts/codex-0144-capability-check.js +21 -0
- package/dist/scripts/{codex-0139-real-probes-check.js → codex-0144-core-real-probes-check.js} +19 -5
- package/dist/scripts/{codex-0142-doctor-wiring-check.js → codex-0144-doctor-wiring-check.js} +6 -6
- package/dist/scripts/{codex-0142-manifest-check.js → codex-0144-manifest-check.js} +11 -3
- package/dist/scripts/{codex-0142-policy-check.js → codex-0144-policy-check.js} +2 -2
- package/dist/scripts/{codex-0142-thread-store-check.js → codex-0144-thread-store-check.js} +3 -3
- package/dist/scripts/codex-app-provider-model-ui-check.js +53 -19
- package/dist/scripts/codex-app-ui-preservation-check.js +35 -4
- package/dist/scripts/codex-control-all-pipelines-check.js +7 -3
- package/dist/scripts/codex-control-side-effect-scope-check.js +2 -2
- package/dist/scripts/codex-control-tool-output-continuity-audit-check.js +27 -0
- package/dist/scripts/codex-effort-auto-discovery-check.js +1 -1
- package/dist/scripts/codex-lb-fast-mode-truth-check.js +1 -0
- package/dist/scripts/{codex-lb-gpt55-fast-profile-check.js → codex-lb-gpt56-fast-profile-check.js} +56 -5
- package/dist/scripts/codex-model-metadata-check.js +1 -1
- package/dist/scripts/codex-native-agent-role-content-check.js +15 -7
- package/dist/scripts/codex-native-repair-transaction-check.js +3 -1
- package/dist/scripts/codex-sdk-all-pipelines-check.js +7 -4
- package/dist/scripts/codex-sdk-research-pipeline-check.js +30 -8
- package/dist/scripts/codex-sdk-sandbox-policy-check.js +5 -1
- package/dist/scripts/codex-sdk-version-compat-check.js +2 -1
- package/dist/scripts/db-route-materialization-check.js +33 -0
- package/dist/scripts/dfix-fixture-check.js +1 -1
- package/dist/scripts/docs-truthfulness-check.js +4 -2
- package/dist/scripts/doctor-codex-startup-repair-check.js +47 -25
- package/dist/scripts/doctor-context7-repair-check.js +2 -1
- package/dist/scripts/doctor-fix-production-blackbox.js +12 -2
- package/dist/scripts/doctor-fixes-codex-app-fast-ui-check.js +34 -7
- package/dist/scripts/doctor-imagegen-repair-check.js +14 -4
- package/dist/scripts/doctor-startup-config-repair-blackbox.js +9 -3
- package/dist/scripts/doctor-startup-config-repair-check.js +13 -3
- package/dist/scripts/install-update-preserves-config-check.js +7 -2
- package/dist/scripts/legacy-gate-inventory-check.js +7 -5
- package/dist/scripts/legacy-strong-inventory-check.js +7 -5
- package/dist/scripts/legacy-upgrade-matrix-check.js +4 -4
- package/dist/scripts/lib/native-cli-session-swarm-check-lib.js +173 -13
- package/dist/scripts/mad-sks-app-ui-no-mutation-check.js +165 -6
- package/dist/scripts/managed-role-manifest-parity-check.js +5 -4
- package/dist/scripts/mutation-callsite-coverage-check.js +0 -11
- package/dist/scripts/naruto-codex-e2e-check.js +14 -7
- package/dist/scripts/naruto-shadow-clone-swarm-check.js +4 -201
- package/dist/scripts/npm-publish-performance-check.js +20 -12
- package/dist/scripts/official-subagent-workflow-check.js +145 -0
- package/dist/scripts/package-published-contract-check.js +6 -20
- package/dist/scripts/packlist-performance-check.js +17 -3
- package/dist/scripts/parallel-verification-engine-check.js +2 -2
- package/dist/scripts/postinstall-safe-side-effects-check.js +8 -3
- package/dist/scripts/ppt-no-mock-as-real-check.js +3 -1
- package/dist/scripts/prepublish-release-check-or-fast.js +23 -86
- package/dist/scripts/product-design-plugin-routing-check.js +1 -1
- package/dist/scripts/release-affected-selector-check.js +74 -1
- package/dist/scripts/release-check-stamp.js +324 -239
- package/dist/scripts/release-dag-full-coverage-check.js +7 -15
- package/dist/scripts/release-dynamic-presets-check.js +10 -1
- package/dist/scripts/release-gate-dag-runner-check.js +3 -3
- package/dist/scripts/release-gate-dag-runner.js +35 -11
- package/dist/scripts/release-gate-existence-audit.js +1 -2
- package/dist/scripts/release-gate-script-parity-check.js +1 -1
- package/dist/scripts/release-parallel-full-coverage-check.js +12 -6
- package/dist/scripts/release-parallel-speed-budget-check.js +18 -2
- package/dist/scripts/release-real-check.js +390 -157
- package/dist/scripts/release-registry-check.js +61 -16
- package/dist/scripts/release-runtime-truth-matrix-check.js +22 -0
- package/dist/scripts/research-blueprint-densifier-check.js +2 -2
- package/dist/scripts/research-real-cycle-no-legacy-final-md-check.js +11 -7
- package/dist/scripts/route-proof-artifact-structure-check.js +1 -0
- package/dist/scripts/search-visibility-gate-lib.js +1 -1
- package/dist/scripts/seo-geo-route-identity-check.js +30 -4
- package/dist/scripts/sizecheck.js +4 -4
- package/dist/scripts/sks-1-11-gate-lib.js +53 -6
- package/dist/scripts/sks-3-1-4-directive-check-lib.js +8 -2
- package/dist/scripts/sks-3-1-5-directive-check-lib.js +3 -2
- package/dist/scripts/sks-3-1-6-directive-check-lib.js +5 -3
- package/dist/scripts/sks-menubar-install-check.js +8 -0
- package/dist/scripts/sks-uninstall-regression-check.js +1 -1
- package/dist/scripts/sksd-daemon-check.js +16 -6
- package/dist/scripts/trust-fixture-check.js +32 -10
- package/dist/scripts/write-build-manifest.js +2 -1
- package/dist/scripts/wrongness-fixture-check.js +1 -1
- package/dist/scripts/zellij-layout-valid-check.js +36 -11
- package/dist/scripts/zellij-pane-proof-check.js +33 -2
- package/dist/scripts/zellij-real-session-cleanup-check.js +122 -2
- package/dist/scripts/zellij-real-session-launch-check.js +76 -5
- package/dist/scripts/zellij-slot-pane-renderer-check.js +4 -4
- package/dist/scripts/zellij-spawn-on-demand-layout-check.js +3 -3
- package/docs/demo.tape +1 -1
- package/infra-harness-gates.json +1486 -0
- package/package.json +32 -19
- package/release-gates.v2.json +4060 -0
- package/runtime-required-scripts.json +9 -0
- package/schemas/codex/{app-server-0.142 → app-server-0.144}/codex_app_server_protocol.v2.schemas.json +1146 -781
- package/schemas/codex/codex-0139-real-probe-result.schema.json +39 -5
- package/schemas/codex/ppt-slide-issue-ledger.schema.json +2 -1
- package/dist/commands/db.js +0 -6
- package/dist/core/codex-control/codex-0139-multi-agent-real-probe.js +0 -107
- package/dist/core/commands/db-command.js +0 -146
- package/dist/core/research/prompt.js +0 -15
- package/dist/scripts/agent-native-release-gate.js +0 -274
- package/dist/scripts/codex-0142-capability-check.js +0 -21
- package/dist/scripts/codex-control-tool-call-sequence-repair-check.js +0 -14
- package/dist/scripts/command-performance-scorecard-check.js +0 -204
- package/dist/scripts/config-managed-merge-callsite-coverage-check.js +0 -212
- package/dist/scripts/dollar-performance-scorecard-check.js +0 -257
- package/dist/scripts/gate-timing-check.js +0 -16
- package/dist/scripts/ops-maturity-scorecard-check.js +0 -12
- package/dist/scripts/performance-baseline-check.js +0 -12
- package/dist/scripts/performance-improvement-report-check.js +0 -58
- package/dist/scripts/release-parallel-check.js +0 -389
- package/dist/scripts/release-runner-efficiency-check.js +0 -15
- package/dist/scripts/retention-long-run-smoke-check.js +0 -299
- package/docs/assets/sneakoscope-architecture-pipeline.jpg +0 -0
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import {
|
|
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
|
|
9
|
-
const
|
|
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 === '
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
|
|
195
|
-
|
|
196
|
-
|
|
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
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
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
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
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
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
'',
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
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
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
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
|
-
|
|
383
|
-
|
|
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
|
|
387
|
-
|
|
388
|
-
|
|
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
|