@assistant-ui/react-devtools 1.2.6 → 1.2.7

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 (533) hide show
  1. package/README.md +26 -8
  2. package/dist/DevToolsModal.d.ts +18 -2
  3. package/dist/DevToolsModal.d.ts.map +1 -1
  4. package/dist/DevToolsModal.js +25 -232
  5. package/dist/DevToolsModal.js.map +1 -1
  6. package/dist/DevToolsModalImpl.d.ts +11 -0
  7. package/dist/DevToolsModalImpl.d.ts.map +1 -0
  8. package/dist/DevToolsModalImpl.js +62 -0
  9. package/dist/DevToolsModalImpl.js.map +1 -0
  10. package/dist/data/createInProcessClient.d.ts +17 -0
  11. package/dist/data/createInProcessClient.d.ts.map +1 -0
  12. package/dist/data/createInProcessClient.js +54 -0
  13. package/dist/data/createInProcessClient.js.map +1 -0
  14. package/dist/data/projectApi.d.ts +22 -0
  15. package/dist/data/projectApi.d.ts.map +1 -0
  16. package/dist/data/projectApi.js +103 -0
  17. package/dist/data/projectApi.js.map +1 -0
  18. package/dist/data/types.d.ts +52 -0
  19. package/dist/data/types.d.ts.map +1 -0
  20. package/dist/data/types.js +10 -0
  21. package/dist/data/types.js.map +1 -0
  22. package/dist/data/useDevToolsClient.d.ts +19 -0
  23. package/dist/data/useDevToolsClient.d.ts.map +1 -0
  24. package/dist/data/useDevToolsClient.js +70 -0
  25. package/dist/data/useDevToolsClient.js.map +1 -0
  26. package/dist/index.d.ts +9 -10
  27. package/dist/index.js +7 -9
  28. package/dist/shell/DevToolsOverlay.d.ts +23 -0
  29. package/dist/shell/DevToolsOverlay.d.ts.map +1 -0
  30. package/dist/shell/DevToolsOverlay.js +106 -0
  31. package/dist/shell/DevToolsOverlay.js.map +1 -0
  32. package/dist/shell/DevToolsPanel.d.ts +23 -0
  33. package/dist/shell/DevToolsPanel.d.ts.map +1 -0
  34. package/dist/shell/DevToolsPanel.js +256 -0
  35. package/dist/shell/DevToolsPanel.js.map +1 -0
  36. package/dist/shell/ShadowRoot.d.ts +24 -0
  37. package/dist/shell/ShadowRoot.d.ts.map +1 -0
  38. package/dist/shell/ShadowRoot.js +107 -0
  39. package/dist/shell/ShadowRoot.js.map +1 -0
  40. package/dist/shell/SplitLayout.d.ts +28 -0
  41. package/dist/shell/SplitLayout.d.ts.map +1 -0
  42. package/dist/shell/SplitLayout.js +67 -0
  43. package/dist/shell/SplitLayout.js.map +1 -0
  44. package/dist/shell/registry.d.ts +41 -0
  45. package/dist/shell/registry.d.ts.map +1 -0
  46. package/dist/shell/registry.js +36 -0
  47. package/dist/shell/registry.js.map +1 -0
  48. package/dist/shell/tabs/ActivityTab.d.ts +13 -0
  49. package/dist/shell/tabs/ActivityTab.d.ts.map +1 -0
  50. package/dist/shell/tabs/ActivityTab.js +259 -0
  51. package/dist/shell/tabs/ActivityTab.js.map +1 -0
  52. package/dist/shell/tabs/ContextTab.d.ts +11 -0
  53. package/dist/shell/tabs/ContextTab.d.ts.map +1 -0
  54. package/dist/shell/tabs/ContextTab.js +210 -0
  55. package/dist/shell/tabs/ContextTab.js.map +1 -0
  56. package/dist/shell/tabs/RawTab.d.ts +11 -0
  57. package/dist/shell/tabs/RawTab.d.ts.map +1 -0
  58. package/dist/shell/tabs/RawTab.js +238 -0
  59. package/dist/shell/tabs/RawTab.js.map +1 -0
  60. package/dist/shell/tabs/ThreadTab.d.ts +12 -0
  61. package/dist/shell/tabs/ThreadTab.d.ts.map +1 -0
  62. package/dist/shell/tabs/ThreadTab.js +426 -0
  63. package/dist/shell/tabs/ThreadTab.js.map +1 -0
  64. package/dist/shell/tabs/navSelection.d.ts +10 -0
  65. package/dist/shell/tabs/navSelection.d.ts.map +1 -0
  66. package/dist/shell/tabs/navSelection.js +37 -0
  67. package/dist/shell/tabs/navSelection.js.map +1 -0
  68. package/dist/styles/panel.generated.d.ts +5 -0
  69. package/dist/styles/panel.generated.d.ts.map +1 -0
  70. package/dist/styles/panel.generated.js +6 -0
  71. package/dist/styles/panel.generated.js.map +1 -0
  72. package/dist/types.d.ts +1 -3
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/utils/common.d.ts +24 -0
  75. package/dist/utils/common.d.ts.map +1 -0
  76. package/dist/utils/common.js +64 -0
  77. package/dist/utils/common.js.map +1 -0
  78. package/dist/utils/diff.d.ts +16 -0
  79. package/dist/utils/diff.d.ts.map +1 -0
  80. package/dist/utils/diff.js +41 -0
  81. package/dist/utils/diff.js.map +1 -0
  82. package/dist/utils/serialization.d.ts.map +1 -1
  83. package/dist/utils/serialization.js +4 -1
  84. package/dist/utils/serialization.js.map +1 -1
  85. package/dist/views/activity/EventLogRow.d.ts +28 -0
  86. package/dist/views/activity/EventLogRow.d.ts.map +1 -0
  87. package/dist/views/activity/EventLogRow.js +185 -0
  88. package/dist/views/activity/EventLogRow.js.map +1 -0
  89. package/dist/views/activity/EventStreamPane.d.ts +11 -0
  90. package/dist/views/activity/EventStreamPane.d.ts.map +1 -0
  91. package/dist/views/activity/EventStreamPane.js +98 -0
  92. package/dist/views/activity/EventStreamPane.js.map +1 -0
  93. package/dist/views/activity/OrphansPane.d.ts +11 -0
  94. package/dist/views/activity/OrphansPane.d.ts.map +1 -0
  95. package/dist/views/activity/OrphansPane.js +39 -0
  96. package/dist/views/activity/OrphansPane.js.map +1 -0
  97. package/dist/views/activity/RunDetailPane.d.ts +11 -0
  98. package/dist/views/activity/RunDetailPane.d.ts.map +1 -0
  99. package/dist/views/activity/RunDetailPane.js +344 -0
  100. package/dist/views/activity/RunDetailPane.js.map +1 -0
  101. package/dist/views/activity/activityNodes.d.ts +39 -0
  102. package/dist/views/activity/activityNodes.d.ts.map +1 -0
  103. package/dist/views/activity/activityNodes.js +199 -0
  104. package/dist/views/activity/activityNodes.js.map +1 -0
  105. package/dist/views/activity/index.d.ts +6 -0
  106. package/dist/views/activity/index.js +6 -0
  107. package/dist/views/attachments/AttachmentList.d.ts +15 -0
  108. package/dist/views/attachments/AttachmentList.d.ts.map +1 -0
  109. package/dist/views/attachments/AttachmentList.js +279 -0
  110. package/dist/views/attachments/AttachmentList.js.map +1 -0
  111. package/dist/views/attachments/MediaPartView.d.ts +27 -0
  112. package/dist/views/attachments/MediaPartView.d.ts.map +1 -0
  113. package/dist/views/attachments/MediaPartView.js +180 -0
  114. package/dist/views/attachments/MediaPartView.js.map +1 -0
  115. package/dist/views/attachments/formatBytes.d.ts +8 -0
  116. package/dist/views/attachments/formatBytes.d.ts.map +1 -0
  117. package/dist/views/attachments/formatBytes.js +14 -0
  118. package/dist/views/attachments/formatBytes.js.map +1 -0
  119. package/dist/views/attachments/index.d.ts +5 -0
  120. package/dist/views/attachments/index.js +4 -0
  121. package/dist/views/attachments/parseAttachment.d.ts +8 -0
  122. package/dist/views/attachments/parseAttachment.d.ts.map +1 -0
  123. package/dist/views/attachments/parseAttachment.js +58 -0
  124. package/dist/views/attachments/parseAttachment.js.map +1 -0
  125. package/dist/views/attachments/types.d.ts +18 -0
  126. package/dist/views/attachments/types.d.ts.map +1 -0
  127. package/dist/views/attachments/types.js +0 -0
  128. package/dist/views/context/ContextDetail.d.ts +14 -0
  129. package/dist/views/context/ContextDetail.d.ts.map +1 -0
  130. package/dist/views/context/ContextDetail.js +87 -0
  131. package/dist/views/context/ContextDetail.js.map +1 -0
  132. package/dist/views/context/ToolUIsView.d.ts +9 -0
  133. package/dist/views/context/ToolUIsView.d.ts.map +1 -0
  134. package/dist/views/context/ToolUIsView.js +80 -0
  135. package/dist/views/context/ToolUIsView.js.map +1 -0
  136. package/dist/views/context/contextNodes.d.ts +32 -0
  137. package/dist/views/context/contextNodes.d.ts.map +1 -0
  138. package/dist/views/context/contextNodes.js +49 -0
  139. package/dist/views/context/contextNodes.js.map +1 -0
  140. package/dist/views/context/index.d.ts +4 -0
  141. package/dist/views/context/index.js +4 -0
  142. package/dist/views/mcp/McpView.d.ts +11 -0
  143. package/dist/views/mcp/McpView.d.ts.map +1 -0
  144. package/dist/views/mcp/McpView.js +239 -0
  145. package/dist/views/mcp/McpView.js.map +1 -0
  146. package/dist/views/mcp/index.d.ts +2 -0
  147. package/dist/views/mcp/index.js +2 -0
  148. package/dist/views/mcp/parse.d.ts +7 -0
  149. package/dist/views/mcp/parse.d.ts.map +1 -0
  150. package/dist/views/mcp/parse.js +43 -0
  151. package/dist/views/mcp/parse.js.map +1 -0
  152. package/dist/views/mcp/types.d.ts +22 -0
  153. package/dist/views/mcp/types.d.ts.map +1 -0
  154. package/dist/views/mcp/types.js +0 -0
  155. package/dist/views/message/ChainOfThought.d.ts +11 -0
  156. package/dist/views/message/ChainOfThought.d.ts.map +1 -0
  157. package/dist/views/message/ChainOfThought.js +132 -0
  158. package/dist/views/message/ChainOfThought.js.map +1 -0
  159. package/dist/views/message/MessageDetailPane.d.ts +12 -0
  160. package/dist/views/message/MessageDetailPane.d.ts.map +1 -0
  161. package/dist/views/message/MessageDetailPane.js +38 -0
  162. package/dist/views/message/MessageDetailPane.js.map +1 -0
  163. package/dist/views/message/MessageItem.d.ts +13 -0
  164. package/dist/views/message/MessageItem.d.ts.map +1 -0
  165. package/dist/views/message/MessageItem.js +136 -0
  166. package/dist/views/message/MessageItem.js.map +1 -0
  167. package/dist/views/message/MessageList.d.ts +13 -0
  168. package/dist/views/message/MessageList.d.ts.map +1 -0
  169. package/dist/views/message/MessageList.js +95 -0
  170. package/dist/views/message/MessageList.js.map +1 -0
  171. package/dist/views/message/MessageMetrics.d.ts +11 -0
  172. package/dist/views/message/MessageMetrics.d.ts.map +1 -0
  173. package/dist/views/message/MessageMetrics.js +93 -0
  174. package/dist/views/message/MessageMetrics.js.map +1 -0
  175. package/dist/views/message/MessageTimeline.d.ts +16 -0
  176. package/dist/views/message/MessageTimeline.d.ts.map +1 -0
  177. package/dist/views/message/MessageTimeline.js +100 -0
  178. package/dist/views/message/MessageTimeline.js.map +1 -0
  179. package/dist/views/message/PartDisclosure.d.ts +18 -0
  180. package/dist/views/message/PartDisclosure.d.ts.map +1 -0
  181. package/dist/views/message/PartDisclosure.js +79 -0
  182. package/dist/views/message/PartDisclosure.js.map +1 -0
  183. package/dist/views/message/PartView.d.ts +13 -0
  184. package/dist/views/message/PartView.d.ts.map +1 -0
  185. package/dist/views/message/PartView.js +416 -0
  186. package/dist/views/message/PartView.js.map +1 -0
  187. package/dist/views/message/RoleLabel.d.ts +11 -0
  188. package/dist/views/message/RoleLabel.d.ts.map +1 -0
  189. package/dist/views/message/RoleLabel.js +30 -0
  190. package/dist/views/message/RoleLabel.js.map +1 -0
  191. package/dist/views/message/StatusBadge.d.ts +17 -0
  192. package/dist/views/message/StatusBadge.d.ts.map +1 -0
  193. package/dist/views/message/StatusBadge.js +58 -0
  194. package/dist/views/message/StatusBadge.js.map +1 -0
  195. package/dist/views/message/ToolCallView.d.ts +13 -0
  196. package/dist/views/message/ToolCallView.d.ts.map +1 -0
  197. package/dist/views/message/ToolCallView.js +289 -0
  198. package/dist/views/message/ToolCallView.js.map +1 -0
  199. package/dist/views/message/TtftBar.d.ts +16 -0
  200. package/dist/views/message/TtftBar.d.ts.map +1 -0
  201. package/dist/views/message/TtftBar.js +128 -0
  202. package/dist/views/message/TtftBar.js.map +1 -0
  203. package/dist/views/message/index.d.ts +6 -0
  204. package/dist/views/message/index.js +5 -0
  205. package/dist/views/message/messagePlainText.d.ts +8 -0
  206. package/dist/views/message/messagePlainText.d.ts.map +1 -0
  207. package/dist/views/message/messagePlainText.js +39 -0
  208. package/dist/views/message/messagePlainText.js.map +1 -0
  209. package/dist/views/message/parse.d.ts +10 -0
  210. package/dist/views/message/parse.d.ts.map +1 -0
  211. package/dist/views/message/parse.js +235 -0
  212. package/dist/views/message/parse.js.map +1 -0
  213. package/dist/views/message/types.d.ts +114 -0
  214. package/dist/views/message/types.d.ts.map +1 -0
  215. package/dist/views/message/types.js +0 -0
  216. package/dist/views/model-context/ModelContextView.d.ts +26 -0
  217. package/dist/views/model-context/ModelContextView.d.ts.map +1 -0
  218. package/dist/views/model-context/ModelContextView.js +214 -0
  219. package/dist/views/model-context/ModelContextView.js.map +1 -0
  220. package/dist/views/nav.d.ts +19 -0
  221. package/dist/views/nav.d.ts.map +1 -0
  222. package/dist/views/nav.js +8 -0
  223. package/dist/views/nav.js.map +1 -0
  224. package/dist/views/raw/RawDetail.d.ts +15 -0
  225. package/dist/views/raw/RawDetail.d.ts.map +1 -0
  226. package/dist/views/raw/RawDetail.js +79 -0
  227. package/dist/views/raw/RawDetail.js.map +1 -0
  228. package/dist/views/raw/index.d.ts +3 -0
  229. package/dist/views/raw/index.js +3 -0
  230. package/dist/views/raw/rawNodes.d.ts +20 -0
  231. package/dist/views/raw/rawNodes.d.ts.map +1 -0
  232. package/dist/views/raw/rawNodes.js +78 -0
  233. package/dist/views/raw/rawNodes.js.map +1 -0
  234. package/dist/views/raw/statePreview.d.ts +5 -0
  235. package/dist/views/raw/statePreview.d.ts.map +1 -0
  236. package/dist/views/raw/statePreview.js +213 -0
  237. package/dist/views/raw/statePreview.js.map +1 -0
  238. package/dist/views/runs/PayloadDiff.d.ts +11 -0
  239. package/dist/views/runs/PayloadDiff.d.ts.map +1 -0
  240. package/dist/views/runs/PayloadDiff.js +92 -0
  241. package/dist/views/runs/PayloadDiff.js.map +1 -0
  242. package/dist/views/runs/parse.d.ts +8 -0
  243. package/dist/views/runs/parse.d.ts.map +1 -0
  244. package/dist/views/runs/parse.js +78 -0
  245. package/dist/views/runs/parse.js.map +1 -0
  246. package/dist/views/runs/types.d.ts +25 -0
  247. package/dist/views/runs/types.d.ts.map +1 -0
  248. package/dist/views/runs/types.js +0 -0
  249. package/dist/views/scopes/ScopesView.d.ts +9 -0
  250. package/dist/views/scopes/ScopesView.d.ts.map +1 -0
  251. package/dist/views/scopes/ScopesView.js +235 -0
  252. package/dist/views/scopes/ScopesView.js.map +1 -0
  253. package/dist/views/scopes/index.d.ts +2 -0
  254. package/dist/views/scopes/index.js +2 -0
  255. package/dist/views/scopes/parse.d.ts +7 -0
  256. package/dist/views/scopes/parse.d.ts.map +1 -0
  257. package/dist/views/scopes/parse.js +23 -0
  258. package/dist/views/scopes/parse.js.map +1 -0
  259. package/dist/views/scopes/types.d.ts +10 -0
  260. package/dist/views/scopes/types.d.ts.map +1 -0
  261. package/dist/views/scopes/types.js +0 -0
  262. package/dist/views/thread/ComposerAttachments.d.ts +11 -0
  263. package/dist/views/thread/ComposerAttachments.d.ts.map +1 -0
  264. package/dist/views/thread/ComposerAttachments.js +22 -0
  265. package/dist/views/thread/ComposerAttachments.js.map +1 -0
  266. package/dist/views/thread/ComposerFlags.d.ts +11 -0
  267. package/dist/views/thread/ComposerFlags.d.ts.map +1 -0
  268. package/dist/views/thread/ComposerFlags.js +54 -0
  269. package/dist/views/thread/ComposerFlags.js.map +1 -0
  270. package/dist/views/thread/ComposerQueue.d.ts +11 -0
  271. package/dist/views/thread/ComposerQueue.d.ts.map +1 -0
  272. package/dist/views/thread/ComposerQueue.js +55 -0
  273. package/dist/views/thread/ComposerQueue.js.map +1 -0
  274. package/dist/views/thread/ConversationList.d.ts +18 -0
  275. package/dist/views/thread/ConversationList.d.ts.map +1 -0
  276. package/dist/views/thread/ConversationList.js +228 -0
  277. package/dist/views/thread/ConversationList.js.map +1 -0
  278. package/dist/views/thread/ConversationStatusDot.d.ts +29 -0
  279. package/dist/views/thread/ConversationStatusDot.d.ts.map +1 -0
  280. package/dist/views/thread/ConversationStatusDot.js +91 -0
  281. package/dist/views/thread/ConversationStatusDot.js.map +1 -0
  282. package/dist/views/thread/ThreadDetails.d.ts +13 -0
  283. package/dist/views/thread/ThreadDetails.d.ts.map +1 -0
  284. package/dist/views/thread/ThreadDetails.js +170 -0
  285. package/dist/views/thread/ThreadDetails.js.map +1 -0
  286. package/dist/views/thread/Transcript.d.ts +21 -0
  287. package/dist/views/thread/Transcript.d.ts.map +1 -0
  288. package/dist/views/thread/Transcript.js +520 -0
  289. package/dist/views/thread/Transcript.js.map +1 -0
  290. package/dist/views/thread/index.d.ts +10 -0
  291. package/dist/views/thread/index.js +9 -0
  292. package/dist/views/thread/resolve.d.ts +13 -0
  293. package/dist/views/thread/resolve.d.ts.map +1 -0
  294. package/dist/views/thread/resolve.js +29 -0
  295. package/dist/views/thread/resolve.js.map +1 -0
  296. package/dist/views/thread/types.d.ts +50 -0
  297. package/dist/views/thread/types.d.ts.map +1 -0
  298. package/dist/views/thread/types.js +0 -0
  299. package/dist/views/thread/utils.d.ts +10 -0
  300. package/dist/views/thread/utils.d.ts.map +1 -0
  301. package/dist/views/thread/utils.js +77 -0
  302. package/dist/views/thread/utils.js.map +1 -0
  303. package/dist/views/ui/CenteredMessage.d.ts +11 -0
  304. package/dist/views/ui/CenteredMessage.d.ts.map +1 -0
  305. package/dist/views/ui/CenteredMessage.js +21 -0
  306. package/dist/views/ui/CenteredMessage.js.map +1 -0
  307. package/dist/views/ui/Chip.d.ts +13 -0
  308. package/dist/views/ui/Chip.d.ts.map +1 -0
  309. package/dist/views/ui/Chip.js +30 -0
  310. package/dist/views/ui/Chip.js.map +1 -0
  311. package/dist/views/ui/ControlButton.d.ts +10 -0
  312. package/dist/views/ui/ControlButton.d.ts.map +1 -0
  313. package/dist/views/ui/ControlButton.js +39 -0
  314. package/dist/views/ui/ControlButton.js.map +1 -0
  315. package/dist/views/ui/CopyButton.d.ts +19 -0
  316. package/dist/views/ui/CopyButton.d.ts.map +1 -0
  317. package/dist/views/ui/CopyButton.js +125 -0
  318. package/dist/views/ui/CopyButton.js.map +1 -0
  319. package/dist/views/ui/EmptyState.d.ts +11 -0
  320. package/dist/views/ui/EmptyState.d.ts.map +1 -0
  321. package/dist/views/ui/EmptyState.js +21 -0
  322. package/dist/views/ui/EmptyState.js.map +1 -0
  323. package/dist/views/ui/InfoCard.d.ts +22 -0
  324. package/dist/views/ui/InfoCard.d.ts.map +1 -0
  325. package/dist/views/ui/InfoCard.js +44 -0
  326. package/dist/views/ui/InfoCard.js.map +1 -0
  327. package/dist/views/ui/JSONTree.d.ts +16 -0
  328. package/dist/views/ui/JSONTree.d.ts.map +1 -0
  329. package/dist/views/ui/JSONTree.js +394 -0
  330. package/dist/views/ui/JSONTree.js.map +1 -0
  331. package/dist/views/ui/PaneHeader.d.ts +27 -0
  332. package/dist/views/ui/PaneHeader.d.ts.map +1 -0
  333. package/dist/views/ui/PaneHeader.js +71 -0
  334. package/dist/views/ui/PaneHeader.js.map +1 -0
  335. package/dist/views/ui/RailTime.d.ts +12 -0
  336. package/dist/views/ui/RailTime.d.ts.map +1 -0
  337. package/dist/views/ui/RailTime.js +49 -0
  338. package/dist/views/ui/RailTime.js.map +1 -0
  339. package/dist/views/ui/SectionLabel.d.ts +11 -0
  340. package/dist/views/ui/SectionLabel.d.ts.map +1 -0
  341. package/dist/views/ui/SectionLabel.js +21 -0
  342. package/dist/views/ui/SectionLabel.js.map +1 -0
  343. package/dist/views/ui/SelectableRow.d.ts +18 -0
  344. package/dist/views/ui/SelectableRow.d.ts.map +1 -0
  345. package/dist/views/ui/SelectableRow.js +49 -0
  346. package/dist/views/ui/SelectableRow.js.map +1 -0
  347. package/dist/views/ui/Sparkline.d.ts +17 -0
  348. package/dist/views/ui/Sparkline.d.ts.map +1 -0
  349. package/dist/views/ui/Sparkline.js +96 -0
  350. package/dist/views/ui/Sparkline.js.map +1 -0
  351. package/dist/views/ui/SummaryItem.d.ts +23 -0
  352. package/dist/views/ui/SummaryItem.d.ts.map +1 -0
  353. package/dist/views/ui/SummaryItem.js +59 -0
  354. package/dist/views/ui/SummaryItem.js.map +1 -0
  355. package/dist/views/ui/ToneBadge.d.ts +18 -0
  356. package/dist/views/ui/ToneBadge.d.ts.map +1 -0
  357. package/dist/views/ui/ToneBadge.js +34 -0
  358. package/dist/views/ui/ToneBadge.js.map +1 -0
  359. package/dist/views/ui/badgeTone.d.ts +21 -0
  360. package/dist/views/ui/badgeTone.d.ts.map +1 -0
  361. package/dist/views/ui/badgeTone.js +33 -0
  362. package/dist/views/ui/badgeTone.js.map +1 -0
  363. package/dist/views/ui/index.d.ts +16 -0
  364. package/dist/views/ui/index.js +16 -0
  365. package/dist/views/ui/useCopyToClipboard.d.ts +12 -0
  366. package/dist/views/ui/useCopyToClipboard.d.ts.map +1 -0
  367. package/dist/views/ui/useCopyToClipboard.js +44 -0
  368. package/dist/views/ui/useCopyToClipboard.js.map +1 -0
  369. package/package.json +9 -5
  370. package/src/DevToolsModal.tsx +26 -179
  371. package/src/DevToolsModalImpl.tsx +60 -0
  372. package/src/data/createInProcessClient.ts +66 -0
  373. package/src/data/projectApi.test.ts +100 -0
  374. package/src/data/projectApi.ts +169 -0
  375. package/src/data/types.ts +54 -0
  376. package/src/data/useDevToolsClient.ts +59 -0
  377. package/src/index.ts +16 -13
  378. package/src/shell/DevToolsOverlay.tsx +84 -0
  379. package/src/shell/DevToolsPanel.tsx +192 -0
  380. package/src/shell/ShadowRoot.tsx +85 -0
  381. package/src/shell/SplitLayout.tsx +46 -0
  382. package/src/shell/registry.ts +51 -0
  383. package/src/shell/tabs/ActivityTab.test.tsx +34 -0
  384. package/src/shell/tabs/ActivityTab.tsx +161 -0
  385. package/src/shell/tabs/ContextTab.test.tsx +37 -0
  386. package/src/shell/tabs/ContextTab.tsx +157 -0
  387. package/src/shell/tabs/RawTab.test.tsx +43 -0
  388. package/src/shell/tabs/RawTab.tsx +123 -0
  389. package/src/shell/tabs/ThreadTab.tsx +220 -0
  390. package/src/shell/tabs/navSelection.ts +17 -0
  391. package/src/styles/panel.css +153 -0
  392. package/src/styles/panel.generated.ts +2 -0
  393. package/src/types.ts +0 -5
  394. package/src/utils/common.test.ts +30 -0
  395. package/src/utils/common.ts +101 -0
  396. package/src/utils/diff.test.ts +37 -0
  397. package/src/utils/diff.ts +41 -0
  398. package/src/utils/serialization.test.ts +31 -0
  399. package/src/utils/serialization.ts +4 -1
  400. package/src/views/activity/EventLogRow.tsx +108 -0
  401. package/src/views/activity/EventStreamPane.tsx +86 -0
  402. package/src/views/activity/OrphansPane.tsx +23 -0
  403. package/src/views/activity/RunDetailPane.tsx +128 -0
  404. package/src/views/activity/activityNodes.test.ts +24 -0
  405. package/src/views/activity/activityNodes.ts +179 -0
  406. package/src/views/activity/index.ts +10 -0
  407. package/src/views/attachments/AttachmentList.tsx +122 -0
  408. package/src/views/attachments/MediaPartView.tsx +77 -0
  409. package/src/views/attachments/formatBytes.ts +15 -0
  410. package/src/views/attachments/index.ts +4 -0
  411. package/src/views/attachments/parseAttachment.test.ts +37 -0
  412. package/src/views/attachments/parseAttachment.ts +85 -0
  413. package/src/views/attachments/types.ts +15 -0
  414. package/src/views/context/ContextDetail.tsx +37 -0
  415. package/src/views/context/ToolUIsView.tsx +44 -0
  416. package/src/views/context/contextNodes.test.ts +31 -0
  417. package/src/views/context/contextNodes.ts +66 -0
  418. package/src/views/context/index.ts +4 -0
  419. package/src/views/mcp/McpView.tsx +125 -0
  420. package/src/views/mcp/index.ts +1 -0
  421. package/src/views/mcp/parse.test.ts +63 -0
  422. package/src/views/mcp/parse.ts +65 -0
  423. package/src/views/mcp/render.test.tsx +34 -0
  424. package/src/views/mcp/types.ts +20 -0
  425. package/src/views/message/ChainOfThought.tsx +74 -0
  426. package/src/views/message/MessageDetailPane.tsx +26 -0
  427. package/src/views/message/MessageItem.tsx +94 -0
  428. package/src/views/message/MessageList.tsx +48 -0
  429. package/src/views/message/MessageMetrics.tsx +68 -0
  430. package/src/views/message/MessageTimeline.test.tsx +78 -0
  431. package/src/views/message/MessageTimeline.tsx +51 -0
  432. package/src/views/message/PartDisclosure.tsx +32 -0
  433. package/src/views/message/PartView.tsx +197 -0
  434. package/src/views/message/RoleLabel.tsx +22 -0
  435. package/src/views/message/StatusBadge.tsx +28 -0
  436. package/src/views/message/ToolCallView.tsx +151 -0
  437. package/src/views/message/TtftBar.tsx +44 -0
  438. package/src/views/message/index.ts +5 -0
  439. package/src/views/message/messagePlainText.test.ts +48 -0
  440. package/src/views/message/messagePlainText.ts +65 -0
  441. package/src/views/message/parse.test.ts +269 -0
  442. package/src/views/message/parse.ts +282 -0
  443. package/src/views/message/render.test.tsx +128 -0
  444. package/src/views/message/types.ts +137 -0
  445. package/src/views/model-context/ModelContextView.tsx +71 -0
  446. package/src/views/model-context/render.test.tsx +24 -0
  447. package/src/views/nav.ts +18 -0
  448. package/src/views/raw/RawDetail.tsx +39 -0
  449. package/src/views/raw/index.ts +3 -0
  450. package/src/views/raw/rawNodes.test.ts +38 -0
  451. package/src/views/raw/rawNodes.ts +107 -0
  452. package/src/views/raw/statePreview.tsx +188 -0
  453. package/src/views/runs/PayloadDiff.tsx +49 -0
  454. package/src/views/runs/parse.test.ts +152 -0
  455. package/src/views/runs/parse.ts +110 -0
  456. package/src/views/runs/types.ts +23 -0
  457. package/src/views/scopes/ScopesView.tsx +105 -0
  458. package/src/views/scopes/index.ts +1 -0
  459. package/src/views/scopes/parse.test.ts +35 -0
  460. package/src/views/scopes/parse.ts +30 -0
  461. package/src/views/scopes/render.test.tsx +35 -0
  462. package/src/views/scopes/types.ts +6 -0
  463. package/src/views/thread/ComposerAttachments.test.tsx +36 -0
  464. package/src/views/thread/ComposerAttachments.tsx +8 -0
  465. package/src/views/thread/ComposerFlags.test.tsx +23 -0
  466. package/src/views/thread/ComposerFlags.tsx +19 -0
  467. package/src/views/thread/ComposerQueue.test.tsx +20 -0
  468. package/src/views/thread/ComposerQueue.tsx +26 -0
  469. package/src/views/thread/ConversationList.tsx +127 -0
  470. package/src/views/thread/ConversationStatusDot.test.ts +86 -0
  471. package/src/views/thread/ConversationStatusDot.tsx +126 -0
  472. package/src/views/thread/ThreadDetails.tsx +85 -0
  473. package/src/views/thread/Transcript.test.tsx +56 -0
  474. package/src/views/thread/Transcript.tsx +332 -0
  475. package/src/views/thread/index.ts +19 -0
  476. package/src/views/thread/render.test.tsx +41 -0
  477. package/src/views/thread/resolve.ts +36 -0
  478. package/src/views/thread/types.ts +53 -0
  479. package/src/views/thread/utils.test.ts +72 -0
  480. package/src/views/thread/utils.ts +149 -0
  481. package/src/views/ui/CenteredMessage.tsx +7 -0
  482. package/src/views/ui/Chip.tsx +17 -0
  483. package/src/views/ui/ControlButton.tsx +15 -0
  484. package/src/views/ui/CopyButton.tsx +73 -0
  485. package/src/views/ui/EmptyState.tsx +7 -0
  486. package/src/views/ui/InfoCard.tsx +35 -0
  487. package/src/views/ui/JSONTree.test.tsx +29 -0
  488. package/src/views/ui/JSONTree.tsx +240 -0
  489. package/src/views/ui/PaneHeader.tsx +46 -0
  490. package/src/views/ui/RailTime.tsx +27 -0
  491. package/src/views/ui/SectionLabel.tsx +7 -0
  492. package/src/views/ui/SelectableRow.tsx +41 -0
  493. package/src/views/ui/Sparkline.tsx +49 -0
  494. package/src/views/ui/SummaryItem.tsx +25 -0
  495. package/src/views/ui/ToneBadge.tsx +26 -0
  496. package/src/views/ui/badgeTone.ts +40 -0
  497. package/src/views/ui/index.ts +20 -0
  498. package/src/views/ui/useCopyToClipboard.ts +27 -0
  499. package/dist/DevToolsFrame.d.ts +0 -11
  500. package/dist/DevToolsFrame.d.ts.map +0 -1
  501. package/dist/DevToolsFrame.js +0 -66
  502. package/dist/DevToolsFrame.js.map +0 -1
  503. package/dist/DevToolsHost.d.ts +0 -38
  504. package/dist/DevToolsHost.d.ts.map +0 -1
  505. package/dist/DevToolsHost.js +0 -93
  506. package/dist/DevToolsHost.js.map +0 -1
  507. package/dist/ExtensionHost.d.ts +0 -10
  508. package/dist/ExtensionHost.d.ts.map +0 -1
  509. package/dist/ExtensionHost.js +0 -42
  510. package/dist/ExtensionHost.js.map +0 -1
  511. package/dist/FrameClient.d.ts +0 -38
  512. package/dist/FrameClient.d.ts.map +0 -1
  513. package/dist/FrameClient.js +0 -53
  514. package/dist/FrameClient.js.map +0 -1
  515. package/dist/FrameHost.d.ts +0 -11
  516. package/dist/FrameHost.d.ts.map +0 -1
  517. package/dist/FrameHost.js +0 -26
  518. package/dist/FrameHost.js.map +0 -1
  519. package/dist/constants.d.ts +0 -6
  520. package/dist/constants.d.ts.map +0 -1
  521. package/dist/constants.js +0 -7
  522. package/dist/constants.js.map +0 -1
  523. package/dist/styles/DevToolsModal.styles.d.ts +0 -18
  524. package/dist/styles/DevToolsModal.styles.d.ts.map +0 -1
  525. package/dist/styles/DevToolsModal.styles.js +0 -120
  526. package/dist/styles/DevToolsModal.styles.js.map +0 -1
  527. package/src/DevToolsFrame.tsx +0 -55
  528. package/src/DevToolsHost.ts +0 -178
  529. package/src/ExtensionHost.ts +0 -57
  530. package/src/FrameClient.ts +0 -99
  531. package/src/FrameHost.ts +0 -31
  532. package/src/constants.ts +0 -2
  533. package/src/styles/DevToolsModal.styles.ts +0 -137
