@dxos/plugin-assistant 0.8.2-main.f11618f → 0.8.2-staging.7ac8446

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 (164) hide show
  1. package/dist/lib/browser/{AssistantDialog-I47GUXWR.mjs → AssistantDialog-YSHMAHW5.mjs} +3 -3
  2. package/dist/lib/browser/{ChatContainer-GAYN3FEF.mjs → ChatContainer-V5GP7DYF.mjs} +3 -3
  3. package/dist/lib/browser/ChatContainer-V5GP7DYF.mjs.map +7 -0
  4. package/dist/lib/browser/TemplateContainer-K4EJNGIL.mjs +78 -0
  5. package/dist/lib/browser/TemplateContainer-K4EJNGIL.mjs.map +7 -0
  6. package/dist/lib/browser/{ai-client-OK5SMYJC.mjs → ai-client-CDZLSNXE.mjs} +1 -1
  7. package/dist/lib/browser/{ai-client-OK5SMYJC.mjs.map → ai-client-CDZLSNXE.mjs.map} +2 -2
  8. package/dist/lib/browser/{app-graph-builder-ZXKGE3H5.mjs → app-graph-builder-MF5EVDWW.mjs} +39 -9
  9. package/dist/lib/browser/app-graph-builder-MF5EVDWW.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-7CAHKTZQ.mjs → chunk-FMB7RGMP.mjs} +56 -92
  11. package/dist/lib/browser/chunk-FMB7RGMP.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-E7BN4QKP.mjs → chunk-IAMR2FAE.mjs} +2 -9
  13. package/dist/lib/browser/{chunk-E7BN4QKP.mjs.map → chunk-IAMR2FAE.mjs.map} +3 -3
  14. package/dist/lib/browser/chunk-KYMKVE6M.mjs +128 -0
  15. package/dist/lib/browser/chunk-KYMKVE6M.mjs.map +7 -0
  16. package/dist/lib/browser/index.mjs +11 -14
  17. package/dist/lib/browser/index.mjs.map +3 -3
  18. package/dist/lib/browser/{intent-resolver-W6XREK5F.mjs → intent-resolver-WJGLKKVO.mjs} +5 -5
  19. package/dist/lib/browser/intent-resolver-WJGLKKVO.mjs.map +7 -0
  20. package/dist/lib/browser/meta.json +1 -1
  21. package/dist/lib/browser/{react-surface-QMI5KG4H.mjs → react-surface-57VRDOQT.mjs} +15 -15
  22. package/dist/lib/browser/react-surface-57VRDOQT.mjs.map +7 -0
  23. package/dist/lib/browser/{settings-LAJZQI4H.mjs → settings-U6UFQX32.mjs} +4 -4
  24. package/dist/lib/browser/settings-U6UFQX32.mjs.map +7 -0
  25. package/dist/lib/browser/types/index.mjs +1 -3
  26. package/dist/lib/node/{AssistantDialog-SDS2TE5L.cjs → AssistantDialog-YI2BSGSX.cjs} +7 -7
  27. package/dist/lib/node/{ChatContainer-U6AVMAHY.cjs → ChatContainer-ZJ5JXF6A.cjs} +7 -7
  28. package/dist/lib/node/ChatContainer-ZJ5JXF6A.cjs.map +7 -0
  29. package/dist/lib/node/TemplateContainer-XWFYJB4T.cjs +104 -0
  30. package/dist/lib/node/TemplateContainer-XWFYJB4T.cjs.map +7 -0
  31. package/dist/lib/node/{ai-client-3EVTLXTT.cjs → ai-client-URCCYU6B.cjs} +4 -4
  32. package/dist/lib/node/{ai-client-3EVTLXTT.cjs.map → ai-client-URCCYU6B.cjs.map} +2 -2
  33. package/dist/lib/node/{app-graph-builder-TXHPXIIC.cjs → app-graph-builder-N5ZUUI2Z.cjs} +44 -14
  34. package/dist/lib/node/app-graph-builder-N5ZUUI2Z.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-5UELRDHQ.cjs → chunk-APRU3QWK.cjs} +5 -13
  36. package/dist/lib/node/{chunk-5UELRDHQ.cjs.map → chunk-APRU3QWK.cjs.map} +3 -3
  37. package/dist/lib/node/{chunk-CWHFK36A.cjs → chunk-RPBKMP2E.cjs} +80 -117
  38. package/dist/lib/node/chunk-RPBKMP2E.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-XBJO453B.cjs → chunk-ZKOC4ZFY.cjs} +61 -78
  40. package/dist/lib/node/chunk-ZKOC4ZFY.cjs.map +7 -0
  41. package/dist/lib/node/index.cjs +43 -46
  42. package/dist/lib/node/index.cjs.map +3 -3
  43. package/dist/lib/node/{intent-resolver-MUJMV7II.cjs → intent-resolver-R3OSTIMH.cjs} +9 -9
  44. package/dist/lib/node/intent-resolver-R3OSTIMH.cjs.map +7 -0
  45. package/dist/lib/node/meta.json +1 -1
  46. package/dist/lib/node/{react-surface-SAJF4XBB.cjs → react-surface-NUQTM6MS.cjs} +22 -22
  47. package/dist/lib/node/react-surface-NUQTM6MS.cjs.map +7 -0
  48. package/dist/lib/node/{settings-NPXTE6ND.cjs → settings-TXGRCYAL.cjs} +7 -7
  49. package/dist/lib/node/settings-TXGRCYAL.cjs.map +7 -0
  50. package/dist/lib/node/types/index.cjs +12 -14
  51. package/dist/lib/node/types/index.cjs.map +2 -2
  52. package/dist/lib/node-esm/{AssistantDialog-KGA5HBFO.mjs → AssistantDialog-U2FQX5TD.mjs} +3 -3
  53. package/dist/lib/node-esm/{ChatContainer-XPNXNPSW.mjs → ChatContainer-QW3OOXTT.mjs} +3 -3
  54. package/dist/lib/node-esm/ChatContainer-QW3OOXTT.mjs.map +7 -0
  55. package/dist/lib/node-esm/TemplateContainer-EUM2X65J.mjs +79 -0
  56. package/dist/lib/node-esm/TemplateContainer-EUM2X65J.mjs.map +7 -0
  57. package/dist/lib/node-esm/{ai-client-LYCBXZI7.mjs → ai-client-WMHS5EGV.mjs} +1 -1
  58. package/dist/lib/node-esm/{ai-client-LYCBXZI7.mjs.map → ai-client-WMHS5EGV.mjs.map} +2 -2
  59. package/dist/lib/node-esm/{app-graph-builder-SV4WC2E2.mjs → app-graph-builder-DWBNIMHM.mjs} +39 -9
  60. package/dist/lib/node-esm/app-graph-builder-DWBNIMHM.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-GBBXIW5F.mjs +129 -0
  62. package/dist/lib/node-esm/chunk-GBBXIW5F.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-XFUXN5QU.mjs → chunk-MVDAY3CZ.mjs} +56 -92
  64. package/dist/lib/node-esm/chunk-MVDAY3CZ.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-ECYNZYEG.mjs → chunk-MXK2EANZ.mjs} +2 -9
  66. package/dist/lib/node-esm/{chunk-ECYNZYEG.mjs.map → chunk-MXK2EANZ.mjs.map} +3 -3
  67. package/dist/lib/node-esm/index.mjs +11 -14
  68. package/dist/lib/node-esm/index.mjs.map +3 -3
  69. package/dist/lib/node-esm/{intent-resolver-DZY2O2DG.mjs → intent-resolver-H32TL4X6.mjs} +5 -5
  70. package/dist/lib/node-esm/intent-resolver-H32TL4X6.mjs.map +7 -0
  71. package/dist/lib/node-esm/meta.json +1 -1
  72. package/dist/lib/node-esm/{react-surface-R43NHNMC.mjs → react-surface-JBVZF6CP.mjs} +15 -15
  73. package/dist/lib/node-esm/react-surface-JBVZF6CP.mjs.map +7 -0
  74. package/dist/lib/node-esm/{settings-K3JDH2I5.mjs → settings-DZU5PNXM.mjs} +4 -4
  75. package/dist/lib/node-esm/settings-DZU5PNXM.mjs.map +7 -0
  76. package/dist/lib/node-esm/types/index.mjs +1 -3
  77. package/dist/types/src/capabilities/ai-client.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/index.d.ts +1 -1
  80. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  82. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  83. package/dist/types/src/components/ChatContainer.d.ts +3 -4
  84. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  85. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts +6 -0
  86. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts.map +1 -0
  87. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts +8 -0
  88. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts.map +1 -0
  89. package/dist/types/src/components/ServiceRegistry/index.d.ts +2 -0
  90. package/dist/types/src/components/ServiceRegistry/index.d.ts.map +1 -0
  91. package/dist/types/src/components/TemplateContainer.d.ts.map +1 -1
  92. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -1
  93. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -1
  94. package/dist/types/src/components/index.d.ts +6 -2
  95. package/dist/types/src/components/index.d.ts.map +1 -1
  96. package/dist/types/src/hooks/processor.d.ts.map +1 -1
  97. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  98. package/dist/types/src/hooks/useMessageQueue.d.ts +3 -0
  99. package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -1
  100. package/dist/types/src/translations.d.ts +0 -3
  101. package/dist/types/src/translations.d.ts.map +1 -1
  102. package/dist/types/src/types/types.d.ts +1 -3
  103. package/dist/types/src/types/types.d.ts.map +1 -1
  104. package/package.json +57 -57
  105. package/src/AssistantPlugin.tsx +2 -2
  106. package/src/capabilities/ai-client.ts +1 -0
  107. package/src/capabilities/app-graph-builder.ts +38 -6
  108. package/src/capabilities/index.ts +1 -1
  109. package/src/capabilities/intent-resolver.ts +3 -3
  110. package/src/capabilities/react-surface.tsx +9 -11
  111. package/src/capabilities/settings.ts +2 -2
  112. package/src/components/AssistantSettings/AssistantSettings.tsx +6 -28
  113. package/src/components/ChatContainer.tsx +8 -6
  114. package/src/components/ServiceRegistry/ServiceRegistry.stories.tsx +49 -0
  115. package/src/components/ServiceRegistry/ServiceRegistry.tsx +76 -0
  116. package/src/components/ServiceRegistry/index.ts +5 -0
  117. package/src/components/TemplateContainer.tsx +79 -3
  118. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +2 -2
  119. package/src/components/TemplateEditor/TemplateForm.stories.tsx +2 -2
  120. package/src/components/Thread/ThreadContainer.stories.tsx +18 -9
  121. package/src/components/Thread/ThreadContainer.tsx +2 -24
  122. package/src/components/Thread/ThreadMessage.tsx +2 -5
  123. package/src/components/Toolbox/Toolbox.stories.tsx +1 -1
  124. package/src/components/index.ts +1 -1
  125. package/src/hooks/processor.ts +4 -26
  126. package/src/hooks/useChatProcessor.tsx +2 -3
  127. package/src/testing/test-services.ts +6 -6
  128. package/src/translations.ts +4 -5
  129. package/src/types/types.ts +1 -4
  130. package/dist/lib/browser/ChatContainer-GAYN3FEF.mjs.map +0 -7
  131. package/dist/lib/browser/TemplateContainer-WKU5XFSO.mjs +0 -22
  132. package/dist/lib/browser/TemplateContainer-WKU5XFSO.mjs.map +0 -7
  133. package/dist/lib/browser/app-graph-builder-ZXKGE3H5.mjs.map +0 -7
  134. package/dist/lib/browser/chunk-7CAHKTZQ.mjs.map +0 -7
  135. package/dist/lib/browser/chunk-BGMQ2YYP.mjs +0 -143
  136. package/dist/lib/browser/chunk-BGMQ2YYP.mjs.map +0 -7
  137. package/dist/lib/browser/intent-resolver-W6XREK5F.mjs.map +0 -7
  138. package/dist/lib/browser/react-surface-QMI5KG4H.mjs.map +0 -7
  139. package/dist/lib/browser/settings-LAJZQI4H.mjs.map +0 -7
  140. package/dist/lib/node/ChatContainer-U6AVMAHY.cjs.map +0 -7
  141. package/dist/lib/node/TemplateContainer-EQXKHWTF.cjs +0 -52
  142. package/dist/lib/node/TemplateContainer-EQXKHWTF.cjs.map +0 -7
  143. package/dist/lib/node/app-graph-builder-TXHPXIIC.cjs.map +0 -7
  144. package/dist/lib/node/chunk-CWHFK36A.cjs.map +0 -7
  145. package/dist/lib/node/chunk-XBJO453B.cjs.map +0 -7
  146. package/dist/lib/node/intent-resolver-MUJMV7II.cjs.map +0 -7
  147. package/dist/lib/node/react-surface-SAJF4XBB.cjs.map +0 -7
  148. package/dist/lib/node/settings-NPXTE6ND.cjs.map +0 -7
  149. package/dist/lib/node-esm/ChatContainer-XPNXNPSW.mjs.map +0 -7
  150. package/dist/lib/node-esm/TemplateContainer-3LEBT5ZC.mjs +0 -23
  151. package/dist/lib/node-esm/TemplateContainer-3LEBT5ZC.mjs.map +0 -7
  152. package/dist/lib/node-esm/app-graph-builder-SV4WC2E2.mjs.map +0 -7
  153. package/dist/lib/node-esm/chunk-R7Q3OHWG.mjs +0 -144
  154. package/dist/lib/node-esm/chunk-R7Q3OHWG.mjs.map +0 -7
  155. package/dist/lib/node-esm/chunk-XFUXN5QU.mjs.map +0 -7
  156. package/dist/lib/node-esm/intent-resolver-DZY2O2DG.mjs.map +0 -7
  157. package/dist/lib/node-esm/react-surface-R43NHNMC.mjs.map +0 -7
  158. package/dist/lib/node-esm/settings-K3JDH2I5.mjs.map +0 -7
  159. package/dist/types/src/components/PromptSettings.d.ts +0 -6
  160. package/dist/types/src/components/PromptSettings.d.ts.map +0 -1
  161. package/src/components/PromptSettings.tsx +0 -91
  162. /package/dist/lib/browser/{AssistantDialog-I47GUXWR.mjs.map → AssistantDialog-YSHMAHW5.mjs.map} +0 -0
  163. /package/dist/lib/node/{AssistantDialog-SDS2TE5L.cjs.map → AssistantDialog-YI2BSGSX.cjs.map} +0 -0
  164. /package/dist/lib/node-esm/{AssistantDialog-KGA5HBFO.mjs.map → AssistantDialog-U2FQX5TD.mjs.map} +0 -0
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  ThreadContainer
3
- } from "./chunk-7CAHKTZQ.mjs";
3
+ } from "./chunk-FMB7RGMP.mjs";
4
4
  import "./chunk-TXJWGWJ7.mjs";
