@shivaedev/work-board 0.12.0 → 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 (989) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +11 -11
  3. package/assets/agent.js +27 -31
  4. package/assets/native.js +34 -69
  5. package/assets/react.css +1 -1
  6. package/assets/react.js +39 -34
  7. package/dist/browser/diagnostics/schema.d.ts +49 -0
  8. package/dist/browser/diagnostics/schema.d.ts.map +1 -0
  9. package/dist/browser/diagnostics/schema.js +11 -0
  10. package/dist/browser/diagnostics/schema.js.map +1 -0
  11. package/dist/browser/views/ResultProjection.d.ts +245 -0
  12. package/dist/browser/views/ResultProjection.d.ts.map +1 -0
  13. package/dist/browser/views/ResultProjection.js +32 -0
  14. package/dist/browser/views/ResultProjection.js.map +1 -0
  15. package/dist/browser/views/remaining.d.ts +345 -0
  16. package/dist/browser/views/remaining.d.ts.map +1 -0
  17. package/dist/browser/views/remaining.js +21 -0
  18. package/dist/browser/views/remaining.js.map +1 -0
  19. package/dist/browser/views/schema.d.ts +715 -0
  20. package/dist/browser/views/schema.d.ts.map +1 -0
  21. package/dist/browser/views/schema.js +60 -0
  22. package/dist/browser/views/schema.js.map +1 -0
  23. package/dist/browser/views/state.d.ts +15 -0
  24. package/dist/browser/views/state.d.ts.map +1 -0
  25. package/dist/browser/views/state.js +45 -0
  26. package/dist/browser/views/state.js.map +1 -0
  27. package/dist/client/client.d.ts +5 -5
  28. package/dist/client/client.d.ts.map +1 -1
  29. package/dist/client/client.js +4 -4
  30. package/dist/client/client.js.map +1 -1
  31. package/dist/client/document/Mermaid.d.ts.map +1 -1
  32. package/dist/client/document/Mermaid.js +39 -10
  33. package/dist/client/document/Mermaid.js.map +1 -1
  34. package/dist/client/document/View.d.ts +5 -1
  35. package/dist/client/document/View.d.ts.map +1 -1
  36. package/dist/client/document/View.js +13 -1
  37. package/dist/client/document/View.js.map +1 -1
  38. package/dist/client/document/boardLayout.d.ts +6 -0
  39. package/dist/client/document/boardLayout.d.ts.map +1 -0
  40. package/dist/client/document/boardLayout.js +69 -0
  41. package/dist/client/document/boardLayout.js.map +1 -0
  42. package/dist/client/entry.d.ts +0 -12
  43. package/dist/client/entry.d.ts.map +1 -1
  44. package/dist/client/entry.js +0 -18
  45. package/dist/client/entry.js.map +1 -1
  46. package/dist/client/formDraft.d.ts +3 -0
  47. package/dist/client/formDraft.d.ts.map +1 -0
  48. package/dist/client/formDraft.js +8 -0
  49. package/dist/client/formDraft.js.map +1 -0
  50. package/dist/client/formFocus.d.ts.map +1 -1
  51. package/dist/client/formFocus.js +5 -0
  52. package/dist/client/formFocus.js.map +1 -1
  53. package/dist/client/handoffs/failureStatus.d.ts +2 -0
  54. package/dist/client/handoffs/failureStatus.d.ts.map +1 -0
  55. package/dist/client/handoffs/failureStatus.js +7 -0
  56. package/dist/client/handoffs/failureStatus.js.map +1 -0
  57. package/dist/client/page/routeQuery.d.ts +2 -7
  58. package/dist/client/page/routeQuery.d.ts.map +1 -1
  59. package/dist/client/page/routeQuery.js +0 -3
  60. package/dist/client/page/routeQuery.js.map +1 -1
  61. package/dist/client/react/Age.d.ts +9 -0
  62. package/dist/client/react/Age.d.ts.map +1 -0
  63. package/dist/client/react/Age.js +32 -0
  64. package/dist/client/react/Age.js.map +1 -0
  65. package/dist/client/react/AnswerForm.d.ts +5 -3
  66. package/dist/client/react/AnswerForm.d.ts.map +1 -1
  67. package/dist/client/react/AnswerForm.js +21 -11
  68. package/dist/client/react/AnswerForm.js.map +1 -1
  69. package/dist/client/react/AnswerPrompts.d.ts +10 -2
  70. package/dist/client/react/AnswerPrompts.d.ts.map +1 -1
  71. package/dist/client/react/AnswerPrompts.js +28 -12
  72. package/dist/client/react/AnswerPrompts.js.map +1 -1
  73. package/dist/client/react/BoardMain.d.ts +10 -0
  74. package/dist/client/react/BoardMain.d.ts.map +1 -0
  75. package/dist/client/react/BoardMain.js +19 -0
  76. package/dist/client/react/BoardMain.js.map +1 -0
  77. package/dist/client/react/BoardShell.d.ts +6 -1
  78. package/dist/client/react/BoardShell.d.ts.map +1 -1
  79. package/dist/client/react/BoardShell.js +34 -12
  80. package/dist/client/react/BoardShell.js.map +1 -1
  81. package/dist/client/react/ChangesMain.d.ts +8 -0
  82. package/dist/client/react/ChangesMain.d.ts.map +1 -0
  83. package/dist/client/react/ChangesMain.js +24 -0
  84. package/dist/client/react/ChangesMain.js.map +1 -0
  85. package/dist/client/react/DiagnosticsFleet.d.ts +6 -0
  86. package/dist/client/react/DiagnosticsFleet.d.ts.map +1 -0
  87. package/dist/client/react/DiagnosticsFleet.js +16 -0
  88. package/dist/client/react/DiagnosticsFleet.js.map +1 -0
  89. package/dist/client/react/DiagnosticsMain.d.ts +8 -0
  90. package/dist/client/react/DiagnosticsMain.d.ts.map +1 -0
  91. package/dist/client/react/DiagnosticsMain.js +11 -0
  92. package/dist/client/react/DiagnosticsMain.js.map +1 -0
  93. package/dist/client/react/DiagnosticsPage.d.ts +5 -0
  94. package/dist/client/react/DiagnosticsPage.d.ts.map +1 -0
  95. package/dist/client/react/DiagnosticsPage.js +23 -0
  96. package/dist/client/react/DiagnosticsPage.js.map +1 -0
  97. package/dist/client/react/DocumentContext.d.ts.map +1 -1
  98. package/dist/client/react/DocumentContext.js +23 -3
  99. package/dist/client/react/DocumentContext.js.map +1 -1
  100. package/dist/client/react/DocumentMain.d.ts +2 -3
  101. package/dist/client/react/DocumentMain.d.ts.map +1 -1
  102. package/dist/client/react/DocumentMain.js +8 -4
  103. package/dist/client/react/DocumentMain.js.map +1 -1
  104. package/dist/client/react/Favorite.d.ts +5 -0
  105. package/dist/client/react/Favorite.d.ts.map +1 -0
  106. package/dist/client/react/Favorite.js +10 -0
  107. package/dist/client/react/Favorite.js.map +1 -0
  108. package/dist/client/react/FormField.d.ts +13 -0
  109. package/dist/client/react/FormField.d.ts.map +1 -0
  110. package/dist/client/react/FormField.js +39 -0
  111. package/dist/client/react/FormField.js.map +1 -0
  112. package/dist/client/react/HandoffForm.d.ts +5 -0
  113. package/dist/client/react/HandoffForm.d.ts.map +1 -0
  114. package/dist/client/react/HandoffForm.js +27 -0
  115. package/dist/client/react/HandoffForm.js.map +1 -0
  116. package/dist/client/react/HandoffPage.d.ts +5 -0
  117. package/dist/client/react/HandoffPage.d.ts.map +1 -0
  118. package/dist/client/react/HandoffPage.js +15 -0
  119. package/dist/client/react/HandoffPage.js.map +1 -0
  120. package/dist/client/react/HandoffPrompt.d.ts +6 -0
  121. package/dist/client/react/HandoffPrompt.d.ts.map +1 -0
  122. package/dist/client/react/HandoffPrompt.js +21 -0
  123. package/dist/client/react/HandoffPrompt.js.map +1 -0
  124. package/dist/client/react/Header.d.ts +11 -2
  125. package/dist/client/react/Header.d.ts.map +1 -1
  126. package/dist/client/react/Header.js +2 -2
  127. package/dist/client/react/Header.js.map +1 -1
  128. package/dist/client/react/HistoryComparison.d.ts +5 -0
  129. package/dist/client/react/HistoryComparison.d.ts.map +1 -0
  130. package/dist/client/react/HistoryComparison.js +14 -0
  131. package/dist/client/react/HistoryComparison.js.map +1 -0
  132. package/dist/client/react/HistoryRetention.d.ts +5 -0
  133. package/dist/client/react/HistoryRetention.d.ts.map +1 -0
  134. package/dist/client/react/HistoryRetention.js +28 -0
  135. package/dist/client/react/HistoryRetention.js.map +1 -0
  136. package/dist/client/react/HomeBoard.d.ts +5 -0
  137. package/dist/client/react/HomeBoard.d.ts.map +1 -0
  138. package/dist/client/react/HomeBoard.js +8 -0
  139. package/dist/client/react/HomeBoard.js.map +1 -0
  140. package/dist/client/react/InboxPage.d.ts +5 -0
  141. package/dist/client/react/InboxPage.d.ts.map +1 -0
  142. package/dist/client/react/InboxPage.js +18 -0
  143. package/dist/client/react/InboxPage.js.map +1 -0
  144. package/dist/client/react/LiveControls.d.ts +8 -0
  145. package/dist/client/react/LiveControls.d.ts.map +1 -0
  146. package/dist/client/react/LiveControls.js +51 -0
  147. package/dist/client/react/LiveControls.js.map +1 -0
  148. package/dist/client/react/Modal.d.ts +12 -0
  149. package/dist/client/react/Modal.d.ts.map +1 -0
  150. package/dist/client/react/Modal.js +62 -0
  151. package/dist/client/react/Modal.js.map +1 -0
  152. package/dist/client/react/NavigationTree.d.ts.map +1 -1
  153. package/dist/client/react/NavigationTree.js +2 -1
  154. package/dist/client/react/NavigationTree.js.map +1 -1
  155. package/dist/client/react/OverviewGroups.d.ts +5 -0
  156. package/dist/client/react/OverviewGroups.d.ts.map +1 -0
  157. package/dist/client/react/OverviewGroups.js +18 -0
  158. package/dist/client/react/OverviewGroups.js.map +1 -0
  159. package/dist/client/react/OverviewPage.d.ts +5 -0
  160. package/dist/client/react/OverviewPage.d.ts.map +1 -0
  161. package/dist/client/react/OverviewPage.js +16 -0
  162. package/dist/client/react/OverviewPage.js.map +1 -0
  163. package/dist/client/react/ProjectionFrame.d.ts +19 -0
  164. package/dist/client/react/ProjectionFrame.d.ts.map +1 -0
  165. package/dist/client/react/ProjectionFrame.js +85 -0
  166. package/dist/client/react/ProjectionFrame.js.map +1 -0
  167. package/dist/client/react/ProjectionMain.d.ts +10 -0
  168. package/dist/client/react/ProjectionMain.d.ts.map +1 -0
  169. package/dist/client/react/ProjectionMain.js +22 -0
  170. package/dist/client/react/ProjectionMain.js.map +1 -0
  171. package/dist/client/react/PromptOption.d.ts +12 -0
  172. package/dist/client/react/PromptOption.d.ts.map +1 -0
  173. package/dist/client/react/PromptOption.js +9 -0
  174. package/dist/client/react/PromptOption.js.map +1 -0
  175. package/dist/client/react/ReadingLibrary.d.ts +9 -0
  176. package/dist/client/react/ReadingLibrary.d.ts.map +1 -0
  177. package/dist/client/react/ReadingLibrary.js +78 -0
  178. package/dist/client/react/ReadingLibrary.js.map +1 -0
  179. package/dist/client/react/RemainingMain.d.ts +10 -0
  180. package/dist/client/react/RemainingMain.d.ts.map +1 -0
  181. package/dist/client/react/RemainingMain.js +27 -0
  182. package/dist/client/react/RemainingMain.js.map +1 -0
  183. package/dist/client/react/RespondPage.d.ts +5 -0
  184. package/dist/client/react/RespondPage.d.ts.map +1 -0
  185. package/dist/client/react/RespondPage.js +16 -0
  186. package/dist/client/react/RespondPage.js.map +1 -0
  187. package/dist/client/react/ResponseMarkdown.d.ts.map +1 -1
  188. package/dist/client/react/ResponseMarkdown.js +16 -2
  189. package/dist/client/react/ResponseMarkdown.js.map +1 -1
  190. package/dist/client/react/ResultCriteria.d.ts +5 -0
  191. package/dist/client/react/ResultCriteria.d.ts.map +1 -0
  192. package/dist/client/react/ResultCriteria.js +33 -0
  193. package/dist/client/react/ResultCriteria.js.map +1 -0
  194. package/dist/client/react/ResultFeedback.d.ts +5 -0
  195. package/dist/client/react/ResultFeedback.d.ts.map +1 -0
  196. package/dist/client/react/ResultFeedback.js +12 -0
  197. package/dist/client/react/ResultFeedback.js.map +1 -0
  198. package/dist/client/react/ResultPage.d.ts +5 -0
  199. package/dist/client/react/ResultPage.d.ts.map +1 -0
  200. package/dist/client/react/ResultPage.js +15 -0
  201. package/dist/client/react/ResultPage.js.map +1 -0
  202. package/dist/client/react/SavedViews.d.ts +4 -0
  203. package/dist/client/react/SavedViews.d.ts.map +1 -0
  204. package/dist/client/react/SavedViews.js +16 -0
  205. package/dist/client/react/SavedViews.js.map +1 -0
  206. package/dist/client/react/SearchDialog.d.ts +11 -0
  207. package/dist/client/react/SearchDialog.d.ts.map +1 -0
  208. package/dist/client/react/SearchDialog.js +67 -0
  209. package/dist/client/react/SearchDialog.js.map +1 -0
  210. package/dist/client/react/SearchResults.d.ts +7 -0
  211. package/dist/client/react/SearchResults.d.ts.map +1 -0
  212. package/dist/client/react/SearchResults.js +19 -0
  213. package/dist/client/react/SearchResults.js.map +1 -0
  214. package/dist/client/react/ShellApi.d.ts +11 -1
  215. package/dist/client/react/ShellApi.d.ts.map +1 -1
  216. package/dist/client/react/Sidebar.d.ts +5 -2
  217. package/dist/client/react/Sidebar.d.ts.map +1 -1
  218. package/dist/client/react/Sidebar.js +37 -2
  219. package/dist/client/react/Sidebar.js.map +1 -1
  220. package/dist/client/react/StartPage.d.ts +5 -0
  221. package/dist/client/react/StartPage.d.ts.map +1 -0
  222. package/dist/client/react/StartPage.js +5 -0
  223. package/dist/client/react/StartPage.js.map +1 -0
  224. package/dist/client/react/UpdatesToggle.d.ts +5 -0
  225. package/dist/client/react/UpdatesToggle.d.ts.map +1 -0
  226. package/dist/client/react/UpdatesToggle.js +9 -0
  227. package/dist/client/react/UpdatesToggle.js.map +1 -0
  228. package/dist/client/react/VisualControls.d.ts +17 -0
  229. package/dist/client/react/VisualControls.d.ts.map +1 -0
  230. package/dist/client/react/VisualControls.js +6 -0
  231. package/dist/client/react/VisualControls.js.map +1 -0
  232. package/dist/client/react/VisualInspection.d.ts +2 -0
  233. package/dist/client/react/VisualInspection.d.ts.map +1 -0
  234. package/dist/client/react/VisualInspection.js +26 -0
  235. package/dist/client/react/VisualInspection.js.map +1 -0
  236. package/dist/client/react/VisualViewer.d.ts +6 -0
  237. package/dist/client/react/VisualViewer.d.ts.map +1 -0
  238. package/dist/client/react/VisualViewer.js +106 -0
  239. package/dist/client/react/VisualViewer.js.map +1 -0
  240. package/dist/client/react/WorkCards.d.ts +5 -0
  241. package/dist/client/react/WorkCards.d.ts.map +1 -0
  242. package/dist/client/react/WorkCards.js +13 -0
  243. package/dist/client/react/WorkCards.js.map +1 -0
  244. package/dist/client/react/WorkControls.d.ts +5 -0
  245. package/dist/client/react/WorkControls.d.ts.map +1 -0
  246. package/dist/client/react/WorkControls.js +18 -0
  247. package/dist/client/react/WorkControls.js.map +1 -0
  248. package/dist/client/react/WorkDetail.d.ts +5 -0
  249. package/dist/client/react/WorkDetail.d.ts.map +1 -0
  250. package/dist/client/react/WorkDetail.js +12 -0
  251. package/dist/client/react/WorkDetail.js.map +1 -0
  252. package/dist/client/react/WorkItemTitle.d.ts +7 -0
  253. package/dist/client/react/WorkItemTitle.d.ts.map +1 -0
  254. package/dist/client/react/WorkItemTitle.js +6 -0
  255. package/dist/client/react/WorkItemTitle.js.map +1 -0
  256. package/dist/client/react/WorkPage.d.ts +5 -0
  257. package/dist/client/react/WorkPage.d.ts.map +1 -0
  258. package/dist/client/react/WorkPage.js +17 -0
  259. package/dist/client/react/WorkPage.js.map +1 -0
  260. package/dist/client/react/WorkResults.d.ts +5 -0
  261. package/dist/client/react/WorkResults.d.ts.map +1 -0
  262. package/dist/client/react/WorkResults.js +10 -0
  263. package/dist/client/react/WorkResults.js.map +1 -0
  264. package/dist/client/react/WorkTable.d.ts +5 -0
  265. package/dist/client/react/WorkTable.d.ts.map +1 -0
  266. package/dist/client/react/WorkTable.js +10 -0
  267. package/dist/client/react/WorkTable.js.map +1 -0
  268. package/dist/client/react/WorkTools.d.ts +5 -0
  269. package/dist/client/react/WorkTools.d.ts.map +1 -0
  270. package/dist/client/react/WorkTools.js +7 -0
  271. package/dist/client/react/WorkTools.js.map +1 -0
  272. package/dist/client/react/activeRead.d.ts +7 -0
  273. package/dist/client/react/activeRead.d.ts.map +1 -0
  274. package/dist/client/react/activeRead.js +13 -0
  275. package/dist/client/react/activeRead.js.map +1 -0
  276. package/dist/client/react/createResponse.d.ts +26 -0
  277. package/dist/client/react/createResponse.d.ts.map +1 -0
  278. package/dist/client/react/createResponse.js +29 -0
  279. package/dist/client/react/createResponse.js.map +1 -0
  280. package/dist/client/react/diagnosticsValues.d.ts +13 -0
  281. package/dist/client/react/diagnosticsValues.d.ts.map +1 -0
  282. package/dist/client/react/diagnosticsValues.js +49 -0
  283. package/dist/client/react/diagnosticsValues.js.map +1 -0
  284. package/dist/client/react/entry.js +6 -18
  285. package/dist/client/react/entry.js.map +1 -1
  286. package/dist/client/react/historyStore.d.ts +7 -0
  287. package/dist/client/react/historyStore.d.ts.map +1 -0
  288. package/dist/client/react/historyStore.js +61 -0
  289. package/dist/client/react/historyStore.js.map +1 -0
  290. package/dist/client/react/liveStatus.d.ts +16 -0
  291. package/dist/client/react/liveStatus.d.ts.map +1 -0
  292. package/dist/client/react/liveStatus.js +43 -0
  293. package/dist/client/react/liveStatus.js.map +1 -0
  294. package/dist/client/react/loadBoardPage.d.ts +1 -1
  295. package/dist/client/react/loadBoardPage.d.ts.map +1 -1
  296. package/dist/client/react/loadBoardPage.js +14 -4
  297. package/dist/client/react/loadBoardPage.js.map +1 -1
  298. package/dist/client/react/loadProjection.d.ts +674 -0
  299. package/dist/client/react/loadProjection.d.ts.map +1 -0
  300. package/dist/client/react/loadProjection.js +15 -0
  301. package/dist/client/react/loadProjection.js.map +1 -0
  302. package/dist/client/react/loadRemaining.d.ts +577 -0
  303. package/dist/client/react/loadRemaining.d.ts.map +1 -0
  304. package/dist/client/react/loadRemaining.js +19 -0
  305. package/dist/client/react/loadRemaining.js.map +1 -0
  306. package/dist/client/react/mainLocation.d.ts +6 -0
  307. package/dist/client/react/mainLocation.d.ts.map +1 -0
  308. package/dist/client/react/mainLocation.js +9 -0
  309. package/dist/client/react/mainLocation.js.map +1 -0
  310. package/dist/client/react/navigationLocation.d.ts +33 -0
  311. package/dist/client/react/navigationLocation.d.ts.map +1 -0
  312. package/dist/client/react/navigationLocation.js +22 -0
  313. package/dist/client/react/navigationLocation.js.map +1 -0
  314. package/dist/client/react/pageQuery.d.ts +5 -0
  315. package/dist/client/react/pageQuery.d.ts.map +1 -0
  316. package/dist/client/react/pageQuery.js +35 -0
  317. package/dist/client/react/pageQuery.js.map +1 -0
  318. package/dist/client/react/projectionChanges.d.ts +6 -0
  319. package/dist/client/react/projectionChanges.d.ts.map +1 -0
  320. package/dist/client/react/projectionChanges.js +16 -0
  321. package/dist/client/react/projectionChanges.js.map +1 -0
  322. package/dist/client/react/projectionRoute.d.ts +4 -0
  323. package/dist/client/react/projectionRoute.d.ts.map +1 -0
  324. package/dist/client/react/projectionRoute.js +18 -0
  325. package/dist/client/react/projectionRoute.js.map +1 -0
  326. package/dist/client/react/readerLink.d.ts +2 -0
  327. package/dist/client/react/readerLink.d.ts.map +1 -0
  328. package/dist/client/react/readerLink.js +8 -0
  329. package/dist/client/react/readerLink.js.map +1 -0
  330. package/dist/client/react/readingHistory.d.ts +38 -0
  331. package/dist/client/react/readingHistory.d.ts.map +1 -0
  332. package/dist/client/react/readingHistory.js +33 -0
  333. package/dist/client/react/readingHistory.js.map +1 -0
  334. package/dist/client/react/readingLibrary.d.ts +24 -0
  335. package/dist/client/react/readingLibrary.d.ts.map +1 -0
  336. package/dist/client/react/readingLibrary.js +18 -0
  337. package/dist/client/react/readingLibrary.js.map +1 -0
  338. package/dist/client/react/readingState.d.ts +20 -0
  339. package/dist/client/react/readingState.d.ts.map +1 -0
  340. package/dist/client/react/readingState.js +133 -0
  341. package/dist/client/react/readingState.js.map +1 -0
  342. package/dist/client/react/remainingRoute.d.ts +3 -0
  343. package/dist/client/react/remainingRoute.d.ts.map +1 -0
  344. package/dist/client/react/remainingRoute.js +19 -0
  345. package/dist/client/react/remainingRoute.js.map +1 -0
  346. package/dist/client/react/savedViews.d.ts +14 -0
  347. package/dist/client/react/savedViews.d.ts.map +1 -0
  348. package/dist/client/react/savedViews.js +87 -0
  349. package/dist/client/react/savedViews.js.map +1 -0
  350. package/dist/client/react/scheduleReading.d.ts +3 -0
  351. package/dist/client/react/scheduleReading.d.ts.map +1 -0
  352. package/dist/client/react/scheduleReading.js +36 -0
  353. package/dist/client/react/scheduleReading.js.map +1 -0
  354. package/dist/client/react/searchCommands.d.ts +11 -0
  355. package/dist/client/react/searchCommands.d.ts.map +1 -0
  356. package/dist/client/react/searchCommands.js +7 -0
  357. package/dist/client/react/searchCommands.js.map +1 -0
  358. package/dist/client/react/searchStatus.d.ts +6 -0
  359. package/dist/client/react/searchStatus.d.ts.map +1 -0
  360. package/dist/client/react/searchStatus.js +20 -0
  361. package/dist/client/react/searchStatus.js.map +1 -0
  362. package/dist/client/react/shellIds.d.ts +59 -0
  363. package/dist/client/react/shellIds.d.ts.map +1 -1
  364. package/dist/client/react/shellIds.js +59 -0
  365. package/dist/client/react/shellIds.js.map +1 -1
  366. package/dist/client/react/useAppearance.d.ts +14 -0
  367. package/dist/client/react/useAppearance.d.ts.map +1 -0
  368. package/dist/client/react/useAppearance.js +55 -0
  369. package/dist/client/react/useAppearance.js.map +1 -0
  370. package/dist/client/react/useBoardNavigation.d.ts +3 -0
  371. package/dist/client/react/useBoardNavigation.d.ts.map +1 -0
  372. package/dist/client/react/useBoardNavigation.js +129 -0
  373. package/dist/client/react/useBoardNavigation.js.map +1 -0
  374. package/dist/client/react/useDiagnosticsPolling.d.ts +3 -0
  375. package/dist/client/react/useDiagnosticsPolling.d.ts.map +1 -0
  376. package/dist/client/react/useDiagnosticsPolling.js +23 -0
  377. package/dist/client/react/useDiagnosticsPolling.js.map +1 -0
  378. package/dist/client/react/useDocumentPage.d.ts +1 -1
  379. package/dist/client/react/useDocumentPage.d.ts.map +1 -1
  380. package/dist/client/react/useFormFocus.d.ts +5 -0
  381. package/dist/client/react/useFormFocus.d.ts.map +1 -0
  382. package/dist/client/react/useFormFocus.js +46 -0
  383. package/dist/client/react/useFormFocus.js.map +1 -0
  384. package/dist/client/react/useHandoffForm.d.ts +69 -0
  385. package/dist/client/react/useHandoffForm.d.ts.map +1 -0
  386. package/dist/client/react/useHandoffForm.js +102 -0
  387. package/dist/client/react/useHandoffForm.js.map +1 -0
  388. package/dist/client/react/useHistoryComparison.d.ts +33 -0
  389. package/dist/client/react/useHistoryComparison.d.ts.map +1 -0
  390. package/dist/client/react/useHistoryComparison.js +146 -0
  391. package/dist/client/react/useHistoryComparison.js.map +1 -0
  392. package/dist/client/react/useMedia.d.ts +2 -0
  393. package/dist/client/react/useMedia.d.ts.map +1 -0
  394. package/dist/client/react/useMedia.js +19 -0
  395. package/dist/client/react/useMedia.js.map +1 -0
  396. package/dist/client/react/useResponseForm.d.ts +107 -0
  397. package/dist/client/react/useResponseForm.d.ts.map +1 -0
  398. package/dist/client/react/useResponseForm.js +138 -0
  399. package/dist/client/react/useResponseForm.js.map +1 -0
  400. package/dist/client/react/useSearchDialog.d.ts +7 -0
  401. package/dist/client/react/useSearchDialog.d.ts.map +1 -0
  402. package/dist/client/react/useSearchDialog.js +26 -0
  403. package/dist/client/react/useSearchDialog.js.map +1 -0
  404. package/dist/client/react/useSidebar.d.ts +9 -0
  405. package/dist/client/react/useSidebar.d.ts.map +1 -0
  406. package/dist/client/react/useSidebar.js +77 -0
  407. package/dist/client/react/useSidebar.js.map +1 -0
  408. package/dist/client/react/visualDimensions.d.ts +3 -0
  409. package/dist/client/react/visualDimensions.d.ts.map +1 -0
  410. package/dist/client/react/visualDimensions.js +21 -0
  411. package/dist/client/react/visualDimensions.js.map +1 -0
  412. package/dist/client/react/visualSources.d.ts +13 -0
  413. package/dist/client/react/visualSources.d.ts.map +1 -0
  414. package/dist/client/react/visualSources.js +92 -0
  415. package/dist/client/react/visualSources.js.map +1 -0
  416. package/dist/client/reconcile/normalized.d.ts +3 -0
  417. package/dist/client/reconcile/normalized.d.ts.map +1 -0
  418. package/dist/client/reconcile/{signature.js → normalized.js} +1 -37
  419. package/dist/client/reconcile/normalized.js.map +1 -0
  420. package/dist/client/responses/answerRecovery.d.ts +14 -0
  421. package/dist/client/responses/answerRecovery.d.ts.map +1 -0
  422. package/dist/client/responses/answerRecovery.js +33 -0
  423. package/dist/client/responses/answerRecovery.js.map +1 -0
  424. package/dist/client/responses/authorLabel.d.ts +1 -1
  425. package/dist/client/responses/authorLabel.d.ts.map +1 -1
  426. package/dist/client/responses/authorLabel.js +2 -2
  427. package/dist/client/responses/authorLabel.js.map +1 -1
  428. package/dist/client/responses/failure.d.ts +5 -0
  429. package/dist/client/responses/failure.d.ts.map +1 -0
  430. package/dist/client/responses/failure.js +13 -0
  431. package/dist/client/responses/failure.js.map +1 -0
  432. package/dist/client/responses/formSchema.d.ts +9 -0
  433. package/dist/client/responses/formSchema.d.ts.map +1 -1
  434. package/dist/client/responses/formSchema.js +3 -0
  435. package/dist/client/responses/formSchema.js.map +1 -1
  436. package/dist/client/responses/preview.d.ts +2 -2
  437. package/dist/client/responses/preview.d.ts.map +1 -1
  438. package/dist/client/responses/preview.js.map +1 -1
  439. package/dist/client/responses/retainContext.d.ts +6 -0
  440. package/dist/client/responses/retainContext.d.ts.map +1 -0
  441. package/dist/client/responses/retainContext.js +12 -0
  442. package/dist/client/responses/retainContext.js.map +1 -0
  443. package/dist/client/responses/summary.d.ts +6 -0
  444. package/dist/client/responses/summary.d.ts.map +1 -0
  445. package/dist/client/responses/summary.js +21 -0
  446. package/dist/client/responses/summary.js.map +1 -0
  447. package/dist/client/sourceChanged.d.ts +2 -0
  448. package/dist/client/sourceChanged.d.ts.map +1 -0
  449. package/dist/client/sourceChanged.js +4 -0
  450. package/dist/client/sourceChanged.js.map +1 -0
  451. package/dist/diagnostics/daemonContract.d.ts +1 -1
  452. package/dist/diagnostics/daemonContract.js +1 -1
  453. package/dist/diagnostics/daemonContract.js.map +1 -1
  454. package/dist/diagnostics/source.d.ts +14 -24
  455. package/dist/diagnostics/source.d.ts.map +1 -1
  456. package/dist/diagnostics/source.js +2 -9
  457. package/dist/diagnostics/source.js.map +1 -1
  458. package/dist/history/schema.d.ts +33 -0
  459. package/dist/history/schema.d.ts.map +1 -1
  460. package/dist/history/schema.js +12 -0
  461. package/dist/history/schema.js.map +1 -1
  462. package/dist/rpc/contract.d.ts +4235 -298
  463. package/dist/rpc/contract.d.ts.map +1 -1
  464. package/dist/rpc/contract.js +57 -3
  465. package/dist/rpc/contract.js.map +1 -1
  466. package/dist/rpc/handoffContract.d.ts +3 -3
  467. package/dist/rpc/responseContract.d.ts +5 -5
  468. package/dist/server/board.d.ts +4 -4
  469. package/dist/server/board.d.ts.map +1 -1
  470. package/dist/server/board.js +18 -95
  471. package/dist/server/board.js.map +1 -1
  472. package/dist/server/boardRuntime.d.ts +12 -0
  473. package/dist/server/boardRuntime.d.ts.map +1 -0
  474. package/dist/server/boardRuntime.js +37 -0
  475. package/dist/server/boardRuntime.js.map +1 -0
  476. package/dist/server/diagnostics/daemon.js +3 -3
  477. package/dist/server/diagnostics/daemon.js.map +1 -1
  478. package/dist/server/history/html.d.ts +0 -1
  479. package/dist/server/history/html.d.ts.map +1 -1
  480. package/dist/server/history/html.js +0 -3
  481. package/dist/server/history/html.js.map +1 -1
  482. package/dist/server/history/response.d.ts.map +1 -1
  483. package/dist/server/history/response.js +14 -1
  484. package/dist/server/history/response.js.map +1 -1
  485. package/dist/server/http/assets.d.ts +4 -4
  486. package/dist/server/http/assets.d.ts.map +1 -1
  487. package/dist/server/http/assets.js +1 -35
  488. package/dist/server/http/assets.js.map +1 -1
  489. package/dist/server/http/attachment.d.ts +2 -2
  490. package/dist/server/http/attachment.d.ts.map +1 -1
  491. package/dist/server/http/boardRoutes.d.ts +6 -0
  492. package/dist/server/http/boardRoutes.d.ts.map +1 -0
  493. package/dist/server/http/boardRoutes.js +45 -0
  494. package/dist/server/http/boardRoutes.js.map +1 -0
  495. package/dist/server/http/identity.d.ts +2 -2
  496. package/dist/server/http/identity.d.ts.map +1 -1
  497. package/dist/server/http/inbox.d.ts +1 -1
  498. package/dist/server/http/inbox.d.ts.map +1 -1
  499. package/dist/server/http/overview.d.ts +1 -1
  500. package/dist/server/http/overview.d.ts.map +1 -1
  501. package/dist/server/http/page.d.ts +2 -2
  502. package/dist/server/http/page.d.ts.map +1 -1
  503. package/dist/server/http/page.js +1 -2
  504. package/dist/server/http/page.js.map +1 -1
  505. package/dist/server/http/respond.d.ts +1 -1
  506. package/dist/server/http/respond.d.ts.map +1 -1
  507. package/dist/server/http/respond.js +1 -1
  508. package/dist/server/http/respond.js.map +1 -1
  509. package/dist/server/http/rpcPolicy.d.ts +4 -0
  510. package/dist/server/http/rpcPolicy.d.ts.map +1 -0
  511. package/dist/server/http/rpcPolicy.js +11 -0
  512. package/dist/server/http/rpcPolicy.js.map +1 -0
  513. package/dist/server/http/work.d.ts +2 -2
  514. package/dist/server/http/work.d.ts.map +1 -1
  515. package/dist/server/integration/diagnostics.d.ts +1 -1
  516. package/dist/server/responses/agent.d.ts +1 -1
  517. package/dist/server/responses/agent.d.ts.map +1 -1
  518. package/dist/server/responses/agent.js +2 -2
  519. package/dist/server/responses/agent.js.map +1 -1
  520. package/dist/server/responses/composerHtml.js +1 -1
  521. package/dist/server/responses/composerHtml.js.map +1 -1
  522. package/dist/server/responses/waitFor.d.ts +1 -1
  523. package/dist/server/responses/waitFor.d.ts.map +1 -1
  524. package/dist/server/rpc/HandlerOptions.d.ts +12 -0
  525. package/dist/server/rpc/HandlerOptions.d.ts.map +1 -0
  526. package/dist/server/rpc/HandlerOptions.js +2 -0
  527. package/dist/server/rpc/HandlerOptions.js.map +1 -0
  528. package/dist/server/rpc/handlers.d.ts +2 -2
  529. package/dist/server/rpc/handlers.d.ts.map +1 -1
  530. package/dist/server/rpc/handlers.js +17 -10
  531. package/dist/server/rpc/handlers.js.map +1 -1
  532. package/dist/server/serve-cli.js +8 -8
  533. package/dist/server/serve-cli.js.map +1 -1
  534. package/dist/server/serve.d.ts +2 -3
  535. package/dist/server/serve.d.ts.map +1 -1
  536. package/dist/server/serve.js +20 -9
  537. package/dist/server/serve.js.map +1 -1
  538. package/dist/server/views/projectionQueries.d.ts +681 -0
  539. package/dist/server/views/projectionQueries.d.ts.map +1 -0
  540. package/dist/server/views/projectionQueries.js +70 -0
  541. package/dist/server/views/projectionQueries.js.map +1 -0
  542. package/dist/server/views/remainingQueries.d.ts +679 -0
  543. package/dist/server/views/remainingQueries.d.ts.map +1 -0
  544. package/dist/server/views/remainingQueries.js +58 -0
  545. package/dist/server/views/remainingQueries.js.map +1 -0
  546. package/dist/server/views/resultProjection.d.ts +420 -0
  547. package/dist/server/views/resultProjection.d.ts.map +1 -0
  548. package/dist/server/views/resultProjection.js +35 -0
  549. package/dist/server/views/resultProjection.js.map +1 -0
  550. package/dist/server/views/resultTargets.d.ts +6 -0
  551. package/dist/server/views/resultTargets.d.ts.map +1 -0
  552. package/dist/server/views/resultTargets.js +31 -0
  553. package/dist/server/views/resultTargets.js.map +1 -0
  554. package/dist/server/views/state.d.ts +8 -9
  555. package/dist/server/views/state.d.ts.map +1 -1
  556. package/dist/server/views/state.js +5 -38
  557. package/dist/server/views/state.js.map +1 -1
  558. package/dist/server/views/workStyle.d.ts.map +1 -1
  559. package/dist/server/views/workStyle.js +1 -0
  560. package/dist/server/views/workStyle.js.map +1 -1
  561. package/docs/delivery/decision-write-examples.md +1 -1
  562. package/docs/delivery/handoff-examples.md +1 -1
  563. package/docs/delivery/response-write-examples.md +1 -1
  564. package/docs/delivery/result-review-examples.md +1 -1
  565. package/docs/roadmap.md +7 -7
  566. package/package.json +52 -139
  567. package/src/browser/diagnostics/schema.ts +18 -0
  568. package/src/browser/views/ResultProjection.ts +37 -0
  569. package/src/browser/views/remaining.ts +26 -0
  570. package/src/browser/views/schema.ts +68 -0
  571. package/src/browser/views/state.ts +47 -0
  572. package/src/client/client.ts +8 -8
  573. package/src/client/document/Mermaid.ts +49 -9
  574. package/src/client/document/View.ts +14 -1
  575. package/src/client/document/boardLayout.ts +80 -0
  576. package/src/client/entry.ts +0 -24
  577. package/src/client/formDraft.ts +9 -0
  578. package/src/client/formFocus.ts +5 -0
  579. package/src/client/handoffs/failureStatus.ts +6 -0
  580. package/src/client/page/routeQuery.ts +0 -5
  581. package/src/client/react/Age.tsx +35 -0
  582. package/src/client/react/AnswerForm.tsx +88 -82
  583. package/src/client/react/AnswerPrompts.tsx +67 -54
  584. package/src/client/react/BoardMain.tsx +30 -0
  585. package/src/client/react/BoardShell.tsx +89 -27
  586. package/src/client/react/ChangesMain.tsx +68 -0
  587. package/src/client/react/DiagnosticsFleet.tsx +64 -0
  588. package/src/client/react/DiagnosticsMain.tsx +29 -0
  589. package/src/client/react/DiagnosticsPage.tsx +77 -0
  590. package/src/client/react/DocumentContext.tsx +25 -9
  591. package/src/client/react/DocumentMain.tsx +8 -6
  592. package/src/client/react/Favorite.tsx +17 -0
  593. package/src/client/react/FormField.tsx +68 -0
  594. package/src/client/react/HandoffForm.tsx +78 -0
  595. package/src/client/react/HandoffPage.tsx +78 -0
  596. package/src/client/react/HandoffPrompt.tsx +33 -0
  597. package/src/client/react/Header.tsx +34 -13
  598. package/src/client/react/HistoryComparison.tsx +60 -0
  599. package/src/client/react/HistoryRetention.tsx +29 -0
  600. package/src/client/react/HomeBoard.tsx +15 -0
  601. package/src/client/react/InboxPage.tsx +51 -0
  602. package/src/client/react/LiveControls.tsx +78 -0
  603. package/src/client/react/Modal.tsx +92 -0
  604. package/src/client/react/NavigationTree.tsx +2 -1
  605. package/src/client/react/OverviewGroups.tsx +61 -0
  606. package/src/client/react/OverviewPage.tsx +68 -0
  607. package/src/client/react/ProjectionFrame.tsx +140 -0
  608. package/src/client/react/ProjectionMain.tsx +63 -0
  609. package/src/client/react/PromptOption.tsx +56 -0
  610. package/src/client/react/ReadingLibrary.tsx +147 -0
  611. package/src/client/react/RemainingMain.tsx +66 -0
  612. package/src/client/react/RespondPage.tsx +41 -0
  613. package/src/client/react/ResponseMarkdown.tsx +32 -2
  614. package/src/client/react/ResultCriteria.tsx +78 -0
  615. package/src/client/react/ResultFeedback.tsx +67 -0
  616. package/src/client/react/ResultPage.tsx +50 -0
  617. package/src/client/react/SavedViews.tsx +61 -0
  618. package/src/client/react/SearchDialog.tsx +136 -0
  619. package/src/client/react/SearchResults.tsx +48 -0
  620. package/src/client/react/ShellApi.ts +11 -1
  621. package/src/client/react/Sidebar.tsx +57 -4
  622. package/src/client/react/StartPage.tsx +41 -0
  623. package/src/client/react/UpdatesToggle.tsx +13 -0
  624. package/src/client/react/VisualControls.tsx +59 -0
  625. package/src/client/react/VisualInspection.tsx +35 -0
  626. package/src/client/react/VisualViewer.tsx +147 -0
  627. package/src/client/react/WorkCards.tsx +39 -0
  628. package/src/client/react/WorkControls.tsx +73 -0
  629. package/src/client/react/WorkDetail.tsx +35 -0
  630. package/src/client/react/WorkItemTitle.tsx +9 -0
  631. package/src/client/react/WorkPage.tsx +59 -0
  632. package/src/client/react/WorkResults.tsx +9 -0
  633. package/src/client/react/WorkTable.tsx +39 -0
  634. package/src/client/react/WorkTools.tsx +17 -0
  635. package/src/client/react/activeRead.ts +15 -0
  636. package/src/client/react/createResponse.ts +40 -0
  637. package/src/client/react/diagnosticsValues.tsx +103 -0
  638. package/src/client/react/entry.css +20 -0
  639. package/src/client/react/entry.tsx +6 -19
  640. package/src/client/react/historyStore.ts +56 -0
  641. package/src/client/react/liveStatus.ts +52 -0
  642. package/src/client/react/loadBoardPage.ts +15 -5
  643. package/src/client/react/loadProjection.ts +23 -0
  644. package/src/client/react/loadRemaining.ts +27 -0
  645. package/src/client/react/mainLocation.ts +12 -0
  646. package/src/client/react/navigationLocation.ts +27 -0
  647. package/src/client/react/pageQuery.ts +38 -0
  648. package/src/client/react/projectionChanges.ts +21 -0
  649. package/src/client/react/projectionRoute.ts +21 -0
  650. package/src/client/react/readerLink.ts +9 -0
  651. package/src/client/react/readingHistory.ts +31 -0
  652. package/src/client/react/readingLibrary.ts +22 -0
  653. package/src/client/react/readingState.ts +133 -0
  654. package/src/client/react/remainingRoute.ts +19 -0
  655. package/src/client/react/savedViews.ts +84 -0
  656. package/src/client/react/scheduleReading.ts +41 -0
  657. package/src/client/react/searchCommands.ts +15 -0
  658. package/src/client/react/searchStatus.ts +30 -0
  659. package/src/client/react/shellIds.ts +59 -0
  660. package/src/client/react/useAppearance.ts +54 -0
  661. package/src/client/react/useBoardNavigation.ts +139 -0
  662. package/src/client/react/useDiagnosticsPolling.ts +24 -0
  663. package/src/client/react/useDocumentPage.ts +1 -1
  664. package/src/client/react/useFormFocus.ts +46 -0
  665. package/src/client/react/useHandoffForm.ts +105 -0
  666. package/src/client/react/useHistoryComparison.ts +142 -0
  667. package/src/client/react/useMedia.ts +19 -0
  668. package/src/client/react/useResponseForm.ts +147 -0
  669. package/src/client/react/useSearchDialog.ts +25 -0
  670. package/src/client/react/useSidebar.ts +81 -0
  671. package/src/client/react/visualDimensions.ts +20 -0
  672. package/src/client/react/visualSources.ts +105 -0
  673. package/src/client/reconcile/{signature.ts → normalized.ts} +0 -37
  674. package/src/client/responses/answerRecovery.ts +37 -0
  675. package/src/client/responses/authorLabel.ts +3 -3
  676. package/src/client/responses/failure.ts +13 -0
  677. package/src/client/responses/formSchema.ts +4 -0
  678. package/src/client/responses/preview.ts +2 -2
  679. package/src/client/responses/retainContext.ts +15 -0
  680. package/src/client/responses/summary.ts +25 -0
  681. package/src/client/sourceChanged.ts +3 -0
  682. package/src/diagnostics/daemonContract.ts +1 -1
  683. package/src/diagnostics/source.ts +5 -14
  684. package/src/history/schema.ts +15 -0
  685. package/src/rpc/contract.ts +57 -3
  686. package/src/server/board.ts +24 -126
  687. package/src/server/boardRuntime.ts +54 -0
  688. package/src/server/diagnostics/daemon.ts +3 -3
  689. package/src/server/history/html.ts +0 -3
  690. package/src/server/history/response.ts +15 -1
  691. package/src/server/http/assets.ts +2 -36
  692. package/src/server/http/attachment.ts +1 -1
  693. package/src/server/http/boardRoutes.ts +62 -0
  694. package/src/server/http/identity.ts +1 -1
  695. package/src/server/http/page.ts +2 -3
  696. package/src/server/http/respond.ts +1 -1
  697. package/src/server/http/rpcPolicy.ts +16 -0
  698. package/src/server/http/work.ts +1 -1
  699. package/src/server/responses/agent.ts +2 -2
  700. package/src/server/responses/composerHtml.ts +1 -1
  701. package/src/server/responses/waitFor.ts +1 -1
  702. package/src/server/rpc/HandlerOptions.ts +12 -0
  703. package/src/server/rpc/handlers.ts +18 -15
  704. package/src/server/serve-cli.ts +8 -8
  705. package/src/server/serve.ts +23 -10
  706. package/src/server/views/projectionQueries.ts +78 -0
  707. package/src/server/views/remainingQueries.ts +74 -0
  708. package/src/server/views/resultProjection.ts +45 -0
  709. package/src/server/views/resultTargets.ts +34 -0
  710. package/src/server/views/state.ts +5 -40
  711. package/src/server/views/workStyle.ts +1 -0
  712. package/dist/client/diagnostics/script.d.ts +0 -2
  713. package/dist/client/diagnostics/script.d.ts.map +0 -1
  714. package/dist/client/diagnostics/script.js +0 -31
  715. package/dist/client/diagnostics/script.js.map +0 -1
  716. package/dist/client/fieldFeedback.d.ts +0 -17
  717. package/dist/client/fieldFeedback.d.ts.map +0 -1
  718. package/dist/client/fieldFeedback.js +0 -38
  719. package/dist/client/fieldFeedback.js.map +0 -1
  720. package/dist/client/handoffs/copy.d.ts +0 -3
  721. package/dist/client/handoffs/copy.d.ts.map +0 -1
  722. package/dist/client/handoffs/copy.js +0 -47
  723. package/dist/client/handoffs/copy.js.map +0 -1
  724. package/dist/client/handoffs/fields.d.ts +0 -9
  725. package/dist/client/handoffs/fields.d.ts.map +0 -1
  726. package/dist/client/handoffs/fields.js +0 -34
  727. package/dist/client/handoffs/fields.js.map +0 -1
  728. package/dist/client/handoffs/form.d.ts +0 -36
  729. package/dist/client/handoffs/form.d.ts.map +0 -1
  730. package/dist/client/handoffs/form.js +0 -33
  731. package/dist/client/handoffs/form.js.map +0 -1
  732. package/dist/client/handoffs/setup.d.ts +0 -2
  733. package/dist/client/handoffs/setup.d.ts.map +0 -1
  734. package/dist/client/handoffs/setup.js +0 -125
  735. package/dist/client/handoffs/setup.js.map +0 -1
  736. package/dist/client/history/script.d.ts +0 -2
  737. package/dist/client/history/script.d.ts.map +0 -1
  738. package/dist/client/history/script.js +0 -128
  739. package/dist/client/history/script.js.map +0 -1
  740. package/dist/client/legacyRuntime.d.ts +0 -9
  741. package/dist/client/legacyRuntime.d.ts.map +0 -1
  742. package/dist/client/legacyRuntime.js +0 -15
  743. package/dist/client/legacyRuntime.js.map +0 -1
  744. package/dist/client/page/ageScript.d.ts +0 -2
  745. package/dist/client/page/ageScript.d.ts.map +0 -1
  746. package/dist/client/page/ageScript.js +0 -23
  747. package/dist/client/page/ageScript.js.map +0 -1
  748. package/dist/client/page/formReadingScript.d.ts +0 -2
  749. package/dist/client/page/formReadingScript.d.ts.map +0 -1
  750. package/dist/client/page/formReadingScript.js +0 -26
  751. package/dist/client/page/formReadingScript.js.map +0 -1
  752. package/dist/client/page/itemContextScript.d.ts +0 -2
  753. package/dist/client/page/itemContextScript.d.ts.map +0 -1
  754. package/dist/client/page/itemContextScript.js +0 -21
  755. package/dist/client/page/itemContextScript.js.map +0 -1
  756. package/dist/client/page/libraryScript.d.ts +0 -2
  757. package/dist/client/page/libraryScript.d.ts.map +0 -1
  758. package/dist/client/page/libraryScript.js +0 -85
  759. package/dist/client/page/libraryScript.js.map +0 -1
  760. package/dist/client/page/navigationHistoryScript.d.ts +0 -2
  761. package/dist/client/page/navigationHistoryScript.d.ts.map +0 -1
  762. package/dist/client/page/navigationHistoryScript.js +0 -47
  763. package/dist/client/page/navigationHistoryScript.js.map +0 -1
  764. package/dist/client/page/navigationScript.d.ts +0 -2
  765. package/dist/client/page/navigationScript.d.ts.map +0 -1
  766. package/dist/client/page/navigationScript.js +0 -113
  767. package/dist/client/page/navigationScript.js.map +0 -1
  768. package/dist/client/page/preferencesScript.d.ts +0 -2
  769. package/dist/client/page/preferencesScript.d.ts.map +0 -1
  770. package/dist/client/page/preferencesScript.js +0 -46
  771. package/dist/client/page/preferencesScript.js.map +0 -1
  772. package/dist/client/page/reactNavigationScript.d.ts +0 -2
  773. package/dist/client/page/reactNavigationScript.d.ts.map +0 -1
  774. package/dist/client/page/reactNavigationScript.js +0 -31
  775. package/dist/client/page/reactNavigationScript.js.map +0 -1
  776. package/dist/client/page/readingStateScript.d.ts +0 -2
  777. package/dist/client/page/readingStateScript.d.ts.map +0 -1
  778. package/dist/client/page/readingStateScript.js +0 -65
  779. package/dist/client/page/readingStateScript.js.map +0 -1
  780. package/dist/client/page/runtime.d.ts +0 -3
  781. package/dist/client/page/runtime.d.ts.map +0 -1
  782. package/dist/client/page/runtime.js +0 -111
  783. package/dist/client/page/runtime.js.map +0 -1
  784. package/dist/client/page/scripts.d.ts +0 -3
  785. package/dist/client/page/scripts.d.ts.map +0 -1
  786. package/dist/client/page/scripts.js +0 -91
  787. package/dist/client/page/scripts.js.map +0 -1
  788. package/dist/client/page/searchResultsScript.d.ts +0 -2
  789. package/dist/client/page/searchResultsScript.d.ts.map +0 -1
  790. package/dist/client/page/searchResultsScript.js +0 -64
  791. package/dist/client/page/searchResultsScript.js.map +0 -1
  792. package/dist/client/page/searchScript.d.ts +0 -2
  793. package/dist/client/page/searchScript.d.ts.map +0 -1
  794. package/dist/client/page/searchScript.js +0 -75
  795. package/dist/client/page/searchScript.js.map +0 -1
  796. package/dist/client/page/sidebarScript.d.ts +0 -2
  797. package/dist/client/page/sidebarScript.d.ts.map +0 -1
  798. package/dist/client/page/sidebarScript.js +0 -87
  799. package/dist/client/page/sidebarScript.js.map +0 -1
  800. package/dist/client/page/stateScript.d.ts +0 -2
  801. package/dist/client/page/stateScript.d.ts.map +0 -1
  802. package/dist/client/page/stateScript.js +0 -95
  803. package/dist/client/page/stateScript.js.map +0 -1
  804. package/dist/client/page/visualScript.d.ts +0 -2
  805. package/dist/client/page/visualScript.d.ts.map +0 -1
  806. package/dist/client/page/visualScript.js +0 -42
  807. package/dist/client/page/visualScript.js.map +0 -1
  808. package/dist/client/page/visualViewport.d.ts +0 -2
  809. package/dist/client/page/visualViewport.d.ts.map +0 -1
  810. package/dist/client/page/visualViewport.js +0 -87
  811. package/dist/client/page/visualViewport.js.map +0 -1
  812. package/dist/client/react/AnswerFocus.d.ts +0 -6
  813. package/dist/client/react/AnswerFocus.d.ts.map +0 -1
  814. package/dist/client/react/AnswerFocus.js +0 -12
  815. package/dist/client/react/AnswerFocus.js.map +0 -1
  816. package/dist/client/react/LegacyMain.d.ts +0 -9
  817. package/dist/client/react/LegacyMain.d.ts.map +0 -1
  818. package/dist/client/react/LegacyMain.js +0 -32
  819. package/dist/client/react/LegacyMain.js.map +0 -1
  820. package/dist/client/react/legacyPage.d.ts +0 -7
  821. package/dist/client/react/legacyPage.d.ts.map +0 -1
  822. package/dist/client/react/legacyPage.js +0 -63
  823. package/dist/client/react/legacyPage.js.map +0 -1
  824. package/dist/client/reconcile/patch.d.ts +0 -2
  825. package/dist/client/reconcile/patch.d.ts.map +0 -1
  826. package/dist/client/reconcile/patch.js +0 -64
  827. package/dist/client/reconcile/patch.js.map +0 -1
  828. package/dist/client/reconcile/signature.d.ts +0 -8
  829. package/dist/client/reconcile/signature.d.ts.map +0 -1
  830. package/dist/client/reconcile/signature.js.map +0 -1
  831. package/dist/client/reconcile/swap.d.ts +0 -2
  832. package/dist/client/reconcile/swap.d.ts.map +0 -1
  833. package/dist/client/reconcile/swap.js +0 -36
  834. package/dist/client/reconcile/swap.js.map +0 -1
  835. package/dist/client/responses/attach.d.ts +0 -2
  836. package/dist/client/responses/attach.d.ts.map +0 -1
  837. package/dist/client/responses/attach.js +0 -133
  838. package/dist/client/responses/attach.js.map +0 -1
  839. package/dist/client/responses/binding.d.ts +0 -3
  840. package/dist/client/responses/binding.d.ts.map +0 -1
  841. package/dist/client/responses/binding.js +0 -16
  842. package/dist/client/responses/binding.js.map +0 -1
  843. package/dist/client/responses/draft.d.ts +0 -13
  844. package/dist/client/responses/draft.d.ts.map +0 -1
  845. package/dist/client/responses/draft.js +0 -15
  846. package/dist/client/responses/draft.js.map +0 -1
  847. package/dist/client/responses/draftSession.d.ts +0 -8
  848. package/dist/client/responses/draftSession.d.ts.map +0 -1
  849. package/dist/client/responses/draftSession.js +0 -105
  850. package/dist/client/responses/draftSession.js.map +0 -1
  851. package/dist/client/responses/drafts.d.ts +0 -21
  852. package/dist/client/responses/drafts.d.ts.map +0 -1
  853. package/dist/client/responses/drafts.js +0 -68
  854. package/dist/client/responses/drafts.js.map +0 -1
  855. package/dist/client/responses/feedback.d.ts +0 -6
  856. package/dist/client/responses/feedback.d.ts.map +0 -1
  857. package/dist/client/responses/feedback.js +0 -77
  858. package/dist/client/responses/feedback.js.map +0 -1
  859. package/dist/client/responses/fields.d.ts +0 -12
  860. package/dist/client/responses/fields.d.ts.map +0 -1
  861. package/dist/client/responses/fields.js +0 -23
  862. package/dist/client/responses/fields.js.map +0 -1
  863. package/dist/client/responses/form.d.ts +0 -37
  864. package/dist/client/responses/form.d.ts.map +0 -1
  865. package/dist/client/responses/form.js +0 -43
  866. package/dist/client/responses/form.js.map +0 -1
  867. package/dist/client/responses/questionnaireControls.d.ts +0 -9
  868. package/dist/client/responses/questionnaireControls.d.ts.map +0 -1
  869. package/dist/client/responses/questionnaireControls.js +0 -82
  870. package/dist/client/responses/questionnaireControls.js.map +0 -1
  871. package/dist/client/responses/setup.d.ts +0 -2
  872. package/dist/client/responses/setup.d.ts.map +0 -1
  873. package/dist/client/responses/setup.js +0 -7
  874. package/dist/client/responses/setup.js.map +0 -1
  875. package/dist/client/responses/submit.d.ts +0 -5
  876. package/dist/client/responses/submit.d.ts.map +0 -1
  877. package/dist/client/responses/submit.js +0 -33
  878. package/dist/client/responses/submit.js.map +0 -1
  879. package/dist/client/views/savedScript.d.ts +0 -2
  880. package/dist/client/views/savedScript.d.ts.map +0 -1
  881. package/dist/client/views/savedScript.js +0 -89
  882. package/dist/client/views/savedScript.js.map +0 -1
  883. package/dist/server/diagnostics/html.d.ts +0 -8
  884. package/dist/server/diagnostics/html.d.ts.map +0 -1
  885. package/dist/server/diagnostics/html.js +0 -79
  886. package/dist/server/diagnostics/html.js.map +0 -1
  887. package/dist/server/diagnostics/page.d.ts +0 -55
  888. package/dist/server/diagnostics/page.d.ts.map +0 -1
  889. package/dist/server/diagnostics/page.js +0 -11
  890. package/dist/server/diagnostics/page.js.map +0 -1
  891. package/dist/server/handoffs/html.d.ts +0 -36
  892. package/dist/server/handoffs/html.d.ts.map +0 -1
  893. package/dist/server/handoffs/html.js +0 -31
  894. package/dist/server/handoffs/html.js.map +0 -1
  895. package/dist/server/handoffs/page.d.ts +0 -6
  896. package/dist/server/handoffs/page.d.ts.map +0 -1
  897. package/dist/server/handoffs/page.js +0 -34
  898. package/dist/server/handoffs/page.js.map +0 -1
  899. package/dist/server/http/changesPage.d.ts +0 -5
  900. package/dist/server/http/changesPage.d.ts.map +0 -1
  901. package/dist/server/http/changesPage.js +0 -13
  902. package/dist/server/http/changesPage.js.map +0 -1
  903. package/dist/server/http/readPage.d.ts +0 -4
  904. package/dist/server/http/readPage.d.ts.map +0 -1
  905. package/dist/server/http/readPage.js +0 -9
  906. package/dist/server/http/readPage.js.map +0 -1
  907. package/dist/server/http/start.d.ts +0 -5
  908. package/dist/server/http/start.d.ts.map +0 -1
  909. package/dist/server/http/start.js +0 -13
  910. package/dist/server/http/start.js.map +0 -1
  911. package/dist/server/page/startHtml.d.ts +0 -2
  912. package/dist/server/page/startHtml.d.ts.map +0 -1
  913. package/dist/server/page/startHtml.js +0 -10
  914. package/dist/server/page/startHtml.js.map +0 -1
  915. package/dist/server/responses/page.d.ts +0 -6
  916. package/dist/server/responses/page.d.ts.map +0 -1
  917. package/dist/server/responses/page.js +0 -25
  918. package/dist/server/responses/page.js.map +0 -1
  919. package/dist/server/results/criteria.d.ts +0 -3
  920. package/dist/server/results/criteria.d.ts.map +0 -1
  921. package/dist/server/results/criteria.js +0 -34
  922. package/dist/server/results/criteria.js.map +0 -1
  923. package/dist/server/results/feedback.d.ts +0 -6
  924. package/dist/server/results/feedback.d.ts.map +0 -1
  925. package/dist/server/results/feedback.js +0 -32
  926. package/dist/server/results/feedback.js.map +0 -1
  927. package/dist/server/results/page.d.ts +0 -6
  928. package/dist/server/results/page.d.ts.map +0 -1
  929. package/dist/server/results/page.js +0 -41
  930. package/dist/server/results/page.js.map +0 -1
  931. package/dist/server/rpc/transport.d.ts +0 -14
  932. package/dist/server/rpc/transport.d.ts.map +0 -1
  933. package/dist/server/rpc/transport.js +0 -15
  934. package/dist/server/rpc/transport.js.map +0 -1
  935. package/src/client/diagnostics/script.ts +0 -31
  936. package/src/client/fieldFeedback.ts +0 -53
  937. package/src/client/handoffs/copy.ts +0 -45
  938. package/src/client/handoffs/fields.ts +0 -38
  939. package/src/client/handoffs/form.ts +0 -41
  940. package/src/client/handoffs/setup.ts +0 -142
  941. package/src/client/history/script.ts +0 -127
  942. package/src/client/legacyRuntime.ts +0 -11
  943. package/src/client/page/ageScript.ts +0 -22
  944. package/src/client/page/formReadingScript.ts +0 -25
  945. package/src/client/page/itemContextScript.ts +0 -20
  946. package/src/client/page/libraryScript.ts +0 -84
  947. package/src/client/page/navigationHistoryScript.ts +0 -46
  948. package/src/client/page/navigationScript.ts +0 -113
  949. package/src/client/page/preferencesScript.ts +0 -45
  950. package/src/client/page/reactNavigationScript.ts +0 -30
  951. package/src/client/page/readingStateScript.ts +0 -64
  952. package/src/client/page/runtime.ts +0 -111
  953. package/src/client/page/scripts.ts +0 -91
  954. package/src/client/page/searchResultsScript.ts +0 -63
  955. package/src/client/page/searchScript.ts +0 -74
  956. package/src/client/page/sidebarScript.ts +0 -86
  957. package/src/client/page/stateScript.ts +0 -95
  958. package/src/client/page/visualScript.ts +0 -41
  959. package/src/client/page/visualViewport.ts +0 -86
  960. package/src/client/react/AnswerFocus.tsx +0 -10
  961. package/src/client/react/LegacyMain.tsx +0 -46
  962. package/src/client/react/legacyPage.ts +0 -69
  963. package/src/client/reconcile/patch.ts +0 -71
  964. package/src/client/reconcile/swap.ts +0 -37
  965. package/src/client/responses/attach.ts +0 -150
  966. package/src/client/responses/binding.ts +0 -16
  967. package/src/client/responses/draft.ts +0 -20
  968. package/src/client/responses/draftSession.ts +0 -108
  969. package/src/client/responses/drafts.ts +0 -82
  970. package/src/client/responses/feedback.ts +0 -81
  971. package/src/client/responses/fields.ts +0 -26
  972. package/src/client/responses/form.ts +0 -58
  973. package/src/client/responses/questionnaireControls.ts +0 -94
  974. package/src/client/responses/setup.ts +0 -6
  975. package/src/client/responses/submit.ts +0 -44
  976. package/src/client/views/savedScript.ts +0 -88
  977. package/src/server/diagnostics/html.ts +0 -93
  978. package/src/server/diagnostics/page.ts +0 -31
  979. package/src/server/handoffs/html.ts +0 -42
  980. package/src/server/handoffs/page.ts +0 -51
  981. package/src/server/http/changesPage.ts +0 -15
  982. package/src/server/http/readPage.ts +0 -13
  983. package/src/server/http/start.ts +0 -27
  984. package/src/server/page/startHtml.ts +0 -10
  985. package/src/server/responses/page.ts +0 -37
  986. package/src/server/results/criteria.ts +0 -37
  987. package/src/server/results/feedback.ts +0 -44
  988. package/src/server/results/page.ts +0 -63
  989. package/src/server/rpc/transport.ts +0 -34
