@dxos/plugin-assistant 0.8.4-main.1da679c → 0.8.4-main.1f223c7

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 (149) hide show
  1. package/dist/lib/browser/{BlueprintContainer-6MZHBQ25.mjs → BlueprintContainer-BFNN6K46.mjs} +2 -2
  2. package/dist/lib/browser/{ChatCompanion-B4DLQE6Y.mjs → ChatCompanion-DOVN34C7.mjs} +6 -4
  3. package/dist/lib/{node-esm/ChatCompanion-DK6FULBU.mjs.map → browser/ChatCompanion-DOVN34C7.mjs.map} +1 -1
  4. package/dist/lib/browser/{ChatContainer-Z7A3RKOY.mjs → ChatContainer-XIVJTCC2.mjs} +4 -2
  5. package/dist/lib/browser/{ChatContainer-Z7A3RKOY.mjs.map → ChatContainer-XIVJTCC2.mjs.map} +1 -1
  6. package/dist/lib/browser/{ChatDialog-PL5TSGD5.mjs → ChatDialog-EJJMK3WL.mjs} +4 -2
  7. package/dist/lib/browser/{ChatDialog-PL5TSGD5.mjs.map → ChatDialog-EJJMK3WL.mjs.map} +1 -1
  8. package/dist/lib/browser/ai-service-YC2EQPHA.mjs +22 -0
  9. package/dist/lib/browser/ai-service-YC2EQPHA.mjs.map +7 -0
  10. package/dist/lib/browser/{app-graph-builder-BBDHBJXA.mjs → app-graph-builder-3C43MLCD.mjs} +4 -4
  11. package/dist/lib/browser/{app-graph-builder-BBDHBJXA.mjs.map → app-graph-builder-3C43MLCD.mjs.map} +1 -1
  12. package/dist/lib/browser/{blueprint-definition-3SATLYJW.mjs → blueprint-definition-VHFSRTEJ.mjs} +2 -2
  13. package/dist/lib/browser/{chunk-YOBHCEEI.mjs → chunk-C4Q2RYQM.mjs} +47 -14
  14. package/dist/lib/browser/chunk-C4Q2RYQM.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-YKODYEYR.mjs → chunk-EZUSNS2J.mjs} +4 -1
  16. package/dist/lib/browser/chunk-EZUSNS2J.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-BBT6KNXA.mjs → chunk-GLWD66TA.mjs} +5 -9
  18. package/dist/lib/browser/chunk-GLWD66TA.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-JDI4FEKA.mjs → chunk-QD4UUISH.mjs} +6 -6
  20. package/dist/lib/browser/{chunk-TMKK6VCA.mjs → chunk-R6LRGW3I.mjs} +3 -3
  21. package/dist/lib/browser/chunk-R6LRGW3I.mjs.map +7 -0
  22. package/dist/lib/browser/compute-runtime-X6IREJN3.mjs +155 -0
  23. package/dist/lib/browser/compute-runtime-X6IREJN3.mjs.map +7 -0
  24. package/dist/lib/browser/{edge-model-resolver-6YWYDPTS.mjs → edge-model-resolver-JNEB355N.mjs} +9 -5
  25. package/dist/lib/browser/edge-model-resolver-JNEB355N.mjs.map +7 -0
  26. package/dist/lib/browser/index.mjs +25 -21
  27. package/dist/lib/browser/index.mjs.map +4 -4
  28. package/dist/lib/browser/{intent-resolver-MRZJU255.mjs → intent-resolver-I6M3ZDAS.mjs} +5 -5
  29. package/dist/lib/browser/{intent-resolver-MRZJU255.mjs.map → intent-resolver-I6M3ZDAS.mjs.map} +1 -1
  30. package/dist/lib/browser/{local-model-resolver-QXLLTV2H.mjs → local-model-resolver-EUXSRZ7X.mjs} +9 -5
  31. package/dist/lib/browser/local-model-resolver-EUXSRZ7X.mjs.map +7 -0
  32. package/dist/lib/browser/meta.json +1 -1
  33. package/dist/lib/browser/{react-surface-UKMOARXR.mjs → react-surface-E4NAGB6R.mjs} +8 -6
  34. package/dist/lib/{node-esm/react-surface-5NDJAWA2.mjs.map → browser/react-surface-E4NAGB6R.mjs.map} +1 -1
  35. package/dist/lib/browser/{settings-4AJ34FKF.mjs → settings-36V3VUMW.mjs} +3 -3
  36. package/dist/lib/browser/{settings-4AJ34FKF.mjs.map → settings-36V3VUMW.mjs.map} +1 -1
  37. package/dist/lib/browser/{state-ABR7YSSA.mjs → state-AINRYS5W.mjs} +4 -4
  38. package/dist/lib/browser/{state-ABR7YSSA.mjs.map → state-AINRYS5W.mjs.map} +1 -1
  39. package/dist/lib/browser/{toolkit-U7SKGAIC.mjs → toolkit-MPUS3U64.mjs} +3 -3
  40. package/dist/lib/browser/{toolkit-U7SKGAIC.mjs.map → toolkit-MPUS3U64.mjs.map} +1 -1
  41. package/dist/lib/node-esm/{BlueprintContainer-MUHW5HNY.mjs → BlueprintContainer-X4MRBKDR.mjs} +2 -2
  42. package/dist/lib/node-esm/{ChatCompanion-DK6FULBU.mjs → ChatCompanion-ICWYVPRD.mjs} +6 -4
  43. package/dist/lib/{browser/ChatCompanion-B4DLQE6Y.mjs.map → node-esm/ChatCompanion-ICWYVPRD.mjs.map} +1 -1
  44. package/dist/lib/node-esm/{ChatContainer-7IN7ZICQ.mjs → ChatContainer-LMMMQD4K.mjs} +4 -2
  45. package/dist/lib/node-esm/{ChatContainer-7IN7ZICQ.mjs.map → ChatContainer-LMMMQD4K.mjs.map} +1 -1
  46. package/dist/lib/node-esm/{ChatDialog-LPE653RZ.mjs → ChatDialog-UUE3F7BT.mjs} +4 -2
  47. package/dist/lib/node-esm/{ChatDialog-LPE653RZ.mjs.map → ChatDialog-UUE3F7BT.mjs.map} +1 -1
  48. package/dist/lib/node-esm/{ai-service-I5JU4JN2.mjs → ai-service-XUMZVFCK.mjs} +10 -6
  49. package/dist/lib/node-esm/ai-service-XUMZVFCK.mjs.map +7 -0
  50. package/dist/lib/node-esm/{app-graph-builder-EMR5JF6Z.mjs → app-graph-builder-NM3JDLQ2.mjs} +4 -4
  51. package/dist/lib/node-esm/{app-graph-builder-EMR5JF6Z.mjs.map → app-graph-builder-NM3JDLQ2.mjs.map} +1 -1
  52. package/dist/lib/node-esm/{blueprint-definition-B6UDX5U3.mjs → blueprint-definition-4E6XTLVN.mjs} +2 -2
  53. package/dist/lib/node-esm/{chunk-GCNF3CQU.mjs → chunk-LVTG5JTW.mjs} +3 -3
  54. package/dist/lib/node-esm/chunk-LVTG5JTW.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-5MYWJPYA.mjs → chunk-QG2KT3AT.mjs} +5 -9
  56. package/dist/lib/node-esm/chunk-QG2KT3AT.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-X2YUKRBE.mjs → chunk-V44ZG7CU.mjs} +47 -14
  58. package/dist/lib/node-esm/chunk-V44ZG7CU.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-FHRJMZ7L.mjs → chunk-XD4CDA4R.mjs} +4 -1
  60. package/dist/lib/node-esm/chunk-XD4CDA4R.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-H3ZC4UL7.mjs → chunk-YU62ZWJN.mjs} +6 -6
  62. package/dist/lib/node-esm/compute-runtime-NRHLLTSC.mjs +156 -0
  63. package/dist/lib/node-esm/compute-runtime-NRHLLTSC.mjs.map +7 -0
  64. package/dist/lib/node-esm/{edge-model-resolver-A7B6QHLL.mjs → edge-model-resolver-UE5TLLJZ.mjs} +9 -5
  65. package/dist/lib/node-esm/edge-model-resolver-UE5TLLJZ.mjs.map +7 -0
  66. package/dist/lib/node-esm/index.mjs +25 -21
  67. package/dist/lib/node-esm/index.mjs.map +4 -4
  68. package/dist/lib/node-esm/{intent-resolver-CIXO3KMY.mjs → intent-resolver-VIINHFMT.mjs} +5 -5
  69. package/dist/lib/node-esm/{intent-resolver-CIXO3KMY.mjs.map → intent-resolver-VIINHFMT.mjs.map} +1 -1
  70. package/dist/lib/node-esm/{local-model-resolver-JCYDHAZY.mjs → local-model-resolver-JBEFVVZA.mjs} +9 -5
  71. package/dist/lib/node-esm/local-model-resolver-JBEFVVZA.mjs.map +7 -0
  72. package/dist/lib/node-esm/meta.json +1 -1
  73. package/dist/lib/node-esm/{react-surface-5NDJAWA2.mjs → react-surface-5WQLRTCH.mjs} +8 -6
  74. package/dist/lib/{browser/react-surface-UKMOARXR.mjs.map → node-esm/react-surface-5WQLRTCH.mjs.map} +1 -1
  75. package/dist/lib/node-esm/{settings-K2QW4ATZ.mjs → settings-7ZCZ6AS5.mjs} +3 -3
  76. package/dist/lib/node-esm/{settings-K2QW4ATZ.mjs.map → settings-7ZCZ6AS5.mjs.map} +1 -1
  77. package/dist/lib/node-esm/{state-6UHESJI5.mjs → state-EQS5KP6M.mjs} +4 -4
  78. package/dist/lib/node-esm/{state-6UHESJI5.mjs.map → state-EQS5KP6M.mjs.map} +1 -1
  79. package/dist/lib/node-esm/{toolkit-LNLRBVDU.mjs → toolkit-PKVYDZ4H.mjs} +3 -3
  80. package/dist/lib/node-esm/{toolkit-LNLRBVDU.mjs.map → toolkit-PKVYDZ4H.mjs.map} +1 -1
  81. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/ai-service.d.ts +3 -2
  83. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/capabilities.d.ts +21 -0
  86. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/compute-runtime.d.ts +5 -0
  88. package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -0
  89. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/index.d.ts +1 -0
  91. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
  93. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  94. package/dist/types/src/hooks/index.d.ts +1 -0
  95. package/dist/types/src/hooks/index.d.ts.map +1 -1
  96. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +8 -0
  97. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -0
  98. package/dist/types/src/stories/Chat.stories.d.ts +0 -1
  99. package/dist/types/src/stories/Chat.stories.d.ts.map +1 -1
  100. package/dist/types/src/stories/components/TriggersContainer.d.ts +12 -1
  101. package/dist/types/src/stories/components/TriggersContainer.d.ts.map +1 -1
  102. package/dist/types/src/stories/components/index.d.ts +2 -3
  103. package/dist/types/src/stories/components/index.d.ts.map +1 -1
  104. package/dist/types/src/stories/testing/testing.d.ts.map +1 -1
  105. package/dist/types/src/testing/test-data.d.ts +1 -1
  106. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  107. package/dist/types/tsconfig.tsbuildinfo +1 -1
  108. package/package.json +90 -91
  109. package/src/AssistantPlugin.tsx +9 -8
  110. package/src/capabilities/ai-service.ts +5 -3
  111. package/src/capabilities/blueprint-definition.ts +1 -4
  112. package/src/capabilities/capabilities.ts +53 -0
  113. package/src/capabilities/compute-runtime.ts +124 -0
  114. package/src/capabilities/edge-model-resolver.ts +4 -2
  115. package/src/capabilities/index.ts +1 -0
  116. package/src/capabilities/local-model-resolver.ts +4 -2
  117. package/src/components/TemplateEditor/TemplateEditor.tsx +2 -2
  118. package/src/hooks/index.ts +1 -0
  119. package/src/hooks/useChatServices.ts +2 -2
  120. package/src/hooks/useComputeRuntimeCallback.ts +25 -0
  121. package/src/stories/Chat.stories.tsx +4 -151
  122. package/src/stories/components/TriggersContainer.tsx +67 -4
  123. package/src/stories/components/index.ts +2 -3
  124. package/src/stories/testing/testing.tsx +1 -6
  125. package/src/testing/test-data.ts +26 -36
  126. package/dist/lib/browser/ai-service-4VESSFNB.mjs +0 -18
  127. package/dist/lib/browser/ai-service-4VESSFNB.mjs.map +0 -7
  128. package/dist/lib/browser/chunk-BBT6KNXA.mjs.map +0 -7
  129. package/dist/lib/browser/chunk-TMKK6VCA.mjs.map +0 -7
  130. package/dist/lib/browser/chunk-YKODYEYR.mjs.map +0 -7
  131. package/dist/lib/browser/chunk-YOBHCEEI.mjs.map +0 -7
  132. package/dist/lib/browser/edge-model-resolver-6YWYDPTS.mjs.map +0 -7
  133. package/dist/lib/browser/local-model-resolver-QXLLTV2H.mjs.map +0 -7
  134. package/dist/lib/node-esm/ai-service-I5JU4JN2.mjs.map +0 -7
  135. package/dist/lib/node-esm/chunk-5MYWJPYA.mjs.map +0 -7
  136. package/dist/lib/node-esm/chunk-FHRJMZ7L.mjs.map +0 -7
  137. package/dist/lib/node-esm/chunk-GCNF3CQU.mjs.map +0 -7
  138. package/dist/lib/node-esm/chunk-X2YUKRBE.mjs.map +0 -7
  139. package/dist/lib/node-esm/edge-model-resolver-A7B6QHLL.mjs.map +0 -7
  140. package/dist/lib/node-esm/local-model-resolver-JCYDHAZY.mjs.map +0 -7
  141. package/dist/types/src/stories/components/ProjectContainer.d.ts +0 -4
  142. package/dist/types/src/stories/components/ProjectContainer.d.ts.map +0 -1
  143. package/src/stories/components/ProjectContainer.tsx +0 -17
  144. /package/dist/lib/browser/{BlueprintContainer-6MZHBQ25.mjs.map → BlueprintContainer-BFNN6K46.mjs.map} +0 -0
  145. /package/dist/lib/browser/{blueprint-definition-3SATLYJW.mjs.map → blueprint-definition-VHFSRTEJ.mjs.map} +0 -0
  146. /package/dist/lib/browser/{chunk-JDI4FEKA.mjs.map → chunk-QD4UUISH.mjs.map} +0 -0
  147. /package/dist/lib/node-esm/{BlueprintContainer-MUHW5HNY.mjs.map → BlueprintContainer-X4MRBKDR.mjs.map} +0 -0
  148. /package/dist/lib/node-esm/{blueprint-definition-B6UDX5U3.mjs.map → blueprint-definition-4E6XTLVN.mjs.map} +0 -0
  149. /package/dist/lib/node-esm/{chunk-H3ZC4UL7.mjs.map → chunk-YU62ZWJN.mjs.map} +0 -0
