@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,111 @@
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 source material: one machine record and four human notes.
13
+ //
14
+ // The log alone gives the technical cause and every time that matters. The notes are the only place
15
+ // the process failures live — who was paged, where the renewal reminder was kept, how support found
16
+ // an engineer — and two of them carry claims the log contradicts. A retro that follows the notes
17
+ // without checking them against the log recommends the wrong things; one that reads only the log
18
+ // finds nothing to recommend at all.
19
+ //
20
+
21
+ const STATUS_LOG_MD = `# Status log — incident 0516
22
+
23
+ Exported from the status service. Times are UTC, Saturday 16 May.
24
+
25
+ | Time | Source | Event |
26
+ | --- | --- | --- |
27
+ | 02:00:04 | edge | TLS handshake failures begin on api.northlight.example — certificate expired 2026-05-16T02:00:00Z |
28
+ | 02:00:30 | edge | Error rate on api.* rises from 0% to 98% |
29
+ | 02:03:11 | alerts | PAGE fired: "api error rate > 50%" — rotation platform-oncall, pager target m.okafor |
30
+ | 02:03:12 | alerts | Page delivered to m.okafor. No acknowledgement. |
31
+ | 02:33:11 | alerts | Page re-sent to m.okafor. No acknowledgement. |
32
+ | 03:31:47 | support | Ticket #4471 opened from customer email (Ferrous Ltd): "API down since about 2am" |
33
+ | 04:41:09 | alerts | Page acknowledged by j.reyes via Slack |
34
+ | 04:52:30 | ops | Incident channel #inc-0516 opened by j.reyes |
35
+ | 05:09:55 | ops | Certificate renewed manually by j.reyes using the shared ACME account |
36
+ | 05:12:18 | edge | TLS handshakes succeeding; error rate on api.* falls from 98% to 0.2% |
37
+ | 05:12:18 | ops | Incident resolved |
38
+
39
+ No deploys, configuration changes or infrastructure events were recorded between 15 May 12:00 and
40
+ 16 May 05:12. Database disk usage held at 41% throughout.
41
+ `;
42
+
43
+ const NOTE_JAE_MD = `# Notes from Jae Reyes — platform, on call that weekend
44
+
45
+ I was not paged. I found out when Priya messaged me on Slack a little after half four, and I had
46
+ the cert renewed about half an hour later once I worked out that was what it was.
47
+
48
+ Afterwards I looked at the pager config. The platform on-call rotation still lists Mira Okafor as
49
+ the target. Mira moved to the data team in March. Nobody updated the rotation when the team
50
+ changed, so for two months every page for our services has gone to someone who is no longer on
51
+ the team.
52
+
53
+ My guess is something went out on Friday afternoon that broke TLS termination. We should stop
54
+ Friday deploys.
55
+ `;
56
+
57
+ const NOTE_PRIYA_MD = `# Notes from Priya Nair — support lead
58
+
59
+ Ferrous emailed at about half three saying the API had been down since two. I opened a ticket and
60
+ then tried to find someone. I did not know who was on call or how to reach the pager, so I messaged
61
+ two people on the platform team who did not answer, and then Jae, who did, at around half four.
62
+
63
+ There is no written path from support to on-call for weekends. During the week I would ask in the
64
+ platform channel. On Saturday night nobody is reading it. I made three guesses at who to contact
65
+ and the third one was right, and that is the only reason this was three hours and not six.
66
+ `;
67
+
68
+ const NOTE_DAN_MD = `# Notes from Dan Walsh — platform, renewed the certificate last year
69
+
70
+ The certificate for api.northlight.example is renewed by hand once a year. I did it on 15 May last
71
+ year. There is no ACME automation for that domain because its DNS is managed by a third party and
72
+ we never finished the delegation work.
73
+
74
+ The reminder to renew it was a calendar event on Tom's calendar. Tom left in January. When his
75
+ account was closed the event went with it, and nobody had a copy. I only remembered the date
76
+ because Jae asked me on Saturday.
77
+ `;
78
+
79
+ const NOTE_SAM_MD = `# Notes from Sam Lindqvist — product
80
+
81
+ I was not online over the weekend, so this is second hand. I heard on Monday that the database
82
+ ran out of disk and that is what took the API down.
83
+
84
+ Three customers have asked for a summary they can forward internally. They do not need the
85
+ technical detail; they need to know what happened, how long it lasted, and that it will not
86
+ happen again.
87
+ `;
88
+
89
+ export type DocsResult = {
90
+ log: Markdown.Document;
91
+ notes: {
92
+ jae: Markdown.Document;
93
+ priya: Markdown.Document;
94
+ dan: Markdown.Document;
95
+ sam: Markdown.Document;
96
+ };
97
+ };
98
+
99
+ /** The record and the recollections the retro is written from. */
100
+ export const Docs: SampleSpace.Phase<DocsResult> = SampleSpace.phase('docs', {
101
+ schemas: [Markdown.Document],
102
+ run: () =>
103
+ Effect.gen(function* () {
104
+ const log = yield* Database.add(Markdown.make({ name: 'Status log', content: STATUS_LOG_MD }));
105
+ const jae = yield* Database.add(Markdown.make({ name: 'Notes — Jae Reyes', content: NOTE_JAE_MD }));
106
+ const priya = yield* Database.add(Markdown.make({ name: 'Notes — Priya Nair', content: NOTE_PRIYA_MD }));
107
+ const dan = yield* Database.add(Markdown.make({ name: 'Notes — Dan Walsh', content: NOTE_DAN_MD }));
108
+ const sam = yield* Database.add(Markdown.make({ name: 'Notes — Sam Lindqvist', content: NOTE_SAM_MD }));
109
+ return { log, notes: { jae, priya, dan, sam } };
110
+ }),
111
+ });
@@ -0,0 +1,61 @@
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
+
12
+ import { type DocsResult } from './docs.ts';
13
+ import { type TasksResult } from './tasks.ts';
14
+
15
+ export type ProjectInput = { docs: DocsResult; tasks: TasksResult };
16
+
17
+ export type ProjectResult = { project: Project.Project; instructions: Instructions.Instructions };
18
+
19
+ const INSTRUCTIONS = `You are writing the retrospective for incident 0516, when the public API was down for just over \
20
+ three hours on a Saturday morning.
21
+
22
+ The status log is the record of what happened and when. The notes are what people remember, and \
23
+ memory disagrees with the log in places. Where they disagree, the log wins, and the retrospective \
24
+ says so rather than quietly picking one. A claim that appears in a note but nowhere in the log is a \
25
+ claim, not a finding.
26
+
27
+ Keep it blameless. Name the systems and the gaps, not the people at fault; the people in the notes \
28
+ are the ones who will fix it.
29
+
30
+ File every document you write as an artifact on this project rather than leaving it in the chat, and \
31
+ turn every recommendation into a task on this project with an owner drawn from the people in the notes.`;
32
+
33
+ /** The retro as a project: the record and the notes as its artifacts, the four steps as its tasks. */
34
+ export const ProjectPhase: SampleSpace.Phase<ProjectResult, ProjectInput> = SampleSpace.phase('project', {
35
+ schemas: [Project.Project, Instructions.Instructions],
36
+ run: ({ docs, tasks }: ProjectInput) =>
37
+ Effect.gen(function* () {
38
+ const sources = [docs.log, docs.notes.jae, docs.notes.priya, docs.notes.dan, docs.notes.sam];
39
+ const instructions = yield* Database.add(
40
+ Instructions.make({
41
+ name: 'Incident 0516 retrospective',
42
+ text: INSTRUCTIONS,
43
+ objects: [...sources.map((doc) => Ref.make(doc)), Ref.make(tasks.taskSet)],
44
+ }),
45
+ );
46
+
47
+ const project = yield* Database.add(
48
+ Project.make({
49
+ name: 'Incident 0516 retrospective',
50
+ description:
51
+ 'The API certificate expired on a Saturday morning and nobody was paged for two and a half hours. Work out why, and what to change.',
52
+ status: 'active',
53
+ instructions: Ref.make(instructions),
54
+ taskSet: Ref.make(tasks.taskSet),
55
+ artifacts: sources.map((doc) => Ref.make(doc)),
56
+ }),
57
+ );
58
+
59
+ return { project, instructions };
60
+ }),
61
+ });
@@ -0,0 +1,101 @@
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, Obj, Ref } from '@dxos/echo';
9
+ import { EntityId } from '@dxos/echo/Key';
10
+ import { Task, TaskSet } from '@dxos/types';
11
+
12
+ import { daysAgo } from './util.ts';
13
+
14
+ //
15
+ // The retro as four pieces of work, in the order they depend on each other. Every one is `todo`:
16
+ // this space is a job to delegate, not a retro caught half-written.
17
+ //
18
+ // Each task names one deliverable and where it goes, so the check on a finished task is whether
19
+ // that thing exists in that place — not whether the chat said it did.
20
+ //
21
+
22
+ type TaskSeed = {
23
+ readonly title: string;
24
+ readonly description: string;
25
+ readonly estimate?: Task.Estimate;
26
+ };
27
+
28
+ const STEPS: ReadonlyArray<TaskSeed> = [
29
+ {
30
+ title: 'Reconstruct the timeline',
31
+ description:
32
+ 'One document on this project named "Timeline": what happened and when, from the status log. Where a note disagrees with the log, follow the log and record the disagreement.',
33
+ estimate: 's',
34
+ },
35
+ {
36
+ title: 'Write the retrospective',
37
+ description:
38
+ 'One document on this project named "Retrospective": what broke, why it went undetected for as long as it did, and what would have prevented or caught it. Ground every claim in the log or a named note.',
39
+ estimate: 'm',
40
+ },
41
+ {
42
+ title: 'File the action items',
43
+ description:
44
+ 'One task on this project per recommendation in the retrospective, each assigned to one of the people in the notes. Tasks, not a list in the document.',
45
+ estimate: 's',
46
+ },
47
+ {
48
+ title: 'Draft the customer notice',
49
+ description:
50
+ 'One document on this project named "Customer notice": what happened and for how long, in plain language a customer can forward. No internal names, systems or people.',
51
+ estimate: 's',
52
+ },
53
+ ];
54
+
55
+ export type TasksResult = { taskSet: TaskSet.TaskSet; tasks: Task.Task[] };
56
+
57
+ /** The four steps, each depending on the one before it. */
58
+ export const Tasks: SampleSpace.Phase<TasksResult> = SampleSpace.phase('tasks', {
59
+ schemas: [TaskSet.TaskSet, Task.Task],
60
+ run: () =>
61
+ Effect.gen(function* () {
62
+ const taskSet = yield* Database.add(
63
+ TaskSet.make({
64
+ name: 'Incident 0516 retrospective',
65
+ description: 'From the log and the notes to a filed retro.',
66
+ }),
67
+ );
68
+
69
+ const tasks = STEPS.map((step) =>
70
+ Task.make({
71
+ title: step.title,
72
+ description: step.description,
73
+ estimate: step.estimate,
74
+ status: 'todo',
75
+ history: [
76
+ {
77
+ id: EntityId.random(),
78
+ date: daysAgo(0),
79
+ event: 'created' as const,
80
+ description: 'Filed from the incident template.',
81
+ },
82
+ ],
83
+ }),
84
+ );
85
+ yield* SampleSpace.children(taskSet, tasks, (taskSet, refs) => {
86
+ taskSet.tasks = refs;
87
+ });
88
+
89
+ // The retro needs the timeline, the action items need the retro, the notice needs both.
90
+ for (const [index, task] of tasks.entries()) {
91
+ if (index > 0) {
92
+ const previous = tasks[index - 1];
93
+ Obj.update(task, (task) => {
94
+ task.dependsOn = [Ref.make(previous)];
95
+ });
96
+ }
97
+ }
98
+
99
+ return { taskSet, tasks };
100
+ }),
101
+ });
@@ -0,0 +1,24 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as SampleSpace from '@dxos/app-toolkit/SampleSpace';
6
+
7
+ /**
8
+ * The Monday after the incident, when the retro is written. Stable so regenerations are
9
+ * reproducible; override with NOW=2026-05-18 env.
10
+ */
11
+ export const REFERENCE = process.env.NOW ? new Date(process.env.NOW) : new Date('2026-05-18T09:00:00Z');
12
+
13
+ export const clock = SampleSpace.makeClock(REFERENCE);
14
+
15
+ /** ISO timestamp that many days before {@link REFERENCE}, at an optional UTC hour of that day. */
16
+ export const daysAgo = clock.daysAgo;
17
+
18
+ /** The people in the notes, as task owners. The names are the only identity a template can give them. */
19
+ export const CAST = {
20
+ jae: { role: 'user', name: 'Jae Reyes' },
21
+ priya: { role: 'user', name: 'Priya Nair' },
22
+ dan: { role: 'user', name: 'Dan Walsh' },
23
+ sam: { role: 'user', name: 'Sam Lindqvist' },
24
+ } as const;
@@ -0,0 +1,11 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export * as IncidentSpace from './incident/IncidentSpace.ts';
6
+ export * as PipelineSpace from './crm/PipelineSpace.ts';
7
+ export * as ReviewSpace from './review/ReviewSpace.ts';
8
+ export * as StockfishSpace from './stockfish/StockfishSpace.ts';
9
+ export * as TidepoolSpace from './tidepool/TidepoolSpace.ts';
10
+ export * as WeatherSpace from './weather/WeatherSpace.ts';
11
+ export * as WorkerSpace from './worker/WorkerSpace.ts';
@@ -0,0 +1,89 @@
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 * as EffectEx from '@dxos/effect/EffectEx';
9
+
10
+ import * as ReviewSpace from './ReviewSpace.ts';
11
+
12
+ // A 1×1 PNG, so the build needs no network and every image resolves inline.
13
+ const PIXEL = Uint8Array.from(
14
+ atob('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='),
15
+ (char) => char.charCodeAt(0),
16
+ );
17
+
18
+ type ArchiveObject = {
19
+ '@type'?: string;
20
+ 'id': string;
21
+ 'title'?: string;
22
+ 'status'?: string;
23
+ 'state'?: string;
24
+ 'artifacts'?: unknown[];
25
+ 'data'?: { _tag?: string };
26
+ };
27
+
28
+ const build = async (loadAsset: ReviewSpace.Options['loadAsset']) => {
29
+ const { json } = await EffectEx.runPromise(buildArchive(ReviewSpace.make({ loadAsset })));
30
+ const objects: ArchiveObject[] = JSON.parse(json).objects;
31
+ const ofType = (typename: string) => objects.filter((object) => object['@type']?.includes(typename));
32
+ return { json, objects, ofType };
33
+ };
34
+
35
+ /**
36
+ * The template is built on demand rather than committed, so this asserts its shape in place of a
37
+ * fixture: if a schema it seeds changes incompatibly, the build fails here.
38
+ */
39
+ describe('Review template', () => {
40
+ test('builds one project with tasks, pull requests and media', { timeout: 120_000 }, async ({ expect }) => {
41
+ const { json } = await build(async () => PIXEL);
42
+ const counts = histogram(json);
43
+ const countOf = (typename: string) =>
44
+ Object.entries(counts)
45
+ .filter(([type]) => type.includes(typename))
46
+ .reduce((total, [, count]) => total + count, 0);
47
+
48
+ expect(countOf('type.project')).toBe(1);
49
+ expect(countOf('type.taskSet')).toBe(1);
50
+ expect(countOf('type.task:')).toBe(7);
51
+ expect(countOf('type.pullRequest')).toBe(5);
52
+ expect(countOf('type.file')).toBe(4);
53
+ expect(countOf('type.video')).toBe(3);
54
+ });
55
+
56
+ test(
57
+ 'finished tasks carry merged PRs with media; tasks in review carry open PRs',
58
+ { timeout: 120_000 },
59
+ async ({ expect }) => {
60
+ const { ofType } = await build(async () => PIXEL);
61
+ const refersTo = (task: ArchiveObject, objects: ArchiveObject[]) =>
62
+ objects.filter((object) => JSON.stringify(task.artifacts ?? []).includes(object.id));
63
+
64
+ const pullRequests = ofType('type.pullRequest');
65
+ const media = [...ofType('type.file'), ...ofType('type.video')];
66
+ const tasks = ofType('type.task:');
67
+
68
+ const done = tasks.filter((task) => task.status === 'done');
69
+ expect(done).toHaveLength(3);
70
+ for (const task of done) {
71
+ expect(refersTo(task, pullRequests).map((pullRequest) => pullRequest.state)).toEqual(['merged']);
72
+ expect(refersTo(task, media).length).toBeGreaterThan(0);
73
+ }
74
+
75
+ const review = tasks.filter((task) => task.status === 'review');
76
+ expect(review).toHaveLength(2);
77
+ for (const task of review) {
78
+ expect(refersTo(task, pullRequests).map((pullRequest) => pullRequest.state)).toEqual(['open']);
79
+ }
80
+ },
81
+ );
82
+
83
+ test('keeps an unreachable image as an external blob naming its source', { timeout: 120_000 }, async ({ expect }) => {
84
+ const { ofType } = await build(async () => undefined);
85
+ const blobs = ofType('type.blob');
86
+ expect(blobs).toHaveLength(4);
87
+ expect(blobs.every((blob) => blob.data?._tag === 'external')).toBe(true);
88
+ });
89
+ });
@@ -0,0 +1,47 @@
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
+
12
+ import { type AssetLoader, fetchAsset, makeMedia } from './assets.ts';
13
+ import { REFERENCE } from './util.ts';
14
+ import { Work } from './work.ts';
15
+
16
+ export const TEMPLATE_ID = 'org.dxos.plugin-debug.template.review';
17
+
18
+ export type Options = {
19
+ /** Where screenshot bytes come from; defaults to fetching the pinned PR URLs. */
20
+ readonly loadAsset?: AssetLoader;
21
+ };
22
+
23
+ /**
24
+ * A review queue: one project whose finished tasks carry the merged dxos/dxos pull requests that
25
+ * delivered them, with the screenshots and demo recordings attached to those PRs, and whose tasks in
26
+ * review carry the PRs still open.
27
+ */
28
+ export const make = ({ loadAsset = fetchAsset }: Options = {}) => {
29
+ const phases = { media: makeMedia(loadAsset), work: Work };
30
+ return SampleSpace.make({
31
+ space: { name: 'Composer — Review queue', icon: 'medal-military', hue: 'green' },
32
+ reference: REFERENCE,
33
+ phases,
34
+ build: (phases) =>
35
+ Effect.gen(function* () {
36
+ const media = yield* phases.media();
37
+ return yield* phases.work(media);
38
+ }),
39
+ });
40
+ };
41
+
42
+ export const makeTemplate = (options?: Options): AppCapabilities.SpaceTemplate =>
43
+ SampleSpace.makeTemplate({
44
+ id: TEMPLATE_ID,
45
+ description: 'A project with tasks carrying real dxos pull requests, their screenshots and demo videos.',
46
+ definition: make(options),
47
+ });
@@ -0,0 +1,123 @@
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 { Blob, Database, Ref } from '@dxos/echo';
9
+ import { log } from '@dxos/log';
10
+ import { File, Video } from '@dxos/types';
11
+
12
+ //
13
+ // Media procured from dxos/dxos pull requests: the screenshots and demo recordings their authors
14
+ // linked from the PR body. Screenshots are SHA-pinned `raw.githubusercontent.com` URLs, so they
15
+ // survive the source branch being deleted and are served with `Access-Control-Allow-Origin: *`.
16
+ //
17
+
18
+ /** Resolves a URL to its bytes; `undefined` when unreachable. Injected so a headless build needs no network. */
19
+ export type AssetLoader = (url: string) => Promise<Uint8Array | undefined>;
20
+
21
+ /** Fetches over HTTP, treating any failure as unavailable so an offline apply still produces the space. */
22
+ export const fetchAsset: AssetLoader = async (url) => {
23
+ try {
24
+ const response = await fetch(url);
25
+ if (!response.ok) {
26
+ log.warn('sample asset unavailable', { url, status: response.status });
27
+ return undefined;
28
+ }
29
+ return new Uint8Array(await response.arrayBuffer());
30
+ } catch (error) {
31
+ log.warn('sample asset unavailable', { url, error });
32
+ return undefined;
33
+ }
34
+ };
35
+
36
+ const R2 = 'https://pub-39066a86073446d7b77b1c157b660bb5.r2.dev/demos';
37
+
38
+ export type ImageKey = 'railBefore' | 'railAfter' | 'oauthIdle' | 'oauthPending';
39
+
40
+ const IMAGE_SEEDS: ReadonlyArray<SampleSpace.Seed<ImageKey, { name: string; url: string }>> = [
41
+ {
42
+ key: 'railBefore',
43
+ name: 'l0-rail-before.png',
44
+ url: 'https://raw.githubusercontent.com/dxos/dxos/97e185d31046b60ee0e130bdc86553de98f356f8/.pr-assets/l0-before.png',
45
+ },
46
+ {
47
+ key: 'railAfter',
48
+ name: 'l0-rail-after.png',
49
+ url: 'https://raw.githubusercontent.com/dxos/dxos/97e185d31046b60ee0e130bdc86553de98f356f8/.pr-assets/l0-after.png',
50
+ },
51
+ {
52
+ key: 'oauthIdle',
53
+ name: 'oauth-idle.png',
54
+ url: 'https://raw.githubusercontent.com/dxos/dxos/f186f44ee72b4c4b7508b4f3f6a97f3957704c84/packages/plugins/plugin-onboarding/assets/oauth-idle.png',
55
+ },
56
+ {
57
+ key: 'oauthPending',
58
+ name: 'oauth-pending.png',
59
+ url: 'https://raw.githubusercontent.com/dxos/dxos/f186f44ee72b4c4b7508b4f3f6a97f3957704c84/packages/plugins/plugin-onboarding/assets/oauth-pending.png',
60
+ },
61
+ ];
62
+
63
+ export type VideoKey = 'toastCountdown' | 'haloLogin' | 'archify';
64
+
65
+ // Recordings stay URL-based `Video` objects: the R2 bucket sends no CORS header, so the bytes cannot
66
+ // be read into a blob from the browser, while the player embeds the URL directly.
67
+ const VIDEO_SEEDS: ReadonlyArray<SampleSpace.Seed<VideoKey, { name: string; url: string; description: string }>> = [
68
+ {
69
+ key: 'toastCountdown',
70
+ name: 'Toast countdown demo',
71
+ url: `${R2}/2026-09-04-toast-countdown/toast-countdown.webm`,
72
+ description: 'A toast counting down its remaining time in a bar, pausing on hover (dxos/dxos#12954).',
73
+ },
74
+ {
75
+ key: 'haloLogin',
76
+ name: 'Switch identity in place — login',
77
+ url: `${R2}/2026-09-23-halo-in-place-identity/halo-login.webm`,
78
+ description: 'Logging in to another identity without a reset and reload (dxos/dxos#13336).',
79
+ },
80
+ {
81
+ key: 'archify',
82
+ name: 'Archify diagrams demo',
83
+ url: `${R2}/2026-09-04-plugin-archify/archify-final.webm`,
84
+ description: 'Generating an architecture diagram of a package with Archify (dxos/dxos#12952).',
85
+ },
86
+ ];
87
+
88
+ export type MediaResult = {
89
+ images: Record<ImageKey, File.File>;
90
+ videos: Record<VideoKey, Video.Video>;
91
+ };
92
+
93
+ /**
94
+ * Images become `File`s whose blob holds the bytes inline, which every client can render without a
95
+ * storage backend. An image the loader cannot reach keeps its source URL as an external blob, so the
96
+ * space is still complete and the file says where it came from.
97
+ */
98
+ export const makeMedia = (loadAsset: AssetLoader): SampleSpace.Phase<MediaResult> =>
99
+ SampleSpace.phase('media', {
100
+ schemas: [File.File, Blob.Blob, Video.Video],
101
+ run: () =>
102
+ Effect.gen(function* () {
103
+ const images = yield* SampleSpace.seed(IMAGE_SEEDS, (seed) =>
104
+ Effect.gen(function* () {
105
+ const bytes = yield* Effect.promise(() => loadAsset(seed.url));
106
+ const blob = yield* Database.add(
107
+ Blob.make({
108
+ type: 'image/png',
109
+ size: bytes?.byteLength ?? 0,
110
+ data: bytes ? Blob.inlineData(bytes) : Blob.externalData(seed.url),
111
+ }),
112
+ );
113
+ return yield* Database.add(File.make({ name: seed.name, data: Ref.make(blob) }));
114
+ }),
115
+ );
116
+
117
+ const videos = yield* SampleSpace.seed(VIDEO_SEEDS, (seed) =>
118
+ Database.add(Video.make({ name: seed.name, url: seed.url, description: seed.description })),
119
+ );
120
+
121
+ return { images, videos };
122
+ }),
123
+ });
@@ -0,0 +1,10 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as SampleSpace from '@dxos/app-toolkit/SampleSpace';
6
+
7
+ /** Stable reference date so regenerations are reproducible. */
8
+ export const REFERENCE = new Date('2026-09-24T15:00:00Z');
9
+
10
+ export const { daysAgo } = SampleSpace.makeClock(REFERENCE);