@wzrhine/agent 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +21 -0
  3. package/README.md +29 -3
  4. package/dist/agent.css +15 -0
  5. package/dist/components/artifact/ArtifactCard.d.ts +56 -0
  6. package/dist/components/artifact/ArtifactCard.d.ts.map +1 -0
  7. package/dist/components/artifact/ArtifactCard.js +78 -0
  8. package/dist/components/artifact/ArtifactCard.js.map +1 -0
  9. package/dist/components/artifact/FilePreview.d.ts +117 -0
  10. package/dist/components/artifact/FilePreview.d.ts.map +1 -0
  11. package/dist/components/artifact/FilePreview.js +207 -0
  12. package/dist/components/artifact/FilePreview.js.map +1 -0
  13. package/dist/components/artifact/FilePreviewTabs.d.ts +51 -0
  14. package/dist/components/artifact/FilePreviewTabs.d.ts.map +1 -0
  15. package/dist/components/artifact/FilePreviewTabs.js +150 -0
  16. package/dist/components/artifact/FilePreviewTabs.js.map +1 -0
  17. package/dist/components/composer/AttachmentList.d.ts +33 -0
  18. package/dist/components/composer/AttachmentList.d.ts.map +1 -0
  19. package/dist/components/composer/AttachmentList.js +56 -0
  20. package/dist/components/composer/AttachmentList.js.map +1 -0
  21. package/dist/components/composer/Composer.d.ts +113 -0
  22. package/dist/components/composer/Composer.d.ts.map +1 -0
  23. package/dist/components/composer/Composer.js +327 -0
  24. package/dist/components/composer/Composer.js.map +1 -0
  25. package/dist/components/composer/ComposerInput.d.ts +101 -0
  26. package/dist/components/composer/ComposerInput.d.ts.map +1 -0
  27. package/dist/components/composer/ComposerInput.js +301 -0
  28. package/dist/components/composer/ComposerInput.js.map +1 -0
  29. package/dist/components/composer/ComposerNotice.d.ts +38 -0
  30. package/dist/components/composer/ComposerNotice.d.ts.map +1 -0
  31. package/dist/components/composer/ComposerNotice.js +16 -0
  32. package/dist/components/composer/ComposerNotice.js.map +1 -0
  33. package/dist/components/composer/MentionMenu.d.ts +37 -0
  34. package/dist/components/composer/MentionMenu.d.ts.map +1 -0
  35. package/dist/components/composer/MentionMenu.js +55 -0
  36. package/dist/components/composer/MentionMenu.js.map +1 -0
  37. package/dist/components/composer/MenuPanel.d.ts +49 -0
  38. package/dist/components/composer/MenuPanel.d.ts.map +1 -0
  39. package/dist/components/composer/MenuPanel.js +50 -0
  40. package/dist/components/composer/MenuPanel.js.map +1 -0
  41. package/dist/components/composer/ModelPicker.d.ts +40 -0
  42. package/dist/components/composer/ModelPicker.d.ts.map +1 -0
  43. package/dist/components/composer/ModelPicker.js +115 -0
  44. package/dist/components/composer/ModelPicker.js.map +1 -0
  45. package/dist/components/composer/PermissionPicker.d.ts +31 -0
  46. package/dist/components/composer/PermissionPicker.d.ts.map +1 -0
  47. package/dist/components/composer/PermissionPicker.js +43 -0
  48. package/dist/components/composer/PermissionPicker.js.map +1 -0
  49. package/dist/components/composer/SendStopButton.d.ts +71 -0
  50. package/dist/components/composer/SendStopButton.d.ts.map +1 -0
  51. package/dist/components/composer/SendStopButton.js +87 -0
  52. package/dist/components/composer/SendStopButton.js.map +1 -0
  53. package/dist/components/composer/SlashCommandMenu.d.ts +33 -0
  54. package/dist/components/composer/SlashCommandMenu.d.ts.map +1 -0
  55. package/dist/components/composer/SlashCommandMenu.js +43 -0
  56. package/dist/components/composer/SlashCommandMenu.js.map +1 -0
  57. package/dist/components/composer/composer-text.d.ts +10 -0
  58. package/dist/components/composer/composer-text.d.ts.map +1 -0
  59. package/dist/components/composer/composer-text.js +26 -0
  60. package/dist/components/composer/composer-text.js.map +1 -0
  61. package/dist/components/composer/composer-utils.d.ts +74 -0
  62. package/dist/components/composer/composer-utils.d.ts.map +1 -0
  63. package/dist/components/composer/composer-utils.js +133 -0
  64. package/dist/components/composer/composer-utils.js.map +1 -0
  65. package/dist/components/conversation/ConversationList.d.ts +88 -0
  66. package/dist/components/conversation/ConversationList.d.ts.map +1 -0
  67. package/dist/components/conversation/ConversationList.js +81 -0
  68. package/dist/components/conversation/ConversationList.js.map +1 -0
  69. package/dist/components/conversation/ConversationRow.d.ts +66 -0
  70. package/dist/components/conversation/ConversationRow.d.ts.map +1 -0
  71. package/dist/components/conversation/ConversationRow.js +65 -0
  72. package/dist/components/conversation/ConversationRow.js.map +1 -0
  73. package/dist/components/conversation/conversation-status.d.ts +21 -0
  74. package/dist/components/conversation/conversation-status.d.ts.map +1 -0
  75. package/dist/components/conversation/conversation-status.js +33 -0
  76. package/dist/components/conversation/conversation-status.js.map +1 -0
  77. package/dist/components/intervention/ApprovalDiff.d.ts +14 -0
  78. package/dist/components/intervention/ApprovalDiff.d.ts.map +1 -0
  79. package/dist/components/intervention/ApprovalDiff.js +25 -0
  80. package/dist/components/intervention/ApprovalDiff.js.map +1 -0
  81. package/dist/components/intervention/ApprovalPanel.d.ts +57 -0
  82. package/dist/components/intervention/ApprovalPanel.d.ts.map +1 -0
  83. package/dist/components/intervention/ApprovalPanel.js +111 -0
  84. package/dist/components/intervention/ApprovalPanel.js.map +1 -0
  85. package/dist/components/intervention/ErrorRecoveryNotice.d.ts +28 -0
  86. package/dist/components/intervention/ErrorRecoveryNotice.d.ts.map +1 -0
  87. package/dist/components/intervention/ErrorRecoveryNotice.js +30 -0
  88. package/dist/components/intervention/ErrorRecoveryNotice.js.map +1 -0
  89. package/dist/components/intervention/GrantList.d.ts +49 -0
  90. package/dist/components/intervention/GrantList.d.ts.map +1 -0
  91. package/dist/components/intervention/GrantList.js +58 -0
  92. package/dist/components/intervention/GrantList.js.map +1 -0
  93. package/dist/components/intervention/InterventionDock.d.ts +24 -0
  94. package/dist/components/intervention/InterventionDock.d.ts.map +1 -0
  95. package/dist/components/intervention/InterventionDock.js +18 -0
  96. package/dist/components/intervention/InterventionDock.js.map +1 -0
  97. package/dist/components/intervention/QuestionnaireCard.d.ts +60 -0
  98. package/dist/components/intervention/QuestionnaireCard.d.ts.map +1 -0
  99. package/dist/components/intervention/QuestionnaireCard.js +322 -0
  100. package/dist/components/intervention/QuestionnaireCard.js.map +1 -0
  101. package/dist/components/intervention/action-lock.d.ts +20 -0
  102. package/dist/components/intervention/action-lock.d.ts.map +1 -0
  103. package/dist/components/intervention/action-lock.js +65 -0
  104. package/dist/components/intervention/action-lock.js.map +1 -0
  105. package/dist/components/intervention/icons.d.ts +8 -0
  106. package/dist/components/intervention/icons.d.ts.map +1 -0
  107. package/dist/components/intervention/icons.js +11 -0
  108. package/dist/components/intervention/icons.js.map +1 -0
  109. package/dist/components/intervention/questionnaire-answers.d.ts +29 -0
  110. package/dist/components/intervention/questionnaire-answers.d.ts.map +1 -0
  111. package/dist/components/intervention/questionnaire-answers.js +81 -0
  112. package/dist/components/intervention/questionnaire-answers.js.map +1 -0
  113. package/dist/components/message/AgentMessage.d.ts +98 -0
  114. package/dist/components/message/AgentMessage.d.ts.map +1 -0
  115. package/dist/components/message/AgentMessage.js +94 -0
  116. package/dist/components/message/AgentMessage.js.map +1 -0
  117. package/dist/components/message/CitationChip.d.ts +34 -0
  118. package/dist/components/message/CitationChip.d.ts.map +1 -0
  119. package/dist/components/message/CitationChip.js +30 -0
  120. package/dist/components/message/CitationChip.js.map +1 -0
  121. package/dist/components/message/CodeBlock.d.ts +45 -0
  122. package/dist/components/message/CodeBlock.d.ts.map +1 -0
  123. package/dist/components/message/CodeBlock.js +21 -0
  124. package/dist/components/message/CodeBlock.js.map +1 -0
  125. package/dist/components/message/JumpToLatest.d.ts +27 -0
  126. package/dist/components/message/JumpToLatest.d.ts.map +1 -0
  127. package/dist/components/message/JumpToLatest.js +17 -0
  128. package/dist/components/message/JumpToLatest.js.map +1 -0
  129. package/dist/components/message/Markdown.d.ts +21 -0
  130. package/dist/components/message/Markdown.d.ts.map +1 -0
  131. package/dist/components/message/Markdown.js +21 -0
  132. package/dist/components/message/Markdown.js.map +1 -0
  133. package/dist/components/message/MessageActions.d.ts +63 -0
  134. package/dist/components/message/MessageActions.d.ts.map +1 -0
  135. package/dist/components/message/MessageActions.js +83 -0
  136. package/dist/components/message/MessageActions.js.map +1 -0
  137. package/dist/components/message/MessageList.d.ts +100 -0
  138. package/dist/components/message/MessageList.d.ts.map +1 -0
  139. package/dist/components/message/MessageList.js +266 -0
  140. package/dist/components/message/MessageList.js.map +1 -0
  141. package/dist/components/message/MessagePart.d.ts +44 -0
  142. package/dist/components/message/MessagePart.d.ts.map +1 -0
  143. package/dist/components/message/MessagePart.js +146 -0
  144. package/dist/components/message/MessagePart.js.map +1 -0
  145. package/dist/components/message/RunDetails.d.ts +26 -0
  146. package/dist/components/message/RunDetails.d.ts.map +1 -0
  147. package/dist/components/message/RunDetails.js +113 -0
  148. package/dist/components/message/RunDetails.js.map +1 -0
  149. package/dist/components/message/SkillUseList.d.ts +22 -0
  150. package/dist/components/message/SkillUseList.d.ts.map +1 -0
  151. package/dist/components/message/SkillUseList.js +20 -0
  152. package/dist/components/message/SkillUseList.js.map +1 -0
  153. package/dist/components/message/ThinkingBlock.d.ts +44 -0
  154. package/dist/components/message/ThinkingBlock.d.ts.map +1 -0
  155. package/dist/components/message/ThinkingBlock.js +34 -0
  156. package/dist/components/message/ThinkingBlock.js.map +1 -0
  157. package/dist/components/message/icons.d.ts +14 -0
  158. package/dist/components/message/icons.d.ts.map +1 -0
  159. package/dist/components/message/icons.js +16 -0
  160. package/dist/components/message/icons.js.map +1 -0
  161. package/dist/components/message/plain-text.d.ts +11 -0
  162. package/dist/components/message/plain-text.d.ts.map +1 -0
  163. package/dist/components/message/plain-text.js +58 -0
  164. package/dist/components/message/plain-text.js.map +1 -0
  165. package/dist/components/message/renderers.d.ts +30 -0
  166. package/dist/components/message/renderers.d.ts.map +1 -0
  167. package/dist/components/message/renderers.js +2 -0
  168. package/dist/components/message/renderers.js.map +1 -0
  169. package/dist/components/message/use-copy.d.ts +18 -0
  170. package/dist/components/message/use-copy.d.ts.map +1 -0
  171. package/dist/components/message/use-copy.js +65 -0
  172. package/dist/components/message/use-copy.js.map +1 -0
  173. package/dist/components/process/AgentProcess.d.ts +47 -0
  174. package/dist/components/process/AgentProcess.d.ts.map +1 -0
  175. package/dist/components/process/AgentProcess.js +78 -0
  176. package/dist/components/process/AgentProcess.js.map +1 -0
  177. package/dist/components/process/RunStatus.d.ts +60 -0
  178. package/dist/components/process/RunStatus.d.ts.map +1 -0
  179. package/dist/components/process/RunStatus.js +34 -0
  180. package/dist/components/process/RunStatus.js.map +1 -0
  181. package/dist/components/shell/AgentEmptyState.d.ts +35 -0
  182. package/dist/components/shell/AgentEmptyState.d.ts.map +1 -0
  183. package/dist/components/shell/AgentEmptyState.js +20 -0
  184. package/dist/components/shell/AgentEmptyState.js.map +1 -0
  185. package/dist/components/shell/AgentHeader.d.ts +84 -0
  186. package/dist/components/shell/AgentHeader.d.ts.map +1 -0
  187. package/dist/components/shell/AgentHeader.js +38 -0
  188. package/dist/components/shell/AgentHeader.js.map +1 -0
  189. package/dist/components/shell/AgentShell.d.ts +138 -0
  190. package/dist/components/shell/AgentShell.d.ts.map +1 -0
  191. package/dist/components/shell/AgentShell.js +206 -0
  192. package/dist/components/shell/AgentShell.js.map +1 -0
  193. package/dist/components/shell/AgentSidePane.d.ts +54 -0
  194. package/dist/components/shell/AgentSidePane.d.ts.map +1 -0
  195. package/dist/components/shell/AgentSidePane.js +26 -0
  196. package/dist/components/shell/AgentSidePane.js.map +1 -0
  197. package/dist/components/shell/ResizeHandle.d.ts +50 -0
  198. package/dist/components/shell/ResizeHandle.d.ts.map +1 -0
  199. package/dist/components/shell/ResizeHandle.js +84 -0
  200. package/dist/components/shell/ResizeHandle.js.map +1 -0
  201. package/dist/components/shell/use-controllable.d.ts +9 -0
  202. package/dist/components/shell/use-controllable.d.ts.map +1 -0
  203. package/dist/components/shell/use-controllable.js +26 -0
  204. package/dist/components/shell/use-controllable.js.map +1 -0
  205. package/dist/components/tools/ChunkPager.d.ts +48 -0
  206. package/dist/components/tools/ChunkPager.d.ts.map +1 -0
  207. package/dist/components/tools/ChunkPager.js +68 -0
  208. package/dist/components/tools/ChunkPager.js.map +1 -0
  209. package/dist/components/tools/CodeModeToolTree.d.ts +64 -0
  210. package/dist/components/tools/CodeModeToolTree.d.ts.map +1 -0
  211. package/dist/components/tools/CodeModeToolTree.js +97 -0
  212. package/dist/components/tools/CodeModeToolTree.js.map +1 -0
  213. package/dist/components/tools/DiffPreview.d.ts +83 -0
  214. package/dist/components/tools/DiffPreview.d.ts.map +1 -0
  215. package/dist/components/tools/DiffPreview.js +95 -0
  216. package/dist/components/tools/DiffPreview.js.map +1 -0
  217. package/dist/components/tools/ToolActivity.d.ts +63 -0
  218. package/dist/components/tools/ToolActivity.d.ts.map +1 -0
  219. package/dist/components/tools/ToolActivity.js +45 -0
  220. package/dist/components/tools/ToolActivity.js.map +1 -0
  221. package/dist/components/tools/ToolDetails.d.ts +106 -0
  222. package/dist/components/tools/ToolDetails.d.ts.map +1 -0
  223. package/dist/components/tools/ToolDetails.js +247 -0
  224. package/dist/components/tools/ToolDetails.js.map +1 -0
  225. package/dist/components/tools/ToolHistory.d.ts +48 -0
  226. package/dist/components/tools/ToolHistory.d.ts.map +1 -0
  227. package/dist/components/tools/ToolHistory.js +37 -0
  228. package/dist/components/tools/ToolHistory.js.map +1 -0
  229. package/dist/components/tools/ToolOutput.d.ts +61 -0
  230. package/dist/components/tools/ToolOutput.d.ts.map +1 -0
  231. package/dist/components/tools/ToolOutput.js +45 -0
  232. package/dist/components/tools/ToolOutput.js.map +1 -0
  233. package/dist/components/tools/ToolRecord.d.ts +54 -0
  234. package/dist/components/tools/ToolRecord.d.ts.map +1 -0
  235. package/dist/components/tools/ToolRecord.js +78 -0
  236. package/dist/components/tools/ToolRecord.js.map +1 -0
  237. package/dist/components/tools/shared.d.ts +93 -0
  238. package/dist/components/tools/shared.d.ts.map +1 -0
  239. package/dist/components/tools/shared.js +160 -0
  240. package/dist/components/tools/shared.js.map +1 -0
  241. package/dist/components/workspace/ActivityLedger.d.ts +44 -0
  242. package/dist/components/workspace/ActivityLedger.d.ts.map +1 -0
  243. package/dist/components/workspace/ActivityLedger.js +63 -0
  244. package/dist/components/workspace/ActivityLedger.js.map +1 -0
  245. package/dist/components/workspace/CompactionNotice.d.ts +63 -0
  246. package/dist/components/workspace/CompactionNotice.d.ts.map +1 -0
  247. package/dist/components/workspace/CompactionNotice.js +36 -0
  248. package/dist/components/workspace/CompactionNotice.js.map +1 -0
  249. package/dist/components/workspace/ContextUsage.d.ts +44 -0
  250. package/dist/components/workspace/ContextUsage.d.ts.map +1 -0
  251. package/dist/components/workspace/ContextUsage.js +106 -0
  252. package/dist/components/workspace/ContextUsage.js.map +1 -0
  253. package/dist/components/workspace/PersistentTerminal.d.ts +86 -0
  254. package/dist/components/workspace/PersistentTerminal.d.ts.map +1 -0
  255. package/dist/components/workspace/PersistentTerminal.js +155 -0
  256. package/dist/components/workspace/PersistentTerminal.js.map +1 -0
  257. package/dist/components/workspace/PinnedSummary.d.ts +43 -0
  258. package/dist/components/workspace/PinnedSummary.d.ts.map +1 -0
  259. package/dist/components/workspace/PinnedSummary.js +33 -0
  260. package/dist/components/workspace/PinnedSummary.js.map +1 -0
  261. package/dist/components/workspace/RunSummary.d.ts +35 -0
  262. package/dist/components/workspace/RunSummary.d.ts.map +1 -0
  263. package/dist/components/workspace/RunSummary.js +46 -0
  264. package/dist/components/workspace/RunSummary.js.map +1 -0
  265. package/dist/components/workspace/SubAgentCard.d.ts +60 -0
  266. package/dist/components/workspace/SubAgentCard.d.ts.map +1 -0
  267. package/dist/components/workspace/SubAgentCard.js +73 -0
  268. package/dist/components/workspace/SubAgentCard.js.map +1 -0
  269. package/dist/components/workspace/TerminalRow.d.ts +51 -0
  270. package/dist/components/workspace/TerminalRow.d.ts.map +1 -0
  271. package/dist/components/workspace/TerminalRow.js +62 -0
  272. package/dist/components/workspace/TerminalRow.js.map +1 -0
  273. package/dist/components/workspace/shared.d.ts +22 -0
  274. package/dist/components/workspace/shared.d.ts.map +1 -0
  275. package/dist/components/workspace/shared.js +36 -0
  276. package/dist/components/workspace/shared.js.map +1 -0
  277. package/dist/index.d.ts +130 -0
  278. package/dist/index.d.ts.map +1 -0
  279. package/dist/index.js +76 -0
  280. package/dist/index.js.map +1 -0
  281. package/dist/motion/agent-motion.d.ts +62 -0
  282. package/dist/motion/agent-motion.d.ts.map +1 -0
  283. package/dist/motion/agent-motion.js +61 -0
  284. package/dist/motion/agent-motion.js.map +1 -0
  285. package/dist/primitives/AgentSpark.d.ts +17 -0
  286. package/dist/primitives/AgentSpark.d.ts.map +1 -0
  287. package/dist/primitives/AgentSpark.js +11 -0
  288. package/dist/primitives/AgentSpark.js.map +1 -0
  289. package/dist/primitives/AgentStatus.d.ts +32 -0
  290. package/dist/primitives/AgentStatus.d.ts.map +1 -0
  291. package/dist/primitives/AgentStatus.js +13 -0
  292. package/dist/primitives/AgentStatus.js.map +1 -0
  293. package/dist/primitives/StatusGlyph.d.ts +10 -0
  294. package/dist/primitives/StatusGlyph.d.ts.map +1 -0
  295. package/dist/primitives/StatusGlyph.js +31 -0
  296. package/dist/primitives/StatusGlyph.js.map +1 -0
  297. package/dist/primitives/icons.d.ts +7 -0
  298. package/dist/primitives/icons.d.ts.map +1 -0
  299. package/dist/primitives/icons.js +55 -0
  300. package/dist/primitives/icons.js.map +1 -0
  301. package/dist/provider/AgentMessages.d.ts +51 -0
  302. package/dist/provider/AgentMessages.d.ts.map +1 -0
  303. package/dist/provider/AgentMessages.js +77 -0
  304. package/dist/provider/AgentMessages.js.map +1 -0
  305. package/dist/provider/messages/composer.d.ts +90 -0
  306. package/dist/provider/messages/composer.d.ts.map +1 -0
  307. package/dist/provider/messages/composer.js +155 -0
  308. package/dist/provider/messages/composer.js.map +1 -0
  309. package/dist/provider/messages/intervention.d.ts +135 -0
  310. package/dist/provider/messages/intervention.d.ts.map +1 -0
  311. package/dist/provider/messages/intervention.js +321 -0
  312. package/dist/provider/messages/intervention.js.map +1 -0
  313. package/dist/provider/messages/message.d.ts +118 -0
  314. package/dist/provider/messages/message.d.ts.map +1 -0
  315. package/dist/provider/messages/message.js +224 -0
  316. package/dist/provider/messages/message.js.map +1 -0
  317. package/dist/provider/messages/shell.d.ts +70 -0
  318. package/dist/provider/messages/shell.d.ts.map +1 -0
  319. package/dist/provider/messages/shell.js +109 -0
  320. package/dist/provider/messages/shell.js.map +1 -0
  321. package/dist/provider/messages/status.d.ts +20 -0
  322. package/dist/provider/messages/status.d.ts.map +1 -0
  323. package/dist/provider/messages/status.js +195 -0
  324. package/dist/provider/messages/status.js.map +1 -0
  325. package/dist/provider/messages/tools.d.ts +210 -0
  326. package/dist/provider/messages/tools.d.ts.map +1 -0
  327. package/dist/provider/messages/tools.js +482 -0
  328. package/dist/provider/messages/tools.js.map +1 -0
  329. package/dist/provider/messages/workspace.d.ts +176 -0
  330. package/dist/provider/messages/workspace.d.ts.map +1 -0
  331. package/dist/provider/messages/workspace.js +325 -0
  332. package/dist/provider/messages/workspace.js.map +1 -0
  333. package/dist/styles/artifact.css +564 -0
  334. package/dist/styles/base.css +220 -0
  335. package/dist/styles/composer.css +1001 -0
  336. package/dist/styles/conversation.css +275 -0
  337. package/dist/styles/intervention.css +929 -0
  338. package/dist/styles/message.css +917 -0
  339. package/dist/styles/process.css +207 -0
  340. package/dist/styles/shell.css +441 -0
  341. package/dist/styles/tools.css +929 -0
  342. package/dist/styles/workspace.css +1294 -0
  343. package/dist/utils/cx.d.ts +3 -0
  344. package/dist/utils/cx.d.ts.map +1 -0
  345. package/dist/utils/cx.js +5 -0
  346. package/dist/utils/cx.js.map +1 -0
  347. package/package.json +64 -3
