@dxos/plugin-automation 0.7.5-labs.8a82073 → 0.7.5-labs.c0e040f

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 (139) hide show
  1. package/dist/lib/browser/AutomationPanel-VW2XIUPU.mjs +8 -0
  2. package/dist/lib/browser/ChatContainer-OLRZNGWK.mjs +12 -0
  3. package/dist/lib/browser/{ai-client-UJLNYP7B.mjs → ai-client-5CNY6JBF.mjs} +3 -3
  4. package/dist/lib/browser/{app-graph-builder-3H5TCRG4.mjs → app-graph-builder-6H7MDCXE.mjs} +39 -4
  5. package/dist/lib/browser/app-graph-builder-6H7MDCXE.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-BQHXJZ4K.mjs → chunk-2H2EUYXL.mjs} +2 -2
  7. package/dist/lib/browser/{chunk-N4SSCQ7P.mjs → chunk-ITG6CBKL.mjs} +10 -10
  8. package/dist/lib/browser/chunk-ITG6CBKL.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-MRBC5J4T.mjs +518 -0
  10. package/dist/lib/browser/chunk-MRBC5J4T.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-6KJRL5KV.mjs → chunk-NQFZ6XRX.mjs} +2 -2
  12. package/dist/lib/browser/{chunk-43WRHV2L.mjs → chunk-Q4IMHYGH.mjs} +2 -2
  13. package/dist/lib/browser/{chunk-DQ7ZSYJJ.mjs → chunk-R4JH4TLE.mjs} +3 -1
  14. package/dist/lib/browser/chunk-R4JH4TLE.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +10 -6
  16. package/dist/lib/browser/index.mjs.map +1 -1
  17. package/dist/lib/browser/{intent-resolver-5YVZJFS3.mjs → intent-resolver-BWAXKT27.mjs} +3 -3
  18. package/dist/lib/browser/meta.json +1 -1
  19. package/dist/lib/browser/{react-surface-RRTZFTKR.mjs → react-surface-O6SHIBCA.mjs} +15 -7
  20. package/dist/lib/browser/react-surface-O6SHIBCA.mjs.map +7 -0
  21. package/dist/lib/browser/types/index.mjs +2 -2
  22. package/dist/lib/node/{AutomationPanel-BCEY3YXO.cjs → AutomationPanel-G6EDDYWW.cjs} +7 -7
  23. package/dist/lib/node/{AutomationPanel-BCEY3YXO.cjs.map → AutomationPanel-G6EDDYWW.cjs.map} +2 -2
  24. package/dist/lib/node/{ChatContainer-QUWFEBTI.cjs → ChatContainer-GRZDJIG5.cjs} +10 -10
  25. package/dist/lib/node/ChatContainer-GRZDJIG5.cjs.map +7 -0
  26. package/dist/lib/node/{ai-client-AOB6TLNW.cjs → ai-client-FKLPDELV.cjs} +7 -7
  27. package/dist/lib/node/{app-graph-builder-CDEQJEHY.cjs → app-graph-builder-7JMJLZIE.cjs} +48 -14
  28. package/dist/lib/node/app-graph-builder-7JMJLZIE.cjs.map +7 -0
  29. package/dist/lib/node/{chunk-DKGNORZK.cjs → chunk-CFBERLTN.cjs} +21 -21
  30. package/dist/lib/node/chunk-CFBERLTN.cjs.map +7 -0
  31. package/dist/lib/node/{chunk-TQEDPRY5.cjs → chunk-EQYHOTGG.cjs} +7 -4
  32. package/dist/lib/node/chunk-EQYHOTGG.cjs.map +7 -0
  33. package/dist/lib/node/chunk-FQUY77HT.cjs +527 -0
  34. package/dist/lib/node/chunk-FQUY77HT.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-H3RSMGJG.cjs → chunk-GB7245FH.cjs} +6 -6
  36. package/dist/lib/node/{chunk-IPCNJYQL.cjs → chunk-QXIHYOMF.cjs} +7 -7
  37. package/dist/lib/node/{chunk-AWZVJZ2I.cjs → chunk-U5Z7LFWB.cjs} +6 -6
  38. package/dist/lib/node/index.cjs +75 -71
  39. package/dist/lib/node/index.cjs.map +1 -1
  40. package/dist/lib/node/{intent-resolver-MJFZT5IU.cjs → intent-resolver-C6OKFVEW.cjs} +8 -8
  41. package/dist/lib/node/meta.json +1 -1
  42. package/dist/lib/node/{react-surface-BVZ63QP4.cjs → react-surface-JT6SVCPK.cjs} +23 -17
  43. package/dist/lib/node/react-surface-JT6SVCPK.cjs.map +7 -0
  44. package/dist/lib/node/types/index.cjs +11 -11
  45. package/dist/lib/node/types/index.cjs.map +1 -1
  46. package/dist/lib/node-esm/{AutomationPanel-YTIZ74RI.mjs → AutomationPanel-V3IWQAMO.mjs} +3 -3
  47. package/dist/lib/node-esm/{ChatContainer-QSMDZRDU.mjs → ChatContainer-ORVWQPJO.mjs} +5 -5
  48. package/dist/lib/node-esm/{ai-client-RUCCJ7JZ.mjs → ai-client-XGNA6SJ5.mjs} +3 -3
  49. package/dist/lib/node-esm/{app-graph-builder-GR3URVNX.mjs → app-graph-builder-C6NUQGCU.mjs} +39 -4
  50. package/dist/lib/node-esm/app-graph-builder-C6NUQGCU.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-2OKJZ4ZW.mjs +519 -0
  52. package/dist/lib/node-esm/chunk-2OKJZ4ZW.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-CZXU4CFK.mjs → chunk-6HLBYDUI.mjs} +2 -2
  54. package/dist/lib/node-esm/{chunk-D7RARVTS.mjs → chunk-7VPT3OO3.mjs} +10 -10
  55. package/dist/lib/node-esm/chunk-7VPT3OO3.mjs.map +7 -0
  56. package/dist/lib/node-esm/{chunk-7JO77AAS.mjs → chunk-DNCXRGAF.mjs} +2 -2
  57. package/dist/lib/node-esm/{chunk-JFHI22MF.mjs → chunk-EMVA6QUT.mjs} +3 -1
  58. package/dist/lib/node-esm/chunk-EMVA6QUT.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-LSSWQIQD.mjs → chunk-IJRTDSKN.mjs} +2 -2
  60. package/dist/lib/node-esm/index.mjs +10 -6
  61. package/dist/lib/node-esm/index.mjs.map +1 -1
  62. package/dist/lib/node-esm/{intent-resolver-FCKNRTKQ.mjs → intent-resolver-DCP4ZDBA.mjs} +3 -3
  63. package/dist/lib/node-esm/meta.json +1 -1
  64. package/dist/lib/node-esm/{react-surface-Y5LQHUQN.mjs → react-surface-DSVM33SA.mjs} +15 -7
  65. package/dist/lib/node-esm/react-surface-DSVM33SA.mjs.map +7 -0
  66. package/dist/lib/node-esm/types/index.mjs +2 -2
  67. package/dist/types/src/capabilities/app-graph-builder.d.ts +23 -22
  68. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  70. package/dist/types/src/components/AmbientChatDialog/AmbientChatDialog.d.ts +3 -0
  71. package/dist/types/src/components/AmbientChatDialog/AmbientChatDialog.d.ts.map +1 -0
  72. package/dist/types/src/components/AmbientChatDialog/AmbientChatDialog.stories.d.ts +8 -0
  73. package/dist/types/src/components/AmbientChatDialog/AmbientChatDialog.stories.d.ts.map +1 -0
  74. package/dist/types/src/components/AmbientChatDialog/index.d.ts +2 -0
  75. package/dist/types/src/components/AmbientChatDialog/index.d.ts.map +1 -0
  76. package/dist/types/src/components/Prompt/Prompt.d.ts +3 -3
  77. package/dist/types/src/components/Prompt/Prompt.d.ts.map +1 -1
  78. package/dist/types/src/components/Prompt/prompt-autocomplete.d.ts +1 -1
  79. package/dist/types/src/components/Prompt/prompt-autocomplete.d.ts.map +1 -1
  80. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts.map +1 -1
  81. package/dist/types/src/components/index.d.ts +1 -0
  82. package/dist/types/src/components/index.d.ts.map +1 -1
  83. package/dist/types/src/meta.d.ts +1 -0
  84. package/dist/types/src/meta.d.ts.map +1 -1
  85. package/package.json +52 -51
  86. package/src/capabilities/app-graph-builder.ts +34 -3
  87. package/src/capabilities/react-surface.tsx +8 -2
  88. package/src/components/AmbientChatDialog/AmbientChatDialog.stories.tsx +44 -0
  89. package/src/components/AmbientChatDialog/AmbientChatDialog.tsx +63 -0
  90. package/src/components/AmbientChatDialog/index.ts +5 -0
  91. package/src/components/Prompt/Prompt.tsx +6 -3
  92. package/src/components/Prompt/prompt-autocomplete.ts +2 -2
  93. package/src/components/PromptEditor/PromptEditor.tsx +3 -3
  94. package/src/components/ServiceRegistry/ServiceRegistry.tsx +1 -0
  95. package/src/components/Thread/Thread.stories.tsx +1 -1
  96. package/src/components/index.ts +1 -0
  97. package/src/hooks/useChatProcessor.tsx +2 -2
  98. package/src/meta.ts +2 -0
  99. package/src/tools/openapi.test.ts +3 -6
  100. package/dist/lib/browser/AutomationPanel-CL2TWZT5.mjs +0 -8
  101. package/dist/lib/browser/ChatContainer-EJ3IWL7Y.mjs +0 -12
  102. package/dist/lib/browser/app-graph-builder-3H5TCRG4.mjs.map +0 -7
  103. package/dist/lib/browser/chunk-4M74P6YW.mjs +0 -284
  104. package/dist/lib/browser/chunk-4M74P6YW.mjs.map +0 -7
  105. package/dist/lib/browser/chunk-DQ7ZSYJJ.mjs.map +0 -7
  106. package/dist/lib/browser/chunk-N4SSCQ7P.mjs.map +0 -7
  107. package/dist/lib/browser/react-surface-RRTZFTKR.mjs.map +0 -7
  108. package/dist/lib/node/ChatContainer-QUWFEBTI.cjs.map +0 -7
  109. package/dist/lib/node/app-graph-builder-CDEQJEHY.cjs.map +0 -7
  110. package/dist/lib/node/chunk-DKGNORZK.cjs.map +0 -7
  111. package/dist/lib/node/chunk-LC6KNDPQ.cjs +0 -302
  112. package/dist/lib/node/chunk-LC6KNDPQ.cjs.map +0 -7
  113. package/dist/lib/node/chunk-TQEDPRY5.cjs.map +0 -7
  114. package/dist/lib/node/react-surface-BVZ63QP4.cjs.map +0 -7
  115. package/dist/lib/node-esm/app-graph-builder-GR3URVNX.mjs.map +0 -7
  116. package/dist/lib/node-esm/chunk-CQPQXIJP.mjs +0 -285
  117. package/dist/lib/node-esm/chunk-CQPQXIJP.mjs.map +0 -7
  118. package/dist/lib/node-esm/chunk-D7RARVTS.mjs.map +0 -7
  119. package/dist/lib/node-esm/chunk-JFHI22MF.mjs.map +0 -7
  120. package/dist/lib/node-esm/react-surface-Y5LQHUQN.mjs.map +0 -7
  121. /package/dist/lib/browser/{AutomationPanel-CL2TWZT5.mjs.map → AutomationPanel-VW2XIUPU.mjs.map} +0 -0
  122. /package/dist/lib/browser/{ChatContainer-EJ3IWL7Y.mjs.map → ChatContainer-OLRZNGWK.mjs.map} +0 -0
  123. /package/dist/lib/browser/{ai-client-UJLNYP7B.mjs.map → ai-client-5CNY6JBF.mjs.map} +0 -0
  124. /package/dist/lib/browser/{chunk-BQHXJZ4K.mjs.map → chunk-2H2EUYXL.mjs.map} +0 -0
  125. /package/dist/lib/browser/{chunk-6KJRL5KV.mjs.map → chunk-NQFZ6XRX.mjs.map} +0 -0
  126. /package/dist/lib/browser/{chunk-43WRHV2L.mjs.map → chunk-Q4IMHYGH.mjs.map} +0 -0
  127. /package/dist/lib/browser/{intent-resolver-5YVZJFS3.mjs.map → intent-resolver-BWAXKT27.mjs.map} +0 -0
  128. /package/dist/lib/node/{ai-client-AOB6TLNW.cjs.map → ai-client-FKLPDELV.cjs.map} +0 -0
  129. /package/dist/lib/node/{chunk-H3RSMGJG.cjs.map → chunk-GB7245FH.cjs.map} +0 -0
  130. /package/dist/lib/node/{chunk-IPCNJYQL.cjs.map → chunk-QXIHYOMF.cjs.map} +0 -0
  131. /package/dist/lib/node/{chunk-AWZVJZ2I.cjs.map → chunk-U5Z7LFWB.cjs.map} +0 -0
  132. /package/dist/lib/node/{intent-resolver-MJFZT5IU.cjs.map → intent-resolver-C6OKFVEW.cjs.map} +0 -0
  133. /package/dist/lib/node-esm/{AutomationPanel-YTIZ74RI.mjs.map → AutomationPanel-V3IWQAMO.mjs.map} +0 -0
  134. /package/dist/lib/node-esm/{ChatContainer-QSMDZRDU.mjs.map → ChatContainer-ORVWQPJO.mjs.map} +0 -0
  135. /package/dist/lib/node-esm/{ai-client-RUCCJ7JZ.mjs.map → ai-client-XGNA6SJ5.mjs.map} +0 -0
  136. /package/dist/lib/node-esm/{chunk-CZXU4CFK.mjs.map → chunk-6HLBYDUI.mjs.map} +0 -0
  137. /package/dist/lib/node-esm/{chunk-7JO77AAS.mjs.map → chunk-DNCXRGAF.mjs.map} +0 -0
  138. /package/dist/lib/node-esm/{chunk-LSSWQIQD.mjs.map → chunk-IJRTDSKN.mjs.map} +0 -0
  139. /package/dist/lib/node-esm/{intent-resolver-FCKNRTKQ.mjs.map → intent-resolver-DCP4ZDBA.mjs.map} +0 -0
