@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/mcp/server.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
1
2
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
3
|
import { toJsonSchemaCompat } from '@modelcontextprotocol/sdk/server/zod-json-schema-compat.js';
|
|
3
4
|
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
@@ -10,11 +11,16 @@ import { createNoopEmitUi } from '../tool-ui.js';
|
|
|
10
11
|
*/
|
|
11
12
|
const LOOP_SERVED_KINDS = new Set(['agent', 'ask', 'skill', 'memory']);
|
|
12
13
|
/** Whether this tool may be reached over MCP at all — the same answer for listing and for calling. */
|
|
13
|
-
function isExposable(
|
|
14
|
-
if (LOOP_SERVED_KINDS.has(kind)) {
|
|
14
|
+
function isExposable(spec, actions) {
|
|
15
|
+
if (spec === undefined || LOOP_SERVED_KINDS.has(spec.kind)) {
|
|
15
16
|
return false;
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
+
// A tool whose result is shown elsewhere (a generative-UI `ui__show_*` / `ui__render`) only
|
|
19
|
+
// pushes a component; over MCP there is no screen, and the model would get nothing back.
|
|
20
|
+
if (spec.presentation?.result?.kind === 'elsewhere') {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
return spec.kind !== 'action' || actions === 'execute';
|
|
18
24
|
}
|
|
19
25
|
/**
|
|
20
26
|
* True for a Zod schema (tags its Standard Schema props with `vendor: 'zod'`). Narrows to the SDK's
|
|
@@ -70,33 +76,59 @@ function toJsonSchema(schema) {
|
|
|
70
76
|
export function createMcpServer(options) {
|
|
71
77
|
const { registry, policy, allowedTools, actorFromAuth, idsFromRequest } = options;
|
|
72
78
|
const actions = options.actions ?? 'refuse';
|
|
73
|
-
const server = new Server({ name: options.name, version: options.version }, {
|
|
74
|
-
|
|
79
|
+
const server = new Server({ name: options.name, version: options.version }, {
|
|
80
|
+
capabilities: { tools: {} },
|
|
81
|
+
...(options.instructions !== undefined ? { instructions: options.instructions } : {}),
|
|
82
|
+
});
|
|
83
|
+
const buildCtx = (authInfo, sessionId, requestId) => {
|
|
75
84
|
const actor = actorFromAuth(authInfo);
|
|
76
85
|
const ids = idsFromRequest
|
|
77
|
-
? idsFromRequest(sessionId,
|
|
86
|
+
? idsFromRequest(sessionId, requestId)
|
|
78
87
|
: {
|
|
79
88
|
threadId: `mcp:${sessionId ?? actor.id}`,
|
|
80
89
|
runId: `mcp:${sessionId ?? 'run'}`,
|
|
81
90
|
requestId: `mcp:${sessionId ?? 'req'}`,
|
|
82
91
|
};
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
|
|
92
|
+
// Each `tools/call` is one call of its own: no runtime replays it, so its id — and the
|
|
93
|
+
// idempotency key a tool writes with — is fresh per call.
|
|
94
|
+
const toolCallId = `mcp-call:${randomUUID()}`;
|
|
95
|
+
return {
|
|
96
|
+
actor,
|
|
97
|
+
...ids,
|
|
98
|
+
toolCallId,
|
|
99
|
+
idempotencyKey: `${ids.runId}:${toolCallId}`,
|
|
100
|
+
// A tool can tell it is answering an MCP client, not the person in the app.
|
|
101
|
+
pageContext: { channel: 'mcp' },
|
|
102
|
+
// No conversation to push into: `emitUi` accepts the push and does nothing, so a tool that
|
|
103
|
+
// shows UI in a chat still runs over MCP.
|
|
104
|
+
emitUi: createNoopEmitUi(ids.requestId),
|
|
105
|
+
};
|
|
86
106
|
};
|
|
87
107
|
server.setRequestHandler(ListToolsRequestSchema, async (_request, extra) => {
|
|
88
108
|
const actor = actorFromAuth(extra.authInfo);
|
|
89
|
-
const defs = (await registry.definitionsFor(actor, policy, allowedTools)).filter((definition) => isExposable(definition.
|
|
109
|
+
const defs = (await registry.definitionsFor(actor, policy, allowedTools)).filter((definition) => isExposable(registry.spec(definition.name), actions));
|
|
90
110
|
return {
|
|
91
|
-
tools: defs.map((definition) =>
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
111
|
+
tools: await Promise.all(defs.map(async (definition) => {
|
|
112
|
+
const described = await options.describeTool?.({
|
|
113
|
+
name: definition.name,
|
|
114
|
+
kind: definition.kind,
|
|
115
|
+
description: definition.description,
|
|
116
|
+
});
|
|
117
|
+
return {
|
|
118
|
+
name: definition.name,
|
|
119
|
+
...(described?.title !== undefined ? { title: described.title } : {}),
|
|
120
|
+
description: definition.description,
|
|
121
|
+
inputSchema: toJsonSchema(definition.inputSchema),
|
|
122
|
+
// Clients run a read without asking and confirm a write: say which is which.
|
|
123
|
+
annotations: described?.annotations ?? {
|
|
124
|
+
readOnlyHint: definition.kind === 'read',
|
|
125
|
+
},
|
|
126
|
+
};
|
|
95
127
|
})),
|
|
96
128
|
};
|
|
97
129
|
});
|
|
98
130
|
server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
99
|
-
const ctx = buildCtx(extra.authInfo, extra.sessionId);
|
|
131
|
+
const ctx = buildCtx(extra.authInfo, extra.sessionId, extra.requestId);
|
|
100
132
|
const { name, arguments: args } = request.params;
|
|
101
133
|
try {
|
|
102
134
|
// Re-decided on the CALL, not inherited from the listing. `registry.invoke` re-checks roles
|
|
@@ -104,7 +136,7 @@ export function createMcpServer(options) {
|
|
|
104
136
|
// stance — so a caller who guesses a name would otherwise reach a tool deliberately left off
|
|
105
137
|
// the surface.
|
|
106
138
|
const spec = registry.spec(name);
|
|
107
|
-
if (
|
|
139
|
+
if (!isExposable(spec, actions)) {
|
|
108
140
|
throw new ToolNotFoundError(name);
|
|
109
141
|
}
|
|
110
142
|
if (allowedTools !== undefined && !allowedTools.includes(name)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Catalog } from './genui/index.js';
|
|
2
|
+
import type { SinkWriter } from './spi/token-stream-sink.js';
|
|
3
|
+
import type { ToolDescribeScope } from './spi/tool.js';
|
|
4
|
+
import { type UiCollector } from './tool-ui.js';
|
|
5
|
+
export type ResolveToolUiCatalog = (scope: ToolDescribeScope) => Catalog | Promise<Catalog>;
|
|
6
|
+
export interface NegotiatedUiCollector extends UiCollector {
|
|
7
|
+
text(): string;
|
|
8
|
+
}
|
|
9
|
+
export declare function createNegotiatedUiCollector(toolCallId: string, scope: ToolDescribeScope, resolveCatalog?: ResolveToolUiCatalog, writer?: SinkWriter): NegotiatedUiCollector;
|
|
10
|
+
//# sourceMappingURL=negotiated-tool-ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negotiated-tool-ui.d.ts","sourceRoot":"","sources":["../../src/negotiated-tool-ui.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACnE,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5F,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,IAAI,IAAI,MAAM,CAAC;CAChB;AACD,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,iBAAiB,EACxB,cAAc,CAAC,EAAE,oBAAoB,EACrC,MAAM,CAAC,EAAE,UAAU,GAClB,qBAAqB,CA+DvB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { snapshotActionProposal } from './action-proposal-transitions.js';
|
|
2
|
+
import { createUiCollector } from './tool-ui.js';
|
|
3
|
+
export function createNegotiatedUiCollector(toolCallId, scope, resolveCatalog, writer) {
|
|
4
|
+
const collector = createUiCollector(toolCallId, writer);
|
|
5
|
+
const texts = new Map();
|
|
6
|
+
let next = 0;
|
|
7
|
+
return {
|
|
8
|
+
components: collector.components,
|
|
9
|
+
text: () => [...texts.values()].join('\n'),
|
|
10
|
+
restart: () => {
|
|
11
|
+
next = 0;
|
|
12
|
+
texts.clear();
|
|
13
|
+
collector.restart();
|
|
14
|
+
},
|
|
15
|
+
emit: async (component, props, options = {}) => {
|
|
16
|
+
if (!resolveCatalog) {
|
|
17
|
+
// No server catalog to negotiate against: the client's declaration can only narrow what is
|
|
18
|
+
// drawn. A component it does not declare degrades to its fallback text, else is left out.
|
|
19
|
+
const declared = scope.uiCapabilities === undefined ||
|
|
20
|
+
scope.uiCapabilities.components.some((entry) => entry.name === component && entry.version === (options.version ?? 1));
|
|
21
|
+
if (declared)
|
|
22
|
+
return collector.emit(component, props, options);
|
|
23
|
+
const id = options.id ?? `${toolCallId}:ui:${next++}`;
|
|
24
|
+
if (options.fallbackText !== undefined && options.fallbackText.length > 0) {
|
|
25
|
+
texts.set(id, options.fallbackText);
|
|
26
|
+
await writer?.write({ t: 'text', v: options.fallbackText });
|
|
27
|
+
}
|
|
28
|
+
return { id };
|
|
29
|
+
}
|
|
30
|
+
props = snapshotActionProposal(props);
|
|
31
|
+
options = { ...options };
|
|
32
|
+
const { prepareUiEmission } = await import('./genui/index.js');
|
|
33
|
+
const catalog = await resolveCatalog(scope);
|
|
34
|
+
const prepared = await prepareUiEmission(catalog, scope.uiCapabilities, component, props, options.version);
|
|
35
|
+
const id = options.id ?? `${toolCallId}:ui:${next++}`;
|
|
36
|
+
if (prepared.kind === 'text') {
|
|
37
|
+
texts.set(id, prepared.text);
|
|
38
|
+
await writer?.write({ t: 'text', v: prepared.text });
|
|
39
|
+
return { id };
|
|
40
|
+
}
|
|
41
|
+
const fallbackText = 'fallbackText' in prepared && typeof prepared.fallbackText === 'string'
|
|
42
|
+
? prepared.fallbackText
|
|
43
|
+
: undefined;
|
|
44
|
+
const versions = 'componentVersions' in prepared ? prepared.componentVersions : undefined;
|
|
45
|
+
const componentVersions = versions !== null && typeof versions === 'object' && !Array.isArray(versions)
|
|
46
|
+
? snapshotActionProposal(versions)
|
|
47
|
+
: undefined;
|
|
48
|
+
return collector.emit(prepared.component, prepared.props, {
|
|
49
|
+
id,
|
|
50
|
+
version: prepared.version,
|
|
51
|
+
...(fallbackText !== undefined ? { fallbackText } : {}),
|
|
52
|
+
...(componentVersions !== undefined ? { componentVersions } : {}),
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=negotiated-tool-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negotiated-tool-ui.js","sourceRoot":"","sources":["../../src/negotiated-tool-ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The part of OpenCode 2's server API (`@opencode/client`, the v2 routes `/api/session`,
|
|
3
|
+
* `/api/event`, …) this engine calls — structural, so the engine has no runtime dependency on the
|
|
4
|
+
* client package and a test can hand it a fake. A real `@opencode/client` client (2.0.18) satisfies
|
|
5
|
+
* it: `OpenCode.make({ baseUrl, headers })` from `@opencode/client` is what a host passes.
|
|
6
|
+
*/
|
|
7
|
+
export interface OpenCodeClient {
|
|
8
|
+
session: {
|
|
9
|
+
create(args: OpenCodeSessionCreate): Promise<{
|
|
10
|
+
id: string;
|
|
11
|
+
}>;
|
|
12
|
+
prompt(args: {
|
|
13
|
+
sessionID: string;
|
|
14
|
+
text: string;
|
|
15
|
+
files?: OpenCodePromptFile[];
|
|
16
|
+
}): Promise<unknown>;
|
|
17
|
+
/** Stops the running execution; OpenCode answers with `session.execution.interrupted`. */
|
|
18
|
+
interrupt(args: {
|
|
19
|
+
sessionID: string;
|
|
20
|
+
}): Promise<unknown>;
|
|
21
|
+
instructions: {
|
|
22
|
+
entry: {
|
|
23
|
+
put(args: {
|
|
24
|
+
sessionID: string;
|
|
25
|
+
key: string;
|
|
26
|
+
value: string;
|
|
27
|
+
}): Promise<unknown>;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
/** The session's info. Optional: finds the thread of a session (its `metadata.threadId`). */
|
|
31
|
+
get?(args: {
|
|
32
|
+
sessionID: string;
|
|
33
|
+
}): Promise<{
|
|
34
|
+
id: string;
|
|
35
|
+
metadata?: {
|
|
36
|
+
readonly [key: string]: OpenCodeJson;
|
|
37
|
+
};
|
|
38
|
+
}>;
|
|
39
|
+
/** Resolves when the session goes idle. Optional: a safety net for a missed terminal event. */
|
|
40
|
+
wait?(args: {
|
|
41
|
+
sessionID: string;
|
|
42
|
+
}): Promise<unknown>;
|
|
43
|
+
/** Rewind the session to before a message (regenerate). Optional. */
|
|
44
|
+
revert?: {
|
|
45
|
+
stage(args: {
|
|
46
|
+
sessionID: string;
|
|
47
|
+
messageID: string;
|
|
48
|
+
files?: boolean;
|
|
49
|
+
}): Promise<unknown>;
|
|
50
|
+
commit(args: {
|
|
51
|
+
sessionID: string;
|
|
52
|
+
}): Promise<unknown>;
|
|
53
|
+
};
|
|
54
|
+
form: {
|
|
55
|
+
/** The session's open forms. Optional: lets a resumed turn find questions asked while nobody listened. */
|
|
56
|
+
list?(args: {
|
|
57
|
+
sessionID: string;
|
|
58
|
+
}): Promise<OpenCodeForm[]>;
|
|
59
|
+
reply(args: {
|
|
60
|
+
sessionID: string;
|
|
61
|
+
formID: string;
|
|
62
|
+
answer: Record<string, OpenCodeFormValue>;
|
|
63
|
+
}): Promise<unknown>;
|
|
64
|
+
cancel(args: {
|
|
65
|
+
sessionID: string;
|
|
66
|
+
formID: string;
|
|
67
|
+
}): Promise<unknown>;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
permission: {
|
|
71
|
+
/** The session's open permission requests. Optional, like `session.form.list`. */
|
|
72
|
+
list?(args: {
|
|
73
|
+
sessionID: string;
|
|
74
|
+
}): Promise<OpenCodePermissionRequest[]>;
|
|
75
|
+
reply(args: {
|
|
76
|
+
sessionID: string;
|
|
77
|
+
requestID: string;
|
|
78
|
+
decision: 'once' | 'reject';
|
|
79
|
+
message?: string;
|
|
80
|
+
}): Promise<unknown>;
|
|
81
|
+
};
|
|
82
|
+
/** The session's messages, newest first with `order: 'desc'`. Optional (regenerate). */
|
|
83
|
+
message?: {
|
|
84
|
+
list(args: {
|
|
85
|
+
sessionID: string;
|
|
86
|
+
order?: 'asc' | 'desc';
|
|
87
|
+
limit?: number;
|
|
88
|
+
}): Promise<{
|
|
89
|
+
data: Array<{
|
|
90
|
+
id: string;
|
|
91
|
+
type: string;
|
|
92
|
+
}>;
|
|
93
|
+
}>;
|
|
94
|
+
};
|
|
95
|
+
/** Register an MCP server at a location. Optional (exposing the app's tools). */
|
|
96
|
+
mcp?: {
|
|
97
|
+
add(args: {
|
|
98
|
+
server: string;
|
|
99
|
+
location?: {
|
|
100
|
+
directory: string;
|
|
101
|
+
};
|
|
102
|
+
config: {
|
|
103
|
+
type: 'remote';
|
|
104
|
+
url: string;
|
|
105
|
+
headers?: Record<string, string>;
|
|
106
|
+
/** `false`: never start OAuth for this server (the headers authenticate it). */
|
|
107
|
+
oauth?: false;
|
|
108
|
+
};
|
|
109
|
+
}): Promise<unknown>;
|
|
110
|
+
};
|
|
111
|
+
/** Write a file on the server. Optional (writing the agent's skills where OpenCode finds them). */
|
|
112
|
+
file?: {
|
|
113
|
+
write(args: {
|
|
114
|
+
location?: {
|
|
115
|
+
directory: string;
|
|
116
|
+
};
|
|
117
|
+
path: string;
|
|
118
|
+
payload: Uint8Array;
|
|
119
|
+
}): Promise<unknown>;
|
|
120
|
+
};
|
|
121
|
+
event: {
|
|
122
|
+
/** Every event of the server, for every session, until `signal` aborts. */
|
|
123
|
+
subscribe(args: {
|
|
124
|
+
signal: AbortSignal;
|
|
125
|
+
}): AsyncIterable<OpenCodeEvent>;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/** A file attached to a prompt: a URI OpenCode can read (`file://…`, `data:…`, `https://…`). */
|
|
129
|
+
export interface OpenCodePromptFile {
|
|
130
|
+
uri: string;
|
|
131
|
+
name?: string;
|
|
132
|
+
description?: string;
|
|
133
|
+
}
|
|
134
|
+
/** A JSON value — what OpenCode stores as metadata. */
|
|
135
|
+
export type OpenCodeJson = string | number | boolean | null | OpenCodeJson[] | {
|
|
136
|
+
readonly [key: string]: OpenCodeJson;
|
|
137
|
+
};
|
|
138
|
+
export interface OpenCodeSessionCreate {
|
|
139
|
+
/** A named OpenCode agent (`.opencode/agents/<name>`), when the location defines one. */
|
|
140
|
+
agent?: string;
|
|
141
|
+
model?: OpenCodeModelRef;
|
|
142
|
+
location?: {
|
|
143
|
+
directory: string;
|
|
144
|
+
};
|
|
145
|
+
/** OpenCode permission rules (`{ action, resource, effect: 'allow' | 'deny' | 'ask' }`). */
|
|
146
|
+
permissions?: OpenCodePermissionRule[];
|
|
147
|
+
metadata?: {
|
|
148
|
+
readonly [key: string]: OpenCodeJson;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export interface OpenCodeModelRef {
|
|
152
|
+
providerID: string;
|
|
153
|
+
id: string;
|
|
154
|
+
variant?: string;
|
|
155
|
+
}
|
|
156
|
+
export interface OpenCodePermissionRule {
|
|
157
|
+
action: string;
|
|
158
|
+
resource: string;
|
|
159
|
+
effect: 'allow' | 'deny' | 'ask';
|
|
160
|
+
}
|
|
161
|
+
/** What a form reply takes for one field. */
|
|
162
|
+
export type OpenCodeFormValue = string | number | boolean | string[];
|
|
163
|
+
/** One server event. `data.sessionID` (or `data.form.sessionID` on form events) names its session. */
|
|
164
|
+
export interface OpenCodeEvent {
|
|
165
|
+
type: string;
|
|
166
|
+
data?: any;
|
|
167
|
+
}
|
|
168
|
+
/** A permission OpenCode is waiting on (`permission.asked`): an `ask` rule matched a tool call. */
|
|
169
|
+
export interface OpenCodePermissionRequest {
|
|
170
|
+
id: string;
|
|
171
|
+
sessionID: string;
|
|
172
|
+
/** The rule's action, e.g. `company.send_email` or `webfetch`. */
|
|
173
|
+
action: string;
|
|
174
|
+
resources?: string[];
|
|
175
|
+
/**
|
|
176
|
+
* About the call. A built-in tool's arguments sit straight here (`webfetch` → `{ url, format }`);
|
|
177
|
+
* calls that wrap others nest them under `input` or `args`.
|
|
178
|
+
*/
|
|
179
|
+
metadata?: Record<string, unknown>;
|
|
180
|
+
}
|
|
181
|
+
/** A form the model put to the user through OpenCode's question tool (`form.created`). */
|
|
182
|
+
export interface OpenCodeForm {
|
|
183
|
+
id: string;
|
|
184
|
+
sessionID: string;
|
|
185
|
+
title?: string;
|
|
186
|
+
fields?: OpenCodeFormField[];
|
|
187
|
+
}
|
|
188
|
+
export interface OpenCodeFormField {
|
|
189
|
+
key: string;
|
|
190
|
+
type?: string;
|
|
191
|
+
title?: string;
|
|
192
|
+
description?: string;
|
|
193
|
+
required?: boolean;
|
|
194
|
+
options?: Array<{
|
|
195
|
+
value: string;
|
|
196
|
+
label?: string;
|
|
197
|
+
description?: string;
|
|
198
|
+
}>;
|
|
199
|
+
/** The user may type their own answer instead of picking one of `options`. */
|
|
200
|
+
custom?: boolean;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/opencode/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/opencode/client.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as durable from '@adonis-agora/durable';
|
|
2
|
+
import type { AgentEngineContext } from '../../engine.js';
|
|
3
|
+
import type { AgentRunner } from '../../spi/agent-runner.js';
|
|
4
|
+
import { OpenCodeEngine, type OpenCodeEngineOptions } from '../engine.js';
|
|
5
|
+
/**
|
|
6
|
+
* `@adonis-agora/agent/opencode/durable` — `openCode()` whose turns are durable workflows. Its own
|
|
7
|
+
* entry point, so `@adonis-agora/durable` (an optional peer) is loaded only by an app that asks for
|
|
8
|
+
* it.
|
|
9
|
+
*/
|
|
10
|
+
export interface OpenCodeDurableOptions extends OpenCodeEngineOptions {
|
|
11
|
+
/**
|
|
12
|
+
* The durable engine the turns run on. Omit → the app's (`WorkflowEngine` from the container,
|
|
13
|
+
* bound by `@adonis-agora/durable`'s provider).
|
|
14
|
+
*/
|
|
15
|
+
workflowEngine?: durable.WorkflowEngine;
|
|
16
|
+
}
|
|
17
|
+
/** The OpenCode engine whose turns are `agora.agent.opencode.run` workflows. */
|
|
18
|
+
export declare class OpenCodeDurableEngine extends OpenCodeEngine {
|
|
19
|
+
readonly options: OpenCodeDurableOptions;
|
|
20
|
+
readonly name = "opencode-durable";
|
|
21
|
+
readonly durable = true;
|
|
22
|
+
constructor(options: OpenCodeDurableOptions);
|
|
23
|
+
createRunner(context: AgentEngineContext): Promise<AgentRunner>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* `openCode()` whose turns are durable workflows — `engine: openCodeDurable({ host })` next to a
|
|
27
|
+
* configured `@adonis-agora/durable`. Every step of a turn is checkpointed; a turn waiting on a person
|
|
28
|
+
* survives restarts and is resumed by whichever process receives the decision.
|
|
29
|
+
*/
|
|
30
|
+
export declare function openCodeDurable(options: OpenCodeDurableOptions): OpenCodeDurableEngine;
|
|
31
|
+
export { DurableOpenCodeAgentRunner } from './runner.js';
|
|
32
|
+
export { decisionToken, OPENCODE_RUN_WORKFLOW, OpenCodeRunWorkflow } from './workflow.js';
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/opencode/durable/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAI1E;;;;GAIG;AACH,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;CACzC;AAED,gFAAgF;AAChF,qBAAa,qBAAsB,SAAQ,cAAc;aAIzB,OAAO,EAAE,sBAAsB;IAH7D,SAAkB,IAAI,sBAAsB;IAC5C,SAAkB,OAAO,QAAQ;IAEjC,YAA8B,OAAO,EAAE,sBAAsB,EAE5D;IAEc,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAmB7E;CACF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CAEtF;AAED,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as durable from '@adonis-agora/durable';
|
|
2
|
+
import { OpenCodeEngine } from '../engine.js';
|
|
3
|
+
import { DurableOpenCodeAgentRunner } from './runner.js';
|
|
4
|
+
import { OpenCodeRunWorkflow } from './workflow.js';
|
|
5
|
+
/** The OpenCode engine whose turns are `agora.agent.opencode.run` workflows. */
|
|
6
|
+
export class OpenCodeDurableEngine extends OpenCodeEngine {
|
|
7
|
+
options;
|
|
8
|
+
name = 'opencode-durable';
|
|
9
|
+
durable = true;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super(options);
|
|
12
|
+
this.options = options;
|
|
13
|
+
}
|
|
14
|
+
async createRunner(context) {
|
|
15
|
+
const turns = await this.buildTurns(context);
|
|
16
|
+
const engine = this.options.workflowEngine ??
|
|
17
|
+
(context.make !== undefined
|
|
18
|
+
? await context.make(durable.WorkflowEngine)
|
|
19
|
+
: undefined);
|
|
20
|
+
if (engine === undefined) {
|
|
21
|
+
throw new Error('[@adonis-agora/agent/opencode] openCodeDurable() needs a durable engine: configure @adonis-agora/durable, or pass `workflowEngine`.');
|
|
22
|
+
}
|
|
23
|
+
await durable.registerWorkflowClass(engine, OpenCodeRunWorkflow, () => new OpenCodeRunWorkflow(turns, engine));
|
|
24
|
+
const { host } = turns;
|
|
25
|
+
return new DurableOpenCodeAgentRunner(engine, turns, host, context.store);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* `openCode()` whose turns are durable workflows — `engine: openCodeDurable({ host })` next to a
|
|
30
|
+
* configured `@adonis-agora/durable`. Every step of a turn is checkpointed; a turn waiting on a person
|
|
31
|
+
* survives restarts and is resumed by whichever process receives the decision.
|
|
32
|
+
*/
|
|
33
|
+
export function openCodeDurable(options) {
|
|
34
|
+
return new OpenCodeDurableEngine(options);
|
|
35
|
+
}
|
|
36
|
+
export { DurableOpenCodeAgentRunner } from './runner.js';
|
|
37
|
+
export { decisionToken, OPENCODE_RUN_WORKFLOW, OpenCodeRunWorkflow } from './workflow.js';
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/opencode/durable/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAC;AAGjD,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAepD,gFAAgF;AAChF,MAAM,OAAO,qBAAsB,SAAQ,cAAc;IAIzB,OAAO;IAHnB,IAAI,GAAG,kBAAkB,CAAC;IAC1B,OAAO,GAAG,IAAI,CAAC;IAEjC,YAA8B,OAA+B;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAC;uBADa,OAAO;IAErC,CAAC;IAEQ,KAAK,CAAC,YAAY,CAAC,OAA2B;QACrD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,MAAM,GACV,IAAI,CAAC,OAAO,CAAC,cAAc;YAC3B,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS;gBACzB,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAyB,OAAO,CAAC,cAAc,CAAC;gBACpE,CAAC,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,qIAAqI,CACtI,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,CAAC,qBAAqB,CACjC,MAAM,EACN,mBAAmB,EACnB,GAAG,EAAE,CAAC,IAAI,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAC7C,CAAC;QACF,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QACvB,OAAO,IAAI,0BAA0B,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { WorkflowEngine } from '@adonis-agora/durable';
|
|
2
|
+
import type { HumanReply } from '../../elicitation.js';
|
|
3
|
+
import type { AgentRunner, AgentRunStartOptions } from '../../spi/agent-runner.js';
|
|
4
|
+
import type { AgentStore } from '../../spi/agent-store.js';
|
|
5
|
+
import type { AgentRunInput } from '../../types.js';
|
|
6
|
+
import type { OpenCodeHost } from '../host.js';
|
|
7
|
+
import type { OpenCodeTurns } from '../turns.js';
|
|
8
|
+
/**
|
|
9
|
+
* Runs OpenCode turns as `@adonis-agora/durable` workflows ({@link OpenCodeRunWorkflow}): a person's
|
|
10
|
+
* decision is a durable signal, so a turn waiting on one survives restarts and is resumed by
|
|
11
|
+
* whichever process receives it. Needs a cross-process sink when more than one process serves the
|
|
12
|
+
* agent (`tokenSinks.redis()` / `tokenSinks.lucid()`).
|
|
13
|
+
*/
|
|
14
|
+
export declare class DurableOpenCodeAgentRunner implements AgentRunner {
|
|
15
|
+
private readonly engine;
|
|
16
|
+
private readonly turns;
|
|
17
|
+
private readonly host;
|
|
18
|
+
private readonly store;
|
|
19
|
+
constructor(engine: WorkflowEngine, turns: OpenCodeTurns, host: OpenCodeHost, store: AgentStore);
|
|
20
|
+
runIdFor(input: AgentRunInput): string;
|
|
21
|
+
start(input: AgentRunInput, options?: AgentRunStartOptions): Promise<{
|
|
22
|
+
runId: string;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* From the engine's run row. A run it does not know yet counts as running (a queued turn is
|
|
26
|
+
* claimed before its start lands), and so does one it cannot be asked about.
|
|
27
|
+
*/
|
|
28
|
+
isRunActive(runId: string): Promise<boolean>;
|
|
29
|
+
signal(runId: string, toolCallId: string, reply: HumanReply): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Interrupt OpenCode, cancel the run in the runtime (a run parked on a person never runs its body
|
|
32
|
+
* again), and settle it here: the queue, the thread, the `cancelled` frame and the run row.
|
|
33
|
+
*/
|
|
34
|
+
cancel(runId: string): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../src/opencode/durable/runner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAcjD;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,WAAW;IAE1D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJxB,YACmB,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,UAAU,EAGnC;IAED,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAErC;IAEK,KAAK,CACT,KAAK,EAAE,aAAa,EACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAmB5B;IAED;;;OAGG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjD;IAEK,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF;IAED;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzC;CACF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { openCodeLog } from '../log.js';
|
|
3
|
+
import { decisionToken, isControlFlowSignal, OpenCodeRunWorkflow } from './workflow.js';
|
|
4
|
+
function isRunInput(value) {
|
|
5
|
+
return (typeof value === 'object' &&
|
|
6
|
+
value !== null &&
|
|
7
|
+
typeof value.threadId === 'string' &&
|
|
8
|
+
typeof value.actor === 'object');
|
|
9
|
+
}
|
|
10
|
+
const SETTLED = new Set(['completed', 'failed', 'cancelled', 'dead']);
|
|
11
|
+
/**
|
|
12
|
+
* Runs OpenCode turns as `@adonis-agora/durable` workflows ({@link OpenCodeRunWorkflow}): a person's
|
|
13
|
+
* decision is a durable signal, so a turn waiting on one survives restarts and is resumed by
|
|
14
|
+
* whichever process receives it. Needs a cross-process sink when more than one process serves the
|
|
15
|
+
* agent (`tokenSinks.redis()` / `tokenSinks.lucid()`).
|
|
16
|
+
*/
|
|
17
|
+
export class DurableOpenCodeAgentRunner {
|
|
18
|
+
engine;
|
|
19
|
+
turns;
|
|
20
|
+
host;
|
|
21
|
+
store;
|
|
22
|
+
constructor(engine, turns, host, store) {
|
|
23
|
+
this.engine = engine;
|
|
24
|
+
this.turns = turns;
|
|
25
|
+
this.host = host;
|
|
26
|
+
this.store = store;
|
|
27
|
+
turns.startNext = (next, runId) => this.start(next, { runId });
|
|
28
|
+
}
|
|
29
|
+
runIdFor(input) {
|
|
30
|
+
return this.turns.settings.runId?.(input) ?? randomUUID();
|
|
31
|
+
}
|
|
32
|
+
async start(input, options = {}) {
|
|
33
|
+
const runId = options.runId ?? this.runIdFor(input);
|
|
34
|
+
const durable = this.turns.settings.durable;
|
|
35
|
+
const startOptions = {
|
|
36
|
+
...((await durable?.start?.(input, runId)) ?? {}),
|
|
37
|
+
...((await this.host.startOptions?.(input, runId)) ?? {}),
|
|
38
|
+
};
|
|
39
|
+
// Before the engine starts it: a run the engine drives synchronously could otherwise end (and
|
|
40
|
+
// clear it) before it was set.
|
|
41
|
+
await this.store.setActiveStream(input.threadId, runId);
|
|
42
|
+
try {
|
|
43
|
+
await this.engine.start(OpenCodeRunWorkflow, input, runId, startOptions);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
// A run that suspends on its first step under a driving dispatcher surfaces the runtime's
|
|
47
|
+
// suspend signal here: the run is persisted and will be resumed, not failed.
|
|
48
|
+
if (isControlFlowSignal(error))
|
|
49
|
+
return { runId };
|
|
50
|
+
throw this.host.startError?.(error, input) ?? durable?.startError?.(error, input) ?? error;
|
|
51
|
+
}
|
|
52
|
+
return { runId };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* From the engine's run row. A run it does not know yet counts as running (a queued turn is
|
|
56
|
+
* claimed before its start lands), and so does one it cannot be asked about.
|
|
57
|
+
*/
|
|
58
|
+
async isRunActive(runId) {
|
|
59
|
+
try {
|
|
60
|
+
const status = (await this.engine.getRun(runId))?.status;
|
|
61
|
+
return status === undefined || !SETTLED.has(status);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async signal(runId, toolCallId, reply) {
|
|
68
|
+
await this.engine.signal(decisionToken(runId, toolCallId), reply);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Interrupt OpenCode, cancel the run in the runtime (a run parked on a person never runs its body
|
|
72
|
+
* again), and settle it here: the queue, the thread, the `cancelled` frame and the run row.
|
|
73
|
+
*/
|
|
74
|
+
async cancel(runId) {
|
|
75
|
+
const run = await this.engine.getRun(runId).catch(() => null);
|
|
76
|
+
if (run === null || run === undefined || SETTLED.has(run.status))
|
|
77
|
+
return;
|
|
78
|
+
const input = run.input;
|
|
79
|
+
if (isRunInput(input))
|
|
80
|
+
await this.turns.interrupt(input).catch(() => undefined);
|
|
81
|
+
await this.engine.cancel(runId).catch((error) => {
|
|
82
|
+
openCodeLog.warn(`could not cancel run ${runId}: ${error.message}`);
|
|
83
|
+
});
|
|
84
|
+
if (isRunInput(input))
|
|
85
|
+
await this.turns.settle(runId, input, { status: 'interrupted' }, 0);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=runner.js.map
|