@dxos/plugin-assistant 0.8.1-staging.5be625a → 0.8.1-staging.97aedb1

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 (161) hide show
  1. package/dist/lib/browser/{AssistantDialog-EIUUSXDS.mjs → AssistantDialog-YSHMAHW5.mjs} +9 -9
  2. package/dist/lib/browser/AssistantDialog-YSHMAHW5.mjs.map +7 -0
  3. package/dist/lib/browser/{ChatContainer-NHHA6CSP.mjs → ChatContainer-V5GP7DYF.mjs} +11 -11
  4. package/dist/lib/browser/ChatContainer-V5GP7DYF.mjs.map +7 -0
  5. package/dist/lib/browser/{TemplateContainer-7IQ6V5AD.mjs → TemplateContainer-K4EJNGIL.mjs} +7 -7
  6. package/dist/lib/browser/{TemplateContainer-7IQ6V5AD.mjs.map → TemplateContainer-K4EJNGIL.mjs.map} +2 -2
  7. package/dist/lib/browser/{ai-client-BAPVMSNX.mjs → ai-client-CDZLSNXE.mjs} +4 -4
  8. package/dist/lib/browser/{app-graph-builder-DTCUWBKB.mjs → app-graph-builder-MF5EVDWW.mjs} +63 -8
  9. package/dist/lib/browser/app-graph-builder-MF5EVDWW.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-AF7VQAKS.mjs → chunk-3HCI5FIL.mjs} +2 -2
  11. package/dist/lib/browser/{chunk-KGIACFAX.mjs → chunk-FMB7RGMP.mjs} +69 -65
  12. package/dist/lib/browser/{chunk-KGIACFAX.mjs.map → chunk-FMB7RGMP.mjs.map} +3 -3
  13. package/dist/lib/browser/chunk-IAMR2FAE.mjs +183 -0
  14. package/dist/lib/browser/chunk-IAMR2FAE.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-25APJ3ZK.mjs → chunk-KYMKVE6M.mjs} +10 -10
  16. package/dist/lib/browser/{chunk-6FTPLBSC.mjs → chunk-NFUHCW2J.mjs} +3 -3
  17. package/dist/lib/browser/{chunk-SVUCJXGN.mjs → chunk-TXJWGWJ7.mjs} +3 -3
  18. package/dist/lib/browser/index.mjs +18 -32
  19. package/dist/lib/browser/index.mjs.map +3 -3
  20. package/dist/lib/browser/{intent-resolver-U57FXP3I.mjs → intent-resolver-WJGLKKVO.mjs} +5 -6
  21. package/dist/lib/browser/{intent-resolver-U57FXP3I.mjs.map → intent-resolver-WJGLKKVO.mjs.map} +3 -3
  22. package/dist/lib/browser/meta.json +1 -1
  23. package/dist/lib/browser/{react-surface-YNN5NYJW.mjs → react-surface-57VRDOQT.mjs} +34 -14
  24. package/dist/lib/browser/react-surface-57VRDOQT.mjs.map +7 -0
  25. package/dist/lib/browser/{settings-VAW6UWFL.mjs → settings-U6UFQX32.mjs} +4 -4
  26. package/dist/lib/browser/types/index.mjs +2 -2
  27. package/dist/lib/node/{AssistantDialog-GT7R7MKH.cjs → AssistantDialog-YI2BSGSX.cjs} +12 -12
  28. package/dist/lib/node/AssistantDialog-YI2BSGSX.cjs.map +7 -0
  29. package/dist/lib/node/{ChatContainer-JUZOEZZ7.cjs → ChatContainer-ZJ5JXF6A.cjs} +15 -15
  30. package/dist/lib/node/ChatContainer-ZJ5JXF6A.cjs.map +7 -0
  31. package/dist/lib/node/{TemplateContainer-VPAZRFQA.cjs → TemplateContainer-XWFYJB4T.cjs} +12 -12
  32. package/dist/lib/node/{TemplateContainer-VPAZRFQA.cjs.map → TemplateContainer-XWFYJB4T.cjs.map} +2 -2
  33. package/dist/lib/node/{ai-client-5ESLYXAV.cjs → ai-client-URCCYU6B.cjs} +8 -8
  34. package/dist/lib/node/{app-graph-builder-3P6WSON2.cjs → app-graph-builder-N5ZUUI2Z.cjs} +82 -27
  35. package/dist/lib/node/app-graph-builder-N5ZUUI2Z.cjs.map +7 -0
  36. package/dist/lib/node/{chunk-KLSNCP34.cjs → chunk-APRU3QWK.cjs} +7 -8
  37. package/dist/lib/node/chunk-APRU3QWK.cjs.map +7 -0
  38. package/dist/lib/node/{chunk-VRXFIS4X.cjs → chunk-GBUNQ257.cjs} +6 -6
  39. package/dist/lib/node/{chunk-U6J2GO7I.cjs → chunk-Q5XWEMHB.cjs} +4 -4
  40. package/dist/lib/node/{chunk-JAB6KLPP.cjs → chunk-RPBKMP2E.cjs} +50 -46
  41. package/dist/lib/node/{chunk-JAB6KLPP.cjs.map → chunk-RPBKMP2E.cjs.map} +3 -3
  42. package/dist/lib/node/{chunk-N3SW6DJ6.cjs → chunk-XI2ARIEO.cjs} +6 -6
  43. package/dist/lib/node/{chunk-G2HY3UJ4.cjs → chunk-ZKOC4ZFY.cjs} +14 -14
  44. package/dist/lib/node/index.cjs +62 -76
  45. package/dist/lib/node/index.cjs.map +3 -3
  46. package/dist/lib/node/{intent-resolver-YIFAMM3B.cjs → intent-resolver-R3OSTIMH.cjs} +11 -12
  47. package/dist/lib/node/intent-resolver-R3OSTIMH.cjs.map +7 -0
  48. package/dist/lib/node/meta.json +1 -1
  49. package/dist/lib/node/{react-surface-IDGIN55C.cjs → react-surface-NUQTM6MS.cjs} +46 -26
  50. package/dist/lib/node/react-surface-NUQTM6MS.cjs.map +7 -0
  51. package/dist/lib/node/{settings-2FEYGLYU.cjs → settings-TXGRCYAL.cjs} +8 -8
  52. package/dist/lib/node/types/index.cjs +13 -13
  53. package/dist/lib/node/types/index.cjs.map +1 -1
  54. package/dist/lib/node-esm/{AssistantDialog-JMBFM6QH.mjs → AssistantDialog-U2FQX5TD.mjs} +9 -9
  55. package/dist/lib/node-esm/AssistantDialog-U2FQX5TD.mjs.map +7 -0
  56. package/dist/lib/node-esm/{ChatContainer-ZNN5CMVL.mjs → ChatContainer-QW3OOXTT.mjs} +11 -11
  57. package/dist/lib/node-esm/ChatContainer-QW3OOXTT.mjs.map +7 -0
  58. package/dist/lib/node-esm/{TemplateContainer-YLA6BJY6.mjs → TemplateContainer-EUM2X65J.mjs} +7 -7
  59. package/dist/lib/node-esm/{TemplateContainer-YLA6BJY6.mjs.map → TemplateContainer-EUM2X65J.mjs.map} +2 -2
  60. package/dist/lib/node-esm/{ai-client-XYZ5N7CR.mjs → ai-client-WMHS5EGV.mjs} +4 -4
  61. package/dist/lib/node-esm/{app-graph-builder-PMAQLTTN.mjs → app-graph-builder-DWBNIMHM.mjs} +63 -8
  62. package/dist/lib/node-esm/app-graph-builder-DWBNIMHM.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-2CIYX3SD.mjs → chunk-6JK5HEUQ.mjs} +3 -3
  64. package/dist/lib/node-esm/{chunk-N6BVC2C2.mjs → chunk-ECRK6TUQ.mjs} +2 -2
  65. package/dist/lib/node-esm/{chunk-SMUINDXQ.mjs → chunk-GBBXIW5F.mjs} +10 -10
  66. package/dist/lib/node-esm/{chunk-PK5JCOYB.mjs → chunk-MVDAY3CZ.mjs} +69 -65
  67. package/dist/lib/node-esm/{chunk-PK5JCOYB.mjs.map → chunk-MVDAY3CZ.mjs.map} +3 -3
  68. package/dist/lib/node-esm/chunk-MXK2EANZ.mjs +184 -0
  69. package/dist/lib/node-esm/chunk-MXK2EANZ.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-J63VQFQO.mjs → chunk-PBZA7XJR.mjs} +3 -3
  71. package/dist/lib/node-esm/index.mjs +18 -32
  72. package/dist/lib/node-esm/index.mjs.map +3 -3
  73. package/dist/lib/node-esm/{intent-resolver-SQ4HLL5L.mjs → intent-resolver-H32TL4X6.mjs} +5 -6
  74. package/dist/lib/node-esm/{intent-resolver-SQ4HLL5L.mjs.map → intent-resolver-H32TL4X6.mjs.map} +3 -3
  75. package/dist/lib/node-esm/meta.json +1 -1
  76. package/dist/lib/node-esm/{react-surface-424JZTZ4.mjs → react-surface-JBVZF6CP.mjs} +34 -14
  77. package/dist/lib/node-esm/react-surface-JBVZF6CP.mjs.map +7 -0
  78. package/dist/lib/node-esm/{settings-VHR5KT4J.mjs → settings-DZU5PNXM.mjs} +4 -4
  79. package/dist/lib/node-esm/types/index.mjs +2 -2
  80. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  84. package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/ChatContainer.d.ts +4 -2
  86. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  87. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +3 -3
  88. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/Thread/ThreadContainer.d.ts +2 -0
  90. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +3 -3
  92. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/index.d.ts +3 -2
  94. package/dist/types/src/components/index.d.ts.map +1 -1
  95. package/dist/types/src/hooks/useChatProcessor.d.ts +3 -1
  96. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  97. package/dist/types/src/hooks/useMessageQueue.d.ts +1 -1
  98. package/dist/types/src/translations.d.ts +3 -0
  99. package/dist/types/src/translations.d.ts.map +1 -1
  100. package/dist/types/src/types/chat.d.ts +4 -6
  101. package/dist/types/src/types/chat.d.ts.map +1 -1
  102. package/package.json +57 -55
  103. package/src/AssistantPlugin.tsx +8 -19
  104. package/src/capabilities/app-graph-builder.ts +53 -2
  105. package/src/capabilities/intent-resolver.ts +3 -2
  106. package/src/capabilities/react-surface.tsx +25 -8
  107. package/src/components/AmbientDialog/AmbientDialog.stories.tsx +3 -1
  108. package/src/components/AssistantDialog.tsx +1 -1
  109. package/src/components/ChatContainer.tsx +18 -4
  110. package/src/components/Prompt/PromptBar.tsx +2 -2
  111. package/src/components/TemplateContainer.tsx +1 -1
  112. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +4 -4
  113. package/src/components/TemplateEditor/TemplateForm.stories.tsx +2 -2
  114. package/src/components/Thread/Thread.stories.tsx +3 -3
  115. package/src/components/Thread/ThreadContainer.stories.tsx +4 -4
  116. package/src/components/Thread/ThreadContainer.tsx +4 -1
  117. package/src/components/Toolbox/Toolbox.stories.tsx +2 -2
  118. package/src/hooks/processor.ts +1 -1
  119. package/src/hooks/useChatProcessor.tsx +12 -4
  120. package/src/hooks/useMessageQueue.ts +2 -2
  121. package/src/translations.ts +1 -0
  122. package/src/types/chat.ts +2 -3
  123. package/dist/lib/browser/AssistantDialog-EIUUSXDS.mjs.map +0 -7
  124. package/dist/lib/browser/ChatContainer-NHHA6CSP.mjs.map +0 -7
  125. package/dist/lib/browser/app-graph-builder-DTCUWBKB.mjs.map +0 -7
  126. package/dist/lib/browser/chunk-X6ALDUA5.mjs +0 -184
  127. package/dist/lib/browser/chunk-X6ALDUA5.mjs.map +0 -7
  128. package/dist/lib/browser/react-surface-YNN5NYJW.mjs.map +0 -7
  129. package/dist/lib/node/AssistantDialog-GT7R7MKH.cjs.map +0 -7
  130. package/dist/lib/node/ChatContainer-JUZOEZZ7.cjs.map +0 -7
  131. package/dist/lib/node/app-graph-builder-3P6WSON2.cjs.map +0 -7
  132. package/dist/lib/node/chunk-KLSNCP34.cjs.map +0 -7
  133. package/dist/lib/node/intent-resolver-YIFAMM3B.cjs.map +0 -7
  134. package/dist/lib/node/react-surface-IDGIN55C.cjs.map +0 -7
  135. package/dist/lib/node-esm/AssistantDialog-JMBFM6QH.mjs.map +0 -7
  136. package/dist/lib/node-esm/ChatContainer-ZNN5CMVL.mjs.map +0 -7
  137. package/dist/lib/node-esm/app-graph-builder-PMAQLTTN.mjs.map +0 -7
  138. package/dist/lib/node-esm/chunk-NMMRHHAR.mjs +0 -185
  139. package/dist/lib/node-esm/chunk-NMMRHHAR.mjs.map +0 -7
  140. package/dist/lib/node-esm/react-surface-424JZTZ4.mjs.map +0 -7
  141. package/dist/types/src/hooks/email.d.ts +0 -4
  142. package/dist/types/src/hooks/email.d.ts.map +0 -1
  143. package/src/hooks/email.ts +0 -49
  144. /package/dist/lib/browser/{ai-client-BAPVMSNX.mjs.map → ai-client-CDZLSNXE.mjs.map} +0 -0
  145. /package/dist/lib/browser/{chunk-AF7VQAKS.mjs.map → chunk-3HCI5FIL.mjs.map} +0 -0
  146. /package/dist/lib/browser/{chunk-25APJ3ZK.mjs.map → chunk-KYMKVE6M.mjs.map} +0 -0
  147. /package/dist/lib/browser/{chunk-6FTPLBSC.mjs.map → chunk-NFUHCW2J.mjs.map} +0 -0
  148. /package/dist/lib/browser/{chunk-SVUCJXGN.mjs.map → chunk-TXJWGWJ7.mjs.map} +0 -0
  149. /package/dist/lib/browser/{settings-VAW6UWFL.mjs.map → settings-U6UFQX32.mjs.map} +0 -0
  150. /package/dist/lib/node/{ai-client-5ESLYXAV.cjs.map → ai-client-URCCYU6B.cjs.map} +0 -0
  151. /package/dist/lib/node/{chunk-VRXFIS4X.cjs.map → chunk-GBUNQ257.cjs.map} +0 -0
  152. /package/dist/lib/node/{chunk-U6J2GO7I.cjs.map → chunk-Q5XWEMHB.cjs.map} +0 -0
  153. /package/dist/lib/node/{chunk-N3SW6DJ6.cjs.map → chunk-XI2ARIEO.cjs.map} +0 -0
  154. /package/dist/lib/node/{chunk-G2HY3UJ4.cjs.map → chunk-ZKOC4ZFY.cjs.map} +0 -0
  155. /package/dist/lib/node/{settings-2FEYGLYU.cjs.map → settings-TXGRCYAL.cjs.map} +0 -0
  156. /package/dist/lib/node-esm/{ai-client-XYZ5N7CR.mjs.map → ai-client-WMHS5EGV.mjs.map} +0 -0
  157. /package/dist/lib/node-esm/{chunk-2CIYX3SD.mjs.map → chunk-6JK5HEUQ.mjs.map} +0 -0
  158. /package/dist/lib/node-esm/{chunk-N6BVC2C2.mjs.map → chunk-ECRK6TUQ.mjs.map} +0 -0
  159. /package/dist/lib/node-esm/{chunk-SMUINDXQ.mjs.map → chunk-GBBXIW5F.mjs.map} +0 -0
  160. /package/dist/lib/node-esm/{chunk-J63VQFQO.mjs.map → chunk-PBZA7XJR.mjs.map} +0 -0
  161. /package/dist/lib/node-esm/{settings-VHR5KT4J.mjs.map → settings-DZU5PNXM.mjs.map} +0 -0