5
- import "./chunk-E7BN4QKP.mjs";
5
+ import "./chunk-IAMR2FAE.mjs";
6
6
  import {
7
7
  ASSISTANT_PLUGIN
8
8
  } from "./chunk-3HCI5FIL.mjs";
@@ -114,4 +114,4 @@ export {
114
114
  AssistantDialog,
115
115
  AssistantDialog_default as default
116
116
  };
117
- //# sourceMappingURL=AssistantDialog-I47GUXWR.mjs.map
117
+ //# sourceMappingURL=AssistantDialog-YSHMAHW5.mjs.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  ThreadContainer
3
- } from "./chunk-7CAHKTZQ.mjs";
3
+ } from "./chunk-FMB7RGMP.mjs";
4
4
  import "./chunk-TXJWGWJ7.mjs";
5
- import "./chunk-E7BN4QKP.mjs";
5
+ import "./chunk-IAMR2FAE.mjs";
6
6
  import {
7
7
  ASSISTANT_PLUGIN
8
8
  } from "./chunk-3HCI5FIL.mjs";
@@ -30,4 +30,4 @@ export {
30
30
  ChatContainer,
31
31
  ChatContainer_default as default
32
32
  };
33
- //# sourceMappingURL=ChatContainer-GAYN3FEF.mjs.map
33
+ //# sourceMappingURL=ChatContainer-V5GP7DYF.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 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,OAAOA,WAAW;AAElB,SAASC,cAAcC,iBAAiBC,qBAAqB;AAE7D,SAASC,iCAAiC;AAC1C,SAASC,iBAAiB;AAOnB,IAAMC,gBAAgB,CAAC,EAC5BC,MACAC,MACAC,mBAAkB,MAKnB;AACC,QAAMC,gBAAgBC,gBAAgBC,0BAA0BC,WAAW,EAAEC,SAAS;AACtF,QAAMC,WAAWC,cAAcC,aAAaC,aAAa,EAAEC,SAAiCC,gBAAAA,GAAmBC;AAE/G,SACE,sBAAA,cAACC,UAAUC,SAAO;IAAChB;IAAYiB,YAAW;KACxC,sBAAA,cAACC,iBAAAA;IACCjB;IACAO;IACAL;IACAD;;AAIR;AAEA,IAAA,wBAAeH;",
6
+ "names": ["React", "Capabilities", "useCapabilities", "useCapability", "TranscriptionCapabilities", "StackItem", "ChatContainer", "role", "chat", "associatedArtifact", "transcription", "useCapabilities", "TranscriptionCapabilities", "Transcriber", "length", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "ASSISTANT_PLUGIN", "value", "StackItem", "Content", "classNames", "ThreadContainer"]
7
+ }
@@ -0,0 +1,78 @@
1
+ import {
2
+ TemplateEditor
3
+ } from "./chunk-NFUHCW2J.mjs";
4
+ import {
5
+ TemplateKinds
6
+ } from "./chunk-IAMR2FAE.mjs";
7
+ import {
8
+ ASSISTANT_PLUGIN
9
+ } from "./chunk-3HCI5FIL.mjs";
10
+
11
+ // packages/plugins/plugin-assistant/src/components/TemplateContainer.tsx
12
+ import { Match } from "effect";
13
+ import React, { useCallback } from "react";
14
+ import { debounce } from "@dxos/async";
15
+ import { Input, Select, Toolbar, useTranslation } from "@dxos/react-ui";
16
+ import { StackItem } from "@dxos/react-ui-stack";
17
+ var TemplateContainer = ({ template, role }) => {
18
+ const { t } = useTranslation(ASSISTANT_PLUGIN);
19
+ const handleKindChange = useCallback((value) => {
20
+ const kind = Match.type().pipe(Match.withReturnType(), Match.when("always", () => ({
21
+ include: "always"
22
+ })), Match.when("schema-matching", () => ({
23
+ include: "schema-matching",
24
+ typename: ""
25
+ })), Match.when("automatically", () => ({
26
+ include: "automatically",
27
+ description: ""
28
+ })), Match.orElse(() => ({
29
+ include: "manual"
30
+ })))(value);
31
+ template.kind = kind;
32
+ }, [
33
+ template
34
+ ]);
35
+ const handleTypenameChange = useCallback(debounce((event) => {
36
+ if (template.kind.include === "schema-matching") {
37
+ template.kind.typename = event.target.value;
38
+ }
39
+ }, 300), [
40
+ template.kind.include
41
+ ]);
42
+ const handleDescriptionChange = useCallback(debounce((event) => {
43
+ if (template.kind.include === "automatically") {
44
+ template.kind.description = event.target.value;
45
+ }
46
+ }, 300), [
47
+ template.kind.include
48
+ ]);
49
+ return /* @__PURE__ */ React.createElement(StackItem.Content, {
50
+ role,
51
+ toolbar: true,
52
+ classNames: "container-max-width"
53
+ }, /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(Select.Root, {
54
+ value: template.kind.include,
55
+ onValueChange: handleKindChange
56
+ }, /* @__PURE__ */ React.createElement(Toolbar.Button, {
57
+ asChild: true
58
+ }, /* @__PURE__ */ React.createElement(Select.TriggerButton, null)), /* @__PURE__ */ React.createElement(Select.Portal, null, /* @__PURE__ */ React.createElement(Select.Content, null, /* @__PURE__ */ React.createElement(Select.Viewport, null, TemplateKinds.map((kind) => /* @__PURE__ */ React.createElement(Select.Option, {
59
+ key: kind,
60
+ value: kind
61
+ }, kind)))))), template.kind.include === "schema-matching" && /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
62
+ placeholder: t("typename placeholder"),
63
+ defaultValue: template.kind.typename,
64
+ onChange: handleTypenameChange
65
+ })), template.kind.include === "automatically" && /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
66
+ placeholder: t("description placeholder"),
67
+ defaultValue: template.kind.description,
68
+ onChange: handleDescriptionChange
69
+ }))), /* @__PURE__ */ React.createElement(TemplateEditor, {
70
+ template
71
+ }));
72
+ };
73
+ var TemplateContainer_default = TemplateContainer;
74
+ export {
75
+ TemplateContainer,
76
+ TemplateContainer_default as default
77
+ };
78
+ //# sourceMappingURL=TemplateContainer-K4EJNGIL.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/TemplateContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { 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,SAASA,aAA+B;AACxC,OAAOC,SAA2BC,mBAAmB;AAErD,SAASC,gBAAgB;AACzB,SAASC,OAAOC,QAAQC,SAASC,sBAAsB;AACvD,SAASC,iBAAiB;AAMnB,IAAMC,oBAAoB,CAAC,EAAEC,UAAUC,KAAI,MAA4C;AAC5F,QAAM,EAAEC,EAAC,IAAKC,eAAeC,gBAAAA;AAE7B,QAAMC,mBAAmBC,YACvB,CAACC,UAAAA;AACC,UAAMC,OAAOC,MAAMC,KAAI,EAAWC,KAChCF,MAAMG,eAAc,GACpBH,MAAMI,KAAK,UAAU,OAAO;MAAEC,SAAS;IAAS,EAAA,GAChDL,MAAMI,KAAK,mBAAmB,OAAO;MAAEC,SAAS;MAAmBC,UAAU;IAAG,EAAA,GAChFN,MAAMI,KAAK,iBAAiB,OAAO;MAAEC,SAAS;MAAiBE,aAAa;IAAG,EAAA,GAC/EP,MAAMQ,OAAO,OAAO;MAAEH,SAAS;IAAS,EAAA,CAAA,EACxCP,KAAAA;AAEFP,aAASQ,OAAOA;EAClB,GACA;IAACR;GAAS;AAGZ,QAAMkB,uBAAuBZ,YAC3Ba,SAAS,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,0BAA0BhB,YAC9Ba,SAAS,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,sBAAA,cAACS,UAAUC,SAAO;IAACvB;IAAYwB,SAAAA;IAAQC,YAAW;KAEhD,sBAAA,cAACC,QAAQC,MAAI,MACX,sBAAA,cAACC,OAAOD,MAAI;IAACrB,OAAOP,SAASQ,KAAKM;IAASgB,eAAezB;KACxD,sBAAA,cAACsB,QAAQI,QAAM;IAACC,SAAAA;KACd,sBAAA,cAACH,OAAOI,eAAa,IAAA,CAAA,GAEvB,sBAAA,cAACJ,OAAOK,QAAM,MACZ,sBAAA,cAACL,OAAOL,SAAO,MACb,sBAAA,cAACK,OAAOM,UAAQ,MACbC,cAAcC,IAAI,CAAC7B,SAClB,sBAAA,cAACqB,OAAOS,QAAM;IAACC,KAAK/B;IAAMD,OAAOC;KAC9BA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAOZR,SAASQ,KAAKM,YAAY,qBACzB,sBAAA,cAAC0B,MAAMZ,MAAI,MACT,sBAAA,cAACY,MAAMC,WAAS;IACdC,aAAaxC,EAAE,sBAAA;IACfyC,cAAc3C,SAASQ,KAAKO;IAC5B6B,UAAU1B;OAIflB,SAASQ,KAAKM,YAAY,mBACzB,sBAAA,cAAC0B,MAAMZ,MAAI,MACT,sBAAA,cAACY,MAAMC,WAAS;IACdC,aAAaxC,EAAE,yBAAA;IACfyC,cAAc3C,SAASQ,KAAKQ;IAC5B4B,UAAUtB;QAKlB,sBAAA,cAACuB,gBAAAA;IAAe7C;;AAGtB;AAEA,IAAA,4BAAeD;",
6
+ "names": ["Match", "React", "useCallback", "debounce", "Input", "Select", "Toolbar", "useTranslation", "StackItem", "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", "StackItem", "Content", "toolbar", "classNames", "Toolbar", "Root", "Select", "onValueChange", "Button", "asChild", "TriggerButton", "Portal", "Viewport", "TemplateKinds", "map", "Option", "key", "Input", "TextInput", "placeholder", "defaultValue", "onChange", "TemplateEditor"]
7
+ }
@@ -32,4 +32,4 @@ var ai_client_default = (context) => {
32
32
  export {
33
33
  ai_client_default as default
34
34
  };
35
- //# sourceMappingURL=ai-client-OK5SMYJC.mjs.map
35
+ //# sourceMappingURL=ai-client-CDZLSNXE.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/ai-client.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { effect, signal } from '@preact/signals-core';\n\nimport { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { type AIServiceClient, AIServiceEdgeClient, OllamaClient } from '@dxos/assistant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { AssistantCapabilities } from './capabilities';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { type AssistantSettingsProps } from '../types';\n\n// TODO(wittjosiah): Factor out.\nconst DEFAULT_AI_SERVICE_URL = 'http://localhost:8788';\n\nexport default (context: PluginsContext) => {\n const client = context.requestCapability(ClientCapabilities.Client);\n const endpoint = client.config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL;\n\n const ai = signal<AIServiceClient>(new AIServiceEdgeClient({ endpoint }));\n\n const unsubscribe = effect(() => {\n const settings = context\n .requestCapability(Capabilities.SettingsStore)\n .getStore<AssistantSettingsProps>(ASSISTANT_PLUGIN)?.value;\n\n if (settings?.llmProvider === 'ollama') {\n ai.value = new OllamaClient();\n } else {\n ai.value = new AIServiceEdgeClient({ endpoint });\n }\n });\n\n return contributes(AssistantCapabilities.AiClient, ai, () => unsubscribe());\n};\n"],
5
- "mappings": ";;;;;;;;AAIA,SAASA,QAAQC,cAAc;AAE/B,SAASC,cAAcC,mBAAwC;AAC/D,SAA+BC,qBAAqBC,oBAAoB;AACxE,SAASC,0BAA0B;AAOnC,IAAMC,yBAAyB;AAE/B,IAAA,oBAAe,CAACC,YAAAA;AACd,QAAMC,SAASD,QAAQE,kBAAkBC,mBAAmBC,MAAM;AAClE,QAAMC,WAAWJ,OAAOK,OAAOC,OAAOC,SAASC,UAAUC,IAAIC,UAAUZ;AAEvE,QAAMW,KAAKE,OAAwB,IAAIC,oBAAoB;IAAER;EAAS,CAAA,CAAA;AAEtE,QAAMS,cAAcC,OAAO,MAAA;AACzB,UAAMC,WAAWhB,QACdE,kBAAkBe,aAAaC,aAAa,EAC5CC,SAAiCC,gBAAAA,GAAmBC;AAEvD,QAAIL,UAAUM,gBAAgB,UAAU;AACtCZ,SAAGW,QAAQ,IAAIE,aAAAA;IACjB,OAAO;AACLb,SAAGW,QAAQ,IAAIR,oBAAoB;QAAER;MAAS,CAAA;IAChD;EACF,CAAA;AAEA,SAAOmB,YAAYC,sBAAsBC,UAAUhB,IAAI,MAAMI,YAAAA,CAAAA;AAC/D;",
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { effect, signal } from '@preact/signals-core';\n\nimport { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { type AIServiceClient, AIServiceEdgeClient, OllamaClient } from '@dxos/assistant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { AssistantCapabilities } from './capabilities';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { type AssistantSettingsProps } from '../types';\n\n// TODO(wittjosiah): Factor out.\nconst DEFAULT_AI_SERVICE_URL = 'http://localhost:8788';\n\nexport default (context: PluginsContext) => {\n const client = context.requestCapability(ClientCapabilities.Client);\n const endpoint = client.config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL;\n\n const ai = signal<AIServiceClient>(new AIServiceEdgeClient({ endpoint }));\n\n const unsubscribe = effect(() => {\n // TODO(burdon): Could be undefined.\n const settings = context\n .requestCapability(Capabilities.SettingsStore)\n .getStore<AssistantSettingsProps>(ASSISTANT_PLUGIN)?.value;\n\n if (settings?.llmProvider === 'ollama') {\n ai.value = new OllamaClient();\n } else {\n ai.value = new AIServiceEdgeClient({ endpoint });\n }\n });\n\n return contributes(AssistantCapabilities.AiClient, ai, () => unsubscribe());\n};\n"],
5
+ "mappings": ";;;;;;;;AAIA,SAASA,QAAQC,cAAc;AAE/B,SAASC,cAAcC,mBAAwC;AAC/D,SAA+BC,qBAAqBC,oBAAoB;AACxE,SAASC,0BAA0B;AAOnC,IAAMC,yBAAyB;AAE/B,IAAA,oBAAe,CAACC,YAAAA;AACd,QAAMC,SAASD,QAAQE,kBAAkBC,mBAAmBC,MAAM;AAClE,QAAMC,WAAWJ,OAAOK,OAAOC,OAAOC,SAASC,UAAUC,IAAIC,UAAUZ;AAEvE,QAAMW,KAAKE,OAAwB,IAAIC,oBAAoB;IAAER;EAAS,CAAA,CAAA;AAEtE,QAAMS,cAAcC,OAAO,MAAA;AAEzB,UAAMC,WAAWhB,QACdE,kBAAkBe,aAAaC,aAAa,EAC5CC,SAAiCC,gBAAAA,GAAmBC;AAEvD,QAAIL,UAAUM,gBAAgB,UAAU;AACtCZ,SAAGW,QAAQ,IAAIE,aAAAA;IACjB,OAAO;AACLb,SAAGW,QAAQ,IAAIR,oBAAoB;QAAER;MAAS,CAAA;IAChD;EACF,CAAA;AAEA,SAAOmB,YAAYC,sBAAsBC,UAAUhB,IAAI,MAAMI,YAAAA,CAAAA;AAC/D;",
6
6
  "names": ["effect", "signal", "Capabilities", "contributes", "AIServiceEdgeClient", "OllamaClient", "ClientCapabilities", "DEFAULT_AI_SERVICE_URL", "context", "client", "requestCapability", "ClientCapabilities", "Client", "endpoint", "config", "values", "runtime", "services", "ai", "server", "signal", "AIServiceEdgeClient", "unsubscribe", "effect", "settings", "Capabilities", "SettingsStore", "getStore", "ASSISTANT_PLUGIN", "value", "llmProvider", "OllamaClient", "contributes", "AssistantCapabilities", "AiClient"]
7
7
  }
@@ -2,7 +2,7 @@ import {
2
2
  AIChatType,
3
3
  AssistantAction,
4
4
  TemplateType
5
- } from "./chunk-E7BN4QKP.mjs";
5
+ } from "./chunk-IAMR2FAE.mjs";
6
6
  import {
7
7
  ASSISTANT_DIALOG,
8
8
  ASSISTANT_PLUGIN
@@ -12,11 +12,11 @@ import {
12
12
  import { Capabilities, contributes, createIntent, LayoutAction } from "@dxos/app-framework";
13
13
  import { invariant } from "@dxos/invariant";
14
14
  import { ClientCapabilities } from "@dxos/plugin-client";
15
- import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from "@dxos/plugin-deck/types";
15
+ import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
16
16
  import { createExtension, ROOT_ID } from "@dxos/plugin-graph";
17
17
  import { memoizeQuery } from "@dxos/plugin-space";
18
- import { SPACE_TYPE, SpaceAction } from "@dxos/plugin-space/types";
19
- import { Filter, fullyQualifiedId, getSpace, isLiveObject } from "@dxos/react-client/echo";
18
+ import { SpaceAction } from "@dxos/plugin-space/types";
19
+ import { Filter, fullyQualifiedId, getSpace, isSpace, isReactiveObject, parseId } from "@dxos/react-client/echo";
20
20
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-assistant/src/capabilities/app-graph-builder.ts";
21
21
  var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
22
22
  createExtension({
@@ -76,9 +76,39 @@ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBu
76
76
  }
77
77
  ]
78
78
  }),
