@adonis-agora/agent 0.60.1 → 0.62.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 +96 -0
- package/README.md +12 -7
- package/dist/configure.d.ts +7 -5
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +9 -5
- package/dist/configure.js.map +1 -1
- package/dist/providers/a2a_provider.d.ts +14 -0
- package/dist/providers/a2a_provider.d.ts.map +1 -0
- package/dist/providers/a2a_provider.js +136 -0
- package/dist/providers/a2a_provider.js.map +1 -0
- package/dist/providers/agent_provider.d.ts.map +1 -1
- package/dist/providers/agent_provider.js +195 -11
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/providers/mcp_provider.d.ts +3 -0
- package/dist/providers/mcp_provider.d.ts.map +1 -1
- package/dist/providers/mcp_provider.js +147 -62
- package/dist/providers/mcp_provider.js.map +1 -1
- package/dist/src/a2a/auth.d.ts +67 -0
- package/dist/src/a2a/auth.d.ts.map +1 -0
- package/dist/src/a2a/auth.js +47 -0
- package/dist/src/a2a/auth.js.map +1 -0
- package/dist/src/a2a/define_config.d.ts +74 -0
- package/dist/src/a2a/define_config.d.ts.map +1 -0
- package/dist/src/a2a/define_config.js +5 -0
- package/dist/src/a2a/define_config.js.map +1 -0
- package/dist/src/a2a/gate.d.ts +23 -0
- package/dist/src/a2a/gate.d.ts.map +1 -0
- package/dist/src/a2a/gate.js +56 -0
- package/dist/src/a2a/gate.js.map +1 -0
- package/dist/src/a2a/handler.d.ts +65 -0
- package/dist/src/a2a/handler.d.ts.map +1 -0
- package/dist/src/a2a/handler.js +322 -0
- package/dist/src/a2a/handler.js.map +1 -0
- package/dist/src/a2a/index.d.ts +15 -0
- package/dist/src/a2a/index.d.ts.map +1 -0
- package/dist/src/a2a/index.js +9 -0
- package/dist/src/a2a/index.js.map +1 -0
- package/dist/src/a2a/permission-tool.d.ts +17 -0
- package/dist/src/a2a/permission-tool.d.ts.map +1 -0
- package/dist/src/a2a/permission-tool.js +70 -0
- package/dist/src/a2a/permission-tool.js.map +1 -0
- package/dist/src/a2a/protocol.d.ts +100 -0
- package/dist/src/a2a/protocol.d.ts.map +1 -0
- package/dist/src/a2a/protocol.js +106 -0
- package/dist/src/a2a/protocol.js.map +1 -0
- package/dist/src/a2a/runtime.d.ts +6 -0
- package/dist/src/a2a/runtime.d.ts.map +1 -0
- package/dist/src/a2a/runtime.js +13 -0
- package/dist/src/a2a/runtime.js.map +1 -0
- package/dist/src/a2a/server_middleware.d.ts +13 -0
- package/dist/src/a2a/server_middleware.d.ts.map +1 -0
- package/dist/src/a2a/server_middleware.js +18 -0
- package/dist/src/a2a/server_middleware.js.map +1 -0
- package/dist/src/a2a/store.d.ts +79 -0
- package/dist/src/a2a/store.d.ts.map +1 -0
- package/dist/src/a2a/store.js +151 -0
- package/dist/src/a2a/store.js.map +1 -0
- package/dist/src/a2a/turn.d.ts +80 -0
- package/dist/src/a2a/turn.d.ts.map +1 -0
- package/dist/src/a2a/turn.js +211 -0
- package/dist/src/a2a/turn.js.map +1 -0
- package/dist/src/action-proposal-approval.d.ts +26 -0
- package/dist/src/action-proposal-approval.d.ts.map +1 -0
- package/dist/src/action-proposal-approval.js +28 -0
- package/dist/src/action-proposal-approval.js.map +1 -0
- package/dist/src/action-proposal-discovery.d.ts +9 -0
- package/dist/src/action-proposal-discovery.d.ts.map +1 -0
- package/dist/src/action-proposal-discovery.js +20 -0
- package/dist/src/action-proposal-discovery.js.map +1 -0
- package/dist/src/action-proposal-executor.d.ts +40 -0
- package/dist/src/action-proposal-executor.d.ts.map +1 -0
- package/dist/src/action-proposal-executor.js +80 -0
- package/dist/src/action-proposal-executor.js.map +1 -0
- package/dist/src/action-proposal-outcome.d.ts +12 -0
- package/dist/src/action-proposal-outcome.d.ts.map +1 -0
- package/dist/src/action-proposal-outcome.js +86 -0
- package/dist/src/action-proposal-outcome.js.map +1 -0
- package/dist/src/action-proposal-preparation.d.ts +20 -0
- package/dist/src/action-proposal-preparation.d.ts.map +1 -0
- package/dist/src/action-proposal-preparation.js +27 -0
- package/dist/src/action-proposal-preparation.js.map +1 -0
- package/dist/src/action-proposal-receipt.d.ts +12 -0
- package/dist/src/action-proposal-receipt.d.ts.map +1 -0
- package/dist/src/action-proposal-receipt.js +4 -0
- package/dist/src/action-proposal-receipt.js.map +1 -0
- package/dist/src/action-proposal-runtime.d.ts +9 -0
- package/dist/src/action-proposal-runtime.d.ts.map +1 -0
- package/dist/src/action-proposal-runtime.js +34 -0
- package/dist/src/action-proposal-runtime.js.map +1 -0
- package/dist/src/action-proposal-service.d.ts +47 -0
- package/dist/src/action-proposal-service.d.ts.map +1 -0
- package/dist/src/action-proposal-service.js +136 -0
- package/dist/src/action-proposal-service.js.map +1 -0
- package/dist/src/action-proposal-text.d.ts +72 -0
- package/dist/src/action-proposal-text.d.ts.map +1 -0
- package/dist/src/action-proposal-text.js +119 -0
- package/dist/src/action-proposal-text.js.map +1 -0
- package/dist/src/action-proposal-transitions.d.ts +20 -0
- package/dist/src/action-proposal-transitions.d.ts.map +1 -0
- package/dist/src/action-proposal-transitions.js +311 -0
- package/dist/src/action-proposal-transitions.js.map +1 -0
- package/dist/src/action-proposal-worker.d.ts +32 -0
- package/dist/src/action-proposal-worker.d.ts.map +1 -0
- package/dist/src/action-proposal-worker.js +140 -0
- package/dist/src/action-proposal-worker.js.map +1 -0
- package/dist/src/ag-ui/adapter.d.ts.map +1 -1
- package/dist/src/ag-ui/adapter.js +106 -1
- package/dist/src/ag-ui/adapter.js.map +1 -1
- package/dist/src/ag-ui/core/encoder.d.ts +105 -0
- package/dist/src/ag-ui/core/encoder.d.ts.map +1 -0
- package/dist/src/ag-ui/core/encoder.js +523 -0
- package/dist/src/ag-ui/core/encoder.js.map +1 -0
- package/dist/src/ag-ui/core/index.d.ts +12 -0
- package/dist/src/ag-ui/core/index.d.ts.map +1 -0
- package/dist/src/ag-ui/core/index.js +12 -0
- package/dist/src/ag-ui/core/index.js.map +1 -0
- package/dist/src/ag-ui/core/input.d.ts +74 -0
- package/dist/src/ag-ui/core/input.d.ts.map +1 -0
- package/dist/src/ag-ui/core/input.js +228 -0
- package/dist/src/ag-ui/core/input.js.map +1 -0
- package/dist/src/ag-ui/core/interrupt-id.d.ts +31 -0
- package/dist/src/ag-ui/core/interrupt-id.d.ts.map +1 -0
- package/dist/src/ag-ui/core/interrupt-id.js +48 -0
- package/dist/src/ag-ui/core/interrupt-id.js.map +1 -0
- package/dist/src/ag-ui/core/proposal-decision.d.ts +9 -0
- package/dist/src/ag-ui/core/proposal-decision.d.ts.map +1 -0
- package/dist/src/ag-ui/core/proposal-decision.js +20 -0
- package/dist/src/ag-ui/core/proposal-decision.js.map +1 -0
- package/dist/src/ag-ui/core/stream.d.ts +27 -0
- package/dist/src/ag-ui/core/stream.d.ts.map +1 -0
- package/dist/src/ag-ui/core/stream.js +68 -0
- package/dist/src/ag-ui/core/stream.js.map +1 -0
- package/dist/src/ag-ui/core/types.d.ts +249 -0
- package/dist/src/ag-ui/core/types.d.ts.map +1 -0
- package/dist/src/ag-ui/core/types.js +35 -0
- package/dist/src/ag-ui/core/types.js.map +1 -0
- package/dist/src/ag-ui/encoder.d.ts +3 -4
- package/dist/src/ag-ui/encoder.d.ts.map +1 -1
- package/dist/src/ag-ui/encoder.js +10 -11
- package/dist/src/ag-ui/encoder.js.map +1 -1
- package/dist/src/ag-ui/frames.d.ts +4 -5
- package/dist/src/ag-ui/frames.d.ts.map +1 -1
- package/dist/src/ag-ui/frames.js +9 -4
- package/dist/src/ag-ui/frames.js.map +1 -1
- package/dist/src/ag-ui/index.d.ts +3 -5
- package/dist/src/ag-ui/index.d.ts.map +1 -1
- package/dist/src/ag-ui/index.js +3 -5
- package/dist/src/ag-ui/index.js.map +1 -1
- package/dist/src/ag-ui/stream.d.ts +3 -4
- package/dist/src/ag-ui/stream.d.ts.map +1 -1
- package/dist/src/ag-ui/stream.js +4 -5
- package/dist/src/ag-ui/stream.js.map +1 -1
- package/dist/src/agent-deps-factory.d.ts +8 -0
- package/dist/src/agent-deps-factory.d.ts.map +1 -1
- package/dist/src/agent-deps-factory.js +12 -0
- package/dist/src/agent-deps-factory.js.map +1 -1
- package/dist/src/agent-deps.d.ts +7 -0
- package/dist/src/agent-deps.d.ts.map +1 -1
- package/dist/src/agent-deps.js.map +1 -1
- package/dist/src/agent-loop.d.ts +8 -3
- package/dist/src/agent-loop.d.ts.map +1 -1
- package/dist/src/agent-loop.js +398 -63
- package/dist/src/agent-loop.js.map +1 -1
- package/dist/src/agent-service.d.ts +52 -2
- package/dist/src/agent-service.d.ts.map +1 -1
- package/dist/src/agent-service.js +62 -2
- package/dist/src/agent-service.js.map +1 -1
- package/dist/src/ai-sdk/ai-sdk-model.js +4 -1
- package/dist/src/ai-sdk/ai-sdk-model.js.map +1 -1
- package/dist/src/ai-tool-ref.d.ts +6 -1
- package/dist/src/ai-tool-ref.d.ts.map +1 -1
- package/dist/src/ai-tool-ref.js +32 -16
- package/dist/src/ai-tool-ref.js.map +1 -1
- package/dist/src/chat-queue-service.d.ts.map +1 -1
- package/dist/src/chat-queue-service.js +4 -0
- package/dist/src/chat-queue-service.js.map +1 -1
- package/dist/src/client/chat-client.d.ts +12 -0
- package/dist/src/client/chat-client.d.ts.map +1 -1
- package/dist/src/client/chat-client.js +69 -1
- package/dist/src/client/chat-client.js.map +1 -1
- package/dist/src/client/sse.d.ts +15 -0
- package/dist/src/client/sse.d.ts.map +1 -1
- package/dist/src/client/sse.js +45 -0
- package/dist/src/client/sse.js.map +1 -1
- package/dist/src/define_config.d.ts +70 -12
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/engine.d.ts +77 -0
- package/dist/src/engine.d.ts.map +1 -0
- package/dist/src/engine.js +27 -0
- package/dist/src/engine.js.map +1 -0
- package/dist/src/genui/builtins.d.ts +73 -3
- package/dist/src/genui/builtins.d.ts.map +1 -1
- package/dist/src/genui/builtins.js +298 -3
- package/dist/src/genui/builtins.js.map +1 -1
- package/dist/src/genui/capabilities.d.ts +24 -0
- package/dist/src/genui/capabilities.d.ts.map +1 -0
- package/dist/src/genui/capabilities.js +81 -0
- package/dist/src/genui/capabilities.js.map +1 -0
- package/dist/src/genui/catalog.d.ts +77 -0
- package/dist/src/genui/catalog.d.ts.map +1 -0
- package/dist/src/genui/catalog.js +88 -0
- package/dist/src/genui/catalog.js.map +1 -0
- package/dist/src/genui/factory.d.ts +8 -8
- package/dist/src/genui/factory.d.ts.map +1 -1
- package/dist/src/genui/factory.js +3 -1
- package/dist/src/genui/factory.js.map +1 -1
- package/dist/src/genui/index.d.ts +4 -12
- package/dist/src/genui/index.d.ts.map +1 -1
- package/dist/src/genui/index.js +6 -18
- package/dist/src/genui/index.js.map +1 -1
- package/dist/src/genui/public.d.ts +9 -0
- package/dist/src/genui/public.d.ts.map +1 -0
- package/dist/src/genui/public.js +9 -0
- package/dist/src/genui/public.js.map +1 -0
- package/dist/src/genui/registry.d.ts +65 -0
- package/dist/src/genui/registry.d.ts.map +1 -0
- package/dist/src/genui/registry.js +151 -0
- package/dist/src/genui/registry.js.map +1 -0
- package/dist/src/genui/schema.d.ts +71 -0
- package/dist/src/genui/schema.d.ts.map +1 -0
- package/dist/src/genui/schema.js +304 -0
- package/dist/src/genui/schema.js.map +1 -0
- package/dist/src/genui/text.d.ts +35 -0
- package/dist/src/genui/text.d.ts.map +1 -0
- package/dist/src/genui/text.js +156 -0
- package/dist/src/genui/text.js.map +1 -0
- package/dist/src/genui/tools.d.ts +91 -0
- package/dist/src/genui/tools.d.ts.map +1 -0
- package/dist/src/genui/tools.js +292 -0
- package/dist/src/genui/tools.js.map +1 -0
- package/dist/src/genui/tree.d.ts +56 -0
- package/dist/src/genui/tree.d.ts.map +1 -0
- package/dist/src/genui/tree.js +188 -0
- package/dist/src/genui/tree.js.map +1 -0
- package/dist/src/index.d.ts +21 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +19 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/auth.d.ts +17 -1
- package/dist/src/mcp/auth.d.ts.map +1 -1
- package/dist/src/mcp/auth.js +14 -3
- package/dist/src/mcp/auth.js.map +1 -1
- package/dist/src/mcp/define_config.d.ts +81 -2
- package/dist/src/mcp/define_config.d.ts.map +1 -1
- package/dist/src/mcp/define_config.js.map +1 -1
- package/dist/src/mcp/index.d.ts +1 -1
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/mcp/oauth-resource.d.ts +9 -0
- package/dist/src/mcp/oauth-resource.d.ts.map +1 -0
- package/dist/src/mcp/oauth-resource.js +16 -0
- package/dist/src/mcp/oauth-resource.js.map +1 -0
- package/dist/src/mcp/server.d.ts +5 -0
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +48 -16
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/negotiated-tool-ui.d.ts +10 -0
- package/dist/src/negotiated-tool-ui.d.ts.map +1 -0
- package/dist/src/negotiated-tool-ui.js +57 -0
- package/dist/src/negotiated-tool-ui.js.map +1 -0
- package/dist/src/opencode/client.d.ts +202 -0
- package/dist/src/opencode/client.d.ts.map +1 -0
- package/dist/src/opencode/client.js +2 -0
- package/dist/src/opencode/client.js.map +1 -0
- package/dist/src/opencode/durable/index.d.ts +33 -0
- package/dist/src/opencode/durable/index.d.ts.map +1 -0
- package/dist/src/opencode/durable/index.js +38 -0
- package/dist/src/opencode/durable/index.js.map +1 -0
- package/dist/src/opencode/durable/runner.d.ts +36 -0
- package/dist/src/opencode/durable/runner.d.ts.map +1 -0
- package/dist/src/opencode/durable/runner.js +88 -0
- package/dist/src/opencode/durable/runner.js.map +1 -0
- package/dist/src/opencode/durable/workflow.d.ts +40 -0
- package/dist/src/opencode/durable/workflow.d.ts.map +1 -0
- package/dist/src/opencode/durable/workflow.js +106 -0
- package/dist/src/opencode/durable/workflow.js.map +1 -0
- package/dist/src/opencode/engine.d.ts +48 -0
- package/dist/src/opencode/engine.d.ts.map +1 -0
- package/dist/src/opencode/engine.js +98 -0
- package/dist/src/opencode/engine.js.map +1 -0
- package/dist/src/opencode/event-hub.d.ts +23 -0
- package/dist/src/opencode/event-hub.d.ts.map +1 -0
- package/dist/src/opencode/event-hub.js +99 -0
- package/dist/src/opencode/event-hub.js.map +1 -0
- package/dist/src/opencode/forms.d.ts +19 -0
- package/dist/src/opencode/forms.d.ts.map +1 -0
- package/dist/src/opencode/forms.js +82 -0
- package/dist/src/opencode/forms.js.map +1 -0
- package/dist/src/opencode/host.d.ts +179 -0
- package/dist/src/opencode/host.d.ts.map +1 -0
- package/dist/src/opencode/host.js +34 -0
- package/dist/src/opencode/host.js.map +1 -0
- package/dist/src/opencode/index.d.ts +15 -0
- package/dist/src/opencode/index.d.ts.map +1 -0
- package/dist/src/opencode/index.js +9 -0
- package/dist/src/opencode/index.js.map +1 -0
- package/dist/src/opencode/log.d.ts +9 -0
- package/dist/src/opencode/log.d.ts.map +1 -0
- package/dist/src/opencode/log.js +15 -0
- package/dist/src/opencode/log.js.map +1 -0
- package/dist/src/opencode/mcp.d.ts +60 -0
- package/dist/src/opencode/mcp.d.ts.map +1 -0
- package/dist/src/opencode/mcp.js +258 -0
- package/dist/src/opencode/mcp.js.map +1 -0
- package/dist/src/opencode/runner.d.ts +40 -0
- package/dist/src/opencode/runner.d.ts.map +1 -0
- package/dist/src/opencode/runner.js +125 -0
- package/dist/src/opencode/runner.js.map +1 -0
- package/dist/src/opencode/turn.d.ts +167 -0
- package/dist/src/opencode/turn.d.ts.map +1 -0
- package/dist/src/opencode/turn.js +761 -0
- package/dist/src/opencode/turn.js.map +1 -0
- package/dist/src/opencode/turns.d.ts +245 -0
- package/dist/src/opencode/turns.d.ts.map +1 -0
- package/dist/src/opencode/turns.js +867 -0
- package/dist/src/opencode/turns.js.map +1 -0
- package/dist/src/personas.d.ts.map +1 -1
- package/dist/src/personas.js +4 -1
- package/dist/src/personas.js.map +1 -1
- package/dist/src/react/ag-ui.d.ts +4 -2
- package/dist/src/react/ag-ui.d.ts.map +1 -1
- package/dist/src/react/ag-ui.js +2 -2
- package/dist/src/react/ag-ui.js.map +1 -1
- package/dist/src/react/client.d.ts +1 -1
- package/dist/src/react/client.d.ts.map +1 -1
- package/dist/src/react/client.js +1 -1
- package/dist/src/react/client.js.map +1 -1
- package/dist/src/react/core/ag-ui-backend.d.ts +85 -0
- package/dist/src/react/core/ag-ui-backend.d.ts.map +1 -0
- package/dist/src/react/core/ag-ui-backend.js +409 -0
- package/dist/src/react/core/ag-ui-backend.js.map +1 -0
- package/dist/src/react/core/agent-chat-transport.d.ts +187 -0
- package/dist/src/react/core/agent-chat-transport.d.ts.map +1 -0
- package/dist/src/react/core/agent-chat-transport.js +796 -0
- package/dist/src/react/core/agent-chat-transport.js.map +1 -0
- package/dist/src/react/core/approvals/countdown.d.ts +22 -0
- package/dist/src/react/core/approvals/countdown.d.ts.map +1 -0
- package/dist/src/react/core/approvals/countdown.js +39 -0
- package/dist/src/react/core/approvals/countdown.js.map +1 -0
- package/dist/src/react/core/approvals/proposals.d.ts +15 -0
- package/dist/src/react/core/approvals/proposals.d.ts.map +1 -0
- package/dist/src/react/core/approvals/proposals.js +82 -0
- package/dist/src/react/core/approvals/proposals.js.map +1 -0
- package/dist/src/react/core/approvals/use-action-proposals.d.ts +10 -0
- package/dist/src/react/core/approvals/use-action-proposals.d.ts.map +1 -0
- package/dist/src/react/core/approvals/use-action-proposals.js +86 -0
- package/dist/src/react/core/approvals/use-action-proposals.js.map +1 -0
- package/dist/src/react/core/attachments/files.d.ts +39 -0
- package/dist/src/react/core/attachments/files.d.ts.map +1 -0
- package/dist/src/react/core/attachments/files.js +89 -0
- package/dist/src/react/core/attachments/files.js.map +1 -0
- package/dist/src/react/core/attachments/use-attachments.d.ts +106 -0
- package/dist/src/react/core/attachments/use-attachments.d.ts.map +1 -0
- package/dist/src/react/core/attachments/use-attachments.js +217 -0
- package/dist/src/react/core/attachments/use-attachments.js.map +1 -0
- package/dist/src/react/core/backend.d.ts +234 -0
- package/dist/src/react/core/backend.d.ts.map +1 -0
- package/dist/src/react/core/backend.js +21 -0
- package/dist/src/react/core/backend.js.map +1 -0
- package/dist/src/react/core/background-runs.d.ts +32 -0
- package/dist/src/react/core/background-runs.d.ts.map +1 -0
- package/dist/src/react/core/background-runs.js +47 -0
- package/dist/src/react/core/background-runs.js.map +1 -0
- package/dist/src/react/core/catalog/use-agents.d.ts +31 -0
- package/dist/src/react/core/catalog/use-agents.d.ts.map +1 -0
- package/dist/src/react/core/catalog/use-agents.js +28 -0
- package/dist/src/react/core/catalog/use-agents.js.map +1 -0
- package/dist/src/react/core/catalog/use-models.d.ts +41 -0
- package/dist/src/react/core/catalog/use-models.d.ts.map +1 -0
- package/dist/src/react/core/catalog/use-models.js +35 -0
- package/dist/src/react/core/catalog/use-models.js.map +1 -0
- package/dist/src/react/core/catalog/use-resource.d.ts +12 -0
- package/dist/src/react/core/catalog/use-resource.d.ts.map +1 -0
- package/dist/src/react/core/catalog/use-resource.js +41 -0
- package/dist/src/react/core/catalog/use-resource.js.map +1 -0
- package/dist/src/react/core/client-wire.d.ts +14 -0
- package/dist/src/react/core/client-wire.d.ts.map +1 -0
- package/dist/src/react/core/client-wire.js +2 -0
- package/dist/src/react/core/client-wire.js.map +1 -0
- package/dist/src/react/core/client.d.ts +222 -0
- package/dist/src/react/core/client.d.ts.map +1 -0
- package/dist/src/react/core/client.js +435 -0
- package/dist/src/react/core/client.js.map +1 -0
- package/dist/src/react/core/components/ambient-ui.d.ts +22 -0
- package/dist/src/react/core/components/ambient-ui.d.ts.map +1 -0
- package/dist/src/react/core/components/ambient-ui.js +30 -0
- package/dist/src/react/core/components/ambient-ui.js.map +1 -0
- package/dist/src/react/core/components/chat-input.d.ts +44 -0
- package/dist/src/react/core/components/chat-input.d.ts.map +1 -0
- package/dist/src/react/core/components/chat-input.js +69 -0
- package/dist/src/react/core/components/chat-input.js.map +1 -0
- package/dist/src/react/core/components/index.d.ts +7 -0
- package/dist/src/react/core/components/index.d.ts.map +1 -0
- package/dist/src/react/core/components/index.js +7 -0
- package/dist/src/react/core/components/index.js.map +1 -0
- package/dist/src/react/core/components/message-item.d.ts +101 -0
- package/dist/src/react/core/components/message-item.d.ts.map +1 -0
- package/dist/src/react/core/components/message-item.js +118 -0
- package/dist/src/react/core/components/message-item.js.map +1 -0
- package/dist/src/react/core/components/message-list.d.ts +85 -0
- package/dist/src/react/core/components/message-list.d.ts.map +1 -0
- package/dist/src/react/core/components/message-list.js +45 -0
- package/dist/src/react/core/components/message-list.js.map +1 -0
- package/dist/src/react/core/components/speech-languages.d.ts +22 -0
- package/dist/src/react/core/components/speech-languages.d.ts.map +1 -0
- package/dist/src/react/core/components/speech-languages.js +38 -0
- package/dist/src/react/core/components/speech-languages.js.map +1 -0
- package/dist/src/react/core/components/use-speech-recognition.d.ts +19 -0
- package/dist/src/react/core/components/use-speech-recognition.d.ts.map +1 -0
- package/dist/src/react/core/components/use-speech-recognition.js +92 -0
- package/dist/src/react/core/components/use-speech-recognition.js.map +1 -0
- package/dist/src/react/core/composer/index.d.ts +4 -0
- package/dist/src/react/core/composer/index.d.ts.map +1 -0
- package/dist/src/react/core/composer/index.js +4 -0
- package/dist/src/react/core/composer/index.js.map +1 -0
- package/dist/src/react/core/composer/model.d.ts +83 -0
- package/dist/src/react/core/composer/model.d.ts.map +1 -0
- package/dist/src/react/core/composer/model.js +53 -0
- package/dist/src/react/core/composer/model.js.map +1 -0
- package/dist/src/react/core/composer/skills-source.d.ts +29 -0
- package/dist/src/react/core/composer/skills-source.d.ts.map +1 -0
- package/dist/src/react/core/composer/skills-source.js +61 -0
- package/dist/src/react/core/composer/skills-source.js.map +1 -0
- package/dist/src/react/core/composer/use-composer-autocomplete.d.ts +78 -0
- package/dist/src/react/core/composer/use-composer-autocomplete.d.ts.map +1 -0
- package/dist/src/react/core/composer/use-composer-autocomplete.js +244 -0
- package/dist/src/react/core/composer/use-composer-autocomplete.js.map +1 -0
- package/dist/src/react/core/config/use-agent-config.d.ts +21 -0
- package/dist/src/react/core/config/use-agent-config.d.ts.map +1 -0
- package/dist/src/react/core/config/use-agent-config.js +57 -0
- package/dist/src/react/core/config/use-agent-config.js.map +1 -0
- package/dist/src/react/core/elicitation/answers.d.ts +22 -0
- package/dist/src/react/core/elicitation/answers.d.ts.map +1 -0
- package/dist/src/react/core/elicitation/answers.js +65 -0
- package/dist/src/react/core/elicitation/answers.js.map +1 -0
- package/dist/src/react/core/feedback/use-message-feedback.d.ts +32 -0
- package/dist/src/react/core/feedback/use-message-feedback.d.ts.map +1 -0
- package/dist/src/react/core/feedback/use-message-feedback.js +106 -0
- package/dist/src/react/core/feedback/use-message-feedback.js.map +1 -0
- package/dist/src/react/core/genui/generative-ui.d.ts +76 -0
- package/dist/src/react/core/genui/generative-ui.d.ts.map +1 -0
- package/dist/src/react/core/genui/generative-ui.js +210 -0
- package/dist/src/react/core/genui/generative-ui.js.map +1 -0
- package/dist/src/react/core/genui/index.d.ts +5 -0
- package/dist/src/react/core/genui/index.d.ts.map +1 -0
- package/dist/src/react/core/genui/index.js +5 -0
- package/dist/src/react/core/genui/index.js.map +1 -0
- package/dist/src/react/core/genui/json-render.d.ts +54 -0
- package/dist/src/react/core/genui/json-render.d.ts.map +1 -0
- package/dist/src/react/core/genui/json-render.js +64 -0
- package/dist/src/react/core/genui/json-render.js.map +1 -0
- package/dist/src/react/core/genui/playwright.d.ts +12 -0
- package/dist/src/react/core/genui/playwright.d.ts.map +1 -0
- package/dist/src/react/core/genui/playwright.js +141 -0
- package/dist/src/react/core/genui/playwright.js.map +1 -0
- package/dist/src/react/core/genui/react-registry.d.ts +22 -0
- package/dist/src/react/core/genui/react-registry.d.ts.map +1 -0
- package/dist/src/react/core/genui/react-registry.js +72 -0
- package/dist/src/react/core/genui/react-registry.js.map +1 -0
- package/dist/src/react/core/genui/server.d.ts +32 -0
- package/dist/src/react/core/genui/server.d.ts.map +1 -0
- package/dist/src/react/core/genui/server.js +66 -0
- package/dist/src/react/core/genui/server.js.map +1 -0
- package/dist/src/react/core/genui/types.d.ts +98 -0
- package/dist/src/react/core/genui/types.d.ts.map +1 -0
- package/dist/src/react/core/genui/types.js +3 -0
- package/dist/src/react/core/genui/types.js.map +1 -0
- package/dist/src/react/core/genui/use-generative-ui.d.ts +42 -0
- package/dist/src/react/core/genui/use-generative-ui.d.ts.map +1 -0
- package/dist/src/react/core/genui/use-generative-ui.js +186 -0
- package/dist/src/react/core/genui/use-generative-ui.js.map +1 -0
- package/dist/src/react/core/http-error.d.ts +33 -0
- package/dist/src/react/core/http-error.d.ts.map +1 -0
- package/dist/src/react/core/http-error.js +47 -0
- package/dist/src/react/core/http-error.js.map +1 -0
- package/dist/src/react/core/index.d.ts +35 -0
- package/dist/src/react/core/index.d.ts.map +1 -0
- package/dist/src/react/core/index.js +34 -0
- package/dist/src/react/core/index.js.map +1 -0
- package/dist/src/react/core/markdown/agent-markdown.d.ts +39 -0
- package/dist/src/react/core/markdown/agent-markdown.d.ts.map +1 -0
- package/dist/src/react/core/markdown/agent-markdown.js +22 -0
- package/dist/src/react/core/markdown/agent-markdown.js.map +1 -0
- package/dist/src/react/core/markdown/index.d.ts +2 -0
- package/dist/src/react/core/markdown/index.d.ts.map +1 -0
- package/dist/src/react/core/markdown/index.js +2 -0
- package/dist/src/react/core/markdown/index.js.map +1 -0
- package/dist/src/react/core/media/index.d.ts +64 -0
- package/dist/src/react/core/media/index.d.ts.map +1 -0
- package/dist/src/react/core/media/index.js +135 -0
- package/dist/src/react/core/media/index.js.map +1 -0
- package/dist/src/react/core/media/tus.d.ts +13 -0
- package/dist/src/react/core/media/tus.d.ts.map +1 -0
- package/dist/src/react/core/media/tus.js +59 -0
- package/dist/src/react/core/media/tus.js.map +1 -0
- package/dist/src/react/core/presentation/phrasing.d.ts +25 -0
- package/dist/src/react/core/presentation/phrasing.d.ts.map +1 -0
- package/dist/src/react/core/presentation/phrasing.js +58 -0
- package/dist/src/react/core/presentation/phrasing.js.map +1 -0
- package/dist/src/react/core/presentation/result-view.d.ts +43 -0
- package/dist/src/react/core/presentation/result-view.d.ts.map +1 -0
- package/dist/src/react/core/presentation/result-view.js +90 -0
- package/dist/src/react/core/presentation/result-view.js.map +1 -0
- package/dist/src/react/core/presentation/tool-activity.d.ts +106 -0
- package/dist/src/react/core/presentation/tool-activity.d.ts.map +1 -0
- package/dist/src/react/core/presentation/tool-activity.js +165 -0
- package/dist/src/react/core/presentation/tool-activity.js.map +1 -0
- package/dist/src/react/core/presentation/use-tool-catalog.d.ts +39 -0
- package/dist/src/react/core/presentation/use-tool-catalog.d.ts.map +1 -0
- package/dist/src/react/core/presentation/use-tool-catalog.js +77 -0
- package/dist/src/react/core/presentation/use-tool-catalog.js.map +1 -0
- package/dist/src/react/core/provider.d.ts +68 -0
- package/dist/src/react/core/provider.d.ts.map +1 -0
- package/dist/src/react/core/provider.js +61 -0
- package/dist/src/react/core/provider.js.map +1 -0
- package/dist/src/react/core/queue/model.d.ts +73 -0
- package/dist/src/react/core/queue/model.d.ts.map +1 -0
- package/dist/src/react/core/queue/model.js +2 -0
- package/dist/src/react/core/queue/model.js.map +1 -0
- package/dist/src/react/core/quota/use-quota.d.ts +35 -0
- package/dist/src/react/core/quota/use-quota.d.ts.map +1 -0
- package/dist/src/react/core/quota/use-quota.js +47 -0
- package/dist/src/react/core/quota/use-quota.js.map +1 -0
- package/dist/src/react/core/reasoning/timing.d.ts +38 -0
- package/dist/src/react/core/reasoning/timing.d.ts.map +1 -0
- package/dist/src/react/core/reasoning/timing.js +73 -0
- package/dist/src/react/core/reasoning/timing.js.map +1 -0
- package/dist/src/react/core/run-errors.d.ts +37 -0
- package/dist/src/react/core/run-errors.d.ts.map +1 -0
- package/dist/src/react/core/run-errors.js +37 -0
- package/dist/src/react/core/run-errors.js.map +1 -0
- package/dist/src/react/core/stored-message-to-ui-message.d.ts +4 -0
- package/dist/src/react/core/stored-message-to-ui-message.d.ts.map +1 -0
- package/dist/src/react/core/stored-message-to-ui-message.js +216 -0
- package/dist/src/react/core/stored-message-to-ui-message.js.map +1 -0
- package/dist/src/react/core/stored-thread-to-ui-messages.d.ts +82 -0
- package/dist/src/react/core/stored-thread-to-ui-messages.d.ts.map +1 -0
- package/dist/src/react/core/stored-thread-to-ui-messages.js +116 -0
- package/dist/src/react/core/stored-thread-to-ui-messages.js.map +1 -0
- package/dist/src/react/core/threads/threads-events.d.ts +22 -0
- package/dist/src/react/core/threads/threads-events.d.ts.map +1 -0
- package/dist/src/react/core/threads/threads-events.js +21 -0
- package/dist/src/react/core/threads/threads-events.js.map +1 -0
- package/dist/src/react/core/threads/use-threads.d.ts +31 -0
- package/dist/src/react/core/threads/use-threads.d.ts.map +1 -0
- package/dist/src/react/core/threads/use-threads.js +81 -0
- package/dist/src/react/core/threads/use-threads.js.map +1 -0
- package/dist/src/react/core/transcript/index.d.ts +4 -0
- package/dist/src/react/core/transcript/index.d.ts.map +1 -0
- package/dist/src/react/core/transcript/index.js +4 -0
- package/dist/src/react/core/transcript/index.js.map +1 -0
- package/dist/src/react/core/transcript/model.d.ts +399 -0
- package/dist/src/react/core/transcript/model.d.ts.map +1 -0
- package/dist/src/react/core/transcript/model.js +725 -0
- package/dist/src/react/core/transcript/model.js.map +1 -0
- package/dist/src/react/core/transcript/use-chat-transcript.d.ts +254 -0
- package/dist/src/react/core/transcript/use-chat-transcript.d.ts.map +1 -0
- package/dist/src/react/core/transcript/use-chat-transcript.js +572 -0
- package/dist/src/react/core/transcript/use-chat-transcript.js.map +1 -0
- package/dist/src/react/core/transcript/use-stick-to-bottom.d.ts +33 -0
- package/dist/src/react/core/transcript/use-stick-to-bottom.d.ts.map +1 -0
- package/dist/src/react/core/transcript/use-stick-to-bottom.js +48 -0
- package/dist/src/react/core/transcript/use-stick-to-bottom.js.map +1 -0
- package/dist/src/react/core/use-agent-chat.d.ts +341 -0
- package/dist/src/react/core/use-agent-chat.d.ts.map +1 -0
- package/dist/src/react/core/use-agent-chat.js +1118 -0
- package/dist/src/react/core/use-agent-chat.js.map +1 -0
- package/dist/src/react/genui/index.d.ts +1 -7
- package/dist/src/react/genui/index.d.ts.map +1 -1
- package/dist/src/react/genui/index.js +1 -7
- package/dist/src/react/genui/index.js.map +1 -1
- package/dist/src/react/genui/json-render.d.ts +1 -5
- package/dist/src/react/genui/json-render.d.ts.map +1 -1
- package/dist/src/react/genui/json-render.js +1 -5
- package/dist/src/react/genui/json-render.js.map +1 -1
- package/dist/src/react/genui/server.d.ts +2 -0
- package/dist/src/react/genui/server.d.ts.map +1 -0
- package/dist/src/react/genui/server.js +2 -0
- package/dist/src/react/genui/server.js.map +1 -0
- package/dist/src/react/genui/server_playwright.d.ts +2 -0
- package/dist/src/react/genui/server_playwright.d.ts.map +1 -0
- package/dist/src/react/genui/server_playwright.js +2 -0
- package/dist/src/react/genui/server_playwright.js.map +1 -0
- package/dist/src/react/index.d.ts +5 -7
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/react/index.js +5 -7
- package/dist/src/react/index.js.map +1 -1
- package/dist/src/react/markdown.d.ts +1 -6
- package/dist/src/react/markdown.d.ts.map +1 -1
- package/dist/src/react/markdown.js +1 -6
- package/dist/src/react/markdown.js.map +1 -1
- package/dist/src/react/media.d.ts +1 -17
- package/dist/src/react/media.d.ts.map +1 -1
- package/dist/src/react/media.js +1 -17
- package/dist/src/react/media.js.map +1 -1
- package/dist/src/refusal.d.ts +3 -0
- package/dist/src/refusal.d.ts.map +1 -0
- package/dist/src/refusal.js +3 -0
- package/dist/src/refusal.js.map +1 -0
- package/dist/src/spi/action-proposal-outcome-store.d.ts +43 -0
- package/dist/src/spi/action-proposal-outcome-store.d.ts.map +1 -0
- package/dist/src/spi/action-proposal-outcome-store.js +2 -0
- package/dist/src/spi/action-proposal-outcome-store.js.map +1 -0
- package/dist/src/spi/action-proposal-store.d.ts +152 -0
- package/dist/src/spi/action-proposal-store.d.ts.map +1 -0
- package/dist/src/spi/action-proposal-store.js +2 -0
- package/dist/src/spi/action-proposal-store.js.map +1 -0
- package/dist/src/spi/action-proposal-worker-store.d.ts +17 -0
- package/dist/src/spi/action-proposal-worker-store.d.ts.map +1 -0
- package/dist/src/spi/action-proposal-worker-store.js +2 -0
- package/dist/src/spi/action-proposal-worker-store.js.map +1 -0
- package/dist/src/spi/agent-runner.d.ts +6 -0
- package/dist/src/spi/agent-runner.d.ts.map +1 -1
- package/dist/src/spi/agent-store.d.ts +5 -0
- package/dist/src/spi/agent-store.d.ts.map +1 -1
- package/dist/src/spi/agent-store.js.map +1 -1
- package/dist/src/spi/approval-policy.d.ts +3 -0
- package/dist/src/spi/approval-policy.d.ts.map +1 -1
- package/dist/src/spi/approval-policy.js +8 -1
- package/dist/src/spi/approval-policy.js.map +1 -1
- package/dist/src/spi/background-actor-resolver.d.ts +9 -0
- package/dist/src/spi/background-actor-resolver.d.ts.map +1 -0
- package/dist/src/spi/background-actor-resolver.js +2 -0
- package/dist/src/spi/background-actor-resolver.js.map +1 -0
- package/dist/src/spi/chat-queue.d.ts +7 -1
- package/dist/src/spi/chat-queue.d.ts.map +1 -1
- package/dist/src/spi/chat-queue.js.map +1 -1
- package/dist/src/spi/protocol-adapter.d.ts +3 -3
- package/dist/src/spi/roles-policy.d.ts +7 -0
- package/dist/src/spi/roles-policy.d.ts.map +1 -1
- package/dist/src/spi/token-stream-sink.d.ts +9 -0
- package/dist/src/spi/token-stream-sink.d.ts.map +1 -1
- package/dist/src/spi/token-stream-sink.js.map +1 -1
- package/dist/src/spi/tool.d.ts +40 -3
- package/dist/src/spi/tool.d.ts.map +1 -1
- package/dist/src/sse.d.ts.map +1 -1
- package/dist/src/sse.js +6 -0
- package/dist/src/sse.js.map +1 -1
- package/dist/src/stores/lucid-action-proposal-store.d.ts +55 -0
- package/dist/src/stores/lucid-action-proposal-store.d.ts.map +1 -0
- package/dist/src/stores/lucid-action-proposal-store.js +465 -0
- package/dist/src/stores/lucid-action-proposal-store.js.map +1 -0
- package/dist/src/stores/lucid-schema.d.ts +8 -6
- package/dist/src/stores/lucid-schema.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.js +61 -6
- package/dist/src/stores/lucid-schema.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +4 -2
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +46 -14
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/stores/sqlite-transactions.d.ts +8 -0
- package/dist/src/stores/sqlite-transactions.d.ts.map +1 -0
- package/dist/src/stores/sqlite-transactions.js +24 -0
- package/dist/src/stores/sqlite-transactions.js.map +1 -0
- package/dist/src/stream-events.d.ts +4 -0
- package/dist/src/stream-events.d.ts.map +1 -1
- package/dist/src/testing/chat-queue-store-contract.d.ts.map +1 -1
- package/dist/src/testing/chat-queue-store-contract.js +4 -0
- package/dist/src/testing/chat-queue-store-contract.js.map +1 -1
- package/dist/src/testing/in-memory-action-proposal-store.d.ts +32 -0
- package/dist/src/testing/in-memory-action-proposal-store.d.ts.map +1 -0
- package/dist/src/testing/in-memory-action-proposal-store.js +159 -0
- package/dist/src/testing/in-memory-action-proposal-store.js.map +1 -0
- package/dist/src/testing/in-memory-store.d.ts +9 -1
- package/dist/src/testing/in-memory-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-store.js +80 -1
- package/dist/src/testing/in-memory-store.js.map +1 -1
- package/dist/src/testing/index.d.ts +1 -0
- package/dist/src/testing/index.d.ts.map +1 -1
- package/dist/src/testing/index.js +1 -0
- package/dist/src/testing/index.js.map +1 -1
- package/dist/src/tool-discovery.d.ts +1 -1
- package/dist/src/tool-discovery.d.ts.map +1 -1
- package/dist/src/tool-discovery.js +12 -1
- package/dist/src/tool-discovery.js.map +1 -1
- package/dist/src/tool-registry.d.ts +28 -1
- package/dist/src/tool-registry.d.ts.map +1 -1
- package/dist/src/tool-registry.js +85 -3
- package/dist/src/tool-registry.js.map +1 -1
- package/dist/src/tool-result-presentation.d.ts +12 -0
- package/dist/src/tool-result-presentation.d.ts.map +1 -0
- package/dist/src/tool-result-presentation.js +44 -0
- package/dist/src/tool-result-presentation.js.map +1 -0
- package/dist/src/tool-retry.d.ts +0 -11
- package/dist/src/tool-retry.d.ts.map +1 -1
- package/dist/src/tool-retry.js +5 -1
- package/dist/src/tool-retry.js.map +1 -1
- package/dist/src/tool-ui.d.ts +4 -1
- package/dist/src/tool-ui.d.ts.map +1 -1
- package/dist/src/tool-ui.js +32 -4
- package/dist/src/tool-ui.js.map +1 -1
- package/dist/src/types.d.ts +48 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/ui-capabilities.d.ts +2 -0
- package/dist/src/ui-capabilities.d.ts.map +1 -0
- package/dist/src/ui-capabilities.js +4 -0
- package/dist/src/ui-capabilities.js.map +1 -0
- package/dist/stubs/database/migrations/add_action_proposal_discovery.stub +24 -0
- package/dist/stubs/database/migrations/add_action_proposal_runtime.stub +19 -0
- package/dist/stubs/database/migrations/create_agent_tables.stub +3 -3
- package/package.json +123 -22
- package/skills/agent-governance/SKILL.md +12 -4
- package/skills/agent-personas-agents/SKILL.md +2 -1
- package/skills/agent-setup/SKILL.md +36 -13
- package/skills/agent-testing/SKILL.md +22 -0
- package/skills/agent-tools/SKILL.md +54 -9
package/dist/src/agent-loop.js
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
import { DEFAULT_REFUSAL_REASON } from './refusal.js';
|
|
2
|
+
export { DEFAULT_REFUSAL_REASON } from './refusal.js';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
import { resolveActionProposalApproval } from './action-proposal-approval.js';
|
|
5
|
+
import { prepareActionProposal } from './action-proposal-preparation.js';
|
|
6
|
+
import { actionProposalReceipt } from './action-proposal-receipt.js';
|
|
1
7
|
import { danglingToolCallIds, settleDanglingToolCalls } from './dangling-tool-calls.js';
|
|
2
8
|
import { detachedDelivered, detachedStarted, } from './delegation.js';
|
|
3
9
|
import { publishAgentDelegated, publishAgentMessage, publishAgentRetrieved, publishAgentRunFinished, publishAgentRunStarted, publishAgentToolCall, publishAgentToolRetry, spannedAgent, } from './diagnostics.js';
|
|
4
10
|
import { ASK_TOOL_NAME, askInputSchema, askToolDefinition, DEFAULT_INTAKE_PREAMBLE, isHumanDecision, normalizeElicitationReply, settleElicitation, } from './elicitation.js';
|
|
5
11
|
import { buildMemoryBlock, offerMemories, REMEMBER_TOOL_NAME, rememberInputSchema, rememberToolDefinition, writeMemory, } from './memory.js';
|
|
6
|
-
import {
|
|
12
|
+
import { createNegotiatedUiCollector } from './negotiated-tool-ui.js';
|
|
13
|
+
import { personaFromTurn } from './personas.js';
|
|
7
14
|
import { createFrameBuffer, createIncrementalGate, gateTail, releaseGatedFrames, resolveGateLookback, resolveOutputGateMode, runInputProcessors, runOutputProcessors, } from './processors.js';
|
|
8
15
|
import { isReplayIntegrityError } from './replay-integrity.js';
|
|
9
16
|
import { buildSkillsBlock, loadSkill, offerSkills, SKILL_TOOL_NAME, skillInputSchema, skillToolDefinition, } from './skills.js';
|
|
@@ -12,9 +19,9 @@ import { withSelectedModel } from './spi/model-catalog.js';
|
|
|
12
19
|
import { estimateCost, resolveModelPrice, } from './spi/pricing-store.js';
|
|
13
20
|
import { OutputRejectedError, } from './spi/processors.js';
|
|
14
21
|
import { DEFAULT_STRUCTURED_OUTPUT_INSTRUCTION, repairInstruction, StructuredOutputError, validateStructured, } from './structured-output.js';
|
|
15
|
-
import { ToolForbiddenError, ToolInputInvalidError } from './tool-registry.js';
|
|
22
|
+
import { ToolForbiddenError, ToolInputInvalidError, ToolPreflightDeniedError, } from './tool-registry.js';
|
|
16
23
|
import { invokeWithTransientRetry } from './tool-retry.js';
|
|
17
|
-
import { createNoopEmitUi,
|
|
24
|
+
import { createNoopEmitUi, escapeUnsafeToolUiText, mergeUi, unwrapToolStepOutput, wrapToolStepOutput, } from './tool-ui.js';
|
|
18
25
|
import { observeTurnFrames, withTurnFrames } from './turn-frames.js';
|
|
19
26
|
/** Renders retrieved passages as a numbered, citable context block appended to the system prompt. */
|
|
20
27
|
function buildContextBlock(passages) {
|
|
@@ -93,6 +100,7 @@ function promptContext(input, persona) {
|
|
|
93
100
|
actor: input.actor,
|
|
94
101
|
...(persona !== undefined ? { persona: personaFromTurn(persona) } : {}),
|
|
95
102
|
...(input.pageContext !== undefined ? { pageContext: input.pageContext } : {}),
|
|
103
|
+
...(input.uiCapabilities !== undefined ? { uiCapabilities: input.uiCapabilities } : {}),
|
|
96
104
|
};
|
|
97
105
|
}
|
|
98
106
|
/**
|
|
@@ -313,6 +321,7 @@ function threadForTurn(recorded) {
|
|
|
313
321
|
const messages = settleDanglingToolCalls((recorded?.messages ?? []).map(toModelMessage));
|
|
314
322
|
return {
|
|
315
323
|
messages,
|
|
324
|
+
actionApprovalMode: recorded?.actionApprovalMode ?? 'blocking',
|
|
316
325
|
title: recorded?.title ?? null,
|
|
317
326
|
hasAssistantMessage: recorded?.hasAssistantMessage ?? messages.some((message) => message.role === 'assistant'),
|
|
318
327
|
};
|
|
@@ -622,6 +631,7 @@ function elicitationContext(deps, input, hooks) {
|
|
|
622
631
|
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
623
632
|
...personaContext(input),
|
|
624
633
|
...(input.pageContext !== undefined ? { pageContext: input.pageContext } : {}),
|
|
634
|
+
...(input.uiCapabilities !== undefined ? { uiCapabilities: input.uiCapabilities } : {}),
|
|
625
635
|
...(deps.host !== undefined ? { host: deps.host } : {}),
|
|
626
636
|
};
|
|
627
637
|
}
|
|
@@ -653,6 +663,30 @@ const MESSAGE_TOOL_RESULTS_PATCH = 'agent:message-tool-results';
|
|
|
653
663
|
async function claimToolCall(turn, call) {
|
|
654
664
|
const { deps, input, hooks, messageId, writer } = turn;
|
|
655
665
|
const persona = personaOf(input);
|
|
666
|
+
const ctx = {
|
|
667
|
+
actor: input.actor,
|
|
668
|
+
threadId: input.threadId,
|
|
669
|
+
runId: hooks.runId,
|
|
670
|
+
requestId: hooks.runId,
|
|
671
|
+
// Replaced by the call's own collector inside its `tool:` step (see invokeClaimedTool); a
|
|
672
|
+
// kind that never reaches a handler keeps this no-op.
|
|
673
|
+
emitUi: createNoopEmitUi(call.id),
|
|
674
|
+
...(deps.onPresentationError !== undefined
|
|
675
|
+
? {
|
|
676
|
+
onPresentationError: (error, details) => deps.onPresentationError(error, {
|
|
677
|
+
...details,
|
|
678
|
+
toolCallId: call.id,
|
|
679
|
+
runId: hooks.runId,
|
|
680
|
+
threadId: input.threadId,
|
|
681
|
+
}),
|
|
682
|
+
}
|
|
683
|
+
: {}),
|
|
684
|
+
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
685
|
+
...(persona !== undefined ? { persona } : {}),
|
|
686
|
+
...(input.pageContext !== undefined ? { pageContext: input.pageContext } : {}),
|
|
687
|
+
...(input.uiCapabilities !== undefined ? { uiCapabilities: input.uiCapabilities } : {}),
|
|
688
|
+
...(deps.host !== undefined ? { host: deps.host } : {}),
|
|
689
|
+
};
|
|
656
690
|
const persisted = (await hooks.step(`persist:toolcall:${call.id}`, async () => {
|
|
657
691
|
// The kind the llm checkpoint stamped WINS: it came from the process that offered the tool,
|
|
658
692
|
// whereas this one is only the process claiming the call — and the two disagree exactly when
|
|
@@ -682,15 +716,138 @@ async function claimToolCall(turn, call) {
|
|
|
682
716
|
// set can both change while a run is parked, and the branch below (park or run) has to be the
|
|
683
717
|
// one the journal recorded. A run claimed before this existed reads `approval` back as
|
|
684
718
|
// undefined and waits on the requester, exactly as it did.
|
|
685
|
-
|
|
686
|
-
|
|
719
|
+
let actionApproval = call.actionApproval;
|
|
720
|
+
if (kind === 'action' &&
|
|
721
|
+
turn.actionApprovalMode === 'independent' &&
|
|
722
|
+
actionApproval === undefined)
|
|
723
|
+
actionApproval = await resolveActionProposalApproval({
|
|
724
|
+
actor: input.actor,
|
|
725
|
+
thread: {
|
|
726
|
+
threadId: input.threadId,
|
|
727
|
+
runId: hooks.runId,
|
|
728
|
+
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
729
|
+
},
|
|
730
|
+
tool: {
|
|
731
|
+
name: call.name,
|
|
732
|
+
kind: 'action',
|
|
733
|
+
...(deps.registry.spec(call.name) !== undefined
|
|
734
|
+
? { spec: deps.registry.spec(call.name) }
|
|
735
|
+
: {}),
|
|
736
|
+
},
|
|
737
|
+
store: deps.store,
|
|
738
|
+
...(deps.approvalPolicy !== undefined ? { policy: deps.approvalPolicy } : {}),
|
|
739
|
+
});
|
|
740
|
+
let preflight = call.preflight;
|
|
741
|
+
let prepared = call.prepared;
|
|
742
|
+
if (kind === 'action' && preflight === undefined && deps.registry.has(call.name)) {
|
|
743
|
+
try {
|
|
744
|
+
const allowedTools = intersectAllow(persona?.allowedTools, deps.toolAllowList);
|
|
745
|
+
if (turn.actionApprovalMode === 'independent' && actionApproval?.mode === 'ask') {
|
|
746
|
+
prepared = await prepareActionProposal(deps.registry, call.name, call.input, { ...ctx, toolCallId: call.id, idempotencyKey: `${hooks.runId}:${call.id}` }, deps.rolesPolicy, allowedTools === undefined ? {} : { allowedTools });
|
|
747
|
+
preflight = prepared.preflight;
|
|
748
|
+
}
|
|
749
|
+
else
|
|
750
|
+
preflight = await deps.registry.prepare(call.name, call.input, {
|
|
751
|
+
...ctx,
|
|
752
|
+
toolCallId: call.id,
|
|
753
|
+
idempotencyKey: `${hooks.runId}:${call.id}`,
|
|
754
|
+
}, deps.rolesPolicy, allowedTools === undefined ? {} : { allowedTools });
|
|
755
|
+
}
|
|
756
|
+
catch (error) {
|
|
757
|
+
if (isReplayIntegrityError(error) || hooks.isControlFlowError?.(error) === true)
|
|
758
|
+
throw error;
|
|
759
|
+
preflight = {
|
|
760
|
+
status: 'failed',
|
|
761
|
+
error: error instanceof Error ? error.message : String(error),
|
|
762
|
+
};
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
const early = preflight !== undefined && preflight.status !== 'ready';
|
|
766
|
+
let confirmation = preflight?.status === 'ready' ? preflight.confirmation : undefined;
|
|
767
|
+
const approval = kind === 'action' && !early
|
|
768
|
+
? (actionApproval ?? (await claimApproval(turn, call)))
|
|
769
|
+
: undefined;
|
|
770
|
+
let proposalId;
|
|
771
|
+
if (turn.actionApprovalMode === 'independent' && approval?.mode === 'ask') {
|
|
772
|
+
if (!prepared)
|
|
773
|
+
throw new Error('Independent action lacks trusted prepared input');
|
|
774
|
+
const store = deps.store;
|
|
775
|
+
if (typeof store.createActionProposal !== 'function')
|
|
776
|
+
throw new Error('Independent proposal store unavailable');
|
|
777
|
+
proposalId = `proposal-${createHash('sha256')
|
|
778
|
+
.update(JSON.stringify([hooks.runId, call.id]))
|
|
779
|
+
.digest('hex')}`;
|
|
780
|
+
const display = confirmation ??
|
|
781
|
+
deps.registry.spec(call.name)?.presentation?.confirm ?? {
|
|
782
|
+
title: `Allow ${call.name}?`,
|
|
783
|
+
verb: 'Approve',
|
|
784
|
+
};
|
|
785
|
+
const fill = (value) => value.replace(/\{([^}]+)\}/g, (_match, path) => {
|
|
786
|
+
let current = prepared.input;
|
|
787
|
+
for (const part of path.split('.'))
|
|
788
|
+
current =
|
|
789
|
+
current !== null && typeof current === 'object'
|
|
790
|
+
? current[part]
|
|
791
|
+
: undefined;
|
|
792
|
+
return current === undefined ? '' : String(current);
|
|
793
|
+
});
|
|
794
|
+
const create = prepared.replacementKey === undefined
|
|
795
|
+
? store.createActionProposal.bind(store)
|
|
796
|
+
: store.createReplacingActionProposal.bind(store);
|
|
797
|
+
const created = await create({
|
|
798
|
+
...(prepared.replacementKey !== undefined
|
|
799
|
+
? { replacementKey: prepared.replacementKey }
|
|
800
|
+
: {}),
|
|
801
|
+
id: proposalId,
|
|
802
|
+
tenantRef: input.actor.tenantRef ?? null,
|
|
803
|
+
actorRef: input.actor.id,
|
|
804
|
+
threadId: input.threadId,
|
|
805
|
+
originRunId: hooks.runId,
|
|
806
|
+
originMessageId: messageId,
|
|
807
|
+
originToolCallId: call.id,
|
|
808
|
+
toolName: call.name,
|
|
809
|
+
input: prepared.input,
|
|
810
|
+
preparationInput: prepared.preparationInput,
|
|
811
|
+
executionContext: {
|
|
812
|
+
requestId: hooks.runId,
|
|
813
|
+
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
814
|
+
...(persona !== undefined ? { persona: persona.id } : {}),
|
|
815
|
+
...(input.pageContext !== undefined ? { pageContext: input.pageContext } : {}),
|
|
816
|
+
...(input.uiCapabilities !== undefined ? { uiCapabilities: input.uiCapabilities } : {}),
|
|
817
|
+
},
|
|
818
|
+
confirmation: confirmation ?? {
|
|
819
|
+
title: fill(display.title),
|
|
820
|
+
verb: fill(display.verb),
|
|
821
|
+
...(display.detail !== undefined ? { detail: fill(display.detail) } : {}),
|
|
822
|
+
},
|
|
823
|
+
approver: approval.approver,
|
|
824
|
+
expiresAt: approval.expiresAt === undefined ? null : Date.parse(approval.expiresAt),
|
|
825
|
+
idempotencyKey: `${hooks.runId}:${call.id}`,
|
|
826
|
+
});
|
|
827
|
+
if (created.status === 'conflict')
|
|
828
|
+
throw new Error('Action proposal replay payload conflict');
|
|
829
|
+
confirmation = created.proposal?.confirmation ?? confirmation;
|
|
830
|
+
}
|
|
831
|
+
const parks = kind === 'ask' || (approval?.mode === 'ask' && proposalId === undefined);
|
|
687
832
|
await deps.store.recordToolCall({
|
|
688
833
|
toolCallId: call.id,
|
|
689
834
|
messageId,
|
|
690
835
|
toolName: call.name,
|
|
691
836
|
toolType: awaitsHuman ? 'action' : 'read',
|
|
692
837
|
input: call.input,
|
|
693
|
-
|
|
838
|
+
...(proposalId !== undefined ? { proposalId } : {}),
|
|
839
|
+
status: proposalId !== undefined
|
|
840
|
+
? 'proposed'
|
|
841
|
+
: early
|
|
842
|
+
? preflight?.status === 'denied'
|
|
843
|
+
? 'rejected'
|
|
844
|
+
: preflight?.status === 'failed'
|
|
845
|
+
? 'failed'
|
|
846
|
+
: 'executed'
|
|
847
|
+
: parks
|
|
848
|
+
? 'pending_approval'
|
|
849
|
+
: 'auto_executed',
|
|
850
|
+
...(confirmation !== undefined ? { confirmation } : {}),
|
|
694
851
|
runId: hooks.runId,
|
|
695
852
|
...(approval !== undefined && approval.mode !== 'auto'
|
|
696
853
|
? { approver: approval.approver }
|
|
@@ -699,6 +856,19 @@ async function claimToolCall(turn, call) {
|
|
|
699
856
|
? { expiresAt: approval.expiresAt }
|
|
700
857
|
: {}),
|
|
701
858
|
});
|
|
859
|
+
if (early) {
|
|
860
|
+
await deps.store.updateToolCall({
|
|
861
|
+
toolCallId: call.id,
|
|
862
|
+
status: preflight?.status === 'denied'
|
|
863
|
+
? 'rejected'
|
|
864
|
+
: preflight?.status === 'failed'
|
|
865
|
+
? 'failed'
|
|
866
|
+
: 'executed',
|
|
867
|
+
...(preflight?.status === 'completed' ? { output: preflight.output } : {}),
|
|
868
|
+
...(preflight?.status === 'denied' ? { error: preflight.reason } : {}),
|
|
869
|
+
...(preflight?.status === 'failed' ? { error: preflight.error } : {}),
|
|
870
|
+
});
|
|
871
|
+
}
|
|
702
872
|
// Written from INSIDE this checkpoint, so the frame is streamed once and a replay — which
|
|
703
873
|
// returns the memoized result without re-running the body — never re-posts a form for a
|
|
704
874
|
// decision already made. That is also why it spends no position of its own.
|
|
@@ -708,11 +878,15 @@ async function claimToolCall(turn, call) {
|
|
|
708
878
|
if (approval?.mode === 'ask') {
|
|
709
879
|
await writer.write({
|
|
710
880
|
t: 'approval',
|
|
881
|
+
...(proposalId !== undefined
|
|
882
|
+
? { target: { kind: 'proposal', proposalId } }
|
|
883
|
+
: {}),
|
|
711
884
|
runId: hooks.runId,
|
|
712
885
|
id: call.id,
|
|
713
886
|
toolName: call.name,
|
|
714
887
|
input: call.input,
|
|
715
888
|
approver: approval.approver,
|
|
889
|
+
...(confirmation !== undefined ? { confirmation } : {}),
|
|
716
890
|
...(approval.expiresAt !== undefined ? { expiresAt: approval.expiresAt } : {}),
|
|
717
891
|
});
|
|
718
892
|
}
|
|
@@ -721,8 +895,13 @@ async function claimToolCall(turn, call) {
|
|
|
721
895
|
const terminal = deps.registry.spec(call.name)?.terminal === true;
|
|
722
896
|
return {
|
|
723
897
|
kind,
|
|
898
|
+
...(proposalId !== undefined ? { proposalId } : {}),
|
|
899
|
+
...(preflight !== undefined ? { preflight } : {}),
|
|
724
900
|
...(approval !== undefined ? { approval } : {}),
|
|
725
901
|
...(terminal ? { terminal: true } : {}),
|
|
902
|
+
...(preflight?.status === 'completed' && deps.registry.hasPresentation(call.name)
|
|
903
|
+
? { presentCompletedPreflight: true }
|
|
904
|
+
: {}),
|
|
726
905
|
};
|
|
727
906
|
}));
|
|
728
907
|
// A checkpoint written before the kind was journaled carries no output. Such a run is already
|
|
@@ -732,24 +911,15 @@ async function claimToolCall(turn, call) {
|
|
|
732
911
|
return {
|
|
733
912
|
call,
|
|
734
913
|
toolType,
|
|
914
|
+
...(persisted?.preflight !== undefined ? { preflight: persisted.preflight } : {}),
|
|
735
915
|
...(persisted?.terminal === true ? { terminal: true } : {}),
|
|
916
|
+
...(persisted?.presentCompletedPreflight === true ? { presentCompletedPreflight: true } : {}),
|
|
917
|
+
...(persisted?.proposalId !== undefined ? { proposalId: persisted.proposalId } : {}),
|
|
736
918
|
...(persisted?.delegation !== undefined ? { delegation: persisted.delegation } : {}),
|
|
737
919
|
...(toolType === 'action' && persisted?.approval !== undefined
|
|
738
920
|
? { approval: persisted.approval }
|
|
739
921
|
: {}),
|
|
740
|
-
ctx
|
|
741
|
-
actor: input.actor,
|
|
742
|
-
threadId: input.threadId,
|
|
743
|
-
runId: hooks.runId,
|
|
744
|
-
requestId: hooks.runId,
|
|
745
|
-
// Replaced by the call's own collector inside its `tool:` step (see invokeClaimedTool); a
|
|
746
|
-
// kind that never reaches a handler keeps this no-op.
|
|
747
|
-
emitUi: createNoopEmitUi(call.id),
|
|
748
|
-
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
749
|
-
...(persona !== undefined ? { persona } : {}),
|
|
750
|
-
...(input.pageContext !== undefined ? { pageContext: input.pageContext } : {}),
|
|
751
|
-
...(deps.host !== undefined ? { host: deps.host } : {}),
|
|
752
|
-
},
|
|
922
|
+
ctx,
|
|
753
923
|
};
|
|
754
924
|
}
|
|
755
925
|
/**
|
|
@@ -811,20 +981,22 @@ function spanToolType(kind) {
|
|
|
811
981
|
}
|
|
812
982
|
return kind === 'skill' || kind === 'memory' ? 'read' : kind;
|
|
813
983
|
}
|
|
814
|
-
async function invokeClaimedTool(turn, claimed) {
|
|
984
|
+
async function invokeClaimedTool(turn, claimed, presentationOnly) {
|
|
815
985
|
const { deps, hooks } = turn;
|
|
816
986
|
const { call, ctx, toolType } = claimed;
|
|
817
|
-
//
|
|
818
|
-
|
|
819
|
-
const
|
|
820
|
-
const invokeOptions = personaAllow === undefined
|
|
821
|
-
? {}
|
|
822
|
-
: { allowedTools: intersectAllowLists(deps.toolAllowList, personaAllow) ?? [] };
|
|
987
|
+
// Execution retains every narrowing the offer and preparation had, including an agent-only list.
|
|
988
|
+
const allowedTools = intersectAllow(personaOf(turn.input)?.allowedTools, deps.toolAllowList);
|
|
989
|
+
const invokeOptions = allowedTools === undefined ? {} : { allowedTools };
|
|
823
990
|
try {
|
|
824
991
|
const raw = await hooks.step(`tool:${call.id}`, async () => {
|
|
825
992
|
// Pushed components stream as they happen and ride this step's RESULT into the journal (see
|
|
826
993
|
// `wrapToolStepOutput`), so a replay neither re-streams nor re-persists them.
|
|
827
|
-
const ui =
|
|
994
|
+
const ui = createNegotiatedUiCollector(call.id, {
|
|
995
|
+
actor: ctx.actor,
|
|
996
|
+
threadId: ctx.threadId,
|
|
997
|
+
...(ctx.agentName !== undefined ? { agentName: ctx.agentName } : {}),
|
|
998
|
+
...(ctx.uiCapabilities !== undefined ? { uiCapabilities: ctx.uiCapabilities } : {}),
|
|
999
|
+
}, deps.resolveUiCatalog, turn.writer);
|
|
828
1000
|
const toolCtx = {
|
|
829
1001
|
...ctx,
|
|
830
1002
|
// The same for every execution of THIS call (a replay after a crash, a transient retry).
|
|
@@ -838,31 +1010,56 @@ async function invokeClaimedTool(turn, claimed) {
|
|
|
838
1010
|
: { value: data });
|
|
839
1011
|
},
|
|
840
1012
|
};
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
}, deps.toolTransientRetry ?? {}, {
|
|
850
|
-
...(hooks.isControlFlowError !== undefined
|
|
851
|
-
? { isControlFlowError: hooks.isControlFlowError }
|
|
852
|
-
: {}),
|
|
853
|
-
onRetry: (attempt, retryError) => {
|
|
854
|
-
publishAgentToolRetry({
|
|
1013
|
+
let output;
|
|
1014
|
+
try {
|
|
1015
|
+
if (presentationOnly !== undefined) {
|
|
1016
|
+
output = presentationOnly.output;
|
|
1017
|
+
await deps.registry.presentResult(call.name, output, toolCtx);
|
|
1018
|
+
}
|
|
1019
|
+
else {
|
|
1020
|
+
output = await spannedAgent('tool.execution', hooks.runId, {
|
|
855
1021
|
runId: hooks.runId,
|
|
856
|
-
toolName: call.name,
|
|
857
1022
|
toolCallId: call.id,
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
})
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
1023
|
+
toolName: call.name,
|
|
1024
|
+
toolType: spanToolType(toolType),
|
|
1025
|
+
}, () => invokeWithTransientRetry(() => {
|
|
1026
|
+
ui.restart();
|
|
1027
|
+
return deps.registry.invoke(call.name, call.input, toolCtx, deps.rolesPolicy, invokeOptions);
|
|
1028
|
+
}, deps.toolTransientRetry ?? {}, {
|
|
1029
|
+
...(hooks.isControlFlowError !== undefined
|
|
1030
|
+
? { isControlFlowError: hooks.isControlFlowError }
|
|
1031
|
+
: {}),
|
|
1032
|
+
onRetry: (attempt, retryError) => {
|
|
1033
|
+
publishAgentToolRetry({
|
|
1034
|
+
runId: hooks.runId,
|
|
1035
|
+
toolName: call.name,
|
|
1036
|
+
toolCallId: call.id,
|
|
1037
|
+
attempt,
|
|
1038
|
+
message: retryError instanceof Error ? retryError.message : String(retryError),
|
|
1039
|
+
});
|
|
1040
|
+
},
|
|
1041
|
+
}), () => ({}));
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
catch (error) {
|
|
1045
|
+
// A domain refusal is a settled result, so a durable replay must not re-run the check.
|
|
1046
|
+
if (!(error instanceof ToolPreflightDeniedError))
|
|
1047
|
+
throw error;
|
|
1048
|
+
return { '@@adonis-agent/tool-preflight-denied': 1, reason: error.reason };
|
|
1049
|
+
}
|
|
1050
|
+
return wrapToolStepOutput(output, ui.components(), ui.text());
|
|
864
1051
|
});
|
|
865
|
-
|
|
1052
|
+
if (typeof raw === 'object' &&
|
|
1053
|
+
raw !== null &&
|
|
1054
|
+
'@@adonis-agent/tool-preflight-denied' in raw &&
|
|
1055
|
+
raw['@@adonis-agent/tool-preflight-denied'] === 1 &&
|
|
1056
|
+
'reason' in raw &&
|
|
1057
|
+
typeof raw.reason === 'string') {
|
|
1058
|
+
return { status: 'failed', error: raw.reason, denied: true };
|
|
1059
|
+
}
|
|
1060
|
+
const { output, ui, text } = unwrapToolStepOutput(raw);
|
|
1061
|
+
if (text)
|
|
1062
|
+
turn.toolText.set(call.id, text);
|
|
866
1063
|
if (ui.length > 0) {
|
|
867
1064
|
turn.toolUi.set(call.id, ui);
|
|
868
1065
|
}
|
|
@@ -875,7 +1072,11 @@ async function invokeClaimedTool(turn, claimed) {
|
|
|
875
1072
|
if (isReplayIntegrityError(error) || hooks.isControlFlowError?.(error) === true) {
|
|
876
1073
|
throw error;
|
|
877
1074
|
}
|
|
878
|
-
return {
|
|
1075
|
+
return {
|
|
1076
|
+
status: 'failed',
|
|
1077
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1078
|
+
...(error instanceof ToolPreflightDeniedError ? { denied: true } : {}),
|
|
1079
|
+
};
|
|
879
1080
|
}
|
|
880
1081
|
}
|
|
881
1082
|
/** Persist one settled invocation and shape the result the model is fed. */
|
|
@@ -922,7 +1123,13 @@ async function recordToolOutcome(turn, claimed, outcome, deciderRef = turn.input
|
|
|
922
1123
|
await settle();
|
|
923
1124
|
});
|
|
924
1125
|
publishAgentToolCall({ runId: hooks.runId, toolName: call.name, toolType, status: 'failed' });
|
|
925
|
-
return {
|
|
1126
|
+
return {
|
|
1127
|
+
id: call.id,
|
|
1128
|
+
name: call.name,
|
|
1129
|
+
output: outcome.denied ? { reason: outcome.error } : null,
|
|
1130
|
+
error: outcome.error,
|
|
1131
|
+
...(outcome.denied ? { denied: true } : {}),
|
|
1132
|
+
};
|
|
926
1133
|
}
|
|
927
1134
|
await hooks.step(`persist:toolexec:${call.id}`, async () => {
|
|
928
1135
|
await deps.store.updateToolCall({
|
|
@@ -986,14 +1193,95 @@ async function delegateToolCall(turn, claimed) {
|
|
|
986
1193
|
* what puts the kind in the journal — so the branch a call takes is a fact about the turn rather
|
|
987
1194
|
* than about whichever process happened to replay it (see {@link claimToolCall}).
|
|
988
1195
|
*
|
|
989
|
-
*
|
|
990
|
-
*
|
|
1196
|
+
* Provider-supplied preparation is discarded. The trusted result rides this same model checkpoint
|
|
1197
|
+
* so a process that first claims the call without its handler still follows the offering process's verdict.
|
|
991
1198
|
*/
|
|
992
|
-
function stampToolKinds(result, deps) {
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
1199
|
+
async function stampToolKinds(result, deps, input, hooks) {
|
|
1200
|
+
const persona = personaOf(input);
|
|
1201
|
+
const allowedTools = intersectAllow(persona?.allowedTools, deps.toolAllowList);
|
|
1202
|
+
const toolCalls = [];
|
|
1203
|
+
for (const incoming of result.toolCalls) {
|
|
1204
|
+
// The provider cannot supply trusted preparation. Resolve it only where the tool was offered.
|
|
1205
|
+
const { preflight: _untrusted, prepared: _untrustedPrepared, actionApproval: _untrustedApproval, ...call } = incoming;
|
|
1206
|
+
const kind = declaredKind(deps, call.name);
|
|
1207
|
+
let preflight;
|
|
1208
|
+
let prepared;
|
|
1209
|
+
let actionApproval;
|
|
1210
|
+
if (kind === 'action') {
|
|
1211
|
+
try {
|
|
1212
|
+
if (deps.actionApprovalMode === 'independent')
|
|
1213
|
+
actionApproval = await resolveActionProposalApproval({
|
|
1214
|
+
actor: input.actor,
|
|
1215
|
+
thread: {
|
|
1216
|
+
threadId: input.threadId,
|
|
1217
|
+
runId: hooks.runId,
|
|
1218
|
+
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
1219
|
+
},
|
|
1220
|
+
tool: {
|
|
1221
|
+
name: call.name,
|
|
1222
|
+
kind: 'action',
|
|
1223
|
+
...(deps.registry.spec(call.name) !== undefined
|
|
1224
|
+
? { spec: deps.registry.spec(call.name) }
|
|
1225
|
+
: {}),
|
|
1226
|
+
},
|
|
1227
|
+
store: deps.store,
|
|
1228
|
+
...(deps.approvalPolicy !== undefined ? { policy: deps.approvalPolicy } : {}),
|
|
1229
|
+
});
|
|
1230
|
+
if (deps.actionApprovalMode === 'independent' && actionApproval?.mode === 'ask') {
|
|
1231
|
+
prepared = await prepareActionProposal(deps.registry, call.name, call.input, {
|
|
1232
|
+
actor: input.actor,
|
|
1233
|
+
threadId: input.threadId,
|
|
1234
|
+
runId: hooks.runId,
|
|
1235
|
+
requestId: hooks.runId,
|
|
1236
|
+
toolCallId: call.id,
|
|
1237
|
+
idempotencyKey: `${hooks.runId}:${call.id}`,
|
|
1238
|
+
emitUi: createNoopEmitUi(call.id),
|
|
1239
|
+
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
1240
|
+
...(persona !== undefined ? { persona } : {}),
|
|
1241
|
+
...(input.pageContext !== undefined ? { pageContext: input.pageContext } : {}),
|
|
1242
|
+
...(input.uiCapabilities !== undefined
|
|
1243
|
+
? { uiCapabilities: input.uiCapabilities }
|
|
1244
|
+
: {}),
|
|
1245
|
+
...(deps.host !== undefined ? { host: deps.host } : {}),
|
|
1246
|
+
}, deps.rolesPolicy, allowedTools === undefined ? {} : { allowedTools });
|
|
1247
|
+
preflight = prepared.preflight;
|
|
1248
|
+
}
|
|
1249
|
+
else
|
|
1250
|
+
preflight = await deps.registry.prepare(call.name, call.input, {
|
|
1251
|
+
actor: input.actor,
|
|
1252
|
+
threadId: input.threadId,
|
|
1253
|
+
runId: hooks.runId,
|
|
1254
|
+
requestId: hooks.runId,
|
|
1255
|
+
toolCallId: call.id,
|
|
1256
|
+
idempotencyKey: `${hooks.runId}:${call.id}`,
|
|
1257
|
+
emitUi: createNoopEmitUi(call.id),
|
|
1258
|
+
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
1259
|
+
...(persona !== undefined ? { persona } : {}),
|
|
1260
|
+
...(input.pageContext !== undefined ? { pageContext: input.pageContext } : {}),
|
|
1261
|
+
...(input.uiCapabilities !== undefined
|
|
1262
|
+
? { uiCapabilities: input.uiCapabilities }
|
|
1263
|
+
: {}),
|
|
1264
|
+
...(deps.host !== undefined ? { host: deps.host } : {}),
|
|
1265
|
+
}, deps.rolesPolicy, allowedTools === undefined ? {} : { allowedTools });
|
|
1266
|
+
}
|
|
1267
|
+
catch (error) {
|
|
1268
|
+
if (isReplayIntegrityError(error) || hooks.isControlFlowError?.(error) === true)
|
|
1269
|
+
throw error;
|
|
1270
|
+
preflight = {
|
|
1271
|
+
status: 'failed',
|
|
1272
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1273
|
+
};
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1276
|
+
toolCalls.push({
|
|
1277
|
+
...call,
|
|
1278
|
+
...(actionApproval !== undefined ? { actionApproval } : {}),
|
|
1279
|
+
kind,
|
|
1280
|
+
...(prepared !== undefined ? { prepared } : {}),
|
|
1281
|
+
...(preflight !== undefined ? { preflight } : {}),
|
|
1282
|
+
});
|
|
1283
|
+
}
|
|
1284
|
+
return { ...result, toolCalls };
|
|
997
1285
|
}
|
|
998
1286
|
/**
|
|
999
1287
|
* A call's declared kind, resolved from this process's own configuration and registry.
|
|
@@ -1077,6 +1365,7 @@ function skillContext(input) {
|
|
|
1077
1365
|
threadId: input.threadId,
|
|
1078
1366
|
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
1079
1367
|
...(input.pageContext !== undefined ? { pageContext: input.pageContext } : {}),
|
|
1368
|
+
...(input.uiCapabilities !== undefined ? { uiCapabilities: input.uiCapabilities } : {}),
|
|
1080
1369
|
};
|
|
1081
1370
|
}
|
|
1082
1371
|
/**
|
|
@@ -1200,6 +1489,31 @@ function invokeClaimed(turn, claimed) {
|
|
|
1200
1489
|
async function runClaimedToolCall(turn, claimed) {
|
|
1201
1490
|
const { deps, hooks } = turn;
|
|
1202
1491
|
const { call, toolType, ctx } = claimed;
|
|
1492
|
+
if (claimed.proposalId !== undefined) {
|
|
1493
|
+
turn.halt.independentProposal = true;
|
|
1494
|
+
return { id: call.id, name: call.name, output: actionProposalReceipt(claimed.proposalId) };
|
|
1495
|
+
}
|
|
1496
|
+
if (claimed.preflight !== undefined && claimed.preflight.status !== 'ready') {
|
|
1497
|
+
const result = claimed.preflight;
|
|
1498
|
+
if (result.status === 'completed') {
|
|
1499
|
+
// The claim freezes this branch: adding/removing a hook in a rolling deployment must
|
|
1500
|
+
// not change existing checkpoint positions. Old claims have no opt-in and skip UI.
|
|
1501
|
+
if (claimed.presentCompletedPreflight === true) {
|
|
1502
|
+
await invokeClaimedTool(turn, claimed, { output: result.output });
|
|
1503
|
+
}
|
|
1504
|
+
if (claimed.terminal === true)
|
|
1505
|
+
turn.halt.terminal = true;
|
|
1506
|
+
return { id: call.id, name: call.name, output: result.output };
|
|
1507
|
+
}
|
|
1508
|
+
const reason = result.status === 'denied' ? result.reason : result.error;
|
|
1509
|
+
return {
|
|
1510
|
+
id: call.id,
|
|
1511
|
+
name: call.name,
|
|
1512
|
+
output: result.status === 'denied' ? { reason } : null,
|
|
1513
|
+
error: reason,
|
|
1514
|
+
...(result.status === 'denied' ? { denied: true } : {}),
|
|
1515
|
+
};
|
|
1516
|
+
}
|
|
1203
1517
|
if (toolType === 'agent') {
|
|
1204
1518
|
return delegateToolCall(turn, claimed);
|
|
1205
1519
|
}
|
|
@@ -1332,8 +1646,6 @@ function expiryNarrative() {
|
|
|
1332
1646
|
'Nothing ran and nothing changed. Do not run it again on your own; tell the person it was not ' +
|
|
1333
1647
|
'approved in time and ask whether they still want it.');
|
|
1334
1648
|
}
|
|
1335
|
-
/** Stored as the reason when someone declines without giving one — a placeholder, not a quote. */
|
|
1336
|
-
export const DEFAULT_REFUSAL_REASON = 'rejected by user';
|
|
1337
1649
|
/**
|
|
1338
1650
|
* How a refusal is put to the model. Written as instructions rather than as a status because the
|
|
1339
1651
|
* model's next move is the whole problem: told only that something was "rejected", it treats the
|
|
@@ -1704,7 +2016,9 @@ export async function runAgentLoop(boundDeps, requested, hooks) {
|
|
|
1704
2016
|
...(input.attachments !== undefined ? { attachments: input.attachments } : {}),
|
|
1705
2017
|
}));
|
|
1706
2018
|
}
|
|
1707
|
-
const thread = threadForTurn(await hooks.step('load:thread', () => readThreadForTurn(deps, input.threadId, turnMessageLimit(deps.historyWindow)))
|
|
2019
|
+
const thread = threadForTurn(await hooks.step('load:thread', () => readThreadForTurn(deps, input.threadId, turnMessageLimit(deps.historyWindow)).then((loaded) => loaded === null
|
|
2020
|
+
? { messages: [], actionApprovalMode: deps.actionApprovalMode ?? 'blocking' }
|
|
2021
|
+
: { ...loaded, actionApprovalMode: deps.actionApprovalMode ?? 'blocking' })));
|
|
1708
2022
|
// With no window configured this whole block is skipped, so an existing deployment sends the
|
|
1709
2023
|
// messages `load:thread` returned and records byte-identical checkpoints.
|
|
1710
2024
|
let modelMessages = thread.messages;
|
|
@@ -1884,6 +2198,7 @@ export async function runAgentLoop(boundDeps, requested, hooks) {
|
|
|
1884
2198
|
const tools = withBuiltInTools({
|
|
1885
2199
|
tools: await deps.registry.definitionsFor(input.actor, deps.rolesPolicy, intersectAllow(persona?.allowedTools, deps.toolAllowList), {
|
|
1886
2200
|
threadId: input.threadId,
|
|
2201
|
+
...(input.uiCapabilities !== undefined ? { uiCapabilities: input.uiCapabilities } : {}),
|
|
1887
2202
|
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
1888
2203
|
}),
|
|
1889
2204
|
ask: deps.ask,
|
|
@@ -1945,7 +2260,7 @@ export async function runAgentLoop(boundDeps, requested, hooks) {
|
|
|
1945
2260
|
outputTokens: result.usage.outputTokens,
|
|
1946
2261
|
textLength: result.text.length,
|
|
1947
2262
|
toolCalls: result.toolCalls.length,
|
|
1948
|
-
})), deps));
|
|
2263
|
+
})), { ...deps, actionApprovalMode: thread.actionApprovalMode ?? 'blocking' }, input, hooks));
|
|
1949
2264
|
// The gate runs before ANYTHING downstream: before the held frames reach the subscriber, before
|
|
1950
2265
|
// the assistant message is persisted, before this text becomes the next step's context.
|
|
1951
2266
|
let rejection;
|
|
@@ -2171,7 +2486,9 @@ export async function runAgentLoop(boundDeps, requested, hooks) {
|
|
|
2171
2486
|
messageId: assistant.id,
|
|
2172
2487
|
writer,
|
|
2173
2488
|
toolUi: new Map(),
|
|
2489
|
+
toolText: new Map(),
|
|
2174
2490
|
halt: { terminal: false },
|
|
2491
|
+
actionApprovalMode: thread.actionApprovalMode ?? 'blocking',
|
|
2175
2492
|
...(skillOffer !== undefined ? { skills: skillOffer } : {}),
|
|
2176
2493
|
...(memoryDigest !== undefined ? { memory: memoryDigest } : {}),
|
|
2177
2494
|
};
|
|
@@ -2231,6 +2548,16 @@ export async function runAgentLoop(boundDeps, requested, hooks) {
|
|
|
2231
2548
|
await deps.store.setMessageToolResults(assistant.id, [...results, ...syntheticResults]);
|
|
2232
2549
|
// What the tools pushed joins what the model turn streamed, on the same message, in call
|
|
2233
2550
|
// order. Every list here was read off a checkpoint above, so a replay writes the same value.
|
|
2551
|
+
const fallbackText = escapeUnsafeToolUiText(turn.toolCalls
|
|
2552
|
+
.map((call) => turnCalls.toolText.get(call.id))
|
|
2553
|
+
.filter(Boolean)
|
|
2554
|
+
.join('\n'));
|
|
2555
|
+
if (fallbackText)
|
|
2556
|
+
await deps.store.appendMessage({
|
|
2557
|
+
threadId: input.threadId,
|
|
2558
|
+
role: 'assistant',
|
|
2559
|
+
content: fallbackText,
|
|
2560
|
+
});
|
|
2234
2561
|
const toolUi = turn.toolCalls.flatMap((call) => turnCalls.toolUi.get(call.id) ?? []);
|
|
2235
2562
|
if (toolUi.length > 0) {
|
|
2236
2563
|
await deps.store.setMessageUi?.(assistant.id, mergeUi(turn.ui, toolUi));
|
|
@@ -2244,9 +2571,17 @@ export async function runAgentLoop(boundDeps, requested, hooks) {
|
|
|
2244
2571
|
});
|
|
2245
2572
|
}
|
|
2246
2573
|
modelMessages.push({ role: 'user', content: '', toolResults: results });
|
|
2574
|
+
const toolText = escapeUnsafeToolUiText(turn.toolCalls
|
|
2575
|
+
.map((call) => turnCalls.toolText.get(call.id))
|
|
2576
|
+
.filter(Boolean)
|
|
2577
|
+
.join('\n'));
|
|
2578
|
+
if (toolText) {
|
|
2579
|
+
modelMessages.push({ role: 'assistant', content: toolText });
|
|
2580
|
+
lastText += `\n${toolText}`;
|
|
2581
|
+
}
|
|
2247
2582
|
// A `terminal` tool succeeded: its effect is the answer, so no model call narrates it. Read off
|
|
2248
2583
|
// the calls' `persist:toolcall` checkpoints and their outcomes, so a replay ends here too.
|
|
2249
|
-
if (turnCalls.halt.terminal) {
|
|
2584
|
+
if (turnCalls.halt.terminal || turnCalls.halt.independentProposal) {
|
|
2250
2585
|
break;
|
|
2251
2586
|
}
|
|
2252
2587
|
}
|