@flanksource/clicky-ui 0.3.44 → 0.3.45

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 (471) hide show
  1. package/README.md +2 -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/CodeBlock.cjs +3 -2
  16. package/dist/data/CodeBlock.cjs.map +1 -1
  17. package/dist/data/CodeBlock.d.ts +3 -1
  18. package/dist/data/CodeBlock.d.ts.map +1 -1
  19. package/dist/data/CodeBlock.js +3 -2
  20. package/dist/data/CodeBlock.js.map +1 -1
  21. package/dist/data/GraphDiagram.cjs +18 -6
  22. package/dist/data/GraphDiagram.cjs.map +1 -1
  23. package/dist/data/GraphDiagram.d.ts +9 -1
  24. package/dist/data/GraphDiagram.d.ts.map +1 -1
  25. package/dist/data/GraphDiagram.js +18 -6
  26. package/dist/data/GraphDiagram.js.map +1 -1
  27. package/dist/data/GraphDiagramNodes.cjs +38 -29
  28. package/dist/data/GraphDiagramNodes.cjs.map +1 -1
  29. package/dist/data/GraphDiagramNodes.d.ts +8 -2
  30. package/dist/data/GraphDiagramNodes.d.ts.map +1 -1
  31. package/dist/data/GraphDiagramNodes.js +38 -29
  32. package/dist/data/GraphDiagramNodes.js.map +1 -1
  33. package/dist/data/JsonView.cjs +118 -49
  34. package/dist/data/JsonView.cjs.map +1 -1
  35. package/dist/data/JsonView.d.ts +13 -10
  36. package/dist/data/JsonView.d.ts.map +1 -1
  37. package/dist/data/JsonView.js +118 -49
  38. package/dist/data/JsonView.js.map +1 -1
  39. package/dist/data/MarkdownEditor.cjs +2 -2
  40. package/dist/data/MarkdownEditor.cjs.map +1 -1
  41. package/dist/data/MarkdownEditor.js +2 -2
  42. package/dist/data/MarkdownEditor.js.map +1 -1
  43. package/dist/data/ai/AdvancedChatConfig.cjs +90 -249
  44. package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -1
  45. package/dist/data/ai/AdvancedChatConfig.d.ts +2 -5
  46. package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -1
  47. package/dist/data/ai/AdvancedChatConfig.js +91 -250
  48. package/dist/data/ai/AdvancedChatConfig.js.map +1 -1
  49. package/dist/data/ai/ChatButton.cjs +2 -0
  50. package/dist/data/ai/ChatButton.cjs.map +1 -1
  51. package/dist/data/ai/ChatButton.d.ts +1 -1
  52. package/dist/data/ai/ChatButton.d.ts.map +1 -1
  53. package/dist/data/ai/ChatButton.js +2 -0
  54. package/dist/data/ai/ChatButton.js.map +1 -1
  55. package/dist/data/ai/ChatFab.cjs +5 -1
  56. package/dist/data/ai/ChatFab.cjs.map +1 -1
  57. package/dist/data/ai/ChatFab.d.ts +5 -1
  58. package/dist/data/ai/ChatFab.d.ts.map +1 -1
  59. package/dist/data/ai/ChatFab.js +5 -1
  60. package/dist/data/ai/ChatFab.js.map +1 -1
  61. package/dist/data/ai/ChatWindow.cjs +2 -8
  62. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  63. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  64. package/dist/data/ai/ChatWindow.js +2 -8
  65. package/dist/data/ai/ChatWindow.js.map +1 -1
  66. package/dist/data/ai/ChatWindow.runtime.cjs +0 -5
  67. package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -1
  68. package/dist/data/ai/ChatWindow.runtime.d.ts +0 -2
  69. package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -1
  70. package/dist/data/ai/ChatWindow.runtime.js +0 -5
  71. package/dist/data/ai/ChatWindow.runtime.js.map +1 -1
  72. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs +2 -2
  73. package/dist/data/ai/PromptRunEditor/runtimeActions.cjs.map +1 -1
  74. package/dist/data/ai/PromptRunEditor/runtimeActions.d.ts.map +1 -1
  75. package/dist/data/ai/PromptRunEditor/runtimeActions.js +2 -2
  76. package/dist/data/ai/PromptRunEditor/runtimeActions.js.map +1 -1
  77. package/dist/data/ai/SessionInspector.approvals.cjs +3 -6
  78. package/dist/data/ai/SessionInspector.approvals.cjs.map +1 -1
  79. package/dist/data/ai/SessionInspector.approvals.js +3 -6
  80. package/dist/data/ai/SessionInspector.approvals.js.map +1 -1
  81. package/dist/data/ai/SessionViewer.cjs +13 -4
  82. package/dist/data/ai/SessionViewer.cjs.map +1 -1
  83. package/dist/data/ai/SessionViewer.d.ts +5 -1
  84. package/dist/data/ai/SessionViewer.d.ts.map +1 -1
  85. package/dist/data/ai/SessionViewer.header.cjs +1 -1
  86. package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
  87. package/dist/data/ai/SessionViewer.header.js +1 -1
  88. package/dist/data/ai/SessionViewer.header.js.map +1 -1
  89. package/dist/data/ai/SessionViewer.js +13 -4
  90. package/dist/data/ai/SessionViewer.js.map +1 -1
  91. package/dist/data/ai/SessionViewer.model.cjs +2 -0
  92. package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
  93. package/dist/data/ai/SessionViewer.model.d.ts +1 -0
  94. package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
  95. package/dist/data/ai/SessionViewer.model.js +2 -0
  96. package/dist/data/ai/SessionViewer.model.js.map +1 -1
  97. package/dist/data/ai/SessionViewer.rows.cjs +41 -27
  98. package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
  99. package/dist/data/ai/SessionViewer.rows.d.ts +4 -2
  100. package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
  101. package/dist/data/ai/SessionViewer.rows.js +41 -27
  102. package/dist/data/ai/SessionViewer.rows.js.map +1 -1
  103. package/dist/data/ai/SessionViewer.tokens.cjs +35 -0
  104. package/dist/data/ai/SessionViewer.tokens.cjs.map +1 -0
  105. package/dist/data/ai/SessionViewer.tokens.d.ts +5 -0
  106. package/dist/data/ai/SessionViewer.tokens.d.ts.map +1 -0
  107. package/dist/data/ai/SessionViewer.tokens.js +35 -0
  108. package/dist/data/ai/SessionViewer.tokens.js.map +1 -0
  109. package/dist/data/ai/SessionViewer.tool-cost.cjs +128 -0
  110. package/dist/data/ai/SessionViewer.tool-cost.cjs.map +1 -0
  111. package/dist/data/ai/SessionViewer.tool-cost.d.ts +6 -0
  112. package/dist/data/ai/SessionViewer.tool-cost.d.ts.map +1 -0
  113. package/dist/data/ai/SessionViewer.tool-cost.js +128 -0
  114. package/dist/data/ai/SessionViewer.tool-cost.js.map +1 -0
  115. package/dist/data/ai/SessionViewer.tool-details.cjs +3 -1
  116. package/dist/data/ai/SessionViewer.tool-details.cjs.map +1 -1
  117. package/dist/data/ai/SessionViewer.tool-details.d.ts.map +1 -1
  118. package/dist/data/ai/SessionViewer.tool-details.js +3 -1
  119. package/dist/data/ai/SessionViewer.tool-details.js.map +1 -1
  120. package/dist/data/ai/SessionViewer.tool-row.cjs +55 -35
  121. package/dist/data/ai/SessionViewer.tool-row.cjs.map +1 -1
  122. package/dist/data/ai/SessionViewer.tool-row.d.ts +2 -1
  123. package/dist/data/ai/SessionViewer.tool-row.d.ts.map +1 -1
  124. package/dist/data/ai/SessionViewer.tool-row.js +55 -35
  125. package/dist/data/ai/SessionViewer.tool-row.js.map +1 -1
  126. package/dist/data/ai/SessionViewer.unified.d.ts +4 -0
  127. package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
  128. package/dist/data/ai/SessionViewerMenu.cjs +18 -1
  129. package/dist/data/ai/SessionViewerMenu.cjs.map +1 -1
  130. package/dist/data/ai/SessionViewerMenu.d.ts +6 -1
  131. package/dist/data/ai/SessionViewerMenu.d.ts.map +1 -1
  132. package/dist/data/ai/SessionViewerMenu.js +18 -1
  133. package/dist/data/ai/SessionViewerMenu.js.map +1 -1
  134. package/dist/data/ai/ToolPreferences.cjs +149 -143
  135. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  136. package/dist/data/ai/ToolPreferences.d.ts +20 -6
  137. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  138. package/dist/data/ai/ToolPreferences.js +151 -146
  139. package/dist/data/ai/ToolPreferences.js.map +1 -1
  140. package/dist/data/ai/ToolPreferences.model.cjs +14 -10
  141. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  142. package/dist/data/ai/ToolPreferences.model.d.ts +1 -0
  143. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  144. package/dist/data/ai/ToolPreferences.model.js +15 -11
  145. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  146. package/dist/data/ai/ToolPreferencesList.cjs +1 -0
  147. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  148. package/dist/data/ai/ToolPreferencesList.d.ts +4 -1
  149. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  150. package/dist/data/ai/ToolPreferencesList.js +2 -1
  151. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  152. package/dist/data/ai/ToolSchemaBrowser.cjs +52 -53
  153. package/dist/data/ai/ToolSchemaBrowser.cjs.map +1 -1
  154. package/dist/data/ai/ToolSchemaBrowser.d.ts +6 -3
  155. package/dist/data/ai/ToolSchemaBrowser.d.ts.map +1 -1
  156. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs +9 -13
  157. package/dist/data/ai/ToolSchemaBrowser.directory-header.cjs.map +1 -1
  158. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts +5 -2
  159. package/dist/data/ai/ToolSchemaBrowser.directory-header.d.ts.map +1 -1
  160. package/dist/data/ai/ToolSchemaBrowser.directory-header.js +9 -13
  161. package/dist/data/ai/ToolSchemaBrowser.directory-header.js.map +1 -1
  162. package/dist/data/ai/ToolSchemaBrowser.js +53 -54
  163. package/dist/data/ai/ToolSchemaBrowser.js.map +1 -1
  164. package/dist/data/ai/ToolSchemaBrowser.model.cjs +19 -27
  165. package/dist/data/ai/ToolSchemaBrowser.model.cjs.map +1 -1
  166. package/dist/data/ai/ToolSchemaBrowser.model.d.ts +9 -6
  167. package/dist/data/ai/ToolSchemaBrowser.model.d.ts.map +1 -1
  168. package/dist/data/ai/ToolSchemaBrowser.model.js +20 -28
  169. package/dist/data/ai/ToolSchemaBrowser.model.js.map +1 -1
  170. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs +12 -213
  171. package/dist/data/ai/ToolSchemaBrowser.sidebar.cjs.map +1 -1
  172. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts +1 -3
  173. package/dist/data/ai/ToolSchemaBrowser.sidebar.d.ts.map +1 -1
  174. package/dist/data/ai/ToolSchemaBrowser.sidebar.js +13 -214
  175. package/dist/data/ai/ToolSchemaBrowser.sidebar.js.map +1 -1
  176. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs +54 -0
  177. package/dist/data/ai/ToolSchemaBrowser.strategies.cjs.map +1 -0
  178. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts +9 -0
  179. package/dist/data/ai/ToolSchemaBrowser.strategies.d.ts.map +1 -0
  180. package/dist/data/ai/ToolSchemaBrowser.strategies.js +54 -0
  181. package/dist/data/ai/ToolSchemaBrowser.strategies.js.map +1 -0
  182. package/dist/data/ai/ToolSchemaBrowser.tree.cjs +179 -0
  183. package/dist/data/ai/ToolSchemaBrowser.tree.cjs.map +1 -0
  184. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts +20 -0
  185. package/dist/data/ai/ToolSchemaBrowser.tree.d.ts.map +1 -0
  186. package/dist/data/ai/ToolSchemaBrowser.tree.js +179 -0
  187. package/dist/data/ai/ToolSchemaBrowser.tree.js.map +1 -0
  188. package/dist/data/ai/index.d.ts +2 -2
  189. package/dist/data/ai/index.d.ts.map +1 -1
  190. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs +8 -28
  191. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.cjs.map +1 -1
  192. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.d.ts.map +1 -1
  193. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js +9 -29
  194. package/dist/data/ai/runtime-profiles/PermissionStrategiesEditor.js.map +1 -1
  195. package/dist/data/ai/session-token-sizing.d.ts +32 -0
  196. package/dist/data/ai/session-token-sizing.d.ts.map +1 -0
  197. package/dist/data/ai/use-session-token-sizing.cjs +73 -0
  198. package/dist/data/ai/use-session-token-sizing.cjs.map +1 -0
  199. package/dist/data/ai/use-session-token-sizing.d.ts +21 -0
  200. package/dist/data/ai/use-session-token-sizing.d.ts.map +1 -0
  201. package/dist/data/ai/use-session-token-sizing.js +73 -0
  202. package/dist/data/ai/use-session-token-sizing.js.map +1 -0
  203. package/dist/data/call-graph/CallGraph.cjs +250 -0
  204. package/dist/data/call-graph/CallGraph.cjs.map +1 -0
  205. package/dist/data/call-graph/CallGraph.d.ts +69 -0
  206. package/dist/data/call-graph/CallGraph.d.ts.map +1 -0
  207. package/dist/data/call-graph/CallGraph.js +250 -0
  208. package/dist/data/call-graph/CallGraph.js.map +1 -0
  209. package/dist/data/call-graph/CallGraphGlyphs.cjs +39 -0
  210. package/dist/data/call-graph/CallGraphGlyphs.cjs.map +1 -0
  211. package/dist/data/call-graph/CallGraphGlyphs.d.ts +19 -0
  212. package/dist/data/call-graph/CallGraphGlyphs.d.ts.map +1 -0
  213. package/dist/data/call-graph/CallGraphGlyphs.js +39 -0
  214. package/dist/data/call-graph/CallGraphGlyphs.js.map +1 -0
  215. package/dist/data/call-graph/CallGraphMembers.cjs +50 -0
  216. package/dist/data/call-graph/CallGraphMembers.cjs.map +1 -0
  217. package/dist/data/call-graph/CallGraphMembers.d.ts +22 -0
  218. package/dist/data/call-graph/CallGraphMembers.d.ts.map +1 -0
  219. package/dist/data/call-graph/CallGraphMembers.js +50 -0
  220. package/dist/data/call-graph/CallGraphMembers.js.map +1 -0
  221. package/dist/data/call-graph/CallGraphParts.cjs +204 -0
  222. package/dist/data/call-graph/CallGraphParts.cjs.map +1 -0
  223. package/dist/data/call-graph/CallGraphParts.d.ts +44 -0
  224. package/dist/data/call-graph/CallGraphParts.d.ts.map +1 -0
  225. package/dist/data/call-graph/CallGraphParts.js +204 -0
  226. package/dist/data/call-graph/CallGraphParts.js.map +1 -0
  227. package/dist/data/call-graph/CallGraphToolbar.cjs +186 -0
  228. package/dist/data/call-graph/CallGraphToolbar.cjs.map +1 -0
  229. package/dist/data/call-graph/CallGraphToolbar.d.ts +45 -0
  230. package/dist/data/call-graph/CallGraphToolbar.d.ts.map +1 -0
  231. package/dist/data/call-graph/CallGraphToolbar.js +186 -0
  232. package/dist/data/call-graph/CallGraphToolbar.js.map +1 -0
  233. package/dist/data/call-graph/call-graph-exclude.cjs +75 -0
  234. package/dist/data/call-graph/call-graph-exclude.cjs.map +1 -0
  235. package/dist/data/call-graph/call-graph-exclude.d.ts +31 -0
  236. package/dist/data/call-graph/call-graph-exclude.d.ts.map +1 -0
  237. package/dist/data/call-graph/call-graph-exclude.js +75 -0
  238. package/dist/data/call-graph/call-graph-exclude.js.map +1 -0
  239. package/dist/data/call-graph/call-graph-labels.cjs +96 -0
  240. package/dist/data/call-graph/call-graph-labels.cjs.map +1 -0
  241. package/dist/data/call-graph/call-graph-labels.d.ts +53 -0
  242. package/dist/data/call-graph/call-graph-labels.d.ts.map +1 -0
  243. package/dist/data/call-graph/call-graph-labels.js +96 -0
  244. package/dist/data/call-graph/call-graph-labels.js.map +1 -0
  245. package/dist/data/call-graph/call-graph-model.cjs +161 -0
  246. package/dist/data/call-graph/call-graph-model.cjs.map +1 -0
  247. package/dist/data/call-graph/call-graph-model.d.ts +102 -0
  248. package/dist/data/call-graph/call-graph-model.d.ts.map +1 -0
  249. package/dist/data/call-graph/call-graph-model.js +161 -0
  250. package/dist/data/call-graph/call-graph-model.js.map +1 -0
  251. package/dist/data/call-graph/call-graph-vocabulary.cjs +177 -0
  252. package/dist/data/call-graph/call-graph-vocabulary.cjs.map +1 -0
  253. package/dist/data/call-graph/call-graph-vocabulary.d.ts +72 -0
  254. package/dist/data/call-graph/call-graph-vocabulary.d.ts.map +1 -0
  255. package/dist/data/call-graph/call-graph-vocabulary.js +177 -0
  256. package/dist/data/call-graph/call-graph-vocabulary.js.map +1 -0
  257. package/dist/data/call-graph/call-graph.fixtures.d.ts +63 -0
  258. package/dist/data/call-graph/call-graph.fixtures.d.ts.map +1 -0
  259. package/dist/data/call-graph/index.d.ts +7 -0
  260. package/dist/data/call-graph/index.d.ts.map +1 -0
  261. package/dist/data/call-graph/types.cjs +5 -0
  262. package/dist/data/call-graph/types.cjs.map +1 -0
  263. package/dist/data/call-graph/types.d.ts +135 -0
  264. package/dist/data/call-graph/types.d.ts.map +1 -0
  265. package/dist/data/call-graph/types.js +5 -0
  266. package/dist/data/call-graph/types.js.map +1 -0
  267. package/dist/data/call-graph/use-call-graph.cjs +93 -0
  268. package/dist/data/call-graph/use-call-graph.cjs.map +1 -0
  269. package/dist/data/call-graph/use-call-graph.d.ts +24 -0
  270. package/dist/data/call-graph/use-call-graph.d.ts.map +1 -0
  271. package/dist/data/call-graph/use-call-graph.js +93 -0
  272. package/dist/data/call-graph/use-call-graph.js.map +1 -0
  273. package/dist/data/chat/Chat.cjs +39 -15
  274. package/dist/data/chat/Chat.cjs.map +1 -1
  275. package/dist/data/chat/Chat.d.ts.map +1 -1
  276. package/dist/data/chat/Chat.fixtures.cjs +2 -2
  277. package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
  278. package/dist/data/chat/Chat.fixtures.js +2 -2
  279. package/dist/data/chat/Chat.fixtures.js.map +1 -1
  280. package/dist/data/chat/Chat.js +40 -16
  281. package/dist/data/chat/Chat.js.map +1 -1
  282. package/dist/data/chat/ChatRuntimeToolbar.cjs +3 -6
  283. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  284. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  285. package/dist/data/chat/ChatRuntimeToolbar.js +3 -6
  286. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  287. package/dist/data/chat/ContextMeter.bar.cjs +5 -8
  288. package/dist/data/chat/ContextMeter.bar.cjs.map +1 -1
  289. package/dist/data/chat/ContextMeter.bar.d.ts +1 -1
  290. package/dist/data/chat/ContextMeter.bar.d.ts.map +1 -1
  291. package/dist/data/chat/ContextMeter.bar.js +5 -8
  292. package/dist/data/chat/ContextMeter.bar.js.map +1 -1
  293. package/dist/data/chat/ContextMeter.cjs +18 -19
  294. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  295. package/dist/data/chat/ContextMeter.d.ts +1 -1
  296. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  297. package/dist/data/chat/ContextMeter.js +18 -19
  298. package/dist/data/chat/ContextMeter.js.map +1 -1
  299. package/dist/data/chat/Conversation.cjs +2 -1
  300. package/dist/data/chat/Conversation.cjs.map +1 -1
  301. package/dist/data/chat/Conversation.d.ts +4 -1
  302. package/dist/data/chat/Conversation.d.ts.map +1 -1
  303. package/dist/data/chat/Conversation.js +2 -1
  304. package/dist/data/chat/Conversation.js.map +1 -1
  305. package/dist/data/chat/Message.cjs +39 -12
  306. package/dist/data/chat/Message.cjs.map +1 -1
  307. package/dist/data/chat/Message.d.ts +1 -1
  308. package/dist/data/chat/Message.d.ts.map +1 -1
  309. package/dist/data/chat/Message.js +40 -13
  310. package/dist/data/chat/Message.js.map +1 -1
  311. package/dist/data/chat/ToolCall.cjs +60 -5
  312. package/dist/data/chat/ToolCall.cjs.map +1 -1
  313. package/dist/data/chat/ToolCall.d.ts +7 -2
  314. package/dist/data/chat/ToolCall.d.ts.map +1 -1
  315. package/dist/data/chat/ToolCall.js +60 -5
  316. package/dist/data/chat/ToolCall.js.map +1 -1
  317. package/dist/data/chat/approval.cjs.map +1 -1
  318. package/dist/data/chat/approval.d.ts +2 -2
  319. package/dist/data/chat/approval.d.ts.map +1 -1
  320. package/dist/data/chat/approval.js.map +1 -1
  321. package/dist/data/chat/tool-policy.cjs +59 -2
  322. package/dist/data/chat/tool-policy.cjs.map +1 -1
  323. package/dist/data/chat/tool-policy.d.ts +9 -0
  324. package/dist/data/chat/tool-policy.d.ts.map +1 -1
  325. package/dist/data/chat/tool-policy.js +59 -2
  326. package/dist/data/chat/tool-policy.js.map +1 -1
  327. package/dist/data/chat/types.cjs +6 -0
  328. package/dist/data/chat/types.cjs.map +1 -1
  329. package/dist/data/chat/types.d.ts +13 -4
  330. package/dist/data/chat/types.d.ts.map +1 -1
  331. package/dist/data/chat/types.js +7 -1
  332. package/dist/data/chat/types.js.map +1 -1
  333. package/dist/data/chat/usage-snapshot.cjs +11 -6
  334. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  335. package/dist/data/chat/usage-snapshot.d.ts +0 -1
  336. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  337. package/dist/data/chat/usage-snapshot.js +11 -6
  338. package/dist/data/chat/usage-snapshot.js.map +1 -1
  339. package/dist/data/diagnostics/StackFrameRow.cjs +3 -3
  340. package/dist/data/diagnostics/StackFrameRow.cjs.map +1 -1
  341. package/dist/data/diagnostics/StackFrameRow.js +3 -3
  342. package/dist/data/diagnostics/StackFrameRow.js.map +1 -1
  343. package/dist/data/graph-columns-layout.cjs +26 -10
  344. package/dist/data/graph-columns-layout.cjs.map +1 -1
  345. package/dist/data/graph-columns-layout.d.ts +8 -0
  346. package/dist/data/graph-columns-layout.d.ts.map +1 -1
  347. package/dist/data/graph-columns-layout.js +26 -10
  348. package/dist/data/graph-columns-layout.js.map +1 -1
  349. package/dist/data/graph-diagram-model.cjs.map +1 -1
  350. package/dist/data/graph-diagram-model.d.ts +5 -0
  351. package/dist/data/graph-diagram-model.d.ts.map +1 -1
  352. package/dist/data/graph-diagram-model.js.map +1 -1
  353. package/dist/data/graph-edge-routing.cjs +9 -3
  354. package/dist/data/graph-edge-routing.cjs.map +1 -1
  355. package/dist/data/graph-edge-routing.d.ts +2 -0
  356. package/dist/data/graph-edge-routing.d.ts.map +1 -1
  357. package/dist/data/graph-edge-routing.js +9 -3
  358. package/dist/data/graph-edge-routing.js.map +1 -1
  359. package/dist/data/json-view/JsonSource.cjs +84 -0
  360. package/dist/data/json-view/JsonSource.cjs.map +1 -0
  361. package/dist/data/json-view/JsonSource.d.ts +7 -0
  362. package/dist/data/json-view/JsonSource.d.ts.map +1 -0
  363. package/dist/data/json-view/JsonSource.js +84 -0
  364. package/dist/data/json-view/JsonSource.js.map +1 -0
  365. package/dist/data/json-view/parse-prefix.cjs +132 -0
  366. package/dist/data/json-view/parse-prefix.cjs.map +1 -0
  367. package/dist/data/json-view/parse-prefix.d.ts +11 -0
  368. package/dist/data/json-view/parse-prefix.d.ts.map +1 -0
  369. package/dist/data/json-view/parse-prefix.js +132 -0
  370. package/dist/data/json-view/parse-prefix.js.map +1 -0
  371. package/dist/data/json-view/parse-source.cjs +62 -0
  372. package/dist/data/json-view/parse-source.cjs.map +1 -0
  373. package/dist/data/json-view/parse-source.d.ts +16 -0
  374. package/dist/data/json-view/parse-source.d.ts.map +1 -0
  375. package/dist/data/json-view/parse-source.js +62 -0
  376. package/dist/data/json-view/parse-source.js.map +1 -0
  377. package/dist/data/json-view/story-fixtures.d.ts +6 -0
  378. package/dist/data/json-view/story-fixtures.d.ts.map +1 -0
  379. package/dist/data/json-view/types.d.ts +14 -0
  380. package/dist/data/json-view/types.d.ts.map +1 -0
  381. package/dist/data/runtime/RuntimeBar.cjs +2 -5
  382. package/dist/data/runtime/RuntimeBar.cjs.map +1 -1
  383. package/dist/data/runtime/RuntimeBar.d.ts +2 -4
  384. package/dist/data/runtime/RuntimeBar.d.ts.map +1 -1
  385. package/dist/data/runtime/RuntimeBar.fields.cjs +2 -2
  386. package/dist/data/runtime/RuntimeBar.fields.cjs.map +1 -1
  387. package/dist/data/runtime/RuntimeBar.fields.js +2 -2
  388. package/dist/data/runtime/RuntimeBar.fields.js.map +1 -1
  389. package/dist/data/runtime/RuntimeBar.js +2 -5
  390. package/dist/data/runtime/RuntimeBar.js.map +1 -1
  391. package/dist/data/runtime/RuntimeBar.selection.cjs +4 -1
  392. package/dist/data/runtime/RuntimeBar.selection.cjs.map +1 -1
  393. package/dist/data/runtime/RuntimeBar.selection.d.ts.map +1 -1
  394. package/dist/data/runtime/RuntimeBar.selection.js +5 -2
  395. package/dist/data/runtime/RuntimeBar.selection.js.map +1 -1
  396. package/dist/data/runtime/RuntimeBarActions.cjs +1 -5
  397. package/dist/data/runtime/RuntimeBarActions.cjs.map +1 -1
  398. package/dist/data/runtime/RuntimeBarActions.d.ts +1 -1
  399. package/dist/data/runtime/RuntimeBarActions.d.ts.map +1 -1
  400. package/dist/data/runtime/RuntimeBarActions.js +1 -5
  401. package/dist/data/runtime/RuntimeBarActions.js.map +1 -1
  402. package/dist/data/runtime/RuntimeBarIdentity.cjs +6 -14
  403. package/dist/data/runtime/RuntimeBarIdentity.cjs.map +1 -1
  404. package/dist/data/runtime/RuntimeBarIdentity.d.ts +0 -1
  405. package/dist/data/runtime/RuntimeBarIdentity.d.ts.map +1 -1
  406. package/dist/data/runtime/RuntimeBarIdentity.js +6 -14
  407. package/dist/data/runtime/RuntimeBarIdentity.js.map +1 -1
  408. package/dist/data/runtime/RuntimeBarLayout.cjs +8 -27
  409. package/dist/data/runtime/RuntimeBarLayout.cjs.map +1 -1
  410. package/dist/data/runtime/RuntimeBarLayout.d.ts.map +1 -1
  411. package/dist/data/runtime/RuntimeBarLayout.js +8 -27
  412. package/dist/data/runtime/RuntimeBarLayout.js.map +1 -1
  413. package/dist/data/runtime/RuntimeBarSegment.cjs +1 -5
  414. package/dist/data/runtime/RuntimeBarSegment.cjs.map +1 -1
  415. package/dist/data/runtime/RuntimeBarSegment.d.ts.map +1 -1
  416. package/dist/data/runtime/RuntimeBarSegment.js +1 -5
  417. package/dist/data/runtime/RuntimeBarSegment.js.map +1 -1
  418. package/dist/data/runtime/use-runtime-bar-overflow.cjs +4 -10
  419. package/dist/data/runtime/use-runtime-bar-overflow.cjs.map +1 -1
  420. package/dist/data/runtime/use-runtime-bar-overflow.d.ts +1 -2
  421. package/dist/data/runtime/use-runtime-bar-overflow.d.ts.map +1 -1
  422. package/dist/data/runtime/use-runtime-bar-overflow.js +4 -10
  423. package/dist/data/runtime/use-runtime-bar-overflow.js.map +1 -1
  424. package/dist/data/test-runner/TestRunner.fixtures.d.ts +0 -20
  425. package/dist/data/test-runner/TestRunner.fixtures.d.ts.map +1 -1
  426. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts +22 -0
  427. package/dist/data/test-runner/TestRunner.large-fixtures.d.ts.map +1 -0
  428. package/dist/data/use-pan-zoom.cjs +23 -10
  429. package/dist/data/use-pan-zoom.cjs.map +1 -1
  430. package/dist/data/use-pan-zoom.d.ts +16 -2
  431. package/dist/data/use-pan-zoom.d.ts.map +1 -1
  432. package/dist/data/use-pan-zoom.js +23 -10
  433. package/dist/data/use-pan-zoom.js.map +1 -1
  434. package/dist/data/version-info.cjs +3 -3
  435. package/dist/data/version-info.js +3 -3
  436. package/dist/data.cjs +26 -2
  437. package/dist/data.cjs.map +1 -1
  438. package/dist/data.d.ts +1 -0
  439. package/dist/data.d.ts.map +1 -1
  440. package/dist/data.js +24 -0
  441. package/dist/data.js.map +1 -1
  442. package/dist/index.cjs +28 -4
  443. package/dist/index.cjs.map +1 -1
  444. package/dist/index.js +24 -0
  445. package/dist/index.js.map +1 -1
  446. package/dist/layout/Workspace.cjs +13 -4
  447. package/dist/layout/Workspace.cjs.map +1 -1
  448. package/dist/layout/Workspace.d.ts +7 -2
  449. package/dist/layout/Workspace.d.ts.map +1 -1
  450. package/dist/layout/Workspace.js +13 -4
  451. package/dist/layout/Workspace.js.map +1 -1
  452. package/dist/lib/permission-strategies.cjs +71 -11
  453. package/dist/lib/permission-strategies.cjs.map +1 -1
  454. package/dist/lib/permission-strategies.d.ts +3 -0
  455. package/dist/lib/permission-strategies.d.ts.map +1 -1
  456. package/dist/lib/permission-strategies.js +71 -11
  457. package/dist/lib/permission-strategies.js.map +1 -1
  458. package/dist/styles.css +1 -1
  459. package/package.json +5 -3
  460. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs +0 -57
  461. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.cjs.map +0 -1
  462. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts +0 -7
  463. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.d.ts.map +0 -1
  464. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js +0 -57
  465. package/dist/data/ai/ToolSchemaBrowser.selection-toolbar.js.map +0 -1
  466. package/dist/data/runtime/RuntimeBar.context.cjs +0 -8
  467. package/dist/data/runtime/RuntimeBar.context.cjs.map +0 -1
  468. package/dist/data/runtime/RuntimeBar.context.d.ts +0 -2
  469. package/dist/data/runtime/RuntimeBar.context.d.ts.map +0 -1
  470. package/dist/data/runtime/RuntimeBar.context.js +0 -8
  471. package/dist/data/runtime/RuntimeBar.context.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionViewer.tokens.js","sources":["../../../src/data/ai/SessionViewer.tokens.tsx"],"sourcesContent":["import { useContext } from \"react\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { UiDotsVertical } from \"../../icons\";\nimport type { SessionEvent } from \"./SessionViewer.model\";\nimport { SessionTokenContext } from \"./use-session-token-sizing\";\nimport { compactTokens, formatCost } from \"./session-cost\";\n\nexport function SessionRowTokens({ event }: { event: SessionEvent }) {\n const sizing = useContext(SessionTokenContext);\n if (!sizing || event.pending) return null;\n const row = sizing.state(event);\n const size = row?.size;\n const title = size ? `${size.source} · ${size.model}. Input ${size.usage.inputTokens ?? 0}, output ${size.usage.outputTokens ?? 0}, reasoning ${size.usage.reasoningTokens ?? 0}. ${size.coverage.framingIncluded ? \"Provider framing included. \" : \"\"}Excluded: ${size.coverage.excluded?.join(\"; \") || \"none\"}. Content footprint; not historical billed usage.` : undefined;\n return (\n <div className=\"flex min-w-0 flex-wrap items-center gap-1 text-xs text-muted-foreground\" data-row-tokens={event.id}>\n {size && <span aria-label=\"Calculated row footprint\" title={title}>Footprint {size.source === \"local-estimate\" || size.source === \"provider-estimate\" ? \"~\" : \"\"}{compactTokens(size.totalTokens)} tokens · {size.costUSD !== undefined ? `~${formatCost(size.costUSD)}` : \"price unavailable\"}{size.coverage.partial ? \" · partial\" : \"\"}</span>}\n {row?.pending && <span role=\"status\">Calculating tokens/cost…</span>}\n {row?.error && <span role=\"alert\" className=\"text-destructive\">{row.error}</span>}\n {!event.estimatedCost && (\n <DropdownMenu icon={UiDotsVertical} hideChevron variant=\"ghost\" size=\"icon\" title={`Row options ${event.id}`} menuLabel={`Row options ${event.id}`} items={[{\n label: \"Calculate tokens/cost\", disabled: Boolean(row?.pending),\n onSelect: () => sizing.calculate([event.id], \"provider\"),\n }]} />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;AAOO,SAAS,iBAAiB,EAAE,SAAkC;;AACnE,QAAM,SAAS,WAAW,mBAAmB;AAC7C,MAAI,CAAC,UAAU,MAAM,QAAS,QAAO;AACrC,QAAM,MAAM,OAAO,MAAM,KAAK;AAC9B,QAAM,OAAO,2BAAK;AAClB,QAAM,QAAQ,OAAO,GAAG,KAAK,MAAM,MAAM,KAAK,KAAK,WAAW,KAAK,MAAM,eAAe,CAAC,YAAY,KAAK,MAAM,gBAAgB,CAAC,eAAe,KAAK,MAAM,mBAAmB,CAAC,KAAK,KAAK,SAAS,kBAAkB,gCAAgC,EAAE,eAAa,UAAK,SAAS,aAAd,mBAAwB,KAAK,UAAS,MAAM,sDAAsD;AACrW,8BACG,OAAA,EAAI,WAAU,2EAA0E,mBAAiB,MAAM,IAC7G,UAAA;AAAA,IAAA,QAAQ,qBAAC,QAAA,EAAK,cAAW,4BAA2B,OAAc,UAAA;AAAA,MAAA;AAAA,MAAW,KAAK,WAAW,oBAAoB,KAAK,WAAW,sBAAsB,MAAM;AAAA,MAAI,cAAc,KAAK,WAAW;AAAA,MAAE;AAAA,MAAW,KAAK,YAAY,SAAY,IAAI,WAAW,KAAK,OAAO,CAAC,KAAK;AAAA,MAAqB,KAAK,SAAS,UAAU,eAAe;AAAA,IAAA,GAAG;AAAA,KACzU,2BAAK,YAAW,oBAAC,QAAA,EAAK,MAAK,UAAS,UAAA,4BAAwB;AAAA,KAC5D,2BAAK,UAAS,oBAAC,QAAA,EAAK,MAAK,SAAQ,WAAU,oBAAoB,UAAA,IAAI,MAAA,CAAM;AAAA,IACzE,CAAC,MAAM,iBACN,oBAAC,cAAA,EAAa,MAAM,gBAAgB,aAAW,MAAC,SAAQ,SAAQ,MAAK,QAAO,OAAO,eAAe,MAAM,EAAE,IAAI,WAAW,eAAe,MAAM,EAAE,IAAI,OAAO,CAAC;AAAA,MAC1J,OAAO;AAAA,MAAyB,UAAU,QAAQ,2BAAK,OAAO;AAAA,MAC9D,UAAU,MAAM,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,UAAU;AAAA,IAAA,CACxD,EAAA,CAAG;AAAA,EAAA,GAER;AAEJ;"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const sessionCost = require("./session-cost.cjs");
