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
|
@@ -10,12 +10,6 @@ export const DEFAULT_OFFICIAL_SUBAGENT_MAX_DEPTH = 1;
|
|
|
10
10
|
export const DEFAULT_OFFICIAL_SUBAGENT_JOB_MAX_RUNTIME_SECONDS = 1200;
|
|
11
11
|
export const DEFAULT_OFFICIAL_SUBAGENT_INTERRUPT_MESSAGE = true;
|
|
12
12
|
export const LEGACY_SKS_MAX_THREAD_VALUES = Object.freeze([4, 5, 6]);
|
|
13
|
-
/**
|
|
14
|
-
* Merge the project-scoped Codex [agents] defaults without overriding explicit
|
|
15
|
-
* project or inherited global values. Legacy 4/5/6 values migrate only when a
|
|
16
|
-
* caller supplies concrete SKS ownership evidence (for example the generated
|
|
17
|
-
* file inventory from the previous project manifest).
|
|
18
|
-
*/
|
|
19
13
|
export function mergeOfficialSubagentConfig(text = '', opts = {}) {
|
|
20
14
|
const source = String(text || '');
|
|
21
15
|
if (!inspectToml(source).ok)
|
|
@@ -58,8 +52,6 @@ export async function readOfficialSubagentConfig(root, opts = {}) {
|
|
|
58
52
|
const maxDepth = resolveLayeredValue(projectLayer.agents.max_depth, globalLayer.agents.max_depth, DEFAULT_OFFICIAL_SUBAGENT_MAX_DEPTH, positiveInteger);
|
|
59
53
|
const jobMaxRuntimeSeconds = resolveLayeredValue(projectLayer.agents.job_max_runtime_seconds, globalLayer.agents.job_max_runtime_seconds, DEFAULT_OFFICIAL_SUBAGENT_JOB_MAX_RUNTIME_SECONDS, positiveInteger);
|
|
60
54
|
const interruptMessage = resolveLayeredValue(projectLayer.agents.interrupt_message, globalLayer.agents.interrupt_message, DEFAULT_OFFICIAL_SUBAGENT_INTERRUPT_MESSAGE, booleanValue);
|
|
61
|
-
// Official Naruto admits only depth=1. Coerce higher values so they cannot
|
|
62
|
-
// contradict the launcher hard-enforcement or look "supported".
|
|
63
55
|
const depthCoerced = maxDepth.value > 1;
|
|
64
56
|
const warnings = depthCoerced
|
|
65
57
|
? [`official_subagent_max_depth_coerced_to_one:${maxDepth.value}:${maxDepth.source}`]
|
|
@@ -16,6 +16,7 @@ import { SUBAGENT_EVIDENCE_FILENAME, SUBAGENT_EVENT_LOG_FILENAME, SUBAGENT_PAREN
|
|
|
16
16
|
import { sksPrefixedDollarCommand, unprefixedSksSkillName } from '../routes/dollar-prefix.js';
|
|
17
17
|
import { withFileLock, tryWithFileLock } from '../locks/file-lock.js';
|
|
18
18
|
import { updateCurrentIfMissionAndRun } from '../mission.js';
|
|
19
|
+
import { HOST_CAPABILITY_HOOK_EVIDENCE_FILENAME, HOST_CAPABILITY_HOOK_OBSERVATIONS_FILENAME, HOST_CAPABILITY_HOOK_PENDING_RUNTIME_FILENAME, HOST_CAPABILITY_HOOK_RUNTIME_FILENAME } from '../agent-bridge/host-capability-runtime.js';
|
|
19
20
|
export const NARUTO_RESULT_SCHEMA = 'sks.naruto-subagent-workflow.v1';
|
|
20
21
|
export const SUBAGENT_PLAN_FILENAME = 'subagent-plan.json';
|
|
21
22
|
export const NARUTO_SUMMARY_FILENAME = 'naruto-summary.json';
|
|
@@ -128,8 +129,6 @@ async function prepareOfficialSubagentMissionLocked(input) {
|
|
|
128
129
|
});
|
|
129
130
|
return [name, {
|
|
130
131
|
...config,
|
|
131
|
-
// Catalog TOML remains the spawn-type contract; dynamic decision records why
|
|
132
|
-
// this role maps onto the sealed four-profile matrix for this goal.
|
|
133
132
|
routed_model: decision.model,
|
|
134
133
|
routed_model_reasoning_effort: decision.model_reasoning_effort,
|
|
135
134
|
routed_model_policy: decision.model_selection_reason,
|
|
@@ -379,7 +378,11 @@ function officialSubagentPreparationTombstoneInventory(mode) {
|
|
|
379
378
|
'completion-proof.md',
|
|
380
379
|
'evidence-index.json',
|
|
381
380
|
'route-completion-contract.json',
|
|
382
|
-
'trust-report.json'
|
|
381
|
+
'trust-report.json',
|
|
382
|
+
HOST_CAPABILITY_HOOK_PENDING_RUNTIME_FILENAME,
|
|
383
|
+
HOST_CAPABILITY_HOOK_RUNTIME_FILENAME,
|
|
384
|
+
HOST_CAPABILITY_HOOK_OBSERVATIONS_FILENAME,
|
|
385
|
+
HOST_CAPABILITY_HOOK_EVIDENCE_FILENAME
|
|
383
386
|
]
|
|
384
387
|
: [])
|
|
385
388
|
];
|
|
@@ -937,8 +940,6 @@ function narutoEventRunIds(value) {
|
|
|
937
940
|
}
|
|
938
941
|
}
|
|
939
942
|
catch {
|
|
940
|
-
// A torn incomplete line is not an identity claim. The admitted owner
|
|
941
|
-
// may reset it only after the live/terminal checks above pass.
|
|
942
943
|
}
|
|
943
944
|
}
|
|
944
945
|
return uniqueStrings(values);
|
|
@@ -64,6 +64,16 @@ Parent agent:
|
|
|
64
64
|
- owns decomposition, integration, and final answer
|
|
65
65
|
- do not do duplicate work already delegated
|
|
66
66
|
|
|
67
|
+
Host capability policy:
|
|
68
|
+
- use a host tool only when it is actually available in the project MCP inventory; do not infer availability from config text or duplicate host tool schemas
|
|
69
|
+
- SQL-generation-only requests: call \`datasource_schema_context\` first, use only reported tables and columns, and may complete without \`datasource_query_readonly\`
|
|
70
|
+
- actual data retrieval: call \`datasource_schema_context\`, generate one bounded parameterized SELECT/CTE, call \`datasource_query_readonly\`, and retain its receipt
|
|
71
|
+
- spreadsheet create: \`spreadsheet_create\` -> \`spreadsheet_inspect\` -> optional one minimal \`spreadsheet_update\` -> \`spreadsheet_inspect\`
|
|
72
|
+
- spreadsheet edit: \`spreadsheet_inspect\` -> one minimal \`spreadsheet_update\` -> \`spreadsheet_inspect\`
|
|
73
|
+
- document delivery: editable source -> render -> artifact receipt
|
|
74
|
+
- when a requested host capability is missing or unhealthy, return blocked proof; do not fabricate a fallback or success evidence
|
|
75
|
+
- Slack delivery belongs to the ACAS runtime and is never a model tool
|
|
76
|
+
|
|
67
77
|
Subagent rules:
|
|
68
78
|
- use only Codex official subagent threads; do not launch shell workers, a custom scheduler, a worker pool, or model fanout
|
|
69
79
|
- select the narrowest matching project custom agent by its description; the custom agent name is the spawn type
|
|
@@ -133,10 +143,29 @@ Final parent output:
|
|
|
133
143
|
"verification": [
|
|
134
144
|
{ "name": "focused check", "status": "passed|not_applicable", "reason": "required when not_applicable" }
|
|
135
145
|
],
|
|
146
|
+
"artifacts": [
|
|
147
|
+
{
|
|
148
|
+
"path": "workspace-relative/verified-output.xlsx",
|
|
149
|
+
"kind": "spreadsheet",
|
|
150
|
+
"media_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
151
|
+
"sha256": "sha256:<64 lowercase hex>",
|
|
152
|
+
"bytes": 1,
|
|
153
|
+
"role": "deliverable|scratch|temp|log"
|
|
154
|
+
}
|
|
155
|
+
],
|
|
156
|
+
"capabilities_used": [
|
|
157
|
+
{
|
|
158
|
+
"id": "declared host capability id",
|
|
159
|
+
"status": "passed|failed",
|
|
160
|
+
"tool_names": ["actually called host tool"],
|
|
161
|
+
"receipt_sha256": "sha256:<64 lowercase hex>"
|
|
162
|
+
}
|
|
163
|
+
],
|
|
136
164
|
"blockers": []
|
|
137
165
|
}
|
|
138
166
|
- include one thread_outcomes row for every requested subagent; a SubagentStop event alone never proves success
|
|
139
167
|
- if changed_files is non-empty, include at least one passed named check or a specifically justified not_applicable verification row
|
|
168
|
+
- use empty artifacts/capabilities_used arrays when no host capability was used; SKS overwrites these fields with observed Codex JSONL evidence before persistence
|
|
140
169
|
- keep completion summary and Honest Mode wording inside the JSON fields; do not add prose outside the object
|
|
141
170
|
`.trim();
|
|
142
171
|
}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import fsp from 'node:fs/promises';
|
|
2
2
|
import os from 'node:os';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import { runProcess } from '../fsx.js';
|
|
4
|
+
import { randomId, runProcess, writeJsonAtomic } from '../fsx.js';
|
|
5
|
+
import { missionDir } from '../mission.js';
|
|
5
6
|
import { NARUTO_PARENT_EFFORT, NARUTO_PARENT_MODEL } from './model-policy.js';
|
|
6
7
|
import { inspectCodexLbCliLaunchRecovery } from '../codex-control/codex-lb-launch-recovery.js';
|
|
7
8
|
import { resolveOfficialCodexPackageRuntime } from '../codex-runtime/resolve-codex-runtime.js';
|
|
9
|
+
import { withFileLock } from '../locks/file-lock.js';
|
|
10
|
+
import { HOST_CAPABILITY_HOOK_PENDING_RUNTIME_FILENAME, HOST_CAPABILITY_MCP_SERVER, createHostCapabilityHookPendingRuntime, createHostCapabilityEventCollector, hostCapabilityCodexConfigArgs, inspectHostCapabilityRuntime, requestHostCapabilities } from '../agent-bridge/host-capability-runtime.js';
|
|
8
11
|
export const OFFICIAL_SUBAGENT_WORKFLOW_SCHEMA = 'sks.subagent-workflow.v1';
|
|
9
12
|
const OFFICIAL_SUBAGENT_CHILD_ENV_ALLOWLIST = Object.freeze([
|
|
10
13
|
'HOME',
|
|
@@ -39,7 +42,14 @@ const OFFICIAL_SUBAGENT_CHILD_ENV_ALLOWLIST = Object.freeze([
|
|
|
39
42
|
'CODEX_CI',
|
|
40
43
|
'CODEX_MANAGED_BY_NPM',
|
|
41
44
|
'CODEX_INTERNAL_ORIGINATOR',
|
|
42
|
-
'CODEX_SANDBOX_NETWORK_DISABLED'
|
|
45
|
+
'CODEX_SANDBOX_NETWORK_DISABLED',
|
|
46
|
+
'SKS_AGENT_MODE',
|
|
47
|
+
'ACAS_AGENT_SLUG',
|
|
48
|
+
'ACAS_AGENT_WORKSPACE',
|
|
49
|
+
'ALFREDO_AGENT_SOULS_FILE',
|
|
50
|
+
'ACAS_CHROME_PATH',
|
|
51
|
+
'ACAS_HTML_TO_PDF_ENGINE',
|
|
52
|
+
'ACAS_HTML_TO_PDF_ALLOW_CHROME_CLI_FALLBACK'
|
|
43
53
|
]);
|
|
44
54
|
const SECRET_ENV_KEY_RE = /(?:api[_-]?key|token|secret|password|credential|authorization|cookie)/i;
|
|
45
55
|
const SECRET_BEARING_ENV_KEYS = new Set([
|
|
@@ -66,12 +76,16 @@ export function codexAppSessionKey(env = process.env) {
|
|
|
66
76
|
export function buildOfficialSubagentCodexArgs(input) {
|
|
67
77
|
return [
|
|
68
78
|
'exec',
|
|
79
|
+
'--json',
|
|
80
|
+
...(input.workingDirectory ? ['-C', input.workingDirectory] : []),
|
|
69
81
|
'-m', NARUTO_PARENT_MODEL,
|
|
70
82
|
'-c', `model_reasoning_effort="${NARUTO_PARENT_EFFORT}"`,
|
|
71
83
|
'-c', 'model_provider="openai"',
|
|
72
84
|
'-c', 'forced_login_method="chatgpt"',
|
|
73
85
|
'-c', `agents.max_threads=${Math.max(1, Math.floor(input.maxThreads))}`,
|
|
74
86
|
'-c', 'agents.max_depth=1',
|
|
87
|
+
...(input.projectConfigArgs || []),
|
|
88
|
+
...(input.hostCapabilityConfigArgs || []),
|
|
75
89
|
'--output-last-message', input.parentSummaryFile,
|
|
76
90
|
input.prompt
|
|
77
91
|
];
|
|
@@ -87,8 +101,84 @@ export function buildOfficialSubagentChildEnv(input = {}) {
|
|
|
87
101
|
childEnv.SKS_NARUTO_PARENT_LAUNCH = '1';
|
|
88
102
|
if (input.missionId)
|
|
89
103
|
childEnv.SKS_NARUTO_PARENT_MISSION_ID = input.missionId;
|
|
104
|
+
if (input.workflowRunId)
|
|
105
|
+
childEnv.SKS_NARUTO_PARENT_WORKFLOW_RUN_ID = input.workflowRunId;
|
|
106
|
+
if (input.hostCapabilityLaunchNonce) {
|
|
107
|
+
childEnv.SKS_NARUTO_PARENT_HOST_CAPABILITY_NONCE = input.hostCapabilityLaunchNonce;
|
|
108
|
+
}
|
|
90
109
|
return childEnv;
|
|
91
110
|
}
|
|
111
|
+
export function hostCapabilityProjectCodexConfigArgs(input) {
|
|
112
|
+
const trustLevel = input.projectTrusted ? 'trusted' : 'untrusted';
|
|
113
|
+
return [
|
|
114
|
+
'-c', `projects={${JSON.stringify(input.canonicalRoot)}={trust_level="${trustLevel}"}}`,
|
|
115
|
+
...(!input.projectTrusted && input.globalHostCapabilityConfigured
|
|
116
|
+
? ['-c', `mcp_servers.${HOST_CAPABILITY_MCP_SERVER}.enabled=false`]
|
|
117
|
+
: [])
|
|
118
|
+
];
|
|
119
|
+
}
|
|
120
|
+
async function inspectConfiguredGlobalHostCapabilityServer(input) {
|
|
121
|
+
const result = await runProcess(input.codexCommand, [
|
|
122
|
+
'-C', input.canonicalRoot,
|
|
123
|
+
...hostCapabilityProjectCodexConfigArgs({
|
|
124
|
+
canonicalRoot: input.canonicalRoot,
|
|
125
|
+
projectTrusted: false
|
|
126
|
+
}),
|
|
127
|
+
'mcp', 'list', '--json'
|
|
128
|
+
], {
|
|
129
|
+
cwd: input.canonicalRoot,
|
|
130
|
+
timeoutMs: 10_000,
|
|
131
|
+
maxOutputBytes: 1024 * 1024,
|
|
132
|
+
env: input.env,
|
|
133
|
+
envMode: 'replace'
|
|
134
|
+
}).catch(() => null);
|
|
135
|
+
if (!result || result.code !== 0 || result.timedOut || result.truncated) {
|
|
136
|
+
return { ok: false, present: false };
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
const rows = JSON.parse(result.stdout);
|
|
140
|
+
if (!Array.isArray(rows))
|
|
141
|
+
return { ok: false, present: false };
|
|
142
|
+
return {
|
|
143
|
+
ok: true,
|
|
144
|
+
present: rows.some((row) => row && typeof row === 'object' && row.name === HOST_CAPABILITY_MCP_SERVER)
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return { ok: false, present: false };
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async function writeHostCapabilityPendingRuntime(input) {
|
|
152
|
+
try {
|
|
153
|
+
await withFileLock({
|
|
154
|
+
lockPath: path.join(input.dir, '.host-capability-hooks.lock'),
|
|
155
|
+
timeoutMs: 5_000,
|
|
156
|
+
staleMs: 60_000
|
|
157
|
+
}, async () => {
|
|
158
|
+
await fsp.rm(path.join(input.dir, HOST_CAPABILITY_HOOK_PENDING_RUNTIME_FILENAME), { force: true });
|
|
159
|
+
await writeJsonAtomic(path.join(input.dir, HOST_CAPABILITY_HOOK_PENDING_RUNTIME_FILENAME), createHostCapabilityHookPendingRuntime({
|
|
160
|
+
missionId: input.missionId,
|
|
161
|
+
workflowRunId: input.workflowRunId,
|
|
162
|
+
launchNonce: input.launchNonce,
|
|
163
|
+
runtime: input.runtime
|
|
164
|
+
}));
|
|
165
|
+
});
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async function removeHostCapabilityPendingRuntime(dir) {
|
|
173
|
+
if (!dir)
|
|
174
|
+
return;
|
|
175
|
+
await withFileLock({
|
|
176
|
+
lockPath: path.join(dir, '.host-capability-hooks.lock'),
|
|
177
|
+
timeoutMs: 5_000,
|
|
178
|
+
staleMs: 60_000
|
|
179
|
+
}, () => fsp.rm(path.join(dir, HOST_CAPABILITY_HOOK_PENDING_RUNTIME_FILENAME), { force: true }))
|
|
180
|
+
.catch(() => undefined);
|
|
181
|
+
}
|
|
92
182
|
function knownInheritedSecretValues(env) {
|
|
93
183
|
const source = { ...process.env, ...(env || {}) };
|
|
94
184
|
return [...new Set(Object.entries(source)
|
|
@@ -102,7 +192,30 @@ function redactKnownValues(text, values) {
|
|
|
102
192
|
redacted = redacted.split(value).join('<redacted>');
|
|
103
193
|
return redacted;
|
|
104
194
|
}
|
|
195
|
+
function structuredValueContainsKnownValue(value, values) {
|
|
196
|
+
if (typeof value === 'string')
|
|
197
|
+
return values.some((secret) => value.includes(secret));
|
|
198
|
+
if (Array.isArray(value))
|
|
199
|
+
return value.some((item) => structuredValueContainsKnownValue(item, values));
|
|
200
|
+
if (!value || typeof value !== 'object')
|
|
201
|
+
return false;
|
|
202
|
+
return Object.values(value).some((item) => structuredValueContainsKnownValue(item, values));
|
|
203
|
+
}
|
|
204
|
+
function confineHostCapabilityEvidenceSecrets(evidence, secretValues) {
|
|
205
|
+
if (!structuredValueContainsKnownValue(evidence, secretValues))
|
|
206
|
+
return evidence;
|
|
207
|
+
const confined = createHostCapabilityEventCollector(evidence.runtime).finish();
|
|
208
|
+
return {
|
|
209
|
+
...confined,
|
|
210
|
+
ok: false,
|
|
211
|
+
blockers: uniqueStrings([
|
|
212
|
+
...confined.blockers,
|
|
213
|
+
'host_capability_evidence_secret_reflection'
|
|
214
|
+
])
|
|
215
|
+
};
|
|
216
|
+
}
|
|
105
217
|
export async function runOfficialSubagentWorkflow(input) {
|
|
218
|
+
const hostCapabilityRequest = requestHostCapabilities(input.goal);
|
|
106
219
|
const base = {
|
|
107
220
|
schema: OFFICIAL_SUBAGENT_WORKFLOW_SCHEMA,
|
|
108
221
|
workflow: 'official_codex_subagent',
|
|
@@ -111,50 +224,118 @@ export async function runOfficialSubagentWorkflow(input) {
|
|
|
111
224
|
max_depth: 1,
|
|
112
225
|
parent_model: NARUTO_PARENT_MODEL,
|
|
113
226
|
parent_reasoning_effort: NARUTO_PARENT_EFFORT,
|
|
114
|
-
session_scope: input.sessionKey || null
|
|
227
|
+
session_scope: input.sessionKey || null,
|
|
228
|
+
host_capability_request: hostCapabilityRequest
|
|
115
229
|
};
|
|
230
|
+
const hostCapabilityRuntime = await inspectHostCapabilityRuntime({
|
|
231
|
+
root: input.root,
|
|
232
|
+
request: hostCapabilityRequest,
|
|
233
|
+
projectTrusted: input.projectTrusted === true,
|
|
234
|
+
...(input.hostCapabilityDependencies ? { dependencies: input.hostCapabilityDependencies } : {})
|
|
235
|
+
});
|
|
116
236
|
if (input.appSession) {
|
|
237
|
+
if (hostCapabilityRequest.capability_ids.length > 0 && !input.sessionKey) {
|
|
238
|
+
return {
|
|
239
|
+
...base,
|
|
240
|
+
ok: false,
|
|
241
|
+
status: 'host_capability_blocked',
|
|
242
|
+
prepared: false,
|
|
243
|
+
additionalContext: null,
|
|
244
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
245
|
+
blockers: ['host_capability_session_scope_missing'],
|
|
246
|
+
completion_evidence: false,
|
|
247
|
+
note: 'Requested host capabilities cannot be safely bound without the current Codex session identity.'
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
if (!hostCapabilityRuntime.ok) {
|
|
251
|
+
return {
|
|
252
|
+
...base,
|
|
253
|
+
ok: false,
|
|
254
|
+
status: 'host_capability_blocked',
|
|
255
|
+
prepared: false,
|
|
256
|
+
additionalContext: null,
|
|
257
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
258
|
+
blockers: hostCapabilityRuntime.blockers,
|
|
259
|
+
completion_evidence: false,
|
|
260
|
+
note: 'Requested project-scoped host capabilities are missing or unhealthy. No runnable delegation context was returned.'
|
|
261
|
+
};
|
|
262
|
+
}
|
|
117
263
|
return {
|
|
118
264
|
...base,
|
|
119
265
|
ok: false,
|
|
120
266
|
status: 'delegation_context_ready',
|
|
121
267
|
prepared: true,
|
|
122
268
|
additionalContext: input.prompt,
|
|
269
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
123
270
|
completion_evidence: false,
|
|
124
271
|
note: 'The current Codex parent must spawn and await the official subagents. Preparation is not completion evidence.'
|
|
125
272
|
};
|
|
126
273
|
}
|
|
127
|
-
const childEnv = buildOfficialSubagentChildEnv({
|
|
128
|
-
...(input.env ? { env: input.env } : {}),
|
|
129
|
-
...(input.missionId ? { missionId: input.missionId } : {})
|
|
130
|
-
});
|
|
131
274
|
const inheritedSecretValues = knownInheritedSecretValues(input.env);
|
|
132
275
|
const parentSummaryFile = path.join(os.tmpdir(), `sks-naruto-parent-summary-${process.pid}-${Date.now()}.txt`);
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
parentSummaryFile
|
|
137
|
-
});
|
|
138
|
-
const toolOutputRecovery = await inspectCodexLbCliLaunchRecovery({
|
|
139
|
-
root: input.root,
|
|
140
|
-
env: childEnv,
|
|
141
|
-
cliArgs: args.slice(0, -1)
|
|
142
|
-
});
|
|
143
|
-
if (!toolOutputRecovery.ok) {
|
|
276
|
+
const hostCapabilityCollector = createHostCapabilityEventCollector(hostCapabilityRuntime);
|
|
277
|
+
if (!hostCapabilityRuntime.ok) {
|
|
278
|
+
const hostCapabilityEvidence = hostCapabilityCollector.finish();
|
|
144
279
|
return {
|
|
145
280
|
...base,
|
|
146
281
|
ok: false,
|
|
147
|
-
status: '
|
|
282
|
+
status: 'host_capability_blocked',
|
|
148
283
|
prepared: false,
|
|
149
284
|
codex_exit_code: null,
|
|
150
285
|
parent_summary: null,
|
|
151
286
|
parent_summary_file: null,
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
287
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
288
|
+
host_capability_evidence: hostCapabilityEvidence,
|
|
289
|
+
blockers: hostCapabilityEvidence.blockers,
|
|
155
290
|
completion_evidence: false
|
|
156
291
|
};
|
|
157
292
|
}
|
|
293
|
+
const canonicalRoot = await fsp.realpath(input.root).catch(() => null);
|
|
294
|
+
if (!canonicalRoot) {
|
|
295
|
+
return {
|
|
296
|
+
...base,
|
|
297
|
+
ok: false,
|
|
298
|
+
status: 'trusted_runtime_blocked',
|
|
299
|
+
prepared: false,
|
|
300
|
+
codex_exit_code: null,
|
|
301
|
+
parent_summary: null,
|
|
302
|
+
parent_summary_file: null,
|
|
303
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
304
|
+
host_capability_evidence: hostCapabilityCollector.finish(),
|
|
305
|
+
blockers: ['host_capability_project_root_realpath_failed'],
|
|
306
|
+
completion_evidence: false
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
let hostCapabilityLaunchNonce = null;
|
|
310
|
+
let hostCapabilityPendingDir = null;
|
|
311
|
+
if (hostCapabilityRequest.capability_ids.length > 0) {
|
|
312
|
+
if (!input.missionId || !input.workflowRunId) {
|
|
313
|
+
return {
|
|
314
|
+
...base,
|
|
315
|
+
ok: false,
|
|
316
|
+
status: 'host_capability_blocked',
|
|
317
|
+
prepared: false,
|
|
318
|
+
codex_exit_code: null,
|
|
319
|
+
parent_summary: null,
|
|
320
|
+
parent_summary_file: null,
|
|
321
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
322
|
+
host_capability_evidence: hostCapabilityCollector.finish(),
|
|
323
|
+
blockers: ['host_capability_parent_binding_identity_missing'],
|
|
324
|
+
completion_evidence: false
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
hostCapabilityLaunchNonce = randomId(32);
|
|
328
|
+
hostCapabilityPendingDir = missionDir(canonicalRoot, input.missionId);
|
|
329
|
+
}
|
|
330
|
+
const childEnv = buildOfficialSubagentChildEnv({
|
|
331
|
+
...(input.env ? { env: input.env } : {}),
|
|
332
|
+
...(input.missionId ? { missionId: input.missionId } : {}),
|
|
333
|
+
...(input.workflowRunId ? { workflowRunId: input.workflowRunId } : {}),
|
|
334
|
+
...(hostCapabilityLaunchNonce ? { hostCapabilityLaunchNonce } : {})
|
|
335
|
+
});
|
|
336
|
+
const outputSecretValues = hostCapabilityLaunchNonce
|
|
337
|
+
? [...inheritedSecretValues, hostCapabilityLaunchNonce]
|
|
338
|
+
: inheritedSecretValues;
|
|
158
339
|
let codexCommand;
|
|
159
340
|
if (input.runProcessImpl) {
|
|
160
341
|
codexCommand = input.codexBin || 'codex';
|
|
@@ -169,7 +350,8 @@ export async function runOfficialSubagentWorkflow(input) {
|
|
|
169
350
|
codex_exit_code: null,
|
|
170
351
|
parent_summary: null,
|
|
171
352
|
parent_summary_file: null,
|
|
172
|
-
|
|
353
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
354
|
+
host_capability_evidence: hostCapabilityCollector.finish(),
|
|
173
355
|
blockers: ['codex_parent_executable_override_forbidden'],
|
|
174
356
|
completion_evidence: false
|
|
175
357
|
};
|
|
@@ -184,23 +366,108 @@ export async function runOfficialSubagentWorkflow(input) {
|
|
|
184
366
|
codex_exit_code: null,
|
|
185
367
|
parent_summary: null,
|
|
186
368
|
parent_summary_file: null,
|
|
187
|
-
|
|
369
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
370
|
+
host_capability_evidence: hostCapabilityCollector.finish(),
|
|
188
371
|
blockers: [...runtime.blockers],
|
|
189
372
|
completion_evidence: false
|
|
190
373
|
};
|
|
191
374
|
}
|
|
192
375
|
codexCommand = runtime.identity.realpath;
|
|
193
376
|
}
|
|
377
|
+
let globalHostCapabilityConfigured = false;
|
|
378
|
+
if (input.projectTrusted !== true && !input.runProcessImpl) {
|
|
379
|
+
const configured = await inspectConfiguredGlobalHostCapabilityServer({
|
|
380
|
+
codexCommand,
|
|
381
|
+
canonicalRoot,
|
|
382
|
+
env: childEnv
|
|
383
|
+
});
|
|
384
|
+
if (!configured.ok) {
|
|
385
|
+
return {
|
|
386
|
+
...base,
|
|
387
|
+
ok: false,
|
|
388
|
+
status: 'trusted_runtime_blocked',
|
|
389
|
+
prepared: false,
|
|
390
|
+
codex_exit_code: null,
|
|
391
|
+
parent_summary: null,
|
|
392
|
+
parent_summary_file: null,
|
|
393
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
394
|
+
host_capability_evidence: hostCapabilityCollector.finish(),
|
|
395
|
+
blockers: ['host_capability_global_config_probe_failed'],
|
|
396
|
+
completion_evidence: false
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
globalHostCapabilityConfigured = configured.present;
|
|
400
|
+
}
|
|
401
|
+
const args = buildOfficialSubagentCodexArgs({
|
|
402
|
+
prompt: input.prompt,
|
|
403
|
+
maxThreads: input.maxThreads,
|
|
404
|
+
parentSummaryFile,
|
|
405
|
+
workingDirectory: canonicalRoot,
|
|
406
|
+
projectConfigArgs: hostCapabilityProjectCodexConfigArgs({
|
|
407
|
+
canonicalRoot,
|
|
408
|
+
projectTrusted: input.projectTrusted === true,
|
|
409
|
+
globalHostCapabilityConfigured
|
|
410
|
+
}),
|
|
411
|
+
hostCapabilityConfigArgs: hostCapabilityCodexConfigArgs(hostCapabilityRuntime)
|
|
412
|
+
});
|
|
413
|
+
const toolOutputRecovery = await inspectCodexLbCliLaunchRecovery({
|
|
414
|
+
root: input.root,
|
|
415
|
+
env: childEnv,
|
|
416
|
+
cliArgs: args.slice(0, -1)
|
|
417
|
+
});
|
|
418
|
+
if (!toolOutputRecovery.ok) {
|
|
419
|
+
return {
|
|
420
|
+
...base,
|
|
421
|
+
ok: false,
|
|
422
|
+
status: 'tool_output_recovery_blocked',
|
|
423
|
+
prepared: false,
|
|
424
|
+
codex_exit_code: null,
|
|
425
|
+
parent_summary: null,
|
|
426
|
+
parent_summary_file: null,
|
|
427
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
428
|
+
host_capability_evidence: hostCapabilityCollector.finish(),
|
|
429
|
+
tool_output_recovery: toolOutputRecovery,
|
|
430
|
+
blockers: toolOutputRecovery.blockers,
|
|
431
|
+
operator_actions: toolOutputRecovery.operator_actions,
|
|
432
|
+
completion_evidence: false
|
|
433
|
+
};
|
|
434
|
+
}
|
|
194
435
|
await fsp.mkdir(path.dirname(parentSummaryFile), { recursive: true });
|
|
436
|
+
if (hostCapabilityPendingDir && hostCapabilityLaunchNonce && input.missionId && input.workflowRunId) {
|
|
437
|
+
const prepared = await writeHostCapabilityPendingRuntime({
|
|
438
|
+
dir: hostCapabilityPendingDir,
|
|
439
|
+
missionId: input.missionId,
|
|
440
|
+
workflowRunId: input.workflowRunId,
|
|
441
|
+
launchNonce: hostCapabilityLaunchNonce,
|
|
442
|
+
runtime: hostCapabilityRuntime
|
|
443
|
+
});
|
|
444
|
+
if (!prepared) {
|
|
445
|
+
return {
|
|
446
|
+
...base,
|
|
447
|
+
ok: false,
|
|
448
|
+
status: 'host_capability_blocked',
|
|
449
|
+
prepared: false,
|
|
450
|
+
codex_exit_code: null,
|
|
451
|
+
parent_summary: null,
|
|
452
|
+
parent_summary_file: null,
|
|
453
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
454
|
+
host_capability_evidence: hostCapabilityCollector.finish(),
|
|
455
|
+
tool_output_recovery: toolOutputRecovery,
|
|
456
|
+
blockers: ['host_capability_pending_runtime_write_failed'],
|
|
457
|
+
completion_evidence: false
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
}
|
|
195
461
|
const execute = input.runProcessImpl || runProcess;
|
|
196
462
|
let processResult;
|
|
197
463
|
try {
|
|
198
464
|
processResult = await execute(codexCommand, args, {
|
|
199
|
-
cwd:
|
|
465
|
+
cwd: canonicalRoot,
|
|
200
466
|
timeoutMs: input.timeoutMs || 60 * 60 * 1000,
|
|
201
467
|
maxOutputBytes: 256 * 1024,
|
|
202
468
|
env: childEnv,
|
|
203
469
|
envMode: 'replace',
|
|
470
|
+
onStdout: hostCapabilityCollector.push,
|
|
204
471
|
...(input.onChildSpawn ? { onSpawn: input.onChildSpawn } : {})
|
|
205
472
|
});
|
|
206
473
|
}
|
|
@@ -215,33 +482,79 @@ export async function runOfficialSubagentWorkflow(input) {
|
|
|
215
482
|
timedOut: false
|
|
216
483
|
};
|
|
217
484
|
}
|
|
218
|
-
|
|
485
|
+
finally {
|
|
486
|
+
await removeHostCapabilityPendingRuntime(hostCapabilityPendingDir);
|
|
487
|
+
}
|
|
488
|
+
const parentSummary = redactKnownValues(await fsp.readFile(parentSummaryFile, 'utf8').catch(() => ''), outputSecretValues);
|
|
219
489
|
await fsp.rm(parentSummaryFile, { force: true }).catch(() => undefined);
|
|
220
|
-
const
|
|
221
|
-
const
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
? ['
|
|
226
|
-
: processResult.
|
|
227
|
-
? []
|
|
228
|
-
:
|
|
490
|
+
const hostCapabilityEvidence = confineHostCapabilityEvidenceSecrets(hostCapabilityCollector.finish(processResult.stdout), outputSecretValues);
|
|
491
|
+
const stdout = summarizeCodexJsonlOutput(processResult.stdout, outputSecretValues);
|
|
492
|
+
const stderr = redactKnownValues(processResult.stderr, outputSecretValues).slice(-12_000);
|
|
493
|
+
const blockers = uniqueStrings([
|
|
494
|
+
...(processResult.spawnRegistrationFailed === true
|
|
495
|
+
? ['codex_parent_spawn_registration_failed']
|
|
496
|
+
: processResult.timedOut
|
|
497
|
+
? ['codex_parent_timeout']
|
|
498
|
+
: processResult.code === 0
|
|
499
|
+
? []
|
|
500
|
+
: ['codex_parent_exit:' + String(processResult.code ?? 'unknown')]),
|
|
501
|
+
...hostCapabilityEvidence.blockers
|
|
502
|
+
]);
|
|
503
|
+
const ok = processResult.code === 0 && hostCapabilityEvidence.ok;
|
|
504
|
+
const status = processResult.code !== 0
|
|
505
|
+
? 'parent_failed'
|
|
506
|
+
: hostCapabilityEvidence.ok
|
|
507
|
+
? 'parent_completed'
|
|
508
|
+
: 'host_capability_blocked';
|
|
229
509
|
return {
|
|
230
510
|
...base,
|
|
231
|
-
ok
|
|
232
|
-
status
|
|
511
|
+
ok,
|
|
512
|
+
status,
|
|
233
513
|
codex_exit_code: processResult.code,
|
|
234
514
|
parent_summary: parentSummary.trim() || null,
|
|
235
515
|
parent_summary_file: null,
|
|
236
516
|
blockers,
|
|
517
|
+
host_capability_runtime: hostCapabilityRuntime,
|
|
518
|
+
host_capability_evidence: hostCapabilityEvidence,
|
|
237
519
|
tool_output_recovery: toolOutputRecovery,
|
|
238
520
|
process: {
|
|
239
521
|
pid: processResult.pid || null,
|
|
240
522
|
timed_out: processResult.timedOut,
|
|
241
|
-
stdout_tail: stdout,
|
|
523
|
+
stdout_tail: stdout.tail,
|
|
242
524
|
stderr_tail: stderr,
|
|
525
|
+
jsonl_event_count: stdout.event_count,
|
|
526
|
+
jsonl_event_types: stdout.event_types,
|
|
243
527
|
output_truncated: processResult.truncated
|
|
244
528
|
},
|
|
245
529
|
completion_evidence: false
|
|
246
530
|
};
|
|
247
531
|
}
|
|
532
|
+
function summarizeCodexJsonlOutput(text, secretValues) {
|
|
533
|
+
const redacted = redactKnownValues(String(text || ''), secretValues);
|
|
534
|
+
const eventTypes = [];
|
|
535
|
+
let eventCount = 0;
|
|
536
|
+
for (const line of redacted.split(/\r?\n/)) {
|
|
537
|
+
const trimmed = line.trim();
|
|
538
|
+
if (!trimmed)
|
|
539
|
+
continue;
|
|
540
|
+
try {
|
|
541
|
+
const parsed = JSON.parse(trimmed);
|
|
542
|
+
eventCount += 1;
|
|
543
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
544
|
+
const type = String(parsed.type || '').trim();
|
|
545
|
+
if (type)
|
|
546
|
+
eventTypes.push(type);
|
|
547
|
+
}
|
|
548
|
+
continue;
|
|
549
|
+
}
|
|
550
|
+
catch { }
|
|
551
|
+
}
|
|
552
|
+
return {
|
|
553
|
+
tail: '',
|
|
554
|
+
event_count: eventCount,
|
|
555
|
+
event_types: uniqueStrings(eventTypes)
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
function uniqueStrings(values) {
|
|
559
|
+
return [...new Set(values.map((value) => String(value || '').trim()).filter(Boolean))].sort();
|
|
560
|
+
}
|