@dxos/plugin-automation 0.7.4 → 0.7.5-labs.5f04cf6

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 (201) hide show
  1. package/dist/lib/browser/{AssistantPanel-N3QSALKY.mjs → AssistantPanel-KO6DZBTU.mjs} +10 -11
  2. package/dist/lib/browser/AssistantPanel-KO6DZBTU.mjs.map +7 -0
  3. package/dist/lib/browser/AutomationPanel-BMLM533Z.mjs +131 -0
  4. package/dist/lib/browser/AutomationPanel-BMLM533Z.mjs.map +7 -0
  5. package/dist/lib/browser/ChatContainer-SIAJFRFF.mjs +300 -0
  6. package/dist/lib/browser/ChatContainer-SIAJFRFF.mjs.map +7 -0
  7. package/dist/lib/browser/ai-client-6CRYUC6D.mjs +22 -0
  8. package/dist/lib/browser/ai-client-6CRYUC6D.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-builder-IJTTULDP.mjs +131 -0
  10. package/dist/lib/browser/app-graph-builder-IJTTULDP.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-7KB4UMXO.mjs → chunk-C3VRGDR6.mjs} +30 -4
  12. package/dist/lib/browser/chunk-C3VRGDR6.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-EKJVAFT2.mjs +226 -0
  14. package/dist/lib/browser/chunk-EKJVAFT2.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-X5KMOH3I.mjs → chunk-HKX3D3ZP.mjs} +3 -3
  16. package/dist/lib/browser/chunk-HKX3D3ZP.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-HZ4TA7HY.mjs +15 -0
  18. package/dist/lib/browser/chunk-HZ4TA7HY.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-JSNPW6JF.mjs +14 -0
  20. package/dist/lib/browser/chunk-JSNPW6JF.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-KPSDH6XZ.mjs +118 -0
  22. package/dist/lib/browser/chunk-KPSDH6XZ.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-YZF3SDZL.mjs +139 -0
  24. package/dist/lib/browser/chunk-YZF3SDZL.mjs.map +7 -0
  25. package/dist/lib/browser/index.mjs +143 -249
  26. package/dist/lib/browser/index.mjs.map +4 -4
  27. package/dist/lib/browser/intent-resolver-AHDQ3KQP.mjs +24 -0
  28. package/dist/lib/browser/intent-resolver-AHDQ3KQP.mjs.map +7 -0
  29. package/dist/lib/browser/meta.json +1 -1
  30. package/dist/lib/browser/react-surface-IGMBLSV7.mjs +49 -0
  31. package/dist/lib/browser/react-surface-IGMBLSV7.mjs.map +7 -0
  32. package/dist/lib/browser/types/index.mjs +6 -3
  33. package/dist/lib/node/{AssistantPanel-RIA4TI3B.cjs → AssistantPanel-PPFS2HKK.cjs} +20 -21
  34. package/dist/lib/node/AssistantPanel-PPFS2HKK.cjs.map +7 -0
  35. package/dist/lib/node/{AutomationPanel-HZS5WKI5.cjs → AutomationPanel-RXJDVLCF.cjs} +52 -72
  36. package/dist/lib/node/AutomationPanel-RXJDVLCF.cjs.map +7 -0
  37. package/dist/lib/node/ChatContainer-GS2SC5OG.cjs +318 -0
  38. package/dist/lib/node/ChatContainer-GS2SC5OG.cjs.map +7 -0
  39. package/dist/lib/node/ai-client-A3RRU55B.cjs +38 -0
  40. package/dist/lib/node/ai-client-A3RRU55B.cjs.map +7 -0
  41. package/dist/lib/node/app-graph-builder-MF5M4QRS.cjs +147 -0
  42. package/dist/lib/node/app-graph-builder-MF5M4QRS.cjs.map +7 -0
  43. package/dist/lib/node/{chunk-DTJ7XVO2.cjs → chunk-5VF5JKUN.cjs} +7 -7
  44. package/dist/lib/node/chunk-5VF5JKUN.cjs.map +7 -0
  45. package/dist/lib/node/{chunk-CUCUWUAF.cjs → chunk-BUQOZA4N.cjs} +32 -8
  46. package/dist/lib/node/chunk-BUQOZA4N.cjs.map +7 -0
  47. package/dist/lib/node/chunk-DNLBVFR7.cjs +147 -0
  48. package/dist/lib/node/chunk-DNLBVFR7.cjs.map +7 -0
  49. package/dist/lib/node/chunk-TWDGP26W.cjs +172 -0
  50. package/dist/lib/node/chunk-TWDGP26W.cjs.map +7 -0
  51. package/dist/lib/node/chunk-VEGLN4YN.cjs +250 -0
  52. package/dist/lib/node/chunk-VEGLN4YN.cjs.map +7 -0
  53. package/dist/lib/node/chunk-Z2YFE5SJ.cjs +49 -0
  54. package/dist/lib/node/chunk-Z2YFE5SJ.cjs.map +7 -0
  55. package/dist/lib/node/{meta.cjs → chunk-ZS5RZ7RM.cjs} +12 -8
  56. package/dist/lib/node/chunk-ZS5RZ7RM.cjs.map +7 -0
  57. package/dist/lib/node/index.cjs +159 -279
  58. package/dist/lib/node/index.cjs.map +4 -4
  59. package/dist/lib/node/intent-resolver-TBHYXBDI.cjs +39 -0
  60. package/dist/lib/node/intent-resolver-TBHYXBDI.cjs.map +7 -0
  61. package/dist/lib/node/meta.json +1 -1
  62. package/dist/lib/node/react-surface-BVUZMKYS.cjs +69 -0
  63. package/dist/lib/node/react-surface-BVUZMKYS.cjs.map +7 -0
  64. package/dist/lib/node/types/index.cjs +10 -7
  65. package/dist/lib/node/types/index.cjs.map +2 -2
  66. package/dist/lib/node-esm/{AssistantPanel-72YH43CH.mjs → AssistantPanel-XSSKKCJY.mjs} +10 -11
  67. package/dist/lib/node-esm/AssistantPanel-XSSKKCJY.mjs.map +7 -0
  68. package/dist/lib/node-esm/AutomationPanel-GQZZ4UBI.mjs +132 -0
  69. package/dist/lib/node-esm/AutomationPanel-GQZZ4UBI.mjs.map +7 -0
  70. package/dist/lib/node-esm/ChatContainer-57ILGC3R.mjs +301 -0
  71. package/dist/lib/node-esm/ChatContainer-57ILGC3R.mjs.map +7 -0
  72. package/dist/lib/node-esm/ai-client-2GBZRHBA.mjs +23 -0
  73. package/dist/lib/node-esm/ai-client-2GBZRHBA.mjs.map +7 -0
  74. package/dist/lib/node-esm/app-graph-builder-5N7OK23B.mjs +132 -0
  75. package/dist/lib/node-esm/app-graph-builder-5N7OK23B.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-5QUXIXNB.mjs +227 -0
  77. package/dist/lib/node-esm/chunk-5QUXIXNB.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-ICHNUP5M.mjs +119 -0
  79. package/dist/lib/node-esm/chunk-ICHNUP5M.mjs.map +7 -0
  80. package/dist/lib/node-esm/chunk-ISYLEDVU.mjs +16 -0
  81. package/dist/lib/node-esm/chunk-ISYLEDVU.mjs.map +7 -0
  82. package/dist/lib/node-esm/{chunk-23LY7DYS.mjs → chunk-JCYVS5GG.mjs} +29 -4
  83. package/dist/lib/node-esm/chunk-JCYVS5GG.mjs.map +7 -0
  84. package/dist/lib/node-esm/chunk-L2B6VGMG.mjs +16 -0
  85. package/dist/lib/node-esm/chunk-L2B6VGMG.mjs.map +7 -0
  86. package/dist/lib/node-esm/chunk-U7HXYMPZ.mjs +141 -0
  87. package/dist/lib/node-esm/chunk-U7HXYMPZ.mjs.map +7 -0
  88. package/dist/lib/node-esm/{chunk-HNOBZHWK.mjs → chunk-X3LPRWIL.mjs} +3 -3
  89. package/dist/lib/node-esm/chunk-X3LPRWIL.mjs.map +7 -0
  90. package/dist/lib/node-esm/index.mjs +143 -249
  91. package/dist/lib/node-esm/index.mjs.map +4 -4
  92. package/dist/lib/node-esm/intent-resolver-DPJJHFGK.mjs +25 -0
  93. package/dist/lib/node-esm/intent-resolver-DPJJHFGK.mjs.map +7 -0
  94. package/dist/lib/node-esm/meta.json +1 -1
  95. package/dist/lib/node-esm/react-surface-77S6XJOM.mjs +50 -0
  96. package/dist/lib/node-esm/react-surface-77S6XJOM.mjs.map +7 -0
  97. package/dist/lib/node-esm/types/index.mjs +6 -3
  98. package/dist/types/src/AutomationPlugin.d.ts +1 -3
  99. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  100. package/dist/types/src/artifacts.stories.d.ts +30 -0
  101. package/dist/types/src/artifacts.stories.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/ai-client.d.ts +5 -0
  103. package/dist/types/src/capabilities/ai-client.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/app-graph-builder.d.ts +180 -0
  105. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  106. package/dist/types/src/capabilities/capabilities.d.ts +5 -0
  107. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/index.d.ts +182 -0
  109. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  111. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  112. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  113. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  114. package/dist/types/src/components/AssistantPanel/AssistantPanel.d.ts.map +1 -1
  115. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +1 -1
  116. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  117. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  118. package/dist/types/src/components/ChatContainer.d.ts +8 -0
  119. package/dist/types/src/components/ChatContainer.d.ts.map +1 -0
  120. package/dist/types/src/components/Thread/Thread.d.ts +14 -0
  121. package/dist/types/src/components/Thread/Thread.d.ts.map +1 -0
  122. package/dist/types/src/components/Thread/Thread.stories.d.ts +12 -0
  123. package/dist/types/src/components/Thread/Thread.stories.d.ts.map +1 -0
  124. package/dist/types/src/components/Thread/index.d.ts +2 -0
  125. package/dist/types/src/components/Thread/index.d.ts.map +1 -0
  126. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +1 -2
  127. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  128. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/index.d.ts +8 -1
  130. package/dist/types/src/components/index.d.ts.map +1 -1
  131. package/dist/types/src/hooks/email.d.ts.map +1 -1
  132. package/dist/types/src/hooks/index.d.ts +1 -0
  133. package/dist/types/src/hooks/index.d.ts.map +1 -1
  134. package/dist/types/src/hooks/invocation-handler.d.ts.map +1 -1
  135. package/dist/types/src/hooks/processor.d.ts +46 -0
  136. package/dist/types/src/hooks/processor.d.ts.map +1 -0
  137. package/dist/types/src/hooks/processor.test.d.ts +2 -0
  138. package/dist/types/src/hooks/processor.test.d.ts.map +1 -0
  139. package/dist/types/src/index.d.ts +1 -2
  140. package/dist/types/src/index.d.ts.map +1 -1
  141. package/dist/types/src/meta.d.ts +1 -2
  142. package/dist/types/src/meta.d.ts.map +1 -1
  143. package/dist/types/src/testing/testing.d.ts +2 -0
  144. package/dist/types/src/testing/testing.d.ts.map +1 -1
  145. package/dist/types/src/translations.d.ts +76 -0
  146. package/dist/types/src/translations.d.ts.map +1 -1
  147. package/dist/types/src/types/schema.d.ts +40 -39
  148. package/dist/types/src/types/schema.d.ts.map +1 -1
  149. package/dist/types/src/types/types.d.ts +16 -5
  150. package/dist/types/src/types/types.d.ts.map +1 -1
  151. package/dist/types/tsconfig.tsbuildinfo +1 -0
  152. package/package.json +48 -47
  153. package/src/AutomationPlugin.tsx +85 -194
  154. package/src/artifacts.stories.tsx +180 -0
  155. package/src/capabilities/ai-client.ts +19 -0
  156. package/src/capabilities/app-graph-builder.ts +127 -0
  157. package/src/capabilities/capabilities.ts +12 -0
  158. package/src/capabilities/index.ts +12 -0
  159. package/src/capabilities/intent-resolver.ts +22 -0
  160. package/src/capabilities/react-surface.tsx +34 -0
  161. package/src/components/AssistantPanel/AssistantPanel.tsx +10 -8
  162. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +1 -2
  163. package/src/components/AutomationPanel/AutomationPanel.tsx +61 -39
  164. package/src/components/ChatContainer.tsx +80 -0
  165. package/src/components/PromptEditor/PromptEditor.stories.tsx +3 -3
  166. package/src/components/Thread/Thread.stories.tsx +142 -0
  167. package/src/components/Thread/Thread.tsx +149 -0
  168. package/src/components/Thread/index.ts +5 -0
  169. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +1 -2
  170. package/src/components/TriggerEditor/TriggerEditor.tsx +83 -16
  171. package/src/components/index.ts +5 -0
  172. package/src/hooks/email.ts +2 -2
  173. package/src/hooks/index.ts +1 -0
  174. package/src/hooks/invocation-handler.ts +2 -2
  175. package/src/hooks/processor.test.ts +15 -0
  176. package/src/hooks/processor.ts +161 -0
  177. package/src/index.ts +1 -4
  178. package/src/meta.ts +1 -1
  179. package/src/testing/testing.ts +9 -2
  180. package/src/translations.ts +13 -0
  181. package/src/types/schema.ts +9 -2
  182. package/src/types/types.ts +15 -21
  183. package/dist/lib/browser/AssistantPanel-N3QSALKY.mjs.map +0 -7
  184. package/dist/lib/browser/AutomationPanel-AQMN2CQR.mjs +0 -153
  185. package/dist/lib/browser/AutomationPanel-AQMN2CQR.mjs.map +0 -7
  186. package/dist/lib/browser/chunk-7KB4UMXO.mjs.map +0 -7
  187. package/dist/lib/browser/chunk-X5KMOH3I.mjs.map +0 -7
  188. package/dist/lib/browser/meta.mjs +0 -9
  189. package/dist/lib/browser/meta.mjs.map +0 -7
  190. package/dist/lib/node/AssistantPanel-RIA4TI3B.cjs.map +0 -7
  191. package/dist/lib/node/AutomationPanel-HZS5WKI5.cjs.map +0 -7
  192. package/dist/lib/node/chunk-CUCUWUAF.cjs.map +0 -7
  193. package/dist/lib/node/chunk-DTJ7XVO2.cjs.map +0 -7
  194. package/dist/lib/node/meta.cjs.map +0 -7
  195. package/dist/lib/node-esm/AssistantPanel-72YH43CH.mjs.map +0 -7
  196. package/dist/lib/node-esm/AutomationPanel-JUHOWQWW.mjs +0 -154
  197. package/dist/lib/node-esm/AutomationPanel-JUHOWQWW.mjs.map +0 -7
  198. package/dist/lib/node-esm/chunk-23LY7DYS.mjs.map +0 -7
  199. package/dist/lib/node-esm/chunk-HNOBZHWK.mjs.map +0 -7
  200. package/dist/lib/node-esm/meta.mjs +0 -10
  201. package/dist/lib/node-esm/meta.mjs.map +0 -7
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var app_graph_builder_MF5M4QRS_exports = {};
20
+ __export(app_graph_builder_MF5M4QRS_exports, {
21
+ default: () => app_graph_builder_default
22
+ });
23
+ module.exports = __toCommonJS(app_graph_builder_MF5M4QRS_exports);
24
+ var import_chunk_5VF5JKUN = require("./chunk-5VF5JKUN.cjs");
25
+ var import_app_framework = require("@dxos/app-framework");
26
+ var import_plugin_client = require("@dxos/plugin-client");
27
+ var import_plugin_graph = require("@dxos/plugin-graph");
28
+ var import_plugin_space = require("@dxos/plugin-space");
29
+ var import_echo = require("@dxos/react-client/echo");
30
+ var app_graph_builder_default = (context) => {
31
+ const resolve = (typename) => context.requestCapabilities(import_app_framework.Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
32
+ return (0, import_app_framework.contributes)(import_app_framework.Capabilities.AppGraphBuilder, [
33
+ (0, import_plugin_graph.createExtension)({
34
+ id: `${import_chunk_5VF5JKUN.AUTOMATION_PLUGIN}/automation-for-subject`,
35
+ resolver: ({ id }) => {
36
+ if (!id.endsWith("~automation")) {
37
+ return;
38
+ }
39
+ const type = "orphan-settings-for-subject";
40
+ const icon = "ph--magic-wand--regular";
41
+ const client = context.requestCapability(import_plugin_client.ClientCapabilities.Client);
42
+ const [subjectId] = id.split("~");
43
+ const { spaceId, objectId } = (0, import_echo.parseId)(subjectId);
44
+ const spaces = (0, import_plugin_graph.toSignal)((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
45
+ const space = spaces?.find((space2) => space2.id === spaceId && space2.state.get() === import_echo.SpaceState.SPACE_READY);
46
+ if (!objectId) {
47
+ const label2 = space ? space.properties.name || [
48
+ "unnamed space label",
49
+ {
50
+ ns: import_chunk_5VF5JKUN.AUTOMATION_PLUGIN
51
+ }
52
+ ] : [
53
+ "unnamed object settings label",
54
+ {
55
+ ns: import_chunk_5VF5JKUN.AUTOMATION_PLUGIN
56
+ }
57
+ ];
58
+ return {
59
+ id,
60
+ type,
61
+ data: null,
62
+ properties: {
63
+ icon,
64
+ label: label2,
65
+ showResolvedThreads: false,
66
+ object: null,
67
+ space
68
+ }
69
+ };
70
+ }
71
+ const [object] = (0, import_plugin_space.memoizeQuery)(space, {
72
+ id: objectId
73
+ });
74
+ if (!object || !subjectId) {
75
+ return;
76
+ }
77
+ const meta = resolve((0, import_echo.getTypename)(object) ?? "");
78
+ const label = meta.label?.(object) || object.name || meta.placeholder || [
79
+ "unnamed object settings label",
80
+ {
81
+ ns: import_chunk_5VF5JKUN.AUTOMATION_PLUGIN
82
+ }
83
+ ];
84
+ return {
85
+ id,
86
+ type,
87
+ data: null,
88
+ properties: {
89
+ icon,
90
+ label,
91
+ object
92
+ }
93
+ };
94
+ }
95
+ }),
96
+ (0, import_plugin_graph.createExtension)({
97
+ id: `${import_chunk_5VF5JKUN.AUTOMATION_PLUGIN}/assistant-for-subject`,
98
+ resolver: ({ id }) => {
99
+ if (!id.endsWith("~assistant")) {
100
+ return;
101
+ }
102
+ const client = context.requestCapability(import_plugin_client.ClientCapabilities.Client);
103
+ const [subjectId] = id.split("~");
104
+ const { spaceId, objectId } = (0, import_echo.parseId)(subjectId);
105
+ const spaces = (0, import_plugin_graph.toSignal)((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
106
+ const space = spaces?.find((space2) => space2.id === spaceId && space2.state.get() === import_echo.SpaceState.SPACE_READY);
107
+ if (!objectId) {
108
+ return {
109
+ id,
110
+ type: "orphan-automation-for-subject",
111
+ data: null,
112
+ properties: {
113
+ icon: "ph--atom--regular",
114
+ label: [
115
+ "assistant panel label",
116
+ {
117
+ ns: import_chunk_5VF5JKUN.AUTOMATION_PLUGIN
118
+ }
119
+ ],
120
+ object: null,
121
+ space
122
+ }
123
+ };
124
+ }
125
+ const [object] = (0, import_plugin_space.memoizeQuery)(space, {
126
+ id: objectId
127
+ });
128
+ return {
129
+ id,
130
+ type: "orphan-automation-for-subject",
131
+ data: null,
132
+ properties: {
133
+ icon: "ph--atom--regular",
134
+ label: [
135
+ "assistant panel label",
136
+ {
137
+ ns: import_chunk_5VF5JKUN.AUTOMATION_PLUGIN
138
+ }
139
+ ],
140
+ object
141
+ }
142
+ };
143
+ }
144
+ })
145
+ ]);
146
+ };
147
+ //# sourceMappingURL=app-graph-builder-MF5M4QRS.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { createExtension, toSignal } from '@dxos/plugin-graph';\nimport { memoizeQuery } from '@dxos/plugin-space';\nimport { getTypename, parseId, SpaceState } from '@dxos/react-client/echo';\n\nimport { AUTOMATION_PLUGIN } from '../meta';\n\nexport default (context: PluginsContext) => {\n const resolve = (typename: string) =>\n context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n return contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${AUTOMATION_PLUGIN}/automation-for-subject`,\n resolver: ({ id }) => {\n if (!id.endsWith('~automation')) {\n return;\n }\n\n const type = 'orphan-settings-for-subject';\n const icon = 'ph--magic-wand--regular';\n\n const client = context.requestCapability(ClientCapabilities.Client);\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find((space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY);\n if (!objectId) {\n // TODO(burdon): Ref SPACE_PLUGIN ns.\n const label = space\n ? space.properties.name || ['unnamed space label', { ns: AUTOMATION_PLUGIN }]\n : ['unnamed object settings label', { ns: AUTOMATION_PLUGIN }];\n\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object || !subjectId) {\n return;\n }\n\n const meta = resolve(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object settings label', { ns: AUTOMATION_PLUGIN }];\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n object,\n },\n };\n },\n }),\n createExtension({\n id: `${AUTOMATION_PLUGIN}/assistant-for-subject`,\n resolver: ({ id }) => {\n // TODO(Zan): Find util (or make one). Effect schema!!\n if (!id.endsWith('~assistant')) {\n return;\n }\n\n const client = context.requestCapability(ClientCapabilities.Client);\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find((space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY);\n if (!objectId) {\n // TODO(wittjosiah): Support assistant for arbitrary subjects.\n // This is to ensure that the assistant panel is not stuck on an old object.\n return {\n id,\n type: 'orphan-automation-for-subject',\n data: null,\n properties: {\n icon: 'ph--atom--regular',\n label: ['assistant panel label', { ns: AUTOMATION_PLUGIN }],\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n\n return {\n id,\n type: 'orphan-automation-for-subject',\n data: null,\n properties: {\n icon: 'ph--atom--regular',\n label: ['assistant panel label', { ns: AUTOMATION_PLUGIN }],\n object,\n },\n };\n },\n }),\n ]);\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["context", "resolve", "typename", "requestCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "contributes", "AppGraphBuilder", "createExtension", "AUTOMATION_PLUGIN", "resolver", "endsWith", "type", "icon", "client", "requestCapability", "ClientCapabilities", "Client", "subjectId", "split", "spaceId", "objectId", "parseId", "spaces", "toSignal", "onChange", "subscribe", "unsubscribe", "get", "space", "state", "SpaceState", "SPACE_READY", "label", "properties", "name", "ns", "data", "showResolvedThreads", "object", "memoizeQuery", "meta", "getTypename", "placeholder"]
7
+ }
@@ -16,14 +16,14 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_DTJ7XVO2_exports = {};
20
- __export(chunk_DTJ7XVO2_exports, {
19
+ var chunk_5VF5JKUN_exports = {};
20
+ __export(chunk_5VF5JKUN_exports, {
21
21
  AUTOMATION_PLUGIN: () => AUTOMATION_PLUGIN,
22
- meta_default: () => meta_default
22
+ meta: () => meta
23
23
  });
24
- module.exports = __toCommonJS(chunk_DTJ7XVO2_exports);
24
+ module.exports = __toCommonJS(chunk_5VF5JKUN_exports);
25
25
  var AUTOMATION_PLUGIN = "dxos.org/plugin/automation";
26
- var meta_default = {
26
+ var meta = {
27
27
  id: AUTOMATION_PLUGIN,
28
28
  name: "Automation",
29
29
  description: "Automation workflows.",
@@ -36,6 +36,6 @@ var meta_default = {
36
36
  // Annotate the CommonJS export names for ESM import in node:
37
37
  0 && (module.exports = {
38
38
  AUTOMATION_PLUGIN,
39
- meta_default
39
+ meta
40
40
  });
41
- //# sourceMappingURL=chunk-DTJ7XVO2.cjs.map
41
+ //# sourceMappingURL=chunk-5VF5JKUN.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const AUTOMATION_PLUGIN = 'dxos.org/plugin/automation';\n\nexport const meta = {\n id: AUTOMATION_PLUGIN,\n name: 'Automation',\n description: 'Automation workflows.',\n icon: 'ph--magic-wand--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-automation',\n tags: ['experimental'],\n} satisfies PluginMeta;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,oBAAoB;AAE1B,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;AACT;",
6
+ "names": ["AUTOMATION_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags"]
7
+ }
@@ -16,16 +16,19 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_CUCUWUAF_exports = {};
20
- __export(chunk_CUCUWUAF_exports, {
19
+ var chunk_BUQOZA4N_exports = {};
20
+ __export(chunk_BUQOZA4N_exports, {
21
21
  AutomationAction: () => AutomationAction,
22
22
  ChainInputSchema: () => ChainInputSchema,
23
23
  ChainInputType: () => ChainInputType,
24
24
  ChainPromptType: () => ChainPromptType,
25
- ChainType: () => ChainType
25
+ ChainType: () => ChainType,
26
+ GptChatType: () => GptChatType
26
27
  });
27
- module.exports = __toCommonJS(chunk_CUCUWUAF_exports);
28
+ module.exports = __toCommonJS(chunk_BUQOZA4N_exports);
29
+ var import_chunk_5VF5JKUN = require("./chunk-5VF5JKUN.cjs");
28
30
  var import_echo_schema = require("@dxos/echo-schema");
31
+ var import_echo_schema2 = require("@dxos/echo-schema");
29
32
  var ChainInputType;
30
33
  (function(ChainInputType2) {
31
34
  ChainInputType2[ChainInputType2["VALUE"] = 0] = "VALUE";
@@ -56,11 +59,31 @@ var ChainType = class extends (0, import_echo_schema.TypedObject)({
56
59
  version: "0.1.0"
57
60
  })({
58
61
  name: import_echo_schema.S.optional(import_echo_schema.S.String),
59
- prompts: import_echo_schema.S.optional(import_echo_schema.S.mutable(import_echo_schema.S.Array((0, import_echo_schema.ref)(ChainPromptType))))
62
+ prompts: import_echo_schema.S.optional(import_echo_schema.S.mutable(import_echo_schema.S.Array((0, import_echo_schema.Ref)(ChainPromptType))))
63
+ }) {
64
+ };
65
+ var GptChatType = class extends (0, import_echo_schema.TypedObject)({
66
+ typename: "dxos.org/type/GptChat",
67
+ version: "0.1.0"
68
+ })({
69
+ name: import_echo_schema.S.optional(import_echo_schema.S.String),
70
+ // TODO(wittjosiah): Should be a ref to a Queue.
71
+ queue: (0, import_echo_schema.Ref)(import_echo_schema.Expando)
60
72
  }) {
61
73
  };
62
74
  var AutomationAction;
63
- /* @__PURE__ */ (function(AutomationAction2) {
75
+ (function(AutomationAction2) {
76
+ const AUTOMATION_ACTION = `${import_chunk_5VF5JKUN.AUTOMATION_PLUGIN}/action`;
77
+ class Create extends import_echo_schema2.S.TaggedClass()(`${AUTOMATION_ACTION}/create`, {
78
+ input: import_echo_schema2.S.Struct({
79
+ name: import_echo_schema2.S.optional(import_echo_schema2.S.String)
80
+ }),
81
+ output: import_echo_schema2.S.Struct({
82
+ object: GptChatType
83
+ })
84
+ }) {
85
+ }
86
+ AutomationAction2.Create = Create;
64
87
  })(AutomationAction || (AutomationAction = {}));
65
88
  // Annotate the CommonJS export names for ESM import in node:
66
89
  0 && (module.exports = {
@@ -68,6 +91,7 @@ var AutomationAction;
68
91
  ChainInputSchema,
69
92
  ChainInputType,
70
93
  ChainPromptType,
71
- ChainType
94
+ ChainType,
95
+ GptChatType
72
96
  });
73
- //# sourceMappingURL=chunk-CUCUWUAF.cjs.map
97
+ //# sourceMappingURL=chunk-BUQOZA4N.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/schema.ts", "../../../src/types/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Expando, Ref, S, TypedObject } from '@dxos/echo-schema';\n\n// TODO(burdon): Change to S.Literal (and discriminated union).\nexport enum ChainInputType {\n VALUE = 0,\n PASS_THROUGH = 1,\n RETRIEVER = 2,\n FUNCTION = 3,\n QUERY = 4,\n RESOLVER = 5,\n CONTEXT = 6,\n SCHEMA = 7,\n}\n\nexport const ChainInputSchema = S.mutable(\n S.Struct({\n name: S.String,\n type: S.optional(S.Enums(ChainInputType)),\n value: S.optional(S.String),\n }),\n);\n\nexport type ChainInput = S.Schema.Type<typeof ChainInputSchema>;\n\nexport class ChainPromptType extends TypedObject({ typename: 'dxos.org/type/ChainPrompt', version: '0.1.0' })({\n command: S.optional(S.String),\n template: S.String,\n inputs: S.optional(S.mutable(S.Array(ChainInputSchema))),\n}) {}\n\nexport class ChainType extends TypedObject({ typename: 'dxos.org/type/Chain', version: '0.1.0' })({\n name: S.optional(S.String),\n prompts: S.optional(S.mutable(S.Array(Ref(ChainPromptType)))),\n}) {}\n\n// TODO(wittjosiah): Better name.\nexport class GptChatType extends TypedObject({ typename: 'dxos.org/type/GptChat', version: '0.1.0' })({\n name: S.optional(S.String),\n // TODO(wittjosiah): Should be a ref to a Queue.\n queue: Ref(Expando),\n}) {}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\n\nimport { GptChatType } from './schema';\nimport { AUTOMATION_PLUGIN } from '../meta';\n\nexport namespace AutomationAction {\n const AUTOMATION_ACTION = `${AUTOMATION_PLUGIN}/action`;\n\n export class Create extends S.TaggedClass<Create>()(`${AUTOMATION_ACTION}/create`, {\n input: S.Struct({\n name: S.optional(S.String),\n }),\n output: S.Struct({\n object: GptChatType,\n }),\n }) {}\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,yBAA6C;ACA7C,IAAAA,sBAAkB;;UDGNC,iBAAAA;;;;;;;;;GAAAA,mBAAAA,iBAAAA,CAAAA,EAAAA;AAWL,IAAMC,mBAAmBC,qBAAEC,QAChCD,qBAAEE,OAAO;EACPC,MAAMH,qBAAEI;EACRC,MAAML,qBAAEM,SAASN,qBAAEO,MAAMT,cAAAA,CAAAA;EACzBU,OAAOR,qBAAEM,SAASN,qBAAEI,MAAM;AAC5B,CAAA,CAAA;AAKK,IAAMK,kBAAN,kBAA8BC,gCAAY;EAAEC,UAAU;EAA6BC,SAAS;AAAQ,CAAA,EAAG;EAC5GC,SAASb,qBAAEM,SAASN,qBAAEI,MAAM;EAC5BU,UAAUd,qBAAEI;EACZW,QAAQf,qBAAEM,SAASN,qBAAEC,QAAQD,qBAAEgB,MAAMjB,gBAAAA,CAAAA,CAAAA;AACvC,CAAA,EAAA;AAAI;AAEG,IAAMkB,YAAN,kBAAwBP,gCAAY;EAAEC,UAAU;EAAuBC,SAAS;AAAQ,CAAA,EAAG;EAChGT,MAAMH,qBAAEM,SAASN,qBAAEI,MAAM;EACzBc,SAASlB,qBAAEM,SAASN,qBAAEC,QAAQD,qBAAEgB,UAAMG,wBAAIV,eAAAA,CAAAA,CAAAA,CAAAA;AAC5C,CAAA,EAAA;AAAI;AAGG,IAAMW,cAAN,kBAA0BV,gCAAY;EAAEC,UAAU;EAAyBC,SAAS;AAAQ,CAAA,EAAG;EACpGT,MAAMH,qBAAEM,SAASN,qBAAEI,MAAM;;EAEzBiB,WAAOF,wBAAIG,0BAAAA;AACb,CAAA,EAAA;AAAI;;UCnCaC,mBAAAA;AACf,QAAMC,oBAAoB,GAAGC,uCAAAA;EAEtB,MAAMC,eAAe1B,oBAAAA,EAAE2B,YAAW,EAAW,GAAGH,iBAAAA,WAA4B;IACjFI,OAAO5B,oBAAAA,EAAEE,OAAO;MACdC,MAAMH,oBAAAA,EAAEM,SAASN,oBAAAA,EAAEI,MAAM;IAC3B,CAAA;IACAyB,QAAQ7B,oBAAAA,EAAEE,OAAO;MACf4B,QAAQV;IACV,CAAA;EACF,CAAA,EAAA;EAAI;oBAPSM,SAAAA;AAQf,GAXiBH,qBAAAA,mBAAAA,CAAAA,EAAAA;",
6
+ "names": ["import_echo_schema", "ChainInputType", "ChainInputSchema", "S", "mutable", "Struct", "name", "String", "type", "optional", "Enums", "value", "ChainPromptType", "TypedObject", "typename", "version", "command", "template", "inputs", "Array", "ChainType", "prompts", "Ref", "GptChatType", "queue", "Expando", "AutomationAction", "AUTOMATION_ACTION", "AUTOMATION_PLUGIN", "Create", "TaggedClass", "input", "output", "object"]
7
+ }
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var chunk_DNLBVFR7_exports = {};
30
+ __export(chunk_DNLBVFR7_exports, {
31
+ TriggerEditor: () => TriggerEditor
32
+ });
33
+ module.exports = __toCommonJS(chunk_DNLBVFR7_exports);
34
+ var import_chunk_5VF5JKUN = require("./chunk-5VF5JKUN.cjs");
35
+ var import_react = __toESM(require("react"));
36
+ var import_conductor = require("@dxos/conductor");
37
+ var import_functions = require("@dxos/functions");
38
+ var import_echo = require("@dxos/react-client/echo");
39
+ var import_react_ui = require("@dxos/react-ui");
40
+ var import_react_ui_form = require("@dxos/react-ui-form");
41
+ var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
42
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_5VF5JKUN.AUTOMATION_PLUGIN);
43
+ const functions = (0, import_echo.useQuery)(space, import_echo.Filter.schema(import_functions.FunctionType));
44
+ const workflows = (0, import_echo.useQuery)(space, import_echo.Filter.schema(import_conductor.ComputeGraph));
45
+ const scripts = (0, import_echo.useQuery)(space, import_echo.Filter.schema(import_functions.ScriptType));
46
+ const handleSave = (values) => {
47
+ onSave?.(values);
48
+ };
49
+ return /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.Form, {
50
+ schema: import_functions.FunctionTriggerSchema,
51
+ values: trigger,
52
+ onSave: handleSave,
53
+ onCancel,
54
+ Custom: {
55
+ ["function"]: (props) => /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.SelectInput, {
56
+ ...props,
57
+ options: getWorkflowOptions(workflows).concat(getFunctionOptions(scripts, functions))
58
+ }),
59
+ ["spec.type"]: (props) => /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.SelectInput, {
60
+ ...props,
61
+ options: Object.values(import_functions.TriggerKind).map((kind) => ({
62
+ value: kind,
63
+ label: t(`trigger type ${kind}`)
64
+ }))
65
+ }),
66
+ ["meta"]: (props) => {
67
+ const meta = props.getValue();
68
+ const [newMetaFieldName, setNewMetaFieldName] = (0, import_react.useState)("");
69
+ import_react.default.useEffect(() => props.onValueChange("object", {
70
+ ...meta
71
+ }), []);
72
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("div", null, props.label), [
73
+ ...Object.keys(meta)
74
+ ].map((key) => {
75
+ const compositeKey = `meta.${key}`;
76
+ return /* @__PURE__ */ import_react.default.createElement("div", {
77
+ key: compositeKey,
78
+ role: "none",
79
+ className: "flex items-center mt-2 gap-1"
80
+ }, /* @__PURE__ */ import_react.default.createElement("div", {
81
+ role: "none",
82
+ className: "flex-1"
83
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.TextInput, {
84
+ ...props,
85
+ type: "string",
86
+ label: key
87
+ })), /* @__PURE__ */ import_react.default.createElement(import_react_ui.IconButton, {
88
+ icon: "ph--trash--regular",
89
+ iconOnly: true,
90
+ classNames: "mt-6",
91
+ label: t("trigger meta remove"),
92
+ onClick: () => {
93
+ const newValues = {
94
+ ...props.getValue()
95
+ };
96
+ delete newValues[key];
97
+ props.onValueChange("object", newValues);
98
+ }
99
+ }));
100
+ }), /* @__PURE__ */ import_react.default.createElement("div", {
101
+ role: "none",
102
+ className: "flex items-center mt-2 gap-1 plb-1"
103
+ }, /* @__PURE__ */ import_react.default.createElement("div", {
104
+ role: "none",
105
+ className: "flex-1"
106
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.TextInput, {
107
+ placeholder: t("trigger meta prop name placeholder"),
108
+ value: newMetaFieldName,
109
+ onChange: (event) => setNewMetaFieldName(event.target.value)
110
+ }))), /* @__PURE__ */ import_react.default.createElement(import_react_ui.IconButton, {
111
+ icon: "ph--plus--regular",
112
+ iconOnly: true,
113
+ label: t("trigger meta add"),
114
+ onClick: () => {
115
+ if (newMetaFieldName.length) {
116
+ const meta2 = props.getValue() ?? {};
117
+ const metaWithNewProp = {
118
+ ...meta2,
119
+ [newMetaFieldName]: ""
120
+ };
121
+ setNewMetaFieldName("");
122
+ props.onValueChange("object", metaWithNewProp);
123
+ }
124
+ }
125
+ })));
126
+ }
127
+ }
128
+ });
129
+ };
130
+ var getWorkflowOptions = (graphs) => {
131
+ return graphs.map((graph) => ({
132
+ label: `compute-${graph.id}`,
133
+ value: `dxn:echo:@:${graph.id}`
134
+ }));
135
+ };
136
+ var getFunctionOptions = (scripts, functions) => {
137
+ const getLabel = (fn) => scripts.find((s) => fn.source?.target?.id === s.id)?.name ?? fn.name;
138
+ return functions.map((fn) => ({
139
+ label: getLabel(fn),
140
+ value: `dxn:worker:${fn.name}`
141
+ }));
142
+ };
143
+ // Annotate the CommonJS export names for ESM import in node:
144
+ 0 && (module.exports = {
145
+ TriggerEditor
146
+ });
147
+ //# sourceMappingURL=chunk-DNLBVFR7.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/TriggerEditor/TriggerEditor.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { ComputeGraph } from '@dxos/conductor';\nimport {\n FunctionType,\n FunctionTriggerSchema,\n type FunctionTriggerType,\n type FunctionTrigger,\n ScriptType,\n TriggerKind,\n} from '@dxos/functions';\nimport { Filter, useQuery, type Space } from '@dxos/react-client/echo';\nimport { IconButton, Input, useTranslation } from '@dxos/react-ui';\nimport { Form, SelectInput, TextInput } from '@dxos/react-ui-form';\n\nimport { AUTOMATION_PLUGIN } from '../../meta';\n\nexport type TriggerEditorProps = {\n space: Space;\n trigger: FunctionTriggerType;\n onSave?: (trigger: Omit<FunctionTrigger, 'id'>) => void;\n onCancel?: () => void;\n};\n\nexport const TriggerEditor = ({ space, trigger, onSave, onCancel }: TriggerEditorProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n\n const functions = useQuery(space, Filter.schema(FunctionType));\n const workflows = useQuery(space, Filter.schema(ComputeGraph));\n const scripts = useQuery(space, Filter.schema(ScriptType));\n\n const handleSave = (values: FunctionTriggerType) => {\n onSave?.(values);\n };\n\n return (\n <Form<FunctionTriggerType>\n schema={FunctionTriggerSchema}\n values={trigger}\n onSave={handleSave}\n onCancel={onCancel}\n Custom={{\n ['function' satisfies keyof FunctionTriggerType]: (props) => (\n <SelectInput\n {...props}\n options={getWorkflowOptions(workflows).concat(getFunctionOptions(scripts, functions))}\n />\n ),\n ['spec.type' as const]: (props) => (\n <SelectInput\n {...props}\n options={Object.values(TriggerKind).map((kind) => ({\n value: kind,\n label: t(`trigger type ${kind}`),\n }))}\n />\n ),\n ['meta' as const]: (props) => {\n const meta = props.getValue()!;\n\n const [newMetaFieldName, setNewMetaFieldName] = useState('');\n\n React.useEffect(() => props.onValueChange('object', { ...meta }), []);\n\n return (\n <>\n <div>{props.label}</div>\n {[...Object.keys(meta)].map((key) => {\n const compositeKey: any = `meta.${key}`;\n return (\n <div key={compositeKey} role='none' className='flex items-center mt-2 gap-1'>\n <div role='none' className='flex-1'>\n <TextInput {...props} type={'string'} label={key} />\n </div>\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n classNames={'mt-6'}\n label={t('trigger meta remove')}\n onClick={() => {\n const newValues: any = { ...props.getValue() };\n delete newValues[key];\n props.onValueChange('object', newValues);\n }}\n />\n </div>\n );\n })}\n <div role='none' className='flex items-center mt-2 gap-1 plb-1'>\n <div role='none' className='flex-1'>\n <Input.Root>\n <Input.TextInput\n placeholder={t('trigger meta prop name placeholder')}\n value={newMetaFieldName}\n onChange={(event) => setNewMetaFieldName(event.target.value)}\n />\n </Input.Root>\n </div>\n <IconButton\n icon='ph--plus--regular'\n iconOnly\n label={t('trigger meta add')}\n onClick={() => {\n if (newMetaFieldName.length) {\n const meta = props.getValue() ?? {};\n const metaWithNewProp = { ...meta, [newMetaFieldName]: '' };\n setNewMetaFieldName('');\n props.onValueChange('object', metaWithNewProp);\n }\n }}\n />\n </div>\n </>\n );\n },\n }}\n />\n );\n};\n\nconst getWorkflowOptions = (graphs: ComputeGraph[]) => {\n return graphs.map((graph) => ({ label: `compute-${graph.id}`, value: `dxn:echo:@:${graph.id}` }));\n};\n\nconst getFunctionOptions = (scripts: ScriptType[], functions: FunctionType[]) => {\n const getLabel = (fn: FunctionType) => scripts.find((s) => fn.source?.target?.id === s.id)?.name ?? fn.name;\n return functions.map((fn) => ({ label: getLabel(fn), value: `dxn:worker:${fn.name}` }));\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["TriggerEditor", "space", "trigger", "onSave", "onCancel", "t", "useTranslation", "AUTOMATION_PLUGIN", "functions", "useQuery", "Filter", "schema", "FunctionType", "workflows", "ComputeGraph", "scripts", "ScriptType", "handleSave", "values", "React", "Form", "FunctionTriggerSchema", "Custom", "props", "SelectInput", "options", "getWorkflowOptions", "concat", "getFunctionOptions", "Object", "TriggerKind", "map", "kind", "value", "label", "meta", "getValue", "newMetaFieldName", "setNewMetaFieldName", "useState", "useEffect", "onValueChange", "div", "keys", "key", "compositeKey", "role", "className", "TextInput", "type", "IconButton", "icon", "iconOnly", "classNames", "onClick", "newValues", "Input", "Root", "placeholder", "onChange", "event", "target", "length", "metaWithNewProp", "graphs", "graph", "id", "getLabel", "fn", "find", "s", "source", "name"]
7
+ }
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var chunk_TWDGP26W_exports = {};
30
+ __export(chunk_TWDGP26W_exports, {
31
+ Thread: () => Thread,
32
+ ThreadMessage: () => ThreadMessage
33
+ });
34
+ module.exports = __toCommonJS(chunk_TWDGP26W_exports);
35
+ var import_react = __toESM(require("react"));
36
+ var import_react_ui = require("@dxos/react-ui");
37
+ var import_react_ui_editor = require("@dxos/react-ui-editor");
38
+ var import_react_ui_sfx = require("@dxos/react-ui-sfx");
39
+ var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highlighter");
40
+ var import_react_ui_theme = require("@dxos/react-ui-theme");
41
+ var Thread = ({ messages, streaming, onSubmit }) => {
42
+ const scrollRef = (0, import_react.useRef)(null);
43
+ const scroll = () => scrollRef.current?.scrollTo({
44
+ top: scrollRef.current.scrollHeight,
45
+ behavior: "smooth"
46
+ });
47
+ const [text, setText] = (0, import_react.useState)("");
48
+ (0, import_react.useEffect)(() => scroll(), [
49
+ messages
50
+ ]);
51
+ const handleKeyDown = (0, import_react.useCallback)((ev) => {
52
+ switch (ev.key) {
53
+ case "Escape": {
54
+ setText("");
55
+ break;
56
+ }
57
+ case "Enter": {
58
+ const value = text.trim();
59
+ if (value.length > 0) {
60
+ onSubmit(value);
61
+ setText("");
62
+ scroll();
63
+ }
64
+ break;
65
+ }
66
+ }
67
+ }, [
68
+ text
69
+ ]);
70
+ return /* @__PURE__ */ import_react.default.createElement("div", {
71
+ className: "flex flex-col grow overflow-hidden"
72
+ }, /* @__PURE__ */ import_react.default.createElement("div", {
73
+ ref: scrollRef,
74
+ className: "flex flex-col grow overflow-x-hidden overflow-y-scroll scrollbar-thin divide-y divide-separator"
75
+ }, messages.map((message, i) => /* @__PURE__ */ import_react.default.createElement(ThreadMessage, {
76
+ key: i,
77
+ classNames: "px-4 py-2",
78
+ message
79
+ }))), /* @__PURE__ */ import_react.default.createElement("div", {
80
+ className: "flex p-4 gap-3 items-center"
81
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_sfx.Ball, {
82
+ active: streaming
83
+ }), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.TextInput, {
84
+ autoFocus: true,
85
+ classNames: "px-2 bg-base rounded",
86
+ placeholder: "Ask a question...",
87
+ value: text,
88
+ onChange: (ev) => setText(ev.target.value),
89
+ onKeyDown: handleKeyDown
90
+ })), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
91
+ icon: "ph--spinner-gap--regular",
92
+ classNames: (0, import_react_ui_theme.mx)("animate-spin opacity-0 transition duration-500", streaming && "opacity-100"),
93
+ size: 6
94
+ })));
95
+ };
96
+ var ThreadMessage = ({ classNames, message }) => {
97
+ if (typeof message !== "object") {
98
+ return /* @__PURE__ */ import_react.default.createElement("div", {
99
+ className: (0, import_react_ui_theme.mx)(classNames)
100
+ }, message);
101
+ }
102
+ const { role, content = [] } = message;
103
+ return /* @__PURE__ */ import_react.default.createElement("div", {
104
+ className: (0, import_react_ui_theme.mx)("flex", classNames, role === "user" && "justify-end")
105
+ }, /* @__PURE__ */ import_react.default.createElement("div", {
106
+ className: (0, import_react_ui_theme.mx)("block rounded-md p-1 px-2 bg-base overflow-hidden divide-y divid-separator", role === "user" ? "dark:bg-blue-800" : "whitespace-pre-wrap")
107
+ }, content.map((item, idx) => {
108
+ switch (item.type) {
109
+ case "text":
110
+ return /* @__PURE__ */ import_react.default.createElement(Markdown, {
111
+ key: idx,
112
+ text: item.text.trim()
113
+ });
114
+ case "json":
115
+ return /* @__PURE__ */ import_react.default.createElement(Json, {
116
+ key: idx,
117
+ data: item.json
118
+ });
119
+ default:
120
+ return /* @__PURE__ */ import_react.default.createElement(Json, {
121
+ key: idx,
122
+ data: item
123
+ });
124
+ }
125
+ })));
126
+ };
127
+ var Markdown = ({ text, classNames }) => {
128
+ const { themeMode } = (0, import_react_ui.useThemeContext)();
129
+ const { parentRef, view } = (0, import_react_ui_editor.useTextEditor)(() => ({
130
+ initialValue: text,
131
+ extensions: [
132
+ // TOOD(burdon): Optional line wrapping.
133
+ (0, import_react_ui_editor.createBasicExtensions)({
134
+ lineWrapping: true,
135
+ readonly: true
136
+ }),
137
+ (0, import_react_ui_editor.createMarkdownExtensions)(),
138
+ (0, import_react_ui_editor.createThemeExtensions)({
139
+ themeMode
140
+ }),
141
+ (0, import_react_ui_editor.decorateMarkdown)()
142
+ ]
143
+ }));
144
+ (0, import_react.useEffect)(() => {
145
+ view?.dispatch({
146
+ // TODO(burdon): Append?
147
+ changes: {
148
+ from: 0,
149
+ to: view.state.doc.length,
150
+ insert: text
151
+ }
152
+ });
153
+ }, [
154
+ text
155
+ ]);
156
+ return /* @__PURE__ */ import_react.default.createElement("div", {
157
+ ref: parentRef,
158
+ className: (0, import_react_ui_theme.mx)("w-full overflow-hidden", classNames)
159
+ });
160
+ };
161
+ var Json = ({ data, classNames }) => {
162
+ return /* @__PURE__ */ import_react.default.createElement(import_react_ui_syntax_highlighter.SyntaxHighlighter, {
163
+ language: "json",
164
+ classNames: "w-full overflow-hidden text-sm"
165
+ }, JSON.stringify(data, null, 2));
166
+ };
167
+ // Annotate the CommonJS export names for ESM import in node:
168
+ 0 && (module.exports = {
169
+ Thread,
170
+ ThreadMessage
171
+ });
172
+ //# sourceMappingURL=chunk-TWDGP26W.cjs.map