@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,567 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { isAbsolute, join, sep } from "node:path";
|
|
3
|
+
import { BASH_READONLY_DEFAULT_ALLOW, parseLeadingCommandName } from "../tools/fs/index.js";
|
|
4
|
+
import { canonicalToolName } from "./tool-name-aliases.js";
|
|
5
|
+
/** The human/model-readable text of a decision: `message` wins, falling back to the legacy `reason`. */
|
|
6
|
+
export function decisionText(d) {
|
|
7
|
+
return d.message ?? d.reason;
|
|
8
|
+
}
|
|
9
|
+
const ALLOW = { action: "allow" };
|
|
10
|
+
/**
|
|
11
|
+
* Resolve `p`, but if it hasn't settled within `ms`, resolve with `onTimeout()` instead. A
|
|
12
|
+
* **rejection of `p` propagates** (rejects the returned promise) — it is NOT mislabeled as a timeout,
|
|
13
|
+
* so a real error (e.g. a throwing `approve`) surfaces with its true cause instead of being silently
|
|
14
|
+
* turned into the timeout value.
|
|
15
|
+
*/
|
|
16
|
+
function withTimeout(p, ms, onTimeout) {
|
|
17
|
+
if (!ms || ms <= 0) {
|
|
18
|
+
return p;
|
|
19
|
+
}
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
let settled = false;
|
|
22
|
+
const settle = (fn, v) => {
|
|
23
|
+
if (settled)
|
|
24
|
+
return;
|
|
25
|
+
settled = true;
|
|
26
|
+
clearTimeout(timer);
|
|
27
|
+
fn(v);
|
|
28
|
+
};
|
|
29
|
+
// Compute `onTimeout()` lazily, only when the timeout actually wins — never eagerly as a settle
|
|
30
|
+
// argument (which would run its side effects even on the path where `p` already settled).
|
|
31
|
+
const timer = setTimeout(() => {
|
|
32
|
+
if (settled)
|
|
33
|
+
return;
|
|
34
|
+
settle(resolve, onTimeout());
|
|
35
|
+
}, ms);
|
|
36
|
+
timer.unref?.();
|
|
37
|
+
p.then((v) => settle(resolve, v), (e) => settle(reject, e));
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Name-based allow/deny. `deny` always wins. If `allow` is provided, only those tools are permitted
|
|
42
|
+
* (everything else denied). Without `allow`, everything not in `deny` is permitted.
|
|
43
|
+
*/
|
|
44
|
+
export function createAllowDenyPolicy(opts) {
|
|
45
|
+
const allow = opts.allow ? new Set(opts.allow.map(canonicalToolName)) : undefined;
|
|
46
|
+
const deny = new Set((opts.deny ?? []).map(canonicalToolName));
|
|
47
|
+
return {
|
|
48
|
+
check(req) {
|
|
49
|
+
// durable compat: a resumed checkpoint can carry a pre-rename tool name; the sets hold the new (CC) names,
|
|
50
|
+
// so canonicalize before lookup (identity for live new names). See tool-name-aliases.ts.
|
|
51
|
+
const toolName = canonicalToolName(req.toolName);
|
|
52
|
+
if (deny.has(toolName)) {
|
|
53
|
+
return { action: "deny", reason: `tool "${req.toolName}" is denied by policy` };
|
|
54
|
+
}
|
|
55
|
+
if (allow && !allow.has(toolName)) {
|
|
56
|
+
return { action: "deny", reason: `tool "${req.toolName}" is not in the allowlist` };
|
|
57
|
+
}
|
|
58
|
+
return ALLOW;
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Human-in-the-loop approval for selected tools. Tools in `requireApproval` call `approve(req)` and
|
|
64
|
+
* are allowed only if it resolves true; tools in `deny` are always blocked; everything else is allowed
|
|
65
|
+
* (override with `denyByDefault: true` to allow only `requireApproval` + an explicit `autoAllow`).
|
|
66
|
+
*/
|
|
67
|
+
export function createApprovalPolicy(opts) {
|
|
68
|
+
const need = new Set(opts.requireApproval.map(canonicalToolName));
|
|
69
|
+
const deny = new Set((opts.deny ?? []).map(canonicalToolName));
|
|
70
|
+
const auto = new Set((opts.autoAllow ?? []).map(canonicalToolName));
|
|
71
|
+
return {
|
|
72
|
+
async check(req, signal) {
|
|
73
|
+
// durable compat: canonicalize a possibly-pre-rename persisted tool name before set lookups (identity for new).
|
|
74
|
+
const toolName = canonicalToolName(req.toolName);
|
|
75
|
+
if (deny.has(toolName)) {
|
|
76
|
+
return { action: "deny", reason: `tool "${req.toolName}" is denied by policy` };
|
|
77
|
+
}
|
|
78
|
+
if (need.has(toolName)) {
|
|
79
|
+
if (signal?.aborted) {
|
|
80
|
+
return { action: "deny", reason: `approval aborted for "${req.toolName}" (task ended)` };
|
|
81
|
+
}
|
|
82
|
+
let ok;
|
|
83
|
+
try {
|
|
84
|
+
ok = await withTimeout(Promise.resolve(opts.approve(req, signal)), opts.approvalTimeoutMs, () => false);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
// A throwing `approve` is fail-closed (deny) but surfaces the real cause — not hidden as a timeout.
|
|
88
|
+
return {
|
|
89
|
+
action: "deny",
|
|
90
|
+
reason: `approval errored for "${req.toolName}": ${err instanceof Error ? err.message : String(err)}`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return ok ? ALLOW : { action: "deny", reason: `approval denied for "${req.toolName}"` };
|
|
94
|
+
}
|
|
95
|
+
if (opts.denyByDefault && !auto.has(toolName)) {
|
|
96
|
+
return { action: "deny", reason: `tool "${req.toolName}" requires explicit allow` };
|
|
97
|
+
}
|
|
98
|
+
return ALLOW;
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Combine policies with the three-state fold **deny > ask > allow** (design/37): the WORST outcome
|
|
104
|
+
* across all policies wins. A `deny` short-circuits (nothing can override it); an `ask` does NOT
|
|
105
|
+
* short-circuit — scanning continues, because a later policy may still `deny` (which outranks ask).
|
|
106
|
+
* With no deny, the first `ask` wins; with neither, `allow`.
|
|
107
|
+
*
|
|
108
|
+
* **Idempotency requirement:** because the fold continues past an `ask` to look for a later `deny`, a
|
|
109
|
+
* policy's `check()` can be invoked even after an earlier policy returned `ask`. `check()` MUST be
|
|
110
|
+
* idempotent — repeated calls with the same {@link ToolCallRequest} return the same decision and
|
|
111
|
+
* accumulate no side effects (e.g. don't fire a duplicate approval notification on each call).
|
|
112
|
+
*/
|
|
113
|
+
export function combinePolicies(...policies) {
|
|
114
|
+
return {
|
|
115
|
+
async check(req, signal) {
|
|
116
|
+
let asked;
|
|
117
|
+
// A-1 (round-2 audit): an `allow{updatedInput}` rewrite (redact a secret, clamp a path) must NOT be
|
|
118
|
+
// dropped — the twin of the 1.65 single-policy `runToolGate` fix, missed on the combine path. Cascade
|
|
119
|
+
// the rewritten args into the NEXT policy (so a later policy audits the redacted args, not stale ones)
|
|
120
|
+
// and carry the latest rewrite out instead of returning bare ALLOW. Priority is unchanged: deny > ask
|
|
121
|
+
// > allow. When an `ask` outranks a later rewrite, the rewrite is carried OUT on the ask itself
|
|
122
|
+
// (`ask.updatedInput`, now part of the type) so the redaction survives human approval — runToolGate's
|
|
123
|
+
// `policyRewrite` captures it on the ask path (round-2 council confirmed dropping it was a real bug).
|
|
124
|
+
let current = req;
|
|
125
|
+
let rewrite;
|
|
126
|
+
for (const p of policies) {
|
|
127
|
+
const d = await p.check(current, signal);
|
|
128
|
+
if (d.action === "deny") {
|
|
129
|
+
// Worst outcome — short-circuit. 1.256 复审 MED-2: carry the ACCUMULATED rewrite out on the
|
|
130
|
+
// deny (an earlier policy redacted, this one denies) so the deny observer's payload shows
|
|
131
|
+
// the final post-rewrite args — the payload contract says "terminal, post-rewrite", and
|
|
132
|
+
// returning the bare deny here silently reverted it to the un-redacted originals.
|
|
133
|
+
return rewrite?.updatedInput !== undefined ? { ...d, updatedInput: rewrite.updatedInput } : d;
|
|
134
|
+
}
|
|
135
|
+
// R-3 (round-3 council): BOTH ask and allow may carry `updatedInput` — cascade it into `current` so
|
|
136
|
+
// subsequent policies audit the redacted args (not stale ones), and remember it as the LATEST
|
|
137
|
+
// rewrite (a later policy's redaction must not be lost behind an earlier ask/allow). `asked` still
|
|
138
|
+
// records the first ask for the deny>ask>allow priority; the rewrite tracking is independent of it.
|
|
139
|
+
if (d.updatedInput !== undefined) {
|
|
140
|
+
current = { ...current, args: d.updatedInput };
|
|
141
|
+
rewrite = d;
|
|
142
|
+
}
|
|
143
|
+
if (d.action === "ask" && !asked) {
|
|
144
|
+
asked = d; // remember the first ask, but keep scanning for a deny that would outrank it
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// An ask carries the LATEST accumulated rewrite forward so a redaction isn't lost when the human
|
|
148
|
+
// approves (the most recent rewrite wins — it audited the freshest args).
|
|
149
|
+
if (asked) {
|
|
150
|
+
const merged = rewrite?.updatedInput;
|
|
151
|
+
return merged !== undefined ? { ...asked, updatedInput: merged } : asked;
|
|
152
|
+
}
|
|
153
|
+
return rewrite ?? ALLOW;
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/** The shell tools whose `{ command }` arg a coarse command-name policy parses. Other tools are out of scope. */
|
|
158
|
+
const COARSE_SHELL_TOOLS = ["Bash"];
|
|
159
|
+
/**
|
|
160
|
+
* design/center §10 — a COARSE allow/deny gate keyed on the LEADING command NAME (`argv[0]`) of a single
|
|
161
|
+
* simple shell command. It reuses the ONE shared simple-command parser
|
|
162
|
+
* ({@link import("../tools/fs/index.js").parseLeadingCommandName}) — it does NOT re-implement argv[0] parsing
|
|
163
|
+
* (a second parser would drift and open a bypass). For a `bash`/`bash_readonly` call it extracts the leading
|
|
164
|
+
* command name and:
|
|
165
|
+
* - if the name is in `deny` → `deny` (deny-wins, matching {@link createAllowDenyPolicy}; NOT last-match-wins,
|
|
166
|
+
* which would fight {@link combinePolicies}'s deny>ask>allow fold);
|
|
167
|
+
* - else if `allow` is provided and the name is NOT in it → `defaultAction` (`"ask"` default, or `"deny"`);
|
|
168
|
+
* - else → `allow`.
|
|
169
|
+
* A command the parser cannot reduce to a single bare name (it has shell operators / a path-prefix / a leading
|
|
170
|
+
* env-assignment) is treated by `defaultAction` (fail-toward-gate): such a command is exactly what would bypass
|
|
171
|
+
* an argv[0] filter, so it should not silently `allow`. NON-shell tools are out of scope → `allow` (this gate
|
|
172
|
+
* only speaks about shell command names; compose it with other policies for the rest).
|
|
173
|
+
*
|
|
174
|
+
* **core ships NO opinionated command list** — only this mechanism. The actual `allow`/`deny` rule set is
|
|
175
|
+
* injected by the profile/config/deployment.
|
|
176
|
+
*
|
|
177
|
+
* ⚠️ **NOT A SANDBOX — coarse filter / defense-in-depth only.** This matches `argv[0]` NAME and nothing else,
|
|
178
|
+
* so the bypass surface is large and the gate MUST NOT be relied on as containment:
|
|
179
|
+
* - command substitution / subshells (`$(curl …)`, backticks), pipes, redirects, `;`/`&&` chaining — all
|
|
180
|
+
* rejected as un-parseable here (→ `defaultAction`), so they don't sneak past `allow`, but that is a GATE
|
|
181
|
+
* not a guarantee of safety;
|
|
182
|
+
* - an indirection wrapper runs an arbitrary inner program under an allowlisted `argv[0]`: `sh -c '…'`,
|
|
183
|
+
* `env FOO=bar curl …`, `sudo rm …`, `timeout 5 curl …`, `xargs curl`, `find . -exec rm {} \;`,
|
|
184
|
+
* `python -c '…'`, `npm run <script>`, `git <subcommand>` — the inner action is INVISIBLE to an
|
|
185
|
+
* argv[0]-name filter. Allowlisting any such wrapper effectively allowlists everything it can launch.
|
|
186
|
+
* Real isolation is the deployment's sandboxed `executionEnv` (a remote/E2B container with no egress, a
|
|
187
|
+
* read-only FS, dropped capabilities). Use this only as a cheap first-line coarse filter layered over that.
|
|
188
|
+
*
|
|
189
|
+
* 🪤 **TRAP #1 — `TaskSpec.toolPolicy` OVERRIDES (does not merge) `RunnerDeps.toolPolicy`.** A consumer that
|
|
190
|
+
* sets `TaskSpec.toolPolicy = createCoarseCommandNamePolicy(…)` directly **silently discards the deployment's
|
|
191
|
+
* baseline policy** (the runner does `spec.toolPolicy ?? deps.toolPolicy`). To LAYER this on top of a baseline
|
|
192
|
+
* you MUST compose explicitly: `combinePolicies(deploymentBaseline, createCoarseCommandNamePolicy(…))`
|
|
193
|
+
* (deny-wins — both policies' denies still fire). {@link tightenTaskSpec} does this for you.
|
|
194
|
+
*
|
|
195
|
+
* 🪤 **TRAP #2 — under `TaskSpec.shellGate: "classify"`, a plain `ask` from this policy is promoted to a
|
|
196
|
+
* NON-budgetable `irreversible_ask`.** `shellGate:"classify"` statically marks `bash` `irreversibility:"maybe"`;
|
|
197
|
+
* the safety gate keys the checkpoint axis on that STATIC tool mark (not on `decisionReason`), so a `bash`
|
|
198
|
+
* command that doesn't prove reversible suspends as `irreversible_ask` — which a budget-aware escalation
|
|
199
|
+
* resolver will NEVER auto-approve. Net: combining this policy's `ask` with `shellGate:"classify"` does NOT
|
|
200
|
+
* give you a budgetable normal-ask on `bash`; it gives a hard human-approval suspend. Choose `shellGate` and a
|
|
201
|
+
* `defaultAction:"ask"` deliberately.
|
|
202
|
+
*/
|
|
203
|
+
export function createCoarseCommandNamePolicy(opts) {
|
|
204
|
+
const allow = opts.allow ? new Set(opts.allow) : undefined;
|
|
205
|
+
const deny = new Set(opts.deny ?? []);
|
|
206
|
+
const shellTools = new Set(opts.tools ?? COARSE_SHELL_TOOLS);
|
|
207
|
+
const defaultAction = opts.defaultAction ?? "ask";
|
|
208
|
+
const fallback = (reason) => defaultAction === "deny"
|
|
209
|
+
? { action: "deny", reason, decisionReason: "rule" }
|
|
210
|
+
: { action: "ask", message: reason, decisionReason: "rule" };
|
|
211
|
+
return {
|
|
212
|
+
check(req) {
|
|
213
|
+
// Out of scope for non-shell tools: this gate only speaks about shell command names.
|
|
214
|
+
if (!shellTools.has(req.toolName))
|
|
215
|
+
return ALLOW;
|
|
216
|
+
const command = req.args?.command;
|
|
217
|
+
if (typeof command !== "string") {
|
|
218
|
+
// Can't even read a command string → fail toward the gate (don't silent-allow).
|
|
219
|
+
return fallback(`tool "${req.toolName}" call has no parseable command string`);
|
|
220
|
+
}
|
|
221
|
+
const parsed = parseLeadingCommandName(command);
|
|
222
|
+
if ("reject" in parsed) {
|
|
223
|
+
// Un-parseable (operators / path-prefix / env-assignment) = exactly the argv[0]-bypass surface →
|
|
224
|
+
// route through defaultAction rather than allow.
|
|
225
|
+
return fallback(`command is not a single simple command (${parsed.reject})`);
|
|
226
|
+
}
|
|
227
|
+
if (deny.has(parsed.name)) {
|
|
228
|
+
return { action: "deny", reason: `command "${parsed.name}" is denied by policy`, decisionReason: "rule" };
|
|
229
|
+
}
|
|
230
|
+
if (allow && !allow.has(parsed.name)) {
|
|
231
|
+
return fallback(`command "${parsed.name}" is not in the allowlist`);
|
|
232
|
+
}
|
|
233
|
+
return ALLOW;
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
// ─── CC 2.1.205/206 auto-mode safety-rule parity (feat(parity-206)) ─────────────────────────────────────────
|
|
238
|
+
//
|
|
239
|
+
// Two rules ported from the CC 2.1.206 auto-mode classifier (bundle-verified, cc206-bundle.js):
|
|
240
|
+
//
|
|
241
|
+
// 1. "Session Transcript Tampering" (206 @~14268700): «Writing to a Claude Code session transcript (the
|
|
242
|
+
// session `.jsonl` history files under `~/.claude/projects/` or the equivalent configured config dir) —
|
|
243
|
+
// directly or through shell commands — or forging or altering classifier meta lines … The transcript is
|
|
244
|
+
// harness-written session state, not an agent working file … Reading transcripts is routine and not this
|
|
245
|
+
// rule.» → {@link createTranscriptIntegrityPolicy}, keyed on SEMA's real transcript location
|
|
246
|
+
// (`$AGENT_DATA_DIR ?? ~/.ai-agent` + `/sessions/<sessionId>.jsonl`, stores/file/session-store.ts) — NOT
|
|
247
|
+
// CC's path.
|
|
248
|
+
//
|
|
249
|
+
// 2. "Unverifiable Deletion Target" (206 @~14248800): «A recursive, forced delete — `rm -rf`/`-fr`/`-Rf`,
|
|
250
|
+
// `Remove-Item -Recurse -Force`, or an equivalent … — whose target is a shell variable (`$VAR`, `${VAR}`)
|
|
251
|
+
// or a glob rooted at one … whose value cannot be derived from anything in this transcript: no in-window
|
|
252
|
+
// assignment … The value came only from earlier command output the classifier never sees, so the blast
|
|
253
|
+
// radius is unknowable — an empty or unexpected `$VAR` turns `rm -rf "$VAR"/*` into a `$HOME` or
|
|
254
|
+
// filesystem-root wipe. Fail closed. … the agent re-runs the delete with the resolved literal path written
|
|
255
|
+
// into the command itself … so the target can be verified» → {@link createUnverifiableDeletePolicy}.
|
|
256
|
+
//
|
|
257
|
+
// DECISION MAPPING (mode surface reviewed): sema has no CC four-state permission mode in core — "auto/bypass
|
|
258
|
+
// mode" here is a headless or `onAsk:"allow"` deployment. CC says the rule «cannot be auto-allowed by a
|
|
259
|
+
// permission rule», but a sema `ask` WOULD be auto-allowed under `onAsk:"allow"` (resolveAsk). So both rules
|
|
260
|
+
// return **deny** (`decisionReason:"safety"`): in the `combinePolicies` deny>ask>allow fold a deny
|
|
261
|
+
// short-circuits and no caller allow/ask/onAsk can override it — the "cannot be auto-allowed" clause becomes
|
|
262
|
+
// structural. Each deny message carries the CC-sanctioned self-serve remediation (rule 2: re-run with the
|
|
263
|
+
// resolved literal path / assign the variable in the same command), so an agent recovers in one turn.
|
|
264
|
+
//
|
|
265
|
+
// ⚠️ Like every argv/text-level gate in this file: COARSE, fail-closed, defense-in-depth — NOT a sandbox.
|
|
266
|
+
// Real containment stays the deployment's executionEnv boundary.
|
|
267
|
+
/** Default well-known-safe variable roots for {@link createUnverifiableDeletePolicy} (the CC rule's
|
|
268
|
+
* "well-known-safe temp pattern" carve-out): `rm -rf "$TMPDIR"/<literal>` does not fire. */
|
|
269
|
+
const UNVERIFIABLE_DELETE_SAFE_VARS = ["TMPDIR"];
|
|
270
|
+
/** Wrapper argv[0]s skipped before the `rm` detection (a wrapper/compound keyword must not hide the delete:
|
|
271
|
+
* `sudo rm -rf $X`, `if …; then rm -rf $X; fi`, `while …; do rm -rf $X; done`). */
|
|
272
|
+
const DELETE_WRAPPERS = new Set(["sudo", "command", "nohup", "time", "do", "then", "else"]);
|
|
273
|
+
/** Statement splitter for the coarse shell scan: `;` `&`/`&&` `|`/`||` and newlines terminate a
|
|
274
|
+
* simple-command window. Parens are NOT split on (that would destroy the `$(…)` substitution marker a
|
|
275
|
+
* target check must see); they are stripped at the token level instead. Coarser than a real shell parser
|
|
276
|
+
* ON PURPOSE — mangling can only cause a MISSED allow (fail-closed direction) on well-formed deletes. */
|
|
277
|
+
const STATEMENT_SPLIT = /[;&|\n]+/;
|
|
278
|
+
/** Strip shell quoting and grouping punctuation off a token edge for NAME comparisons (`(rm` → `rm`). */
|
|
279
|
+
const stripTokenEdges = (t) => t.replace(/^[("'{]+|[)"'}]+$/g, "");
|
|
280
|
+
/**
|
|
281
|
+
* Scan a (possibly compound) shell command for a recursive+forced delete whose target cannot be resolved from
|
|
282
|
+
* the command text itself — the deterministic sema port of CC 2.1.206 "Unverifiable Deletion Target".
|
|
283
|
+
* Returns a human/model-readable description of the first offending target, or `undefined` when clean.
|
|
284
|
+
*
|
|
285
|
+
* Fires on: `rm` with recursive (`-r`/`-R`/`--recursive`) AND force (`-f`/`--force`) flags whose target
|
|
286
|
+
* contains command substitution, a positional/special parameter, or a variable with NO in-window assignment
|
|
287
|
+
* (`VAR=…`, `export VAR=…`, `read VAR`, `for VAR in …` earlier in the SAME command string — our verification
|
|
288
|
+
* window is the single command, stricter than CC's whole-transcript window); `… | xargs rm -rf` (the target
|
|
289
|
+
* comes from pipe output no gate can see); and `Remove-Item -Recurse -Force` with a `$` target.
|
|
290
|
+
* Does NOT fire on: literal paths (`rm -rf ./node_modules`), in-window-assigned variables, or
|
|
291
|
+
* `$TMPDIR/<literal>` (safe-var carve-out; a glob after the safe var still fires).
|
|
292
|
+
* Out of scope (different CC rules, not this port): `find -delete` sweeps, literal-path destruction.
|
|
293
|
+
*
|
|
294
|
+
* Exported for tests.
|
|
295
|
+
*/
|
|
296
|
+
export function findUnverifiableRecursiveDelete(command, safeVars = new Set(UNVERIFIABLE_DELETE_SAFE_VARS)) {
|
|
297
|
+
const assigned = new Set();
|
|
298
|
+
const statements = command.split(STATEMENT_SPLIT);
|
|
299
|
+
for (const stmt of statements) {
|
|
300
|
+
const tokens = stmt.trim().split(/\s+/).filter(Boolean);
|
|
301
|
+
let i = 0;
|
|
302
|
+
// Leading env-assignments (`FOO=bar cmd`) both count as in-window assignments and are skipped.
|
|
303
|
+
while (i < tokens.length && /^[A-Za-z_][A-Za-z0-9_]*=/.test(tokens[i])) {
|
|
304
|
+
assigned.add(tokens[i].slice(0, tokens[i].indexOf("=")));
|
|
305
|
+
i++;
|
|
306
|
+
}
|
|
307
|
+
// Wrapper prefixes must not hide the delete (`sudo rm -rf …`, `timeout 5 rm -rf …`, `then rm -rf …`).
|
|
308
|
+
while (i < tokens.length) {
|
|
309
|
+
const t = stripTokenEdges(tokens[i]);
|
|
310
|
+
if (DELETE_WRAPPERS.has(t)) {
|
|
311
|
+
i++;
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
if (t === "timeout" && i + 1 < tokens.length) {
|
|
315
|
+
i += 2; // `timeout <duration>` consumes its duration argument
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
if (i >= tokens.length)
|
|
321
|
+
continue;
|
|
322
|
+
const head = stripTokenEdges(tokens[i]);
|
|
323
|
+
const headName = head.split("/").pop() ?? head;
|
|
324
|
+
// In-window assignment forms make a later `$VAR` target verifiable (CC: "no in-window assignment").
|
|
325
|
+
let m;
|
|
326
|
+
if ((m = stmt.trim().match(/^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)=/)))
|
|
327
|
+
assigned.add(m[1]);
|
|
328
|
+
if (headName === "read") {
|
|
329
|
+
for (let j = i + 1; j < tokens.length; j++) {
|
|
330
|
+
if (!tokens[j].startsWith("-"))
|
|
331
|
+
assigned.add(tokens[j].replace(/[^A-Za-z0-9_].*$/, ""));
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
if (headName === "for" && tokens[i + 1] && tokens[i + 2] === "in")
|
|
335
|
+
assigned.add(tokens[i + 1]);
|
|
336
|
+
// `xargs … rm -r…f…`: the delete target arrives from pipe output — unverifiable by construction.
|
|
337
|
+
if (headName === "xargs") {
|
|
338
|
+
const rest = tokens.slice(i + 1).map(stripTokenEdges);
|
|
339
|
+
const rmAt = rest.findIndex((t) => (t.split("/").pop() ?? t) === "rm");
|
|
340
|
+
if (rmAt >= 0 && hasRecursiveForce(rest.slice(rmAt + 1))) {
|
|
341
|
+
return "`xargs rm` with recursive+force flags — the delete targets come from pipe output that cannot be verified";
|
|
342
|
+
}
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
// PowerShell `Remove-Item -Recurse -Force $Var` (CC names it explicitly alongside rm -rf).
|
|
346
|
+
if (/^remove-item$/i.test(headName) || /^ri$/i.test(headName)) {
|
|
347
|
+
const rest = tokens.slice(i + 1);
|
|
348
|
+
const recurse = rest.some((t) => /^-recurse$/i.test(t));
|
|
349
|
+
const force = rest.some((t) => /^-force$/i.test(t));
|
|
350
|
+
const varTarget = rest.find((t) => !t.startsWith("-") && t.includes("$"));
|
|
351
|
+
if (recurse && force && varTarget !== undefined) {
|
|
352
|
+
return `\`Remove-Item -Recurse -Force\` target ${varTarget} is a variable that cannot be verified from this command`;
|
|
353
|
+
}
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
if (headName !== "rm")
|
|
357
|
+
continue;
|
|
358
|
+
const rest = tokens.slice(i + 1);
|
|
359
|
+
if (!hasRecursiveForce(rest))
|
|
360
|
+
continue;
|
|
361
|
+
// Targets = non-flag tokens (a `--` ends option parsing; everything after is a target).
|
|
362
|
+
let optionsEnded = false;
|
|
363
|
+
for (const raw of rest) {
|
|
364
|
+
if (!optionsEnded && raw === "--") {
|
|
365
|
+
optionsEnded = true;
|
|
366
|
+
continue;
|
|
367
|
+
}
|
|
368
|
+
if (!optionsEnded && raw.startsWith("-"))
|
|
369
|
+
continue;
|
|
370
|
+
const target = raw.replace(/["']/g, "");
|
|
371
|
+
if (target.includes("$(") || target.includes("`")) {
|
|
372
|
+
return `\`rm\` recursive+force target ${raw} uses command substitution — the deleted path cannot be verified from this command`;
|
|
373
|
+
}
|
|
374
|
+
if (/\$[@*#!?0-9-]/.test(target)) {
|
|
375
|
+
return `\`rm\` recursive+force target ${raw} uses a positional/special shell parameter that cannot be verified from this command`;
|
|
376
|
+
}
|
|
377
|
+
for (const vm of target.matchAll(/\$\{?([A-Za-z_][A-Za-z0-9_]*)\}?/g)) {
|
|
378
|
+
const name = vm[1];
|
|
379
|
+
if (assigned.has(name))
|
|
380
|
+
continue; // in-window assignment → verifiable, other gates judge the value
|
|
381
|
+
if (safeVars.has(name)) {
|
|
382
|
+
// Safe-var carve-out ONLY for `$SAFE/<literal…>` with no glob — `rm -rf $TMPDIR` bare or
|
|
383
|
+
// `$TMPDIR/foo-*` still fires (CC shared-scratch adjacency).
|
|
384
|
+
const after = target.slice((vm.index ?? 0) + vm[0].length);
|
|
385
|
+
if (/^\/[^*?[\]]+$/.test(after))
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
return `\`rm\` recursive+force target ${raw} references $${name}, which has no assignment in this command — an empty or unexpected value could make this a home-directory or filesystem-root wipe`;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return undefined;
|
|
393
|
+
}
|
|
394
|
+
/** True when an `rm` argv tail carries BOTH a recursive (`-r`/`-R`/`--recursive`) and a force
|
|
395
|
+
* (`-f`/`--force`) flag, combined (`-rf`, `-fR`, `-rfv`) or separate. Options stop at `--`. */
|
|
396
|
+
function hasRecursiveForce(argvTail) {
|
|
397
|
+
let recursive = false;
|
|
398
|
+
let force = false;
|
|
399
|
+
for (const raw of argvTail) {
|
|
400
|
+
const t = raw.replace(/^["']|["']$/g, "");
|
|
401
|
+
if (t === "--")
|
|
402
|
+
break;
|
|
403
|
+
if (!t.startsWith("-"))
|
|
404
|
+
continue;
|
|
405
|
+
if (t === "--recursive")
|
|
406
|
+
recursive = true;
|
|
407
|
+
else if (t === "--force")
|
|
408
|
+
force = true;
|
|
409
|
+
else if (/^-[A-Za-z]+$/.test(t)) {
|
|
410
|
+
if (/[rR]/.test(t))
|
|
411
|
+
recursive = true;
|
|
412
|
+
if (t.includes("f"))
|
|
413
|
+
force = true;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
return recursive && force;
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* CC 2.1.206 "Unverifiable Deletion Target" parity (auto-mode rule, 2.1.205): DENY a recursive+forced delete
|
|
420
|
+
* whose target is a variable / substitution that cannot be resolved from the command itself — fail-closed
|
|
421
|
+
* («Fail closed», 206 bundle). See {@link findUnverifiableRecursiveDelete} for exact firing conditions.
|
|
422
|
+
* The deny message carries the CC-sanctioned remediation: re-run with the resolved LITERAL path written into
|
|
423
|
+
* the command (or assign the variable in the same command), so the target becomes verifiable.
|
|
424
|
+
*
|
|
425
|
+
* Deny (not ask) on purpose: `onAsk:"allow"` — sema's bypass-mode analog — would auto-approve an ask, and the
|
|
426
|
+
* CC rule text forbids exactly that («must be explicitly approved … cannot be auto-allowed by a permission
|
|
427
|
+
* rule»). A deny short-circuits the deny>ask>allow fold, making the invariant structural. Core wires this
|
|
428
|
+
* policy ALWAYS-ON in the runner's gate composition (prepare-task); it is exported so deployments can also
|
|
429
|
+
* compose/test it directly.
|
|
430
|
+
*/
|
|
431
|
+
export function createUnverifiableDeletePolicy(opts) {
|
|
432
|
+
const safeVars = new Set([...UNVERIFIABLE_DELETE_SAFE_VARS, ...(opts?.safeVars ?? [])]);
|
|
433
|
+
const shellTools = new Set(opts?.tools ?? COARSE_SHELL_TOOLS);
|
|
434
|
+
return {
|
|
435
|
+
check(req) {
|
|
436
|
+
if (!shellTools.has(canonicalToolName(req.toolName)))
|
|
437
|
+
return ALLOW;
|
|
438
|
+
const command = req.args?.command;
|
|
439
|
+
if (typeof command !== "string")
|
|
440
|
+
return ALLOW; // no command text = nothing for THIS rule; other gates adjudicate
|
|
441
|
+
const finding = findUnverifiableRecursiveDelete(command, safeVars);
|
|
442
|
+
if (finding === undefined)
|
|
443
|
+
return ALLOW;
|
|
444
|
+
return {
|
|
445
|
+
action: "deny",
|
|
446
|
+
decisionReason: "safety",
|
|
447
|
+
reason: `Unverifiable recursive delete blocked (fail-closed): ${finding}. ` +
|
|
448
|
+
`Re-run the delete with the resolved literal path written into the command itself ` +
|
|
449
|
+
`(or assign the variable in the same command, e.g. \`DIR=/exact/path; rm -rf "$DIR"\`) so the target can be verified.`,
|
|
450
|
+
};
|
|
451
|
+
},
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* CC 2.1.206 "Session Transcript Tampering" parity (auto-mode rule, 2.1.205): DENY shell commands and
|
|
456
|
+
* file-write tools that would modify sema's OWN session transcripts — the harness-written `.jsonl` session
|
|
457
|
+
* state under `<dataRoot>/sessions/` (`$AGENT_DATA_DIR ?? ~/.ai-agent`, stores/file/session-store.ts; the
|
|
458
|
+
* sema analog of CC's `~/.claude/projects/` transcripts, including the first-line `meta` record CC calls the
|
|
459
|
+
* classifier ground-truth line). A tampered entry feeds every later leg once the session is resumed —
|
|
460
|
+
* self-erasure of the audit trail — so the deny is unconditional (no ask; see the mapping note above).
|
|
461
|
+
*
|
|
462
|
+
* «Reading transcripts is routine and not this rule»: a SINGLE simple command whose argv[0] is in the
|
|
463
|
+
* read-only allowlist ({@link BASH_READONLY_DEFAULT_ALLOW}) may reference the transcript dir (`ls`, `cat`,
|
|
464
|
+
* `grep`, …). Anything else that references it — a write command, a redirect/pipe/compound command (which the
|
|
465
|
+
* shared parser rejects → fail-closed), an `rm`/`mv`/`sed -i` — is denied. `Write`/`Edit` file tools are
|
|
466
|
+
* denied on an absolute or `~`-rooted `file_path` inside the transcript dir.
|
|
467
|
+
*
|
|
468
|
+
* Coarse + textual by design (defense-in-depth, not containment): the match is against the RESOLVED data
|
|
469
|
+
* root's absolute path plus its `~/…` and `$HOME/…` spellings — a command that reaches the same files through
|
|
470
|
+
* an unrelated alias/symlink is the sandbox's job. Wired ALWAYS-ON by the runner (prepare-task); exported for
|
|
471
|
+
* direct composition/tests.
|
|
472
|
+
*/
|
|
473
|
+
export function createTranscriptIntegrityPolicy(opts) {
|
|
474
|
+
const home = homedir();
|
|
475
|
+
const defaultRoot = (process.env.AGENT_DATA_DIR ?? join(home, ".ai-agent")).normalize("NFC");
|
|
476
|
+
const dirs = (opts?.sessionsDirs ?? [join(defaultRoot, "sessions")]).map((d) => d.normalize("NFC").replace(/[\\/]+$/, ""));
|
|
477
|
+
// Textual spellings a shell command could use for each protected dir: absolute, `~/…`, `$HOME/…`.
|
|
478
|
+
const textualForms = dirs.flatMap((d) => {
|
|
479
|
+
const forms = [d];
|
|
480
|
+
if (d.startsWith(home + sep)) {
|
|
481
|
+
const rel = d.slice(home.length); // keeps the leading separator
|
|
482
|
+
forms.push(`~${rel}`, `$HOME${rel}`, `\${HOME}${rel}`);
|
|
483
|
+
}
|
|
484
|
+
return forms;
|
|
485
|
+
});
|
|
486
|
+
const readAllow = new Set(opts?.readAllow ?? BASH_READONLY_DEFAULT_ALLOW);
|
|
487
|
+
const shellTools = new Set(opts?.tools ?? COARSE_SHELL_TOOLS);
|
|
488
|
+
const inProtectedDir = (p) => {
|
|
489
|
+
const norm = p.normalize("NFC");
|
|
490
|
+
const abs = norm.startsWith("~" + sep) || norm === "~" ? join(home, norm.slice(1)) : norm;
|
|
491
|
+
if (!isAbsolute(abs))
|
|
492
|
+
return false; // relative paths resolve against the task root, not the data dir
|
|
493
|
+
return dirs.some((d) => abs === d || abs.startsWith(d + sep));
|
|
494
|
+
};
|
|
495
|
+
const denyReason = (what) => ({
|
|
496
|
+
action: "deny",
|
|
497
|
+
decisionReason: "safety",
|
|
498
|
+
reason: `Session-transcript write blocked: ${what}. Session transcripts (the .jsonl files under the agent data ` +
|
|
499
|
+
`dir's sessions/ directory) are harness-written session state, not agent working files — modifying or ` +
|
|
500
|
+
`deleting them tampers with the run's own audit trail. Reading them (ls/cat/grep as a single simple ` +
|
|
501
|
+
`command) is fine.`,
|
|
502
|
+
});
|
|
503
|
+
return {
|
|
504
|
+
check(req) {
|
|
505
|
+
const toolName = canonicalToolName(req.toolName);
|
|
506
|
+
if (shellTools.has(toolName)) {
|
|
507
|
+
const command = req.args?.command;
|
|
508
|
+
if (typeof command !== "string")
|
|
509
|
+
return ALLOW;
|
|
510
|
+
const cmd = command.normalize("NFC");
|
|
511
|
+
if (!textualForms.some((f) => cmd.includes(f)))
|
|
512
|
+
return ALLOW;
|
|
513
|
+
const parsed = parseLeadingCommandName(command);
|
|
514
|
+
if ("name" in parsed && readAllow.has(parsed.name))
|
|
515
|
+
return ALLOW; // reading transcripts is routine
|
|
516
|
+
return denyReason("name" in parsed
|
|
517
|
+
? `\`${parsed.name}\` is not a read-only command`
|
|
518
|
+
: "the command references the transcript directory and is not a single read-only command (fail-closed)");
|
|
519
|
+
}
|
|
520
|
+
if (toolName === "Write" || toolName === "Edit" || toolName === "NotebookEdit") {
|
|
521
|
+
const a = req.args;
|
|
522
|
+
const p = a?.file_path ?? a?.notebook_path;
|
|
523
|
+
if (typeof p === "string" && inProtectedDir(p)) {
|
|
524
|
+
return denyReason(`"${p}" is inside the session-transcript directory`);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
return ALLOW;
|
|
528
|
+
},
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* Resolve an `ask` decision to a terminal `allow`/`deny` via {@link OnAsk}. Centralizes the headless
|
|
533
|
+
* auto-deny default, fail-closed error handling, and stable deny reasons so every ask site is
|
|
534
|
+
* consistent. Never returns `ask`.
|
|
535
|
+
*/
|
|
536
|
+
export async function resolveAsk(req, onAsk, signal) {
|
|
537
|
+
if (onAsk === "allow") {
|
|
538
|
+
return { action: "allow", decisionReason: "mode" };
|
|
539
|
+
}
|
|
540
|
+
if (onAsk === undefined || onAsk === "deny") {
|
|
541
|
+
// Headless auto-deny: deterministic, with a reason the model can read and react to.
|
|
542
|
+
return {
|
|
543
|
+
action: "deny",
|
|
544
|
+
message: `approval required for "${req.toolName}" but no approver is wired (headless auto-deny): ${req.message}`,
|
|
545
|
+
decisionReason: "mode",
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
if (signal?.aborted) {
|
|
549
|
+
return { action: "deny", message: `approval aborted for "${req.toolName}" (task ended)`, decisionReason: "mode" };
|
|
550
|
+
}
|
|
551
|
+
let ok;
|
|
552
|
+
try {
|
|
553
|
+
ok = await onAsk(req, signal);
|
|
554
|
+
}
|
|
555
|
+
catch (err) {
|
|
556
|
+
// Fail-closed: a throwing approver denies, but surfaces the true cause (not hidden as a default).
|
|
557
|
+
return {
|
|
558
|
+
action: "deny",
|
|
559
|
+
message: `approval errored for "${req.toolName}": ${err instanceof Error ? err.message : String(err)}`,
|
|
560
|
+
decisionReason: "mode",
|
|
561
|
+
};
|
|
562
|
+
}
|
|
563
|
+
return ok
|
|
564
|
+
? { action: "allow", decisionReason: "mode" }
|
|
565
|
+
: { action: "deny", message: `approval denied for "${req.toolName}": ${req.message}`, decisionReason: "mode" };
|
|
566
|
+
}
|
|
567
|
+
//# sourceMappingURL=tool-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-policy.js","sourceRoot":"","sources":["../../src/core/tool-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { AgentMessage } from "../internal/harness.js";
|
|
2
|
+
import { type ToolResultStore } from "./tool-result-store.js";
|
|
3
|
+
/**
|
|
4
|
+
* Per-message aggregate tool-result budget (design/64 §17.2 / §24 — CC `MAX_TOOL_RESULTS_PER_MESSAGE_CHARS`,
|
|
5
|
+
* `constants/toolLimits.ts:49`). A single turn's batch of N parallel tool results can each be under the
|
|
6
|
+
* per-tool offload threshold yet SUM past the model/API limit (10×40K = 400K). This caps the aggregate of
|
|
7
|
+
* one turn's tool_result batch: while over budget, the LARGEST fresh non-exempt result is offloaded to a
|
|
8
|
+
* preview (largest-first), repeating until the batch fits.
|
|
9
|
+
*
|
|
10
|
+
* **Simpler than CC by construction (§24.2):** a request-only, non-destructive transform (returns a new
|
|
11
|
+
* array; the durable session keeps full results) applied in the existing `harness.on("context")` hook —
|
|
12
|
+
* the same per-query point as `clearStaleToolResults` (the mirror of CC's query.ts:379). It is DETERMINISTIC
|
|
13
|
+
* (stable `ref = tr_<sessionId>_<toolCallId>` + deterministic {@link buildPreview}), so re-running it every
|
|
14
|
+
* query yields byte-identical previews → prompt-cache safe **without** CC's ContentReplacementState freeze
|
|
15
|
+
* machine (the determinism IS the freeze), and resume-free (the transcript holds originals; this re-applies
|
|
16
|
+
* on replay). Reuses design/30's offload store + preview format; with no store it falls back to a
|
|
17
|
+
* self-contained head+tail truncation preview that still bounds the request.
|
|
18
|
+
*/
|
|
19
|
+
/** CC's per-message cap (chars, not tokens — the "100K token" figure in old notes was unsourced). */
|
|
20
|
+
export declare const AGGREGATE_TOOL_RESULT_BUDGET_CHARS = 200000;
|
|
21
|
+
export interface AggregateBudgetOptions {
|
|
22
|
+
/** Per-batch char budget. Default {@link AGGREGATE_TOOL_RESULT_BUDGET_CHARS}. */
|
|
23
|
+
budgetChars?: number;
|
|
24
|
+
/** Tool names exempt from the budget (their own caps bound them) — e.g. read_file, read_tool_result. */
|
|
25
|
+
exemptTools?: ReadonlySet<string>;
|
|
26
|
+
/** design/30 store for offload+read-back. Absent ⇒ self-contained truncation preview. */
|
|
27
|
+
store?: ToolResultStore;
|
|
28
|
+
/** Namespaces the stable ref so an offloaded result is globally addressable. */
|
|
29
|
+
sessionId: string;
|
|
30
|
+
/** service [398] C8: fired once per result actually capped (offloaded OR degraded to a truncation
|
|
31
|
+
* preview). `storeFallback` = the model LOST read-back for this result (store.put failed / no store)
|
|
32
|
+
* — the silent-degradation face this callback exists for. Must not throw (caller-side contract). */
|
|
33
|
+
onCapped?: (info: {
|
|
34
|
+
tool?: string;
|
|
35
|
+
sizeChars: number;
|
|
36
|
+
storeFallback: boolean;
|
|
37
|
+
}) => void;
|
|
38
|
+
}
|
|
39
|
+
/** Default exemptions: tools whose result is self-bounded (read_file errors at its own token cap; the
|
|
40
|
+
* offload reader pages small slices). grep/bash/glob/web_fetch/MCP are the risk sources, NOT exempt. */
|
|
41
|
+
export declare const DEFAULT_BUDGET_EXEMPT_TOOLS: ReadonlySet<string>;
|
|
42
|
+
/** Cap each over-budget turn-batch (run of consecutive tool_result messages). Request-only; see file docs. */
|
|
43
|
+
export declare function capAggregateToolResults(messages: AgentMessage[], opts: AggregateBudgetOptions): Promise<AgentMessage[]>;
|
|
44
|
+
//# sourceMappingURL=tool-result-budget.d.ts.map
|