@@ -6,13 +6,15 @@ import {
6
6
  ChatDialog,
7
7
  PromptSettings,
8
8
  SequenceContainer
9
- } from "./chunk-JDI4FEKA.mjs";
10
- import "./chunk-TMKK6VCA.mjs";
9
+ } from "./chunk-QD4UUISH.mjs";
10
+ import "./chunk-R6LRGW3I.mjs";
11
11
  import "./chunk-PQI3MGDN.mjs";
12
- import "./chunk-YOBHCEEI.mjs";
12
+ import "./chunk-C4Q2RYQM.mjs";
13
+ import "./chunk-GLWD66TA.mjs";
13
14
  import {
14
15
  Assistant_exports
15
16
  } from "./chunk-SMIVXXAI.mjs";
17
+ import "./chunk-EZUSNS2J.mjs";
16
18
  import {
17
19
  ASSISTANT_DIALOG,
18
20
  meta
@@ -29,7 +31,7 @@ import { InvocationTraceContainer } from "@dxos/devtools";
29
31
  import { Obj } from "@dxos/echo";
30
32
  import { SettingsStore } from "@dxos/local-storage";
31
33
  import { StackItem } from "@dxos/react-ui-stack";
32
- var react_surface_default = (() => contributes(Capabilities.ReactSurface, [
34
+ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
33
35
  createSurface({
34
36
  id: `${meta.id}/plugin-settings`,
35
37
  role: "article",
@@ -100,8 +102,8 @@ var react_surface_default = (() => contributes(Capabilities.ReactSurface, [
100
102
  filter: (data) => data.component === ASSISTANT_DIALOG,
101
103
  component: ({ data }) => /* @__PURE__ */ React.createElement(ChatDialog, data.props)
102
104
  })
103
- ]));
105
+ ]);
104
106
  export {
105
107
  react_surface_default as default
106
108
  };
107
- //# sourceMappingURL=react-surface-UKMOARXR.mjs.map
109
+ //# sourceMappingURL=react-surface-E4NAGB6R.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/react-surface.tsx"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { Blueprint } from '@dxos/blueprints';\nimport { getSpace } from '@dxos/client/echo';\nimport { Sequence } from '@dxos/conductor';\nimport { InvocationTraceContainer } from '@dxos/devtools';\nimport { Obj } from '@dxos/echo';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport {\n AssistantSettings,\n BlueprintContainer,\n ChatCompanion,\n ChatContainer,\n ChatDialog,\n PromptSettings,\n SequenceContainer,\n} from '../components';\nimport { ASSISTANT_DIALOG, meta } from '../meta';\nimport { Assistant } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${meta.id}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<Assistant.Settings> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === meta.id,\n component: ({ data: { subject } }) => <AssistantSettings settings={subject.value} />,\n }),\n createSurface({\n id: `${meta.id}/chat`,\n role: 'article',\n filter: (data): data is { subject: Assistant.Chat; variant: undefined } =>\n Obj.instanceOf(Assistant.Chat, data.subject) && data.variant !== 'assistant-chat',\n component: ({ data, role }) => <ChatContainer role={role} chat={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/companion-chat`,\n role: 'article',\n filter: (data): data is { companionTo: Obj.Any; subject: Assistant.Chat | 'assistant-chat' } =>\n Obj.isObject(data.companionTo) &&\n (Obj.instanceOf(Assistant.Chat, data.subject) || data.subject === 'assistant-chat'),\n component: ({ data, role }) => <ChatCompanion role={role} data={data} />,\n }),\n createSurface({\n id: `${meta.id}/sequence`,\n role: 'article',\n filter: (data): data is { subject: Sequence } => Obj.instanceOf(Sequence, data.subject),\n component: ({ data }) => <SequenceContainer sequence={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/companion-logs`,\n role: 'article',\n filter: (data): data is { companionTo: Sequence } =>\n Obj.instanceOf(Sequence, data.companionTo) && data.subject === 'logs',\n // eslint-disable-next-line unused-imports/no-unused-vars\n component: ({ data, role }) => {\n const space = getSpace(data.companionTo);\n return (\n <StackItem.Content>\n <InvocationTraceContainer space={space} target={data.companionTo} detailAxis='block' />\n </StackItem.Content>\n );\n },\n }),\n createSurface({\n id: `${meta.id}/blueprint`,\n role: 'article',\n filter: (data): data is { subject: Blueprint.Blueprint } => Obj.instanceOf(Blueprint.Blueprint, data.subject),\n component: ({ data }) => <BlueprintContainer blueprint={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/prompt-settings`,\n role: 'object-settings',\n filter: (data): data is { subject: Blueprint.Blueprint } => Obj.instanceOf(Blueprint.Blueprint, data.subject),\n component: ({ data }) => <PromptSettings template={data.subject.instructions} />,\n }),\n createSurface({\n id: ASSISTANT_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: { chat: Assistant.Chat } } => data.component === ASSISTANT_DIALOG,\n component: ({ data }) => <ChatDialog {...data.props} />,\n }),\n ]);\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAASC,gCAAgC;AACzC,SAASC,WAAW;AACpB,SAASC,qBAAqB;AAC9B,SAASC,iBAAiB;AAc1B,IAAA,yBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPA,KAAKC,mBAAmBC,iBAAiBF,KAAKC,QAAQE,WAAWN,KAAKD;IACxEQ,WAAW,CAAC,EAAEJ,MAAM,EAAEC,QAAO,EAAE,MAAO,sBAAA,cAACI,mBAAAA;MAAkBC,UAAUL,QAAQM;;EAC7E,CAAA;EACAZ,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPQ,IAAIC,WAAWC,kBAAUC,MAAMX,KAAKC,OAAO,KAAKD,KAAKY,YAAY;IACnER,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAO,sBAAA,cAACe,eAAAA;MAAcf;MAAYgB,MAAMd,KAAKC;;EACvE,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPQ,IAAIO,SAASf,KAAKgB,WAAW,MAC5BR,IAAIC,WAAWC,kBAAUC,MAAMX,KAAKC,OAAO,KAAKD,KAAKC,YAAY;IACpEG,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAO,sBAAA,cAACmB,eAAAA;MAAcnB;MAAYE;;EAC5D,CAAA;EACAL,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAwCQ,IAAIC,WAAWS,UAAUlB,KAAKC,OAAO;IACtFG,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAACmB,mBAAAA;MAAkBC,UAAUpB,KAAKC;;EAC7D,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPQ,IAAIC,WAAWS,UAAUlB,KAAKgB,WAAW,KAAKhB,KAAKC,YAAY;;IAEjEG,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAE;AACxB,YAAMuB,QAAQC,SAAStB,KAAKgB,WAAW;AACvC,aACE,sBAAA,cAACO,UAAUC,SAAO,MAChB,sBAAA,cAACC,0BAAAA;QAAyBJ;QAAcK,QAAQ1B,KAAKgB;QAAaW,YAAW;;IAGnF;EACF,CAAA;EACAhC,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAmDQ,IAAIC,WAAWmB,UAAUA,WAAW5B,KAAKC,OAAO;IAC5GG,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAAC6B,oBAAAA;MAAmBC,WAAW9B,KAAKC;;EAC/D,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAmDQ,IAAIC,WAAWmB,UAAUA,WAAW5B,KAAKC,OAAO;IAC5GG,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAAC+B,gBAAAA;MAAeC,UAAUhC,KAAKC,QAAQgC;;EAClE,CAAA;EACAtC,cAAc;IACZC,IAAIsC;IACJpC,MAAM;IACNC,QAAQ,CAACC,SAAsDA,KAAKI,cAAc8B;IAClF9B,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAACmC,YAAenC,KAAKoC,KAAK;EACrD,CAAA;CACD;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAASC,gCAAgC;AACzC,SAASC,WAAW;AACpB,SAASC,qBAAqB;AAC9B,SAASC,iBAAiB;AAc1B,IAAA,wBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPA,KAAKC,mBAAmBC,iBAAiBF,KAAKC,QAAQE,WAAWN,KAAKD;IACxEQ,WAAW,CAAC,EAAEJ,MAAM,EAAEC,QAAO,EAAE,MAAO,sBAAA,cAACI,mBAAAA;MAAkBC,UAAUL,QAAQM;;EAC7E,CAAA;EACAZ,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPQ,IAAIC,WAAWC,kBAAUC,MAAMX,KAAKC,OAAO,KAAKD,KAAKY,YAAY;IACnER,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAO,sBAAA,cAACe,eAAAA;MAAcf;MAAYgB,MAAMd,KAAKC;;EACvE,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPQ,IAAIO,SAASf,KAAKgB,WAAW,MAC5BR,IAAIC,WAAWC,kBAAUC,MAAMX,KAAKC,OAAO,KAAKD,KAAKC,YAAY;IACpEG,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAO,sBAAA,cAACmB,eAAAA;MAAcnB;MAAYE;;EAC5D,CAAA;EACAL,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAwCQ,IAAIC,WAAWS,UAAUlB,KAAKC,OAAO;IACtFG,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAACmB,mBAAAA;MAAkBC,UAAUpB,KAAKC;;EAC7D,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPQ,IAAIC,WAAWS,UAAUlB,KAAKgB,WAAW,KAAKhB,KAAKC,YAAY;;IAEjEG,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAE;AACxB,YAAMuB,QAAQC,SAAStB,KAAKgB,WAAW;AACvC,aACE,sBAAA,cAACO,UAAUC,SAAO,MAChB,sBAAA,cAACC,0BAAAA;QAAyBJ;QAAcK,QAAQ1B,KAAKgB;QAAaW,YAAW;;IAGnF;EACF,CAAA;EACAhC,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAmDQ,IAAIC,WAAWmB,UAAUA,WAAW5B,KAAKC,OAAO;IAC5GG,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAAC6B,oBAAAA;MAAmBC,WAAW9B,KAAKC;;EAC/D,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAmDQ,IAAIC,WAAWmB,UAAUA,WAAW5B,KAAKC,OAAO;IAC5GG,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAAC+B,gBAAAA;MAAeC,UAAUhC,KAAKC,QAAQgC;;EAClE,CAAA;EACAtC,cAAc;IACZC,IAAIsC;IACJpC,MAAM;IACNC,QAAQ,CAACC,SAAsDA,KAAKI,cAAc8B;IAClF9B,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAACmC,YAAenC,KAAKoC,KAAK;EACrD,CAAA;CACD;",
6
6
  "names": ["React", "Capabilities", "contributes", "createSurface", "Blueprint", "getSpace", "Sequence", "InvocationTraceContainer", "Obj", "SettingsStore", "StackItem", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "subject", "SettingsStore", "prefix", "component", "AssistantSettings", "settings", "value", "Obj", "instanceOf", "Assistant", "Chat", "variant", "ChatContainer", "chat", "isObject", "companionTo", "ChatCompanion", "Sequence", "SequenceContainer", "sequence", "space", "getSpace", "StackItem", "Content", "InvocationTraceContainer", "target", "detailAxis", "Blueprint", "BlueprintContainer", "blueprint", "PromptSettings", "template", "instructions", "ASSISTANT_DIALOG", "ChatDialog", "props"]
7
7
  }
@@ -9,15 +9,15 @@ import "./chunk-J5LGTIGS.mjs";
9
9
  // src/capabilities/settings.ts
10
10
  import { Capabilities, contributes } from "@dxos/app-framework";
11
11
  import { live } from "@dxos/live-object";
12
- var settings_default = (() => {
12
+ var settings_default = () => {
13
13
  const settings = live({});
14
14
  return contributes(Capabilities.Settings, {
15
15
  prefix: meta.id,
16
16
  schema: Assistant_exports.Settings,
17
17
  value: settings
18
18
  });
19
- });
19
+ };
20
20
  export {
21
21
  settings_default as default
22
22
  };
23
- //# sourceMappingURL=settings-4AJ34FKF.mjs.map
23
+ //# sourceMappingURL=settings-36V3VUMW.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/settings.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { live } from '@dxos/live-object';\n\nimport { meta } from '../meta';\nimport { Assistant } from '../types';\n\nexport default () => {\n const settings = live<Assistant.Settings>({});\n\n return contributes(Capabilities.Settings, {\n prefix: meta.id,\n schema: Assistant.Settings,\n value: settings,\n });\n};\n"],
5
- "mappings": ";;;;;;;;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,YAAY;AAKrB,IAAA,oBAAe,MAAA;AACb,QAAMC,WAAWC,KAAyB,CAAC,CAAA;AAE3C,SAAOC,YAAYC,aAAaC,UAAU;IACxCC,QAAQC,KAAKC;IACbC,QAAQC,kBAAUL;IAClBM,OAAOV;EACT,CAAA;AACF;",
5
+ "mappings": ";;;;;;;;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,YAAY;AAKrB,IAAA,mBAAe,MAAA;AACb,QAAMC,WAAWC,KAAyB,CAAC,CAAA;AAE3C,SAAOC,YAAYC,aAAaC,UAAU;IACxCC,QAAQC,KAAKC;IACbC,QAAQC,kBAAUL;IAClBM,OAAOV;EACT,CAAA;AACF;",
6
6
  "names": ["Capabilities", "contributes", "live", "settings", "live", "contributes", "Capabilities", "Settings", "prefix", "meta", "id", "schema", "Assistant", "value"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AssistantCapabilities
3
- } from "./chunk-YKODYEYR.mjs";
3
+ } from "./chunk-EZUSNS2J.mjs";
4
4
  import {
5
5
  meta
6
6
  } from "./chunk-O4LUJEDV.mjs";