5
+ const UiCoins = require("../../icons/components/UiCoins.cjs");
6
+ const tokens = require("../../lib/tokens.cjs");
7
+ const UiDatabase = require("../../icons/components/UiDatabase.cjs");
8
+ const UiArrowUp = require("../../icons/components/UiArrowUp.cjs");
9
+ const UiArrowDown = require("../../icons/components/UiArrowDown.cjs");
10
+ const UiBrain = require("../../icons/components/UiBrain.cjs");
11
+ const TOKEN_BUCKETS = [
12
+ ["inputTokens", "In", "Input", UiArrowUp.UiArrowUp],
13
+ ["outputTokens", "Out", "Output", UiArrowDown.UiArrowDown],
14
+ ["reasoningTokens", "Reasoning", "Reasoning", UiBrain.UiBrain],
15
+ ["cacheReadTokens", "Cache read", "Cache read", UiDatabase.UiDatabaseDown],
16
+ ["cacheWriteTokens", "Cache write", "Cache write", UiDatabase.UiDatabaseUp]
17
+ ];
18
+ function EstimatedToolCost({
19
+ events,
20
+ detailed = false
21
+ }) {
22
+ var _a;
23
+ const estimates = events.flatMap(
24
+ (event) => event.estimatedCost ? [event.estimatedCost] : []
25
+ );
26
+ if (!estimates.length) {
27
+ return /* @__PURE__ */ jsxRuntime.jsx(
28
+ "span",
29
+ {
30
+ "aria-label": detailed ? "Estimated tool cost details" : "Estimate unavailable",
31
+ title: "Estimate unavailable",
32
+ className: "shrink-0 text-[11px] text-muted-foreground",
33
+ children: detailed ? "Estimate unavailable" : "—"
34
+ }
35
+ );
36
+ }
37
+ const costs = estimates.map((estimate) => estimate.cost);
38
+ const total = costs.reduce((sum, cost) => sum + sessionCost.costTotal(cost), 0);
39
+ const sharedCalls = (_a = estimates[0]) == null ? void 0 : _a.sharedCalls;
40
+ 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.`;
41
+ const description = `${allocation} Includes conversation context and generating the calls. Reading tool results is accounted for in subsequent model requests. Estimated cost in USD.`;
42
+ if (!detailed) {
43
+ const cacheReadTokens = costs.reduce((sum, cost) => sum + (cost.cacheReadTokens ?? 0), 0);
44
+ const cacheReadDescription = `Cache read delta: ${cacheReadTokens.toLocaleString("en-US")} tokens`;
45
+ return /* @__PURE__ */ jsxRuntime.jsxs(
46
+ "span",
47
+ {
48
+ role: "group",
49
+ "aria-label": "Estimated tool cost",
50
+ title: description,
51
+ className: "inline-flex shrink-0 items-center gap-0.5 whitespace-nowrap text-[11px] tabular-nums text-muted-foreground",
52
+ children: [
53
+ /* @__PURE__ */ jsxRuntime.jsx(UiCoins.UiCoins, { className: "size-3 shrink-0" }),
54
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: total > 0 ? `~${tokens.formatCost(total)}` : "—" }),
55
+ cacheReadTokens > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
56
+ "span",
57
+ {
58
+ role: "group",
59
+ "aria-label": cacheReadDescription,
60
+ title: cacheReadDescription,
61
+ className: "ml-1 inline-flex items-center gap-0.5",
62
+ children: [
63
+ /* @__PURE__ */ jsxRuntime.jsx(UiDatabase.UiDatabaseDown, { className: "size-3 shrink-0" }),
64
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
65
+ "+",
66
+ tokens.compactTokens(cacheReadTokens)
67
+ ] })
68
+ ]
69
+ }
70
+ )
71
+ ]
72
+ }
73
+ );
74
+ }
75
+ return /* @__PURE__ */ jsxRuntime.jsxs(
76
+ "div",
77
+ {
78
+ role: "group",
79
+ "aria-label": "Estimated tool cost details",
80
+ title: description,
81
+ 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",
82
+ children: [
83
+ /* @__PURE__ */ jsxRuntime.jsxs(
84
+ "span",
85
+ {
86
+ role: "group",
87
+ "aria-label": total > 0 ? `Estimated cost: ${tokens.formatCost(total)} USD` : "Cost unavailable",
88
+ className: "inline-flex items-center gap-1",
89
+ children: [
90
+ /* @__PURE__ */ jsxRuntime.jsx(UiCoins.UiCoins, { className: "size-3.5 shrink-0" }),
91
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Est." }),
92
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold text-foreground", children: total > 0 ? `~${tokens.formatCost(total)}` : "Cost unavailable" }),
93
+ total > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[9px] font-medium", children: "USD" })
94
+ ]
95
+ }
96
+ ),
97
+ TOKEN_BUCKETS.map(([key, label, name, BucketIcon]) => {
98
+ const tokens$1 = costs.reduce((sum, cost) => sum + (cost[key] ?? 0), 0);
99
+ const description2 = `${name}: ${tokens$1.toLocaleString("en-US")} tokens`;
100
+ return tokens$1 > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
101
+ "span",
102
+ {
103
+ role: "group",
104
+ "aria-label": description2,
105
+ title: description2,
106
+ className: "inline-flex items-center gap-1 whitespace-nowrap",
107
+ children: [
108
+ /* @__PURE__ */ jsxRuntime.jsx(BucketIcon, { className: "size-3.5 shrink-0" }),
109
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
110
+ label,
111
+ " ",
112
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-foreground", children: tokens.compactTokens(tokens$1) })
113
+ ] })
114
+ ]
115
+ },
116
+ key
117
+ ) : null;
118
+ }),
119
+ estimates.length < events.length && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
120
+ events.length - estimates.length,
121
+ " unavailable"
122
+ ] })
123
+ ]
124
+ }
125
+ );
126
+ }
127
+ exports.EstimatedToolCost = EstimatedToolCost;
128
+ //# sourceMappingURL=SessionViewer.tool-cost.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionViewer.tool-cost.cjs","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":["UiArrowUp","UiArrowDown","UiBrain","UiDatabaseDown","UiDatabaseUp","jsx","costTotal","jsxs","UiCoins","formatCost","compactTokens","tokens","description"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { SessionEvent } from './SessionViewer.model.js';
2
+ export declare function EstimatedToolCost({ events, detailed, }: {
3
+ events: SessionEvent[];
4
+ detailed?: boolean;
5
+ }): import("react").JSX.Element;
6
+ //# sourceMappingURL=SessionViewer.tool-cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionViewer.tool-cost.d.ts","sourceRoot":"","sources":["../../../src/data/ai/SessionViewer.tool-cost.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAoB1D,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAgB,GACjB,EAAE;IACD,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,+BAoGA"}
@@ -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":"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"}
@@ -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
  }