@@ -0,0 +1,54 @@
1
+ import { Context, Effect, FileSystem, Layer, Path, type PlatformError } from "effect";
2
+ import { DiagnosticsSources } from "#diagnostics/source.ts";
3
+ import type { BoardOptions } from "#server/board.ts";
4
+ import { boardServices } from "#server/boardServices.ts";
5
+ import { daemonDiagnostics } from "#server/diagnostics/daemon.ts";
6
+ import { readDocument } from "#server/document/read.ts";
7
+ import { watchChanges } from "#server/files/changes.ts";
8
+ import { homeIn } from "#server/files/home.ts";
9
+ import { checkBrowserAssets, mermaidRoot } from "#server/http/assets.ts";
10
+ import { Highlighter } from "#server/render/Highlighter.ts";
11
+ import { handlers } from "#server/rpc/handlers.ts";
12
+ import { type Snapshot, searchSnapshot } from "#server/search/snapshot.ts";
13
+
14
+ export const boardRuntime = Effect.fn("WorkBoard.boardRuntime")(function* (options: BoardOptions) {
15
+ const home = yield* homeIn(options.root, options.home);
16
+ const mermaid = yield* mermaidRoot();
17
+ yield* checkBrowserAssets();
18
+ const changes = yield* watchChanges(options.root);
19
+ const platform = (yield* Effect.context<Highlighter | FileSystem.FileSystem | Path.Path>()).pipe(
20
+ Context.pick(Highlighter, FileSystem.FileSystem, Path.Path),
21
+ );
22
+ const index: Effect.Effect<Snapshot, PlatformError.PlatformError, FileSystem.FileSystem | Path.Path> = yield* searchSnapshot(
23
+ options.root,
24
+ home,
25
+ changes,
26
+ options.maintainer,
27
+ );
28
+ const provided = yield* Effect.serviceOption(DiagnosticsSources);
29
+ const services = yield* Layer.build(
30
+ boardServices(
31
+ { changes, enabled: options.responses === true, index: Effect.provideContext(index, platform), root: options.root },
32
+ provided._tag === "Some" ? { _tag: "Sources", sources: provided.value } : { _tag: "Read", read: daemonDiagnostics(options.fleetPort) },
33
+ ),
34
+ );
35
+ const context = Context.merge(platform, services);
36
+ const rpcHandlers = yield* handlers({
37
+ changes,
38
+ document: (url) =>
39
+ Effect.provideContext(
40
+ readDocument({
41
+ changes,
42
+ home,
43
+ index: Effect.provideContext(index, context),
44
+ root: options.root,
45
+ writable: options.responses === true,
46
+ })(url),
47
+ context,
48
+ ),
49
+ home,
50
+ index: Effect.provideContext(index, context),
51
+ writable: options.responses === true,
52
+ }).pipe(Effect.provideContext(context));
53
+ return { changes, context, home, index, mermaid, rpcHandlers };
54
+ });
@@ -1,7 +1,7 @@
1
1
  import { Clock, Effect, Layer } from "effect";
