@sema-agent/core 7.55.0 → 7.57.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 +1054 -0
- package/LICENSE +1 -1
- package/dist/agents/cascade.js +1 -1
- package/dist/agents/cc-peer-directory.js +1 -0
- package/dist/agents/child-model-seat.d.ts +0 -11
- package/dist/agents/child-model-seat.js +0 -3
- package/dist/agents/list-agents-tool.d.ts +3 -1
- package/dist/agents/list-agents-tool.js +7 -7
- package/dist/agents/org-delivery-gate.js +3 -4
- package/dist/agents/peer-directory.d.ts +22 -4
- package/dist/agents/peer-directory.js +24 -2
- package/dist/agents/peer-held-queue.d.ts +69 -49
- package/dist/agents/peer-held-queue.js +255 -106
- package/dist/agents/peer-session-drain.js +65 -45
- package/dist/agents/repair-loop.js +2 -2
- package/dist/agents/send-message-tool.js +7 -6
- package/dist/agents/subagent.d.ts +6 -4
- package/dist/agents/subagent.js +72 -68
- package/dist/agents/tool-filter.d.ts +7 -5
- package/dist/agents/tool-filter.js +12 -9
- package/dist/agents/verify.d.ts +3 -2
- package/dist/agents/verify.js +3 -3
- package/dist/brain/anthropic.js +45 -80
- package/dist/brain/media-degrade.d.ts +18 -7
- package/dist/brain/media-degrade.js +13 -2
- package/dist/brain/model-capability.d.ts +37 -0
- package/dist/brain/model-capability.js +34 -0
- package/dist/brain/model-presets.d.ts +2 -8
- package/dist/brain/model-presets.js +1 -6
- package/dist/brain/open-responses.js +23 -34
- package/dist/brain/openai.js +25 -96
- package/dist/brain/provider-dialect.d.ts +3 -2
- package/dist/brain/provider-dialect.js +2 -2
- package/dist/brain/reasoning-request.d.ts +96 -0
- package/dist/brain/reasoning-request.js +174 -0
- package/dist/brain/reasoning.d.ts +11 -11
- package/dist/brain/reasoning.js +4 -3
- package/dist/brain/request-params.d.ts +13 -4
- package/dist/brain/request-params.js +21 -5
- package/dist/brain/status-sink.d.ts +20 -0
- package/dist/brain/status-sink.js +7 -0
- package/dist/brain/stream-engine.d.ts +9 -0
- package/dist/brain/stream-engine.js +24 -10
- package/dist/brain/stream-shared.d.ts +5 -4
- package/dist/brain/stream-shared.js +4 -4
- package/dist/core/a2a.d.ts +2 -1
- package/dist/core/a2a.js +19 -13
- package/dist/core/agent-definition.d.ts +10 -0
- package/dist/core/allow-entry.d.ts +23 -23
- package/dist/core/allow-entry.js +42 -46
- package/dist/core/allow-rule-shadow.d.ts +3 -3
- package/dist/core/approval-object.d.ts +21 -5
- package/dist/core/approval-object.js +44 -17
- package/dist/core/ask-origin.d.ts +66 -20
- package/dist/core/ask-origin.js +63 -23
- package/dist/core/ask-question.d.ts +51 -8
- package/dist/core/ask-question.js +3 -4
- package/dist/core/ask-unresolvable-notice.d.ts +8 -3
- package/dist/core/ask-unresolvable-notice.js +16 -2
- package/dist/core/auto-compaction.d.ts +71 -6
- package/dist/core/auto-compaction.js +42 -26
- package/dist/core/background-agent-store.d.ts +6 -2
- package/dist/core/background-agent-store.js +1 -1
- package/dist/core/checkpoint-generation.d.ts +53 -0
- package/dist/core/checkpoint-generation.js +35 -0
- package/dist/core/checkpoint-queries.d.ts +180 -0
- package/dist/core/checkpoint-queries.js +272 -0
- package/dist/core/checkpoint-requirements.d.ts +19 -1
- package/dist/core/checkpoint-requirements.js +6 -0
- package/dist/core/checkpoint-store.d.ts +105 -53
- package/dist/core/checkpoint-store.js +43 -20
- package/dist/core/cross-boundary-taint.d.ts +6 -5
- package/dist/core/cross-boundary-taint.js +5 -5
- package/dist/core/decision-receipt.d.ts +37 -3
- package/dist/core/decision-receipt.js +17 -17
- package/dist/core/delegation-not-started.d.ts +6 -0
- package/dist/core/delegation-not-started.js +17 -0
- package/dist/core/engine-attestation.d.ts +93 -0
- package/dist/core/engine-attestation.js +70 -0
- package/dist/core/engine-capabilities.d.ts +4 -1
- package/dist/core/engine-capabilities.js +1 -1
- package/dist/core/engine-notice.d.ts +32 -12
- package/dist/core/engine-notice.js +6 -0
- package/dist/core/file-history-store.d.ts +104 -22
- package/dist/core/file-history-store.js +37 -19
- package/dist/core/gate-fold.d.ts +1 -1
- package/dist/core/gate-fold.js +22 -10
- package/dist/core/gate-lanes.js +73 -65
- package/dist/core/gate-outcome.d.ts +26 -5
- package/dist/core/gate-outcome.js +26 -0
- package/dist/core/governance-codes.d.ts +5 -1
- package/dist/core/governance-codes.js +6 -0
- package/dist/core/hooks.d.ts +19 -18
- package/dist/core/hooks.js +3 -1
- package/dist/core/host-floor.d.ts +128 -0
- package/dist/core/host-floor.js +206 -0
- package/dist/core/host-target.d.ts +38 -3
- package/dist/core/host-target.js +38 -5
- package/dist/core/mailbox-store.d.ts +62 -1
- package/dist/core/mailbox-store.js +59 -0
- package/dist/core/mcp-name-judge.d.ts +46 -0
- package/dist/core/mcp-name-judge.js +61 -0
- package/dist/core/mcp-probe.d.ts +1 -1
- package/dist/core/mcp-probe.js +2 -5
- package/dist/core/mcp.d.ts +5 -1
- package/dist/core/mcp.js +70 -64
- package/dist/core/memory-engine/consolidation-driver.js +4 -3
- package/dist/core/memory-engine/delegation-settlement.js +15 -24
- package/dist/core/memory-engine/distiller.js +26 -17
- package/dist/core/memory-engine/engine.js +4 -4
- package/dist/core/memory-engine/layout.d.ts +60 -8
- package/dist/core/memory-engine/layout.js +70 -8
- package/dist/core/model-seat.d.ts +10 -3
- package/dist/core/mods/classic-events.d.ts +67 -0
- package/dist/core/mods/classic-events.js +1 -0
- package/dist/core/mods/dollar.d.ts +13 -0
- package/dist/core/mods/extension-call.d.ts +31 -0
- package/dist/core/mods/extension-call.js +43 -0
- package/dist/core/mods/kernel/dispatch.d.ts +20 -3
- package/dist/core/mods/kernel/dispatch.js +140 -69
- package/dist/core/mods/kernel/events.d.ts +47 -11
- package/dist/core/mods/kernel/events.js +66 -42
- package/dist/core/mods/kernel/index.d.ts +4 -4
- package/dist/core/mods/kernel/index.js +2 -2
- package/dist/core/mods/kernel/receive.d.ts +39 -5
- package/dist/core/mods/kernel/receive.js +290 -17
- package/dist/core/mods/kernel/registration.d.ts +33 -2
- package/dist/core/mods/kernel/registration.js +6 -7
- package/dist/core/mods/kernel/site-rules.d.ts +44 -16
- package/dist/core/mods/kernel/site-rules.js +24 -42
- package/dist/core/mods/spec-seats.d.ts +69 -0
- package/dist/core/mods/spec-seats.js +114 -0
- package/dist/core/mods/stations.d.ts +28 -8
- package/dist/core/mods/stations.js +29 -13
- package/dist/core/mods/tool-call.d.ts +79 -0
- package/dist/core/mods/tool-call.js +152 -0
- package/dist/core/namespaced-rule-name.d.ts +32 -38
- package/dist/core/namespaced-rule-name.js +29 -36
- package/dist/core/parent-spec-seat.d.ts +6 -1
- package/dist/core/parent-spec-seat.js +2 -0
- package/dist/core/park-selfcheck.js +3 -0
- package/dist/core/permission-rule-consent.d.ts +24 -3
- package/dist/core/permission-rule-consent.js +136 -41
- package/dist/core/permission-rule-model.d.ts +57 -5
- package/dist/core/permission-rule-model.js +90 -31
- package/dist/core/permission-rule-org.d.ts +6 -2
- package/dist/core/permission-rule-org.js +8 -4
- package/dist/core/permission-rule-provider.d.ts +5 -2
- package/dist/core/permission-rule-provider.js +41 -11
- package/dist/core/permission-rule-store.d.ts +3 -2
- package/dist/core/permission-rule-store.js +11 -2
- package/dist/core/permission-rule-sync.js +3 -2
- package/dist/core/permission-rule-syntax.d.ts +5 -4
- package/dist/core/permission-rule-syntax.js +2 -2
- package/dist/core/permission-rules.d.ts +4 -4
- package/dist/core/permission-rules.js +11 -20
- package/dist/core/persisted-rule-arms.d.ts +2 -2
- package/dist/core/persisted-rule-arms.js +10 -12
- package/dist/core/principal-name.d.ts +20 -0
- package/dist/core/principal-name.js +22 -0
- package/dist/core/prompt-section-seat.js +4 -6
- package/dist/core/protocol-http-auth.d.ts +40 -5
- package/dist/core/protocol-http-auth.js +168 -4
- package/dist/core/protocol-naming.d.ts +20 -0
- package/dist/core/protocol-naming.js +20 -3
- package/dist/core/read-only-shell.d.ts +20 -5
- package/dist/core/read-only-shell.js +29 -14
- package/dist/core/remote-env.d.ts +37 -1
- package/dist/core/remote-env.js +11 -0
- package/dist/core/resume-startup-cause.d.ts +24 -2
- package/dist/core/resume-startup-cause.js +20 -1
- package/dist/core/retired-keys.d.ts +16 -0
- package/dist/core/retired-keys.js +16 -4
- package/dist/core/rewrite-rejudge.d.ts +60 -0
- package/dist/core/rewrite-rejudge.js +36 -0
- package/dist/core/roles.d.ts +28 -1
- package/dist/core/roles.js +81 -26
- package/dist/core/rule-lane-reads.d.ts +20 -15
- package/dist/core/rule-lane-reads.js +45 -17
- package/dist/core/rule-owner.d.ts +3 -3
- package/dist/core/rule-owner.js +3 -2
- package/dist/core/runner/announce-once-ledger.d.ts +14 -0
- package/dist/core/runner/announce-once-ledger.js +5 -0
- package/dist/core/runner/assemble-result.d.ts +1 -0
- package/dist/core/runner/assemble-result.js +1 -1
- package/dist/core/runner/call-hook-stations.d.ts +3 -2
- package/dist/core/runner/caller-roster.d.ts +16 -4
- package/dist/core/runner/caller-roster.js +33 -6
- package/dist/core/runner/capability-withheld-seat.d.ts +5 -0
- package/dist/core/runner/capability-withheld-seat.js +24 -0
- package/dist/core/runner/classifier-ladder.d.ts +7 -9
- package/dist/core/runner/classifier-ladder.js +3 -3
- package/dist/core/runner/compact-session.d.ts +10 -0
- package/dist/core/runner/compact-session.js +202 -0
- package/dist/core/runner/compaction-call-options.d.ts +2 -2
- package/dist/core/runner/compaction-seams.d.ts +21 -1
- package/dist/core/runner/compaction-seams.js +11 -8
- package/dist/core/runner/construction-doors.js +3 -0
- package/dist/core/runner/contracts.d.ts +50 -40
- package/dist/core/runner/cross-boundary-lane.d.ts +17 -13
- package/dist/core/runner/cross-boundary-lane.js +40 -27
- package/dist/core/runner/denial-limit-arms.d.ts +2 -2
- package/dist/core/runner/denial-limit-arms.js +1 -1
- package/dist/core/runner/derived-route-fallback.d.ts +13 -0
- package/dist/core/runner/derived-route-fallback.js +6 -0
- package/dist/core/runner/env-capability-census.d.ts +3 -2
- package/dist/core/runner/env-capability-census.js +9 -3
- package/dist/core/runner/file-history-request.d.ts +18 -0
- package/dist/core/runner/file-history-request.js +21 -13
- package/dist/core/runner/file-history-restore.d.ts +45 -0
- package/dist/core/runner/file-history-restore.js +46 -0
- package/dist/core/runner/gate-exit.d.ts +3 -3
- package/dist/core/runner/gate-exit.js +4 -3
- package/dist/core/runner/image.d.ts +7 -17
- package/dist/core/runner/image.js +9 -60
- package/dist/core/runner/permission-rule-lanes.d.ts +11 -11
- package/dist/core/runner/permission-rule-lanes.js +39 -17
- package/dist/core/runner/person-path-rows.d.ts +12 -9
- package/dist/core/runner/person-path-rows.js +18 -7
- package/dist/core/runner/prepare-acquire-reconcile.d.ts +3 -0
- package/dist/core/runner/prepare-acquire-reconcile.js +2 -1
- package/dist/core/runner/prepare-ask-lane.d.ts +2 -2
- package/dist/core/runner/prepare-ask-lane.js +5 -2
- package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -6
- package/dist/core/runner/prepare-caps-and-workflow.js +4 -3
- package/dist/core/runner/prepare-config-doors.d.ts +35 -38
- package/dist/core/runner/prepare-config-doors.js +46 -28
- package/dist/core/runner/prepare-defer-classify.d.ts +4 -3
- package/dist/core/runner/prepare-defer-classify.js +7 -8
- package/dist/core/runner/prepare-file-history.d.ts +48 -8
- package/dist/core/runner/prepare-file-history.js +7 -39
- package/dist/core/runner/prepare-gate-stations.d.ts +1 -1
- package/dist/core/runner/prepare-gate-stations.js +10 -1
- package/dist/core/runner/prepare-hands-readface.d.ts +5 -9
- package/dist/core/runner/prepare-hands-readface.js +17 -14
- package/dist/core/runner/prepare-inherited-gate.d.ts +6 -3
- package/dist/core/runner/prepare-inherited-gate.js +5 -3
- package/dist/core/runner/prepare-memory-engine-session.js +1 -1
- package/dist/core/runner/prepare-park-ask.d.ts +2 -0
- package/dist/core/runner/prepare-park-ask.js +7 -7
- package/dist/core/runner/prepare-policy-chain.d.ts +6 -3
- package/dist/core/runner/prepare-policy-chain.js +67 -76
- package/dist/core/runner/prepare-prompt-assembly.d.ts +5 -7
- package/dist/core/runner/prepare-prompt-assembly.js +10 -8
- package/dist/core/runner/prepare-prompt-inputs.d.ts +11 -9
- package/dist/core/runner/prepare-prompt-inputs.js +3 -5
- package/dist/core/runner/prepare-protocol-tools.d.ts +2 -0
- package/dist/core/runner/prepare-protocol-tools.js +3 -3
- package/dist/core/runner/prepare-safety-scan.d.ts +1 -1
- package/dist/core/runner/prepare-safety-scan.js +0 -17
- package/dist/core/runner/prepare-suspend-saga.d.ts +2 -0
- package/dist/core/runner/prepare-suspend-saga.js +5 -6
- package/dist/core/runner/prepare-task.d.ts +5 -2
- package/dist/core/runner/prepare-task.js +48 -43
- package/dist/core/runner/prepare-tool-disclosure-mount.d.ts +20 -4
- package/dist/core/runner/prepare-tool-disclosure-mount.js +33 -23
- package/dist/core/runner/prepare-turn-wiring.d.ts +0 -4
- package/dist/core/runner/prepare-turn-wiring.js +2 -7
- package/dist/core/runner/prepare-wiring-manifest.d.ts +6 -2
- package/dist/core/runner/prepare-wiring-manifest.js +3 -3
- package/dist/core/runner/resume-admission.js +1 -1
- package/dist/core/runner/resume-apply.js +11 -12
- package/dist/core/runner/resume-checkpoint-screen.js +3 -0
- package/dist/core/runner/resume-claim.d.ts +4 -2
- package/dist/core/runner/resume-claim.js +15 -8
- package/dist/core/runner/retired-runner-deps.js +1 -0
- package/dist/core/runner/rewind-files.d.ts +12 -0
- package/dist/core/runner/rewind-files.js +90 -0
- package/dist/core/runner/run-attachment-seats.js +2 -1
- package/dist/core/runner/run-brain-sinks.d.ts +4 -1
- package/dist/core/runner/run-brain-sinks.js +4 -2
- package/dist/core/runner/run-harness-handlers.js +12 -4
- package/dist/core/runner/run-leg.d.ts +1 -1
- package/dist/core/runner/run-leg.js +40 -39
- package/dist/core/runner/run-notification-lane.d.ts +2 -0
- package/dist/core/runner/run-notification-lane.js +2 -2
- package/dist/core/runner/run-recovery-lanes.js +3 -4
- package/dist/core/runner/run-settle-and-teardown.js +7 -12
- package/dist/core/runner/run-terminal-adoption.js +3 -4
- package/dist/core/runner/run-turn-boundary.js +4 -15
- package/dist/core/runner/runtask.d.ts +10 -0
- package/dist/core/runner/runtask.js +35 -42
- package/dist/core/runner/send-message-continuation.js +1 -1
- package/dist/core/runner/session-read-file-states.d.ts +15 -0
- package/dist/core/runner/session-read-file-states.js +28 -0
- package/dist/core/runner/session-rule-policy.js +4 -3
- package/dist/core/runner/session-verb-doors.d.ts +28 -0
- package/dist/core/runner/session-verb-doors.js +48 -0
- package/dist/core/runner/session-write-ledger.d.ts +30 -0
- package/dist/core/runner/session-write-ledger.js +101 -0
- package/dist/core/runner/shell-env-withheld.d.ts +33 -0
- package/dist/core/runner/shell-env-withheld.js +51 -0
- package/dist/core/runner/skills-seat.js +6 -2
- package/dist/core/runner/stream-settle-backstop.js +12 -15
- package/dist/core/runner/sub-agent-deny-lists.d.ts +25 -3
- package/dist/core/runner/sub-agent-deny-lists.js +25 -17
- package/dist/core/runner/synthetic-tools.d.ts +6 -0
- package/dist/core/runner/synthetic-tools.js +4 -1
- package/dist/core/runner/teardown-bounded.d.ts +1 -0
- package/dist/core/runner/teardown-bounded.js +1 -0
- package/dist/core/runner/tool-disclosure.d.ts +10 -12
- package/dist/core/runner/tool-disclosure.js +1 -3
- package/dist/core/runner/tool-end-body.d.ts +1 -1
- package/dist/core/runner/tool-end-body.js +10 -9
- package/dist/core/runner/tool-not-executed.d.ts +5 -0
- package/dist/core/runner/tool-not-executed.js +11 -0
- package/dist/core/runner/tool-occurrence.d.ts +8 -0
- package/dist/core/runner/tool-occurrence.js +7 -0
- package/dist/core/runner/turn-attachments.d.ts +33 -15
- package/dist/core/runner/turn-attachments.js +62 -37
- package/dist/core/runner-deps.d.ts +7 -7
- package/dist/core/safety-axis-vocab.d.ts +6 -4
- package/dist/core/safety-axis-vocab.js +6 -5
- package/dist/core/safety-merge-corpus.js +11 -3
- package/dist/core/secret-env.d.ts +30 -3
- package/dist/core/secret-env.js +47 -8
- package/dist/core/select-model.js +3 -3
- package/dist/core/session-policy-store.d.ts +32 -15
- package/dist/core/session-policy-store.js +156 -36
- package/dist/core/session-store.d.ts +29 -10
- package/dist/core/session-store.js +51 -19
- package/dist/core/session.d.ts +82 -16
- package/dist/core/session.js +53 -0
- package/dist/core/shell-read-silence.d.ts +11 -12
- package/dist/core/shell-read-silence.js +9 -5
- package/dist/core/shell-run-candidates.js +3 -1
- package/dist/core/shell-wrapper-projection.d.ts +1 -1
- package/dist/core/shell-wrapper-projection.js +1 -1
- package/dist/core/shell-wrapper-table.d.ts +14 -7
- package/dist/core/shell-wrapper-table.js +5 -4
- package/dist/core/side-query.js +10 -1
- package/dist/core/skill-grant.d.ts +7 -2
- package/dist/core/skill-grant.js +5 -0
- package/dist/core/skills-directory.js +6 -2
- package/dist/core/store-contracts/background-agent-store-contract.js +1 -0
- package/dist/core/store-contracts/checkpoint-store-contract.d.ts +11 -1
- package/dist/core/store-contracts/checkpoint-store-contract.js +141 -2
- package/dist/core/store-contracts/file-history-store-contract.js +40 -1
- package/dist/core/store-contracts/mailbox-store-contract.js +49 -1
- package/dist/core/store-contracts/peer-directory-contract.d.ts +7 -2
- package/dist/core/store-contracts/peer-directory-contract.js +14 -2
- package/dist/core/store-contracts/session-repo-contract.js +51 -0
- package/dist/core/store-contracts/session-store-contract.d.ts +2 -1
- package/dist/core/store-contracts/session-store-contract.js +150 -14
- package/dist/core/stub-env.d.ts +2 -0
- package/dist/core/stub-env.js +1 -0
- package/dist/core/synthetic-read-verdict.js +3 -3
- package/dist/core/task-event.d.ts +32 -4
- package/dist/core/task-notification.d.ts +16 -12
- package/dist/core/task-registry-agent.d.ts +8 -4
- package/dist/core/task-registry-agent.js +14 -8
- package/dist/core/task-registry-shared.d.ts +35 -6
- package/dist/core/task-registry-shared.js +11 -0
- package/dist/core/task-registry.d.ts +10 -1
- package/dist/core/task-registry.js +12 -2
- package/dist/core/task-result.d.ts +18 -0
- package/dist/core/task-spec.d.ts +18 -13
- package/dist/core/tighten-task-spec.js +2 -1
- package/dist/core/tool-catalog-entries.d.ts +23 -0
- package/dist/core/tool-catalog-entries.js +14 -2
- package/dist/core/tool-check-reading.d.ts +11 -0
- package/dist/core/tool-check-reading.js +11 -6
- package/dist/core/tool-model-gate.d.ts +2 -2
- package/dist/core/tool-name-aliases.d.ts +48 -18
- package/dist/core/tool-name-aliases.js +36 -19
- package/dist/core/tool-name-readings.d.ts +6 -32
- package/dist/core/tool-name-readings.js +2 -9
- package/dist/core/tool-policy.d.ts +78 -204
- package/dist/core/tool-policy.js +152 -204
- package/dist/core/tool-result-store.js +3 -0
- package/dist/core/tool-roster.d.ts +14 -19
- package/dist/core/tool-roster.js +11 -44
- package/dist/core/tool-spec-members.js +7 -2
- package/dist/core/tool-spec.d.ts +19 -11
- package/dist/core/tools.js +49 -9
- package/dist/core/trace.d.ts +6 -3
- package/dist/core/trace.js +2 -1
- package/dist/core/types.d.ts +1 -1
- package/dist/core/untrusted-egress.d.ts +20 -0
- package/dist/core/untrusted-egress.js +77 -3
- package/dist/core/user-attachment.d.ts +8 -1
- package/dist/core/user-attachment.js +64 -4
- package/dist/core/wiring-manifest.d.ts +9 -0
- package/dist/core/wiring-manifest.js +1 -0
- package/dist/core/workflow-journal-store.js +1 -1
- package/dist/engine/compaction/compaction.js +3 -2
- package/dist/engine/execution-env/node-execution-env.d.ts +7 -3
- package/dist/engine/execution-env/node-execution-env.js +11 -2
- package/dist/engine/harness/agent-harness.d.ts +32 -6
- package/dist/engine/harness/agent-harness.js +65 -9
- package/dist/engine/harness/types.d.ts +29 -2
- package/dist/engine/llm/types.d.ts +28 -11
- package/dist/engine/loop/agent-loop.d.ts +23 -4
- package/dist/engine/loop/agent-loop.js +42 -30
- package/dist/engine/loop/types.d.ts +16 -6
- package/dist/engine/session/memory-repo.d.ts +9 -2
- package/dist/engine/session/memory-repo.js +11 -1
- package/dist/engine/session/repo-utils.d.ts +6 -5
- package/dist/engine/session/repo-utils.js +14 -6
- package/dist/index.d.ts +34 -17
- package/dist/index.js +22 -11
- package/dist/internal/harness-types.d.ts +1 -1
- package/dist/internal/harness.d.ts +2 -1
- package/dist/internal/harness.js +1 -0
- package/dist/internal/llm.d.ts +1 -1
- package/dist/orchestration/run-workflow-tool.d.ts +6 -4
- package/dist/orchestration/run-workflow-tool.js +5 -3
- package/dist/orchestration/workflow.d.ts +3 -0
- package/dist/orchestration/workflow.js +36 -18
- package/dist/primitives/credential-ref.d.ts +89 -0
- package/dist/primitives/credential-ref.js +125 -0
- package/dist/primitives/index.d.ts +2 -0
- package/dist/primitives/index.js +1 -0
- package/dist/prompt-assembly/artifact.d.ts +2 -2
- package/dist/prompt-assembly/artifact.js +5 -3
- package/dist/prompt-assembly/assemble.d.ts +3 -2
- package/dist/prompt-assembly/assemble.js +1 -1
- package/dist/prompt-assembly/catalog/schema.d.ts +43 -12
- package/dist/prompt-assembly/catalog/schema.js +34 -2
- package/dist/prompt-assembly/catalog/sections.js +0 -1
- package/dist/prompt-assembly/composer.d.ts +3 -1
- package/dist/prompt-assembly/composer.js +1 -1
- package/dist/prompt-assembly/event-registry.js +1 -0
- package/dist/prompt-assembly/overlay.js +3 -3
- package/dist/prompt-assembly/renderers.d.ts +1 -1
- package/dist/prompt-assembly/renderers.js +0 -3
- package/dist/prompt-assembly/role-base.d.ts +15 -0
- package/dist/prompt-assembly/role-base.js +9 -0
- package/dist/prompt-assembly/select.d.ts +39 -14
- package/dist/prompt-assembly/select.js +47 -16
- package/dist/prompt-assembly/sugar.d.ts +17 -11
- package/dist/prompt-assembly/sugar.js +8 -3
- package/dist/prompt-assembly/tool-catalog.d.ts +37 -3
- package/dist/prompt-assembly/tool-catalog.js +114 -4
- package/dist/prompt-assembly/turn-snapshot.d.ts +4 -10
- package/dist/prompt-assembly/turn-snapshot.js +0 -3
- package/dist/prompt-assembly/types.d.ts +0 -7
- package/dist/scenarios/full-body.d.ts +11 -11
- package/dist/scenarios/full-body.js +4 -3
- package/dist/shell/lex.js +10 -1
- package/dist/stores/file/adoption/adopt.js +4 -3
- package/dist/stores/file/adoption/marker.js +3 -2
- package/dist/stores/file/checkpoint-store.d.ts +21 -4
- package/dist/stores/file/checkpoint-store.js +38 -7
- package/dist/stores/file/file-history-store.js +18 -11
- package/dist/stores/file/index.js +2 -1
- package/dist/stores/file/mailbox-store.d.ts +2 -1
- package/dist/stores/file/mailbox-store.js +26 -1
- package/dist/stores/file/permission-rule-adopt.js +4 -3
- package/dist/stores/file/permission-rule-store.js +11 -5
- package/dist/stores/file/session-store.d.ts +29 -6
- package/dist/stores/file/session-store.js +42 -50
- package/dist/tools/artifact/artifact-tool.js +3 -2
- package/dist/tools/fs/bash-program-position.d.ts +19 -2
- package/dist/tools/fs/bash-program-position.js +56 -9
- package/dist/tools/fs/bash-readonly-classifier.d.ts +15 -19
- package/dist/tools/fs/bash-readonly-classifier.js +5 -10
- package/dist/tools/fs/fs-bash.js +15 -8
- package/dist/tools/fs/fs-glob.d.ts +86 -0
- package/dist/tools/fs/fs-glob.js +226 -0
- package/dist/tools/fs/fs-read.js +14 -14
- package/dist/tools/fs/fs-search-tools.js +7 -7
- package/dist/tools/fs/pattern-kill-guard.d.ts +23 -0
- package/dist/tools/fs/pattern-kill-guard.js +429 -0
- package/dist/tools/fs/pdf.d.ts +9 -6
- package/dist/tools/fs/pdf.js +3 -3
- package/dist/tools/fs/program-read-model.d.ts +57 -7
- package/dist/tools/fs/program-read-model.js +11 -1
- package/dist/tools/fs/program-read-model.rows.js +78 -21
- package/dist/tools/fs/read-deny-home.js +3 -2
- package/dist/tools/fs/removal-targets.d.ts +17 -7
- package/dist/tools/fs/removal-targets.js +47 -20
- package/dist/tools/fs/search.d.ts +10 -0
- package/dist/tools/fs/search.js +20 -26
- package/dist/tools/fs/shell-read-argv.js +89 -12
- package/dist/tools/fs/shell-read-bindings.d.ts +31 -0
- package/dist/tools/fs/shell-read-bindings.js +41 -0
- package/dist/tools/fs/shell-read-check.d.ts +10 -0
- package/dist/tools/fs/shell-read-check.js +13 -20
- package/dist/tools/fs/shell-read-environment.d.ts +5 -1
- package/dist/tools/fs/shell-read-environment.js +3 -2
- package/dist/tools/fs/shell-read-establish.d.ts +15 -0
- package/dist/tools/fs/shell-read-establish.js +19 -20
- package/dist/tools/fs/shell-read-identity.d.ts +12 -9
- package/dist/tools/fs/shell-read-identity.js +9 -4
- package/dist/tools/fs/shell-read-plan.js +24 -16
- package/dist/tools/fs/shell-read-start.d.ts +6 -1
- package/dist/tools/fs/shell-read-write-targets.d.ts +5 -1
- package/dist/tools/fs/shell-read-write-targets.js +2 -3
- package/dist/tools/fs/shell-reentry-text.d.ts +9 -0
- package/dist/tools/fs/shell-reentry-text.js +40 -2
- package/dist/tools/todo.js +63 -63
- package/dist/tools/web.d.ts +19 -14
- package/dist/tools/web.js +46 -61
- package/package.json +1 -1
- package/test/export-surface.snapshot.json +221 -7
- package/wire-changes/core-stores-sql@7.57.0.json +29 -0
- package/wire-changes/core@7.56.0.json +3891 -0
- package/wire-changes/core@7.57.0.json +1487 -0
- package/wire-changes/mods-kernel@7.56.0.json +303 -0
- package/wire-changes/mods-kernel@7.57.0.json +29 -0
- package/wire-changes/primitives@7.57.0.json +245 -0
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* (string and symbol keys — what the mount's spread carries) plus every ToolSpec member name read through an ordinary
|
|
13
13
|
* property read (how the phases read a declaration — non-enumerable, inherited or Proxy-answered included), each read once;
|
|
14
14
|
* every declaration value is deep-copied and frozen by the one copier. A primitive is immutable and stays as read. A
|
|
15
|
-
* read that throws refuses the run at the snapshot
|
|
15
|
+
* read that throws refuses the run at the snapshot, and so does an entry that carries a retired ToolSpec member under any
|
|
16
|
+
* reading of the key ({@link refuseRetiredMember}: the entry is asked once, before any face is minted). Whether the ToolSpec arm can build the entry ({@link specArmCanConstruct})
|
|
16
17
|
* is asked of the entry once, there, and recorded on its face ({@link specArmCanBuild}); the mount refuses an entry it
|
|
17
18
|
* cannot build from that record, so an `execute` that grows on the caller's object later is never read. The mount calls a
|
|
18
19
|
* spec face's `execute` with the caller's own object as `this` ({@link callerEntryOrigin}). A `defineTool` product's face is
|
|
@@ -57,16 +58,27 @@ export declare function callerEntryOrigin(entry: object): object;
|
|
|
57
58
|
/** Can the mount's ToolSpec arm build this roster entry? Only the verdict recorded at the snapshot answers: an object that
|
|
58
59
|
* is no face of this snapshot, a primitive, a product's face, is not built from. */
|
|
59
60
|
export declare function specArmCanBuild(entry: RosterFace): boolean;
|
|
60
|
-
/** A
|
|
61
|
-
* declaration enters.
|
|
61
|
+
/** A roster entry claiming an engine contract its catalog did not mint for it — the id written by hand, on a spec or on a product — refused where the
|
|
62
|
+
* declaration enters. */
|
|
62
63
|
export declare function callerEngineContractProblem(face: RosterFace): {
|
|
63
64
|
code: ToolDeclarationCode;
|
|
64
65
|
message: string;
|
|
65
66
|
} | undefined;
|
|
67
|
+
/** The retired-key door for one roster entry, asked of the LIVE entry once, before any member is copied: the key is present
|
|
68
|
+
* iff ordinary property lookup answers a defined value ({@link retiredKeyOf} — an own enumerable member, a non-enumerable
|
|
69
|
+
* one, a prototype's getter, a Proxy's trap alike), and a present one refuses the run by name with the sentence and code
|
|
70
|
+
* the factory gives the same key on a `defineTool` spec (`config.deps_retired_key`). A lookup that throws is an entry whose
|
|
71
|
+
* members cannot be read, refused as such. No face is ever minted from an entry that carries a retired member, so no later
|
|
72
|
+
* phase has a key table of its own to consult for one. Every live object that is about to become a face meets it first:
|
|
73
|
+
* {@link rosterFaceOf} asks it of each entry, and the per-task agents rebuild asks it of the object `withAgents` returned
|
|
74
|
+
* before the stamp copy-back spreads that object (a spread drops a prototype's and a non-enumerable member). A value that
|
|
75
|
+
* is no object holds no member. */
|
|
76
|
+
export declare function refuseRetiredMember(entry: unknown, index: number): void;
|
|
66
77
|
/** One entry of the roster, and the ONLY place a {@link RosterFace} is minted. Every object entry (a function included) becomes a frozen face, so no entry the snapshot holds is a
|
|
67
78
|
* live object: a primitive is immutable and stays as read; a `defineTool` product's face names the product for its sealed
|
|
68
79
|
* rebind; an entry the ToolSpec arm cannot build gets a face too, and the mount refuses it from the verdict recorded here —
|
|
69
|
-
* an `execute` or a mark that grows on the caller's object afterwards is never read.
|
|
80
|
+
* an `execute` or a mark that grows on the caller's object afterwards is never read. An entry carrying a retired member is
|
|
81
|
+
* refused first ({@link refuseRetiredMember}). A read that throws refuses the run. */
|
|
70
82
|
export declare function rosterFaceOf(t: unknown, index: number): RosterFace;
|
|
71
83
|
/** The mount's arm for a roster entry that is the face of a `defineTool` product: the exact product object is rebound to
|
|
72
84
|
* the run's ctx through the factory's sealed seat, compared with its face ({@link refuseProductDrift}), and the tool the
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { TOOL_SPEC_MEMBERS, frozenExtra, frozenMember, newCopyState } from "../tool-spec-members.js";
|
|
2
|
+
import { RETIRED_TOOL_SPEC_KEYS, retiredKeyOf, retiredKeyRefusal } from "../retired-keys.js";
|
|
2
3
|
import { isDefineToolProduct, rebindDefineToolCtx } from "../tools.js";
|
|
3
4
|
import { isCatalogContract } from "../tool-catalog-entries.js";
|
|
4
|
-
import { contractOriginOf } from "../../prompt-assembly/tool-catalog.js";
|
|
5
|
+
import { attachedContractOf, computeShapeDigest, contractOriginOf, isEngineDescriptor } from "../../prompt-assembly/tool-catalog.js";
|
|
5
6
|
function specArmCanConstruct(t) {
|
|
6
7
|
if (typeof t !== "object" || t === null)
|
|
7
8
|
return false;
|
|
@@ -19,6 +20,8 @@ function faceKeys(t) {
|
|
|
19
20
|
const keys = new Set(Reflect.ownKeys(t).filter((k) => Object.getOwnPropertyDescriptor(t, k)?.enumerable === true));
|
|
20
21
|
for (const name of TOOL_SPEC_MEMBERS)
|
|
21
22
|
keys.add(name);
|
|
23
|
+
for (const name of Object.keys(RETIRED_TOOL_SPEC_KEYS))
|
|
24
|
+
keys.delete(name);
|
|
22
25
|
return [...keys];
|
|
23
26
|
}
|
|
24
27
|
const BUILDABLE = new WeakSet();
|
|
@@ -45,16 +48,42 @@ function refuseUnreadableEntry(index, entry, cause) {
|
|
|
45
48
|
e.code = "config.tool_mount_denied";
|
|
46
49
|
throw e;
|
|
47
50
|
}
|
|
48
|
-
|
|
51
|
+
function unmintedEngineClaim(face) {
|
|
52
|
+
const declared = face.contract?.contractId;
|
|
53
|
+
if (typeof declared === "string" && contractOriginOf(declared) === "core" && !isCatalogContract(face.contract))
|
|
54
|
+
return declared;
|
|
55
|
+
const carried = attachedContractOf(face);
|
|
56
|
+
if (carried === undefined || carried === null || typeof carried !== "object")
|
|
57
|
+
return undefined;
|
|
58
|
+
const id = carried.contractId;
|
|
59
|
+
if (carried.origin !== "core" && !(typeof id === "string" && contractOriginOf(id) === "core"))
|
|
60
|
+
return undefined;
|
|
61
|
+
const describesFace = isEngineDescriptor(carried) && carried.wireName === face.name && carried.shapeDigest === computeShapeDigest(face.parameters);
|
|
62
|
+
return describesFace ? undefined : String(id);
|
|
63
|
+
}
|
|
49
64
|
export function callerEngineContractProblem(face) {
|
|
50
|
-
const id = face
|
|
51
|
-
if (
|
|
65
|
+
const id = unmintedEngineClaim(face);
|
|
66
|
+
if (id === undefined)
|
|
52
67
|
return undefined;
|
|
53
68
|
return { code: "config.tool_face_invalid", message: `tool ${JSON.stringify(String(face.name).slice(0, 40))} declares the engine contract ${JSON.stringify(id.slice(0, 64))}, which no engine definition minted for it — a contract id under \`core.\` belongs to the engine's own definitions; declare an id of your own, or none` };
|
|
54
69
|
}
|
|
70
|
+
export function refuseRetiredMember(entry, index) {
|
|
71
|
+
if ((typeof entry !== "object" && typeof entry !== "function") || entry === null)
|
|
72
|
+
return;
|
|
73
|
+
let hit;
|
|
74
|
+
try {
|
|
75
|
+
hit = retiredKeyOf(entry, RETIRED_TOOL_SPEC_KEYS);
|
|
76
|
+
}
|
|
77
|
+
catch (cause) {
|
|
78
|
+
return refuseEntry(index, entry, cause);
|
|
79
|
+
}
|
|
80
|
+
if (hit !== undefined)
|
|
81
|
+
throw retiredKeyRefusal(hit, "ToolSpec");
|
|
82
|
+
}
|
|
55
83
|
export function rosterFaceOf(t, index) {
|
|
56
84
|
if ((typeof t !== "object" && typeof t !== "function") || t === null)
|
|
57
85
|
return t;
|
|
86
|
+
refuseRetiredMember(t, index);
|
|
58
87
|
try {
|
|
59
88
|
const product = isDefineToolProduct(t) ? t : undefined;
|
|
60
89
|
const buildable = product === undefined && specArmCanConstruct(t);
|
|
@@ -67,8 +96,6 @@ export function rosterFaceOf(t, index) {
|
|
|
67
96
|
if (value === undefined && !own)
|
|
68
97
|
continue;
|
|
69
98
|
let kept;
|
|
70
|
-
if (key === "contract" && isCatalogContract(value))
|
|
71
|
-
CATALOG_CONTRACT_FACES.add(face);
|
|
72
99
|
if (typeof key === "string" && IS_MEMBER.has(key))
|
|
73
100
|
kept = frozenMember(key, value, ledger);
|
|
74
101
|
else {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Prepared } from "./contracts.js";
|
|
2
|
+
import type { NoticeSeatInput } from "./notice-seat-input.js";
|
|
3
|
+
/** The session's announced record and the leg's receipt ledger (the parked write). */
|
|
4
|
+
export type CapabilityWithheldRecord = Pick<Prepared, "announcedListingsRef" | "frameReceipts">;
|
|
5
|
+
export declare function createCapabilityWithheldScope(ids: NoticeSeatInput, announced: CapabilityWithheldRecord): <T>(fn: () => Promise<T>) => Promise<T>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { runWithCapabilityWithheld } from "../../brain/status-sink.js";
|
|
2
|
+
import { deliverEngineNotice } from "../engine-notice.js";
|
|
3
|
+
import { announceDigest, withAnnounceDigests } from "./announce-once-ledger.js";
|
|
4
|
+
const CAPABILITY_DOWNGRADED = "model.capability_downgraded";
|
|
5
|
+
export function createCapabilityWithheldScope(ids, announced) {
|
|
6
|
+
const announce = (report) => {
|
|
7
|
+
const digest = announceDigest(CAPABILITY_DOWNGRADED, `${report.modelId}\n${report.capability}`);
|
|
8
|
+
const record = announced.announcedListingsRef;
|
|
9
|
+
if (record.advisories?.includes(digest) === true)
|
|
10
|
+
return;
|
|
11
|
+
const why = report.cause === "declared_off"
|
|
12
|
+
? `its catalog entry declares no image input (Model.input has no "image")`
|
|
13
|
+
: `its catalog entry does not declare image input, and images are not sent to an entry that does not`;
|
|
14
|
+
deliverEngineNotice(ids.onNotice, {
|
|
15
|
+
code: CAPABILITY_DOWNGRADED,
|
|
16
|
+
message: `Images in this conversation are not being sent to model "${report.modelId}": ${why}, so each image reaches the model as a one-line placeholder. ` +
|
|
17
|
+
`If the model reads images, declare it (input: ["text","image"]); otherwise switch to a model that reads images. Said once per conversation for this model.`,
|
|
18
|
+
detail: { model: report.modelId, capability: report.capability, status: report.cause, sessionId: ids.sessionId, runId: ids.runId },
|
|
19
|
+
});
|
|
20
|
+
record.advisories = withAnnounceDigests(record.advisories, [digest]);
|
|
21
|
+
announced.frameReceipts.listingSnapshotOwed = true;
|
|
22
|
+
};
|
|
23
|
+
return (fn) => runWithCapabilityWithheld(announce, fn);
|
|
24
|
+
}
|
|
@@ -179,14 +179,11 @@ export interface ClassifierUnavailableStation {
|
|
|
179
179
|
budgetMs?: number;
|
|
180
180
|
}
|
|
181
181
|
/**
|
|
182
|
-
* The classifier's REASONING
|
|
183
|
-
*
|
|
184
|
-
* for the answer alone)
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
* seat too: its wire carries nothing either way, so the request is the gateway's default, and a default-on
|
|
188
|
-
* gateway thinks — the arm that used to read it as "never thinks" is the one the field report was about.
|
|
189
|
-
* PER RUNG, not once per arming: the second rung is a different model with its own wire.
|
|
182
|
+
* The classifier's REASONING SEATS, read off the model a classification is actually asked on. The tier is the shared
|
|
183
|
+
* verdict ({@link lowestReasoningSeat}); the cap is the classifier's own: `off` carries the verdict-sized cap (the
|
|
184
|
+
* request pays for the answer alone), `low` carries the verdict cap plus the low allowance (spell off, or leave
|
|
185
|
+
* thinking to the provider and pay 2048). PER RUNG, not once per arming: the second rung is a different model with
|
|
186
|
+
* its own wire.
|
|
190
187
|
*
|
|
191
188
|
* The THINK seat is the RE-ASK seat ({@link classifierReplyAsksAgain}): a first attempt that produced no
|
|
192
189
|
* verdict is asked once more with thinking allowed the room of CC's stage-2 classifier (8192) — an unknown
|
|
@@ -212,7 +209,8 @@ export type ClassifierSeatRequest = typeof CLASSIFIER_OFF_SEAT | typeof CLASSIFI
|
|
|
212
209
|
* bound the engine can vouch for: a gateway may exclude reasoning tokens from `max_tokens` (a vLLM-fronted
|
|
213
210
|
* Qwen gateway answered a cap of 128 with 938 output tokens and `stop`), so an over-long think is cut by the
|
|
214
211
|
* round-trip timeout (`unavailable` / `timeout`), not by the cap (`parse_error` on an empty reply), and the
|
|
215
|
-
* two are attested as the two different facts they are.
|
|
212
|
+
* two are attested as the two different facts they are. The seat's tier is not the classifier's to decide: it reads
|
|
213
|
+
* {@link lowestReasoningSeat}, and only the cap is its own.
|
|
216
214
|
*/
|
|
217
215
|
export declare function classifierRungSeat(model: Model): typeof CLASSIFIER_OFF_SEAT | typeof CLASSIFIER_LOW_SEAT;
|
|
218
216
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sameRouteIdentity } from "../../brain/route-adjudicator.js";
|
|
2
|
-
import {
|
|
2
|
+
import { lowestReasoningSeat } from "../../brain/reasoning-request.js";
|
|
3
3
|
import { AUTO_MODE_CLASSIFIER_CONTRACT_BROKEN_AFTER, AUTO_MODE_CLASSIFIER_LOW_REASONING_BUDGET_TOKENS, AUTO_MODE_CLASSIFIER_MAX_TOKENS, AUTO_MODE_CLASSIFIER_THINK_BUDGET_TOKENS } from "../auto-mode-defaults.js";
|
|
4
4
|
import { autoModeClassifierFallbackOf, parseAutoModeResponse } from "../auto-mode.js";
|
|
5
5
|
import { classifierUnavailableDispositionOf } from "../classifier-unavailable-arm.js";
|
|
@@ -80,7 +80,7 @@ export function announceClassifierRoleDefaulted(args) {
|
|
|
80
80
|
const { seat } = args;
|
|
81
81
|
if (seat.defaulted === undefined)
|
|
82
82
|
return;
|
|
83
|
-
const spelled =
|
|
83
|
+
const spelled = lowestReasoningSeat(seat.model) === "off";
|
|
84
84
|
deliverEngineNotice(args.onNotice, {
|
|
85
85
|
code: "classifier.role_defaulted",
|
|
86
86
|
message: `no classifier role names a model — "${seat.model.id}" classifies this run (${seat.defaulted}); ` +
|
|
@@ -195,7 +195,7 @@ export const CLASSIFIER_OFF_SEAT = { reasoning: "off", maxTokens: AUTO_MODE_CLAS
|
|
|
195
195
|
export const CLASSIFIER_LOW_SEAT = { reasoning: "low", maxTokens: AUTO_MODE_CLASSIFIER_MAX_TOKENS + AUTO_MODE_CLASSIFIER_LOW_REASONING_BUDGET_TOKENS };
|
|
196
196
|
export const CLASSIFIER_THINK_SEAT = { reasoning: "low", maxTokens: AUTO_MODE_CLASSIFIER_MAX_TOKENS + AUTO_MODE_CLASSIFIER_THINK_BUDGET_TOKENS };
|
|
197
197
|
export function classifierRungSeat(model) {
|
|
198
|
-
return
|
|
198
|
+
return lowestReasoningSeat(model) === "off" ? CLASSIFIER_OFF_SEAT : CLASSIFIER_LOW_SEAT;
|
|
199
199
|
}
|
|
200
200
|
export const CLASSIFIER_ATTEMPT_SUFFIX = {
|
|
201
201
|
first: '\nErr on the side of blocking. Your ENTIRE response MUST begin with <block>. Do NOT output any analysis, reasoning, or commentary before <block>. No "Looking at..." or similar preamble.',
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type CompactSessionRequest, type CompactSessionResult } from "../auto-compaction.js";
|
|
2
|
+
import { type SessionStore } from "../session.js";
|
|
3
|
+
import type { RunnerDeps } from "../types.js";
|
|
4
|
+
import { type SessionLockSeats } from "./session-verb-doors.js";
|
|
5
|
+
/** What the Runner lends the compaction: its current deps, its session store, and its lock. */
|
|
6
|
+
export interface CompactSessionSeats extends SessionLockSeats {
|
|
7
|
+
deps: RunnerDeps;
|
|
8
|
+
sessions: SessionStore;
|
|
9
|
+
}
|
|
10
|
+
export declare function compactIdleSession(seats: CompactSessionSeats, request: CompactSessionRequest): Promise<CompactSessionResult>;
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { convertToLlm, uuidv7 } from "../../internal/harness.js";
|
|
2
|
+
import { compactionFailureReason, compactionPassReport, DEFAULT_COMPACTION_INSTRUCTIONS, isCompactionManualCancel, manualCompactOutcomeOf, maybeCompact, mintCompactedEvent } from "../auto-compaction.js";
|
|
3
|
+
import { contextOverlayFor } from "../context-settings.js";
|
|
4
|
+
import { admitLegMods, legFacadeSeats } from "../mods/stations.js";
|
|
5
|
+
import { malformedPricingField } from "../pricing.js";
|
|
6
|
+
import { resolveTaskModel } from "../roles.js";
|
|
7
|
+
import { StoredSession } from "../session.js";
|
|
8
|
+
import { emitTrace } from "../trace.js";
|
|
9
|
+
import { egressThrownText } from "../untrusted-egress.js";
|
|
10
|
+
import { emitInputTruncated, legCompactionSettings } from "./compaction-call-options.js";
|
|
11
|
+
import { compactionHookOptions, summaryProviderOptions } from "./compaction-seams.js";
|
|
12
|
+
import { compactionSummaryFallback, compactionSummaryIsDerived } from "./derived-route-fallback.js";
|
|
13
|
+
import { resolveCompactionModel } from "./prepare-config-doors.js";
|
|
14
|
+
import { compactionActivationSnapshot } from "./prepare-tool-disclosure-mount.js";
|
|
15
|
+
import { derivedLegBrain, sideCallBookOf } from "./side-call-account.js";
|
|
16
|
+
import { acquireExistingSession, claimIdleSession, readPlainRequest, shownValue } from "./session-verb-doors.js";
|
|
17
|
+
const VERB = "Runner.compactSession";
|
|
18
|
+
const REQUEST_KEYS = new Set(["sessionId", "model", "instructions", "compaction", "compactionModel", "getApiKeyAndHeaders", "signal"]);
|
|
19
|
+
const SETTINGS_KEYS = new Set(["enabled", "reserveTokens", "keepRecentTokens", "instructions", "clampTolerance"]);
|
|
20
|
+
export async function compactIdleSession(seats, request) {
|
|
21
|
+
const req = screenCompactSessionRequest(request);
|
|
22
|
+
const { deps } = seats;
|
|
23
|
+
const resolved = resolveTaskModel({ model: req.model }, deps);
|
|
24
|
+
const named = resolveCompactionModel(req.compactionModel !== undefined ? { compactionModel: req.compactionModel } : {}, deps, "compactSession.compactionModel");
|
|
25
|
+
if (req.signal?.aborted === true)
|
|
26
|
+
return { outcome: "mooted", events: [] };
|
|
27
|
+
const release = await claimIdleSession(seats, req.sessionId, () => sessionBusyRefusal(req.sessionId));
|
|
28
|
+
try {
|
|
29
|
+
const acquired = await acquireExistingSession(seats.sessions, req.sessionId, VERB, "nothing was compacted");
|
|
30
|
+
const legMods = await admitLegMods({ spec: {}, deps, sessionId: req.sessionId });
|
|
31
|
+
return await compactOnSession(req, deps, new StoredSession(acquired.session.getStorage()), resolved, named, legMods);
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
release();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function compactOnSession(req, deps, session, resolved, named, legMods) {
|
|
38
|
+
const { sessionId } = req;
|
|
39
|
+
const events = [];
|
|
40
|
+
const ident = () => ({ eventId: uuidv7() });
|
|
41
|
+
const passReport = compactionPassReport({ push: (e) => events.push(e) }, ident);
|
|
42
|
+
const stats = { turns: 0, tokens: 0, toolCalls: 0, promptTokens: 0, totalInputTokens: 0, cachedTokens: 0, cacheWriteTokens: 0, cacheWriteTokensLong: 0, outputTokens: 0, costMicroUsd: 0 };
|
|
43
|
+
const telemetry = { unpricedSpend: false, tracer: deps.tracer, taskId: sessionId };
|
|
44
|
+
const accountBook = sideCallBookOf(stats, { telemetry, pricing: () => deps.pricing, noteUnevaluablePriceTable: (p) => void (malformedPricingField(p) !== undefined && (telemetry.unpricedSpend = true)), catalog: deps.models });
|
|
45
|
+
let calls = 0;
|
|
46
|
+
const book = (lane, model, reply) => {
|
|
47
|
+
calls += 1;
|
|
48
|
+
accountBook(lane, model, reply);
|
|
49
|
+
};
|
|
50
|
+
const answer = (outcome) => ({
|
|
51
|
+
outcome,
|
|
52
|
+
events,
|
|
53
|
+
...(calls > 0
|
|
54
|
+
? {
|
|
55
|
+
usage: {
|
|
56
|
+
tokens: stats.tokens,
|
|
57
|
+
totalInputTokens: stats.totalInputTokens,
|
|
58
|
+
promptTokens: stats.promptTokens,
|
|
59
|
+
cachedTokens: stats.cachedTokens,
|
|
60
|
+
cacheWriteTokens: stats.cacheWriteTokens,
|
|
61
|
+
outputTokens: stats.outputTokens,
|
|
62
|
+
costMicroUsd: stats.costMicroUsd,
|
|
63
|
+
...(stats.usageMissing === true ? { usageMissing: true } : {}),
|
|
64
|
+
...(telemetry.unpricedSpend ? { unpriced: true } : {}),
|
|
65
|
+
},
|
|
66
|
+
}
|
|
67
|
+
: {}),
|
|
68
|
+
});
|
|
69
|
+
const trace = deps.tracer;
|
|
70
|
+
try {
|
|
71
|
+
const compactionModel = compactionSummaryIsDerived(req.compactionModel !== undefined, named) ? await compactionSummaryFallback({ derived: named, primary: resolved.model, brain: deps.brain, getApiKeyAndHeaders: req.getApiKeyAndHeaders, onNotice: deps.onNotice, sessionId }) : named;
|
|
72
|
+
const branch = await session.getBranch();
|
|
73
|
+
const contextMessages = convertToLlm((await session.buildContext()).messages);
|
|
74
|
+
bindSessionFacade(legMods, { deps, req, model: resolved.model, messages: contextMessages, book });
|
|
75
|
+
const overlay = contextOverlayFor(deps.contextSettings, resolved.modelRef, deps);
|
|
76
|
+
const activeTools = compactionActivationSnapshot(branch);
|
|
77
|
+
const thinking = resolved.thinking ?? resolved.model.defaultThinking;
|
|
78
|
+
const comp = await maybeCompact({
|
|
79
|
+
session,
|
|
80
|
+
model: resolved.model,
|
|
81
|
+
...(overlay !== undefined ? { contextOverlay: overlay } : {}),
|
|
82
|
+
...(compactionModel !== undefined ? { compactionModel } : {}),
|
|
83
|
+
brain: derivedLegBrain(() => deps.brain, "compaction", book),
|
|
84
|
+
...(req.getApiKeyAndHeaders !== undefined ? { getApiKeyAndHeaders: req.getApiKeyAndHeaders } : {}),
|
|
85
|
+
...(thinking !== undefined ? { thinking } : {}),
|
|
86
|
+
settings: legCompactionSettings(req.compaction !== undefined ? { compaction: req.compaction } : {}, overlay),
|
|
87
|
+
customInstructions: req.instructions ?? req.compaction?.instructions ?? DEFAULT_COMPACTION_INSTRUCTIONS,
|
|
88
|
+
...(req.signal !== undefined ? { signal: req.signal, manualCancelSignal: req.signal } : {}),
|
|
89
|
+
minTokens: 0,
|
|
90
|
+
force: true,
|
|
91
|
+
onInputTruncated: emitInputTruncated(trace, sessionId),
|
|
92
|
+
...(activeTools.length > 0 ? { activeTools } : {}),
|
|
93
|
+
...summaryProviderOptions({ deps }, 0),
|
|
94
|
+
...compactionHookOptions({ deps }, { modBus: legMods.bus, hookIdentity: undefined, sessionId }, "manual", req.signal),
|
|
95
|
+
onStarted: passReport.onStarted,
|
|
96
|
+
});
|
|
97
|
+
const outcome = manualCompactOutcomeOf(comp);
|
|
98
|
+
if (comp.compacted) {
|
|
99
|
+
events.push(mintCompactedEvent(comp, "manual", ident()));
|
|
100
|
+
return answer(outcome);
|
|
101
|
+
}
|
|
102
|
+
if (comp.blocked)
|
|
103
|
+
emitTrace(trace, () => ({ kind: "compaction.blocked", version: 1, taskId: sessionId, trigger: "manual", ts: Date.now() }));
|
|
104
|
+
else if (comp.disabled)
|
|
105
|
+
emitTrace(trace, () => ({ kind: "compaction.disabled", version: 1, taskId: sessionId, ts: Date.now() }));
|
|
106
|
+
else
|
|
107
|
+
emitTrace(trace, () => ({ kind: "compaction.noop", version: 1, taskId: sessionId, ts: Date.now() }));
|
|
108
|
+
events.push({ type: "compaction_outcome", outcome: outcome, trigger: "manual", ...ident() });
|
|
109
|
+
return answer(outcome);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
if (isCompactionManualCancel(err)) {
|
|
113
|
+
emitTrace(trace, () => ({ kind: "compaction.mooted", version: 1, taskId: sessionId, reason: "cancelled", ts: Date.now() }));
|
|
114
|
+
events.push({ type: "compaction_outcome", outcome: "mooted", trigger: "manual", reason: "cancelled", ...passReport.end, ...ident() });
|
|
115
|
+
return answer("mooted");
|
|
116
|
+
}
|
|
117
|
+
deps.onError?.(asError(err), { phase: "compaction", sessionId });
|
|
118
|
+
const reason = compactionFailureReason(err);
|
|
119
|
+
emitTrace(trace, () => ({ kind: "compaction.failed", version: 1, taskId: sessionId, trigger: "manual", reason, ts: Date.now() }));
|
|
120
|
+
events.push({ type: "compaction_outcome", outcome: "failed", trigger: "manual", reason, ...passReport.end, ...ident() });
|
|
121
|
+
return answer("failed");
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function bindSessionFacade(legMods, input) {
|
|
125
|
+
const unavailable = (method) => {
|
|
126
|
+
throw new Error(`${method}: not available on a session-level compaction (${VERB}) — there is no run, so no execution environment, working directory, tool roster or agent listing`);
|
|
127
|
+
};
|
|
128
|
+
const seats = legFacadeSeats({
|
|
129
|
+
deps: input.deps,
|
|
130
|
+
spec: input.req.getApiKeyAndHeaders !== undefined ? { getApiKeyAndHeaders: input.req.getApiKeyAndHeaders } : {},
|
|
131
|
+
sessionId: input.req.sessionId,
|
|
132
|
+
model: input.model,
|
|
133
|
+
executionEnv: { exec: () => unavailable("process.run") },
|
|
134
|
+
taskRoot: "",
|
|
135
|
+
cwdRef: undefined,
|
|
136
|
+
lastBrainContext: () => ({ messages: input.messages }),
|
|
137
|
+
activeTools: new Set(),
|
|
138
|
+
agentListing: undefined,
|
|
139
|
+
book: (answeredBy, reply) => input.book("mod", answeredBy, reply),
|
|
140
|
+
toolCall: () => unavailable("tool.call"),
|
|
141
|
+
});
|
|
142
|
+
legMods.bindFacade({
|
|
143
|
+
...seats,
|
|
144
|
+
cwd: () => unavailable("session.cwd"),
|
|
145
|
+
root: () => unavailable("session.root"),
|
|
146
|
+
tools: () => unavailable("tool.list"),
|
|
147
|
+
agents: () => unavailable("agent.list"),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
function asError(err) {
|
|
151
|
+
return err instanceof Error ? err : new Error(egressThrownText("same-principal", err));
|
|
152
|
+
}
|
|
153
|
+
function screenCompactSessionRequest(request) {
|
|
154
|
+
const bad = (what) => {
|
|
155
|
+
const e = new Error(`${VERB}: ${what} — nothing was compacted. The request is { sessionId, model, instructions?, compaction?, compactionModel?, getApiKeyAndHeaders?, signal? }.`);
|
|
156
|
+
e.code = "compact.invalid_request";
|
|
157
|
+
throw e;
|
|
158
|
+
};
|
|
159
|
+
const { sessionId, model, instructions, compaction, compactionModel, getApiKeyAndHeaders, signal } = readPlainRequest(request, REQUEST_KEYS, bad);
|
|
160
|
+
if (typeof sessionId !== "string" || sessionId === "")
|
|
161
|
+
return bad(`sessionId must be a non-empty string, got ${shownValue(sessionId)}`);
|
|
162
|
+
if (model === undefined)
|
|
163
|
+
return bad("model is required — the model the session's next turn runs on, whose window bounds the pass");
|
|
164
|
+
if (instructions !== undefined && typeof instructions !== "string")
|
|
165
|
+
return bad(`instructions must be a string when given, got ${shownValue(instructions)}`);
|
|
166
|
+
if (getApiKeyAndHeaders !== undefined && typeof getApiKeyAndHeaders !== "function")
|
|
167
|
+
return bad(`getApiKeyAndHeaders must be a function when given, got ${shownValue(getApiKeyAndHeaders)}`);
|
|
168
|
+
if (signal !== undefined && !(signal instanceof AbortSignal))
|
|
169
|
+
return bad(`signal must be an AbortSignal when given, got ${shownValue(signal)}`);
|
|
170
|
+
return {
|
|
171
|
+
sessionId,
|
|
172
|
+
model: model,
|
|
173
|
+
instructions,
|
|
174
|
+
compaction: compaction === undefined ? undefined : screenSettings(compaction, bad),
|
|
175
|
+
compactionModel: compactionModel,
|
|
176
|
+
getApiKeyAndHeaders: getApiKeyAndHeaders,
|
|
177
|
+
signal,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function screenSettings(raw, bad) {
|
|
181
|
+
const { enabled, reserveTokens, keepRecentTokens, instructions, clampTolerance } = readPlainRequest(raw, SETTINGS_KEYS, (what) => bad(`compaction: ${what}`));
|
|
182
|
+
if (enabled !== undefined && typeof enabled !== "boolean")
|
|
183
|
+
return bad(`compaction.enabled must be a boolean when given, got ${shownValue(enabled)}`);
|
|
184
|
+
for (const [name, v] of [["reserveTokens", reserveTokens], ["keepRecentTokens", keepRecentTokens], ["clampTolerance", clampTolerance]]) {
|
|
185
|
+
if (v !== undefined && typeof v !== "number")
|
|
186
|
+
return bad(`compaction.${name} must be a number when given, got ${shownValue(v)}`);
|
|
187
|
+
}
|
|
188
|
+
if (instructions !== undefined && typeof instructions !== "string")
|
|
189
|
+
return bad(`compaction.instructions must be a string when given, got ${shownValue(instructions)}`);
|
|
190
|
+
return {
|
|
191
|
+
...(enabled !== undefined ? { enabled: enabled } : {}),
|
|
192
|
+
...(reserveTokens !== undefined ? { reserveTokens: reserveTokens } : {}),
|
|
193
|
+
...(keepRecentTokens !== undefined ? { keepRecentTokens: keepRecentTokens } : {}),
|
|
194
|
+
...(instructions !== undefined ? { instructions: instructions } : {}),
|
|
195
|
+
...(clampTolerance !== undefined ? { clampTolerance: clampTolerance } : {}),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function sessionBusyRefusal(sessionId) {
|
|
199
|
+
const e = new Error(`${VERB}: a task is running or queued on session "${sessionId}" in this Runner, or a write one of its tasks issued has not settled — compacting it now would rewrite the transcript under that work, so nothing was compacted; a running task takes the request through its own stream (TaskStream.compact), otherwise retry once it has ended and its writes have settled`);
|
|
200
|
+
e.code = "compact.session_busy";
|
|
201
|
+
return e;
|
|
202
|
+
}
|
|
@@ -156,7 +156,7 @@ export declare function emitInputTruncated(tracer: TracerHook | undefined, taskI
|
|
|
156
156
|
*/
|
|
157
157
|
export declare function legContextOverlayOption(prepared: Prepared, runner: RunnerDepsSeat): Pick<MaybeCompactOptions, "contextOverlay">;
|
|
158
158
|
/**
|
|
159
|
-
* The compaction SETTINGS a pass runs under — the assembly all three lanes share.
|
|
159
|
+
* The compaction SETTINGS a pass runs under — the assembly all three lanes and the out-of-run `Runner.compactSession` share.
|
|
160
160
|
*
|
|
161
161
|
* `{ ...DEFAULT_COMPACTION_SETTINGS, ...spec.compaction }` was hand-copied at each lane, and it is where the
|
|
162
162
|
* deployment's live `enabled` declaration belongs: `maybeCompact` has exactly one enablement gate (it reads
|
|
@@ -165,4 +165,4 @@ export declare function legContextOverlayOption(prepared: Prepared, runner: Runn
|
|
|
165
165
|
* compaction runs" a single expression ({@link compactionEnabled}: the request authored it > the deployment
|
|
166
166
|
* declared it > on).
|
|
167
167
|
*/
|
|
168
|
-
export declare function legCompactionSettings(spec: TaskSpec, overlay: ContextWindowOverlay | undefined): CompactionSettings;
|
|
168
|
+
export declare function legCompactionSettings(spec: Pick<TaskSpec, "compaction">, overlay: ContextWindowOverlay | undefined): CompactionSettings;
|
|
@@ -1,4 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The run loop's COMPACTION SEAMS, verbatim from three private methods of `Runner`: the Seam C
|
|
3
|
+
* cost-optimization options every `maybeCompact` call site spreads, the pre/postCompact hook-option wrapper and
|
|
4
|
+
* the consecutive-reuse counter fold. Layer-1 machinery under a name of its own (the S1 reading: a module the lanes stand
|
|
5
|
+
* on is not a lane) — the turn-boundary lane, the recovery lane and the terminal adoption's end-of-task pass reach DOWN
|
|
6
|
+
* for these three where the driver used to hand each lane the methods as delegates on its Input. Every function reads
|
|
7
|
+
* the Runner's deps LIVE through {@link RunnerDepsSeat}: `runner.deps.x` here is exactly `this.deps.x` in the method it
|
|
8
|
+
* came from, on the tick it is read.
|
|
9
|
+
*/
|
|
10
|
+
import type { HookInvocationIdentity } from "../hooks.js";
|
|
1
11
|
import type { MaybeCompactOptions } from "../auto-compaction.js";
|
|
12
|
+
import { type LegModBus } from "../mods/stations.js";
|
|
2
13
|
import type { Prepared, RunnerDepsSeat } from "./contracts.js";
|
|
3
14
|
/**
|
|
4
15
|
* The cost-optimization compaction options threaded into BOTH `maybeCompact` call
|
|
@@ -12,6 +23,11 @@ import type { Prepared, RunnerDepsSeat } from "./contracts.js";
|
|
|
12
23
|
* function itself always returns an object.
|
|
13
24
|
*/
|
|
14
25
|
export declare function seamCCompactionOptions(runner: RunnerDepsSeat, prepared: Prepared): Pick<MaybeCompactOptions, "summaryProvider" | "onCompaction" | "maxConsecutiveProviderReuse" | "consecutiveProviderReuse" | "onCommitted">;
|
|
26
|
+
/** The Seam C PROVIDER half — the deployment's summary provider, its observer and its drift guard, fed the caller's
|
|
27
|
+
* consecutive-reuse count (a run's counter; `0` for a pass outside a run, which has no earlier reuse to count). Still
|
|
28
|
+
* provider-gated: with no provider wired the four keys stay ABSENT, so every caller spreads exactly what it spread
|
|
29
|
+
* before. */
|
|
30
|
+
export declare function summaryProviderOptions(runner: RunnerDepsSeat, consecutive: number): Pick<MaybeCompactOptions, "summaryProvider" | "onCompaction" | "maxConsecutiveProviderReuse" | "consecutiveProviderReuse">;
|
|
15
31
|
/** The pre/postCompact stations threaded into maybeCompact: `classic.PreCompact` and `classic.PostCompact` raised on the
|
|
16
32
|
* leg's bus (a station is wired only when a handler hangs on its event). Their failure and abort columns are the
|
|
17
33
|
* bus's — a handler that throws or runs past its budget is skipped and reported, so a failed gate is "no block, no
|
|
@@ -19,7 +35,11 @@ export declare function seamCCompactionOptions(runner: RunnerDepsSeat, prepared:
|
|
|
19
35
|
* trigger is reported as ignored (maybeCompact enforces the ignore — blocking a compaction the provider/trim layer
|
|
20
36
|
* already demanded would kill the run). `signal` is the pass's abort (absent ⇒ each handler's own budget is the
|
|
21
37
|
* whole bound). */
|
|
22
|
-
export declare function compactionHookOptions(runner: RunnerDepsSeat, prepared:
|
|
38
|
+
export declare function compactionHookOptions(runner: RunnerDepsSeat, prepared: {
|
|
39
|
+
readonly modBus: LegModBus;
|
|
40
|
+
readonly hookIdentity: HookInvocationIdentity | undefined;
|
|
41
|
+
readonly sessionId: string;
|
|
42
|
+
}, trigger: "auto" | "manual" | "forced", signal: AbortSignal | undefined): Pick<MaybeCompactOptions, "trigger" | "preCompact" | "postCompact">;
|
|
23
43
|
/** Fold a finished compaction's `reused` flag into the run-scoped consecutive-reuse
|
|
24
44
|
* counter: a reused (provider) summary increments it, a real (LLM) summary resets it to 0. A no-op
|
|
25
45
|
* compaction (`compacted:false`) leaves the counter untouched. No-op when no provider is wired. */
|
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import { classicEventBase, dispatchClassic, observeClassic, stringMembersAnswer, stringMembersOf } from "../mods/stations.js";
|
|
2
2
|
export function seamCCompactionOptions(runner, prepared) {
|
|
3
3
|
return {
|
|
4
|
-
...(runner.
|
|
5
|
-
? {
|
|
6
|
-
summaryProvider: runner.deps.summaryProvider,
|
|
7
|
-
onCompaction: runner.deps.onCompaction,
|
|
8
|
-
maxConsecutiveProviderReuse: runner.deps.maxConsecutiveProviderReuse,
|
|
9
|
-
consecutiveProviderReuse: prepared.compactionReuseRef.consecutive,
|
|
10
|
-
}
|
|
11
|
-
: {}),
|
|
4
|
+
...summaryProviderOptions(runner, prepared.compactionReuseRef.consecutive),
|
|
12
5
|
onCommitted: (effect) => {
|
|
13
6
|
if (prepared.frameSettlement.wantsEffects?.() !== true)
|
|
14
7
|
return;
|
|
@@ -16,6 +9,16 @@ export function seamCCompactionOptions(runner, prepared) {
|
|
|
16
9
|
},
|
|
17
10
|
};
|
|
18
11
|
}
|
|
12
|
+
export function summaryProviderOptions(runner, consecutive) {
|
|
13
|
+
return runner.deps.summaryProvider
|
|
14
|
+
? {
|
|
15
|
+
summaryProvider: runner.deps.summaryProvider,
|
|
16
|
+
onCompaction: runner.deps.onCompaction,
|
|
17
|
+
maxConsecutiveProviderReuse: runner.deps.maxConsecutiveProviderReuse,
|
|
18
|
+
consecutiveProviderReuse: consecutive,
|
|
19
|
+
}
|
|
20
|
+
: {};
|
|
21
|
+
}
|
|
19
22
|
export function compactionHookOptions(runner, prepared, trigger, signal) {
|
|
20
23
|
const bus = prepared.modBus;
|
|
21
24
|
const base = classicEventBase(prepared.hookIdentity);
|
|
@@ -3,6 +3,7 @@ import { checkedMediaByteCap } from "../media-byte-cap.js";
|
|
|
3
3
|
import { receiptRefusal, receiveOwnProperties, refuseProxy } from "../own-property-receipt.js";
|
|
4
4
|
import { assertNoRetiredRunnerDeps } from "./retired-runner-deps.js";
|
|
5
5
|
import { copyReadDenySeat, READ_DENY_DEPLOYMENT_SEATS } from "../read-face-seats.js";
|
|
6
|
+
import { receiveHostFloor } from "../host-floor.js";
|
|
6
7
|
import { holdOwnCredentialValues } from "../secret-env.js";
|
|
7
8
|
export function retainRunnerDeps(deps) {
|
|
8
9
|
const words = { subject: "RunnerDeps", unit: "seat", moment: "at new Runner" };
|
|
@@ -15,6 +16,8 @@ export function retainRunnerDeps(deps) {
|
|
|
15
16
|
if (Object.hasOwn(retained, seat))
|
|
16
17
|
Object.defineProperty(retained, seat, { value: copyReadDenySeat(Reflect.get(retained, seat)), enumerable: true, writable: true, configurable: true });
|
|
17
18
|
}
|
|
19
|
+
if (Object.hasOwn(retained, "hostFloor"))
|
|
20
|
+
Object.defineProperty(retained, "hostFloor", { value: receiveHostFloor(Reflect.get(retained, "hostFloor")), enumerable: true, writable: true, configurable: true });
|
|
18
21
|
let consolidationKey;
|
|
19
22
|
try {
|
|
20
23
|
const chat = retained.memoryConsolidationDriver?.chat;
|