@dxos/plugin-assistant 0.8.2 → 0.8.3-main.7f5a14c

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.
Files changed (213) hide show
  1. package/dist/lib/browser/{AssistantDialog-K6POM23O.mjs → AssistantDialog-YCPMFK7Y.mjs} +5 -4
  2. package/dist/lib/browser/BlueprintContainer-4MEK52NT.mjs +204 -0
  3. package/dist/lib/browser/BlueprintContainer-4MEK52NT.mjs.map +7 -0
  4. package/dist/lib/browser/{ChatContainer-QTO4LE2C.mjs → ChatContainer-RYFYYEWI.mjs} +5 -4
  5. package/dist/lib/browser/{TemplateContainer-AKUYL4AV.mjs → TemplateContainer-QQHVOTSI.mjs} +2 -2
  6. package/dist/lib/browser/TemplateContainer-QQHVOTSI.mjs.map +7 -0
  7. package/dist/lib/browser/{ai-client-COXVUC6V.mjs → ai-client-MTCTMJ5N.mjs} +11 -7
  8. package/dist/lib/browser/ai-client-MTCTMJ5N.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-builder-YH4EGNBC.mjs → app-graph-builder-DBCVARVI.mjs} +20 -14
  10. package/dist/lib/browser/app-graph-builder-DBCVARVI.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-3F44MBHU.mjs → chunk-3TIEETB2.mjs} +1 -1
  12. package/dist/lib/browser/{chunk-3F44MBHU.mjs.map → chunk-3TIEETB2.mjs.map} +2 -2
  13. package/dist/lib/browser/chunk-AKYSTUBJ.mjs +16 -0
  14. package/dist/lib/browser/chunk-AKYSTUBJ.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-QTW7KVDO.mjs → chunk-DLWFPGZE.mjs} +65 -70
  16. package/dist/lib/browser/chunk-DLWFPGZE.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-USJBRB3H.mjs → chunk-WFZ4EPPI.mjs} +7 -5
  18. package/dist/lib/browser/{chunk-USJBRB3H.mjs.map → chunk-WFZ4EPPI.mjs.map} +3 -3
  19. package/dist/lib/browser/{chunk-IHEBFO5O.mjs → chunk-ZVHA24BL.mjs} +12 -11
  20. package/dist/lib/browser/chunk-ZVHA24BL.mjs.map +7 -0
  21. package/dist/lib/browser/index.mjs +37 -19
  22. package/dist/lib/browser/index.mjs.map +3 -3
  23. package/dist/lib/browser/{intent-resolver-63EAHENI.mjs → intent-resolver-ID5NOIIJ.mjs} +15 -14
  24. package/dist/lib/browser/intent-resolver-ID5NOIIJ.mjs.map +7 -0
  25. package/dist/lib/browser/meta.json +1 -1
  26. package/dist/lib/browser/{react-surface-XCV6NR75.mjs → react-surface-OD23FVUD.mjs} +26 -15
  27. package/dist/lib/browser/react-surface-OD23FVUD.mjs.map +7 -0
  28. package/dist/lib/browser/{settings-SHNQ4XXP.mjs → settings-FUYUBGSQ.mjs} +4 -4
  29. package/dist/lib/browser/settings-FUYUBGSQ.mjs.map +7 -0
  30. package/dist/lib/browser/types/index.mjs +1 -1
  31. package/dist/lib/node/{AssistantDialog-FDATKYE5.cjs → AssistantDialog-B5YKJOAF.cjs} +9 -8
  32. package/dist/lib/node/{AssistantDialog-FDATKYE5.cjs.map → AssistantDialog-B5YKJOAF.cjs.map} +1 -1
  33. package/dist/lib/node/BlueprintContainer-VD6EIWH7.cjs +229 -0
  34. package/dist/lib/node/BlueprintContainer-VD6EIWH7.cjs.map +7 -0
  35. package/dist/lib/node/{ChatContainer-5CLHJOIQ.cjs → ChatContainer-WFLTSAFA.cjs} +9 -8
  36. package/dist/lib/node/{ChatContainer-5CLHJOIQ.cjs.map → ChatContainer-WFLTSAFA.cjs.map} +1 -1
  37. package/dist/lib/node/{TemplateContainer-CTG2MB4W.cjs → TemplateContainer-JZF2DCCG.cjs} +5 -5
  38. package/dist/lib/node/TemplateContainer-JZF2DCCG.cjs.map +7 -0
  39. package/dist/lib/node/{ai-client-R2CGEYZW.cjs → ai-client-3XNIFMJX.cjs} +14 -10
  40. package/dist/lib/node/ai-client-3XNIFMJX.cjs.map +7 -0
  41. package/dist/lib/node/{app-graph-builder-PSHIOW3Q.cjs → app-graph-builder-VEPLBTML.cjs} +34 -28
  42. package/dist/lib/node/app-graph-builder-VEPLBTML.cjs.map +7 -0
  43. package/dist/lib/node/{chunk-RXPA2C2A.cjs → chunk-7TQAIKE2.cjs} +25 -24
  44. package/dist/lib/node/chunk-7TQAIKE2.cjs.map +7 -0
  45. package/dist/lib/node/chunk-BGRQNE3L.cjs +52 -0
  46. package/dist/lib/node/chunk-BGRQNE3L.cjs.map +7 -0
  47. package/dist/lib/node/{chunk-FLJWJ35M.cjs → chunk-DXBAFX6M.cjs} +13 -10
  48. package/dist/lib/node/{chunk-FLJWJ35M.cjs.map → chunk-DXBAFX6M.cjs.map} +3 -3
  49. package/dist/lib/node/{chunk-H4A42LNR.cjs → chunk-WR5L3TVB.cjs} +86 -92
  50. package/dist/lib/node/chunk-WR5L3TVB.cjs.map +7 -0
  51. package/dist/lib/node/{chunk-TS3H5OSX.cjs → chunk-ZP732NHS.cjs} +4 -4
  52. package/dist/lib/node/{chunk-TS3H5OSX.cjs.map → chunk-ZP732NHS.cjs.map} +2 -2
  53. package/dist/lib/node/index.cjs +69 -48
  54. package/dist/lib/node/index.cjs.map +3 -3
  55. package/dist/lib/node/{intent-resolver-66F7WLW6.cjs → intent-resolver-SDO4YKJK.cjs} +18 -16
  56. package/dist/lib/node/intent-resolver-SDO4YKJK.cjs.map +7 -0
  57. package/dist/lib/node/meta.json +1 -1
  58. package/dist/lib/node/{react-surface-TASAPRPQ.cjs → react-surface-FANQXIRI.cjs} +37 -27
  59. package/dist/lib/node/react-surface-FANQXIRI.cjs.map +7 -0
  60. package/dist/lib/node/{settings-ERKLO6IO.cjs → settings-PXPIPYJN.cjs} +7 -7
  61. package/dist/lib/node/settings-PXPIPYJN.cjs.map +7 -0
  62. package/dist/lib/node/types/index.cjs +14 -14
  63. package/dist/lib/node/types/index.cjs.map +1 -1
  64. package/dist/lib/node-esm/{AssistantDialog-PIMYK774.mjs → AssistantDialog-KPZZD7XC.mjs} +5 -4
  65. package/dist/lib/{browser/AssistantDialog-K6POM23O.mjs.map → node-esm/AssistantDialog-KPZZD7XC.mjs.map} +1 -1
  66. package/dist/lib/node-esm/BlueprintContainer-SVOKCRCP.mjs +205 -0
  67. package/dist/lib/node-esm/BlueprintContainer-SVOKCRCP.mjs.map +7 -0
  68. package/dist/lib/node-esm/{ChatContainer-QTC5NYE2.mjs → ChatContainer-WSMKUGS6.mjs} +5 -4
  69. package/dist/lib/{browser/ChatContainer-QTO4LE2C.mjs.map → node-esm/ChatContainer-WSMKUGS6.mjs.map} +1 -1
  70. package/dist/lib/node-esm/{TemplateContainer-IVDQ4XQG.mjs → TemplateContainer-SOEWY2ZN.mjs} +2 -2
  71. package/dist/lib/node-esm/TemplateContainer-SOEWY2ZN.mjs.map +7 -0
  72. package/dist/lib/node-esm/{ai-client-I5LXHMOZ.mjs → ai-client-YIP44I4D.mjs} +11 -7
  73. package/dist/lib/node-esm/ai-client-YIP44I4D.mjs.map +7 -0
  74. package/dist/lib/node-esm/{app-graph-builder-Z3GMMJMD.mjs → app-graph-builder-WJXDXLBQ.mjs} +20 -14
  75. package/dist/lib/node-esm/app-graph-builder-WJXDXLBQ.mjs.map +7 -0
  76. package/dist/lib/node-esm/{chunk-ZKBACPIW.mjs → chunk-24LIHQST.mjs} +12 -11
  77. package/dist/lib/node-esm/chunk-24LIHQST.mjs.map +7 -0
  78. package/dist/lib/node-esm/{chunk-QU626JMR.mjs → chunk-QFX6SFFZ.mjs} +7 -5
  79. package/dist/lib/node-esm/{chunk-QU626JMR.mjs.map → chunk-QFX6SFFZ.mjs.map} +3 -3
  80. package/dist/lib/node-esm/{chunk-SI5LOQEO.mjs → chunk-TTSMEWR6.mjs} +65 -70
  81. package/dist/lib/node-esm/chunk-TTSMEWR6.mjs.map +7 -0
  82. package/dist/lib/node-esm/{chunk-HLPGKJ7N.mjs → chunk-VXGO6Q2L.mjs} +1 -1
  83. package/dist/lib/node-esm/{chunk-HLPGKJ7N.mjs.map → chunk-VXGO6Q2L.mjs.map} +2 -2
  84. package/dist/lib/node-esm/chunk-ZKTIHNT7.mjs +18 -0
  85. package/dist/lib/node-esm/chunk-ZKTIHNT7.mjs.map +7 -0
  86. package/dist/lib/node-esm/index.mjs +37 -19
  87. package/dist/lib/node-esm/index.mjs.map +3 -3
  88. package/dist/lib/node-esm/{intent-resolver-X3PWH7KM.mjs → intent-resolver-75REJDDQ.mjs} +15 -14
  89. package/dist/lib/node-esm/intent-resolver-75REJDDQ.mjs.map +7 -0
  90. package/dist/lib/node-esm/meta.json +1 -1
  91. package/dist/lib/node-esm/{react-surface-QMIQCXUM.mjs → react-surface-NAN4SDCE.mjs} +26 -15
  92. package/dist/lib/node-esm/react-surface-NAN4SDCE.mjs.map +7 -0
  93. package/dist/lib/node-esm/{settings-IVQRZUCU.mjs → settings-JHMKX3UV.mjs} +4 -4
  94. package/dist/lib/node-esm/settings-JHMKX3UV.mjs.map +7 -0
  95. package/dist/lib/node-esm/types/index.mjs +1 -1
  96. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/ai-client.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  102. package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts.map +1 -1
  103. package/dist/types/src/components/BlueprintContainer.d.ts +9 -0
  104. package/dist/types/src/components/BlueprintContainer.d.ts.map +1 -0
  105. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts +8 -3
  106. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts.map +1 -1
  107. package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/Prompt/PromptBar.stories.d.ts.map +1 -1
  109. package/dist/types/src/components/TemplateContainer.d.ts +2 -2
  110. package/dist/types/src/components/TemplateContainer.d.ts.map +1 -1
  111. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -1
  112. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +1 -1
  113. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/Thread/ThreadMessage.d.ts +2 -2
  115. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -1
  116. package/dist/types/src/components/index.d.ts +4 -2
  117. package/dist/types/src/components/index.d.ts.map +1 -1
  118. package/dist/types/src/hooks/useContextProvider.d.ts.map +1 -1
  119. package/dist/types/src/hooks/useMessageQueue.d.ts +6 -6
  120. package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -1
  121. package/dist/types/src/index.d.ts +1 -0
  122. package/dist/types/src/index.d.ts.map +1 -1
  123. package/dist/types/src/parser/filter-generator.d.ts +1 -1
  124. package/dist/types/src/parser/filter-generator.d.ts.map +1 -1
  125. package/dist/types/src/stories/Prompt.stories.d.ts.map +1 -1
  126. package/dist/types/src/stories/Query.stories.d.ts.map +1 -1
  127. package/dist/types/src/stories/Research.stories.d.ts +1 -1
  128. package/dist/types/src/stories/Research.stories.d.ts.map +1 -1
  129. package/dist/types/src/stories/testing.d.ts.map +1 -1
  130. package/dist/types/src/testing/index.d.ts +1 -1
  131. package/dist/types/src/testing/index.d.ts.map +1 -1
  132. package/dist/types/src/testing/test-blueprint.d.ts +8 -0
  133. package/dist/types/src/testing/test-blueprint.d.ts.map +1 -0
  134. package/dist/types/src/tools/openapi.d.ts.map +1 -1
  135. package/dist/types/src/translations.d.ts +13 -62
  136. package/dist/types/src/translations.d.ts.map +1 -1
  137. package/dist/types/src/types/chat.d.ts +3 -3
  138. package/dist/types/src/types/chat.d.ts.map +1 -1
  139. package/dist/types/src/types/service.d.ts +139 -9
  140. package/dist/types/src/types/service.d.ts.map +1 -1
  141. package/dist/types/src/types/template.d.ts.map +1 -1
  142. package/dist/types/src/types/types.d.ts +12 -6
  143. package/dist/types/src/types/types.d.ts.map +1 -1
  144. package/package.json +70 -68
  145. package/src/AssistantPlugin.tsx +9 -9
  146. package/src/capabilities/ai-client.ts +10 -5
  147. package/src/capabilities/app-graph-builder.ts +38 -35
  148. package/src/capabilities/capabilities.ts +1 -0
  149. package/src/capabilities/intent-resolver.ts +15 -7
  150. package/src/capabilities/react-surface.tsx +27 -20
  151. package/src/capabilities/settings.ts +2 -2
  152. package/src/components/AmbientDialog/AmbientDialog.stories.tsx +1 -0
  153. package/src/components/BlueprintContainer.tsx +160 -0
  154. package/src/components/BlueprintEditor/BlueprintEditor.stories.tsx +2 -2
  155. package/src/components/BlueprintEditor/BlueprintEditor.tsx +31 -22
  156. package/src/components/Prompt/Prompt.stories.tsx +1 -0
  157. package/src/components/Prompt/PromptBar.stories.tsx +1 -0
  158. package/src/components/TemplateContainer.tsx +5 -2
  159. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +2 -2
  160. package/src/components/TemplateEditor/TemplateForm.stories.tsx +2 -2
  161. package/src/components/Thread/ThreadContainer.stories.tsx +7 -8
  162. package/src/components/Thread/ThreadContainer.tsx +2 -3
  163. package/src/components/Thread/ThreadMessage.tsx +3 -3
  164. package/src/components/index.ts +1 -0
  165. package/src/hooks/useContextProvider.ts +14 -18
  166. package/src/hooks/useMessageQueue.ts +3 -2
  167. package/src/index.ts +1 -0
  168. package/src/parser/filter-generator.test.ts +1 -1
  169. package/src/parser/filter-generator.ts +1 -1
  170. package/src/stories/Prompt.stories.tsx +1 -0
  171. package/src/stories/Query.stories.tsx +116 -50
  172. package/src/stories/Research.stories.tsx +26 -39
  173. package/src/stories/test-data.ts +9 -9
  174. package/src/stories/testing.ts +1 -5
  175. package/src/testing/index.ts +1 -1
  176. package/src/testing/{blueprint.ts → test-blueprint.ts} +28 -17
  177. package/src/testing/test-services.ts +6 -6
  178. package/src/tools/function.ts +2 -2
  179. package/src/tools/openapi.test.ts +6 -12
  180. package/src/tools/openapi.ts +5 -5
  181. package/src/translations.ts +9 -2
  182. package/src/types/chat.ts +3 -4
  183. package/src/types/service.ts +8 -4
  184. package/src/types/template.ts +4 -1
  185. package/src/types/types.ts +3 -3
  186. package/dist/lib/browser/TemplateContainer-AKUYL4AV.mjs.map +0 -7
  187. package/dist/lib/browser/ai-client-COXVUC6V.mjs.map +0 -7
  188. package/dist/lib/browser/app-graph-builder-YH4EGNBC.mjs.map +0 -7
  189. package/dist/lib/browser/chunk-IHEBFO5O.mjs.map +0 -7
  190. package/dist/lib/browser/chunk-QTW7KVDO.mjs.map +0 -7
  191. package/dist/lib/browser/intent-resolver-63EAHENI.mjs.map +0 -7
  192. package/dist/lib/browser/react-surface-XCV6NR75.mjs.map +0 -7
  193. package/dist/lib/browser/settings-SHNQ4XXP.mjs.map +0 -7
  194. package/dist/lib/node/TemplateContainer-CTG2MB4W.cjs.map +0 -7
  195. package/dist/lib/node/ai-client-R2CGEYZW.cjs.map +0 -7
  196. package/dist/lib/node/app-graph-builder-PSHIOW3Q.cjs.map +0 -7
  197. package/dist/lib/node/chunk-H4A42LNR.cjs.map +0 -7
  198. package/dist/lib/node/chunk-RXPA2C2A.cjs.map +0 -7
  199. package/dist/lib/node/intent-resolver-66F7WLW6.cjs.map +0 -7
  200. package/dist/lib/node/react-surface-TASAPRPQ.cjs.map +0 -7
  201. package/dist/lib/node/settings-ERKLO6IO.cjs.map +0 -7
  202. package/dist/lib/node-esm/TemplateContainer-IVDQ4XQG.mjs.map +0 -7
  203. package/dist/lib/node-esm/ai-client-I5LXHMOZ.mjs.map +0 -7
  204. package/dist/lib/node-esm/app-graph-builder-Z3GMMJMD.mjs.map +0 -7
  205. package/dist/lib/node-esm/chunk-SI5LOQEO.mjs.map +0 -7
  206. package/dist/lib/node-esm/chunk-ZKBACPIW.mjs.map +0 -7
  207. package/dist/lib/node-esm/intent-resolver-X3PWH7KM.mjs.map +0 -7
  208. package/dist/lib/node-esm/react-surface-QMIQCXUM.mjs.map +0 -7
  209. package/dist/lib/node-esm/settings-IVQRZUCU.mjs.map +0 -7
  210. package/dist/types/src/testing/blueprint.d.ts +0 -7
  211. package/dist/types/src/testing/blueprint.d.ts.map +0 -1
  212. /package/dist/lib/{node-esm/AssistantDialog-PIMYK774.mjs.map → browser/AssistantDialog-YCPMFK7Y.mjs.map} +0 -0
  213. /package/dist/lib/{node-esm/ChatContainer-QTC5NYE2.mjs.map → browser/ChatContainer-RYFYYEWI.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 { Blueprint } from '@dxos/assistant';\nimport { Filter, type Key, Obj, Query } from '@dxos/echo';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId, getSpace, getTypename } from '@dxos/react-client/echo';\n\nimport {\n AssistantDialog,\n AssistantSettings,\n BlueprintContainer,\n ChatContainer,\n PromptSettings,\n TemplateContainer,\n} 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_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: Obj.Any; subject: AIChatType | 'assistant-chat' } =>\n Obj.isObject(data.companionTo) &&\n (Obj.instanceOf(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 Key.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}/blueprint`,\n role: 'article',\n filter: (data): data is { subject: Blueprint } => Obj.instanceOf(Blueprint, data.subject),\n component: ({ data, role }) => <BlueprintContainer role={role} blueprint={data.subject} />,\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_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}/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", "Blueprint", "Filter", "Obj", "Query", "SettingsStore", "SpaceAction", "fullyQualifiedId", "getSpace", "getTypename", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "ASSISTANT_PLUGIN", "role", "filter", "data", "subject", "SettingsStore", "prefix", "component", "AssistantSettings", "settings", "value", "Obj", "instanceOf", "AIChatType", "variant", "ChatContainer", "chat", "isObject", "companionTo", "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", "Blueprint", "BlueprintContainer", "blueprint", "TemplateType", "TemplateContainer", "template", "ASSISTANT_DIALOG", "AssistantDialog", "props", "PromptSettings"]
7
+ }
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  AssistantSettingsSchema
3
- } from "./chunk-IHEBFO5O.mjs";
3
+ } from "./chunk-ZVHA24BL.mjs";
4
4
  import {
5
- ASSISTANT_PLUGIN
5
+ meta
6
6
  } from "./chunk-XOZ7YMO3.mjs";
7
7
 
8
8
  // packages/plugins/plugin-assistant/src/capabilities/settings.ts
@@ -11,12 +11,12 @@ import { live } from "@dxos/live-object";
11
11
  var settings_default = () => {
12
12
  const settings = live({});
13
13
  return contributes(Capabilities.Settings, {
14
+ prefix: meta.id,
14
15
  schema: AssistantSettingsSchema,
15
- prefix: ASSISTANT_PLUGIN,
16
16
  value: settings
17
17
  });
18
18
  };
19
19
  export {
20
20
  settings_default as default
21
21
  };
22
- //# sourceMappingURL=settings-SHNQ4XXP.mjs.map
22
+ //# sourceMappingURL=settings-FUYUBGSQ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/settings.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { live } from '@dxos/live-object';\n\nimport { meta } from '../meta';\nimport { type AssistantSettingsProps, AssistantSettingsSchema } from '../types';\n\nexport default () => {\n const settings = live<AssistantSettingsProps>({});\n\n return contributes(Capabilities.Settings, {\n prefix: meta.id,\n schema: AssistantSettingsSchema,\n value: settings,\n });\n};\n"],
5
+ "mappings": ";;;;;;;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,YAAY;AAKrB,IAAA,mBAAe,MAAA;AACb,QAAMC,WAAWC,KAA6B,CAAC,CAAA;AAE/C,SAAOC,YAAYC,aAAaC,UAAU;IACxCC,QAAQC,KAAKC;IACbC,QAAQC;IACRC,OAAOV;EACT,CAAA;AACF;",
6
+ "names": ["Capabilities", "contributes", "live", "settings", "live", "contributes", "Capabilities", "Settings", "prefix", "meta", "id", "schema", "AssistantSettingsSchema", "value"]
7
+ }
@@ -12,7 +12,7 @@ import {
12
12
  TemplateKinds,
13
13
  TemplateType,
14
14
  categoryIcons
15
- } from "../chunk-IHEBFO5O.mjs";
15
+ } from "../chunk-ZVHA24BL.mjs";
16
16
  import "../chunk-XOZ7YMO3.mjs";
17
17
  export {
18
18
  AIChatType,
@@ -26,16 +26,17 @@ 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 AssistantDialog_FDATKYE5_exports = {};
30
- __export(AssistantDialog_FDATKYE5_exports, {
29
+ var AssistantDialog_B5YKJOAF_exports = {};
30
+ __export(AssistantDialog_B5YKJOAF_exports, {
31
31
  AssistantDialog: () => AssistantDialog,
32
32
  default: () => AssistantDialog_default
33
33
  });
34
- module.exports = __toCommonJS(AssistantDialog_FDATKYE5_exports);
34
+ module.exports = __toCommonJS(AssistantDialog_B5YKJOAF_exports);
35
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");
36
+ var import_chunk_WR5L3TVB = require("./chunk-WR5L3TVB.cjs");
37
+ var import_chunk_7TQAIKE2 = require("./chunk-7TQAIKE2.cjs");
38
+ var import_chunk_BGRQNE3L = require("./chunk-BGRQNE3L.cjs");
39
+ var import_chunk_ZP732NHS = require("./chunk-ZP732NHS.cjs");
39
40
  var import_chunk_P74TWGMG = require("./chunk-P74TWGMG.cjs");
40
41
  var import_tracking = require("@preact-signals/safe-react/tracking");
41
42
  var import_react = __toESM(require("react"));
@@ -53,7 +54,7 @@ var AssistantDialog = ({ chat }) => {
53
54
  open,
54
55
  onOpenChange: setOpen,
55
56
  title: t("assistant dialog title")
56
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_H4A42LNR.ThreadContainer, {
57
+ }, /* @__PURE__ */ import_react.default.createElement(import_chunk_WR5L3TVB.ThreadContainer, {
57
58
  part: "dialog",
58
59
  chat,
59
60
  onOpenChange: setOpen,
@@ -69,4 +70,4 @@ var AssistantDialog_default = AssistantDialog;
69
70
  0 && (module.exports = {
70
71
  AssistantDialog
71
72
  });
72
- //# sourceMappingURL=AssistantDialog-FDATKYE5.cjs.map
73
+ //# sourceMappingURL=AssistantDialog-B5YKJOAF.cjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/AssistantDialog.tsx"],
4
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;",
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
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
7
  }
@@ -0,0 +1,229 @@
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 BlueprintContainer_VD6EIWH7_exports = {};
30
+ __export(BlueprintContainer_VD6EIWH7_exports, {
31
+ BlueprintContainer: () => BlueprintContainer,
32
+ EXA_API_KEY: () => EXA_API_KEY,
33
+ default: () => BlueprintContainer_default
34
+ });
35
+ module.exports = __toCommonJS(BlueprintContainer_VD6EIWH7_exports);
36
+ var import_chunk_BGRQNE3L = require("./chunk-BGRQNE3L.cjs");
37
+ var import_chunk_ZP732NHS = require("./chunk-ZP732NHS.cjs");
38
+ var import_chunk_P74TWGMG = require("./chunk-P74TWGMG.cjs");
39
+ var import_tracking = require("@preact-signals/safe-react/tracking");
40
+ var import_json5 = __toESM(require("json5"));
41
+ var import_react = __toESM(require("react"));
42
+ var import_ai = require("@dxos/ai");
43
+ var import_app_framework = require("@dxos/app-framework");
44
+ var import_assistant = require("@dxos/assistant");
45
+ var import_echo = require("@dxos/client/echo");
46
+ var import_echo2 = require("@dxos/echo");
47
+ var import_react_ui = require("@dxos/react-ui");
48
+ var import_react_ui_attention = require("@dxos/react-ui-attention");
49
+ var import_react_ui_stack = require("@dxos/react-ui-stack");
50
+ var import_tracking2 = require("@preact-signals/safe-react/tracking");
51
+ var import_react2 = __toESM(require("react"));
52
+ var import_assistant2 = require("@dxos/assistant");
53
+ var import_echo3 = require("@dxos/echo");
54
+ var import_react_ui2 = require("@dxos/react-ui");
55
+ var import_react_ui_editor = require("@dxos/react-ui-editor");
56
+ var import_react_ui_theme = require("@dxos/react-ui-theme");
57
+ var BlueprintEditor = /* @__PURE__ */ (0, import_react2.forwardRef)(({ classNames, blueprint }, forwardedRef) => {
58
+ var _effect = (0, import_tracking2.useSignals)();
59
+ try {
60
+ const { themeMode } = (0, import_react_ui2.useThemeContext)();
61
+ const { parentRef, view } = (0, import_react_ui_editor.useTextEditor)({
62
+ initialValue: JSON.stringify(blueprint, null, 2),
63
+ extensions: [
64
+ (0, import_react_ui_editor.createBasicExtensions)({
65
+ lineNumbers: true,
66
+ lineWrapping: false,
67
+ monospace: true,
68
+ scrollPastEnd: true
69
+ }),
70
+ (0, import_react_ui_editor.createThemeExtensions)({
71
+ themeMode,
72
+ syntaxHighlighting: true
73
+ }),
74
+ (0, import_react_ui_editor.createJsonExtensions)({
75
+ schema: import_echo3.Type.toJsonSchema(import_assistant2.BlueprintDefinition, {
76
+ strict: true
77
+ })
78
+ })
79
+ ]
80
+ });
81
+ (0, import_react2.useImperativeHandle)(forwardedRef, () => view, [
82
+ view
83
+ ]);
84
+ return /* @__PURE__ */ import_react2.default.createElement("div", {
85
+ ref: parentRef,
86
+ className: (0, import_react_ui_theme.mx)("overflow-hidden", classNames)
87
+ });
88
+ } finally {
89
+ _effect.f();
90
+ }
91
+ });
92
+ var EXA_API_KEY = "9c7e17ff-0c85-4cd5-827a-8b489f139e03";
93
+ var parseBlueprint = (text) => {
94
+ try {
95
+ const json = import_json5.default.parse(text);
96
+ const { steps } = json;
97
+ return {
98
+ steps
99
+ };
100
+ } catch (error) {
101
+ }
102
+ };
103
+ var BlueprintContainer = ({ role, blueprint }) => {
104
+ var _effect = (0, import_tracking.useSignals)();
105
+ try {
106
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_P74TWGMG.meta.id);
107
+ const aiClient = (0, import_app_framework.useCapability)(import_chunk_ZP732NHS.AssistantCapabilities.AiClient);
108
+ const selectionManager = (0, import_react_ui_attention.useSelectionManager)();
109
+ const [definition, setDefinition] = (0, import_react.useState)();
110
+ (0, import_react.useEffect)(() => {
111
+ setDefinition({
112
+ steps: blueprint.steps.map(({ instructions, tools }) => ({
113
+ instructions,
114
+ tools
115
+ }))
116
+ });
117
+ }, [
118
+ blueprint
119
+ ]);
120
+ const editorRef = (0, import_react.useRef)(void 0);
121
+ const toolRegistry = (0, import_react.useMemo)(() => {
122
+ const space = (0, import_echo.getSpace)(blueprint);
123
+ if (!space) {
124
+ return;
125
+ }
126
+ const queue = space.queues.create();
127
+ return new import_ai.ToolRegistry([
128
+ (0, import_assistant.createExaTool)({
129
+ apiKey: EXA_API_KEY
130
+ }),
131
+ (0, import_assistant.createLocalSearchTool)(space.db, queue),
132
+ (0, import_assistant.createGraphWriterTool)({
133
+ db: space.db,
134
+ queue,
135
+ schema: [],
136
+ onDone: async (objects) => {
137
+ queue.append(objects);
138
+ }
139
+ })
140
+ ]);
141
+ }, [
142
+ blueprint
143
+ ]);
144
+ const formatAndSave = () => {
145
+ if (!blueprint) {
146
+ return;
147
+ }
148
+ const text = editorRef.current?.state.doc.toString();
149
+ if (!text) {
150
+ return;
151
+ }
152
+ const definition2 = parseBlueprint(text);
153
+ if (!definition2) {
154
+ return;
155
+ }
156
+ setDefinition(definition2);
157
+ const formatted = JSON.stringify(definition2, null, 2);
158
+ editorRef.current?.dispatch({
159
+ changes: {
160
+ from: 0,
161
+ to: text.length,
162
+ insert: formatted
163
+ }
164
+ });
165
+ blueprint.steps.length = 0;
166
+ for (const step of definition2.steps) {
167
+ blueprint.steps.push({
168
+ id: import_echo2.Key.ObjectId.random(),
169
+ instructions: step.instructions,
170
+ tools: step.tools
171
+ });
172
+ }
173
+ return definition2;
174
+ };
175
+ const handleSave = (0, import_react.useCallback)(() => {
176
+ const definition2 = formatAndSave();
177
+ if (!definition2) {
178
+ return;
179
+ }
180
+ setDefinition(definition2);
181
+ }, [
182
+ blueprint
183
+ ]);
184
+ const handleRun = (0, import_react.useCallback)(async () => {
185
+ if (!aiClient?.value || !toolRegistry) {
186
+ return;
187
+ }
188
+ const definition2 = formatAndSave();
189
+ if (!definition2) {
190
+ return;
191
+ }
192
+ const input = Array.from((0, import_react_ui_attention.getSelectionSet)(selectionManager)).map((id) => import_echo2.DXN.fromLocalObjectId(id));
193
+ if (!input.length) {
194
+ return;
195
+ }
196
+ const blueprint2 = import_assistant.BlueprintParser.create().parse(definition2);
197
+ const machine = new import_assistant.BlueprintMachine(toolRegistry, blueprint2).setLogger(new import_assistant.BlueprintLoggerAdapter());
198
+ await machine.runToCompletion({
199
+ aiClient: aiClient.value,
200
+ input
201
+ });
202
+ }, [
203
+ aiClient.value,
204
+ toolRegistry
205
+ ]);
206
+ return /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
207
+ role,
208
+ toolbar: true
209
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Root, {
210
+ classNames: "border-be border-subduedSeparator"
211
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Button, {
212
+ onClick: handleSave
213
+ }, t("button save")), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Button, {
214
+ onClick: handleRun
215
+ }, t("button run"))), definition && /* @__PURE__ */ import_react.default.createElement(BlueprintEditor, {
216
+ ref: editorRef,
217
+ blueprint: definition
218
+ }));
219
+ } finally {
220
+ _effect.f();
221
+ }
222
+ };
223
+ var BlueprintContainer_default = BlueprintContainer;
224
+ // Annotate the CommonJS export names for ESM import in node:
225
+ 0 && (module.exports = {
226
+ BlueprintContainer,
227
+ EXA_API_KEY
228
+ });
229
+ //# sourceMappingURL=BlueprintContainer-VD6EIWH7.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/BlueprintContainer.tsx", "../../../src/components/BlueprintEditor/BlueprintEditor.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport JSON5 from 'json5';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { ToolRegistry } from '@dxos/ai';\nimport { useCapability } from '@dxos/app-framework';\nimport {\n type Blueprint,\n type BlueprintDefinition,\n BlueprintLoggerAdapter,\n BlueprintParser,\n BlueprintMachine,\n createLocalSearchTool,\n createExaTool,\n createGraphWriterTool,\n} from '@dxos/assistant';\nimport { getSpace } from '@dxos/client/echo';\nimport { DXN, Key } from '@dxos/echo';\nimport { Toolbar, useTranslation } from '@dxos/react-ui';\nimport { getSelectionSet, useSelectionManager } from '@dxos/react-ui-attention';\nimport { StackItem, type StackItemContentProps } from '@dxos/react-ui-stack';\n\nimport { BlueprintEditor } from './BlueprintEditor';\nimport { AssistantCapabilities } from '../capabilities';\nimport { meta } from '../meta';\n\n// TODO(burdon): Move to config.\nexport const EXA_API_KEY = '9c7e17ff-0c85-4cd5-827a-8b489f139e03';\n\n// TODO(burdon): Validate.\nconst parseBlueprint = (text: string): BlueprintDefinition | undefined => {\n try {\n const json = JSON5.parse(text);\n const { steps } = json;\n return { steps };\n } catch (error) {\n // Ignore.\n }\n};\n\nexport const BlueprintContainer = ({\n role,\n blueprint,\n}: Pick<StackItemContentProps, 'role'> & { blueprint: Blueprint }) => {\n const { t } = useTranslation(meta.id);\n const aiClient = useCapability(AssistantCapabilities.AiClient);\n const selectionManager = useSelectionManager();\n const [definition, setDefinition] = useState<BlueprintDefinition>();\n useEffect(() => {\n setDefinition({\n steps: blueprint.steps.map(({ instructions, tools }) => ({ instructions, tools })),\n });\n }, [blueprint]);\n\n const editorRef = useRef<EditorView | undefined>(undefined);\n\n // TODO(burdon): Factor out.\n const toolRegistry = useMemo(() => {\n const space = getSpace(blueprint);\n if (!space) {\n return;\n }\n\n // TODO(burdon): How should the queue be created?\n const queue = space.queues.create();\n\n return new ToolRegistry([\n createExaTool({ apiKey: EXA_API_KEY }),\n createLocalSearchTool(space.db, queue),\n createGraphWriterTool({\n db: space.db,\n queue,\n schema: [], // TODO(burdon): Get schema from client/blueprint?\n onDone: async (objects) => {\n queue.append(objects);\n },\n }),\n ]);\n }, [blueprint]);\n\n const formatAndSave = (): BlueprintDefinition | undefined => {\n if (!blueprint) {\n return;\n }\n\n const text = editorRef.current?.state.doc.toString();\n if (!text) {\n return;\n }\n\n const definition = parseBlueprint(text);\n if (!definition) {\n return;\n }\n\n setDefinition(definition);\n const formatted = JSON.stringify(definition, null, 2);\n editorRef.current?.dispatch({\n changes: { from: 0, to: text.length, insert: formatted },\n });\n\n blueprint.steps.length = 0;\n for (const step of definition.steps) {\n blueprint.steps.push({\n id: Key.ObjectId.random(),\n instructions: step.instructions,\n tools: step.tools,\n });\n }\n\n return definition;\n };\n\n // TODO(burdon): Save raw blueprint separately from parsed blueprint? (like Script).\n const handleSave = useCallback(() => {\n const definition = formatAndSave();\n if (!definition) {\n return;\n }\n\n setDefinition(definition);\n }, [blueprint]);\n\n const handleRun = useCallback(async () => {\n if (!aiClient?.value || !toolRegistry) {\n return;\n }\n\n const definition = formatAndSave();\n if (!definition) {\n return;\n }\n\n // Get input from selection.\n const input = Array.from(getSelectionSet(selectionManager)).map((id) => DXN.fromLocalObjectId(id));\n if (!input.length) {\n return;\n }\n\n const blueprint = BlueprintParser.create().parse(definition);\n const machine = new BlueprintMachine(toolRegistry, blueprint).setLogger(new BlueprintLoggerAdapter());\n await machine.runToCompletion({ aiClient: aiClient.value, input });\n }, [aiClient.value, toolRegistry]);\n\n return (\n <StackItem.Content role={role} toolbar>\n <Toolbar.Root classNames='border-be border-subduedSeparator'>\n <Toolbar.Button onClick={handleSave}>{t('button save')}</Toolbar.Button>\n <Toolbar.Button onClick={handleRun}>{t('button run')}</Toolbar.Button>\n </Toolbar.Root>\n {definition && <BlueprintEditor ref={editorRef} blueprint={definition} />}\n </StackItem.Content>\n );\n};\n\nexport default BlueprintContainer;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useImperativeHandle } from 'react';\n\nimport { BlueprintDefinition } from '@dxos/assistant';\nimport { Type } from '@dxos/echo';\nimport { useThemeContext, type ThemedClassName } from '@dxos/react-ui';\nimport {\n type EditorView,\n createBasicExtensions,\n createJsonExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type BlueprintEditorProps = ThemedClassName<{\n blueprint: BlueprintDefinition;\n}>;\n\n// TODO(burdon): Factor out JsonEditor.\nexport const BlueprintEditor = forwardRef<EditorView | undefined, BlueprintEditorProps>(\n ({ classNames, blueprint }, forwardedRef) => {\n const { themeMode } = useThemeContext();\n const { parentRef, view } = useTextEditor({\n initialValue: JSON.stringify(blueprint, null, 2),\n extensions: [\n createBasicExtensions({\n lineNumbers: true,\n lineWrapping: false,\n monospace: true,\n scrollPastEnd: true,\n }),\n createThemeExtensions({\n themeMode,\n syntaxHighlighting: true,\n }),\n createJsonExtensions({\n schema: Type.toJsonSchema(BlueprintDefinition, { strict: true }),\n }),\n ],\n });\n\n useImperativeHandle(forwardedRef, () => view, [view]);\n\n return <div ref={parentRef} className={mx('overflow-hidden', classNames)} />;\n },\n);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,mBAAkB;AAClB,mBAAyE;AAEzE,gBAA6B;AAC7B,2BAA8B;AAC9B,uBASO;AACP,kBAAyB;AACzB,IAAAA,eAAyB;AACzB,sBAAwC;AACxC,gCAAqD;AACrD,4BAAsD;;ACpBtD,IAAAC,gBAAuD;AAEvD,IAAAC,oBAAoC;AACpC,IAAAF,eAAqB;AACrB,IAAAG,mBAAsD;AACtD,6BAMO;AACP,4BAAmB;AAOZ,IAAMC,kBAAkBC,8CAC7B,CAAC,EAAEC,YAAYC,UAAS,GAAIC,iBAAAA;;;AAC1B,UAAM,EAAEC,UAAS,QAAKC,kCAAAA;AACtB,UAAM,EAAEC,WAAWC,KAAI,QAAKC,sCAAc;MACxCC,cAAcC,KAAKC,UAAUT,WAAW,MAAM,CAAA;MAC9CU,YAAY;YACVC,8CAAsB;UACpBC,aAAa;UACbC,cAAc;UACdC,WAAW;UACXC,eAAe;QACjB,CAAA;YACAC,8CAAsB;UACpBd;UACAe,oBAAoB;QACtB,CAAA;YACAC,6CAAqB;UACnBC,QAAQC,kBAAKC,aAAaC,uCAAqB;YAAEC,QAAQ;UAAK,CAAA;QAChE,CAAA;;IAEJ,CAAA;AAEAC,2CAAoBvB,cAAc,MAAMI,MAAM;MAACA;KAAK;AAEpD,WAAO,8BAAAoB,QAAA,cAACC,OAAAA;MAAIC,KAAKvB;MAAWwB,eAAWC,0BAAG,mBAAmB9B,UAAAA;;;;;AAC/D,CAAA;ADjBK,IAAM+B,cAAc;AAG3B,IAAMC,iBAAiB,CAACC,SAAAA;AACtB,MAAI;AACF,UAAMC,OAAOC,aAAAA,QAAMC,MAAMH,IAAAA;AACzB,UAAM,EAAEI,MAAK,IAAKH;AAClB,WAAO;MAAEG;IAAM;EACjB,SAASC,OAAO;EAEhB;AACF;AAEO,IAAMC,qBAAqB,CAAC,EACjCC,MACAvC,UAAS,MACsD;;;AAC/D,UAAM,EAAEwC,EAAC,QAAKC,gCAAeC,2BAAKC,EAAE;AACpC,UAAMC,eAAWC,oCAAcC,4CAAsBC,QAAQ;AAC7D,UAAMC,uBAAmBC,+CAAAA;AACzB,UAAM,CAACC,YAAYC,aAAAA,QAAiBC,uBAAAA;AACpCC,gCAAU,MAAA;AACRF,oBAAc;QACZf,OAAOpC,UAAUoC,MAAMkB,IAAI,CAAC,EAAEC,cAAcC,MAAK,OAAQ;UAAED;UAAcC;QAAM,EAAA;MACjF,CAAA;IACF,GAAG;MAACxD;KAAU;AAEd,UAAMyD,gBAAYC,qBAA+BC,MAAAA;AAGjD,UAAMC,mBAAeC,sBAAQ,MAAA;AAC3B,YAAMC,YAAQC,sBAAS/D,SAAAA;AACvB,UAAI,CAAC8D,OAAO;AACV;MACF;AAGA,YAAME,QAAQF,MAAMG,OAAOC,OAAM;AAEjC,aAAO,IAAIC,uBAAa;YACtBC,gCAAc;UAAEC,QAAQvC;QAAY,CAAA;YACpCwC,wCAAsBR,MAAMS,IAAIP,KAAAA;YAChCQ,wCAAsB;UACpBD,IAAIT,MAAMS;UACVP;UACA7C,QAAQ,CAAA;UACRsD,QAAQ,OAAOC,YAAAA;AACbV,kBAAMW,OAAOD,OAAAA;UACf;QACF,CAAA;OACD;IACH,GAAG;MAAC1E;KAAU;AAEd,UAAM4E,gBAAgB,MAAA;AACpB,UAAI,CAAC5E,WAAW;AACd;MACF;AAEA,YAAMgC,OAAOyB,UAAUoB,SAASC,MAAMC,IAAIC,SAAAA;AAC1C,UAAI,CAAChD,MAAM;AACT;MACF;AAEA,YAAMkB,cAAanB,eAAeC,IAAAA;AAClC,UAAI,CAACkB,aAAY;AACf;MACF;AAEAC,oBAAcD,WAAAA;AACd,YAAM+B,YAAYzE,KAAKC,UAAUyC,aAAY,MAAM,CAAA;AACnDO,gBAAUoB,SAASK,SAAS;QAC1BC,SAAS;UAAEC,MAAM;UAAGC,IAAIrD,KAAKsD;UAAQC,QAAQN;QAAU;MACzD,CAAA;AAEAjF,gBAAUoC,MAAMkD,SAAS;AACzB,iBAAWE,QAAQtC,YAAWd,OAAO;AACnCpC,kBAAUoC,MAAMqD,KAAK;UACnB9C,IAAI+C,iBAAIC,SAASC,OAAM;UACvBrC,cAAciC,KAAKjC;UACnBC,OAAOgC,KAAKhC;QACd,CAAA;MACF;AAEA,aAAON;IACT;AAGA,UAAM2C,iBAAaC,0BAAY,MAAA;AAC7B,YAAM5C,cAAa0B,cAAAA;AACnB,UAAI,CAAC1B,aAAY;AACf;MACF;AAEAC,oBAAcD,WAAAA;IAChB,GAAG;MAAClD;KAAU;AAEd,UAAM+F,gBAAYD,0BAAY,YAAA;AAC5B,UAAI,CAAClD,UAAUoD,SAAS,CAACpC,cAAc;AACrC;MACF;AAEA,YAAMV,cAAa0B,cAAAA;AACnB,UAAI,CAAC1B,aAAY;AACf;MACF;AAGA,YAAM+C,QAAQC,MAAMd,SAAKe,2CAAgBnD,gBAAAA,CAAAA,EAAmBM,IAAI,CAACX,OAAOyD,iBAAIC,kBAAkB1D,EAAAA,CAAAA;AAC9F,UAAI,CAACsD,MAAMX,QAAQ;AACjB;MACF;AAEA,YAAMtF,aAAYsG,iCAAgBpC,OAAM,EAAG/B,MAAMe,WAAAA;AACjD,YAAMqD,UAAU,IAAIC,kCAAiB5C,cAAc5D,UAAAA,EAAWyG,UAAU,IAAIC,wCAAAA,CAAAA;AAC5E,YAAMH,QAAQI,gBAAgB;QAAE/D,UAAUA,SAASoD;QAAOC;MAAM,CAAA;IAClE,GAAG;MAACrD,SAASoD;MAAOpC;KAAa;AAEjC,WACEnC,6BAAAA,QAAA,cAACmF,gCAAUC,SAAO;MAACtE;MAAYuE,SAAAA;OAC7BrF,6BAAAA,QAAA,cAACsF,wBAAQC,MAAI;MAACjH,YAAW;OACvB0B,6BAAAA,QAAA,cAACsF,wBAAQE,QAAM;MAACC,SAASrB;OAAarD,EAAE,aAAA,CAAA,GACxCf,6BAAAA,QAAA,cAACsF,wBAAQE,QAAM;MAACC,SAASnB;OAAYvD,EAAE,YAAA,CAAA,CAAA,GAExCU,cAAczB,6BAAAA,QAAA,cAAC5B,iBAAAA;MAAgB8B,KAAK8B;MAAWzD,WAAWkD;;;;;AAGjE;AAEA,IAAA,6BAAeZ;",
6
+ "names": ["import_echo", "import_react", "import_assistant", "import_react_ui", "BlueprintEditor", "forwardRef", "classNames", "blueprint", "forwardedRef", "themeMode", "useThemeContext", "parentRef", "view", "useTextEditor", "initialValue", "JSON", "stringify", "extensions", "createBasicExtensions", "lineNumbers", "lineWrapping", "monospace", "scrollPastEnd", "createThemeExtensions", "syntaxHighlighting", "createJsonExtensions", "schema", "Type", "toJsonSchema", "BlueprintDefinition", "strict", "useImperativeHandle", "React", "div", "ref", "className", "mx", "EXA_API_KEY", "parseBlueprint", "text", "json", "JSON5", "parse", "steps", "error", "BlueprintContainer", "role", "t", "useTranslation", "meta", "id", "aiClient", "useCapability", "AssistantCapabilities", "AiClient", "selectionManager", "useSelectionManager", "definition", "setDefinition", "useState", "useEffect", "map", "instructions", "tools", "editorRef", "useRef", "undefined", "toolRegistry", "useMemo", "space", "getSpace", "queue", "queues", "create", "ToolRegistry", "createExaTool", "apiKey", "createLocalSearchTool", "db", "createGraphWriterTool", "onDone", "objects", "append", "formatAndSave", "current", "state", "doc", "toString", "formatted", "dispatch", "changes", "from", "to", "length", "insert", "step", "push", "Key", "ObjectId", "random", "handleSave", "useCallback", "handleRun", "value", "input", "Array", "getSelectionSet", "DXN", "fromLocalObjectId", "BlueprintParser", "machine", "BlueprintMachine", "setLogger", "BlueprintLoggerAdapter", "runToCompletion", "StackItem", "Content", "toolbar", "Toolbar", "Root", "Button", "onClick"]
7
+ }
@@ -26,15 +26,16 @@ 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 ChatContainer_5CLHJOIQ_exports = {};
30
- __export(ChatContainer_5CLHJOIQ_exports, {
29
+ var ChatContainer_WFLTSAFA_exports = {};
30
+ __export(ChatContainer_WFLTSAFA_exports, {
31
31
  ChatContainer: () => ChatContainer,
32
32
  default: () => ChatContainer_default
33
33
  });
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");
34
+ module.exports = __toCommonJS(ChatContainer_WFLTSAFA_exports);
35
+ var import_chunk_WR5L3TVB = require("./chunk-WR5L3TVB.cjs");
36
+ var import_chunk_7TQAIKE2 = require("./chunk-7TQAIKE2.cjs");
37
+ var import_chunk_BGRQNE3L = require("./chunk-BGRQNE3L.cjs");
38
+ var import_chunk_ZP732NHS = require("./chunk-ZP732NHS.cjs");
38
39
  var import_chunk_P74TWGMG = require("./chunk-P74TWGMG.cjs");
39
40
  var import_tracking = require("@preact-signals/safe-react/tracking");
40
41
  var import_react = __toESM(require("react"));
@@ -49,7 +50,7 @@ var ChatContainer = ({ role, chat, associatedArtifact }) => {
49
50
  return /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
50
51
  role,
51
52
  classNames: "container-max-width"
52
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_H4A42LNR.ThreadContainer, {
53
+ }, /* @__PURE__ */ import_react.default.createElement(import_chunk_WR5L3TVB.ThreadContainer, {
53
54
  chat,
54
55
  settings,
55
56
  transcription,
@@ -64,4 +65,4 @@ var ChatContainer_default = ChatContainer;
64
65
  0 && (module.exports = {
65
66
  ChatContainer
66
67
  });
67
- //# sourceMappingURL=ChatContainer-5CLHJOIQ.cjs.map
68
+ //# sourceMappingURL=ChatContainer-WFLTSAFA.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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;",
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,18 +26,18 @@ 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 TemplateContainer_CTG2MB4W_exports = {};
30
- __export(TemplateContainer_CTG2MB4W_exports, {
29
+ var TemplateContainer_JZF2DCCG_exports = {};
30
+ __export(TemplateContainer_JZF2DCCG_exports, {
31
31
  TemplateContainer: () => TemplateContainer,
32
32
  default: () => TemplateContainer_default
33
33
  });
34
- module.exports = __toCommonJS(TemplateContainer_CTG2MB4W_exports);
34
+ module.exports = __toCommonJS(TemplateContainer_JZF2DCCG_exports);
35
35
  var import_chunk_4EEWTDQK = require("./chunk-4EEWTDQK.cjs");
36
36
  var import_chunk_P74TWGMG = require("./chunk-P74TWGMG.cjs");
37
37
  var import_tracking = require("@preact-signals/safe-react/tracking");
38
38
  var import_react = __toESM(require("react"));
39
39
  var import_react_ui_stack = require("@dxos/react-ui-stack");
40
- var TemplateContainer = ({ template, role }) => {
40
+ var TemplateContainer = ({ role, template }) => {
41
41
  var _effect = (0, import_tracking.useSignals)();
42
42
  try {
43
43
  return /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
@@ -55,4 +55,4 @@ var TemplateContainer_default = TemplateContainer;
55
55
  0 && (module.exports = {
56
56
  TemplateContainer
57
57
  });
58
- //# sourceMappingURL=TemplateContainer-CTG2MB4W.cjs.map
58
+ //# sourceMappingURL=TemplateContainer-JZF2DCCG.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/TemplateContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { StackItem, type StackItemContentProps } from '@dxos/react-ui-stack';\n\nimport { TemplateEditor } from './TemplateEditor';\nimport { type TemplateType } from '../types';\n\nexport const TemplateContainer = ({\n role,\n template,\n}: Pick<StackItemContentProps, 'role'> & { template: TemplateType }) => {\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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAkB;AAElB,4BAAsD;AAK/C,IAAMA,oBAAoB,CAAC,EAChCC,MACAC,SAAQ,MACyD;;;AACjE,WACE,6BAAAC,QAAA,cAACC,gCAAUC,SAAO;MAACJ;MAAYK,YAAW;OACxC,6BAAAH,QAAA,cAACI,sCAAAA;MAAeL;;;;;AAGtB;AAEA,IAAA,4BAAeF;",
6
+ "names": ["TemplateContainer", "role", "template", "React", "StackItem", "Content", "classNames", "TemplateEditor"]
7
+ }
@@ -16,12 +16,12 @@ 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 ai_client_R2CGEYZW_exports = {};
20
- __export(ai_client_R2CGEYZW_exports, {
19
+ var ai_client_3XNIFMJX_exports = {};
20
+ __export(ai_client_3XNIFMJX_exports, {
21
21
  default: () => ai_client_default
22
22
  });
23
- module.exports = __toCommonJS(ai_client_R2CGEYZW_exports);
24
- var import_chunk_TS3H5OSX = require("./chunk-TS3H5OSX.cjs");
23
+ module.exports = __toCommonJS(ai_client_3XNIFMJX_exports);
24
+ var import_chunk_ZP732NHS = require("./chunk-ZP732NHS.cjs");
25
25
  var import_chunk_P74TWGMG = require("./chunk-P74TWGMG.cjs");
26
26
  var import_signals_core = require("@preact/signals-core");
27
27
  var import_ai = require("@dxos/ai");
@@ -31,19 +31,23 @@ 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 import_ai.AIServiceEdgeClient({
34
+ const aiClient = (0, import_signals_core.signal)(new import_ai.AIServiceEdgeClient({
35
35
  endpoint
36
36
  }));
37
37
  const unsubscribe = (0, import_signals_core.effect)(() => {
38
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 import_ai.OllamaClient();
40
+ aiClient.value = new import_ai.OllamaClient();
41
41
  } else {
42
- ai.value = new import_ai.AIServiceEdgeClient({
43
- endpoint
42
+ aiClient.value = new import_ai.AIServiceEdgeClient({
43
+ endpoint,
44
+ defaultGenerationOptions: {
45
+ // model: '@anthropic/claude-sonnet-4-20250514',
46
+ model: "@anthropic/claude-3-5-haiku-20241022"
47
+ }
44
48
  });
45
49
  }
46
50
  });
47
- return (0, import_app_framework.contributes)(import_chunk_TS3H5OSX.AssistantCapabilities.AiClient, ai, () => unsubscribe());
51
+ return (0, import_app_framework.contributes)(import_chunk_ZP732NHS.AssistantCapabilities.AiClient, aiClient, () => unsubscribe());
48
52
  };
49
- //# sourceMappingURL=ai-client-R2CGEYZW.cjs.map
53
+ //# sourceMappingURL=ai-client-3XNIFMJX.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 const aiClient = 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 aiClient.value = new OllamaClient();\n } else {\n aiClient.value = new AIServiceEdgeClient({\n endpoint,\n defaultGenerationOptions: {\n // model: '@anthropic/claude-sonnet-4-20250514',\n model: '@anthropic/claude-3-5-haiku-20241022',\n },\n });\n }\n });\n\n return contributes(AssistantCapabilities.AiClient, aiClient, () => 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;AACvE,QAAMa,eAAWC,4BAAwB,IAAIC,8BAAoB;IAAET;EAAS,CAAA,CAAA;AAE5E,QAAMU,kBAAcC,4BAAO,MAAA;AACzB,UAAMC,WAAWjB,QACdE,cAAcgB,kCAAaC,aAAa,EACxCC,SAAiCC,sCAAAA,GAAmBC;AAEvD,QAAIL,UAAUM,gBAAgB,UAAU;AACtCX,eAASU,QAAQ,IAAIE,uBAAAA;IACvB,OAAO;AACLZ,eAASU,QAAQ,IAAIR,8BAAoB;QACvCT;QACAoB,0BAA0B;;UAExBC,OAAO;QACT;MACF,CAAA;IACF;EACF,CAAA;AAEA,aAAOC,kCAAYC,4CAAsBC,UAAUjB,UAAU,MAAMG,YAAAA,CAAAA;AACrE;",
6
+ "names": ["DEFAULT_AI_SERVICE_URL", "context", "client", "getCapability", "ClientCapabilities", "Client", "endpoint", "config", "values", "runtime", "services", "ai", "server", "aiClient", "signal", "AIServiceEdgeClient", "unsubscribe", "effect", "settings", "Capabilities", "SettingsStore", "getStore", "ASSISTANT_PLUGIN", "value", "llmProvider", "OllamaClient", "defaultGenerationOptions", "model", "contributes", "AssistantCapabilities", "AiClient"]
7
+ }