@namzu/sdk 49.0.0 → 50.1.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 +541 -0
- package/README.md +137 -125
- package/dist/agents/QueryAgent.d.ts.map +1 -1
- package/dist/agents/QueryAgent.js +1 -0
- package/dist/agents/QueryAgent.js.map +1 -1
- package/dist/agents/examples/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/examples/SupervisorAgent.js +1 -0
- package/dist/agents/examples/SupervisorAgent.js.map +1 -1
- package/dist/agents/runAgent.d.ts +2 -0
- package/dist/agents/runAgent.d.ts.map +1 -1
- package/dist/agents/runAgent.js +1 -0
- package/dist/agents/runAgent.js.map +1 -1
- package/dist/authorization/shell-lexer.d.ts.map +1 -1
- package/dist/authorization/shell-lexer.js +16 -1
- package/dist/authorization/shell-lexer.js.map +1 -1
- package/dist/bridge/acp/permission.d.ts +8 -2
- package/dist/bridge/acp/permission.d.ts.map +1 -1
- package/dist/bridge/acp/permission.js +1 -0
- package/dist/bridge/acp/permission.js.map +1 -1
- package/dist/bridge/acp/server.d.ts +25 -1
- package/dist/bridge/acp/server.d.ts.map +1 -1
- package/dist/bridge/acp/server.js +205 -21
- package/dist/bridge/acp/server.js.map +1 -1
- package/dist/bridge/acp/tasks.d.ts +5 -0
- package/dist/bridge/acp/tasks.d.ts.map +1 -0
- package/dist/bridge/acp/tasks.js +19 -0
- package/dist/bridge/acp/tasks.js.map +1 -0
- package/dist/bridge/acp/update.d.ts.map +1 -1
- package/dist/bridge/acp/update.js +148 -13
- package/dist/bridge/acp/update.js.map +1 -1
- package/dist/config/runtime.d.ts +31 -31
- package/dist/connector/mcp/adapter.d.ts.map +1 -1
- package/dist/connector/mcp/adapter.js +11 -4
- package/dist/connector/mcp/adapter.js.map +1 -1
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +6 -3
- package/dist/connector/mcp/client.js.map +1 -1
- package/dist/constants/acp/index.d.ts +3 -0
- package/dist/constants/acp/index.d.ts.map +1 -1
- package/dist/constants/acp/index.js +3 -0
- package/dist/constants/acp/index.js.map +1 -1
- package/dist/contracts/a2a.d.ts +80 -80
- package/dist/contracts/schemas.d.ts +2 -2
- package/dist/contracts/session/schemas.d.ts +10 -10
- package/dist/manager/agent/lifecycle.d.ts +11 -0
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +178 -3
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/plan/lifecycle.d.ts +7 -8
- package/dist/manager/plan/lifecycle.d.ts.map +1 -1
- package/dist/manager/plan/lifecycle.js +7 -8
- package/dist/manager/plan/lifecycle.js.map +1 -1
- package/dist/manager/resident/consumption.d.ts +8 -8
- package/dist/manager/resident/learning-cycle.d.ts +2 -2
- package/dist/manager/resident/learning-observation.d.ts +12 -12
- package/dist/manager/resident/learning.d.ts +82 -82
- package/dist/manager/resident/outbox.d.ts +8 -8
- package/dist/manager/resident/proposal.d.ts +2 -2
- package/dist/manager/resident/store.d.ts +10 -10
- package/dist/manager/session/attribution.d.ts +1 -0
- package/dist/manager/session/attribution.d.ts.map +1 -1
- package/dist/manager/session/attribution.js +9 -1
- package/dist/manager/session/attribution.js.map +1 -1
- package/dist/manager/session/streamed-message-identity.d.ts +6 -0
- package/dist/manager/session/streamed-message-identity.d.ts.map +1 -0
- package/dist/manager/session/streamed-message-identity.js +14 -0
- package/dist/manager/session/streamed-message-identity.js.map +1 -0
- package/dist/manager/session/turn-recorder.d.ts.map +1 -1
- package/dist/manager/session/turn-recorder.js +4 -3
- package/dist/manager/session/turn-recorder.js.map +1 -1
- package/dist/pals/activity/causality.d.ts +23 -0
- package/dist/pals/activity/causality.d.ts.map +1 -0
- package/dist/pals/activity/causality.js +205 -0
- package/dist/pals/activity/causality.js.map +1 -0
- package/dist/pals/activity/projection.d.ts +5 -0
- package/dist/pals/activity/projection.d.ts.map +1 -0
- package/dist/pals/activity/projection.js +79 -0
- package/dist/pals/activity/projection.js.map +1 -0
- package/dist/pals/activity/source.d.ts +16 -0
- package/dist/pals/activity/source.d.ts.map +1 -0
- package/dist/pals/activity/source.js +235 -0
- package/dist/pals/activity/source.js.map +1 -0
- package/dist/pals/activity/subscription-policy.d.ts +38 -0
- package/dist/pals/activity/subscription-policy.d.ts.map +1 -0
- package/dist/pals/activity/subscription-policy.js +183 -0
- package/dist/pals/activity/subscription-policy.js.map +1 -0
- package/dist/pals/activity/subscription-schema.d.ts +353 -0
- package/dist/pals/activity/subscription-schema.d.ts.map +1 -0
- package/dist/pals/activity/subscription-schema.js +24 -0
- package/dist/pals/activity/subscription-schema.js.map +1 -0
- package/dist/pals/activity/subscription-store.d.ts +25 -0
- package/dist/pals/activity/subscription-store.d.ts.map +1 -0
- package/dist/pals/activity/subscription-store.js +152 -0
- package/dist/pals/activity/subscription-store.js.map +1 -0
- package/dist/pals/activity/subscription-types.d.ts +42 -0
- package/dist/pals/activity/subscription-types.d.ts.map +1 -0
- package/dist/pals/activity/subscription-types.js +2 -0
- package/dist/pals/activity/subscription-types.js.map +1 -0
- package/dist/pals/activity/subscriptions.d.ts +32 -0
- package/dist/pals/activity/subscriptions.d.ts.map +1 -0
- package/dist/pals/activity/subscriptions.js +151 -0
- package/dist/pals/activity/subscriptions.js.map +1 -0
- package/dist/pals/activity/types.d.ts +77 -0
- package/dist/pals/activity/types.d.ts.map +1 -0
- package/dist/pals/activity/types.js +2 -0
- package/dist/pals/activity/types.js.map +1 -0
- package/dist/pals/channels/ingress.d.ts +9 -0
- package/dist/pals/channels/ingress.d.ts.map +1 -0
- package/dist/pals/channels/ingress.js +131 -0
- package/dist/pals/channels/ingress.js.map +1 -0
- package/dist/pals/channels/routes.d.ts +20 -0
- package/dist/pals/channels/routes.d.ts.map +1 -0
- package/dist/pals/channels/routes.js +111 -0
- package/dist/pals/channels/routes.js.map +1 -0
- package/dist/pals/channels/routing.d.ts +37 -0
- package/dist/pals/channels/routing.d.ts.map +1 -0
- package/dist/pals/channels/routing.js +150 -0
- package/dist/pals/channels/routing.js.map +1 -0
- package/dist/pals/channels/schema.d.ts +234 -0
- package/dist/pals/channels/schema.d.ts.map +1 -0
- package/dist/pals/channels/schema.js +94 -0
- package/dist/pals/channels/schema.js.map +1 -0
- package/dist/pals/channels/types.d.ts +115 -0
- package/dist/pals/channels/types.d.ts.map +1 -0
- package/dist/pals/channels/types.js +2 -0
- package/dist/pals/channels/types.js.map +1 -0
- package/dist/pals/communication/broker.d.ts +8 -0
- package/dist/pals/communication/broker.d.ts.map +1 -0
- package/dist/pals/communication/broker.js +121 -0
- package/dist/pals/communication/broker.js.map +1 -0
- package/dist/pals/communication/dispatch.d.ts +4 -0
- package/dist/pals/communication/dispatch.d.ts.map +1 -0
- package/dist/pals/communication/dispatch.js +57 -0
- package/dist/pals/communication/dispatch.js.map +1 -0
- package/dist/pals/communication/inbound.d.ts +9 -0
- package/dist/pals/communication/inbound.d.ts.map +1 -0
- package/dist/pals/communication/inbound.js +155 -0
- package/dist/pals/communication/inbound.js.map +1 -0
- package/dist/pals/communication/ingress-dispatch.d.ts +5 -0
- package/dist/pals/communication/ingress-dispatch.d.ts.map +1 -0
- package/dist/pals/communication/ingress-dispatch.js +51 -0
- package/dist/pals/communication/ingress-dispatch.js.map +1 -0
- package/dist/pals/communication/ingress-inbound.d.ts +9 -0
- package/dist/pals/communication/ingress-inbound.d.ts.map +1 -0
- package/dist/pals/communication/ingress-inbound.js +222 -0
- package/dist/pals/communication/ingress-inbound.js.map +1 -0
- package/dist/pals/communication/ingress-schema.d.ts +7829 -0
- package/dist/pals/communication/ingress-schema.d.ts.map +1 -0
- package/dist/pals/communication/ingress-schema.js +479 -0
- package/dist/pals/communication/ingress-schema.js.map +1 -0
- package/dist/pals/communication/ingress-types.d.ts +187 -0
- package/dist/pals/communication/ingress-types.d.ts.map +1 -0
- package/dist/pals/communication/ingress-types.js +73 -0
- package/dist/pals/communication/ingress-types.js.map +1 -0
- package/dist/pals/communication/operator.d.ts +75 -0
- package/dist/pals/communication/operator.d.ts.map +1 -0
- package/dist/pals/communication/operator.js +217 -0
- package/dist/pals/communication/operator.js.map +1 -0
- package/dist/pals/communication/policy.d.ts +41 -0
- package/dist/pals/communication/policy.d.ts.map +1 -0
- package/dist/pals/communication/policy.js +138 -0
- package/dist/pals/communication/policy.js.map +1 -0
- package/dist/pals/communication/schema.d.ts +2000 -0
- package/dist/pals/communication/schema.d.ts.map +1 -0
- package/dist/pals/communication/schema.js +170 -0
- package/dist/pals/communication/schema.js.map +1 -0
- package/dist/pals/communication/store.d.ts +61 -0
- package/dist/pals/communication/store.d.ts.map +1 -0
- package/dist/pals/communication/store.js +450 -0
- package/dist/pals/communication/store.js.map +1 -0
- package/dist/pals/communication/tools.d.ts +23 -0
- package/dist/pals/communication/tools.d.ts.map +1 -0
- package/dist/pals/communication/tools.js +107 -0
- package/dist/pals/communication/tools.js.map +1 -0
- package/dist/pals/communication/types.d.ts +168 -0
- package/dist/pals/communication/types.d.ts.map +1 -0
- package/dist/pals/communication/types.js +24 -0
- package/dist/pals/communication/types.js.map +1 -0
- package/dist/pals/communication/verify.d.ts +22 -0
- package/dist/pals/communication/verify.d.ts.map +1 -0
- package/dist/pals/communication/verify.js +142 -0
- package/dist/pals/communication/verify.js.map +1 -0
- package/dist/pals/lifecycle.d.ts +37 -0
- package/dist/pals/lifecycle.d.ts.map +1 -0
- package/dist/pals/lifecycle.js +22 -0
- package/dist/pals/lifecycle.js.map +1 -0
- package/dist/pals/prompt.d.ts +30 -0
- package/dist/pals/prompt.d.ts.map +1 -0
- package/dist/pals/prompt.js +65 -0
- package/dist/pals/prompt.js.map +1 -0
- package/dist/pals/reference-images.d.ts +44 -0
- package/dist/pals/reference-images.d.ts.map +1 -0
- package/dist/pals/reference-images.js +248 -0
- package/dist/pals/reference-images.js.map +1 -0
- package/dist/pals/runtime.d.ts +46 -0
- package/dist/pals/runtime.d.ts.map +1 -0
- package/dist/pals/runtime.js +624 -0
- package/dist/pals/runtime.js.map +1 -0
- package/dist/pals/store.d.ts +26 -0
- package/dist/pals/store.d.ts.map +1 -0
- package/dist/pals/store.js +334 -0
- package/dist/pals/store.js.map +1 -0
- package/dist/pals/types.d.ts +145 -0
- package/dist/pals/types.d.ts.map +1 -0
- package/dist/pals/types.js +2 -0
- package/dist/pals/types.js.map +1 -0
- package/dist/peers/envelope.js +1 -1
- package/dist/peers/envelope.js.map +1 -1
- package/dist/peers/protocol.d.ts +83 -83
- package/dist/peers/record.d.ts +10 -10
- package/dist/plugin/shell-hook.d.ts.map +1 -1
- package/dist/plugin/shell-hook.js +7 -2
- package/dist/plugin/shell-hook.js.map +1 -1
- package/dist/process/kill-tree.d.ts.map +1 -1
- package/dist/process/kill-tree.js +9 -1
- package/dist/process/kill-tree.js.map +1 -1
- package/dist/provider/errors.d.ts +19 -0
- package/dist/provider/errors.d.ts.map +1 -1
- package/dist/provider/errors.js +123 -2
- package/dist/provider/errors.js.map +1 -1
- package/dist/provider/strict-schema.d.ts +28 -0
- package/dist/provider/strict-schema.d.ts.map +1 -1
- package/dist/provider/strict-schema.js +86 -0
- package/dist/provider/strict-schema.js.map +1 -1
- package/dist/public-runtime.d.ts +42 -14
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +36 -8
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +8 -3
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +8 -3
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +27 -7
- package/dist/public-types.d.ts.map +1 -1
- package/dist/registry/tool/presentation.d.ts +1 -0
- package/dist/registry/tool/presentation.d.ts.map +1 -1
- package/dist/registry/tool/presentation.js +9 -7
- package/dist/registry/tool/presentation.js.map +1 -1
- package/dist/runtime/harness-session/index.d.ts +5 -0
- package/dist/runtime/harness-session/index.d.ts.map +1 -0
- package/dist/runtime/harness-session/index.js +928 -0
- package/dist/runtime/harness-session/index.js.map +1 -0
- package/dist/runtime/harness-session/journal.d.ts +37 -0
- package/dist/runtime/harness-session/journal.d.ts.map +1 -0
- package/dist/runtime/harness-session/journal.js +177 -0
- package/dist/runtime/harness-session/journal.js.map +1 -0
- package/dist/runtime/harness-session/saved-view.d.ts +8 -0
- package/dist/runtime/harness-session/saved-view.d.ts.map +1 -0
- package/dist/runtime/harness-session/saved-view.js +112 -0
- package/dist/runtime/harness-session/saved-view.js.map +1 -0
- package/dist/runtime/jobs/awaited-jobs.d.ts +2 -1
- package/dist/runtime/jobs/awaited-jobs.d.ts.map +1 -1
- package/dist/runtime/jobs/awaited-jobs.js +2 -1
- package/dist/runtime/jobs/awaited-jobs.js.map +1 -1
- package/dist/runtime/jobs/registry.d.ts +56 -1
- package/dist/runtime/jobs/registry.d.ts.map +1 -1
- package/dist/runtime/jobs/registry.js +351 -34
- package/dist/runtime/jobs/registry.js.map +1 -1
- package/dist/runtime/query/abandon-turn.d.ts +12 -1
- package/dist/runtime/query/abandon-turn.d.ts.map +1 -1
- package/dist/runtime/query/abandon-turn.js +3 -1
- package/dist/runtime/query/abandon-turn.js.map +1 -1
- package/dist/runtime/query/checkpoint.d.ts +4 -0
- package/dist/runtime/query/checkpoint.d.ts.map +1 -1
- package/dist/runtime/query/checkpoint.js +10 -0
- package/dist/runtime/query/checkpoint.js.map +1 -1
- package/dist/runtime/query/durable-inbound.d.ts +5 -0
- package/dist/runtime/query/durable-inbound.d.ts.map +1 -0
- package/dist/runtime/query/durable-inbound.js +89 -0
- package/dist/runtime/query/durable-inbound.js.map +1 -0
- package/dist/runtime/query/events.d.ts +4 -0
- package/dist/runtime/query/events.d.ts.map +1 -1
- package/dist/runtime/query/events.js +22 -5
- package/dist/runtime/query/events.js.map +1 -1
- package/dist/runtime/query/executor/tool-call-admission.d.ts +5 -1
- package/dist/runtime/query/executor/tool-call-admission.d.ts.map +1 -1
- package/dist/runtime/query/executor/tool-call-admission.js +85 -13
- package/dist/runtime/query/executor/tool-call-admission.js.map +1 -1
- package/dist/runtime/query/executor.d.ts +41 -18
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +227 -114
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/index.d.ts +3 -0
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +21 -4
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts +18 -6
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +144 -67
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/outstanding-work.d.ts +9 -5
- package/dist/runtime/query/iteration/outstanding-work.d.ts.map +1 -1
- package/dist/runtime/query/iteration/outstanding-work.js +61 -6
- package/dist/runtime/query/iteration/outstanding-work.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +4 -0
- package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/context.js.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.js +99 -16
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/observation-context.d.ts +2 -2
- package/dist/runtime/query/observation-context.d.ts.map +1 -1
- package/dist/runtime/query/observation-context.js +20 -13
- package/dist/runtime/query/observation-context.js.map +1 -1
- package/dist/runtime/query/prepare-turn.js +2 -2
- package/dist/runtime/query/prepare-turn.js.map +1 -1
- package/dist/runtime/query/prompt-cache.d.ts +1 -0
- package/dist/runtime/query/prompt-cache.d.ts.map +1 -1
- package/dist/runtime/query/prompt-cache.js +2 -0
- package/dist/runtime/query/prompt-cache.js.map +1 -1
- package/dist/runtime/query/prompt.d.ts +2 -0
- package/dist/runtime/query/prompt.d.ts.map +1 -1
- package/dist/runtime/query/prompt.js +23 -1
- package/dist/runtime/query/prompt.js.map +1 -1
- package/dist/runtime/query/repeat-call.d.ts +12 -3
- package/dist/runtime/query/repeat-call.d.ts.map +1 -1
- package/dist/runtime/query/repeat-call.js +33 -10
- package/dist/runtime/query/repeat-call.js.map +1 -1
- package/dist/runtime/query/resume-pending.d.ts +5 -6
- package/dist/runtime/query/resume-pending.d.ts.map +1 -1
- package/dist/runtime/query/resume-pending.js +30 -3
- package/dist/runtime/query/resume-pending.js.map +1 -1
- package/dist/runtime/query/resume-session.js +1 -1
- package/dist/runtime/query/resume-session.js.map +1 -1
- package/dist/runtime/query/review-policy.d.ts +8 -1
- package/dist/runtime/query/review-policy.d.ts.map +1 -1
- package/dist/runtime/query/review-policy.js +6 -0
- package/dist/runtime/query/review-policy.js.map +1 -1
- package/dist/runtime/query/saved-presentation.d.ts +13 -0
- package/dist/runtime/query/saved-presentation.d.ts.map +1 -0
- package/dist/runtime/query/saved-presentation.js +63 -0
- package/dist/runtime/query/saved-presentation.js.map +1 -0
- package/dist/runtime/query/steering.d.ts +6 -9
- package/dist/runtime/query/steering.d.ts.map +1 -1
- package/dist/runtime/query/steering.js.map +1 -1
- package/dist/runtime/query/tool-executions.d.ts +7 -3
- package/dist/runtime/query/tool-executions.d.ts.map +1 -1
- package/dist/runtime/query/tool-executions.js +89 -9
- package/dist/runtime/query/tool-executions.js.map +1 -1
- package/dist/runtime/query/tooling.d.ts +3 -1
- package/dist/runtime/query/tooling.d.ts.map +1 -1
- package/dist/runtime/query/tooling.js +3 -0
- package/dist/runtime/query/tooling.js.map +1 -1
- package/dist/scheduler/completion-inbox.d.ts +25 -1
- package/dist/scheduler/completion-inbox.d.ts.map +1 -1
- package/dist/scheduler/completion-inbox.js +102 -8
- package/dist/scheduler/completion-inbox.js.map +1 -1
- package/dist/scheduler/delegating.d.ts.map +1 -1
- package/dist/scheduler/delegating.js +5 -0
- package/dist/scheduler/delegating.js.map +1 -1
- package/dist/scheduler/local.d.ts.map +1 -1
- package/dist/scheduler/local.js +2 -0
- package/dist/scheduler/local.js.map +1 -1
- package/dist/session/summary/materialize.d.ts +10 -6
- package/dist/session/summary/materialize.d.ts.map +1 -1
- package/dist/session/summary/materialize.js +41 -8
- package/dist/session/summary/materialize.js.map +1 -1
- package/dist/store/budget/ledger.d.ts +9 -0
- package/dist/store/budget/ledger.d.ts.map +1 -1
- package/dist/store/budget/ledger.js +58 -6
- package/dist/store/budget/ledger.js.map +1 -1
- package/dist/store/evidence/index-page.d.ts +12 -12
- package/dist/store/evidence/source-text.d.ts +4 -4
- package/dist/store/session/disk.d.ts +9 -4
- package/dist/store/session/disk.d.ts.map +1 -1
- package/dist/store/session/disk.js +57 -11
- package/dist/store/session/disk.js.map +1 -1
- package/dist/store/session/memory.d.ts +5 -3
- package/dist/store/session/memory.d.ts.map +1 -1
- package/dist/store/session/memory.js +24 -7
- package/dist/store/session/memory.js.map +1 -1
- package/dist/store/session-log/core.d.ts +26 -6
- package/dist/store/session-log/core.d.ts.map +1 -1
- package/dist/store/session-log/core.js +61 -8
- package/dist/store/session-log/core.js.map +1 -1
- package/dist/store/session-log/disk.d.ts +2 -2
- package/dist/store/session-log/disk.d.ts.map +1 -1
- package/dist/store/session-log/disk.js +1 -0
- package/dist/store/session-log/disk.js.map +1 -1
- package/dist/store/session-log/fold.d.ts +7 -0
- package/dist/store/session-log/fold.d.ts.map +1 -1
- package/dist/store/session-log/fold.js +21 -0
- package/dist/store/session-log/fold.js.map +1 -1
- package/dist/store/session-log/index.d.ts +5 -3
- package/dist/store/session-log/index.d.ts.map +1 -1
- package/dist/store/session-log/index.js +3 -1
- package/dist/store/session-log/index.js.map +1 -1
- package/dist/store/session-log/memory.d.ts +1 -1
- package/dist/store/session-log/memory.d.ts.map +1 -1
- package/dist/store/session-log/memory.js +1 -0
- package/dist/store/session-log/memory.js.map +1 -1
- package/dist/store/session-log/spill.d.ts +10 -3
- package/dist/store/session-log/spill.d.ts.map +1 -1
- package/dist/store/session-log/spill.js +70 -5
- package/dist/store/session-log/spill.js.map +1 -1
- package/dist/store/session-log/structured-result.d.ts +21 -0
- package/dist/store/session-log/structured-result.d.ts.map +1 -0
- package/dist/store/session-log/structured-result.js +67 -0
- package/dist/store/session-log/structured-result.js.map +1 -0
- package/dist/store/task/disk.d.ts +11 -0
- package/dist/store/task/disk.d.ts.map +1 -1
- package/dist/store/task/disk.js +41 -2
- package/dist/store/task/disk.js.map +1 -1
- package/dist/store/task/memory.d.ts.map +1 -1
- package/dist/store/task/memory.js +15 -3
- package/dist/store/task/memory.js.map +1 -1
- package/dist/tools/admit-facts.d.ts +13 -0
- package/dist/tools/admit-facts.d.ts.map +1 -0
- package/dist/tools/admit-facts.js +142 -0
- package/dist/tools/admit-facts.js.map +1 -0
- package/dist/tools/builtins/bash.d.ts +4 -1
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +108 -22
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/browser.d.ts +10 -10
- package/dist/tools/builtins/computer-use.d.ts +90 -90
- package/dist/tools/builtins/edit.d.ts +17 -0
- package/dist/tools/builtins/edit.d.ts.map +1 -1
- package/dist/tools/builtins/edit.js +46 -1
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/file-write-result.d.ts.map +1 -1
- package/dist/tools/builtins/file-write-result.js +13 -0
- package/dist/tools/builtins/file-write-result.js.map +1 -1
- package/dist/tools/builtins/glob.d.ts.map +1 -1
- package/dist/tools/builtins/glob.js +12 -0
- package/dist/tools/builtins/glob.js.map +1 -1
- package/dist/tools/builtins/grep.d.ts.map +1 -1
- package/dist/tools/builtins/grep.js +14 -0
- package/dist/tools/builtins/grep.js.map +1 -1
- package/dist/tools/builtins/index.d.ts +2 -0
- package/dist/tools/builtins/index.d.ts.map +1 -1
- package/dist/tools/builtins/index.js +1 -0
- package/dist/tools/builtins/index.js.map +1 -1
- package/dist/tools/builtins/job.d.ts.map +1 -1
- package/dist/tools/builtins/job.js +4 -1
- package/dist/tools/builtins/job.js.map +1 -1
- package/dist/tools/builtins/lsp.d.ts +2 -2
- package/dist/tools/builtins/read-file.d.ts.map +1 -1
- package/dist/tools/builtins/read-file.js +49 -0
- package/dist/tools/builtins/read-file.js.map +1 -1
- package/dist/tools/builtins/view-image.d.ts +24 -0
- package/dist/tools/builtins/view-image.d.ts.map +1 -0
- package/dist/tools/builtins/view-image.js +385 -0
- package/dist/tools/builtins/view-image.js.map +1 -0
- package/dist/tools/builtins/wait-for-job-bounds.d.ts +2 -0
- package/dist/tools/builtins/wait-for-job-bounds.d.ts.map +1 -1
- package/dist/tools/builtins/wait-for-job-bounds.js +1 -0
- package/dist/tools/builtins/wait-for-job-bounds.js.map +1 -1
- package/dist/tools/builtins/wait-for-job.d.ts +2 -0
- package/dist/tools/builtins/wait-for-job.d.ts.map +1 -1
- package/dist/tools/builtins/wait-for-job.js +104 -6
- package/dist/tools/builtins/wait-for-job.js.map +1 -1
- package/dist/tools/builtins/write-file.d.ts.map +1 -1
- package/dist/tools/builtins/write-file.js +1 -0
- package/dist/tools/builtins/write-file.js.map +1 -1
- package/dist/tools/command-shell.d.ts +37 -2
- package/dist/tools/command-shell.d.ts.map +1 -1
- package/dist/tools/command-shell.js +100 -3
- package/dist/tools/command-shell.js.map +1 -1
- package/dist/tools/coordinator/agent.d.ts +9 -19
- package/dist/tools/coordinator/agent.d.ts.map +1 -1
- package/dist/tools/coordinator/agent.js.map +1 -1
- package/dist/tools/coordinator/index.d.ts.map +1 -1
- package/dist/tools/coordinator/index.js +127 -67
- package/dist/tools/coordinator/index.js.map +1 -1
- package/dist/tools/coordinator/wait-with-idle-bound.d.ts +2 -0
- package/dist/tools/coordinator/wait-with-idle-bound.d.ts.map +1 -1
- package/dist/tools/coordinator/wait-with-idle-bound.js +1 -1
- package/dist/tools/coordinator/wait-with-idle-bound.js.map +1 -1
- package/dist/tools/defineTool.d.ts.map +1 -1
- package/dist/tools/defineTool.js +4 -0
- package/dist/tools/defineTool.js.map +1 -1
- package/dist/tools/failure-facts.d.ts +8 -0
- package/dist/tools/failure-facts.d.ts.map +1 -0
- package/dist/tools/failure-facts.js +24 -0
- package/dist/tools/failure-facts.js.map +1 -0
- package/dist/tools/host-output.d.ts +24 -0
- package/dist/tools/host-output.d.ts.map +1 -0
- package/dist/tools/host-output.js +117 -0
- package/dist/tools/host-output.js.map +1 -0
- package/dist/tools/oem-code-pages.d.ts +8 -0
- package/dist/tools/oem-code-pages.d.ts.map +1 -0
- package/dist/tools/oem-code-pages.js +23 -0
- package/dist/tools/oem-code-pages.js.map +1 -0
- package/dist/tools/schedules/schedule-tool.d.ts.map +1 -1
- package/dist/tools/schedules/schedule-tool.js +35 -6
- package/dist/tools/schedules/schedule-tool.js.map +1 -1
- package/dist/tools/schedules/types.d.ts +23 -3
- package/dist/tools/schedules/types.d.ts.map +1 -1
- package/dist/tools/task/list.d.ts.map +1 -1
- package/dist/tools/task/list.js +14 -6
- package/dist/tools/task/list.js.map +1 -1
- package/dist/tools/task/present.d.ts.map +1 -1
- package/dist/tools/task/present.js +26 -6
- package/dist/tools/task/present.js.map +1 -1
- package/dist/tools/task/update.d.ts.map +1 -1
- package/dist/tools/task/update.js +12 -5
- package/dist/tools/task/update.js.map +1 -1
- package/dist/tools/text-window.d.ts +19 -0
- package/dist/tools/text-window.d.ts.map +1 -0
- package/dist/tools/text-window.js +83 -0
- package/dist/tools/text-window.js.map +1 -0
- package/dist/toolsets/manager.d.ts +11 -0
- package/dist/toolsets/manager.d.ts.map +1 -1
- package/dist/toolsets/manager.js +45 -1
- package/dist/toolsets/manager.js.map +1 -1
- package/dist/types/acp/index.d.ts +137 -1
- package/dist/types/acp/index.d.ts.map +1 -1
- package/dist/types/agent/base.d.ts +3 -0
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/manager.d.ts +8 -23
- package/dist/types/agent/manager.d.ts.map +1 -1
- package/dist/types/agent/scheduler.d.ts +10 -1
- package/dist/types/agent/scheduler.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +4 -0
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/authorization/index.d.ts +30 -30
- package/dist/types/connector/mcp.d.ts +7 -0
- package/dist/types/connector/mcp.d.ts.map +1 -1
- package/dist/types/errors/catalog.d.ts.map +1 -1
- package/dist/types/errors/catalog.js +4 -2
- package/dist/types/errors/catalog.js.map +1 -1
- package/dist/types/harness/schema.d.ts +354 -0
- package/dist/types/harness/schema.d.ts.map +1 -0
- package/dist/types/harness/schema.js +203 -0
- package/dist/types/harness/schema.js.map +1 -0
- package/dist/types/harness/session.d.ts +278 -0
- package/dist/types/harness/session.d.ts.map +1 -0
- package/dist/types/harness/session.js +2 -0
- package/dist/types/harness/session.js.map +1 -0
- package/dist/types/hitl/index.d.ts +12 -0
- package/dist/types/hitl/index.d.ts.map +1 -1
- package/dist/types/hitl/index.js.map +1 -1
- package/dist/types/job/index.d.ts +47 -0
- package/dist/types/job/index.d.ts.map +1 -0
- package/dist/types/job/index.js +2 -0
- package/dist/types/job/index.js.map +1 -0
- package/dist/types/message/inbound-delivery.d.ts +44 -0
- package/dist/types/message/inbound-delivery.d.ts.map +1 -0
- package/dist/types/message/inbound-delivery.js +14 -0
- package/dist/types/message/inbound-delivery.js.map +1 -0
- package/dist/types/message/index.d.ts +4 -1
- package/dist/types/message/index.d.ts.map +1 -1
- package/dist/types/message/index.js +5 -1
- package/dist/types/message/index.js.map +1 -1
- package/dist/types/plugin/index.d.ts +6 -6
- package/dist/types/sandbox/index.d.ts +39 -2
- package/dist/types/sandbox/index.d.ts.map +1 -1
- package/dist/types/sandbox/index.js.map +1 -1
- package/dist/types/session/checkpoint.d.ts +24 -17
- package/dist/types/session/checkpoint.d.ts.map +1 -1
- package/dist/types/session/checkpoint.js +1 -0
- package/dist/types/session/checkpoint.js.map +1 -1
- package/dist/types/session/events.d.ts +23 -1
- package/dist/types/session/events.d.ts.map +1 -1
- package/dist/types/session/events.js.map +1 -1
- package/dist/types/session/records.d.ts +1514 -565
- package/dist/types/session/records.d.ts.map +1 -1
- package/dist/types/session/records.js +89 -1
- package/dist/types/session/records.js.map +1 -1
- package/dist/types/session/step.d.ts +2 -0
- package/dist/types/session/step.d.ts.map +1 -1
- package/dist/types/session/step.js.map +1 -1
- package/dist/types/session/store.d.ts +19 -10
- package/dist/types/session/store.d.ts.map +1 -1
- package/dist/types/session/tool-execution.d.ts +6 -0
- package/dist/types/session/tool-execution.d.ts.map +1 -1
- package/dist/types/structured-output/index.d.ts +12 -2
- package/dist/types/structured-output/index.d.ts.map +1 -1
- package/dist/types/summary/ref.d.ts +3 -1
- package/dist/types/summary/ref.d.ts.map +1 -1
- package/dist/types/tool/index.d.ts +32 -4
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/dist/types/tool/presentation.d.ts +106 -0
- package/dist/types/tool/presentation.d.ts.map +1 -1
- package/dist/utils/json-snapshot.d.ts +6 -2
- package/dist/utils/json-snapshot.d.ts.map +1 -1
- package/dist/utils/json-snapshot.js +19 -9
- package/dist/utils/json-snapshot.js.map +1 -1
- package/dist/utils/structured-result-json.d.ts +5 -0
- package/dist/utils/structured-result-json.d.ts.map +1 -0
- package/dist/utils/structured-result-json.js +10 -0
- package/dist/utils/structured-result-json.js.map +1 -0
- package/package.json +1 -1
- package/src/agents/QueryAgent.ts +1 -0
- package/src/agents/examples/SupervisorAgent.ts +1 -0
- package/src/agents/runAgent.ts +3 -0
- package/src/authorization/shell-lexer.ts +16 -1
- package/src/bridge/acp/permission.ts +17 -3
- package/src/bridge/acp/server.ts +271 -25
- package/src/bridge/acp/tasks.ts +23 -0
- package/src/bridge/acp/update.ts +167 -13
- package/src/connector/mcp/adapter.ts +16 -4
- package/src/connector/mcp/client.ts +6 -2
- package/src/constants/acp/index.ts +4 -0
- package/src/manager/agent/lifecycle.ts +230 -3
- package/src/manager/plan/lifecycle.ts +11 -9
- package/src/manager/session/attribution.ts +12 -2
- package/src/manager/session/streamed-message-identity.ts +21 -0
- package/src/manager/session/turn-recorder.ts +4 -3
- package/src/pals/activity/causality.ts +261 -0
- package/src/pals/activity/projection.ts +89 -0
- package/src/pals/activity/source.ts +240 -0
- package/src/pals/activity/subscription-policy.ts +230 -0
- package/src/pals/activity/subscription-schema.ts +27 -0
- package/src/pals/activity/subscription-store.ts +172 -0
- package/src/pals/activity/subscription-types.ts +48 -0
- package/src/pals/activity/subscriptions.ts +209 -0
- package/src/pals/activity/types.ts +108 -0
- package/src/pals/channels/ingress.ts +153 -0
- package/src/pals/channels/routes.ts +118 -0
- package/src/pals/channels/routing.ts +197 -0
- package/src/pals/channels/schema.ts +108 -0
- package/src/pals/channels/types.ts +156 -0
- package/src/pals/communication/broker.ts +131 -0
- package/src/pals/communication/dispatch.ts +66 -0
- package/src/pals/communication/inbound.ts +193 -0
- package/src/pals/communication/ingress-dispatch.ts +63 -0
- package/src/pals/communication/ingress-inbound.ts +269 -0
- package/src/pals/communication/ingress-schema.ts +526 -0
- package/src/pals/communication/ingress-types.ts +336 -0
- package/src/pals/communication/operator.ts +315 -0
- package/src/pals/communication/policy.ts +174 -0
- package/src/pals/communication/schema.ts +173 -0
- package/src/pals/communication/store.ts +577 -0
- package/src/pals/communication/tools.ts +139 -0
- package/src/pals/communication/types.ts +227 -0
- package/src/pals/communication/verify.ts +220 -0
- package/src/pals/lifecycle.ts +54 -0
- package/src/pals/prompt.ts +101 -0
- package/src/pals/reference-images.ts +322 -0
- package/src/pals/runtime.ts +670 -0
- package/src/pals/store.ts +369 -0
- package/src/pals/types.ts +157 -0
- package/src/peers/envelope.ts +1 -1
- package/src/plugin/shell-hook.ts +8 -2
- package/src/process/kill-tree.ts +10 -1
- package/src/provider/errors.ts +135 -2
- package/src/provider/strict-schema.ts +90 -0
- package/src/public-runtime.ts +118 -12
- package/src/public-tools.ts +13 -1
- package/src/public-types.ts +69 -7
- package/src/registry/tool/presentation.ts +9 -4
- package/src/runtime/harness-session/index.ts +1125 -0
- package/src/runtime/harness-session/journal.ts +209 -0
- package/src/runtime/harness-session/saved-view.ts +122 -0
- package/src/runtime/jobs/awaited-jobs.ts +2 -1
- package/src/runtime/jobs/registry.ts +397 -41
- package/src/runtime/query/abandon-turn.ts +18 -2
- package/src/runtime/query/checkpoint.ts +11 -0
- package/src/runtime/query/durable-inbound.ts +101 -0
- package/src/runtime/query/events.ts +22 -5
- package/src/runtime/query/executor/tool-call-admission.ts +125 -32
- package/src/runtime/query/executor.ts +316 -130
- package/src/runtime/query/index.ts +24 -4
- package/src/runtime/query/iteration/index.ts +218 -104
- package/src/runtime/query/iteration/outstanding-work.ts +55 -7
- package/src/runtime/query/iteration/phases/context.ts +4 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +118 -21
- package/src/runtime/query/observation-context.ts +22 -16
- package/src/runtime/query/prepare-turn.ts +2 -2
- package/src/runtime/query/prompt-cache.ts +3 -0
- package/src/runtime/query/prompt.ts +32 -1
- package/src/runtime/query/repeat-call.ts +40 -10
- package/src/runtime/query/resume-pending.ts +60 -7
- package/src/runtime/query/resume-session.ts +1 -1
- package/src/runtime/query/review-policy.ts +23 -2
- package/src/runtime/query/saved-presentation.ts +70 -0
- package/src/runtime/query/steering.ts +6 -9
- package/src/runtime/query/tool-executions.ts +108 -9
- package/src/runtime/query/tooling.ts +6 -1
- package/src/scheduler/completion-inbox.ts +108 -7
- package/src/scheduler/delegating.ts +5 -0
- package/src/scheduler/local.ts +2 -0
- package/src/session/summary/materialize.ts +51 -9
- package/src/store/budget/ledger.ts +60 -5
- package/src/store/session/disk.ts +77 -10
- package/src/store/session/memory.ts +32 -7
- package/src/store/session-log/core.ts +118 -11
- package/src/store/session-log/disk.ts +9 -2
- package/src/store/session-log/fold.ts +22 -0
- package/src/store/session-log/index.ts +5 -0
- package/src/store/session-log/memory.ts +2 -1
- package/src/store/session-log/spill.ts +89 -6
- package/src/store/session-log/structured-result.ts +96 -0
- package/src/store/task/disk.ts +46 -2
- package/src/store/task/memory.ts +13 -3
- package/src/tools/admit-facts.ts +145 -0
- package/src/tools/builtins/bash.ts +132 -24
- package/src/tools/builtins/edit.ts +54 -1
- package/src/tools/builtins/file-write-result.ts +14 -0
- package/src/tools/builtins/glob.ts +12 -0
- package/src/tools/builtins/grep.ts +14 -0
- package/src/tools/builtins/index.ts +2 -0
- package/src/tools/builtins/job.ts +4 -1
- package/src/tools/builtins/read-file.ts +57 -0
- package/src/tools/builtins/view-image.ts +409 -0
- package/src/tools/builtins/wait-for-job-bounds.ts +3 -0
- package/src/tools/builtins/wait-for-job.ts +141 -32
- package/src/tools/builtins/write-file.ts +4 -2
- package/src/tools/command-shell.ts +132 -5
- package/src/tools/coordinator/agent.ts +9 -19
- package/src/tools/coordinator/index.ts +150 -75
- package/src/tools/coordinator/wait-with-idle-bound.ts +3 -1
- package/src/tools/defineTool.ts +4 -0
- package/src/tools/failure-facts.ts +24 -0
- package/src/tools/host-output.ts +136 -0
- package/src/tools/oem-code-pages.ts +22 -0
- package/src/tools/schedules/schedule-tool.ts +38 -5
- package/src/tools/schedules/types.ts +23 -3
- package/src/tools/task/list.ts +15 -7
- package/src/tools/task/present.ts +37 -7
- package/src/tools/task/update.ts +12 -5
- package/src/tools/text-window.ts +87 -0
- package/src/toolsets/manager.ts +58 -1
- package/src/types/acp/index.ts +150 -4
- package/src/types/agent/base.ts +3 -0
- package/src/types/agent/manager.ts +8 -23
- package/src/types/agent/scheduler.ts +10 -1
- package/src/types/agent/task.ts +4 -0
- package/src/types/connector/mcp.ts +7 -0
- package/src/types/errors/catalog.ts +4 -2
- package/src/types/harness/schema.ts +203 -0
- package/src/types/harness/session.ts +306 -0
- package/src/types/hitl/index.ts +17 -1
- package/src/types/job/index.ts +42 -0
- package/src/types/message/inbound-delivery.ts +63 -0
- package/src/types/message/index.ts +8 -1
- package/src/types/sandbox/index.ts +46 -0
- package/src/types/session/checkpoint.ts +4 -1
- package/src/types/session/events.ts +23 -1
- package/src/types/session/records.ts +114 -2
- package/src/types/session/step.ts +2 -0
- package/src/types/session/store.ts +23 -9
- package/src/types/session/tool-execution.ts +6 -0
- package/src/types/structured-output/index.ts +13 -2
- package/src/types/summary/ref.ts +3 -1
- package/src/types/tool/index.ts +39 -5
- package/src/types/tool/presentation.ts +121 -0
- package/src/utils/json-snapshot.ts +26 -9
- package/src/utils/structured-result-json.ts +10 -0
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod'
|
|
2
2
|
import { type EntityIdKind, isEntityId } from '../../utils/id.js'
|
|
3
|
+
import {
|
|
4
|
+
STRUCTURED_RESULT_MAX_BYTES,
|
|
5
|
+
parseStructuredResultJson,
|
|
6
|
+
} from '../../utils/structured-result-json.js'
|
|
7
|
+
import { HarnessBindingSchema, HarnessJournalTransitionSchema } from '../harness/schema.js'
|
|
3
8
|
import type { HITLDecisionRequest, HITLResumeDecision } from '../hitl/index.js'
|
|
4
9
|
import type {
|
|
5
10
|
CheckpointId,
|
|
@@ -11,7 +16,7 @@ import type {
|
|
|
11
16
|
TopicId,
|
|
12
17
|
TurnId,
|
|
13
18
|
} from '../ids/index.js'
|
|
14
|
-
import type
|
|
19
|
+
import { type Message, isRuntimeContextMessageSource } from '../message/index.js'
|
|
15
20
|
import type { ActorRef } from './actor.js'
|
|
16
21
|
import { CostInfoSchema, TokenUsageSchema, TurnBudgetBindingSchema } from './checkpoint.js'
|
|
17
22
|
import {
|
|
@@ -70,7 +75,15 @@ const MESSAGE_ROLES = new Set(['system', 'user', 'assistant', 'tool'])
|
|
|
70
75
|
* schema checks the discriminant and leaves the content to the message types.
|
|
71
76
|
*/
|
|
72
77
|
const messageBody = z.custom<Message>(
|
|
73
|
-
(value) =>
|
|
78
|
+
(value) => {
|
|
79
|
+
if (!isPlainObject(value) || !MESSAGE_ROLES.has(value.role as string)) return false
|
|
80
|
+
const source = value.source
|
|
81
|
+
return (
|
|
82
|
+
!isPlainObject(source) ||
|
|
83
|
+
source.type !== 'runtime-context' ||
|
|
84
|
+
isRuntimeContextMessageSource(source)
|
|
85
|
+
)
|
|
86
|
+
},
|
|
74
87
|
{ message: 'expected a message with a system, user, assistant or tool role' },
|
|
75
88
|
)
|
|
76
89
|
|
|
@@ -276,6 +289,16 @@ const spill = z
|
|
|
276
289
|
})
|
|
277
290
|
.strict()
|
|
278
291
|
|
|
292
|
+
const structuredResultSpill = spill
|
|
293
|
+
.extend({
|
|
294
|
+
path: text.regex(/^tool-results\/[a-f0-9]{64}\.txt$/),
|
|
295
|
+
manifest: text.regex(/^tool-results\/[a-f0-9]{64}\.txt\.manifest\.json$/),
|
|
296
|
+
bytes: positive.max(STRUCTURED_RESULT_MAX_BYTES),
|
|
297
|
+
})
|
|
298
|
+
.refine((ref) => ref.manifest === `${ref.path}.manifest.json`, {
|
|
299
|
+
message: 'a structured spill manifest must name its body',
|
|
300
|
+
})
|
|
301
|
+
|
|
279
302
|
const subSessionKind = z.enum(['agent_spawn', 'user_handoff', 'intervention'])
|
|
280
303
|
|
|
281
304
|
const actorRef = z.custom<ActorRef>(
|
|
@@ -319,6 +342,7 @@ function inTurn<T extends string, S extends z.ZodRawShape>(type: T, shape: S) {
|
|
|
319
342
|
// Session
|
|
320
343
|
|
|
321
344
|
export const SessionStartedRecordSchema = recordSchema('session_started', {
|
|
345
|
+
harness: HarnessBindingSchema.optional(),
|
|
322
346
|
projectId,
|
|
323
347
|
tenantId: tenantId.optional(),
|
|
324
348
|
topicId: topicId.optional(),
|
|
@@ -340,6 +364,7 @@ export const SessionStartedRecordSchema = recordSchema('session_started', {
|
|
|
340
364
|
})
|
|
341
365
|
|
|
342
366
|
export const SessionUpdatedRecordSchema = recordSchema('session_updated', {
|
|
367
|
+
harness: HarnessJournalTransitionSchema.optional(),
|
|
343
368
|
title: text.optional(),
|
|
344
369
|
titleSource: z.enum(['derived', 'named']).optional(),
|
|
345
370
|
archived: z.boolean().optional(),
|
|
@@ -382,6 +407,8 @@ export const TurnCompletedRecordSchema = inTurn('turn_completed', {
|
|
|
382
407
|
/** The settled answer, or a preview of it when `resultSpill` holds the whole text. */
|
|
383
408
|
result: text,
|
|
384
409
|
resultSpill: spill.optional(),
|
|
410
|
+
/** Accepted JSON stored separately; settlement.structuredOutput is then absent. */
|
|
411
|
+
structuredOutputSpill: structuredResultSpill.optional(),
|
|
385
412
|
stopReason: stopReason.optional(),
|
|
386
413
|
cancelCause: cancelCause.optional(),
|
|
387
414
|
budget: tokenBudgetSummary.optional(),
|
|
@@ -787,6 +814,83 @@ export const SessionRecordSchema = z
|
|
|
787
814
|
message: `${r.type} happens only inside a turn and must carry turnId`,
|
|
788
815
|
})
|
|
789
816
|
}
|
|
817
|
+
if (
|
|
818
|
+
r.type === 'tool_completed' &&
|
|
819
|
+
r.inputFailure !== undefined &&
|
|
820
|
+
(!['invalid_json', 'schema_validation', 'input_truncated'].includes(
|
|
821
|
+
r.inputFailure as string,
|
|
822
|
+
) ||
|
|
823
|
+
r.isError !== true)
|
|
824
|
+
) {
|
|
825
|
+
context.addIssue({
|
|
826
|
+
code: z.ZodIssueCode.custom,
|
|
827
|
+
path: ['inputFailure'],
|
|
828
|
+
message: 'inputFailure must classify a failed tool admission',
|
|
829
|
+
})
|
|
830
|
+
}
|
|
831
|
+
if (
|
|
832
|
+
r.type === 'tool_completed' &&
|
|
833
|
+
r.skipped !== undefined &&
|
|
834
|
+
(r.skipped !== true || r.isError !== false || r.inputFailure !== undefined)
|
|
835
|
+
) {
|
|
836
|
+
context.addIssue({
|
|
837
|
+
code: z.ZodIssueCode.custom,
|
|
838
|
+
path: ['skipped'],
|
|
839
|
+
message: 'skipped must classify a non-error pre-tool hook skip without an input failure',
|
|
840
|
+
})
|
|
841
|
+
}
|
|
842
|
+
if (
|
|
843
|
+
r.type === 'tool_completed' &&
|
|
844
|
+
(r.structuredResultJson !== undefined || r.structuredResultSpill !== undefined)
|
|
845
|
+
) {
|
|
846
|
+
let validJson = false
|
|
847
|
+
try {
|
|
848
|
+
if (r.structuredResultSpill !== undefined) {
|
|
849
|
+
validJson =
|
|
850
|
+
r.structuredResultJson === undefined &&
|
|
851
|
+
structuredResultSpill.safeParse(r.structuredResultSpill).success
|
|
852
|
+
} else {
|
|
853
|
+
parseStructuredResultJson(r.structuredResultJson)
|
|
854
|
+
validJson = true
|
|
855
|
+
}
|
|
856
|
+
} catch {
|
|
857
|
+
// Retained evidence is never repaired or downgraded to a preview.
|
|
858
|
+
}
|
|
859
|
+
if (
|
|
860
|
+
!validJson ||
|
|
861
|
+
r.toolName !== 'structured_output' ||
|
|
862
|
+
r.isError !== false ||
|
|
863
|
+
r.skipped !== undefined ||
|
|
864
|
+
r.inputFailure !== undefined ||
|
|
865
|
+
r.via !== undefined
|
|
866
|
+
) {
|
|
867
|
+
context.addIssue({
|
|
868
|
+
code: z.ZodIssueCode.custom,
|
|
869
|
+
path: [
|
|
870
|
+
r.structuredResultSpill !== undefined
|
|
871
|
+
? 'structuredResultSpill'
|
|
872
|
+
: 'structuredResultJson',
|
|
873
|
+
],
|
|
874
|
+
message:
|
|
875
|
+
'structured result evidence must hold JSON or a spill from a successful direct structured_output execution, never both',
|
|
876
|
+
})
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
if (r.type === 'turn_completed' && r.structuredOutputSpill !== undefined) {
|
|
880
|
+
const settlement = r.settlement as Record<string, unknown>
|
|
881
|
+
if (
|
|
882
|
+
settlement.status !== 'completed' ||
|
|
883
|
+
settlement.resultSource !== 'structured_output' ||
|
|
884
|
+
settlement.structuredOutput !== undefined
|
|
885
|
+
) {
|
|
886
|
+
context.addIssue({
|
|
887
|
+
code: z.ZodIssueCode.custom,
|
|
888
|
+
path: ['structuredOutputSpill'],
|
|
889
|
+
message:
|
|
890
|
+
'a structured output spill requires a completed structured_output settlement without inline structuredOutput',
|
|
891
|
+
})
|
|
892
|
+
}
|
|
893
|
+
}
|
|
790
894
|
if (r.type === 'message') {
|
|
791
895
|
const content = r.content as { role: unknown }
|
|
792
896
|
if (r.role !== content.role) {
|
|
@@ -851,6 +955,14 @@ export type SessionEventRecord<T extends PersistedSessionEventType = PersistedSe
|
|
|
851
955
|
T extends PersistedSessionEventType
|
|
852
956
|
? Omit<EventOf<T>, 'sessionId' | 'turnId' | 'lineage' | 'v' | 'seq' | 'generation'> &
|
|
853
957
|
RecordEnvelope &
|
|
958
|
+
(T extends 'tool_completed'
|
|
959
|
+
? { readonly structuredResultSpill?: z.infer<typeof structuredResultSpill> }
|
|
960
|
+
: T extends 'turn_completed'
|
|
961
|
+
? {
|
|
962
|
+
readonly resultSpill?: z.infer<typeof spill>
|
|
963
|
+
readonly structuredOutputSpill?: z.infer<typeof structuredResultSpill>
|
|
964
|
+
}
|
|
965
|
+
: unknown) &
|
|
854
966
|
(T extends TurnBoundSessionEventType ? { readonly turnId: TurnId } : unknown)
|
|
855
967
|
: never
|
|
856
968
|
|
|
@@ -159,6 +159,8 @@ export interface StepToolResult {
|
|
|
159
159
|
/** Text form, after the model-visible output budget was applied. */
|
|
160
160
|
output: string
|
|
161
161
|
isError: boolean
|
|
162
|
+
/** The pre-tool hook skipped this call; its receipt is not an executed answer. */
|
|
163
|
+
skipped?: true
|
|
162
164
|
durationMs: number
|
|
163
165
|
}
|
|
164
166
|
|
|
@@ -16,7 +16,7 @@ import type {
|
|
|
16
16
|
SubSessionKind,
|
|
17
17
|
} from '../../types/session/sub-session.js'
|
|
18
18
|
import type { SessionSummaryRef } from '../../types/summary/ref.js'
|
|
19
|
-
import type { SessionId, TenantId } from '../ids/index.js'
|
|
19
|
+
import type { SessionId, TenantId, TurnId } from '../ids/index.js'
|
|
20
20
|
import type { ProjectId, SubSessionId, SummaryId, TopicId } from '../session/ids.js'
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -145,6 +145,10 @@ export interface SessionView {
|
|
|
145
145
|
* callers never get a fallback and must branch on missing explicitly.
|
|
146
146
|
*/
|
|
147
147
|
export interface SessionStore {
|
|
148
|
+
/** Explicit opt-in to immutable turn-keyed summaries. Omission does not support child continuation. */
|
|
149
|
+
readonly supportsInvocationSummaries?: boolean
|
|
150
|
+
/** Opt in only when updateSession and recordSummary enforce owner-version CAS. */
|
|
151
|
+
readonly supportsOwnerVersionCas?: boolean
|
|
148
152
|
// Project CRUD ------------------------------------------------------------
|
|
149
153
|
|
|
150
154
|
createProject(params: CreateProjectParams, tenantId: TenantId): Promise<Project>
|
|
@@ -241,7 +245,8 @@ export interface SessionStore {
|
|
|
241
245
|
* into.
|
|
242
246
|
*
|
|
243
247
|
* **In-process only, stated rather than implied.** `DiskSessionStore`
|
|
244
|
-
* writes
|
|
248
|
+
* serializes session writes across instances using the same root within a
|
|
249
|
+
* process. Its read-compare-write is not a cross-process critical section,
|
|
245
250
|
* so two PROCESSES can still both pass the check. Closing that needs a
|
|
246
251
|
* lease with an expiry — not a PID registry, because a Session is durable
|
|
247
252
|
* and written from hosts where a PID is not a checkable fact. The same
|
|
@@ -359,21 +364,30 @@ export interface SessionStore {
|
|
|
359
364
|
* writes commit as one logical unit; mid-crash recovery is replay via
|
|
360
365
|
* `SessionSummaryMaterializer.recover()`.
|
|
361
366
|
*
|
|
362
|
-
*
|
|
363
|
-
*
|
|
364
|
-
*
|
|
367
|
+
* Summaries are immutable per `(sessionRef, turnRef)`. An absent `turnRef`
|
|
368
|
+
* preserves the original single conversation-summary contract. A supplied
|
|
369
|
+
* `turnRef` seals one invocation without replacing any previous summary.
|
|
370
|
+
* Rejects a different summary at an already sealed key.
|
|
371
|
+
* With expectedOwnerVersion, refuse before persisting or flipping status if
|
|
372
|
+
* the current session owner changed. Omission preserves the legacy behavior.
|
|
365
373
|
*/
|
|
366
374
|
recordSummary(
|
|
367
375
|
summary: SessionSummaryRef & { materializedBy: 'kernel' },
|
|
368
376
|
tenantId: TenantId,
|
|
377
|
+
expectedOwnerVersion?: number,
|
|
369
378
|
): Promise<void>
|
|
370
379
|
|
|
371
380
|
/**
|
|
372
|
-
* Loads the
|
|
373
|
-
*
|
|
374
|
-
*
|
|
381
|
+
* Loads the original conversation summary, or the exact invocation summary
|
|
382
|
+
* when `turnId` is supplied. Returns `null` when that key is unsealed; it
|
|
383
|
+
* never substitutes the original or newest summary for a missing invocation.
|
|
384
|
+
* Cross-tenant reads reject with `TenantIsolationError` (Convention #17).
|
|
375
385
|
*/
|
|
376
|
-
getSummary(
|
|
386
|
+
getSummary(
|
|
387
|
+
sessionId: SessionId,
|
|
388
|
+
tenantId: TenantId,
|
|
389
|
+
turnId?: TurnId,
|
|
390
|
+
): Promise<SessionSummaryRef | null>
|
|
377
391
|
}
|
|
378
392
|
|
|
379
393
|
/**
|
|
@@ -14,6 +14,12 @@ export interface CompletedToolRecord {
|
|
|
14
14
|
readonly toolName: string
|
|
15
15
|
readonly result: string
|
|
16
16
|
readonly isError: boolean
|
|
17
|
+
/** Trusted admission classification retained with the completion, absent in legacy records. */
|
|
18
|
+
readonly inputFailure?: 'invalid_json' | 'schema_validation' | 'input_truncated'
|
|
19
|
+
/** Trusted pre-tool hook skip, absent in legacy records; the tool produced no output. */
|
|
20
|
+
readonly skipped?: true
|
|
21
|
+
/** Opt-in screened, post-hook JSON from a successful structured_output; independent of the bounded receipt. */
|
|
22
|
+
readonly structuredResultJson?: string
|
|
17
23
|
}
|
|
18
24
|
|
|
19
25
|
/** The latest recorded execution boundary of a tool call, not its inferred external effect. */
|
|
@@ -17,8 +17,19 @@ export interface StructuredOutputConfig<TSchema extends z.ZodType = z.ZodType> {
|
|
|
17
17
|
mode?: 'tool' | 'native'
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
20
|
+
* Tool mode only. Default `receipt` settles from the bounded tool message.
|
|
21
|
+
* `durable` also records the screened, post-hook JSON before preview capping,
|
|
22
|
+
* so a truncated preview does not destroy the candidate. The session log's
|
|
23
|
+
* record size limit still applies. This is execution evidence, not acceptance;
|
|
24
|
+
* recovered batches retain the existing fresh-inference settlement policy.
|
|
25
|
+
*/
|
|
26
|
+
toolResultRetention?: 'receipt' | 'durable'
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Correction opportunities after missing output or model-argument validation
|
|
30
|
+
* failure. Default 2; zero stops after the first invalid response. Tool-mode
|
|
31
|
+
* prose and invalid output calls share a checkpointed counter, once per response.
|
|
32
|
+
* Host review rejections use the separate maxReviews allowance.
|
|
22
33
|
*
|
|
23
34
|
* Bounded so a model that cannot satisfy the schema fails loudly rather
|
|
24
35
|
* than iterating against `maxIterations`.
|
package/src/types/summary/ref.ts
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* `session/summary/errors.ts` — they are NOT pure shapes.
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
|
-
import type { SessionId, TenantId } from '../ids/index.js'
|
|
23
|
+
import type { SessionId, TenantId, TurnId } from '../ids/index.js'
|
|
24
24
|
import type { SummaryId } from '../session/ids.js'
|
|
25
25
|
import type { DeliverableRef } from './deliverable.js'
|
|
26
26
|
|
|
@@ -53,6 +53,8 @@ export interface SessionSummaryKeyDecision {
|
|
|
53
53
|
export interface SessionSummaryRef {
|
|
54
54
|
readonly id: SummaryId
|
|
55
55
|
readonly sessionRef: SessionId
|
|
56
|
+
/** Immutable completion of one invocation; omission is the legacy conversation summary. */
|
|
57
|
+
readonly turnRef?: TurnId
|
|
56
58
|
readonly tenantId: TenantId
|
|
57
59
|
readonly outcome: SessionSummaryOutcome
|
|
58
60
|
readonly deliverables: readonly DeliverableRef[]
|
package/src/types/tool/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ import type { CodeNavigationProvider } from '../code-navigation/index.js'
|
|
|
7
7
|
import type { ToolResultGuardrailSpec } from '../guardrail/index.js'
|
|
8
8
|
import type { SessionId, TurnId } from '../ids/index.js'
|
|
9
9
|
import type { InvocationState } from '../invocation/index.js'
|
|
10
|
+
import type { BackgroundJobOutputWaitOptions, BackgroundJobOutputWaitResult } from '../job/index.js'
|
|
10
11
|
import type { PermissionMode } from '../permission/index.js'
|
|
11
12
|
import type { Sandbox } from '../sandbox/index.js'
|
|
12
13
|
import type { ToolPresentation } from './presentation.js'
|
|
@@ -117,7 +118,13 @@ export interface BackgroundJobRegistryRef {
|
|
|
117
118
|
id: string
|
|
118
119
|
status: string
|
|
119
120
|
}
|
|
120
|
-
get(id: string): { id: string; status: string; exitCode?: number }
|
|
121
|
+
get(id: string): { id: string; status: string; exitCode?: number; error?: string }
|
|
122
|
+
/**
|
|
123
|
+
* Resolves once the process exists or failed to start (`error` says why).
|
|
124
|
+
* Optional: a host that cannot tell may omit it, and `bash` then replies
|
|
125
|
+
* without waiting.
|
|
126
|
+
*/
|
|
127
|
+
awaitStarted?(id: string): Promise<{ readonly error?: string }>
|
|
121
128
|
read(
|
|
122
129
|
id: string,
|
|
123
130
|
opts?: { fromOffset?: number },
|
|
@@ -127,6 +134,7 @@ export interface BackgroundJobRegistryRef {
|
|
|
127
134
|
droppedBytes: number
|
|
128
135
|
status: string
|
|
129
136
|
exitCode?: number
|
|
137
|
+
error?: string
|
|
130
138
|
}
|
|
131
139
|
kill(id: string): Promise<{ id: string; status: string }>
|
|
132
140
|
list(): readonly { id: string; command: string; status: string }[]
|
|
@@ -144,12 +152,19 @@ export interface BackgroundJobRegistryRef {
|
|
|
144
152
|
id: string
|
|
145
153
|
status: string
|
|
146
154
|
exitCode?: number
|
|
155
|
+
error?: string
|
|
147
156
|
}>
|
|
157
|
+
/** Observe a bounded literal output condition. Does not express exit-wait intent. */
|
|
158
|
+
waitForOutput?(
|
|
159
|
+
id: string,
|
|
160
|
+
opts: BackgroundJobOutputWaitOptions,
|
|
161
|
+
): Promise<BackgroundJobOutputWaitResult>
|
|
148
162
|
/**
|
|
149
163
|
* Say that the model is waiting on this job, so the turn stays open for it
|
|
150
164
|
* when the model stops calling tools.
|
|
151
165
|
*
|
|
152
|
-
* Called by
|
|
166
|
+
* Called only by the exit mode of `wait_for_job`. Output readiness does not
|
|
167
|
+
* mark a job here. The kernel holds a finishing
|
|
153
168
|
* run open — bounded, and for no model tokens — only for a job marked
|
|
154
169
|
* here; a job nobody marked never delays a turn, which is what a dev server
|
|
155
170
|
* or a watcher needs. Optional for the reason `waitForExit` is: a host
|
|
@@ -758,6 +773,14 @@ export interface ToolResult {
|
|
|
758
773
|
* the child's turn fails with {@link ToolHandoff.reason} instead.
|
|
759
774
|
*/
|
|
760
775
|
handoff?: ToolHandoff
|
|
776
|
+
/**
|
|
777
|
+
* What this call did, as typed fields for the PERSON's view: the exit code
|
|
778
|
+
* and the two streams of a command, the path and size of a read, whether a
|
|
779
|
+
* write created the file. `output` stays the model's text and is not
|
|
780
|
+
* derived from these; a host that headlines a row reads these and never
|
|
781
|
+
* the prose. A host-side override of the output (a redaction) drops them.
|
|
782
|
+
*/
|
|
783
|
+
facts?: import('./presentation.js').ToolFacts
|
|
761
784
|
}
|
|
762
785
|
|
|
763
786
|
/**
|
|
@@ -776,8 +799,10 @@ export interface ToolHandoff {
|
|
|
776
799
|
* `bash` reads it as bash does. `sh` reads it for a shell that may be bash or
|
|
777
800
|
* a POSIX shell such as `dash`: every construct the two read differently
|
|
778
801
|
* makes the line opaque, so a line that is not opaque means the same in both.
|
|
802
|
+
* `cmd` identifies native Windows CMD; its commands are conservatively opaque
|
|
803
|
+
* until a matching parser is available. It is never read as POSIX shell text.
|
|
779
804
|
*/
|
|
780
|
-
export type ShellDialect = 'bash' | 'sh'
|
|
805
|
+
export type ShellDialect = 'bash' | 'sh' | 'cmd'
|
|
781
806
|
|
|
782
807
|
export interface ToolDefinition<TInput = unknown> extends ToolPresentation<TInput> {
|
|
783
808
|
name: string
|
|
@@ -901,7 +926,8 @@ export interface ToolDefinition<TInput = unknown> extends ToolPresentation<TInpu
|
|
|
901
926
|
* may be bash or a POSIX shell, and every construct the two read
|
|
902
927
|
* differently makes the line opaque, so no allow rule approves it. The
|
|
903
928
|
* shipped `bash` tool answers `bash` when it will spawn bash on the host
|
|
904
|
-
* and `sh` inside a sandbox, whose guest may not have bash.
|
|
929
|
+
* and `sh` inside a sandbox, whose guest may not have bash. Native Windows
|
|
930
|
+
* CMD reports `cmd`, whose command-specific permission reading is opaque.
|
|
905
931
|
*/
|
|
906
932
|
commandDialect?: (context: { readonly sandboxed: boolean }) => ShellDialect
|
|
907
933
|
/**
|
|
@@ -1167,12 +1193,20 @@ export interface PreparedToolExecution {
|
|
|
1167
1193
|
/** Result of decoding a tool input at the execution boundary. */
|
|
1168
1194
|
export type ToolPreparationResult =
|
|
1169
1195
|
| { readonly success: true; readonly prepared: PreparedToolExecution }
|
|
1170
|
-
| {
|
|
1196
|
+
| {
|
|
1197
|
+
readonly success: false
|
|
1198
|
+
readonly result: ToolExecutionResult
|
|
1199
|
+
/** Zod rejected the input; other preparation failures leave this absent. */
|
|
1200
|
+
readonly inputFailure?: 'schema_validation'
|
|
1201
|
+
}
|
|
1171
1202
|
|
|
1172
1203
|
export * from './repair.js'
|
|
1173
1204
|
|
|
1174
1205
|
export type {
|
|
1175
1206
|
ToolCallView,
|
|
1207
|
+
ToolFacts,
|
|
1208
|
+
ToolFailureReason,
|
|
1176
1209
|
ToolPresentation,
|
|
1177
1210
|
ToolResultView,
|
|
1211
|
+
ToolTextWindow,
|
|
1178
1212
|
} from './presentation.js'
|
|
@@ -33,6 +33,20 @@ export type ToolCallView =
|
|
|
33
33
|
* what did not happen ("Cancelled — nothing was saved").
|
|
34
34
|
*/
|
|
35
35
|
readonly outcome?: 'cancelled'
|
|
36
|
+
/**
|
|
37
|
+
* For a result: a person answered No to this call at review, so it
|
|
38
|
+
* never ran. `label` names what it was about (the file, the command)
|
|
39
|
+
* and `note` is what the person said, in their own words and capped
|
|
40
|
+
* at 4,000 characters. Set only from the review answer, never read
|
|
41
|
+
* out of text; a refusal by policy does not carry it.
|
|
42
|
+
*/
|
|
43
|
+
readonly declined?: { readonly note?: string }
|
|
44
|
+
/**
|
|
45
|
+
* For a call: what the call is about, as fields. A host headlines the
|
|
46
|
+
* row ("Read a.ts", "Searched for export") from these and never from
|
|
47
|
+
* the text of `label`.
|
|
48
|
+
*/
|
|
49
|
+
readonly facts?: ToolFacts
|
|
36
50
|
}
|
|
37
51
|
/**
|
|
38
52
|
* A change to a document. `path` is optional because not every diff is
|
|
@@ -50,6 +64,113 @@ export type ToolCallView =
|
|
|
50
64
|
/** A command and what it printed. */
|
|
51
65
|
| { readonly kind: 'terminal'; readonly command?: string; readonly output: string }
|
|
52
66
|
|
|
67
|
+
/**
|
|
68
|
+
* A bounded window onto a block of text: the first lines, the last lines, and
|
|
69
|
+
* how much lay between. Small enough to travel in an event, and enough for a
|
|
70
|
+
* host to show "head, tail, Show more" without holding the whole output.
|
|
71
|
+
*/
|
|
72
|
+
export interface ToolTextWindow {
|
|
73
|
+
/** The first lines, or the whole text when it fit. */
|
|
74
|
+
readonly head: string
|
|
75
|
+
/** The last lines, present only when lines were left out between `head` and it. */
|
|
76
|
+
readonly tail?: string
|
|
77
|
+
/** Lines left out between `head` and `tail`. */
|
|
78
|
+
readonly omittedLines?: number
|
|
79
|
+
/** Lines in the whole text. */
|
|
80
|
+
readonly totalLines: number
|
|
81
|
+
/** Bytes in the whole text. */
|
|
82
|
+
readonly totalBytes: number
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** Why a call did not do what it was asked, as a kind a host can phrase for a person. */
|
|
86
|
+
export type ToolFailureReason =
|
|
87
|
+
| 'not_found'
|
|
88
|
+
| 'permission_denied'
|
|
89
|
+
| 'not_a_file'
|
|
90
|
+
| 'already_exists'
|
|
91
|
+
| 'blocked'
|
|
92
|
+
| 'needs_administrator'
|
|
93
|
+
| 'unknown_tool'
|
|
94
|
+
| 'timed_out'
|
|
95
|
+
| 'invalid_input'
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* What a call was about and what came of it, as typed fields.
|
|
99
|
+
*
|
|
100
|
+
* `output` is written for the model and its wording is the model's interface.
|
|
101
|
+
* A person is shown a different thing, and reading their screen out of the
|
|
102
|
+
* model's prose is how "STDOUT:" and "1 replacement(s)" reached it. These are
|
|
103
|
+
* the same facts the tool already knew, stated once, so a host never has to
|
|
104
|
+
* read text to learn an exit code, a file name or whether a file was created.
|
|
105
|
+
*
|
|
106
|
+
* Every field but `kind` is optional: the same shape describes a call that is
|
|
107
|
+
* still running (what it was asked) and one that finished (what it did).
|
|
108
|
+
* Paths are as the tool resolved them; a host shortens them for display.
|
|
109
|
+
*/
|
|
110
|
+
export type ToolFacts =
|
|
111
|
+
| {
|
|
112
|
+
readonly kind: 'command'
|
|
113
|
+
/** The command line, on the call. */
|
|
114
|
+
readonly command?: string
|
|
115
|
+
readonly exitCode?: number
|
|
116
|
+
readonly timedOut?: boolean
|
|
117
|
+
/** The signal that ended it, when one did. */
|
|
118
|
+
readonly signal?: string
|
|
119
|
+
readonly stdout?: ToolTextWindow
|
|
120
|
+
readonly stderr?: ToolTextWindow
|
|
121
|
+
/** The output was not text; nothing of it is in `stdout`/`stderr`. */
|
|
122
|
+
readonly binary?: { readonly bytes: number }
|
|
123
|
+
/** The command was handed to a background job instead of being waited on. */
|
|
124
|
+
readonly background?: true
|
|
125
|
+
}
|
|
126
|
+
| {
|
|
127
|
+
readonly kind: 'read'
|
|
128
|
+
readonly path: string
|
|
129
|
+
/** The file is not text; the person is told so instead of being shown its bytes. */
|
|
130
|
+
readonly binary?: boolean
|
|
131
|
+
readonly bytes?: number
|
|
132
|
+
readonly totalLines?: number
|
|
133
|
+
readonly returnedLines?: number
|
|
134
|
+
/** Only a window of the file was returned. */
|
|
135
|
+
readonly partial?: boolean
|
|
136
|
+
}
|
|
137
|
+
| {
|
|
138
|
+
readonly kind: 'search'
|
|
139
|
+
readonly pattern: string
|
|
140
|
+
readonly path?: string
|
|
141
|
+
readonly matches?: number
|
|
142
|
+
readonly filesMatched?: number
|
|
143
|
+
readonly filesSearched?: number
|
|
144
|
+
readonly truncated?: boolean
|
|
145
|
+
}
|
|
146
|
+
| {
|
|
147
|
+
readonly kind: 'list'
|
|
148
|
+
readonly pattern: string
|
|
149
|
+
readonly path?: string
|
|
150
|
+
readonly count?: number
|
|
151
|
+
readonly truncated?: boolean
|
|
152
|
+
}
|
|
153
|
+
| {
|
|
154
|
+
readonly kind: 'edit'
|
|
155
|
+
readonly path?: string
|
|
156
|
+
readonly replacements?: number
|
|
157
|
+
}
|
|
158
|
+
| {
|
|
159
|
+
readonly kind: 'write'
|
|
160
|
+
readonly path: string
|
|
161
|
+
/** `wrote` when the file's earlier state could not be established. */
|
|
162
|
+
readonly operation: 'created' | 'updated' | 'unchanged' | 'wrote'
|
|
163
|
+
readonly bytes?: number
|
|
164
|
+
readonly added?: number
|
|
165
|
+
readonly removed?: number
|
|
166
|
+
}
|
|
167
|
+
| {
|
|
168
|
+
readonly kind: 'failure'
|
|
169
|
+
readonly reason: ToolFailureReason
|
|
170
|
+
/** What it was about: a path, or the tool's name for `unknown_tool`. */
|
|
171
|
+
readonly subject?: string
|
|
172
|
+
}
|
|
173
|
+
|
|
53
174
|
/** The same shapes, for what a call produced. */
|
|
54
175
|
export type ToolResultView = ToolCallView
|
|
55
176
|
|
|
@@ -1,5 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Clone JSON data without invoking getters or silently dropping values.
|
|
3
|
+
* Raw schema input may preserve its plain-object prototypes; prepared outputs
|
|
4
|
+
* keep the default canonical shape used by durable JSON round-trips.
|
|
5
|
+
*/
|
|
6
|
+
export function cloneJsonValue(
|
|
7
|
+
value: unknown,
|
|
8
|
+
freeze: boolean,
|
|
9
|
+
path = '$',
|
|
10
|
+
preserveObjectPrototype = false,
|
|
11
|
+
): unknown {
|
|
3
12
|
const active = new WeakSet<object>()
|
|
4
13
|
const copies = new WeakMap<object, object>()
|
|
5
14
|
|
|
@@ -23,8 +32,16 @@ export function cloneJsonValue(value: unknown, freeze: boolean, path = '$'): unk
|
|
|
23
32
|
active.add(candidate)
|
|
24
33
|
try {
|
|
25
34
|
if (Array.isArray(candidate)) {
|
|
35
|
+
if (preserveObjectPrototype && Object.getPrototypeOf(candidate) !== Array.prototype) {
|
|
36
|
+
throw new TypeError(`${at} must be an ordinary array for raw preparation`)
|
|
37
|
+
}
|
|
26
38
|
const extra = Reflect.ownKeys(candidate).filter(
|
|
27
|
-
(key) =>
|
|
39
|
+
(key) =>
|
|
40
|
+
key !== 'length' &&
|
|
41
|
+
(typeof key !== 'string' ||
|
|
42
|
+
!/^(0|[1-9]\d*)$/.test(key) ||
|
|
43
|
+
(preserveObjectPrototype &&
|
|
44
|
+
(Number(key) >= candidate.length || Number(key) > 0xffff_fffe))),
|
|
28
45
|
)
|
|
29
46
|
if (extra.length > 0) throw new TypeError(`${at} has non-JSON array properties`)
|
|
30
47
|
const result: unknown[] = new Array(candidate.length)
|
|
@@ -45,12 +62,12 @@ export function cloneJsonValue(value: unknown, freeze: boolean, path = '$'): unk
|
|
|
45
62
|
if (prototype !== Object.prototype && prototype !== null) {
|
|
46
63
|
throw new TypeError(`${at} must be a plain JSON object`)
|
|
47
64
|
}
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
// equal to a fresh preparation of the same
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
65
|
+
// Raw schema input can depend on its prototype. Prepared output instead
|
|
66
|
+
// canonicalizes both admitted shapes so a disk checkpoint round-trip
|
|
67
|
+
// compares equal to a fresh preparation of the same JSON value. Explicit
|
|
68
|
+
// data properties keep a literal "__proto__" key from changing either.
|
|
69
|
+
const result: Record<string, unknown> =
|
|
70
|
+
preserveObjectPrototype && prototype === null ? Object.create(null) : {}
|
|
54
71
|
copies.set(candidate, result)
|
|
55
72
|
for (const key of Reflect.ownKeys(candidate)) {
|
|
56
73
|
if (typeof key !== 'string') throw new TypeError(`${at} has a symbol property`)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { cloneJsonValue } from './json-snapshot.js'
|
|
2
|
+
|
|
3
|
+
/** Maximum UTF-8 JSON body retained by opt-in structured result spills. */
|
|
4
|
+
export const STRUCTURED_RESULT_MAX_BYTES = 16 * 1024 * 1024
|
|
5
|
+
|
|
6
|
+
/** Decode retained result evidence without coercing non-JSON values or rerunning a schema. */
|
|
7
|
+
export function parseStructuredResultJson(text: unknown): unknown {
|
|
8
|
+
if (typeof text !== 'string') throw new TypeError('Structured result evidence must be JSON text')
|
|
9
|
+
return cloneJsonValue(JSON.parse(text), false)
|
|
10
|
+
}
|