@sema-ai/core 1.275.1
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/CHANGELOG.md +5433 -0
- package/LICENSE +27 -0
- package/NOTICE.md +30 -0
- package/README.md +1040 -0
- package/dist/agents/agent-definition.d.ts +10 -0
- package/dist/agents/agent-definition.d.ts.map +1 -0
- package/dist/agents/agent-definition.js +18 -0
- package/dist/agents/agent-definition.js.map +1 -0
- package/dist/agents/builtin-agents.d.ts +69 -0
- package/dist/agents/builtin-agents.d.ts.map +1 -0
- package/dist/agents/builtin-agents.js +177 -0
- package/dist/agents/builtin-agents.js.map +1 -0
- package/dist/agents/cascade.d.ts +101 -0
- package/dist/agents/cascade.d.ts.map +1 -0
- package/dist/agents/cascade.js +189 -0
- package/dist/agents/cascade.js.map +1 -0
- package/dist/agents/observer.d.ts +209 -0
- package/dist/agents/observer.d.ts.map +1 -0
- package/dist/agents/observer.js +495 -0
- package/dist/agents/observer.js.map +1 -0
- package/dist/agents/repair-loop.d.ts +236 -0
- package/dist/agents/repair-loop.d.ts.map +1 -0
- package/dist/agents/repair-loop.js +293 -0
- package/dist/agents/repair-loop.js.map +1 -0
- package/dist/agents/session-util.d.ts +8 -0
- package/dist/agents/session-util.d.ts.map +1 -0
- package/dist/agents/session-util.js +9 -0
- package/dist/agents/session-util.js.map +1 -0
- package/dist/agents/subagent-steps.d.ts +93 -0
- package/dist/agents/subagent-steps.d.ts.map +1 -0
- package/dist/agents/subagent-steps.js +206 -0
- package/dist/agents/subagent-steps.js.map +1 -0
- package/dist/agents/subagent.d.ts +441 -0
- package/dist/agents/subagent.d.ts.map +1 -0
- package/dist/agents/subagent.js +2492 -0
- package/dist/agents/subagent.js.map +1 -0
- package/dist/agents/suspend-guard.d.ts +35 -0
- package/dist/agents/suspend-guard.d.ts.map +1 -0
- package/dist/agents/suspend-guard.js +48 -0
- package/dist/agents/suspend-guard.js.map +1 -0
- package/dist/agents/teacher.d.ts +137 -0
- package/dist/agents/teacher.d.ts.map +1 -0
- package/dist/agents/teacher.js +575 -0
- package/dist/agents/teacher.js.map +1 -0
- package/dist/agents/team.d.ts +211 -0
- package/dist/agents/team.d.ts.map +1 -0
- package/dist/agents/team.js +293 -0
- package/dist/agents/team.js.map +1 -0
- package/dist/agents/tool-filter.d.ts +29 -0
- package/dist/agents/tool-filter.d.ts.map +1 -0
- package/dist/agents/tool-filter.js +50 -0
- package/dist/agents/tool-filter.js.map +1 -0
- package/dist/agents/verify.d.ts +177 -0
- package/dist/agents/verify.d.ts.map +1 -0
- package/dist/agents/verify.js +305 -0
- package/dist/agents/verify.js.map +1 -0
- package/dist/bench/metrics.d.ts +714 -0
- package/dist/bench/metrics.d.ts.map +1 -0
- package/dist/bench/metrics.js +618 -0
- package/dist/bench/metrics.js.map +1 -0
- package/dist/bin/sema-tb.d.ts +3 -0
- package/dist/bin/sema-tb.d.ts.map +1 -0
- package/dist/bin/sema-tb.js +516 -0
- package/dist/bin/sema-tb.js.map +1 -0
- package/dist/bin/tb-env.d.ts +13 -0
- package/dist/bin/tb-env.d.ts.map +1 -0
- package/dist/bin/tb-env.js +26 -0
- package/dist/bin/tb-env.js.map +1 -0
- package/dist/brain/anthropic.d.ts +46 -0
- package/dist/brain/anthropic.d.ts.map +1 -0
- package/dist/brain/anthropic.js +830 -0
- package/dist/brain/anthropic.js.map +1 -0
- package/dist/brain/circuit-breaker.d.ts +46 -0
- package/dist/brain/circuit-breaker.d.ts.map +1 -0
- package/dist/brain/circuit-breaker.js +173 -0
- package/dist/brain/circuit-breaker.js.map +1 -0
- package/dist/brain/degrading.d.ts +98 -0
- package/dist/brain/degrading.d.ts.map +1 -0
- package/dist/brain/degrading.js +249 -0
- package/dist/brain/degrading.js.map +1 -0
- package/dist/brain/errors.d.ts +31 -0
- package/dist/brain/errors.d.ts.map +1 -0
- package/dist/brain/errors.js +58 -0
- package/dist/brain/errors.js.map +1 -0
- package/dist/brain/failover.d.ts +18 -0
- package/dist/brain/failover.d.ts.map +1 -0
- package/dist/brain/failover.js +118 -0
- package/dist/brain/failover.js.map +1 -0
- package/dist/brain/model-presets.d.ts +36 -0
- package/dist/brain/model-presets.d.ts.map +1 -0
- package/dist/brain/model-presets.js +54 -0
- package/dist/brain/model-presets.js.map +1 -0
- package/dist/brain/openai.d.ts +43 -0
- package/dist/brain/openai.d.ts.map +1 -0
- package/dist/brain/openai.js +784 -0
- package/dist/brain/openai.js.map +1 -0
- package/dist/brain/reasoning.d.ts +138 -0
- package/dist/brain/reasoning.d.ts.map +1 -0
- package/dist/brain/reasoning.js +146 -0
- package/dist/brain/reasoning.js.map +1 -0
- package/dist/brain/repetition.d.ts +60 -0
- package/dist/brain/repetition.d.ts.map +1 -0
- package/dist/brain/repetition.js +121 -0
- package/dist/brain/repetition.js.map +1 -0
- package/dist/brain/request-params.d.ts +29 -0
- package/dist/brain/request-params.d.ts.map +1 -0
- package/dist/brain/request-params.js +78 -0
- package/dist/brain/request-params.js.map +1 -0
- package/dist/brain/retry.d.ts +18 -0
- package/dist/brain/retry.d.ts.map +1 -0
- package/dist/brain/retry.js +42 -0
- package/dist/brain/retry.js.map +1 -0
- package/dist/brain/routing.d.ts +19 -0
- package/dist/brain/routing.d.ts.map +1 -0
- package/dist/brain/routing.js +44 -0
- package/dist/brain/routing.js.map +1 -0
- package/dist/brain/status-sink.d.ts +46 -0
- package/dist/brain/status-sink.d.ts.map +1 -0
- package/dist/brain/status-sink.js +36 -0
- package/dist/brain/status-sink.js.map +1 -0
- package/dist/brain/stream-engine.d.ts +85 -0
- package/dist/brain/stream-engine.d.ts.map +1 -0
- package/dist/brain/stream-engine.js +391 -0
- package/dist/brain/stream-engine.js.map +1 -0
- package/dist/brain/timeout.d.ts +44 -0
- package/dist/brain/timeout.d.ts.map +1 -0
- package/dist/brain/timeout.js +41 -0
- package/dist/brain/timeout.js.map +1 -0
- package/dist/brain/tool-call-repair.d.ts +15 -0
- package/dist/brain/tool-call-repair.d.ts.map +1 -0
- package/dist/brain/tool-call-repair.js +67 -0
- package/dist/brain/tool-call-repair.js.map +1 -0
- package/dist/brain/walltime.d.ts +14 -0
- package/dist/brain/walltime.d.ts.map +1 -0
- package/dist/brain/walltime.js +14 -0
- package/dist/brain/walltime.js.map +1 -0
- package/dist/core/arg-summary.d.ts +19 -0
- package/dist/core/arg-summary.d.ts.map +1 -0
- package/dist/core/arg-summary.js +96 -0
- package/dist/core/arg-summary.js.map +1 -0
- package/dist/core/ask-question.d.ts +113 -0
- package/dist/core/ask-question.d.ts.map +1 -0
- package/dist/core/ask-question.js +246 -0
- package/dist/core/ask-question.js.map +1 -0
- package/dist/core/auto-compaction.d.ts +341 -0
- package/dist/core/auto-compaction.d.ts.map +1 -0
- package/dist/core/auto-compaction.js +495 -0
- package/dist/core/auto-compaction.js.map +1 -0
- package/dist/core/auto-promote.d.ts +126 -0
- package/dist/core/auto-promote.d.ts.map +1 -0
- package/dist/core/auto-promote.js +171 -0
- package/dist/core/auto-promote.js.map +1 -0
- package/dist/core/background-shell.d.ts +128 -0
- package/dist/core/background-shell.d.ts.map +1 -0
- package/dist/core/background-shell.js +42 -0
- package/dist/core/background-shell.js.map +1 -0
- package/dist/core/cache-break-detector.d.ts +63 -0
- package/dist/core/cache-break-detector.d.ts.map +1 -0
- package/dist/core/cache-break-detector.js +0 -0
- package/dist/core/cache-break-detector.js.map +1 -0
- package/dist/core/canonical-json.d.ts +45 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +132 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/checkpoint-store.d.ts +1101 -0
- package/dist/core/checkpoint-store.d.ts.map +1 -0
- package/dist/core/checkpoint-store.js +514 -0
- package/dist/core/checkpoint-store.js.map +1 -0
- package/dist/core/consolidate-scope.d.ts +94 -0
- package/dist/core/consolidate-scope.d.ts.map +1 -0
- package/dist/core/consolidate-scope.js +158 -0
- package/dist/core/consolidate-scope.js.map +1 -0
- package/dist/core/context-edit.d.ts +82 -0
- package/dist/core/context-edit.d.ts.map +1 -0
- package/dist/core/context-edit.js +149 -0
- package/dist/core/context-edit.js.map +1 -0
- package/dist/core/context-guard.d.ts +43 -0
- package/dist/core/context-guard.d.ts.map +1 -0
- package/dist/core/context-guard.js +171 -0
- package/dist/core/context-guard.js.map +1 -0
- package/dist/core/dynamic-recall.d.ts +100 -0
- package/dist/core/dynamic-recall.d.ts.map +1 -0
- package/dist/core/dynamic-recall.js +108 -0
- package/dist/core/dynamic-recall.js.map +1 -0
- package/dist/core/exec-gate.d.ts +74 -0
- package/dist/core/exec-gate.d.ts.map +1 -0
- package/dist/core/exec-gate.js +143 -0
- package/dist/core/exec-gate.js.map +1 -0
- package/dist/core/exec-output-tail.d.ts +37 -0
- package/dist/core/exec-output-tail.d.ts.map +1 -0
- package/dist/core/exec-output-tail.js +63 -0
- package/dist/core/exec-output-tail.js.map +1 -0
- package/dist/core/file-snapshot-store.d.ts +137 -0
- package/dist/core/file-snapshot-store.d.ts.map +1 -0
- package/dist/core/file-snapshot-store.js +319 -0
- package/dist/core/file-snapshot-store.js.map +1 -0
- package/dist/core/git-worktree-env.d.ts +41 -0
- package/dist/core/git-worktree-env.d.ts.map +1 -0
- package/dist/core/git-worktree-env.js +64 -0
- package/dist/core/git-worktree-env.js.map +1 -0
- package/dist/core/hooks.d.ts +372 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +269 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/lsp-diagnostics.d.ts +74 -0
- package/dist/core/lsp-diagnostics.d.ts.map +1 -0
- package/dist/core/lsp-diagnostics.js +125 -0
- package/dist/core/lsp-diagnostics.js.map +1 -0
- package/dist/core/lsp-protocol.d.ts +28 -0
- package/dist/core/lsp-protocol.d.ts.map +1 -0
- package/dist/core/lsp-protocol.js +179 -0
- package/dist/core/lsp-protocol.js.map +1 -0
- package/dist/core/lsp-session.d.ts +56 -0
- package/dist/core/lsp-session.d.ts.map +1 -0
- package/dist/core/lsp-session.js +185 -0
- package/dist/core/lsp-session.js.map +1 -0
- package/dist/core/lsp.d.ts +132 -0
- package/dist/core/lsp.d.ts.map +1 -0
- package/dist/core/lsp.js +147 -0
- package/dist/core/lsp.js.map +1 -0
- package/dist/core/mcp.d.ts +294 -0
- package/dist/core/mcp.d.ts.map +1 -0
- package/dist/core/mcp.js +992 -0
- package/dist/core/mcp.js.map +1 -0
- package/dist/core/media-byte-cap.d.ts +34 -0
- package/dist/core/media-byte-cap.d.ts.map +1 -0
- package/dist/core/media-byte-cap.js +76 -0
- package/dist/core/media-byte-cap.js.map +1 -0
- package/dist/core/memory-engine/data-plane.d.ts +103 -0
- package/dist/core/memory-engine/data-plane.d.ts.map +1 -0
- package/dist/core/memory-engine/data-plane.js +272 -0
- package/dist/core/memory-engine/data-plane.js.map +1 -0
- package/dist/core/memory-engine/dual-root.d.ts +40 -0
- package/dist/core/memory-engine/dual-root.d.ts.map +1 -0
- package/dist/core/memory-engine/dual-root.js +95 -0
- package/dist/core/memory-engine/dual-root.js.map +1 -0
- package/dist/core/memory-engine/engine.d.ts +161 -0
- package/dist/core/memory-engine/engine.d.ts.map +1 -0
- package/dist/core/memory-engine/engine.js +1110 -0
- package/dist/core/memory-engine/engine.js.map +1 -0
- package/dist/core/memory-engine/file-backend.d.ts +162 -0
- package/dist/core/memory-engine/file-backend.d.ts.map +1 -0
- package/dist/core/memory-engine/file-backend.js +948 -0
- package/dist/core/memory-engine/file-backend.js.map +1 -0
- package/dist/core/memory-engine/frontmatter.d.ts +24 -0
- package/dist/core/memory-engine/frontmatter.d.ts.map +1 -0
- package/dist/core/memory-engine/frontmatter.js +135 -0
- package/dist/core/memory-engine/frontmatter.js.map +1 -0
- package/dist/core/memory-engine/index.d.ts +13 -0
- package/dist/core/memory-engine/index.d.ts.map +1 -0
- package/dist/core/memory-engine/index.js +28 -0
- package/dist/core/memory-engine/index.js.map +1 -0
- package/dist/core/memory-engine/layout.d.ts +123 -0
- package/dist/core/memory-engine/layout.d.ts.map +1 -0
- package/dist/core/memory-engine/layout.js +643 -0
- package/dist/core/memory-engine/layout.js.map +1 -0
- package/dist/core/memory-engine/memory-backend-contract.d.ts +22 -0
- package/dist/core/memory-engine/memory-backend-contract.d.ts.map +1 -0
- package/dist/core/memory-engine/memory-backend-contract.js +271 -0
- package/dist/core/memory-engine/memory-backend-contract.js.map +1 -0
- package/dist/core/memory-engine/migrate.d.ts +17 -0
- package/dist/core/memory-engine/migrate.d.ts.map +1 -0
- package/dist/core/memory-engine/migrate.js +35 -0
- package/dist/core/memory-engine/migrate.js.map +1 -0
- package/dist/core/memory-engine/scan.d.ts +20 -0
- package/dist/core/memory-engine/scan.d.ts.map +1 -0
- package/dist/core/memory-engine/scan.js +84 -0
- package/dist/core/memory-engine/scan.js.map +1 -0
- package/dist/core/memory-engine/scope-contract.d.ts +104 -0
- package/dist/core/memory-engine/scope-contract.d.ts.map +1 -0
- package/dist/core/memory-engine/scope-contract.js +288 -0
- package/dist/core/memory-engine/scope-contract.js.map +1 -0
- package/dist/core/memory-engine/sync-client.d.ts +100 -0
- package/dist/core/memory-engine/sync-client.d.ts.map +1 -0
- package/dist/core/memory-engine/sync-client.js +328 -0
- package/dist/core/memory-engine/sync-client.js.map +1 -0
- package/dist/core/memory-engine/sync.d.ts +97 -0
- package/dist/core/memory-engine/sync.d.ts.map +1 -0
- package/dist/core/memory-engine/sync.js +91 -0
- package/dist/core/memory-engine/sync.js.map +1 -0
- package/dist/core/memory-engine/types.d.ts +279 -0
- package/dist/core/memory-engine/types.d.ts.map +1 -0
- package/dist/core/memory-engine/types.js +9 -0
- package/dist/core/memory-engine/types.js.map +1 -0
- package/dist/core/memory-recall.d.ts +261 -0
- package/dist/core/memory-recall.d.ts.map +1 -0
- package/dist/core/memory-recall.js +600 -0
- package/dist/core/memory-recall.js.map +1 -0
- package/dist/core/memory-vector.d.ts +24 -0
- package/dist/core/memory-vector.d.ts.map +1 -0
- package/dist/core/memory-vector.js +51 -0
- package/dist/core/memory-vector.js.map +1 -0
- package/dist/core/memory.d.ts +502 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +881 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/message-utils.d.ts +7 -0
- package/dist/core/message-utils.d.ts.map +1 -0
- package/dist/core/message-utils.js +10 -0
- package/dist/core/message-utils.js.map +1 -0
- package/dist/core/oracle-isolation.d.ts +85 -0
- package/dist/core/oracle-isolation.d.ts.map +1 -0
- package/dist/core/oracle-isolation.js +121 -0
- package/dist/core/oracle-isolation.js.map +1 -0
- package/dist/core/permission-rules.d.ts +102 -0
- package/dist/core/permission-rules.d.ts.map +1 -0
- package/dist/core/permission-rules.js +357 -0
- package/dist/core/permission-rules.js.map +1 -0
- package/dist/core/present-plan-tool.d.ts +28 -0
- package/dist/core/present-plan-tool.d.ts.map +1 -0
- package/dist/core/present-plan-tool.js +119 -0
- package/dist/core/present-plan-tool.js.map +1 -0
- package/dist/core/pricing.d.ts +48 -0
- package/dist/core/pricing.d.ts.map +1 -0
- package/dist/core/pricing.js +46 -0
- package/dist/core/pricing.js.map +1 -0
- package/dist/core/property-harness.d.ts +126 -0
- package/dist/core/property-harness.d.ts.map +1 -0
- package/dist/core/property-harness.js +192 -0
- package/dist/core/property-harness.js.map +1 -0
- package/dist/core/push-queue.d.ts +10 -0
- package/dist/core/push-queue.d.ts.map +1 -0
- package/dist/core/push-queue.js +42 -0
- package/dist/core/push-queue.js.map +1 -0
- package/dist/core/remote-env.d.ts +432 -0
- package/dist/core/remote-env.d.ts.map +1 -0
- package/dist/core/remote-env.js +77 -0
- package/dist/core/remote-env.js.map +1 -0
- package/dist/core/roles.d.ts +74 -0
- package/dist/core/roles.d.ts.map +1 -0
- package/dist/core/roles.js +272 -0
- package/dist/core/roles.js.map +1 -0
- package/dist/core/runner/active-skill-scope.d.ts +64 -0
- package/dist/core/runner/active-skill-scope.d.ts.map +1 -0
- package/dist/core/runner/active-skill-scope.js +197 -0
- package/dist/core/runner/active-skill-scope.js.map +1 -0
- package/dist/core/runner/assemble-result.d.ts +191 -0
- package/dist/core/runner/assemble-result.d.ts.map +1 -0
- package/dist/core/runner/assemble-result.js +250 -0
- package/dist/core/runner/assemble-result.js.map +1 -0
- package/dist/core/runner/call-cap.d.ts +130 -0
- package/dist/core/runner/call-cap.d.ts.map +1 -0
- package/dist/core/runner/call-cap.js +151 -0
- package/dist/core/runner/call-cap.js.map +1 -0
- package/dist/core/runner/grounding-signal.d.ts +12 -0
- package/dist/core/runner/grounding-signal.d.ts.map +1 -0
- package/dist/core/runner/grounding-signal.js +94 -0
- package/dist/core/runner/grounding-signal.js.map +1 -0
- package/dist/core/runner/image.d.ts +23 -0
- package/dist/core/runner/image.d.ts.map +1 -0
- package/dist/core/runner/image.js +151 -0
- package/dist/core/runner/image.js.map +1 -0
- package/dist/core/runner/memory-consolidation.d.ts +112 -0
- package/dist/core/runner/memory-consolidation.d.ts.map +1 -0
- package/dist/core/runner/memory-consolidation.js +372 -0
- package/dist/core/runner/memory-consolidation.js.map +1 -0
- package/dist/core/runner/prepare-task.d.ts +583 -0
- package/dist/core/runner/prepare-task.d.ts.map +1 -0
- package/dist/core/runner/prepare-task.js +3612 -0
- package/dist/core/runner/prepare-task.js.map +1 -0
- package/dist/core/runner/prompt-suggestions.d.ts +33 -0
- package/dist/core/runner/prompt-suggestions.d.ts.map +1 -0
- package/dist/core/runner/prompt-suggestions.js +116 -0
- package/dist/core/runner/prompt-suggestions.js.map +1 -0
- package/dist/core/runner/runtask.d.ts +274 -0
- package/dist/core/runner/runtask.d.ts.map +1 -0
- package/dist/core/runner/runtask.js +4606 -0
- package/dist/core/runner/runtask.js.map +1 -0
- package/dist/core/runner/session-rule-policy.d.ts +28 -0
- package/dist/core/runner/session-rule-policy.d.ts.map +1 -0
- package/dist/core/runner/session-rule-policy.js +110 -0
- package/dist/core/runner/session-rule-policy.js.map +1 -0
- package/dist/core/runner/strict-output-schema.d.ts +36 -0
- package/dist/core/runner/strict-output-schema.d.ts.map +1 -0
- package/dist/core/runner/strict-output-schema.js +365 -0
- package/dist/core/runner/strict-output-schema.js.map +1 -0
- package/dist/core/runner/synthetic-tools.d.ts +72 -0
- package/dist/core/runner/synthetic-tools.d.ts.map +1 -0
- package/dist/core/runner/synthetic-tools.js +203 -0
- package/dist/core/runner/synthetic-tools.js.map +1 -0
- package/dist/core/runner/tool-disclosure.d.ts +117 -0
- package/dist/core/runner/tool-disclosure.d.ts.map +1 -0
- package/dist/core/runner/tool-disclosure.js +0 -0
- package/dist/core/runner/tool-disclosure.js.map +1 -0
- package/dist/core/runner/turn-attachments.d.ts +381 -0
- package/dist/core/runner/turn-attachments.d.ts.map +1 -0
- package/dist/core/runner/turn-attachments.js +596 -0
- package/dist/core/runner/turn-attachments.js.map +1 -0
- package/dist/core/runner/usage-accounting.d.ts +35 -0
- package/dist/core/runner/usage-accounting.d.ts.map +1 -0
- package/dist/core/runner/usage-accounting.js +45 -0
- package/dist/core/runner/usage-accounting.js.map +1 -0
- package/dist/core/runtime.d.ts +9 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +17 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/safety-axis-vocab.d.ts +33 -0
- package/dist/core/safety-axis-vocab.d.ts.map +1 -0
- package/dist/core/safety-axis-vocab.js +35 -0
- package/dist/core/safety-axis-vocab.js.map +1 -0
- package/dist/core/safety-merge-corpus.d.ts +48 -0
- package/dist/core/safety-merge-corpus.d.ts.map +1 -0
- package/dist/core/safety-merge-corpus.js +203 -0
- package/dist/core/safety-merge-corpus.js.map +1 -0
- package/dist/core/scheduler.d.ts +126 -0
- package/dist/core/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler.js +54 -0
- package/dist/core/scheduler.js.map +1 -0
- package/dist/core/secret-env.d.ts +23 -0
- package/dist/core/secret-env.d.ts.map +1 -0
- package/dist/core/secret-env.js +35 -0
- package/dist/core/secret-env.js.map +1 -0
- package/dist/core/select-model.d.ts +26 -0
- package/dist/core/select-model.d.ts.map +1 -0
- package/dist/core/select-model.js +58 -0
- package/dist/core/select-model.js.map +1 -0
- package/dist/core/sensitive-path-policy.d.ts +24 -0
- package/dist/core/sensitive-path-policy.d.ts.map +1 -0
- package/dist/core/sensitive-path-policy.js +96 -0
- package/dist/core/sensitive-path-policy.js.map +1 -0
- package/dist/core/session-policy-store.d.ts +102 -0
- package/dist/core/session-policy-store.d.ts.map +1 -0
- package/dist/core/session-policy-store.js +177 -0
- package/dist/core/session-policy-store.js.map +1 -0
- package/dist/core/session-reconcile.d.ts +63 -0
- package/dist/core/session-reconcile.d.ts.map +1 -0
- package/dist/core/session-reconcile.js +71 -0
- package/dist/core/session-reconcile.js.map +1 -0
- package/dist/core/session-store.d.ts +99 -0
- package/dist/core/session-store.d.ts.map +1 -0
- package/dist/core/session-store.js +298 -0
- package/dist/core/session-store.js.map +1 -0
- package/dist/core/session.d.ts +144 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +56 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/spec-contract.d.ts +147 -0
- package/dist/core/spec-contract.d.ts.map +1 -0
- package/dist/core/spec-contract.js +340 -0
- package/dist/core/spec-contract.js.map +1 -0
- package/dist/core/strategy-store.d.ts +50 -0
- package/dist/core/strategy-store.d.ts.map +1 -0
- package/dist/core/strategy-store.js +100 -0
- package/dist/core/strategy-store.js.map +1 -0
- package/dist/core/stub-env.d.ts +35 -0
- package/dist/core/stub-env.d.ts.map +1 -0
- package/dist/core/stub-env.js +69 -0
- package/dist/core/stub-env.js.map +1 -0
- package/dist/core/task-notification.d.ts +115 -0
- package/dist/core/task-notification.d.ts.map +1 -0
- package/dist/core/task-notification.js +247 -0
- package/dist/core/task-notification.js.map +1 -0
- package/dist/core/task-outcome.d.ts +80 -0
- package/dist/core/task-outcome.d.ts.map +1 -0
- package/dist/core/task-outcome.js +40 -0
- package/dist/core/task-outcome.js.map +1 -0
- package/dist/core/task-registry.d.ts +349 -0
- package/dist/core/task-registry.d.ts.map +1 -0
- package/dist/core/task-registry.js +1751 -0
- package/dist/core/task-registry.js.map +1 -0
- package/dist/core/tighten-task-spec.d.ts +27 -0
- package/dist/core/tighten-task-spec.d.ts.map +1 -0
- package/dist/core/tighten-task-spec.js +95 -0
- package/dist/core/tighten-task-spec.js.map +1 -0
- package/dist/core/tool-detach.d.ts +31 -0
- package/dist/core/tool-detach.d.ts.map +1 -0
- package/dist/core/tool-detach.js +62 -0
- package/dist/core/tool-detach.js.map +1 -0
- package/dist/core/tool-errors.d.ts +72 -0
- package/dist/core/tool-errors.d.ts.map +1 -0
- package/dist/core/tool-errors.js +194 -0
- package/dist/core/tool-errors.js.map +1 -0
- package/dist/core/tool-name-aliases.d.ts +5 -0
- package/dist/core/tool-name-aliases.d.ts.map +1 -0
- package/dist/core/tool-name-aliases.js +130 -0
- package/dist/core/tool-name-aliases.js.map +1 -0
- package/dist/core/tool-policy.d.ts +295 -0
- package/dist/core/tool-policy.d.ts.map +1 -0
- package/dist/core/tool-policy.js +567 -0
- package/dist/core/tool-policy.js.map +1 -0
- package/dist/core/tool-result-budget.d.ts +44 -0
- package/dist/core/tool-result-budget.d.ts.map +1 -0
- package/dist/core/tool-result-budget.js +140 -0
- package/dist/core/tool-result-budget.js.map +1 -0
- package/dist/core/tool-result-store.d.ts +136 -0
- package/dist/core/tool-result-store.d.ts.map +1 -0
- package/dist/core/tool-result-store.js +219 -0
- package/dist/core/tool-result-store.js.map +1 -0
- package/dist/core/tools.d.ts +14 -0
- package/dist/core/tools.d.ts.map +1 -0
- package/dist/core/tools.js +98 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/core/trace.d.ts +340 -0
- package/dist/core/trace.d.ts.map +1 -0
- package/dist/core/trace.js +12 -0
- package/dist/core/trace.js.map +1 -0
- package/dist/core/types.d.ts +2828 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/untrusted-egress.d.ts +32 -0
- package/dist/core/untrusted-egress.d.ts.map +1 -0
- package/dist/core/untrusted-egress.js +49 -0
- package/dist/core/untrusted-egress.js.map +1 -0
- package/dist/core/untrusted-text.d.ts +64 -0
- package/dist/core/untrusted-text.d.ts.map +1 -0
- package/dist/core/untrusted-text.js +119 -0
- package/dist/core/untrusted-text.js.map +1 -0
- package/dist/core/warm-resume.d.ts +23 -0
- package/dist/core/warm-resume.d.ts.map +1 -0
- package/dist/core/warm-resume.js +28 -0
- package/dist/core/warm-resume.js.map +1 -0
- package/dist/core/with-retry.d.ts +43 -0
- package/dist/core/with-retry.d.ts.map +1 -0
- package/dist/core/with-retry.js +59 -0
- package/dist/core/with-retry.js.map +1 -0
- package/dist/core/workflow-journal-store.d.ts +44 -0
- package/dist/core/workflow-journal-store.d.ts.map +1 -0
- package/dist/core/workflow-journal-store.js +47 -0
- package/dist/core/workflow-journal-store.js.map +1 -0
- package/dist/core/workflow-run-store-contract.d.ts +31 -0
- package/dist/core/workflow-run-store-contract.d.ts.map +1 -0
- package/dist/core/workflow-run-store-contract.js +191 -0
- package/dist/core/workflow-run-store-contract.js.map +1 -0
- package/dist/core/workflow-run-store.d.ts +149 -0
- package/dist/core/workflow-run-store.d.ts.map +1 -0
- package/dist/core/workflow-run-store.js +110 -0
- package/dist/core/workflow-run-store.js.map +1 -0
- package/dist/engine/compaction/compaction.d.ts +139 -0
- package/dist/engine/compaction/compaction.d.ts.map +1 -0
- package/dist/engine/compaction/compaction.js +1030 -0
- package/dist/engine/compaction/compaction.js.map +1 -0
- package/dist/engine/compaction/utils.d.ts +45 -0
- package/dist/engine/compaction/utils.d.ts.map +1 -0
- package/dist/engine/compaction/utils.js +203 -0
- package/dist/engine/compaction/utils.js.map +1 -0
- package/dist/engine/execution-env/kill-tree.d.ts +20 -0
- package/dist/engine/execution-env/kill-tree.d.ts.map +1 -0
- package/dist/engine/execution-env/kill-tree.js +183 -0
- package/dist/engine/execution-env/kill-tree.js.map +1 -0
- package/dist/engine/execution-env/node-execution-env.d.ts +133 -0
- package/dist/engine/execution-env/node-execution-env.d.ts.map +1 -0
- package/dist/engine/execution-env/node-execution-env.js +1031 -0
- package/dist/engine/execution-env/node-execution-env.js.map +1 -0
- package/dist/engine/harness/agent-harness.d.ts +174 -0
- package/dist/engine/harness/agent-harness.d.ts.map +1 -0
- package/dist/engine/harness/agent-harness.js +1053 -0
- package/dist/engine/harness/agent-harness.js.map +1 -0
- package/dist/engine/harness/messages.d.ts +17 -0
- package/dist/engine/harness/messages.d.ts.map +1 -0
- package/dist/engine/harness/messages.js +122 -0
- package/dist/engine/harness/messages.js.map +1 -0
- package/dist/engine/harness/types.d.ts +713 -0
- package/dist/engine/harness/types.d.ts.map +1 -0
- package/dist/engine/harness/types.js +100 -0
- package/dist/engine/harness/types.js.map +1 -0
- package/dist/engine/llm/diagnostics.d.ts +23 -0
- package/dist/engine/llm/diagnostics.d.ts.map +1 -0
- package/dist/engine/llm/diagnostics.js +32 -0
- package/dist/engine/llm/diagnostics.js.map +1 -0
- package/dist/engine/llm/event-stream.d.ts +25 -0
- package/dist/engine/llm/event-stream.d.ts.map +1 -0
- package/dist/engine/llm/event-stream.js +103 -0
- package/dist/engine/llm/event-stream.js.map +1 -0
- package/dist/engine/llm/index.d.ts +12 -0
- package/dist/engine/llm/index.d.ts.map +1 -0
- package/dist/engine/llm/index.js +12 -0
- package/dist/engine/llm/index.js.map +1 -0
- package/dist/engine/llm/types.d.ts +753 -0
- package/dist/engine/llm/types.d.ts.map +1 -0
- package/dist/engine/llm/types.js +2 -0
- package/dist/engine/llm/types.js.map +1 -0
- package/dist/engine/llm/validation.d.ts +8 -0
- package/dist/engine/llm/validation.d.ts.map +1 -0
- package/dist/engine/llm/validation.js +318 -0
- package/dist/engine/llm/validation.js.map +1 -0
- package/dist/engine/loop/agent-loop.d.ts +74 -0
- package/dist/engine/loop/agent-loop.d.ts.map +1 -0
- package/dist/engine/loop/agent-loop.js +1490 -0
- package/dist/engine/loop/agent-loop.js.map +1 -0
- package/dist/engine/loop/runtime-deps.d.ts +17 -0
- package/dist/engine/loop/runtime-deps.d.ts.map +1 -0
- package/dist/engine/loop/runtime-deps.js +21 -0
- package/dist/engine/loop/runtime-deps.js.map +1 -0
- package/dist/engine/loop/types.d.ts +609 -0
- package/dist/engine/loop/types.d.ts.map +1 -0
- package/dist/engine/loop/types.js +2 -0
- package/dist/engine/loop/types.js.map +1 -0
- package/dist/engine/lsp/frame-decoder.d.ts +16 -0
- package/dist/engine/lsp/frame-decoder.d.ts.map +1 -0
- package/dist/engine/lsp/frame-decoder.js +53 -0
- package/dist/engine/lsp/frame-decoder.js.map +1 -0
- package/dist/engine/lsp/node-lsp-manager.d.ts +105 -0
- package/dist/engine/lsp/node-lsp-manager.d.ts.map +1 -0
- package/dist/engine/lsp/node-lsp-manager.js +343 -0
- package/dist/engine/lsp/node-lsp-manager.js.map +1 -0
- package/dist/engine/lsp/stdio-lsp-transport.d.ts +37 -0
- package/dist/engine/lsp/stdio-lsp-transport.d.ts.map +1 -0
- package/dist/engine/lsp/stdio-lsp-transport.js +185 -0
- package/dist/engine/lsp/stdio-lsp-transport.js.map +1 -0
- package/dist/engine/session/import-validate.d.ts +44 -0
- package/dist/engine/session/import-validate.d.ts.map +1 -0
- package/dist/engine/session/import-validate.js +92 -0
- package/dist/engine/session/import-validate.js.map +1 -0
- package/dist/engine/session/memory-repo.d.ts +25 -0
- package/dist/engine/session/memory-repo.d.ts.map +1 -0
- package/dist/engine/session/memory-repo.js +59 -0
- package/dist/engine/session/memory-repo.js.map +1 -0
- package/dist/engine/session/memory-storage.d.ts +14 -0
- package/dist/engine/session/memory-storage.d.ts.map +1 -0
- package/dist/engine/session/memory-storage.js +17 -0
- package/dist/engine/session/memory-storage.js.map +1 -0
- package/dist/engine/session/repo-utils.d.ts +11 -0
- package/dist/engine/session/repo-utils.d.ts.map +1 -0
- package/dist/engine/session/repo-utils.js +40 -0
- package/dist/engine/session/repo-utils.js.map +1 -0
- package/dist/engine/session/session.d.ts +34 -0
- package/dist/engine/session/session.d.ts.map +1 -0
- package/dist/engine/session/session.js +227 -0
- package/dist/engine/session/session.js.map +1 -0
- package/dist/engine/session/storage-base.d.ts +38 -0
- package/dist/engine/session/storage-base.d.ts.map +1 -0
- package/dist/engine/session/storage-base.js +157 -0
- package/dist/engine/session/storage-base.js.map +1 -0
- package/dist/engine/session/timestamps.d.ts +3 -0
- package/dist/engine/session/timestamps.d.ts.map +1 -0
- package/dist/engine/session/timestamps.js +15 -0
- package/dist/engine/session/timestamps.js.map +1 -0
- package/dist/engine/session/uuid.d.ts +2 -0
- package/dist/engine/session/uuid.d.ts.map +1 -0
- package/dist/engine/session/uuid.js +50 -0
- package/dist/engine/session/uuid.js.map +1 -0
- package/dist/index.d.ts +160 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +374 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/harness.d.ts +26 -0
- package/dist/internal/harness.d.ts.map +1 -0
- package/dist/internal/harness.js +24 -0
- package/dist/internal/harness.js.map +1 -0
- package/dist/internal/llm.d.ts +9 -0
- package/dist/internal/llm.d.ts.map +1 -0
- package/dist/internal/llm.js +8 -0
- package/dist/internal/llm.js.map +1 -0
- package/dist/orchestration/builtin-workflows.d.ts +44 -0
- package/dist/orchestration/builtin-workflows.d.ts.map +1 -0
- package/dist/orchestration/builtin-workflows.js +165 -0
- package/dist/orchestration/builtin-workflows.js.map +1 -0
- package/dist/orchestration/dev-vm-script-runner.d.ts +24 -0
- package/dist/orchestration/dev-vm-script-runner.d.ts.map +1 -0
- package/dist/orchestration/dev-vm-script-runner.js +106 -0
- package/dist/orchestration/dev-vm-script-runner.js.map +1 -0
- package/dist/orchestration/goal.d.ts +97 -0
- package/dist/orchestration/goal.d.ts.map +1 -0
- package/dist/orchestration/goal.js +248 -0
- package/dist/orchestration/goal.js.map +1 -0
- package/dist/orchestration/run-spec.d.ts +63 -0
- package/dist/orchestration/run-spec.d.ts.map +1 -0
- package/dist/orchestration/run-spec.js +274 -0
- package/dist/orchestration/run-spec.js.map +1 -0
- package/dist/orchestration/run-workflow-tool.d.ts +187 -0
- package/dist/orchestration/run-workflow-tool.d.ts.map +1 -0
- package/dist/orchestration/run-workflow-tool.js +612 -0
- package/dist/orchestration/run-workflow-tool.js.map +1 -0
- package/dist/orchestration/workflow-governance.d.ts +70 -0
- package/dist/orchestration/workflow-governance.d.ts.map +1 -0
- package/dist/orchestration/workflow-governance.js +176 -0
- package/dist/orchestration/workflow-governance.js.map +1 -0
- package/dist/orchestration/workflow-meta.d.ts +41 -0
- package/dist/orchestration/workflow-meta.d.ts.map +1 -0
- package/dist/orchestration/workflow-meta.js +426 -0
- package/dist/orchestration/workflow-meta.js.map +1 -0
- package/dist/orchestration/workflow-observe.d.ts +77 -0
- package/dist/orchestration/workflow-observe.d.ts.map +1 -0
- package/dist/orchestration/workflow-observe.js +177 -0
- package/dist/orchestration/workflow-observe.js.map +1 -0
- package/dist/orchestration/workflow-primitives.d.ts +31 -0
- package/dist/orchestration/workflow-primitives.d.ts.map +1 -0
- package/dist/orchestration/workflow-primitives.js +104 -0
- package/dist/orchestration/workflow-primitives.js.map +1 -0
- package/dist/orchestration/workflow-sandbox-conformance.d.ts +34 -0
- package/dist/orchestration/workflow-sandbox-conformance.d.ts.map +1 -0
- package/dist/orchestration/workflow-sandbox-conformance.js +301 -0
- package/dist/orchestration/workflow-sandbox-conformance.js.map +1 -0
- package/dist/orchestration/workflow-script-runner.d.ts +127 -0
- package/dist/orchestration/workflow-script-runner.d.ts.map +1 -0
- package/dist/orchestration/workflow-script-runner.js +48 -0
- package/dist/orchestration/workflow-script-runner.js.map +1 -0
- package/dist/orchestration/workflow-script-store.d.ts +99 -0
- package/dist/orchestration/workflow-script-store.d.ts.map +1 -0
- package/dist/orchestration/workflow-script-store.js +133 -0
- package/dist/orchestration/workflow-script-store.js.map +1 -0
- package/dist/orchestration/workflow-size-guideline.d.ts +50 -0
- package/dist/orchestration/workflow-size-guideline.d.ts.map +1 -0
- package/dist/orchestration/workflow-size-guideline.js +78 -0
- package/dist/orchestration/workflow-size-guideline.js.map +1 -0
- package/dist/orchestration/workflow.d.ts +624 -0
- package/dist/orchestration/workflow.d.ts.map +1 -0
- package/dist/orchestration/workflow.js +1596 -0
- package/dist/orchestration/workflow.js.map +1 -0
- package/dist/prompts/default.d.ts +474 -0
- package/dist/prompts/default.d.ts.map +1 -0
- package/dist/prompts/default.js +676 -0
- package/dist/prompts/default.js.map +1 -0
- package/dist/prompts/supervisor.d.ts +60 -0
- package/dist/prompts/supervisor.d.ts.map +1 -0
- package/dist/prompts/supervisor.js +162 -0
- package/dist/prompts/supervisor.js.map +1 -0
- package/dist/scenarios/env.d.ts +41 -0
- package/dist/scenarios/env.d.ts.map +1 -0
- package/dist/scenarios/env.js +65 -0
- package/dist/scenarios/env.js.map +1 -0
- package/dist/scenarios/full-body.d.ts +47 -0
- package/dist/scenarios/full-body.d.ts.map +1 -0
- package/dist/scenarios/full-body.js +36 -0
- package/dist/scenarios/full-body.js.map +1 -0
- package/dist/scenarios/scenario-registry.d.ts +107 -0
- package/dist/scenarios/scenario-registry.d.ts.map +1 -0
- package/dist/scenarios/scenario-registry.js +192 -0
- package/dist/scenarios/scenario-registry.js.map +1 -0
- package/dist/scenarios/teacher-quickstart.d.ts +41 -0
- package/dist/scenarios/teacher-quickstart.d.ts.map +1 -0
- package/dist/scenarios/teacher-quickstart.js +32 -0
- package/dist/scenarios/teacher-quickstart.js.map +1 -0
- package/dist/server/http.d.ts +36 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +144 -0
- package/dist/server/http.js.map +1 -0
- package/dist/stores/file/checkpoint-store.d.ts +62 -0
- package/dist/stores/file/checkpoint-store.d.ts.map +1 -0
- package/dist/stores/file/checkpoint-store.js +250 -0
- package/dist/stores/file/checkpoint-store.js.map +1 -0
- package/dist/stores/file/file-snapshot-store.d.ts +43 -0
- package/dist/stores/file/file-snapshot-store.d.ts.map +1 -0
- package/dist/stores/file/file-snapshot-store.js +374 -0
- package/dist/stores/file/file-snapshot-store.js.map +1 -0
- package/dist/stores/file/fs-atomic.d.ts +95 -0
- package/dist/stores/file/fs-atomic.d.ts.map +1 -0
- package/dist/stores/file/fs-atomic.js +415 -0
- package/dist/stores/file/fs-atomic.js.map +1 -0
- package/dist/stores/file/index.d.ts +98 -0
- package/dist/stores/file/index.d.ts.map +1 -0
- package/dist/stores/file/index.js +109 -0
- package/dist/stores/file/index.js.map +1 -0
- package/dist/stores/file/memory-store.d.ts +95 -0
- package/dist/stores/file/memory-store.d.ts.map +1 -0
- package/dist/stores/file/memory-store.js +393 -0
- package/dist/stores/file/memory-store.js.map +1 -0
- package/dist/stores/file/session-policy-store.d.ts +24 -0
- package/dist/stores/file/session-policy-store.d.ts.map +1 -0
- package/dist/stores/file/session-policy-store.js +123 -0
- package/dist/stores/file/session-policy-store.js.map +1 -0
- package/dist/stores/file/session-store.d.ts +34 -0
- package/dist/stores/file/session-store.d.ts.map +1 -0
- package/dist/stores/file/session-store.js +175 -0
- package/dist/stores/file/session-store.js.map +1 -0
- package/dist/stores/file/tool-result-store.d.ts +23 -0
- package/dist/stores/file/tool-result-store.d.ts.map +1 -0
- package/dist/stores/file/tool-result-store.js +61 -0
- package/dist/stores/file/tool-result-store.js.map +1 -0
- package/dist/stores/file/workflow-journal-store.d.ts +36 -0
- package/dist/stores/file/workflow-journal-store.d.ts.map +1 -0
- package/dist/stores/file/workflow-journal-store.js +157 -0
- package/dist/stores/file/workflow-journal-store.js.map +1 -0
- package/dist/stores/file/workflow-run-store.d.ts +58 -0
- package/dist/stores/file/workflow-run-store.d.ts.map +1 -0
- package/dist/stores/file/workflow-run-store.js +178 -0
- package/dist/stores/file/workflow-run-store.js.map +1 -0
- package/dist/stores/pg.d.ts +210 -0
- package/dist/stores/pg.d.ts.map +1 -0
- package/dist/stores/pg.js +652 -0
- package/dist/stores/pg.js.map +1 -0
- package/dist/tools/fs/encoding.d.ts +51 -0
- package/dist/tools/fs/encoding.d.ts.map +1 -0
- package/dist/tools/fs/encoding.js +74 -0
- package/dist/tools/fs/encoding.js.map +1 -0
- package/dist/tools/fs/gh-rate-limit.d.ts +19 -0
- package/dist/tools/fs/gh-rate-limit.d.ts.map +1 -0
- package/dist/tools/fs/gh-rate-limit.js +35 -0
- package/dist/tools/fs/gh-rate-limit.js.map +1 -0
- package/dist/tools/fs/index.d.ts +246 -0
- package/dist/tools/fs/index.d.ts.map +1 -0
- package/dist/tools/fs/index.js +2130 -0
- package/dist/tools/fs/index.js.map +1 -0
- package/dist/tools/fs/pdf.d.ts +106 -0
- package/dist/tools/fs/pdf.d.ts.map +1 -0
- package/dist/tools/fs/pdf.js +178 -0
- package/dist/tools/fs/pdf.js.map +1 -0
- package/dist/tools/fs/repo-map.d.ts +15 -0
- package/dist/tools/fs/repo-map.d.ts.map +1 -0
- package/dist/tools/fs/repo-map.js +251 -0
- package/dist/tools/fs/repo-map.js.map +1 -0
- package/dist/tools/fs/safety.d.ts +168 -0
- package/dist/tools/fs/safety.d.ts.map +1 -0
- package/dist/tools/fs/safety.js +479 -0
- package/dist/tools/fs/safety.js.map +1 -0
- package/dist/tools/fs/search.d.ts +118 -0
- package/dist/tools/fs/search.d.ts.map +1 -0
- package/dist/tools/fs/search.js +650 -0
- package/dist/tools/fs/search.js.map +1 -0
- package/dist/tools/gitea-issue.d.ts +39 -0
- package/dist/tools/gitea-issue.d.ts.map +1 -0
- package/dist/tools/gitea-issue.js +91 -0
- package/dist/tools/gitea-issue.js.map +1 -0
- package/dist/tools/monitor.d.ts +64 -0
- package/dist/tools/monitor.d.ts.map +1 -0
- package/dist/tools/monitor.js +135 -0
- package/dist/tools/monitor.js.map +1 -0
- package/dist/tools/scheduler-tools.d.ts +48 -0
- package/dist/tools/scheduler-tools.d.ts.map +1 -0
- package/dist/tools/scheduler-tools.js +449 -0
- package/dist/tools/scheduler-tools.js.map +1 -0
- package/dist/tools/sql-adapters.d.ts +32 -0
- package/dist/tools/sql-adapters.d.ts.map +1 -0
- package/dist/tools/sql-adapters.js +31 -0
- package/dist/tools/sql-adapters.js.map +1 -0
- package/dist/tools/sql.d.ts +36 -0
- package/dist/tools/sql.d.ts.map +1 -0
- package/dist/tools/sql.js +131 -0
- package/dist/tools/sql.js.map +1 -0
- package/dist/tools/task-list.d.ts +26 -0
- package/dist/tools/task-list.d.ts.map +1 -0
- package/dist/tools/task-list.js +352 -0
- package/dist/tools/task-list.js.map +1 -0
- package/dist/tools/todo.d.ts +11 -0
- package/dist/tools/todo.d.ts.map +1 -0
- package/dist/tools/todo.js +126 -0
- package/dist/tools/todo.js.map +1 -0
- package/dist/tools/web.d.ts +59 -0
- package/dist/tools/web.d.ts.map +1 -0
- package/dist/tools/web.js +607 -0
- package/dist/tools/web.js.map +1 -0
- package/dist/tools/worktree.d.ts +88 -0
- package/dist/tools/worktree.d.ts.map +1 -0
- package/dist/tools/worktree.js +434 -0
- package/dist/tools/worktree.js.map +1 -0
- package/docs/A1-ATTRIBUTION-ROUND1-2026-07-09.md +181 -0
- package/docs/AB-ORACLE-GATE-VERDICT-2026-07-10.md +100 -0
- package/docs/ANCHOR-GAP-INVENTORY-2026-07-09.md +143 -0
- package/docs/ARCHITECTURE.md +125 -0
- package/docs/BUGHUNT-2026-07-05-NIGHT.md +98 -0
- package/docs/BUILD.md +63 -0
- package/docs/CANCEL-ASYNC-ATTRIBUTION-2026-07-09.md +98 -0
- package/docs/CC-198-VS-201-DRIFT-2026-07-09.md +70 -0
- package/docs/CC-BASELINE-FAKE-ZERO-AUDIT-2026-07-09.md +51 -0
- package/docs/CC-DRIFT-198-206-AGENT-TYPES-2026-07-10.md +82 -0
- package/docs/CC-DRIFT-198-206-CHANGELOG-2026-07-10.md +82 -0
- package/docs/CC-DRIFT-198-206-REMINDERS-2026-07-10.md +96 -0
- package/docs/CC-DRIFT-198-206-ROADMAP-2026-07-10.md +110 -0
- package/docs/CC-DRIFT-198-206-TOOL-INVENTORY-2026-07-10.md +53 -0
- package/docs/CC-DRIFT-198-206-USAGE-CONSTANTS-2026-07-10.md +64 -0
- package/docs/CC-DRIFT-198-206-WORKFLOW-2026-07-10.md +83 -0
- package/docs/CC-PARITY-CHECKLIST.md +220 -0
- package/docs/CC-PARITY-DEEP-SWEEP-2026-07-07.md +149 -0
- package/docs/CC-SUBAGENT-PROMPT-STUDY-2026-07-09.md +219 -0
- package/docs/CC-TASK-REMINDER-CADENCE-STUDY-2026-07-09.md +396 -0
- package/docs/CC-TOOL-PARITY-SWEEP-2026-07.md +56 -0
- package/docs/CC-TOOL-PROMPT-DEEP-DIFF-2026-07-08.md +274 -0
- package/docs/CC-TOOLSURFACE-DEEP-DIVE-2026-07-07.md +197 -0
- package/docs/CC206-OBSERVER-ANCHORS-2026-07-11.md +463 -0
- package/docs/CC207-CORE-SWEEP-BACKLOG-2026-07-12.md +155 -0
- package/docs/CENTER-CONTROL-PLANE-SEAM.md +86 -0
- package/docs/CLEANUP-CONTRACT-ANCHOR-2026-07-09.md +83 -0
- package/docs/COLD-START-RSI-2026-07-09.md +72 -0
- package/docs/COMPACTION-LIVE-AUDIT-2026-07-09.md +114 -0
- package/docs/CONTEXT-lifecycle-extension-points-and-stop-attribution.md +71 -0
- package/docs/COREWARS-POLYGLOT-TRIAGE-2026-07-09.md +85 -0
- package/docs/DEADTARGET-OVERFULL-HBOX-2026-07-10.md +92 -0
- package/docs/DEADTARGET-PATH-TRACING-REVERSE-2026-07-10.md +87 -0
- package/docs/DEADTARGET-WINNING-AVG-COREWARS-2026-07-10.md +96 -0
- package/docs/DEEPSEEK-API-LIMITS-PROBE-2026-07-09.md +118 -0
- package/docs/DESIGN-140-MOCK-VERIFY-2026-07-11.md +79 -0
- package/docs/DESIGN-140-VERIFICATION-2026-07-11.md +43 -0
- package/docs/DESIGN-DRAFT-workflow-collab-2026-07-11.md +56 -0
- package/docs/DESIGN-ORACLE-GROUNDING-GATE-2026-07-10.md +167 -0
- package/docs/DESIGN-TFRAG-RECONCILE-SCAFFOLD-2026-07-09.md +102 -0
- package/docs/EXP-PA2-PE-DESIGN-2026-07-11.md +220 -0
- package/docs/EXT-DOGFOOD-2026-07-12.md +50 -0
- package/docs/FINAL-VERIFY-SURFACE-AUDIT-2026-07-09.md +44 -0
- package/docs/FRAG-RECON-INVESTIGATION-2026-07-09.md +183 -0
- package/docs/HANDOFF.md +121 -0
- package/docs/KNOWN-ISSUES.md +96 -0
- package/docs/LEGW-WINDOW-TAX-2026-07-10.md +82 -0
- package/docs/LIVE-PROBE-BATCH-2026-07-11.md +207 -0
- package/docs/M2-CERT-ATTRIBUTION-2026-07-10.md +61 -0
- package/docs/M25-LEG-VARIANCE-ATTRIBUTION-2026-07-10.md +81 -0
- package/docs/MAILMAN-TIMEOUT-ATTRIBUTION-2026-07-10.md +88 -0
- package/docs/MEMORY-BACKEND-DIALECT-NOTES.md +69 -0
- package/docs/MTEB-ESCAPE-HATCH-ATTRIBUTION-2026-07-09.md +57 -0
- package/docs/MTEB-LEADERBOARD-ATTRIBUTION-2026-07-10.md +134 -0
- package/docs/ORACLE-GATE-NEGATIVE-SAMPLE-2026-07-11.md +28 -0
- package/docs/PARITY-CONTEXT-TRANSACTIONS-2026-07-10.md +67 -0
- package/docs/PARITY-PROGRESS-MATRIX-2026-07-10.md +37 -0
- package/docs/PARITY-SPOT-AGENT-TYPES-2026-07-10.md +70 -0
- package/docs/PARITY-SPOT-REMINDERS-2026-07-10.md +144 -0
- package/docs/PARITY-SPOT-TOOL-INVENTORY-2026-07-10.md +61 -0
- package/docs/PARITY-SPOT-USAGE-CONSTANTS-2026-07-10.md +95 -0
- package/docs/PARITY-SPOT-WORKFLOW-2026-07-10.md +93 -0
- package/docs/PASSWORD-RECOVERY-PANEL-VERDICT-2026-07-10.md +62 -0
- package/docs/R8-R9-FINALIZE-COORDINATION-2026-07-09.md +124 -0
- package/docs/REPL-CODE-MODE-EVALUATION-2026-07-10.md +187 -0
- package/docs/REPORT-1249-TARGETED.md +48 -0
- package/docs/RESEARCH-3P-MEMORY-SWAP-2026-07-12.md +273 -0
- package/docs/ROADMAP.md +111 -0
- package/docs/RSI-CLOUD-DEPLOY-2026-07-06.md +289 -0
- package/docs/RSI-PROCESS-AI-COLDSTART-2026-07-11.md +68 -0
- package/docs/S18-THOROUGHNESS-AUDIT-2026-07-09.md +113 -0
- package/docs/SERVICE-INTEGRATION-GUIDE.md +298 -0
- package/docs/SUBAGENT-STREAM-RESILIENCE-PARITY-2026-07-10.md +118 -0
- package/docs/SWEBENCH-PRO-RECON-2026-07-11.md +31 -0
- package/docs/TB-EFFICIENCY-TELEMETRY-2026-07-08.md +114 -0
- package/docs/TB-FAILURE-AUTOPSY-2026-07-05-RERUN.md +67 -0
- package/docs/TB-FAIRNESS-AUDIT-2026-07-08.md +141 -0
- package/docs/TB-FULL-1257-2026-07-08.md +77 -0
- package/docs/TB-LEG-GAP-ATTRIBUTION-1261-1263-2026-07-11.md +154 -0
- package/docs/TB-REGRESSION-DAEMON-KILL-2026-07-08.md +58 -0
- package/docs/TB-RSI-CROSSCHECK-2026-07-06.md +68 -0
- package/docs/TB-RSI-LEDGER.md +30 -0
- package/docs/TB-STABLE-SET-2026-07-08.md +127 -0
- package/docs/TB21-RECON-2026-07-11.md +28 -0
- package/docs/TEST-DESIGN-BATCH-1-2-3.md +97 -0
- package/docs/THIRD-PARTY-INTEGRATION.md +45 -0
- package/docs/TOKEN-ESTIMATE-CALIBRATION-LIVE-2026-07-09.md +102 -0
- package/docs/audit-2026-06-10-/347/254/254/344/272/214/350/275/256-/347/251/272/347/231/275/345/214/272/344/270/216/345/277/230/346/216/245/347/272/277.md +147 -0
- package/docs/audit-2026-06-10-/350/256/241/347/256/227bug/346/211/253/346/217/217.md +163 -0
- package/docs/audit-2026-06-11-/344/277/256/345/244/215/345/244/215/345/256/241/344/270/216/345/233/236/345/275/222/344/270/223/346/211/253.md +95 -0
- package/docs/audit-2026-06-12-design71-P1/346/275/234/344/274/217/351/235/242/350/243/201/345/206/263/344/270/216/345/220/236/351/224/231/345/256/241/350/256/241.md +45 -0
- package/docs/audit-2026-06-12-/345/205/254/345/274/200/346/227/213/351/222/256/346/264/273/346/200/247/344/270/216vendored/346/255/273/350/267/257.md +63 -0
- package/docs/audit-2026-06-15/ADDENDUM-second-pass.md +88 -0
- package/docs/audit-2026-06-15/ARCHITECTURE-AND-ROADMAP.md +187 -0
- package/docs/audit-2026-06-15/DOC-CORRECTIONS.md +105 -0
- package/docs/audit-2026-06-15/INDEX.md +49 -0
- package/docs/audit-2026-06-15/ORCHESTRATION-STATUS.md +98 -0
- package/docs/audit-2026-06-15/PRODUCTION-ISSUES.md +189 -0
- package/docs/audit-2026-06-15/REFERENCES-literature.md +139 -0
- package/docs/audit-2026-06-15/VENDOR-REFACTOR-PLAN.md +96 -0
- package/docs/cc-probe-198/README.md +72 -0
- package/docs/cc-probe-198/STABILITY-AUDIT.md +118 -0
- package/docs/cc-probe-198/live-schema-monitor-worktree-2026-07-09.json +56 -0
- package/docs/cc-probe-198/mount-variants.json +536 -0
- package/docs/cc-probe-198/plan-mode-run.json +1 -0
- package/docs/cc-probe-198/probe-bash-bg.json +224 -0
- package/docs/cc-probe-198/probe-edit-mismatch.json +120 -0
- package/docs/cc-probe-198/probe-read-missing.json +62 -0
- package/docs/cc-probe-198/probe-search-empty.json +127 -0
- package/docs/cc-probe-198/probe-task-family.json +227 -0
- package/docs/cc-probe-198/probes.status +6 -0
- package/docs/cc-probe-198/raw-capture-interactive.json +948 -0
- package/docs/cc-probe-198/raw-capture-print.json +787 -0
- package/docs/cc-probe-198/raw-capture2-interactive.json +948 -0
- package/docs/cc-probe-198/raw-capture2-print.json +787 -0
- package/docs/cc-probe-198/system-prompt.txt +135 -0
- package/docs/cc-probe-198/tools-array.json +962 -0
- package/docs/durability-boundary.md +63 -0
- package/docs/fix-2026-06-10-/350/256/241/347/256/227bug/344/277/256/345/244/215-search/346/211/271.md +75 -0
- package/docs/fix-2026-06-11-/347/254/254/344/272/214/350/275/256-/344/277/256/345/244/215-search/346/211/271.md +62 -0
- package/docs/parity-sweep/REPORT-DYNAMIC.md +97 -0
- package/docs/parity-sweep/REPORT-STATIC-GGB.md +127 -0
- package/docs/parity-sweep/REPORT-STATIC-RWE.md +133 -0
- package/docs/vendor-history.md +385 -0
- package/docs/vendored-upstream-diff-2026-07.md +83 -0
- package/package.json +70 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { DEFAULT_CHARS_PER_TOKEN, estimateContextTokens, estimateTokens } from "../internal/harness.js";
|
|
2
|
+
import { isToolResult, messageRole } from "./message-utils.js";
|
|
3
|
+
/** Fraction of the model's effective window the guard tries to stay under. */
|
|
4
|
+
const GUARD_FRACTION = 0.85;
|
|
5
|
+
function isSummary(m) {
|
|
6
|
+
// "branchSummary" was a second summary role until the design/71 清尾 pass removed the whole
|
|
7
|
+
// (never-produced) branch-summary chain; compaction summaries are the only summary role left.
|
|
8
|
+
return messageRole(m) === "compactionSummary";
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Last-resort, in-task context trim. Proper compaction (LLM summary) runs *between* tasks;
|
|
12
|
+
* this prevents a single task whose internal tool-loop balloons from overflowing the window.
|
|
13
|
+
*
|
|
14
|
+
* Keeps all summary messages (compaction/branch) and the most recent messages that fit the
|
|
15
|
+
* budget, dropping older regular messages at a safe boundary (never starting on an orphan
|
|
16
|
+
* toolResult). Returns the original array when already within budget.
|
|
17
|
+
*
|
|
18
|
+
* design/123 D3 (codex-B1 = fable-M5) — anchored accounting: when `anchoredTotalTokens`
|
|
19
|
+
* (= `estimateContextTokens(messages, charsPerToken).tokens` for the SAME array) is provided, the
|
|
20
|
+
* trigger gate and the internal bookkeeping start from the usage-anchored value instead of the
|
|
21
|
+
* structural sum (which underestimates code/CJK and lets over-window requests through). Dropping a
|
|
22
|
+
* message AFTER the usage anchor reduces the accounted total by its structural estimate; dropping a
|
|
23
|
+
* message AT/BEFORE the anchor reduces it by ZERO (the anchor usage was billed with that content —
|
|
24
|
+
* a request-view drop only pays off on the NEXT request), so the trim keeps cutting deeper until
|
|
25
|
+
* the anchored total meets the budget or only the minimal tail is left. Absent ⇒ legacy structural
|
|
26
|
+
* behavior, byte-identical. `charsPerToken` (design/123 D2): structural coefficient, default 4.
|
|
27
|
+
*/
|
|
28
|
+
export function trimToBudget(messages, budgetTokens, anchoredTotalTokens, charsPerToken) {
|
|
29
|
+
const cpt = charsPerToken ?? DEFAULT_CHARS_PER_TOKEN;
|
|
30
|
+
const anchored = anchoredTotalTokens !== undefined;
|
|
31
|
+
let structuralTotal = 0;
|
|
32
|
+
for (const m of messages) {
|
|
33
|
+
structuralTotal += estimateTokens(m, cpt);
|
|
34
|
+
}
|
|
35
|
+
const total = anchored ? anchoredTotalTokens : structuralTotal;
|
|
36
|
+
if (total <= budgetTokens || messages.length <= 1) {
|
|
37
|
+
return messages;
|
|
38
|
+
}
|
|
39
|
+
// The usage-anchor position (anchored mode only): drops at/before it reduce the accounting by 0.
|
|
40
|
+
const anchorIdx = anchored ? (estimateContextTokens(messages, cpt).lastUsageIndex ?? -1) : -1;
|
|
41
|
+
// Always-kept summary messages and their budget.
|
|
42
|
+
const summaries = messages.filter(isSummary);
|
|
43
|
+
let summaryTokens = 0;
|
|
44
|
+
for (const s of summaries) {
|
|
45
|
+
summaryTokens += estimateTokens(s, cpt);
|
|
46
|
+
}
|
|
47
|
+
// Per-message REDUCTION value in the active coordinate: structural for post-anchor messages,
|
|
48
|
+
// 0 for at/before-anchor messages (legacy mode: anchorIdx = -1 ⇒ all structural, and the tail
|
|
49
|
+
// budget below reduces to the historical `budget - summaryTokens`).
|
|
50
|
+
const nonSummary = [];
|
|
51
|
+
const reductions = [];
|
|
52
|
+
let reductionSum = 0;
|
|
53
|
+
for (let i = 0; i < messages.length; i++) {
|
|
54
|
+
if (isSummary(messages[i]))
|
|
55
|
+
continue;
|
|
56
|
+
nonSummary.push(messages[i]);
|
|
57
|
+
const r = i > anchorIdx ? estimateTokens(messages[i], cpt) : 0;
|
|
58
|
+
reductions.push(r);
|
|
59
|
+
reductionSum += r;
|
|
60
|
+
}
|
|
61
|
+
const requiredReduction = total - budgetTokens; // > 0 here
|
|
62
|
+
let start;
|
|
63
|
+
if (anchored && reductionSum <= requiredReduction) {
|
|
64
|
+
// Even dropping every droppable message cannot bring the anchored total under budget (the whole
|
|
65
|
+
// droppable prefix sits at/before the anchor). Deep-trim to the minimal tail — "keep cleaning
|
|
66
|
+
// until the target is met or nothing clearable remains" (design/123 D3); the next request's
|
|
67
|
+
// fresh usage re-anchors at the real (small) size. If this floor lands on a toolResult, the
|
|
68
|
+
// SHARED turn-alignment below extends it backward to the owning tool-call assistant.
|
|
69
|
+
start = nonSummary.length - 1;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// Walk the non-summary messages from the end, keeping the maximal tail whose dropped-prefix
|
|
73
|
+
// reduction still meets the requirement. In the legacy coordinate `reductionSum - requiredReduction`
|
|
74
|
+
// equals the historical `budgetTokens - summaryTokens` tail budget exactly.
|
|
75
|
+
const tailBudget = Math.max(0, reductionSum - requiredReduction);
|
|
76
|
+
let acc = 0;
|
|
77
|
+
start = nonSummary.length;
|
|
78
|
+
for (let i = nonSummary.length - 1; i >= 0; i--) {
|
|
79
|
+
acc += reductions[i];
|
|
80
|
+
if (acc > tailBudget && i + 1 < nonSummary.length) {
|
|
81
|
+
start = i + 1;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
start = i;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Never begin the kept window on an orphan toolResult (a result whose call was dropped): first
|
|
88
|
+
// prefer dropping the leading orphans forward (budget-friendly, the legacy guard).
|
|
89
|
+
while (start < nonSummary.length && isToolResult(nonSummary[start])) {
|
|
90
|
+
start++;
|
|
91
|
+
}
|
|
92
|
+
if (start >= nonSummary.length) {
|
|
93
|
+
// The ENTIRE tail from the chosen start is toolResults — the design/123 D3 live-caught 400 path
|
|
94
|
+
// ("Messages with role 'tool' must be a response to a preceding message with 'tool_calls'"):
|
|
95
|
+
// requests built right after tool execution END in a toolResult batch, so both the anchored
|
|
96
|
+
// deep-trim floor and the walk branch routinely land inside that trailing batch, and the OLD
|
|
97
|
+
// fallback here kept a single ORPHAN toolResult (its tool-call assistant dropped — API-invalid
|
|
98
|
+
// on strict gateways; "tolerated" only because pre-anchored coordinates rarely reached it).
|
|
99
|
+
// TURN-ALIGN instead: extend BACKWARD over the trailing toolResult batch to include the
|
|
100
|
+
// assistant that issued the tool_calls, keeping one COMPLETE turn tail (may overshoot the
|
|
101
|
+
// budget — validity beats budget, same tradeoff as the findCutPoint A-2 oversized-batch
|
|
102
|
+
// fallback; this also resolves the codex-review MINOR on single-message floor granularity).
|
|
103
|
+
// Only when NO owning assistant exists at all (the whole array is toolResults) keep the last
|
|
104
|
+
// message — the prepare-task belt drops such an orphan before the provider ever sees it.
|
|
105
|
+
start = nonSummary.length - 1;
|
|
106
|
+
while (start > 0 && isToolResult(nonSummary[start])) {
|
|
107
|
+
start--;
|
|
108
|
+
}
|
|
109
|
+
if (isToolResult(nonSummary[start])) {
|
|
110
|
+
start = nonSummary.length - 1;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const keptTail = new Set(nonSummary.slice(start));
|
|
114
|
+
// Rebuild from the ORIGINAL array so chronology holds even if a summary sits *after* a kept message
|
|
115
|
+
// (don't assume every summary precedes the tail — a branch/compaction summary can be interleaved).
|
|
116
|
+
return messages.filter((m) => isSummary(m) || keptTail.has(m));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* design/123 D3 belt (invariant-level, live-caught 16k 400s): the FINAL request view must never
|
|
120
|
+
* contain a toolResult whose tool-call assistant is absent — strict gateways hard-400 on it
|
|
121
|
+
* ("Messages with role 'tool' must be a response to a preceding message with 'tool_calls'"). Every
|
|
122
|
+
* individual producer is turn-aligned (findCutPoint never cuts on a toolResult; trimToBudget
|
|
123
|
+
* turn-aligns its floor), but NO pipeline combination may ship an orphan, so the prepare-task
|
|
124
|
+
* context hook sweeps its output through this last. Deterministic ⇒ byte-stable per request ⇒
|
|
125
|
+
* prefix-cache safe. Returns the SAME array when clean (zero-cost fast path); `dropped` carries a
|
|
126
|
+
* diagnostic per removed orphan (toolCallId + neighbor roles) for onError attribution.
|
|
127
|
+
*/
|
|
128
|
+
export function dropOrphanToolResults(messages) {
|
|
129
|
+
const seenCallIds = new Set();
|
|
130
|
+
let orphanAt = -1;
|
|
131
|
+
for (let i = 0; i < messages.length; i++) {
|
|
132
|
+
const m = messages[i];
|
|
133
|
+
if (m.role === "assistant" && Array.isArray(m.content)) {
|
|
134
|
+
for (const c of m.content) {
|
|
135
|
+
if (c?.type === "toolCall" && typeof c.id === "string")
|
|
136
|
+
seenCallIds.add(c.id);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else if (m.role === "toolResult" && !seenCallIds.has(m.toolCallId ?? "")) {
|
|
140
|
+
orphanAt = i;
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (orphanAt === -1) {
|
|
145
|
+
return { messages, dropped: [] }; // clean — the common case, same array back
|
|
146
|
+
}
|
|
147
|
+
const dropped = [];
|
|
148
|
+
const out = messages.slice(0, orphanAt);
|
|
149
|
+
const roleOf = (i) => i < 0 || i >= messages.length ? "(none)" : (messages[i].role ?? "(unknown)");
|
|
150
|
+
for (let i = orphanAt; i < messages.length; i++) {
|
|
151
|
+
const m = messages[i];
|
|
152
|
+
if (m.role === "assistant" && Array.isArray(m.content)) {
|
|
153
|
+
for (const c of m.content) {
|
|
154
|
+
if (c?.type === "toolCall" && typeof c.id === "string")
|
|
155
|
+
seenCallIds.add(c.id); // keep accumulating past the first orphan
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else if (m.role === "toolResult" && !seenCallIds.has(m.toolCallId ?? "")) {
|
|
159
|
+
dropped.push({ toolCallId: m.toolCallId ?? "(missing)", index: i, prevRole: roleOf(i - 1), nextRole: roleOf(i + 1) });
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
out.push(messages[i]);
|
|
163
|
+
}
|
|
164
|
+
return { messages: out, dropped };
|
|
165
|
+
}
|
|
166
|
+
/** Budget the in-task guard targets for a model. */
|
|
167
|
+
export function guardBudget(model) {
|
|
168
|
+
const window = model.contextTokens ?? model.contextWindow;
|
|
169
|
+
return Math.floor(window * GUARD_FRACTION);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=context-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-guard.js","sourceRoot":"","sources":["../../src/core/context-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE/D,8EAA8E;AAC9E,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B,SAAS,SAAS,CAAC,CAAe;IAChC,0FAA0F;IAC1F,8FAA8F;IAC9F,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAwB,EACxB,YAAoB,EACpB,mBAA4B,EAC5B,aAAsB;IAEtB,MAAM,GAAG,GAAG,aAAa,IAAI,uBAAuB,CAAC;IACrD,MAAM,QAAQ,GAAG,mBAAmB,KAAK,SAAS,CAAC;IACnD,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,eAAe,IAAI,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,mBAAoB,CAAC,CAAC,CAAC,eAAe,CAAC;IAChE,IAAI,KAAK,IAAI,YAAY,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,iGAAiG;IACjG,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9F,iDAAiD;IACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,aAAa,IAAI,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,6FAA6F;IAC7F,8FAA8F;IAC9F,oEAAoE;IACpE,MAAM,UAAU,GAAmB,EAAE,CAAC;IACtC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QACrC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,YAAY,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,iBAAiB,GAAG,KAAK,GAAG,YAAY,CAAC,CAAC,WAAW;IAC3D,IAAI,KAAa,CAAC;IAClB,IAAI,QAAQ,IAAI,YAAY,IAAI,iBAAiB,EAAE,CAAC;QAClD,gGAAgG;QAChG,8FAA8F;QAC9F,4FAA4F;QAC5F,4FAA4F;QAC5F,qFAAqF;QACrF,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,4FAA4F;QAC5F,qGAAqG;QACrG,4EAA4E;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,iBAAiB,CAAC,CAAC;QACjE,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,GAAG,GAAG,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;gBAClD,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IACD,+FAA+F;IAC/F,mFAAmF;IACnF,OAAO,KAAK,GAAG,UAAU,CAAC,MAAM,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACpE,KAAK,EAAE,CAAC;IACV,CAAC;IACD,IAAI,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAC/B,gGAAgG;QAChG,6FAA6F;QAC7F,4FAA4F;QAC5F,6FAA6F;QAC7F,+FAA+F;QAC/F,4FAA4F;QAC5F,wFAAwF;QACxF,0FAA0F;QAC1F,wFAAwF;QACxF,4FAA4F;QAC5F,6FAA6F;QAC7F,yFAAyF;QACzF,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,OAAO,KAAK,GAAG,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACpD,KAAK,EAAE,CAAC;QACV,CAAC;QACD,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACpC,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAElD,oGAAoG;IACpG,mGAAmG;IACnG,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAwB;IAI5D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAA4F,CAAC;QACjH,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,EAAE,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;oBAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3E,QAAQ,GAAG,CAAC,CAAC;YACb,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,2CAA2C;IAC/E,CAAC;IACD,MAAM,OAAO,GAAqF,EAAE,CAAC;IACrG,MAAM,GAAG,GAAmB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CACnC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,QAAQ,CAAC,CAAC,CAAuB,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC;IACtG,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAA4F,CAAC;QACjH,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,EAAE,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ;oBAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0CAA0C;YAC3H,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACtH,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC;IAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { AgentMessage } from "../internal/harness.js";
|
|
2
|
+
import { type MemorySelector, encodeSurfacedKey } from "./memory-recall.js";
|
|
3
|
+
import type { MemoryStore } from "./memory.js";
|
|
4
|
+
/**
|
|
5
|
+
* design/86 §3 缺口 A — DYNAMIC memory re-recall seam (CC `processSessionStartHooks('compact')` parity).
|
|
6
|
+
*
|
|
7
|
+
* PROBLEM (design/86 §3): our memory is a one-shot snapshot taken at task start (`prepareTask` →
|
|
8
|
+
* `selectAndComposeMemory`/`Layered`, injected into the STABLE system prefix). A long task that runs many
|
|
9
|
+
* turns and compacts loses the *fine detail* of its early turns; we never re-select more-relevant memory for
|
|
10
|
+
* the conversation as it has evolved. CC re-evaluates relevant memories after every compaction.
|
|
11
|
+
*
|
|
12
|
+
* THIS SEAM (default OFF, data-gated like Seam C): after a REAL within-task compaction, re-run the EXISTING
|
|
13
|
+
* selector + `selectAndComposeMemory`/`Layered` against the CURRENT conversation context (recent messages),
|
|
14
|
+
* de-dup against everything already surfaced (`priorSurfacedIds`/`priorSurfacedKeys`, the same machinery the
|
|
15
|
+
* initial recall uses), and inject any NEW relevant notes as a TAIL ATTACHMENT user message — NEVER touching
|
|
16
|
+
* the stable system prefix (touching the prefix would break the 90–98% prefix-cache the whole stable-prefix
|
|
17
|
+
* design rests on).
|
|
18
|
+
*
|
|
19
|
+
* Security (design/86 §3 ⑤): the bodies re-recalled here come back through the SAME read API
|
|
20
|
+
* (`listStructuredNotes`/`getByIds`) and the SAME compose path (`selectAndComposeMemory`/`Layered`, which wrap
|
|
21
|
+
* in `RECALL_CAVEAT` + `<user_memory mode="selective">`) the INITIAL recall uses. Every note in the store has
|
|
22
|
+
* already passed the WRITE-side secret gate (`guardedMemoryStore` → `enforceStructuredNoteSecretGate`); this
|
|
23
|
+
* path adds NO new write inlet and NO new read inlet — it reuses the audited initial-recall pipeline verbatim,
|
|
24
|
+
* so it cannot surface anything the initial recall couldn't, and it cannot leak a secret the write gate
|
|
25
|
+
* already rejected. The de-dup also guarantees an already-shown body is never re-injected.
|
|
26
|
+
*/
|
|
27
|
+
/** Trust-injected configuration for the dynamic re-recall seam (lives on `RunnerDeps`, never `TaskSpec` —
|
|
28
|
+
* it is part of the `memoryRecall` function-seam family, off by default). *
|
|
29
|
+
* @deprecated design/138 S4 — the dynamic re-recall seam served ONLY the retired legacy memoryStore
|
|
30
|
+
* injection path; prepareTask never wires it anymore (the runtask hook is dead-by-input). Removal is the
|
|
31
|
+
* next major.
|
|
32
|
+
*/
|
|
33
|
+
export interface DynamicRecallConfig {
|
|
34
|
+
/** Master switch. Absent/false ⇒ no dynamic re-recall (byte-identical to current behavior). */
|
|
35
|
+
enabled?: boolean;
|
|
36
|
+
/** How many of the most-recent conversation messages form the re-recall query context. Default 6. */
|
|
37
|
+
recentMessageWindow?: number;
|
|
38
|
+
/** Max chars of recent-message text fed to the selector as the query objective. Default 4000. */
|
|
39
|
+
maxQueryChars?: number;
|
|
40
|
+
}
|
|
41
|
+
export declare const DEFAULT_RECENT_MESSAGE_WINDOW = 6;
|
|
42
|
+
export declare const DEFAULT_MAX_QUERY_CHARS = 4000;
|
|
43
|
+
/**
|
|
44
|
+
* Build the re-recall QUERY string from the recent conversation messages. Pure + deterministic. Takes the
|
|
45
|
+
* last `window` messages, extracts their text, and joins/caps to `maxChars` (keeping the TAIL — the most
|
|
46
|
+
* recent text — when over the cap, since the latest turns are the most relevant query signal). Returns ""
|
|
47
|
+
* when there is no usable text (caller then skips re-recall: nothing to query on).
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildRecallQuery(messages: readonly AgentMessage[], window?: number, maxChars?: number): string;
|
|
50
|
+
/** What a single dynamic re-recall attempt produced. `block` present ⇒ the caller injects it as a tail
|
|
51
|
+
* user message; `surfaced*` are the NEW ids/keys to fold into the run's durable surfaced set. A no-new /
|
|
52
|
+
* degrade / disabled outcome yields `block: undefined` and empty surfaced sets (caller injects nothing). */
|
|
53
|
+
export interface DynamicRecallOutcome {
|
|
54
|
+
block: string | undefined;
|
|
55
|
+
/** Single-scope: note ids whose bodies were newly injected this attempt. */
|
|
56
|
+
surfacedIds: readonly string[];
|
|
57
|
+
/** Multi-scope (layered): `(scope,id)` composite keys whose bodies were newly injected this attempt. */
|
|
58
|
+
surfacedKeys: readonly string[];
|
|
59
|
+
}
|
|
60
|
+
/** Inputs the Runner threads into one dynamic re-recall attempt. Mirrors the initial-recall call sites in
|
|
61
|
+
* `prepare-task.ts` (single-scope vs layered), so the two paths share the exact same selector pipeline. */
|
|
62
|
+
export interface DynamicRecallInput {
|
|
63
|
+
store: MemoryStore;
|
|
64
|
+
/** The scope list (1 ⇒ single-scope path; >1 ⇒ layered path). Same `scopes` as the initial recall. */
|
|
65
|
+
scopes: readonly string[];
|
|
66
|
+
selector: MemorySelector;
|
|
67
|
+
/** Query objective derived from the CURRENT conversation (see {@link buildRecallQuery}). */
|
|
68
|
+
query: string;
|
|
69
|
+
recentTools?: string[];
|
|
70
|
+
maxSelected?: number;
|
|
71
|
+
maxLinked?: number;
|
|
72
|
+
timeoutMs?: number;
|
|
73
|
+
signal?: AbortSignal;
|
|
74
|
+
nowMs?: number;
|
|
75
|
+
/** Single-scope durable de-dup: note ids already surfaced (initial recall + prior re-recalls). */
|
|
76
|
+
priorSurfacedIds?: ReadonlySet<string>;
|
|
77
|
+
/** Multi-scope durable de-dup: `(scope,id)` keys already surfaced. */
|
|
78
|
+
priorSurfacedKeys?: ReadonlySet<string>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Run ONE dynamic re-recall against the current conversation. Reuses `selectAndComposeMemory` (single-scope)
|
|
82
|
+
* or `selectAndComposeLayeredMemory` (multi-scope) — the SAME functions the initial recall uses — so the
|
|
83
|
+
* dedup, the manifest, the fence, the caveat, and the degrade/no-new branches are all identical.
|
|
84
|
+
*
|
|
85
|
+
* Crucially, on a DEGRADE the dynamic seam injects NOTHING (returns `block: undefined`). This differs from
|
|
86
|
+
* the INITIAL recall, which degrades to inject-all: at task start, degrade-to-inject-all is the safe floor
|
|
87
|
+
* (never start a task with NO memory). MID-TASK, the stable prefix ALREADY holds the initial inject — so a
|
|
88
|
+
* degrade here means "couldn't pick anything NEW relevant", and re-dumping the whole scope as a tail
|
|
89
|
+
* attachment would (a) duplicate the prefix's memory and (b) explode the tail / break the cache. So the
|
|
90
|
+
* dynamic seam treats degrade exactly like no-new: inject nothing, surface nothing. (This is the security-
|
|
91
|
+
* and cost-correct choice: the seam can only ADD relevant tail notes, never re-dump or fail open.)
|
|
92
|
+
*
|
|
93
|
+
* @deprecated design/138 S4 — the dynamic re-recall seam served ONLY the retired legacy memoryStore
|
|
94
|
+
* injection path; prepareTask never wires it anymore (the runtask hook is dead-by-input). Removal is the
|
|
95
|
+
* next major.
|
|
96
|
+
*/
|
|
97
|
+
export declare function runDynamicRecall(input: DynamicRecallInput): Promise<DynamicRecallOutcome>;
|
|
98
|
+
/** Re-export so the wiring + tests have one import site for the composite key encoder. */
|
|
99
|
+
export { encodeSurfacedKey };
|
|
100
|
+
//# sourceMappingURL=dynamic-recall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-recall.d.ts","sourceRoot":"","sources":["../../src/core/dynamic-recall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAEL,KAAK,cAAc,EAEnB,iBAAiB,EAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,+FAA+F;IAC/F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qGAAqG;IACrG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iGAAiG;IACjG,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,MAAM,GAAE,MAAsC,EAC9C,QAAQ,GAAE,MAAgC,GACzC,MAAM,CAYR;AAgBD;;6GAE6G;AAC7G,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,4EAA4E;IAC5E,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,wGAAwG;IACxG,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAID;4GAC4G;AAC5G,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,sGAAsG;IACtG,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kGAAkG;IAClG,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2C/F;AAED,0FAA0F;AAC1F,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { encodeSurfacedKey, selectAndComposeLayeredMemory, selectAndComposeMemory, } from "./memory-recall.js";
|
|
2
|
+
export const DEFAULT_RECENT_MESSAGE_WINDOW = 6;
|
|
3
|
+
export const DEFAULT_MAX_QUERY_CHARS = 4_000;
|
|
4
|
+
/**
|
|
5
|
+
* Build the re-recall QUERY string from the recent conversation messages. Pure + deterministic. Takes the
|
|
6
|
+
* last `window` messages, extracts their text, and joins/caps to `maxChars` (keeping the TAIL — the most
|
|
7
|
+
* recent text — when over the cap, since the latest turns are the most relevant query signal). Returns ""
|
|
8
|
+
* when there is no usable text (caller then skips re-recall: nothing to query on).
|
|
9
|
+
*/
|
|
10
|
+
export function buildRecallQuery(messages, window = DEFAULT_RECENT_MESSAGE_WINDOW, maxChars = DEFAULT_MAX_QUERY_CHARS) {
|
|
11
|
+
if (window <= 0 || maxChars <= 0)
|
|
12
|
+
return "";
|
|
13
|
+
const recent = messages.slice(-window);
|
|
14
|
+
const parts = [];
|
|
15
|
+
for (const m of recent) {
|
|
16
|
+
const text = messageText(m);
|
|
17
|
+
if (text)
|
|
18
|
+
parts.push(text);
|
|
19
|
+
}
|
|
20
|
+
const joined = parts.join("\n").trim();
|
|
21
|
+
if (joined.length <= maxChars)
|
|
22
|
+
return joined;
|
|
23
|
+
// Over cap: keep the TAIL (latest text is the strongest query signal), not the head.
|
|
24
|
+
return joined.slice(joined.length - maxChars);
|
|
25
|
+
}
|
|
26
|
+
/** Extract a flat text view of a message's content (assistant/user/tool). Pure. */
|
|
27
|
+
function messageText(m) {
|
|
28
|
+
const content = m.content;
|
|
29
|
+
if (typeof content === "string")
|
|
30
|
+
return content.trim();
|
|
31
|
+
if (Array.isArray(content)) {
|
|
32
|
+
const out = [];
|
|
33
|
+
for (const c of content) {
|
|
34
|
+
if (typeof c.text === "string" && c.text.length > 0)
|
|
35
|
+
out.push(c.text);
|
|
36
|
+
}
|
|
37
|
+
return out.join(" ").trim();
|
|
38
|
+
}
|
|
39
|
+
return "";
|
|
40
|
+
}
|
|
41
|
+
const EMPTY_OUTCOME = { block: undefined, surfacedIds: [], surfacedKeys: [] };
|
|
42
|
+
/**
|
|
43
|
+
* Run ONE dynamic re-recall against the current conversation. Reuses `selectAndComposeMemory` (single-scope)
|
|
44
|
+
* or `selectAndComposeLayeredMemory` (multi-scope) — the SAME functions the initial recall uses — so the
|
|
45
|
+
* dedup, the manifest, the fence, the caveat, and the degrade/no-new branches are all identical.
|
|
46
|
+
*
|
|
47
|
+
* Crucially, on a DEGRADE the dynamic seam injects NOTHING (returns `block: undefined`). This differs from
|
|
48
|
+
* the INITIAL recall, which degrades to inject-all: at task start, degrade-to-inject-all is the safe floor
|
|
49
|
+
* (never start a task with NO memory). MID-TASK, the stable prefix ALREADY holds the initial inject — so a
|
|
50
|
+
* degrade here means "couldn't pick anything NEW relevant", and re-dumping the whole scope as a tail
|
|
51
|
+
* attachment would (a) duplicate the prefix's memory and (b) explode the tail / break the cache. So the
|
|
52
|
+
* dynamic seam treats degrade exactly like no-new: inject nothing, surface nothing. (This is the security-
|
|
53
|
+
* and cost-correct choice: the seam can only ADD relevant tail notes, never re-dump or fail open.)
|
|
54
|
+
*
|
|
55
|
+
* @deprecated design/138 S4 — the dynamic re-recall seam served ONLY the retired legacy memoryStore
|
|
56
|
+
* injection path; prepareTask never wires it anymore (the runtask hook is dead-by-input). Removal is the
|
|
57
|
+
* next major.
|
|
58
|
+
*/
|
|
59
|
+
export async function runDynamicRecall(input) {
|
|
60
|
+
if (input.scopes.length === 0 || input.query.trim().length === 0)
|
|
61
|
+
return EMPTY_OUTCOME;
|
|
62
|
+
if (input.scopes.length === 1) {
|
|
63
|
+
const res = await selectAndComposeMemory({
|
|
64
|
+
store: input.store,
|
|
65
|
+
scope: input.scopes[0],
|
|
66
|
+
objective: input.query,
|
|
67
|
+
selector: input.selector,
|
|
68
|
+
recentTools: input.recentTools,
|
|
69
|
+
maxSelected: input.maxSelected,
|
|
70
|
+
maxLinked: input.maxLinked,
|
|
71
|
+
timeoutMs: input.timeoutMs,
|
|
72
|
+
signal: input.signal,
|
|
73
|
+
nowMs: input.nowMs,
|
|
74
|
+
priorSurfacedIds: input.priorSurfacedIds,
|
|
75
|
+
});
|
|
76
|
+
// degrade ⇒ inject nothing (see doc above). no-new (`block: undefined`) ⇒ inject nothing. block ⇒ inject.
|
|
77
|
+
// EMPTY-SELECTION guard (mid-task specific): when the selector picks ZERO ids, selectAndComposeMemory still
|
|
78
|
+
// returns a `block` — a manifest with "(no notes selected)". At task START that block is the worth-injecting
|
|
79
|
+
// manifest affordance; MID-TASK as a TAIL attachment it carries NO new bodies and just bloats the tail /
|
|
80
|
+
// re-shows the manifest, so treat surfaced-nothing as no-new and inject nothing.
|
|
81
|
+
if ("degrade" in res)
|
|
82
|
+
return EMPTY_OUTCOME;
|
|
83
|
+
if (res.block === undefined || res.surfacedIds.length === 0)
|
|
84
|
+
return EMPTY_OUTCOME;
|
|
85
|
+
return { block: res.block, surfacedIds: res.surfacedIds, surfacedKeys: [] };
|
|
86
|
+
}
|
|
87
|
+
const res = await selectAndComposeLayeredMemory({
|
|
88
|
+
store: input.store,
|
|
89
|
+
scopes: [...input.scopes],
|
|
90
|
+
objective: input.query,
|
|
91
|
+
selector: input.selector,
|
|
92
|
+
recentTools: input.recentTools,
|
|
93
|
+
maxSelected: input.maxSelected,
|
|
94
|
+
maxLinked: input.maxLinked,
|
|
95
|
+
timeoutMs: input.timeoutMs,
|
|
96
|
+
signal: input.signal,
|
|
97
|
+
nowMs: input.nowMs,
|
|
98
|
+
priorSurfacedKeys: input.priorSurfacedKeys,
|
|
99
|
+
});
|
|
100
|
+
if ("degrade" in res)
|
|
101
|
+
return EMPTY_OUTCOME;
|
|
102
|
+
if (res.block === undefined || res.surfacedKeys.length === 0)
|
|
103
|
+
return EMPTY_OUTCOME; // empty-selection guard (see above)
|
|
104
|
+
return { block: res.block, surfacedIds: [], surfacedKeys: res.surfacedKeys };
|
|
105
|
+
}
|
|
106
|
+
/** Re-export so the wiring + tests have one import site for the composite key encoder. */
|
|
107
|
+
export { encodeSurfacedKey };
|
|
108
|
+
//# sourceMappingURL=dynamic-recall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-recall.js","sourceRoot":"","sources":["../../src/core/dynamic-recall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L2 mechanical verification gate (design/54) — the "verifiable outputs" exit oracle.
|
|
3
|
+
*
|
|
4
|
+
* Runs a TRUSTED, spec-derived suite of commands (build / type-check / test) in an {@link ExecutionEnv}
|
|
5
|
+
* and gates on the **real exit codes**: pass = every step exited 0. This is the mechanical half of
|
|
6
|
+
* verifiable outputs (design/54 §2); the de-correlated LLM-judge half is {@link runWithVerification}
|
|
7
|
+
* (L3). It catches what tests cover; service[33] measured L2 alone misses 50-100% of semantic/edge
|
|
8
|
+
* defects, which is why L3 runs on what passes L2.
|
|
9
|
+
*
|
|
10
|
+
* **It is a thin exit oracle, not a framework** — no model, no Runner, no agents dependency. It just runs
|
|
11
|
+
* commands and reports their exit truthfully, choosing the streaming `execStream` on a remote env (long
|
|
12
|
+
* builds, read-timeout, output cap) or the buffered `exec` on a base env. Which commands to run, and how
|
|
13
|
+
* to compose L2 with L3 / per-module sub-gates, is the caller's (profile's) job (design/54 §4).
|
|
14
|
+
*
|
|
15
|
+
* 🔴 SECURITY (design/53 §2.B, threat BUG8 — "L2 can be gamed"): `steps` MUST be a trusted, spec-derived
|
|
16
|
+
* suite — NOT test files an **untrusted worker** authored (a worker can write `assert(true)` / happy-path
|
|
17
|
+
* tests that pass while the code is broken, pushing all pressure onto an uncalibrated L3). This helper does
|
|
18
|
+
* not and cannot know which commands are trustworthy; the caller owns that. The gate's guarantee is narrow:
|
|
19
|
+
* "did these exact commands all exit 0 in this env" — nothing about whether the commands are meaningful,
|
|
20
|
+
* whether the env is isolated (design/53 §E = deployment), or the semantics of the change (that is L3).
|
|
21
|
+
*/
|
|
22
|
+
import type { ExecutionEnv } from "../internal/harness.js";
|
|
23
|
+
/** One command in an L2 suite. */
|
|
24
|
+
export interface ExecStep {
|
|
25
|
+
/** Shell command to run (e.g. `"npm test"`, `"tsc --noEmit"`, `"git diff"`). */
|
|
26
|
+
command: string;
|
|
27
|
+
/** Human label for reporting. Default: the command string. */
|
|
28
|
+
label?: string;
|
|
29
|
+
/** Working directory; relative paths resolve against the env root. Default: the env's cwd. */
|
|
30
|
+
cwd?: string;
|
|
31
|
+
/** Extra environment variables for this command. */
|
|
32
|
+
env?: Record<string, string>;
|
|
33
|
+
/** Per-step timeout (seconds). Default: none. */
|
|
34
|
+
timeoutSec?: number;
|
|
35
|
+
}
|
|
36
|
+
/** The outcome of a single {@link ExecStep}. */
|
|
37
|
+
export interface ExecStepResult {
|
|
38
|
+
label: string;
|
|
39
|
+
command: string;
|
|
40
|
+
/** The real exit code, or `null` when the command never produced one (transport error / timeout / abort). */
|
|
41
|
+
exitCode: number | null;
|
|
42
|
+
stdout: string;
|
|
43
|
+
stderr: string;
|
|
44
|
+
/** `exitCode === 0`. A `null` exit is **never** `ok` (we can't confirm success, so we don't pass it). */
|
|
45
|
+
ok: boolean;
|
|
46
|
+
/** Set when the step failed to RUN (an `ExecutionError`/`RemoteExecutionError` code) — distinct from a non-zero exit. */
|
|
47
|
+
errorCode?: string;
|
|
48
|
+
/** True when captured output was truncated at {@link ExecGateOptions.maxOutputBytes}. */
|
|
49
|
+
truncated?: boolean;
|
|
50
|
+
}
|
|
51
|
+
/** The L2 verdict over a whole suite. */
|
|
52
|
+
export interface ExecGateResult {
|
|
53
|
+
/** True iff there was ≥1 step AND every step ran and exited 0. An EMPTY suite is `false` (nothing was verified — not a vacuous pass). */
|
|
54
|
+
passed: boolean;
|
|
55
|
+
/** Per-step detail, in order. With `stopOnFailure` (default), steps after the first failure are absent. */
|
|
56
|
+
steps: ExecStepResult[];
|
|
57
|
+
}
|
|
58
|
+
/** Options for {@link runExecGate}. */
|
|
59
|
+
export interface ExecGateOptions {
|
|
60
|
+
/** Stop at the first failed/non-zero step (default `true` — a cheap CI-style short-circuit). */
|
|
61
|
+
stopOnFailure?: boolean;
|
|
62
|
+
/** Cap captured output **per step** in UTF-8 bytes (default 64 KiB) so a `find /` can't flood memory. */
|
|
63
|
+
maxOutputBytes?: number;
|
|
64
|
+
/** Idle read timeout (ms) for the streaming (remote) path; ignored on the buffered path. */
|
|
65
|
+
readTimeoutMs?: number;
|
|
66
|
+
/** Abort the whole gate (also forwarded to each command). */
|
|
67
|
+
signal?: AbortSignal;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Run an L2 mechanical gate: execute `steps` in `env` and gate on real exit codes. See the file header for
|
|
71
|
+
* the security contract — `steps` must be a trusted, spec-derived suite, not worker-authored tests.
|
|
72
|
+
*/
|
|
73
|
+
export declare function runExecGate(env: ExecutionEnv, steps: ExecStep[], options?: ExecGateOptions): Promise<ExecGateResult>;
|
|
74
|
+
//# sourceMappingURL=exec-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec-gate.d.ts","sourceRoot":"","sources":["../../src/core/exec-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,kCAAkC;AAClC,MAAM,WAAW,QAAQ;IACvB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,6GAA6G;IAC7G,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,yGAAyG;IACzG,EAAE,EAAE,OAAO,CAAC;IACZ,yHAAyH;IACzH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,yIAAyI;IACzI,MAAM,EAAE,OAAO,CAAC;IAChB,2GAA2G;IAC3G,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,gGAAgG;IAChG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yGAAyG;IACzG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA2GD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAiBzB"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L2 mechanical verification gate (design/54) — the "verifiable outputs" exit oracle.
|
|
3
|
+
*
|
|
4
|
+
* Runs a TRUSTED, spec-derived suite of commands (build / type-check / test) in an {@link ExecutionEnv}
|
|
5
|
+
* and gates on the **real exit codes**: pass = every step exited 0. This is the mechanical half of
|
|
6
|
+
* verifiable outputs (design/54 §2); the de-correlated LLM-judge half is {@link runWithVerification}
|
|
7
|
+
* (L3). It catches what tests cover; service[33] measured L2 alone misses 50-100% of semantic/edge
|
|
8
|
+
* defects, which is why L3 runs on what passes L2.
|
|
9
|
+
*
|
|
10
|
+
* **It is a thin exit oracle, not a framework** — no model, no Runner, no agents dependency. It just runs
|
|
11
|
+
* commands and reports their exit truthfully, choosing the streaming `execStream` on a remote env (long
|
|
12
|
+
* builds, read-timeout, output cap) or the buffered `exec` on a base env. Which commands to run, and how
|
|
13
|
+
* to compose L2 with L3 / per-module sub-gates, is the caller's (profile's) job (design/54 §4).
|
|
14
|
+
*
|
|
15
|
+
* 🔴 SECURITY (design/53 §2.B, threat BUG8 — "L2 can be gamed"): `steps` MUST be a trusted, spec-derived
|
|
16
|
+
* suite — NOT test files an **untrusted worker** authored (a worker can write `assert(true)` / happy-path
|
|
17
|
+
* tests that pass while the code is broken, pushing all pressure onto an uncalibrated L3). This helper does
|
|
18
|
+
* not and cannot know which commands are trustworthy; the caller owns that. The gate's guarantee is narrow:
|
|
19
|
+
* "did these exact commands all exit 0 in this env" — nothing about whether the commands are meaningful,
|
|
20
|
+
* whether the env is isolated (design/53 §E = deployment), or the semantics of the change (that is L3).
|
|
21
|
+
*/
|
|
22
|
+
import { isRemoteExecutionEnv, RemoteExecutionError } from "./remote-env.js";
|
|
23
|
+
const DEFAULT_MAX_OUTPUT_BYTES = 64 * 1024;
|
|
24
|
+
/**
|
|
25
|
+
* Truncate a string to at most `maxBytes` UTF-8 bytes WITHOUT splitting a multi-byte char (including
|
|
26
|
+
* supplementary-plane chars / surrogate pairs). Encodes once, then backs the cut point off any UTF-8
|
|
27
|
+
* continuation bytes (`10xxxxxx`) so the boundary lands on a complete code point — never producing a lone
|
|
28
|
+
* surrogate / U+FFFD. Returns the exact byte length of `text` so callers needn't re-measure.
|
|
29
|
+
*/
|
|
30
|
+
function clampBytes(s, maxBytes) {
|
|
31
|
+
// Fast path (common): measure without allocating a Buffer copy when nothing needs truncating.
|
|
32
|
+
const total = Buffer.byteLength(s, "utf8");
|
|
33
|
+
if (total <= maxBytes)
|
|
34
|
+
return { text: s, bytes: total, truncated: false };
|
|
35
|
+
const buf = Buffer.from(s, "utf8");
|
|
36
|
+
// Move the cut to a code-point boundary: if the FIRST EXCLUDED byte is a UTF-8 continuation byte
|
|
37
|
+
// (10xxxxxx) we're slicing mid-sequence, so step back until it isn't (a lead/ASCII byte = a boundary).
|
|
38
|
+
let end = maxBytes;
|
|
39
|
+
while (end > 0 && (buf[end] & 0xc0) === 0x80)
|
|
40
|
+
end--;
|
|
41
|
+
return { text: buf.toString("utf8", 0, end), bytes: end, truncated: true };
|
|
42
|
+
}
|
|
43
|
+
/** Run one step on a remote env via the streaming `execStream`, capping output and never throwing out. */
|
|
44
|
+
async function runStreamStep(env, step, options, maxOutputBytes) {
|
|
45
|
+
const label = step.label ?? step.command;
|
|
46
|
+
const out = [];
|
|
47
|
+
const errOut = [];
|
|
48
|
+
let outBytes = 0;
|
|
49
|
+
let errBytes = 0;
|
|
50
|
+
let truncated = false;
|
|
51
|
+
let exitCode = null;
|
|
52
|
+
const append = (bucket, used, chunk) => {
|
|
53
|
+
if (used >= maxOutputBytes) {
|
|
54
|
+
truncated = true;
|
|
55
|
+
return used;
|
|
56
|
+
}
|
|
57
|
+
const { text, bytes, truncated: cut } = clampBytes(chunk, maxOutputBytes - used);
|
|
58
|
+
if (cut)
|
|
59
|
+
truncated = true;
|
|
60
|
+
bucket.push(text);
|
|
61
|
+
return used + bytes;
|
|
62
|
+
};
|
|
63
|
+
try {
|
|
64
|
+
for await (const chunk of env.execStream(step.command, {
|
|
65
|
+
cwd: step.cwd,
|
|
66
|
+
env: step.env,
|
|
67
|
+
timeout: step.timeoutSec,
|
|
68
|
+
signal: options.signal,
|
|
69
|
+
readTimeoutMs: options.readTimeoutMs,
|
|
70
|
+
maxOutputBytes,
|
|
71
|
+
})) {
|
|
72
|
+
if (chunk.type === "stdout")
|
|
73
|
+
outBytes = append(out, outBytes, chunk.data);
|
|
74
|
+
else if (chunk.type === "stderr")
|
|
75
|
+
errBytes = append(errOut, errBytes, chunk.data);
|
|
76
|
+
else
|
|
77
|
+
exitCode = chunk.exitCode;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
const code = e instanceof RemoteExecutionError
|
|
82
|
+
? e.code
|
|
83
|
+
: e?.name === "AbortError"
|
|
84
|
+
? "aborted"
|
|
85
|
+
: "unknown";
|
|
86
|
+
return { label, command: step.command, exitCode: null, stdout: out.join(""), stderr: errOut.join(""), ok: false, errorCode: code, truncated };
|
|
87
|
+
}
|
|
88
|
+
return { label, command: step.command, exitCode, stdout: out.join(""), stderr: errOut.join(""), ok: exitCode === 0, truncated };
|
|
89
|
+
}
|
|
90
|
+
/** Run one step on a base env via the buffered `exec`, capping output. */
|
|
91
|
+
async function runBufferedStep(env, step, options, maxOutputBytes) {
|
|
92
|
+
const label = step.label ?? step.command;
|
|
93
|
+
const res = await env.exec(step.command, {
|
|
94
|
+
cwd: step.cwd,
|
|
95
|
+
env: step.env,
|
|
96
|
+
timeout: step.timeoutSec,
|
|
97
|
+
abortSignal: options.signal,
|
|
98
|
+
});
|
|
99
|
+
if (!res.ok) {
|
|
100
|
+
return { label, command: step.command, exitCode: null, stdout: "", stderr: "", ok: false, errorCode: res.error.code };
|
|
101
|
+
}
|
|
102
|
+
const so = clampBytes(res.value.stdout, maxOutputBytes);
|
|
103
|
+
const se = clampBytes(res.value.stderr, maxOutputBytes);
|
|
104
|
+
return {
|
|
105
|
+
label,
|
|
106
|
+
command: step.command,
|
|
107
|
+
exitCode: res.value.exitCode,
|
|
108
|
+
stdout: so.text,
|
|
109
|
+
stderr: se.text,
|
|
110
|
+
ok: res.value.exitCode === 0,
|
|
111
|
+
truncated: so.truncated || se.truncated,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/** Narrowing assertion so the stream branch carries the remote type (only called after `isRemoteExecutionEnv`). */
|
|
115
|
+
function assertRemote(env) {
|
|
116
|
+
if (!isRemoteExecutionEnv(env))
|
|
117
|
+
throw new Error("not a remote env");
|
|
118
|
+
return env;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Run an L2 mechanical gate: execute `steps` in `env` and gate on real exit codes. See the file header for
|
|
122
|
+
* the security contract — `steps` must be a trusted, spec-derived suite, not worker-authored tests.
|
|
123
|
+
*/
|
|
124
|
+
export async function runExecGate(env, steps, options = {}) {
|
|
125
|
+
const stopOnFailure = options.stopOnFailure ?? true;
|
|
126
|
+
const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
|
|
127
|
+
const remote = isRemoteExecutionEnv(env);
|
|
128
|
+
const results = [];
|
|
129
|
+
for (const step of steps) {
|
|
130
|
+
if (options.signal?.aborted) {
|
|
131
|
+
results.push({ label: step.label ?? step.command, command: step.command, exitCode: null, stdout: "", stderr: "", ok: false, errorCode: "aborted" });
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
const r = remote
|
|
135
|
+
? await runStreamStep(assertRemote(env), step, options, maxOutputBytes)
|
|
136
|
+
: await runBufferedStep(env, step, options, maxOutputBytes);
|
|
137
|
+
results.push(r);
|
|
138
|
+
if (!r.ok && stopOnFailure)
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
return { passed: results.length > 0 && results.every((s) => s.ok), steps: results };
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=exec-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec-gate.js","sourceRoot":"","sources":["../../src/core/exec-gate.ts"],"names":[],"mappings":"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"}
|