@flanksource/clicky-ui 0.3.44 → 0.3.46

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 (537) hide show
  1. package/README.md +24 -0
  2. package/dist/ai.cjs +4 -2
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +3 -1
  5. package/dist/components/MdxEditorField.cjs +40 -22
  6. package/dist/components/MdxEditorField.cjs.map +1 -1
  7. package/dist/components/MdxEditorField.d.ts.map +1 -1
  8. package/dist/components/MdxEditorField.js +41 -23
  9. package/dist/components/MdxEditorField.js.map +1 -1
  10. package/dist/components/json-schema-form-item-summary.cjs +6 -1
  11. package/dist/components/json-schema-form-item-summary.cjs.map +1 -1
  12. package/dist/components/json-schema-form-item-summary.d.ts.map +1 -1
  13. package/dist/components/json-schema-form-item-summary.js +6 -1
  14. package/dist/components/json-schema-form-item-summary.js.map +1 -1
  15. package/dist/data/AccessMark.cjs +23 -0
  16. package/dist/data/AccessMark.cjs.map +1 -0
  17. package/dist/data/AccessMark.d.ts +11 -0
  18. package/dist/data/AccessMark.d.ts.map +1 -0
  19. package/dist/data/AccessMark.js +23 -0
  20. package/dist/data/AccessMark.js.map +1 -0
  21. package/dist/data/CodeBlock.cjs +3 -2
  22. package/dist/data/CodeBlock.cjs.map +1 -1
  23. package/dist/data/CodeBlock.d.ts +3 -1
  24. package/dist/data/CodeBlock.d.ts.map +1 -1
  25. package/dist/data/CodeBlock.js +3 -2
  26. package/dist/data/CodeBlock.js.map +1 -1
  27. package/dist/data/CodeDiff.cjs +116 -23
  28. package/dist/data/CodeDiff.cjs.map +1 -1
  29. package/dist/data/CodeDiff.d.ts +26 -0
  30. package/dist/data/CodeDiff.d.ts.map +1 -1
  31. package/dist/data/CodeDiff.js +116 -23
  32. package/dist/data/CodeDiff.js.map +1 -1
  33. package/dist/data/GraphDiagram.cjs +75 -11
  34. package/dist/data/GraphDiagram.cjs.map +1 -1
  35. package/dist/data/GraphDiagram.d.ts +17 -2
  36. package/dist/data/GraphDiagram.d.ts.map +1 -1
  37. package/dist/data/GraphDiagram.js +76 -12
  38. package/dist/data/GraphDiagram.js.map +1 -1
  39. package/dist/data/GraphDiagramGroups.cjs +100 -0
  40. package/dist/data/GraphDiagramGroups.cjs.map +1 -0
  41. package/dist/data/GraphDiagramGroups.d.ts +24 -0
  42. package/dist/data/GraphDiagramGroups.d.ts.map +1 -0
  43. package/dist/data/GraphDiagramGroups.js +100 -0
  44. package/dist/data/GraphDiagramGroups.js.map +1 -0
  45. package/dist/data/GraphDiagramNodes.cjs +46 -51
  46. package/dist/data/GraphDiagramNodes.cjs.map +1 -1
  47. package/dist/data/GraphDiagramNodes.d.ts +8 -9
  48. package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
  49. package/dist/data/GraphDiagramNodes.js +46 -51
  50. package/dist/data/GraphDiagramNodes.js.map +1 -1
  51. package/dist/data/JsonView.cjs +118 -49
  52. package/dist/data/JsonView.cjs.map +1 -1
  53. package/dist/data/JsonView.d.ts +13 -10
  54. package/dist/data/JsonView.d.ts.map +1 -1
  55. package/dist/data/JsonView.js +118 -49
  56. package/dist/data/JsonView.js.map +1 -1
  57. package/dist/data/MarkdownEditor.cjs +2 -2
  58. package/dist/data/MarkdownEditor.cjs.map +1 -1
  59. package/dist/data/MarkdownEditor.js +2 -2
  60. package/dist/data/MarkdownEditor.js.map +1 -1
  61. package/dist/data/TreeNode.cjs +1 -1
  62. package/dist/data/TreeNode.cjs.map +1 -1
  63. package/dist/data/TreeNode.d.ts.map +1 -1
  64. package/dist/data/TreeNode.js +1 -1
  65. package/dist/data/TreeNode.js.map +1 -1
  66. package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
  67. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
  68. package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
  69. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  70. package/dist/data/ai/AdvancedChatConfig.js +91 -250
  71. package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
  72. package/dist/data/ai/ChatButton.cjs +2 -0
  73. package/dist/data/ai/ChatButton.cjs.map +1 -1
  74. package/dist/data/ai/ChatButton.d.ts +1 -1
  75. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  76. package/dist/data/ai/ChatButton.js +2 -0
  77. package/dist/data/ai/ChatButton.js.map +1 -1
  78. package/dist/data/ai/ChatFab.cjs +5 -1
  79. package/dist/data/ai/ChatFab.cjs.map +1 -1
  80. package/dist/data/ai/ChatFab.d.ts +5 -1
  81. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  82. package/dist/data/ai/ChatFab.js +5 -1
  83. package/dist/data/ai/ChatFab.js.map +1 -1
  84. package/dist/data/ai/ChatWindow.cjs +2 -8
  85. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  86. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  87. package/dist/data/ai/ChatWindow.js +2 -8
  88. package/dist/data/ai/ChatWindow.js.map +1 -1
  89. package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
  90. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  91. package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
  92. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  93. package/dist/data/ai/ChatWindow.runtime.js +0 -5
  94. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  95. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
  96. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  97. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  98. package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
  99. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  100. package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
  101. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  102. package/dist/data/ai/SessionInspector.approvals.js +3 -6
  103. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  104. package/dist/data/ai/SessionViewer.cjs +13 -4
  105. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  106. package/dist/data/ai/SessionViewer.d.ts +5 -1
  107. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  108. package/dist/data/ai/SessionViewer.header.cjs +1 -1
  109. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  110. package/dist/data/ai/SessionViewer.header.js +1 -1
  111. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  112. package/dist/data/ai/SessionViewer.js +13 -4
  113. package/dist/data/ai/SessionViewer.js.map +1 -1
  114. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  115. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  116. package/dist/data/ai/SessionViewer.model.d.ts +1 -0
  117. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  118. package/dist/data/ai/SessionViewer.model.js +2 -0
  119. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  120. package/dist/data/ai/SessionViewer.rows.cjs +41 -27
  121. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  122. package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
  123. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  124. package/dist/data/ai/SessionViewer.rows.js +41 -27
  125. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  126. package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
  127. package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
  128. package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
  129. package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
  130. package/dist/data/ai/SessionViewer.tokens.js +35 -0
  131. package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
  132. package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
  133. package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
  134. package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
  135. package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
  136. package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
  137. package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
  138. package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
  139. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
  140. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  141. package/dist/data/ai/SessionViewer.tool-details.js +3 -1
  142. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
  143. package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
  144. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  145. package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
  146. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  147. package/dist/data/ai/SessionViewer.tool-row.js +55 -35
  148. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  149. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  150. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  151. package/dist/data/ai/SessionViewerMenu.cjs +18 -1
  152. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  153. package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
  154. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  155. package/dist/data/ai/SessionViewerMenu.js +18 -1
  156. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  157. package/dist/data/ai/ToolPreferences.cjs +149 -143
  158. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  159. package/dist/data/ai/ToolPreferences.d.ts +20 -6
  160. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  161. package/dist/data/ai/ToolPreferences.js +151 -146
  162. package/dist/data/ai/ToolPreferences.js.map +1 -1
  163. package/dist/data/ai/ToolPreferences.model.cjs +14 -10
  164. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  165. package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
  166. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  167. package/dist/data/ai/ToolPreferences.model.js +15 -11
  168. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  169. package/dist/data/ai/ToolPreferencesList.cjs +1 -0
  170. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  171. package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
  172. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  173. package/dist/data/ai/ToolPreferencesList.js +2 -1
  174. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  175. package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
  176. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  177. package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
  178. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  179. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
  180. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
  181. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
  182. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
  183. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
  184. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
  185. package/dist/data/ai/ToolSchemaBrowser.js +53 -54
  186. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  187. package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
  188. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
  189. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
  190. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
  191. package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
  192. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
  193. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
  194. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
  195. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
  196. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
  197. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
  198. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
  199. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
  200. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
  201. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
  202. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
  203. package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
  204. package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
  205. package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
  206. package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
  207. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
  208. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
  209. package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
  210. package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
  211. package/dist/data/ai/index.d.ts +2 -2
  212. package/dist/data/ai/index.d.ts.map +1 -1
  213. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
  214. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
  215. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
  216. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
  217. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
  218. package/dist/data/ai/session-token-sizing.d.ts +32 -0
  219. package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
  220. package/dist/data/ai/use-session-token-sizing.cjs +73 -0
  221. package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
  222. package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
  223. package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
  224. package/dist/data/ai/use-session-token-sizing.js +73 -0
  225. package/dist/data/ai/use-session-token-sizing.js.map +1 -0
  226. package/dist/data/call-graph/CallGraph.cjs +269 -0
  227. package/dist/data/call-graph/CallGraph.cjs.map +1 -0
  228. package/dist/data/call-graph/CallGraph.d.ts +78 -0
  229. package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
  230. package/dist/data/call-graph/CallGraph.js +269 -0
  231. package/dist/data/call-graph/CallGraph.js.map +1 -0
  232. package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
  233. package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
  234. package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
  235. package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
  236. package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
  237. package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
  238. package/dist/data/call-graph/CallGraphMembers.cjs +51 -0
  239. package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
  240. package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
  241. package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
  242. package/dist/data/call-graph/CallGraphMembers.js +51 -0
  243. package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
  244. package/dist/data/call-graph/CallGraphParts.cjs +204 -0
  245. package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
  246. package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
  247. package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
  248. package/dist/data/call-graph/CallGraphParts.js +204 -0
  249. package/dist/data/call-graph/CallGraphParts.js.map +1 -0
  250. package/dist/data/call-graph/CallGraphToolbar.cjs +198 -0
  251. package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
  252. package/dist/data/call-graph/CallGraphToolbar.d.ts +55 -0
  253. package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
  254. package/dist/data/call-graph/CallGraphToolbar.js +198 -0
  255. package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
  256. package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
  257. package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
  258. package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
  259. package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
  260. package/dist/data/call-graph/call-graph-exclude.js +75 -0
  261. package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
  262. package/dist/data/call-graph/call-graph-labels.cjs +96 -0
  263. package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
  264. package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
  265. package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
  266. package/dist/data/call-graph/call-graph-labels.js +96 -0
  267. package/dist/data/call-graph/call-graph-labels.js.map +1 -0
  268. package/dist/data/call-graph/call-graph-model.cjs +312 -0
  269. package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
  270. package/dist/data/call-graph/call-graph-model.d.ts +138 -0
  271. package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
  272. package/dist/data/call-graph/call-graph-model.js +312 -0
  273. package/dist/data/call-graph/call-graph-model.js.map +1 -0
  274. package/dist/data/call-graph/call-graph-vocabulary.cjs +195 -0
  275. package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
  276. package/dist/data/call-graph/call-graph-vocabulary.d.ts +76 -0
  277. package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
  278. package/dist/data/call-graph/call-graph-vocabulary.js +195 -0
  279. package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
  280. package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
  281. package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
  282. package/dist/data/call-graph/index.d.ts +7 -0
  283. package/dist/data/call-graph/index.d.ts.map +1 -0
  284. package/dist/data/call-graph/types.cjs +5 -0
  285. package/dist/data/call-graph/types.cjs.map +1 -0
  286. package/dist/data/call-graph/types.d.ts +140 -0
  287. package/dist/data/call-graph/types.d.ts.map +1 -0
  288. package/dist/data/call-graph/types.js +5 -0
  289. package/dist/data/call-graph/types.js.map +1 -0
  290. package/dist/data/call-graph/use-call-graph.cjs +93 -0
  291. package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
  292. package/dist/data/call-graph/use-call-graph.d.ts +24 -0
  293. package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
  294. package/dist/data/call-graph/use-call-graph.js +93 -0
  295. package/dist/data/call-graph/use-call-graph.js.map +1 -0
  296. package/dist/data/chat/Chat.cjs +39 -15
  297. package/dist/data/chat/Chat.cjs.map +1 -1
  298. package/dist/data/chat/Chat.d.ts.map +1 -1
  299. package/dist/data/chat/Chat.fixtures.cjs +2 -2
  300. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  301. package/dist/data/chat/Chat.fixtures.js +2 -2
  302. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  303. package/dist/data/chat/Chat.js +40 -16
  304. package/dist/data/chat/Chat.js.map +1 -1
  305. package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
  306. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  307. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  308. package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
  309. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  310. package/dist/data/chat/ContextMeter.bar.cjs +5 -8
  311. package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
  312. package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
  313. package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
  314. package/dist/data/chat/ContextMeter.bar.js +5 -8
  315. package/dist/data/chat/ContextMeter.bar.js.map +1 -1
  316. package/dist/data/chat/ContextMeter.cjs +18 -19
  317. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  318. package/dist/data/chat/ContextMeter.d.ts +1 -1
  319. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  320. package/dist/data/chat/ContextMeter.js +18 -19
  321. package/dist/data/chat/ContextMeter.js.map +1 -1
  322. package/dist/data/chat/Conversation.cjs +2 -1
  323. package/dist/data/chat/Conversation.cjs.map +1 -1
  324. package/dist/data/chat/Conversation.d.ts +4 -1
  325. package/dist/data/chat/Conversation.d.ts.map +1 -1
  326. package/dist/data/chat/Conversation.js +2 -1
  327. package/dist/data/chat/Conversation.js.map +1 -1
  328. package/dist/data/chat/Message.cjs +39 -12
  329. package/dist/data/chat/Message.cjs.map +1 -1
  330. package/dist/data/chat/Message.d.ts +1 -1
  331. package/dist/data/chat/Message.d.ts.map +1 -1
  332. package/dist/data/chat/Message.js +40 -13
  333. package/dist/data/chat/Message.js.map +1 -1
  334. package/dist/data/chat/ToolCall.cjs +60 -5
  335. package/dist/data/chat/ToolCall.cjs.map +1 -1
  336. package/dist/data/chat/ToolCall.d.ts +7 -2
  337. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  338. package/dist/data/chat/ToolCall.js +60 -5
  339. package/dist/data/chat/ToolCall.js.map +1 -1
  340. package/dist/data/chat/approval.cjs.map +1 -1
  341. package/dist/data/chat/approval.d.ts +2 -2
  342. package/dist/data/chat/approval.d.ts.map +1 -1
  343. package/dist/data/chat/approval.js.map +1 -1
  344. package/dist/data/chat/tool-policy.cjs +59 -2
  345. package/dist/data/chat/tool-policy.cjs.map +1 -1
  346. package/dist/data/chat/tool-policy.d.ts +9 -0
  347. package/dist/data/chat/tool-policy.d.ts.map +1 -1
  348. package/dist/data/chat/tool-policy.js +59 -2
  349. package/dist/data/chat/tool-policy.js.map +1 -1
  350. package/dist/data/chat/types.cjs +6 -0
  351. package/dist/data/chat/types.cjs.map +1 -1
  352. package/dist/data/chat/types.d.ts +13 -4
  353. package/dist/data/chat/types.d.ts.map +1 -1
  354. package/dist/data/chat/types.js +7 -1
  355. package/dist/data/chat/types.js.map +1 -1
  356. package/dist/data/chat/usage-snapshot.cjs +11 -6
  357. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  358. package/dist/data/chat/usage-snapshot.d.ts +0 -1
  359. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  360. package/dist/data/chat/usage-snapshot.js +11 -6
  361. package/dist/data/chat/usage-snapshot.js.map +1 -1
  362. package/dist/data/data-access.cjs +8 -0
  363. package/dist/data/data-access.cjs.map +1 -0
  364. package/dist/data/data-access.d.ts +5 -0
  365. package/dist/data/data-access.d.ts.map +1 -0
  366. package/dist/data/data-access.js +8 -0
  367. package/dist/data/data-access.js.map +1 -0
  368. package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
  369. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  370. package/dist/data/diagnostics/StackFrameRow.js +3 -3
  371. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  372. package/dist/data/git/GitChangeList.cjs +6 -2
  373. package/dist/data/git/GitChangeList.cjs.map +1 -1
  374. package/dist/data/git/GitChangeList.d.ts +6 -1
  375. package/dist/data/git/GitChangeList.d.ts.map +1 -1
  376. package/dist/data/git/GitChangeList.js +6 -2
  377. package/dist/data/git/GitChangeList.js.map +1 -1
  378. package/dist/data/graph-columns-layout.cjs +61 -14
  379. package/dist/data/graph-columns-layout.cjs.map +1 -1
  380. package/dist/data/graph-columns-layout.d.ts +42 -0
  381. package/dist/data/graph-columns-layout.d.ts.map +1 -1
  382. package/dist/data/graph-columns-layout.js +61 -14
  383. package/dist/data/graph-columns-layout.js.map +1 -1
  384. package/dist/data/graph-diagram-model.cjs +5 -0
  385. package/dist/data/graph-diagram-model.cjs.map +1 -1
  386. package/dist/data/graph-diagram-model.d.ts +24 -0
  387. package/dist/data/graph-diagram-model.d.ts.map +1 -1
  388. package/dist/data/graph-diagram-model.js +5 -0
  389. package/dist/data/graph-diagram-model.js.map +1 -1
  390. package/dist/data/graph-edge-routing.cjs +9 -3
  391. package/dist/data/graph-edge-routing.cjs.map +1 -1
  392. package/dist/data/graph-edge-routing.d.ts +2 -0
  393. package/dist/data/graph-edge-routing.d.ts.map +1 -1
  394. package/dist/data/graph-edge-routing.js +9 -3
  395. package/dist/data/graph-edge-routing.js.map +1 -1
  396. package/dist/data/graph-group-window.cjs +60 -0
  397. package/dist/data/graph-group-window.cjs.map +1 -0
  398. package/dist/data/graph-group-window.d.ts +33 -0
  399. package/dist/data/graph-group-window.d.ts.map +1 -0
  400. package/dist/data/graph-group-window.js +60 -0
  401. package/dist/data/graph-group-window.js.map +1 -0
  402. package/dist/data/json-view/JsonSource.cjs +84 -0
  403. package/dist/data/json-view/JsonSource.cjs.map +1 -0
  404. package/dist/data/json-view/JsonSource.d.ts +7 -0
  405. package/dist/data/json-view/JsonSource.d.ts.map +1 -0
  406. package/dist/data/json-view/JsonSource.js +84 -0
  407. package/dist/data/json-view/JsonSource.js.map +1 -0
  408. package/dist/data/json-view/parse-prefix.cjs +132 -0
  409. package/dist/data/json-view/parse-prefix.cjs.map +1 -0
  410. package/dist/data/json-view/parse-prefix.d.ts +11 -0
  411. package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
  412. package/dist/data/json-view/parse-prefix.js +132 -0
  413. package/dist/data/json-view/parse-prefix.js.map +1 -0
  414. package/dist/data/json-view/parse-source.cjs +62 -0
  415. package/dist/data/json-view/parse-source.cjs.map +1 -0
  416. package/dist/data/json-view/parse-source.d.ts +16 -0
  417. package/dist/data/json-view/parse-source.d.ts.map +1 -0
  418. package/dist/data/json-view/parse-source.js +62 -0
  419. package/dist/data/json-view/parse-source.js.map +1 -0
  420. package/dist/data/json-view/story-fixtures.d.ts +6 -0
  421. package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
  422. package/dist/data/json-view/types.d.ts +14 -0
  423. package/dist/data/json-view/types.d.ts.map +1 -0
  424. package/dist/data/runtime/RuntimeBar.cjs +2 -5
  425. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  426. package/dist/data/runtime/RuntimeBar.d.ts +2 -4
  427. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  428. package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
  429. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
  430. package/dist/data/runtime/RuntimeBar.fields.js +2 -2
  431. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
  432. package/dist/data/runtime/RuntimeBar.js +2 -5
  433. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  434. package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
  435. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
  436. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
  437. package/dist/data/runtime/RuntimeBar.selection.js +5 -2
  438. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
  439. package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
  440. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  441. package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
  442. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  443. package/dist/data/runtime/RuntimeBarActions.js +1 -5
  444. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  445. package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
  446. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
  447. package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
  448. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
  449. package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
  450. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
  451. package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
  452. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
  453. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
  454. package/dist/data/runtime/RuntimeBarLayout.js +8 -27
  455. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
  456. package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
  457. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  458. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  459. package/dist/data/runtime/RuntimeBarSegment.js +1 -5
  460. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  461. package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
  462. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
  463. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
  464. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
  465. package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
  466. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
  467. package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
  468. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  469. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
  470. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
  471. package/dist/data/use-group-windows.cjs +50 -0
  472. package/dist/data/use-group-windows.cjs.map +1 -0
  473. package/dist/data/use-group-windows.d.ts +27 -0
  474. package/dist/data/use-group-windows.d.ts.map +1 -0
  475. package/dist/data/use-group-windows.js +50 -0
  476. package/dist/data/use-group-windows.js.map +1 -0
  477. package/dist/data/use-pan-zoom.cjs +23 -10
  478. package/dist/data/use-pan-zoom.cjs.map +1 -1
  479. package/dist/data/use-pan-zoom.d.ts +16 -2
  480. package/dist/data/use-pan-zoom.d.ts.map +1 -1
  481. package/dist/data/use-pan-zoom.js +23 -10
  482. package/dist/data/use-pan-zoom.js.map +1 -1
  483. package/dist/data/version-info.cjs +3 -3
  484. package/dist/data/version-info.js +3 -3
  485. package/dist/data.cjs +36 -2
  486. package/dist/data.cjs.map +1 -1
  487. package/dist/data.d.ts +5 -2
  488. package/dist/data.d.ts.map +1 -1
  489. package/dist/data.js +35 -1
  490. package/dist/data.js.map +1 -1
  491. package/dist/hooks/event-hub.cjs +229 -0
  492. package/dist/hooks/event-hub.cjs.map +1 -0
  493. package/dist/hooks/event-hub.d.ts +26 -0
  494. package/dist/hooks/event-hub.d.ts.map +1 -0
  495. package/dist/hooks/event-hub.js +229 -0
  496. package/dist/hooks/event-hub.js.map +1 -0
  497. package/dist/hooks.cjs +2 -0
  498. package/dist/hooks.cjs.map +1 -1
  499. package/dist/hooks.d.ts +1 -0
  500. package/dist/hooks.d.ts.map +1 -1
  501. package/dist/hooks.js +2 -0
  502. package/dist/hooks.js.map +1 -1
  503. package/dist/index.cjs +40 -4
  504. package/dist/index.cjs.map +1 -1
  505. package/dist/index.js +37 -1
  506. package/dist/index.js.map +1 -1
  507. package/dist/layout/Workspace.cjs +13 -4
  508. package/dist/layout/Workspace.cjs.map +1 -1
  509. package/dist/layout/Workspace.d.ts +7 -2
  510. package/dist/layout/Workspace.d.ts.map +1 -1
  511. package/dist/layout/Workspace.js +13 -4
  512. package/dist/layout/Workspace.js.map +1 -1
  513. package/dist/lib/permission-strategies.cjs +71 -11
  514. package/dist/lib/permission-strategies.cjs.map +1 -1
  515. package/dist/lib/permission-strategies.d.ts +3 -0
  516. package/dist/lib/permission-strategies.d.ts.map +1 -1
  517. package/dist/lib/permission-strategies.js +71 -11
  518. package/dist/lib/permission-strategies.js.map +1 -1
  519. package/dist/overlay/modalStack.cjs +13 -6
  520. package/dist/overlay/modalStack.cjs.map +1 -1
  521. package/dist/overlay/modalStack.d.ts.map +1 -1
  522. package/dist/overlay/modalStack.js +13 -6
  523. package/dist/overlay/modalStack.js.map +1 -1
  524. package/dist/styles.css +1 -1
  525. package/package.json +5 -3
  526. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
  527. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
  528. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
  529. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
  530. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
  531. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
  532. package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
  533. package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
  534. package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
  535. package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
  536. package/dist/data/runtime/RuntimeBar.context.js +0 -8
  537. package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { costTotal } from "./session-cost.js";