@@ -9,13 +9,13 @@ import "./chunk-J5LGTIGS.mjs";
9
9
  // src/capabilities/state.ts
10
10
  import { contributes } from "@dxos/app-framework";
11
11
  import { LocalStorageStore } from "@dxos/local-storage";
12
- var state_default = (() => {
12
+ var state_default = () => {
13
13
  const state = new LocalStorageStore(meta.id, {
14
14
  currentChat: {}
15
15
  });
16
16
  return contributes(AssistantCapabilities.State, state.values, () => state.close());
17
- });
17
+ };
18
18
  export {
19
19
  state_default as default
20
20
  };
21
- //# sourceMappingURL=state-ABR7YSSA.mjs.map
21
+ //# sourceMappingURL=state-AINRYS5W.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/state.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes } from '@dxos/app-framework';\nimport { LocalStorageStore } from '@dxos/local-storage';\n\nimport { meta } from '../meta';\n\nimport { AssistantCapabilities } from './capabilities';\n\nexport default () => {\n // NOTE: This needs to be a chat object rather than a string id to avoid a query race.\n // TODO(wittjosiah): Handle serialization and hydration for this so it can be cached.\n const state = new LocalStorageStore<AssistantCapabilities.AssistantState>(meta.id, {\n currentChat: {},\n });\n\n return contributes(AssistantCapabilities.State, state.values, () => state.close());\n};\n"],
5
- "mappings": ";;;;;;;;;AAIA,SAASA,mBAAmB;AAC5B,SAASC,yBAAyB;AAMlC,IAAA,iBAAe,MAAA;AAGb,QAAMC,QAAQ,IAAIC,kBAAwDC,KAAKC,IAAI;IACjFC,aAAa,CAAC;EAChB,CAAA;AAEA,SAAOC,YAAYC,sBAAsBC,OAAOP,MAAMQ,QAAQ,MAAMR,MAAMS,MAAK,CAAA;AACjF;",
5
+ "mappings": ";;;;;;;;;AAIA,SAASA,mBAAmB;AAC5B,SAASC,yBAAyB;AAMlC,IAAA,gBAAe,MAAA;AAGb,QAAMC,QAAQ,IAAIC,kBAAwDC,KAAKC,IAAI;IACjFC,aAAa,CAAC;EAChB,CAAA;AAEA,SAAOC,YAAYC,sBAAsBC,OAAOP,MAAMQ,QAAQ,MAAMR,MAAMS,MAAK,CAAA;AACjF;",
6
6
  "names": ["contributes", "LocalStorageStore", "state", "LocalStorageStore", "meta", "id", "currentChat", "contributes", "AssistantCapabilities", "State", "values", "close"]
7
7
  }
@@ -181,11 +181,11 @@ _define_property(Toolkit, "layer", (context) => Toolkit.toLayer({
181
181
  }).pipe(Effect.provide(DatabaseService.layer(space.db)), Effect.orDie);
182
182
  }
183
183
  }));
184
- var toolkit_default = ((context) => [
184
+ var toolkit_default = (context) => [
185
185
  contributes(Capabilities.Toolkit, Toolkit),
186
186
  contributes(Capabilities.ToolkitHandler, Toolkit.layer(context))
187
- ]);
187
+ ];
188
188
  export {
189
189
  toolkit_default as default
190
190
  };
