@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
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-DebugSpaceObjectsPanel.mjs","names":[],"sources":["../../src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx"],"sourcesContent":["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { ObjectsTree } from '@dxos/devtools';\nimport { type Entity, Filter, Obj, Query } from '@dxos/echo';\nimport { useQuery } from '@dxos/echo-react';\nimport { type EntityId } from '@dxos/keys';\nimport { Clipboard, Grid, Input, Panel, ScrollArea, Toolbar } from '@dxos/react-ui';\nimport { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';\n\nexport type DebugSpaceObjectsPanelProps = AppSurface.SpaceArticleProps & {\n onOpen?: (object: Obj.Unknown) => void;\n canOpen?: (entity: Entity.Snapshot) => boolean;\n};\n\nexport const DebugSpaceObjectsPanel = ({ space, onOpen, canOpen }: DebugSpaceObjectsPanelProps) => {\n const [selectedId, setSelectedId] = useState<EntityId | null>(null);\n const [selectedObject] = useQuery(\n space.db,\n selectedId ? Query.select(Filter.id(selectedId)) : Query.select(Filter.nothing()),\n );\n\n return (\n <Clipboard.Provider>\n <Panel.Root>\n <Panel.Toolbar asChild>\n <Toolbar.Root>\n <Input.Root>\n <Input.TextInput disabled placeholder='Search...' />\n </Input.Root>\n </Toolbar.Root>\n </Panel.Toolbar>\n <Panel.Content asChild>\n <Grid rows={2} classNames='divide-y divide-subdued-separator'>\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <ObjectsTree\n db={space.db}\n onSelect={(entity) => setSelectedId(entity.id)}\n onOpen={onOpen}\n canOpen={canOpen}\n />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n {selectedObject && <JsonHighlighter classNames='p-1' data={selectedObject} />}\n </Grid>\n </Panel.Content>\n </Panel.Root>\n </Clipboard.Provider>\n );\n};\n\nDebugSpaceObjectsPanel.displayName = 'DebugSpaceObjectsPanel';\n"],"mappings":";;;;;;;;AAmBA,IAAa,0BAA0B,EAAE,OAAO,QAAQ,cAA2C;CACjG,MAAM,CAAC,YAAY,iBAAiB,SAA0B,IAAI;CAClE,MAAM,CAAC,kBAAkB,SACvB,MAAM,IACN,aAAa,MAAM,OAAO,OAAO,GAAG,UAAU,CAAC,IAAI,MAAM,OAAO,OAAO,QAAQ,CAAC,CAClF;CAEA,OACE,oBAAC,UAAU,UAAX,EAAA,UACE,qBAAC,MAAM,MAAP,EAAA,UAAA,CACE,oBAAC,MAAM,SAAP;EAAe,SAAA;EACb,UAAA,oBAAC,QAAQ,MAAT,EAAA,UACE,oBAAC,MAAM,MAAP,EAAA,UACE,oBAAC,MAAM,WAAP;GAAiB,UAAA;GAAS,aAAY;EAAa,CAAA,EACzC,CAAA,EACA,CAAA;CACD,CAAA,GACf,oBAAC,MAAM,SAAP;EAAe,SAAA;EACb,UAAA,qBAAC,MAAD;GAAM,MAAM;GAAG,YAAW;GAA1B,UAAA,CACE,oBAAC,WAAW,MAAZ,EAAA,UACE,oBAAC,WAAW,UAAZ,EAAA,UACE,oBAAC,aAAD;IACE,IAAI,MAAM;IACV,WAAW,WAAW,cAAc,OAAO,EAAE;IACrC;IACC;GACV,CAAA,EACkB,CAAA,EACN,CAAA,GAChB,kBAAkB,oBAAC,iBAAD;IAAiB,YAAW;IAAM,MAAM;GAAiB,CAAA,CACxE;;CACO,CAAA,CACL,EAAA,CAAA,EACM,CAAA;AAExB;AAEA,uBAAuB,cAAc"}
1
+ {"version":3,"file":"chunk-DebugSpaceObjectsPanel.mjs","names":[],"sources":["../../src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx"],"sourcesContent":["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport type * as AppSurface from '@dxos/app-toolkit/AppSurface';\nimport { ObjectsTree } from '@dxos/devtools';\nimport { type Entity, Filter, Obj, Query } from '@dxos/echo';\nimport { useQuery } from '@dxos/echo-react';\nimport { type EntityId } from '@dxos/keys';\nimport { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport * as Icon from '@dxos/react-ui/Icon';\nimport * as Input from '@dxos/react-ui/Input';\nimport * as Layout from '@dxos/react-ui/Layout';\nimport * as Panel from '@dxos/react-ui/Panel';\nimport * as ScrollArea from '@dxos/react-ui/ScrollArea';\nimport * as Toolbar from '@dxos/react-ui/Toolbar';\n\nexport type DebugSpaceObjectsPanelProps = AppSurface.SpaceArticleProps & {\n onOpen?: (object: Obj.Unknown) => void;\n canOpen?: (entity: Entity.Snapshot) => boolean;\n};\n\nexport const DebugSpaceObjectsPanel = ({ space, onOpen, canOpen }: DebugSpaceObjectsPanelProps) => {\n const [selectedId, setSelectedId] = useState<EntityId | null>(null);\n const [filter, setFilter] = useState('');\n // TODO(burdon): Guard.\n const [selectedObject] = useQuery(\n space.db,\n selectedId ? Query.select(Filter.id(selectedId)) : Query.select(Filter.nothing()),\n );\n\n return (\n <Panel.Root>\n <Panel.Header>\n <Toolbar.Root>\n <Input.Root\n placeholder='Search...'\n aria-label='Search'\n noAutoFill\n value={filter}\n onChange={(event) => setFilter(event.target.value)}\n end={<Icon.Icon icon='ph--magnifying-glass--regular' />}\n />\n </Toolbar.Root>\n </Panel.Header>\n <Panel.Body asChild>\n <Layout.Grid grow rows={2} classNames='divide-y divide-separator-subtle'>\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <ObjectsTree\n db={space.db}\n filter={filter}\n onSelect={(entity) => setSelectedId(entity.id)}\n onOpen={onOpen}\n canOpen={canOpen}\n />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n {selectedObject && <JsonHighlighter classNames='p-1' data={selectedObject} />}\n </Layout.Grid>\n </Panel.Body>\n </Panel.Root>\n );\n};\n\nDebugSpaceObjectsPanel.displayName = 'DebugSpaceObjectsPanel';\n"],"mappings":";;;;;;;;;;;;;AAwBA,IAAa,0BAA0B,EAAE,OAAO,QAAQ,cAA2C;CACjG,MAAM,CAAC,YAAY,iBAAiB,SAA0B,IAAI;CAClE,MAAM,CAAC,QAAQ,aAAa,SAAS,EAAE;CAEvC,MAAM,CAAC,kBAAkB,SACvB,MAAM,IACN,aAAa,MAAM,OAAO,OAAO,GAAG,UAAU,CAAC,IAAI,MAAM,OAAO,OAAO,QAAQ,CAAC,CAClF;CAEA,OACE,qBAAC,MAAM,MAAP,EAAA,UAAA,CACE,oBAAC,MAAM,QAAP,EAAA,UACE,oBAAC,QAAQ,MAAT,EAAA,UACE,oBAAC,MAAM,MAAP;EACE,aAAY;EACZ,cAAW;EACX,YAAA;EACA,OAAO;EACP,WAAW,UAAU,UAAU,MAAM,OAAO,KAAK;EACjD,KAAK,oBAAC,KAAK,MAAN,EAAW,MAAK,gCAAiC,CAAA;CACvD,CAAA,EACW,CAAA,EACF,CAAA,GACd,oBAAC,MAAM,MAAP;EAAY,SAAA;EACV,UAAA,qBAAC,OAAO,MAAR;GAAa,MAAA;GAAK,MAAM;GAAG,YAAW;GAAtC,UAAA,CACE,oBAAC,WAAW,MAAZ,EAAA,UACE,oBAAC,WAAW,UAAZ,EAAA,UACE,oBAAC,aAAD;IACE,IAAI,MAAM;IACF;IACR,WAAW,WAAW,cAAc,OAAO,EAAE;IACrC;IACC;GACV,CAAA,EACkB,CAAA,EACN,CAAA,GAChB,kBAAkB,oBAAC,iBAAD;IAAiB,YAAW;IAAM,MAAM;GAAiB,CAAA,CACjE;;CACH,CAAA,CACF,EAAA,CAAA;AAEhB;AAEA,uBAAuB,cAAc"}
@@ -1,9 +1,9 @@
1
1
  import { useEffect, useRef, useState } from "react";
2
- import { IconButton } from "@dxos/react-ui";
3
- import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
2
+ import * as Button from "@dxos/react-ui/Button";
3
+ import { Fragment, jsx } from "react/jsx-runtime";
4
+ import * as StatusBar from "@dxos/plugin-status-bar/StatusBar";
4
5
  import "@dxos/async";
5
- import { StatusBar } from "@dxos/plugin-status-bar/components";
6
- import { ConnectionState } from "@dxos/protocols/proto/dxos/client/services";
6
+ import { ConnectionState } from "@dxos/protocols/buf/dxos/client/services_pb";
7
7
  import { useNetworkStatus } from "@dxos/react-client/mesh";
8
8
  //#region src/containers/DebugStatus/DebugStatus.tsx
9
9
  var styles = {
@@ -36,7 +36,7 @@ var ErrorIndicator = () => {
36
36
  errorRef.current = null;
37
37
  forceUpdate({});
38
38
  };
39
- if (errorRef.current) return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(IconButton, {
39
+ if (errorRef.current) return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(Button.Root, {
40
40
  variant: "ghost",
41
41
  icon: "ph--warning-circle--duotone",
42
42
  iconOnly: true,
@@ -44,7 +44,7 @@ var ErrorIndicator = () => {
44
44
  classNames: styles.error,
45
45
  onClick: handleReset
46
46
  }) });
47
- else return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(IconButton, {
47
+ else return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(Button.Root, {
48
48
  variant: "ghost",
49
49
  icon: "ph--check--regular",
50
50
  iconOnly: true,
@@ -60,13 +60,13 @@ var SwarmIndicator = () => {
60
60
  useEffect(() => {
61
61
  setState(swarm === ConnectionState.ONLINE ? 0 : 1);
62
62
  }, [swarm]);
63
- if (state === 0) return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(IconButton, {
63
+ if (state === 0) return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(Button.Root, {
64
64
  variant: "ghost",
65
65
  icon: "ph--lightning--regular",
66
66
  iconOnly: true,
67
67
  label: "Connected to swarm."
68
68
  }) });
69
- else return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(IconButton, {
69
+ else return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(Button.Root, {
70
70
  variant: "ghost",
71
71
  icon: "ph--lightning-slash--regular",
72
72
  iconOnly: true,
@@ -80,21 +80,21 @@ var SwarmIndicator = () => {
80
80
  var SavingIndicator = () => {
81
81
  const [state, _setState] = useState(0);
82
82
  switch (state) {
83
- case 2: return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(IconButton, {
83
+ case 2: return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(Button.Root, {
84
84
  variant: "ghost",
85
85
  icon: "ph--circle--duotone",
86
86
  iconOnly: true,
87
87
  label: "Edit not saved.",
88
88
  classNames: styles.warning
89
89
  }) });
90
- case 1: return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(IconButton, {
90
+ case 1: return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(Button.Root, {
91
91
  variant: "ghost",
92
92
  icon: "ph--circle--duotone",
93
93
  iconOnly: true,
94
94
  label: "Saving...",
95
95
  classNames: styles.success
96
96
  }) });
97
- default: return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(IconButton, {
97
+ default: return /* @__PURE__ */ jsx(StatusBar.Item, { children: /* @__PURE__ */ jsx(Button.Root, {
98
98
  variant: "ghost",
99
99
  icon: "ph--circle--duotone",
100
100
  iconOnly: true,
@@ -108,7 +108,7 @@ var indicators = [
108
108
  ErrorIndicator
109
109
  ];
110
110
  var DebugStatus = () => {
111
- return /* @__PURE__ */ jsx(Fragment$1, { children: indicators.map((Indicator) => /* @__PURE__ */ jsx(Indicator, {}, Indicator.name)) });
111
+ return /* @__PURE__ */ jsx(Fragment, { children: indicators.map((Indicator) => /* @__PURE__ */ jsx(Indicator, {}, Indicator.name)) });
112
112
  };
113
113
  DebugStatus.displayName = "DebugStatus";
114
114
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-DebugStatus.mjs","names":[],"sources":["../../src/containers/DebugStatus/DebugStatus.tsx"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { TimeoutError } from '@dxos/async';\nimport { StatusBar } from '@dxos/plugin-status-bar/components';\nimport { ConnectionState } from '@dxos/protocols/proto/dxos/client/services';\nimport { useNetworkStatus } from '@dxos/react-client/mesh';\nimport { IconButton } from '@dxos/react-ui';\n\nconst styles = {\n success: 'text-sky-300 dark:text-green-700',\n warning: 'text-orange-300 dark:text-orange-600',\n error: 'text-red-300 dark:text-red-600',\n};\n\n// TODO(burdon): Move out of debug plugin.\n// TODO(burdon): Make pluggable (move indicators to relevant plugins).\n// TODO(burdon): Vault heartbeat indicator (global scope)?\n\n/**\n * Ensure light doesn't flicker immediately after start.\n */\n// TODO(burdon): Move to @dxos/async (debounce?)\nconst _timer = (cb: (err?: Error) => void, options?: { min?: number; max?: number }) => {\n const min = options?.min ?? 500;\n let start: number;\n let pending: NodeJS.Timeout;\n let timeout: NodeJS.Timeout;\n return {\n start: () => {\n start = Date.now();\n clearTimeout(pending);\n if (options?.max) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n cb(new TimeoutError(options.max));\n }, options.max);\n }\n },\n stop: () => {\n clearTimeout(timeout);\n const delta = Date.now() - start;\n if (delta < min) {\n pending = setTimeout(() => {\n cb();\n }, min - delta);\n }\n },\n };\n};\n\n/**\n * Global error handler.\n */\n// TODO(burdon): Integrate with Sentry?\nconst ErrorIndicator = () => {\n const [, forceUpdate] = useState({});\n const errorRef = useRef<Error>(null);\n useEffect(() => {\n const errorListener = (event: any) => {\n const error: Error = event.error ?? event.reason;\n if (errorRef.current !== error) {\n errorRef.current = error;\n forceUpdate({});\n }\n };\n\n // TODO(burdon): Register globally?\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/error_event\n window.addEventListener('error', errorListener);\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event\n window.addEventListener('unhandledrejection', errorListener);\n\n return () => {\n window.removeEventListener('error', errorListener);\n window.removeEventListener('unhandledrejection', errorListener);\n };\n }, []);\n\n const handleReset = () => {\n errorRef.current = null;\n forceUpdate({});\n };\n\n if (errorRef.current) {\n return (\n <StatusBar.Item>\n <IconButton\n variant='ghost'\n icon='ph--warning-circle--duotone'\n iconOnly\n label={errorRef.current.message}\n classNames={styles.error}\n onClick={handleReset}\n />\n </StatusBar.Item>\n );\n } else {\n return (\n <StatusBar.Item>\n <IconButton variant='ghost' icon='ph--check--regular' iconOnly label='No errors.' />\n </StatusBar.Item>\n );\n }\n};\n\n/**\n * Swarm connection handler.\n */\nconst SwarmIndicator = () => {\n const [state, setState] = useState(0);\n const { swarm } = useNetworkStatus();\n useEffect(() => {\n setState(swarm === ConnectionState.ONLINE ? 0 : 1);\n }, [swarm]);\n\n if (state === 0) {\n return (\n <StatusBar.Item>\n <IconButton variant='ghost' icon='ph--lightning--regular' iconOnly label='Connected to swarm.' />\n </StatusBar.Item>\n );\n } else {\n return (\n <StatusBar.Item>\n <IconButton\n variant='ghost'\n icon='ph--lightning-slash--regular'\n iconOnly\n label='Disconnected from swarm.'\n classNames={styles.warning}\n />\n </StatusBar.Item>\n );\n }\n};\n\n/**\n * Data saving indicator.\n */\n// TODO(burdon): Merge with SaveStatus.\nconst SavingIndicator = () => {\n const [state, _setState] = useState(0);\n // TODO(dmaretskyi): Fix this when we have save status for automerge.\n // useEffect(() => {\n // if (!space) {\n // return;\n // }\n // const { start, stop } = timer(() => setState(0), { min: 250 });\n // return space.db.pendingBatch.on(({ duration, error }) => {\n // if (error) {\n // setState(2);\n // stop();\n // } else if (duration === undefined) {\n // setState(1);\n // start();\n // } else {\n // stop();\n // }\n // });\n // }, [space]);\n\n switch (state) {\n case 2:\n return (\n <StatusBar.Item>\n <IconButton\n variant='ghost'\n icon='ph--circle--duotone'\n iconOnly\n label='Edit not saved.'\n classNames={styles.warning}\n />\n </StatusBar.Item>\n );\n case 1:\n return (\n <StatusBar.Item>\n <IconButton\n variant='ghost'\n icon='ph--circle--duotone'\n iconOnly\n label='Saving...'\n classNames={styles.success}\n />\n </StatusBar.Item>\n );\n case 0:\n default:\n return (\n <StatusBar.Item>\n <IconButton variant='ghost' icon='ph--circle--duotone' iconOnly label='Modified indicator.' />\n </StatusBar.Item>\n );\n }\n};\n\nconst indicators = [SavingIndicator, SwarmIndicator, ErrorIndicator];\n\nexport const DebugStatus = () => {\n return (\n <>\n {indicators.map((Indicator) => (\n <Indicator key={Indicator.name} />\n ))}\n </>\n );\n};\n\nDebugStatus.displayName = 'DebugStatus';\n"],"mappings":";;;;;;;;AAYA,IAAM,SAAS;CACb,SAAS;CACT,SAAS;CACT,OAAO;AACT;;;;AA0CA,IAAM,uBAAuB;CAC3B,MAAM,GAAG,eAAe,SAAS,CAAC,CAAC;CACnC,MAAM,WAAW,OAAc,IAAI;CACnC,gBAAgB;EACd,MAAM,iBAAiB,UAAe;GACpC,MAAM,QAAe,MAAM,SAAS,MAAM;GAC1C,IAAI,SAAS,YAAY,OAAO;IAC9B,SAAS,UAAU;IACnB,YAAY,CAAC,CAAC;GAChB;EACF;EAIA,OAAO,iBAAiB,SAAS,aAAa;EAG9C,OAAO,iBAAiB,sBAAsB,aAAa;EAE3D,aAAa;GACX,OAAO,oBAAoB,SAAS,aAAa;GACjD,OAAO,oBAAoB,sBAAsB,aAAa;EAChE;CACF,GAAG,CAAC,CAAC;CAEL,MAAM,oBAAoB;EACxB,SAAS,UAAU;EACnB,YAAY,CAAC,CAAC;CAChB;CAEA,IAAI,SAAS,SACX,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,YAAD;EACE,SAAQ;EACR,MAAK;EACL,UAAA;EACA,OAAO,SAAS,QAAQ;EACxB,YAAY,OAAO;EACnB,SAAS;CACV,CAAA,EACa,CAAA;MAGlB,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,YAAD;EAAY,SAAQ;EAAQ,MAAK;EAAqB,UAAA;EAAS,OAAM;CAAc,CAAA,EACrE,CAAA;AAGtB;;;;AAKA,IAAM,uBAAuB;CAC3B,MAAM,CAAC,OAAO,YAAY,SAAS,CAAC;CACpC,MAAM,EAAE,UAAU,iBAAiB;CACnC,gBAAgB;EACd,SAAS,UAAU,gBAAgB,SAAS,IAAI,CAAC;CACnD,GAAG,CAAC,KAAK,CAAC;CAEV,IAAI,UAAU,GACZ,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,YAAD;EAAY,SAAQ;EAAQ,MAAK;EAAyB,UAAA;EAAS,OAAM;CAAuB,CAAA,EAClF,CAAA;MAGlB,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,YAAD;EACE,SAAQ;EACR,MAAK;EACL,UAAA;EACA,OAAM;EACN,YAAY,OAAO;CACpB,CAAA,EACa,CAAA;AAGtB;;;;AAMA,IAAM,wBAAwB;CAC5B,MAAM,CAAC,OAAO,aAAa,SAAS,CAAC;CAoBrC,QAAQ,OAAR;EACE,KAAK,GACH,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,YAAD;GACE,SAAQ;GACR,MAAK;GACL,UAAA;GACA,OAAM;GACN,YAAY,OAAO;EACpB,CAAA,EACa,CAAA;EAEpB,KAAK,GACH,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,YAAD;GACE,SAAQ;GACR,MAAK;GACL,UAAA;GACA,OAAM;GACN,YAAY,OAAO;EACpB,CAAA,EACa,CAAA;EAGpB,SACE,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,YAAD;GAAY,SAAQ;GAAQ,MAAK;GAAsB,UAAA;GAAS,OAAM;EAAuB,CAAA,EAC/E,CAAA;CAEtB;AACF;AAEA,IAAM,aAAa;CAAC;CAAiB;CAAgB;AAAc;AAEnE,IAAa,oBAAoB;CAC/B,OACE,oBAAA,YAAA,EAAA,UACG,WAAW,KAAK,cACf,oBAAC,WAAD,CAAiC,GAAjB,UAAU,IAAO,CAClC,EACD,CAAA;AAEN;AAEA,YAAY,cAAc"}
1
+ {"version":3,"file":"chunk-DebugStatus.mjs","names":[],"sources":["../../src/containers/DebugStatus/DebugStatus.tsx"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { TimeoutError } from '@dxos/async';\nimport * as StatusBar from '@dxos/plugin-status-bar/StatusBar';\nimport { ConnectionState } from '@dxos/protocols/buf/dxos/client/services_pb';\nimport { useNetworkStatus } from '@dxos/react-client/mesh';\nimport * as Button from '@dxos/react-ui/Button';\n\nconst styles = {\n success: 'text-sky-300 dark:text-green-700',\n warning: 'text-orange-300 dark:text-orange-600',\n error: 'text-red-300 dark:text-red-600',\n};\n\n// TODO(burdon): Move out of debug plugin.\n// TODO(burdon): Make pluggable (move indicators to relevant plugins).\n// TODO(burdon): Vault heartbeat indicator (global scope)?\n\n/**\n * Ensure light doesn't flicker immediately after start.\n */\n// TODO(burdon): Move to @dxos/async (debounce?)\nconst _timer = (cb: (err?: Error) => void, options?: { min?: number; max?: number }) => {\n const min = options?.min ?? 500;\n let start: number;\n let pending: NodeJS.Timeout;\n let timeout: NodeJS.Timeout;\n return {\n start: () => {\n start = Date.now();\n clearTimeout(pending);\n if (options?.max) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n cb(new TimeoutError(options.max));\n }, options.max);\n }\n },\n stop: () => {\n clearTimeout(timeout);\n const delta = Date.now() - start;\n if (delta < min) {\n pending = setTimeout(() => {\n cb();\n }, min - delta);\n }\n },\n };\n};\n\n/**\n * Global error handler.\n */\n// TODO(burdon): Integrate with Sentry?\nconst ErrorIndicator = () => {\n const [, forceUpdate] = useState({});\n const errorRef = useRef<Error>(null);\n useEffect(() => {\n const errorListener = (event: any) => {\n const error: Error = event.error ?? event.reason;\n if (errorRef.current !== error) {\n errorRef.current = error;\n forceUpdate({});\n }\n };\n\n // TODO(burdon): Register globally?\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/error_event\n window.addEventListener('error', errorListener);\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event\n window.addEventListener('unhandledrejection', errorListener);\n\n return () => {\n window.removeEventListener('error', errorListener);\n window.removeEventListener('unhandledrejection', errorListener);\n };\n }, []);\n\n const handleReset = () => {\n errorRef.current = null;\n forceUpdate({});\n };\n\n if (errorRef.current) {\n return (\n <StatusBar.Item>\n <Button.Root\n variant='ghost'\n icon='ph--warning-circle--duotone'\n iconOnly\n label={errorRef.current.message}\n classNames={styles.error}\n onClick={handleReset}\n />\n </StatusBar.Item>\n );\n } else {\n return (\n <StatusBar.Item>\n <Button.Root variant='ghost' icon='ph--check--regular' iconOnly label='No errors.' />\n </StatusBar.Item>\n );\n }\n};\n\n/**\n * Swarm connection handler.\n */\nconst SwarmIndicator = () => {\n const [state, setState] = useState(0);\n const { swarm } = useNetworkStatus();\n useEffect(() => {\n setState(swarm === ConnectionState.ONLINE ? 0 : 1);\n }, [swarm]);\n\n if (state === 0) {\n return (\n <StatusBar.Item>\n <Button.Root variant='ghost' icon='ph--lightning--regular' iconOnly label='Connected to swarm.' />\n </StatusBar.Item>\n );\n } else {\n return (\n <StatusBar.Item>\n <Button.Root\n variant='ghost'\n icon='ph--lightning-slash--regular'\n iconOnly\n label='Disconnected from swarm.'\n classNames={styles.warning}\n />\n </StatusBar.Item>\n );\n }\n};\n\n/**\n * Data saving indicator.\n */\n// TODO(burdon): Merge with SaveStatus.\nconst SavingIndicator = () => {\n const [state, _setState] = useState(0);\n // TODO(dmaretskyi): Fix this when we have save status for automerge.\n // useEffect(() => {\n // if (!space) {\n // return;\n // }\n // const { start, stop } = timer(() => setState(0), { min: 250 });\n // return space.db.pendingBatch.on(({ duration, error }) => {\n // if (error) {\n // setState(2);\n // stop();\n // } else if (duration === undefined) {\n // setState(1);\n // start();\n // } else {\n // stop();\n // }\n // });\n // }, [space]);\n\n switch (state) {\n case 2:\n return (\n <StatusBar.Item>\n <Button.Root\n variant='ghost'\n icon='ph--circle--duotone'\n iconOnly\n label='Edit not saved.'\n classNames={styles.warning}\n />\n </StatusBar.Item>\n );\n case 1:\n return (\n <StatusBar.Item>\n <Button.Root\n variant='ghost'\n icon='ph--circle--duotone'\n iconOnly\n label='Saving...'\n classNames={styles.success}\n />\n </StatusBar.Item>\n );\n case 0:\n default:\n return (\n <StatusBar.Item>\n <Button.Root variant='ghost' icon='ph--circle--duotone' iconOnly label='Modified indicator.' />\n </StatusBar.Item>\n );\n }\n};\n\nconst indicators = [SavingIndicator, SwarmIndicator, ErrorIndicator];\n\nexport const DebugStatus = () => {\n return (\n <>\n {indicators.map((Indicator) => (\n <Indicator key={Indicator.name} />\n ))}\n </>\n );\n};\n\nDebugStatus.displayName = 'DebugStatus';\n"],"mappings":";;;;;;;;AAYA,IAAM,SAAS;CACb,SAAS;CACT,SAAS;CACT,OAAO;AACT;;;;AA0CA,IAAM,uBAAuB;CAC3B,MAAM,GAAG,eAAe,SAAS,CAAC,CAAC;CACnC,MAAM,WAAW,OAAc,IAAI;CACnC,gBAAgB;EACd,MAAM,iBAAiB,UAAe;GACpC,MAAM,QAAe,MAAM,SAAS,MAAM;GAC1C,IAAI,SAAS,YAAY,OAAO;IAC9B,SAAS,UAAU;IACnB,YAAY,CAAC,CAAC;GAChB;EACF;EAIA,OAAO,iBAAiB,SAAS,aAAa;EAG9C,OAAO,iBAAiB,sBAAsB,aAAa;EAE3D,aAAa;GACX,OAAO,oBAAoB,SAAS,aAAa;GACjD,OAAO,oBAAoB,sBAAsB,aAAa;EAChE;CACF,GAAG,CAAC,CAAC;CAEL,MAAM,oBAAoB;EACxB,SAAS,UAAU;EACnB,YAAY,CAAC,CAAC;CAChB;CAEA,IAAI,SAAS,SACX,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,OAAO,MAAR;EACE,SAAQ;EACR,MAAK;EACL,UAAA;EACA,OAAO,SAAS,QAAQ;EACxB,YAAY,OAAO;EACnB,SAAS;CACV,CAAA,EACa,CAAA;MAGlB,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,OAAO,MAAR;EAAa,SAAQ;EAAQ,MAAK;EAAqB,UAAA;EAAS,OAAM;CAAc,CAAA,EACtE,CAAA;AAGtB;;;;AAKA,IAAM,uBAAuB;CAC3B,MAAM,CAAC,OAAO,YAAY,SAAS,CAAC;CACpC,MAAM,EAAE,UAAU,iBAAiB;CACnC,gBAAgB;EACd,SAAS,UAAU,gBAAgB,SAAS,IAAI,CAAC;CACnD,GAAG,CAAC,KAAK,CAAC;CAEV,IAAI,UAAU,GACZ,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,OAAO,MAAR;EAAa,SAAQ;EAAQ,MAAK;EAAyB,UAAA;EAAS,OAAM;CAAuB,CAAA,EACnF,CAAA;MAGlB,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,OAAO,MAAR;EACE,SAAQ;EACR,MAAK;EACL,UAAA;EACA,OAAM;EACN,YAAY,OAAO;CACpB,CAAA,EACa,CAAA;AAGtB;;;;AAMA,IAAM,wBAAwB;CAC5B,MAAM,CAAC,OAAO,aAAa,SAAS,CAAC;CAoBrC,QAAQ,OAAR;EACE,KAAK,GACH,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,OAAO,MAAR;GACE,SAAQ;GACR,MAAK;GACL,UAAA;GACA,OAAM;GACN,YAAY,OAAO;EACpB,CAAA,EACa,CAAA;EAEpB,KAAK,GACH,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,OAAO,MAAR;GACE,SAAQ;GACR,MAAK;GACL,UAAA;GACA,OAAM;GACN,YAAY,OAAO;EACpB,CAAA,EACa,CAAA;EAGpB,SACE,OACE,oBAAC,UAAU,MAAX,EAAA,UACE,oBAAC,OAAO,MAAR;GAAa,SAAQ;GAAQ,MAAK;GAAsB,UAAA;GAAS,OAAM;EAAuB,CAAA,EAChF,CAAA;CAEtB;AACF;AAEA,IAAM,aAAa;CAAC;CAAiB;CAAgB;AAAc;AAEnE,IAAa,oBAAoB;CAC/B,OACE,oBAAA,UAAA,EAAA,UACG,WAAW,KAAK,cACf,oBAAC,WAAD,CAAiC,GAAjB,UAAU,IAAO,CAClC,EACD,CAAA;AAEN;AAEA,YAAY,cAAc"}
@@ -0,0 +1,269 @@
1
+ import { t as __exportAll } from "./chunk-rolldown-runtime.mjs";
2
+ import * as Effect from "effect/Effect";
3
+ import * as SampleSpace from "@dxos/app-toolkit/SampleSpace";
4
+ import { Database, Obj, Ref } from "@dxos/echo";
5
+ import * as Markdown from "@dxos/plugin-markdown/Markdown";
6
+ import * as Instructions from "@dxos/compute/Instructions";
7
+ import * as Project from "@dxos/compute/Project";
8
+ import { EntityId } from "@dxos/echo/Key";
9
+ import { Task, TaskSet } from "@dxos/types";
10
+ //#region src/samples/incident/docs.ts
11
+ var STATUS_LOG_MD = `# Status log — incident 0516
12
+
13
+ Exported from the status service. Times are UTC, Saturday 16 May.
14
+
15
+ | Time | Source | Event |
16
+ | --- | --- | --- |
17
+ | 02:00:04 | edge | TLS handshake failures begin on api.northlight.example — certificate expired 2026-05-16T02:00:00Z |
18
+ | 02:00:30 | edge | Error rate on api.* rises from 0% to 98% |
19
+ | 02:03:11 | alerts | PAGE fired: "api error rate > 50%" — rotation platform-oncall, pager target m.okafor |
20
+ | 02:03:12 | alerts | Page delivered to m.okafor. No acknowledgement. |
21
+ | 02:33:11 | alerts | Page re-sent to m.okafor. No acknowledgement. |
22
+ | 03:31:47 | support | Ticket #4471 opened from customer email (Ferrous Ltd): "API down since about 2am" |
23
+ | 04:41:09 | alerts | Page acknowledged by j.reyes via Slack |
24
+ | 04:52:30 | ops | Incident channel #inc-0516 opened by j.reyes |
25
+ | 05:09:55 | ops | Certificate renewed manually by j.reyes using the shared ACME account |
26
+ | 05:12:18 | edge | TLS handshakes succeeding; error rate on api.* falls from 98% to 0.2% |
27
+ | 05:12:18 | ops | Incident resolved |
28
+
29
+ No deploys, configuration changes or infrastructure events were recorded between 15 May 12:00 and
30
+ 16 May 05:12. Database disk usage held at 41% throughout.
31
+ `;
32
+ var NOTE_JAE_MD = `# Notes from Jae Reyes — platform, on call that weekend
33
+
34
+ I was not paged. I found out when Priya messaged me on Slack a little after half four, and I had
35
+ the cert renewed about half an hour later once I worked out that was what it was.
36
+
37
+ Afterwards I looked at the pager config. The platform on-call rotation still lists Mira Okafor as
38
+ the target. Mira moved to the data team in March. Nobody updated the rotation when the team
39
+ changed, so for two months every page for our services has gone to someone who is no longer on
40
+ the team.
41
+
42
+ My guess is something went out on Friday afternoon that broke TLS termination. We should stop
43
+ Friday deploys.
44
+ `;
45
+ var NOTE_PRIYA_MD = `# Notes from Priya Nair — support lead
46
+
47
+ Ferrous emailed at about half three saying the API had been down since two. I opened a ticket and
48
+ then tried to find someone. I did not know who was on call or how to reach the pager, so I messaged
49
+ two people on the platform team who did not answer, and then Jae, who did, at around half four.
50
+
51
+ There is no written path from support to on-call for weekends. During the week I would ask in the
52
+ platform channel. On Saturday night nobody is reading it. I made three guesses at who to contact
53
+ and the third one was right, and that is the only reason this was three hours and not six.
54
+ `;
55
+ var NOTE_DAN_MD = `# Notes from Dan Walsh — platform, renewed the certificate last year
56
+
57
+ The certificate for api.northlight.example is renewed by hand once a year. I did it on 15 May last
58
+ year. There is no ACME automation for that domain because its DNS is managed by a third party and
59
+ we never finished the delegation work.
60
+
61
+ The reminder to renew it was a calendar event on Tom's calendar. Tom left in January. When his
62
+ account was closed the event went with it, and nobody had a copy. I only remembered the date
63
+ because Jae asked me on Saturday.
64
+ `;
65
+ var NOTE_SAM_MD = `# Notes from Sam Lindqvist — product
66
+
67
+ I was not online over the weekend, so this is second hand. I heard on Monday that the database
68
+ ran out of disk and that is what took the API down.
69
+
70
+ Three customers have asked for a summary they can forward internally. They do not need the
71
+ technical detail; they need to know what happened, how long it lasted, and that it will not
72
+ happen again.
73
+ `;
74
+ /** The record and the recollections the retro is written from. */
75
+ var Docs = SampleSpace.phase("docs", {
76
+ schemas: [Markdown.Document],
77
+ run: () => Effect.gen(function* () {
78
+ return {
79
+ log: yield* Database.add(Markdown.make({
80
+ name: "Status log",
81
+ content: STATUS_LOG_MD
82
+ })),
83
+ notes: {
84
+ jae: yield* Database.add(Markdown.make({
85
+ name: "Notes — Jae Reyes",
86
+ content: NOTE_JAE_MD
87
+ })),
88
+ priya: yield* Database.add(Markdown.make({
89
+ name: "Notes — Priya Nair",
90
+ content: NOTE_PRIYA_MD
91
+ })),
92
+ dan: yield* Database.add(Markdown.make({
93
+ name: "Notes — Dan Walsh",
94
+ content: NOTE_DAN_MD
95
+ })),
96
+ sam: yield* Database.add(Markdown.make({
97
+ name: "Notes — Sam Lindqvist",
98
+ content: NOTE_SAM_MD
99
+ }))
100
+ }
101
+ };
102
+ })
103
+ });
104
+ //#endregion
105
+ //#region src/samples/incident/project.ts
106
+ var INSTRUCTIONS = `You are writing the retrospective for incident 0516, when the public API was down for just over \
107
+ three hours on a Saturday morning.
108
+
109
+ The status log is the record of what happened and when. The notes are what people remember, and \
110
+ memory disagrees with the log in places. Where they disagree, the log wins, and the retrospective \
111
+ says so rather than quietly picking one. A claim that appears in a note but nowhere in the log is a \
112
+ claim, not a finding.
113
+
114
+ Keep it blameless. Name the systems and the gaps, not the people at fault; the people in the notes \
115
+ are the ones who will fix it.
116
+
117
+ File every document you write as an artifact on this project rather than leaving it in the chat, and \
118
+ turn every recommendation into a task on this project with an owner drawn from the people in the notes.`;
119
+ /** The retro as a project: the record and the notes as its artifacts, the four steps as its tasks. */
120
+ var ProjectPhase = SampleSpace.phase("project", {
121
+ schemas: [Project.Project, Instructions.Instructions],
122
+ run: ({ docs, tasks }) => Effect.gen(function* () {
123
+ const sources = [
124
+ docs.log,
125
+ docs.notes.jae,
126
+ docs.notes.priya,
127
+ docs.notes.dan,
128
+ docs.notes.sam
129
+ ];
130
+ const instructions = yield* Database.add(Instructions.make({
131
+ name: "Incident 0516 retrospective",
132
+ text: INSTRUCTIONS,
133
+ objects: [...sources.map((doc) => Ref.make(doc)), Ref.make(tasks.taskSet)]
134
+ }));
135
+ return {
136
+ project: yield* Database.add(Project.make({
137
+ name: "Incident 0516 retrospective",
138
+ description: "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.",
139
+ status: "active",
140
+ instructions: Ref.make(instructions),
141
+ taskSet: Ref.make(tasks.taskSet),
142
+ artifacts: sources.map((doc) => Ref.make(doc))
143
+ })),
144
+ instructions
145
+ };
146
+ })
147
+ });
148
+ //#endregion
149
+ //#region src/samples/incident/util.ts
150
+ /**
151
+ * The Monday after the incident, when the retro is written. Stable so regenerations are
152
+ * reproducible; override with NOW=2026-05-18 env.
153
+ */
154
+ var REFERENCE = process.env.NOW ? new Date(process.env.NOW) : /* @__PURE__ */ new Date("2026-05-18T09:00:00Z");
155
+ /** ISO timestamp that many days before {@link REFERENCE}, at an optional UTC hour of that day. */
156
+ var daysAgo = SampleSpace.makeClock(REFERENCE).daysAgo;
157
+ //#endregion
158
+ //#region src/samples/incident/tasks.ts
159
+ var STEPS = [
160
+ {
161
+ title: "Reconstruct the timeline",
162
+ description: "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.",
163
+ estimate: "s"
164
+ },
165
+ {
166
+ title: "Write the retrospective",
167
+ description: "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.",
168
+ estimate: "m"
169
+ },
170
+ {
171
+ title: "File the action items",
172
+ description: "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.",
173
+ estimate: "s"
174
+ },
175
+ {
176
+ title: "Draft the customer notice",
177
+ description: "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.",
178
+ estimate: "s"
179
+ }
180
+ ];
181
+ /** The four steps, each depending on the one before it. */
182
+ var Tasks = SampleSpace.phase("tasks", {
183
+ schemas: [TaskSet.TaskSet, Task.Task],
184
+ run: () => Effect.gen(function* () {
185
+ const taskSet = yield* Database.add(TaskSet.make({
186
+ name: "Incident 0516 retrospective",
187
+ description: "From the log and the notes to a filed retro."
188
+ }));
189
+ const tasks = STEPS.map((step) => Task.make({
190
+ title: step.title,
191
+ description: step.description,
192
+ estimate: step.estimate,
193
+ status: "todo",
194
+ history: [{
195
+ id: EntityId.random(),
196
+ date: daysAgo(0),
197
+ event: "created",
198
+ description: "Filed from the incident template."
199
+ }]
200
+ }));
201
+ yield* SampleSpace.children(taskSet, tasks, (taskSet, refs) => {
202
+ taskSet.tasks = refs;
203
+ });
204
+ for (const [index, task] of tasks.entries()) if (index > 0) {
205
+ const previous = tasks[index - 1];
206
+ Obj.update(task, (task) => {
207
+ task.dependsOn = [Ref.make(previous)];
208
+ });
209
+ }
210
+ return {
211
+ taskSet,
212
+ tasks
213
+ };
214
+ })
215
+ });
216
+ //#endregion
217
+ //#region src/samples/incident/IncidentSpace.ts
218
+ var IncidentSpace_exports = /* @__PURE__ */ __exportAll({
219
+ make: () => make,
220
+ makeTemplate: () => makeTemplate
221
+ });
222
+ var phases = {
223
+ docs: Docs,
224
+ tasks: Tasks,
225
+ project: ProjectPhase
226
+ };
227
+ /**
228
+ * An outage retrospective to delegate: a status log, four people's notes, and the four tasks that turn
229
+ * them into a filed retro with owned action items and a customer notice.
230
+ *
231
+ * Engineering in setting, not in kind. The technical cause is a certificate that expired, and the log
232
+ * states it outright; nothing here needs code read or written. The work is in the notes — a page sent
233
+ * to someone who left the team, a renewal reminder on a departed colleague's calendar, a support lead
234
+ * guessing who to call — and in holding them against the log, which contradicts two of them. That is
235
+ * the evaluation: does the retro recommend what the evidence supports, or what the loudest note says.
236
+ */
237
+ var make = () => SampleSpace.make({
238
+ space: {
239
+ name: "Incident 0516 retrospective",
240
+ icon: "stethoscope",
241
+ hue: "rose"
242
+ },
243
+ reference: REFERENCE,
244
+ phases,
245
+ build: (phases) => Effect.gen(function* () {
246
+ const docs = yield* phases.docs();
247
+ const tasks = yield* phases.tasks();
248
+ yield* phases.project({
249
+ docs,
250
+ tasks
251
+ });
252
+ yield* SampleSpace.collection("Sources", [
253
+ Ref.make(docs.log),
254
+ Ref.make(docs.notes.jae),
255
+ Ref.make(docs.notes.priya),
256
+ Ref.make(docs.notes.dan),
257
+ Ref.make(docs.notes.sam)
258
+ ]);
259
+ })
260
+ });
261
+ var makeTemplate = () => SampleSpace.makeTemplate({
262
+ id: "org.dxos.plugin-debug.template.incident",
263
+ description: "A status log, four people's notes, and the four tasks that turn them into a filed retro.",
264
+ definition: make()
265
+ });
266
+ //#endregion
267
+ export { make as n, makeTemplate as r, IncidentSpace_exports as t };
268
+
269
+ //# sourceMappingURL=chunk-IncidentSpace.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-IncidentSpace.mjs","names":[],"sources":["../../src/samples/incident/docs.ts","../../src/samples/incident/project.ts","../../src/samples/incident/util.ts","../../src/samples/incident/tasks.ts","../../src/samples/incident/IncidentSpace.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as SampleSpace from '@dxos/app-toolkit/SampleSpace';\nimport { Database } from '@dxos/echo';\nimport * as Markdown from '@dxos/plugin-markdown/Markdown';\n\n//\n// The source material: one machine record and four human notes.\n//\n// The log alone gives the technical cause and every time that matters. The notes are the only place\n// the process failures live — who was paged, where the renewal reminder was kept, how support found\n// an engineer — and two of them carry claims the log contradicts. A retro that follows the notes\n// without checking them against the log recommends the wrong things; one that reads only the log\n// finds nothing to recommend at all.\n//\n\nconst STATUS_LOG_MD = `# Status log — incident 0516\n\nExported from the status service. Times are UTC, Saturday 16 May.\n\n| Time | Source | Event |\n| --- | --- | --- |\n| 02:00:04 | edge | TLS handshake failures begin on api.northlight.example — certificate expired 2026-05-16T02:00:00Z |\n| 02:00:30 | edge | Error rate on api.* rises from 0% to 98% |\n| 02:03:11 | alerts | PAGE fired: \"api error rate > 50%\" — rotation platform-oncall, pager target m.okafor |\n| 02:03:12 | alerts | Page delivered to m.okafor. No acknowledgement. |\n| 02:33:11 | alerts | Page re-sent to m.okafor. No acknowledgement. |\n| 03:31:47 | support | Ticket #4471 opened from customer email (Ferrous Ltd): \"API down since about 2am\" |\n| 04:41:09 | alerts | Page acknowledged by j.reyes via Slack |\n| 04:52:30 | ops | Incident channel #inc-0516 opened by j.reyes |\n| 05:09:55 | ops | Certificate renewed manually by j.reyes using the shared ACME account |\n| 05:12:18 | edge | TLS handshakes succeeding; error rate on api.* falls from 98% to 0.2% |\n| 05:12:18 | ops | Incident resolved |\n\nNo deploys, configuration changes or infrastructure events were recorded between 15 May 12:00 and\n16 May 05:12. Database disk usage held at 41% throughout.\n`;\n\nconst NOTE_JAE_MD = `# Notes from Jae Reyes — platform, on call that weekend\n\nI was not paged. I found out when Priya messaged me on Slack a little after half four, and I had\nthe cert renewed about half an hour later once I worked out that was what it was.\n\nAfterwards I looked at the pager config. The platform on-call rotation still lists Mira Okafor as\nthe target. Mira moved to the data team in March. Nobody updated the rotation when the team\nchanged, so for two months every page for our services has gone to someone who is no longer on\nthe team.\n\nMy guess is something went out on Friday afternoon that broke TLS termination. We should stop\nFriday deploys.\n`;\n\nconst NOTE_PRIYA_MD = `# Notes from Priya Nair — support lead\n\nFerrous emailed at about half three saying the API had been down since two. I opened a ticket and\nthen tried to find someone. I did not know who was on call or how to reach the pager, so I messaged\ntwo people on the platform team who did not answer, and then Jae, who did, at around half four.\n\nThere is no written path from support to on-call for weekends. During the week I would ask in the\nplatform channel. On Saturday night nobody is reading it. I made three guesses at who to contact\nand the third one was right, and that is the only reason this was three hours and not six.\n`;\n\nconst NOTE_DAN_MD = `# Notes from Dan Walsh — platform, renewed the certificate last year\n\nThe certificate for api.northlight.example is renewed by hand once a year. I did it on 15 May last\nyear. There is no ACME automation for that domain because its DNS is managed by a third party and\nwe never finished the delegation work.\n\nThe reminder to renew it was a calendar event on Tom's calendar. Tom left in January. When his\naccount was closed the event went with it, and nobody had a copy. I only remembered the date\nbecause Jae asked me on Saturday.\n`;\n\nconst NOTE_SAM_MD = `# Notes from Sam Lindqvist — product\n\nI was not online over the weekend, so this is second hand. I heard on Monday that the database\nran out of disk and that is what took the API down.\n\nThree customers have asked for a summary they can forward internally. They do not need the\ntechnical detail; they need to know what happened, how long it lasted, and that it will not\nhappen again.\n`;\n\nexport type DocsResult = {\n log: Markdown.Document;\n notes: {\n jae: Markdown.Document;\n priya: Markdown.Document;\n dan: Markdown.Document;\n sam: Markdown.Document;\n };\n};\n\n/** The record and the recollections the retro is written from. */\nexport const Docs: SampleSpace.Phase<DocsResult> = SampleSpace.phase('docs', {\n schemas: [Markdown.Document],\n run: () =>\n Effect.gen(function* () {\n const log = yield* Database.add(Markdown.make({ name: 'Status log', content: STATUS_LOG_MD }));\n const jae = yield* Database.add(Markdown.make({ name: 'Notes — Jae Reyes', content: NOTE_JAE_MD }));\n const priya = yield* Database.add(Markdown.make({ name: 'Notes — Priya Nair', content: NOTE_PRIYA_MD }));\n const dan = yield* Database.add(Markdown.make({ name: 'Notes — Dan Walsh', content: NOTE_DAN_MD }));\n const sam = yield* Database.add(Markdown.make({ name: 'Notes — Sam Lindqvist', content: NOTE_SAM_MD }));\n return { log, notes: { jae, priya, dan, sam } };\n }),\n});\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as SampleSpace from '@dxos/app-toolkit/SampleSpace';\nimport * as Instructions from '@dxos/compute/Instructions';\nimport * as Project from '@dxos/compute/Project';\nimport { Database, Ref } from '@dxos/echo';\n\nimport { type DocsResult } from './docs.ts';\nimport { type TasksResult } from './tasks.ts';\n\nexport type ProjectInput = { docs: DocsResult; tasks: TasksResult };\n\nexport type ProjectResult = { project: Project.Project; instructions: Instructions.Instructions };\n\nconst INSTRUCTIONS = `You are writing the retrospective for incident 0516, when the public API was down for just over \\\nthree hours on a Saturday morning.\n\nThe status log is the record of what happened and when. The notes are what people remember, and \\\nmemory disagrees with the log in places. Where they disagree, the log wins, and the retrospective \\\nsays so rather than quietly picking one. A claim that appears in a note but nowhere in the log is a \\\nclaim, not a finding.\n\nKeep it blameless. Name the systems and the gaps, not the people at fault; the people in the notes \\\nare the ones who will fix it.\n\nFile every document you write as an artifact on this project rather than leaving it in the chat, and \\\nturn every recommendation into a task on this project with an owner drawn from the people in the notes.`;\n\n/** The retro as a project: the record and the notes as its artifacts, the four steps as its tasks. */\nexport const ProjectPhase: SampleSpace.Phase<ProjectResult, ProjectInput> = SampleSpace.phase('project', {\n schemas: [Project.Project, Instructions.Instructions],\n run: ({ docs, tasks }: ProjectInput) =>\n Effect.gen(function* () {\n const sources = [docs.log, docs.notes.jae, docs.notes.priya, docs.notes.dan, docs.notes.sam];\n const instructions = yield* Database.add(\n Instructions.make({\n name: 'Incident 0516 retrospective',\n text: INSTRUCTIONS,\n objects: [...sources.map((doc) => Ref.make(doc)), Ref.make(tasks.taskSet)],\n }),\n );\n\n const project = yield* Database.add(\n Project.make({\n name: 'Incident 0516 retrospective',\n description:\n '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.',\n status: 'active',\n instructions: Ref.make(instructions),\n taskSet: Ref.make(tasks.taskSet),\n artifacts: sources.map((doc) => Ref.make(doc)),\n }),\n );\n\n return { project, instructions };\n }),\n});\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport * as SampleSpace from '@dxos/app-toolkit/SampleSpace';\n\n/**\n * The Monday after the incident, when the retro is written. Stable so regenerations are\n * reproducible; override with NOW=2026-05-18 env.\n */\nexport const REFERENCE = process.env.NOW ? new Date(process.env.NOW) : new Date('2026-05-18T09:00:00Z');\n\nexport const clock = SampleSpace.makeClock(REFERENCE);\n\n/** ISO timestamp that many days before {@link REFERENCE}, at an optional UTC hour of that day. */\nexport const daysAgo = clock.daysAgo;\n\n/** The people in the notes, as task owners. The names are the only identity a template can give them. */\nexport const CAST = {\n jae: { role: 'user', name: 'Jae Reyes' },\n priya: { role: 'user', name: 'Priya Nair' },\n dan: { role: 'user', name: 'Dan Walsh' },\n sam: { role: 'user', name: 'Sam Lindqvist' },\n} as const;\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as SampleSpace from '@dxos/app-toolkit/SampleSpace';\nimport { Database, Obj, Ref } from '@dxos/echo';\nimport { EntityId } from '@dxos/echo/Key';\nimport { Task, TaskSet } from '@dxos/types';\n\nimport { daysAgo } from './util.ts';\n\n//\n// The retro as four pieces of work, in the order they depend on each other. Every one is `todo`:\n// this space is a job to delegate, not a retro caught half-written.\n//\n// Each task names one deliverable and where it goes, so the check on a finished task is whether\n// that thing exists in that place — not whether the chat said it did.\n//\n\ntype TaskSeed = {\n readonly title: string;\n readonly description: string;\n readonly estimate?: Task.Estimate;\n};\n\nconst STEPS: ReadonlyArray<TaskSeed> = [\n {\n title: 'Reconstruct the timeline',\n description:\n '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.',\n estimate: 's',\n },\n {\n title: 'Write the retrospective',\n description:\n '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.',\n estimate: 'm',\n },\n {\n title: 'File the action items',\n description:\n '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.',\n estimate: 's',\n },\n {\n title: 'Draft the customer notice',\n description:\n '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.',\n estimate: 's',\n },\n];\n\nexport type TasksResult = { taskSet: TaskSet.TaskSet; tasks: Task.Task[] };\n\n/** The four steps, each depending on the one before it. */\nexport const Tasks: SampleSpace.Phase<TasksResult> = SampleSpace.phase('tasks', {\n schemas: [TaskSet.TaskSet, Task.Task],\n run: () =>\n Effect.gen(function* () {\n const taskSet = yield* Database.add(\n TaskSet.make({\n name: 'Incident 0516 retrospective',\n description: 'From the log and the notes to a filed retro.',\n }),\n );\n\n const tasks = STEPS.map((step) =>\n Task.make({\n title: step.title,\n description: step.description,\n estimate: step.estimate,\n status: 'todo',\n history: [\n {\n id: EntityId.random(),\n date: daysAgo(0),\n event: 'created' as const,\n description: 'Filed from the incident template.',\n },\n ],\n }),\n );\n yield* SampleSpace.children(taskSet, tasks, (taskSet, refs) => {\n taskSet.tasks = refs;\n });\n\n // The retro needs the timeline, the action items need the retro, the notice needs both.\n for (const [index, task] of tasks.entries()) {\n if (index > 0) {\n const previous = tasks[index - 1];\n Obj.update(task, (task) => {\n task.dependsOn = [Ref.make(previous)];\n });\n }\n }\n\n return { taskSet, tasks };\n }),\n});\n","//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Effect from 'effect/Effect';\n\nimport type * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';\nimport * as SampleSpace from '@dxos/app-toolkit/SampleSpace';\nimport { Ref } from '@dxos/echo';\n\nimport { Docs } from './docs.ts';\nimport { ProjectPhase } from './project.ts';\nimport { Tasks } from './tasks.ts';\nimport { REFERENCE } from './util.ts';\n\nconst phases = {\n docs: Docs,\n tasks: Tasks,\n project: ProjectPhase,\n};\n\n/**\n * An outage retrospective to delegate: a status log, four people's notes, and the four tasks that turn\n * them into a filed retro with owned action items and a customer notice.\n *\n * Engineering in setting, not in kind. The technical cause is a certificate that expired, and the log\n * states it outright; nothing here needs code read or written. The work is in the notes — a page sent\n * to someone who left the team, a renewal reminder on a departed colleague's calendar, a support lead\n * guessing who to call — and in holding them against the log, which contradicts two of them. That is\n * the evaluation: does the retro recommend what the evidence supports, or what the loudest note says.\n */\nexport const make = (): SampleSpace.Definition<typeof phases, void> =>\n SampleSpace.make({\n space: { name: 'Incident 0516 retrospective', icon: 'stethoscope', hue: 'rose' },\n reference: REFERENCE,\n phases,\n build: (phases) =>\n Effect.gen(function* () {\n const docs = yield* phases.docs();\n const tasks = yield* phases.tasks();\n yield* phases.project({ docs, tasks });\n\n // The root holds collections only; the project and its tasks surface through their own containers.\n yield* SampleSpace.collection('Sources', [\n Ref.make(docs.log),\n Ref.make(docs.notes.jae),\n Ref.make(docs.notes.priya),\n Ref.make(docs.notes.dan),\n Ref.make(docs.notes.sam),\n ]);\n }),\n });\n\nexport const makeTemplate = (): AppCapabilities.SpaceTemplate =>\n SampleSpace.makeTemplate({\n id: 'org.dxos.plugin-debug.template.incident',\n description: \"A status log, four people's notes, and the four tasks that turn them into a filed retro.\",\n definition: make(),\n });\n"],"mappings":";;;;;;;;;;AAoBA,IAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;AAsBtB,IAAM,cAAc;;;;;;;;;;;;;AAcpB,IAAM,gBAAgB;;;;;;;;;;AAWtB,IAAM,cAAc;;;;;;;;;;AAWpB,IAAM,cAAc;;;;;;;;;;AAqBpB,IAAa,OAAsC,YAAY,MAAM,QAAQ;CAC3E,SAAS,CAAC,SAAS,QAAQ;CAC3B,WACE,OAAO,IAAI,aAAa;EAMtB,OAAO;GAAE,KAAA,OALU,SAAS,IAAI,SAAS,KAAK;IAAE,MAAM;IAAc,SAAS;GAAc,CAAC,CAAC;GAK/E,OAAO;IAAE,KAAA,OAJJ,SAAS,IAAI,SAAS,KAAK;KAAE,MAAM;KAAqB,SAAS;IAAY,CAAC,CAAC;IAItE,OAAA,OAHP,SAAS,IAAI,SAAS,KAAK;KAAE,MAAM;KAAsB,SAAS;IAAc,CAAC,CAAC;IAGpE,KAAA,OAFhB,SAAS,IAAI,SAAS,KAAK;KAAE,MAAM;KAAqB,SAAS;IAAY,CAAC,CAAC;IAE1D,KAAA,OADrB,SAAS,IAAI,SAAS,KAAK;KAAE,MAAM;KAAyB,SAAS;IAAY,CAAC,CAAC;GAC1D;EAAE;CAChD,CAAC;AACL,CAAC;;;AC5FD,IAAM,eAAe;;;;;;;;;;;;;;AAerB,IAAa,eAA+D,YAAY,MAAM,WAAW;CACvG,SAAS,CAAC,QAAQ,SAAS,aAAa,YAAY;CACpD,MAAM,EAAE,MAAM,YACZ,OAAO,IAAI,aAAa;EACtB,MAAM,UAAU;GAAC,KAAK;GAAK,KAAK,MAAM;GAAK,KAAK,MAAM;GAAO,KAAK,MAAM;GAAK,KAAK,MAAM;EAAG;EAC3F,MAAM,eAAe,OAAO,SAAS,IACnC,aAAa,KAAK;GAChB,MAAM;GACN,MAAM;GACN,SAAS,CAAC,GAAG,QAAQ,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,KAAK,MAAM,OAAO,CAAC;EAC3E,CAAC,CACH;EAcA,OAAO;GAAE,SAAA,OAZc,SAAS,IAC9B,QAAQ,KAAK;IACX,MAAM;IACN,aACE;IACF,QAAQ;IACR,cAAc,IAAI,KAAK,YAAY;IACnC,SAAS,IAAI,KAAK,MAAM,OAAO;IAC/B,WAAW,QAAQ,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC;GAC/C,CAAC,CACH;GAEkB;EAAa;CACjC,CAAC;AACL,CAAC;;;;;;;AClDD,IAAa,YAAY,QAAQ,IAAI,MAAM,IAAI,KAAK,QAAQ,IAAI,GAAG,oBAAI,IAAI,KAAK,sBAAsB;;AAKtG,IAAa,UAHQ,YAAY,UAAU,SAGpB,CAAA,CAAM;;;ACY7B,IAAM,QAAiC;CACrC;EACE,OAAO;EACP,aACE;EACF,UAAU;CACZ;CACA;EACE,OAAO;EACP,aACE;EACF,UAAU;CACZ;CACA;EACE,OAAO;EACP,aACE;EACF,UAAU;CACZ;CACA;EACE,OAAO;EACP,aACE;EACF,UAAU;CACZ;AACF;;AAKA,IAAa,QAAwC,YAAY,MAAM,SAAS;CAC9E,SAAS,CAAC,QAAQ,SAAS,KAAK,IAAI;CACpC,WACE,OAAO,IAAI,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,IAC9B,QAAQ,KAAK;GACX,MAAM;GACN,aAAa;EACf,CAAC,CACH;EAEA,MAAM,QAAQ,MAAM,KAAK,SACvB,KAAK,KAAK;GACR,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,UAAU,KAAK;GACf,QAAQ;GACR,SAAS,CACP;IACE,IAAI,SAAS,OAAO;IACpB,MAAM,QAAQ,CAAC;IACf,OAAO;IACP,aAAa;GACf,CACF;EACF,CAAC,CACH;EACA,OAAO,YAAY,SAAS,SAAS,QAAQ,SAAS,SAAS;GAC7D,QAAQ,QAAQ;EAClB,CAAC;EAGD,KAAK,MAAM,CAAC,OAAO,SAAS,MAAM,QAAQ,GACxC,IAAI,QAAQ,GAAG;GACb,MAAM,WAAW,MAAM,QAAQ;GAC/B,IAAI,OAAO,OAAO,SAAS;IACzB,KAAK,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC;GACtC,CAAC;EACH;EAGF,OAAO;GAAE;GAAS;EAAM;CAC1B,CAAC;AACL,CAAC;;;;;;;ACnFD,IAAM,SAAS;CACb,MAAM;CACN,OAAO;CACP,SAAS;AACX;;;;;;;;;;;AAYA,IAAa,aACX,YAAY,KAAK;CACf,OAAO;EAAE,MAAM;EAA+B,MAAM;EAAe,KAAK;CAAO;CAC/E,WAAW;CACX;CACA,QAAQ,WACN,OAAO,IAAI,aAAa;EACtB,MAAM,OAAO,OAAO,OAAO,KAAK;EAChC,MAAM,QAAQ,OAAO,OAAO,MAAM;EAClC,OAAO,OAAO,QAAQ;GAAE;GAAM;EAAM,CAAC;EAGrC,OAAO,YAAY,WAAW,WAAW;GACvC,IAAI,KAAK,KAAK,GAAG;GACjB,IAAI,KAAK,KAAK,MAAM,GAAG;GACvB,IAAI,KAAK,KAAK,MAAM,KAAK;GACzB,IAAI,KAAK,KAAK,MAAM,GAAG;GACvB,IAAI,KAAK,KAAK,MAAM,GAAG;EACzB,CAAC;CACH,CAAC;AACL,CAAC;AAEH,IAAa,qBACX,YAAY,aAAa;CACvB,IAAI;CACJ,aAAa;CACb,YAAY,KAAK;AACnB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import "react";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import * as Panel from "@dxos/react-ui/Panel";
4
+ import { Logger } from "@dxos/react-ui-debug";
5
+ //#region src/containers/LoggerPanel/LoggerPanel.tsx
6
+ var LoggerPanel = () => /* @__PURE__ */ jsx(Logger.Root, { children: /* @__PURE__ */ jsxs(Panel.Root, { children: [
7
+ /* @__PURE__ */ jsx(Panel.Header, { children: /* @__PURE__ */ jsx(Logger.Toolbar, {}) }),
8
+ /* @__PURE__ */ jsx(Panel.Body, {
9
+ asChild: true,
10
+ children: /* @__PURE__ */ jsx(Logger.Content, { children: /* @__PURE__ */ jsx(Logger.List, {}) })
11
+ }),
12
+ /* @__PURE__ */ jsx(Panel.Footer, { children: /* @__PURE__ */ jsx(Logger.Filter, {}) })
13
+ ] }) });
14
+ LoggerPanel.displayName = "LoggerPanel";
15
+ //#endregion
16
+ export { LoggerPanel };
17
+
18
+ //# sourceMappingURL=chunk-LoggerPanel.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-LoggerPanel.mjs","names":[],"sources":["../../src/containers/LoggerPanel/LoggerPanel.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Logger } from '@dxos/react-ui-debug';\nimport * as Panel from '@dxos/react-ui/Panel';\n\nexport const LoggerPanel = () => (\n <Logger.Root>\n <Panel.Root>\n <Panel.Header>\n <Logger.Toolbar />\n </Panel.Header>\n <Panel.Body asChild>\n <Logger.Content>\n <Logger.List />\n </Logger.Content>\n </Panel.Body>\n <Panel.Footer>\n <Logger.Filter />\n </Panel.Footer>\n </Panel.Root>\n </Logger.Root>\n);\n\nLoggerPanel.displayName = 'LoggerPanel';\n"],"mappings":";;;;;AASA,IAAa,oBACX,oBAAC,OAAO,MAAR,EAAA,UACE,qBAAC,MAAM,MAAP,EAAA,UAAA;CACE,oBAAC,MAAM,QAAP,EAAA,UACE,oBAAC,OAAO,SAAR,CAAiB,CAAA,EACL,CAAA;CACd,oBAAC,MAAM,MAAP;EAAY,SAAA;EACV,UAAA,oBAAC,OAAO,SAAR,EAAA,UACE,oBAAC,OAAO,MAAR,CAAc,CAAA,EACA,CAAA;CACN,CAAA;CACZ,oBAAC,MAAM,QAAP,EAAA,UACE,oBAAC,OAAO,QAAR,CAAgB,CAAA,EACJ,CAAA;AACJ,EAAA,CAAA,EACD,CAAA;AAGf,YAAY,cAAc"}
@@ -0,0 +1,6 @@
1
+ //#region PLUGIN.mdl?raw
2
+ var PLUGIN_default = "---\nid: org.dxos.plugin.debug\nname: DebugPlugin\nversion: 0.1.0\n---\n\nDeveloper debugging utilities for `DXOS` Composer — a debug panel (console, log viewer, and every developer tool as a navtree) docked as the deck's bottom drawer or floated as a window, synthetic-object generation, a per-object Debug companion, a space-objects browser, a wireframe overlay, and a transient-stats panel. The panel is a navtree over a hidden `root/debug` app-graph category that this plugin contributes; the Devtools inspector (`org.dxos.plugin.devtools`) attaches its tree there too. Nothing under `root/debug` appears in the main navtree, opens in the deck, or has a URL.\n\n## Extensions\n\nThe following extension dialects are used in this document.\n\n| Term | URI |\n|-------------|--------------------------------|\n| `type` | `org.dxos.mdl.type@1.0` |\n| `feat` | `org.dxos.mdl.feat@1.0` |\n| `component` | `org.dxos.mdl.component@1.0` |\n| `test` | `org.dxos.mdl.test@1.0` |\n\n## Types\n\n```mdl\ntype Settings\n fields:\n wireframe?: boolean # overlay every article/section surface with a labelled border\n traceAll?: boolean # enable verbose operation tracing across all plugins\n```\n\n```mdl\ntype DebugPluginOptions\n fields:\n logStore?: IdbLogStore # shared persistent log store for capturing and downloading logs\n persistStats?: boolean # persist the stats-panel store to localStorage (default true)\n```\n\n```mdl\ntype DebugPanelMode\n literals: docked | floating # docked = the deck's bottom drawer (default); floating = a FloatingPanel window\n```\n\n```mdl\ntype DebugPanelViewState\n desc: Persisted (localStorage) so a debugging session survives the reloads it provokes; the floating window's open/closed state is not part of it (the drawer's is deck state).\n fields:\n nodeId?: string # qualified id of the selected page (e.g. root/debug/devtools/client/config)\n open: string[] # path keys of the expanded branches\n mode?: DebugPanelMode # which host shows the panel; absent reads as docked\n position?: Point # where the floating panel was last dragged\n size?: Size # the size the floating panel was last resized to\n```\n\n## App graph\n\n```mdl\nfeat DebugCategory\n desc: |\n A hidden `debug` category on the app-graph root: node `root/debug`, type\n `GraphPath.GroupTypes.debug`, `data: null`, `disposition: hidden`, not draggable or droppable.\n `hidden` is what the main navtree already filters, so no consumer has to learn about the\n category. Tool plugins attach with `AppNodeMatcher.whenDebugGroup`; every tool is a global node\n (no per-space enumeration) and a space-scoped tool resolves the active workspace's space at\n render time. Nothing under `root/debug` declares a URL binding.\n```\n\n| Node | Type | Article |\n|-----------------------------|---------------------|----------------------------|\n| `root/debug/debug` | `DebugNodes.id` | branch (no article); open with the console selected on a pristine panel |\n| `root/debug/debug/console` | `DebugNodes.Console`| Console (agent debug shell)|\n| `root/debug/debug/logs` | `DebugNodes.Logs` | Log viewer |\n| `root/debug/debug/space` | `DebugNodes.SpaceType` | Generate objects (active space) |\n| `root/debug/devtools/...` | contributed by `org.dxos.plugin.devtools` | Client / HALO / ECHO / MESH / EDGE inspectors, App Graph, SDK Explorer, CLI |\n\n## Components\n\n```mdl\ncomponent DebugPanel\n desc: |\n The debug surface in parts (`DebugPanel.Root` / `Body` / `Sidebar` / `Main`) with two hosts\n that share one `Root` context, so selection and open branches carry over when the panel moves:\n `DebugPanelDrawer` renders it in the deck's bottom drawer (`AppSurface.Drawer`,\n `org.dxos.role.drawer`) and `DebugPanelStatus` hosts it in a `FloatingPanel`. `Root` owns the\n selection, the expanded branches and the mode (DebugPanelViewState); `Body` is the `Splitter`\n over `Sidebar` — a `Tree` over `root/debug` via `useGraphTreeModel`\n (`@dxos/plugin-graph/hooks`) — and `Main`, the selected node's article surface.\n `DebugPanelHeader` is the title-bar control both hosts share: a dock/float switch\n (`debugPanel.mode`) and, for the drawer, a close (`debugPanel.close`). Selecting a row never\n touches the deck, attention, or the URL; the drawer is not a plank and never takes attention.\n props:\n contextId?: string # view-state context; defaults to the status-rail singleton\n state:\n nodeId?: string # selected page\n open: string[] # expanded branch path keys\n mode: DebugPanelMode # docked (default) or floating\n actions:\n select(nodeId: string) # a leaf shows its article; a branch (data: null) toggles instead\n setOpen(pathKey: string, isOpen: boolean)\n setMode(mode: DebugPanelMode) # float: close the drawer, open the window; dock: close the window, open the drawer\n layout: |\n ┌─ Main.Drawer (docked, default) ──────────────────────┐\n │ Debug ⇱ × │\n ├─ Sidebar (Tree) ──┬─ Main (article surface) ────────┤\n │ ▾ Debug │ │\n │ ▸ Console │ Config JSON / log table / │\n │ Logs │ generator / ... │\n │ Generate obj. │ │\n │ ▾ DevTools │ (console and logs stay mounted │\n │ ▾ Client │ while another page is shown) │\n │ Config │ │\n └───────────────────┴──────────────────────────────────┘\n Floating: the same Sidebar/Main under a FloatingPanel title bar (⇲ dock, — minimize, ×).\n```\n\n## Features\n\n```mdl\nfeat DebugPanel\n desc: |\n A status-bar button shows the debug panel: docked (the default) it toggles the deck's bottom\n drawer via `LayoutOperation.UpdateDrawer`, so the planks reflow above it, its height is dragged\n from the top edge and persists with the deck's layout, and fullscreen hides it; floating, it\n opens the panel as a window over the app. The title bar's dock/float control moves the panel\n between the two with the same tool selected. The sidebar lists Debug (Console, Logs, Generate\n objects — a pristine panel opens Debug with the console selected) and DevTools, and the\n selection, open branches, and mode persist across reloads.\n```\n\n```mdl\nfeat GenerateObjects\n desc: Create configurable batches of synthetic ECHO objects into the active workspace's space, from the Debug → Generate objects page of the panel.\n```\n\n```mdl\nfeat ObjectDebugCompanion\n desc: A Debug companion tab on every ECHO object exposing raw field values and DXNs.\n```\n\n```mdl\nfeat SpaceObjectsBrowser\n desc: A deck companion listing all objects in the active space with live reactive updates.\n```\n\n```mdl\nfeat Wireframe\n desc: Overlay labelled borders around every article and section surface.\n```\n\n```mdl\nfeat StatsPanel\n desc: |\n The shared telemetry store (`AppCapabilities.StatsPanel`) as one `StatCard` per plugin\n compartment. Rendered on the plugin's own `org.dxos.plugin.debug.surface.stats` role (with an\n empty-state card) and contributed to `AppSurface.DevtoolsOverview` at position 20 (no card when\n the store is empty), so it stacks under the devtools cards in the Stats companion.\n```\n\n## QA\n\nExecutable tests. Each step carries a human instruction (`do`) and, where the step maps to an\ninvocable operation, an agent binding (`invoke`). Report failures by test and step number.\n\nplugin-debug is a dev-only utility plugin: it defaults on in `isDev` builds (see\n`packages/apps/composer-app/src/plugin-defs.tsx`), off otherwise.\n\n```mdl\ntest QA-1: Insert Lorem ipsum from the slash menu\n desc: The one debug feature with a real operation behind it — the MenuExtension contribution used as the worked example in plugin-markdown's QA-3.\n actors: both\n status: unverified\n given:\n - an identity exists\n - space: a space is open and contains at least one collection\n - plugin-debug is enabled (dev-only default; see above)\n - attendableId: an empty document is open in the editor, its attendable id\n steps:\n - name: Open the command menu\n do: With the caret on an empty line, type `/`.\n expect: the popup lists a \"Debug\" group containing \"Lorem ipsum\", below the built-in groups\n note: |\n NO `invoke` — opening the popup is a real keystroke and CodeMirror does not observe\n synthetic input events. Human-only step; an agent run reports it unverified.\n - name: Insert a paragraph\n do: Select \"Lorem ipsum\".\n invoke: org.dxos.operation.debug.insertLoremIpsum { subject: $given.attendableId, head: 0 }\n expect: a paragraph of placeholder prose appears at the caret\n assert: return view.state.doc.length > 0;\n after:\n - name: Clear the document\n do: Select all and delete.\n expect: the editor is empty and the document body is an empty string\n```\n\n```mdl\ntest QA-2: Generate synthetic objects into a collection\n desc: The SpaceGenerator UI (GenerateObjects) — no operation exists behind it, so this is a human-only sanity check that the debug tooling itself works.\n actors: human\n covers: [GenerateObjects, SpaceObjectsBrowser]\n status: unverified\n given:\n - an identity exists\n - space: a space is open\n - collection: a collection in that space, empty of synthetic objects\n - plugin-debug is enabled (dev-only default; see above)\n steps:\n - name: Open the debug panel and generate objects\n do: |\n Click the status-bar debug button (terminal icon), then in the panel's sidebar open\n Debug → Generate objects. Set the batch size (e.g. 5) and press `+` on\n `org.dxos.type.document`.\n expect: |\n the type's count rises by 5, the documents appear in the space-objects browser, and the\n main navtree's SYSTEM group still shows only Database (no DevTools or Debug node)\n note: NO `invoke` — GenerateObjects has no operation; it is a UI-only synthetic-data generator.\n after:\n - name: Remove the generated objects\n do: Select the generated documents in the space-objects browser and delete them.\n expect: the collection returns to its prior state\n```\n\n```mdl\ntest QA-3: Walk the review-queue demo space\n desc: |\n The demo script for the Review template (`samples/review`): seed a space holding one project whose\n finished tasks carry merged dxos/dxos pull requests with their screenshots and demo recordings,\n and whose tasks in review carry the PRs still open — then walk it the way a reviewer would.\n actors: both\n status: passing # 2026-09-24, agent run recorded as a demo video\n given:\n - an identity exists\n - defaultSpace: the default space, which is where the run returns to\n - plugin-debug, plugin-projects, plugin-tasks, plugin-file and plugin-video are enabled (dev-only defaults)\n - the browser can reach raw.githubusercontent.com, which serves the screenshots\n before:\n - name: Seed the space\n do: Create a space from the \"Composer — Review queue\" template.\n invoke: org.dxos.operation.debug.createSpaceFromTemplate { id: \"org.dxos.plugin-debug.template.review\" }\n capture: seeded\n expect: a space named \"Composer — Review queue\" appears in the space list\n assert: return $snapshot.spaces.some((s) => s.id === $result.spaceId)\n note: |\n The template fetches four PNGs while it applies, so on a cold server the step takes up to a minute.\n A screenshot the browser cannot reach is kept as an external blob naming its URL — this step still\n passes, and the image step below is where that shows.\n - name: Find the project\n do: Open the space and expand Projects in the navtree.\n invoke: org.dxos.operation.space.queryObjects { typename: \"org.dxos.type.project\" }\n space: $seeded.spaceId\n capture: projects\n expect: Projects lists one project, \"Composer polish\"\n assert: return $result.results.length === 1 && $result.results[0].label === 'Composer polish'\n steps:\n - name: Open the project's tasks\n do: Click \"Composer polish\", then its Tasks tab.\n invoke: org.dxos.operation.appToolkit.open { subject: [\"root/$seeded.spaceId/ai/org.dxos.type.project/$projects.results[0].dxn.objectId\"] }\n expect: |\n seven tasks: three done, each with a violet merged `#` pill and image or video tags; two in review,\n each with a green open `#` pill and a video tag; one started; one to do\n assert: |\n const tasks = await dxos.spaces($seeded.spaceId).db.query(dxos.Filter.type(dxos.DXN.make('org.dxos.type.task'))).run();\n const count = (status) => tasks.filter((task) => task.status === status).length;\n const opened = $snapshot.planks.some((plank) => plank.subject?.dxn === $projects.results[0].dxn);\n return opened && tasks.length === 7 && count('done') === 3 && count('review') === 2;\n note: The Tasks tab is a view switch inside the plank, so the human clicks it; the agent judges from the database.\n - name: Look at a finished task's screenshot\n do: On \"Run desktop OAuth in the system browser\", click the `oauth-pending.png` tag.\n expect: a preview card shows the screenshot of the sign-in form waiting on the provider\n assert: |\n const blobs = await dxos.spaces($seeded.spaceId).db.query(dxos.Filter.type(dxos.DXN.make('org.dxos.type.blob'))).run();\n return blobs.length === 4 && blobs.every((blob) => blob.data._tag === 'inline' && blob.size > 0);\n note: NO `invoke` — the tag is a pointer gesture on the task row, with no operation behind it.\n - name: Review an open pull request\n do: On \"Switch identities in place instead of a reset and reload\" (in review), click the `#13336` pill.\n expect: the preview names dxos/dxos#13336, state open, by dmaretskyi\n assert: |\n const prs = await dxos.spaces($seeded.spaceId).db.query(dxos.Filter.type(dxos.DXN.make('org.dxos.type.pullRequest'))).run();\n return prs.filter((pr) => pr.state === 'open').map((pr) => pr.number).sort().join() === '12952,13336';\n note: NO `invoke` — as above.\n - name: Watch a finished task's demo\n do: On \"Count down a toast's remaining time\", click the \"Toast countdown demo\" tag, then Open from its ⋮ menu.\n expect: |\n the video opens in the project's plank (breadcrumb \"Composer polish » Toast countdown demo\") and plays\n the toast counting down; the Transcript tab says transcripts are for YouTube videos only, and no error\n toast appears\n assert: |\n return $snapshot.planks.some((plank) => plank.subject?.typename === 'org.dxos.type.video') &&\n !$snapshot.toasts.some((toast) => toast.title === 'Transcription failed.') && $stepErrors.length === 0;\n note: NO `invoke` — as above. The recording streams from its URL into the player; nothing is written.\n after:\n - name: Delete the space\n do: Open the space's settings and delete the space.\n invoke: org.dxos.operation.space.delete { space: Space($seeded.spaceId) }\n expect: the space leaves the space list\n assert: return !$snapshot.spaces.some((s) => s.id === $seeded.spaceId)\n - name: Return to the default space\n do: Pick the default space in the space list.\n invoke: org.dxos.operation.appToolkit.switchWorkspace { subject: \"root/$given.defaultSpace.id\" }\n expect: the workspace is the default space and no error is logged\n assert: return $snapshot.layout.workspace === `root/${$given.defaultSpace.id}` && $stepErrors.length === 0\n```\n";
3
+ //#endregion
4
+ export { PLUGIN_default as t };
5
+
6
+ //# sourceMappingURL=chunk-PLUGIN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-PLUGIN.mjs","names":[],"sources":[],"mappings":""}