@@ -10,8 +10,8 @@ import {
10
10
  TemplateKinds,
11
11
  TemplateType,
12
12
  categoryIcons
13
- } from "../chunk-X6ALDUA5.mjs";
14
- import "../chunk-AF7VQAKS.mjs";
13
+ } from "../chunk-IAMR2FAE.mjs";
14
+ import "../chunk-3HCI5FIL.mjs";
15
15
  export {
16
16
  AIChatType,
17
17
  ApiAuthorization,
@@ -26,16 +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 AssistantDialog_GT7R7MKH_exports = {};
30
- __export(AssistantDialog_GT7R7MKH_exports, {
29
+ var AssistantDialog_YI2BSGSX_exports = {};
30
+ __export(AssistantDialog_YI2BSGSX_exports, {
31
31
  AssistantDialog: () => AssistantDialog,
32
32
  default: () => AssistantDialog_default
33
33
  });
34
- module.exports = __toCommonJS(AssistantDialog_GT7R7MKH_exports);
35
- var import_chunk_JAB6KLPP = require("./chunk-JAB6KLPP.cjs");
36
- var import_chunk_VRXFIS4X = require("./chunk-VRXFIS4X.cjs");
37
- var import_chunk_KLSNCP34 = require("./chunk-KLSNCP34.cjs");
38
- var import_chunk_U6J2GO7I = require("./chunk-U6J2GO7I.cjs");
34
+ module.exports = __toCommonJS(AssistantDialog_YI2BSGSX_exports);
35
+ var import_chunk_RPBKMP2E = require("./chunk-RPBKMP2E.cjs");
36
+ var import_chunk_GBUNQ257 = require("./chunk-GBUNQ257.cjs");
37
+ var import_chunk_APRU3QWK = require("./chunk-APRU3QWK.cjs");
38
+ var import_chunk_Q5XWEMHB = require("./chunk-Q5XWEMHB.cjs");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_app_framework = require("@dxos/app-framework");
41
41
  var import_plugin_transcription = require("@dxos/plugin-transcription");
@@ -117,15 +117,15 @@ var DialogHeader = ({ open, title, onToggle }) => {
117
117
  })));
118
118
  };
119
119
  var AssistantDialog = ({ chat }) => {
120
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_U6J2GO7I.ASSISTANT_PLUGIN);
121
- const transcription = (0, import_app_framework.useCapabilities)(import_plugin_transcription.TranscriptionCapabilities.Transcription).length > 0;
122
- const settings = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_U6J2GO7I.ASSISTANT_PLUGIN)?.value;
120
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN);
121
+ const transcription = (0, import_app_framework.useCapabilities)(import_plugin_transcription.TranscriptionCapabilities.Transcriber).length > 0;
122
+ const settings = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN)?.value;
123
123
  const [open, setOpen] = (0, import_react.useState)(false);