191
- //# sourceMappingURL=toolkit-U7SKGAIC.mjs.map
191
+ //# sourceMappingURL=toolkit-MPUS3U64.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/toolkit.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { AiTool, AiToolkit } from '@effect/ai';\nimport { Effect, Schema } from 'effect';\n\nimport { Capabilities, type Capability, type PluginContext, contributes, createIntent } from '@dxos/app-framework';\nimport { AiContextService, ArtifactId } from '@dxos/assistant';\nimport { Filter, Obj, Ref, SchemaNotFoundError, Type } from '@dxos/echo';\nimport { DatabaseService } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { SpaceCapabilities, getActiveSpace } from '@dxos/plugin-space';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { DataType } from '@dxos/schema';\nimport { trim } from '@dxos/util';\n\n// TODO(burdon): Reconcile with functions (currently reuses plugin framework intents).\nclass Toolkit extends AiToolkit.make(\n AiTool.make('add-to-context', {\n description: trim`\n Adds the object to the chat context.\n `,\n parameters: {\n id: ArtifactId.annotations({\n description: 'The ID of the document to read.',\n }),\n },\n success: Schema.Void,\n failure: Schema.Never,\n }).addRequirement<AiContextService | DatabaseService>(), // TODO(burdon): Define standard contract.\n\n AiTool.make('get-schemas', {\n description: trim`\n Retrieves schemas definitions.\n `,\n parameters: {\n // TODO(wittjosiah): Remove this once parameter-less tools are fixed.\n limit: Schema.Number,\n },\n // TODO(dmaretskyi): Effect returns ({ result, encodedResult })\n success: Schema.Any,\n failure: Schema.Never,\n }),\n\n AiTool.make('add-schema', {\n description: trim`\n Adds a schema to the space.\n The name will be used when displayed to the user.\n The typename must be in the format of \"example.com/type/Type\".\n `,\n parameters: {\n name: Schema.String,\n typename: Schema.String,\n jsonSchema: Schema.Any,\n },\n success: Schema.Any,\n failure: Schema.Never,\n }),\n\n AiTool.make('create-record', {\n description: trim`\n Creates a new record and adds it to the current space.\n Get the schema from the get-schemas tool and ensure that the data matches the corresponding schema.\n Note that only record schemas are supported.\n `,\n parameters: {\n typename: Schema.String,\n data: Schema.Any,\n },\n success: Schema.Any,\n failure: Schema.Never,\n }),\n) {\n static layer = (context: PluginContext) =>\n Toolkit.toLayer({\n 'add-to-context': Effect.fnUntraced(function* ({ id }) {\n const { binder } = yield* AiContextService;\n const { db } = yield* DatabaseService;\n const ref = Ref.fromDXN(ArtifactId.toDXN(id, db.spaceId));\n yield* Effect.promise(() =>\n binder.bind({\n blueprints: [],\n objects: [ref],\n }),\n );\n }),\n\n 'get-schemas': () => {\n const space = getActiveSpace(context);\n invariant(space, 'No active space');\n\n return Effect.gen(function* () {\n const whitelist = context\n .getCapabilities(ClientCapabilities.SchemaWhiteList)\n .flat()\n .map((schema) => ({\n typename: Type.getTypename(schema),\n jsonSchema: Type.toJsonSchema(schema),\n kind: 'record',\n }));\n\n // TODO(burdon): Why ObjectForm (bad name for data capability; UI term)?\n const forms = context.getCapabilities(SpaceCapabilities.ObjectForm).map((form) => ({\n typename: Type.getTypename(form.objectSchema),\n jsonSchema: Type.toJsonSchema(form.objectSchema),\n kind: 'item',\n }));\n\n const schemas = [...whitelist, ...forms];\n if (space) {\n const { objects } = yield* DatabaseService.runQuery(Filter.type(DataType.StoredSchema));\n schemas.push(\n ...objects.map((object) => ({\n typename: object.typename,\n jsonSchema: object.jsonSchema,\n kind: 'record',\n })),\n );\n }\n\n return schemas;\n }).pipe(Effect.provide(DatabaseService.layer(space.db)));\n },\n\n 'add-schema': ({ name, typename, jsonSchema }) => {\n return Effect.gen(function* () {\n const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const space = getActiveSpace(context);\n invariant(space, 'No active space');\n\n const schema = Type.toEffectSchema(jsonSchema).pipe(Type.Obj({ typename, version: '0.1.0' }));\n yield* dispatch(createIntent(SpaceAction.AddSchema, { space, name, typename, schema }));\n }).pipe(Effect.orDie);\n },\n\n 'create-record': ({ typename, data }) => {\n const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const space = getActiveSpace(context);\n invariant(space, 'No active space');\n\n return Effect.gen(function* () {\n const schemas = context.getCapabilities(ClientCapabilities.SchemaWhiteList).flat();\n const { objects } = yield* DatabaseService.runQuery(Filter.type(DataType.StoredSchema));\n schemas.push(...objects.map((object) => Type.toEffectSchema(object.jsonSchema)));\n const schema = schemas.find((schema) => Type.getTypename(schema) === typename);\n if (!schema) {\n throw new SchemaNotFoundError(typename);\n }\n\n const object = Obj.make(schema, data);\n yield* dispatch(createIntent(SpaceAction.AddObject, { object, target: space, hidden: true }));\n return object;\n }).pipe(Effect.provide(DatabaseService.layer(space.db)), Effect.orDie);\n },\n });\n}\n\nexport default (context: PluginContext): Capability<any>[] => [\n contributes(Capabilities.Toolkit, Toolkit),\n contributes(Capabilities.ToolkitHandler, Toolkit.layer(context)),\n];\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["AiTool", "AiToolkit", "Effect", "Schema", "Capabilities", "contributes", "createIntent", "AiContextService", "ArtifactId", "Filter", "Obj", "Ref", "SchemaNotFoundError", "Type", "DatabaseService", "invariant", "ClientCapabilities", "SpaceCapabilities", "getActiveSpace", "SpaceAction", "DataType", "trim", "Toolkit", "make", "description", "parameters", "id", "annotations", "success", "Void", "failure", "Never", "addRequirement", "limit", "Number", "Any", "name", "String", "typename", "jsonSchema", "data", "layer", "context", "toLayer", "fnUntraced", "binder", "db", "ref", "fromDXN", "toDXN", "spaceId", "promise", "bind", "blueprints", "objects", "space", "gen", "whitelist", "getCapabilities", "SchemaWhiteList", "flat", "map", "schema", "getTypename", "toJsonSchema", "kind", "forms", "ObjectForm", "form", "objectSchema", "schemas", "runQuery", "type", "StoredSchema", "push", "object", "pipe", "provide", "dispatch", "getCapability", "IntentDispatcher", "toEffectSchema", "version", "AddSchema", "orDie", "find", "AddObject", "target", "hidden", "ToolkitHandler"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  TemplateEditor
4
- } from "./chunk-GCNF3CQU.mjs";
4
+ } from "./chunk-LVTG5JTW.mjs";
5
5
  import "./chunk-VFY2JG62.mjs";
6
6
  import "./chunk-HSLMI22Q.mjs";
7
7
 
@@ -27,4 +27,4 @@ export {
27
27
  BlueprintContainer,
28
28
  BlueprintContainer_default as default
29
29
  };
30
- //# sourceMappingURL=BlueprintContainer-MUHW5HNY.mjs.map
30
+ //# sourceMappingURL=BlueprintContainer-X4MRBKDR.mjs.map
@@ -1,16 +1,18 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ChatContainer
4
- } from "./chunk-H3ZC4UL7.mjs";
5
- import "./chunk-GCNF3CQU.mjs";
4
+ } from "./chunk-YU62ZWJN.mjs";
5
+ import "./chunk-LVTG5JTW.mjs";
6
6
  import "./chunk-4WLFSXZG.mjs";
7
7
  import {
8
8
  useContextBinder
9
- } from "./chunk-X2YUKRBE.mjs";
9
+ } from "./chunk-V44ZG7CU.mjs";
10
+ import "./chunk-QG2KT3AT.mjs";
10
11
  import {
11
12
  AssistantAction_exports,
12
13
  Assistant_exports
13
14
  } from "./chunk-7YOGZI66.mjs";
15
+ import "./chunk-XD4CDA4R.mjs";
14
16
  import "./chunk-VFY2JG62.mjs";
15
17
  import "./chunk-HSLMI22Q.mjs";
16
18
 
@@ -122,4 +124,4 @@ export {
122
124
  ChatCompanion,
123
125
  ChatCompanion_default as default
124
126
  };
