@dxos/plugin-automation 0.7.5-labs.e27f9b9 → 0.7.5-labs.f5080a1

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 (154) hide show
  1. package/dist/lib/browser/AutomationPanel-YPD3AGQN.mjs +8 -0
  2. package/dist/lib/browser/ChatContainer-ODZECATM.mjs +12 -0
  3. package/dist/lib/browser/{ai-client-AARXEMMJ.mjs → ai-client-UJLNYP7B.mjs} +3 -3
  4. package/dist/lib/browser/{app-graph-builder-B4U34VSR.mjs → app-graph-builder-3H5TCRG4.mjs} +2 -2
  5. package/dist/lib/browser/{chunk-7XADMUOW.mjs → chunk-43WRHV2L.mjs} +21 -76
  6. package/dist/lib/browser/chunk-43WRHV2L.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-HZ4TA7HY.mjs → chunk-BQHXJZ4K.mjs} +2 -2
  8. package/dist/lib/browser/{chunk-5SLV6AUA.mjs → chunk-DL7XA62G.mjs} +344 -180
  9. package/dist/lib/browser/chunk-DL7XA62G.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-HKX3D3ZP.mjs → chunk-DQ7ZSYJJ.mjs} +2 -2
  11. package/dist/lib/browser/{chunk-HKX3D3ZP.mjs.map → chunk-DQ7ZSYJJ.mjs.map} +2 -2
  12. package/dist/lib/browser/{chunk-IYSMXX6Q.mjs → chunk-PQGFC2ZO.mjs} +13 -12
  13. package/dist/lib/{node-esm/chunk-3KB5HRXA.mjs.map → browser/chunk-PQGFC2ZO.mjs.map} +3 -3
  14. package/dist/lib/browser/{chunk-RAVNWHNE.mjs → chunk-Z54KIF6H.mjs} +5 -5
  15. package/dist/lib/browser/chunk-Z54KIF6H.mjs.map +7 -0
  16. package/dist/lib/browser/index.mjs +11 -10
  17. package/dist/lib/browser/index.mjs.map +3 -3
  18. package/dist/lib/browser/{intent-resolver-754MPV7H.mjs → intent-resolver-5YVZJFS3.mjs} +3 -3
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-surface-4QZ6AKBF.mjs → react-surface-WRHRCEV5.mjs} +9 -9
  21. package/dist/lib/browser/react-surface-WRHRCEV5.mjs.map +7 -0
  22. package/dist/lib/browser/types/index.mjs +6 -6
  23. package/dist/lib/node/{AutomationPanel-LRDEDGXI.cjs → AutomationPanel-CO26O75P.cjs} +7 -7
  24. package/dist/lib/node/{AutomationPanel-LRDEDGXI.cjs.map → AutomationPanel-CO26O75P.cjs.map} +2 -2
  25. package/dist/lib/node/{ChatContainer-6LZX4K2Z.cjs → ChatContainer-5URBEXQD.cjs} +10 -10
  26. package/dist/lib/node/ChatContainer-5URBEXQD.cjs.map +7 -0
  27. package/dist/lib/node/{ai-client-SA35GN5Q.cjs → ai-client-AOB6TLNW.cjs} +7 -7
  28. package/dist/lib/node/{app-graph-builder-ENVDOPS4.cjs → app-graph-builder-CDEQJEHY.cjs} +14 -14
  29. package/dist/lib/node/{chunk-ZS5RZ7RM.cjs → chunk-AWZVJZ2I.cjs} +6 -6
  30. package/dist/lib/node/{chunk-HEYQONXC.cjs → chunk-D2QQXWOY.cjs} +26 -26
  31. package/dist/lib/node/{chunk-HEYQONXC.cjs.map → chunk-D2QQXWOY.cjs.map} +3 -3
  32. package/dist/lib/node/chunk-H3RSMGJG.cjs +173 -0
  33. package/dist/lib/node/chunk-H3RSMGJG.cjs.map +7 -0
  34. package/dist/lib/node/{chunk-6VMSH4P6.cjs → chunk-NH7STAX6.cjs} +392 -241
  35. package/dist/lib/node/chunk-NH7STAX6.cjs.map +7 -0
  36. package/dist/lib/node/{chunk-WWU5FVAO.cjs → chunk-OCW5GAVZ.cjs} +9 -9
  37. package/dist/lib/node/chunk-OCW5GAVZ.cjs.map +7 -0
  38. package/dist/lib/node/{chunk-5VF5JKUN.cjs → chunk-TQEDPRY5.cjs} +5 -5
  39. package/dist/lib/node/{chunk-5VF5JKUN.cjs.map → chunk-TQEDPRY5.cjs.map} +2 -2
  40. package/dist/lib/node/index.cjs +73 -72
  41. package/dist/lib/node/index.cjs.map +3 -3
  42. package/dist/lib/node/{intent-resolver-CNVBSG4E.cjs → intent-resolver-MJFZT5IU.cjs} +8 -8
  43. package/dist/lib/node/meta.json +1 -1
  44. package/dist/lib/node/{react-surface-5HYLBDC3.cjs → react-surface-HDAVE6NU.cjs} +18 -18
  45. package/dist/lib/node/react-surface-HDAVE6NU.cjs.map +7 -0
  46. package/dist/lib/node/types/index.cjs +13 -13
  47. package/dist/lib/node/types/index.cjs.map +1 -1
  48. package/dist/lib/node-esm/{AutomationPanel-ZV7VEEPP.mjs → AutomationPanel-VQZUKPK2.mjs} +3 -3
  49. package/dist/lib/node-esm/{ChatContainer-PPVMC2FC.mjs → ChatContainer-23QIVDG5.mjs} +5 -5
  50. package/dist/lib/node-esm/{ai-client-2ZA4TYFZ.mjs → ai-client-RUCCJ7JZ.mjs} +3 -3
  51. package/dist/lib/node-esm/{app-graph-builder-IYOUCQZT.mjs → app-graph-builder-GR3URVNX.mjs} +2 -2
  52. package/dist/lib/node-esm/{chunk-EVTLHDM2.mjs → chunk-7JO77AAS.mjs} +21 -76
  53. package/dist/lib/node-esm/chunk-7JO77AAS.mjs.map +7 -0
  54. package/dist/lib/node-esm/{chunk-X3LPRWIL.mjs → chunk-JFHI22MF.mjs} +2 -2
  55. package/dist/lib/node-esm/{chunk-X3LPRWIL.mjs.map → chunk-JFHI22MF.mjs.map} +2 -2
  56. package/dist/lib/node-esm/{chunk-WISKXX7U.mjs → chunk-JJFWFS6P.mjs} +344 -180
  57. package/dist/lib/node-esm/chunk-JJFWFS6P.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-ISYLEDVU.mjs → chunk-LSSWQIQD.mjs} +2 -2
  59. package/dist/lib/node-esm/{chunk-MS7OIGVR.mjs → chunk-NSVQZ3EH.mjs} +5 -5
  60. package/dist/lib/node-esm/chunk-NSVQZ3EH.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-3KB5HRXA.mjs → chunk-VN2AFV25.mjs} +13 -12
  62. package/dist/lib/{browser/chunk-IYSMXX6Q.mjs.map → node-esm/chunk-VN2AFV25.mjs.map} +3 -3
  63. package/dist/lib/node-esm/index.mjs +11 -10
  64. package/dist/lib/node-esm/index.mjs.map +3 -3
  65. package/dist/lib/node-esm/{intent-resolver-RQBXW442.mjs → intent-resolver-FCKNRTKQ.mjs} +3 -3
  66. package/dist/lib/node-esm/meta.json +1 -1
  67. package/dist/lib/node-esm/{react-surface-SS5WCRJ2.mjs → react-surface-FZ5OFRDE.mjs} +9 -9
  68. package/dist/lib/node-esm/react-surface-FZ5OFRDE.mjs.map +7 -0
  69. package/dist/lib/node-esm/types/index.mjs +6 -6
  70. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  71. package/dist/types/src/components/ChatContainer/ChatContainer.d.ts +0 -1
  72. package/dist/types/src/components/ChatContainer/ChatContainer.d.ts.map +1 -1
  73. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts.map +1 -1
  74. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -1
  75. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  76. package/dist/types/src/hooks/index.d.ts +3 -1
  77. package/dist/types/src/hooks/index.d.ts.map +1 -1
  78. package/dist/types/src/hooks/processor.d.ts +7 -2
  79. package/dist/types/src/hooks/processor.d.ts.map +1 -1
  80. package/dist/types/src/hooks/useChatProcessor.d.ts +7 -0
  81. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -0
  82. package/dist/types/src/hooks/useMessageQueue.d.ts +41 -0
  83. package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -0
  84. package/dist/types/src/hooks/useServices.d.ts +7 -0
  85. package/dist/types/src/hooks/useServices.d.ts.map +1 -0
  86. package/dist/types/src/meta.d.ts.map +1 -1
  87. package/dist/types/src/testing/index.d.ts +2 -1
  88. package/dist/types/src/testing/index.d.ts.map +1 -1
  89. package/dist/types/src/testing/{testing.d.ts → test-functions.d.ts} +1 -1
  90. package/dist/types/src/testing/test-functions.d.ts.map +1 -0
  91. package/dist/types/src/testing/test-services.d.ts +5 -0
  92. package/dist/types/src/testing/test-services.d.ts.map +1 -0
  93. package/dist/types/src/types/registry.d.ts +7 -6
  94. package/dist/types/src/types/registry.d.ts.map +1 -1
  95. package/dist/types/src/types/schema.d.ts +94 -69
  96. package/dist/types/src/types/schema.d.ts.map +1 -1
  97. package/package.json +50 -50
  98. package/src/AutomationPlugin.tsx +2 -2
  99. package/src/capabilities/react-surface.tsx +4 -2
  100. package/src/components/ChatContainer/ChatContainer.tsx +15 -80
  101. package/src/components/ServiceRegistry/ServiceRegistry.stories.tsx +2 -1
  102. package/src/components/ServiceRegistry/ServiceRegistry.tsx +7 -7
  103. package/src/components/Thread/StatusLine.tsx +1 -1
  104. package/src/components/Thread/Tabbed.stories.tsx +1 -1
  105. package/src/components/Thread/Thread.tsx +1 -1
  106. package/src/components/Thread/ThreadMessage.tsx +24 -16
  107. package/src/components/Thread/ToggleContainer.stories.tsx +1 -1
  108. package/src/components/TriggerEditor/TriggerEditor.tsx +2 -4
  109. package/src/hooks/index.ts +3 -1
  110. package/src/hooks/processor.ts +16 -7
  111. package/src/hooks/useChatProcessor.tsx +86 -0
  112. package/src/hooks/useMessageQueue.ts +23 -0
  113. package/src/hooks/{useServiceRegistry.ts → useServices.ts} +8 -2
  114. package/src/meta.ts +2 -1
  115. package/src/testing/index.ts +2 -1
  116. package/src/testing/test-services.ts +131 -0
  117. package/src/types/registry.ts +17 -80
  118. package/src/types/schema.ts +20 -8
  119. package/dist/lib/browser/AutomationPanel-WFJZAW4F.mjs +0 -8
  120. package/dist/lib/browser/ChatContainer-OFCOZ5T2.mjs +0 -12
  121. package/dist/lib/browser/chunk-5SLV6AUA.mjs.map +0 -7
  122. package/dist/lib/browser/chunk-7XADMUOW.mjs.map +0 -7
  123. package/dist/lib/browser/chunk-RAVNWHNE.mjs.map +0 -7
  124. package/dist/lib/browser/react-surface-4QZ6AKBF.mjs.map +0 -7
  125. package/dist/lib/node/ChatContainer-6LZX4K2Z.cjs.map +0 -7
  126. package/dist/lib/node/chunk-6VMSH4P6.cjs.map +0 -7
  127. package/dist/lib/node/chunk-LU4HQWJD.cjs +0 -226
  128. package/dist/lib/node/chunk-LU4HQWJD.cjs.map +0 -7
  129. package/dist/lib/node/chunk-WWU5FVAO.cjs.map +0 -7
  130. package/dist/lib/node/react-surface-5HYLBDC3.cjs.map +0 -7
  131. package/dist/lib/node-esm/chunk-EVTLHDM2.mjs.map +0 -7
  132. package/dist/lib/node-esm/chunk-MS7OIGVR.mjs.map +0 -7
  133. package/dist/lib/node-esm/chunk-WISKXX7U.mjs.map +0 -7
  134. package/dist/lib/node-esm/react-surface-SS5WCRJ2.mjs.map +0 -7
  135. package/dist/types/src/hooks/useServiceRegistry.d.ts +0 -3
  136. package/dist/types/src/hooks/useServiceRegistry.d.ts.map +0 -1
  137. package/dist/types/src/testing/testing.d.ts.map +0 -1
  138. /package/dist/lib/browser/{AutomationPanel-WFJZAW4F.mjs.map → AutomationPanel-YPD3AGQN.mjs.map} +0 -0
  139. /package/dist/lib/browser/{ChatContainer-OFCOZ5T2.mjs.map → ChatContainer-ODZECATM.mjs.map} +0 -0
  140. /package/dist/lib/browser/{ai-client-AARXEMMJ.mjs.map → ai-client-UJLNYP7B.mjs.map} +0 -0
  141. /package/dist/lib/browser/{app-graph-builder-B4U34VSR.mjs.map → app-graph-builder-3H5TCRG4.mjs.map} +0 -0
  142. /package/dist/lib/browser/{chunk-HZ4TA7HY.mjs.map → chunk-BQHXJZ4K.mjs.map} +0 -0
  143. /package/dist/lib/browser/{intent-resolver-754MPV7H.mjs.map → intent-resolver-5YVZJFS3.mjs.map} +0 -0
  144. /package/dist/lib/node/{ai-client-SA35GN5Q.cjs.map → ai-client-AOB6TLNW.cjs.map} +0 -0
  145. /package/dist/lib/node/{app-graph-builder-ENVDOPS4.cjs.map → app-graph-builder-CDEQJEHY.cjs.map} +0 -0
  146. /package/dist/lib/node/{chunk-ZS5RZ7RM.cjs.map → chunk-AWZVJZ2I.cjs.map} +0 -0
  147. /package/dist/lib/node/{intent-resolver-CNVBSG4E.cjs.map → intent-resolver-MJFZT5IU.cjs.map} +0 -0
  148. /package/dist/lib/node-esm/{AutomationPanel-ZV7VEEPP.mjs.map → AutomationPanel-VQZUKPK2.mjs.map} +0 -0
  149. /package/dist/lib/node-esm/{ChatContainer-PPVMC2FC.mjs.map → ChatContainer-23QIVDG5.mjs.map} +0 -0
  150. /package/dist/lib/node-esm/{ai-client-2ZA4TYFZ.mjs.map → ai-client-RUCCJ7JZ.mjs.map} +0 -0
  151. /package/dist/lib/node-esm/{app-graph-builder-IYOUCQZT.mjs.map → app-graph-builder-GR3URVNX.mjs.map} +0 -0
  152. /package/dist/lib/node-esm/{chunk-ISYLEDVU.mjs.map → chunk-LSSWQIQD.mjs.map} +0 -0
  153. /package/dist/lib/node-esm/{intent-resolver-RQBXW442.mjs.map → intent-resolver-FCKNRTKQ.mjs.map} +0 -0
  154. /package/src/testing/{testing.ts → test-functions.ts} +0 -0
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_6VMSH4P6_exports = {};
30
- __export(chunk_6VMSH4P6_exports, {
29
+ var chunk_NH7STAX6_exports = {};
30
+ __export(chunk_NH7STAX6_exports, {
31
31
  AiClient: () => AiClient,
32
32
  AppGraphBuilder: () => AppGraphBuilder,
33
33
  ChatContainer: () => ChatContainer,
@@ -36,88 +36,91 @@ __export(chunk_6VMSH4P6_exports, {
36
36
  MarkdownViewer: () => MarkdownViewer,
37
37
  ReactSurface: () => ReactSurface,
38
38
  Thread: () => Thread,
39
- useServiceRegistry: () => useServiceRegistry
39
+ useServices: () => useServices
40
40
  });
41
- module.exports = __toCommonJS(chunk_6VMSH4P6_exports);
42
- var import_chunk_ZS5RZ7RM = require("./chunk-ZS5RZ7RM.cjs");
43
- var import_chunk_LU4HQWJD = require("./chunk-LU4HQWJD.cjs");
44
- var import_chunk_5VF5JKUN = require("./chunk-5VF5JKUN.cjs");
41
+ module.exports = __toCommonJS(chunk_NH7STAX6_exports);
42
+ var import_chunk_AWZVJZ2I = require("./chunk-AWZVJZ2I.cjs");
43
+ var import_chunk_H3RSMGJG = require("./chunk-H3RSMGJG.cjs");
44
+ var import_chunk_TQEDPRY5 = require("./chunk-TQEDPRY5.cjs");
45
45
  var import_react = __toESM(require("react"));
46
- var import_app_framework = require("@dxos/app-framework");
47
- var import_artifact = require("@dxos/artifact");
48
- var import_functions = require("@dxos/functions");
49
46
  var import_invariant = require("@dxos/invariant");
50
- var import_keys = require("@dxos/keys");
51
- var import_react_client = require("@dxos/react-client");
52
- var import_echo = require("@dxos/react-client/echo");
53
- var import_react_edge_client = require("@dxos/react-edge-client");
54
47
  var import_react_ui_stack = require("@dxos/react-ui-stack");
55
- var import_util = require("@dxos/util");
56
- var import_app_framework2 = require("@dxos/app-framework");
57
48
  var import_signals_core = require("@preact/signals-core");
58
- var import_artifact2 = require("@dxos/artifact");
49
+ var import_artifact = require("@dxos/artifact");
59
50
  var import_assistant = require("@dxos/assistant");
60
51
  var import_echo_schema = require("@dxos/echo-schema");
61
52
  var import_invariant2 = require("@dxos/invariant");
62
53
  var import_log = require("@dxos/log");
63
54
  var import_react2 = require("react");
55
+ var import_app_framework = require("@dxos/app-framework");
56
+ var import_artifact2 = require("@dxos/artifact");
57
+ var import_functions = require("@dxos/functions");
58
+ var import_react_client = require("@dxos/react-client");
59
+ var import_echo = require("@dxos/react-client/echo");
60
+ var import_util = require("@dxos/util");
61
+ var import_app_framework2 = require("@dxos/app-framework");
62
+ var import_artifact3 = require("@dxos/artifact");
63
+ var import_echo_schema2 = require("@dxos/echo-schema");
64
+ var import_functions2 = require("@dxos/functions");
65
+ var import_log2 = require("@dxos/log");
66
+ var import_echo2 = require("@dxos/react-client/echo");
67
+ var import_jsonpointer = __toESM(require("jsonpointer"));
68
+ var import_artifact4 = require("@dxos/artifact");
69
+ var import_echo_schema3 = require("@dxos/echo-schema");
70
+ var import_invariant3 = require("@dxos/invariant");
71
+ var import_log3 = require("@dxos/log");
72
+ var import_util2 = require("@dxos/util");
64
73
  var import_react3 = require("react");
65
74
  var import_async = require("@dxos/async");
66
75
  var import_context = require("@dxos/context");
67
- var import_functions2 = require("@dxos/functions");
68
76
  var import_functions3 = require("@dxos/functions");
69
- var import_invariant3 = require("@dxos/invariant");
70
- var import_log2 = require("@dxos/log");
71
- var import_react_client2 = require("@dxos/react-client");
72
- var import_echo2 = require("@dxos/react-client/echo");
73
- var import_async2 = require("@dxos/async");
74
- var import_echo_db = require("@dxos/echo-db");
75
77
  var import_functions4 = require("@dxos/functions");
76
78
  var import_invariant4 = require("@dxos/invariant");
77
- var import_keys2 = require("@dxos/keys");
78
- var import_log3 = require("@dxos/log");
79
- var import_artifact3 = require("@dxos/artifact");
80
- var import_echo_schema2 = require("@dxos/echo-schema");
81
- var import_functions5 = require("@dxos/functions");
82
79
  var import_log4 = require("@dxos/log");
80
+ var import_react_client2 = require("@dxos/react-client");
83
81
  var import_echo3 = require("@dxos/react-client/echo");
84
- var import_jsonpointer = __toESM(require("jsonpointer"));
85
- var import_artifact4 = require("@dxos/artifact");
86
- var import_echo_schema3 = require("@dxos/echo-schema");
82
+ var import_async2 = require("@dxos/async");
83
+ var import_echo_db = require("@dxos/echo-db");
84
+ var import_functions5 = require("@dxos/functions");
87
85
  var import_invariant5 = require("@dxos/invariant");
86
+ var import_keys = require("@dxos/keys");
88
87
  var import_log5 = require("@dxos/log");
89
- var import_util2 = require("@dxos/util");
90
- var import_react4 = __toESM(require("react"));
88
+ var import_react4 = require("react");
89
+ var import_keys2 = require("@dxos/keys");
90
+ var import_echo4 = require("@dxos/react-client/echo");
91
+ var import_react_edge_client = require("@dxos/react-edge-client");
92
+ var import_react5 = require("react");
93
+ var import_artifact5 = require("@dxos/artifact");
94
+ var import_echo_schema4 = require("@dxos/echo-schema");
95
+ var import_echo_schema5 = require("@dxos/echo-schema");
96
+ var import_react6 = __toESM(require("react"));
91
97
  var import_react_ui = require("@dxos/react-ui");
92
98
  var import_react_ui_sfx = require("@dxos/react-ui-sfx");
93
99
  var import_react_ui_theme = require("@dxos/react-ui-theme");
94
- var import_react5 = __toESM(require("react"));
100
+ var import_react7 = __toESM(require("react"));
95
101
  var import_invariant6 = require("@dxos/invariant");
96
102
  var import_react_ui_theme2 = require("@dxos/react-ui-theme");
97
- var import_react6 = __toESM(require("react"));
103
+ var import_react8 = __toESM(require("react"));
98
104
  var import_invariant7 = require("@dxos/invariant");
105
+ var import_log6 = require("@dxos/log");
99
106
  var import_react_ui2 = require("@dxos/react-ui");
100
107
  var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highlighter");
101
108
  var import_react_ui_theme3 = require("@dxos/react-ui-theme");
102
109
  var import_util3 = require("@dxos/util");
103
- var import_react7 = __toESM(require("react"));
110
+ var import_react9 = __toESM(require("react"));
104
111
  var import_react_ui_theme4 = require("@dxos/react-ui-theme");
105
- var import_react8 = __toESM(require("react"));
112
+ var import_react10 = __toESM(require("react"));
106
113
  var import_react_ui3 = require("@dxos/react-ui");
107
114
  var import_react_ui_theme5 = require("@dxos/react-ui-theme");
108
- var import_react9 = __toESM(require("react"));
115
+ var import_react11 = __toESM(require("react"));
109
116
  var import_react_markdown = __toESM(require("react-markdown"));
110
117
  var import_react_ui_syntax_highlighter2 = require("@dxos/react-ui-syntax-highlighter");
111
118
  var import_react_ui_theme6 = require("@dxos/react-ui-theme");
112
119
  var import_util4 = require("@dxos/util");
113
- var AiClient = (0, import_app_framework2.lazy)(() => import("./ai-client-SA35GN5Q.cjs"));
114
- var AppGraphBuilder = (0, import_app_framework2.lazy)(() => import("./app-graph-builder-ENVDOPS4.cjs"));
115
- var IntentResolver = (0, import_app_framework2.lazy)(() => import("./intent-resolver-CNVBSG4E.cjs"));
116
- var ReactSurface = (0, import_app_framework2.lazy)(() => import("./react-surface-5HYLBDC3.cjs"));
117
120
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/hooks/processor.ts";
118
121
  var defaultOptions = {
119
122
  model: "@anthropic/claude-3-5-sonnet-20241022",
120
- systemPrompt: ""
123
+ systemPrompt: "you are a helpful assistant"
121
124
  };
122
125
  var ChatProcessor = class {
123
126
  constructor(_client, _tools, _extensions, _options = defaultOptions) {
@@ -138,7 +141,7 @@ var ChatProcessor = class {
138
141
  const current = messages.pop();
139
142
  (0, import_invariant2.invariant)(current, void 0, {
140
143
  F: __dxlog_file,
141
- L: 76,
144
+ L: 78,
142
145
  S: this,
143
146
  A: [
144
147
  "current",
@@ -173,13 +176,19 @@ var ChatProcessor = class {
173
176
  });
174
177
  }
175
178
  /**
179
+ * Update tools.
180
+ */
181
+ setTools(tools) {
182
+ this._tools = tools;
183
+ }
184
+ /**
176
185
  * Make GPT request.
177
186
  */
178
187
  async request(message, options = {}) {
179
188
  (0, import_signals_core.batch)(() => {
180
189
  this._history = options.history ?? [];
181
190
  this._pending.value = [
182
- (0, import_echo_schema.createStatic)(import_artifact2.Message, {
191
+ (0, import_echo_schema.createStatic)(import_artifact.Message, {
183
192
  role: "user",
184
193
  content: [
185
194
  {
@@ -202,7 +211,7 @@ var ChatProcessor = class {
202
211
  async cancel() {
203
212
  import_log.log.info("cancelling...", void 0, {
204
213
  F: __dxlog_file,
205
- L: 132,
214
+ L: 141,
206
215
  S: this,
207
216
  C: (f, a) => f(...a)
208
217
  });
@@ -231,7 +240,7 @@ var ChatProcessor = class {
231
240
  messages: this._pending.value.length
232
241
  }, {
233
242
  F: __dxlog_file,
234
- L: 156,
243
+ L: 165,
235
244
  S: this,
236
245
  C: (f, a) => f(...a)
237
246
  });
@@ -250,7 +259,7 @@ var ChatProcessor = class {
250
259
  messages: this._pending.value
251
260
  }, {
252
261
  F: __dxlog_file,
253
- L: 169,
262
+ L: 178,
254
263
  S: this,
255
264
  C: (f, a) => f(...a)
256
265
  });
@@ -258,7 +267,7 @@ var ChatProcessor = class {
258
267
  const message = this._pending.value.at(-1);
259
268
  (0, import_invariant2.invariant)(message, void 0, {
260
269
  F: __dxlog_file,
261
- L: 174,
270
+ L: 183,
262
271
  S: this,
263
272
  A: [
264
273
  "message",
@@ -268,7 +277,7 @@ var ChatProcessor = class {
268
277
  if ((0, import_assistant.isToolUse)(message)) {
269
278
  import_log.log.info("tool request...", void 0, {
270
279
  F: __dxlog_file,
271
- L: 176,
280
+ L: 185,
272
281
  S: this,
273
282
  C: (f, a) => f(...a)
274
283
  });
@@ -281,7 +290,7 @@ var ChatProcessor = class {
281
290
  response
282
291
  }, {
283
292
  F: __dxlog_file,
284
- L: 183,
293
+ L: 192,
285
294
  S: this,
286
295
  C: (f, a) => f(...a)
287
296
  });
@@ -302,14 +311,14 @@ var ChatProcessor = class {
302
311
  err
303
312
  }, {
304
313
  F: __dxlog_file,
305
- L: 195,
314
+ L: 204,
306
315
  S: this,
307
316
  C: (f, a) => f(...a)
308
317
  });
309
318
  } finally {
310
319
  import_log.log.info("done", void 0, {
311
320
  F: __dxlog_file,
312
- L: 197,
321
+ L: 206,
313
322
  S: this,
314
323
  C: (f, a) => f(...a)
315
324
  });
@@ -317,32 +326,20 @@ var ChatProcessor = class {
317
326
  }
318
327
  }
319
328
  };
320
- var useServiceRegistry = (query) => {
321
- const registry = (0, import_react2.useMemo)(() => new import_chunk_LU4HQWJD.MockServiceRegistry(), []);
322
- const [services, setServices] = (0, import_react2.useState)([]);
323
- (0, import_react2.useEffect)(() => {
324
- const t = setTimeout(async () => {
325
- const services2 = await registry.queryServices(query);
326
- setServices(services2);
327
- });
328
- return () => clearTimeout(t);
329
- }, [
330
- query,
331
- registry
332
- ]);
333
- return services;
334
- };
335
- var registerTriggersMutex = new import_async.Mutex();
329
+ var AiClient = (0, import_app_framework2.lazy)(() => import("./ai-client-AOB6TLNW.cjs"));
330
+ var AppGraphBuilder = (0, import_app_framework2.lazy)(() => import("./app-graph-builder-CDEQJEHY.cjs"));
331
+ var IntentResolver = (0, import_app_framework2.lazy)(() => import("./intent-resolver-MJFZT5IU.cjs"));
332
+ var ReactSurface = (0, import_app_framework2.lazy)(() => import("./react-surface-HDAVE6NU.cjs"));
336
333
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/tools/function.ts";
337
334
  var covertFunctionToTool = (fn, edgeUrl, spaceId) => {
338
335
  if (!fn.description || !fn.inputSchema) {
339
336
  return void 0;
340
337
  }
341
- const existingFunctionUrl = (0, import_functions5.getUserFunctionUrlInMetadata)((0, import_echo3.getMeta)(fn));
338
+ const existingFunctionUrl = (0, import_functions2.getUserFunctionUrlInMetadata)((0, import_echo2.getMeta)(fn));
342
339
  if (!existingFunctionUrl) {
343
340
  return void 0;
344
341
  }
345
- const url = (0, import_functions5.getInvocationUrl)(existingFunctionUrl, edgeUrl, {
342
+ const url = (0, import_functions2.getInvocationUrl)(existingFunctionUrl, edgeUrl, {
346
343
  spaceId
347
344
  });
348
345
  return (0, import_artifact3.defineTool)({
@@ -350,7 +347,7 @@ var covertFunctionToTool = (fn, edgeUrl, spaceId) => {
350
347
  description: fn.description,
351
348
  schema: (0, import_echo_schema2.toEffectSchema)(fn.inputSchema),
352
349
  execute: async (input) => {
353
- import_log4.log.info("execute function tool", {
350
+ import_log2.log.info("execute function tool", {
354
351
  name: fn.name,
355
352
  url,
356
353
  input
@@ -373,7 +370,7 @@ var covertFunctionToTool = (fn, edgeUrl, spaceId) => {
373
370
  };
374
371
  var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/tools/openapi.ts";
375
372
  var createToolsFromService = async (service) => {
376
- (0, import_invariant5.invariant)(service.interfaces?.length === 1 && service.interfaces[0].kind === "api", void 0, {
373
+ (0, import_invariant3.invariant)(service.interfaces?.length === 1 && service.interfaces[0].kind === "api", void 0, {
377
374
  F: __dxlog_file3,
378
375
  L: 22,
379
376
  S: void 0,
@@ -383,7 +380,7 @@ var createToolsFromService = async (service) => {
383
380
  ]
384
381
  });
385
382
  const iface = service.interfaces[0];
386
- (0, import_invariant5.invariant)(iface.schemaUrl, void 0, {
383
+ (0, import_invariant3.invariant)(iface.schemaUrl, void 0, {
387
384
  F: __dxlog_file3,
388
385
  L: 24,
389
386
  S: void 0,
@@ -392,7 +389,7 @@ var createToolsFromService = async (service) => {
392
389
  ""
393
390
  ]
394
391
  });
395
- (0, import_invariant5.invariant)(iface.schemaUrl, void 0, {
392
+ (0, import_invariant3.invariant)(iface.schemaUrl, void 0, {
396
393
  F: __dxlog_file3,
397
394
  L: 25,
398
395
  S: void 0,
@@ -408,7 +405,7 @@ var createToolsFromService = async (service) => {
408
405
  var createToolsFromApi = async (url, options) => {
409
406
  const res = await fetch(url);
410
407
  const spec = await res.json();
411
- (0, import_log5.log)("spec", {
408
+ (0, import_log3.log)("spec", {
412
409
  spec
413
410
  }, {
414
411
  F: __dxlog_file3,
@@ -424,7 +421,7 @@ var createToolsFromApi = async (url, options) => {
424
421
  const { ...methods } = pathItem;
425
422
  for (const [method, m] of Object.entries(methods)) {
426
423
  const methodItem = m;
427
- (0, import_log5.log)("methodItem", {
424
+ (0, import_log3.log)("methodItem", {
428
425
  path,
429
426
  method,
430
427
  methodItem
@@ -444,7 +441,7 @@ var createToolsFromApi = async (url, options) => {
444
441
  };
445
442
  const endpointParameters = [];
446
443
  for (const parameter of parametersResolved) {
447
- (0, import_log5.log)("parameter", {
444
+ (0, import_log3.log)("parameter", {
448
445
  parameter
449
446
  }, {
450
447
  F: __dxlog_file3,
@@ -467,7 +464,7 @@ var createToolsFromApi = async (url, options) => {
467
464
  }
468
465
  }
469
466
  }
470
- (0, import_log5.log)("inputSchema", {
467
+ (0, import_log3.log)("inputSchema", {
471
468
  inputSchema
472
469
  }, {
473
470
  F: __dxlog_file3,
@@ -478,7 +475,7 @@ var createToolsFromApi = async (url, options) => {
478
475
  import_echo_schema3.S.validateSync(import_echo_schema3.JsonSchemaType)(inputSchema);
479
476
  const description = methodItem.description ?? methodItem.summary;
480
477
  if (!description) {
481
- import_log5.log.warn("no description", {
478
+ import_log3.log.warn("no description", {
482
479
  path,
483
480
  method
484
481
  }, {
@@ -553,7 +550,7 @@ var GENERIC_WORDS = [
553
550
  "endpoint"
554
551
  ];
555
552
  var callApiEndpoint = async (endpoint, input) => {
556
- import_log5.log.info("endpoint", {
553
+ import_log3.log.info("endpoint", {
557
554
  method: endpoint.method,
558
555
  name: endpoint.path,
559
556
  input
@@ -613,7 +610,7 @@ var callApiEndpoint = async (endpoint, input) => {
613
610
  request.body = JSON.stringify(body);
614
611
  request.headers["Content-Type"] = "application/json";
615
612
  }
616
- import_log5.log.info("request", {
613
+ import_log3.log.info("request", {
617
614
  url,
618
615
  request
619
616
  }, {
@@ -623,7 +620,7 @@ var callApiEndpoint = async (endpoint, input) => {
623
620
  C: (f, a) => f(...a)
624
621
  });
625
622
  const response = await fetch(url, request);
626
- import_log5.log.info("response", {
623
+ import_log3.log.info("response", {
627
624
  ok: response.ok,
628
625
  status: response.status,
629
626
  statusText: response.statusText
@@ -649,7 +646,7 @@ var callApiEndpoint = async (endpoint, input) => {
649
646
  } catch {
650
647
  error = responseBody;
651
648
  }
652
- import_log5.log.error("error", {
649
+ import_log3.log.error("error", {
653
650
  error
654
651
  }, {
655
652
  F: __dxlog_file3,
@@ -660,7 +657,7 @@ var callApiEndpoint = async (endpoint, input) => {
660
657
  throw new Error(error.message);
661
658
  } else {
662
659
  const error = await response.text();
663
- import_log5.log.error("error", {
660
+ import_log3.log.error("error", {
664
661
  error
665
662
  }, {
666
663
  F: __dxlog_file3,
@@ -677,7 +674,7 @@ var getEndpointUrl = (endpoint) => {
677
674
  if (isV3_1(endpoint.document) && endpoint.document.servers && endpoint.document.servers.length > 0) {
678
675
  url = endpoint.document.servers[0].url;
679
676
  } else {
680
- (0, import_invariant5.invariant)(!isV3_1(endpoint.document), void 0, {
677
+ (0, import_invariant3.invariant)(!isV3_1(endpoint.document), void 0, {
681
678
  F: __dxlog_file3,
682
679
  L: 272,
683
680
  S: void 0,
@@ -697,7 +694,7 @@ var getEndpointUrl = (endpoint) => {
697
694
  var resolveAuthorization = async (authorization) => {
698
695
  switch (authorization.type) {
699
696
  case "api-key": {
700
- (0, import_invariant5.invariant)(authorization.placement.type === "authorization-header", void 0, {
697
+ (0, import_invariant3.invariant)(authorization.placement.type === "authorization-header", void 0, {
701
698
  F: __dxlog_file3,
702
699
  L: 288,
703
700
  S: void 0,
@@ -732,7 +729,7 @@ var resolveJsonSchema = (schema, base) => {
732
729
  if (resolved) {
733
730
  return recurse(resolved);
734
731
  } else {
735
- import_log5.log.warn("unresolved", {
732
+ import_log3.log.warn("unresolved", {
736
733
  ref: value.$ref,
737
734
  base
738
735
  }, {
@@ -750,11 +747,204 @@ var resolveJsonSchema = (schema, base) => {
750
747
  var isV3_1 = (document) => {
751
748
  return document.openapi === "3.0.1";
752
749
  };
750
+ var useChatProcessor = (chat) => {
751
+ const aiClient = (0, import_app_framework.useCapability)(import_chunk_AWZVJZ2I.AutomationCapabilities.AiClient);
752
+ const globalTools = (0, import_app_framework.useCapabilities)(import_app_framework.Capabilities.Tools);
753
+ const artifactDefinitions = (0, import_app_framework.useCapabilities)(import_app_framework.Capabilities.ArtifactDefinition);
754
+ const { dispatchPromise: dispatch } = (0, import_app_framework.useIntentDispatcher)();
755
+ const space = (0, import_echo.getSpace)(chat);
756
+ const services = (0, import_echo.useQuery)(space, import_echo.Filter.schema(import_chunk_H3RSMGJG.ServiceType));
757
+ const [serviceTools, setServiceTools] = (0, import_react2.useState)([]);
758
+ (0, import_react2.useEffect)(() => {
759
+ queueMicrotask(async () => {
760
+ const tools2 = await Promise.all(services.map((service) => createToolsFromService(service)));
761
+ setServiceTools(tools2.flat());
762
+ });
763
+ }, [
764
+ services
765
+ ]);
766
+ const config = (0, import_react_client.useConfig)();
767
+ const functions2 = (0, import_echo.useQuery)(space, import_echo.Filter.schema(import_functions.FunctionType));
768
+ const tools = (0, import_react2.useMemo)(() => [
769
+ ...globalTools.flat(),
770
+ ...artifactDefinitions.flatMap((definition) => definition.tools),
771
+ ...serviceTools,
772
+ ...functions2.map((fn) => covertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? "", space?.id)).filter(import_util.isNotNullOrUndefined)
773
+ ], [
774
+ globalTools,
775
+ artifactDefinitions,
776
+ serviceTools,
777
+ functions2,
778
+ space?.id
779
+ ]);
780
+ const systemPrompt = (0, import_react2.useMemo)(() => (0, import_artifact2.createSystemPrompt)({
781
+ artifacts: artifactDefinitions.map((definition) => definition.instructions)
782
+ }), [
783
+ artifactDefinitions
784
+ ]);
785
+ const processor = (0, import_react2.useMemo)(() => new ChatProcessor(aiClient, tools, {
786
+ space,
787
+ dispatch
788
+ }, {
789
+ model: "@anthropic/claude-3-5-sonnet-20241022",
790
+ systemPrompt
791
+ }), [
792
+ aiClient,
793
+ tools,
794
+ space,
795
+ dispatch,
796
+ systemPrompt
797
+ ]);
798
+ return processor;
799
+ };
800
+ var registerTriggersMutex = new import_async.Mutex();
801
+ var useMessageQueue = (chat) => {
802
+ const edgeClient = (0, import_react_edge_client.useEdgeClient)();
803
+ const space = (0, import_echo4.getSpace)(chat);
804
+ const queueDxn = (0, import_react4.useMemo)(() => new import_keys2.DXN(import_keys2.DXN.kind.QUEUE, [
805
+ import_keys2.QueueSubspaceTags.DATA,
806
+ space.id,
807
+ chat.queue.dxn.parts.at(-1)
808
+ ]), [
809
+ chat.queue.dxn
810
+ ]);
811
+ return (0, import_react_edge_client.useQueue)(edgeClient, queueDxn);
812
+ };
813
+ var functions = [
814
+ {
815
+ name: "example.com/function/chess",
816
+ version: "0.1.0",
817
+ inputSchema: (0, import_echo_schema4.toJsonSchema)(import_echo_schema4.S.Struct({
818
+ level: import_echo_schema4.S.Number.annotations({
819
+ [import_echo_schema4.AST.TitleAnnotationId]: "Level"
820
+ })
821
+ }))
822
+ },
823
+ {
824
+ name: "example.com/function/forex",
825
+ version: "0.1.0",
826
+ binding: "FOREX",
827
+ inputSchema: (0, import_echo_schema4.toJsonSchema)(import_echo_schema4.S.Struct({
828
+ from: import_echo_schema4.S.String.annotations({
829
+ [import_echo_schema4.AST.TitleAnnotationId]: "Currency from"
830
+ }),
831
+ to: import_echo_schema4.S.String.annotations({
832
+ [import_echo_schema4.AST.TitleAnnotationId]: "Currency to"
833
+ })
834
+ }))
835
+ }
836
+ ];
837
+ var MockServiceRegistry = class {
838
+ async queryServices(query) {
839
+ return TEST_SERVICES;
840
+ }
841
+ };
842
+ var AMADEUS_AUTH = {
843
+ type: "oauth",
844
+ clientId: "BOEnpLd1sMyKjAPGKYeAPFFy60u53QEG",
845
+ clientSecret: "n4qldSN7usvD57gm",
846
+ tokenUrl: "https://test.api.amadeus.com/v1/security/oauth2/token",
847
+ grantType: "client_credentials"
848
+ };
849
+ var VISUAL_CROSSING_CREDENTIALS = {
850
+ type: "api-key",
851
+ key: "FDPRVS953KB4GQQLD25GRT975",
852
+ placement: {
853
+ type: "query",
854
+ name: "key"
855
+ }
856
+ };
857
+ var TEST_SERVICES = [
858
+ (0, import_echo_schema5.createStatic)(import_chunk_H3RSMGJG.ServiceType, {
859
+ serviceId: "amadeus.com/service/FlightSearch",
860
+ name: "Amadeus Flight Search",
861
+ description: "Search for local and international flights.",
862
+ category: "travel",
863
+ interfaces: [
864
+ {
865
+ kind: "api",
866
+ schemaUrl: "https://api.apis.guru/v2/specs/amadeus.com/amadeus-flight-availabilities-search/1.0.2/swagger.json",
867
+ authorization: AMADEUS_AUTH
868
+ }
869
+ ]
870
+ }),
871
+ (0, import_echo_schema5.createStatic)(import_chunk_H3RSMGJG.ServiceType, {
872
+ serviceId: "amadeus.com/service/HotelSearch",
873
+ name: "Amadeus Hotel Search",
874
+ description: "Search for local and international hotels.",
875
+ category: "travel",
876
+ interfaces: [
877
+ {
878
+ kind: "api",
879
+ schemaUrl: "https://api.apis.guru/v2/specs/amadeus.com/amadeus-hotel-search/3.0.8/swagger.json",
880
+ authorization: AMADEUS_AUTH
881
+ }
882
+ ]
883
+ }),
884
+ (0, import_echo_schema5.createStatic)(import_chunk_H3RSMGJG.ServiceType, {
885
+ serviceId: "visualcrossing.com/service/Weather",
886
+ name: "Visual Crossing Weather",
887
+ description: "Search for global weather forecasts.",
888
+ category: "weather",
889
+ interfaces: [
890
+ {
891
+ kind: "api",
892
+ schemaUrl: "https://api.apis.guru/v2/specs/visualcrossing.com/weather/4.6/openapi.json",
893
+ authorization: VISUAL_CROSSING_CREDENTIALS
894
+ }
895
+ ]
896
+ }),
897
+ // TODO(burdon): Needs auth.
898
+ (0, import_echo_schema5.createStatic)(import_chunk_H3RSMGJG.ServiceType, {
899
+ serviceId: "abstractapi.com/service/GeoLocation",
900
+ name: "Abstract GeoLocation",
901
+ description: "Get the location of any IP address.",
902
+ category: "geolocation",
903
+ interfaces: [
904
+ {
905
+ kind: "api",
906
+ schemaUrl: "https://api.apis.guru/v2/specs/abstractapi.com/geolocation/1.0.0/openapi.json"
907
+ }
908
+ ]
909
+ }),
910
+ //
911
+ // Testing
912
+ //
913
+ ...Array.from({
914
+ length: 20
915
+ }, (_, i) => (0, import_echo_schema5.createStatic)(import_chunk_H3RSMGJG.ServiceType, {
916
+ serviceId: `example.com/service/test-${i}`,
917
+ name: `Test ${i}`,
918
+ description: `Test ${i}`,
919
+ category: Object.keys(import_chunk_H3RSMGJG.categoryIcons)[Math.floor(Math.random() * Object.keys(import_chunk_H3RSMGJG.categoryIcons).length)],
920
+ interfaces: [
921
+ {
922
+ kind: "api",
923
+ schemaUrl: "https://petstore.swagger.io/v2/swagger.json"
924
+ }
925
+ ]
926
+ }))
927
+ ];
928
+ var useServices = (space, query) => {
929
+ const registry = (0, import_react5.useMemo)(() => new MockServiceRegistry(), []);
930
+ const [services, setServices] = (0, import_react5.useState)([]);
931
+ (0, import_react5.useEffect)(() => {
932
+ const t = setTimeout(async () => {
933
+ const services2 = await registry.queryServices(query);
934
+ setServices(services2);
935
+ });
936
+ return () => clearTimeout(t);
937
+ }, [
938
+ query,
939
+ registry
940
+ ]);
941
+ return services;
942
+ };
753
943
  var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/components/Thread/ScrollContainer.tsx";
754
- var ScrollContainer = /* @__PURE__ */ (0, import_react5.forwardRef)(({ children, classNames }, forwardedRef) => {
755
- const containerRef = (0, import_react5.useRef)(null);
756
- const autoScrollRef = (0, import_react5.useRef)(false);
757
- (0, import_react5.useImperativeHandle)(forwardedRef, () => ({
944
+ var ScrollContainer = /* @__PURE__ */ (0, import_react7.forwardRef)(({ children, classNames }, forwardedRef) => {
945
+ const containerRef = (0, import_react7.useRef)(null);
946
+ const autoScrollRef = (0, import_react7.useRef)(false);
947
+ (0, import_react7.useImperativeHandle)(forwardedRef, () => ({
758
948
  scrollToBottom: () => {
759
949
  (0, import_invariant6.invariant)(containerRef.current, void 0, {
760
950
  F: __dxlog_file4,
@@ -772,8 +962,8 @@ var ScrollContainer = /* @__PURE__ */ (0, import_react5.forwardRef)(({ children,
772
962
  autoScrollRef.current = false;
773
963
  }
774
964
  }), []);
775
- const [sticky, setSticky] = (0, import_react5.useState)(true);
776
- (0, import_react5.useEffect)(() => {
965
+ const [sticky, setSticky] = (0, import_react7.useState)(true);
966
+ (0, import_react7.useEffect)(() => {
777
967
  if (!sticky || !containerRef.current) {
778
968
  return;
779
969
  }
@@ -785,7 +975,7 @@ var ScrollContainer = /* @__PURE__ */ (0, import_react5.forwardRef)(({ children,
785
975
  }, [
786
976
  children
787
977
  ]);
788
- (0, import_react5.useEffect)(() => {
978
+ (0, import_react7.useEffect)(() => {
789
979
  (0, import_invariant6.invariant)(containerRef.current, void 0, {
790
980
  F: __dxlog_file4,
791
981
  L: 62,
@@ -801,7 +991,7 @@ var ScrollContainer = /* @__PURE__ */ (0, import_react5.forwardRef)(({ children,
801
991
  containerRef.current.addEventListener("scrollend", handleScrollEnd);
802
992
  return () => containerRef.current?.removeEventListener("scrollend", handleScrollEnd);
803
993
  }, []);
804
- const handleScroll = (0, import_react5.useCallback)((ev) => {
994
+ const handleScroll = (0, import_react7.useCallback)((ev) => {
805
995
  if (autoScrollRef.current) {
806
996
  return;
807
997
  }
@@ -809,7 +999,7 @@ var ScrollContainer = /* @__PURE__ */ (0, import_react5.forwardRef)(({ children,
809
999
  const sticky2 = scrollTop + clientHeight >= scrollHeight;
810
1000
  setSticky(sticky2);
811
1001
  }, []);
812
- return /* @__PURE__ */ import_react5.default.createElement("div", {
1002
+ return /* @__PURE__ */ import_react7.default.createElement("div", {
813
1003
  ref: containerRef,
814
1004
  onScroll: handleScroll,
815
1005
  className: (0, import_react_ui_theme2.mx)("flex flex-col grow overflow-y-scroll scrollbar-none", classNames)
@@ -817,20 +1007,20 @@ var ScrollContainer = /* @__PURE__ */ (0, import_react5.forwardRef)(({ children,
817
1007
  });
818
1008
  var emptyLines = [];
819
1009
  var StatusLine = ({ classNames, line = -1, lines = emptyLines, transition = 300, advance = 1e3, autoAdvance }) => {
820
- const containerRef = (0, import_react7.useRef)(null);
821
- const [currentLine, setCurrentLine] = (0, import_react7.useState)(line);
822
- (0, import_react7.useEffect)(() => {
1010
+ const containerRef = (0, import_react9.useRef)(null);
1011
+ const [currentLine, setCurrentLine] = (0, import_react9.useState)(line);
1012
+ (0, import_react9.useEffect)(() => {
823
1013
  setCurrentLine(line);
824
1014
  }, [
825
1015
  line
826
1016
  ]);
827
- (0, import_react7.useEffect)(() => {
1017
+ (0, import_react9.useEffect)(() => {
828
1018
  if (!autoAdvance) {
829
1019
  return;
830
1020
  }
831
1021
  const next = () => {
832
1022
  setCurrentLine((prev) => {
833
- if (prev === lines.length - 1) {
1023
+ if (prev >= lines.length - 1) {
834
1024
  clearInterval(interval);
835
1025
  return prev;
836
1026
  }
@@ -845,7 +1035,7 @@ var StatusLine = ({ classNames, line = -1, lines = emptyLines, transition = 300,
845
1035
  autoAdvance,
846
1036
  advance
847
1037
  ]);
848
- (0, import_react7.useEffect)(() => {
1038
+ (0, import_react9.useEffect)(() => {
849
1039
  if (containerRef.current) {
850
1040
  containerRef.current.style.transition = `transform ${transition}ms ease-in-out`;
851
1041
  containerRef.current.style.transform = `translateY(-${currentLine * 24}px)`;
@@ -853,25 +1043,25 @@ var StatusLine = ({ classNames, line = -1, lines = emptyLines, transition = 300,
853
1043
  }, [
854
1044
  currentLine
855
1045
  ]);
856
- return /* @__PURE__ */ import_react7.default.createElement("div", {
1046
+ return /* @__PURE__ */ import_react9.default.createElement("div", {
857
1047
  className: (0, import_react_ui_theme4.mx)("relative h-[24px] overflow-hidden", classNames)
858
- }, /* @__PURE__ */ import_react7.default.createElement("div", {
1048
+ }, /* @__PURE__ */ import_react9.default.createElement("div", {
859
1049
  ref: containerRef,
860
1050
  className: "h-[24px]"
861
- }, /* @__PURE__ */ import_react7.default.createElement("div", {
1051
+ }, /* @__PURE__ */ import_react9.default.createElement("div", {
862
1052
  className: "flex flex-col"
863
- }, lines.map((line2, i) => /* @__PURE__ */ import_react7.default.createElement("div", {
1053
+ }, lines.map((line2, i) => /* @__PURE__ */ import_react9.default.createElement("div", {
864
1054
  key: i,
865
1055
  className: (0, import_react_ui_theme4.mx)("flex h-[24px] items-center")
866
- }, /* @__PURE__ */ import_react7.default.createElement("span", {
1056
+ }, /* @__PURE__ */ import_react9.default.createElement("span", {
867
1057
  className: "truncate"
868
1058
  }, line2))))));
869
1059
  };
870
1060
  var ToggleContainer = ({ title, icon, toggle, defaultOpen, duration = 400, shrinkX = false, children, classNames }) => {
871
- const [expand, setExpand] = (0, import_react8.useState)(defaultOpen || !toggle);
872
- const [expandX, setExpandX] = (0, import_react8.useState)(shrinkX ? expand : true);
873
- const [expandY, setExpandY] = (0, import_react8.useState)(expand);
874
- (0, import_react8.useEffect)(() => {
1061
+ const [expand, setExpand] = (0, import_react10.useState)(defaultOpen || !toggle);
1062
+ const [expandX, setExpandX] = (0, import_react10.useState)(shrinkX ? expand : true);
1063
+ const [expandY, setExpandY] = (0, import_react10.useState)(expand);
1064
+ (0, import_react10.useEffect)(() => {
875
1065
  let t;
876
1066
  if (expand) {
877
1067
  if (shrinkX) {
@@ -892,14 +1082,14 @@ var ToggleContainer = ({ title, icon, toggle, defaultOpen, duration = 400, shrin
892
1082
  }, [
893
1083
  expand
894
1084
  ]);
895
- return /* @__PURE__ */ import_react8.default.createElement("div", {
1085
+ return /* @__PURE__ */ import_react10.default.createElement("div", {
896
1086
  className: (0, import_react_ui_theme5.mx)("overflow-hidden", classNames)
897
- }, title && /* @__PURE__ */ import_react8.default.createElement("div", {
1087
+ }, title && /* @__PURE__ */ import_react10.default.createElement("div", {
898
1088
  className: "flex gap-1 py-1 items-center text-sm text-subdued cursor-pointer select-none",
899
1089
  onClick: toggle ? () => setExpand((open) => !open) : void 0
900
- }, toggle && /* @__PURE__ */ import_react8.default.createElement("div", {
1090
+ }, toggle && /* @__PURE__ */ import_react10.default.createElement("div", {
901
1091
  className: "flex w-[24px] h-[24px] items-center justify-center"
902
- }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui3.Icon, {
1092
+ }, /* @__PURE__ */ import_react10.default.createElement(import_react_ui3.Icon, {
903
1093
  size: 4,
904
1094
  icon: "ph--caret-right--regular",
905
1095
  style: {
@@ -909,61 +1099,61 @@ var ToggleContainer = ({ title, icon, toggle, defaultOpen, duration = 400, shrin
909
1099
  "transition transition-transform ease-in-out",
910
1100
  expand ? "rotate-90" : "transform-none"
911
1101
  ]
912
- })), /* @__PURE__ */ import_react8.default.createElement("div", {
1102
+ })), /* @__PURE__ */ import_react10.default.createElement("div", {
913
1103
  className: "flex-1 pis-1 pie-1 truncate"
914
- }, title), icon), /* @__PURE__ */ import_react8.default.createElement("div", {
1104
+ }, title), icon), /* @__PURE__ */ import_react10.default.createElement("div", {
915
1105
  style: {
916
1106
  transitionDuration: `${duration}ms`
917
1107
  },
918
1108
  className: (0, import_react_ui_theme5.mx)("grid transition-[grid-template-columns] ease-in-out", expandX ? "grid-cols-[1fr]" : "grid-cols-[0fr]")
919
- }, /* @__PURE__ */ import_react8.default.createElement("div", {
1109
+ }, /* @__PURE__ */ import_react10.default.createElement("div", {
920
1110
  className: "overflow-hidden"
921
- }, /* @__PURE__ */ import_react8.default.createElement("div", {
1111
+ }, /* @__PURE__ */ import_react10.default.createElement("div", {
922
1112
  style: {
923
1113
  transitionDuration: `${duration}ms`
924
1114
  },
925
1115
  className: (0, import_react_ui_theme5.mx)("grid transition-[grid-template-rows] ease-in-out", expandY ? "grid-rows-[1fr]" : "grid-rows-[0fr]")
926
- }, /* @__PURE__ */ import_react8.default.createElement("div", {
1116
+ }, /* @__PURE__ */ import_react10.default.createElement("div", {
927
1117
  className: (0, import_react_ui_theme5.mx)("flex overflow-hidden transition-opacity")
928
1118
  }, children)))));
929
1119
  };
930
1120
  var MarkdownViewer = ({ classNames, content = "" }) => {
931
- return /* @__PURE__ */ import_react9.default.createElement("div", {
1121
+ return /* @__PURE__ */ import_react11.default.createElement("div", {
932
1122
  className: (0, import_react_ui_theme6.mx)("space-y-2", classNames)
933
- }, /* @__PURE__ */ import_react9.default.createElement(import_react_markdown.default, {
1123
+ }, /* @__PURE__ */ import_react11.default.createElement(import_react_markdown.default, {
934
1124
  components: {
935
- a: ({ node, children, href, ...props }) => /* @__PURE__ */ import_react9.default.createElement("a", {
1125
+ a: ({ node, children, href, ...props }) => /* @__PURE__ */ import_react11.default.createElement("a", {
936
1126
  href,
937
1127
  className: "text-primary-500 hover:text-primary-500",
938
1128
  target: "_blank",
939
1129
  rel: "noopener noreferrer",
940
1130
  ...props
941
1131
  }, children),
942
- ol: ({ node, children, ...props }) => /* @__PURE__ */ import_react9.default.createElement("ol", {
1132
+ ol: ({ node, children, ...props }) => /* @__PURE__ */ import_react11.default.createElement("ol", {
943
1133
  className: "leading-tight list-decimal pl-6",
944
1134
  ...(0, import_util4.omit)(props, [
945
1135
  "ordered"
946
1136
  ])
947
1137
  }, children),
948
- ul: ({ node, children, ...props }) => /* @__PURE__ */ import_react9.default.createElement("ul", {
1138
+ ul: ({ node, children, ...props }) => /* @__PURE__ */ import_react11.default.createElement("ul", {
949
1139
  className: "leading-tight list-disc pl-6",
950
1140
  ...(0, import_util4.omit)(props, [
951
1141
  "ordered"
952
1142
  ])
953
1143
  }, children),
954
- li: ({ node, children, ...props }) => /* @__PURE__ */ import_react9.default.createElement("li", {
1144
+ li: ({ node, children, ...props }) => /* @__PURE__ */ import_react11.default.createElement("li", {
955
1145
  className: "",
956
1146
  ...(0, import_util4.omit)(props, [
957
1147
  "ordered"
958
1148
  ])
959
1149
  }, children),
960
- blockquote: ({ node, children, ...props }) => /* @__PURE__ */ import_react9.default.createElement("blockquote", {
1150
+ blockquote: ({ node, children, ...props }) => /* @__PURE__ */ import_react11.default.createElement("blockquote", {
961
1151
  className: "border-l-4 border-primary-500 pl-4 my-4 text-primary-500",
962
1152
  ...props
963
1153
  }, children),
964
1154
  code: ({ children, className }) => {
965
1155
  const [_, language] = /language-(\w+)/.exec(className || "") || [];
966
- return /* @__PURE__ */ import_react9.default.createElement(import_react_ui_syntax_highlighter2.SyntaxHighlighter, {
1156
+ return /* @__PURE__ */ import_react11.default.createElement(import_react_ui_syntax_highlighter2.SyntaxHighlighter, {
967
1157
  PreTag: "div",
968
1158
  language,
969
1159
  className: "p-0"
@@ -975,56 +1165,69 @@ var MarkdownViewer = ({ classNames, content = "" }) => {
975
1165
  var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/components/Thread/ThreadMessage.tsx";
976
1166
  var ThreadMessage = ({ classNames, message, collapse, debug, onSuggest, onDelete }) => {
977
1167
  if (typeof message !== "object") {
978
- return /* @__PURE__ */ import_react6.default.createElement("div", {
1168
+ return /* @__PURE__ */ import_react8.default.createElement("div", {
979
1169
  className: (0, import_react_ui_theme3.mx)(classNames)
980
1170
  }, message);
981
1171
  }
982
1172
  const { role, content = [] } = message;
983
- const tools = content.filter((block) => block.type === "tool_use" || block.type === "tool_result");
984
- if (collapse && tools.length > 0) {
1173
+ const toolBlocks = content.filter((block) => block.type === "tool_use" || block.type === "tool_result");
1174
+ if (collapse && toolBlocks.length > 0) {
985
1175
  let request;
986
- const lines = tools.map((tool) => {
987
- switch (tool.type) {
1176
+ const json = [];
1177
+ const lines = toolBlocks.map((block) => {
1178
+ switch (block.type) {
988
1179
  case "tool_use": {
989
- request = tool;
990
- return `Calling ${tool.name}...`;
1180
+ request = block;
1181
+ json.push(block);
1182
+ return `Calling ${block.name}...`;
991
1183
  }
992
1184
  case "tool_result": {
993
1185
  if (!request) {
1186
+ import_log6.log.warn("unexpected message", {
1187
+ tool: block
1188
+ }, {
1189
+ F: __dxlog_file5,
1190
+ L: 57,
1191
+ S: void 0,
1192
+ C: (f, a) => f(...a)
1193
+ });
994
1194
  return "Error";
995
1195
  }
1196
+ json.push(block);
996
1197
  return `Processed ${request.name}`;
997
1198
  }
998
- default:
1199
+ default: {
1200
+ request = void 0;
999
1201
  return "Error";
1202
+ }
1000
1203
  }
1001
1204
  });
1002
- return /* @__PURE__ */ import_react6.default.createElement("div", {
1205
+ return /* @__PURE__ */ import_react8.default.createElement("div", {
1003
1206
  className: (0, import_react_ui_theme3.mx)("flex", classNames)
1004
- }, /* @__PURE__ */ import_react6.default.createElement("div", {
1005
- className: "w-full p-1 px-2 overflow-hidden rounded-md bg-base"
1006
- }, /* @__PURE__ */ import_react6.default.createElement(ToggleContainer, {
1007
- title: /* @__PURE__ */ import_react6.default.createElement(StatusLine, {
1207
+ }, /* @__PURE__ */ import_react8.default.createElement("div", {
1208
+ className: "w-full p-1 px-2 overflow-hidden rounded-md bg-baseSurface"
1209
+ }, /* @__PURE__ */ import_react8.default.createElement(ToggleContainer, {
1210
+ title: /* @__PURE__ */ import_react8.default.createElement(StatusLine, {
1008
1211
  lines,
1009
1212
  autoAdvance: true
1010
1213
  }),
1011
1214
  toggle: true
1012
- }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_syntax_highlighter.Json, {
1013
- data: content[content.length - 1],
1215
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui_syntax_highlighter.Json, {
1216
+ data: json,
1014
1217
  classNames: "!p-1 text-xs"
1015
1218
  }))));
1016
1219
  }
1017
- return /* @__PURE__ */ import_react6.default.createElement("div", {
1220
+ return /* @__PURE__ */ import_react8.default.createElement("div", {
1018
1221
  className: (0, import_react_ui_theme3.mx)("flex flex-col shrink-0 gap-2")
1019
- }, debug && /* @__PURE__ */ import_react6.default.createElement("div", {
1222
+ }, debug && /* @__PURE__ */ import_react8.default.createElement("div", {
1020
1223
  className: "text-xs text-subdued"
1021
- }, message.id, " ", onDelete && /* @__PURE__ */ import_react6.default.createElement("span", {
1224
+ }, message.id, " ", onDelete && /* @__PURE__ */ import_react8.default.createElement("span", {
1022
1225
  className: "cursor-pointer underline",
1023
1226
  onClick: () => onDelete(message.id)
1024
- }, "delete")), content.map((block, idx) => /* @__PURE__ */ import_react6.default.createElement("div", {
1227
+ }, "delete")), content.map((block, idx) => /* @__PURE__ */ import_react8.default.createElement("div", {
1025
1228
  key: idx,
1026
1229
  className: (0, import_react_ui_theme3.mx)("flex", classNames, block.type === "text" && role === "user" && "justify-end")
1027
- }, /* @__PURE__ */ import_react6.default.createElement(Block, {
1230
+ }, /* @__PURE__ */ import_react8.default.createElement(Block, {
1028
1231
  role,
1029
1232
  block,
1030
1233
  onSuggest: onSuggest ?? (() => {
@@ -1033,25 +1236,24 @@ var ThreadMessage = ({ classNames, message, collapse, debug, onSuggest, onDelete
1033
1236
  };
1034
1237
  var Block = ({ block, role, onSuggest }) => {
1035
1238
  const Component = componentMap[block.type] ?? componentMap.default;
1036
- return /* @__PURE__ */ import_react6.default.createElement("div", {
1037
- className: (0, import_react_ui_theme3.mx)("p-1 px-2 overflow-hidden rounded-md", (block.type !== "text" || block.disposition) && "w-full bg-base", block.type === "text" && role === "user" && "bg-blue-200 dark:bg-blue-800")
1038
- }, /* @__PURE__ */ import_react6.default.createElement(Component, {
1239
+ return /* @__PURE__ */ import_react8.default.createElement("div", {
1240
+ className: (0, import_react_ui_theme3.mx)("p-1 px-2 overflow-hidden rounded-md", (block.type !== "text" || block.disposition) && "w-full bg-baseSurface", block.type === "text" && role === "user" && "bg-primary-200 dark:bg-primary-500")
1241
+ }, /* @__PURE__ */ import_react8.default.createElement(Component, {
1039
1242
  block,
1040
1243
  onSuggest
1041
1244
  }));
1042
1245
  };
1043
1246
  var titles = {
1044
1247
  ["cot"]: "Chain of thought",
1045
- // TODO(burdon): Only show if debugging.
1248
+ ["artifact"]: "Artifact",
1046
1249
  ["tool_use"]: "Tool request",
1047
- ["tool_result"]: "Tool result",
1048
- ["artifact"]: "Artifact"
1250
+ ["tool_result"]: "Tool result"
1049
1251
  };
1050
1252
  var componentMap = {
1051
1253
  text: ({ block }) => {
1052
1254
  (0, import_invariant7.invariant)(block.type === "text", void 0, {
1053
1255
  F: __dxlog_file5,
1054
- L: 128,
1256
+ L: 134,
1055
1257
  S: void 0,
1056
1258
  A: [
1057
1259
  "block.type === 'text'",
@@ -1060,23 +1262,23 @@ var componentMap = {
1060
1262
  });
1061
1263
  const title = block.disposition ? titles[block.disposition] : void 0;
1062
1264
  if (!title) {
1063
- return /* @__PURE__ */ import_react6.default.createElement(MarkdownViewer, {
1265
+ return /* @__PURE__ */ import_react8.default.createElement(MarkdownViewer, {
1064
1266
  content: block.text,
1065
1267
  classNames: [
1066
1268
  block.disposition === "cot" && "text-sm text-subdued"
1067
1269
  ]
1068
1270
  });
1069
1271
  }
1070
- return /* @__PURE__ */ import_react6.default.createElement(ToggleContainer, {
1272
+ return /* @__PURE__ */ import_react8.default.createElement(ToggleContainer, {
1071
1273
  title,
1072
- icon: block.pending ? /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Icon, {
1274
+ icon: block.pending ? /* @__PURE__ */ import_react8.default.createElement(import_react_ui2.Icon, {
1073
1275
  icon: "ph--circle-notch--regular",
1074
1276
  classNames: "text-subdued ml-2 animate-spin",
1075
1277
  size: 4
1076
1278
  }) : void 0,
1077
1279
  defaultOpen: block.disposition === "cot",
1078
1280
  toggle: true
1079
- }, /* @__PURE__ */ import_react6.default.createElement(MarkdownViewer, {
1281
+ }, /* @__PURE__ */ import_react8.default.createElement(MarkdownViewer, {
1080
1282
  content: block.text,
1081
1283
  classNames: [
1082
1284
  block.disposition === "cot" && "text-sm text-subdued"
@@ -1086,7 +1288,7 @@ var componentMap = {
1086
1288
  json: ({ block, onSuggest }) => {
1087
1289
  (0, import_invariant7.invariant)(block.type === "json", void 0, {
1088
1290
  F: __dxlog_file5,
1089
- L: 153,
1291
+ L: 159,
1090
1292
  S: void 0,
1091
1293
  A: [
1092
1294
  "block.type === 'json'",
@@ -1096,23 +1298,23 @@ var componentMap = {
1096
1298
  switch (block.disposition) {
1097
1299
  case "suggest": {
1098
1300
  const { text = "" } = (0, import_util3.safeParseJson)(block.json ?? "{}") ?? {};
1099
- return /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Button, {
1301
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_ui2.Button, {
1100
1302
  onClick: () => onSuggest(text)
1101
1303
  }, text);
1102
1304
  }
1103
1305
  case "select": {
1104
1306
  const { options = [] } = (0, import_util3.safeParseJson)(block.json ?? "{}") ?? {};
1105
- return /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.ButtonGroup, null, options.map((option) => /* @__PURE__ */ import_react6.default.createElement(import_react_ui2.Button, {
1307
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_ui2.ButtonGroup, null, options.map((option) => /* @__PURE__ */ import_react8.default.createElement(import_react_ui2.Button, {
1106
1308
  key: option,
1107
1309
  onClick: () => onSuggest(option)
1108
1310
  }, option)));
1109
1311
  }
1110
1312
  default: {
1111
1313
  const title = block.disposition ? titles[block.disposition] : void 0;
1112
- return /* @__PURE__ */ import_react6.default.createElement(ToggleContainer, {
1314
+ return /* @__PURE__ */ import_react8.default.createElement(ToggleContainer, {
1113
1315
  title: title ?? "JSON",
1114
1316
  toggle: true
1115
- }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_syntax_highlighter.Json, {
1317
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui_syntax_highlighter.Json, {
1116
1318
  data: (0, import_util3.safeParseJson)(block.json ?? block),
1117
1319
  classNames: "!p-1 text-xs"
1118
1320
  }));
@@ -1124,20 +1326,20 @@ var componentMap = {
1124
1326
  if (block.type === "tool_use") {
1125
1327
  title = `Tool [${block.name}]`;
1126
1328
  }
1127
- return /* @__PURE__ */ import_react6.default.createElement(ToggleContainer, {
1329
+ return /* @__PURE__ */ import_react8.default.createElement(ToggleContainer, {
1128
1330
  title: title ?? "JSON",
1129
1331
  toggle: true
1130
- }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_syntax_highlighter.Json, {
1332
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui_syntax_highlighter.Json, {
1131
1333
  data: block,
1132
1334
  classNames: "!p-1 text-xs"
1133
1335
  }));
1134
1336
  }
1135
1337
  };
1136
1338
  var Thread = ({ messages, streaming, collapse, debug, onSubmit, onStop, onSuggest, onDelete }) => {
1137
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_5VF5JKUN.AUTOMATION_PLUGIN);
1138
- const scroller = (0, import_react4.useRef)(null);
1139
- const [text, setText] = (0, import_react4.useState)("");
1140
- const handleKeyDown = (0, import_react4.useCallback)((ev) => {
1339
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_TQEDPRY5.AUTOMATION_PLUGIN);
1340
+ const scroller = (0, import_react6.useRef)(null);
1341
+ const [text, setText] = (0, import_react6.useState)("");
1342
+ const handleKeyDown = (0, import_react6.useCallback)((ev) => {
1141
1343
  switch (ev.key) {
1142
1344
  case "Escape": {
1143
1345
  setText("");
@@ -1156,7 +1358,7 @@ var Thread = ({ messages, streaming, collapse, debug, onSubmit, onStop, onSugges
1156
1358
  }, [
1157
1359
  text
1158
1360
  ]);
1159
- const { messages: lines = [] } = (0, import_react4.useMemo)(() => {
1361
+ const { messages: lines = [] } = (0, import_react6.useMemo)(() => {
1160
1362
  if (!collapse) {
1161
1363
  return {
1162
1364
  messages: messages ?? []
@@ -1214,12 +1416,12 @@ var Thread = ({ messages, streaming, collapse, debug, onSubmit, onStop, onSugges
1214
1416
  messages,
1215
1417
  collapse
1216
1418
  ]);
1217
- return /* @__PURE__ */ import_react4.default.createElement("div", {
1419
+ return /* @__PURE__ */ import_react6.default.createElement("div", {
1218
1420
  className: "flex flex-col grow overflow-hidden"
1219
- }, /* @__PURE__ */ import_react4.default.createElement(ScrollContainer, {
1421
+ }, /* @__PURE__ */ import_react6.default.createElement(ScrollContainer, {
1220
1422
  ref: scroller,
1221
1423
  classNames: "py-2 gap-2 overflow-x-hidden"
1222
- }, lines.map((message) => /* @__PURE__ */ import_react4.default.createElement(ThreadMessage, {
1424
+ }, lines.map((message) => /* @__PURE__ */ import_react6.default.createElement(ThreadMessage, {
1223
1425
  key: message.id,
1224
1426
  classNames: "px-4",
1225
1427
  message,
@@ -1227,18 +1429,18 @@ var Thread = ({ messages, streaming, collapse, debug, onSubmit, onStop, onSugges
1227
1429
  debug,
1228
1430
  onSuggest,
1229
1431
  onDelete
1230
- }))), onSubmit && /* @__PURE__ */ import_react4.default.createElement("div", {
1432
+ }))), onSubmit && /* @__PURE__ */ import_react6.default.createElement("div", {
1231
1433
  className: "flex p-4 gap-3 items-center"
1232
- }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui_sfx.Spinner, {
1434
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_sfx.Spinner, {
1233
1435
  active: streaming
1234
- }), /* @__PURE__ */ import_react4.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui.Input.TextInput, {
1436
+ }), /* @__PURE__ */ import_react6.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react6.default.createElement(import_react_ui.Input.TextInput, {
1235
1437
  autoFocus: true,
1236
- classNames: "px-2 bg-base rounded",
1438
+ classNames: "px-2 baseSurface rounded",
1237
1439
  placeholder: t("chat input placeholder"),
1238
1440
  value: text,
1239
1441
  onChange: (ev) => setText(ev.target.value),
1240
1442
  onKeyDown: handleKeyDown
1241
- })), onStop && /* @__PURE__ */ import_react4.default.createElement(import_react_ui.IconButton, {
1443
+ })), onStop && /* @__PURE__ */ import_react6.default.createElement(import_react_ui.IconButton, {
1242
1444
  disabled: !streaming,
1243
1445
  classNames: (0, import_react_ui_theme.mx)("!p-1 !opacity-20 transition", streaming && "!opacity-80"),
1244
1446
  variant: "ghost",
@@ -1251,79 +1453,26 @@ var Thread = ({ messages, streaming, collapse, debug, onSubmit, onStop, onSugges
1251
1453
  };
1252
1454
  var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-automation/src/components/ChatContainer/ChatContainer.tsx";
1253
1455
  var ChatContainer = ({ chat, role }) => {
1254
- const config = (0, import_react_client.useConfig)();
1255
- const space = (0, import_echo.getSpace)(chat);
1256
- const aiClient = (0, import_app_framework.useCapability)(import_chunk_ZS5RZ7RM.AutomationCapabilities.AiClient);
1257
- const artifactDefinitions = (0, import_app_framework.useCapabilities)(import_app_framework.Capabilities.ArtifactDefinition);
1258
- const globalTools = (0, import_app_framework.useCapabilities)(import_app_framework.Capabilities.Tools);
1259
- const functions = (0, import_echo.useQuery)(space, import_echo.Filter.schema(import_functions.FunctionType));
1260
- const serviceRegistry = (0, import_react.useMemo)(() => new import_chunk_LU4HQWJD.MockServiceRegistry(), []);
1261
- const [serviceTools, setServiceTools] = (0, import_react.useState)([]);
1262
- (0, import_react.useEffect)(() => {
1263
- queueMicrotask(async () => {
1264
- const services = await serviceRegistry.queryServices({});
1265
- const tools2 = await Promise.all(services.map((service) => createToolsFromService(service)));
1266
- setServiceTools(tools2.flat());
1267
- });
1268
- }, []);
1269
- const tools = (0, import_react.useMemo)(() => [
1270
- ...globalTools.flat(),
1271
- ...artifactDefinitions.flatMap((definition) => definition.tools),
1272
- ...functions.map((fn) => covertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? "", space?.id)).filter(import_util.isNotNullOrUndefined),
1273
- ...serviceTools
1274
- ], [
1275
- globalTools,
1276
- artifactDefinitions,
1277
- functions,
1278
- serviceTools,
1279
- space?.id
1280
- ]);
1281
- const systemPrompt = (0, import_react.useMemo)(() => (0, import_artifact.createSystemPrompt)({
1282
- artifacts: artifactDefinitions.map((definition) => definition.instructions)
1283
- }), [
1284
- artifactDefinitions
1285
- ]);
1286
- const { dispatchPromise: dispatch } = (0, import_app_framework.useIntentDispatcher)();
1287
- const processor = (0, import_react.useMemo)(() => new ChatProcessor(aiClient, tools, {
1288
- space,
1289
- dispatch
1290
- }, {
1291
- model: "@anthropic/claude-3-5-sonnet-20241022",
1292
- systemPrompt
1293
- }), [
1294
- aiClient,
1295
- tools,
1296
- space,
1297
- dispatch,
1298
- systemPrompt
1299
- ]);
1300
- const queueDxn = (0, import_react.useMemo)(() => new import_keys.DXN(import_keys.DXN.kind.QUEUE, [
1301
- import_keys.QueueSubspaceTags.DATA,
1302
- space.id,
1303
- chat.queue.dxn.parts.at(-1)
1304
- ]), [
1305
- chat.queue.dxn
1306
- ]);
1307
- const edgeClient = (0, import_react_edge_client.useEdgeClient)();
1308
- const messageQueue = (0, import_react_edge_client.useQueue)(edgeClient, queueDxn);
1456
+ const processor = useChatProcessor(chat);
1457
+ const messageQueue = useMessageQueue(chat);
1309
1458
  const messages = [
1310
1459
  ...messageQueue?.items ?? [],
1311
1460
  ...processor.messages.value
1312
1461
  ];
1313
- const handleSubmit = (0, import_react.useCallback)(async (message) => {
1462
+ const handleSubmit = (0, import_react.useCallback)(async (text) => {
1314
1463
  if (processor.streaming.value) {
1315
1464
  await processor.cancel();
1316
1465
  }
1317
1466
  (0, import_invariant.invariant)(messageQueue, void 0, {
1318
1467
  F: __dxlog_file6,
1319
- L: 95,
1468
+ L: 25,
1320
1469
  S: void 0,
1321
1470
  A: [
1322
1471
  "messageQueue",
1323
1472
  ""
1324
1473
  ]
1325
1474
  });
1326
- await processor.request(message, {
1475
+ await processor.request(text, {
1327
1476
  history: messageQueue.items,
1328
1477
  onComplete: (messages2) => messageQueue.append(messages2)
1329
1478
  });
@@ -1344,7 +1493,9 @@ var ChatContainer = ({ chat, role }) => {
1344
1493
  }, /* @__PURE__ */ import_react.default.createElement(Thread, {
1345
1494
  messages,
1346
1495
  streaming: processor.streaming.value,
1496
+ collapse: true,
1347
1497
  onSubmit: handleSubmit,
1498
+ onSuggest: handleSubmit,
1348
1499
  onStop: handleStop
1349
1500
  }));
1350
1501
  };
@@ -1359,6 +1510,6 @@ var ChatContainer_default = ChatContainer;
1359
1510
  MarkdownViewer,
1360
1511
  ReactSurface,
1361
1512
  Thread,
1362
- useServiceRegistry
1513
+ useServices
1363
1514
  });
1364
- //# sourceMappingURL=chunk-6VMSH4P6.cjs.map
1515
+ //# sourceMappingURL=chunk-NH7STAX6.cjs.map