124
124
  return /* @__PURE__ */ import_react.default.createElement(AmbientDialog, {
125
125
  open,
126
126
  onOpenChange: setOpen,
127
127
  title: t("assistant dialog title")
128
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_JAB6KLPP.ThreadContainer, {
128
+ }, /* @__PURE__ */ import_react.default.createElement(import_chunk_RPBKMP2E.ThreadContainer, {
129
129
  chat,
130
130
  onOpenChange: setOpen,
131
131
  settings,
@@ -138,4 +138,4 @@ var AssistantDialog_default = AssistantDialog;
138
138
  0 && (module.exports = {
139
139
  AssistantDialog
140
140
  });
141
- //# sourceMappingURL=AssistantDialog-GT7R7MKH.cjs.map
141
+ //# sourceMappingURL=AssistantDialog-YI2BSGSX.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/AssistantDialog.tsx", "../../../src/components/AmbientDialog/AmbientDialog.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, useState } from 'react';\n\nimport { useCapability, Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { TranscriptionCapabilities } from '@dxos/plugin-transcription';\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { AmbientDialog } from './AmbientDialog';\nimport { ThreadContainer } from './Thread';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { type AssistantSettingsProps, type AIChatType } from '../types';\n\nexport const AssistantDialog: FC<{ chat?: AIChatType }> = ({ chat }) => {\n const { t } = useTranslation(ASSISTANT_PLUGIN);\n const transcription = useCapabilities(TranscriptionCapabilities.Transcriber).length > 0;\n const settings = useCapability(Capabilities.SettingsStore).getStore<AssistantSettingsProps>(ASSISTANT_PLUGIN)?.value;\n\n // TODO(burdon): Refocus when open.\n const [open, setOpen] = useState(false);\n\n return (\n <AmbientDialog open={open} onOpenChange={setOpen} title={t('assistant dialog title')}>\n <ThreadContainer\n chat={chat}\n onOpenChange={setOpen}\n settings={settings}\n part={'dialog'}\n transcription={transcription}\n />\n </AmbientDialog>\n );\n};\n\nexport default AssistantDialog;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren, useCallback, useEffect, useState } from 'react';\n\nimport { Dialog, Icon, IconButton } from '@dxos/react-ui';\nimport { resizeAttributes, ResizeHandle, type Size, sizeStyle } from '@dxos/react-ui-dnd';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst preventDefault = (event: Event) => event.preventDefault();\n\nconst minSize = 5;\n\nexport type AmbientDialogProps = PropsWithChildren<{\n open?: boolean;\n title?: string;\n onOpenChange?: (open: boolean) => void;\n}>;\n\nexport const AmbientDialog = ({ children, open: controlledOpen, title, onOpenChange }: AmbientDialogProps) => {\n const [resizeKey, setReizeKey] = useState(0);\n const [size, setSize] = useState<Size>('min-content');\n const [open, setOpen] = useState(controlledOpen);\n\n // Update controlled value.\n useEffect(() => {\n setOpen(controlledOpen);\n }, [controlledOpen]);\n\n // Update size and key.\n useEffect(() => {\n setSize(open ? 'min-content' : minSize);\n setReizeKey((key) => key + 1);\n }, [open]);\n\n // TODO(burdon): Animate open/close.\n // NOTE: We set the min size to 5rem (80px), and the header and prompt bar to 40px (i.e., the rail-size) each.\n // The dialog has no vertical padding and has box-content so that when closed it collapses to the size of the header and prompt bar.\n const handleToggle = useCallback(() => {\n setOpen((open) => {\n onOpenChange?.(!open);\n return !open;\n });\n }, []);\n\n return (\n <div role='none' className='dx-dialog__overlay bg-transparent pointer-events-none' data-block-align='end'>\n <Dialog.Content\n classNames='relative box-content py-0 px-2 md:is-[35rem] md:max-is-none overflow-hidden pointer-events-auto transition-[block-size] ease-in-out duration-0 [&:not([data-dx-resizing=\"true\"])]:duration-200'\n inOverlayLayout\n {...resizeAttributes}\n style={{\n ...sizeStyle(size, 'vertical', true),\n maxBlockSize: 'calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 9rem)',\n }}\n onInteractOutside={preventDefault}\n >\n <ResizeHandle\n key={resizeKey}\n side='block-start'\n defaultSize='min-content'\n minSize={minSize}\n fallbackSize={minSize}\n iconPosition='center'\n onSizeChange={setSize}\n />\n\n <DialogHeader open={open} title={title} onToggle={handleToggle} />\n\n {children}\n </Dialog.Content>\n </div>\n );\n};\n\n/**\n * Matches same layout grid as PromptBar.\n */\nconst DialogHeader = ({ open, title, onToggle }: { open?: boolean; title?: string; onToggle: () => void }) => {\n return (\n <div className='flex shrink-0 w-full grid grid-cols-[var(--rail-action)_1fr_var(--rail-action)] items-center overflow-hidden'>\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n <Dialog.Close>\n <Icon icon='ph--x--regular' />\n </Dialog.Close>\n </div>\n <div className='grow'>\n <Dialog.Title classNames='flex justify-center text-xs text-subdued'>{title}</Dialog.Title>\n </div>\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n <IconButton\n variant='ghost'\n icon={'ph--caret-up--regular'}\n classNames={mx('[&>svg]:transition [&>svg]:duration-200', open && '[&>svg]:rotate-180')}\n iconOnly\n label='Shrink'\n onClick={onToggle}\n />\n </div>\n </div>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_react_ui", "preventDefault", "event", "minSize", "AmbientDialog", "children", "open", "controlledOpen", "title", "onOpenChange", "resizeKey", "setReizeKey", "useState", "size", "setSize", "setOpen", "useEffect", "key", "handleToggle", "useCallback", "React", "div", "role", "className", "data-block-align", "Dialog", "Content", "classNames", "inOverlayLayout", "resizeAttributes", "style", "sizeStyle", "maxBlockSize", "onInteractOutside", "ResizeHandle", "side", "defaultSize", "fallbackSize", "iconPosition", "onSizeChange", "DialogHeader", "onToggle", "Close", "Icon", "icon", "Title", "IconButton", "variant", "mx", "iconOnly", "label", "onClick", "AssistantDialog", "chat", "t", "useTranslation", "ASSISTANT_PLUGIN", "transcription", "useCapabilities", "TranscriptionCapabilities", "Transcriber", "length", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "value", "ThreadContainer", "part"]
7
+ }
@@ -26,31 +26,31 @@ 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_JUZOEZZ7_exports = {};
30
- __export(ChatContainer_JUZOEZZ7_exports, {
29
+ var ChatContainer_ZJ5JXF6A_exports = {};
30
+ __export(ChatContainer_ZJ5JXF6A_exports, {
31
31
  ChatContainer: () => ChatContainer,
32
32
  default: () => ChatContainer_default
33
33
  });
34
- module.exports = __toCommonJS(ChatContainer_JUZOEZZ7_exports);
35
- var import_chunk_JAB6KLPP = require("./chunk-JAB6KLPP.cjs");
36
- var import_chunk_VRXFIS4X = require("./chunk-VRXFIS4X.cjs");
37
- var import_chunk_KLSNCP34 = require("./chunk-KLSNCP34.cjs");
38
- var import_chunk_U6J2GO7I = require("./chunk-U6J2GO7I.cjs");
34
+ module.exports = __toCommonJS(ChatContainer_ZJ5JXF6A_exports);
35
+ var import_chunk_RPBKMP2E = require("./chunk-RPBKMP2E.cjs");
36
+ var import_chunk_GBUNQ257 = require("./chunk-GBUNQ257.cjs");
37
+ var import_chunk_APRU3QWK = require("./chunk-APRU3QWK.cjs");
38
+ var import_chunk_Q5XWEMHB = require("./chunk-Q5XWEMHB.cjs");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_app_framework = require("@dxos/app-framework");
41
41
  var import_plugin_transcription = require("@dxos/plugin-transcription");
42
42
  var import_react_ui_stack = require("@dxos/react-ui-stack");
43
- var ChatContainer = ({ chat, role }) => {
44
- const transcription = (0, import_app_framework.useCapabilities)(import_plugin_transcription.TranscriptionCapabilities.Transcription).length > 0;
45
- const settings = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_U6J2GO7I.ASSISTANT_PLUGIN)?.value;
43
+ var ChatContainer = ({ role, chat, associatedArtifact }) => {
44
+ const transcription = (0, import_app_framework.useCapabilities)(import_plugin_transcription.TranscriptionCapabilities.Transcriber).length > 0;
45
+ const settings = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN)?.value;
46
46
  return /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
47
- toolbar: false,
48
47
  role,
49
- classNames: "mli-auto w-full max-w-[50rem]"
50
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_JAB6KLPP.ThreadContainer, {
48
+ classNames: "container-max-width"
49
+ }, /* @__PURE__ */ import_react.default.createElement(import_chunk_RPBKMP2E.ThreadContainer, {
51
50
  chat,
52
51
  settings,
53
- transcription
52
+ transcription,
53
+ associatedArtifact
54
54
  }));
55
55
  };
56
56
  var ChatContainer_default = ChatContainer;
@@ -58,4 +58,4 @@ var ChatContainer_default = ChatContainer;
58
58
  0 && (module.exports = {
59
59
  ChatContainer
60
60
  });
61
- //# sourceMappingURL=ChatContainer-JUZOEZZ7.cjs.map
61
+ //# sourceMappingURL=ChatContainer-ZJ5JXF6A.cjs.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 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\n// TODO(burdon): Attention.\nexport const ChatContainer = ({\n role,\n chat,\n associatedArtifact,\n}: {\n role: string;\n chat: AIChatType;\n associatedArtifact?: AssociatedArtifact;\n}) => {\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,mBAAkB;AAElB,2BAA6D;AAE7D,kCAA0C;AAC1C,4BAA0B;AAOnB,IAAMA,gBAAgB,CAAC,EAC5BC,MACAC,MACAC,mBAAkB,MAKnB;AACC,QAAMC,oBAAgBC,sCAAgBC,sDAA0BC,WAAW,EAAEC,SAAS;AACtF,QAAMC,eAAWC,oCAAcC,kCAAaC,aAAa,EAAEC,SAAiCC,sCAAAA,GAAmBC;AAE/G,SACE,6BAAAC,QAAA,cAACC,gCAAUC,SAAO;IAACjB;IAAYkB,YAAW;KACxC,6BAAAH,QAAA,cAACI,uCAAAA;IACClB;IACAO;IACAL;IACAD;;AAIR;AAEA,IAAA,wBAAeH;",
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
+ }
@@ -26,22 +26,22 @@ 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_VPAZRFQA_exports = {};
30
- __export(TemplateContainer_VPAZRFQA_exports, {
29
+ var TemplateContainer_XWFYJB4T_exports = {};
30
+ __export(TemplateContainer_XWFYJB4T_exports, {
31
31
  TemplateContainer: () => TemplateContainer,
32
32
  default: () => TemplateContainer_default
33
33
  });
34
- module.exports = __toCommonJS(TemplateContainer_VPAZRFQA_exports);
35
- var import_chunk_N3SW6DJ6 = require("./chunk-N3SW6DJ6.cjs");
36
- var import_chunk_KLSNCP34 = require("./chunk-KLSNCP34.cjs");
37
- var import_chunk_U6J2GO7I = require("./chunk-U6J2GO7I.cjs");
34
+ module.exports = __toCommonJS(TemplateContainer_XWFYJB4T_exports);
35
+ var import_chunk_XI2ARIEO = require("./chunk-XI2ARIEO.cjs");
36
+ var import_chunk_APRU3QWK = require("./chunk-APRU3QWK.cjs");
37
+ var import_chunk_Q5XWEMHB = require("./chunk-Q5XWEMHB.cjs");
38
38
  var import_effect = require("effect");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_async = require("@dxos/async");
41
41
  var import_react_ui = require("@dxos/react-ui");
42
42
  var import_react_ui_stack = require("@dxos/react-ui-stack");
43
43
  var TemplateContainer = ({ template, role }) => {
44
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_U6J2GO7I.ASSISTANT_PLUGIN);
44
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN);
45
45
  const handleKindChange = (0, import_react.useCallback)((value) => {
46
46
  const kind = import_effect.Match.type().pipe(import_effect.Match.withReturnType(), import_effect.Match.when("always", () => ({
47
47
  include: "always"
@@ -73,15 +73,15 @@ var TemplateContainer = ({ template, role }) => {
73
73
  template.kind.include
74
74
  ]);
75
75
  return /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
76
- toolbar: true,
77
76
  role,
78
- classNames: "mli-auto w-full max-w-[50rem]"
77
+ toolbar: true,
78
+ classNames: "container-max-width"
79
79
  }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Root, {
80
80
  value: template.kind.include,
81
81
  onValueChange: handleKindChange
82
82
  }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Button, {
83
83
  asChild: true
84
- }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.TriggerButton, null)), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Portal, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Content, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Viewport, null, import_chunk_KLSNCP34.TemplateKinds.map((kind) => /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Option, {
84
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.TriggerButton, null)), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Portal, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Content, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Viewport, null, import_chunk_APRU3QWK.TemplateKinds.map((kind) => /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Option, {
85
85
  key: kind,
86
86
  value: kind
87
87
  }, kind)))))), template.kind.include === "schema-matching" && /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.TextInput, {
@@ -92,7 +92,7 @@ var TemplateContainer = ({ template, role }) => {
92
92
  placeholder: t("description placeholder"),
93
93
  defaultValue: template.kind.description,
94
94
  onChange: handleDescriptionChange
95
- }))), /* @__PURE__ */ import_react.default.createElement(import_chunk_N3SW6DJ6.TemplateEditor, {
95
+ }))), /* @__PURE__ */ import_react.default.createElement(import_chunk_XI2ARIEO.TemplateEditor, {
96
96
  template
97
97
  }));
