@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
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { formatHookFeedback } from "../reminder-mint.js";
|
|
2
|
+
import { toolFace } from "../tool-catalog-entries.js";
|
|
3
|
+
import { declaredDelegationNameOf } from "../delegation-name.js";
|
|
4
|
+
import { describeThrown } from "../tool-policy.js";
|
|
5
|
+
import { extensionWords } from "../untrusted-egress.js";
|
|
6
|
+
import { ENGINE_ORIGIN } from "./kernel/index.js";
|
|
7
|
+
import { isPlainRecord } from "./kernel/receive.js";
|
|
8
|
+
import { NEXT_IN_FLIGHT } from "./kernel/site-rules.js";
|
|
9
|
+
import { classicEventBase, failedHandlerClause, judgedInputOf } from "./stations.js";
|
|
10
|
+
import { runExtensionCall } from "./extension-call.js";
|
|
11
|
+
import { randomUUID } from "node:crypto";
|
|
12
|
+
const FORM = "tool.call takes next(e), { deny: <reason> } or { result } (a string, or a list of text blocks)";
|
|
13
|
+
const denyOf = (a) => isPlainRecord(a) && Object.keys(a).length === 1 && typeof a["deny"] === "string" && a["deny"] !== "" ? a["deny"] : undefined;
|
|
14
|
+
function substituteOf(a) {
|
|
15
|
+
if (!isPlainRecord(a) || Object.keys(a).length !== 1 || !Object.hasOwn(a, "result"))
|
|
16
|
+
return undefined;
|
|
17
|
+
const r = a["result"];
|
|
18
|
+
if (typeof r === "string")
|
|
19
|
+
return [{ type: "text", text: r }];
|
|
20
|
+
if (!Array.isArray(r) || r.length === 0)
|
|
21
|
+
return undefined;
|
|
22
|
+
const out = [];
|
|
23
|
+
for (const b of r) {
|
|
24
|
+
if (!isPlainRecord(b) || b["type"] !== "text" || typeof b["text"] !== "string" || Object.keys(b).some((k) => k !== "type" && k !== "text"))
|
|
25
|
+
return undefined;
|
|
26
|
+
out.push({ type: "text", text: b["text"] });
|
|
27
|
+
}
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
function viewOf(result) {
|
|
31
|
+
let blocks = [];
|
|
32
|
+
try {
|
|
33
|
+
const content = result.content;
|
|
34
|
+
blocks = (Array.isArray(content) ? content : []).map((b) => Object.freeze(Object.fromEntries(Object.entries(typeof b === "object" && b !== null ? b : {}).filter(([, v]) => v === null || typeof v === "string" || typeof v === "number" || typeof v === "boolean"))));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
blocks = [];
|
|
38
|
+
}
|
|
39
|
+
return Object.freeze({ result: Object.freeze({ content: Object.freeze([...blocks]), isError: result.isError === true }) });
|
|
40
|
+
}
|
|
41
|
+
function letGoUnasked(occurrences, toolCallId) {
|
|
42
|
+
const latest = occurrences.get(toolCallId)?.gateRounds.at(-1);
|
|
43
|
+
if (latest === undefined || latest.disposition.kind !== "allowed" || latest.settlement !== undefined)
|
|
44
|
+
return false;
|
|
45
|
+
return latest.disposition.released === undefined && latest.disposition.clearedBy === undefined;
|
|
46
|
+
}
|
|
47
|
+
const RANKS = Object.freeze({ of: (a) => (denyOf(a) !== undefined ? 1 : 0), top: 1 });
|
|
48
|
+
export function createToolCallStation(input) {
|
|
49
|
+
if (!input.bus.hasHandlers("tool.call"))
|
|
50
|
+
return undefined;
|
|
51
|
+
const refusal = (call, by, text) => {
|
|
52
|
+
if (input.occurrences.get(call.toolCallId) !== undefined) {
|
|
53
|
+
input.occurrences.refuse(call.toolCallId, "hook");
|
|
54
|
+
input.occurrences.answeredInPlace(call.toolCallId, by);
|
|
55
|
+
}
|
|
56
|
+
input.blockedToolCalls.add(call.toolCallId);
|
|
57
|
+
return { content: [{ type: "text", text: formatHookFeedback(text, input.reminderMark) }], details: {}, isError: true };
|
|
58
|
+
};
|
|
59
|
+
return async (call, run, signal) => {
|
|
60
|
+
const e = { ...classicEventBase(input.identity), tool: call.toolName, tool_use_id: call.toolCallId, input: judgedInputOf(call.args) };
|
|
61
|
+
const bodies = new Map();
|
|
62
|
+
let body;
|
|
63
|
+
const bottom = async () => {
|
|
64
|
+
body = run();
|
|
65
|
+
const result = await body;
|
|
66
|
+
const view = viewOf(result);
|
|
67
|
+
bodies.set(view, result);
|
|
68
|
+
return view;
|
|
69
|
+
};
|
|
70
|
+
const checkAnswer = (a, _e, _by, below, ran) => {
|
|
71
|
+
if (typeof a === "object" && a !== null && bodies.has(a))
|
|
72
|
+
return undefined;
|
|
73
|
+
const denied = denyOf(a) !== undefined;
|
|
74
|
+
if (!denied && substituteOf(a) === undefined)
|
|
75
|
+
return FORM;
|
|
76
|
+
if (ran.bottomStarted)
|
|
77
|
+
return `a ${denied ? "deny" : "result"} after the tool started (once the tool runs, only its own outcome stands)`;
|
|
78
|
+
if (denied)
|
|
79
|
+
return below.some((b) => denyOf(b) === undefined) ? "a deny while its next(e) still runs or after it was answered (deny in place of next)" : undefined;
|
|
80
|
+
if (below.includes(NEXT_IN_FLIGHT))
|
|
81
|
+
return "a result while its next(e) still runs (result in place of next)";
|
|
82
|
+
return letGoUnasked(input.occurrences, call.toolCallId) ? undefined : "a result in place of a call someone was asked about (a person's or a rule's yes is a yes to running the tool, so only the tool answers it)";
|
|
83
|
+
};
|
|
84
|
+
let outcome;
|
|
85
|
+
try {
|
|
86
|
+
outcome = await input.bus.dispatch("tool.call", e, { bottom, checkAnswer, ranks: RANKS, ...(signal !== undefined ? { signal } : {}) });
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
if (body !== undefined)
|
|
90
|
+
return body;
|
|
91
|
+
return refusal(call, ENGINE_ORIGIN.plugin, `the tool.call station could not be raised (${describeThrown(err)}); this call to "${extensionWords(call.toolName, 80)}" was NOT executed (fail-closed)`);
|
|
92
|
+
}
|
|
93
|
+
if (outcome.kind === "aborted") {
|
|
94
|
+
if (body !== undefined)
|
|
95
|
+
return body;
|
|
96
|
+
return { content: [{ type: "text", text: "Operation aborted" }], details: {}, isError: true };
|
|
97
|
+
}
|
|
98
|
+
if (outcome.kind === "failed") {
|
|
99
|
+
return refusal(call, outcome.registration, `a tool.call extension ${failedHandlerClause(outcome)} before this call to "${extensionWords(call.toolName, 80)}" ran; the call was NOT executed (fail-closed)`);
|
|
100
|
+
}
|
|
101
|
+
const answer = outcome.answer;
|
|
102
|
+
const ran = typeof answer === "object" && answer !== null ? bodies.get(answer) : undefined;
|
|
103
|
+
if (ran !== undefined)
|
|
104
|
+
return ran;
|
|
105
|
+
const by = outcome.answeredBy ?? ENGINE_ORIGIN.plugin;
|
|
106
|
+
const reason = denyOf(answer);
|
|
107
|
+
if (reason !== undefined)
|
|
108
|
+
return refusal(call, by, `extension "${extensionWords(by, 80)}" refused this call to "${extensionWords(call.toolName, 80)}" before it ran: ${extensionWords(reason, 300)}`);
|
|
109
|
+
const content = substituteOf(answer);
|
|
110
|
+
if (content === undefined)
|
|
111
|
+
return refusal(call, by, `extension "${extensionWords(by, 80)}" answered this call in a form tool.call does not take; the call was NOT executed (fail-closed)`);
|
|
112
|
+
if (input.occurrences.get(call.toolCallId) !== undefined)
|
|
113
|
+
input.occurrences.answeredInPlace(call.toolCallId, by);
|
|
114
|
+
input.blockedToolCalls.add(call.toolCallId);
|
|
115
|
+
return { content, details: {} };
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
const AGENT_DOOR = "runs the Agent tool: that is $.agent.spawn";
|
|
119
|
+
const OTHER_DOOR = new Map([
|
|
120
|
+
[toolFace("ask-user-question").contract.contractId, "runs the AskUserQuestion tool, which puts a question to the person: an extension's call does not ask the person"],
|
|
121
|
+
[toolFace("workflow").contract.contractId, "runs the Workflow tool, whose agents run outside the at-once bound on spawns: $.agent.spawn is the door"],
|
|
122
|
+
]);
|
|
123
|
+
export function createToolCallEntry(input) {
|
|
124
|
+
return async (args, ctx) => {
|
|
125
|
+
const by = ctx.origin.plugin;
|
|
126
|
+
const { tool, ...callInput } = args;
|
|
127
|
+
if (typeof tool !== "string" || tool === "")
|
|
128
|
+
throw new TypeError(`${by}: $.tool.call takes the event's input: { tool, ...args }`);
|
|
129
|
+
const toolCallId = `ext-${randomUUID()}`;
|
|
130
|
+
return runExtensionCall(input.bus, toolCallId, ctx, async (call) => {
|
|
131
|
+
const finalized = await input.harness.callTool({ type: "toolCall", id: toolCallId, name: tool, arguments: { ...callInput } }, ctx.signal, (t) => {
|
|
132
|
+
const contractId = input.faceOf(t.name)?.contractId;
|
|
133
|
+
const door = declaredDelegationNameOf(input.specOf(t.name)) !== undefined ? AGENT_DOOR : contractId !== undefined ? OTHER_DOOR.get(contractId) : undefined;
|
|
134
|
+
if (door !== undefined)
|
|
135
|
+
throw new TypeError(`${by}: $.tool.call(${extensionWords(t.name, 80)}) ${door}`);
|
|
136
|
+
});
|
|
137
|
+
if (call.denied)
|
|
138
|
+
return Object.freeze({ deny: textOf(finalized.result.content) });
|
|
139
|
+
return viewOf({ ...finalized.result, isError: finalized.isError });
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export function extensionCallOverlap(input) {
|
|
144
|
+
const others = input.occurrences.live().filter((o) => o.toolCallId !== input.toolCallId);
|
|
145
|
+
const name = extensionWords(input.toolName, 80);
|
|
146
|
+
if (!input.batchSafe(input.toolName, input.args)) {
|
|
147
|
+
return others.length === 0 ? undefined : `${name}: an extension's call of a tool that has the run to itself cannot run while another call is in flight`;
|
|
148
|
+
}
|
|
149
|
+
const exclusive = others.find((o) => o.life === "released" && !input.batchSafe(o.wireName ?? o.spelledName, o.finalInput ?? o.args));
|
|
150
|
+
return exclusive === undefined ? undefined : `${name}: an extension's call cannot run beside "${extensionWords(exclusive.wireName ?? exclusive.spelledName, 80)}", which has the run to itself`;
|
|
151
|
+
}
|
|
152
|
+
const textOf = (content) => (Array.isArray(content) ? content.map((b) => (isPlainRecord(b) && b["type"] === "text" && typeof b["text"] === "string" ? b["text"] : "")).join("") : "");
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The name matchers of the rule grammar and of a
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* The name matchers of the rule grammar and of a run's tool-name lists: the linear `*` glob and the covering forms of a tool name —
|
|
3
|
+
* a glob over the whole name (`Re*d`, `mcp__*`, the lone `*`; read by a list that restricts) and the protocol-namespace peer
|
|
4
|
+
* (`<ns>__<peer>`). A leaf module — the allow layer's rule model and the run's list reader both import it, so neither needs the
|
|
5
|
+
* other's dependency tree.
|
|
5
6
|
*/
|
|
6
|
-
import type {
|
|
7
|
+
import type { ProtocolNamespace } from "./protocol-table.js";
|
|
7
8
|
import type { RuleBehavior } from "./permission-rule-model.js";
|
|
8
9
|
/**
|
|
9
10
|
* `*` glob match (design/127 M6: NOT a RegExp — patterns may come from tenant-supplied Settings layers; the same semantics as
|
|
@@ -18,38 +19,31 @@ import type { RuleBehavior } from "./permission-rule-model.js";
|
|
|
18
19
|
*/
|
|
19
20
|
export declare function wildcardMatch(pattern: string, value: string): boolean;
|
|
20
21
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* · `<ns>__*` / `<ns>__*__*` — every tool of the namespace, in the lists that restrict only: CC's deny and ask rules
|
|
31
|
-
* reach it through the whole-name glob (`globMatching`), and its agent denied-tools set
|
|
32
|
-
* reads both spellings as every server.
|
|
33
|
-
* A LITERAL tool segment is deliberately NOT covered here: it is an exact tool name, and the exact
|
|
34
|
-
* table already answers it — the same split CC makes with its leading `ruleName === toolName`.
|
|
35
|
-
*
|
|
36
|
-
* Rule and target must be in the SAME namespace, and peer segments compare EXACTLY (CC
|
|
37
|
-
* `s.serverName === a.serverName`). A rule must therefore spell the peer the way the mint does; that
|
|
38
|
-
* is the same string an operator reads off any mounted tool name, and inventing a fuzzier comparison
|
|
39
|
-
* here would let one rule reach a peer — or a protocol — it does not name. The one peer spelling that
|
|
40
|
-
* is not a peer is the wildcard of the whole-protocol name (`<ns>__*`, `<ns>__*__*`, {@link wholeProtocolOf}):
|
|
41
|
-
* every tool of the namespace. This matcher does not know whose list a name was written in — a caller
|
|
42
|
-
* asks {@link isNamespacedCoveringRuleName} with the list's behavior first and matches only what it admits.
|
|
22
|
+
* True ⇔ this rule name reaches a SET of tool names rather than one exact name — the shapes {@link ruleNameCovers} answers and an
|
|
23
|
+
* exact-name table cannot hold — on a list of `behavior`. Every lane that keys entries by exact tool name asks it to know which
|
|
24
|
+
* entries it must NOT key that way. Two shapes:
|
|
25
|
+
* · a `*` in the name — on a list that RESTRICTS (`deny`, `ask`; {@link readsNameGlob}) anywhere in it (`Re*d`, `mcp__*`, `*`);
|
|
26
|
+
* on a list that GRANTS only in the tool segment after a literal `<ns>__<peer>__` (`mcp__srv__*`, `mcp__srv__get_*`): any other
|
|
27
|
+
* `*` names no scope an allow widens ({@link grantWildcardRefusalOf}), so it is no covering name there — the readers refuse it;
|
|
28
|
+
* · a protocol peer with no tool segment (`<ns>__<peer>`): every tool of that peer, in every list.
|
|
29
|
+
* `behavior` = the behavior of the list the name is written in — required: a list's `*` has no reading without it, so a value
|
|
30
|
+
* that is no behavior word (an array index handed by `filter`, say) is refused loudly, never read as either list.
|
|
43
31
|
*/
|
|
44
|
-
export declare function
|
|
45
|
-
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
32
|
+
export declare function isCoveringRuleName(name: string, behavior: RuleBehavior): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Does a covering rule name ({@link isCoveringRuleName}) cover `toolName`? A name with a `*` is a glob over the WHOLE name
|
|
35
|
+
* ({@link wildcardMatch} — the reference's `p` matcher): `mcp__srv__get_*` reaches `mcp__srv__get_issue`, `mcp__*` every MCP tool,
|
|
36
|
+
* `*` every tool. A protocol peer (`<ns>__<peer>`) reaches every tool minted under that peer, in the SAME namespace, the peer
|
|
37
|
+
* compared EXACTLY (CC `s.serverName === a.serverName`): a rule spells the peer the way the mint does. A literal name is an exact
|
|
38
|
+
* tool name, not a covering one — the exact tables answer it. This matcher does not know whose list a name was written in: a caller
|
|
39
|
+
* asks {@link isCoveringRuleName} with the list's behavior first and matches only what it admits.
|
|
40
|
+
*/
|
|
41
|
+
export declare function ruleNameCovers(ruleName: string, toolName: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* How far a covering rule name reaches into the peer `peer` of namespace `ns`: `"all"` — every tool of it; `"some"` — some tools of
|
|
44
|
+
* it (a glob over that peer's tool segment); `"none"` — none of it, as far as a list that dials peers needs to know. A glob reaches
|
|
45
|
+
* EVERY tool of the peer exactly when it ends in `*` and matches the peer's own prefix (`<ns>__<peer>__`): a prefix of every name
|
|
46
|
+
* minted under the peer is then matched by the glob up to its last `*`, which takes the rest; a glob that does not end in `*` leaves
|
|
47
|
+
* a tool name it does not match. The one reading of a name against a peer that the tool-name lists take.
|
|
48
|
+
*/
|
|
49
|
+
export declare function ruleNameReachIntoPeer(ruleName: string, ns: ProtocolNamespace, peer: string): "all" | "some" | "none";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { grantWildcardRefusalOf, readsNameGlob, splitNamespacedName } from "./tool-name-aliases.js";
|
|
2
2
|
export function wildcardMatch(pattern, value) {
|
|
3
3
|
const first = pattern.indexOf("*");
|
|
4
4
|
if (first < 0)
|
|
@@ -23,44 +23,37 @@ export function wildcardMatch(pattern, value) {
|
|
|
23
23
|
}
|
|
24
24
|
return true;
|
|
25
25
|
}
|
|
26
|
-
function
|
|
26
|
+
function namespacedPeerOf(name) {
|
|
27
27
|
const split = splitNamespacedName(name);
|
|
28
|
-
|
|
29
|
-
return undefined;
|
|
30
|
-
return split.tool !== undefined ? { protocol: split.ns.id, peer: split.peer, tool: split.tool } : { protocol: split.ns.id, peer: split.peer };
|
|
28
|
+
return split === undefined || split.peer === "" ? undefined : split;
|
|
31
29
|
}
|
|
32
|
-
export function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
30
|
+
export function isCoveringRuleName(name, behavior) {
|
|
31
|
+
if (behavior !== "deny" && behavior !== "ask" && behavior !== "allow") {
|
|
32
|
+
throw new TypeError(`isCoveringRuleName: the list's behavior must be "deny", "ask" or "allow" (got ${typeof behavior === "string" ? JSON.stringify(behavior) : typeof behavior}) — a "*" in a name reads one way on a list that restricts and another on one that grants`);
|
|
33
|
+
}
|
|
34
|
+
if (name.includes("*"))
|
|
35
|
+
return readsNameGlob(behavior) || grantWildcardRefusalOf(name) === undefined;
|
|
36
|
+
const peer = namespacedPeerOf(name);
|
|
37
|
+
return peer !== undefined && peer.tool === undefined;
|
|
38
|
+
}
|
|
39
|
+
export function ruleNameCovers(ruleName, toolName) {
|
|
40
|
+
if (ruleName.includes("*"))
|
|
41
|
+
return wildcardMatch(ruleName, toolName);
|
|
42
|
+
const rule = namespacedPeerOf(ruleName);
|
|
43
|
+
if (rule === undefined || rule.tool !== undefined)
|
|
44
44
|
return false;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return target.tool !== undefined && rule.tool.includes("*") && wildcardMatch(rule.tool, target.tool);
|
|
45
|
+
const target = namespacedPeerOf(toolName);
|
|
46
|
+
return target !== undefined && target.ns.id === rule.ns.id && target.peer === rule.peer;
|
|
48
47
|
}
|
|
49
|
-
export function
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return "
|
|
55
|
-
|
|
48
|
+
export function ruleNameReachIntoPeer(ruleName, ns, peer) {
|
|
49
|
+
if (ruleName.includes("*")) {
|
|
50
|
+
if (ruleName.endsWith("*") && wildcardMatch(ruleName, `${ns.prefix}${peer}__`))
|
|
51
|
+
return "all";
|
|
52
|
+
const rule = namespacedPeerOf(ruleName);
|
|
53
|
+
return rule !== undefined && rule.ns.id === ns.id && rule.peer === peer ? "some" : "none";
|
|
54
|
+
}
|
|
55
|
+
const rule = namespacedPeerOf(ruleName);
|
|
56
|
+
if (rule === undefined || rule.ns.id !== ns.id || rule.peer !== peer)
|
|
56
57
|
return "none";
|
|
57
|
-
return rule.tool === undefined
|
|
58
|
-
}
|
|
59
|
-
export function isNamespacedCoveringRuleName(name, behavior) {
|
|
60
|
-
const parsed = parseNamespacedRuleName(name);
|
|
61
|
-
if (parsed === undefined)
|
|
62
|
-
return false;
|
|
63
|
-
if (parsed.peer.includes("*"))
|
|
64
|
-
return wholeProtocolOf(name) !== undefined && readsWholeProtocol(behavior);
|
|
65
|
-
return parsed.tool === undefined || parsed.tool.includes("*");
|
|
58
|
+
return rule.tool === undefined ? "all" : "some";
|
|
66
59
|
}
|
|
@@ -14,7 +14,7 @@ import type { EngineDollar } from "./mods/dollar.js";
|
|
|
14
14
|
import type { ToolExecuteContext } from "./tool-spec.js";
|
|
15
15
|
import type { TaskSpec } from "./types.js";
|
|
16
16
|
/** The fields of a spec the seat carries — one `Pick`, shared by the mint's input and the apply's target. */
|
|
17
|
-
export type ParentSpecSeatFields = Pick<TaskSpec, "principal" | "oneShot" | "clientContext" | "onQuestion" | "mods" | "additionalDirectories" | "additionalReadDirectories" | "envFacts" | "memoryPersistenceCapable" | "memory" | "compaction" | "skillListingBudgetFraction" | "skillListingMaxDescChars" | "fileHistory" | "projectMemory" | "promptForm" | "promptBinding" | "advisorModel">;
|
|
17
|
+
export type ParentSpecSeatFields = Pick<TaskSpec, "principal" | "oneShot" | "clientContext" | "onQuestion" | "mods" | "additionalDirectories" | "additionalReadDirectories" | "envFacts" | "memoryPersistenceCapable" | "memory" | "compaction" | "skillListingBudgetFraction" | "skillListingMaxDescChars" | "fileHistory" | "projectMemory" | "promptForm" | "promptBinding" | "advisorModel" | "attachments">;
|
|
18
18
|
/**
|
|
19
19
|
* The seat a run hands its children. Every member is the parent's own value, frozen at mint (arrays copied and
|
|
20
20
|
* frozen; the facts object copied). Members present iff the parent carries them — an absent member is "nothing to
|
|
@@ -60,6 +60,10 @@ export type ParentSpecSeatFields = Pick<TaskSpec, "principal" | "oneShot" | "cli
|
|
|
60
60
|
* · `advisorModel` — the person's advisor setting: every engine-built child judges it against its OWN model (an advisor
|
|
61
61
|
* weaker than the child's model does not attach there). An ORDINARY member (fill law); the observer sidecar takes it and
|
|
62
62
|
* excludes the tool by name.
|
|
63
|
+
* · `attachments` — the request's attachment-lane declaration, WHOLE (which frames ride the legs' requests and which are
|
|
64
|
+
* switched off): one declaration for the delegation tree, so a lane the parent turned on or off is on or off for the
|
|
65
|
+
* delegates that work for it. An ORDINARY member (fill law): a child that authors `attachments` at all keeps exactly what it
|
|
66
|
+
* authored, never half to the parent.
|
|
63
67
|
*/
|
|
64
68
|
export interface ParentSpecSeat {
|
|
65
69
|
readonly principal?: string;
|
|
@@ -82,6 +86,7 @@ export interface ParentSpecSeat {
|
|
|
82
86
|
readonly promptForm?: "minimal";
|
|
83
87
|
readonly promptBinding?: string;
|
|
84
88
|
readonly advisorModel?: TaskSpec["advisorModel"];
|
|
89
|
+
readonly attachments?: TaskSpec["attachments"];
|
|
85
90
|
}
|
|
86
91
|
/** Refuse (by name, `config.deps_retired_key`) a seat that still carries a retired member. Read at every door a seat enters
|
|
87
92
|
* by hand: the ctx reader, the apply, and the send lane's waker clamps. */
|
|
@@ -26,6 +26,7 @@ export function parentSpecSeatOf(spec, frozenOnQuestion) {
|
|
|
26
26
|
...(spec.promptForm !== undefined ? { promptForm: spec.promptForm } : {}),
|
|
27
27
|
...(spec.promptBinding !== undefined ? { promptBinding: spec.promptBinding } : {}),
|
|
28
28
|
...(spec.advisorModel !== undefined ? { advisorModel: spec.advisorModel } : {}),
|
|
29
|
+
...(spec.attachments !== undefined ? { attachments: Object.freeze({ ...spec.attachments }) } : {}),
|
|
29
30
|
...clampFieldSeatsOf(spec),
|
|
30
31
|
});
|
|
31
32
|
}
|
|
@@ -51,6 +52,7 @@ export function applyParentSpecSeat(child, seat) {
|
|
|
51
52
|
...fill("promptForm", seat.promptForm),
|
|
52
53
|
...fill("promptBinding", seat.promptBinding),
|
|
53
54
|
...fill("advisorModel", seat.advisorModel),
|
|
55
|
+
...fill("attachments", (seat.attachments !== undefined ? { ...seat.attachments } : undefined)),
|
|
54
56
|
...(seat.oneShot === true ? { oneShot: true } : {}),
|
|
55
57
|
...(seat.memoryPersistenceCapable === false ? { memoryPersistenceCapable: false } : fill("memoryPersistenceCapable", seat.memoryPersistenceCapable)),
|
|
56
58
|
};
|
|
@@ -80,6 +80,9 @@ function syntheticCheckpoint(scope, fidelity) {
|
|
|
80
80
|
origin: "denial_limit_fallback",
|
|
81
81
|
askClass: "denial_limit_fallback",
|
|
82
82
|
classes: ["denial_limit_fallback"],
|
|
83
|
+
engineMounted: true,
|
|
84
|
+
targets: { protective: "/park-selfcheck/target", declared: null },
|
|
85
|
+
targetReads: { ["0".repeat(64)]: "f".repeat(64) },
|
|
83
86
|
batchToolCallIds: [`${scope}:call`],
|
|
84
87
|
completedCallIds: [],
|
|
85
88
|
},
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
*/
|
|
30
30
|
import { RULE_OFFER_KINDS, type EditedRuleBreadthWarning, type UncoveredSegmentDetail, type RuleBehavior, type RuleOffer, type RuleRejectCode, type RuleScope, type RuleDot } from "./permission-rule-model.js";
|
|
31
31
|
import { type RuleOwner } from "./rule-owner.js";
|
|
32
|
+
import type { RuleOfferShapeProblem } from "./rule-offer-read.js";
|
|
32
33
|
import type { AssertAllKeysHandled } from "./ask-origin.js";
|
|
33
34
|
import { type PermissionRuleStoreProvider } from "./permission-rule-provider.js";
|
|
34
35
|
/** One candidate rule inside an approval record: what it says (`behavior`), the exact text and where it
|
|
@@ -90,6 +91,24 @@ export type RuleOffer2 = {
|
|
|
90
91
|
export type RuleOffer2KindsCoverEveryArm = AssertAllKeysHandled<Exclude<RuleOffer2["kind"], (typeof RULE_OFFER_KINDS)[number]>>;
|
|
91
92
|
/** {@link import("./permission-rule-model.js").RuleOfferArmsCoverEveryKind}'s twin over the record's option form. */
|
|
92
93
|
export type RuleOffer2ArmsCoverEveryKind = AssertAllKeysHandled<Exclude<(typeof RULE_OFFER_KINDS)[number], RuleOffer2["kind"]>>;
|
|
94
|
+
/** {@link readRuleOffer2}'s answer: the option as read, or why it is not one (the offer read-back judge's two element words). */
|
|
95
|
+
export type RuleOffer2Reading = {
|
|
96
|
+
readonly offer: RuleOffer2;
|
|
97
|
+
} | {
|
|
98
|
+
readonly problem: Exclude<RuleOfferShapeProblem, "not_an_array">;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* The one SHAPE reading of a stored record option ({@link RuleOffer2}), for every reader of an approval record the engine did not
|
|
102
|
+
* just build — the consent entries' record check, and a durable backend reading its rows back. Not a plain record, a member the form
|
|
103
|
+
* does not declare, a candidate index that is not a non-negative safe integer, a batch with no members, a `segments` that is not a
|
|
104
|
+
* list of strings, an uncovered count that is not a non-negative safe integer, a reason row that is not exactly a segment and a reason
|
|
105
|
+
* ⇒ `malformed`; a `kind` or a reason that is a string outside its closed set ⇒ `unknown_word`. A member the form does not declare is
|
|
106
|
+
* refused, not dropped: the record's `schema` stamp is the version gate, so a same-stamp row carrying one was written by another writer.
|
|
107
|
+
* Which batch seats a record of which kind must carry, and whether the indices name its candidates, are the record's own facts —
|
|
108
|
+
* judged by the record check, not here. The answer is a fresh object holding the members it judged; each member is read once, a list
|
|
109
|
+
* by position with its length read once.
|
|
110
|
+
*/
|
|
111
|
+
export declare function readRuleOffer2(raw: unknown): RuleOffer2Reading;
|
|
93
112
|
/** The CURRENT record-form version stamp ({@link RuleApprovalRecord.schema}), spelled once: every mint writes it and
|
|
94
113
|
* every readback compares against it by equality (an older or absent stamp is a stale row, never a floor). A
|
|
95
114
|
* durable backend's stale gate reads this value rather than its own number. */
|
|
@@ -298,11 +317,13 @@ export declare function prepareCardApproval(opts: {
|
|
|
298
317
|
principal?: string;
|
|
299
318
|
/** design/182 §4.5 (additive): the structural owner — only the local-owner path needs it. */
|
|
300
319
|
owner?: RuleOwner;
|
|
301
|
-
/** The tool whose ask this card belongs to
|
|
302
|
-
* card)
|
|
320
|
+
/** The tool whose ask this card belongs to: a tool whose card the offer factory mints a rule on (`cardRuleFormOf`) — the shell
|
|
321
|
+
* tool, a name tool (the skill-activation card), a host tool (the fetch card), a tool with no rule grammar (the whole-tool card).
|
|
322
|
+
* Any other tool (a path tool, a shell-face sibling) draws no card. */
|
|
303
323
|
toolName: string;
|
|
304
324
|
/** The command as adjudicated — the same bytes the ask carried; for a name tool (`Skill`), the name its call carried (`args.skill`);
|
|
305
|
-
* for a host tool (`WebFetch`), the host its call reaches (the offer's `command`)
|
|
325
|
+
* for a host tool (`WebFetch`), the host its call reaches (the offer's `command`); for a tool with no rule grammar, `""` (the
|
|
326
|
+
* offer's `command`: the whole tool binds no value). */
|
|
306
327
|
command: string;
|
|
307
328
|
/** The ask's call id and argument digest, recorded for reconciliation. */
|
|
308
329
|
toolCallId?: string;
|