@namzu/sdk 48.3.1 → 50.0.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 +542 -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/registry.d.ts +2 -0
- package/dist/config/registry.d.ts.map +1 -1
- package/dist/config/registry.js +23 -3
- package/dist/config/registry.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/connector/mcp/discovery.d.ts +9 -5
- package/dist/connector/mcp/discovery.d.ts.map +1 -1
- package/dist/connector/mcp/discovery.js +16 -8
- package/dist/connector/mcp/discovery.js.map +1 -1
- package/dist/connector/mcp/mcp-toolset.d.ts +3 -0
- package/dist/connector/mcp/mcp-toolset.d.ts.map +1 -1
- package/dist/connector/mcp/mcp-toolset.js +20 -2
- package/dist/connector/mcp/mcp-toolset.js.map +1 -1
- package/dist/connector/mcp/reconnect.d.ts +2 -0
- package/dist/connector/mcp/reconnect.d.ts.map +1 -1
- package/dist/connector/mcp/reconnect.js +36 -5
- package/dist/connector/mcp/reconnect.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/lifecycle.d.ts +14 -10
- package/dist/plugin/lifecycle.d.ts.map +1 -1
- package/dist/plugin/lifecycle.js +178 -41
- package/dist/plugin/lifecycle.js.map +1 -1
- 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/prompt/resident-learning.js +2 -2
- package/dist/prompt/resident-learning.js.map +1 -1
- package/dist/prompt/resident-step.d.ts +2 -2
- package/dist/prompt/resident-step.js +4 -4
- package/dist/prompt/resident-step.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/public-runtime.d.ts +43 -15
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +37 -9
- 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/registry/tool/screen.d.ts.map +1 -1
- package/dist/registry/tool/screen.js +33 -2
- package/dist/registry/tool/screen.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 +377 -39
- 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 +9 -0
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +41 -5
- 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 +176 -75
- 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 +63 -6
- package/dist/runtime/query/iteration/outstanding-work.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +8 -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 +106 -17
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/iteration/step-shaping.d.ts +2 -0
- package/dist/runtime/query/iteration/step-shaping.d.ts.map +1 -1
- package/dist/runtime/query/iteration/step-shaping.js +5 -1
- package/dist/runtime/query/iteration/step-shaping.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/index.d.ts +1 -0
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +1 -0
- package/dist/store/index.js.map +1 -1
- package/dist/store/memory/disk.d.ts +7 -2
- package/dist/store/memory/disk.d.ts.map +1 -1
- package/dist/store/memory/disk.js +58 -5
- package/dist/store/memory/disk.js.map +1 -1
- package/dist/store/memory/index.d.ts +9 -0
- package/dist/store/memory/index.d.ts.map +1 -1
- package/dist/store/memory/index.js +43 -5
- package/dist/store/memory/index.js.map +1 -1
- package/dist/store/memory/markdown.d.ts +7 -2
- package/dist/store/memory/markdown.d.ts.map +1 -1
- package/dist/store/memory/markdown.js +33 -0
- package/dist/store/memory/markdown.js.map +1 -1
- package/dist/store/memory/memory.d.ts +7 -2
- package/dist/store/memory/memory.d.ts.map +1 -1
- package/dist/store/memory/memory.js +34 -0
- package/dist/store/memory/memory.js.map +1 -1
- package/dist/store/memory/revision.d.ts +16 -0
- package/dist/store/memory/revision.d.ts.map +1 -0
- package/dist/store/memory/revision.js +144 -0
- package/dist/store/memory/revision.js.map +1 -0
- 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 +34 -0
- 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 +8 -4
- package/dist/tools/builtins/wait-for-job-bounds.d.ts.map +1 -1
- package/dist/tools/builtins/wait-for-job-bounds.js +43 -8
- package/dist/tools/builtins/wait-for-job-bounds.js.map +1 -1
- package/dist/tools/builtins/wait-for-job.d.ts +3 -0
- package/dist/tools/builtins/wait-for-job.d.ts.map +1 -1
- package/dist/tools/builtins/wait-for-job.js +127 -15
- 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/memory/delete.d.ts.map +1 -1
- package/dist/tools/memory/delete.js +38 -3
- package/dist/tools/memory/delete.js.map +1 -1
- package/dist/tools/memory/read.d.ts.map +1 -1
- package/dist/tools/memory/read.js +38 -2
- package/dist/tools/memory/read.js.map +1 -1
- package/dist/tools/memory/search.d.ts.map +1 -1
- package/dist/tools/memory/search.js +38 -7
- package/dist/tools/memory/search.js.map +1 -1
- package/dist/tools/memory/update.d.ts.map +1 -1
- package/dist/tools/memory/update.js +30 -3
- package/dist/tools/memory/update.js.map +1 -1
- 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 +24 -0
- package/dist/toolsets/manager.d.ts.map +1 -1
- package/dist/toolsets/manager.js +105 -2
- package/dist/toolsets/manager.js.map +1 -1
- package/dist/turn/memory-recall.d.ts +2 -0
- package/dist/turn/memory-recall.d.ts.map +1 -1
- package/dist/turn/memory-recall.js +3 -1
- package/dist/turn/memory-recall.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/memory/index.d.ts +29 -0
- package/dist/types/memory/index.d.ts.map +1 -1
- package/dist/types/memory/index.js +6 -0
- package/dist/types/memory/index.js.map +1 -1
- 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 +18 -8
- package/dist/types/plugin/index.d.ts.map +1 -1
- package/dist/types/plugin/index.js +5 -2
- package/dist/types/plugin/index.js.map +1 -1
- 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/config/registry.ts +24 -3
- package/src/connector/mcp/adapter.ts +16 -4
- package/src/connector/mcp/client.ts +6 -2
- package/src/connector/mcp/discovery.ts +29 -8
- package/src/connector/mcp/mcp-toolset.ts +25 -4
- package/src/connector/mcp/reconnect.ts +34 -4
- 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/lifecycle.ts +217 -46
- package/src/plugin/shell-hook.ts +8 -2
- package/src/process/kill-tree.ts +10 -1
- package/src/prompt/resident-learning.ts +2 -2
- package/src/prompt/resident-step.ts +4 -4
- package/src/provider/errors.ts +135 -2
- package/src/public-runtime.ts +119 -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/registry/tool/screen.ts +34 -2
- 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 +423 -50
- 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 +48 -5
- package/src/runtime/query/iteration/index.ts +253 -114
- package/src/runtime/query/iteration/outstanding-work.ts +57 -7
- package/src/runtime/query/iteration/phases/context.ts +8 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +124 -22
- package/src/runtime/query/iteration/step-shaping.ts +9 -1
- 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/index.ts +1 -0
- package/src/store/memory/disk.ts +82 -7
- package/src/store/memory/index.ts +66 -7
- package/src/store/memory/markdown.ts +54 -2
- package/src/store/memory/memory.ts +52 -2
- package/src/store/memory/revision.ts +158 -0
- 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 +42 -0
- 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 +45 -7
- package/src/tools/builtins/wait-for-job.ts +159 -36
- 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/memory/delete.ts +33 -3
- package/src/tools/memory/read.ts +35 -2
- package/src/tools/memory/search.ts +38 -7
- package/src/tools/memory/update.ts +28 -3
- 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 +132 -2
- package/src/turn/memory-recall.ts +5 -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/memory/index.ts +43 -0
- package/src/types/message/inbound-delivery.ts +63 -0
- package/src/types/message/index.ts +8 -1
- package/src/types/plugin/index.ts +11 -6
- 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
|
@@ -0,0 +1,670 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ComputerUseAction,
|
|
3
|
+
ComputerUseHost,
|
|
4
|
+
ComputerUseResult,
|
|
5
|
+
} from '../types/computer-use/index.js'
|
|
6
|
+
import { PalLifecycleEmitter, type PalLifecycleListener } from './lifecycle.js'
|
|
7
|
+
import type {
|
|
8
|
+
PalAdmission,
|
|
9
|
+
PalAdmissionRequest,
|
|
10
|
+
PalComputerControl,
|
|
11
|
+
PalComputerControlState,
|
|
12
|
+
PalComputerInput,
|
|
13
|
+
PalComputerScreenStream,
|
|
14
|
+
PalConversationAdmission,
|
|
15
|
+
PalEnvironmentLease,
|
|
16
|
+
PalRuntimeOptions,
|
|
17
|
+
} from './types.js'
|
|
18
|
+
|
|
19
|
+
export class PalUnavailableError extends Error {
|
|
20
|
+
override readonly name = 'PalUnavailableError'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function captureInput(input: PalComputerInput): PalComputerInput {
|
|
24
|
+
const invalid = () => new Error('Invalid Pal computer input.')
|
|
25
|
+
const shape = (value: unknown, keys: readonly string[]): value is Record<string, unknown> =>
|
|
26
|
+
!!value &&
|
|
27
|
+
typeof value === 'object' &&
|
|
28
|
+
!Array.isArray(value) &&
|
|
29
|
+
Object.keys(value).length === keys.length &&
|
|
30
|
+
keys.every((key) => Object.hasOwn(value, key))
|
|
31
|
+
const point = (value: unknown) => {
|
|
32
|
+
if (
|
|
33
|
+
!shape(value, ['x', 'y']) ||
|
|
34
|
+
!Number.isSafeInteger(value.x) ||
|
|
35
|
+
!Number.isSafeInteger(value.y) ||
|
|
36
|
+
(value.x as number) < 0 ||
|
|
37
|
+
(value.y as number) < 0 ||
|
|
38
|
+
(value.x as number) > 32767 ||
|
|
39
|
+
(value.y as number) > 32767
|
|
40
|
+
)
|
|
41
|
+
throw invalid()
|
|
42
|
+
return { x: value.x as number, y: value.y as number }
|
|
43
|
+
}
|
|
44
|
+
const button = (value: unknown) => {
|
|
45
|
+
if (value !== 'left' && value !== 'right' && value !== 'middle') throw invalid()
|
|
46
|
+
return value
|
|
47
|
+
}
|
|
48
|
+
if (!input || typeof input !== 'object') throw invalid()
|
|
49
|
+
switch (input.type) {
|
|
50
|
+
case 'mouse_move':
|
|
51
|
+
if (!shape(input, ['type', 'to'])) throw invalid()
|
|
52
|
+
return { type: input.type, to: point(input.to) }
|
|
53
|
+
case 'mouse_click':
|
|
54
|
+
if (!shape(input, ['type', 'at', 'button'])) throw invalid()
|
|
55
|
+
return { type: input.type, at: point(input.at), button: button(input.button) }
|
|
56
|
+
case 'mouse_drag':
|
|
57
|
+
if (!shape(input, ['type', 'from', 'to', 'button'])) throw invalid()
|
|
58
|
+
return {
|
|
59
|
+
type: input.type,
|
|
60
|
+
from: point(input.from),
|
|
61
|
+
to: point(input.to),
|
|
62
|
+
button: button(input.button),
|
|
63
|
+
}
|
|
64
|
+
case 'scroll':
|
|
65
|
+
if (
|
|
66
|
+
!shape(input, ['type', 'at', 'direction', 'amount']) ||
|
|
67
|
+
!['up', 'down', 'left', 'right'].includes(input.direction) ||
|
|
68
|
+
!Number.isSafeInteger(input.amount) ||
|
|
69
|
+
input.amount < 1 ||
|
|
70
|
+
input.amount > 100
|
|
71
|
+
)
|
|
72
|
+
throw invalid()
|
|
73
|
+
return {
|
|
74
|
+
type: input.type,
|
|
75
|
+
at: point(input.at),
|
|
76
|
+
direction: input.direction,
|
|
77
|
+
amount: input.amount,
|
|
78
|
+
}
|
|
79
|
+
case 'type_text':
|
|
80
|
+
if (
|
|
81
|
+
!shape(input, ['type', 'text']) ||
|
|
82
|
+
typeof input.text !== 'string' ||
|
|
83
|
+
input.text.length > 100_000 ||
|
|
84
|
+
input.text.includes('\0')
|
|
85
|
+
)
|
|
86
|
+
throw invalid()
|
|
87
|
+
return { type: input.type, text: input.text }
|
|
88
|
+
case 'key':
|
|
89
|
+
if (
|
|
90
|
+
!shape(input, ['type', 'keys']) ||
|
|
91
|
+
typeof input.keys !== 'string' ||
|
|
92
|
+
!input.keys.trim() ||
|
|
93
|
+
input.keys.length > 100 ||
|
|
94
|
+
!/^[a-zA-Z0-9_+ -]+$/.test(input.keys)
|
|
95
|
+
)
|
|
96
|
+
throw invalid()
|
|
97
|
+
return { type: input.type, keys: input.keys }
|
|
98
|
+
case 'key_down':
|
|
99
|
+
case 'key_up':
|
|
100
|
+
if (
|
|
101
|
+
!shape(input, ['type', 'key', 'keyboardId']) ||
|
|
102
|
+
typeof input.key !== 'string' ||
|
|
103
|
+
!/^[a-zA-Z0-9_]{1,40}$/.test(input.key) ||
|
|
104
|
+
typeof input.keyboardId !== 'string' ||
|
|
105
|
+
!/^[a-zA-Z0-9_-]{16,80}$/.test(input.keyboardId)
|
|
106
|
+
)
|
|
107
|
+
throw invalid()
|
|
108
|
+
return { type: input.type, key: input.key, keyboardId: input.keyboardId }
|
|
109
|
+
case 'release_keys':
|
|
110
|
+
if (
|
|
111
|
+
!shape(input, ['type', 'keyboardId']) ||
|
|
112
|
+
typeof input.keyboardId !== 'string' ||
|
|
113
|
+
!/^[a-zA-Z0-9_-]{16,80}$/.test(input.keyboardId)
|
|
114
|
+
)
|
|
115
|
+
throw invalid()
|
|
116
|
+
return { type: input.type, keyboardId: input.keyboardId }
|
|
117
|
+
default:
|
|
118
|
+
throw invalid()
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function controlMode(control: PalComputerControl): PalComputerControl['mode'] {
|
|
123
|
+
return control.mode
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function freshAdmissionComputer(host: ComputerUseHost, assertActive: () => void): ComputerUseHost {
|
|
127
|
+
let observed = false
|
|
128
|
+
const requireScreen = () => {
|
|
129
|
+
if (!observed)
|
|
130
|
+
throw new PalUnavailableError(
|
|
131
|
+
'Capture a fresh Pal computer screenshot after operator control before sending GUI input.',
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
return new Proxy(Object.create(host) as ComputerUseHost, {
|
|
135
|
+
get(_target, property) {
|
|
136
|
+
const value = Reflect.get(host, property, host)
|
|
137
|
+
if (typeof value !== 'function') return value
|
|
138
|
+
if (property === 'execute')
|
|
139
|
+
return async (action: ComputerUseAction) => {
|
|
140
|
+
assertActive()
|
|
141
|
+
if (action.type !== 'screenshot' && action.type !== 'cursor_position') requireScreen()
|
|
142
|
+
const result: ComputerUseResult = await host.execute(action)
|
|
143
|
+
assertActive()
|
|
144
|
+
if (action.type === 'screenshot' && result.type === 'screenshot') observed = true
|
|
145
|
+
return result
|
|
146
|
+
}
|
|
147
|
+
return async (...args: unknown[]) => {
|
|
148
|
+
assertActive()
|
|
149
|
+
if (property === 'focusWindow' || property === 'executeWindow' || property === 'uiAct')
|
|
150
|
+
requireScreen()
|
|
151
|
+
const result = await Reflect.apply(value, host, args)
|
|
152
|
+
assertActive()
|
|
153
|
+
return result
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
})
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** One host-owned local computer and one active input controller per Pal. */
|
|
160
|
+
export class PalRuntime {
|
|
161
|
+
private readonly computers = new Map<string, PalEnvironmentLease>()
|
|
162
|
+
private readonly starting = new Map<string, Promise<PalEnvironmentLease>>()
|
|
163
|
+
private readonly controllers = new Map<
|
|
164
|
+
string,
|
|
165
|
+
{ readonly conversationId: string; generation?: number }
|
|
166
|
+
>()
|
|
167
|
+
private readonly conversations = new Map<string, { readonly conversationId: string }>()
|
|
168
|
+
private readonly lifecycle = new PalLifecycleEmitter()
|
|
169
|
+
private readonly stopping = new Set<string>()
|
|
170
|
+
private readonly freshScreenRequired = new Set<string>()
|
|
171
|
+
private readonly controlOperations = new Map<
|
|
172
|
+
string,
|
|
173
|
+
{ readonly transition: boolean; readonly promise: Promise<unknown> }
|
|
174
|
+
>()
|
|
175
|
+
private readonly failures = new Map<string, string>()
|
|
176
|
+
private closing: Promise<void> | undefined
|
|
177
|
+
private closed = false
|
|
178
|
+
constructor(private readonly options: PalRuntimeOptions) {}
|
|
179
|
+
|
|
180
|
+
/** Live observations only. Unsubscribe does not stop the Pal or its computer. */
|
|
181
|
+
onLifecycle(listener: PalLifecycleListener): () => void {
|
|
182
|
+
return this.lifecycle.on(listener)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
computer(palId: string): PalEnvironmentLease | null {
|
|
186
|
+
const lease = this.computers.get(palId)
|
|
187
|
+
if (lease && lease.sandbox.status !== 'ready' && lease.sandbox.status !== 'busy')
|
|
188
|
+
this.failures.set(palId, 'This Pal computer retired. Stop it before starting it again.')
|
|
189
|
+
return this.failures.has(palId) || this.stopping.has(palId) ? null : (lease ?? null)
|
|
190
|
+
}
|
|
191
|
+
computerError(palId: string): string | null {
|
|
192
|
+
this.computer(palId)
|
|
193
|
+
return this.failures.get(palId) ?? null
|
|
194
|
+
}
|
|
195
|
+
/** Trusted host observation only. The credentials do not grant guest input authority. */
|
|
196
|
+
computerScreenStream(palId: string, generation: number): PalComputerScreenStream {
|
|
197
|
+
if (this.closed) throw new PalUnavailableError('The Pal runtime is closed.')
|
|
198
|
+
if (!Number.isSafeInteger(generation) || generation < 1)
|
|
199
|
+
throw new PalUnavailableError('Invalid Pal computer generation.')
|
|
200
|
+
const pal = this.options.store.get(palId)
|
|
201
|
+
const lease = this.computer(palId)
|
|
202
|
+
if (
|
|
203
|
+
!pal ||
|
|
204
|
+
!lease ||
|
|
205
|
+
lease.palId !== pal.id ||
|
|
206
|
+
lease.generation !== generation ||
|
|
207
|
+
this.starting.has(palId) ||
|
|
208
|
+
this.stopping.has(palId)
|
|
209
|
+
)
|
|
210
|
+
throw new PalUnavailableError('This Pal computer generation is unavailable or changed.')
|
|
211
|
+
const stream = lease.screenStream
|
|
212
|
+
if (!stream) throw new PalUnavailableError('This Pal computer does not support a live screen.')
|
|
213
|
+
const { protocol, url, authorization } = stream
|
|
214
|
+
const bounded = (value: unknown): value is string =>
|
|
215
|
+
typeof value === 'string' &&
|
|
216
|
+
value.length > 0 &&
|
|
217
|
+
value.length <= 4096 &&
|
|
218
|
+
value.trim() === value &&
|
|
219
|
+
![...value].some((character) => {
|
|
220
|
+
const code = character.charCodeAt(0)
|
|
221
|
+
return code < 32 || code === 127
|
|
222
|
+
})
|
|
223
|
+
if (protocol !== 'rfb' || !bounded(url) || !bounded(authorization))
|
|
224
|
+
throw new PalUnavailableError('The Pal computer returned an invalid live screen descriptor.')
|
|
225
|
+
let target: URL
|
|
226
|
+
try {
|
|
227
|
+
target = new URL(url)
|
|
228
|
+
} catch {
|
|
229
|
+
throw new PalUnavailableError('The Pal computer returned an invalid live screen descriptor.')
|
|
230
|
+
}
|
|
231
|
+
if (
|
|
232
|
+
(target.protocol !== 'ws:' && target.protocol !== 'wss:') ||
|
|
233
|
+
target.username ||
|
|
234
|
+
target.password ||
|
|
235
|
+
this.computer(palId) !== lease ||
|
|
236
|
+
lease.generation !== generation
|
|
237
|
+
)
|
|
238
|
+
throw new PalUnavailableError('The Pal computer returned an invalid live screen descriptor.')
|
|
239
|
+
return Object.freeze({ protocol, url, authorization })
|
|
240
|
+
}
|
|
241
|
+
/** Actual provider authority, including a transition reserved by this runtime. */
|
|
242
|
+
computerControl(palId: string): PalComputerControlState {
|
|
243
|
+
const lease = this.computer(palId)
|
|
244
|
+
if (!lease) return { supported: false, mode: 'unavailable' }
|
|
245
|
+
if (!lease.operatorControl) return { supported: false, mode: 'unavailable' }
|
|
246
|
+
if (this.controlOperations.get(palId)?.transition)
|
|
247
|
+
return { supported: true, mode: 'transitioning' }
|
|
248
|
+
const mode = lease.operatorControl.mode
|
|
249
|
+
const heldKeyboard =
|
|
250
|
+
lease.operatorControl.heldKeyboard === true ? { heldKeyboard: true as const } : {}
|
|
251
|
+
return mode === 'pal' || mode === 'operator' || mode === 'transitioning'
|
|
252
|
+
? { supported: true, mode, ...heldKeyboard }
|
|
253
|
+
: { supported: true, mode: 'unavailable' }
|
|
254
|
+
}
|
|
255
|
+
busy(palId: string): boolean {
|
|
256
|
+
return (
|
|
257
|
+
this.conversations.has(palId) ||
|
|
258
|
+
this.controllers.has(palId) ||
|
|
259
|
+
this.starting.has(palId) ||
|
|
260
|
+
this.stopping.has(palId) ||
|
|
261
|
+
this.controlOperations.has(palId) ||
|
|
262
|
+
(this.computers.get(palId)?.operatorControl?.mode !== undefined &&
|
|
263
|
+
this.computers.get(palId)?.operatorControl?.mode !== 'pal')
|
|
264
|
+
)
|
|
265
|
+
}
|
|
266
|
+
/** Actual guest lifecycle/control transition, independent of model-only chat. */
|
|
267
|
+
computerChanging(palId: string): boolean {
|
|
268
|
+
return this.starting.has(palId) || this.stopping.has(palId) || this.controlOperations.has(palId)
|
|
269
|
+
}
|
|
270
|
+
private ownedControl(palId: string, generation: number) {
|
|
271
|
+
if (this.closed) throw new PalUnavailableError('The Pal runtime is closed.')
|
|
272
|
+
if (!Number.isSafeInteger(generation) || generation < 1)
|
|
273
|
+
throw new PalUnavailableError('Invalid Pal computer generation.')
|
|
274
|
+
const pal = this.options.store.get(palId)
|
|
275
|
+
const lease = this.computer(palId)
|
|
276
|
+
if (
|
|
277
|
+
!pal ||
|
|
278
|
+
!lease ||
|
|
279
|
+
lease.palId !== pal.id ||
|
|
280
|
+
lease.generation !== generation ||
|
|
281
|
+
this.starting.has(palId) ||
|
|
282
|
+
this.stopping.has(palId)
|
|
283
|
+
)
|
|
284
|
+
throw new PalUnavailableError('This Pal computer generation is unavailable or changed.')
|
|
285
|
+
if (this.controllers.has(palId))
|
|
286
|
+
throw new PalUnavailableError('Stop this Pal’s active work before taking computer control.')
|
|
287
|
+
if (this.controlOperations.has(palId))
|
|
288
|
+
throw new PalUnavailableError('This Pal computer control operation is still pending.')
|
|
289
|
+
if (!lease.operatorControl)
|
|
290
|
+
throw new PalUnavailableError('This Pal computer does not support operator control.')
|
|
291
|
+
return { lease, control: lease.operatorControl }
|
|
292
|
+
}
|
|
293
|
+
private async controlOperation<T>(
|
|
294
|
+
palId: string,
|
|
295
|
+
generation: number,
|
|
296
|
+
transition: boolean,
|
|
297
|
+
run: (control: PalComputerControl) => Promise<T>,
|
|
298
|
+
): Promise<T> {
|
|
299
|
+
const { lease, control } = this.ownedControl(palId, generation)
|
|
300
|
+
// Reserve before invoking the provider; synchronous observers cannot admit a new task.
|
|
301
|
+
const promise = Promise.resolve().then(async () => {
|
|
302
|
+
if (this.closed || this.computer(palId) !== lease || !this.options.store.get(palId))
|
|
303
|
+
throw new PalUnavailableError('This Pal computer control operation lost its ownership.')
|
|
304
|
+
return run(control)
|
|
305
|
+
})
|
|
306
|
+
const operation = { transition, promise }
|
|
307
|
+
this.controlOperations.set(palId, operation)
|
|
308
|
+
try {
|
|
309
|
+
return await promise
|
|
310
|
+
} finally {
|
|
311
|
+
if (this.controlOperations.get(palId) === operation) this.controlOperations.delete(palId)
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
async takeOver(palId: string, generation: number): Promise<void> {
|
|
315
|
+
return this.controlOperation(palId, generation, true, async (control) => {
|
|
316
|
+
if (control.mode !== 'pal')
|
|
317
|
+
throw new PalUnavailableError('This Pal computer is not under Pal control.')
|
|
318
|
+
// A preview capture must never certify what a later Pal admission has observed.
|
|
319
|
+
this.freshScreenRequired.add(palId)
|
|
320
|
+
await control.takeOver()
|
|
321
|
+
if (controlMode(control) !== 'operator')
|
|
322
|
+
throw new PalUnavailableError('Operator control of this Pal computer was not confirmed.')
|
|
323
|
+
})
|
|
324
|
+
}
|
|
325
|
+
async returnControl(palId: string, generation: number): Promise<void> {
|
|
326
|
+
return this.controlOperation(palId, generation, true, async (control) => {
|
|
327
|
+
if (control.mode !== 'operator')
|
|
328
|
+
throw new PalUnavailableError('This Pal computer is not under operator control.')
|
|
329
|
+
await control.returnControl()
|
|
330
|
+
if (controlMode(control) !== 'pal')
|
|
331
|
+
throw new PalUnavailableError('Pal control of this computer was not confirmed.')
|
|
332
|
+
})
|
|
333
|
+
}
|
|
334
|
+
async executeOperatorInput(
|
|
335
|
+
palId: string,
|
|
336
|
+
generation: number,
|
|
337
|
+
input: PalComputerInput,
|
|
338
|
+
): Promise<ComputerUseResult> {
|
|
339
|
+
const captured = captureInput(input)
|
|
340
|
+
return this.controlOperation(palId, generation, false, async (control) => {
|
|
341
|
+
if (control.mode !== 'operator')
|
|
342
|
+
throw new PalUnavailableError('Take operator control before sending computer input.')
|
|
343
|
+
if (
|
|
344
|
+
(captured.type === 'key_down' ||
|
|
345
|
+
captured.type === 'key_up' ||
|
|
346
|
+
captured.type === 'release_keys') &&
|
|
347
|
+
control.heldKeyboard !== true
|
|
348
|
+
)
|
|
349
|
+
throw new PalUnavailableError('This Pal computer does not support held keyboard input.')
|
|
350
|
+
return control.executeInput(captured)
|
|
351
|
+
})
|
|
352
|
+
}
|
|
353
|
+
async startComputer(palId: string, signal?: AbortSignal): Promise<PalEnvironmentLease> {
|
|
354
|
+
signal?.throwIfAborted()
|
|
355
|
+
if (this.closed) throw new PalUnavailableError('The Pal runtime is closed.')
|
|
356
|
+
if (this.stopping.has(palId)) throw new PalUnavailableError('This Pal computer is stopping.')
|
|
357
|
+
if (this.failures.has(palId))
|
|
358
|
+
throw new PalUnavailableError(this.failures.get(palId) ?? 'This Pal computer is unavailable.')
|
|
359
|
+
const pal = this.options.store.get(palId)
|
|
360
|
+
if (!pal || pal.paused) throw new PalUnavailableError('This Pal is paused or unavailable.')
|
|
361
|
+
const held = this.computers.get(palId)
|
|
362
|
+
if (held) {
|
|
363
|
+
if (held.sandbox.status !== 'ready' && held.sandbox.status !== 'busy')
|
|
364
|
+
throw new PalUnavailableError(
|
|
365
|
+
'This Pal computer retired. Stop it before starting it again.',
|
|
366
|
+
)
|
|
367
|
+
return held
|
|
368
|
+
}
|
|
369
|
+
const pending = this.starting.get(palId)
|
|
370
|
+
if (pending) {
|
|
371
|
+
const lease = await pending
|
|
372
|
+
signal?.throwIfAborted()
|
|
373
|
+
return lease
|
|
374
|
+
}
|
|
375
|
+
const provider = this.options.environments
|
|
376
|
+
if (!provider) throw new PalUnavailableError('This Pal needs a ready local virtual computer.')
|
|
377
|
+
// Publish shared ownership before invoking observers or the provider.
|
|
378
|
+
const start = Promise.resolve().then(async () => {
|
|
379
|
+
this.lifecycle.emit({ type: 'computer.starting', palId })
|
|
380
|
+
let lease: PalEnvironmentLease | undefined
|
|
381
|
+
try {
|
|
382
|
+
lease = await provider.acquire({
|
|
383
|
+
pal,
|
|
384
|
+
conversationId: `computer:${pal.id}`,
|
|
385
|
+
...(signal ? { signal } : {}),
|
|
386
|
+
})
|
|
387
|
+
signal?.throwIfAborted()
|
|
388
|
+
const latest = this.options.store.get(pal.id)
|
|
389
|
+
if (this.closed || !latest || latest.paused || latest.workspace !== pal.workspace)
|
|
390
|
+
throw new PalUnavailableError('This Pal became unavailable while starting its computer.')
|
|
391
|
+
if (
|
|
392
|
+
lease.palId !== pal.id ||
|
|
393
|
+
!lease.environmentId?.trim() ||
|
|
394
|
+
!Number.isSafeInteger(lease.generation) ||
|
|
395
|
+
lease.generation < 1 ||
|
|
396
|
+
!lease.sandbox ||
|
|
397
|
+
!lease.computerUseHost ||
|
|
398
|
+
!lease.computerUseHost.capabilities.screenshot ||
|
|
399
|
+
!lease.computerUseHost.capabilities.mouse ||
|
|
400
|
+
!lease.computerUseHost.capabilities.keyboard ||
|
|
401
|
+
(lease.sandbox.status !== 'ready' && lease.sandbox.status !== 'busy')
|
|
402
|
+
)
|
|
403
|
+
throw new PalUnavailableError(
|
|
404
|
+
'The virtual computer lease does not match this Pal or is not ready.',
|
|
405
|
+
)
|
|
406
|
+
this.computers.set(palId, lease)
|
|
407
|
+
this.lifecycle.emit({ type: 'computer.ready', palId, generation: lease.generation })
|
|
408
|
+
return lease
|
|
409
|
+
} catch (error) {
|
|
410
|
+
try {
|
|
411
|
+
await lease?.release()
|
|
412
|
+
} catch (releaseError) {
|
|
413
|
+
if (lease) this.computers.set(palId, lease)
|
|
414
|
+
this.failures.set(
|
|
415
|
+
palId,
|
|
416
|
+
'A rejected Pal computer could not be released. Retry stopping it.',
|
|
417
|
+
)
|
|
418
|
+
this.lifecycle.emit({ type: 'computer.start-failed', palId, reason: 'cleanup-required' })
|
|
419
|
+
throw new AggregateError(
|
|
420
|
+
[error, releaseError],
|
|
421
|
+
'Pal computer admission and cleanup failed.',
|
|
422
|
+
)
|
|
423
|
+
}
|
|
424
|
+
this.lifecycle.emit({ type: 'computer.start-failed', palId, reason: 'unavailable' })
|
|
425
|
+
throw error
|
|
426
|
+
}
|
|
427
|
+
})
|
|
428
|
+
this.starting.set(palId, start)
|
|
429
|
+
try {
|
|
430
|
+
return await start
|
|
431
|
+
} finally {
|
|
432
|
+
if (this.starting.get(palId) === start) this.starting.delete(palId)
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
async stopComputer(palId: string): Promise<void> {
|
|
436
|
+
if (this.controlOperations.has(palId))
|
|
437
|
+
throw new PalUnavailableError('Wait for this Pal computer control operation to finish.')
|
|
438
|
+
if (this.stopping.has(palId))
|
|
439
|
+
throw new PalUnavailableError('This Pal computer is already stopping.')
|
|
440
|
+
if (this.controllers.has(palId))
|
|
441
|
+
throw new PalUnavailableError('Stop this Pal’s active work before stopping its computer.')
|
|
442
|
+
if (this.starting.has(palId))
|
|
443
|
+
throw new PalUnavailableError('Wait for this Pal computer to finish starting.')
|
|
444
|
+
const lease = this.computers.get(palId)
|
|
445
|
+
if (!lease) return
|
|
446
|
+
const identity =
|
|
447
|
+
lease.palId === palId && Number.isSafeInteger(lease.generation) && lease.generation > 0
|
|
448
|
+
? { generation: lease.generation }
|
|
449
|
+
: {}
|
|
450
|
+
this.stopping.add(palId)
|
|
451
|
+
this.lifecycle.emit({ type: 'computer.stopping', palId, ...identity })
|
|
452
|
+
try {
|
|
453
|
+
await lease.release()
|
|
454
|
+
if (this.computers.get(palId) === lease) this.computers.delete(palId)
|
|
455
|
+
this.freshScreenRequired.delete(palId)
|
|
456
|
+
this.failures.delete(palId)
|
|
457
|
+
this.lifecycle.emit({ type: 'computer.stopped', palId, ...identity })
|
|
458
|
+
} catch (error) {
|
|
459
|
+
this.failures.set(palId, 'The Pal computer could not be stopped. Retry stopping it.')
|
|
460
|
+
this.lifecycle.emit({ type: 'computer.stop-failed', palId, ...identity })
|
|
461
|
+
throw error
|
|
462
|
+
} finally {
|
|
463
|
+
this.stopping.delete(palId)
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
/** Admit model conversation without starting or borrowing any computer. */
|
|
467
|
+
async admitConversation(input: PalAdmissionRequest): Promise<PalConversationAdmission> {
|
|
468
|
+
const request = { ...input }
|
|
469
|
+
request.signal?.throwIfAborted()
|
|
470
|
+
if (!request.conversationId.trim()) throw new Error('A Pal conversation id is required.')
|
|
471
|
+
if (this.closed) throw new PalUnavailableError('The Pal runtime is closed.')
|
|
472
|
+
const current = this.options.store.get(request.palId)
|
|
473
|
+
if (!current || current.paused)
|
|
474
|
+
throw new PalUnavailableError('This Pal is paused or unavailable.')
|
|
475
|
+
if (this.conversations.has(current.id) || this.controllers.has(current.id))
|
|
476
|
+
throw new PalUnavailableError('This Pal is busy in another conversation.')
|
|
477
|
+
const definition = structuredClone(
|
|
478
|
+
request.revision === undefined
|
|
479
|
+
? current
|
|
480
|
+
: this.options.store.getRevision(current.id, request.revision),
|
|
481
|
+
)
|
|
482
|
+
const controller = { conversationId: request.conversationId }
|
|
483
|
+
this.conversations.set(current.id, controller)
|
|
484
|
+
let released = false
|
|
485
|
+
let computer: PalAdmission | undefined
|
|
486
|
+
let acquiring: Promise<PalAdmission> | undefined
|
|
487
|
+
const assertActive = () => {
|
|
488
|
+
request.signal?.throwIfAborted()
|
|
489
|
+
if (released || this.closed || this.conversations.get(current.id) !== controller)
|
|
490
|
+
throw new PalUnavailableError('This Pal conversation admission is no longer owned.')
|
|
491
|
+
const latest = this.options.store.get(current.id)
|
|
492
|
+
if (!latest || latest.paused)
|
|
493
|
+
throw new PalUnavailableError('This Pal is paused or unavailable.')
|
|
494
|
+
if (latest.workspace !== definition.workspace)
|
|
495
|
+
throw new PalUnavailableError('Pal workspace identity changed.')
|
|
496
|
+
}
|
|
497
|
+
return {
|
|
498
|
+
definition,
|
|
499
|
+
assertActive,
|
|
500
|
+
acquireComputer: async () => {
|
|
501
|
+
assertActive()
|
|
502
|
+
if (computer) {
|
|
503
|
+
computer.assertActive()
|
|
504
|
+
return computer
|
|
505
|
+
}
|
|
506
|
+
if (acquiring) return acquiring
|
|
507
|
+
const pending = (async () => {
|
|
508
|
+
const guest = await this.admitComputer(
|
|
509
|
+
{ ...request, revision: definition.revision },
|
|
510
|
+
controller,
|
|
511
|
+
)
|
|
512
|
+
try {
|
|
513
|
+
assertActive()
|
|
514
|
+
computer = {
|
|
515
|
+
...guest,
|
|
516
|
+
assertActive: () => {
|
|
517
|
+
assertActive()
|
|
518
|
+
guest.assertActive()
|
|
519
|
+
},
|
|
520
|
+
}
|
|
521
|
+
return computer
|
|
522
|
+
} catch (error) {
|
|
523
|
+
await guest.release()
|
|
524
|
+
throw error
|
|
525
|
+
}
|
|
526
|
+
})()
|
|
527
|
+
acquiring = pending
|
|
528
|
+
try {
|
|
529
|
+
return await pending
|
|
530
|
+
} finally {
|
|
531
|
+
if (acquiring === pending) acquiring = undefined
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
release: async () => {
|
|
535
|
+
released = true
|
|
536
|
+
if (this.conversations.get(current.id) === controller) this.conversations.delete(current.id)
|
|
537
|
+
await acquiring?.catch(() => undefined)
|
|
538
|
+
await computer?.release()
|
|
539
|
+
},
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
async admit(request: PalAdmissionRequest): Promise<PalAdmission> {
|
|
543
|
+
return this.admitComputer({ ...request })
|
|
544
|
+
}
|
|
545
|
+
private async admitComputer(
|
|
546
|
+
request: PalAdmissionRequest,
|
|
547
|
+
conversation?: { readonly conversationId: string },
|
|
548
|
+
): Promise<PalAdmission> {
|
|
549
|
+
request.signal?.throwIfAborted()
|
|
550
|
+
if (!request.conversationId.trim()) throw new Error('A Pal conversation id is required.')
|
|
551
|
+
if (this.closed) throw new PalUnavailableError('The Pal runtime is closed.')
|
|
552
|
+
const current = this.options.store.get(request.palId)
|
|
553
|
+
if (!current || current.paused)
|
|
554
|
+
throw new PalUnavailableError('This Pal is paused or unavailable.')
|
|
555
|
+
if (this.conversations.has(current.id) && this.conversations.get(current.id) !== conversation)
|
|
556
|
+
throw new PalUnavailableError('This Pal is busy in another conversation.')
|
|
557
|
+
const definition =
|
|
558
|
+
request.revision === undefined
|
|
559
|
+
? current
|
|
560
|
+
: this.options.store.getRevision(current.id, request.revision)
|
|
561
|
+
if (
|
|
562
|
+
this.controlOperations.has(current.id) ||
|
|
563
|
+
(this.computers.get(current.id)?.operatorControl &&
|
|
564
|
+
this.computers.get(current.id)?.operatorControl?.mode !== 'pal')
|
|
565
|
+
)
|
|
566
|
+
throw new PalUnavailableError('Return this Pal computer to Pal control before starting work.')
|
|
567
|
+
if (this.controllers.has(current.id))
|
|
568
|
+
throw new PalUnavailableError('This Pal computer is busy in another conversation.')
|
|
569
|
+
const controller = {
|
|
570
|
+
conversationId: request.conversationId,
|
|
571
|
+
generation: undefined as number | undefined,
|
|
572
|
+
}
|
|
573
|
+
this.controllers.set(current.id, controller)
|
|
574
|
+
try {
|
|
575
|
+
const lease = await this.startComputer(current.id, request.signal)
|
|
576
|
+
let released = false
|
|
577
|
+
const assertActive = () => {
|
|
578
|
+
request.signal?.throwIfAborted()
|
|
579
|
+
if (
|
|
580
|
+
released ||
|
|
581
|
+
this.closed ||
|
|
582
|
+
this.controllers.get(current.id) !== controller ||
|
|
583
|
+
this.computers.get(current.id) !== lease
|
|
584
|
+
)
|
|
585
|
+
throw new PalUnavailableError('This Pal admission no longer owns its computer.')
|
|
586
|
+
if (lease.sandbox.status !== 'ready' && lease.sandbox.status !== 'busy')
|
|
587
|
+
throw new PalUnavailableError('This Pal computer retired during its work.')
|
|
588
|
+
if (
|
|
589
|
+
this.controlOperations.has(current.id) ||
|
|
590
|
+
(lease.operatorControl && lease.operatorControl.mode !== 'pal')
|
|
591
|
+
)
|
|
592
|
+
throw new PalUnavailableError('This Pal admission does not have Pal computer control.')
|
|
593
|
+
const latest = this.options.store.get(definition.id)
|
|
594
|
+
if (!latest || latest.paused)
|
|
595
|
+
throw new PalUnavailableError('This Pal is paused or unavailable.')
|
|
596
|
+
if (latest.workspace !== definition.workspace)
|
|
597
|
+
throw new PalUnavailableError('Pal workspace identity changed.')
|
|
598
|
+
}
|
|
599
|
+
assertActive()
|
|
600
|
+
controller.generation = lease.generation
|
|
601
|
+
this.lifecycle.emit({
|
|
602
|
+
type: 'admission.acquired',
|
|
603
|
+
palId: current.id,
|
|
604
|
+
generation: lease.generation,
|
|
605
|
+
conversationId: controller.conversationId,
|
|
606
|
+
})
|
|
607
|
+
return {
|
|
608
|
+
definition,
|
|
609
|
+
lease: this.freshScreenRequired.has(current.id)
|
|
610
|
+
? {
|
|
611
|
+
...lease,
|
|
612
|
+
computerUseHost: freshAdmissionComputer(lease.computerUseHost, assertActive),
|
|
613
|
+
release: () => lease.release(),
|
|
614
|
+
}
|
|
615
|
+
: lease,
|
|
616
|
+
assertActive,
|
|
617
|
+
release: async () => {
|
|
618
|
+
if (released) return
|
|
619
|
+
released = true
|
|
620
|
+
if (this.controllers.get(current.id) === controller) {
|
|
621
|
+
this.controllers.delete(current.id)
|
|
622
|
+
this.lifecycle.emit({
|
|
623
|
+
type: 'admission.released',
|
|
624
|
+
palId: current.id,
|
|
625
|
+
generation: lease.generation,
|
|
626
|
+
conversationId: controller.conversationId,
|
|
627
|
+
reason: 'released',
|
|
628
|
+
})
|
|
629
|
+
}
|
|
630
|
+
},
|
|
631
|
+
}
|
|
632
|
+
} catch (error) {
|
|
633
|
+
if (this.controllers.get(current.id) === controller) this.controllers.delete(current.id)
|
|
634
|
+
throw error
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
async close(): Promise<void> {
|
|
638
|
+
if (this.closing) return this.closing
|
|
639
|
+
this.closed = true
|
|
640
|
+
this.conversations.clear()
|
|
641
|
+
const closing = (async () => {
|
|
642
|
+
await Promise.allSettled(this.starting.values())
|
|
643
|
+
await Promise.allSettled([...this.controlOperations.values()].map(({ promise }) => promise))
|
|
644
|
+
for (const [palId, controller] of this.controllers) {
|
|
645
|
+
if (controller.generation !== undefined)
|
|
646
|
+
this.lifecycle.emit({
|
|
647
|
+
type: 'admission.released',
|
|
648
|
+
palId,
|
|
649
|
+
generation: controller.generation,
|
|
650
|
+
conversationId: controller.conversationId,
|
|
651
|
+
reason: 'closed',
|
|
652
|
+
})
|
|
653
|
+
}
|
|
654
|
+
this.controllers.clear()
|
|
655
|
+
const results = await Promise.allSettled(
|
|
656
|
+
[...this.computers.keys()].map((id) => this.stopComputer(id)),
|
|
657
|
+
)
|
|
658
|
+
const failures = results
|
|
659
|
+
.filter((result): result is PromiseRejectedResult => result.status === 'rejected')
|
|
660
|
+
.map((result) => result.reason)
|
|
661
|
+
if (failures.length) throw new AggregateError(failures, 'Failed to stop Pal computers.')
|
|
662
|
+
})()
|
|
663
|
+
this.closing = closing
|
|
664
|
+
try {
|
|
665
|
+
await closing
|
|
666
|
+
} finally {
|
|
667
|
+
if (this.closing === closing) this.closing = undefined
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
}
|