125
- //# sourceMappingURL=ChatCompanion-DK6FULBU.mjs.map
127
+ //# sourceMappingURL=ChatCompanion-ICWYVPRD.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/ChatCompanion.tsx"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Array, Effect, Option, pipe } from 'effect';\nimport React, { useMemo } from 'react';\n\nimport { Capabilities, createIntent, useCapabilities, useIntentDispatcher } from '@dxos/app-framework';\nimport { Blueprint } from '@dxos/blueprints';\nimport { getSpace } from '@dxos/client/echo';\nimport { Filter, Obj, Query, Ref } from '@dxos/echo';\nimport { DatabaseService } from '@dxos/functions';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { useAsyncEffect } from '@dxos/react-ui';\n\nimport { ChatContainer } from '../components';\nimport { useContextBinder } from '../hooks';\nimport { Assistant, AssistantAction } from '../types';\n\nexport type ChatCompanionProps = {\n role?: string;\n data: { companionTo: Obj.Any; subject: Assistant.Chat | 'assistant-chat' };\n};\n\nexport const ChatCompanion = ({ role, data }: ChatCompanionProps) => {\n const companionTo = data.companionTo;\n const space = getSpace(companionTo);\n const chat = data.subject === 'assistant-chat' ? undefined : data.subject;\n const binder = useContextBinder(chat);\n const { dispatch } = useIntentDispatcher();\n\n // Initialize companion chat if it doesn't exist.\n useAsyncEffect(async () => {\n if (chat || !space) {\n return;\n }\n\n // TODO(burdon): Garbage collection of queues?\n // TODO(wittjosiah): Figure out how to prevent companion chats from showing up in the navtree.\n await Effect.gen(function* () {\n const { objects } = yield* DatabaseService.runQuery(\n Query.select(Filter.ids(companionTo.id)).targetOf(Assistant.CompanionTo).source(),\n );\n\n // TODO(wittjosiah): This should be the default sort order.\n let nextChat = objects.toSorted((a, b) => a.id.localeCompare(b.id)).at(-1);\n if (!nextChat) {\n const { object } = yield* dispatch(createIntent(AssistantAction.CreateChat, { space }));\n nextChat = object;\n yield* dispatch(createIntent(SpaceAction.AddObject, { object: nextChat, target: space, hidden: true }));\n yield* dispatch(\n createIntent(SpaceAction.AddRelation, {\n space,\n schema: Assistant.CompanionTo,\n source: nextChat,\n target: data.companionTo,\n }),\n );\n }\n\n yield* dispatch(createIntent(AssistantAction.SetCurrentChat, { companionTo, chat: nextChat }));\n }).pipe(Effect.provide(DatabaseService.layer(space.db)), Effect.runPromise);\n }, [space, chat, companionTo]);\n\n const metadata = useCapabilities(Capabilities.Metadata);\n const blueprintKeys = useMemo(\n () =>\n pipe(\n metadata,\n Array.findFirst(\n (capability): capability is { id: string; metadata: { blueprints?: string[] } } =>\n capability.id === Obj.getTypename(companionTo),\n ),\n Option.flatMap((c) => Option.fromNullable(c.metadata.blueprints)),\n Option.getOrElse(() => [] as string[]),\n ),\n [metadata, companionTo],\n );\n const allBlueprints = useQuery(space, Filter.type(Blueprint.Blueprint));\n const pluginBlueprints = useMemo(\n () => allBlueprints.filter((blueprint) => blueprintKeys.includes(blueprint.key)),\n [allBlueprints, blueprintKeys],\n );\n\n // TODO(wittjosiah): Occasionally this fails to bind but seems to be an upstream issue.\n // It seems like the queue object signal emits as an empty array after previously emitting a non-empty array.\n useAsyncEffect(async () => {\n if (!binder) {\n return;\n }\n\n if (pluginBlueprints.length > 0) {\n await binder.bind({ blueprints: pluginBlueprints.map((blueprint) => Ref.make(blueprint)) });\n }\n\n if (Obj.instanceOf(Blueprint.Blueprint, companionTo)) {\n await binder.bind({ blueprints: [Ref.make(companionTo)] });\n } else {\n await binder.bind({ objects: [Ref.make(companionTo)] });\n }\n }, [binder, companionTo, pluginBlueprints]);\n\n if (!chat) {\n return null;\n }\n\n return <ChatContainer role={role} chat={chat} companionTo={companionTo} />;\n};\n\nexport default ChatCompanion;\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["Array", "Effect", "Option", "pipe", "React", "useMemo", "Capabilities", "createIntent", "useCapabilities", "useIntentDispatcher", "Blueprint", "getSpace", "Filter", "Obj", "Query", "Ref", "DatabaseService", "SpaceAction", "useQuery", "useAsyncEffect", "ChatCompanion", "role", "data", "companionTo", "space", "getSpace", "chat", "subject", "undefined", "binder", "useContextBinder", "dispatch", "useIntentDispatcher", "useAsyncEffect", "Effect", "gen", "objects", "DatabaseService", "runQuery", "Query", "select", "Filter", "ids", "id", "targetOf", "Assistant", "CompanionTo", "source", "nextChat", "toSorted", "a", "b", "localeCompare", "at", "object", "createIntent", "AssistantAction", "CreateChat", "SpaceAction", "AddObject", "target", "hidden", "AddRelation", "schema", "SetCurrentChat", "pipe", "provide", "layer", "db", "runPromise", "metadata", "useCapabilities", "Capabilities", "Metadata", "blueprintKeys", "useMemo", "Array", "findFirst", "capability", "Obj", "getTypename", "Option", "flatMap", "c", "fromNullable", "blueprints", "getOrElse", "allBlueprints", "useQuery", "type", "Blueprint", "pluginBlueprints", "filter", "blueprint", "includes", "key", "length", "bind", "map", "Ref", "make", "instanceOf", "ChatContainer"]
7
7
  }
@@ -9,8 +9,10 @@ import {
9
9
  useChatServices,
10
10
  useOnline,
11
11
  usePresets
12
- } from "./chunk-X2YUKRBE.mjs";
12
+ } from "./chunk-V44ZG7CU.mjs";
13
+ import "./chunk-QG2KT3AT.mjs";
13
14
  import "./chunk-7YOGZI66.mjs";
15
+ import "./chunk-XD4CDA4R.mjs";
14
16
  import {
15
17
  meta
16
18
  } from "./chunk-VFY2JG62.mjs";
@@ -71,4 +73,4 @@ export {
71
73
  ChatContainer,
72
74
  ChatContainer_default as default
73
75
  };
74
- //# sourceMappingURL=ChatContainer-7IN7ZICQ.mjs.map
76
+ //# sourceMappingURL=ChatContainer-LMMMQD4K.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/ChatContainer.tsx"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, useCapability } from '@dxos/app-framework';\nimport { getSpace } from '@dxos/client/echo';\nimport { type Obj } from '@dxos/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { useBlueprintRegistry, useChatProcessor, useChatServices, useOnline, usePresets } from '../hooks';\nimport { meta } from '../meta';\nimport { type Assistant } from '../types';\n\nimport { Chat } from './Chat';\nimport { Toolbar } from './Toolbar';\n\nexport type ChatContainerProps = {\n chat: Assistant.Chat;\n companionTo?: Obj.Any;\n role?: string;\n};\n\nexport const ChatContainer = ({ chat, companionTo }: ChatContainerProps) => {\n const space = getSpace(chat);\n const settings = useCapability(Capabilities.SettingsStore).getStore<Assistant.Settings>(meta.id)?.value;\n const services = useChatServices({ space, chat });\n const [online, setOnline] = useOnline();\n const { preset, ...chatProps } = usePresets(online);\n const blueprintRegistry = useBlueprintRegistry();\n const processor = useChatProcessor({ chat, preset, services, blueprintRegistry, settings });\n\n if (!processor) {\n return null;\n }\n\n return (\n <StackItem.Content toolbar={!!companionTo} classNames='container-max-width'>\n {!!companionTo && <Toolbar chat={chat} companionTo={companionTo} />}\n <Chat.Root chat={chat} processor={processor}>\n <Chat.Thread />\n <div className='p-2'>\n <Chat.Prompt {...chatProps} outline preset={preset?.id} online={online} onOnlineChange={setOnline} />\n </div>\n </Chat.Root>\n </StackItem.Content>\n );\n};\n\nexport default ChatContainer;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,qBAAqB;AAC5C,SAASC,gBAAgB;AAEzB,SAASC,iBAAiB;AAenB,IAAMC,gBAAgB,CAAC,EAAEC,MAAMC,YAAW,MAAsB;;;AACrE,UAAMC,QAAQC,SAASH,IAAAA;AACvB,UAAMI,WAAWC,cAAcC,aAAaC,aAAa,EAAEC,SAA6BC,KAAKC,EAAE,GAAGC;AAClG,UAAMC,WAAWC,gBAAgB;MAAEX;MAAOF;IAAK,CAAA;AAC/C,UAAM,CAACc,QAAQC,SAAAA,IAAaC,UAAAA;AAC5B,UAAM,EAAEC,QAAQ,GAAGC,UAAAA,IAAcC,WAAWL,MAAAA;AAC5C,UAAMM,oBAAoBC,qBAAAA;AAC1B,UAAMC,YAAYC,iBAAiB;MAAEvB;MAAMiB;MAAQL;MAAUQ;MAAmBhB;IAAS,CAAA;AAEzF,QAAI,CAACkB,WAAW;AACd,aAAO;IACT;AAEA,WACE,sBAAA,cAACE,UAAUC,SAAO;MAACC,SAAS,CAAC,CAACzB;MAAa0B,YAAW;OACnD,CAAC,CAAC1B,eAAe,sBAAA,cAAC2B,SAAAA;MAAQ5B;MAAYC;QACvC,sBAAA,cAAC4B,KAAKC,MAAI;MAAC9B;MAAYsB;OACrB,sBAAA,cAACO,KAAKE,QAAM,IAAA,GACZ,sBAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACJ,KAAKK,QAAM;MAAE,GAAGhB;MAAWiB,SAAAA;MAAQlB,QAAQA,QAAQP;MAAII;MAAgBsB,gBAAgBrB;;;;;AAKlG;AAEA,IAAA,wBAAehB;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,qBAAqB;AAC5C,SAASC,gBAAgB;AAEzB,SAASC,iBAAiB;AAenB,IAAMC,gBAAgB,CAAC,EAAEC,MAAMC,YAAW,MAAsB;;;AACrE,UAAMC,QAAQC,SAASH,IAAAA;AACvB,UAAMI,WAAWC,cAAcC,aAAaC,aAAa,EAAEC,SAA6BC,KAAKC,EAAE,GAAGC;AAClG,UAAMC,WAAWC,gBAAgB;MAAEX;MAAOF;IAAK,CAAA;AAC/C,UAAM,CAACc,QAAQC,SAAAA,IAAaC,UAAAA;AAC5B,UAAM,EAAEC,QAAQ,GAAGC,UAAAA,IAAcC,WAAWL,MAAAA;AAC5C,UAAMM,oBAAoBC,qBAAAA;AAC1B,UAAMC,YAAYC,iBAAiB;MAAEvB;MAAMiB;MAAQL;MAAUQ;MAAmBhB;IAAS,CAAA;AAEzF,QAAI,CAACkB,WAAW;AACd,aAAO;IACT;AAEA,WACE,sBAAA,cAACE,UAAUC,SAAO;MAACC,SAAS,CAAC,CAACzB;MAAa0B,YAAW;OACnD,CAAC,CAAC1B,eAAe,sBAAA,cAAC2B,SAAAA;MAAQ5B;MAAYC;QACvC,sBAAA,cAAC4B,KAAKC,MAAI;MAAC9B;MAAYsB;OACrB,sBAAA,cAACO,KAAKE,QAAM,IAAA,GACZ,sBAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACJ,KAAKK,QAAM;MAAE,GAAGhB;MAAWiB,SAAAA;MAAQlB,QAAQA,QAAQP;MAAII;MAAgBsB,gBAAgBrB;;;;;AAKlG;AAEA,IAAA,wBAAehB;",
6
6
  "names": ["React", "Capabilities", "useCapability", "getSpace", "StackItem", "ChatContainer", "chat", "companionTo", "space", "getSpace", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "meta", "id", "value", "services", "useChatServices", "online", "setOnline", "useOnline", "preset", "chatProps", "usePresets", "blueprintRegistry", "useBlueprintRegistry", "processor", "useChatProcessor", "StackItem", "Content", "toolbar", "classNames", "Toolbar", "Chat", "Root", "Thread", "div", "className", "Prompt", "outline", "onOnlineChange"]
