@dxos/plugin-script 0.8.1-staging.391c573 → 0.8.1-staging.5be625a

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 (126) hide show
  1. package/dist/lib/browser/{ScriptContainer-4FIJVITA.mjs → ScriptContainer-DDXZNAPF.mjs} +10 -16
  2. package/dist/lib/browser/ScriptContainer-DDXZNAPF.mjs.map +7 -0
  3. package/dist/lib/browser/{artifact-definition-GTL3ZSF2.mjs → artifact-definition-GYCZJGR4.mjs} +7 -6
  4. package/dist/lib/browser/artifact-definition-GYCZJGR4.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-FVVCAWNP.mjs → chunk-27LV6ARH.mjs} +1 -1
  6. package/dist/lib/browser/chunk-27LV6ARH.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-JL34HAEL.mjs → chunk-AJNRPWAA.mjs} +2 -2
  8. package/dist/lib/browser/{chunk-6MOQ4BP3.mjs → chunk-FG66JYON.mjs} +2 -2
  9. package/dist/lib/browser/{chunk-7TZYIGBS.mjs → chunk-LJN26TSM.mjs} +30 -45
  10. package/dist/lib/browser/chunk-LJN26TSM.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-SFG422OU.mjs → chunk-T7XG5GED.mjs} +3 -3
  12. package/dist/lib/browser/{compiler-YY2XSKHQ.mjs → compiler-ZQLHHJ5P.mjs} +3 -3
  13. package/dist/lib/browser/index.mjs +16 -22
  14. package/dist/lib/browser/index.mjs.map +3 -3
  15. package/dist/lib/browser/{intent-resolver-BJ76DBGE.mjs → intent-resolver-3B3Z67FP.mjs} +3 -3
  16. package/dist/lib/browser/meta.json +1 -1
  17. package/dist/lib/browser/{react-surface-HXCDELEA.mjs → react-surface-ICXHFHN7.mjs} +11 -11
  18. package/dist/lib/browser/react-surface-ICXHFHN7.mjs.map +7 -0
  19. package/dist/lib/browser/{settings-HIWURVAS.mjs → settings-467GVEBU.mjs} +3 -3
  20. package/dist/lib/browser/types.mjs +2 -2
  21. package/dist/lib/node/{ScriptContainer-54GQSZCU.cjs → ScriptContainer-DM4WSS4Y.cjs} +19 -25
  22. package/dist/lib/node/ScriptContainer-DM4WSS4Y.cjs.map +7 -0
  23. package/dist/lib/node/{artifact-definition-64KZC4UT.cjs → artifact-definition-3SNVJ34V.cjs} +15 -14
  24. package/dist/lib/node/artifact-definition-3SNVJ34V.cjs.map +7 -0
  25. package/dist/lib/node/{chunk-5UH3F7TA.cjs → chunk-2XX4L67K.cjs} +4 -4
  26. package/dist/lib/node/chunk-2XX4L67K.cjs.map +7 -0
  27. package/dist/lib/node/{chunk-ALY3N6PW.cjs → chunk-AOKGOI5J.cjs} +6 -6
  28. package/dist/lib/node/{chunk-CJ45RBS4.cjs → chunk-I5Z6TRZY.cjs} +40 -55
  29. package/dist/lib/node/chunk-I5Z6TRZY.cjs.map +7 -0
  30. package/dist/lib/node/{chunk-45OE3V5M.cjs → chunk-VLQUYHPB.cjs} +9 -9
  31. package/dist/lib/node/{chunk-VJ73IG7P.cjs → chunk-XFB6JL2G.cjs} +6 -6
  32. package/dist/lib/node/{compiler-UIBLKJKG.cjs → compiler-5ALLTH2B.cjs} +7 -7
  33. package/dist/lib/node/index.cjs +39 -45
  34. package/dist/lib/node/index.cjs.map +3 -3
  35. package/dist/lib/node/{intent-resolver-HQ3FGK2K.cjs → intent-resolver-CN5WMMAD.cjs} +7 -7
  36. package/dist/lib/node/meta.json +1 -1
  37. package/dist/lib/node/{react-surface-QQL4EDUS.cjs → react-surface-IER3VEZR.cjs} +26 -26
  38. package/dist/lib/node/react-surface-IER3VEZR.cjs.map +7 -0
  39. package/dist/lib/node/{settings-ZASSNBKR.cjs → settings-WLYT2XQF.cjs} +9 -9
  40. package/dist/lib/node/types.cjs +4 -4
  41. package/dist/lib/node/types.cjs.map +1 -1
  42. package/dist/lib/node-esm/{ScriptContainer-JAQY5F3X.mjs → ScriptContainer-HWCHDARL.mjs} +10 -16
  43. package/dist/lib/node-esm/ScriptContainer-HWCHDARL.mjs.map +7 -0
  44. package/dist/lib/node-esm/{artifact-definition-SF46QOO7.mjs → artifact-definition-VAFNV62U.mjs} +7 -6
  45. package/dist/lib/node-esm/artifact-definition-VAFNV62U.mjs.map +7 -0
  46. package/dist/lib/node-esm/{chunk-P2V2Y5LV.mjs → chunk-5S2KBIMH.mjs} +1 -1
  47. package/dist/lib/node-esm/chunk-5S2KBIMH.mjs.map +7 -0
  48. package/dist/lib/node-esm/{chunk-LBFWIT3Y.mjs → chunk-BIFA5BEB.mjs} +3 -3
  49. package/dist/lib/node-esm/{chunk-RI35DJSW.mjs → chunk-F2O475DQ.mjs} +30 -45
  50. package/dist/lib/node-esm/chunk-F2O475DQ.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-CP5LXTK5.mjs → chunk-MFXRE7ZD.mjs} +2 -2
  52. package/dist/lib/node-esm/{chunk-FHQKFLM7.mjs → chunk-WQ4YIZ2L.mjs} +2 -2
  53. package/dist/lib/node-esm/{compiler-XTXFGZJM.mjs → compiler-K7GYROAO.mjs} +3 -3
  54. package/dist/lib/node-esm/index.mjs +16 -22
  55. package/dist/lib/node-esm/index.mjs.map +3 -3
  56. package/dist/lib/node-esm/{intent-resolver-CDTQKQD4.mjs → intent-resolver-6F7CVQEX.mjs} +3 -3
  57. package/dist/lib/node-esm/meta.json +1 -1
  58. package/dist/lib/node-esm/{react-surface-PCW5HN3B.mjs → react-surface-EXSKKZNP.mjs} +11 -11
  59. package/dist/lib/node-esm/react-surface-EXSKKZNP.mjs.map +7 -0
  60. package/dist/lib/node-esm/{settings-FDGLXN4I.mjs → settings-DR3B6GHE.mjs} +3 -3
  61. package/dist/lib/node-esm/types.mjs +2 -2
  62. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  63. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  65. package/dist/types/src/components/LogsPanel/LogsPanel.d.ts.map +1 -1
  66. package/dist/types/src/components/ScriptContainer.d.ts +2 -1
  67. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  68. package/dist/types/src/components/index.d.ts +1 -1
  69. package/dist/types/src/components/index.d.ts.map +1 -1
  70. package/dist/types/src/hooks/deploy.d.ts +7 -6
  71. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  72. package/dist/types/src/hooks/useToolbarAction.d.ts.map +1 -1
  73. package/dist/types/src/hooks/useToolbarState.d.ts +2 -8
  74. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
  75. package/dist/types/src/hooks/view.d.ts +3 -15
  76. package/dist/types/src/hooks/view.d.ts.map +1 -1
  77. package/dist/types/src/meta.d.ts +2 -9
  78. package/dist/types/src/meta.d.ts.map +1 -1
  79. package/dist/types/src/translations.d.ts +5 -9
  80. package/dist/types/src/translations.d.ts.map +1 -1
  81. package/dist/types/src/types.d.ts +8 -2
  82. package/dist/types/src/types.d.ts.map +1 -1
  83. package/package.json +45 -45
  84. package/src/ScriptPlugin.tsx +2 -2
  85. package/src/capabilities/artifact-definition.ts +1 -0
  86. package/src/capabilities/react-surface.tsx +15 -5
  87. package/src/components/LogsPanel/LogsPanel.tsx +19 -14
  88. package/src/components/ScriptContainer.tsx +11 -9
  89. package/src/hooks/useToolbarAction.ts +12 -3
  90. package/src/hooks/useToolbarState.ts +1 -2
  91. package/src/hooks/view.ts +6 -20
  92. package/src/meta.ts +2 -2
  93. package/src/translations.ts +2 -3
  94. package/dist/lib/browser/ScriptContainer-4FIJVITA.mjs.map +0 -7
  95. package/dist/lib/browser/artifact-definition-GTL3ZSF2.mjs.map +0 -7
  96. package/dist/lib/browser/chunk-7TZYIGBS.mjs.map +0 -7
  97. package/dist/lib/browser/chunk-FVVCAWNP.mjs.map +0 -7
  98. package/dist/lib/browser/react-surface-HXCDELEA.mjs.map +0 -7
  99. package/dist/lib/node/ScriptContainer-54GQSZCU.cjs.map +0 -7
  100. package/dist/lib/node/artifact-definition-64KZC4UT.cjs.map +0 -7
  101. package/dist/lib/node/chunk-5UH3F7TA.cjs.map +0 -7
  102. package/dist/lib/node/chunk-CJ45RBS4.cjs.map +0 -7
  103. package/dist/lib/node/react-surface-QQL4EDUS.cjs.map +0 -7
  104. package/dist/lib/node-esm/ScriptContainer-JAQY5F3X.mjs.map +0 -7
  105. package/dist/lib/node-esm/artifact-definition-SF46QOO7.mjs.map +0 -7
  106. package/dist/lib/node-esm/chunk-P2V2Y5LV.mjs.map +0 -7
  107. package/dist/lib/node-esm/chunk-RI35DJSW.mjs.map +0 -7
  108. package/dist/lib/node-esm/react-surface-PCW5HN3B.mjs.map +0 -7
  109. /package/dist/lib/browser/{chunk-JL34HAEL.mjs.map → chunk-AJNRPWAA.mjs.map} +0 -0
  110. /package/dist/lib/browser/{chunk-6MOQ4BP3.mjs.map → chunk-FG66JYON.mjs.map} +0 -0
  111. /package/dist/lib/browser/{chunk-SFG422OU.mjs.map → chunk-T7XG5GED.mjs.map} +0 -0
  112. /package/dist/lib/browser/{compiler-YY2XSKHQ.mjs.map → compiler-ZQLHHJ5P.mjs.map} +0 -0
  113. /package/dist/lib/browser/{intent-resolver-BJ76DBGE.mjs.map → intent-resolver-3B3Z67FP.mjs.map} +0 -0
  114. /package/dist/lib/browser/{settings-HIWURVAS.mjs.map → settings-467GVEBU.mjs.map} +0 -0
  115. /package/dist/lib/node/{chunk-ALY3N6PW.cjs.map → chunk-AOKGOI5J.cjs.map} +0 -0
  116. /package/dist/lib/node/{chunk-45OE3V5M.cjs.map → chunk-VLQUYHPB.cjs.map} +0 -0
  117. /package/dist/lib/node/{chunk-VJ73IG7P.cjs.map → chunk-XFB6JL2G.cjs.map} +0 -0
  118. /package/dist/lib/node/{compiler-UIBLKJKG.cjs.map → compiler-5ALLTH2B.cjs.map} +0 -0
  119. /package/dist/lib/node/{intent-resolver-HQ3FGK2K.cjs.map → intent-resolver-CN5WMMAD.cjs.map} +0 -0
  120. /package/dist/lib/node/{settings-ZASSNBKR.cjs.map → settings-WLYT2XQF.cjs.map} +0 -0
  121. /package/dist/lib/node-esm/{chunk-LBFWIT3Y.mjs.map → chunk-BIFA5BEB.mjs.map} +0 -0
  122. /package/dist/lib/node-esm/{chunk-CP5LXTK5.mjs.map → chunk-MFXRE7ZD.mjs.map} +0 -0
  123. /package/dist/lib/node-esm/{chunk-FHQKFLM7.mjs.map → chunk-WQ4YIZ2L.mjs.map} +0 -0
  124. /package/dist/lib/node-esm/{compiler-XTXFGZJM.mjs.map → compiler-K7GYROAO.mjs.map} +0 -0
  125. /package/dist/lib/node-esm/{intent-resolver-CDTQKQD4.mjs.map → intent-resolver-6F7CVQEX.mjs.map} +0 -0
  126. /package/dist/lib/node-esm/{settings-FDGLXN4I.mjs.map → settings-DR3B6GHE.mjs.map} +0 -0
