dsh-plugin-core 0.33.0 → 0.33.2

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 (640) hide show
  1. package/README.md +197 -64
  2. package/README.zh-CN.md +242 -0
  3. package/dist/adv/explorer/open.js +4 -4
  4. package/dist/adv/explorer/open.js.map +1 -1
  5. package/dist/ui/feedback/host-toast.d.ts +1 -1
  6. package/dist/ui/feedback/host-toast.js +1 -1
  7. package/docs/README.md +1 -0
  8. package/docs/help/explorer.doc.ts +1 -1
  9. package/docs/help/explorer.md +1 -1
  10. package/docs/help/integration.doc.ts +2 -2
  11. package/docs/help/integration.md +2 -2
  12. package/docs/help/session.doc.ts +1 -1
  13. package/docs/help/session.md +1 -1
  14. package/docs/help/ui.doc.ts +1 -1
  15. package/docs/help/ui.md +1 -1
  16. package/package.json +16 -16
  17. package/dist/explorer/ExplorerPanel.d.ts +0 -25
  18. package/dist/explorer/ExplorerPanel.d.ts.map +0 -1
  19. package/dist/explorer/ExplorerPanel.js +0 -111
  20. package/dist/explorer/ExplorerPanel.js.map +0 -1
  21. package/dist/explorer/FileBrowser.d.ts +0 -58
  22. package/dist/explorer/FileBrowser.d.ts.map +0 -1
  23. package/dist/explorer/FileBrowser.js +0 -632
  24. package/dist/explorer/FileBrowser.js.map +0 -1
  25. package/dist/explorer/crumb-nav.d.ts +0 -45
  26. package/dist/explorer/crumb-nav.d.ts.map +0 -1
  27. package/dist/explorer/crumb-nav.js +0 -78
  28. package/dist/explorer/crumb-nav.js.map +0 -1
  29. package/dist/explorer/crumbs-menu.d.ts +0 -37
  30. package/dist/explorer/crumbs-menu.d.ts.map +0 -1
  31. package/dist/explorer/crumbs-menu.js +0 -102
  32. package/dist/explorer/crumbs-menu.js.map +0 -1
  33. package/dist/explorer/explorer-css.d.ts +0 -2
  34. package/dist/explorer/explorer-css.d.ts.map +0 -1
  35. package/dist/explorer/explorer-css.generated.d.ts +0 -2
  36. package/dist/explorer/explorer-css.generated.d.ts.map +0 -1
  37. package/dist/explorer/explorer-css.generated.js +0 -4
  38. package/dist/explorer/explorer-css.generated.js.map +0 -1
  39. package/dist/explorer/explorer-css.js +0 -3
  40. package/dist/explorer/explorer-css.js.map +0 -1
  41. package/dist/explorer/fs-face.d.ts +0 -36
  42. package/dist/explorer/fs-face.d.ts.map +0 -1
  43. package/dist/explorer/fs-face.js +0 -74
  44. package/dist/explorer/fs-face.js.map +0 -1
  45. package/dist/explorer/index.d.ts +0 -6
  46. package/dist/explorer/index.d.ts.map +0 -1
  47. package/dist/explorer/index.js +0 -6
  48. package/dist/explorer/index.js.map +0 -1
  49. package/dist/explorer/landing.d.ts +0 -26
  50. package/dist/explorer/landing.d.ts.map +0 -1
  51. package/dist/explorer/landing.js +0 -43
  52. package/dist/explorer/landing.js.map +0 -1
  53. package/dist/explorer/open.d.ts +0 -137
  54. package/dist/explorer/open.d.ts.map +0 -1
  55. package/dist/explorer/open.js +0 -350
  56. package/dist/explorer/open.js.map +0 -1
  57. package/dist/explorer/picker-placement.d.ts +0 -69
  58. package/dist/explorer/picker-placement.d.ts.map +0 -1
  59. package/dist/explorer/picker-placement.js +0 -122
  60. package/dist/explorer/picker-placement.js.map +0 -1
  61. package/dist/explorer/preview/BytesPreview.d.ts +0 -12
  62. package/dist/explorer/preview/BytesPreview.d.ts.map +0 -1
  63. package/dist/explorer/preview/BytesPreview.js +0 -60
  64. package/dist/explorer/preview/BytesPreview.js.map +0 -1
  65. package/dist/explorer/preview/HtmlPreview.d.ts +0 -17
  66. package/dist/explorer/preview/HtmlPreview.d.ts.map +0 -1
  67. package/dist/explorer/preview/HtmlPreview.js +0 -113
  68. package/dist/explorer/preview/HtmlPreview.js.map +0 -1
  69. package/dist/explorer/preview/OfficePreview.d.ts +0 -12
  70. package/dist/explorer/preview/OfficePreview.d.ts.map +0 -1
  71. package/dist/explorer/preview/OfficePreview.js +0 -63
  72. package/dist/explorer/preview/OfficePreview.js.map +0 -1
  73. package/dist/explorer/preview/TextPreview.d.ts +0 -18
  74. package/dist/explorer/preview/TextPreview.d.ts.map +0 -1
  75. package/dist/explorer/preview/TextPreview.js +0 -122
  76. package/dist/explorer/preview/TextPreview.js.map +0 -1
  77. package/dist/explorer/preview/index.d.ts +0 -24
  78. package/dist/explorer/preview/index.d.ts.map +0 -1
  79. package/dist/explorer/preview/index.js +0 -58
  80. package/dist/explorer/preview/index.js.map +0 -1
  81. package/dist/explorer/preview/md-labels.d.ts +0 -3
  82. package/dist/explorer/preview/md-labels.d.ts.map +0 -1
  83. package/dist/explorer/preview/md-labels.js +0 -12
  84. package/dist/explorer/preview/md-labels.js.map +0 -1
  85. package/dist/explorer/preview-title-bar.d.ts +0 -26
  86. package/dist/explorer/preview-title-bar.d.ts.map +0 -1
  87. package/dist/explorer/preview-title-bar.js +0 -48
  88. package/dist/explorer/preview-title-bar.js.map +0 -1
  89. package/dist/explorer/types.d.ts +0 -259
  90. package/dist/explorer/types.d.ts.map +0 -1
  91. package/dist/explorer/types.js +0 -379
  92. package/dist/explorer/types.js.map +0 -1
  93. package/dist/session/SessionViewModal.d.ts +0 -37
  94. package/dist/session/SessionViewModal.d.ts.map +0 -1
  95. package/dist/session/SessionViewModal.js +0 -1133
  96. package/dist/session/SessionViewModal.js.map +0 -1
  97. package/dist/session/changes.d.ts +0 -73
  98. package/dist/session/changes.d.ts.map +0 -1
  99. package/dist/session/changes.js +0 -134
  100. package/dist/session/changes.js.map +0 -1
  101. package/dist/session/faces.d.ts +0 -244
  102. package/dist/session/faces.d.ts.map +0 -1
  103. package/dist/session/faces.js +0 -17
  104. package/dist/session/faces.js.map +0 -1
  105. package/dist/session/index.d.ts +0 -7
  106. package/dist/session/index.d.ts.map +0 -1
  107. package/dist/session/index.js +0 -27
  108. package/dist/session/index.js.map +0 -1
  109. package/dist/session/mirror/AskCard.d.ts +0 -35
  110. package/dist/session/mirror/AskCard.d.ts.map +0 -1
  111. package/dist/session/mirror/AskCard.js +0 -131
  112. package/dist/session/mirror/AskCard.js.map +0 -1
  113. package/dist/session/mirror/BashRow.d.ts +0 -14
  114. package/dist/session/mirror/BashRow.d.ts.map +0 -1
  115. package/dist/session/mirror/BashRow.js +0 -143
  116. package/dist/session/mirror/BashRow.js.map +0 -1
  117. package/dist/session/mirror/ChangedFileDiff.d.ts +0 -25
  118. package/dist/session/mirror/ChangedFileDiff.d.ts.map +0 -1
  119. package/dist/session/mirror/ChangedFileDiff.js +0 -178
  120. package/dist/session/mirror/ChangedFileDiff.js.map +0 -1
  121. package/dist/session/mirror/ChangedFilesCard.d.ts +0 -18
  122. package/dist/session/mirror/ChangedFilesCard.d.ts.map +0 -1
  123. package/dist/session/mirror/ChangedFilesCard.js +0 -165
  124. package/dist/session/mirror/ChangedFilesCard.js.map +0 -1
  125. package/dist/session/mirror/ChatGroupSeat.d.ts +0 -24
  126. package/dist/session/mirror/ChatGroupSeat.d.ts.map +0 -1
  127. package/dist/session/mirror/ChatGroupSeat.js +0 -135
  128. package/dist/session/mirror/ChatGroupSeat.js.map +0 -1
  129. package/dist/session/mirror/ChatNodeSeat.d.ts +0 -43
  130. package/dist/session/mirror/ChatNodeSeat.d.ts.map +0 -1
  131. package/dist/session/mirror/ChatNodeSeat.js +0 -133
  132. package/dist/session/mirror/ChatNodeSeat.js.map +0 -1
  133. package/dist/session/mirror/ChatView.d.ts +0 -47
  134. package/dist/session/mirror/ChatView.d.ts.map +0 -1
  135. package/dist/session/mirror/ChatView.js +0 -138
  136. package/dist/session/mirror/ChatView.js.map +0 -1
  137. package/dist/session/mirror/CommandCard.d.ts +0 -20
  138. package/dist/session/mirror/CommandCard.d.ts.map +0 -1
  139. package/dist/session/mirror/CommandCard.js +0 -69
  140. package/dist/session/mirror/CommandCard.js.map +0 -1
  141. package/dist/session/mirror/ContextInjectionRow.d.ts +0 -18
  142. package/dist/session/mirror/ContextInjectionRow.d.ts.map +0 -1
  143. package/dist/session/mirror/ContextInjectionRow.js +0 -50
  144. package/dist/session/mirror/ContextInjectionRow.js.map +0 -1
  145. package/dist/session/mirror/Deliverables.d.ts +0 -24
  146. package/dist/session/mirror/Deliverables.d.ts.map +0 -1
  147. package/dist/session/mirror/Deliverables.js +0 -175
  148. package/dist/session/mirror/Deliverables.js.map +0 -1
  149. package/dist/session/mirror/GenericCommandCard.d.ts +0 -136
  150. package/dist/session/mirror/GenericCommandCard.d.ts.map +0 -1
  151. package/dist/session/mirror/GenericCommandCard.js +0 -948
  152. package/dist/session/mirror/GenericCommandCard.js.map +0 -1
  153. package/dist/session/mirror/MessageIconActions.d.ts +0 -16
  154. package/dist/session/mirror/MessageIconActions.d.ts.map +0 -1
  155. package/dist/session/mirror/MessageIconActions.js +0 -69
  156. package/dist/session/mirror/MessageIconActions.js.map +0 -1
  157. package/dist/session/mirror/MessageItem.d.ts +0 -93
  158. package/dist/session/mirror/MessageItem.d.ts.map +0 -1
  159. package/dist/session/mirror/MessageItem.js +0 -194
  160. package/dist/session/mirror/MessageItem.js.map +0 -1
  161. package/dist/session/mirror/ReasoningRow.d.ts +0 -11
  162. package/dist/session/mirror/ReasoningRow.d.ts.map +0 -1
  163. package/dist/session/mirror/ReasoningRow.js +0 -111
  164. package/dist/session/mirror/ReasoningRow.js.map +0 -1
  165. package/dist/session/mirror/RunningStatus.d.ts +0 -12
  166. package/dist/session/mirror/RunningStatus.d.ts.map +0 -1
  167. package/dist/session/mirror/RunningStatus.js +0 -57
  168. package/dist/session/mirror/RunningStatus.js.map +0 -1
  169. package/dist/session/mirror/StatDialog.d.ts +0 -20
  170. package/dist/session/mirror/StatDialog.d.ts.map +0 -1
  171. package/dist/session/mirror/StatDialog.js +0 -49
  172. package/dist/session/mirror/StatDialog.js.map +0 -1
  173. package/dist/session/mirror/ToolDetails.d.ts +0 -65
  174. package/dist/session/mirror/ToolDetails.d.ts.map +0 -1
  175. package/dist/session/mirror/ToolDetails.js +0 -268
  176. package/dist/session/mirror/ToolDetails.js.map +0 -1
  177. package/dist/session/mirror/TurnProcessNodeView.d.ts +0 -10
  178. package/dist/session/mirror/TurnProcessNodeView.d.ts.map +0 -1
  179. package/dist/session/mirror/TurnProcessNodeView.js +0 -57
  180. package/dist/session/mirror/TurnProcessNodeView.js.map +0 -1
  181. package/dist/session/mirror/TurnTailNodeView.d.ts +0 -57
  182. package/dist/session/mirror/TurnTailNodeView.d.ts.map +0 -1
  183. package/dist/session/mirror/TurnTailNodeView.js +0 -106
  184. package/dist/session/mirror/TurnTailNodeView.js.map +0 -1
  185. package/dist/session/mirror/TurnTriggerNodeView.d.ts +0 -16
  186. package/dist/session/mirror/TurnTriggerNodeView.d.ts.map +0 -1
  187. package/dist/session/mirror/TurnTriggerNodeView.js +0 -103
  188. package/dist/session/mirror/TurnTriggerNodeView.js.map +0 -1
  189. package/dist/session/mirror/TurnUsagePanel.d.ts +0 -21
  190. package/dist/session/mirror/TurnUsagePanel.d.ts.map +0 -1
  191. package/dist/session/mirror/TurnUsagePanel.js +0 -41
  192. package/dist/session/mirror/TurnUsagePanel.js.map +0 -1
  193. package/dist/session/mirror/control-details.d.ts +0 -9
  194. package/dist/session/mirror/control-details.d.ts.map +0 -1
  195. package/dist/session/mirror/control-details.js +0 -549
  196. package/dist/session/mirror/control-details.js.map +0 -1
  197. package/dist/session/mirror/detail-i18n.d.ts +0 -4
  198. package/dist/session/mirror/detail-i18n.d.ts.map +0 -1
  199. package/dist/session/mirror/detail-i18n.js +0 -153
  200. package/dist/session/mirror/detail-i18n.js.map +0 -1
  201. package/dist/session/mirror/message-chrome.d.ts +0 -39
  202. package/dist/session/mirror/message-chrome.d.ts.map +0 -1
  203. package/dist/session/mirror/message-chrome.js +0 -153
  204. package/dist/session/mirror/message-chrome.js.map +0 -1
  205. package/dist/session/mirror/process-groups.d.ts +0 -56
  206. package/dist/session/mirror/process-groups.d.ts.map +0 -1
  207. package/dist/session/mirror/process-groups.js +0 -202
  208. package/dist/session/mirror/process-groups.js.map +0 -1
  209. package/dist/session/official-classes.d.ts +0 -28
  210. package/dist/session/official-classes.d.ts.map +0 -1
  211. package/dist/session/official-classes.js +0 -152
  212. package/dist/session/official-classes.js.map +0 -1
  213. package/dist/session/open-review.d.ts +0 -13
  214. package/dist/session/open-review.d.ts.map +0 -1
  215. package/dist/session/open-review.js +0 -32
  216. package/dist/session/open-review.js.map +0 -1
  217. package/dist/session/open-session-view.d.ts +0 -19
  218. package/dist/session/open-session-view.d.ts.map +0 -1
  219. package/dist/session/open-session-view.js +0 -147
  220. package/dist/session/open-session-view.js.map +0 -1
  221. package/dist/session/pending-inputs.d.ts +0 -33
  222. package/dist/session/pending-inputs.d.ts.map +0 -1
  223. package/dist/session/pending-inputs.js +0 -130
  224. package/dist/session/pending-inputs.js.map +0 -1
  225. package/dist/session/session-css.d.ts +0 -2
  226. package/dist/session/session-css.d.ts.map +0 -1
  227. package/dist/session/session-css.generated.d.ts +0 -2
  228. package/dist/session/session-css.generated.d.ts.map +0 -1
  229. package/dist/session/session-css.generated.js +0 -4
  230. package/dist/session/session-css.generated.js.map +0 -1
  231. package/dist/session/session-css.js +0 -3
  232. package/dist/session/session-css.js.map +0 -1
  233. package/dist/session/tail-follow.d.ts +0 -29
  234. package/dist/session/tail-follow.d.ts.map +0 -1
  235. package/dist/session/tail-follow.js +0 -106
  236. package/dist/session/tail-follow.js.map +0 -1
  237. package/dist/session/types.d.ts +0 -28
  238. package/dist/session/types.d.ts.map +0 -1
  239. package/dist/session/types.js +0 -12
  240. package/dist/session/types.js.map +0 -1
  241. package/dist/ui/AlertModal.d.ts +0 -41
  242. package/dist/ui/AlertModal.d.ts.map +0 -1
  243. package/dist/ui/AlertModal.js +0 -45
  244. package/dist/ui/AlertModal.js.map +0 -1
  245. package/dist/ui/Button.d.ts +0 -102
  246. package/dist/ui/Button.d.ts.map +0 -1
  247. package/dist/ui/Button.js +0 -233
  248. package/dist/ui/Button.js.map +0 -1
  249. package/dist/ui/Card.d.ts +0 -65
  250. package/dist/ui/Card.d.ts.map +0 -1
  251. package/dist/ui/Card.js +0 -109
  252. package/dist/ui/Card.js.map +0 -1
  253. package/dist/ui/Checkbox.d.ts +0 -24
  254. package/dist/ui/Checkbox.d.ts.map +0 -1
  255. package/dist/ui/Checkbox.js +0 -35
  256. package/dist/ui/Checkbox.js.map +0 -1
  257. package/dist/ui/Chip.d.ts +0 -28
  258. package/dist/ui/Chip.d.ts.map +0 -1
  259. package/dist/ui/Chip.js +0 -36
  260. package/dist/ui/Chip.js.map +0 -1
  261. package/dist/ui/CodeViewer.d.ts +0 -38
  262. package/dist/ui/CodeViewer.d.ts.map +0 -1
  263. package/dist/ui/CodeViewer.js +0 -107
  264. package/dist/ui/CodeViewer.js.map +0 -1
  265. package/dist/ui/ConfirmModal.d.ts +0 -50
  266. package/dist/ui/ConfirmModal.d.ts.map +0 -1
  267. package/dist/ui/ConfirmModal.js +0 -47
  268. package/dist/ui/ConfirmModal.js.map +0 -1
  269. package/dist/ui/DateTimePicker.d.ts +0 -45
  270. package/dist/ui/DateTimePicker.d.ts.map +0 -1
  271. package/dist/ui/DateTimePicker.js +0 -462
  272. package/dist/ui/DateTimePicker.js.map +0 -1
  273. package/dist/ui/EmptyState.d.ts +0 -12
  274. package/dist/ui/EmptyState.d.ts.map +0 -1
  275. package/dist/ui/EmptyState.js +0 -10
  276. package/dist/ui/EmptyState.js.map +0 -1
  277. package/dist/ui/Field.d.ts +0 -125
  278. package/dist/ui/Field.d.ts.map +0 -1
  279. package/dist/ui/Field.js +0 -175
  280. package/dist/ui/Field.js.map +0 -1
  281. package/dist/ui/FieldHint.d.ts +0 -18
  282. package/dist/ui/FieldHint.d.ts.map +0 -1
  283. package/dist/ui/FieldHint.js +0 -40
  284. package/dist/ui/FieldHint.js.map +0 -1
  285. package/dist/ui/FlipText.d.ts +0 -43
  286. package/dist/ui/FlipText.d.ts.map +0 -1
  287. package/dist/ui/FlipText.js +0 -59
  288. package/dist/ui/FlipText.js.map +0 -1
  289. package/dist/ui/InputGroup.d.ts +0 -91
  290. package/dist/ui/InputGroup.d.ts.map +0 -1
  291. package/dist/ui/InputGroup.js +0 -125
  292. package/dist/ui/InputGroup.js.map +0 -1
  293. package/dist/ui/LiveText.d.ts +0 -13
  294. package/dist/ui/LiveText.d.ts.map +0 -1
  295. package/dist/ui/LiveText.js +0 -19
  296. package/dist/ui/LiveText.js.map +0 -1
  297. package/dist/ui/Loader.d.ts +0 -49
  298. package/dist/ui/Loader.d.ts.map +0 -1
  299. package/dist/ui/Loader.js +0 -79
  300. package/dist/ui/Loader.js.map +0 -1
  301. package/dist/ui/LoaderBar.d.ts +0 -38
  302. package/dist/ui/LoaderBar.d.ts.map +0 -1
  303. package/dist/ui/LoaderBar.js +0 -79
  304. package/dist/ui/LoaderBar.js.map +0 -1
  305. package/dist/ui/Loading.d.ts +0 -69
  306. package/dist/ui/Loading.d.ts.map +0 -1
  307. package/dist/ui/Loading.js +0 -164
  308. package/dist/ui/Loading.js.map +0 -1
  309. package/dist/ui/MarqueeText.d.ts +0 -22
  310. package/dist/ui/MarqueeText.d.ts.map +0 -1
  311. package/dist/ui/MarqueeText.js +0 -52
  312. package/dist/ui/MarqueeText.js.map +0 -1
  313. package/dist/ui/Modal.d.ts +0 -73
  314. package/dist/ui/Modal.d.ts.map +0 -1
  315. package/dist/ui/Modal.js +0 -83
  316. package/dist/ui/Modal.js.map +0 -1
  317. package/dist/ui/ModelPicker.d.ts +0 -48
  318. package/dist/ui/ModelPicker.d.ts.map +0 -1
  319. package/dist/ui/ModelPicker.js +0 -101
  320. package/dist/ui/ModelPicker.js.map +0 -1
  321. package/dist/ui/Pagination.d.ts +0 -59
  322. package/dist/ui/Pagination.d.ts.map +0 -1
  323. package/dist/ui/Pagination.js +0 -112
  324. package/dist/ui/Pagination.js.map +0 -1
  325. package/dist/ui/PanelDock.d.ts +0 -132
  326. package/dist/ui/PanelDock.d.ts.map +0 -1
  327. package/dist/ui/PanelDock.js +0 -390
  328. package/dist/ui/PanelDock.js.map +0 -1
  329. package/dist/ui/Picker.d.ts +0 -56
  330. package/dist/ui/Picker.d.ts.map +0 -1
  331. package/dist/ui/Picker.js +0 -244
  332. package/dist/ui/Picker.js.map +0 -1
  333. package/dist/ui/QuickToolbar.d.ts +0 -54
  334. package/dist/ui/QuickToolbar.d.ts.map +0 -1
  335. package/dist/ui/QuickToolbar.js +0 -254
  336. package/dist/ui/QuickToolbar.js.map +0 -1
  337. package/dist/ui/SectionHead.d.ts +0 -35
  338. package/dist/ui/SectionHead.d.ts.map +0 -1
  339. package/dist/ui/SectionHead.js +0 -45
  340. package/dist/ui/SectionHead.js.map +0 -1
  341. package/dist/ui/Segmented.d.ts +0 -99
  342. package/dist/ui/Segmented.d.ts.map +0 -1
  343. package/dist/ui/Segmented.js +0 -135
  344. package/dist/ui/Segmented.js.map +0 -1
  345. package/dist/ui/SideSheet.d.ts +0 -70
  346. package/dist/ui/SideSheet.d.ts.map +0 -1
  347. package/dist/ui/SideSheet.js +0 -130
  348. package/dist/ui/SideSheet.js.map +0 -1
  349. package/dist/ui/SplitGroup.d.ts +0 -37
  350. package/dist/ui/SplitGroup.d.ts.map +0 -1
  351. package/dist/ui/SplitGroup.js +0 -36
  352. package/dist/ui/SplitGroup.js.map +0 -1
  353. package/dist/ui/Surface.d.ts +0 -43
  354. package/dist/ui/Surface.d.ts.map +0 -1
  355. package/dist/ui/Surface.js +0 -39
  356. package/dist/ui/Surface.js.map +0 -1
  357. package/dist/ui/Table.d.ts +0 -30
  358. package/dist/ui/Table.d.ts.map +0 -1
  359. package/dist/ui/Table.js +0 -96
  360. package/dist/ui/Table.js.map +0 -1
  361. package/dist/ui/Textarea.d.ts +0 -36
  362. package/dist/ui/Textarea.d.ts.map +0 -1
  363. package/dist/ui/Textarea.js +0 -35
  364. package/dist/ui/Textarea.js.map +0 -1
  365. package/dist/ui/Toast.d.ts +0 -45
  366. package/dist/ui/Toast.d.ts.map +0 -1
  367. package/dist/ui/Toast.js +0 -225
  368. package/dist/ui/Toast.js.map +0 -1
  369. package/dist/ui/WorkspacePicker.d.ts +0 -35
  370. package/dist/ui/WorkspacePicker.d.ts.map +0 -1
  371. package/dist/ui/WorkspacePicker.js +0 -39
  372. package/dist/ui/WorkspacePicker.js.map +0 -1
  373. package/dist/ui/card-css.d.ts +0 -2
  374. package/dist/ui/card-css.d.ts.map +0 -1
  375. package/dist/ui/card-css.generated.d.ts +0 -2
  376. package/dist/ui/card-css.generated.d.ts.map +0 -1
  377. package/dist/ui/card-css.generated.js +0 -4
  378. package/dist/ui/card-css.generated.js.map +0 -1
  379. package/dist/ui/card-css.js +0 -5
  380. package/dist/ui/card-css.js.map +0 -1
  381. package/dist/ui/chevron.d.ts +0 -22
  382. package/dist/ui/chevron.d.ts.map +0 -1
  383. package/dist/ui/chevron.js +0 -33
  384. package/dist/ui/chevron.js.map +0 -1
  385. package/dist/ui/chip-css.d.ts +0 -2
  386. package/dist/ui/chip-css.d.ts.map +0 -1
  387. package/dist/ui/chip-css.generated.d.ts +0 -2
  388. package/dist/ui/chip-css.generated.d.ts.map +0 -1
  389. package/dist/ui/chip-css.generated.js +0 -4
  390. package/dist/ui/chip-css.generated.js.map +0 -1
  391. package/dist/ui/chip-css.js +0 -12
  392. package/dist/ui/chip-css.js.map +0 -1
  393. package/dist/ui/code-viewer-css.d.ts +0 -2
  394. package/dist/ui/code-viewer-css.d.ts.map +0 -1
  395. package/dist/ui/code-viewer-css.generated.d.ts +0 -2
  396. package/dist/ui/code-viewer-css.generated.d.ts.map +0 -1
  397. package/dist/ui/code-viewer-css.generated.js +0 -4
  398. package/dist/ui/code-viewer-css.generated.js.map +0 -1
  399. package/dist/ui/code-viewer-css.js +0 -3
  400. package/dist/ui/code-viewer-css.js.map +0 -1
  401. package/dist/ui/code-viewer-lang.d.ts +0 -15
  402. package/dist/ui/code-viewer-lang.d.ts.map +0 -1
  403. package/dist/ui/code-viewer-lang.js +0 -190
  404. package/dist/ui/code-viewer-lang.js.map +0 -1
  405. package/dist/ui/code-viewer-theme.d.ts +0 -5
  406. package/dist/ui/code-viewer-theme.d.ts.map +0 -1
  407. package/dist/ui/code-viewer-theme.js +0 -138
  408. package/dist/ui/code-viewer-theme.js.map +0 -1
  409. package/dist/ui/controls/button-css.generated.d.ts +0 -2
  410. package/dist/ui/controls/button-css.generated.d.ts.map +0 -1
  411. package/dist/ui/controls/button-css.generated.js +0 -4
  412. package/dist/ui/controls/button-css.generated.js.map +0 -1
  413. package/dist/ui/controls/datetime-css.generated.d.ts +0 -2
  414. package/dist/ui/controls/datetime-css.generated.d.ts.map +0 -1
  415. package/dist/ui/controls/datetime-css.generated.js +0 -4
  416. package/dist/ui/controls/datetime-css.generated.js.map +0 -1
  417. package/dist/ui/controls/field-css.generated.d.ts +0 -2
  418. package/dist/ui/controls/field-css.generated.d.ts.map +0 -1
  419. package/dist/ui/controls/field-css.generated.js +0 -4
  420. package/dist/ui/controls/field-css.generated.js.map +0 -1
  421. package/dist/ui/controls/hint-css.generated.d.ts +0 -2
  422. package/dist/ui/controls/hint-css.generated.d.ts.map +0 -1
  423. package/dist/ui/controls/hint-css.generated.js +0 -4
  424. package/dist/ui/controls/hint-css.generated.js.map +0 -1
  425. package/dist/ui/controls/input-group-css.generated.d.ts +0 -2
  426. package/dist/ui/controls/input-group-css.generated.d.ts.map +0 -1
  427. package/dist/ui/controls/input-group-css.generated.js +0 -4
  428. package/dist/ui/controls/input-group-css.generated.js.map +0 -1
  429. package/dist/ui/controls/loader-bar-css.generated.d.ts +0 -2
  430. package/dist/ui/controls/loader-bar-css.generated.d.ts.map +0 -1
  431. package/dist/ui/controls/loader-bar-css.generated.js +0 -4
  432. package/dist/ui/controls/loader-bar-css.generated.js.map +0 -1
  433. package/dist/ui/controls/loader-css.generated.d.ts +0 -2
  434. package/dist/ui/controls/loader-css.generated.d.ts.map +0 -1
  435. package/dist/ui/controls/loader-css.generated.js +0 -4
  436. package/dist/ui/controls/loader-css.generated.js.map +0 -1
  437. package/dist/ui/controls/loading-css.generated.d.ts +0 -2
  438. package/dist/ui/controls/loading-css.generated.d.ts.map +0 -1
  439. package/dist/ui/controls/loading-css.generated.js +0 -4
  440. package/dist/ui/controls/loading-css.generated.js.map +0 -1
  441. package/dist/ui/controls/pagination-css.generated.d.ts +0 -2
  442. package/dist/ui/controls/pagination-css.generated.d.ts.map +0 -1
  443. package/dist/ui/controls/pagination-css.generated.js +0 -4
  444. package/dist/ui/controls/pagination-css.generated.js.map +0 -1
  445. package/dist/ui/controls/quick-toolbar-css.generated.d.ts +0 -2
  446. package/dist/ui/controls/quick-toolbar-css.generated.d.ts.map +0 -1
  447. package/dist/ui/controls/quick-toolbar-css.generated.js +0 -4
  448. package/dist/ui/controls/quick-toolbar-css.generated.js.map +0 -1
  449. package/dist/ui/controls/section-head-css.generated.d.ts +0 -2
  450. package/dist/ui/controls/section-head-css.generated.d.ts.map +0 -1
  451. package/dist/ui/controls/section-head-css.generated.js +0 -4
  452. package/dist/ui/controls/section-head-css.generated.js.map +0 -1
  453. package/dist/ui/controls/segmented-css.generated.d.ts +0 -2
  454. package/dist/ui/controls/segmented-css.generated.d.ts.map +0 -1
  455. package/dist/ui/controls/segmented-css.generated.js +0 -4
  456. package/dist/ui/controls/segmented-css.generated.js.map +0 -1
  457. package/dist/ui/controls/split-group-css.generated.d.ts +0 -2
  458. package/dist/ui/controls/split-group-css.generated.d.ts.map +0 -1
  459. package/dist/ui/controls/split-group-css.generated.js +0 -4
  460. package/dist/ui/controls/split-group-css.generated.js.map +0 -1
  461. package/dist/ui/controls/table-css.generated.d.ts +0 -2
  462. package/dist/ui/controls/table-css.generated.d.ts.map +0 -1
  463. package/dist/ui/controls/table-css.generated.js +0 -4
  464. package/dist/ui/controls/table-css.generated.js.map +0 -1
  465. package/dist/ui/controls/table-plain-css.generated.d.ts +0 -2
  466. package/dist/ui/controls/table-plain-css.generated.d.ts.map +0 -1
  467. package/dist/ui/controls/table-plain-css.generated.js +0 -4
  468. package/dist/ui/controls/table-plain-css.generated.js.map +0 -1
  469. package/dist/ui/controls-css.d.ts +0 -16
  470. package/dist/ui/controls-css.d.ts.map +0 -1
  471. package/dist/ui/controls-css.js +0 -26
  472. package/dist/ui/controls-css.js.map +0 -1
  473. package/dist/ui/css.d.ts +0 -35
  474. package/dist/ui/css.d.ts.map +0 -1
  475. package/dist/ui/css.js +0 -52
  476. package/dist/ui/css.js.map +0 -1
  477. package/dist/ui/datetime-logic.d.ts +0 -102
  478. package/dist/ui/datetime-logic.d.ts.map +0 -1
  479. package/dist/ui/datetime-logic.js +0 -200
  480. package/dist/ui/datetime-logic.js.map +0 -1
  481. package/dist/ui/feedback-css.d.ts +0 -2
  482. package/dist/ui/feedback-css.d.ts.map +0 -1
  483. package/dist/ui/feedback-css.generated.d.ts +0 -2
  484. package/dist/ui/feedback-css.generated.d.ts.map +0 -1
  485. package/dist/ui/feedback-css.generated.js +0 -4
  486. package/dist/ui/feedback-css.generated.js.map +0 -1
  487. package/dist/ui/feedback-css.js +0 -4
  488. package/dist/ui/feedback-css.js.map +0 -1
  489. package/dist/ui/flip-css.d.ts +0 -2
  490. package/dist/ui/flip-css.d.ts.map +0 -1
  491. package/dist/ui/flip-css.generated.d.ts +0 -2
  492. package/dist/ui/flip-css.generated.d.ts.map +0 -1
  493. package/dist/ui/flip-css.generated.js +0 -4
  494. package/dist/ui/flip-css.generated.js.map +0 -1
  495. package/dist/ui/flip-css.js +0 -4
  496. package/dist/ui/flip-css.js.map +0 -1
  497. package/dist/ui/host-data.d.ts +0 -119
  498. package/dist/ui/host-data.d.ts.map +0 -1
  499. package/dist/ui/host-data.js +0 -122
  500. package/dist/ui/host-data.js.map +0 -1
  501. package/dist/ui/host-toast.d.ts +0 -23
  502. package/dist/ui/host-toast.d.ts.map +0 -1
  503. package/dist/ui/host-toast.js +0 -34
  504. package/dist/ui/host-toast.js.map +0 -1
  505. package/dist/ui/loader-bar-art.d.ts +0 -6
  506. package/dist/ui/loader-bar-art.d.ts.map +0 -1
  507. package/dist/ui/loader-bar-art.js +0 -6
  508. package/dist/ui/loader-bar-art.js.map +0 -1
  509. package/dist/ui/loading-host.d.ts +0 -49
  510. package/dist/ui/loading-host.d.ts.map +0 -1
  511. package/dist/ui/loading-host.js +0 -57
  512. package/dist/ui/loading-host.js.map +0 -1
  513. package/dist/ui/locale.d.ts +0 -4
  514. package/dist/ui/locale.d.ts.map +0 -1
  515. package/dist/ui/locale.js +0 -17
  516. package/dist/ui/locale.js.map +0 -1
  517. package/dist/ui/marquee-css.d.ts +0 -2
  518. package/dist/ui/marquee-css.d.ts.map +0 -1
  519. package/dist/ui/marquee-css.generated.d.ts +0 -2
  520. package/dist/ui/marquee-css.generated.d.ts.map +0 -1
  521. package/dist/ui/marquee-css.generated.js +0 -4
  522. package/dist/ui/marquee-css.generated.js.map +0 -1
  523. package/dist/ui/marquee-css.js +0 -4
  524. package/dist/ui/marquee-css.js.map +0 -1
  525. package/dist/ui/modal-host.d.ts +0 -51
  526. package/dist/ui/modal-host.d.ts.map +0 -1
  527. package/dist/ui/modal-host.js +0 -170
  528. package/dist/ui/modal-host.js.map +0 -1
  529. package/dist/ui/overlay-css.d.ts +0 -2
  530. package/dist/ui/overlay-css.d.ts.map +0 -1
  531. package/dist/ui/overlay-css.generated.d.ts +0 -2
  532. package/dist/ui/overlay-css.generated.d.ts.map +0 -1
  533. package/dist/ui/overlay-css.generated.js +0 -4
  534. package/dist/ui/overlay-css.generated.js.map +0 -1
  535. package/dist/ui/overlay-css.js +0 -2
  536. package/dist/ui/overlay-css.js.map +0 -1
  537. package/dist/ui/overlay.d.ts +0 -62
  538. package/dist/ui/overlay.d.ts.map +0 -1
  539. package/dist/ui/overlay.js +0 -94
  540. package/dist/ui/overlay.js.map +0 -1
  541. package/dist/ui/pagination-logic.d.ts +0 -36
  542. package/dist/ui/pagination-logic.d.ts.map +0 -1
  543. package/dist/ui/pagination-logic.js +0 -73
  544. package/dist/ui/pagination-logic.js.map +0 -1
  545. package/dist/ui/panel-css.d.ts +0 -2
  546. package/dist/ui/panel-css.d.ts.map +0 -1
  547. package/dist/ui/panel-css.generated.d.ts +0 -2
  548. package/dist/ui/panel-css.generated.d.ts.map +0 -1
  549. package/dist/ui/panel-css.generated.js +0 -4
  550. package/dist/ui/panel-css.generated.js.map +0 -1
  551. package/dist/ui/panel-css.js +0 -2
  552. package/dist/ui/panel-css.js.map +0 -1
  553. package/dist/ui/panel-dock-css.d.ts +0 -2
  554. package/dist/ui/panel-dock-css.d.ts.map +0 -1
  555. package/dist/ui/panel-dock-css.generated.d.ts +0 -2
  556. package/dist/ui/panel-dock-css.generated.d.ts.map +0 -1
  557. package/dist/ui/panel-dock-css.generated.js +0 -4
  558. package/dist/ui/panel-dock-css.generated.js.map +0 -1
  559. package/dist/ui/panel-dock-css.js +0 -4
  560. package/dist/ui/panel-dock-css.js.map +0 -1
  561. package/dist/ui/panel-dock-logic.d.ts +0 -67
  562. package/dist/ui/panel-dock-logic.d.ts.map +0 -1
  563. package/dist/ui/panel-dock-logic.js +0 -110
  564. package/dist/ui/panel-dock-logic.js.map +0 -1
  565. package/dist/ui/panel.d.ts +0 -41
  566. package/dist/ui/panel.d.ts.map +0 -1
  567. package/dist/ui/panel.js +0 -37
  568. package/dist/ui/panel.js.map +0 -1
  569. package/dist/ui/picker-css.d.ts +0 -2
  570. package/dist/ui/picker-css.d.ts.map +0 -1
  571. package/dist/ui/picker-css.generated.d.ts +0 -2
  572. package/dist/ui/picker-css.generated.d.ts.map +0 -1
  573. package/dist/ui/picker-css.generated.js +0 -4
  574. package/dist/ui/picker-css.generated.js.map +0 -1
  575. package/dist/ui/picker-css.js +0 -4
  576. package/dist/ui/picker-css.js.map +0 -1
  577. package/dist/ui/picker-icons.d.ts +0 -12
  578. package/dist/ui/picker-icons.d.ts.map +0 -1
  579. package/dist/ui/picker-icons.js +0 -29
  580. package/dist/ui/picker-icons.js.map +0 -1
  581. package/dist/ui/picker-logic.d.ts +0 -33
  582. package/dist/ui/picker-logic.d.ts.map +0 -1
  583. package/dist/ui/picker-logic.js +0 -68
  584. package/dist/ui/picker-logic.js.map +0 -1
  585. package/dist/ui/quick-toolbar-logic.d.ts +0 -76
  586. package/dist/ui/quick-toolbar-logic.d.ts.map +0 -1
  587. package/dist/ui/quick-toolbar-logic.js +0 -40
  588. package/dist/ui/quick-toolbar-logic.js.map +0 -1
  589. package/dist/ui/resizer.d.ts +0 -29
  590. package/dist/ui/resizer.d.ts.map +0 -1
  591. package/dist/ui/resizer.js +0 -42
  592. package/dist/ui/resizer.js.map +0 -1
  593. package/dist/ui/side-panel-css.d.ts +0 -2
  594. package/dist/ui/side-panel-css.d.ts.map +0 -1
  595. package/dist/ui/side-panel-css.generated.d.ts +0 -2
  596. package/dist/ui/side-panel-css.generated.d.ts.map +0 -1
  597. package/dist/ui/side-panel-css.generated.js +0 -4
  598. package/dist/ui/side-panel-css.generated.js.map +0 -1
  599. package/dist/ui/side-panel-css.js +0 -2
  600. package/dist/ui/side-panel-css.js.map +0 -1
  601. package/dist/ui/side-sheet-css.d.ts +0 -2
  602. package/dist/ui/side-sheet-css.d.ts.map +0 -1
  603. package/dist/ui/side-sheet-css.generated.d.ts +0 -2
  604. package/dist/ui/side-sheet-css.generated.d.ts.map +0 -1
  605. package/dist/ui/side-sheet-css.generated.js +0 -4
  606. package/dist/ui/side-sheet-css.generated.js.map +0 -1
  607. package/dist/ui/side-sheet-css.js +0 -2
  608. package/dist/ui/side-sheet-css.js.map +0 -1
  609. package/dist/ui/surface-css.d.ts +0 -2
  610. package/dist/ui/surface-css.d.ts.map +0 -1
  611. package/dist/ui/surface-css.generated.d.ts +0 -2
  612. package/dist/ui/surface-css.generated.d.ts.map +0 -1
  613. package/dist/ui/surface-css.generated.js +0 -4
  614. package/dist/ui/surface-css.generated.js.map +0 -1
  615. package/dist/ui/surface-css.js +0 -7
  616. package/dist/ui/surface-css.js.map +0 -1
  617. package/dist/ui/table-logic.d.ts +0 -110
  618. package/dist/ui/table-logic.d.ts.map +0 -1
  619. package/dist/ui/table-logic.js +0 -81
  620. package/dist/ui/table-logic.js.map +0 -1
  621. package/dist/ui/table-shared.d.ts +0 -101
  622. package/dist/ui/table-shared.d.ts.map +0 -1
  623. package/dist/ui/table-shared.js +0 -229
  624. package/dist/ui/table-shared.js.map +0 -1
  625. package/dist/ui/thenable.d.ts +0 -9
  626. package/dist/ui/thenable.d.ts.map +0 -1
  627. package/dist/ui/thenable.js +0 -15
  628. package/dist/ui/thenable.js.map +0 -1
  629. package/dist/ui/ticker.d.ts +0 -8
  630. package/dist/ui/ticker.d.ts.map +0 -1
  631. package/dist/ui/ticker.js +0 -49
  632. package/dist/ui/ticker.js.map +0 -1
  633. package/dist/ui/toast-host.d.ts +0 -24
  634. package/dist/ui/toast-host.d.ts.map +0 -1
  635. package/dist/ui/toast-host.js +0 -20
  636. package/dist/ui/toast-host.js.map +0 -1
  637. package/dist/ui/tooltip.d.ts +0 -29
  638. package/dist/ui/tooltip.d.ts.map +0 -1
  639. package/dist/ui/tooltip.js +0 -10
  640. package/dist/ui/tooltip.js.map +0 -1