3
+ import { UiCoins } from "../../icons/components/UiCoins.js";
4
+ import { formatCost, compactTokens } from "../../lib/tokens.js";
5
+ import { UiDatabaseDown, UiDatabaseUp } from "../../icons/components/UiDatabase.js";
6
+ import { UiArrowUp } from "../../icons/components/UiArrowUp.js";
7
+ import { UiArrowDown } from "../../icons/components/UiArrowDown.js";
8
+ import { UiBrain } from "../../icons/components/UiBrain.js";
9
+ const TOKEN_BUCKETS = [
10
+ ["inputTokens", "In", "Input", UiArrowUp],
11
+ ["outputTokens", "Out", "Output", UiArrowDown],
12
+ ["reasoningTokens", "Reasoning", "Reasoning", UiBrain],
13
+ ["cacheReadTokens", "Cache read", "Cache read", UiDatabaseDown],
14
+ ["cacheWriteTokens", "Cache write", "Cache write", UiDatabaseUp]
15
+ ];
16
+ function EstimatedToolCost({
17
+ events,
18
+ detailed = false
19
+ }) {
20
+ var _a;
21
+ const estimates = events.flatMap(
22
+ (event) => event.estimatedCost ? [event.estimatedCost] : []
23
+ );
24
+ if (!estimates.length) {
25
+ return /* @__PURE__ */ jsx(
26
+ "span",
27
+ {
28
+ "aria-label": detailed ? "Estimated tool cost details" : "Estimate unavailable",
29
+ title: "Estimate unavailable",
30
+ className: "shrink-0 text-[11px] text-muted-foreground",
31
+ children: detailed ? "Estimate unavailable" : "—"
32
+ }
33
+ );
34
+ }
35
+ const costs = estimates.map((estimate) => estimate.cost);
36
+ const total = costs.reduce((sum, cost) => sum + costTotal(cost), 0);
37
+ const sharedCalls = (_a = estimates[0]) == null ? void 0 : _a.sharedCalls;
38
+ const allocation = events.length === 1 ? `Model request shared equally across ${sharedCalls} tool call${sharedCalls === 1 ? "" : "s"}.` : `Combined estimate for ${estimates.length} calls; each model request is shared equally across its tool calls.`;
39
+ const description = `${allocation} Includes conversation context and generating the calls. Reading tool results is accounted for in subsequent model requests. Estimated cost in USD.`;
40
+ if (!detailed) {
41
+ const cacheReadTokens = costs.reduce((sum, cost) => sum + (cost.cacheReadTokens ?? 0), 0);
42
+ const cacheReadDescription = `Cache read delta: ${cacheReadTokens.toLocaleString("en-US")} tokens`;
43
+ return /* @__PURE__ */ jsxs(
44
+ "span",
45
+ {
46
+ role: "group",
47
+ "aria-label": "Estimated tool cost",
48
+ title: description,
49
+ className: "inline-flex shrink-0 items-center gap-0.5 whitespace-nowrap text-[11px] tabular-nums text-muted-foreground",
50
+ children: [
51
+ /* @__PURE__ */ jsx(UiCoins, { className: "size-3 shrink-0" }),
52
+ /* @__PURE__ */ jsx("span", { children: total > 0 ? `~${formatCost(total)}` : "—" }),
53
+ cacheReadTokens > 0 && /* @__PURE__ */ jsxs(
54
+ "span",
55
+ {
56
+ role: "group",
57
+ "aria-label": cacheReadDescription,
58
+ title: cacheReadDescription,
59
+ className: "ml-1 inline-flex items-center gap-0.5",
60
+ children: [
61
+ /* @__PURE__ */ jsx(UiDatabaseDown, { className: "size-3 shrink-0" }),
62
+ /* @__PURE__ */ jsxs("span", { children: [
63
+ "+",
64
+ compactTokens(cacheReadTokens)
65
+ ] })
66
+ ]
67
+ }
68
+ )
69
+ ]
70
+ }
71
+ );
72
+ }
73
+ return /* @__PURE__ */ jsxs(
74
+ "div",
75
+ {
76
+ role: "group",
77
+ "aria-label": "Estimated tool cost details",
78
+ title: description,
79
+ className: "mt-2 flex flex-wrap items-center gap-x-3 gap-y-1 border-t border-border pt-1.5 text-[11px] tabular-nums text-muted-foreground",
80
+ children: [
81
+ /* @__PURE__ */ jsxs(
82
+ "span",
83
+ {
84
+ role: "group",
85
+ "aria-label": total > 0 ? `Estimated cost: ${formatCost(total)} USD` : "Cost unavailable",
86
+ className: "inline-flex items-center gap-1",
87
+ children: [
88
+ /* @__PURE__ */ jsx(UiCoins, { className: "size-3.5 shrink-0" }),
89
+ /* @__PURE__ */ jsx("span", { children: "Est." }),
90
+ /* @__PURE__ */ jsx("span", { className: "font-semibold text-foreground", children: total > 0 ? `~${formatCost(total)}` : "Cost unavailable" }),
91
+ total > 0 && /* @__PURE__ */ jsx("span", { className: "text-[9px] font-medium", children: "USD" })
92
+ ]
93
+ }
94
+ ),
95
+ TOKEN_BUCKETS.map(([key, label, name, BucketIcon]) => {
96
+ const tokens = costs.reduce((sum, cost) => sum + (cost[key] ?? 0), 0);
97
+ const description2 = `${name}: ${tokens.toLocaleString("en-US")} tokens`;
98
+ return tokens > 0 ? /* @__PURE__ */ jsxs(
99
+ "span",
100
+ {
101
+ role: "group",
102
+ "aria-label": description2,
103
+ title: description2,
104
+ className: "inline-flex items-center gap-1 whitespace-nowrap",
105
+ children: [
106
+ /* @__PURE__ */ jsx(BucketIcon, { className: "size-3.5 shrink-0" }),
107
+ /* @__PURE__ */ jsxs("span", { children: [
108
+ label,
109
+ " ",
110
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: compactTokens(tokens) })
111
+ ] })
112
+ ]
113
+ },
114
+ key
115
+ ) : null;
116
+ }),
117
+ estimates.length < events.length && /* @__PURE__ */ jsxs("span", { children: [
118
+ events.length - estimates.length,
119
+ " unavailable"
120
+ ] })
121
+ ]
122
+ }
123
+ );
124
+ }
125
+ export {
126
+ EstimatedToolCost
127
+ };
128
+ //# sourceMappingURL=SessionViewer.tool-cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionViewer.tool-cost.js","sources":["../../../src/data/ai/SessionViewer.tool-cost.tsx"],"sourcesContent":["import type { SessionEvent } from \"./SessionViewer.model\";\nimport { compactTokens, costTotal, formatCost } from \"./session-cost\";\nimport type { SessionCost } from \"./SessionViewer.unified\";\nimport {\n UiArrowDown,\n UiArrowUp,\n UiBrain,\n UiCoins,\n UiDatabaseDown,\n UiDatabaseUp,\n} from \"../../icons\";\n\nconst TOKEN_BUCKETS = [\n [\"inputTokens\", \"In\", \"Input\", UiArrowUp],\n [\"outputTokens\", \"Out\", \"Output\", UiArrowDown],\n [\"reasoningTokens\", \"Reasoning\", \"Reasoning\", UiBrain],\n [\"cacheReadTokens\", \"Cache read\", \"Cache read\", UiDatabaseDown],\n [\"cacheWriteTokens\", \"Cache write\", \"Cache write\", UiDatabaseUp],\n] as const;\n\nexport function EstimatedToolCost({\n events,\n detailed = false,\n}: {\n events: SessionEvent[];\n detailed?: boolean;\n}) {\n const estimates = events.flatMap((event) =>\n event.estimatedCost ? [event.estimatedCost] : [],\n );\n if (!estimates.length) {\n return (\n <span\n aria-label={\n detailed ? \"Estimated tool cost details\" : \"Estimate unavailable\"\n }\n title=\"Estimate unavailable\"\n className=\"shrink-0 text-[11px] text-muted-foreground\"\n >\n {detailed ? \"Estimate unavailable\" : \"—\"}\n </span>\n );\n }\n const costs: SessionCost[] = estimates.map((estimate) => estimate.cost);\n const total = costs.reduce((sum, cost) => sum + costTotal(cost), 0);\n const sharedCalls = estimates[0]?.sharedCalls;\n const allocation =\n events.length === 1\n ? `Model request shared equally across ${sharedCalls} tool call${sharedCalls === 1 ? \"\" : \"s\"}.`\n : `Combined estimate for ${estimates.length} calls; each model request is shared equally across its tool calls.`;\n const description = `${allocation} Includes conversation context and generating the calls. Reading tool results is accounted for in subsequent model requests. Estimated cost in USD.`;\n if (!detailed) {\n const cacheReadTokens = costs.reduce((sum, cost) => sum + (cost.cacheReadTokens ?? 0), 0);\n const cacheReadDescription = `Cache read delta: ${cacheReadTokens.toLocaleString(\"en-US\")} tokens`;\n return (\n <span\n role=\"group\"\n aria-label=\"Estimated tool cost\"\n title={description}\n className=\"inline-flex shrink-0 items-center gap-0.5 whitespace-nowrap text-[11px] tabular-nums text-muted-foreground\"\n >\n <UiCoins className=\"size-3 shrink-0\" />\n <span>{total > 0 ? `~${formatCost(total)}` : \"—\"}</span>\n {cacheReadTokens > 0 && (\n <span\n role=\"group\"\n aria-label={cacheReadDescription}\n title={cacheReadDescription}\n className=\"ml-1 inline-flex items-center gap-0.5\"\n >\n <UiDatabaseDown className=\"size-3 shrink-0\" />\n <span>+{compactTokens(cacheReadTokens)}</span>\n </span>\n )}\n </span>\n );\n }\n return (\n <div\n role=\"group\"\n aria-label=\"Estimated tool cost details\"\n title={description}\n className=\"mt-2 flex flex-wrap items-center gap-x-3 gap-y-1 border-t border-border pt-1.5 text-[11px] tabular-nums text-muted-foreground\"\n >\n <span\n role=\"group\"\n aria-label={\n total > 0\n ? `Estimated cost: ${formatCost(total)} USD`\n : \"Cost unavailable\"\n }\n className=\"inline-flex items-center gap-1\"\n >\n <UiCoins className=\"size-3.5 shrink-0\" />\n <span>Est.</span>\n <span className=\"font-semibold text-foreground\">\n {total > 0 ? `~${formatCost(total)}` : \"Cost unavailable\"}\n </span>\n {total > 0 && <span className=\"text-[9px] font-medium\">USD</span>}\n </span>\n {TOKEN_BUCKETS.map(([key, label, name, BucketIcon]) => {\n const tokens = costs.reduce((sum, cost) => sum + (cost[key] ?? 0), 0);\n const description = `${name}: ${tokens.toLocaleString(\"en-US\")} tokens`;\n return tokens > 0 ? (\n <span\n key={key}\n role=\"group\"\n aria-label={description}\n title={description}\n className=\"inline-flex items-center gap-1 whitespace-nowrap\"\n >\n <BucketIcon className=\"size-3.5 shrink-0\" />\n <span>\n {label}{\" \"}\n <span className=\"font-medium text-foreground\">\n {compactTokens(tokens)}\n </span>\n </span>\n </span>\n ) : null;\n })}\n {estimates.length < events.length && (\n <span>{events.length - estimates.length} unavailable</span>\n )}\n </div>\n );\n}\n"],"names":["description"],"mappings":";;;;;;;;AAYA,MAAM,gBAAgB;AAAA,EACpB,CAAC,eAAe,MAAM,SAAS,SAAS;AAAA,EACxC,CAAC,gBAAgB,OAAO,UAAU,WAAW;AAAA,EAC7C,CAAC,mBAAmB,aAAa,aAAa,OAAO;AAAA,EACrD,CAAC,mBAAmB,cAAc,cAAc,cAAc;AAAA,EAC9D,CAAC,oBAAoB,eAAe,eAAe,YAAY;AACjE;AAEO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA,WAAW;AACb,GAGG;;AACD,QAAM,YAAY,OAAO;AAAA,IAAQ,CAAC,UAChC,MAAM,gBAAgB,CAAC,MAAM,aAAa,IAAI,CAAA;AAAA,EAAC;AAEjD,MAAI,CAAC,UAAU,QAAQ;AACrB,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,cACE,WAAW,gCAAgC;AAAA,QAE7C,OAAM;AAAA,QACN,WAAU;AAAA,QAET,qBAAW,yBAAyB;AAAA,MAAA;AAAA,IAAA;AAAA,EAG3C;AACA,QAAM,QAAuB,UAAU,IAAI,CAAC,aAAa,SAAS,IAAI;AACtE,QAAM,QAAQ,MAAM,OAAO,CAAC,KAAK,SAAS,MAAM,UAAU,IAAI,GAAG,CAAC;AAClE,QAAM,eAAc,eAAU,CAAC,MAAX,mBAAc;AAClC,QAAM,aACJ,OAAO,WAAW,IACd,uCAAuC,WAAW,aAAa,gBAAgB,IAAI,KAAK,GAAG,MAC3F,yBAAyB,UAAU,MAAM;AAC/C,QAAM,cAAc,GAAG,UAAU;AACjC,MAAI,CAAC,UAAU;AACb,UAAM,kBAAkB,MAAM,OAAO,CAAC,KAAK,SAAS,OAAO,KAAK,mBAAmB,IAAI,CAAC;AACxF,UAAM,uBAAuB,qBAAqB,gBAAgB,eAAe,OAAO,CAAC;AACzF,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,cAAW;AAAA,QACX,OAAO;AAAA,QACP,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,oBAAC,SAAA,EAAQ,WAAU,kBAAA,CAAkB;AAAA,UACrC,oBAAC,UAAM,UAAA,QAAQ,IAAI,IAAI,WAAW,KAAK,CAAC,KAAK,IAAA,CAAI;AAAA,UAChD,kBAAkB,KACjB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,cAAY;AAAA,cACZ,OAAO;AAAA,cACP,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,oBAAC,gBAAA,EAAe,WAAU,kBAAA,CAAkB;AAAA,qCAC3C,QAAA,EAAK,UAAA;AAAA,kBAAA;AAAA,kBAAE,cAAc,eAAe;AAAA,gBAAA,EAAA,CAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACzC;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,OAAO;AAAA,MACP,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cACE,QAAQ,IACJ,mBAAmB,WAAW,KAAK,CAAC,SACpC;AAAA,YAEN,WAAU;AAAA,YAEV,UAAA;AAAA,cAAA,oBAAC,SAAA,EAAQ,WAAU,oBAAA,CAAoB;AAAA,cACvC,oBAAC,UAAK,UAAA,OAAA,CAAI;AAAA,cACV,oBAAC,QAAA,EAAK,WAAU,iCACb,UAAA,QAAQ,IAAI,IAAI,WAAW,KAAK,CAAC,KAAK,mBAAA,CACzC;AAAA,cACC,QAAQ,KAAK,oBAAC,QAAA,EAAK,WAAU,0BAAyB,UAAA,MAAA,CAAG;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAE3D,cAAc,IAAI,CAAC,CAAC,KAAK,OAAO,MAAM,UAAU,MAAM;AACrD,gBAAM,SAAS,MAAM,OAAO,CAAC,KAAK,SAAS,OAAO,KAAK,GAAG,KAAK,IAAI,CAAC;AACpE,gBAAMA,eAAc,GAAG,IAAI,KAAK,OAAO,eAAe,OAAO,CAAC;AAC9D,iBAAO,SAAS,IACd;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,MAAK;AAAA,cACL,cAAYA;AAAAA,cACZ,OAAOA;AAAAA,cACP,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,oBAAC,YAAA,EAAW,WAAU,oBAAA,CAAoB;AAAA,qCACzC,QAAA,EACE,UAAA;AAAA,kBAAA;AAAA,kBAAO;AAAA,sCACP,QAAA,EAAK,WAAU,+BACb,UAAA,cAAc,MAAM,EAAA,CACvB;AAAA,gBAAA,EAAA,CACF;AAAA,cAAA;AAAA,YAAA;AAAA,YAZK;AAAA,UAAA,IAcL;AAAA,QACN,CAAC;AAAA,QACA,UAAU,SAAS,OAAO,+BACxB,QAAA,EAAM,UAAA;AAAA,UAAA,OAAO,SAAS,UAAU;AAAA,UAAO;AAAA,QAAA,EAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAI5D;"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
+ const useDensity = require("../../hooks/use-density.cjs");
4
5
  const CodeBlock = require("../CodeBlock.cjs");
