@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
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { StandardJSONSchemaV1, StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
|
+
import type { ToolHandler } from '../spi/tool.js';
|
|
3
|
+
import type { ToolPresentation } from '../tool-presentation.js';
|
|
4
|
+
import type { Actor, ToolSpec } from '../types.js';
|
|
5
|
+
import { type Catalog } from './catalog.js';
|
|
6
|
+
import { type GenuiIssue, type JsonSchema } from './schema.js';
|
|
7
|
+
import { type TreeLimits } from './tree.js';
|
|
8
|
+
/** A lib tool: register it with `aiTool(tool)` (AdonisJS) or `registry.register(tool.spec, tool.handler)`. */
|
|
9
|
+
export interface GenuiTool {
|
|
10
|
+
spec: ToolSpec & {
|
|
11
|
+
terminal?: boolean;
|
|
12
|
+
};
|
|
13
|
+
handler: ToolHandler;
|
|
14
|
+
}
|
|
15
|
+
/** What a genui tool returns to the model: what was pushed, and the `ui` frame's id. */
|
|
16
|
+
export interface GenuiToolOutput {
|
|
17
|
+
shown: string;
|
|
18
|
+
id: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Who a catalog is being resolved for. `tenant` is `actor.tenantRef`. `threadId` is absent only
|
|
22
|
+
* when a tool list is built outside a conversation (the MCP server's `tools/list`).
|
|
23
|
+
*/
|
|
24
|
+
export interface GenuiCatalogScope {
|
|
25
|
+
actor: Actor;
|
|
26
|
+
threadId?: string;
|
|
27
|
+
tenant?: string;
|
|
28
|
+
agentName?: string;
|
|
29
|
+
}
|
|
30
|
+
/** Answers which catalog applies to a request — a tenant's own, versioned components. */
|
|
31
|
+
export type ResolveGenuiCatalog = (scope: GenuiCatalogScope) => Catalog | Promise<Catalog>;
|
|
32
|
+
export interface GenuiToolsOptions {
|
|
33
|
+
/**
|
|
34
|
+
* `per-component` (default): one tool per model-facing component, `ui__show_<snake>`, whose input
|
|
35
|
+
* IS the component's props. `tree`: a single tool whose input is a nested
|
|
36
|
+
* `{ type, props, children }` tree composed from the catalog (json-render's nested shape).
|
|
37
|
+
*/
|
|
38
|
+
mode?: 'per-component' | 'tree';
|
|
39
|
+
/**
|
|
40
|
+
* The model's turn ends once a genui call succeeds — no further model call to narrate what the UI
|
|
41
|
+
* already shows. Stamped as `spec.terminal`.
|
|
42
|
+
*/
|
|
43
|
+
terminal?: boolean;
|
|
44
|
+
/** Tool-name prefix for `per-component`. Default `ui__show_`. */
|
|
45
|
+
namePrefix?: string;
|
|
46
|
+
/** Tool name for `tree`. Default `ui__render`. */
|
|
47
|
+
treeToolName?: string;
|
|
48
|
+
/** Extra text prepended to the tree tool's description (when to call it, house rules). */
|
|
49
|
+
treeInstructions?: string;
|
|
50
|
+
/** Size limits for `tree`. */
|
|
51
|
+
treeLimits?: TreeLimits;
|
|
52
|
+
/**
|
|
53
|
+
* Also offer ONE generic tool taking `{ component, props }`, validated against the (resolved)
|
|
54
|
+
* catalog — how a model reaches components that only exist per request (a tenant's own), which a
|
|
55
|
+
* boot-time tool list cannot name. `true` names it `ui__show`; a string names it.
|
|
56
|
+
*/
|
|
57
|
+
showTool?: boolean | string;
|
|
58
|
+
/** Extra text prepended to the show tool's description. */
|
|
59
|
+
showInstructions?: string;
|
|
60
|
+
/** Roles allowed to call the tools (the `ToolSpec.roles` gate). Undefined → the roles policy default. */
|
|
61
|
+
roles?: string[];
|
|
62
|
+
/** Override the generated presentation per component (or for the tree / show tool, under its tool name). */
|
|
63
|
+
presentation?: (component: string) => ToolPresentation | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* The catalog for THIS request, consulted when a call is validated and when the turn's tool list
|
|
66
|
+
* is described to the model. The `catalog` argument is then the boot-time one: it names the
|
|
67
|
+
* per-component tools and is what a list built without a resolver would show. Omit → the
|
|
68
|
+
* `catalog` argument serves every request.
|
|
69
|
+
*/
|
|
70
|
+
resolveCatalog?: ResolveGenuiCatalog;
|
|
71
|
+
}
|
|
72
|
+
/** The default name of the generic show tool ({@link GenuiToolsOptions.showTool}). */
|
|
73
|
+
export declare const GENUI_SHOW_TOOL = "ui__show";
|
|
74
|
+
/**
|
|
75
|
+
* Tools that let a model push catalog components into the conversation as `ui` frames. Each call
|
|
76
|
+
* validates its input against the catalog (a refused call reaches the model as a tool error it can
|
|
77
|
+
* fix) and then pushes through `ctx.emitUi`, which streams the frame live and persists it on the
|
|
78
|
+
* assistant message.
|
|
79
|
+
*/
|
|
80
|
+
export declare function genuiTools(catalog: Catalog, options?: GenuiToolsOptions): GenuiTool[];
|
|
81
|
+
/** The show tool's input: a component name (one of the catalog's) and its props. */
|
|
82
|
+
export declare function showToolJsonSchema(catalog: Catalog): JsonSchema;
|
|
83
|
+
type JsonStandardSchema = StandardSchemaV1 & StandardJSONSchemaV1;
|
|
84
|
+
/**
|
|
85
|
+
* A JSON Schema presented as a Standard Schema WITH the Standard JSON Schema extension, so the lib
|
|
86
|
+
* validates tool input through `~standard.validate` and the AI SDK adapter hands the model the
|
|
87
|
+
* schema itself (it reads `~standard.jsonSchema.input`).
|
|
88
|
+
*/
|
|
89
|
+
export declare function jsonStandardSchema(schema: JsonSchema, validate: (value: unknown) => GenuiIssue[]): JsonStandardSchema;
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/genui/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,KAAK,EAAiD,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,KAAK,OAAO,EAAyC,MAAM,cAAc,CAAC;AACnF,OAAO,EAEL,KAAK,UAAU,EAEf,KAAK,UAAU,EAGhB,MAAM,aAAa,CAAC;AAErB,OAAO,EAGL,KAAK,UAAU,EAGhB,MAAM,WAAW,CAAC;AAEnB,8GAA8G;AAC9G,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,GAAG;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACxC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,wFAAwF;AACxF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,yFAAyF;AACzF,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAE3F,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,IAAI,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0FAA0F;IAC1F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yGAAyG;IACzG,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,4GAA4G;IAC5G,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,CAAC;IACnE;;;;;OAKG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAED,sFAAsF;AACtF,eAAO,MAAM,eAAe,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,iBAAsB,GAAG,SAAS,EAAE,CASzF;AAuKD,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAgB/D;AAsHD,KAAK,kBAAkB,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,UAAU,EAAE,GACzC,kBAAkB,CAKpB"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { negotiateCatalog } from './capabilities.js';
|
|
2
|
+
import { toolNameFor } from './catalog.js';
|
|
3
|
+
import { formatIssues, isStandardSchema, toJsonSchema, validateProps, } from './schema.js';
|
|
4
|
+
import { catalogToModelText } from './text.js';
|
|
5
|
+
import { GENUI_TREE_COMPONENT, treeJsonSchema, validateTree, } from './tree.js';
|
|
6
|
+
/** The default name of the generic show tool ({@link GenuiToolsOptions.showTool}). */
|
|
7
|
+
export const GENUI_SHOW_TOOL = 'ui__show';
|
|
8
|
+
/**
|
|
9
|
+
* Tools that let a model push catalog components into the conversation as `ui` frames. Each call
|
|
10
|
+
* validates its input against the catalog (a refused call reaches the model as a tool error it can
|
|
11
|
+
* fix) and then pushes through `ctx.emitUi`, which streams the frame live and persists it on the
|
|
12
|
+
* assistant message.
|
|
13
|
+
*/
|
|
14
|
+
export function genuiTools(catalog, options = {}) {
|
|
15
|
+
const tools = options.mode === 'tree'
|
|
16
|
+
? [treeTool(catalog, options)]
|
|
17
|
+
: catalog.modelComponents().map((component) => componentTool(catalog, component, options));
|
|
18
|
+
if (options.showTool !== undefined && options.showTool !== false) {
|
|
19
|
+
tools.push(showTool(catalog, options));
|
|
20
|
+
}
|
|
21
|
+
return tools;
|
|
22
|
+
}
|
|
23
|
+
function scopeOf(input) {
|
|
24
|
+
return {
|
|
25
|
+
actor: input.actor,
|
|
26
|
+
...(input.threadId !== undefined ? { threadId: input.threadId } : {}),
|
|
27
|
+
...(input.actor.tenantRef !== undefined ? { tenant: input.actor.tenantRef } : {}),
|
|
28
|
+
...(input.agentName !== undefined ? { agentName: input.agentName } : {}),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function catalogFor(catalog, options, scope) {
|
|
32
|
+
return options.resolveCatalog === undefined ? catalog : options.resolveCatalog(scope);
|
|
33
|
+
}
|
|
34
|
+
function common(options) {
|
|
35
|
+
return {
|
|
36
|
+
...(options.roles !== undefined ? { roles: options.roles } : {}),
|
|
37
|
+
...(options.terminal === true ? { terminal: true } : {}),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function componentTool(catalog, component, options) {
|
|
41
|
+
const presentation = options.presentation?.(component.name) ?? {
|
|
42
|
+
label: component.title,
|
|
43
|
+
running: `Showing ${lowerFirst(component.title)}`,
|
|
44
|
+
done: `Showed ${lowerFirst(component.title)}`,
|
|
45
|
+
result: { kind: 'elsewhere' },
|
|
46
|
+
};
|
|
47
|
+
const describeFor = (definition) => `Show the user a ${definition.title} (${definition.name}). ${definition.description}`;
|
|
48
|
+
const dynamic = options.resolveCatalog !== undefined;
|
|
49
|
+
// With a resolver the component's schema may differ per request (a tenant's version of it), so
|
|
50
|
+
// the registry lets any object through and `execute` validates against the resolved definition.
|
|
51
|
+
const inputSchema = dynamic
|
|
52
|
+
? permissiveSchema(toJsonSchema(component.props) ?? { type: 'object' })
|
|
53
|
+
: isStandardSchema(component.props)
|
|
54
|
+
? component.props
|
|
55
|
+
: jsonStandardSchema(component.props, (value) => catalog.validator.validate(component.props, value));
|
|
56
|
+
const handler = {
|
|
57
|
+
async execute(input, ctx) {
|
|
58
|
+
const resolved = await catalogFor(catalog, options, scopeOf(ctx));
|
|
59
|
+
const definition = modelComponent(resolved, component.name);
|
|
60
|
+
if (definition === undefined) {
|
|
61
|
+
throw new Error(`component "${component.name}" is not available here`);
|
|
62
|
+
}
|
|
63
|
+
// Static handlers receive the registry's parsed output; dynamic handlers parse the
|
|
64
|
+
// request-specific input here. Never run an input transformation on portable output.
|
|
65
|
+
const validated = await validateProps(dynamic ? definition.props : (definition.outputProps ?? definition.props), input, resolved.validator);
|
|
66
|
+
if (!validated.ok) {
|
|
67
|
+
throw new Error(`invalid ${component.name} props: ${formatIssues(validated.issues)}`);
|
|
68
|
+
}
|
|
69
|
+
return push(ctx, component.name, validated.value, definition.version);
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
handler.describe = async (scope) => {
|
|
73
|
+
const resolved = negotiateCatalog(await catalogFor(catalog, options, scopeOf(scope)), scope.uiCapabilities);
|
|
74
|
+
const definition = modelComponent(resolved, component.name);
|
|
75
|
+
if (definition === undefined) {
|
|
76
|
+
return {
|
|
77
|
+
available: false,
|
|
78
|
+
description: `Not available in this conversation — do not call this tool. (${component.name})`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
description: describeFor(definition),
|
|
83
|
+
inputSchema: permissiveSchema(toJsonSchema(definition.props) ?? { type: 'object' }),
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
return {
|
|
87
|
+
spec: {
|
|
88
|
+
name: toolNameFor(component.name, options.namePrefix),
|
|
89
|
+
kind: 'read',
|
|
90
|
+
description: describeFor(component),
|
|
91
|
+
inputSchema,
|
|
92
|
+
presentation,
|
|
93
|
+
...common(options),
|
|
94
|
+
},
|
|
95
|
+
handler,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function treeTool(catalog, options) {
|
|
99
|
+
const name = options.treeToolName ?? 'ui__render';
|
|
100
|
+
const presentation = options.presentation?.(name) ?? {
|
|
101
|
+
label: 'Answer',
|
|
102
|
+
running: 'Laying out the answer',
|
|
103
|
+
done: 'Laid out the answer',
|
|
104
|
+
result: { kind: 'elsewhere' },
|
|
105
|
+
};
|
|
106
|
+
const describeFor = (resolved) => [
|
|
107
|
+
options.treeInstructions ?? 'Render a rich UI to present the answer to the user.',
|
|
108
|
+
catalogToModelText(resolved, { mode: 'tree' }),
|
|
109
|
+
].join('\n');
|
|
110
|
+
const dynamic = options.resolveCatalog !== undefined;
|
|
111
|
+
const handler = {
|
|
112
|
+
async execute(input, ctx) {
|
|
113
|
+
const resolved = await catalogFor(catalog, options, scopeOf(ctx));
|
|
114
|
+
const result = await validateTree(resolved, input, options.treeLimits, dynamic ? 'input' : 'output');
|
|
115
|
+
if (!result.ok) {
|
|
116
|
+
throw new Error(`invalid UI tree: ${formatIssues(result.issues)}`);
|
|
117
|
+
}
|
|
118
|
+
const root = result.value;
|
|
119
|
+
return push(ctx, GENUI_TREE_COMPONENT, { root });
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
handler.describe = async (scope) => {
|
|
123
|
+
const resolved = negotiateCatalog(await catalogFor(catalog, options, scopeOf(scope)), scope.uiCapabilities);
|
|
124
|
+
return {
|
|
125
|
+
available: resolved.modelComponents().length > 0,
|
|
126
|
+
description: describeFor(resolved),
|
|
127
|
+
inputSchema: permissiveSchema(treeJsonSchema(resolved)),
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
return {
|
|
131
|
+
spec: {
|
|
132
|
+
name,
|
|
133
|
+
kind: 'read',
|
|
134
|
+
description: describeFor(catalog),
|
|
135
|
+
inputSchema: dynamic
|
|
136
|
+
? permissiveSchema(treeJsonSchema(catalog))
|
|
137
|
+
: asyncJsonStandardSchema(treeJsonSchema(catalog), async (value) => {
|
|
138
|
+
const result = await validateTree(catalog, value, options.treeLimits, 'input');
|
|
139
|
+
return result.ok ? { value: result.value } : { issues: result.issues };
|
|
140
|
+
}),
|
|
141
|
+
presentation,
|
|
142
|
+
...common(options),
|
|
143
|
+
},
|
|
144
|
+
handler,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/** The show tool's input: a component name (one of the catalog's) and its props. */
|
|
148
|
+
export function showToolJsonSchema(catalog) {
|
|
149
|
+
return {
|
|
150
|
+
type: 'object',
|
|
151
|
+
properties: {
|
|
152
|
+
component: {
|
|
153
|
+
type: 'string',
|
|
154
|
+
enum: catalog.modelComponents().map((component) => component.name),
|
|
155
|
+
description: 'Component name from the catalog',
|
|
156
|
+
},
|
|
157
|
+
props: {
|
|
158
|
+
type: 'object',
|
|
159
|
+
description: "The component's props, as the catalog describes them",
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
required: ['component', 'props'],
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
async function validateShow(catalog, input, phase = 'input') {
|
|
166
|
+
if (typeof input !== 'object' || input === null || Array.isArray(input)) {
|
|
167
|
+
return { ok: false, issues: [{ path: [], message: 'must be { component, props }' }] };
|
|
168
|
+
}
|
|
169
|
+
const { component, props } = input;
|
|
170
|
+
if (typeof component !== 'string') {
|
|
171
|
+
return { ok: false, issues: [{ path: ['component'], message: 'must be a component name' }] };
|
|
172
|
+
}
|
|
173
|
+
const definition = modelComponent(catalog, component);
|
|
174
|
+
if (definition === undefined) {
|
|
175
|
+
const allowed = catalog
|
|
176
|
+
.modelComponents()
|
|
177
|
+
.map((each) => each.name)
|
|
178
|
+
.join(', ');
|
|
179
|
+
return {
|
|
180
|
+
ok: false,
|
|
181
|
+
issues: [
|
|
182
|
+
{ path: ['component'], message: `unknown component "${component}" (allowed: ${allowed})` },
|
|
183
|
+
],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
const validated = await validateProps(phase === 'input' ? definition.props : (definition.outputProps ?? definition.props), props ?? {}, catalog.validator);
|
|
187
|
+
if (!validated.ok) {
|
|
188
|
+
return {
|
|
189
|
+
ok: false,
|
|
190
|
+
issues: validated.issues.map((issue) => ({ ...issue, path: ['props', ...issue.path] })),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
return { ok: true, definition, props: validated.value };
|
|
194
|
+
}
|
|
195
|
+
function showTool(catalog, options) {
|
|
196
|
+
const name = typeof options.showTool === 'string' ? options.showTool : GENUI_SHOW_TOOL;
|
|
197
|
+
const presentation = options.presentation?.(name) ?? {
|
|
198
|
+
label: 'Show',
|
|
199
|
+
running: 'Preparing a view',
|
|
200
|
+
done: 'Showed a view',
|
|
201
|
+
result: { kind: 'elsewhere' },
|
|
202
|
+
};
|
|
203
|
+
const describeFor = (resolved) => [
|
|
204
|
+
options.showInstructions ?? 'Show the user one component from the catalog.',
|
|
205
|
+
catalogToModelText(resolved, { mode: 'show' }),
|
|
206
|
+
].join('\n');
|
|
207
|
+
const dynamic = options.resolveCatalog !== undefined;
|
|
208
|
+
const handler = {
|
|
209
|
+
async execute(input, ctx) {
|
|
210
|
+
const resolved = await catalogFor(catalog, options, scopeOf(ctx));
|
|
211
|
+
const result = await validateShow(resolved, input, dynamic ? 'input' : 'output');
|
|
212
|
+
if (!result.ok) {
|
|
213
|
+
throw new Error(`invalid ${name} call: ${formatIssues(result.issues)}`);
|
|
214
|
+
}
|
|
215
|
+
return push(ctx, result.definition.name, result.props, result.definition.version);
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
handler.describe = async (scope) => {
|
|
219
|
+
const resolved = negotiateCatalog(await catalogFor(catalog, options, scopeOf(scope)), scope.uiCapabilities);
|
|
220
|
+
return {
|
|
221
|
+
available: resolved.modelComponents().length > 0,
|
|
222
|
+
description: describeFor(resolved),
|
|
223
|
+
inputSchema: permissiveSchema(showToolJsonSchema(resolved)),
|
|
224
|
+
};
|
|
225
|
+
};
|
|
226
|
+
return {
|
|
227
|
+
spec: {
|
|
228
|
+
name,
|
|
229
|
+
kind: 'read',
|
|
230
|
+
description: describeFor(catalog),
|
|
231
|
+
inputSchema: dynamic
|
|
232
|
+
? permissiveSchema(showToolJsonSchema(catalog))
|
|
233
|
+
: asyncJsonStandardSchema(showToolJsonSchema(catalog), async (value) => {
|
|
234
|
+
const result = await validateShow(catalog, value);
|
|
235
|
+
return result.ok
|
|
236
|
+
? { value: { component: result.definition.name, props: result.props } }
|
|
237
|
+
: { issues: result.issues };
|
|
238
|
+
}),
|
|
239
|
+
presentation,
|
|
240
|
+
...common(options),
|
|
241
|
+
},
|
|
242
|
+
handler,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
function modelComponent(catalog, name) {
|
|
246
|
+
const definition = catalog.get(name);
|
|
247
|
+
return definition === undefined || definition.internal === true ? undefined : definition;
|
|
248
|
+
}
|
|
249
|
+
async function push(ctx, component, props, version) {
|
|
250
|
+
const { id } = await ctx.emitUi(component, props, version !== undefined ? { version } : {});
|
|
251
|
+
return { shown: component, id };
|
|
252
|
+
}
|
|
253
|
+
function lowerFirst(text) {
|
|
254
|
+
return text.length > 0 ? `${text[0]?.toLowerCase()}${text.slice(1)}` : text;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* A JSON Schema presented as a Standard Schema WITH the Standard JSON Schema extension, so the lib
|
|
258
|
+
* validates tool input through `~standard.validate` and the AI SDK adapter hands the model the
|
|
259
|
+
* schema itself (it reads `~standard.jsonSchema.input`).
|
|
260
|
+
*/
|
|
261
|
+
export function jsonStandardSchema(schema, validate) {
|
|
262
|
+
return asyncJsonStandardSchema(schema, (value) => {
|
|
263
|
+
const issues = validate(value);
|
|
264
|
+
return issues.length > 0 ? { issues } : { value };
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
/** Shows the model `schema`, accepts any value: validation happens in `execute`, per request. */
|
|
268
|
+
function permissiveSchema(schema) {
|
|
269
|
+
return asyncJsonStandardSchema(schema, (value) => ({ value }));
|
|
270
|
+
}
|
|
271
|
+
function asyncJsonStandardSchema(schema, validate) {
|
|
272
|
+
const toResult = (outcome) => outcome.issues !== undefined
|
|
273
|
+
? {
|
|
274
|
+
issues: outcome.issues.map((issue) => ({ message: issue.message, path: issue.path })),
|
|
275
|
+
}
|
|
276
|
+
: { value: outcome.value };
|
|
277
|
+
return {
|
|
278
|
+
'~standard': {
|
|
279
|
+
version: 1,
|
|
280
|
+
vendor: 'adonis-agora-agent-genui',
|
|
281
|
+
validate(value) {
|
|
282
|
+
const outcome = validate(value);
|
|
283
|
+
return outcome instanceof Promise ? outcome.then(toResult) : toResult(outcome);
|
|
284
|
+
},
|
|
285
|
+
jsonSchema: {
|
|
286
|
+
input: () => schema,
|
|
287
|
+
output: () => schema,
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/genui/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Catalog } from './catalog.js';
|
|
2
|
+
import { type GenuiValidation, type JsonSchema } from './schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* One node of a composed UI: a catalog component, its props, and — for components declared with
|
|
5
|
+
* `children: true` — nested nodes. The shape json-render calls a "nested element", so a tree
|
|
6
|
+
* converts to a json-render flat spec with {@link treeToFlatSpec}.
|
|
7
|
+
*/
|
|
8
|
+
export interface GenuiElement {
|
|
9
|
+
type: string;
|
|
10
|
+
props: Record<string, unknown>;
|
|
11
|
+
children?: GenuiElement[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The `ui` frame component a tree-mode tool pushes: `{ component: GENUI_TREE_COMPONENT, props: {
|
|
15
|
+
* root } }`. Not a valid component name, so it can never collide with a catalog entry.
|
|
16
|
+
*/
|
|
17
|
+
export declare const GENUI_TREE_COMPONENT = "genui:tree";
|
|
18
|
+
/** Props of a {@link GENUI_TREE_COMPONENT} frame. */
|
|
19
|
+
export interface GenuiTreeProps {
|
|
20
|
+
root: GenuiElement;
|
|
21
|
+
}
|
|
22
|
+
export interface TreeLimits {
|
|
23
|
+
/** Deepest nesting accepted. Default 12. */
|
|
24
|
+
maxDepth?: number;
|
|
25
|
+
/** Most nodes accepted in one tree. Default 200. */
|
|
26
|
+
maxNodes?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate a model-composed tree against the catalog: every node's `type` must be a model-facing
|
|
30
|
+
* component, its props must pass that component's schema, and only components declared with
|
|
31
|
+
* `children: true` may have children. Returns the tree with each node's props as its schema
|
|
32
|
+
* produced them (defaults applied by a Standard Schema, for instance).
|
|
33
|
+
*
|
|
34
|
+
* Lenient about one thing models get wrong: a `children` array sent as a JSON STRING (sometimes
|
|
35
|
+
* with a stray trailing `}`) is parsed back into the array the model plainly meant.
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateTree(catalog: Catalog, tree: unknown, limits?: TreeLimits, phase?: 'input' | 'output'): Promise<GenuiValidation<GenuiElement>>;
|
|
38
|
+
/**
|
|
39
|
+
* The JSON Schema of a tree-mode tool's input: a recursive `{ type, props, children? }` node whose
|
|
40
|
+
* `type` is one of the catalog's model-facing component names. Per-component props are described
|
|
41
|
+
* to the model in the tool description (see `catalogToModelText`) and checked by
|
|
42
|
+
* {@link validateTree}, which keeps this schema small enough for every provider.
|
|
43
|
+
*/
|
|
44
|
+
export declare function treeJsonSchema(catalog: Catalog): JsonSchema;
|
|
45
|
+
/** A json-render flat spec: `{ root, elements: { [id]: { type, props, children: id[] } } }`. */
|
|
46
|
+
export interface FlatSpec {
|
|
47
|
+
root: string;
|
|
48
|
+
elements: Record<string, {
|
|
49
|
+
type: string;
|
|
50
|
+
props: Record<string, unknown>;
|
|
51
|
+
children: string[];
|
|
52
|
+
}>;
|
|
53
|
+
}
|
|
54
|
+
/** Convert a tree to a json-render flat spec (ids are `el-0`, `el-1`, … in depth-first order). */
|
|
55
|
+
export declare function treeToFlatSpec(root: GenuiElement): FlatSpec;
|
|
56
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/genui/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAmB,KAAK,eAAe,EAAE,KAAK,UAAU,EAAiB,MAAM,aAAa,CAAC;AAEpG;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAEjD,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,OAAO,EACb,MAAM,GAAE,UAAe,EACvB,KAAK,GAAE,OAAO,GAAG,QAAmB,GACnC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CA4FxC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAsB3D;AAED,gGAAgG;AAChG,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAChG;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAa3D"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { validateProps } from './schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* The `ui` frame component a tree-mode tool pushes: `{ component: GENUI_TREE_COMPONENT, props: {
|
|
4
|
+
* root } }`. Not a valid component name, so it can never collide with a catalog entry.
|
|
5
|
+
*/
|
|
6
|
+
export const GENUI_TREE_COMPONENT = 'genui:tree';
|
|
7
|
+
/**
|
|
8
|
+
* Validate a model-composed tree against the catalog: every node's `type` must be a model-facing
|
|
9
|
+
* component, its props must pass that component's schema, and only components declared with
|
|
10
|
+
* `children: true` may have children. Returns the tree with each node's props as its schema
|
|
11
|
+
* produced them (defaults applied by a Standard Schema, for instance).
|
|
12
|
+
*
|
|
13
|
+
* Lenient about one thing models get wrong: a `children` array sent as a JSON STRING (sometimes
|
|
14
|
+
* with a stray trailing `}`) is parsed back into the array the model plainly meant.
|
|
15
|
+
*/
|
|
16
|
+
export async function validateTree(catalog, tree, limits = {}, phase = 'output') {
|
|
17
|
+
const maxDepth = limits.maxDepth ?? 12;
|
|
18
|
+
const maxNodes = limits.maxNodes ?? 200;
|
|
19
|
+
const issues = [];
|
|
20
|
+
let nodes = 0;
|
|
21
|
+
const visit = async (node, path, depth) => {
|
|
22
|
+
nodes += 1;
|
|
23
|
+
if (nodes > maxNodes) {
|
|
24
|
+
if (nodes === maxNodes + 1) {
|
|
25
|
+
issues.push({ path, message: `the tree has more than ${maxNodes} elements` });
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
if (depth > maxDepth) {
|
|
30
|
+
issues.push({ path, message: `the tree is nested deeper than ${maxDepth} levels` });
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
if (typeof node !== 'object' || node === null || Array.isArray(node)) {
|
|
34
|
+
issues.push({ path, message: 'must be an element object { type, props, children? }' });
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const element = node;
|
|
38
|
+
if (typeof element.type !== 'string') {
|
|
39
|
+
issues.push({ path: [...path, 'type'], message: 'must be a component name' });
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
const definition = catalog.get(element.type);
|
|
43
|
+
if (definition === undefined || definition.internal === true) {
|
|
44
|
+
issues.push({
|
|
45
|
+
path: [...path, 'type'],
|
|
46
|
+
message: `unknown component "${element.type}" (allowed: ${catalog
|
|
47
|
+
.modelComponents()
|
|
48
|
+
.map((component) => component.name)
|
|
49
|
+
.join(', ')})`,
|
|
50
|
+
});
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
const validated = phase === 'input'
|
|
54
|
+
? (await validateProps(definition.props, element.props ?? {}, catalog.validator))
|
|
55
|
+
: await catalog.validate(element.type, element.props ?? {});
|
|
56
|
+
let props = {};
|
|
57
|
+
if (!validated.ok) {
|
|
58
|
+
for (const issue of validated.issues) {
|
|
59
|
+
issues.push({ path: [...path, 'props', ...issue.path], message: issue.message });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
props = validated.value;
|
|
64
|
+
}
|
|
65
|
+
const rawChildren = parseChildrenIfStringified(element.children);
|
|
66
|
+
if (rawChildren === undefined || rawChildren === null) {
|
|
67
|
+
return { type: element.type, props };
|
|
68
|
+
}
|
|
69
|
+
if (!Array.isArray(rawChildren)) {
|
|
70
|
+
issues.push({
|
|
71
|
+
path: [...path, 'children'],
|
|
72
|
+
message: 'must be an array of elements (a literal array, not a string)',
|
|
73
|
+
});
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
if (rawChildren.length > 0 && definition.children !== true) {
|
|
77
|
+
issues.push({
|
|
78
|
+
path: [...path, 'children'],
|
|
79
|
+
message: `${element.type} does not take children`,
|
|
80
|
+
});
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
const children = [];
|
|
84
|
+
for (const [index, child] of rawChildren.entries()) {
|
|
85
|
+
const next = await visit(child, [...path, 'children', index], depth + 1);
|
|
86
|
+
if (next !== undefined) {
|
|
87
|
+
children.push(next);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return children.length > 0
|
|
91
|
+
? { type: element.type, props, children }
|
|
92
|
+
: { type: element.type, props };
|
|
93
|
+
};
|
|
94
|
+
const root = await visit(tree, [], 1);
|
|
95
|
+
return issues.length > 0 || root === undefined
|
|
96
|
+
? { ok: false, issues: issues.length > 0 ? issues : [{ path: [], message: 'is invalid' }] }
|
|
97
|
+
: { ok: true, value: root };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The JSON Schema of a tree-mode tool's input: a recursive `{ type, props, children? }` node whose
|
|
101
|
+
* `type` is one of the catalog's model-facing component names. Per-component props are described
|
|
102
|
+
* to the model in the tool description (see `catalogToModelText`) and checked by
|
|
103
|
+
* {@link validateTree}, which keeps this schema small enough for every provider.
|
|
104
|
+
*/
|
|
105
|
+
export function treeJsonSchema(catalog) {
|
|
106
|
+
return {
|
|
107
|
+
type: 'object',
|
|
108
|
+
properties: {
|
|
109
|
+
type: {
|
|
110
|
+
type: 'string',
|
|
111
|
+
enum: catalog.modelComponents().map((component) => component.name),
|
|
112
|
+
description: 'Component name from the catalog',
|
|
113
|
+
},
|
|
114
|
+
props: {
|
|
115
|
+
type: 'object',
|
|
116
|
+
description: "The component's props, as the catalog describes them",
|
|
117
|
+
},
|
|
118
|
+
children: {
|
|
119
|
+
type: 'array',
|
|
120
|
+
items: { $ref: '#' },
|
|
121
|
+
description: 'Nested elements, only for components that take children. A literal JSON array, never a JSON-stringified one.',
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
required: ['type', 'props'],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/** Convert a tree to a json-render flat spec (ids are `el-0`, `el-1`, … in depth-first order). */
|
|
128
|
+
export function treeToFlatSpec(root) {
|
|
129
|
+
const elements = {};
|
|
130
|
+
let next = 0;
|
|
131
|
+
const visit = (node) => {
|
|
132
|
+
const id = `el-${next++}`;
|
|
133
|
+
const entry = { type: node.type, props: node.props, children: [] };
|
|
134
|
+
elements[id] = entry;
|
|
135
|
+
for (const child of node.children ?? []) {
|
|
136
|
+
entry.children.push(visit(child));
|
|
137
|
+
}
|
|
138
|
+
return id;
|
|
139
|
+
};
|
|
140
|
+
return { root: visit(root), elements };
|
|
141
|
+
}
|
|
142
|
+
function parseChildrenIfStringified(value) {
|
|
143
|
+
if (typeof value !== 'string')
|
|
144
|
+
return value;
|
|
145
|
+
const trimmed = value.trim();
|
|
146
|
+
if (!trimmed.startsWith('['))
|
|
147
|
+
return value;
|
|
148
|
+
return leadingJsonArray(trimmed) ?? value;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* The array `text` opens with, ignoring what follows: a model that stringifies `children` tends to
|
|
152
|
+
* carry the enclosing object's `}` along, which `JSON.parse` refuses whole.
|
|
153
|
+
*/
|
|
154
|
+
function leadingJsonArray(text) {
|
|
155
|
+
let depth = 0;
|
|
156
|
+
let inString = false;
|
|
157
|
+
let escaped = false;
|
|
158
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
159
|
+
const char = text[index];
|
|
160
|
+
if (inString) {
|
|
161
|
+
if (escaped)
|
|
162
|
+
escaped = false;
|
|
163
|
+
else if (char === '\\')
|
|
164
|
+
escaped = true;
|
|
165
|
+
else if (char === '"')
|
|
166
|
+
inString = false;
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
if (char === '"')
|
|
170
|
+
inString = true;
|
|
171
|
+
else if (char === '[' || char === '{')
|
|
172
|
+
depth += 1;
|
|
173
|
+
else if (char === ']' || char === '}') {
|
|
174
|
+
depth -= 1;
|
|
175
|
+
if (depth === 0) {
|
|
176
|
+
try {
|
|
177
|
+
const parsed = JSON.parse(text.slice(0, index + 1));
|
|
178
|
+
return Array.isArray(parsed) ? parsed : undefined;
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=tree.js.map
|