@vibefield/rosetta-room 0.0.0-stage → 0.1.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 (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
@@ -0,0 +1,78 @@
1
+ /** Calendar arithmetic in UTC on date keys, independent of DST and timezone. */
2
+ function shiftDay(key, count) {
3
+ const date = new Date(`${key}T12:00:00Z`);
4
+ date.setUTCDate(date.getUTCDate() + count);
5
+ return date.toISOString().slice(0, 10);
6
+ }
7
+ /** The full available history uses the same daily cells as the small calendar.
8
+ * Missing/future days never become measured zeroes or average denominators. */
9
+ export function createActivityDetails(data, today) {
10
+ const start = data.weeks[0]?.days[0]?.id ?? today;
11
+ const inRange = (key) => key >= start && key <= today;
12
+ let previousMonth = "";
13
+ let lastLabelledWeek = -4;
14
+ const calendar = {
15
+ weeks: data.weeks
16
+ .filter((week) => week.days.some((day) => inRange(day.id)))
17
+ .map((week, index) => {
18
+ const first = week.days.find((day) => inRange(day.id));
19
+ const month = first.id.slice(0, 7);
20
+ const label = month !== previousMonth && index - lastLabelledWeek >= 4
21
+ ? new Date(`${first.id}T12:00:00Z`).toLocaleDateString("en-US", { month: "short", timeZone: "UTC" }) : undefined;
22
+ if (label)
23
+ lastLabelledWeek = index;
24
+ previousMonth = month;
25
+ return {
26
+ id: week.id, label,
27
+ days: week.days.map((day) => ({
28
+ ...day,
29
+ value: inRange(day.id) && day.value !== null && Number.isFinite(day.value) && day.value >= 0
30
+ ? day.value : null,
31
+ })),
32
+ };
33
+ }),
34
+ };
35
+ const days = calendar.weeks.flatMap((week) => week.days).filter((day) => inRange(day.id));
36
+ const runs = [];
37
+ let total = 0;
38
+ let recordedDayCount = 0;
39
+ let activeDayCount = 0;
40
+ let streak = 0;
41
+ let longestStreak = 0;
42
+ let busiestDay = null;
43
+ let previousDay = null;
44
+ let runStart = "";
45
+ for (const day of days) {
46
+ if (previousDay !== null && shiftDay(previousDay, 1) !== day.id)
47
+ streak = 0;
48
+ previousDay = day.id;
49
+ if (day.value === null) {
50
+ streak = 0;
51
+ continue;
52
+ }
53
+ recordedDayCount++;
54
+ total += day.value;
55
+ if (day.value > 0) {
56
+ activeDayCount++;
57
+ if (streak === 0)
58
+ runStart = day.id;
59
+ else
60
+ runs.pop();
61
+ longestStreak = Math.max(longestStreak, ++streak);
62
+ runs.push({ start: runStart, end: day.id, length: streak });
63
+ if (busiestDay === null || day.value > busiestDay.value)
64
+ busiestDay = day;
65
+ }
66
+ else {
67
+ streak = 0;
68
+ }
69
+ }
70
+ return {
71
+ calendar, days, start, end: today,
72
+ total: recordedDayCount > 0 ? total : null,
73
+ recordedDayCount, activeDayCount, longestStreak, busiestDay,
74
+ runs,
75
+ bestRun: runs.reduce((best, run) => !best || run.length >= best.length ? run : best, null),
76
+ currentRun: runs.at(-1)?.end === today ? runs.at(-1) : null,
77
+ };
78
+ }
@@ -0,0 +1,32 @@
1
+ import type { SessionRow } from "@vibefield/rosetta-protocol";
2
+ /** A quiet interval rearms promotion. Its expiry never changes the order. */
3
+ export declare const ACTIVITY_QUIET_MS: number;
4
+ interface ActivityPosition {
5
+ readonly seenAt: number | null;
6
+ readonly rankAt: number | null;
7
+ }
8
+ interface SessionPosition extends ActivityPosition {
9
+ readonly projectId: string | null;
10
+ readonly parentId: string | null;
11
+ }
12
+ export interface ActivityOrder {
13
+ readonly sessions: ReadonlyMap<string, SessionPosition>;
14
+ readonly projects: ReadonlyMap<string | null, ActivityPosition>;
15
+ readonly bootstrapping: boolean;
16
+ }
17
+ export interface ActivityOrderOptions {
18
+ readonly now: number;
19
+ /** False for snapshots, reconnection, and indexing; those are baseline data. */
20
+ readonly live: boolean;
21
+ readonly bootstrapping: boolean;
22
+ }
23
+ /** Client-only navigation memory. Recorded activity is never rewritten.
24
+ * Observe every session, including children, so reparenting is not new work.
25
+ * Project progress is folded across roots before deciding whether it was quiet. */
26
+ export declare function advanceActivityOrder(previous: ActivityOrder | null, rows: readonly SessionRow[], options: ActivityOrderOptions): ActivityOrder;
27
+ /** Known timestamps precede unknowns; identity deterministically breaks ties. */
28
+ export declare function compareActivityRanks(a: number | null, b: number | null, aId: string, bId: string): number;
29
+ /** Local calendar day, rather than a 24-hour duration (including across DST). */
30
+ export declare function activityDay(at: number | null): number | null;
31
+ export declare function compareOrderedSessions(left: SessionRow, right: SessionRow, order: ActivityOrder): number;
32
+ export {};
@@ -0,0 +1,86 @@
1
+ import { sessionLastActive } from "./session-activity.js";
2
+ /** A quiet interval rearms promotion. Its expiry never changes the order. */
3
+ export const ACTIVITY_QUIET_MS = 5 * 60_000;
4
+ function latest(a, b) {
5
+ return a === null ? b : b === null ? a : Math.max(a, b);
6
+ }
7
+ function fresh(at, now) {
8
+ return at <= now && now - at < ACTIVITY_QUIET_MS;
9
+ }
10
+ function afterQuiet(at, previous) {
11
+ return previous === null || at - previous >= ACTIVITY_QUIET_MS;
12
+ }
13
+ /** Client-only navigation memory. Recorded activity is never rewritten.
14
+ * Observe every session, including children, so reparenting is not new work.
15
+ * Project progress is folded across roots before deciding whether it was quiet. */
16
+ export function advanceActivityOrder(previous, rows, options) {
17
+ const seed = previous === null || options.bootstrapping || previous.bootstrapping;
18
+ const live = options.live && !seed;
19
+ const sessions = new Map();
20
+ const projectActivity = new Map();
21
+ const advances = new Map();
22
+ for (const row of rows) {
23
+ const at = sessionLastActive(row);
24
+ const old = previous?.sessions.get(row.id);
25
+ const sameOwner = old === undefined ||
26
+ (old.projectId === row.project_id && old.parentId === row.parent_session_id);
27
+ const advanced = at !== null && (old?.seenAt == null || at > old.seenAt);
28
+ const promote = live && sameOwner && advanced && fresh(at, options.now) &&
29
+ afterQuiet(at, old?.seenAt ?? null);
30
+ sessions.set(row.id, {
31
+ projectId: row.project_id,
32
+ parentId: row.parent_session_id,
33
+ // A repair may retract activity. It must not rearm promotion on replay.
34
+ seenAt: seed ? at : latest(old?.seenAt ?? null, at),
35
+ rankAt: seed || old === undefined || old.rankAt === null || promote ? at : old.rankAt,
36
+ });
37
+ if (row.parent_session_id !== null)
38
+ continue;
39
+ projectActivity.set(row.project_id, latest(projectActivity.get(row.project_id) ?? null, at));
40
+ if (live && sameOwner && advanced) {
41
+ const events = advances.get(row.project_id) ?? [];
42
+ events.push(at);
43
+ advances.set(row.project_id, events);
44
+ }
45
+ }
46
+ const projects = new Map();
47
+ for (const [id, at] of projectActivity) {
48
+ const old = previous?.projects.get(id);
49
+ let rankAt = seed || old === undefined || old.rankAt === null ? at : old.rankAt;
50
+ let seenAt = seed ? at : old?.seenAt ?? null;
51
+ // Ascending order prevents coalesced progress from manufacturing a lull
52
+ // between a project's previous event and the newest event in this batch.
53
+ for (const event of (advances.get(id) ?? []).sort((a, b) => a - b)) {
54
+ if (fresh(event, options.now) && afterQuiet(event, seenAt))
55
+ rankAt = event;
56
+ seenAt = latest(seenAt, event);
57
+ }
58
+ projects.set(id, { seenAt: latest(seenAt, at), rankAt });
59
+ }
60
+ return { sessions, projects, bootstrapping: options.bootstrapping };
61
+ }
62
+ /** Known timestamps precede unknowns; identity deterministically breaks ties. */
63
+ export function compareActivityRanks(a, b, aId, bId) {
64
+ if (a === null && b !== null)
65
+ return 1;
66
+ if (b === null && a !== null)
67
+ return -1;
68
+ return (a !== null && b !== null ? b - a : 0) || aId.localeCompare(bId);
69
+ }
70
+ /** Local calendar day, rather than a 24-hour duration (including across DST). */
71
+ export function activityDay(at) {
72
+ if (at === null)
73
+ return null;
74
+ const date = new Date(at);
75
+ date.setHours(0, 0, 0, 0);
76
+ return Number.isFinite(date.getTime()) ? date.getTime() : null;
77
+ }
78
+ export function compareOrderedSessions(left, right, order) {
79
+ const aDay = activityDay(sessionLastActive(left));
80
+ const bDay = activityDay(sessionLastActive(right));
81
+ // Calendar groups remain truthful, including a conversation continuing
82
+ // across midnight. Within each day only a new activity period can promote.
83
+ if (aDay !== bDay)
84
+ return compareActivityRanks(aDay, bDay, left.id, right.id);
85
+ return compareActivityRanks(order.sessions.get(left.id)?.rankAt ?? null, order.sessions.get(right.id)?.rankAt ?? null, left.id, right.id);
86
+ }
@@ -0,0 +1,6 @@
1
+ export interface AgentMarkDef {
2
+ label: string;
3
+ /** Inner SVG markup for a 24×24 viewBox, fill=currentColor. */
4
+ path: string;
5
+ }
6
+ export declare const AGENT_PATHS: Record<string, AgentMarkDef>;
@@ -0,0 +1,19 @@
1
+ // The agent marks — @lobehub/icons-static-svg v1.94.0 monochrome variants,
2
+ // verbatim via protos/agent-history-proto. Rendered at currentColor on the
3
+ // row's own ramp: provider identity carries no hue (design record §4/§10.6).
4
+ export const AGENT_PATHS = {
5
+ claudecode: { label: "Claude Code", path: "<path clip-rule=\"evenodd\" d=\"M20.998 10.949H24v3.102h-3v3.028h-1.487V20H18v-2.921h-1.487V20H15v-2.921H9V20H7.488v-2.921H6V20H4.487v-2.921H3V14.05H0V10.95h3V5h17.998v5.949zM6 10.949h1.488V8.102H6v2.847zm10.51 0H18V8.102h-1.49v2.847z\"></path>" },
6
+ codex: { label: "Codex", path: "<path clip-rule=\"evenodd\" d=\"M8.086.457a6.105 6.105 0 013.046-.415c1.333.153 2.521.72 3.564 1.7a.117.117 0 00.107.029c1.408-.346 2.762-.224 4.061.366l.063.03.154.076c1.357.703 2.33 1.77 2.918 3.198.278.679.418 1.388.421 2.126a5.655 5.655 0 01-.18 1.631.167.167 0 00.04.155 5.982 5.982 0 011.578 2.891c.385 1.901-.01 3.615-1.183 5.14l-.182.22a6.063 6.063 0 01-2.934 1.851.162.162 0 00-.108.102c-.255.736-.511 1.364-.987 1.992-1.199 1.582-2.962 2.462-4.948 2.451-1.583-.008-2.986-.587-4.21-1.736a.145.145 0 00-.14-.032c-.518.167-1.04.191-1.604.185a5.924 5.924 0 01-2.595-.622 6.058 6.058 0 01-2.146-1.781c-.203-.269-.404-.522-.551-.821a7.74 7.74 0 01-.495-1.283 6.11 6.11 0 01-.017-3.064.166.166 0 00.008-.074.115.115 0 00-.037-.064 5.958 5.958 0 01-1.38-2.202 5.196 5.196 0 01-.333-1.589 6.915 6.915 0 01.188-2.132c.45-1.484 1.309-2.648 2.577-3.493.282-.188.55-.334.802-.438.286-.12.573-.22.861-.304a.129.129 0 00.087-.087A6.016 6.016 0 015.635 2.31C6.315 1.464 7.132.846 8.086.457zm-.804 7.85a.848.848 0 00-1.473.842l1.694 2.965-1.688 2.848a.849.849 0 001.46.864l1.94-3.272a.849.849 0 00.007-.854l-1.94-3.393zm5.446 6.24a.849.849 0 000 1.695h4.848a.849.849 0 000-1.696h-4.848z\"></path>" },
7
+ cursor: { label: "Cursor", path: "<path d=\"M22.106 5.68L12.5.135a.998.998 0 00-.998 0L1.893 5.68a.84.84 0 00-.419.726v11.186c0 .3.16.577.42.727l9.607 5.547a.999.999 0 00.998 0l9.608-5.547a.84.84 0 00.42-.727V6.407a.84.84 0 00-.42-.726zm-.603 1.176L12.228 22.92c-.063.108-.228.064-.228-.061V12.34a.59.59 0 00-.295-.51l-9.11-5.26c-.107-.062-.063-.228.062-.228h18.55c.264 0 .428.286.296.514z\"></path>" },
8
+ githubcopilot: { label: "GitHub Copilot", path: "<path d=\"M19.245 5.364c1.322 1.36 1.877 3.216 2.11 5.817.622 0 1.2.135 1.592.654l.73.964c.21.278.323.61.323.955v2.62c0 .339-.173.669-.453.868C20.239 19.602 16.157 21.5 12 21.5c-4.6 0-9.205-2.583-11.547-4.258-.28-.2-.452-.53-.453-.868v-2.62c0-.345.113-.679.321-.956l.73-.963c.392-.517.974-.654 1.593-.654l.029-.297c.25-2.446.81-4.213 2.082-5.52 2.461-2.54 5.71-2.851 7.146-2.864h.198c1.436.013 4.685.323 7.146 2.864zm-7.244 4.328c-.284 0-.613.016-.962.05-.123.447-.305.85-.57 1.108-1.05 1.023-2.316 1.18-2.994 1.18-.638 0-1.306-.13-1.851-.464-.516.165-1.012.403-1.044.996a65.882 65.882 0 00-.063 2.884l-.002.48c-.002.563-.005 1.126-.013 1.69.002.326.204.63.51.765 2.482 1.102 4.83 1.657 6.99 1.657 2.156 0 4.504-.555 6.985-1.657a.854.854 0 00.51-.766c.03-1.682.006-3.372-.076-5.053-.031-.596-.528-.83-1.046-.996-.546.333-1.212.464-1.85.464-.677 0-1.942-.157-2.993-1.18-.266-.258-.447-.661-.57-1.108-.32-.032-.64-.049-.96-.05zm-2.525 4.013c.539 0 .976.426.976.95v1.753c0 .525-.437.95-.976.95a.964.964 0 01-.976-.95v-1.752c0-.525.437-.951.976-.951zm5 0c.539 0 .976.426.976.95v1.753c0 .525-.437.95-.976.95a.964.964 0 01-.976-.95v-1.752c0-.525.437-.951.976-.951zM7.635 5.087c-1.05.102-1.935.438-2.385.906-.975 1.037-.765 3.668-.21 4.224.405.394 1.17.657 1.995.657h.09c.649-.013 1.785-.176 2.73-1.11.435-.41.705-1.433.675-2.47-.03-.834-.27-1.52-.63-1.813-.39-.336-1.275-.482-2.265-.394zm6.465.394c-.36.292-.6.98-.63 1.813-.03 1.037.24 2.06.675 2.47.968.957 2.136 1.104 2.776 1.11h.044c.825 0 1.59-.263 1.995-.657.555-.556.765-3.187-.21-4.224-.45-.468-1.335-.804-2.385-.906-.99-.088-1.875.058-2.265.394zM12 7.615c-.24 0-.525.015-.84.044.03.16.045.336.06.526l-.001.159a2.94 2.94 0 01-.014.25c.225-.022.425-.027.612-.028h.366c.187 0 .387.006.612.028-.015-.146-.015-.277-.015-.409.015-.19.03-.365.06-.526a9.29 9.29 0 00-.84-.044z\"></path>" },
9
+ geminicli: { label: "Gemini CLI", path: "<path d=\"M16.793 10.358v3.867L7.236 18.82v-2.8l7.751-3.728-7.75-3.728V5.763l9.556 4.595z\"></path><path clip-rule=\"evenodd\" d=\"M19.608 0A4.392 4.392 0 0124 4.392v15.216A4.392 4.392 0 0119.608 24H4.392A4.392 4.392 0 010 19.608V4.392A4.392 4.392 0 014.392 0h15.216zM4.26 1.444A2.816 2.816 0 001.444 4.26v15.48a2.816 2.816 0 002.816 2.816h15.48a2.816 2.816 0 002.816-2.816V4.26a2.816 2.816 0 00-2.816-2.816H4.26z\"></path>" },
10
+ windsurf: { label: "Windsurf", path: "<path clip-rule=\"evenodd\" d=\"M23.78 5.004h-.228a2.187 2.187 0 00-2.18 2.196v4.912c0 .98-.804 1.775-1.76 1.775a1.818 1.818 0 01-1.472-.773L13.168 5.95a2.197 2.197 0 00-1.81-.95c-1.134 0-2.154.972-2.154 2.173v4.94c0 .98-.797 1.775-1.76 1.775-.57 0-1.136-.289-1.472-.773L.408 5.098C.282 4.918 0 5.007 0 5.228v4.284c0 .216.066.426.188.604l5.475 7.889c.324.466.8.812 1.351.938 1.377.316 2.645-.754 2.645-2.117V11.89c0-.98.787-1.775 1.76-1.775h.002c.586 0 1.135.288 1.472.773l4.972 7.163a2.15 2.15 0 001.81.95c1.158 0 2.151-.973 2.151-2.173v-4.939c0-.98.787-1.775 1.76-1.775h.194c.122 0 .22-.1.22-.222V5.225a.221.221 0 00-.22-.222z\"></path>" },
11
+ amp: { label: "Amp", path: "<path d=\"M15.087 23.18L12.03 24l-2.097-7.823-5.738 5.738-2.251-2.251 5.718-5.719-7.769-2.082.82-3.057 11.294 3.08 3.08 11.295z\"></path><path d=\"M19.505 18.762l-3.057.82-2.564-9.573-9.572-2.564.819-3.057 11.295 3.079 3.08 11.295z\"></path><path d=\"M23.893 14.374l-3.057.82-2.565-9.572L8.7 3.057 9.52 0l11.295 3.08 3.079 11.294z\"></path>" },
12
+ cline: { label: "Cline", path: "<path d=\"M17.035 3.991c2.75 0 4.98 2.24 4.98 5.003v1.667l1.45 2.896a1.01 1.01 0 01-.002.909l-1.448 2.864v1.668c0 2.762-2.23 5.002-4.98 5.002H7.074c-2.751 0-4.98-2.24-4.98-5.002V17.33l-1.48-2.855a1.01 1.01 0 01-.003-.927l1.482-2.887V8.994c0-2.763 2.23-5.003 4.98-5.003h9.962zM8.265 9.6a2.274 2.274 0 00-2.274 2.274v4.042a2.274 2.274 0 004.547 0v-4.042A2.274 2.274 0 008.265 9.6zm7.326 0a2.274 2.274 0 00-2.274 2.274v4.042a2.274 2.274 0 104.548 0v-4.042A2.274 2.274 0 0015.59 9.6z\"></path><path d=\"M12.054 5.558a2.779 2.779 0 100-5.558 2.779 2.779 0 000 5.558z\"></path>" },
13
+ antigravity: { label: "Antigravity", path: "<path d=\"M21.751 22.607c1.34 1.005 3.35.335 1.508-1.508C17.73 15.74 18.904 1 12.037 1 5.17 1 6.342 15.74.815 21.1c-2.01 2.009.167 2.511 1.507 1.506 5.192-3.517 4.857-9.714 9.715-9.714 4.857 0 4.522 6.197 9.714 9.715z\"></path>" },
14
+ grok: { label: "Grok", path: "<path d=\"M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815\"></path>" },
15
+ hermesagent: { label: "Hermes Agent", path: "<path d=\"M5.938 12.835c.127-.039.285.02.373.143.028.038.036.092.046.14.003.014-.02.033-.04.05-.124-.098-.24-.194-.354-.291-.011-.01-.016-.027-.025-.042zM8.396 9.412c.195-.032.39-.06.588-.05a.54.54 0 01.148.026c.202.071.402.147.601.224.028.01.05.036.075.055l-.013.027a9.203 9.203 0 01-.26-.089c-.115-.038-.213-.077-.315-.098-.25-.05-.25-.046-.292-.014l.574.144c.275.139.55.276.823.417.042.022.09.057.107.098.026.06.063.076.117.072.066-.006.132-.017.213-.027l-.04.086c.051.08.142.02.216.064-.074.13-.247.09-.334.199l.061.074-.12.087c0 .106-.038.168-.306.243l.026.085-.196.042.07.124h-.25l-.007.137c-.081-.01-.161-.018-.244-.027l-.053.123c-.027-.008-.052-.011-.073-.023-.067-.038-.128-.056-.195.006-.019.017-.063.014-.093.008-.026-.006-.05-.029-.07-.042-.11.095-.11.095-.208.003-.057.046-.12.074-.186.011-.063.027-.123-.02-.178-.014-.07.007-.097-.035-.133-.07l-.13.033c-.013-.236-.194-.19-.34-.203.005-.072.05-.092.095-.094a.474.474 0 01.159.022c.164.05.32.12.496.138.203.021.405.029.601-.015.265-.059.52-.149.707-.365.049-.056.083-.127.117-.195.019-.038.02-.084-.02-.116a1.397 1.397 0 00-.382-.217c.024.12-.031.182-.115.221 0 .014-.004.025 0 .03.08.115.084.16-.007.267a1.39 1.39 0 01-.218.211.477.477 0 01-.641-.05 1.36 1.36 0 01-.133-.152c-.078-.107-.076-.108-.033-.236-.165-.08-.128-.226-.104-.364.008-.05.028-.096.049-.163-.04.014-.067.017-.087.032a.897.897 0 00-.316.357c-.007.016-.01.034-.02.047-.012.015-.034.038-.045.035-.02-.006-.037-.027-.05-.045-.008-.012-.007-.032-.012-.057h-.126l.053-.172a14.82 14.82 0 00-.039-.049l.11-.284c-.06.026-.091.044-.124.051-.03.007-.064 0-.095 0 0-.031-.01-.07.004-.092.149-.22.305-.428.593-.476z\"></path><path d=\"M8.06 10.788c-.003-.038-.004-.075.037-.062.016.006.034.048.028.067-.01.04-.038.032-.064-.005z\"></path><path clip-rule=\"evenodd\" d=\"M11.981.009c.226-.012.453-.011.679 0 .247.01.495.024.74.062.401.064.798.157 1.19.273.463.138.92.299 1.356.511a7.31 7.31 0 012.948 2.642c.292.469.536.963.739 1.479.219.556.446 1.11.623 1.683.204.654.329 1.326.458 1.997.097.504.182 1.01.29 1.511.156.722.329 1.44.494 2.16.186.812.4 1.615.63 2.415.102.355.193.713.282 1.072.11.436.202.876.254 1.323.031.278.066.557.073.837a7.56 7.56 0 01-.017.88c-.037.413-.1.818-.226 1.212a5.017 5.017 0 01-.915 1.649l-.13.156.018.023c.043-.023.088-.041.127-.068.2-.138.373-.307.531-.49.4-.46.721-.973.975-1.529a3.59 3.59 0 00.325-1.72c-.024-.424-.097-.834-.3-1.213-.013-.027-.015-.06-.03-.121.05.035.082.048.101.072.107.13.22.258.315.398.33.494.46 1.052.486 1.64a3.75 3.75 0 01-.47 1.97c-.36.655-.887 1.14-1.526 1.506-.193.111-.394.21-.595.308-.157.078-.248.211-.318.365a.522.522 0 00-.033.406.359.359 0 01.013.139c-.005.077-.077.155-.14.162-.054.006-.125-.043-.15-.116a1.206 1.206 0 01-.06-.233c-.04-.314-.155-.6-.308-.87a3.906 3.906 0 00-.73-.91 2.129 2.129 0 00-.897-.524 4.093 4.093 0 00-.692-.131c-.075-.008-.15-.04-.22.01.18.06.363.11.538.18.434.173.82.43 1.18.728.308.255.58.543.794.884.098.155.186.315.227.496.027.123.042.25.067.375.013.062-.002.109-.053.144-.047.033-.122.034-.163-.01a.455.455 0 01-.08-.14c-.03-.073-.038-.159-.078-.225a7.314 7.314 0 00-1.423-1.664c-.16-.137-.329-.26-.537-.323-.376-.114-.753-.203-1.15-.154-.213.025-.427.032-.64.053a1.6 1.6 0 00-.736.278 5.14 5.14 0 00-.834.72c-.329.342-.642.699-.955 1.055-.136.155-.264.319-.314.531a5.227 5.227 0 00-.012.051.096.096 0 01-.09.076h-.31c-.046 0-.082-.048-.072-.094.023-.108.045-.216.07-.324.075-.325.19-.635.368-.917.024-.039.04-.088.104-.08l.01.049.027.077c.28-.435.571-.834.996-1.135.283-.204.584-.378.89-.55a.196.196 0 00-.098-.002c-.162.043-.325.084-.485.134-.402.124-.764.33-1.11.566-.147.1-.298.193-.414.333a7.314 7.314 0 00-1.07 1.767.845.845 0 00-.04.12.075.075 0 01-.072.056h-.494c-.04 0-.062-.051-.036-.082.123-.14.246-.282.377-.415.275-.281.58-.532.777-.884.027-.048.063-.09.095-.135.238-.333.54-.607.818-.902.082-.086.175-.16.26-.24.029-.027.053-.057.079-.085l-.018-.025-.135.041c-.034.017-.07.031-.102.05-.248.144-.494.292-.743.433-.408.23-.825.439-1.209.711-.281.2-.591.358-.889.533-.02.012-.044.015-.08.028-.015-.135.143-.201.108-.336-.033.014-.064.02-.085.038-.111.096-.227.19-.328.296-.148.157-.284.325-.425.488-.125.143-.25.286-.373.431A.153.153 0 019.89 24H8.762a.316.316 0 00.016-.042c.028-.09.085-.172.083-.28-.091-.018-.162.001-.212.077a4.45 4.45 0 00-.136.215c-.01.016-.024.03-.042.03h-.093c-.019 0-.029-.022-.017-.037.071-.088.14-.178.209-.268.001-.002-.006-.012-.012-.024-.014.004-.03.006-.045.013-.176.09-.352.181-.527.274a.363.363 0 01-.168.042H5.202c-.026 0-.039-.036-.019-.053.21-.178.402-.374.558-.605.335-.496.538-1.047.667-1.629.004-.02-.003-.043-.006-.091-.037.048-.059.072-.076.1a1.943 1.943 0 01-.334.415c-.28.258-.59.448-.983.464-.297.012-.588 0-.865-.127-.46-.21-.722-.57-.794-1.072-.025-.17-.017-.171-.182-.219A3.513 3.513 0 011.97 20.6a2.286 2.286 0 01-.808-1.13 3.569 3.569 0 01-.16-1.245c.002-.034.016-.067.024-.1.032.023.046.043.05.066.033.153.059.308.096.46.086.355.257.664.516.92.258.256.571.419.91.532.358.118.717.138 1.07-.016a1.89 1.89 0 00.621-.452c.328-.348.533-.76.648-1.223.009-.034.005-.071.007-.11-.015.006-.026.006-.03.011-.031.05-.064.1-.093.152-.284.502-.679.887-1.196 1.135-.351.17-.718.255-1.11.159a1.607 1.607 0 01-.971-.64 2.006 2.006 0 01-.368-.924 2.903 2.903 0 01.02-.886c.05-.439.466-1.17.742-1.271-.02.063-.035.112-.053.16-.043.116-.097.227-.13.345a1.901 1.901 0 00-.05.82c.033.212.09.416.204.6.147.236.346.407.62.465.11.023.225.014.338.018a.576.576 0 00.386-.131c.164-.128.282-.292.366-.481.168-.375.24-.777.309-1.179.05-.296.093-.594.133-.893.039-.281.071-.563.104-.845.026-.232.048-.464.074-.696.024-.228.052-.455.076-.683.024-.227.047-.455.069-.683.013-.14.022-.28.034-.42l.037-.417c.022-.25.041-.5.065-.748.008-.082-.02-.132-.09-.177a2.46 2.46 0 01-.492-.418c-.1-.109-.188-.228-.282-.342-.035-.042-.056-.097-.116-.118a2.084 2.084 0 00.275.597c.06.092.131.176.196.265.063.086.182.115.234.226-.028.003-.046.01-.06.006a4.74 4.74 0 01-.22-.057 2.71 2.71 0 01-1.287-.819c-.435-.487-.656-1.076-.71-1.723a5.206 5.206 0 01.014-1.06c.072-.602.22-1.186.45-1.745.155-.376.338-.741.526-1.102.205-.393.466-.75.765-1.076.512-.559 1.104-1.024 1.726-1.448.717-.49 1.478-.898 2.277-1.233C8.244.828 8.767.632 9.31.494c.655-.166 1.31-.33 1.982-.415.229-.03.458-.058.688-.07zm-1.847 22.82c-.07.06-.147.111-.207.18-.238.27-.464.549-.668.869l-.044.108a.177.177 0 00.093-.057c.174-.19.351-.378.519-.574.104-.122.195-.255.288-.386.024-.034.03-.08.046-.12l-.027-.02zm1.65-3.695a5.51 5.51 0 00-.653.593l-.37.386a.963.963 0 01-.377.25 1.372 1.372 0 01-.467.09c-.044 0-.087.006-.151.012.028.058.043.097.064.131.15.242.301.482.45.724.136.22.276.438.399.666.068.125.105.267.156.404.077.027.14-.018.202-.048.29-.135.579-.274.867-.412.213-.101.437-.186.636-.31.347-.215.68-.455 1.018-.685.015-.01.026-.028.042-.046-.023-.019-.038-.037-.056-.044-.287-.111-.527-.3-.77-.482a5.319 5.319 0 01-.506-.42 1.757 1.757 0 01-.41-.653c-.019-.049-.045-.095-.075-.156zm-5.847.264c-.06.096-.097.194-.132.293a3.38 3.38 0 01-.555 1.01c-.2.25-.455.412-.762.493-.23.06-.464.076-.7.07-.048-.002-.097.002-.158.005.016.04.021.066.035.085.1.145.23.246.4.295.157.046.316.034.498.023.181-.037.343-.115.485-.234.238-.199.402-.454.536-.732.175-.363.264-.751.342-1.144.01-.053.008-.11.011-.164zm14.945-4.586c.008.029.016.057.027.107.024.155.051.31.072.464.03.219.067.437.078.657.017.344.027.689-.014 1.033-.037.315-.063.633-.116.946a6.153 6.153 0 01-.46 1.518c-.008.018-.01.039-.02.082.047-.03.077-.042.098-.064.085-.083.17-.167.248-.255.271-.305.458-.66.596-1.043.18-.498.228-1.011.145-1.531-.103-.65-.33-1.263-.597-1.881a9.055 9.055 0 00-.024-.055l-.033.022zM5.797 8.29a.26.26 0 00.018.153c.124.251.25.501.379.75.025.049.066.09.03.163-.284.06-.578.119-.88.255.059.038.097.06.132.087.042.032.112.058.09.12-.01.033-.075.048-.117.072.017.01.043.021.067.036.166.102.33.207.447.368.138.192.229.404.188.644-.079.469-.306.85-.69 1.132-.054.04-.106.083-.161.122a.243.243 0 00-.103.245.77.77 0 00.055.195c.083.196.22.35.375.492.083.076.159.164.222.257a.37.37 0 01.025.377c-.023.05-.05.099-.076.148-.03.06-.028.111.022.162.041.042.08.089.112.138.038.058.078.079.147.05a.486.486 0 01.333-.006c.16.046.302.126.444.21.13.077.264.149.4.219.067.035.14.05.219.026.071-.022.124.01.145.076.02.064-.003.108-.074.139-.07.03-.137.063-.209.088-.1.035-.201.073-.314.077-.013-.107.11-.088.127-.159-.206-.126-.643-.145-.801-.034.063.112.035.21-.096.313-.13-.1-.025-.202.002-.3a.209.209 0 00-.249.17c-.015.101.067.216.178.224.108.007.218-.005.326-.012.06-.005.12-.027.199 0-.103.123-.248.127-.357.19.002.05.07.086.019.131-.053.048-.095-.001-.132-.03-.08-.063-.16-.126-.231-.197a.474.474 0 01-.157-.311.52.52 0 00-.043-.172c-.032-.074-.032-.137.033-.19-.018-.03-.028-.053-.045-.072a1.222 1.222 0 01-.196-.369c-.053-.137-.046-.264.048-.381.024-.03.05-.06.064-.095a.664.664 0 00.047-.168c.017-.165-.064-.287-.182-.387-.186-.156-.36-.322-.46-.551-.005-.011-.024-.017-.037-.026-.011.017-.024.027-.025.038-.019.185-.045.37-.052.557-.014.377.058.743.162 1.104.118.41.289.798.488 1.173.267.502.537 1.002.812 1.5.055.098.13.189.208.27.198.202.452.272.724.273.202 0 .404-.006.605-.026.295-.03.59-.073.884-.113.183-.025.365-.057.548-.08.21-.026.38.073.522.21.16.156.305.327.447.5.22.265.397.56.554.867.05.098.07.1.147.03.13-.121.26-.242.394-.36.067-.059.088-.12.067-.213a3.535 3.535 0 01-.085-.796c.002-.157.006-.314.018-.471.015-.224.03-.45.06-.672a59.114 59.114 0 01.362-2.298c.087-.493.182-.984.268-1.477.06-.347.118-.694.162-1.043.034-.273.055-.55.063-.825.011-.332.003-.665.002-.998 0-.077.004-.155-.01-.23-.028-.142-.01-.155-.162-.19a5.826 5.826 0 00-.607-.107c-.146-.018-.207-.053-.221-.19-.006-.049-.025-.098-.041-.146-.009-.025-.024-.048-.046-.09l-.025.264c-.009.096-.029.116-.127.115-.055 0-.11-.008-.164-.008-.476 0-.952-.008-1.426.032-.095.008-.173-.015-.226-.103-.04-.066-.088-.126-.134-.186-.063-.084-.086-.093-.182-.06-.195.068-.388.138-.582.21a2.71 2.71 0 00-.675.394.986.986 0 01-.323.168c-.033.01-.07.008-.127.013.02-.066.024-.114.047-.15.064-.105.135-.205.205-.306.023-.033.049-.063.073-.095l-.015-.023-.201.037c-.146.04-.296.07-.437.122-.148.053-.266.023-.386-.072a3.623 3.623 0 01-.733-.786l-.093-.132zm8.592 8.963l-.147.09c-.22.134-.44.266-.659.402-.093.058-.184.12-.27.188-.085.07-.124.161-.072.272.047.1.093.2.147.294.047.08.124.138.213.147.11.01.228.012.336-.012.217-.05.372-.205.528-.357a.291.291 0 00.087-.308c-.046-.18-.079-.365-.118-.547-.011-.052-.027-.103-.045-.169zm-.257-2.409c-.12.291-.205.597-.325.91-.151.433-.294.87-.435 1.323.036-.01.054-.01.067-.018.261-.16.522-.324.785-.484.054-.033.071-.078.065-.138-.012-.13-.024-.262-.034-.393l-.068-.886c-.008-.103-.02-.206-.029-.31-.009 0-.017-.002-.026-.004zm3.081-8.13l.099.285c.08.231.159.463.24.714l.58 1.952c.187.63.372 1.262.558 1.893.114.382.235.762.343 1.146.072.257.126.519.186.799.044.206.087.413.127.64.034.106.023.226.077.325l.025-.006-.068-.362c-.038-.206-.077-.412-.113-.638-.015-.07-.029-.141-.046-.211-.095-.396-.177-.796-.29-1.187-.196-.685-.413-1.364-.618-2.046-.165-.549-.322-1.1-.488-1.648-.069-.227-.15-.45-.226-.695l-.117-.336c-.037-.107-.075-.216-.115-.322-.04-.106-.084-.21-.127-.314a7.558 7.558 0 01-.027.01zM6.225 14.304c-.063-.001-.115.014-.134.083a.35.35 0 00.41.012 4.533 4.533 0 00-.276-.095zM5.23 11.98c-.026-.027-.057-.048-.075.002-.012.032-.007.07-.01.113.082-.037.082-.037.085-.115zm.062-1.189a.135.135 0 00-.088.056.197.197 0 00-.025.11c.005.152.01.306.026.457a.751.751 0 00.066.218c.061.136.157.167.288.101.055-.027.06-.054.025-.11a4.52 4.52 0 01-.129-.211c-.015-.068-.066-.131-.033-.207.04-.09-.076-.116-.074-.19V10.874c-.003-.038-.006-.087-.056-.083zm-.017-.968a.867.867 0 00-.467.127c-.076.045-.084.07-.05.158.034.087.07.173.115.254.064.117.09.125.21.077a.657.657 0 01.336-.053c.202.022.357.136.504.264l.092.077c.007-.006.014-.013.022-.018-.019-.105-.035-.226-.149-.264-.157-.053-.324-.075-.508-.117l-.24-.005c.24-.169.452-.044.687.009-.063-.115-.153-.147-.23-.193-.082-.05-.17-.092-.25-.144-.06-.037-.12-.08-.072-.172zm10.233.325c-.23-.01-.427.08-.608.211-.034.026-.06.065-.105.117.087.026.15.046.232.065.044-.015.088-.03.13-.046.306-.114.61-.115.904.031.126.063.237.04.366-.005-.02-.031-.03-.054-.045-.071a.986.986 0 00-.448-.273c-.14-.044-.284-.024-.426-.03zM7.99 6.483a.308.308 0 00.002.133c.08.321.156.643.242.962.104.387.27.75.456 1.103.02.037.061.08.098.087a.404.404 0 00.253-.051l-.472-.84c-.23-.448-.405-.92-.579-1.394zM10.397.497c-.2-.008-.405.004-.603.034-.236.035-.47.087-.7.152-.287.08-.569.18-.852.273-.04.013-.074.038-.11.058.028.014.05.018.07.014.287-.068.58-.085.873-.09.134-.002.269.009.402.025.19.024.382.048.57.09.456.104.874.3 1.265.556.464.306.888.66 1.257 1.078.205.232.395.475.56.739.17.274.315.561.449.856.273.601.456 1.232.6 1.876.04.173.07.348.1.524.017.104.065.167.17.19.122.028.2.105.22.251-.003.102-.06.174-.129.24a1.065 1.065 0 00-.268.358.164.164 0 00.083-.039c.08-.086.162-.172.235-.265a.56.56 0 00.13-.333c.009-.05.022-.1.024-.15.007-.124-.017-.15-.143-.168-.025-.004-.049-.014-.073-.015-.082-.007-.125-.063-.137-.131-.033-.198-.004-.355.247-.408.086-.018.174-.03.26-.042.158-.023.315-.053.473-.067.14-.012.19.033.226.167.008.029.018.057.021.087.019.179-.008.225-.141.288-.027.013-.055.024-.078.042a.148.148 0 00-.051.067c-.039.144.073.382.206.445l.673.32c.023.011.05.015.075.023l.018-.026c-.015-.008-.032-.013-.044-.024a2.27 2.27 0 00-.544-.32 4.898 4.898 0 00-.173-.075.203.203 0 01-.126-.191c-.003-.085.045-.154.128-.187l.059-.025c.099-.044.118-.076.112-.187a.384.384 0 00-.008-.063c-.067-.294-.123-.59-.205-.88a9.478 9.478 0 00-.826-2.036 7.465 7.465 0 00-1.39-1.805 4.536 4.536 0 00-1.177-.824 3.656 3.656 0 00-1.016-.328 6.155 6.155 0 00-.712-.074zm6.719 5.955c.01.014.018.028.038.034l-.022-.044-.016.01zM4.103 3.917a.062.062 0 01-.03.012.455.455 0 01-.04.039c-.01.01-.02.02-.045.04l-.363.354c-.088.085-.17.178-.266.253-.284.22-.425.53-.544.855a.132.132 0 00-.007.071c.013.055.033.108.052.168l.074.026c-.017.056-.03.105-.047.152-.058.164-.118.327-.175.491-.005.015.008.036.019.077.08-.175.158-.33.225-.489.228-.544.484-1.074.819-1.561.09-.133.182-.266.283-.401.004-.006.007-.013.022-.03.001-.016.003-.032.015-.04l.008-.017zm12.976 2.408a.023.023 0 01.009.019.073.073 0 00-.006.01.188.188 0 00.007.02l.018.022c.002-.007.007-.016.005-.021-.003-.01-.012-.018-.02-.038a1.331 1.331 0 01-.013-.012zM4.199 4.48c-.003.004-.008.008-.027.014-.005.013-.011.025-.031.047a2.085 2.085 0 01-.124.167c-.048.07-.116.055-.181.041-.134-.028-.228.016-.287.143-.089.187-.187.37-.273.56-.049.108-.11.216-.118.36.081.003.154.007.228.008h.228a2.563 2.563 0 01-.079.264c-.01.052-.022.103-.033.155l.02.004c.018-.046.037-.092.067-.153.066-.142.13-.285.2-.426.02-.04.034-.1.116-.092 0 .043.004.084 0 .124-.005.045-.017.09-.028.143.141.043.086.174.115.269.102-.022.104-.195.248-.144v.205l.017.002.439-1.059c-.13 0-.246-.02-.358.033-.024.011-.058-.001-.108-.004.075-.15.139-.278.211-.417a.128.128 0 01.025-.036c0-.015-.001-.03.008-.038l.006-.02c-.005.006-.01.011-.028.017-.004.012-.009.024-.026.045a.085.085 0 01-.032.033c-.123.157-.09.164-.258.106-.079-.027-.078-.028-.047-.144.028-.046.056-.093.098-.15 0-.016-.001-.032.007-.042L4.2 4.48zm2.073-.67c-.003.006-.007.011-.027.016-.094.125-.194.246-.28.377-.155.238-.301.481-.451.723-.14.224-.345.368-.575.481-.017.008-.04.006-.079.011.012-.059.016-.109.033-.153a6.076 6.076 0 01.229-.518l-.007-.02a.138.138 0 01-.035.025c-.028.05-.055.1-.093.164-.26.424-.443.817-.442.95.024.004.048.011.073.013.177.013.188.007.26-.165.03-.07.077-.12.147-.15l.175-.07c.044-.018.085-.057.146-.032.003.05-.01.11.014.145.042.062.044.125.047.193.002.049.017.098.026.147.029-.034.039-.065.05-.097.142-.39.277-.782.428-1.17.1-.256.22-.504.33-.756.013-.03.013-.067.03-.092V3.81zm3.987-.34c0 .045.01.084.021.123.042.16.094.318.124.48.024.133.023.27.028.406 0 .033-.019.067-.032.11-.094-.058-.047-.158-.106-.215h-.125c-.015.072-.01.152-.046.2-.066.085-.155.154-.236.227-.043.038-.078.018-.103-.025l-.046-.087c-.065.035-.117.069-.172.093-.116.051-.235.095-.35.147-.085.038-.09.053-.07.147.014.075.034.148.047.223.013.072.05.109.123.124.233.05.462.115.657.265.058-.102.058-.102.168-.151.03-.014.06-.03.092-.042.08-.03.115-.017.15.06.023.048.041.098.066.158.06-.14-.042-.267.017-.416.157.18.24.39.375.567a.235.235 0 00.022-.098c.002-.124 0-.247.002-.371 0-.034.013-.067.02-.1l.032-.003c.11.155.13.354.226.52a3.036 3.036 0 00-.01-.392c-.004-.045 0-.074.05-.088.08.036.116.14.215.158-.03-.275-.423-1.137-.798-1.635-.114-.127-.2-.28-.34-.386zm-2.667.696c-.019.034-.03.05-.037.067-.061.185-.125.37-.18.556-.031.105-.087.169-.195.19-.09.019-.178.052-.268.073-.038.009-.089.015-.118-.003-.024-.016-.025-.069-.036-.106-.064.076-.082.087-.17.047-.133-.062-.262-.135-.393-.201-.048-.025-.093-.063-.17-.03-.043.12-.091.25-.137.382-.099.28-.087.242.095.453.046.048.102.03.154.023.054-.009.106-.03.16-.036.13-.013.26-.08.367-.015.204-.064.387-.122.571-.178.05-.015.089.005.114.054.022.042.034.093.082.121.038-.056-.013-.128.063-.178l.14.241-.042-1.46zm.278.358c-.096-.01-.107.01-.11.108-.002.038-.003.078.002.115.03.2.099.386.174.57.002.006.012.01.022.015l.078-.05c.052.036.081.088.153.088.205-.002.41.014.616.012.099-.001.158.042.205.12.018.03.024.077.088.066l-.08-.394c-.05-.195-.085-.395-.172-.589-.057.057-.114.068-.18.046a.72.72 0 00-.135-.028c-.22-.028-.44-.059-.66-.08zm10.254-1.727c.089.163.155.316.139.491-.016.168.026.342-.044.516-.047-.033-.088-.082-.112-.075-.117.035-.164-.057-.227-.115a4.772 4.772 0 01-.286-.29l-.104-.113a4.856 4.856 0 01-.023.019c.035.046.07.093.11.156.04.064.084.127.122.193.034.058.065.118.031.205-.082-.01-.164-.019-.246-.032-.06-.01-.101 0-.124.07-.031.098-.037.096-.15.09.02.042.036.08.057.116.041.074.03.138-.03.196-.06.06-.118.122-.178.181a.175.175 0 01-.185.046c-.222-.061-.447-.113-.67-.174-.032-.009-.063-.04-.086-.068-.03-.04-.052-.087-.08-.13-.044-.07-.09-.138-.136-.207a.18.18 0 00-.014.105c.012.127.03.253.035.38.005.1-.024.12-.121.104-.104-.017-.206-.04-.31-.058-.064-.012-.131-.028-.202.03l.081.208c.09 0 .166-.01.237.002a.819.819 0 01.458.251c.078.083.154.168.241.26l.018-.005c-.004-.006-.008-.013-.01-.04.014-.056-.062-.118.018-.178.031.03.064.057.088.09.058.078.111.159.169.257l.089.141.024-.013a2093.819 2093.819 0 01-.427-.934c.055.007.083.007.108.016.193.07.385.142.577.216.074.028.147.06.219.094.062.028.112.018.157-.033.05-.056.102-.112.154-.167.05-.051.095-.046.132.014.016.025.026.053.04.08.071.138.143.277.217.433l.159.308.025-.011c-.044-.106-.07-.218-.138-.334-.057-.182-.168-.346-.206-.545.136.034.362.326.567.732l.057.074.018-.011a1.563 1.563 0 01-.052-.127c-.046-.145-.097-.29-.136-.436-.022-.083-.036-.173.022-.26l.109.058-.026-.207.027-.016c.022.02.05.036.065.06.073.108.143.22.215.33.01.016.029.029.043.043-.036-.217-.2-.38-.229-.626l.155.112c.014-.166.012-.319.042-.465.032-.158-.023-.297-.063-.445.024.004.036.006.055.025.092.124.183.249.277.371.02.027.05.047.069.087l.04.063.019-.015a.293.293 0 01-.053-.082 27.922 27.922 0 01-.332-.49c-.221-.311-.363-.467-.485-.521zm-6.57.327c-.003.161.092.275.069.415l-.368.087c.09.139.032.237-.052.331-.05.057-.092.122-.143.178-.037.04-.046.078-.018.126l.16.275c.029.048.072.066.128.064.076-.003.152 0 .228-.001.116-.003.216.022.275.137.006.014.02.024.044.052.004-.059-.003-.098.01-.13.016-.04.04-.099.072-.108.084-.023.173-.024.26-.03.013-.001.027.018.04.029l.071.065c.019-.11-.082-.198-.024-.31l.126.04c-.026-.123-.07-.245-.071-.366 0-.123.051-.243.115-.36.107.062.16.156.234.253.183.265.36.533.494.834.165-.078.27.068.407.088-.003-.106-.133-.441-.197-.492a.142.142 0 00-.102-.028c-.06.011-.119.039-.191.063-.025-.039-.056-.078-.077-.122a3.936 3.936 0 00-.473-.783c-.076-.094-.16-.182-.228-.26l-.391.285c-.049.035-.094.03-.132-.017l-.169-.207c-.025-.03-.053-.059-.097-.108z\"></path>" },
16
+ kimi: { label: "Kimi", path: "<path d=\"M21.846 0a1.923 1.923 0 110 3.846H20.15a.226.226 0 01-.227-.226V1.923C19.923.861 20.784 0 21.846 0z\"></path><path d=\"M11.065 11.199l7.257-7.2c.137-.136.06-.41-.116-.41H14.3a.164.164 0 00-.117.051l-7.82 7.756c-.122.12-.302.013-.302-.179V3.82c0-.127-.083-.23-.185-.23H3.186c-.103 0-.186.103-.186.23V19.77c0 .128.083.23.186.23h2.69c.103 0 .186-.102.186-.23v-3.25c0-.069.025-.135.069-.178l2.424-2.406a.158.158 0 01.205-.023l6.484 4.772a7.677 7.677 0 003.453 1.283c.108.012.2-.095.2-.23v-3.06c0-.117-.07-.212-.164-.227a5.028 5.028 0 01-2.027-.807l-5.613-4.064c-.117-.078-.132-.279-.028-.381z\"></path>" },
17
+ opencode: { label: "opencode", path: "<path d=\"M16 6H8v12h8V6zm4 16H4V2h16v20z\"></path>" },
18
+ pi: { label: "Pi", path: "<path clip-rule=\"evenodd\" d=\"M1 1h16.5v11H12v5.5H6.5V23H1V1zm5.5 5.5V12H12V6.5H6.5z\"></path><path d=\"M17.5 12H23v11h-5.5V12z\"></path>" },
19
+ };
@@ -0,0 +1,15 @@
1
+ export declare function markIdForKind(kind: string): string | null;
2
+ export declare function agentLabel(kind: string): string;
3
+ export declare function AgentMark({ kind, opacity, note, }: {
4
+ kind: string;
5
+ opacity?: number;
6
+ note?: string;
7
+ }): import("react").JSX.Element;
8
+ export interface AgentShare {
9
+ kind: string;
10
+ pct: number;
11
+ }
12
+ export declare function AgentBadges({ shares, cap }: {
13
+ shares: readonly AgentShare[];
14
+ cap?: number;
15
+ }): import("react").JSX.Element;
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // Solid marks beside monoline glyphs is deliberate: a brand mark is an
3
+ // identity and a category glyph is a type, and they should not read as one
4
+ // vocabulary. Ordered by share, opacity-ranked against the row's lead so a
5
+ // minor contributor never reads as disabled.
6
+ import { AGENT_PATHS } from "./agent-paths.js";
7
+ /** rosetta runtime kinds → bundled brand marks. */
8
+ const KIND_TO_MARK = {
9
+ antigravity: "antigravity",
10
+ "claude-code": "claudecode",
11
+ codex: "codex",
12
+ grok: "grok",
13
+ hermes: "hermesagent",
14
+ "kimi-code": "kimi",
15
+ opencode: "opencode",
16
+ pi: "pi",
17
+ cursor: "cursor",
18
+ "gemini-cli": "geminicli",
19
+ "github-copilot": "githubcopilot",
20
+ copilot: "githubcopilot",
21
+ windsurf: "windsurf",
22
+ amp: "amp",
23
+ cline: "cline",
24
+ };
25
+ export function markIdForKind(kind) {
26
+ return KIND_TO_MARK[kind] ?? null;
27
+ }
28
+ export function agentLabel(kind) {
29
+ const id = markIdForKind(kind);
30
+ if (id)
31
+ return AGENT_PATHS[id].label;
32
+ return (kind
33
+ .split(/[-_]/)
34
+ .filter(Boolean)
35
+ .map((word) => word[0].toUpperCase() + word.slice(1))
36
+ .join(" "));
37
+ }
38
+ function initials(kind) {
39
+ const words = agentLabel(kind).split(/\s+/).filter(Boolean);
40
+ return (words.length > 1 ? `${words[0][0]}${words.at(-1)?.[0] ?? ""}` : words[0]?.slice(0, 2))
41
+ .toUpperCase();
42
+ }
43
+ export function AgentMark({ kind, opacity = 1, note, }) {
44
+ const id = markIdForKind(kind);
45
+ const label = agentLabel(kind);
46
+ const name = note ? `${label} · ${note}` : label;
47
+ if (!id) {
48
+ return (_jsx("span", { className: "ah-agent ah-agent--generic", role: "img", style: { opacity }, "aria-label": name, title: name, children: initials(kind) }));
49
+ }
50
+ const def = AGENT_PATHS[id];
51
+ return (_jsx("span", { className: "ah-agent", role: "img", style: { opacity }, "aria-label": name, title: name, children: _jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", fillRule: "evenodd", "aria-hidden": "true", dangerouslySetInnerHTML: { __html: def.path } }) }));
52
+ }
53
+ export function AgentBadges({ shares, cap = 3 }) {
54
+ if (shares.length === 0)
55
+ return _jsx("span", { className: "ah-agents" });
56
+ const shown = shares.slice(0, cap);
57
+ const extra = shares.length - shown.length;
58
+ const lead = shown[0].pct || 1;
59
+ return (_jsxs("span", { className: "ah-agents", children: [shown.map((s) => (_jsx(AgentMark, { kind: s.kind, opacity: 0.34 + 0.3 * (s.pct / lead), note: `${s.pct}% of this project's sessions` }, s.kind))), extra > 0 ? _jsxs("span", { className: "ah-more", children: ["+", extra] }) : null] }));
60
+ }
@@ -0,0 +1,3 @@
1
+ import type { StatusResponse } from "@vibefield/rosetta-protocol";
2
+ import type { CatalogStatus } from "../ports.js";
3
+ export declare function catalogStatusOf(status: StatusResponse): CatalogStatus;
@@ -0,0 +1,10 @@
1
+ export function catalogStatusOf(status) {
2
+ return {
3
+ canonicalReady: status.canonical_ready,
4
+ searchReadiness: status.search.readiness,
5
+ searchProgress: status.search.progress ?? null,
6
+ ingest: status.daemon?.ingest ?? null,
7
+ startedAt: status.daemon?.started_at ?? null,
8
+ uptimeMs: status.daemon?.uptime_ms ?? 0,
9
+ };
10
+ }
@@ -0,0 +1,14 @@
1
+ import type { UsageResponse } from "@vibefield/rosetta-protocol";
2
+ import type { CalendarHeatmapData, StreamgraphData } from "../components/charts/index.js";
3
+ export interface ActivityStats {
4
+ readonly activeDayCount: number;
5
+ readonly currentStreakLength: number;
6
+ readonly longestStreakLength: number;
7
+ }
8
+ /** Converts the view model's dense daily series into heatmap columns. */
9
+ export declare function createCalendarHeatmapData(dailyTokenValues: readonly number[], gridStartTimestamp: number): CalendarHeatmapData;
10
+ export declare function calculateActivityStats(dailyTokenValues: readonly number[], currentDayIndex: number): ActivityStats;
11
+ /** Aggregates protocol usage rows into aligned, presentation-ready layers. */
12
+ export declare function createModelUsageStreamgraphData(usage: UsageResponse, currentTimestamp: number, { groupOthers }?: {
13
+ readonly groupOthers?: boolean;
14
+ }): StreamgraphData;
@@ -0,0 +1,151 @@
1
+ import { createModelColors, formatModelLabel } from "./model-labels.js";
2
+ import { ACTIVITY_HEATMAP_WEEK_COUNT, getCalendarDayKey } from "./model.js";
3
+ const DAY_IN_MS = 86_400_000;
4
+ const STREAMGRAPH_DAY_COUNT = 30;
5
+ const MAX_VISIBLE_MODEL_SERIES = 3;
6
+ const MONTH_NAMES = [
7
+ "Jan",
8
+ "Feb",
9
+ "Mar",
10
+ "Apr",
11
+ "May",
12
+ "Jun",
13
+ "Jul",
14
+ "Aug",
15
+ "Sep",
16
+ "Oct",
17
+ "Nov",
18
+ "Dec",
19
+ ];
20
+ function finiteMagnitude(value) {
21
+ if (value === undefined || !Number.isFinite(value) || value < 0)
22
+ return null;
23
+ return value;
24
+ }
25
+ function tokenCountLabel(value) {
26
+ return `${value.toLocaleString()} ${value === 1 ? "token" : "tokens"}`;
27
+ }
28
+ function parseCalendarDayKey(key) {
29
+ const [year, month, day] = key.split("-").map(Number);
30
+ return { year: year, monthIndex: month - 1, dayOfMonth: day };
31
+ }
32
+ function longCalendarDateLabel(key) {
33
+ const { year, monthIndex, dayOfMonth } = parseCalendarDayKey(key);
34
+ return `${MONTH_NAMES[monthIndex]} ${dayOfMonth}, ${year}`;
35
+ }
36
+ /** Converts the view model's dense daily series into heatmap columns. */
37
+ export function createCalendarHeatmapData(dailyTokenValues, gridStartTimestamp) {
38
+ let previousMonthIndex = -1;
39
+ let lastLabelledWeek = -4;
40
+ const weeks = Array.from({ length: ACTIVITY_HEATMAP_WEEK_COUNT }, (_, weekIndex) => {
41
+ // Noon avoids crossing a calendar boundary when the range spans DST.
42
+ const weekTimestamp = gridStartTimestamp + weekIndex * 7 * DAY_IN_MS + DAY_IN_MS / 2;
43
+ const weekKey = getCalendarDayKey(weekTimestamp);
44
+ const monthIndex = parseCalendarDayKey(weekKey).monthIndex;
45
+ let label;
46
+ if (monthIndex !== previousMonthIndex &&
47
+ weekIndex < ACTIVITY_HEATMAP_WEEK_COUNT - 1) {
48
+ previousMonthIndex = monthIndex;
49
+ if (weekIndex - lastLabelledWeek >= 4) {
50
+ lastLabelledWeek = weekIndex;
51
+ label = MONTH_NAMES[monthIndex];
52
+ }
53
+ }
54
+ const days = Array.from({ length: 7 }, (_, dayOfWeek) => {
55
+ const valueIndex = weekIndex * 7 + dayOfWeek;
56
+ const timestamp = gridStartTimestamp + valueIndex * DAY_IN_MS + DAY_IN_MS / 2;
57
+ const key = getCalendarDayKey(timestamp);
58
+ const value = finiteMagnitude(dailyTokenValues[valueIndex]);
59
+ return {
60
+ id: key,
61
+ value,
62
+ label: `${longCalendarDateLabel(key)}: ${value === null ? "not available" : tokenCountLabel(value)}`,
63
+ };
64
+ });
65
+ return {
66
+ id: weekKey,
67
+ ...(label ? { label } : {}),
68
+ days,
69
+ };
70
+ });
71
+ return { weeks };
72
+ }
73
+ export function calculateActivityStats(dailyTokenValues, currentDayIndex) {
74
+ const lastIndex = Math.min(Math.max(0, Math.floor(currentDayIndex)), Math.max(0, dailyTokenValues.length - 1));
75
+ let activeDayCount = 0;
76
+ let longestStreakLength = 0;
77
+ let runningStreakLength = 0;
78
+ for (let index = 0; index <= lastIndex; index += 1) {
79
+ if ((dailyTokenValues[index] ?? 0) > 0) {
80
+ activeDayCount += 1;
81
+ runningStreakLength += 1;
82
+ longestStreakLength = Math.max(longestStreakLength, runningStreakLength);
83
+ }
84
+ else {
85
+ runningStreakLength = 0;
86
+ }
87
+ }
88
+ let currentStreakLength = 0;
89
+ for (let index = lastIndex; index >= 0 && (dailyTokenValues[index] ?? 0) > 0; index -= 1) {
90
+ currentStreakLength += 1;
91
+ }
92
+ return { activeDayCount, currentStreakLength, longestStreakLength };
93
+ }
94
+ function createStreamgraphDomain(currentTimestamp) {
95
+ const visibleTickIndices = new Set([0, 10, 20, STREAMGRAPH_DAY_COUNT - 1]);
96
+ return Array.from({ length: STREAMGRAPH_DAY_COUNT }, (_, dayIndex) => {
97
+ const timestamp = currentTimestamp - (STREAMGRAPH_DAY_COUNT - 1 - dayIndex) * DAY_IN_MS;
98
+ const key = getCalendarDayKey(timestamp);
99
+ const { monthIndex, dayOfMonth } = parseCalendarDayKey(key);
100
+ return {
101
+ id: key,
102
+ ...(visibleTickIndices.has(dayIndex)
103
+ ? { label: `${MONTH_NAMES[monthIndex]} ${dayOfMonth}` }
104
+ : {}),
105
+ };
106
+ });
107
+ }
108
+ /** Aggregates protocol usage rows into aligned, presentation-ready layers. */
109
+ export function createModelUsageStreamgraphData(usage, currentTimestamp, { groupOthers = true } = {}) {
110
+ const domain = createStreamgraphDomain(currentTimestamp);
111
+ const visibleDays = new Set(domain.map((point) => point.id));
112
+ const tokensByModelAndDay = new Map();
113
+ const modelColors = createModelColors(usage.models.map(row => row.model));
114
+ for (const row of usage.models) {
115
+ if (!visibleDays.has(row.day) || !Number.isFinite(row.tokens) || row.tokens <= 0)
116
+ continue;
117
+ const tokensByDay = tokensByModelAndDay.get(row.model) ?? new Map();
118
+ tokensByDay.set(row.day, (tokensByDay.get(row.day) ?? 0) + row.tokens);
119
+ tokensByModelAndDay.set(row.model, tokensByDay);
120
+ }
121
+ const allSeries = [...tokensByModelAndDay.entries()]
122
+ .map(([modelId, tokensByDay]) => {
123
+ const values = domain.map((point) => tokensByDay.get(point.id) ?? 0);
124
+ return {
125
+ id: modelId,
126
+ label: formatModelLabel(modelId),
127
+ color: modelColors[modelId],
128
+ values,
129
+ total: values.reduce((sum, value) => sum + value, 0),
130
+ };
131
+ })
132
+ .filter((series) => series.total > 0)
133
+ .sort((left, right) => right.total - left.total || left.id.localeCompare(right.id));
134
+ const individualSeries = groupOthers ? allSeries.slice(0, MAX_VISIBLE_MODEL_SERIES) : allSeries;
135
+ const series = individualSeries
136
+ .map(({ id, label, color, values }) => ({ id, label, color, values }));
137
+ const remainingSeries = groupOthers ? allSeries.slice(MAX_VISIBLE_MODEL_SERIES) : [];
138
+ if (remainingSeries.length > 0) {
139
+ const existingSeriesIds = new Set(allSeries.map((modelSeries) => modelSeries.id));
140
+ let aggregateSeriesId = "__other_models__";
141
+ while (existingSeriesIds.has(aggregateSeriesId))
142
+ aggregateSeriesId += "_";
143
+ series.push({
144
+ id: aggregateSeriesId,
145
+ label: `other ×${remainingSeries.length}`,
146
+ color: "var(--vf-text-faint)",
147
+ values: domain.map((_, valueIndex) => remainingSeries.reduce((total, modelSeries) => total + modelSeries.values[valueIndex], 0)),
148
+ });
149
+ }
150
+ return { domain, series };
151
+ }
@@ -0,0 +1,21 @@
1
+ import type { ModelHour } from "@vibefield/rosetta-protocol";
2
+ /** Recorded hourly buckets, never estimated by distributing a day's total. */
3
+ export declare function createDayActivity(rows: readonly ModelHour[], colors?: Readonly<Record<string, string>>): {
4
+ series: {
5
+ id: string;
6
+ label: string;
7
+ color: string | undefined;
8
+ values: number[];
9
+ total: number;
10
+ }[];
11
+ hours: number[];
12
+ total: number;
13
+ peakHour: number | null;
14
+ };
15
+ export declare function hourLabel(hour: number): string;
16
+ type Point = readonly [x: number, y: number];
17
+ /** C1 cubic interpolation through the samples. Bounded tangents keep each
18
+ * segment between its endpoints, including zero buckets and sharp peaks.
19
+ * Flat end tangents also meet the pending-hours guide without a corner. */
20
+ export declare function createHourlyCurve(points: readonly Point[]): string;
21
+ export {};
@@ -0,0 +1,56 @@
1
+ import { createModelColors, formatModelLabel } from "./model-labels.js";
2
+ /** Recorded hourly buckets, never estimated by distributing a day's total. */
3
+ export function createDayActivity(rows, colors) {
4
+ const modelColors = { ...createModelColors(rows.map(row => row.model)), ...colors };
5
+ const models = new Map();
6
+ for (const row of rows) {
7
+ if (!Number.isInteger(row.hour) || row.hour < 0 || row.hour > 23
8
+ || !Number.isFinite(row.tokens) || row.tokens <= 0)
9
+ continue;
10
+ const values = models.get(row.model) ?? Array(24).fill(0);
11
+ values[row.hour] += row.tokens;
12
+ models.set(row.model, values);
13
+ }
14
+ const series = [...models].map(([id, values]) => ({
15
+ id, label: formatModelLabel(id), color: modelColors[id], values,
16
+ total: values.reduce((sum, value) => sum + value, 0),
17
+ })).sort((a, b) => b.total - a.total || a.id.localeCompare(b.id));
18
+ const hours = Array.from({ length: 24 }, (_, hour) => series.reduce((sum, model) => sum + model.values[hour], 0));
19
+ const total = hours.reduce((sum, value) => sum + value, 0);
20
+ const peakHour = total > 0 ? hours.indexOf(Math.max(...hours)) : null;
21
+ return { series, hours, total, peakHour };
22
+ }
23
+ export function hourLabel(hour) {
24
+ return `${hour % 12 || 12} ${hour < 12 ? "AM" : "PM"}`;
25
+ }
26
+ /** C1 cubic interpolation through the samples. Bounded tangents keep each
27
+ * segment between its endpoints, including zero buckets and sharp peaks.
28
+ * Flat end tangents also meet the pending-hours guide without a corner. */
29
+ export function createHourlyCurve(points) {
30
+ if (!points.length)
31
+ return "";
32
+ // Every read here exists: the first point is guarded above; slopes has one
33
+ // entry per gap and is read only at an interior point's two gaps; tangents
34
+ // has one entry per point; and the loop runs from 1 below points.length.
35
+ const pointAt = (index) => points[index];
36
+ const slopes = points.slice(1).map((point, index) => (point[1] - pointAt(index)[1]) / (point[0] - pointAt(index)[0]));
37
+ const slopeAt = (index) => slopes[index];
38
+ const tangents = points.map((_, index) => {
39
+ if (index === 0 || index === points.length - 1)
40
+ return 0;
41
+ const before = slopeAt(index - 1);
42
+ const after = slopeAt(index);
43
+ return before * after > 0
44
+ ? Math.sign(before) * Math.min(Math.abs(before), Math.abs(after)) : 0;
45
+ });
46
+ const tangentAt = (index) => tangents[index];
47
+ let path = `M${pointAt(0)[0]},${pointAt(0)[1]}`;
48
+ for (let index = 1; index < points.length; index++) {
49
+ const [x0, y0] = pointAt(index - 1);
50
+ const [x1, y1] = pointAt(index);
51
+ const step = (x1 - x0) / 3;
52
+ path += ` C${x0 + step},${y0 + tangentAt(index - 1) * step}`
53
+ + ` ${x1 - step},${y1 - tangentAt(index) * step} ${x1},${y1}`;
54
+ }
55
+ return path;
56
+ }
@@ -0,0 +1,24 @@
1
+ export interface CompactNumberParts {
2
+ n: string;
3
+ u: string;
4
+ }
5
+ /** Shared count/token/currency scale. Round before choosing precision and
6
+ * promote a rounded 1,000 into the next unit (999,500 → 1.00M). */
7
+ export declare function fmtCompactNumber(value: number): CompactNumberParts;
8
+ export type TokenParts = CompactNumberParts;
9
+ export declare function fmtTokens(n: number): TokenParts;
10
+ export declare function tokenText(n: number): string;
11
+ /** `now` under 90s, then minutes, hours, `yesterday`, days. */
12
+ export declare function lastActive(ms: number | null, nowMs: number): string;
13
+ export declare function duration(fromMs: number, toMs: number): string;
14
+ export declare function clock(ms: number): string;
15
+ export declare function clockShort(ms: number): string;
16
+ /** `Today`, `Yesterday`, then `Mon 24 Aug` — the session list's day breaks. */
17
+ export declare function dayLabel(ms: number | null, nowMs: number): string;
18
+ /** Home-relative form of a path, the way the ledger row prints one. The
19
+ * home is a folder, so only the home itself and what is under it shorten:
20
+ * `/Users/ab` is not under `/Users/a`. A root home shortens nothing. */
21
+ export declare function tildePath(path: string, home: string | null): string;
22
+ /** A file size, at three significant figures — the ledger's rule for a
23
+ * figure, applied to bytes. `812 B` · `4.20 KB` · `1.3 MB` · `212 MB`. */
24
+ export declare function fmtBytes(bytes: number): string;