@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,63 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { type PropsWithChildren, useState } from 'react';
6
+
7
+ import { Dialog, Icon, IconButton, useTranslation } from '@dxos/react-ui';
8
+ import { resizeAttributes, ResizeHandle, type Size, sizeStyle } from '@dxos/react-ui-dnd';
9
+
10
+ import { AUTOMATION_PLUGIN } from '../../meta';
11
+ import { Prompt } from '../Prompt';
12
+
13
+ const preventDefault = (event: Event) => event.preventDefault();
14
+
15
+ export const AmbientChatDialog = ({ children }: PropsWithChildren) => {
16
+ const { t } = useTranslation(AUTOMATION_PLUGIN);
17
+ const [size, setSize] = useState<Size>('min-content');
18
+ const [iter, setIter] = useState(0);
19
+ return (
20
+ <div role='none' className='dx-dialog__overlay bg-transparent pointer-events-none' data-block-align='end'>
21
+ <Dialog.Content
22
+ onInteractOutside={preventDefault}
23
+ classNames='pointer-events-auto relative overflow-hidden is-[500px] max-is-none'
24
+ inOverlayLayout
25
+ {...resizeAttributes}
26
+ style={{
27
+ ...sizeStyle(size, 'vertical'),
28
+ maxBlockSize: 'calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 8rem)',
29
+ }}
30
+ >
31
+ <ResizeHandle
32
+ key={iter}
33
+ side='block-start'
34
+ defaultSize='min-content'
35
+ minSize={5}
36
+ fallbackSize={5}
37
+ iconPosition='center'
38
+ onSizeChange={setSize}
39
+ />
40
+
41
+ <div className='flex w-full items-center'>
42
+ <Dialog.Title classNames='sr-only'>{t('ambient chat dialog title')}</Dialog.Title>
43
+ <Dialog.Close>
44
+ <Icon icon='ph--x--regular' size={4} />
45
+ </Dialog.Close>
46
+ <div className='grow' />
47
+ <IconButton
48
+ variant='ghost'
49
+ icon='ph--caret-down--regular'
50
+ iconOnly
51
+ label='Shrink'
52
+ onClick={() => {
53
+ setIter((iter) => iter + 1);
54
+ setSize('min-content');
55
+ }}
56
+ />
57
+ </div>
58
+
59
+ <Prompt autoFocus lineWrapping />
60
+ </Dialog.Content>
61
+ </div>
62
+ );
63
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './AmbientChatDialog';
@@ -6,6 +6,7 @@ import React from 'react';
6
6
 
7
7
  import { type ThemedClassName, useThemeContext } from '@dxos/react-ui';
8
8
  import {
9
+ type BasicExtensionsOptions,
9
10
  createBasicExtensions,
10
11
  createThemeExtensions,
11
12
  useTextEditor,
@@ -15,16 +16,18 @@ import { mx } from '@dxos/react-ui-theme';
15
16
 
16
17
  import { createAutocompleteExtension, type AutocompleteOptions } from './prompt-autocomplete';
17
18
 
18
- export type PromptProps = ThemedClassName<AutocompleteOptions & Pick<UseTextEditorProps, 'autoFocus'>>;
19
+ export type PromptProps = ThemedClassName<
20
+ AutocompleteOptions & Pick<UseTextEditorProps, 'autoFocus'> & Pick<BasicExtensionsOptions, 'lineWrapping'>
21
+ >;
19
22
 
20
- export const Prompt = ({ classNames, autoFocus, onEnter, onSuggest }: PromptProps) => {
23
+ export const Prompt = ({ classNames, autoFocus, lineWrapping = false, onEnter, onSuggest }: PromptProps) => {
21
24
  const { themeMode } = useThemeContext();
22
25
  const { parentRef } = useTextEditor({
23
26
  autoFocus,
24
27
  extensions: [
25
28
  createBasicExtensions({
26
29
  bracketMatching: false,
27
- lineWrapping: false,
30
+ lineWrapping,
28
31
  placeholder: 'Ask a question...',
29
32
  }),
30
33
  createThemeExtensions({ themeMode }),
@@ -25,7 +25,7 @@ export type AutocompleteOptions = {
25
25
  * @param text The current text before the cursor
26
26
  * @returns Array of suggestion strings
27
27
  */
28
- onSuggest: (text: string) => string[];
28
+ onSuggest?: (text: string) => string[];
29
29
  };
30
30
 
31
31
  class InlineSuggestionWidget extends WidgetType {
@@ -67,7 +67,7 @@ export const createAutocompleteExtension = ({ onEnter, onSuggest }: Autocomplete
67
67
 
68
68
  private computeDecorations(view: EditorView): DecorationSet {
69
69
  const text = view.state.doc.toString();
70
- const suggestions = onSuggest(text);
70
+ const suggestions = onSuggest?.(text) ?? [];
71
71
  if (!suggestions.length) {
72
72
  this._currentSuggestion = null;
73
73
  return Decoration.none;
@@ -14,7 +14,7 @@ import {
14
14
  useTextEditor,
15
15
  } from '@dxos/react-ui-editor';
16
16
  import { attentionSurface, groupBorder, mx } from '@dxos/react-ui-theme';
17
- import { nonNullable } from '@dxos/util';
17
+ import { isNonNullable } from '@dxos/util';
18
18
 
19
19
  import { nameRegex, promptExtension } from './prompt-extension';
20
20
  import { AUTOMATION_PLUGIN } from '../../meta';
@@ -69,7 +69,7 @@ const usePromptInputs = (prompt: ChainPromptType) => {
69
69
 
70
70
  // Create map of unclaimed inputs.
71
71
  const unclaimed = new Map<string, ChainInput>(
72
- prompt.inputs?.filter(nonNullable).map((input) => [input.name, input]),
72
+ prompt.inputs?.filter(isNonNullable).map((input) => [input.name, input]),
73
73
  );
74
74
  const missing: string[] = [];
75
75
  Array.from(variables.values()).forEach((name) => {
@@ -161,7 +161,7 @@ export const PromptEditor = ({ prompt, commandEditable = true }: PromptEditorPro
161
161
  {/* TODO(zan): Improve layout with grid */}
162
162
  <table className='w-full table-fixed border-collapse my-2'>
163
163
  <tbody>
164
- {prompt.inputs?.filter(nonNullable).map((input) => (
164
+ {prompt.inputs?.filter(isNonNullable).map((input) => (
165
165
  <tr key={input.name}>
166
166
  <td className='w-[160px] p-1 font-mono text-sm whitespace-nowrap truncate'>
167
167
  <code className='px-2'>{input.name}</code>
@@ -21,6 +21,7 @@ export const ServiceRegistry = ({ space }: { space: Space }) => {
21
21
  return matchingServices.map((service) => enabledServices.find((s) => s.serviceId === service.serviceId) ?? service);
22
22
  }, [matchingServices, enabledServices]);
23
23
 
24
+ // TODO(burdon): Reaplce with SpacePlugin intent.
24
25
  const handleSetEnabled = (service: ServiceType, enabled: boolean) => {
25
26
  if (enabled) {
26
27
  space.db.add(service);
@@ -53,7 +53,7 @@ const Render = ({ messages: _messages, ...props }: ThreadProps) => {
53
53
  );
54
54
 
55
55
  return (
56
- <div className='flex grow justify-center overflow-center bg-base'>
56
+ <div className='flex grow justify-center overflow-center bg-baseSurface'>
57
57
  <div className='flex w-[500px] bg-white dark:bg-black'>
58
58
  <Thread {...props} messages={messages} streaming={streaming} onSubmit={handleSubmit} onStop={() => {}} />
59
59
  </div>
@@ -4,6 +4,7 @@
4
4
 
5
5
  import { lazy } from 'react';
6
6
 
7
+ export * from './AmbientChatDialog';
7
8
  export * from './AutomationPanel';
8
9
  export * from './ChatContainer';
9
10
  export * from './MarkdownViewer';
@@ -9,7 +9,7 @@ import { createSystemPrompt, type Tool } from '@dxos/artifact';
9
9
  import { FunctionType } from '@dxos/functions';
10
10
  import { useConfig } from '@dxos/react-client';
11
11
  import { Filter, getSpace, useQuery } from '@dxos/react-client/echo';
12
- import { isNotNullOrUndefined } from '@dxos/util';
12
+ import { isNonNullable } from '@dxos/util';
13
13
 
14
14
  import { AutomationCapabilities } from '../capabilities';
15
15
  import { ChatProcessor } from '../hooks';
@@ -46,7 +46,7 @@ export const useChatProcessor = (chat: AIChatType) => {
46
46
  ...serviceTools,
47
47
  ...functions
48
48
  .map((fn) => covertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? '', space?.id))
49
- .filter(isNotNullOrUndefined),
49
+ .filter(isNonNullable),
50
50
  ],
51
51
  [globalTools, artifactDefinitions, serviceTools, functions, space?.id],
52
52
  );
package/src/meta.ts CHANGED
@@ -6,6 +6,8 @@ import { type PluginMeta } from '@dxos/app-framework';
6
6
 
7
7
  export const AUTOMATION_PLUGIN = 'dxos.org/plugin/automation';
8
8
 
9
+ export const AMBIENT_CHAT_DIALOG = `${AUTOMATION_PLUGIN}/ambient-chat/dialog`;
10
+
9
11
  export const meta = {
10
12
  id: AUTOMATION_PLUGIN,
11
13
  name: 'Automation',
@@ -12,8 +12,8 @@ import { createToolsFromApi, resolveAuthorization } from './openapi';
12
12
  import { ChatProcessor } from '../hooks';
13
13
  import type { ApiAuthorization } from '../types';
14
14
 
15
- describe('openapi', () => {
16
- describe('mapping', () => {
15
+ describe.skip('openapi', () => {
16
+ describe.skip('mapping', () => {
17
17
  test('amadeus flight availabilities', async () => {
18
18
  const tools = await createToolsFromApi(FLIGHT_SEARCH_API);
19
19
 
@@ -26,19 +26,16 @@ describe('openapi', () => {
26
26
 
27
27
  test('amadeus hotel search', async () => {
28
28
  const tools = await createToolsFromApi(HOTEL_SEARCH_API);
29
-
30
29
  log.info('tools', { tools });
31
30
  });
32
31
 
33
32
  test('amadeus hotel name autocomplete', async () => {
34
33
  const tools = await createToolsFromApi(HOTEL_NAME_AUTOCOMPLETE_API);
35
-
36
34
  log.info('tools', { tools });
37
35
  });
38
36
 
39
- test.only('weather', async () => {
37
+ test('weather', async () => {
40
38
  const tools = await createToolsFromApi(WEATHER_API, { authorization: VISUAL_CROSSING_CREDENTIALS });
41
-
42
39
  log.info('tools', { tools });
43
40
  });
44
41
  });
@@ -1,8 +0,0 @@
1
- import {
2
- AutomationPanel_default
3
- } from "./chunk-6KJRL5KV.mjs";
4
- import "./chunk-DQ7ZSYJJ.mjs";
5
- export {
6
- AutomationPanel_default as default
7
- };
8
- //# sourceMappingURL=AutomationPanel-CL2TWZT5.mjs.map
@@ -1,12 +0,0 @@
1
- import {
2
- ChatContainer,
3
- ChatContainer_default
4
- } from "./chunk-N4SSCQ7P.mjs";
5
- import "./chunk-BQHXJZ4K.mjs";
6
- import "./chunk-43WRHV2L.mjs";
7
- import "./chunk-DQ7ZSYJJ.mjs";
8
- export {
9
- ChatContainer,
10
- ChatContainer_default as default
11
- };
12
- //# sourceMappingURL=ChatContainer-EJ3IWL7Y.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { createExtension, toSignal } from '@dxos/plugin-graph';\nimport { memoizeQuery } from '@dxos/plugin-space';\nimport { getTypename, parseId, SpaceState } from '@dxos/react-client/echo';\n\nimport { AUTOMATION_PLUGIN } from '../meta';\n\nexport default (context: PluginsContext) => {\n const resolve = (typename: string) =>\n context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n return contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${AUTOMATION_PLUGIN}/service-registry`,\n resolver: ({ id }) => {\n if (!id.endsWith('~service-registry')) {\n return;\n }\n\n const type = 'orphan-settings-for-subject';\n const icon = 'ph--plugs--regular';\n\n const client = context.requestCapability(ClientCapabilities.Client);\n const [subjectId] = id.split('~');\n const { spaceId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find((space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY);\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label: ['service registry label', { ns: AUTOMATION_PLUGIN }],\n object: null,\n space,\n },\n };\n },\n }),\n createExtension({\n id: `${AUTOMATION_PLUGIN}/automation-for-subject`,\n resolver: ({ id }) => {\n if (!id.endsWith('~automation')) {\n return;\n }\n\n const type = 'orphan-settings-for-subject';\n const icon = 'ph--magic-wand--regular';\n\n const client = context.requestCapability(ClientCapabilities.Client);\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find((space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY);\n if (!objectId) {\n // TODO(burdon): Ref SPACE_PLUGIN ns.\n const label = space\n ? space.properties.name || ['unnamed space label', { ns: AUTOMATION_PLUGIN }]\n : ['unnamed object settings label', { ns: AUTOMATION_PLUGIN }];\n\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object || !subjectId) {\n return;\n }\n\n const meta = resolve(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object settings label', { ns: AUTOMATION_PLUGIN }];\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n object,\n },\n };\n },\n }),\n createExtension({\n id: `${AUTOMATION_PLUGIN}/assistant-for-subject`,\n resolver: ({ id }) => {\n if (!id.endsWith('~assistant')) {\n return;\n }\n\n const client = context.requestCapability(ClientCapabilities.Client);\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find((space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY);\n if (!objectId) {\n // TODO(wittjosiah): Support assistant for arbitrary subjects.\n // This is to ensure that the assistant panel is not stuck on an old object.\n return {\n id,\n type: 'orphan-automation-for-subject',\n data: null,\n properties: {\n icon: 'ph--atom--regular',\n label: ['assistant panel label', { ns: AUTOMATION_PLUGIN }],\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n return {\n id,\n type: 'orphan-automation-for-subject',\n data: null,\n properties: {\n icon: 'ph--atom--regular',\n label: ['assistant panel label', { ns: AUTOMATION_PLUGIN }],\n object,\n },\n };\n },\n }),\n ]);\n};\n"],
5
- "mappings": "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",
6
- "names": ["Capabilities", "contributes", "ClientCapabilities", "createExtension", "toSignal", "memoizeQuery", "getTypename", "parseId", "SpaceState", "context", "resolve", "typename", "requestCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "contributes", "AppGraphBuilder", "createExtension", "AUTOMATION_PLUGIN", "resolver", "endsWith", "type", "icon", "client", "requestCapability", "ClientCapabilities", "Client", "subjectId", "split", "spaceId", "parseId", "spaces", "toSignal", "onChange", "subscribe", "unsubscribe", "get", "space", "state", "SpaceState", "SPACE_READY", "data", "properties", "label", "ns", "object", "objectId", "name", "showResolvedThreads", "memoizeQuery", "meta", "getTypename", "placeholder"]
7
- }
@@ -1,284 +0,0 @@
1
- import {
2
- useServices
3
- } from "./chunk-N4SSCQ7P.mjs";
4
- import {
5
- ChainInputType,
6
- ServiceType,
7
- categoryIcons
8
- } from "./chunk-43WRHV2L.mjs";
9
- import {
10
- AUTOMATION_PLUGIN
11
- } from "./chunk-DQ7ZSYJJ.mjs";
12
-
13
- // packages/plugins/experimental/plugin-automation/src/components/PromptEditor/PromptEditor.tsx
14
- import React, { useEffect } from "react";
15
- import { createDocAccessor } from "@dxos/react-client/echo";
16
- import { Input, Select, useThemeContext, useTranslation } from "@dxos/react-ui";
17
- import { createBasicExtensions, createDataExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
18
- import { attentionSurface, groupBorder, mx as mx2 } from "@dxos/react-ui-theme";
19
- import { nonNullable } from "@dxos/util";
20
-
21
- // packages/plugins/experimental/plugin-automation/src/components/PromptEditor/prompt-extension.ts
22
- import { HighlightStyle, StreamLanguage, syntaxHighlighting } from "@codemirror/language";
23
- import { tags } from "@dxos/react-ui-editor";
24
- import { mx } from "@dxos/react-ui-theme";
25
- var nameRegex = /\{([\w-]+)}/;
26
- var parser = StreamLanguage.define({
27
- token: (stream) => {
28
- if (stream.eatSpace()) {
29
- return null;
30
- }
31
- if (stream.match(/^#.*/)) {
32
- return "lineComment";
33
- }
34
- if (stream.match(/^-+$/)) {
35
- return "lineComment";
36
- }
37
- if (stream.match(nameRegex)) {
38
- return "variableName";
39
- }
40
- stream.next();
41
- return null;
42
- }
43
- });
44
- var highlightStyles = HighlightStyle.define([
45
- {
46
- tag: tags.variableName,
47
- class: mx("rounded border border-yellow-500 bg-yellow-100 text-black font-mono text-sm")
48
- }
49
- ]);
50
- var promptExtension = [
51
- parser,
52
- syntaxHighlighting(highlightStyles)
53
- ];
54
-
55
- // packages/plugins/experimental/plugin-automation/src/components/PromptEditor/PromptEditor.tsx
56
- var inputTypes = [
57
- {
58
- value: ChainInputType.VALUE,
59
- label: "Value"
60
- },
61
- {
62
- value: ChainInputType.PASS_THROUGH,
63
- label: "Pass through"
64
- },
65
- {
66
- value: ChainInputType.RETRIEVER,
67
- label: "Retriever"
68
- },
69
- // {
70
- // value: ChainInputType.FUNCTION,
71
- // label: 'Function',
72
- // },
73
- // {
74
- // value: ChainInputType.QUERY,
75
- // label: 'Query',
76
- // },
77
- {
78
- value: ChainInputType.RESOLVER,
79
- label: "Resolver"
80
- },
81
- {
82
- value: ChainInputType.CONTEXT,
83
- label: "Context"
84
- },
85
- {
86
- value: ChainInputType.SCHEMA,
87
- label: "Schema"
88
- }
89
- ];
90
- var getInputType = (type) => inputTypes.find(({ value }) => String(value) === type)?.value;
91
- var usePromptInputs = (prompt) => {
92
- useEffect(() => {
93
- const text = prompt.template ?? "";
94
- if (!prompt.inputs) {
95
- prompt.inputs = [];
96
- }
97
- const regex = new RegExp(nameRegex, "g");
98
- const variables = new Set([
99
- ...text.matchAll(regex)
100
- ].map((m) => m[1]));
101
- const unclaimed = new Map(prompt.inputs?.filter(nonNullable).map((input) => [
102
- input.name,
103
- input
104
- ]));
105
- const missing = [];
106
- Array.from(variables.values()).forEach((name) => {
107
- if (unclaimed.has(name)) {
108
- unclaimed.delete(name);
109
- } else {
110
- missing.push(name);
111
- }
112
- });
113
- const values = unclaimed.values();
114
- missing.forEach((name) => {
115
- const next = values.next().value;
116
- if (next) {
117
- next.name = name;
118
- } else {
119
- prompt.inputs?.push({
120
- name
121
- });
122
- }
123
- });
124
- for (const input of values) {
125
- prompt.inputs.splice(prompt.inputs.indexOf(input), 1);
126
- }
127
- }, [
128
- prompt.template
129
- ]);
130
- };
131
- var PromptEditor = ({ prompt, commandEditable = true }) => {
132
- const { t } = useTranslation(AUTOMATION_PLUGIN);
133
- const { themeMode } = useThemeContext();
134
- const { parentRef } = useTextEditor(() => ({
135
- initialValue: prompt.template,
136
- extensions: [
137
- createDataExtensions({
138
- id: prompt.id,
139
- text: prompt.template !== void 0 ? createDocAccessor(prompt, [
140
- "template"
141
- ]) : void 0
142
- }),
143
- createBasicExtensions({
144
- bracketMatching: false,
145
- lineWrapping: true,
146
- placeholder: t("template placeholder")
147
- }),
148
- createThemeExtensions({
149
- themeMode,
150
- slots: {
151
- content: {
152
- className: "!p-3"
153
- }
154
- }
155
- }),
156
- promptExtension
157
- ]
158
- }), [
159
- themeMode,
160
- prompt
161
- ]);
162
- usePromptInputs(prompt);
163
- return /* @__PURE__ */ React.createElement("div", {
164
- className: mx2("flex flex-col w-full overflow-hidden gap-4", groupBorder)
165
- }, commandEditable && /* @__PURE__ */ React.createElement("div", {
166
- className: "flex items-center pl-4"
167
- }, /* @__PURE__ */ React.createElement("span", {
168
- className: "text-neutral-500"
169
- }, "/"), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
170
- placeholder: t("command placeholder"),
171
- classNames: mx2("is-full bg-transparent m-2"),
172
- value: prompt.command ?? "",
173
- onChange: (event) => {
174
- prompt.command = event.target.value.replace(/\w/g, "");
175
- }
176
- }))), /* @__PURE__ */ React.createElement("div", {
177
- ref: parentRef,
178
- className: mx2(attentionSurface, "rounded", "min-h-[120px]")
179
- }), (prompt.inputs?.length ?? 0) > 0 && /* @__PURE__ */ React.createElement("div", {
180
- className: "flex flex-col"
181
- }, /* @__PURE__ */ React.createElement("table", {
182
- className: "w-full table-fixed border-collapse my-2"
183
- }, /* @__PURE__ */ React.createElement("tbody", null, prompt.inputs?.filter(nonNullable).map((input) => /* @__PURE__ */ React.createElement("tr", {
184
- key: input.name
185
- }, /* @__PURE__ */ React.createElement("td", {
186
- className: "w-[160px] p-1 font-mono text-sm whitespace-nowrap truncate"
187
- }, /* @__PURE__ */ React.createElement("code", {
188
- className: "px-2"
189
- }, input.name)), /* @__PURE__ */ React.createElement("td", {
190
- className: "w-[120px] p-1"
191
- }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Select.Root, {
192
- value: String(input.type),
193
- onValueChange: (type) => {
194
- input.type = getInputType(type) ?? ChainInputType.VALUE;
195
- }
196
- }, /* @__PURE__ */ React.createElement(Select.TriggerButton, {
197
- placeholder: "Type",
198
- classNames: "is-full"
199
- }), /* @__PURE__ */ React.createElement(Select.Portal, null, /* @__PURE__ */ React.createElement(Select.Content, null, /* @__PURE__ */ React.createElement(Select.Viewport, null, inputTypes.map(({ value, label }) => /* @__PURE__ */ React.createElement(Select.Option, {
200
- key: value,
201
- value: String(value)
202
- }, label)))))))), /* @__PURE__ */ React.createElement("td", {
203
- className: "p-1 pr-2"
204
- }, input.type !== void 0 && [
205
- ChainInputType.VALUE,
206
- ChainInputType.CONTEXT,
207
- ChainInputType.RESOLVER,
208
- ChainInputType.SCHEMA
209
- ].includes(input.type) && /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
210
- placeholder: t("command placeholder"),
211
- classNames: mx2("is-full bg-transparent"),
212
- value: input.value ?? "",
213
- onChange: (event) => {
214
- input.value = event.target.value;
215
- }
216
- }))))))))));
217
- };
218
-
219
- // packages/plugins/experimental/plugin-automation/src/components/ServiceRegistry/ServiceRegistry.tsx
220
- import React2, { useMemo } from "react";
221
- import { Filter } from "@dxos/client/echo";
222
- import { useQuery } from "@dxos/react-client/echo";
223
- import { Icon, Input as Input2, List, ListItem } from "@dxos/react-ui";
224
- var ServiceRegistry = ({ space }) => {
225
- const matchingServices = useServices(space);
226
- const enabledServices = useQuery(space, Filter.schema(ServiceType));
227
- const services = useMemo(() => {
228
- return matchingServices.map((service) => enabledServices.find((s) => s.serviceId === service.serviceId) ?? service);
229
- }, [
230
- matchingServices,
231
- enabledServices
232
- ]);
233
- const handleSetEnabled = (service, enabled) => {
234
- if (enabled) {
235
- space.db.add(service);
236
- } else {
237
- space.db.remove(service);
238
- }
239
- };
240
- return /* @__PURE__ */ React2.createElement(List, {
241
- classNames: "h-full grid auto-rows-[5rem] gap-2 p-2 pis-2 pie-2 overflow-y-auto scrollbar-thin"
242
- }, services.map((service) => /* @__PURE__ */ React2.createElement(ServiceItem, {
243
- key: service.serviceId,
244
- service,
245
- enabled: service.enabled,
246
- setEnabled: (enabled) => handleSetEnabled(service, enabled)
247
- })));
248
- };
249
- var ServiceItem = ({ service, enabled, setEnabled }) => {
250
- return /* @__PURE__ */ React2.createElement(ListItem.Root, {
251
- classNames: "flex flex-col gap-1 p-1 overflow-hidden rounded-md border border-separator"
252
- }, /* @__PURE__ */ React2.createElement("div", {
253
- className: "grid grid-cols-[40px_1fr_40px]"
254
- }, /* @__PURE__ */ React2.createElement("div", {
255
- className: "flex gow justify-center items-center"
256
- }, /* @__PURE__ */ React2.createElement(Icon, {
257
- icon: categoryIcons[service.category ?? "default"] ?? "ph--placeholder--regular",
258
- size: 6
259
- })), /* @__PURE__ */ React2.createElement("div", {
260
- className: "grow items-center truncate mie-2"
261
- }, service.name), /* @__PURE__ */ React2.createElement("div", {
262
- className: "flex gow justify-center items-center"
263
- }, /* @__PURE__ */ React2.createElement(Input2.Root, null, /* @__PURE__ */ React2.createElement(Input2.Switch, {
264
- checked: enabled,
265
- onClick: () => setEnabled?.(!enabled)
266
- })))), /* @__PURE__ */ React2.createElement("div", {
267
- className: "grid grid-cols-[40px_1fr]"
268
- }, /* @__PURE__ */ React2.createElement("div", null), /* @__PURE__ */ React2.createElement("div", {
269
- className: "text-sm text-subdued line-clamp-2 mie-1"
270
- }, service.description)));
271
- };
272
-
273
- // packages/plugins/experimental/plugin-automation/src/components/index.ts
274
- import { lazy } from "react";
275
- var AutomationPanel = lazy(() => import("./AutomationPanel-CL2TWZT5.mjs"));
276
- var ChatContainer = lazy(() => import("./ChatContainer-EJ3IWL7Y.mjs"));
277
-
278
- export {
279
- PromptEditor,
280
- ServiceRegistry,
281
- AutomationPanel,
282
- ChatContainer
283
- };
284
- //# sourceMappingURL=chunk-4M74P6YW.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/PromptEditor/PromptEditor.tsx", "../../../src/components/PromptEditor/prompt-extension.ts", "../../../src/components/ServiceRegistry/ServiceRegistry.tsx", "../../../src/components/index.ts"],
4
- "sourcesContent": ["//\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 { nonNullable } 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(nonNullable).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(nonNullable).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 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 './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": ["React", "useEffect", "createDocAccessor", "Input", "Select", "useThemeContext", "useTranslation", "createBasicExtensions", "createDataExtensions", "createThemeExtensions", "useTextEditor", "attentionSurface", "groupBorder", "mx", "nonNullable", "HighlightStyle", "StreamLanguage", "syntaxHighlighting", "tags", "mx", "nameRegex", "parser", "StreamLanguage", "define", "token", "stream", "eatSpace", "match", "next", "highlightStyles", "HighlightStyle", "tag", "tags", "variableName", "class", "mx", "promptExtension", "syntaxHighlighting", "inputTypes", "value", "ChainInputType", "VALUE", "label", "PASS_THROUGH", "RETRIEVER", "RESOLVER", "CONTEXT", "SCHEMA", "getInputType", "type", "find", "String", "usePromptInputs", "prompt", "useEffect", "text", "template", "inputs", "regex", "RegExp", "nameRegex", "variables", "Set", "matchAll", "map", "m", "unclaimed", "Map", "filter", "nonNullable", "input", "name", "missing", "Array", "from", "values", "forEach", "has", "delete", "push", "next", "splice", "indexOf", "PromptEditor", "commandEditable", "t", "useTranslation", "AUTOMATION_PLUGIN", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "initialValue", "extensions", "createDataExtensions", "id", "undefined", "createDocAccessor", "createBasicExtensions", "bracketMatching", "lineWrapping", "placeholder", "createThemeExtensions", "slots", "content", "className", "promptExtension", "div", "mx", "groupBorder", "span", "Input", "Root", "TextInput", "classNames", "command", "onChange", "event", "target", "replace", "ref", "attentionSurface", "length", "table", "tbody", "tr", "key", "td", "code", "Select", "onValueChange", "TriggerButton", "Portal", "Content", "Viewport", "Option", "includes", "React", "useMemo", "Filter", "useQuery", "Icon", "Input", "List", "ListItem", "ServiceRegistry", "space", "matchingServices", "useServices", "enabledServices", "useQuery", "Filter", "schema", "ServiceType", "services", "useMemo", "map", "service", "find", "s", "serviceId", "handleSetEnabled", "enabled", "db", "add", "remove", "React", "List", "classNames", "ServiceItem", "key", "setEnabled", "ListItem", "Root", "div", "className", "Icon", "icon", "categoryIcons", "category", "size", "name", "Input", "Switch", "checked", "onClick", "description", "lazy", "AutomationPanel", "lazy", "ChatContainer"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const AUTOMATION_PLUGIN = 'dxos.org/plugin/automation';\n\nexport const meta = {\n id: AUTOMATION_PLUGIN,\n name: 'Automation',\n description:\n 'The Automation tab allows you to trigger pre-defined workflows related to the element you are interacting with inside of Composer.',\n icon: 'ph--magic-wand--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-automation',\n tags: ['experimental'],\n} satisfies PluginMeta;\n"],
5
- "mappings": ";AAMO,IAAMA,oBAAoB;AAE1B,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;AACT;",
6
- "names": ["AUTOMATION_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags"]
7
- }