@dxos/plugin-automation 0.8.4-main.2e9d522 → 0.8.4-main.3c1ae3b

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 (200) hide show
  1. package/dist/lib/browser/AutomationPanel-WVLTR65T.mjs +11 -0
  2. package/dist/lib/browser/AutomationSettings-LOCSJ4XL.mjs +68 -0
  3. package/dist/lib/browser/AutomationSettings-LOCSJ4XL.mjs.map +7 -0
  4. package/dist/lib/browser/FunctionsContainer-CQRS5IQN.mjs +145 -0
  5. package/dist/lib/browser/FunctionsContainer-CQRS5IQN.mjs.map +7 -0
  6. package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs → FunctionsPanel-CRW6SJUN.mjs} +3 -3
  7. package/dist/lib/browser/{app-graph-builder-ZTAUTFI4.mjs → app-graph-builder-W7LLC6XW.mjs} +13 -12
  8. package/dist/lib/browser/app-graph-builder-W7LLC6XW.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-5Q2XVI36.mjs +100 -0
  10. package/dist/lib/browser/chunk-5Q2XVI36.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-6FCNJOBO.mjs +15 -0
  12. package/dist/lib/browser/chunk-6FCNJOBO.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-ABZVRMU7.mjs +14 -0
  14. package/dist/lib/browser/chunk-ABZVRMU7.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-BPRH3NBB.mjs +204 -0
  16. package/dist/lib/browser/chunk-BPRH3NBB.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-LZQFZO3B.mjs +17 -0
  18. package/dist/lib/browser/chunk-LZQFZO3B.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-LYJVTIVD.mjs → chunk-TWWFNOIR.mjs} +30 -15
  20. package/dist/lib/browser/chunk-TWWFNOIR.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-WAZEZHJI.mjs +270 -0
  22. package/dist/lib/browser/chunk-WAZEZHJI.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-HN7OHFCB.mjs → chunk-YBPJCY3F.mjs} +3 -3
  24. package/dist/lib/browser/chunk-YBPJCY3F.mjs.map +7 -0
  25. package/dist/lib/browser/compute-runtime-GPT45IDG.mjs +115 -0
  26. package/dist/lib/browser/compute-runtime-GPT45IDG.mjs.map +7 -0
  27. package/dist/lib/browser/hooks/index.mjs +13 -0
  28. package/dist/lib/browser/index.mjs +49 -19
  29. package/dist/lib/browser/index.mjs.map +4 -4
  30. package/dist/lib/browser/{intent-resolver-U3ZAQEFW.mjs → intent-resolver-MJ7IDWCD.mjs} +17 -14
  31. package/dist/lib/browser/intent-resolver-MJ7IDWCD.mjs.map +7 -0
  32. package/dist/lib/browser/meta.json +1 -1
  33. package/dist/lib/browser/{react-surface-4DFSM7OX.mjs → react-surface-FF5YP324.mjs} +20 -20
  34. package/dist/lib/browser/react-surface-FF5YP324.mjs.map +7 -0
  35. package/dist/lib/browser/types/index.mjs +2 -2
  36. package/dist/lib/node-esm/{AutomationPanel-YYUMSK2W.mjs → AutomationPanel-PKWGKR7X.mjs} +4 -4
  37. package/dist/lib/node-esm/AutomationSettings-V5GZEOOQ.mjs +69 -0
  38. package/dist/lib/node-esm/AutomationSettings-V5GZEOOQ.mjs.map +7 -0
  39. package/dist/lib/node-esm/FunctionsContainer-5BBSN6IG.mjs +146 -0
  40. package/dist/lib/node-esm/FunctionsContainer-5BBSN6IG.mjs.map +7 -0
  41. package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs → FunctionsPanel-RVVCS6VH.mjs} +3 -3
  42. package/dist/lib/node-esm/FunctionsPanel-RVVCS6VH.mjs.map +7 -0
  43. package/dist/lib/node-esm/{app-graph-builder-3FP63ZSG.mjs → app-graph-builder-SLQOO7GH.mjs} +13 -12
  44. package/dist/lib/node-esm/app-graph-builder-SLQOO7GH.mjs.map +7 -0
  45. package/dist/lib/node-esm/chunk-267XBACB.mjs +101 -0
  46. package/dist/lib/node-esm/chunk-267XBACB.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-6RH5OXPG.mjs +16 -0
  48. package/dist/lib/node-esm/chunk-6RH5OXPG.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-CEVIVRTY.mjs +19 -0
  50. package/dist/lib/node-esm/chunk-CEVIVRTY.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-OEZNHUL2.mjs → chunk-ECJKIUBO.mjs} +3 -3
  52. package/dist/lib/node-esm/chunk-ECJKIUBO.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-FOK5AUNF.mjs +16 -0
  54. package/dist/lib/node-esm/chunk-FOK5AUNF.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-JVPWGVIV.mjs +205 -0
  56. package/dist/lib/node-esm/chunk-JVPWGVIV.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-AZH66CED.mjs → chunk-Q7KY3LVQ.mjs} +104 -64
  58. package/dist/lib/node-esm/chunk-Q7KY3LVQ.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-ZGPUV5VS.mjs → chunk-RVK52XGK.mjs} +30 -15
  60. package/dist/lib/node-esm/chunk-RVK52XGK.mjs.map +7 -0
  61. package/dist/lib/node-esm/compute-runtime-SODV3TDU.mjs +116 -0
  62. package/dist/lib/node-esm/compute-runtime-SODV3TDU.mjs.map +7 -0
  63. package/dist/lib/node-esm/hooks/index.mjs +14 -0
  64. package/dist/lib/node-esm/hooks/index.mjs.map +7 -0
  65. package/dist/lib/node-esm/index.mjs +49 -19
  66. package/dist/lib/node-esm/index.mjs.map +4 -4
  67. package/dist/lib/node-esm/{intent-resolver-3QWXEBPX.mjs → intent-resolver-NOBCKCF6.mjs} +17 -14
  68. package/dist/lib/node-esm/intent-resolver-NOBCKCF6.mjs.map +7 -0
  69. package/dist/lib/node-esm/meta.json +1 -1
  70. package/dist/lib/node-esm/{react-surface-3PNW7NDW.mjs → react-surface-OQIMKKTP.mjs} +20 -20
  71. package/dist/lib/node-esm/react-surface-OQIMKKTP.mjs.map +7 -0
  72. package/dist/lib/node-esm/types/index.mjs +2 -2
  73. package/dist/types/src/AutomationPlugin.d.ts +1 -1
  74. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  76. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/capabilities.d.ts +21 -0
  78. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/compute-runtime.d.ts +5 -0
  80. package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/index.d.ts +5 -3
  82. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  84. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  86. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  87. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +6 -5
  88. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  89. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts +49 -4
  90. package/dist/types/src/components/AutomationPanel/AutomationPanel.stories.d.ts.map +1 -1
  91. package/dist/types/src/components/AutomationSettings.d.ts +5 -0
  92. package/dist/types/src/components/AutomationSettings.d.ts.map +1 -0
  93. package/dist/types/src/components/FunctionsContainer.d.ts.map +1 -1
  94. package/dist/types/src/components/FunctionsPanel/FunctionsPanel.d.ts.map +1 -1
  95. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts +8 -0
  96. package/dist/types/src/components/FunctionsRegistry/FunctionsRegistry.d.ts.map +1 -0
  97. package/dist/types/src/components/FunctionsRegistry/index.d.ts +2 -0
  98. package/dist/types/src/components/FunctionsRegistry/index.d.ts.map +1 -0
  99. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts +10 -8
  100. package/dist/types/src/components/TriggerEditor/FunctionInputEditor.d.ts.map +1 -1
  101. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts +6 -3
  102. package/dist/types/src/components/TriggerEditor/SpecSelector.d.ts.map +1 -1
  103. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts +9 -6
  104. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  105. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts +117 -4
  106. package/dist/types/src/components/TriggerEditor/TriggerEditor.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/TriggerSettings.d.ts +6 -0
  108. package/dist/types/src/components/TriggerSettings.d.ts.map +1 -0
  109. package/dist/types/src/components/index.d.ts +2 -2
  110. package/dist/types/src/components/index.d.ts.map +1 -1
  111. package/dist/types/src/events.d.ts +4 -0
  112. package/dist/types/src/events.d.ts.map +1 -0
  113. package/dist/types/src/hooks/index.d.ts +3 -0
  114. package/dist/types/src/hooks/index.d.ts.map +1 -0
  115. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +13 -0
  116. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -0
  117. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts +11 -0
  118. package/dist/types/src/hooks/useTriggerRuntimeControls.d.ts.map +1 -0
  119. package/dist/types/src/index.d.ts +3 -0
  120. package/dist/types/src/index.d.ts.map +1 -1
  121. package/dist/types/src/meta.d.ts +0 -1
  122. package/dist/types/src/meta.d.ts.map +1 -1
  123. package/dist/types/src/testing/test-functions.d.ts +2 -3
  124. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  125. package/dist/types/src/translations.d.ts +6 -0
  126. package/dist/types/src/translations.d.ts.map +1 -1
  127. package/dist/types/src/types/schema.d.ts +1 -1
  128. package/dist/types/src/types/schema.d.ts.map +1 -1
  129. package/dist/types/tsconfig.tsbuildinfo +1 -1
  130. package/package.json +63 -38
  131. package/src/AutomationPlugin.tsx +37 -31
  132. package/src/capabilities/app-graph-builder.ts +16 -15
  133. package/src/capabilities/capabilities.ts +42 -0
  134. package/src/capabilities/compute-runtime.ts +129 -0
  135. package/src/capabilities/index.ts +3 -0
  136. package/src/capabilities/intent-resolver.ts +20 -15
  137. package/src/capabilities/react-surface.tsx +15 -15
  138. package/src/components/AutomationPanel/AutomationPanel.stories.tsx +16 -17
  139. package/src/components/AutomationPanel/AutomationPanel.tsx +127 -54
  140. package/src/components/AutomationSettings.tsx +30 -0
  141. package/src/components/FunctionsContainer.tsx +18 -13
  142. package/src/components/FunctionsPanel/FunctionsPanel.tsx +35 -16
  143. package/src/components/FunctionsRegistry/FunctionsRegistry.tsx +126 -0
  144. package/src/components/FunctionsRegistry/index.ts +5 -0
  145. package/src/components/TriggerEditor/FunctionInputEditor.tsx +40 -24
  146. package/src/components/TriggerEditor/SpecSelector.tsx +29 -21
  147. package/src/components/TriggerEditor/TriggerEditor.stories.tsx +78 -32
  148. package/src/components/TriggerEditor/TriggerEditor.tsx +86 -41
  149. package/src/components/TriggerSettings.tsx +25 -0
  150. package/src/components/index.ts +1 -1
  151. package/src/events.ts +11 -0
  152. package/src/hooks/index.ts +6 -0
  153. package/src/hooks/useComputeRuntimeCallback.ts +68 -0
  154. package/src/hooks/useTriggerRuntimeControls.ts +53 -0
  155. package/src/index.ts +3 -0
  156. package/src/meta.ts +6 -5
  157. package/src/testing/test-functions.ts +3 -3
  158. package/src/translations.ts +9 -0
  159. package/src/types/schema.ts +1 -1
  160. package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs +0 -38
  161. package/dist/lib/browser/AutomationContainer-VZNV2ZQF.mjs.map +0 -7
  162. package/dist/lib/browser/AutomationPanel-ZWA6GOFY.mjs +0 -11
  163. package/dist/lib/browser/FunctionsContainer-IOB333TX.mjs +0 -39
  164. package/dist/lib/browser/FunctionsContainer-IOB333TX.mjs.map +0 -7
  165. package/dist/lib/browser/app-graph-builder-ZTAUTFI4.mjs.map +0 -7
  166. package/dist/lib/browser/chunk-ECSTS2UI.mjs +0 -14
  167. package/dist/lib/browser/chunk-ECSTS2UI.mjs.map +0 -7
  168. package/dist/lib/browser/chunk-ERTIGJYE.mjs +0 -147
  169. package/dist/lib/browser/chunk-ERTIGJYE.mjs.map +0 -7
  170. package/dist/lib/browser/chunk-FSJZXTS2.mjs +0 -230
  171. package/dist/lib/browser/chunk-FSJZXTS2.mjs.map +0 -7
  172. package/dist/lib/browser/chunk-GW5U2DGT.mjs +0 -15
  173. package/dist/lib/browser/chunk-GW5U2DGT.mjs.map +0 -7
  174. package/dist/lib/browser/chunk-HN7OHFCB.mjs.map +0 -7
  175. package/dist/lib/browser/chunk-LYJVTIVD.mjs.map +0 -7
  176. package/dist/lib/browser/intent-resolver-U3ZAQEFW.mjs.map +0 -7
  177. package/dist/lib/browser/react-surface-4DFSM7OX.mjs.map +0 -7
  178. package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs +0 -39
  179. package/dist/lib/node-esm/AutomationContainer-WMIH3F4V.mjs.map +0 -7
  180. package/dist/lib/node-esm/FunctionsContainer-DJWB6WFH.mjs +0 -40
  181. package/dist/lib/node-esm/FunctionsContainer-DJWB6WFH.mjs.map +0 -7
  182. package/dist/lib/node-esm/app-graph-builder-3FP63ZSG.mjs.map +0 -7
  183. package/dist/lib/node-esm/chunk-AZH66CED.mjs.map +0 -7
  184. package/dist/lib/node-esm/chunk-HIMYPGHF.mjs +0 -148
  185. package/dist/lib/node-esm/chunk-HIMYPGHF.mjs.map +0 -7
  186. package/dist/lib/node-esm/chunk-NK5N3QKD.mjs +0 -17
  187. package/dist/lib/node-esm/chunk-NK5N3QKD.mjs.map +0 -7
  188. package/dist/lib/node-esm/chunk-OEZNHUL2.mjs.map +0 -7
  189. package/dist/lib/node-esm/chunk-SGZPTJ47.mjs +0 -16
  190. package/dist/lib/node-esm/chunk-SGZPTJ47.mjs.map +0 -7
  191. package/dist/lib/node-esm/chunk-ZGPUV5VS.mjs.map +0 -7
  192. package/dist/lib/node-esm/intent-resolver-3QWXEBPX.mjs.map +0 -7
  193. package/dist/lib/node-esm/react-surface-3PNW7NDW.mjs.map +0 -7
  194. package/dist/types/src/components/AutomationContainer.d.ts +0 -5
  195. package/dist/types/src/components/AutomationContainer.d.ts.map +0 -1
  196. package/src/components/AutomationContainer.tsx +0 -30
  197. /package/dist/lib/browser/{AutomationPanel-ZWA6GOFY.mjs.map → AutomationPanel-WVLTR65T.mjs.map} +0 -0
  198. /package/dist/lib/browser/{FunctionsPanel-56ZKRVM5.mjs.map → FunctionsPanel-CRW6SJUN.mjs.map} +0 -0
  199. /package/dist/lib/{node-esm/AutomationPanel-YYUMSK2W.mjs.map → browser/hooks/index.mjs.map} +0 -0
  200. /package/dist/lib/node-esm/{FunctionsPanel-KGIOZSPZ.mjs.map → AutomationPanel-PKWGKR7X.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/AutomationPanel/AutomationPanel.tsx", "../../../src/components/AutomationPanel/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as EFn from 'effect/Function';\nimport * as Match from 'effect/Match';\nimport * as Schema from 'effect/Schema';\nimport React, { useMemo, useState } from 'react';\n\nimport { Filter, Obj, Tag } from '@dxos/echo';\nimport { Function, Script, Trigger } from '@dxos/functions';\nimport { FunctionsServiceClient } from '@dxos/functions-runtime/edge';\nimport { useTypeOptions } from '@dxos/plugin-space';\nimport { type Client, useClient } from '@dxos/react-client';\nimport { type Space, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { Clipboard, IconButton, Input, Separator, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { ControlItem, controlItemClasses } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\nimport { Project } from '@dxos/types';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '../../meta';\nimport { TriggerEditor, type TriggerEditorProps } from '../TriggerEditor';\n\nconst grid = 'grid grid-cols-[40px_1fr_32px_32px] min-bs-[2.5rem]';\n\nexport type AutomationPanelProps = ThemedClassName<{\n space: Space;\n object?: Obj.Any;\n initialTrigger?: Trigger.Trigger;\n onDone?: () => void;\n}>;\n\n// TODO(burdon): Factor out common layout with ViewEditor.\nexport const AutomationPanel = ({ classNames, space, object, initialTrigger, onDone }: AutomationPanelProps) => {\n const { t } = useTranslation(meta.id);\n const client = useClient();\n const functionsServiceClient = useMemo(() => FunctionsServiceClient.fromClient(client), [client]);\n const functions = useQuery(space, Filter.type(Function.Function));\n const triggers = useQuery(space, Filter.type(Trigger.Trigger));\n const filteredTriggers = useMemo(() => {\n return object ? triggers.filter(triggerMatch(object)) : triggers;\n }, [object, triggers]);\n const tags = useQuery(space, Filter.type(Tag.Tag));\n const types = useTypeOptions({\n space,\n annotation: {\n location: ['database', 'runtime'],\n kind: ['user'],\n registered: ['registered'],\n },\n });\n\n const [trigger, setTrigger] = useState<Trigger.Trigger | undefined>(initialTrigger);\n const [selected, setSelected] = useState<Trigger.Trigger>();\n\n const handleSelect = (trigger: Trigger.Trigger) => {\n setTrigger(trigger);\n setSelected(trigger);\n };\n\n const handleAdd = () => {\n setTrigger(Trigger.make({}));\n setSelected(undefined);\n };\n\n const handleDelete = (trigger: Trigger.Trigger) => {\n space.db.remove(trigger);\n setTrigger(undefined);\n setSelected(undefined);\n };\n\n const handleSave: TriggerEditorProps['onSave'] = (trigger) => {\n if (selected) {\n Object.assign(selected, trigger);\n } else {\n space.db.add(Trigger.make(trigger));\n }\n\n setTrigger(undefined);\n setSelected(undefined);\n onDone?.();\n };\n\n const handleCancel: TriggerEditorProps['onCancel'] = () => {\n setTrigger(undefined);\n onDone?.();\n };\n\n const handleForceRunTrigger = async (trigger: Trigger.Trigger) => {\n await functionsServiceClient.forceRunCronTrigger(space.id, trigger.id);\n };\n\n if (trigger) {\n return (\n <ControlItem title={t('trigger editor title')}>\n <TriggerEditor\n space={space}\n trigger={trigger}\n readonlySpec={Boolean(object)}\n tags={tags}\n types={types}\n onSave={handleSave}\n onCancel={handleCancel}\n />\n </ControlItem>\n );\n }\n\n return (\n <div className={mx(controlItemClasses, classNames)}>\n {filteredTriggers.length > 0 && (\n <List.Root<Trigger.Trigger>\n items={filteredTriggers}\n isItem={Schema.is(Trigger.Trigger)}\n getId={(field) => field.id}\n >\n {({ items: filteredTriggers }) => (\n <div role='list' className='flex flex-col is-full'>\n {filteredTriggers?.map((trigger) => {\n const copyAction = getCopyAction(client, trigger);\n return (\n <List.Item<Trigger.Trigger>\n key={trigger.id}\n item={trigger}\n classNames={mx(grid, ghostHover, 'items-center', 'pli-2')}\n >\n <Input.Root>\n <Input.Switch\n checked={trigger.enabled}\n onCheckedChange={(checked) => (trigger.enabled = checked)}\n />\n </Input.Root>\n\n <div className={'flex'}>\n <List.ItemTitle\n classNames='pli-1 cursor-pointer is-0 shrink truncate'\n onClick={() => handleSelect(trigger)}\n >\n {getFunctionName(functions, trigger) ?? '∅'}\n </List.ItemTitle>\n\n {/* TODO: a better way to expose copy action */}\n {copyAction && (\n <Clipboard.IconButton\n label={t(copyAction.translationKey)}\n value={copyAction.contentProvider()}\n />\n )}\n </div>\n\n <List.ItemButton\n autoHide={false}\n disabled={!trigger.enabled || trigger.spec?.kind !== 'timer'}\n icon='ph--play--regular'\n label='Force run'\n onClick={() => handleForceRunTrigger(trigger)}\n />\n\n <List.ItemDeleteButton onClick={() => handleDelete(trigger)} />\n </List.Item>\n );\n })}\n </div>\n )}\n </List.Root>\n )}\n {filteredTriggers.length > 0 && <Separator classNames='mlb-4' />}\n <IconButton icon='ph--plus--regular' label={t('new trigger label')} onClick={handleAdd} />\n </div>\n );\n};\n\nconst getCopyAction = (client: Client, trigger: Trigger.Trigger | undefined) => {\n if (trigger?.spec?.kind === 'email') {\n return { translationKey: 'trigger copy email', contentProvider: () => `${getSpace(trigger)!.id}@dxos.network` };\n }\n\n if (trigger?.spec?.kind === 'webhook') {\n return { translationKey: 'trigger copy url', contentProvider: () => getWebhookUrl(client, trigger) };\n }\n\n return undefined;\n};\n\nconst getWebhookUrl = (client: Client, trigger: Trigger.Trigger) => {\n const spaceId = getSpace(trigger)!.id;\n const edgeUrl = new URL(client.config.values.runtime!.services!.edge!.url!);\n const isSecure = edgeUrl.protocol.startsWith('https') || edgeUrl.protocol.startsWith('wss');\n edgeUrl.protocol = isSecure ? 'https' : 'http';\n return new URL(`/webhook/${spaceId}:${trigger.id}`, edgeUrl).toString();\n};\n\nconst getFunctionName = (functions: Function.Function[], trigger: Trigger.Trigger) => {\n // TODO(wittjosiah): Truncation should be done in the UI.\n // Warning that the List component is currently a can of worms.\n const shortId = trigger.function && `${trigger.function.dxn.toString().slice(0, 16)}…`;\n const functionObject = functions.find((fn) => fn === trigger.function?.target);\n return functionObject?.name ?? shortId;\n};\n\nconst scriptMatch = (script: Script.Script) => (trigger: Trigger.Trigger) => {\n const fn = trigger.function?.target;\n if (!Obj.instanceOf(Function.Function, fn)) {\n return false;\n }\n\n return fn.source?.target === script;\n};\n\nconst projectMatch = (project: Project.Project) => {\n const viewQueries = EFn.pipe(\n project.columns,\n Array.map((column) => column.view.target),\n Array.filter(isNonNullable),\n Array.map((view) => Obj.getSnapshot(view).query.ast),\n Array.map((ast) => JSON.stringify(ast)),\n );\n\n return (trigger: Trigger.Trigger) => {\n const spec = Obj.getSnapshot(trigger).spec;\n if (spec?.kind !== 'subscription') {\n return false;\n }\n\n // TODO(wittjosiah): Implement better way of comparing query ASTs.\n return viewQueries.some((query) => JSON.stringify(spec.query) === query);\n };\n};\n\nconst triggerMatch = Match.type<Obj.Any>().pipe(\n Match.withReturnType<(trigger: Trigger.Trigger) => boolean>(),\n Match.when(\n (obj) => Obj.instanceOf(Script.Script, obj),\n (obj) => scriptMatch(obj),\n ),\n Match.when(\n (obj) => Obj.instanceOf(Project.Project, obj),\n (obj) => projectMatch(obj),\n ),\n Match.orElse((_obj) => () => true),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { AutomationPanel } from './AutomationPanel';\n\nexport * from './AutomationPanel';\n\nexport default AutomationPanel;\n"],
5
+ "mappings": "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",
6
+ "names": ["Array", "EFn", "Match", "Schema", "React", "useMemo", "useState", "Filter", "Obj", "Tag", "Function", "Script", "Trigger", "FunctionsServiceClient", "useTypeOptions", "useClient", "getSpace", "useQuery", "Clipboard", "IconButton", "Input", "Separator", "useTranslation", "ControlItem", "controlItemClasses", "List", "ghostHover", "mx", "Project", "isNonNullable", "grid", "AutomationPanel", "classNames", "space", "object", "initialTrigger", "onDone", "t", "useTranslation", "meta", "id", "client", "useClient", "functionsServiceClient", "useMemo", "FunctionsServiceClient", "fromClient", "functions", "useQuery", "Filter", "type", "Function", "triggers", "Trigger", "filteredTriggers", "filter", "triggerMatch", "tags", "Tag", "types", "useTypeOptions", "annotation", "location", "kind", "registered", "trigger", "setTrigger", "useState", "selected", "setSelected", "handleSelect", "handleAdd", "make", "undefined", "handleDelete", "db", "remove", "handleSave", "Object", "assign", "add", "handleCancel", "handleForceRunTrigger", "forceRunCronTrigger", "ControlItem", "title", "TriggerEditor", "readonlySpec", "Boolean", "onSave", "onCancel", "div", "className", "mx", "controlItemClasses", "length", "List", "Root", "items", "isItem", "is", "getId", "field", "role", "map", "copyAction", "getCopyAction", "Item", "key", "item", "ghostHover", "Input", "Switch", "checked", "enabled", "onCheckedChange", "ItemTitle", "onClick", "getFunctionName", "Clipboard", "IconButton", "label", "translationKey", "value", "contentProvider", "ItemButton", "autoHide", "disabled", "spec", "icon", "ItemDeleteButton", "Separator", "getSpace", "getWebhookUrl", "spaceId", "edgeUrl", "URL", "config", "values", "runtime", "services", "edge", "url", "isSecure", "protocol", "startsWith", "toString", "shortId", "function", "dxn", "slice", "functionObject", "find", "fn", "target", "name", "scriptMatch", "script", "Obj", "instanceOf", "source", "projectMatch", "project", "viewQueries", "pipe", "columns", "column", "view", "isNonNullable", "getSnapshot", "query", "ast", "JSON", "stringify", "some", "withReturnType", "when", "obj", "Script", "Project", "orElse", "_obj", "AutomationPanel"]
7
+ }
@@ -1,27 +1,30 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
- AUTOMATION_PLUGIN
4
- } from "./chunk-NK5N3QKD.mjs";
3
+ meta
4
+ } from "./chunk-CEVIVRTY.mjs";
5
5
 
