@dxos/plugin-assistant 0.8.3-staging.0fa589b → 0.8.4-main.c1de068
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/dist/lib/browser/ChatContainer-M3IHQLRS.mjs +54 -0
- package/dist/lib/browser/ChatContainer-M3IHQLRS.mjs.map +7 -0
- package/dist/lib/browser/ChatDialog-X6VN6QZI.mjs +72 -0
- package/dist/lib/browser/ChatDialog-X6VN6QZI.mjs.map +7 -0
- package/dist/lib/browser/SequenceContainer-3UDVKWPA.mjs +162 -0
- package/dist/lib/browser/SequenceContainer-3UDVKWPA.mjs.map +7 -0
- package/dist/lib/browser/{TemplateContainer-QQHVOTSI.mjs → TemplateContainer-RPJ2LBOB.mjs} +5 -6
- package/dist/lib/browser/TemplateContainer-RPJ2LBOB.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-E4H5DCOJ.mjs → app-graph-builder-JTXBKE7O.mjs} +34 -36
- package/dist/lib/browser/app-graph-builder-JTXBKE7O.mjs.map +7 -0
- package/dist/lib/browser/chunk-AEAEKWOC.mjs +98 -0
- package/dist/lib/browser/chunk-AEAEKWOC.mjs.map +7 -0
- package/dist/lib/browser/{chunk-BI6AHRNJ.mjs → chunk-EQDW6BYQ.mjs} +19 -68
- package/dist/lib/browser/chunk-EQDW6BYQ.mjs.map +7 -0
- package/dist/lib/{node/chunk-P74TWGMG.cjs → browser/chunk-FDCJSQYF.mjs} +10 -14
- package/dist/lib/{node-esm/chunk-BB2TAT4P.mjs.map → browser/chunk-FDCJSQYF.mjs.map} +1 -1
- package/dist/lib/browser/chunk-JQBVLTM5.mjs +158 -0
- package/dist/lib/browser/chunk-JQBVLTM5.mjs.map +7 -0
- package/dist/lib/browser/chunk-OWY4CUQY.mjs +2245 -0
- package/dist/lib/browser/chunk-OWY4CUQY.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +87 -119
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/intent-resolver-5RMMCMXG.mjs +60 -0
- package/dist/lib/browser/intent-resolver-5RMMCMXG.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-LXCNUSZN.mjs → react-surface-66VY37YQ.mjs} +42 -51
- package/dist/lib/browser/react-surface-66VY37YQ.mjs.map +7 -0
- package/dist/lib/browser/{settings-XRHXVWGB.mjs → settings-2DGP3UTS.mjs} +6 -6
- package/dist/lib/browser/settings-2DGP3UTS.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +4 -20
- package/dist/lib/node-esm/ChatContainer-VZT74PO2.mjs +55 -0
- package/dist/lib/node-esm/ChatContainer-VZT74PO2.mjs.map +7 -0
- package/dist/lib/node-esm/ChatDialog-RJ6FDX4Q.mjs +73 -0
- package/dist/lib/node-esm/ChatDialog-RJ6FDX4Q.mjs.map +7 -0
- package/dist/lib/node-esm/SequenceContainer-RQQH5XOC.mjs +163 -0
- package/dist/lib/node-esm/SequenceContainer-RQQH5XOC.mjs.map +7 -0
- package/dist/lib/node-esm/{TemplateContainer-SOEWY2ZN.mjs → TemplateContainer-A3NAQCZE.mjs} +5 -6
- package/dist/lib/node-esm/TemplateContainer-A3NAQCZE.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-3SY5MBIK.mjs → app-graph-builder-OWSOXFTD.mjs} +34 -36
- package/dist/lib/node-esm/app-graph-builder-OWSOXFTD.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OYN6HLXZ.mjs → chunk-2XL6MNPE.mjs} +44 -33
- package/dist/lib/node-esm/chunk-2XL6MNPE.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-BISJDTBK.mjs +159 -0
- package/dist/lib/node-esm/chunk-BISJDTBK.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-UCOFKNKN.mjs → chunk-E33DNNDW.mjs} +19 -68
- package/dist/lib/node-esm/chunk-E33DNNDW.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-QN2H2EHV.mjs +41 -0
- package/dist/lib/{browser/chunk-XOZ7YMO3.mjs.map → node-esm/chunk-QN2H2EHV.mjs.map} +1 -1
- package/dist/lib/node-esm/chunk-SENTQAEO.mjs +2246 -0
- package/dist/lib/node-esm/chunk-SENTQAEO.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +87 -119
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/intent-resolver-YPPYELY3.mjs +61 -0
- package/dist/lib/node-esm/intent-resolver-YPPYELY3.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-7HA5EDWY.mjs → react-surface-RJMRBR2M.mjs} +42 -51
- package/dist/lib/node-esm/react-surface-RJMRBR2M.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-5IAY6BT4.mjs → settings-47RYZOU4.mjs} +6 -6
- package/dist/lib/node-esm/settings-47RYZOU4.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +4 -20
- package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +1 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +2 -2
- package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
- package/dist/types/src/components/Chat/Chat.d.ts +47 -0
- package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
- package/dist/types/src/components/Chat/events.d.ts +30 -0
- package/dist/types/src/components/Chat/events.d.ts.map +1 -0
- package/dist/types/src/components/Chat/index.d.ts +3 -0
- package/dist/types/src/components/Chat/index.d.ts.map +1 -0
- package/dist/types/src/components/ChatContainer.d.ts +6 -6
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/ChatDialog.d.ts +8 -0
- package/dist/types/src/components/ChatDialog.d.ts.map +1 -0
- package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +11 -0
- package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -0
- package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts +9 -0
- package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts.map +1 -0
- package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts +11 -0
- package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts.map +1 -0
- package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +11 -0
- package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -0
- package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +8 -0
- package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -0
- package/dist/types/src/components/ChatPrompt/index.d.ts +6 -0
- package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/ChatMessage.d.ts +17 -0
- package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/ChatThread.d.ts +19 -0
- package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +241 -0
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/ToolBlock.d.ts +19 -0
- package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/index.d.ts +2 -0
- package/dist/types/src/components/ChatThread/index.d.ts.map +1 -0
- package/dist/types/src/components/{Thread → ChatThread}/reducer.d.ts +4 -4
- package/dist/types/src/components/ChatThread/reducer.d.ts.map +1 -0
- package/dist/types/src/components/PromptSettings.d.ts +2 -2
- package/dist/types/src/components/PromptSettings.d.ts.map +1 -1
- package/dist/types/src/components/SequenceContainer.d.ts +8 -0
- package/dist/types/src/components/SequenceContainer.d.ts.map +1 -0
- package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts +13 -0
- package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +1 -0
- package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +8 -0
- package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +1 -0
- package/dist/types/src/components/SequenceEditor/index.d.ts +2 -0
- package/dist/types/src/components/SequenceEditor/index.d.ts.map +1 -0
- package/dist/types/src/components/TemplateContainer.d.ts +5 -5
- package/dist/types/src/components/TemplateContainer.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +2 -2
- package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +3 -3
- package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +3 -3
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.d.ts +11 -4
- package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +6 -12
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/hooks/{processor.d.ts → chat-processor.d.ts} +36 -22
- package/dist/types/src/hooks/chat-processor.d.ts.map +1 -0
- package/dist/types/src/hooks/chat-processor.test.d.ts +2 -0
- package/dist/types/src/hooks/chat-processor.test.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +5 -5
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/presets.d.ts +13 -0
- package/dist/types/src/hooks/presets.d.ts.map +1 -0
- package/dist/types/src/hooks/useBlueprints.d.ts +9 -0
- package/dist/types/src/hooks/useBlueprints.d.ts.map +1 -0
- package/dist/types/src/hooks/useChatProcessor.d.ts +20 -8
- package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatServices.d.ts +14 -0
- package/dist/types/src/hooks/useChatServices.d.ts.map +1 -0
- package/dist/types/src/hooks/useReferencesProvider.d.ts +7 -0
- package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -0
- package/dist/types/src/parser/index.d.ts +1 -1
- package/dist/types/src/parser/index.d.ts.map +1 -1
- package/dist/types/src/queue-logger.d.ts +5 -5
- package/dist/types/src/queue-logger.d.ts.map +1 -1
- package/dist/types/src/stories/Chat.stories.d.ts +249 -0
- package/dist/types/src/stories/Chat.stories.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +1 -1
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-sequence.d.ts +8 -0
- package/dist/types/src/testing/test-sequence.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +77 -113
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +1 -3
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +88 -0
- package/dist/types/src/types/schema.d.ts.map +1 -0
- package/dist/types/src/types/service.d.ts +9 -9
- package/dist/types/src/types/service.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +80 -74
- package/src/AssistantPlugin.tsx +20 -47
- package/src/capabilities/app-graph-builder.ts +35 -30
- package/src/capabilities/index.ts +0 -3
- package/src/capabilities/intent-resolver.ts +27 -14
- package/src/capabilities/react-surface.tsx +38 -37
- package/src/capabilities/settings.ts +3 -3
- package/src/components/AssistantSettings/AssistantSettings.tsx +4 -4
- package/src/components/Chat/Chat.tsx +388 -0
- package/src/components/Chat/events.ts +50 -0
- package/src/components/Chat/index.ts +7 -0
- package/src/components/ChatContainer.tsx +26 -20
- package/src/components/ChatDialog.tsx +64 -0
- package/src/components/ChatPrompt/ChatActions.tsx +71 -0
- package/src/components/ChatPrompt/ChatOptionsMenu.tsx +52 -0
- package/src/components/ChatPrompt/ChatPresets.tsx +28 -0
- package/src/components/ChatPrompt/ChatReferences.tsx +53 -0
- package/src/components/ChatPrompt/ChatStatusIndicator.tsx +39 -0
- package/src/components/ChatPrompt/index.ts +9 -0
- package/src/components/ChatThread/ChatMessage.tsx +268 -0
- package/src/components/ChatThread/ChatThread.stories.tsx +143 -0
- package/src/components/ChatThread/ChatThread.tsx +57 -0
- package/src/components/{Thread/ToolInvocations.tsx → ChatThread/ToolBlock.tsx} +36 -21
- package/src/{experimental/transcription → components/ChatThread}/index.ts +2 -0
- package/src/components/{Thread → ChatThread}/reducer.ts +14 -14
- package/src/components/PromptSettings.tsx +43 -45
- package/src/components/SequenceContainer.tsx +132 -0
- package/src/components/SequenceEditor/SequenceEditor.stories.tsx +32 -0
- package/src/components/{BlueprintEditor/BlueprintEditor.tsx → SequenceEditor/SequenceEditor.tsx} +7 -7
- package/src/components/{AmbientDialog → SequenceEditor}/index.ts +1 -1
- package/src/components/TemplateContainer.tsx +8 -7
- package/src/components/TemplateEditor/TemplateEditor.stories.tsx +28 -33
- package/src/components/TemplateEditor/TemplateEditor.tsx +32 -19
- package/src/components/TemplateEditor/TemplateForm.stories.tsx +15 -15
- package/src/components/TemplateEditor/TemplateForm.tsx +47 -55
- package/src/components/Toolbox/Toolbox.stories.tsx +5 -6
- package/src/components/Toolbox/Toolbox.tsx +60 -4
- package/src/components/index.ts +4 -5
- package/src/events.ts +2 -2
- package/src/hooks/{processor.test.ts → chat-processor.test.ts} +3 -2
- package/src/hooks/chat-processor.ts +314 -0
- package/src/hooks/index.ts +5 -5
- package/src/hooks/presets.ts +52 -0
- package/src/hooks/useBlueprints.ts +57 -0
- package/src/hooks/useChatProcessor.ts +143 -0
- package/src/hooks/useChatServices.ts +91 -0
- package/src/hooks/{useContextProvider.ts → useReferencesProvider.ts} +14 -14
- package/src/parser/index.ts +1 -1
- package/src/queue-logger.ts +6 -6
- package/src/stories/Chat.stories.tsx +378 -0
- package/src/testing/index.ts +1 -1
- package/src/testing/test-functions.ts +1 -1
- package/src/testing/test-sequence.ts +51 -0
- package/src/tools/openapi.test.ts +11 -11
- package/src/translations.ts +43 -23
- package/src/types/index.ts +1 -3
- package/src/types/schema.ts +95 -0
- package/dist/lib/browser/AssistantDialog-MQOOR364.mjs +0 -47
- package/dist/lib/browser/AssistantDialog-MQOOR364.mjs.map +0 -7
- package/dist/lib/browser/BlueprintContainer-AT5Y7EXG.mjs +0 -321
- package/dist/lib/browser/BlueprintContainer-AT5Y7EXG.mjs.map +0 -7
- package/dist/lib/browser/ChatContainer-C2NEAS3A.mjs +0 -40
- package/dist/lib/browser/ChatContainer-C2NEAS3A.mjs.map +0 -7
- package/dist/lib/browser/TemplateContainer-QQHVOTSI.mjs.map +0 -7
- package/dist/lib/browser/ai-client-MK2ZZII2.mjs +0 -39
- package/dist/lib/browser/ai-client-MK2ZZII2.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-E4H5DCOJ.mjs.map +0 -7
- package/dist/lib/browser/chunk-AAOKC2JN.mjs +0 -208
- package/dist/lib/browser/chunk-AAOKC2JN.mjs.map +0 -7
- package/dist/lib/browser/chunk-BI6AHRNJ.mjs.map +0 -7
- package/dist/lib/browser/chunk-JO4W3MF7.mjs +0 -2101
- package/dist/lib/browser/chunk-JO4W3MF7.mjs.map +0 -7
- package/dist/lib/browser/chunk-JQFUME3B.mjs +0 -87
- package/dist/lib/browser/chunk-JQFUME3B.mjs.map +0 -7
- package/dist/lib/browser/chunk-MEGMOFJB.mjs +0 -16
- package/dist/lib/browser/chunk-MEGMOFJB.mjs.map +0 -7
- package/dist/lib/browser/chunk-Q6UZ4F3H.mjs +0 -96
- package/dist/lib/browser/chunk-Q6UZ4F3H.mjs.map +0 -7
- package/dist/lib/browser/chunk-UE3IZ4PN.mjs +0 -15
- package/dist/lib/browser/chunk-UE3IZ4PN.mjs.map +0 -7
- package/dist/lib/browser/chunk-XOZ7YMO3.mjs +0 -20
- package/dist/lib/browser/intent-resolver-3UICTGPM.mjs +0 -43
- package/dist/lib/browser/intent-resolver-3UICTGPM.mjs.map +0 -7
- package/dist/lib/browser/react-surface-LXCNUSZN.mjs.map +0 -7
- package/dist/lib/browser/settings-XRHXVWGB.mjs.map +0 -7
- package/dist/lib/node/AssistantDialog-AN4Z6YUV.cjs +0 -73
- package/dist/lib/node/AssistantDialog-AN4Z6YUV.cjs.map +0 -7
- package/dist/lib/node/BlueprintContainer-NOWLDYCZ.cjs +0 -344
- package/dist/lib/node/BlueprintContainer-NOWLDYCZ.cjs.map +0 -7
- package/dist/lib/node/ChatContainer-VKYBQHUB.cjs +0 -68
- package/dist/lib/node/ChatContainer-VKYBQHUB.cjs.map +0 -7
- package/dist/lib/node/TemplateContainer-JZF2DCCG.cjs +0 -58
- package/dist/lib/node/TemplateContainer-JZF2DCCG.cjs.map +0 -7
- package/dist/lib/node/ai-client-7HNSMUMT.cjs +0 -53
- package/dist/lib/node/ai-client-7HNSMUMT.cjs.map +0 -7
- package/dist/lib/node/app-graph-builder-PPR5B5KU.cjs +0 -235
- package/dist/lib/node/app-graph-builder-PPR5B5KU.cjs.map +0 -7
- package/dist/lib/node/chunk-4EEWTDQK.cjs +0 -117
- package/dist/lib/node/chunk-4EEWTDQK.cjs.map +0 -7
- package/dist/lib/node/chunk-FUAGEO7Q.cjs +0 -52
- package/dist/lib/node/chunk-FUAGEO7Q.cjs.map +0 -7
- package/dist/lib/node/chunk-HRNIUYVQ.cjs +0 -128
- package/dist/lib/node/chunk-HRNIUYVQ.cjs.map +0 -7
- package/dist/lib/node/chunk-IKZBMHSW.cjs +0 -184
- package/dist/lib/node/chunk-IKZBMHSW.cjs.map +0 -7
- package/dist/lib/node/chunk-LMDJEGZ2.cjs +0 -233
- package/dist/lib/node/chunk-LMDJEGZ2.cjs.map +0 -7
- package/dist/lib/node/chunk-NIDICM57.cjs +0 -2080
- package/dist/lib/node/chunk-NIDICM57.cjs.map +0 -7
- package/dist/lib/node/chunk-P74TWGMG.cjs.map +0 -7
- package/dist/lib/node/chunk-QGPWY6GW.cjs +0 -34
- package/dist/lib/node/chunk-QGPWY6GW.cjs.map +0 -7
- package/dist/lib/node/index.cjs +0 -289
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-QSWGTKON.cjs +0 -58
- package/dist/lib/node/intent-resolver-QSWGTKON.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node/react-surface-D3NBYRZ6.cjs +0 -172
- package/dist/lib/node/react-surface-D3NBYRZ6.cjs.map +0 -7
- package/dist/lib/node/settings-2JXLKYGE.cjs +0 -36
- package/dist/lib/node/settings-2JXLKYGE.cjs.map +0 -7
- package/dist/lib/node/types/index.cjs +0 -54
- package/dist/lib/node/types/index.cjs.map +0 -7
- package/dist/lib/node-esm/AssistantDialog-6WEMLUPU.mjs +0 -48
- package/dist/lib/node-esm/AssistantDialog-6WEMLUPU.mjs.map +0 -7
- package/dist/lib/node-esm/BlueprintContainer-STOJAVML.mjs +0 -322
- package/dist/lib/node-esm/BlueprintContainer-STOJAVML.mjs.map +0 -7
- package/dist/lib/node-esm/ChatContainer-3MVBTUJN.mjs +0 -41
- package/dist/lib/node-esm/ChatContainer-3MVBTUJN.mjs.map +0 -7
- package/dist/lib/node-esm/TemplateContainer-SOEWY2ZN.mjs.map +0 -7
- package/dist/lib/node-esm/ai-client-XGZBJ6BE.mjs +0 -40
- package/dist/lib/node-esm/ai-client-XGZBJ6BE.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-3SY5MBIK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-34EX6E5Q.mjs +0 -18
- package/dist/lib/node-esm/chunk-34EX6E5Q.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3UEZLJ2V.mjs +0 -16
- package/dist/lib/node-esm/chunk-3UEZLJ2V.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BB2TAT4P.mjs +0 -22
- package/dist/lib/node-esm/chunk-CDAILLCU.mjs +0 -98
- package/dist/lib/node-esm/chunk-CDAILLCU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-J6UXXZGJ.mjs +0 -209
- package/dist/lib/node-esm/chunk-J6UXXZGJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OD574YIU.mjs +0 -2102
- package/dist/lib/node-esm/chunk-OD574YIU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OYN6HLXZ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UCOFKNKN.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-E6MXTYAU.mjs +0 -44
- package/dist/lib/node-esm/intent-resolver-E6MXTYAU.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-7HA5EDWY.mjs.map +0 -7
- package/dist/lib/node-esm/settings-5IAY6BT4.mjs.map +0 -7
- package/dist/types/src/capabilities/ai-client.d.ts +0 -5
- package/dist/types/src/capabilities/ai-client.d.ts.map +0 -1
- package/dist/types/src/capabilities/capabilities.d.ts +0 -6
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts +0 -10
- package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts.map +0 -1
- package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts +0 -8
- package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts.map +0 -1
- package/dist/types/src/components/AmbientDialog/index.d.ts +0 -2
- package/dist/types/src/components/AmbientDialog/index.d.ts.map +0 -1
- package/dist/types/src/components/AssistantDialog.d.ts +0 -7
- package/dist/types/src/components/AssistantDialog.d.ts.map +0 -1
- package/dist/types/src/components/BlueprintContainer.d.ts +0 -9
- package/dist/types/src/components/BlueprintContainer.d.ts.map +0 -1
- package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts +0 -13
- package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts.map +0 -1
- package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts +0 -8
- package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts.map +0 -1
- package/dist/types/src/components/BlueprintEditor/index.d.ts +0 -2
- package/dist/types/src/components/BlueprintEditor/index.d.ts.map +0 -1
- package/dist/types/src/components/Prompt/Prompt.d.ts +0 -23
- package/dist/types/src/components/Prompt/Prompt.d.ts.map +0 -1
- package/dist/types/src/components/Prompt/Prompt.stories.d.ts +0 -13
- package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +0 -1
- package/dist/types/src/components/Prompt/PromptBar.d.ts +0 -16
- package/dist/types/src/components/Prompt/PromptBar.d.ts.map +0 -1
- package/dist/types/src/components/Prompt/PromptBar.stories.d.ts +0 -9
- package/dist/types/src/components/Prompt/PromptBar.stories.d.ts.map +0 -1
- package/dist/types/src/components/Prompt/autocomplete.d.ts +0 -25
- package/dist/types/src/components/Prompt/autocomplete.d.ts.map +0 -1
- package/dist/types/src/components/Prompt/index.d.ts +0 -3
- package/dist/types/src/components/Prompt/index.d.ts.map +0 -1
- package/dist/types/src/components/Prompt/references.d.ts +0 -30
- package/dist/types/src/components/Prompt/references.d.ts.map +0 -1
- package/dist/types/src/components/Thread/Thread.d.ts +0 -28
- package/dist/types/src/components/Thread/Thread.d.ts.map +0 -1
- package/dist/types/src/components/Thread/Thread.stories.d.ts +0 -11
- package/dist/types/src/components/Thread/Thread.stories.d.ts.map +0 -1
- package/dist/types/src/components/Thread/ThreadContainer.d.ts +0 -13
- package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +0 -1
- package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +0 -16
- package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +0 -1
- package/dist/types/src/components/Thread/ThreadMessage.d.ts +0 -16
- package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +0 -1
- package/dist/types/src/components/Thread/ToolInvocations.d.ts +0 -13
- package/dist/types/src/components/Thread/ToolInvocations.d.ts.map +0 -1
- package/dist/types/src/components/Thread/index.d.ts +0 -3
- package/dist/types/src/components/Thread/index.d.ts.map +0 -1
- package/dist/types/src/components/Thread/reducer.d.ts.map +0 -1
- package/dist/types/src/experimental/transcription/index.d.ts +0 -1
- package/dist/types/src/experimental/transcription/index.d.ts.map +0 -1
- package/dist/types/src/hooks/processor.d.ts.map +0 -1
- package/dist/types/src/hooks/processor.test.d.ts +0 -2
- package/dist/types/src/hooks/processor.test.d.ts.map +0 -1
- package/dist/types/src/hooks/useContextProvider.d.ts +0 -17
- package/dist/types/src/hooks/useContextProvider.d.ts.map +0 -1
- package/dist/types/src/hooks/useMessageQueue.d.ts +0 -42
- package/dist/types/src/hooks/useMessageQueue.d.ts.map +0 -1
- package/dist/types/src/hooks/useServices.d.ts +0 -7
- package/dist/types/src/hooks/useServices.d.ts.map +0 -1
- package/dist/types/src/hooks/useTextInputEvents.d.ts +0 -13
- package/dist/types/src/hooks/useTextInputEvents.d.ts.map +0 -1
- package/dist/types/src/stories/Prompt.stories.d.ts +0 -8
- package/dist/types/src/stories/Prompt.stories.d.ts.map +0 -1
- package/dist/types/src/stories/Query.stories.d.ts +0 -19
- package/dist/types/src/stories/Query.stories.d.ts.map +0 -1
- package/dist/types/src/stories/Research.stories.d.ts +0 -15
- package/dist/types/src/stories/Research.stories.d.ts.map +0 -1
- package/dist/types/src/stories/test-data.d.ts +0 -3
- package/dist/types/src/stories/test-data.d.ts.map +0 -1
- package/dist/types/src/stories/testing.d.ts +0 -12
- package/dist/types/src/stories/testing.d.ts.map +0 -1
- package/dist/types/src/testing/test-blueprint.d.ts +0 -8
- package/dist/types/src/testing/test-blueprint.d.ts.map +0 -1
- package/dist/types/src/types/chat.d.ts +0 -23
- package/dist/types/src/types/chat.d.ts.map +0 -1
- package/dist/types/src/types/template.d.ts +0 -56
- package/dist/types/src/types/template.d.ts.map +0 -1
- package/dist/types/src/types/types.d.ts +0 -50
- package/dist/types/src/types/types.d.ts.map +0 -1
- package/src/capabilities/ai-client.ts +0 -42
- package/src/capabilities/capabilities.ts +0 -15
- package/src/components/AmbientDialog/AmbientDialog.stories.tsx +0 -84
- package/src/components/AmbientDialog/AmbientDialog.tsx +0 -117
- package/src/components/AssistantDialog.tsx +0 -37
- package/src/components/BlueprintContainer.tsx +0 -148
- package/src/components/BlueprintEditor/BlueprintEditor.stories.tsx +0 -32
- package/src/components/BlueprintEditor/index.ts +0 -5
- package/src/components/Prompt/Prompt.stories.tsx +0 -121
- package/src/components/Prompt/Prompt.tsx +0 -124
- package/src/components/Prompt/PromptBar.stories.tsx +0 -69
- package/src/components/Prompt/PromptBar.tsx +0 -105
- package/src/components/Prompt/autocomplete.ts +0 -218
- package/src/components/Prompt/index.ts +0 -6
- package/src/components/Prompt/references.ts +0 -180
- package/src/components/Thread/Thread.stories.tsx +0 -201
- package/src/components/Thread/Thread.tsx +0 -118
- package/src/components/Thread/ThreadContainer.stories.tsx +0 -283
- package/src/components/Thread/ThreadContainer.tsx +0 -105
- package/src/components/Thread/ThreadMessage.tsx +0 -234
- package/src/components/Thread/index.ts +0 -6
- package/src/hooks/processor.ts +0 -238
- package/src/hooks/useChatProcessor.tsx +0 -97
- package/src/hooks/useMessageQueue.ts +0 -22
- package/src/hooks/useServices.ts +0 -28
- package/src/hooks/useTextInputEvents.ts +0 -49
- package/src/stories/Prompt.stories.tsx +0 -60
- package/src/stories/Query.stories.tsx +0 -514
- package/src/stories/Research.stories.tsx +0 -482
- package/src/stories/test-data.ts +0 -128
- package/src/stories/testing.ts +0 -60
- package/src/testing/test-blueprint.ts +0 -58
- package/src/types/chat.ts +0 -32
- package/src/types/template.ts +0 -66
- package/src/types/types.ts +0 -48
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/Prompt/Prompt.tsx", "../../../src/components/Prompt/autocomplete.ts", "../../../src/components/Prompt/references.ts", "../../../src/components/Prompt/PromptBar.tsx", "../../../src/components/Toolbox/Toolbox.tsx", "../../../src/tools/function.ts", "../../../src/tools/openapi.ts", "../../../src/components/Thread/Thread.tsx", "../../../src/components/Thread/ThreadMessage.tsx", "../../../src/components/Thread/ToolInvocations.tsx", "../../../src/components/Thread/reducer.ts", "../../../src/components/Thread/ThreadContainer.tsx", "../../../src/hooks/processor.ts", "../../../src/hooks/useChatProcessor.tsx", "../../../src/hooks/useMessageQueue.ts", "../../../src/hooks/useServices.ts", "../../../src/testing/test-blueprint.ts", "../../../src/testing/test-functions.ts", "../../../src/testing/test-services.ts", "../../../src/hooks/useTextInputEvents.ts", "../../../src/hooks/useContextProvider.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension, Prec } from '@codemirror/state';\nimport React, { forwardRef, useImperativeHandle } from 'react';\n\nimport { type ThemedClassName, useThemeContext } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createThemeExtensions,\n keymap,\n useTextEditor,\n type BasicExtensionsOptions,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\nimport { isNonNullable } from '@dxos/util';\n\nimport { autocompleteExtension, type AutocompleteOptions } from './autocomplete';\nimport { promptReferences, type ReferencesProvider } from './references';\n\n// TODO(burdon): Handle object references.\n\nexport interface PromptController {\n focus(): void;\n setText(text: string): void;\n}\n\nexport type PromptProps = ThemedClassName<\n {\n extensions?: Extension;\n references?: ReferencesProvider;\n onOpenChange?: (open: boolean) => void;\n } & AutocompleteOptions &\n Pick<UseTextEditorProps, 'autoFocus'> &\n Pick<BasicExtensionsOptions, 'lineWrapping' | 'placeholder'>\n>;\n\nexport const Prompt = forwardRef<PromptController, PromptProps>(\n (\n {\n classNames,\n extensions,\n references,\n autoFocus,\n lineWrapping = false,\n placeholder,\n onSubmit,\n onSuggest,\n onCancel,\n onOpenChange,\n },\n forwardRef,\n ) => {\n const { themeMode } = useThemeContext();\n const { parentRef, view } = useTextEditor(\n {\n debug: true,\n autoFocus,\n extensions: [\n autocompleteExtension({ onSubmit, onSuggest, onCancel }),\n createBasicExtensions({\n bracketMatching: false,\n lineWrapping,\n placeholder,\n }),\n createThemeExtensions({ themeMode }),\n references ? promptReferences({ provider: references }) : [],\n Prec.highest(\n keymap.of([\n {\n key: 'cmd-ArrowUp',\n preventDefault: true,\n run: () => {\n onOpenChange?.(true);\n return true;\n },\n },\n {\n key: 'cmd-ArrowDown',\n preventDefault: true,\n run: () => {\n onOpenChange?.(false);\n return true;\n },\n },\n ]),\n ),\n extensions,\n ].filter(isNonNullable),\n },\n [themeMode, extensions, onSubmit, onSuggest],\n );\n\n // Expose editor view.\n useImperativeHandle(\n forwardRef,\n () => {\n return {\n focus: () => {\n view?.focus();\n },\n setText: (text: string) => {\n view?.dispatch({\n changes: {\n from: 0,\n to: view.state.doc.length,\n insert: text,\n },\n selection: {\n anchor: text.length,\n head: text.length,\n },\n });\n },\n };\n },\n [view, onSubmit],\n );\n\n return <div ref={parentRef} className={mx('w-full', classNames)} />;\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Prec, type Extension } from '@codemirror/state';\nimport {\n EditorView,\n Decoration,\n ViewPlugin,\n keymap,\n type DecorationSet,\n type ViewUpdate,\n WidgetType,\n} from '@codemirror/view';\n\nexport type AutocompleteOptions = {\n /**\n * Callback triggered when Enter is pressed.\n * @param text The current text in the editor\n * @returns true if the editor should reset the document.\n */\n onSubmit?: (text: string) => boolean | void;\n\n /**\n * Function that returns a list of suggestions based on the current text.\n * @param text The current text before the cursor\n * @returns Array of suggestion strings\n */\n onSuggest?: (text: string) => string[];\n\n /**\n * ESC pressed.\n */\n onCancel?: () => void;\n};\n\n/**\n * Creates an autocomplete extension that shows inline suggestions.\n * Pressing Tab will complete the suggestion.\n */\n// TODO(burdon): Move to react-ui-editor.\nexport const autocompleteExtension = ({ onSubmit, onSuggest, onCancel }: AutocompleteOptions): Extension => {\n const suggest = ViewPlugin.fromClass(\n class {\n _decorations: DecorationSet;\n _currentSuggestion: string | null = null;\n\n constructor(view: EditorView) {\n this._decorations = this.computeDecorations(view);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.selectionSet) {\n this._decorations = this.computeDecorations(update.view);\n }\n }\n\n private computeDecorations(view: EditorView): DecorationSet {\n const text = view.state.doc.toString();\n const suggestions = onSuggest?.(text) ?? [];\n if (!suggestions.length) {\n this._currentSuggestion = null;\n return Decoration.none;\n }\n\n // Get the first suggestion.\n this._currentSuggestion = suggestions[0];\n const suffix = this._currentSuggestion.slice(text.length);\n if (!suffix) {\n return Decoration.none;\n }\n\n // Always show ghost text at the end of the document.\n return Decoration.set([\n Decoration.widget({\n widget: new InlineSuggestionWidget(suffix),\n side: 1,\n }).range(view.state.doc.length),\n ]);\n }\n\n completeSuggestion(view: EditorView): boolean {\n if (!this._currentSuggestion) {\n return false;\n }\n\n const text = view.state.doc.toString();\n const suffix = this._currentSuggestion.slice(text.length);\n if (!suffix) {\n return false;\n }\n\n view.dispatch({\n changes: {\n from: view.state.doc.length,\n insert: suffix,\n },\n selection: {\n anchor: view.state.doc.length + suffix.length,\n },\n });\n\n return true;\n }\n },\n {\n decorations: (v) => v._decorations,\n },\n );\n\n return [\n suggest,\n EditorView.theme({\n '.cm-inline-suggestion': {\n opacity: 0.4,\n },\n }),\n\n Prec.highest(\n keymap.of([\n {\n key: 'Tab',\n preventDefault: true,\n run: (view) => {\n const plugin = view.plugin(suggest);\n return plugin?.completeSuggestion(view) ?? false;\n },\n },\n {\n key: 'ArrowRight',\n preventDefault: true,\n run: (view) => {\n // Only complete if cursor is at the end\n if (view.state.selection.main.head !== view.state.doc.length) {\n return false;\n }\n\n const plugin = view.plugin(suggest);\n return plugin?.completeSuggestion(view) ?? false;\n },\n },\n {\n key: 'Enter',\n preventDefault: true,\n run: (view) => {\n const text = view.state.doc.toString().trim();\n if (text.length > 0 && onSubmit) {\n const reset = onSubmit(text);\n\n // Clear the document after calling onEnter.\n if (reset) {\n view.dispatch({\n changes: {\n from: 0,\n to: view.state.doc.length,\n insert: '',\n },\n });\n }\n }\n\n return true;\n },\n },\n {\n key: 'Shift-Enter',\n preventDefault: true,\n run: (view) => {\n view.dispatch({\n changes: {\n from: view.state.selection.main.head,\n insert: '\\n',\n },\n selection: {\n anchor: view.state.selection.main.head + 1,\n head: view.state.selection.main.head + 1,\n },\n });\n return true;\n },\n },\n {\n key: 'Escape',\n preventDefault: true,\n run: (view) => {\n // Clear the entire document.\n view.dispatch({\n changes: {\n from: 0,\n to: view.state.doc.length,\n insert: '',\n },\n });\n onCancel?.();\n return true;\n },\n },\n ]),\n ),\n ];\n};\n\nclass InlineSuggestionWidget extends WidgetType {\n constructor(private suffix: string) {\n super();\n }\n\n override toDOM(): HTMLSpanElement {\n const span = document.createElement('span');\n span.textContent = this.suffix;\n span.className = 'cm-inline-suggestion';\n return span;\n }\n\n override eq(other: InlineSuggestionWidget): boolean {\n return other.suffix === this.suffix;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { autocompletion, completionKeymap, type CompletionResult } from '@codemirror/autocomplete';\nimport { type Extension, RangeSet } from '@codemirror/state';\nimport {\n Decoration,\n EditorView,\n keymap,\n ViewPlugin,\n WidgetType,\n type DecorationSet,\n type ViewUpdate,\n} from '@codemirror/view';\n\nimport { Mutex } from '@dxos/async';\n\nexport type ReferenceData = {\n uri: string;\n label: string;\n // TODO(dmaretskyi): Consider adding details renderer for when you hover over the reference.\n};\n\nexport interface ReferencesProvider {\n getReferences({ query }: { query: string }): Promise<ReferenceData[]>;\n\n resolveReference({ uri }: { uri: string }): Promise<ReferenceData | null>;\n}\n\nexport type PromptReferencesOptions = {\n provider: ReferencesProvider;\n /**\n * Will prevent the autocomplete from closing when the user blurs the editor.\n * @default false\n */\n debug?: boolean;\n /**\n * @default '@'\n */\n triggerCharacter?: string;\n};\n\n/**\n * Include references into text.\n */\nexport const promptReferences = ({\n provider,\n debug = false,\n triggerCharacter = '@',\n}: PromptReferencesOptions): Extension => {\n if (triggerCharacter.length !== 1) {\n throw new Error('triggerCharacter must be a single character');\n }\n\n const decorationField = ViewPlugin.fromClass(\n class ReferenceView {\n private _mutex = new Mutex();\n\n decorations: DecorationSet = Decoration.set([]);\n\n constructor(view: EditorView) {\n queueMicrotask(async () => {\n const guard = await this._mutex.acquire();\n try {\n this.decorations = await this._computeDecorations(view);\n } finally {\n guard.release();\n }\n });\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged) {\n queueMicrotask(async () => {\n const guard = await this._mutex.acquire();\n try {\n this.decorations = await this._computeDecorations(update.view);\n } finally {\n guard.release();\n }\n });\n }\n }\n\n private async _computeDecorations(view: EditorView): Promise<DecorationSet> {\n const text = view.state.doc.toString();\n const references = text.matchAll(new RegExp(`${triggerCharacter}[a-zA-Z0-9@:]+\\\\s`, 'g'));\n\n const decorations = [];\n for (const match of references) {\n const reference = match[0];\n const uri = reference.slice(1, -1);\n const data = await provider.resolveReference({ uri });\n if (data) {\n decorations.push(\n Decoration.replace({\n widget: new ReferenceWidget(data),\n }).range(match.index!, match.index! + reference.length),\n );\n }\n }\n\n return Decoration.set(decorations);\n }\n },\n {\n decorations: (v) => v.decorations,\n provide: (plugin) => [\n EditorView.atomicRanges.of(\n (view): DecorationSet => view.plugin(decorationField)?.decorations ?? RangeSet.empty,\n ),\n ],\n },\n );\n\n return [\n decorationField,\n\n EditorView.theme({\n '.cm-reference-pill': {\n borderRadius: '0.25rem',\n borderWidth: '1px',\n marginRight: '0.25rem',\n marginLeft: '0.25rem',\n },\n }),\n\n autocompletion({\n activateOnTyping: true,\n override: [\n async (context): Promise<CompletionResult | null> => {\n const match = context.matchBefore(new RegExp(`${triggerCharacter}[a-zA-Z0-9]+`));\n\n if (!match || match?.to === match?.from) {\n return null;\n }\n\n const query = match.text.slice(1);\n const references = await provider.getReferences({ query });\n\n return {\n from: match.from,\n filter: false,\n options: references.map((reference) => ({\n label: reference.label,\n apply: `${triggerCharacter}${reference.uri} `,\n })),\n };\n },\n ],\n closeOnBlur: !debug,\n tooltipClass: () => 'shadow rounded',\n aboveCursor: true,\n }),\n\n keymap.of(completionKeymap),\n ];\n};\n\nclass ReferenceWidget extends WidgetType {\n constructor(private data: ReferenceData) {\n super();\n }\n\n override toDOM(): HTMLSpanElement {\n const span = document.createElement('span');\n span.textContent = `@ ${this.data.label}`;\n span.className = 'cm-reference-pill';\n return span;\n }\n\n override eq(other: ReferenceWidget): boolean {\n return other.data.uri === this.data.uri;\n }\n\n override ignoreEvent(): boolean {\n return true;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useState } from 'react';\n\nimport { useVoiceInput } from '@dxos/plugin-transcription';\nimport { Icon, IconButton, type ThemedClassName, Tooltip, useForwardedRef, useTranslation } from '@dxos/react-ui';\nimport { Spinner } from '@dxos/react-ui-sfx';\nimport { errorText, mx } from '@dxos/react-ui-theme';\n\nimport { Prompt, type PromptController, type PromptProps } from './Prompt';\nimport { ASSISTANT_PLUGIN } from '../../meta';\n\nexport type PromptBarProps = ThemedClassName<\n Pick<\n PromptProps,\n | 'extensions'\n | 'references'\n | 'placeholder'\n | 'lineWrapping'\n | 'onSubmit'\n | 'onSuggest'\n | 'onCancel'\n | 'onOpenChange'\n > & {\n processing?: boolean;\n error?: Error;\n microphone?: boolean;\n }\n>;\n\nexport const PromptBar = forwardRef<PromptController, PromptBarProps>(\n ({ classNames, placeholder, processing, error, microphone, references, onCancel, ...props }, forwardedRef) => {\n const { t } = useTranslation(ASSISTANT_PLUGIN);\n const promptRef = useForwardedRef<PromptController>(forwardedRef);\n const [active, setActive] = useState(false);\n\n // TODO(burdon): Configure capability in TranscriptionPlugin.\n const { recording } = useVoiceInput({\n active,\n onUpdate: (text) => {\n promptRef.current?.setText(text);\n promptRef.current?.focus();\n },\n });\n\n return (\n <div\n className={mx(\n 'shrink-0 w-full grid grid-cols-[var(--rail-action)_1fr_var(--rail-action)] overflow-hidden',\n classNames,\n )}\n >\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n {(error && (\n <Tooltip.Trigger content={error.message} delayDuration={0}>\n <Icon icon='ph--warning-circle--regular' classNames={errorText} size={5} />\n </Tooltip.Trigger>\n )) || <Spinner active={processing} />}\n </div>\n <Prompt\n ref={promptRef}\n autoFocus\n classNames='pbs-2'\n lineWrapping={true}\n placeholder={placeholder ?? t('prompt placeholder')}\n references={references}\n onCancel={onCancel}\n {...props}\n />\n {(onCancel || microphone) && (\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n {processing && onCancel && (\n <IconButton\n classNames='px-1.5'\n variant='ghost'\n size={5}\n icon='ph--x--regular'\n iconOnly\n label={t('cancel processing button')}\n onClick={onCancel}\n />\n )}\n {!processing && microphone && (\n <IconButton\n classNames={mx('px-1.5', recording && 'bg-primary-500')}\n variant='ghost'\n size={5}\n icon='ph--microphone--regular'\n iconOnly\n noTooltip\n label={t('microphone button')}\n onMouseDown={() => setActive(true)}\n onMouseUp={() => setActive(false)}\n onTouchStart={() => setActive(true)}\n onTouchEnd={() => setActive(false)}\n />\n )}\n </div>\n )}\n </div>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useState, useEffect, Fragment, type FC } from 'react';\n\nimport { parseToolName, type Tool } from '@dxos/ai';\nimport { Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { type ArtifactDefinition } from '@dxos/artifact';\nimport { FunctionType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { createToolsFromService } from '../../tools';\nimport { ServiceType } from '../../types';\n\nexport type ToolboxProps = ThemedClassName<{\n artifacts?: ArtifactDefinition[];\n services?: { service: ServiceType; tools: Tool[] }[];\n functions?: FunctionType[];\n striped?: boolean;\n}>;\n\nexport const Toolbox = ({ classNames, artifacts, functions, services, striped }: ToolboxProps) => {\n return (\n <div className={mx('flex flex-col overflow-y-auto box-content', classNames)}>\n {artifacts && artifacts.length > 0 && (\n <Section\n title='Artifacts'\n items={artifacts.map(({ name, description, tools }) => ({\n name,\n description,\n subitems: tools.map(({ name, description }) => ({ name: `∙ ${parseToolName(name)}`, description })),\n }))}\n />\n )}\n\n {services && services.length > 0 && (\n <Section\n title='Services'\n items={services.map(({ service: { serviceId, name, description }, tools }) => ({\n name: name ?? serviceId,\n description,\n subitems: tools.map(({ name, description }) => ({ name: `∙ ${name}`, description })),\n }))}\n />\n )}\n\n {functions && functions.length > 0 && (\n <Section title='Functions' items={functions.map(({ name, description }) => ({ name, description }))} />\n )}\n </div>\n );\n};\n\nconst Section: FC<{\n title: string;\n items: { name: string; description?: string; subitems?: { name: string; description?: string }[] }[];\n striped?: boolean;\n}> = ({ title, items, striped }) => {\n const stripeClassNames = 'odd:bg-neutral-50 dark:odd:bg-neutral-800';\n const gridClassNames = 'grid grid-cols-[8rem_1fr]';\n const subGridClassNames = mx('col-span-full grid grid-cols-subgrid text-xs px-2', striped && stripeClassNames);\n\n return (\n <div>\n <h1 className='px-2 text-sm'>{title}</h1>\n <div className={gridClassNames}>\n {items.map(({ name, description, subitems }, i) => (\n <Fragment key={i}>\n {name && (\n <div className={subGridClassNames}>\n <div className='truncate text-primary-500'>{name}</div>\n <div className='line-clamp-2'>{description}</div>\n </div>\n )}\n {subitems?.map(({ name, description }, i) => (\n <div key={i} className={mx(subGridClassNames, striped && stripeClassNames)}>\n <div className='truncate'>{name}</div>\n <div className='line-clamp-3 text-subdued'>{description}</div>\n </div>\n ))}\n </Fragment>\n ))}\n </div>\n </div>\n );\n};\n\nexport const ToolboxContainer = ({ classNames, space }: ThemedClassName<{ space?: Space }>) => {\n // Plugin artifacts.\n const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);\n\n // Registered services.\n const services = useQuery(space, Filter.type(ServiceType));\n const [serviceTools, setServiceTools] = useState<{ service: ServiceType; tools: Tool[] }[]>([]);\n useEffect(() => {\n log('creating service tools...', { services: services.length });\n queueMicrotask(async () => {\n const tools = await Promise.all(\n services.map(async (service) => ({ service, tools: await createToolsFromService(service) })),\n );\n\n setServiceTools(tools);\n });\n }, [services]);\n\n // Deployed functions.\n const functions = useQuery(space, Filter.type(FunctionType));\n\n return (\n <Toolbox classNames={classNames} artifacts={artifactDefinitions} services={serviceTools} functions={functions} />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createTool, type ExecutableTool, ToolResult } from '@dxos/ai';\nimport { Type } from '@dxos/echo';\nimport { getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions';\nimport { type FunctionType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { type SpaceId } from '@dxos/react-client/echo';\nimport { getMeta } from '@dxos/react-client/echo';\n\n// TODO(burdon): Move to @dxos/ai.\nexport const convertFunctionToTool = (\n fn: FunctionType,\n edgeUrl: string,\n spaceId?: SpaceId | undefined,\n): ExecutableTool | undefined => {\n if (!fn.description || !fn.inputSchema) {\n return undefined;\n }\n const existingFunctionUrl = getUserFunctionUrlInMetadata(getMeta(fn));\n if (!existingFunctionUrl) {\n return undefined;\n }\n\n const url = getInvocationUrl(existingFunctionUrl, edgeUrl, { spaceId });\n\n return createTool('user-function', {\n name: fn.name,\n description: fn.description,\n schema: Type.toEffectSchema(fn.inputSchema),\n execute: async (input) => {\n log.info('execute function tool', { name: fn.name, url, input });\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(input),\n });\n\n return ToolResult.Success(await response.text());\n },\n });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\nimport jsonpointer from 'jsonpointer';\nimport { type OpenAPIV2, type OpenAPIV3_1 } from 'openapi-types';\n\nimport { type ExecutableTool, ToolResult, createRawTool } from '@dxos/ai';\nimport { Type } from '@dxos/echo';\nimport { normalizeSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { deepMapValues } from '@dxos/util';\n\nimport type { ApiAuthorization, ServiceType } from '../types';\n\nexport type CreateToolsFromApiOptions = {\n authorization?: ApiAuthorization;\n instructions?: string;\n};\n\nexport const createToolsFromService = async (service: ServiceType): Promise<ExecutableTool[]> => {\n invariant(service.interfaces?.length === 1 && service.interfaces[0].kind === 'api');\n const iface = service.interfaces[0];\n invariant(iface.schemaUrl);\n invariant(iface.schemaUrl);\n return createToolsFromApi(iface.schemaUrl, { authorization: iface.authorization });\n};\n\nexport const createToolsFromApi = async (\n url: string,\n options?: CreateToolsFromApiOptions,\n): Promise<ExecutableTool[]> => {\n const res = await fetch(url);\n const spec = (await res.json()) as OpenAPIV2.Document;\n log('spec', { spec });\n\n const tools: ExecutableTool[] = [];\n for (const [path, pathItem] of Object.entries(spec.paths)) {\n if (typeof pathItem !== 'object') {\n continue;\n }\n\n const { ...methods } = pathItem;\n for (const [method, m] of Object.entries(methods)) {\n const methodItem: OpenAPIV2.OperationObject = m as OpenAPIV2.OperationObject;\n log('methodItem', { path, method, methodItem });\n\n const parametersResolved: OpenAPIV2.ParameterObject[] =\n methodItem.parameters?.map((parameter: any) => {\n const resolved = resolveJsonSchema(parameter, spec);\n return resolved;\n }) ?? [];\n\n const inputSchema: Type.JsonSchema = {\n type: 'object',\n properties: {},\n };\n\n const endpointParameters: OpenAPIV2.ParameterObject[] = [];\n for (const parameter of parametersResolved) {\n log('parameter', { parameter });\n\n if (\n options?.authorization?.type === 'api-key' &&\n options.authorization.placement.type === 'query' &&\n parameter.in === 'query' &&\n parameter.name === options.authorization.placement.name\n ) {\n continue;\n }\n\n endpointParameters.push(parameter);\n\n if (parameter.schema) {\n inputSchema.properties![parameter.name] = normalizeSchema(parameter.schema);\n } else if (typeof parameter.type === 'string') {\n const { name, in: _in, required, ...schema } = parameter;\n inputSchema.properties![name] = normalizeSchema(schema);\n if (required) {\n inputSchema.required ??= [];\n inputSchema.required!.push(name);\n }\n }\n }\n\n log('inputSchema', { inputSchema });\n Schema.validateSync(Type.JsonSchema)(inputSchema);\n\n const description = methodItem.description ?? methodItem.summary;\n if (!description) {\n log.warn('no description', { path, method });\n continue;\n }\n\n const endpoint: EndpointDescriptor = {\n document: spec,\n path,\n method,\n parameters: endpointParameters,\n authorization: options?.authorization,\n };\n\n tools.push(\n // TODO(burdon): Namespace?\n createRawTool('openapi', {\n name: getToolName(path, method, methodItem),\n description: options?.instructions ? `${options.instructions}\\n\\n${description}` : description,\n parameters: inputSchema,\n execute: async (input) => {\n const response = await callApiEndpoint(endpoint, input);\n return ToolResult.Success(response);\n },\n }),\n );\n }\n }\n\n return tools;\n};\n\nconst getToolName = (path: string, method: string, methodItem: OpenAPIV2.OperationObject) => {\n if (methodItem.operationId) {\n return methodItem.operationId;\n }\n\n // Generate a name from the path and method.\n let name = `${method.toLowerCase()}_${path.replaceAll(/[{}/]/g, '_')}`;\n while (name.length > MAX_TOOL_NAME_LENGTH) {\n const lengthBefore = name.length;\n\n for (const word of GENERIC_WORDS) {\n if (name.includes(word)) {\n name = name.replace(word, '');\n break;\n }\n }\n name = name.replaceAll('__', '_').replace(/_$/, '');\n\n const lengthAfter = name.length;\n if (lengthBefore === lengthAfter) {\n break;\n }\n }\n name = name.replaceAll('__', '_').replace(/_$/, '').replace(/^_/, '');\n\n return name.slice(0, MAX_TOOL_NAME_LENGTH);\n};\n\nconst MAX_TOOL_NAME_LENGTH = 64;\nconst GENERIC_WORDS = [\n 'services',\n 'service',\n 'api',\n 'rest',\n 'endpoint',\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'head',\n 'options',\n 'trace',\n 'service',\n 'api',\n 'endpoint',\n];\n\ntype EndpointDescriptor = {\n document: OpenAPIV3_1.Document | OpenAPIV2.Document;\n path: string;\n method: string;\n parameters: OpenAPIV2.ParameterObject[];\n authorization?: ApiAuthorization;\n};\n\nconst callApiEndpoint = async (endpoint: EndpointDescriptor, input: any) => {\n log.info('endpoint', { method: endpoint.method, name: endpoint.path, input });\n\n let url = getEndpointUrl(endpoint);\n const request: RequestInit = {\n method: endpoint.method,\n headers: {},\n };\n const query = new URLSearchParams();\n let body: any;\n for (const parameter of endpoint.parameters) {\n if (input[parameter.name] === undefined) {\n continue;\n }\n\n switch (parameter.in) {\n case 'header': {\n if (parameter.example) {\n (request.headers as any)[parameter.name] = parameter.default;\n }\n break;\n }\n case 'path': {\n url = url.replace(`{${parameter.name}}`, encodeURIComponent(input[parameter.name]));\n break;\n }\n case 'body': {\n const value = input[parameter.name];\n\n // Client-side validation\n const effectSchema = Type.toEffectSchema(parameter.schema);\n Schema.validateSync(effectSchema)(value);\n\n if (body) {\n throw new Error(`Duplicate body parameter: ${parameter.name}`);\n }\n body = value;\n break;\n }\n case 'query': {\n query.set(parameter.name, input[parameter.name]);\n break;\n }\n }\n }\n\n if (\n (endpoint.authorization?.type === 'api-key' && endpoint.authorization.placement.type === 'authorization-header') ||\n endpoint.authorization?.type === 'oauth'\n ) {\n (request.headers as any).Authorization = await resolveAuthorization(endpoint.authorization);\n } else if (endpoint.authorization?.type === 'api-key' && endpoint.authorization.placement.type === 'query') {\n query.set(endpoint.authorization.placement.name, endpoint.authorization.key);\n }\n\n if (query.size > 0) {\n url += `?${query.toString()}`;\n }\n\n if (body) {\n request.body = JSON.stringify(body);\n (request.headers as any)['Content-Type'] = 'application/json';\n }\n\n log.info('request', { url, request });\n const response = await fetch(url, request);\n\n log.info('response', { ok: response.ok, status: response.status, statusText: response.statusText });\n\n if (response.ok) {\n const contentType = response.headers.get('Content-Type');\n if (contentType?.includes('application/json')) {\n return await response.json();\n } else {\n return await response.text();\n }\n } else {\n if (response.headers.get('Content-Type')?.includes('application/json')) {\n const responseBody = await response.text();\n let error: any;\n try {\n error = JSON.parse(responseBody);\n } catch {\n error = responseBody;\n }\n log.error('error', { error });\n throw new Error(error.message);\n } else {\n const error = await response.text();\n log.error('error', { error });\n throw new Error(error);\n }\n }\n};\n\nconst getEndpointUrl = (endpoint: EndpointDescriptor) => {\n let url = '';\n if (isV3_1(endpoint.document) && endpoint.document.servers && endpoint.document.servers.length > 0) {\n url = endpoint.document.servers[0].url;\n } else {\n invariant(!isV3_1(endpoint.document));\n url = `${endpoint.document.schemes?.[0] ?? 'https'}://${endpoint.document.host}`;\n }\n\n if (!isV3_1(endpoint.document) && endpoint.document.basePath) {\n url += endpoint.document.basePath;\n }\n\n url += endpoint.path;\n\n return url;\n};\n\nexport const resolveAuthorization = async (authorization: ApiAuthorization): Promise<string> => {\n switch (authorization.type) {\n case 'api-key': {\n invariant(authorization.placement.type === 'authorization-header');\n return `Bearer ${authorization.key}`;\n }\n case 'oauth': {\n const response = await fetch(authorization.tokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: `grant_type=${authorization.grantType}&client_id=${authorization.clientId}&client_secret=${authorization.clientSecret}`,\n });\n const data = await response.json();\n return `Bearer ${data.access_token}`;\n }\n default: {\n throw new Error(`Unknown authorization type: ${(authorization as any).type}`);\n }\n }\n};\n\n/**\n * Resolves all $ref properties in a JSON schema.\n * Doesn't assume the structure of the schema.\n * The function looks from $ref properties in the schema and resolves them to their values in the base object.\n */\nconst resolveJsonSchema = (schema: any, base: any) => {\n return deepMapValues(schema, (value, recurse) => {\n if (typeof value === 'object' && value !== null && '$ref' in value && typeof value.$ref === 'string') {\n if (value.$ref.startsWith('#')) {\n const resolved = jsonpointer.get(base, value.$ref.slice(1));\n if (resolved) {\n return recurse(resolved);\n } else {\n log.warn('unresolved', { ref: value.$ref, base });\n }\n }\n }\n return recurse(value);\n });\n};\n\nconst isV3_1 = (document: OpenAPIV3_1.Document | OpenAPIV2.Document): document is OpenAPIV3_1.Document => {\n return (document as any).openapi === '3.0.1';\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type CSSProperties, useCallback, useMemo, useRef } from 'react';\n\nimport { type Message } from '@dxos/ai';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { ScrollContainer, type ScrollController } from '@dxos/react-ui-components';\nimport { mx } from '@dxos/react-ui-theme';\nimport { keyToFallback } from '@dxos/util';\n\nimport { ThreadMessage, type ThreadMessageProps } from './ThreadMessage';\nimport { messageReducer } from './reducer';\nimport { PromptBar, type PromptBarProps } from '../Prompt';\nimport type { ReferenceData, ReferencesProvider } from '../Prompt/references';\n\nexport interface ContextProvider {\n query({ query }: { query: string }): Promise<ReferenceData[]>;\n\n resolveMetadata({ uri }: { uri: string }): Promise<ReferenceData | null>;\n}\n\nexport type ThreadProps = ThemedClassName<{\n space?: Space;\n messages?: Message[];\n collapse?: boolean;\n transcription?: boolean;\n onOpenChange?: (open: boolean) => void;\n contextProvider?: ContextProvider;\n}> &\n Pick<PromptBarProps, 'processing' | 'error' | 'onSubmit' | 'onSuggest' | 'onCancel'> &\n Pick<ThreadMessageProps, 'debug' | 'tools' | 'onPrompt' | 'onDelete' | 'onAddToGraph'>;\n\n/**\n * Chat thread component.\n */\nexport const Thread = ({\n classNames,\n space,\n messages,\n collapse = true,\n transcription,\n processing,\n error,\n onSubmit,\n onCancel,\n onOpenChange,\n contextProvider,\n ...props\n}: ThreadProps) => {\n const scroller = useRef<ScrollController>(null);\n\n const identity = useIdentity();\n const fallbackValue = keyToFallback(identity!.identityKey);\n const userHue = identity!.profile?.data?.hue || fallbackValue.hue;\n\n const handleSubmit = useCallback<NonNullable<PromptBarProps['onSubmit']>>(\n (value: string) => {\n onSubmit?.(value);\n scroller.current?.scrollToBottom();\n return true;\n },\n [onSubmit],\n );\n\n // TODO(dmaretskyi): This needs to be a separate type: `id` is not a valid ObjectId, this needs to accommodate messageId for deletion.\n const { messages: filteredMessages = [] } = useMemo(() => {\n if (collapse) {\n return (messages ?? []).reduce<{ messages: Message[]; current?: Message }>(messageReducer, {\n messages: [],\n });\n } else {\n return { messages: messages ?? [] };\n }\n }, [messages, collapse]);\n\n const references = useMemo<ReferencesProvider | undefined>(() => {\n if (!contextProvider) {\n return undefined;\n }\n\n return {\n getReferences: async ({ query }: { query: string }) => contextProvider.query({ query }),\n resolveReference: async ({ uri }: { uri: string }) => contextProvider.resolveMetadata({ uri }),\n };\n }, [contextProvider]);\n\n return (\n <div role='none' className={mx('flex flex-col grow overflow-hidden', classNames)}>\n <ScrollContainer ref={scroller} fade>\n <div\n role='none'\n className={mx(filteredMessages.length > 0 && 'pbs-6 pbe-6')}\n style={{ '--user-fill': `var(--dx-${userHue}Fill)` } as CSSProperties}\n >\n {filteredMessages.map((message) => (\n <ThreadMessage key={message.id} classNames='px-4 pbe-4' space={space} message={message} {...props} />\n ))}\n </div>\n </ScrollContainer>\n\n {onSubmit && (\n <PromptBar\n microphone={transcription}\n processing={processing}\n error={error}\n onSubmit={handleSubmit}\n onCancel={onCancel}\n onOpenChange={onOpenChange}\n references={references}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, type PropsWithChildren } from 'react';\n\nimport { type MessageContentBlock, type Message, type Tool } from '@dxos/ai';\nimport { Surface } from '@dxos/app-framework';\nimport { type Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Button, Icon, IconButton, type ThemedClassName } from '@dxos/react-ui';\nimport {\n MarkdownViewer,\n ToggleContainer as NativeToggleContainer,\n type ToggleContainerProps,\n} from '@dxos/react-ui-components';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\nimport { safeParseJson } from '@dxos/util';\n\nimport { ToolBlock, isToolMessage } from './ToolInvocations';\nimport { ToolboxContainer } from '../Toolbox';\n\nconst panelClassNames = 'flex flex-col w-full px-2 bg-activeSurface rounded-md';\nconst userClassNames = 'bg-[--user-fill] text-accentSurfaceText';\n\nconst ToggleContainer = (props: ToggleContainerProps) => {\n return <NativeToggleContainer {...props} classNames={mx(panelClassNames, props.classNames)} />;\n};\n\nconst MessageContainer = ({ children, classNames, user }: ThemedClassName<PropsWithChildren<{ user?: boolean }>>) => {\n if (!children) {\n return null;\n }\n\n return (\n <div role='list-item' className={mx('flex w-full', user && 'justify-end', classNames)}>\n <div className={mx(user ? ['px-2 py-1 rounded-md', userClassNames] : 'w-full')}>{children}</div>\n </div>\n );\n};\n\nexport type ThreadMessageProps = ThemedClassName<{\n space?: Space;\n message: Message;\n debug?: boolean;\n tools?: Tool[];\n onPrompt?: (text: string) => void;\n onDelete?: (id: string) => void;\n onAddToGraph?: (object: Obj.Any) => void;\n}>;\n\nexport const ThreadMessage: FC<ThreadMessageProps> = ({\n classNames,\n space,\n message,\n tools,\n onPrompt,\n onAddToGraph,\n}) => {\n const { role, content = [] } = message;\n\n // TODO(burdon): Restructure types to make check unnecessary.\n if (isToolMessage(message)) {\n return (\n <MessageContainer classNames={mx(classNames, 'animate-[fadeIn_0.5s]')}>\n <ToolBlock space={space} classNames={panelClassNames} message={message} tools={tools} />\n </MessageContainer>\n );\n }\n\n return content.map((block, idx) => {\n // TODO(burdon): Filter empty messages.\n if (block.type === 'text' && block.text.replaceAll(/\\s+/g, '').length === 0) {\n return null;\n }\n\n const Component = components[block.type] ?? components.default;\n\n return (\n <MessageContainer\n key={idx}\n classNames={mx(classNames, 'animate-[fadeIn_0.5s]')}\n user={block.type === 'text' && role === 'user'}\n >\n <Component space={space} block={block} onPrompt={onPrompt} onAddToGraph={onAddToGraph} />\n </MessageContainer>\n );\n });\n};\n\ntype BlockComponent = FC<{\n space?: Space;\n block: MessageContentBlock;\n onPrompt?: (text: string) => void;\n onAddToGraph?: (object: Obj.Any) => void;\n}>;\n\nconst components: Record<string, BlockComponent> = {\n //\n // Text\n //\n ['text' as const]: ({ block }) => {\n invariant(block.type === 'text');\n // const [open, setOpen] = useState(block.disposition === 'cot' && block.pending);\n const title = block.disposition ? titles[block.disposition] : undefined;\n if (!title) {\n return <MarkdownViewer classNames='[&>p]:animate-[fadeIn_0.5s]' content={block.text} />;\n }\n\n // TOOD(burdon): Store last time user opened/closed COT.\n // Autoclose when streaming ends.\n // useEffect(() => {\n // if (block.disposition === 'cot' && !block.pending) {\n // setOpen(false);\n // }\n // }, [block.disposition, block.pending]);\n\n return (\n <ToggleContainer\n // open={open}\n defaultOpen={systemDispositions.includes(block.disposition ?? '') && block.pending}\n title={title}\n icon={\n block.pending ? (\n <Icon icon={'ph--circle-notch--regular'} classNames='text-subdued ml-2 animate-spin' size={4} />\n ) : undefined\n }\n >\n <MarkdownViewer\n content={block.text}\n classNames={['pbe-2', systemDispositions.includes(block.disposition ?? '') && 'text-sm text-subdued']}\n />\n </ToggleContainer>\n );\n },\n\n //\n // JSON\n //\n ['json' as const]: ({ space, block, onPrompt, onAddToGraph }) => {\n invariant(block.type === 'json');\n\n switch (block.disposition) {\n case 'tool_list': {\n return (\n <ToggleContainer title={titles[block.disposition]} defaultOpen={true}>\n <ToolboxContainer space={space} classNames='pbe-2' />\n </ToggleContainer>\n );\n }\n\n case 'suggest': {\n const { text = '' }: { text: string } = safeParseJson(block.json ?? '{}') ?? ({} as any);\n return <IconButton icon='ph--lightning--regular' label={text} onClick={() => onPrompt?.(text)} />;\n }\n\n case 'select': {\n const { options = [] }: { options: string[] } = safeParseJson(block.json ?? '{}') ?? ({} as any);\n return (\n <div className='flex flex-wrap gap-1'>\n {options.map((option, idx) => (\n <Button\n classNames={'animate-[fadeIn_0.5s] rounded-2xl text-sm'}\n key={option}\n onClick={() => onPrompt?.(option)}\n >\n {option}\n </Button>\n ))}\n </div>\n );\n }\n\n case 'graph': {\n return (\n <div className='flex flex-wrap gap-1'>\n <Surface\n role='card'\n data={{ subject: JSON.parse(block.json ?? '{}') }}\n limit={1}\n fallback={<div className='font-mono text-xs text-pre'>{block.json}</div>}\n />\n {onAddToGraph && (\n <IconButton\n icon='ph--plus--regular'\n label='Add to graph'\n onClick={() => onAddToGraph?.(JSON.parse(block.json ?? '{}'))}\n />\n )}\n </div>\n );\n }\n\n default: {\n const title = block.disposition ? titles[block.disposition] : undefined;\n return (\n <ToggleContainer title={title ?? 'JSON'}>\n <Json data={safeParseJson(block.json ?? block)} classNames='!p-1 text-xs' />\n </ToggleContainer>\n );\n }\n }\n },\n\n //\n // Default\n //\n default: ({ block }) => {\n let title = titles[block.type];\n if (block.type === 'tool_use') {\n title = `Tool [${block.name}]`; // TODO(burdon): Get label from tool.\n }\n\n return (\n <ToggleContainer title={title ?? 'JSON'}>\n <Json data={block} classNames='!p-1 text-xs' />\n </ToggleContainer>\n );\n },\n};\n\n// TODO(burdon): Translations.\nconst titles: Record<string, string> = {\n ['cot' as const]: 'Chain of thought',\n ['artifact' as const]: 'Artifact',\n ['tool_use' as const]: 'Tool request',\n ['tool_result' as const]: 'Tool result',\n ['tool_list' as const]: 'Tools',\n ['artifact-update' as const]: 'Artifact(s) changed',\n};\n\nconst systemDispositions: string[] = ['cot', 'artifact-update'];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { type AgentStatus, type Message, type Tool } from '@dxos/ai';\nimport { log } from '@dxos/log';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { NumericTabs, StatusRoll, ToggleContainer } from '@dxos/react-ui-components';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\nimport { isNonNullable, isNotFalsy } from '@dxos/util';\n\nimport { type ThreadMessageProps } from './ThreadMessage';\n\nexport const isToolMessage = (message: Message) => {\n return message.content.some((block) => block.type === 'tool_use' || block.type === 'tool_result');\n};\n\nconst getToolName = (tool: Tool) => {\n return tool.namespace && tool.function ? `${tool.namespace}:${tool.function}` : tool.name.split('_').pop();\n};\n\nconst getToolCaption = (tool: Tool | undefined, status: AgentStatus | undefined) => {\n if (!tool) {\n return 'Calling tool...';\n }\n\n return status?.message ?? tool.caption ?? `Calling ${getToolName(tool)}...`;\n};\n\nexport const ToolBlock: FC<ThemedClassName<ThreadMessageProps>> = ({ classNames, message, tools }) => {\n const { content = [] } = message;\n\n let request: { tool: Tool | undefined; block: any } | undefined;\n const blocks = content.filter((block) => block.type === 'tool_use' || block.type === 'tool_result');\n const items = blocks\n .map((block) => {\n switch (block.type) {\n case 'tool_use': {\n // TODO(burdon): Skip these updates?\n if (block.pending && request?.block.id === block.id) {\n return null;\n }\n\n log.info('tool_use', { tool: request?.tool, status: block.currentStatus });\n\n request = { tool: tools?.find((tool) => tool.name === block.name), block };\n return { title: getToolCaption(request.tool, block.currentStatus), block };\n }\n\n case 'tool_result': {\n if (!request) {\n log.warn('unexpected message', { block });\n return { title: 'Error', block };\n }\n\n return { title: `${getToolCaption(request.tool, undefined)} (Success)`, block };\n }\n\n default: {\n request = undefined;\n return { title: 'Error', block };\n }\n }\n })\n .filter(isNonNullable);\n\n return <ToolContainer classNames={classNames} items={items} />;\n};\n\nexport const ToolContainer: FC<ThemedClassName<{ items: { title: string; block: any }[] }>> = ({\n classNames,\n items,\n}) => {\n const tabsRef = useRef<HTMLDivElement>(null);\n const [selected, setSelected] = useState(0);\n const [open, setOpen] = useState(false);\n useEffect(() => {\n if (open) {\n tabsRef.current?.focus();\n }\n }, [open]);\n\n const handleSelect = (index: number) => {\n if (index === selected) {\n setOpen(false);\n } else {\n setSelected(index);\n }\n };\n\n const title = useMemo(() => {\n const lines = items.map((item) => item.title).filter(isNotFalsy);\n return <StatusRoll key='status-roll' lines={lines} duration={1_000} autoAdvance />;\n }, [items]);\n\n return (\n <ToggleContainer classNames={['flex flex-col', classNames]} title={title} open={open} onChangeOpen={setOpen}>\n <div className='grid grid-cols-[32px_1fr]'>\n <NumericTabs ref={tabsRef} length={items.length} selected={selected} onSelect={handleSelect} />\n <Json data={items[selected].block} classNames='!p-1 text-xs' />\n </div>\n </ToggleContainer>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Message } from '@dxos/ai';\n\n// TODO(burdon): Move to util?\ntype Reducer<R, I> = (acc: R, value: I) => R;\n\n/**\n * Reducer that collapses related message blocks into single messages.\n * For example, combines tool request/response pairs into a single message.\n */\nexport const messageReducer: Reducer<{ messages: Message[]; current?: Message }, Message> = (\n { current, messages },\n message,\n) => {\n let i = 0;\n for (const block of message.content) {\n switch (block.type) {\n case 'tool_use':\n case 'tool_result': {\n if (current) {\n current.content.push(block);\n } else {\n current = {\n id: [message.id, i].join('_'),\n role: message.role,\n content: [block],\n } as any;\n messages.push(current as any);\n }\n break;\n }\n\n case 'text':\n default: {\n current = undefined;\n messages.push({\n id: [message.id, i].join('_'),\n role: message.role,\n content: [block],\n } as any);\n break;\n }\n }\n\n i++;\n }\n\n return { current, messages };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, type FC, useEffect } from 'react';\n\nimport { CollaborationActions, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type AssociatedArtifact } from '@dxos/artifact';\nimport { DXN, Ref } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\n\nimport { Thread, type ThreadProps } from './Thread';\nimport { useChatProcessor, useContextProvider, useMessageQueue } from '../../hooks';\nimport { type AIChatType, type AssistantSettingsProps } from '../../types';\n\nexport type ThreadContainerProps = {\n chat?: AIChatType;\n settings?: AssistantSettingsProps;\n part?: 'deck' | 'dialog';\n associatedArtifact?: AssociatedArtifact;\n} & Pick<ThreadProps, 'debug' | 'transcription' | 'onOpenChange' | 'onAddToGraph'>;\n\n// TODO(burdon): Since this only wraps Thread, just separate out hook?\nexport const ThreadContainer: FC<ThemedClassName<ThreadContainerProps>> = ({\n classNames,\n chat,\n settings,\n part,\n associatedArtifact,\n onOpenChange,\n ...props\n}) => {\n const space = getSpace(chat);\n const contextProvider = useContextProvider(space);\n const processor = useChatProcessor({ chat, space, settings, part, associatedArtifact });\n const messageQueue = useMessageQueue(chat);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n // TODO(thure): This will be referentially new on every render, is it causing overreactivity?\n const messages = [...(messageQueue?.objects ?? []), ...processor.messages.value];\n\n // Post last message to document.\n useEffect(() => {\n if (!processor.streaming.value && messageQueue?.objects) {\n const message = messageQueue.objects[messageQueue.objects.length - 1];\n if (space && chat && message && dispatch && associatedArtifact) {\n void dispatch(\n createIntent(CollaborationActions.InsertContent, {\n target: associatedArtifact,\n object: Ref.fromDXN(new DXN(DXN.kind.QUEUE, [...chat.queue.dxn.parts, message.id])),\n label: 'View proposal',\n }),\n );\n }\n }\n }, [messageQueue, associatedArtifact, processor.streaming.value]);\n\n const handleSubmit = useCallback(\n (text: string) => {\n // Don't accept input if still processing.\n if (processor.streaming.value) {\n log.warn('ignoring submit; still processing.');\n return false;\n }\n\n onOpenChange?.(true);\n\n invariant(messageQueue);\n void processor.request(text, {\n history: messageQueue.objects,\n onComplete: (messages) => {\n void messageQueue.append(messages);\n },\n });\n\n return true;\n },\n [processor, messageQueue, onOpenChange],\n );\n\n const handleCancel = useCallback(() => {\n if (processor.streaming.value) {\n void processor.cancel();\n }\n }, [processor]);\n\n return (\n <Thread\n classNames={classNames}\n space={space}\n messages={messages}\n processing={processor.streaming.value}\n error={processor.error.value}\n tools={processor.tools}\n contextProvider={contextProvider}\n onSubmit={handleSubmit}\n onCancel={handleCancel}\n onPrompt={handleSubmit}\n onOpenChange={onOpenChange}\n {...props}\n />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Signal, batch, computed, signal } from '@preact/signals-core';\n\nimport {\n DEFAULT_EDGE_MODEL,\n type ExecutableTool,\n type AiServiceClient,\n type GenerateRequest,\n type Message,\n type MessageContentBlock,\n type ToolUseContentBlock,\n} from '@dxos/ai';\nimport { type PromiseIntentDispatcher } from '@dxos/app-framework';\nimport { type ArtifactDefinition } from '@dxos/artifact';\nimport { AISession, type ArtifactDiffResolver } from '@dxos/assistant';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { Filter, getVersion, type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Factor out.\ndeclare global {\n interface ToolContextExtensions {\n space?: Space;\n dispatch?: PromiseIntentDispatcher;\n }\n}\n\ntype RequestOptions = {\n history?: Message[];\n onComplete?: (messages: Message[]) => void;\n};\n\nexport type ChatProcessorOptions = Pick<GenerateRequest, 'model' | 'systemPrompt'>;\n\nconst defaultOptions: ChatProcessorOptions = {\n model: DEFAULT_EDGE_MODEL,\n systemPrompt: 'you are a helpful assistant',\n};\n\n/**\n * Handles interactions with the AI service.\n * Maintains a queue of messages and handles streaming responses from the AI service.\n * Executes tools based on AI responses.\n * Supports cancellation of in-progress requests.\n */\nexport class ChatProcessor {\n /** Pending messages (incl. the current user request). */\n private readonly _pending: Signal<Message[]> = signal([]);\n\n /** Current streaming block (from the AI service). */\n private readonly _block: Signal<MessageContentBlock | undefined> = signal(undefined);\n\n /** Current streaming response. */\n private _session: AISession | undefined;\n\n /**\n * Streaming state.\n * @reactive\n */\n public readonly streaming: Signal<boolean> = computed(() => this._block.value !== undefined);\n\n /**\n * Last error.\n * @reactive\n */\n public readonly error: Signal<Error | undefined> = signal(undefined);\n\n /**\n * Array of Messages (incl. the current message being streamed).\n * @reactive\n */\n public readonly messages: Signal<Message[]> = computed(() => {\n const messages = [...this._pending.value];\n if (this._block.value) {\n const current = messages.pop();\n invariant(current);\n const { content, ...rest } = current;\n const message = { ...rest, content: [...content, this._block.value] };\n messages.push(message);\n }\n\n return messages;\n });\n\n constructor(\n private readonly _ai: AiServiceClient,\n private _tools?: ExecutableTool[],\n private _artifacts?: ArtifactDefinition[],\n private readonly _extensions?: ToolContextExtensions,\n private readonly _options: ChatProcessorOptions = defaultOptions,\n ) {}\n\n get tools() {\n return this._tools;\n }\n\n /**\n * Update tools.\n */\n setTools(tools: ExecutableTool[]): void {\n this._tools = tools;\n }\n\n /**\n * Make GPT request.\n */\n async request(message: string, options: RequestOptions = {}): Promise<Message[]> {\n this._session = new AISession({ operationModel: 'configured' });\n\n // Message complete.\n this._session.message.on((message) => {\n batch(() => {\n this._pending.value = [...this._pending.value, message];\n this._block.value = undefined;\n });\n });\n\n // Streaming update (happens before message complete).\n this._session.update.on((block) => {\n batch(() => {\n this._block.value = block;\n });\n });\n\n this._session.userMessage.on((message) => {\n this._pending.value = [...this._pending.value, message];\n });\n\n this._session.toolStatusReport.on(({ message, status }) => {\n const msg = this._pending.peek().find((m) => m.id === message.id);\n const toolUse = msg?.content.find((block) => block.type === 'tool_use');\n if (!toolUse) {\n return;\n }\n\n const block = msg?.content.find(\n (block): block is ToolUseContentBlock => block.type === 'tool_use' && block.id === toolUse.id,\n );\n if (block) {\n this._pending.value = this._pending.value.map((m) => {\n if (m.id === message.id) {\n return {\n ...m,\n content: m.content.map((b) =>\n b.type === 'tool_use' && b.id === toolUse.id ? { ...b, currentStatus: status } : b,\n ),\n };\n }\n return m;\n });\n } else {\n log.warn('no block for status report');\n }\n });\n\n try {\n const messages = await this._session.run({\n client: this._ai,\n history: options.history ?? [],\n artifacts: this._artifacts ?? [],\n requiredArtifactIds: this._artifacts?.map((artifact) => artifact.id) ?? [],\n tools: this._tools ?? [],\n prompt: message,\n systemPrompt: this._options.systemPrompt,\n extensions: this._extensions,\n artifactDiffResolver: this._artifactDiffResolver,\n generationOptions: {\n model: this._options.model,\n },\n });\n\n log('completed', { messages });\n options.onComplete?.(this._pending.value);\n } catch (err) {\n log.catch(err);\n if (err instanceof Error && err.message.includes('Overloaded')) {\n this.error.value = new AiServiceOverloadedError('AI service overloaded', { cause: err });\n } else {\n this.error.value = new Error('AI service error', { cause: err });\n }\n } finally {\n this._session = undefined;\n }\n\n return this._reset();\n }\n\n /**\n * Cancel pending requests.\n * @returns Pending requests (incl. the request message).\n */\n async cancel(): Promise<Message[]> {\n log.info('cancelling...');\n this._session?.abort();\n return this._reset();\n }\n\n private async _reset(): Promise<Message[]> {\n const messages = this._pending.value;\n batch(() => {\n this._pending.value = [];\n this._block.value = undefined;\n });\n\n return messages;\n }\n\n private _artifactDiffResolver: ArtifactDiffResolver = async (artifacts) => {\n const space = this._extensions?.space;\n if (!space) {\n return new Map();\n }\n const versions = new Map();\n await Promise.all(\n artifacts.map(async (artifact) => {\n const {\n objects: [object],\n } = await space.db.query(Filter.ids(artifact.id)).run();\n if (!object) {\n return;\n }\n versions.set(artifact.id, {\n version: getVersion(object),\n diff: `Current state: ${JSON.stringify(object)}`,\n });\n }),\n );\n return versions;\n };\n}\n\n// TODO(wittjosiah): Move to ai-service-client.\nexport class AiServiceOverloadedError extends Error {\n code = 'AI_SERVICE_OVERLOADED';\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { DEFAULT_EDGE_MODEL, DEFAULT_OLLAMA_MODEL, type ExecutableTool } from '@dxos/ai';\nimport { Capabilities, useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework';\nimport { type AssociatedArtifact, createSystemPrompt } from '@dxos/artifact';\nimport { FunctionType } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { useConfig } from '@dxos/react-client';\nimport { Filter, fullyQualifiedId, type Space, useQuery } from '@dxos/react-client/echo';\nimport { isNonNullable } from '@dxos/util';\n\nimport { AssistantCapabilities } from '../capabilities';\nimport { ChatProcessor, type ChatProcessorOptions } from '../hooks';\nimport { convertFunctionToTool, createToolsFromService } from '../tools';\nimport { type AIChatType, type AssistantSettingsProps, ServiceType } from '../types';\n\ntype UseChatProcessorProps = {\n chat?: AIChatType;\n space?: Space;\n settings?: AssistantSettingsProps;\n part?: 'deck' | 'dialog';\n associatedArtifact?: AssociatedArtifact;\n};\n\n/**\n * Configure and create ChatProcessor.\n */\nexport const useChatProcessor = ({\n chat,\n space,\n settings,\n // part = 'deck',\n part,\n associatedArtifact,\n}: UseChatProcessorProps): ChatProcessor => {\n const aiClient = useCapability(AssistantCapabilities.AiClient);\n const globalTools = useCapabilities(Capabilities.Tools);\n const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n // Services.\n const services = useQuery(space, Filter.type(ServiceType));\n const [serviceTools, setServiceTools] = useState<ExecutableTool[]>([]);\n useEffect(() => {\n log('creating service tools...');\n queueMicrotask(async () => {\n const tools = await Promise.all(services.map((service) => createToolsFromService(service)));\n setServiceTools(tools.flat());\n });\n }, [services]);\n\n // Tools and context.\n const config = useConfig();\n const functions = useQuery(space, Filter.type(FunctionType));\n const chatId = useMemo(() => (chat ? fullyQualifiedId(chat) : undefined), [chat]);\n const [tools, extensions] = useMemo(() => {\n log('creating tools...');\n const tools: ExecutableTool[] = [\n ...globalTools.flat(),\n ...serviceTools,\n ...functions\n .map((fn) => convertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? '', space?.id))\n .filter(isNonNullable),\n ];\n const extensions = { space, dispatch, pivotId: chatId, part };\n return [tools, extensions];\n }, [dispatch, globalTools, space, chatId, serviceTools, functions]);\n\n // Prompt.\n const systemPrompt = useMemo(\n () =>\n createSystemPrompt({\n artifacts: artifactDefinitions.map((definition) => `${definition.name}\\n${definition.instructions}`),\n associatedArtifact,\n }),\n [artifactDefinitions, associatedArtifact],\n );\n\n // TODO(burdon): Remove default (let backend decide if not specified).\n const model: ChatProcessorOptions['model'] =\n settings?.llmProvider === 'ollama'\n ? ((settings?.ollamaModel ?? DEFAULT_OLLAMA_MODEL) as ChatProcessorOptions['model'])\n : ((settings?.edgeModel ?? DEFAULT_EDGE_MODEL) as ChatProcessorOptions['model']);\n\n // Create processor.\n // TODO(burdon): Updated on each query update above; should just update current processor.\n const processor = useMemo(() => {\n log('creating processor...', { settings });\n return new ChatProcessor(aiClient.value, tools, artifactDefinitions, extensions, { model, systemPrompt });\n }, [aiClient.value, tools, artifactDefinitions, extensions, model, systemPrompt]);\n\n return processor;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { type Message } from '@dxos/ai';\nimport { createQueueDXN } from '@dxos/echo-schema';\nimport { getSpace, useQueue } from '@dxos/react-client/echo';\n\nimport { type AIChatType } from '../types';\n\nexport const useMessageQueue = (chat?: AIChatType) => {\n const space = getSpace(chat);\n const queueDxn = useMemo(() => {\n // TODO(dmaretskyi): Chat.queue.dxn should be a valid DXN already.\n const dxn = space && chat?.queue.dxn;\n return dxn ? createQueueDXN(space.id, dxn.parts.at(-1)) : undefined;\n }, [space, chat?.queue.dxn]);\n\n return useQueue<Message>(queueDxn);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { type Space } from '@dxos/client/echo';\n\nimport { MockServiceRegistry } from '../testing';\nimport { type ServiceType, type ServiceQuery } from '../types';\n\n/**\n * Retrieves matching services from the registry.\n */\nexport const useServices = (space: Space, query?: ServiceQuery): ServiceType[] => {\n const registry = useMemo(() => new MockServiceRegistry(), []);\n const [services, setServices] = useState<ServiceType[]>([]);\n useEffect(() => {\n const t = setTimeout(async () => {\n const services = await registry.queryServices(query);\n setServices(services);\n });\n\n return () => clearTimeout(t);\n }, [query, registry]);\n\n return services;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ToolRegistry } from '@dxos/ai';\nimport { EXA_API_KEY } from '@dxos/ai/testing';\nimport {\n type BlueprintDefinition,\n BlueprintParser,\n createExaTool,\n createGraphWriterTool,\n createLocalSearchTool,\n} from '@dxos/assistant';\nimport { type Space } from '@dxos/client/echo';\nimport { type DXN } from '@dxos/keys';\nimport { DataTypes } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\n// TODO(dmaretskyi): make db available through services (same as function executor).\n// TODO(burdon): Can tools implement \"aspects\" so that variants can be used rather than an explicit reference?\nexport const createToolRegistry = (space: Space, queueDxn?: DXN): ToolRegistry => {\n return new ToolRegistry(\n [\n createExaTool({ apiKey: EXA_API_KEY }),\n createLocalSearchTool(space.db, queueDxn && space.queues.get(queueDxn)),\n queueDxn &&\n createGraphWriterTool({\n db: space.db,\n queue: space.queues.get(queueDxn),\n schema: DataTypes,\n onDone: async (objects) => {\n const queue = space.queues.get(queueDxn);\n await queue.append(objects);\n },\n }),\n ].filter(isNonNullable),\n );\n};\n\nexport const RESEARCH_BLUEPRINT_DEFINITION: BlueprintDefinition = {\n steps: [\n {\n instructions: 'Research information and entities related to the selected objects.',\n tools: ['search/web_search'],\n },\n {\n instructions:\n 'Based on your research find matching entires that are already in the graph. Do exaustive research.',\n tools: ['search/local_search'],\n },\n {\n instructions: 'Add researched data to the graph. Make connections to existing objects.',\n tools: ['search/local_search', 'graph/writer'],\n },\n ],\n};\n\nexport const RESEARCH_BLUEPRINT = BlueprintParser.create().parse(RESEARCH_BLUEPRINT_DEFINITION);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { DEFAULT_EDGE_MODEL, type GenerateRequest } from '@dxos/ai';\nimport { createSystemPrompt } from '@dxos/artifact';\n\nexport const createProcessorOptions = (artifacts: string[]): Pick<GenerateRequest, 'model' | 'systemPrompt'> => ({\n model: DEFAULT_EDGE_MODEL,\n systemPrompt: createSystemPrompt({ artifacts }),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Obj } from '@dxos/echo';\n\nimport {\n type ApiAuthorization,\n type BaseServiceRegistry,\n type ServiceQuery,\n ServiceType,\n categoryIcons,\n} from '../types';\n\nexport class MockServiceRegistry implements BaseServiceRegistry {\n async queryServices(query?: ServiceQuery): Promise<ServiceType[]> {\n return TEST_SERVICES;\n }\n}\n\n// TODO(burdon): Can we generalize credentials?\n\nconst AMADEUS_AUTH: ApiAuthorization = {\n type: 'oauth',\n clientId: 'BOEnpLd1sMyKjAPGKYeAPFFy60u53QEG',\n clientSecret: 'n4qldSN7usvD57gm',\n tokenUrl: 'https://test.api.amadeus.com/v1/security/oauth2/token',\n grantType: 'client_credentials',\n};\n\nconst VISUAL_CROSSING_CREDENTIALS: ApiAuthorization = {\n type: 'api-key',\n key: 'FDPRVS953KB4GQQLD25GRT975',\n placement: {\n type: 'query',\n name: 'key',\n },\n};\n\n// Registries:\n// - https://apis.guru\n// - https://rapidapi.com\n// - https://github.com/konfig-sdks/openapi-examples\n// - https://publicapis.io/?utm_source=chatgpt.com\n\n// Examples:\n// - https://petstore.swagger.io/v2/swagger.json (testing)\n// - https://lichess.org/api\n// - https://github.com/konfig-sdks/openapi-examples/tree/main/xkcd\n// - https://api.coindesk.com/v1/bpi/currentprice.json\n// - https://www.coingecko.com/en/api/documentation\n\n// TODO(burdon): Support yaml endpoints.\n// - e.g., https://github.com/konfig-sdks/openapi-examples/blob/main/xkcd/openapi.yaml\n\nconst TEST_SERVICES: ServiceType[] = [\n Obj.make(ServiceType, {\n serviceId: 'amadeus.com/service/FlightSearch',\n name: 'Amadeus Flight Search',\n description: 'Search for local and international flights.',\n category: 'travel',\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://api.apis.guru/v2/specs/amadeus.com/amadeus-flight-availabilities-search/1.0.2/swagger.json',\n authorization: AMADEUS_AUTH,\n },\n ],\n }),\n\n Obj.make(ServiceType, {\n serviceId: 'amadeus.com/service/HotelSearch',\n name: 'Amadeus Hotel Search',\n description: 'Search for local and international hotels.',\n category: 'travel',\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://api.apis.guru/v2/specs/amadeus.com/amadeus-hotel-search/3.0.8/swagger.json',\n authorization: AMADEUS_AUTH,\n },\n ],\n }),\n\n Obj.make(ServiceType, {\n serviceId: 'visualcrossing.com/service/Weather',\n name: 'Visual Crossing Weather',\n description: 'Search for global weather forecasts.',\n category: 'weather',\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://api.apis.guru/v2/specs/visualcrossing.com/weather/4.6/openapi.json',\n authorization: VISUAL_CROSSING_CREDENTIALS,\n },\n ],\n }),\n\n // TODO(burdon): Needs auth.\n Obj.make(ServiceType, {\n serviceId: 'abstractapi.com/service/GeoLocation',\n name: 'Abstract GeoLocation',\n description: 'Get the location of any IP address.',\n category: 'geolocation',\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://api.apis.guru/v2/specs/abstractapi.com/geolocation/1.0.0/openapi.json',\n },\n ],\n }),\n\n //\n // Testing\n //\n\n ...Array.from({ length: 20 }, (_, i) =>\n Obj.make(ServiceType, {\n serviceId: `example.com/service/test-${i}`,\n name: `Test ${i}`,\n description: `Test ${i}`,\n category: Object.keys(categoryIcons)[Math.floor(Math.random() * Object.keys(categoryIcons).length)],\n interfaces: [\n {\n kind: 'api',\n schemaUrl: 'https://petstore.swagger.io/v2/swagger.json',\n },\n ],\n }),\n ),\n] as const;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useState, useCallback, type KeyboardEventHandler, type ChangeEventHandler } from 'react';\n\n/**\n * Hook that handles text input events.\n */\n// TODO(burdon): Factor out.\nexport const useTextInputEvents = ({\n onEnter,\n onEscape,\n}: {\n onEnter?: (text: string) => boolean | void;\n onEscape?: () => void;\n}) => {\n const [value, setValue] = useState('');\n\n const onKeyDown = useCallback<KeyboardEventHandler<HTMLInputElement>>(\n (ev) => {\n switch (ev.key) {\n case 'Escape': {\n onEscape?.();\n setValue('');\n break;\n }\n\n case 'Enter': {\n const value = (ev.target as HTMLInputElement).value.trim();\n if (value.length > 0) {\n const reset = onEnter?.(value);\n if (reset) {\n setValue('');\n }\n }\n break;\n }\n }\n },\n [onEnter, onEscape],\n );\n\n const onChange = useCallback<ChangeEventHandler<HTMLInputElement>>((ev) => {\n setValue(ev.target.value);\n }, []);\n\n return [{ value, onKeyDown, onChange }, setValue];\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { type Space } from '@dxos/client/echo';\nimport { Filter, Obj, type Type } from '@dxos/echo';\n\nexport type ContextProvider = {\n query: (params: { query: string }) => Promise<Array<{ uri: string; label: string }>>;\n resolveMetadata: (params: { uri: string }) => Promise<{ uri: string; label: string }>;\n};\n\nconst stringMatch = (query: string, label: string) => label.toLowerCase().startsWith(query.toLowerCase());\n\nexport const useContextProvider = (space?: Space): ContextProvider | undefined => {\n const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);\n\n return useMemo<ContextProvider | undefined>((): ContextProvider | undefined => {\n if (!space) {\n return undefined;\n }\n\n return {\n query: async ({ query }) => {\n const artifactSchemas = artifactDefinitions.map((artifact) => artifact.schema);\n const { objects } = await space.db\n .query(Filter.or(...artifactSchemas.map((schema) => Filter.type(schema as Type.Schema))))\n .run();\n\n return (\n objects\n // TODO(burdon): Remove cast ??? (+ two instances below).\n // .map((object) => {\n // log.info('object', { object, label: Obj.getLabel(object as any) });\n // return object;\n // })\n .filter((object) => stringMatch(query, Obj.getLabel(object as any) ?? ''))\n // TODO(dmaretskyi): `Type.getDXN` (at the point of writing) didn't work here as it was schema-only.\n .filter((object) => !!Obj.getDXN(object as Obj.Any))\n .map((object) => ({\n uri: Obj.getDXN(object as any)!.toString(),\n label: Obj.getLabel(object as any) ?? '',\n }))\n );\n },\n resolveMetadata: async ({ uri }) => {\n const object = await space.db.query(Filter.ids(uri)).first();\n return { uri, label: Obj.getLabel(object) ?? '' };\n },\n };\n }, [space, artifactDefinitions]);\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;AAIA,SAAyBA,QAAAA,aAAY;AACrC,OAAOC,SAASC,YAAYC,2BAA2B;AAEvD,SAA+BC,uBAAuB;AACtD,SACEC,uBACAC,uBACAC,UAAAA,SACAC,qBAGK;AACP,SAASC,UAAU;AACnB,SAASC,qBAAqB;;;ACb9B,SAASC,YAA4B;AACrC,SACEC,YACAC,YACAC,YACAC,QAGAC,kBACK;AA4BA,IAAMC,wBAAwB,CAAC,EAAEC,UAAUC,WAAWC,SAAQ,MAAuB;AAC1F,QAAMC,UAAUC,WAAWC,UACzB,MAAA;IAIE,YAAYC,MAAkB;AAF9BC,gCAAoC;AAGlC,WAAKC,eAAe,KAAKC,mBAAmBH,IAAAA;IAC9C;IAEAI,OAAOA,QAAoB;AACzB,UAAIA,OAAOC,cAAcD,OAAOE,cAAc;AAC5C,aAAKJ,eAAe,KAAKC,mBAAmBC,OAAOJ,IAAI;MACzD;IACF;IAEQG,mBAAmBH,MAAiC;AAC1D,YAAMO,OAAOP,KAAKQ,MAAMC,IAAIC,SAAQ;AACpC,YAAMC,cAAchB,YAAYY,IAAAA,KAAS,CAAA;AACzC,UAAI,CAACI,YAAYC,QAAQ;AACvB,aAAKX,qBAAqB;AAC1B,eAAOY,WAAWC;MACpB;AAGA,WAAKb,qBAAqBU,YAAY,CAAA;AACtC,YAAMI,SAAS,KAAKd,mBAAmBe,MAAMT,KAAKK,MAAM;AACxD,UAAI,CAACG,QAAQ;AACX,eAAOF,WAAWC;MACpB;AAGA,aAAOD,WAAWI,IAAI;QACpBJ,WAAWK,OAAO;UAChBA,QAAQ,IAAIC,uBAAuBJ,MAAAA;UACnCK,MAAM;QACR,CAAA,EAAGC,MAAMrB,KAAKQ,MAAMC,IAAIG,MAAM;OAC/B;IACH;IAEAU,mBAAmBtB,MAA2B;AAC5C,UAAI,CAAC,KAAKC,oBAAoB;AAC5B,eAAO;MACT;AAEA,YAAMM,OAAOP,KAAKQ,MAAMC,IAAIC,SAAQ;AACpC,YAAMK,SAAS,KAAKd,mBAAmBe,MAAMT,KAAKK,MAAM;AACxD,UAAI,CAACG,QAAQ;AACX,eAAO;MACT;AAEAf,WAAKuB,SAAS;QACZC,SAAS;UACPC,MAAMzB,KAAKQ,MAAMC,IAAIG;UACrBc,QAAQX;QACV;QACAY,WAAW;UACTC,QAAQ5B,KAAKQ,MAAMC,IAAIG,SAASG,OAAOH;QACzC;MACF,CAAA;AAEA,aAAO;IACT;EACF,GACA;IACEiB,aAAa,CAACC,MAAMA,EAAE5B;EACxB,CAAA;AAGF,SAAO;IACLL;IACAkC,WAAWC,MAAM;MACf,yBAAyB;QACvBC,SAAS;MACX;IACF,CAAA;IAEAC,KAAKC,QACHC,OAAOC,GAAG;MACR;QACEC,KAAK;QACLC,gBAAgB;QAChBC,KAAK,CAACxC,SAAAA;AACJ,gBAAMyC,SAASzC,KAAKyC,OAAO5C,OAAAA;AAC3B,iBAAO4C,QAAQnB,mBAAmBtB,IAAAA,KAAS;QAC7C;MACF;MACA;QACEsC,KAAK;QACLC,gBAAgB;QAChBC,KAAK,CAACxC,SAAAA;AAEJ,cAAIA,KAAKQ,MAAMmB,UAAUe,KAAKC,SAAS3C,KAAKQ,MAAMC,IAAIG,QAAQ;AAC5D,mBAAO;UACT;AAEA,gBAAM6B,SAASzC,KAAKyC,OAAO5C,OAAAA;AAC3B,iBAAO4C,QAAQnB,mBAAmBtB,IAAAA,KAAS;QAC7C;MACF;MACA;QACEsC,KAAK;QACLC,gBAAgB;QAChBC,KAAK,CAACxC,SAAAA;AACJ,gBAAMO,OAAOP,KAAKQ,MAAMC,IAAIC,SAAQ,EAAGkC,KAAI;AAC3C,cAAIrC,KAAKK,SAAS,KAAKlB,UAAU;AAC/B,kBAAMmD,QAAQnD,SAASa,IAAAA;AAGvB,gBAAIsC,OAAO;AACT7C,mBAAKuB,SAAS;gBACZC,SAAS;kBACPC,MAAM;kBACNqB,IAAI9C,KAAKQ,MAAMC,IAAIG;kBACnBc,QAAQ;gBACV;cACF,CAAA;YACF;UACF;AAEA,iBAAO;QACT;MACF;MACA;QACEY,KAAK;QACLC,gBAAgB;QAChBC,KAAK,CAACxC,SAAAA;AACJA,eAAKuB,SAAS;YACZC,SAAS;cACPC,MAAMzB,KAAKQ,MAAMmB,UAAUe,KAAKC;cAChCjB,QAAQ;YACV;YACAC,WAAW;cACTC,QAAQ5B,KAAKQ,MAAMmB,UAAUe,KAAKC,OAAO;cACzCA,MAAM3C,KAAKQ,MAAMmB,UAAUe,KAAKC,OAAO;YACzC;UACF,CAAA;AACA,iBAAO;QACT;MACF;MACA;QACEL,KAAK;QACLC,gBAAgB;QAChBC,KAAK,CAACxC,SAAAA;AAEJA,eAAKuB,SAAS;YACZC,SAAS;cACPC,MAAM;cACNqB,IAAI9C,KAAKQ,MAAMC,IAAIG;cACnBc,QAAQ;YACV;UACF,CAAA;AACA9B,qBAAAA;AACA,iBAAO;QACT;MACF;KACD,CAAA;;AAGP;AAEA,IAAMuB,yBAAN,cAAqC4B,WAAAA;EACnC,YAAoBhC,QAAgB;AAClC,UAAK,GAAA,KADaA,SAAAA;EAEpB;EAESiC,QAAyB;AAChC,UAAMC,OAAOC,SAASC,cAAc,MAAA;AACpCF,SAAKG,cAAc,KAAKrC;AACxBkC,SAAKI,YAAY;AACjB,WAAOJ;EACT;EAESK,GAAGC,OAAwC;AAClD,WAAOA,MAAMxC,WAAW,KAAKA;EAC/B;AACF;;;ACrNA,SAASyC,gBAAgBC,wBAA+C;AACxE,SAAyBC,gBAAgB;AACzC,SACEC,cAAAA,aACAC,cAAAA,aACAC,UAAAA,SACAC,cAAAA,aACAC,cAAAA,mBAGK;AAEP,SAASC,aAAa;AA8Bf,IAAMC,mBAAmB,CAAC,EAC/BC,UACAC,QAAQ,OACRC,mBAAmB,IAAG,MACE;AACxB,MAAIA,iBAAiBC,WAAW,GAAG;AACjC,UAAM,IAAIC,MAAM,6CAAA;EAClB;AAEA,QAAMC,kBAAkBC,YAAWC,UACjC,MAAMC,cAAAA;IAKJ,YAAYC,MAAkB;AAJtBC,oBAAS,IAAIC,MAAAA;AAErBC,yBAA6BC,YAAWC,IAAI,CAAA,CAAE;AAG5CC,qBAAe,YAAA;AACb,cAAMC,QAAQ,MAAM,KAAKN,OAAOO,QAAO;AACvC,YAAI;AACF,eAAKL,cAAc,MAAM,KAAKM,oBAAoBT,IAAAA;QACpD,UAAA;AACEO,gBAAMG,QAAO;QACf;MACF,CAAA;IACF;IAEAC,OAAOA,QAAoB;AACzB,UAAIA,OAAOC,YAAY;AACrBN,uBAAe,YAAA;AACb,gBAAMC,QAAQ,MAAM,KAAKN,OAAOO,QAAO;AACvC,cAAI;AACF,iBAAKL,cAAc,MAAM,KAAKM,oBAAoBE,OAAOX,IAAI;UAC/D,UAAA;AACEO,kBAAMG,QAAO;UACf;QACF,CAAA;MACF;IACF;IAEA,MAAcD,oBAAoBT,MAA0C;AAC1E,YAAMa,OAAOb,KAAKc,MAAMC,IAAIC,SAAQ;AACpC,YAAMC,aAAaJ,KAAKK,SAAS,IAAIC,OAAO,GAAG1B,gBAAAA,qBAAqC,GAAA,CAAA;AAEpF,YAAMU,cAAc,CAAA;AACpB,iBAAWiB,SAASH,YAAY;AAC9B,cAAMI,YAAYD,MAAM,CAAA;AACxB,cAAME,MAAMD,UAAUE,MAAM,GAAG,EAAC;AAChC,cAAMC,OAAO,MAAMjC,SAASkC,iBAAiB;UAAEH;QAAI,CAAA;AACnD,YAAIE,MAAM;AACRrB,sBAAYuB,KACVtB,YAAWuB,QAAQ;YACjBC,QAAQ,IAAIC,gBAAgBL,IAAAA;UAC9B,CAAA,EAAGM,MAAMV,MAAMW,OAAQX,MAAMW,QAASV,UAAU3B,MAAM,CAAA;QAE1D;MACF;AAEA,aAAOU,YAAWC,IAAIF,WAAAA;IACxB;EACF,GACA;IACEA,aAAa,CAAC6B,MAAMA,EAAE7B;IACtB8B,SAAS,CAACC,WAAW;MACnBC,YAAWC,aAAaC,GACtB,CAACrC,SAAwBA,KAAKkC,OAAOtC,eAAAA,GAAkBO,eAAemC,SAASC,KAAK;;EAG1F,CAAA;AAGF,SAAO;IACL3C;IAEAuC,YAAWK,MAAM;MACf,sBAAsB;QACpBC,cAAc;QACdC,aAAa;QACbC,aAAa;QACbC,YAAY;MACd;IACF,CAAA;IAEAC,eAAe;MACbC,kBAAkB;MAClBC,UAAU;QACR,OAAOC,YAAAA;AACL,gBAAM5B,QAAQ4B,QAAQC,YAAY,IAAI9B,OAAO,GAAG1B,gBAAAA,cAA8B,CAAA;AAE9E,cAAI,CAAC2B,SAASA,OAAO8B,OAAO9B,OAAO+B,MAAM;AACvC,mBAAO;UACT;AAEA,gBAAMC,QAAQhC,MAAMP,KAAKU,MAAM,CAAA;AAC/B,gBAAMN,aAAa,MAAM1B,SAAS8D,cAAc;YAAED;UAAM,CAAA;AAExD,iBAAO;YACLD,MAAM/B,MAAM+B;YACZG,QAAQ;YACRC,SAAStC,WAAWuC,IAAI,CAACnC,eAAe;cACtCoC,OAAOpC,UAAUoC;cACjBC,OAAO,GAAGjE,gBAAAA,GAAmB4B,UAAUC,GAAG;YAC5C,EAAA;UACF;QACF;;MAEFqC,aAAa,CAACnE;MACdoE,cAAc,MAAM;MACpBC,aAAa;IACf,CAAA;IAEAC,QAAOzB,GAAG0B,gBAAAA;;AAEd;AAEA,IAAMlC,kBAAN,cAA8BmC,YAAAA;EAC5B,YAAoBxC,MAAqB;AACvC,UAAK,GAAA,KADaA,OAAAA;EAEpB;EAESyC,QAAyB;AAChC,UAAMC,OAAOC,SAASC,cAAc,MAAA;AACpCF,SAAKG,cAAc,KAAK,KAAK7C,KAAKiC,KAAK;AACvCS,SAAKI,YAAY;AACjB,WAAOJ;EACT;EAESK,GAAGC,OAAiC;AAC3C,WAAOA,MAAMhD,KAAKF,QAAQ,KAAKE,KAAKF;EACtC;EAESmD,cAAuB;AAC9B,WAAO;EACT;AACF;;;AF5IO,IAAMC,SAASC,2BACpB,CACE,EACEC,YACAC,YACAC,YACAC,WACAC,eAAe,OACfC,aACAC,UACAC,WACAC,UACAC,aAAY,GAEdV,gBAAAA;;;AAEA,UAAM,EAAEW,UAAS,IAAKC,gBAAAA;AACtB,UAAM,EAAEC,WAAWC,KAAI,IAAKC,cAC1B;MACEC,OAAO;MACPZ;MACAF,YAAY;QACVe,sBAAsB;UAAEV;UAAUC;UAAWC;QAAS,CAAA;QACtDS,sBAAsB;UACpBC,iBAAiB;UACjBd;UACAC;QACF,CAAA;QACAc,sBAAsB;UAAET;QAAU,CAAA;QAClCR,aAAakB,iBAAiB;UAAEC,UAAUnB;QAAW,CAAA,IAAK,CAAA;QAC1DoB,MAAKC,QACHC,QAAOC,GAAG;UACR;YACEC,KAAK;YACLC,gBAAgB;YAChBC,KAAK,MAAA;AACHnB,6BAAe,IAAA;AACf,qBAAO;YACT;UACF;UACA;YACEiB,KAAK;YACLC,gBAAgB;YAChBC,KAAK,MAAA;AACHnB,6BAAe,KAAA;AACf,qBAAO;YACT;UACF;SACD,CAAA;QAEHR;QACA4B,OAAOC,aAAAA;IACX,GACA;MAACpB;MAAWT;MAAYK;MAAUC;KAAU;AAI9CwB,wBACEhC,aACA,MAAA;AACE,aAAO;QACLiC,OAAO,MAAA;AACLnB,gBAAMmB,MAAAA;QACR;QACAC,SAAS,CAACC,SAAAA;AACRrB,gBAAMsB,SAAS;YACbC,SAAS;cACPC,MAAM;cACNC,IAAIzB,KAAK0B,MAAMC,IAAIC;cACnBC,QAAQR;YACV;YACAS,WAAW;cACTC,QAAQV,KAAKO;cACbI,MAAMX,KAAKO;YACb;UACF,CAAA;QACF;MACF;IACF,GACA;MAAC5B;MAAMP;KAAS;AAGlB,WAAO,sBAAA,cAACwC,OAAAA;MAAIC,KAAKnC;MAAWoC,WAAWC,GAAG,UAAUjD,UAAAA;;;;;AACtD,CAAA;;;;AGtHF,OAAOkD,UAASC,cAAAA,aAAYC,gBAAgB;AAE5C,SAASC,qBAAqB;AAC9B,SAASC,MAAMC,YAAkCC,SAASC,iBAAiBC,sBAAsB;AACjG,SAASC,eAAe;AACxB,SAASC,WAAWC,MAAAA,WAAU;AAuBvB,IAAMC,YAAYC,gBAAAA,YACvB,CAAC,EAAEC,YAAYC,aAAaC,YAAYC,OAAOC,YAAYC,YAAYC,UAAU,GAAGC,MAAAA,GAASC,iBAAAA;;;AAC3F,UAAM,EAAEC,EAAC,IAAKC,eAAeC,gBAAAA;AAC7B,UAAMC,YAAYC,gBAAkCL,YAAAA;AACpD,UAAM,CAACM,QAAQC,SAAAA,IAAaC,SAAS,KAAA;AAGrC,UAAM,EAAEC,UAAS,IAAKC,cAAc;MAClCJ;MACAK,UAAU,CAACC,SAAAA;AACTR,kBAAUS,SAASC,QAAQF,IAAAA;AAC3BR,kBAAUS,SAASE,MAAAA;MACrB;IACF,CAAA;AAEA,WACE,gBAAAC,OAAA,cAACC,OAAAA;MACCC,WAAWC,IACT,8FACA3B,UAAAA;OAGF,gBAAAwB,OAAA,cAACC,OAAAA;MAAIC,WAAU;OACXvB,SACA,gBAAAqB,OAAA,cAACI,QAAQC,SAAO;MAACC,SAAS3B,MAAM4B;MAASC,eAAe;OACtD,gBAAAR,OAAA,cAACS,MAAAA;MAAKC,MAAK;MAA8BlC,YAAYmC;MAAWC,MAAM;WAEpE,gBAAAZ,OAAA,cAACa,SAAAA;MAAQvB,QAAQZ;SAEzB,gBAAAsB,OAAA,cAACc,QAAAA;MACCC,KAAK3B;MACL4B,WAAAA;MACAxC,YAAW;MACXyC,cAAc;MACdxC,aAAaA,eAAeQ,EAAE,oBAAA;MAC9BJ;MACAC;MACC,GAAGC;SAEJD,YAAYF,eACZ,gBAAAoB,OAAA,cAACC,OAAAA;MAAIC,WAAU;OACZxB,cAAcI,YACb,gBAAAkB,OAAA,cAACkB,YAAAA;MACC1C,YAAW;MACX2C,SAAQ;MACRP,MAAM;MACNF,MAAK;MACLU,UAAAA;MACAC,OAAOpC,EAAE,0BAAA;MACTqC,SAASxC;QAGZ,CAACJ,cAAcE,cACd,gBAAAoB,OAAA,cAACkB,YAAAA;MACC1C,YAAY2B,IAAG,UAAUV,aAAa,gBAAA;MACtC0B,SAAQ;MACRP,MAAM;MACNF,MAAK;MACLU,UAAAA;MACAG,WAAAA;MACAF,OAAOpC,EAAE,mBAAA;MACTuC,aAAa,MAAMjC,UAAU,IAAA;MAC7BkC,WAAW,MAAMlC,UAAU,KAAA;MAC3BmC,cAAc,MAAMnC,UAAU,IAAA;MAC9BoC,YAAY,MAAMpC,UAAU,KAAA;;;;;AAO1C,CAAA;;;;ACnGF,OAAOqC,UAASC,YAAAA,WAAUC,WAAWC,gBAAyB;AAE9D,SAASC,qBAAgC;AACzC,SAASC,cAAcC,uBAAuB;AAE9C,SAASC,oBAAoB;AAC7B,SAASC,OAAAA,YAAW;AACpB,SAASC,QAAoBC,gBAAgB;AAE7C,SAASC,MAAAA,WAAU;;;ACTnB,SAASC,YAAiCC,kBAAkB;AAC5D,SAASC,YAAY;AACrB,SAASC,kBAAkBC,oCAAoC;AAE/D,SAASC,WAAW;AAEpB,SAASC,eAAe;;AAGjB,IAAMC,wBAAwB,CACnCC,IACAC,SACAC,YAAAA;AAEA,MAAI,CAACF,GAAGG,eAAe,CAACH,GAAGI,aAAa;AACtC,WAAOC;EACT;AACA,QAAMC,sBAAsBV,6BAA6BE,QAAQE,EAAAA,CAAAA;AACjE,MAAI,CAACM,qBAAqB;AACxB,WAAOD;EACT;AAEA,QAAME,MAAMZ,iBAAiBW,qBAAqBL,SAAS;IAAEC;EAAQ,CAAA;AAErE,SAAOV,WAAW,iBAAiB;IACjCgB,MAAMR,GAAGQ;IACTL,aAAaH,GAAGG;IAChBM,QAAQf,KAAKgB,eAAeV,GAAGI,WAAW;IAC1CO,SAAS,OAAOC,UAAAA;AACdf,UAAIgB,KAAK,yBAAyB;QAAEL,MAAMR,GAAGQ;QAAMD;QAAKK;MAAM,GAAA;;;;;;AAC9D,YAAME,WAAW,MAAMC,MAAMR,KAAK;QAChCS,QAAQ;QACRC,SAAS;UACP,gBAAgB;QAClB;QACAC,MAAMC,KAAKC,UAAUR,KAAAA;MACvB,CAAA;AAEA,aAAOnB,WAAW4B,QAAQ,MAAMP,SAASQ,KAAI,CAAA;IAC/C;EACF,CAAA;AACF;;;ACzCA,SAASC,cAAc;AACvB,OAAOC,iBAAiB;AAGxB,SAA8BC,cAAAA,aAAYC,qBAAqB;AAC/D,SAASC,QAAAA,aAAY;AACrB,SAASC,uBAAuB;AAChC,SAASC,iBAAiB;AAC1B,SAASC,OAAAA,YAAW;AACpB,SAASC,qBAAqB;;AASvB,IAAMC,yBAAyB,OAAOC,YAAAA;AAC3CJ,YAAUI,QAAQC,YAAYC,WAAW,KAAKF,QAAQC,WAAW,CAAA,EAAGE,SAAS,OAAA,QAAA;;;;;;;;;AAC7E,QAAMC,QAAQJ,QAAQC,WAAW,CAAA;AACjCL,YAAUQ,MAAMC,WAAS,QAAA;;;;;;;;;AACzBT,YAAUQ,MAAMC,WAAS,QAAA;;;;;;;;;AACzB,SAAOC,mBAAmBF,MAAMC,WAAW;IAAEE,eAAeH,MAAMG;EAAc,CAAA;AAClF;AAEO,IAAMD,qBAAqB,OAChCE,KACAC,YAAAA;AAEA,QAAMC,MAAM,MAAMC,MAAMH,GAAAA;AACxB,QAAMI,OAAQ,MAAMF,IAAIG,KAAI;AAC5BhB,EAAAA,KAAI,QAAQ;IAAEe;EAAK,GAAA;;;;;;AAEnB,QAAME,QAA0B,CAAA;AAChC,aAAW,CAACC,MAAMC,QAAAA,KAAaC,OAAOC,QAAQN,KAAKO,KAAK,GAAG;AACzD,QAAI,OAAOH,aAAa,UAAU;AAChC;IACF;AAEA,UAAM,EAAE,GAAGI,QAAAA,IAAYJ;AACvB,eAAW,CAACK,QAAQC,CAAAA,KAAML,OAAOC,QAAQE,OAAAA,GAAU;AACjD,YAAMG,aAAwCD;AAC9CzB,MAAAA,KAAI,cAAc;QAAEkB;QAAMM;QAAQE;MAAW,GAAA;;;;;;AAE7C,YAAMC,qBACJD,WAAWE,YAAYC,IAAI,CAACC,cAAAA;AAC1B,cAAMC,WAAWC,kBAAkBF,WAAWf,IAAAA;AAC9C,eAAOgB;MACT,CAAA,KAAM,CAAA;AAER,YAAME,cAA+B;QACnCC,MAAM;QACNC,YAAY,CAAC;MACf;AAEA,YAAMC,qBAAkD,CAAA;AACxD,iBAAWN,aAAaH,oBAAoB;AAC1C3B,QAAAA,KAAI,aAAa;UAAE8B;QAAU,GAAA;;;;;;AAE7B,YACElB,SAASF,eAAewB,SAAS,aACjCtB,QAAQF,cAAc2B,UAAUH,SAAS,WACzCJ,UAAUQ,OAAO,WACjBR,UAAUS,SAAS3B,QAAQF,cAAc2B,UAAUE,MACnD;AACA;QACF;AAEAH,2BAAmBI,KAAKV,SAAAA;AAExB,YAAIA,UAAUW,QAAQ;AACpBR,sBAAYE,WAAYL,UAAUS,IAAI,IAAIzC,gBAAgBgC,UAAUW,MAAM;QAC5E,WAAW,OAAOX,UAAUI,SAAS,UAAU;AAC7C,gBAAM,EAAEK,MAAMD,IAAII,KAAKC,UAAU,GAAGF,OAAAA,IAAWX;AAC/CG,sBAAYE,WAAYI,IAAAA,IAAQzC,gBAAgB2C,MAAAA;AAChD,cAAIE,UAAU;AACZV,wBAAYU,aAAa,CAAA;AACzBV,wBAAYU,SAAUH,KAAKD,IAAAA;UAC7B;QACF;MACF;AAEAvC,MAAAA,KAAI,eAAe;QAAEiC;MAAY,GAAA;;;;;;AACjCxC,aAAOmD,aAAa/C,MAAKgD,UAAU,EAAEZ,WAAAA;AAErC,YAAMa,cAAcpB,WAAWoB,eAAepB,WAAWqB;AACzD,UAAI,CAACD,aAAa;AAChB9C,QAAAA,KAAIgD,KAAK,kBAAkB;UAAE9B;UAAMM;QAAO,GAAA;;;;;;AAC1C;MACF;AAEA,YAAMyB,WAA+B;QACnCC,UAAUnC;QACVG;QACAM;QACAI,YAAYQ;QACZ1B,eAAeE,SAASF;MAC1B;AAEAO,YAAMuB;;QAEJ5C,cAAc,WAAW;UACvB2C,MAAMY,YAAYjC,MAAMM,QAAQE,UAAAA;UAChCoB,aAAalC,SAASwC,eAAe,GAAGxC,QAAQwC,YAAY;;EAAON,WAAAA,KAAgBA;UACnFlB,YAAYK;UACZoB,SAAS,OAAOC,UAAAA;AACd,kBAAMC,WAAW,MAAMC,gBAAgBP,UAAUK,KAAAA;AACjD,mBAAO3D,YAAW8D,QAAQF,QAAAA;UAC5B;QACF,CAAA;MAAA;IAEJ;EACF;AAEA,SAAOtC;AACT;AAEA,IAAMkC,cAAc,CAACjC,MAAcM,QAAgBE,eAAAA;AACjD,MAAIA,WAAWgC,aAAa;AAC1B,WAAOhC,WAAWgC;EACpB;AAGA,MAAInB,OAAO,GAAGf,OAAOmC,YAAW,CAAA,IAAMzC,KAAK0C,WAAW,UAAU,GAAA,CAAA;AAChE,SAAOrB,KAAKlC,SAASwD,sBAAsB;AACzC,UAAMC,eAAevB,KAAKlC;AAE1B,eAAW0D,QAAQC,eAAe;AAChC,UAAIzB,KAAK0B,SAASF,IAAAA,GAAO;AACvBxB,eAAOA,KAAK2B,QAAQH,MAAM,EAAA;AAC1B;MACF;IACF;AACAxB,WAAOA,KAAKqB,WAAW,MAAM,GAAA,EAAKM,QAAQ,MAAM,EAAA;AAEhD,UAAMC,cAAc5B,KAAKlC;AACzB,QAAIyD,iBAAiBK,aAAa;AAChC;IACF;EACF;AACA5B,SAAOA,KAAKqB,WAAW,MAAM,GAAA,EAAKM,QAAQ,MAAM,EAAA,EAAIA,QAAQ,MAAM,EAAA;AAElE,SAAO3B,KAAK6B,MAAM,GAAGP,oBAAAA;AACvB;AAEA,IAAMA,uBAAuB;AAC7B,IAAMG,gBAAgB;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAWF,IAAMR,kBAAkB,OAAOP,UAA8BK,UAAAA;AAC3DtD,EAAAA,KAAIqE,KAAK,YAAY;IAAE7C,QAAQyB,SAASzB;IAAQe,MAAMU,SAAS/B;IAAMoC;EAAM,GAAA;;;;;;AAE3E,MAAI3C,MAAM2D,eAAerB,QAAAA;AACzB,QAAMsB,UAAuB;IAC3B/C,QAAQyB,SAASzB;IACjBgD,SAAS,CAAC;EACZ;AACA,QAAMC,QAAQ,IAAIC,gBAAAA;AAClB,MAAIC;AACJ,aAAW7C,aAAamB,SAASrB,YAAY;AAC3C,QAAI0B,MAAMxB,UAAUS,IAAI,MAAMqC,QAAW;AACvC;IACF;AAEA,YAAQ9C,UAAUQ,IAAE;MAClB,KAAK,UAAU;AACb,YAAIR,UAAU+C,SAAS;AACpBN,kBAAQC,QAAgB1C,UAAUS,IAAI,IAAIT,UAAUgD;QACvD;AACA;MACF;MACA,KAAK,QAAQ;AACXnE,cAAMA,IAAIuD,QAAQ,IAAIpC,UAAUS,IAAI,KAAKwC,mBAAmBzB,MAAMxB,UAAUS,IAAI,CAAC,CAAA;AACjF;MACF;MACA,KAAK,QAAQ;AACX,cAAMyC,QAAQ1B,MAAMxB,UAAUS,IAAI;AAGlC,cAAM0C,eAAepF,MAAKqF,eAAepD,UAAUW,MAAM;AACzDhD,eAAOmD,aAAaqC,YAAAA,EAAcD,KAAAA;AAElC,YAAIL,MAAM;AACR,gBAAM,IAAIQ,MAAM,6BAA6BrD,UAAUS,IAAI,EAAE;QAC/D;AACAoC,eAAOK;AACP;MACF;MACA,KAAK,SAAS;AACZP,cAAMW,IAAItD,UAAUS,MAAMe,MAAMxB,UAAUS,IAAI,CAAC;AAC/C;MACF;IACF;EACF;AAEA,MACGU,SAASvC,eAAewB,SAAS,aAAae,SAASvC,cAAc2B,UAAUH,SAAS,0BACzFe,SAASvC,eAAewB,SAAS,SACjC;AACCqC,YAAQC,QAAgBa,gBAAgB,MAAMC,qBAAqBrC,SAASvC,aAAa;EAC5F,WAAWuC,SAASvC,eAAewB,SAAS,aAAae,SAASvC,cAAc2B,UAAUH,SAAS,SAAS;AAC1GuC,UAAMW,IAAInC,SAASvC,cAAc2B,UAAUE,MAAMU,SAASvC,cAAc6E,GAAG;EAC7E;AAEA,MAAId,MAAMe,OAAO,GAAG;AAClB7E,WAAO,IAAI8D,MAAMgB,SAAQ,CAAA;EAC3B;AAEA,MAAId,MAAM;AACRJ,YAAQI,OAAOe,KAAKC,UAAUhB,IAAAA;AAC7BJ,YAAQC,QAAgB,cAAA,IAAkB;EAC7C;AAEAxE,EAAAA,KAAIqE,KAAK,WAAW;IAAE1D;IAAK4D;EAAQ,GAAA;;;;;;AACnC,QAAMhB,WAAW,MAAMzC,MAAMH,KAAK4D,OAAAA;AAElCvE,EAAAA,KAAIqE,KAAK,YAAY;IAAEuB,IAAIrC,SAASqC;IAAIC,QAAQtC,SAASsC;IAAQC,YAAYvC,SAASuC;EAAW,GAAA;;;;;;AAEjG,MAAIvC,SAASqC,IAAI;AACf,UAAMG,cAAcxC,SAASiB,QAAQwB,IAAI,cAAA;AACzC,QAAID,aAAa9B,SAAS,kBAAA,GAAqB;AAC7C,aAAO,MAAMV,SAASvC,KAAI;IAC5B,OAAO;AACL,aAAO,MAAMuC,SAAS0C,KAAI;IAC5B;EACF,OAAO;AACL,QAAI1C,SAASiB,QAAQwB,IAAI,cAAA,GAAiB/B,SAAS,kBAAA,GAAqB;AACtE,YAAMiC,eAAe,MAAM3C,SAAS0C,KAAI;AACxC,UAAIE;AACJ,UAAI;AACFA,gBAAQT,KAAKU,MAAMF,YAAAA;MACrB,QAAQ;AACNC,gBAAQD;MACV;AACAlG,MAAAA,KAAImG,MAAM,SAAS;QAAEA;MAAM,GAAA;;;;;;AAC3B,YAAM,IAAIhB,MAAMgB,MAAME,OAAO;IAC/B,OAAO;AACL,YAAMF,QAAQ,MAAM5C,SAAS0C,KAAI;AACjCjG,MAAAA,KAAImG,MAAM,SAAS;QAAEA;MAAM,GAAA;;;;;;AAC3B,YAAM,IAAIhB,MAAMgB,KAAAA;IAClB;EACF;AACF;AAEA,IAAM7B,iBAAiB,CAACrB,aAAAA;AACtB,MAAItC,MAAM;AACV,MAAI2F,OAAOrD,SAASC,QAAQ,KAAKD,SAASC,SAASqD,WAAWtD,SAASC,SAASqD,QAAQlG,SAAS,GAAG;AAClGM,UAAMsC,SAASC,SAASqD,QAAQ,CAAA,EAAG5F;EACrC,OAAO;AACLZ,cAAU,CAACuG,OAAOrD,SAASC,QAAQ,GAAA,QAAA;;;;;;;;;AACnCvC,UAAM,GAAGsC,SAASC,SAASsD,UAAU,CAAA,KAAM,OAAA,MAAavD,SAASC,SAASuD,IAAI;EAChF;AAEA,MAAI,CAACH,OAAOrD,SAASC,QAAQ,KAAKD,SAASC,SAASwD,UAAU;AAC5D/F,WAAOsC,SAASC,SAASwD;EAC3B;AAEA/F,SAAOsC,SAAS/B;AAEhB,SAAOP;AACT;AAEO,IAAM2E,uBAAuB,OAAO5E,kBAAAA;AACzC,UAAQA,cAAcwB,MAAI;IACxB,KAAK,WAAW;AACdnC,gBAAUW,cAAc2B,UAAUH,SAAS,wBAAA,QAAA;;;;;;;;;AAC3C,aAAO,UAAUxB,cAAc6E,GAAG;IACpC;IACA,KAAK,SAAS;AACZ,YAAMhC,WAAW,MAAMzC,MAAMJ,cAAciG,UAAU;QACnDnF,QAAQ;QACRgD,SAAS;UACP,gBAAgB;QAClB;QACAG,MAAM,cAAcjE,cAAckG,SAAS,cAAclG,cAAcmG,QAAQ,kBAAkBnG,cAAcoG,YAAY;MAC7H,CAAA;AACA,YAAMC,OAAO,MAAMxD,SAASvC,KAAI;AAChC,aAAO,UAAU+F,KAAKC,YAAY;IACpC;IACA,SAAS;AACP,YAAM,IAAI7B,MAAM,+BAAgCzE,cAAsBwB,IAAI,EAAE;IAC9E;EACF;AACF;AAOA,IAAMF,oBAAoB,CAACS,QAAawE,SAAAA;AACtC,SAAOhH,cAAcwC,QAAQ,CAACuC,OAAOkC,YAAAA;AACnC,QAAI,OAAOlC,UAAU,YAAYA,UAAU,QAAQ,UAAUA,SAAS,OAAOA,MAAMmC,SAAS,UAAU;AACpG,UAAInC,MAAMmC,KAAKC,WAAW,GAAA,GAAM;AAC9B,cAAMrF,WAAWrC,YAAYsG,IAAIiB,MAAMjC,MAAMmC,KAAK/C,MAAM,CAAA,CAAA;AACxD,YAAIrC,UAAU;AACZ,iBAAOmF,QAAQnF,QAAAA;QACjB,OAAO;AACL/B,UAAAA,KAAIgD,KAAK,cAAc;YAAEqE,KAAKrC,MAAMmC;YAAMF;UAAK,GAAA;;;;;;QACjD;MACF;IACF;AACA,WAAOC,QAAQlC,KAAAA;EACjB,CAAA;AACF;AAEA,IAAMsB,SAAS,CAACpD,cAAAA;AACd,SAAQA,UAAiBoE,YAAY;AACvC;;;;AFxTO,IAAMC,UAAU,CAAC,EAAEC,YAAYC,WAAWC,WAAWC,UAAUC,QAAO,MAAgB;;;AAC3F,WACE,gBAAAC,OAAA,cAACC,OAAAA;MAAIC,WAAWC,IAAG,6CAA6CR,UAAAA;OAC7DC,aAAaA,UAAUQ,SAAS,KAC/B,gBAAAJ,OAAA,cAACK,SAAAA;MACCC,OAAM;MACNC,OAAOX,UAAUY,IAAI,CAAC,EAAEC,MAAMC,aAAaC,MAAK,OAAQ;QACtDF;QACAC;QACAE,UAAUD,MAAMH,IAAI,CAAC,EAAEC,MAAAA,OAAMC,aAAAA,aAAW,OAAQ;UAAED,MAAM,UAAKI,cAAcJ,KAAAA,CAAAA;UAASC,aAAAA;QAAY,EAAA;MAClG,EAAA;QAIHZ,YAAYA,SAASM,SAAS,KAC7B,gBAAAJ,OAAA,cAACK,SAAAA;MACCC,OAAM;MACNC,OAAOT,SAASU,IAAI,CAAC,EAAEM,SAAS,EAAEC,WAAWN,MAAMC,YAAW,GAAIC,MAAK,OAAQ;QAC7EF,MAAMA,QAAQM;QACdL;QACAE,UAAUD,MAAMH,IAAI,CAAC,EAAEC,MAAAA,OAAMC,aAAAA,aAAW,OAAQ;UAAED,MAAM,UAAKA,KAAAA;UAAQC,aAAAA;QAAY,EAAA;MACnF,EAAA;QAIHb,aAAaA,UAAUO,SAAS,KAC/B,gBAAAJ,OAAA,cAACK,SAAAA;MAAQC,OAAM;MAAYC,OAAOV,UAAUW,IAAI,CAAC,EAAEC,MAAMC,YAAW,OAAQ;QAAED;QAAMC;MAAY,EAAA;;;;;AAIxG;AAEA,IAAML,UAID,CAAC,EAAEC,OAAOC,OAAOR,QAAO,MAAE;;;AAC7B,UAAMiB,mBAAmB;AACzB,UAAMC,iBAAiB;AACvB,UAAMC,oBAAoBf,IAAG,qDAAqDJ,WAAWiB,gBAAAA;AAE7F,WACE,gBAAAhB,OAAA,cAACC,OAAAA,MACC,gBAAAD,OAAA,cAACmB,MAAAA;MAAGjB,WAAU;OAAgBI,KAAAA,GAC9B,gBAAAN,OAAA,cAACC,OAAAA;MAAIC,WAAWe;OACbV,MAAMC,IAAI,CAAC,EAAEC,MAAMC,aAAaE,SAAQ,GAAIQ,MAC3C,gBAAApB,OAAA,cAACqB,UAAAA;MAASC,KAAKF;OACZX,QACC,gBAAAT,OAAA,cAACC,OAAAA;MAAIC,WAAWgB;OACd,gBAAAlB,OAAA,cAACC,OAAAA;MAAIC,WAAU;OAA6BO,IAAAA,GAC5C,gBAAAT,OAAA,cAACC,OAAAA;MAAIC,WAAU;OAAgBQ,WAAAA,CAAAA,GAGlCE,UAAUJ,IAAI,CAAC,EAAEC,MAAAA,OAAMC,aAAAA,aAAW,GAAIU,OACrC,gBAAApB,OAAA,cAACC,OAAAA;MAAIqB,KAAKF;MAAGlB,WAAWC,IAAGe,mBAAmBnB,WAAWiB,gBAAAA;OACvD,gBAAAhB,OAAA,cAACC,OAAAA;MAAIC,WAAU;OAAYO,KAAAA,GAC3B,gBAAAT,OAAA,cAACC,OAAAA;MAAIC,WAAU;OAA6BQ,YAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;;;;AAQ5D;AAEO,IAAMa,mBAAmB,CAAC,EAAE5B,YAAY6B,MAAK,MAAsC;;;AAExF,UAAMC,sBAAsBC,gBAAgBC,aAAaC,kBAAkB;AAG3E,UAAM9B,WAAW+B,SAASL,OAAOM,OAAOC,KAAKC,WAAAA,CAAAA;AAC7C,UAAM,CAACC,cAAcC,eAAAA,IAAmBC,UAAoD,CAAA,CAAE;AAC9FC,cAAU,MAAA;AACRC,MAAAA,KAAI,6BAA6B;QAAEvC,UAAUA,SAASM;MAAO,GAAA;;;;;;AAC7DkC,qBAAe,YAAA;AACb,cAAM3B,QAAQ,MAAM4B,QAAQC,IAC1B1C,SAASU,IAAI,OAAOM,aAAa;UAAEA;UAASH,OAAO,MAAM8B,uBAAuB3B,OAAAA;QAAS,EAAA,CAAA;AAG3FoB,wBAAgBvB,KAAAA;MAClB,CAAA;IACF,GAAG;MAACb;KAAS;AAGb,UAAMD,YAAYgC,SAASL,OAAOM,OAAOC,KAAKW,YAAAA,CAAAA;AAE9C,WACE,gBAAA1C,OAAA,cAACN,SAAAA;MAAQC;MAAwBC,WAAW6B;MAAqB3B,UAAUmC;MAAcpC;;;;;AAE7F;;;;AG/GA,OAAO8C,UAA6BC,aAAaC,WAAAA,UAASC,UAAAA,eAAc;AAIxE,SAASC,mBAAmB;AAE5B,SAASC,uBAA8C;AACvD,SAASC,MAAAA,WAAU;AACnB,SAASC,qBAAqB;;;;ACR9B,OAAOC,YAAgD;AAGvD,SAASC,eAAe;AAExB,SAASC,aAAAA,kBAAiB;AAE1B,SAASC,QAAQC,QAAAA,OAAMC,cAAAA,mBAAwC;AAC/D,SACEC,gBACAC,mBAAmBC,6BAEd;AACP,SAASC,QAAAA,aAAY;AACrB,SAASC,MAAAA,WAAU;AACnB,SAASC,qBAAqB;;;;ACf9B,OAAOC,UAAkBC,aAAAA,YAAWC,SAASC,QAAQC,YAAAA,iBAAgB;AAGrE,SAASC,OAAAA,YAAW;AAEpB,SAASC,aAAaC,YAAYC,uBAAuB;AACzD,SAASC,YAAY;AACrB,SAASC,iBAAAA,gBAAeC,kBAAkB;;AAInC,IAAMC,gBAAgB,CAACC,YAAAA;AAC5B,SAAOA,QAAQC,QAAQC,KAAK,CAACC,UAAUA,MAAMC,SAAS,cAAcD,MAAMC,SAAS,aAAA;AACrF;AAEA,IAAMC,eAAc,CAACC,SAAAA;AACnB,SAAOA,KAAKC,aAAaD,KAAKE,WAAW,GAAGF,KAAKC,SAAS,IAAID,KAAKE,QAAQ,KAAKF,KAAKG,KAAKC,MAAM,GAAA,EAAKC,IAAG;AAC1G;AAEA,IAAMC,iBAAiB,CAACN,MAAwBO,WAAAA;AAC9C,MAAI,CAACP,MAAM;AACT,WAAO;EACT;AAEA,SAAOO,QAAQb,WAAWM,KAAKQ,WAAW,WAAWT,aAAYC,IAAAA,CAAAA;AACnE;AAEO,IAAMS,YAAqD,CAAC,EAAEC,YAAYhB,SAASiB,MAAK,MAAE;;;AAC/F,UAAM,EAAEhB,UAAU,CAAA,EAAE,IAAKD;AAEzB,QAAIkB;AACJ,UAAMC,SAASlB,QAAQmB,OAAO,CAACjB,UAAUA,MAAMC,SAAS,cAAcD,MAAMC,SAAS,aAAA;AACrF,UAAMiB,QAAQF,OACXG,IAAI,CAACnB,UAAAA;AACJ,cAAQA,MAAMC,MAAI;QAChB,KAAK,YAAY;AAEf,cAAID,MAAMoB,WAAWL,SAASf,MAAMqB,OAAOrB,MAAMqB,IAAI;AACnD,mBAAO;UACT;AAEAhC,UAAAA,KAAIiC,KAAK,YAAY;YAAEnB,MAAMY,SAASZ;YAAMO,QAAQV,MAAMuB;UAAc,GAAA;;;;;;AAExER,oBAAU;YAAEZ,MAAMW,OAAOU,KAAK,CAACrB,SAASA,KAAKG,SAASN,MAAMM,IAAI;YAAGN;UAAM;AACzE,iBAAO;YAAEyB,OAAOhB,eAAeM,QAAQZ,MAAMH,MAAMuB,aAAa;YAAGvB;UAAM;QAC3E;QAEA,KAAK,eAAe;AAClB,cAAI,CAACe,SAAS;AACZ1B,YAAAA,KAAIqC,KAAK,sBAAsB;cAAE1B;YAAM,GAAA;;;;;;AACvC,mBAAO;cAAEyB,OAAO;cAASzB;YAAM;UACjC;AAEA,iBAAO;YAAEyB,OAAO,GAAGhB,eAAeM,QAAQZ,MAAMwB,MAAAA,CAAAA;YAAwB3B;UAAM;QAChF;QAEA,SAAS;AACPe,oBAAUY;AACV,iBAAO;YAAEF,OAAO;YAASzB;UAAM;QACjC;MACF;IACF,CAAA,EACCiB,OAAOvB,cAAAA;AAEV,WAAO,gBAAAV,OAAA,cAAC4C,eAAAA;MAAcf;MAAwBK;;;;;AAChD;AAEO,IAAMU,gBAAiF,CAAC,EAC7Ff,YACAK,MAAK,MACN;;;AACC,UAAMW,UAAU1C,OAAuB,IAAA;AACvC,UAAM,CAAC2C,UAAUC,WAAAA,IAAe3C,UAAS,CAAA;AACzC,UAAM,CAAC4C,MAAMC,OAAAA,IAAW7C,UAAS,KAAA;AACjCH,IAAAA,WAAU,MAAA;AACR,UAAI+C,MAAM;AACRH,gBAAQK,SAASC,MAAAA;MACnB;IACF,GAAG;MAACH;KAAK;AAET,UAAMI,eAAe,CAACC,UAAAA;AACpB,UAAIA,UAAUP,UAAU;AACtBG,gBAAQ,KAAA;MACV,OAAO;AACLF,oBAAYM,KAAAA;MACd;IACF;AAEA,UAAMZ,QAAQvC,QAAQ,MAAA;AACpB,YAAMoD,QAAQpB,MAAMC,IAAI,CAACoB,SAASA,KAAKd,KAAK,EAAER,OAAOtB,UAAAA;AACrD,aAAO,gBAAAX,OAAA,cAACO,YAAAA;QAAWiD,KAAI;QAAcF;QAAcG,UAAU;QAAOC,aAAAA;;IACtE,GAAG;MAACxB;KAAM;AAEV,WACE,gBAAAlC,OAAA,cAACQ,iBAAAA;MAAgBqB,YAAY;QAAC;QAAiBA;;MAAaY;MAAcO;MAAYW,cAAcV;OAClG,gBAAAjD,OAAA,cAAC4D,OAAAA;MAAIC,WAAU;OACb,gBAAA7D,OAAA,cAACM,aAAAA;MAAYwD,KAAKjB;MAASkB,QAAQ7B,MAAM6B;MAAQjB;MAAoBkB,UAAUZ;QAC/E,gBAAApD,OAAA,cAACS,MAAAA;MAAKwD,MAAM/B,MAAMY,QAAAA,EAAU9B;MAAOa,YAAW;;;;;AAItD;;;;ADjFA,IAAMqC,kBAAkB;AACxB,IAAMC,iBAAiB;AAEvB,IAAMC,mBAAkB,CAACC,UAAAA;;;AACvB,WAAO,gBAAAC,OAAA,cAACC,uBAAAA;MAAuB,GAAGF;MAAOG,YAAYC,IAAGP,iBAAiBG,MAAMG,UAAU;;;;;AAC3F;AAEA,IAAME,mBAAmB,CAAC,EAAEC,UAAUH,YAAYI,KAAI,MAA0D;;;AAC9G,QAAI,CAACD,UAAU;AACb,aAAO;IACT;AAEA,WACE,gBAAAL,OAAA,cAACO,OAAAA;MAAIC,MAAK;MAAYC,WAAWN,IAAG,eAAeG,QAAQ,eAAeJ,UAAAA;OACxE,gBAAAF,OAAA,cAACO,OAAAA;MAAIE,WAAWN,IAAGG,OAAO;QAAC;QAAwBT;UAAkB,QAAA;OAAYQ,QAAAA,CAAAA;;;;AAGvF;AAYO,IAAMK,gBAAwC,CAAC,EACpDR,YACAS,OACAC,SACAC,OACAC,UACAC,aAAY,MACb;;;AACC,UAAM,EAAEP,MAAMQ,UAAU,CAAA,EAAE,IAAKJ;AAG/B,QAAIK,cAAcL,OAAAA,GAAU;AAC1B,aACE,gBAAAZ,OAAA,cAACI,kBAAAA;QAAiBF,YAAYC,IAAGD,YAAY,uBAAA;SAC3C,gBAAAF,OAAA,cAACkB,WAAAA;QAAUP;QAAcT,YAAYN;QAAiBgB;QAAkBC;;IAG9E;AAEA,WAAOG,QAAQG,IAAI,CAACC,OAAOC,QAAAA;AAEzB,UAAID,MAAME,SAAS,UAAUF,MAAMG,KAAKC,WAAW,QAAQ,EAAA,EAAIC,WAAW,GAAG;AAC3E,eAAO;MACT;AAEA,YAAMC,YAAYC,WAAWP,MAAME,IAAI,KAAKK,WAAWC;AAEvD,aACE,gBAAA5B,OAAA,cAACI,kBAAAA;QACCyB,KAAKR;QACLnB,YAAYC,IAAGD,YAAY,uBAAA;QAC3BI,MAAMc,MAAME,SAAS,UAAUd,SAAS;SAExC,gBAAAR,OAAA,cAAC0B,WAAAA;QAAUf;QAAcS;QAAcN;QAAoBC;;IAGjE,CAAA;;;;AACF;AASA,IAAMY,aAA6C;;;;EAIjD,CAAC,MAAA,GAAkB,CAAC,EAAEP,MAAK,MAAE;AAC3BU,IAAAA,WAAUV,MAAME,SAAS,QAAA,QAAA;;;;;;;;;AAEzB,UAAMS,QAAQX,MAAMY,cAAcC,OAAOb,MAAMY,WAAW,IAAIE;AAC9D,QAAI,CAACH,OAAO;AACV,aAAO,gBAAA/B,OAAA,cAACmC,gBAAAA;QAAejC,YAAW;QAA8Bc,SAASI,MAAMG;;IACjF;AAUA,WACE,gBAAAvB,OAAA,cAACF,kBAAAA;;MAECsC,aAAaC,mBAAmBC,SAASlB,MAAMY,eAAe,EAAA,KAAOZ,MAAMmB;MAC3ER;MACAS,MACEpB,MAAMmB,UACJ,gBAAAvC,OAAA,cAACyC,OAAAA;QAAKD,MAAM;QAA6BtC,YAAW;QAAiCwC,MAAM;WACzFR;OAGN,gBAAAlC,OAAA,cAACmC,gBAAAA;MACCnB,SAASI,MAAMG;MACfrB,YAAY;QAAC;QAASmC,mBAAmBC,SAASlB,MAAMY,eAAe,EAAA,KAAO;;;EAItF;;;;EAKA,CAAC,MAAA,GAAkB,CAAC,EAAErB,OAAOS,OAAON,UAAUC,aAAY,MAAE;AAC1De,IAAAA,WAAUV,MAAME,SAAS,QAAA,QAAA;;;;;;;;;AAEzB,YAAQF,MAAMY,aAAW;MACvB,KAAK,aAAa;AAChB,eACE,gBAAAhC,OAAA,cAACF,kBAAAA;UAAgBiC,OAAOE,OAAOb,MAAMY,WAAW;UAAGI,aAAa;WAC9D,gBAAApC,OAAA,cAAC2C,kBAAAA;UAAiBhC;UAAcT,YAAW;;MAGjD;MAEA,KAAK,WAAW;AACd,cAAM,EAAEqB,OAAO,GAAE,IAAuBqB,cAAcxB,MAAMyB,QAAQ,IAAA,KAAU,CAAC;AAC/E,eAAO,gBAAA7C,OAAA,cAAC8C,aAAAA;UAAWN,MAAK;UAAyBO,OAAOxB;UAAMyB,SAAS,MAAMlC,WAAWS,IAAAA;;MAC1F;MAEA,KAAK,UAAU;AACb,cAAM,EAAE0B,UAAU,CAAA,EAAE,IAA4BL,cAAcxB,MAAMyB,QAAQ,IAAA,KAAU,CAAC;AACvF,eACE,gBAAA7C,OAAA,cAACO,OAAAA;UAAIE,WAAU;WACZwC,QAAQ9B,IAAI,CAAC+B,QAAQ7B,QACpB,gBAAArB,OAAA,cAACmD,QAAAA;UACCjD,YAAY;UACZ2B,KAAKqB;UACLF,SAAS,MAAMlC,WAAWoC,MAAAA;WAEzBA,MAAAA,CAAAA,CAAAA;MAKX;MAEA,KAAK,SAAS;AACZ,eACE,gBAAAlD,OAAA,cAACO,OAAAA;UAAIE,WAAU;WACb,gBAAAT,OAAA,cAACoD,SAAAA;UACC5C,MAAK;UACL6C,MAAM;YAAEC,SAASC,KAAKC,MAAMpC,MAAMyB,QAAQ,IAAA;UAAM;UAChDY,OAAO;UACPC,UAAU,gBAAA1D,OAAA,cAACO,OAAAA;YAAIE,WAAU;aAA8BW,MAAMyB,IAAI;YAElE9B,gBACC,gBAAAf,OAAA,cAAC8C,aAAAA;UACCN,MAAK;UACLO,OAAM;UACNC,SAAS,MAAMjC,eAAewC,KAAKC,MAAMpC,MAAMyB,QAAQ,IAAA,CAAA;;MAKjE;MAEA,SAAS;AACP,cAAMd,QAAQX,MAAMY,cAAcC,OAAOb,MAAMY,WAAW,IAAIE;AAC9D,eACE,gBAAAlC,OAAA,cAACF,kBAAAA;UAAgBiC,OAAOA,SAAS;WAC/B,gBAAA/B,OAAA,cAAC2D,OAAAA;UAAKN,MAAMT,cAAcxB,MAAMyB,QAAQzB,KAAAA;UAAQlB,YAAW;;MAGjE;IACF;EACF;;;;EAKA0B,SAAS,CAAC,EAAER,MAAK,MAAE;AACjB,QAAIW,QAAQE,OAAOb,MAAME,IAAI;AAC7B,QAAIF,MAAME,SAAS,YAAY;AAC7BS,cAAQ,SAASX,MAAMwC,IAAI;IAC7B;AAEA,WACE,gBAAA5D,OAAA,cAACF,kBAAAA;MAAgBiC,OAAOA,SAAS;OAC/B,gBAAA/B,OAAA,cAAC2D,OAAAA;MAAKN,MAAMjC;MAAOlB,YAAW;;EAGpC;AACF;AAGA,IAAM+B,SAAiC;EACrC,CAAC,KAAA,GAAiB;EAClB,CAAC,UAAA,GAAsB;EACvB,CAAC,UAAA,GAAsB;EACvB,CAAC,aAAA,GAAyB;EAC1B,CAAC,WAAA,GAAuB;EACxB,CAAC,iBAAA,GAA6B;AAChC;AAEA,IAAMI,qBAA+B;EAAC;EAAO;;;;AE5NtC,IAAMwB,iBAA+E,CAC1F,EAAEC,SAASC,SAAQ,GACnBC,YAAAA;AAEA,MAAIC,IAAI;AACR,aAAWC,SAASF,QAAQG,SAAS;AACnC,YAAQD,MAAME,MAAI;MAChB,KAAK;MACL,KAAK,eAAe;AAClB,YAAIN,SAAS;AACXA,kBAAQK,QAAQE,KAAKH,KAAAA;QACvB,OAAO;AACLJ,oBAAU;YACRQ,IAAI;cAACN,QAAQM;cAAIL;cAAGM,KAAK,GAAA;YACzBC,MAAMR,QAAQQ;YACdL,SAAS;cAACD;;UACZ;AACAH,mBAASM,KAAKP,OAAAA;QAChB;AACA;MACF;MAEA,KAAK;MACL,SAAS;AACPA,kBAAUW;AACVV,iBAASM,KAAK;UACZC,IAAI;YAACN,QAAQM;YAAIL;YAAGM,KAAK,GAAA;UACzBC,MAAMR,QAAQQ;UACdL,SAAS;YAACD;;QACZ,CAAA;AACA;MACF;IACF;AAEAD;EACF;AAEA,SAAO;IAAEH;IAASC;EAAS;AAC7B;;;AHZO,IAAMW,SAAS,CAAC,EACrBC,YACAC,OACAC,UACAC,WAAW,MACXC,eACAC,YACAC,OACAC,UACAC,UACAC,cACAC,iBACA,GAAGC,MAAAA,MACS;;;AACZ,UAAMC,WAAWC,QAAyB,IAAA;AAE1C,UAAMC,WAAWC,YAAAA;AACjB,UAAMC,gBAAgBC,cAAcH,SAAUI,WAAW;AACzD,UAAMC,UAAUL,SAAUM,SAASC,MAAMC,OAAON,cAAcM;AAE9D,UAAMC,eAAeC,YACnB,CAACC,UAAAA;AACClB,iBAAWkB,KAAAA;AACXb,eAASc,SAASC,eAAAA;AAClB,aAAO;IACT,GACA;MAACpB;KAAS;AAIZ,UAAM,EAAEL,UAAU0B,mBAAmB,CAAA,EAAE,IAAKC,SAAQ,MAAA;AAClD,UAAI1B,UAAU;AACZ,gBAAQD,YAAY,CAAA,GAAI4B,OAAmDC,gBAAgB;UACzF7B,UAAU,CAAA;QACZ,CAAA;MACF,OAAO;AACL,eAAO;UAAEA,UAAUA,YAAY,CAAA;QAAG;MACpC;IACF,GAAG;MAACA;MAAUC;KAAS;AAEvB,UAAM6B,aAAaH,SAAwC,MAAA;AACzD,UAAI,CAACnB,iBAAiB;AACpB,eAAOuB;MACT;AAEA,aAAO;QACLC,eAAe,OAAO,EAAEC,MAAK,MAA0BzB,gBAAgByB,MAAM;UAAEA;QAAM,CAAA;QACrFC,kBAAkB,OAAO,EAAEC,IAAG,MAAwB3B,gBAAgB4B,gBAAgB;UAAED;QAAI,CAAA;MAC9F;IACF,GAAG;MAAC3B;KAAgB;AAEpB,WACE,gBAAA6B,OAAA,cAACC,OAAAA;MAAIC,MAAK;MAAOC,WAAWC,IAAG,sCAAsC3C,UAAAA;OACnE,gBAAAuC,OAAA,cAACK,iBAAAA;MAAgBC,KAAKjC;MAAUkC,MAAAA;OAC9B,gBAAAP,OAAA,cAACC,OAAAA;MACCC,MAAK;MACLC,WAAWC,IAAGf,iBAAiBmB,SAAS,KAAK,aAAA;MAC7CC,OAAO;QAAE,eAAe,YAAY7B,OAAAA;MAAe;OAElDS,iBAAiBqB,IAAI,CAACC,YACrB,gBAAAX,OAAA,cAACY,eAAAA;MAAcC,KAAKF,QAAQG;MAAIrD,YAAW;MAAaC;MAAciD;MAAmB,GAAGvC;WAKjGJ,YACC,gBAAAgC,OAAA,cAACe,WAAAA;MACCC,YAAYnD;MACZC;MACAC;MACAC,UAAUgB;MACVf;MACAC;MACAuB;;;;;AAKV;;;;AIjHA,OAAOwB,UAASC,eAAAA,cAAsBC,aAAAA,kBAAiB;AAEvD,SAASC,sBAAsBC,cAAcC,uBAAAA,4BAA2B;AAExE,SAASC,KAAKC,WAAW;AACzB,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,OAAAA,YAAW;AACpB,SAASC,YAAAA,iBAAgB;;;ACPzB,SAAsBC,OAAOC,UAAUC,cAAc;AAErD,SACEC,0BAOK;AAGP,SAASC,iBAA4C;AACrD,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,OAAAA,YAAW;AACpB,SAASC,UAAAA,SAAQC,kBAA8B;;AAiB/C,IAAMC,iBAAuC;EAC3CC,OAAOP;EACPQ,cAAc;AAChB;AAQO,IAAMC,gBAAN,MAAMA;EAuCX,YACmBC,KACTC,QACAC,YACSC,aACAC,WAAiCR,gBAClD;SALiBI,MAAAA;SACTC,SAAAA;SACAC,aAAAA;SACSC,cAAAA;SACAC,WAAAA;SA1CFC,WAA8BhB,OAAO,CAAA,CAAE;SAGvCiB,SAAkDjB,OAAOkB,MAAAA;SAS1DC,YAA6BpB,SAAS,MAAM,KAAKkB,OAAOG,UAAUF,MAAAA;SAMlEG,QAAmCrB,OAAOkB,MAAAA;SAM1CI,WAA8BvB,SAAS,MAAA;AACrD,YAAMuB,WAAW;WAAI,KAAKN,SAASI;;AACnC,UAAI,KAAKH,OAAOG,OAAO;AACrB,cAAMG,UAAUD,SAASE,IAAG;AAC5BrB,QAAAA,WAAUoB,SAAAA,QAAAA;;;;;;;;;AACV,cAAM,EAAEE,SAAS,GAAGC,KAAAA,IAASH;AAC7B,cAAMI,UAAU;UAAE,GAAGD;UAAMD,SAAS;eAAIA;YAAS,KAAKR,OAAOG;;QAAO;AACpEE,iBAASM,KAAKD,OAAAA;MAChB;AAEA,aAAOL;IACT,CAAA;SA6HQO,wBAA8C,OAAOC,cAAAA;AAC3D,YAAMC,QAAQ,KAAKjB,aAAaiB;AAChC,UAAI,CAACA,OAAO;AACV,eAAO,oBAAIC,IAAAA;MACb;AACA,YAAMC,WAAW,oBAAID,IAAAA;AACrB,YAAME,QAAQC,IACZL,UAAUM,IAAI,OAAOC,aAAAA;AACnB,cAAM,EACJC,SAAS,CAACC,MAAAA,EAAO,IACf,MAAMR,MAAMS,GAAGC,MAAMpC,QAAOqC,IAAIL,SAASM,EAAE,CAAA,EAAGC,IAAG;AACrD,YAAI,CAACL,QAAQ;AACX;QACF;AACAN,iBAASY,IAAIR,SAASM,IAAI;UACxBG,SAASxC,WAAWiC,MAAAA;UACpBQ,MAAM,kBAAkBC,KAAKC,UAAUV,MAAAA,CAAAA;QACzC,CAAA;MACF,CAAA,CAAA;AAEF,aAAON;IACT;EA1IG;EAEH,IAAIiB,QAAQ;AACV,WAAO,KAAKtC;EACd;;;;EAKAuC,SAASD,OAA+B;AACtC,SAAKtC,SAASsC;EAChB;;;;EAKA,MAAME,QAAQzB,SAAiB0B,UAA0B,CAAC,GAAuB;AAC/E,SAAKC,WAAW,IAAIpD,UAAU;MAAEqD,gBAAgB;IAAa,CAAA;AAG7D,SAAKD,SAAS3B,QAAQ6B,GAAG,CAAC7B,aAAAA;AACxB7B,YAAM,MAAA;AACJ,aAAKkB,SAASI,QAAQ;aAAI,KAAKJ,SAASI;UAAOO;;AAC/C,aAAKV,OAAOG,QAAQF;MACtB,CAAA;IACF,CAAA;AAGA,SAAKoC,SAASG,OAAOD,GAAG,CAACE,UAAAA;AACvB5D,YAAM,MAAA;AACJ,aAAKmB,OAAOG,QAAQsC;MACtB,CAAA;IACF,CAAA;AAEA,SAAKJ,SAASK,YAAYH,GAAG,CAAC7B,aAAAA;AAC5B,WAAKX,SAASI,QAAQ;WAAI,KAAKJ,SAASI;QAAOO;;IACjD,CAAA;AAEA,SAAK2B,SAASM,iBAAiBJ,GAAG,CAAC,EAAE7B,SAAAA,UAASkC,OAAM,MAAE;AACpD,YAAMC,MAAM,KAAK9C,SAAS+C,KAAI,EAAGC,KAAK,CAACC,MAAMA,EAAEtB,OAAOhB,SAAQgB,EAAE;AAChE,YAAMuB,UAAUJ,KAAKrC,QAAQuC,KAAK,CAACN,WAAUA,OAAMS,SAAS,UAAA;AAC5D,UAAI,CAACD,SAAS;AACZ;MACF;AAEA,YAAMR,QAAQI,KAAKrC,QAAQuC,KACzB,CAACN,WAAwCA,OAAMS,SAAS,cAAcT,OAAMf,OAAOuB,QAAQvB,EAAE;AAE/F,UAAIe,OAAO;AACT,aAAK1C,SAASI,QAAQ,KAAKJ,SAASI,MAAMgB,IAAI,CAAC6B,MAAAA;AAC7C,cAAIA,EAAEtB,OAAOhB,SAAQgB,IAAI;AACvB,mBAAO;cACL,GAAGsB;cACHxC,SAASwC,EAAExC,QAAQW,IAAI,CAACgC,MACtBA,EAAED,SAAS,cAAcC,EAAEzB,OAAOuB,QAAQvB,KAAK;gBAAE,GAAGyB;gBAAGC,eAAeR;cAAO,IAAIO,CAAAA;YAErF;UACF;AACA,iBAAOH;QACT,CAAA;MACF,OAAO;AACL7D,QAAAA,KAAIkE,KAAK,8BAAA,QAAA;;;;;;MACX;IACF,CAAA;AAEA,QAAI;AACF,YAAMhD,WAAW,MAAM,KAAKgC,SAASV,IAAI;QACvC2B,QAAQ,KAAK5D;QACb6D,SAASnB,QAAQmB,WAAW,CAAA;QAC5B1C,WAAW,KAAKjB,cAAc,CAAA;QAC9B4D,qBAAqB,KAAK5D,YAAYuB,IAAI,CAACC,aAAaA,SAASM,EAAE,KAAK,CAAA;QACxEO,OAAO,KAAKtC,UAAU,CAAA;QACtB8D,QAAQ/C;QACRlB,cAAc,KAAKM,SAASN;QAC5BkE,YAAY,KAAK7D;QACjB8D,sBAAsB,KAAK/C;QAC3BgD,mBAAmB;UACjBrE,OAAO,KAAKO,SAASP;QACvB;MACF,CAAA;AAEAJ,MAAAA,KAAI,aAAa;QAAEkB;MAAS,GAAA;;;;;;AAC5B+B,cAAQyB,aAAa,KAAK9D,SAASI,KAAK;IAC1C,SAAS2D,KAAK;AACZ3E,MAAAA,KAAI4E,MAAMD,KAAAA,QAAAA;;;;;;AACV,UAAIA,eAAeE,SAASF,IAAIpD,QAAQuD,SAAS,YAAA,GAAe;AAC9D,aAAK7D,MAAMD,QAAQ,IAAI+D,yBAAyB,yBAAyB;UAAEC,OAAOL;QAAI,CAAA;MACxF,OAAO;AACL,aAAK1D,MAAMD,QAAQ,IAAI6D,MAAM,oBAAoB;UAAEG,OAAOL;QAAI,CAAA;MAChE;IACF,UAAA;AACE,WAAKzB,WAAWpC;IAClB;AAEA,WAAO,KAAKmE,OAAM;EACpB;;;;;EAMA,MAAMC,SAA6B;AACjClF,IAAAA,KAAImF,KAAK,iBAAA,QAAA;;;;;;AACT,SAAKjC,UAAUkC,MAAAA;AACf,WAAO,KAAKH,OAAM;EACpB;EAEA,MAAcA,SAA6B;AACzC,UAAM/D,WAAW,KAAKN,SAASI;AAC/BtB,UAAM,MAAA;AACJ,WAAKkB,SAASI,QAAQ,CAAA;AACtB,WAAKH,OAAOG,QAAQF;IACtB,CAAA;AAEA,WAAOI;EACT;AAwBF;AAGO,IAAM6D,2BAAN,cAAuCF,MAAAA;EAAvC;;AACLQ,gBAAO;;AACT;;;;ACzOA,SAASC,aAAAA,YAAWC,WAAAA,UAASC,YAAAA,iBAAgB;AAE7C,SAASC,sBAAAA,qBAAoBC,4BAAiD;AAC9E,SAASC,gBAAAA,eAAcC,mBAAAA,kBAAiBC,eAAeC,2BAA2B;AAClF,SAAkCC,0BAA0B;AAC5D,SAASC,gBAAAA,qBAAoB;AAC7B,SAASC,OAAAA,YAAW;AACpB,SAASC,iBAAiB;AAC1B,SAASC,UAAAA,SAAQC,kBAA8BC,YAAAA,iBAAgB;AAC/D,SAASC,iBAAAA,sBAAqB;;AAkBvB,IAAMC,mBAAmB,CAAC;EAC/BC;EACAC;EACAC;;EAEAC;EACAC;AAAkB,MACI;;;AACtB,UAAMC,WAAWC,cAAcC,sBAAsBC,QAAQ;AAC7D,UAAMC,cAAcC,iBAAgBC,cAAaC,KAAK;AACtD,UAAMC,sBAAsBH,iBAAgBC,cAAaG,kBAAkB;AAC3E,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAGtC,UAAMC,WAAWC,UAASlB,OAAOmB,QAAOC,KAAKC,WAAAA,CAAAA;AAC7C,UAAM,CAACC,cAAcC,eAAAA,IAAmBC,UAA2B,CAAA,CAAE;AACrEC,IAAAA,WAAU,MAAA;AACRC,MAAAA,KAAI,6BAAA,QAAA;;;;;;AACJC,qBAAe,YAAA;AACb,cAAMC,SAAQ,MAAMC,QAAQC,IAAIb,SAASc,IAAI,CAACC,YAAYC,uBAAuBD,OAAAA,CAAAA,CAAAA;AACjFT,wBAAgBK,OAAMM,KAAI,CAAA;MAC5B,CAAA;IACF,GAAG;MAACjB;KAAS;AAGb,UAAMkB,SAASC,UAAAA;AACf,UAAMC,YAAYnB,UAASlB,OAAOmB,QAAOC,KAAKkB,aAAAA,CAAAA;AAC9C,UAAMC,SAASC,SAAQ,MAAOzC,OAAO0C,iBAAiB1C,IAAAA,IAAQ2C,QAAY;MAAC3C;KAAK;AAChF,UAAM,CAAC6B,OAAOe,UAAAA,IAAcH,SAAQ,MAAA;AAClCd,MAAAA,KAAI,qBAAA,QAAA;;;;;;AACJ,YAAME,SAA0B;WAC3BpB,YAAY0B,KAAI;WAChBZ;WACAe,UACAN,IAAI,CAACa,OAAOC,sBAAsBD,IAAIT,OAAOW,OAAOC,SAAS9B,UAAU+B,MAAMC,OAAO,IAAIjD,OAAOkD,EAAAA,CAAAA,EAC/FC,OAAOC,cAAAA;;AAEZ,YAAMT,cAAa;QAAE3C;QAAOe;QAAUsC,SAASd;QAAQrC;MAAK;AAC5D,aAAO;QAAC0B;QAAOe;;IACjB,GAAG;MAAC5B;MAAUP;MAAaR;MAAOuC;MAAQjB;MAAce;KAAU;AAGlE,UAAMiB,eAAed,SACnB,MACEe,mBAAmB;MACjBC,WAAW5C,oBAAoBmB,IAAI,CAAC0B,eAAe,GAAGA,WAAWC,IAAI;EAAKD,WAAWE,YAAY,EAAE;MACnGxD;IACF,CAAA,GACF;MAACS;MAAqBT;KAAmB;AAI3C,UAAMyD,QACJ3D,UAAU4D,gBAAgB,WACpB5D,UAAU6D,eAAeC,uBACzB9D,UAAU+D,aAAaC;AAI/B,UAAMC,YAAY1B,SAAQ,MAAA;AACxBd,MAAAA,KAAI,yBAAyB;QAAEzB;MAAS,GAAA;;;;;;AACxC,aAAO,IAAIkE,cAAc/D,SAASgE,OAAOxC,OAAOhB,qBAAqB+B,YAAY;QAAEiB;QAAON;MAAa,CAAA;IACzG,GAAG;MAAClD,SAASgE;MAAOxC;MAAOhB;MAAqB+B;MAAYiB;MAAON;KAAa;AAEhF,WAAOY;;;;AACT;;;AC5FA,SAASG,WAAAA,gBAAe;AAGxB,SAASC,sBAAsB;AAC/B,SAASC,UAAUC,gBAAgB;AAI5B,IAAMC,kBAAkB,CAACC,SAAAA;AAC9B,QAAMC,QAAQC,SAASF,IAAAA;AACvB,QAAMG,WAAWC,SAAQ,MAAA;AAEvB,UAAMC,MAAMJ,SAASD,MAAMM,MAAMD;AACjC,WAAOA,MAAME,eAAeN,MAAMO,IAAIH,IAAII,MAAMC,GAAG,EAAC,CAAA,IAAMC;EAC5D,GAAG;IAACV;IAAOD,MAAMM,MAAMD;GAAI;AAE3B,SAAOO,SAAkBT,QAAAA;AAC3B;;;ACjBA,SAASU,aAAAA,YAAWC,WAAAA,UAASC,YAAAA,iBAAgB;;;ACA7C,SAASC,oBAAoB;AAC7B,SAASC,mBAAmB;AAC5B,SAEEC,iBACAC,eACAC,uBACAC,6BACK;AAGP,SAASC,iBAAiB;AAC1B,SAASC,iBAAAA,sBAAqB;AAuBvB,IAAMC,gCAAqD;EAChEC,OAAO;IACL;MACEC,cAAc;MACdC,OAAO;QAAC;;IACV;IACA;MACED,cACE;MACFC,OAAO;QAAC;;IACV;IACA;MACED,cAAc;MACdC,OAAO;QAAC;QAAuB;;IACjC;;AAEJ;AAEO,IAAMC,qBAAqBC,gBAAgBC,OAAM,EAAGC,MAAMP,6BAAAA;;;ACrDjE,SAASQ,sBAAAA,2BAAgD;AACzD,SAASC,sBAAAA,2BAA0B;;;ACDnC,SAASC,WAAW;AAkBpB,IAAMC,eAAiC;EACrCC,MAAM;EACNC,UAAU;EACVC,cAAc;EACdC,UAAU;EACVC,WAAW;AACb;AAEA,IAAMC,8BAAgD;EACpDL,MAAM;EACNM,KAAK;EACLC,WAAW;IACTP,MAAM;IACNQ,MAAM;EACR;AACF;AAkBA,IAAMC,gBAA+B;EACnCC,IAAIC,KAAKC,aAAa;IACpBC,WAAW;IACXL,MAAM;IACNM,aAAa;IACbC,UAAU;IACVC,YAAY;MACV;QACEC,MAAM;QACNC,WAAW;QACXC,eAAepB;MACjB;;EAEJ,CAAA;EAEAW,IAAIC,KAAKC,aAAa;IACpBC,WAAW;IACXL,MAAM;IACNM,aAAa;IACbC,UAAU;IACVC,YAAY;MACV;QACEC,MAAM;QACNC,WAAW;QACXC,eAAepB;MACjB;;EAEJ,CAAA;EAEAW,IAAIC,KAAKC,aAAa;IACpBC,WAAW;IACXL,MAAM;IACNM,aAAa;IACbC,UAAU;IACVC,YAAY;MACV;QACEC,MAAM;QACNC,WAAW;QACXC,eAAed;MACjB;;EAEJ,CAAA;;EAGAK,IAAIC,KAAKC,aAAa;IACpBC,WAAW;IACXL,MAAM;IACNM,aAAa;IACbC,UAAU;IACVC,YAAY;MACV;QACEC,MAAM;QACNC,WAAW;MACb;;EAEJ,CAAA;;;;KAMGE,MAAMC,KAAK;IAAEC,QAAQ;EAAG,GAAG,CAACC,GAAGC,MAChCd,IAAIC,KAAKC,aAAa;IACpBC,WAAW,4BAA4BW,CAAAA;IACvChB,MAAM,QAAQgB,CAAAA;IACdV,aAAa,QAAQU,CAAAA;IACrBT,UAAUU,OAAOC,KAAKC,aAAAA,EAAeC,KAAKC,MAAMD,KAAKE,OAAM,IAAKL,OAAOC,KAAKC,aAAAA,EAAeL,MAAM,CAAA;IACjGN,YAAY;MACV;QACEC,MAAM;QACNC,WAAW;MACb;;EAEJ,CAAA,CAAA;;;;;AC5HJ,SAASa,YAAAA,WAAUC,eAAAA,oBAAuE;;;ACA1F,SAASC,WAAAA,gBAAe;AAExB,SAASC,gBAAAA,eAAcC,mBAAAA,wBAAuB;AAE9C,SAASC,UAAAA,SAAQC,OAAAA,YAAsB;AAOvC,IAAMC,cAAc,CAACC,OAAeC,UAAkBA,MAAMC,YAAW,EAAGC,WAAWH,MAAME,YAAW,CAAA;AAE/F,IAAME,qBAAqB,CAACC,UAAAA;AACjC,QAAMC,sBAAsBC,iBAAgBC,cAAaC,kBAAkB;AAE3E,SAAOC,SAAqC,MAAA;AAC1C,QAAI,CAACL,OAAO;AACV,aAAOM;IACT;AAEA,WAAO;MACLX,OAAO,OAAO,EAAEA,MAAK,MAAE;AACrB,cAAMY,kBAAkBN,oBAAoBO,IAAI,CAACC,aAAaA,SAASC,MAAM;AAC7E,cAAM,EAAEC,QAAO,IAAK,MAAMX,MAAMY,GAC7BjB,MAAMkB,QAAOC,GAAE,GAAIP,gBAAgBC,IAAI,CAACE,WAAWG,QAAOE,KAAKL,MAAAA,CAAAA,CAAAA,CAAAA,EAC/DM,IAAG;AAEN,eACEL,QAMGM,OAAO,CAACC,WAAWxB,YAAYC,OAAOwB,KAAIC,SAASF,MAAAA,KAAkB,EAAA,CAAA,EAErED,OAAO,CAACC,WAAW,CAAC,CAACC,KAAIE,OAAOH,MAAAA,CAAAA,EAChCV,IAAI,CAACU,YAAY;UAChBI,KAAKH,KAAIE,OAAOH,MAAAA,EAAgBK,SAAQ;UACxC3B,OAAOuB,KAAIC,SAASF,MAAAA,KAAkB;QACxC,EAAA;MAEN;MACAM,iBAAiB,OAAO,EAAEF,IAAG,MAAE;AAC7B,cAAMJ,SAAS,MAAMlB,MAAMY,GAAGjB,MAAMkB,QAAOY,IAAIH,GAAAA,CAAAA,EAAMI,MAAK;AAC1D,eAAO;UAAEJ;UAAK1B,OAAOuB,KAAIC,SAASF,MAAAA,KAAW;QAAG;MAClD;IACF;EACF,GAAG;IAAClB;IAAOC;GAAoB;AACjC;;;;AT5BO,IAAM0B,kBAA6D,CAAC,EACzEC,YACAC,MACAC,UACAC,MACAC,oBACAC,cACA,GAAGC,MAAAA,MACJ;;;AACC,UAAMC,QAAQC,UAASP,IAAAA;AACvB,UAAMQ,kBAAkBC,mBAAmBH,KAAAA;AAC3C,UAAMI,YAAYC,iBAAiB;MAAEX;MAAMM;MAAOL;MAAUC;MAAMC;IAAmB,CAAA;AACrF,UAAMS,eAAeC,gBAAgBb,IAAAA;AACrC,UAAM,EAAEc,iBAAiBC,SAAQ,IAAKC,qBAAAA;AAEtC,UAAMC,WAAW;SAAKL,cAAcM,WAAW,CAAA;SAAQR,UAAUO,SAASE;;AAG1EC,IAAAA,WAAU,MAAA;AACR,UAAI,CAACV,UAAUW,UAAUF,SAASP,cAAcM,SAAS;AACvD,cAAMI,UAAUV,aAAaM,QAAQN,aAAaM,QAAQK,SAAS,CAAA;AACnE,YAAIjB,SAASN,QAAQsB,WAAWP,YAAYZ,oBAAoB;AAC9D,eAAKY,SACHS,aAAaC,qBAAqBC,eAAe;YAC/CC,QAAQxB;YACRyB,QAAQC,IAAIC,QAAQ,IAAIC,IAAIA,IAAIC,KAAKC,OAAO;iBAAIjC,KAAKkC,MAAMC,IAAIC;cAAOd,QAAQe;aAAG,CAAA;YACjFC,OAAO;UACT,CAAA,CAAA;QAEJ;MACF;IACF,GAAG;MAAC1B;MAAcT;MAAoBO,UAAUW,UAAUF;KAAM;AAEhE,UAAMoB,eAAeC,aACnB,CAACC,SAAAA;AAEC,UAAI/B,UAAUW,UAAUF,OAAO;AAC7BuB,QAAAA,KAAIC,KAAK,sCAAA,QAAA;;;;;;AACT,eAAO;MACT;AAEAvC,qBAAe,IAAA;AAEfwC,MAAAA,WAAUhC,cAAAA,QAAAA;;;;;;;;;AACV,WAAKF,UAAUmC,QAAQJ,MAAM;QAC3BK,SAASlC,aAAaM;QACtB6B,YAAY,CAAC9B,cAAAA;AACX,eAAKL,aAAaoC,OAAO/B,SAAAA;QAC3B;MACF,CAAA;AAEA,aAAO;IACT,GACA;MAACP;MAAWE;MAAcR;KAAa;AAGzC,UAAM6C,eAAeT,aAAY,MAAA;AAC/B,UAAI9B,UAAUW,UAAUF,OAAO;AAC7B,aAAKT,UAAUwC,OAAM;MACvB;IACF,GAAG;MAACxC;KAAU;AAEd,WACE,gBAAAyC,OAAA,cAACC,QAAAA;MACCrD;MACAO;MACAW;MACAoC,YAAY3C,UAAUW,UAAUF;MAChCmC,OAAO5C,UAAU4C,MAAMnC;MACvBoC,OAAO7C,UAAU6C;MACjB/C;MACAgD,UAAUjB;MACVkB,UAAUR;MACVS,UAAUnB;MACVnC;MACC,GAAGC;;;;;AAGV;",
|
|
6
|
-
"names": ["Prec", "React", "forwardRef", "useImperativeHandle", "useThemeContext", "createBasicExtensions", "createThemeExtensions", "keymap", "useTextEditor", "mx", "isNonNullable", "Prec", "EditorView", "Decoration", "ViewPlugin", "keymap", "WidgetType", "autocompleteExtension", "onSubmit", "onSuggest", "onCancel", "suggest", "ViewPlugin", "fromClass", "view", "_currentSuggestion", "_decorations", "computeDecorations", "update", "docChanged", "selectionSet", "text", "state", "doc", "toString", "suggestions", "length", "Decoration", "none", "suffix", "slice", "set", "widget", "InlineSuggestionWidget", "side", "range", "completeSuggestion", "dispatch", "changes", "from", "insert", "selection", "anchor", "decorations", "v", "EditorView", "theme", "opacity", "Prec", "highest", "keymap", "of", "key", "preventDefault", "run", "plugin", "main", "head", "trim", "reset", "to", "WidgetType", "toDOM", "span", "document", "createElement", "textContent", "className", "eq", "other", "autocompletion", "completionKeymap", "RangeSet", "Decoration", "EditorView", "keymap", "ViewPlugin", "WidgetType", "Mutex", "promptReferences", "provider", "debug", "triggerCharacter", "length", "Error", "decorationField", "ViewPlugin", "fromClass", "ReferenceView", "view", "_mutex", "Mutex", "decorations", "Decoration", "set", "queueMicrotask", "guard", "acquire", "_computeDecorations", "release", "update", "docChanged", "text", "state", "doc", "toString", "references", "matchAll", "RegExp", "match", "reference", "uri", "slice", "data", "resolveReference", "push", "replace", "widget", "ReferenceWidget", "range", "index", "v", "provide", "plugin", "EditorView", "atomicRanges", "of", "RangeSet", "empty", "theme", "borderRadius", "borderWidth", "marginRight", "marginLeft", "autocompletion", "activateOnTyping", "override", "context", "matchBefore", "to", "from", "query", "getReferences", "filter", "options", "map", "label", "apply", "closeOnBlur", "tooltipClass", "aboveCursor", "keymap", "completionKeymap", "WidgetType", "toDOM", "span", "document", "createElement", "textContent", "className", "eq", "other", "ignoreEvent", "Prompt", "forwardRef", "classNames", "extensions", "references", "autoFocus", "lineWrapping", "placeholder", "onSubmit", "onSuggest", "onCancel", "onOpenChange", "themeMode", "useThemeContext", "parentRef", "view", "useTextEditor", "debug", "autocompleteExtension", "createBasicExtensions", "bracketMatching", "createThemeExtensions", "promptReferences", "provider", "Prec", "highest", "keymap", "of", "key", "preventDefault", "run", "filter", "isNonNullable", "useImperativeHandle", "focus", "setText", "text", "dispatch", "changes", "from", "to", "state", "doc", "length", "insert", "selection", "anchor", "head", "div", "ref", "className", "mx", "React", "forwardRef", "useState", "useVoiceInput", "Icon", "IconButton", "Tooltip", "useForwardedRef", "useTranslation", "Spinner", "errorText", "mx", "PromptBar", "forwardRef", "classNames", "placeholder", "processing", "error", "microphone", "references", "onCancel", "props", "forwardedRef", "t", "useTranslation", "ASSISTANT_PLUGIN", "promptRef", "useForwardedRef", "active", "setActive", "useState", "recording", "useVoiceInput", "onUpdate", "text", "current", "setText", "focus", "React", "div", "className", "mx", "Tooltip", "Trigger", "content", "message", "delayDuration", "Icon", "icon", "errorText", "size", "Spinner", "Prompt", "ref", "autoFocus", "lineWrapping", "IconButton", "variant", "iconOnly", "label", "onClick", "noTooltip", "onMouseDown", "onMouseUp", "onTouchStart", "onTouchEnd", "React", "useState", "useEffect", "Fragment", "parseToolName", "Capabilities", "useCapabilities", "FunctionType", "log", "Filter", "useQuery", "mx", "createTool", "ToolResult", "Type", "getInvocationUrl", "getUserFunctionUrlInMetadata", "log", "getMeta", "convertFunctionToTool", "fn", "edgeUrl", "spaceId", "description", "inputSchema", "undefined", "existingFunctionUrl", "url", "name", "schema", "toEffectSchema", "execute", "input", "info", "response", "fetch", "method", "headers", "body", "JSON", "stringify", "Success", "text", "Schema", "jsonpointer", "ToolResult", "createRawTool", "Type", "normalizeSchema", "invariant", "log", "deepMapValues", "createToolsFromService", "service", "interfaces", "length", "kind", "iface", "schemaUrl", "createToolsFromApi", "authorization", "url", "options", "res", "fetch", "spec", "json", "tools", "path", "pathItem", "Object", "entries", "paths", "methods", "method", "m", "methodItem", "parametersResolved", "parameters", "map", "parameter", "resolved", "resolveJsonSchema", "inputSchema", "type", "properties", "endpointParameters", "placement", "in", "name", "push", "schema", "_in", "required", "validateSync", "JsonSchema", "description", "summary", "warn", "endpoint", "document", "getToolName", "instructions", "execute", "input", "response", "callApiEndpoint", "Success", "operationId", "toLowerCase", "replaceAll", "MAX_TOOL_NAME_LENGTH", "lengthBefore", "word", "GENERIC_WORDS", "includes", "replace", "lengthAfter", "slice", "info", "getEndpointUrl", "request", "headers", "query", "URLSearchParams", "body", "undefined", "example", "default", "encodeURIComponent", "value", "effectSchema", "toEffectSchema", "Error", "set", "Authorization", "resolveAuthorization", "key", "size", "toString", "JSON", "stringify", "ok", "status", "statusText", "contentType", "get", "text", "responseBody", "error", "parse", "message", "isV3_1", "servers", "schemes", "host", "basePath", "tokenUrl", "grantType", "clientId", "clientSecret", "data", "access_token", "base", "recurse", "$ref", "startsWith", "ref", "openapi", "Toolbox", "classNames", "artifacts", "functions", "services", "striped", "React", "div", "className", "mx", "length", "Section", "title", "items", "map", "name", "description", "tools", "subitems", "parseToolName", "service", "serviceId", "stripeClassNames", "gridClassNames", "subGridClassNames", "h1", "i", "Fragment", "key", "ToolboxContainer", "space", "artifactDefinitions", "useCapabilities", "Capabilities", "ArtifactDefinition", "useQuery", "Filter", "type", "ServiceType", "serviceTools", "setServiceTools", "useState", "useEffect", "log", "queueMicrotask", "Promise", "all", "createToolsFromService", "FunctionType", "React", "useCallback", "useMemo", "useRef", "useIdentity", "ScrollContainer", "mx", "keyToFallback", "React", "Surface", "invariant", "Button", "Icon", "IconButton", "MarkdownViewer", "ToggleContainer", "NativeToggleContainer", "Json", "mx", "safeParseJson", "React", "useEffect", "useMemo", "useRef", "useState", "log", "NumericTabs", "StatusRoll", "ToggleContainer", "Json", "isNonNullable", "isNotFalsy", "isToolMessage", "message", "content", "some", "block", "type", "getToolName", "tool", "namespace", "function", "name", "split", "pop", "getToolCaption", "status", "caption", "ToolBlock", "classNames", "tools", "request", "blocks", "filter", "items", "map", "pending", "id", "info", "currentStatus", "find", "title", "warn", "undefined", "ToolContainer", "tabsRef", "selected", "setSelected", "open", "setOpen", "current", "focus", "handleSelect", "index", "lines", "item", "key", "duration", "autoAdvance", "onChangeOpen", "div", "className", "ref", "length", "onSelect", "data", "panelClassNames", "userClassNames", "ToggleContainer", "props", "React", "NativeToggleContainer", "classNames", "mx", "MessageContainer", "children", "user", "div", "role", "className", "ThreadMessage", "space", "message", "tools", "onPrompt", "onAddToGraph", "content", "isToolMessage", "ToolBlock", "map", "block", "idx", "type", "text", "replaceAll", "length", "Component", "components", "default", "key", "invariant", "title", "disposition", "titles", "undefined", "MarkdownViewer", "defaultOpen", "systemDispositions", "includes", "pending", "icon", "Icon", "size", "ToolboxContainer", "safeParseJson", "json", "IconButton", "label", "onClick", "options", "option", "Button", "Surface", "data", "subject", "JSON", "parse", "limit", "fallback", "Json", "name", "messageReducer", "current", "messages", "message", "i", "block", "content", "type", "push", "id", "join", "role", "undefined", "Thread", "classNames", "space", "messages", "collapse", "transcription", "processing", "error", "onSubmit", "onCancel", "onOpenChange", "contextProvider", "props", "scroller", "useRef", "identity", "useIdentity", "fallbackValue", "keyToFallback", "identityKey", "userHue", "profile", "data", "hue", "handleSubmit", "useCallback", "value", "current", "scrollToBottom", "filteredMessages", "useMemo", "reduce", "messageReducer", "references", "undefined", "getReferences", "query", "resolveReference", "uri", "resolveMetadata", "React", "div", "role", "className", "mx", "ScrollContainer", "ref", "fade", "length", "style", "map", "message", "ThreadMessage", "key", "id", "PromptBar", "microphone", "React", "useCallback", "useEffect", "CollaborationActions", "createIntent", "useIntentDispatcher", "DXN", "Ref", "invariant", "log", "getSpace", "batch", "computed", "signal", "DEFAULT_EDGE_MODEL", "AISession", "invariant", "log", "Filter", "getVersion", "defaultOptions", "model", "systemPrompt", "ChatProcessor", "_ai", "_tools", "_artifacts", "_extensions", "_options", "_pending", "_block", "undefined", "streaming", "value", "error", "messages", "current", "pop", "content", "rest", "message", "push", "_artifactDiffResolver", "artifacts", "space", "Map", "versions", "Promise", "all", "map", "artifact", "objects", "object", "db", "query", "ids", "id", "run", "set", "version", "diff", "JSON", "stringify", "tools", "setTools", "request", "options", "_session", "operationModel", "on", "update", "block", "userMessage", "toolStatusReport", "status", "msg", "peek", "find", "m", "toolUse", "type", "b", "currentStatus", "warn", "client", "history", "requiredArtifactIds", "prompt", "extensions", "artifactDiffResolver", "generationOptions", "onComplete", "err", "catch", "Error", "includes", "AiServiceOverloadedError", "cause", "_reset", "cancel", "info", "abort", "code", "useEffect", "useMemo", "useState", "DEFAULT_EDGE_MODEL", "DEFAULT_OLLAMA_MODEL", "Capabilities", "useCapabilities", "useCapability", "useIntentDispatcher", "createSystemPrompt", "FunctionType", "log", "useConfig", "Filter", "fullyQualifiedId", "useQuery", "isNonNullable", "useChatProcessor", "chat", "space", "settings", "part", "associatedArtifact", "aiClient", "useCapability", "AssistantCapabilities", "AiClient", "globalTools", "useCapabilities", "Capabilities", "Tools", "artifactDefinitions", "ArtifactDefinition", "dispatchPromise", "dispatch", "useIntentDispatcher", "services", "useQuery", "Filter", "type", "ServiceType", "serviceTools", "setServiceTools", "useState", "useEffect", "log", "queueMicrotask", "tools", "Promise", "all", "map", "service", "createToolsFromService", "flat", "config", "useConfig", "functions", "FunctionType", "chatId", "useMemo", "fullyQualifiedId", "undefined", "extensions", "fn", "convertFunctionToTool", "values", "runtime", "edge", "url", "id", "filter", "isNonNullable", "pivotId", "systemPrompt", "createSystemPrompt", "artifacts", "definition", "name", "instructions", "model", "llmProvider", "ollamaModel", "DEFAULT_OLLAMA_MODEL", "edgeModel", "DEFAULT_EDGE_MODEL", "processor", "ChatProcessor", "value", "useMemo", "createQueueDXN", "getSpace", "useQueue", "useMessageQueue", "chat", "space", "getSpace", "queueDxn", "useMemo", "dxn", "queue", "createQueueDXN", "id", "parts", "at", "undefined", "useQueue", "useEffect", "useMemo", "useState", "ToolRegistry", "EXA_API_KEY", "BlueprintParser", "createExaTool", "createGraphWriterTool", "createLocalSearchTool", "DataTypes", "isNonNullable", "RESEARCH_BLUEPRINT_DEFINITION", "steps", "instructions", "tools", "RESEARCH_BLUEPRINT", "BlueprintParser", "create", "parse", "DEFAULT_EDGE_MODEL", "createSystemPrompt", "Obj", "AMADEUS_AUTH", "type", "clientId", "clientSecret", "tokenUrl", "grantType", "VISUAL_CROSSING_CREDENTIALS", "key", "placement", "name", "TEST_SERVICES", "Obj", "make", "ServiceType", "serviceId", "description", "category", "interfaces", "kind", "schemaUrl", "authorization", "Array", "from", "length", "_", "i", "Object", "keys", "categoryIcons", "Math", "floor", "random", "useState", "useCallback", "useMemo", "Capabilities", "useCapabilities", "Filter", "Obj", "stringMatch", "query", "label", "toLowerCase", "startsWith", "useContextProvider", "space", "artifactDefinitions", "useCapabilities", "Capabilities", "ArtifactDefinition", "useMemo", "undefined", "artifactSchemas", "map", "artifact", "schema", "objects", "db", "Filter", "or", "type", "run", "filter", "object", "Obj", "getLabel", "getDXN", "uri", "toString", "resolveMetadata", "ids", "first", "ThreadContainer", "classNames", "chat", "settings", "part", "associatedArtifact", "onOpenChange", "props", "space", "getSpace", "contextProvider", "useContextProvider", "processor", "useChatProcessor", "messageQueue", "useMessageQueue", "dispatchPromise", "dispatch", "useIntentDispatcher", "messages", "objects", "value", "useEffect", "streaming", "message", "length", "createIntent", "CollaborationActions", "InsertContent", "target", "object", "Ref", "fromDXN", "DXN", "kind", "QUEUE", "queue", "dxn", "parts", "id", "label", "handleSubmit", "useCallback", "text", "log", "warn", "invariant", "request", "history", "onComplete", "append", "handleCancel", "cancel", "React", "Thread", "processing", "error", "tools", "onSubmit", "onCancel", "onPrompt"]
|
|
7
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ASSISTANT_PLUGIN
|
|
3
|
-
} from "./chunk-XOZ7YMO3.mjs";
|
|
4
|
-
|
|
5
|
-
// packages/plugins/plugin-assistant/src/components/TemplateEditor/TemplateEditor.tsx
|
|
6
|
-
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
7
|
-
import { HighlightStyle, LanguageSupport, syntaxHighlighting } from "@codemirror/language";
|
|
8
|
-
import { styleTags, tags } from "@lezer/highlight";
|
|
9
|
-
import { handlebarsLanguage } from "@xiechao/codemirror-lang-handlebars";
|
|
10
|
-
import React from "react";
|
|
11
|
-
import { createDocAccessor } from "@dxos/react-client/echo";
|
|
12
|
-
import { useThemeContext, useTranslation } from "@dxos/react-ui";
|
|
13
|
-
import { createBasicExtensions, createDataExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
|
|
14
|
-
import { mx } from "@dxos/react-ui-theme";
|
|
15
|
-
handlebarsLanguage.configure({
|
|
16
|
-
props: [
|
|
17
|
-
styleTags({
|
|
18
|
-
"---": tags.lineComment
|
|
19
|
-
})
|
|
20
|
-
]
|
|
21
|
-
});
|
|
22
|
-
var TemplateEditor = ({ classNames, template }) => {
|
|
23
|
-
var _effect = _useSignals();
|
|
24
|
-
try {
|
|
25
|
-
const { t } = useTranslation(ASSISTANT_PLUGIN);
|
|
26
|
-
const { themeMode } = useThemeContext();
|
|
27
|
-
const { parentRef } = useTextEditor(() => ({
|
|
28
|
-
initialValue: template.source,
|
|
29
|
-
extensions: [
|
|
30
|
-
createDataExtensions({
|
|
31
|
-
id: template.id,
|
|
32
|
-
text: template.source !== void 0 ? createDocAccessor(template, [
|
|
33
|
-
"template"
|
|
34
|
-
]) : void 0
|
|
35
|
-
}),
|
|
36
|
-
createBasicExtensions({
|
|
37
|
-
bracketMatching: false,
|
|
38
|
-
lineWrapping: true,
|
|
39
|
-
placeholder: t("template placeholder")
|
|
40
|
-
}),
|
|
41
|
-
createThemeExtensions({
|
|
42
|
-
themeMode,
|
|
43
|
-
slots: {
|
|
44
|
-
content: {
|
|
45
|
-
className: "!p-3"
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}),
|
|
49
|
-
// https://github.com/xiechao/lang-handlebars
|
|
50
|
-
new LanguageSupport(handlebarsLanguage, syntaxHighlighting(handlebarsHighlightStyle))
|
|
51
|
-
]
|
|
52
|
-
}), [
|
|
53
|
-
themeMode,
|
|
54
|
-
prompt
|
|
55
|
-
]);
|
|
56
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
57
|
-
ref: parentRef,
|
|
58
|
-
className: mx(classNames)
|
|
59
|
-
});
|
|
60
|
-
} finally {
|
|
61
|
-
_effect.f();
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
var handlebarsHighlightStyle = HighlightStyle.define([
|
|
65
|
-
{
|
|
66
|
-
tag: tags.tagName,
|
|
67
|
-
class: "text-redText"
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
tag: tags.variableName,
|
|
71
|
-
class: "text-blueText"
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
tag: tags.keyword,
|
|
75
|
-
class: "text-greenText"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
tag: tags.comment,
|
|
79
|
-
class: "text-subdued"
|
|
80
|
-
}
|
|
81
|
-
]);
|
|
82
|
-
|
|
83
|
-
export {
|
|
84
|
-
TemplateEditor,
|
|
85
|
-
handlebarsHighlightStyle
|
|
86
|
-
};
|
|
87
|
-
//# sourceMappingURL=chunk-JQFUME3B.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/TemplateEditor/TemplateEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { HighlightStyle, LanguageSupport, syntaxHighlighting } from '@codemirror/language';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { handlebarsLanguage } from '@xiechao/codemirror-lang-handlebars';\nimport React from 'react';\n\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { useThemeContext, useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ASSISTANT_PLUGIN } from '../../meta';\nimport { type TemplateType } from '../../types';\n\nhandlebarsLanguage.configure({\n props: [\n styleTags({\n '---': tags.lineComment,\n }),\n ],\n});\n\nexport type TemplateEditorProps = ThemedClassName<{\n template: TemplateType;\n}>;\n\nexport const TemplateEditor = ({ classNames, template }: TemplateEditorProps) => {\n const { t } = useTranslation(ASSISTANT_PLUGIN);\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor(\n () => ({\n initialValue: template.source,\n extensions: [\n createDataExtensions({\n id: template.id,\n text: template.source !== undefined ? createDocAccessor(template, ['template']) : undefined,\n }),\n createBasicExtensions({\n bracketMatching: false,\n lineWrapping: true,\n placeholder: t('template placeholder'),\n }),\n createThemeExtensions({\n themeMode,\n slots: {\n content: { className: '!p-3' },\n },\n }),\n\n // https://github.com/xiechao/lang-handlebars\n new LanguageSupport(handlebarsLanguage, syntaxHighlighting(handlebarsHighlightStyle)),\n ],\n }),\n [themeMode, prompt],\n );\n\n return <div ref={parentRef} className={mx(classNames)} />;\n};\n\n/**\n * https://github.com/xiechao/lang-handlebars/blob/direct/src/highlight.js\n */\nexport const handlebarsHighlightStyle = HighlightStyle.define([\n { tag: tags.tagName, class: 'text-redText' }, // Braces.\n { tag: tags.variableName, class: 'text-blueText' },\n { tag: tags.keyword, class: 'text-greenText' },\n { tag: tags.comment, class: 'text-subdued' },\n]);\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,SAASA,gBAAgBC,iBAAiBC,0BAA0B;AACpE,SAASC,WAAWC,YAAY;AAChC,SAASC,0BAA0B;AACnC,OAAOC,WAAW;AAElB,SAASC,yBAAyB;AAClC,SAASC,iBAAiBC,sBAA4C;AACtE,SACEC,uBACAC,sBACAC,uBACAC,qBACK;AACP,SAASC,UAAU;AAKnBC,mBAAmBC,UAAU;EAC3BC,OAAO;IACLC,UAAU;MACR,OAAOC,KAAKC;IACd,CAAA;;AAEJ,CAAA;AAMO,IAAMC,iBAAiB,CAAC,EAAEC,YAAYC,SAAQ,MAAuB;;;AAC1E,UAAM,EAAEC,EAAC,IAAKC,eAAeC,gBAAAA;AAC7B,UAAM,EAAEC,UAAS,IAAKC,gBAAAA;AACtB,UAAM,EAAEC,UAAS,IAAKC,cACpB,OAAO;MACLC,cAAcR,SAASS;MACvBC,YAAY;QACVC,qBAAqB;UACnBC,IAAIZ,SAASY;UACbC,MAAMb,SAASS,WAAWK,SAAYC,kBAAkBf,UAAU;YAAC;WAAW,IAAIc;QACpF,CAAA;QACAE,sBAAsB;UACpBC,iBAAiB;UACjBC,cAAc;UACdC,aAAalB,EAAE,sBAAA;QACjB,CAAA;QACAmB,sBAAsB;UACpBhB;UACAiB,OAAO;YACLC,SAAS;cAAEC,WAAW;YAAO;UAC/B;QACF,CAAA;;QAGA,IAAIC,gBAAgBhC,oBAAoBiC,mBAAmBC,wBAAAA,CAAAA;;IAE/D,IACA;MAACtB;MAAWuB;KAAO;AAGrB,WAAO,sBAAA,cAACC,OAAAA;MAAIC,KAAKvB;MAAWiB,WAAWO,GAAG/B,UAAAA;;;;;AAC5C;AAKO,IAAM2B,2BAA2BK,eAAeC,OAAO;EAC5D;IAAEC,KAAKrC,KAAKsC;IAASC,OAAO;EAAe;EAC3C;IAAEF,KAAKrC,KAAKwC;IAAcD,OAAO;EAAgB;EACjD;IAAEF,KAAKrC,KAAKyC;IAASF,OAAO;EAAiB;EAC7C;IAAEF,KAAKrC,KAAK0C;IAASH,OAAO;EAAe;CAC5C;",
|
|
6
|
-
"names": ["HighlightStyle", "LanguageSupport", "syntaxHighlighting", "styleTags", "tags", "handlebarsLanguage", "React", "createDocAccessor", "useThemeContext", "useTranslation", "createBasicExtensions", "createDataExtensions", "createThemeExtensions", "useTextEditor", "mx", "handlebarsLanguage", "configure", "props", "styleTags", "tags", "lineComment", "TemplateEditor", "classNames", "template", "t", "useTranslation", "ASSISTANT_PLUGIN", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "initialValue", "source", "extensions", "createDataExtensions", "id", "text", "undefined", "createDocAccessor", "createBasicExtensions", "bracketMatching", "lineWrapping", "placeholder", "createThemeExtensions", "slots", "content", "className", "LanguageSupport", "syntaxHighlighting", "handlebarsHighlightStyle", "prompt", "div", "ref", "mx", "HighlightStyle", "define", "tag", "tagName", "class", "variableName", "keyword", "comment"]
|
|
7
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
// packages/plugins/plugin-assistant/src/capabilities/index.ts
|
|
2
|
-
import { lazy } from "@dxos/app-framework";
|
|
3
|
-
var AiClient = lazy(() => import("./ai-client-MK2ZZII2.mjs"));
|
|
4
|
-
var AppGraphBuilder = lazy(() => import("./app-graph-builder-E4H5DCOJ.mjs"));
|
|
5
|
-
var IntentResolver = lazy(() => import("./intent-resolver-3UICTGPM.mjs"));
|
|
6
|
-
var ReactSurface = lazy(() => import("./react-surface-LXCNUSZN.mjs"));
|
|
7
|
-
var Settings = lazy(() => import("./settings-XRHXVWGB.mjs"));
|
|
8
|
-
|
|
9
|
-
export {
|
|
10
|
-
AiClient,
|
|
11
|
-
AppGraphBuilder,
|
|
12
|
-
IntentResolver,
|
|
13
|
-
ReactSurface,
|
|
14
|
-
Settings
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=chunk-MEGMOFJB.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AiClient = lazy(() => import('./ai-client'));\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const Settings = lazy(() => import('./settings'));\n\nexport * from './capabilities';\n"],
|
|
5
|
-
"mappings": ";AAIA,SAASA,YAAY;AAEd,IAAMC,WAAWC,KAAK,MAAM,OAAO,0BAAA,CAAA;AACnC,IAAMC,kBAAkBD,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAME,iBAAiBF,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMG,eAAeH,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMI,WAAWJ,KAAK,MAAM,OAAO,yBAAA,CAAA;",
|
|
6
|
-
"names": ["lazy", "AiClient", "lazy", "AppGraphBuilder", "IntentResolver", "ReactSurface", "Settings"]
|
|
7
|
-
}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
// packages/plugins/plugin-assistant/src/components/AmbientDialog/AmbientDialog.tsx
|
|
2
|
-
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
3
|
-
import React, { useCallback, useEffect, useState } from "react";
|
|
4
|
-
import { Dialog, Icon, IconButton } from "@dxos/react-ui";
|
|
5
|
-
import { resizeAttributes, ResizeHandle, sizeStyle } from "@dxos/react-ui-dnd";
|
|
6
|
-
import { mx } from "@dxos/react-ui-theme";
|
|
7
|
-
var preventDefault = (event) => event.preventDefault();
|
|
8
|
-
var minSize = 5;
|
|
9
|
-
var AmbientDialog = ({ children, open: controlledOpen, title, resizeable = true, onOpenChange, onEscape }) => {
|
|
10
|
-
var _effect = _useSignals();
|
|
11
|
-
try {
|
|
12
|
-
const [resizeKey, setReizeKey] = useState(0);
|
|
13
|
-
const [size, setSize] = useState("min-content");
|
|
14
|
-
const [open, setOpen] = useState(controlledOpen);
|
|
15
|
-
useEffect(() => {
|
|
16
|
-
setOpen(controlledOpen);
|
|
17
|
-
}, [
|
|
18
|
-
controlledOpen
|
|
19
|
-
]);
|
|
20
|
-
useEffect(() => {
|
|
21
|
-
setSize(open ? "min-content" : minSize);
|
|
22
|
-
setReizeKey((key) => key + 1);
|
|
23
|
-
}, [
|
|
24
|
-
open
|
|
25
|
-
]);
|
|
26
|
-
const handleToggle = useCallback(() => {
|
|
27
|
-
setOpen((open2) => {
|
|
28
|
-
onOpenChange?.(!open2);
|
|
29
|
-
return !open2;
|
|
30
|
-
});
|
|
31
|
-
}, []);
|
|
32
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
33
|
-
role: "none",
|
|
34
|
-
className: "dx-dialog__overlay bg-transparent pointer-events-none",
|
|
35
|
-
"data-block-align": "end"
|
|
36
|
-
}, /* @__PURE__ */ React.createElement(Dialog.Content, {
|
|
37
|
-
classNames: 'relative box-content p-0 md:is-[35rem] md:max-is-none overflow-hidden pointer-events-auto transition-[block-size] ease-in-out duration-0 [&:not([data-dx-resizing="true"])]:duration-200',
|
|
38
|
-
inOverlayLayout: true,
|
|
39
|
-
...resizeAttributes,
|
|
40
|
-
style: {
|
|
41
|
-
...resizeable ? sizeStyle(size, "vertical", true) : {},
|
|
42
|
-
maxBlockSize: "calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 9rem)"
|
|
43
|
-
},
|
|
44
|
-
onEscapeKeyDown: onEscape,
|
|
45
|
-
onInteractOutside: preventDefault
|
|
46
|
-
}, resizeable && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ResizeHandle, {
|
|
47
|
-
key: resizeKey,
|
|
48
|
-
side: "block-start",
|
|
49
|
-
defaultSize: "min-content",
|
|
50
|
-
minSize,
|
|
51
|
-
fallbackSize: minSize,
|
|
52
|
-
iconPosition: "center",
|
|
53
|
-
onSizeChange: setSize
|
|
54
|
-
}), /* @__PURE__ */ React.createElement(DialogHeader, {
|
|
55
|
-
open,
|
|
56
|
-
title,
|
|
57
|
-
onToggle: handleToggle
|
|
58
|
-
})) || /* @__PURE__ */ React.createElement(Dialog.Title, {
|
|
59
|
-
srOnly: true
|
|
60
|
-
}), children));
|
|
61
|
-
} finally {
|
|
62
|
-
_effect.f();
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
var DialogHeader = ({ open, title, onToggle }) => {
|
|
66
|
-
var _effect = _useSignals();
|
|
67
|
-
try {
|
|
68
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
69
|
-
className: "flex shrink-0 w-full grid grid-cols-[var(--rail-action)_1fr_var(--rail-action)] items-center overflow-hidden"
|
|
70
|
-
}, /* @__PURE__ */ React.createElement("div", {
|
|
71
|
-
className: "flex w-[--rail-action] h-[--rail-action] items-center justify-center"
|
|
72
|
-
}, /* @__PURE__ */ React.createElement(Dialog.Close, null, /* @__PURE__ */ React.createElement(Icon, {
|
|
73
|
-
icon: "ph--x--regular"
|
|
74
|
-
}))), /* @__PURE__ */ React.createElement("div", {
|
|
75
|
-
className: "grow"
|
|
76
|
-
}, /* @__PURE__ */ React.createElement(Dialog.Title, {
|
|
77
|
-
classNames: "flex justify-center text-xs text-subdued"
|
|
78
|
-
}, title)), /* @__PURE__ */ React.createElement("div", {
|
|
79
|
-
className: "flex w-[--rail-action] h-[--rail-action] items-center justify-center"
|
|
80
|
-
}, /* @__PURE__ */ React.createElement(IconButton, {
|
|
81
|
-
variant: "ghost",
|
|
82
|
-
icon: "ph--caret-up--regular",
|
|
83
|
-
classNames: mx("[&>svg]:transition [&>svg]:duration-200", open && "[&>svg]:rotate-180"),
|
|
84
|
-
iconOnly: true,
|
|
85
|
-
label: "Shrink",
|
|
86
|
-
onClick: onToggle
|
|
87
|
-
})));
|
|
88
|
-
} finally {
|
|
89
|
-
_effect.f();
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
export {
|
|
94
|
-
AmbientDialog
|
|
95
|
-
};
|
|
96
|
-
//# sourceMappingURL=chunk-Q6UZ4F3H.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/AmbientDialog/AmbientDialog.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren, useCallback, useEffect, useState } from 'react';\n\nimport { Dialog, Icon, IconButton } from '@dxos/react-ui';\nimport { resizeAttributes, ResizeHandle, type Size, sizeStyle } from '@dxos/react-ui-dnd';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst preventDefault = (event: Event) => event.preventDefault();\n\nconst minSize = 5;\n\nexport type AmbientDialogProps = PropsWithChildren<{\n open?: boolean;\n title?: string;\n resizeable?: boolean;\n onOpenChange?: (open: boolean) => void;\n onEscape?: () => void;\n}>;\n\nexport const AmbientDialog = ({\n children,\n open: controlledOpen,\n title,\n resizeable = true,\n onOpenChange,\n onEscape,\n}: AmbientDialogProps) => {\n const [resizeKey, setReizeKey] = useState(0);\n const [size, setSize] = useState<Size>('min-content');\n const [open, setOpen] = useState(controlledOpen);\n\n // Update controlled value.\n useEffect(() => {\n setOpen(controlledOpen);\n }, [controlledOpen]);\n\n // Update size and key.\n useEffect(() => {\n setSize(open ? 'min-content' : minSize);\n setReizeKey((key) => key + 1);\n }, [open]);\n\n // TODO(burdon): Animate open/close.\n // NOTE: We set the min size to 5rem (80px), and the header and prompt bar to 40px (i.e., the rail-size) each.\n // The dialog has no vertical padding and has box-content so that when closed it collapses to the size of the header and prompt bar.\n const handleToggle = useCallback(() => {\n setOpen((open) => {\n onOpenChange?.(!open);\n return !open;\n });\n }, []);\n\n return (\n <div role='none' className='dx-dialog__overlay bg-transparent pointer-events-none' data-block-align='end'>\n <Dialog.Content\n classNames='relative box-content p-0 md:is-[35rem] md:max-is-none overflow-hidden pointer-events-auto transition-[block-size] ease-in-out duration-0 [&:not([data-dx-resizing=\"true\"])]:duration-200'\n inOverlayLayout\n {...resizeAttributes}\n style={{\n ...(resizeable ? sizeStyle(size, 'vertical', true) : {}),\n maxBlockSize: 'calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 9rem)',\n }}\n onEscapeKeyDown={onEscape}\n onInteractOutside={preventDefault}\n >\n {(resizeable && (\n <>\n <ResizeHandle\n key={resizeKey}\n side='block-start'\n defaultSize='min-content'\n minSize={minSize}\n fallbackSize={minSize}\n iconPosition='center'\n onSizeChange={setSize}\n />\n\n <DialogHeader open={open} title={title} onToggle={handleToggle} />\n </>\n )) || <Dialog.Title srOnly />}\n\n {children}\n </Dialog.Content>\n </div>\n );\n};\n\n/**\n * Matches same layout grid as PromptBar.\n */\nconst DialogHeader = ({ open, title, onToggle }: { open?: boolean; title?: string; onToggle: () => void }) => {\n return (\n <div className='flex shrink-0 w-full grid grid-cols-[var(--rail-action)_1fr_var(--rail-action)] items-center overflow-hidden'>\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n <Dialog.Close>\n <Icon icon='ph--x--regular' />\n </Dialog.Close>\n </div>\n <div className='grow'>\n <Dialog.Title classNames='flex justify-center text-xs text-subdued'>{title}</Dialog.Title>\n </div>\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n <IconButton\n variant='ghost'\n icon={'ph--caret-up--regular'}\n classNames={mx('[&>svg]:transition [&>svg]:duration-200', open && '[&>svg]:rotate-180')}\n iconOnly\n label='Shrink'\n onClick={onToggle}\n />\n </div>\n </div>\n );\n};\n"],
|
|
5
|
-
"mappings": ";;AAIA,OAAOA,SAAiCC,aAAaC,WAAWC,gBAAgB;AAEhF,SAASC,QAAQC,MAAMC,kBAAkB;AACzC,SAASC,kBAAkBC,cAAyBC,iBAAiB;AACrE,SAASC,UAAU;AAEnB,IAAMC,iBAAiB,CAACC,UAAiBA,MAAMD,eAAc;AAE7D,IAAME,UAAU;AAUT,IAAMC,gBAAgB,CAAC,EAC5BC,UACAC,MAAMC,gBACNC,OACAC,aAAa,MACbC,cACAC,SAAQ,MACW;;;AACnB,UAAM,CAACC,WAAWC,WAAAA,IAAeC,SAAS,CAAA;AAC1C,UAAM,CAACC,MAAMC,OAAAA,IAAWF,SAAe,aAAA;AACvC,UAAM,CAACR,MAAMW,OAAAA,IAAWH,SAASP,cAAAA;AAGjCW,cAAU,MAAA;AACRD,cAAQV,cAAAA;IACV,GAAG;MAACA;KAAe;AAGnBW,cAAU,MAAA;AACRF,cAAQV,OAAO,gBAAgBH,OAAAA;AAC/BU,kBAAY,CAACM,QAAQA,MAAM,CAAA;IAC7B,GAAG;MAACb;KAAK;AAKT,UAAMc,eAAeC,YAAY,MAAA;AAC/BJ,cAAQ,CAACX,UAAAA;AACPI,uBAAe,CAACJ,KAAAA;AAChB,eAAO,CAACA;MACV,CAAA;IACF,GAAG,CAAA,CAAE;AAEL,WACE,sBAAA,cAACgB,OAAAA;MAAIC,MAAK;MAAOC,WAAU;MAAwDC,oBAAiB;OAClG,sBAAA,cAACC,OAAOC,SAAO;MACbC,YAAW;MACXC,iBAAAA;MACC,GAAGC;MACJC,OAAO;QACL,GAAItB,aAAauB,UAAUjB,MAAM,YAAY,IAAA,IAAQ,CAAC;QACtDkB,cAAc;MAChB;MACAC,iBAAiBvB;MACjBwB,mBAAmBlC;OAEjBQ,cACA,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAAC2B,cAAAA;MACCjB,KAAKP;MACLyB,MAAK;MACLC,aAAY;MACZnC;MACAoC,cAAcpC;MACdqC,cAAa;MACbC,cAAczB;QAGhB,sBAAA,cAAC0B,cAAAA;MAAapC;MAAYE;MAAcmC,UAAUvB;WAEhD,sBAAA,cAACM,OAAOkB,OAAK;MAACC,QAAAA;QAEnBxC,QAAAA,CAAAA;;;;AAIT;AAKA,IAAMqC,eAAe,CAAC,EAAEpC,MAAME,OAAOmC,SAAQ,MAA4D;;;AACvG,WACE,sBAAA,cAACrB,OAAAA;MAAIE,WAAU;OACb,sBAAA,cAACF,OAAAA;MAAIE,WAAU;OACb,sBAAA,cAACE,OAAOoB,OAAK,MACX,sBAAA,cAACC,MAAAA;MAAKC,MAAK;UAGf,sBAAA,cAAC1B,OAAAA;MAAIE,WAAU;OACb,sBAAA,cAACE,OAAOkB,OAAK;MAAChB,YAAW;OAA4CpB,KAAAA,CAAAA,GAEvE,sBAAA,cAACc,OAAAA;MAAIE,WAAU;OACb,sBAAA,cAACyB,YAAAA;MACCC,SAAQ;MACRF,MAAM;MACNpB,YAAYuB,GAAG,2CAA2C7C,QAAQ,oBAAA;MAClE8C,UAAAA;MACAC,OAAM;MACNC,SAASX;;;;;AAKnB;",
|
|
6
|
-
"names": ["React", "useCallback", "useEffect", "useState", "Dialog", "Icon", "IconButton", "resizeAttributes", "ResizeHandle", "sizeStyle", "mx", "preventDefault", "event", "minSize", "AmbientDialog", "children", "open", "controlledOpen", "title", "resizeable", "onOpenChange", "onEscape", "resizeKey", "setReizeKey", "useState", "size", "setSize", "setOpen", "useEffect", "key", "handleToggle", "useCallback", "div", "role", "className", "data-block-align", "Dialog", "Content", "classNames", "inOverlayLayout", "resizeAttributes", "style", "sizeStyle", "maxBlockSize", "onEscapeKeyDown", "onInteractOutside", "ResizeHandle", "side", "defaultSize", "fallbackSize", "iconPosition", "onSizeChange", "DialogHeader", "onToggle", "Title", "srOnly", "Close", "Icon", "icon", "IconButton", "variant", "mx", "iconOnly", "label", "onClick"]
|
|
7
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ASSISTANT_PLUGIN
|
|
3
|
-
} from "./chunk-XOZ7YMO3.mjs";
|
|
4
|
-
|
|
5
|
-
// packages/plugins/plugin-assistant/src/capabilities/capabilities.ts
|
|
6
|
-
import { defineCapability } from "@dxos/app-framework";
|
|
7
|
-
(function(AssistantCapabilities2) {
|
|
8
|
-
AssistantCapabilities2.AiClient = defineCapability(`${ASSISTANT_PLUGIN}/capability/ai-client`);
|
|
9
|
-
})(AssistantCapabilities || (AssistantCapabilities = {}));
|
|
10
|
-
var AssistantCapabilities;
|
|
11
|
-
|
|
12
|
-
export {
|
|
13
|
-
AssistantCapabilities
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=chunk-UE3IZ4PN.mjs.map
|