5
6
  const CodeDiff = require("../CodeDiff.cjs");
6
7
  function QuestionCard({
@@ -55,7 +56,8 @@ function DetailBlock({
55
56
  language,
56
57
  source
57
58
  }) {
58
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto text-xs", children: /* @__PURE__ */ jsxRuntime.jsx(CodeBlock.CodeBlock, { bare: true, language, source }) });
59
+ const density = useDensity.useDensityValue();
60
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto text-xs", children: /* @__PURE__ */ jsxRuntime.jsx(CodeBlock.CodeBlock, { bare: true, language, source, jsonFormat: density === "compact" ? "yaml" : "json" }) });
59
61
  }
60
62
  exports.DetailBlock = DetailBlock;
61
63
  exports.DiffBlock = DiffBlock;
@@ -1 +1 @@
1
- {"version":3,"file":"SessionViewer.tool-details.cjs","sources":["../../../src/data/ai/SessionViewer.tool-details.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { CodeDiff } from \"../CodeDiff\";\nimport type {\n SessionQuestion,\n ToolDiff,\n ToolParam,\n} from \"./SessionViewer.input\";\n\nexport function QuestionCard({\n question,\n index,\n}: {\n question: SessionQuestion;\n index: number;\n}) {\n const label =\n question.context ||\n (question.id ? `Question ${question.id}` : `Question ${index + 1}`);\n return (\n <div className=\"rounded-md border border-sky-500/20 bg-sky-500/5 px-density-3 py-density-2\">\n <div className=\"text-[11px] font-medium uppercase text-muted-foreground\">\n {label}\n </div>\n <div className=\"mt-0.5 whitespace-pre-wrap break-words text-sm text-foreground\">\n {question.text}\n </div>\n {question.options.length > 0 && (\n <div className=\"mt-1.5 flex flex-wrap gap-1\">\n {question.options.map((option) => (\n <span\n key={option.value}\n className=\"rounded border border-border bg-background px-1.5 py-0.5 text-[11px] text-muted-foreground\"\n >\n <span className=\"font-medium text-foreground\">\n {option.label}\n </span>\n {option.description && (\n <span className=\"ml-1\">{option.description}</span>\n )}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function InlineParams({ params }: { params: ToolParam[] }) {\n return (\n <span className=\"min-w-0 flex-1 truncate font-mono text-xs\">\n {params.map((param) => (\n <span key={param.name} className=\"[&:not(:first-child)]:ml-2\">\n <span className=\"text-muted-foreground/70\">{param.name}: </span>\n <span className=\"text-muted-foreground\">{param.value}</span>\n </span>\n ))}\n </span>\n );\n}\n\nexport function DiffBlock({ diff }: { diff: ToolDiff }) {\n return (\n <div className=\"space-y-1.5\">\n {diff.segments.map((segment, index) => (\n <CodeDiff\n key={index}\n bare\n showLineNumbers={false}\n original={segment.original}\n modified={segment.modified}\n {...(diff.language ? { language: diff.language } : {})}\n />\n ))}\n </div>\n );\n}\n\nexport function ResponseBlock({ response }: { response: string }) {\n const trimmed = response.trim();\n const isJson = trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\");\n return <DetailBlock language={isJson ? \"json\" : \"text\"} source={response} />;\n}\n\nexport function DetailBlock({\n language,\n source,\n}: {\n language: string;\n source: string;\n}): ReactNode {\n return (\n <div className=\"overflow-x-auto text-xs\">\n <CodeBlock bare language={language} source={source} />\n </div>\n );\n}\n"],"names":["jsxs","jsx","CodeDiff","CodeBlock"],"mappings":";;;;;AASO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAGG;AACD,QAAM,QACJ,SAAS,YACR,SAAS,KAAK,YAAY,SAAS,EAAE,KAAK,YAAY,QAAQ,CAAC;AAClE,SACEA,2BAAAA,KAAC,OAAA,EAAI,WAAU,8EACb,UAAA;AAAA,IAAAC,2BAAAA,IAAC,OAAA,EAAI,WAAU,2DACZ,UAAA,OACH;AAAA,IACAA,2BAAAA,IAAC,OAAA,EAAI,WAAU,kEACZ,mBAAS,MACZ;AAAA,IACC,SAAS,QAAQ,SAAS,KACzBA,2BAAAA,IAAC,OAAA,EAAI,WAAU,+BACZ,UAAA,SAAS,QAAQ,IAAI,CAAC,WACrBD,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAAC,2BAAAA,IAAC,QAAA,EAAK,WAAU,+BACb,UAAA,OAAO,OACV;AAAA,UACC,OAAO,eACNA,2BAAAA,IAAC,UAAK,WAAU,QAAQ,iBAAO,YAAA,CAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAPxC,OAAO;AAAA,IAAA,CAUf,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;AAEO,SAAS,aAAa,EAAE,UAAmC;AAChE,SACEA,2BAAAA,IAAC,QAAA,EAAK,WAAU,6CACb,UAAA,OAAO,IAAI,CAAC,UACXD,2BAAAA,KAAC,QAAA,EAAsB,WAAU,8BAC/B,UAAA;AAAA,IAAAA,2BAAAA,KAAC,QAAA,EAAK,WAAU,4BAA4B,UAAA;AAAA,MAAA,MAAM;AAAA,MAAK;AAAA,IAAA,GAAE;AAAA,IACzDC,2BAAAA,IAAC,QAAA,EAAK,WAAU,yBAAyB,gBAAM,MAAA,CAAM;AAAA,EAAA,EAAA,GAF5C,MAAM,IAGjB,CACD,GACH;AAEJ;AAEO,SAAS,UAAU,EAAE,QAA4B;AACtD,SACEA,+BAAC,SAAI,WAAU,eACZ,eAAK,SAAS,IAAI,CAAC,SAAS,UAC3BA,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MAEC,MAAI;AAAA,MACJ,iBAAiB;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MACjB,GAAI,KAAK,WAAW,EAAE,UAAU,KAAK,SAAA,IAAa,CAAA;AAAA,IAAC;AAAA,IAL/C;AAAA,EAAA,CAOR,GACH;AAEJ;AAEO,SAAS,cAAc,EAAE,YAAkC;AAChE,QAAM,UAAU,SAAS,KAAA;AACzB,QAAM,SAAS,QAAQ,WAAW,GAAG,KAAK,QAAQ,WAAW,GAAG;AAChE,wCAAQ,aAAA,EAAY,UAAU,SAAS,SAAS,QAAQ,QAAQ,UAAU;AAC5E;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AACF,GAGc;AACZ,SACED,2BAAAA,IAAC,OAAA,EAAI,WAAU,2BACb,UAAAA,2BAAAA,IAACE,UAAAA,aAAU,MAAI,MAAC,UAAoB,OAAA,CAAgB,EAAA,CACtD;AAEJ;;;;;;"}
1
+ {"version":3,"file":"SessionViewer.tool-details.cjs","sources":["../../../src/data/ai/SessionViewer.tool-details.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useDensityValue } from \"../../hooks/use-density\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { CodeDiff } from \"../CodeDiff\";\nimport type {\n SessionQuestion,\n ToolDiff,\n ToolParam,\n} from \"./SessionViewer.input\";\n\nexport function QuestionCard({\n question,\n index,\n}: {\n question: SessionQuestion;\n index: number;\n}) {\n const label =\n question.context ||\n (question.id ? `Question ${question.id}` : `Question ${index + 1}`);\n return (\n <div className=\"rounded-md border border-sky-500/20 bg-sky-500/5 px-density-3 py-density-2\">\n <div className=\"text-[11px] font-medium uppercase text-muted-foreground\">\n {label}\n </div>\n <div className=\"mt-0.5 whitespace-pre-wrap break-words text-sm text-foreground\">\n {question.text}\n </div>\n {question.options.length > 0 && (\n <div className=\"mt-1.5 flex flex-wrap gap-1\">\n {question.options.map((option) => (\n <span\n key={option.value}\n className=\"rounded border border-border bg-background px-1.5 py-0.5 text-[11px] text-muted-foreground\"\n >\n <span className=\"font-medium text-foreground\">\n {option.label}\n </span>\n {option.description && (\n <span className=\"ml-1\">{option.description}</span>\n )}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function InlineParams({ params }: { params: ToolParam[] }) {\n return (\n <span className=\"min-w-0 flex-1 truncate font-mono text-xs\">\n {params.map((param) => (\n <span key={param.name} className=\"[&:not(:first-child)]:ml-2\">\n <span className=\"text-muted-foreground/70\">{param.name}: </span>\n <span className=\"text-muted-foreground\">{param.value}</span>\n </span>\n ))}\n </span>\n );\n}\n\nexport function DiffBlock({ diff }: { diff: ToolDiff }) {\n return (\n <div className=\"space-y-1.5\">\n {diff.segments.map((segment, index) => (\n <CodeDiff\n key={index}\n bare\n showLineNumbers={false}\n original={segment.original}\n modified={segment.modified}\n {...(diff.language ? { language: diff.language } : {})}\n />\n ))}\n </div>\n );\n}\n\nexport function ResponseBlock({ response }: { response: string }) {\n const trimmed = response.trim();\n const isJson = trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\");\n return <DetailBlock language={isJson ? \"json\" : \"text\"} source={response} />;\n}\n\nexport function DetailBlock({\n language,\n source,\n}: {\n language: string;\n source: string;\n}): ReactNode {\n const density = useDensityValue();\n return (\n <div className=\"overflow-x-auto text-xs\">\n <CodeBlock bare language={language} source={source} jsonFormat={density === \"compact\" ? \"yaml\" : \"json\"} />\n </div>\n );\n}\n"],"names":["jsxs","jsx","CodeDiff","useDensityValue","CodeBlock"],"mappings":";;;;;;AAUO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAGG;AACD,QAAM,QACJ,SAAS,YACR,SAAS,KAAK,YAAY,SAAS,EAAE,KAAK,YAAY,QAAQ,CAAC;AAClE,SACEA,2BAAAA,KAAC,OAAA,EAAI,WAAU,8EACb,UAAA;AAAA,IAAAC,2BAAAA,IAAC,OAAA,EAAI,WAAU,2DACZ,UAAA,OACH;AAAA,IACAA,2BAAAA,IAAC,OAAA,EAAI,WAAU,kEACZ,mBAAS,MACZ;AAAA,IACC,SAAS,QAAQ,SAAS,KACzBA,2BAAAA,IAAC,OAAA,EAAI,WAAU,+BACZ,UAAA,SAAS,QAAQ,IAAI,CAAC,WACrBD,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAAC,2BAAAA,IAAC,QAAA,EAAK,WAAU,+BACb,UAAA,OAAO,OACV;AAAA,UACC,OAAO,eACNA,2BAAAA,IAAC,UAAK,WAAU,QAAQ,iBAAO,YAAA,CAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAPxC,OAAO;AAAA,IAAA,CAUf,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;AAEO,SAAS,aAAa,EAAE,UAAmC;AAChE,SACEA,2BAAAA,IAAC,QAAA,EAAK,WAAU,6CACb,UAAA,OAAO,IAAI,CAAC,UACXD,2BAAAA,KAAC,QAAA,EAAsB,WAAU,8BAC/B,UAAA;AAAA,IAAAA,2BAAAA,KAAC,QAAA,EAAK,WAAU,4BAA4B,UAAA;AAAA,MAAA,MAAM;AAAA,MAAK;AAAA,IAAA,GAAE;AAAA,IACzDC,2BAAAA,IAAC,QAAA,EAAK,WAAU,yBAAyB,gBAAM,MAAA,CAAM;AAAA,EAAA,EAAA,GAF5C,MAAM,IAGjB,CACD,GACH;AAEJ;AAEO,SAAS,UAAU,EAAE,QAA4B;AACtD,SACEA,+BAAC,SAAI,WAAU,eACZ,eAAK,SAAS,IAAI,CAAC,SAAS,UAC3BA,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MAEC,MAAI;AAAA,MACJ,iBAAiB;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MACjB,GAAI,KAAK,WAAW,EAAE,UAAU,KAAK,SAAA,IAAa,CAAA;AAAA,IAAC;AAAA,IAL/C;AAAA,EAAA,CAOR,GACH;AAEJ;AAEO,SAAS,cAAc,EAAE,YAAkC;AAChE,QAAM,UAAU,SAAS,KAAA;AACzB,QAAM,SAAS,QAAQ,WAAW,GAAG,KAAK,QAAQ,WAAW,GAAG;AAChE,wCAAQ,aAAA,EAAY,UAAU,SAAS,SAAS,QAAQ,QAAQ,UAAU;AAC5E;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AACF,GAGc;AACZ,QAAM,UAAUC,WAAAA,gBAAA;AAChB,SACEF,2BAAAA,IAAC,OAAA,EAAI,WAAU,2BACb,yCAACG,UAAAA,WAAA,EAAU,MAAI,MAAC,UAAoB,QAAgB,YAAY,YAAY,YAAY,SAAS,QAAQ,GAC3G;AAEJ;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionViewer.tool-details.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.tool-details.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EACV,eAAe,EACf,QAAQ,EACR,SAAS,EACV,MAAM,uBAAuB,CAAC;AAE/B,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf,+BA+BA;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,+BAW/D;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,+BAerD;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,+BAI/D;AAED,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,SAAS,CAMZ"}
1
+ {"version":3,"file":"SessionViewer.tool-details.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.tool-details.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EACV,eAAe,EACf,QAAQ,EACR,SAAS,EACV,MAAM,uBAAuB,CAAC;AAE/B,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf,+BA+BA;AAED,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,+BAW/D;AAED,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,+BAerD;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,+BAI/D;AAED,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,SAAS,CAOZ"}
@@ -1,4 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useDensityValue } from "../../hooks/use-density.js";
2
3
  import { CodeBlock } from "../CodeBlock.js";
3
4
  import { CodeDiff } from "../CodeDiff.js";
4
5
  function QuestionCard({
@@ -53,7 +54,8 @@ function DetailBlock({
53
54
  language,
54
55
  source
55
56
  }) {
56
- return /* @__PURE__ */ jsx("div", { className: "overflow-x-auto text-xs", children: /* @__PURE__ */ jsx(CodeBlock, { bare: true, language, source }) });
57
+ const density = useDensityValue();
58
+ return /* @__PURE__ */ jsx("div", { className: "overflow-x-auto text-xs", children: /* @__PURE__ */ jsx(CodeBlock, { bare: true, language, source, jsonFormat: density === "compact" ? "yaml" : "json" }) });
57
59
  }
58
60
  export {
59
61
  DetailBlock,
@@ -1 +1 @@
1
- {"version":3,"file":"SessionViewer.tool-details.js","sources":["../../../src/data/ai/SessionViewer.tool-details.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { CodeDiff } from \"../CodeDiff\";\nimport type {\n SessionQuestion,\n ToolDiff,\n ToolParam,\n} from \"./SessionViewer.input\";\n\nexport function QuestionCard({\n question,\n index,\n}: {\n question: SessionQuestion;\n index: number;\n}) {\n const label =\n question.context ||\n (question.id ? `Question ${question.id}` : `Question ${index + 1}`);\n return (\n <div className=\"rounded-md border border-sky-500/20 bg-sky-500/5 px-density-3 py-density-2\">\n <div className=\"text-[11px] font-medium uppercase text-muted-foreground\">\n {label}\n </div>\n <div className=\"mt-0.5 whitespace-pre-wrap break-words text-sm text-foreground\">\n {question.text}\n </div>\n {question.options.length > 0 && (\n <div className=\"mt-1.5 flex flex-wrap gap-1\">\n {question.options.map((option) => (\n <span\n key={option.value}\n className=\"rounded border border-border bg-background px-1.5 py-0.5 text-[11px] text-muted-foreground\"\n >\n <span className=\"font-medium text-foreground\">\n {option.label}\n </span>\n {option.description && (\n <span className=\"ml-1\">{option.description}</span>\n )}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function InlineParams({ params }: { params: ToolParam[] }) {\n return (\n <span className=\"min-w-0 flex-1 truncate font-mono text-xs\">\n {params.map((param) => (\n <span key={param.name} className=\"[&:not(:first-child)]:ml-2\">\n <span className=\"text-muted-foreground/70\">{param.name}: </span>\n <span className=\"text-muted-foreground\">{param.value}</span>\n </span>\n ))}\n </span>\n );\n}\n\nexport function DiffBlock({ diff }: { diff: ToolDiff }) {\n return (\n <div className=\"space-y-1.5\">\n {diff.segments.map((segment, index) => (\n <CodeDiff\n key={index}\n bare\n showLineNumbers={false}\n original={segment.original}\n modified={segment.modified}\n {...(diff.language ? { language: diff.language } : {})}\n />\n ))}\n </div>\n );\n}\n\nexport function ResponseBlock({ response }: { response: string }) {\n const trimmed = response.trim();\n const isJson = trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\");\n return <DetailBlock language={isJson ? \"json\" : \"text\"} source={response} />;\n}\n\nexport function DetailBlock({\n language,\n source,\n}: {\n language: string;\n source: string;\n}): ReactNode {\n return (\n <div className=\"overflow-x-auto text-xs\">\n <CodeBlock bare language={language} source={source} />\n </div>\n );\n}\n"],"names":[],"mappings":";;;AASO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAGG;AACD,QAAM,QACJ,SAAS,YACR,SAAS,KAAK,YAAY,SAAS,EAAE,KAAK,YAAY,QAAQ,CAAC;AAClE,SACE,qBAAC,OAAA,EAAI,WAAU,8EACb,UAAA;AAAA,IAAA,oBAAC,OAAA,EAAI,WAAU,2DACZ,UAAA,OACH;AAAA,IACA,oBAAC,OAAA,EAAI,WAAU,kEACZ,mBAAS,MACZ;AAAA,IACC,SAAS,QAAQ,SAAS,KACzB,oBAAC,OAAA,EAAI,WAAU,+BACZ,UAAA,SAAS,QAAQ,IAAI,CAAC,WACrB;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,oBAAC,QAAA,EAAK,WAAU,+BACb,UAAA,OAAO,OACV;AAAA,UACC,OAAO,eACN,oBAAC,UAAK,WAAU,QAAQ,iBAAO,YAAA,CAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAPxC,OAAO;AAAA,IAAA,CAUf,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;AAEO,SAAS,aAAa,EAAE,UAAmC;AAChE,SACE,oBAAC,QAAA,EAAK,WAAU,6CACb,UAAA,OAAO,IAAI,CAAC,UACX,qBAAC,QAAA,EAAsB,WAAU,8BAC/B,UAAA;AAAA,IAAA,qBAAC,QAAA,EAAK,WAAU,4BAA4B,UAAA;AAAA,MAAA,MAAM;AAAA,MAAK;AAAA,IAAA,GAAE;AAAA,IACzD,oBAAC,QAAA,EAAK,WAAU,yBAAyB,gBAAM,MAAA,CAAM;AAAA,EAAA,EAAA,GAF5C,MAAM,IAGjB,CACD,GACH;AAEJ;AAEO,SAAS,UAAU,EAAE,QAA4B;AACtD,SACE,oBAAC,SAAI,WAAU,eACZ,eAAK,SAAS,IAAI,CAAC,SAAS,UAC3B;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,MAAI;AAAA,MACJ,iBAAiB;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MACjB,GAAI,KAAK,WAAW,EAAE,UAAU,KAAK,SAAA,IAAa,CAAA;AAAA,IAAC;AAAA,IAL/C;AAAA,EAAA,CAOR,GACH;AAEJ;AAEO,SAAS,cAAc,EAAE,YAAkC;AAChE,QAAM,UAAU,SAAS,KAAA;AACzB,QAAM,SAAS,QAAQ,WAAW,GAAG,KAAK,QAAQ,WAAW,GAAG;AAChE,6BAAQ,aAAA,EAAY,UAAU,SAAS,SAAS,QAAQ,QAAQ,UAAU;AAC5E;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AACF,GAGc;AACZ,SACE,oBAAC,OAAA,EAAI,WAAU,2BACb,UAAA,oBAAC,aAAU,MAAI,MAAC,UAAoB,OAAA,CAAgB,EAAA,CACtD;AAEJ;"}
1
+ {"version":3,"file":"SessionViewer.tool-details.js","sources":["../../../src/data/ai/SessionViewer.tool-details.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { useDensityValue } from \"../../hooks/use-density\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { CodeDiff } from \"../CodeDiff\";\nimport type {\n SessionQuestion,\n ToolDiff,\n ToolParam,\n} from \"./SessionViewer.input\";\n\nexport function QuestionCard({\n question,\n index,\n}: {\n question: SessionQuestion;\n index: number;\n}) {\n const label =\n question.context ||\n (question.id ? `Question ${question.id}` : `Question ${index + 1}`);\n return (\n <div className=\"rounded-md border border-sky-500/20 bg-sky-500/5 px-density-3 py-density-2\">\n <div className=\"text-[11px] font-medium uppercase text-muted-foreground\">\n {label}\n </div>\n <div className=\"mt-0.5 whitespace-pre-wrap break-words text-sm text-foreground\">\n {question.text}\n </div>\n {question.options.length > 0 && (\n <div className=\"mt-1.5 flex flex-wrap gap-1\">\n {question.options.map((option) => (\n <span\n key={option.value}\n className=\"rounded border border-border bg-background px-1.5 py-0.5 text-[11px] text-muted-foreground\"\n >\n <span className=\"font-medium text-foreground\">\n {option.label}\n </span>\n {option.description && (\n <span className=\"ml-1\">{option.description}</span>\n )}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function InlineParams({ params }: { params: ToolParam[] }) {\n return (\n <span className=\"min-w-0 flex-1 truncate font-mono text-xs\">\n {params.map((param) => (\n <span key={param.name} className=\"[&:not(:first-child)]:ml-2\">\n <span className=\"text-muted-foreground/70\">{param.name}: </span>\n <span className=\"text-muted-foreground\">{param.value}</span>\n </span>\n ))}\n </span>\n );\n}\n\nexport function DiffBlock({ diff }: { diff: ToolDiff }) {\n return (\n <div className=\"space-y-1.5\">\n {diff.segments.map((segment, index) => (\n <CodeDiff\n key={index}\n bare\n showLineNumbers={false}\n original={segment.original}\n modified={segment.modified}\n {...(diff.language ? { language: diff.language } : {})}\n />\n ))}\n </div>\n );\n}\n\nexport function ResponseBlock({ response }: { response: string }) {\n const trimmed = response.trim();\n const isJson = trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\");\n return <DetailBlock language={isJson ? \"json\" : \"text\"} source={response} />;\n}\n\nexport function DetailBlock({\n language,\n source,\n}: {\n language: string;\n source: string;\n}): ReactNode {\n const density = useDensityValue();\n return (\n <div className=\"overflow-x-auto text-xs\">\n <CodeBlock bare language={language} source={source} jsonFormat={density === \"compact\" ? \"yaml\" : \"json\"} />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;AAUO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAGG;AACD,QAAM,QACJ,SAAS,YACR,SAAS,KAAK,YAAY,SAAS,EAAE,KAAK,YAAY,QAAQ,CAAC;AAClE,SACE,qBAAC,OAAA,EAAI,WAAU,8EACb,UAAA;AAAA,IAAA,oBAAC,OAAA,EAAI,WAAU,2DACZ,UAAA,OACH;AAAA,IACA,oBAAC,OAAA,EAAI,WAAU,kEACZ,mBAAS,MACZ;AAAA,IACC,SAAS,QAAQ,SAAS,KACzB,oBAAC,OAAA,EAAI,WAAU,+BACZ,UAAA,SAAS,QAAQ,IAAI,CAAC,WACrB;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,oBAAC,QAAA,EAAK,WAAU,+BACb,UAAA,OAAO,OACV;AAAA,UACC,OAAO,eACN,oBAAC,UAAK,WAAU,QAAQ,iBAAO,YAAA,CAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAPxC,OAAO;AAAA,IAAA,CAUf,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ;AAEO,SAAS,aAAa,EAAE,UAAmC;AAChE,SACE,oBAAC,QAAA,EAAK,WAAU,6CACb,UAAA,OAAO,IAAI,CAAC,UACX,qBAAC,QAAA,EAAsB,WAAU,8BAC/B,UAAA;AAAA,IAAA,qBAAC,QAAA,EAAK,WAAU,4BAA4B,UAAA;AAAA,MAAA,MAAM;AAAA,MAAK;AAAA,IAAA,GAAE;AAAA,IACzD,oBAAC,QAAA,EAAK,WAAU,yBAAyB,gBAAM,MAAA,CAAM;AAAA,EAAA,EAAA,GAF5C,MAAM,IAGjB,CACD,GACH;AAEJ;AAEO,SAAS,UAAU,EAAE,QAA4B;AACtD,SACE,oBAAC,SAAI,WAAU,eACZ,eAAK,SAAS,IAAI,CAAC,SAAS,UAC3B;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,MAAI;AAAA,MACJ,iBAAiB;AAAA,MACjB,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ;AAAA,MACjB,GAAI,KAAK,WAAW,EAAE,UAAU,KAAK,SAAA,IAAa,CAAA;AAAA,IAAC;AAAA,IAL/C;AAAA,EAAA,CAOR,GACH;AAEJ;AAEO,SAAS,cAAc,EAAE,YAAkC;AAChE,QAAM,UAAU,SAAS,KAAA;AACzB,QAAM,SAAS,QAAQ,WAAW,GAAG,KAAK,QAAQ,WAAW,GAAG;AAChE,6BAAQ,aAAA,EAAY,UAAU,SAAS,SAAS,QAAQ,QAAQ,UAAU;AAC5E;AAEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AACF,GAGc;AACZ,QAAM,UAAU,gBAAA;AAChB,SACE,oBAAC,OAAA,EAAI,WAAU,2BACb,8BAAC,WAAA,EAAU,MAAI,MAAC,UAAoB,QAAgB,YAAY,YAAY,YAAY,SAAS,QAAQ,GAC3G;AAEJ;"}
@@ -11,11 +11,13 @@ const SessionViewer_toolDetails = require("./SessionViewer.tool-details.cjs");
11
11
  const approvalRequest = require("./approval-request.cjs");
12
12
  const SessionViewer_approvalBody = require("./SessionViewer.approval-body.cjs");
13
13
  const SessionViewer_decisionControls = require("./SessionViewer.decision-controls.cjs");
14
+ const SessionViewer_toolCost = require("./SessionViewer.tool-cost.cjs");
14
15
  const UiChevronDown = require("../../icons/components/UiChevronDown.cjs");
15
16
  function ToolBody({
16
17
  event,
17
18
  visual,
18
19
  defaultExpanded,
20
+ showEstimatedToolCost = false,
19
21
  onPendingToolDecision
20
22
  }) {
21
23
  const summary = SessionViewer_input.summarizeToolInput(
@@ -25,21 +27,27 @@ function ToolBody({
25
27
  );
26
28
  const command = SessionViewer_input.shellCommand(event.tool ?? "", event.toolInput);
27
29
  const [open, setOpen] = react.useState(defaultExpanded);
30
+ const cost = showEstimatedToolCost ? /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_toolCost.EstimatedToolCost, { events: [event] }) : null;
31
+ const costFooter = showEstimatedToolCost ? /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_toolCost.EstimatedToolCost, { events: [event], detailed: true }) : null;
32
+ const hasDetail = event.toolResponse !== void 0 || command === void 0 && event.toolInput !== void 0 || showEstimatedToolCost && event.estimatedCost !== void 0;
28
33
  if (event.tool === "AskUserQuestion" || event.approvalKind === "question") {
29
34
  return /* @__PURE__ */ jsxRuntime.jsx(
30
35
  QuestionToolBody,
31
36
  {
32
37
  event,
33
38
  visual,
34
- onDecision: onPendingToolDecision
39
+ onDecision: onPendingToolDecision,
40
+ cost,
41
+ costFooter
35
42
  }
36
43
  );
37
44
  }
38
45
  if (event.pending && approvalRequest.hasApprovalBody(event.approvalRequest)) {
39
46
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "not-prose", children: [
40
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
47
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-tool-header": true, className: "flex items-center gap-1.5", children: [
41
48
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 font-medium text-foreground", children: visual.label }),
42
- /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_rowMetadata.ApprovalBadge, { event })
49
+ /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_rowMetadata.ApprovalBadge, { event }),
50
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto", children: cost })
43
51
  ] }),
44
52
  /* @__PURE__ */ jsxRuntime.jsx(
45
53
  SessionViewer_approvalBody.TypedApprovalBody,
@@ -48,15 +56,17 @@ function ToolBody({
48
56
  request: event.approvalRequest,
49
57
  onDecision: onPendingToolDecision
50
58
  }
51
- )
59
+ ),
60
+ costFooter
52
61
  ] });