2
- import { FetchHttpClient } from "effect/unstable/http";
3
- import { RpcClient, RpcSerialization } from "effect/unstable/rpc";
4
- import { RpcClientError } from "effect/unstable/rpc/RpcClientError";
2
+ import { FetchHttpClient } from "effect/http";
3
+ import { RpcClient, RpcSerialization } from "effect/rpc";
4
+ import { RpcClientError } from "effect/rpc/RpcClientError";
5
5
  import { DAEMON_PORT, DAEMON_RPC_PATH, DiagnosticsContract, type DiagnosticsSnapshot } from "#diagnostics/daemonContract.ts";
6
6
 
7
7
  const daemonUnavailable = Effect.fn("WorkBoard.daemonUnavailable")(function* (error: unknown, port: number) {
@@ -18,6 +18,3 @@ export function historyHtml(before: Baseline, current: Baseline): string {
18
18
  .join(" · ");
19
19
  return `<p>Compared with your observation at <time>${escapeHtml(before.recordedAt)}</time>.</p><p role="status">${counts}</p>${result.changes.length === 0 ? "<p>No source changes since that observation.</p>" : ""}${result.issues.length > 0 ? `<aside aria-label="Identity limitations"><ul>${result.issues.map((issue) => `<li>${escapeHtml(issue)}</li>`).join("")}</ul><p>Ambiguous identities are compared by source path only.</p></aside>` : ""}${result.changes.map(changeHtml).join("")}`;
20
20
  }
21
- export function changesHtml(): string {
22
- return `<section class="history"><h1>Changes since seen</h1><p>Compare current Markdown with one observation you explicitly remember in this browser. This is an observed source comparison, not an event journal, Git history, authorship, or verified acceptance.</p><p>Remembered source can include old or deleted content. One snapshot per workspace, up to 2 MiB, expires after 30 days and is removed on your next workspace visit. Mark seen replaces it; Clear forgets it. No source writes or cloud storage.</p><div class="history-controls"><button id="history-mark" type="button" disabled>Start remembering changes</button><button id="history-clear" type="button" disabled>Clear remembered history</button><span id="history-storage" role="status"></span></div><noscript><p>Remembering and comparing changes requires JavaScript and browser storage. Markdown, Overview and Work remain readable.</p></noscript><div id="changes-content" aria-live="polite"><p>No comparison has been loaded.</p></div></section><style>.history-controls{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}.history-change{border-top:1px solid var(--border);padding:1rem 0}.history-source{white-space:pre-wrap;overflow-wrap:anywhere;max-height:32rem;overflow:auto}.history h2{overflow-wrap:anywhere}</style>`;
23
- }
@@ -2,6 +2,7 @@ import { escapeHtml } from "#browser/escapeHtml.ts";
2
2
  import type { HistoryOutput } from "#history/schema.ts";
3
3
  import type { Snapshot } from "#server/search/snapshot.ts";
4
4
  import { observeBaseline, readBaseline } from "./baseline.ts";
5
+ import { compareHistory } from "./compare.ts";
5
6
  import { historyHtml } from "./html.ts";
6
7
 
7
8
  export function historyResponse(raw: string | null, now: number, snapshot?: Snapshot): HistoryOutput {
@@ -19,5 +20,18 @@ export function historyResponse(raw: string | null, now: number, snapshot?: Snap
19
20
  return { ...output, html: `<p role="status">${escapeHtml(reason)}</p>`, reason };
20
21
  }
21
22
  const current = readBaseline(currentRaw, now).baseline;
22
- return { ...output, html: prior.baseline && current ? historyHtml(prior.baseline, current) : output.html, snapshot: currentRaw };
23
+ const compared = prior.baseline && current ? compareHistory(prior.baseline, current) : undefined;
24
+ const comparison =
25
+ compared && prior.baseline
26
+ ? {
27
+ changes: compared.changes.map(({ before, after, ...change }) => ({
28
+ ...change,
29
+ after: after ? { file: after.file, source: after.source } : undefined,
30
+ before: before ? { file: before.file, source: before.source } : undefined,
31
+ })),
32
+ issues: compared.issues,
33
+ recordedAt: prior.baseline.recordedAt,
34
+ }
35
+ : undefined;
36
+ return { ...output, comparison, html: prior.baseline && current ? historyHtml(prior.baseline, current) : output.html, snapshot: currentRaw };
23
37
  }
@@ -1,45 +1,11 @@
1
1
  import { createRequire } from "node:module";
2
2
  import { Effect, FileSystem, Path, Schema } from "effect";
3
- import type { HttpRouter, HttpServerRequest } from "effect/unstable/http";
3
+ import type { HttpRouter, HttpServerRequest } from "effect/http";
4
4
  import { InternalServerError } from "@shivaedev/platform/errors/taxonomy.ts";
5
- import { diagnosticsScript } from "#client/diagnostics/script.ts";
6
- import { historyScript } from "#client/history/script.ts";
7
- import { ageScript } from "#client/page/ageScript.ts";
8
- import { libraryScript } from "#client/page/libraryScript.ts";
9
- import { navigationScript } from "#client/page/navigationScript.ts";
10
- import { readingStateScript } from "#client/page/readingStateScript.ts";
11
- import { client, preferences } from "#client/page/runtime.ts";
12
- import { diagrams, swap } from "#client/page/scripts.ts";
13
- import { searchResultsScript } from "#client/page/searchResultsScript.ts";
14
- import { searchScript } from "#client/page/searchScript.ts";
15
- import { sidebarScript } from "#client/page/sidebarScript.ts";
16
- import { pageStateScript } from "#client/page/stateScript.ts";
17
- import { visualScript } from "#client/page/visualScript.ts";
18
- import { visualViewport } from "#client/page/visualViewport.ts";
19
- import { savedScript } from "#client/views/savedScript.ts";
20
5
  import { style } from "#server/page/style.ts";
21
6
  import { respond } from "./respond.ts";
22
7
 
23
- export const ASSETS: ReadonlyArray<readonly [HttpRouter.PathInput, string, string]> = [
24
- ["/_board/style.css", style, "text/css"],
25
- ["/_board/diagnostics.js", diagnosticsScript(), "text/javascript"],
26
- ["/_board/visuals.js", visualScript(), "text/javascript"],
27
- ["/_board/visual-viewport.js", visualViewport(), "text/javascript"],
28
- ["/_board/saved-views.js", savedScript(), "text/javascript"],
29
- ["/_board/client.js", client, "text/javascript"],
30
- ["/_board/ages.js", ageScript(), "text/javascript"],
31
- ["/_board/history.js", historyScript(), "text/javascript"],
32
- ["/_board/preferences.js", preferences, "text/javascript"],
33
- ["/_board/search.js", searchScript(), "text/javascript"],
34
- ["/_board/search-results.js", searchResultsScript(), "text/javascript"],
35
- ["/_board/sidebar.js", sidebarScript(), "text/javascript"],
36
- ["/_board/library.js", libraryScript(), "text/javascript"],
37
- ["/_board/navigation.js", navigationScript(), "text/javascript"],
38
- ["/_board/page-state.js", pageStateScript(), "text/javascript"],
39
- ["/_board/reading-state.js", readingStateScript(), "text/javascript"],
40
- ["/_board/diagrams.js", diagrams, "text/javascript"],
41
- ["/_board/swap.js", swap, "text/javascript"],
42
- ];
8
+ export const ASSETS: ReadonlyArray<readonly [HttpRouter.PathInput, string, string]> = [["/_board/style.css", style, "text/css"]];
43
9
 
44
10
  const MERMAID = "/_board/mermaid/";
45
11
 
@@ -1,5 +1,5 @@
1
1
  import { Effect, FileSystem, Path } from "effect";
2
- import type { HttpServerRequest } from "effect/unstable/http";
2
+ import type { HttpServerRequest } from "effect/http";
3
3
  import { attachmentType } from "#path/attachment.ts";
4
4
  import { within } from "#server/files/list.ts";
5
5
  import { respond } from "./respond.ts";
@@ -0,0 +1,62 @@
1
+ import { Effect, type FileSystem, type Path, type Scope } from "effect";
2
+ import { HttpRouter, type HttpServerRequest, type HttpServerResponse } from "effect/http";
3
+ import { loopbackOnly } from "@shivaedev/platform/rpc-server/local.ts";
4
+ import type { Diagnostics } from "#diagnostics/source.ts";
5
+ import type { BoardOptions } from "#server/board.ts";
6
+ import type { boardRuntime } from "#server/boardRuntime.ts";
7
+ import type { HandoffsService } from "#server/handoffs/Service.ts";
8
+ import { navHtml } from "#server/page/nav.ts";
9
+ import { shell } from "#server/page/shell.ts";
10
+ import type { Highlighter } from "#server/render/Highlighter.ts";
11
+ import type { Responses } from "#server/responses/service.ts";
12
+ import { ASSET_HANDLERS, MERMAID_ROUTE, mermaidFile } from "./assets.ts";
13
+ import { attachment } from "./attachment.ts";
14
+ import { identity } from "./identity.ts";
15
+ import { inbox } from "./inbox.ts";
16
+ import { overview } from "./overview.ts";
17
+ import { page } from "./page.ts";
18
+ import { respond } from "./respond.ts";
19
+ import { work } from "./work.ts";
20
+
21
+ type Services = Highlighter | Responses | HandoffsService | Diagnostics | FileSystem.FileSystem | Path.Path;
22
+ type Handler<E> = (request: HttpServerRequest.HttpServerRequest) => Effect.Effect<HttpServerResponse.HttpServerResponse, E, Services | Scope.Scope>;
23
+
24
+ export function boardRoutes(options: BoardOptions, runtime: Effect.Success<ReturnType<typeof boardRuntime>>) {
25
+ return HttpRouter.use((router) =>
26
+ Effect.gen(function* () {
27
+ const { changes, context, home, index, mermaid } = runtime;
28
+ function serve<E>(route: HttpRouter.PathInput, handler: Handler<E>) {
29
+ return router.add(
30
+ "GET",
31
+ route,
32
+ loopbackOnly((request) => Effect.provideContext(handler(request), context)),
33
+ );
34
+ }
35
+ yield* serve("/_board/attachment/*", attachment(options.root, changes.realRoot));
36
+ const inboxPage = inbox(index, changes, home);
37
+ yield* serve("/_board/inbox", inboxPage);
38
+ const workPage = work(index, changes, home);
39
+ const overviewPage = overview(index, changes, home);
40
+ yield* serve("/_board/work", workPage);
41
+ yield* serve("/_board/overview", overviewPage);
42
+ for (const [route, asset] of ASSET_HANDLERS) {
43
+ yield* serve(route, asset);
44
+ }
45
+ yield* serve(MERMAID_ROUTE, mermaidFile(mermaid));
46
+ for (const view of ["changes", "diagnostics", "start", "respond", "handoff", "result"] as const) {
47
+ yield* serve(`/_board/${view}`, () =>
48
+ Effect.gen(function* () {
49
+ const snapshot = yield* index;
50
+ const nav = navHtml(yield* changes.files, "", home, snapshot);
51
+ return respond(shell(view, nav, "", changes.realRoot, false, undefined, view === "respond" ? "response" : view, snapshot), "text/html");
52
+ }),
53
+ );
54
+ }
55
+ const pages = page({ home, root: options.root, writable: options.responses === true }, changes, index);
56
+ const items = identity(index, pages, changes, home);
57
+ yield* serve("/_board/item/*", items);
58
+ yield* serve("/", pages);
59
+ yield* serve("/*", pages);
60
+ }),
61
+ );
62
+ }
@@ -1,5 +1,5 @@
1
1
  import { Effect } from "effect";
2
- import type { HttpServerRequest } from "effect/unstable/http";
2
+ import type { HttpServerRequest } from "effect/http";
3
3
  import { escapeHtml } from "#browser/escapeHtml.ts";
4
4
  import { fileUrl } from "#files/url.ts";
5
5
  import type { Changes } from "#server/files/changes.ts";
@@ -1,5 +1,5 @@
1
1
  import { Effect, FileSystem, Option } from "effect";
2
- import type { HttpServerRequest } from "effect/unstable/http";
2
+ import type { HttpServerRequest } from "effect/http";
3
3
  import { escapeHtml } from "#browser/escapeHtml.ts";
4
4
  import { authoredQuestion } from "#server/attention/inbox.ts";
5
5
  import { documentBody } from "#server/document/body.ts";
@@ -14,7 +14,6 @@ import { itemIntroduction } from "#server/page/itemIntroduction.ts";
14
14
  import { metadataHtml } from "#server/page/metadata.ts";
15
15
  import { navHtml } from "#server/page/nav.ts";
16
16
  import { shell } from "#server/page/shell.ts";
17
- import { startHtml } from "#server/page/startHtml.ts";
18
17
  import { boardOf } from "#server/render/board.ts";
19
18
  import { authoredQuestionHtml } from "#server/responses/authoredQuestionHtml.ts";
20
19
  import { readingActions } from "#server/responses/readingActions.ts";
@@ -96,7 +95,7 @@ export function page(options: PageOptions, changes: Changes, index: Effect.Succe
96
95
  );
97
96
  }
98
97
  if (files.length === 0 && requestedPath(request.url) === "" && resolved === undefined && expectedIdentity === undefined) {
99
- return respond(layout(startHtml(true)), "text/html");
98
+ return respond(layout('<p class="empty">Start your local workspace. Enable JavaScript to read project and report templates.</p>'), "text/html");
100
99
  }
101
100
  if (file === undefined) {
102
101
  return missing();
@@ -1,4 +1,4 @@
1
- import { HttpServerResponse } from "effect/unstable/http";
1
+ import { HttpServerResponse } from "effect/http";
2
2
 
3
3
  const POLICY = [
4
4
  "default-src 'self'",
@@ -0,0 +1,16 @@
1
+ import { Effect } from "effect";
2
+ import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/http";
3
+ import { HEADERS } from "./respond.ts";
4
+
5
+ export const RPC_PATH = "/_board/rpc";
6
+
7
+ export const rpcPolicy = HttpRouter.middleware(
8
+ (http) =>
9
+ Effect.gen(function* () {
10
+ const request = yield* HttpServerRequest.HttpServerRequest;
11
+ return yield* request.url.split("?")[0] === RPC_PATH
12
+ ? http.pipe(Effect.map((response) => HttpServerResponse.setHeaders(response, HEADERS)))
13
+ : http;
14
+ }),
15
+ { global: true },
16
+ );
@@ -1,5 +1,5 @@
1
1
  import { Effect } from "effect";
2
- import type { HttpServerRequest } from "effect/unstable/http";
2
+ import type { HttpServerRequest } from "effect/http";
3
3
  import { escapeHtml } from "#browser/escapeHtml.ts";
4
4
  import type { Changes } from "#server/files/changes.ts";
5
5
  import { navHtml } from "#server/page/nav.ts";
@@ -1,8 +1,8 @@
1
1
  import * as NodeHttpClient from "@effect/platform-node/NodeHttpClient";
2
2
  import * as Effect from "effect/Effect";
3
3
  import * as Layer from "effect/Layer";
4
- import * as RpcClient from "effect/unstable/rpc/RpcClient";
5
- import * as RpcSerialization from "effect/unstable/rpc/RpcSerialization";
4
+ import * as RpcClient from "effect/rpc/RpcClient";
5
+ import * as RpcSerialization from "effect/rpc/RpcSerialization";
6
6
  import { BadRequest } from "@shivaedev/platform/errors/taxonomy.ts";
7
7
  import { responseContract } from "#rpc/responseContract.ts";
8
8
  import { waitForResponse } from "./waitFor.ts";
@@ -21,5 +21,5 @@ export const composerHtml = Effect.fn("WorkBoard.composerHtml")(function* (
21
21
  .join("");
22
22
  const body = `<label>${template.hasPrompts ? "Overall response / next action (optional)" : "Your response"}<textarea name="body" rows="4" maxlength="32768" ${template.hasPrompts ? "" : "required"}></textarea></label>`;
23
23
  const details = `<details data-key="response-details"><summary>Response details</summary><label>Response kind <select name="type"><option value="answer">Answer (including no)</option><option value="clarify">Ask back / clarify</option><option value="not_now">Not now</option></select></label>${standalone && template.hasPrompts ? body : ""}<label>Supersedes an earlier response (optional)<select name="supersedes"><option value="">Adds feedback; does not supersede</option>${prior}</select></label></details>`;
24
- return `<section class="response-panel"><h${standalone ? "2" : "1"}>${standalone ? "Answer this question" : `Respond to ${escapeHtml(q.item)} / ${escapeHtml(q.request)}`}</h${standalone ? "2" : "1"}><p>${escapeHtml(q.reason)}</p><p><a href="${fileUrl(q.source)}">Source: ${escapeHtml(q.source)}</a> · Reviewed SHA-256: <code>${q.reviewedRevision}</code></p><p>${standalone ? "An answer removes this question from the Inbox for this source revision." : "Saved replies are authored feedback. They do not close the request or establish acceptance."}</p>${standalone ? "" : `<section class="response-context">${template.background}</section>`}<details><summary>Exact source being reviewed</summary><pre>${escapeHtml(q.context)}</pre></details><form novalidate id="response-form" data-question="${q.id}" data-writable="${enabled}" data-item="${escapeHtml(q.item)}" data-request="${escapeHtml(q.request)}" data-revision="${q.reviewedRevision}"><label>Local author label <input name="author" maxlength="200" required autocomplete="nickname"></label>${template.controls}${standalone && template.hasPrompts ? "" : body}${details}<pre id="response-draft-recovery" hidden></pre><p>Submit the whole packet together. Drafts stay in this browser for 30 days after the last edit, with a 2 MiB workspace limit. Saved responses are Markdown files in responses/.</p><button id="response-preview" type="button" disabled>Preview Markdown</button><pre id="response-preview-content" hidden></pre><button id="response-submit" type="submit" disabled>Record response</button><button id="response-clear" type="button" disabled>Clear workspace drafts</button><p id="response-status" role="status">${enabled ? "JavaScript is required to record a response." : "Read-only mode. Restart with --responses to explicitly enable local writes."}</p></form>${yield* historyHtml(q, records)}</section>`;
24
+ return `<section class="response-panel"><h${standalone ? "2" : "1"}>${standalone ? "Answer this question" : `Respond to ${escapeHtml(q.item)} / ${escapeHtml(q.request)}`}</h${standalone ? "2" : "1"}><p>${escapeHtml(q.reason)}</p><p><a href="${fileUrl(q.source)}">Source: ${escapeHtml(q.source)}</a> · Reviewed SHA-256: <code>${q.reviewedRevision}</code></p><p>${standalone ? "An answer removes this question from the Inbox for this source revision." : "Saved replies are authored feedback. They do not close the request or establish acceptance."}</p>${standalone ? "" : `<section class="response-context">${template.background}</section>`}<details><summary>Exact source being reviewed</summary><pre>${escapeHtml(q.context)}</pre></details><form novalidate id="response-form" data-question="${q.id}" data-writable="${enabled}" data-item="${escapeHtml(q.item)}" data-request="${escapeHtml(q.request)}" data-revision="${q.reviewedRevision}"><label>Local author label <input name="author" maxlength="200" required autocomplete="nickname"></label>${template.controls}${standalone && template.hasPrompts ? "" : body}${details}<pre id="response-draft-recovery" hidden></pre><p>Submit the whole packet together. Drafts stay in this browser for seven days after the last edit, with a 256 KiB limit per draft. Saved responses are Markdown files in responses/.</p><button id="response-preview" type="button" disabled>Preview Markdown</button><pre id="response-preview-content" hidden></pre><button id="response-submit" type="submit" disabled>Record response</button><button id="response-clear" type="button" disabled>Clear draft</button><p id="response-status" role="status">${enabled ? "JavaScript is required to record a response." : "Read-only mode. Restart with --responses to explicitly enable local writes."}</p></form>${yield* historyHtml(q, records)}</section>`;
25
25
  });
@@ -1,7 +1,7 @@
1
1
  import { Schema } from "effect";
2
2
  import * as Clock from "effect/Clock";
3
3
  import * as Effect from "effect/Effect";
4
- import type { RpcClientError } from "effect/unstable/rpc/RpcClientError";
4
+ import type { RpcClientError } from "effect/rpc/RpcClientError";
5
5
  import { ServiceUnavailable } from "@shivaedev/platform/errors/taxonomy.ts";
6
6
  import type { WaitReading } from "#browser/responses/schema.ts";
7
7
  import { ResponseRejection, Unanswered } from "#rpc/rejections.ts";
@@ -0,0 +1,12 @@
1
+ import type { Effect } from "effect";
2
+ import type { Document } from "#browser/document/schema.ts";
3
+ import type { Changes } from "#server/files/changes.ts";
4
+ import type { Snapshot } from "#server/search/snapshot.ts";
5
+
6
+ export interface HandlerOptions {
7
+ readonly changes: Changes;
8
+ readonly document?: (url: string) => Effect.Effect<Document, unknown>;
9
+ readonly home: string | undefined;
10
+ readonly index: Effect.Effect<Snapshot, unknown>;
11
+ readonly writable?: boolean;
12
+ }
@@ -1,8 +1,8 @@
1
1
  import { Clock, Effect, Layer, Ref, Stream } from "effect";
2
- import type { HttpServerResponse } from "effect/unstable/http";
3
2
  import { InternalServerError, NotFound } from "@shivaedev/platform/errors/taxonomy.ts";
4
3
  import { rpcBoundary } from "@shivaedev/platform/rpc-server/boundary.ts";
5
4
  import { requestTracingLayer } from "@shivaedev/platform/rpc-server/tracing.ts";
5
+ import { Diagnostics } from "#diagnostics/source.ts";
6
6
  import { workRpcs } from "#rpc/contract.ts";
7
7
  import { DocumentRejection, ResponseRejection } from "#rpc/rejections.ts";
8
8
  import { HandoffsService } from "#server/handoffs/Service.ts";
@@ -10,32 +10,30 @@ import { historyResponse } from "#server/history/response.ts";
10
10
  import { navigationData } from "#server/navigation/model.ts";
11
11
  import { Responses } from "#server/responses/service.ts";
12
12
  import { searchMatch } from "#server/search/match.ts";
13
+ import { projectionQueries } from "#server/views/projectionQueries.ts";
14
+ import { remainingQueries } from "#server/views/remainingQueries.ts";
15
+ import type { HandlerOptions } from "./HandlerOptions.ts";
13
16
  import { hints } from "./hints.ts";
14
- import type { ServerOptions } from "./transport.ts";
15
17
 
16
18
  const readBoundary = rpcBoundary(InternalServerError, { unexpected: (message) => new InternalServerError({ message }) });
17
19
  const documentBoundary = rpcBoundary(DocumentRejection, { unexpected: (message) => new InternalServerError({ message }) });
18
20
  const responseBoundary = rpcBoundary(ResponseRejection, { unexpected: (message) => new InternalServerError({ message }) });
19
21
 
20
- function readablePage(response: HttpServerResponse.HttpServerResponse) {
21
- if (response.status >= 500 || response.body._tag !== "Uint8Array") {
22
- return Effect.fail(
23
- new InternalServerError({
24
- message: `Page response is unreadable (status ${response.status}, body ${response.body._tag}). Retry the page; if it still fails, restart Work Board.`,
25
- }),
26
- );
27
- }
28
- return Effect.succeed({ html: new TextDecoder().decode(response.body.body), status: response.status });
29
- }
30
-
31
- export const handlers = Effect.fn("WorkBoard.handlers")(function* ({ changes, document, home, index, page }: ServerOptions) {
22
+ export const handlers = Effect.fn("WorkBoard.handlers")(function* (options: HandlerOptions) {
23
+ const { changes, document, home, index } = options;
24
+ const projections = projectionQueries({ document, index });
32
25
  const handoffs = yield* HandoffsService;
33
26
  const responses = yield* Responses;
27
+ const diagnostics = yield* Diagnostics;
28
+ const remaining = remainingQueries(options, { diagnostics, handoffs, responses });
34
29
  return workRpcs
35
30
  .toLayer({
36
31
  "work-board.awaitResponse": (input) => Effect.suspend(() => responses.awaitResponse(input)).pipe(responseBoundary),
32
+ "work-board.board": ({ url }) => Effect.suspend(() => projections.board(url)).pipe(documentBoundary),
33
+ "work-board.diagnostics": () => remaining.diagnostics().pipe(readBoundary),
37
34
  "work-board.document": ({ url }) =>
38
35
  Effect.suspend(() => (document ? document(url) : Effect.fail(new NotFound({ message: "The document is missing." })))).pipe(documentBoundary),
36
+ "work-board.handoff": ({ url }) => remaining.handoff(url).pipe(documentBoundary),
39
37
  "work-board.handoffSource": ({ item }) => Effect.suspend(() => handoffs.locate(item)).pipe(responseBoundary),
40
38
  "work-board.handoffs": ({ item }) => Effect.suspend(() => handoffs.read(item)).pipe(responseBoundary),
41
39
  "work-board.history": ({ action, baseline }) =>
@@ -44,21 +42,26 @@ export const handlers = Effect.fn("WorkBoard.handlers")(function* ({ changes, do
44
42
  const snapshot = action === "check" ? undefined : yield* index;
45
43
  return historyResponse(baseline, now, snapshot);
46
44
  }).pipe(readBoundary),
45
+ "work-board.inbox": () => Effect.suspend(() => projections.inbox()).pipe(readBoundary),
47
46
  "work-board.navigation": ({ current }) =>
48
47
  Effect.gen(function* () {
49
48
  return navigationData(yield* changes.files, current, home, yield* index);
50
49
  }).pipe(readBoundary),
51
- "work-board.page": ({ url }) => Effect.suspend(() => page(url)).pipe(Effect.flatMap(readablePage), readBoundary),
50
+ "work-board.overview": () => Effect.suspend(() => projections.overview()).pipe(readBoundary),
52
51
  "work-board.prepareHandoff": (input) => Effect.suspend(() => handoffs.prepare(input)).pipe(responseBoundary),
53
52
  "work-board.question": ({ item, request }) => Effect.suspend(() => responses.locate(item, request)).pipe(responseBoundary),
54
53
  "work-board.recordResponse": (input) => Effect.suspend(() => responses.record(input)).pipe(responseBoundary),
55
54
  "work-board.registerQuestion": (input) => Effect.suspend(() => responses.register(input)).pipe(responseBoundary),
55
+ "work-board.respond": ({ url }) => remaining.respond(url).pipe(documentBoundary),
56
56
  "work-board.responses": ({ question }) => Effect.suspend(() => responses.read(question)).pipe(responseBoundary),
57
+ "work-board.result": ({ url }) => remaining.result(url).pipe(documentBoundary),
57
58
  "work-board.search": ({ query }) =>
58
59
  Effect.map(index, (snapshot) => ({ ...searchMatch(snapshot.entries, query), unavailable: snapshot.unavailable })).pipe(readBoundary),
60
+ "work-board.start": () => remaining.start().pipe(readBoundary),
59
61
  "work-board.subscribe": () =>
60
62
  hints(changes, index).pipe(Stream.catchCause((cause) => Stream.fromEffect(Effect.failCause(cause).pipe(readBoundary)))),
61
63
  "work-board.watcher": () => Effect.map(Ref.get(changes.watching), (watching) => ({ watching })).pipe(readBoundary),
64
+ "work-board.work": ({ url }) => Effect.suspend(() => projections.work(url)).pipe(documentBoundary),
62
65
  })
63
66
  .pipe(Layer.provideMerge(requestTracingLayer()));
64
67
  });
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { NodeRuntime, NodeServices } from "@effect/platform-node";
3
3
  import { Effect, Layer, Option, Path } from "effect";
4
- import { Argument, Command, Flag } from "effect/unstable/cli";
4
+ import { Argument, Command, Flag } from "effect/cli";
5
5
  import { DAEMON_PORT } from "#diagnostics/daemonContract.ts";
6
6
  import { HOST, serveBoard } from "./serve.ts";
7
7
 
8
- const VERSION = "0.12.0";
8
+ const VERSION = "0.13.0";
9
9
 
10
10
  const serve = Effect.fn("WorkBoard.serve")(function* (input: {
11
11
  readonly dir: string;
@@ -31,15 +31,15 @@ const serve = Effect.fn("WorkBoard.serve")(function* (input: {
31
31
  const workBoard = Command.make(
32
32
  "work-board",
33
33
  {
34
- dir: Argument.directory("dir", { mustExist: true }).pipe(Argument.withDescription("The folder of markdown files to serve")),
35
- fleetPort: Flag.integer("fleet-port").pipe(Flag.withDefault(DAEMON_PORT), Flag.withDescription("Fleet daemon port for Diagnostics at 127.0.0.1")),
36
- home: Flag.string("home").pipe(Flag.optional, Flag.withDescription("The file shown as a board at /, relative to the folder")),
37
- maintainer: Flag.string("maintainer").pipe(
34
+ dir: Argument.Directory("dir", { mustExist: true }).pipe(Argument.withDescription("The folder of markdown files to serve")),
35
+ fleetPort: Flag.Int("fleet-port").pipe(Flag.withDefault(DAEMON_PORT), Flag.withDescription("Fleet daemon port for Diagnostics at 127.0.0.1")),
36
+ home: Flag.String("home").pipe(Flag.optional, Flag.withDescription("The file shown as a board at /, relative to the folder")),
37
+ maintainer: Flag.String("maintainer").pipe(
38
38
  Flag.withDefault("maintainer"),
39
39
  Flag.withDescription("The response_from label whose questions appear in the Inbox"),
40
40
  ),
41
- port: Flag.integer("port").pipe(Flag.withDefault(4747), Flag.withDescription(`The port to listen on at ${HOST}`)),
42
- responses: Flag.boolean("responses").pipe(
41
+ port: Flag.Int("port").pipe(Flag.withDefault(4747), Flag.withDescription(`The port to listen on at ${HOST}`)),
42
+ responses: Flag.Boolean("responses").pipe(
43
43
  Flag.withDefault(false),
44
44
  Flag.withDescription("Explicitly enable local durable question, response and handoff writes (Linux)"),
45
45
  ),
@@ -1,8 +1,12 @@
1
- import { createServer } from "node:http";
2
- import { NodeHttpServer } from "@effect/platform-node";
3
- import { Layer } from "effect";
4
- import { HttpRouter } from "effect/unstable/http";
5
- import { type BoardOptions, boardLayer } from "./board.ts";
1
+ import { Effect, Layer } from "effect";
2
+ import { appHost } from "@shivaedev/platform/appHost.ts";
3
+ import { workRpcs } from "#rpc/contract.ts";
4
+ import { boardRuntime } from "#server/boardRuntime.ts";
5
+ import { MAX_BYTES } from "#server/history/limits.ts";
6
+ import { boardRoutes } from "#server/http/boardRoutes.ts";
7
+ import { RPC_PATH, rpcPolicy } from "#server/http/rpcPolicy.ts";
8
+ import { Highlighter } from "#server/render/Highlighter.ts";
9
+ import type { BoardOptions } from "./board.ts";
6
10
 
7
11
  export const HOST = "127.0.0.1";
8
12
 
@@ -10,10 +14,19 @@ export interface ServeOptions extends BoardOptions {
10
14
  readonly port: number;
11
15
  }
12
16
 
13
- export function listenOn(port: number) {
14
- return NodeHttpServer.layer(createServer, { disablePreemptiveShutdown: true, host: HOST, port });
15
- }
16
-
17
17
  export function serveBoard(options: ServeOptions) {
18
- return HttpRouter.serve(boardLayer(options), { disableLogger: true }).pipe(Layer.provideMerge(listenOn(options.port)));
18
+ return Layer.unwrap(
19
+ Effect.gen(function* () {
20
+ const runtime = yield* boardRuntime(options);
21
+ return appHost({
22
+ config: { disablePreemptiveShutdown: true, host: HOST, maxBodySize: 4 * MAX_BYTES + 4096, port: options.port },
23
+ group: workRpcs,
24
+ handlers: runtime.rpcHandlers,
25
+ policy: "loopback",
26
+ routes: Layer.merge(boardRoutes(options, runtime), rpcPolicy),
27
+ rpcPath: RPC_PATH,
28
+ services: Layer.empty,
29
+ });
30
+ }),
31
+ ).pipe(Layer.provide(Highlighter.layer));
19
32
  }
@@ -0,0 +1,78 @@
1
+ import { Effect } from "effect";
2
+ import { NotFound } from "@shivaedev/platform/errors/taxonomy.ts";
3
+ import type { BoardProjection, InboxProjection, OverviewProjection, WorkProjection } from "#browser/views/schema.ts";
4
+ import { stateOf } from "#browser/views/state.ts";
5
+ import { inboxItems } from "#server/attention/inbox.ts";
6
+ import { attentionRequests } from "#server/attention/requests.ts";
7
+ import { identityUrl, referenceTarget } from "#server/metadata/links.ts";
8
+ import { boardOf, countsOf } from "#server/render/board.ts";
9
+ import type { HandlerOptions } from "#server/rpc/HandlerOptions.ts";
10
+ import type { Snapshot } from "#server/search/snapshot.ts";
11
+ import type { Item } from "./items.ts";
12
+ import { projectItems } from "./projection.ts";
13
+
14
+ export function projectionQueries({ index, document }: { readonly index: HandlerOptions["index"]; readonly document: HandlerOptions["document"] }) {
15
+ function read(url: string) {
16
+ return document ? document(url) : Effect.fail(new NotFound({ message: "The document is missing." }));
17
+ }
18
+ return {
19
+ board: (url: string) => Effect.map(read(url), (data): BoardProjection => ({ counts: countsOf(boardOf(data.source)), document: data })),
20
+ inbox: () => Effect.map(index, inboxProjection),
21
+ overview: () => Effect.map(index, overviewProjection),
22
+ work: (url: string) =>
23
+ Effect.gen(function* () {
24
+ const snapshot = yield* index;
25
+ const state = stateOf(url);
26
+ const projection = projectItems(snapshot, state);
27
+ const waiting = new Map(
28
+ inboxItems(snapshot)
29
+ .filter((entry) => !entry.problem)
30
+ .map((entry) => [entry.id, entry.reason]),
31
+ );
32
+ function toItem({ document: source, id, title }: Item) {
33
+ return { file: source.file, id, metadata: source.parsed.fields, title, waiting: waiting.get(id) };
34
+ }
35
+ const selected = projection.selected ? yield* read(identityUrl(projection.selected.id)) : undefined;
36
+ return {
37
+ boards: projection.boards.map(toItem),
38
+ issues: projection.issues,
39
+ items: projection.items.map(toItem),
40
+ rows: projection.rows.map(toItem),
41
+ selected,
42
+ selectedOutside: projection.selectedOutside,
43
+ selectionProblem: !state.item || selected ? undefined : selectionProblem(snapshot, state.item),
44
+ state,
45
+ title: projection.title,
46
+ validBoard: projection.validBoard,
47
+ } satisfies WorkProjection;
48
+ }),
49
+ };
50
+ }
51
+ function inboxProjection(snapshot: Snapshot): InboxProjection {
52
+ return {
53
+ complete: snapshot.unavailable.length === 0,
54
+ items: inboxItems(snapshot).map(({ document, ...item }) => ({ ...item, file: document.file })),
55
+ sourceIssues: snapshot.model.documents.some((document) => (snapshot.model.diagnostics.get(document.file)?.length ?? 0) > 0),
56
+ };
57
+ }
58
+ function overviewProjection(snapshot: Snapshot): OverviewProjection {
59
+ const projection = attentionRequests(snapshot);
60
+ return {
61
+ ...projection,
62
+ entries: projection.entries.map(({ document, request, ...entry }) => ({
63
+ ...entry,
64
+ file: document.file,
65
+ id: request.id,
66
+ kind: request.kind,
67
+ reason: request.reason,
68
+ responseFrom: request.responseFrom,
69
+ unblocks: request.unblocks.map((target) => ({ href: referenceTarget(target, snapshot.model), label: target })),
70
+ })),
71
+ inboxCount: inboxItems(snapshot).length,
72
+ unavailable: snapshot.unavailable,
73
+ };
74
+ }
75
+
76
+ function selectionProblem(snapshot: Snapshot, item: string) {
77
+ return (snapshot.model.ids.get(item)?.length ?? 0) > 1 ? "has a duplicate ID" : "is missing or its identity changed";
78
+ }