@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,126 @@
|
|
|
1
|
+
import type { OracleIsolationVerdict } from "./oracle-isolation.js";
|
|
2
|
+
import type { SkillManifest } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* The terminal of {@link decideAutoPromote}.
|
|
5
|
+
* - `"auto_promote"` — the ONLY exit that skips human review. Reachable only when all four prior guards
|
|
6
|
+
* (tripwire / irreversible / statistics / concurrence) clear AND all four gates are present+passing.
|
|
7
|
+
* - `"candidate_only"` — surface the artifact as a candidate; the SOLE shortfall is the oracle isolation class
|
|
8
|
+
* being downgraded to `in_process_probe_only` (oracle-isolation.ts:34) with everything else passing.
|
|
9
|
+
* - `"needs_human"` — fail-closed default: escalate to a human (any guard tripped, any other gate failing).
|
|
10
|
+
*/
|
|
11
|
+
export type AutoPromoteTerminal = "auto_promote" | "candidate_only" | "needs_human";
|
|
12
|
+
/**
|
|
13
|
+
* Gate-2 + Gate-3 lineage-bound handle (裁决净增③ / P0#3 / P1 lineage-bind). `gate2Verdict` and `manifest`
|
|
14
|
+
* MUST come from the SAME atomic `appendPromotable` write (memory.ts:295) — this struct bundles them into one
|
|
15
|
+
* handle so the decision can never pair a verdict with a divergent manifest ("assume two booleans are
|
|
16
|
+
* co-sourced" is the bug this prevents). `lineageId` keys the active-skill-scope frame (active-skill-scope.ts).
|
|
17
|
+
*/
|
|
18
|
+
export interface PromotedRecord {
|
|
19
|
+
/** Stable lineage id of the promoted artifact; the Gate-3 scope key. */
|
|
20
|
+
lineageId: string;
|
|
21
|
+
/**
|
|
22
|
+
* Gate-2 chokepoint result: the promotable write landed WITH a positive utility verdict (memory.ts:240),
|
|
23
|
+
* or it was absent/ungated. Only `"present_positive"` is gate-passing; `"absent_or_ungated"` ⇒ needs_human.
|
|
24
|
+
*/
|
|
25
|
+
gate2Verdict: "present_positive" | "absent_or_ungated";
|
|
26
|
+
/** Gate-3 capability manifest — co-located with `gate2Verdict` in the same store record, never diverging. */
|
|
27
|
+
manifest: SkillManifest;
|
|
28
|
+
/**
|
|
29
|
+
* Gate-3 scope is armed AND has propagated across the subagent boundary (design/79 §4, design/77 §3/§7).
|
|
30
|
+
* `true` ONLY when either (a) the manifest lists NO subagent-spawn tool, or (b) its scope has propagated to
|
|
31
|
+
* spawned children. The skill→subagent manifest-scope propagation just landed in this branch (commit
|
|
32
|
+
* `04f5104`); for an artifact that lists a subagent-spawn tool whose scope has NOT propagated, this is
|
|
33
|
+
* `false` → the decision falls to `needs_human` (裁决净增⑤ / P1). A bare in-process `gate4Armed`-style
|
|
34
|
+
* boolean is intentionally NOT enough here: the propagation hole is encoded structurally into this flag.
|
|
35
|
+
*/
|
|
36
|
+
gate3Scoped: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Inputs to {@link decideAutoPromote}. Every field is a PRESENCE/boolean/set the profile has already computed —
|
|
40
|
+
* the core fold inspects no numeric threshold, no stats shape, no taxonomy. The caller (a profile-promotion job)
|
|
41
|
+
* has already RE-asserted Gate-1 (`assertOracleIsolation`), run the exec-gate, read the appended Gate-2 verdict,
|
|
42
|
+
* and armed the Gate-4 seam BEFORE building this struct; this function only READS those outputs.
|
|
43
|
+
*/
|
|
44
|
+
export interface AutoPromoteInputs {
|
|
45
|
+
/** Gate-1 verdict (oracle-isolation.ts:37); the caller re-asserted it before calling this function. */
|
|
46
|
+
oracle: OracleIsolationVerdict;
|
|
47
|
+
/** Gate-2 + Gate-3 lineage-bound single handle (净增③). */
|
|
48
|
+
record: PromotedRecord;
|
|
49
|
+
/** Gate-4: the irreversibility tighten is in place (or the artifact touches no irreversible tool). */
|
|
50
|
+
gate4Armed: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* §6 permanent human door (净增①): the artifact touches at least one irreversible TYPED tool. When true the
|
|
53
|
+
* decision is ALWAYS `needs_human`, even if everything else would pass — because G4 is pure in-process
|
|
54
|
+
* gate-PRESENCE (2-of-3 asymmetry) and `gate4Armed` alone ("the gate is wired") is not trustworthy for an
|
|
55
|
+
* irreversible action.
|
|
56
|
+
*/
|
|
57
|
+
touchesIrreversibleTool: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* The profile's statistics RAN for this run (it produced a verdict). Core requires PRESENCE only — the
|
|
60
|
+
* statistical THRESHOLDS (train/val/test split, canary, min-samples, cost-per-truly-correct) are profile.
|
|
61
|
+
*/
|
|
62
|
+
statisticsPresent: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* The KIND labels of the independent mechanical signals that concur. Core enforces `size >= 2` DISTINCT
|
|
65
|
+
* kinds (净增②) — feeding the SAME kind twice still yields size 1 (it's a Set keyed by kind). WHICH kinds
|
|
66
|
+
* count, and whether they are truly de-correlated, are profile concerns (§7 honest residual).
|
|
67
|
+
*/
|
|
68
|
+
concurringSignals: ReadonlySet<string>;
|
|
69
|
+
/** Tripwire result — ESCALATE-ONLY (§5 ③); when `escalate` it always wins and is never cleared. */
|
|
70
|
+
tripwire: TripwireResult;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The fail-closed PRESENCE AND-chain (design/79 §1 §2). Any missing/failing gate ⇒ NEVER `auto_promote`; it
|
|
74
|
+
* degrades to `needs_human` (or, for the single oracle-isolation-class shortfall, `candidate_only`). This
|
|
75
|
+
* function computes NO numeric threshold — only PRESENCE/boolean/set-size checks.
|
|
76
|
+
*
|
|
77
|
+
* **Guard order (load-bearing):**
|
|
78
|
+
* 1. `tripwire.escalate` → needs_human (tripwire always wins, never clears — §5 ③)
|
|
79
|
+
* 2. `touchesIrreversibleTool` → needs_human (§6 permanent human door — 净增①; even if all else passes)
|
|
80
|
+
* 3. `!statisticsPresent` → needs_human (statistics must have RAN — core-required; thresholds are profile)
|
|
81
|
+
* 4. `concurringSignals.size < 2` → needs_human (≥2 DISTINCT KIND mechanical signals concur — 净增②)
|
|
82
|
+
* 5. the four-gate present-passing check; if not all pass, the SOLE-shortfall arm:
|
|
83
|
+
* `in_process_probe_only` oracle (and every other gate passing) → `candidate_only`; otherwise needs_human.
|
|
84
|
+
* 6. all four gates present+passing (with guards clear) → `auto_promote` (the only auto exit).
|
|
85
|
+
*/
|
|
86
|
+
export declare function decideAutoPromote(i: AutoPromoteInputs): AutoPromoteTerminal;
|
|
87
|
+
/**
|
|
88
|
+
* The result of {@link deriveTripwire}: an ESCALATE-ONLY advisory. `escalate` can only ever be set to `true`
|
|
89
|
+
* by a scan; a clean scan contributes nothing and NEVER clears another scan's escalation. `reasons` carries
|
|
90
|
+
* the matched tokens / drifted symbols for observability.
|
|
91
|
+
*/
|
|
92
|
+
export interface TripwireResult {
|
|
93
|
+
escalate: boolean;
|
|
94
|
+
reasons: string[];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The CORE-FROZEN denylist floor (design/79 §3 净增④ / P0#4): a safety invariant the profile MAY NOT remove.
|
|
98
|
+
* `deriveTripwire`'s `profileTokens` may only UNION (add) to this — never subtract — resolving the tension
|
|
99
|
+
* between "the token set can rot (new exfil primitives appear)" and "constitution-minimal". These are RAW-BYTE
|
|
100
|
+
* substrings scanned against the artifact's raw bytes INCLUDING its markdown bytes (extractSymbols skips
|
|
101
|
+
* markdown, so the byte scan is what covers prose/fenced-code that names an egress/exec primitive).
|
|
102
|
+
*/
|
|
103
|
+
export declare const FROZEN_DENYLIST_FLOOR: ReadonlySet<string>;
|
|
104
|
+
/**
|
|
105
|
+
* Build a tripwire verdict over a promoted artifact's text. **ESCALATE-ONLY** (design/79 §3,守 design/76
|
|
106
|
+
* §5.1 r3): it can ONLY ever raise `escalate:true`; a clean artifact yields `{escalate:false, reasons:[]}` and
|
|
107
|
+
* NEVER clears anything — the REAL containment is Gate-3 runtime deny-narrowing (exhaustive at call time), not
|
|
108
|
+
* this advisory. Two mechanical scans, both escalate-only:
|
|
109
|
+
*
|
|
110
|
+
* 1. **symbol-mention drift** via {@link extractSymbols} (repo-map.ts). extractSymbols is a v1 heuristic:
|
|
111
|
+
* column-0 / source-only, it skips indented lines and is structurally INCAPABLE of being a containment
|
|
112
|
+
* proof (it can't enumerate everything the artifact can call). So it is used ONLY to ESCALATE — if a
|
|
113
|
+
* surfaced top-level symbol names a tool/capability that is NOT in `declared.allowTools`, escalate.
|
|
114
|
+
* 2. **raw-byte denylist** over the artifact's RAW bytes INCLUDING markdown bytes — {@link FROZEN_DENYLIST_FLOOR}
|
|
115
|
+
* UNIONed with `profileTokens` (add-only). A substring hit → escalate, with the matched token in `reasons`.
|
|
116
|
+
*
|
|
117
|
+
* **Fail-closed:** if EITHER scan THROWS on real content, return `{escalate:true, ...}` — a scan failure must
|
|
118
|
+
* NOT silently become "no escalation". (This is disjoint from the composition-layer "tripwire DOWN ⇒ zero
|
|
119
|
+
* contribution, never block" case, which is the caller's concern, not a throw inside the scan.)
|
|
120
|
+
*
|
|
121
|
+
* @param artifactText the artifact's raw text (markdown body included).
|
|
122
|
+
* @param declared the artifact's declared manifest — its `allowTools` is the symbol-drift baseline.
|
|
123
|
+
* @param profileTokens optional ADD-ONLY extra denylist tokens (UNIONed onto the frozen floor; cannot remove).
|
|
124
|
+
*/
|
|
125
|
+
export declare function deriveTripwire(artifactText: string, declared: SkillManifest, profileTokens?: ReadonlySet<string>): TripwireResult;
|
|
126
|
+
//# sourceMappingURL=auto-promote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-promote.d.ts","sourceRoot":"","sources":["../../src/core/auto-promote.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAEpF;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,YAAY,EAAE,kBAAkB,GAAG,mBAAmB,CAAC;IACvD,6GAA6G;IAC7G,QAAQ,EAAE,aAAa,CAAC;IACxB;;;;;;;OAOG;IACH,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,uGAAuG;IACvG,MAAM,EAAE,sBAAsB,CAAC;IAC/B,yDAAyD;IACzD,MAAM,EAAE,cAAc,CAAC;IACvB,sGAAsG;IACtG,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,uBAAuB,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,mGAAmG;IACnG,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,GAAG,mBAAmB,CAuB3E;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAuCpD,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,aAAa,EACvB,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAClC,cAAc,CAwChB"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// design/79 — auto-promote 决策 core 合成(mandate-OFF inert,裁决合成版).
|
|
2
|
+
//
|
|
3
|
+
// This file is the WHOLE core surface of the "§5 决策核": one pure data-in/data-out fold
|
|
4
|
+
// ({@link decideAutoPromote}) over the four already-built gates' verdicts plus statistics/concurrence/tripwire
|
|
5
|
+
// signals, and the two ESCALATE-ONLY mechanical scans ({@link deriveTripwire}). It is a thin composition
|
|
6
|
+
// (repair-loop.ts:18 posture) — it RE-RUNS no gate, computes NO numeric threshold, and owns NO orchestration.
|
|
7
|
+
//
|
|
8
|
+
// 🔴 **mandate-OFF (design/79 §6):** this ships INERT. **Nothing in the Runner or any production path calls
|
|
9
|
+
// `decideAutoPromote` / `deriveTripwire`** — the profile-promotion job that would call them does not exist
|
|
10
|
+
// yet. The `auto_promote` exit is therefore unreachable in shipped code. mandate-OFF is structural-by-absence:
|
|
11
|
+
// there is no `RunnerDeps.autoPromoteEnabled` flag (constitution-minimal); the absence of a caller IS the off
|
|
12
|
+
// switch, and an architecture test (test/auto-promote-decision.test.ts) asserts zero `src/` production callers.
|
|
13
|
+
//
|
|
14
|
+
// **Unifying safety principle (design/76 §0, design/79 §5):** ①core enforces gate-PRESENCE fail-closed
|
|
15
|
+
// (a missing/un-wired gate NEVER auto-passes) ②profile owns every threshold/taxonomy (core checks PRESENCE —
|
|
16
|
+
// `statisticsPresent`, `size>=2 distinct` — never a numeric threshold) ③tripwire is escalate-only, it can only
|
|
17
|
+
// ever set `escalate:true` and NEVER clears ④real protection is the out-of-process structural boundary
|
|
18
|
+
// (G1/G2/G3); probes (the in-process write-probe, the tripwire scans) are necessary-not-sufficient. The G4
|
|
19
|
+
// irreversibility axis is pure in-process gate-PRESENCE (the 2-of-3 asymmetry, §6) → any artifact that touches
|
|
20
|
+
// an irreversible tool is a PERMANENT human door regardless of `gate4Armed`.
|
|
21
|
+
import { extractSymbols } from "../tools/fs/repo-map.js";
|
|
22
|
+
/**
|
|
23
|
+
* The fail-closed PRESENCE AND-chain (design/79 §1 §2). Any missing/failing gate ⇒ NEVER `auto_promote`; it
|
|
24
|
+
* degrades to `needs_human` (or, for the single oracle-isolation-class shortfall, `candidate_only`). This
|
|
25
|
+
* function computes NO numeric threshold — only PRESENCE/boolean/set-size checks.
|
|
26
|
+
*
|
|
27
|
+
* **Guard order (load-bearing):**
|
|
28
|
+
* 1. `tripwire.escalate` → needs_human (tripwire always wins, never clears — §5 ③)
|
|
29
|
+
* 2. `touchesIrreversibleTool` → needs_human (§6 permanent human door — 净增①; even if all else passes)
|
|
30
|
+
* 3. `!statisticsPresent` → needs_human (statistics must have RAN — core-required; thresholds are profile)
|
|
31
|
+
* 4. `concurringSignals.size < 2` → needs_human (≥2 DISTINCT KIND mechanical signals concur — 净增②)
|
|
32
|
+
* 5. the four-gate present-passing check; if not all pass, the SOLE-shortfall arm:
|
|
33
|
+
* `in_process_probe_only` oracle (and every other gate passing) → `candidate_only`; otherwise needs_human.
|
|
34
|
+
* 6. all four gates present+passing (with guards clear) → `auto_promote` (the only auto exit).
|
|
35
|
+
*/
|
|
36
|
+
export function decideAutoPromote(i) {
|
|
37
|
+
// FAIL-CLOSED PRESENCE AND-chain. Any missing/failed gate ⇒ never auto; degrade to human/candidate.
|
|
38
|
+
if (i.tripwire.escalate)
|
|
39
|
+
return "needs_human"; // tripwire always wins, never clears (§5 ③)
|
|
40
|
+
if (i.touchesIrreversibleTool)
|
|
41
|
+
return "needs_human"; // §6 permanent human door; 2-of-3 asymmetry (净增①)
|
|
42
|
+
if (!i.statisticsPresent)
|
|
43
|
+
return "needs_human"; // statistics must have RAN (core-required; threshold=profile)
|
|
44
|
+
if (i.concurringSignals.size < 2)
|
|
45
|
+
return "needs_human"; // ≥2 DISTINCT KIND mechanical signals concur (净增②)
|
|
46
|
+
const g1ok = i.oracle.protected && i.oracle.isolationClass === "out_of_process"; // in_process_probe_only caps candidate
|
|
47
|
+
const g2ok = i.record.gate2Verdict === "present_positive";
|
|
48
|
+
const allGatesPresentPassing = g1ok && g2ok && i.record.gate3Scoped && i.gate4Armed;
|
|
49
|
+
if (!allGatesPresentPassing) {
|
|
50
|
+
// candidate_only ONLY when the oracle probe PASSED (`protected:true`) but the isolation CLASS is merely
|
|
51
|
+
// downgraded to in_process_probe_only (a BENIGN structural shortfall — grader ran out-of-VM-but-in-process),
|
|
52
|
+
// with every OTHER gate passing. A FAILED probe (`protected:false` — e.g. the worker can WRITE the oracle
|
|
53
|
+
// dir, or identity/sandbox collision) is a real Gate-1 FAILURE and must escalate → needs_human (fail-closed).
|
|
54
|
+
// 🔴 Without the explicit `i.oracle.protected`, a `{protected:false, in_process_probe_only}` verdict — the
|
|
55
|
+
// single worst case G1 exists to catch — would slip to candidate_only (adversarial round MAJOR, design/79).
|
|
56
|
+
return (i.oracle.protected && i.oracle.isolationClass === "in_process_probe_only"
|
|
57
|
+
&& g2ok && i.record.gate3Scoped && i.gate4Armed)
|
|
58
|
+
? "candidate_only"
|
|
59
|
+
: "needs_human";
|
|
60
|
+
}
|
|
61
|
+
return "auto_promote";
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The CORE-FROZEN denylist floor (design/79 §3 净增④ / P0#4): a safety invariant the profile MAY NOT remove.
|
|
65
|
+
* `deriveTripwire`'s `profileTokens` may only UNION (add) to this — never subtract — resolving the tension
|
|
66
|
+
* between "the token set can rot (new exfil primitives appear)" and "constitution-minimal". These are RAW-BYTE
|
|
67
|
+
* substrings scanned against the artifact's raw bytes INCLUDING its markdown bytes (extractSymbols skips
|
|
68
|
+
* markdown, so the byte scan is what covers prose/fenced-code that names an egress/exec primitive).
|
|
69
|
+
*/
|
|
70
|
+
export const FROZEN_DENYLIST_FLOOR = new Set([
|
|
71
|
+
// shell / process / exec primitives
|
|
72
|
+
"child_process",
|
|
73
|
+
"execSync",
|
|
74
|
+
"spawnSync",
|
|
75
|
+
"exec(",
|
|
76
|
+
"spawn(",
|
|
77
|
+
"shell",
|
|
78
|
+
"/bin/sh",
|
|
79
|
+
"/bin/bash",
|
|
80
|
+
"bash -c",
|
|
81
|
+
"sh -c",
|
|
82
|
+
// dynamic-code execution
|
|
83
|
+
"eval(",
|
|
84
|
+
"Function(",
|
|
85
|
+
"require(",
|
|
86
|
+
"import(",
|
|
87
|
+
// fetch / egress primitives
|
|
88
|
+
"fetch(",
|
|
89
|
+
"curl",
|
|
90
|
+
"wget",
|
|
91
|
+
"http://",
|
|
92
|
+
"https://",
|
|
93
|
+
"nc ",
|
|
94
|
+
"netcat",
|
|
95
|
+
// encode/obfuscate primitives commonly used to smuggle payloads
|
|
96
|
+
"base64",
|
|
97
|
+
"atob(",
|
|
98
|
+
"btoa(",
|
|
99
|
+
"fromCharCode",
|
|
100
|
+
// shell metacharacters (each scanned as a raw byte)
|
|
101
|
+
"|",
|
|
102
|
+
"&&",
|
|
103
|
+
";",
|
|
104
|
+
"`",
|
|
105
|
+
"$(",
|
|
106
|
+
">>",
|
|
107
|
+
">",
|
|
108
|
+
"<",
|
|
109
|
+
]);
|
|
110
|
+
/**
|
|
111
|
+
* Build a tripwire verdict over a promoted artifact's text. **ESCALATE-ONLY** (design/79 §3,守 design/76
|
|
112
|
+
* §5.1 r3): it can ONLY ever raise `escalate:true`; a clean artifact yields `{escalate:false, reasons:[]}` and
|
|
113
|
+
* NEVER clears anything — the REAL containment is Gate-3 runtime deny-narrowing (exhaustive at call time), not
|
|
114
|
+
* this advisory. Two mechanical scans, both escalate-only:
|
|
115
|
+
*
|
|
116
|
+
* 1. **symbol-mention drift** via {@link extractSymbols} (repo-map.ts). extractSymbols is a v1 heuristic:
|
|
117
|
+
* column-0 / source-only, it skips indented lines and is structurally INCAPABLE of being a containment
|
|
118
|
+
* proof (it can't enumerate everything the artifact can call). So it is used ONLY to ESCALATE — if a
|
|
119
|
+
* surfaced top-level symbol names a tool/capability that is NOT in `declared.allowTools`, escalate.
|
|
120
|
+
* 2. **raw-byte denylist** over the artifact's RAW bytes INCLUDING markdown bytes — {@link FROZEN_DENYLIST_FLOOR}
|
|
121
|
+
* UNIONed with `profileTokens` (add-only). A substring hit → escalate, with the matched token in `reasons`.
|
|
122
|
+
*
|
|
123
|
+
* **Fail-closed:** if EITHER scan THROWS on real content, return `{escalate:true, ...}` — a scan failure must
|
|
124
|
+
* NOT silently become "no escalation". (This is disjoint from the composition-layer "tripwire DOWN ⇒ zero
|
|
125
|
+
* contribution, never block" case, which is the caller's concern, not a throw inside the scan.)
|
|
126
|
+
*
|
|
127
|
+
* @param artifactText the artifact's raw text (markdown body included).
|
|
128
|
+
* @param declared the artifact's declared manifest — its `allowTools` is the symbol-drift baseline.
|
|
129
|
+
* @param profileTokens optional ADD-ONLY extra denylist tokens (UNIONed onto the frozen floor; cannot remove).
|
|
130
|
+
*/
|
|
131
|
+
export function deriveTripwire(artifactText, declared, profileTokens) {
|
|
132
|
+
const reasons = [];
|
|
133
|
+
let escalate = false;
|
|
134
|
+
// ── Scan 1: symbol-mention drift (escalate-only). A clean scan contributes nothing.
|
|
135
|
+
try {
|
|
136
|
+
const allow = new Set(declared.allowTools ?? []);
|
|
137
|
+
const symbols = extractSymbols(artifactText);
|
|
138
|
+
for (const sym of symbols) {
|
|
139
|
+
if (!allow.has(sym)) {
|
|
140
|
+
escalate = true;
|
|
141
|
+
reasons.push(`symbol-drift: surfaced symbol "${sym}" not in declared.allowTools`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
// Fail-closed: a scan that THROWS on real content must escalate, never silently pass.
|
|
147
|
+
return {
|
|
148
|
+
escalate: true,
|
|
149
|
+
reasons: [...reasons, `symbol-drift scan threw (fail-closed): ${String(e?.message ?? e)}`],
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
// ── Scan 2: raw-byte denylist over the RAW bytes (markdown included). Frozen floor ∪ profile add-ons.
|
|
153
|
+
try {
|
|
154
|
+
// The profile may only UNION onto the frozen floor — never remove a floor token (净增④ / P0#4).
|
|
155
|
+
const tokens = new Set([...FROZEN_DENYLIST_FLOOR, ...(profileTokens ?? [])]);
|
|
156
|
+
for (const token of tokens) {
|
|
157
|
+
if (token.length > 0 && artifactText.includes(token)) {
|
|
158
|
+
escalate = true;
|
|
159
|
+
reasons.push(`denylist: raw-byte token "${token}" present in artifact`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch (e) {
|
|
164
|
+
return {
|
|
165
|
+
escalate: true,
|
|
166
|
+
reasons: [...reasons, `denylist scan threw (fail-closed): ${String(e?.message ?? e)}`],
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return { escalate, reasons };
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=auto-promote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-promote.js","sourceRoot":"","sources":["../../src/core/auto-promote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* design/103 — 后台 shell seam(detached process)。「手」腿(`ExecutionEnv`)的 long-running 进程能力:启动一个不会
|
|
3
|
+
* 立刻退出的命令、轮询它的输出、需要时杀掉它。让引擎能跑真实开发循环(起 dev server / build watcher → 轮询日志 →
|
|
4
|
+
* 迭代),用于自足 make-real。
|
|
5
|
+
*
|
|
6
|
+
* 这是一个 **env 上的可选能力**(非一种独立 env 类型),所以不 `extends ExecutionEnv` —— 用交叉类型挂到具体实现上,并经
|
|
7
|
+
* {@link hasBackgroundShell} 运行时检测(对齐 remote-env.ts 的 `hasDestroy`/`isRemoteExecutionEnv` 模式,零 vendor 接口改动)。
|
|
8
|
+
*
|
|
9
|
+
* 设计裁定(经 codex + workflow 5-lens 双轨对抗复审收敛,design/103 v2):
|
|
10
|
+
* - **不跨 durable suspend**:后台进程在每条退出路径被 dispose;Runner 必须在 suspendVM **之前** 调
|
|
11
|
+
* {@link BackgroundShellCapability.disposeBackgroundShells}(detached job 不在 suspendVM 的 in-flight 契约射程内)。
|
|
12
|
+
* - **越权隔离**:`pollBackground`/`killBackground` 的 shellId MUST 被校验为本 env 自己 spawn 过的;非本 env 走 `not_found`。
|
|
13
|
+
* - **按-id-可重读**:实现 MUST 保证按 shellId 跨多次独立调用可重复读取累积/增量输出(execStream 的 consume-once 不满足)。
|
|
14
|
+
*/
|
|
15
|
+
import type { ExecutionEnv, ExecutionEnvExecOptions, Result } from "../internal/harness.js";
|
|
16
|
+
/**
|
|
17
|
+
* 一个 long-running / detached 进程的句柄。**env-local、非 durable、对调用方不透明** —— adapter 内部把它映射到真实进程/
|
|
18
|
+
* provider job,**绝不**把可猜的 raw provider job id 暴露成 shellId(否则跨租户可枚举,design/103 §3.8 越权红线)。
|
|
19
|
+
*/
|
|
20
|
+
export type BackgroundShellId = string & {
|
|
21
|
+
readonly __brand: "BackgroundShellId";
|
|
22
|
+
};
|
|
23
|
+
/** 一个后台进程的生命周期状态。`exited` 携带 exitCode;`failed` = 启动后异常终止(非被 kill)。 */
|
|
24
|
+
export type BackgroundShellStatus = "running" | "exited" | "killed" | "failed";
|
|
25
|
+
/**
|
|
26
|
+
* 类型化错误码(对齐 `RemoteExecutionErrorCode` 风格)。`timeout`/`io` 覆盖 TOB 下的有界 liveness/传输失败 —— 接口规定
|
|
27
|
+
* 方法 MUST NOT throw(返回 {@link Result}),所以挂掉的 provider RPC 必须有码可表达、而非违约抛异常。
|
|
28
|
+
*/
|
|
29
|
+
export type BackgroundShellErrorCode = "unsupported" | "not_found" | "spawn_failed" | "limit_exceeded" | "timeout" | "io";
|
|
30
|
+
/** 后台 shell 操作的类型化错误。`code` 给程序分类,`message` 给模型自纠(design/103 错误文案纪律)。 */
|
|
31
|
+
export declare class BackgroundShellError extends Error {
|
|
32
|
+
readonly code: BackgroundShellErrorCode;
|
|
33
|
+
readonly cause?: unknown | undefined;
|
|
34
|
+
constructor(code: BackgroundShellErrorCode, message: string, cause?: unknown | undefined);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* `spawnBackground` 的 options。后台进程只用 `cwd`/`env`/`timeout`;流式回调(`onStdout`/`onStderr`)和 `abortSignal`
|
|
38
|
+
* 都对「启动后轮询」语义无意义(输出进 tail buffer 等 poll;后台进程的生命周期由 kill/timeout/dispose 管,不绑启动它
|
|
39
|
+
* 的工具调用的 signal),故显式 `Omit` 以免实现者误以为传 abortSignal 能约束进程。`timeout` 在后台是**硬墙**
|
|
40
|
+
* (到点自杀 → status `killed`,design/103 §3.6)。
|
|
41
|
+
*/
|
|
42
|
+
export type BackgroundSpawnOptions = Omit<ExecutionEnvExecOptions, "onStdout" | "onStderr" | "abortSignal">;
|
|
43
|
+
/** 一次 {@link BackgroundShellCapability.pollBackground} 的返回:自上次 poll 以来的增量 + 当前状态 + cursor 元数据。 */
|
|
44
|
+
export interface BackgroundPoll {
|
|
45
|
+
/** 自上次 poll 后的新增 stdout(已应用 `filter`,且 filter 先于截断 —— design/103 §3.4)。 */
|
|
46
|
+
stdout: string;
|
|
47
|
+
/** 自上次 poll 后的新增 stderr。 */
|
|
48
|
+
stderr: string;
|
|
49
|
+
/** 当前生命周期状态。 */
|
|
50
|
+
status: BackgroundShellStatus;
|
|
51
|
+
/** `status==="exited"` 时的退出码。 */
|
|
52
|
+
exitCode?: number;
|
|
53
|
+
/**
|
|
54
|
+
* 本 cursor 之前有字节因 **8MB tail buffer 的 head-evict 永久丢失**(配合 {@link bytesDroppedBeforeCursor})。
|
|
55
|
+
* 🔴 注意:这是**不可恢复**的丢失,不是「可再 poll 拉取」——进程产出超过 8MB tail 时最早段被挤掉。(单次 poll 增量
|
|
56
|
+
* 超 per-poll 显示上限的 head+tail 截断发生在**工具层**,那是另一回事,由工具的截断 marker 诚实标注。)
|
|
57
|
+
*/
|
|
58
|
+
truncated?: boolean;
|
|
59
|
+
/** 从进程启动至今的总输出字节(cursor 元数据,供模型判断是否错过早期日志)。 */
|
|
60
|
+
bytesFromStart?: number;
|
|
61
|
+
/** 因 8MB tail buffer head-evict 在本 cursor 之前**永久丢失**的字节数(诚实标注,不谎称「全部」)。 */
|
|
62
|
+
bytesDroppedBeforeCursor?: number;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 「手」腿的后台进程能力。一个具体 `ExecutionEnv` 实现可选地附加它(交叉类型),经 {@link hasBackgroundShell} 检测。
|
|
66
|
+
* 不支持的 env(StubExecutionEnv / SSH / ADB)= 不实现(或 `supported:false`),三个后台工具自动不挂(INERT)。
|
|
67
|
+
*/
|
|
68
|
+
export interface BackgroundShellCapability {
|
|
69
|
+
/** 显式声明能力(像 `RemoteExecutionEnv.capabilities` 一样不猜)。per-env / per-adapter。 */
|
|
70
|
+
readonly backgroundCapabilities: {
|
|
71
|
+
/** 是否真支持后台 spawn;`false` → 三工具不挂(design/103 §3.8)。 */
|
|
72
|
+
readonly supported: boolean;
|
|
73
|
+
/** 单 env 同时存活的后台进程上限(防 fork bomb;超限 spawn 返回 `limit_exceeded`)。 */
|
|
74
|
+
readonly maxConcurrent: number;
|
|
75
|
+
/** 后台默认 timeout(秒)。**per-端下沉**(E2B 沙箱寿命 ≠ TOC 宿主),非单一 core 常量。 */
|
|
76
|
+
readonly defaultBgTimeoutSec: number;
|
|
77
|
+
/** 后台 timeout **硬上限**(秒)。fail-closed 到有限值 —— **绝不允许无界**(design/103 §3.6)。 */
|
|
78
|
+
readonly maxBgTimeoutSec: number;
|
|
79
|
+
/** design/116 detach(飞轮 [C]):env 是否支持把前台 exec 的运行中子进程「领养」为后台(exec options 的
|
|
80
|
+
* `detachSignal`)。缺省/false ⇒ detach 请求被忽略(exec 继续前台跑完)。 */
|
|
81
|
+
readonly supportsDetach?: boolean;
|
|
82
|
+
/** design/128 T1-1 留驻声明(TB 2026-07-08 翻红回归修):env 声明后台进程 **outlive the run** ——
|
|
83
|
+
* 一切**自动**收割路径(runner 每退出路径的 `disposeBackgroundShells`、registry 的 run-teardown settle
|
|
84
|
+
* 清扫、session release 的 reap)MUST 跳过 kill,把进程留作孤儿(宿主退出后由部署收尸,e.g. TB 容器)。
|
|
85
|
+
* **显式** TaskStop/KillShell 与 per-shell timeout 硬墙不受影响(host 在世期间照常工作)。
|
|
86
|
+
* 实现侧 `disposeBackgroundShells` 自守 no-op 只护住了 dispose 一条路径;registry 直调 `killBackground`
|
|
87
|
+
* 的清扫(settleKilledForOwner)在 1.257.3 绕穿了它把 TB 留驻服务全数击杀 —— 声明上浮到能力面,让每个
|
|
88
|
+
* 自动收割调用方都看得见。缺省 false = 常规回收行为。 */
|
|
89
|
+
readonly retainBackgroundProcesses?: boolean;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* 启动一条命令为后台进程,不等退出,返回 env-local 不透明句柄。MUST NOT block on 进程退出。`timeout` 是硬墙(到点自杀)。
|
|
93
|
+
* 后台子进程的 env MUST 经与前台 `exec` **完全相同**的 secret-scrub(design/103 §3.1 红线),cwd 默认 = 追踪的逻辑 cwd。
|
|
94
|
+
*/
|
|
95
|
+
spawnBackground(command: string, options?: BackgroundSpawnOptions): Promise<Result<{
|
|
96
|
+
shellId: BackgroundShellId;
|
|
97
|
+
}, BackgroundShellError>>;
|
|
98
|
+
/**
|
|
99
|
+
* 读一个后台进程**自上次 poll 以来的新增**输出 + 当前状态(cursor 语义)。退出后仍可读残余 + exitCode,直到被 dispose/reap。
|
|
100
|
+
*
|
|
101
|
+
* 🔴 越权契约:`shellId` MUST 被校验为**本 env 自己 spawnBackground 返回过**的;非本 env 一律 `not_found`,绝不解析外部 job id。
|
|
102
|
+
* 🔴 重读契约:实现 MUST 保证「按 shellId 跨多次独立调用可重复读取累积/增量」(remote 的 execStream consume-once 不满足 —— 见 design/103 §5.2 两条路径)。
|
|
103
|
+
*/
|
|
104
|
+
pollBackground(shellId: BackgroundShellId): Promise<Result<BackgroundPoll, BackgroundShellError>>;
|
|
105
|
+
/** 杀一个后台进程(幂等:杀已死的是 no-op,返回 ok)。`shellId` 同 {@link pollBackground} 的越权校验。 */
|
|
106
|
+
killBackground(shellId: BackgroundShellId): Promise<Result<void, BackgroundShellError>>;
|
|
107
|
+
/**
|
|
108
|
+
* 杀掉并清理**本 env 的所有**后台进程。Runner 在每条退出路径调:finish/abort/throw 在 run-loop tail finally,**suspend/
|
|
109
|
+
* review 必须在 `suspendVM` 之前**(design/103 §3.7;detached job 不在 suspendVM in-flight 契约内,不能指望 adapter 隐式处理)。
|
|
110
|
+
* Best-effort,MUST NOT throw(像 `cleanup`/`destroy`)。幂等。
|
|
111
|
+
*
|
|
112
|
+
* 飞轮 [492]② `except`(可选):这些 shellId **留活**(session 驻留 persistent Monitor 的进程 —— 它的全部意义
|
|
113
|
+
* 就是跨 turn 存活;run-end 全灭会留下「registry handle 活着、进程死了」的孤儿 watch)。不认识此参数的旧
|
|
114
|
+
* 实现照旧全灭 = 今天的行为(诚实降级,not silent corruption:watcher 会打出 env-death 终态通知)。
|
|
115
|
+
* suspend/review 前的 dispose **不带** except(挂起整个 VM,进程死亡是既有契约)。
|
|
116
|
+
*/
|
|
117
|
+
disposeBackgroundShells(opts?: {
|
|
118
|
+
except?: readonly BackgroundShellId[];
|
|
119
|
+
}): Promise<void>;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 结构 + 语义检测:`env` 是否暴露后台 shell 能力且声明 `supported:true`。挂载门控用此(对齐 `hasDestroy`)。
|
|
123
|
+
*
|
|
124
|
+
* 单谓词足够:remote-env 刻意拆 `isRemoteExecutionEnv`(结构)/`isSuspendable`(语义)是因为 isolation/suspendable 两轴
|
|
125
|
+
* 彼此独立;这里 `supported` 是唯一语义轴,合进一个谓词不会丢信息。
|
|
126
|
+
*/
|
|
127
|
+
export declare function hasBackgroundShell(env: ExecutionEnv): env is ExecutionEnv & BackgroundShellCapability;
|
|
128
|
+
//# sourceMappingURL=background-shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-shell.d.ts","sourceRoot":"","sources":["../../src/core/background-shell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE5F;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEnF,sEAAsE;AACtE,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/E;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAChC,aAAa,GACb,WAAW,GACX,cAAc,GACd,gBAAgB,GAChB,SAAS,GACT,IAAI,CAAC;AAET,yEAAyE;AACzE,qBAAa,oBAAqB,SAAQ,KAAK;IAE3C,QAAQ,CAAC,IAAI,EAAE,wBAAwB;IAEvC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;gBAFf,IAAI,EAAE,wBAAwB,EACvC,OAAO,EAAE,MAAM,EACN,KAAK,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,uBAAuB,EAAE,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC,CAAC;AAE5G,kGAAkG;AAClG,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,8EAA8E;IAC9E,QAAQ,CAAC,sBAAsB,EAAE;QAC/B,sDAAsD;QACtD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;QAC5B,mEAAmE;QACnE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,kEAAkE;QAClE,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACrC,6EAA6E;QAC7E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;QACjC;oEAC4D;QAC5D,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAClC;;;;;;6CAMqC;QACrC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;KAC9C,CAAC;IAEF;;;OAGG;IACH,eAAe,CACb,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,iBAAiB,CAAA;KAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAEzE;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAElG,8EAA8E;IAC9E,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAExF;;;;;;;;;OASG;IACH,uBAAuB,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1F;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,GAAG,IAAI,YAAY,GAAG,yBAAyB,CAWrG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* design/103 — 后台 shell seam(detached process)。「手」腿(`ExecutionEnv`)的 long-running 进程能力:启动一个不会
|
|
3
|
+
* 立刻退出的命令、轮询它的输出、需要时杀掉它。让引擎能跑真实开发循环(起 dev server / build watcher → 轮询日志 →
|
|
4
|
+
* 迭代),用于自足 make-real。
|
|
5
|
+
*
|
|
6
|
+
* 这是一个 **env 上的可选能力**(非一种独立 env 类型),所以不 `extends ExecutionEnv` —— 用交叉类型挂到具体实现上,并经
|
|
7
|
+
* {@link hasBackgroundShell} 运行时检测(对齐 remote-env.ts 的 `hasDestroy`/`isRemoteExecutionEnv` 模式,零 vendor 接口改动)。
|
|
8
|
+
*
|
|
9
|
+
* 设计裁定(经 codex + workflow 5-lens 双轨对抗复审收敛,design/103 v2):
|
|
10
|
+
* - **不跨 durable suspend**:后台进程在每条退出路径被 dispose;Runner 必须在 suspendVM **之前** 调
|
|
11
|
+
* {@link BackgroundShellCapability.disposeBackgroundShells}(detached job 不在 suspendVM 的 in-flight 契约射程内)。
|
|
12
|
+
* - **越权隔离**:`pollBackground`/`killBackground` 的 shellId MUST 被校验为本 env 自己 spawn 过的;非本 env 走 `not_found`。
|
|
13
|
+
* - **按-id-可重读**:实现 MUST 保证按 shellId 跨多次独立调用可重复读取累积/增量输出(execStream 的 consume-once 不满足)。
|
|
14
|
+
*/
|
|
15
|
+
/** 后台 shell 操作的类型化错误。`code` 给程序分类,`message` 给模型自纠(design/103 错误文案纪律)。 */
|
|
16
|
+
export class BackgroundShellError extends Error {
|
|
17
|
+
code;
|
|
18
|
+
cause;
|
|
19
|
+
constructor(code, message, cause) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.code = code;
|
|
22
|
+
this.cause = cause;
|
|
23
|
+
this.name = "BackgroundShellError";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 结构 + 语义检测:`env` 是否暴露后台 shell 能力且声明 `supported:true`。挂载门控用此(对齐 `hasDestroy`)。
|
|
28
|
+
*
|
|
29
|
+
* 单谓词足够:remote-env 刻意拆 `isRemoteExecutionEnv`(结构)/`isSuspendable`(语义)是因为 isolation/suspendable 两轴
|
|
30
|
+
* 彼此独立;这里 `supported` 是唯一语义轴,合进一个谓词不会丢信息。
|
|
31
|
+
*/
|
|
32
|
+
export function hasBackgroundShell(env) {
|
|
33
|
+
const e = env;
|
|
34
|
+
return (typeof e.spawnBackground === "function" &&
|
|
35
|
+
typeof e.pollBackground === "function" &&
|
|
36
|
+
typeof e.killBackground === "function" &&
|
|
37
|
+
typeof e.disposeBackgroundShells === "function" &&
|
|
38
|
+
typeof e.backgroundCapabilities === "object" &&
|
|
39
|
+
e.backgroundCapabilities !== null &&
|
|
40
|
+
e.backgroundCapabilities.supported === true);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=background-shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-shell.js","sourceRoot":"","sources":["../../src/core/background-shell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAyBH,yEAAyE;AACzE,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAElC;IAEA;IAHX,YACW,IAA8B,EACvC,OAAe,EACN,KAAe;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJN,SAAI,GAAJ,IAAI,CAA0B;QAE9B,UAAK,GAAL,KAAK,CAAU;QAGxB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AA6FD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAiB;IAClD,MAAM,CAAC,GAAG,GAAyC,CAAC;IACpD,OAAO,CACL,OAAO,CAAC,CAAC,eAAe,KAAK,UAAU;QACvC,OAAO,CAAC,CAAC,cAAc,KAAK,UAAU;QACtC,OAAO,CAAC,CAAC,cAAc,KAAK,UAAU;QACtC,OAAO,CAAC,CAAC,uBAAuB,KAAK,UAAU;QAC/C,OAAO,CAAC,CAAC,sBAAsB,KAAK,QAAQ;QAC5C,CAAC,CAAC,sBAAsB,KAAK,IAAI;QACjC,CAAC,CAAC,sBAAsB,CAAC,SAAS,KAAK,IAAI,CAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-phase prefix-cache-break detector (design/31). Each turn it records a structural fingerprint of
|
|
3
|
+
* the prefix (system prompt / per-tool schema / tool set / model namespace) and compares the turn's
|
|
4
|
+
* `cacheRead` against the prior warm turn; on a confirmed drop it attributes the break to a root cause
|
|
5
|
+
* (model switch / a specific tool's drift / tool-set change / system-prefix change / server-or-TTL).
|
|
6
|
+
*
|
|
7
|
+
* The strict superset of the task-end "low hit-rate" heuristic: it pinpoints the BREAK TURN and names
|
|
8
|
+
* the cause, instead of only reporting an aggregate at the end. Provider-agnostic — the only provider
|
|
9
|
+
* input is `cacheRead` (OpenAI `cached_tokens` / Anthropic `cache_read_input_tokens`, already normalized).
|
|
10
|
+
*
|
|
11
|
+
* v1 is task-scoped (compares turns within one run; system/tools are stable so the high-value per-tool
|
|
12
|
+
* attribution mostly fires on a model switch or across runs). A per-session v2 would feed a persisted
|
|
13
|
+
* prior snapshot — the `observe` contract is already shaped for that.
|
|
14
|
+
*/
|
|
15
|
+
export interface CacheBreakFinding {
|
|
16
|
+
turn: number;
|
|
17
|
+
cacheReadBefore: number;
|
|
18
|
+
cacheReadAfter: number;
|
|
19
|
+
cause: "model-switch" | "tool-schema" | "tool-set" | "system-prefix" | "server-or-ttl";
|
|
20
|
+
detail: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ToolFingerprintInput {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
parameters: unknown;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Project a tool list into the structural inputs the detector fingerprints. Shared by the initial
|
|
29
|
+
* snapshot in `prepareTask` AND the per-materialization refresh in tool-disclosure (design/36): both
|
|
30
|
+
* MUST derive the fingerprint the same way, or a deferred tool going placeholder→full schema would
|
|
31
|
+
* be hashed inconsistently. Keep this the single source of "what counts as the cacheable tool prefix".
|
|
32
|
+
*/
|
|
33
|
+
export declare function toolsToFingerprintInputs(tools: ReadonlyArray<{
|
|
34
|
+
name: string;
|
|
35
|
+
description: string;
|
|
36
|
+
parameters: unknown;
|
|
37
|
+
}>): ToolFingerprintInput[];
|
|
38
|
+
export declare class CacheBreakDetector {
|
|
39
|
+
private prev;
|
|
40
|
+
/**
|
|
41
|
+
* Reset the baseline. **Call ONLY after a SUCCESSFUL compaction** (design/31 red line #11): a legit
|
|
42
|
+
* prefix shrink isn't a break, but resetting when compaction did NOT happen opens a false-negative
|
|
43
|
+
* window (a real break right after would be missed).
|
|
44
|
+
*/
|
|
45
|
+
notifyCompaction(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Record this turn's fingerprint + compare cacheRead to the prior warm turn. Returns a finding on a
|
|
48
|
+
* confirmed break. Hashes are computed here per call **by design**, taking the raw prefix rather than
|
|
49
|
+
* pre-computed hashes. NOTE (design/36): the inputs are NOT necessarily stable within a run — deferred
|
|
50
|
+
* tools materialize placeholder→full schema mid-task, so the caller refreshes the fingerprint at
|
|
51
|
+
* materialization (via `toolsToFingerprintInputs`). A resulting `tool-schema`/`tool-set` finding on
|
|
52
|
+
* that turn is EXPECTED and truthful (the cacheable prefix genuinely changed); the bug this guards
|
|
53
|
+
* against is the opposite — a frozen fingerprint hiding that change (a false negative).
|
|
54
|
+
*/
|
|
55
|
+
observe(input: {
|
|
56
|
+
turn: number;
|
|
57
|
+
systemPrompt: string;
|
|
58
|
+
tools: ToolFingerprintInput[];
|
|
59
|
+
modelKey: string;
|
|
60
|
+
cacheRead: number;
|
|
61
|
+
}): CacheBreakFinding | undefined;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=cache-break-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-break-detector.d.ts","sourceRoot":"","sources":["../../src/core/cache-break-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,cAAc,GAAG,aAAa,GAAG,UAAU,GAAG,eAAe,GAAG,eAAe,CAAC;IACvF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,GAC/E,oBAAoB,EAAE,CAExB;AA0CD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,IAAI,CAAuB;IAEnC;;;;OAIG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;;;;;;;OAQG;IACH,OAAO,CAAC,KAAK,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,oBAAoB,EAAE,CAAC;QAC9B,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,iBAAiB,GAAG,SAAS;CAmDlC"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-break-detector.js","sourceRoot":"","sources":["../../src/core/cache-break-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* design/80 D-1 §2 (slice 1a.2) — the engine-only **vetted canonical serializer** used to mint a stable,
|
|
3
|
+
* opaque {@link boundInputHashOf | boundInputHash} over a pending tool call's arguments.
|
|
4
|
+
*
|
|
5
|
+
* ## Why a bespoke serializer (and why engine-ONLY)
|
|
6
|
+
* The package's only runtime deps are typebox + the MCP SDK — there is no canonical/stable JSON serializer,
|
|
7
|
+
* and `JSON.stringify` is **not** canonical (object key order is insertion order, `-0`/`NaN`/`Infinity` are
|
|
8
|
+
* mishandled, and it offers no type-tagging). The red-team r3 ruling (design/80 §7) is the load-bearing
|
|
9
|
+
* constraint: **never let two runtimes each compute a canonical form and compare** — a `JSON.stringify`
|
|
10
|
+
* divergence (or a serializer-version drift across a worker upgrade) would produce a false mismatch and
|
|
11
|
+
* fail-closed a *legitimate* approval. So the boundInputHash is **server-minted opaque**: the engine computes
|
|
12
|
+
* it ONCE at suspend-mint with THIS serializer, persists it on the checkpoint, and a resume verifies by
|
|
13
|
+
* **opaque string equality** against the persisted value (it never re-serializes the resume-side args). This
|
|
14
|
+
* serializer therefore only needs to be *internally deterministic* (same value → same bytes within one
|
|
15
|
+
* runtime); it is deliberately NOT exported from the package index, so no cross-wire consumer (the SDK /
|
|
16
|
+
* service) can be tempted to recompute it — they treat the hash as opaque and echo it verbatim.
|
|
17
|
+
*
|
|
18
|
+
* ## Canonical form
|
|
19
|
+
* A total function (never throws) that emits a **type-tagged, length-prefixed** string so distinct values of
|
|
20
|
+
* distinct types can never collide (`number 1` ≠ `string "1"` ≠ `boolean`, and `{"a":"b"}` ≠ `{"ab":""}`):
|
|
21
|
+
* - `null` → `N`, `undefined` → `U` (encoded distinctly — `{a:undefined}` must not collide with `{}`)
|
|
22
|
+
* - boolean → `b1` / `b0`
|
|
23
|
+
* - number → `n:<canonical>`; finite via `String(x)` (shortest round-trippable, deterministic per value);
|
|
24
|
+
* `-0` normalized to `0`; `NaN`/`±Infinity` get explicit distinct tokens (never collapsed to `null`)
|
|
25
|
+
* - bigint → `i:<value>`
|
|
26
|
+
* - string → `s<byteLen>:<raw>` — **length-prefixed, NOT normalized**: equal inputs map to equal output and
|
|
27
|
+
* distinct inputs (e.g. a non-NFC string vs its NFC form) map to distinct output. The serializer never
|
|
28
|
+
* silently Unicode-normalizes (that would let two different argument payloads share one hash).
|
|
29
|
+
* - array → `a<len>:[<el>…]` — order preserved (semantic)
|
|
30
|
+
* - object → `o<count>:{<keyLen>:<key>=<val>…}` — **own enumerable keys sorted** by UTF-16 code unit, so
|
|
31
|
+
* `{a,b}` and `{b,a}` canonicalize identically. (Duplicate keys cannot exist on a live JS object —
|
|
32
|
+
* last-wins already happened at parse/construction — so they need no special handling here.)
|
|
33
|
+
* - function / symbol → tagged tokens (`fn` / `y:<desc>`) so the serializer stays total; these never appear
|
|
34
|
+
* in design/37 post-hook tool args (which are JSON values), but encoding rather than throwing keeps a
|
|
35
|
+
* weird arg from silently degrading a durable suspend to a non-durable fallback.
|
|
36
|
+
*/
|
|
37
|
+
export declare function canonicalize(value: unknown): string;
|
|
38
|
+
/**
|
|
39
|
+
* design/80 D-1 §2 — the server-minted **opaque** boundInputHash: a SHA-256 (hex) over {@link canonicalize}.
|
|
40
|
+
* Bound at suspend-mint to the pending tool call's input (`pendingAction.args`) and persisted on the
|
|
41
|
+
* checkpoint; a resume verifies the echoed value by string equality (never re-hashing the resume-side args).
|
|
42
|
+
* The hex digest is fixed-length and opaque — exactly what the operator sees / the D-G signer signs.
|
|
43
|
+
*/
|
|
44
|
+
export declare function boundInputHashOf(value: unknown): string;
|
|
45
|
+
//# sourceMappingURL=canonical-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical-json.d.ts","sourceRoot":"","sources":["../../src/core/canonical-json.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUnD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEvD"}
|