@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,52 @@
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 { Accounts, Contacts } from './accounts.ts';
13
+ import { Inbox } from './inbox.ts';
14
+ import { PipelineBoard } from './pipeline.ts';
15
+ import { REFERENCE } from './util.ts';
16
+
17
+ const phases = {
18
+ accounts: Accounts,
19
+ contacts: Contacts,
20
+ pipeline: PipelineBoard,
21
+ inbox: Inbox,
22
+ };
23
+
24
+ /**
25
+ * A CRM template: seven accounts spread across the pipeline stages, one named contact each, a
26
+ * board whose columns are views filtered on `Organization.status`, and the mail thread behind each
27
+ * stage.
28
+ *
29
+ * Nothing is filed into a collection: Organization, Person, Pipeline and Mailbox are not
30
+ * collection-item types, so they live directly in the space DB and surface through their own
31
+ * containers and the database viewer.
32
+ */
33
+ export const make = (): SampleSpace.Definition<typeof phases, void> =>
34
+ SampleSpace.make({
35
+ space: { name: 'Northwind Sales', icon: 'handshake', hue: 'purple' },
36
+ reference: REFERENCE,
37
+ phases,
38
+ build: (phases) =>
39
+ Effect.gen(function* () {
40
+ const accounts = yield* phases.accounts();
41
+ yield* phases.contacts(accounts);
42
+ yield* phases.pipeline(accounts);
43
+ yield* phases.inbox();
44
+ }),
45
+ });
46
+
47
+ export const makeTemplate = (): AppCapabilities.SpaceTemplate =>
48
+ SampleSpace.makeTemplate({
49
+ id: 'org.dxos.plugin-debug.template.pipeline',
50
+ description: 'Seven accounts across the pipeline stages, a contact each, and the mail behind them.',
51
+ definition: make(),
52
+ });
@@ -0,0 +1,153 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as SampleSpace from '@dxos/app-toolkit/SampleSpace';
6
+ import { Database, Ref } from '@dxos/echo';
7
+ import { Organization, Person } from '@dxos/types';
8
+
9
+ //
10
+ // Accounts and the people at them. `status` is the pipeline stage: every column of the board is a
11
+ // view filtered on it, so the seeds here are what the board is a picture of.
12
+ //
13
+
14
+ export type AccountKey = 'meridian' | 'bellweather' | 'foxglove' | 'northgate' | 'quarry' | 'saltbox' | 'tinderbox';
15
+
16
+ export type AccountMap = Record<AccountKey, Organization.Organization>;
17
+
18
+ const ACCOUNT_SEEDS = [
19
+ {
20
+ key: 'meridian',
21
+ name: 'Meridian Health',
22
+ description: 'Renewed for a third year. Two hundred seats, expanding into their research arm.',
23
+ status: 'active',
24
+ website: 'https://meridianhealth.example',
25
+ },
26
+ {
27
+ key: 'bellweather',
28
+ name: 'Bellweather Logistics',
29
+ description: 'Signed in March. Rolling out to dispatch first, then the depots.',
30
+ status: 'active',
31
+ website: 'https://bellweather.example',
32
+ },
33
+ {
34
+ key: 'foxglove',
35
+ name: 'Foxglove Studios',
36
+ description: 'Verbal yes on a 40-seat plan; waiting on their finance sign-off.',
37
+ status: 'commit',
38
+ website: 'https://foxglove.example',
39
+ },
40
+ {
41
+ key: 'northgate',
42
+ name: 'Northgate Credit Union',
43
+ description: 'Security review passed. Procurement is the only thing left.',
44
+ status: 'commit',
45
+ website: 'https://northgatecu.example',
46
+ },
47
+ {
48
+ key: 'quarry',
49
+ name: 'Quarry Analytics',
50
+ description: 'Pilot running with eight users. Champion is the head of data.',
51
+ status: 'qualified',
52
+ website: 'https://quarry.example',
53
+ },
54
+ {
55
+ key: 'saltbox',
56
+ name: 'Saltbox Provisions',
57
+ description: 'Inbound from the newsletter. Budget unclear, timeline unclear.',
58
+ status: 'prospect',
59
+ website: 'https://saltbox.example',
60
+ },
61
+ {
62
+ key: 'tinderbox',
63
+ name: 'Tinderbox Media',
64
+ description: 'Went quiet after the second call. Re-engage next quarter, or close it out.',
65
+ status: 'reject',
66
+ website: 'https://tinderbox.example',
67
+ },
68
+ ] as const;
69
+
70
+ /** The accounts, each already at its pipeline stage. */
71
+ export const Accounts: SampleSpace.Phase<AccountMap> = SampleSpace.phase('accounts', {
72
+ schemas: [Organization.Organization],
73
+ run: () =>
74
+ SampleSpace.seed(ACCOUNT_SEEDS, (seed) =>
75
+ Database.add(
76
+ Organization.make({
77
+ name: seed.name,
78
+ description: seed.description,
79
+ status: seed.status,
80
+ website: seed.website,
81
+ }),
82
+ ),
83
+ ),
84
+ });
85
+
86
+ export type ContactKey = 'dara' | 'wes' | 'ines' | 'gil' | 'mo' | 'ruth' | 'jonas';
87
+
88
+ export type ContactMap = Record<ContactKey, Person.Person>;
89
+
90
+ const CONTACT_SEEDS = [
91
+ {
92
+ key: 'dara',
93
+ fullName: 'Dara Osei',
94
+ jobTitle: 'Director of IT',
95
+ accountKey: 'meridian',
96
+ email: 'dara.osei@meridianhealth.example',
97
+ },
98
+ {
99
+ key: 'wes',
100
+ fullName: 'Wes Kowalski',
101
+ jobTitle: 'Head of Dispatch',
102
+ accountKey: 'bellweather',
103
+ email: 'wes@bellweather.example',
104
+ },
105
+ {
106
+ key: 'ines',
107
+ fullName: 'Inés Baptista',
108
+ jobTitle: 'Studio Producer',
109
+ accountKey: 'foxglove',
110
+ email: 'ines@foxglove.example',
111
+ },
112
+ {
113
+ key: 'gil',
114
+ fullName: 'Gil Ferreira',
115
+ jobTitle: 'CISO',
116
+ accountKey: 'northgate',
117
+ email: 'g.ferreira@northgatecu.example',
118
+ },
119
+ { key: 'mo', fullName: 'Mo Haddad', jobTitle: 'Head of Data', accountKey: 'quarry', email: 'mo@quarry.example' },
120
+ { key: 'ruth', fullName: 'Ruth Lindqvist', jobTitle: 'Owner', accountKey: 'saltbox', email: 'ruth@saltbox.example' },
121
+ {
122
+ key: 'jonas',
123
+ fullName: 'Jonas Vail',
124
+ jobTitle: 'Creative Director',
125
+ accountKey: 'tinderbox',
126
+ email: 'jonas@tinderbox.example',
127
+ },
128
+ ] as const;
129
+
130
+ /** One named contact per account — whoever the mail in this space is actually with. */
131
+ export const Contacts: SampleSpace.Phase<ContactMap, AccountMap> = SampleSpace.phase('contacts', {
132
+ schemas: [Person.Person],
133
+ run: (accounts: AccountMap) =>
134
+ SampleSpace.seed(CONTACT_SEEDS, (seed) =>
135
+ Database.add(
136
+ Person.make({
137
+ fullName: seed.fullName,
138
+ jobTitle: seed.jobTitle,
139
+ organization: Ref.make(accounts[seed.accountKey]),
140
+ emails: [{ label: 'Work', value: seed.email }],
141
+ }),
142
+ ),
143
+ ),
144
+ });
145
+
146
+ /** Contact seeds, for the phases that need a name and address rather than the object. */
147
+ export const contactSeed = (key: ContactKey) => {
148
+ const seed = CONTACT_SEEDS.find((seed) => seed.key === key);
149
+ if (!seed) {
150
+ throw new Error(`No CONTACT_SEEDS entry for "${key}".`);
151
+ }
152
+ return seed;
153
+ };
@@ -0,0 +1,158 @@
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, Feed, Obj, Tag } from '@dxos/echo';
9
+ import * as Mailbox from '@dxos/plugin-inbox/Mailbox';
10
+ import * as SystemTags from '@dxos/plugin-inbox/SystemTags';
11
+ import { TagIndex } from '@dxos/schema';
12
+ import { type Actor, type ContentBlock, Message } from '@dxos/types';
13
+
14
+ import { type ContactKey, contactSeed } from './accounts.ts';
15
+ import { daysAgo } from './util.ts';
16
+
17
+ //
18
+ // The account mail: the thread behind each pipeline stage.
19
+ //
20
+ // Deliberately small — the point is that a stage has a conversation attached, not that the mailbox
21
+ // is full. Threading is by subject: a reply reuses its root's subject, so the conversation list
22
+ // groups them without an id scheme.
23
+ //
24
+
25
+ const OWNER: Actor.Actor = { role: 'user', name: 'Priya Raman', email: 'priya@northwind-sales.example' };
26
+
27
+ type EmailSeed = {
28
+ readonly from: ContactKey | 'owner';
29
+ readonly subject: string;
30
+ readonly body: string;
31
+ /** Days before the reference date. */
32
+ readonly daysAgo: number;
33
+ readonly tags?: ReadonlyArray<SystemTags.SystemTagId>;
34
+ };
35
+
36
+ const EMAIL_SEEDS: ReadonlyArray<EmailSeed> = [
37
+ {
38
+ from: 'ruth',
39
+ subject: 'Question from the newsletter',
40
+ body: 'We are twelve people and drowning in spreadsheets. Is there a plan that makes sense at our size?',
41
+ daysAgo: 12,
42
+ },
43
+ {
44
+ from: 'owner',
45
+ subject: 'Re: Question from the newsletter',
46
+ body: 'There is — the team plan starts at ten seats. Happy to walk you through it. Are you free Thursday?',
47
+ daysAgo: 11,
48
+ },
49
+ {
50
+ from: 'mo',
51
+ subject: 'Pilot week two',
52
+ body: 'Eight of us are in it daily now. The import took a morning and nobody has asked me to undo it, which is high praise here.',
53
+ daysAgo: 9,
54
+ tags: ['important'],
55
+ },
56
+ {
57
+ from: 'gil',
58
+ subject: 'Security review — outcome',
59
+ body: 'Review is closed with no findings. Procurement has the paperwork; expect two weeks of silence and then a PO.',
60
+ daysAgo: 6,
61
+ tags: ['important', 'starred'],
62
+ },
63
+ {
64
+ from: 'ines',
65
+ subject: 'Finance sign-off',
66
+ body: 'We are a yes at 40 seats. Finance wants the invoice dated next quarter — workable?',
67
+ daysAgo: 4,
68
+ tags: ['starred'],
69
+ },
70
+ {
71
+ from: 'owner',
72
+ subject: 'Re: Finance sign-off',
73
+ body: 'Workable. I will date it the first of the quarter and note the seat count on the order form.',
74
+ daysAgo: 4,
75
+ },
76
+ {
77
+ from: 'dara',
78
+ subject: 'Adding the research arm',
79
+ body: 'Renewal is signed. Separately: research wants in, roughly 60 more seats. Who do I talk to about pricing that?',
80
+ daysAgo: 2,
81
+ tags: ['important'],
82
+ },
83
+ {
84
+ from: 'wes',
85
+ subject: 'Depot rollout order',
86
+ body: 'Dispatch is live and quiet. We would like to do the depots north-to-south rather than all at once.',
87
+ daysAgo: 1,
88
+ },
89
+ ];
90
+
91
+ const textBlock = (text: string): ContentBlock.Text => ({ _tag: 'text', text }) satisfies ContentBlock.Text;
92
+
93
+ const senderOf = (seed: EmailSeed): Actor.Actor => {
94
+ if (seed.from === 'owner') {
95
+ return OWNER;
96
+ }
97
+ const { fullName, email } = contactSeed(seed.from);
98
+ return { role: 'user', name: fullName, email };
99
+ };
100
+
101
+ // Strip a reply prefix so a reply lands in its root's thread.
102
+ const threadIdFor = (subject: string): string =>
103
+ `thread-${
104
+ subject
105
+ .replace(/^(\s*(re|fwd?):\s*)+/i, '')
106
+ .trim()
107
+ .normalize('NFKD')
108
+ .replace(/[^a-zA-Z0-9]+/g, '-')
109
+ .replace(/^-+|-+$/g, '')
110
+ .toLowerCase() || 'thread'
111
+ }`;
112
+
113
+ export type InboxResult = { mailbox: Mailbox.Mailbox; messages: Message.Message[] };
114
+
115
+ /**
116
+ * The shared sales inbox. Mail the owner sent is tagged `sent`; everything else is `inbox`, which is
117
+ * what the mailbox's folders resolve against. Feed messages are immutable, so tag membership lives
118
+ * in the mailbox's child `TagIndex`.
119
+ */
120
+ export const Inbox: SampleSpace.Phase<InboxResult> = SampleSpace.phase('inbox', {
121
+ schemas: [Mailbox.Mailbox, Message.Message, TagIndex.TagIndex, Tag.Tag, Feed.Feed],
122
+ run: () =>
123
+ Effect.gen(function* () {
124
+ const mailbox = yield* Database.add(Mailbox.make({ name: 'Sales' }));
125
+ const index = mailbox.tags.target;
126
+ const feed = mailbox.feed.target;
127
+ if (!index || !feed) {
128
+ return yield* Effect.fail(new SampleSpace.SampleSpaceError({ context: { reason: 'mailbox-incomplete' } }));
129
+ }
130
+
131
+ const messages = EMAIL_SEEDS.map((seed) => {
132
+ const threadId = threadIdFor(seed.subject);
133
+ return Message.make({
134
+ created: daysAgo(seed.daysAgo),
135
+ sender: senderOf(seed),
136
+ blocks: [textBlock(seed.body)],
137
+ threadId,
138
+ properties: { subject: seed.subject, threadId },
139
+ });
140
+ });
141
+
142
+ yield* SampleSpace.tagBatch(
143
+ messages.flatMap((message, index) => {
144
+ const seed = EMAIL_SEEDS[index];
145
+ const keys = [...(seed.from === 'owner' ? ['sent'] : ['inbox']), ...(seed.tags ?? [])];
146
+ return keys.map((key) => ({ object: message, key }));
147
+ }),
148
+ { index, resolve: (db, key) => SystemTags.findOrCreateSystemTag(db, key as SystemTags.SystemTagId) },
149
+ );
150
+
151
+ Obj.update(mailbox, (mailbox) => {
152
+ mailbox.subscriptions = Mailbox.deriveSubscriptions(messages);
153
+ });
154
+
155
+ yield* SampleSpace.appendToFeed(feed, messages);
156
+ return { mailbox, messages };
157
+ }),
158
+ });
@@ -0,0 +1,70 @@
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, Filter, JsonSchema, Query, Ref, View } from '@dxos/echo';
9
+ import { ViewModel } from '@dxos/schema';
10
+ import { Organization, Pipeline } from '@dxos/types';
11
+
12
+ import { type AccountMap } from './accounts.ts';
13
+
14
+ //
15
+ // The pipeline board.
16
+ //
17
+ // A `Pipeline` column is a `View` plus an explicit `order` of object ids, so each stage is a query
18
+ // (`status = 'qualified'`) rather than a hand-maintained membership list — an account moves stage by
19
+ // having its `status` changed, which is what the board's drag does at runtime.
20
+ //
21
+
22
+ const STAGES = [
23
+ { name: 'Prospect', status: 'prospect' },
24
+ { name: 'Qualified', status: 'qualified' },
25
+ { name: 'Commit', status: 'commit' },
26
+ { name: 'Closed won', status: 'active' },
27
+ { name: 'Closed lost', status: 'reject' },
28
+ ] as const;
29
+
30
+ const FIELDS = ['name', 'status', 'website', 'description'];
31
+
32
+ export type PipelineResult = { pipeline: Pipeline.Pipeline };
33
+
34
+ /** The board, plus a Table over every account for the flat view of the same data. */
35
+ export const PipelineBoard: SampleSpace.Phase<PipelineResult, AccountMap> = SampleSpace.phase('pipeline', {
36
+ schemas: [Pipeline.Pipeline, View.View],
37
+ run: (accounts: AccountMap) =>
38
+ Effect.gen(function* () {
39
+ const jsonSchema = JsonSchema.toJsonSchema(Organization.Organization);
40
+
41
+ const columns = yield* Effect.forEach(STAGES, (stage) =>
42
+ Effect.gen(function* () {
43
+ const view = yield* Database.add(
44
+ ViewModel.make({
45
+ query: Query.select(Filter.type(Organization.Organization, { status: stage.status })),
46
+ queryRaw: undefined,
47
+ jsonSchema,
48
+ fields: FIELDS,
49
+ }),
50
+ );
51
+ // The column's order is explicit so a board that has been rearranged keeps its order; the
52
+ // seeds are listed in the order the stage should read.
53
+ const order = Object.values(accounts)
54
+ .filter((account) => account.status === stage.status)
55
+ .map((account) => account.id);
56
+ return { name: stage.name, order, view: Ref.make(view) };
57
+ }),
58
+ );
59
+
60
+ const pipeline = yield* Database.add(
61
+ Pipeline.make({
62
+ name: 'Sales pipeline',
63
+ description: 'Every account, by stage. Moving a card changes the account status.',
64
+ columns,
65
+ }),
66
+ );
67
+
68
+ return { pipeline };
69
+ }),
70
+ });
@@ -0,0 +1,18 @@
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. Override with NOW=2026-05-20 env. */
8
+ export const REFERENCE = process.env.NOW ? new Date(process.env.NOW) : new Date('2026-05-20T15:00:00Z');
9
+
10
+ /**
11
+ * Bound to the same reference the definition declares, so the pure content builders can date their
12
+ * objects without every one of them being an effect.
13
+ */
14
+ export const clock = SampleSpace.makeClock(REFERENCE);
15
+
16
+ export const daysAgo = clock.daysAgo;
17
+
18
+ export const daysFromNow = clock.daysFromNow;
@@ -0,0 +1,68 @@
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 IncidentSpace from './IncidentSpace.ts';
11
+
12
+ /**
13
+ * Built on demand rather than committed, so this asserts the shape in place of a fixture: if a
14
+ * schema it seeds changes incompatibly, the build fails here.
15
+ */
16
+ describe('Incident template', () => {
17
+ test('builds the project, its sources and its four steps', { timeout: 120_000 }, async ({ expect }) => {
18
+ const { json, objectCount } = await EffectEx.runPromise(buildArchive(IncidentSpace.make()));
19
+ const counts = histogram(json);
20
+ const countOf = (typename: string) =>
21
+ Object.entries(counts)
22
+ .filter(([type]) => type.includes(typename))
23
+ .reduce((total, [, count]) => total + count, 0);
24
+
25
+ expect(objectCount).toBeGreaterThan(0);
26
+ expect(countOf('type.project')).toBe(1);
27
+ expect(countOf('type.instructions')).toBe(1);
28
+ expect(countOf('type.taskSet')).toBe(1);
29
+ // The log and four notes. The retro, timeline and notice are the work, so they are absent.
30
+ expect(countOf('type.document')).toBe(5);
31
+ expect(countOf('type.task:')).toBe(4);
32
+ });
33
+
34
+ test('every step is todo and each depends on the one before it', { timeout: 120_000 }, async ({ expect }) => {
35
+ const { json } = await EffectEx.runPromise(buildArchive(IncidentSpace.make()));
36
+ const objects: Array<{ '@type'?: string; 'title'?: string; 'status'?: string; 'dependsOn'?: unknown }> =
37
+ JSON.parse(json).objects;
38
+ const tasks = objects.filter((object) => object['@type']?.includes('type.task:'));
39
+
40
+ expect(tasks.map((task) => task.title)).toEqual([
41
+ 'Reconstruct the timeline',
42
+ 'Write the retrospective',
43
+ 'File the action items',
44
+ 'Draft the customer notice',
45
+ ]);
46
+ expect(tasks.every((task) => task.status === 'todo')).toBe(true);
47
+ expect(tasks.filter((task) => Array.isArray(task.dependsOn) && task.dependsOn.length > 0)).toHaveLength(3);
48
+ });
49
+
50
+ test(
51
+ 'the log contradicts the notes on the points the retro must get right',
52
+ { timeout: 120_000 },
53
+ async ({ expect }) => {
54
+ const { json } = await EffectEx.runPromise(buildArchive(IncidentSpace.make()));
55
+ const objects: Array<{ '@type'?: string; 'content'?: string }> = JSON.parse(json).objects;
56
+ const texts = objects
57
+ .filter((object) => object['@type']?.includes('type.text'))
58
+ .map((object) => object.content ?? '');
59
+ const all = texts.join('\n');
60
+
61
+ // The distractors are present in the notes, and the log rules each one out.
62
+ expect(all).toContain('Friday deploys');
63
+ expect(all).toContain('No deploys');
64
+ expect(all).toContain('ran out of disk');
65
+ expect(all).toContain('Database disk usage held');
66
+ },
67
+ );
68
+ });
@@ -0,0 +1,61 @@
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 { ProjectPhase } from './project.ts';
15
+ import { Tasks } from './tasks.ts';
16
+ import { REFERENCE } from './util.ts';
17
+
18
+ const phases = {
19
+ docs: Docs,
20
+ tasks: Tasks,
21
+ project: ProjectPhase,
22
+ };
23
+
24
+ /**
25
+ * An outage retrospective to delegate: a status log, four people's notes, and the four tasks that turn
26
+ * them into a filed retro with owned action items and a customer notice.
27
+ *
28
+ * Engineering in setting, not in kind. The technical cause is a certificate that expired, and the log
29
+ * states it outright; nothing here needs code read or written. The work is in the notes — a page sent
30
+ * to someone who left the team, a renewal reminder on a departed colleague's calendar, a support lead
31
+ * guessing who to call — and in holding them against the log, which contradicts two of them. That is
32
+ * the evaluation: does the retro recommend what the evidence supports, or what the loudest note says.
33
+ */
34
+ export const make = (): SampleSpace.Definition<typeof phases, void> =>
35
+ SampleSpace.make({
36
+ space: { name: 'Incident 0516 retrospective', icon: 'stethoscope', hue: 'rose' },
37
+ reference: REFERENCE,
38
+ phases,
39
+ build: (phases) =>
40
+ Effect.gen(function* () {
41
+ const docs = yield* phases.docs();
42
+ const tasks = yield* phases.tasks();
43
+ yield* phases.project({ docs, tasks });
44
+
45
+ // The root holds collections only; the project and its tasks surface through their own containers.
46
+ yield* SampleSpace.collection('Sources', [
47
+ Ref.make(docs.log),
48
+ Ref.make(docs.notes.jae),
49
+ Ref.make(docs.notes.priya),
50
+ Ref.make(docs.notes.dan),
51
+ Ref.make(docs.notes.sam),
52
+ ]);
53
+ }),
54
+ });
55
+
56
+ export const makeTemplate = (): AppCapabilities.SpaceTemplate =>
57
+ SampleSpace.makeTemplate({
58
+ id: 'org.dxos.plugin-debug.template.incident',
59
+ description: "A status log, four people's notes, and the four tasks that turn them into a filed retro.",
60
+ definition: make(),
61
+ });