@dxos/plugin-script 0.8.4-main.3fbcb4aa9b → 0.8.4-main.43cb759274

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 (241) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +515 -0
  3. package/dist/lib/neutral/{DeploymentDialog-6DBF3V6C.mjs → DeploymentDialog-M3AFYQHC.mjs} +4 -2
  4. package/dist/lib/neutral/{DeploymentDialog-6DBF3V6C.mjs.map → DeploymentDialog-M3AFYQHC.mjs.map} +3 -3
  5. package/dist/lib/neutral/{NotebookContainer-FIAQI3A2.mjs → NotebookArticle-NV4AHOOS.mjs} +15 -12
  6. package/dist/lib/neutral/NotebookArticle-NV4AHOOS.mjs.map +7 -0
  7. package/dist/lib/neutral/{ScriptContainer-2OPBAXFB.mjs → ScriptArticle-UBT27SB6.mjs} +4 -4
  8. package/dist/lib/neutral/{ScriptContainer-2OPBAXFB.mjs.map → ScriptArticle-UBT27SB6.mjs.map} +4 -4
  9. package/dist/lib/neutral/ScriptPlugin.mjs +12 -0
  10. package/dist/lib/neutral/ScriptPlugin.mjs.map +4 -4
  11. package/dist/lib/neutral/ScriptPlugin.workerd.mjs +21 -0
  12. package/dist/lib/neutral/ScriptPlugin.workerd.mjs.map +7 -0
  13. package/dist/lib/neutral/{ScriptProperties-F6NE6M4H.mjs → ScriptProperties-RLXNAN3N.mjs} +9 -8
  14. package/dist/lib/neutral/ScriptProperties-RLXNAN3N.mjs.map +7 -0
  15. package/dist/lib/neutral/{TestContainer-JNFPLAJX.mjs → TestContainer-AFVTBYSJ.mjs} +5 -5
  16. package/dist/lib/neutral/TestContainer-AFVTBYSJ.mjs.map +7 -0
  17. package/dist/lib/neutral/blueprints/index.mjs +3 -3
  18. package/dist/lib/neutral/capabilities/index.mjs +4 -4
  19. package/dist/lib/neutral/capabilities/node.mjs +3 -3
  20. package/dist/lib/neutral/{chunk-D7DFASAE.mjs → chunk-2REUEDUA.mjs} +8 -4
  21. package/dist/lib/neutral/chunk-2REUEDUA.mjs.map +7 -0
  22. package/dist/lib/neutral/{chunk-BDRB6ZX2.mjs → chunk-BDHDBPVM.mjs} +2 -2
  23. package/dist/lib/neutral/{chunk-PDB6UOSB.mjs → chunk-C4O7EV6M.mjs} +11 -13
  24. package/dist/lib/neutral/chunk-C4O7EV6M.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-H2BRWQMY.mjs +96 -0
  26. package/dist/lib/neutral/chunk-H2BRWQMY.mjs.map +7 -0
  27. package/dist/lib/neutral/{chunk-B4FVQEHV.mjs → chunk-LHEJXJEL.mjs} +2 -2
  28. package/dist/lib/neutral/{chunk-B4FVQEHV.mjs.map → chunk-LHEJXJEL.mjs.map} +2 -2
  29. package/dist/lib/neutral/chunk-NQOIENTU.mjs +8 -0
  30. package/dist/lib/neutral/{chunk-MI6X5CTJ.mjs → chunk-TRKXIP2Q.mjs} +30 -21
  31. package/dist/lib/neutral/chunk-TRKXIP2Q.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-UA3BWOCZ.mjs +38 -0
  33. package/dist/lib/neutral/chunk-UA3BWOCZ.mjs.map +7 -0
  34. package/dist/lib/neutral/{chunk-4RJALG6K.mjs → chunk-VXDJH6OL.mjs} +9 -10
  35. package/dist/lib/neutral/chunk-VXDJH6OL.mjs.map +7 -0
  36. package/dist/lib/neutral/{compiler-SMVIP5UN.mjs → compiler-ODK4UA2N.mjs} +2 -2
  37. package/dist/lib/neutral/components/index.mjs +93 -148
  38. package/dist/lib/neutral/components/index.mjs.map +4 -4
  39. package/dist/lib/neutral/containers/index.mjs +7 -7
  40. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  41. package/dist/lib/neutral/{create-OZRIZ7RN.mjs → create-WQJXMOUE.mjs} +7 -5
  42. package/dist/lib/neutral/create-WQJXMOUE.mjs.map +7 -0
  43. package/dist/lib/neutral/{create-object-F2NWICFV.mjs → create-object-FZM5ASWM.mjs} +4 -3
  44. package/dist/lib/neutral/create-object-FZM5ASWM.mjs.map +7 -0
  45. package/dist/lib/neutral/{create-script-VBA3SLSU.mjs → create-script-66DO3UJO.mjs} +3 -3
  46. package/dist/lib/neutral/{delete-PAUWA2QM.mjs → delete-HCQIQFVP.mjs} +2 -2
  47. package/dist/lib/neutral/{deploy-CXVW54JJ.mjs → deploy-7JVMMHSH.mjs} +6 -5
  48. package/dist/lib/neutral/{deploy-CXVW54JJ.mjs.map → deploy-7JVMMHSH.mjs.map} +3 -3
  49. package/dist/lib/neutral/hooks/index.mjs +2 -2
  50. package/dist/lib/neutral/index.mjs +7 -7
  51. package/dist/lib/neutral/{inspect-invocations-LEOEP5I2.mjs → inspect-invocations-6MW73SDV.mjs} +3 -3
  52. package/dist/lib/neutral/{inspect-invocations-LEOEP5I2.mjs.map → inspect-invocations-6MW73SDV.mjs.map} +3 -3
  53. package/dist/lib/neutral/{install-function-5N24Q45W.mjs → install-function-FJIE2JAI.mjs} +7 -9
  54. package/dist/lib/neutral/install-function-FJIE2JAI.mjs.map +7 -0
  55. package/dist/lib/neutral/{invoke-5QVEZ3X5.mjs → invoke-3HVWY2KF.mjs} +7 -8
  56. package/dist/lib/neutral/invoke-3HVWY2KF.mjs.map +7 -0
  57. package/dist/lib/neutral/meta.json +1 -1
  58. package/dist/lib/neutral/meta.mjs +1 -1
  59. package/dist/lib/neutral/{operation-handler-OTCWYDFI.mjs → operation-handler-X44IGZXS.mjs} +3 -3
  60. package/dist/lib/neutral/operations/index.mjs +1 -1
  61. package/dist/lib/neutral/plugin.mjs +2 -2
  62. package/dist/lib/neutral/{query-deployed-functions-FVD7NYPA.mjs → query-deployed-functions-F4FHJNWO.mjs} +14 -10
  63. package/dist/lib/neutral/query-deployed-functions-F4FHJNWO.mjs.map +7 -0
  64. package/dist/lib/neutral/{react-surface-JH2AOK7V.mjs → react-surface-ACNZ35FV.mjs} +17 -13
  65. package/dist/lib/neutral/react-surface-ACNZ35FV.mjs.map +7 -0
  66. package/dist/lib/neutral/{read-FFOSK6A3.mjs → read-RQESBAQI.mjs} +2 -2
  67. package/dist/lib/neutral/templates/index.mjs +1 -1
  68. package/dist/lib/neutral/translations.mjs +3 -2
  69. package/dist/lib/neutral/translations.mjs.map +3 -3
  70. package/dist/lib/neutral/types/index.mjs +2 -2
  71. package/dist/lib/neutral/{update-PJS5GG3Y.mjs → update-JZUNJYZM.mjs} +3 -3
  72. package/dist/lib/neutral/{update-PJS5GG3Y.mjs.map → update-JZUNJYZM.mjs.map} +3 -3
  73. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  74. package/dist/types/src/ScriptPlugin.workerd.d.ts +4 -0
  75. package/dist/types/src/ScriptPlugin.workerd.d.ts.map +1 -0
  76. package/dist/types/src/blueprints/functions/create.d.ts.map +1 -1
  77. package/dist/types/src/blueprints/functions/definitions.d.ts +24 -30
  78. package/dist/types/src/blueprints/functions/definitions.d.ts.map +1 -1
  79. package/dist/types/src/blueprints/functions/delete.d.ts +4 -5
  80. package/dist/types/src/blueprints/functions/deploy.d.ts +4 -5
  81. package/dist/types/src/blueprints/functions/inspect-invocations.d.ts +4 -5
  82. package/dist/types/src/blueprints/functions/invoke.d.ts +5 -6
  83. package/dist/types/src/blueprints/functions/invoke.d.ts.map +1 -1
  84. package/dist/types/src/blueprints/functions/read.d.ts +4 -5
  85. package/dist/types/src/blueprints/functions/update.d.ts +4 -5
  86. package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
  87. package/dist/types/src/compiler/compiler.d.ts.map +1 -1
  88. package/dist/types/src/components/NotebookStack/NotebookStack.d.ts.map +1 -1
  89. package/dist/types/src/components/QueryEditor/QueryEditor.d.ts.map +1 -1
  90. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  91. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  92. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  93. package/dist/types/src/components/index.d.ts +0 -1
  94. package/dist/types/src/components/index.d.ts.map +1 -1
  95. package/dist/types/src/constants.d.ts +2 -1
  96. package/dist/types/src/constants.d.ts.map +1 -1
  97. package/dist/types/src/containers/NotebookArticle/NotebookArticle.d.ts +7 -0
  98. package/dist/types/src/containers/NotebookArticle/NotebookArticle.d.ts.map +1 -0
  99. package/dist/types/src/containers/NotebookArticle/NotebookArticle.stories.d.ts +7 -0
  100. package/dist/types/src/containers/NotebookArticle/NotebookArticle.stories.d.ts.map +1 -0
  101. package/dist/types/src/containers/NotebookArticle/index.d.ts +2 -0
  102. package/dist/types/src/containers/{ScriptContainer → NotebookArticle}/index.d.ts.map +1 -1
  103. package/dist/types/src/containers/{ScriptContainer/ScriptContainer.d.ts → ScriptArticle/ScriptArticle.d.ts} +2 -2
  104. package/dist/types/src/containers/ScriptArticle/ScriptArticle.d.ts.map +1 -0
  105. package/dist/types/src/containers/{ScriptContainer/ScriptContainer.stories.d.ts → ScriptArticle/ScriptArticle.stories.d.ts} +1 -1
  106. package/dist/types/src/containers/ScriptArticle/ScriptArticle.stories.d.ts.map +1 -0
  107. package/dist/types/src/containers/ScriptArticle/index.d.ts +2 -0
  108. package/dist/types/src/containers/ScriptArticle/index.d.ts.map +1 -0
  109. package/dist/types/src/containers/ScriptProperties/BlueprintEditor.d.ts.map +1 -1
  110. package/dist/types/src/containers/ScriptProperties/ScriptProperties.stories.d.ts.map +1 -1
  111. package/dist/types/src/containers/index.d.ts +2 -2
  112. package/dist/types/src/containers/index.d.ts.map +1 -1
  113. package/dist/types/src/hooks/deploy.d.ts +5 -6
  114. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  115. package/dist/types/src/meta.d.ts +1 -1
  116. package/dist/types/src/meta.d.ts.map +1 -1
  117. package/dist/types/src/operations/index.d.ts.map +1 -1
  118. package/dist/types/src/templates/chess-bot.d.ts +4 -2
  119. package/dist/types/src/templates/chess-bot.d.ts.map +1 -1
  120. package/dist/types/src/templates/commentary.d.ts +6 -4
  121. package/dist/types/src/templates/commentary.d.ts.map +1 -1
  122. package/dist/types/src/templates/index.d.ts +0 -5
  123. package/dist/types/src/templates/index.d.ts.map +1 -1
  124. package/dist/types/src/testing/test-script.d.ts.map +1 -1
  125. package/dist/types/src/translations.d.ts.map +1 -1
  126. package/dist/types/src/types/Notebook.d.ts +28 -47
  127. package/dist/types/src/types/Notebook.d.ts.map +1 -1
  128. package/dist/types/src/types/ScriptOperation.d.ts +6 -6
  129. package/dist/types/src/types/ScriptOperation.d.ts.map +1 -1
  130. package/dist/types/tsconfig.tsbuildinfo +1 -1
  131. package/package.json +90 -90
  132. package/src/ScriptPlugin.tsx +6 -0
  133. package/src/ScriptPlugin.workerd.ts +18 -0
  134. package/src/blueprints/functions/create.ts +3 -3
  135. package/src/blueprints/functions/definitions.ts +20 -11
  136. package/src/blueprints/functions/deploy.ts +3 -2
  137. package/src/blueprints/functions/inspect-invocations.ts +1 -1
  138. package/src/blueprints/functions/install-function.ts +5 -5
  139. package/src/blueprints/functions/invoke.ts +4 -5
  140. package/src/blueprints/functions/query-deployed-functions.ts +11 -7
  141. package/src/blueprints/functions/update.ts +1 -1
  142. package/src/capabilities/create-object.ts +3 -2
  143. package/src/capabilities/react-surface.tsx +6 -6
  144. package/src/compiler/compiler.ts +4 -0
  145. package/src/components/NotebookStack/NotebookCell.tsx +2 -2
  146. package/src/components/NotebookStack/NotebookStack.stories.tsx +2 -2
  147. package/src/components/NotebookStack/NotebookStack.tsx +1 -1
  148. package/src/components/QueryEditor/QueryEditor.tsx +3 -1
  149. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +3 -3
  150. package/src/components/ScriptToolbar/ScriptToolbar.tsx +1 -1
  151. package/src/components/TestPanel/TestPanel.tsx +2 -1
  152. package/src/components/TypescriptEditor/TypescriptEditor.tsx +1 -1
  153. package/src/components/index.ts +0 -1
  154. package/src/constants.ts +3 -1
  155. package/src/containers/DeploymentDialog/DeploymentDialog.stories.tsx +3 -3
  156. package/src/containers/DeploymentDialog/DeploymentDialog.tsx +1 -1
  157. package/src/containers/{NotebookContainer/NotebookContainer.stories.tsx → NotebookArticle/NotebookArticle.stories.tsx} +10 -10
  158. package/src/containers/{NotebookContainer/NotebookContainer.tsx → NotebookArticle/NotebookArticle.tsx} +10 -9
  159. package/src/containers/NotebookArticle/index.ts +5 -0
  160. package/src/containers/{ScriptContainer/ScriptContainer.stories.tsx → ScriptArticle/ScriptArticle.stories.tsx} +6 -5
  161. package/src/containers/{ScriptContainer/ScriptContainer.tsx → ScriptArticle/ScriptArticle.tsx} +1 -1
  162. package/src/containers/ScriptArticle/index.ts +5 -0
  163. package/src/containers/ScriptProperties/BlueprintEditor.tsx +8 -7
  164. package/src/containers/ScriptProperties/ScriptProperties.stories.tsx +3 -2
  165. package/src/containers/TestContainer/TestContainer.tsx +4 -4
  166. package/src/containers/index.ts +2 -2
  167. package/src/meta.ts +13 -7
  168. package/src/operations/index.ts +1 -4
  169. package/src/templates/anthropic.ts +2 -1
  170. package/src/templates/chess-bot.ts +2 -2
  171. package/src/templates/commentary.ts +19 -17
  172. package/src/templates/data-generator.ts +1 -1
  173. package/src/templates/discord.ts +5 -5
  174. package/src/templates/forex-effect.ts +2 -1
  175. package/src/templates/forex.ts +2 -1
  176. package/src/templates/gmail.ts +5 -5
  177. package/src/templates/index.ts +0 -7
  178. package/src/templates/ping.ts +2 -1
  179. package/src/testing/test-notebook.ts +2 -2
  180. package/src/testing/test-script.ts +1 -2
  181. package/src/translations.ts +3 -2
  182. package/src/types/Notebook.ts +5 -11
  183. package/src/types/ScriptOperation.ts +4 -4
  184. package/src/util/deploy.ts +1 -1
  185. package/src/util/functions.ts +4 -4
  186. package/src/vite-env.d.ts +5 -0
  187. package/dist/lib/neutral/NotebookContainer-FIAQI3A2.mjs.map +0 -7
  188. package/dist/lib/neutral/ScriptProperties-F6NE6M4H.mjs.map +0 -7
  189. package/dist/lib/neutral/TestContainer-JNFPLAJX.mjs.map +0 -7
  190. package/dist/lib/neutral/access-token-created-ENMCEGVU.mjs +0 -34
  191. package/dist/lib/neutral/access-token-created-ENMCEGVU.mjs.map +0 -7
  192. package/dist/lib/neutral/chunk-2DMPFVUM.mjs +0 -8
  193. package/dist/lib/neutral/chunk-4RJALG6K.mjs.map +0 -7
  194. package/dist/lib/neutral/chunk-BUKQITZT.mjs +0 -105
  195. package/dist/lib/neutral/chunk-BUKQITZT.mjs.map +0 -7
  196. package/dist/lib/neutral/chunk-D7DFASAE.mjs.map +0 -7
  197. package/dist/lib/neutral/chunk-MI6X5CTJ.mjs.map +0 -7
  198. package/dist/lib/neutral/chunk-P2F3STZN.mjs +0 -8
  199. package/dist/lib/neutral/chunk-P2F3STZN.mjs.map +0 -7
  200. package/dist/lib/neutral/chunk-PDB6UOSB.mjs.map +0 -7
  201. package/dist/lib/neutral/chunk-UYR3YH4Q.mjs +0 -31
  202. package/dist/lib/neutral/chunk-UYR3YH4Q.mjs.map +0 -7
  203. package/dist/lib/neutral/create-OZRIZ7RN.mjs.map +0 -7
  204. package/dist/lib/neutral/create-object-F2NWICFV.mjs.map +0 -7
  205. package/dist/lib/neutral/install-function-5N24Q45W.mjs.map +0 -7
  206. package/dist/lib/neutral/invoke-5QVEZ3X5.mjs.map +0 -7
  207. package/dist/lib/neutral/query-deployed-functions-FVD7NYPA.mjs.map +0 -7
  208. package/dist/lib/neutral/react-surface-JH2AOK7V.mjs.map +0 -7
  209. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -12
  210. package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
  211. package/dist/types/src/components/FramePanel/FramePanel.d.ts +0 -12
  212. package/dist/types/src/components/FramePanel/FramePanel.d.ts.map +0 -1
  213. package/dist/types/src/components/FramePanel/index.d.ts +0 -2
  214. package/dist/types/src/components/FramePanel/index.d.ts.map +0 -1
  215. package/dist/types/src/containers/NotebookContainer/NotebookContainer.d.ts +0 -7
  216. package/dist/types/src/containers/NotebookContainer/NotebookContainer.d.ts.map +0 -1
  217. package/dist/types/src/containers/NotebookContainer/NotebookContainer.stories.d.ts +0 -7
  218. package/dist/types/src/containers/NotebookContainer/NotebookContainer.stories.d.ts.map +0 -1
  219. package/dist/types/src/containers/NotebookContainer/index.d.ts +0 -2
  220. package/dist/types/src/containers/NotebookContainer/index.d.ts.map +0 -1
  221. package/dist/types/src/containers/ScriptContainer/ScriptContainer.d.ts.map +0 -1
  222. package/dist/types/src/containers/ScriptContainer/ScriptContainer.stories.d.ts.map +0 -1
  223. package/dist/types/src/containers/ScriptContainer/index.d.ts +0 -2
  224. package/dist/types/src/operations/access-token-created.d.ts +0 -5
  225. package/dist/types/src/operations/access-token-created.d.ts.map +0 -1
  226. package/dist/types/src/templates/chat.d.ts +0 -6
  227. package/dist/types/src/templates/chat.d.ts.map +0 -1
  228. package/src/capabilities/artifact-definition.ts +0 -226
  229. package/src/components/FramePanel/FramePanel.tsx +0 -85
  230. package/src/components/FramePanel/index.ts +0 -5
  231. package/src/containers/NotebookContainer/index.ts +0 -5
  232. package/src/containers/ScriptContainer/index.ts +0 -5
  233. package/src/operations/access-token-created.ts +0 -37
  234. package/src/templates/chat.ts +0 -96
  235. /package/dist/lib/neutral/{chunk-BDRB6ZX2.mjs.map → chunk-BDHDBPVM.mjs.map} +0 -0
  236. /package/dist/lib/neutral/{chunk-2DMPFVUM.mjs.map → chunk-NQOIENTU.mjs.map} +0 -0
  237. /package/dist/lib/neutral/{compiler-SMVIP5UN.mjs.map → compiler-ODK4UA2N.mjs.map} +0 -0
  238. /package/dist/lib/neutral/{create-script-VBA3SLSU.mjs.map → create-script-66DO3UJO.mjs.map} +0 -0
  239. /package/dist/lib/neutral/{delete-PAUWA2QM.mjs.map → delete-HCQIQFVP.mjs.map} +0 -0
  240. /package/dist/lib/neutral/{operation-handler-OTCWYDFI.mjs.map → operation-handler-X44IGZXS.mjs.map} +0 -0
  241. /package/dist/lib/neutral/{read-FFOSK6A3.mjs.map → read-RQESBAQI.mjs.map} +0 -0