@@ -0,0 +1,527 @@
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_FQUY77HT_exports = {};
30
+ __export(chunk_FQUY77HT_exports, {
31
+ AmbientChatDialog: () => AmbientChatDialog,
32
+ AutomationPanel: () => AutomationPanel,
33
+ ChatContainer: () => ChatContainer,
34
+ PromptEditor: () => PromptEditor,
35
+ ServiceRegistry: () => ServiceRegistry
36
+ });
37
+ module.exports = __toCommonJS(chunk_FQUY77HT_exports);
38
+ var import_chunk_CFBERLTN = require("./chunk-CFBERLTN.cjs");
39
+ var import_chunk_GB7245FH = require("./chunk-GB7245FH.cjs");
40
+ var import_chunk_EQYHOTGG = require("./chunk-EQYHOTGG.cjs");
41
+ var import_react = __toESM(require("react"));
42
+ var import_react_ui = require("@dxos/react-ui");
43
+ var import_react_ui_dnd = require("@dxos/react-ui-dnd");
44
+ var import_react2 = __toESM(require("react"));
45
+ var import_react_ui2 = require("@dxos/react-ui");
46
+ var import_react_ui_editor = require("@dxos/react-ui-editor");
47
+ var import_react_ui_theme = require("@dxos/react-ui-theme");
48
+ var import_state = require("@codemirror/state");
49
+ var import_view = require("@codemirror/view");
50
+ var import_react3 = __toESM(require("react"));
51
+ var import_echo = require("@dxos/react-client/echo");
52
+ var import_react_ui3 = require("@dxos/react-ui");
53
+ var import_react_ui_editor2 = require("@dxos/react-ui-editor");
54
+ var import_react_ui_theme2 = require("@dxos/react-ui-theme");
55
+ var import_util = require("@dxos/util");
56
+ var import_language = require("@codemirror/language");
57
+ var import_react_ui_editor3 = require("@dxos/react-ui-editor");
58
+ var import_react_ui_theme3 = require("@dxos/react-ui-theme");
59
+ var import_react4 = __toESM(require("react"));
60
+ var import_echo2 = require("@dxos/client/echo");
61
+ var import_echo3 = require("@dxos/react-client/echo");
62
+ var import_react_ui4 = require("@dxos/react-ui");
63
+ var import_react5 = require("react");
64
+ var InlineSuggestionWidget = class extends import_view.WidgetType {
65
+ constructor(suffix) {
66
+ super();
67
+ this.suffix = suffix;
68
+ }
69
+ toDOM() {
70
+ const span = document.createElement("span");
71
+ span.textContent = this.suffix;
72
+ span.className = "cm-inline-suggestion";
73
+ return span;
74
+ }
75
+ eq(other) {
76
+ return other.suffix === this.suffix;
77
+ }
78
+ };
79
+ var createAutocompleteExtension = ({ onEnter, onSuggest }) => {
80
+ const suggestionPlugin = import_view.ViewPlugin.fromClass(class {
81
+ constructor(view) {
82
+ this._currentSuggestion = null;
83
+ this._decorations = this.computeDecorations(view);
84
+ }
85
+ update(update) {
86
+ if (update.docChanged || update.selectionSet) {
87
+ this._decorations = this.computeDecorations(update.view);
88
+ }
89
+ }
90
+ computeDecorations(view) {
91
+ const text = view.state.doc.toString();
92
+ const suggestions = onSuggest?.(text) ?? [];
93
+ if (!suggestions.length) {
94
+ this._currentSuggestion = null;
95
+ return import_view.Decoration.none;
96
+ }
97
+ this._currentSuggestion = suggestions[0];
98
+ const suffix = this._currentSuggestion.slice(text.length);
99
+ if (!suffix) {
100
+ return import_view.Decoration.none;
101
+ }
102
+ return import_view.Decoration.set([
103
+ import_view.Decoration.widget({
104
+ widget: new InlineSuggestionWidget(suffix),
105
+ side: 1
106
+ }).range(view.state.doc.length)
107
+ ]);
108
+ }
109
+ completeSuggestion(view) {
110
+ if (!this._currentSuggestion) {
111
+ return false;
112
+ }
113
+ const text = view.state.doc.toString();
114
+ const suffix = this._currentSuggestion.slice(text.length);
115
+ if (!suffix) {
116
+ return false;
117
+ }
118
+ view.dispatch({
119
+ changes: {
120
+ from: view.state.doc.length,
121
+ insert: suffix
122
+ },
123
+ selection: {
124
+ anchor: view.state.doc.length + suffix.length
125
+ }
126
+ });
127
+ return true;
128
+ }
129
+ }, {
130
+ decorations: (v) => v._decorations
131
+ });
132
+ return [
133
+ suggestionPlugin,
134
+ import_view.EditorView.theme({
135
+ ".cm-inline-suggestion": {
136
+ opacity: 0.4
137
+ }
138
+ }),
139
+ // Accept the current suggestion.
140
+ import_state.Prec.highest(import_view.keymap.of([
141
+ {
142
+ key: "Tab",
143
+ run: (view) => {
144
+ const plugin = view.plugin(suggestionPlugin);
145
+ return plugin?.completeSuggestion(view) ?? false;
146
+ }
147
+ },
148
+ {
149
+ key: "ArrowRight",
150
+ run: (view) => {
151
+ if (view.state.selection.main.head !== view.state.doc.length) {
152
+ return false;
153
+ }
154
+ const plugin = view.plugin(suggestionPlugin);
155
+ return plugin?.completeSuggestion(view) ?? false;
156
+ }
157
+ },
158
+ {
159
+ key: "Enter",
160
+ preventDefault: true,
161
+ run: (view) => {
162
+ const text = view.state.doc.toString();
163
+ if (onEnter) {
164
+ onEnter(text);
165
+ view.dispatch({
166
+ changes: {
167
+ from: 0,
168
+ to: view.state.doc.length,
169
+ insert: ""
170
+ }
171
+ });
172
+ return true;
173
+ }
174
+ return false;
175
+ }
176
+ },
177
+ {
178
+ key: "Shift-Enter",
179
+ run: (view) => {
180
+ view.dispatch({
181
+ changes: {
182
+ from: view.state.selection.main.head,
183
+ insert: "\n"
184
+ }
185
+ });
186
+ return true;
187
+ }
188
+ },
189
+ {
190
+ key: "Escape",
191
+ run: (view) => {
192
+ view.dispatch({
193
+ changes: {
194
+ from: 0,
195
+ to: view.state.doc.length,
196
+ insert: ""
197
+ }
198
+ });
199
+ return true;
200
+ }
201
+ }
202
+ ]))
203
+ ];
204
+ };
205
+ var Prompt = ({ classNames, autoFocus, lineWrapping = false, onEnter, onSuggest }) => {
206
+ const { themeMode } = (0, import_react_ui2.useThemeContext)();
207
+ const { parentRef } = (0, import_react_ui_editor.useTextEditor)({
208
+ autoFocus,
209
+ extensions: [
210
+ (0, import_react_ui_editor.createBasicExtensions)({
211
+ bracketMatching: false,
212
+ lineWrapping,
213
+ placeholder: "Ask a question..."
214
+ }),
215
+ (0, import_react_ui_editor.createThemeExtensions)({
216
+ themeMode
217
+ }),
218
+ createAutocompleteExtension({
219
+ onEnter,
220
+ onSuggest
221
+ })
222
+ ]
223
+ });
224
+ return /* @__PURE__ */ import_react2.default.createElement("div", {
225
+ ref: parentRef,
226
+ className: (0, import_react_ui_theme.mx)(classNames)
227
+ });
228
+ };
229
+ var preventDefault = (event) => event.preventDefault();
230
+ var AmbientChatDialog = ({ children }) => {
231
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_EQYHOTGG.AUTOMATION_PLUGIN);
232
+ const [size, setSize] = (0, import_react.useState)("min-content");
233
+ const [iter, setIter] = (0, import_react.useState)(0);
234
+ return /* @__PURE__ */ import_react.default.createElement("div", {
235
+ role: "none",
236
+ className: "dx-dialog__overlay bg-transparent pointer-events-none",
237
+ "data-block-align": "end"
238
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Dialog.Content, {
239
+ onInteractOutside: preventDefault,
240
+ classNames: "pointer-events-auto relative overflow-hidden is-[500px] max-is-none",
241
+ inOverlayLayout: true,
242
+ ...import_react_ui_dnd.resizeAttributes,
243
+ style: {
244
+ ...(0, import_react_ui_dnd.sizeStyle)(size, "vertical"),
245
+ maxBlockSize: "calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 8rem)"
246
+ }
247
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_dnd.ResizeHandle, {
248
+ key: iter,
249
+ side: "block-start",
250
+ defaultSize: "min-content",
251
+ minSize: 5,
252
+ fallbackSize: 5,
253
+ iconPosition: "center",
254
+ onSizeChange: setSize
255
+ }), /* @__PURE__ */ import_react.default.createElement("div", {
256
+ className: "flex w-full items-center"
257
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Dialog.Title, {
258
+ classNames: "sr-only"
259
+ }, t("ambient chat dialog title")), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Dialog.Close, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
260
+ icon: "ph--x--regular",
261
+ size: 4
262
+ })), /* @__PURE__ */ import_react.default.createElement("div", {
263
+ className: "grow"
264
+ }), /* @__PURE__ */ import_react.default.createElement(import_react_ui.IconButton, {
265
+ variant: "ghost",
266
+ icon: "ph--caret-down--regular",
267
+ iconOnly: true,
268
+ label: "Shrink",
269
+ onClick: () => {
270
+ setIter((iter2) => iter2 + 1);
271
+ setSize("min-content");
272
+ }
273
+ })), /* @__PURE__ */ import_react.default.createElement(Prompt, {
274
+ autoFocus: true,
275
+ lineWrapping: true
276
+ })));
277
+ };
278
+ var nameRegex = /\{([\w-]+)}/;
279
+ var parser = import_language.StreamLanguage.define({
280
+ token: (stream) => {
281
+ if (stream.eatSpace()) {
282
+ return null;
283
+ }
284
+ if (stream.match(/^#.*/)) {
285
+ return "lineComment";
286
+ }
287
+ if (stream.match(/^-+$/)) {
288
+ return "lineComment";
289
+ }
290
+ if (stream.match(nameRegex)) {
291
+ return "variableName";
292
+ }
293
+ stream.next();
294
+ return null;
295
+ }
296
+ });
297
+ var highlightStyles = import_language.HighlightStyle.define([
298
+ {
299
+ tag: import_react_ui_editor3.tags.variableName,
300
+ class: (0, import_react_ui_theme3.mx)("rounded border border-yellow-500 bg-yellow-100 text-black font-mono text-sm")
301
+ }
302
+ ]);
303
+ var promptExtension = [
304
+ parser,
305
+ (0, import_language.syntaxHighlighting)(highlightStyles)
306
+ ];
307
+ var inputTypes = [
308
+ {
309
+ value: import_chunk_GB7245FH.ChainInputType.VALUE,
310
+ label: "Value"
311
+ },
312
+ {
313
+ value: import_chunk_GB7245FH.ChainInputType.PASS_THROUGH,
314
+ label: "Pass through"
315
+ },
316
+ {
317
+ value: import_chunk_GB7245FH.ChainInputType.RETRIEVER,
318
+ label: "Retriever"
319
+ },
320
+ // {
321
+ // value: ChainInputType.FUNCTION,
322
+ // label: 'Function',
323
+ // },
324
+ // {
325
+ // value: ChainInputType.QUERY,
326
+ // label: 'Query',
327
+ // },
328
+ {
329
+ value: import_chunk_GB7245FH.ChainInputType.RESOLVER,
330
+ label: "Resolver"
331
+ },
332
+ {
333
+ value: import_chunk_GB7245FH.ChainInputType.CONTEXT,
334
+ label: "Context"
335
+ },
336
+ {
337
+ value: import_chunk_GB7245FH.ChainInputType.SCHEMA,
338
+ label: "Schema"
339
+ }
340
+ ];
341
+ var getInputType = (type) => inputTypes.find(({ value }) => String(value) === type)?.value;
342
+ var usePromptInputs = (prompt) => {
343
+ (0, import_react3.useEffect)(() => {
344
+ const text = prompt.template ?? "";
345
+ if (!prompt.inputs) {
346
+ prompt.inputs = [];
347
+ }
348
+ const regex = new RegExp(nameRegex, "g");
349
+ const variables = new Set([
350
+ ...text.matchAll(regex)
351
+ ].map((m) => m[1]));
352
+ const unclaimed = new Map(prompt.inputs?.filter(import_util.isNonNullable).map((input) => [
353
+ input.name,
354
+ input
355
+ ]));
356
+ const missing = [];
357
+ Array.from(variables.values()).forEach((name) => {
358
+ if (unclaimed.has(name)) {
359
+ unclaimed.delete(name);
360
+ } else {
361
+ missing.push(name);
362
+ }
363
+ });
364
+ const values = unclaimed.values();
365
+ missing.forEach((name) => {
366
+ const next = values.next().value;
367
+ if (next) {
368
+ next.name = name;
369
+ } else {
370
+ prompt.inputs?.push({
371
+ name
372
+ });
373
+ }
374
+ });
375
+ for (const input of values) {
376
+ prompt.inputs.splice(prompt.inputs.indexOf(input), 1);
377
+ }
378
+ }, [
379
+ prompt.template
380
+ ]);
381
+ };
382
+ var PromptEditor = ({ prompt, commandEditable = true }) => {
383
+ const { t } = (0, import_react_ui3.useTranslation)(import_chunk_EQYHOTGG.AUTOMATION_PLUGIN);
384
+ const { themeMode } = (0, import_react_ui3.useThemeContext)();
385
+ const { parentRef } = (0, import_react_ui_editor2.useTextEditor)(() => ({
386
+ initialValue: prompt.template,
387
+ extensions: [
388
+ (0, import_react_ui_editor2.createDataExtensions)({
389
+ id: prompt.id,
390
+ text: prompt.template !== void 0 ? (0, import_echo.createDocAccessor)(prompt, [
391
+ "template"
392
+ ]) : void 0
393
+ }),
394
+ (0, import_react_ui_editor2.createBasicExtensions)({
395
+ bracketMatching: false,
396
+ lineWrapping: true,
397
+ placeholder: t("template placeholder")
398
+ }),
399
+ (0, import_react_ui_editor2.createThemeExtensions)({
400
+ themeMode,
401
+ slots: {
402
+ content: {
403
+ className: "!p-3"
404
+ }
405
+ }
406
+ }),
407
+ promptExtension
408
+ ]
409
+ }), [
410
+ themeMode,
411
+ prompt
412
+ ]);
413
+ usePromptInputs(prompt);
414
+ return /* @__PURE__ */ import_react3.default.createElement("div", {
415
+ className: (0, import_react_ui_theme2.mx)("flex flex-col w-full overflow-hidden gap-4", import_react_ui_theme2.groupBorder)
416
+ }, commandEditable && /* @__PURE__ */ import_react3.default.createElement("div", {
417
+ className: "flex items-center pl-4"
418
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
419
+ className: "text-neutral-500"
420
+ }, "/"), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.TextInput, {
421
+ placeholder: t("command placeholder"),
422
+ classNames: (0, import_react_ui_theme2.mx)("is-full bg-transparent m-2"),
423
+ value: prompt.command ?? "",
424
+ onChange: (event) => {
425
+ prompt.command = event.target.value.replace(/\w/g, "");
426
+ }
427
+ }))), /* @__PURE__ */ import_react3.default.createElement("div", {
428
+ ref: parentRef,
429
+ className: (0, import_react_ui_theme2.mx)(import_react_ui_theme2.attentionSurface, "rounded", "min-h-[120px]")
430
+ }), (prompt.inputs?.length ?? 0) > 0 && /* @__PURE__ */ import_react3.default.createElement("div", {
431
+ className: "flex flex-col"
432
+ }, /* @__PURE__ */ import_react3.default.createElement("table", {
433
+ className: "w-full table-fixed border-collapse my-2"
434
+ }, /* @__PURE__ */ import_react3.default.createElement("tbody", null, prompt.inputs?.filter(import_util.isNonNullable).map((input) => /* @__PURE__ */ import_react3.default.createElement("tr", {
435
+ key: input.name
436
+ }, /* @__PURE__ */ import_react3.default.createElement("td", {
437
+ className: "w-[160px] p-1 font-mono text-sm whitespace-nowrap truncate"
438
+ }, /* @__PURE__ */ import_react3.default.createElement("code", {
439
+ className: "px-2"
440
+ }, input.name)), /* @__PURE__ */ import_react3.default.createElement("td", {
441
+ className: "w-[120px] p-1"
442
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Select.Root, {
443
+ value: String(input.type),
444
+ onValueChange: (type) => {
445
+ input.type = getInputType(type) ?? import_chunk_GB7245FH.ChainInputType.VALUE;
446
+ }
447
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Select.TriggerButton, {
448
+ placeholder: "Type",
449
+ classNames: "is-full"
450
+ }), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Select.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Select.Content, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Select.Viewport, null, inputTypes.map(({ value, label }) => /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Select.Option, {
451
+ key: value,
452
+ value: String(value)
453
+ }, label)))))))), /* @__PURE__ */ import_react3.default.createElement("td", {
454
+ className: "p-1 pr-2"
455
+ }, input.type !== void 0 && [
456
+ import_chunk_GB7245FH.ChainInputType.VALUE,
457
+ import_chunk_GB7245FH.ChainInputType.CONTEXT,
458
+ import_chunk_GB7245FH.ChainInputType.RESOLVER,
459
+ import_chunk_GB7245FH.ChainInputType.SCHEMA
460
+ ].includes(input.type) && /* @__PURE__ */ import_react3.default.createElement("div", null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.TextInput, {
461
+ placeholder: t("command placeholder"),
462
+ classNames: (0, import_react_ui_theme2.mx)("is-full bg-transparent"),
463
+ value: input.value ?? "",
464
+ onChange: (event) => {
465
+ input.value = event.target.value;
466
+ }
467
+ }))))))))));
468
+ };
469
+ var ServiceRegistry = ({ space }) => {
470
+ const matchingServices = (0, import_chunk_CFBERLTN.useServices)(space);
471
+ const enabledServices = (0, import_echo3.useQuery)(space, import_echo2.Filter.schema(import_chunk_GB7245FH.ServiceType));
472
+ const services = (0, import_react4.useMemo)(() => {
473
+ return matchingServices.map((service) => enabledServices.find((s) => s.serviceId === service.serviceId) ?? service);
474
+ }, [
475
+ matchingServices,
476
+ enabledServices
477
+ ]);
478
+ const handleSetEnabled = (service, enabled) => {
479
+ if (enabled) {
480
+ space.db.add(service);
481
+ } else {
482
+ space.db.remove(service);
483
+ }
484
+ };
485
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.List, {
486
+ classNames: "h-full grid auto-rows-[5rem] gap-2 p-2 pis-2 pie-2 overflow-y-auto scrollbar-thin"
487
+ }, services.map((service) => /* @__PURE__ */ import_react4.default.createElement(ServiceItem, {
488
+ key: service.serviceId,
489
+ service,
490
+ enabled: service.enabled,
491
+ setEnabled: (enabled) => handleSetEnabled(service, enabled)
492
+ })));
493
+ };
494
+ var ServiceItem = ({ service, enabled, setEnabled }) => {
495
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.ListItem.Root, {
496
+ classNames: "flex flex-col gap-1 p-1 overflow-hidden rounded-md border border-separator"
497
+ }, /* @__PURE__ */ import_react4.default.createElement("div", {
498
+ className: "grid grid-cols-[40px_1fr_40px]"
499
+ }, /* @__PURE__ */ import_react4.default.createElement("div", {
500
+ className: "flex gow justify-center items-center"
501
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Icon, {
502
+ icon: import_chunk_GB7245FH.categoryIcons[service.category ?? "default"] ?? "ph--placeholder--regular",
503
+ size: 6
504
+ })), /* @__PURE__ */ import_react4.default.createElement("div", {
505
+ className: "grow items-center truncate mie-2"
506
+ }, service.name), /* @__PURE__ */ import_react4.default.createElement("div", {
507
+ className: "flex gow justify-center items-center"
508
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Input.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Input.Switch, {
509
+ checked: enabled,
510
+ onClick: () => setEnabled?.(!enabled)
511
+ })))), /* @__PURE__ */ import_react4.default.createElement("div", {
512
+ className: "grid grid-cols-[40px_1fr]"
513
+ }, /* @__PURE__ */ import_react4.default.createElement("div", null), /* @__PURE__ */ import_react4.default.createElement("div", {
514
+ className: "text-sm text-subdued line-clamp-2 mie-1"
515
+ }, service.description)));
516
+ };
517
+ var AutomationPanel = (0, import_react5.lazy)(() => import("./AutomationPanel-G6EDDYWW.cjs"));
518
+ var ChatContainer = (0, import_react5.lazy)(() => import("./ChatContainer-GRZDJIG5.cjs"));
519
+ // Annotate the CommonJS export names for ESM import in node:
520
+ 0 && (module.exports = {
521
+ AmbientChatDialog,
522
+ AutomationPanel,
523
+ ChatContainer,
524
+ PromptEditor,
525
+ ServiceRegistry
526
+ });
527
+ //# sourceMappingURL=chunk-FQUY77HT.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/AmbientChatDialog/AmbientChatDialog.tsx", "../../../src/components/Prompt/Prompt.tsx", "../../../src/components/Prompt/prompt-autocomplete.ts", "../../../src/components/PromptEditor/PromptEditor.tsx", "../../../src/components/PromptEditor/prompt-extension.ts", "../../../src/components/ServiceRegistry/ServiceRegistry.tsx", "../../../src/components/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren, useState } from 'react';\n\nimport { Dialog, Icon, IconButton, useTranslation } from '@dxos/react-ui';\nimport { resizeAttributes, ResizeHandle, type Size, sizeStyle } from '@dxos/react-ui-dnd';\n\nimport { AUTOMATION_PLUGIN } from '../../meta';\nimport { Prompt } from '../Prompt';\n\nconst preventDefault = (event: Event) => event.preventDefault();\n\nexport const AmbientChatDialog = ({ children }: PropsWithChildren) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n const [size, setSize] = useState<Size>('min-content');\n const [iter, setIter] = useState(0);\n return (\n <div role='none' className='dx-dialog__overlay bg-transparent pointer-events-none' data-block-align='end'>\n <Dialog.Content\n onInteractOutside={preventDefault}\n classNames='pointer-events-auto relative overflow-hidden is-[500px] max-is-none'\n inOverlayLayout\n {...resizeAttributes}\n style={{\n ...sizeStyle(size, 'vertical'),\n maxBlockSize: 'calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 8rem)',\n }}\n >\n <ResizeHandle\n key={iter}\n side='block-start'\n defaultSize='min-content'\n minSize={5}\n fallbackSize={5}\n iconPosition='center'\n onSizeChange={setSize}\n />\n\n <div className='flex w-full items-center'>\n <Dialog.Title classNames='sr-only'>{t('ambient chat dialog title')}</Dialog.Title>\n <Dialog.Close>\n <Icon icon='ph--x--regular' size={4} />\n </Dialog.Close>\n <div className='grow' />\n <IconButton\n variant='ghost'\n icon='ph--caret-down--regular'\n iconOnly\n label='Shrink'\n onClick={() => {\n setIter((iter) => iter + 1);\n setSize('min-content');\n }}\n />\n </div>\n\n <Prompt autoFocus lineWrapping />\n </Dialog.Content>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type ThemedClassName, useThemeContext } from '@dxos/react-ui';\nimport {\n type BasicExtensionsOptions,\n createBasicExtensions,\n createThemeExtensions,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { createAutocompleteExtension, type AutocompleteOptions } from './prompt-autocomplete';\n\nexport type PromptProps = ThemedClassName<\n AutocompleteOptions & Pick<UseTextEditorProps, 'autoFocus'> & Pick<BasicExtensionsOptions, 'lineWrapping'>\n>;\n\nexport const Prompt = ({ classNames, autoFocus, lineWrapping = false, onEnter, onSuggest }: PromptProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor({\n autoFocus,\n extensions: [\n createBasicExtensions({\n bracketMatching: false,\n lineWrapping,\n placeholder: 'Ask a question...',\n }),\n createThemeExtensions({ themeMode }),\n createAutocompleteExtension({ onEnter, onSuggest }),\n ],\n });\n\n return <div ref={parentRef} className={mx(classNames)} />;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Prec, type Extension } from '@codemirror/state';\nimport {\n EditorView,\n Decoration,\n ViewPlugin,\n keymap,\n type DecorationSet,\n type ViewUpdate,\n WidgetType,\n} from '@codemirror/view';\n\nexport type AutocompleteOptions = {\n /**\n * Callback triggered when Enter is pressed.\n * @param text The current text in the editor\n */\n onEnter?: (text: string) => void;\n\n /**\n * Function that returns a list of suggestions based on the current text.\n * @param text The current text before the cursor\n * @returns Array of suggestion strings\n */\n onSuggest?: (text: string) => string[];\n};\n\nclass InlineSuggestionWidget extends WidgetType {\n constructor(private suffix: string) {\n super();\n }\n\n override toDOM() {\n const span = document.createElement('span');\n span.textContent = this.suffix;\n span.className = 'cm-inline-suggestion';\n return span;\n }\n\n override eq(other: InlineSuggestionWidget) {\n return other.suffix === this.suffix;\n }\n}\n\n/**\n * Creates an autocomplete extension that shows inline suggestions.\n * Pressing Tab will complete the suggestion.\n */\nexport const createAutocompleteExtension = ({ onEnter, onSuggest }: AutocompleteOptions): Extension => {\n const suggestionPlugin = ViewPlugin.fromClass(\n class {\n _decorations: DecorationSet;\n _currentSuggestion: string | null = null;\n\n constructor(view: EditorView) {\n this._decorations = this.computeDecorations(view);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.selectionSet) {\n this._decorations = this.computeDecorations(update.view);\n }\n }\n\n private computeDecorations(view: EditorView): DecorationSet {\n const text = view.state.doc.toString();\n const suggestions = onSuggest?.(text) ?? [];\n if (!suggestions.length) {\n this._currentSuggestion = null;\n return Decoration.none;\n }\n\n // Get the first suggestion.\n this._currentSuggestion = suggestions[0];\n const suffix = this._currentSuggestion.slice(text.length);\n if (!suffix) {\n return Decoration.none;\n }\n\n // Always show ghost text at the end of the document.\n return Decoration.set([\n Decoration.widget({\n widget: new InlineSuggestionWidget(suffix),\n side: 1,\n }).range(view.state.doc.length),\n ]);\n }\n\n completeSuggestion(view: EditorView): boolean {\n if (!this._currentSuggestion) {\n return false;\n }\n\n const text = view.state.doc.toString();\n const suffix = this._currentSuggestion.slice(text.length);\n if (!suffix) {\n return false;\n }\n\n view.dispatch({\n changes: {\n from: view.state.doc.length,\n insert: suffix,\n },\n selection: {\n anchor: view.state.doc.length + suffix.length,\n },\n });\n\n return true;\n }\n },\n {\n decorations: (v) => v._decorations,\n },\n );\n\n return [\n suggestionPlugin,\n EditorView.theme({\n '.cm-inline-suggestion': {\n opacity: 0.4,\n },\n }),\n\n // Accept the current suggestion.\n Prec.highest(\n keymap.of([\n {\n key: 'Tab',\n run: (view) => {\n const plugin = view.plugin(suggestionPlugin);\n return plugin?.completeSuggestion(view) ?? false;\n },\n },\n {\n key: 'ArrowRight',\n run: (view) => {\n // Only complete if cursor is at the end\n if (view.state.selection.main.head !== view.state.doc.length) {\n return false;\n }\n\n const plugin = view.plugin(suggestionPlugin);\n return plugin?.completeSuggestion(view) ?? false;\n },\n },\n {\n key: 'Enter',\n preventDefault: true,\n run: (view) => {\n const text = view.state.doc.toString();\n if (onEnter) {\n onEnter(text);\n // Clear the document after calling onEnter\n view.dispatch({\n changes: {\n from: 0,\n to: view.state.doc.length,\n insert: '',\n },\n });\n return true;\n }\n return false;\n },\n },\n {\n key: 'Shift-Enter',\n run: (view) => {\n view.dispatch({\n changes: {\n from: view.state.selection.main.head,\n insert: '\\n',\n },\n });\n return true;\n },\n },\n {\n key: 'Escape',\n run: (view) => {\n // Clear the entire document.\n view.dispatch({\n changes: {\n from: 0,\n to: view.state.doc.length,\n insert: '',\n },\n });\n return true;\n },\n },\n ]),\n ),\n ];\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Schema as S } from '@effect/schema';\nimport React, { useEffect } from 'react';\n\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { Input, Select, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { attentionSurface, groupBorder, mx } from '@dxos/react-ui-theme';\nimport { isNonNullable } from '@dxos/util';\n\nimport { nameRegex, promptExtension } from './prompt-extension';\nimport { AUTOMATION_PLUGIN } from '../../meta';\nimport { type ChainInput, ChainInputType, type ChainPromptType } from '../../types';\n\nconst inputTypes = [\n {\n value: ChainInputType.VALUE,\n label: 'Value',\n },\n {\n value: ChainInputType.PASS_THROUGH,\n label: 'Pass through',\n },\n {\n value: ChainInputType.RETRIEVER,\n label: 'Retriever',\n },\n // {\n // value: ChainInputType.FUNCTION,\n // label: 'Function',\n // },\n // {\n // value: ChainInputType.QUERY,\n // label: 'Query',\n // },\n {\n value: ChainInputType.RESOLVER,\n label: 'Resolver',\n },\n {\n value: ChainInputType.CONTEXT,\n label: 'Context',\n },\n {\n value: ChainInputType.SCHEMA,\n label: 'Schema',\n },\n];\n\nconst getInputType = (type: string) => inputTypes.find(({ value }) => String(value) === type)?.value;\n\nconst usePromptInputs = (prompt: ChainPromptType) => {\n useEffect(() => {\n const text = prompt.template ?? '';\n if (!prompt.inputs) {\n prompt.inputs = []; // TODO(burdon): Required?\n }\n\n const regex = new RegExp(nameRegex, 'g');\n const variables = new Set<string>([...text.matchAll(regex)].map((m) => m[1]));\n\n // Create map of unclaimed inputs.\n const unclaimed = new Map<string, ChainInput>(\n prompt.inputs?.filter(isNonNullable).map((input) => [input.name, input]),\n );\n const missing: string[] = [];\n Array.from(variables.values()).forEach((name) => {\n if (unclaimed.has(name)) {\n unclaimed.delete(name);\n } else {\n missing.push(name);\n }\n });\n\n // Match or create new inputs.\n const values = unclaimed.values();\n missing.forEach((name) => {\n const next = values.next().value;\n if (next) {\n next.name = name;\n } else {\n prompt.inputs?.push({ name });\n }\n });\n\n // Remove unclaimed (deleted) inputs.\n // TODO(burdon): If user types incorrect name value, it will be deleted. Garbage collect?\n for (const input of values) {\n prompt.inputs.splice(prompt.inputs.indexOf(input), 1);\n }\n }, [prompt.template]);\n};\n\nexport type PromptEditorProps = {\n prompt: ChainPromptType;\n commandEditable?: boolean;\n schema?: S.Schema<any, any, any>;\n};\n\nexport const PromptEditor = ({ prompt, commandEditable = true }: PromptEditorProps) => {\n const { t } = useTranslation(AUTOMATION_PLUGIN);\n const { themeMode } = useThemeContext();\n\n const { parentRef } = useTextEditor(\n () => ({\n initialValue: prompt.template,\n extensions: [\n createDataExtensions({\n id: prompt.id,\n text: prompt.template !== undefined ? createDocAccessor(prompt, ['template']) : undefined,\n }),\n createBasicExtensions({\n bracketMatching: false,\n lineWrapping: true,\n placeholder: t('template placeholder'),\n }),\n createThemeExtensions({\n themeMode,\n slots: {\n content: { className: '!p-3' },\n },\n }),\n promptExtension,\n ],\n }),\n [themeMode, prompt],\n );\n\n usePromptInputs(prompt);\n\n return (\n <div className={mx('flex flex-col w-full overflow-hidden gap-4', groupBorder)}>\n {commandEditable && (\n <div className='flex items-center pl-4'>\n <span className='text-neutral-500'>/</span>\n <Input.Root>\n <Input.TextInput\n placeholder={t('command placeholder')}\n classNames={mx('is-full bg-transparent m-2')}\n value={prompt.command ?? ''}\n onChange={(event) => {\n prompt.command = event.target.value.replace(/\\w/g, '');\n }}\n />\n </Input.Root>\n </div>\n )}\n\n <div ref={parentRef} className={mx(attentionSurface, 'rounded', 'min-h-[120px]')} />\n\n {(prompt.inputs?.length ?? 0) > 0 && (\n <div className='flex flex-col'>\n {/* TODO(zan): Improve layout with grid */}\n <table className='w-full table-fixed border-collapse my-2'>\n <tbody>\n {prompt.inputs?.filter(isNonNullable).map((input) => (\n <tr key={input.name}>\n <td className='w-[160px] p-1 font-mono text-sm whitespace-nowrap truncate'>\n <code className='px-2'>{input.name}</code>\n </td>\n <td className='w-[120px] p-1'>\n <Input.Root>\n <Select.Root\n value={String(input.type)}\n onValueChange={(type) => {\n input.type = getInputType(type) ?? ChainInputType.VALUE;\n }}\n >\n <Select.TriggerButton placeholder='Type' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {inputTypes.map(({ value, label }) => (\n <Select.Option key={value} value={String(value)}>\n {label}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n </td>\n <td className='p-1 pr-2'>\n {input.type !== undefined &&\n [\n ChainInputType.VALUE,\n ChainInputType.CONTEXT,\n ChainInputType.RESOLVER,\n ChainInputType.SCHEMA,\n ].includes(input.type) && (\n <div>\n <Input.Root>\n <Input.TextInput\n placeholder={t('command placeholder')}\n classNames={mx('is-full bg-transparent')}\n value={input.value ?? ''}\n onChange={(event) => {\n input.value = event.target.value;\n }}\n />\n </Input.Root>\n </div>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { HighlightStyle, StreamLanguage, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport const nameRegex = /\\{([\\w-]+)}/;\n\nconst parser = StreamLanguage.define({\n token: (stream) => {\n if (stream.eatSpace()) {\n return null;\n }\n if (stream.match(/^#.*/)) {\n return 'lineComment';\n }\n if (stream.match(/^-+$/)) {\n return 'lineComment';\n }\n if (stream.match(nameRegex)) {\n return 'variableName';\n }\n stream.next();\n return null;\n },\n});\n\n/**\n * https://codemirror.net/examples/styling\n * https://lezer.codemirror.net/docs/ref/#highlight\n */\nconst highlightStyles = HighlightStyle.define([\n {\n tag: tags.variableName,\n class: mx('rounded border border-yellow-500 bg-yellow-100 text-black font-mono text-sm'),\n },\n]);\n\nexport const promptExtension: Extension = [parser, syntaxHighlighting(highlightStyles)];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Filter, type Space } from '@dxos/client/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Icon, Input, List, ListItem } from '@dxos/react-ui';\n\nimport { useServices } from '../../hooks';\nimport { categoryIcons, ServiceType } from '../../types';\n\n// TODO(burdon): Option to show all/enabled/filter.\nexport const ServiceRegistry = ({ space }: { space: Space }) => {\n const matchingServices = useServices(space);\n const enabledServices = useQuery(space, Filter.schema(ServiceType));\n\n // Join matching services with enabled services.\n const services = useMemo(() => {\n return matchingServices.map((service) => enabledServices.find((s) => s.serviceId === service.serviceId) ?? service);\n }, [matchingServices, enabledServices]);\n\n // TODO(burdon): Reaplce with SpacePlugin intent.\n const handleSetEnabled = (service: ServiceType, enabled: boolean) => {\n if (enabled) {\n space.db.add(service);\n } else {\n // TODO(burdon): Remove or disable?\n space.db.remove(service);\n }\n };\n\n return (\n <List classNames='h-full grid auto-rows-[5rem] gap-2 p-2 pis-2 pie-2 overflow-y-auto scrollbar-thin'>\n {services.map((service) => (\n <ServiceItem\n key={service.serviceId}\n service={service}\n enabled={service.enabled}\n setEnabled={(enabled) => handleSetEnabled(service, enabled)}\n />\n ))}\n </List>\n );\n};\n\nconst ServiceItem = ({\n service,\n enabled,\n setEnabled,\n}: {\n service: ServiceType;\n enabled?: boolean;\n setEnabled?: (enabled: boolean) => void;\n}) => {\n return (\n <ListItem.Root classNames='flex flex-col gap-1 p-1 overflow-hidden rounded-md border border-separator'>\n <div className='grid grid-cols-[40px_1fr_40px]'>\n <div className='flex gow justify-center items-center'>\n <Icon icon={categoryIcons[service.category ?? 'default'] ?? 'ph--placeholder--regular'} size={6} />\n </div>\n <div className='grow items-center truncate mie-2'>{service.name}</div>\n <div className='flex gow justify-center items-center'>\n <Input.Root>\n <Input.Switch checked={enabled} onClick={() => setEnabled?.(!enabled)} />\n </Input.Root>\n </div>\n </div>\n <div className='grid grid-cols-[40px_1fr]'>\n <div />\n <div className='text-sm text-subdued line-clamp-2 mie-1'>{service.description}</div>\n </div>\n </ListItem.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './AmbientChatDialog';\nexport * from './AutomationPanel';\nexport * from './ChatContainer';\nexport * from './MarkdownViewer';\nexport * from './PromptEditor';\nexport * from './ServiceRegistry';\nexport * from './Thread';\nexport * from './TriggerEditor';\n\nexport const AutomationPanel = lazy(() => import('./AutomationPanel'));\nexport const ChatContainer = lazy(() => import('./ChatContainer'));\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_react_ui", "import_react_ui_editor", "import_react_ui_theme", "import_echo", "InlineSuggestionWidget", "WidgetType", "constructor", "suffix", "toDOM", "span", "document", "createElement", "textContent", "className", "eq", "other", "createAutocompleteExtension", "onEnter", "onSuggest", "suggestionPlugin", "ViewPlugin", "fromClass", "view", "_currentSuggestion", "_decorations", "computeDecorations", "update", "docChanged", "selectionSet", "text", "state", "doc", "toString", "suggestions", "length", "Decoration", "none", "slice", "set", "widget", "side", "range", "completeSuggestion", "dispatch", "changes", "from", "insert", "selection", "anchor", "decorations", "v", "EditorView", "theme", "opacity", "Prec", "highest", "keymap", "of", "key", "run", "plugin", "main", "head", "preventDefault", "to", "Prompt", "classNames", "autoFocus", "lineWrapping", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "extensions", "createBasicExtensions", "bracketMatching", "placeholder", "createThemeExtensions", "React", "div", "ref", "mx", "event", "AmbientChatDialog", "children", "t", "useTranslation", "AUTOMATION_PLUGIN", "size", "setSize", "useState", "iter", "setIter", "role", "data-block-align", "Dialog", "Content", "onInteractOutside", "inOverlayLayout", "resizeAttributes", "style", "sizeStyle", "maxBlockSize", "ResizeHandle", "defaultSize", "minSize", "fallbackSize", "iconPosition", "onSizeChange", "Title", "Close", "Icon", "icon", "IconButton", "variant", "iconOnly", "label", "onClick", "nameRegex", "parser", "StreamLanguage", "define", "token", "stream", "eatSpace", "match", "next", "highlightStyles", "HighlightStyle", "tag", "tags", "variableName", "class", "promptExtension", "syntaxHighlighting", "inputTypes", "value", "ChainInputType", "VALUE", "PASS_THROUGH", "RETRIEVER", "RESOLVER", "CONTEXT", "SCHEMA", "getInputType", "type", "find", "String", "usePromptInputs", "prompt", "useEffect", "template", "inputs", "regex", "RegExp", "variables", "Set", "matchAll", "map", "m", "unclaimed", "Map", "filter", "isNonNullable", "input", "name", "missing", "Array", "values", "forEach", "has", "delete", "push", "splice", "indexOf", "PromptEditor", "commandEditable", "initialValue", "createDataExtensions", "id", "undefined", "createDocAccessor", "slots", "content", "groupBorder", "Input", "Root", "TextInput", "command", "onChange", "target", "replace", "attentionSurface", "table", "tbody", "tr", "td", "code", "Select", "onValueChange", "TriggerButton", "Portal", "Viewport", "Option", "includes", "ServiceRegistry", "space", "matchingServices", "useServices", "enabledServices", "useQuery", "Filter", "schema", "ServiceType", "services", "useMemo", "service", "s", "serviceId", "handleSetEnabled", "enabled", "db", "add", "remove", "List", "ServiceItem", "setEnabled", "ListItem", "categoryIcons", "category", "Switch", "checked", "description", "AutomationPanel", "lazy", "ChatContainer"]
7
+ }
@@ -16,8 +16,8 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_H3RSMGJG_exports = {};
20
- __export(chunk_H3RSMGJG_exports, {
19
+ var chunk_GB7245FH_exports = {};
20
+ __export(chunk_GB7245FH_exports, {
21
21
  AIChatType: () => AIChatType,
22
22
  ApiAuthorization: () => ApiAuthorization,
23
23
  AutomationAction: () => AutomationAction,
@@ -28,8 +28,8 @@ __export(chunk_H3RSMGJG_exports, {
28
28
  ServiceType: () => ServiceType,
29
29
  categoryIcons: () => categoryIcons
30
30
  });
31
- module.exports = __toCommonJS(chunk_H3RSMGJG_exports);
32
- var import_chunk_TQEDPRY5 = require("./chunk-TQEDPRY5.cjs");
31
+ module.exports = __toCommonJS(chunk_GB7245FH_exports);
32
+ var import_chunk_EQYHOTGG = require("./chunk-EQYHOTGG.cjs");
33
33
  var import_conductor = require("@dxos/conductor");
34
34
  var import_echo_schema = require("@dxos/echo-schema");
35
35
  var import_functions = require("@dxos/functions");
@@ -146,7 +146,7 @@ var ServiceType = class extends (0, import_echo_schema.TypedObject)({
146
146
  };
147
147
  var AutomationAction;
148
148
  (function(AutomationAction2) {
149
- const AUTOMATION_ACTION = `${import_chunk_TQEDPRY5.AUTOMATION_PLUGIN}/action`;
149
+ const AUTOMATION_ACTION = `${import_chunk_EQYHOTGG.AUTOMATION_PLUGIN}/action`;
150
150
  class Create extends import_echo_schema2.S.TaggedClass()(`${AUTOMATION_ACTION}/create`, {
151
151
  input: import_echo_schema2.S.Struct({
152
152
  name: import_echo_schema2.S.optional(import_echo_schema2.S.String)
@@ -170,4 +170,4 @@ var AutomationAction;
170
170
  ServiceType,
171
171
  categoryIcons
172
172
  });
173
- //# sourceMappingURL=chunk-H3RSMGJG.cjs.map
173
+ //# sourceMappingURL=chunk-GB7245FH.cjs.map