7
7
  }
@@ -6,7 +6,9 @@ import {
6
6
  useChatServices,
7
7
  useOnline,
8
8
  usePresets
9
- } from "./chunk-X2YUKRBE.mjs";
9
+ } from "./chunk-V44ZG7CU.mjs";
10
+ import "./chunk-QG2KT3AT.mjs";
11
+ import "./chunk-XD4CDA4R.mjs";
10
12
  import {
11
13
  meta
12
14
  } from "./chunk-VFY2JG62.mjs";
@@ -84,4 +86,4 @@ export {
84
86
  ChatDialog,
85
87
  ChatDialog_default as default
86
88
  };
87
- //# sourceMappingURL=ChatDialog-LPE653RZ.mjs.map
89
+ //# sourceMappingURL=ChatDialog-UUE3F7BT.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/ChatDialog.tsx"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { Capabilities, useCapability } from '@dxos/app-framework';\nimport { getSpace } from '@dxos/client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { ChatDialog as NaturalChatDialog } from '@dxos/react-ui-chat';\n\nimport { useBlueprintRegistry, useChatProcessor, useChatServices, useOnline, usePresets } from '../hooks';\nimport { meta } from '../meta';\nimport { type Assistant } from '../types';\n\nimport { Chat, type ChatRootProps } from './Chat';\n\nexport type ChatDialogProps = {\n chat?: Assistant.Chat;\n};\n\nexport const ChatDialog = ({ chat }: ChatDialogProps) => {\n const { t } = useTranslation(meta.id);\n\n const space = getSpace(chat);\n const settings = useCapability(Capabilities.SettingsStore).getStore<Assistant.Settings>(meta.id)?.value;\n const services = useChatServices({ space, chat });\n const [online, setOnline] = useOnline();\n const { preset, ...chatProps } = usePresets(online);\n const blueprintRegistry = useBlueprintRegistry();\n const processor = useChatProcessor({ chat, preset, services, blueprintRegistry, settings });\n\n // TODO(burdon): Refocus when open.\n const [open, setOpen] = useState(true);\n const [expanded, setExpanded] = useState(false);\n const handleEvent = useCallback<NonNullable<ChatRootProps['onEvent']>>((event) => {\n switch (event.type) {\n case 'submit':\n case 'thread-open':\n setOpen(true);\n setExpanded(true);\n break;\n case 'thread-close':\n setOpen(false);\n break;\n }\n }, []);\n\n if (!chat || !processor) {\n return null;\n }\n\n return (\n <Chat.Root chat={chat} processor={processor} onEvent={handleEvent}>\n <NaturalChatDialog.Root open={open} expanded={expanded} onOpenChange={setOpen}>\n <NaturalChatDialog.Header title={t('assistant dialog title')} />\n <NaturalChatDialog.Content>\n <Chat.Thread />\n </NaturalChatDialog.Content>\n <NaturalChatDialog.Footer classNames='p-1.5'>\n <Chat.Prompt {...chatProps} preset={preset?.id} online={online} onOnlineChange={setOnline} expandable />\n </NaturalChatDialog.Footer>\n </NaturalChatDialog.Root>\n </Chat.Root>\n );\n};\n\nexport default ChatDialog;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;AAIA,OAAOA,SAASC,aAAaC,gBAAgB;AAE7C,SAASC,cAAcC,qBAAqB;AAC5C,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,cAAcC,yBAAyB;AAYzC,IAAMC,aAAa,CAAC,EAAEC,KAAI,MAAmB;;;AAClD,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AAEpC,UAAMC,QAAQC,SAASN,IAAAA;AACvB,UAAMO,WAAWC,cAAcC,aAAaC,aAAa,EAAEC,SAA6BR,KAAKC,EAAE,GAAGQ;AAClG,UAAMC,WAAWC,gBAAgB;MAAET;MAAOL;IAAK,CAAA;AAC/C,UAAM,CAACe,QAAQC,SAAAA,IAAaC,UAAAA;AAC5B,UAAM,EAAEC,QAAQ,GAAGC,UAAAA,IAAcC,WAAWL,MAAAA;AAC5C,UAAMM,oBAAoBC,qBAAAA;AAC1B,UAAMC,YAAYC,iBAAiB;MAAExB;MAAMkB;MAAQL;MAAUQ;MAAmBd;IAAS,CAAA;AAGzF,UAAM,CAACkB,MAAMC,OAAAA,IAAWC,SAAS,IAAA;AACjC,UAAM,CAACC,UAAUC,WAAAA,IAAeF,SAAS,KAAA;AACzC,UAAMG,cAAcC,YAAmD,CAACC,UAAAA;AACtE,cAAQA,MAAMC,MAAI;QAChB,KAAK;QACL,KAAK;AACHP,kBAAQ,IAAA;AACRG,sBAAY,IAAA;AACZ;QACF,KAAK;AACHH,kBAAQ,KAAA;AACR;MACJ;IACF,GAAG,CAAA,CAAE;AAEL,QAAI,CAAC1B,QAAQ,CAACuB,WAAW;AACvB,aAAO;IACT;AAEA,WACE,sBAAA,cAACW,KAAKC,MAAI;MAACnC;MAAYuB;MAAsBa,SAASN;OACpD,sBAAA,cAACO,kBAAkBF,MAAI;MAACV;MAAYG;MAAoBU,cAAcZ;OACpE,sBAAA,cAACW,kBAAkBE,QAAM;MAACC,OAAOvC,EAAE,wBAAA;QACnC,sBAAA,cAACoC,kBAAkBI,SAAO,MACxB,sBAAA,cAACP,KAAKQ,QAAM,IAAA,CAAA,GAEd,sBAAA,cAACL,kBAAkBM,QAAM;MAACC,YAAW;OACnC,sBAAA,cAACV,KAAKW,QAAM;MAAE,GAAG1B;MAAWD,QAAQA,QAAQd;MAAIW;MAAgB+B,gBAAgB9B;MAAW+B,YAAAA;;;;;AAKrG;AAEA,IAAA,qBAAehD;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAIA,OAAOA,SAASC,aAAaC,gBAAgB;AAE7C,SAASC,cAAcC,qBAAqB;AAC5C,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,cAAcC,yBAAyB;AAYzC,IAAMC,aAAa,CAAC,EAAEC,KAAI,MAAmB;;;AAClD,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AAEpC,UAAMC,QAAQC,SAASN,IAAAA;AACvB,UAAMO,WAAWC,cAAcC,aAAaC,aAAa,EAAEC,SAA6BR,KAAKC,EAAE,GAAGQ;AAClG,UAAMC,WAAWC,gBAAgB;MAAET;MAAOL;IAAK,CAAA;AAC/C,UAAM,CAACe,QAAQC,SAAAA,IAAaC,UAAAA;AAC5B,UAAM,EAAEC,QAAQ,GAAGC,UAAAA,IAAcC,WAAWL,MAAAA;AAC5C,UAAMM,oBAAoBC,qBAAAA;AAC1B,UAAMC,YAAYC,iBAAiB;MAAExB;MAAMkB;MAAQL;MAAUQ;MAAmBd;IAAS,CAAA;AAGzF,UAAM,CAACkB,MAAMC,OAAAA,IAAWC,SAAS,IAAA;AACjC,UAAM,CAACC,UAAUC,WAAAA,IAAeF,SAAS,KAAA;AACzC,UAAMG,cAAcC,YAAmD,CAACC,UAAAA;AACtE,cAAQA,MAAMC,MAAI;QAChB,KAAK;QACL,KAAK;AACHP,kBAAQ,IAAA;AACRG,sBAAY,IAAA;AACZ;QACF,KAAK;AACHH,kBAAQ,KAAA;AACR;MACJ;IACF,GAAG,CAAA,CAAE;AAEL,QAAI,CAAC1B,QAAQ,CAACuB,WAAW;AACvB,aAAO;IACT;AAEA,WACE,sBAAA,cAACW,KAAKC,MAAI;MAACnC;MAAYuB;MAAsBa,SAASN;OACpD,sBAAA,cAACO,kBAAkBF,MAAI;MAACV;MAAYG;MAAoBU,cAAcZ;OACpE,sBAAA,cAACW,kBAAkBE,QAAM;MAACC,OAAOvC,EAAE,wBAAA;QACnC,sBAAA,cAACoC,kBAAkBI,SAAO,MACxB,sBAAA,cAACP,KAAKQ,QAAM,IAAA,CAAA,GAEd,sBAAA,cAACL,kBAAkBM,QAAM;MAACC,YAAW;OACnC,sBAAA,cAACV,KAAKW,QAAM;MAAE,GAAG1B;MAAWD,QAAQA,QAAQd;MAAIW;MAAgB+B,gBAAgB9B;MAAW+B,YAAAA;;;;;AAKrG;AAEA,IAAA,qBAAehD;",
6
6
  "names": ["React", "useCallback", "useState", "Capabilities", "useCapability", "getSpace", "useTranslation", "ChatDialog", "NaturalChatDialog", "ChatDialog", "chat", "t", "useTranslation", "meta", "id", "space", "getSpace", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "value", "services", "useChatServices", "online", "setOnline", "useOnline", "preset", "chatProps", "usePresets", "blueprintRegistry", "useBlueprintRegistry", "processor", "useChatProcessor", "open", "setOpen", "useState", "expanded", "setExpanded", "handleEvent", "useCallback", "event", "type", "Chat", "Root", "onEvent", "NaturalChatDialog", "onOpenChange", "Header", "title", "Content", "Thread", "Footer", "classNames", "Prompt", "onOnlineChange", "expandable"]
7
7
  }
@@ -1,19 +1,23 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ AssistantCapabilities
4
+ } from "./chunk-XD4CDA4R.mjs";
5
+ import "./chunk-VFY2JG62.mjs";
2
6
  import "./chunk-HSLMI22Q.mjs";
3
7
 
4
8
  // src/capabilities/ai-service.ts
5
9
  import { Effect, Layer } from "effect";
6
10
  import { AiServiceRouter } from "@dxos/ai";
