@dxos/plugin-debug 0.12.0-next-73daef452f1464b62efdbca75fb0067c1066f264 → 0.13.0

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 (501) hide show
  1. package/PLUGIN.mdl +241 -3
  2. package/README.md +27 -3
  3. package/dist/lib/Debug.mjs.map +1 -1
  4. package/dist/lib/DebugNodes.mjs +21 -2
  5. package/dist/lib/DebugNodes.mjs.map +1 -1
  6. package/dist/lib/DebugOperation.mjs +166 -2
  7. package/dist/lib/DebugOperation.mjs.map +1 -1
  8. package/dist/lib/DebugPlugin.mjs.map +1 -1
  9. package/dist/lib/DebugSurface.mjs +7 -2
  10. package/dist/lib/DebugSurface.mjs.map +1 -1
  11. package/dist/lib/IncidentSpace.mjs +2 -0
  12. package/dist/lib/PipelineSpace.mjs +2 -0
  13. package/dist/lib/ReviewSpace.mjs +2 -0
  14. package/dist/lib/StockfishSpace.mjs +2 -0
  15. package/dist/lib/TidepoolSpace.mjs +2 -0
  16. package/dist/lib/WeatherSpace.mjs +2 -0
  17. package/dist/lib/WorkerSpace.mjs +2 -0
  18. package/dist/lib/capabilities.browser.mjs +71 -0
  19. package/dist/lib/capabilities.browser.mjs.map +1 -0
  20. package/dist/lib/capabilities.mjs +17 -7
  21. package/dist/lib/capabilities.mjs.map +1 -1
  22. package/dist/lib/capabilities.node.mjs +13 -3
  23. package/dist/lib/capabilities.node.mjs.map +1 -1
  24. package/dist/lib/capabilities.tauri.mjs +71 -0
  25. package/dist/lib/capabilities.tauri.mjs.map +1 -0
  26. package/dist/lib/capabilities.workerd.mjs +3 -1
  27. package/dist/lib/capabilities.workerd.mjs.map +1 -1
  28. package/dist/lib/chunk-DebugConsole.mjs +241 -0
  29. package/dist/lib/chunk-DebugConsole.mjs.map +1 -0
  30. package/dist/lib/chunk-DebugObjectPanel.mjs +12 -16
  31. package/dist/lib/chunk-DebugObjectPanel.mjs.map +1 -1
  32. package/dist/lib/chunk-DebugPanelDrawer.mjs +48 -0
  33. package/dist/lib/chunk-DebugPanelDrawer.mjs.map +1 -0
  34. package/dist/lib/chunk-DebugPanelHeader.mjs +280 -0
  35. package/dist/lib/chunk-DebugPanelHeader.mjs.map +1 -0
  36. package/dist/lib/chunk-DebugPanelStatus.mjs +127 -0
  37. package/dist/lib/chunk-DebugPanelStatus.mjs.map +1 -0
  38. package/dist/lib/chunk-DebugSettings.mjs +81 -70
  39. package/dist/lib/chunk-DebugSettings.mjs.map +1 -1
  40. package/dist/lib/chunk-DebugSpaceObjectsPanel.mjs +21 -12
  41. package/dist/lib/chunk-DebugSpaceObjectsPanel.mjs.map +1 -1
  42. package/dist/lib/chunk-DebugStatus.mjs +12 -12
  43. package/dist/lib/chunk-DebugStatus.mjs.map +1 -1
  44. package/dist/lib/chunk-IncidentSpace.mjs +269 -0
  45. package/dist/lib/chunk-IncidentSpace.mjs.map +1 -0
  46. package/dist/lib/chunk-LoggerPanel.mjs +18 -0
  47. package/dist/lib/chunk-LoggerPanel.mjs.map +1 -0
  48. package/dist/lib/chunk-PLUGIN.mjs +6 -0
  49. package/dist/lib/chunk-PLUGIN.mjs.map +1 -0
  50. package/dist/lib/chunk-PipelineSpace.mjs +378 -0
  51. package/dist/lib/chunk-PipelineSpace.mjs.map +1 -0
  52. package/dist/lib/chunk-ReviewSpace.mjs +356 -0
  53. package/dist/lib/chunk-ReviewSpace.mjs.map +1 -0
  54. package/dist/lib/chunk-SpaceGenerator.mjs +107 -73
  55. package/dist/lib/chunk-SpaceGenerator.mjs.map +1 -1
  56. package/dist/lib/chunk-StatsPanel.mjs +28 -35
  57. package/dist/lib/chunk-StatsPanel.mjs.map +1 -1
  58. package/dist/lib/chunk-StockfishSpace.mjs +563 -0
  59. package/dist/lib/chunk-StockfishSpace.mjs.map +1 -0
  60. package/dist/lib/chunk-TidepoolSpace.mjs +544 -0
  61. package/dist/lib/chunk-TidepoolSpace.mjs.map +1 -0
  62. package/dist/lib/chunk-WeatherSpace.mjs +206 -0
  63. package/dist/lib/chunk-WeatherSpace.mjs.map +1 -0
  64. package/dist/lib/chunk-Wireframe.mjs +6 -6
  65. package/dist/lib/chunk-Wireframe.mjs.map +1 -1
  66. package/dist/lib/chunk-WorkerSpace.mjs +177 -0
  67. package/dist/lib/chunk-WorkerSpace.mjs.map +1 -0
  68. package/dist/lib/chunk-app-graph-builder.mjs +72 -40
  69. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -1
  70. package/dist/lib/chunk-create-space-from-template.mjs +55 -0
  71. package/dist/lib/chunk-create-space-from-template.mjs.map +1 -0
  72. package/dist/lib/chunk-errors.mjs +13 -0
  73. package/dist/lib/chunk-errors.mjs.map +1 -0
  74. package/dist/lib/chunk-graph-retention.mjs +14 -0
  75. package/dist/lib/chunk-graph-retention.mjs.map +1 -0
  76. package/dist/lib/chunk-insert-lorem-ipsum.mjs +2 -2
  77. package/dist/lib/chunk-log-recording.mjs +29 -1
  78. package/dist/lib/chunk-log-recording.mjs.map +1 -1
  79. package/dist/lib/chunk-open-page.mjs +29 -0
  80. package/dist/lib/chunk-open-page.mjs.map +1 -0
  81. package/dist/lib/chunk-operation-handler.mjs +5 -0
  82. package/dist/lib/chunk-operation-handler.mjs.map +1 -1
  83. package/dist/lib/chunk-react-surface.mjs +73 -71
  84. package/dist/lib/chunk-react-surface.mjs.map +1 -1
  85. package/dist/lib/chunk-settings.mjs +2 -2
  86. package/dist/lib/chunk-settings.mjs.map +1 -1
  87. package/dist/lib/chunk-snapshot.mjs +170 -0
  88. package/dist/lib/chunk-snapshot.mjs.map +1 -0
  89. package/dist/lib/chunk-space-templates.mjs +21 -0
  90. package/dist/lib/chunk-space-templates.mjs.map +1 -0
  91. package/dist/lib/chunk-stats-panel.mjs +1 -1
  92. package/dist/lib/chunk-stats-panel.mjs.map +1 -1
  93. package/dist/lib/chunk-undo.mjs +17 -0
  94. package/dist/lib/chunk-undo.mjs.map +1 -0
  95. package/dist/lib/chunk-view-state.mjs +37 -0
  96. package/dist/lib/chunk-view-state.mjs.map +1 -0
  97. package/dist/lib/components.mjs +68 -28
  98. package/dist/lib/components.mjs.map +1 -1
  99. package/dist/lib/containers.mjs +5 -2
  100. package/dist/lib/containers.mjs.map +1 -1
  101. package/dist/lib/index.mjs +8 -2
  102. package/dist/lib/meta.mjs +3 -2
  103. package/dist/lib/meta.mjs.map +1 -1
  104. package/dist/lib/operations.mjs +7 -1
  105. package/dist/lib/operations.mjs.map +1 -1
  106. package/dist/lib/plugin.mjs +2 -2
  107. package/dist/lib/plugin.mjs.map +1 -1
  108. package/dist/lib/translations.mjs +13 -4
  109. package/dist/lib/translations.mjs.map +1 -1
  110. package/dist/types/scripts/build-template-archive.d.ts +2 -0
  111. package/dist/types/scripts/build-template-archive.d.ts.map +1 -0
  112. package/dist/types/src/DebugPlugin.d.ts +2 -2
  113. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/DebugSurfaces.d.ts +4 -5
  115. package/dist/types/src/capabilities/DebugSurfaces.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/app-graph-builder.d.ts +31 -0
  117. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  118. package/dist/types/src/capabilities/app-graph-builder.test.d.ts +2 -0
  119. package/dist/types/src/capabilities/app-graph-builder.test.d.ts.map +1 -0
  120. package/dist/types/src/capabilities/gen/browser.d.ts +14 -0
  121. package/dist/types/src/capabilities/gen/browser.d.ts.map +1 -0
  122. package/dist/types/src/capabilities/gen/node.d.ts +2 -0
  123. package/dist/types/src/capabilities/gen/node.d.ts.map +1 -1
  124. package/dist/types/src/capabilities/gen/tauri.d.ts +14 -0
  125. package/dist/types/src/capabilities/gen/tauri.d.ts.map +1 -0
  126. package/dist/types/src/capabilities/gen/workerd.d.ts +2 -0
  127. package/dist/types/src/capabilities/gen/workerd.d.ts.map +1 -1
  128. package/dist/types/src/capabilities/graph-retention.d.ts +5 -0
  129. package/dist/types/src/capabilities/graph-retention.d.ts.map +1 -0
  130. package/dist/types/src/capabilities/index.d.ts +2 -0
  131. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  132. package/dist/types/src/capabilities/log-recording.d.ts +4 -0
  133. package/dist/types/src/capabilities/log-recording.d.ts.map +1 -1
  134. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  135. package/dist/types/src/capabilities/space-templates.d.ts +14 -0
  136. package/dist/types/src/capabilities/space-templates.d.ts.map +1 -0
  137. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts +4 -3
  138. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -1
  139. package/dist/types/src/components/SchemaTable/index.d.ts +1 -1
  140. package/dist/types/src/components/SchemaTable/index.d.ts.map +1 -1
  141. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +2 -1
  142. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  143. package/dist/types/src/components/SpaceGenerator/index.d.ts +2 -2
  144. package/dist/types/src/components/SpaceGenerator/index.d.ts.map +1 -1
  145. package/dist/types/src/components/SpaceGenerator/presets.d.ts +1 -1
  146. package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
  147. package/dist/types/src/components/index.d.ts +2 -2
  148. package/dist/types/src/components/index.d.ts.map +1 -1
  149. package/dist/types/src/containers/DebugConsole/DebugConsole.d.ts +12 -0
  150. package/dist/types/src/containers/DebugConsole/DebugConsole.d.ts.map +1 -0
  151. package/dist/types/src/containers/DebugConsole/DebugConsole.stories.d.ts +103 -0
  152. package/dist/types/src/containers/DebugConsole/DebugConsole.stories.d.ts.map +1 -0
  153. package/dist/types/src/containers/DebugConsole/cli.d.ts +24 -0
  154. package/dist/types/src/containers/DebugConsole/cli.d.ts.map +1 -0
  155. package/dist/types/src/containers/DebugConsole/index.d.ts +2 -0
  156. package/dist/types/src/containers/DebugConsole/index.d.ts.map +1 -0
  157. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts +1 -1
  158. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -1
  159. package/dist/types/src/containers/DebugObjectPanel/index.d.ts +1 -1
  160. package/dist/types/src/containers/DebugObjectPanel/index.d.ts.map +1 -1
  161. package/dist/types/src/containers/DebugPanel/DebugPanel.d.ts +30 -0
  162. package/dist/types/src/containers/DebugPanel/DebugPanel.d.ts.map +1 -0
  163. package/dist/types/src/containers/DebugPanel/DebugPanel.stories.d.ts +126 -0
  164. package/dist/types/src/containers/DebugPanel/DebugPanel.stories.d.ts.map +1 -0
  165. package/dist/types/src/containers/DebugPanel/DebugPanelContext.d.ts +16 -0
  166. package/dist/types/src/containers/DebugPanel/DebugPanelContext.d.ts.map +1 -0
  167. package/dist/types/src/containers/DebugPanel/DebugPanelHeader.d.ts +14 -0
  168. package/dist/types/src/containers/DebugPanel/DebugPanelHeader.d.ts.map +1 -0
  169. package/dist/types/src/containers/DebugPanel/DebugPanelMain.d.ts +6 -0
  170. package/dist/types/src/containers/DebugPanel/DebugPanelMain.d.ts.map +1 -0
  171. package/dist/types/src/containers/DebugPanel/DebugPanelSidebar.d.ts +6 -0
  172. package/dist/types/src/containers/DebugPanel/DebugPanelSidebar.d.ts.map +1 -0
  173. package/dist/types/src/containers/DebugPanel/index.d.ts +7 -0
  174. package/dist/types/src/containers/DebugPanel/index.d.ts.map +1 -0
  175. package/dist/types/src/containers/DebugPanel/view-state.d.ts +46 -0
  176. package/dist/types/src/containers/DebugPanel/view-state.d.ts.map +1 -0
  177. package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.d.ts +10 -0
  178. package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.d.ts.map +1 -0
  179. package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.stories.d.ts +114 -0
  180. package/dist/types/src/containers/DebugPanelDrawer/DebugPanelDrawer.stories.d.ts.map +1 -0
  181. package/dist/types/src/containers/DebugPanelDrawer/index.d.ts +2 -0
  182. package/dist/types/src/containers/DebugPanelDrawer/index.d.ts.map +1 -0
  183. package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.d.ts +11 -0
  184. package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.d.ts.map +1 -0
  185. package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.stories.d.ts +107 -0
  186. package/dist/types/src/containers/DebugPanelStatus/DebugPanelStatus.stories.d.ts.map +1 -0
  187. package/dist/types/src/containers/DebugPanelStatus/index.d.ts +2 -0
  188. package/dist/types/src/containers/DebugPanelStatus/index.d.ts.map +1 -0
  189. package/dist/types/src/containers/DebugPortSettings/DebugPortSettings.d.ts.map +1 -1
  190. package/dist/types/src/containers/DebugPortSettings/DebugPortSettings.stories.d.ts +13 -4
  191. package/dist/types/src/containers/DebugPortSettings/DebugPortSettings.stories.d.ts.map +1 -1
  192. package/dist/types/src/containers/DebugPortSettings/index.d.ts +1 -1
  193. package/dist/types/src/containers/DebugPortSettings/index.d.ts.map +1 -1
  194. package/dist/types/src/containers/DebugSettings/DebugSettings.d.ts +2 -2
  195. package/dist/types/src/containers/DebugSettings/DebugSettings.d.ts.map +1 -1
  196. package/dist/types/src/containers/DebugSettings/DebugSettings.stories.d.ts +14 -5
  197. package/dist/types/src/containers/DebugSettings/DebugSettings.stories.d.ts.map +1 -1
  198. package/dist/types/src/containers/DebugSettings/index.d.ts +1 -1
  199. package/dist/types/src/containers/DebugSettings/index.d.ts.map +1 -1
  200. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +1 -1
  201. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -1
  202. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts +1 -1
  203. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts.map +1 -1
  204. package/dist/types/src/containers/DebugStatus/index.d.ts +1 -1
  205. package/dist/types/src/containers/DebugStatus/index.d.ts.map +1 -1
  206. package/dist/types/src/containers/LoggerPanel/LoggerPanel.d.ts +6 -0
  207. package/dist/types/src/containers/LoggerPanel/LoggerPanel.d.ts.map +1 -0
  208. package/dist/types/src/containers/LoggerPanel/LoggerPanel.stories.d.ts +107 -0
  209. package/dist/types/src/containers/LoggerPanel/LoggerPanel.stories.d.ts.map +1 -0
  210. package/dist/types/src/containers/LoggerPanel/index.d.ts +2 -0
  211. package/dist/types/src/containers/LoggerPanel/index.d.ts.map +1 -0
  212. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts.map +1 -1
  213. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.stories.d.ts +13 -4
  214. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.stories.d.ts.map +1 -1
  215. package/dist/types/src/containers/SpaceGenerator/index.d.ts +1 -1
  216. package/dist/types/src/containers/SpaceGenerator/index.d.ts.map +1 -1
  217. package/dist/types/src/containers/StatsPanel/StatsPanel.d.ts +5 -1
  218. package/dist/types/src/containers/StatsPanel/StatsPanel.d.ts.map +1 -1
  219. package/dist/types/src/containers/StatsPanel/index.d.ts +1 -1
  220. package/dist/types/src/containers/StatsPanel/index.d.ts.map +1 -1
  221. package/dist/types/src/containers/Wireframe/Wireframe.d.ts +2 -2
  222. package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -1
  223. package/dist/types/src/containers/Wireframe/index.d.ts +1 -1
  224. package/dist/types/src/containers/Wireframe/index.d.ts.map +1 -1
  225. package/dist/types/src/containers/index.d.ts +7 -1
  226. package/dist/types/src/containers/index.d.ts.map +1 -1
  227. package/dist/types/src/errors.d.ts +123 -0
  228. package/dist/types/src/errors.d.ts.map +1 -0
  229. package/dist/types/src/index.d.ts +2 -2
  230. package/dist/types/src/index.d.ts.map +1 -1
  231. package/dist/types/src/operations/DebugOperationHandlerSet.d.ts.map +1 -1
  232. package/dist/types/src/operations/create-space-from-template.d.ts +5 -0
  233. package/dist/types/src/operations/create-space-from-template.d.ts.map +1 -0
  234. package/dist/types/src/operations/errors.d.ts +33 -0
  235. package/dist/types/src/operations/errors.d.ts.map +1 -0
  236. package/dist/types/src/operations/index.d.ts +1 -1
  237. package/dist/types/src/operations/index.d.ts.map +1 -1
  238. package/dist/types/src/operations/open-page.d.ts +5 -0
  239. package/dist/types/src/operations/open-page.d.ts.map +1 -0
  240. package/dist/types/src/operations/snapshot.d.ts +5 -0
  241. package/dist/types/src/operations/snapshot.d.ts.map +1 -0
  242. package/dist/types/src/operations/snapshot.test.d.ts +2 -0
  243. package/dist/types/src/operations/snapshot.test.d.ts.map +1 -0
  244. package/dist/types/src/operations/undo.d.ts +5 -0
  245. package/dist/types/src/operations/undo.d.ts.map +1 -0
  246. package/dist/types/src/operations/undo.test.d.ts +2 -0
  247. package/dist/types/src/operations/undo.test.d.ts.map +1 -0
  248. package/dist/types/src/plugin.d.ts.map +1 -1
  249. package/dist/types/src/samples/crm/PipelineSpace.d.ts +21 -0
  250. package/dist/types/src/samples/crm/PipelineSpace.d.ts.map +1 -0
  251. package/dist/types/src/samples/crm/PipelineSpace.test.d.ts +2 -0
  252. package/dist/types/src/samples/crm/PipelineSpace.test.d.ts.map +1 -0
  253. package/dist/types/src/samples/crm/accounts.d.ts +55 -0
  254. package/dist/types/src/samples/crm/accounts.d.ts.map +1 -0
  255. package/dist/types/src/samples/crm/inbox.d.ts +14 -0
  256. package/dist/types/src/samples/crm/inbox.d.ts.map +1 -0
  257. package/dist/types/src/samples/crm/pipeline.d.ts +9 -0
  258. package/dist/types/src/samples/crm/pipeline.d.ts.map +1 -0
  259. package/dist/types/src/samples/crm/util.d.ts +14 -0
  260. package/dist/types/src/samples/crm/util.d.ts.map +1 -0
  261. package/dist/types/src/samples/incident/IncidentSpace.d.ts +21 -0
  262. package/dist/types/src/samples/incident/IncidentSpace.d.ts.map +1 -0
  263. package/dist/types/src/samples/incident/IncidentSpace.test.d.ts +2 -0
  264. package/dist/types/src/samples/incident/IncidentSpace.test.d.ts.map +1 -0
  265. package/dist/types/src/samples/incident/docs.d.ts +14 -0
  266. package/dist/types/src/samples/incident/docs.d.ts.map +1 -0
  267. package/dist/types/src/samples/incident/project.d.ts +16 -0
  268. package/dist/types/src/samples/incident/project.d.ts.map +1 -0
  269. package/dist/types/src/samples/incident/tasks.d.ts +9 -0
  270. package/dist/types/src/samples/incident/tasks.d.ts.map +1 -0
  271. package/dist/types/src/samples/incident/util.d.ts +32 -0
  272. package/dist/types/src/samples/incident/util.d.ts.map +1 -0
  273. package/dist/types/src/samples/index.d.ts +8 -0
  274. package/dist/types/src/samples/index.d.ts.map +1 -0
  275. package/dist/types/src/samples/review/ReviewSpace.d.ts +19 -0
  276. package/dist/types/src/samples/review/ReviewSpace.d.ts.map +1 -0
  277. package/dist/types/src/samples/review/ReviewSpace.test.d.ts +2 -0
  278. package/dist/types/src/samples/review/ReviewSpace.test.d.ts.map +1 -0
  279. package/dist/types/src/samples/review/assets.d.ts +19 -0
  280. package/dist/types/src/samples/review/assets.d.ts.map +1 -0
  281. package/dist/types/src/samples/review/util.d.ts +4 -0
  282. package/dist/types/src/samples/review/util.d.ts.map +1 -0
  283. package/dist/types/src/samples/review/work.d.ts +15 -0
  284. package/dist/types/src/samples/review/work.d.ts.map +1 -0
  285. package/dist/types/src/samples/stockfish/StockfishSpace.d.ts +27 -0
  286. package/dist/types/src/samples/stockfish/StockfishSpace.d.ts.map +1 -0
  287. package/dist/types/src/samples/stockfish/StockfishSpace.test.d.ts +2 -0
  288. package/dist/types/src/samples/stockfish/StockfishSpace.test.d.ts.map +1 -0
  289. package/dist/types/src/samples/stockfish/docs.d.ts +8 -0
  290. package/dist/types/src/samples/stockfish/docs.d.ts.map +1 -0
  291. package/dist/types/src/samples/stockfish/game.d.ts +10 -0
  292. package/dist/types/src/samples/stockfish/game.d.ts.map +1 -0
  293. package/dist/types/src/samples/stockfish/project.d.ts +31 -0
  294. package/dist/types/src/samples/stockfish/project.d.ts.map +1 -0
  295. package/dist/types/src/samples/stockfish/run.test.d.ts +2 -0
  296. package/dist/types/src/samples/stockfish/run.test.d.ts.map +1 -0
  297. package/dist/types/src/samples/stockfish/skill.d.ts +8 -0
  298. package/dist/types/src/samples/stockfish/skill.d.ts.map +1 -0
  299. package/dist/types/src/samples/stockfish/tasks.d.ts +12 -0
  300. package/dist/types/src/samples/stockfish/tasks.d.ts.map +1 -0
  301. package/dist/types/src/samples/stockfish/util.d.ts +14 -0
  302. package/dist/types/src/samples/stockfish/util.d.ts.map +1 -0
  303. package/dist/types/src/samples/tidepool/TidepoolSpace.d.ts +22 -0
  304. package/dist/types/src/samples/tidepool/TidepoolSpace.d.ts.map +1 -0
  305. package/dist/types/src/samples/tidepool/TidepoolSpace.test.d.ts +2 -0
  306. package/dist/types/src/samples/tidepool/TidepoolSpace.test.d.ts.map +1 -0
  307. package/dist/types/src/samples/tidepool/docs.d.ts +12 -0
  308. package/dist/types/src/samples/tidepool/docs.d.ts.map +1 -0
  309. package/dist/types/src/samples/tidepool/project.d.ts +20 -0
  310. package/dist/types/src/samples/tidepool/project.d.ts.map +1 -0
  311. package/dist/types/src/samples/tidepool/tasks.d.ts +14 -0
  312. package/dist/types/src/samples/tidepool/tasks.d.ts.map +1 -0
  313. package/dist/types/src/samples/tidepool/team.d.ts +9 -0
  314. package/dist/types/src/samples/tidepool/team.d.ts.map +1 -0
  315. package/dist/types/src/samples/tidepool/util.d.ts +14 -0
  316. package/dist/types/src/samples/tidepool/util.d.ts.map +1 -0
  317. package/dist/types/src/samples/weather/WeatherSpace.d.ts +21 -0
  318. package/dist/types/src/samples/weather/WeatherSpace.d.ts.map +1 -0
  319. package/dist/types/src/samples/weather/WeatherSpace.test.d.ts +2 -0
  320. package/dist/types/src/samples/weather/WeatherSpace.test.d.ts.map +1 -0
  321. package/dist/types/src/samples/weather/project.d.ts +20 -0
  322. package/dist/types/src/samples/weather/project.d.ts.map +1 -0
  323. package/dist/types/src/samples/weather/skill.d.ts +12 -0
  324. package/dist/types/src/samples/weather/skill.d.ts.map +1 -0
  325. package/dist/types/src/samples/weather/tasks.d.ts +9 -0
  326. package/dist/types/src/samples/weather/tasks.d.ts.map +1 -0
  327. package/dist/types/src/samples/weather/util.d.ts +16 -0
  328. package/dist/types/src/samples/weather/util.d.ts.map +1 -0
  329. package/dist/types/src/samples/worker/WorkerSpace.d.ts +22 -0
  330. package/dist/types/src/samples/worker/WorkerSpace.d.ts.map +1 -0
  331. package/dist/types/src/samples/worker/WorkerSpace.test.d.ts +2 -0
  332. package/dist/types/src/samples/worker/WorkerSpace.test.d.ts.map +1 -0
  333. package/dist/types/src/samples/worker/project.d.ts +18 -0
  334. package/dist/types/src/samples/worker/project.d.ts.map +1 -0
  335. package/dist/types/src/samples/worker/tasks.d.ts +9 -0
  336. package/dist/types/src/samples/worker/tasks.d.ts.map +1 -0
  337. package/dist/types/src/samples/worker/util.d.ts +14 -0
  338. package/dist/types/src/samples/worker/util.d.ts.map +1 -0
  339. package/dist/types/src/stories/SpaceTemplates.stories.d.ts +114 -0
  340. package/dist/types/src/stories/SpaceTemplates.stories.d.ts.map +1 -0
  341. package/dist/types/src/testing/index.d.ts +3 -0
  342. package/dist/types/src/testing/index.d.ts.map +1 -0
  343. package/dist/types/src/testing/stub-drawer-plugin.d.ts +8 -0
  344. package/dist/types/src/testing/stub-drawer-plugin.d.ts.map +1 -0
  345. package/dist/types/src/testing/stub-tools-plugin.d.ts +19 -0
  346. package/dist/types/src/testing/stub-tools-plugin.d.ts.map +1 -0
  347. package/dist/types/src/translations.d.ts +13 -4
  348. package/dist/types/src/translations.d.ts.map +1 -1
  349. package/dist/types/src/types/Debug.d.ts +2 -2
  350. package/dist/types/src/types/Debug.d.ts.map +1 -1
  351. package/dist/types/src/types/DebugNodes.d.ts +13 -1
  352. package/dist/types/src/types/DebugNodes.d.ts.map +1 -1
  353. package/dist/types/src/types/DebugOperation.d.ts +119 -0
  354. package/dist/types/src/types/DebugOperation.d.ts.map +1 -1
  355. package/dist/types/src/types/DebugSurface.d.ts +7 -0
  356. package/dist/types/src/types/DebugSurface.d.ts.map +1 -1
  357. package/dist/types/src/types/index.d.ts +6 -6
  358. package/dist/types/src/types/index.d.ts.map +1 -1
  359. package/dist/types/tsconfig.tsbuildinfo +1 -1
  360. package/dx.config.ts +3 -2
  361. package/package.json +129 -73
  362. package/scripts/build-template-archive.ts +65 -0
  363. package/src/DebugPlugin.ts +1 -1
  364. package/src/capabilities/DebugSurfaces.tsx +85 -71
  365. package/src/capabilities/app-graph-builder.test.ts +45 -0
  366. package/src/capabilities/app-graph-builder.ts +83 -46
  367. package/src/capabilities/gen/browser.ts +85 -0
  368. package/src/capabilities/gen/node.ts +15 -8
  369. package/src/capabilities/gen/tauri.ts +85 -0
  370. package/src/capabilities/gen/workerd.ts +11 -4
  371. package/src/capabilities/graph-retention.ts +23 -0
  372. package/src/capabilities/index.ts +18 -10
  373. package/src/capabilities/log-recording.ts +20 -1
  374. package/src/capabilities/operation-handler.ts +9 -0
  375. package/src/capabilities/react-surface.ts +33 -29
  376. package/src/capabilities/settings.ts +2 -2
  377. package/src/capabilities/space-templates.ts +25 -0
  378. package/src/capabilities/stats-panel.ts +1 -1
  379. package/src/components/SchemaTable/SchemaTable.tsx +44 -10
  380. package/src/components/SchemaTable/index.ts +1 -1
  381. package/src/components/SpaceGenerator/ObjectGenerator.tsx +22 -2
  382. package/src/components/SpaceGenerator/index.ts +2 -2
  383. package/src/components/SpaceGenerator/presets.ts +4 -4
  384. package/src/components/index.ts +2 -2
  385. package/src/containers/DebugConsole/DebugConsole.stories.tsx +29 -0
  386. package/src/containers/DebugConsole/DebugConsole.tsx +94 -0
  387. package/src/containers/DebugConsole/cli.ts +296 -0
  388. package/src/containers/DebugConsole/index.ts +5 -0
  389. package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +44 -44
  390. package/src/containers/DebugObjectPanel/index.ts +1 -1
  391. package/src/containers/DebugPanel/DebugPanel.stories.tsx +118 -0
  392. package/src/containers/DebugPanel/DebugPanel.tsx +72 -0
  393. package/src/containers/DebugPanel/DebugPanelContext.ts +33 -0
  394. package/src/containers/DebugPanel/DebugPanelHeader.tsx +54 -0
  395. package/src/containers/DebugPanel/DebugPanelMain.tsx +116 -0
  396. package/src/containers/DebugPanel/DebugPanelSidebar.tsx +123 -0
  397. package/src/containers/DebugPanel/index.ts +10 -0
  398. package/src/containers/DebugPanel/view-state.ts +60 -0
  399. package/src/containers/DebugPanelDrawer/DebugPanelDrawer.stories.tsx +92 -0
  400. package/src/containers/DebugPanelDrawer/DebugPanelDrawer.tsx +72 -0
  401. package/src/containers/DebugPanelDrawer/index.ts +5 -0
  402. package/src/containers/DebugPanelStatus/DebugPanelStatus.stories.tsx +119 -0
  403. package/src/containers/DebugPanelStatus/DebugPanelStatus.tsx +167 -0
  404. package/src/containers/DebugPanelStatus/index.ts +5 -0
  405. package/src/containers/DebugPortSettings/DebugPortSettings.stories.tsx +2 -2
  406. package/src/containers/DebugPortSettings/DebugPortSettings.tsx +33 -40
  407. package/src/containers/DebugPortSettings/index.ts +1 -1
  408. package/src/containers/DebugSettings/DebugSettings.stories.tsx +1 -1
  409. package/src/containers/DebugSettings/DebugSettings.tsx +71 -64
  410. package/src/containers/DebugSettings/index.ts +1 -1
  411. package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +39 -28
  412. package/src/containers/DebugSpaceObjectsPanel/index.ts +1 -1
  413. package/src/containers/DebugStatus/DebugStatus.tsx +10 -10
  414. package/src/containers/DebugStatus/index.ts +1 -1
  415. package/src/containers/LoggerPanel/LoggerPanel.stories.tsx +62 -0
  416. package/src/containers/LoggerPanel/LoggerPanel.tsx +28 -0
  417. package/src/containers/LoggerPanel/index.ts +5 -0
  418. package/src/containers/SpaceGenerator/SpaceGenerator.stories.tsx +8 -8
  419. package/src/containers/SpaceGenerator/SpaceGenerator.tsx +102 -73
  420. package/src/containers/SpaceGenerator/index.ts +1 -1
  421. package/src/containers/StatsPanel/StatsPanel.tsx +32 -31
  422. package/src/containers/StatsPanel/index.ts +1 -1
  423. package/src/containers/Wireframe/Wireframe.tsx +8 -7
  424. package/src/containers/Wireframe/index.ts +1 -1
  425. package/src/containers/index.ts +22 -9
  426. package/src/errors.ts +23 -0
  427. package/src/index.ts +2 -2
  428. package/src/meta.ts +1 -1
  429. package/src/operations/DebugOperationHandlerSet.ts +5 -1
  430. package/src/operations/create-space-from-template.ts +57 -0
  431. package/src/operations/errors.ts +8 -0
  432. package/src/operations/index.ts +1 -1
  433. package/src/operations/open-page.ts +51 -0
  434. package/src/operations/snapshot.test.ts +57 -0
  435. package/src/operations/snapshot.ts +243 -0
  436. package/src/operations/undo.test.ts +19 -0
  437. package/src/operations/undo.ts +28 -0
  438. package/src/plugin.tsx +4 -0
  439. package/src/samples/crm/PipelineSpace.test.ts +55 -0
  440. package/src/samples/crm/PipelineSpace.ts +52 -0
  441. package/src/samples/crm/accounts.ts +153 -0
  442. package/src/samples/crm/inbox.ts +158 -0
  443. package/src/samples/crm/pipeline.ts +70 -0
  444. package/src/samples/crm/util.ts +18 -0
  445. package/src/samples/incident/IncidentSpace.test.ts +68 -0
  446. package/src/samples/incident/IncidentSpace.ts +61 -0
  447. package/src/samples/incident/docs.ts +111 -0
  448. package/src/samples/incident/project.ts +61 -0
  449. package/src/samples/incident/tasks.ts +101 -0
  450. package/src/samples/incident/util.ts +24 -0
  451. package/src/samples/index.ts +11 -0
  452. package/src/samples/review/ReviewSpace.test.ts +89 -0
  453. package/src/samples/review/ReviewSpace.ts +47 -0
  454. package/src/samples/review/assets.ts +123 -0
  455. package/src/samples/review/util.ts +10 -0
  456. package/src/samples/review/work.ts +249 -0
  457. package/src/samples/stockfish/StockfishSpace.test.ts +129 -0
  458. package/src/samples/stockfish/StockfishSpace.ts +70 -0
  459. package/src/samples/stockfish/docs.ts +65 -0
  460. package/src/samples/stockfish/game.ts +47 -0
  461. package/src/samples/stockfish/project.ts +87 -0
  462. package/src/samples/stockfish/run.test.ts +193 -0
  463. package/src/samples/stockfish/skill.ts +154 -0
  464. package/src/samples/stockfish/tasks.ts +306 -0
  465. package/src/samples/stockfish/util.ts +17 -0
  466. package/src/samples/tidepool/TidepoolSpace.test.ts +61 -0
  467. package/src/samples/tidepool/TidepoolSpace.ts +65 -0
  468. package/src/samples/tidepool/docs.ts +140 -0
  469. package/src/samples/tidepool/project.ts +57 -0
  470. package/src/samples/tidepool/tasks.ts +252 -0
  471. package/src/samples/tidepool/team.ts +87 -0
  472. package/src/samples/tidepool/util.ts +18 -0
  473. package/src/samples/weather/WeatherSpace.test.ts +93 -0
  474. package/src/samples/weather/WeatherSpace.ts +59 -0
  475. package/src/samples/weather/project.ts +76 -0
  476. package/src/samples/weather/skill.ts +45 -0
  477. package/src/samples/weather/tasks.ts +98 -0
  478. package/src/samples/weather/util.ts +21 -0
  479. package/src/samples/worker/WorkerSpace.test.ts +102 -0
  480. package/src/samples/worker/WorkerSpace.ts +56 -0
  481. package/src/samples/worker/project.ts +72 -0
  482. package/src/samples/worker/tasks.ts +119 -0
  483. package/src/samples/worker/util.ts +17 -0
  484. package/src/stories/SpaceTemplates.stories.tsx +105 -0
  485. package/src/testing/index.ts +6 -0
  486. package/src/testing/stub-drawer-plugin.ts +65 -0
  487. package/src/testing/stub-tools-plugin.tsx +95 -0
  488. package/src/translations.ts +15 -6
  489. package/src/types/Debug.ts +2 -2
  490. package/src/types/DebugNodes.ts +21 -1
  491. package/src/types/DebugOperation.ts +206 -0
  492. package/src/types/DebugSurface.ts +7 -0
  493. package/src/types/index.ts +6 -6
  494. package/dist/lib/chunk-LogStatus.mjs +0 -44
  495. package/dist/lib/chunk-LogStatus.mjs.map +0 -1
  496. package/dist/types/src/containers/LogStatus/LogStatus.d.ts +0 -6
  497. package/dist/types/src/containers/LogStatus/LogStatus.d.ts.map +0 -1
  498. package/dist/types/src/containers/LogStatus/index.d.ts +0 -2
  499. package/dist/types/src/containers/LogStatus/index.d.ts.map +0 -1
  500. package/src/containers/LogStatus/LogStatus.tsx +0 -51
  501. package/src/containers/LogStatus/index.ts +0 -5
