@dxos/plugin-assistant 0.8.2-main.fbd8ed0 → 0.8.2-staging.42af850
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/AssistantDialog-K6POM23O.mjs +46 -0
- package/dist/lib/browser/AssistantDialog-K6POM23O.mjs.map +7 -0
- package/dist/lib/browser/ChatContainer-QTO4LE2C.mjs +39 -0
- package/dist/lib/{node-esm/ChatContainer-FAYGNMQW.mjs.map → browser/ChatContainer-QTO4LE2C.mjs.map} +1 -1
- package/dist/lib/browser/TemplateContainer-AKUYL4AV.mjs +28 -0
- package/dist/lib/{node-esm/TemplateContainer-3LEBT5ZC.mjs.map → browser/TemplateContainer-AKUYL4AV.mjs.map} +1 -1
- package/dist/lib/browser/{ai-client-5PRCXI7N.mjs → ai-client-COXVUC6V.mjs} +4 -4
- package/dist/lib/browser/ai-client-COXVUC6V.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-HTK3HFGM.mjs → app-graph-builder-YH4EGNBC.mjs} +45 -28
- package/dist/lib/browser/app-graph-builder-YH4EGNBC.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TXJWGWJ7.mjs → chunk-3F44MBHU.mjs} +3 -3
- package/dist/lib/browser/chunk-3F44MBHU.mjs.map +7 -0
- package/dist/lib/browser/chunk-IHEBFO5O.mjs +205 -0
- package/dist/lib/browser/chunk-IHEBFO5O.mjs.map +7 -0
- package/dist/lib/browser/chunk-JQFUME3B.mjs +87 -0
- package/dist/lib/{node-esm/chunk-PBZA7XJR.mjs.map → browser/chunk-JQFUME3B.mjs.map} +1 -1
- package/dist/lib/browser/chunk-Q6UZ4F3H.mjs +96 -0
- package/dist/lib/browser/chunk-Q6UZ4F3H.mjs.map +7 -0
- package/dist/lib/browser/{chunk-OWZHLWW5.mjs → chunk-QTW7KVDO.mjs} +1595 -1452
- package/dist/lib/browser/chunk-QTW7KVDO.mjs.map +7 -0
- package/dist/lib/browser/chunk-USJBRB3H.mjs +155 -0
- package/dist/lib/browser/chunk-USJBRB3H.mjs.map +7 -0
- package/dist/lib/browser/{chunk-3HCI5FIL.mjs → chunk-XOZ7YMO3.mjs} +3 -3
- package/dist/lib/browser/{chunk-3HCI5FIL.mjs.map → chunk-XOZ7YMO3.mjs.map} +1 -1
- package/dist/lib/browser/index.mjs +24 -10
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-QV5AAVJZ.mjs → intent-resolver-63EAHENI.mjs} +6 -5
- package/dist/lib/browser/intent-resolver-63EAHENI.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-surface-XCV6NR75.mjs +131 -0
- package/dist/lib/browser/react-surface-XCV6NR75.mjs.map +7 -0
- package/dist/lib/browser/{settings-OZX7J65A.mjs → settings-SHNQ4XXP.mjs} +3 -3
- package/dist/lib/browser/types/index.mjs +4 -2
- package/dist/lib/node/AssistantDialog-FDATKYE5.cjs +72 -0
- package/dist/lib/node/AssistantDialog-FDATKYE5.cjs.map +7 -0
- package/dist/lib/node/{ChatContainer-WVAAOEOH.cjs → ChatContainer-5CLHJOIQ.cjs} +25 -19
- package/dist/lib/node/{ChatContainer-WVAAOEOH.cjs.map → ChatContainer-5CLHJOIQ.cjs.map} +1 -1
- package/dist/lib/node/{TemplateContainer-EQXKHWTF.cjs → TemplateContainer-CTG2MB4W.cjs} +18 -12
- package/dist/lib/node/{TemplateContainer-EQXKHWTF.cjs.map → TemplateContainer-CTG2MB4W.cjs.map} +1 -1
- package/dist/lib/node/{ai-client-OUPSRQT7.cjs → ai-client-R2CGEYZW.cjs} +12 -12
- package/dist/lib/node/ai-client-R2CGEYZW.cjs.map +7 -0
- package/dist/lib/node/{app-graph-builder-LEO63CZZ.cjs → app-graph-builder-PSHIOW3Q.cjs} +62 -46
- package/dist/lib/node/app-graph-builder-PSHIOW3Q.cjs.map +7 -0
- package/dist/lib/node/{chunk-XI2ARIEO.cjs → chunk-4EEWTDQK.cjs} +45 -39
- package/dist/lib/node/{chunk-XI2ARIEO.cjs.map → chunk-4EEWTDQK.cjs.map} +1 -1
- package/dist/lib/node/chunk-FLJWJ35M.cjs +181 -0
- package/dist/lib/node/chunk-FLJWJ35M.cjs.map +7 -0
- package/dist/lib/node/{chunk-OOHFSPWR.cjs → chunk-H4A42LNR.cjs} +1126 -983
- package/dist/lib/node/chunk-H4A42LNR.cjs.map +7 -0
- package/dist/lib/node/chunk-HRNIUYVQ.cjs +128 -0
- package/dist/lib/node/chunk-HRNIUYVQ.cjs.map +7 -0
- package/dist/lib/node/{chunk-Q5XWEMHB.cjs → chunk-P74TWGMG.cjs} +6 -6
- package/dist/lib/node/{chunk-Q5XWEMHB.cjs.map → chunk-P74TWGMG.cjs.map} +1 -1
- package/dist/lib/node/chunk-RXPA2C2A.cjs +230 -0
- package/dist/lib/node/chunk-RXPA2C2A.cjs.map +7 -0
- package/dist/lib/node/{chunk-GBUNQ257.cjs → chunk-TS3H5OSX.cjs} +7 -7
- package/dist/lib/node/chunk-TS3H5OSX.cjs.map +7 -0
- package/dist/lib/node/index.cjs +72 -59
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-QDGZMWLY.cjs → intent-resolver-66F7WLW6.cjs} +13 -12
- package/dist/lib/node/intent-resolver-66F7WLW6.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/react-surface-TASAPRPQ.cjs +145 -0
- package/dist/lib/node/react-surface-TASAPRPQ.cjs.map +7 -0
- package/dist/lib/node/{settings-WLTC7XO5.cjs → settings-ERKLO6IO.cjs} +8 -8
- package/dist/lib/node/types/index.cjs +16 -14
- package/dist/lib/node/types/index.cjs.map +2 -2
- package/dist/lib/node-esm/AssistantDialog-PIMYK774.mjs +47 -0
- package/dist/lib/node-esm/AssistantDialog-PIMYK774.mjs.map +7 -0
- package/dist/lib/node-esm/ChatContainer-QTC5NYE2.mjs +40 -0
- package/dist/lib/{browser/ChatContainer-ZNKENYKZ.mjs.map → node-esm/ChatContainer-QTC5NYE2.mjs.map} +1 -1
- package/dist/lib/node-esm/TemplateContainer-IVDQ4XQG.mjs +29 -0
- package/dist/lib/{browser/TemplateContainer-WKU5XFSO.mjs.map → node-esm/TemplateContainer-IVDQ4XQG.mjs.map} +1 -1
- package/dist/lib/node-esm/{ai-client-RZQWEDUX.mjs → ai-client-I5LXHMOZ.mjs} +4 -4
- package/dist/lib/node-esm/ai-client-I5LXHMOZ.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-WXJNZDYB.mjs → app-graph-builder-Z3GMMJMD.mjs} +45 -28
- package/dist/lib/node-esm/app-graph-builder-Z3GMMJMD.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ECRK6TUQ.mjs → chunk-BB2TAT4P.mjs} +3 -3
- package/dist/lib/node-esm/{chunk-ECRK6TUQ.mjs.map → chunk-BB2TAT4P.mjs.map} +1 -1
- package/dist/lib/node-esm/chunk-CDAILLCU.mjs +98 -0
- package/dist/lib/node-esm/chunk-CDAILLCU.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-6JK5HEUQ.mjs → chunk-HLPGKJ7N.mjs} +3 -3
- package/dist/lib/node-esm/chunk-HLPGKJ7N.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-PBZA7XJR.mjs → chunk-OYN6HLXZ.mjs} +42 -36
- package/dist/lib/{browser/chunk-NFUHCW2J.mjs.map → node-esm/chunk-OYN6HLXZ.mjs.map} +1 -1
- package/dist/lib/node-esm/chunk-QU626JMR.mjs +156 -0
- package/dist/lib/node-esm/chunk-QU626JMR.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ED55ZE4G.mjs → chunk-SI5LOQEO.mjs} +1595 -1452
- package/dist/lib/node-esm/chunk-SI5LOQEO.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ZKBACPIW.mjs +206 -0
- package/dist/lib/node-esm/chunk-ZKBACPIW.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +24 -10
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-Q3I6S6HN.mjs → intent-resolver-X3PWH7KM.mjs} +6 -5
- package/dist/lib/node-esm/intent-resolver-X3PWH7KM.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react-surface-QMIQCXUM.mjs +132 -0
- package/dist/lib/node-esm/react-surface-QMIQCXUM.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-CLE57WEP.mjs → settings-IVQRZUCU.mjs} +3 -3
- package/dist/lib/node-esm/types/index.mjs +4 -2
- package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/ai-client.d.ts +1 -1
- package/dist/types/src/capabilities/ai-client.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- 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/AmbientDialog/AmbientDialog.d.ts +3 -1
- package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts.map +1 -1
- package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts +8 -0
- package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts.map +1 -0
- package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts +8 -0
- package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts.map +1 -0
- package/dist/types/src/components/BlueprintEditor/index.d.ts +2 -0
- package/dist/types/src/components/BlueprintEditor/index.d.ts.map +1 -0
- package/dist/types/src/components/Prompt/Prompt.d.ts +5 -2
- package/dist/types/src/components/Prompt/Prompt.d.ts.map +1 -1
- package/dist/types/src/components/Prompt/Prompt.stories.d.ts +6 -3
- package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -1
- package/dist/types/src/components/Prompt/PromptBar.d.ts +9 -4
- package/dist/types/src/components/Prompt/PromptBar.d.ts.map +1 -1
- package/dist/types/src/components/Prompt/PromptBar.stories.d.ts +9 -0
- package/dist/types/src/components/Prompt/PromptBar.stories.d.ts.map +1 -0
- package/dist/types/src/components/Prompt/autocomplete.d.ts +5 -1
- package/dist/types/src/components/Prompt/autocomplete.d.ts.map +1 -1
- package/dist/types/src/components/Thread/Thread.d.ts +2 -2
- package/dist/types/src/components/Thread/Thread.d.ts.map +1 -1
- package/dist/types/src/components/Thread/ThreadContainer.d.ts +1 -1
- package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +2 -2
- package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Thread/ThreadMessage.d.ts +4 -2
- package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -1
- package/dist/types/src/components/Thread/ToolInvocations.d.ts +1 -1
- package/dist/types/src/components/Thread/ToolInvocations.d.ts.map +1 -1
- package/dist/types/src/components/Thread/reducer.d.ts +1 -1
- package/dist/types/src/components/Thread/reducer.d.ts.map +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.d.ts +2 -1
- package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +2 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/experimental/transcription/index.d.ts +1 -0
- package/dist/types/src/experimental/transcription/index.d.ts.map +1 -0
- package/dist/types/src/hooks/processor.d.ts +6 -5
- package/dist/types/src/hooks/processor.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
- package/dist/types/src/hooks/useMessageQueue.d.ts +11 -7
- package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -1
- package/dist/types/src/parser/filter-generator.d.ts +4 -0
- package/dist/types/src/parser/filter-generator.d.ts.map +1 -0
- package/dist/types/src/parser/filter-generator.test.d.ts +2 -0
- package/dist/types/src/parser/filter-generator.test.d.ts.map +1 -0
- package/dist/types/src/parser/index.d.ts +4 -0
- package/dist/types/src/parser/index.d.ts.map +1 -0
- package/dist/types/src/parser/query-parser.d.ts +15 -0
- package/dist/types/src/parser/query-parser.d.ts.map +1 -0
- package/dist/types/src/parser/query-parser.test.d.ts +2 -0
- package/dist/types/src/parser/query-parser.test.d.ts.map +1 -0
- package/dist/types/src/parser/types.d.ts +24 -0
- package/dist/types/src/parser/types.d.ts.map +1 -0
- package/dist/types/src/stories/Prompt.stories.d.ts +8 -0
- package/dist/types/src/stories/Prompt.stories.d.ts.map +1 -0
- package/dist/types/src/stories/Query.stories.d.ts +19 -0
- package/dist/types/src/stories/Query.stories.d.ts.map +1 -0
- package/dist/types/src/stories/Research.stories.d.ts +15 -0
- package/dist/types/src/stories/Research.stories.d.ts.map +1 -0
- package/dist/types/src/stories/test-data.d.ts +3 -0
- package/dist/types/src/stories/test-data.d.ts.map +1 -0
- package/dist/types/src/stories/testing.d.ts +12 -0
- package/dist/types/src/stories/testing.d.ts.map +1 -0
- package/dist/types/src/testing/blueprint.d.ts +7 -0
- package/dist/types/src/testing/blueprint.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-functions.d.ts +1 -1
- package/dist/types/src/testing/test-functions.d.ts.map +1 -1
- package/dist/types/src/tools/function.d.ts +4 -4
- package/dist/types/src/tools/function.d.ts.map +1 -1
- package/dist/types/src/tools/openapi.d.ts +3 -3
- package/dist/types/src/tools/openapi.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +63 -6
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/chat.d.ts +18 -8
- package/dist/types/src/types/chat.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +6 -3
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/package.json +73 -61
- package/src/AssistantPlugin.tsx +5 -4
- package/src/capabilities/ai-client.ts +1 -1
- package/src/capabilities/app-graph-builder.ts +34 -24
- package/src/capabilities/capabilities.ts +1 -1
- package/src/capabilities/intent-resolver.ts +3 -2
- package/src/capabilities/react-surface.tsx +58 -13
- package/src/components/AmbientDialog/AmbientDialog.stories.tsx +1 -1
- package/src/components/AmbientDialog/AmbientDialog.tsx +27 -13
- package/src/components/AssistantDialog.tsx +1 -1
- package/src/components/AssistantSettings/AssistantSettings.tsx +1 -1
- package/src/components/BlueprintEditor/BlueprintEditor.stories.tsx +32 -0
- package/src/components/BlueprintEditor/BlueprintEditor.tsx +41 -0
- package/src/components/BlueprintEditor/index.ts +5 -0
- package/src/components/Prompt/Prompt.stories.tsx +59 -52
- package/src/components/Prompt/Prompt.tsx +24 -10
- package/src/components/Prompt/PromptBar.stories.tsx +68 -0
- package/src/components/Prompt/PromptBar.tsx +82 -80
- package/src/components/Prompt/autocomplete.ts +14 -8
- package/src/components/Prompt/references.ts +3 -3
- package/src/components/TemplateEditor/TemplateEditor.stories.tsx +2 -2
- package/src/components/TemplateEditor/TemplateForm.stories.tsx +1 -1
- package/src/components/Thread/Thread.stories.tsx +2 -2
- package/src/components/Thread/Thread.tsx +2 -2
- package/src/components/Thread/ThreadContainer.stories.tsx +77 -47
- package/src/components/Thread/ThreadContainer.tsx +8 -9
- package/src/components/Thread/ThreadMessage.tsx +43 -8
- package/src/components/Thread/ToolInvocations.tsx +9 -7
- package/src/components/Thread/reducer.ts +1 -1
- package/src/components/Toolbox/Toolbox.stories.tsx +1 -1
- package/src/components/Toolbox/Toolbox.tsx +2 -1
- package/src/components/index.ts +2 -0
- package/src/experimental/transcription/index.ts +3 -0
- package/src/hooks/processor.ts +65 -27
- package/src/hooks/useChatProcessor.tsx +4 -4
- package/src/hooks/useContextProvider.ts +6 -6
- package/src/hooks/useMessageQueue.ts +4 -4
- package/src/meta.ts +2 -2
- package/src/parser/filter-generator.test.ts +32 -0
- package/src/parser/filter-generator.ts +81 -0
- package/src/parser/index.ts +7 -0
- package/src/parser/query-parser.test.ts +139 -0
- package/src/parser/query-parser.ts +199 -0
- package/src/parser/types.ts +34 -0
- package/src/shims.d.ts +8 -0
- package/src/stories/Prompt.stories.tsx +59 -0
- package/src/stories/Query.stories.tsx +448 -0
- package/src/stories/Research.stories.tsx +495 -0
- package/src/stories/test-data.ts +128 -0
- package/src/stories/testing.ts +64 -0
- package/src/testing/blueprint.ts +47 -0
- package/src/testing/index.ts +1 -0
- package/src/testing/test-functions.ts +1 -1
- package/src/tools/function.ts +8 -7
- package/src/tools/openapi.test.ts +18 -19
- package/src/tools/openapi.ts +20 -14
- package/src/translations.ts +4 -2
- package/src/types/chat.ts +27 -4
- package/src/types/types.ts +3 -1
- package/dist/lib/browser/AssistantDialog-DTWVEQBB.mjs +0 -117
- package/dist/lib/browser/AssistantDialog-DTWVEQBB.mjs.map +0 -7
- package/dist/lib/browser/ChatContainer-ZNKENYKZ.mjs +0 -33
- package/dist/lib/browser/TemplateContainer-WKU5XFSO.mjs +0 -22
- package/dist/lib/browser/ai-client-5PRCXI7N.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-HTK3HFGM.mjs.map +0 -7
- package/dist/lib/browser/chunk-5P7U35RJ.mjs +0 -192
- package/dist/lib/browser/chunk-5P7U35RJ.mjs.map +0 -7
- package/dist/lib/browser/chunk-7VDZP5WX.mjs +0 -143
- package/dist/lib/browser/chunk-7VDZP5WX.mjs.map +0 -7
- package/dist/lib/browser/chunk-NFUHCW2J.mjs +0 -81
- package/dist/lib/browser/chunk-OWZHLWW5.mjs.map +0 -7
- package/dist/lib/browser/chunk-TXJWGWJ7.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-QV5AAVJZ.mjs.map +0 -7
- package/dist/lib/browser/react-surface-JJPYWEIN.mjs +0 -90
- package/dist/lib/browser/react-surface-JJPYWEIN.mjs.map +0 -7
- package/dist/lib/node/AssistantDialog-RJJHZI63.cjs +0 -141
- package/dist/lib/node/AssistantDialog-RJJHZI63.cjs.map +0 -7
- package/dist/lib/node/ai-client-OUPSRQT7.cjs.map +0 -7
- package/dist/lib/node/app-graph-builder-LEO63CZZ.cjs.map +0 -7
- package/dist/lib/node/chunk-GBUNQ257.cjs.map +0 -7
- package/dist/lib/node/chunk-GQ3XS5FZ.cjs +0 -169
- package/dist/lib/node/chunk-GQ3XS5FZ.cjs.map +0 -7
- package/dist/lib/node/chunk-OOHFSPWR.cjs.map +0 -7
- package/dist/lib/node/chunk-VG2UQY4S.cjs +0 -216
- package/dist/lib/node/chunk-VG2UQY4S.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-QDGZMWLY.cjs.map +0 -7
- package/dist/lib/node/react-surface-XNEIJJYJ.cjs +0 -106
- package/dist/lib/node/react-surface-XNEIJJYJ.cjs.map +0 -7
- package/dist/lib/node-esm/AssistantDialog-D33WZUGR.mjs +0 -118
- package/dist/lib/node-esm/AssistantDialog-D33WZUGR.mjs.map +0 -7
- package/dist/lib/node-esm/ChatContainer-FAYGNMQW.mjs +0 -34
- package/dist/lib/node-esm/TemplateContainer-3LEBT5ZC.mjs +0 -23
- package/dist/lib/node-esm/ai-client-RZQWEDUX.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-WXJNZDYB.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6JK5HEUQ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-74GFINWJ.mjs +0 -144
- package/dist/lib/node-esm/chunk-74GFINWJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ED55ZE4G.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UZWYXNR5.mjs +0 -193
- package/dist/lib/node-esm/chunk-UZWYXNR5.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-Q3I6S6HN.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-RI3JONQY.mjs +0 -91
- package/dist/lib/node-esm/react-surface-RI3JONQY.mjs.map +0 -7
- /package/dist/lib/browser/{settings-OZX7J65A.mjs.map → settings-SHNQ4XXP.mjs.map} +0 -0
- /package/dist/lib/node/{settings-WLTC7XO5.cjs.map → settings-ERKLO6IO.cjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-CLE57WEP.mjs.map → settings-IVQRZUCU.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/react-surface.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Effect } from 'effect';\nimport React, { useEffect, useMemo } from 'react';\n\nimport { Capabilities, contributes, createIntent, createSurface, useIntentDispatcher } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { Filter, isInstanceOf, Query } from '@dxos/echo-schema';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport {\n type AnyLiveObject,\n fullyQualifiedId,\n getSpace,\n getTypename,\n isEchoObject,\n type SpaceId,\n} from '@dxos/react-client/echo';\n\nimport { AssistantDialog, AssistantSettings, ChatContainer, PromptSettings, TemplateContainer } from '../components';\nimport { ASSISTANT_PLUGIN, ASSISTANT_DIALOG } from '../meta';\nimport { AIChatType, AssistantAction, type AssistantSettingsProps, CompanionTo, TemplateType } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${ASSISTANT_PLUGIN}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<AssistantSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === ASSISTANT_PLUGIN,\n component: ({ data: { subject } }) => <AssistantSettings settings={subject.value} />,\n }),\n createSurface({\n id: ASSISTANT_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: { chat: AIChatType } } => data.component === ASSISTANT_DIALOG,\n component: ({ data }) => <AssistantDialog {...data.props} />,\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/chat`,\n role: 'article',\n filter: (data): data is { subject: AIChatType; variant: undefined } =>\n Obj.instanceOf(AIChatType, data.subject) && data.variant !== 'assistant-chat',\n component: ({ data, role }) => <ChatContainer role={role} chat={data.subject} />,\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/object-chat`,\n role: 'article',\n filter: (data): data is { companionTo: AnyLiveObject<any>; subject: AIChatType | 'assistant-chat' } =>\n isEchoObject(data.companionTo) && (isInstanceOf(AIChatType, data.subject) || data.subject === 'assistant-chat'),\n component: ({ data, role }) => {\n const { dispatch } = useIntentDispatcher();\n const associatedArtifact = useMemo(\n () => ({\n id: fullyQualifiedId(data.companionTo),\n typename: getTypename(data.companionTo) ?? 'unknown',\n spaceId: (getSpace(data.companionTo)?.id ?? 'unknown') as SpaceId,\n }),\n [data.companionTo],\n );\n\n // TODO(wittjosiah): Factor out to container.\n useEffect(() => {\n const timeout = setTimeout(async () => {\n const space = getSpace(data.companionTo);\n if (space && data.subject === 'assistant-chat') {\n const result = await space.db\n .query(Query.select(Filter.ids(data.companionTo.id)).targetOf(CompanionTo).source())\n .run();\n if (result.objects.length > 0) {\n return;\n }\n\n const program = Effect.gen(function* () {\n const { object } = yield* dispatch(createIntent(AssistantAction.CreateChat, { space }));\n yield* dispatch(createIntent(SpaceAction.AddObject, { object, target: space, hidden: true }));\n yield* dispatch(\n createIntent(SpaceAction.AddRelation, {\n space,\n schema: CompanionTo,\n source: object,\n target: data.companionTo,\n }),\n );\n });\n void Effect.runPromise(program);\n }\n });\n\n return () => clearTimeout(timeout);\n }, [data.subject]);\n\n if (data.subject === 'assistant-chat') {\n return null;\n }\n\n return <ChatContainer role={role} chat={data.subject} associatedArtifact={associatedArtifact} />;\n },\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/template`,\n role: 'article',\n filter: (data): data is { subject: TemplateType } => Obj.instanceOf(TemplateType, data.subject),\n component: ({ data, role }) => <TemplateContainer role={role} template={data.subject} />,\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/prompt-settings`,\n role: 'object-settings',\n filter: (data): data is { subject: TemplateType } => Obj.instanceOf(TemplateType, data.subject),\n component: ({ data }) => <PromptSettings template={data.subject} />,\n }),\n ]);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Effect", "React", "useEffect", "useMemo", "Capabilities", "contributes", "createIntent", "createSurface", "useIntentDispatcher", "Obj", "Filter", "isInstanceOf", "Query", "SettingsStore", "SpaceAction", "fullyQualifiedId", "getSpace", "getTypename", "isEchoObject", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "ASSISTANT_PLUGIN", "role", "filter", "data", "subject", "SettingsStore", "prefix", "component", "AssistantSettings", "settings", "value", "ASSISTANT_DIALOG", "AssistantDialog", "props", "Obj", "instanceOf", "AIChatType", "variant", "ChatContainer", "chat", "isEchoObject", "companionTo", "isInstanceOf", "dispatch", "useIntentDispatcher", "associatedArtifact", "useMemo", "fullyQualifiedId", "typename", "getTypename", "spaceId", "getSpace", "useEffect", "timeout", "setTimeout", "space", "result", "db", "query", "Query", "select", "Filter", "ids", "targetOf", "CompanionTo", "source", "run", "objects", "length", "program", "Effect", "gen", "object", "createIntent", "AssistantAction", "CreateChat", "SpaceAction", "AddObject", "target", "hidden", "AddRelation", "schema", "runPromise", "clearTimeout", "TemplateType", "TemplateContainer", "template", "PromptSettings"]
|
|
7
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AssistantSettingsSchema
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-IHEBFO5O.mjs";
|
|
4
4
|
import {
|
|
5
5
|
ASSISTANT_PLUGIN
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XOZ7YMO3.mjs";
|
|
7
7
|
|
|
8
8
|
// packages/plugins/plugin-assistant/src/capabilities/settings.ts
|
|
9
9
|
import { Capabilities, contributes } from "@dxos/app-framework";
|
|
@@ -19,4 +19,4 @@ var settings_default = () => {
|
|
|
19
19
|
export {
|
|
20
20
|
settings_default as default
|
|
21
21
|
};
|
|
22
|
-
//# sourceMappingURL=settings-
|
|
22
|
+
//# sourceMappingURL=settings-SHNQ4XXP.mjs.map
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
ApiAuthorization,
|
|
4
4
|
AssistantAction,
|
|
5
5
|
AssistantSettingsSchema,
|
|
6
|
+
CompanionTo,
|
|
6
7
|
LLM_PROVIDERS,
|
|
7
8
|
ServiceType,
|
|
8
9
|
TemplateInputSchema,
|
|
@@ -11,13 +12,14 @@ import {
|
|
|
11
12
|
TemplateKinds,
|
|
12
13
|
TemplateType,
|
|
13
14
|
categoryIcons
|
|
14
|
-
} from "../chunk-
|
|
15
|
-
import "../chunk-
|
|
15
|
+
} from "../chunk-IHEBFO5O.mjs";
|
|
16
|
+
import "../chunk-XOZ7YMO3.mjs";
|
|
16
17
|
export {
|
|
17
18
|
AIChatType,
|
|
18
19
|
ApiAuthorization,
|
|
19
20
|
AssistantAction,
|
|
20
21
|
AssistantSettingsSchema,
|
|
22
|
+
CompanionTo,
|
|
21
23
|
LLM_PROVIDERS,
|
|
22
24
|
ServiceType,
|
|
23
25
|
TemplateInputSchema,
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var AssistantDialog_FDATKYE5_exports = {};
|
|
30
|
+
__export(AssistantDialog_FDATKYE5_exports, {
|
|
31
|
+
AssistantDialog: () => AssistantDialog,
|
|
32
|
+
default: () => AssistantDialog_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(AssistantDialog_FDATKYE5_exports);
|
|
35
|
+
var import_chunk_HRNIUYVQ = require("./chunk-HRNIUYVQ.cjs");
|
|
36
|
+
var import_chunk_H4A42LNR = require("./chunk-H4A42LNR.cjs");
|
|
37
|
+
var import_chunk_TS3H5OSX = require("./chunk-TS3H5OSX.cjs");
|
|
38
|
+
var import_chunk_RXPA2C2A = require("./chunk-RXPA2C2A.cjs");
|
|
39
|
+
var import_chunk_P74TWGMG = require("./chunk-P74TWGMG.cjs");
|
|
40
|
+
var import_tracking = require("@preact-signals/safe-react/tracking");
|
|
41
|
+
var import_react = __toESM(require("react"));
|
|
42
|
+
var import_app_framework = require("@dxos/app-framework");
|
|
43
|
+
var import_plugin_transcription = require("@dxos/plugin-transcription");
|
|
44
|
+
var import_react_ui = require("@dxos/react-ui");
|
|
45
|
+
var AssistantDialog = ({ chat }) => {
|
|
46
|
+
var _effect = (0, import_tracking.useSignals)();
|
|
47
|
+
try {
|
|
48
|
+
const { t } = (0, import_react_ui.useTranslation)(import_chunk_P74TWGMG.ASSISTANT_PLUGIN);
|
|
49
|
+
const transcription = (0, import_app_framework.useCapabilities)(import_plugin_transcription.TranscriptionCapabilities.Transcriber).length > 0;
|
|
50
|
+
const settings = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_P74TWGMG.ASSISTANT_PLUGIN)?.value;
|
|
51
|
+
const [open, setOpen] = (0, import_react.useState)(false);
|
|
52
|
+
return /* @__PURE__ */ import_react.default.createElement(import_chunk_HRNIUYVQ.AmbientDialog, {
|
|
53
|
+
open,
|
|
54
|
+
onOpenChange: setOpen,
|
|
55
|
+
title: t("assistant dialog title")
|
|
56
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_chunk_H4A42LNR.ThreadContainer, {
|
|
57
|
+
part: "dialog",
|
|
58
|
+
chat,
|
|
59
|
+
onOpenChange: setOpen,
|
|
60
|
+
settings,
|
|
61
|
+
transcription
|
|
62
|
+
}));
|
|
63
|
+
} finally {
|
|
64
|
+
_effect.f();
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
var AssistantDialog_default = AssistantDialog;
|
|
68
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
69
|
+
0 && (module.exports = {
|
|
70
|
+
AssistantDialog
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=AssistantDialog-FDATKYE5.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/AssistantDialog.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, useState } from 'react';\n\nimport { useCapability, Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { TranscriptionCapabilities } from '@dxos/plugin-transcription';\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { AmbientDialog } from './AmbientDialog';\nimport { ThreadContainer } from './Thread';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { type AssistantSettingsProps, type AIChatType } from '../types';\n\nexport const AssistantDialog: FC<{ chat?: AIChatType }> = ({ chat }) => {\n const { t } = useTranslation(ASSISTANT_PLUGIN);\n const transcription = useCapabilities(TranscriptionCapabilities.Transcriber).length > 0;\n const settings = useCapability(Capabilities.SettingsStore).getStore<AssistantSettingsProps>(ASSISTANT_PLUGIN)?.value;\n\n // TODO(burdon): Refocus when open.\n const [open, setOpen] = useState(false);\n\n return (\n <AmbientDialog open={open} onOpenChange={setOpen} title={t('assistant dialog title')}>\n <ThreadContainer\n part={'dialog'}\n chat={chat}\n onOpenChange={setOpen}\n settings={settings}\n transcription={transcription}\n />\n </AmbientDialog>\n );\n};\n\nexport default AssistantDialog;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAyC;AAEzC,2BAA6D;AAC7D,kCAA0C;AAC1C,sBAA+B;AAOxB,IAAMA,kBAA6C,CAAC,EAAEC,KAAI,MAAE;;;AACjE,UAAM,EAAEC,EAAC,QAAKC,gCAAeC,sCAAAA;AAC7B,UAAMC,oBAAgBC,sCAAgBC,sDAA0BC,WAAW,EAAEC,SAAS;AACtF,UAAMC,eAAWC,oCAAcC,kCAAaC,aAAa,EAAEC,SAAiCV,sCAAAA,GAAmBW;AAG/G,UAAM,CAACC,MAAMC,OAAAA,QAAWC,uBAAS,KAAA;AAEjC,WACE,6BAAAC,QAAA,cAACC,qCAAAA;MAAcJ;MAAYK,cAAcJ;MAASK,OAAOpB,EAAE,wBAAA;OACzD,6BAAAiB,QAAA,cAACI,uCAAAA;MACCC,MAAM;MACNvB;MACAoB,cAAcJ;MACdP;MACAL;;;;;AAIR;AAEA,IAAA,0BAAeL;",
|
|
6
|
+
"names": ["AssistantDialog", "chat", "t", "useTranslation", "ASSISTANT_PLUGIN", "transcription", "useCapabilities", "TranscriptionCapabilities", "Transcriber", "length", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "value", "open", "setOpen", "useState", "React", "AmbientDialog", "onOpenChange", "title", "ThreadContainer", "part"]
|
|
7
|
+
}
|
|
@@ -26,36 +26,42 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
29
|
+
var ChatContainer_5CLHJOIQ_exports = {};
|
|
30
|
+
__export(ChatContainer_5CLHJOIQ_exports, {
|
|
31
31
|
ChatContainer: () => ChatContainer,
|
|
32
32
|
default: () => ChatContainer_default
|
|
33
33
|
});
|
|
34
|
-
module.exports = __toCommonJS(
|
|
35
|
-
var
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
var
|
|
34
|
+
module.exports = __toCommonJS(ChatContainer_5CLHJOIQ_exports);
|
|
35
|
+
var import_chunk_H4A42LNR = require("./chunk-H4A42LNR.cjs");
|
|
36
|
+
var import_chunk_TS3H5OSX = require("./chunk-TS3H5OSX.cjs");
|
|
37
|
+
var import_chunk_RXPA2C2A = require("./chunk-RXPA2C2A.cjs");
|
|
38
|
+
var import_chunk_P74TWGMG = require("./chunk-P74TWGMG.cjs");
|
|
39
|
+
var import_tracking = require("@preact-signals/safe-react/tracking");
|
|
39
40
|
var import_react = __toESM(require("react"));
|
|
40
41
|
var import_app_framework = require("@dxos/app-framework");
|
|
41
42
|
var import_plugin_transcription = require("@dxos/plugin-transcription");
|
|
42
43
|
var import_react_ui_stack = require("@dxos/react-ui-stack");
|
|
43
44
|
var ChatContainer = ({ role, chat, associatedArtifact }) => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
var _effect = (0, import_tracking.useSignals)();
|
|
46
|
+
try {
|
|
47
|
+
const transcription = (0, import_app_framework.useCapabilities)(import_plugin_transcription.TranscriptionCapabilities.Transcriber).length > 0;
|
|
48
|
+
const settings = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_P74TWGMG.ASSISTANT_PLUGIN)?.value;
|
|
49
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
|
|
50
|
+
role,
|
|
51
|
+
classNames: "container-max-width"
|
|
52
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_chunk_H4A42LNR.ThreadContainer, {
|
|
53
|
+
chat,
|
|
54
|
+
settings,
|
|
55
|
+
transcription,
|
|
56
|
+
associatedArtifact
|
|
57
|
+
}));
|
|
58
|
+
} finally {
|
|
59
|
+
_effect.f();
|
|
60
|
+
}
|
|
55
61
|
};
|
|
56
62
|
var ChatContainer_default = ChatContainer;
|
|
57
63
|
// Annotate the CommonJS export names for ESM import in node:
|
|
58
64
|
0 && (module.exports = {
|
|
59
65
|
ChatContainer
|
|
60
66
|
});
|
|
61
|
-
//# sourceMappingURL=ChatContainer-
|
|
67
|
+
//# sourceMappingURL=ChatContainer-5CLHJOIQ.cjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/ChatContainer.tsx"],
|
|
4
4
|
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { Capabilities, useCapabilities, useCapability } from '@dxos/app-framework';\nimport { type AssociatedArtifact } from '@dxos/artifact';\nimport { TranscriptionCapabilities } from '@dxos/plugin-transcription';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { ThreadContainer } from './Thread';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { type AssistantSettingsProps, type AIChatType } from '../types';\n\nexport type ChatContainerProps = {\n role: string;\n chat: AIChatType;\n associatedArtifact?: AssociatedArtifact;\n};\n\n// TODO(burdon): Attention.\nexport const ChatContainer: FC<ChatContainerProps> = ({ role, chat, associatedArtifact }) => {\n const transcription = useCapabilities(TranscriptionCapabilities.Transcriber).length > 0;\n const settings = useCapability(Capabilities.SettingsStore).getStore<AssistantSettingsProps>(ASSISTANT_PLUGIN)?.value;\n\n return (\n <StackItem.Content role={role} classNames='container-max-width'>\n <ThreadContainer\n chat={chat}\n settings={settings}\n transcription={transcription}\n associatedArtifact={associatedArtifact}\n />\n </StackItem.Content>\n );\n};\n\nexport default ChatContainer;\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAA+B;AAE/B,2BAA6D;AAE7D,kCAA0C;AAC1C,4BAA0B;AAanB,IAAMA,gBAAwC,CAAC,EAAEC,MAAMC,MAAMC,mBAAkB,MAAE;;;AACtF,UAAMC,oBAAgBC,sCAAgBC,sDAA0BC,WAAW,EAAEC,SAAS;AACtF,UAAMC,eAAWC,oCAAcC,kCAAaC,aAAa,EAAEC,SAAiCC,sCAAAA,GAAmBC;AAE/G,WACE,6BAAAC,QAAA,cAACC,gCAAUC,SAAO;MAACjB;MAAYkB,YAAW;OACxC,6BAAAH,QAAA,cAACI,uCAAAA;MACClB;MACAO;MACAL;MACAD;;;;;AAIR;AAEA,IAAA,wBAAeH;",
|
|
6
6
|
"names": ["ChatContainer", "role", "chat", "associatedArtifact", "transcription", "useCapabilities", "TranscriptionCapabilities", "Transcriber", "length", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "ASSISTANT_PLUGIN", "value", "React", "StackItem", "Content", "classNames", "ThreadContainer"]
|
|
7
7
|
}
|
|
@@ -26,27 +26,33 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
29
|
+
var TemplateContainer_CTG2MB4W_exports = {};
|
|
30
|
+
__export(TemplateContainer_CTG2MB4W_exports, {
|
|
31
31
|
TemplateContainer: () => TemplateContainer,
|
|
32
32
|
default: () => TemplateContainer_default
|
|
33
33
|
});
|
|
34
|
-
module.exports = __toCommonJS(
|
|
35
|
-
var
|
|
36
|
-
var
|
|
34
|
+
module.exports = __toCommonJS(TemplateContainer_CTG2MB4W_exports);
|
|
35
|
+
var import_chunk_4EEWTDQK = require("./chunk-4EEWTDQK.cjs");
|
|
36
|
+
var import_chunk_P74TWGMG = require("./chunk-P74TWGMG.cjs");
|
|
37
|
+
var import_tracking = require("@preact-signals/safe-react/tracking");
|
|
37
38
|
var import_react = __toESM(require("react"));
|
|
38
39
|
var import_react_ui_stack = require("@dxos/react-ui-stack");
|
|
39
40
|
var TemplateContainer = ({ template, role }) => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
var _effect = (0, import_tracking.useSignals)();
|
|
42
|
+
try {
|
|
43
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
|
|
44
|
+
role,
|
|
45
|
+
classNames: "container-max-width"
|
|
46
|
+
}, /* @__PURE__ */ import_react.default.createElement(import_chunk_4EEWTDQK.TemplateEditor, {
|
|
47
|
+
template
|
|
48
|
+
}));
|
|
49
|
+
} finally {
|
|
50
|
+
_effect.f();
|
|
51
|
+
}
|
|
46
52
|
};
|
|
47
53
|
var TemplateContainer_default = TemplateContainer;
|
|
48
54
|
// Annotate the CommonJS export names for ESM import in node:
|
|
49
55
|
0 && (module.exports = {
|
|
50
56
|
TemplateContainer
|
|
51
57
|
});
|
|
52
|
-
//# sourceMappingURL=TemplateContainer-
|
|
58
|
+
//# sourceMappingURL=TemplateContainer-CTG2MB4W.cjs.map
|
package/dist/lib/node/{TemplateContainer-EQXKHWTF.cjs.map → TemplateContainer-CTG2MB4W.cjs.map}
RENAMED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/TemplateContainer.tsx"],
|
|
4
4
|
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { TemplateEditor } from './TemplateEditor';\nimport { type TemplateType } from '../types';\n\nexport const TemplateContainer = ({ template, role }: { template: TemplateType; role: string }) => {\n return (\n <StackItem.Content role={role} classNames='container-max-width'>\n <TemplateEditor template={template} />\n </StackItem.Content>\n );\n};\n\nexport default TemplateContainer;\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAkB;AAElB,4BAA0B;AAKnB,IAAMA,oBAAoB,CAAC,EAAEC,UAAUC,KAAI,MAA4C;;;AAC5F,WACE,6BAAAC,QAAA,cAACC,gCAAUC,SAAO;MAACH;MAAYI,YAAW;OACxC,6BAAAH,QAAA,cAACI,sCAAAA;MAAeN;;;;;AAGtB;AAEA,IAAA,4BAAeD;",
|
|
6
6
|
"names": ["TemplateContainer", "template", "role", "React", "StackItem", "Content", "classNames", "TemplateEditor"]
|
|
7
7
|
}
|
|
@@ -16,34 +16,34 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var ai_client_R2CGEYZW_exports = {};
|
|
20
|
+
__export(ai_client_R2CGEYZW_exports, {
|
|
21
21
|
default: () => ai_client_default
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
24
|
-
var
|
|
25
|
-
var
|
|
23
|
+
module.exports = __toCommonJS(ai_client_R2CGEYZW_exports);
|
|
24
|
+
var import_chunk_TS3H5OSX = require("./chunk-TS3H5OSX.cjs");
|
|
25
|
+
var import_chunk_P74TWGMG = require("./chunk-P74TWGMG.cjs");
|
|
26
26
|
var import_signals_core = require("@preact/signals-core");
|
|
27
|
+
var import_ai = require("@dxos/ai");
|
|
27
28
|
var import_app_framework = require("@dxos/app-framework");
|
|
28
|
-
var import_assistant = require("@dxos/assistant");
|
|
29
29
|
var import_plugin_client = require("@dxos/plugin-client");
|
|
30
30
|
var DEFAULT_AI_SERVICE_URL = "http://localhost:8788";
|
|
31
31
|
var ai_client_default = (context) => {
|
|
32
32
|
const client = context.getCapability(import_plugin_client.ClientCapabilities.Client);
|
|
33
33
|
const endpoint = client.config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL;
|
|
34
|
-
const ai = (0, import_signals_core.signal)(new
|
|
34
|
+
const ai = (0, import_signals_core.signal)(new import_ai.AIServiceEdgeClient({
|
|
35
35
|
endpoint
|
|
36
36
|
}));
|
|
37
37
|
const unsubscribe = (0, import_signals_core.effect)(() => {
|
|
38
|
-
const settings = context.getCapability(import_app_framework.Capabilities.SettingsStore).getStore(
|
|
38
|
+
const settings = context.getCapability(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_P74TWGMG.ASSISTANT_PLUGIN)?.value;
|
|
39
39
|
if (settings?.llmProvider === "ollama") {
|
|
40
|
-
ai.value = new
|
|
40
|
+
ai.value = new import_ai.OllamaClient();
|
|
41
41
|
} else {
|
|
42
|
-
ai.value = new
|
|
42
|
+
ai.value = new import_ai.AIServiceEdgeClient({
|
|
43
43
|
endpoint
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
});
|
|
47
|
-
return (0, import_app_framework.contributes)(
|
|
47
|
+
return (0, import_app_framework.contributes)(import_chunk_TS3H5OSX.AssistantCapabilities.AiClient, ai, () => unsubscribe());
|
|
48
48
|
};
|
|
49
|
-
//# sourceMappingURL=ai-client-
|
|
49
|
+
//# sourceMappingURL=ai-client-R2CGEYZW.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/ai-client.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { effect, signal } from '@preact/signals-core';\n\nimport { type AIServiceClient, AIServiceEdgeClient, OllamaClient } from '@dxos/ai';\nimport { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { AssistantCapabilities } from './capabilities';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { type AssistantSettingsProps } from '../types';\n\n// TODO(wittjosiah): Factor out.\nconst DEFAULT_AI_SERVICE_URL = 'http://localhost:8788';\n\nexport default (context: PluginContext) => {\n const client = context.getCapability(ClientCapabilities.Client);\n const endpoint = client.config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL;\n\n const ai = signal<AIServiceClient>(new AIServiceEdgeClient({ endpoint }));\n\n const unsubscribe = effect(() => {\n const settings = context\n .getCapability(Capabilities.SettingsStore)\n .getStore<AssistantSettingsProps>(ASSISTANT_PLUGIN)?.value;\n\n if (settings?.llmProvider === 'ollama') {\n ai.value = new OllamaClient();\n } else {\n ai.value = new AIServiceEdgeClient({ endpoint });\n }\n });\n\n return contributes(AssistantCapabilities.AiClient, ai, () => unsubscribe());\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,0BAA+B;AAE/B,gBAAwE;AACxE,2BAA8D;AAC9D,2BAAmC;AAOnC,IAAMA,yBAAyB;AAE/B,IAAA,oBAAe,CAACC,YAAAA;AACd,QAAMC,SAASD,QAAQE,cAAcC,wCAAmBC,MAAM;AAC9D,QAAMC,WAAWJ,OAAOK,OAAOC,OAAOC,SAASC,UAAUC,IAAIC,UAAUZ;AAEvE,QAAMW,SAAKE,4BAAwB,IAAIC,8BAAoB;IAAER;EAAS,CAAA,CAAA;AAEtE,QAAMS,kBAAcC,4BAAO,MAAA;AACzB,UAAMC,WAAWhB,QACdE,cAAce,kCAAaC,aAAa,EACxCC,SAAiCC,sCAAAA,GAAmBC;AAEvD,QAAIL,UAAUM,gBAAgB,UAAU;AACtCZ,SAAGW,QAAQ,IAAIE,uBAAAA;IACjB,OAAO;AACLb,SAAGW,QAAQ,IAAIR,8BAAoB;QAAER;MAAS,CAAA;IAChD;EACF,CAAA;AAEA,aAAOmB,kCAAYC,4CAAsBC,UAAUhB,IAAI,MAAMI,YAAAA,CAAAA;AAC/D;",
|
|
6
|
+
"names": ["DEFAULT_AI_SERVICE_URL", "context", "client", "getCapability", "ClientCapabilities", "Client", "endpoint", "config", "values", "runtime", "services", "ai", "server", "signal", "AIServiceEdgeClient", "unsubscribe", "effect", "settings", "Capabilities", "SettingsStore", "getStore", "ASSISTANT_PLUGIN", "value", "llmProvider", "OllamaClient", "contributes", "AssistantCapabilities", "AiClient"]
|
|
7
|
+
}
|
|
@@ -16,16 +16,17 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var app_graph_builder_PSHIOW3Q_exports = {};
|
|
20
|
+
__export(app_graph_builder_PSHIOW3Q_exports, {
|
|
21
21
|
default: () => app_graph_builder_default
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
24
|
-
var
|
|
25
|
-
var
|
|
23
|
+
module.exports = __toCommonJS(app_graph_builder_PSHIOW3Q_exports);
|
|
24
|
+
var import_chunk_RXPA2C2A = require("./chunk-RXPA2C2A.cjs");
|
|
25
|
+
var import_chunk_P74TWGMG = require("./chunk-P74TWGMG.cjs");
|
|
26
26
|
var import_rx_react = require("@effect-rx/rx-react");
|
|
27
27
|
var import_effect = require("effect");
|
|
28
28
|
var import_app_framework = require("@dxos/app-framework");
|
|
29
|
+
var import_echo_schema = require("@dxos/echo-schema");
|
|
29
30
|
var import_invariant = require("@dxos/invariant");
|
|
30
31
|
var import_plugin_client = require("@dxos/plugin-client");
|
|
31
32
|
var import_types = require("@dxos/plugin-deck/types");
|
|
@@ -36,7 +37,7 @@ var import_echo = require("@dxos/react-client/echo");
|
|
|
36
37
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-assistant/src/capabilities/app-graph-builder.ts";
|
|
37
38
|
var app_graph_builder_default = (context) => (0, import_app_framework.contributes)(import_app_framework.Capabilities.AppGraphBuilder, [
|
|
38
39
|
(0, import_plugin_graph.createExtension)({
|
|
39
|
-
id: `${
|
|
40
|
+
id: `${import_chunk_P74TWGMG.ASSISTANT_PLUGIN}/assistant`,
|
|
40
41
|
actions: (node) => import_rx_react.Rx.make((get) => (0, import_effect.pipe)(get(node), import_effect.Option.flatMap((node2) => node2.id === import_plugin_graph.ROOT_ID ? import_effect.Option.some(node2) : import_effect.Option.none()), import_effect.Option.map(() => [
|
|
41
42
|
{
|
|
42
43
|
id: `${import_app_framework.LayoutAction.UpdateDialog._tag}/assistant/open`,
|
|
@@ -63,7 +64,7 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
|
|
|
63
64
|
}
|
|
64
65
|
await dispatch((0, import_app_framework.createIntent)(import_app_framework.LayoutAction.UpdateDialog, {
|
|
65
66
|
part: "dialog",
|
|
66
|
-
subject:
|
|
67
|
+
subject: import_chunk_P74TWGMG.ASSISTANT_DIALOG,
|
|
67
68
|
options: {
|
|
68
69
|
state: true,
|
|
69
70
|
blockAlign: "end",
|
|
@@ -77,7 +78,7 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
|
|
|
77
78
|
label: [
|
|
78
79
|
"open assistant label",
|
|
79
80
|
{
|
|
80
|
-
ns:
|
|
81
|
+
ns: import_chunk_P74TWGMG.ASSISTANT_PLUGIN
|
|
81
82
|
}
|
|
82
83
|
],
|
|
83
84
|
icon: "ph--sparkle--regular",
|
|
@@ -92,48 +93,63 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
|
|
|
92
93
|
]), import_effect.Option.getOrElse(() => [])))
|
|
93
94
|
}),
|
|
94
95
|
(0, import_plugin_graph.createExtension)({
|
|
95
|
-
id: `${
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
{
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
"assistant chat label",
|
|
108
|
-
{
|
|
109
|
-
ns: import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN
|
|
110
|
-
}
|
|
111
|
-
],
|
|
112
|
-
icon: "ph--sparkle--regular",
|
|
113
|
-
position: "hoist"
|
|
96
|
+
id: `${import_chunk_P74TWGMG.ASSISTANT_PLUGIN}/object-chat-companion`,
|
|
97
|
+
connector: (node) => {
|
|
98
|
+
let query;
|
|
99
|
+
return import_rx_react.Rx.make((get) => (0, import_effect.pipe)(get(node), import_effect.Option.flatMap((node2) => (0, import_echo.isEchoObject)(node2.data) ? import_effect.Option.some(node2.data) : import_effect.Option.none()), import_effect.Option.flatMap((object) => {
|
|
100
|
+
const space = (0, import_echo.getSpace)(object);
|
|
101
|
+
return space ? import_effect.Option.some({
|
|
102
|
+
space,
|
|
103
|
+
object
|
|
104
|
+
}) : import_effect.Option.none();
|
|
105
|
+
}), import_effect.Option.map(({ space, object }) => {
|
|
106
|
+
if (!query) {
|
|
107
|
+
query = space.db.query(import_echo.Query.select(import_echo.Filter.ids(object.id)).targetOf(import_chunk_RXPA2C2A.CompanionTo).source());
|
|
114
108
|
}
|
|
115
|
-
|
|
116
|
-
|
|
109
|
+
const chat = get((0, import_plugin_space.rxFromQuery)(query))[0];
|
|
110
|
+
return [
|
|
111
|
+
{
|
|
112
|
+
id: [
|
|
113
|
+
(0, import_echo.fullyQualifiedId)(object),
|
|
114
|
+
"assistant-chat"
|
|
115
|
+
].join(import_types.ATTENDABLE_PATH_SEPARATOR),
|
|
116
|
+
type: import_types.PLANK_COMPANION_TYPE,
|
|
117
|
+
data: chat ?? "assistant-chat",
|
|
118
|
+
properties: {
|
|
119
|
+
label: [
|
|
120
|
+
"assistant chat label",
|
|
121
|
+
{
|
|
122
|
+
ns: import_chunk_P74TWGMG.ASSISTANT_PLUGIN
|
|
123
|
+
}
|
|
124
|
+
],
|
|
125
|
+
icon: "ph--sparkle--regular",
|
|
126
|
+
position: "hoist",
|
|
127
|
+
disposition: "hidden"
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
];
|
|
131
|
+
}), import_effect.Option.getOrElse(() => [])));
|
|
132
|
+
}
|
|
117
133
|
}),
|
|
118
134
|
(0, import_plugin_graph.createExtension)({
|
|
119
|
-
id: `${
|
|
135
|
+
id: `${import_chunk_P74TWGMG.ASSISTANT_PLUGIN}/root`,
|
|
120
136
|
connector: (node) => {
|
|
121
137
|
let query;
|
|
122
138
|
return import_rx_react.Rx.make((get) => (0, import_effect.pipe)(get(node), import_effect.Option.flatMap((node2) => node2.type === import_types2.SPACE_TYPE && (0, import_echo.isSpace)(node2.data) ? import_effect.Option.some(node2.data) : import_effect.Option.none()), import_effect.Option.map((space) => {
|
|
123
139
|
if (!query) {
|
|
124
|
-
query = space.db.query(import_echo.Query.type(
|
|
140
|
+
query = space.db.query(import_echo.Query.type(import_chunk_RXPA2C2A.TemplateType));
|
|
125
141
|
}
|
|
126
142
|
const templates = get((0, import_plugin_space.rxFromQuery)(query));
|
|
127
143
|
return templates.length > 0 ? [
|
|
128
144
|
{
|
|
129
|
-
id: `${
|
|
130
|
-
type: `${
|
|
145
|
+
id: `${import_chunk_P74TWGMG.ASSISTANT_PLUGIN}/templates`,
|
|
146
|
+
type: `${import_chunk_P74TWGMG.ASSISTANT_PLUGIN}/templates`,
|
|
131
147
|
data: null,
|
|
132
148
|
properties: {
|
|
133
149
|
label: [
|
|
134
150
|
"templates label",
|
|
135
151
|
{
|
|
136
|
-
ns:
|
|
152
|
+
ns: import_chunk_P74TWGMG.ASSISTANT_PLUGIN
|
|
137
153
|
}
|
|
138
154
|
],
|
|
139
155
|
icon: "ph--file-code--regular",
|
|
@@ -145,12 +161,12 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
|
|
|
145
161
|
}
|
|
146
162
|
}),
|
|
147
163
|
(0, import_plugin_graph.createExtension)({
|
|
148
|
-
id: `${
|
|
164
|
+
id: `${import_chunk_P74TWGMG.ASSISTANT_PLUGIN}/templates`,
|
|
149
165
|
connector: (node) => {
|
|
150
166
|
let query;
|
|
151
|
-
return import_rx_react.Rx.make((get) => (0, import_effect.pipe)(get(node), import_effect.Option.flatMap((node2) => node2.id === `${
|
|
167
|
+
return import_rx_react.Rx.make((get) => (0, import_effect.pipe)(get(node), import_effect.Option.flatMap((node2) => node2.id === `${import_chunk_P74TWGMG.ASSISTANT_PLUGIN}/templates` && (0, import_echo.isSpace)(node2.properties.space) ? import_effect.Option.some(node2.properties.space) : import_effect.Option.none()), import_effect.Option.map((space) => {
|
|
152
168
|
if (!query) {
|
|
153
|
-
query = space.db.query(import_echo.Query.type(
|
|
169
|
+
query = space.db.query(import_echo.Query.type(import_chunk_RXPA2C2A.TemplateType));
|
|
154
170
|
}
|
|
155
171
|
return get((0, import_plugin_space.rxFromQuery)(query)).toSorted((a, b) => {
|
|
156
172
|
const nameA = a.name ?? "";
|
|
@@ -158,13 +174,13 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
|
|
|
158
174
|
return nameA.localeCompare(nameB);
|
|
159
175
|
}).map((template) => ({
|
|
160
176
|
id: (0, import_echo.fullyQualifiedId)(template),
|
|
161
|
-
type: `${
|
|
177
|
+
type: `${import_chunk_P74TWGMG.ASSISTANT_PLUGIN}/template`,
|
|
162
178
|
data: template,
|
|
163
179
|
properties: {
|
|
164
180
|
label: template.name ?? [
|
|
165
181
|
"object placeholder",
|
|
166
182
|
{
|
|
167
|
-
ns:
|
|
183
|
+
ns: import_chunk_P74TWGMG.ASSISTANT_PLUGIN
|
|
168
184
|
}
|
|
169
185
|
],
|
|
170
186
|
icon: "ph--file-code--regular"
|
|
@@ -175,19 +191,19 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
|
|
|
175
191
|
})
|
|
176
192
|
]);
|
|
177
193
|
var getOrCreateChat = async (dispatch, space) => {
|
|
178
|
-
const { objects } = await space.db.query(import_echo.Filter.type(
|
|
194
|
+
const { objects } = await space.db.query(import_echo.Filter.type(import_chunk_RXPA2C2A.AIChatType)).run();
|
|
179
195
|
if (objects.length > 0) {
|
|
180
196
|
return objects[objects.length - 1];
|
|
181
197
|
}
|
|
182
|
-
const { data } = await dispatch((0, import_app_framework.createIntent)(
|
|
183
|
-
|
|
198
|
+
const { data } = await dispatch((0, import_app_framework.createIntent)(import_chunk_RXPA2C2A.AssistantAction.CreateChat, {
|
|
199
|
+
space
|
|
184
200
|
}));
|
|
185
|
-
(0, import_invariant.invariant)(
|
|
201
|
+
(0, import_invariant.invariant)((0, import_echo_schema.isInstanceOf)(import_chunk_RXPA2C2A.AIChatType, data?.object), void 0, {
|
|
186
202
|
F: __dxlog_file,
|
|
187
|
-
L:
|
|
203
|
+
L: 230,
|
|
188
204
|
S: void 0,
|
|
189
205
|
A: [
|
|
190
|
-
"data?.object
|
|
206
|
+
"isInstanceOf(AIChatType, data?.object)",
|
|
191
207
|
""
|
|
192
208
|
]
|
|
193
209
|
});
|
|
@@ -197,4 +213,4 @@ var getOrCreateChat = async (dispatch, space) => {
|
|
|
197
213
|
}));
|
|
198
214
|
return data.object;
|
|
199
215
|
};
|
|
200
|
-
//# sourceMappingURL=app-graph-builder-
|
|
216
|
+
//# sourceMappingURL=app-graph-builder-PSHIOW3Q.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/app-graph-builder.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport {\n Capabilities,\n contributes,\n createIntent,\n LayoutAction,\n type PromiseIntentDispatcher,\n type PluginContext,\n} from '@dxos/app-framework';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';\nimport { createExtension, ROOT_ID } from '@dxos/plugin-graph';\nimport { rxFromQuery } from '@dxos/plugin-space';\nimport { SPACE_TYPE, SpaceAction } from '@dxos/plugin-space/types';\nimport {\n type Space,\n Filter,\n fullyQualifiedId,\n getSpace,\n isSpace,\n Query,\n type QueryResult,\n isEchoObject,\n} from '@dxos/react-client/echo';\n\nimport { ASSISTANT_DIALOG, ASSISTANT_PLUGIN } from '../meta';\nimport { AIChatType, AssistantAction, CompanionTo, TemplateType } from '../types';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${ASSISTANT_PLUGIN}/assistant`,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n Option.map(() => [\n {\n id: `${LayoutAction.UpdateDialog._tag}/assistant/open`,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const client = context.getCapability(ClientCapabilities.Client);\n const layout = context.getCapability(Capabilities.Layout);\n const { graph } = context.getCapability(Capabilities.AppGraph);\n\n // TODO(burdon): Get space from workspace.\n // TODO(burdon): If need to create chat, then add to dispatch stack below.\n let chat: AIChatType | undefined;\n if (layout.active.length > 0) {\n const node = graph.getNode(layout.active[0]).pipe(Option.getOrNull);\n if (node) {\n const space = getSpace(node.data);\n if (space) {\n chat = await getOrCreateChat(dispatch, space);\n }\n }\n } else {\n const space = client.spaces.default;\n chat = await getOrCreateChat(dispatch, space);\n }\n\n if (!chat) {\n return;\n }\n\n await dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: ASSISTANT_DIALOG,\n options: {\n state: true,\n blockAlign: 'end',\n props: {\n chat,\n },\n },\n }),\n );\n },\n properties: {\n label: ['open assistant label', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--sparkle--regular',\n disposition: 'pin-end',\n position: 'hoist',\n keyBinding: {\n macos: 'shift+meta+k',\n windows: 'shift+ctrl+k',\n },\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n\n createExtension({\n id: `${ASSISTANT_PLUGIN}/object-chat-companion`,\n connector: (node) => {\n let query: QueryResult<AIChatType> | undefined;\n return Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (isEchoObject(node.data) ? Option.some(node.data) : Option.none())),\n Option.flatMap((object) => {\n const space = getSpace(object);\n return space ? Option.some({ space, object }) : Option.none();\n }),\n Option.map(({ space, object }) => {\n if (!query) {\n query = space.db.query(Query.select(Filter.ids(object.id)).targetOf(CompanionTo).source());\n }\n\n const chat = get(rxFromQuery(query))[0];\n return [\n {\n id: [fullyQualifiedId(object), 'assistant-chat'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: chat ?? 'assistant-chat',\n properties: {\n label: ['assistant chat label', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--sparkle--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ];\n }),\n Option.getOrElse(() => []),\n ),\n );\n },\n }),\n\n createExtension({\n id: `${ASSISTANT_PLUGIN}/root`,\n connector: (node) => {\n let query: QueryResult<TemplateType> | undefined;\n return Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) =>\n node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),\n ),\n Option.map((space) => {\n if (!query) {\n query = space.db.query(Query.type(TemplateType));\n }\n\n const templates = get(rxFromQuery(query));\n return templates.length > 0\n ? [\n {\n id: `${ASSISTANT_PLUGIN}/templates`,\n type: `${ASSISTANT_PLUGIN}/templates`,\n data: null,\n properties: {\n label: ['templates label', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--file-code--regular',\n space,\n },\n },\n ]\n : [];\n }),\n Option.getOrElse(() => []),\n ),\n );\n },\n }),\n\n createExtension({\n id: `${ASSISTANT_PLUGIN}/templates`,\n connector: (node) => {\n let query: QueryResult<TemplateType> | undefined;\n return Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) =>\n node.id === `${ASSISTANT_PLUGIN}/templates` && isSpace(node.properties.space)\n ? Option.some(node.properties.space)\n : Option.none(),\n ),\n Option.map((space) => {\n if (!query) {\n query = space.db.query(Query.type(TemplateType));\n }\n return get(rxFromQuery(query))\n .toSorted((a, b) => {\n const nameA = a.name ?? '';\n const nameB = b.name ?? '';\n return nameA.localeCompare(nameB);\n })\n .map((template) => ({\n id: fullyQualifiedId(template),\n type: `${ASSISTANT_PLUGIN}/template`,\n data: template,\n properties: {\n label: template.name ?? ['object placeholder', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--file-code--regular',\n },\n }));\n }),\n Option.getOrElse(() => []),\n ),\n );\n },\n }),\n ]);\n\n// TODO(burdon): Factor out.\nconst getOrCreateChat = async (dispatch: PromiseIntentDispatcher, space: Space): Promise<AIChatType | undefined> => {\n const { objects } = await space.db.query(Filter.type(AIChatType)).run();\n // console.log('objects', JSON.stringify(objects, null, 2));\n if (objects.length > 0) {\n // TODO(burdon): Is this the most recent?\n return objects[objects.length - 1];\n }\n\n const { data } = await dispatch(createIntent(AssistantAction.CreateChat, { space }));\n invariant(isInstanceOf(AIChatType, data?.object));\n await dispatch(createIntent(SpaceAction.AddObject, { target: space, object: data.object }));\n return data.object;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_types", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "ASSISTANT_PLUGIN", "actions", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "ROOT_ID", "some", "none", "map", "LayoutAction", "UpdateDialog", "_tag", "data", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "client", "ClientCapabilities", "Client", "layout", "Layout", "graph", "AppGraph", "chat", "active", "length", "getNode", "getOrNull", "space", "getSpace", "getOrCreateChat", "spaces", "default", "createIntent", "part", "subject", "ASSISTANT_DIALOG", "options", "state", "blockAlign", "props", "properties", "label", "ns", "icon", "disposition", "position", "keyBinding", "macos", "windows", "getOrElse", "connector", "query", "isEchoObject", "object", "db", "Query", "select", "Filter", "ids", "targetOf", "CompanionTo", "source", "rxFromQuery", "fullyQualifiedId", "join", "ATTENDABLE_PATH_SEPARATOR", "type", "PLANK_COMPANION_TYPE", "SPACE_TYPE", "isSpace", "TemplateType", "templates", "toSorted", "a", "b", "nameA", "name", "nameB", "localeCompare", "template", "objects", "AIChatType", "run", "AssistantAction", "CreateChat", "invariant", "isInstanceOf", "SpaceAction", "AddObject", "target"]
|
|
7
|
+
}
|