53
62
  }
54
63
  if (command !== void 0) {
55
64
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "not-prose", children: [
56
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-1.5", children: [
65
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-tool-header": true, className: "flex items-start gap-1.5", children: [
57
66
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(CodeBlock.CodeBlock, { bare: true, language: "bash", source: command }) }),
58
67
  /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_rowMetadata.ApprovalBadge, { event }),
59
- event.toolResponse !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
68
+ cost,
69
+ hasDetail && /* @__PURE__ */ jsxRuntime.jsx(
60
70
  "button",
61
71
  {
62
72
  type: "button",
@@ -77,7 +87,10 @@ function ToolBody({
77
87
  }
78
88
  )
79
89
  ] }),
80
- open && event.toolResponse !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1.5", children: /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_toolDetails.ResponseBlock, { response: event.toolResponse }) }),
90
+ open && hasDetail && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1.5", children: [
91
+ event.toolResponse !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_toolDetails.ResponseBlock, { response: event.toolResponse }),
92
+ costFooter
93
+ ] }),
81
94
  event.pending && onPendingToolDecision && /* @__PURE__ */ jsxRuntime.jsx(
82
95
  SessionViewer_decisionControls.PendingDecisionControls,
83
96
  {
@@ -88,7 +101,6 @@ function ToolBody({
88
101
  )
89
102
  ] });