98
98
  };
@@ -101,4 +101,4 @@ var TemplateContainer_default = TemplateContainer;
101
101
  0 && (module.exports = {
102
102
  TemplateContainer
103
103
  });
104
- //# sourceMappingURL=TemplateContainer-VPAZRFQA.cjs.map
104
+ //# sourceMappingURL=TemplateContainer-XWFYJB4T.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/TemplateContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Match, type Schema as S } from 'effect';\nimport React, { type ChangeEvent, useCallback } from 'react';\n\nimport { debounce } from '@dxos/async';\nimport { Input, Select, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { TemplateEditor } from './TemplateEditor';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { TemplateKinds, type TemplateKindSchema, type TemplateType } from '../types';\n\nexport const TemplateContainer = ({ template, role }: { template: TemplateType; role: string }) => {\n const { t } = useTranslation(ASSISTANT_PLUGIN);\n\n const handleKindChange = useCallback(\n (value: string) => {\n const kind = Match.type<string>().pipe(\n Match.withReturnType<S.Schema.Type<typeof TemplateKindSchema>>(),\n Match.when('always', () => ({ include: 'always' })),\n Match.when('schema-matching', () => ({ include: 'schema-matching', typename: '' })),\n Match.when('automatically', () => ({ include: 'automatically', description: '' })),\n Match.orElse(() => ({ include: 'manual' })),\n )(value);\n\n template.kind = kind;\n },\n [template],\n );\n\n const handleTypenameChange = useCallback(\n debounce((event: ChangeEvent<HTMLInputElement>) => {\n if (template.kind.include === 'schema-matching') {\n template.kind.typename = event.target.value;\n }\n }, 300),\n [template.kind.include],\n );\n\n const handleDescriptionChange = useCallback(\n debounce((event: ChangeEvent<HTMLInputElement>) => {\n if (template.kind.include === 'automatically') {\n template.kind.description = event.target.value;\n }\n }, 300),\n [template.kind.include],\n );\n\n return (\n <StackItem.Content toolbar role={role} classNames='mli-auto w-full max-w-[50rem]'>\n {/* TODO(wittjosiah): Move this toolbar into c11y sidebar. */}\n <Toolbar.Root>\n <Select.Root value={template.kind.include} onValueChange={handleKindChange}>\n <Toolbar.Button asChild>\n <Select.TriggerButton />\n </Toolbar.Button>\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {TemplateKinds.map((kind) => (\n <Select.Option key={kind} value={kind}>\n {kind}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n {template.kind.include === 'schema-matching' && (\n <Input.Root>\n <Input.TextInput\n placeholder={t('typename placeholder')}\n defaultValue={template.kind.typename}\n onChange={handleTypenameChange}\n />\n </Input.Root>\n )}\n {template.kind.include === 'automatically' && (\n <Input.Root>\n <Input.TextInput\n placeholder={t('description placeholder')}\n defaultValue={template.kind.description}\n onChange={handleDescriptionChange}\n />\n </Input.Root>\n )}\n </Toolbar.Root>\n <TemplateEditor template={template} />\n </StackItem.Content>\n );\n};\n\nexport default TemplateContainer;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oBAAwC;AACxC,mBAAqD;AAErD,mBAAyB;AACzB,sBAAuD;AACvD,4BAA0B;AAMnB,IAAMA,oBAAoB,CAAC,EAAEC,UAAUC,KAAI,MAA4C;AAC5F,QAAM,EAAEC,EAAC,QAAKC,gCAAeC,sCAAAA;AAE7B,QAAMC,uBAAmBC,0BACvB,CAACC,UAAAA;AACC,UAAMC,OAAOC,oBAAMC,KAAI,EAAWC,KAChCF,oBAAMG,eAAc,GACpBH,oBAAMI,KAAK,UAAU,OAAO;MAAEC,SAAS;IAAS,EAAA,GAChDL,oBAAMI,KAAK,mBAAmB,OAAO;MAAEC,SAAS;MAAmBC,UAAU;IAAG,EAAA,GAChFN,oBAAMI,KAAK,iBAAiB,OAAO;MAAEC,SAAS;MAAiBE,aAAa;IAAG,EAAA,GAC/EP,oBAAMQ,OAAO,OAAO;MAAEH,SAAS;IAAS,EAAA,CAAA,EACxCP,KAAAA;AAEFP,aAASQ,OAAOA;EAClB,GACA;IAACR;GAAS;AAGZ,QAAMkB,2BAAuBZ,8BAC3Ba,uBAAS,CAACC,UAAAA;AACR,QAAIpB,SAASQ,KAAKM,YAAY,mBAAmB;AAC/Cd,eAASQ,KAAKO,WAAWK,MAAMC,OAAOd;IACxC;EACF,GAAG,GAAA,GACH;IAACP,SAASQ,KAAKM;GAAQ;AAGzB,QAAMQ,8BAA0BhB,8BAC9Ba,uBAAS,CAACC,UAAAA;AACR,QAAIpB,SAASQ,KAAKM,YAAY,iBAAiB;AAC7Cd,eAASQ,KAAKQ,cAAcI,MAAMC,OAAOd;IAC3C;EACF,GAAG,GAAA,GACH;IAACP,SAASQ,KAAKM;GAAQ;AAGzB,SACE,6BAAAS,QAAA,cAACC,gCAAUC,SAAO;IAACC,SAAAA;IAAQzB;IAAY0B,YAAW;KAEhD,6BAAAJ,QAAA,cAACK,wBAAQC,MAAI,MACX,6BAAAN,QAAA,cAACO,uBAAOD,MAAI;IAACtB,OAAOP,SAASQ,KAAKM;IAASiB,eAAe1B;KACxD,6BAAAkB,QAAA,cAACK,wBAAQI,QAAM;IAACC,SAAAA;KACd,6BAAAV,QAAA,cAACO,uBAAOI,eAAa,IAAA,CAAA,GAEvB,6BAAAX,QAAA,cAACO,uBAAOK,QAAM,MACZ,6BAAAZ,QAAA,cAACO,uBAAOL,SAAO,MACb,6BAAAF,QAAA,cAACO,uBAAOM,UAAQ,MACbC,oCAAcC,IAAI,CAAC9B,SAClB,6BAAAe,QAAA,cAACO,uBAAOS,QAAM;IAACC,KAAKhC;IAAMD,OAAOC;KAC9BA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAOZR,SAASQ,KAAKM,YAAY,qBACzB,6BAAAS,QAAA,cAACkB,sBAAMZ,MAAI,MACT,6BAAAN,QAAA,cAACkB,sBAAMC,WAAS;IACdC,aAAazC,EAAE,sBAAA;IACf0C,cAAc5C,SAASQ,KAAKO;IAC5B8B,UAAU3B;OAIflB,SAASQ,KAAKM,YAAY,mBACzB,6BAAAS,QAAA,cAACkB,sBAAMZ,MAAI,MACT,6BAAAN,QAAA,cAACkB,sBAAMC,WAAS;IACdC,aAAazC,EAAE,yBAAA;IACf0C,cAAc5C,SAASQ,KAAKQ;IAC5B6B,UAAUvB;QAKlB,6BAAAC,QAAA,cAACuB,sCAAAA;IAAe9C;;AAGtB;AAEA,IAAA,4BAAeD;",
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Match, type Schema as S } from 'effect';\nimport React, { type ChangeEvent, useCallback } from 'react';\n\nimport { debounce } from '@dxos/async';\nimport { Input, Select, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { TemplateEditor } from './TemplateEditor';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { TemplateKinds, type TemplateKindSchema, type TemplateType } from '../types';\n\nexport const TemplateContainer = ({ template, role }: { template: TemplateType; role: string }) => {\n const { t } = useTranslation(ASSISTANT_PLUGIN);\n\n const handleKindChange = useCallback(\n (value: string) => {\n const kind = Match.type<string>().pipe(\n Match.withReturnType<S.Schema.Type<typeof TemplateKindSchema>>(),\n Match.when('always', () => ({ include: 'always' })),\n Match.when('schema-matching', () => ({ include: 'schema-matching', typename: '' })),\n Match.when('automatically', () => ({ include: 'automatically', description: '' })),\n Match.orElse(() => ({ include: 'manual' })),\n )(value);\n\n template.kind = kind;\n },\n [template],\n );\n\n const handleTypenameChange = useCallback(\n debounce((event: ChangeEvent<HTMLInputElement>) => {\n if (template.kind.include === 'schema-matching') {\n template.kind.typename = event.target.value;\n }\n }, 300),\n [template.kind.include],\n );\n\n const handleDescriptionChange = useCallback(\n debounce((event: ChangeEvent<HTMLInputElement>) => {\n if (template.kind.include === 'automatically') {\n template.kind.description = event.target.value;\n }\n }, 300),\n [template.kind.include],\n );\n\n return (\n <StackItem.Content role={role} toolbar classNames='container-max-width'>\n {/* TODO(wittjosiah): Move this toolbar into c11y sidebar. */}\n <Toolbar.Root>\n <Select.Root value={template.kind.include} onValueChange={handleKindChange}>\n <Toolbar.Button asChild>\n <Select.TriggerButton />\n </Toolbar.Button>\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {TemplateKinds.map((kind) => (\n <Select.Option key={kind} value={kind}>\n {kind}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n {template.kind.include === 'schema-matching' && (\n <Input.Root>\n <Input.TextInput\n placeholder={t('typename placeholder')}\n defaultValue={template.kind.typename}\n onChange={handleTypenameChange}\n />\n </Input.Root>\n )}\n {template.kind.include === 'automatically' && (\n <Input.Root>\n <Input.TextInput\n placeholder={t('description placeholder')}\n defaultValue={template.kind.description}\n onChange={handleDescriptionChange}\n />\n </Input.Root>\n )}\n </Toolbar.Root>\n <TemplateEditor template={template} />\n </StackItem.Content>\n );\n};\n\nexport default TemplateContainer;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oBAAwC;AACxC,mBAAqD;AAErD,mBAAyB;AACzB,sBAAuD;AACvD,4BAA0B;AAMnB,IAAMA,oBAAoB,CAAC,EAAEC,UAAUC,KAAI,MAA4C;AAC5F,QAAM,EAAEC,EAAC,QAAKC,gCAAeC,sCAAAA;AAE7B,QAAMC,uBAAmBC,0BACvB,CAACC,UAAAA;AACC,UAAMC,OAAOC,oBAAMC,KAAI,EAAWC,KAChCF,oBAAMG,eAAc,GACpBH,oBAAMI,KAAK,UAAU,OAAO;MAAEC,SAAS;IAAS,EAAA,GAChDL,oBAAMI,KAAK,mBAAmB,OAAO;MAAEC,SAAS;MAAmBC,UAAU;IAAG,EAAA,GAChFN,oBAAMI,KAAK,iBAAiB,OAAO;MAAEC,SAAS;MAAiBE,aAAa;IAAG,EAAA,GAC/EP,oBAAMQ,OAAO,OAAO;MAAEH,SAAS;IAAS,EAAA,CAAA,EACxCP,KAAAA;AAEFP,aAASQ,OAAOA;EAClB,GACA;IAACR;GAAS;AAGZ,QAAMkB,2BAAuBZ,8BAC3Ba,uBAAS,CAACC,UAAAA;AACR,QAAIpB,SAASQ,KAAKM,YAAY,mBAAmB;AAC/Cd,eAASQ,KAAKO,WAAWK,MAAMC,OAAOd;IACxC;EACF,GAAG,GAAA,GACH;IAACP,SAASQ,KAAKM;GAAQ;AAGzB,QAAMQ,8BAA0BhB,8BAC9Ba,uBAAS,CAACC,UAAAA;AACR,QAAIpB,SAASQ,KAAKM,YAAY,iBAAiB;AAC7Cd,eAASQ,KAAKQ,cAAcI,MAAMC,OAAOd;IAC3C;EACF,GAAG,GAAA,GACH;IAACP,SAASQ,KAAKM;GAAQ;AAGzB,SACE,6BAAAS,QAAA,cAACC,gCAAUC,SAAO;IAACxB;IAAYyB,SAAAA;IAAQC,YAAW;KAEhD,6BAAAJ,QAAA,cAACK,wBAAQC,MAAI,MACX,6BAAAN,QAAA,cAACO,uBAAOD,MAAI;IAACtB,OAAOP,SAASQ,KAAKM;IAASiB,eAAe1B;KACxD,6BAAAkB,QAAA,cAACK,wBAAQI,QAAM;IAACC,SAAAA;KACd,6BAAAV,QAAA,cAACO,uBAAOI,eAAa,IAAA,CAAA,GAEvB,6BAAAX,QAAA,cAACO,uBAAOK,QAAM,MACZ,6BAAAZ,QAAA,cAACO,uBAAOL,SAAO,MACb,6BAAAF,QAAA,cAACO,uBAAOM,UAAQ,MACbC,oCAAcC,IAAI,CAAC9B,SAClB,6BAAAe,QAAA,cAACO,uBAAOS,QAAM;IAACC,KAAKhC;IAAMD,OAAOC;KAC9BA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAOZR,SAASQ,KAAKM,YAAY,qBACzB,6BAAAS,QAAA,cAACkB,sBAAMZ,MAAI,MACT,6BAAAN,QAAA,cAACkB,sBAAMC,WAAS;IACdC,aAAazC,EAAE,sBAAA;IACf0C,cAAc5C,SAASQ,KAAKO;IAC5B8B,UAAU3B;OAIflB,SAASQ,KAAKM,YAAY,mBACzB,6BAAAS,QAAA,cAACkB,sBAAMZ,MAAI,MACT,6BAAAN,QAAA,cAACkB,sBAAMC,WAAS;IACdC,aAAazC,EAAE,yBAAA;IACf0C,cAAc5C,SAASQ,KAAKQ;IAC5B6B,UAAUvB;QAKlB,6BAAAC,QAAA,cAACuB,sCAAAA;IAAe9C;;AAGtB;AAEA,IAAA,4BAAeD;",
6
6
  "names": ["TemplateContainer", "template", "role", "t", "useTranslation", "ASSISTANT_PLUGIN", "handleKindChange", "useCallback", "value", "kind", "Match", "type", "pipe", "withReturnType", "when", "include", "typename", "description", "orElse", "handleTypenameChange", "debounce", "event", "target", "handleDescriptionChange", "React", "StackItem", "Content", "toolbar", "classNames", "Toolbar", "Root", "Select", "onValueChange", "Button", "asChild", "TriggerButton", "Portal", "Viewport", "TemplateKinds", "map", "Option", "key", "Input", "TextInput", "placeholder", "defaultValue", "onChange", "TemplateEditor"]
7
7
  }
@@ -16,13 +16,13 @@ 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_5ESLYXAV_exports = {};
20
- __export(ai_client_5ESLYXAV_exports, {
19
+ var ai_client_URCCYU6B_exports = {};
20
+ __export(ai_client_URCCYU6B_exports, {
21
21
  default: () => ai_client_default
22
22
  });
23
- module.exports = __toCommonJS(ai_client_5ESLYXAV_exports);
24
- var import_chunk_VRXFIS4X = require("./chunk-VRXFIS4X.cjs");
25
- var import_chunk_U6J2GO7I = require("./chunk-U6J2GO7I.cjs");
23
+ module.exports = __toCommonJS(ai_client_URCCYU6B_exports);
24
+ var import_chunk_GBUNQ257 = require("./chunk-GBUNQ257.cjs");
25
+ var import_chunk_Q5XWEMHB = require("./chunk-Q5XWEMHB.cjs");
26
26
  var import_signals_core = require("@preact/signals-core");
27
27
  var import_app_framework = require("@dxos/app-framework");
28
28
  var import_assistant = require("@dxos/assistant");
@@ -35,7 +35,7 @@ var ai_client_default = (context) => {
35
35
  endpoint
36
36
  }));
37
37
  const unsubscribe = (0, import_signals_core.effect)(() => {
38
- const settings = context.requestCapability(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_U6J2GO7I.ASSISTANT_PLUGIN)?.value;
38
+ const settings = context.requestCapability(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN)?.value;
39
39
  if (settings?.llmProvider === "ollama") {
40
40
  ai.value = new import_assistant.OllamaClient();
41
41
  } else {
@@ -44,6 +44,6 @@ var ai_client_default = (context) => {
44
44
  });
45
45
  }
46
46
  });
47
- return (0, import_app_framework.contributes)(import_chunk_VRXFIS4X.AssistantCapabilities.AiClient, ai, () => unsubscribe());
47
+ return (0, import_app_framework.contributes)(import_chunk_GBUNQ257.AssistantCapabilities.AiClient, ai, () => unsubscribe());
48
48
  };
49
- //# sourceMappingURL=ai-client-5ESLYXAV.cjs.map
49
+ //# sourceMappingURL=ai-client-URCCYU6B.cjs.map
@@ -16,24 +16,25 @@ 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 app_graph_builder_3P6WSON2_exports = {};
20
- __export(app_graph_builder_3P6WSON2_exports, {
19
+ var app_graph_builder_N5ZUUI2Z_exports = {};
20
+ __export(app_graph_builder_N5ZUUI2Z_exports, {
21
21
  default: () => app_graph_builder_default
22
22
  });
23
- module.exports = __toCommonJS(app_graph_builder_3P6WSON2_exports);
24
- var import_chunk_KLSNCP34 = require("./chunk-KLSNCP34.cjs");
25
- var import_chunk_U6J2GO7I = require("./chunk-U6J2GO7I.cjs");
23
+ module.exports = __toCommonJS(app_graph_builder_N5ZUUI2Z_exports);
24
+ var import_chunk_APRU3QWK = require("./chunk-APRU3QWK.cjs");
25
+ var import_chunk_Q5XWEMHB = require("./chunk-Q5XWEMHB.cjs");
26
26
  var import_app_framework = require("@dxos/app-framework");
27
27
  var import_invariant = require("@dxos/invariant");
28
28
  var import_plugin_client = require("@dxos/plugin-client");
29
+ var import_types = require("@dxos/plugin-deck/types");
29
30
  var import_plugin_graph = require("@dxos/plugin-graph");
30
31
  var import_plugin_space = require("@dxos/plugin-space");
31
- var import_types = require("@dxos/plugin-space/types");
32
+ var import_types2 = require("@dxos/plugin-space/types");
32
33
  var import_echo = require("@dxos/react-client/echo");
33
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-assistant/src/capabilities/app-graph-builder.ts";
34
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-assistant/src/capabilities/app-graph-builder.ts";
34
35
  var app_graph_builder_default = (context) => (0, import_app_framework.contributes)(import_app_framework.Capabilities.AppGraphBuilder, [
35
36
  (0, import_plugin_graph.createExtension)({
36
- id: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/assistant`,
37
+ id: `${import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN}/assistant`,
37
38
  filter: (node) => node.id === import_plugin_graph.ROOT_ID,
38
39
  actions: () => [
39
40
  {
@@ -61,7 +62,7 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
61
62
  }
62
63
  await dispatch((0, import_app_framework.createIntent)(import_app_framework.LayoutAction.UpdateDialog, {
63
64
  part: "dialog",
64
- subject: import_chunk_U6J2GO7I.ASSISTANT_DIALOG,
65
+ subject: import_chunk_Q5XWEMHB.ASSISTANT_DIALOG,
65
66
  options: {
66
67
  state: true,
67
68
  blockAlign: "end",
@@ -75,10 +76,10 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
75
76
  label: [
76
77
  "open assistant label",
77
78
  {
78
- ns: import_chunk_U6J2GO7I.ASSISTANT_PLUGIN
79
+ ns: import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN
79
80
  }
80
81
  ],
81
- icon: "ph--chat-centered-text--regular",
82
+ icon: "ph--star-four--regular",
82
83
  disposition: "pin-end",
83
84
  position: "hoist",
84
85
  keyBinding: {
@@ -90,20 +91,74 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
90
91
  ]
91
92
  }),
92
93
  (0, import_plugin_graph.createExtension)({
93
- id: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/root`,
94
+ id: `${import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN}/service-registry`,
95
+ filter: (node) => node.id === "root",
96
+ connector: ({ node }) => {
97
+ const layout = context.requestCapability(import_app_framework.Capabilities.Layout);
98
+ const client = context.requestCapability(import_plugin_client.ClientCapabilities.Client);
99
+ const { spaceId } = (0, import_echo.parseId)(layout.workspace);
100
+ const space = spaceId ? client.spaces.get(spaceId) : null;
101
+ return [
102
+ {
103
+ id: [
104
+ node.id,
105
+ "service-registry"
106
+ ].join(import_types.ATTENDABLE_PATH_SEPARATOR),
107
+ type: import_types.DECK_COMPANION_TYPE,
108
+ data: space,
109
+ properties: {
110
+ label: [
111
+ "service registry label",
112
+ {
113
+ ns: import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN
114
+ }
115
+ ],
116
+ icon: "ph--plugs--regular",
117
+ disposition: "hidden"
118
+ }
119
+ }
120
+ ];
121
+ }
122
+ }),
123
+ (0, import_plugin_graph.createExtension)({
124
+ id: `${import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN}/object-chat-companion`,
125
+ filter: (node) => (0, import_echo.isReactiveObject)(node.data) && node.data.assistantChatQueue && node.data.type !== import_chunk_APRU3QWK.AIChatType.typename,
126
+ connector: ({ node }) => [
127
+ {
128
+ id: [
129
+ node.id,
130
+ "assistant-chat"
131
+ ].join(import_types.ATTENDABLE_PATH_SEPARATOR),
132
+ type: import_types.PLANK_COMPANION_TYPE,
133
+ data: "assistant-chat",
134
+ properties: {
135
+ label: [
136
+ "assistant chat label",
137
+ {
138
+ ns: import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN
139
+ }
140
+ ],
141
+ icon: "ph--star-four--regular",
142
+ position: "hoist"
143
+ }
144
+ }
145
+ ]
146
+ }),
147
+ (0, import_plugin_graph.createExtension)({
148
+ id: `${import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN}/root`,
94
149
  filter: (node) => (0, import_echo.isSpace)(node.data),
95
150
  connector: ({ node }) => {
96
- const templates = (0, import_plugin_space.memoizeQuery)(node.data, import_echo.Filter.schema(import_chunk_KLSNCP34.TemplateType));
151
+ const templates = (0, import_plugin_space.memoizeQuery)(node.data, import_echo.Filter.schema(import_chunk_APRU3QWK.TemplateType));
97
152
  return templates.length > 0 ? [
98
153
  {
99
- id: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/templates`,
100
- type: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/templates`,
154
+ id: `${import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN}/templates`,
155
+ type: `${import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN}/templates`,
101
156
  data: null,
102
157
  properties: {
103
158
  label: [
104
159
  "templates label",
105
160
  {
106
- ns: import_chunk_U6J2GO7I.ASSISTANT_PLUGIN
161
+ ns: import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN
107
162
  }
108
163
  ],
109
164
  icon: "ph--file-code--regular",
@@ -114,23 +169,23 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
114
169
  }
115
170
  }),
116
171
  (0, import_plugin_graph.createExtension)({
117
- id: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/templates`,
118
- filter: (node) => node.id === `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/templates`,
172
+ id: `${import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN}/templates`,
173
+ filter: (node) => node.id === `${import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN}/templates`,
119
174
  connector: ({ node }) => {
120
- const templates = (0, import_plugin_space.memoizeQuery)(node.properties.space, import_echo.Filter.schema(import_chunk_KLSNCP34.TemplateType));
175
+ const templates = (0, import_plugin_space.memoizeQuery)(node.properties.space, import_echo.Filter.schema(import_chunk_APRU3QWK.TemplateType));
121
176
  return templates.toSorted((a, b) => {
122
177
  const nameA = a.name ?? "";
123
178
  const nameB = b.name ?? "";
124
179
  return nameA.localeCompare(nameB);
125
180
  }).map((template) => ({
126
181
  id: (0, import_echo.fullyQualifiedId)(template),
127
- type: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/template`,
182
+ type: `${import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN}/template`,
128
183
  data: template,
129
184
  properties: {
130
185
  label: template.name ?? [
131
186
  "template title placeholder",
132
187
  {
133
- ns: import_chunk_U6J2GO7I.ASSISTANT_PLUGIN
188
+ ns: import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN
134
189
  }
135
190
  ],
136
191
  icon: "ph--file-code--regular"
@@ -140,26 +195,26 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
140
195
  })
141
196
  ]);
142
197
  var getOrCreateChat = async (dispatch, space) => {
143
- const { objects } = await space.db.query(import_echo.Filter.schema(import_chunk_KLSNCP34.AIChatType)).run();
198
+ const { objects } = await space.db.query(import_echo.Filter.schema(import_chunk_APRU3QWK.AIChatType)).run();
144
199
  if (objects.length > 0) {
145
200
  return objects[objects.length - 1];
146
201
  }
147
- const { data } = await dispatch((0, import_app_framework.createIntent)(import_chunk_KLSNCP34.AssistantAction.CreateChat, {
202
+ const { data } = await dispatch((0, import_app_framework.createIntent)(import_chunk_APRU3QWK.AssistantAction.CreateChat, {
148
203
  spaceId: space.id
149
204
  }));
150
- (0, import_invariant.invariant)(data?.object instanceof import_chunk_KLSNCP34.AIChatType, void 0, {
205
+ (0, import_invariant.invariant)(data?.object instanceof import_chunk_APRU3QWK.AIChatType, void 0, {
151
206
  F: __dxlog_file,
152
- L: 141,
207
+ L: 192,
153
208
  S: void 0,
154
209
  A: [
155
210
  "data?.object instanceof AIChatType",
156
211
  ""
157
212
  ]
158
213
  });
159
- await dispatch((0, import_app_framework.createIntent)(import_types.SpaceAction.AddObject, {
214
+ await dispatch((0, import_app_framework.createIntent)(import_types2.SpaceAction.AddObject, {
160
215
  target: space,
161
216
  object: data.object
162
217
  }));
163
218
  return data.object;
164
219
  };
165
- //# sourceMappingURL=app-graph-builder-3P6WSON2.cjs.map
220
+ //# sourceMappingURL=app-graph-builder-N5ZUUI2Z.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n Capabilities,\n contributes,\n createIntent,\n LayoutAction,\n type PromiseIntentDispatcher,\n type PluginsContext,\n} from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { createExtension, type Node, ROOT_ID } from '@dxos/plugin-graph';\nimport { memoizeQuery } from '@dxos/plugin-space';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport {\n type Space,\n Filter,\n fullyQualifiedId,\n getSpace,\n isSpace,\n isReactiveObject,\n parseId,\n} from '@dxos/react-client/echo';\n\nimport { ASSISTANT_DIALOG, ASSISTANT_PLUGIN } from '../meta';\nimport { AIChatType, AssistantAction, TemplateType } from '../types';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${ASSISTANT_PLUGIN}/assistant`,\n filter: (node): node is Node<null> => node.id === ROOT_ID,\n actions: () => [\n {\n id: `${LayoutAction.UpdateDialog._tag}/assistant/open`,\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const client = context.requestCapability(ClientCapabilities.Client);\n const layout = context.requestCapability(Capabilities.Layout);\n const { graph } = context.requestCapability(Capabilities.AppGraph);\n\n // TODO(burdon): Get space from workspace.\n // TODO(burdon): If need to create chat, then add to dispatch stack below.\n let chat: AIChatType | undefined;\n if (layout.active.length > 0) {\n const node = graph.findNode(layout.active[0]);\n if (node) {\n const space = getSpace(node.data);\n if (space) {\n chat = await getOrCreateChat(dispatch, space);\n }\n }\n } else {\n const space = client.spaces.default;\n chat = await getOrCreateChat(dispatch, space);\n }\n\n if (!chat) {\n return;\n }\n\n await dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: ASSISTANT_DIALOG,\n options: {\n state: true,\n blockAlign: 'end',\n props: {\n chat,\n },\n },\n }),\n );\n },\n properties: {\n label: ['open assistant label', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--star-four--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 }),\n\n createExtension({\n id: `${ASSISTANT_PLUGIN}/service-registry`,\n filter: (node): node is Node<null> => node.id === 'root',\n connector: ({ node }) => {\n const layout = context.requestCapability(Capabilities.Layout);\n const client = context.requestCapability(ClientCapabilities.Client);\n const { spaceId } = parseId(layout.workspace);\n const space = spaceId ? client.spaces.get(spaceId) : null;\n\n return [\n {\n id: [node.id, 'service-registry'].join(ATTENDABLE_PATH_SEPARATOR),\n type: DECK_COMPANION_TYPE,\n data: space,\n properties: {\n label: ['service registry label', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--plugs--regular',\n disposition: 'hidden',\n },\n },\n ];\n },\n }),\n\n createExtension({\n id: `${ASSISTANT_PLUGIN}/object-chat-companion`,\n filter: (node): node is Node<AIChatType> =>\n isReactiveObject(node.data) && node.data.assistantChatQueue && node.data.type !== AIChatType.typename,\n connector: ({ node }) => [\n {\n id: [node.id, 'assistant-chat'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'assistant-chat',\n properties: {\n label: ['assistant chat label', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--star-four--regular',\n position: 'hoist',\n },\n },\n ],\n }),\n\n createExtension({\n id: `${ASSISTANT_PLUGIN}/root`,\n filter: (node): node is Node<Space> => isSpace(node.data),\n connector: ({ node }) => {\n const templates = memoizeQuery(node.data, Filter.schema(TemplateType));\n return templates.length > 0\n ? [\n {\n id: `${ASSISTANT_PLUGIN}/templates`,\n type: `${ASSISTANT_PLUGIN}/templates`,\n data: null,\n properties: {\n label: ['templates label', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--file-code--regular',\n space: node.data,\n },\n },\n ]\n : [];\n },\n }),\n\n createExtension({\n id: `${ASSISTANT_PLUGIN}/templates`,\n filter: (node): node is Node<null, { space: Space }> => node.id === `${ASSISTANT_PLUGIN}/templates`,\n connector: ({ node }) => {\n const templates = memoizeQuery(node.properties.space, Filter.schema(TemplateType));\n return templates\n .toSorted((a, b) => {\n const nameA = a.name ?? '';\n const nameB = b.name ?? '';\n return nameA.localeCompare(nameB);\n })\n .map((template) => ({\n id: fullyQualifiedId(template),\n type: `${ASSISTANT_PLUGIN}/template`,\n data: template,\n properties: {\n label: template.name ?? ['template title placeholder', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--file-code--regular',\n },\n }));\n },\n }),\n ]);\n\n// TODO(burdon): Factor out.\nconst getOrCreateChat = async (dispatch: PromiseIntentDispatcher, space: Space): Promise<AIChatType | undefined> => {\n const { objects } = await space.db.query(Filter.schema(AIChatType)).run();\n // console.log('objects', JSON.stringify(objects, null, 2));\n if (objects.length > 0) {\n // TODO(burdon): Is this the most recent?\n return objects[objects.length - 1];\n }\n\n const { data } = await dispatch(createIntent(AssistantAction.CreateChat, { spaceId: space.id }));\n invariant(data?.object instanceof AIChatType);\n await dispatch(createIntent(SpaceAction.AddObject, { target: space, object: data.object }));\n return data.object;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_types", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "ASSISTANT_PLUGIN", "filter", "node", "ROOT_ID", "actions", "LayoutAction", "UpdateDialog", "_tag", "data", "dispatchPromise", "dispatch", "requestCapability", "IntentDispatcher", "client", "ClientCapabilities", "Client", "layout", "Layout", "graph", "AppGraph", "chat", "active", "length", "findNode", "space", "getSpace", "getOrCreateChat", "spaces", "default", "createIntent", "part", "subject", "ASSISTANT_DIALOG", "options", "state", "blockAlign", "props", "properties", "label", "ns", "icon", "disposition", "position", "keyBinding", "macos", "windows", "connector", "spaceId", "parseId", "workspace", "get", "join", "ATTENDABLE_PATH_SEPARATOR", "type", "DECK_COMPANION_TYPE", "isReactiveObject", "assistantChatQueue", "AIChatType", "typename", "PLANK_COMPANION_TYPE", "isSpace", "templates", "memoizeQuery", "Filter", "schema", "TemplateType", "toSorted", "a", "b", "nameA", "name", "nameB", "localeCompare", "map", "template", "fullyQualifiedId", "objects", "db", "query", "run", "AssistantAction", "CreateChat", "invariant", "object", "SpaceAction", "AddObject", "target"]
7
+ }
@@ -16,8 +16,8 @@ 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 chunk_KLSNCP34_exports = {};
20
- __export(chunk_KLSNCP34_exports, {
19
+ var chunk_APRU3QWK_exports = {};
20
+ __export(chunk_APRU3QWK_exports, {
21
21
  AIChatType: () => AIChatType,
22
22
  ApiAuthorization: () => ApiAuthorization,
23
23
  AssistantAction: () => AssistantAction,
@@ -30,8 +30,8 @@ __export(chunk_KLSNCP34_exports, {
30
30
  TemplateType: () => TemplateType,
31
31
  categoryIcons: () => categoryIcons
32
32
  });
33
- module.exports = __toCommonJS(chunk_KLSNCP34_exports);
34
- var import_chunk_U6J2GO7I = require("./chunk-U6J2GO7I.cjs");
33
+ module.exports = __toCommonJS(chunk_APRU3QWK_exports);
34
+ var import_chunk_Q5XWEMHB = require("./chunk-Q5XWEMHB.cjs");
35
35
  var import_echo_schema = require("@dxos/echo-schema");
36
36
  var import_conductor = require("@dxos/conductor");
37
37
  var import_echo_schema2 = require("@dxos/echo-schema");
@@ -42,9 +42,8 @@ var AIChatType = class extends (0, import_echo_schema.TypedObject)({
42
42
  typename: "dxos.org/type/AIChat",
43
43
  version: "0.1.0"
44
44
  })({
45
- name: import_echo_schema.S.optional(import_echo_schema.S.String),
46
45
  // TODO(wittjosiah): Should be a ref to a Queue.
47
- queue: (0, import_echo_schema.Ref)(import_echo_schema.Expando)
46
+ assistantChatQueue: (0, import_echo_schema.Ref)(import_echo_schema.Expando)
48
47
  }) {
49
48
  };
50
49
  var ApiAuthorizationKey = import_echo_schema2.S.Struct({
@@ -161,7 +160,7 @@ var TemplateType = class extends (0, import_echo_schema3.TypedObject)({
161
160
  };
162
161
  var AssistantAction;
163
162
  (function(AssistantAction2) {
164
- const ASSISTANT_ACTION = `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/action`;
163
+ const ASSISTANT_ACTION = `${import_chunk_Q5XWEMHB.ASSISTANT_PLUGIN}/action`;
165
164
  class CreateChat extends import_echo_schema4.S.TaggedClass()(`${ASSISTANT_ACTION}/create-chat`, {
166
165
  input: import_echo_schema4.S.Struct({
167
166
  spaceId: import_echo_schema4.S.optional(import_echo_schema4.S.String),
@@ -204,4 +203,4 @@ var AssistantSettingsSchema = import_echo_schema4.S.mutable(import_echo_schema4.
204
203
  TemplateType,
205
204
  categoryIcons
206
205
  });
207
- //# sourceMappingURL=chunk-KLSNCP34.cjs.map
206
+ //# sourceMappingURL=chunk-APRU3QWK.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/chat.ts", "../../../src/types/service.ts", "../../../src/types/template.ts", "../../../src/types/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Expando, Ref, TypedObject } from '@dxos/echo-schema';\n\nexport class AIChatType extends TypedObject({ typename: 'dxos.org/type/AIChat', version: '0.1.0' })({\n // TODO(wittjosiah): Should be a ref to a Queue.\n assistantChatQueue: Ref(Expando),\n}) {}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ComputeGraph } from '@dxos/conductor';\nimport { Ref, S, TypedObject, type Ref$ } from '@dxos/echo-schema';\nimport { FunctionType } from '@dxos/functions/types';\n\nconst ApiAuthorizationKey = S.Struct({\n type: S.Literal('api-key'),\n key: S.String,\n placement: S.Union(\n S.Struct({\n type: S.Literal('authorization-header'),\n }),\n S.Struct({\n type: S.Literal('query'),\n name: S.String,\n }),\n ),\n});\n\nconst ApiAuthorizationOauth = S.Struct({\n type: S.Literal('oauth'),\n clientId: S.String,\n clientSecret: S.String,\n tokenUrl: S.String,\n grantType: S.String,\n});\n\nexport const ApiAuthorization = S.Union(ApiAuthorizationKey, ApiAuthorizationOauth);\nexport type ApiAuthorization = S.Schema.Type<typeof ApiAuthorization>;\n\nconst ServiceInterfaceFunction = S.Struct({\n kind: S.Literal('function'),\n fn: Ref(FunctionType) as Ref$<FunctionType>,\n});\n\nconst ServiceInterfaceWorkflow = S.Struct({\n kind: S.Literal('workflow'),\n workflow: Ref(ComputeGraph) as Ref$<ComputeGraph>,\n});\n\nconst ServiceInterfaceApi = S.Struct({\n kind: S.Literal('api'),\n\n /**\n * URL to fetch the openapi schema.\n */\n schemaUrl: S.optional(S.String),\n\n /**\n * Inlined openapi schema.\n */\n schema: S.optional(S.Any),\n\n /**\n * Authorization configuration if required.\n */\n authorization: S.optional(ApiAuthorization),\n});\n\nconst ServiceInterface = S.Union(ServiceInterfaceFunction, ServiceInterfaceWorkflow, ServiceInterfaceApi);\nexport type ServiceInterface = S.Schema.Type<typeof ServiceInterface>;\n\nexport class ServiceType extends TypedObject({ typename: 'dxos.org/type/ServiceType', version: '0.1.0' })({\n serviceId: S.String,\n name: S.optional(S.String),\n description: S.optional(S.String),\n category: S.optional(S.String),\n enabled: S.optional(S.Boolean),\n\n /**\n * Entries exposed: functions, workflows, and APIs.\n */\n interfaces: S.optional(S.Array(ServiceInterface)),\n}) {}\n\n//\n// Service Registry\n//\n\nexport type ServiceQuery = {\n name?: string;\n category?: string;\n};\n\nexport interface BaseServiceRegistry {\n queryServices(query?: ServiceQuery): Promise<ServiceType[]>;\n}\n\nexport const categoryIcons: Record<string, string> = {\n finance: 'ph--bank--regular',\n health: 'ph--heart--regular',\n geolocation: 'ph--globe-simple--regular',\n education: 'ph--books--regular',\n entertainment: 'ph--music-notes--regular',\n shopping: 'ph--shopping-cart--regular',\n travel: 'ph--airplane-takeoff--regular',\n utilities: 'ph--lightning--regular',\n weather: 'ph--cloud-rain--regular',\n} as const;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { S, TypedObject } from '@dxos/echo-schema';\n\n// TODO(burdon): Change to S.Literal (and discriminated union).\nexport enum TemplateInputType {\n VALUE = 0,\n PASS_THROUGH = 1,\n RETRIEVER = 2,\n FUNCTION = 3,\n QUERY = 4,\n RESOLVER = 5,\n CONTEXT = 6,\n SCHEMA = 7,\n}\n\nexport const TemplateInputSchema = S.mutable(\n S.Struct({\n name: S.String,\n type: S.optional(S.Enums(TemplateInputType)),\n value: S.optional(S.String),\n }),\n);\n\nexport type TemplateInput = S.Schema.Type<typeof TemplateInputSchema>;\n\nexport const TemplateKinds = ['always', 'schema-matching', 'automatically', 'manual'] as const;\nexport type TemplateKind = (typeof TemplateKinds)[number];\n\nexport const TemplateKindSchema = S.Union(\n S.Struct({\n include: S.Literal('always'),\n }),\n S.Struct({\n include: S.Literal('schema-matching'),\n typename: S.String,\n }),\n S.Struct({\n include: S.Literal('automatically'),\n description: S.String,\n }),\n S.Struct({\n include: S.Literal('manual'),\n }),\n);\n\nexport type TemplateKindType = S.Schema.Type<typeof TemplateKindSchema>;\nexport class TemplateType extends TypedObject({ typename: 'dxos.org/type/Template', version: '0.1.0' })({\n name: S.optional(S.String),\n kind: S.mutable(TemplateKindSchema),\n source: S.String,\n inputs: S.optional(S.mutable(S.Array(TemplateInputSchema))),\n command: S.optional(S.String),\n}) {}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\n\nimport { AIChatType } from './chat';\nimport { TemplateType } from './template';\nimport { ASSISTANT_PLUGIN } from '../meta';\n\nexport namespace AssistantAction {\n const ASSISTANT_ACTION = `${ASSISTANT_PLUGIN}/action`;\n\n export class CreateChat extends S.TaggedClass<CreateChat>()(`${ASSISTANT_ACTION}/create-chat`, {\n input: S.Struct({\n spaceId: S.optional(S.String),\n name: S.optional(S.String),\n }),\n output: S.Struct({\n object: AIChatType,\n }),\n }) {}\n\n export class CreateTemplate extends S.TaggedClass<CreateTemplate>()(`${ASSISTANT_ACTION}/create-template`, {\n input: S.Struct({\n name: S.optional(S.String),\n }),\n output: S.Struct({\n object: TemplateType,\n }),\n }) {}\n}\n\nexport const AssistantSettingsSchema = S.mutable(\n S.Struct({\n llmProvider: S.optional(S.Literal('edge', 'ollama')),\n edgeModel: S.optional(S.String),\n ollamaModel: S.optional(S.String),\n customPrompts: S.optional(S.Boolean),\n }),\n);\n\nexport type AssistantSettingsProps = S.Schema.Type<typeof AssistantSettingsSchema>;\n"],
5
+ "mappings": "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",
6
+ "names": ["import_echo_schema", "AIChatType", "TypedObject", "typename", "version", "assistantChatQueue", "Ref", "Expando", "ApiAuthorizationKey", "S", "Struct", "type", "Literal", "key", "String", "placement", "Union", "name", "ApiAuthorizationOauth", "clientId", "clientSecret", "tokenUrl", "grantType", "ApiAuthorization", "ServiceInterfaceFunction", "kind", "fn", "FunctionType", "ServiceInterfaceWorkflow", "workflow", "ComputeGraph", "ServiceInterfaceApi", "schemaUrl", "optional", "schema", "Any", "authorization", "ServiceInterface", "ServiceType", "serviceId", "description", "category", "enabled", "Boolean", "interfaces", "Array", "categoryIcons", "finance", "health", "geolocation", "education", "entertainment", "shopping", "travel", "utilities", "weather", "TemplateInputType", "TemplateInputSchema", "mutable", "Enums", "value", "TemplateKinds", "TemplateKindSchema", "include", "TemplateType", "source", "inputs", "command", "AssistantAction", "ASSISTANT_ACTION", "ASSISTANT_PLUGIN", "CreateChat", "TaggedClass", "input", "spaceId", "output", "object", "CreateTemplate", "AssistantSettingsSchema", "llmProvider", "edgeModel", "ollamaModel", "customPrompts"]
7
+ }