@sema-agent/core 7.48.0 → 7.49.0
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 +418 -0
- package/README.md +2 -2
- package/dist/agents/cascade.d.ts +2 -5
- package/dist/agents/child-failure.d.ts +20 -0
- package/dist/agents/child-failure.js +28 -0
- package/dist/agents/cross-session-ref.d.ts +11 -3
- package/dist/agents/cross-session-ref.js +6 -0
- package/dist/agents/cumulative-stats.d.ts +12 -15
- package/dist/agents/cumulative-stats.js +1 -1
- package/dist/agents/extra-tool-names.js +1 -1
- package/dist/agents/inherited-tool-pool.d.ts +17 -13
- package/dist/agents/inherited-tool-pool.js +4 -3
- package/dist/agents/peer-session-drain.d.ts +3 -2
- package/dist/agents/peer-session-drain.js +5 -4
- package/dist/agents/send-message-tool.js +2 -9
- package/dist/agents/subagent.d.ts +10 -29
- package/dist/agents/subagent.js +65 -53
- package/dist/agents/suspend-guard.d.ts +1 -1
- package/dist/agents/tool-filter.d.ts +76 -65
- package/dist/agents/tool-filter.js +122 -92
- package/dist/agents/verify.d.ts +4 -7
- package/dist/agents/verify.js +6 -7
- package/dist/bench/metrics.d.ts +1 -2
- package/dist/brain/anthropic.js +133 -79
- package/dist/brain/errors.d.ts +53 -6
- package/dist/brain/errors.js +22 -2
- package/dist/brain/input-too-long.d.ts +40 -19
- package/dist/brain/input-too-long.js +3 -16
- package/dist/brain/open-responses.js +19 -10
- package/dist/brain/openai.js +123 -32
- package/dist/brain/provider-dialect.d.ts +214 -0
- package/dist/brain/provider-dialect.js +186 -0
- package/dist/brain/request-params.d.ts +27 -8
- package/dist/brain/request-params.js +7 -12
- package/dist/brain/request-route.d.ts +84 -0
- package/dist/brain/request-route.js +41 -0
- package/dist/brain/retry.d.ts +8 -0
- package/dist/brain/retry.js +10 -4
- package/dist/brain/route-adjudicator.d.ts +7 -0
- package/dist/brain/route-adjudicator.js +5 -1
- package/dist/brain/status-sink.d.ts +20 -0
- package/dist/brain/status-sink.js +11 -0
- package/dist/brain/stream-engine.d.ts +52 -1
- package/dist/brain/stream-engine.js +81 -24
- package/dist/brain/stream-shared.d.ts +57 -11
- package/dist/brain/stream-shared.js +28 -2
- package/dist/core/a2a.d.ts +1 -0
- package/dist/core/agent-config-dir.js +3 -2
- package/dist/core/allow-entry.d.ts +21 -12
- package/dist/core/allow-entry.js +38 -31
- package/dist/core/arg-summary.d.ts +17 -24
- package/dist/core/arg-summary.js +169 -68
- package/dist/core/ask-origin.d.ts +42 -24
- package/dist/core/ask-origin.js +18 -13
- package/dist/core/auto-mode-prompt-assets.d.ts +2 -2
- package/dist/core/auto-mode-prompt-assets.js +1 -1
- package/dist/core/auto-mode-prompt.d.ts +11 -1
- package/dist/core/auto-mode-prompt.js +13 -10
- package/dist/core/auto-mode-rebuild.d.ts +7 -0
- package/dist/core/auto-mode-rebuild.js +4 -1
- package/dist/core/canonical-json.d.ts +3 -0
- package/dist/core/canonical-json.js +2 -1
- package/dist/core/checkpoint-requirements.d.ts +892 -0
- package/dist/core/checkpoint-requirements.js +333 -0
- package/dist/core/checkpoint-store.d.ts +94 -65
- package/dist/core/checkpoint-store.js +14 -26
- package/dist/core/child-clamp-seats.d.ts +228 -69
- package/dist/core/child-clamp-seats.js +211 -17
- package/dist/core/classifier-unavailable-arm.d.ts +5 -1
- package/dist/core/classifier-unavailable-arm.js +3 -3
- package/dist/core/compliance.d.ts +3 -0
- package/dist/core/compliance.js +9 -4
- package/dist/core/credential-vocabulary.d.ts +140 -0
- package/dist/core/credential-vocabulary.js +131 -0
- package/dist/core/decision-receipt.js +1 -1
- package/dist/core/effective-path-target.d.ts +73 -16
- package/dist/core/effective-path-target.js +63 -33
- package/dist/core/engine-notice.d.ts +32 -7
- package/dist/core/file-history-store.js +2 -2
- package/dist/core/fs-write-gate-policy.d.ts +4 -0
- package/dist/core/fs-write-gate-policy.js +22 -5
- package/dist/core/gate-bounded-await.d.ts +28 -13
- package/dist/core/gate-bounded-await.js +41 -4
- package/dist/core/gate-fold.d.ts +1 -1
- package/dist/core/gate-fold.js +24 -25
- package/dist/core/gate-lanes.js +16 -15
- package/dist/core/gate-outcome.d.ts +20 -5
- package/dist/core/gate-outcome.js +5 -0
- package/dist/core/governance-codes.d.ts +11 -4
- package/dist/core/governance-codes.js +14 -3
- package/dist/core/hooks.d.ts +4 -0
- package/dist/core/locked-config.d.ts +8 -0
- package/dist/core/locked-config.js +14 -2
- package/dist/core/lsp.js +3 -5
- package/dist/core/mailbox-store.d.ts +3 -4
- package/dist/core/mcp-connection-pool.d.ts +75 -0
- package/dist/core/mcp-connection-pool.js +128 -0
- package/dist/core/mcp-failure.d.ts +2 -1
- package/dist/core/mcp-failure.js +13 -2
- package/dist/core/mcp.d.ts +4 -0
- package/dist/core/mcp.js +70 -43
- package/dist/core/memory-engine/content-origin.js +2 -14
- package/dist/core/memory-engine/engine.d.ts +32 -22
- package/dist/core/memory-engine/engine.js +103 -55
- package/dist/core/memory-engine/file-backend.d.ts +13 -30
- package/dist/core/memory-engine/file-backend.js +37 -252
- package/dist/core/memory-engine/index.d.ts +1 -1
- package/dist/core/memory-engine/index.js +1 -1
- package/dist/core/memory-engine/layout.d.ts +139 -9
- package/dist/core/memory-engine/layout.js +350 -7
- package/dist/core/memory-engine/scope-contract.d.ts +10 -0
- package/dist/core/memory-engine/scope-contract.js +8 -0
- package/dist/core/memory-engine/session-incarnation.d.ts +14 -4
- package/dist/core/memory-engine/session-incarnation.js +5 -2
- package/dist/core/memory-engine/types.d.ts +10 -1
- package/dist/core/memory.js +5 -17
- package/dist/core/model-seat.d.ts +4 -4
- package/dist/core/model-seat.js +1 -1
- package/dist/core/mounted-mcp.d.ts +57 -0
- package/dist/core/mounted-mcp.js +19 -0
- package/dist/core/namespaced-rule-name.d.ts +29 -0
- package/dist/core/namespaced-rule-name.js +52 -0
- package/dist/core/park-selfcheck.d.ts +1 -1
- package/dist/core/park-selfcheck.js +16 -6
- package/dist/core/path-guard-rows.d.ts +99 -0
- package/dist/core/path-guard-rows.js +45 -0
- package/dist/core/path-identity.d.ts +22 -16
- package/dist/core/path-identity.js +10 -10
- package/dist/core/path-rule-binding.d.ts +2 -1
- package/dist/core/path-rule-binding.js +3 -1
- package/dist/core/pause-registry.d.ts +16 -2
- package/dist/core/pause-registry.js +6 -0
- package/dist/core/permission-rule-consent.js +0 -7
- package/dist/core/permission-rule-model.d.ts +68 -24
- package/dist/core/permission-rule-model.js +105 -24
- package/dist/core/permission-rule-store.js +2 -2
- package/dist/core/permission-rules.d.ts +3 -30
- package/dist/core/permission-rules.js +4 -54
- package/dist/core/read-root-candidate.d.ts +1 -3
- package/dist/core/read-root-candidate.js +4 -15
- package/dist/core/real-approval.d.ts +4 -3
- package/dist/core/retired-keys.d.ts +13 -0
- package/dist/core/retired-keys.js +14 -0
- package/dist/core/roles.d.ts +2 -3
- package/dist/core/roles.js +15 -6
- package/dist/core/runner/assemble-result.d.ts +0 -7
- package/dist/core/runner/assemble-result.js +19 -31
- package/dist/core/runner/caller-roster.d.ts +78 -0
- package/dist/core/runner/caller-roster.js +219 -0
- package/dist/core/runner/checkpoint-scope.d.ts +16 -16
- package/dist/core/runner/checkpoint-scope.js +2 -2
- package/dist/core/runner/child-tree.js +2 -2
- package/dist/core/runner/contracts.d.ts +68 -35
- package/dist/core/runner/decide-continuation.d.ts +51 -3
- package/dist/core/runner/decide-continuation.js +76 -21
- package/dist/core/runner/denial-limit-arms.d.ts +17 -5
- package/dist/core/runner/denial-limit-arms.js +11 -9
- package/dist/core/runner/extra-body-dropped-seat.d.ts +8 -0
- package/dist/core/runner/extra-body-dropped-seat.js +22 -0
- package/dist/core/runner/finish-reason-seat.d.ts +9 -0
- package/dist/core/runner/finish-reason-seat.js +40 -0
- package/dist/core/runner/gate-exit.d.ts +44 -32
- package/dist/core/runner/gate-exit.js +112 -25
- package/dist/core/runner/inherited-ask-grants.js +6 -4
- package/dist/core/runner/mcp-redial.d.ts +3 -3
- package/dist/core/runner/mcp-redial.js +3 -4
- package/dist/core/runner/permission-rule-lanes.d.ts +1 -2
- package/dist/core/runner/permission-rule-lanes.js +5 -4
- package/dist/core/runner/prepare-artifact.d.ts +4 -0
- package/dist/core/runner/prepare-artifact.js +2 -1
- package/dist/core/runner/prepare-ask-lane.d.ts +2 -0
- package/dist/core/runner/prepare-ask-lane.js +12 -6
- package/dist/core/runner/prepare-boundary-parks.d.ts +5 -8
- package/dist/core/runner/prepare-boundary-parks.js +4 -7
- package/dist/core/runner/prepare-caps-and-workflow.d.ts +11 -15
- package/dist/core/runner/prepare-caps-and-workflow.js +19 -27
- package/dist/core/runner/prepare-config-doors.d.ts +9 -9
- package/dist/core/runner/prepare-config-doors.js +10 -5
- package/dist/core/runner/prepare-defer-classify.d.ts +2 -2
- package/dist/core/runner/prepare-defer-classify.js +5 -3
- package/dist/core/runner/prepare-delegation-surface.d.ts +1 -1
- package/dist/core/runner/prepare-delegation-surface.js +3 -3
- package/dist/core/runner/prepare-gate-stations.d.ts +4 -4
- package/dist/core/runner/prepare-gate-stations.js +9 -7
- package/dist/core/runner/prepare-hands-readface.d.ts +7 -7
- package/dist/core/runner/prepare-hands-readface.js +7 -7
- package/dist/core/runner/prepare-inherited-gate.d.ts +7 -6
- package/dist/core/runner/prepare-inherited-gate.js +14 -15
- package/dist/core/runner/prepare-listings.d.ts +7 -24
- package/dist/core/runner/prepare-listings.js +4 -5
- package/dist/core/runner/prepare-memory-engine-session.d.ts +2 -0
- package/dist/core/runner/prepare-memory-engine-session.js +4 -3
- package/dist/core/runner/prepare-memory.d.ts +6 -0
- package/dist/core/runner/prepare-memory.js +13 -13
- package/dist/core/runner/prepare-offload-wrappers.d.ts +5 -0
- package/dist/core/runner/prepare-offload-wrappers.js +3 -3
- package/dist/core/runner/prepare-park-ask.d.ts +7 -8
- package/dist/core/runner/prepare-park-ask.js +17 -10
- package/dist/core/runner/prepare-policy-chain.js +24 -44
- package/dist/core/runner/prepare-project-context.d.ts +1 -1
- package/dist/core/runner/prepare-project-context.js +3 -4
- package/dist/core/runner/prepare-protocol-tools.d.ts +9 -3
- package/dist/core/runner/prepare-protocol-tools.js +3 -4
- package/dist/core/runner/prepare-run-refs.d.ts +3 -0
- package/dist/core/runner/prepare-run-refs.js +2 -1
- package/dist/core/runner/prepare-safety-scan.d.ts +4 -8
- package/dist/core/runner/prepare-safety-scan.js +1 -2
- package/dist/core/runner/prepare-suspend-saga.d.ts +7 -1
- package/dist/core/runner/prepare-suspend-saga.js +28 -12
- package/dist/core/runner/prepare-task.d.ts +1 -1
- package/dist/core/runner/prepare-task.js +67 -56
- package/dist/core/runner/prepare-wiring-manifest.d.ts +11 -10
- package/dist/core/runner/prepare-wiring-manifest.js +5 -8
- package/dist/core/runner/resume-apply.js +7 -14
- package/dist/core/runner/resume-checkpoint-screen.js +11 -4
- package/dist/core/runner/resume-internals-and-config.js +2 -2
- package/dist/core/runner/resume-policy-outcome.js +5 -32
- package/dist/core/runner/resume-review-outcome.js +4 -1
- package/dist/core/runner/retired-runner-deps.d.ts +6 -0
- package/dist/core/runner/retired-runner-deps.js +10 -1
- package/dist/core/runner/run-brain-sinks.d.ts +4 -0
- package/dist/core/runner/run-brain-sinks.js +5 -2
- package/dist/core/runner/run-harness-handlers.js +27 -34
- package/dist/core/runner/run-leg.d.ts +0 -2
- package/dist/core/runner/run-leg.js +32 -33
- package/dist/core/runner/run-terminal-adoption.js +4 -3
- package/dist/core/runner/runtask.js +8 -8
- package/dist/core/runner/session-rule-policy.js +5 -5
- package/dist/core/runner/stream-settle-backstop.js +7 -4
- package/dist/core/runner/sub-agent-deny-lists.d.ts +51 -12
- package/dist/core/runner/sub-agent-deny-lists.js +111 -80
- package/dist/core/runner/terminal-account.d.ts +48 -0
- package/dist/core/runner/terminal-account.js +186 -0
- package/dist/core/runner/tool-end-body.d.ts +54 -17
- package/dist/core/runner/tool-end-body.js +27 -2
- package/dist/core/runner/tool-face-overlay.d.ts +3 -1
- package/dist/core/runner/tool-face-overlay.js +6 -4
- package/dist/core/runner/tool-occurrence.d.ts +106 -0
- package/dist/core/runner/tool-occurrence.js +123 -0
- package/dist/core/runner/tool-progress-lane.d.ts +16 -8
- package/dist/core/runner/tool-progress-lane.js +25 -34
- package/dist/core/runner/turn-attachments.d.ts +1 -1
- package/dist/core/runner/write-protection-station.d.ts +21 -9
- package/dist/core/runner/write-protection-station.js +20 -17
- package/dist/core/runner-deps.d.ts +12 -22
- package/dist/core/secret-env.d.ts +16 -5
- package/dist/core/secret-env.js +23 -63
- package/dist/core/sensitive-path-policy.d.ts +19 -18
- package/dist/core/sensitive-path-policy.js +73 -49
- package/dist/core/session-reconcile.d.ts +3 -0
- package/dist/core/session-reconcile.js +5 -4
- package/dist/core/session-store.d.ts +5 -0
- package/dist/core/session-store.js +12 -0
- package/dist/core/session.d.ts +13 -0
- package/dist/core/shared-memory/normalize.d.ts +17 -4
- package/dist/core/shared-memory/normalize.js +7 -7
- package/dist/core/shell-lexer.js +5 -4
- package/dist/core/skill-grant.js +1 -1
- package/dist/core/store-contracts/checkpoint-store-contract.js +13 -0
- package/dist/core/store-contracts/mailbox-store-contract.d.ts +7 -14
- package/dist/core/store-contracts/session-store-incarnation-contract.d.ts +27 -0
- package/dist/core/store-contracts/session-store-incarnation-contract.js +92 -0
- package/dist/core/stub-env.d.ts +2 -0
- package/dist/core/stub-env.js +1 -0
- package/dist/core/synthetic-read-verdict.js +2 -2
- package/dist/core/task-event.d.ts +59 -5
- package/dist/core/task-result.d.ts +1 -1
- package/dist/core/task-spec.d.ts +42 -9
- package/dist/core/terminal-cause.d.ts +94 -11
- package/dist/core/tighten-task-spec.d.ts +5 -4
- package/dist/core/tighten-task-spec.js +20 -25
- package/dist/core/tool-catalog-entries.d.ts +5 -7
- package/dist/core/tool-catalog-entries.js +14 -15
- package/dist/core/tool-face.d.ts +47 -0
- package/dist/core/tool-face.js +5 -0
- package/dist/core/tool-model-gate.d.ts +5 -5
- package/dist/core/tool-name-aliases.d.ts +26 -2
- package/dist/core/tool-name-aliases.js +13 -0
- package/dist/core/tool-name-list.d.ts +30 -0
- package/dist/core/tool-name-list.js +55 -0
- package/dist/core/tool-name-readings.d.ts +1 -9
- package/dist/core/tool-name-readings.js +1 -3
- package/dist/core/tool-policy.d.ts +195 -85
- package/dist/core/tool-policy.js +165 -380
- package/dist/core/tool-registry.d.ts +44 -1
- package/dist/core/tool-registry.js +26 -0
- package/dist/core/tool-roster.d.ts +19 -1
- package/dist/core/tool-roster.js +21 -2
- package/dist/core/tool-spec-members.d.ts +45 -0
- package/dist/core/tool-spec-members.js +169 -0
- package/dist/core/tool-spec.d.ts +46 -8
- package/dist/core/tools.d.ts +6 -2
- package/dist/core/tools.js +8 -4
- package/dist/core/untrusted-egress.js +29 -26
- package/dist/core/untrusted-text.d.ts +13 -10
- package/dist/core/untrusted-text.js +6 -44
- package/dist/core/workflow-journal-store.d.ts +4 -1
- package/dist/core/write-protect.d.ts +65 -29
- package/dist/core/write-protect.js +235 -177
- package/dist/engine/compaction/compaction.d.ts +2 -2
- package/dist/engine/execution-env/node-execution-env.d.ts +5 -23
- package/dist/engine/execution-env/node-execution-env.js +16 -38
- package/dist/engine/execution-env/symlink-chain.d.ts +23 -0
- package/dist/engine/execution-env/symlink-chain.js +32 -0
- package/dist/engine/harness/types.d.ts +7 -0
- package/dist/engine/llm/tool-turns.d.ts +3 -0
- package/dist/engine/llm/tool-turns.js +1 -0
- package/dist/engine/llm/types.d.ts +59 -23
- package/dist/engine/loop/agent-loop.js +16 -2
- package/dist/engine/session/memory-repo.js +11 -3
- package/dist/engine/session/repo-utils.d.ts +8 -0
- package/dist/engine/session/repo-utils.js +13 -0
- package/dist/index.d.ts +20 -23
- package/dist/index.js +17 -20
- package/dist/internal/harness.d.ts +1 -1
- package/dist/internal/harness.js +1 -1
- package/dist/internal/llm.d.ts +2 -2
- package/dist/internal/llm.js +1 -1
- package/dist/orchestration/governance-baseline-validity.js +1 -1
- package/dist/orchestration/run-spec.js +3 -3
- package/dist/orchestration/run-workflow-tool.d.ts +16 -35
- package/dist/orchestration/run-workflow-tool.js +38 -78
- package/dist/orchestration/workflow-governance.d.ts +21 -25
- package/dist/orchestration/workflow-governance.js +38 -78
- package/dist/orchestration/workflow-primitives.d.ts +7 -22
- package/dist/orchestration/workflow-primitives.js +5 -12
- package/dist/orchestration/workflow-types.d.ts +1 -1
- package/dist/orchestration/workflow.d.ts +61 -11
- package/dist/orchestration/workflow.js +189 -117
- package/dist/scenarios/full-body.d.ts +1 -1
- package/dist/shell/lex.d.ts +0 -21
- package/dist/shell/lex.js +250 -68
- package/dist/shell/shell-words.d.ts +35 -0
- package/dist/shell/shell-words.js +65 -0
- package/dist/stores/file/checkpoint-store.d.ts +5 -5
- package/dist/stores/file/checkpoint-store.js +5 -2
- package/dist/stores/file/index.d.ts +0 -8
- package/dist/stores/file/index.js +0 -12
- package/dist/stores/file/session-store.d.ts +3 -0
- package/dist/stores/file/session-store.js +44 -19
- package/dist/tools/artifact/artifact-tool.js +2 -0
- package/dist/tools/fs/bash-program-position.d.ts +10 -3
- package/dist/tools/fs/bash-program-position.js +21 -9
- package/dist/tools/fs/bash-readonly-classifier.d.ts +1 -1
- package/dist/tools/fs/bash-readonly-classifier.js +8 -7
- package/dist/tools/fs/containment-face.d.ts +4 -0
- package/dist/tools/fs/containment-face.js +3 -0
- package/dist/tools/fs/fs-shared.d.ts +10 -0
- package/dist/tools/fs/fs-shared.js +18 -0
- package/dist/tools/fs/fs-write.js +4 -2
- package/dist/tools/fs/index.d.ts +1 -1
- package/dist/tools/fs/program-read-model.d.ts +39 -18
- package/dist/tools/fs/program-read-model.js +29 -19
- package/dist/tools/fs/program-read-model.rows.d.ts +0 -14
- package/dist/tools/fs/program-read-model.rows.js +5 -5
- package/dist/tools/fs/read-deny-home.d.ts +33 -47
- package/dist/tools/fs/read-deny-home.js +35 -49
- package/dist/tools/fs/read-deny.d.ts +23 -22
- package/dist/tools/fs/read-deny.js +114 -89
- package/dist/tools/fs/removal-targets.d.ts +56 -23
- package/dist/tools/fs/removal-targets.js +65 -87
- package/dist/tools/fs/safety.d.ts +29 -22
- package/dist/tools/fs/safety.js +17 -11
- package/dist/tools/fs/search.js +10 -8
- package/dist/tools/fs/shell-read-argv.js +1 -1
- package/dist/tools/fs/shell-read-bindings.d.ts +169 -37
- package/dist/tools/fs/shell-read-bindings.js +324 -86
- package/dist/tools/fs/shell-read-builtins.d.ts +35 -0
- package/dist/tools/fs/shell-read-builtins.js +43 -0
- package/dist/tools/fs/shell-read-check.d.ts +15 -1
- package/dist/tools/fs/shell-read-check.js +51 -42
- package/dist/tools/fs/shell-read-establish.js +6 -6
- package/dist/tools/fs/shell-read-functions.d.ts +22 -0
- package/dist/tools/fs/shell-read-functions.js +29 -0
- package/dist/tools/fs/shell-read-judge.d.ts +48 -18
- package/dist/tools/fs/shell-read-judge.js +33 -4
- package/dist/tools/fs/shell-read-plan.d.ts +12 -6
- package/dist/tools/fs/shell-read-plan.js +118 -113
- package/dist/tools/fs/shell-read-start.d.ts +29 -6
- package/dist/tools/fs/shell-read-start.js +16 -9
- package/dist/tools/fs/shell-read-word.js +4 -0
- package/dist/tools/fs/shell-read-workdir.d.ts +156 -0
- package/dist/tools/fs/shell-read-workdir.js +281 -0
- package/dist/tools/fs/shell-read-write-targets.d.ts +5 -2
- package/dist/tools/fs/shell-read-write-targets.js +14 -5
- package/dist/tools/fs/shell-reentry-text.d.ts +4 -6
- package/dist/tools/fs/shell-reentry-text.js +3 -11
- package/dist/tools/task-list.d.ts +1 -2
- package/dist/tools/web.js +1 -1
- package/package.json +4 -1
- package/test/export-surface.snapshot.json +107 -143
- package/wire-changes/core@7.49.0.json +4765 -0
- package/dist/agents/teacher.d.ts +0 -159
- package/dist/agents/teacher.js +0 -577
- package/dist/agents/team.d.ts +0 -226
- package/dist/agents/team.js +0 -257
- package/dist/core/strategy-store.d.ts +0 -238
- package/dist/core/strategy-store.js +0 -253
- package/dist/orchestration/builtin-workflows.d.ts +0 -133
- package/dist/orchestration/builtin-workflows.js +0 -159
- package/dist/scenarios/env.d.ts +0 -40
- package/dist/scenarios/env.js +0 -39
- package/dist/scenarios/scenario-registry.d.ts +0 -110
- package/dist/scenarios/scenario-registry.js +0 -140
- package/dist/scenarios/teacher-quickstart.d.ts +0 -40
- package/dist/scenarios/teacher-quickstart.js +0 -12
- package/dist/stores/cc/lockfile.d.ts +0 -10
- package/dist/stores/cc/lockfile.js +0 -98
- package/dist/stores/cc/mailbox-store.d.ts +0 -20
- package/dist/stores/cc/mailbox-store.js +0 -255
- package/dist/stores/cc/roster-adapter.d.ts +0 -12
- package/dist/stores/cc/roster-adapter.js +0 -117
- package/dist/stores/cc/sidecar-transcript.d.ts +0 -97
- package/dist/stores/cc/sidecar-transcript.js +0 -264
- package/dist/stores/cc/task-list-store.d.ts +0 -2
- package/dist/stores/cc/task-list-store.js +0 -125
- package/dist/stores/file/strategy-store.d.ts +0 -97
- package/dist/stores/file/strategy-store.js +0 -341
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { forkGovernanceDenial, resolveDelegationEntryCaps } from "../../agents/subagent.js";
|
|
2
2
|
import { isLiveQuestionFace } from "../ask-question.js";
|
|
3
3
|
import { parentSpecSeatOf } from "../parent-spec-seat.js";
|
|
4
|
+
import { childClampSeats, clampSourceOf } from "../child-clamp-seats.js";
|
|
4
5
|
import { createPreToolUseConstraintPolicy } from "../hooks.js";
|
|
5
6
|
import { continuesLineage } from "../session-policy-store.js";
|
|
6
7
|
import { StubExecutionEnv } from "../stub-env.js";
|
|
@@ -91,7 +92,6 @@ export function prepareInheritedGate(input) {
|
|
|
91
92
|
const ancestorRulesNow = () => inheritedAncestorRules === undefined ? undefined : inheritedAncestorRules.map((a, i) => ancestorSessionRulesRef.current.get(i) ?? a);
|
|
92
93
|
const memoryAdmittedOrgScopesRef = { current: [] };
|
|
93
94
|
const ownOrgVerdictRef = { current: undefined };
|
|
94
|
-
const orgAdmissionCheckpointState = () => inheritedAdmittedOrgScopes !== undefined || ownOrgVerdictRef.current !== undefined || orgGovernedProvenance;
|
|
95
95
|
const faceCheckpointSection = () => {
|
|
96
96
|
const resolvedReadFace = input.resolvedReadFace();
|
|
97
97
|
const handsLessResolvedFace = input.handsLessResolvedFace();
|
|
@@ -110,15 +110,11 @@ export function prepareInheritedGate(input) {
|
|
|
110
110
|
}
|
|
111
111
|
return undefined;
|
|
112
112
|
};
|
|
113
|
-
const faceCheckpointState = () => faceCheckpointSection() !== undefined;
|
|
114
113
|
const writeFaceCheckpointSection = () => {
|
|
115
114
|
const seat = input.resolvedWriteFace() ?? input.handsLessResolvedWriteFace();
|
|
116
115
|
return seat === undefined ? undefined : seat.inForce() === "open" ? { face: "open" } : seat.fenced ? { face: "roots" } : undefined;
|
|
117
116
|
};
|
|
118
117
|
const skillGrantCheckpointSection = () => frozenSkillGrants(skillGrants);
|
|
119
|
-
const f012CheckpointState = () => (inheritedParentConstraints?.length ?? 0) > 0 ||
|
|
120
|
-
seedInheritedGate?.constraintChain !== undefined ||
|
|
121
|
-
internals?.delegationProvenance !== undefined;
|
|
122
118
|
const frozenOnAsk = askSeat.value;
|
|
123
119
|
const hookEnvSource = (ownedEnv ?? deps.executionEnv) != null ? executionEnv : undefined;
|
|
124
120
|
const notifyOwnHookCrash = (err) => {
|
|
@@ -198,17 +194,23 @@ export function prepareInheritedGate(input) {
|
|
|
198
194
|
};
|
|
199
195
|
const carrierReadFace = () => input.resolvedReadFace() ?? input.handsLessResolvedFace();
|
|
200
196
|
const carrierWriteFace = () => (input.resolvedWriteFace() ?? input.handsLessResolvedWriteFace())?.inForce();
|
|
197
|
+
const runClampSource = () => ({
|
|
198
|
+
...clampSourceOf(spec, "clamp"),
|
|
199
|
+
readFace: carrierReadFace(),
|
|
200
|
+
writeFace: carrierWriteFace(),
|
|
201
|
+
readDenyPatterns: input.readDenyAdditionsNormalized(),
|
|
202
|
+
approvalReach: askSeat.reach,
|
|
203
|
+
});
|
|
201
204
|
const fullShellReachable = handsEnabled &&
|
|
202
205
|
!(executionEnv instanceof StubExecutionEnv) &&
|
|
203
206
|
spec.handsReadOnly !== true &&
|
|
204
207
|
spec.excludeAllTools !== true &&
|
|
205
|
-
|
|
208
|
+
toolFaceSnapshot.selector.admits({ name: "Bash" });
|
|
206
209
|
const { gateStopRef, stopForDenialLimit } = createDenialLimitStop({ sessionId, runId, onNotice: deps.onNotice, abort: abortRun });
|
|
207
210
|
const delegationEntryCapsResolved = resolveDelegationEntryCaps(deps.delegationEntryCaps);
|
|
208
211
|
const enrichSpecToolCtx = (ctx) => {
|
|
209
212
|
const agentForkDenial = input.agentForkDenial();
|
|
210
213
|
const observersActive = input.observersActive();
|
|
211
|
-
const readDenyAdditionsNormalized = input.readDenyAdditionsNormalized();
|
|
212
214
|
const autoModeDecider = input.autoModeDecider();
|
|
213
215
|
const centerAdoption = input.centerAdoption();
|
|
214
216
|
return {
|
|
@@ -220,18 +222,14 @@ export function prepareInheritedGate(input) {
|
|
|
220
222
|
thinkingLevel: harnessRef.current?.getThinkingLevel(),
|
|
221
223
|
principal: spec.principal,
|
|
222
224
|
...(frozenOnAsk !== undefined ? { onAsk: frozenOnAsk } : {}),
|
|
223
|
-
...(
|
|
225
|
+
...childClampSeats(runClampSource()),
|
|
224
226
|
...(frozenOnQuestion !== undefined ? { onQuestion: frozenOnQuestion } : {}),
|
|
225
|
-
...(spec.handsReadOnly === true ? { handsReadOnly: true } : {}),
|
|
226
|
-
...(carrierReadFace() === "roots" ? { readFace: "roots" } : {}),
|
|
227
|
-
...(carrierWriteFace() === "roots" ? { writeFace: "roots" } : {}),
|
|
228
|
-
...(readDenyAdditionsNormalized.length > 0 ? { readDenyPatterns: Object.freeze(readDenyAdditionsNormalized.map((e) => ({ ...e }))) } : {}),
|
|
229
|
-
...(spec.interactiveTools === false ? { interactiveTools: false } : {}),
|
|
230
227
|
oneShot: spec.oneShot,
|
|
231
228
|
mountsCallerTool,
|
|
229
|
+
...(input.mountedMcp !== undefined ? { mountedMcp: input.mountedMcp } : {}),
|
|
232
230
|
parentSpecSeat,
|
|
233
231
|
...(internals?.questionFaceStripped === true ? { questionFaceStripped: true } : {}),
|
|
234
|
-
|
|
232
|
+
toolSelector: toolFaceSnapshot.selector,
|
|
235
233
|
deferTools: toolFaceSnapshot.defer,
|
|
236
234
|
alwaysLoadTools: toolFaceSnapshot.alwaysLoad,
|
|
237
235
|
...(toolFaceSnapshot.restoreGated !== undefined ? { restoreGatedTools: toolFaceSnapshot.restoreGated } : {}),
|
|
@@ -265,6 +263,7 @@ export function prepareInheritedGate(input) {
|
|
|
265
263
|
...(autoModeDecider ? { autoModeReview: { decider: autoModeDecider } } : {}),
|
|
266
264
|
...(spec.durableApproval !== undefined ? { durableApprovalForChildren: { ...spec.durableApproval } } : {}),
|
|
267
265
|
...(input.checkpointSeat !== undefined ? { checkpointStoreForChildren: input.checkpointSeat } : {}),
|
|
266
|
+
checkpointScopeForChildren: input.checkpointScope,
|
|
268
267
|
taskId: hostTaskId,
|
|
269
268
|
...(internals?.parentTaskId !== undefined ? { parentTaskId: internals.parentTaskId } : {}),
|
|
270
269
|
...(internals?.parentSessionId !== undefined ? { parentSessionId: internals.parentSessionId } : {}),
|
|
@@ -305,5 +304,5 @@ export function prepareInheritedGate(input) {
|
|
|
305
304
|
...(spec.enablePlanMode === true ? { enterPlanMode } : {}),
|
|
306
305
|
};
|
|
307
306
|
};
|
|
308
|
-
return { liveInheritedGate, seedInheritedGate, inheritedAncestorRules, inheritedShellGate, inheritedParentConstraints, permissionMode, commitModeSeats, endModeCeiling, inheritedAdmittedOrgScopes, priorOwnOrgVerdict, orgGovernedProvenance, effectiveShellGate, ownSessionRulesRef, ancestorSessionRulesRef, ancestorRulesNow, memoryAdmittedOrgScopesRef, ownOrgVerdictRef,
|
|
307
|
+
return { liveInheritedGate, seedInheritedGate, inheritedAncestorRules, inheritedShellGate, inheritedParentConstraints, permissionMode, commitModeSeats, endModeCeiling, inheritedAdmittedOrgScopes, priorOwnOrgVerdict, orgGovernedProvenance, effectiveShellGate, ownSessionRulesRef, ancestorSessionRulesRef, ancestorRulesNow, memoryAdmittedOrgScopesRef, ownOrgVerdictRef, runClampSource, faceCheckpointSection, writeFaceCheckpointSection, skillGrantCheckpointSection, frozenOnAsk, hookEnvSource, notifyOwnHookCrash, frozenOnQuestion, parentSpecSeat, provenanceForChildrenRef, delegationSettlementRef, inheritedGateForChildren, carrierReadFace, carrierWriteFace, fullShellReachable, gateStopRef, stopForDenialLimit, enrichSpecToolCtx };
|
|
309
308
|
}
|
|
@@ -1,31 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PrepareTask's LISTINGS phase: the sub-agent tool lists' audit (`sub-agent-deny-lists.ts`),
|
|
3
|
-
* the agent-listing announce face read off the
|
|
4
|
-
* delegation tool's roster (with its deferred / excluded / removal-to-zero arms), the two listing
|
|
5
|
-
* opt-out advisories, the announced-listings mirror seeded from the once-per-session ledger, the
|
|
6
|
-
* deferred roster's ToolSearch ride, and the date_change seam. The body is the driver's stretch moved
|
|
7
|
-
* verbatim; the interface is the dependency list it had implicitly.
|
|
8
|
-
*
|
|
9
|
-
* SYNCHRONOUS FUNCTION, SYNCHRONOUS CALL: the stretch has no await, so the phase adds no yield between
|
|
10
|
-
* the disclosure mount before it and the context-lane seats after it (a stretch
|
|
11
|
-
* with no await is extracted as a sync function — an `async` wrapper would open a microtask window).
|
|
12
|
-
*
|
|
13
|
-
* Throws pass through unchanged: `config.agent.unknown_tool` (a denied-tools entry that names no
|
|
14
|
-
* tool — one judgment for every list a deployment writes, in `sub-agent-deny-lists.ts`).
|
|
15
|
-
*/
|
|
16
|
-
import type { AgentTool } from "../../internal/harness.js";
|
|
17
1
|
import type { TaskSpec } from "../types.js";
|
|
18
2
|
import type { AnnounceOnceSink, DateAnchorRead, Prepared, PrepareResume, ToolFaceSnapshot } from "./contracts.js";
|
|
19
3
|
import type { AnnouncedListingSnapshot } from "../../internal/harness.js";
|
|
20
4
|
import type { ResolvedSkillListingBudget } from "../skill-listing-budget.js";
|
|
21
5
|
export interface PrepareListingsInput {
|
|
22
|
-
/** borrowed-readonly — the REBOUND spec (`spec′`). Read: `
|
|
23
|
-
* (
|
|
24
|
-
* ⇒ seeded/removal projections), `attachments` (the two opt-outs). Never mutated. */
|
|
6
|
+
/** borrowed-readonly — the REBOUND spec (`spec′`). Read: `tools` (the roster-bearing delegation tool, by its `agentListing`
|
|
7
|
+
* marker), `sessionId` (continuation ⇒ seeded/removal projections), `attachments` (the two opt-outs). Never mutated. */
|
|
25
8
|
spec: Pick<TaskSpec, "agents" | "tools" | "sessionId" | "attachments">;
|
|
26
|
-
/** borrowed-readonly — the FULLY ASSEMBLED mount array (names + aliases = the audit's universe).
|
|
27
|
-
* Read only; this phase never mutates the roster. */
|
|
28
|
-
tools: ReadonlyArray<AgentTool>;
|
|
29
9
|
/** borrowed-readonly — the once-per-session ledger: its deduplicated operator sink (`onError`) and
|
|
30
10
|
* the whole announced snapshot (`arms()`) the mirror is seeded from. */
|
|
31
11
|
onceLedger: AnnounceOnceSink & {
|
|
@@ -33,12 +13,15 @@ export interface PrepareListingsInput {
|
|
|
33
13
|
};
|
|
34
14
|
/** borrowed-readonly — the acquired session's id (operator-line context). */
|
|
35
15
|
sessionId: string;
|
|
36
|
-
/** borrowed-readonly — the frozen tool face:
|
|
37
|
-
toolFaceSnapshot: Pick<ToolFaceSnapshot, "
|
|
16
|
+
/** borrowed-readonly — the frozen tool face: the selector and `defer` decide the roster face's arm. */
|
|
17
|
+
toolFaceSnapshot: Pick<ToolFaceSnapshot, "selector" | "defer">;
|
|
38
18
|
/** borrowed-readonly — the activated deferred names as of prepare (transcript replay / checkpoint
|
|
39
19
|
* seed); only `has()` is read: an already-ACTIVE roster tool un-defers its listing face. The set
|
|
40
20
|
* keeps mutating mid-run (ToolSearch activations) — this phase reads it once, here. */
|
|
41
21
|
activeTools: ReadonlySet<string>;
|
|
22
|
+
/** borrowed-readonly — the leg's EFFECTIVE deferred set (the defer classification's answer): a name the caller listed in `deferTools`
|
|
23
|
+
* is deferred only if it is in here — a leg whose selector leaves ToolSearch out defers nothing, so its roster tool ships inline with its listing. */
|
|
24
|
+
deferred: ReadonlySet<string>;
|
|
42
25
|
/** borrowed-readonly — the durable-resume carrier: presence (seedAnnounced) and
|
|
43
26
|
* `seed.announcedListings.agents` (the removal-to-zero projection's gate). */
|
|
44
27
|
resume: Pick<PrepareResume, "seed"> | undefined;
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { formatLocalDate } from "../../prompts/default.js";
|
|
2
|
-
import { auditSubAgentToolLists } from "./sub-agent-deny-lists.js";
|
|
3
2
|
import { SKILL_TOOL_NAME } from "./synthetic-tools.js";
|
|
4
3
|
import { renderAgentListingDelta } from "./turn-attachments.js";
|
|
5
4
|
export function prepareListings(input) {
|
|
6
|
-
const { spec,
|
|
7
|
-
auditSubAgentToolLists({ spec, tools, onceLedger, sessionId });
|
|
5
|
+
const { spec, onceLedger, sessionId, toolFaceSnapshot, activeTools, deferred, resume, skillsListing, listingBudget, listingRideRef, renderWithDate, envFacts, tzValid, userTz, dateAnchor } = input;
|
|
8
6
|
const rosterBearingSpec = (spec.tools ?? []).find((t) => t.agentListing !== undefined && t.agentListing.length > 0);
|
|
9
7
|
const rosterFaceDeferred = rosterBearingSpec !== undefined &&
|
|
10
|
-
|
|
8
|
+
toolFaceSnapshot.selector.admits(rosterBearingSpec) &&
|
|
11
9
|
(toolFaceSnapshot.defer?.includes(rosterBearingSpec.name) ?? false) &&
|
|
10
|
+
deferred.has(rosterBearingSpec.name) &&
|
|
12
11
|
!activeTools.has(rosterBearingSpec.name);
|
|
13
12
|
const agentListingSpec = rosterBearingSpec !== undefined &&
|
|
14
13
|
!rosterFaceDeferred &&
|
|
15
|
-
|
|
14
|
+
toolFaceSnapshot.selector.admits(rosterBearingSpec)
|
|
16
15
|
? rosterBearingSpec
|
|
17
16
|
: undefined;
|
|
18
17
|
const agentListing = agentListingSpec
|
|
@@ -38,6 +38,8 @@ export interface PrepareMemoryEngineSessionInput {
|
|
|
38
38
|
externalContentTargetActive: boolean;
|
|
39
39
|
/** borrowed-readonly — the frozen preflight; only `mcp` (the declared entries the announcement walks). */
|
|
40
40
|
lockedPreflight: Pick<LockedPreflight, "mcp">;
|
|
41
|
+
/** borrowed-readonly — the run's MCP mount, read at call time (present iff the run declared a server): the children a delegation tool spawns inherit it, so its tools are rows of their pool. */
|
|
42
|
+
mountedMcp?: () => import("../mounted-mcp.js").MountedMcp;
|
|
41
43
|
/** borrowed-readonly — the materialized MCP handle; only `statuses` (the announcement's mounted-tool count). */
|
|
42
44
|
mcp: Pick<MaterializedMcp, "statuses">;
|
|
43
45
|
/** borrowed-readonly — the acquired session id (notice detail). */
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { classifyToolContentOrigin, contentOriginPollutes, delegationCallIsExternal } from "../memory-engine/content-origin.js";
|
|
2
|
+
import { mountedMcpPoolRows } from "../mounted-mcp.js";
|
|
2
3
|
import { narrowContentSafety, readCardAttestation } from "../memory-engine/delegation-provenance.js";
|
|
3
4
|
import { recordSyncUnattestable, sessionSettlements } from "../memory-engine/delegation-settlement.js";
|
|
4
5
|
import { protocolOf } from "../protocol-table.js";
|
|
@@ -8,7 +9,7 @@ import { fileArgPath } from "../../tools/fs/safety.js";
|
|
|
8
9
|
import { RosterBuilder } from "../tool-roster.js";
|
|
9
10
|
import { thrownText } from "../thrown-value.js";
|
|
10
11
|
export function prepareMemoryEngineSession(input) {
|
|
11
|
-
const { memoryEngineSession, internals, memoryDelegationEvidence, externalContentTargetActive, lockedPreflight, mcp, sessionId, runId, deps, provenanceForChildrenRef, delegationSettlementRef, spec, envHandToolNames, roster, contentOriginWrapRef } = input;
|
|
12
|
+
const { memoryEngineSession, internals, memoryDelegationEvidence, externalContentTargetActive, lockedPreflight, mcp, mountedMcp, sessionId, runId, deps, provenanceForChildrenRef, delegationSettlementRef, spec, envHandToolNames, roster, contentOriginWrapRef } = input;
|
|
12
13
|
const tools = roster.tools;
|
|
13
14
|
const delegationProvenanceChannel = internals?.delegationProvenance;
|
|
14
15
|
if (memoryEngineSession !== undefined || delegationProvenanceChannel !== undefined) {
|
|
@@ -53,7 +54,7 @@ export function prepareMemoryEngineSession(input) {
|
|
|
53
54
|
const withFaces = t;
|
|
54
55
|
if (withFaces.agentToolFaces === undefined && t.agentListing === undefined)
|
|
55
56
|
continue;
|
|
56
|
-
delegationByName.set(t.name, { faces: withFaces.agentToolFaces, pool: withFaces.agentToolPool });
|
|
57
|
+
delegationByName.set(t.name, { faces: withFaces.agentToolFaces, pool: withFaces.agentToolPool, inheritsMcp: t.agentToolInheritsMcp === true });
|
|
57
58
|
}
|
|
58
59
|
const poolToolPollutes = (t) => contentOriginPollutes(classifyToolContentOrigin({
|
|
59
60
|
declared: t.contentOrigin,
|
|
@@ -128,7 +129,7 @@ export function prepareMemoryEngineSession(input) {
|
|
|
128
129
|
const external = delegationCallIsExternal({
|
|
129
130
|
requestedType: typeof requested === "string" ? requested : undefined,
|
|
130
131
|
faces: delegation.faces,
|
|
131
|
-
pool: delegation.pool,
|
|
132
|
+
pool: delegation.pool !== undefined && delegation.inheritsMcp && mountedMcp !== undefined ? [...delegation.pool, ...mountedMcpPoolRows(mountedMcp())] : delegation.pool,
|
|
132
133
|
isPolluting: poolToolPollutes,
|
|
133
134
|
});
|
|
134
135
|
const result = await inner(toolCallId, params, signal, onUpdate);
|
|
@@ -140,6 +140,9 @@ export interface PrepareMemoryInput {
|
|
|
140
140
|
* record-query walk, so a source that flips WHILE the fork runs suppresses it live.
|
|
141
141
|
*/
|
|
142
142
|
captureForkOrigin?: string;
|
|
143
|
+
/** borrowed-readonly — the occupant of {@link captureForkOrigin} the fork COPIED (`SessionMetadata.forkedFromIncarnation`);
|
|
144
|
+
* absent ⇒ unknown, which binds the source's records whoever holds that id now. */
|
|
145
|
+
captureForkOriginIncarnation?: string;
|
|
143
146
|
/** borrowed-readonly — design/383 §2.5 (rescan, codex adversarial round): the fork-lineage read itself FAULTED
|
|
144
147
|
* (session metadata unreadable): whether this session forks an opted-out source is unknowable,
|
|
145
148
|
* so the capture arm runs INDETERMINATE (suppress fail-closed, disclose, mint nothing) — a
|
|
@@ -156,6 +159,9 @@ export interface PrepareMemoryInput {
|
|
|
156
159
|
sessionId: string;
|
|
157
160
|
controlDir?: string;
|
|
158
161
|
}>;
|
|
162
|
+
/** borrowed-readonly — the ACQUIRED session's own `incarnation` (prepare-task's one metadata read): the engines'
|
|
163
|
+
* occupant seat answers this run's id from it and from nothing else; absent ⇒ unknown (binds). */
|
|
164
|
+
sessionIncarnation?: string;
|
|
159
165
|
/**
|
|
160
166
|
* borrowed-readonly — the org-memory admission context (ruled 2026-08-05), assembled by
|
|
161
167
|
* prepare-task:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isAbsolute, sep } from "node:path";
|
|
2
2
|
import { deliverEngineNotice } from "../types.js";
|
|
3
3
|
import { admitMemoryScopes } from "../memory-admission.js";
|
|
4
|
-
import { adoptLegacyRepoDirs, canonicalize, deriveRepoControlPlaneDir, deriveProjectControlDir, deriveProjectMemoryDir, deriveRepoMemoryDir, drainMemoryAnnouncements, enqueueMemoryAnnouncement, isContainedIn, lookupProjectIdHint, recordProjectIdHint, resolveMemoryEngineRoot } from "../memory-engine/layout.js";
|
|
4
|
+
import { adoptLegacyRepoDirs, canonicalize, deriveRepoControlPlaneDir, deriveProjectControlDir, deriveProjectMemoryDir, deriveRepoMemoryDir, drainMemoryAnnouncements, effectiveControlRootOf, enqueueMemoryAnnouncement, isContainedIn, lookupProjectIdHint, recordProjectIdHint, resolveMemoryEngineRoot } from "../memory-engine/layout.js";
|
|
5
5
|
import { classifyScopePlanes, derivePersonalControlDir, derivePersonalMemoryDir, mergeHarvestReports, mergeInjections, needsDualRoots, parsedProjectPlane } from "../memory-engine/dual-root.js";
|
|
6
6
|
import { memoryProjectScopeAbsentNotice, normalizeMemorySpec } from "../memory.js";
|
|
7
7
|
import { deriveSupersededSet } from "../memory-engine/consolidation.js";
|
|
@@ -9,6 +9,7 @@ import { shadowNamesOf } from "../memory-engine/shadowing.js";
|
|
|
9
9
|
import { MEMORY_ANNOUNCEMENT_CAPTURE_OPTOUT_CODA, MEMORY_ANNOUNCEMENT_READONLY_CODA, MEMORY_CAPTURE_INDETERMINATE_NOTICE, MEMORY_CAPTURE_OPTOUT_NOTICE, MEMORY_PREFERENCE_DISCIPLINE, MEMORY_READONLY_NOTICE, MemoryEngine, entryFileHeadCarriesOrigin, memoryCaptureOptedOutNotice, memoryCaptureOptOutUnpersistedNotice, memoryConsolidationRecommendedNotice, memoryHarvestQuarantinedNotice, memoryHoldNotices, memoryRecallDisciplineSegment, memoryRestoreWithheldNotice, memorySessionPollutedNotice, pollutionContainmentCounts, } from "../memory-engine/engine.js";
|
|
10
10
|
import { adjudicateCaptureOptOut, captureOptOutDeniedError, captureOptOutUnpersistedError } from "./memory-capture-optout.js";
|
|
11
11
|
import { readSessionCaptureOptOut } from "../memory-engine/layout.js";
|
|
12
|
+
import { sessionIncarnationResolver } from "../memory-engine/session-incarnation.js";
|
|
12
13
|
import { createMemoryEngineTools } from "../memory-engine/tools.js";
|
|
13
14
|
import { assertScopeContractPlacement, parseScopeKey, resolveProjectId } from "../memory-engine/scope-contract.js";
|
|
14
15
|
import { FileMemoryEngineBackend } from "../memory-engine/file-backend.js";
|
|
@@ -97,6 +98,8 @@ export async function prepareMemory(input) {
|
|
|
97
98
|
if (useMemoryEngine && memorySpec) {
|
|
98
99
|
try {
|
|
99
100
|
const backend = deps.memoryBackend;
|
|
101
|
+
const lineageTokens = new Map(input.captureForkOrigin !== undefined && input.captureForkOriginIncarnation !== undefined ? [[input.captureForkOrigin, input.captureForkOriginIncarnation]] : []);
|
|
102
|
+
const incarnationOpt = { sessionIncarnation: sessionIncarnationResolver(sessionId, input.sessionIncarnation, lineageTokens) };
|
|
100
103
|
const pinned = backend.directoryRoot;
|
|
101
104
|
const engineRoot = resolveMemoryEngineRoot(deps.memoryEngineDir);
|
|
102
105
|
const repoRoot = deps.rootPath ?? taskRootPath;
|
|
@@ -156,6 +159,7 @@ export async function prepareMemory(input) {
|
|
|
156
159
|
: identityKey !== undefined
|
|
157
160
|
? deriveProjectMemoryDir(engineRoot, identityKey)
|
|
158
161
|
: deriveRepoMemoryDir(engineRoot, repoRoot);
|
|
162
|
+
const projectControlDir = identityKey !== undefined ? deriveProjectControlDir(engineRoot, identityKey) : deriveRepoControlPlaneDir(engineRoot, repoRoot);
|
|
159
163
|
const planes = memorySpec.scopeContract === "v2" ? classifyScopePlanes(memorySpec.scopes, memorySpec.writeScope) : undefined;
|
|
160
164
|
const dual = planes !== undefined && needsDualRoots(planes);
|
|
161
165
|
const personalOnly = planes !== undefined && !dual && planes.project.length === 0 && planes.writePlane !== "project" && (planes.personal.length > 0 || planes.writePlane === "personal");
|
|
@@ -170,15 +174,11 @@ export async function prepareMemory(input) {
|
|
|
170
174
|
}
|
|
171
175
|
const personalMemoryDir = derivePersonalMemoryDir(engineRoot);
|
|
172
176
|
const personalControlDir = derivePersonalControlDir(engineRoot);
|
|
173
|
-
const
|
|
174
|
-
const pinnedCtl = b.controlPlaneRoot;
|
|
175
|
-
return typeof pinnedCtl === "string" && pinnedCtl ? pinnedCtl : fallback;
|
|
176
|
-
};
|
|
177
|
-
const captureStoreOpt = (b, fallback) => deps.memoryCaptureRecordStore !== undefined ? { captureRecordStore: deps.memoryCaptureRecordStore({ controlDir: effectiveControlDir(b, fallback) }) } : {};
|
|
177
|
+
const captureStoreOpt = (dir, b, configured) => deps.memoryCaptureRecordStore !== undefined ? { captureRecordStore: deps.memoryCaptureRecordStore({ controlDir: effectiveControlRootOf(dir, { pinnedBy: b, controlDir: configured }) }) } : {};
|
|
178
178
|
const choosePersonalBackend = () => typeof pinned === "string" && pinned ? new FileMemoryEngineBackend(personalMemoryDir, { controlDir: personalControlDir }) : backend;
|
|
179
179
|
const createPersonalEngine = (personalBackend) => {
|
|
180
180
|
return {
|
|
181
|
-
engine: new MemoryEngine({ backend: personalBackend, memoryDir: personalMemoryDir, controlDir: personalControlDir, onIncident: onEngineIncident, provenance: input.memoryProvenance, ...captureStoreOpt(personalBackend, personalControlDir), ...
|
|
181
|
+
engine: new MemoryEngine({ backend: personalBackend, memoryDir: personalMemoryDir, controlDir: personalControlDir, onIncident: onEngineIncident, provenance: input.memoryProvenance, ...captureStoreOpt(personalMemoryDir, personalBackend, personalControlDir), ...incarnationOpt, ...(input.deps.memoryConsolidation !== undefined ? { consolidation: input.deps.memoryConsolidation } : {}) }),
|
|
182
182
|
backend: personalBackend,
|
|
183
183
|
};
|
|
184
184
|
};
|
|
@@ -341,8 +341,8 @@ export async function prepareMemory(input) {
|
|
|
341
341
|
if (dual) {
|
|
342
342
|
const personalBackendChosen = choosePersonalBackend();
|
|
343
343
|
{
|
|
344
|
-
const projCtl =
|
|
345
|
-
const persCtl =
|
|
344
|
+
const projCtl = effectiveControlRootOf(memoryDir, { pinnedBy: backend, controlDir: projectControlDir });
|
|
345
|
+
const persCtl = effectiveControlRootOf(personalMemoryDir, { pinnedBy: personalBackendChosen, controlDir: personalControlDir });
|
|
346
346
|
const overlap = (a, b) => isContainedIn(a, b) || isContainedIn(b, a);
|
|
347
347
|
const refuse = (what, a, b) => {
|
|
348
348
|
const e = new Error(`memory dual-root configuration error: ${what} overlap (${canonicalize(a)} vs ${canonicalize(b)}) — the planes' data roots and control planes must all be disjoint.`);
|
|
@@ -363,10 +363,10 @@ export async function prepareMemory(input) {
|
|
|
363
363
|
const projectEngine = new MemoryEngine({
|
|
364
364
|
backend,
|
|
365
365
|
memoryDir,
|
|
366
|
-
controlDir:
|
|
366
|
+
controlDir: projectControlDir,
|
|
367
367
|
onIncident: onEngineIncident,
|
|
368
368
|
provenance: input.memoryProvenance,
|
|
369
|
-
...captureStoreOpt(
|
|
369
|
+
...captureStoreOpt(memoryDir, backend, projectControlDir), ...incarnationOpt,
|
|
370
370
|
...(input.deps.memoryConsolidation !== undefined ? { consolidation: input.deps.memoryConsolidation } : {}),
|
|
371
371
|
});
|
|
372
372
|
const personal = createPersonalEngine(personalBackendChosen);
|
|
@@ -472,10 +472,10 @@ export async function prepareMemory(input) {
|
|
|
472
472
|
const engine = new MemoryEngine({
|
|
473
473
|
backend,
|
|
474
474
|
memoryDir,
|
|
475
|
-
controlDir:
|
|
475
|
+
controlDir: projectControlDir,
|
|
476
476
|
onIncident: onEngineIncident,
|
|
477
477
|
provenance: input.memoryProvenance,
|
|
478
|
-
...captureStoreOpt(
|
|
478
|
+
...captureStoreOpt(memoryDir, backend, projectControlDir), ...incarnationOpt,
|
|
479
479
|
...(input.deps.memoryConsolidation !== undefined ? { consolidation: input.deps.memoryConsolidation } : {}),
|
|
480
480
|
});
|
|
481
481
|
await armCaptureOptOut(engine);
|
|
@@ -16,10 +16,15 @@ import { type ToolResultStore } from "../tool-result-store.js";
|
|
|
16
16
|
import type { AgentTool } from "../../internal/harness.js";
|
|
17
17
|
import type { NestedUsage, NestedUsageAccum, RunnerDeps, TaskSpec } from "../types.js";
|
|
18
18
|
import type { PrepareResume } from "./contracts.js";
|
|
19
|
+
import type { ToolSelector } from "../tool-face.js";
|
|
19
20
|
export interface PrepareOffloadWrappersInput {
|
|
20
21
|
/** borrowed-readonly — the REBOUND spec (the config-doors result); read for the per-task coarse
|
|
21
22
|
* offload knob only. */
|
|
22
23
|
spec: Pick<TaskSpec, "toolResultThresholdChars">;
|
|
24
|
+
/** borrowed-readonly — the leg's compiled selector: an offloaded result is read back through the reader tool, so a leg whose selector
|
|
25
|
+
* does not admit the reader (a sub-agent whose lists leave it out, a deployment that excludes it) offloads nothing — a preview that
|
|
26
|
+
* sends the model to a tool it does not have is a dead end. */
|
|
27
|
+
selector: Pick<ToolSelector, "admits">;
|
|
23
28
|
/** borrowed-readonly — the deployment's coarse offload knob and its injected store (used AS-IS when
|
|
24
29
|
* present; a Runner-shared instance is viewed per task, see the body). */
|
|
25
30
|
deps: Pick<RunnerDeps, "toolResultThresholdChars" | "toolResultStore">;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DEFAULT_TOOL_RESULT_THRESHOLD_CHARS, InMemoryToolResultStore, RunnerSharedToolResultStore, ScopedToolResultStore, withToolResultOffload, } from "../tool-result-store.js";
|
|
1
|
+
import { DEFAULT_TOOL_RESULT_THRESHOLD_CHARS, InMemoryToolResultStore, OFFLOAD_TOOL_NAME, RunnerSharedToolResultStore, ScopedToolResultStore, withToolResultOffload, } from "../tool-result-store.js";
|
|
2
2
|
import { faceOf } from "../tool-roster.js";
|
|
3
3
|
const FIRST_PARTY_OFFLOAD_THRESHOLD_CHARS = 50_000;
|
|
4
4
|
export function prepareOffloadWrappers(input) {
|
|
5
|
-
const { spec, deps, resume, offloadScope, sessionId } = input;
|
|
5
|
+
const { spec, deps, resume, offloadScope, sessionId, selector } = input;
|
|
6
6
|
const nestedStats = { tokens: 0, turns: 0, tasks: 0, costMicroUsd: 0, anyUnpriced: false };
|
|
7
7
|
if (resume) {
|
|
8
8
|
nestedStats.tokens = resume.seed.nestedStats.tokens;
|
|
@@ -21,7 +21,7 @@ export function prepareOffloadWrappers(input) {
|
|
|
21
21
|
};
|
|
22
22
|
const explicitGlobalThreshold = spec.toolResultThresholdChars ?? deps.toolResultThresholdChars;
|
|
23
23
|
const offloadThreshold = explicitGlobalThreshold ?? DEFAULT_TOOL_RESULT_THRESHOLD_CHARS;
|
|
24
|
-
const offloadEnabled = Number.isFinite(offloadThreshold) && offloadThreshold > 0;
|
|
24
|
+
const offloadEnabled = Number.isFinite(offloadThreshold) && offloadThreshold > 0 && selector.admits({ name: OFFLOAD_TOOL_NAME });
|
|
25
25
|
const rawOffloadStore = offloadEnabled ? (deps.toolResultStore ?? new InMemoryToolResultStore()) : undefined;
|
|
26
26
|
const offloadStore = rawOffloadStore instanceof RunnerSharedToolResultStore
|
|
27
27
|
? new ScopedToolResultStore(rawOffloadStore, offloadScope)
|
|
@@ -42,9 +42,12 @@ export interface PrepareParkAskInput {
|
|
|
42
42
|
* `parkOnlyHandle` (the pause target), `suspendLoopCapHit`, `serializeCheckpointState`, `inFlightSpendMicroUsd`,
|
|
43
43
|
* `compensatePausedVM` (the pause-then-cut arm), `commitSuspendSaga` (the point of no return). */
|
|
44
44
|
saga: SuspendSaga | undefined;
|
|
45
|
-
/** borrowed-readonly — the REBOUND spec. Read: `principal` (the question's source identity, the
|
|
46
|
-
*
|
|
45
|
+
/** borrowed-readonly — the REBOUND spec. Read: `principal` (the question's source identity, the row's identity record),
|
|
46
|
+
* `retainBackgroundProcesses` (the park-only sweep gate). Never mutated. */
|
|
47
47
|
spec: Pick<TaskSpec, "principal" | "retainBackgroundProcesses">;
|
|
48
|
+
/** borrowed-readonly — this leg's checkpoint scope (the driver's one `checkpointScopeOf` derivation): the scope every row
|
|
49
|
+
* this closure mints is filed under. */
|
|
50
|
+
checkpointScope: string;
|
|
48
51
|
/** borrowed-readonly — the deployment's error face, as a Pick over the SAME `deps` object (receiver preserved for
|
|
49
52
|
* `deps.onError?.()`): the park refusals' disclosure, the pin failure. */
|
|
50
53
|
deps: Pick<RunnerDeps, "onError">;
|
|
@@ -101,6 +104,8 @@ export interface PrepareParkAskInput {
|
|
|
101
104
|
stampCallTarget: CallTargetStamp | undefined;
|
|
102
105
|
/** borrowed-readonly — the SAME seat the live gate stamps from ({@link import("./prepare-ask-lane.js").PrepareAskLaneInput.advertisedWritableDirs}): a parked call's projection re-adjudication asks one question about one call, so it must ask it against the same admitted list. Read at park time, not written here. */
|
|
103
106
|
advertisedWritableDirs: Pick<AdvertisedWritableDirs, "roots"> | undefined;
|
|
107
|
+
/** borrowed-readonly — the leg's ONE exempt root, the SAME list the live gate stamps ({@link import("./prepare-ask-lane.js").PrepareAskLaneInput.exemptRoots}). */
|
|
108
|
+
exemptRoots: readonly string[];
|
|
104
109
|
/** borrowed-readonly — the run's offload store, or undefined (a volatile store holding results refuses the park). */
|
|
105
110
|
offloadStore: ToolResultStore | undefined;
|
|
106
111
|
/** borrowed-readonly — the per-task owned env, or undefined (a non-remote per-task env refuses the park). Never destroyed. */
|
|
@@ -138,12 +143,6 @@ export interface PrepareParkAskInput {
|
|
|
138
143
|
totalBudgetMicroUsd?: number;
|
|
139
144
|
totalTokens?: number;
|
|
140
145
|
} | undefined;
|
|
141
|
-
/** borrowed-readonly — the inherited-gate phase's three version-stamp predicates (face / F-012 / org admission). */
|
|
142
|
-
faceCheckpointState: () => boolean;
|
|
143
|
-
/** borrowed-readonly — see `faceCheckpointState`. */
|
|
144
|
-
f012CheckpointState: () => boolean;
|
|
145
|
-
/** borrowed-readonly — see `faceCheckpointState`. */
|
|
146
|
-
orgAdmissionCheckpointState: () => boolean;
|
|
147
146
|
/** borrowed-readonly — the policy-chain phase's rule-offer factory (the row's suggestion members). */
|
|
148
147
|
ruleOffersOf: ReturnType<typeof createRuleOffersOf>;
|
|
149
148
|
/** borrowed-readonly — the policy-chain phase's Skill-card binding factory: a parked `Skill` call's row carries the named skill and
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { uuidv7 } from "../../engine/session/uuid.js";
|
|
2
2
|
import { Value } from "typebox/value";
|
|
3
|
-
import {
|
|
3
|
+
import { classifyQuestionOutcome, validateAskQuestions } from "../ask-question.js";
|
|
4
4
|
import { hasBackgroundShell, sweepBackgroundShells, sweepRunBoundaryBackgroundShells } from "../background-shell.js";
|
|
5
5
|
import { boundInputHashOf } from "../canonical-json.js";
|
|
6
|
-
import {
|
|
6
|
+
import { unencodableIn } from "../checkpoint-requirements.js";
|
|
7
|
+
import { buildRiskDescriptor, debitLedger, encodeAtFidelity, mintCheckpointId, mintCheckpointToken, resolveDeclaredFidelity, samePlainValue, } from "../checkpoint-store.js";
|
|
7
8
|
import { pauseOf } from "../pause-registry.js";
|
|
8
9
|
import { askCarryRowMembers } from "../hooks.js";
|
|
9
10
|
import { askMandateMember, ownedClearanceFacts } from "../ask-origin.js";
|
|
10
11
|
import { defaultTaskRegistry } from "../task-registry.js";
|
|
11
|
-
import { advertisedWritableRootsSeat, isLiveApproverSeat, carriesBidiControls, describeThrown, refuseOutOfContractDecision, tryCloneArgs } from "../tool-policy.js";
|
|
12
|
+
import { advertisedWritableRootsSeat, exemptRootsSeat, isLiveApproverSeat, carriesBidiControls, describeThrown, refuseOutOfContractDecision, tryCloneArgs } from "../tool-policy.js";
|
|
12
13
|
import { InMemoryToolResultStore, ScopedToolResultStore, isVolatileOffloadStore } from "../tool-result-store.js";
|
|
13
14
|
import { raceAbort, raceSettlementAgainstSignal } from "./abort-race.js";
|
|
14
|
-
import { checkpointScopeOf } from "./checkpoint-scope.js";
|
|
15
15
|
import { CONTENT_ASK_BINDING_CAP } from "./content-ask-bindings.js";
|
|
16
16
|
import { DEFAULT_UNATTENDED_APPROVAL_TTL_MS, publishCommittedSuspend, sanitizedTtlMs } from "./park-commit.js";
|
|
17
17
|
import { remoteEnvFailureNote } from "./remote-env-retry.js";
|
|
18
|
-
import { callFaceSeat, parkedToolIdentity, parkedToolFace } from "../tool-roster.js";
|
|
19
|
-
import { seatOf
|
|
18
|
+
import { approvalCardMemberOf, callFaceSeat, engineCardOf, parkedToolIdentity, parkedToolFace } from "../tool-roster.js";
|
|
19
|
+
import { seatOf } from "../tool-name-readings.js";
|
|
20
20
|
class ParkRefusal extends Error {
|
|
21
21
|
constructor(message, options) {
|
|
22
22
|
super(message, options);
|
|
@@ -27,7 +27,7 @@ const wordlessDemand = (toolName) => {
|
|
|
27
27
|
throw new Error(`a real-approval demand for "${toolName}" reached the park with no origin word — the origin stamp precedes every park`);
|
|
28
28
|
};
|
|
29
29
|
export function prepareParkAsk(input) {
|
|
30
|
-
const { askLane, saga, spec, deps, sessionId, checkpointStore, toolRosterDeltas, parkLaneArmed, contentAskRoutable, liveQuestionFace, mountedQuestionTool, contentAskBindings, lateStrandedAnswers, discloseStrandedAnswers, onAsk, runtimeCaps, inheritedUnavailableAsks, basePolicyForResumeEdit, budgetSnapshot, handsCwdRef, handsRoot, stampCallTarget, advertisedWritableDirs, offloadStore, ownedEnv, incompleteSuspendAdapter, session, sessions, suspendChainBase, maxSuspends, remoteEnvFailures, shellGatedTools, irreversibilityTier, toolMarkSources, effectiveShellGate, durableApproval, priorLedger, liveSpendRef, resourceTotal,
|
|
30
|
+
const { askLane, saga, spec, deps, sessionId, checkpointStore, checkpointScope, toolRosterDeltas, parkLaneArmed, contentAskRoutable, liveQuestionFace, mountedQuestionTool, contentAskBindings, lateStrandedAnswers, discloseStrandedAnswers, onAsk, runtimeCaps, inheritedUnavailableAsks, basePolicyForResumeEdit, budgetSnapshot, handsCwdRef, handsRoot, stampCallTarget, advertisedWritableDirs, exemptRoots, offloadStore, ownedEnv, incompleteSuspendAdapter, session, sessions, suspendChainBase, maxSuspends, remoteEnvFailures, shellGatedTools, irreversibilityTier, toolMarkSources, effectiveShellGate, durableApproval, priorLedger, liveSpendRef, resourceTotal, ruleOffersOf, grantBindingOf, now, humanReviewRef, abortController, harness, pausedRef } = input;
|
|
31
31
|
if (askLane === undefined || saga === undefined)
|
|
32
32
|
return { parkAsk: undefined };
|
|
33
33
|
const { composedCallSignal, approvalPreviewOf } = askLane;
|
|
@@ -115,7 +115,8 @@ export function prepareParkAsk(input) {
|
|
|
115
115
|
};
|
|
116
116
|
const suspendAsk = parkLaneArmed && checkpointStore !== undefined
|
|
117
117
|
? async (req, postHookArgs, safety, liveFaceUnavailable, realApproval, allowRuleShadowed, askDecisionReason, probeReason, probeCause, segmentCoverage, matchedAskRule, probeMandated, carry) => {
|
|
118
|
-
const
|
|
118
|
+
const contentAsk = engineCardOf(req) === "question";
|
|
119
|
+
const syncFirstEligible = contentAsk ? contentAskRoutable(req.toolCallId) : isLiveApproverSeat(onAsk);
|
|
119
120
|
if (syncFirstEligible &&
|
|
120
121
|
runtimeCaps?.forceDurableGate !== true &&
|
|
121
122
|
liveFaceUnavailable !== true &&
|
|
@@ -148,6 +149,9 @@ export function prepareParkAsk(input) {
|
|
|
148
149
|
`a durable approval row must hold an inert snapshot of exactly what a human approves and a resume executes`, { cause: captured.cause });
|
|
149
150
|
}
|
|
150
151
|
const parkedArgs = captured.value;
|
|
152
|
+
const unencodable = unencodableIn(parkedArgs, "pendingAction.args");
|
|
153
|
+
if (unencodable !== undefined)
|
|
154
|
+
throw new ParkRefusal(`the arguments of "${req.toolName}" cannot be bound into the approval row's digest (${unencodable.kind} at ${unencodable.path}) — a durable approval row must hold an inert snapshot of exactly what a human approves and a resume executes`);
|
|
151
155
|
const projectionMovedArgs = backendFidelity !== "structured-clone" && !samePlainValue(parked.value, parkedArgs);
|
|
152
156
|
if (projectionMovedArgs && basePolicyForResumeEdit === undefined) {
|
|
153
157
|
throw new ParkRefusal(`the arguments of "${req.toolName}" change shape when stored by this checkpoint backend, and no policy is wired to re-adjudicate the stored shape ` +
|
|
@@ -167,6 +171,7 @@ export function prepareParkAsk(input) {
|
|
|
167
171
|
...callFaceSeat(req.face),
|
|
168
172
|
...(handsCwdRef !== undefined ? { cwd: handsCwdRef.current } : {}), ...(handsRoot !== undefined ? { root: handsRoot } : {}),
|
|
169
173
|
...advertisedWritableRootsSeat(advertisedWritableDirs),
|
|
174
|
+
...exemptRootsSeat(exemptRoots),
|
|
170
175
|
});
|
|
171
176
|
const withReading = stampCallTarget?.(reprojectedReq(), cutSignal);
|
|
172
177
|
const reprojectedRaced = await raceSettlementAgainstSignal(withReading === undefined ? Promise.resolve(basePolicyForResumeEdit.check(reprojectedReq(), cutSignal)) : withReading.then((r) => basePolicyForResumeEdit.check(r, cutSignal)), cutSignal);
|
|
@@ -252,6 +257,7 @@ export function prepareParkAsk(input) {
|
|
|
252
257
|
? `human approval required before safety-tightened tool "${req.toolName}"`
|
|
253
258
|
: `real human approval required for tool "${req.toolName}" (non-budgetable: ${rowRealApproval.origin})`,
|
|
254
259
|
toolName: req.toolName,
|
|
260
|
+
...approvalCardMemberOf(req),
|
|
255
261
|
...(safety !== undefined ? { safetyAxis: safety } : {}),
|
|
256
262
|
...(rowRealApproval !== undefined ? { realApproval: rowRealApproval } : {}),
|
|
257
263
|
riskDescriptor,
|
|
@@ -261,15 +267,17 @@ export function prepareParkAsk(input) {
|
|
|
261
267
|
kind: "human",
|
|
262
268
|
reason: `human approval required for tool "${req.toolName}"`,
|
|
263
269
|
toolName: req.toolName,
|
|
270
|
+
...approvalCardMemberOf(req),
|
|
264
271
|
riskDescriptor,
|
|
265
272
|
}
|
|
266
273
|
: {
|
|
267
274
|
kind: "irreversible_ask",
|
|
268
275
|
reason: `human approval required before irreversible tool "${req.toolName}"`,
|
|
269
276
|
toolName: req.toolName,
|
|
277
|
+
...approvalCardMemberOf(req),
|
|
270
278
|
riskDescriptor,
|
|
271
279
|
};
|
|
272
|
-
const scope =
|
|
280
|
+
const scope = checkpointScope;
|
|
273
281
|
const ttlMs = sanitizedTtlMs(durableApproval?.ttlMs);
|
|
274
282
|
const checkpointState = serializeCheckpointState(remoteHandle, inFlightSpendMicroUsd());
|
|
275
283
|
if (rowRealApproval !== undefined && checkpointState.readFace !== undefined) {
|
|
@@ -294,7 +302,6 @@ export function prepareParkAsk(input) {
|
|
|
294
302
|
cp = {
|
|
295
303
|
token,
|
|
296
304
|
checkpointId: mintCheckpointId(),
|
|
297
|
-
version: checkpointVersionFor({ resource: false, binding: true, token: approvalLedger.totalTokens !== undefined, orgAdmission: orgAdmissionCheckpointState(), f012: f012CheckpointState(), realApproval: rowRealApproval !== undefined, face: faceCheckpointState() }),
|
|
298
305
|
scope,
|
|
299
306
|
sessionId,
|
|
300
307
|
leafId,
|