7
- import { Capabilities, contributes } from "@dxos/app-framework";
8
- var ai_service_default = ((context) => {
9
- const resolvers = context.getCapabilities(Capabilities.AiModelResolver);
11
+ import { contributes } from "@dxos/app-framework";
12
+ var ai_service_default = (context) => {
13
+ const resolvers = context.getCapabilities(AssistantCapabilities.AiModelResolver);
10
14
  const combinedLayer = resolvers.reduce((acc, resolver) => resolver.pipe(Layer.provide(acc)), AiServiceRouter.AiModelResolver.fromModelMap(Effect.succeed({})));
11
15
  return [
12
16
  // TODO(dmaretskyi): Read config from settings.
13
- contributes(Capabilities.AiServiceLayer, AiServiceRouter.AiModelResolver.buildAiService.pipe(Layer.provide(combinedLayer)))
17
+ contributes(AssistantCapabilities.AiServiceLayer, AiServiceRouter.AiModelResolver.buildAiService.pipe(Layer.provide(combinedLayer)))
14
18
  ];
15
- });
19
+ };
16
20
  export {
17
21
  ai_service_default as default
18
22
  };
19
- //# sourceMappingURL=ai-service-I5JU4JN2.mjs.map
23
+ //# sourceMappingURL=ai-service-XUMZVFCK.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/ai-service.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Effect, Layer } from 'effect';\n\nimport { AiServiceRouter } from '@dxos/ai';\nimport { type PluginContext, contributes } from '@dxos/app-framework';\n\nimport { AssistantCapabilities } from './capabilities';\n\nexport default (context: PluginContext) => {\n const resolvers = context.getCapabilities(AssistantCapabilities.AiModelResolver);\n\n // TODO(dmaretskyi): Extract function to reduce them.\n const combinedLayer = resolvers.reduce(\n (acc, resolver) => resolver.pipe(Layer.provide(acc)),\n AiServiceRouter.AiModelResolver.fromModelMap(Effect.succeed({})), // Empty resolver as fallback.\n );\n\n return [\n // TODO(dmaretskyi): Read config from settings.\n contributes(\n AssistantCapabilities.AiServiceLayer,\n AiServiceRouter.AiModelResolver.buildAiService.pipe(Layer.provide(combinedLayer)),\n ),\n ];\n};\n"],
5
+ "mappings": ";;;;;;;;AAIA,SAASA,QAAQC,aAAa;AAE9B,SAASC,uBAAuB;AAChC,SAA6BC,mBAAmB;AAIhD,IAAA,qBAAe,CAACC,YAAAA;AACd,QAAMC,YAAYD,QAAQE,gBAAgBC,sBAAsBC,eAAe;AAG/E,QAAMC,gBAAgBJ,UAAUK,OAC9B,CAACC,KAAKC,aAAaA,SAASC,KAAKC,MAAMC,QAAQJ,GAAAA,CAAAA,GAC/CK,gBAAgBR,gBAAgBS,aAAaC,OAAOC,QAAQ,CAAC,CAAA,CAAA,CAAA;AAG/D,SAAO;;IAELC,YACEb,sBAAsBc,gBACtBL,gBAAgBR,gBAAgBc,eAAeT,KAAKC,MAAMC,QAAQN,aAAAA,CAAAA,CAAAA;;AAGxE;",
6
+ "names": ["Effect", "Layer", "AiServiceRouter", "contributes", "context", "resolvers", "getCapabilities", "AssistantCapabilities", "AiModelResolver", "combinedLayer", "reduce", "acc", "resolver", "pipe", "Layer", "provide", "AiServiceRouter", "fromModelMap", "Effect", "succeed", "contributes", "AiServiceLayer", "buildAiService"]
7
+ }
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-7YOGZI66.mjs";
6
6
  import {
7
7
  AssistantCapabilities
8
- } from "./chunk-FHRJMZ7L.mjs";
8
+ } from "./chunk-XD4CDA4R.mjs";
9
9
  import {
10
10
  ASSISTANT_DIALOG,
11
11
  meta
@@ -26,7 +26,7 @@ import { getActiveSpace } from "@dxos/plugin-space";
26
26
  import { SpaceAction } from "@dxos/plugin-space/types";
27
27
  import { Query, fullyQualifiedId } from "@dxos/react-client/echo";
28
28
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-assistant/src/capabilities/app-graph-builder.ts";
29
- var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphBuilder, [
29
+ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
30
30
  createExtension({
31
31
  id: `${meta.id}/assistant`,
32
32
  actions: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === ROOT_ID ? Option.some(node2) : Option.none()), Option.map(() => [
@@ -122,7 +122,7 @@ var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphB
122
122
  }
123
123
  ]), Option.getOrElse(() => [])))
124
124
  })
125
- ]));
125
+ ]);
126
126
  var getOrCreateChat = async (dispatch, space) => {
127
127
  const { objects: allChats } = await space.db.query(Query.type(Assistant_exports.Chat)).run();
128
128
  const { objects: relatedChats } = await space.db.query(Query.type(Assistant_exports.Chat).sourceOf(Assistant_exports.CompanionTo).source()).run();
@@ -151,4 +151,4 @@ var getOrCreateChat = async (dispatch, space) => {
151
151
  export {
152
152
  app_graph_builder_default as default
153
153
  };
154
- //# sourceMappingURL=app-graph-builder-EMR5JF6Z.mjs.map
154
+ //# sourceMappingURL=app-graph-builder-NM3JDLQ2.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport {\n Capabilities,\n LayoutAction,\n type PluginContext,\n type PromiseIntentDispatcher,\n contributes,\n createIntent,\n} from '@dxos/app-framework';\nimport { Sequence } from '@dxos/conductor';\nimport { Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { ROOT_ID, createExtension, rxFromSignal } from '@dxos/plugin-graph';\nimport { getActiveSpace } from '@dxos/plugin-space';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { Query, type Space, fullyQualifiedId } from '@dxos/react-client/echo';\n\nimport { ASSISTANT_DIALOG, meta } from '../meta';\nimport { Assistant, AssistantAction } from '../types';\n\nimport { AssistantCapabilities } from './capabilities';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/assistant`,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n Option.map(() => [\n {\n id: `${LayoutAction.UpdateDialog._tag}/assistant/open`,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const client = context.getCapability(ClientCapabilities.Client);\n const space = getActiveSpace(context) ?? client.spaces.default;\n const chat = await getOrCreateChat(dispatch, space);\n if (!chat) {\n return;\n }\n\n await dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: ASSISTANT_DIALOG,\n options: {\n state: true,\n blockAlign: 'end',\n props: {\n chat,\n },\n },\n }),\n );\n },\n properties: {\n label: ['open assistant label', { ns: meta.id }],\n icon: 'ph--sparkle--regular',\n disposition: 'pin-end',\n position: 'hoist',\n keyBinding: {\n macos: 'shift+meta+k',\n windows: 'shift+ctrl+k',\n },\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n\n createExtension({\n id: `${meta.id}/companion-chat`,\n connector: (node) => {\n return Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (Obj.isObject(node.data) ? Option.some(node.data) : Option.none())),\n Option.map((object) => {\n const currentChat = get(\n rxFromSignal(\n () => context.getCapability(AssistantCapabilities.State).currentChat[fullyQualifiedId(object)],\n ),\n );\n\n return [\n {\n id: [fullyQualifiedId(object), 'assistant-chat'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: currentChat ?? 'assistant-chat',\n properties: {\n label: ['assistant chat label', { ns: meta.id }],\n icon: 'ph--sparkle--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ];\n }),\n Option.getOrElse(() => []),\n ),\n );\n },\n }),\n\n createExtension({\n id: `${meta.id}/sequence-logs`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (Obj.instanceOf(Sequence, node.data) ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: [node.id, 'logs'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'logs',\n properties: {\n label: ['sequence logs label', { ns: meta.id }],\n icon: 'ph--clock-countdown--regular',\n disposition: 'hidden',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n\n// TODO(burdon): Factor out.\nconst getOrCreateChat = async (\n dispatch: PromiseIntentDispatcher,\n space: Space,\n): Promise<Assistant.Chat | undefined> => {\n // TODO(wittjosiah): This should be possible with a single query.\n const { objects: allChats } = await space.db.query(Query.type(Assistant.Chat)).run();\n const { objects: relatedChats } = await space.db\n .query(Query.type(Assistant.Chat).sourceOf(Assistant.CompanionTo).source())\n .run();\n\n const chats = allChats.filter((chat) => !relatedChats.includes(chat));\n if (chats.length > 0) {\n return chats.at(-1);\n }\n\n const { data } = await dispatch(createIntent(AssistantAction.CreateChat, { space }));\n invariant(Obj.instanceOf(Assistant.Chat, data?.object));\n await dispatch(createIntent(SpaceAction.AddObject, { target: space, object: data.object }));\n return data.object;\n};\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["Rx", "Option", "pipe", "Capabilities", "LayoutAction", "contributes", "createIntent", "Sequence", "Obj", "invariant", "ClientCapabilities", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "ROOT_ID", "createExtension", "rxFromSignal", "getActiveSpace", "SpaceAction", "Query", "fullyQualifiedId", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "actions", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "ROOT_ID", "some", "none", "map", "LayoutAction", "UpdateDialog", "_tag", "data", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "client", "ClientCapabilities", "Client", "space", "getActiveSpace", "spaces", "default", "chat", "getOrCreateChat", "createIntent", "part", "subject", "ASSISTANT_DIALOG", "options", "state", "blockAlign", "props", "properties", "label", "ns", "icon", "disposition", "position", "keyBinding", "macos", "windows", "getOrElse", "connector", "Obj", "isObject", "object", "currentChat", "rxFromSignal", "AssistantCapabilities", "State", "fullyQualifiedId", "join", "ATTENDABLE_PATH_SEPARATOR", "type", "PLANK_COMPANION_TYPE", "instanceOf", "Sequence", "objects", "allChats", "db", "query", "Query", "Assistant", "Chat", "run", "relatedChats", "sourceOf", "CompanionTo", "source", "chats", "filter", "includes", "length", "at", "AssistantAction", "CreateChat", "invariant", "SpaceAction", "AddObject", "target"]
7
7
  }
@@ -3,11 +3,11 @@ import {
3
3
  BLUEPRINT_KEY,
4
4
  blueprint_definition_default,
5
5
  createBlueprint
6
- } from "./chunk-5MYWJPYA.mjs";
6
+ } from "./chunk-QG2KT3AT.mjs";
7
7
  import "./chunk-HSLMI22Q.mjs";
8
8
  export {
9
9
  BLUEPRINT_KEY,
10
10
  createBlueprint,
11
11
  blueprint_definition_default as default
12
12
  };
13
- //# sourceMappingURL=blueprint-definition-B6UDX5U3.mjs.map
13
+ //# sourceMappingURL=blueprint-definition-4E6XTLVN.mjs.map
@@ -8,7 +8,7 @@ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
8
8
  import React from "react";
9
9
  import { createDocAccessor } from "@dxos/react-client/echo";
10
10
  import { useThemeContext, useTranslation } from "@dxos/react-ui";
