@nuvin/components 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 (269) hide show
  1. package/dist/MarkdownBody-XBNXK6P4.js +121 -0
  2. package/dist/app/App.d.ts +24 -0
  3. package/dist/app/App.d.ts.map +1 -0
  4. package/dist/app/AppShell.d.ts +13 -0
  5. package/dist/app/AppShell.d.ts.map +1 -0
  6. package/dist/app/Header.d.ts +11 -0
  7. package/dist/app/Header.d.ts.map +1 -0
  8. package/dist/app/SessionSubHeader.d.ts +15 -0
  9. package/dist/app/SessionSubHeader.d.ts.map +1 -0
  10. package/dist/app/WorkspacePanel.d.ts +15 -0
  11. package/dist/app/WorkspacePanel.d.ts.map +1 -0
  12. package/dist/app/app-shell.styles.d.ts +11 -0
  13. package/dist/app/app-shell.styles.d.ts.map +1 -0
  14. package/dist/app/route-components.d.ts +46 -0
  15. package/dist/app/route-components.d.ts.map +1 -0
  16. package/dist/app/routes.d.ts +11 -0
  17. package/dist/app/routes.d.ts.map +1 -0
  18. package/dist/assets/fonts/inter-latin-400-normal.woff2 +0 -0
  19. package/dist/assets/fonts/inter-latin-500-normal.woff2 +0 -0
  20. package/dist/assets/fonts/inter-latin-600-normal.woff2 +0 -0
  21. package/dist/assets/fonts/inter-latin-700-normal.woff2 +0 -0
  22. package/dist/assets/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  23. package/dist/assets/fonts/jetbrains-mono-latin-500-normal.woff2 +0 -0
  24. package/dist/assets/fonts/jetbrains-mono-latin-600-normal.woff2 +0 -0
  25. package/dist/assets/fonts/jetbrains-mono-latin-700-normal.woff2 +0 -0
  26. package/dist/chunk-TLWTUPOJ.js +10 -0
  27. package/dist/features/account/auth-gate.d.ts +17 -0
  28. package/dist/features/account/auth-gate.d.ts.map +1 -0
  29. package/dist/features/account/index.d.ts +3 -0
  30. package/dist/features/account/index.d.ts.map +1 -0
  31. package/dist/features/composer/Composer.d.ts +39 -0
  32. package/dist/features/composer/Composer.d.ts.map +1 -0
  33. package/dist/features/composer/QuestionCard.d.ts +21 -0
  34. package/dist/features/composer/QuestionCard.d.ts.map +1 -0
  35. package/dist/features/composer/context-status.d.ts +6 -0
  36. package/dist/features/composer/context-status.d.ts.map +1 -0
  37. package/dist/features/composer/index.d.ts +2 -0
  38. package/dist/features/composer/index.d.ts.map +1 -0
  39. package/dist/features/config/CloudProviderSetup.d.ts +12 -0
  40. package/dist/features/config/CloudProviderSetup.d.ts.map +1 -0
  41. package/dist/features/config/OnboardingGate.d.ts +22 -0
  42. package/dist/features/config/OnboardingGate.d.ts.map +1 -0
  43. package/dist/features/config/ProviderManager.d.ts +15 -0
  44. package/dist/features/config/ProviderManager.d.ts.map +1 -0
  45. package/dist/features/config/WorkspaceManager.d.ts +13 -0
  46. package/dist/features/config/WorkspaceManager.d.ts.map +1 -0
  47. package/dist/features/config/config-client.d.ts +49 -0
  48. package/dist/features/config/config-client.d.ts.map +1 -0
  49. package/dist/features/config/index.d.ts +10 -0
  50. package/dist/features/config/index.d.ts.map +1 -0
  51. package/dist/features/config/protocol-config-client.d.ts +22 -0
  52. package/dist/features/config/protocol-config-client.d.ts.map +1 -0
  53. package/dist/features/config/rest-config-client.d.ts +4 -0
  54. package/dist/features/config/rest-config-client.d.ts.map +1 -0
  55. package/dist/features/config/use-provider-status.d.ts +8 -0
  56. package/dist/features/config/use-provider-status.d.ts.map +1 -0
  57. package/dist/features/daemon-switcher/DaemonAvatar.d.ts +16 -0
  58. package/dist/features/daemon-switcher/DaemonAvatar.d.ts.map +1 -0
  59. package/dist/features/daemon-switcher/DaemonRail.d.ts +18 -0
  60. package/dist/features/daemon-switcher/DaemonRail.d.ts.map +1 -0
  61. package/dist/features/daemon-switcher/DaemonSwitcher.d.ts +17 -0
  62. package/dist/features/daemon-switcher/DaemonSwitcher.d.ts.map +1 -0
  63. package/dist/features/daemon-switcher/index.d.ts +7 -0
  64. package/dist/features/daemon-switcher/index.d.ts.map +1 -0
  65. package/dist/features/diff/DiffView.d.ts +13 -0
  66. package/dist/features/diff/DiffView.d.ts.map +1 -0
  67. package/dist/features/diff/diff.d.ts +23 -0
  68. package/dist/features/diff/diff.d.ts.map +1 -0
  69. package/dist/features/diff/index.d.ts +4 -0
  70. package/dist/features/diff/index.d.ts.map +1 -0
  71. package/dist/features/launcher/SessionItem.d.ts +12 -0
  72. package/dist/features/launcher/SessionItem.d.ts.map +1 -0
  73. package/dist/features/launcher/SessionSidebar.d.ts +24 -0
  74. package/dist/features/launcher/SessionSidebar.d.ts.map +1 -0
  75. package/dist/features/launcher/index.d.ts +5 -0
  76. package/dist/features/launcher/index.d.ts.map +1 -0
  77. package/dist/features/launcher/session-sidebar-model.d.ts +77 -0
  78. package/dist/features/launcher/session-sidebar-model.d.ts.map +1 -0
  79. package/dist/features/launcher/session-status.d.ts +9 -0
  80. package/dist/features/launcher/session-status.d.ts.map +1 -0
  81. package/dist/features/launcher/use-daemon-history.d.ts +17 -0
  82. package/dist/features/launcher/use-daemon-history.d.ts.map +1 -0
  83. package/dist/features/new-session/StartScreen.d.ts +31 -0
  84. package/dist/features/new-session/StartScreen.d.ts.map +1 -0
  85. package/dist/features/new-session/index.d.ts +3 -0
  86. package/dist/features/new-session/index.d.ts.map +1 -0
  87. package/dist/features/new-session/start-screen.styles.d.ts +46 -0
  88. package/dist/features/new-session/start-screen.styles.d.ts.map +1 -0
  89. package/dist/features/picker/Picker.d.ts +23 -0
  90. package/dist/features/picker/Picker.d.ts.map +1 -0
  91. package/dist/features/picker/PickerSession.d.ts +8 -0
  92. package/dist/features/picker/PickerSession.d.ts.map +1 -0
  93. package/dist/features/picker/index.d.ts +6 -0
  94. package/dist/features/picker/index.d.ts.map +1 -0
  95. package/dist/features/picker/picker-model.d.ts +31 -0
  96. package/dist/features/picker/picker-model.d.ts.map +1 -0
  97. package/dist/features/tabs/Tab.d.ts +8 -0
  98. package/dist/features/tabs/Tab.d.ts.map +1 -0
  99. package/dist/features/tabs/TabBar.d.ts +7 -0
  100. package/dist/features/tabs/TabBar.d.ts.map +1 -0
  101. package/dist/features/tabs/index.d.ts +8 -0
  102. package/dist/features/tabs/index.d.ts.map +1 -0
  103. package/dist/features/tabs/tab-model.d.ts +39 -0
  104. package/dist/features/tabs/tab-model.d.ts.map +1 -0
  105. package/dist/features/tabs/tab.styles.d.ts +9 -0
  106. package/dist/features/tabs/tab.styles.d.ts.map +1 -0
  107. package/dist/features/theme/ThemeToggle.d.ts +8 -0
  108. package/dist/features/theme/ThemeToggle.d.ts.map +1 -0
  109. package/dist/features/theme/index.d.ts +5 -0
  110. package/dist/features/theme/index.d.ts.map +1 -0
  111. package/dist/features/theme/themes.d.ts +13 -0
  112. package/dist/features/theme/themes.d.ts.map +1 -0
  113. package/dist/features/theme/use-theme-mode.d.ts +3 -0
  114. package/dist/features/theme/use-theme-mode.d.ts.map +1 -0
  115. package/dist/features/transcript/components/AssistantMessage.d.ts +21 -0
  116. package/dist/features/transcript/components/AssistantMessage.d.ts.map +1 -0
  117. package/dist/features/transcript/components/ChildMessagesContext.d.ts +27 -0
  118. package/dist/features/transcript/components/ChildMessagesContext.d.ts.map +1 -0
  119. package/dist/features/transcript/components/CodeBlock.d.ts +5 -0
  120. package/dist/features/transcript/components/CodeBlock.d.ts.map +1 -0
  121. package/dist/features/transcript/components/MarkdownBody.d.ts +17 -0
  122. package/dist/features/transcript/components/MarkdownBody.d.ts.map +1 -0
  123. package/dist/features/transcript/components/MessageList.d.ts +24 -0
  124. package/dist/features/transcript/components/MessageList.d.ts.map +1 -0
  125. package/dist/features/transcript/components/NestedMessageListContext.d.ts +18 -0
  126. package/dist/features/transcript/components/NestedMessageListContext.d.ts.map +1 -0
  127. package/dist/features/transcript/components/ProcessingIndicator.d.ts +5 -0
  128. package/dist/features/transcript/components/ProcessingIndicator.d.ts.map +1 -0
  129. package/dist/features/transcript/components/styles-test-utils.d.ts +6 -0
  130. package/dist/features/transcript/components/styles-test-utils.d.ts.map +1 -0
  131. package/dist/features/transcript/components/tool-display/BareLine.d.ts +14 -0
  132. package/dist/features/transcript/components/tool-display/BareLine.d.ts.map +1 -0
  133. package/dist/features/transcript/components/tool-display/Card.d.ts +31 -0
  134. package/dist/features/transcript/components/tool-display/Card.d.ts.map +1 -0
  135. package/dist/features/transcript/components/tool-display/Turn.d.ts +15 -0
  136. package/dist/features/transcript/components/tool-display/Turn.d.ts.map +1 -0
  137. package/dist/features/transcript/components/tool-display/index.d.ts +3 -0
  138. package/dist/features/transcript/components/tool-display/index.d.ts.map +1 -0
  139. package/dist/features/transcript/components/tool-display/renderers/AskUserRenderer.d.ts +4 -0
  140. package/dist/features/transcript/components/tool-display/renderers/AskUserRenderer.d.ts.map +1 -0
  141. package/dist/features/transcript/components/tool-display/renderers/AssignTaskRenderer.d.ts +9 -0
  142. package/dist/features/transcript/components/tool-display/renderers/AssignTaskRenderer.d.ts.map +1 -0
  143. package/dist/features/transcript/components/tool-display/renderers/BareToolRenderer.d.ts +8 -0
  144. package/dist/features/transcript/components/tool-display/renderers/BareToolRenderer.d.ts.map +1 -0
  145. package/dist/features/transcript/components/tool-display/renderers/BashRenderer.d.ts +11 -0
  146. package/dist/features/transcript/components/tool-display/renderers/BashRenderer.d.ts.map +1 -0
  147. package/dist/features/transcript/components/tool-display/renderers/FileEditRenderer.d.ts +4 -0
  148. package/dist/features/transcript/components/tool-display/renderers/FileEditRenderer.d.ts.map +1 -0
  149. package/dist/features/transcript/components/tool-display/renderers/FileNewRenderer.d.ts +4 -0
  150. package/dist/features/transcript/components/tool-display/renderers/FileNewRenderer.d.ts.map +1 -0
  151. package/dist/features/transcript/components/tool-display/renderers/TodoWriteRenderer.d.ts +4 -0
  152. package/dist/features/transcript/components/tool-display/renderers/TodoWriteRenderer.d.ts.map +1 -0
  153. package/dist/features/transcript/components/tool-display/renderers/UnknownRenderer.d.ts +4 -0
  154. package/dist/features/transcript/components/tool-display/renderers/UnknownRenderer.d.ts.map +1 -0
  155. package/dist/features/transcript/components/tool-display/tool-icon.d.ts +4 -0
  156. package/dist/features/transcript/components/tool-display/tool-icon.d.ts.map +1 -0
  157. package/dist/features/transcript/components/tool-display/tool-meta.d.ts +9 -0
  158. package/dist/features/transcript/components/tool-display/tool-meta.d.ts.map +1 -0
  159. package/dist/features/transcript/components/tool-display/tool-variants.d.ts +8 -0
  160. package/dist/features/transcript/components/tool-display/tool-variants.d.ts.map +1 -0
  161. package/dist/features/transcript/components/tool-display/types.d.ts +11 -0
  162. package/dist/features/transcript/components/tool-display/types.d.ts.map +1 -0
  163. package/dist/features/transcript/hooks/use-live-tick.d.ts +8 -0
  164. package/dist/features/transcript/hooks/use-live-tick.d.ts.map +1 -0
  165. package/dist/features/transcript/hooks/use-revealed-text.d.ts +28 -0
  166. package/dist/features/transcript/hooks/use-revealed-text.d.ts.map +1 -0
  167. package/dist/features/transcript/index.d.ts +6 -0
  168. package/dist/features/transcript/index.d.ts.map +1 -0
  169. package/dist/features/transcript/lib/message-groups.d.ts +9 -0
  170. package/dist/features/transcript/lib/message-groups.d.ts.map +1 -0
  171. package/dist/features/transcript/lib/preview-lines.d.ts +27 -0
  172. package/dist/features/transcript/lib/preview-lines.d.ts.map +1 -0
  173. package/dist/features/transcript/lib/processing-state.d.ts +16 -0
  174. package/dist/features/transcript/lib/processing-state.d.ts.map +1 -0
  175. package/dist/features/transcript/lib/reasoning-label.d.ts +9 -0
  176. package/dist/features/transcript/lib/reasoning-label.d.ts.map +1 -0
  177. package/dist/features/transcript/lib/tool-format-utils.d.ts +29 -0
  178. package/dist/features/transcript/lib/tool-format-utils.d.ts.map +1 -0
  179. package/dist/features/transcript/lib/tool-formatters.d.ts +45 -0
  180. package/dist/features/transcript/lib/tool-formatters.d.ts.map +1 -0
  181. package/dist/features/transcript/lib/tool-status.d.ts +39 -0
  182. package/dist/features/transcript/lib/tool-status.d.ts.map +1 -0
  183. package/dist/features/transcript/lib/transcript-rows.d.ts +15 -0
  184. package/dist/features/transcript/lib/transcript-rows.d.ts.map +1 -0
  185. package/dist/features/transcript/lib/turn-groups.d.ts +20 -0
  186. package/dist/features/transcript/lib/turn-groups.d.ts.map +1 -0
  187. package/dist/features/transcript/lib/turn-summary.d.ts +11 -0
  188. package/dist/features/transcript/lib/turn-summary.d.ts.map +1 -0
  189. package/dist/features/workflows/WorkflowsPanel.d.ts +11 -0
  190. package/dist/features/workflows/WorkflowsPanel.d.ts.map +1 -0
  191. package/dist/features/workflows/index.d.ts +3 -0
  192. package/dist/features/workflows/index.d.ts.map +1 -0
  193. package/dist/index.d.ts +45 -0
  194. package/dist/index.d.ts.map +1 -0
  195. package/dist/index.js +7877 -0
  196. package/dist/session/client-commands.d.ts +26 -0
  197. package/dist/session/client-commands.d.ts.map +1 -0
  198. package/dist/session/commands.d.ts +9 -0
  199. package/dist/session/commands.d.ts.map +1 -0
  200. package/dist/session/directory-source.d.ts +101 -0
  201. package/dist/session/directory-source.d.ts.map +1 -0
  202. package/dist/session/directory-status.d.ts +8 -0
  203. package/dist/session/directory-status.d.ts.map +1 -0
  204. package/dist/session/directory.d.ts +41 -0
  205. package/dist/session/directory.d.ts.map +1 -0
  206. package/dist/session/index.d.ts +16 -0
  207. package/dist/session/index.d.ts.map +1 -0
  208. package/dist/session/snapshot.d.ts +11 -0
  209. package/dist/session/snapshot.d.ts.map +1 -0
  210. package/dist/session/store.d.ts +96 -0
  211. package/dist/session/store.d.ts.map +1 -0
  212. package/dist/session/tool-timing.d.ts +14 -0
  213. package/dist/session/tool-timing.d.ts.map +1 -0
  214. package/dist/session/transport.d.ts +187 -0
  215. package/dist/session/transport.d.ts.map +1 -0
  216. package/dist/session/types.d.ts +73 -0
  217. package/dist/session/types.d.ts.map +1 -0
  218. package/dist/session/use-directory.d.ts +54 -0
  219. package/dist/session/use-directory.d.ts.map +1 -0
  220. package/dist/session/use-session-transport.d.ts +10 -0
  221. package/dist/session/use-session-transport.d.ts.map +1 -0
  222. package/dist/shared/hooks/use-stick-to-bottom-sentinel.d.ts +64 -0
  223. package/dist/shared/hooks/use-stick-to-bottom-sentinel.d.ts.map +1 -0
  224. package/dist/shared/lib/navigation.d.ts +20 -0
  225. package/dist/shared/lib/navigation.d.ts.map +1 -0
  226. package/dist/shared/lib/toast.d.ts +35 -0
  227. package/dist/shared/lib/toast.d.ts.map +1 -0
  228. package/dist/shared/lib/utils.d.ts +3 -0
  229. package/dist/shared/lib/utils.d.ts.map +1 -0
  230. package/dist/shared/ui/CopyButton.d.ts +6 -0
  231. package/dist/shared/ui/CopyButton.d.ts.map +1 -0
  232. package/dist/shared/ui/avatar.d.ts +9 -0
  233. package/dist/shared/ui/avatar.d.ts.map +1 -0
  234. package/dist/shared/ui/badge.d.ts +8 -0
  235. package/dist/shared/ui/badge.d.ts.map +1 -0
  236. package/dist/shared/ui/button.d.ts +11 -0
  237. package/dist/shared/ui/button.d.ts.map +1 -0
  238. package/dist/shared/ui/command.d.ts +10 -0
  239. package/dist/shared/ui/command.d.ts.map +1 -0
  240. package/dist/shared/ui/confirm-dialog.d.ts +17 -0
  241. package/dist/shared/ui/confirm-dialog.d.ts.map +1 -0
  242. package/dist/shared/ui/dropdown-menu.d.ts +9 -0
  243. package/dist/shared/ui/dropdown-menu.d.ts.map +1 -0
  244. package/dist/shared/ui/input.d.ts +3 -0
  245. package/dist/shared/ui/input.d.ts.map +1 -0
  246. package/dist/shared/ui/kbd.d.ts +3 -0
  247. package/dist/shared/ui/kbd.d.ts.map +1 -0
  248. package/dist/shared/ui/popover.d.ts +7 -0
  249. package/dist/shared/ui/popover.d.ts.map +1 -0
  250. package/dist/shared/ui/scroll-area.d.ts +5 -0
  251. package/dist/shared/ui/scroll-area.d.ts.map +1 -0
  252. package/dist/shared/ui/tabs.d.ts +7 -0
  253. package/dist/shared/ui/tabs.d.ts.map +1 -0
  254. package/dist/shared/ui/toast.d.ts +7 -0
  255. package/dist/shared/ui/toast.d.ts.map +1 -0
  256. package/dist/shared/ui/tooltip.d.ts +7 -0
  257. package/dist/shared/ui/tooltip.d.ts.map +1 -0
  258. package/dist/styles/base.css +49 -0
  259. package/dist/styles/components.css +206 -0
  260. package/dist/styles/effects.css +76 -0
  261. package/dist/styles/fonts.css +49 -0
  262. package/dist/styles/index.css +14 -0
  263. package/dist/styles/styles.test.ts +45 -0
  264. package/dist/styles/themes.css +33 -0
  265. package/dist/styles/tokens.css +245 -0
  266. package/dist/styles/tokens.test.ts +113 -0
  267. package/dist/test-setup.d.ts +29 -0
  268. package/dist/test-setup.d.ts.map +1 -0
  269. package/package.json +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/tabs/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { SessionDescriptor } from "@nuvin/session/protocol";