90
103
  }
91
- const hasDetail = event.toolInput !== void 0 || event.toolResponse !== void 0;
92
104
  const params = SessionViewer_input.toolInputParams(event.tool ?? "", event.toolInput, event.cwd);
93
105
  const diff = SessionViewer_input.toolDiff(event.tool ?? "", event.toolInput);
94
106
  const header = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -107,28 +119,31 @@ function ToolBody({
107
119
  params.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_toolDetails.InlineParams, { params })
108
120
  ] });
109
121
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "not-prose", children: [
110
- hasDetail ? /* @__PURE__ */ jsxRuntime.jsxs(
111
- "button",
112
- {
113
- type: "button",
114
- "aria-expanded": open,
115
- onClick: () => setOpen((value) => !value),
116
- className: "flex w-full items-center gap-1.5 text-left hover:text-foreground",
117
- children: [
118
- header,
119
- /* @__PURE__ */ jsxRuntime.jsx(
120
- Icon.Icon,
121
- {
122
- icon: UiChevronDown.UiChevronDown,
123
- className: utils.cn(
124
- "ml-auto size-3 shrink-0 text-muted-foreground transition-transform",
125
- open && "rotate-180"
126
- )
127
- }
128
- )
129
- ]
130
- }
131
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1.5", children: header }),
122
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-tool-header": true, className: "flex items-center gap-1.5", children: [
123
+ hasDetail ? /* @__PURE__ */ jsxRuntime.jsxs(
124
+ "button",
125
+ {
126
+ type: "button",
127
+ "aria-expanded": open,
128
+ onClick: () => setOpen((value) => !value),
129
+ className: "flex min-w-0 flex-1 items-center gap-1.5 text-left hover:text-foreground",
130
+ children: [
131
+ header,
132
+ /* @__PURE__ */ jsxRuntime.jsx(
133
+ Icon.Icon,
134
+ {
135
+ icon: UiChevronDown.UiChevronDown,
136
+ className: utils.cn(
137
+ "ml-auto size-3 shrink-0 text-muted-foreground transition-transform",
138
+ open && "rotate-180"
139
+ )
140
+ }
141
+ )
142
+ ]
143
+ }
144
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 flex-1 items-center gap-1.5", children: header }),
145
+ cost
146
+ ] }),
132
147
  open && hasDetail && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1.5 space-y-1.5", children: [