@@ -1,948 +0,0 @@
1
- // 官方对照:packages/client/ui-tool/src/client/tool/(0.1.7-rc.2 lib/client.js)。
2
- // 官方会话里的工具卡 = ui-tool 的 GenericToolCard → ToolRow(chat 包同名文件只是 command 节点兜底,
3
- // 本文件名沿用历史,实际镜像 GenericToolCard + ToolRow 一套)。
4
- // 展开体分发链照官方 ToolRow(lib/client.js:1598-1688):
5
- // TerminalBlock(bash/pwsh/terminal_send,maxLines:∞)→ DiffBlock(write/edit,maxLines:9)
6
- // → ReadBlock(read,maxLines:8 = 头 4 + 尾 4,中间「… 其余 N 行」)
7
- // → SearchBlock(grep/glob,maxLines:8 + 截断 recovery 正文)→ WebBlock(web_search/web_fetch)
8
- // → ToolDetails(goal/schedule 两族)→ 兜底 ioCard 灰框(输入/分隔/输出)。
9
- // ask_user_question 走 AskQuestionCard,插在整条链之前。
10
- // 数据模型照官方 models/*(行号为 lib/client.js):toolRowModel 273、diffCardModel 534、
11
- // readCardModel 421、terminalCardModel 929、parseExitStatus 903、hasSpillNotice 692;
12
- // 摘要与五态同构:state = preparing|running|ok|error|stopped(成功结算但退出码非 0 ⇒ error,1767);
13
- // summary = [generic? 工具名, deriveSummary],终端卡优先 description;error 态摘要 = 输出首行。
14
- import { Fragment, createElement as h, useMemo, useState } from 'react';
15
- import { DiffBlock, DisclosureRow, IconApiOutlineRegular, IconBrowseOutlineRegular, IconCodeOutlineRegular, IconEditOutlineRegular, IconSearchOutlineRegular, IconSparkleRegular, ReadBlock, SearchBlock, TerminalBlock, TextShimmer, WebBlock, diffTotals, } from '../../ui/official.js';
16
- import { officialClass } from '../official-classes.js';
17
- import { CodeViewer } from '../../ui/CodeViewer.js';
18
- import { markdownLabels } from '../../explorer/preview/md-labels.js';
19
- import { AskQuestionCardView, askCardModel } from './AskCard.js';
20
- import { ToolDetailsView, detailsCardModel, detailsSummary } from './ToolDetails.js';
21
- /** 官方 TOOL_VARIANTS(tool client.js:83-100,cordis_* 一并保留)。 */
22
- const TOOL_VARIANTS = {
23
- bash: 'bash',
24
- pwsh: 'bash',
25
- read: 'read',
26
- read_image: 'read',
27
- web_fetch: 'read',
28
- web_search: 'search',
29
- grep: 'search',
30
- glob: 'search',
31
- write: 'write',
32
- edit: 'edit',
33
- run_code: 'code',
34
- cordis_package_inspect: 'read',
35
- cordis_runtime_inspect: 'read',
36
- cordis_run: 'others',
37
- cordis_stop: 'others',
38
- cordis_undefine: 'others',
39
- };
40
- export const classifyTool = (name) => TOOL_VARIANTS[name] ?? 'others';
41
- /** 官方 VARIANT_TITLE_KEYS + TOOL_TITLE_KEYS(tool client.js:65-149;本仓库键名前缀 toolTitle)。 */
42
- const VARIANT_TITLE_KEYS = {
43
- search: 'toolTitleSearch',
44
- read: 'toolTitleRead',
45
- bash: 'toolTitleBash',
46
- write: 'toolTitleWrite',
47
- edit: 'toolTitleEdit',
48
- code: 'toolTitleCode',
49
- others: 'toolTitleGeneric',
50
- };
51
- const TOOL_TITLE_KEYS = {
52
- pwsh: 'toolTitlePwsh',
53
- read_image: 'toolTitleReadImage',
54
- grep: 'toolTitleGrep',
55
- glob: 'toolTitleGlob',
56
- web_search: 'toolTitleWebSearch',
57
- web_fetch: 'toolTitleWebFetch',
58
- todo_write: 'toolTitleTodo',
59
- ask_user_question: 'toolTitleAsk',
60
- cordis_package_inspect: 'toolTitleInspect',
61
- cordis_runtime_inspect: 'toolTitleInspect',
62
- cordis_run: 'toolTitleRunCordis',
63
- cordis_stop: 'toolTitleStopCordis',
64
- cordis_undefine: 'toolTitleRemoveCordis',
65
- cordis_inspect_list: 'toolTitleInspectProviders',
66
- cordis_inspect_query: 'toolTitleQueryRuntime',
67
- cordis_inspect_self: 'toolTitleInspectPlugins',
68
- create_goal: 'toolTitleCreateGoal',
69
- get_goal: 'toolTitleGetGoal',
70
- update_goal: 'toolTitleUpdateGoal',
71
- schedule_create: 'toolTitleCreateSchedule',
72
- schedule_list: 'toolTitleListSchedules',
73
- schedule_delete: 'toolTitleDeleteSchedule',
74
- schedule_update: 'toolTitleUpdateSchedule',
75
- workflow: 'toolTitleWorkflow',
76
- ralph: 'toolTitleRalph',
77
- session_event_read: 'toolTitleReadEvent',
78
- session_event_search: 'toolTitleSearchEvents',
79
- session_event_trace: 'toolTitleTraceEvent',
80
- session_search: 'toolTitleSearchSessions',
81
- session_trace: 'toolTitleTraceSession',
82
- list_subagent_models: 'toolTitleListModels',
83
- subagent: 'toolTitleSubagent',
84
- list_agents: 'toolTitleListAgents',
85
- send_message: 'toolTitleSendMessage',
86
- interrupt_agent: 'toolTitleInterruptAgent',
87
- job_list: 'toolTitleListJobs',
88
- job_output: 'toolTitleReadJob',
89
- job_kill: 'toolTitleKillJob',
90
- terminal_open: 'toolTitleOpenTerminal',
91
- terminal_read: 'toolTitleReadTerminal',
92
- terminal_list: 'toolTitleListTerminals',
93
- terminal_signal: 'toolTitleSignalTerminal',
94
- terminal_close: 'toolTitleCloseTerminal',
95
- lsp: 'toolTitleLsp',
96
- spawn_teammate: 'toolTitleSpawnTeammate',
97
- team_task_create: 'toolTitleCreateTeamTask',
98
- team_task_get: 'toolTitleGetTeamTask',
99
- team_task_update: 'toolTitleUpdateTeamTask',
100
- team_task_list: 'toolTitleListTeamTasks',
101
- wait_agent: 'toolTitleWaitAgent',
102
- };
103
- export const toolTitleKey = (name) => TOOL_TITLE_KEYS[name] ?? VARIANT_TITLE_KEYS[classifyTool(name)];
104
- /** 官方 VARIANT_ICONS(tool client.js:1749-1757,size 14)。 */
105
- const VARIANT_ICONS = {
106
- search: h(IconSearchOutlineRegular, { size: 14 }),
107
- read: h(IconBrowseOutlineRegular, { size: 14 }),
108
- bash: h(IconApiOutlineRegular, { size: 14 }),
109
- write: h(IconEditOutlineRegular, { size: 14 }),
110
- edit: h(IconEditOutlineRegular, { size: 14 }),
111
- code: h(IconCodeOutlineRegular, { size: 14 }),
112
- others: h(IconSparkleRegular, { size: 14 }),
113
- };
114
- /** 官方 SUMMARY_KEYS(tool client.js:204-220):摘要取参键偏好。 */
115
- const SUMMARY_KEYS = {
116
- bash: ['description', 'command'],
117
- read: ['path', 'file_path', 'url'],
118
- search: ['query', 'pattern', 'url'],
119
- write: ['path', 'file_path'],
120
- edit: ['path', 'file_path'],
121
- code: ['description'],
122
- others: [],
123
- };
124
- /** 官方 FILE_PATH_VARIANTS(tool client.js:237-241):摘要可开预览的文件型变体。 */
125
- const FILE_PATH_VARIANTS = new Set(['read', 'write', 'edit']);
126
- const firstLine = (text) => {
127
- const nl = text.indexOf('\n');
128
- return nl === -1 ? text : text.slice(0, nl);
129
- };
130
- /** 官方 parseArgs(tool client.js:186-192)。 */
131
- const parseArgs = (raw) => {
132
- try {
133
- return JSON.parse(raw);
134
- }
135
- catch {
136
- return undefined;
137
- }
138
- };
139
- const pickString = (args, keys) => {
140
- for (const key of keys) {
141
- const value = args[key];
142
- if (typeof value === 'string' && value !== '')
143
- return value;
144
- }
145
- return undefined;
146
- };
147
- /** 官方 deriveSummary(tool client.js:221-233)。 */
148
- export function deriveSummary(variant, argsRaw) {
149
- const parsed = parseArgs(argsRaw);
150
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
151
- return firstLine(argsRaw);
152
- const args = parsed;
153
- if (variant === 'search' && Array.isArray(args.queries)) {
154
- const queries = args.queries.filter((query) => typeof query === 'string' && query !== '');
155
- if (queries.length > 0)
156
- return queries.map(firstLine).join(', ');
157
- }
158
- const picked = pickString(args, SUMMARY_KEYS[variant]);
159
- if (picked !== undefined)
160
- return firstLine(picked);
161
- for (const value of Object.values(args))
162
- if (typeof value === 'string' && value !== '')
163
- return firstLine(value);
164
- return firstLine(argsRaw);
165
- }
166
- /** 官方 deriveFilePath(tool client.js:242-248):read/write/edit 的路径取参。 */
167
- function deriveFilePath(variant, argsRaw) {
168
- if (!FILE_PATH_VARIANTS.has(variant))
169
- return undefined;
170
- const parsed = parseArgs(argsRaw);
171
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
172
- return undefined;
173
- const picked = pickString(parsed, ['path', 'file_path']);
174
- return picked === undefined ? undefined : firstLine(picked);
175
- }
176
- /** 官方 readCallLine(tool client.js:432-436):read 的 offset(1 起)就是落点行,参数非法则无行。 */
177
- export function readCallLine(name, argsRaw) {
178
- if (name !== 'read')
179
- return undefined;
180
- const parsed = parseArgs(argsRaw);
181
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
182
- return undefined;
183
- const { file_path, offset, limit } = parsed;
184
- if (typeof file_path !== 'string' || file_path.trim() === '')
185
- return undefined;
186
- if (offset !== undefined && !positiveInteger(offset))
187
- return undefined;
188
- if (limit !== undefined && !positiveInteger(limit))
189
- return undefined;
190
- return positiveInteger(offset) ? offset : undefined;
191
- }
192
- /** 官方 formatToolBody(tool client.js:255-264):通用展开体的输入正文。 */
193
- export function formatToolBody(variant, argsRaw) {
194
- if (argsRaw === '')
195
- return null;
196
- const parsed = parseArgs(argsRaw);
197
- if (parsed === undefined)
198
- return argsRaw;
199
- if (variant === 'code' && typeof parsed === 'object' && parsed !== null) {
200
- const code = parsed.code;
201
- if (typeof code === 'string' && code !== '')
202
- return code;
203
- }
204
- return JSON.stringify(parsed, null, 2);
205
- }
206
- /** 官方 validEscalationFields(tool client.js:347-353)。 */
207
- function validEscalationFields(args) {
208
- const permission = args.sandbox_permissions;
209
- const justification = args.justification;
210
- if (permission === undefined && justification === undefined)
211
- return true;
212
- if (permission !== 'workspace-write' && permission !== 'danger-full-access')
213
- return false;
214
- return typeof justification === 'string' && justification.trim() !== '';
215
- }
216
- /** 官方 intendedDiff(tool client.js:460-517):write/edit/str_replace_editor 的参数侧意图 diff。 */
217
- function intendedDiff(name, argsRaw) {
218
- const parsed = parseArgs(argsRaw);
219
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
220
- return null;
221
- const args = parsed;
222
- if (name === 'str_replace_editor') {
223
- const { command, path, file_text: fileText, old_str: oldText, new_str: newText } = args;
224
- if (typeof path !== 'string' || path.trim() === '')
225
- return null;
226
- if (command === 'create') {
227
- if (fileText !== undefined && typeof fileText !== 'string')
228
- return null;
229
- return { tool: name, diff: { path, oldText: null, newText: typeof fileText === 'string' ? fileText : '' } };
230
- }
231
- if (command === 'str_replace') {
232
- if (oldText !== undefined && typeof oldText !== 'string')
233
- return null;
234
- if (newText !== undefined && typeof newText !== 'string')
235
- return null;
236
- return { tool: name, diff: { path, oldText: typeof oldText === 'string' ? oldText : null, newText: typeof newText === 'string' ? newText : '' } };
237
- }
238
- return null;
239
- }
240
- const { file_path: path } = args;
241
- if (typeof path !== 'string' || path.trim() === '')
242
- return null;
243
- if (!validEscalationFields(args))
244
- return null;
245
- if (name === 'write') {
246
- const { content } = args;
247
- return typeof content === 'string' ? { tool: name, diff: { path, oldText: null, newText: content } } : null;
248
- }
249
- if (name !== 'edit')
250
- return null;
251
- const { old_string: oldText, new_string: newText, replace_all: replaceAll } = args;
252
- if (typeof oldText !== 'string' || typeof newText !== 'string')
253
- return null;
254
- if (replaceAll !== undefined && typeof replaceAll !== 'boolean')
255
- return null;
256
- return { tool: name, diff: { path, oldText: oldText || null, newText } };
257
- }
258
- /** 官方 narrowDiffs(tool client.js:443-459)。 */
259
- function narrowDiffs(diffs) {
260
- if (!Array.isArray(diffs) || diffs.length === 0)
261
- return null;
262
- const out = [];
263
- for (const hunk of diffs) {
264
- if (typeof hunk !== 'object' || hunk === null || Array.isArray(hunk))
265
- return null;
266
- const { path, oldText, newText } = hunk;
267
- if (typeof path !== 'string')
268
- return null;
269
- if (oldText !== null && typeof oldText !== 'string')
270
- return null;
271
- if (typeof newText !== 'string')
272
- return null;
273
- out.push({ path, oldText, newText });
274
- }
275
- return out;
276
- }
277
- /** 官方 appliedDiffs(tool client.js:518-524)。 */
278
- function appliedDiffs(meta) {
279
- if (typeof meta !== 'object' || meta === null || Array.isArray(meta))
280
- return null;
281
- const diffs = meta.diffs;
282
- if (!Array.isArray(diffs))
283
- return null;
284
- if (diffs.length === 0)
285
- return 'empty';
286
- return narrowDiffs(diffs);
287
- }
288
- /** 官方 diffCardModel(tool client.js:534-544;keyed 流里只有根调用,parentCallId 分支略)。 */
289
- function diffCardModel(name, argsRaw, meta, isError, settled) {
290
- const intended = intendedDiff(name, argsRaw);
291
- if (intended === null)
292
- return null;
293
- if (!settled)
294
- return [intended.diff];
295
- if (name === 'str_replace_editor')
296
- return null;
297
- if (isError)
298
- return null;
299
- const applied = appliedDiffs(meta);
300
- if (applied === null || applied === 'empty')
301
- return name === 'write' ? [intended.diff] : null;
302
- return applied;
303
- }
304
- const positiveInteger = (value) => typeof value === 'number' && Number.isInteger(value) && value >= 1;
305
- /** 官方 readMeta(tool client.js:369-395):宿主写入的读取窗口 meta 收窄。 */
306
- function readMeta(meta) {
307
- if (typeof meta !== 'object' || meta === null || Array.isArray(meta))
308
- return null;
309
- const { path, offset, lines, totalLines, lang } = meta;
310
- if (typeof path !== 'string' || typeof offset !== 'number' || !Number.isInteger(offset) || offset < 1)
311
- return null;
312
- if (typeof totalLines !== 'number' || !Number.isInteger(totalLines) || totalLines < 0 || !Array.isArray(lines))
313
- return null;
314
- if (lang !== undefined && typeof lang !== 'string')
315
- return null;
316
- const narrowed = [];
317
- let previous = offset - 1;
318
- for (const line of lines) {
319
- if (typeof line !== 'object' || line === null || Array.isArray(line))
320
- return null;
321
- const { number, text } = line;
322
- if (typeof number !== 'number' || !Number.isInteger(number) || number < 1 || number <= previous)
323
- return null;
324
- if (number > totalLines || typeof text !== 'string')
325
- return null;
326
- previous = number;
327
- narrowed.push({ number, text });
328
- }
329
- return { label: path, lines: narrowed, totalLines: totalLines, ...(lang === undefined ? {} : { lang }) };
330
- }
331
- /** 官方 readCardModel(tool client.js:421-435):read + 合法参数 + meta + 结果 envelope。 */
332
- function readCardModel(name, argsRaw, output, meta, isError, settled) {
333
- if (!settled || isError || name !== 'read')
334
- return null;
335
- const parsed = parseArgs(argsRaw);
336
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
337
- return null;
338
- const { file_path: path, offset, limit } = parsed;
339
- if (typeof path !== 'string' || path.trim() === '')
340
- return null;
341
- if (offset !== undefined && !positiveInteger(offset))
342
- return null;
343
- if (limit !== undefined && !positiveInteger(limit))
344
- return null;
345
- const face = readMeta(meta);
346
- if (face === null)
347
- return null;
348
- // 官方结果 envelope(read 工具输出格式)不匹配 ⇒ 走 generic。
349
- if (/^<path>[^\n]*<\/path>\n<type>file<\/type>\n<content>\n([\s\S]*)\n<\/content>$/u.exec(output)?.[1] === undefined)
350
- return null;
351
- return face;
352
- }
353
- /** 官方 validInclude(tool client.js:590-597):逗号分隔的多 pattern include 不收。 */
354
- function validInclude(include) {
355
- if (include.trim() === '' || include.startsWith('!'))
356
- return false;
357
- let braceDepth = 0;
358
- for (const character of include) {
359
- if (character === '{')
360
- braceDepth += 1;
361
- else if (character === '}')
362
- braceDepth = Math.max(0, braceDepth - 1);
363
- else if (character === ',' && braceDepth === 0)
364
- return false;
365
- }
366
- return true;
367
- }
368
- /** 官方 validSearchCall(tool client.js:575-589)。 */
369
- function validSearchCall(name, argsRaw) {
370
- if (name !== 'grep' && name !== 'glob')
371
- return null;
372
- const parsed = parseArgs(argsRaw);
373
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
374
- return null;
375
- const { pattern, path, include } = parsed;
376
- if (typeof pattern !== 'string')
377
- return null;
378
- if (name === 'grep' && pattern === '')
379
- return null;
380
- if (name === 'glob' && pattern.trim() === '')
381
- return null;
382
- if (path !== undefined && (typeof path !== 'string' || path.trim() === ''))
383
- return null;
384
- if (name === 'grep' && include !== undefined && (typeof include !== 'string' || !validInclude(include)))
385
- return null;
386
- return name;
387
- }
388
- /** 官方 searchFiles(tool client.js:598-622):meta.files 收窄。 */
389
- function searchFiles(value) {
390
- if (!Array.isArray(value))
391
- return null;
392
- const files = [];
393
- for (const file of value) {
394
- if (typeof file !== 'object' || file === null || Array.isArray(file))
395
- return null;
396
- const { path, matches } = file;
397
- if (typeof path !== 'string' || !Array.isArray(matches))
398
- return null;
399
- const narrowed = [];
400
- for (const match of matches) {
401
- if (typeof match !== 'object' || match === null || Array.isArray(match))
402
- return null;
403
- const { lineNumber, line } = match;
404
- if (typeof lineNumber !== 'number' || !Number.isInteger(lineNumber) || lineNumber < 1)
405
- return null;
406
- if (typeof line !== 'string')
407
- return null;
408
- narrowed.push({ lineNumber, line });
409
- }
410
- files.push({ path, matches: narrowed });
411
- }
412
- return files;
413
- }
414
- /**
415
- * 官方 searchCardModel(tool client.js:632-667):结算成功 + meta.{truncated,total} 齐全才出卡,
416
- * 否则落回 ioCard 兜底(与官方 generic 路径一致)。
417
- */
418
- export function searchCardModel(name, argsRaw, output, meta, isError, settled) {
419
- if (!settled || isError)
420
- return null;
421
- const tool = validSearchCall(name, argsRaw);
422
- if (tool === null)
423
- return null;
424
- if (typeof meta !== 'object' || meta === null || Array.isArray(meta))
425
- return null;
426
- const m = meta;
427
- if (typeof m.truncated !== 'boolean')
428
- return null;
429
- if (typeof m.total !== 'number' || !Number.isInteger(m.total) || m.total < 0)
430
- return null;
431
- const common = { total: m.total, truncated: m.truncated };
432
- // 官方 recovery = flattenContent(block.content):截断时把完整正文摊在卡下方。
433
- const recovery = m.truncated && output !== '' ? output : undefined;
434
- if (tool === 'grep') {
435
- if (m.shape !== 'matches')
436
- return null;
437
- const files = searchFiles(m.files);
438
- return files === null ? null : { card: { kind: 'matches', files, ...common }, ...(recovery === undefined ? {} : { recovery }) };
439
- }
440
- if (m.shape !== 'paths' || !Array.isArray(m.paths))
441
- return null;
442
- if (!m.paths.every(path => typeof path === 'string'))
443
- return null;
444
- return { card: { kind: 'paths', paths: [...m.paths], ...common }, ...(recovery === undefined ? {} : { recovery }) };
445
- }
446
- /** 官方 validWebCall(tool client.js:1024-1045)。 */
447
- function validWebCall(name, argsRaw) {
448
- if (name !== 'web_search' && name !== 'web_fetch')
449
- return null;
450
- const parsed = parseArgs(argsRaw);
451
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
452
- return null;
453
- const args = parsed;
454
- if (name === 'web_search') {
455
- const { queries } = args;
456
- if (!Array.isArray(queries) || queries.length === 0)
457
- return null;
458
- return queries.every(query => typeof query === 'string' && query.trim() !== '') ? name : null;
459
- }
460
- const { url } = args;
461
- return typeof url === 'string' && url.trim() !== '' ? name : null;
462
- }
463
- /** 官方 webSources(tool client.js:1046-1064):meta.sources 收窄(可选字段缺省即不带)。 */
464
- function webSources(value) {
465
- if (!Array.isArray(value))
466
- return null;
467
- const sources = [];
468
- for (const source of value) {
469
- if (typeof source !== 'object' || source === null || Array.isArray(source))
470
- return null;
471
- const { url, title, snippet, publishedAt } = source;
472
- if (typeof url !== 'string')
473
- return null;
474
- if (title !== undefined && typeof title !== 'string')
475
- return null;
476
- if (snippet !== undefined && typeof snippet !== 'string')
477
- return null;
478
- if (publishedAt !== undefined && typeof publishedAt !== 'string')
479
- return null;
480
- sources.push({
481
- url,
482
- ...(title === undefined ? {} : { title }),
483
- ...(snippet === undefined ? {} : { snippet }),
484
- ...(publishedAt === undefined ? {} : { publishedAt }),
485
- });
486
- }
487
- return sources;
488
- }
489
- /** 官方 webCardModel(tool client.js:1070-1094)。 */
490
- export function webCardModel(name, argsRaw, meta, isError, settled) {
491
- if (!settled || isError)
492
- return null;
493
- const tool = validWebCall(name, argsRaw);
494
- if (tool === null || typeof meta !== 'object' || meta === null || Array.isArray(meta))
495
- return null;
496
- const m = meta;
497
- if (typeof m.truncated !== 'boolean')
498
- return null;
499
- if (tool === 'web_search') {
500
- const sources = webSources(m.sources);
501
- if (sources === null || (m.answer !== undefined && typeof m.answer !== 'string'))
502
- return null;
503
- return { kind: 'search', ...(typeof m.answer === 'string' ? { answer: m.answer } : {}), sources, truncated: m.truncated };
504
- }
505
- if (typeof m.url !== 'string')
506
- return null;
507
- if (typeof m.statusCode !== 'number' || !Number.isInteger(m.statusCode))
508
- return null;
509
- return { kind: 'fetch', url: m.url, statusCode: m.statusCode, truncated: m.truncated };
510
- }
511
- /** 官方 shellCall(tool client.js:831-855):无 description = persistent(结算走 generic)。 */
512
- export function shellCall(name, args) {
513
- if (name !== 'bash' && name !== 'pwsh')
514
- return null;
515
- const { command, description, timeoutMs, workdir, run_in_background: background } = args;
516
- if (typeof command !== 'string' || command.trim() === '')
517
- return null;
518
- if (timeoutMs !== undefined && (typeof timeoutMs !== 'number' || !Number.isFinite(timeoutMs) || timeoutMs <= 0))
519
- return null;
520
- if (workdir !== undefined && typeof workdir !== 'string')
521
- return null;
522
- if (background !== undefined && typeof background !== 'boolean')
523
- return null;
524
- if (!validEscalationFields(args))
525
- return null;
526
- if (description === undefined)
527
- return { command, description: '', workdir: undefined, persistent: true, background: false };
528
- if (typeof description !== 'string' || description.trim() === '')
529
- return null;
530
- return { command, description, workdir, persistent: false, background: background === true };
531
- }
532
- /** 官方 terminalSendCall(tool client.js:884-896)。 */
533
- function terminalSendCall(name, args) {
534
- if (name !== 'terminal_send')
535
- return null;
536
- const { sessionId, text, run_in_background: background } = args;
537
- if (typeof sessionId !== 'string' || sessionId === '' || typeof text !== 'string')
538
- return null;
539
- if (background !== undefined && typeof background !== 'boolean')
540
- return null;
541
- return { text, sessionId, background: background === true };
542
- }
543
- /** 官方 parseExitStatus(tool client.js:903-918):结果尾部退出码 / 信号标记剥离。 */
544
- function parseExitStatus(text) {
545
- const signal = /\n\[killed by signal: ([^\]\n]+)\]$/.exec(text);
546
- if (signal?.[1] !== undefined)
547
- return { output: text.slice(0, signal.index), signal: signal[1] };
548
- const exit = /\n\[exit code: (\d+)\]$/.exec(text);
549
- if (exit?.[1] !== undefined)
550
- return { output: text.slice(0, exit.index), exitCode: Number(exit[1]) };
551
- return { output: text, exitCode: 0 };
552
- }
553
- /**
554
- * 官方 spill notice 识别(spill-policy notice.ts,tool client.js:660-703):
555
- * 结尾 `)` + 「\n\n( Full formatted result stored at: 」段。超长输出被 spill 化的
556
- * bash 结果走 generic(官方 isSpilledShellCall 同向;此处放宽为字面匹配,宁滥勿漏)。
557
- */
558
- export function hasSpillNotice(text) {
559
- if (!text.endsWith(')'))
560
- return false;
561
- return text.includes('\n\n( Full formatted result stored at: ');
562
- }
563
- /** 官方 resolveTerminalCwd + normalizeSegments(tool client.js:776-798)的显示用简化版:
564
- * 弹窗侧拿不到会话 cwd ⇒ 绝对路径原样、相对路径弹出 `.`/`..` 段。 */
565
- function normalizeSegments(path) {
566
- if (!/(?:^|[/\\])\.\.?(?:[/\\]|$)/.test(path))
567
- return path;
568
- const out = [];
569
- for (const segment of path.split(/[/\\]+/)) {
570
- if (segment === '' || segment === '.')
571
- continue;
572
- if (segment === '..') {
573
- out.pop();
574
- continue;
575
- }
576
- out.push(segment);
577
- }
578
- return out.join('/');
579
- }
580
- /** 官方 terminalCardModel(tool client.js:929-968):running 半截返回 running 卡。 */
581
- export function terminalCardModel(name, argsRaw, output, isError, settled) {
582
- const parsed = parseArgs(argsRaw);
583
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
584
- return null;
585
- const args = parsed;
586
- const shell = shellCall(name, args);
587
- const send = shell === null ? terminalSendCall(name, args) : null;
588
- if (shell === null && send === null)
589
- return null;
590
- if (shell?.background || send?.background)
591
- return null;
592
- if (!settled) {
593
- return shell !== null
594
- ? { command: shell.command, cwd: shell.workdir === undefined ? undefined : normalizeSegments(shell.workdir), running: true }
595
- : { command: send.text, running: true, sessionId: send.sessionId };
596
- }
597
- if (isError || shell?.persistent || hasSpillNotice(output))
598
- return null;
599
- if (send !== null)
600
- return { command: send.text, running: false, sessionId: send.sessionId };
601
- const shellCmd = shell;
602
- const status = parseExitStatus(output);
603
- return {
604
- command: shellCmd.command,
605
- cwd: shellCmd.workdir === undefined ? undefined : normalizeSegments(shellCmd.workdir),
606
- output: status.output,
607
- exitCode: status.exitCode,
608
- signal: status.signal,
609
- running: false,
610
- };
611
- }
612
- /** 官方 contentKilobytes(tool client.js:2632-2645)静态参数版:content/old_string/new_string 字符数 / 1024。
613
- * shortcut: 官方按流式 stringLength 增量算,弹窗只有 argsRaw 全量串 ⇒ 按已到字段总长估算。 */
614
- function contentKilobytes(argsRaw) {
615
- const parsed = parseArgs(argsRaw);
616
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
617
- return null;
618
- const args = parsed;
619
- let chars = 0;
620
- let any = false;
621
- for (const key of ['content', 'old_string', 'new_string']) {
622
- const value = args[key];
623
- if (typeof value === 'string') {
624
- any = true;
625
- chars += value.length;
626
- }
627
- }
628
- return any ? Math.ceil(chars / 1024) : null;
629
- }
630
- /** 官方 todo 行摘要(tool client.js:4480-4503):done/total + 首个 in_progress 内容,
631
- * 多条并行 in_progress ⇒ 额外条数走 summarySuffix「+N」。 */
632
- function todoSummary(argsRaw, t) {
633
- if (argsRaw === '')
634
- return null;
635
- let parsed;
636
- try {
637
- parsed = JSON.parse(argsRaw);
638
- }
639
- catch {
640
- return null;
641
- }
642
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
643
- return null;
644
- const todos = parsed.todos;
645
- if (!Array.isArray(todos) || !todos.every(item => typeof item === 'object' && item !== null))
646
- return null;
647
- const list = todos;
648
- const done = list.filter(item => item.status === 'completed').length;
649
- const active = list.filter(item => item.status === 'in_progress');
650
- const first = active[0]?.content;
651
- const named = typeof first === 'string' && first.trim() !== '';
652
- const head = t('todoCompleted', { done, total: list.length });
653
- return { text: named ? `${head} · ${first}` : head, extra: named ? active.length - 1 : 0 };
654
- }
655
- /** 词典:代码工具栏(官方 codeToolbarLabels,tool client.js:1098-1104)。 */
656
- const codeToolbarLabels = (t) => ({
657
- codeLabel: t('codeBlockLabel'),
658
- wrapLabel: t('diffWrapLabel'),
659
- unwrapLabel: t('diffUnwrapLabel'),
660
- });
661
- /** 官方 diffBlockLabels(tool client.js:1125-1135)。 */
662
- const diffLabels = (t) => ({
663
- ...codeToolbarLabels(t),
664
- copy: t('copyLabel'),
665
- copied: t('copiedLabel'),
666
- collapseAria: t('diffCollapseAria'),
667
- expandAria: (count) => t('diffExpandAria', { count }),
668
- collapse: t('collapseLabel'),
669
- expand: (count) => t('diffExpandRest', { count }),
670
- });
671
- /** 官方 readBlockLabels(tool client.js:1141-1155)。 */
672
- const readLabels = (t) => ({
673
- ...codeToolbarLabels(t),
674
- window: (shown, total) => t('readWindow', { shown, total }),
675
- copy: t('copyLabel'),
676
- copied: t('copiedLabel'),
677
- collapseAria: t('readCollapseAria'),
678
- expandAria: (count) => t('readExpandAria', { count }),
679
- collapse: t('collapseLabel'),
680
- expand: (count) => t('readExpandRest', { count }),
681
- });
682
- /** 官方 searchBlockLabels(tool client.js:1222-1240)。 */
683
- const searchLabels = (t) => ({
684
- pathsSummary: (shown, total, truncated) => truncated
685
- ? t('searchPathsTruncated', { shown, total })
686
- : t('searchPaths', { shown }),
687
- matchesSummary: (shown, total, files, truncated) => truncated
688
- ? t('searchMatchesTruncated', { shown, total, files })
689
- : t('searchMatches', { shown, files }),
690
- copy: t('copyLabel'),
691
- copied: t('copiedLabel'),
692
- noResults: t('searchNoResults'),
693
- collapseAria: t('searchCollapseAria'),
694
- expandAria: (count) => t('searchExpandAria', { count }),
695
- collapse: t('collapseLabel'),
696
- expand: (count) => t('searchExpandRest', { count }),
697
- });
698
- /** 官方 webBlockLabels(tool client.js:1247-1255);markdown 复用 core 的 MarkdownText 文案。 */
699
- const webLabels = (t) => ({
700
- noResults: t('webNoResults'),
701
- sourcesTruncated: t('webSourcesTruncated'),
702
- http: t('webHttp'),
703
- contentTruncated: t('webContentTruncated'),
704
- markdown: markdownLabels(),
705
- });
706
- /** 官方 terminalBlockLabels(tool client.js:708-737 的键面)。 */
707
- export const terminalLabels = (t) => ({
708
- // 官方 terminalBlockLabels(ui-tool terminal-card-model.ts):commandLine 是**函数**,
709
- // TerminalBlock 会调它给输出行编号。缺它就抛 `w.commandLine is not a function`(真机 2026-10-23 崩溃)。
710
- commandLine: (line) => t('terminalCommandLine', { n: line }),
711
- signal: (signal) => t('terminalSignal', { signal }),
712
- exitCode: (code) => t('terminalExitCode', { code }),
713
- noExitCode: t('terminalNoExitCode'),
714
- running: t('terminalRunning'),
715
- failed: t('terminalFailed'),
716
- done: t('terminalDone'),
717
- copy: t('copyLabel'),
718
- copied: t('copiedLabel'),
719
- noOutput: t('terminalNoOutput'),
720
- collapseAria: t('terminalCollapseAria'),
721
- collapse: t('collapseLabel'),
722
- expandAria: (hidden) => t('terminalExpandAria', { n: hidden }),
723
- expand: (hidden) => t('terminalExpandRest', { n: hidden }),
724
- });
725
- /** 摘要链接(官方 fileLink):点击只跟随、不折叠行。 */
726
- const stopLinkClick = (event) => { event.stopPropagation(); };
727
- /** 官方 summaryLinkKeyDown:Enter/空格不触发行折叠(链接自身仍可达)。 */
728
- const summaryLinkKeyDown = (event) => {
729
- if (event.key === 'Enter' || event.key === ' ')
730
- event.stopPropagation();
731
- };
732
- /** 官方 ExitCodeBadge(tool client.js:1517-1522):中性胶囊 + 失败点 + 本地化退出状态。 */
733
- export function ExitCodeBadge({ label }) {
734
- return h('span', { className: officialClass('ExitCodeBadge', 'badge') ?? '' }, h('span', { className: officialClass('ExitCodeBadge', 'dot') ?? '', 'aria-hidden': true }), label);
735
- }
736
- /**
737
- * 工具调用 / 命令卡(官方 GenericToolCard + ToolRow 镜像)。
738
- * 折叠行 = 图标 + 标题 [+ 分隔点 + 摘要(文件路径链接化)+ 后缀];展开体按官方分发链。
739
- */
740
- export function GenericCommandCard(props) {
741
- const { name, argsRaw, output, isError, meta, settled = true, phase, interrupted, errorCode, onOpenFile, t } = props;
742
- const [expanded, setExpanded] = useState(false);
743
- const variant = classifyTool(name);
744
- const titleKey = toolTitleKey(name);
745
- const state = !settled
746
- ? (phase === 'preparing' ? 'preparing' : 'running')
747
- : interrupted ? 'stopped' : isError ? 'error' : 'ok';
748
- const terminalFace = useMemo(() => terminalCardModel(name, argsRaw, output, isError, settled), [name, argsRaw, output, isError, settled]);
749
- const read = useMemo(() => readCardModel(name, argsRaw, output, meta, isError, settled), [name, argsRaw, output, meta, isError, settled]);
750
- const diffs = useMemo(() => diffCardModel(name, argsRaw, meta, isError, settled), [name, argsRaw, meta, isError, settled]);
751
- const search = useMemo(() => searchCardModel(name, argsRaw, output, meta, isError, settled), [name, argsRaw, output, meta, isError, settled]);
752
- const web = useMemo(() => webCardModel(name, argsRaw, meta, isError, settled), [name, argsRaw, meta, isError, settled]);
753
- const ask = useMemo(() => askCardModel(name, argsRaw, output, errorCode, settled, t), [name, argsRaw, output, errorCode, settled, t]);
754
- const details = useMemo(() => detailsCardModel(name, argsRaw, output, settled, isError, t), [name, argsRaw, output, settled, isError, t]);
755
- // 终端卡展开体(官方 localizeTerminalCardModel:send 命令空 = (发送输入),描述 = 终端 {sessionId})。
756
- const terminal = useMemo(() => {
757
- if (terminalFace === null)
758
- return null;
759
- return terminalFace.sessionId !== undefined
760
- ? { ...terminalFace, command: terminalFace.command === '' ? t('terminalSendInput') : terminalFace.command, description: t('terminalSession', { sessionId: terminalFace.sessionId }) }
761
- : terminalFace;
762
- }, [terminalFace, t]);
763
- // 官方 terminalFailed(tool client.js:763-766):成功结算但退出码非 0 / 有信号 ⇒ 整行 error。
764
- const failedTerminal = terminal !== null && terminal.running !== true
765
- && ((terminal.exitCode !== undefined && terminal.exitCode !== 0) || terminal.signal !== undefined);
766
- // 官方 AskQuestionRow 强制态(2298-2316):取消 ⇒ ok、中断 ⇒ stopped,优先于 error。
767
- const rowState = ask?.state ?? (state === 'ok' && failedTerminal ? 'error' : state);
768
- const running = rowState === 'running' || rowState === 'preparing';
769
- // 摘要(官方 toolRowModel 273-295 + ToolRow 1527-1528):generic 标题补工具名;
770
- // 终端卡优先 description;error 态摘要 = 输出首行。
771
- const generic = titleKey === 'toolTitleGeneric';
772
- const base = argsRaw === '' ? '' : deriveSummary(variant, argsRaw);
773
- const plainSummary = [generic ? name : '', base].filter(Boolean).join(' · ');
774
- const todoInfo = name === 'todo_write' ? todoSummary(argsRaw, t) : null;
775
- const detailsText = details === null ? undefined : detailsSummary(details);
776
- const normalSummary = ask !== null ? ask.summary : detailsText ?? (todoInfo !== null ? todoInfo.text : terminal?.description ?? plainSummary);
777
- const errorSummary = rowState === 'error' && output !== '' ? firstLine(output) : null;
778
- // 官方 terminalExitLabel(tool client.js:801-809):已失败前台命令才出退出码徽章。
779
- const exitLabel = failedTerminal
780
- ? terminal?.signal !== undefined
781
- ? t('terminalSignal', { signal: terminal.signal })
782
- : terminal?.exitCode === undefined || terminal.exitCode === null
783
- ? t('terminalNoExitCode')
784
- : t('terminalExitCode', { code: terminal.exitCode })
785
- : null;
786
- const summaryText = (rowState === 'error' && exitLabel === null ? errorSummary ?? normalSummary : null) ?? normalSummary;
787
- // 官方 ToolRow 两个独立后缀槽(1600-1602):summarySuffix(edit/write 内容 KB)与 diffStat(+N -M)。
788
- const totals = diffs === null ? null : diffTotals(diffs);
789
- const settledWithCue = rowState === 'error' || rowState === 'stopped';
790
- const kilobytes = variant === 'edit' || variant === 'write' ? contentKilobytes(argsRaw) : null;
791
- const summarySuffix = settledWithCue
792
- ? null
793
- : todoInfo !== null
794
- ? (todoInfo.extra > 0 ? `+${todoInfo.extra}` : null)
795
- : (kilobytes === null || summaryText === '' ? null : t('toolPreparingContent', { kilobytes }));
796
- const diffStatTotals = settledWithCue ? null : totals;
797
- // 官方 fileLink(1536-1545):read/write/edit 摘要路径 + onOpenFile + 非 error/stopped ⇒ 链接钮。
798
- const filePath = argsRaw === '' ? undefined : deriveFilePath(variant, argsRaw);
799
- // 官方 readCallLine(tool client.js:432-436):read 的 offset 就是落点行,链接可带过去。
800
- const filePathLine = filePath === undefined ? undefined : readCallLine(name, argsRaw);
801
- const openFile = filePath !== undefined && onOpenFile !== undefined && !settledWithCue
802
- ? () => {
803
- if (filePathLine === undefined)
804
- onOpenFile(filePath);
805
- else
806
- onOpenFile(filePath, { line: filePathLine });
807
- }
808
- : undefined;
809
- // 官方 linkHref(tool client.js:1100-1110):web_fetch 且 args.url 为 http(s) ⇒ 摘要外链。
810
- const linkHref = (() => {
811
- if (name !== 'web_fetch' || settledWithCue)
812
- return undefined;
813
- const parsed = parseArgs(argsRaw);
814
- if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
815
- return undefined;
816
- const url = parsed.url;
817
- if (typeof url !== 'string')
818
- return undefined;
819
- try {
820
- const { protocol } = new URL(url);
821
- return protocol === 'http:' || protocol === 'https:' ? url : undefined;
822
- }
823
- catch {
824
- return undefined;
825
- }
826
- })();
827
- // 展开体(官方 1514-1550):input/output/card 三源;bodyText 仅展开且无专属卡时格式化。
828
- // 官方 singleFile(1876/1885):摘要已是文件路径链接的工具(read)不再摊原始输入 JSON。
829
- const inputRaw = argsRaw === '' || filePath !== undefined ? null : argsRaw;
830
- const outputText = output === '' ? null : output;
831
- const card = terminal !== null ? 'terminal' : diffs !== null ? 'diff' : read !== null ? 'read' : search !== null ? 'search' : web !== null ? 'web' : details !== null ? 'details' : null;
832
- const bodyText = expanded && card === null && inputRaw !== null ? formatToolBody(variant, inputRaw) : null;
833
- const cardBody = variant === 'code' ? null : bodyText;
834
- const expandable = rowState !== 'preparing' && (inputRaw !== null || outputText !== null || card !== null);
835
- const open = expanded && expandable;
836
- const blockLabels = useMemo(() => ({
837
- diff: diffLabels(t),
838
- read: readLabels(t),
839
- search: searchLabels(t),
840
- web: webLabels(t),
841
- terminal: terminalLabels(t),
842
- }), [t]);
843
- const statusText = rowState === 'preparing' ? t('rowPreparing')
844
- : rowState === 'running' ? t('rowRunning')
845
- : rowState === 'error' ? t('rowFailed')
846
- : rowState === 'stopped' ? t('rowStopped')
847
- : null;
848
- const summaryClassName = `${officialClass('ToolRow', 'summary') ?? ''}${rowState === 'error' ? ` ${officialClass('ToolRow', 'errorSummary') ?? ''}` : ''}${rowState === 'stopped' ? ` ${officialClass('ToolRow', 'stoppedSummary') ?? ''}` : ''}`;
849
- const collapsedContent = summaryText === '' ? undefined : h(Fragment, null, h('span', { className: officialClass('ToolRow', 'sep') ?? '', 'aria-hidden': true }), openFile !== undefined
850
- ? h('button', {
851
- type: 'button',
852
- className: officialClass('ToolRow', 'fileLink') ?? '',
853
- onClick: (event) => { stopLinkClick(event); openFile(); },
854
- }, h(TextShimmer, { active: running }, summaryText))
855
- : linkHref !== undefined
856
- ? h('a', {
857
- className: officialClass('ToolRow', 'fileLink') ?? '',
858
- href: linkHref,
859
- target: '_blank',
860
- rel: 'noopener noreferrer',
861
- onClick: (event) => { event.stopPropagation(); },
862
- onKeyDown: summaryLinkKeyDown,
863
- }, h(TextShimmer, { active: running }, summaryText))
864
- : h('span', { className: summaryClassName }, h(TextShimmer, { active: running }, summaryText)), exitLabel !== null ? h(ExitCodeBadge, { label: exitLabel }) : null, summarySuffix !== null
865
- ? h(TextShimmer, {
866
- className: officialClass('ToolRow', 'summarySuffix') ?? '',
867
- active: running,
868
- }, summarySuffix)
869
- : null, diffStatTotals !== null
870
- ? h(TextShimmer, {
871
- className: `${officialClass('ToolRow', 'summarySuffix') ?? ''} ${officialClass('ToolRow', 'diffStat') ?? ''}`,
872
- active: running,
873
- }, h('span', { className: officialClass('ToolRow', 'diffAdded') ?? '' }, `+${diffStatTotals.added}`), ' ', h('span', { className: officialClass('ToolRow', 'diffRemoved') ?? '' }, `-${diffStatTotals.removed}`))
874
- : null);
875
- const expandedContent = open ? h('div', { className: officialClass('ToolRow', 'bodyWrap') ?? '' }, ask?.card !== undefined
876
- ? h(AskQuestionCardView, { card: ask.card })
877
- : terminal !== null
878
- ? h(TerminalBlock, {
879
- command: terminal.command,
880
- cwd: terminal.cwd,
881
- output: terminal.output,
882
- exitCode: terminal.exitCode,
883
- signal: terminal.signal,
884
- running: terminal.running,
885
- maxLines: Infinity,
886
- labels: blockLabels.terminal,
887
- className: officialClass('ToolRow', 'terminalBody') ?? '',
888
- })
889
- : diffs !== null
890
- ? h(DiffBlock, { diffs, labels: blockLabels.diff, maxLines: 9, className: officialClass('ToolRow', 'diffBody') ?? '' })
891
- : read !== null
892
- ? h(ReadBlock, {
893
- label: read.label,
894
- lines: read.lines,
895
- totalLines: read.totalLines,
896
- lang: read.lang,
897
- labels: blockLabels.read,
898
- maxLines: 8,
899
- className: officialClass('ToolRow', 'readBody') ?? '',
900
- })
901
- : search !== null
902
- ? h(Fragment, null, h(SearchBlock, {
903
- ...search.card,
904
- labels: blockLabels.search,
905
- maxLines: 8,
906
- className: officialClass('ToolRow', 'searchBody') ?? '',
907
- }), search.recovery !== undefined
908
- ? h('div', { className: officialClass('ToolRow', 'searchRecovery') ?? '' }, search.recovery)
909
- : null)
910
- : web !== null
911
- ? h(WebBlock, { ...web, labels: blockLabels.web, className: officialClass('ToolRow', 'webBody') ?? '' })
912
- : details !== null
913
- ? h(ToolDetailsView, { model: details, t, onOpenFile })
914
- : h(Fragment, null, variant === 'code' && bodyText !== null
915
- ? h('div', { className: officialClass('ToolRow', 'bodyScroll') ?? '' }, h(CodeViewer, {
916
- text: bodyText,
917
- path: 'tool-code.ts',
918
- t,
919
- className: officialClass('ToolRow', 'codeBody') ?? '',
920
- height: 'auto',
921
- style: { height: 'auto' },
922
- }))
923
- : null, (cardBody !== null || outputText !== null) && h('div', { className: officialClass('ToolRow', 'ioCard') ?? '' }, cardBody !== null && h('div', { className: officialClass('ToolRow', 'ioSection') ?? '' }, h('span', { className: officialClass('ToolRow', 'ioLabel') ?? '' }, t('toolInputLabel')), h('span', { className: officialClass('ToolRow', 'ioText') ?? '' }, cardBody)), cardBody !== null && outputText !== null
924
- && h('span', { className: officialClass('ToolRow', 'ioDivider') ?? '', 'aria-hidden': true }), outputText !== null && h('div', { className: officialClass('ToolRow', 'ioSection') ?? '' }, h('span', { className: officialClass('ToolRow', 'ioLabel') ?? '' }, t('toolOutputLabel')), h('span', { className: officialClass('ToolRow', 'ioText') ?? '', 'data-error': rowState === 'error' || undefined }, outputText))))) : undefined;
925
- return h('div', {
926
- className: officialClass('ToolRow', 'root') ?? '',
927
- 'data-variant': variant,
928
- 'data-tool': name,
929
- 'data-state': rowState,
930
- }, statusText !== null
931
- ? h('span', { className: officialClass('ToolRow', 'visuallyHidden') ?? '' }, statusText)
932
- : null, h(DisclosureRow, {
933
- rowClassName: officialClass('ToolRow', 'row') ?? '',
934
- leadingClassName: officialClass('ToolRow', 'leading') ?? '',
935
- titleClassName: officialClass('ToolRow', 'title') ?? '',
936
- icon: VARIANT_ICONS[variant],
937
- title: t(titleKey),
938
- running,
939
- open,
940
- expandable,
941
- expandOnRowClick: true,
942
- keepContentWhenOpen: true,
943
- onToggle: () => { setExpanded(value => !value); },
944
- collapsedContent,
945
- children: expandedContent,
946
- }));
947
- }
948
- //# sourceMappingURL=GenericCommandCard.js.map