@@ -7,9 +7,9 @@ import {
7
7
  useDeployState,
8
8
  useToolbarAction,
9
9
  useToolbarState
10
- } from "./chunk-7TZYIGBS.mjs";
10
+ } from "./chunk-LJN26TSM.mjs";
11
11
  import "./chunk-4SSKJNMZ.mjs";
12
- import "./chunk-FVVCAWNP.mjs";
12
+ import "./chunk-27LV6ARH.mjs";
13
13
 
14
14
  // packages/plugins/experimental/plugin-script/src/components/ScriptContainer.tsx
15
15
  import React3, { useMemo } from "react";
@@ -194,7 +194,7 @@ var createTooltipRenderer = (themeMode) => {
194
194
  };
195
195
 
196
196
  // packages/plugins/experimental/plugin-script/src/components/ScriptContainer.tsx
197
- var ScriptContainer = ({ role, classNames, script, settings = {
197
+ var ScriptContainer = ({ role, classNames, script, variant, settings = {
198
198
  editorInputMode: "vscode"
199
199
  }, env }) => {
200
200
  const identity = useIdentity();
@@ -221,9 +221,7 @@ var ScriptContainer = ({ role, classNames, script, settings = {
221
221
  space,
222
222
  identity
223
223
  ]);
224
- const state = useToolbarState({
225
- view: "editor"
226
- });
224
+ const state = useToolbarState();
227
225
  useDeployState({
228
226
  state,
229
227
  script
@@ -232,15 +230,14 @@ var ScriptContainer = ({ role, classNames, script, settings = {
232
230
  return null;
233
231
  }
234
232
  return /* @__PURE__ */ React3.createElement(StackItem.Content, {
235
- toolbar: true
236
- }, /* @__PURE__ */ React3.createElement(ScriptToolbar, {
233
+ toolbar: variant !== "logs"
234
+ }, variant === "logs" ? /* @__PURE__ */ React3.createElement(LogsPanel, {
235
+ script
236
+ }) : /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(ScriptToolbar, {
237
237
  state,
238
238
  role,
239
239
  script
240
- }), /* @__PURE__ */ React3.createElement("div", {
241
- role: "none",
242
- className: mx("flex flex-col w-full overflow-hidden divide-y divide-separator", classNames)
243
- }, state.view !== "logs" && /* @__PURE__ */ React3.createElement(TypescriptEditor, {
240
+ }), /* @__PURE__ */ React3.createElement(TypescriptEditor, {
244
241
  id: script.id,
245
242
  env,
246
243
  initialValue: script.source?.target?.content,
@@ -248,9 +245,6 @@ var ScriptContainer = ({ role, classNames, script, settings = {
248
245
  className: mx(stackItemContentEditorClassNames(role), "grow"),
249
246
  inputMode: settings.editorInputMode,
250
247
  toolbar: true
251
- }), state.view !== "editor" && /* @__PURE__ */ React3.createElement(LogsPanel, {
252
- script,
253
- classNames: "grow"
254
248
  })));
255
249
  };
256
250
  var ScriptContainer_default = ScriptContainer;
@@ -258,4 +252,4 @@ export {
258
252
  ScriptContainer,
259
253
  ScriptContainer_default as default
260
254
  };
261
- //# sourceMappingURL=ScriptContainer-4FIJVITA.mjs.map
255
+ //# sourceMappingURL=ScriptContainer-DDXZNAPF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ScriptContainer.tsx", "../../../src/components/ScriptToolbar/ScriptToolbar.tsx", "../../../src/components/TypescriptEditor/TypescriptEditor.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type ScriptType } from '@dxos/functions/types';\nimport { createDocAccessor, getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { createDataExtensions, listener, stackItemContentEditorClassNames } from '@dxos/react-ui-editor';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { LogsPanel } from './LogsPanel';\nimport { ScriptToolbar } from './ScriptToolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { useDeployState, useToolbarState } from '../hooks';\nimport { type ScriptSettingsProps } from '../types';\n\nexport type ScriptEditorProps = ThemedClassName<{\n script: ScriptType;\n variant?: 'logs';\n settings?: ScriptSettingsProps;\n role?: string;\n}> &\n Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptContainer = ({\n role,\n classNames,\n script,\n variant,\n settings = { editorInputMode: 'vscode' },\n env,\n}: ScriptEditorProps) => {\n const identity = useIdentity();\n const space = getSpace(script);\n\n const extensions = useMemo(\n () => [\n listener({\n onChange: (text) => {\n if (script.source.target && script.source.target.content !== text) {\n script.changed = true;\n }\n },\n }),\n createDataExtensions({\n id: script.id,\n text: script.source.target && createDocAccessor(script.source.target, ['content']),\n space,\n identity,\n }),\n ],\n [script, script.source.target, space, identity],\n );\n\n const state = useToolbarState();\n useDeployState({ state, script });\n\n if (!space) {\n return null;\n }\n\n return (\n <StackItem.Content toolbar={variant !== 'logs'}>\n {variant === 'logs' ? (\n <LogsPanel script={script} />\n ) : (\n <>\n <ScriptToolbar state={state} role={role} script={script} />\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={script.source?.target?.content}\n extensions={extensions}\n className={mx(stackItemContentEditorClassNames(role), 'grow')}\n inputMode={settings.editorInputMode}\n toolbar\n />\n </>\n )}\n </StackItem.Content>\n );\n};\n\nexport default ScriptContainer;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { type ScriptType } from '@dxos/functions/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { ElevationProvider, type ThemedClassName } from '@dxos/react-ui';\nimport { stackItemContentToolbarClassNames } from '@dxos/react-ui-editor';\nimport { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from '@dxos/react-ui-menu';\n\nimport {\n type ScriptToolbarState,\n createDeploy,\n createFormat,\n createTemplateSelect,\n createView,\n useToolbarAction,\n} from '../../hooks';\n\nexport type ScriptToolbarProps = ThemedClassName<{\n role?: string;\n script: ScriptType;\n state: ScriptToolbarState;\n}>;\n\nconst createToolbar = (state: ScriptToolbarState) => {\n const templateSelect = createTemplateSelect();\n const format = createFormat();\n const gap = createGapSeparator();\n const deploy = createDeploy(state);\n const view = createView(state);\n return {\n nodes: [...templateSelect.nodes, ...format.nodes, ...gap.nodes, ...deploy.nodes, ...view.nodes],\n edges: [...templateSelect.edges, ...format.edges, ...gap.edges, ...deploy.edges, ...view.edges],\n };\n};\n\nexport const ScriptToolbar = ({ script, role, state, classNames }: ScriptToolbarProps) => {\n const handleAction = useToolbarAction({ state, script });\n const toolbarCreator = useCallback(() => createToolbar(state), [state]);\n const menu = useMenuActions(toolbarCreator);\n return (\n <div role='none' className={stackItemContentToolbarClassNames(role)}>\n <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>\n <MenuProvider {...menu} onAction={handleAction} attendableId={fullyQualifiedId(script)}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n </ElevationProvider>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { defaultHighlightStyle } from '@codemirror/language';\nimport { Prec } from '@codemirror/state';\nimport { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';\nimport { keymap } from '@codemirror/view';\nimport { tags } from '@lezer/highlight';\nimport { type VirtualTypeScriptEnvironment } from '@typescript/vfs';\nimport { continueKeymap } from '@valtown/codemirror-continue';\nimport { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover, type HoverInfo } from '@valtown/codemirror-ts';\nimport React from 'react';\n\nimport { type ThemeMode, useThemeContext } from '@dxos/react-ui';\nimport {\n autocomplete,\n createBasicExtensions,\n createThemeExtensions,\n editorFullWidth,\n type EditorInputMode,\n editorMonospace,\n EditorView,\n folding,\n InputModeExtensions,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { isNonNullable } from '@dxos/util';\n\nexport type TypescriptEditorProps = {\n id: string;\n inputMode?: EditorInputMode;\n env?: VirtualTypeScriptEnvironment;\n toolbar?: boolean;\n} & Pick<UseTextEditorProps, 'className' | 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>;\n\nexport const TypescriptEditor = ({\n id,\n env,\n className,\n initialValue,\n extensions,\n scrollTo,\n selection,\n toolbar,\n inputMode = 'vscode',\n}: TypescriptEditorProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n id,\n initialValue,\n extensions: [\n extensions,\n createBasicExtensions({\n highlightActiveLine: true,\n indentWithTab: true,\n lineNumbers: true,\n lineWrapping: false,\n scrollPastEnd: true,\n }),\n createThemeExtensions({\n themeMode,\n syntaxHighlighting: true,\n slots: {\n content: { className: editorFullWidth },\n },\n }),\n // NOTE: Not using default editor gutter because folding for code works best right beside text.\n EditorView.theme({\n '.cm-gutters': {\n // Match margin from content.\n marginTop: '16px',\n background: 'var(--dx-baseSurface)',\n },\n }),\n InputModeExtensions[inputMode],\n folding(),\n // Continues block comments when you hit Enter.\n Prec.high(keymap.of(continueKeymap)),\n // TODO(burdon): Factor out.\n [\n editorMonospace,\n javascript({ typescript: true }),\n // https://github.com/val-town/codemirror-ts\n autocomplete({ override: env ? [tsAutocomplete()] : [] }),\n env\n ? [\n tsFacet.of({ env, path: `/src/${id}.ts` }),\n tsSync(),\n tsLinter(),\n tsHover({ renderTooltip: createTooltipRenderer(themeMode) }),\n ]\n : [],\n ],\n ].filter(isNonNullable),\n selection,\n scrollTo,\n }),\n [id, extensions, themeMode, inputMode, selection, scrollTo],\n );\n\n return (\n <div ref={parentRef} data-toolbar={toolbar ? 'enabled' : 'disabled'} className={className} {...focusAttributes} />\n );\n};\n\nconst createTooltipRenderer = (themeMode: ThemeMode) => {\n const theme = themeMode === 'dark' ? oneDarkHighlightStyle : defaultHighlightStyle;\n\n const classFromKind = (_kind: string) => {\n // E.g., localName, methodName, parameterName, etc.\n const kind = _kind.endsWith('Name') ? 'name' : _kind;\n const validTag = kind in tags;\n if (!validTag) {\n return '';\n }\n\n const tag = tags[kind as keyof typeof tags];\n if (typeof tag === 'function') {\n return '';\n }\n\n return theme.style([tag]) ?? '';\n };\n\n return (info: HoverInfo) => {\n const div = document.createElement('div');\n div.className = 'p-1 rounded border border-separator bg-baseSurface xs:max-w-80 max-w-lg';\n\n if (info.quickInfo?.displayParts) {\n for (const part of info.quickInfo.displayParts) {\n const span = div.appendChild(document.createElement('span'));\n span.className = classFromKind(part.kind);\n span.innerText = part.text;\n }\n }\n\n return { dom: div };\n };\n};\n\nexport default TypescriptEditor;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useMemo", "createDocAccessor", "getSpace", "useIdentity", "createDataExtensions", "listener", "stackItemContentEditorClassNames", "StackItem", "mx", "React", "useCallback", "fullyQualifiedId", "ElevationProvider", "stackItemContentToolbarClassNames", "createGapSeparator", "MenuProvider", "ToolbarMenu", "useMenuActions", "createToolbar", "state", "templateSelect", "createTemplateSelect", "format", "createFormat", "gap", "createGapSeparator", "deploy", "createDeploy", "view", "createView", "nodes", "edges", "ScriptToolbar", "script", "role", "classNames", "handleAction", "useToolbarAction", "toolbarCreator", "useCallback", "menu", "useMenuActions", "div", "className", "stackItemContentToolbarClassNames", "ElevationProvider", "elevation", "MenuProvider", "onAction", "attendableId", "fullyQualifiedId", "ToolbarMenu", "javascript", "defaultHighlightStyle", "Prec", "oneDarkHighlightStyle", "keymap", "tags", "continueKeymap", "tsSync", "tsFacet", "tsLinter", "tsAutocomplete", "tsHover", "React", "useThemeContext", "autocomplete", "createBasicExtensions", "createThemeExtensions", "editorFullWidth", "editorMonospace", "EditorView", "folding", "InputModeExtensions", "useTextEditor", "isNonNullable", "TypescriptEditor", "id", "env", "className", "initialValue", "extensions", "scrollTo", "selection", "toolbar", "inputMode", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "scrollPastEnd", "createThemeExtensions", "syntaxHighlighting", "slots", "content", "editorFullWidth", "EditorView", "theme", "marginTop", "background", "InputModeExtensions", "folding", "Prec", "high", "keymap", "of", "continueKeymap", "editorMonospace", "javascript", "typescript", "autocomplete", "override", "tsAutocomplete", "tsFacet", "path", "tsSync", "tsLinter", "tsHover", "renderTooltip", "createTooltipRenderer", "filter", "isNonNullable", "React", "div", "ref", "data-toolbar", "oneDarkHighlightStyle", "defaultHighlightStyle", "classFromKind", "_kind", "kind", "endsWith", "validTag", "tags", "tag", "style", "info", "document", "createElement", "quickInfo", "displayParts", "part", "span", "appendChild", "innerText", "text", "dom", "ScriptContainer", "role", "classNames", "script", "variant", "settings", "editorInputMode", "env", "identity", "useIdentity", "space", "getSpace", "extensions", "useMemo", "listener", "onChange", "text", "source", "target", "content", "changed", "createDataExtensions", "id", "createDocAccessor", "state", "useToolbarState", "useDeployState", "React", "StackItem", "Content", "toolbar", "LogsPanel", "ScriptToolbar", "TypescriptEditor", "initialValue", "className", "mx", "stackItemContentEditorClassNames", "inputMode"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  meta
3
- } from "./chunk-FVVCAWNP.mjs";
3
+ } from "./chunk-27LV6ARH.mjs";
4
4
 
5
5
  // packages/plugins/experimental/plugin-script/src/capabilities/artifact-definition.ts
6
6
  import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
@@ -23,6 +23,7 @@ var artifact_definition_default = () => {
23
23
  instructions: `
24
24
  If the user explicitly requests you to write a script, you can create one.
25
25
  If the user requests you to change one of the existing script, you can update it.
26
+ You must not create a script unless the user explicitly requests it.
26
27
  Scripts are short code pieces of executable code that can be used to perform computations, integrate with external systems, and perform automated tasks.
27
28
  Each script must follow as strict shape for the definition but the body can contain any valid executable code.
28
29
  Scripts are written in JavaScript or TypeScript.
@@ -145,7 +146,7 @@ var artifact_definition_default = () => {
145
146
  execute: async ({ name, code }, { extensions }) => {
146
147
  invariant(extensions?.space, "No space", {
147
148
  F: __dxlog_file,
148
- L: 152,
149
+ L: 153,
149
150
  S: void 0,
150
151
  A: [
151
152
  "extensions?.space",
@@ -154,7 +155,7 @@ var artifact_definition_default = () => {
154
155
  });
155
156
  invariant(extensions?.dispatch, "No intent dispatcher", {
156
157
  F: __dxlog_file,
157
- L: 153,
158
+ L: 154,
158
159
  S: void 0,
159
160
  A: [
160
161
  "extensions?.dispatch",
@@ -190,7 +191,7 @@ var artifact_definition_default = () => {
190
191
  execute: async ({ id }, { extensions }) => {
191
192
  invariant(extensions?.space, "No space", {
192
193
  F: __dxlog_file,
193
- L: 182,
194
+ L: 183,
194
195
  S: void 0,
195
196
  A: [
196
197
  "extensions?.space",
@@ -220,7 +221,7 @@ var artifact_definition_default = () => {
220
221
  execute: async ({ id, code }, { extensions }) => {
221
222
  invariant(extensions?.space, "No space", {
222
223
  F: __dxlog_file,
223
- L: 204,
224
+ L: 205,
224
225
  S: void 0,
225
226
  A: [
226
227
  "extensions?.space",
@@ -248,4 +249,4 @@ var artifact_definition_default = () => {
248
249
  export {
249
250
  artifact_definition_default as default
250
251
  };
251
- //# sourceMappingURL=artifact-definition-GTL3ZSF2.mjs.map
252
+ //# sourceMappingURL=artifact-definition-GYCZJGR4.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/artifact-definition.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, type PromiseIntentDispatcher } from '@dxos/app-framework';\nimport { defineArtifact, defineTool, ToolResult } from '@dxos/artifact';\nimport { createArtifactElement } from '@dxos/assistant';\nimport { ObjectId, S } from '@dxos/echo-schema';\nimport { ScriptType } from '@dxos/functions/types';\nimport { invariant } from '@dxos/invariant';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { create, makeRef, type Space } from '@dxos/react-client/echo';\nimport { TextType } from '@dxos/schema';\n\nimport { meta } from '../meta';\n// TODO(burdon): Factor out.\ndeclare global {\n interface ToolContextExtensions {\n space?: Space;\n dispatch?: PromiseIntentDispatcher;\n }\n}\n\nexport default () => {\n const definition = defineArtifact({\n id: meta.id,\n name: meta.name,\n // TODO(dmaretskyi): Since writing scripts requires a lot of domain knowledge,\n // we should offload the work of synthesizing the code to a separate model.\n // The main reasoning model will give it a concrete task and the script model will synthesize the code, knowing all the docs.\n instructions: `\n If the user explicitly requests you to write a script, you can create one.\n If the user requests you to change one of the existing script, you can update it.\n You must not create a script unless the user explicitly requests it.\n Scripts are short code pieces of executable code that can be used to perform computations, integrate with external systems, and perform automated tasks.\n Each script must follow as strict shape for the definition but the body can contain any valid executable code.\n Scripts are written in JavaScript or TypeScript.\n Each script must define an input schema and output schema.\n Each script must have its own detailed description.\n\n Important: You cannot execute scripts. Scripts are only available as tools after the user deploys them. You must only call the available tools.\n\n Description:\n The description is a detailed description of the script.\n It is used to describe the script's purpose, input, and output.\n The description is used to generate the script's documentation.\n The description is also goes into the script metadata.\n The description is used by AI to understand the script and its purpose.\n The description must provide cases on when the script should be used.\n\n Schema: \n The schema is defined using a schema-DSL library called Effect Schema.\n The input schema describes the arguments that the script accepts.\n The output schema describes the result that the script produces.\n The schema is used to validate the script's input and output.\n The schema is also goes into the script metadata.\n The properties in the schema must have valid descriptions.\n The input and output schemas must both be a struct of fields.\n\n Restricts:\n The scripts can only import code from \"dxos:functions\" module. No other modules are allowed.\n Some web APIs are available - like fetch.\n\n Reasoning:\n Before writing a script, synthesize the following information:\n - Description\n - What APIs will be used.\n - Detailed input schema\n - Detailed output schema\n\n <apis>\n export function defineFunction(params: { \n description: string, \n inputSchema: S.Schema, \n outputSchema: S.Schema, \n handler: (params: { event: { data: TInput } }) => Promise<TOutput> \n }): FunctionDefinition\n /**\n * Effect Schema\n */\n export const S; \n\n // Examples: \n\n S.String\n S.Number\n S.Boolean\n S.Struct({\n from: S.String.annotations({ description: 'The source currency' }),\n to: S.String.annotations({ description: 'The target currency' }),\n })\n S.Array(S.String)\n S.Union(S.String, S.Number)\n S.optional(S.String)\n S.String.annotations({ description: 'The source currency' })\n </apis>\n\n <handler_function>\n Async function that takes the argument in the form of:\n\n type HandlerFunctionParam = {\n event: {\n data: T // The input schema\n },\n }\n\n The function must return the result that matches the output schema.\n </handler_function>\n \n <example>\n import { defineFunction, S } from 'dxos:functions';\n\n export default defineFunction({\n description: 'Returns the exchange rate between two currencies.',\n\n inputSchema: S.Struct({\n from: S.String.annotations({ description: 'The source currency' }),\n to: S.String.annotations({ description: 'The target currency' }),\n }),\n\n outputSchema: S.Struct({\n rate: S.String.annotations({ description: 'The exchange rate' }),\n }),\n\n handler: async ({\n event: {\n data: { from, to },\n },\n }: any) => {\n const res = await fetch(\\`https://free.ratesdb.com/v1/rates?from=\\${from}&to=\\${to}\\`);\n const {\n data: { rates },\n } = await res.json();\n\n return { rate: rates[to].toString() };\n },\n });\n </example>\n `,\n schema: ScriptType,\n tools: [\n defineTool(meta.id, {\n name: 'create',\n description: 'Create a new script. Returns the artifact definition for the script',\n caption: 'Creating script...',\n schema: S.Struct({\n name: S.String.annotations({ description: 'The name of the script' }),\n code: S.String.annotations({\n description: 'The full code of the script in JavaScript or TypeScript. Must be valid executable code.',\n }),\n }),\n execute: async ({ name, code }, { extensions }) => {\n invariant(extensions?.space, 'No space');\n invariant(extensions?.dispatch, 'No intent dispatcher');\n const script = create(ScriptType, {\n name,\n source: makeRef(\n create(TextType, {\n content: code,\n }),\n ),\n });\n extensions.space.db.add(script);\n await extensions.space.db.flush();\n\n const intent = createIntent(SpaceAction.AddObject, { target: extensions.space, object: script });\n const { data, error } = await extensions.dispatch(intent);\n if (!data || error) {\n return ToolResult.Error(error?.message ?? 'Failed to create chess game');\n }\n\n return ToolResult.Success(createArtifactElement(script.id));\n },\n }),\n defineTool(meta.id, {\n name: 'inspect',\n description: 'Inspect a script. Returns the artifact definition for the script',\n caption: 'Inspecting script...',\n schema: S.Struct({\n id: ObjectId,\n }),\n execute: async ({ id }, { extensions }) => {\n invariant(extensions?.space, 'No space');\n\n const script = (await extensions.space.db.query({ id }).first()) as ScriptType;\n const { content } = await script.source.load();\n\n return ToolResult.Success({\n name: script.name,\n code: content,\n });\n },\n }),\n defineTool(meta.id, {\n name: 'update',\n description: 'Update a script. Returns the artifact definition for the script',\n caption: 'Updating script...',\n schema: S.Struct({\n id: ObjectId,\n code: S.String.annotations({\n description: 'The full code of the script in JavaScript or TypeScript. Must be valid executable code.',\n }),\n }),\n execute: async ({ id, code }, { extensions }) => {\n invariant(extensions?.space, 'No space');\n\n const script = (await extensions.space.db.query({ id }).first()) as ScriptType;\n const source = await script.source.load();\n if (!source) {\n return ToolResult.Error('Script not found');\n }\n\n source.content = code;\n await extensions.space?.db.flush();\n\n return ToolResult.Success({\n name: script.name,\n });\n },\n }),\n ],\n });\n\n return contributes(Capabilities.ArtifactDefinition, definition);\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Capabilities", "contributes", "createIntent", "defineArtifact", "defineTool", "ToolResult", "createArtifactElement", "ObjectId", "S", "ScriptType", "invariant", "SpaceAction", "create", "makeRef", "TextType", "definition", "defineArtifact", "id", "meta", "name", "instructions", "schema", "ScriptType", "tools", "defineTool", "description", "caption", "S", "Struct", "String", "annotations", "code", "execute", "extensions", "invariant", "space", "dispatch", "script", "create", "source", "makeRef", "TextType", "content", "db", "add", "flush", "intent", "createIntent", "SpaceAction", "AddObject", "target", "object", "data", "error", "ToolResult", "Error", "message", "Success", "createArtifactElement", "ObjectId", "query", "first", "load", "contributes", "Capabilities", "ArtifactDefinition"]
7
+ }
@@ -18,4 +18,4 @@ export {
18
18
  SCRIPT_PLUGIN,
19
19
  meta
20
20
  };
21
- //# sourceMappingURL=chunk-FVVCAWNP.mjs.map
21
+ //# sourceMappingURL=chunk-27LV6ARH.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SCRIPT_PLUGIN = 'dxos.org/plugin/script';\n\nexport const meta: PluginMeta = {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description:\n 'Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API’s or external data inside of Composer.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer',\n tags: ['experimental'],\n screenshots: ['https://dxos.network/plugin-details-scripts-dark.png'],\n};\n"],
5
+ "mappings": ";AAMO,IAAMA,gBAAgB;AAEtB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;",
6
+ "names": ["SCRIPT_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags", "screenshots"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SCRIPT_PLUGIN
3
- } from "./chunk-FVVCAWNP.mjs";
3
+ } from "./chunk-27LV6ARH.mjs";
4
4
 
5
5
  // packages/plugins/experimental/plugin-script/src/types.ts
6
6
  import { TitleAnnotationId } from "effect/SchemaAST";
@@ -37,4 +37,4 @@ export {
37
37
  ScriptAction,
38
38
  ScriptSettingsSchema
39
39
  };
40
- //# sourceMappingURL=chunk-JL34HAEL.mjs.map
40
+ //# sourceMappingURL=chunk-AJNRPWAA.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SCRIPT_PLUGIN
3
- } from "./chunk-FVVCAWNP.mjs";
3
+ } from "./chunk-27LV6ARH.mjs";
4
4
 
5
5
  // packages/plugins/experimental/plugin-script/src/capabilities/capabilities.ts
6
6
  import { defineCapability } from "@dxos/app-framework";
@@ -12,4 +12,4 @@ var ScriptCapabilities;
12
12
  export {
13
13
  ScriptCapabilities
14
14
  };
15
- //# sourceMappingURL=chunk-6MOQ4BP3.mjs.map
15
+ //# sourceMappingURL=chunk-FG66JYON.mjs.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-4SSKJNMZ.mjs";
4
4
  import {
5
5
  SCRIPT_PLUGIN
6
- } from "./chunk-FVVCAWNP.mjs";
6
+ } from "./chunk-27LV6ARH.mjs";
7
7
 
8
8
  // packages/plugins/experimental/plugin-script/src/hooks/deploy.ts
9
9
  import { useCallback, useEffect, useMemo } from "react";
@@ -362,25 +362,12 @@ var useTemplateSelectHandler = ({ script }) => {
362
362
  };
363
363
 
364
364
  // packages/plugins/experimental/plugin-script/src/hooks/view.ts
365
- import { createMenuAction as createMenuAction4, createMenuItemGroup as createMenuItemGroup2 } from "@dxos/react-ui-menu";
365
+ import { createMenuAction as createMenuAction4 } from "@dxos/react-ui-menu";
366
366
  var views = {
367
- editor: "ph--code--regular",
368
- split: "ph--square-split-vertical--regular",
367
+ // editor: 'ph--code--regular',
368
+ // split: 'ph--square-split-vertical--regular',
369
369
  logs: "ph--clock-counter-clockwise--regular"
370
370
  };
371
- var createViewGroupItem = (state) => {
372
- return createMenuItemGroup2("view", {
373
- label: [
374
- "view group label",
375
- {
376
- ns: SCRIPT_PLUGIN
377
- }
378
- ],
379
- variant: "dropdownMenu",
380
- applyActive: true,
381
- value: state.view
382
- });
383
- };
384
371
  var createViewActions = (state) => {
385
372
  return Object.entries(views).map(([viewType, icon]) => {
386
373
  return createMenuAction4(`view--${viewType}`, {
@@ -392,49 +379,45 @@ var createViewActions = (state) => {
392
379
  ns: SCRIPT_PLUGIN
393
380
  }
394
381
  ],
395
- icon,
396
- checked: state.view === viewType
382
+ icon
397
383
  });
398
384
  });
399
385
  };
400
386
  var createView = (state) => {
401
- const viewGroupItem = createViewGroupItem(state);
402
387
  const viewActions = createViewActions(state);
403
388
  return {
404
- nodes: [
405
- viewGroupItem,
406
- ...viewActions
407
- ],
408
- edges: [
409
- {
410
- source: "root",
411
- target: "view"
412
- },
413
- ...viewActions.map((action) => ({
414
- source: "view",
415
- target: action.id
416
- }))
417
- ]
389
+ nodes: viewActions,
390
+ edges: viewActions.map((action) => ({
391
+ source: "root",
392
+ target: action.id
393
+ }))
418
394
  };
419
395
  };
420
396
 
421
397
  // packages/plugins/experimental/plugin-script/src/hooks/useToolbarAction.ts
422
398
  import { useCallback as useCallback4 } from "react";
399
+ import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
423
400
  import { log as log3 } from "@dxos/log";
401
+ import { DeckAction, surfaceVariant } from "@dxos/plugin-deck/types";
402
+ import { fullyQualifiedId } from "@dxos/react-client/echo";
424
403
  var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/hooks/useToolbarAction.ts";
425
404
  var useToolbarAction = (props) => {
426
405
  const handleTemplateSelect = useTemplateSelectHandler(props);
427
406
  const handleFormat = useFormatHandler(props);
428
407
  const handleDeploy = useDeployHandler(props);
429
408
  const handleCopy = useCopyHandler(props);
409
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
430
410
  return useCallback4((action) => {
431
411
  switch (action.properties.type) {
412
+ case "view":
413
+ void dispatch(createIntent(DeckAction.ChangeCompanion, {
414
+ primary: fullyQualifiedId(props.script),
415
+ companion: surfaceVariant("logs")
416
+ }));
417
+ break;
432
418
  case "template":
433
419
  handleTemplateSelect(action.properties.value);
434
420
  break;
435
- case "view":
436
- props.state.view = action.properties.value;
437
- break;
438
421
  case "format":
439
422
  void handleFormat();
440
423
  break;
@@ -447,7 +430,7 @@ var useToolbarAction = (props) => {
447
430
  default:
448
431
  log3.error("Unknown action type", action, {
449
432
  F: __dxlog_file3,
450
- L: 49,
433
+ L: 58,
451
434
  S: void 0,
452
435
  C: (f, a) => f(...a)
453
436
  });
@@ -463,7 +446,8 @@ var useToolbarAction = (props) => {
463
446
  // packages/plugins/experimental/plugin-script/src/components/LogsPanel/LogsPanel.tsx
464
447
  import React, { useCallback as useCallback5, useMemo as useMemo3, useState } from "react";
465
448
  import { decodeReference } from "@dxos/echo-protocol";
466
- import { useEdgeClient, useQueue } from "@dxos/react-edge-client";
449
+ import { createInvocationSpans } from "@dxos/functions/types";
450
+ import { useQueue } from "@dxos/react-client/echo";
467
451
  import { Icon, List, ListItem, useTranslation as useTranslation2 } from "@dxos/react-ui";
468
452
  import { mx } from "@dxos/react-ui-theme";
469
453
  var LogsPanel = ({ script, classNames }) => {
@@ -471,10 +455,12 @@ var LogsPanel = ({ script, classNames }) => {
471
455
  const { space, existingFunctionUrl } = useDeployDeps({
472
456
  script
473
457
  });
474
- const edgeClient = useEdgeClient();
475
- const invocationTraceQueue = useQueue(edgeClient, space?.properties.invocationTraceQueue?.dxn, {
458
+ const invocationTraceQueue = useQueue(space?.properties.invocationTraceQueue?.dxn, {
476
459
  pollInterval: 500
477
460
  });
461
+ const invocationSpans = useMemo3(() => createInvocationSpans(invocationTraceQueue?.items), [
462
+ invocationTraceQueue?.items ?? []
463
+ ]);
478
464
  const [selected, setSelected] = useState();
479
465
  const workerDxn = `dxn:worker:${existingFunctionUrl?.split("/").at(-1)}`;
480
466
  if (!invocationTraceQueue) {
@@ -485,7 +471,7 @@ var LogsPanel = ({ script, classNames }) => {
485
471
  }, []);
486
472
  return /* @__PURE__ */ React.createElement(List, {
487
473
  classNames: mx("overflow-y-auto", classNames)
488
- }, invocationTraceQueue.items.filter((trace) => decodeReference(trace.invocationTarget).dxn?.toString() === workerDxn).map((trace) => /* @__PURE__ */ React.createElement(InvocationTraceItem, {
474
+ }, invocationSpans.filter((trace) => decodeReference(trace.invocationTarget).dxn?.toString() === workerDxn).map((trace) => /* @__PURE__ */ React.createElement(InvocationTraceItem, {
489
475
  key: trace.id,
490
476
  trace,
491
477
  open: selected?.id === trace.id,
@@ -493,8 +479,7 @@ var LogsPanel = ({ script, classNames }) => {
493
479
  })));
494
480
  };
495
481
  var InvocationTraceItem = ({ trace, open, setOpen }) => {
496
- const edgeClient = useEdgeClient();
497
- const eventQueue = useQueue(edgeClient, open ? decodeReference(trace.invocationTraceQueue).dxn : void 0);
482
+ const eventQueue = useQueue(open ? decodeReference(trace.invocationTraceQueue).dxn : void 0);
498
483
  const handleOpenChange = useCallback5((open2) => {
499
484
  setOpen?.(trace, open2);
500
485
  }, [
@@ -538,4 +523,4 @@ export {
538
523
  useToolbarState,
539
524
  LogsPanel
540
525
  };
541
- //# sourceMappingURL=chunk-7TZYIGBS.mjs.map
526
+ //# sourceMappingURL=chunk-LJN26TSM.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/deploy.ts", "../../../src/hooks/useToolbarState.ts", "../../../src/hooks/format.ts", "../../../src/hooks/template.ts", "../../../src/hooks/view.ts", "../../../src/hooks/useToolbarAction.ts", "../../../src/components/LogsPanel/LogsPanel.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport {\n FunctionType,\n type ScriptType,\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n incrementSemverPatch,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n} from '@dxos/functions';\nimport { Bundler } from '@dxos/functions/bundler';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, create, getMeta, getSpace, makeRef, useQuery } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { type ViewState } from './view';\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type DeployActionProperties = { type: 'deploy' } | { type: 'copy' };\n\nexport type DeployState = ViewState & {\n deploying: boolean;\n deployed: boolean;\n functionUrl: string;\n error: string;\n};\n\nexport const createDeploy = (state: Partial<DeployState>) => {\n const errorItem = createMenuAction('error', {\n label: state.error ?? ['no error label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--warning-circle--regular',\n hidden: !state.error,\n });\n\n const deployAction = createMenuAction<DeployActionProperties>('deploy', {\n type: 'deploy',\n label: [state.deploying ? 'pending label' : 'deploy label', { ns: SCRIPT_PLUGIN }],\n icon: state.deploying ? 'ph--spinner-gap--regular' : 'ph--cloud-arrow-up--regular',\n disabled: state.deploying,\n classNames: state.deploying ? '[&_svg]:animate-spin' : '',\n });\n\n const copyAction = createMenuAction<DeployActionProperties>('copy', {\n type: 'copy',\n label: ['copy link label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--link--regular',\n disabled: !state.functionUrl,\n });\n\n return {\n nodes: [errorItem, deployAction, copyAction],\n edges: [\n { source: 'root', target: 'error' },\n { source: 'root', target: 'deploy' },\n { source: 'root', target: 'copy' },\n ],\n };\n};\n\nexport const useDeployDeps = ({ script }: { script: ScriptType }) => {\n const space = getSpace(script);\n const [fn] = useQuery(space, Filter.schema(FunctionType, { source: script }));\n const client = useClient();\n const existingFunctionUrl = useMemo(() => fn && getUserFunctionUrlInMetadata(getMeta(fn)), [fn]);\n return { space, fn, client, existingFunctionUrl };\n};\n\nexport const useDeployState = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const { space, client, existingFunctionUrl } = useDeployDeps({ script });\n useEffect(() => {\n if (!existingFunctionUrl) {\n return;\n }\n\n state.functionUrl = getInvocationUrl(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: space?.id,\n });\n }, [existingFunctionUrl, space]);\n\n useEffect(() => {\n state.deployed = Boolean(existingFunctionUrl) && !script.changed;\n }, [script.changed, existingFunctionUrl]);\n};\n\nexport const useDeployHandler = ({ state, script }: { state: Partial<DeployState>; script: ScriptType }) => {\n const { space, fn, client, existingFunctionUrl } = useDeployDeps({ script });\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n return useCallback(async () => {\n if (!script.source || !space) {\n return;\n }\n\n state.error = undefined;\n state.deploying = true;\n\n try {\n const existingFunctionId = existingFunctionUrl?.split('/').at(-1);\n\n const bundler = new Bundler({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\n const buildResult = await bundler.bundle({ source: script.source.target!.content });\n if (buildResult.error || !buildResult.bundle) {\n throw buildResult.error;\n }\n\n const { functionId, version, meta } = await uploadWorkerFunction({\n client,\n spaceId: space.id,\n version: fn ? incrementSemverPatch(fn.version) : '0.0.1',\n functionId: existingFunctionId,\n source: buildResult.bundle,\n });\n if (functionId === undefined || version === undefined) {\n throw new Error(`Upload didn't return expected data: functionId=${functionId}, version=${version}`);\n }\n\n log.info('function uploaded', { functionId, version });\n if (fn) {\n fn.version = version;\n }\n\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { name: functionId, version, source: makeRef(script) }));\n\n script.changed = false;\n if (script.description !== undefined && script.description.trim() !== '') {\n deployedFunction.description = script.description;\n } else if (meta.description) {\n deployedFunction.description = meta.description;\n } else {\n log.verbose('no description in function metadata', { functionId });\n }\n\n if (meta.inputSchema) {\n deployedFunction.inputSchema = meta.inputSchema;\n } else {\n log.verbose('no input schema in function metadata', { functionId });\n }\n\n if (meta.outputSchema) {\n deployedFunction.outputSchema = meta.outputSchema;\n } else {\n log.verbose('no output schema in function metadata', { functionId });\n }\n\n setUserFunctionUrlInMetadata(getMeta(deployedFunction), `/${space.id}/${functionId}`);\n } catch (err: any) {\n log.catch(err);\n state.error = t('upload failed label');\n }\n state.deploying = false;\n }, [fn, client, t, existingFunctionUrl, script, script.name, script.source, space?.id ?? null]);\n};\n\nexport const useCopyHandler = ({ state }: { state: Partial<DeployState> }) =>\n useCallback(async () => {\n if (!state.functionUrl) {\n return;\n }\n await navigator.clipboard.writeText(state.functionUrl);\n }, [state.functionUrl]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { create } from '@dxos/live-object';\n\nimport { type DeployState } from './deploy';\n\nexport type ScriptToolbarState = Partial<DeployState>;\n\n// TODO(burdon): Replace with context provider?\nexport const useToolbarState = (initialState: ScriptToolbarState = {}) => {\n return useMemo(() => create<ScriptToolbarState>(initialState), []);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { format } from 'prettier';\nimport prettierPluginEstree from 'prettier/plugins/estree';\nimport prettierPluginTypescript from 'prettier/plugins/typescript';\nimport { useCallback } from 'react';\n\nimport { type ScriptType } from '@dxos/functions/types';\nimport { log } from '@dxos/log';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type FormatActionProperties = { type: 'format' };\n\nexport const createFormat = () => {\n const formatAction = createMenuAction('format', {\n label: ['format label', { ns: SCRIPT_PLUGIN }],\n icon: 'ph--magic-wand--regular',\n });\n\n return {\n nodes: [formatAction],\n edges: [{ source: 'root', target: 'format' }],\n };\n};\n\nexport const useFormatHandler = ({ script }: { script: ScriptType }) =>\n useCallback(async () => {\n if (!script.source) {\n return;\n }\n\n try {\n script.source.target!.content = await format(script.source.target!.content, {\n parser: 'typescript',\n plugins: [prettierPluginEstree, prettierPluginTypescript],\n semi: true,\n singleQuote: true,\n });\n } catch (err: any) {\n // TODO(wittjosiah): Show error in UI.\n log.catch(err);\n }\n }, [script.source]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { FUNCTIONS_PRESET_META_KEY, type ScriptType } from '@dxos/functions/types';\nimport { getMeta } from '@dxos/live-object';\nimport { createMenuItemGroup, createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { templates } from '../templates';\n\nexport type TemplateActionProperties = { type: 'template'; value: string };\n\nconst createTemplateSelectGroup = () => {\n return createMenuItemGroup('template-select', {\n label: ['template select group label', { ns: SCRIPT_PLUGIN }],\n variant: 'dropdownMenu',\n });\n};\n\nconst createTemplateSelectActions = () => {\n return templates.map((template) => {\n return createMenuAction<TemplateActionProperties>(`template--${template.id}`, {\n label: template.name,\n value: template.id,\n type: 'template',\n });\n });\n};\n\nexport const createTemplateSelect = () => {\n const templateSelectGroup = createTemplateSelectGroup();\n const templateSelectActions = createTemplateSelectActions();\n return {\n nodes: [templateSelectGroup, ...templateSelectActions],\n edges: [\n { source: 'root', target: 'template-select' },\n ...templateSelectActions.map((action) => ({ source: 'template-select', target: action.id })),\n ],\n };\n};\n\nexport const useTemplateSelectHandler = ({ script }: { script: ScriptType }) => {\n return useCallback(\n (templateId: string) => {\n const template = templates.find((template) => template.id === templateId);\n if (template) {\n script.name = template.name;\n script.source!.target!.content = template.source;\n const metaKeys = getMeta(script).keys;\n const oldPresetIndex = metaKeys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);\n if (oldPresetIndex >= 0) {\n metaKeys.splice(oldPresetIndex, 1);\n }\n if (template.presetId) {\n metaKeys.push({ source: FUNCTIONS_PRESET_META_KEY, id: template.presetId });\n }\n }\n },\n [script],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type ViewType = /* 'editor' | 'split' | */ 'logs';\n\nexport type ViewState = { view: ViewType };\n\nexport type ViewActionProperties = { type: 'view'; value: ViewType };\n\nconst views: Record<ViewType, string> = {\n // editor: 'ph--code--regular',\n // split: 'ph--square-split-vertical--regular',\n logs: 'ph--clock-counter-clockwise--regular',\n};\n\nconst createViewActions = (state: Partial<ViewState>) => {\n return Object.entries(views).map(([viewType, icon]) => {\n return createMenuAction<ViewActionProperties>(`view--${viewType}`, {\n type: 'view',\n value: viewType as ViewType,\n label: [`view ${viewType} label`, { ns: SCRIPT_PLUGIN }],\n icon,\n });\n });\n};\n\nexport const createView = (state: Partial<ViewState>) => {\n const viewActions = createViewActions(state);\n return {\n nodes: viewActions,\n edges: viewActions.map((action) => ({ source: 'root', target: action.id })),\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ScriptType } from '@dxos/functions/types';\nimport { log } from '@dxos/log';\nimport { DeckAction, surfaceVariant } from '@dxos/plugin-deck/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type MenuAction, type MenuActionHandler } from '@dxos/react-ui-menu';\n\nimport { type DeployActionProperties, useDeployHandler, useCopyHandler } from './deploy';\nimport { type FormatActionProperties, useFormatHandler } from './format';\nimport { type TemplateActionProperties, useTemplateSelectHandler } from './template';\nimport { type ScriptToolbarState } from './useToolbarState';\nimport { type ViewActionProperties } from './view';\n\nexport type ScriptToolbarActionProperties =\n | TemplateActionProperties\n | ViewActionProperties\n | FormatActionProperties\n | DeployActionProperties;\n\nexport type ScriptToolbarAction = MenuAction<ScriptToolbarActionProperties>;\n\nexport const useToolbarAction = (props: { state: ScriptToolbarState; script: ScriptType }) => {\n const handleTemplateSelect = useTemplateSelectHandler(props);\n const handleFormat = useFormatHandler(props);\n const handleDeploy = useDeployHandler(props);\n const handleCopy = useCopyHandler(props);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n return useCallback(\n ((action: ScriptToolbarAction) => {\n switch (action.properties.type) {\n case 'view':\n void dispatch(\n createIntent(DeckAction.ChangeCompanion, {\n primary: fullyQualifiedId(props.script),\n companion: surfaceVariant('logs'),\n }),\n );\n break;\n case 'template':\n handleTemplateSelect(action.properties.value);\n break;\n case 'format':\n void handleFormat();\n break;\n case 'deploy':\n void handleDeploy();\n break;\n case 'copy':\n void handleCopy();\n break;\n default:\n log.error('Unknown action type', action);\n }\n }) as MenuActionHandler,\n [handleTemplateSelect, handleFormat, handleDeploy, handleCopy],\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { decodeReference } from '@dxos/echo-protocol';\nimport {\n type InvocationTraceEvent,\n type ScriptType,\n type TraceEvent,\n type InvocationSpan,\n createInvocationSpans,\n} from '@dxos/functions/types';\nimport { useQueue } from '@dxos/react-client/echo';\nimport { Icon, List, ListItem, useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useDeployDeps } from '../../hooks';\nimport { SCRIPT_PLUGIN } from '../../meta';\n\nexport type LogsPanelProps = ThemedClassName<{\n script: ScriptType;\n}>;\n\nexport const LogsPanel = ({ script, classNames }: LogsPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n // TODO(wittjosiah): Refactor these hooks.\n const { space, existingFunctionUrl } = useDeployDeps({ script });\n const invocationTraceQueue = useQueue<InvocationTraceEvent>(space?.properties.invocationTraceQueue?.dxn, {\n pollInterval: 500,\n });\n const invocationSpans = useMemo(\n () => createInvocationSpans(invocationTraceQueue?.items),\n [invocationTraceQueue?.items ?? []],\n );\n const [selected, setSelected] = useState<InvocationSpan>();\n const workerDxn = `dxn:worker:${existingFunctionUrl?.split('/').at(-1)}`;\n\n if (!invocationTraceQueue) {\n return <div>{t('no invocations message')}</div>;\n }\n\n const handleOpenChange = useCallback((trace: InvocationSpan, open: boolean) => {\n setSelected(open ? trace : undefined);\n }, []);\n\n return (\n <List classNames={mx('overflow-y-auto', classNames)}>\n {invocationSpans\n .filter((trace) => decodeReference(trace.invocationTarget).dxn?.toString() === workerDxn)\n .map((trace) => (\n <InvocationTraceItem\n key={trace.id}\n trace={trace}\n open={selected?.id === trace.id}\n setOpen={handleOpenChange}\n />\n ))}\n </List>\n );\n};\n\nconst InvocationTraceItem = ({\n trace,\n open,\n setOpen,\n}: {\n trace: InvocationSpan;\n open?: boolean;\n setOpen?: (trace: InvocationSpan, open: boolean) => void;\n}) => {\n const eventQueue = useQueue<TraceEvent>(open ? decodeReference(trace.invocationTraceQueue).dxn : undefined);\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n setOpen?.(trace, open);\n },\n [trace, setOpen],\n );\n\n const logs = useMemo(() => eventQueue?.items.flatMap((event) => event.logs), [eventQueue?.items]);\n const heading =\n 'bodyText' in trace.input && typeof trace.input.bodyText === 'string'\n ? trace.input.bodyText\n : JSON.stringify(trace.input);\n\n return (\n <ListItem.Root key={trace.id} collapsible open={open} onOpenChange={handleOpenChange}>\n <div className='flex items-center gap-2'>\n <ListItem.OpenTrigger />\n <ListItem.Endcap classNames='flex items-center justify-center'>\n <Icon icon={trace.outcome === 'success' ? 'ph--check--regular' : 'ph--x--regular'} size={5} />\n </ListItem.Endcap>\n <ListItem.Heading classNames='flex-1 flex items-center gap-2 truncate'>\n <span>{new Date(trace.timestampMs).toLocaleString()}</span>\n <span>{heading}</span>\n </ListItem.Heading>\n </div>\n {logs && (\n <ListItem.CollapsibleContent>\n <div className='flex items-center gap-2'>\n <span>Duration:</span>\n <span>{trace.durationMs}ms</span>\n </div>\n <pre>\n <div>{JSON.stringify(trace.input, null, 2)}</div>\n {logs.map((log, index) => {\n return <div key={index}>{JSON.stringify(log, null, 2)}</div>;\n })}\n </pre>\n </ListItem.CollapsibleContent>\n )}\n </ListItem.Root>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["useCallback", "useEffect", "useMemo", "FunctionType", "getInvocationUrl", "getUserFunctionUrlInMetadata", "incrementSemverPatch", "setUserFunctionUrlInMetadata", "uploadWorkerFunction", "Bundler", "log", "useClient", "Filter", "create", "getMeta", "getSpace", "makeRef", "useQuery", "useTranslation", "createMenuAction", "createDeploy", "state", "errorItem", "createMenuAction", "label", "error", "ns", "SCRIPT_PLUGIN", "icon", "hidden", "deployAction", "type", "deploying", "disabled", "classNames", "copyAction", "functionUrl", "nodes", "edges", "source", "target", "useDeployDeps", "script", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "client", "useClient", "existingFunctionUrl", "useMemo", "getUserFunctionUrlInMetadata", "getMeta", "useDeployState", "useEffect", "getInvocationUrl", "config", "values", "runtime", "services", "edge", "url", "spaceId", "id", "deployed", "Boolean", "changed", "useDeployHandler", "t", "useTranslation", "useCallback", "undefined", "existingFunctionId", "split", "at", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "content", "functionId", "version", "meta", "uploadWorkerFunction", "incrementSemverPatch", "Error", "log", "info", "deployedFunction", "db", "add", "create", "name", "makeRef", "description", "trim", "verbose", "inputSchema", "outputSchema", "setUserFunctionUrlInMetadata", "err", "catch", "useCopyHandler", "navigator", "clipboard", "writeText", "useMemo", "create", "useToolbarState", "initialState", "useMemo", "create", "format", "prettierPluginEstree", "prettierPluginTypescript", "useCallback", "log", "createMenuAction", "createFormat", "formatAction", "createMenuAction", "label", "ns", "SCRIPT_PLUGIN", "icon", "nodes", "edges", "source", "target", "useFormatHandler", "script", "useCallback", "content", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "err", "log", "catch", "useCallback", "FUNCTIONS_PRESET_META_KEY", "getMeta", "createMenuItemGroup", "createMenuAction", "createTemplateSelectGroup", "createMenuItemGroup", "label", "ns", "SCRIPT_PLUGIN", "variant", "createTemplateSelectActions", "templates", "map", "template", "createMenuAction", "id", "name", "value", "type", "createTemplateSelect", "templateSelectGroup", "templateSelectActions", "nodes", "edges", "source", "target", "action", "useTemplateSelectHandler", "script", "useCallback", "templateId", "find", "content", "metaKeys", "getMeta", "keys", "oldPresetIndex", "findIndex", "key", "FUNCTIONS_PRESET_META_KEY", "splice", "presetId", "push", "createMenuAction", "views", "logs", "createViewActions", "state", "Object", "entries", "map", "viewType", "icon", "createMenuAction", "type", "value", "label", "ns", "SCRIPT_PLUGIN", "createView", "viewActions", "nodes", "edges", "action", "source", "target", "id", "useCallback", "createIntent", "useIntentDispatcher", "log", "DeckAction", "surfaceVariant", "fullyQualifiedId", "useToolbarAction", "props", "handleTemplateSelect", "useTemplateSelectHandler", "handleFormat", "useFormatHandler", "handleDeploy", "useDeployHandler", "handleCopy", "useCopyHandler", "dispatchPromise", "dispatch", "useIntentDispatcher", "useCallback", "action", "properties", "type", "createIntent", "DeckAction", "ChangeCompanion", "primary", "fullyQualifiedId", "script", "companion", "surfaceVariant", "value", "log", "error", "React", "useCallback", "useMemo", "useState", "decodeReference", "createInvocationSpans", "useQueue", "Icon", "List", "ListItem", "useTranslation", "mx", "LogsPanel", "script", "classNames", "t", "useTranslation", "SCRIPT_PLUGIN", "space", "existingFunctionUrl", "useDeployDeps", "invocationTraceQueue", "useQueue", "properties", "dxn", "pollInterval", "invocationSpans", "useMemo", "createInvocationSpans", "items", "selected", "setSelected", "useState", "workerDxn", "split", "at", "div", "handleOpenChange", "useCallback", "trace", "open", "undefined", "List", "mx", "filter", "decodeReference", "invocationTarget", "toString", "map", "InvocationTraceItem", "key", "id", "setOpen", "eventQueue", "logs", "flatMap", "event", "heading", "input", "bodyText", "JSON", "stringify", "ListItem", "Root", "collapsible", "onOpenChange", "className", "OpenTrigger", "Endcap", "Icon", "icon", "outcome", "size", "Heading", "span", "Date", "timestampMs", "toLocaleString", "CollapsibleContent", "durationMs", "pre", "log", "index"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SCRIPT_PLUGIN
3
- } from "./chunk-FVVCAWNP.mjs";
3
+ } from "./chunk-27LV6ARH.mjs";
4
4
 
5
5
  // packages/plugins/experimental/plugin-script/src/components/DebugPanel/DebugPanel.tsx
6
6
  import React, { forwardRef, useEffect, useRef, useState } from "react";
@@ -456,7 +456,7 @@ var ScriptSettingsPanel = ({ script }) => {
456
456
 
457
457
  // packages/plugins/experimental/plugin-script/src/components/index.ts
458
458
  import { lazy } from "react";
459
- var ScriptContainer = lazy(() => import("./ScriptContainer-4FIJVITA.mjs"));
459
+ var ScriptContainer = lazy(() => import("./ScriptContainer-DDXZNAPF.mjs"));
460
460
 
461
461
  export {
462
462
  DebugPanel,
@@ -464,4 +464,4 @@ export {
464
464
  ScriptSettingsPanel,
465
465
  ScriptContainer
466
466
  };
467
- //# sourceMappingURL=chunk-SFG422OU.mjs.map
467
+ //# sourceMappingURL=chunk-T7XG5GED.mjs.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ScriptCapabilities
3
- } from "./chunk-6MOQ4BP3.mjs";
4
- import "./chunk-FVVCAWNP.mjs";
3
+ } from "./chunk-FG66JYON.mjs";
4
+ import "./chunk-27LV6ARH.mjs";
5
5
 
6
6
  // packages/plugins/experimental/plugin-script/src/capabilities/compiler.ts
7
7
  import wasmUrl from "esbuild-wasm/esbuild.wasm?url";
@@ -79,4 +79,4 @@ var compiler_default = async () => {
79
79
  export {
80
80
  compiler_default as default
81
81
  };
82
- //# sourceMappingURL=compiler-YY2XSKHQ.mjs.map
82
+ //# sourceMappingURL=compiler-ZQLHHJ5P.mjs.map
@@ -3,32 +3,33 @@ import {
3
3
  ScriptContainer,
4
4
  ScriptSettings,
5
5
  ScriptSettingsPanel
6
- } from "./chunk-SFG422OU.mjs";
6
+ } from "./chunk-T7XG5GED.mjs";
7
7
  import {
8
8
  ScriptCapabilities
9
- } from "./chunk-6MOQ4BP3.mjs";
9
+ } from "./chunk-FG66JYON.mjs";
10
10
  import {
11
11
  LogsPanel
12
- } from "./chunk-7TZYIGBS.mjs";
12
+ } from "./chunk-LJN26TSM.mjs";
13
13
  import "./chunk-4SSKJNMZ.mjs";
14
14
  import {
15
15
  ScriptAction
16
- } from "./chunk-JL34HAEL.mjs";
16
+ } from "./chunk-AJNRPWAA.mjs";
17
17
  import {
18
18
  SCRIPT_PLUGIN,
19
19
  meta
20
- } from "./chunk-FVVCAWNP.mjs";
20
+ } from "./chunk-27LV6ARH.mjs";
21
21
 
22
22
  // packages/plugins/experimental/plugin-script/src/capabilities/index.ts
23
23
  import { lazy } from "@dxos/app-framework";
24
- var Compiler = lazy(() => import("./compiler-YY2XSKHQ.mjs"));
25
- var IntentResolver = lazy(() => import("./intent-resolver-BJ76DBGE.mjs"));
26
- var ReactSurface = lazy(() => import("./react-surface-HXCDELEA.mjs"));
27
- var ScriptSettings2 = lazy(() => import("./settings-HIWURVAS.mjs"));
28
- var ArtifactDefinition = lazy(() => import("./artifact-definition-GTL3ZSF2.mjs"));
24
+ var Compiler = lazy(() => import("./compiler-ZQLHHJ5P.mjs"));
25
+ var IntentResolver = lazy(() => import("./intent-resolver-3B3Z67FP.mjs"));
26
+ var ReactSurface = lazy(() => import("./react-surface-ICXHFHN7.mjs"));
27
+ var ScriptSettings2 = lazy(() => import("./settings-467GVEBU.mjs"));
28
+ var ArtifactDefinition = lazy(() => import("./artifact-definition-GYCZJGR4.mjs"));
29
29
 
30
30
  // packages/plugins/experimental/plugin-script/src/ScriptPlugin.tsx
31
31
  import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from "@dxos/app-framework";
32
+ import { isInstanceOf } from "@dxos/echo-schema";
32
33
  import { ScriptType as ScriptType2 } from "@dxos/functions/types";
33
34
  import { RefArray } from "@dxos/live-object";
34
35
  import { ClientEvents } from "@dxos/plugin-client";
@@ -50,13 +51,11 @@ var translations_default = [
50
51
  {
51
52
  "en-US": {
52
53
  [ScriptType.typename]: {
53
- "typename label": "Script"
54
+ "typename label": "Script",
55
+ "object name placeholder": "New script"
54
56
  },
55
57
  [SCRIPT_PLUGIN]: {
56
58
  "plugin name": "Scripts",
57
- "object title placeholder": "New script",
58
- "create object label": "Create script",
59
- "create stack section label": "Create script",
60
59
  "description label": "Description",
61
60
  "description placeholder": "Describe what the script does.",
62
61
  "binding placeholder": "Function name",
@@ -90,7 +89,8 @@ var translations_default = [
90
89
  "view split label": "Split",
91
90
  "view logs label": "Logs",
92
91
  "template select group label": "Select template",
93
- "function panel label": "Debug Function"
92
+ "function panel label": "Debug Function",
93
+ "logs plank heading": "Logs"
94
94
  }
95
95
  }
96
96
  }
@@ -119,12 +119,6 @@ var ScriptPlugin = () => definePlugin(meta, [
119
119
  activate: () => contributes(Capabilities.Metadata, {
120
120
  id: ScriptType2.typename,
121
121
  metadata: {
122
- placeholder: [
123
- "object title placeholder",
124
- {
125
- ns: SCRIPT_PLUGIN
126
- }
127
- ],
128
122
  icon: "ph--code--regular",
129
123
  // TODO(wittjosiah): Move out of metadata.
130
124
  loadReferences: async (script) => await RefArray.loadAll([
@@ -146,7 +140,7 @@ var ScriptPlugin = () => definePlugin(meta, [
146
140
  ],
147
141
  icon: "ph--terminal--regular",
148
142
  fixed: true,
149
- filter: (node) => node.data instanceof ScriptType2 && !!getSpace(node.data)
143
+ filter: (node) => isInstanceOf(ScriptType2, node.data) && !!getSpace(node.data)
150
144
  })
151
145
  }),
152
146
  defineModule({