@@ -0,0 +1,289 @@
1
+ import { JSONTree } from "../ui/JSONTree.js";
2
+ import { ToneBadge } from "../ui/ToneBadge.js";
3
+ import { PartDisclosure } from "./PartDisclosure.js";
4
+ import { StatusBadge } from "./StatusBadge.js";
5
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import clsx from "clsx";
8
+ //#region src/views/message/ToolCallView.tsx
9
+ const isAwaiting = (part) => part.status?.type === "requires-action" || part.interrupt !== void 0 || part.approval !== void 0 && part.approval.approved === void 0;
10
+ const sameAsArgsJson = (part) => {
11
+ if (part.argsText === void 0) return false;
12
+ try {
13
+ return part.argsText.trim() === JSON.stringify(part.args);
14
+ } catch {
15
+ return false;
16
+ }
17
+ };
18
+ const ToolCallView = (t0) => {
19
+ const $ = c(54);
20
+ const { part, nested: t1 } = t0;
21
+ const nested = t1 === void 0 ? false : t1;
22
+ let t2;
23
+ if ($[0] !== part) {
24
+ t2 = isAwaiting(part);
25
+ $[0] = part;
26
+ $[1] = t2;
27
+ } else t2 = $[1];
28
+ const awaiting = t2;
29
+ const t3 = !nested && "border-border overflow-hidden rounded-md border";
30
+ let t4;
31
+ if ($[2] !== t3) {
32
+ t4 = clsx("group", t3);
33
+ $[2] = t3;
34
+ $[3] = t4;
35
+ } else t4 = $[3];
36
+ let t5;
37
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
38
+ t5 = /* @__PURE__ */ jsx("span", {
39
+ className: "text-muted-foreground inline-block shrink-0 transition-transform group-open:rotate-90",
40
+ children: "›"
41
+ });
42
+ $[4] = t5;
43
+ } else t5 = $[4];
44
+ let t6;
45
+ if ($[5] !== part.toolName) {
46
+ t6 = /* @__PURE__ */ jsx("span", {
47
+ className: "text-foreground min-w-0 flex-1 truncate font-medium",
48
+ children: part.toolName
49
+ });
50
+ $[5] = part.toolName;
51
+ $[6] = t6;
52
+ } else t6 = $[6];
53
+ let t7;
54
+ if ($[7] !== part.status) {
55
+ t7 = part.status ? /* @__PURE__ */ jsx(StatusBadge, {
56
+ type: part.status.type,
57
+ reason: part.status.reason,
58
+ compact: true,
59
+ size: "sm"
60
+ }) : null;
61
+ $[7] = part.status;
62
+ $[8] = t7;
63
+ } else t7 = $[8];
64
+ let t8;
65
+ if ($[9] !== part.isError) {
66
+ t8 = part.isError ? /* @__PURE__ */ jsx(StatusBadge, {
67
+ type: "incomplete",
68
+ reason: "error",
69
+ compact: true,
70
+ size: "sm"
71
+ }) : null;
72
+ $[9] = part.isError;
73
+ $[10] = t8;
74
+ } else t8 = $[10];
75
+ let t9;
76
+ if ($[11] !== part.mcp) {
77
+ t9 = part.mcp !== void 0 ? /* @__PURE__ */ jsx(ToneBadge, {
78
+ tone: "violet",
79
+ size: "sm",
80
+ children: "mcp"
81
+ }) : null;
82
+ $[11] = part.mcp;
83
+ $[12] = t9;
84
+ } else t9 = $[12];
85
+ let t10;
86
+ if ($[13] !== t6 || $[14] !== t7 || $[15] !== t8 || $[16] !== t9) {
87
+ t10 = /* @__PURE__ */ jsxs("summary", {
88
+ className: "hover:bg-accent/40 flex cursor-pointer list-none items-center gap-1.5 px-2 py-1.5 text-[11px] select-none",
89
+ children: [
90
+ t5,
91
+ t6,
92
+ t7,
93
+ t8,
94
+ t9
95
+ ]
96
+ });
97
+ $[13] = t6;
98
+ $[14] = t7;
99
+ $[15] = t8;
100
+ $[16] = t9;
101
+ $[17] = t10;
102
+ } else t10 = $[17];
103
+ let t11;
104
+ if ($[18] !== awaiting || $[19] !== part.approval || $[20] !== part.interrupt) {
105
+ t11 = awaiting ? /* @__PURE__ */ jsxs("div", {
106
+ className: "bg-muted/50 rounded border px-2 py-1.5 text-[10px]",
107
+ children: [
108
+ /* @__PURE__ */ jsx(ToneBadge, {
109
+ tone: "amber",
110
+ size: "sm",
111
+ children: part.approval ? "Awaiting approval" : "Awaiting human input"
112
+ }),
113
+ part.approval ? /* @__PURE__ */ jsxs("div", {
114
+ className: "text-muted-foreground mt-1 flex flex-wrap gap-x-2 gap-y-0.5",
115
+ children: [
116
+ part.approval.id ? /* @__PURE__ */ jsxs("span", { children: ["id: ", part.approval.id] }) : null,
117
+ /* @__PURE__ */ jsxs("span", { children: [
118
+ "approved:",
119
+ " ",
120
+ part.approval.approved === void 0 ? "pending" : String(part.approval.approved)
121
+ ] }),
122
+ part.approval.isAutomatic !== void 0 ? /* @__PURE__ */ jsxs("span", { children: ["auto: ", String(part.approval.isAutomatic)] }) : null,
123
+ part.approval.reason ? /* @__PURE__ */ jsx("span", { children: part.approval.reason }) : null
124
+ ]
125
+ }) : null,
126
+ part.interrupt?.payload !== void 0 ? /* @__PURE__ */ jsx("div", {
127
+ className: "mt-1",
128
+ children: /* @__PURE__ */ jsx(JSONTree, {
129
+ value: part.interrupt.payload,
130
+ openDepth: 0,
131
+ compact: true
132
+ })
133
+ }) : null
134
+ ]
135
+ }) : null;
136
+ $[18] = awaiting;
137
+ $[19] = part.approval;
138
+ $[20] = part.interrupt;
139
+ $[21] = t11;
140
+ } else t11 = $[21];
141
+ let t12;
142
+ if ($[22] !== part.toolCallId) {
143
+ t12 = part.toolCallId ? /* @__PURE__ */ jsx(PartDisclosure, {
144
+ label: "Call id",
145
+ children: /* @__PURE__ */ jsx("span", {
146
+ className: "text-muted-foreground font-mono text-[10px] break-all",
147
+ children: part.toolCallId
148
+ })
149
+ }) : null;
150
+ $[22] = part.toolCallId;
151
+ $[23] = t12;
152
+ } else t12 = $[23];
153
+ let t13;
154
+ if ($[24] !== part.args) {
155
+ t13 = /* @__PURE__ */ jsx(PartDisclosure, {
156
+ label: "Arguments",
157
+ children: /* @__PURE__ */ jsx(JSONTree, {
158
+ value: part.args,
159
+ openDepth: 0,
160
+ compact: true
161
+ })
162
+ });
163
+ $[24] = part.args;
164
+ $[25] = t13;
165
+ } else t13 = $[25];
166
+ let t14;
167
+ if ($[26] !== part) {
168
+ t14 = part.argsText !== void 0 && !sameAsArgsJson(part) ? /* @__PURE__ */ jsx(PartDisclosure, {
169
+ label: "Raw args",
170
+ children: /* @__PURE__ */ jsx("pre", {
171
+ className: "text-foreground font-mono text-[10px] leading-snug break-words whitespace-pre-wrap",
172
+ children: part.argsText
173
+ })
174
+ }) : null;
175
+ $[26] = part;
176
+ $[27] = t14;
177
+ } else t14 = $[27];
178
+ let t15;
179
+ if ($[28] !== part.isError || $[29] !== part.result) {
180
+ t15 = part.result !== void 0 ? /* @__PURE__ */ jsx(PartDisclosure, {
181
+ label: part.isError ? "Result (error)" : "Result",
182
+ children: /* @__PURE__ */ jsx(JSONTree, {
183
+ value: part.result,
184
+ openDepth: 0,
185
+ compact: true
186
+ })
187
+ }) : null;
188
+ $[28] = part.isError;
189
+ $[29] = part.result;
190
+ $[30] = t15;
191
+ } else t15 = $[30];
192
+ let t16;
193
+ if ($[31] !== part.artifact) {
194
+ t16 = part.artifact !== void 0 ? /* @__PURE__ */ jsx(PartDisclosure, {
195
+ label: "Artifact",
196
+ children: /* @__PURE__ */ jsx(JSONTree, {
197
+ value: part.artifact,
198
+ openDepth: 0,
199
+ compact: true
200
+ })
201
+ }) : null;
202
+ $[31] = part.artifact;
203
+ $[32] = t16;
204
+ } else t16 = $[32];
205
+ let t17;
206
+ if ($[33] !== part.modelContent) {
207
+ t17 = part.modelContent !== void 0 ? /* @__PURE__ */ jsx(PartDisclosure, {
208
+ label: "Model content",
209
+ children: /* @__PURE__ */ jsx(JSONTree, {
210
+ value: part.modelContent,
211
+ openDepth: 0,
212
+ compact: true
213
+ })
214
+ }) : null;
215
+ $[33] = part.modelContent;
216
+ $[34] = t17;
217
+ } else t17 = $[34];
218
+ let t18;
219
+ if ($[35] !== part.mcp) {
220
+ t18 = part.mcp !== void 0 ? /* @__PURE__ */ jsx(PartDisclosure, {
221
+ label: "MCP",
222
+ children: /* @__PURE__ */ jsx(JSONTree, {
223
+ value: part.mcp,
224
+ openDepth: 0,
225
+ compact: true
226
+ })
227
+ }) : null;
228
+ $[35] = part.mcp;
229
+ $[36] = t18;
230
+ } else t18 = $[36];
231
+ let t19;
232
+ if ($[37] !== part.subMessageCount) {
233
+ t19 = part.subMessageCount > 0 ? /* @__PURE__ */ jsxs("span", {
234
+ className: "text-muted-foreground text-[10px]",
235
+ children: [
236
+ part.subMessageCount,
237
+ " nested sub-agent message",
238
+ part.subMessageCount === 1 ? "" : "s"
239
+ ]
240
+ }) : null;
241
+ $[37] = part.subMessageCount;
242
+ $[38] = t19;
243
+ } else t19 = $[38];
244
+ let t20;
245
+ if ($[39] !== t11 || $[40] !== t12 || $[41] !== t13 || $[42] !== t14 || $[43] !== t15 || $[44] !== t16 || $[45] !== t17 || $[46] !== t18 || $[47] !== t19) {
246
+ t20 = /* @__PURE__ */ jsxs("div", {
247
+ className: "border-border flex flex-col gap-0.5 border-t px-2 py-1",
248
+ children: [
249
+ t11,
250
+ t12,
251
+ t13,
252
+ t14,
253
+ t15,
254
+ t16,
255
+ t17,
256
+ t18,
257
+ t19
258
+ ]
259
+ });
260
+ $[39] = t11;
261
+ $[40] = t12;
262
+ $[41] = t13;
263
+ $[42] = t14;
264
+ $[43] = t15;
265
+ $[44] = t16;
266
+ $[45] = t17;
267
+ $[46] = t18;
268
+ $[47] = t19;
269
+ $[48] = t20;
270
+ } else t20 = $[48];
271
+ let t21;
272
+ if ($[49] !== awaiting || $[50] !== t10 || $[51] !== t20 || $[52] !== t4) {
273
+ t21 = /* @__PURE__ */ jsxs("details", {
274
+ open: awaiting,
275
+ className: t4,
276
+ children: [t10, t20]
277
+ });
278
+ $[49] = awaiting;
279
+ $[50] = t10;
280
+ $[51] = t20;
281
+ $[52] = t4;
282
+ $[53] = t21;
283
+ } else t21 = $[53];
284
+ return t21;
285
+ };
286
+ //#endregion
287
+ export { ToolCallView };
288
+
289
+ //# sourceMappingURL=ToolCallView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolCallView.js","names":["clsx","JSONTree","ToneBadge","PartDisclosure","StatusBadge","ToolCallPartPreview","isAwaiting","part","status","type","interrupt","undefined","approval","approved","sameAsArgsJson","argsText","trim","JSON","stringify","args","ToolCallView","t0","$","_c","nested","t1","t2","awaiting","t3","t4","t5","Symbol","for","t6","toolName","t7","reason","t8","isError","t9","mcp","t10","t11","id","String","isAutomatic","payload","t12","toolCallId","t13","t14","t15","result","t16","artifact","t17","modelContent","t18","t19","subMessageCount","t20","t21"],"sources":["../../../src/views/message/ToolCallView.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { JSONTree, ToneBadge } from \"../ui\";\nimport { PartDisclosure } from \"./PartDisclosure\";\nimport { StatusBadge } from \"./StatusBadge\";\nimport type { ToolCallPartPreview } from \"./types\";\n\nconst isAwaiting = (part: ToolCallPartPreview) =>\n part.status?.type === \"requires-action\" ||\n part.interrupt !== undefined ||\n (part.approval !== undefined && part.approval.approved === undefined);\n\nconst sameAsArgsJson = (part: ToolCallPartPreview) => {\n if (part.argsText === undefined) return false;\n try {\n return part.argsText.trim() === JSON.stringify(part.args);\n } catch {\n return false;\n }\n};\n\nexport const ToolCallView = ({\n part,\n nested = false,\n}: {\n part: ToolCallPartPreview;\n nested?: boolean;\n}) => {\n const awaiting = isAwaiting(part);\n\n return (\n <details\n open={awaiting}\n className={clsx(\n \"group\",\n !nested && \"border-border overflow-hidden rounded-md border\",\n )}\n >\n <summary className=\"hover:bg-accent/40 flex cursor-pointer list-none items-center gap-1.5 px-2 py-1.5 text-[11px] select-none\">\n <span className=\"text-muted-foreground inline-block shrink-0 transition-transform group-open:rotate-90\">\n ›\n </span>\n <span className=\"text-foreground min-w-0 flex-1 truncate font-medium\">\n {part.toolName}\n </span>\n {part.status ? (\n <StatusBadge\n type={part.status.type}\n reason={part.status.reason}\n compact\n size=\"sm\"\n />\n ) : null}\n {part.isError ? (\n <StatusBadge type=\"incomplete\" reason=\"error\" compact size=\"sm\" />\n ) : null}\n {part.mcp !== undefined ? (\n <ToneBadge tone=\"violet\" size=\"sm\">\n mcp\n </ToneBadge>\n ) : null}\n </summary>\n\n <div className=\"border-border flex flex-col gap-0.5 border-t px-2 py-1\">\n {awaiting ? (\n <div className=\"bg-muted/50 rounded border px-2 py-1.5 text-[10px]\">\n <ToneBadge tone=\"amber\" size=\"sm\">\n {part.approval ? \"Awaiting approval\" : \"Awaiting human input\"}\n </ToneBadge>\n {part.approval ? (\n <div className=\"text-muted-foreground mt-1 flex flex-wrap gap-x-2 gap-y-0.5\">\n {part.approval.id ? <span>id: {part.approval.id}</span> : null}\n <span>\n approved:{\" \"}\n {part.approval.approved === undefined\n ? \"pending\"\n : String(part.approval.approved)}\n </span>\n {part.approval.isAutomatic !== undefined ? (\n <span>auto: {String(part.approval.isAutomatic)}</span>\n ) : null}\n {part.approval.reason ? (\n <span>{part.approval.reason}</span>\n ) : null}\n </div>\n ) : null}\n {part.interrupt?.payload !== undefined ? (\n <div className=\"mt-1\">\n <JSONTree\n value={part.interrupt.payload}\n openDepth={0}\n compact\n />\n </div>\n ) : null}\n </div>\n ) : null}\n\n {part.toolCallId ? (\n <PartDisclosure label=\"Call id\">\n <span className=\"text-muted-foreground font-mono text-[10px] break-all\">\n {part.toolCallId}\n </span>\n </PartDisclosure>\n ) : null}\n\n <PartDisclosure label=\"Arguments\">\n <JSONTree value={part.args} openDepth={0} compact />\n </PartDisclosure>\n\n {part.argsText !== undefined && !sameAsArgsJson(part) ? (\n <PartDisclosure label=\"Raw args\">\n <pre className=\"text-foreground font-mono text-[10px] leading-snug break-words whitespace-pre-wrap\">\n {part.argsText}\n </pre>\n </PartDisclosure>\n ) : null}\n\n {part.result !== undefined ? (\n <PartDisclosure label={part.isError ? \"Result (error)\" : \"Result\"}>\n <JSONTree value={part.result} openDepth={0} compact />\n </PartDisclosure>\n ) : null}\n\n {part.artifact !== undefined ? (\n <PartDisclosure label=\"Artifact\">\n <JSONTree value={part.artifact} openDepth={0} compact />\n </PartDisclosure>\n ) : null}\n\n {part.modelContent !== undefined ? (\n <PartDisclosure label=\"Model content\">\n <JSONTree value={part.modelContent} openDepth={0} compact />\n </PartDisclosure>\n ) : null}\n\n {part.mcp !== undefined ? (\n <PartDisclosure label=\"MCP\">\n <JSONTree value={part.mcp} openDepth={0} compact />\n </PartDisclosure>\n ) : null}\n\n {part.subMessageCount > 0 ? (\n <span className=\"text-muted-foreground text-[10px]\">\n {part.subMessageCount} nested sub-agent message\n {part.subMessageCount === 1 ? \"\" : \"s\"}\n </span>\n ) : null}\n </div>\n </details>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { MessageTimingPreview } from "./types.js";
2
+
3
+ //#region src/views/message/TtftBar.d.ts
4
+ /**
5
+ * Splits a model turn into the time-to-first-token segment (dim) and the
6
+ * streaming segment (solid). The only width-bearing timing form: both numbers
7
+ * are measured, not derived. Renders nothing unless all three timestamps exist.
8
+ */
9
+ declare const TtftBar: ({
10
+ timing
11
+ }: {
12
+ timing: MessageTimingPreview;
13
+ }) => import("react").JSX.Element | null;
14
+ //#endregion
15
+ export { TtftBar };
16
+ //# sourceMappingURL=TtftBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TtftBar.d.ts","names":[],"sources":["../../../src/views/message/TtftBar.tsx"],"mappings":";;;;;AAQA;;;cAAa,OAAA;EAAW;AAAA;EAAc,MAAA,EAAQ,oBAAoB;AAAA,sBAAE,GAAA,CAAA,OAAA"}
@@ -0,0 +1,128 @@
1
+ import { formatMs } from "../../utils/common.js";
2
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/views/message/TtftBar.tsx
5
+ /**
6
+ * Splits a model turn into the time-to-first-token segment (dim) and the
7
+ * streaming segment (solid). The only width-bearing timing form: both numbers
8
+ * are measured, not derived. Renders nothing unless all three timestamps exist.
9
+ */
10
+ const TtftBar = (t0) => {
11
+ const $ = c(31);
12
+ const { timing } = t0;
13
+ const { streamStartTime, firstTokenTime, totalStreamTime } = timing;
14
+ if (streamStartTime === void 0 || firstTokenTime === void 0 || totalStreamTime === void 0) return null;
15
+ const ttft = Math.max(0, firstTokenTime - streamStartTime);
16
+ const total = Math.max(totalStreamTime, ttft);
17
+ const stream = Math.max(0, total - ttft);
18
+ const ttftPercent = total > 0 ? ttft / total * 100 : 0;
19
+ let t1;
20
+ if ($[0] !== ttft) {
21
+ t1 = formatMs(ttft);
22
+ $[0] = ttft;
23
+ $[1] = t1;
24
+ } else t1 = $[1];
25
+ let t2;
26
+ if ($[2] !== t1) {
27
+ t2 = /* @__PURE__ */ jsxs("span", { children: ["TTFT ", t1] });
28
+ $[2] = t1;
29
+ $[3] = t2;
30
+ } else t2 = $[3];
31
+ let t3;
32
+ if ($[4] !== stream) {
33
+ t3 = formatMs(stream);
34
+ $[4] = stream;
35
+ $[5] = t3;
36
+ } else t3 = $[5];
37
+ let t4;
38
+ if ($[6] !== t3) {
39
+ t4 = /* @__PURE__ */ jsxs("span", { children: [t3, " stream"] });
40
+ $[6] = t3;
41
+ $[7] = t4;
42
+ } else t4 = $[7];
43
+ let t5;
44
+ if ($[8] !== t2 || $[9] !== t4) {
45
+ t5 = /* @__PURE__ */ jsxs("div", {
46
+ className: "text-muted-foreground flex justify-between text-[9px] leading-none tabular-nums",
47
+ children: [t2, t4]
48
+ });
49
+ $[8] = t2;
50
+ $[9] = t4;
51
+ $[10] = t5;
52
+ } else t5 = $[10];
53
+ const t6 = `${ttftPercent}%`;
54
+ let t7;
55
+ if ($[11] !== t6) {
56
+ t7 = { width: t6 };
57
+ $[11] = t6;
58
+ $[12] = t7;
59
+ } else t7 = $[12];
60
+ let t8;
61
+ if ($[13] !== ttft) {
62
+ t8 = formatMs(ttft);
63
+ $[13] = ttft;
64
+ $[14] = t8;
65
+ } else t8 = $[14];
66
+ const t9 = `TTFT ${t8}`;
67
+ let t10;
68
+ if ($[15] !== t7 || $[16] !== t9) {
69
+ t10 = /* @__PURE__ */ jsx("div", {
70
+ className: "bg-muted-foreground/40 h-full",
71
+ style: t7,
72
+ title: t9
73
+ });
74
+ $[15] = t7;
75
+ $[16] = t9;
76
+ $[17] = t10;
77
+ } else t10 = $[17];
78
+ const t11 = `${100 - ttftPercent}%`;
79
+ let t12;
80
+ if ($[18] !== t11) {
81
+ t12 = { width: t11 };
82
+ $[18] = t11;
83
+ $[19] = t12;
84
+ } else t12 = $[19];
85
+ let t13;
86
+ if ($[20] !== stream) {
87
+ t13 = formatMs(stream);
88
+ $[20] = stream;
89
+ $[21] = t13;
90
+ } else t13 = $[21];
91
+ const t14 = `stream ${t13}`;
92
+ let t15;
93
+ if ($[22] !== t12 || $[23] !== t14) {
94
+ t15 = /* @__PURE__ */ jsx("div", {
95
+ className: "bg-primary h-full",
96
+ style: t12,
97
+ title: t14
98
+ });
99
+ $[22] = t12;
100
+ $[23] = t14;
101
+ $[24] = t15;
102
+ } else t15 = $[24];
103
+ let t16;
104
+ if ($[25] !== t10 || $[26] !== t15) {
105
+ t16 = /* @__PURE__ */ jsxs("div", {
106
+ className: "bg-muted flex h-1 overflow-hidden rounded-full",
107
+ children: [t10, t15]
108
+ });
109
+ $[25] = t10;
110
+ $[26] = t15;
111
+ $[27] = t16;
112
+ } else t16 = $[27];
113
+ let t17;
114
+ if ($[28] !== t16 || $[29] !== t5) {
115
+ t17 = /* @__PURE__ */ jsxs("div", {
116
+ className: "flex flex-col gap-0.5",
117
+ children: [t5, t16]
118
+ });
119
+ $[28] = t16;
120
+ $[29] = t5;
121
+ $[30] = t17;
122
+ } else t17 = $[30];
123
+ return t17;
124
+ };
125
+ //#endregion
126
+ export { TtftBar };
127
+
128
+ //# sourceMappingURL=TtftBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TtftBar.js","names":["formatMs","MessageTimingPreview","TtftBar","t0","$","_c","timing","streamStartTime","firstTokenTime","totalStreamTime","undefined","ttft","Math","max","total","stream","ttftPercent","t1","t2","t3","t4","t5","t6","t7","width","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17"],"sources":["../../../src/views/message/TtftBar.tsx"],"sourcesContent":["import { formatMs } from \"../../utils/common\";\nimport type { MessageTimingPreview } from \"./types\";\n\n/**\n * Splits a model turn into the time-to-first-token segment (dim) and the\n * streaming segment (solid). The only width-bearing timing form: both numbers\n * are measured, not derived. Renders nothing unless all three timestamps exist.\n */\nexport const TtftBar = ({ timing }: { timing: MessageTimingPreview }) => {\n const { streamStartTime, firstTokenTime, totalStreamTime } = timing;\n if (\n streamStartTime === undefined ||\n firstTokenTime === undefined ||\n totalStreamTime === undefined\n ) {\n return null;\n }\n\n const ttft = Math.max(0, firstTokenTime - streamStartTime);\n const total = Math.max(totalStreamTime, ttft);\n const stream = Math.max(0, total - ttft);\n const ttftPercent = total > 0 ? (ttft / total) * 100 : 0;\n\n return (\n <div className=\"flex flex-col gap-0.5\">\n <div className=\"text-muted-foreground flex justify-between text-[9px] leading-none tabular-nums\">\n <span>TTFT {formatMs(ttft)}</span>\n <span>{formatMs(stream)} stream</span>\n </div>\n <div className=\"bg-muted flex h-1 overflow-hidden rounded-full\">\n <div\n className=\"bg-muted-foreground/40 h-full\"\n style={{ width: `${ttftPercent}%` }}\n title={`TTFT ${formatMs(ttft)}`}\n />\n <div\n className=\"bg-primary h-full\"\n style={{ width: `${100 - ttftPercent}%` }}\n title={`stream ${formatMs(stream)}`}\n />\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { MessagePreview, PartPreview } from "./types.js";
2
+ import { MessageDetailBody, messageDetailHeader } from "./MessageDetailPane.js";
3
+ import { MessageList } from "./MessageList.js";
4
+ import { StatusBadge } from "./StatusBadge.js";
5
+ import { parseMessage } from "./parse.js";
6
+ export { MessageDetailBody, MessageList, type MessagePreview, type PartPreview, StatusBadge, messageDetailHeader, parseMessage };
@@ -0,0 +1,5 @@
1
+ import { parseMessage } from "./parse.js";
2
+ import { StatusBadge } from "./StatusBadge.js";
3
+ import { MessageList } from "./MessageList.js";
4
+ import { MessageDetailBody, messageDetailHeader } from "./MessageDetailPane.js";
5
+ export { MessageDetailBody, MessageList, StatusBadge, messageDetailHeader, parseMessage };
@@ -0,0 +1,8 @@
1
+ import { MessagePreview } from "./types.js";
2
+
3
+ //#region src/views/message/messagePlainText.d.ts
4
+ /** Plain-text export of a message for clipboard copy. */
5
+ declare const messagePlainText: (message: MessagePreview) => string;
6
+ //#endregion
7
+ export { messagePlainText };
8
+ //# sourceMappingURL=messagePlainText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messagePlainText.d.ts","names":[],"sources":["../../../src/views/message/messagePlainText.ts"],"mappings":";;;;cA8Ca,gBAAA,GAAoB,OAAuB,EAAd,cAAc"}
@@ -0,0 +1,39 @@
1
+ //#region src/views/message/messagePlainText.ts
2
+ const stringify = (value) => {
3
+ if (typeof value === "string") return value;
4
+ try {
5
+ return JSON.stringify(value, null, 2);
6
+ } catch {
7
+ return String(value);
8
+ }
9
+ };
10
+ const partPlainText = (part) => {
11
+ switch (part.type) {
12
+ case "text":
13
+ case "reasoning": return part.text.trim() || null;
14
+ case "tool-call": {
15
+ const lines = [`[tool] ${part.toolName}`];
16
+ if (part.args !== void 0 && part.args !== null) lines.push(`args: ${stringify(part.args)}`);
17
+ if (part.result !== void 0) lines.push(`result: ${stringify(part.result)}`);
18
+ return lines.join("\n");
19
+ }
20
+ case "source": return part.title ?? part.url ?? part.sourceType ?? null;
21
+ case "image": return part.filename ? `[image] ${part.filename}` : "[image]";
22
+ case "file": return part.filename ? `[file] ${part.filename}` : "[file]";
23
+ case "audio": return part.format ? `[audio] ${part.format}` : "[audio]";
24
+ case "data": return `[data${part.name ? `: ${part.name}` : ""}]\n${stringify(part.data)}`;
25
+ case "generative-ui": return `[generative-ui]\n${stringify(part.spec)}`;
26
+ default: return `[${part.rawType || "unknown"}]\n${stringify(part.raw)}`;
27
+ }
28
+ };
29
+ /** Plain-text export of a message for clipboard copy. */
30
+ const messagePlainText = (message) => {
31
+ const blocks = [];
32
+ if (message.attachments.length) blocks.push(message.attachments.map((attachment) => `[attachment] ${attachment.name}`).join("\n"));
33
+ blocks.push(...message.parts.map(partPlainText).filter((block) => Boolean(block)));
34
+ return blocks.join("\n\n");
35
+ };
36
+ //#endregion
37
+ export { messagePlainText };
38
+
39
+ //# sourceMappingURL=messagePlainText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messagePlainText.js","names":["MessagePreview","PartPreview","stringify","value","JSON","String","partPlainText","part","type","text","trim","lines","toolName","args","undefined","push","result","join","title","url","sourceType","filename","format","name","data","spec","rawType","raw","messagePlainText","message","blocks","attachments","length","map","attachment","parts","filter","block","Boolean"],"sources":["../../../src/views/message/messagePlainText.ts"],"sourcesContent":["import type { MessagePreview, PartPreview } from \"./types\";\n\nconst stringify = (value: unknown): string => {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n};\n\nconst partPlainText = (part: PartPreview): string | null => {\n switch (part.type) {\n case \"text\":\n case \"reasoning\": {\n const text = part.text.trim();\n return text || null;\n }\n case \"tool-call\": {\n const lines = [`[tool] ${part.toolName}`];\n if (part.args !== undefined && part.args !== null) {\n lines.push(`args: ${stringify(part.args)}`);\n }\n if (part.result !== undefined) {\n lines.push(`result: ${stringify(part.result)}`);\n }\n return lines.join(\"\\n\");\n }\n case \"source\":\n return part.title ?? part.url ?? part.sourceType ?? null;\n case \"image\":\n return part.filename ? `[image] ${part.filename}` : \"[image]\";\n case \"file\":\n return part.filename ? `[file] ${part.filename}` : \"[file]\";\n case \"audio\":\n return part.format ? `[audio] ${part.format}` : \"[audio]\";\n case \"data\":\n return `[data${part.name ? `: ${part.name}` : \"\"}]\\n${stringify(part.data)}`;\n case \"generative-ui\":\n return `[generative-ui]\\n${stringify(part.spec)}`;\n default:\n return `[${part.rawType || \"unknown\"}]\\n${stringify(part.raw)}`;\n }\n};\n\n/** Plain-text export of a message for clipboard copy. */\nexport const messagePlainText = (message: MessagePreview): string => {\n const blocks: string[] = [];\n\n if (message.attachments.length) {\n blocks.push(\n message.attachments\n .map((attachment) => `[attachment] ${attachment.name}`)\n .join(\"\\n\"),\n );\n }\n\n blocks.push(\n ...message.parts\n .map(partPlainText)\n .filter((block): block is string => Boolean(block)),\n );\n\n return blocks.join(\"\\n\\n\");\n};\n"],"mappings":";AAEA,MAAME,aAAaC,UAA2B;CAC5C,IAAI,OAAOA,UAAU,UAAU,OAAOA;CACtC,IAAI;EACF,OAAOC,KAAKF,UAAUC,OAAO,MAAM,CAAC;CACtC,QAAQ;EACN,OAAOE,OAAOF,KAAK;CACrB;AACF;AAEA,MAAMG,iBAAiBC,SAAqC;CAC1D,QAAQA,KAAKC,MAAb;EACE,KAAK;EACL,KAAK,aAEH,OADaD,KAAKE,KAAKC,KAChBD,KAAQ;EAEjB,KAAK,aAAa;GAChB,MAAME,QAAQ,CAAC,UAAUJ,KAAKK,UAAU;GACxC,IAAIL,KAAKM,SAASC,KAAAA,KAAaP,KAAKM,SAAS,MAC3CF,MAAMI,KAAK,SAASb,UAAUK,KAAKM,IAAI,GAAG;GAE5C,IAAIN,KAAKS,WAAWF,KAAAA,GAClBH,MAAMI,KAAK,WAAWb,UAAUK,KAAKS,MAAM,GAAG;GAEhD,OAAOL,MAAMM,KAAK,IAAI;EACxB;EACA,KAAK,UACH,OAAOV,KAAKW,SAASX,KAAKY,OAAOZ,KAAKa,cAAc;EACtD,KAAK,SACH,OAAOb,KAAKc,WAAW,WAAWd,KAAKc,aAAa;EACtD,KAAK,QACH,OAAOd,KAAKc,WAAW,UAAUd,KAAKc,aAAa;EACrD,KAAK,SACH,OAAOd,KAAKe,SAAS,WAAWf,KAAKe,WAAW;EAClD,KAAK,QACH,OAAO,QAAQf,KAAKgB,OAAO,KAAKhB,KAAKgB,SAAS,GAAE,KAAMrB,UAAUK,KAAKiB,IAAI;EAC3E,KAAK,iBACH,OAAO,oBAAoBtB,UAAUK,KAAKkB,IAAI;EAChD,SACE,OAAO,IAAIlB,KAAKmB,WAAW,UAAS,KAAMxB,UAAUK,KAAKoB,GAAG;CAChE;AACF;;AAGA,MAAaC,oBAAoBC,YAAoC;CACnE,MAAMC,SAAmB,CAAA;CAEzB,IAAID,QAAQE,YAAYC,QACtBF,OAAOf,KACLc,QAAQE,YACLE,KAAKC,eAAe,gBAAgBA,WAAWX,MAAM,CAAC,CACtDN,KAAK,IAAI,CACd;CAGFa,OAAOf,KACL,GAAGc,QAAQM,MACRF,IAAI3B,aAAa,CAAC,CAClB8B,QAAQC,UAA2BC,QAAQD,KAAK,CAAC,CACtD;CAEA,OAAOP,OAAOb,KAAK,MAAM;AAC3B"}
@@ -0,0 +1,10 @@
1
+ import { MessagePreview, PartPreview, PartStatusPreview } from "./types.js";
2
+
3
+ //#region src/views/message/parse.d.ts
4
+ declare const partKey: (part: PartPreview, index: number) => string;
5
+ declare const parsePartStatus: (value: unknown) => PartStatusPreview | undefined;
6
+ declare const parsePart: (value: unknown) => PartPreview;
7
+ declare const parseMessage: (value: unknown, index: number) => MessagePreview | null;
8
+ //#endregion
9
+ export { parseMessage, parsePart, parsePartStatus, partKey };
10
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","names":[],"sources":["../../../src/views/message/parse.ts"],"mappings":";;;cAiBa,OAAA,GAAW,IAAA,EAAM,WAAW,EAAE,KAAA;AAAA,cAK9B,eAAA,GACX,KAAA,cACC,iBAAiB;AAAA,cA2EP,SAAA,GAAa,KAAA,cAAiB,WAwF1C;AAAA,cAkDY,YAAA,GACX,KAAA,WACA,KAAA,aACC,cAAc"}