11
- import { createBasicExtensions, createDataExtensions, createMarkdownExtensions, createThemeExtensions, decorateMarkdown, useTextEditor } from "@dxos/react-ui-editor";
11
+ import { createBasicExtensions, createDataExtensions, createMarkdownExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
12
12
  import { mx } from "@dxos/react-ui-theme";
13
13
  import { isNotFalsy } from "@dxos/util";
14
14
 
@@ -193,8 +193,8 @@ var TemplateEditor = ({ id, classNames, template }) => {
193
193
  createThemeExtensions({
194
194
  themeMode
195
195
  }),
196
+ // Extend markdown with handlebars support.
196
197
  createMarkdownExtensions(),
197
- decorateMarkdown(),
198
198
  handlebars()
199
199
  ].filter(isNotFalsy)
200
200
  };
@@ -214,4 +214,4 @@ var TemplateEditor = ({ id, classNames, template }) => {
214
214
  export {
215
215
  TemplateEditor
216
216
  };
217
- //# sourceMappingURL=chunk-GCNF3CQU.mjs.map
217
+ //# sourceMappingURL=chunk-LVTG5JTW.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/TemplateEditor/TemplateEditor.tsx", "../../../src/components/TemplateEditor/handlebars-extension.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Template } from '@dxos/blueprints';\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createMarkdownExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { meta } from '../../meta';\n\nimport { handlebars } from './handlebars-extension';\n\nexport type TemplateEditorProps = ThemedClassName<{\n id: string;\n template: Template.Template;\n}>;\n\nexport const TemplateEditor = ({ id, classNames, template }: TemplateEditorProps) => {\n const { t } = useTranslation(meta.id);\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor(() => {\n const text = template.source?.target;\n if (!text) {\n return {};\n }\n\n return {\n initialValue: text.content ?? '',\n extensions: [\n createDataExtensions({ id, text: createDocAccessor(text, ['content']) }),\n createBasicExtensions({\n bracketMatching: false,\n lineNumbers: true,\n lineWrapping: true,\n placeholder: t('template placeholder'),\n }),\n createThemeExtensions({ themeMode }),\n\n // Extend markdown with handlebars support.\n createMarkdownExtensions(),\n handlebars(),\n ].filter(isNotFalsy),\n };\n }, [themeMode, template.source?.target]);\n\n return <div ref={parentRef} className={mx('bs-full overflow-hidden', classNames)} />;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n type CompletionContext,\n type CompletionResult,\n autocompletion,\n completionKeymap,\n} from '@codemirror/autocomplete';\nimport { type Extension } from '@codemirror/state';\nimport { Decoration, type DecorationSet, type EditorView, ViewPlugin, type ViewUpdate, keymap } from '@codemirror/view';\n\nexport type HandlebarsOptions = {};\n\n/**\n * Simple Handlebars plugin for CodeMirror.\n * Supports:\n * - Comments: {{! comment }}\n * - Commands: {{#command}} {{/command}}\n * - Variables: {{var}}\n * - Commands with variables: {{#each items}} {{/each}}\n */\nexport const handlebars = (_: HandlebarsOptions = {}): Extension => {\n return [\n handlebarsHighlightPlugin,\n autocompletion({\n activateOnTyping: true,\n aboveCursor: true,\n closeOnBlur: true,\n override: [handlebarsCompletions],\n }),\n keymap.of(completionKeymap),\n ];\n};\n\nconst regex = {\n comment: /\\{\\{!\\s*[^}]*\\}\\}/g,\n brackets: /\\{\\{[^}]*\\}\\}/g,\n command: /\\{\\{[#/]([^}]+)\\}\\}/g,\n var: /\\{\\{(?!\\s*!)(\\w[^}]*)\\}\\}/g,\n};\n\n/**\n * ViewPlugin that decorates Handlebars syntax.\n */\nconst handlebarsHighlightPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = this.buildDecorations(view);\n }\n\n buildDecorations(view: EditorView) {\n const widgets: any[] = [];\n\n for (const { from, to } of view.visibleRanges) {\n const text = view.state.doc.sliceString(from, to);\n\n // Match comments: {{! comment }}\n {\n let match;\n while ((match = regex.comment.exec(text)) !== null) {\n const start = from + match.index;\n const end = start + match[0].length;\n widgets.push(Decoration.mark({ class: 'text-subdued' }).range(start, end));\n }\n }\n\n // Match brackets: {{ and }}\n {\n let match;\n while ((match = regex.brackets.exec(text)) !== null) {\n const start = from + match.index;\n const end = start + match[0].length;\n widgets.push(Decoration.mark({ class: 'text-subdued' }).range(start, end));\n }\n }\n\n // Match commands: {{#command}} and {{/command}}\n {\n let match;\n while ((match = regex.command.exec(text)) !== null) {\n const start = from + match.index + 2;\n let end = start + match[0].length - 4;\n const text = view.state.doc.sliceString(start, end);\n const parts = text.split(/\\s+/);\n if (parts.length > 1) {\n const idx = start + parts[0].length;\n widgets.push(Decoration.mark({ class: 'text-greenText' }).range(idx, end));\n end = idx;\n }\n widgets.push(Decoration.mark({ class: 'text-blueText' }).range(start, end));\n }\n }\n\n // Match variables: {{var}}\n {\n let match;\n while ((match = regex.var.exec(text)) !== null) {\n const start = from + match.index + 2;\n const end = start + match[0].length - 4;\n widgets.push(Decoration.mark({ class: 'text-greenText' }).range(start, end));\n }\n }\n }\n\n // Sort decorations by position to avoid \"Ranges must be added sorted\" error.\n widgets.sort((a, b) => a.from - b.from || a.startSide - b.startSide);\n return Decoration.set(widgets);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.viewportChanged) {\n this.decorations = this.buildDecorations(update.view);\n }\n }\n },\n {\n decorations: (v) => v.decorations,\n },\n);\n\n// TODO(burdon): Pass in variables.\nconst variables = ['this'];\nconst commands = ['this', 'each', 'if', 'unless', 'with'];\n\n/**\n * Provides completions for Handlebars variables.\n */\nfunction handlebarsCompletions(context: CompletionContext): CompletionResult | null {\n const match = context.matchBefore(/\\{\\{[^}]*/);\n if (!match || match.from === match.to) {\n return null;\n }\n\n let type = 'variable';\n let text = match.text.slice(2);\n let from = match.from + 2;\n let matches = [];\n if (text.startsWith('#') || text.startsWith('/')) {\n const idx = text.lastIndexOf(' ');\n if (idx !== -1) {\n type = 'variable';\n matches = variables;\n text = text.slice(idx + 1);\n from += idx + 1;\n } else {\n type = 'command';\n text = text.slice(1);\n matches = commands;\n from += 1;\n }\n } else {\n type = 'variable';\n matches = variables;\n }\n\n const options = matches.filter((name) => name.startsWith(text)).map((name) => ({ type, label: name }));\n return {\n from,\n options,\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "createDocAccessor", "useThemeContext", "useTranslation", "createBasicExtensions", "createDataExtensions", "createMarkdownExtensions", "createThemeExtensions", "useTextEditor", "mx", "isNotFalsy", "autocompletion", "completionKeymap", "Decoration", "ViewPlugin", "keymap", "handlebars", "_", "handlebarsHighlightPlugin", "autocompletion", "activateOnTyping", "aboveCursor", "closeOnBlur", "override", "handlebarsCompletions", "keymap", "of", "completionKeymap", "regex", "comment", "brackets", "command", "var", "ViewPlugin", "fromClass", "buildDecorations", "view", "widgets", "from", "to", "visibleRanges", "text", "state", "doc", "sliceString", "match", "exec", "start", "index", "end", "length", "push", "Decoration", "mark", "class", "range", "parts", "split", "idx", "sort", "a", "b", "startSide", "set", "update", "docChanged", "viewportChanged", "decorations", "v", "variables", "commands", "context", "matchBefore", "type", "slice", "matches", "startsWith", "lastIndexOf", "options", "filter", "name", "map", "label", "TemplateEditor", "id", "classNames", "template", "t", "useTranslation", "meta", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "text", "source", "target", "initialValue", "content", "extensions", "createDataExtensions", "createDocAccessor", "createBasicExtensions", "bracketMatching", "lineNumbers", "lineWrapping", "placeholder", "createThemeExtensions", "createMarkdownExtensions", "handlebars", "filter", "isNotFalsy", "div", "ref", "className", "mx"]
7
+ }
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';const require = createRequire(import
3
3
  // src/capabilities/blueprint-definition.ts
4
4
  import { Capabilities, contributes } from "@dxos/app-framework";
5
5
  import { templates } from "@dxos/assistant";
6
- import { DISCORD_BLUEPRINT, LINEAR_BLUEPRINT, RESEARCH_BLUEPRINT, agent, createResearchNote, fetchDiscordMessages, research, syncLinearIssues } from "@dxos/assistant-testing";
6
+ import { DISCORD_BLUEPRINT, LINEAR_BLUEPRINT, RESEARCH_BLUEPRINT, fetchDiscordMessages, research, syncLinearIssues } from "@dxos/assistant-testing";
7
7
  import { Blueprint } from "@dxos/blueprints";
8
8
 
9
9
  // src/functions/analysis.ts
@@ -137,14 +137,10 @@ var createBlueprint = () => Blueprint.make({
137
137
  instructions: templates.system
138
138
  });
139
139
  var blueprint = createBlueprint();
140
- var blueprint_definition_default = (() => [
140
+ var blueprint_definition_default = () => [
141
141
  contributes(Capabilities.Functions, functions),
142
142
  contributes(Capabilities.Functions, [
143
- agent
144
- ]),
145
- contributes(Capabilities.Functions, [
146
- research,
147
- createResearchNote
143
+ research
148
144
  ]),
149
145
  contributes(Capabilities.BlueprintDefinition, blueprint),
150
146
  contributes(Capabilities.BlueprintDefinition, RESEARCH_BLUEPRINT),
@@ -157,11 +153,11 @@ var blueprint_definition_default = (() => [
157
153
  ]),
158
154
  contributes(Capabilities.BlueprintDefinition, LINEAR_BLUEPRINT),
159
155
  contributes(Capabilities.BlueprintDefinition, DISCORD_BLUEPRINT)
160
- ]);
156
+ ];
161
157
 
162
158
  export {
163
159
  BLUEPRINT_KEY,
164
160
  createBlueprint,
165
161
  blueprint_definition_default
166
162
  };
167
- //# sourceMappingURL=chunk-5MYWJPYA.mjs.map
163
+ //# sourceMappingURL=chunk-QG2KT3AT.mjs.map