133
148
  diff ? /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_toolDetails.DiffBlock, { diff }) : event.toolInput !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
134
149
  SessionViewer_toolDetails.DetailBlock,
@@ -137,7 +152,8 @@ function ToolBody({
137
152
  source: JSON.stringify(event.toolInput, null, 2)
138
153
  }
139
154
  ),
140
- event.toolResponse !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_toolDetails.ResponseBlock, { response: event.toolResponse })
155
+ event.toolResponse !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_toolDetails.ResponseBlock, { response: event.toolResponse }),
156
+ costFooter
141
157
  ] }),
142
158
  event.pending && onPendingToolDecision && /* @__PURE__ */ jsxRuntime.jsx(
143
159
  SessionViewer_decisionControls.PendingDecisionControls,
@@ -152,7 +168,9 @@ function ToolBody({
152
168
  function QuestionToolBody({
153
169
  event,
154
170
  visual,
155
- onDecision
171
+ onDecision,
172
+ cost,
173
+ costFooter
156
174
  }) {
157
175
  var _a;
158
176
  const typedQuestions = (_a = event.approvalRequest) == null ? void 0 : _a.questions;
@@ -163,10 +181,11 @@ function QuestionToolBody({
163
181
  event.cwd
164
182
  );
165
183
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "not-prose", children: [
166
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1.5", children: [
184
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-tool-header": true, className: "flex items-center gap-1.5", children: [
167
185
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 font-medium text-foreground", children: visual.label }),
168
186
  /* @__PURE__ */ jsxRuntime.jsx(SessionViewer_rowMetadata.ApprovalBadge, { event }),
169
- summary && questions.length !== 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate text-xs text-muted-foreground", children: summary })
187
+ summary && questions.length !== 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate text-xs text-muted-foreground", children: summary }),
188
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto", children: cost })
170
189
  ] }),
171
190
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-1.5 space-y-1.5", children: [
172
191
  questions.length > 0 ? questions.map((question, index) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -195,7 +214,8 @@ function QuestionToolBody({
195
214
  questions,
196
215
  onDecision
197
216
  }
198
- )
217
+ ),
218
+ costFooter
199
219
  ] })
200
220
  ] });