6
6
  // src/components/TriggerEditor/TriggerEditor.tsx
7
7
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
8
8
  import React3, { useCallback as useCallback3, useMemo as useMemo3 } from "react";
9
9
  import { ComputeGraph } from "@dxos/conductor";
10
- import { Type as Type2 } from "@dxos/echo";
11
- import { FunctionType, FunctionTriggerSchema, ScriptType } from "@dxos/functions";
12
- import { Filter, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
13
- import { Form as Form2, SelectInput as SelectInput2, useRefQueryLookupHandler } from "@dxos/react-ui-form";
10
+ import { DXN } from "@dxos/echo";
11
+ import { Function, Script, Trigger as Trigger2 } from "@dxos/functions";
12
+ import { Filter as Filter2, Ref as Ref2, useQuery } from "@dxos/react-client/echo";
13
+ import { Input } from "@dxos/react-ui";
14
+ import { QueryForm } from "@dxos/react-ui-components";
15
+ import { Form as Form2, FormFieldLabel, SelectField as SelectField2, omitId as omitId2, useRefQueryOptions } from "@dxos/react-ui-form";
14
16
 
15
17
  // src/components/TriggerEditor/FunctionInputEditor.tsx
16
18
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
17
19
  import React, { useCallback, useMemo } from "react";
18
20
  import { Ref, Type } from "@dxos/echo";
19
- import { useOnTransition } from "@dxos/react-ui";
20
- import { Form, useFormValues } from "@dxos/react-ui-form";
21
- var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptions }) => {
21
+ import { useOnTransition, useTranslation } from "@dxos/react-ui";
22
+ import { Form, omitId, useFormValues } from "@dxos/react-ui-form";
23
+ var FunctionInputEditor = ({ type, functions, getValue, onValueChange, onQueryRefOptions }) => {
22
24
  var _effect = _useSignals();
23
25
  try {
24
- const selectedFunctionValue = useFormValues([
26
+ const { t } = useTranslation(meta.id);
27
+ const selectedFunctionValue = useFormValues(FunctionInputEditor.displayName, [
25
28
  "function"
26
29
  ]);
27
30
  const selectedFunctionId = useMemo(() => {
@@ -38,9 +41,14 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
38
41
  useOnTransition(
39
42
  // Clear function parameter input when the function changes.
40
43
  selectedFunctionValue,
41
- (prevValue) => prevValue !== void 0 && prevValue !== selectedFunctionValue,
44
+ (prevValue) => {
45
+ if (!Ref.isRef(prevValue) || !Ref.isRef(selectedFunctionValue)) {
46
+ return false;
47
+ }
48
+ return prevValue.dxn.toString() !== selectedFunctionValue.dxn.toString();
49
+ },
42
50
  (currValue) => currValue !== void 0,
43
- () => onValueChange("object", {})
51
+ () => onValueChange(type, {})
44
52
  );
45
53
  const inputSchema = useMemo(() => selectedFunction?.inputSchema, [
46
54
  selectedFunction
@@ -53,65 +61,70 @@ var FunctionInputEditor = ({ functions, getValue, onValueChange, onQueryRefOptio
53
61
  getValue
54
62
  ]);
55
63
  const handleValuesChanged = useCallback((values2) => {
56
- onValueChange("object", values2);
64
+ onValueChange(type, values2);
57
65
  }, [
66
+ type,
58
67
  onValueChange
59
68
  ]);
60
69
  if (selectedFunction === void 0 || effectSchema === void 0 || propertyCount === 0) {
61
70
  return null;
62
71
  }
63
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("h3", {
64
- className: "text-md"
65
- }, "Function parameters"), /* @__PURE__ */ React.createElement(Form, {
66
- schema: effectSchema,
72
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Form.Label, {
73
+ label: t("function parameters label"),
74
+ asChild: true
75
+ }), /* @__PURE__ */ React.createElement(Form.Root, {
76
+ schema: omitId(effectSchema),
67
77
  values,
68
78
  onValuesChanged: handleValuesChanged,
69
- onQueryRefOptions,
70
- outerSpacing: false
71
- }));
79
+ onQueryRefOptions
80
+ }, /* @__PURE__ */ React.createElement(Form.FieldSet, null)));
72
81
  } finally {
73
82
  _effect.f();
74
83
  }
75
84
  };
85
+ FunctionInputEditor.displayName = "AutomationTrigger.FunctionInputEditor";
76
86
 
77
87
  // src/components/TriggerEditor/SpecSelector.tsx
78
88
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
79
89
  import React2, { useCallback as useCallback2, useMemo as useMemo2 } from "react";
80
- import { TriggerKind } from "@dxos/functions";
81
- import { useTranslation } from "@dxos/react-ui";
82
- import { SelectInput, useInputProps } from "@dxos/react-ui-form";
90
+ import { Filter, Query } from "@dxos/echo";
91
+ import { Trigger } from "@dxos/functions";
92
+ import { useTranslation as useTranslation2 } from "@dxos/react-ui";
93
+ import { SelectField, useFormFieldState } from "@dxos/react-ui-form";
83
94
  var SpecSelector = (props) => {
84
95
  var _effect = _useSignals2();
85
96
  try {
86
- const { t } = useTranslation(AUTOMATION_PLUGIN);
87
- const specProps = useInputProps([
97
+ const { t } = useTranslation2(meta.id);
98
+ const specProps = useFormFieldState(SpecSelector.displayName, [
88
99
  "spec"
89
100
  ]);
90
101
  const handleTypeChange = useCallback2((_type, value) => {
91
102
  const getDefaultTriggerSpec = (kind) => {
92
103
  switch (kind) {
93
- case TriggerKind.Timer:
104
+ case "timer":
94
105
  return {
95
- kind: TriggerKind.Timer,
106
+ kind: "timer",
96
107
  cron: ""
97
108
  };
98
- case TriggerKind.Subscription:
109
+ case "subscription":
99
110
  return {
100
- kind: TriggerKind.Subscription,
101
- filter: {}
111
+ kind: "subscription",
112
+ query: {
113
+ ast: Query.select(Filter.nothing()).ast
114
+ }
102
115
  };
103
- case TriggerKind.Queue:
116
+ case "queue":
104
117
  return {
105
- kind: TriggerKind.Queue,
106
- queue: ""
118
+ kind: "queue",
119
+ queue: "dxn:"
107
120
  };
108
- case TriggerKind.Email:
121
+ case "email":
109
122
  return {
110
- kind: TriggerKind.Email
123
+ kind: "email"
111
124
  };
112
- case TriggerKind.Webhook:
125
+ case "webhook":
113
126
  return {
114
- kind: TriggerKind.Webhook
127
+ kind: "webhook"
115
128
  };
116
129
  default:
117
130
  return void 0;
@@ -121,17 +134,18 @@ var SpecSelector = (props) => {
121
134
  if (!defaultSpec) {
122
135
  return;
123
136
  }
124
- specProps.onValueChange("object", defaultSpec);
137
+ specProps.onValueChange(props.type, defaultSpec);
125
138
  }, [
139
+ props.type,
126
140
  specProps
127
141
  ]);
128
- const options = useMemo2(() => Object.values(TriggerKind).map((kind) => ({
142
+ const options = useMemo2(() => Trigger.Kinds.map((kind) => ({
129
143
  value: kind,
130
144
  label: t(`trigger type ${kind}`)
131
145
  })), [
132
146
  t
133
147
  ]);
134
- return /* @__PURE__ */ React2.createElement(SelectInput, {
148
+ return /* @__PURE__ */ React2.createElement(SelectField, {
135
149
  ...props,
136
150
  options,
137
151
  onValueChange: handleTypeChange
@@ -140,35 +154,37 @@ var SpecSelector = (props) => {
140
154
  _effect.f();
141
155
  }
142
156
  };
157
+ SpecSelector.displayName = "Form.SpecSelector";
143
158
 
144
159
  // src/components/TriggerEditor/TriggerEditor.tsx
145
- var TriggerEditor = ({ space, trigger, onSave, onCancel }) => {
160
+ var TriggerEditor = ({ space, types, tags, readonlySpec, trigger, ...formProps }) => {
146
161
  var _effect = _useSignals3();
147
162
  try {
148
- const handleSave = (values) => {
149
- onSave?.(values);
150
- };
151
- const handleRefQueryLookup = useRefQueryLookupHandler({
163
+ const handleQueryRefOptions = useRefQueryOptions({
152
164
  space
153
165
  });
154
- const Custom = useCustomInputs(space, handleRefQueryLookup);
155
- return /* @__PURE__ */ React3.createElement(Form2, {
156
- outerSpacing: false,
157
- Custom,
158
- schema: FunctionTriggerSchema,
159
- values: trigger,
160
- onSave: handleSave,
161
- onCancel,
162
- onQueryRefOptions: handleRefQueryLookup
166
+ const fieldMap = useCustomInputs({
167
+ space,
168
+ types,
169
+ tags,
170
+ readonlySpec,
171
+ onQueryRefOptions: handleQueryRefOptions
163
172
  });
173
+ return /* @__PURE__ */ React3.createElement(Form2.Root, {
174
+ ...formProps,
175
+ schema: omitId2(Trigger2.Trigger),
176
+ values: trigger,
177
+ fieldMap,
178
+ onQueryRefOptions: handleQueryRefOptions
179
+ }, /* @__PURE__ */ React3.createElement(Form2.Viewport, null, /* @__PURE__ */ React3.createElement(Form2.Content, null, /* @__PURE__ */ React3.createElement(Form2.FieldSet, null), /* @__PURE__ */ React3.createElement(Form2.Actions, null))));
164
180
  } finally {
165
181
  _effect.f();
166
182
  }
167
183
  };
168
- var useCustomInputs = (space, onQueryRefOptions) => {
169
- const functions = useQuery(space, Filter.type(FunctionType));
170
- const workflows = useQuery(space, Filter.type(ComputeGraph));
171
- const scripts = useQuery(space, Filter.type(ScriptType));
184
+ var useCustomInputs = ({ space, readonlySpec, types, tags, onQueryRefOptions }) => {
185
+ const functions = useQuery(space, Filter2.type(Function.Function));
186
+ const workflows = useQuery(space, Filter2.type(ComputeGraph));
187
+ const scripts = useQuery(space, Filter2.type(Script.Script));
172
188
  return useMemo3(() => ({
173
189
  // Function selector.
174
190
  ["function"]: (props) => {
@@ -182,15 +198,16 @@ var useCustomInputs = (space, onQueryRefOptions) => {
182
198
  props
183
199
  ]);
184
200
  const handleOnValueChange = useCallback3((_type, dxnString) => {
185
- const dxn = Type2.DXN.parse(dxnString);
201
+ const dxn = DXN.parse(dxnString);
186
202
  if (dxn) {
187
203
  const ref = Ref2.fromDXN(dxn);
188
- props.onValueChange("object", ref);
204
+ props.onValueChange(props.type, ref);
189
205
  }
190
206
  }, [
207
+ props.type,
191
208
  props.onValueChange
192
209
  ]);
193
- return /* @__PURE__ */ React3.createElement(SelectInput2, {
210
+ return /* @__PURE__ */ React3.createElement(SelectField2, {
194
211
  ...props,
195
212
  getValue,
196
213
  onValueChange: handleOnValueChange,
@@ -198,7 +215,29 @@ var useCustomInputs = (space, onQueryRefOptions) => {
198
215
  });
199
216
  },
200
217
  // Spec selector.
201
- ["spec.kind"]: SpecSelector,
218
+ ["spec.kind"]: (props) => /* @__PURE__ */ React3.createElement(SpecSelector, {
219
+ ...props,
220
+ readonly: readonlySpec
221
+ }),
222
+ // TODO(wittjosiah): Copied from ViewEditor.
223
+ // Query input editor.
224
+ ["spec.query"]: (props) => {
225
+ const handleChange = useCallback3((query) => props.onValueChange(props.type, {
226
+ ast: query.ast
227
+ }), [
228
+ props.type,
229
+ props.onValueChange
230
+ ]);
231
+ return /* @__PURE__ */ React3.createElement(Input.Root, null, /* @__PURE__ */ React3.createElement(FormFieldLabel, {
232
+ label: props.label,
233
+ asChild: true
234
+ }), /* @__PURE__ */ React3.createElement(QueryForm, {
235
+ initialQuery: props.getValue().ast,
236
+ types,
237
+ tags,
238
+ onChange: handleChange
239
+ }));
240
+ },
202
241
  // Function input editor.
203
242
  ["input"]: (props) => /* @__PURE__ */ React3.createElement(FunctionInputEditor, {
204
243
  ...props,
@@ -208,7 +247,8 @@ var useCustomInputs = (space, onQueryRefOptions) => {
208
247
  }), [
209
248
  workflows,
210
249
  scripts,
211
- functions
250
+ functions,
251
+ readonlySpec
212
252
  ]);
213
253
  };
214
254
  var getWorkflowOptions = (graphs) => {
@@ -228,4 +268,4 @@ var getFunctionOptions = (scripts, functions) => {
228
268
  export {
229
269
  TriggerEditor
230
270
  };
231
- //# sourceMappingURL=chunk-AZH66CED.mjs.map
271
+ //# sourceMappingURL=chunk-Q7KY3LVQ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/TriggerEditor/TriggerEditor.tsx", "../../../src/components/TriggerEditor/FunctionInputEditor.tsx", "../../../src/components/TriggerEditor/SpecSelector.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { ComputeGraph } from '@dxos/conductor';\nimport { DXN, type Query } from '@dxos/echo';\nimport { Function, Script, Trigger } from '@dxos/functions';\nimport { Filter, Ref, type Space, useQuery } from '@dxos/react-client/echo';\nimport { Input } from '@dxos/react-ui';\nimport { QueryForm, type QueryFormProps } from '@dxos/react-ui-components';\nimport {\n type ExcludeId,\n Form,\n FormFieldLabel,\n type FormFieldMap,\n type FormRootProps,\n SelectField,\n omitId,\n useRefQueryOptions,\n} from '@dxos/react-ui-form';\n\nimport { FunctionInputEditor, type FunctionInputEditorProps } from './FunctionInputEditor';\nimport { SpecSelector } from './SpecSelector';\n\ntype TriggerFormSchema = ExcludeId<typeof Trigger.Trigger>;\n\nexport type TriggerEditorProps = {\n space: Space;\n trigger: Trigger.Trigger;\n // TODO(wittjosiah): This needs to apply to whole spec but currently only applies to spec.kind & spec.query.\n readonlySpec?: boolean;\n} &\n // prettier-ignore\n Pick<QueryFormProps, 'types' | 'tags'> &\n Pick<FormRootProps<TriggerFormSchema>, 'onSave' | 'onCancel'>;\n\nexport const TriggerEditor = ({ space, types, tags, readonlySpec, trigger, ...formProps }: TriggerEditorProps) => {\n const handleQueryRefOptions = useRefQueryOptions({ space });\n const fieldMap = useCustomInputs({\n space,\n types,\n tags,\n readonlySpec,\n onQueryRefOptions: handleQueryRefOptions,\n });\n\n return (\n <Form.Root<TriggerFormSchema>\n {...formProps}\n schema={omitId(Trigger.Trigger)}\n values={trigger}\n fieldMap={fieldMap}\n onQueryRefOptions={handleQueryRefOptions}\n >\n <Form.Viewport>\n <Form.Content>\n <Form.FieldSet />\n <Form.Actions />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n\ntype UseCustomInputsProps = {\n space: Space;\n readonlySpec?: boolean;\n onQueryRefOptions: FunctionInputEditorProps['onQueryRefOptions'];\n} & Pick<QueryFormProps, 'types' | 'tags'>;\n\nconst useCustomInputs = ({\n space,\n readonlySpec,\n types,\n tags,\n onQueryRefOptions,\n}: UseCustomInputsProps): FormFieldMap => {\n const functions = useQuery(space, Filter.type(Function.Function));\n const workflows = useQuery(space, Filter.type(ComputeGraph));\n const scripts = useQuery(space, Filter.type(Script.Script));\n\n return useMemo(\n (): FormFieldMap => ({\n // Function selector.\n ['function' satisfies keyof Trigger.Trigger]: (props) => {\n const getValue = useCallback(() => {\n const formValue = props.getValue();\n if (Ref.isRef(formValue)) {\n return formValue.dxn.toString() as string;\n }\n return undefined;\n }, [props]);\n\n const handleOnValueChange = useCallback(\n (_type: any, dxnString: string) => {\n const dxn = DXN.parse(dxnString);\n if (dxn) {\n const ref = Ref.fromDXN(dxn);\n props.onValueChange(props.type, ref);\n }\n },\n [props.type, props.onValueChange],\n );\n\n return (\n <SelectField\n {...props}\n getValue={getValue as any}\n onValueChange={handleOnValueChange}\n options={getWorkflowOptions(workflows).concat(getFunctionOptions(scripts, functions))}\n />\n );\n },\n\n // Spec selector.\n ['spec.kind' as const]: (props) => <SpecSelector {...props} readonly={readonlySpec} />,\n\n // TODO(wittjosiah): Copied from ViewEditor.\n // Query input editor.\n ['spec.query' as const]: (props) => {\n const handleChange = useCallback(\n (query: Query.Any) => props.onValueChange(props.type, { ast: query.ast }),\n [props.type, props.onValueChange],\n );\n\n return (\n <Input.Root>\n <FormFieldLabel label={props.label} asChild />\n <QueryForm initialQuery={(props.getValue() as any).ast} types={types} tags={tags} onChange={handleChange} />\n </Input.Root>\n );\n },\n\n // Function input editor.\n ['input' as const]: (props) => (\n <FunctionInputEditor {...props} functions={functions} onQueryRefOptions={onQueryRefOptions} />\n ),\n }),\n [workflows, scripts, functions, readonlySpec],\n );\n};\n\nconst getWorkflowOptions = (graphs: ComputeGraph[]) => {\n return graphs.map((graph) => ({ label: `compute-${graph.id}`, value: `dxn:echo:@:${graph.id}` }));\n};\n\nconst getFunctionOptions = (scripts: Script.Script[], functions: Function.Function[]) => {\n const getLabel = (fn: Function.Function) => scripts.find((s) => fn.source?.target?.id === s.id)?.name ?? fn.name;\n return functions.map((fn) => ({ label: getLabel(fn), value: `dxn:echo:@:${fn.id}` }));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Ref, Type } from '@dxos/echo';\nimport { type JsonPath } from '@dxos/echo/internal';\nimport { type Function } from '@dxos/functions';\nimport { useOnTransition, useTranslation } from '@dxos/react-ui';\nimport {\n Form,\n type FormFieldStateProps,\n type FormRootProps,\n type QueryRefOptions,\n omitId,\n useFormValues,\n} from '@dxos/react-ui-form';\n\nimport { meta } from '../../meta';\n\nexport type FunctionInputEditorProps = {\n type: SchemaAST.AST;\n functions: Function.Function[];\n onQueryRefOptions: QueryRefOptions;\n} & FormFieldStateProps;\n\nexport const FunctionInputEditor = ({\n type,\n functions,\n getValue,\n onValueChange,\n onQueryRefOptions,\n}: FunctionInputEditorProps) => {\n const { t } = useTranslation(meta.id);\n const selectedFunctionValue = useFormValues(FunctionInputEditor.displayName, ['function' as JsonPath]);\n const selectedFunctionId = useMemo(() => {\n if (Ref.isRef(selectedFunctionValue)) {\n return selectedFunctionValue.dxn.toString().split('dxn:echo:@:').at(1);\n }\n }, [selectedFunctionValue]);\n\n const selectedFunction = useMemo(\n () => functions.find((fn) => fn.id === selectedFunctionId),\n [functions, selectedFunctionId],\n );\n\n useOnTransition(\n // Clear function parameter input when the function changes.\n selectedFunctionValue,\n (prevValue) => {\n if (!Ref.isRef(prevValue) || !Ref.isRef(selectedFunctionValue)) {\n return false;\n }\n\n return prevValue.dxn.toString() !== selectedFunctionValue.dxn.toString();\n },\n (currValue) => currValue !== undefined,\n () => onValueChange(type, {}),\n );\n\n const inputSchema = useMemo(() => selectedFunction?.inputSchema, [selectedFunction]);\n const effectSchema = useMemo(() => (inputSchema ? Type.toEffectSchema(inputSchema) : undefined), [inputSchema]);\n const propertyCount = inputSchema?.properties ? Object.keys(inputSchema.properties).length : 0;\n const values = useMemo(() => getValue() ?? {}, [getValue]);\n\n const handleValuesChanged = useCallback<NonNullable<FormRootProps['onValuesChanged']>>(\n (values) => {\n onValueChange(type, values);\n },\n [type, onValueChange],\n );\n\n if (selectedFunction === undefined || effectSchema === undefined || propertyCount === 0) {\n return null;\n }\n\n return (\n <>\n <Form.Label label={t('function parameters label')} asChild />\n <Form.Root\n schema={omitId(effectSchema)}\n values={values}\n onValuesChanged={handleValuesChanged}\n onQueryRefOptions={onQueryRefOptions}\n >\n <Form.FieldSet />\n </Form.Root>\n </>\n );\n};\n\nFunctionInputEditor.displayName = 'AutomationTrigger.FunctionInputEditor';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Filter, Query } from '@dxos/echo';\nimport { Trigger } from '@dxos/functions';\nimport { useTranslation } from '@dxos/react-ui';\nimport { type FormFieldComponentProps, SelectField, useFormFieldState } from '@dxos/react-ui-form';\n\nimport { meta } from '../../meta';\n\nexport type SpecSelectorProps = FormFieldComponentProps;\n\nexport const SpecSelector = (props: SpecSelectorProps) => {\n const { t } = useTranslation(meta.id);\n const specProps = useFormFieldState(SpecSelector.displayName, ['spec' satisfies keyof Trigger.Trigger]);\n\n const handleTypeChange = useCallback(\n (_type: any, value: string): Trigger.Spec | undefined => {\n const getDefaultTriggerSpec = (kind: string) => {\n switch (kind) {\n case 'timer':\n return { kind: 'timer', cron: '' };\n case 'subscription':\n return {\n kind: 'subscription',\n query: {\n ast: Query.select(Filter.nothing()).ast,\n },\n };\n case 'queue':\n return { kind: 'queue', queue: 'dxn:' };\n case 'email':\n return { kind: 'email' };\n case 'webhook':\n return { kind: 'webhook' };\n default:\n return undefined;\n }\n };\n\n const defaultSpec = getDefaultTriggerSpec(value);\n if (!defaultSpec) {\n return;\n }\n\n // Update the entire spec object, not just the `spec.kind`.\n specProps.onValueChange(props.type, defaultSpec);\n },\n [props.type, specProps],\n );\n\n const options = useMemo(\n () =>\n Trigger.Kinds.map((kind) => ({\n value: kind,\n label: t(`trigger type ${kind}`),\n })),\n [t],\n );\n\n return <SelectField {...props} options={options} onValueChange={handleTypeChange} />;\n};\n\nSpecSelector.displayName = 'Form.SpecSelector';\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useCallback", "useMemo", "ComputeGraph", "DXN", "Function", "Script", "Trigger", "Filter", "Ref", "useQuery", "Input", "QueryForm", "Form", "FormFieldLabel", "SelectField", "omitId", "useRefQueryOptions", "React", "useCallback", "useMemo", "Ref", "Type", "useOnTransition", "useTranslation", "Form", "omitId", "useFormValues", "FunctionInputEditor", "type", "functions", "getValue", "onValueChange", "onQueryRefOptions", "t", "useTranslation", "meta", "id", "selectedFunctionValue", "useFormValues", "displayName", "selectedFunctionId", "useMemo", "Ref", "isRef", "dxn", "toString", "split", "at", "selectedFunction", "find", "fn", "useOnTransition", "prevValue", "currValue", "undefined", "inputSchema", "effectSchema", "Type", "toEffectSchema", "propertyCount", "properties", "Object", "keys", "length", "values", "handleValuesChanged", "useCallback", "Form", "Label", "label", "asChild", "Root", "schema", "omitId", "onValuesChanged", "FieldSet", "React", "useCallback", "useMemo", "Filter", "Query", "Trigger", "useTranslation", "SelectField", "useFormFieldState", "SpecSelector", "props", "t", "useTranslation", "meta", "id", "specProps", "useFormFieldState", "displayName", "handleTypeChange", "useCallback", "_type", "value", "getDefaultTriggerSpec", "kind", "cron", "query", "ast", "Query", "select", "Filter", "nothing", "queue", "undefined", "defaultSpec", "onValueChange", "type", "options", "useMemo", "Trigger", "Kinds", "map", "label", "React", "SelectField", "TriggerEditor", "space", "types", "tags", "readonlySpec", "trigger", "formProps", "handleQueryRefOptions", "useRefQueryOptions", "fieldMap", "useCustomInputs", "onQueryRefOptions", "React", "Form", "Root", "schema", "omitId", "Trigger", "values", "Viewport", "Content", "FieldSet", "Actions", "functions", "useQuery", "Filter", "type", "Function", "workflows", "ComputeGraph", "scripts", "Script", "useMemo", "props", "getValue", "useCallback", "formValue", "Ref", "isRef", "dxn", "toString", "undefined", "handleOnValueChange", "_type", "dxnString", "DXN", "parse", "ref", "fromDXN", "onValueChange", "SelectField", "options", "getWorkflowOptions", "concat", "getFunctionOptions", "SpecSelector", "readonly", "handleChange", "query", "ast", "Input", "FormFieldLabel", "label", "asChild", "QueryForm", "initialQuery", "onChange", "FunctionInputEditor", "graphs", "map", "graph", "id", "value", "getLabel", "fn", "find", "s", "source", "target", "name"]
7
+ }
@@ -1,16 +1,19 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
- AUTOMATION_PLUGIN
4
- } from "./chunk-NK5N3QKD.mjs";
3
+ meta
4
+ } from "./chunk-CEVIVRTY.mjs";
5
5
 
6
6
  // src/components/FunctionsPanel/FunctionsPanel.tsx
7
7
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
8
- import { Schema } from "effect";
8
+ import * as Schema from "effect/Schema";
9
9
  import React, { useCallback, useMemo } from "react";
10
- import { createIntent, LayoutAction, useIntentDispatcher } from "@dxos/app-framework";
11
- import { FunctionType, ScriptType } from "@dxos/functions";
12
- import { Filter, fullyQualifiedId, useQuery } from "@dxos/react-client/echo";
13
- import { Button, useTranslation } from "@dxos/react-ui";
10
+ import { LayoutAction, createIntent } from "@dxos/app-framework";
11
+ import { useIntentDispatcher } from "@dxos/app-framework/react";
12
+ import { Obj } from "@dxos/echo";
13
+ import { Function, Script } from "@dxos/functions";
14
+ import { SpaceAction } from "@dxos/plugin-space/types";
15
+ import { Filter, useQuery } from "@dxos/react-client/echo";
16
+ import { Button, IconButton, useTranslation } from "@dxos/react-ui";
14
17
  import { controlItemClasses } from "@dxos/react-ui-form";
15
18
  import { List } from "@dxos/react-ui-list";
16
19
  import { ghostHover, mx } from "@dxos/react-ui-theme";
@@ -18,9 +21,9 @@ var grid = "grid grid-cols-[1fr_auto] min-bs-[2.5rem]";
18
21
  var FunctionsPanel = ({ space }) => {
19
22
  var _effect = _useSignals();
20
23
  try {
21
- const { t } = useTranslation(AUTOMATION_PLUGIN);
22
- const functions = useQuery(space, Filter.type(FunctionType));
23
- const scripts = useQuery(space, Filter.type(ScriptType));
24
+ const { t } = useTranslation(meta.id);
25
+ const functions = useQuery(space, Filter.type(Function.Function));
26
+ const scripts = useQuery(space, Filter.type(Script.Script));
24
27
  const { dispatchPromise: dispatch } = useIntentDispatcher();
25
28
  const functionToScriptMap = useMemo(() => functions.reduce((map, func) => {
26
29
  const scriptId = func.source?.target?.id;
@@ -47,7 +50,7 @@ var FunctionsPanel = ({ space }) => {
47
50
  void dispatch(createIntent(LayoutAction.Open, {
48
51
  part: "main",
49
52
  subject: [
50
- fullyQualifiedId(script)
53
+ Obj.getDXN(script).toString()
51
54
  ]
52
55
  }));
53
56
  }
@@ -55,16 +58,23 @@ var FunctionsPanel = ({ space }) => {
55
58
  functionToScriptMap,
56
59
  dispatch
57
60
  ]);
61
+ const handleDelete = useCallback((func) => dispatch(createIntent(SpaceAction.RemoveObjects, {
62
+ objects: [
63
+ func
64
+ ]
65
+ })), [
66
+ dispatch
67
+ ]);
58
68
  return /* @__PURE__ */ React.createElement("div", {
59
69
  role: "none",
60
70
  className: mx(controlItemClasses)
61
71
  }, functions.length > 0 && /* @__PURE__ */ React.createElement(List.Root, {
62
72
  items: functions,
63
- isItem: Schema.is(FunctionType),
73
+ isItem: Schema.is(Function.Function),
64
74
  getId: (func) => func.id
65
75
  }, ({ items }) => /* @__PURE__ */ React.createElement("div", {
66
76
  role: "list",
67
- className: "flex flex-col w-full"
77
+ className: "flex flex-col is-full"
68
78
  }, items?.map((func) => /* @__PURE__ */ React.createElement(List.Item, {
69
79
  key: func.id,
70
80
  item: func,
@@ -77,7 +87,12 @@ var FunctionsPanel = ({ space }) => {
77
87
  className: "text-xs text-description truncate"
78
88
  }, getScriptName(func))), functionToScriptMap[func.id] && /* @__PURE__ */ React.createElement(Button, {
79
89
  onClick: () => handleGoToScript(func)
80
- }, t("go to function source button label")))))), functions.length === 0 && /* @__PURE__ */ React.createElement("div", {
90
+ }, t("go to function source button label")), /* @__PURE__ */ React.createElement(IconButton, {
91
+ iconOnly: true,
92
+ icon: "ph--trash--regular",
93
+ label: t("delete function button label"),
94
+ onClick: () => handleDelete(func)
95
+ }))))), functions.length === 0 && /* @__PURE__ */ React.createElement("div", {
81
96
  className: "text-center plb-4 text-gray-500"
82
97
  }, t("no functions found")));
83
98
  } finally {
@@ -92,4 +107,4 @@ export {
92
107
  FunctionsPanel,
93
108
  FunctionsPanel_default
94
109
  };
95
- //# sourceMappingURL=chunk-ZGPUV5VS.mjs.map
110
+ //# sourceMappingURL=chunk-RVK52XGK.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/FunctionsPanel/FunctionsPanel.tsx", "../../../src/components/FunctionsPanel/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { LayoutAction, createIntent } from '@dxos/app-framework';\nimport { useIntentDispatcher } from '@dxos/app-framework/react';\nimport { Obj } from '@dxos/echo';\nimport { Function, Script } from '@dxos/functions';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\nimport { Button, IconButton, useTranslation } from '@dxos/react-ui';\nimport { controlItemClasses } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\n\nconst grid = 'grid grid-cols-[1fr_auto] min-bs-[2.5rem]';\n\nexport type FunctionsPanelProps = {\n space: Space;\n};\n\nexport const FunctionsPanel = ({ space }: FunctionsPanelProps) => {\n const { t } = useTranslation(meta.id);\n const functions = useQuery(space, Filter.type(Function.Function));\n const scripts = useQuery(space, Filter.type(Script.Script));\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const functionToScriptMap = useMemo(\n () =>\n functions.reduce(\n (map, func) => {\n const scriptId = func.source?.target?.id;\n if (scriptId) {\n const script = scripts.find((s) => s.id === scriptId);\n if (script) {\n map[func.id] = script;\n }\n }\n return map;\n },\n {} as Record<string, Script.Script>,\n ),\n [functions, scripts],\n );\n\n const getScriptName = useCallback(\n (func: Function.Function) => {\n const script = functionToScriptMap[func.id];\n return script?.name;\n },\n [functionToScriptMap],\n );\n\n const handleGoToScript = useCallback(\n (func: Function.Function) => {\n const script = functionToScriptMap[func.id];\n if (script) {\n void dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [Obj.getDXN(script).toString()],\n }),\n );\n }\n },\n [functionToScriptMap, dispatch],\n );\n\n const handleDelete = useCallback(\n (func: Function.Function) => dispatch(createIntent(SpaceAction.RemoveObjects, { objects: [func] })),\n [dispatch],\n );\n\n return (\n <div role='none' className={mx(controlItemClasses)}>\n {functions.length > 0 && (\n <List.Root<Function.Function> items={functions} isItem={Schema.is(Function.Function)} getId={(func) => func.id}>\n {({ items }) => (\n <div role='list' className='flex flex-col is-full'>\n {items?.map((func) => (\n <List.Item<Function.Function>\n key={func.id}\n item={func}\n classNames={mx(grid, ghostHover, 'items-center', 'pli-2', 'min-bs-[3rem]')}\n >\n <div className='flex flex-col truncate'>\n <List.ItemTitle classNames='truncate'>{func.name}</List.ItemTitle>\n {getScriptName(func) && (\n <div className='text-xs text-description truncate'>{getScriptName(func)}</div>\n )}\n </div>\n {functionToScriptMap[func.id] && (\n <Button onClick={() => handleGoToScript(func)}>{t('go to function source button label')}</Button>\n )}\n <IconButton\n iconOnly\n icon='ph--trash--regular'\n label={t('delete function button label')}\n onClick={() => handleDelete(func)}\n />\n </List.Item>\n ))}\n </div>\n )}\n </List.Root>\n )}\n\n {functions.length === 0 && <div className='text-center plb-4 text-gray-500'>{t('no functions found')}</div>}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { FunctionsPanel } from './FunctionsPanel';\n\nexport * from './FunctionsPanel';\nexport default FunctionsPanel;\n"],
5
+ "mappings": "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",
6
+ "names": ["Schema", "React", "useCallback", "useMemo", "LayoutAction", "createIntent", "useIntentDispatcher", "Obj", "Function", "Script", "SpaceAction", "Filter", "useQuery", "Button", "IconButton", "useTranslation", "controlItemClasses", "List", "ghostHover", "mx", "grid", "FunctionsPanel", "space", "t", "useTranslation", "meta", "id", "functions", "useQuery", "Filter", "type", "Function", "scripts", "Script", "dispatchPromise", "dispatch", "useIntentDispatcher", "functionToScriptMap", "useMemo", "reduce", "map", "func", "scriptId", "source", "target", "script", "find", "s", "getScriptName", "useCallback", "name", "handleGoToScript", "createIntent", "LayoutAction", "Open", "part", "subject", "Obj", "getDXN", "toString", "handleDelete", "SpaceAction", "RemoveObjects", "objects", "div", "role", "className", "mx", "controlItemClasses", "length", "List", "Root", "items", "isItem", "is", "getId", "Item", "key", "item", "classNames", "ghostHover", "ItemTitle", "Button", "onClick", "IconButton", "iconOnly", "icon", "label", "FunctionsPanel"]
7
+ }
@@ -0,0 +1,116 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ AutomationCapabilities
4
+ } from "./chunk-FOK5AUNF.mjs";
5
+ import "./chunk-CEVIVRTY.mjs";
6
+
7
+ // src/capabilities/compute-runtime.ts
8
+ import * as BrowserKeyValueStore from "@effect/platform-browser/BrowserKeyValueStore";
9
+ import * as Effect from "effect/Effect";
10
+ import * as Layer from "effect/Layer";
11
+ import * as ManagedRuntime from "effect/ManagedRuntime";
12
+ import { Capabilities, contributes } from "@dxos/app-framework";
13
+ import { GenericToolkit, makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from "@dxos/assistant";
14
+ import { Resource } from "@dxos/context";
15
+ import { Query, Ref } from "@dxos/echo";
16
+ import { Database } from "@dxos/echo";
17
+ import { CredentialsService, QueueService } from "@dxos/functions";
18
+ import { FunctionImplementationResolver, FunctionInvocationServiceLayerWithLocalLoopbackExecutor, InvocationTracer, RemoteFunctionExecutionService, TriggerDispatcher } from "@dxos/functions-runtime";
19
+ import { TriggerStateStore } from "@dxos/functions-runtime";
20
+ import { invariant } from "@dxos/invariant";
21
+ import { ClientCapabilities } from "@dxos/plugin-client";
22
+ import { SpaceProperties } from "@dxos/react-client/echo";
23
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-automation/src/capabilities/compute-runtime.ts";
24
+ var compute_runtime_default = (async (context) => {
25
+ const provider = await new ComputeRuntimeProviderImpl(context).open();
26
+ return contributes(AutomationCapabilities.ComputeRuntime, provider, async () => {
27
+ await provider.close();
28
+ });
29
+ });
30
+ var ComputeRuntimeProviderImpl = class extends Resource {
31
+ #runtimes = /* @__PURE__ */ new Map();
32
+ #context;
33
+ constructor(context) {
34
+ super();
35
+ this.#context = context;
36
+ }
37
+ async _open() {
38
+ }
39
+ async _close() {
40
+ await Promise.all(Array.from(this.#runtimes.values()).map((rt) => rt.dispose()));
41
+ this.#runtimes.clear();
42
+ }
43
+ getRuntime(spaceId) {
44
+ if (this.#runtimes.has(spaceId)) {
45
+ return this.#runtimes.get(spaceId);
46
+ }
47
+ const layer = Layer.unwrapEffect(Effect.gen(this, function* () {
48
+ const client = this.#context.getCapability(ClientCapabilities.Client);
49
+ const serviceLayer = this.#context.getCapability(Capabilities.AiServiceLayer) ?? Layer.die("AiService not found");
50
+ const functions = this.#context.getCapabilities(Capabilities.Functions).flat();
51
+ const toolkits = this.#context.getCapabilities(Capabilities.Toolkit);
52
+ const mergedToolkit = GenericToolkit.merge(...toolkits);
53
+ const toolkit = mergedToolkit.toolkit;
54
+ const toolkitLayer = mergedToolkit.layer;
55
+ const space = client.spaces.get(spaceId);
56
+ invariant(space, void 0, {
57
+ F: __dxlog_file,
58
+ L: 73,
59
+ S: this,
60
+ A: [
61
+ "space",
62
+ ""
63
+ ]
64
+ });
65
+ yield* Effect.promise(() => space.waitUntilReady());
66
+ return Layer.mergeAll(TriggerDispatcher.layer({
67
+ timeControl: "natural"
68
+ })).pipe(Layer.provideMerge(Layer.mergeAll(InvocationTracerLive, TriggerStateStore.layerKv.pipe(Layer.provide(BrowserKeyValueStore.layerLocalStorage)), makeToolResolverFromFunctions(functions, toolkit), makeToolExecutionServiceFromFunctions(toolkit, toolkitLayer))), Layer.provideMerge(Layer.mergeAll(FunctionInvocationServiceLayerWithLocalLoopbackExecutor.pipe(Layer.provideMerge(FunctionImplementationResolver.layerTest({
69
+ functions
70
+ })), Layer.provideMerge(RemoteFunctionExecutionService.fromClient(
71
+ client,
72
+ // If agent is not enabled do not provide spaceId because space context will be unavailable on EDGE.
73
+ client.config.get("runtime.client.edgeFeatures.agents") ? spaceId : void 0
74
+ )), Layer.provideMerge(serviceLayer), Layer.provideMerge(CredentialsService.layerFromDatabase()), Layer.provideMerge(space ? Database.Service.layer(space.db) : Database.Service.notAvailable), Layer.provideMerge(space ? QueueService.layer(space.queues) : QueueService.notAvailable)))));
75
+ }));
76
+ const runtime = ManagedRuntime.make(layer);
77
+ this.#runtimes.set(spaceId, runtime);
78
+ return runtime;
79
+ }
80
+ };
81
+ var InvocationTracerLive = Layer.unwrapEffect(Effect.gen(function* () {
82
+ const objects = yield* Database.Service.runQuery(Query.type(SpaceProperties));
83
+ const [properties] = objects;
84
+ invariant(properties, void 0, {
85
+ F: __dxlog_file,
86
+ L: 118,
87
+ S: this,
88
+ A: [
89
+ "properties",
90
+ ""
91
+ ]
92
+ });
93
+ if (!properties.invocationTraceQueue || !properties.invocationTraceQueue.target) {
94
+ const queue2 = yield* QueueService.createQueue({
95
+ subspaceTag: "trace"
96
+ });
97
+ properties.invocationTraceQueue = Ref.fromDXN(queue2.dxn);
98
+ }
99
+ const queue = properties.invocationTraceQueue.target;
100
+ invariant(queue, void 0, {
101
+ F: __dxlog_file,
102
+ L: 126,
103
+ S: this,
104
+ A: [
105
+ "queue",
106
+ ""
107
+ ]
108
+ });
109
+ return InvocationTracer.layerLive({
110
+ invocationTraceQueue: queue
111
+ });
112
+ }));
113
+ export {
114
+ compute_runtime_default as default
115
+ };
116
+ //# sourceMappingURL=compute-runtime-SODV3TDU.mjs.map