@dxos/plugin-assistant 0.8.4-main.2c6827d → 0.8.4-main.3c1ae3b

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 (159) hide show
  1. package/dist/lib/browser/{BlueprintArticle-IMCR3642.mjs → BlueprintArticle-BWSLH6LG.mjs} +2 -2
  2. package/dist/lib/browser/{ChatCompanion-4MS4NMZY.mjs → ChatCompanion-U7VMDYO6.mjs} +11 -10
  3. package/dist/lib/browser/ChatCompanion-U7VMDYO6.mjs.map +7 -0
  4. package/dist/lib/browser/{ChatContainer-GJZN3SIJ.mjs → ChatContainer-JXDZQ2EY.mjs} +11 -9
  5. package/dist/lib/browser/ChatContainer-JXDZQ2EY.mjs.map +7 -0
  6. package/dist/lib/browser/{ChatDialog-E2X6DTDX.mjs → ChatDialog-5NNGCRKJ.mjs} +5 -5
  7. package/dist/lib/browser/{PromptArticle-45QX25Y5.mjs → PromptArticle-Q7JYGFQV.mjs} +3 -3
  8. package/dist/lib/browser/{PromptArticle-45QX25Y5.mjs.map → PromptArticle-Q7JYGFQV.mjs.map} +3 -3
  9. package/dist/lib/browser/{app-graph-builder-VZEXMDTY.mjs → app-graph-builder-ADZRPJ3V.mjs} +7 -7
  10. package/dist/lib/browser/{app-graph-builder-VZEXMDTY.mjs.map → app-graph-builder-ADZRPJ3V.mjs.map} +3 -3
  11. package/dist/lib/browser/{blueprint-definition-5FT5JGPY.mjs → blueprint-definition-7HPQPCL7.mjs} +2 -2
  12. package/dist/lib/browser/{chunk-BNTPFZ7O.mjs → chunk-5JZRYQZL.mjs} +8 -8
  13. package/dist/lib/browser/chunk-5JZRYQZL.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-FJQ4ZRYJ.mjs → chunk-7ZJIXQ2Y.mjs} +2 -2
  15. package/dist/lib/browser/chunk-7ZJIXQ2Y.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-2BOE3OTW.mjs → chunk-F6YX2HHA.mjs} +1 -1
  17. package/dist/lib/browser/{chunk-2BOE3OTW.mjs.map → chunk-F6YX2HHA.mjs.map} +2 -2
  18. package/dist/lib/browser/{chunk-TCAQJ26D.mjs → chunk-SWEOO227.mjs} +44 -43
  19. package/dist/lib/browser/chunk-SWEOO227.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-IXIIS4QA.mjs → chunk-YDSFERCV.mjs} +9 -7
  21. package/dist/lib/browser/chunk-YDSFERCV.mjs.map +7 -0
  22. package/dist/lib/browser/index.mjs +45 -53
  23. package/dist/lib/browser/index.mjs.map +3 -3
  24. package/dist/lib/browser/{intent-resolver-AK5O4GUW.mjs → intent-resolver-Q7TX3MV7.mjs} +16 -16
  25. package/dist/lib/browser/intent-resolver-Q7TX3MV7.mjs.map +7 -0
  26. package/dist/lib/browser/meta.json +1 -1
  27. package/dist/lib/browser/{react-surface-XWAR5ZVL.mjs → react-surface-VXXS6ZVC.mjs} +11 -9
  28. package/dist/lib/browser/react-surface-VXXS6ZVC.mjs.map +7 -0
  29. package/dist/lib/browser/repair-3MZXLUHO.mjs +44 -0
  30. package/dist/lib/browser/repair-3MZXLUHO.mjs.map +7 -0
  31. package/dist/lib/browser/{settings-NYJGNQ5I.mjs → settings-HD5WA24I.mjs} +2 -2
  32. package/dist/lib/browser/types/index.mjs +1 -1
  33. package/dist/lib/node-esm/{BlueprintArticle-OL2HUY6Q.mjs → BlueprintArticle-R2XYBRCK.mjs} +2 -2
  34. package/dist/lib/node-esm/{ChatCompanion-TYRR7BXD.mjs → ChatCompanion-O4T7PMMC.mjs} +11 -10
  35. package/dist/lib/node-esm/ChatCompanion-O4T7PMMC.mjs.map +7 -0
  36. package/dist/lib/node-esm/{ChatContainer-MT4INE7Z.mjs → ChatContainer-OWAZI6ZF.mjs} +11 -9
  37. package/dist/lib/node-esm/ChatContainer-OWAZI6ZF.mjs.map +7 -0
  38. package/dist/lib/node-esm/{ChatDialog-G4EWBIJM.mjs → ChatDialog-IBXH5FRI.mjs} +5 -5
  39. package/dist/lib/node-esm/{PromptArticle-OUKFSJQV.mjs → PromptArticle-IV7O5UZ3.mjs} +3 -3
  40. package/dist/lib/node-esm/{PromptArticle-OUKFSJQV.mjs.map → PromptArticle-IV7O5UZ3.mjs.map} +3 -3
  41. package/dist/lib/node-esm/{app-graph-builder-VRN6ESRR.mjs → app-graph-builder-26KXQ5ZY.mjs} +7 -7
  42. package/dist/lib/node-esm/{app-graph-builder-VRN6ESRR.mjs.map → app-graph-builder-26KXQ5ZY.mjs.map} +3 -3
  43. package/dist/lib/node-esm/{blueprint-definition-XW6QQVLV.mjs → blueprint-definition-S3DNWJFV.mjs} +2 -2
  44. package/dist/lib/node-esm/{chunk-KJGD4EBJ.mjs → chunk-CKW4IYLY.mjs} +2 -2
  45. package/dist/lib/node-esm/chunk-CKW4IYLY.mjs.map +7 -0
  46. package/dist/lib/node-esm/{chunk-AB74FOA2.mjs → chunk-E4JSYCWZ.mjs} +8 -8
  47. package/dist/lib/node-esm/chunk-E4JSYCWZ.mjs.map +7 -0
  48. package/dist/lib/node-esm/{chunk-3Q22TTXW.mjs → chunk-GWKWQSEQ.mjs} +1 -1
  49. package/dist/lib/node-esm/{chunk-3Q22TTXW.mjs.map → chunk-GWKWQSEQ.mjs.map} +2 -2
  50. package/dist/lib/node-esm/{chunk-UXTUHH24.mjs → chunk-VGSP5WMV.mjs} +9 -7
  51. package/dist/lib/node-esm/chunk-VGSP5WMV.mjs.map +7 -0
  52. package/dist/lib/node-esm/{chunk-KM24SYPM.mjs → chunk-ZNSHGWE4.mjs} +44 -43
  53. package/dist/lib/node-esm/chunk-ZNSHGWE4.mjs.map +7 -0
  54. package/dist/lib/node-esm/index.mjs +45 -53
  55. package/dist/lib/node-esm/index.mjs.map +3 -3
  56. package/dist/lib/node-esm/{intent-resolver-L2F3N45L.mjs → intent-resolver-LTKMN3YB.mjs} +16 -16
  57. package/dist/lib/node-esm/intent-resolver-LTKMN3YB.mjs.map +7 -0
  58. package/dist/lib/node-esm/meta.json +1 -1
  59. package/dist/lib/node-esm/{react-surface-JXB7Q6QR.mjs → react-surface-AOBQALOV.mjs} +11 -9
  60. package/dist/lib/node-esm/react-surface-AOBQALOV.mjs.map +7 -0
  61. package/dist/lib/node-esm/repair-RER5H7Y6.mjs +45 -0
  62. package/dist/lib/node-esm/repair-RER5H7Y6.mjs.map +7 -0
  63. package/dist/lib/node-esm/{settings-RRHYI5KO.mjs → settings-YJQVKHH5.mjs} +2 -2
  64. package/dist/lib/node-esm/types/index.mjs +1 -1
  65. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/index.d.ts +1 -0
  67. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/repair.d.ts +4 -0
  70. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  71. package/dist/types/src/components/ChatCompanion.d.ts +1 -1
  72. package/dist/types/src/components/ChatCompanion.d.ts.map +1 -1
  73. package/dist/types/src/components/ChatContainer.d.ts +6 -1
  74. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  75. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -1
  76. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +8 -2
  77. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  78. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +5 -0
  79. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts +5 -0
  81. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  82. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +5 -0
  83. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  84. package/dist/types/src/components/index.d.ts +7 -2
  85. package/dist/types/src/components/index.d.ts.map +1 -1
  86. package/dist/types/src/functions/object-list.d.ts.map +1 -1
  87. package/dist/types/src/functions/object-load.d.ts.map +1 -1
  88. package/dist/types/src/hooks/index.d.ts +1 -1
  89. package/dist/types/src/hooks/index.d.ts.map +1 -1
  90. package/dist/types/src/hooks/useFilteredTypes.d.ts +4 -0
  91. package/dist/types/src/hooks/useFilteredTypes.d.ts.map +1 -0
  92. package/dist/types/src/processor/processor.d.ts +3 -2
  93. package/dist/types/src/processor/processor.d.ts.map +1 -1
  94. package/dist/types/src/testing/test-generator.d.ts +3 -2
  95. package/dist/types/src/testing/test-generator.d.ts.map +1 -1
  96. package/dist/types/src/translations.d.ts +5 -0
  97. package/dist/types/src/translations.d.ts.map +1 -1
  98. package/dist/types/src/types/Assistant.d.ts +8 -11
  99. package/dist/types/src/types/Assistant.d.ts.map +1 -1
  100. package/dist/types/src/types/AssistantAction.d.ts +10 -13
  101. package/dist/types/src/types/AssistantAction.d.ts.map +1 -1
  102. package/dist/types/src/types/service.d.ts +126 -85
  103. package/dist/types/src/types/service.d.ts.map +1 -1
  104. package/dist/types/tsconfig.tsbuildinfo +1 -1
  105. package/package.json +72 -71
  106. package/src/AssistantPlugin.tsx +21 -42
  107. package/src/capabilities/app-graph-builder.ts +5 -7
  108. package/src/capabilities/index.ts +1 -0
  109. package/src/capabilities/intent-resolver.ts +6 -18
  110. package/src/capabilities/react-surface.tsx +2 -2
  111. package/src/capabilities/repair.ts +49 -0
  112. package/src/components/ChatCompanion.tsx +130 -119
  113. package/src/components/ChatContainer.tsx +5 -4
  114. package/src/components/ChatPrompt/ChatOptions.tsx +8 -2
  115. package/src/components/ChatThread/ChatThread.stories.tsx +4 -3
  116. package/src/components/ChatThread/Link.tsx +2 -2
  117. package/src/components/ChatThread/registry.tsx +1 -1
  118. package/src/components/PromptArticle.tsx +1 -1
  119. package/src/components/TemplateEditor/TemplateEditor.tsx +1 -1
  120. package/src/functions/object-list.ts +4 -3
  121. package/src/functions/object-load.ts +4 -3
  122. package/src/hooks/index.ts +1 -1
  123. package/src/hooks/useBlueprintRegistry.ts +1 -1
  124. package/src/hooks/useChatToolbarActions.ts +1 -1
  125. package/src/hooks/useContextObjects.ts +1 -1
  126. package/src/hooks/{useItemTypes.ts → useFilteredTypes.ts} +7 -6
  127. package/src/hooks/useReferencesProvider.ts +3 -3
  128. package/src/processor/processor.test.ts +2 -1
  129. package/src/processor/processor.ts +3 -3
  130. package/src/testing/test-generator.ts +4 -3
  131. package/src/translations.ts +4 -0
  132. package/src/types/Assistant.ts +4 -4
  133. package/src/types/AssistantAction.ts +1 -1
  134. package/dist/lib/browser/ChatCompanion-4MS4NMZY.mjs.map +0 -7
  135. package/dist/lib/browser/ChatContainer-GJZN3SIJ.mjs.map +0 -7
  136. package/dist/lib/browser/chunk-BNTPFZ7O.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-FJQ4ZRYJ.mjs.map +0 -7
  138. package/dist/lib/browser/chunk-IXIIS4QA.mjs.map +0 -7
  139. package/dist/lib/browser/chunk-TCAQJ26D.mjs.map +0 -7
  140. package/dist/lib/browser/intent-resolver-AK5O4GUW.mjs.map +0 -7
  141. package/dist/lib/browser/react-surface-XWAR5ZVL.mjs.map +0 -7
  142. package/dist/lib/node-esm/ChatCompanion-TYRR7BXD.mjs.map +0 -7
  143. package/dist/lib/node-esm/ChatContainer-MT4INE7Z.mjs.map +0 -7
  144. package/dist/lib/node-esm/chunk-AB74FOA2.mjs.map +0 -7
  145. package/dist/lib/node-esm/chunk-KJGD4EBJ.mjs.map +0 -7
  146. package/dist/lib/node-esm/chunk-KM24SYPM.mjs.map +0 -7
  147. package/dist/lib/node-esm/chunk-UXTUHH24.mjs.map +0 -7
  148. package/dist/lib/node-esm/intent-resolver-L2F3N45L.mjs.map +0 -7
  149. package/dist/lib/node-esm/react-surface-JXB7Q6QR.mjs.map +0 -7
  150. package/dist/types/src/hooks/useItemTypes.d.ts +0 -4
  151. package/dist/types/src/hooks/useItemTypes.d.ts.map +0 -1
  152. /package/dist/lib/browser/{BlueprintArticle-IMCR3642.mjs.map → BlueprintArticle-BWSLH6LG.mjs.map} +0 -0
  153. /package/dist/lib/browser/{ChatDialog-E2X6DTDX.mjs.map → ChatDialog-5NNGCRKJ.mjs.map} +0 -0
  154. /package/dist/lib/browser/{blueprint-definition-5FT5JGPY.mjs.map → blueprint-definition-7HPQPCL7.mjs.map} +0 -0
  155. /package/dist/lib/browser/{settings-NYJGNQ5I.mjs.map → settings-HD5WA24I.mjs.map} +0 -0
  156. /package/dist/lib/node-esm/{BlueprintArticle-OL2HUY6Q.mjs.map → BlueprintArticle-R2XYBRCK.mjs.map} +0 -0
  157. /package/dist/lib/node-esm/{ChatDialog-G4EWBIJM.mjs.map → ChatDialog-IBXH5FRI.mjs.map} +0 -0
  158. /package/dist/lib/node-esm/{blueprint-definition-XW6QQVLV.mjs.map → blueprint-definition-S3DNWJFV.mjs.map} +0 -0
  159. /package/dist/lib/node-esm/{settings-RRHYI5KO.mjs.map → settings-YJQVKHH5.mjs.map} +0 -0