201
221
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SessionViewer.tool-row.cjs","sources":["../../../src/data/ai/SessionViewer.tool-row.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { UiChevronDown } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { Icon } from \"../Icon\";\nimport {\n questionsFromApproval,\n questionsFromToolInput,\n shellCommand,\n summarizeToolInput,\n toolDiff,\n toolInputParams,\n} from \"./SessionViewer.input\";\nimport type { SessionEvent } from \"./SessionViewer.model\";\nimport { ApprovalBadge } from \"./SessionViewer.row-metadata\";\nimport {\n DetailBlock,\n DiffBlock,\n InlineParams,\n QuestionCard,\n ResponseBlock,\n} from \"./SessionViewer.tool-details\";\nimport { hasApprovalBody } from \"./approval-request\";\nimport { TypedApprovalBody } from \"./SessionViewer.approval-body\";\nimport {\n PendingDecisionControls,\n QuestionDecisionControls,\n} from \"./SessionViewer.decision-controls\";\nimport type { SessionToolDecision } from \"./SessionViewer\";\n\nexport function ToolBody({\n event,\n visual,\n defaultExpanded,\n onPendingToolDecision,\n}: {\n event: SessionEvent;\n visual: { label: string; summaryOnly: boolean };\n defaultExpanded: boolean;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const summary = summarizeToolInput(\n event.tool ?? \"\",\n event.toolInput,\n event.cwd,\n );\n const command = shellCommand(event.tool ?? \"\", event.toolInput);\n const [open, setOpen] = useState(defaultExpanded);\n\n if (event.tool === \"AskUserQuestion\" || event.approvalKind === \"question\") {\n return (\n <QuestionToolBody\n event={event}\n visual={visual}\n onDecision={onPendingToolDecision}\n />\n );\n }\n\n if (event.pending && hasApprovalBody(event.approvalRequest)) {\n return (\n <div className=\"not-prose\">\n <div className=\"flex items-center gap-1.5\">\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n <ApprovalBadge event={event} />\n </div>\n <TypedApprovalBody\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n </div>\n );\n }\n\n if (command !== undefined) {\n return (\n <div className=\"not-prose\">\n <div className=\"flex items-start gap-1.5\">\n <div className=\"min-w-0 flex-1\">\n <CodeBlock bare language=\"bash\" source={command} />\n </div>\n <ApprovalBadge event={event} />\n {event.toolResponse !== undefined && (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-label=\"Toggle response\"\n onClick={() => setOpen((value) => !value)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n )}\n </div>\n {open && event.toolResponse !== undefined && (\n <div className=\"mt-1.5\">\n <ResponseBlock response={event.toolResponse} />\n </div>\n )}\n {event.pending && onPendingToolDecision && (\n <PendingDecisionControls\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n )}\n </div>\n );\n }\n\n const hasDetail =\n event.toolInput !== undefined || event.toolResponse !== undefined;\n const params = toolInputParams(event.tool ?? \"\", event.toolInput, event.cwd);\n const diff = toolDiff(event.tool ?? \"\", event.toolInput);\n const header = (\n <>\n {visual.summaryOnly && summary ? (\n <span className=\"min-w-0 truncate font-mono text-xs text-foreground \">\n {summary}\n </span>\n ) : (\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n )}\n {diff && (\n <span className=\"shrink-0 font-mono text-xs\">\n {diff.added > 0 && (\n <span className=\"text-emerald-600 [[data-theme=dark]_&]:text-emerald-400\">\n +{diff.added}\n </span>\n )}\n {diff.removed > 0 && (\n <span className=\"ml-1 text-rose-600 [[data-theme=dark]_&]:text-rose-400\">\n -{diff.removed}\n </span>\n )}\n </span>\n )}\n <ApprovalBadge event={event} />\n {params.length > 0 && <InlineParams params={params} />}\n </>\n );\n\n return (\n <div className=\"not-prose\">\n {hasDetail ? (\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex w-full items-center gap-1.5 text-left hover:text-foreground\"\n >\n {header}\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"ml-auto size-3 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n ) : (\n <div className=\"flex items-center gap-1.5\">{header}</div>\n )}\n\n {open && hasDetail && (\n <div className=\"mt-1.5 space-y-1.5\">\n {diff ? (\n <DiffBlock diff={diff} />\n ) : (\n event.toolInput !== undefined && (\n <DetailBlock\n language=\"json\"\n source={JSON.stringify(event.toolInput, null, 2)}\n />\n )\n )}\n {event.toolResponse !== undefined && (\n <ResponseBlock response={event.toolResponse} />\n )}\n </div>\n )}\n {event.pending && onPendingToolDecision && (\n <PendingDecisionControls\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n )}\n </div>\n );\n}\n\nfunction QuestionToolBody({\n event,\n visual,\n onDecision,\n}: {\n event: SessionEvent;\n visual: { label: string };\n onDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const typedQuestions = event.approvalRequest?.questions;\n const questions = typedQuestions?.length\n ? questionsFromApproval(typedQuestions)\n : questionsFromToolInput(event.toolInput);\n const summary = summarizeToolInput(\n event.tool ?? \"\",\n event.toolInput,\n event.cwd,\n );\n\n return (\n <div className=\"not-prose\">\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n <ApprovalBadge event={event} />\n {summary && questions.length !== 1 && (\n <span className=\"min-w-0 truncate text-xs text-muted-foreground\">\n {summary}\n </span>\n )}\n </div>\n <div className=\"mt-1.5 space-y-1.5\">\n {questions.length > 0 ? (\n questions.map((question, index) => (\n <QuestionCard\n key={`${question.id}-${index}`}\n question={question}\n index={index}\n />\n ))\n ) : event.toolInput ? (\n <DetailBlock\n language=\"json\"\n source={JSON.stringify(event.toolInput, null, 2)}\n />\n ) : null}\n {event.toolResponse !== undefined && (\n <div className=\"space-y-1\">\n <div className=\"text-[11px] font-medium uppercase text-muted-foreground\">\n Answer\n </div>\n <ResponseBlock response={event.toolResponse} />\n </div>\n )}\n {event.pending && onDecision && (\n <QuestionDecisionControls\n event={event}\n request={event.approvalRequest}\n questions={questions}\n onDecision={onDecision}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":["summarizeToolInput","shellCommand","useState","jsx","hasApprovalBody","jsxs","ApprovalBadge","TypedApprovalBody","CodeBlock","Icon","UiChevronDown","cn","ResponseBlock","PendingDecisionControls","toolInputParams","toolDiff","Fragment","InlineParams","DiffBlock","DetailBlock","questionsFromApproval","questionsFromToolInput","QuestionCard","QuestionDecisionControls"],"mappings":";;;;;;;;;;;;;;AA8BO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOG;AACD,QAAM,UAAUA,oBAAAA;AAAAA,IACd,MAAM,QAAQ;AAAA,IACd,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAER,QAAM,UAAUC,oBAAAA,aAAa,MAAM,QAAQ,IAAI,MAAM,SAAS;AAC9D,QAAM,CAAC,MAAM,OAAO,IAAIC,MAAAA,SAAS,eAAe;AAEhD,MAAI,MAAM,SAAS,qBAAqB,MAAM,iBAAiB,YAAY;AACzE,WACEC,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,YAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAGlB;AAEA,MAAI,MAAM,WAAWC,gBAAAA,gBAAgB,MAAM,eAAe,GAAG;AAC3D,WACEC,2BAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,MAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,QAAAF,2BAAAA,IAAC,QAAA,EAAK,WAAU,wCACb,UAAA,OAAO,OACV;AAAA,QACAA,+BAACG,0BAAAA,iBAAc,MAAA,CAAc;AAAA,MAAA,GAC/B;AAAA,MACAH,2BAAAA;AAAAA,QAACI,2BAAAA;AAAAA,QAAA;AAAA,UACC;AAAA,UACA,SAAS,MAAM;AAAA,UACf,YAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IACd,GACF;AAAA,EAEJ;AAEA,MAAI,YAAY,QAAW;AACzB,WACEF,2BAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,MAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,4BACb,UAAA;AAAA,QAAAF,2BAAAA,IAAC,OAAA,EAAI,WAAU,kBACb,UAAAA,2BAAAA,IAACK,UAAAA,WAAA,EAAU,MAAI,MAAC,UAAS,QAAO,QAAQ,QAAA,CAAS,GACnD;AAAA,QACAL,+BAACG,0BAAAA,iBAAc,OAAc;AAAA,QAC5B,MAAM,iBAAiB,UACtBH,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,iBAAe;AAAA,YACf,cAAW;AAAA,YACX,SAAS,MAAM,QAAQ,CAAC,UAAU,CAAC,KAAK;AAAA,YACxC,WAAU;AAAA,YAEV,UAAAA,2BAAAA;AAAAA,cAACM,KAAAA;AAAAA,cAAA;AAAA,gBACC,MAAMC,cAAAA;AAAAA,gBACN,WAAWC,MAAAA;AAAAA,kBACT;AAAA,kBACA,QAAQ;AAAA,gBAAA;AAAA,cACV;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MACF,GAEJ;AAAA,MACC,QAAQ,MAAM,iBAAiB,UAC9BR,2BAAAA,IAAC,OAAA,EAAI,WAAU,UACb,UAAAA,2BAAAA,IAACS,0BAAAA,eAAA,EAAc,UAAU,MAAM,cAAc,GAC/C;AAAA,MAED,MAAM,WAAW,yBAChBT,2BAAAA;AAAAA,QAACU,+BAAAA;AAAAA,QAAA;AAAA,UACC;AAAA,UACA,SAAS,MAAM;AAAA,UACf,YAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IACd,GAEJ;AAAA,EAEJ;AAEA,QAAM,YACJ,MAAM,cAAc,UAAa,MAAM,iBAAiB;AAC1D,QAAM,SAASC,oCAAgB,MAAM,QAAQ,IAAI,MAAM,WAAW,MAAM,GAAG;AAC3E,QAAM,OAAOC,oBAAAA,SAAS,MAAM,QAAQ,IAAI,MAAM,SAAS;AACvD,QAAM,SACJV,2BAAAA,KAAAW,WAAAA,UAAA,EACG,UAAA;AAAA,IAAA,OAAO,eAAe,UACrBb,2BAAAA,IAAC,QAAA,EAAK,WAAU,uDACb,UAAA,QAAA,CACH,IAEAA,2BAAAA,IAAC,QAAA,EAAK,WAAU,wCACb,iBAAO,OACV;AAAA,IAED,QACCE,2BAAAA,KAAC,QAAA,EAAK,WAAU,8BACb,UAAA;AAAA,MAAA,KAAK,QAAQ,KACZA,2BAAAA,KAAC,QAAA,EAAK,WAAU,2DAA0D,UAAA;AAAA,QAAA;AAAA,QACtE,KAAK;AAAA,MAAA,GACT;AAAA,MAED,KAAK,UAAU,KACdA,2BAAAA,KAAC,QAAA,EAAK,WAAU,0DAAyD,UAAA;AAAA,QAAA;AAAA,QACrE,KAAK;AAAA,MAAA,EAAA,CACT;AAAA,IAAA,GAEJ;AAAA,IAEFF,+BAACG,0BAAAA,iBAAc,OAAc;AAAA,IAC5B,OAAO,SAAS,KAAKH,2BAAAA,IAACc,0BAAAA,gBAAa,OAAA,CAAgB;AAAA,EAAA,GACtD;AAGF,SACEZ,2BAAAA,KAAC,OAAA,EAAI,WAAU,aACZ,UAAA;AAAA,IAAA,YACCA,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,iBAAe;AAAA,QACf,SAAS,MAAM,QAAQ,CAAC,UAAU,CAAC,KAAK;AAAA,QACxC,WAAU;AAAA,QAET,UAAA;AAAA,UAAA;AAAA,UACDF,2BAAAA;AAAAA,YAACM,KAAAA;AAAAA,YAAA;AAAA,cACC,MAAMC,cAAAA;AAAAA,cACN,WAAWC,MAAAA;AAAAA,gBACT;AAAA,gBACA,QAAQ;AAAA,cAAA;AAAA,YACV;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA,IAGFR,2BAAAA,IAAC,OAAA,EAAI,WAAU,6BAA6B,UAAA,QAAO;AAAA,IAGpD,QAAQ,aACPE,gCAAC,OAAA,EAAI,WAAU,sBACZ,UAAA;AAAA,MAAA,sCACEa,0BAAAA,WAAA,EAAU,KAAA,CAAY,IAEvB,MAAM,cAAc,UAClBf,2BAAAA;AAAAA,QAACgB,0BAAAA;AAAAA,QAAA;AAAA,UACC,UAAS;AAAA,UACT,QAAQ,KAAK,UAAU,MAAM,WAAW,MAAM,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,MAIpD,MAAM,iBAAiB,yCACrBP,0BAAAA,eAAA,EAAc,UAAU,MAAM,aAAA,CAAc;AAAA,IAAA,GAEjD;AAAA,IAED,MAAM,WAAW,yBAChBT,2BAAAA;AAAAA,MAACU,+BAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,SAAS,MAAM;AAAA,QACf,YAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EACd,GAEJ;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,GAMG;;AACD,QAAM,kBAAiB,WAAM,oBAAN,mBAAuB;AAC9C,QAAM,aAAY,iDAAgB,UAC9BO,oBAAAA,sBAAsB,cAAc,IACpCC,oBAAAA,uBAAuB,MAAM,SAAS;AAC1C,QAAM,UAAUrB,oBAAAA;AAAAA,IACd,MAAM,QAAQ;AAAA,IACd,MAAM;AAAA,IACN,MAAM;AAAA,EAAA;AAGR,SACEK,2BAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,IAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,MAAAF,2BAAAA,IAAC,QAAA,EAAK,WAAU,wCACb,UAAA,OAAO,OACV;AAAA,MACAA,+BAACG,0BAAAA,iBAAc,OAAc;AAAA,MAC5B,WAAW,UAAU,WAAW,oCAC9B,QAAA,EAAK,WAAU,kDACb,UAAA,QAAA,CACH;AAAA,IAAA,GAEJ;AAAA,IACAD,2BAAAA,KAAC,OAAA,EAAI,WAAU,sBACZ,UAAA;AAAA,MAAA,UAAU,SAAS,IAClB,UAAU,IAAI,CAAC,UAAU,UACvBF,2BAAAA;AAAAA,QAACmB,0BAAAA;AAAAA,QAAA;AAAA,UAEC;AAAA,UACA;AAAA,QAAA;AAAA,QAFK,GAAG,SAAS,EAAE,IAAI,KAAK;AAAA,MAAA,CAI/B,IACC,MAAM,YACRnB,2BAAAA;AAAAA,QAACgB,0BAAAA;AAAAA,QAAA;AAAA,UACC,UAAS;AAAA,UACT,QAAQ,KAAK,UAAU,MAAM,WAAW,MAAM,CAAC;AAAA,QAAA;AAAA,MAAA,IAE/C;AAAA,MACH,MAAM,iBAAiB,UACtBd,2BAAAA,KAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAAAF,2BAAAA,IAAC,OAAA,EAAI,WAAU,2DAA0D,UAAA,UAEzE;AAAA,QACAA,2BAAAA,IAACS,0BAAAA,eAAA,EAAc,UAAU,MAAM,aAAA,CAAc;AAAA,MAAA,GAC/C;AAAA,MAED,MAAM,WAAW,cAChBT,2BAAAA;AAAAA,QAACoB,+BAAAA;AAAAA,QAAA;AAAA,UACC;AAAA,UACA,SAAS,MAAM;AAAA,UACf;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;;"}
1
+ {"version":3,"file":"SessionViewer.tool-row.cjs","sources":["../../../src/data/ai/SessionViewer.tool-row.tsx"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { UiChevronDown } from \"../../icons\";\nimport { cn } from \"../../lib/utils\";\nimport { CodeBlock } from \"../CodeBlock\";\nimport { Icon } from \"../Icon\";\nimport {\n questionsFromApproval,\n questionsFromToolInput,\n shellCommand,\n summarizeToolInput,\n toolDiff,\n toolInputParams,\n} from \"./SessionViewer.input\";\nimport type { SessionEvent } from \"./SessionViewer.model\";\nimport { ApprovalBadge } from \"./SessionViewer.row-metadata\";\nimport {\n DetailBlock,\n DiffBlock,\n InlineParams,\n QuestionCard,\n ResponseBlock,\n} from \"./SessionViewer.tool-details\";\nimport { hasApprovalBody } from \"./approval-request\";\nimport { TypedApprovalBody } from \"./SessionViewer.approval-body\";\nimport {\n PendingDecisionControls,\n QuestionDecisionControls,\n} from \"./SessionViewer.decision-controls\";\nimport type { SessionToolDecision } from \"./SessionViewer\";\nimport { EstimatedToolCost } from \"./SessionViewer.tool-cost\";\n\nexport function ToolBody({\n event,\n visual,\n defaultExpanded,\n showEstimatedToolCost = false,\n onPendingToolDecision,\n}: {\n event: SessionEvent;\n visual: { label: string; summaryOnly: boolean };\n defaultExpanded: boolean;\n showEstimatedToolCost?: boolean;\n onPendingToolDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const summary = summarizeToolInput(\n event.tool ?? \"\",\n event.toolInput,\n event.cwd,\n );\n const command = shellCommand(event.tool ?? \"\", event.toolInput);\n const [open, setOpen] = useState(defaultExpanded);\n const cost = showEstimatedToolCost ? <EstimatedToolCost events={[event]} /> : null;\n const costFooter = showEstimatedToolCost ? <EstimatedToolCost events={[event]} detailed /> : null;\n const hasDetail = event.toolResponse !== undefined || (command === undefined && event.toolInput !== undefined) || (showEstimatedToolCost && event.estimatedCost !== undefined);\n\n if (event.tool === \"AskUserQuestion\" || event.approvalKind === \"question\") {\n return (\n <QuestionToolBody\n event={event}\n visual={visual}\n onDecision={onPendingToolDecision}\n cost={cost}\n costFooter={costFooter}\n />\n );\n }\n\n if (event.pending && hasApprovalBody(event.approvalRequest)) {\n return (\n <div className=\"not-prose\">\n <div data-tool-header className=\"flex items-center gap-1.5\">\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n <ApprovalBadge event={event} />\n <span className=\"ml-auto\">{cost}</span>\n </div>\n <TypedApprovalBody\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n {costFooter}\n </div>\n );\n }\n\n if (command !== undefined) {\n return (\n <div className=\"not-prose\">\n <div data-tool-header className=\"flex items-start gap-1.5\">\n <div className=\"min-w-0 flex-1\">\n <CodeBlock bare language=\"bash\" source={command} />\n </div>\n <ApprovalBadge event={event} />\n {cost}\n {hasDetail && (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-label=\"Toggle response\"\n onClick={() => setOpen((value) => !value)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"size-3 shrink-0 transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n )}\n </div>\n {open && hasDetail && (\n <div className=\"mt-1.5\">\n {event.toolResponse !== undefined && <ResponseBlock response={event.toolResponse} />}\n {costFooter}\n </div>\n )}\n {event.pending && onPendingToolDecision && (\n <PendingDecisionControls\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n )}\n </div>\n );\n }\n\n const params = toolInputParams(event.tool ?? \"\", event.toolInput, event.cwd);\n const diff = toolDiff(event.tool ?? \"\", event.toolInput);\n const header = (\n <>\n {visual.summaryOnly && summary ? (\n <span className=\"min-w-0 truncate font-mono text-xs text-foreground \">\n {summary}\n </span>\n ) : (\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n )}\n {diff && (\n <span className=\"shrink-0 font-mono text-xs\">\n {diff.added > 0 && (\n <span className=\"text-emerald-600 [[data-theme=dark]_&]:text-emerald-400\">\n +{diff.added}\n </span>\n )}\n {diff.removed > 0 && (\n <span className=\"ml-1 text-rose-600 [[data-theme=dark]_&]:text-rose-400\">\n -{diff.removed}\n </span>\n )}\n </span>\n )}\n <ApprovalBadge event={event} />\n {params.length > 0 && <InlineParams params={params} />}\n </>\n );\n\n return (\n <div className=\"not-prose\">\n <div data-tool-header className=\"flex items-center gap-1.5\">\n {hasDetail ? (\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n className=\"flex min-w-0 flex-1 items-center gap-1.5 text-left hover:text-foreground\"\n >\n {header}\n <Icon\n icon={UiChevronDown}\n className={cn(\n \"ml-auto size-3 shrink-0 text-muted-foreground transition-transform\",\n open && \"rotate-180\",\n )}\n />\n </button>\n ) : (\n <div className=\"flex min-w-0 flex-1 items-center gap-1.5\">{header}</div>\n )}\n {cost}\n </div>\n\n {open && hasDetail && (\n <div className=\"mt-1.5 space-y-1.5\">\n {diff ? (\n <DiffBlock diff={diff} />\n ) : (\n event.toolInput !== undefined && (\n <DetailBlock\n language=\"json\"\n source={JSON.stringify(event.toolInput, null, 2)}\n />\n )\n )}\n {event.toolResponse !== undefined && (\n <ResponseBlock response={event.toolResponse} />\n )}\n {costFooter}\n </div>\n )}\n {event.pending && onPendingToolDecision && (\n <PendingDecisionControls\n event={event}\n request={event.approvalRequest}\n onDecision={onPendingToolDecision}\n />\n )}\n </div>\n );\n}\n\nfunction QuestionToolBody({\n event,\n visual,\n onDecision,\n cost,\n costFooter,\n}: {\n event: SessionEvent;\n visual: { label: string };\n cost: ReactNode;\n costFooter: ReactNode;\n onDecision?:\n | ((decision: SessionToolDecision) => Promise<void> | void)\n | undefined;\n}) {\n const typedQuestions = event.approvalRequest?.questions;\n const questions = typedQuestions?.length\n ? questionsFromApproval(typedQuestions)\n : questionsFromToolInput(event.toolInput);\n const summary = summarizeToolInput(\n event.tool ?? \"\",\n event.toolInput,\n event.cwd,\n );\n\n return (\n <div className=\"not-prose\">\n <div data-tool-header className=\"flex items-center gap-1.5\">\n <span className=\"shrink-0 font-medium text-foreground\">\n {visual.label}\n </span>\n <ApprovalBadge event={event} />\n {summary && questions.length !== 1 && (\n <span className=\"min-w-0 flex-1 truncate text-xs text-muted-foreground\">\n {summary}\n </span>\n )}\n <span className=\"ml-auto\">{cost}</span>\n </div>\n <div className=\"mt-1.5 space-y-1.5\">\n {questions.length > 0 ? (\n questions.map((question, index) => (\n <QuestionCard\n key={`${question.id}-${index}`}\n question={question}\n index={index}\n />\n ))\n ) : event.toolInput ? (\n <DetailBlock\n language=\"json\"\n source={JSON.stringify(event.toolInput, null, 2)}\n />\n ) : null}\n {event.toolResponse !== undefined && (\n <div className=\"space-y-1\">\n <div className=\"text-[11px] font-medium uppercase text-muted-foreground\">\n Answer\n </div>\n <ResponseBlock response={event.toolResponse} />\n </div>\n )}\n {event.pending && onDecision && (\n <QuestionDecisionControls\n event={event}\n request={event.approvalRequest}\n questions={questions}\n onDecision={onDecision}\n />\n )}\n {costFooter}\n </div>\n </div>\n );\n}\n"],"names":["summarizeToolInput","shellCommand","useState","jsx","EstimatedToolCost","hasApprovalBody","jsxs","ApprovalBadge","TypedApprovalBody","CodeBlock","Icon","UiChevronDown","cn","ResponseBlock","PendingDecisionControls","toolInputParams","toolDiff","Fragment","InlineParams","DiffBlock","DetailBlock","questionsFromApproval","questionsFromToolInput","QuestionCard","QuestionDecisionControls"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import { SessionEvent } from './SessionViewer.model.js';
2
2
  import { SessionToolDecision } from './SessionViewer.js';
3
- export declare function ToolBody({ event, visual, defaultExpanded, onPendingToolDecision, }: {
3
+ export declare function ToolBody({ event, visual, defaultExpanded, showEstimatedToolCost, onPendingToolDecision, }: {
4
4
  event: SessionEvent;
5
5
  visual: {
6
6
  label: string;
7
7
  summaryOnly: boolean;
8
8
  };
9
9
  defaultExpanded: boolean;
10
+ showEstimatedToolCost?: boolean;
10
11
  onPendingToolDecision?: ((decision: SessionToolDecision) => Promise<void> | void) | undefined;
11
12
  }): import("react").JSX.Element;
12
13
  //# sourceMappingURL=SessionViewer.tool-row.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionViewer.tool-row.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.tool-row.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAe1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,MAAM,EACN,eAAe,EACf,qBAAqB,GACtB,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IAChD,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,CAAC,EAClB,CAAC,CAAC,QAAQ,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GACzD,SAAS,CAAC;CACf,+BAiKA"}
1
+ {"version":3,"file":"SessionViewer.tool-row.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.tool-row.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAe1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,MAAM,EACN,eAAe,EACf,qBAA6B,EAC7B,qBAAqB,GACtB,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IAChD,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAClB,CAAC,CAAC,QAAQ,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GACzD,SAAS,CAAC;CACf,+BA4KA"}