@adonis-agora/agent 0.61.0 → 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 +62 -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 +7 -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 +80 -13
- 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-executor.d.ts +3 -0
- package/dist/src/action-proposal-executor.d.ts.map +1 -1
- package/dist/src/action-proposal-executor.js +10 -0
- package/dist/src/action-proposal-executor.js.map +1 -1
- package/dist/src/action-proposal-service.d.ts +6 -2
- package/dist/src/action-proposal-service.d.ts.map +1 -1
- package/dist/src/action-proposal-service.js +20 -16
- package/dist/src/action-proposal-service.js.map +1 -1
- package/dist/src/action-proposal-text.d.ts +42 -3
- package/dist/src/action-proposal-text.d.ts.map +1 -1
- package/dist/src/action-proposal-text.js +80 -12
- package/dist/src/action-proposal-text.js.map +1 -1
- package/dist/src/action-proposal-worker.d.ts +2 -1
- package/dist/src/action-proposal-worker.d.ts.map +1 -1
- package/dist/src/action-proposal-worker.js +9 -2
- package/dist/src/action-proposal-worker.js.map +1 -1
- package/dist/src/ag-ui/adapter.d.ts.map +1 -1
- package/dist/src/ag-ui/adapter.js +83 -11
- 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/{proposal-decision.d.ts → core/proposal-decision.d.ts} +1 -1
- package/dist/src/ag-ui/core/proposal-decision.d.ts.map +1 -0
- package/dist/src/ag-ui/{proposal-decision.js → core/proposal-decision.js} +3 -6
- 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 +8 -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 +3 -0
- package/dist/src/agent-deps-factory.d.ts.map +1 -1
- package/dist/src/agent-deps-factory.js +3 -0
- package/dist/src/agent-deps-factory.js.map +1 -1
- package/dist/src/agent-deps.d.ts +3 -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 +4 -3
- package/dist/src/agent-loop.d.ts.map +1 -1
- package/dist/src/agent-loop.js +50 -25
- package/dist/src/agent-loop.js.map +1 -1
- package/dist/src/agent-service.d.ts +11 -2
- package/dist/src/agent-service.d.ts.map +1 -1
- package/dist/src/agent-service.js +23 -11
- 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 +4 -0
- package/dist/src/ai-tool-ref.d.ts.map +1 -1
- package/dist/src/ai-tool-ref.js +10 -14
- 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 +2 -0
- package/dist/src/chat-queue-service.js.map +1 -1
- package/dist/src/define_config.d.ts +61 -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 +7 -14
- package/dist/src/genui/factory.d.ts.map +1 -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 +5 -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 +4 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- 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.map +1 -1
- package/dist/src/negotiated-tool-ui.js +12 -8
- package/dist/src/negotiated-tool-ui.js.map +1 -1
- 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/agent-runner.d.ts +6 -0
- package/dist/src/spi/agent-runner.d.ts.map +1 -1
- package/dist/src/spi/chat-queue.d.ts +4 -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/tool.d.ts +18 -3
- package/dist/src/spi/tool.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.js +2 -0
- package/dist/src/stores/lucid-schema.js.map +1 -1
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +3 -0
- package/dist/src/stores/lucid.js.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-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-store.js +1 -0
- package/dist/src/testing/in-memory-store.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 +5 -1
- package/dist/src/tool-discovery.js.map +1 -1
- package/dist/src/tool-registry.d.ts +3 -0
- package/dist/src/tool-registry.d.ts.map +1 -1
- package/dist/src/tool-registry.js +15 -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/types.d.ts +20 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/ui-capabilities.d.ts +1 -8
- package/dist/src/ui-capabilities.d.ts.map +1 -1
- package/dist/src/ui-capabilities.js +3 -24
- package/dist/src/ui-capabilities.js.map +1 -1
- 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/ag-ui/proposal-decision.d.ts.map +0 -1
- package/dist/src/ag-ui/proposal-decision.js.map +0 -1
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { createHash, createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
4
|
+
import { toJsonSchemaCompat } from '@modelcontextprotocol/sdk/server/zod-json-schema-compat.js';
|
|
5
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
6
|
+
import { REMEMBER_TOOL_DESCRIPTION, REMEMBER_TOOL_NAME, rememberInputSchema, writeMemory, } from '../memory.js';
|
|
7
|
+
import { defaultScopeResolver } from '../skills.js';
|
|
8
|
+
import { ToolNotFoundError } from '../tool-registry.js';
|
|
9
|
+
import { errorText } from './log.js';
|
|
10
|
+
/** Kinds the LOOP serves; a registry entry of one of them cannot be honoured over MCP. */
|
|
11
|
+
const LOOP_SERVED_KINDS = new Set(['agent', 'ask', 'skill', 'memory']);
|
|
12
|
+
const b64url = (data) => Buffer.from(data).toString('base64url');
|
|
13
|
+
/**
|
|
14
|
+
* Signs and checks the bearer tokens the engine registers its tools endpoint with (`mcp.add`). A
|
|
15
|
+
* token names an actor and an OpenCode server, and expires; it is HMAC-SHA256 over its claims with
|
|
16
|
+
* a key derived from the configured secret (or the app's `APP_KEY`).
|
|
17
|
+
*
|
|
18
|
+
* A token on its own runs nothing: the endpoint also needs the call to come from a session that is
|
|
19
|
+
* running a turn of that actor right now (see `OpenCodeTurns.callContext`), and an `action` tool
|
|
20
|
+
* needs an approval the turn granted (see `OpenCodeTurns.spendApproval`).
|
|
21
|
+
*/
|
|
22
|
+
export class OpenCodeToolsTokens {
|
|
23
|
+
ttlMs;
|
|
24
|
+
key;
|
|
25
|
+
constructor(secret, ttlMs) {
|
|
26
|
+
this.ttlMs = ttlMs;
|
|
27
|
+
this.key = createHash('sha256')
|
|
28
|
+
.update('agora:opencode:tools\0')
|
|
29
|
+
.update(secret ?? randomBytes(32).toString('hex'))
|
|
30
|
+
.digest();
|
|
31
|
+
}
|
|
32
|
+
mint(actor, server, now = Date.now()) {
|
|
33
|
+
const claims = { v: 1, actor, server, exp: now + this.ttlMs };
|
|
34
|
+
const body = b64url(JSON.stringify(claims));
|
|
35
|
+
return `${body}.${this.sign(body)}`;
|
|
36
|
+
}
|
|
37
|
+
verify(token, now = Date.now()) {
|
|
38
|
+
const [body, signature, extra] = token.split('.');
|
|
39
|
+
if (body === undefined || signature === undefined || extra !== undefined)
|
|
40
|
+
return null;
|
|
41
|
+
const expected = Buffer.from(this.sign(body));
|
|
42
|
+
const given = Buffer.from(signature);
|
|
43
|
+
if (expected.length !== given.length || !timingSafeEqual(expected, given))
|
|
44
|
+
return null;
|
|
45
|
+
try {
|
|
46
|
+
const claims = JSON.parse(Buffer.from(body, 'base64url').toString('utf8'));
|
|
47
|
+
if (claims?.v !== 1 ||
|
|
48
|
+
typeof claims.server !== 'string' ||
|
|
49
|
+
typeof claims.exp !== 'number' ||
|
|
50
|
+
typeof claims.actor?.id !== 'string' ||
|
|
51
|
+
claims.exp <= now) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return claims;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
sign(body) {
|
|
61
|
+
return createHmac('sha256', this.key).update(body).digest('base64url');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** True for a Zod schema (its Standard Schema props say `vendor: 'zod'`). */
|
|
65
|
+
function isZodSchema(schema) {
|
|
66
|
+
return schema['~standard'].vendor === 'zod';
|
|
67
|
+
}
|
|
68
|
+
/** A tool's input schema as the JSON Schema MCP clients read — as the `config/mcp.ts` surface does. */
|
|
69
|
+
function toJsonSchema(schema) {
|
|
70
|
+
if (isZodSchema(schema))
|
|
71
|
+
return toJsonSchemaCompat(schema);
|
|
72
|
+
const converter = schema['~standard'].jsonSchema;
|
|
73
|
+
if (typeof converter?.input === 'function') {
|
|
74
|
+
return converter.input();
|
|
75
|
+
}
|
|
76
|
+
return { type: 'object', properties: {}, additionalProperties: true };
|
|
77
|
+
}
|
|
78
|
+
const asText = (output) => (typeof output === 'string' ? output : JSON.stringify(output));
|
|
79
|
+
class RefusedError extends Error {
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The MCP endpoint OpenCode sessions reach the app's tools through — `POST <agent path>/opencode/mcp`,
|
|
83
|
+
* mounted by the engine when `tools` is set. Stateless Streamable HTTP (one server per request), so
|
|
84
|
+
* it answers from any process.
|
|
85
|
+
*
|
|
86
|
+
* - `tools/list`: the registry's tools the token's actor may reach (roles, `enabled`, `canUse`), the
|
|
87
|
+
* kinds only the loop serves left out; with `_meta` naming a running turn, its agent's allow-list
|
|
88
|
+
* too. Plus `remember`, when the agent's memory provider writes.
|
|
89
|
+
* - `tools/call`: only for a call `_meta` ties to a turn of the token's actor running on that
|
|
90
|
+
* session; the turn's allow-list and the registry's own checks apply, an `action` runs only against
|
|
91
|
+
* an approval the turn granted, and the tool's `ctx` is the turn's (thread, run, `emitUi` into its
|
|
92
|
+
* stream and message).
|
|
93
|
+
*/
|
|
94
|
+
export class OpenCodeMcpEndpoint {
|
|
95
|
+
turns;
|
|
96
|
+
tokens;
|
|
97
|
+
constructor(turns, tokens) {
|
|
98
|
+
this.turns = turns;
|
|
99
|
+
this.tokens = tokens;
|
|
100
|
+
}
|
|
101
|
+
/** Mounts the endpoint next to the agent's routes. */
|
|
102
|
+
adapter() {
|
|
103
|
+
return {
|
|
104
|
+
name: 'opencode-mcp',
|
|
105
|
+
mount: (host) => {
|
|
106
|
+
host.post('opencode/mcp', (ctx) => this.handle(ctx));
|
|
107
|
+
// Stateless: no server-sent stream to resume, no session to close.
|
|
108
|
+
host.get('opencode/mcp', (ctx) => ctx.response.status(405).header('allow', 'POST').json({ error: 'method not allowed' }));
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/** The claims of a request's bearer token, or `null`. */
|
|
113
|
+
authenticate(authorization) {
|
|
114
|
+
const token = /^Bearer\s+/i.test(authorization ?? '')
|
|
115
|
+
? authorization?.replace(/^Bearer\s+/i, '').trim()
|
|
116
|
+
: undefined;
|
|
117
|
+
return token ? this.tokens.verify(token) : null;
|
|
118
|
+
}
|
|
119
|
+
async handle(ctx) {
|
|
120
|
+
const claims = this.authenticate(ctx.request.header('authorization'));
|
|
121
|
+
if (claims === null) {
|
|
122
|
+
ctx.response.header('WWW-Authenticate', 'Bearer error="invalid_token"');
|
|
123
|
+
ctx.response.status(401).json({ error: 'unauthorized' });
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const req = ctx.request.request;
|
|
127
|
+
const res = ctx.response.response;
|
|
128
|
+
const server = this.server(claims);
|
|
129
|
+
// No `sessionIdGenerator`: stateless, so any process answers any request.
|
|
130
|
+
const transport = new StreamableHTTPServerTransport({ enableJsonResponse: true });
|
|
131
|
+
res.on('close', () => {
|
|
132
|
+
void transport.close();
|
|
133
|
+
void server.close();
|
|
134
|
+
});
|
|
135
|
+
try {
|
|
136
|
+
await server.connect(transport);
|
|
137
|
+
await transport.handleRequest(req, res, ctx.request.body());
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
if (!res.headersSent) {
|
|
141
|
+
res.statusCode = 500;
|
|
142
|
+
res.setHeader('content-type', 'application/json');
|
|
143
|
+
res.end(JSON.stringify({
|
|
144
|
+
jsonrpc: '2.0',
|
|
145
|
+
error: { code: -32603, message: errorText(error, 'Internal error') },
|
|
146
|
+
id: null,
|
|
147
|
+
}));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
await new Promise((resolve) => {
|
|
151
|
+
if (res.writableFinished)
|
|
152
|
+
return resolve();
|
|
153
|
+
res.on('finish', () => resolve());
|
|
154
|
+
res.on('close', () => resolve());
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/** One MCP server for one request, answering as the token's actor. */
|
|
158
|
+
server(claims) {
|
|
159
|
+
const server = new Server({ name: 'agora-opencode', version: '1.0.0' }, { capabilities: { tools: {} } });
|
|
160
|
+
const { actor } = claims;
|
|
161
|
+
const call = (meta, requestId) => this.turns.callContext({
|
|
162
|
+
actor,
|
|
163
|
+
serverKey: claims.server,
|
|
164
|
+
requestId: String(requestId ?? ''),
|
|
165
|
+
meta: meta,
|
|
166
|
+
});
|
|
167
|
+
server.setRequestHandler(ListToolsRequestSchema, async (request, extra) => {
|
|
168
|
+
const turn = await call(request.params?._meta, extra.requestId);
|
|
169
|
+
const input = turn?.input ?? {};
|
|
170
|
+
const deps = this.turns.depsFor(input);
|
|
171
|
+
const allowed = turn !== undefined ? this.turns.allowedTools(turn.input) : undefined;
|
|
172
|
+
const definitions = (await this.turns.registry.definitionsFor(actor, deps.rolesPolicy, allowed)).filter((definition) => !LOOP_SERVED_KINDS.has(definition.kind));
|
|
173
|
+
const tools = definitions.map((definition) => ({
|
|
174
|
+
name: definition.name,
|
|
175
|
+
description: definition.description,
|
|
176
|
+
inputSchema: toJsonSchema(definition.inputSchema),
|
|
177
|
+
}));
|
|
178
|
+
if (this.turns.memoryWritable(input)) {
|
|
179
|
+
tools.push({
|
|
180
|
+
name: REMEMBER_TOOL_NAME,
|
|
181
|
+
description: REMEMBER_TOOL_DESCRIPTION,
|
|
182
|
+
inputSchema: toJsonSchema(rememberInputSchema),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
return { tools };
|
|
186
|
+
});
|
|
187
|
+
server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
188
|
+
const { name, arguments: args } = request.params;
|
|
189
|
+
try {
|
|
190
|
+
const turn = await call(request.params._meta, extra.requestId);
|
|
191
|
+
if (turn === undefined) {
|
|
192
|
+
throw new RefusedError('This endpoint serves OpenCode turns: no turn of yours is running on this session.');
|
|
193
|
+
}
|
|
194
|
+
const output = name === REMEMBER_TOOL_NAME && this.turns.memoryWritable(turn.input)
|
|
195
|
+
? await this.remember(turn, args)
|
|
196
|
+
: await this.invoke(turn, actor, name, args, String(extra.requestId ?? ''));
|
|
197
|
+
return { content: [{ type: 'text', text: asText(output) }] };
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
return {
|
|
201
|
+
content: [{ type: 'text', text: errorText(error, 'the tool failed') }],
|
|
202
|
+
isError: true,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
return server;
|
|
207
|
+
}
|
|
208
|
+
async invoke(turn, actor, name, args, requestId) {
|
|
209
|
+
const spec = this.turns.registry.spec(name);
|
|
210
|
+
if (spec === undefined || LOOP_SERVED_KINDS.has(spec.kind))
|
|
211
|
+
throw new ToolNotFoundError(name);
|
|
212
|
+
const allowed = this.turns.allowedTools(turn.input);
|
|
213
|
+
if (allowed !== undefined && !allowed.includes(name))
|
|
214
|
+
throw new ToolNotFoundError(name);
|
|
215
|
+
if (spec.kind === 'action' &&
|
|
216
|
+
!(await this.turns.spendApproval(turn.runId, turn.ctx.threadId, name))) {
|
|
217
|
+
throw new RefusedError(`"${name}" is an action and nobody approved this call; ask for the permission first.`);
|
|
218
|
+
}
|
|
219
|
+
const deps = this.turns.depsFor(turn.input);
|
|
220
|
+
const ctx = {
|
|
221
|
+
actor,
|
|
222
|
+
threadId: turn.ctx.threadId,
|
|
223
|
+
runId: turn.runId,
|
|
224
|
+
requestId: `mcp:${turn.runId}:${requestId}`,
|
|
225
|
+
emitUi: turn.ctx.emitUi,
|
|
226
|
+
...(turn.ctx.agentName !== undefined ? { agentName: turn.ctx.agentName } : {}),
|
|
227
|
+
...(turn.input.pageContext !== undefined ? { pageContext: turn.input.pageContext } : {}),
|
|
228
|
+
};
|
|
229
|
+
return this.turns.registry.invoke(name, args ?? {}, ctx, deps.rolesPolicy, allowed !== undefined ? { allowedTools: allowed } : {});
|
|
230
|
+
}
|
|
231
|
+
/** `remember`: one fact, at the actor's own scope only — as the loop serves it. */
|
|
232
|
+
async remember(turn, args) {
|
|
233
|
+
const memory = this.turns.depsFor(turn.input).memory;
|
|
234
|
+
if (memory === undefined)
|
|
235
|
+
throw new ToolNotFoundError(REMEMBER_TOOL_NAME);
|
|
236
|
+
const parsed = await rememberInputSchema['~standard'].validate(args ?? {});
|
|
237
|
+
if (parsed.issues !== undefined) {
|
|
238
|
+
throw new RefusedError(`remember: ${parsed.issues.map((issue) => issue.message).join('; ')}`);
|
|
239
|
+
}
|
|
240
|
+
const ctx = {
|
|
241
|
+
actor: turn.input.actor,
|
|
242
|
+
threadId: turn.ctx.threadId,
|
|
243
|
+
...(turn.ctx.agentName !== undefined ? { agentName: turn.ctx.agentName } : {}),
|
|
244
|
+
};
|
|
245
|
+
const scopes = await (memory.scopes ?? defaultScopeResolver).resolve(ctx);
|
|
246
|
+
const outcome = await writeMemory({
|
|
247
|
+
config: memory,
|
|
248
|
+
digest: { scopes, entries: [], omitted: 0, pinnedOmitted: 0 },
|
|
249
|
+
call: parsed.value,
|
|
250
|
+
ctx,
|
|
251
|
+
runId: turn.runId,
|
|
252
|
+
});
|
|
253
|
+
if (!outcome.ok)
|
|
254
|
+
return `Not recorded: ${outcome.error}`;
|
|
255
|
+
return `Recorded "${outcome.record.key}".`;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/opencode/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type HumanReply } from '../elicitation.js';
|
|
2
|
+
import type { AgentRunner, AgentRunStartOptions } from '../spi/agent-runner.js';
|
|
3
|
+
import type { AgentStore } from '../spi/agent-store.js';
|
|
4
|
+
import type { AgentRunInput } from '../types.js';
|
|
5
|
+
import type { OpenCodeTurns } from './turns.js';
|
|
6
|
+
/**
|
|
7
|
+
* Runs OpenCode turns in this process: `begin → prompt → [observe → wait for a person → reply]* →
|
|
8
|
+
* settle`, with the waits on people held in memory. Like `InlineAgentRunner`, a run parked on a
|
|
9
|
+
* person lives in this process, so deploy it single-replica — or use `openCodeDurable()`
|
|
10
|
+
* (`@adonis-agora/agent/opencode/durable`), which checkpoints every step and waits on a durable
|
|
11
|
+
* signal.
|
|
12
|
+
*/
|
|
13
|
+
export declare class OpenCodeAgentRunner implements AgentRunner {
|
|
14
|
+
private readonly turns;
|
|
15
|
+
private readonly store;
|
|
16
|
+
private readonly live;
|
|
17
|
+
private readonly cancelled;
|
|
18
|
+
private readonly pending;
|
|
19
|
+
constructor(turns: OpenCodeTurns, store: AgentStore);
|
|
20
|
+
runIdFor(input: AgentRunInput): string;
|
|
21
|
+
/** In-process, so exact: a run this process is not running is not running anywhere. */
|
|
22
|
+
isRunActive(runId: string): Promise<boolean>;
|
|
23
|
+
start(input: AgentRunInput, options?: AgentRunStartOptions): Promise<{
|
|
24
|
+
runId: string;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Deliver a person's reply. Answers addressed at an approval are refused, as the inline runner
|
|
28
|
+
* refuses them: they say nothing about whether the action should run.
|
|
29
|
+
*/
|
|
30
|
+
signal(runId: string, toolCallId: string, reply: HumanReply): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Stop the run: what it waits on a person for is dropped, and OpenCode is interrupted — it answers
|
|
33
|
+
* `session.execution.interrupted`, which settles the run as cancelled.
|
|
34
|
+
*/
|
|
35
|
+
cancel(runId: string): Promise<void>;
|
|
36
|
+
private run;
|
|
37
|
+
/** Wait for a person's answer; a lapsed approval answers itself as expired. */
|
|
38
|
+
private park;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/opencode/runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAA4C,MAAM,mBAAmB,CAAC;AAC9F,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,aAAa,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD;;;;;;GAMG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IAMnD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IANxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoC;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,YACmB,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,EAGnC;IAED,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAErC;IAED,uFAAuF;IACjF,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIjD;IAEK,KAAK,CACT,KAAK,EAAE,aAAa,EACpB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAa5B;IAED;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAShF;IAED;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzC;YAEa,GAAG;IA8BjB,+EAA+E;IAC/E,OAAO,CAAC,IAAI;CAoBb"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { RunCancelledError } from '../agent-loop.js';
|
|
2
|
+
import { HumanReplyMismatchError, isHumanDecision } from '../elicitation.js';
|
|
3
|
+
import { errorText } from './log.js';
|
|
4
|
+
/**
|
|
5
|
+
* Runs OpenCode turns in this process: `begin → prompt → [observe → wait for a person → reply]* →
|
|
6
|
+
* settle`, with the waits on people held in memory. Like `InlineAgentRunner`, a run parked on a
|
|
7
|
+
* person lives in this process, so deploy it single-replica — or use `openCodeDurable()`
|
|
8
|
+
* (`@adonis-agora/agent/opencode/durable`), which checkpoints every step and waits on a durable
|
|
9
|
+
* signal.
|
|
10
|
+
*/
|
|
11
|
+
export class OpenCodeAgentRunner {
|
|
12
|
+
turns;
|
|
13
|
+
store;
|
|
14
|
+
live = new Map();
|
|
15
|
+
cancelled = new Set();
|
|
16
|
+
pending = new Map();
|
|
17
|
+
constructor(turns, store) {
|
|
18
|
+
this.turns = turns;
|
|
19
|
+
this.store = store;
|
|
20
|
+
turns.startNext = (next, runId) => this.start(next, { runId });
|
|
21
|
+
}
|
|
22
|
+
runIdFor(input) {
|
|
23
|
+
return this.turns.settings.runId?.(input) ?? crypto.randomUUID();
|
|
24
|
+
}
|
|
25
|
+
/** In-process, so exact: a run this process is not running is not running anywhere. */
|
|
26
|
+
async isRunActive(runId) {
|
|
27
|
+
if (this.live.has(runId))
|
|
28
|
+
return true;
|
|
29
|
+
for (const key of this.pending.keys())
|
|
30
|
+
if (key.startsWith(`${runId}:`))
|
|
31
|
+
return true;
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
async start(input, options = {}) {
|
|
35
|
+
const runId = options.runId ?? this.runIdFor(input);
|
|
36
|
+
// Before the turn starts: a fast turn could otherwise end (and clear it) before it was set.
|
|
37
|
+
await this.store.setActiveStream(input.threadId, runId);
|
|
38
|
+
this.live.set(runId, input);
|
|
39
|
+
void this.run(runId, input).finally(() => {
|
|
40
|
+
this.live.delete(runId);
|
|
41
|
+
this.cancelled.delete(runId);
|
|
42
|
+
for (const key of [...this.pending.keys()]) {
|
|
43
|
+
if (key.startsWith(`${runId}:`))
|
|
44
|
+
this.pending.delete(key);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return { runId };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Deliver a person's reply. Answers addressed at an approval are refused, as the inline runner
|
|
51
|
+
* refuses them: they say nothing about whether the action should run.
|
|
52
|
+
*/
|
|
53
|
+
async signal(runId, toolCallId, reply) {
|
|
54
|
+
const key = `${runId}:${toolCallId}`;
|
|
55
|
+
const parked = this.pending.get(key);
|
|
56
|
+
if (parked === undefined)
|
|
57
|
+
return;
|
|
58
|
+
if (parked.on === 'approval' && !isHumanDecision(reply)) {
|
|
59
|
+
throw new HumanReplyMismatchError(runId, toolCallId);
|
|
60
|
+
}
|
|
61
|
+
this.pending.delete(key);
|
|
62
|
+
parked.resolve(reply);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Stop the run: what it waits on a person for is dropped, and OpenCode is interrupted — it answers
|
|
66
|
+
* `session.execution.interrupted`, which settles the run as cancelled.
|
|
67
|
+
*/
|
|
68
|
+
async cancel(runId) {
|
|
69
|
+
this.cancelled.add(runId);
|
|
70
|
+
for (const [key, parked] of [...this.pending]) {
|
|
71
|
+
if (!key.startsWith(`${runId}:`))
|
|
72
|
+
continue;
|
|
73
|
+
this.pending.delete(key);
|
|
74
|
+
parked.reject(new RunCancelledError());
|
|
75
|
+
}
|
|
76
|
+
const input = this.live.get(runId);
|
|
77
|
+
if (input !== undefined)
|
|
78
|
+
await this.turns.interrupt(input).catch(() => undefined);
|
|
79
|
+
}
|
|
80
|
+
async run(runId, input) {
|
|
81
|
+
const started = Date.now();
|
|
82
|
+
try {
|
|
83
|
+
let handle = await this.turns.begin(runId, input);
|
|
84
|
+
if (this.cancelled.has(runId))
|
|
85
|
+
throw new RunCancelledError();
|
|
86
|
+
await this.turns.prompt(runId, input, handle);
|
|
87
|
+
for (;;) {
|
|
88
|
+
const milestone = await this.turns.observe(runId, input, handle);
|
|
89
|
+
if (milestone.kind === 'finished') {
|
|
90
|
+
await this.turns.settle(runId, input, milestone.outcome, Date.now() - started);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const reply = await this.park(runId, milestone.ask.id, milestone.ask.kind === 'approval' ? 'approval' : 'answers', milestone.timeoutMs);
|
|
94
|
+
handle = await this.turns.reply(runId, input, handle, milestone.ask, reply);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (error instanceof RunCancelledError) {
|
|
99
|
+
await this.turns.interrupt(input).catch(() => undefined);
|
|
100
|
+
await this.turns.settle(runId, input, { status: 'interrupted' }, Date.now() - started);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
await this.turns.settleFailed(runId, input, errorText(error, 'the turn failed'));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** Wait for a person's answer; a lapsed approval answers itself as expired. */
|
|
107
|
+
park(runId, toolCallId, on, timeoutMs) {
|
|
108
|
+
const key = `${runId}:${toolCallId}`;
|
|
109
|
+
const waiting = new Promise((resolve, reject) => {
|
|
110
|
+
this.pending.set(key, { on, resolve, reject });
|
|
111
|
+
});
|
|
112
|
+
if (timeoutMs === undefined)
|
|
113
|
+
return waiting;
|
|
114
|
+
let timer;
|
|
115
|
+
const lapse = new Promise((resolve) => {
|
|
116
|
+
timer = setTimeout(() => {
|
|
117
|
+
if (this.pending.delete(key))
|
|
118
|
+
resolve({ approved: false, expired: true });
|
|
119
|
+
}, timeoutMs);
|
|
120
|
+
timer.unref?.();
|
|
121
|
+
});
|
|
122
|
+
return Promise.race([waiting, lapse]).finally(() => clearTimeout(timer));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/opencode/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { type ElicitationRequest, type HumanReply } from '../elicitation.js';
|
|
2
|
+
import type { AgentStore } from '../spi/agent-store.js';
|
|
3
|
+
import type { ApprovalRequirement } from '../spi/approval-policy.js';
|
|
4
|
+
import type { SinkWriter } from '../spi/token-stream-sink.js';
|
|
5
|
+
import type { AgentUiComponent } from '../stream-events.js';
|
|
6
|
+
import type { AgentRunInput } from '../types.js';
|
|
7
|
+
import type { OpenCodeClient, OpenCodeEvent, OpenCodeForm } from './client.js';
|
|
8
|
+
/** How an OpenCode execution ended. */
|
|
9
|
+
export type TurnOutcome = {
|
|
10
|
+
status: 'succeeded';
|
|
11
|
+
} | {
|
|
12
|
+
status: 'failed';
|
|
13
|
+
error: string;
|
|
14
|
+
} | {
|
|
15
|
+
status: 'interrupted';
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Something the turn put to a person, with everything needed to hand the answer back to OpenCode
|
|
19
|
+
* later — serializable, so a durable run journals it and replies from another process.
|
|
20
|
+
*/
|
|
21
|
+
export type PendingAsk = {
|
|
22
|
+
kind: 'approval';
|
|
23
|
+
/** The OpenCode permission request id — also the tool-call id the decision is signalled under. */
|
|
24
|
+
id: string;
|
|
25
|
+
action: string;
|
|
26
|
+
approver: string;
|
|
27
|
+
expiresAt?: string;
|
|
28
|
+
/** The assistant message the call hangs on (absent for a request recovered after a restart). */
|
|
29
|
+
messageId?: string;
|
|
30
|
+
} | {
|
|
31
|
+
kind: 'form';
|
|
32
|
+
id: string;
|
|
33
|
+
form: OpenCodeForm;
|
|
34
|
+
request: ElicitationRequest;
|
|
35
|
+
messageId?: string;
|
|
36
|
+
};
|
|
37
|
+
/** Where a turn stands: it needs a person, or it is over. */
|
|
38
|
+
export type Milestone = {
|
|
39
|
+
kind: 'ask';
|
|
40
|
+
ask: PendingAsk;
|
|
41
|
+
timeoutMs?: number;
|
|
42
|
+
} | {
|
|
43
|
+
kind: 'finished';
|
|
44
|
+
outcome: TurnOutcome;
|
|
45
|
+
};
|
|
46
|
+
export interface OpenCodeTurnArgs {
|
|
47
|
+
runId: string;
|
|
48
|
+
input: AgentRunInput;
|
|
49
|
+
client: OpenCodeClient;
|
|
50
|
+
sessionId: string;
|
|
51
|
+
writer: SinkWriter;
|
|
52
|
+
store: AgentStore;
|
|
53
|
+
/** What an action needs before it runs (the agent's `ApprovalPolicy`). */
|
|
54
|
+
approvalFor: (action: string) => Promise<ApprovalRequirement>;
|
|
55
|
+
/** The model label usage is recorded under. */
|
|
56
|
+
modelLabel: string;
|
|
57
|
+
/**
|
|
58
|
+
* An action OpenCode was allowed to run — by a person, a remembered approval or the policy. The
|
|
59
|
+
* engine's MCP endpoint runs an `action` tool only against one of these.
|
|
60
|
+
*/
|
|
61
|
+
onGranted?: (action: string, permissionId: string) => void;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* One turn of an OpenCode session, as the library's stream and store see it. Fed the session's
|
|
65
|
+
* events in order, it writes the protocol's frames and persists what the loop would have — the
|
|
66
|
+
* assistant messages with their tool calls and results, the calls put to a person (so the
|
|
67
|
+
* approve/answer routes find their run), usage per model step — and reports {@link Milestone}s: a
|
|
68
|
+
* person was asked something, or the execution ended.
|
|
69
|
+
*
|
|
70
|
+
* The turn does not wait for people itself. Whoever drives it (`OpenCodeTurns`, under an in-memory
|
|
71
|
+
* or a durable runner) takes the `ask` milestone, waits however it waits, and hands the answer back
|
|
72
|
+
* with {@link decide} — which is what lets a durable run wait across a restart and reply from
|
|
73
|
+
* another process, with a fresh turn object fed the journaled {@link PendingAsk}.
|
|
74
|
+
*/
|
|
75
|
+
export declare class OpenCodeTurn {
|
|
76
|
+
private readonly a;
|
|
77
|
+
/** Serializes the handling of events, so frames and rows land in the order OpenCode sent them. */
|
|
78
|
+
private chain;
|
|
79
|
+
private segment;
|
|
80
|
+
private readonly tools;
|
|
81
|
+
/** Results already persisted per message, so a late settlement adds to them rather than replacing. */
|
|
82
|
+
private readonly messageResults;
|
|
83
|
+
private readonly asked;
|
|
84
|
+
/** Calls of {@link HIDDEN_TOOLS}, by id. */
|
|
85
|
+
private readonly hidden;
|
|
86
|
+
private readonly milestones;
|
|
87
|
+
private waiting;
|
|
88
|
+
private readonly usage;
|
|
89
|
+
private costUsd;
|
|
90
|
+
private steps;
|
|
91
|
+
private stepOpen;
|
|
92
|
+
private sawText;
|
|
93
|
+
private separator;
|
|
94
|
+
private reasoningSince;
|
|
95
|
+
private wroteMessage;
|
|
96
|
+
private ended;
|
|
97
|
+
private stepError;
|
|
98
|
+
constructor(a: OpenCodeTurnArgs);
|
|
99
|
+
get sessionId(): string;
|
|
100
|
+
get finished(): boolean;
|
|
101
|
+
/** The turn's totals so far: tokens, cost, model steps. */
|
|
102
|
+
totals(): {
|
|
103
|
+
inputTokens: number;
|
|
104
|
+
outputTokens: number;
|
|
105
|
+
costUsd?: number;
|
|
106
|
+
steps: number;
|
|
107
|
+
};
|
|
108
|
+
/** Feed one of the session's events. */
|
|
109
|
+
handle(event: OpenCodeEvent): void;
|
|
110
|
+
/** End the turn as failed without an event (the prompt was refused, the stream is gone). */
|
|
111
|
+
fail(error: string): void;
|
|
112
|
+
/**
|
|
113
|
+
* A component a tool pushed (`ctx.emitUi`, through the engine's MCP endpoint): streamed as a `ui`
|
|
114
|
+
* frame and persisted on the message being written, in the order it arrived. Pushing the same id
|
|
115
|
+
* again replaces it.
|
|
116
|
+
*/
|
|
117
|
+
pushUi(component: AgentUiComponent): Promise<void>;
|
|
118
|
+
/** The next milestone: one already reached, or the next one to come. */
|
|
119
|
+
next(): Promise<Milestone>;
|
|
120
|
+
/** Whether a milestone is waiting to be taken. */
|
|
121
|
+
hasMilestone(): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Requests OpenCode raised while nobody listened (this process started after them, or the event
|
|
124
|
+
* stream dropped): its open permissions and forms, handled as if their events had just arrived.
|
|
125
|
+
* One already recorded in the store is reported without being recorded or streamed again.
|
|
126
|
+
*/
|
|
127
|
+
catchUp(): Promise<void>;
|
|
128
|
+
/**
|
|
129
|
+
* Hand a person's answer to what the turn asked, and let OpenCode go on. `tellOpenCode: false`
|
|
130
|
+
* only settles the call (stream and store): the request died with a restarted server, and the
|
|
131
|
+
* new session is told the answer in its prompt instead.
|
|
132
|
+
*/
|
|
133
|
+
decide(ask: PendingAsk, reply: HumanReply, opts?: {
|
|
134
|
+
tellOpenCode?: boolean;
|
|
135
|
+
}): Promise<void>;
|
|
136
|
+
private reach;
|
|
137
|
+
private enqueue;
|
|
138
|
+
private write;
|
|
139
|
+
private event;
|
|
140
|
+
private step;
|
|
141
|
+
private endReasoning;
|
|
142
|
+
private tool;
|
|
143
|
+
private announce;
|
|
144
|
+
private makeAvailable;
|
|
145
|
+
private setInput;
|
|
146
|
+
/** Code-mode calls made inside a tool (`metadata.toolCalls`), nested under it by `parentId`. */
|
|
147
|
+
private innerCalls;
|
|
148
|
+
private onEvent;
|
|
149
|
+
private settleTool;
|
|
150
|
+
private stepEnded;
|
|
151
|
+
/**
|
|
152
|
+
* Persist what the turn produced since the last flush as one assistant message — the message a
|
|
153
|
+
* call put to a person hangs on, or the turn's last one. Returns its id.
|
|
154
|
+
*/
|
|
155
|
+
private flush;
|
|
156
|
+
/** A request recorded by an earlier process (a turn resumed after a restart). */
|
|
157
|
+
private alreadyRecorded;
|
|
158
|
+
/** The persisted assistant message carrying call `id`, so its result lands on the same message. */
|
|
159
|
+
private messageOf;
|
|
160
|
+
private onPermission;
|
|
161
|
+
private decided;
|
|
162
|
+
private onForm;
|
|
163
|
+
private answered;
|
|
164
|
+
private addResult;
|
|
165
|
+
private end;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=turn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn.d.ts","sourceRoot":"","sources":["../../../src/opencode/turn.ts"],"names":[],"mappings":"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"}
|