79
+ createExtension({
80
+ id: `${ASSISTANT_PLUGIN}/service-registry`,
81
+ filter: (node) => node.id === "root",
82
+ connector: ({ node }) => {
83
+ const layout = context.requestCapability(Capabilities.Layout);
84
+ const client = context.requestCapability(ClientCapabilities.Client);
85
+ const { spaceId } = parseId(layout.workspace);
86
+ const space = spaceId ? client.spaces.get(spaceId) : null;
87
+ return [
88
+ {
89
+ id: [
90
+ node.id,
91
+ "service-registry"
92
+ ].join(ATTENDABLE_PATH_SEPARATOR),
93
+ type: DECK_COMPANION_TYPE,
94
+ data: space,
95
+ properties: {
96
+ label: [
97
+ "service registry label",
98
+ {
99
+ ns: ASSISTANT_PLUGIN
100
+ }
101
+ ],
102
+ icon: "ph--plugs--regular",
103
+ disposition: "hidden"
104
+ }
105
+ }
106
+ ];
107
+ }
108
+ }),
79
109
  createExtension({
80
110
  id: `${ASSISTANT_PLUGIN}/object-chat-companion`,
81
- filter: (node) => isLiveObject(node.data) && node.data.assistantChatQueue && node.data.type !== AIChatType.typename,
111
+ filter: (node) => isReactiveObject(node.data) && node.data.assistantChatQueue && node.data.type !== AIChatType.typename,
82
112
  connector: ({ node }) => [
83
113
  {
84
114
  id: [
@@ -102,7 +132,7 @@ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBu
102
132
  }),
103
133
  createExtension({
104
134
  id: `${ASSISTANT_PLUGIN}/root`,
105
- filter: (node) => node.type === SPACE_TYPE,
135
+ filter: (node) => isSpace(node.data),
106
136
  connector: ({ node }) => {
107
137
  const templates = memoizeQuery(node.data, Filter.schema(TemplateType));
108
138
  return templates.length > 0 ? [
@@ -139,7 +169,7 @@ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBu
139
169
  data: template,
140
170
  properties: {
141
171
  label: template.name ?? [
142
- "object placeholder",
172
+ "template title placeholder",
143
173
  {
144
174
  ns: ASSISTANT_PLUGIN
145
175
  }
@@ -160,7 +190,7 @@ var getOrCreateChat = async (dispatch, space) => {
160
190
  }));
161
191
  invariant(data?.object instanceof AIChatType, void 0, {
162
192
  F: __dxlog_file,
163
- L: 160,
193
+ L: 192,
164
194
  S: void 0,
165
195
  A: [
166
196
  "data?.object instanceof AIChatType",
@@ -176,4 +206,4 @@ var getOrCreateChat = async (dispatch, space) => {
176
206
  export {
177
207
  app_graph_builder_default as default
178
208
  };
179
- //# sourceMappingURL=app-graph-builder-ZXKGE3H5.mjs.map
209
+ //# sourceMappingURL=app-graph-builder-MF5EVDWW.mjs.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": ["Capabilities", "contributes", "createIntent", "LayoutAction", "invariant", "ClientCapabilities", "PLANK_COMPANION_TYPE", "ATTENDABLE_PATH_SEPARATOR", "DECK_COMPANION_TYPE", "createExtension", "ROOT_ID", "memoizeQuery", "SpaceAction", "Filter", "fullyQualifiedId", "getSpace", "isSpace", "isReactiveObject", "parseId", "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
+ }
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  ServiceType,
6
6
  categoryIcons
7
- } from "./chunk-E7BN4QKP.mjs";
7
+ } from "./chunk-IAMR2FAE.mjs";
8
8
  import {
9
9
  ASSISTANT_PLUGIN
10
10
  } from "./chunk-3HCI5FIL.mjs";
@@ -753,7 +753,7 @@ var components = {
753
753
  }
754
754
  return /* @__PURE__ */ React3.createElement(ToggleContainer2, {
755
755
  // open={open}
756
- defaultOpen: systemDispositions.includes(block.disposition ?? "") && block.pending,
756
+ defaultOpen: block.disposition === "cot" && block.pending,
757
757
  title,
758
758
  icon: block.pending ? /* @__PURE__ */ React3.createElement(Icon, {
759
759
  icon: "ph--circle-notch--regular",
@@ -764,7 +764,7 @@ var components = {
764
764
  content: block.text,
765
765
  classNames: [
766
766
  "pbe-2",
767
- systemDispositions.includes(block.disposition ?? "") && "text-sm text-subdued"
767
+ block.disposition === "cot" && "text-sm text-subdued"
768
768
  ]
769
769
  }));
770
770
  },
@@ -841,13 +841,8 @@ var titles = {
841
841
  ["artifact"]: "Artifact",
842
842
  ["tool_use"]: "Tool request",
843
843
  ["tool_result"]: "Tool result",
844
- ["tool_list"]: "Tools",
845
- ["artifact-update"]: "Artifact(s) changed"
844
+ ["tool_list"]: "Tools"
846
845
  };
847
- var systemDispositions = [
848
- "cot",
849
- "artifact-update"
850
- ];
851
846
 
852
847
  // packages/plugins/plugin-assistant/src/components/Thread/reducer.ts
853
848
  var messageReducer = ({ current, messages }, message) => {
@@ -1385,11 +1380,8 @@ var Thread = ({ classNames, space, messages, collapse = true, transcription, pro
1385
1380
  };
1386
1381
 
1387
1382
  // packages/plugins/plugin-assistant/src/components/Thread/ThreadContainer.tsx
1388
- import React7, { useCallback as useCallback3, useEffect as useEffect6 } from "react";
1389
- import { CollaborationActions, createIntent, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
1383
+ import React7, { useCallback as useCallback3 } from "react";
1390
1384
  import { invariant as invariant6 } from "@dxos/invariant";
1391
- import { DXN as DXN3 } from "@dxos/keys";
1392
- import { makeRef, refFromDXN } from "@dxos/live-object";
1393
1385
  import { log as log10 } from "@dxos/log";
1394
1386
  import { getSpace as getSpace2 } from "@dxos/react-client/echo";
1395
1387
 
@@ -1398,7 +1390,6 @@ import { batch, computed, signal } from "@preact/signals-core";
1398
1390
  import { AISession, DEFAULT_EDGE_MODEL } from "@dxos/assistant";
1399
1391
  import { invariant as invariant3 } from "@dxos/invariant";
1400
1392
  import { log as log5 } from "@dxos/log";
1401
- import { getVersion } from "@dxos/react-client/echo";
1402
1393
  var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-assistant/src/hooks/processor.ts";
1403
1394
  var defaultOptions = {
1404
1395
  model: DEFAULT_EDGE_MODEL,
@@ -1457,7 +1448,7 @@ var ChatProcessor = class {
1457
1448
  */
1458
1449
  async request(message, options = {}) {
1459
1450
  this._session = new AISession({
1460
- operationModel: "configured"
1451
+ operationModel: "immediate"
1461
1452
  });
1462
1453
  this._session.message.on((message2) => {
1463
1454
  batch(() => {
@@ -1484,40 +1475,19 @@ var ChatProcessor = class {
1484
1475
  client: this._ai,
1485
1476
  history: options.history ?? [],
1486
1477
  artifacts: this._artifacts ?? [],
1487
- requiredArtifactIds: this._artifacts?.map((artifact) => artifact.id) ?? [],
1488
1478
  tools: this._tools ?? [],
1489
1479
  prompt: message,
1490
1480
  systemPrompt: this._options.systemPrompt,
1491
1481
  extensions: this._extensions,
1492
- artifactDiffResolver: async (artifacts) => {
1493
- const space = this._extensions?.space;
1494
- if (!space) {
1495
- return /* @__PURE__ */ new Map();
1496
- }
1497
- const versions = /* @__PURE__ */ new Map();
1498
- await Promise.all(artifacts.map(async (artifact) => {
1499
- const { objects: [object] } = await space.db.query({
1500
- id: artifact.id
1501
- }).run();
1502
- if (!object) {
1503
- return;
1504
- }
1505
- versions.set(artifact.id, {
1506
- version: getVersion(object),
1507
- diff: `Current state: ${JSON.stringify(object)}`
1508
- });
1509
- }));
1510
- return versions;
1511
- },
1512
1482
  generationOptions: {
1513
1483
  model: this._options.model
1514
1484
  }
1515
1485
  });
1516
- log5("completed", {
1486
+ log5.info("completed", {
1517
1487
  messages
1518
1488
  }, {
1519
1489
  F: __dxlog_file6,
1520
- L: 160,
1490
+ L: 137,
1521
1491
  S: this,
1522
1492
  C: (f, a) => f(...a)
1523
1493
  });
@@ -1525,7 +1495,7 @@ var ChatProcessor = class {
1525
1495
  } catch (err) {
1526
1496
  log5.catch(err, void 0, {
1527
1497
  F: __dxlog_file6,
1528
- L: 163,
1498
+ L: 141,
1529
1499
  S: this,
1530
1500
  C: (f, a) => f(...a)
1531
1501
  });
@@ -1550,7 +1520,7 @@ var ChatProcessor = class {
1550
1520
  async cancel() {
1551
1521
  log5.info("cancelling...", void 0, {
1552
1522
  F: __dxlog_file6,
1553
- L: 181,
1523
+ L: 159,
1554
1524
  S: this,
1555
1525
  C: (f, a) => f(...a)
1556
1526
  });
@@ -1586,22 +1556,15 @@ import { isNonNullable as isNonNullable2 } from "@dxos/util";
1586
1556
 
1587
1557
  // packages/plugins/plugin-assistant/src/capabilities/index.ts
1588
1558
  import { lazy } from "@dxos/app-framework";
1589
- var AiClient = lazy(() => import("./ai-client-OK5SMYJC.mjs"));
1590
- var AppGraphBuilder = lazy(() => import("./app-graph-builder-ZXKGE3H5.mjs"));
1591
- var IntentResolver = lazy(() => import("./intent-resolver-W6XREK5F.mjs"));
1592
- var ReactSurface = lazy(() => import("./react-surface-QMI5KG4H.mjs"));
1593
- var Settings = lazy(() => import("./settings-LAJZQI4H.mjs"));
1559
+ var AiClient = lazy(() => import("./ai-client-CDZLSNXE.mjs"));
1560
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-MF5EVDWW.mjs"));
1561
+ var IntentResolver = lazy(() => import("./intent-resolver-WJGLKKVO.mjs"));
1562
+ var ReactSurface = lazy(() => import("./react-surface-57VRDOQT.mjs"));
1563
+ var AssistantSettings = lazy(() => import("./settings-U6UFQX32.mjs"));
1594
1564
 
1595
1565
  // packages/plugins/plugin-assistant/src/hooks/useChatProcessor.tsx
1596
1566
  var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-assistant/src/hooks/useChatProcessor.tsx";
1597
- var useChatProcessor = ({
1598
- chat,
1599
- space,
1600
- settings,
1601
- // part = 'deck',
1602
- part,
1603
- associatedArtifact
1604
- }) => {
1567
+ var useChatProcessor = ({ chat, space, settings, part = "deck", associatedArtifact }) => {
1605
1568
  const aiClient = useCapability(AssistantCapabilities.AiClient);
1606
1569
  const globalTools = useCapabilities2(Capabilities2.Tools);
1607
1570
  const artifactDefinitions = useCapabilities2(Capabilities2.ArtifactDefinition);
@@ -1611,7 +1574,7 @@ var useChatProcessor = ({
1611
1574
  useEffect3(() => {
1612
1575
  log6("creating service tools...", void 0, {
1613
1576
  F: __dxlog_file7,
1614
- L: 49,
1577
+ L: 48,
1615
1578
  S: void 0,
1616
1579
  C: (f, a) => f(...a)
1617
1580
  });
@@ -1630,7 +1593,7 @@ var useChatProcessor = ({
1630
1593
  const [tools, extensions] = useMemo3(() => {
1631
1594
  log6("creating tools...", void 0, {
1632
1595
  F: __dxlog_file7,
1633
- L: 61,
1596
+ L: 60,
1634
1597
  S: void 0,
1635
1598
  C: (f, a) => f(...a)
1636
1599
  });
@@ -1671,7 +1634,7 @@ ${definition.instructions}`),
1671
1634
  settings
1672
1635
  }, {
1673
1636
  F: __dxlog_file7,
1674
- L: 92,
1637
+ L: 91,
1675
1638
  S: void 0,
1676
1639
  C: (f, a) => f(...a)
1677
1640
  });
@@ -1682,7 +1645,6 @@ ${definition.instructions}`),
1682
1645
  }, [
1683
1646
  aiClient.value,
1684
1647
  tools,
1685
- artifactDefinitions,
1686
1648
  extensions,
1687
1649
  model,
1688
1650
  systemPrompt
@@ -1740,7 +1702,12 @@ import { createSystemPrompt as createSystemPrompt2 } from "@dxos/artifact";
1740
1702
  import { DEFAULT_EDGE_MODEL as DEFAULT_EDGE_MODEL3 } from "@dxos/assistant";
1741
1703
 
1742
1704
  // packages/plugins/plugin-assistant/src/testing/test-services.ts
1743
- import { create } from "@dxos/echo-schema";
1705
+ import { createStatic } from "@dxos/echo-schema";
1706
+ var MockServiceRegistry = class {
1707
+ async queryServices(query) {
1708
+ return TEST_SERVICES;
1709
+ }
1710
+ };
1744
1711
  var AMADEUS_AUTH = {
1745
1712
  type: "oauth",
1746
1713
  clientId: "BOEnpLd1sMyKjAPGKYeAPFFy60u53QEG",
@@ -1757,7 +1724,7 @@ var VISUAL_CROSSING_CREDENTIALS = {
1757
1724
  }
1758
1725
  };
1759
1726
  var TEST_SERVICES = [
1760
- create(ServiceType, {
1727
+ createStatic(ServiceType, {
1761
1728
  serviceId: "amadeus.com/service/FlightSearch",
1762
1729
  name: "Amadeus Flight Search",
1763
1730
  description: "Search for local and international flights.",
@@ -1770,7 +1737,7 @@ var TEST_SERVICES = [
1770
1737
  }
1771
1738
  ]
1772
1739
  }),
1773
- create(ServiceType, {
1740
+ createStatic(ServiceType, {
1774
1741
  serviceId: "amadeus.com/service/HotelSearch",
1775
1742
  name: "Amadeus Hotel Search",
1776
1743
  description: "Search for local and international hotels.",
@@ -1783,7 +1750,7 @@ var TEST_SERVICES = [
1783
1750
  }
1784
1751
  ]
1785
1752
  }),
1786
- create(ServiceType, {
1753
+ createStatic(ServiceType, {
1787
1754
  serviceId: "visualcrossing.com/service/Weather",
1788
1755
  name: "Visual Crossing Weather",
1789
1756
  description: "Search for global weather forecasts.",
@@ -1797,7 +1764,7 @@ var TEST_SERVICES = [
1797
1764
  ]
1798
1765
  }),
1799
1766
  // TODO(burdon): Needs auth.
1800
- create(ServiceType, {
1767
+ createStatic(ServiceType, {
1801
1768
  serviceId: "abstractapi.com/service/GeoLocation",
1802
1769
  name: "Abstract GeoLocation",
1803
1770
  description: "Get the location of any IP address.",
@@ -1814,7 +1781,7 @@ var TEST_SERVICES = [
1814
1781
  //
1815
1782
  ...Array.from({
1816
1783
  length: 20
1817
- }, (_, i) => create(ServiceType, {
1784
+ }, (_, i) => createStatic(ServiceType, {
1818
1785
  serviceId: `example.com/service/test-${i}`,
1819
1786
  name: `Test ${i}`,
1820
1787
  description: `Test ${i}`,
@@ -1828,6 +1795,23 @@ var TEST_SERVICES = [
1828
1795
  }))
1829
1796
  ];
1830
1797
 
1798
+ // packages/plugins/plugin-assistant/src/hooks/useServices.ts
1799
+ var useServices = (space, query) => {
1800
+ const registry = useMemo5(() => new MockServiceRegistry(), []);
1801
+ const [services, setServices] = useState6([]);
1802
+ useEffect5(() => {
1803
+ const t = setTimeout(async () => {
1804
+ const services2 = await registry.queryServices(query);
1805
+ setServices(services2);
1806
+ });
1807
+ return () => clearTimeout(t);
1808
+ }, [
1809
+ query,
1810
+ registry
1811
+ ]);
1812
+ return services;
1813
+ };
1814
+
1831
1815
  // packages/plugins/plugin-assistant/src/hooks/useTextInputEvents.ts
1832
1816
  import { useState as useState7, useCallback as useCallback2 } from "react";
1833
1817
 
@@ -1894,36 +1878,15 @@ var ThreadContainer = ({ classNames, chat, settings, part, associatedArtifact, o
1894
1878
  associatedArtifact
1895
1879
  });
1896
1880
  const messageQueue = useMessageQueue(chat);
1897
- const { dispatchPromise: dispatch } = useIntentDispatcher2();
1898
1881
  const messages = [
1899
1882
  ...messageQueue?.items ?? [],
1900
1883
  ...processor.messages.value
1901
1884
  ];
1902
- useEffect6(() => {
1903
- if (!processor.streaming.value && messageQueue?.items) {
1904
- const message = messageQueue.items[messageQueue.items.length - 1];
1905
- if (space && chat && message && dispatch && associatedArtifact) {
1906
- void dispatch(createIntent(CollaborationActions.InsertContent, {
1907
- spaceId: space.id,
1908
- target: makeRef(associatedArtifact),
1909
- object: refFromDXN(new DXN3(DXN3.kind.QUEUE, [
1910
- ...chat.assistantChatQueue.dxn.parts,
1911
- message.id
1912
- ])),
1913
- label: "View proposal"
1914
- }));
1915
- }
1916
- }
1917
- }, [
1918
- messageQueue,
1919
- associatedArtifact,
1920
- processor.streaming.value
1921
- ]);
1922
1885
  const handleSubmit = useCallback3((text) => {
1923
1886
  if (processor.streaming.value) {
1924
1887
  log10.warn("ignoring submit; still processing.", void 0, {
1925
1888
  F: __dxlog_file9,
1926
- L: 66,
1889
+ L: 44,
1927
1890
  S: void 0,
1928
1891
  C: (f, a) => f(...a)
1929
1892
  });
@@ -1932,7 +1895,7 @@ var ThreadContainer = ({ classNames, chat, settings, part, associatedArtifact, o
1932
1895
  onOpenChange?.(true);
1933
1896
  invariant6(messageQueue, void 0, {
1934
1897
  F: __dxlog_file9,
1935
- L: 72,
1898
+ L: 50,
1936
1899
  S: void 0,
1937
1900
  A: [
1938
1901
  "messageQueue",
@@ -1965,24 +1928,25 @@ var ThreadContainer = ({ classNames, chat, settings, part, associatedArtifact, o
1965
1928
  processing: processor.streaming.value,
1966
1929
  error: processor.error.value,
1967
1930
  tools: processor.tools,
1968
- contextProvider,
1969
1931
  onSubmit: handleSubmit,
1970
1932
  onCancel: handleCancel,
1971
1933
  onPrompt: handleSubmit,
1972
1934
  onOpenChange,
1935
+ contextProvider,
1973
1936
  ...props
1974
1937
  });
1975
1938
  };
1976
1939
 
1977
1940
  export {
1978
- Toolbox,
1979
- ToolboxContainer,
1980
- Thread,
1981
1941
  AiClient,
1982
1942
  AppGraphBuilder,
1983
1943
  IntentResolver,
1984
1944
  ReactSurface,
1985
- Settings,
1945
+ AssistantSettings,
1946
+ useServices,
1947
+ Toolbox,
1948
+ ToolboxContainer,
1949
+ Thread,
1986
1950
  ThreadContainer
1987
1951
  };
1988
- //# sourceMappingURL=chunk-7CAHKTZQ.mjs.map
1952
+ //# sourceMappingURL=chunk-FMB7RGMP.mjs.map