@@ -5,12 +5,12 @@ import {
5
5
  ChatContainer,
6
6
  ChatDialog,
7
7
  PromptArticle
8
- } from "./chunk-TCAQJ26D.mjs";
9
- import "./chunk-FJQ4ZRYJ.mjs";
10
- import "./chunk-2BOE3OTW.mjs";
8
+ } from "./chunk-SWEOO227.mjs";
9
+ import "./chunk-7ZJIXQ2Y.mjs";
10
+ import "./chunk-F6YX2HHA.mjs";
11
11
  import {
12
12
  Assistant_exports
13
- } from "./chunk-BNTPFZ7O.mjs";
13
+ } from "./chunk-5JZRYQZL.mjs";
14
14
  import {
15
15
  ASSISTANT_DIALOG,
16
16
  meta
@@ -40,9 +40,10 @@ var react_surface_default = (() => contributes(Capabilities.ReactSurface, [
40
40
  id: `${meta.id}/chat`,
41
41
  role: "article",
42
42
  filter: (data) => Obj.instanceOf(Assistant_exports.Chat, data.subject) && data.variant !== "assistant-chat",
43
- component: ({ data, role }) => /* @__PURE__ */ React.createElement(ChatContainer, {
43
+ component: ({ data, role, ref }) => /* @__PURE__ */ React.createElement(ChatContainer, {
44
44
  role,
45
- chat: data.subject
45
+ chat: data.subject,
46
+ ref
46
47
  })
47
48
  }),
48
49
  // TODO(wittjosiah): This is flashing when chat changes.
@@ -50,9 +51,10 @@ var react_surface_default = (() => contributes(Capabilities.ReactSurface, [
50
51
  id: `${meta.id}/companion-chat`,
51
52
  role: "article",
52
53
  filter: (data) => Obj.isObject(data.companionTo) && (Obj.instanceOf(Assistant_exports.Chat, data.subject) || data.subject === "assistant-chat"),
53
- component: ({ data, role }) => /* @__PURE__ */ React.createElement(ChatCompanion, {
54
+ component: ({ data, role, ref }) => /* @__PURE__ */ React.createElement(ChatCompanion, {
54
55
  role,
55
- data
56
+ data,
57
+ ref
56
58
  })
57
59
  }),
58
60
  createSurface({
@@ -95,4 +97,4 @@ var react_surface_default = (() => contributes(Capabilities.ReactSurface, [
95
97
  export {
96
98
  react_surface_default as default
97
99
  };
98
- //# sourceMappingURL=react-surface-XWAR5ZVL.mjs.map
100
+ //# sourceMappingURL=react-surface-VXXS6ZVC.mjs.map
@@ -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 React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { Blueprint, Prompt } from '@dxos/blueprints';\nimport { getSpace } from '@dxos/client/echo';\nimport { Sequence } from '@dxos/conductor';\nimport { InvocationTraceContainer } from '@dxos/devtools';\nimport { Obj } from '@dxos/echo';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport {\n AssistantSettings,\n BlueprintArticle,\n ChatCompanion,\n ChatContainer,\n ChatDialog,\n PromptArticle,\n} from '../components';\nimport { ASSISTANT_DIALOG, meta } from '../meta';\nimport { Assistant } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${meta.id}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<Assistant.Settings> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === meta.id,\n component: ({ data: { subject } }) => <AssistantSettings settings={subject.value} />,\n }),\n createSurface({\n id: `${meta.id}/chat`,\n role: 'article',\n filter: (data): data is { subject: Assistant.Chat; variant: undefined } =>\n Obj.instanceOf(Assistant.Chat, data.subject) && data.variant !== 'assistant-chat',\n component: ({ data, role, ref }) => <ChatContainer role={role} chat={data.subject} ref={ref} />,\n }),\n // TODO(wittjosiah): This is flashing when chat changes.\n createSurface({\n id: `${meta.id}/companion-chat`,\n role: 'article',\n filter: (data): data is { companionTo: Obj.Any; subject: Assistant.Chat | 'assistant-chat' } =>\n Obj.isObject(data.companionTo) &&\n (Obj.instanceOf(Assistant.Chat, data.subject) || data.subject === 'assistant-chat'),\n component: ({ data, role, ref }) => <ChatCompanion role={role} data={data} ref={ref} />,\n }),\n createSurface({\n id: `${meta.id}/companion-invocations`,\n role: 'article',\n filter: (data): data is { companionTo: Sequence } =>\n (Obj.instanceOf(Sequence, data.companionTo) || Obj.instanceOf(Prompt.Prompt, data.companionTo)) &&\n data.subject === 'invocations',\n component: ({ data }) => {\n const space = getSpace(data.companionTo);\n // TODO(wittjosiah): Support invocation filtering for prompts.\n const target = Obj.instanceOf(Prompt.Prompt, data.companionTo) ? undefined : data.companionTo;\n return (\n <StackItem.Content>\n <InvocationTraceContainer space={space} target={target} detailAxis='block' />\n </StackItem.Content>\n );\n },\n }),\n createSurface({\n id: `${meta.id}/blueprint`,\n role: 'article',\n filter: (data): data is { subject: Blueprint.Blueprint } => Obj.instanceOf(Blueprint.Blueprint, data.subject),\n component: ({ data }) => <BlueprintArticle subject={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/prompt`,\n role: 'article',\n filter: (data): data is { subject: Prompt.Prompt } => Obj.instanceOf(Prompt.Prompt, data.subject),\n component: ({ data }) => <PromptArticle subject={data.subject} />,\n }),\n createSurface({\n id: ASSISTANT_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: { chat: Assistant.Chat } } => data.component === ASSISTANT_DIALOG,\n component: ({ data }) => <ChatDialog {...data.props} />,\n }),\n ]);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,WAAWC,cAAc;AAClC,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAASC,gCAAgC;AACzC,SAASC,WAAW;AACpB,SAASC,qBAAqB;AAC9B,SAASC,iBAAiB;AAa1B,IAAA,yBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPA,KAAKC,mBAAmBC,iBAAiBF,KAAKC,QAAQE,WAAWN,KAAKD;IACxEQ,WAAW,CAAC,EAAEJ,MAAM,EAAEC,QAAO,EAAE,MAAO,sBAAA,cAACI,mBAAAA;MAAkBC,UAAUL,QAAQM;;EAC7E,CAAA;EACAZ,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPQ,IAAIC,WAAWC,kBAAUC,MAAMX,KAAKC,OAAO,KAAKD,KAAKY,YAAY;IACnER,WAAW,CAAC,EAAEJ,MAAMF,MAAMe,IAAG,MAAO,sBAAA,cAACC,eAAAA;MAAchB;MAAYiB,MAAMf,KAAKC;MAASY;;EACrF,CAAA;;EAEAlB,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPQ,IAAIQ,SAAShB,KAAKiB,WAAW,MAC5BT,IAAIC,WAAWC,kBAAUC,MAAMX,KAAKC,OAAO,KAAKD,KAAKC,YAAY;IACpEG,WAAW,CAAC,EAAEJ,MAAMF,MAAMe,IAAG,MAAO,sBAAA,cAACK,eAAAA;MAAcpB;MAAYE;MAAYa;;EAC7E,CAAA;EACAlB,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,UACNQ,IAAIC,WAAWU,UAAUnB,KAAKiB,WAAW,KAAKT,IAAIC,WAAWW,OAAOA,QAAQpB,KAAKiB,WAAW,MAC7FjB,KAAKC,YAAY;IACnBG,WAAW,CAAC,EAAEJ,KAAI,MAAE;AAClB,YAAMqB,QAAQC,SAAStB,KAAKiB,WAAW;AAEvC,YAAMM,SAASf,IAAIC,WAAWW,OAAOA,QAAQpB,KAAKiB,WAAW,IAAIO,SAAYxB,KAAKiB;AAClF,aACE,sBAAA,cAACQ,UAAUC,SAAO,MAChB,sBAAA,cAACC,0BAAAA;QAAyBN;QAAcE;QAAgBK,YAAW;;IAGzE;EACF,CAAA;EACAjC,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAmDQ,IAAIC,WAAWoB,UAAUA,WAAW7B,KAAKC,OAAO;IAC5GG,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAAC8B,kBAAAA;MAAiB7B,SAASD,KAAKC;;EAC3D,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAA6CQ,IAAIC,WAAWW,OAAOA,QAAQpB,KAAKC,OAAO;IAChGG,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAAC+B,eAAAA;MAAc9B,SAASD,KAAKC;;EACxD,CAAA;EACAN,cAAc;IACZC,IAAIoC;IACJlC,MAAM;IACNC,QAAQ,CAACC,SAAsDA,KAAKI,cAAc4B;IAClF5B,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAACiC,YAAejC,KAAKkC,KAAK;EACrD,CAAA;CACD;",
6
+ "names": ["React", "Capabilities", "contributes", "createSurface", "Blueprint", "Prompt", "getSpace", "Sequence", "InvocationTraceContainer", "Obj", "SettingsStore", "StackItem", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "subject", "SettingsStore", "prefix", "component", "AssistantSettings", "settings", "value", "Obj", "instanceOf", "Assistant", "Chat", "variant", "ref", "ChatContainer", "chat", "isObject", "companionTo", "ChatCompanion", "Sequence", "Prompt", "space", "getSpace", "target", "undefined", "StackItem", "Content", "InvocationTraceContainer", "detailAxis", "Blueprint", "BlueprintArticle", "PromptArticle", "ASSISTANT_DIALOG", "ChatDialog", "props"]
7
+ }
@@ -0,0 +1,44 @@
1
+ import {
2
+ Assistant_exports
3
+ } from "./chunk-5JZRYQZL.mjs";
4
+ import "./chunk-WBG5PTSX.mjs";
5
+ import "./chunk-J5LGTIGS.mjs";
6
+
7
+ // src/capabilities/repair.ts
8
+ import { contributes } from "@dxos/app-framework";
9
+ import { Blueprint, Prompt } from "@dxos/blueprints";
10
+ import { Obj, Ref, Type } from "@dxos/echo";
11
+ import { SpaceCapabilities } from "@dxos/plugin-space";
12
+ import { Collection } from "@dxos/schema";
13
+ var repair_default = (() => contributes(SpaceCapabilities.Repair, async ({ space }) => {
14
+ await ensureSystemCollections(space);
15
+ }));
16
+ var ensureSystemCollections = async (space) => {
17
+ const rootCollection = await space.properties[Collection.Collection.typename]?.load();
18
+ if (!rootCollection) {
19
+ return;
20
+ }
21
+ const objects = await Promise.all(rootCollection.objects.map((ref) => ref.load()));
22
+ const chats = objects.find((object) => Obj.instanceOf(Collection.Managed, object) && object.key === Assistant_exports.Chat.typename);
23
+ if (!chats) {
24
+ rootCollection.objects.push(Ref.make(Collection.makeManaged({
25
+ key: Assistant_exports.Chat.typename
26
+ })));
27
+ }
28
+ const blueprints = objects.find((object) => Obj.instanceOf(Collection.Managed, object) && object.key === Blueprint.Blueprint.typename);
29
+ if (!blueprints) {
30
+ rootCollection.objects.push(Ref.make(Collection.makeManaged({
31
+ key: Blueprint.Blueprint.typename
32
+ })));
33
+ }
34
+ const prompts = objects.find((object) => Obj.instanceOf(Collection.Managed, object) && object.key === Type.getTypename(Prompt.Prompt));
35
+ if (!prompts) {
36
+ rootCollection.objects.push(Ref.make(Collection.makeManaged({
37
+ key: Type.getTypename(Prompt.Prompt)
38
+ })));
39
+ }
40
+ };
41
+ export {
42
+ repair_default as default
43
+ };
44
+ //# sourceMappingURL=repair-3MZXLUHO.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/repair.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes } from '@dxos/app-framework';\nimport { Blueprint, Prompt } from '@dxos/blueprints';\nimport { Obj, Ref, Type } from '@dxos/echo';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Collection } from '@dxos/schema';\n\nimport { Assistant } from '../types';\n\nexport default () =>\n contributes(SpaceCapabilities.Repair, async ({ space }) => {\n await ensureSystemCollections(space);\n });\n\n/**\n * Ensure the root collection has system collections for AI Chats, Blueprints, and Prompts.\n */\nconst ensureSystemCollections = async (space: Space) => {\n const rootCollection: Collection.Collection = await space.properties[Collection.Collection.typename]?.load();\n if (!rootCollection) {\n return;\n }\n\n const objects = await Promise.all(rootCollection.objects.map((ref) => ref.load()));\n const chats = objects.find(\n (object) => Obj.instanceOf(Collection.Managed, object) && object.key === Assistant.Chat.typename,\n );\n if (!chats) {\n rootCollection.objects.push(Ref.make(Collection.makeManaged({ key: Assistant.Chat.typename })));\n }\n\n const blueprints = objects.find(\n (object) => Obj.instanceOf(Collection.Managed, object) && object.key === Blueprint.Blueprint.typename,\n );\n if (!blueprints) {\n rootCollection.objects.push(Ref.make(Collection.makeManaged({ key: Blueprint.Blueprint.typename })));\n }\n\n const prompts = objects.find(\n (object) => Obj.instanceOf(Collection.Managed, object) && object.key === Type.getTypename(Prompt.Prompt),\n );\n if (!prompts) {\n rootCollection.objects.push(Ref.make(Collection.makeManaged({ key: Type.getTypename(Prompt.Prompt) })));\n }\n};\n"],
5
+ "mappings": ";;;;;;;AAIA,SAASA,mBAAmB;AAC5B,SAASC,WAAWC,cAAc;AAClC,SAASC,KAAKC,KAAKC,YAAY;AAC/B,SAASC,yBAAyB;AAElC,SAASC,kBAAkB;AAI3B,IAAA,kBAAe,MACbC,YAAYC,kBAAkBC,QAAQ,OAAO,EAAEC,MAAK,MAAE;AACpD,QAAMC,wBAAwBD,KAAAA;AAChC,CAAA;AAKF,IAAMC,0BAA0B,OAAOD,UAAAA;AACrC,QAAME,iBAAwC,MAAMF,MAAMG,WAAWC,WAAWA,WAAWC,QAAQ,GAAGC,KAAAA;AACtG,MAAI,CAACJ,gBAAgB;AACnB;EACF;AAEA,QAAMK,UAAU,MAAMC,QAAQC,IAAIP,eAAeK,QAAQG,IAAI,CAACC,QAAQA,IAAIL,KAAI,CAAA,CAAA;AAC9E,QAAMM,QAAQL,QAAQM,KACpB,CAACC,WAAWC,IAAIC,WAAWZ,WAAWa,SAASH,MAAAA,KAAWA,OAAOI,QAAQC,kBAAUC,KAAKf,QAAQ;AAElG,MAAI,CAACO,OAAO;AACVV,mBAAeK,QAAQc,KAAKC,IAAIC,KAAKnB,WAAWoB,YAAY;MAAEN,KAAKC,kBAAUC,KAAKf;IAAS,CAAA,CAAA,CAAA;EAC7F;AAEA,QAAMoB,aAAalB,QAAQM,KACzB,CAACC,WAAWC,IAAIC,WAAWZ,WAAWa,SAASH,MAAAA,KAAWA,OAAOI,QAAQQ,UAAUA,UAAUrB,QAAQ;AAEvG,MAAI,CAACoB,YAAY;AACfvB,mBAAeK,QAAQc,KAAKC,IAAIC,KAAKnB,WAAWoB,YAAY;MAAEN,KAAKQ,UAAUA,UAAUrB;IAAS,CAAA,CAAA,CAAA;EAClG;AAEA,QAAMsB,UAAUpB,QAAQM,KACtB,CAACC,WAAWC,IAAIC,WAAWZ,WAAWa,SAASH,MAAAA,KAAWA,OAAOI,QAAQU,KAAKC,YAAYC,OAAOA,MAAM,CAAA;AAEzG,MAAI,CAACH,SAAS;AACZzB,mBAAeK,QAAQc,KAAKC,IAAIC,KAAKnB,WAAWoB,YAAY;MAAEN,KAAKU,KAAKC,YAAYC,OAAOA,MAAM;IAAE,CAAA,CAAA,CAAA;EACrG;AACF;",
6
+ "names": ["contributes", "Blueprint", "Prompt", "Obj", "Ref", "Type", "SpaceCapabilities", "Collection", "contributes", "SpaceCapabilities", "Repair", "space", "ensureSystemCollections", "rootCollection", "properties", "Collection", "typename", "load", "objects", "Promise", "all", "map", "ref", "chats", "find", "object", "Obj", "instanceOf", "Managed", "key", "Assistant", "Chat", "push", "Ref", "make", "makeManaged", "blueprints", "Blueprint", "prompts", "Type", "getTypename", "Prompt"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Assistant_exports
3
- } from "./chunk-BNTPFZ7O.mjs";
3
+ } from "./chunk-5JZRYQZL.mjs";
4
4
  import {
5
5
  meta
6
6
  } from "./chunk-WBG5PTSX.mjs";
@@ -20,4 +20,4 @@ var settings_default = (() => {
20
20
  export {
21
21
  settings_default as default
22
22
  };
23
- //# sourceMappingURL=settings-NYJGNQ5I.mjs.map
23
+ //# sourceMappingURL=settings-HD5WA24I.mjs.map
@@ -5,7 +5,7 @@ import {
5
5
  LLM_PROVIDERS,
6
6
  ServiceType,
7
7
  categoryIcons
8
- } from "../chunk-BNTPFZ7O.mjs";
8
+ } from "../chunk-5JZRYQZL.mjs";
9
9
  import "../chunk-WBG5PTSX.mjs";
10
10
  import "../chunk-J5LGTIGS.mjs";
11
11
  export {
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  TemplateEditor
4
- } from "./chunk-KJGD4EBJ.mjs";
4
+ } from "./chunk-CKW4IYLY.mjs";
5
5
  import "./chunk-WE6KTH72.mjs";
6
6
  import "./chunk-HSLMI22Q.mjs";
7
7
 
@@ -34,4 +34,4 @@ export {
34
34
  BlueprintArticle,
35
35
  BlueprintArticle_default as default
36
36
  };
37
- //# sourceMappingURL=BlueprintArticle-OL2HUY6Q.mjs.map
37
+ //# sourceMappingURL=BlueprintArticle-R2XYBRCK.mjs.map
@@ -3,13 +3,13 @@ import {
3
3
  ChatContainer,
4
4
  useBlueprintRegistry,
5
5
  useContextBinder
6
- } from "./chunk-KM24SYPM.mjs";
7
- import "./chunk-KJGD4EBJ.mjs";
8
- import "./chunk-3Q22TTXW.mjs";
6
+ } from "./chunk-ZNSHGWE4.mjs";
7
+ import "./chunk-CKW4IYLY.mjs";
8
+ import "./chunk-GWKWQSEQ.mjs";
9
9
  import {
10
10
  AssistantAction_exports,
11
11
  Assistant_exports
12
- } from "./chunk-AB74FOA2.mjs";
12
+ } from "./chunk-E4JSYCWZ.mjs";
13
13
  import "./chunk-WE6KTH72.mjs";
14
14
  import "./chunk-HSLMI22Q.mjs";
15
15
 
@@ -18,7 +18,7 @@ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
18
18
  import * as Array from "effect/Array";
19
19
  import * as Function from "effect/Function";
20
20
  import * as Option from "effect/Option";
21
- import React, { useCallback, useEffect, useMemo, useState } from "react";
21
+ import React, { forwardRef, useCallback, useEffect, useMemo, useState } from "react";
22
22
  import { Capabilities, createIntent } from "@dxos/app-framework";
23
23
  import { useCapabilities, useIntentDispatcher } from "@dxos/app-framework/react";
24
24
  import { Blueprint } from "@dxos/blueprints";
@@ -27,7 +27,7 @@ import { Filter, Obj, Ref } from "@dxos/echo";
27
27
  import { SpaceAction } from "@dxos/plugin-space/types";
28
28
  import { useQuery } from "@dxos/react-client/echo";
29
29
  import { useAsyncEffect } from "@dxos/react-ui";
30
- var ChatCompanion = ({ role, data }) => {
30
+ var ChatCompanion = /* @__PURE__ */ forwardRef(({ role, data }, forwardedRef) => {
31
31
  var _effect = _useSignals();
32
32
  try {
33
33
  const { dispatchPromise: dispatch } = useIntentDispatcher();
@@ -96,7 +96,7 @@ var ChatCompanion = ({ role, data }) => {
96
96
  if (!space) {
97
97
  return;
98
98
  }
99
- const { objects: existingBlueprints2 } = await space.db.query(Filter.type(Blueprint.Blueprint)).run();
99
+ const existingBlueprints2 = await space.db.query(Filter.type(Blueprint.Blueprint)).run();
100
100
  for (const key of blueprintKeys) {
101
101
  const existingBlueprint = existingBlueprints2.find((blueprint2) => blueprint2.key === key);
102
102
  if (existingBlueprint) {
@@ -145,15 +145,16 @@ var ChatCompanion = ({ role, data }) => {
145
145
  space,
146
146
  chat,
147
147
  companionTo,
148
- onEvent: handleEvent
148
+ onEvent: handleEvent,
149
+ ref: forwardedRef
149
150
  });
150
151
  } finally {
151
152
  _effect.f();
152
153
  }
153
- };
154
+ });
154
155
  var ChatCompanion_default = ChatCompanion;
155
156
  export {
156
157
  ChatCompanion,
157
158
  ChatCompanion_default as default
158
159
  };
159
- //# sourceMappingURL=ChatCompanion-TYRR7BXD.mjs.map
160
+ //# sourceMappingURL=ChatCompanion-O4T7PMMC.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChatCompanion.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\nimport React, { forwardRef, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Capabilities, createIntent } from '@dxos/app-framework';\nimport { useCapabilities, useIntentDispatcher } from '@dxos/app-framework/react';\nimport { Blueprint } from '@dxos/blueprints';\nimport { getSpace } from '@dxos/client/echo';\nimport { Filter, Obj, Ref } from '@dxos/echo';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\n\nimport { ChatContainer, type ChatEvent } from '../components';\nimport { useBlueprintRegistry, useContextBinder } from '../hooks';\nimport { Assistant, AssistantAction } from '../types';\n\nexport type ChatCompanionProps = {\n role?: string;\n data: { subject: Assistant.Chat | 'assistant-chat'; companionTo: Obj.Any };\n};\n\nexport const ChatCompanion = forwardRef<HTMLDivElement, ChatCompanionProps>(\n ({ role, data }: ChatCompanionProps, forwardedRef) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const blueprintRegistry = useBlueprintRegistry();\n const companionTo = data.companionTo;\n\n const space = getSpace(companionTo);\n const [chat, setChat] = useState(data.subject === 'assistant-chat' ? undefined : data.subject);\n useEffect(() => {\n setChat(data.subject === 'assistant-chat' ? undefined : data.subject);\n }, [data.subject]);\n\n const chatQueue = space && chat ? space.queues.get(chat.queue.dxn) : undefined;\n const binder = useContextBinder(chatQueue);\n\n // Initialize companion chat if it doesn't exist, but don't add it to the space immediately.\n useAsyncEffect(async () => {\n if (!space || chat) {\n return;\n }\n\n const { data } = await dispatch(createIntent(AssistantAction.CreateChat, { space }));\n setChat(data?.object);\n }, [chat, space]);\n\n // Add chat to space when user submits the first message.\n const handleEvent = useCallback(\n async (event: ChatEvent) => {\n const chatInSpace = !!getSpace(chat);\n if (chatInSpace || !chat || !space) {\n return;\n }\n\n if (event.type === 'submit') {\n await dispatch(\n createIntent(SpaceAction.AddObject, {\n object: chat,\n target: space,\n hidden: true,\n }),\n );\n await dispatch(\n createIntent(SpaceAction.AddRelation, {\n space,\n schema: Assistant.CompanionTo,\n source: chat,\n target: companionTo,\n }),\n );\n await dispatch(\n createIntent(AssistantAction.SetCurrentChat, {\n companionTo,\n chat,\n }),\n );\n }\n },\n [chat, space, companionTo, dispatch],\n );\n\n const metadata = useCapabilities(Capabilities.Metadata);\n const blueprintKeys = useMemo(\n () =>\n Function.pipe(\n metadata,\n Array.findFirst(\n (\n capability,\n ): capability is {\n id: string;\n metadata: { blueprints?: string[] };\n } => capability.id === Obj.getTypename(companionTo),\n ),\n Option.flatMap((c) => Option.fromNullable(c.metadata.blueprints)),\n Option.getOrElse(() => [] as string[]),\n ),\n [metadata, companionTo],\n );\n const existingBlueprints = useQuery(space, Filter.type(Blueprint.Blueprint));\n const pluginBlueprints = useMemo(\n () => existingBlueprints.filter((blueprint) => blueprintKeys.includes(blueprint.key)),\n [existingBlueprints, blueprintKeys],\n );\n\n // Initialize related blueprints that are not already in the space.\n useAsyncEffect(async () => {\n if (!space) {\n return;\n }\n\n // NOTE: This must be run instead of using the useQuery result to avoid duplicates.\n const existingBlueprints = await space.db.query(Filter.type(Blueprint.Blueprint)).run();\n for (const key of blueprintKeys) {\n const existingBlueprint = existingBlueprints.find((blueprint) => blueprint.key === key);\n if (existingBlueprint) {\n continue;\n }\n\n const blueprint = blueprintRegistry.getByKey(key);\n if (!blueprint) {\n continue;\n }\n\n space.db.add(Obj.clone(blueprint));\n }\n }, [space, blueprintRegistry, blueprintKeys]);\n\n useAsyncEffect(async () => {\n if (!binder?.isOpen) {\n return;\n }\n\n if (pluginBlueprints.length > 0) {\n await binder.bind({\n blueprints: pluginBlueprints.map((blueprint) => Ref.make(blueprint)),\n });\n }\n\n if (Obj.instanceOf(Blueprint.Blueprint, companionTo)) {\n await binder.bind({ blueprints: [Ref.make(companionTo)] });\n } else {\n await binder.bind({ objects: [Ref.make(companionTo)] });\n }\n }, [binder, companionTo, blueprintKeys]);\n\n return (\n <ChatContainer\n role={role}\n space={space}\n chat={chat}\n companionTo={companionTo}\n onEvent={handleEvent}\n ref={forwardedRef}\n />\n );\n },\n);\n\nexport default ChatCompanion;\n"],
5
+ "mappings": "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",
6
+ "names": ["Array", "Function", "Option", "React", "forwardRef", "useCallback", "useEffect", "useMemo", "useState", "Capabilities", "createIntent", "useCapabilities", "useIntentDispatcher", "Blueprint", "getSpace", "Filter", "Obj", "Ref", "SpaceAction", "useQuery", "useAsyncEffect", "ChatCompanion", "forwardRef", "role", "data", "forwardedRef", "dispatchPromise", "dispatch", "useIntentDispatcher", "blueprintRegistry", "useBlueprintRegistry", "companionTo", "space", "getSpace", "chat", "setChat", "useState", "subject", "undefined", "useEffect", "chatQueue", "queues", "get", "queue", "dxn", "binder", "useContextBinder", "useAsyncEffect", "createIntent", "AssistantAction", "CreateChat", "object", "handleEvent", "useCallback", "event", "chatInSpace", "type", "SpaceAction", "AddObject", "target", "hidden", "AddRelation", "schema", "Assistant", "CompanionTo", "source", "SetCurrentChat", "metadata", "useCapabilities", "Capabilities", "Metadata", "blueprintKeys", "useMemo", "pipe", "findFirst", "capability", "id", "Obj", "getTypename", "flatMap", "c", "fromNullable", "blueprints", "getOrElse", "existingBlueprints", "useQuery", "Filter", "Blueprint", "pluginBlueprints", "filter", "blueprint", "includes", "key", "db", "query", "run", "existingBlueprint", "find", "getByKey", "add", "clone", "isOpen", "length", "bind", "map", "Ref", "make", "instanceOf", "objects", "ChatContainer", "onEvent", "ref"]
7
+ }
@@ -6,10 +6,10 @@ import {
6
6
  useChatServices,
7
7
  useOnline,
8
8
  usePresets
9
- } from "./chunk-KM24SYPM.mjs";
10
- import "./chunk-KJGD4EBJ.mjs";
11
- import "./chunk-3Q22TTXW.mjs";
12
- import "./chunk-AB74FOA2.mjs";
9
+ } from "./chunk-ZNSHGWE4.mjs";
10
+ import "./chunk-CKW4IYLY.mjs";
11
+ import "./chunk-GWKWQSEQ.mjs";
12
+ import "./chunk-E4JSYCWZ.mjs";
13
13
  import {
14
14
  meta
15
15
  } from "./chunk-WE6KTH72.mjs";
@@ -17,14 +17,15 @@ import "./chunk-HSLMI22Q.mjs";
17
17
 
18
18
  // src/components/ChatContainer.tsx
19
19
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
20
- import React from "react";
20
+ import React, { forwardRef } from "react";
21
21
  import { Capabilities } from "@dxos/app-framework";
22
22
  import { useCapability } from "@dxos/app-framework/react";
23
23
  import { getSpace } from "@dxos/client/echo";
24
24
  import { StackItem } from "@dxos/react-ui-stack";
25
- var ChatContainer = ({ space: spaceProp, chat, companionTo, onEvent }) => {
25
+ var ChatContainer = /* @__PURE__ */ forwardRef((props, forwardedRef) => {
26
26
  var _effect = _useSignals();
27
27
  try {
28
+ const { space: spaceProp, chat, companionTo, onEvent } = props;
28
29
  const space = spaceProp ?? getSpace(chat);
29
30
  const settings = useCapability(Capabilities.SettingsStore).getStore(meta.id)?.value;
30
31
  const services = useChatServices({
@@ -46,7 +47,8 @@ var ChatContainer = ({ space: spaceProp, chat, companionTo, onEvent }) => {
46
47
  return null;
47
48
  }
48
49
  return /* @__PURE__ */ React.createElement(StackItem.Content, {
49
- toolbar: true
50
+ toolbar: true,
51
+ ref: forwardedRef
50
52
  }, /* @__PURE__ */ React.createElement(Chat.Root, {
51
53
  space,
52
54
  chat,
@@ -69,10 +71,10 @@ var ChatContainer = ({ space: spaceProp, chat, companionTo, onEvent }) => {
69
71
  } finally {
70
72
  _effect.f();
71
73
  }
72
- };
74
+ });
73
75
  var ChatContainer_default = ChatContainer;
74
76
  export {
75
77
  ChatContainer,
76
78
  ChatContainer_default as default
77
79
  };
78
- //# sourceMappingURL=ChatContainer-MT4INE7Z.mjs.map
80
+ //# sourceMappingURL=ChatContainer-OWAZI6ZF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChatContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport { Capabilities } from '@dxos/app-framework';\nimport { useCapability } from '@dxos/app-framework/react';\nimport { type Space, getSpace } from '@dxos/client/echo';\nimport { type Obj } from '@dxos/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { useBlueprintRegistry, useChatProcessor, useChatServices, useOnline, usePresets } from '../hooks';\nimport { meta } from '../meta';\nimport { type Assistant } from '../types';\n\nimport { Chat, type ChatRootProps } from './Chat';\n\nexport type ChatContainerProps = {\n role?: string;\n space?: Space;\n chat?: Assistant.Chat;\n companionTo?: Obj.Any;\n} & Pick<ChatRootProps, 'onEvent'>;\n\nexport const ChatContainer = forwardRef<HTMLDivElement, ChatContainerProps>((props, forwardedRef) => {\n const { space: spaceProp, chat, companionTo, onEvent } = props;\n const space = spaceProp ?? getSpace(chat);\n const settings = useCapability(Capabilities.SettingsStore).getStore<Assistant.Settings>(meta.id)?.value;\n const services = useChatServices({ space, chat });\n const [online, setOnline] = useOnline();\n const { preset, ...chatProps } = usePresets(online);\n const blueprintRegistry = useBlueprintRegistry();\n const processor = useChatProcessor({\n space,\n chat,\n preset,\n services,\n blueprintRegistry,\n settings,\n });\n\n if (!processor) {\n return null;\n }\n\n return (\n <StackItem.Content toolbar ref={forwardedRef}>\n <Chat.Root space={space} chat={chat} processor={processor} onEvent={onEvent}>\n <Chat.Toolbar companionTo={companionTo} />\n <Chat.Viewport classNames='container-max-width'>\n <Chat.Thread />\n <div role='none' className='p-4'>\n <Chat.Prompt {...chatProps} outline preset={preset?.id} online={online} onOnlineChange={setOnline} />\n </div>\n </Chat.Viewport>\n </Chat.Root>\n </StackItem.Content>\n );\n});\n\nexport default ChatContainer;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAIA,OAAOA,SAASC,kBAAkB;AAElC,SAASC,oBAAoB;AAC7B,SAASC,qBAAqB;AAC9B,SAAqBC,gBAAgB;AAErC,SAASC,iBAAiB;AAenB,IAAMC,gBAAgBC,2BAA+C,CAACC,OAAOC,iBAAAA;;;AAClF,UAAM,EAAEC,OAAOC,WAAWC,MAAMC,aAAaC,QAAO,IAAKN;AACzD,UAAME,QAAQC,aAAaI,SAASH,IAAAA;AACpC,UAAMI,WAAWC,cAAcC,aAAaC,aAAa,EAAEC,SAA6BC,KAAKC,EAAE,GAAGC;AAClG,UAAMC,WAAWC,gBAAgB;MAAEf;MAAOE;IAAK,CAAA;AAC/C,UAAM,CAACc,QAAQC,SAAAA,IAAaC,UAAAA;AAC5B,UAAM,EAAEC,QAAQ,GAAGC,UAAAA,IAAcC,WAAWL,MAAAA;AAC5C,UAAMM,oBAAoBC,qBAAAA;AAC1B,UAAMC,YAAYC,iBAAiB;MACjCzB;MACAE;MACAiB;MACAL;MACAQ;MACAhB;IACF,CAAA;AAEA,QAAI,CAACkB,WAAW;AACd,aAAO;IACT;AAEA,WACE,sBAAA,cAACE,UAAUC,SAAO;MAACC,SAAAA;MAAQC,KAAK9B;OAC9B,sBAAA,cAAC+B,KAAKC,MAAI;MAAC/B;MAAcE;MAAYsB;MAAsBpB;OACzD,sBAAA,cAAC0B,KAAKE,SAAO;MAAC7B;QACd,sBAAA,cAAC2B,KAAKG,UAAQ;MAACC,YAAW;OACxB,sBAAA,cAACJ,KAAKK,QAAM,IAAA,GACZ,sBAAA,cAACC,OAAAA;MAAIC,MAAK;MAAOC,WAAU;OACzB,sBAAA,cAACR,KAAKS,QAAM;MAAE,GAAGnB;MAAWoB,SAAAA;MAAQrB,QAAQA,QAAQP;MAAII;MAAgByB,gBAAgBxB;;;;;AAMpG,CAAA;AAEA,IAAA,wBAAerB;",
6
+ "names": ["React", "forwardRef", "Capabilities", "useCapability", "getSpace", "StackItem", "ChatContainer", "forwardRef", "props", "forwardedRef", "space", "spaceProp", "chat", "companionTo", "onEvent", "getSpace", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "meta", "id", "value", "services", "useChatServices", "online", "setOnline", "useOnline", "preset", "chatProps", "usePresets", "blueprintRegistry", "useBlueprintRegistry", "processor", "useChatProcessor", "StackItem", "Content", "toolbar", "ref", "Chat", "Root", "Toolbar", "Viewport", "classNames", "Thread", "div", "role", "className", "Prompt", "outline", "onOnlineChange"]
7
+ }
@@ -6,10 +6,10 @@ import {
6
6
  useChatServices,
7
7
  useOnline,
8
8
  usePresets
9
- } from "./chunk-KM24SYPM.mjs";
10
- import "./chunk-KJGD4EBJ.mjs";
11
- import "./chunk-3Q22TTXW.mjs";
12
- import "./chunk-AB74FOA2.mjs";
9
+ } from "./chunk-ZNSHGWE4.mjs";
10
+ import "./chunk-CKW4IYLY.mjs";
11
+ import "./chunk-GWKWQSEQ.mjs";
12
+ import "./chunk-E4JSYCWZ.mjs";
13
13
  import {
14
14
  meta
15
15
  } from "./chunk-WE6KTH72.mjs";
@@ -88,4 +88,4 @@ export {
88
88
  ChatDialog,
89
89
  ChatDialog_default as default
90
90
  };
91
- //# sourceMappingURL=ChatDialog-G4EWBIJM.mjs.map
91
+ //# sourceMappingURL=ChatDialog-IBXH5FRI.mjs.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  TemplateEditor
4
- } from "./chunk-KJGD4EBJ.mjs";
4
+ } from "./chunk-CKW4IYLY.mjs";
5
5
  import {
6
6
  meta
7
7
  } from "./chunk-WE6KTH72.mjs";
@@ -24,7 +24,7 @@ var PromptArticle = ({ subject }) => {
24
24
  const space = getSpace(subject);
25
25
  const { hasAttention } = useAttention(Obj.getDXN(subject).toString());
26
26
  const inputData = useMemo(() => subject && {
27
- prompt: space?.db.ref(Obj.getDXN(subject)),
27
+ prompt: space?.db.makeRef(Obj.getDXN(subject)),
28
28
  input: {}
29
29
  }, [
30
30
  subject,
@@ -57,4 +57,4 @@ export {
57
57
  PromptArticle,
58
58
  PromptArticle_default as default
59
59
  };
60
- //# sourceMappingURL=PromptArticle-OUKFSJQV.mjs.map
60
+ //# sourceMappingURL=PromptArticle-IV7O5UZ3.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/PromptArticle.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-framework/react';\nimport { Agent } from '@dxos/assistant-toolkit';\nimport { type Prompt } from '@dxos/blueprints';\nimport { Obj } from '@dxos/echo';\nimport { invokeFunctionWithTracing, useComputeRuntimeCallback } from '@dxos/plugin-automation';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Toolbar, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { meta } from '../meta';\n\nimport { TemplateEditor } from './TemplateEditor';\n\nexport type PromptArticleProps = SurfaceComponentProps<Prompt.Prompt>;\n\nexport const PromptArticle = ({ subject }: PromptArticleProps) => {\n const { t } = useTranslation(meta.id);\n const space = getSpace(subject);\n const { hasAttention } = useAttention(Obj.getDXN(subject).toString());\n\n const inputData = useMemo(\n () =>\n subject && {\n prompt: space?.db.ref(Obj.getDXN(subject)),\n input: {},\n },\n [subject, space],\n );\n\n const handleRun = useComputeRuntimeCallback(space, () => invokeFunctionWithTracing(Agent.prompt, inputData), [\n inputData,\n ]);\n\n return (\n <StackItem.Content toolbar>\n <Toolbar.Root disabled={!hasAttention} onClick={handleRun}>\n <Toolbar.IconButton iconOnly icon='ph--play--regular' label={t('run prompt label')} onClick={handleRun} />\n </Toolbar.Root>\n <TemplateEditor id={subject.id} template={subject.instructions} classNames='container-max-width' />\n </StackItem.Content>\n );\n};\n\nexport default PromptArticle;\n"],
5
- "mappings": ";;;;;;;;;;;AAIA,OAAOA,SAASC,eAAe;AAG/B,SAASC,aAAa;AAEtB,SAASC,WAAW;AACpB,SAASC,2BAA2BC,iCAAiC;AACrE,SAASC,gBAAgB;AACzB,SAASC,SAASC,sBAAsB;AACxC,SAASC,oBAAoB;AAC7B,SAASC,iBAAiB;AAQnB,IAAMC,gBAAgB,CAAC,EAAEC,QAAO,MAAsB;;;AAC3D,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,UAAMC,QAAQC,SAASN,OAAAA;AACvB,UAAM,EAAEO,aAAY,IAAKC,aAAaC,IAAIC,OAAOV,OAAAA,EAASW,SAAQ,CAAA;AAElE,UAAMC,YAAYC,QAChB,MACEb,WAAW;MACTc,QAAQT,OAAOU,GAAGC,IAAIP,IAAIC,OAAOV,OAAAA,CAAAA;MACjCiB,OAAO,CAAC;IACV,GACF;MAACjB;MAASK;KAAM;AAGlB,UAAMa,YAAYC,0BAA0Bd,OAAO,MAAMe,0BAA0BC,MAAMP,QAAQF,SAAAA,GAAY;MAC3GA;KACD;AAED,WACE,sBAAA,cAACU,UAAUC,SAAO;MAACC,SAAAA;OACjB,sBAAA,cAACC,QAAQC,MAAI;MAACC,UAAU,CAACpB;MAAcqB,SAASV;OAC9C,sBAAA,cAACO,QAAQI,YAAU;MAACC,UAAAA;MAASC,MAAK;MAAoBC,OAAO/B,EAAE,kBAAA;MAAqB2B,SAASV;SAE/F,sBAAA,cAACe,gBAAAA;MAAe7B,IAAIJ,QAAQI;MAAI8B,UAAUlC,QAAQmC;MAAcC,YAAW;;;;;AAGjF;AAEA,IAAA,wBAAerC;",
6
- "names": ["React", "useMemo", "Agent", "Obj", "invokeFunctionWithTracing", "useComputeRuntimeCallback", "getSpace", "Toolbar", "useTranslation", "useAttention", "StackItem", "PromptArticle", "subject", "t", "useTranslation", "meta", "id", "space", "getSpace", "hasAttention", "useAttention", "Obj", "getDXN", "toString", "inputData", "useMemo", "prompt", "db", "ref", "input", "handleRun", "useComputeRuntimeCallback", "invokeFunctionWithTracing", "Agent", "StackItem", "Content", "toolbar", "Toolbar", "Root", "disabled", "onClick", "IconButton", "iconOnly", "icon", "label", "TemplateEditor", "template", "instructions", "classNames"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type SurfaceComponentProps } from '@dxos/app-framework/react';\nimport { Agent } from '@dxos/assistant-toolkit';\nimport { type Prompt } from '@dxos/blueprints';\nimport { Obj } from '@dxos/echo';\nimport { invokeFunctionWithTracing, useComputeRuntimeCallback } from '@dxos/plugin-automation';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Toolbar, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { meta } from '../meta';\n\nimport { TemplateEditor } from './TemplateEditor';\n\nexport type PromptArticleProps = SurfaceComponentProps<Prompt.Prompt>;\n\nexport const PromptArticle = ({ subject }: PromptArticleProps) => {\n const { t } = useTranslation(meta.id);\n const space = getSpace(subject);\n const { hasAttention } = useAttention(Obj.getDXN(subject).toString());\n\n const inputData = useMemo(\n () =>\n subject && {\n prompt: space?.db.makeRef(Obj.getDXN(subject)),\n input: {},\n },\n [subject, space],\n );\n\n const handleRun = useComputeRuntimeCallback(space, () => invokeFunctionWithTracing(Agent.prompt, inputData), [\n inputData,\n ]);\n\n return (\n <StackItem.Content toolbar>\n <Toolbar.Root disabled={!hasAttention} onClick={handleRun}>\n <Toolbar.IconButton iconOnly icon='ph--play--regular' label={t('run prompt label')} onClick={handleRun} />\n </Toolbar.Root>\n <TemplateEditor id={subject.id} template={subject.instructions} classNames='container-max-width' />\n </StackItem.Content>\n );\n};\n\nexport default PromptArticle;\n"],
5
+ "mappings": ";;;;;;;;;;;AAIA,OAAOA,SAASC,eAAe;AAG/B,SAASC,aAAa;AAEtB,SAASC,WAAW;AACpB,SAASC,2BAA2BC,iCAAiC;AACrE,SAASC,gBAAgB;AACzB,SAASC,SAASC,sBAAsB;AACxC,SAASC,oBAAoB;AAC7B,SAASC,iBAAiB;AAQnB,IAAMC,gBAAgB,CAAC,EAAEC,QAAO,MAAsB;;;AAC3D,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,UAAMC,QAAQC,SAASN,OAAAA;AACvB,UAAM,EAAEO,aAAY,IAAKC,aAAaC,IAAIC,OAAOV,OAAAA,EAASW,SAAQ,CAAA;AAElE,UAAMC,YAAYC,QAChB,MACEb,WAAW;MACTc,QAAQT,OAAOU,GAAGC,QAAQP,IAAIC,OAAOV,OAAAA,CAAAA;MACrCiB,OAAO,CAAC;IACV,GACF;MAACjB;MAASK;KAAM;AAGlB,UAAMa,YAAYC,0BAA0Bd,OAAO,MAAMe,0BAA0BC,MAAMP,QAAQF,SAAAA,GAAY;MAC3GA;KACD;AAED,WACE,sBAAA,cAACU,UAAUC,SAAO;MAACC,SAAAA;OACjB,sBAAA,cAACC,QAAQC,MAAI;MAACC,UAAU,CAACpB;MAAcqB,SAASV;OAC9C,sBAAA,cAACO,QAAQI,YAAU;MAACC,UAAAA;MAASC,MAAK;MAAoBC,OAAO/B,EAAE,kBAAA;MAAqB2B,SAASV;SAE/F,sBAAA,cAACe,gBAAAA;MAAe7B,IAAIJ,QAAQI;MAAI8B,UAAUlC,QAAQmC;MAAcC,YAAW;;;;;AAGjF;AAEA,IAAA,wBAAerC;",
6
+ "names": ["React", "useMemo", "Agent", "Obj", "invokeFunctionWithTracing", "useComputeRuntimeCallback", "getSpace", "Toolbar", "useTranslation", "useAttention", "StackItem", "PromptArticle", "subject", "t", "useTranslation", "meta", "id", "space", "getSpace", "hasAttention", "useAttention", "Obj", "getDXN", "toString", "inputData", "useMemo", "prompt", "db", "makeRef", "input", "handleRun", "useComputeRuntimeCallback", "invokeFunctionWithTracing", "Agent", "StackItem", "Content", "toolbar", "Toolbar", "Root", "disabled", "onClick", "IconButton", "iconOnly", "icon", "label", "TemplateEditor", "template", "instructions", "classNames"]
7
7
  }
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  AssistantAction_exports,
4
4
  Assistant_exports
5
- } from "./chunk-AB74FOA2.mjs";
5
+ } from "./chunk-E4JSYCWZ.mjs";
6
6
  import {
7
7
  AssistantCapabilities
8
8
  } from "./chunk-YWFWT57N.mjs";
@@ -114,9 +114,9 @@ var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphB
114
114
  }
115
115
  const space = getSpace(object);
116
116
  const currentChatDxn = DXN.tryParse(currentChatState);
117
- const currentChatRef = currentChatDxn ? space?.db.ref(currentChatDxn) : void 0;
117
+ const currentChatRef = currentChatDxn ? space?.db.makeRef(currentChatDxn) : void 0;
118
118
  const currentChat = get(atomFromSignal(() => currentChatRef?.target));
119
- return currentChat ? Option.some({
119
+ return Obj.isObject(currentChat) ? Option.some({
120
120
  object,
121
121
  currentChat
122
122
  }) : Option.none();
@@ -170,8 +170,8 @@ var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphB
170
170
  })
171
171
  ]));
172
172
  var getOrCreateChat = async (dispatch, space) => {
173
- const { objects: allChats } = await space.db.query(Query.type(Assistant_exports.Chat)).run();
174
- const { objects: relatedChats } = await space.db.query(Query.type(Assistant_exports.Chat).sourceOf(Assistant_exports.CompanionTo).source()).run();
173
+ const allChats = await space.db.query(Query.type(Assistant_exports.Chat)).run();
174
+ const relatedChats = await space.db.query(Query.type(Assistant_exports.Chat).sourceOf(Assistant_exports.CompanionTo).source()).run();
175
175
  const chats = allChats.filter((chat) => !relatedChats.includes(chat));
176
176
  if (chats.length > 0) {
177
177
  return chats.at(-1);
@@ -181,7 +181,7 @@ var getOrCreateChat = async (dispatch, space) => {
181
181
  }));
182
182
  invariant(Obj.instanceOf(Assistant_exports.Chat, data?.object), void 0, {
183
183
  F: __dxlog_file,
184
- L: 207,
184
+ L: 205,
185
185
  S: void 0,
186
186
  A: [
187
187
  "Obj.instanceOf(Assistant.Chat, data?.object)",
@@ -197,4 +197,4 @@ var getOrCreateChat = async (dispatch, space) => {
197
197
  export {
198
198
  app_graph_builder_default as default
199
199
  };
200
- //# sourceMappingURL=app-graph-builder-VRN6ESRR.mjs.map
200
+ //# sourceMappingURL=app-graph-builder-26KXQ5ZY.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport {\n Capabilities,\n LayoutAction,\n type PluginContext,\n type PromiseIntentDispatcher,\n contributes,\n createIntent,\n} from '@dxos/app-framework';\nimport { Prompt } from '@dxos/blueprints';\nimport { Sequence } from '@dxos/conductor';\nimport { DXN, Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { ROOT_ID, atomFromSignal, createExtension } from '@dxos/plugin-graph';\nimport { getActiveSpace } from '@dxos/plugin-space';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { Query, type Space, getSpace } from '@dxos/react-client/echo';\n\nimport { ASSISTANT_DIALOG, meta } from '../meta';\nimport { Assistant, AssistantAction } from '../types';\n\nimport { AssistantCapabilities } from './capabilities';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/root`,\n actions: (node) =>\n Atom.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) => {\n return Obj.instanceOf(Assistant.Chat, node.data) ? Option.some(node.data) : Option.none();\n }),\n Option.map((object) => {\n const id = Obj.getDXN(object).toString();\n return [\n {\n id: `${AssistantAction.UpdateChatName._tag}/${id}`,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n await dispatch(createIntent(AssistantAction.UpdateChatName, { chat: object }));\n },\n properties: {\n label: ['chat update name label', { ns: meta.id }],\n icon: 'ph--magic-wand--regular',\n disposition: 'list-item',\n },\n },\n ];\n }),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n\n createExtension({\n id: `${meta.id}/assistant`,\n actions: (node) =>\n Atom.make((get) =>\n Function.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 space = getActiveSpace(context) ?? client.spaces.default;\n const chat = await getOrCreateChat(dispatch, space);\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: meta.id }],\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: `${meta.id}/companion-chat`,\n connector: (node) => {\n return Atom.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node.data) : Option.none())),\n Option.flatMap((object) => {\n const currentChatState = get(\n atomFromSignal(\n () => context.getCapability(AssistantCapabilities.State).currentChat[Obj.getDXN(object).toString()],\n ),\n );\n // If no state, continue to allow chat initialization.\n if (!currentChatState) {\n return Option.some({ object, currentChat: undefined });\n }\n\n const space = getSpace(object);\n const currentChatDxn = DXN.tryParse(currentChatState);\n const currentChatRef = currentChatDxn ? space?.db.ref(currentChatDxn) : undefined;\n const currentChat = get(atomFromSignal(() => currentChatRef?.target));\n return currentChat ? Option.some({ object, currentChat }) : Option.none();\n }),\n Option.map(({ object, currentChat }) => {\n return [\n {\n id: [Obj.getDXN(object).toString(), 'assistant-chat'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: currentChat ?? 'assistant-chat',\n properties: {\n label: ['assistant chat label', { ns: meta.id }],\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: `${meta.id}/invocations`,\n connector: (node) =>\n Atom.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) =>\n Obj.instanceOf(Sequence, node.data) || Obj.instanceOf(Prompt.Prompt, node.data)\n ? Option.some(node)\n : Option.none(),\n ),\n Option.map((node) => [\n {\n id: [node.id, 'invocations'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'invocations',\n properties: {\n label: ['invocations label', { ns: meta.id }],\n icon: 'ph--clock-countdown--regular',\n disposition: 'hidden',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n\n// TODO(burdon): Factor out.\nconst getOrCreateChat = async (\n dispatch: PromiseIntentDispatcher,\n space: Space,\n): Promise<Assistant.Chat | undefined> => {\n // TODO(wittjosiah): This should be possible with a single query.\n const { objects: allChats } = await space.db.query(Query.type(Assistant.Chat)).run();\n const { objects: relatedChats } = await space.db\n .query(Query.type(Assistant.Chat).sourceOf(Assistant.CompanionTo).source())\n .run();\n\n const chats = allChats.filter((chat) => !relatedChats.includes(chat));\n if (chats.length > 0) {\n return chats.at(-1);\n }\n\n const { data } = await dispatch(createIntent(AssistantAction.CreateChat, { space }));\n invariant(Obj.instanceOf(Assistant.Chat, 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": ["Atom", "Function", "Option", "Capabilities", "LayoutAction", "contributes", "createIntent", "Prompt", "Sequence", "DXN", "Obj", "invariant", "ClientCapabilities", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "ROOT_ID", "atomFromSignal", "createExtension", "getActiveSpace", "SpaceAction", "Query", "getSpace", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "actions", "node", "Atom", "make", "get", "pipe", "flatMap", "Obj", "instanceOf", "Assistant", "Chat", "data", "some", "none", "map", "object", "getDXN", "toString", "AssistantAction", "UpdateChatName", "_tag", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "createIntent", "chat", "properties", "label", "ns", "icon", "disposition", "getOrElse", "ROOT_ID", "LayoutAction", "UpdateDialog", "client", "ClientCapabilities", "Client", "space", "getActiveSpace", "spaces", "default", "getOrCreateChat", "part", "subject", "ASSISTANT_DIALOG", "options", "state", "blockAlign", "props", "position", "keyBinding", "macos", "windows", "connector", "isObject", "currentChatState", "atomFromSignal", "AssistantCapabilities", "State", "currentChat", "undefined", "getSpace", "currentChatDxn", "DXN", "tryParse", "currentChatRef", "db", "ref", "target", "join", "ATTENDABLE_PATH_SEPARATOR", "type", "PLANK_COMPANION_TYPE", "Sequence", "Prompt", "objects", "allChats", "query", "Query", "run", "relatedChats", "sourceOf", "CompanionTo", "source", "chats", "filter", "includes", "length", "at", "CreateChat", "invariant", "SpaceAction", "AddObject"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport {\n Capabilities,\n LayoutAction,\n type PluginContext,\n type PromiseIntentDispatcher,\n contributes,\n createIntent,\n} from '@dxos/app-framework';\nimport { Prompt } from '@dxos/blueprints';\nimport { Sequence } from '@dxos/conductor';\nimport { DXN, Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { ROOT_ID, atomFromSignal, createExtension } from '@dxos/plugin-graph';\nimport { getActiveSpace } from '@dxos/plugin-space';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { Query, type Space, getSpace } from '@dxos/react-client/echo';\n\nimport { ASSISTANT_DIALOG, meta } from '../meta';\nimport { Assistant, AssistantAction } from '../types';\n\nimport { AssistantCapabilities } from './capabilities';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/root`,\n actions: (node) =>\n Atom.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) => {\n return Obj.instanceOf(Assistant.Chat, node.data) ? Option.some(node.data) : Option.none();\n }),\n Option.map((object) => {\n const id = Obj.getDXN(object).toString();\n return [\n {\n id: `${AssistantAction.UpdateChatName._tag}/${id}`,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n await dispatch(createIntent(AssistantAction.UpdateChatName, { chat: object }));\n },\n properties: {\n label: ['chat update name label', { ns: meta.id }],\n icon: 'ph--magic-wand--regular',\n disposition: 'list-item',\n },\n },\n ];\n }),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n\n createExtension({\n id: `${meta.id}/assistant`,\n actions: (node) =>\n Atom.make((get) =>\n Function.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 space = getActiveSpace(context) ?? client.spaces.default;\n const chat = await getOrCreateChat(dispatch, space);\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: meta.id }],\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: `${meta.id}/companion-chat`,\n connector: (node) => {\n return Atom.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node.data) : Option.none())),\n Option.flatMap((object): Option.Option<{ object: Obj.Any; currentChat: Obj.Any | undefined }> => {\n const currentChatState = get(\n atomFromSignal(\n () => context.getCapability(AssistantCapabilities.State).currentChat[Obj.getDXN(object).toString()],\n ),\n );\n // If no state, continue to allow chat initialization.\n if (!currentChatState) {\n return Option.some({ object, currentChat: undefined });\n }\n\n const space = getSpace(object);\n const currentChatDxn = DXN.tryParse(currentChatState);\n const currentChatRef = currentChatDxn ? space?.db.makeRef(currentChatDxn) : undefined;\n const currentChat = get(atomFromSignal(() => currentChatRef?.target));\n return Obj.isObject(currentChat) ? Option.some({ object, currentChat }) : Option.none();\n }),\n Option.map(({ object, currentChat }) => {\n return [\n {\n id: [Obj.getDXN(object).toString(), 'assistant-chat'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: currentChat ?? 'assistant-chat',\n properties: {\n label: ['assistant chat label', { ns: meta.id }],\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: `${meta.id}/invocations`,\n connector: (node) =>\n Atom.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) =>\n Obj.instanceOf(Sequence, node.data) || Obj.instanceOf(Prompt.Prompt, node.data)\n ? Option.some(node)\n : Option.none(),\n ),\n Option.map((node) => [\n {\n id: [node.id, 'invocations'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'invocations',\n properties: {\n label: ['invocations label', { ns: meta.id }],\n icon: 'ph--clock-countdown--regular',\n disposition: 'hidden',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n\n// TODO(burdon): Factor out.\nconst getOrCreateChat = async (\n dispatch: PromiseIntentDispatcher,\n space: Space,\n): Promise<Assistant.Chat | undefined> => {\n // TODO(wittjosiah): This should be possible with a single query.\n const allChats = await space.db.query(Query.type(Assistant.Chat)).run();\n const relatedChats = await space.db.query(Query.type(Assistant.Chat).sourceOf(Assistant.CompanionTo).source()).run();\n\n const chats = allChats.filter((chat) => !relatedChats.includes(chat));\n if (chats.length > 0) {\n return chats.at(-1);\n }\n\n const { data } = await dispatch(createIntent(AssistantAction.CreateChat, { space }));\n invariant(Obj.instanceOf(Assistant.Chat, 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": ["Atom", "Function", "Option", "Capabilities", "LayoutAction", "contributes", "createIntent", "Prompt", "Sequence", "DXN", "Obj", "invariant", "ClientCapabilities", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "ROOT_ID", "atomFromSignal", "createExtension", "getActiveSpace", "SpaceAction", "Query", "getSpace", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "actions", "node", "Atom", "make", "get", "pipe", "flatMap", "Obj", "instanceOf", "Assistant", "Chat", "data", "some", "none", "map", "object", "getDXN", "toString", "AssistantAction", "UpdateChatName", "_tag", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "createIntent", "chat", "properties", "label", "ns", "icon", "disposition", "getOrElse", "ROOT_ID", "LayoutAction", "UpdateDialog", "client", "ClientCapabilities", "Client", "space", "getActiveSpace", "spaces", "default", "getOrCreateChat", "part", "subject", "ASSISTANT_DIALOG", "options", "state", "blockAlign", "props", "position", "keyBinding", "macos", "windows", "connector", "isObject", "currentChatState", "atomFromSignal", "AssistantCapabilities", "State", "currentChat", "undefined", "getSpace", "currentChatDxn", "DXN", "tryParse", "currentChatRef", "db", "makeRef", "target", "join", "ATTENDABLE_PATH_SEPARATOR", "type", "PLANK_COMPANION_TYPE", "Sequence", "Prompt", "allChats", "query", "Query", "run", "relatedChats", "sourceOf", "CompanionTo", "source", "chats", "filter", "includes", "length", "at", "CreateChat", "invariant", "SpaceAction", "AddObject"]
7
7
  }
@@ -3,11 +3,11 @@ import {
3
3
  ASSISTANT_BLUEPRINT_KEY,
4
4
  blueprint_definition_default,
5
5
  createBlueprint
6
- } from "./chunk-UXTUHH24.mjs";
6
+ } from "./chunk-VGSP5WMV.mjs";
7
7
  import "./chunk-HSLMI22Q.mjs";
8
8
  export {
9
9
  ASSISTANT_BLUEPRINT_KEY,
10
10
  createBlueprint,
11
11
  blueprint_definition_default as default
12
12
  };
13
- //# sourceMappingURL=blueprint-definition-XW6QQVLV.mjs.map
13
+ //# sourceMappingURL=blueprint-definition-S3DNWJFV.mjs.map
@@ -7,7 +7,7 @@ import {
7
7
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
8
8
  import { defaultHighlightStyle, syntaxHighlighting } from "@codemirror/language";
9
9
  import React from "react";
10
- import { createDocAccessor } from "@dxos/react-client/echo";
10
+ import { createDocAccessor } from "@dxos/echo-db";
11
11
  import { useThemeContext, useTranslation } from "@dxos/react-ui";
12
12
  import { createBasicExtensions, createDataExtensions, createMarkdownExtensions, createThemeExtensions, decorateMarkdown, useTextEditor } from "@dxos/react-ui-editor";
13
13
  import { mx as mx2 } from "@dxos/react-ui-theme";
@@ -333,4 +333,4 @@ var TemplateEditor = ({ id, classNames, template, lineNumbers = true }) => {
333
333
  export {
334
334
  TemplateEditor
335
335
  };
336
- //# sourceMappingURL=chunk-KJGD4EBJ.mjs.map
336
+ //# sourceMappingURL=chunk-CKW4IYLY.mjs.map