@vibefield/rosetta-room 0.0.0-stage → 0.1.1

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 (435) hide show
  1. package/README.md +247 -2
  2. package/dist/HistoryRoom.d.ts +98 -0
  3. package/dist/HistoryRoom.js +440 -0
  4. package/dist/TranscriptReader.d.ts +22 -0
  5. package/dist/TranscriptReader.js +72 -0
  6. package/dist/components/ColdStart.d.ts +4 -0
  7. package/dist/components/ColdStart.js +5 -0
  8. package/dist/components/FilterChips.d.ts +4 -0
  9. package/dist/components/FilterChips.js +5 -0
  10. package/dist/components/HostAct.d.ts +9 -0
  11. package/dist/components/HostAct.js +16 -0
  12. package/dist/components/HostMenu.d.ts +41 -0
  13. package/dist/components/HostMenu.js +216 -0
  14. package/dist/components/IngestStatus.d.ts +4 -0
  15. package/dist/components/IngestStatus.js +20 -0
  16. package/dist/components/ListActivityNotice.d.ts +5 -0
  17. package/dist/components/ListActivityNotice.js +4 -0
  18. package/dist/components/ListSections.d.ts +20 -0
  19. package/dist/components/ListSections.js +39 -0
  20. package/dist/components/RenameHeading.d.ts +9 -0
  21. package/dist/components/RenameHeading.js +75 -0
  22. package/dist/components/SearchStrip.d.ts +5 -0
  23. package/dist/components/SearchStrip.js +8 -0
  24. package/dist/components/SummaryMetrics.d.ts +13 -0
  25. package/dist/components/SummaryMetrics.js +9 -0
  26. package/dist/components/SummaryPanels.d.ts +35 -0
  27. package/dist/components/SummaryPanels.js +117 -0
  28. package/dist/components/Transcript.d.ts +46 -0
  29. package/dist/components/Transcript.js +358 -0
  30. package/dist/components/charts/ActivityChartDetail.d.ts +13 -0
  31. package/dist/components/charts/ActivityChartDetail.js +78 -0
  32. package/dist/components/charts/CalendarHeatmap.d.ts +16 -0
  33. package/dist/components/charts/CalendarHeatmap.js +55 -0
  34. package/dist/components/charts/DayActivityChart.d.ts +8 -0
  35. package/dist/components/charts/DayActivityChart.js +71 -0
  36. package/dist/components/charts/ModelsChartDetail.d.ts +7 -0
  37. package/dist/components/charts/ModelsChartDetail.js +19 -0
  38. package/dist/components/charts/ProjectChartDialog.d.ts +19 -0
  39. package/dist/components/charts/ProjectChartDialog.js +39 -0
  40. package/dist/components/charts/Streamgraph.d.ts +16 -0
  41. package/dist/components/charts/Streamgraph.js +94 -0
  42. package/dist/components/charts/Treemap.d.ts +26 -0
  43. package/dist/components/charts/Treemap.js +81 -0
  44. package/dist/components/charts/index.d.ts +9 -0
  45. package/dist/components/charts/index.js +4 -0
  46. package/dist/components/charts/streamgraph-layout.d.ts +23 -0
  47. package/dist/components/charts/streamgraph-layout.js +114 -0
  48. package/dist/components/charts/treemap-layout.d.ts +32 -0
  49. package/dist/components/charts/treemap-layout.js +140 -0
  50. package/dist/components/charts/types.d.ts +65 -0
  51. package/dist/components/charts/types.js +8 -0
  52. package/dist/components/file-viewer/FileViewerBrowsers.d.ts +10 -0
  53. package/dist/components/file-viewer/FileViewerBrowsers.js +65 -0
  54. package/dist/components/file-viewer/FileViewerDialog.d.ts +33 -0
  55. package/dist/components/file-viewer/FileViewerDialog.js +82 -0
  56. package/dist/components/file-viewer/FileViewerHeader.d.ts +26 -0
  57. package/dist/components/file-viewer/FileViewerHeader.js +17 -0
  58. package/dist/components/file-viewer/ImageGalleryDialog.d.ts +14 -0
  59. package/dist/components/file-viewer/ImageGalleryDialog.js +98 -0
  60. package/dist/components/file-viewer/diff/index.d.ts +2 -0
  61. package/dist/components/file-viewer/diff/index.js +2 -0
  62. package/dist/components/file-viewer/diff/parse.d.ts +2 -0
  63. package/dist/components/file-viewer/diff/parse.js +164 -0
  64. package/dist/components/file-viewer/diff/types.d.ts +44 -0
  65. package/dist/components/file-viewer/diff/types.js +7 -0
  66. package/dist/components/file-viewer/gallery-source.d.ts +11 -0
  67. package/dist/components/file-viewer/gallery-source.js +75 -0
  68. package/dist/components/file-viewer/image-resource.d.ts +19 -0
  69. package/dist/components/file-viewer/image-resource.js +60 -0
  70. package/dist/components/file-viewer/index.d.ts +5 -0
  71. package/dist/components/file-viewer/index.js +8 -0
  72. package/dist/components/file-viewer/markdown/blocks.d.ts +2 -0
  73. package/dist/components/file-viewer/markdown/blocks.js +277 -0
  74. package/dist/components/file-viewer/markdown/index.d.ts +4 -0
  75. package/dist/components/file-viewer/markdown/index.js +35 -0
  76. package/dist/components/file-viewer/markdown/inline.d.ts +10 -0
  77. package/dist/components/file-viewer/markdown/inline.js +178 -0
  78. package/dist/components/file-viewer/markdown/render.d.ts +9 -0
  79. package/dist/components/file-viewer/markdown/render.js +78 -0
  80. package/dist/components/file-viewer/markdown/types.d.ts +57 -0
  81. package/dist/components/file-viewer/markdown/types.js +11 -0
  82. package/dist/components/file-viewer/minimap/CodeMinimap.d.ts +10 -0
  83. package/dist/components/file-viewer/minimap/CodeMinimap.js +296 -0
  84. package/dist/components/file-viewer/minimap/layout.d.ts +60 -0
  85. package/dist/components/file-viewer/minimap/layout.js +117 -0
  86. package/dist/components/file-viewer/minimap/palette.d.ts +2 -0
  87. package/dist/components/file-viewer/minimap/palette.js +73 -0
  88. package/dist/components/file-viewer/minimap/raster.d.ts +19 -0
  89. package/dist/components/file-viewer/minimap/raster.js +122 -0
  90. package/dist/components/file-viewer/registry.d.ts +25 -0
  91. package/dist/components/file-viewer/registry.js +182 -0
  92. package/dist/components/file-viewer/syntax/grammars.d.ts +16 -0
  93. package/dist/components/file-viewer/syntax/grammars.js +221 -0
  94. package/dist/components/file-viewer/syntax/index.d.ts +8 -0
  95. package/dist/components/file-viewer/syntax/index.js +9 -0
  96. package/dist/components/file-viewer/syntax/languages.d.ts +14 -0
  97. package/dist/components/file-viewer/syntax/languages.js +115 -0
  98. package/dist/components/file-viewer/syntax/tokenize-config.d.ts +2 -0
  99. package/dist/components/file-viewer/syntax/tokenize-config.js +132 -0
  100. package/dist/components/file-viewer/syntax/tokenize-css.d.ts +2 -0
  101. package/dist/components/file-viewer/syntax/tokenize-css.js +169 -0
  102. package/dist/components/file-viewer/syntax/tokenize-markup.d.ts +2 -0
  103. package/dist/components/file-viewer/syntax/tokenize-markup.js +124 -0
  104. package/dist/components/file-viewer/syntax/tokenize.d.ts +9 -0
  105. package/dist/components/file-viewer/syntax/tokenize.js +289 -0
  106. package/dist/components/file-viewer/syntax/types.d.ts +74 -0
  107. package/dist/components/file-viewer/syntax/types.js +13 -0
  108. package/dist/components/file-viewer/types.d.ts +111 -0
  109. package/dist/components/file-viewer/types.js +8 -0
  110. package/dist/components/file-viewer/use-file-content.d.ts +26 -0
  111. package/dist/components/file-viewer/use-file-content.js +144 -0
  112. package/dist/components/file-viewer/views/BinaryView.d.ts +2 -0
  113. package/dist/components/file-viewer/views/BinaryView.js +34 -0
  114. package/dist/components/file-viewer/views/CodeView.d.ts +2 -0
  115. package/dist/components/file-viewer/views/CodeView.js +46 -0
  116. package/dist/components/file-viewer/views/DiffBody.d.ts +7 -0
  117. package/dist/components/file-viewer/views/DiffBody.js +77 -0
  118. package/dist/components/file-viewer/views/DiffView.d.ts +2 -0
  119. package/dist/components/file-viewer/views/DiffView.js +11 -0
  120. package/dist/components/file-viewer/views/ImageView.d.ts +9 -0
  121. package/dist/components/file-viewer/views/ImageView.js +28 -0
  122. package/dist/components/file-viewer/views/MarkdownView.d.ts +9 -0
  123. package/dist/components/file-viewer/views/MarkdownView.js +20 -0
  124. package/dist/components/file-viewer/views/SvgView.d.ts +9 -0
  125. package/dist/components/file-viewer/views/SvgView.js +10 -0
  126. package/dist/components/git/ChangeTree.d.ts +20 -0
  127. package/dist/components/git/ChangeTree.js +35 -0
  128. package/dist/components/git/CommitViewer.d.ts +12 -0
  129. package/dist/components/git/CommitViewer.js +85 -0
  130. package/dist/components/git/GitChanges.d.ts +17 -0
  131. package/dist/components/git/GitChanges.js +70 -0
  132. package/dist/components/git/GitHistory.d.ts +9 -0
  133. package/dist/components/git/GitHistory.js +58 -0
  134. package/dist/components/git/co-author.d.ts +14 -0
  135. package/dist/components/git/co-author.js +55 -0
  136. package/dist/components/git/git-file-source.d.ts +18 -0
  137. package/dist/components/git/git-file-source.js +53 -0
  138. package/dist/components/git/git-host.d.ts +24 -0
  139. package/dist/components/git/git-host.js +130 -0
  140. package/dist/components/git/index.d.ts +10 -0
  141. package/dist/components/git/index.js +12 -0
  142. package/dist/components/git/path-tree.d.ts +23 -0
  143. package/dist/components/git/path-tree.js +73 -0
  144. package/dist/components/git/session-files.d.ts +9 -0
  145. package/dist/components/git/session-files.js +50 -0
  146. package/dist/components/git/types.d.ts +92 -0
  147. package/dist/components/git/types.js +9 -0
  148. package/dist/components/projects/ProjectActivitySparkline.d.ts +6 -0
  149. package/dist/components/projects/ProjectActivitySparkline.js +12 -0
  150. package/dist/components/projects/ProjectList.d.ts +25 -0
  151. package/dist/components/projects/ProjectList.js +43 -0
  152. package/dist/components/projects/ProjectListItem.d.ts +19 -0
  153. package/dist/components/projects/ProjectListItem.js +78 -0
  154. package/dist/components/projects/ProjectsColumn.d.ts +19 -0
  155. package/dist/components/projects/ProjectsColumn.js +36 -0
  156. package/dist/components/projects/index.d.ts +8 -0
  157. package/dist/components/projects/index.js +4 -0
  158. package/dist/components/search/MatchStepper.d.ts +9 -0
  159. package/dist/components/search/MatchStepper.js +14 -0
  160. package/dist/components/search/SearchLauncher.d.ts +12 -0
  161. package/dist/components/search/SearchLauncher.js +13 -0
  162. package/dist/components/search/SearchSheet.d.ts +29 -0
  163. package/dist/components/search/SearchSheet.js +230 -0
  164. package/dist/components/search/index.d.ts +8 -0
  165. package/dist/components/search/index.js +4 -0
  166. package/dist/components/search/shortcut.d.ts +25 -0
  167. package/dist/components/search/shortcut.js +32 -0
  168. package/dist/components/sessions/SessionList.d.ts +24 -0
  169. package/dist/components/sessions/SessionList.js +76 -0
  170. package/dist/components/sessions/SessionListItem.d.ts +13 -0
  171. package/dist/components/sessions/SessionListItem.js +58 -0
  172. package/dist/components/sessions/SessionsColumn.d.ts +26 -0
  173. package/dist/components/sessions/SessionsColumn.js +32 -0
  174. package/dist/components/sessions/index.d.ts +9 -0
  175. package/dist/components/sessions/index.js +4 -0
  176. package/dist/components/sessions/session-display.d.ts +8 -0
  177. package/dist/components/sessions/session-display.js +18 -0
  178. package/dist/components/sessions/types.d.ts +7 -0
  179. package/dist/components/sessions/types.js +1 -0
  180. package/dist/components/transcript/Activity.d.ts +45 -0
  181. package/dist/components/transcript/Activity.js +75 -0
  182. package/dist/components/transcript/Anchor.d.ts +8 -0
  183. package/dist/components/transcript/Anchor.js +23 -0
  184. package/dist/components/transcript/Attachments.d.ts +21 -0
  185. package/dist/components/transcript/Attachments.js +138 -0
  186. package/dist/components/transcript/AuthoredMessage.d.ts +19 -0
  187. package/dist/components/transcript/AuthoredMessage.js +17 -0
  188. package/dist/components/transcript/Compaction.d.ts +9 -0
  189. package/dist/components/transcript/Compaction.js +50 -0
  190. package/dist/components/transcript/DayPill.d.ts +38 -0
  191. package/dist/components/transcript/DayPill.js +68 -0
  192. package/dist/components/transcript/Document.d.ts +32 -0
  193. package/dist/components/transcript/Document.js +503 -0
  194. package/dist/components/transcript/Favicon.d.ts +32 -0
  195. package/dist/components/transcript/Favicon.js +71 -0
  196. package/dist/components/transcript/HeadOfDocument.d.ts +19 -0
  197. package/dist/components/transcript/HeadOfDocument.js +44 -0
  198. package/dist/components/transcript/Ledger.d.ts +53 -0
  199. package/dist/components/transcript/Ledger.js +182 -0
  200. package/dist/components/transcript/LineDetail.d.ts +24 -0
  201. package/dist/components/transcript/LineDetail.js +81 -0
  202. package/dist/components/transcript/Marker.d.ts +33 -0
  203. package/dist/components/transcript/Marker.js +21 -0
  204. package/dist/components/transcript/MessagePreview.d.ts +12 -0
  205. package/dist/components/transcript/MessagePreview.js +58 -0
  206. package/dist/components/transcript/Prompt.d.ts +20 -0
  207. package/dist/components/transcript/Prompt.js +55 -0
  208. package/dist/components/transcript/Prose.d.ts +19 -0
  209. package/dist/components/transcript/Prose.js +109 -0
  210. package/dist/components/transcript/ReceiptPill.d.ts +10 -0
  211. package/dist/components/transcript/ReceiptPill.js +10 -0
  212. package/dist/components/transcript/ResponseHead.d.ts +9 -0
  213. package/dist/components/transcript/ResponseHead.js +36 -0
  214. package/dist/components/transcript/Subthread.d.ts +19 -0
  215. package/dist/components/transcript/Subthread.js +96 -0
  216. package/dist/components/transcript/Team.d.ts +53 -0
  217. package/dist/components/transcript/Team.js +185 -0
  218. package/dist/components/transcript/Thinking.d.ts +24 -0
  219. package/dist/components/transcript/Thinking.js +50 -0
  220. package/dist/components/transcript/TimelineMeta.d.ts +9 -0
  221. package/dist/components/transcript/TimelineMeta.js +161 -0
  222. package/dist/components/transcript/TranscriptLoading.d.ts +10 -0
  223. package/dist/components/transcript/TranscriptLoading.js +10 -0
  224. package/dist/components/transcript/WebDetail.d.ts +8 -0
  225. package/dist/components/transcript/WebDetail.js +29 -0
  226. package/dist/components/transcript/Workflow.d.ts +12 -0
  227. package/dist/components/transcript/Workflow.js +208 -0
  228. package/dist/components/transcript/activity-plan.d.ts +84 -0
  229. package/dist/components/transcript/activity-plan.js +209 -0
  230. package/dist/components/transcript/attachment-file-source.d.ts +23 -0
  231. package/dist/components/transcript/attachment-file-source.js +103 -0
  232. package/dist/components/transcript/attachment-gallery.d.ts +12 -0
  233. package/dist/components/transcript/attachment-gallery.js +33 -0
  234. package/dist/components/transcript/detail-parts.d.ts +50 -0
  235. package/dist/components/transcript/detail-parts.js +295 -0
  236. package/dist/components/transcript/disclosure-state.d.ts +6 -0
  237. package/dist/components/transcript/disclosure-state.js +32 -0
  238. package/dist/components/transcript/disclosure-store.d.ts +8 -0
  239. package/dist/components/transcript/disclosure-store.js +31 -0
  240. package/dist/components/transcript/document-model.d.ts +15 -0
  241. package/dist/components/transcript/document-model.js +104 -0
  242. package/dist/components/transcript/document-plan.d.ts +28 -0
  243. package/dist/components/transcript/document-plan.js +145 -0
  244. package/dist/components/transcript/fold-preference.d.ts +17 -0
  245. package/dist/components/transcript/fold-preference.js +63 -0
  246. package/dist/components/transcript/glyphs.d.ts +15 -0
  247. package/dist/components/transcript/glyphs.js +47 -0
  248. package/dist/components/transcript/index.d.ts +23 -0
  249. package/dist/components/transcript/index.js +22 -0
  250. package/dist/components/transcript/message-file-source.d.ts +15 -0
  251. package/dist/components/transcript/message-file-source.js +31 -0
  252. package/dist/components/transcript/message-preview.d.ts +9 -0
  253. package/dist/components/transcript/message-preview.js +46 -0
  254. package/dist/components/transcript/read-file-source.d.ts +7 -0
  255. package/dist/components/transcript/read-file-source.js +34 -0
  256. package/dist/components/transcript/reader-context.d.ts +13 -0
  257. package/dist/components/transcript/reader-context.js +55 -0
  258. package/dist/components/transcript/reading-identity.d.ts +2 -0
  259. package/dist/components/transcript/reading-identity.js +52 -0
  260. package/dist/components/transcript/scroll-to-row.d.ts +2 -0
  261. package/dist/components/transcript/scroll-to-row.js +13 -0
  262. package/dist/components/transcript/thread-index.d.ts +14 -0
  263. package/dist/components/transcript/thread-index.js +40 -0
  264. package/dist/components/transcript/thread-navigation.d.ts +5 -0
  265. package/dist/components/transcript/thread-navigation.js +3 -0
  266. package/dist/components/transcript/timeline-meta-file-source.d.ts +6 -0
  267. package/dist/components/transcript/timeline-meta-file-source.js +55 -0
  268. package/dist/components/transcript/timeline-meta-state.d.ts +12 -0
  269. package/dist/components/transcript/timeline-meta-state.js +24 -0
  270. package/dist/components/ui/ColumnHeading.d.ts +27 -0
  271. package/dist/components/ui/ColumnHeading.js +7 -0
  272. package/dist/components/ui/ConfirmDialog.d.ts +14 -0
  273. package/dist/components/ui/ConfirmDialog.js +22 -0
  274. package/dist/components/ui/DialogShell.d.ts +18 -0
  275. package/dist/components/ui/DialogShell.js +40 -0
  276. package/dist/components/ui/EmptyState.d.ts +10 -0
  277. package/dist/components/ui/EmptyState.js +6 -0
  278. package/dist/components/ui/ListSummaryHeader.d.ts +9 -0
  279. package/dist/components/ui/ListSummaryHeader.js +6 -0
  280. package/dist/components/ui/ListToolbar.d.ts +6 -0
  281. package/dist/components/ui/ListToolbar.js +5 -0
  282. package/dist/components/ui/ResultGroupHeader.d.ts +9 -0
  283. package/dist/components/ui/ResultGroupHeader.js +5 -0
  284. package/dist/components/ui/SegmentedControl.d.ts +16 -0
  285. package/dist/components/ui/SegmentedControl.js +9 -0
  286. package/dist/components/ui/SummaryMetric.d.ts +13 -0
  287. package/dist/components/ui/SummaryMetric.js +10 -0
  288. package/dist/components/ui/Veil.d.ts +7 -0
  289. package/dist/components/ui/Veil.js +5 -0
  290. package/dist/components/ui/index.d.ts +20 -0
  291. package/dist/components/ui/index.js +10 -0
  292. package/dist/components/worktree/WorktreeColumn.d.ts +22 -0
  293. package/dist/components/worktree/WorktreeColumn.js +170 -0
  294. package/dist/components/worktree/WorktreeFileTree.d.ts +19 -0
  295. package/dist/components/worktree/WorktreeFileTree.js +60 -0
  296. package/dist/components/worktree/WorktreeHeader.d.ts +32 -0
  297. package/dist/components/worktree/WorktreeHeader.js +81 -0
  298. package/dist/components/worktree/WorktreeList.d.ts +8 -0
  299. package/dist/components/worktree/WorktreeList.js +12 -0
  300. package/dist/components/worktree/index.d.ts +12 -0
  301. package/dist/components/worktree/index.js +7 -0
  302. package/dist/components/worktree/types.d.ts +17 -0
  303. package/dist/components/worktree/types.js +3 -0
  304. package/dist/components/worktree/use-worktree-guest.d.ts +21 -0
  305. package/dist/components/worktree/use-worktree-guest.js +92 -0
  306. package/dist/components/worktree/worktree-file-commands.d.ts +19 -0
  307. package/dist/components/worktree/worktree-file-commands.js +112 -0
  308. package/dist/components/worktree/worktree-file-source.d.ts +15 -0
  309. package/dist/components/worktree/worktree-file-source.js +75 -0
  310. package/dist/components/worktree/worktree-host.d.ts +31 -0
  311. package/dist/components/worktree/worktree-host.js +242 -0
  312. package/dist/fixtures/index.d.ts +24 -0
  313. package/dist/fixtures/index.js +292 -0
  314. package/dist/host-inputs.d.ts +231 -0
  315. package/dist/host-inputs.js +35 -0
  316. package/dist/index.d.ts +18 -0
  317. package/dist/index.js +14 -0
  318. package/dist/lib/activity-details.d.ts +23 -0
  319. package/dist/lib/activity-details.js +78 -0
  320. package/dist/lib/activity-order.d.ts +32 -0
  321. package/dist/lib/activity-order.js +86 -0
  322. package/dist/lib/agent-paths.d.ts +6 -0
  323. package/dist/lib/agent-paths.js +19 -0
  324. package/dist/lib/agents.d.ts +15 -0
  325. package/dist/lib/agents.js +60 -0
  326. package/dist/lib/catalog-status.d.ts +3 -0
  327. package/dist/lib/catalog-status.js +10 -0
  328. package/dist/lib/chart-data.d.ts +14 -0
  329. package/dist/lib/chart-data.js +151 -0
  330. package/dist/lib/day-activity.d.ts +21 -0
  331. package/dist/lib/day-activity.js +56 -0
  332. package/dist/lib/format.d.ts +24 -0
  333. package/dist/lib/format.js +116 -0
  334. package/dist/lib/hooks.d.ts +118 -0
  335. package/dist/lib/hooks.js +608 -0
  336. package/dist/lib/icons.d.ts +21 -0
  337. package/dist/lib/icons.js +49 -0
  338. package/dist/lib/image-media.d.ts +6 -0
  339. package/dist/lib/image-media.js +30 -0
  340. package/dist/lib/ingest-activity.d.ts +50 -0
  341. package/dist/lib/ingest-activity.js +151 -0
  342. package/dist/lib/ingest.d.ts +25 -0
  343. package/dist/lib/ingest.js +70 -0
  344. package/dist/lib/model-labels.d.ts +5 -0
  345. package/dist/lib/model-labels.js +28 -0
  346. package/dist/lib/model.d.ts +73 -0
  347. package/dist/lib/model.js +141 -0
  348. package/dist/lib/motion.d.ts +13 -0
  349. package/dist/lib/motion.js +80 -0
  350. package/dist/lib/room-storage.d.ts +13 -0
  351. package/dist/lib/room-storage.js +40 -0
  352. package/dist/lib/search-results.d.ts +27 -0
  353. package/dist/lib/search-results.js +83 -0
  354. package/dist/lib/search-sheet.d.ts +119 -0
  355. package/dist/lib/search-sheet.js +282 -0
  356. package/dist/lib/sections.d.ts +19 -0
  357. package/dist/lib/sections.js +36 -0
  358. package/dist/lib/session-activity.d.ts +5 -0
  359. package/dist/lib/session-activity.js +15 -0
  360. package/dist/lib/session-leases.d.ts +15 -0
  361. package/dist/lib/session-leases.js +61 -0
  362. package/dist/lib/spend.d.ts +42 -0
  363. package/dist/lib/spend.js +112 -0
  364. package/dist/lib/tint.d.ts +9 -0
  365. package/dist/lib/tint.js +53 -0
  366. package/dist/lib/transcript/collaboration.d.ts +97 -0
  367. package/dist/lib/transcript/collaboration.js +423 -0
  368. package/dist/lib/transcript/families.d.ts +212 -0
  369. package/dist/lib/transcript/families.js +906 -0
  370. package/dist/lib/transcript/favicons.d.ts +54 -0
  371. package/dist/lib/transcript/favicons.js +183 -0
  372. package/dist/lib/transcript/head-of-document.d.ts +27 -0
  373. package/dist/lib/transcript/head-of-document.js +274 -0
  374. package/dist/lib/transcript/head-state.d.ts +182 -0
  375. package/dist/lib/transcript/head-state.js +305 -0
  376. package/dist/lib/transcript/history-window.d.ts +13 -0
  377. package/dist/lib/transcript/history-window.js +52 -0
  378. package/dist/lib/transcript/images.d.ts +8 -0
  379. package/dist/lib/transcript/images.js +60 -0
  380. package/dist/lib/transcript/index.d.ts +15 -0
  381. package/dist/lib/transcript/index.js +8 -0
  382. package/dist/lib/transcript/ledger.d.ts +143 -0
  383. package/dist/lib/transcript/ledger.js +513 -0
  384. package/dist/lib/transcript/protocol.d.ts +23 -0
  385. package/dist/lib/transcript/protocol.js +1 -0
  386. package/dist/lib/transcript/sittings.d.ts +75 -0
  387. package/dist/lib/transcript/sittings.js +147 -0
  388. package/dist/lib/transcript/tail-scroll.d.ts +36 -0
  389. package/dist/lib/transcript/tail-scroll.js +167 -0
  390. package/dist/lib/transcript/tail-state.d.ts +17 -0
  391. package/dist/lib/transcript/tail-state.js +30 -0
  392. package/dist/lib/transcript/turns.d.ts +192 -0
  393. package/dist/lib/transcript/turns.js +576 -0
  394. package/dist/lib/transcript/use-transcript-opening.d.ts +12 -0
  395. package/dist/lib/transcript/use-transcript-opening.js +31 -0
  396. package/dist/lib/transcript/use-transcript-tail.d.ts +25 -0
  397. package/dist/lib/transcript/use-transcript-tail.js +158 -0
  398. package/dist/lib/transcript/vocabulary.d.ts +119 -0
  399. package/dist/lib/transcript/vocabulary.js +293 -0
  400. package/dist/lib/transcript/web-address.d.ts +6 -0
  401. package/dist/lib/transcript/web-address.js +18 -0
  402. package/dist/lib/transcript/workflow.d.ts +31 -0
  403. package/dist/lib/transcript/workflow.js +133 -0
  404. package/dist/lib/use-activity-order.d.ts +2 -0
  405. package/dist/lib/use-activity-order.js +23 -0
  406. package/dist/lib/use-day-usage.d.ts +8 -0
  407. package/dist/lib/use-day-usage.js +31 -0
  408. package/dist/lib/use-deferred-list-order.d.ts +26 -0
  409. package/dist/lib/use-deferred-list-order.js +142 -0
  410. package/dist/lib/use-ingest-activity.d.ts +2 -0
  411. package/dist/lib/use-ingest-activity.js +49 -0
  412. package/dist/lib/use-list-motion.d.ts +4 -0
  413. package/dist/lib/use-list-motion.js +67 -0
  414. package/dist/ports.d.ts +222 -0
  415. package/dist/ports.js +3 -0
  416. package/dist/room-context.d.ts +60 -0
  417. package/dist/room-context.js +87 -0
  418. package/dist/styles/activity-chart.css +127 -0
  419. package/dist/styles/attachments.css +29 -0
  420. package/dist/styles/favicon.css +73 -0
  421. package/dist/styles/history-room.css +18 -0
  422. package/dist/styles/host-inputs.css +250 -0
  423. package/dist/styles/image-gallery.css +30 -0
  424. package/dist/styles/ingest.css +51 -0
  425. package/dist/styles/message-preview.css +34 -0
  426. package/dist/styles/models-chart.css +66 -0
  427. package/dist/styles/project-chart.css +19 -0
  428. package/dist/styles/reader.css +33 -0
  429. package/dist/styles/room.css +1411 -0
  430. package/dist/styles/search.css +252 -0
  431. package/dist/styles/transcript-activity.css +70 -0
  432. package/dist/styles/transcript-head.css +220 -0
  433. package/dist/styles/transcript-loading.css +57 -0
  434. package/dist/styles/transcript.css +1226 -0
  435. package/package.json +61 -4