@@ -0,0 +1,155 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Button, Input, Tab, TabList, TabPanel, Tabs } from '@wzrhine/react';
5
+ import { terminalStatusMeta } from '@wzrhine/agent-core';
6
+ import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
7
+ import { ChunkPager } from '../tools/ChunkPager.js';
8
+ import { StatusGlyph } from '../../primitives/StatusGlyph.js';
9
+ import { AgentStatus, statusProps } from '../../primitives/AgentStatus.js';
10
+ import { AgentIcon } from '../../primitives/icons.js';
11
+ import { cx } from '../../utils/cx.js';
12
+ import { Heading, useWorkspaceMessages } from './shared.js';
13
+ /** Statuses in which the session accepts input. */
14
+ const INPUT_STATUSES = ['running', 'waiting-input'];
15
+ /** Statuses in which a stop request still makes sense. */
16
+ const STOP_STATUSES = ['opening', 'running', 'waiting-input', 'idle', 'unknown'];
17
+ /** Inherited / read-only terminals are history only: no input, no stop. */
18
+ export function isTerminalReadOnly(terminal) {
19
+ return Boolean(terminal.readOnly || terminal.inherited);
20
+ }
21
+ /** Distance from the bottom (in CSS pixels) that still counts as "following" the output. */
22
+ const FOLLOW_SLACK = 8;
23
+ /**
24
+ * PersistentTerminal (atlas 22): one terminal session with its own lifecycle. A command
25
+ * returning never closes the session (`idle` says so); a stop request shows 「停止尚未确认」 until
26
+ * the adapter confirms it; `unknown` is never shown as ended.
27
+ *
28
+ * Accessibility: the console is `role="log"` with `aria-live="off"`, so streamed chunks are never
29
+ * read out one by one; the session status sits in a polite `role="status"` instead. The console
30
+ * is focusable for keyboard scrolling. The input is a labelled single-line field; Enter sends,
31
+ * except while an IME composition is active.
32
+ *
33
+ * `terminal.newerOutput` (the loaded snapshot is older than the session) adds 「有新输出,读取最新」
34
+ * (`onReadLatest`); `terminal.notes` render as small notes; `terminal.history` is an ordered list
35
+ * 「调用记录」 (command, glyph + status text, exit code, `<time>`) with `onLoadMoreHistory`. With
36
+ * `page` the stored output is read through a `ChunkPager` instead of the live tail.
37
+ *
38
+ * Motion: none. The cursor is a static block; the console follows new output only while the
39
+ * reader is at the bottom, otherwise a 「有新输出」 button appears.
40
+ */
41
+ export const PersistentTerminal = React.forwardRef(function PersistentTerminal({ terminal, onInput, onStop, onLoadEarlier, onReadLatest, onLoadMoreHistory, page, pager, headingLevel = 3, hideName = false, messages: override, className, ...rest }, ref) {
42
+ const m = useWorkspaceMessages(override);
43
+ const status = useAgentMessages().status;
44
+ const id = React.useId();
45
+ const nameId = `${id}-name`;
46
+ const readOnly = isTerminalReadOnly(terminal);
47
+ const meta = terminalStatusMeta[terminal.status];
48
+ const canInput = Boolean(onInput) && !readOnly && INPUT_STATUSES.includes(terminal.status);
49
+ const canStop = Boolean(onStop) && Boolean(terminal.stoppable) && !readOnly;
50
+ const stopPending = terminal.status === 'stop-pending';
51
+ const settled = terminal.status === 'ended' || terminal.status === 'failed';
52
+ return (_jsxs("section", { ...rest, ref: ref, className: cx('rl-agent-terminal', className), "aria-labelledby": nameId, "data-status": terminal.status, "data-readonly": readOnly || undefined, children: [_jsxs("header", { className: "rl-agent-terminal__header", children: [_jsx(AgentIcon, { name: "terminal", className: "rl-agent-terminal__icon" }), _jsxs("div", { className: "rl-agent-terminal__identity", children: [_jsx(Heading, { level: headingLevel, id: nameId, className: hideName ? 'rl-agent-sr' : 'rl-agent-terminal__name', children: terminal.name }), _jsx("span", { className: "rl-agent-terminal__id", children: terminal.id }), terminal.backend && _jsx("span", { className: "rl-agent-terminal__backend", children: m.terminalBackend[terminal.backend] }), terminal.shell && _jsx("span", { className: "rl-agent-terminal__shell", children: terminal.shell })] }), _jsxs("span", { role: "status", className: "rl-agent-terminal__status", children: [_jsx(AgentStatus, { ...statusProps(meta, status.terminal[terminal.status]) }), settled && terminal.exitCode !== undefined && _jsx("span", { className: "rl-agent-terminal__exit", children: m.terminalExitCode(terminal.exitCode) })] }), canStop && !stopPending && STOP_STATUSES.includes(terminal.status) && (_jsx(Button, { size: "sm", variant: "secondary", className: "rl-agent-terminal__stop", iconStart: _jsx(AgentIcon, { name: "stop" }), "aria-label": m.terminalStop(terminal.name), onClick: () => void onStop(terminal), children: m.terminalStopVisible }))] }), terminal.cwd && (_jsxs("p", { className: "rl-agent-terminal__cwd", title: terminal.cwd, children: [_jsx("span", { className: "rl-agent-terminal__cwd-label", children: m.terminalCwd }), _jsx("span", { className: "rl-agent-terminal__cwd-path", children: terminal.cwd })] })), readOnly && (_jsxs("p", { className: "rl-agent-terminal__notice", "data-tone": "neutral", children: [_jsx(AgentIcon, { name: "history" }), m.terminalReadOnly] })), stopPending && (_jsxs("div", { className: "rl-agent-terminal__notice", "data-tone": "warning", children: [_jsx(AgentIcon, { name: "warning" }), _jsx("span", { children: m.terminalStopPending }), canStop && (_jsx(Button, { size: "sm", variant: "ghost", iconStart: _jsx(AgentIcon, { name: "retry" }), onClick: () => void onStop(terminal), children: m.terminalRetryStop }))] })), terminal.status === 'unknown' && (_jsxs("p", { className: "rl-agent-terminal__notice", "data-tone": "warning", children: [_jsx(AgentIcon, { name: "warning" }), m.terminalUnknownNotice] })), terminal.status === 'idle' && !readOnly && (_jsxs("p", { className: "rl-agent-terminal__notice", "data-tone": "neutral", children: [_jsx(AgentIcon, { name: "info" }), m.terminalIdleNotice] })), terminal.receipt && (terminal.receipt.status === 'rejected' || terminal.receipt.status === 'unknown') && (_jsxs("p", { className: "rl-agent-terminal__notice", "data-tone": terminal.receipt.status === 'rejected' ? 'danger' : 'warning', children: [_jsx(AgentIcon, { name: "warning" }), status.action[terminal.receipt.status], terminal.receipt.reason ? ` · ${terminal.receipt.reason}` : ''] })), terminal.notes && terminal.notes.length > 0 && (_jsx("ul", { className: "rl-agent-terminal__notes", "aria-label": m.terminalNotes, children: terminal.notes.map((note, i) => (_jsxs("li", { className: "rl-agent-terminal__note", children: [_jsx(AgentIcon, { name: "info" }), _jsx("span", { children: note })] }, i))) })), terminal.newerOutput && onReadLatest && (_jsx("div", { className: "rl-agent-terminal__latest", children: _jsx(Button, { size: "sm", variant: "secondary", iconStart: _jsx(AgentIcon, { name: "arrow-down" }), onClick: () => void onReadLatest(terminal), children: m.terminalReadLatest }) })), page ? (_jsx(ChunkPager, { ...pager, className: "rl-agent-terminal__pager", page: page, label: m.terminalOutput(terminal.name), canGoBack: pager?.canGoBack ?? false })) : (_jsx(TerminalConsole, { terminal: terminal, messages: m, onLoadEarlier: onLoadEarlier, showCursor: canInput })), canInput && _jsx(TerminalInput, { terminal: terminal, onInput: onInput, messages: m }), terminal.history && terminal.history.length > 0 && (_jsx(TerminalHistory, { terminal: terminal, onLoadMore: onLoadMoreHistory, messages: m }))] }));
53
+ });
54
+ function TerminalConsole({ terminal, messages: m, onLoadEarlier, showCursor, }) {
55
+ const scrollRef = React.useRef(null);
56
+ const following = React.useRef(true);
57
+ const anchorFromBottom = React.useRef(null);
58
+ const [hasNew, setHasNew] = React.useState(false);
59
+ const output = terminal.output ?? '';
60
+ React.useLayoutEffect(() => {
61
+ const el = scrollRef.current;
62
+ if (!el)
63
+ return;
64
+ if (anchorFromBottom.current !== null) {
65
+ // Older output was prepended: keep the same lines under the reader's eyes.
66
+ el.scrollTop = el.scrollHeight - anchorFromBottom.current;
67
+ anchorFromBottom.current = null;
68
+ return;
69
+ }
70
+ if (following.current)
71
+ el.scrollTop = el.scrollHeight;
72
+ else
73
+ setHasNew(true);
74
+ }, [output]);
75
+ const onScroll = () => {
76
+ const el = scrollRef.current;
77
+ if (!el)
78
+ return;
79
+ const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight <= FOLLOW_SLACK;
80
+ following.current = atBottom;
81
+ if (atBottom)
82
+ setHasNew(false);
83
+ };
84
+ const jumpToLatest = () => {
85
+ const el = scrollRef.current;
86
+ following.current = true;
87
+ setHasNew(false);
88
+ if (el)
89
+ el.scrollTop = el.scrollHeight;
90
+ el?.focus();
91
+ };
92
+ const loadEarlier = () => {
93
+ const el = scrollRef.current;
94
+ if (el)
95
+ anchorFromBottom.current = el.scrollHeight - el.scrollTop;
96
+ void onLoadEarlier?.(terminal);
97
+ };
98
+ return (_jsxs("div", { className: "rl-agent-terminal__console-wrap", children: [(terminal.outputTruncated || terminal.partialCapture) && (_jsxs("div", { className: "rl-agent-terminal__console-meta", children: [terminal.outputTruncated && onLoadEarlier && (_jsx(Button, { size: "sm", variant: "ghost", iconStart: _jsx(AgentIcon, { name: "arrow-up" }), onClick: loadEarlier, children: m.terminalLoadEarlier })), terminal.partialCapture && (_jsxs("span", { className: "rl-agent-terminal__partial", children: [_jsx(AgentIcon, { name: "warning" }), m.terminalPartialCapture] }))] })), _jsx("div", { ref: scrollRef, className: "rl-agent-terminal__console", role: "log", "aria-live": "off", "aria-label": m.terminalOutput(terminal.name), tabIndex: 0, onScroll: onScroll, children: output ? (_jsxs("pre", { className: "rl-agent-terminal__output", children: [output, showCursor && _jsx("span", { className: "rl-agent-terminal__cursor", "aria-hidden": "true" })] })) : (_jsx("p", { className: "rl-agent-terminal__empty", children: m.terminalNoOutput })) }), hasNew && (_jsx(Button, { size: "sm", variant: "secondary", className: "rl-agent-terminal__new", iconStart: _jsx(AgentIcon, { name: "arrow-down" }), onClick: jumpToLatest, children: m.terminalNewOutput }))] }));
99
+ }
100
+ const historyGlyph = {
101
+ running: { glyph: 'active', tone: 'info' },
102
+ returned: { glyph: 'done', tone: 'success' },
103
+ failed: { glyph: 'failed', tone: 'danger' },
104
+ unknown: { glyph: 'unknown', tone: 'warning' },
105
+ };
106
+ function TerminalHistory({ terminal, onLoadMore, messages: m, }) {
107
+ const format = useAgentFormat();
108
+ const id = React.useId();
109
+ const items = terminal.history ?? [];
110
+ return (_jsxs("section", { className: "rl-agent-terminal__history", "aria-labelledby": `${id}-title`, children: [_jsx("p", { id: `${id}-title`, className: "rl-agent-terminal__history-title", children: m.terminalHistory }), onLoadMore && (_jsx(Button, { size: "sm", variant: "ghost", className: "rl-agent-terminal__history-more", iconStart: _jsx(AgentIcon, { name: "arrow-up" }), onClick: () => void onLoadMore(terminal), children: m.terminalHistoryLoadMore })), _jsx("ol", { className: "rl-agent-terminal__history-list", children: items.map((item) => {
111
+ const g = historyGlyph[item.status] ?? historyGlyph.unknown;
112
+ return (_jsxs("li", { className: "rl-agent-terminal__history-item", "data-status": item.status, children: [_jsx("code", { className: "rl-agent-terminal__history-command", title: item.command, children: item.command }), _jsxs("span", { className: "rl-agent-terminal__history-status", "data-tone": g.tone, children: [_jsx(StatusGlyph, { name: g.glyph, tone: g.tone }), _jsx("span", { children: m.terminalHistoryStatus[item.status] ?? m.terminalHistoryStatus.unknown })] }), item.exitCode !== undefined && _jsx("span", { className: "rl-agent-terminal__history-exit", children: m.terminalExitCode(item.exitCode) }), item.at && (_jsx("time", { className: "rl-agent-terminal__history-time", dateTime: item.at, children: format.time(item.at) }))] }, item.id));
113
+ }) })] }));
114
+ }
115
+ function TerminalInput({ terminal, onInput, messages: m, }) {
116
+ const [draft, setDraft] = React.useState('');
117
+ const composing = React.useRef(false);
118
+ const inputId = React.useId();
119
+ const send = () => {
120
+ const text = draft;
121
+ setDraft('');
122
+ void onInput(text, terminal);
123
+ };
124
+ return (_jsxs("form", { className: "rl-agent-terminal__input", onSubmit: (event) => {
125
+ event.preventDefault();
126
+ send();
127
+ }, children: [_jsx("label", { htmlFor: inputId, className: "rl-agent-sr", children: m.terminalInputLabel(terminal.name) }), _jsx("span", { className: "rl-agent-terminal__prompt", "aria-hidden": "true", children: ">" }), _jsx(Input, { id: inputId, size: "sm", mono: true, className: "rl-agent-terminal__field", value: draft, placeholder: m.terminalInputPlaceholder, autoComplete: "off", spellCheck: false, onChange: (event) => setDraft(event.currentTarget.value), onCompositionStart: () => {
128
+ composing.current = true;
129
+ }, onCompositionEnd: () => {
130
+ composing.current = false;
131
+ }, onKeyDown: (event) => {
132
+ if (event.key !== 'Enter')
133
+ return;
134
+ // IME guard (ADR-0011 §8): composition flag, native isComposing and keyCode 229.
135
+ if (composing.current || event.nativeEvent.isComposing || event.keyCode === 229) {
136
+ event.preventDefault();
137
+ return;
138
+ }
139
+ event.preventDefault();
140
+ send();
141
+ } }), _jsx(Button, { type: "submit", size: "sm", variant: "secondary", className: "rl-agent-terminal__send", iconStart: _jsx(AgentIcon, { name: "send" }), children: m.terminalSend })] }));
142
+ }
143
+ /**
144
+ * Several terminals as tabs (Tabs from `@wzrhine/react`: roving focus, arrow keys, Home / End).
145
+ * Each tab names the terminal and its status, so the status is readable without opening it.
146
+ */
147
+ export function TerminalTabs({ terminals, value, defaultValue, onValueChange, onInput, onStop, onLoadEarlier, onReadLatest, onLoadMoreHistory, headingLevel, messages: override, className, ...rest }) {
148
+ const m = useWorkspaceMessages(override);
149
+ const status = useAgentMessages().status;
150
+ if (terminals.length === 0) {
151
+ return (_jsx("p", { ...rest, className: cx('rl-agent-terminal-tabs__empty', className), children: m.terminalEmpty }));
152
+ }
153
+ return (_jsx("div", { ...rest, className: cx('rl-agent-terminal-tabs', className), children: _jsxs(Tabs, { value: value, defaultValue: value === undefined ? (defaultValue ?? terminals[0].id) : undefined, onValueChange: onValueChange, size: "sm", children: [_jsx(TabList, { "aria-label": m.terminalTabs, children: terminals.map((terminal) => (_jsx(Tab, { value: terminal.id, meta: status.terminal[terminal.status], children: terminal.name }, terminal.id))) }), terminals.map((terminal) => (_jsx(TabPanel, { value: terminal.id, className: "rl-agent-terminal-tabs__panel", children: _jsx(PersistentTerminal, { terminal: terminal, onInput: onInput, onStop: onStop, onLoadEarlier: onLoadEarlier, onReadLatest: onReadLatest, onLoadMoreHistory: onLoadMoreHistory, headingLevel: headingLevel, hideName: true, messages: override }) }, terminal.id)))] }) }));
154
+ }
155
+ //# sourceMappingURL=PersistentTerminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistentTerminal.js","sourceRoot":"","sources":["../../../src/components/workspace/PersistentTerminal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import * as React from 'react';
2
+ import type { CitationView, PinnedSummaryView } from '@wzrhine/agent-core';
3
+ import type { HeadingLevel, WorkspaceMessagesProp } from './shared.js';
4
+ export type PinnedSummaryProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
5
+ summary: PinnedSummaryView;
6
+ /** Body expanded (controlled). */
7
+ expanded?: boolean;
8
+ defaultExpanded?: boolean;
9
+ onExpandedChange?: (expanded: boolean) => void;
10
+ /** Pin state; the pin toggle is drawn only with `onPinChange`. */
11
+ pinned?: boolean;
12
+ onPinChange?: (pinned: boolean) => void;
13
+ /** Opens a source. Without it sources are listed as text. */
14
+ onOpenSource?: (citation: CitationView) => void;
15
+ /** Markdown renderer for the body; default is plain text with kept line breaks. */
16
+ renderMarkdown?: (source: string) => React.ReactNode;
17
+ headingLevel?: HeadingLevel;
18
+ messages?: WorkspaceMessagesProp;
19
+ };
20
+ /**
21
+ * PinnedSummary (atlas 28): read-only card with the important context of a conversation. The body
22
+ * sits in a Collapsible (CSS height transition, interruptible, instant under reduced motion).
23
+ * Content updates never replay an entrance; `updating` shows a small Spinner with 「正在更新」,
24
+ * `stale` a warning sentence, `missing` an empty sentence. Unavailable sources stay listed but
25
+ * disabled, with the reason as visible text.
26
+ */
27
+ export declare const PinnedSummary: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children"> & {
28
+ summary: PinnedSummaryView;
29
+ /** Body expanded (controlled). */
30
+ expanded?: boolean;
31
+ defaultExpanded?: boolean;
32
+ onExpandedChange?: (expanded: boolean) => void;
33
+ /** Pin state; the pin toggle is drawn only with `onPinChange`. */
34
+ pinned?: boolean;
35
+ onPinChange?: (pinned: boolean) => void;
36
+ /** Opens a source. Without it sources are listed as text. */
37
+ onOpenSource?: (citation: CitationView) => void;
38
+ /** Markdown renderer for the body; default is plain text with kept line breaks. */
39
+ renderMarkdown?: (source: string) => React.ReactNode;
40
+ headingLevel?: HeadingLevel;
41
+ messages?: WorkspaceMessagesProp;
42
+ } & React.RefAttributes<HTMLElement>>;
43
+ //# sourceMappingURL=PinnedSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PinnedSummary.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/PinnedSummary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK3E,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACrF,OAAO,EAAE,iBAAiB,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,6DAA6D;IAC7D,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD,mFAAmF;IACnF,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IACrD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa;aAvBf,iBAAiB;IAC1B,kCAAkC;eACvB,OAAO;sBACA,OAAO;uBACN,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI;IAC9C,kEAAkE;aACzD,OAAO;kBACF,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI;IACvC,6DAA6D;mBAC9C,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI;IAC/C,mFAAmF;qBAClE,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS;mBACrC,YAAY;eAChB,qBAAqB;qCA4GhC,CAAC"}
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Collapsible, IconButton, Spinner } from '@wzrhine/react';
5
+ import { useAgentFormat } from '../../provider/AgentMessages.js';
6
+ import { AgentIcon } from '../../primitives/icons.js';
7
+ import { cx } from '../../utils/cx.js';
8
+ import { Heading, useWorkspaceMessages } from './shared.js';
9
+ /**
10
+ * PinnedSummary (atlas 28): read-only card with the important context of a conversation. The body
11
+ * sits in a Collapsible (CSS height transition, interruptible, instant under reduced motion).
12
+ * Content updates never replay an entrance; `updating` shows a small Spinner with 「正在更新」,
13
+ * `stale` a warning sentence, `missing` an empty sentence. Unavailable sources stay listed but
14
+ * disabled, with the reason as visible text.
15
+ */
16
+ export const PinnedSummary = React.forwardRef(function PinnedSummary({ summary, expanded, defaultExpanded = true, onExpandedChange, pinned, onPinChange, onOpenSource, renderMarkdown, headingLevel = 3, messages: override, className, ...rest }, ref) {
17
+ const m = useWorkspaceMessages(override);
18
+ const format = useAgentFormat();
19
+ const id = React.useId();
20
+ const titleId = `${id}-title`;
21
+ const sources = summary.sources ?? [];
22
+ return (_jsxs("section", { ...rest, ref: ref, className: cx('rl-agent-summary', className), "aria-labelledby": titleId, "data-status": summary.status, children: [_jsxs("header", { className: "rl-agent-summary__header", children: [_jsx(AgentIcon, { name: "pin", className: "rl-agent-summary__icon" }), _jsx(Heading, { level: headingLevel, id: titleId, className: "rl-agent-summary__title", children: summary.title }), onPinChange && (_jsx(IconButton, { size: "sm", variant: "ghost", icon: _jsx(AgentIcon, { name: "pin" }), label: m.summaryPin, pressed: Boolean(pinned), onClick: () => onPinChange(!pinned) }))] }), _jsxs("p", { className: "rl-agent-summary__state", role: "status", children: [summary.status === 'updating' && (_jsxs(_Fragment, { children: [_jsx(Spinner, { size: "sm" }), _jsx("span", { children: m.summaryStatus.updating })] })), summary.status === 'stale' && (_jsxs("span", { className: "rl-agent-summary__stale", children: [_jsx(AgentIcon, { name: "warning" }), m.summaryStatus.stale] }))] }), summary.status === 'missing' && !summary.body ? (_jsx("p", { className: "rl-agent-summary__missing", children: m.summaryStatus.missing })) : (_jsxs(Collapsible, { className: "rl-agent-summary__disclosure", open: expanded, defaultOpen: expanded === undefined ? defaultExpanded : undefined, onOpenChange: onExpandedChange, trigger: _jsx("span", { children: m.summaryToggle }), children: [_jsx("div", { className: "rl-agent-summary__body", children: renderMarkdown ? renderMarkdown(summary.body) : _jsx("p", { className: "rl-agent-summary__text", children: summary.body }) }), summary.tags && summary.tags.length > 0 && (_jsx("ul", { className: "rl-agent-summary__tags", "aria-label": m.summaryTags, children: summary.tags.map((tag) => (_jsx("li", { className: "rl-agent-summary__tag", children: tag }, tag))) })), sources.length > 0 && (_jsxs("div", { className: "rl-agent-summary__sources", children: [_jsx("p", { className: "rl-agent-summary__sources-title", id: `${id}-sources`, children: m.summarySources(sources.length) }), _jsx("ul", { className: "rl-agent-summary__source-list", "aria-labelledby": `${id}-sources`, children: sources.map((source) => (_jsx("li", { children: _jsx(SourceButton, { source: source, onOpenSource: onOpenSource, m: m }) }, source.id))) })] }))] })), summary.updatedAt && (_jsx("p", { className: "rl-agent-summary__updated", children: _jsx("time", { dateTime: summary.updatedAt, children: m.summaryUpdatedAt(format.time(summary.updatedAt)) }) }))] }));
23
+ });
24
+ function SourceButton({ source, onOpenSource, m }) {
25
+ const reasonId = React.useId();
26
+ const content = (_jsxs(_Fragment, { children: [_jsxs("span", { className: "rl-agent-summary__source-index", children: ["[", source.index, "]"] }), _jsx("span", { className: "rl-agent-summary__source-title", children: source.title })] }));
27
+ const reason = source.unavailable ? (_jsx("span", { id: reasonId, className: "rl-agent-summary__source-reason", children: source.reason ?? m.summarySourceUnavailable })) : null;
28
+ if (!onOpenSource) {
29
+ return (_jsxs("span", { className: "rl-agent-summary__source", "data-unavailable": source.unavailable || undefined, title: source.locator, children: [content, reason] }));
30
+ }
31
+ return (_jsxs("span", { className: "rl-agent-summary__source-row", children: [_jsx("button", { type: "button", className: "rl-agent-summary__source", disabled: source.unavailable, "aria-label": m.summaryOpenSource(source.title), "aria-describedby": source.unavailable ? reasonId : undefined, title: source.locator, "data-unavailable": source.unavailable || undefined, onClick: () => onOpenSource(source), children: content }), reason] }));
32
+ }
33
+ //# sourceMappingURL=PinnedSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PinnedSummary.js","sourceRoot":"","sources":["../../../src/components/workspace/PinnedSummary.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+ import type { AgentActionHandler, RunSummaryView } from '@wzrhine/agent-core';
3
+ import type { HeadingLevel, WorkspaceMessagesProp } from './shared.js';
4
+ export type RunSummaryProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
5
+ run: RunSummaryView;
6
+ onOpenTrace?: () => void;
7
+ onOpenDetails?: () => void;
8
+ /** Retries persisting the result (`persistence: 'failed'`). */
9
+ onRetrySave?: AgentActionHandler;
10
+ /** Opens one artifact from the mini list. */
11
+ onOpenArtifact?: (id: string) => void;
12
+ headingLevel?: HeadingLevel;
13
+ messages?: WorkspaceMessagesProp;
14
+ };
15
+ /**
16
+ * RunSummary (atlas 36): outcome of one run. Run success and persistence are separate facts: a
17
+ * completed run whose result is still saving shows both (「已完成」 + 「结果保存中」), a failed save
18
+ * offers 「重试保存」. `sideEffects` adds a sentence asking the user to check external state.
19
+ * Token counts carry their completeness label.
20
+ *
21
+ * Motion: when the status settles while mounted, the frame colour transitions once (`fast`,
22
+ * CSS); nothing loops. Reduced motion → the colour changes directly.
23
+ */
24
+ export declare const RunSummary: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children"> & {
25
+ run: RunSummaryView;
26
+ onOpenTrace?: () => void;
27
+ onOpenDetails?: () => void;
28
+ /** Retries persisting the result (`persistence: 'failed'`). */
29
+ onRetrySave?: AgentActionHandler;
30
+ /** Opens one artifact from the mini list. */
31
+ onOpenArtifact?: (id: string) => void;
32
+ headingLevel?: HeadingLevel;
33
+ messages?: WorkspaceMessagesProp;
34
+ } & React.RefAttributes<HTMLElement>>;
35
+ //# sourceMappingURL=RunSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunSummary.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/RunSummary.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAc,MAAM,qBAAqB,CAAC;AAM1F,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IAClF,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,6CAA6C;IAC7C,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAYF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU;SA9BhB,cAAc;kBACL,MAAM,IAAI;oBACR,MAAM,IAAI;IAC1B,+DAA+D;kBACjD,kBAAkB;IAChC,6CAA6C;qBAC5B,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI;mBACtB,YAAY;eAChB,qBAAqB;qCA+IhC,CAAC"}
@@ -0,0 +1,46 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Button } from '@wzrhine/react';
5
+ import { runStatusMeta } from '@wzrhine/agent-core';
6
+ import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
7
+ import { AgentStatus, statusProps } from '../../primitives/AgentStatus.js';
8
+ import { AgentIcon } from '../../primitives/icons.js';
9
+ import { cx } from '../../utils/cx.js';
10
+ import { completenessTag, Heading, useWorkspaceMessages } from './shared.js';
11
+ const partialMeta = { glyph: 'unknown', tone: 'warning', active: false, settled: true };
12
+ const savingMeta = { glyph: 'saving', tone: 'info', active: true, settled: false };
13
+ const persistenceMeta = {
14
+ saved: { glyph: 'done', tone: 'success', active: false, settled: true },
15
+ saving: savingMeta,
16
+ failed: { glyph: 'failed', tone: 'danger', active: false, settled: true },
17
+ unknown: { glyph: 'unknown', tone: 'warning', active: false, settled: false },
18
+ };
19
+ const artifactTone = { generating: 'info', partial: 'warning', saved: 'success', failed: 'danger', unavailable: 'neutral', stale: 'warning' };
20
+ /**
21
+ * RunSummary (atlas 36): outcome of one run. Run success and persistence are separate facts: a
22
+ * completed run whose result is still saving shows both (「已完成」 + 「结果保存中」), a failed save
23
+ * offers 「重试保存」. `sideEffects` adds a sentence asking the user to check external state.
24
+ * Token counts carry their completeness label.
25
+ *
26
+ * Motion: when the status settles while mounted, the frame colour transitions once (`fast`,
27
+ * CSS); nothing loops. Reduced motion → the colour changes directly.
28
+ */
29
+ export const RunSummary = React.forwardRef(function RunSummary({ run, onOpenTrace, onOpenDetails, onRetrySave, onOpenArtifact, headingLevel = 3, messages: override, className, ...rest }, ref) {
30
+ const m = useWorkspaceMessages(override);
31
+ const status = useAgentMessages().status;
32
+ const format = useAgentFormat();
33
+ const id = React.useId();
34
+ const titleId = `${id}-title`;
35
+ const outcome = run.status === 'partial'
36
+ ? statusProps(partialMeta, m.runPartial)
37
+ : run.status === 'saving'
38
+ ? statusProps(savingMeta, m.runSaving)
39
+ : statusProps(runStatusMeta[run.status], status.run[run.status]);
40
+ // `status: 'saving'` already says it; don't repeat the persistence pill.
41
+ const persistence = run.persistence && run.persistence !== 'saved' && !(run.status === 'saving' && run.persistence === 'saving') ? run.persistence : undefined;
42
+ const tag = run.usage ? completenessTag(run.usage.completeness, status.completeness) : undefined;
43
+ const settled = run.status === 'completed' || run.status === 'failed' || run.status === 'cancelled' || run.status === 'interrupted' || run.status === 'partial';
44
+ return (_jsxs("section", { ...rest, ref: ref, className: cx('rl-agent-run-summary', className), "aria-labelledby": titleId, "data-status": run.status, "data-tone": outcome.tone, "data-settled": settled || undefined, children: [_jsxs("header", { className: "rl-agent-run-summary__header", children: [_jsx(Heading, { level: headingLevel, id: titleId, className: "rl-agent-run-summary__title", children: run.title ?? m.runTitle }), _jsxs("span", { role: "status", className: "rl-agent-run-summary__outcome", children: [_jsx(AgentStatus, { ...outcome, size: "md" }), persistence && _jsx(AgentStatus, { ...statusProps(persistenceMeta[persistence], m.runPersistence[persistence]) })] })] }), _jsxs("dl", { className: "rl-agent-run-summary__metrics", "aria-label": m.runMetrics, children: [run.elapsedMs !== undefined && (_jsxs("div", { children: [_jsx("dt", { children: m.runElapsed }), _jsx("dd", { children: format.duration(run.elapsedMs) })] })), run.toolCount !== undefined && (_jsxs("div", { children: [_jsx("dt", { children: m.runTools }), _jsx("dd", { children: m.runToolCount(run.toolCount) })] })), run.failedTools !== undefined && run.failedTools > 0 && (_jsxs("div", { "data-tone": "danger", children: [_jsx("dt", { children: m.runFailedTools }), _jsx("dd", { children: m.runToolCount(run.failedTools) })] })), run.usage && (_jsxs("div", { children: [_jsx("dt", { children: m.runTokens }), _jsxs("dd", { children: [run.usage.tokens !== undefined && run.usage.completeness !== 'unknown' ? format.compact(run.usage.tokens) : status.completeness.unknown, tag && run.usage.completeness !== 'unknown' && _jsx("span", { className: "rl-agent-run-summary__tag", children: tag })] })] }))] }), run.artifacts && run.artifacts.length > 0 && (_jsxs("div", { className: "rl-agent-run-summary__artifacts", children: [_jsx("p", { className: "rl-agent-run-summary__label", id: `${id}-artifacts`, children: m.runArtifacts }), _jsx("ul", { "aria-labelledby": `${id}-artifacts`, children: run.artifacts.map((artifact) => (_jsxs("li", { className: "rl-agent-run-summary__artifact", children: [onOpenArtifact && artifact.status !== 'unavailable' ? (_jsx("button", { type: "button", className: "rl-agent-run-summary__artifact-title", title: artifact.title, onClick: () => onOpenArtifact(artifact.id), children: artifact.title })) : (_jsx("span", { className: "rl-agent-run-summary__artifact-title", title: artifact.title, children: artifact.title })), _jsx("span", { className: "rl-agent-run-summary__artifact-status", "data-tone": artifactTone[artifact.status], children: m.artifactStatus[artifact.status] })] }, artifact.id))) })] })), run.sideEffects && (_jsxs("p", { className: "rl-agent-run-summary__notice", "data-tone": "warning", children: [_jsx(AgentIcon, { name: "warning" }), m.runSideEffects] })), (onOpenTrace || onOpenDetails || (run.persistence === 'failed' && onRetrySave)) && (_jsxs("div", { className: "rl-agent-run-summary__actions", children: [run.persistence === 'failed' && onRetrySave && (_jsx(Button, { size: "sm", variant: "primary", iconStart: _jsx(AgentIcon, { name: "retry" }), onClick: () => void onRetrySave(), children: m.runRetrySave })), onOpenTrace && (_jsx(Button, { size: "sm", variant: "secondary", iconStart: _jsx(AgentIcon, { name: "list" }), onClick: onOpenTrace, children: m.runOpenTrace })), onOpenDetails && (_jsx(Button, { size: "sm", variant: "ghost", onClick: onOpenDetails, children: m.runOpenDetails }))] }))] }));
45
+ });
46
+ //# sourceMappingURL=RunSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunSummary.js","sourceRoot":"","sources":["../../../src/components/workspace/RunSummary.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import * as React from 'react';
2
+ import type { SparkPhase, SubagentView } from '@wzrhine/agent-core';
3
+ import type { HeadingLevel, WorkspaceMessagesProp } from './shared.js';
4
+ /** AgentSpark phase for a sub-agent, or `undefined` when nothing is in progress. */
5
+ export declare function subagentSparkPhase(agent: Pick<SubagentView, 'status' | 'phase'>): SparkPhase | undefined;
6
+ export type SubAgentCardProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
7
+ agent: SubagentView;
8
+ /** Opens the sub-task; draws 「查看子任务」. Not drawn for inherited records. */
9
+ onOpen?: (id: string) => void;
10
+ /** Opens the read-only snapshot of an inherited record; draws 「查看快照」. */
11
+ onOpenSnapshot?: (id: string) => void;
12
+ headingLevel?: HeadingLevel;
13
+ /** Animate the spark (default). `false` forces the static frame, e.g. in long lists. */
14
+ animate?: boolean;
15
+ messages?: WorkspaceMessagesProp;
16
+ };
17
+ /**
18
+ * SubAgentCard (atlas 24): one child agent tracked separately from its parent. Usage is shown as
19
+ * a number with a completeness label (「部分用量」); no progress bar is derived from the status.
20
+ * `needs-attention` / `waiting-user` get a warning frame plus a sentence, never colour alone.
21
+ *
22
+ * `agent.inherited` marks a record taken over from an earlier run / parent: a 「继承的子任务记录」
23
+ * badge, no attention prompt and no live actions; only `onOpenSnapshot` (「查看快照」) is offered.
24
+ *
25
+ * Accessibility: an `<article>` with a heading (the name); the open action is a separate button
26
+ * inside, so Tab moves card by card through their buttons. Motion: AgentSpark only while active
27
+ * (shared lifecycle, static under reduced motion); no auto-scroll of the parent.
28
+ */
29
+ export declare const SubAgentCard: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children"> & {
30
+ agent: SubagentView;
31
+ /** Opens the sub-task; draws 「查看子任务」. Not drawn for inherited records. */
32
+ onOpen?: (id: string) => void;
33
+ /** Opens the read-only snapshot of an inherited record; draws 「查看快照」. */
34
+ onOpenSnapshot?: (id: string) => void;
35
+ headingLevel?: HeadingLevel;
36
+ /** Animate the spark (default). `false` forces the static frame, e.g. in long lists. */
37
+ animate?: boolean;
38
+ messages?: WorkspaceMessagesProp;
39
+ } & React.RefAttributes<HTMLElement>>;
40
+ export type SubAgentListProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
41
+ agents: SubagentView[];
42
+ onOpen?: (id: string) => void;
43
+ onOpenSnapshot?: (id: string) => void;
44
+ /** Put inherited records under their own 「继承的子任务记录」 heading after the live ones. */
45
+ groupInherited?: boolean;
46
+ /** Level of each card heading; the list heading (`title`) is one level above. */
47
+ headingLevel?: HeadingLevel;
48
+ /** Visible list heading; omitted → the list is named by `aria-label` only. */
49
+ title?: React.ReactNode;
50
+ animate?: boolean;
51
+ messages?: WorkspaceMessagesProp;
52
+ };
53
+ /**
54
+ * Several sub-agents as a list of cards. Duplicate ids are dropped (first wins); order is the
55
+ * given order. Each card keeps its own heading so screen-reader users can jump between them.
56
+ * `groupInherited` moves inherited records into a second list under its own heading (one level
57
+ * above the cards); the given order is kept inside each group.
58
+ */
59
+ export declare function SubAgentList({ agents, onOpen, onOpenSnapshot, groupInherited, headingLevel, title, animate, messages: override, className, ...rest }: SubAgentListProps): React.JSX.Element;
60
+ //# sourceMappingURL=SubAgentCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubAgentCard.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/SubAgentCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,UAAU,EAAkB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOpF,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,UAAU,GAAG,SAAS,CAYxG;AAID,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACpF,KAAK,EAAE,YAAY,CAAC;IACpB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,yEAAyE;IACzE,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY;WAvBhB,YAAY;IACnB,0EAA0E;aACjE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI;IAC7B,yEAAyE;qBACxD,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI;mBACtB,YAAY;IAC3B,wFAAwF;cAC9E,OAAO;eACN,qBAAqB;qCAuGhC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACpF,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,oFAAoF;IACpF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iFAAiF;IACjF,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,MAAM,EACN,cAAc,EACd,cAAsB,EACtB,YAAgB,EAChB,KAAK,EACL,OAAO,EACP,QAAQ,EAAE,QAAQ,EAClB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,iBAAiB,qBA2CnB"}
@@ -0,0 +1,73 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Button } from '@wzrhine/react';
5
+ import { sparkPhase, subagentStatusMeta } from '@wzrhine/agent-core';
6
+ import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
7
+ import { AgentSpark } from '../../primitives/AgentSpark.js';
8
+ import { AgentStatus, statusProps } from '../../primitives/AgentStatus.js';
9
+ import { AgentIcon } from '../../primitives/icons.js';
10
+ import { cx } from '../../utils/cx.js';
11
+ import { Heading, useWorkspaceMessages } from './shared.js';
12
+ /** AgentSpark phase for a sub-agent, or `undefined` when nothing is in progress. */
13
+ export function subagentSparkPhase(agent) {
14
+ switch (agent.status) {
15
+ case 'running':
16
+ return sparkPhase('running', agent.phase);
17
+ case 'preparing':
18
+ case 'queued':
19
+ return 'responding';
20
+ case 'waiting-children':
21
+ return 'waiting';
22
+ default:
23
+ return undefined;
24
+ }
25
+ }
26
+ const ATTENTION = ['needs-attention', 'waiting-user'];
27
+ /**
28
+ * SubAgentCard (atlas 24): one child agent tracked separately from its parent. Usage is shown as
29
+ * a number with a completeness label (「部分用量」); no progress bar is derived from the status.
30
+ * `needs-attention` / `waiting-user` get a warning frame plus a sentence, never colour alone.
31
+ *
32
+ * `agent.inherited` marks a record taken over from an earlier run / parent: a 「继承的子任务记录」
33
+ * badge, no attention prompt and no live actions; only `onOpenSnapshot` (「查看快照」) is offered.
34
+ *
35
+ * Accessibility: an `<article>` with a heading (the name); the open action is a separate button
36
+ * inside, so Tab moves card by card through their buttons. Motion: AgentSpark only while active
37
+ * (shared lifecycle, static under reduced motion); no auto-scroll of the parent.
38
+ */
39
+ export const SubAgentCard = React.forwardRef(function SubAgentCard({ agent, onOpen, onOpenSnapshot, headingLevel = 3, animate = true, messages: override, className, ...rest }, ref) {
40
+ const m = useWorkspaceMessages(override);
41
+ const status = useAgentMessages().status;
42
+ const format = useAgentFormat();
43
+ const id = React.useId();
44
+ const nameId = `${id}-name`;
45
+ const meta = subagentStatusMeta[agent.status];
46
+ const inherited = Boolean(agent.inherited);
47
+ const spark = inherited ? undefined : subagentSparkPhase(agent);
48
+ const attention = !inherited && (ATTENTION.includes(agent.status) || (agent.pendingInput ?? 0) > 0);
49
+ const label = agent.status === 'running' && agent.phase ? status.phase[agent.phase] : status.subagent[agent.status];
50
+ const parent = agent.parentLabel ?? (agent.parentId ? m.subagentParent(agent.parentId) : undefined);
51
+ const usage = agent.usage;
52
+ return (_jsxs("article", { ...rest, ref: ref, className: cx('rl-agent-subagent', className), "aria-labelledby": nameId, "data-status": agent.status, "data-attention": attention || undefined, "data-inherited": inherited || undefined, children: [_jsxs("header", { className: "rl-agent-subagent__header", children: [spark ? _jsx(AgentSpark, { phase: spark, animate: animate }) : _jsx(AgentIcon, { name: "agent", className: "rl-agent-subagent__icon" }), _jsx(Heading, { level: headingLevel, id: nameId, className: "rl-agent-subagent__name", children: agent.name }), _jsx(AgentStatus, { className: "rl-agent-subagent__status", ...statusProps(meta, label), active: false, meta: agent.elapsedMs !== undefined ? format.duration(agent.elapsedMs) : undefined })] }), inherited && (_jsxs("p", { className: "rl-agent-subagent__inherited", children: [_jsx(AgentIcon, { name: "history" }), _jsx("span", { children: m.subagentInherited }), _jsx("span", { className: "rl-agent-subagent__tag", children: m.terminalReadOnlyShort })] })), parent && _jsx("p", { className: "rl-agent-subagent__parent", children: parent }), _jsx("p", { className: "rl-agent-subagent__task", children: agent.task }), (usage || agent.resultAvailable) && (_jsxs("p", { className: "rl-agent-subagent__facts", children: [usage && (_jsxs("span", { className: "rl-agent-subagent__usage", children: [usage.tokens !== undefined && usage.completeness !== 'unknown' ? m.subagentTokens(format.compact(usage.tokens)) : m.subagentUsageUnknown, usage.completeness === 'partial' && _jsx("span", { className: "rl-agent-subagent__tag", children: m.subagentPartialUsage }), usage.completeness === 'estimated' && _jsx("span", { className: "rl-agent-subagent__tag", children: m.subagentEstimatedUsage })] })), agent.resultAvailable && (_jsxs("span", { className: "rl-agent-subagent__result", children: [_jsx(AgentIcon, { name: "check" }), m.subagentResult] }))] })), attention && (_jsxs("p", { className: "rl-agent-subagent__attention", children: [_jsx(AgentIcon, { name: "warning" }), _jsx("span", { children: m.subagentAttention }), (agent.pendingInput ?? 0) > 0 && _jsx("span", { className: "rl-agent-subagent__badge", children: m.subagentPendingInput(agent.pendingInput) })] })), !inherited && onOpen && (_jsx("div", { className: "rl-agent-subagent__actions", children: _jsx(Button, { size: "sm", variant: attention ? 'primary' : 'secondary', "aria-label": m.subagentOpenNamed(agent.name), onClick: () => onOpen(agent.id), children: m.subagentOpen }) })), inherited && onOpenSnapshot && (_jsx("div", { className: "rl-agent-subagent__actions", children: _jsx(Button, { size: "sm", variant: "secondary", iconStart: _jsx(AgentIcon, { name: "history" }), "aria-label": m.subagentOpenSnapshotNamed(agent.name), onClick: () => onOpenSnapshot(agent.id), children: m.subagentOpenSnapshot }) }))] }));
53
+ });
54
+ /**
55
+ * Several sub-agents as a list of cards. Duplicate ids are dropped (first wins); order is the
56
+ * given order. Each card keeps its own heading so screen-reader users can jump between them.
57
+ * `groupInherited` moves inherited records into a second list under its own heading (one level
58
+ * above the cards); the given order is kept inside each group.
59
+ */
60
+ export function SubAgentList({ agents, onOpen, onOpenSnapshot, groupInherited = false, headingLevel = 3, title, animate, messages: override, className, ...rest }) {
61
+ const m = useWorkspaceMessages(override);
62
+ const id = React.useId();
63
+ const unique = React.useMemo(() => {
64
+ const seen = new Set();
65
+ return agents.filter((a) => (seen.has(a.id) ? false : (seen.add(a.id), true)));
66
+ }, [agents]);
67
+ const titleLevel = Math.max(2, headingLevel - 1);
68
+ const live = groupInherited ? unique.filter((a) => !a.inherited) : unique;
69
+ const inheritedGroup = groupInherited ? unique.filter((a) => a.inherited) : [];
70
+ const renderItems = (items) => (_jsx("ul", { className: "rl-agent-subagent-list__items", children: items.map((agent) => (_jsx("li", { children: _jsx(SubAgentCard, { agent: agent, onOpen: onOpen, onOpenSnapshot: onOpenSnapshot, headingLevel: headingLevel, animate: animate, messages: override }) }, agent.id))) }));
71
+ return (_jsxs("section", { ...rest, className: cx('rl-agent-subagent-list', className), "aria-labelledby": title != null ? `${id}-title` : undefined, "aria-label": title == null ? m.subagentList : undefined, children: [title != null && (_jsx(Heading, { level: titleLevel, id: `${id}-title`, className: "rl-agent-subagent-list__title", children: title })), unique.length === 0 ? (_jsx("p", { className: "rl-agent-subagent-list__empty", children: m.subagentEmpty })) : (_jsxs(_Fragment, { children: [live.length > 0 && renderItems(live), inheritedGroup.length > 0 && (_jsxs("div", { className: "rl-agent-subagent-list__group", role: "group", "aria-labelledby": `${id}-inherited`, children: [_jsx(Heading, { level: titleLevel, id: `${id}-inherited`, className: "rl-agent-subagent-list__group-title", children: m.subagentInheritedGroup }), renderItems(inheritedGroup)] }))] }))] }));
72
+ }
73
+ //# sourceMappingURL=SubAgentCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubAgentCard.js","sourceRoot":"","sources":["../../../src/components/workspace/SubAgentCard.tsx"],"names":[],"mappings":"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"}