sneakoscope 7.0.0 → 7.0.3
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 +7 -5
- package/crates/sks-core/Cargo.lock +1 -1
- package/crates/sks-core/Cargo.toml +1 -1
- package/dist/bin/sks-dispatch.js +0 -3
- package/dist/cli/command-registry.js +0 -2
- package/dist/cli/install-helpers-codex-lb-chain.js +24 -2
- package/dist/cli/install-helpers-codex-lb-config.js +0 -7
- package/dist/cli/install-helpers-codex-lb-selftest-chain.js +0 -3
- package/dist/cli/install-helpers-codex-lb-selftest.js +0 -17
- package/dist/cli/install-helpers.js +81 -96
- package/dist/cli/router.js +0 -22
- package/dist/commands/codex-lb.js +176 -22
- package/dist/commands/codex.js +3 -8
- package/dist/commands/doctor.js +4 -14
- package/dist/commands/perf.js +5 -1
- package/dist/commands/zellij-slot-column-anchor.js +0 -2
- package/dist/commands/zellij-slot-pane.js +0 -7
- package/dist/commands/zellij.js +0 -2
- package/dist/config/skills-manifest.json +52 -52
- package/dist/core/agent-bridge/agent-manifest.js +192 -1
- package/dist/core/agent-bridge/agent-mode.js +0 -5
- package/dist/core/agent-bridge/host-capability-policy.js +189 -0
- package/dist/core/agent-bridge/host-capability-runtime.js +1395 -0
- package/dist/core/agent-bridge/mcp-server.js +1 -11
- package/dist/core/agents/agent-effort-policy.js +0 -3
- package/dist/core/agents/agent-orchestrator.js +0 -4
- package/dist/core/agents/agent-proof-evidence.js +0 -2
- package/dist/core/agents/agent-runner-ollama.js +0 -3
- package/dist/core/agents/agent-scheduler.js +0 -5
- package/dist/core/agents/native-cli-worker-runtime.js +5 -17
- package/dist/core/agents/work-partition/repo-inventory.js +0 -2
- package/dist/core/auto-review.js +0 -13
- package/dist/core/bench.js +0 -14
- package/dist/core/code-structure.js +0 -3
- package/dist/core/codex/agent-config-file-repair.js +0 -8
- package/dist/core/codex/codex-cli-update.js +122 -20
- package/dist/core/codex/codex-config-eperm-repair.js +0 -4
- package/dist/core/codex/codex-config-guard.js +0 -3
- package/dist/core/codex/codex-config-readability.js +0 -13
- package/dist/core/codex/codex-project-config-policy.js +0 -33
- package/dist/core/codex/official-goal-mode.js +0 -2
- package/dist/core/codex-app/codex-app-fast-ui-repair.js +5 -7
- package/dist/core/codex-app/codex-app-ui-state-snapshot.js +44 -7
- package/dist/core/codex-app/sks-menubar.js +0 -1
- package/dist/core/codex-app.js +0 -9
- package/dist/core/codex-compat/codex-hook-output-builders.js +9 -1
- package/dist/core/codex-compat/codex-hook-output-normalizer.js +1 -1
- package/dist/core/codex-compat/codex-hook-semantic-validator.js +3 -2
- package/dist/core/codex-compat/codex-hook-warning-detector.js +10 -2
- package/dist/core/codex-control/codex-lb-launch-recovery.js +0 -3
- package/dist/core/codex-control/codex-reliability-shield.js +0 -8
- package/dist/core/codex-control/codex-sdk-adapter.js +0 -3
- package/dist/core/codex-control/codex-sdk-config-policy.js +0 -2
- package/dist/core/codex-control/codex-sdk-env-policy.js +61 -16
- package/dist/core/codex-control/codex-task-runner.js +0 -7
- package/dist/core/codex-control/codex-thread-registry.js +0 -4
- package/dist/core/codex-lb/codex-lb-env.js +118 -20
- package/dist/core/codex-lb/codex-lb-tool-catalog.js +0 -4
- package/dist/core/codex-lb/codex-lb-tool-output-recovery.js +1 -1
- package/dist/core/codex-model-guard.js +0 -14
- package/dist/core/codex-native/codex-native-feature-broker.js +67 -22
- package/dist/core/codex-native/codex-native-interop-policy.js +81 -9
- package/dist/core/codex-native/confined-report-writer.js +21 -0
- package/dist/core/codex-native/core-skill-integrity.js +169 -20
- package/dist/core/codex-native/project-skill-dedupe.js +55 -13
- package/dist/core/codex-native/skill-registry-ledger.js +137 -16
- package/dist/core/codex-native/sks-skill-paths.js +185 -0
- package/dist/core/codex-runtime/codex-desktop-config-policy.js +0 -2
- package/dist/core/commands/agent-bridge-command.js +28 -8
- package/dist/core/commands/basic-cli.js +67 -26
- package/dist/core/commands/bench-command.js +5 -1
- package/dist/core/commands/command-utils.js +0 -5
- package/dist/core/commands/image-ux-review-command.js +0 -9
- package/dist/core/commands/mad-sks-command.js +0 -38
- package/dist/core/commands/naruto-command.js +69 -17
- package/dist/core/commands/ppt-command.js +0 -9
- package/dist/core/commands/run-command.js +8 -2
- package/dist/core/commands/seo-command.js +0 -6
- package/dist/core/commands/wiki-command.js +0 -14
- package/dist/core/computer-use-live-evidence.js +0 -5
- package/dist/core/config/secret-preservation.js +0 -11
- package/dist/core/daemon/sksd-hook-daemon-entrypoint.js +0 -2
- package/dist/core/daemon/sksd-hook-daemon.js +1 -29
- package/dist/core/daemon/sksd-hook-dispatch.js +0 -17
- package/dist/core/db-safety.js +0 -7
- package/dist/core/doctor/browser-use-repair.js +0 -2
- package/dist/core/doctor/doctor-codex-startup-repair.js +0 -3
- package/dist/core/doctor/doctor-readiness-matrix.js +12 -0
- package/dist/core/doctor/doctor-skill-reconcile.js +32 -0
- package/dist/core/doctor/imagegen-repair.js +0 -2
- package/dist/core/doctor/mcp-transport-collision-repair.js +0 -3
- package/dist/core/doctor/retired-managed-residue-private.js +0 -1
- package/dist/core/doctor/supabase-mcp-repair.js +0 -11
- package/dist/core/feature-fixture-executor.js +0 -48
- package/dist/core/feature-fixtures.js +0 -5
- package/dist/core/fsx.js +11 -12
- package/dist/core/hooks-runtime/code-pack-freshness-preflight.js +0 -5
- package/dist/core/hooks-runtime/hook-context.js +202 -0
- package/dist/core/hooks-runtime/hook-io.js +1 -12
- package/dist/core/hooks-runtime/light-turn.js +0 -2
- package/dist/core/hooks-runtime/naruto-decision-gate.js +4 -1
- package/dist/core/hooks-runtime/naruto-terminal-finalization.js +91 -0
- package/dist/core/hooks-runtime/official-subagent-lifecycle.js +370 -0
- package/dist/core/hooks-runtime/standalone-parent-host-capability.js +98 -0
- package/dist/core/hooks-runtime/subagent-context.js +59 -0
- package/dist/core/hooks-runtime/subagent-skill-availability-contract.js +29 -0
- package/dist/core/hooks-runtime/subagent-skill-availability-evidence.js +195 -0
- package/dist/core/hooks-runtime/subagent-skill-availability-guards.js +316 -0
- package/dist/core/hooks-runtime/subagent-skill-availability.js +217 -0
- package/dist/core/hooks-runtime.js +259 -535
- package/dist/core/image-ux-review/codex-app-generated-image-discovery.js +0 -17
- package/dist/core/image-ux-review/imagegen-adapter.js +0 -14
- package/dist/core/imagegen/imagegen-auth-readiness.js +0 -9
- package/dist/core/imagegen/imagegen-capability.js +0 -3
- package/dist/core/init/managed-skill-install.js +42 -0
- package/dist/core/init/skills.js +247 -74
- package/dist/core/init.js +15 -40
- package/dist/core/lean-engineering-policy.js +0 -2
- package/dist/core/locks/file-lock.js +0 -21
- package/dist/core/loops/loop-planner.js +0 -6
- package/dist/core/loops/loop-runtime.js +0 -1
- package/dist/core/loops/loop-worker-runtime.js +0 -19
- package/dist/core/mad-sks/executors/db-write-executor.js +0 -4
- package/dist/core/mad-sks/executors/executor-base.js +0 -10
- package/dist/core/mad-sks/immutable-harness-guard.js +0 -5
- package/dist/core/mad-sks/sql-plane/coordinator.js +0 -5
- package/dist/core/mad-sks/sql-plane/ledger.js +0 -4
- package/dist/core/mad-sks/sql-plane/lock.js +0 -4
- package/dist/core/mad-sks/sql-plane/mcp-executor.js +0 -9
- package/dist/core/mad-sks/sql-plane/policy-resolver.js +0 -2
- package/dist/core/mad-sks/sql-plane/postconditions.js +0 -4
- package/dist/core/mad-sks/sql-plane/recovery.js +0 -2
- package/dist/core/mad-sks/sql-plane/runtime-profile.js +0 -8
- package/dist/core/managed-assets/managed-assets-manifest.js +1 -7
- package/dist/core/mcp-config/health-check.js +10 -3
- package/dist/core/migration/migration-transaction-journal.js +0 -8
- package/dist/core/mission.js +74 -6
- package/dist/core/naruto/naruto-active-pool.js +0 -2
- package/dist/core/naruto/naruto-concurrency-governor.js +0 -1
- package/dist/core/naruto/naruto-real-write-proof.js +0 -4
- package/dist/core/naruto/naruto-write-e2e.js +0 -1
- package/dist/core/perf/perf-budget.js +0 -5
- package/dist/core/permission-gates.js +0 -2
- package/dist/core/pipeline-internals/runtime-core.js +15 -5
- package/dist/core/pipeline-internals/runtime-gates.js +0 -12
- package/dist/core/preflight/parallel-preflight-engine.js +0 -11
- package/dist/core/proof/evidence-collector.js +0 -2
- package/dist/core/proof/route-finalizer.js +0 -1
- package/dist/core/proof/selftest-proof-fixtures.js +0 -5
- package/dist/core/providers/glm/bench/glm-benchmark-runner.js +0 -2
- package/dist/core/providers/glm/glm-request-cache.js +0 -3
- package/dist/core/providers/glm/naruto/glm-naruto-command.js +0 -1
- package/dist/core/providers/glm/naruto/glm-naruto-decomposer.js +0 -1
- package/dist/core/providers/glm/naruto/glm-naruto-orchestrator.js +0 -6
- package/dist/core/providers/glm/naruto/glm-naruto-trace.js +0 -1
- package/dist/core/providers/glm/naruto/glm-naruto-worker-pool.js +0 -1
- package/dist/core/providers/glm/naruto/glm-naruto-worktree.js +0 -1
- package/dist/core/providers/openrouter/openrouter-secret-store.js +0 -1
- package/dist/core/providers/openrouter/openrouter-stream.js +0 -2
- package/dist/core/questions.js +3 -3
- package/dist/core/release/gate-manifest.js +0 -5
- package/dist/core/release/package-size-budget.js +1 -1
- package/dist/core/release/release-gate-batch-runner.js +11 -2
- package/dist/core/release/release-gate-cache-v2.js +0 -4
- package/dist/core/release/release-gate-hermetic-env.js +0 -5
- package/dist/core/release-parallel-full-coverage.js +0 -2
- package/dist/core/remote/ssh-worker-client.js +0 -3
- package/dist/core/research/research-adversarial-review.js +6 -2
- package/dist/core/responses-retry-policy.js +0 -10
- package/dist/core/retention.js +0 -7
- package/dist/core/routes/constants.js +0 -3
- package/dist/core/routes.js +89 -15
- package/dist/core/safety/command-contract/contracts.js +2 -0
- package/dist/core/safety/mutation-guard.js +0 -25
- package/dist/core/safety/mutation-ledger.js +0 -9
- package/dist/core/safety/requested-scope-contract.js +0 -0
- package/dist/core/security/high-risk-contracts.js +0 -1
- package/dist/core/skills/core-skill-card.js +0 -0
- package/dist/core/skills/core-skill-deployment.js +0 -13
- package/dist/core/skills/core-skill-epoch.js +0 -11
- package/dist/core/skills/core-skill-meta-update.js +0 -6
- package/dist/core/skills/core-skill-patch-apply.js +0 -7
- package/dist/core/skills/core-skill-patch.js +0 -8
- package/dist/core/skills/core-skill-reflection.js +0 -16
- package/dist/core/skills/core-skill-runtime.js +0 -6
- package/dist/core/skills/core-skill-scorer.js +0 -7
- package/dist/core/skills/core-skill-trainer.js +0 -11
- package/dist/core/skills/core-skill-types.js +0 -9
- package/dist/core/skills/core-skill-validation.js +0 -5
- package/dist/core/skills/rejected-skill-patch-buffer.js +0 -2
- package/dist/core/stop-gate/stop-gate-check.js +0 -8
- package/dist/core/stop-gate/stop-gate-resolver.js +0 -7
- package/dist/core/stop-gate/stop-gate-writer.js +0 -5
- package/dist/core/subagents/model-policy.js +0 -7
- package/dist/core/subagents/naruto-help-contract.js +1 -1
- package/dist/core/subagents/naruto-proof-projection.js +582 -14
- package/dist/core/subagents/official-subagent-config.js +0 -8
- package/dist/core/subagents/official-subagent-preparation.js +6 -5
- package/dist/core/subagents/official-subagent-prompt.js +29 -0
- package/dist/core/subagents/official-subagent-runner.js +351 -38
- package/dist/core/subagents/subagent-evidence.js +378 -9
- package/dist/core/subagents/thread-budget.js +5 -2
- package/dist/core/subagents/triwiki-attention.js +0 -4
- package/dist/core/subagents/wave-parent-guidance.js +54 -9
- package/dist/core/telegram/runtime.js +0 -1
- package/dist/core/triwiki/code-index-scanner.js +0 -3
- package/dist/core/triwiki/code-pack-head-freshness.js +0 -10
- package/dist/core/triwiki/code-pack.js +0 -2
- package/dist/core/triwiki/triwiki-cache-key.js +0 -1
- package/dist/core/triwiki/triwiki-proof-bank.js +0 -1
- package/dist/core/triwiki-attention.js +0 -10
- package/dist/core/triwiki-provenance.js +0 -5
- package/dist/core/triwiki-runtime.js +0 -12
- package/dist/core/triwiki-wrongness/wrongness-ledger.js +0 -7
- package/dist/core/triwiki-wrongness/wrongness-schema.js +0 -3
- package/dist/core/trust-kernel/trust-report.js +0 -7
- package/dist/core/update/update-migration-state.js +21 -39
- package/dist/core/update-check.js +2 -14
- package/dist/core/version-manager.js +2 -0
- package/dist/core/version.js +1 -1
- package/dist/core/work-order-ledger.js +0 -17
- package/dist/core/zellij/zellij-clipboard-config.js +0 -18
- package/dist/core/zellij/zellij-lane-renderer.js +5 -46
- package/dist/core/zellij/zellij-lane-runtime.js +0 -1
- package/dist/core/zellij/zellij-launcher.js +0 -26
- package/dist/core/zellij/zellij-official-subagent-activity.js +0 -5
- package/dist/core/zellij/zellij-official-subagent-telemetry.js +0 -5
- package/dist/core/zellij/zellij-screen-proof.js +0 -7
- package/dist/core/zellij/zellij-slot-column-anchor.js +0 -1
- package/dist/core/zellij/zellij-slot-pane-renderer.js +0 -9
- package/dist/core/zellij/zellij-slot-telemetry.js +0 -12
- package/dist/core/zellij/zellij-ui-mode.js +0 -7
- package/dist/core/zellij/zellij-update.js +0 -29
- package/dist/core/zellij/zellij-worker-pane-manager.js +0 -39
- package/dist/native/sks-menubar/Sources/AlertFactory.swift +21 -2
- package/dist/native/sks-menubar/Sources/AppDelegate.swift +3 -0
- package/dist/native/sks-menubar/Sources/AppIdentity.swift +25 -0
- package/dist/native/sks-menubar/Sources/ProvidersViewController.swift +254 -21
- package/dist/native/sks-menubar/Sources/UpdatesViewController.swift +95 -12
- package/dist/scripts/agent-message-bus-reader-check.js +0 -1
- package/dist/scripts/all-feature-deep-completion-check.js +0 -1
- package/dist/scripts/appshots-thread-attachment-discovery-check.js +0 -1
- package/dist/scripts/architecture-guard-check.js +0 -1
- package/dist/scripts/build-dist.js +0 -1
- package/dist/scripts/build-once-runner-check.js +0 -1
- package/dist/scripts/canonical-test-runner.js +0 -2
- package/dist/scripts/certificate-sla-check.js +0 -1
- package/dist/scripts/changelog-check.js +0 -1
- package/dist/scripts/check-cli-entrypoint.js +0 -1
- package/dist/scripts/check-command-module-budget.js +0 -7
- package/dist/scripts/check-feature-quality.js +0 -1
- package/dist/scripts/check-legacy-free.js +0 -1
- package/dist/scripts/check-pipeline-runtime.js +0 -1
- package/dist/scripts/check-runtime-schemas.js +0 -1
- package/dist/scripts/codex-0-134-runner-truth-check.js +0 -1
- package/dist/scripts/codex-0-137-compat-check.js +0 -1
- package/dist/scripts/codex-0138-capability-artifact-check.js +0 -1
- package/dist/scripts/codex-0138-capability-check.js +0 -1
- package/dist/scripts/codex-0138-doctor-check.js +0 -1
- package/dist/scripts/codex-0138-feature-probes-check.js +0 -1
- package/dist/scripts/codex-0144-core-real-probes-check.js +0 -1
- package/dist/scripts/codex-app-handoff-check.js +0 -1
- package/dist/scripts/codex-app-handoff-launch-check.js +0 -1
- package/dist/scripts/codex-config-load-probe.js +0 -5
- package/dist/scripts/codex-control-all-pipelines-check.js +0 -1
- package/dist/scripts/codex-control-event-stream-ledger-check.js +0 -1
- package/dist/scripts/codex-control-tool-output-continuity-audit-check.js +0 -1
- package/dist/scripts/codex-permission-profiles-check.js +0 -1
- package/dist/scripts/codex-plugin-app-template-policy-check.js +0 -1
- package/dist/scripts/codex-project-config-policy-splitter-check.js +0 -1
- package/dist/scripts/codex-sdk-all-pipelines-check.js +0 -1
- package/dist/scripts/codex-sdk-backend-router-check.js +0 -1
- package/dist/scripts/codex-sdk-capability-check.js +0 -1
- package/dist/scripts/codex-sdk-event-stream-ledger-check.js +0 -1
- package/dist/scripts/codex-sdk-real-smoke-check.js +0 -1
- package/dist/scripts/concurrent-session-collision-check.js +9 -0
- package/dist/scripts/context7-evidence-dedupe-check.js +0 -1
- package/dist/scripts/core-skill-card-schema-check.js +0 -11
- package/dist/scripts/core-skill-deployment-snapshot-check.js +0 -10
- package/dist/scripts/core-skill-heldout-validation-check.js +0 -11
- package/dist/scripts/core-skill-no-inference-optimizer-check.js +0 -11
- package/dist/scripts/core-skill-patch-check.js +0 -11
- package/dist/scripts/core-skill-route-runtime-integration-check.js +0 -11
- package/dist/scripts/current-surface-update-e2e-check.js +0 -4
- package/dist/scripts/current-upgrade-matrix-check.js +0 -1
- package/dist/scripts/dfix-fixture-check.js +0 -1
- package/dist/scripts/dfix-patch-handoff-check.js +0 -1
- package/dist/scripts/dfix-verification-check.js +0 -1
- package/dist/scripts/dfix-verification-recommendation-check.js +0 -1
- package/dist/scripts/docs-truthfulness-check.js +3 -3
- package/dist/scripts/doctor-fastpath-check.js +0 -1
- package/dist/scripts/doctor-fix-proves-codex-read-check.js +0 -11
- package/dist/scripts/doctor-fixes-codex-app-fast-ui-check.js +0 -4
- package/dist/scripts/doctor-idempotence-check.js +0 -1
- package/dist/scripts/doctor-ops-semantics-check.js +0 -1
- package/dist/scripts/ensure-bin-executable.js +0 -1
- package/dist/scripts/evidence-flagship-coverage-check.js +0 -1
- package/dist/scripts/fast-codex-service-tier-proof-check.js +0 -1
- package/dist/scripts/fixtures/fake-codex-config-loader.js +0 -5
- package/dist/scripts/fsx-hotpath-check.js +0 -1
- package/dist/scripts/gate-policy-audit-check.js +1 -1
- package/dist/scripts/geo-claim-evidence-check.js +0 -1
- package/dist/scripts/geo-cli-blackbox-check.js +0 -1
- package/dist/scripts/geo-crawler-policy-check.js +0 -1
- package/dist/scripts/git-worktree-diff-envelope-check.js +0 -1
- package/dist/scripts/git-worktree-dirty-lock-check.js +0 -1
- package/dist/scripts/git-worktree-dirty-main-detection-check.js +0 -1
- package/dist/scripts/git-worktree-integration-primary-check.js +0 -1
- package/dist/scripts/git-worktree-manifest-append-check.js +0 -1
- package/dist/scripts/git-worktree-untracked-diff-check.js +0 -1
- package/dist/scripts/high-risk-contracts-check.js +0 -1
- package/dist/scripts/hook-latency-budget-check.js +0 -1
- package/dist/scripts/hook-latency-quantum-check.js +0 -1
- package/dist/scripts/image-artifact-path-contract-check.js +0 -1
- package/dist/scripts/imagegen-real-smoke-check.js +0 -1
- package/dist/scripts/import-graph-budget-check.js +0 -1
- package/dist/scripts/installed-package-smoke-check.js +0 -1
- package/dist/scripts/legacy-gate-purge-check.js +0 -1
- package/dist/scripts/lib/codex-sdk-gate-lib.js +0 -3
- package/dist/scripts/lib/ensure-dist-fresh.js +0 -1
- package/dist/scripts/lib/valid-png-fixture.js +0 -1
- package/dist/scripts/local-collab-all-pipelines-final-gpt-check.js +0 -1
- package/dist/scripts/loop-directive-check-lib.js +0 -1
- package/dist/scripts/loop-worker-fixture-child.js +0 -1
- package/dist/scripts/mad-preflight-blocks-unreadable-config-check.js +0 -10
- package/dist/scripts/mad-sks-sql-plane-lifecycle-hook-decision-check.js +0 -1
- package/dist/scripts/mad-sks-sql-plane-result-lifecycle-check.js +0 -1
- package/dist/scripts/mcp-plugin-inventory-check.js +0 -1
- package/dist/scripts/mcp-tool-naming-parity-check.js +0 -1
- package/dist/scripts/model-call-concurrency-check.js +0 -1
- package/dist/scripts/mutation-callsite-coverage-check.js +0 -5
- package/dist/scripts/naruto-codex-e2e-check.js +0 -1
- package/dist/scripts/naruto-worktree-coding-blackbox.js +0 -1
- package/dist/scripts/official-subagent-workflow-check.js +3 -1
- package/dist/scripts/ops-diagnostics-bundle-check.js +0 -1
- package/dist/scripts/packlist-performance-check.js +1 -3
- package/dist/scripts/perf-budget-check.js +0 -1
- package/dist/scripts/ppt-full-e2e-blackbox-check.js +0 -1
- package/dist/scripts/ppt-real-export-adapter-check.js +0 -1
- package/dist/scripts/ppt-real-imagegen-smoke-check.js +0 -1
- package/dist/scripts/ppt-real-imagegen-wiring-check.js +0 -1
- package/dist/scripts/ppt-reexport-rereview-check.js +0 -1
- package/dist/scripts/prepublish-fast-check.js +0 -23
- package/dist/scripts/prepublish-release-check-or-fast.js +0 -7
- package/dist/scripts/probe-memoization-check.js +0 -1
- package/dist/scripts/product-design-plugin-routing-check.js +0 -1
- package/dist/scripts/project-skill-dedupe-blackbox.js +36 -9
- package/dist/scripts/prompt-placeholder-guard-check.js +0 -1
- package/dist/scripts/python-codex-sdk-all-pipelines-check.js +0 -3
- package/dist/scripts/qa-loop-app-handoff-capability-check.js +0 -1
- package/dist/scripts/qa-loop-app-handoff-check.js +0 -1
- package/dist/scripts/qa-loop-app-handoff-cli-check.js +0 -1
- package/dist/scripts/qa-loop-app-handoff-confirmation-check.js +0 -1
- package/dist/scripts/qa-loop-app-handoff-gate-lifecycle-check.js +0 -1
- package/dist/scripts/qa-loop-app-handoff-launch-check.js +0 -1
- package/dist/scripts/qa-loop-app-handoff-status-lifecycle-check.js +0 -1
- package/dist/scripts/qa-loop-budget-policy-check.js +0 -1
- package/dist/scripts/qa-loop-effort-escalation-check.js +0 -1
- package/dist/scripts/qa-loop-image-path-exposure-check.js +0 -1
- package/dist/scripts/qa-loop-image-path-prompt-injection-check.js +0 -1
- package/dist/scripts/release-cache-glob-hashing-check.js +0 -1
- package/dist/scripts/release-cache-input-classifier-check.js +0 -1
- package/dist/scripts/release-cache-neutralization-report-check.js +0 -1
- package/dist/scripts/release-cache-version-neutral-fixture-check.js +0 -1
- package/dist/scripts/release-check-stamp.js +0 -4
- package/dist/scripts/release-dist-freshness-check.js +0 -1
- package/dist/scripts/release-full-parallelism-blackbox.js +3 -3
- package/dist/scripts/release-gate-batch-runner-check.js +22 -0
- package/dist/scripts/release-gate-budget-check.js +0 -6
- package/dist/scripts/release-gate-dag-runner-check.js +0 -1
- package/dist/scripts/release-latency-slo-check.js +0 -1
- package/dist/scripts/release-metadata-1-19-check.js +0 -1
- package/dist/scripts/release-metadata-check.js +0 -3
- package/dist/scripts/release-parallel-speed-budget-check.js +0 -5
- package/dist/scripts/release-proof-truth-check.js +0 -1
- package/dist/scripts/release-provenance-check.js +0 -1
- package/dist/scripts/release-real-check.js +0 -1
- package/dist/scripts/release-runtime-truth-matrix-check.js +0 -1
- package/dist/scripts/release-version-truth-check.js +0 -1
- package/dist/scripts/research-blueprint-densifier-check.js +0 -1
- package/dist/scripts/research-claim-builder-check.js +0 -1
- package/dist/scripts/research-complete-package-fixture-check.js +0 -1
- package/dist/scripts/research-final-reviewer-blackbox.js +0 -1
- package/dist/scripts/responses-retry-policy-centralized-check.js +0 -1
- package/dist/scripts/retention-apply-smoke-check.js +0 -1
- package/dist/scripts/retention-budget-check.js +0 -1
- package/dist/scripts/retention-dry-run-check.js +0 -1
- package/dist/scripts/rollback-recovery-smoke-check.js +0 -1
- package/dist/scripts/route-intent-regression-check.js +0 -1
- package/dist/scripts/runtime-current-terminal-check.js +0 -1
- package/dist/scripts/runtime-dist-parity-check.js +0 -1
- package/dist/scripts/runtime-no-src-mjs-check.js +0 -1
- package/dist/scripts/runtime-proof-summary-check.js +0 -1
- package/dist/scripts/runtime-ts-rust-boundary-check.js +0 -15
- package/dist/scripts/runtime-ts-source-of-truth-check.js +0 -1
- package/dist/scripts/scheduler-batch-dispatch-check.js +0 -1
- package/dist/scripts/scheduler-parallel-proof-consistency-check.js +0 -1
- package/dist/scripts/scheduler-utilization-integral-check.js +0 -1
- package/dist/scripts/search-visibility-gate-lib.js +0 -1
- package/dist/scripts/seo-audit-fixture-check.js +0 -1
- package/dist/scripts/seo-cli-blackbox-check.js +0 -1
- package/dist/scripts/seo-geo-geo-disambiguation-check.js +0 -1
- package/dist/scripts/seo-geo-route-identity-check.js +0 -1
- package/dist/scripts/seo-geo-skill-rich-content-check.js +0 -1
- package/dist/scripts/seo-marketing-truthfulness-check.js +0 -1
- package/dist/scripts/seo-metadata-sync-check.js +0 -1
- package/dist/scripts/seo-no-mutation-by-default-check.js +0 -1
- package/dist/scripts/shared-memory-fixture-check.js +0 -1
- package/dist/scripts/side-effect-runtime-report-check.js +0 -1
- package/dist/scripts/sizecheck.js +0 -1
- package/dist/scripts/sks-1-11-gate-lib.js +0 -1
- package/dist/scripts/sks-1-12-real-execution-check-lib.js +0 -1
- package/dist/scripts/sks-1-18-gate-lib.js +0 -1
- package/dist/scripts/sks-menubar-install-check.js +0 -3
- package/dist/scripts/sksd-daemon-check.js +0 -1
- package/dist/scripts/super-search-live-smoke-check.js +0 -1
- package/dist/scripts/super-search-local-http-smoke-check.js +0 -1
- package/dist/scripts/super-search-offline-contract-check.js +0 -1
- package/dist/scripts/super-search-provider-interface-check.js +0 -1
- package/dist/scripts/triwiki-cache-key-check.js +0 -1
- package/dist/scripts/triwiki-proof-bank-blackbox.js +0 -1
- package/dist/scripts/triwiki-proof-bank-check.js +0 -1
- package/dist/scripts/triwiki-proof-card-check.js +0 -1
- package/dist/scripts/trust-fixture-check.js +0 -1
- package/dist/scripts/ultra-router-auto-router-check.js +0 -1
- package/dist/scripts/update-fastpath-check.js +0 -1
- package/dist/scripts/upgrade-migration-matrix-check.js +0 -1
- package/dist/scripts/ux-review-extract-wires-real-extractor-check.js +0 -1
- package/dist/scripts/ux-review-imagegen-blackbox-check.js +0 -1
- package/dist/scripts/ux-review-patch-diff-recheck-check.js +0 -1
- package/dist/scripts/ux-review-real-imagegen-smoke-check.js +0 -1
- package/dist/scripts/ux-review-run-wires-imagegen-check.js +0 -1
- package/dist/scripts/write-build-manifest.js +0 -1
- package/dist/scripts/wrongness-fixture-check.js +0 -1
- package/dist/scripts/zellij-capability-check.js +0 -1
- package/dist/scripts/zellij-developer-controls-check.js +0 -1
- package/dist/scripts/zellij-doctor-readiness-check.js +0 -13
- package/dist/scripts/zellij-dynamic-pane-lifecycle-check.js +0 -1
- package/dist/scripts/zellij-fake-adapter-check.js +0 -1
- package/dist/scripts/zellij-initial-main-only-blackbox.js +0 -1
- package/dist/scripts/zellij-lane-renderer-check.js +0 -1
- package/dist/scripts/zellij-launch-command-truth-check.js +0 -12
- package/dist/scripts/zellij-layout-valid-check.js +0 -1
- package/dist/scripts/zellij-pane-creation-lock-metrics-check.js +0 -1
- package/dist/scripts/zellij-pane-lock-concurrency-blackbox.js +0 -1
- package/dist/scripts/zellij-pane-lock-does-not-block-worker-check.js +0 -1
- package/dist/scripts/zellij-pane-lock-open-worker-integration-blackbox.js +0 -1
- package/dist/scripts/zellij-pane-proof-check.js +0 -1
- package/dist/scripts/zellij-qa-app-handoff-status-check.js +0 -1
- package/dist/scripts/zellij-real-session-cleanup-check.js +0 -1
- package/dist/scripts/zellij-real-session-launch-check.js +0 -1
- package/dist/scripts/zellij-right-column-geometry-proof.js +0 -1
- package/dist/scripts/zellij-right-column-headless-overflow-check.js +0 -1
- package/dist/scripts/zellij-right-column-manager-check.js +0 -1
- package/dist/scripts/zellij-screen-proof-check.js +0 -1
- package/dist/scripts/zellij-slot-only-ui-check.js +0 -1
- package/dist/scripts/zellij-slot-pane-renderer-check.js +0 -1
- package/dist/scripts/zellij-slot-pane-stale-detection-check.js +0 -7
- package/dist/scripts/zellij-slot-telemetry-incremental-check.js +0 -1
- package/dist/scripts/zellij-slot-telemetry-live-flush-check.js +0 -1
- package/dist/scripts/zellij-slot-telemetry-performance-check.js +0 -1
- package/dist/scripts/zellij-stacked-capability-routing-check.js +0 -1
- package/dist/scripts/zellij-stacked-fallback-integration-blackbox.js +0 -1
- package/dist/scripts/zellij-stacked-version-matrix-check.js +0 -1
- package/dist/scripts/zellij-stacked-version-parser-check.js +0 -1
- package/dist/scripts/zellij-ui-design-check.js +0 -12
- package/dist/scripts/zellij-update-prompt-matrix-check.js +0 -1
- package/dist/scripts/zellij-update-prompt-mode-check.js +0 -1
- package/dist/scripts/zellij-update-prompt-safety-check.js +0 -1
- package/dist/scripts/zellij-worker-pane-real-ui-blackbox.js +0 -2
- package/package.json +1 -1
|
@@ -31,11 +31,6 @@ export async function launchZellijLayout(opts = {}) {
|
|
|
31
31
|
const layout = await writeZellijLayout(root, layoutInput);
|
|
32
32
|
const capability = reusableZellijCapability(opts.zellijCapability, opts.requireZellij === true)
|
|
33
33
|
|| await checkZellijCapability({ root, require: opts.requireZellij === true });
|
|
34
|
-
// Configure the clipboard pipeline so selections inside the session reach the OS
|
|
35
|
-
// clipboard (Zellij's default OSC-52 copy is dropped by Terminal.app etc.). The
|
|
36
|
-
// copy option flags are appended AFTER `--default-layout <path>` so the launch
|
|
37
|
-
// command prefix ['zellij','attach','--create-background',session,'options','--default-layout',...]
|
|
38
|
-
// is preserved (required by the zellij launch-command-truth gate + E2E assertions).
|
|
39
34
|
const clipboard = await writeZellijClipboardConfig(root, missionId);
|
|
40
35
|
const createCommand = ['attach', '--create-background', sessionName, 'options', '--default-layout', layout.layout_path, ...clipboard.optionFlags];
|
|
41
36
|
const attachCommand = ['attach', sessionName];
|
|
@@ -53,11 +48,6 @@ export async function launchZellijLayout(opts = {}) {
|
|
|
53
48
|
...(opts.recoveryAllowUnverified === true ? { allowUnverified: true } : {})
|
|
54
49
|
})
|
|
55
50
|
: codexLbToolOutputRecoveryNotChecked(false);
|
|
56
|
-
// Reset a stale same-named session before recreating it so the launch starts
|
|
57
|
-
// main-only. `attach --create-background` is idempotent and otherwise reuses an
|
|
58
|
-
// existing session, causing each run to pile another right-split SLOTS column
|
|
59
|
-
// onto leftover panes from prior missions. Skipped on dry-run, when zellij is
|
|
60
|
-
// unavailable, or when the user opts out with SKS_ZELLIJ_KEEP_SESSION=1.
|
|
61
51
|
const resetSession = opts.freshSession === true
|
|
62
52
|
&& willCreateSession
|
|
63
53
|
&& codexLaunchRecovery.ok
|
|
@@ -199,17 +189,6 @@ export async function launchMadZellijUi(args = [], opts = {}) {
|
|
|
199
189
|
launchOpts.session = resolvedSession;
|
|
200
190
|
return launchZellijLayout(launchOpts);
|
|
201
191
|
}
|
|
202
|
-
/**
|
|
203
|
-
* Attach the current terminal to an existing Zellij session in the foreground.
|
|
204
|
-
*
|
|
205
|
-
* `launchZellijLayout` only ever *creates* a detached background session, which
|
|
206
|
-
* is correct for proof/automation but means an interactive launch (e.g.
|
|
207
|
-
* `sks --mad`) never actually opens anything. This helper performs the
|
|
208
|
-
* follow-up foreground attach, inheriting stdio so the session takes over the
|
|
209
|
-
* user's terminal until they detach. It is a no-op-style failure (never throws)
|
|
210
|
-
* when Zellij is missing or attach fails, so callers can fall back to printing a
|
|
211
|
-
* manual attach hint.
|
|
212
|
-
*/
|
|
213
192
|
export function attachZellijSessionInteractive(sessionName, opts = {}) {
|
|
214
193
|
if (!sessionName)
|
|
215
194
|
return { ok: false, status: null, signal: null, error: 'missing_session_name' };
|
|
@@ -217,11 +196,6 @@ export function attachZellijSessionInteractive(sessionName, opts = {}) {
|
|
|
217
196
|
const env = { ...process.env };
|
|
218
197
|
if (meta.zellij_socket_dir && !env.ZELLIJ_SOCKET_DIR)
|
|
219
198
|
env.ZELLIJ_SOCKET_DIR = meta.zellij_socket_dir;
|
|
220
|
-
// Steer the foreground attach at our generated clipboard config so the interactive
|
|
221
|
-
// session honors copy_command=pbcopy + copy_on_select. The `options` subcommand only
|
|
222
|
-
// configures the *created* background session, so the attach needs its own config
|
|
223
|
-
// delivery; ZELLIJ_CONFIG_FILE avoids reordering CLI args. Defer to a user-exported
|
|
224
|
-
// ZELLIJ_CONFIG_FILE if they already set one.
|
|
225
199
|
if (opts.configPath && !env.ZELLIJ_CONFIG_FILE)
|
|
226
200
|
env.ZELLIJ_CONFIG_FILE = opts.configPath;
|
|
227
201
|
try {
|
|
@@ -7,8 +7,6 @@ const DEFAULT_TAIL_BYTES = 256 * 1024;
|
|
|
7
7
|
const DEFAULT_REFRESH_MIN_MS = 2_000;
|
|
8
8
|
const DEFAULT_HEARTBEAT_MS = 5_000;
|
|
9
9
|
const MAX_DISCOVERY_DAY_DIRS = 45;
|
|
10
|
-
// The current release baseline is 0.144.5, but this rollout format has been
|
|
11
|
-
// stable since 0.144.1 and remains readable for compatible older sessions.
|
|
12
10
|
const MIN_SUPPORTED_CODEX_ROLLOUT_VERSION = '0.144.1';
|
|
13
11
|
const rolloutPathCache = new Map();
|
|
14
12
|
export async function readOfficialSubagentRolloutActivity(input) {
|
|
@@ -35,9 +33,6 @@ export async function readOfficialSubagentRolloutActivity(input) {
|
|
|
35
33
|
const activityCutoffMs = Math.max(Number.isFinite(birthMs) ? birthMs : 0, Number.isFinite(startMs) ? startMs : 0);
|
|
36
34
|
const rows = tail.rows.filter((row) => {
|
|
37
35
|
const ts = Date.parse(String(row?.timestamp || ''));
|
|
38
|
-
// Forked subagent rollouts contain a rewritten copy of the parent history.
|
|
39
|
-
// Those copied rows share the child session_meta timestamp. Ignore that
|
|
40
|
-
// fork snapshot and surface only events emitted by the child afterwards.
|
|
41
36
|
return Number.isFinite(ts) && ts > activityCutoffMs;
|
|
42
37
|
});
|
|
43
38
|
if (!rows.length)
|
|
@@ -93,11 +93,6 @@ export async function recordOfficialSubagentParentOutcomesTelemetry(input) {
|
|
|
93
93
|
for (const missionId of missionIds) {
|
|
94
94
|
const latest = await latestThreadSlotForMission(input.root, missionId, threadId);
|
|
95
95
|
const stopFailureBlocker = failedOrAmbiguousStopBlocker(latest?.blockers);
|
|
96
|
-
// SubagentStop has no trustworthy success status of its own, but a
|
|
97
|
-
// normalized failed/ambiguous outcome is still negative evidence. A
|
|
98
|
-
// structurally valid parent summary must not erase that evidence by
|
|
99
|
-
// declaring the same thread completed. Surface the contradiction as a
|
|
100
|
-
// failed slot so the CLI/Zellij observer remains fail closed.
|
|
101
96
|
const completed = outcome.status === 'completed' && !stopFailureBlocker;
|
|
102
97
|
const desiredStatus = completed ? 'completed' : 'failed';
|
|
103
98
|
if (latest?.status === desiredStatus) {
|
|
@@ -4,15 +4,8 @@ import { checkZellijCapability } from './zellij-capability.js';
|
|
|
4
4
|
import { runZellij } from './zellij-command.js';
|
|
5
5
|
import { ZELLIJ_SCREEN_SCRAPEABLE_SECTIONS } from './zellij-lane-renderer.js';
|
|
6
6
|
export const ZELLIJ_SCREEN_PROOF_SCHEMA = 'sks.zellij-screen-proof.v1';
|
|
7
|
-
// Canonical scrapeable subset (a strict subset of ZELLIJ_LANE_SECTIONS).
|
|
8
7
|
const REQUIRED_LANE_TEXT = ZELLIJ_SCREEN_SCRAPEABLE_SECTIONS;
|
|
9
8
|
export const ZELLIJ_HEARTBEAT_TIMEOUT_BLOCKER = 'zellij_lane_heartbeat_timeout';
|
|
10
|
-
/**
|
|
11
|
-
* Poll for the lane renderer heartbeat file and return a decisive result. A
|
|
12
|
-
* timeout is turned into the `zellij_lane_heartbeat_timeout` blocker so callers
|
|
13
|
-
* (real-session launch gate) can fail directly instead of waiting silently.
|
|
14
|
-
* Pure enough to be exercised hermetically without a real Zellij session.
|
|
15
|
-
*/
|
|
16
9
|
export async function waitForLaneHeartbeat(file, opts = {}) {
|
|
17
10
|
const timeoutMs = Math.max(0, Number(opts.timeoutMs ?? 5000));
|
|
18
11
|
const intervalMs = Math.max(25, Number(opts.intervalMs ?? 250));
|
|
@@ -83,7 +83,6 @@ function renderTelemetryAnchor(snapshot, updateNotice = null, sqlPlaneCapability
|
|
|
83
83
|
const update = updateNotice?.update_available && updateNotice?.latest_version ? ` · update ${trimInline(String(updateNotice.latest_version), 18)} available` : '';
|
|
84
84
|
const sqlPlane = isMadSksSqlPlaneActive(sqlPlaneCapability) ? ' · MAD-SKS SQL-PLANE ACTIVE' : '';
|
|
85
85
|
const qaHandoff = ['pending', 'blocked_for_desktop_review'].includes(String(appHandoff?.status || '')) ? ' · QA /app handoff pending' : '';
|
|
86
|
-
// Compact SKS branding header: package version + mission id so the SLOTS column self-identifies.
|
|
87
86
|
const brand = `SKS v${readPackageVersion()} · mission ${trimInline(String(snapshot.mission_id || '-'), 28)}`;
|
|
88
87
|
if (staleSeconds != null && staleSeconds > 60) {
|
|
89
88
|
return [brand, `SLOTS telemetry stale ${staleSeconds}s · active ?${update}${sqlPlane}${qaHandoff}`].join('\n');
|
|
@@ -288,10 +288,6 @@ export async function renderZellijSlotPaneStatusFromArtifacts(input) {
|
|
|
288
288
|
telemetry_age_ms: status.telemetry_age_ms
|
|
289
289
|
};
|
|
290
290
|
}
|
|
291
|
-
// Root-cause-3 fix: the watch loop never exited, so completed/failed panes lingered forever and
|
|
292
|
-
// kept re-reporting staleness. Resolve whether this slot has reached a terminal state (status is
|
|
293
|
-
// completed/failed/drained in telemetry) AND its worker-result.json exists, so the pane command
|
|
294
|
-
// can render one final frame and exit instead of looping indefinitely.
|
|
295
291
|
export async function resolveZellijSlotPaneExit(input) {
|
|
296
292
|
const resultExists = Boolean(await readJson(path.join(path.resolve(input.artifactDir), 'worker-result.json')));
|
|
297
293
|
if (!resultExists)
|
|
@@ -343,9 +339,6 @@ function telemetryStatus(snapshot) {
|
|
|
343
339
|
const parsed = snapshot?.updated_at ? Date.parse(snapshot.updated_at) : NaN;
|
|
344
340
|
const telemetryAgeMs = Number.isFinite(parsed) ? Math.max(0, Date.now() - parsed) : Number.MAX_SAFE_INTEGER;
|
|
345
341
|
return {
|
|
346
|
-
// Root-cause-3 fix: with a 1000ms+jitter flush throttle the old 3000ms threshold flapped
|
|
347
|
-
// constantly. Raise to 15000ms so brief gaps between flushes don't read as "stale", and only
|
|
348
|
-
// claim the worker may be gone after 60000ms of true silence.
|
|
349
342
|
telemetry_stale: telemetryAgeMs > 15000,
|
|
350
343
|
telemetry_age_ms: telemetryAgeMs
|
|
351
344
|
};
|
|
@@ -456,8 +449,6 @@ function formatArtifactEvent(row) {
|
|
|
456
449
|
if (!row)
|
|
457
450
|
return '';
|
|
458
451
|
const status = trimInline(row.lane_status || row.status || row.event || row.event_type || row.type || row.sdk_event_type || 'event', 18);
|
|
459
|
-
// Prefer the latest LLM message text (message_tail/message) so the live pane shows what the
|
|
460
|
-
// model is actually saying, falling back to tool/file/blocker context when no message exists.
|
|
461
452
|
const detail = firstText([
|
|
462
453
|
row.message_tail,
|
|
463
454
|
row.message,
|
|
@@ -50,10 +50,6 @@ export async function readZellijSlotTelemetrySnapshotNoRebuild(root, missionId)
|
|
|
50
50
|
const stat = await statTelemetryFile(snapshotPath);
|
|
51
51
|
const recorded = telemetrySnapshotDiskStat.get(snapshotPath);
|
|
52
52
|
const diskChanged = Boolean(stat) && (!recorded || recorded.mtimeMs !== stat.mtimeMs || recorded.size !== stat.size);
|
|
53
|
-
// CRITICAL: never serve a process-local cache forever. Long-lived reader
|
|
54
|
-
// processes (zellij slot pane renderers in --watch mode) must observe
|
|
55
|
-
// snapshot flushes performed by the orchestrator and worker processes,
|
|
56
|
-
// otherwise the pane renders the same frame for the entire mission.
|
|
57
53
|
if (!diskChanged && cached?.schema === ZELLIJ_SLOT_TELEMETRY_SNAPSHOT_SCHEMA)
|
|
58
54
|
return cached;
|
|
59
55
|
const existing = await readJson(snapshotPath, null);
|
|
@@ -63,11 +59,6 @@ export async function readZellijSlotTelemetrySnapshotNoRebuild(root, missionId)
|
|
|
63
59
|
return cached?.schema === ZELLIJ_SLOT_TELEMETRY_SNAPSHOT_SCHEMA ? cached : null;
|
|
64
60
|
}
|
|
65
61
|
const disk = existing;
|
|
66
|
-
// Merge with any locally cached (possibly not-yet-flushed) slot state so a
|
|
67
|
-
// writer process does not lose its pending events when another process
|
|
68
|
-
// flushed the snapshot file in the meantime. The DISK updated_at stays
|
|
69
|
-
// authoritative on the read path: it reflects the last real flush, which is
|
|
70
|
-
// what stale-telemetry detection must measure.
|
|
71
62
|
const merged = cached?.schema === ZELLIJ_SLOT_TELEMETRY_SNAPSHOT_SCHEMA ? mergeTelemetrySnapshots(disk, cached, { updatedAt: 'base' }) : disk;
|
|
72
63
|
telemetrySnapshotCache.set(snapshotPath, merged);
|
|
73
64
|
return merged;
|
|
@@ -334,9 +325,6 @@ async function writeTelemetrySnapshotFast(file, snapshot) {
|
|
|
334
325
|
const flushCount = Number(telemetrySnapshotFlushCounts.get(file) || 0) + 1;
|
|
335
326
|
telemetrySnapshotFlushCounts.set(file, flushCount);
|
|
336
327
|
telemetrySnapshotLastFlushMs.set(file, Date.now());
|
|
337
|
-
// Multiple processes (orchestrator + worker children) flush this file.
|
|
338
|
-
// Serialize the read/merge/write critical section so a slower writer
|
|
339
|
-
// cannot overwrite a newer slot observed by a different process.
|
|
340
328
|
const disk = await readJson(file, null);
|
|
341
329
|
const merged = disk?.schema === ZELLIJ_SLOT_TELEMETRY_SNAPSHOT_SCHEMA ? mergeTelemetrySnapshots(disk, snapshot) : snapshot;
|
|
342
330
|
const next = { ...merged, flush_count: Math.max(flushCount, Number(merged.flush_count || 0)) };
|
|
@@ -13,13 +13,6 @@ export function resolveZellijUiMode(args = [], env = process.env) {
|
|
|
13
13
|
return resolveExplicitZellijUiMode(args, env) || 'compact-slots';
|
|
14
14
|
}
|
|
15
15
|
export function resolveZellijWorkerPaneUiMode(args = [], env = process.env) {
|
|
16
|
-
// Default worker panes to the live slot renderer (compact-slots). In
|
|
17
|
-
// 'full-debug' the pane runs the worker process itself, but the worker is
|
|
18
|
-
// invoked with --json and the codex SDK streams events to JSONL files — so
|
|
19
|
-
// the pane stays blank until the worker exits. The slot renderer re-reads
|
|
20
|
-
// heartbeat/event/stdout artifacts every second and actually shows what each
|
|
21
|
-
// parallel worker is doing in real time. 'full-debug' remains available via
|
|
22
|
-
// --zellij-full-debug or SKS_ZELLIJ_UI_MODE=full-debug.
|
|
23
16
|
return resolveExplicitZellijUiMode(args, env) || 'compact-slots';
|
|
24
17
|
}
|
|
25
18
|
function resolveExplicitZellijUiMode(args = [], env = process.env) {
|
|
@@ -28,13 +28,6 @@ export function zellijUpgradeCommandHint(missing = false) {
|
|
|
28
28
|
return 'cargo install --locked zellij # or your distro package manager';
|
|
29
29
|
return 'See https://zellij.dev/documentation/installation';
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Resolve the latest STABLE zellij version. GitHub's /releases/latest endpoint
|
|
33
|
-
* already excludes prereleases and drafts. Results are cached on disk
|
|
34
|
-
* (default TTL 6h, override with SKS_ZELLIJ_UPDATE_TTL_MS) so command launches
|
|
35
|
-
* stay fast and offline-safe. SKS_ZELLIJ_LATEST_VERSION pins the value for
|
|
36
|
-
* tests and air-gapped environments.
|
|
37
|
-
*/
|
|
38
31
|
export async function fetchLatestZellijVersion(input = {}) {
|
|
39
32
|
const env = input.env || process.env;
|
|
40
33
|
const pinned = stripVersionPrefix(String(env.SKS_ZELLIJ_LATEST_VERSION || '').trim());
|
|
@@ -48,8 +41,6 @@ export async function fetchLatestZellijVersion(input = {}) {
|
|
|
48
41
|
}
|
|
49
42
|
try {
|
|
50
43
|
const tag = await githubLatestTag(input.timeoutMs || normalizePositiveInt(env.SKS_ZELLIJ_UPDATE_TIMEOUT_MS, 2500));
|
|
51
|
-
// GitHub release tags carry a leading "v" (v0.44.3); \b-based version
|
|
52
|
-
// parsing cannot start inside "v0", so strip the prefix first.
|
|
53
44
|
const version = parseZellijVersionText(stripVersionPrefix(tag));
|
|
54
45
|
if (!version)
|
|
55
46
|
throw new Error(`zellij_latest_tag_unparsed:${tag}`);
|
|
@@ -111,11 +102,6 @@ export async function checkZellijUpdateNotice(input = {}) {
|
|
|
111
102
|
}
|
|
112
103
|
return persistNotice(input.missionDir, notice);
|
|
113
104
|
}
|
|
114
|
-
/**
|
|
115
|
-
* Upgrade zellij to the latest stable release. Only Homebrew automation is
|
|
116
|
-
* attempted (macOS / Linuxbrew); everything else returns manual_required with
|
|
117
|
-
* the exact operator command, mirroring how the Codex CLI update flow behaves.
|
|
118
|
-
*/
|
|
119
105
|
export async function upgradeZellijToLatest(input = {}) {
|
|
120
106
|
const before = await checkZellijCapability({ require: false, writeReport: false, env: input.env || process.env }).catch(() => null);
|
|
121
107
|
const beforeVersion = before?.version || null;
|
|
@@ -133,11 +119,6 @@ export async function upgradeZellijToLatest(input = {}) {
|
|
|
133
119
|
};
|
|
134
120
|
}
|
|
135
121
|
const upgradeArgs = missing ? ['install', 'zellij'] : ['upgrade', 'zellij'];
|
|
136
|
-
// Package installs go through the mutation guard with an explicit
|
|
137
|
-
// zellij_install scope contract (same path ensureZellijCliTool uses), so the
|
|
138
|
-
// mutation ledger records the install and safety gates can audit it. The
|
|
139
|
-
// upgrade only runs after the operator confirmed the [Y/n] prompt or passed
|
|
140
|
-
// --yes / `sks zellij update --yes`.
|
|
141
122
|
const guardRoot = globalSksRoot();
|
|
142
123
|
const guardCommand = `brew ${upgradeArgs.join(' ')}`;
|
|
143
124
|
const contract = createRequestedScopeContract({
|
|
@@ -155,8 +136,6 @@ export async function upgradeZellijToLatest(input = {}) {
|
|
|
155
136
|
maxOutputBytes: 256 * 1024
|
|
156
137
|
}).catch((err) => ({ code: 1, stdout: '', stderr: String(err?.message || err) }));
|
|
157
138
|
if (run.code !== 0 && !missing && /No such keg|No available formula|not installed/i.test(`${run.stderr}\n${run.stdout}`)) {
|
|
158
|
-
// zellij exists on PATH but was not installed through Homebrew (e.g. cargo
|
|
159
|
-
// or a manual binary). Installing the brew formula gives a managed copy.
|
|
160
139
|
run = await guardedPackageInstall(guardCtx, 'zellij', {
|
|
161
140
|
confirmed: true,
|
|
162
141
|
command: 'brew',
|
|
@@ -195,14 +174,6 @@ export async function upgradeZellijToLatest(input = {}) {
|
|
|
195
174
|
error: null
|
|
196
175
|
};
|
|
197
176
|
}
|
|
198
|
-
/**
|
|
199
|
-
* Launch-time prompt, mirroring maybePromptCodexUpdateForLaunch: check the
|
|
200
|
-
* installed zellij version against the latest stable release and offer an
|
|
201
|
-
* upgrade before opening the live session. Never blocks the launch.
|
|
202
|
-
*
|
|
203
|
-
* Skips: --json, --skip-cli-tools, --skip-zellij-update, SKS_SKIP_ZELLIJ_UPDATE=1.
|
|
204
|
-
* Auto-approves: --yes / -y.
|
|
205
|
-
*/
|
|
206
177
|
export async function maybePromptZellijUpdateForLaunch(args = [], opts = {}) {
|
|
207
178
|
const env = opts.env || process.env;
|
|
208
179
|
const list = (args || []).map((arg) => String(arg));
|
|
@@ -15,11 +15,6 @@ export function buildWorkerPaneName(slotId, generationIndex) {
|
|
|
15
15
|
return `${slotId}/gen-${Math.max(1, Math.floor(Number(generationIndex) || 1))}`;
|
|
16
16
|
}
|
|
17
17
|
export function buildWorkerPaneTitle(slotId, generationIndex, context, serviceTier, backend, status, worktree, taskTitle) {
|
|
18
|
-
// When a task label is available, the pane title is JUST the label + status:
|
|
19
|
-
// users identify panes by what they are doing, not by slot ids. Slot/gen,
|
|
20
|
-
// backend, provider, and worktree details stay inside the pane body and the
|
|
21
|
-
// SLOTS anchor rows. The verbose format remains the fallback for callers
|
|
22
|
-
// that have no task context.
|
|
23
18
|
const task = shortWorkerTaskLabel(taskTitle);
|
|
24
19
|
if (task)
|
|
25
20
|
return `${task} · ${workerBackendTag(backend, context?.provider)} · ${status || 'launching'}`;
|
|
@@ -28,9 +23,6 @@ export function buildWorkerPaneTitle(slotId, generationIndex, context, serviceTi
|
|
|
28
23
|
const wt = worktree ? ` · WT:${worktree.id} · branch:${worktree.branch}` : '';
|
|
29
24
|
return `${base}${wt} · ${backend || 'codex-sdk'} · ${providerPaneLabel(normalized)} · ${status || 'launching'}`;
|
|
30
25
|
}
|
|
31
|
-
// Local-LLM workers must be visually distinguishable from GPT/codex workers:
|
|
32
|
-
// only trivial long-running edits belong on local models, while web research
|
|
33
|
-
// and code review must run on GPT. The tag makes a misrouted task obvious.
|
|
34
26
|
export function workerBackendTag(backend, provider) {
|
|
35
27
|
const text = `${String(backend || '')} ${String(provider || '')}`.toLowerCase();
|
|
36
28
|
if (/ollama|local/.test(text))
|
|
@@ -39,8 +31,6 @@ export function workerBackendTag(backend, provider) {
|
|
|
39
31
|
return 'fixture';
|
|
40
32
|
return 'GPT';
|
|
41
33
|
}
|
|
42
|
-
// Lead the pane title with a 1-3 word task label so users can tell WHAT each
|
|
43
|
-
// slot is doing at a glance instead of an anonymous "slot-002/gen-1".
|
|
44
34
|
export function shortWorkerTaskLabel(value, maxChars = 24) {
|
|
45
35
|
const text = String(value || '').replace(/\s+/g, ' ').trim();
|
|
46
36
|
if (!text)
|
|
@@ -233,15 +223,7 @@ export async function openWorkerPane(input) {
|
|
|
233
223
|
return record;
|
|
234
224
|
}
|
|
235
225
|
const paneName = buildWorkerPaneTitle(input.slotId, input.generationIndex, providerContext, input.serviceTier, input.backend, input.statusLabel || 'running', input.worktree || null, input.taskTitle || null);
|
|
236
|
-
// CRITICAL: serialize anchor + worker pane creation per session. Workers
|
|
237
|
-
// launch concurrently, and without this lock every worker raced past the
|
|
238
|
-
// "does the SLOTS anchor exist yet?" check and created its OWN anchor with
|
|
239
|
-
// --direction right — splitting the screen into N side-by-side columns
|
|
240
|
-
// (observed in agent-zellij-pane-launch-ledger: terminal_1..terminal_5 all
|
|
241
|
-
// recorded as separate slot_column_anchor_pane_id values in one mission).
|
|
242
226
|
return withZellijPaneCreationLock(input, async () => {
|
|
243
|
-
// Re-read the right-column state now that we hold the lock: a previously
|
|
244
|
-
// serialized worker may have created the anchor and/or its own pane.
|
|
245
227
|
const freshState = rightColumn
|
|
246
228
|
? await readRightColumnState(root, input.missionId, input.projectRoot).catch(() => null)
|
|
247
229
|
: null;
|
|
@@ -259,18 +241,10 @@ export async function openWorkerPane(input) {
|
|
|
259
241
|
let columnCreationDirectionRequested = null;
|
|
260
242
|
let columnCreationDirectionApplied = null;
|
|
261
243
|
if (rightColumn && !freshFocusCandidate) {
|
|
262
|
-
// Single right-column invariant: if this zellij session was reused (stable
|
|
263
|
-
// per-cwd name) and already carries a SLOTS anchor from a prior mission, adopt
|
|
264
|
-
// it and stack workers underneath instead of splitting ANOTHER `--direction
|
|
265
|
-
// right` column — repeated right-splits are exactly what fragments the screen
|
|
266
|
-
// into side-by-side columns. A fresh column is only split when none exists yet.
|
|
267
244
|
const adoptedAnchorPaneId = createSession.ok
|
|
268
245
|
? await findExistingSlotsAnchorPaneId(input.sessionName, cwd).catch(() => null)
|
|
269
246
|
: null;
|
|
270
247
|
if (adoptedAnchorPaneId) {
|
|
271
|
-
// Adopted an existing column: no creation was requested, so leave the
|
|
272
|
-
// column-creation direction fields null (avoids a false
|
|
273
|
-
// `zellij_worker_slot_column_anchor_not_created` blocker).
|
|
274
248
|
slotColumnAnchorPaneId = adoptedAnchorPaneId;
|
|
275
249
|
await recordSlotColumnAnchorInRightColumn({
|
|
276
250
|
root,
|
|
@@ -314,11 +288,6 @@ export async function openWorkerPane(input) {
|
|
|
314
288
|
const focus = focusPaneId
|
|
315
289
|
? await focusZellijPaneById(input.sessionName, focusPaneId, cwd)
|
|
316
290
|
: null;
|
|
317
|
-
// Vertical stack policy: the first worker splits DOWN from the SLOTS anchor;
|
|
318
|
-
// every following worker joins a zellij stacked-pane group with the previous
|
|
319
|
-
// worker (`new-pane --stacked`, zellij >= 0.43) so the right column stays a
|
|
320
|
-
// clean vertical stack instead of fragmenting the screen. Opt out with
|
|
321
|
-
// SKS_ZELLIJ_WORKER_STACKED=0.
|
|
322
291
|
const stackIntent = process.env.SKS_ZELLIJ_WORKER_STACKED !== '0'
|
|
323
292
|
&& Boolean(lastVisibleWorkerPaneId)
|
|
324
293
|
&& focus?.ok === true;
|
|
@@ -651,9 +620,6 @@ async function reconcileZellijWorkerPaneId(sessionName, paneName, resultPath, cw
|
|
|
651
620
|
blockers: paneId == null ? ['zellij_worker_pane_id_not_reconciled'] : []
|
|
652
621
|
};
|
|
653
622
|
}
|
|
654
|
-
// Look up an already-open SLOTS anchor pane in a (possibly reused) session so a
|
|
655
|
-
// new mission can stack its workers under the existing right column instead of
|
|
656
|
-
// splitting another one. Returns the live pane id (terminal_<n>) or null.
|
|
657
623
|
async function findExistingSlotsAnchorPaneId(sessionName, cwd) {
|
|
658
624
|
const listed = await runZellij(['--session', sessionName, 'action', 'list-panes', '--json', '--all'], {
|
|
659
625
|
cwd,
|
|
@@ -775,11 +741,6 @@ async function focusZellijPaneById(sessionName, paneId, cwd) {
|
|
|
775
741
|
last = focus;
|
|
776
742
|
if (focus.ok)
|
|
777
743
|
return focus;
|
|
778
|
-
// zellij exits non-zero with "Pane Terminal(N) is already focused" when the
|
|
779
|
-
// target pane already holds focus (common: new-pane auto-focuses the pane
|
|
780
|
-
// it created, so the previous worker pane is usually still focused). That
|
|
781
|
-
// is a success for our purposes — without this, stacked placement would
|
|
782
|
-
// silently fall back to a plain down-split on every consecutive worker.
|
|
783
744
|
if (/already focused/i.test(`${focus.stdout_tail || ''} ${focus.stderr_tail || ''}`)) {
|
|
784
745
|
return { ...focus, ok: true, blockers: [], warnings: [...focus.warnings, 'zellij_pane_already_focused'] };
|
|
785
746
|
}
|
|
@@ -26,20 +26,39 @@ enum AlertFactory {
|
|
|
26
26
|
alert.beginSheetModal(for: window) { completion($0 == .alertFirstButtonReturn) }
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
static func textSheet(
|
|
29
|
+
static func textSheet(
|
|
30
|
+
window: NSWindow,
|
|
31
|
+
title: String,
|
|
32
|
+
message: String,
|
|
33
|
+
secure: Bool = false,
|
|
34
|
+
placeholder: String? = nil,
|
|
35
|
+
completion: @escaping (String?) -> Void
|
|
36
|
+
) {
|
|
30
37
|
let alert = NSAlert()
|
|
31
38
|
alert.messageText = title
|
|
32
39
|
alert.informativeText = message
|
|
33
40
|
alert.addButton(withTitle: "Apply")
|
|
34
41
|
alert.addButton(withTitle: "Cancel")
|
|
35
|
-
let field: NSTextField = secure
|
|
42
|
+
let field: NSTextField = secure
|
|
43
|
+
? NSSecureTextField(frame: NSRect(x: 0, y: 0, width: 420, height: 24))
|
|
44
|
+
: NSTextField(frame: NSRect(x: 0, y: 0, width: 420, height: 24))
|
|
45
|
+
field.isEditable = true
|
|
46
|
+
field.isSelectable = true
|
|
47
|
+
field.placeholderString = placeholder
|
|
36
48
|
field.setAccessibilityLabel(title)
|
|
49
|
+
if let placeholder, !placeholder.isEmpty {
|
|
50
|
+
field.setAccessibilityPlaceholderValue(placeholder)
|
|
51
|
+
}
|
|
37
52
|
alert.accessoryView = field
|
|
53
|
+
alert.window.initialFirstResponder = field
|
|
38
54
|
AppIdentity.applyIcon(to: alert)
|
|
39
55
|
alert.beginSheetModal(for: window) { response in
|
|
40
56
|
let value = field.stringValue.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
41
57
|
completion(response == .alertFirstButtonReturn && !value.isEmpty ? value : nil)
|
|
42
58
|
}
|
|
59
|
+
DispatchQueue.main.async {
|
|
60
|
+
alert.window.makeFirstResponder(field)
|
|
61
|
+
}
|
|
43
62
|
}
|
|
44
63
|
|
|
45
64
|
static func choiceSheet(window: NSWindow, title: String, message: String, choices: [(String, String)], completion: @escaping (String?) -> Void) {
|
|
@@ -10,6 +10,9 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
|
|
|
10
10
|
func applicationDidFinishLaunching(_ notification: Notification) {
|
|
11
11
|
NSApp.setActivationPolicy(.accessory)
|
|
12
12
|
AppIdentity.configure()
|
|
13
|
+
// Accessory/menubar apps have no system Edit menu by default, so Cmd+C/V
|
|
14
|
+
// never reaches NSTextField/NSTextView responders without an explicit menu.
|
|
15
|
+
AppIdentity.installStandardEditMenu()
|
|
13
16
|
processClient = ProcessClient(actionScript: AppRuntime.actionScript, logPath: AppRuntime.lastActionLogPath, projectRoot: AppRuntime.projectRoot)
|
|
14
17
|
operations = OperationCoordinator(directory: AppRuntime.operationDirectory)
|
|
15
18
|
notifications = NotificationCoordinator()
|
|
@@ -8,6 +8,31 @@ enum AppIdentity {
|
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
/// Install a minimal main menu so Cut/Copy/Paste/Select All key equivalents
|
|
12
|
+
/// work in Control Center sheets and editable fields under `.accessory` policy.
|
|
13
|
+
static func installStandardEditMenu() {
|
|
14
|
+
let mainMenu = NSMenu()
|
|
15
|
+
let appItem = NSMenuItem()
|
|
16
|
+
mainMenu.addItem(appItem)
|
|
17
|
+
let appMenu = NSMenu()
|
|
18
|
+
appItem.submenu = appMenu
|
|
19
|
+
appMenu.addItem(withTitle: "Quit SKS Center", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q")
|
|
20
|
+
|
|
21
|
+
let editItem = NSMenuItem()
|
|
22
|
+
mainMenu.addItem(editItem)
|
|
23
|
+
let editMenu = NSMenu(title: "Edit")
|
|
24
|
+
editItem.submenu = editMenu
|
|
25
|
+
editMenu.addItem(withTitle: "Undo", action: Selector(("undo:")), keyEquivalent: "z")
|
|
26
|
+
editMenu.addItem(withTitle: "Redo", action: Selector(("redo:")), keyEquivalent: "Z")
|
|
27
|
+
editMenu.addItem(.separator())
|
|
28
|
+
editMenu.addItem(withTitle: "Cut", action: #selector(NSText.cut(_:)), keyEquivalent: "x")
|
|
29
|
+
editMenu.addItem(withTitle: "Copy", action: #selector(NSText.copy(_:)), keyEquivalent: "c")
|
|
30
|
+
editMenu.addItem(withTitle: "Paste", action: #selector(NSText.paste(_:)), keyEquivalent: "v")
|
|
31
|
+
editMenu.addItem(withTitle: "Delete", action: #selector(NSText.delete(_:)), keyEquivalent: "")
|
|
32
|
+
editMenu.addItem(withTitle: "Select All", action: #selector(NSText.selectAll(_:)), keyEquivalent: "a")
|
|
33
|
+
NSApp.mainMenu = mainMenu
|
|
34
|
+
}
|
|
35
|
+
|
|
11
36
|
static func applyIcon(to alert: NSAlert) {
|
|
12
37
|
alert.icon = NSApplication.shared.applicationIconImage
|
|
13
38
|
}
|