@@ -1,11 +1,12 @@
1
1
  import "./chunk-J5LGTIGS.mjs";
2
2
 
3
- // src/containers/NotebookContainer/NotebookContainer.tsx
3
+ // src/containers/NotebookArticle/NotebookArticle.tsx
4
4
  import { RegistryContext } from "@effect-atom/atom-react";
5
5
  import * as Cause from "effect/Cause";
6
6
  import * as Effect from "effect/Effect";
7
7
  import * as Exit from "effect/Exit";
8
8
  import React, { useCallback, useContext, useMemo, useState } from "react";
9
+ import { useSpaceCallback } from "@dxos/app-framework/ui";
9
10
  import { AgentPrompt } from "@dxos/assistant-toolkit";
10
11
  import { Blueprint, Routine } from "@dxos/compute";
11
12
  import { Operation } from "@dxos/compute";
@@ -13,7 +14,6 @@ import { Filter, Obj, Query, Ref } from "@dxos/echo";
13
14
  import { QueryBuilder } from "@dxos/echo-query";
14
15
  import { invariant as invariant2 } from "@dxos/invariant";
15
16
  import { log as log2 } from "@dxos/log";
16
- import { useComputeRuntimeCallback } from "@dxos/plugin-automation/hooks";
17
17
  import { Graph } from "@dxos/plugin-explorer";
18
18
  import { DropdownMenu, IconButton, Panel, Toolbar, useTranslation } from "@dxos/react-ui";
19
19
  import { useAttention } from "@dxos/react-ui-attention";
@@ -544,14 +544,14 @@ var ComputeGraph = class {
544
544
  }
545
545
  };
546
546
 
547
- // src/containers/NotebookContainer/NotebookContainer.tsx
548
- var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-script/src/containers/NotebookContainer/NotebookContainer.tsx";
547
+ // src/containers/NotebookArticle/NotebookArticle.tsx
548
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/plugins/plugin-script/src/containers/NotebookArticle/NotebookArticle.tsx";
549
549
  var INCLUDE_BLUEPRINTS = [
550
550
  "org.dxos.blueprint.assistant",
551
551
  "org.dxos.blueprint.database",
552
552
  "org.dxos.blueprint.markdown"
553
553
  ];