2
+ import type { TabState } from "@/session";
3
+ export type TabIndicator = "idle" | "busy" | "awaiting-approval" | "stale" | "draft";
4
+ export type TabView = {
5
+ tabKey: string;
6
+ title: string;
7
+ indicator: TabIndicator;
8
+ unread: number;
9
+ active: boolean;
10
+ };
11
+ /**
12
+ * Derive a human-readable tab title, matching the TUI's `sessionTitle`
13
+ * resolution (topic → lastMessage → name) so both clients read the same.
14
+ *
15
+ * Source priority:
16
+ * 1. `descriptor.topic` — the daemon's human topic (set from the first user
17
+ * message or an `UpdateTopic` call)
18
+ * 2. `descriptor.lastMessage` — first line of the most recent user message
19
+ * 3. First user message text in `tab.snapshot.messages` (local fallback when no
20
+ * descriptor metadata has propagated yet, e.g. a freshly-created tab)
21
+ * 4. `descriptor.name` — the auto-generated `session-<id>` or an explicit name
22
+ * 5. `"New session"` placeholder
23
+ *
24
+ * Note `name` ranks LAST: the daemon defaults it to `session-<id>`, which is
25
+ * less useful than the conversation's own topic/first message.
26
+ */
27
+ export declare function deriveTabTitle(tab: Pick<TabState, "snapshot">, descriptor?: Pick<SessionDescriptor, "name" | "topic" | "lastMessage"> | null): string;
28
+ export declare function tabIndicator(tab: Pick<TabState, "snapshot" | "connected" | "isDraft">): TabIndicator;
29
+ export type BuildTabViewsOptions = {
30
+ /** When set, only tabs belonging to this server are included in the output. */
31
+ serverFilter?: string;
32
+ };
33
+ /**
34
+ * Count the number of tabs across all daemons that are awaiting user input
35
+ * (either an active approval request or an active question).
36
+ */
37
+ export declare function countNeedsInput(tabs: Map<string, TabState>): number;
38
+ export declare function buildTabViews(tabs: Map<string, TabState>, activeTabKey: string | null, descriptors?: Map<string, SessionDescriptor> | null, options?: BuildTabViewsOptions): TabView[];
39
+ //# sourceMappingURL=tab-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-model.d.ts","sourceRoot":"","sources":["../../../src/features/tabs/tab-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,mBAAmB,GAAG,OAAO,GAAG,OAAO,CAAC;AAErF,MAAM,MAAM,OAAO,GAAG;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAYF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAC/B,UAAU,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC,GAAG,IAAI,GAC5E,MAAM,CAkBR;AAED,wBAAgB,YAAY,CAC1B,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC,GACxD,YAAY,CAed;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,CAYnE;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,IAAI,EACnD,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,EAAE,CAkBX"}
@@ -0,0 +1,9 @@
1
+ import type { TabIndicator } from "./tab-model";
2
+ export declare const tabBarClassName = "flex flex-row overflow-x-auto gap-1 border-b border-[var(--color-border)] bg-[var(--color-panel)] px-1";
3
+ export declare const tabClassName = "relative inline-flex flex-row items-center gap-1.5 px-3 py-2 min-w-0 shrink-0 cursor-pointer border border-transparent text-[var(--color-muted)] bg-transparent hover:text-[var(--color-text)] hover:bg-[var(--color-panel-elevated)] transition-colors";
4
+ export declare const tabActiveClassName = "relative inline-flex flex-row items-center gap-1.5 px-3 py-2 min-w-0 shrink-0 cursor-pointer border border-[var(--color-border)] border-b-[var(--color-panel)] text-[var(--color-text)] bg-[var(--color-panel-elevated)]";
5
+ export declare const tabCloseClassName = "inline-flex items-center justify-center w-4 h-4 shrink-0 text-[var(--color-muted)] hover:text-[var(--color-text)] transition-colors";
6
+ export declare const tabNewClassName = "inline-flex h-8 w-8 shrink-0 items-center justify-center self-center rounded text-xl leading-none text-[var(--color-muted)] hover:bg-[var(--color-panel-elevated)] hover:text-[var(--color-accent)] transition-colors";
7
+ export declare const unreadBadgeClassName = "inline-flex items-center justify-center min-w-4 h-4 px-1 text-[10px] font-semibold leading-none bg-[var(--color-accent)] text-[var(--color-background)] shrink-0";
8
+ export declare function tabIndicatorClassName(indicator: TabIndicator): string;
9
+ //# sourceMappingURL=tab.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab.styles.d.ts","sourceRoot":"","sources":["../../../src/features/tabs/tab.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,eAAO,MAAM,eAAe,2GAC8E,CAAC;AAM3G,eAAO,MAAM,YAAY,4PACkO,CAAC;AAE5P,eAAO,MAAM,kBAAkB,6NAC6L,CAAC;AAM7N,eAAO,MAAM,iBAAiB,wIACyG,CAAC;AAExI,eAAO,MAAM,eAAe,0NAC6L,CAAC;AAE1N,eAAO,MAAM,oBAAoB,qKACmI,CAAC;AA+BrK,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM,CAErE"}
@@ -0,0 +1,8 @@
1
+ import type { ThemeMode } from "./themes";
2
+ interface ThemeToggleProps {
3
+ mode: ThemeMode;
4
+ onToggle: () => void;
5
+ }
6
+ export declare function ThemeToggle({ mode, onToggle }: ThemeToggleProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=ThemeToggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeToggle.d.ts","sourceRoot":"","sources":["../../../src/features/theme/ThemeToggle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,UAAU,gBAAgB;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAmB/D"}
@@ -0,0 +1,5 @@
1
+ export { ThemeToggle } from "./ThemeToggle";
2
+ export type { ThemeMode, WebTheme } from "./themes";
3
+ export { applyTheme, darkTheme, lightTheme, themeForMode, themes } from "./themes";
4
+ export { useThemeMode } from "./use-theme-mode";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/theme/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type ThemeMode = "dark" | "light";
2
+ export interface WebTheme {
3
+ attr: ThemeMode;
4
+ mode: ThemeMode;
5
+ name: string;
6
+ }
7
+ export declare const darkTheme: WebTheme;
8
+ export declare const lightTheme: WebTheme;
9
+ export declare const themes: readonly [WebTheme, WebTheme];
10
+ export declare function themeForMode(mode: ThemeMode): WebTheme;
11
+ /** Apply a theme by setting the data-theme attribute on <html>. */
12
+ export declare function applyTheme(mode: ThemeMode): void;
13
+ //# sourceMappingURL=themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../../src/features/theme/themes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,SAAS,EAAE,QAIvB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,QAIxB,CAAC;AAEF,eAAO,MAAM,MAAM,+BAAmC,CAAC;AAEvD,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAEtD;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAEhD"}
@@ -0,0 +1,3 @@
1
+ import { type ThemeMode } from "./themes";
2
+ export declare function useThemeMode(): [ThemeMode, () => void];
3
+ //# sourceMappingURL=use-theme-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-theme-mode.d.ts","sourceRoot":"","sources":["../../../src/features/theme/use-theme-mode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AA6BtD,wBAAgB,YAAY,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAiBtD"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Memoized assistant message renderer. A settled assistant message has a stable
3
+ * `text` string, so `React.memo` skips its (expensive Streamdown) render
4
+ * entirely while a later message streams. This turns the per-token cost from
5
+ * O(N·M) markdown parses into O(M) — only the streaming message re-renders.
6
+ *
7
+ * While the markdown chunk loads, render the raw text (preformatted) so content
8
+ * is visible immediately and reflows into rendered markdown once resolved.
9
+ *
10
+ * `streaming` (the message's `live` flag) drives a paced typewriter reveal: while
11
+ * live, the text is metered out word by word at a controlled rate (decoupled from
12
+ * how fast it arrives — see `useRevealedText`), and the revealed prefix is fed to
13
+ * Streamdown for the leading-edge fade. `animating` stays true until the reveal
14
+ * has caught up, so the fade/incomplete-markdown handling persists through the
15
+ * brief tail after the stream ends rather than snapping to static mid-word.
16
+ */
17
+ export declare const AssistantMessage: import("react").MemoExoticComponent<({ text, streaming, }: {
18
+ text: string;
19
+ streaming?: boolean;
20
+ }) => import("react/jsx-runtime").JSX.Element>;
21
+ //# sourceMappingURL=AssistantMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantMessage.d.ts","sourceRoot":"","sources":["../../../../src/features/transcript/components/AssistantMessage.tsx"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,6DAG1B;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,6CAiBC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type React from "react";
2
+ import type { WebMessage } from "@/session";
3
+ /**
4
+ * Provides a lookup from a tool call id (the id of an `AssignTask` call)
5
+ * to the list of `WebMessage`s that were emitted by the delegated child agent
6
+ * — i.e. messages whose `parentToolCallId === toolCallId`.
7
+ *
8
+ * The `MessageList` builds this index once per render so nested tool renderers
9
+ * (currently `AssignTaskToolRender`) can render their delegated child's
10
+ * activity inline without re-scanning the full message list per row.
11
+ *
12
+ * Mirrors CLI `ChildMessagesContext.tsx`.
13
+ */
14
+ export type ChildMessagesIndex = ReadonlyMap<string, readonly WebMessage[]>;
15
+ type ChildMessagesProviderProps = {
16
+ index: ChildMessagesIndex;
17
+ children: React.ReactNode;
18
+ };
19
+ export declare function ChildMessagesProvider({ index, children, }: ChildMessagesProviderProps): React.ReactElement;
20
+ /**
21
+ * Returns the child messages for `parentToolCallId` from the index built by
22
+ * the nearest `ChildMessagesProvider`. Returns `[]` for unknown ids or when
23
+ * `parentToolCallId` is `undefined`.
24
+ */
25
+ export declare function useChildMessages(parentToolCallId: string | undefined): readonly WebMessage[];
26
+ export {};
27
+ //# sourceMappingURL=ChildMessagesContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChildMessagesContext.d.ts","sourceRoot":"","sources":["../../../../src/features/transcript/components/ChildMessagesContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;AAI5E,KAAK,0BAA0B,GAAG;IAChC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,QAAQ,GACT,EAAE,0BAA0B,GAAG,KAAK,CAAC,YAAY,CAEjD;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,UAAU,EAAE,CAM5F"}
@@ -0,0 +1,5 @@
1
+ export declare function CodeBlock({ code, language }: {
2
+ code: string;
3
+ language: string;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=CodeBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeBlock.d.ts","sourceRoot":"","sources":["../../../../src/features/transcript/components/CodeBlock.tsx"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,2CAmC/E"}
@@ -0,0 +1,17 @@
1
+ import "katex/dist/katex.min.css";
2
+ import "streamdown/styles.css";
3
+ /**
4
+ * The Streamdown-backed markdown body. Lazy-loaded by `AssistantMessage` so the
5
+ * streamdown + KaTeX + Shiki dependency graph lands in an async chunk instead of
6
+ * the entry bundle.
7
+ *
8
+ * `streaming` reflects the message's `live` flag: while a message is still
9
+ * streaming we run streamdown in `mode="streaming"` (parses incomplete markdown,
10
+ * animates incoming tokens); once settled we switch to `mode="static"` — the
11
+ * correct, cheaper render for complete text with no animation.
12
+ */
13
+ export default function MarkdownBody({ text, streaming, }: {
14
+ text: string;
15
+ streaming?: boolean;
16
+ }): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=MarkdownBody.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownBody.d.ts","sourceRoot":"","sources":["../../../../src/features/transcript/components/MarkdownBody.tsx"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC;AAKlC,OAAO,uBAAuB,CAAC;AAgF/B;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,IAAI,EACJ,SAAiB,GAClB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,2CAgDA"}
@@ -0,0 +1,24 @@
1
+ import type { RefObject } from "react";
2
+ import type { WebMessage } from "@/session";
3
+ export declare const messageListClassName = "flex flex-col gap-2 sm:gap-3";
4
+ /**
5
+ * `MessageList` — thin dispatcher (Structure A).
6
+ *
7
+ * - When `scrollRef` is provided (top-level, from `App`): renders the virtualized
8
+ * path via `<VirtualizedRows>` which calls `useVirtualizer` at its own top level.
9
+ * - When `scrollRef` is absent (nested `renderNestedMessageList`, or standalone
10
+ * unit tests that omit it): renders the existing plain `rows.map` into a flex
11
+ * container — exact same output as before virtualization.
12
+ *
13
+ * The `ChildMessagesProvider` and `NestedMessageListProvider` wrap BOTH branches
14
+ * so nested rendering keeps working on either path.
15
+ *
16
+ * `messageListClassName` is preserved (used by `mobile-layout.test.ts`) and
17
+ * applied on the plain (nested) path. The virtualized sizer uses its own
18
+ * positioning styles.
19
+ */
20
+ export declare function MessageList({ messages, scrollRef, }: {
21
+ messages: WebMessage[];
22
+ scrollRef?: RefObject<HTMLElement | null>;
23
+ }): import("react/jsx-runtime").JSX.Element;
24
+ //# sourceMappingURL=MessageList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../../src/features/transcript/components/MessageList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAmC,UAAU,EAAE,MAAM,WAAW,CAAC;AAU7E,eAAO,MAAM,oBAAoB,iCAAiC,CAAC;AAuKnE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC3C,2CAiBA"}
@@ -0,0 +1,18 @@
1
+ import type React from "react";
2
+ import type { WebMessage } from "@/session";
3
+ /**
4
+ * Provides a render function for rendering a nested list of messages.
5
+ * Used by `AssignTaskToolRender` to render the expanded sub-tree inline
6
+ * without importing `MessageList` directly (avoids the
7
+ * `MessageList → registry → AssignTaskToolRender → MessageList` cycle).
8
+ *
9
+ * `MessageList` provides this context; `AssignTaskToolRender` consumes it.
10
+ */
11
+ export type NestedMessageListRender = (messages: WebMessage[]) => React.ReactElement | null;
12
+ export declare const NestedMessageListProvider: React.Provider<NestedMessageListRender | null>;
13
+ /**
14
+ * Returns the nested message list render function from the nearest provider,
15
+ * or `null` if no provider is present (collapsed / standalone render).
16
+ */
17
+ export declare function useNestedMessageListRender(): NestedMessageListRender | null;
18
+ //# sourceMappingURL=NestedMessageListContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NestedMessageListContext.d.ts","sourceRoot":"","sources":["../../../../src/features/transcript/components/NestedMessageListContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAI5F,eAAO,MAAM,yBAAyB,gDAAoC,CAAC;AAE3E;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,uBAAuB,GAAG,IAAI,CAE3E"}
@@ -0,0 +1,5 @@
1
+ import type { ProcessingState } from "../lib/processing-state";
2
+ export declare function ProcessingIndicator({ state }: {
3
+ state: ProcessingState;
4
+ }): import("react/jsx-runtime").JSX.Element | null;
5
+ //# sourceMappingURL=ProcessingIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessingIndicator.d.ts","sourceRoot":"","sources":["../../../../src/features/transcript/components/ProcessingIndicator.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAoB/D,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,eAAe,CAAA;CAAE,kDAgBxE"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Concatenates all stylesheet files from src/styles/ into a single string.
3
+ * Used by tests that assert on CSS rules.
4
+ */
5
+ export declare function readStyles(): string;
6
+ //# sourceMappingURL=styles-test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles-test-utils.d.ts","sourceRoot":"","sources":["../../../../src/features/transcript/components/styles-test-utils.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAKnC"}
@@ -0,0 +1,14 @@
1
+ import type { ToolMessageStatus } from "@/session";
2
+ /**
3
+ * Bare (read-only) row content: a tight `[icon] phrase · arg · meta` line. On
4
+ * failure, an inline error block sits flush below (no card).
5
+ */
6
+ export declare function BareLine({ status, toolName, phrase, arg, meta, error, }: {
7
+ status: ToolMessageStatus;
8
+ toolName: string;
9
+ phrase: string;
10
+ arg?: string;
11
+ meta?: string;
12
+ error?: string;
13
+ }): import("react/jsx-runtime").JSX.Element;
14
+ //# sourceMappingURL=BareLine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BareLine.d.ts","sourceRoot":"","sources":["../../../../../src/features/transcript/components/tool-display/BareLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAmBnD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EACvB,MAAM,EACN,QAAQ,EACR,MAAM,EACN,GAAG,EACH,IAAI,EACJ,KAAK,GACN,EAAE;IACD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,2CA6CA"}
@@ -0,0 +1,31 @@
1
+ import type { ReactNode } from "react";
2
+ import type { ToolMessageStatus } from "@/session";
3
+ /**
4
+ * Carded tool content: a clickable header (`[icon] phrase · arg | meta + chevron`)
5
+ * over an expandable body. `alwaysOpen` (Todo, Ask) disables the header and drops
6
+ * the chevron; the body is then always shown. The icon sits inside the header as
7
+ * the leading grid column (no external gutter needed).
8
+ *
9
+ * When `stacked` is true (Bash/FileEdit with a description), the header renders
10
+ * two rows: the phrase (description) on top and the arg (command) below it in
11
+ * mono, so neither is truncated.
12
+ */
13
+ export declare function Card({ status, toolName, phrase, arg, meta, boxedPrefix, expanded, onToggle, alwaysOpen, wrapArg, stacked, children, }: {
14
+ status: ToolMessageStatus;
15
+ toolName: string;
16
+ phrase: string;
17
+ arg?: string;
18
+ meta?: ReactNode;
19
+ boxedPrefix?: string;
20
+ expanded: boolean;
21
+ onToggle: () => void;
22
+ alwaysOpen?: boolean;
23
+ /** When true the arg wraps instead of truncating, so the full value is visible
24
+ * in the header (e.g. a long Bash command). */
25
+ wrapArg?: boolean;
26
+ /** When true the phrase acts as a description line and the arg drops to a
27
+ * second row below it. */
28
+ stacked?: boolean;
29
+ children?: ReactNode;
30
+ }): import("react/jsx-runtime").JSX.Element;
31
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../../../src/features/transcript/components/tool-display/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAkCnD;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,EACnB,MAAM,EACN,QAAQ,EACR,MAAM,EACN,GAAG,EACH,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAkB,EAClB,OAAe,EACf,OAAe,EACf,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;oDACgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;+BAC2B;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,2CA6EA"}
@@ -0,0 +1,15 @@
1
+ import type { ToolWebMessage } from "@/session";
2
+ /**
3
+ * A run of consecutive tool calls. While live (any tool non-terminal) or when the
4
+ * run has a single tool, it renders the full spine: a `before:` hairline in the
5
+ * gutter (center 14.5px) from the first node center (top 17px) to the last (bottom
6
+ * 17px); each node disc masks it. Rows sit at a uniform 3px gap.
7
+ *
8
+ * Once settled with ≥ 2 tools, it collapses by default to a single natural
9
+ * summary line (`TurnSummaryLine`) that toggles the spine. Expand state is local
10
+ * and resets on virtualization unmount (scroll-away) — by design.
11
+ */
12
+ export declare function Turn({ tools }: {
13
+ tools: ToolWebMessage[];
14
+ }): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=Turn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Turn.d.ts","sourceRoot":"","sources":["../../../../../src/features/transcript/components/tool-display/Turn.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA0FhD;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,cAAc,EAAE,CAAA;CAAE,2CA4B1D"}
@@ -0,0 +1,3 @@
1
+ import type { ToolRenderer } from "./types";
2
+ export declare function getToolRenderer(toolName: string): ToolRenderer;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/transcript/components/tool-display/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAoB5C,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAE9D"}
@@ -0,0 +1,4 @@
1
+ import type { ToolRendererProps } from "../types";
2
+ /** AskUserTool: carded, always-open Q&A. Error collapses to a failed header. */
3
+ export declare function AskUserRenderer({ message }: ToolRendererProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=AskUserRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskUserRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/features/transcript/components/tool-display/renderers/AskUserRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAsBlD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,iBAAiB,2CAmD7D"}
@@ -0,0 +1,9 @@
1
+ import type { ToolRendererProps } from "../types";
2
+ /**
3
+ * AssignTask: carded. Header is boxed agent name + description + elapsed. Collapsed
4
+ * body previews the last child tool lines (or message.text); expanded body renders
5
+ * the full nested sub-tree via the NestedMessageList context (parentToolCallId
6
+ * stripped so the nested root-filter keeps the children).
7
+ */
8
+ export declare function AssignTaskRenderer({ expanded, message, onToggle }: ToolRendererProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=AssignTaskRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssignTaskRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/features/transcript/components/tool-display/renderers/AssignTaskRenderer.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAgClD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CA0DpF"}
@@ -0,0 +1,8 @@
1
+ import type { ToolRendererProps } from "../types";
2
+ /**
3
+ * Read-only tools (FileRead, ViewFile, Glob, Grep, Ls, Lsp, LoadSkill, WebFetch,
4
+ * WebSearch) render as a bare one-liner on the spine. Success adds no color; on
5
+ * error the meta reads "failed" and the first lines of output show inline.
6
+ */
7
+ export declare function BareToolRenderer({ message }: ToolRendererProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=BareToolRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BareToolRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/features/transcript/components/tool-display/renderers/BareToolRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,iBAAiB,2CAmB9D"}
@@ -0,0 +1,11 @@
1
+ import type { ToolRendererProps } from "../types";
2
+ /**
3
+ * Bash: carded. The header shows the full command (wraps instead of truncating).
4
+ * When expanded the body leads with an **args** section (command, description,
5
+ * cwd, … as YAML) so the full input is visible, followed by the command output.
6
+ * While running with a streaming preview, the output shows the tail plus a
7
+ * "… N earlier lines" elide. Meta is the elapsed time, prefixed by an accent
8
+ * "running" / danger "failed" state word.
9
+ */
10
+ export declare function BashRenderer({ expanded, message, onToggle }: ToolRendererProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=BashRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BashRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/features/transcript/components/tool-display/renderers/BashRenderer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAkF9E"}
@@ -0,0 +1,4 @@
1
+ import type { ToolRendererProps } from "../types";
2
+ /** FileEdit: carded; expanded body is a unified diff (reuses @/features/diff). */
3
+ export declare function FileEditRenderer({ expanded, message, onToggle }: ToolRendererProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=FileEditRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileEditRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/features/transcript/components/tool-display/renderers/FileEditRenderer.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CA0BlF"}
@@ -0,0 +1,4 @@
1
+ import type { ToolRendererProps } from "../types";
2
+ /** FileNew: carded; expanded body shows the new file content as all-additions. */
3
+ export declare function FileNewRenderer({ expanded, message, onToggle }: ToolRendererProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=FileNewRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileNewRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/features/transcript/components/tool-display/renderers/FileNewRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAiBjF"}
@@ -0,0 +1,4 @@
1
+ import type { ToolRendererProps } from "../types";
2
+ /** TodoWrite: carded, always-open checklist. The in-progress item carries accent. */
3
+ export declare function TodoWriteRenderer({ message }: ToolRendererProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=TodoWriteRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TodoWriteRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/features/transcript/components/tool-display/renderers/TodoWriteRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAoBlD,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,iBAAiB,2CA+C/D"}
@@ -0,0 +1,4 @@
1
+ import type { ToolRendererProps } from "../types";
2
+ /** Fallback for unmapped tools: carded with generic args / diff / result sections. */
3
+ export declare function UnknownRenderer({ expanded, message, onToggle }: ToolRendererProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=UnknownRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnknownRenderer.d.ts","sourceRoot":"","sources":["../../../../../../src/features/transcript/components/tool-display/renderers/UnknownRenderer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAalD,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAuCjF"}
@@ -0,0 +1,4 @@
1
+ import { type LucideIcon } from "lucide-react";
2
+ /** Identity icon for the row node; generic wrench for unmapped tools. */
3
+ export declare function getToolIcon(toolName: string): LucideIcon;
4
+ //# sourceMappingURL=tool-icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-icon.d.ts","sourceRoot":"","sources":["../../../../../src/features/transcript/components/tool-display/tool-icon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,UAAU,EAOhB,MAAM,cAAc,CAAC;AAoBtB,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAExD"}
@@ -0,0 +1,9 @@
1
+ import type { ToolWebMessage } from "@/session";
2
+ /**
3
+ * Right-aligned meta string for a bare tool row (e.g. "7 matches", "3 lines").
4
+ * Reads `structured.count` defensively; FileRead derives a line count from text.
5
+ * Returns undefined when nothing is derivable (the column renders empty) or on
6
+ * error/rejected (the caller shows "failed" instead).
7
+ */
8
+ export declare function getToolMeta(message: ToolWebMessage): string | undefined;
9
+ //# sourceMappingURL=tool-meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-meta.d.ts","sourceRoot":"","sources":["../../../../../src/features/transcript/components/tool-display/tool-meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAsBhD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAavE"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Card shell: only running + error tint the border (accent-border). The status
3
+ * tint is carried by the inline icon and text, not the card border.
4
+ */
5
+ export declare const cardVariants: (props?: ({
6
+ status?: "error" | "approved" | "ok" | "pending" | "rejected" | "running" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ //# sourceMappingURL=tool-variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-variants.d.ts","sourceRoot":"","sources":["../../../../../src/features/transcript/components/tool-display/tool-variants.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,YAAY;;8EAYvB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ReactElement } from "react";
2
+ import type { ToolWebMessage } from "@/session";
3
+ export interface ToolRendererProps {
4
+ message: ToolWebMessage;
5
+ expanded: boolean;
6
+ onToggle: () => void;
7
+ /** Read-only tools render as a bare one-liner (no card). */
8
+ bare?: boolean;
9
+ }
10
+ export type ToolRenderer = (props: ToolRendererProps) => ReactElement;
11
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/features/transcript/components/tool-display/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ToolMessageStatus } from "@/session";
2
+ /**
3
+ * Re-renders once per second while status is "running" so that
4
+ * elapsed-time displays stay current. Returns nothing; consumers
5
+ * compute elapsed values from props on every render.
6
+ */
7
+ export declare function useLiveTick(status: ToolMessageStatus): void;
8
+ //# sourceMappingURL=use-live-tick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-live-tick.d.ts","sourceRoot":"","sources":["../../../../src/features/transcript/hooks/use-live-tick.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAQ3D"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Hard ceiling on how many characters a single frame may reveal. This is what
3
+ * makes the reveal *strict*: no matter how large a batch the transport delivers
4
+ * in one frame (its per-frame coalescing can drop several rows at once), the
5
+ * reveal still advances by at most a fraction of a row, so words always appear
6
+ * as a sequential leading edge rather than a block lighting up together.
7
+ * (A word straddling the cap is completed so we never show a half-word.)
8
+ */
9
+ export declare const MAX_CHARS_PER_FRAME = 200;
10
+ /**
11
+ * Paced "typewriter" reveal. Returns a growing prefix of `text` that advances at
12
+ * a controlled rate, decoupled from how fast `text` actually arrives.
13
+ *
14
+ * Why this exists: streamdown only fades text *as it arrives*, and the transport
15
+ * coalesces streamed chunks to one render per animation frame (transport.ts), so
16
+ * each render can drop several rows' worth of words that then fade together —
17
+ * the native fade can never be strictly sequential. This hook holds the target
18
+ * text and meters it out word by word, capped per frame, so one row fills before
19
+ * the next begins regardless of arrival batching. Feed the result to streamdown
20
+ * for the leading-edge fade.
21
+ *
22
+ * Settled messages (history, or `streaming` false on mount) are returned whole
23
+ * with no animation. While a message streams, the reveal advances toward the
24
+ * latest text; once the stream ends it finishes revealing any remainder at pace
25
+ * (no abrupt snap) and then stops.
26
+ */
27
+ export declare function useRevealedText(text: string, streaming: boolean): string;
28
+ //# sourceMappingURL=use-revealed-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-revealed-text.d.ts","sourceRoot":"","sources":["../../../../src/features/transcript/hooks/use-revealed-text.ts"],"names":[],"mappings":"AAmBA;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAYvC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CA2DxE"}
@@ -0,0 +1,6 @@
1
+ export { MessageList } from "./components/MessageList";
2
+ export { ProcessingIndicator } from "./components/ProcessingIndicator";
3
+ export { deriveProcessingState, type ProcessingState } from "./lib/processing-state";
4
+ export type { TranscriptRow } from "./lib/transcript-rows";
5
+ export { buildChildIndex, buildTranscriptRows } from "./lib/transcript-rows";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/transcript/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACrF,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ToolMessageStatus, ToolWebMessage, WebMessage } from "@/session";
2
+ export type MessageGroup = {
3
+ id: string;
4
+ kind: "single";
5
+ message: WebMessage;
6
+ };
7
+ export declare function worstStatus(tools: ToolWebMessage[]): ToolMessageStatus;
8
+ export declare function groupMessages(messages: WebMessage[]): MessageGroup[];
9
+ //# sourceMappingURL=message-groups.d.ts.map