@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,4 @@
|
|
|
1
|
+
export { type AutocompleteItem, type AutocompleteSource, applyCompletion, type CompletionEdit, filterAutocompleteItems, findActiveTrigger, type TriggerMatch, type TriggerPosition, } from './model.js';
|
|
2
|
+
export { createSkillsSource, type SkillSuggestionData, type SkillsSourceOptions, } from './skills-source.js';
|
|
3
|
+
export { type AutocompleteInputProps, type AutocompleteListboxProps, type AutocompleteOptionProps, type ComposerAutocomplete, type UseComposerAutocompleteOptions, useComposerAutocomplete, } from './use-composer-autocomplete.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/composer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,eAAe,EACf,KAAK,cAAc,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,uBAAuB,GACxB,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/react/core/composer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,EAEf,uBAAuB,EACvB,iBAAiB,GAGlB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAML,uBAAuB,GACxB,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/** One completion a source offers. */
|
|
2
|
+
export interface AutocompleteItem {
|
|
3
|
+
/** Unique within its source. */
|
|
4
|
+
id: string;
|
|
5
|
+
/** What the reader sees, and what the default filter matches against. */
|
|
6
|
+
label: string;
|
|
7
|
+
/** What replaces the typed token. Defaults to `label` — set it when the label is prose. */
|
|
8
|
+
value?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
/**
|
|
11
|
+
* A short trailing note a renderer right-aligns — where this came from, a keyboard shortcut, a
|
|
12
|
+
* type. Deliberately outside the default filter: typing a query should narrow by what the item
|
|
13
|
+
* IS, not by an aside about it.
|
|
14
|
+
*/
|
|
15
|
+
hint?: string;
|
|
16
|
+
/** Whatever the host's renderer needs: an icon key, a scope, the row this came from. */
|
|
17
|
+
data?: unknown;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Where a trigger character is allowed to open the menu.
|
|
21
|
+
*
|
|
22
|
+
* - `'start'` — only as the very first character of the input. This is the rule a slash command
|
|
23
|
+
* wants: `/deploy` is a command, `src/foo` and `and/or` are not.
|
|
24
|
+
* - `'word'` — at the start of any word: the input's start, or immediately after whitespace. This
|
|
25
|
+
* is the rule a mention wants: `@ada` in the middle of a sentence is a mention, `ada@example` is
|
|
26
|
+
* an address.
|
|
27
|
+
*
|
|
28
|
+
* There is no default on purpose. Which rule a trigger takes is the difference between an
|
|
29
|
+
* autocomplete that feels invisible and one that fires while somebody types a file path.
|
|
30
|
+
*/
|
|
31
|
+
export type TriggerPosition = 'start' | 'word';
|
|
32
|
+
export interface AutocompleteSource {
|
|
33
|
+
/** Identifies the source to the host; also names the listbox when `label` is omitted. */
|
|
34
|
+
id: string;
|
|
35
|
+
/** Human-facing name for the open menu. */
|
|
36
|
+
label?: string;
|
|
37
|
+
/** The single character that opens this source. Two sources never share one. */
|
|
38
|
+
trigger: string;
|
|
39
|
+
position: TriggerPosition;
|
|
40
|
+
/**
|
|
41
|
+
* The candidates for `query`. May be async; a result that arrives after the query moved on is
|
|
42
|
+
* discarded, and `signal` aborts the request that produced it. Throwing is allowed — the menu
|
|
43
|
+
* reports the failure and typing carries on.
|
|
44
|
+
*/
|
|
45
|
+
getItems: (query: string, signal: AbortSignal) => AutocompleteItem[] | Promise<AutocompleteItem[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Narrow what `getItems` returned. Defaults to {@link filterAutocompleteItems}. A source that
|
|
48
|
+
* already filtered server-side — a fuzzy match this one would undo — passes `(items) => items`.
|
|
49
|
+
*/
|
|
50
|
+
filter?: (items: AutocompleteItem[], query: string) => AutocompleteItem[];
|
|
51
|
+
/**
|
|
52
|
+
* Appended after the inserted value. Defaults to a single space, which both closes the menu and
|
|
53
|
+
* puts the caret where the command's argument goes.
|
|
54
|
+
*/
|
|
55
|
+
insertSuffix?: string;
|
|
56
|
+
}
|
|
57
|
+
/** A trigger character found before the caret, with the token being typed after it. */
|
|
58
|
+
export interface TriggerMatch {
|
|
59
|
+
source: AutocompleteSource;
|
|
60
|
+
/** Index of the trigger character itself. */
|
|
61
|
+
index: number;
|
|
62
|
+
/** The text between the trigger and the caret. Never contains whitespace. */
|
|
63
|
+
query: string;
|
|
64
|
+
}
|
|
65
|
+
export interface CompletionEdit {
|
|
66
|
+
text: string;
|
|
67
|
+
caret: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The trigger token the caret currently sits in, or `null`. Scans backwards from the caret and
|
|
71
|
+
* stops at the first whitespace, so a token is always one unbroken word: typing a space is what
|
|
72
|
+
* ends a command and hands the rest of the line back to the user as prose.
|
|
73
|
+
*/
|
|
74
|
+
export declare function findActiveTrigger(text: string, caret: number, sources: readonly AutocompleteSource[]): TriggerMatch | null;
|
|
75
|
+
/** Case-insensitive substring over label and description. The default when a source names none. */
|
|
76
|
+
export declare function filterAutocompleteItems(items: readonly AutocompleteItem[], query: string): AutocompleteItem[];
|
|
77
|
+
/**
|
|
78
|
+
* The text and caret after accepting `item`. The trigger character stays — `/deploy ` is what the
|
|
79
|
+
* user meant to type — and everything after the caret is left untouched, so completing a token in
|
|
80
|
+
* the middle of a sentence does not eat the rest of it.
|
|
81
|
+
*/
|
|
82
|
+
export declare function applyCompletion(text: string, caret: number, match: TriggerMatch, item: AutocompleteItem): CompletionEdit;
|
|
83
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/composer/model.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,yFAAyF;IACzF,EAAE,EAAE,MAAM,CAAC;IACX,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,WAAW,KAChB,gBAAgB,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACtD;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,gBAAgB,EAAE,CAAC;IAC1E;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,uFAAuF;AACvF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAID;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,kBAAkB,EAAE,GACrC,YAAY,GAAG,IAAI,CAerB;AAaD,mGAAmG;AACnG,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,gBAAgB,EAAE,EAClC,KAAK,EAAE,MAAM,GACZ,gBAAgB,EAAE,CAQpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,gBAAgB,GACrB,cAAc,CAOhB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const WHITESPACE = /\s/;
|
|
2
|
+
/**
|
|
3
|
+
* The trigger token the caret currently sits in, or `null`. Scans backwards from the caret and
|
|
4
|
+
* stops at the first whitespace, so a token is always one unbroken word: typing a space is what
|
|
5
|
+
* ends a command and hands the rest of the line back to the user as prose.
|
|
6
|
+
*/
|
|
7
|
+
export function findActiveTrigger(text, caret, sources) {
|
|
8
|
+
const end = Math.max(0, Math.min(caret, text.length));
|
|
9
|
+
for (let index = end - 1; index >= 0; index--) {
|
|
10
|
+
const char = text[index];
|
|
11
|
+
if (char === undefined || WHITESPACE.test(char)) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
const source = sources.find((candidate) => candidate.trigger === char);
|
|
15
|
+
// A trigger that fails its own position rule is just a character in the token — `@ad/x` is one
|
|
16
|
+
// mention query, not a command — so the scan continues past it rather than giving up.
|
|
17
|
+
if (source && isAllowedAt(text, index, source.position)) {
|
|
18
|
+
return { source, index, query: text.slice(index + 1, end) };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
function isAllowedAt(text, index, position) {
|
|
24
|
+
if (index === 0) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if (position === 'start') {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
const previous = text[index - 1];
|
|
31
|
+
return previous !== undefined && WHITESPACE.test(previous);
|
|
32
|
+
}
|
|
33
|
+
/** Case-insensitive substring over label and description. The default when a source names none. */
|
|
34
|
+
export function filterAutocompleteItems(items, query) {
|
|
35
|
+
// An empty needle is a substring of everything, so it needs no branch of its own.
|
|
36
|
+
const needle = query.trim().toLowerCase();
|
|
37
|
+
return items.filter((item) => item.label.toLowerCase().includes(needle) ||
|
|
38
|
+
(item.description?.toLowerCase().includes(needle) ?? false));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The text and caret after accepting `item`. The trigger character stays — `/deploy ` is what the
|
|
42
|
+
* user meant to type — and everything after the caret is left untouched, so completing a token in
|
|
43
|
+
* the middle of a sentence does not eat the rest of it.
|
|
44
|
+
*/
|
|
45
|
+
export function applyCompletion(text, caret, match, item) {
|
|
46
|
+
const end = Math.max(match.index, Math.min(caret, text.length));
|
|
47
|
+
const inserted = `${match.source.trigger}${item.value ?? item.label}${match.source.insertSuffix ?? ' '}`;
|
|
48
|
+
return {
|
|
49
|
+
text: text.slice(0, match.index) + inserted + text.slice(end),
|
|
50
|
+
caret: match.index + inserted.length,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../src/react/core/composer/model.ts"],"names":[],"mappings":"AA4EA,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,KAAa,EACb,OAAsC;IAEtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;QACvE,+FAA+F;QAC/F,sFAAsF;QACtF,IAAI,MAAM,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa,EAAE,QAAyB;IACzE,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACjC,OAAO,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,uBAAuB,CACrC,KAAkC,EAClC,KAAa;IAEb,kFAAkF;IAClF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzC,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAC9D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,KAAa,EACb,KAAmB,EACnB,IAAsB;IAEtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,GAAG,EAAE,CAAC;IACzG,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAC7D,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM;KACrC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type AgentBackend } from '../backend.js';
|
|
2
|
+
import type { AutocompleteSource } from './model.js';
|
|
3
|
+
/** What each item carries on `data`, so a renderer can show where a skill came from. */
|
|
4
|
+
export interface SkillSuggestionData {
|
|
5
|
+
/** The scope token it resolved from — the provenance a user is entitled to see. */
|
|
6
|
+
scope: string;
|
|
7
|
+
/** Scope tokens of same-named skills this one outranks, widest last. */
|
|
8
|
+
shadows?: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface SkillsSourceOptions {
|
|
11
|
+
/** Any backend with `listSkills` — `useAgentBackend()`, or `useAgentChat().backend`. */
|
|
12
|
+
backend: Pick<AgentBackend, 'listSkills'>;
|
|
13
|
+
/**
|
|
14
|
+
* Read at query time, not captured once: a threadless chat learns its id only when the backend
|
|
15
|
+
* creates one on the first send, and a skill may be scoped to a conversation.
|
|
16
|
+
*/
|
|
17
|
+
getThreadId?: () => string | undefined;
|
|
18
|
+
/** Default `/`. */
|
|
19
|
+
trigger?: string;
|
|
20
|
+
/** Default `Skills`. */
|
|
21
|
+
label?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* `GET /agent/skills` as an autocomplete source — the concrete one behind `/`, and an example of
|
|
25
|
+
* the shape any other takes. `position: 'start'` because a skill is a command: `/deploy` is one and
|
|
26
|
+
* `src/foo` is a path.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createSkillsSource(options: SkillsSourceOptions): AutocompleteSource;
|
|
29
|
+
//# sourceMappingURL=skills-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-source.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/composer/skills-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAgC,MAAM,eAAe,CAAC;AAChF,OAAO,KAAK,EAAoB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEvE,wFAAwF;AACxF,MAAM,WAAW,mBAAmB;IAClC,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,wFAAwF;IACxF,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC1C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACvC,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAqCnF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { AgentBackendUnsupportedError } from '../backend.js';
|
|
2
|
+
/**
|
|
3
|
+
* `GET /agent/skills` as an autocomplete source — the concrete one behind `/`, and an example of
|
|
4
|
+
* the shape any other takes. `position: 'start'` because a skill is a command: `/deploy` is one and
|
|
5
|
+
* `src/foo` is a path.
|
|
6
|
+
*/
|
|
7
|
+
export function createSkillsSource(options) {
|
|
8
|
+
// One read per thread. The endpoint answers with the whole scope-resolved list rather than a
|
|
9
|
+
// search, so asking again per keystroke would fetch identical rows only to filter them locally.
|
|
10
|
+
// A failed read is forgotten, so the next keystroke retries instead of caching the outage.
|
|
11
|
+
//
|
|
12
|
+
// The order it arrives in IS the precedence — most specific scope first, then alphabetical — and
|
|
13
|
+
// is passed through untouched. The type-ahead filter narrows this list by what the user typed; it
|
|
14
|
+
// never re-derives which skills apply, which is the server's answer and the model's too.
|
|
15
|
+
const byThread = new Map();
|
|
16
|
+
return {
|
|
17
|
+
id: 'skills',
|
|
18
|
+
label: options.label ?? 'Skills',
|
|
19
|
+
trigger: options.trigger ?? '/',
|
|
20
|
+
position: 'start',
|
|
21
|
+
getItems: () => {
|
|
22
|
+
const threadId = options.getThreadId?.();
|
|
23
|
+
const key = threadId ?? '';
|
|
24
|
+
const cached = byThread.get(key);
|
|
25
|
+
if (cached) {
|
|
26
|
+
return cached;
|
|
27
|
+
}
|
|
28
|
+
const listSkills = options.backend.listSkills;
|
|
29
|
+
if (listSkills === undefined) {
|
|
30
|
+
return Promise.reject(new AgentBackendUnsupportedError('listSkills'));
|
|
31
|
+
}
|
|
32
|
+
const pending = listSkills
|
|
33
|
+
.call(options.backend, threadId)
|
|
34
|
+
.then((entries) => entries.map(toItem))
|
|
35
|
+
.catch((error) => {
|
|
36
|
+
byThread.delete(key);
|
|
37
|
+
throw error;
|
|
38
|
+
});
|
|
39
|
+
byThread.set(key, pending);
|
|
40
|
+
return pending;
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function toItem(entry) {
|
|
45
|
+
const data = {
|
|
46
|
+
scope: entry.scope,
|
|
47
|
+
...(entry.shadows !== undefined ? { shadows: entry.shadows } : {}),
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
id: entry.name,
|
|
51
|
+
label: entry.name,
|
|
52
|
+
description: entry.description,
|
|
53
|
+
// `shadows` is present only on a conflict, so saying "overrides" is never noise: without it a
|
|
54
|
+
// user cannot tell "there is no org default" from "there is one and mine wins".
|
|
55
|
+
hint: entry.shadows === undefined
|
|
56
|
+
? entry.scope
|
|
57
|
+
: `${entry.scope} · overrides ${entry.shadows.join(', ')}`,
|
|
58
|
+
data,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=skills-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills-source.js","sourceRoot":"","sources":["../../../../../src/react/core/composer/skills-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAyBhF;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,6FAA6F;IAC7F,gGAAgG;IAChG,2FAA2F;IAC3F,EAAE;IACF,iGAAiG;IACjG,kGAAkG;IAClG,yFAAyF;IACzF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAuC,CAAC;IAEhE,OAAO;QACL,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,QAAQ;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,GAAG;QAC/B,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,GAAG,EAAE;YACb,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,QAAQ,IAAI,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;YAC9C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,4BAA4B,CAAC,YAAY,CAAC,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,OAAO,GAAG,UAAU;iBACvB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC;iBAC/B,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;iBACtC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBACxB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;YACL,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC3B,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAwB;IACtC,MAAM,IAAI,GAAwB;QAChC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;IACF,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,IAAI;QACd,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,8FAA8F;QAC9F,gFAAgF;QAChF,IAAI,EACF,KAAK,CAAC,OAAO,KAAK,SAAS;YACzB,CAAC,CAAC,KAAK,CAAC,KAAK;YACb,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,gBAAgB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC9D,IAAI;KACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
import { type AutocompleteItem, type AutocompleteSource } from './model.js';
|
|
3
|
+
export interface UseComposerAutocompleteOptions {
|
|
4
|
+
/** The composer's draft. Accepting an item rewrites it through `onValueChange`. */
|
|
5
|
+
value: string;
|
|
6
|
+
onValueChange: (next: string) => void;
|
|
7
|
+
/**
|
|
8
|
+
* What can be completed, and after which character. The composer knows nothing about what a
|
|
9
|
+
* source offers — a skills list and an agent mention are the same shape.
|
|
10
|
+
*/
|
|
11
|
+
sources: readonly AutocompleteSource[];
|
|
12
|
+
/** A source that threw. The menu reports it; typing is unaffected either way. */
|
|
13
|
+
onError?: (error: unknown, source: AutocompleteSource) => void;
|
|
14
|
+
/** Tab accepts the highlighted item, as Enter does. Default `true`. */
|
|
15
|
+
acceptOnTab?: boolean;
|
|
16
|
+
/** Base for the generated `id`s the ARIA wiring points at. */
|
|
17
|
+
id?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface AutocompleteInputProps {
|
|
20
|
+
ref: (element: HTMLTextAreaElement | HTMLInputElement | null) => void;
|
|
21
|
+
onChange: (event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>) => void;
|
|
22
|
+
onKeyDown: (event: React.KeyboardEvent<HTMLTextAreaElement | HTMLInputElement>) => void;
|
|
23
|
+
onSelect: (event: React.SyntheticEvent<HTMLTextAreaElement | HTMLInputElement>) => void;
|
|
24
|
+
onClick: (event: React.MouseEvent<HTMLTextAreaElement | HTMLInputElement>) => void;
|
|
25
|
+
role: 'combobox';
|
|
26
|
+
'aria-expanded': boolean;
|
|
27
|
+
'aria-autocomplete': 'list';
|
|
28
|
+
'aria-haspopup': 'listbox';
|
|
29
|
+
'aria-controls'?: string;
|
|
30
|
+
'aria-activedescendant'?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface AutocompleteListboxProps {
|
|
33
|
+
id: string;
|
|
34
|
+
role: 'listbox';
|
|
35
|
+
'aria-label': string;
|
|
36
|
+
}
|
|
37
|
+
export interface AutocompleteOptionProps {
|
|
38
|
+
id: string;
|
|
39
|
+
role: 'option';
|
|
40
|
+
'aria-selected': boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface ComposerAutocomplete {
|
|
43
|
+
isOpen: boolean;
|
|
44
|
+
/** The source behind the open menu, so a renderer can group or label by it. */
|
|
45
|
+
source: AutocompleteSource | null;
|
|
46
|
+
trigger: string | null;
|
|
47
|
+
/** The text between the trigger and the caret. */
|
|
48
|
+
query: string;
|
|
49
|
+
items: AutocompleteItem[];
|
|
50
|
+
activeIndex: number;
|
|
51
|
+
activeItem: AutocompleteItem | null;
|
|
52
|
+
/** An async source has been asked and has not answered yet. */
|
|
53
|
+
isLoading: boolean;
|
|
54
|
+
/** The message from a source that threw. The menu stays open and empty. */
|
|
55
|
+
error: string | null;
|
|
56
|
+
highlight: (index: number) => void;
|
|
57
|
+
/** Wraps at both ends, so ↓ from the last item lands on the first. */
|
|
58
|
+
moveHighlight: (delta: number) => void;
|
|
59
|
+
/** Insert an item — the highlighted one by default. A click handler calls this directly. */
|
|
60
|
+
accept: (item?: AutocompleteItem) => void;
|
|
61
|
+
/** Close for the token being typed, without touching the text. */
|
|
62
|
+
dismiss: () => void;
|
|
63
|
+
getInputProps: () => AutocompleteInputProps;
|
|
64
|
+
getListboxProps: () => AutocompleteListboxProps;
|
|
65
|
+
getOptionProps: (index: number) => AutocompleteOptionProps;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The state machine behind a `/`-style autocomplete in a chat composer: which trigger the caret is
|
|
69
|
+
* inside, what the query is, which items answer it, which one is highlighted, and what accepting
|
|
70
|
+
* one does to the text and the caret. It renders nothing and knows nothing about skills, agents or
|
|
71
|
+
* threads — a host supplies sources, and the same machine drives `@` as drives `/`.
|
|
72
|
+
*
|
|
73
|
+
* The keys the open menu owns (↑ ↓ Enter Tab Escape) are consumed with `preventDefault`, which is
|
|
74
|
+
* how a composer that sends on Enter knows to stand down: call this handler first and return early
|
|
75
|
+
* when the event comes back `defaultPrevented`.
|
|
76
|
+
*/
|
|
77
|
+
export declare function useComposerAutocomplete(options: UseComposerAutocompleteOptions): ComposerAutocomplete;
|
|
78
|
+
//# sourceMappingURL=use-composer-autocomplete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-composer-autocomplete.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/composer/use-composer-autocomplete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { useCallback, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { applyCompletion, filterAutocompleteItems, findActiveTrigger, } from './model.js';
|
|
3
|
+
/**
|
|
4
|
+
* The state machine behind a `/`-style autocomplete in a chat composer: which trigger the caret is
|
|
5
|
+
* inside, what the query is, which items answer it, which one is highlighted, and what accepting
|
|
6
|
+
* one does to the text and the caret. It renders nothing and knows nothing about skills, agents or
|
|
7
|
+
* threads — a host supplies sources, and the same machine drives `@` as drives `/`.
|
|
8
|
+
*
|
|
9
|
+
* The keys the open menu owns (↑ ↓ Enter Tab Escape) are consumed with `preventDefault`, which is
|
|
10
|
+
* how a composer that sends on Enter knows to stand down: call this handler first and return early
|
|
11
|
+
* when the event comes back `defaultPrevented`.
|
|
12
|
+
*/
|
|
13
|
+
export function useComposerAutocomplete(options) {
|
|
14
|
+
const { value, sources, acceptOnTab = true } = options;
|
|
15
|
+
const latest = useRef(options);
|
|
16
|
+
latest.current = options;
|
|
17
|
+
const inputRef = useRef(null);
|
|
18
|
+
const [caret, setCaret] = useState(value.length);
|
|
19
|
+
const [items, setItems] = useState([]);
|
|
20
|
+
const [isLoading, setLoading] = useState(false);
|
|
21
|
+
const [error, setError] = useState(null);
|
|
22
|
+
const [activeIndex, setActiveIndex] = useState(0);
|
|
23
|
+
// The trigger index Escape closed. Cleared the moment the caret leaves that token, so deleting
|
|
24
|
+
// the trigger and typing it again offers the menu rather than staying silently dismissed.
|
|
25
|
+
const [dismissedIndex, setDismissedIndex] = useState(null);
|
|
26
|
+
// Clamped: a host that resets the draft externally leaves the caret past the end of the text.
|
|
27
|
+
const safeCaret = Math.min(caret, value.length);
|
|
28
|
+
const match = useMemo(() => findActiveTrigger(value, safeCaret, sources), [value, safeCaret, sources]);
|
|
29
|
+
const isActive = match !== null && dismissedIndex !== match.index;
|
|
30
|
+
const matchRef = useRef(match);
|
|
31
|
+
matchRef.current = match;
|
|
32
|
+
const caretRef = useRef(safeCaret);
|
|
33
|
+
caretRef.current = safeCaret;
|
|
34
|
+
const itemsRef = useRef(items);
|
|
35
|
+
itemsRef.current = items;
|
|
36
|
+
const activeIndexRef = useRef(activeIndex);
|
|
37
|
+
activeIndexRef.current = activeIndex;
|
|
38
|
+
// Identifies the question being asked, so a re-render that changes neither the source nor the
|
|
39
|
+
// query does not re-ask — an async source would otherwise fetch on every unrelated render. The
|
|
40
|
+
// NUL separator cannot appear in either half, so no pair of them collides.
|
|
41
|
+
const requestKey = isActive && match ? `${match.source.id}\u0000${match.query}` : null;
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
const current = matchRef.current;
|
|
44
|
+
if (requestKey === null || current === null) {
|
|
45
|
+
setItems([]);
|
|
46
|
+
setLoading(false);
|
|
47
|
+
setError(null);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const { source, query } = current;
|
|
51
|
+
const controller = new AbortController();
|
|
52
|
+
// The cleanup below runs before the next query's effect, so a slow answer to an abandoned
|
|
53
|
+
// query finds `superseded` already true and is dropped instead of overwriting a newer list.
|
|
54
|
+
let superseded = false;
|
|
55
|
+
const settle = (next) => {
|
|
56
|
+
if (superseded)
|
|
57
|
+
return;
|
|
58
|
+
setItems((source.filter ?? filterAutocompleteItems)(next, query));
|
|
59
|
+
setActiveIndex(0);
|
|
60
|
+
setLoading(false);
|
|
61
|
+
setError(null);
|
|
62
|
+
};
|
|
63
|
+
const failed = (cause) => {
|
|
64
|
+
if (superseded)
|
|
65
|
+
return;
|
|
66
|
+
setItems([]);
|
|
67
|
+
setLoading(false);
|
|
68
|
+
setError(cause instanceof Error ? cause.message : 'Could not load suggestions');
|
|
69
|
+
latest.current.onError?.(cause, source);
|
|
70
|
+
};
|
|
71
|
+
let result;
|
|
72
|
+
try {
|
|
73
|
+
result = source.getItems(query, controller.signal);
|
|
74
|
+
}
|
|
75
|
+
catch (cause) {
|
|
76
|
+
failed(cause);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// A static source answers in the same tick: settling synchronously spares the list a frame of
|
|
80
|
+
// emptiness between the trigger being typed and its items appearing.
|
|
81
|
+
if (!isPromise(result)) {
|
|
82
|
+
settle(result);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
setLoading(true);
|
|
86
|
+
setError(null);
|
|
87
|
+
result.then(settle, failed);
|
|
88
|
+
return () => {
|
|
89
|
+
superseded = true;
|
|
90
|
+
controller.abort();
|
|
91
|
+
};
|
|
92
|
+
}, [requestKey]);
|
|
93
|
+
// Open the moment the caret is inside a live trigger token, before any items are in: an empty
|
|
94
|
+
// menu that says "no matches" is an answer, whereas a menu that never appears reads as broken.
|
|
95
|
+
// The keys the menu owns are still only taken when there is something to take them for.
|
|
96
|
+
const isOpen = isActive;
|
|
97
|
+
const activeItem = isOpen ? (items[activeIndex] ?? null) : null;
|
|
98
|
+
const reactId = useId();
|
|
99
|
+
const listboxId = options.id ?? `agent-autocomplete-${reactId}`;
|
|
100
|
+
const optionId = useCallback((index) => `${listboxId}-option-${index}`, [listboxId]);
|
|
101
|
+
const highlight = useCallback((index) => {
|
|
102
|
+
const total = itemsRef.current.length;
|
|
103
|
+
if (total === 0)
|
|
104
|
+
return;
|
|
105
|
+
setActiveIndex(((index % total) + total) % total);
|
|
106
|
+
}, []);
|
|
107
|
+
const moveHighlight = useCallback((delta) => highlight(activeIndexRef.current + delta), [highlight]);
|
|
108
|
+
const dismiss = useCallback(() => {
|
|
109
|
+
const current = matchRef.current;
|
|
110
|
+
if (current)
|
|
111
|
+
setDismissedIndex(current.index);
|
|
112
|
+
}, []);
|
|
113
|
+
// Set after an accept and consumed on the next commit: the textarea is controlled, so React
|
|
114
|
+
// writes the new value only once this render lands and any caret set before that is overwritten.
|
|
115
|
+
const pendingCaret = useRef(null);
|
|
116
|
+
const accept = useCallback((item) => {
|
|
117
|
+
const current = matchRef.current;
|
|
118
|
+
if (!current)
|
|
119
|
+
return;
|
|
120
|
+
const chosen = item ?? itemsRef.current[activeIndexRef.current];
|
|
121
|
+
if (!chosen)
|
|
122
|
+
return;
|
|
123
|
+
const edit = applyCompletion(latest.current.value, caretRef.current, current, chosen);
|
|
124
|
+
latest.current.onValueChange(edit.text);
|
|
125
|
+
setCaret(edit.caret);
|
|
126
|
+
setDismissedIndex(null);
|
|
127
|
+
pendingCaret.current = edit.caret;
|
|
128
|
+
}, []);
|
|
129
|
+
useLayoutEffect(() => {
|
|
130
|
+
const position = pendingCaret.current;
|
|
131
|
+
if (position === null)
|
|
132
|
+
return;
|
|
133
|
+
pendingCaret.current = null;
|
|
134
|
+
inputRef.current?.setSelectionRange(position, position);
|
|
135
|
+
});
|
|
136
|
+
const readCaret = useCallback((element) => {
|
|
137
|
+
setCaret(element.selectionStart ?? element.value.length);
|
|
138
|
+
}, []);
|
|
139
|
+
const onKeyDown = useCallback((event) => {
|
|
140
|
+
if (!isOpen)
|
|
141
|
+
return;
|
|
142
|
+
const hasItems = itemsRef.current.length > 0;
|
|
143
|
+
switch (event.key) {
|
|
144
|
+
case 'ArrowDown':
|
|
145
|
+
if (!hasItems)
|
|
146
|
+
return;
|
|
147
|
+
event.preventDefault();
|
|
148
|
+
moveHighlight(1);
|
|
149
|
+
return;
|
|
150
|
+
case 'ArrowUp':
|
|
151
|
+
if (!hasItems)
|
|
152
|
+
return;
|
|
153
|
+
event.preventDefault();
|
|
154
|
+
moveHighlight(-1);
|
|
155
|
+
return;
|
|
156
|
+
case 'Enter':
|
|
157
|
+
if (!hasItems)
|
|
158
|
+
return;
|
|
159
|
+
event.preventDefault();
|
|
160
|
+
accept();
|
|
161
|
+
return;
|
|
162
|
+
case 'Tab':
|
|
163
|
+
// Shift+Tab stays a backwards focus move: a completion menu is not a focus trap.
|
|
164
|
+
if (!acceptOnTab || event.shiftKey || !hasItems)
|
|
165
|
+
return;
|
|
166
|
+
event.preventDefault();
|
|
167
|
+
accept();
|
|
168
|
+
return;
|
|
169
|
+
case 'Escape':
|
|
170
|
+
event.preventDefault();
|
|
171
|
+
dismiss();
|
|
172
|
+
return;
|
|
173
|
+
default:
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
}, [isOpen, acceptOnTab, accept, dismiss, moveHighlight]);
|
|
177
|
+
const onChange = useCallback((event) => {
|
|
178
|
+
readCaret(event.target);
|
|
179
|
+
// A token the user has walked away from is no longer dismissed — it is gone.
|
|
180
|
+
const next = findActiveTrigger(event.target.value, event.target.selectionStart ?? event.target.value.length, latest.current.sources);
|
|
181
|
+
setDismissedIndex((current) => current !== null && next?.index === current ? current : null);
|
|
182
|
+
}, [readCaret]);
|
|
183
|
+
const onSelect = useCallback((event) => readCaret(event.currentTarget), [readCaret]);
|
|
184
|
+
const onClick = useCallback((event) => readCaret(event.currentTarget), [readCaret]);
|
|
185
|
+
const setInput = useCallback((element) => {
|
|
186
|
+
inputRef.current = element;
|
|
187
|
+
}, []);
|
|
188
|
+
const getInputProps = useCallback(() => ({
|
|
189
|
+
ref: setInput,
|
|
190
|
+
onChange,
|
|
191
|
+
onKeyDown,
|
|
192
|
+
onSelect,
|
|
193
|
+
onClick,
|
|
194
|
+
role: 'combobox',
|
|
195
|
+
'aria-expanded': isOpen,
|
|
196
|
+
'aria-autocomplete': 'list',
|
|
197
|
+
'aria-haspopup': 'listbox',
|
|
198
|
+
...(isOpen ? { 'aria-controls': listboxId } : {}),
|
|
199
|
+
...(activeItem ? { 'aria-activedescendant': optionId(activeIndex) } : {}),
|
|
200
|
+
}), [
|
|
201
|
+
setInput,
|
|
202
|
+
onChange,
|
|
203
|
+
onKeyDown,
|
|
204
|
+
onSelect,
|
|
205
|
+
onClick,
|
|
206
|
+
isOpen,
|
|
207
|
+
listboxId,
|
|
208
|
+
activeItem,
|
|
209
|
+
activeIndex,
|
|
210
|
+
optionId,
|
|
211
|
+
]);
|
|
212
|
+
const getListboxProps = useCallback(() => ({
|
|
213
|
+
id: listboxId,
|
|
214
|
+
role: 'listbox',
|
|
215
|
+
'aria-label': match?.source.label ?? match?.source.id ?? 'Suggestions',
|
|
216
|
+
}), [listboxId, match]);
|
|
217
|
+
const getOptionProps = useCallback((index) => ({
|
|
218
|
+
id: optionId(index),
|
|
219
|
+
role: 'option',
|
|
220
|
+
'aria-selected': index === activeIndex,
|
|
221
|
+
}), [optionId, activeIndex]);
|
|
222
|
+
return {
|
|
223
|
+
isOpen,
|
|
224
|
+
source: isOpen && match ? match.source : null,
|
|
225
|
+
trigger: isOpen && match ? match.source.trigger : null,
|
|
226
|
+
query: match?.query ?? '',
|
|
227
|
+
items,
|
|
228
|
+
activeIndex,
|
|
229
|
+
activeItem,
|
|
230
|
+
isLoading,
|
|
231
|
+
error,
|
|
232
|
+
highlight,
|
|
233
|
+
moveHighlight,
|
|
234
|
+
accept,
|
|
235
|
+
dismiss,
|
|
236
|
+
getInputProps,
|
|
237
|
+
getListboxProps,
|
|
238
|
+
getOptionProps,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function isPromise(value) {
|
|
242
|
+
return typeof value.then === 'function';
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=use-composer-autocomplete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-composer-autocomplete.js","sourceRoot":"","sources":["../../../../../src/react/core/composer/use-composer-autocomplete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AgentClientConfig } from '../../../index.js';
|
|
2
|
+
import type { AgentBackend } from '../backend.js';
|
|
3
|
+
export interface UseAgentConfigOptions {
|
|
4
|
+
/** Default: the enclosing `<AgentProvider>`'s. Without `getConfig` the config stays `undefined`. */
|
|
5
|
+
backend?: AgentBackend;
|
|
6
|
+
/** `false` holds the request. Default `true`. */
|
|
7
|
+
enabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface AgentConfigState {
|
|
10
|
+
/** `GET <base>/config`, once loaded — `undefined` before, on a failure, or on a backend without it. */
|
|
11
|
+
config: AgentClientConfig | undefined;
|
|
12
|
+
isLoading: boolean;
|
|
13
|
+
error: Error | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The server's client config (`GET <base>/config`): attachment limits and upload mode, and whether a
|
|
17
|
+
* model picker, a quota and anonymous identities are in play. Fetched once per backend and shared;
|
|
18
|
+
* `useAttachments` takes its defaults from it.
|
|
19
|
+
*/
|
|
20
|
+
export declare function useAgentConfig(options?: UseAgentConfigOptions): AgentConfigState;
|
|
21
|
+
//# sourceMappingURL=use-agent-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-agent-config.d.ts","sourceRoot":"","sources":["../../../../../src/react/core/config/use-agent-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,WAAW,qBAAqB;IACpC,oGAAoG;IACpG,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,iDAAiD;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,uGAAuG;IACvG,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAoBD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,gBAAgB,CAgCpF"}
|