package/README.md CHANGED
@@ -1,3 +1,248 @@
1
- # Temporary Holding Version
1
+ # @vibefield/rosetta-room
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ rosetta's History room as a package: the projects, sessions and worktree
4
+ columns, the summary panels and charts, and the transcript with its folds,
5
+ behind injected ports. The room dials nothing. A host hands it a catalog, a
6
+ way to open one session's body, an asset source and, on a desktop, a host
7
+ port; each host writes its own adapters. rosetta's own app
8
+ (`clients/app/renderer/src/host`) is the reference host.
9
+
10
+ ```sh
11
+ npm install @vibefield/rosetta-room react@19 react-dom@19
12
+ ```
13
+
14
+ ```tsx
15
+ import { HistoryRoom } from "@vibefield/rosetta-room";
16
+ import "@vibefield/rosetta-room/styles/room.css"; // after the host's --vf-* tokens
17
+
18
+ <HistoryRoom catalog={catalog} sessions={sessions} assets={assets} host={host} />;
19
+ ```
20
+
21
+ `@vibefield/rosetta-room/fixtures` renders the room with no daemon at all:
22
+ `<HistoryRoom {...createDemoPorts()} />` (six projects, eleven sessions, a year
23
+ of figures, two transcripts with images and web lines, all relative to now).
24
+
25
+ ## The ports (`src/ports.ts`)
26
+
27
+ | Port | What the room asks | rosetta's app answers with |
28
+ |---|---|---|
29
+ | `CatalogPort` | `subscribeMeta` (runtimes, projects, every session row, live: one snapshot then mutations) · `status` → `CatalogStatus` · `projectStats(projectId, window)` → `ProjectStats` (per-day heat and per-session facts) · `usage` · `dayUsage` · `search(CatalogSearch)` · optional `onConnectionChange`, `unavailable` (the host's own words for why the index cannot answer), `boost` and `projectStatsBatch` (every listed project's figures in one ask; present, the room asks it once per refresh instead of `projectStats` per project) | its client's REST and `/ws/meta` (`catalogOver`) |
30
+ | `SessionPort` | `open(sessionId)` → a `SessionClient` bound to that session (its live subscription, child threads and team members each open their own; entries, report work, commands, plans, file targets, stored members), or a promise of one; `close(sessionId)` | the one client for every session; close is nothing |
31
+ | `AssetSource` | `imageAssetUrl(asset, variant)` → a URL, null, or a promise of either · `attachmentAssetUrl(asset)` → the attachment's address, for identity and can-open only | the daemon's own URLs |
32
+ | `HostPort` (optional) | `homeDir` · `platform` · `openInBrowser(name, bytes, browserId?)` · optional `browsers()` · `favicon(site)` · optional `worktree: { open, gitFacts, fileAction, ports }` | the Electron bridge (`hostPortOver`) |
33
+
34
+ - **The room opens a session at most once at a time and follows every `open`
35
+ with exactly one `close`**, when nothing in it reads that session any more.
36
+ A host that mints a credential per open mints one per session the reader is
37
+ looking at.
38
+ - **A `RosettaClient` is a `SessionClient`** (checked at compile time). A host
39
+ whose daemon wants a per-session credential hands a client that carries it.
40
+ - **An `<img src>` cannot carry a credential.** A host whose daemon wants one
41
+ fetches the bytes through a session's client and answers an object URL — a
42
+ promise while it fetches — and bounds and revokes what it made. The room asks
43
+ on every mount and every retry, so an evicted URL is asked for again, never
44
+ reused, and a source must not keep a failure. A null answer draws the
45
+ image's "could not load" face with Retry.
46
+ - **`boost` is optional** because a grant never opens a write: only a host
47
+ holding the daemon's bearer offers it. Without it the index keeps its order.
48
+ - **`browsers()`** returns installed browser ids, names and icon URLs. HTML
49
+ and SVG viewers show one launch icon per browser, refreshing when opened or
50
+ the window regains focus. The host owns executable discovery and launch;
51
+ the room sends back only an id and the exact displayed bytes. Hosts without
52
+ discovery retain their existing default-browser action.
53
+ - **Without a host** the room states what a browser tab is: no worktree guest,
54
+ a globe for every site icon, no "open in browser". With a host but no
55
+ `worktree`, the guest stays closed.
56
+ - **`worktree.ports`** is the engine's event stream: a generation starting or
57
+ failing, then its two transferred `MessagePort`s (tree and git). A host
58
+ replays what arrived before the room listened; the room is the sole
59
+ consumer.
60
+
61
+ ## What a host decides (`HistoryRoomProps`)
62
+
63
+ Its host inputs (below), and: `surface` (`"paper"`, the default, paints the room's own ground and plate;
64
+ `"host"` paints neither and turns the paper fades into frost over whatever the
65
+ host paints) · `portalContainer` (where the dialogs and the search sheet
66
+ portal; their sizes are percentages of what holds them) · `edgeInset`,
67
+ `scrollFoot`, `floatingFoot` · `onSelect` (the selected session's id, native id,
68
+ folder and the host's key when it gave one, on mount and on every change) · `storagePrefix` and `storage` ·
69
+ `initialSummaryTab` · `unavailable` and `consent` (the host's words and its
70
+ consent screen) · `emptyPrompt` (the empty transcript's sentence in the host's
71
+ words; absent, the room's own, below) · `search` (the room's own strip and
72
+ sheet, with the host owning the open state; absent, neither is drawn). The ref
73
+ handle offers `openAt({ sessionId, timelineId? })` and `stepMatch(delta)`.
74
+
75
+ **The search keys are the host's (RO-14).** The room binds no key of its own.
76
+ The host's window opens the sheet and walks the matches: rosetta's app binds
77
+ ⌘K (Ctrl K off a Mac) and `/` to the sheet, and ⌘G and ⌘⇧G to the matches. So
78
+ the host binds, and the room prints only the keys the host says it binds:
79
+
80
+ | The host passes | The launcher prints | The empty transcript says |
81
+ |---|---|---|
82
+ | `search`, no `shortcut` | the room's own label, ⌘K (Ctrl K off a Mac) | "Pick a session — or press ⌘K to search, which is the front door." |
83
+ | `search.shortcut: { label }` | `label`, as given | the same sentence with `label` |
84
+ | `search.shortcut: null` (it binds no key) | no legend | "Pick a session." |
85
+ | no `search` | no launcher | "Pick a session." |
86
+ | `emptyPrompt`, beside any row above | as that row says | the host's sentence |
87
+
88
+ `emptyPrompt` is a prop of the room, not of `search`, so a host that draws no
89
+ room search (VibeField, whose search is its own Peek) can still name its own
90
+ key there. A host that passes `search` binds ⌘G and ⌘⇧G (Ctrl G and Ctrl Shift
91
+ G off a Mac) to the handle's `stepMatch(1)` and `stepMatch(-1)`, because the
92
+ match stepper the sheet leaves in the transcript's head names those keys.
93
+
94
+ ## What a host may add (`RoomHostInputs`)
95
+
96
+ Beyond its ports, a host may hand the room its own colours, marks, sections,
97
+ acts, folders and filters (`src/host-inputs.ts`). The room DRAWS them in its
98
+ own vocabulary and never interprets them: a host key rides back out
99
+ untouched, a host mark is drawn where it is put, a host act is pressed. Every
100
+ one is optional, and with none of them the room is exactly what rosetta's app
101
+ shows — the reference host passes none. Ids are the room's own
102
+ (`ProjectRow.id`, `SessionRow.id`), as the host's catalog handed them in.
103
+ The callbacks are called while the room renders, so a host keeps them cheap.
104
+
105
+ - **`projectTint(projectId)`** — the project's colour, any CSS colour. Absent,
106
+ or null for a project: the room's own dealt tint, which is then the only
107
+ one the room stores.
108
+ - **`projectRow(projectId)`** → `{ marks?, line?, live? }` — a ledger row's
109
+ decorations: marks drawn at the start of its path line, a second line
110
+ under the path, and a live count (above zero, the time slot says "n live"
111
+ in the live ink). None is interactive: the row is one button.
112
+ - **`projectSections`** (①) and **`sessionSections(projectId)`** (②) →
113
+ `RoomSection[]` — the list in sections, drawn in the order given. A section
114
+ names its rows (`ids`, in the host's order, or `order: "room"` for the
115
+ room's), or names none and takes every row no other section names, in the
116
+ room's order (② with its day heads). A row named twice is drawn in the
117
+ first; when every section names its rows, the rest are not drawn, which is
118
+ how a host filters. `title` draws a head in the list's own break; `fold`
119
+ draws a foot section as one line (its words, its count, its act, such as
120
+ "Show older") that opens in place, and opens by itself when it holds the
121
+ selected row. ②'s head counts what its sections draw.
122
+ - **`sessionRow(session)`** → `{ hostKey?, id?, idTitle?, act?, reason? }` — a
123
+ session row's id slot drawn by the host (its mark and the folder, in the
124
+ id's face), its act (`RoomAct`: Resume, Jump to) or the reason where the
125
+ act would be, before the row's time; and the host's own key, which rides
126
+ the selection back out as `RoomSelection.hostKey`, untouched. A row with an
127
+ act is a box under one covering button (the selection, named as the row
128
+ always was) with the act above it, because a button cannot hold another;
129
+ pressing the act (or opening its rows) leaves the selection.
130
+ - **`projectActs(projectId, { folder })`** → `RoomAct[]` — ②'s head acts,
131
+ drawn as the head's own icon buttons after the room's (one may be
132
+ `primary`, on the go fill); `folder` is the folder ③ shows, by the host's
133
+ key (`folders`, below). **`projectCard(projectId)`** — a card under ②'s
134
+ head, above its list. **`sessionActs(session)`** → `{ acts?, reason? }` —
135
+ ④'s head, for the session it names: acts as pills before the activity act,
136
+ or the reason as a caption after the range.
137
+ - An act with a `menu` (`RoomMenu`: groups of rows, each with a mark, words,
138
+ a second line, an aside, a check, a step in) opens the room's popover rows
139
+ from it. They are drawn above the columns, in the room's root, anchored to
140
+ their control, flipped above it when there is more room there, and held
141
+ inside the room's box (no column clips them). Opened by a key they land on
142
+ the checked row, which wears the ring; opened by a pointer they take focus
143
+ with no ring until a key walks them. The arrow keys walk them, a choice or a
144
+ press outside or Escape closes them; past `filterAfter` rows a filter heads
145
+ them. They listen only while open (and to the window's resize and scroll,
146
+ to stay on their control).
147
+ - **`folders(projectId)`** → `RoomFolders` — ③'s head becomes a dropdown of
148
+ the host's folders, by group, each keyed by the host (two machines spell a
149
+ path alike, so the check goes by key, never by path), with its mark in
150
+ front of the name. ③ shows the reader's pick while the session stays, else
151
+ the folder `of(session)` names for the selected session, else `initial`
152
+ (the usual place), else the folder at the room's own root — and tells the
153
+ host which through `onShow(key)`; `projectActs` hears it as `folder`. A
154
+ folder with `elsewhere` is never opened: ③ draws the host's honest state
155
+ in its place. `caption` replaces git's caption while it is shown.
156
+ `WorktreeList` is untouched. A folder's `act` (H4: "Not part of this
157
+ project") sits beside its row in the list, pressed, never a menu; → from
158
+ the row reaches it, ← comes back, and the list closes after it.
159
+ - **`projectRow(projectId).act`** (H4) — an act at a ledger row's end,
160
+ before its time (pin, hide), or its rows. The row becomes the same box as
161
+ a session row with an act: one covering button (the selection), the act
162
+ above it.
163
+ - **`projectRename(projectId)`** → `{ onRename(name), label? }` (H4) — ②'s
164
+ head name is the control: pressed, it becomes a field holding the name.
165
+ Enter commits the trimmed, changed, non-empty name; Escape or leaving the
166
+ field cancels. A rejected `onRename` keeps the field open and says why
167
+ under it ("Could not rename — <the error's words>"). The head names the
168
+ project as the host's catalog last said, until it says otherwise.
169
+ - **`projectFilters`** (①) and **`sessionFilters(projectId)`** (②) →
170
+ `RoomFilter[]` — chips drawn as buttons in the room's chip pill, leading
171
+ the list's bar (① before the rank switch; ② gets a bar only when a project
172
+ has chips), each opening its `RoomMenu`. The host filters, through the
173
+ list's sections, and says what is chosen with the chip's words, `set` and
174
+ a checked row. The room's own search sheet keeps its native selects.
175
+ - **`repositoryUrl(projectId)`** — the address ②'s repository act opens.
176
+ Undefined: the room's own reading of `git_repo`; null: no act.
177
+
178
+ ## The reader (`TranscriptReader`)
179
+
180
+ One session's transcript, read-only, at a line: what a host shows before it
181
+ opens the room there (VibeField's Peek). It takes the room's ports and an
182
+ address, and draws the room's own document with nothing around it.
183
+
184
+ ```tsx
185
+ <TranscriptReader {...ports} at={{ sessionId, timelineId, query }} />
186
+ ```
187
+
188
+ - **It lands at `timelineId` and keeps the line marked**, and marks the words
189
+ of `query` in the prose (each word, or a phrase in quotes as one). The
190
+ address is read by value: a new session or line lands again, a re-render
191
+ with the same one does not.
192
+ - **It is read-only.** No head band and no acts — no session-work launchers,
193
+ no day menu, no "Latest" pill, no dialog (a long message shows in full) —
194
+ no thread navigation, no key bound, and nothing written back to a room. A
195
+ delegated thread is read inside its root, as the room opens it.
196
+ - **It asks only what reading needs:** one `subscribeMeta` while mounted, and
197
+ one `open`/`close` of the session it shows. No status, figures or search.
198
+ - **The mark's look is the host's.** Three tokens on any element around the
199
+ reader: `--ah-match` (the wash under a matched word), `--ah-match-weight`,
200
+ and `--ah-match-line` (the matched line's edge, a prompt panel's ring).
201
+ Unset, they are the room's own neutral match — the sheet's
202
+ `--vf-fill-hover` wash at 500, a `--vf-text-tertiary` edge — and never the
203
+ select hue the room's landing ring wears for a moment.
204
+
205
+ ## What the package never does
206
+
207
+ - **No fetch and no socket.** Every byte arrives through a port.
208
+ - **No storage outside the prefix.** Four names — `search.recent`,
209
+ `tintSeq.v1`, `siteIcons.v1`, `transcript.fold.v2` — under `storagePrefix`
210
+ (default `ah.`) in the host's `storage` (default `localStorage`; `null` keeps
211
+ nothing).
212
+ - **No window globals.** It reads and writes no custom property of `window`
213
+ and installs no message or key listener on the host's behalf. It reads
214
+ `matchMedia` and `devicePixelRatio`, listens to `focus` and
215
+ `visibilitychange` to refresh its clock, listens while one of its own
216
+ popovers is open, and re-measures its minimap on `resize`. External links
217
+ leave through the browser's own `target="_blank"` and `window.open`, which
218
+ the host's shell governs.
219
+ - **No page styles.** Every rule is scoped to the room's root (`.ah-frame`)
220
+ and to the layers it portals (`.ah-layer`), at the specificity it had; the
221
+ page's resets and a global reduced-motion floor are the host's.
222
+
223
+ ## Styles and tokens
224
+
225
+ The room reads the VibeField design kit's `--vf-*` tokens (the host defines
226
+ them) and brings its own: `--ah-*` (`--ah-plate`, `--ah-scroll-foot`,
227
+ `--ah-floating-foot`, `--ah-inset-*`, and the reader's match look
228
+ `--ah-match`, `--ah-match-weight`, `--ah-match-line`, read with neutral
229
+ fallbacks so a host sets them on any element around the room), `--tr-*`, and
230
+ the project tint band `--tint-l`/`--tint-c`. What a host adds is styled in
231
+ `styles/host-inputs.css`, whose every rule matches only an element drawn for
232
+ a host input. The root carries `data-ah-surface`, and
233
+ `data-ah-overlay` while one of its dialogs or the sheet is open, so a host can
234
+ stop its own chrome (a drag region, say) under it.
235
+
236
+ ## Building against it
237
+
238
+ The npm package ships ESM JavaScript, TypeScript declarations, and its stylesheets.
239
+ Its three exports are the room, fixtures, and `styles/room.css`. React and React DOM
240
+ are peers at `>=19 <20`; the host supplies one copy of each. Mille and Mille UI are
241
+ registry dependencies, so installing Rosetta needs no sibling checkout.
242
+
243
+ For development, run `npm ci` at the repository root, then `npm run build:packages`.
244
+ `npm run typecheck -w @vibefield/rosetta-room` checks the room under `strict`,
245
+ `exactOptionalPropertyTypes`, `noUncheckedIndexedAccess`, and `verbatimModuleSyntax`.
246
+ The workspace app aliases the room's source for live development and deduplicates
247
+ React. `npm run check:packages` verifies the packed exports, declarations, and CSS
248
+ in an independent consumer before release.
@@ -0,0 +1,98 @@
1
+ import type { ReactNode } from "react";
2
+ import type { RoomPorts } from "./ports.js";
3
+ import type { RoomHostInputs } from "./host-inputs.js";
4
+ import type { KeyValueStore } from "./lib/room-storage.js";
5
+ import type { SummaryTab } from "./room-context.js";
6
+ import type { SearchShortcut } from "./components/search/index.js";
7
+ /** The room's own search: the strip's launcher and the sheet it opens. A host
8
+ * that offers search its own way (VibeField's Peek) leaves this out, and the
9
+ * room then draws neither. */
10
+ export interface HistoryRoomSearch {
11
+ /** Whether the sheet is open. The host owns it, so its own keys can open it. */
12
+ readonly open: boolean;
13
+ readonly onOpenChange: (open: boolean) => void;
14
+ /** The query the room opens with (rosetta's app reads `?q=`). */
15
+ readonly initialQuery?: string | undefined;
16
+ /** Drawn at the strip's end, after the launcher. */
17
+ readonly accessory?: ReactNode;
18
+ /** The key the host binds to open the sheet, as the room prints it (the
19
+ * room binds none itself — `open` is the host's). Absent: the room's own
20
+ * label for ⌘K (Ctrl K off a Mac), the key rosetta's app binds. A label:
21
+ * that label, printed as given. null: the host binds no key, so the
22
+ * launcher prints no legend and the empty transcript names none. */
23
+ readonly shortcut?: SearchShortcut;
24
+ }
25
+ export interface HistoryRoomProps extends RoomPorts, RoomHostInputs {
26
+ /** Who paints beneath the room. `paper` (the default): the room paints its
27
+ * own ground and plate, as rosetta's app shows it. `host`: the host paints
28
+ * its own surface beneath; the room paints neither, and its fades become
29
+ * frost over whatever the host painted. */
30
+ readonly surface?: "paper" | "host" | undefined;
31
+ /** Where the room's dialogs and its sheet are portalled (the host's frame,
32
+ * so its overlays anchor there); the document's body when absent. */
33
+ readonly portalContainer?: HTMLElement | null | undefined;
34
+ /** Every name the room keeps in storage goes under this prefix: recent
35
+ * searches, dealt project tints, the site-icon setting, the fold. Default
36
+ * `ah.`, which is where rosetta's app has always kept them. */
37
+ readonly storagePrefix?: string | undefined;
38
+ /** The store those names live in: the browser's localStorage when absent;
39
+ * null keeps nothing across runs. */
40
+ readonly storage?: KeyValueStore | null | undefined;
41
+ readonly search?: HistoryRoomSearch | undefined;
42
+ /** The chart the project panel opens on. */
43
+ readonly initialSummaryTab?: SummaryTab | undefined;
44
+ /** The host's words under "rosettad is not answering" when the catalog
45
+ * itself has none — rosetta's app says where it looked and how to start one. */
46
+ readonly unavailable?: ReactNode;
47
+ /** What the room shows while the index waits for consent to read anything.
48
+ * Absent: the room says it is waiting. */
49
+ readonly consent?: ReactNode;
50
+ /** The empty transcript's sentence, in the host's words (a host whose own
51
+ * search has its own key names it here). Absent: the room's own sentence,
52
+ * which names a key only when the launcher prints one — "Pick a session."
53
+ * with no `search` or with `search.shortcut` null. */
54
+ readonly emptyPrompt?: ReactNode;
55
+ /** The selected session, or null — on mount and on every change. */
56
+ readonly onSelect?: ((selection: RoomSelection | null) => void) | undefined;
57
+ /** Edges kept clear inside the room's frame for the host's chrome. */
58
+ readonly edgeInset?: RoomInset | undefined;
59
+ /** Scrollable space after every list's last row (`--ah-scroll-foot`), and
60
+ * where floating controls rest (`--ah-floating-foot`): CSS lengths. */
61
+ readonly scrollFoot?: string | undefined;
62
+ readonly floatingFoot?: string | undefined;
63
+ }
64
+ /** The session the reader has selected, as a host acts on it (Resume). */
65
+ export interface RoomSelection {
66
+ readonly sessionId: string;
67
+ /** The agent's own id for the conversation: what a host resumes by. */
68
+ readonly nativeSessionId: string;
69
+ /** Where the session ran; null when the index does not know. */
70
+ readonly folder: string | null;
71
+ /** The host's own key for the session (`RoomSessionRow.hostKey`), passed
72
+ * through untouched. Absent when the host gives none. */
73
+ readonly hostKey?: string | undefined;
74
+ }
75
+ /** A place in the record: a session, and optionally one of its messages. */
76
+ export interface RoomTarget {
77
+ readonly sessionId: string;
78
+ readonly timelineId?: string | null | undefined;
79
+ }
80
+ /** The room's edges kept clear for the host's own chrome, in pixels. */
81
+ export type RoomInset = number | {
82
+ readonly top?: number | undefined;
83
+ readonly right?: number | undefined;
84
+ readonly bottom?: number | undefined;
85
+ readonly left?: number | undefined;
86
+ };
87
+ /** What a host may ask of a mounted room. */
88
+ export interface HistoryRoomHandle {
89
+ /** Walk the landed session's search matches. False when there is nothing to
90
+ * walk, so the host's key can fall through. */
91
+ stepMatch(delta: 1 | -1): boolean;
92
+ /** Open a session — its thread, in its project — and land on one of its
93
+ * messages when given. A session the index has not delivered yet is opened
94
+ * when it arrives; one it does not have is said so in a receipt. */
95
+ openAt(target: RoomTarget): void;
96
+ }
97
+ /** The room. A host hands it its ports; everything inside reads them from context. */
98
+ export declare const HistoryRoom: import("react").ForwardRefExoticComponent<HistoryRoomProps & import("react").RefAttributes<HistoryRoomHandle>>;