@@ -0,0 +1,249 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import * as SampleSpace from '@dxos/app-toolkit/SampleSpace';
8
+ import * as Project from '@dxos/compute/Project';
9
+ import { Database, type Obj, Ref } from '@dxos/echo';
10
+ import { Outline, Person, PullRequest, Repo, Task, TaskSet } from '@dxos/types';
11
+
12
+ import { type ImageKey, type MediaResult, type VideoKey } from './assets.ts';
13
+ import { daysAgo } from './util.ts';
14
+
15
+ //
16
+ // The review queue: real dxos/dxos pull requests, each filed against the task it delivered, with the
17
+ // screenshots and recordings its author attached. Finished work carries merged PRs; the tasks in
18
+ // review carry the PRs still open, which is what a reviewer opens the space to work through.
19
+ //
20
+
21
+ type PullRequestKey = 'rail' | 'oauth' | 'toast' | 'halo' | 'archify';
22
+
23
+ const PULL_REQUEST_SEEDS: ReadonlyArray<
24
+ SampleSpace.Seed<PullRequestKey, Omit<Obj.MakeProps<typeof PullRequest.PullRequest>, 'owner' | 'repo'>>
25
+ > = [
26
+ {
27
+ key: 'rail',
28
+ number: 12544,
29
+ title: 'plugin-navtree: stop the L0 rail insetting items by the scrollbar strip',
30
+ state: 'merged',
31
+ author: 'wittjosiah',
32
+ headBranch: 'claude/l0-box-centering-regression-lg55l7',
33
+ additions: 65,
34
+ deletions: 4,
35
+ },
36
+ {
37
+ key: 'oauth',
38
+ number: 12690,
39
+ title: 'onboarding, connector: run desktop OAuth in the system browser',
40
+ state: 'merged',
41
+ author: 'wittjosiah',
42
+ headBranch: 'claude/tauri-oauth-login-ftwie0',
43
+ additions: 941,
44
+ deletions: 206,
45
+ },
46
+ {
47
+ key: 'toast',
48
+ number: 12954,
49
+ title: "react-ui: count down a toast's remaining time in a bar",
50
+ state: 'merged',
51
+ author: 'wittjosiah',
52
+ headBranch: 'claude/toast-progress-indicator-e3a046',
53
+ additions: 137,
54
+ deletions: 30,
55
+ },
56
+ {
57
+ key: 'halo',
58
+ number: 13336,
59
+ title: 'halo: switch identities in place with deleteIdentity instead of a reset and reload',
60
+ state: 'open',
61
+ author: 'dmaretskyi',
62
+ headBranch: 'dm/admiring-gauss-nqdcuk',
63
+ additions: 501,
64
+ deletions: 159,
65
+ },
66
+ {
67
+ key: 'archify',
68
+ number: 12952,
69
+ title: 'plugin-archify: add Archify architecture diagrams',
70
+ state: 'open',
71
+ author: 'dmaretskyi',
72
+ headBranch: 'claude/archify-composer-plugin-5rfrpr',
73
+ additions: 3176,
74
+ deletions: 0,
75
+ },
76
+ ];
77
+
78
+ type ReviewerKey = 'mira' | 'kai';
79
+
80
+ const REVIEWER_SEEDS: ReadonlyArray<SampleSpace.Seed<ReviewerKey, { fullName: string; jobTitle: string }>> = [
81
+ { key: 'mira', fullName: 'Mira Okafor', jobTitle: 'Design engineer' },
82
+ { key: 'kai', fullName: 'Kai Lindqvist', jobTitle: 'Platform engineer' },
83
+ ];
84
+
85
+ type TaskSeed = {
86
+ readonly title: string;
87
+ readonly status: Task.Status;
88
+ readonly description: string;
89
+ readonly priority?: Task.Priority;
90
+ readonly pullRequest?: PullRequestKey;
91
+ readonly images?: ReadonlyArray<ImageKey>;
92
+ readonly videos?: ReadonlyArray<VideoKey>;
93
+ readonly reviewers?: ReadonlyArray<ReviewerKey>;
94
+ /** Days before the reference date the task was opened. */
95
+ readonly opened: number;
96
+ };
97
+
98
+ const TASK_SEEDS: ReadonlyArray<TaskSeed> = [
99
+ {
100
+ title: 'Stop the L0 rail insetting items by the scrollbar strip',
101
+ status: 'done',
102
+ priority: 'medium',
103
+ description: 'The current-workspace indicator is tucked under the avatar since the overlay scrollbar landed.',
104
+ pullRequest: 'rail',
105
+ images: ['railBefore', 'railAfter'],
106
+ opened: 30,
107
+ },
108
+ {
109
+ title: 'Run desktop OAuth in the system browser',
110
+ status: 'done',
111
+ priority: 'urgent',
112
+ description:
113
+ 'Every OAuth flow in the desktop app fails before the provider page appears: WKWebView opens no window.',
114
+ pullRequest: 'oauth',
115
+ images: ['oauthIdle', 'oauthPending'],
116
+ opened: 24,
117
+ },
118
+ {
119
+ title: "Count down a toast's remaining time",
120
+ status: 'done',
121
+ priority: 'low',
122
+ description: 'A toast disappears with no warning; show the time it has left and pause it on hover.',
123
+ pullRequest: 'toast',
124
+ videos: ['toastCountdown'],
125
+ opened: 18,
126
+ },
127
+ {
128
+ title: 'Switch identities in place instead of a reset and reload',
129
+ status: 'review',
130
+ priority: 'high',
131
+ description: 'Logging out, recovering or joining another identity wipes the profile and reloads the app.',
132
+ pullRequest: 'halo',
133
+ videos: ['haloLogin'],
134
+ reviewers: ['kai'],
135
+ opened: 6,
136
+ },
137
+ {
138
+ title: 'Add Archify architecture diagrams',
139
+ status: 'review',
140
+ priority: 'medium',
141
+ description: 'Render a package’s module graph as a diagram an agent can generate and a person can read.',
142
+ pullRequest: 'archify',
143
+ videos: ['archify'],
144
+ reviewers: ['mira', 'kai'],
145
+ opened: 12,
146
+ },
147
+ {
148
+ title: "Show a pull request's review state on its task pill",
149
+ status: 'started',
150
+ priority: 'medium',
151
+ description: 'The pill colours by open/merged/closed; approved and changes-requested are invisible.',
152
+ opened: 2,
153
+ },
154
+ {
155
+ title: 'Record a demo for every task in review',
156
+ status: 'todo',
157
+ priority: 'low',
158
+ description: 'A reviewer should be able to watch the change before reading the diff.',
159
+ opened: 1,
160
+ },
161
+ ];
162
+
163
+ export type WorkResult = {
164
+ project: Project.Project;
165
+ taskSet: TaskSet.TaskSet;
166
+ tasks: Task.Task[];
167
+ pullRequests: Record<PullRequestKey, PullRequest.PullRequest>;
168
+ };
169
+
170
+ /** Pull requests, reviewers, the task set, and the project that gathers them with the media. */
171
+ export const Work: SampleSpace.Phase<WorkResult, MediaResult> = SampleSpace.phase('work', {
172
+ schemas: [
173
+ PullRequest.PullRequest,
174
+ Person.Person,
175
+ Task.Task,
176
+ TaskSet.TaskSet,
177
+ Outline.Outline,
178
+ Repo.Repo,
179
+ Project.Project,
180
+ ],
181
+ run: ({ images, videos }: MediaResult) =>
182
+ Effect.gen(function* () {
183
+ const pullRequests = yield* SampleSpace.seed(PULL_REQUEST_SEEDS, ({ key: _key, ...seed }) =>
184
+ Database.add(
185
+ PullRequest.make({
186
+ ...seed,
187
+ owner: 'dxos',
188
+ repo: 'dxos',
189
+ url: `https://github.com/dxos/dxos/pull/${seed.number}`,
190
+ baseBranch: 'main',
191
+ }),
192
+ ),
193
+ );
194
+
195
+ const reviewers = yield* SampleSpace.seed(REVIEWER_SEEDS, ({ key: _key, ...seed }) =>
196
+ Database.add(Person.make(seed)),
197
+ );
198
+
199
+ const tasks = TASK_SEEDS.map((seed) =>
200
+ Task.make({
201
+ title: seed.title,
202
+ description: seed.description,
203
+ status: seed.status,
204
+ priority: seed.priority,
205
+ reviewers: seed.reviewers?.map((key) => ({ contact: Ref.make(reviewers[key]) })),
206
+ artifacts: [
207
+ ...(seed.pullRequest ? [Ref.make(pullRequests[seed.pullRequest])] : []),
208
+ ...(seed.images ?? []).map((key) => Ref.make(images[key])),
209
+ ...(seed.videos ?? []).map((key) => Ref.make(videos[key])),
210
+ ],
211
+ history: [{ date: daysAgo(seed.opened), event: 'created', description: 'Opened.' }],
212
+ }),
213
+ );
214
+
215
+ const taskSet = yield* Database.add(TaskSet.make({ name: 'Composer polish' }));
216
+ yield* SampleSpace.children(taskSet, tasks, (taskSet, refs) => {
217
+ taskSet.tasks = refs;
218
+ });
219
+
220
+ const repo = yield* Database.add(
221
+ Repo.make({
222
+ name: 'dxos',
223
+ owner: 'dxos',
224
+ url: 'https://github.com/dxos/dxos',
225
+ description: 'TypeScript implementation of the DXOS protocols, SDK, toolchain and Composer.',
226
+ defaultBranch: 'main',
227
+ }),
228
+ );
229
+ const outline = yield* Database.add(Outline.make({ name: 'Review notes' }));
230
+
231
+ const project = yield* Database.add(
232
+ Project.make({
233
+ name: 'Composer polish',
234
+ description: 'Small, visible fixes to Composer, each landed as a reviewed pull request with a demo.',
235
+ status: 'active',
236
+ repo: Ref.make(repo),
237
+ taskSet: Ref.make(taskSet),
238
+ outline: Ref.make(outline),
239
+ artifacts: [
240
+ ...Object.values(pullRequests).map((pullRequest) => Ref.make(pullRequest)),
241
+ ...Object.values(images).map((image) => Ref.make(image)),
242
+ ...Object.values(videos).map((video) => Ref.make(video)),
243
+ ],
244
+ }),
245
+ );
246
+
247
+ return { project, taskSet, tasks, pullRequests };
248
+ }),
249
+ });
@@ -0,0 +1,129 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { describe, test } from 'vitest';
6
+
7
+ import { buildArchive, histogram } from '@dxos/app-toolkit/testing';
8
+ import { Type } from '@dxos/echo';
9
+ import * as EffectEx from '@dxos/effect/EffectEx';
10
+
11
+ import * as StockfishSpace from './StockfishSpace.ts';
12
+
13
+ /**
14
+ * The chess-MCP template is built on demand rather than committed, so this asserts its shape in
15
+ * place of a fixture: if a schema it seeds changes incompatibly, the build fails here.
16
+ */
17
+ describe('Chess MCP template', () => {
18
+ test(
19
+ 'builds an archive with the project, its plan, its skill and the test position',
20
+ { timeout: 120_000 },
21
+ async ({ expect }) => {
22
+ const { json, objectCount } = await EffectEx.runPromise(buildArchive(StockfishSpace.make()));
23
+ const counts = histogram(json);
24
+ const countOf = (typename: string) =>
25
+ Object.entries(counts)
26
+ .filter(([type]) => type.includes(typename))
27
+ .reduce((total, [, count]) => total + count, 0);
28
+
29
+ expect(objectCount).toBeGreaterThan(0);
30
+ expect(countOf('type.project')).toBe(1);
31
+ expect(countOf('type.instructions')).toBe(1);
32
+ expect(countOf('type.skill')).toBe(1);
33
+ expect(countOf('type.taskSet')).toBe(1);
34
+ expect(countOf('type.document')).toBe(1);
35
+ // The position the finished server is pointed at: a Game wrapping a chess state.
36
+ expect(countOf('type.game:')).toBe(1);
37
+ expect(countOf('type.chess.state')).toBe(1);
38
+ // Falsifiable without hardcoding the archive's contents: every typename in the archive must be
39
+ // one the definition DECLARED. A pair of zero-counts would not be — `countOf` substring-matches,
40
+ // so asserting a typename is absent passes just as well when the typename is misspelled.
41
+ const declared = new Set(StockfishSpace.make().schemas.map((schema) => Type.getTypename(schema)));
42
+ for (const type of Object.keys(counts)) {
43
+ // Not namespace-limited: `Project.make` persists `com.example.type.project`, so matching only
44
+ // `org.dxos.*` would let the project's own types go unchecked.
45
+ const typename = type.match(/(?:[\w-]+\.)+type\.[\w.]+/)?.[0];
46
+ // `spaceProperties` is the space root the harness creates, not a phase's content, so it is
47
+ // in every archive and in no definition's schema list.
48
+ if (typename && typename !== 'org.dxos.type.spaceProperties') {
49
+ expect(declared).toContain(typename);
50
+ }
51
+ }
52
+ // And the two the plan creates at run time are not among them: stage four adds the server
53
+ // record and stage five the repository, so seeding either would name a URL that does not exist.
54
+ expect([...declared].filter((type) => /mcpServer|\.repo$/.test(type))).toEqual([]);
55
+ },
56
+ );
57
+
58
+ test('the plan is one root, five stages, and their steps', { timeout: 120_000 }, async ({ expect }) => {
59
+ const { json } = await EffectEx.runPromise(buildArchive(StockfishSpace.make()));
60
+ const objects: Array<{
61
+ '@type'?: string;
62
+ 'id': string;
63
+ 'title'?: string;
64
+ 'status'?: string;
65
+ 'assignee'?: unknown;
66
+ 'subtasks'?: unknown;
67
+ 'dependsOn'?: unknown;
68
+ }> = JSON.parse(json).objects;
69
+ const tasks = objects.filter((object) => object['@type']?.includes('type.task:'));
70
+
71
+ // Refs serialize as an envelope, so a parent's `subtasks` are matched by id within it.
72
+ const childrenOf = (id: string) => {
73
+ const listed = JSON.stringify(tasks.find((task) => task.id === id)?.subtasks ?? []);
74
+ return tasks.filter((task) => listed.includes(task.id));
75
+ };
76
+ const roots = tasks.filter((task) => !tasks.some((parent) => childrenOf(parent.id).includes(task)));
77
+ expect(roots).toHaveLength(1);
78
+ expect(roots[0].title).toBe('Ship a chess engine as an MCP server on Cloudflare Workers');
79
+
80
+ const stages = childrenOf(roots[0].id);
81
+ expect(stages).toHaveLength(5);
82
+ // Every stage has steps of its own, which is the depth the tree exists to carry.
83
+ for (const stage of stages) {
84
+ expect(childrenOf(stage.id).length).toBeGreaterThan(0);
85
+ }
86
+ expect(tasks).toHaveLength(1 + 5 + stages.flatMap((stage) => childrenOf(stage.id)).length);
87
+
88
+ // Nothing has started: this space is a plan to run, not a project caught mid-flight.
89
+ expect(tasks.every((task) => task.status === 'todo')).toBe(true);
90
+
91
+ // Four of the five stages depend on their predecessor; the first depends on nothing.
92
+ expect(tasks.filter((task) => Array.isArray(task.dependsOn) && task.dependsOn.length > 0)).toHaveLength(4);
93
+ });
94
+
95
+ test(
96
+ "only the reader's own steps are assigned to them, and the two GitHub ones are last",
97
+ { timeout: 120_000 },
98
+ async ({ expect }) => {
99
+ const { json } = await EffectEx.runPromise(buildArchive(StockfishSpace.make()));
100
+ const objects: Array<{ '@type'?: string; 'id': string; 'title'?: string; 'assignee'?: unknown }> =
101
+ JSON.parse(json).objects;
102
+ const tasks = objects.filter((object) => object['@type']?.includes('type.task:'));
103
+
104
+ // The reader owns only what an agent cannot do: two Composer settings, and the three steps that
105
+ // need a browser. Nothing asks for an Anthropic key, and nothing asks for a Cloudflare login to
106
+ // DEPLOY — claiming the account afterwards is the one Cloudflare step that is theirs, and it is
107
+ // ordered after the last redeploy because a claimed account is one the agent cannot update.
108
+ const mine = tasks.filter((task) => (task.assignee as { role?: string } | undefined)?.role === 'user');
109
+ expect(mine.map((task) => task.title)).toEqual([
110
+ 'Select DeepSeek V4 Pro as the chat model',
111
+ 'Claim the temporary Cloudflare account',
112
+ 'Enable the Chess plugin',
113
+ 'Create an empty GitHub repository for the server',
114
+ 'Connect the GitHub credential, scoped to that repository',
115
+ ]);
116
+ },
117
+ );
118
+
119
+ test('the project binds the skill through its instructions', { timeout: 120_000 }, async ({ expect }) => {
120
+ const { json } = await EffectEx.runPromise(buildArchive(StockfishSpace.make()));
121
+ const objects: Array<{ '@type'?: string; 'id': string; 'skills'?: unknown }> = JSON.parse(json).objects;
122
+
123
+ const skill = objects.find((object) => object['@type']?.includes('type.skill'));
124
+ const instructions = objects.find((object) => object['@type']?.includes('type.instructions'));
125
+ expect(skill?.id).toBeDefined();
126
+ // A Skill object in the space is not enabled by proximity: `instructions.skills` is the binding.
127
+ expect(JSON.stringify(instructions?.skills)).toContain(String(skill?.id));
128
+ });
129
+ });
@@ -0,0 +1,70 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Effect from 'effect/Effect';
8
+
9
+ import type * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';
10
+ import * as SampleSpace from '@dxos/app-toolkit/SampleSpace';
11
+ import { Ref } from '@dxos/echo';
12
+
13
+ import { Docs } from './docs.ts';
14
+ import { ChessGame } from './game.ts';
15
+ import { ProjectPhase } from './project.ts';
16
+ import { DevelopmentSkill } from './skill.ts';
17
+ import { Tasks } from './tasks.ts';
18
+ import { REFERENCE } from './util.ts';
19
+
20
+ const phases = {
21
+ skill: DevelopmentSkill,
22
+ docs: Docs,
23
+ game: ChessGame,
24
+ tasks: Tasks,
25
+ project: ProjectPhase,
26
+ };
27
+
28
+ /**
29
+ * A starting point rather than a finished world: the brief for a chess engine exposed as an MCP
30
+ * server on Cloudflare Workers, the plan to build it as a task tree nothing has started on, a
31
+ * position to point the finished thing at, and the development-preferences skill a chat working it
32
+ * runs with.
33
+ *
34
+ * The other space templates depict a project mid-flight; this one is meant to be RUN. Every task is
35
+ * `todo`, the design artifact the first stage produces is deliberately absent, and neither the MCP
36
+ * server record nor a repository is seeded — stages four and five create them.
37
+ *
38
+ * It is deliberately reachable with no credentials but the reader's own DXOS identity: the chat runs
39
+ * DeepSeek through the edge, the first deploy uses wrangler's unauthenticated mode, and the only two
40
+ * consent screens are in the last stage.
41
+ */
42
+ export const make = (): SampleSpace.Definition<typeof phases, void> =>
43
+ SampleSpace.make({
44
+ // Reaches a space only where the definition is applied directly (the generator panel, the
45
+ // archive test): the create-space dialog takes its icon from `space-templates.ts`, which
46
+ // overrides every template's by list index. See DESIGN.md §7.
47
+ space: { name: 'Chess MCP on Workers', icon: 'shield-star', hue: 'amber' },
48
+ reference: REFERENCE,
49
+ phases,
50
+ build: (phases) =>
51
+ Effect.gen(function* () {
52
+ const skill = yield* phases.skill();
53
+ const docs = yield* phases.docs();
54
+ const game = yield* phases.game();
55
+ const tasks = yield* phases.tasks();
56
+ yield* phases.project({ docs, tasks, skill, game });
57
+
58
+ // The root holds collections only. Project/TaskSet/Task/Skill/Game are not collection-item
59
+ // types, so they live directly in the space DB and surface through their own containers.
60
+ yield* SampleSpace.collection('Documents', [Ref.make(docs.brief)]);
61
+ }),
62
+ });
63
+
64
+ export const makeTemplate = (): AppCapabilities.SpaceTemplate =>
65
+ SampleSpace.makeTemplate({
66
+ id: 'org.dxos.plugin-debug.template.stockfish',
67
+ description:
68
+ 'A brief, a five-stage plan as a task tree, a position to test against, and the skill for building it in a sandbox.',
69
+ definition: make(),
70
+ });
@@ -0,0 +1,65 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import * as SampleSpace from '@dxos/app-toolkit/SampleSpace';
8
+ import { Database } from '@dxos/echo';
9
+ import * as Markdown from '@dxos/plugin-markdown/Markdown';
10
+
11
+ //
12
+ // The one artifact this space ships with.
13
+ //
14
+ // The brief is INPUT — what to build and what not to. The design (the tool surface and the request
15
+ // path) is the first task's output, so it is deliberately absent: seeding it would answer the
16
+ // question the project exists to work through.
17
+ //
18
+
19
+ const BRIEF_MD = `# Brief — chess engine as an MCP server on Workers
20
+
21
+ A chess engine any chat in this space can consult, built as one Cloudflare Worker speaking MCP and
22
+ registered against this space. The reader runs it end to end from the assistant, with no Cloudflare
23
+ account, no GitHub account until the last stage, and no Anthropic key at any point.
24
+
25
+ ## Shape
26
+
27
+ One Worker. One Streamable-HTTP MCP endpoint on it. Two tools — evaluate a position, and name the
28
+ best move from it — over a chess engine compiled to WebAssembly and bundled into the Worker.
29
+
30
+ ## Constraints
31
+
32
+ - **No database.** Every request carries the position as FEN; the Worker holds nothing between
33
+ requests, so it can be evicted and restarted freely.
34
+ - **No accounts to start.** The first deploy uses wrangler's unauthenticated mode, which mints a
35
+ temporary Cloudflare account and prints a URL to claim it. GitHub comes last, and only to publish.
36
+ - **No Anthropic key.** The chat driving this runs DeepSeek V4 Pro through the DXOS edge.
37
+ - **Written by the assistant, not delegated.** The assistant edits and runs things itself in the
38
+ sandbox. The coding harness pre-installed in the sandbox image is not the path — see the
39
+ Development skill.
40
+ - **Bounded search.** A fixed, low depth or a fixed millisecond budget per call. An MCP tool that
41
+ thinks for thirty seconds is a tool a chat gives up on.
42
+
43
+ ## Out of scope
44
+
45
+ Opening books, endgame tablebases, multi-PV analysis, game persistence, per-caller rate limiting,
46
+ and authentication beyond the shared key the MCP server record already carries.
47
+
48
+ ## Done means
49
+
50
+ The Worker is registered as an MCP server in this space, and a chat opened on the seeded game
51
+ answers "what is the best move here?" from the engine's reply rather than from its own knowledge —
52
+ visible as a tool call in the transcript.
53
+ `;
54
+
55
+ export type DocsResult = { brief: Markdown.Document };
56
+
57
+ /** The project's brief: the requirement the first task designs against. */
58
+ export const Docs: SampleSpace.Phase<DocsResult> = SampleSpace.phase('docs', {
59
+ schemas: [Markdown.Document],
60
+ run: () =>
61
+ Effect.gen(function* () {
62
+ const brief = yield* Database.add(Markdown.make({ name: 'BRIEF.md', content: BRIEF_MD }));
63
+ return { brief };
64
+ }),
65
+ });
@@ -0,0 +1,47 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import * as SampleSpace from '@dxos/app-toolkit/SampleSpace';
8
+ import { Database } from '@dxos/echo';
9
+ import * as Chess from '@dxos/plugin-chess/Chess';
10
+ import * as Game from '@dxos/plugin-game/Game';
11
+
12
+ //
13
+ // The thing the finished server gets pointed at.
14
+ //
15
+ // The last stage's definition of done is a chat answering "what is the best move here?" from the
16
+ // engine rather than from what the model already knows, so the space ships a position to ask it
17
+ // about. Seeded as a game rather than a bare FEN in the brief because the chess chat opens on a
18
+ // Game — a position the reader has to paste in is a step that will be skipped.
19
+ //
20
+ // A Spanish opening five moves deep: quiet, materially level, and with no forced tactic, so a
21
+ // plausible answer produced without calling the tool is not accidentally the right one.
22
+ //
23
+
24
+ const OPENING_PGN = '1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 *';
25
+
26
+ export type GameResult = { game: Game.Game; state: Chess.State };
27
+
28
+ /** The position the deployed engine is asked about, as a game the chess chat can open. */
29
+ export const ChessGame: SampleSpace.Phase<GameResult> = SampleSpace.phase('game', {
30
+ schemas: [Game.Game, Chess.State],
31
+ run: () =>
32
+ Effect.gen(function* () {
33
+ const state = yield* Database.add(Chess.make({ pgn: OPENING_PGN }));
34
+ const game = yield* Database.add(
35
+ Game.make({
36
+ name: 'Test position — Spanish, 5 moves in',
37
+ players: [
38
+ { role: 'white', name: 'You' },
39
+ { role: 'black', name: 'Engine' },
40
+ ],
41
+ variant: state,
42
+ }),
43
+ );
44
+
45
+ return { game, state };
46
+ }),
47
+ });
@@ -0,0 +1,87 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import * as SampleSpace from '@dxos/app-toolkit/SampleSpace';
8
+ import * as Instructions from '@dxos/compute/Instructions';
9
+ import * as Project from '@dxos/compute/Project';
10
+ import { Database, Ref } from '@dxos/echo';
11
+ import { Outline } from '@dxos/types';
12
+
13
+ import { type DocsResult } from './docs.ts';
14
+ import { type GameResult } from './game.ts';
15
+ import { type SkillResult } from './skill.ts';
16
+ import { type TasksResult } from './tasks.ts';
17
+
18
+ //
19
+ // The project that ties the plan, the brief, the test position and the skill together.
20
+ //
21
+
22
+ export type ProjectInput = { docs: DocsResult; tasks: TasksResult; skill: SkillResult; game: GameResult };
23
+
24
+ export type ProjectResult = { project: Project.Project; instructions: Instructions.Instructions };
25
+
26
+ const INSTRUCTIONS = `Keep the Development skill enabled for the whole session — it carries how work \
27
+ is tracked, where the code is written and what counts as evidence, and it applies to every turn \
28
+ rather than to one task. Do not disable it to save context.
29
+
30
+ Build the MCP server described in BRIEF.md by working the task tree in order, and set each task's \
31
+ status as you finish it: the task list is how the reader follows this run.
32
+
33
+ Write the code yourself in one sandbox, driving it through the Sandbox skill. The sandbox image \
34
+ ships a coding agent of its own; do not delegate this project to it — it has none of this space's \
35
+ context, and its output would land on a container filesystem rather than in this project.
36
+
37
+ Verify every stage before starting the next, and redeploy in the two that change Worker code — a \
38
+ design or registration stage has nothing to deploy. File what you produce — the design, the Worker \
39
+ URL, the tool responses — as artifacts on this project rather than leaving it in the chat. The \
40
+ claim URL that the first deploy prints is a bearer credential for the account: give it to me \
41
+ directly and file it nowhere.
42
+
43
+ This project needs no Anthropic key and no Cloudflare login. If a step seems to need either, that \
44
+ is the wrong step.`;
45
+
46
+ /**
47
+ * The work-stream. It adopts the task set the tasks phase built (`Project.make` would otherwise
48
+ * create its own empty one) and carries the brief as an artifact.
49
+ *
50
+ * The skill reaches a chat through `instructions.skills`, which is the only binding path: a Skill
51
+ * object sitting in the space is not enabled by proximity. Binding makes it available; the text
52
+ * above is what keeps it on. The Sandbox skill cannot be bound the same way — it is contributed by
53
+ * a plugin under a key rather than stored here — so the text names it instead.
54
+ *
55
+ * No `repo` and no `McpServer`: the repository is created in stage five and the server record in
56
+ * stage four, and seeding either would name a URL that does not exist.
57
+ */
58
+ export const ProjectPhase: SampleSpace.Phase<ProjectResult, ProjectInput> = SampleSpace.phase('project', {
59
+ // `Outline.Outline` is not created here directly: `Project.make` builds one for the project's own
60
+ // outline, and a phase has to declare every type it persists or the space cannot register it.
61
+ schemas: [Project.Project, Instructions.Instructions, Outline.Outline],
62
+ run: ({ docs, tasks, skill, game }: ProjectInput) =>
63
+ Effect.gen(function* () {
64
+ const instructions = yield* Database.add(
65
+ Instructions.make({
66
+ name: 'Chess MCP on Workers',
67
+ text: INSTRUCTIONS,
68
+ skills: [Ref.make(skill.skill)],
69
+ objects: [Ref.make(docs.brief), Ref.make(tasks.taskSet), Ref.make(game.game)],
70
+ }),
71
+ );
72
+
73
+ const project = yield* Database.add(
74
+ Project.make({
75
+ name: 'Chess MCP on Workers',
76
+ description:
77
+ 'A chess engine served from one Cloudflare Worker as an MCP server, registered against this space so any chat can ask it for a move.',
78
+ status: 'active',
79
+ instructions: Ref.make(instructions),
80
+ taskSet: Ref.make(tasks.taskSet),
81
+ artifacts: [Ref.make(docs.brief)],
82
+ }),
83
+ );
84
+
85
+ return { project, instructions };
86
+ }),
87
+ });