554
- var NotebookContainer = ({ role, subject: notebook, attendableId, env }) => {
554
+ var NotebookArticle = ({ role, subject: notebook, attendableId, env }) => {
555
555
  const { t } = useTranslation(meta.id);
556
556
  const registry = useContext(RegistryContext);
557
557
  const db = Obj.getDatabase(notebook);
@@ -614,7 +614,7 @@ var NotebookContainer = ({ role, subject: notebook, attendableId, env }) => {
614
614
  graph
615
615
  ]);
616
616
  const [promptResults, setPromptResults] = useState({});
617
- const handleExecPrompts = useComputeRuntimeCallback(db?.spaceId, Effect.fnUntraced(function* () {
617
+ const handleExecPrompts = useSpaceCallback(db?.spaceId, [], Effect.fnUntraced(function* () {
618
618
  invariant2(graph, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 96, S: this, A: ["graph", ""] });
619
619
  const prompts = notebook?.cells.filter((cell) => cell.type === "prompt").map((cell) => cell.prompt).filter(isNonNullable) ?? [];
620
620
  for (const prompt of prompts) {
@@ -626,7 +626,7 @@ var NotebookContainer = ({ role, subject: notebook, attendableId, env }) => {
626
626
  },
627
627
  onResult: (result) => setPromptResults((prev) => ({
628
628
  ...prev,
629
- [prompt.dxn.toString()]: result
629
+ [prompt.uri]: result
630
630
  }))
631
631
  });
632
632
  }
@@ -675,7 +675,10 @@ var NotebookContainer = ({ role, subject: notebook, attendableId, env }) => {
675
675
  case "prompt": {
676
676
  if (db) {
677
677
  const objects = await db.query(Query.select(Filter.type(Blueprint.Blueprint))).run();
678
- const blueprints = objects.filter((blueprint) => INCLUDE_BLUEPRINTS.includes(blueprint.key)).map((blueprint) => Ref.make(blueprint));
678
+ const blueprints = objects.filter((blueprint) => {
679
+ const key = Obj.getMeta(blueprint).key;
680
+ return key !== void 0 && INCLUDE_BLUEPRINTS.includes(key);
681
+ }).map((blueprint) => Ref.make(blueprint));
679
682
  cell.prompt = Ref.make(Routine.make({
680
683
  instructions: "",
681
684
  blueprints
@@ -693,7 +696,7 @@ var NotebookContainer = ({ role, subject: notebook, attendableId, env }) => {
693
696
  notebook
694
697
  ]);
695
698
  const handleCellDelete = useCallback((id) => {
696
- invariant2(notebook, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 178, S: void 0, A: ["notebook", ""] });
699
+ invariant2(notebook, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 181, S: void 0, A: ["notebook", ""] });
697
700
  const idx = notebook.cells.findIndex((cell) => cell.id === id);
698
701
  if (idx !== -1) {
699
702
  Obj.update(notebook, (notebook2) => {
@@ -746,7 +749,7 @@ var runPrompt = Effect.fn(function* ({ prompt, input, onResult }) {
746
749
  Exit.match(result, {
747
750
  onFailure: (cause) => {
748
751
  const error = Cause.prettyErrors(cause)[0];
749
- log2.error(error.message, error.cause ?? error.stack, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 233, S: this });
752
+ log2.error(error.message, error.cause ?? error.stack, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 236, S: this });
750
753
  onResult(error.message);
751
754
  },
752
755
  onSuccess: (result2) => {
@@ -755,6 +758,6 @@ var runPrompt = Effect.fn(function* ({ prompt, input, onResult }) {
755
758
  });
756
759
  });
757
760
  export {
758
- NotebookContainer as default
761
+ NotebookArticle as default
759
762
  };
760
- //# sourceMappingURL=NotebookContainer-FIAQI3A2.mjs.map
763
+ //# sourceMappingURL=NotebookArticle-NV4AHOOS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/NotebookArticle/NotebookArticle.tsx", "../../../src/notebook/compute-graph.ts", "../../../src/notebook/eval.ts", "../../../src/notebook/vfs-parser.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport * as Cause from 'effect/Cause';\nimport * as Effect from 'effect/Effect';\nimport * as Exit from 'effect/Exit';\nimport type * as Types from 'effect/Types';\nimport React, { useCallback, useContext, useMemo, useState } from 'react';\n\nimport { useSpaceCallback } from '@dxos/app-framework/ui';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { AgentPrompt } from '@dxos/assistant-toolkit';\nimport { Blueprint, Routine } from '@dxos/compute';\nimport { Operation } from '@dxos/compute';\nimport { Filter, Obj, Query, Ref } from '@dxos/echo';\nimport { QueryBuilder } from '@dxos/echo-query';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { Graph } from '@dxos/plugin-explorer';\nimport { DropdownMenu, IconButton, Panel, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { Text, ViewModel } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { NotebookMenu, NotebookStack, type NotebookStackProps, type TypescriptEditorProps } from '#components';\nimport { meta } from '#meta';\nimport { type Notebook } from '#types';\n\nimport { ComputeGraph } from '../../notebook';\n\nconst INCLUDE_BLUEPRINTS = [\n 'org.dxos.blueprint.assistant',\n 'org.dxos.blueprint.database',\n 'org.dxos.blueprint.markdown',\n];\n\n// TODO(burdon): Support calling named deployed functions (as with sheet).\n\nexport type NotebookArticleProps = AppSurface.ObjectArticleProps<Notebook.Notebook, Pick<TypescriptEditorProps, 'env'>>;\n\nexport const NotebookArticle = ({ role, subject: notebook, attendableId, env }: NotebookArticleProps) => {\n const { t } = useTranslation(meta.id);\n const registry = useContext(RegistryContext);\n const db = Obj.getDatabase(notebook);\n const { hasAttention } = useAttention(attendableId);\n\n // TODO(burdon): Consolidate execution and state (with graph).\n // Generalize ComputeGraph evaluation function (using effects).\n const graph = useMemo(() => notebook && new ComputeGraph(notebook, registry), [notebook, registry]);\n\n const [queryValues, setQueryValues] = useState<Record<string, any>>({});\n const handleExecQueries = useCallback(async () => {\n invariant(db);\n\n const builder = new QueryBuilder();\n for (const cell of notebook?.cells ?? []) {\n if (cell.type === 'query') {\n if (cell.source?.target) {\n const source = cell.source.target.content;\n const { name, filter } = builder.build(source);\n if (filter) {\n const ast = Query.select(filter).ast;\n const graph = cell.graph?.target;\n if (!graph) {\n const { view } = await ViewModel.makeFromDatabase({ db });\n const newGraph = Graph.make({ query: { ast }, view });\n Obj.update(notebook!, (obj) => {\n const c = obj.cells.find((c) => c.id === cell.id);\n if (c) {\n c.graph = Ref.make(newGraph);\n c.name = name;\n }\n });\n } else {\n Obj.update(graph, (graph) => {\n graph.query.ast = ast as Obj.Mutable<typeof ast>;\n });\n }\n }\n }\n\n if (cell.name && cell.graph?.target) {\n const graph = Obj.getSnapshot(cell.graph?.target);\n const query = Query.fromAst(graph.query.ast);\n const objects = await db.query(query).run();\n const objectIds = objects?.map((obj) => obj.id);\n setQueryValues((prev) => ({ ...prev, [cell.name!]: objectIds }));\n }\n }\n }\n }, [db, notebook, graph]);\n\n const [promptResults, setPromptResults] = useState<Record<string, string>>({});\n const handleExecPrompts = useSpaceCallback(\n db?.spaceId,\n [] as const,\n Effect.fnUntraced(function* () {\n invariant(graph);\n\n const prompts =\n notebook?.cells\n .filter((cell) => cell.type === 'prompt')\n .map((cell) => cell.prompt)\n .filter(isNonNullable) ?? [];\n\n for (const prompt of prompts) {\n yield* runPrompt({\n prompt,\n input: { ...queryValues, ...graph.getValuesByName() },\n onResult: (result) =>\n setPromptResults((prev) => ({\n ...prev,\n [prompt.uri]: result,\n })),\n });\n }\n }),\n [notebook, graph, queryValues],\n );\n\n // TODO(burdon): Cache values in context (preserve when switched).\n const handleCompute = useCallback(async () => {\n // TODO(burdon): Generalize executors (dependencies).\n await graph?.evaluate();\n await handleExecQueries();\n await handleExecPrompts();\n }, [graph, handleExecQueries, handleExecPrompts]);\n\n const handleRearrange = useCallback<NonNullable<NotebookStackProps['onRearrange']>>(\n (source, target) => {\n invariant(notebook);\n const from = notebook.cells.findIndex((cell) => cell.id === source.id);\n const to = notebook.cells.findIndex((cell) => cell.id === target.id);\n if (from != null && to != null) {\n Obj.update(notebook, (notebook) => {\n const cell = notebook.cells.splice(from, 1)[0];\n if (cell) {\n notebook.cells.splice(to, 0, cell);\n }\n });\n }\n },\n [notebook],\n );\n\n const handleCellInsert = useCallback<NonNullable<NotebookStackProps['onCellInsert']>>(\n async (type, after) => {\n invariant(notebook);\n const cell: Types.Mutable<Notebook.Cell> = { id: crypto.randomUUID(), type };\n switch (type) {\n case 'markdown':\n case 'script':\n case 'query': {\n cell.source = Ref.make(Text.make());\n break;\n }\n\n case 'prompt': {\n if (db) {\n const objects = await db.query(Query.select(Filter.type(Blueprint.Blueprint))).run();\n const blueprints = objects\n .filter((blueprint) => {\n const key = Obj.getMeta(blueprint).key;\n return key !== undefined && INCLUDE_BLUEPRINTS.includes(key);\n })\n .map((blueprint) => Ref.make(blueprint));\n cell.prompt = Ref.make(Routine.make({ instructions: '', blueprints }));\n }\n break;\n }\n }\n\n const idx = after ? notebook.cells.findIndex((cell) => cell.id === after) : notebook.cells.length;\n Obj.update(notebook, (notebook) => {\n notebook.cells.splice(idx, 0, cell);\n });\n },\n [db, notebook],\n );\n\n const handleCellDelete = useCallback<NonNullable<NotebookStackProps['onCellDelete']>>(\n (id) => {\n invariant(notebook);\n const idx = notebook.cells.findIndex((cell) => cell.id === id);\n if (idx !== -1) {\n Obj.update(notebook, (notebook) => {\n notebook.cells.splice(idx, 1);\n });\n }\n },\n [notebook],\n );\n\n return (\n <Panel.Root role={role} className='dx-document'>\n <Panel.Toolbar asChild>\n <Toolbar.Root disabled={!hasAttention}>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton icon='ph--plus--regular' iconOnly label={t('notebook-cell-insert.label')} />\n </DropdownMenu.Trigger>\n <NotebookMenu onCellInsert={handleCellInsert} />\n </DropdownMenu.Root>\n <Toolbar.IconButton\n icon='ph--play--fill'\n iconOnly\n label={t('compute.label')}\n classNames='text-success-text'\n onClick={handleCompute}\n />\n </Toolbar.Root>\n </Panel.Toolbar>\n <Panel.Content asChild>\n <NotebookStack\n db={db}\n notebook={notebook}\n graph={graph}\n env={env}\n promptResults={promptResults}\n onRearrange={handleRearrange}\n onCellInsert={handleCellInsert}\n onCellDelete={handleCellDelete}\n />\n </Panel.Content>\n </Panel.Root>\n );\n};\n\n// TODO(wittjosiah): Factor out. Copied from PromptArticle in plugin-assistant.\nconst runPrompt = Effect.fn(function* ({\n prompt,\n input,\n onResult,\n}: {\n prompt: Ref.Ref<Routine.Routine>;\n input: Record<string, any>;\n onResult: (result: string) => void;\n}) {\n const inputData: Operation.Definition.Input<typeof AgentPrompt> = { prompt, input };\n // Invoke the function.\n const result = yield* Operation.invoke(AgentPrompt, inputData).pipe(Effect.orDie, Effect.exit);\n\n Exit.match(result, {\n onFailure: (cause) => {\n const error = Cause.prettyErrors(cause)[0];\n log.error(error.message, error.cause ?? error.stack);\n onResult(error.message);\n },\n onSuccess: (result: any) => {\n onResult(result.note);\n },\n });\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom, type Registry } from '@effect-atom/atom-react';\n\nimport { log } from '@dxos/log';\n\nimport { type Notebook } from '#types';\n\nimport { evalScript } from './eval';\nimport { type ParsedExpression, VirtualTypeScriptParser } from './vfs-parser';\n\n/**\n * Compute graph that evaluates the notebook cells.\n */\n// TODO(burdon): Reconcile with @dxos/conductor.\nexport class ComputeGraph {\n private readonly _parser = new VirtualTypeScriptParser();\n\n private _expressionsAtom = Atom.make<Record<string, ParsedExpression>>({});\n private _valuesByCellIdAtom = Atom.make<Record<string, any>>({});\n private _valuesByNameAtom = Atom.make<Record<string, any>>({});\n\n constructor(\n private readonly _notebook: Notebook.Notebook,\n private readonly _registry: Registry.Registry,\n ) {}\n\n /**\n * Atom for parsed expressions by cell ID.\n */\n get expressions(): Atom.Atom<Record<string, ParsedExpression>> {\n return this._expressionsAtom;\n }\n\n /**\n * Get current expressions by cell ID.\n */\n getExpressions(): Record<string, ParsedExpression> {\n return this._registry.get(this._expressionsAtom);\n }\n\n /**\n * Atom for computed values by cell ID.\n */\n get values(): Atom.Atom<Record<string, any>> {\n return this._valuesByCellIdAtom;\n }\n\n /**\n * Get computed values by cell ID.\n */\n getValues(): Record<string, any> {\n return this._registry.get(this._valuesByCellIdAtom);\n }\n\n /**\n * Atom for computed values by name.\n */\n get valuesByName(): Atom.Atom<Record<string, any>> {\n return this._valuesByNameAtom;\n }\n\n /**\n * Get current values by name.\n */\n getValuesByName(): Record<string, any> {\n return this._registry.get(this._valuesByNameAtom);\n }\n\n /**\n * Get computed value by cell ID.\n */\n getValue(cellId: string): any {\n return this._registry.get(this._valuesByCellIdAtom)[cellId];\n }\n\n /**\n * Compute values.\n */\n async evaluate() {\n // Parse expressions.\n const { expressions, dependencyGraph } = this.parse();\n this._registry.set(this._valuesByCellIdAtom, {});\n this._registry.set(this._valuesByNameAtom, {});\n\n // Create a map of cell IDs to expressions for easy lookup.\n const cellExpressions = new Map<string, ParsedExpression>();\n Object.entries(expressions).forEach(([id, expr]) => {\n cellExpressions.set(id, expr);\n });\n\n // Topological sort to determine evaluation order.\n const evaluationOrder = this.topologicalSort(Object.keys(expressions), dependencyGraph);\n\n // Values by reference name.\n const valuesByName: Record<string, any> = {};\n const valuesByCellId: Record<string, any> = {};\n\n // Evaluate cells in dependency order.\n for (const cellId of evaluationOrder) {\n const expr = cellExpressions.get(cellId);\n if (!expr) {\n log.error('no expression for cell', { cellId });\n continue;\n }\n\n const cellSource = this._notebook.cells.find((cell) => cell.id === cellId)?.source?.target?.content;\n if (!cellSource) {\n log.error('no source for cell', { cellId });\n continue;\n }\n\n try {\n // For assignments or declarations, evaluate and store the value.\n if (expr.name && expr.value !== undefined) {\n // If the parser extracted a literal value, use it directly.\n valuesByName[expr.name] = expr.value;\n valuesByCellId[cellId] = expr.value;\n } else if (expr.name) {\n // For non-literal assignments, we need to evaluate the expression.\n // The parser identifies it's an assignment, so we can extract the RHS.\n const equalIndex = cellSource.indexOf('=');\n if (equalIndex !== -1) {\n // Find the actual assignment operator (not in strings or other contexts).\n let rhs = cellSource.substring(equalIndex + 1).trim();\n\n // Handle semicolon at the end.\n if (rhs.endsWith(';')) {\n rhs = rhs.slice(0, -1).trim();\n }\n\n const result = await this.eval(rhs, valuesByName);\n valuesByName[expr.name] = result;\n if (typeof result !== 'function') {\n valuesByCellId[cellId] = result;\n }\n }\n } else {\n // For expressions without assignment, just evaluate.\n const result = await this.eval(cellSource, valuesByName);\n valuesByCellId[cellId] = result;\n }\n } catch (error) {\n // TODO(burdon): Set error state.\n log.error('error evaluating cell', { cellId, error });\n }\n }\n\n this._registry.set(this._valuesByCellIdAtom, valuesByCellId);\n this._registry.set(this._valuesByNameAtom, valuesByName);\n return valuesByCellId;\n }\n\n private async eval(source: string, values: Record<string, any>) {\n return evalScript(source, values);\n }\n\n /**\n * Parse expressions.\n */\n parse() {\n const expressions = this._notebook.cells\n .filter((cell) => cell.type === 'script')\n .reduce<Record<string, ParsedExpression>>((acc, cell) => {\n const text = cell.source?.target?.content.trim();\n if (text) {\n const parsed = this._parser.parseExpression(text);\n acc[cell.id] = parsed;\n }\n\n return acc;\n }, {});\n\n // Build dependency graph.\n const dependencyGraph = this.buildDependencyGraph(expressions);\n this._registry.set(this._expressionsAtom, expressions);\n return { expressions, dependencyGraph };\n }\n\n private topologicalSort(nodes: string[], dependencies: Record<string, string[]>): string[] {\n const visited = new Set<string>();\n const result: string[] = [];\n\n const visit = (node: string) => {\n if (visited.has(node)) {\n return;\n }\n\n visited.add(node);\n\n // Visit dependencies first.\n const deps = dependencies[node] || [];\n deps.forEach((dep) => visit(dep));\n result.push(node);\n };\n\n // Visit all nodes.\n nodes.forEach((node) => visit(node));\n return result;\n }\n\n private buildDependencyGraph(expressions: Record<string, ParsedExpression>): Record<string, string[]> {\n // Create a map of variable names to their cell IDs.\n const nameToCellId = new Map<string, string>();\n Object.entries(expressions).forEach(([id, expr]) => {\n if (expr.name) {\n nameToCellId.set(expr.name, id);\n }\n });\n\n // Build the dependency graph using cell IDs.\n const graph: Record<string, string[]> = {};\n Object.entries(expressions).forEach(([id, expr]) => {\n if (expr.references && expr.references.length > 0) {\n // Map variable references to cell IDs.\n const dependencyCellIds = expr.references\n .map((ref) => nameToCellId.get(ref))\n .filter((cellId): cellId is string => cellId !== undefined && cellId !== id);\n\n if (dependencyCellIds.length > 0) {\n graph[id] = dependencyCellIds;\n }\n }\n });\n\n return graph;\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { trim } from '@dxos/util';\n\n/**\n * Evaluate the script (with dependencies as arguments).\n */\nexport const evalScript = async (code: string, deps: Record<string, any> = {}) => {\n // Create a sandboxed environment that blocks access to window and document.\n const sandbox = {\n ...deps,\n\n // Block access to global objects.\n console: undefined,\n document: undefined,\n global: undefined,\n globalThis: undefined,\n self: undefined,\n window: undefined,\n\n // Allow some safe globals.\n Array,\n Boolean,\n Date,\n Error,\n JSON,\n Map,\n Math,\n Number,\n Object,\n Promise,\n RegExp,\n Set,\n String,\n\n // Functions.\n isFinite,\n isNaN,\n parseFloat,\n parseInt,\n\n // Note: undefined and null are not included as they are keywords, not variables.\n };\n\n // Create function with all sandbox keys as parameters.\n const sandboxKeys = Object.keys(sandbox);\n const sandboxValues = Object.values(sandbox);\n\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const fn = new Function(\n ...sandboxKeys,\n trim`\n 'use strict';\n return ${code};\n `,\n );\n\n return fn(...sandboxValues);\n};\n\n/**\n * Globals.\n */\nexport const builtIns = new Set([\n // Types.\n 'Array',\n 'Date',\n 'Error',\n 'JSON',\n 'Map',\n 'Math',\n 'Number',\n 'Object',\n 'Promise',\n 'RegExp',\n 'Set',\n 'String',\n\n // Functions.\n 'isFinite',\n 'isNaN',\n 'parseFloat',\n 'parseInt',\n]);\n\n/**\n * Default system definitions.\n */\nexport const systemDefinitions = trim`\n interface Array<T> { length: number; [n: number]: T; }\n interface Boolean {}\n interface Function {}\n interface IArguments {}\n interface Number {}\n interface Object {}\n interface RegExp {}\n interface String { length: number; }\n\n interface CallableFunction extends Function {}\n interface NewableFunction extends Function {}\n\n declare var console: { log(...args: any[]): void };\n`;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createSystem, createVirtualTypeScriptEnvironment } from '@typescript/vfs';\nimport ts from 'typescript';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { builtIns, systemDefinitions } from './eval';\n\n/**\n * Default system definitions.\n */\nconst systemFiles: VirtualFile[] = [\n {\n filename: '/lib.d.ts',\n content: systemDefinitions,\n },\n];\n\nexport type ParsedExpression = {\n name?: string;\n type?: 'function' | 'variable' | 'class' | 'interface';\n value?: any;\n valueType?: string;\n parameters?: Array<{ name: string; type: string }>;\n returnType?: string;\n references?: string[];\n};\n\nexport type VirtualFile = {\n filename: string;\n content: string;\n};\n\n/**\n * TypeScript parser using Virtual File System for browser compatibility.\n * This provides full TypeScript analysis including type information.\n */\nexport class VirtualTypeScriptParser {\n protected compilerOptions: ts.CompilerOptions = {\n target: ts.ScriptTarget.ES2020,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n forceConsistentCasingInfilenames: true,\n jsx: ts.JsxEmit.React,\n noLib: true, // Don't automatically include default lib files.\n };\n\n /**\n * Parse a single expression or statement.\n */\n parseExpression(input: string): ParsedExpression {\n invariant(input.trim() !== '', 'input must not be empty');\n const files: VirtualFile[] = [{ filename: '/temp.ts', content: input }];\n const analysis = this.analyzeFiles(files);\n\n // If no declarations found, check for standalone expression references.\n if (analysis.length === 0) {\n const sourcefilename = '/temp.ts';\n const env = this.createEnvironment([{ filename: sourcefilename, content: input }]);\n const sourceFile = env.getSourceFile(sourcefilename);\n const typeChecker = env.languageService.getProgram()?.getTypeChecker();\n\n if (sourceFile && typeChecker) {\n // Check for assignment expressions.\n const assignmentInfo = this.findAssignmentExpression(sourceFile, typeChecker);\n if (assignmentInfo) {\n return assignmentInfo;\n }\n\n const references = this.findAllReferences(sourceFile, typeChecker);\n return { references };\n }\n }\n\n return analysis[0];\n }\n\n /**\n * Analyze multiple files with full type information.\n */\n analyzeFiles(files: VirtualFile[]): ParsedExpression[] {\n const env = this.createEnvironment(files);\n const results: ParsedExpression[] = [];\n const typeChecker = env.languageService.getProgram()?.getTypeChecker();\n\n // Analyze each file.\n files.forEach((file) => {\n const sourceFile = env.getSourceFile(file.filename);\n if (!sourceFile || !typeChecker) {\n return;\n }\n\n const fileResults = this.analyzeSourceFile(sourceFile, typeChecker);\n results.push(...fileResults);\n });\n\n return results;\n }\n\n /**\n * Analyze a source file with type information.\n */\n protected analyzeSourceFile(sourceFile: ts.SourceFile, typeChecker: ts.TypeChecker): ParsedExpression[] {\n const results: ParsedExpression[] = [];\n\n const visit = (node: ts.Node) => {\n // Function declarations.\n if (ts.isFunctionDeclaration(node) && node.name) {\n const symbol = typeChecker.getSymbolAtLocation(node.name);\n const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, node);\n const signature = type && typeChecker.getSignaturesOfType(type, ts.SignatureKind.Call)[0];\n\n results.push({\n name: node.name.text,\n type: 'function',\n parameters: this.extractParameters(signature, typeChecker),\n returnType: signature ? typeChecker.typeToString(signature.getReturnType()) : 'any',\n references: this.findReferences(node, sourceFile, typeChecker),\n });\n }\n\n // Variable declarations.\n else if (ts.isVariableStatement(node)) {\n node.declarationList.declarations.forEach((declaration) => {\n if (ts.isIdentifier(declaration.name)) {\n const symbol = typeChecker.getSymbolAtLocation(declaration.name);\n const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, declaration);\n\n let kind: 'function' | 'variable' = 'variable';\n let parameters: Array<{ name: string; type: string }> | undefined;\n let returnType: string | undefined;\n let value: any;\n\n // Get the type string.\n const typeString = type ? typeChecker.typeToString(type) : 'any';\n\n // Check if it's a function.\n if (declaration.initializer) {\n if (ts.isArrowFunction(declaration.initializer) || ts.isFunctionExpression(declaration.initializer)) {\n kind = 'function';\n const funcType = typeChecker.getTypeAtLocation(declaration.initializer);\n const signature = typeChecker.getSignaturesOfType(funcType, ts.SignatureKind.Call)[0];\n if (signature) {\n parameters = this.extractParameters(signature, typeChecker);\n returnType = typeChecker.typeToString(signature.getReturnType());\n }\n } else {\n // Extract literal values\n if (ts.isNumericLiteral(declaration.initializer)) {\n value = Number(declaration.initializer.text);\n } else if (ts.isStringLiteral(declaration.initializer)) {\n value = declaration.initializer.text;\n }\n }\n }\n\n // Find references in the initializer only.\n const refs = declaration.initializer\n ? this.findReferences(declaration.initializer, sourceFile, typeChecker)\n : [];\n\n results.push({\n name: declaration.name.text,\n type: kind,\n valueType: typeString,\n value,\n parameters,\n returnType,\n references: refs,\n });\n }\n });\n }\n\n // Class declarations.\n else if (ts.isClassDeclaration(node) && node.name) {\n results.push({\n name: node.name.text,\n type: 'class',\n references: this.findReferences(node, sourceFile, typeChecker),\n });\n }\n\n // Interface declarations.\n else if (ts.isInterfaceDeclaration(node)) {\n results.push({\n name: node.name.text,\n type: 'interface',\n references: this.findReferences(node, sourceFile, typeChecker),\n });\n }\n\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return results;\n }\n\n /**\n * Extract parameter information from a signature.\n */\n private extractParameters(\n signature: ts.Signature | undefined,\n typeChecker: ts.TypeChecker,\n ): Array<{ name: string; type: string }> {\n if (!signature) {\n return [];\n }\n\n return signature.parameters.map((param) => ({\n name: param.getName(),\n type: typeChecker.typeToString(typeChecker.getTypeOfSymbolAtLocation(param, param.valueDeclaration!)),\n }));\n }\n\n /**\n * Find all references to variables used in a node.\n */\n private findReferences(node: ts.Node, _sourceFile: ts.SourceFile, _typeChecker: ts.TypeChecker): string[] {\n const references = new Set<string>();\n const localSymbols = new Set<string>();\n\n // First, collect local symbols (parameters, local variables).\n const collectLocalSymbols = (node: ts.Node) => {\n if (ts.isFunctionDeclaration(node) || ts.isArrowFunction(node) || ts.isFunctionExpression(node)) {\n node.parameters.forEach((param) => {\n if (ts.isIdentifier(param.name)) {\n localSymbols.add(param.name.text);\n }\n });\n }\n\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)) {\n localSymbols.add(node.name.text);\n }\n\n ts.forEachChild(node, collectLocalSymbols);\n };\n\n collectLocalSymbols(node);\n\n // Then find all identifier references.\n const findRefs = (node: ts.Node) => {\n if (ts.isIdentifier(node)) {\n // Skip if it's a local symbol.\n if (!localSymbols.has(node.text)) {\n // Check if it's a reference (not a declaration).\n const parent = node.parent;\n const isDeclaration =\n (ts.isVariableDeclaration(parent) && parent.name === node) ||\n (ts.isFunctionDeclaration(parent) && parent.name === node) ||\n (ts.isParameter(parent) && parent.name === node);\n\n if (!isDeclaration && !this.isBuiltIn(node.text)) {\n references.add(node.text);\n }\n }\n }\n ts.forEachChild(node, findRefs);\n };\n\n findRefs(node);\n return Array.from(references);\n }\n\n /**\n * Check if a name is a built-in global.\n */\n protected isBuiltIn(name: string): boolean {\n return builtIns.has(name);\n }\n\n /**\n * Find assignment expressions in a source file.\n */\n private findAssignmentExpression(sourceFile: ts.SourceFile, typeChecker: ts.TypeChecker): ParsedExpression | null {\n let result: ParsedExpression | null = null;\n\n const visit = (node: ts.Node) => {\n if (ts.isExpressionStatement(node) && ts.isBinaryExpression(node.expression)) {\n const expr = node.expression;\n if (expr.operatorToken.kind === ts.SyntaxKind.EqualsToken && ts.isIdentifier(expr.left)) {\n const type = typeChecker.getTypeAtLocation(expr.right);\n const typeString = typeChecker.typeToString(type);\n\n // Get the literal value if it's a literal.\n let value: any;\n if (ts.isNumericLiteral(expr.right)) {\n value = Number(expr.right.text);\n } else if (ts.isStringLiteral(expr.right)) {\n value = expr.right.text;\n }\n\n // Find references in the right-hand side.\n const references = this.findReferences(expr.right, sourceFile, typeChecker);\n\n result = {\n name: expr.left.text,\n type: 'variable',\n valueType: typeString,\n value,\n references,\n };\n }\n }\n if (!result) {\n ts.forEachChild(node, visit);\n }\n };\n\n visit(sourceFile);\n return result;\n }\n\n /**\n * Find all identifier references in a source file.\n */\n protected findAllReferences(sourceFile: ts.SourceFile, _typeChecker: ts.TypeChecker): string[] {\n const references = new Set<string>();\n\n const visit = (node: ts.Node) => {\n if (ts.isIdentifier(node)) {\n // Skip if it's a declaration.\n const parent = node.parent;\n const isDeclaration =\n (ts.isVariableDeclaration(parent) && parent.name === node) ||\n (ts.isFunctionDeclaration(parent) && parent.name === node) ||\n (ts.isParameter(parent) && parent.name === node);\n\n // Skip if it's the left-hand side of an assignment.\n const isAssignmentTarget =\n ts.isBinaryExpression(parent) &&\n parent.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n parent.left === node;\n\n if (!isDeclaration && !isAssignmentTarget && !this.isBuiltIn(node.text)) {\n references.add(node.text);\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return Array.from(references);\n }\n\n protected createEnvironment(files: VirtualFile[]) {\n const allFiles = [...systemFiles, ...files];\n\n const fileMap = new Map<string, string>();\n allFiles.forEach(({ filename, content }) => {\n fileMap.set(filename, content);\n });\n\n const system = createSystem(fileMap);\n return createVirtualTypeScriptEnvironment(\n system,\n allFiles.map(({ filename }) => filename),\n ts,\n this.compilerOptions,\n );\n }\n}\n\n/**\n * Notebook-specific parser with dependency analysis.\n */\nexport class NotebookVirtualParser extends VirtualTypeScriptParser {\n /**\n * Analyze notebook cells with full type checking.\n */\n analyzeNotebook(cells: Array<{ id: string; code: string }>) {\n // Create cumulative environment where each cell can see previous cells.\n const cumulativeCode: string[] = [];\n const cellAnalysis: Map<\n string,\n {\n exports: ParsedExpression[];\n imports: string[];\n errors: ts.Diagnostic[];\n }\n > = new Map();\n\n cells.forEach((cell) => {\n // Create files for all cells up to current.\n const files: VirtualFile[] = [];\n\n // Add previous cells as context.\n if (cumulativeCode.length > 0) {\n files.push({\n filename: '/context.ts',\n content: cumulativeCode.join('\\n'),\n });\n }\n\n // Add current cell.\n const filename = `/cell/${cell.id}.ts`;\n files.push({\n filename,\n content: cell.code,\n });\n\n // Create environment.\n const env = this.createEnvironment(files);\n\n // Get diagnostics (errors).\n const diagnostics = env.languageService.getSemanticDiagnostics(filename);\n\n // Analyze current cell.\n const sourceFile = env.getSourceFile(filename);\n const typeChecker = env.languageService.getProgram()?.getTypeChecker();\n\n if (sourceFile && typeChecker) {\n const exports = this.analyzeSourceFile(sourceFile, typeChecker);\n\n // Find all references in the current cell.\n const allRefs = new Set<string>();\n exports.forEach((exp) => {\n exp.references?.forEach((ref) => allRefs.add(ref));\n });\n\n // Also check for references not in exports (e.g., console.log(y)).\n const additionalRefs = this.findAllReferences(sourceFile, typeChecker);\n additionalRefs.forEach((ref) => allRefs.add(ref));\n\n // Determine which references are imports from previous cells.\n const previousExports = new Set<string>();\n for (const [_prevCellId, prevAnalysis] of cellAnalysis) {\n prevAnalysis.exports.forEach((exp) => {\n if (exp.name) {\n previousExports.add(exp.name);\n }\n });\n }\n\n const imports = Array.from(allRefs).filter((ref) => previousExports.has(ref));\n\n cellAnalysis.set(cell.id, {\n exports,\n imports,\n errors: diagnostics,\n });\n }\n\n // Add current cell code to cumulative.\n cumulativeCode.push(cell.code);\n });\n\n return cellAnalysis;\n }\n}\n"],
5
+ "mappings": ";;;AAIA,SAASA,uBAAuB;AAChC,YAAYC,WAAW;AACvB,YAAYC,YAAY;AACxB,YAAYC,UAAU;AAEtB,OAAOC,SAASC,aAAaC,YAAYC,SAASC,gBAAgB;AAElE,SAASC,wBAAwB;AAEjC,SAASC,mBAAmB;AAC5B,SAASC,WAAWC,eAAe;AACnC,SAASC,iBAAiB;AAC1B,SAASC,QAAQC,KAAKC,OAAOC,WAAW;AACxC,SAASC,oBAAoB;AAC7B,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,OAAAA,YAAW;AACpB,SAASC,aAAa;AACtB,SAASC,cAAcC,YAAYC,OAAOC,SAASC,sBAAsB;AACzE,SAASC,oBAAoB;AAC7B,SAASC,MAAMC,iBAAiB;AAChC,SAASC,qBAAqB;AAE9B,SAASC,cAAcC,qBAA0E;AACjG,SAASC,YAAY;;;ACvBrB,SAASC,YAA2B;AAEpC,SAASC,WAAW;;;ACFpB,SAASC,YAAY;AAKd,IAAMC,aAAa,OAAOC,MAAcC,OAA4B,CAAC,MAAC;AAE3E,QAAMC,UAAU;IACd,GAAGD;;IAGHE,SAASC;IACTC,UAAUD;IACVE,QAAQF;IACRG,YAAYH;IACZI,MAAMJ;IACNK,QAAQL;;IAGRM;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;IACAC;;IAGAC;IACAC;IACAC;IACAC;EAGF;AAGA,QAAMC,cAAcT,OAAOU,KAAK1B,OAAAA;AAChC,QAAM2B,gBAAgBX,OAAOY,OAAO5B,OAAAA;AAGpC,QAAM6B,MAAK,IAAIC,SAAAA,GACVL,aACH7B;;eAEWE,IAAAA;KACV;AAGH,SAAO+B,IAAAA,GAAMF,aAAAA;AACf;AAKO,IAAMI,WAAW,oBAAIZ,IAAI;;EAE9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAGA;EACA;EACA;EACA;CACD;AAKM,IAAMa,oBAAoBpC;;;;;;;;;;;;;;;;;ACtFjC,SAASqC,cAAcC,0CAA0C;AACjE,OAAOC,QAAQ;AAEf,SAASC,iBAAiB;AAI1B,IAAA,eAAA;IAKIC,cAAU;;IAEZ,UAAA;IACD,SAAA;EAiBD;;AAMIC,IAAQC,0BAARD,MAA8B;oBACnBE;IACXC,QAAAA,GAAAA,aAAqBC;IACrBC,QAAQ,GAAA,WAAA;IACRC,kBAAiB,GAAA,qBAAA;IACjBC,QAAAA;IACAC,iBAAAA;IACAC,cAAQC;IACRC,kCAAO;IACP,KAAA,GAAA,QAAA;IAEF,OAAA;;;;;kBAK+B,OAAA;cAAC,MAAA,KAAA,MAAA,IAAA,2BAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,uBAAA,2BAAA,EAAA,CAAA;kBAAEZ;;QAAqC,UAAA;QAAE,SAAA;MACvE;IAEA;AACA,UAAIa,WAASC,KAAM,aAAQ,KAAA;QAEzB,SAAMC,WAAWC,GAAAA;YAAmB,iBAAA;kBAAEhB,KAAAA,kBAAUiB;;UAA+B,UAAA;UAAE,SAAA;QACjF;MACA,CAAA;AAEA,YAAIC,aAAcC,IAAAA,cAAa,cAAA;YAC7B,cAAA,IAAA,gBAAoC,WAAA,GAAA,eAAA;UACpC,cAAMC,aAAqB;cAEzB,iBAAOA,KAAAA,yBAAAA,YAAAA,WAAAA;AACT,YAAA,gBAAA;AAEA,iBAAMC;QACN;cAASA,aAAAA,KAAAA,kBAAAA,YAAAA,WAAAA;AAAW,eAAA;UACtB;QACF;MAEA;IACF;AAEA,WAAA,SAAA,CAAA;;;;;eAKQC,OAAgC;AACtC,UAAMH,MAAAA,KAAAA,kBAAkBI,KAAgBC;AAExC,UAAA,UAAA,CAAA;AACAC,UAAMC,cAASC,IAAAA,gBAAAA,WAAAA,GAAAA,eAAAA;UAEb,QAAKT,CAAAA,SAAAA;YACH,aAAA,IAAA,cAAA,KAAA,QAAA;AACF,UAAA,CAAA,cAAA,CAAA,aAAA;AAEA;MACAI;AACF,YAAA,cAAA,KAAA,kBAAA,YAAA,WAAA;AAEA,cAAOA,KAAAA,GAAAA,WAAAA;IACT,CAAA;AAEA,WAAA;;;;;oBAMiBM,YAAAA,aAAAA;UACb,UAAA,CAAA;UACA,QAAOC,CAAAA,SAAAA;UAEL,GAAA,sBAAuBV,IAAAA,KAAAA,KAAYW,MAAAA;AACnC,cAAMC,SAAAA,YAAoBZ,oBAAYa,KAAAA,IAAAA;AAEtCV,cAAAA,OAAa,UAAA,YAAA,0BAAA,QAAA,IAAA;cACXW,YAAWA,QAAS,YAAA,oBAAA,MAAA,GAAA,cAAA,IAAA,EAAA,CAAA;gBACpBC,KAAM;UACNC,MAAAA,KAAAA,KAAgB;UAChBC,MAAAA;UACAf,YAAY,KAAKgB,kBAAeT,WAAMV,WAAYC;UACpD,YAAA,YAAA,YAAA,aAAA,UAAA,cAAA,CAAA,IAAA;UAIG,YAAOmB,KAAAA,eAAoBV,MAAO,YAAA,WAAA;QACrCA,CAAAA;iBACE,GAAI1B,oBAAgBqC,IAAAA,GAAYN;6BACxBO,aAASrB,QAAYsB,CAAAA,gBAAoBF;cAC/C,GAAA,aAAaC,YAAUrB,IAAAA,GAAYW;AAEnC,kBAAIY,SAAgC,YAAA,oBAAA,YAAA,IAAA;AACpC,kBAAIP,OAAAA,UAAAA,YAAAA,0BAAAA,QAAAA,WAAAA;AACJ,gBAAIC,OAAAA;AACJ,gBAAIO;AAEJ,gBAAA;AACA,gBAAA;AAGA,kBAAIJ,aAAYK,OAAAA,YAAa,aAAA,IAAA,IAAA;4BAElB,aAAA;kBACP,GAAA,gBAAiBzB,YAAY0B,WAAAA,KAAkBN,GAAAA,qBAAuB,YAAA,WAAA,GAAA;AACtE,uBAAMR;AACN,sBAAIA,WAAW,YAAA,kBAAA,YAAA,WAAA;sBACbI,YAAa,YAAKW,oBAAkBf,UAAWZ,GAAAA,cAAAA,IAAAA,EAAAA,CAAAA;oBAC/CiB,WAAAA;AACF,+BAAA,KAAA,kBAAA,WAAA,WAAA;AACK,+BAAA,YAAA,aAAA,UAAA,cAAA,CAAA;gBACL;qBACA;AAEA,oBAAA,GAAO,iBAAOW,YAAgBR,WAAYK,GAAAA;AACxCD,0BAAQJ,OAAAA,YAAYK,YAAgB,IAAA;gBACtC,WAAA,GAAA,gBAAA,YAAA,WAAA,GAAA;AACF,0BAAA,YAAA,YAAA;gBACF;cAEA;YACA;kBAKEX,OAAMM,YAAYN,cAAS,KAAA,eAAA,YAAA,aAAA,YAAA,WAAA,IAAA,CAAA;oBAC3BC,KAAMQ;cACNM,MAAAA,YAAWC,KAAAA;cACXN,MAAAA;cACAR,WAAAA;cACAC;cACAf;cACF;cACF,YAAA;YACF,CAAA;UAIG;QACHC,CAAAA;iBACEW,GAAML,mBAAc,IAAA,KAAA,KAAA,MAAA;gBACpBM,KAAM;UACNb,MAAAA,KAAAA,KAAgB;UAClB,MAAA;UAIG,YAAO6B,KAAAA,eAAuBtB,MAAO,YAAA,WAAA;QACxCN,CAAAA;iBACEW,GAAML,uBAAc,IAAA,GAAA;gBACpBM,KAAM;UACNb,MAAAA,KAAAA,KAAgB;UAClB,MAAA;UACF,YAAA,KAAA,eAAA,MAAA,YAAA,WAAA;QAEG8B,CAAAA;MACL;AAEAC,SAAMlC,aAAAA,MAAAA,KAAAA;IACN;AACF,UAAA,UAAA;AAEA,WAAA;;;;;oBAQa,WAAA,aAAA;AACX,QAAA,CAAA,WAAA;AAEA,aAAOa,CAAAA;;qBAECZ,WAAYkC,IAAAA,CAAAA,WAAalC;MACjC,MAAA,MAAA,QAAA;MACF,MAAA,YAAA,aAAA,YAAA,0BAAA,OAAA,MAAA,gBAAA,CAAA;IAEA,EAAA;;;;;iBAKQmC,MAAAA,aAAmBC,cAAAA;AAEzB,UAAA,aAAA,oBAAA,IAAA;AACA,UAAMC,eAAAA,oBAAAA,IAAuB5B;gCAETF,CAAAA,UAAS+B;mCACHA,KAAAA,KAAU,GAAG,gBAAA7B,KAAA,KAAA,GAAA,qBAAAA,KAAA,GAAA;yBAC/B0B,QAAgB,CAACG,UAAMxB;AACzB,cAAA,GAAA,aAAA,MAAA,IAAA,GAAA;AACF,yBAAA,IAAA,MAAA,KAAA,IAAA;UACF;QAEI/B,CAAAA;;AAEJ,UAAA,GAAA,sBAAA0B,KAAA,KAAA,GAAA,aAAAA,MAAA,IAAA,GAAA;AAEGuB,qBAAavB,IAAAA,MAAM4B,KAAAA,IAAAA;MACxB;AAEAA,SAAAA,aAAoB5B,OAAAA,mBAAAA;IAEpB;AACA,wBAAkBA,IAAAA;qBAEd,CAAAA,UAAA;UACA,GAAA,aAAK0B,KAAaI,GAAI9B;YAEpB,CAAA,aAAM+B,IAAS/B,MAAK+B,IAAM,GAAA;AAM1B,gBAAKC,SAAAA,MAAAA;gBACHvC,gBAAeO,GAAKiC,sBAAI,MAAA,KAAA,OAAA,SAAAjC,SAAA,GAAA,sBAAA,MAAA,KAAA,OAAA,SAAAA,SAAA,GAAA,YAAA,MAAA,KAAA,OAAA,SAAAA;AAC1B,cAAA,CAAA,iBAAA,CAAA,KAAA,UAAAA,MAAA,IAAA,GAAA;AACF,uBAAA,IAAAA,MAAA,IAAA;UACF;QACGuB;MACL;AAEAW,SAAAA,aAASlC,OAAAA,QAAAA;IACT;AACF,aAAA,IAAA;AAEA,WAAA,MAAA,KAAA,UAAA;;;;;EAKA,UAAA,MAAA;AAEA,WAAA,SAAA,IAAA,IAAA;;;;;2BAMiBA,YAAAA,aAAAA;QACb,SAAOmC;kBACCC,CAAAA,SAAOpC;UACb,GAAA,sBAAuBc,IAAI,KAAKxC,GAAG+D,mBAAWC,KAAehE,UAAGiE,GAAAA;cAC9D,OAAMjC,KAAOf;YACb,KAAA,cAAmBA,SAAAA,GAAYkC,WAAAA,eAAanB,GAAAA,aAAAA,KAAAA,IAAAA,GAAAA;AAE5C,gBAAA,OAAA,YAAA,kBAA2C,KAAA,KAAA;AAC3C,gBAAIS,aAAAA,YAAAA,aAAAA,IAAAA;cAEFA;AACF,cAAA,GAAO,iBAAOI,KAAe,KAACiB,GAAKI;AACjCzB,oBAAQqB,OAAKI,KAAMP,MAAI,IAAA;UACzB,WAAA,GAAA,gBAAA,KAAA,KAAA,GAAA;AAEA,oBAAA,KAAA,MAAA;UACA;gBAGE5B,aAAe,KAAK,eAAA,KAAA,OAAA,YAAA,WAAA;mBACpBC;YACAc,MAAAA,KAAWC,KAAAA;YACXN,MAAAA;YACAtB,WAAAA;YACF;YACF;UACF;QACI;;AAEJ,UAAA,CAAA,QAAA;AACF,WAAA,aAAA,MAAA,KAAA;MAEA+B;IACA;AACF,UAAA,UAAA;AAEA,WAAA;;;;;oBAMiBxB,YAAAA,cAAAA;UACb,aAAOuC,oBAAY,IAACvC;kBAClB,CAAA,SAAA;UACA,GAAA,aAAeA,IAAK+B,GAAAA;AAMpB,cAAA,SAAA,KAAA;AACA,cAAMU,gBAAAA,GAAAA,sBACDC,MAAmBX,KAAAA,OACtBA,SAAOY,QAAc7B,GAAI,sBAAmBwB,MAAAA,KAAW,OACvDP,SAAW,QAAK/B,GAAAA,YAAAA,MAAAA,KAAAA,OAAAA,SAAAA;cAGhBP,qBAAoBwC,GAAI,mBAAA,MAAA,KAAA,OAAA,cAAA,SAAA,GAAA,WAAA,eAAA,OAAA,SAAA;AAC1B,YAAA,CAAA,iBAAA,CAAA,sBAAA,CAAA,KAAA,UAAA,KAAA,IAAA,GAAA;AACF,qBAAA,IAAA,KAAA,IAAA;QACGV;MACL;AAEAC,SAAMlC,aAAAA,MAAAA,KAAAA;IACN;AACF,UAAA,UAAA;AAEUF,WAAAA,MAAAA,KAAkBS,UAAsB;;oBAC3B+C,OAAAA;qBAAgB/C;MAAM,GAAA;MAE3C,GAAMgD;IACNC;UACED,UAAYzE,oBAAAA,IAAAA;AACd,aAAA,QAAA,CAAA,EAAA,UAAA,QAAA,MAAA;AAEA,cAAM2E,IAASC,UAAAA,OAAaH;IAC5B,CAAA;AAMF,UAAA,SAAA,aAAA,OAAA;AACF,WAAA,mCAAA,QAAA,SAAA,IAAA,CAAA,EAAA,SAAA,MAAA,QAAA,GAAA,IAAA,KAAA,eAAA;EAEA;;;;AFtWA,IAAAI,gBAAA;;EAKmBC;EAETC;EACAC,UAAAA,IAAAA,wBAAyD;EACzDC,mBAAAA,KAAoBC,KAAS,CAAsB,CAAC;EAE5D,sBAC+C,KAC5BC,KAA4B,CAC7C,CAAA;sBAFiBC,KAAAA,KAAAA,CAAAA,CAAAA;cACAD,WAAAA,WAAAA;AAChB,SAAA,YAAA;AAEH,SAAA,YAAA;;;;;EAKA,IAAA,cAAA;AAEA,WAAA,KAAA;;;;;EAKA,iBAAA;AAEA,WAAA,KAAA,UAAA,IAAA,KAAA,gBAAA;;;;;EAKA,IAAA,SAAA;AAEA,WAAA,KAAA;;;;;EAKA,YAAA;AAEA,WAAA,KAAA,UAAA,IAAA,KAAA,mBAAA;;;;;EAKA,IAAA,eAAA;AAEA,WAAA,KAAA;;;;;EAKA,kBAAA;AAEA,WAAA,KAAA,UAAA,IAAA,KAAA,iBAAA;;;;;EAKA,SAAA,QAAA;AAEA,WAAA,KAAA,UAAA,IAAA,KAAA,mBAAA,EAAA,MAAA;;;;;QAKE,WAAQE;AAER,UAAKF,EAAAA,aAAc,gBAAKF,IAAiB,KAAG,MAAA;AAE5C,SAAA,UAAA,IAAA,KAAA,qBAAA,CAAA,CAAA;AACA,SAAA,UAAMK,IAAAA,KAAkB,mBAAIC,CAAAA,CAAAA;UAE1BD,kBAAoBE,oBAAIC,IAAAA;AAC1B,WAAA,QAAA,WAAA,EAAA,QAAA,CAAA,CAAA,IAAA,IAAA,MAAA;AAEA,sBAAA,IAAA,IAAA,IAAA;IACA,CAAA;AAGA,UAAMC,kBAAqC,KAAA,gBAAA,OAAA,KAAA,WAAA,GAAA,eAAA;AAG3C,UAAA,eAAA,CAAA;AACA,UAAK,iBAAgBC,CAAAA;eAEdF,UAAM,iBAAA;YACTG,OAAS,gBAAC,IAAA,MAAA;iBAA4BC;AAAO,YAAA,MAAA,0BAAA;UAC7C;QACF,GAAA,EAAA,YAAA,YAAA,GAAAhB,eAAA,GAAA,IAAA,GAAA,KAAA,CAAA;AAEA;MACA;YACEe,aAAU,KAAA,UAAA,MAAsB,KAAA,CAAA,SAAA,KAAA,OAAA,MAAA,GAAA,QAAA,QAAA;uBAAEC;AAAO,YAAA,MAAA,sBAAA;UACzC;QACF,GAAA,EAAA,YAAA,YAAA,GAAAhB,eAAA,GAAA,IAAA,GAAA,KAAA,CAAA;AAEI;;UAEF;YAEEa,KAAAA,QAAaD,KAAKK,UAAQL,QAAU;AAEtC,uBAAgBK,KAAM,IAAA,IAAA,KAAA;AACpB,yBAAA,MAAA,IAAA,KAAA;mBACA,KAAA,MAAA;gBAGE,aAAA,WAAA,QAAA,GAAA;cACA,eAAUC,IAAAA;AAGV,gBAAIC,MAAIC,WAAS,UAAM,aAAA,CAAA,EAAA,KAAA;AAEvB,gBAAA,IAAA,SAAA,GAAA,GAAA;AAEA,oBAAMC,IAAAA,MAAS,GAAM,EAAI,EAACC,KAAKH;YAC/BN;AACA,kBAAI,SAAOQ,MAAAA,KAAW,KAAA,KAAY,YAAA;yBAChCE,KAAc,IAACP,IAAO;AACxB,gBAAA,OAAA,WAAA,YAAA;AACF,6BAAA,MAAA,IAAA;YACK;UACL;eACA;AAEF,gBAAA,SAAA,MAAA,KAAA,KAAA,YAAA,YAAA;AACA,yBAAc,MAAA,IAAA;QACd;eACIQ,OAAM;YAAmCA,MAAAA,yBAAAA;UAAM;UACrD;QACF,GAAA,EAAA,YAAA,YAAA,GAAAxB,eAAA,GAAA,KAAA,GAAA,KAAA,CAAA;MAEI;IACJ;AACA,SAAA,UAAOuB,IAAAA,KAAAA,qBAAAA,cAAAA;AACT,SAAA,UAAA,IAAA,KAAA,mBAAA,YAAA;AAEA,WAAmBE;;EAEnB,MAAA,KAAA,QAAA,QAAA;AAEA,WAAA,WAAA,QAAA,MAAA;;;;;UAOM;UACA,cAAU,KAAA,UAAA,MAAA,OAAA,CAAA,SAAA,KAAA,SAAA,QAAA,EAAA,OAAA,CAAA,KAAA,SAAA;YACR,OAAMC,KAAAA,QAAczB,QAAQ0B,QAAAA,KAAe;UAC3CC,MAAIC;AACN,cAAA,SAAA,KAAA,QAAA,gBAAA,IAAA;AAEA,YAAOD,KAAAA,EAAAA,IAAAA;MACL;AAEN,aAAA;IACA,GAAA,CAAA,CAAA;AAEA,UAAA,kBAAO,KAAA,qBAAA,WAAA;SAAEpB,UAAAA,IAAAA,KAAAA,kBAAAA,WAAAA;WAAasB;MAAgB;MACxC;IAEQC;;kBAEAV,OAAqB,cAAA;AAE3B,UAAMW,UAASC,oBAAAA,IAAAA;UACb,SAAIC,CAAQC;kBACV,CAAA,SAAA;AACF,UAAA,QAAA,IAAA,IAAA,GAAA;AAEAD;MAEA;AACA,cAAME,IAAAA,IAAOC;AAEbhB,YAAAA,OAAYY,aAAAA,IAAAA,KAAAA,CAAAA;AACd,WAAA,QAAA,CAAA,QAAA,MAAA,GAAA,CAAA;AAEA,aAAA,KAAA,IAAmB;IACnBK;AAEF,UAAA,QAAA,CAAA,SAAA,MAAA,IAAA,CAAA;AAEQC,WAAAA;;uBAEAC,aAAmB9B;UAEvB,eAAe,oBAAA,IAAA;mBACb8B,WAAiB5B,EAAAA,QAAWD,CAAAA,CAAAA,IAAAA,IAAAA,MAAAA;AAC9B,UAAA,KAAA,MAAA;AACF,qBAAA,IAAA,KAAA,MAAA,EAAA;MAEA;IACA,CAAA;UAEE,QAAS8B,CAAAA;mBACP,WAAA,EAAA,QAAA,CAAA,CAAA,IAAA,IAAA,MAAuC;UACvC,KAAA,cAAMC,KAAAA,WAAyBD,SAC5BE,GAAKC;cAINC,oBAAYH,KAAAA,WAAAA,IAAAA,CAAAA,QAAAA,aAAAA,IAAAA,GAAAA,CAAAA,EAAAA,OAAAA,CAAAA,WAAAA,WAAAA,UAAAA,WAAAA,EAAAA;AACd,YAAA,kBAAA,SAAA,GAAA;AACF,gBAAA,EAAA,IAAA;QACF;MAEA;IACF,CAAA;AACF,WAAA;;;;;ADrMA,IAAAI,gBAAMC;IAEJ,qBAAA;EACA;EACD;EAMD;;AAEE,IAAMC,kBAAWC,CAAWC,EAAAA,MAAAA,SAAAA,UAAAA,cAAAA,IAAAA,MAAAA;AAC5B,QAAMC,EAAAA,EAAAA,IAAKC,eAAgBC,KAAAA,EAAAA;AAC3B,QAAM,WAAEC,WAAiBC,eAAaC;AAEtC,QAAA,KAAA,IAAA,YAAA,QAAA;AACA,QAAA,EAAA,aAAA,IAAA,aAAA,YAAA;QACyFR,QAAAA,QAAAA,MAAAA,YAAAA,IAAAA,aAAAA,UAAAA,QAAAA,GAAAA;IAAS;IAElG;EACA,CAAA;QACES,CAAAA,aAAUN,cAAAA,IAAAA,SAAAA,CAAAA,CAAAA;QAEV,oBAAoBO,YAAAA,YAAAA;AACpB,IAAAD,WAAK,IAAME,QAAQN,EAAAA,YAAUO,YAAa,GAAAd,eAAA,GAAA,IAAA,GAAA,QAAA,GAAA,CAAA,MAAA,EAAA,EAAA,CAAA;UACxC,UAASe,IAAI,aAAc;eACzB,QAASC,UAAQC,SAAQ,CAAA,GAAA;eACvB,SAAMD,SAASH;YACf,KAAA,QAAY,QAAQ;AACpB,gBAAIK,SAAQ,KAAA,OAAA,OAAA;gBACV,EAAA,MAAMC,OAAMC,IAAMC,QAAOH,MAAQC,MAAG;cACpC,QAAMG;AACN,kBAAKA,MAAO,MAAA,OAAA,MAAA,EAAA;kBACVA,SAAQC,KAAM,OAAG;yBAAmClB;AAAG,oBAAA,EAAA,KAAA,IAAA,MAAA,UAAA,iBAAA;gBACvD;;+BAAuCc,MAAAA,KAAAA;gBAAI,OAAA;kBAAGI;gBAAK;gBAC/CC;;kBAEF,OAAO,UAAA,CAAA,QAAA;sBACHF,IAAAA,IAAQG,MAAIC,KAAKC,CAAAA,OAAAA,GAAAA,OAAAA,KAAAA,EAAAA;oBACnBC,GAAEC;AACJ,oBAAA,QAAA,IAAA,KAAA,QAAA;AACF,oBAAA,OAAA;gBACK;cACLvB,CAAAA;;AAEA,kBAAA,OAAAgB,QAAA,CAAAA,WAAA;AACF,gBAAAA,OAAA,MAAA,MAAA;cACF,CAAA;YACF;UAEIT;;YAEF,KAAA,QAAMiB,KAAQV,OAAMW,QAAQT;AAC5B,gBAAMU,SAAAA,IAAU,YAAc,KAACF,OAAU,MAAA;AACzC,gBAAMG,QAAAA,MAAYD,QAASE,OAAKC,MAAQA,GAAIC;AAC5CC,gBAAAA,UAAgBC,MAAAA,GAAU,MAAA,KAAA,EAAA,IAAA;4BAAS,SAAA,IAAA,CAAA,QAAA,IAAA,EAAA;yBAAQT,CAAAA,UAAQI;YAAU,GAAA;YAC/D,CAAA,KAAA,IAAA,GAAA;UACF,EAAA;QACF;MACC;IAAC5B;;IAAciB;IAAM;IAExB;EACA,CAAA;QAIIX,CAAAA,eAAUW,gBAAAA,IAAAA,SAAAA,CAAAA,CAAAA;QAEV,oBACEf,iBACU,IAACM,SAAcE,CAAAA,GAAS,kBAC/BmB,aAAcrB;AAGnB,IAAAF,WAAK,OAAM4B,QAAUC,EAAAA,YAAS,YAAA,GAAAxC,eAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,SAAA,EAAA,EAAA,CAAA;UAC5B,UAAOyC,UAAU,MAAA,OAAA,CAAA,SAAA,KAAA,SAAA,QAAA,EAAA,IAAA,CAAA,SAAA,KAAA,MAAA,EAAA,OAAA,aAAA,KAAA,CAAA;eACfF,UAAAA,SAAAA;aACAG,UAAO;;eAAqBpB;UAAwB,GAAA;UACpDqB,GAAAA,MAAWC,gBACTC;;8BAEUC,iBAAMF,CAAAA,UAAAA;UAChB,GAAA;UACJ,CAAA,OAAA,GAAA,GAAA;QACF,EAAA;MAEF,CAAA;IAACrC;MAAUe;IAAOyB;IAAY;IAGhC;EACA,CAAA;QAEE,gBAAaC,YAAAA,YAAAA;AAEb,UAAMC,OAAAA,SAAAA;AACL,UAAA,kBAAA;AAAC3B,UAAAA,kBAAAA;;IAA0B2B;IAAkB;IAEhD;;QAGI,kBAAa1C,YAAe2C,CAAAA,QAAWrC,WAASA;AAChD,IAAAF,WAAMwC,UAAK5C,QAAe2C,EAAAA,YAAWrC,YAAcuB,GAAEpC,eAAYoC,GAAE,KAAA,GAAA,QAAA,GAAA,CAAA,YAAA,EAAA,EAAA,CAAA;AACnE,UAAIgB,OAAQ,SAAQD,MAAM,UAAM,CAAA,SAAA,KAAA,OAAA,OAAA,EAAA;UAC9B7C,KAAIkB,SAAOjB,MAAWA,UAAAA,CAAAA,SAAAA,KAAAA,OAAAA,OAAAA,EAAAA;gBACpB,QAAMM,MAAON,MAASO;UACtB,OAAID,UAAM,CAAAN,cAAA;cACRA,OAASO,UAAMuC,MAAOF,OAAOtC,MAAAA,CAAAA,EAAAA,CAAAA;AAC/B,YAAA,MAAA;AACF,UAAAN,UAAA,MAAA,OAAA,IAAA,GAAA,IAAA;QACF;MAEF,CAAA;IAACA;KAAS;IAGZ;;QAGI,mBAA2C,YAAA,OAAA,MAAA,UAAA;eAAM+C,UAAOC,QAAU,EAAA,YAAA,YAAA,GAAAvD,eAAA,GAAA,KAAA,GAAA,QAAA,GAAA,CAAA,YAAA,EAAA,EAAA,CAAA;UAAIe,OAAAA;MAAK,IAAA,OAAA,WAAA;MAC3E;;YAEE,MAAK;MACL,KAAK;WAAS;;AAGd,aAAA,SAAA,IAAA,KAAA,KAAA,KAAA,CAAA;AAEK;MAAU;;YAGX,IAAA;gBAEI,UAAYT,MAAIkD,GAAAA,MAAQC,MAAAA,OAAc,OAAA,KAAA,UAAA,SAAA,CAAA,CAAA,EAAA,IAAA;gBACtC,aAAeC,QAAAA,OAAazD,CAAAA,cAAAA;AAE7BiC,kBAAKuB,MAAAA,IAAchC,QAAQ,SAACgC,EAAAA;AAC/B5C,mBAAW,QAAOa,UAAaA,mBAAK,SAAA,GAAA;iBAAEiC,CAAAA,cAAc,IAAA,KAAA,SAAA,CAAA;eAAIC,SAAAA,IAAAA,KAAAA,QAAAA,KAAAA;YAAW,cAAA;YACrE;UACA,CAAA,CAAA;QACF;AACF;MAEMC;IACNvD;UACEC,MAAAA,QAAe8C,SAAOQ,MAAQhD,UAAAA,CAAAA,UAAAA,MAAAA,OAAAA,KAAAA,IAAAA,SAAAA,MAAAA;AAChC,QAAA,OAAA,UAAA,CAAAN,cAAA;AAEF,MAAAA,UAAA,MAAA,OAAA,KAAA,GAAA,IAAA;IAACF,CAAAA;;IAAa;IAGhB;;QAGI,mBAAqBS,YAAMoC,CAAAA,OAAWrC;AACtC,IAAAF,WAAIkD,UAAY,QAAA,EAAA,YAAA,YAAA,GAAA7D,eAAA,GAAA,KAAA,GAAA,QAAA,GAAA,CAAA,YAAA,EAAA,EAAA,CAAA;UACdM,MAAIkB,SAAOjB,MAAWA,UAAAA,CAAAA,SAAAA,KAAAA,OAAAA,EAAAA;gBACpBA,IAAAA;AACF,UAAA,OAAA,UAAA,CAAAA,cAAA;AACF,QAAAA,UAAA,MAAA,OAAA,KAAA,CAAA;MAEF,CAAA;IAACA;KAAS;IAGZ;;SACoC,sBAAA,cAAA,MAAA,MAAA;;IACjBuD,WAAAA;KACb,sBAAA,cAACC,MAAAA,SAAY;IAACC,SAAAA;KACZ,sBAAA,cAACC,QAAAA,MAAaC;IACUJ,UAAAA,CAAAA;KACpB,sBAAA,cAACK,aAAAA,MAAAA,MAAAA,sBAAAA,cAAAA,aAAAA,SAAAA;IAAWC,SAAK;KAAoBC,sBAAAA,cAAAA,YAAAA;IAASC,MAAAA;;IAElCC,OAAAA,EAAAA,4BAAcC;OAE9B,sBAAA,cAACT,cAAQI;IACPC,cAAK;OACLC,sBAAAA,cAAAA,QAAAA,YAAAA;IACAC,MAAAA;IACAG,UAAAA;IACAC,OAAAA,EAASC,eAAAA;;IAIAb,SAAAA;QACb,sBAAA,cAACc,MAAAA,SAAAA;IACCvE,SAAIA;KACME,sBAAAA,cAAAA,eAAAA;IACVe;IACAuD;IACAC;IACAC;IACAR;IACAS,aAAAA;;IAKR,cAAA;EAEF,CAAA,CAAA,CAAA;AACA;gBASsEzC,UAAAA,WAAAA,EAAAA,QAAAA,OAAAA,SAAAA,GAAAA;QAAQG,YAAAA;IAAM;IAClF;EACA;QAGEuC,SAAW,OAACC,UAAAA,OAAAA,aAAAA,SAAAA,EAAAA,KAAAA,cAAAA,WAAAA;aACV,QAAMC;eACFA,CAAAA,UAAYC;AAChBzC,YAAAA,QAAeyC,mBAAO,KAAA,EAAA,CAAA;AACxB,MAAAC,KAAA,MAAA,MAAA,SAAA,MAAA,SAAA,MAAA,OAAA,EAAA,YAAA,YAAA,GAAArF,eAAA,GAAA,KAAA,GAAA,KAAA,CAAA;AACAsF,eAAY1C,MAAAA,OAAAA;;IAEZ,WAAA,CAAAA,YAAA;AACF,eAAAA,QAAA,IAAA;IACF;;;",
6
+ "names": ["RegistryContext", "Cause", "Effect", "Exit", "React", "useCallback", "useContext", "useMemo", "useState", "useSpaceCallback", "AgentPrompt", "Blueprint", "Routine", "Operation", "Filter", "Obj", "Query", "Ref", "QueryBuilder", "invariant", "log", "Graph", "DropdownMenu", "IconButton", "Panel", "Toolbar", "useTranslation", "useAttention", "Text", "ViewModel", "isNonNullable", "NotebookMenu", "NotebookStack", "meta", "Atom", "log", "trim", "evalScript", "code", "deps", "sandbox", "console", "undefined", "document", "global", "globalThis", "self", "window", "Array", "Boolean", "Date", "Error", "JSON", "Map", "Math", "Number", "Object", "Promise", "RegExp", "Set", "String", "isFinite", "isNaN", "parseFloat", "parseInt", "sandboxKeys", "keys", "sandboxValues", "values", "fn", "Function", "builtIns", "systemDefinitions", "createSystem", "createVirtualTypeScriptEnvironment", "ts", "invariant", "filename", "target", "ts", "ModuleKind", "moduleResolution", "ModuleResolutionKind", "strict", "esModuleInterop", "skipLibCheck", "forceConsistentCasingInfilenames", "jsx", "JsxEmit", "noLib", "analysis", "length", "env", "createEnvironment", "sourcefilename", "sourceFile", "typeChecker", "assignmentInfo", "references", "results", "languageService", "getProgram", "files", "forEach", "file", "node", "isFunctionDeclaration", "getTypeOfSymbolAtLocation", "signature", "getSignaturesOfType", "name", "type", "parameters", "returnType", "findReferences", "isVariableStatement", "declaration", "symbol", "getSymbolAtLocation", "kind", "value", "initializer", "getTypeAtLocation", "extractParameters", "isStringLiteral", "valueType", "typeString", "isInterfaceDeclaration", "forEachChild", "visit", "typeToString", "localSymbols", "Set", "collectLocalSymbols", "param", "has", "parent", "isDeclaration", "text", "findRefs", "isExpressionStatement", "expr", "SyntaxKind", "EqualsToken", "isIdentifier", "right", "isAssignmentTarget", "isBinaryExpression", "operatorToken", "systemFiles", "fileMap", "allFiles", "system", "createSystem", "__dxlog_file", "_parser", "_expressionsAtom", "_valuesByCellIdAtom", "_valuesByNameAtom", "Atom", "_registry", "_notebook", "expressions", "cellExpressions", "Map", "id", "expr", "valuesByName", "evaluationOrder", "log", "cellId", "name", "cellSource", "rhs", "endsWith", "result", "eval", "valuesByCellId", "error", "source", "parsed", "parseExpression", "acc", "cell", "dependencyGraph", "topologicalSort", "visit", "node", "visited", "has", "deps", "dependencies", "nodes", "buildDependencyGraph", "nameToCellId", "references", "dependencyCellIds", "map", "ref", "graph", "__dxlog_file", "INCLUDE_BLUEPRINTS", "registry", "useContext", "RegistryContext", "db", "Obj", "notebook", "hasAttention", "useAttention", "attendableId", "invariant", "QueryBuilder", "cell", "cells", "type", "source", "target", "filter", "ast", "Query", "select", "graph", "view", "update", "Ref", "make", "newGraph", "c", "name", "query", "fromAst", "objects", "objectIds", "map", "obj", "id", "setQueryValues", "prev", "prompt", "prompts", "runPrompt", "input", "onResult", "result", "setPromptResults", "uri", "queryValues", "evaluate", "handleExecPrompts", "findIndex", "to", "from", "splice", "crypto", "randomUUID", "getMeta", "blueprint", "undefined", "instructions", "blueprints", "idx", "asChild", "Toolbar", "disabled", "DropdownMenu", "Root", "IconButton", "icon", "iconOnly", "label", "onCellInsert", "handleCellInsert", "classNames", "onClick", "handleCompute", "NotebookStack", "env", "promptResults", "onRearrange", "onCellDelete", "onFailure", "cause", "error", "message", "log", "onSuccess"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import "./chunk-J5LGTIGS.mjs";
2
2
 
3
- // src/containers/ScriptContainer/ScriptContainer.tsx
3
+ // src/containers/ScriptArticle/ScriptArticle.tsx
4
4
  import React, { useMemo } from "react";
5
5
  import { Obj } from "@dxos/echo";
6
6
  import { createDocAccessor } from "@dxos/echo-db";
@@ -10,7 +10,7 @@ import { Panel } from "@dxos/react-ui";
10
10
  import { createDataExtensions, listener, editorClassNames } from "@dxos/ui-editor";
11
11
  import { ScriptToolbar, TypescriptEditor } from "#components";
12
12
  import { useDeployState, useToolbarState } from "#hooks";
13
- var ScriptContainer = ({ role, attendableId, subject: script, settings = {
13
+ var ScriptArticle = ({ role, attendableId, subject: script, settings = {
14
14
  editorInputMode: "vscode"
15
15
  }, env }) => {
16
16
  const identity = useIdentity();
@@ -74,6 +74,6 @@ var ScriptContainer = ({ role, attendableId, subject: script, settings = {
74
74
  })));
75
75
  };
76
76
  export {
77
- ScriptContainer as default
77
+ ScriptArticle as default
78
78
  };
79
- //# sourceMappingURL=ScriptContainer-2OPBAXFB.mjs.map
79
+ //# sourceMappingURL=ScriptArticle-UBT27SB6.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/containers/ScriptContainer/ScriptContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { type Script } from '@dxos/compute';\nimport { Obj } from '@dxos/echo';\nimport { createDocAccessor } from '@dxos/echo-db';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Panel } from '@dxos/react-ui';\nimport { createDataExtensions, listener, editorClassNames } from '@dxos/ui-editor';\n\nimport { ScriptToolbar, TypescriptEditor, type TypescriptEditorProps } from '#components';\nimport { useDeployState, useToolbarState } from '#hooks';\nimport { type Settings } from '#types';\n\nexport type ScriptEditorProps = AppSurface.ObjectArticleProps<\n Script.Script,\n {\n settings?: Settings.Settings;\n } & Pick<TypescriptEditorProps, 'env'>\n>;\n\nexport const ScriptContainer = ({\n role,\n attendableId,\n subject: script,\n settings = { editorInputMode: 'vscode' },\n env,\n}: ScriptEditorProps) => {\n const identity = useIdentity();\n const space = getSpace(script);\n const state = useToolbarState();\n useDeployState({ script, state });\n\n const extensions = useMemo(() => {\n if (!script.source.target) {\n return [];\n }\n\n return [\n createDataExtensions({\n id: script.id,\n text: createDocAccessor(script.source.target, ['content']),\n messenger: space,\n identity,\n }),\n listener({\n onChange: ({ text }) => {\n if (script.source.target?.content !== text) {\n Obj.update(script, (script) => {\n script.changed = true;\n });\n }\n },\n }),\n ];\n }, [identity, space, script, script.source.target]);\n\n if (!extensions.length) {\n return null;\n }\n\n return (\n <Panel.Root role={role}>\n <Panel.Toolbar asChild>\n <ScriptToolbar script={script} attendableId={attendableId} state={state} role={role} />\n </Panel.Toolbar>\n <Panel.Content asChild>\n <TypescriptEditor\n classNames={editorClassNames(role)}\n id={script.id}\n env={env}\n initialValue={script.source?.target?.content}\n extensions={extensions}\n inputMode={settings.editorInputMode}\n toolbar\n />\n </Panel.Content>\n </Panel.Root>\n );\n};\n"],
5
- "mappings": ";;;AAIA,OAAOA,SAASC,eAAe;AAI/B,SAASC,WAAW;AACpB,SAASC,yBAAyB;AAClC,SAASC,gBAAgB;AACzB,SAASC,mBAAmB;AAC5B,SAASC,aAAa;AACtB,SAASC,sBAAsBC,UAAUC,wBAAwB;AAEjE,SAASC,eAAeC,wBAAoD;AAC5E,SAASC,gBAAgBC,uBAAuB;AAUzC,IAAMC,kBAAkB,CAAC,EAC9BC,MACAC,cACAC,SAASC,QACTC,WAAW;EAAEC,iBAAiB;AAAS,GACvCC,IAAG,MACe;AAClB,QAAMC,WAAWjB,YAAAA;AACjB,QAAMkB,QAAQnB,SAASc,MAAAA;AACvB,QAAMM,QAAQX,gBAAAA;AACdD,iBAAe;IAAEM;IAAQM;EAAM,CAAA;AAE/B,QAAMC,aAAaxB,QAAQ,MAAA;AACzB,QAAI,CAACiB,OAAOQ,OAAOC,QAAQ;AACzB,aAAO,CAAA;IACT;AAEA,WAAO;MACLpB,qBAAqB;QACnBqB,IAAIV,OAAOU;QACXC,MAAM1B,kBAAkBe,OAAOQ,OAAOC,QAAQ;UAAC;SAAU;QACzDG,WAAWP;QACXD;MACF,CAAA;MACAd,SAAS;QACPuB,UAAU,CAAC,EAAEF,KAAI,MAAE;AACjB,cAAIX,OAAOQ,OAAOC,QAAQK,YAAYH,MAAM;AAC1C3B,gBAAI+B,OAAOf,QAAQ,CAACA,YAAAA;AAClBA,cAAAA,QAAOgB,UAAU;YACnB,CAAA;UACF;QACF;MACF,CAAA;;EAEJ,GAAG;IAACZ;IAAUC;IAAOL;IAAQA,OAAOQ,OAAOC;GAAO;AAElD,MAAI,CAACF,WAAWU,QAAQ;AACtB,WAAO;EACT;AAEA,SACE,sBAAA,cAAC7B,MAAM8B,MAAI;IAACrB;KACV,sBAAA,cAACT,MAAM+B,SAAO;IAACC,SAAAA;KACb,sBAAA,cAAC5B,eAAAA;IAAcQ;IAAgBF;IAA4BQ;IAAcT;OAE3E,sBAAA,cAACT,MAAMiC,SAAO;IAACD,SAAAA;KACb,sBAAA,cAAC3B,kBAAAA;IACC6B,YAAY/B,iBAAiBM,IAAAA;IAC7Ba,IAAIV,OAAOU;IACXP;IACAoB,cAAcvB,OAAOQ,QAAQC,QAAQK;IACrCP;IACAiB,WAAWvB,SAASC;IACpBuB,SAAAA;;AAKV;",
6
- "names": ["React", "useMemo", "Obj", "createDocAccessor", "getSpace", "useIdentity", "Panel", "createDataExtensions", "listener", "editorClassNames", "ScriptToolbar", "TypescriptEditor", "useDeployState", "useToolbarState", "ScriptContainer", "role", "attendableId", "subject", "script", "settings", "editorInputMode", "env", "identity", "space", "state", "extensions", "source", "target", "id", "text", "messenger", "onChange", "content", "update", "changed", "length", "Root", "Toolbar", "asChild", "Content", "classNames", "initialValue", "inputMode", "toolbar"]
3
+ "sources": ["../../../src/containers/ScriptArticle/ScriptArticle.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { type Script } from '@dxos/compute';\nimport { Obj } from '@dxos/echo';\nimport { createDocAccessor } from '@dxos/echo-db';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Panel } from '@dxos/react-ui';\nimport { createDataExtensions, listener, editorClassNames } from '@dxos/ui-editor';\n\nimport { ScriptToolbar, TypescriptEditor, type TypescriptEditorProps } from '#components';\nimport { useDeployState, useToolbarState } from '#hooks';\nimport { type Settings } from '#types';\n\nexport type ScriptEditorProps = AppSurface.ObjectArticleProps<\n Script.Script,\n {\n settings?: Settings.Settings;\n } & Pick<TypescriptEditorProps, 'env'>\n>;\n\nexport const ScriptArticle = ({\n role,\n attendableId,\n subject: script,\n settings = { editorInputMode: 'vscode' },\n env,\n}: ScriptEditorProps) => {\n const identity = useIdentity();\n const space = getSpace(script);\n const state = useToolbarState();\n useDeployState({ script, state });\n\n const extensions = useMemo(() => {\n if (!script.source.target) {\n return [];\n }\n\n return [\n createDataExtensions({\n id: script.id,\n text: createDocAccessor(script.source.target, ['content']),\n messenger: space,\n identity,\n }),\n listener({\n onChange: ({ text }) => {\n if (script.source.target?.content !== text) {\n Obj.update(script, (script) => {\n script.changed = true;\n });\n }\n },\n }),\n ];\n }, [identity, space, script, script.source.target]);\n\n if (!extensions.length) {\n return null;\n }\n\n return (\n <Panel.Root role={role}>\n <Panel.Toolbar asChild>\n <ScriptToolbar script={script} attendableId={attendableId} state={state} role={role} />\n </Panel.Toolbar>\n <Panel.Content asChild>\n <TypescriptEditor\n classNames={editorClassNames(role)}\n id={script.id}\n env={env}\n initialValue={script.source?.target?.content}\n extensions={extensions}\n inputMode={settings.editorInputMode}\n toolbar\n />\n </Panel.Content>\n </Panel.Root>\n );\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,eAAe;AAI/B,SAASC,WAAW;AACpB,SAASC,yBAAyB;AAClC,SAASC,gBAAgB;AACzB,SAASC,mBAAmB;AAC5B,SAASC,aAAa;AACtB,SAASC,sBAAsBC,UAAUC,wBAAwB;AAEjE,SAASC,eAAeC,wBAAoD;AAC5E,SAASC,gBAAgBC,uBAAuB;AAUzC,IAAMC,gBAAgB,CAAC,EAC5BC,MACAC,cACAC,SAASC,QACTC,WAAW;EAAEC,iBAAiB;AAAS,GACvCC,IAAG,MACe;AAClB,QAAMC,WAAWjB,YAAAA;AACjB,QAAMkB,QAAQnB,SAASc,MAAAA;AACvB,QAAMM,QAAQX,gBAAAA;AACdD,iBAAe;IAAEM;IAAQM;EAAM,CAAA;AAE/B,QAAMC,aAAaxB,QAAQ,MAAA;AACzB,QAAI,CAACiB,OAAOQ,OAAOC,QAAQ;AACzB,aAAO,CAAA;IACT;AAEA,WAAO;MACLpB,qBAAqB;QACnBqB,IAAIV,OAAOU;QACXC,MAAM1B,kBAAkBe,OAAOQ,OAAOC,QAAQ;UAAC;SAAU;QACzDG,WAAWP;QACXD;MACF,CAAA;MACAd,SAAS;QACPuB,UAAU,CAAC,EAAEF,KAAI,MAAE;AACjB,cAAIX,OAAOQ,OAAOC,QAAQK,YAAYH,MAAM;AAC1C3B,gBAAI+B,OAAOf,QAAQ,CAACA,YAAAA;AAClBA,cAAAA,QAAOgB,UAAU;YACnB,CAAA;UACF;QACF;MACF,CAAA;;EAEJ,GAAG;IAACZ;IAAUC;IAAOL;IAAQA,OAAOQ,OAAOC;GAAO;AAElD,MAAI,CAACF,WAAWU,QAAQ;AACtB,WAAO;EACT;AAEA,SACE,sBAAA,cAAC7B,MAAM8B,MAAI;IAACrB;KACV,sBAAA,cAACT,MAAM+B,SAAO;IAACC,SAAAA;KACb,sBAAA,cAAC5B,eAAAA;IAAcQ;IAAgBF;IAA4BQ;IAAcT;OAE3E,sBAAA,cAACT,MAAMiC,SAAO;IAACD,SAAAA;KACb,sBAAA,cAAC3B,kBAAAA;IACC6B,YAAY/B,iBAAiBM,IAAAA;IAC7Ba,IAAIV,OAAOU;IACXP;IACAoB,cAAcvB,OAAOQ,QAAQC,QAAQK;IACrCP;IACAiB,WAAWvB,SAASC;IACpBuB,SAAAA;;AAKV;",
6
+ "names": ["React", "useMemo", "Obj", "createDocAccessor", "getSpace", "useIdentity", "Panel", "createDataExtensions", "listener", "editorClassNames", "ScriptToolbar", "TypescriptEditor", "useDeployState", "useToolbarState", "ScriptArticle", "role", "attendableId", "subject", "script", "settings", "editorInputMode", "env", "identity", "space", "state", "extensions", "source", "target", "id", "text", "messenger", "onChange", "content", "update", "changed", "length", "Root", "Toolbar", "asChild", "Content", "classNames", "initialValue", "inputMode", "toolbar"]
7
7
  }
@@ -8,6 +8,11 @@ import { AppGraphBuilder, BlueprintDefinition, Compiler, CreateObject, Operation
8
8
  import { meta } from "#meta";
9
9
  import { translations } from "#translations";
10
10
  import { ScriptEvents } from "#types";
11
+
12
+ // raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/PLUGIN.mdl?raw
13
+ var PLUGIN_default = '---\nid: org.dxos.plugin.script\nname: ScriptPlugin\nversion: 0.1.0\n---\n\nA scripting plugin for `DXOS` Composer that lets users write, deploy, and run custom TypeScript functions as\nECHO objects inside their spaces.\nScripts execute on the Cloudflare Workers-based EDGE runtime and can call DXOS SDK packages, Effect-TS,\nand a curated set of third-party libraries.\nAn AI assistant blueprint wires CRUD, deploy, invoke, and inspection operations as tools so an agent can\nscaffold, iterate, and test scripts entirely within a chat session.\n\n## Extensions\n\nThe following extension dialects are used in this document.\nEach extension is defined in the Appendix or resolved via its URI.\n\n| Term | URI |\n|-------------|--------------------------------|\n| `type` | `org.dxos.mdl.type@1.0` |\n| `feat` | `org.dxos.mdl.feat@1.0` |\n| `test` | `org.dxos.mdl.test@1.0` |\n| `component` | `org.dxos.mdl.component@1.0` |\n| `op` | `org.dxos.mdl.op@1.0` |\n\n## Types\n\n```mdl\ntype Script\n desc: |\n Root ECHO object (typename from @dxos/compute Script.Script).\n Represents a single deployable TypeScript function.\n fields:\n name?: string\n source: string # TypeScript source, must follow Operation pattern\n description?: string\n```\n\n```mdl\ntype Notebook\n desc: |\n Root ECHO object for a multi-cell notebook view.\n Each cell is a Script; the Notebook provides a sequential execution surface.\n fields:\n name?: string\n```\n\n```mdl\ntype Settings\n desc: Plugin-scoped settings atom. Persisted across sessions.\n fields:\n editorInputMode?: EditorInputMode # default, vim, or emacs keybindings\n```\n\n```mdl\ntype InvocationSpan\n desc: A single function invocation record from the EDGE trace feed.\n fields:\n id: string\n timestamp: number # epoch ms\n duration: number # ms\n outcome: success | failure | pending\n input: object\n error?: object\n```\n\n```mdl\ntype DeployedFunction\n desc: Metadata about a function already deployed to the EDGE runtime.\n fields:\n key?: string # unique key; pass to InstallFunction\n name: string\n version: string\n description?: string\n updated?: string # ISO timestamp\n```\n\n## Components\n\n```mdl\ncomponent ScriptArticle\n desc: |\n Primary editor surface for a Script object. Rendered for the Article and\n Section roles. Shows a TypeScript CodeMirror editor with syntax highlight,\n lint, and completion. Companion panels (Execute and Logs) are available\n via the app graph for running and inspecting the script.\n props:\n role: string\n subject: Script\n attendableId?: string\n settings?: Settings\n env?: CompilerEnvironment\n layout: |\n \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 ScriptToolbar (run, deploy, \u2026) \u2502\n \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 TypescriptEditor (CodeMirror) \u2502\n \u2502 \u2502\n \u2502 // script source \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n```mdl\ncomponent NotebookArticle\n desc: |\n Multi-cell notebook surface for a Notebook object. Each cell renders a\n ScriptArticle in Section role. Cells can be added, removed, and reordered.\n props:\n role: string\n subject: Notebook\n attendableId?: string\n env?: CompilerEnvironment\n```\n\n```mdl\ncomponent TestContainer\n desc: |\n Execute companion panel. Renders a form driven by the script\'s Operation\n input schema; submits the form to invoke the script and shows the response.\n props:\n script: Script\n role: string\n```\n\n```mdl\ncomponent DeploymentDialog\n desc: |\n Dialog for deploying or redeploying a Script to the EDGE runtime.\n Shows current deployment status and lets the user trigger a new deployment.\n props:\n script: Script\n```\n\n```mdl\ncomponent ScriptPluginSettings\n desc: Plugin settings panel; exposes editor keybinding mode selector.\n props:\n settings: Settings\n onSettingsChange: (settings: Settings) \u2192 void\n onAuthenticate: () \u2192 Promise<void>\n```\n\n## Operations\n\nBlueprint operations (called by the Script assistant via its tool set).\n\n```mdl\nop create\n desc: |\n Creates a new Script ECHO object with the given name and TypeScript source,\n and adds it to the space. Optionally seeds from a built-in template or a\n GitHub Gist URL. Returns a function reference ID.\n input:\n name: string\n source?: string\n templateId?: string\n output: { function: string }\n effects: [echo:write]\n note: Operation key `org.dxos.function.script.create`.\n```\n\n```mdl\nop read\n desc: Reads the name, source code, and description of an existing Script.\n input:\n function: Ref<Script>\n output: { name?: string, source: string, description?: string }\n effects: [echo:read]\n note: Operation key `org.dxos.function.script.read`.\n```\n\n```mdl\nop update\n desc: |\n Applies one or more string edits (find/replace pairs) to a Script\'s source\n and optionally updates its name and description.\n input:\n function: Ref<Script>\n name?: string\n description?: string\n edits?: { oldString: string, newString: string, replaceAll?: boolean }[]\n output: { function: string }\n effects: [echo:read, echo:write]\n note: Operation key `org.dxos.function.script.update`.\n```\n\n```mdl\nop delete\n desc: Permanently removes a Script and its source from the space.\n input:\n function: Ref<Script>\n output: void\n effects: [echo:read, echo:write]\n note: Operation key `org.dxos.function.script.delete`.\n```\n\n```mdl\nop deploy\n desc: |\n Compiles and deploys a Script to the EDGE (Cloudflare Workers) runtime.\n The source must export a single Operation handler as default.\n Returns the deployed function ID and optional public URL.\n input:\n function: Ref<Script>\n output: { function: string, functionUrl?: string }\n effects: [echo:read, http]\n errors:\n CompileError: TypeScript source fails to compile\n DeploymentFailed: EDGE runtime rejected the deployment\n note: Operation key `org.dxos.function.script.deploy`.\n```\n\n```mdl\nop invoke\n desc: Calls a deployed EDGE function with an optional JSON payload.\n input:\n function: Ref<Script>\n payload?: unknown\n output: { response: unknown }\n effects: [http]\n errors:\n NotDeployed: function has not been deployed\n InvocationError: function threw at runtime\n note: Operation key `org.dxos.function.script.invoke`.\n```\n\n```mdl\nop inspectInvocations\n desc: |\n Queries the EDGE invocation trace feed for a function and returns\n recent invocation spans (id, timestamp, duration, outcome, input, error).\n input:\n function: Ref<Script>\n limit?: number # default 20\n output: { invocations: InvocationSpan[], total: number }\n effects: [echo:read]\n note: Operation key `org.dxos.function.script.inspect-invocations`.\n```\n\n```mdl\nop queryDeployedFunctions\n desc: Lists all functions currently deployed to the EDGE runtime.\n input:\n (none)\n output: { functions: DeployedFunction[] }\n effects: [http]\n note: Operation key `org.dxos.function.script.query-deployed`.\n```\n\n```mdl\nop installFunction\n desc: |\n Installs a globally-deployed EDGE function into the current space by key.\n Creates a Script ECHO object backed by the remote function.\n The returned function ID can be passed directly to op:invoke.\n input:\n key: string\n output: { function: string, name: string, version: string }\n effects: [echo:write, http]\n note: Operation key `org.dxos.function.script.install`.\n```\n\nUI-facing operation (creates Script via the navtree / "create object" flow).\n\n```mdl\nop createScript\n desc: Creates a new Script ECHO object via the Composer create-object flow.\n input:\n name?: string\n gistUrl?: string\n initialTemplateId?: string\n db: Database\n output: { object: Script }\n effects: [echo:write]\n note: Operation key `org.dxos.plugin.script.operation.create-script`.\n```\n\n## Features\n\n```mdl\nfeat F-1: Script ECHO Object\n\n req F-1.1: Script objects are registered via `addSchemaModule` and visible in space object lists.\n req F-1.2: Script objects can be created from the navtree "+" menu.\n req F-1.3:\n when: user creates a Script without a template\n then: source is seeded from the default template\n req F-1.4:\n when: user provides a GitHub Gist URL\n then: gist content is fetched and used as initial source\n```\n\n```mdl\nfeat F-2: Script Editor\n\n req F-2.1: ScriptArticle renders a TypeScript-aware CodeMirror editor for the Article role.\n req F-2.2: Editor keybinding mode (default/vim/emacs) is configurable via plugin settings.\n req F-2.3: Changes to source are persisted to the Script ECHO object reactively.\n req F-2.4:\n when: script object changes externally (peer edit)\n then: editor content updates without losing cursor position if possible\n```\n\n```mdl\nfeat F-3: Deploy to EDGE\n\n req F-3.1: A Deploy button in the ScriptToolbar opens the DeploymentDialog.\n req F-3.2:\n when: user confirms deployment\n then: op:deploy is called; script compiled and sent to EDGE runtime\n req F-3.3:\n when: compilation fails\n then: error messages are surfaced to the user; no deployment occurs\n req F-3.4:\n when: deployment succeeds\n then: dialog shows the function URL (if available)\n```\n\n```mdl\nfeat F-4: Execute Companion\n\n req F-4.1: An "Execute" companion node is added to every Script in the app graph.\n req F-4.2: TestContainer renders a form derived from the script\'s Operation input schema.\n req F-4.3:\n when: user submits the form\n then: op:invoke is called with the form payload; response displayed\n req F-4.4: A "Logs" companion node shows the invocation trace via InvocationTraceContainer.\n```\n\n```mdl\nfeat F-5: Script Blueprint\n\n req F-5.1: A blueprint with key `org.dxos.blueprint.script` is contributed via `addBlueprintDefinitionModule`.\n req F-5.2: Blueprint tool set includes: create, read, update, delete, deploy, invoke,\n inspectInvocations, queryDeployedFunctions, installFunction.\n req F-5.3: System instructions describe the EDGE Operation pattern, required export format,\n and available packages.\n req F-5.4: Blueprint is agent-enabled; the assistant can activate it autonomously.\n```\n\n```mdl\nfeat F-6: Notebook\n\n req F-6.1: Notebook objects are registered and can be created from the navtree.\n req F-6.2: NotebookArticle renders each linked Script as a sequential cell.\n req F-6.3: Cells can be added and removed independently.\n```\n\n```mdl\nfeat F-7: Plugin Settings\n\n req F-7.1: ScriptPluginSettings is rendered via the app settings surface.\n req F-7.2: Editor input mode is persisted in the Settings atom.\n req F-7.3: An Authenticate button lets the user write an access credential to HALO.\n```\n\n## Acceptance\n\n```mdl\ntest T-1: Create script from default template\n given: a space is open and plugin-script is loaded\n when: user creates a new Script without template selection\n then:\n - a Script object appears in the space\n - its source contains the default template code\n - ScriptArticle renders the source in the editor\n```\n\n```mdl\ntest T-2: Create script from Gist\n given: a public GitHub Gist URL is known\n when: user creates a Script with the Gist URL\n then:\n - gist content is fetched and stored as the script source\n - editor shows the fetched content\n```\n\n```mdl\ntest T-3: Edit and persist source\n given: a Script is open in ScriptArticle\n when: user edits the source\n then:\n - the Script ECHO object\'s source field is updated\n - closing and reopening the article shows the same content\n```\n\n```mdl\ntest T-4: Deploy script\n given: a Script with valid source following the Operation pattern\n when: user opens DeploymentDialog and confirms\n then:\n - op:deploy succeeds\n - dialog shows success state and function URL\n```\n\n```mdl\ntest T-5: Invoke deployed function\n given: a Script is deployed\n when: user opens the Execute companion and submits a payload\n then:\n - op:invoke is called with the payload\n - response is displayed in TestContainer\n```\n\n```mdl\ntest T-6: Inspect invocations\n given: a Script has been invoked at least once\n when: user opens the Logs companion\n then:\n - InvocationTraceContainer shows at least one invocation span\n - span includes timestamp, duration, and outcome\n```\n\n```mdl\ntest T-7: Blueprint tools resolve\n given: composer-app with plugin-script loaded\n when: AppCapabilities.BlueprintDefinition is queried for `org.dxos.blueprint.script`\n then:\n - blueprint is present\n - tool set includes create, read, update, delete, deploy, invoke,\n inspectInvocations, queryDeployedFunctions, and installFunction\n```\n\n```mdl\ntest T-8: Agent creates and deploys script\n given: a Script assistant session is active\n when: agent calls op:create with a name and source\n then: a Script object is created in the space\n when: agent calls op:deploy\n then: function is deployed; op returns a function ID\n when: agent calls op:invoke with a payload\n then: response is returned without error\n```\n\n```mdl\ntest T-9: QueryDeployedFunctions and install\n given: at least one function is deployed to the EDGE runtime\n when: op:queryDeployedFunctions is called\n then:\n - result contains at least one DeployedFunction entry\n when: op:installFunction is called with that entry\'s key\n then:\n - a new Script ECHO object appears in the space\n - op returns the function ID, name, and version\n```\n\n---\n\n## Appendix: Extension Definitions\n\nExtension block types used in this document are defined below using\nthe core `ext` primitive \u2014 the only construct the base language provides.\n\n```mdl\next type\n uri: org.dxos.mdl.type@1.0\n desc: A named data structure with typed fields and optional literals.\n fields:\n desc?: Prose\n fields?: FieldMap # name[?]: TypeExpr (# inline comment)\n literals?: UnionList # a | b | c\n extends?: TypeRef[]\n```\n\n```mdl\next feat\n uri: org.dxos.mdl.feat@1.0\n desc: A named feature grouping one or more requirements.\n fields:\n desc?: Prose\n req: RequirementList\n nesting: self # feat blocks may contain feat blocks\n```\n\n```mdl\next test\n uri: org.dxos.mdl.test@1.0\n desc: An acceptance scenario expressed as given / when / then steps.\n fields:\n given?: Step | Step[]\n when?: Step | Step[]\n then: Step | Step[]\n tags?: TagList\n```\n\n```mdl\next component\n uri: org.dxos.mdl.component@1.0\n desc: A UI component with props, internal state, slots, actions, and events.\n fields:\n desc?: Prose\n props?: FieldMap # external inputs (immutable inside component)\n state?: FieldMap # internal reactive state\n slots?: FieldMap # named ReactNode injection points\n actions?: ActionMap # methods the component exposes or handles\n emits?: EventMap # events the component raises to its parent\n layout?: CodeBlock # ASCII sketch of visual structure (non-normative)\n```\n\n```mdl\next op\n uri: org.dxos.mdl.op@1.0\n desc: |\n A named operation with typed inputs, outputs, and declared errors.\n Pure ops have no effects or requires. Effectful ops declare both.\n fields:\n desc?: Prose\n input?: FieldMap # named input parameters\n output?: TypeExpr # return type\n errors?: ErrorMap # name: Prose (when this error occurs)\n effects?: EffectList # echo:read | echo:write | http | fs | ...\n requires?: ServiceList # injected service dependencies\n note?: Prose # implementation guidance (non-normative)\n```\n';
14
+
15
+ // src/ScriptPlugin.tsx
11
16
  var ScriptPlugin = Plugin.define(meta).pipe(AppPlugin.addAppGraphModule({
12
17
  activate: AppGraphBuilder
13
18
  }), AppPlugin.addBlueprintDefinitionModule({
@@ -30,6 +35,13 @@ var ScriptPlugin = Plugin.define(meta).pipe(AppPlugin.addAppGraphModule({
30
35
  }), Plugin.addModule({
31
36
  activatesOn: ScriptEvents.SetupCompiler,
32
37
  activate: Compiler
38
+ }), AppPlugin.addPluginAssetModule({
39
+ asset: {
40
+ pluginId: meta.id,
41
+ path: "PLUGIN.mdl",
42
+ content: PLUGIN_default,
43
+ mimeType: "application/x-mdl"
44
+ }
33
45
  }), Plugin.make);
34
46
  var ScriptPlugin_default = ScriptPlugin;
35
47
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/ScriptPlugin.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { Script } from '@dxos/compute';\n\nimport {\n AppGraphBuilder,\n BlueprintDefinition,\n Compiler,\n CreateObject,\n OperationHandler,\n ReactSurface,\n ScriptSettings,\n} from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { ScriptEvents } from '#types';\n\nexport const ScriptPlugin = Plugin.define(meta).pipe(\n AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),\n AppPlugin.addBlueprintDefinitionModule({ activate: BlueprintDefinition }),\n AppPlugin.addCreateObjectModule({ activate: CreateObject }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Script.Script] }),\n AppPlugin.addSurfaceModule({ activate: ReactSurface }),\n AppPlugin.addTranslationsModule({ translations }),\n Plugin.addModule({\n activatesOn: AppActivationEvents.SetupSettings,\n activate: ScriptSettings,\n }),\n Plugin.addModule({\n activatesOn: ScriptEvents.SetupCompiler,\n activate: Compiler,\n }),\n Plugin.make,\n);\n\nexport default ScriptPlugin;\n"],
5
- "mappings": ";;;AAIA,SAASA,cAAc;AACvB,SAASC,qBAAqBC,iBAAiB;AAC/C,SAASC,cAAc;AAEvB,SACEC,iBACAC,qBACAC,UACAC,cACAC,kBACAC,cACAC,sBACK;AACP,SAASC,YAAY;AACrB,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAEtB,IAAMC,eAAed,OAAOe,OAAOJ,IAAAA,EAAMK,KAC9Cd,UAAUe,kBAAkB;EAAEC,UAAUd;AAAgB,CAAA,GACxDF,UAAUiB,6BAA6B;EAAED,UAAUb;AAAoB,CAAA,GACvEH,UAAUkB,sBAAsB;EAAEF,UAAUX;AAAa,CAAA,GACzDL,UAAUmB,0BAA0B;EAAEH,UAAUV;AAAiB,CAAA,GACjEN,UAAUoB,gBAAgB;EAAEC,QAAQ;IAACpB,OAAOA;;AAAQ,CAAA,GACpDD,UAAUsB,iBAAiB;EAAEN,UAAUT;AAAa,CAAA,GACpDP,UAAUuB,sBAAsB;EAAEb;AAAa,CAAA,GAC/CZ,OAAO0B,UAAU;EACfC,aAAa1B,oBAAoB2B;EACjCV,UAAUR;AACZ,CAAA,GACAV,OAAO0B,UAAU;EACfC,aAAad,aAAagB;EAC1BX,UAAUZ;AACZ,CAAA,GACAN,OAAO8B,IAAI;AAGb,IAAA,uBAAehB;",
6
- "names": ["Plugin", "AppActivationEvents", "AppPlugin", "Script", "AppGraphBuilder", "BlueprintDefinition", "Compiler", "CreateObject", "OperationHandler", "ReactSurface", "ScriptSettings", "meta", "translations", "ScriptEvents", "ScriptPlugin", "define", "pipe", "addAppGraphModule", "activate", "addBlueprintDefinitionModule", "addCreateObjectModule", "addOperationHandlerModule", "addSchemaModule", "schema", "addSurfaceModule", "addTranslationsModule", "addModule", "activatesOn", "SetupSettings", "SetupCompiler", "make"]
3
+ "sources": ["../../../src/ScriptPlugin.tsx", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-script/PLUGIN.mdl?raw"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { Script } from '@dxos/compute';\n\nimport {\n AppGraphBuilder,\n BlueprintDefinition,\n Compiler,\n CreateObject,\n OperationHandler,\n ReactSurface,\n ScriptSettings,\n} from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { ScriptEvents } from '#types';\n\n// eslint-disable-next-line import/no-relative-packages\nimport pluginSpec from '../PLUGIN.mdl?raw';\n\nexport const ScriptPlugin = Plugin.define(meta).pipe(\n AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),\n AppPlugin.addBlueprintDefinitionModule({ activate: BlueprintDefinition }),\n AppPlugin.addCreateObjectModule({ activate: CreateObject }),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Script.Script] }),\n AppPlugin.addSurfaceModule({ activate: ReactSurface }),\n AppPlugin.addTranslationsModule({ translations }),\n Plugin.addModule({\n activatesOn: AppActivationEvents.SetupSettings,\n activate: ScriptSettings,\n }),\n Plugin.addModule({\n activatesOn: ScriptEvents.SetupCompiler,\n activate: Compiler,\n }),\n AppPlugin.addPluginAssetModule({\n asset: { pluginId: meta.id, path: 'PLUGIN.mdl', content: pluginSpec, mimeType: 'application/x-mdl' },\n }),\n Plugin.make,\n);\n\nexport default ScriptPlugin;\n", "---\nid: org.dxos.plugin.script\nname: ScriptPlugin\nversion: 0.1.0\n---\n\nA scripting plugin for `DXOS` Composer that lets users write, deploy, and run custom TypeScript functions as\nECHO objects inside their spaces.\nScripts execute on the Cloudflare Workers-based EDGE runtime and can call DXOS SDK packages, Effect-TS,\nand a curated set of third-party libraries.\nAn AI assistant blueprint wires CRUD, deploy, invoke, and inspection operations as tools so an agent can\nscaffold, iterate, and test scripts entirely within a chat session.\n\n## Extensions\n\nThe following extension dialects are used in this document.\nEach extension is defined in the Appendix or resolved via its URI.\n\n| Term | URI |\n|-------------|--------------------------------|\n| `type` | `org.dxos.mdl.type@1.0` |\n| `feat` | `org.dxos.mdl.feat@1.0` |\n| `test` | `org.dxos.mdl.test@1.0` |\n| `component` | `org.dxos.mdl.component@1.0` |\n| `op` | `org.dxos.mdl.op@1.0` |\n\n## Types\n\n```mdl\ntype Script\n desc: |\n Root ECHO object (typename from @dxos/compute Script.Script).\n Represents a single deployable TypeScript function.\n fields:\n name?: string\n source: string # TypeScript source, must follow Operation pattern\n description?: string\n```\n\n```mdl\ntype Notebook\n desc: |\n Root ECHO object for a multi-cell notebook view.\n Each cell is a Script; the Notebook provides a sequential execution surface.\n fields:\n name?: string\n```\n\n```mdl\ntype Settings\n desc: Plugin-scoped settings atom. Persisted across sessions.\n fields:\n editorInputMode?: EditorInputMode # default, vim, or emacs keybindings\n```\n\n```mdl\ntype InvocationSpan\n desc: A single function invocation record from the EDGE trace feed.\n fields:\n id: string\n timestamp: number # epoch ms\n duration: number # ms\n outcome: success | failure | pending\n input: object\n error?: object\n```\n\n```mdl\ntype DeployedFunction\n desc: Metadata about a function already deployed to the EDGE runtime.\n fields:\n key?: string # unique key; pass to InstallFunction\n name: string\n version: string\n description?: string\n updated?: string # ISO timestamp\n```\n\n## Components\n\n```mdl\ncomponent ScriptArticle\n desc: |\n Primary editor surface for a Script object. Rendered for the Article and\n Section roles. Shows a TypeScript CodeMirror editor with syntax highlight,\n lint, and completion. Companion panels (Execute and Logs) are available\n via the app graph for running and inspecting the script.\n props:\n role: string\n subject: Script\n attendableId?: string\n settings?: Settings\n env?: CompilerEnvironment\n layout: |\n \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 ScriptToolbar (run, deploy, \u2026) \u2502\n \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 TypescriptEditor (CodeMirror) \u2502\n \u2502 \u2502\n \u2502 // script source \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n```mdl\ncomponent NotebookArticle\n desc: |\n Multi-cell notebook surface for a Notebook object. Each cell renders a\n ScriptArticle in Section role. Cells can be added, removed, and reordered.\n props:\n role: string\n subject: Notebook\n attendableId?: string\n env?: CompilerEnvironment\n```\n\n```mdl\ncomponent TestContainer\n desc: |\n Execute companion panel. Renders a form driven by the script's Operation\n input schema; submits the form to invoke the script and shows the response.\n props:\n script: Script\n role: string\n```\n\n```mdl\ncomponent DeploymentDialog\n desc: |\n Dialog for deploying or redeploying a Script to the EDGE runtime.\n Shows current deployment status and lets the user trigger a new deployment.\n props:\n script: Script\n```\n\n```mdl\ncomponent ScriptPluginSettings\n desc: Plugin settings panel; exposes editor keybinding mode selector.\n props:\n settings: Settings\n onSettingsChange: (settings: Settings) \u2192 void\n onAuthenticate: () \u2192 Promise<void>\n```\n\n## Operations\n\nBlueprint operations (called by the Script assistant via its tool set).\n\n```mdl\nop create\n desc: |\n Creates a new Script ECHO object with the given name and TypeScript source,\n and adds it to the space. Optionally seeds from a built-in template or a\n GitHub Gist URL. Returns a function reference ID.\n input:\n name: string\n source?: string\n templateId?: string\n output: { function: string }\n effects: [echo:write]\n note: Operation key `org.dxos.function.script.create`.\n```\n\n```mdl\nop read\n desc: Reads the name, source code, and description of an existing Script.\n input:\n function: Ref<Script>\n output: { name?: string, source: string, description?: string }\n effects: [echo:read]\n note: Operation key `org.dxos.function.script.read`.\n```\n\n```mdl\nop update\n desc: |\n Applies one or more string edits (find/replace pairs) to a Script's source\n and optionally updates its name and description.\n input:\n function: Ref<Script>\n name?: string\n description?: string\n edits?: { oldString: string, newString: string, replaceAll?: boolean }[]\n output: { function: string }\n effects: [echo:read, echo:write]\n note: Operation key `org.dxos.function.script.update`.\n```\n\n```mdl\nop delete\n desc: Permanently removes a Script and its source from the space.\n input:\n function: Ref<Script>\n output: void\n effects: [echo:read, echo:write]\n note: Operation key `org.dxos.function.script.delete`.\n```\n\n```mdl\nop deploy\n desc: |\n Compiles and deploys a Script to the EDGE (Cloudflare Workers) runtime.\n The source must export a single Operation handler as default.\n Returns the deployed function ID and optional public URL.\n input:\n function: Ref<Script>\n output: { function: string, functionUrl?: string }\n effects: [echo:read, http]\n errors:\n CompileError: TypeScript source fails to compile\n DeploymentFailed: EDGE runtime rejected the deployment\n note: Operation key `org.dxos.function.script.deploy`.\n```\n\n```mdl\nop invoke\n desc: Calls a deployed EDGE function with an optional JSON payload.\n input:\n function: Ref<Script>\n payload?: unknown\n output: { response: unknown }\n effects: [http]\n errors:\n NotDeployed: function has not been deployed\n InvocationError: function threw at runtime\n note: Operation key `org.dxos.function.script.invoke`.\n```\n\n```mdl\nop inspectInvocations\n desc: |\n Queries the EDGE invocation trace feed for a function and returns\n recent invocation spans (id, timestamp, duration, outcome, input, error).\n input:\n function: Ref<Script>\n limit?: number # default 20\n output: { invocations: InvocationSpan[], total: number }\n effects: [echo:read]\n note: Operation key `org.dxos.function.script.inspect-invocations`.\n```\n\n```mdl\nop queryDeployedFunctions\n desc: Lists all functions currently deployed to the EDGE runtime.\n input:\n (none)\n output: { functions: DeployedFunction[] }\n effects: [http]\n note: Operation key `org.dxos.function.script.query-deployed`.\n```\n\n```mdl\nop installFunction\n desc: |\n Installs a globally-deployed EDGE function into the current space by key.\n Creates a Script ECHO object backed by the remote function.\n The returned function ID can be passed directly to op:invoke.\n input:\n key: string\n output: { function: string, name: string, version: string }\n effects: [echo:write, http]\n note: Operation key `org.dxos.function.script.install`.\n```\n\nUI-facing operation (creates Script via the navtree / \"create object\" flow).\n\n```mdl\nop createScript\n desc: Creates a new Script ECHO object via the Composer create-object flow.\n input:\n name?: string\n gistUrl?: string\n initialTemplateId?: string\n db: Database\n output: { object: Script }\n effects: [echo:write]\n note: Operation key `org.dxos.plugin.script.operation.create-script`.\n```\n\n## Features\n\n```mdl\nfeat F-1: Script ECHO Object\n\n req F-1.1: Script objects are registered via `addSchemaModule` and visible in space object lists.\n req F-1.2: Script objects can be created from the navtree \"+\" menu.\n req F-1.3:\n when: user creates a Script without a template\n then: source is seeded from the default template\n req F-1.4:\n when: user provides a GitHub Gist URL\n then: gist content is fetched and used as initial source\n```\n\n```mdl\nfeat F-2: Script Editor\n\n req F-2.1: ScriptArticle renders a TypeScript-aware CodeMirror editor for the Article role.\n req F-2.2: Editor keybinding mode (default/vim/emacs) is configurable via plugin settings.\n req F-2.3: Changes to source are persisted to the Script ECHO object reactively.\n req F-2.4:\n when: script object changes externally (peer edit)\n then: editor content updates without losing cursor position if possible\n```\n\n```mdl\nfeat F-3: Deploy to EDGE\n\n req F-3.1: A Deploy button in the ScriptToolbar opens the DeploymentDialog.\n req F-3.2:\n when: user confirms deployment\n then: op:deploy is called; script compiled and sent to EDGE runtime\n req F-3.3:\n when: compilation fails\n then: error messages are surfaced to the user; no deployment occurs\n req F-3.4:\n when: deployment succeeds\n then: dialog shows the function URL (if available)\n```\n\n```mdl\nfeat F-4: Execute Companion\n\n req F-4.1: An \"Execute\" companion node is added to every Script in the app graph.\n req F-4.2: TestContainer renders a form derived from the script's Operation input schema.\n req F-4.3:\n when: user submits the form\n then: op:invoke is called with the form payload; response displayed\n req F-4.4: A \"Logs\" companion node shows the invocation trace via InvocationTraceContainer.\n```\n\n```mdl\nfeat F-5: Script Blueprint\n\n req F-5.1: A blueprint with key `org.dxos.blueprint.script` is contributed via `addBlueprintDefinitionModule`.\n req F-5.2: Blueprint tool set includes: create, read, update, delete, deploy, invoke,\n inspectInvocations, queryDeployedFunctions, installFunction.\n req F-5.3: System instructions describe the EDGE Operation pattern, required export format,\n and available packages.\n req F-5.4: Blueprint is agent-enabled; the assistant can activate it autonomously.\n```\n\n```mdl\nfeat F-6: Notebook\n\n req F-6.1: Notebook objects are registered and can be created from the navtree.\n req F-6.2: NotebookArticle renders each linked Script as a sequential cell.\n req F-6.3: Cells can be added and removed independently.\n```\n\n```mdl\nfeat F-7: Plugin Settings\n\n req F-7.1: ScriptPluginSettings is rendered via the app settings surface.\n req F-7.2: Editor input mode is persisted in the Settings atom.\n req F-7.3: An Authenticate button lets the user write an access credential to HALO.\n```\n\n## Acceptance\n\n```mdl\ntest T-1: Create script from default template\n given: a space is open and plugin-script is loaded\n when: user creates a new Script without template selection\n then:\n - a Script object appears in the space\n - its source contains the default template code\n - ScriptArticle renders the source in the editor\n```\n\n```mdl\ntest T-2: Create script from Gist\n given: a public GitHub Gist URL is known\n when: user creates a Script with the Gist URL\n then:\n - gist content is fetched and stored as the script source\n - editor shows the fetched content\n```\n\n```mdl\ntest T-3: Edit and persist source\n given: a Script is open in ScriptArticle\n when: user edits the source\n then:\n - the Script ECHO object's source field is updated\n - closing and reopening the article shows the same content\n```\n\n```mdl\ntest T-4: Deploy script\n given: a Script with valid source following the Operation pattern\n when: user opens DeploymentDialog and confirms\n then:\n - op:deploy succeeds\n - dialog shows success state and function URL\n```\n\n```mdl\ntest T-5: Invoke deployed function\n given: a Script is deployed\n when: user opens the Execute companion and submits a payload\n then:\n - op:invoke is called with the payload\n - response is displayed in TestContainer\n```\n\n```mdl\ntest T-6: Inspect invocations\n given: a Script has been invoked at least once\n when: user opens the Logs companion\n then:\n - InvocationTraceContainer shows at least one invocation span\n - span includes timestamp, duration, and outcome\n```\n\n```mdl\ntest T-7: Blueprint tools resolve\n given: composer-app with plugin-script loaded\n when: AppCapabilities.BlueprintDefinition is queried for `org.dxos.blueprint.script`\n then:\n - blueprint is present\n - tool set includes create, read, update, delete, deploy, invoke,\n inspectInvocations, queryDeployedFunctions, and installFunction\n```\n\n```mdl\ntest T-8: Agent creates and deploys script\n given: a Script assistant session is active\n when: agent calls op:create with a name and source\n then: a Script object is created in the space\n when: agent calls op:deploy\n then: function is deployed; op returns a function ID\n when: agent calls op:invoke with a payload\n then: response is returned without error\n```\n\n```mdl\ntest T-9: QueryDeployedFunctions and install\n given: at least one function is deployed to the EDGE runtime\n when: op:queryDeployedFunctions is called\n then:\n - result contains at least one DeployedFunction entry\n when: op:installFunction is called with that entry's key\n then:\n - a new Script ECHO object appears in the space\n - op returns the function ID, name, and version\n```\n\n---\n\n## Appendix: Extension Definitions\n\nExtension block types used in this document are defined below using\nthe core `ext` primitive \u2014 the only construct the base language provides.\n\n```mdl\next type\n uri: org.dxos.mdl.type@1.0\n desc: A named data structure with typed fields and optional literals.\n fields:\n desc?: Prose\n fields?: FieldMap # name[?]: TypeExpr (# inline comment)\n literals?: UnionList # a | b | c\n extends?: TypeRef[]\n```\n\n```mdl\next feat\n uri: org.dxos.mdl.feat@1.0\n desc: A named feature grouping one or more requirements.\n fields:\n desc?: Prose\n req: RequirementList\n nesting: self # feat blocks may contain feat blocks\n```\n\n```mdl\next test\n uri: org.dxos.mdl.test@1.0\n desc: An acceptance scenario expressed as given / when / then steps.\n fields:\n given?: Step | Step[]\n when?: Step | Step[]\n then: Step | Step[]\n tags?: TagList\n```\n\n```mdl\next component\n uri: org.dxos.mdl.component@1.0\n desc: A UI component with props, internal state, slots, actions, and events.\n fields:\n desc?: Prose\n props?: FieldMap # external inputs (immutable inside component)\n state?: FieldMap # internal reactive state\n slots?: FieldMap # named ReactNode injection points\n actions?: ActionMap # methods the component exposes or handles\n emits?: EventMap # events the component raises to its parent\n layout?: CodeBlock # ASCII sketch of visual structure (non-normative)\n```\n\n```mdl\next op\n uri: org.dxos.mdl.op@1.0\n desc: |\n A named operation with typed inputs, outputs, and declared errors.\n Pure ops have no effects or requires. Effectful ops declare both.\n fields:\n desc?: Prose\n input?: FieldMap # named input parameters\n output?: TypeExpr # return type\n errors?: ErrorMap # name: Prose (when this error occurs)\n effects?: EffectList # echo:read | echo:write | http | fs | ...\n requires?: ServiceList # injected service dependencies\n note?: Prose # implementation guidance (non-normative)\n```\n"],
5
+ "mappings": ";;;AAIA,SAASA,cAAc;AACvB,SAASC,qBAAqBC,iBAAiB;AAC/C,SAASC,cAAc;AAEvB,SACEC,iBACAC,qBACAC,UACAC,cACAC,kBACAC,cACAC,sBACK;AACP,SAASC,YAAY;AACrB,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;;;ACnB7B;;;ADwBO,IAAMC,eAAeC,OAAOC,OAAOC,IAAAA,EAAMC,KAC9CC,UAAUC,kBAAkB;EAAEC,UAAUC;AAAgB,CAAA,GACxDH,UAAUI,6BAA6B;EAAEF,UAAUG;AAAoB,CAAA,GACvEL,UAAUM,sBAAsB;EAAEJ,UAAUK;AAAa,CAAA,GACzDP,UAAUQ,0BAA0B;EAAEN,UAAUO;AAAiB,CAAA,GACjET,UAAUU,gBAAgB;EAAEC,QAAQ;IAACC,OAAOA;;AAAQ,CAAA,GACpDZ,UAAUa,iBAAiB;EAAEX,UAAUY;AAAa,CAAA,GACpDd,UAAUe,sBAAsB;EAAEC;AAAa,CAAA,GAC/CpB,OAAOqB,UAAU;EACfC,aAAaC,oBAAoBC;EACjClB,UAAUmB;AACZ,CAAA,GACAzB,OAAOqB,UAAU;EACfC,aAAaI,aAAaC;EAC1BrB,UAAUsB;AACZ,CAAA,GACAxB,UAAUyB,qBAAqB;EAC7BC,OAAO;IAAEC,UAAU7B,KAAK8B;IAAIC,MAAM;IAAcC,SAASC;IAAYC,UAAU;EAAoB;AACrG,CAAA,GACApC,OAAOqC,IAAI;AAGb,IAAA,uBAAetC;",
6
+ "names": ["Plugin", "AppActivationEvents", "AppPlugin", "Script", "AppGraphBuilder", "BlueprintDefinition", "Compiler", "CreateObject", "OperationHandler", "ReactSurface", "ScriptSettings", "meta", "translations", "ScriptEvents", "ScriptPlugin", "Plugin", "define", "meta", "pipe", "AppPlugin", "addAppGraphModule", "activate", "AppGraphBuilder", "addBlueprintDefinitionModule", "BlueprintDefinition", "addCreateObjectModule", "CreateObject", "addOperationHandlerModule", "OperationHandler", "addSchemaModule", "schema", "Script", "addSurfaceModule", "ReactSurface", "addTranslationsModule", "translations", "addModule", "activatesOn", "AppActivationEvents", "SetupSettings", "ScriptSettings", "ScriptEvents", "SetupCompiler", "Compiler", "addPluginAssetModule", "asset", "pluginId", "id", "path", "content", "pluginSpec", "mimeType", "make"]
7
7
  }
@@ -0,0 +1,21 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/ScriptPlugin.workerd.ts
4
+ import { Plugin } from "@dxos/app-framework";
5
+ import { AppPlugin } from "@dxos/app-toolkit";
6
+ import { Script } from "@dxos/compute";
7
+ import { OperationHandler } from "#capabilities";
8
+ import { meta } from "#meta";
9
+ var ScriptPlugin = Plugin.define(meta).pipe(AppPlugin.addOperationHandlerModule({
10
+ activate: OperationHandler
11
+ }), AppPlugin.addSchemaModule({
12
+ schema: [
13
+ Script.Script
14
+ ]
15
+ }), Plugin.make);
16
+ var ScriptPlugin_workerd_default = ScriptPlugin;
17
+ export {
18
+ ScriptPlugin,
19
+ ScriptPlugin_workerd_default as default
20
+ };
21
+ //# sourceMappingURL=ScriptPlugin.workerd.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ScriptPlugin.workerd.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { Script } from '@dxos/compute';\n\nimport { OperationHandler } from '#capabilities';\nimport { meta } from '#meta';\n\nexport const ScriptPlugin = Plugin.define(meta).pipe(\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addSchemaModule({ schema: [Script.Script] }),\n Plugin.make,\n);\n\nexport default ScriptPlugin;\n"],
5
+ "mappings": ";;;AAIA,SAASA,cAAc;AACvB,SAASC,iBAAiB;AAC1B,SAASC,cAAc;AAEvB,SAASC,wBAAwB;AACjC,SAASC,YAAY;AAEd,IAAMC,eAAeL,OAAOM,OAAOF,IAAAA,EAAMG,KAC9CN,UAAUO,0BAA0B;EAAEC,UAAUN;AAAiB,CAAA,GACjEF,UAAUS,gBAAgB;EAAEC,QAAQ;IAACT,OAAOA;;AAAQ,CAAA,GACpDF,OAAOY,IAAI;AAGb,IAAA,+BAAeP;",
6
+ "names": ["Plugin", "AppPlugin", "Script", "OperationHandler", "meta", "ScriptPlugin", "define", "pipe", "addOperationHandlerModule", "activate", "addSchemaModule", "schema", "make"]
7
+ }
@@ -24,7 +24,8 @@ var BlueprintEditor = ({ object }) => {
24
24
  const [creating, setCreating] = useState(false);
25
25
  const [instructions, setInstructions] = useState(`You can run the script "${object.name ?? "script"}".`);
26
26
  const blueprintKey = `org.dxos.blueprint.${kebabize(object.name ?? "script")}`;
27
- const existingBlueprint = blueprints.find((bp) => bp.key === blueprintKey);
27
+ const existingBlueprint = blueprints.find((bp) => Obj.getMeta(bp).key === blueprintKey);
28
+ const fnKey = fn ? Obj.getMeta(fn).key : void 0;
28
29
  useAsyncEffect(async () => {
29
30
  if (!existingBlueprint) {
30
31
  return;
@@ -45,8 +46,8 @@ var BlueprintEditor = ({ object }) => {
45
46
  Obj.update(text, (text2) => {
46
47
  text2.content = instructions;
47
48
  });
48
- if (fn?.key) {
49
- const toolId = ToolId.make(fn.key);
49
+ if (fnKey) {
50
+ const toolId = ToolId.make(fnKey);
50
51
  if (!existingBlueprint.tools?.includes(toolId)) {
51
52
  Obj.update(existingBlueprint, (existingBlueprint2) => {
52
53
  existingBlueprint2.tools = [
@@ -56,7 +57,7 @@ var BlueprintEditor = ({ object }) => {
56
57
  });
57
58
  }
58
59
  }
59
- } else if (fn?.key) {
60
+ } else if (fnKey) {
60
61
  db.add(Blueprint.make({
61
62
  key: blueprintKey,
62
63
  name: object.name ?? "Script",
@@ -64,7 +65,7 @@ var BlueprintEditor = ({ object }) => {
64
65
  source: instructions
65
66
  }),
66
67
  tools: [
67
- ToolId.make(fn.key)
68
+ ToolId.make(fnKey)
68
69
  ]
69
70
  }));
70
71
  }
@@ -75,7 +76,7 @@ var BlueprintEditor = ({ object }) => {
75
76
  }, [
76
77
  db,
77
78
  existingBlueprint,
78
- fn,
79
+ fnKey,
79
80
  blueprintKey,
80
81
  object.name,
81
82
  instructions
@@ -94,7 +95,7 @@ var BlueprintEditor = ({ object }) => {
94
95
  })), /* @__PURE__ */ React.createElement("div", {
95
96
  className: "pt-2"
96
97
  }, /* @__PURE__ */ React.createElement(Button, {
97
- disabled: !existingBlueprint && !fn?.key || creating,
98
+ disabled: !existingBlueprint && !fnKey || creating,
98
99
  onClick: handleSave
99
100
  }, t(existingBlueprint ? "update-blueprint.label" : "create-blueprint.label"))));
100
101
  };
@@ -293,4 +294,4 @@ var ScriptProperties = ({ subject: object }) => {
293
294
  export {
294
295
  ScriptProperties as default
295
296
  };
296
- //# sourceMappingURL=ScriptProperties-F6NE6M4H.mjs.map
297
+ //# sourceMappingURL=ScriptProperties-RLXNAN3N.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/ScriptProperties/ScriptProperties.tsx", "../../../src/containers/ScriptProperties/BlueprintEditor.tsx", "../../../src/containers/ScriptProperties/FunctionBinding.tsx", "../../../src/containers/ScriptProperties/FunctionPublishing.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { type Script } from '@dxos/compute';\n\nimport { BlueprintEditor } from './BlueprintEditor';\nimport { FunctionBinding } from './FunctionBinding';\nimport { FunctionPublishing } from './FunctionPublishing';\n\nexport type ScriptPropertiesProps = AppSurface.ObjectPropertiesProps<Script.Script>;\n\nexport const ScriptProperties = ({ subject: object }: ScriptPropertiesProps) => {\n return (\n <div className='flex flex-col py-form-gap gap-form-section-gap'>\n <FunctionBinding object={object} />\n <BlueprintEditor object={object} />\n <FunctionPublishing object={object} />\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { ToolId } from '@dxos/ai';\nimport { Blueprint, Template } from '@dxos/compute';\nimport { type Script } from '@dxos/compute';\nimport { Operation } from '@dxos/compute';\nimport { Filter, Obj, Ref } from '@dxos/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Button, Input, useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { kebabize } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nexport type BlueprintEditorProps = { object: Script.Script };\n\nexport const BlueprintEditor = ({ object }: BlueprintEditorProps) => {\n const { t } = useTranslation(meta.id);\n const db = Obj.getDatabase(object);\n const [fn] = useQuery(db, Filter.type(Operation.PersistentOperation, { source: Ref.make(object) }));\n const blueprints = useQuery(db, Filter.type(Blueprint.Blueprint));\n\n const [creating, setCreating] = useState(false);\n // TODO(burdon): Remove?\n const [instructions, setInstructions] = useState<string>(`You can run the script \"${object.name ?? 'script'}\".`);\n const blueprintKey = `org.dxos.blueprint.${kebabize(object.name ?? 'script')}`;\n const existingBlueprint = blueprints.find((bp) => Obj.getMeta(bp).key === blueprintKey);\n const fnKey = fn ? Obj.getMeta(fn).key : undefined;\n\n useAsyncEffect(async () => {\n if (!existingBlueprint) {\n return;\n }\n\n const source = await existingBlueprint.instructions.source.load();\n setInstructions(source.content ?? '');\n }, [existingBlueprint]);\n\n const handleSave = useCallback(async () => {\n if (!db) {\n return;\n }\n\n setCreating(true);\n try {\n if (existingBlueprint) {\n const text = await existingBlueprint.instructions.source.load();\n Obj.update(text, (text) => {\n text.content = instructions;\n });\n\n if (fnKey) {\n const toolId = ToolId.make(fnKey);\n if (!existingBlueprint.tools?.includes(toolId)) {\n Obj.update(existingBlueprint, (existingBlueprint) => {\n existingBlueprint.tools = [...(existingBlueprint.tools ?? []), toolId];\n });\n }\n }\n } else if (fnKey) {\n db.add(\n Blueprint.make({\n key: blueprintKey,\n name: object.name ?? 'Script',\n instructions: Template.make({ source: instructions }),\n tools: [ToolId.make(fnKey)],\n }),\n );\n }\n await db.flush();\n } finally {\n setCreating(false);\n }\n }, [db, existingBlueprint, fnKey, blueprintKey, object.name, instructions]);\n\n return (\n <div className='flex flex-col'>\n <Form.Section label={t('blueprint-editor.label')} description={t('blueprint-editor.description')} />\n\n <Input.Root>\n <Input.Label>{t('blueprint-instructions.label')}</Input.Label>\n <Input.TextArea\n placeholder={t('blueprint-instructions.placeholder')}\n rows={6}\n value={instructions}\n onChange={(event) => setInstructions(event.target.value)}\n classNames='resize-y'\n />\n </Input.Root>\n\n <div className='pt-2'>\n <Button disabled={(!existingBlueprint && !fnKey) || creating} onClick={handleSave}>\n {t(existingBlueprint ? 'update-blueprint.label' : 'create-blueprint.label')}\n </Button>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type ChangeEvent, useCallback } from 'react';\n\nimport { type Script } from '@dxos/compute';\nimport { Operation } from '@dxos/compute';\nimport { Filter, Obj, Ref } from '@dxos/echo';\nimport { getUserFunctionIdInMetadata } from '@dxos/functions';\nimport { getInvocationUrl } from '@dxos/functions-runtime';\nimport { useClient } from '@dxos/react-client';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Clipboard, Input, useControlledState, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\n\nexport type FunctionBindingProps = { object: Script.Script };\n\nexport const FunctionBinding = ({ object }: FunctionBindingProps) => {\n const { t } = useTranslation(meta.id);\n const client = useClient();\n const db = Obj.getDatabase(object);\n\n const [fn] = useQuery(db, Filter.type(Operation.PersistentOperation, { source: Ref.make(object) }));\n const functionId = fn && getUserFunctionIdInMetadata(Obj.getMeta(fn));\n const functionUrl =\n functionId &&\n getInvocationUrl(functionId, client.config.values.runtime?.services?.edge?.url ?? '', {\n spaceId: db?.spaceId,\n });\n\n const [binding, setBinding] = useControlledState(fn?.binding ?? '');\n const handleBindingChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => setBinding(event.target.value),\n [setBinding],\n );\n\n const handleBindingBlur = useCallback(() => {\n if (fn) {\n Obj.update(fn, (fn) => {\n fn.binding = binding;\n });\n }\n }, [fn, binding]);\n\n if (!fn) {\n return null;\n }\n\n return (\n <div className='flex flex-col'>\n <Form.Section label={t('remote-function-settings.heading')} />\n\n {functionUrl && (\n <Input.Root>\n <Input.Label>{t('function-url.label')}</Input.Label>\n <Input.TextInput\n disabled\n value={functionUrl}\n onChange={(event) => {\n Obj.update(fn, (fn) => {\n fn.name = event.target.value;\n });\n }}\n />\n <Clipboard.IconButton value={functionUrl} />\n </Input.Root>\n )}\n\n <Input.Root>\n <Input.Label>{t('function-binding.label')}</Input.Label>\n <Input.TextInput\n placeholder={t('function-binding.placeholder')}\n value={binding}\n onChange={handleBindingChange}\n onBlur={handleBindingBlur}\n />\n </Input.Root>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Octokit } from '@octokit/core';\nimport React, { useCallback, useState } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { SettingsOperation } from '@dxos/app-toolkit';\nimport { type Script } from '@dxos/compute';\nimport { Filter, Obj } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Button, Clipboard, Message, useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\nimport { AccessToken } from '@dxos/types';\nimport { kebabize } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nexport type FunctionPublishingProps = { object: Script.Script };\n\n// TODO(burdon): Move to separate tab?\nexport const FunctionPublishing = ({ object }: FunctionPublishingProps) => {\n const { t } = useTranslation(meta.id);\n const { invokePromise } = useOperationInvoker();\n const db = Obj.getDatabase(object);\n\n const [githubToken] = useQuery(db, Filter.type(AccessToken.AccessToken, { source: 'github.com' }));\n const gistKey = Obj.getMeta(object).keys.find(({ source }) => source === 'github.com');\n const [gistUrl, setGistUrl] = useState<string | undefined>();\n\n useAsyncEffect(async () => {\n const token = githubToken?.token;\n const gistId = gistKey?.id;\n if (!token || !gistId) {\n setGistUrl(undefined);\n return;\n }\n\n try {\n const octokit = new Octokit({ auth: githubToken.token });\n const response = await octokit.request('GET /gists/{gist_id}', {\n gist_id: gistId,\n });\n setGistUrl(response.data.html_url);\n } catch (err) {\n log.catch(err);\n setGistUrl(undefined);\n }\n }, [githubToken, gistKey]);\n\n const handleOpenTokenManager = useCallback(\n () =>\n invokePromise(SettingsOperation.Open, {\n plugin: 'org.dxos.plugin.token-manager',\n }),\n [invokePromise],\n );\n\n const [publishing, setPublishing] = useState(false);\n const handlePublish = useCallback(async () => {\n setPublishing(true);\n const octokit = new Octokit({ auth: githubToken.token });\n const source = await object.source.load();\n const filename = object.name ? kebabize(object.name) : 'composer-script';\n const files = { [`${filename}.ts`]: { content: source.content } };\n\n try {\n // TODO(wittjosiah): Factor out to intent.\n const meta = Obj.getMeta(object);\n const githubKey = meta.keys.find(({ source }) => source === 'github.com');\n const gistId = githubKey?.id;\n if (gistId) {\n await octokit.request('PATCH /gists/{gist_id}', {\n gist_id: gistId,\n files,\n });\n } else {\n const response = await octokit.request('POST /gists', {\n public: true,\n files,\n });\n const gistId = response.data.id;\n if (gistId) {\n Obj.update(object, (object) => {\n Obj.getMeta(object).keys.push({ source: 'github.com', id: gistId });\n });\n }\n }\n } finally {\n setPublishing(false);\n }\n }, [object, githubToken]);\n\n return (\n <div className='flex flex-col'>\n <Form.Section label={t('script-publish-settings.label')} description={t('script-publish-settings.description')} />\n\n {!githubToken && (\n <div className='flex flex-col py-form-gap'>\n <Message.Root valence='info'>\n <Message.Title>{t('no-github-token.label')}</Message.Title>\n </Message.Root>\n <div className='flex pt-form-gap'>\n <Button onClick={handleOpenTokenManager}>{t('open-token-manager.label')}</Button>\n </div>\n </div>\n )}\n\n {githubToken && (\n <div className='flex justify-end gap-2'>\n {gistUrl && <Clipboard.IconButton value={gistUrl} />}\n <Button disabled={publishing} onClick={handlePublish}>\n {t('publish.label')}\n </Button>\n </div>\n )}\n </div>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "React", "useCallback", "useState", "ToolId", "Blueprint", "Template", "Operation", "Filter", "Obj", "Ref", "useQuery", "Button", "Input", "useAsyncEffect", "useTranslation", "Form", "kebabize", "meta", "BlueprintEditor", "object", "t", "id", "db", "getDatabase", "fn", "type", "PersistentOperation", "source", "make", "blueprints", "creating", "setCreating", "instructions", "setInstructions", "name", "blueprintKey", "existingBlueprint", "find", "bp", "getMeta", "key", "fnKey", "undefined", "load", "content", "handleSave", "text", "update", "toolId", "tools", "includes", "add", "flush", "div", "className", "Section", "label", "description", "Root", "Label", "TextArea", "placeholder", "rows", "value", "onChange", "event", "target", "classNames", "disabled", "onClick", "React", "useCallback", "Operation", "Filter", "Obj", "Ref", "getUserFunctionIdInMetadata", "getInvocationUrl", "useClient", "useQuery", "Clipboard", "Input", "useControlledState", "useTranslation", "Form", "meta", "FunctionBinding", "object", "t", "id", "client", "db", "getDatabase", "fn", "type", "PersistentOperation", "source", "make", "functionId", "getMeta", "functionUrl", "config", "values", "runtime", "services", "edge", "url", "spaceId", "binding", "setBinding", "handleBindingChange", "event", "target", "value", "handleBindingBlur", "update", "div", "className", "Section", "label", "Root", "Label", "TextInput", "disabled", "onChange", "name", "IconButton", "placeholder", "onBlur", "Octokit", "React", "useCallback", "useState", "useOperationInvoker", "SettingsOperation", "Filter", "Obj", "log", "useQuery", "Button", "Clipboard", "Message", "useAsyncEffect", "useTranslation", "Form", "AccessToken", "kebabize", "meta", "invokePromise", "db", "object", "githubToken", "source", "gistKey", "token", "gistId", "setGistUrl", "undefined", "response", "err", "setPublishing", "files", "content", "githubKey", "id", "octokit", "gist_id", "getMeta", "Section", "label", "t", "className", "valence", "Title", "onClick", "handleOpenTokenManager", "gistUrl", "IconButton", "value", "disabled", "handlePublish", "ScriptProperties", "subject", "object", "React", "div", "className", "FunctionBinding", "BlueprintEditor", "FunctionPublishing"]
7
+ }