@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,30 @@
1
+ import type * as React from 'react';
2
+ import type { ArtifactView, MessagePartView, ToolCallView } from '@wzrhine/agent-core';
3
+ export interface MarkdownRenderContext {
4
+ /** Part or thinking id the source belongs to. */
5
+ id: string;
6
+ /** The source is still growing; a renderer may skip expensive work until it settles. */
7
+ streaming: boolean;
8
+ }
9
+ export type CodePart = Extract<MessagePartView, {
10
+ type: 'code';
11
+ }>;
12
+ export type CustomPart = Extract<MessagePartView, {
13
+ type: 'custom';
14
+ }>;
15
+ /**
16
+ * Content renderers. Every entry is optional: without `markdown` the source is shown as plain
17
+ * text (line breaks kept, fenced code as a CodeBlock, HTML never parsed); without `code` the
18
+ * built-in CodeBlock is used; a `custom` part whose `renderer` key is missing shows a readable
19
+ * fallback with its summary instead of rendering nothing.
20
+ */
21
+ export interface MessagePartRenderers {
22
+ markdown?: (source: string, context: MarkdownRenderContext) => React.ReactNode;
23
+ code?: (part: CodePart) => React.ReactNode;
24
+ custom?: Record<string, (part: CustomPart) => React.ReactNode>;
25
+ }
26
+ /** Renders a tool call (wired to the tools family's ToolRecord by the host). */
27
+ export type ToolRenderer = (tool: ToolCallView) => React.ReactNode;
28
+ /** Renders an artifact (wired to the workspace family's ArtifactCard by the host). */
29
+ export type ArtifactRenderer = (artifact: ArtifactView) => React.ReactNode;
30
+ //# sourceMappingURL=renderers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderers.d.ts","sourceRoot":"","sources":["../../../src/components/message/renderers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOvF,MAAM,WAAW,qBAAqB;IACpC,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,wFAAwF;IACxF,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/E,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,KAAK,CAAC,SAAS,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;CAChE;AAED,gFAAgF;AAChF,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,KAAK,CAAC,SAAS,CAAC;AAEnE,sFAAsF;AACtF,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,YAAY,KAAK,KAAK,CAAC,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=renderers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../../src/components/message/renderers.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ /** How long the copied / failed feedback stays before the control returns to its idle label. */
2
+ export declare const COPY_FEEDBACK_MS = 1200;
3
+ export type CopyState = 'idle' | 'copied' | 'failed';
4
+ /**
5
+ * Host copy handler. Return `false` (or throw / reject) to report a failure; anything else counts
6
+ * as copied. Without a handler the text goes to `navigator.clipboard.writeText`.
7
+ */
8
+ export type CopyHandler = (text: string) => void | boolean | Promise<void | boolean>;
9
+ /** True after mount when the async Clipboard API exists (never during SSR, so markup matches). */
10
+ export declare function useClipboardAvailable(): boolean;
11
+ /** Copy with a short copied / failed state. The timeout only resets feedback; it never polls. */
12
+ export declare function useCopy(onCopy?: CopyHandler): {
13
+ state: CopyState;
14
+ copy: (text: string) => Promise<void>;
15
+ };
16
+ /** Text to announce after a minimum gap, so fast phase changes are merged (ADR-0012 §4). */
17
+ export declare function useThrottledText(text: string, intervalMs: number): string;
18
+ //# sourceMappingURL=use-copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-copy.d.ts","sourceRoot":"","sources":["../../../src/components/message/use-copy.ts"],"names":[],"mappings":"AAIA,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;AAErF,kGAAkG;AAClG,wBAAgB,qBAAqB,IAAI,OAAO,CAM/C;AAED,iGAAiG;AACjG,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAmCzG;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAazE"}
@@ -0,0 +1,65 @@
1
+ 'use client';
2
+ import * as React from 'react';
3
+ /** How long the copied / failed feedback stays before the control returns to its idle label. */
4
+ export const COPY_FEEDBACK_MS = 1200;
5
+ /** True after mount when the async Clipboard API exists (never during SSR, so markup matches). */
6
+ export function useClipboardAvailable() {
7
+ const [available, setAvailable] = React.useState(false);
8
+ React.useEffect(() => {
9
+ setAvailable(typeof navigator !== 'undefined' && typeof navigator.clipboard?.writeText === 'function');
10
+ }, []);
11
+ return available;
12
+ }
13
+ /** Copy with a short copied / failed state. The timeout only resets feedback; it never polls. */
14
+ export function useCopy(onCopy) {
15
+ const [state, setState] = React.useState('idle');
16
+ const timer = React.useRef(undefined);
17
+ const mounted = React.useRef(true);
18
+ React.useEffect(() => {
19
+ mounted.current = true;
20
+ return () => {
21
+ mounted.current = false;
22
+ clearTimeout(timer.current);
23
+ };
24
+ }, []);
25
+ const copy = React.useCallback(async (text) => {
26
+ clearTimeout(timer.current);
27
+ let ok = false;
28
+ try {
29
+ if (onCopy)
30
+ ok = (await onCopy(text)) !== false;
31
+ else if (typeof navigator !== 'undefined' && navigator.clipboard?.writeText) {
32
+ await navigator.clipboard.writeText(text);
33
+ ok = true;
34
+ }
35
+ }
36
+ catch {
37
+ ok = false;
38
+ }
39
+ if (!mounted.current)
40
+ return;
41
+ setState(ok ? 'copied' : 'failed');
42
+ timer.current = setTimeout(() => {
43
+ if (mounted.current)
44
+ setState('idle');
45
+ }, COPY_FEEDBACK_MS);
46
+ }, [onCopy]);
47
+ return { state, copy };
48
+ }
49
+ /** Text to announce after a minimum gap, so fast phase changes are merged (ADR-0012 §4). */
50
+ export function useThrottledText(text, intervalMs) {
51
+ const [shown, setShown] = React.useState(text);
52
+ const last = React.useRef(0);
53
+ React.useEffect(() => {
54
+ if (text === shown)
55
+ return undefined;
56
+ const wait = Math.max(0, last.current + intervalMs - Date.now());
57
+ const id = setTimeout(() => {
58
+ last.current = Date.now();
59
+ setShown(text);
60
+ }, wait);
61
+ return () => clearTimeout(id);
62
+ }, [text, shown, intervalMs]);
63
+ return shown;
64
+ }
65
+ //# sourceMappingURL=use-copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-copy.js","sourceRoot":"","sources":["../../../src/components/message/use-copy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import * as React from 'react';
2
+ import type { RunView } from '@wzrhine/agent-core';
3
+ import type { MessagePartRenderers, ToolRenderer } from '../message/renderers.js';
4
+ /**
5
+ * AgentProcess (atlas 09): the record of one run, grouped by model call.
6
+ *
7
+ * - Header: a disclosure trigger. While the run is active it shows AgentSpark + phase label +
8
+ * elapsed; once settled "N 次模型调用 · M 个操作" (+ "已展示" when truncated).
9
+ * - Each call is a `<section aria-label="模型调用 N">` with its status. Blocks in order:
10
+ * thinking → ThinkingBlock, text → muted stage text (with "已截取" when cut), tool →
11
+ * `renderTool` or a one-line fallback (nested children listed indented with a tree rule),
12
+ * pending-record → a "记录稍后到达" entry, with `onLoadRecord` as a button. Results are never
13
+ * invented for missing records.
14
+ * - Only the current step (the last block of the last running call) gets the accent rule.
15
+ * - Expanded by default while the run is active and collapsed once it settles, until the user
16
+ * toggles; after that the user's choice wins. `expanded` / `onExpandedChange` make it controlled.
17
+ * - `run.truncated`: a notice and, with `onOpenFull`, a button for the full record.
18
+ *
19
+ * Motion: header disclosure height (Collapsible), AgentSpark while active. Reduced: static.
20
+ */
21
+ export type AgentProcessProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {
22
+ run: RunView;
23
+ renderTool?: ToolRenderer;
24
+ renderers?: MessagePartRenderers;
25
+ expanded?: boolean;
26
+ defaultExpanded?: boolean;
27
+ onExpandedChange?: (expanded: boolean) => void;
28
+ onLoadRecord?: (blockId: string) => void;
29
+ onOpenFull?: (runId: string) => void;
30
+ onOpenThinking?: (thinkingId: string) => void;
31
+ /** Heading level of the call titles (default 3). */
32
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
33
+ };
34
+ export declare const AgentProcess: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & {
35
+ run: RunView;
36
+ renderTool?: ToolRenderer;
37
+ renderers?: MessagePartRenderers;
38
+ expanded?: boolean;
39
+ defaultExpanded?: boolean;
40
+ onExpandedChange?: (expanded: boolean) => void;
41
+ onLoadRecord?: (blockId: string) => void;
42
+ onOpenFull?: (runId: string) => void;
43
+ onOpenThinking?: (thinkingId: string) => void;
44
+ /** Heading level of the call titles (default 3). */
45
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
46
+ } & React.RefAttributes<HTMLDivElement>>;
47
+ //# sourceMappingURL=AgentProcess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentProcess.d.ts","sourceRoot":"","sources":["../../../src/components/process/AgentProcess.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAqC,OAAO,EAAgB,MAAM,qBAAqB,CAAC;AAQpG,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGlF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAAG;IACvF,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,oDAAoD;IACpD,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAClC,CAAC;AAiFF,eAAO,MAAM,YAAY;SA5FlB,OAAO;iBACC,YAAY;gBACb,oBAAoB;eACrB,OAAO;sBACA,OAAO;uBACN,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI;mBAC/B,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;iBAC3B,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;qBACnB,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI;IAC7C,oDAAoD;mBACrC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;wCA0KhC,CAAC"}
@@ -0,0 +1,78 @@
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, Collapsible } from '@wzrhine/react';
5
+ import { effectivePhase, runPhaseMeta, runStatusMeta, sparkPhase } from '@wzrhine/agent-core';
6
+ import { AgentSpark } from '../../primitives/AgentSpark.js';
7
+ import { AgentStatus, statusProps } from '../../primitives/AgentStatus.js';
8
+ import { StatusGlyph } from '../../primitives/StatusGlyph.js';
9
+ import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
10
+ import { cx } from '../../utils/cx.js';
11
+ import { MarkdownContent } from '../message/Markdown.js';
12
+ import { ToolFallback } from '../message/MessagePart.js';
13
+ import { ThinkingBlock } from '../message/ThinkingBlock.js';
14
+ const ACTIVE = new Set(['queued', 'running', 'waiting', 'cancelling']);
15
+ function countOperations(calls) {
16
+ const count = (tool) => 1 + (tool.children ?? []).reduce((n, c) => n + count(c), 0);
17
+ return calls.reduce((n, call) => n + call.blocks.reduce((m, b) => m + (b.type === 'tool' ? count(b.tool) : 0), 0), 0);
18
+ }
19
+ function ToolTree({ tool, renderTool, depth = 0 }) {
20
+ const t = useAgentMessages().message;
21
+ const children = tool.children ?? [];
22
+ return (_jsxs("div", { className: "rl-agent-process__tool", "data-depth": depth, "data-tool-id": tool.id, children: [renderTool ? renderTool(tool) : _jsx(ToolFallback, { tool: tool }), !renderTool && children.length > 0 && (_jsx("ul", { className: "rl-agent-process__children", "aria-label": t.toolChildren(children.length), children: children.map((child) => (_jsx("li", { className: "rl-agent-process__child", children: _jsx(ToolTree, { tool: child, depth: depth + 1 }) }, child.id))) }))] }));
23
+ }
24
+ function Block({ block, current, props, }) {
25
+ const t = useAgentMessages().message;
26
+ let content;
27
+ switch (block.type) {
28
+ case 'thinking':
29
+ content = _jsx(ThinkingBlock, { thinking: block.thinking, renderers: props.renderers, onOpenFull: props.onOpenThinking });
30
+ break;
31
+ case 'text':
32
+ content = (_jsxs("div", { className: "rl-agent-process__stage", children: [_jsx(MarkdownContent, { source: block.text, context: { id: block.id, streaming: false }, renderers: props.renderers }), block.truncated && _jsx("span", { className: "rl-agent-process__cut", children: t.stageTruncated })] }));
33
+ break;
34
+ case 'tool':
35
+ content = _jsx(ToolTree, { tool: block.tool, renderTool: props.renderTool });
36
+ break;
37
+ case 'pending-record':
38
+ content = (_jsxs("div", { className: "rl-agent-process__pending", children: [_jsx(StatusGlyph, { name: "pending", tone: "neutral", className: "rl-agent-process__pending-glyph" }), _jsx("span", { className: "rl-agent-process__pending-label", children: block.label }), _jsx("span", { className: "rl-agent-process__pending-note", children: t.pendingRecord }), props.onLoadRecord && (_jsx(Button, { size: "sm", variant: "ghost", onClick: () => props.onLoadRecord?.(block.id), children: t.loadRecord }))] }));
39
+ break;
40
+ default:
41
+ content = null;
42
+ }
43
+ return (_jsx("li", { className: "rl-agent-process__block", "data-block-type": block.type, "data-current": current || undefined, "aria-current": current ? 'step' : undefined, children: content }));
44
+ }
45
+ const callTone = { running: 'accent', completed: 'success', interrupted: 'warning', failed: 'danger' };
46
+ const callGlyph = { running: 'active', completed: 'done', interrupted: 'failed', failed: 'failed' };
47
+ export const AgentProcess = React.forwardRef(function AgentProcess({ run, renderTool, renderers, expanded, defaultExpanded, onExpandedChange, onLoadRecord, onOpenFull, onOpenThinking, headingLevel = 3, className, ...rest }, ref) {
48
+ const all = useAgentMessages();
49
+ const t = all.message;
50
+ const fmt = useAgentFormat();
51
+ const active = ACTIVE.has(run.status);
52
+ const [manual, setManual] = React.useState(defaultExpanded);
53
+ const open = expanded ?? manual ?? active;
54
+ const setOpen = (next) => {
55
+ if (expanded === undefined)
56
+ setManual(next);
57
+ onExpandedChange?.(next);
58
+ };
59
+ const calls = run.calls ?? [];
60
+ const operations = run.toolCount ?? countOperations(calls);
61
+ const phase = active ? effectivePhase(run.status, run.phase) : undefined;
62
+ const meta = phase ? runPhaseMeta[phase] : runStatusMeta[run.status];
63
+ const headline = active
64
+ ? (run.label ?? (phase ? all.status.phase[phase] : all.status.run[run.status]))
65
+ : run.truncated
66
+ ? t.processTruncatedSummary(calls.length, operations)
67
+ : t.processSummary(calls.length, operations);
68
+ const elapsed = run.elapsedMs !== undefined ? fmt.duration(run.elapsedMs) : undefined;
69
+ // Current step: last block of the last running call while the run is active.
70
+ let currentId;
71
+ if (active) {
72
+ const running = [...calls].reverse().find((c) => c.status === 'running');
73
+ currentId = running?.blocks[running.blocks.length - 1]?.id;
74
+ }
75
+ const Heading = `h${headingLevel}`;
76
+ return (_jsx("div", { ...rest, ref: ref, className: cx('rl-agent-process', className), "data-status": run.status, "data-active": active || undefined, children: _jsx(Collapsible, { open: open, onOpenChange: setOpen, className: "rl-agent-process__disclosure", panelClassName: "rl-agent-process__panel", triggerProps: { className: 'rl-agent-process__trigger' }, trigger: _jsxs(_Fragment, { children: [_jsx("span", { className: "rl-agent-sr", children: t.processLabel }), active ? (_jsx(AgentSpark, { phase: sparkPhase(run.status, run.phase) })) : (_jsx(StatusGlyph, { name: meta.glyph, tone: meta.tone, className: "rl-agent-process__glyph" })), _jsx("span", { className: "rl-agent-process__headline", children: headline }), !active && _jsx("span", { className: "rl-agent-process__run-status", children: all.status.run[run.status] }), elapsed && _jsx("span", { className: "rl-agent-process__elapsed", children: elapsed })] }), children: _jsxs("div", { className: "rl-agent-process__calls", children: [calls.map((call) => (_jsxs("section", { className: "rl-agent-process__call", "aria-label": t.processCall(call.ordinal), "data-status": call.status, children: [_jsxs(Heading, { className: "rl-agent-process__call-title", children: [_jsx("span", { children: t.processCall(call.ordinal) }), _jsx(AgentStatus, { ...statusProps({ glyph: callGlyph[call.status], tone: callTone[call.status], active: call.status === 'running', settled: call.status !== 'running' }, t.callStatus[call.status]), appearance: "inline", meta: call.elapsedMs !== undefined ? fmt.duration(call.elapsedMs) : undefined })] }), _jsx("ol", { className: "rl-agent-process__blocks", children: call.blocks.map((block) => (_jsx(Block, { block: block, current: block.id === currentId, props: { renderTool, renderers, onLoadRecord, onOpenThinking } }, block.id))) })] }, call.id))), run.truncated && (_jsxs("p", { className: "rl-agent-process__truncated", children: [_jsx("span", { children: t.processTruncated }), onOpenFull && (_jsx(Button, { size: "sm", variant: "ghost", onClick: () => onOpenFull(run.id), children: t.openFull }))] }))] }) }) }));
77
+ });
78
+ //# sourceMappingURL=AgentProcess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentProcess.js","sourceRoot":"","sources":["../../../src/components/process/AgentProcess.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import * as React from 'react';
2
+ import type { ActionStatus, RunPhase, RunStatus as RunStatusValue, RunView, SyncStatus } from '@wzrhine/agent-core';
3
+ /**
4
+ * RunStatus (atlas 10): the run axis as glyph + label (+ phase, elapsed, hint). Sync health and
5
+ * the receipt of the last user action are separate axes and render as their own small chips when
6
+ * they say something (`syncStatus` ≠ live, `actionStatus` ≠ idle) — a reconnecting stream never
7
+ * changes the run label, and an `unknown` receipt is never drawn as success.
8
+ *
9
+ * Appearances: `pill` (tinted chip, default), `inline` (no frame), `line` (AgentSpark + phase
10
+ * text + elapsed, used inside assistant messages and the process header).
11
+ *
12
+ * Motion: active states breathe through `useAgentLoop` (paused off-screen / hidden page / reduced
13
+ * motion); `line` uses AgentSpark. Static frames still differ per state.
14
+ *
15
+ * `announce` adds a visually hidden `role="status"` whose text follows the label, throttled so a
16
+ * burst of phase changes is read once.
17
+ */
18
+ export type RunStatusProps = Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> & {
19
+ run?: Pick<RunView, 'status' | 'phase' | 'label' | 'elapsedMs' | 'syncStatus' | 'actionStatus'>;
20
+ status?: RunStatusValue;
21
+ phase?: RunPhase;
22
+ elapsedMs?: number;
23
+ syncStatus?: SyncStatus;
24
+ actionStatus?: ActionStatus;
25
+ /** Replaces the computed label. */
26
+ labelOverride?: React.ReactNode;
27
+ /** Short explanation shown after the status ("等待你批准 1 个操作"). */
28
+ hint?: React.ReactNode;
29
+ appearance?: 'pill' | 'inline' | 'line';
30
+ size?: 'sm' | 'md';
31
+ /** Render a polite, throttled screen-reader announcement of the label. */
32
+ announce?: boolean;
33
+ /** Minimum gap between announcements (ms). */
34
+ announceInterval?: number;
35
+ };
36
+ /**
37
+ * Same-name type alias: the package entry exports this component as `RunStatus`, which would
38
+ * otherwise shadow the `RunStatus` type re-exported from `@wzrhine/agent-core`. Declaring both
39
+ * here keeps `import type { RunStatus }` and `<RunStatus />` working from one entry.
40
+ */
41
+ export type RunStatus = RunStatusValue;
42
+ export declare const RunStatus: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLSpanElement>, "children"> & {
43
+ run?: Pick<RunView, "status" | "phase" | "label" | "elapsedMs" | "syncStatus" | "actionStatus">;
44
+ status?: RunStatusValue;
45
+ phase?: RunPhase;
46
+ elapsedMs?: number;
47
+ syncStatus?: SyncStatus;
48
+ actionStatus?: ActionStatus;
49
+ /** Replaces the computed label. */
50
+ labelOverride?: React.ReactNode;
51
+ /** Short explanation shown after the status ("等待你批准 1 个操作"). */
52
+ hint?: React.ReactNode;
53
+ appearance?: "pill" | "inline" | "line";
54
+ size?: "sm" | "md";
55
+ /** Render a polite, throttled screen-reader announcement of the label. */
56
+ announce?: boolean;
57
+ /** Minimum gap between announcements (ms). */
58
+ announceInterval?: number;
59
+ } & React.RefAttributes<HTMLSpanElement>>;
60
+ //# sourceMappingURL=RunStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunStatus.d.ts","sourceRoot":"","sources":["../../../src/components/process/RunStatus.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,IAAI,cAAc,EAAE,OAAO,EAAc,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQhI;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,GAAG;IACrF,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,cAAc,CAAC,CAAC;IAChG,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,mCAAmC;IACnC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,gEAAgE;IAChE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;IACxC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,cAAc,CAAC;AAavC,eAAO,MAAM,SAAS;UApCd,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,cAAc,CAAC;aACtF,cAAc;YACf,QAAQ;gBACJ,MAAM;iBACL,UAAU;mBACR,YAAY;IAC3B,mCAAmC;oBACnB,KAAK,CAAC,SAAS;IAC/B,gEAAgE;WACzD,KAAK,CAAC,SAAS;iBACT,MAAM,GAAG,QAAQ,GAAG,MAAM;WAChC,IAAI,GAAG,IAAI;IAClB,0EAA0E;eAC/D,OAAO;IAClB,8CAA8C;uBAC3B,MAAM;yCAoGzB,CAAC"}
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { actionStatusMeta, effectivePhase, runPhaseMeta, runStatusMeta, sparkPhase, syncStatusMeta } from '@wzrhine/agent-core';
5
+ import { AgentSpark } from '../../primitives/AgentSpark.js';
6
+ import { StatusGlyph } from '../../primitives/StatusGlyph.js';
7
+ import { loopAttributes, useAgentLoop } from '../../motion/agent-motion.js';
8
+ import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
9
+ import { cx } from '../../utils/cx.js';
10
+ import { useThrottledText } from '../message/use-copy.js';
11
+ const ACTIVE_STATUSES = ['queued', 'running', 'waiting', 'cancelling'];
12
+ function Chip({ meta, label, kind }) {
13
+ return (_jsxs("span", { className: "rl-agent-status rl-agent-run__chip", "data-tone": meta.tone, "data-appearance": "pill", "data-size": "sm", "data-axis": kind, children: [_jsx(StatusGlyph, { name: meta.glyph, tone: meta.tone, className: "rl-agent-status__glyph" }), _jsx("span", { className: "rl-agent-status__label", children: label })] }));
14
+ }
15
+ export const RunStatus = React.forwardRef(function RunStatus({ run, status: statusProp, phase: phaseProp, elapsedMs: elapsedProp, syncStatus: syncProp, actionStatus: actionProp, labelOverride, hint, appearance = 'pill', size = 'sm', announce = false, announceInterval = 1000, className, ...rest }, ref) {
16
+ const s = useAgentMessages().status;
17
+ const fmt = useAgentFormat();
18
+ const status = statusProp ?? run?.status ?? 'idle';
19
+ const active = ACTIVE_STATUSES.includes(status);
20
+ const phase = active ? effectivePhase(status, phaseProp ?? run?.phase) : undefined;
21
+ const elapsedMs = elapsedProp ?? run?.elapsedMs;
22
+ const sync = syncProp ?? run?.syncStatus;
23
+ const action = actionProp ?? run?.actionStatus;
24
+ const meta = phase && status !== 'cancelling' && status !== 'queued' ? runPhaseMeta[phase] : runStatusMeta[status];
25
+ const textLabel = run?.label ?? (phase ? s.phase[phase] : s.run[status]);
26
+ const label = labelOverride ?? textLabel;
27
+ const elapsed = elapsedMs !== undefined ? fmt.duration(elapsedMs) : undefined;
28
+ const { ref: loopRef, lifecycle } = useAgentLoop(meta.active && appearance !== 'line');
29
+ const announced = useThrottledText(announce ? s.runAnnouncement(typeof label === 'string' ? label : textLabel) : '', announceInterval);
30
+ const showSync = sync !== undefined && sync !== 'live';
31
+ const showAction = action !== undefined && action !== 'idle';
32
+ return (_jsxs("span", { ...rest, ref: ref, className: cx('rl-agent-run', className), "data-appearance": appearance, "data-status": status, "data-phase": phase, children: [_jsxs("span", { className: "rl-agent-status rl-agent-run__main", "data-tone": meta.tone, "data-appearance": appearance === 'pill' ? 'pill' : 'inline', "data-size": size, "data-active": meta.active || undefined, children: [appearance === 'line' ? (_jsx(AgentSpark, { phase: sparkPhase(status, phase), className: "rl-agent-run__spark" })) : (_jsx(StatusGlyph, { ref: loopRef, name: meta.glyph, tone: meta.tone, active: meta.active, className: "rl-agent-status__glyph", ...loopAttributes(lifecycle) })), _jsx("span", { className: "rl-agent-status__label", children: label }), elapsed && _jsx("span", { className: "rl-agent-status__meta", children: elapsed })] }), showSync && _jsx(Chip, { kind: "sync", meta: syncStatusMeta[sync], label: s.sync[sync] }), showAction && _jsx(Chip, { kind: "action", meta: actionStatusMeta[action], label: s.action[action] }), hint != null && hint !== false && _jsx("span", { className: "rl-agent-run__hint", children: hint }), announce && (_jsx("span", { className: "rl-agent-sr", role: "status", children: announced }))] }));
33
+ });
34
+ //# sourceMappingURL=RunStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunStatus.js","sourceRoot":"","sources":["../../../src/components/process/RunStatus.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+ import type { EmptyStateProps } from '@wzrhine/react';
3
+ /**
4
+ * AgentEmptyState: EmptyState (@wzrhine/react) with agent defaults. No live role (an empty
5
+ * region is not an event). `onCreate` adds a 「新建会话」 button; without it there is no button.
6
+ */
7
+ export type AgentEmptyStateProps = Omit<EmptyStateProps, 'title' | 'action'> & {
8
+ title?: React.ReactNode;
9
+ /** Primary action; renders a button labelled `createLabel`. */
10
+ onCreate?: () => void;
11
+ createLabel?: React.ReactNode;
12
+ /** Custom action instead of the create button. */
13
+ action?: React.ReactNode;
14
+ };
15
+ export declare const AgentEmptyState: React.ForwardRefExoticComponent<Omit<EmptyStateProps, "title" | "action"> & {
16
+ title?: React.ReactNode;
17
+ /** Primary action; renders a button labelled `createLabel`. */
18
+ onCreate?: () => void;
19
+ createLabel?: React.ReactNode;
20
+ /** Custom action instead of the create button. */
21
+ action?: React.ReactNode;
22
+ } & React.RefAttributes<HTMLDivElement>>;
23
+ /**
24
+ * AgentWorkspaceEmpty: the reading column when no conversation is selected. Same as
25
+ * AgentEmptyState, centred in the available height.
26
+ */
27
+ export declare const AgentWorkspaceEmpty: React.ForwardRefExoticComponent<Omit<EmptyStateProps, "title" | "action"> & {
28
+ title?: React.ReactNode;
29
+ /** Primary action; renders a button labelled `createLabel`. */
30
+ onCreate?: () => void;
31
+ createLabel?: React.ReactNode;
32
+ /** Custom action instead of the create button. */
33
+ action?: React.ReactNode;
34
+ } & React.RefAttributes<HTMLDivElement>>;
35
+ //# sourceMappingURL=AgentEmptyState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentEmptyState.d.ts","sourceRoot":"","sources":["../../../src/components/shell/AgentEmptyState.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKtD;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,QAAQ,CAAC,GAAG;IAC7E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,kDAAkD;IAClD,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,eAAe;YARlB,KAAK,CAAC,SAAS;IACvB,+DAA+D;eACpD,MAAM,IAAI;kBACP,KAAK,CAAC,SAAS;IAC7B,kDAAkD;aACzC,KAAK,CAAC,SAAS;wCA4BxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB;YAvCtB,KAAK,CAAC,SAAS;IACvB,+DAA+D;eACpD,MAAM,IAAI;kBACP,KAAK,CAAC,SAAS;IAC7B,kDAAkD;aACzC,KAAK,CAAC,SAAS;wCAuCxB,CAAC"}
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Button, EmptyState } from '@wzrhine/react';
5
+ import { useAgentMessages } from '../../provider/AgentMessages.js';
6
+ import { AgentIcon } from '../../primitives/icons.js';
7
+ import { cx } from '../../utils/cx.js';
8
+ export const AgentEmptyState = React.forwardRef(function AgentEmptyState({ title, description, onCreate, createLabel, action, kind = 'first-use', headingLevel = 2, className, ...rest }, ref) {
9
+ const shell = useAgentMessages().shell;
10
+ return (_jsx(EmptyState, { ...rest, ref: ref, className: cx('rl-agent-empty', className), kind: kind, headingLevel: headingLevel, title: title ?? shell.workspaceEmptyTitle, description: description === undefined ? shell.workspaceEmptyDescription : description, action: action ??
11
+ (onCreate ? (_jsxs(Button, { size: "sm", variant: "secondary", onClick: onCreate, children: [_jsx(AgentIcon, { name: "plus" }), createLabel ?? shell.create] })) : undefined) }));
12
+ });
13
+ /**
14
+ * AgentWorkspaceEmpty: the reading column when no conversation is selected. Same as
15
+ * AgentEmptyState, centred in the available height.
16
+ */
17
+ export const AgentWorkspaceEmpty = React.forwardRef(function AgentWorkspaceEmpty({ className, ...rest }, ref) {
18
+ return _jsx(AgentEmptyState, { ...rest, ref: ref, className: cx('rl-agent-empty--workspace', className) });
19
+ });
20
+ //# sourceMappingURL=AgentEmptyState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentEmptyState.js","sourceRoot":"","sources":["../../../src/components/shell/AgentEmptyState.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAevC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAuC,SAAS,eAAe,CAC5G,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAG,WAAW,EAAE,YAAY,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAC/G,GAAG;IAEH,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC,KAAK,CAAC;IACvC,OAAO,CACL,KAAC,UAAU,OACL,IAAI,EACR,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAC1C,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,mBAAmB,EACzC,WAAW,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,WAAW,EACtF,MAAM,EACJ,MAAM;YACN,CAAC,QAAQ,CAAC,CAAC,CAAC,CACV,MAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,QAAQ,aACrD,KAAC,SAAS,IAAC,IAAI,EAAC,MAAM,GAAG,EACxB,WAAW,IAAI,KAAK,CAAC,MAAM,IACrB,CACV,CAAC,CAAC,CAAC,SAAS,CAAC,GAEhB,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,UAAU,CAAuC,SAAS,mBAAmB,CACpH,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EACtB,GAAG;IAEH,OAAO,KAAC,eAAe,OAAK,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,2BAA2B,EAAE,SAAS,CAAC,GAAI,CAAC;AACxG,CAAC,CAAC,CAAC"}
@@ -0,0 +1,84 @@
1
+ import * as React from 'react';
2
+ import type { AgentIdentityView, ConversationOrigin, RunPhase, RunStatus, SyncStatus } from '@wzrhine/agent-core';
3
+ /**
4
+ * AgentHeader (atlas 02): title bar of the open conversation.
5
+ *
6
+ * Start → end: back (only with `onBack`), index toggle (only inside a narrow AgentShell whose
7
+ * index is a sheet), origin link (fork / sub-agent, only with `origin` + `onOpenOrigin`),
8
+ * sub-agent badge, title + rename, agent identity, run status, sync status, then the trailing
9
+ * group: counts, `actions` and the context toggle.
10
+ *
11
+ * - The title is a heading (`headingLevel`, default 2) truncated to one line; the full text is in
12
+ * `title` and, because truncation is visual only, still read in full by assistive tech.
13
+ * The trailing group never shrinks, so long titles cannot squeeze status or actions.
14
+ * - Rename (only with `onRename`) is visible on hover / focus-within but always reserves its
15
+ * space, so the title never jumps; its opacity transition is `--rl-motion-fast`.
16
+ * - Run status = AgentStatus (glyph + text): the phase label while active or waiting, else the
17
+ * run label.
18
+ * Active runs breathe through the shared loop lifecycle (static off-screen / hidden / reduced).
19
+ * Sync is a separate axis: a second pill appears whenever `syncStatus` is not `live`.
20
+ * No `runStatus` = no pill (unknown is never painted as a state).
21
+ * - The context toggle (only with `onToggleContext`, or automatically inside an AgentShell that
22
+ * has a context slot) is an IconButton with a stable name and `aria-pressed` = pane open.
23
+ * - `badges` are small counts (terminals, sub-tasks) with their own accessible text.
24
+ */
25
+ export interface AgentHeaderBadge {
26
+ id: string;
27
+ icon?: React.ReactNode;
28
+ count: number;
29
+ /** Accessible text, e.g. "2 个终端运行中". */
30
+ label: string;
31
+ }
32
+ export type AgentHeaderProps = Omit<React.HTMLAttributes<HTMLElement>, 'title'> & {
33
+ title?: string;
34
+ identity?: AgentIdentityView;
35
+ runStatus?: RunStatus;
36
+ runPhase?: RunPhase;
37
+ /** Overrides the status label (e.g. a custom phase text). */
38
+ statusLabel?: string;
39
+ syncStatus?: SyncStatus;
40
+ origin?: ConversationOrigin;
41
+ onOpenOrigin?: (origin: ConversationOrigin) => void;
42
+ onBack?: () => void;
43
+ backLabel?: string;
44
+ onRename?: () => void;
45
+ renameLabel?: string;
46
+ /** Explicit pane state; defaults to the surrounding AgentShell. */
47
+ contextOpen?: boolean;
48
+ /** Explicit toggle; defaults to the surrounding AgentShell's toggle when it has a context slot. */
49
+ onToggleContext?: () => void;
50
+ contextLabel?: string;
51
+ badges?: AgentHeaderBadge[];
52
+ /** Trailing slot (e.g. a Menu with more conversation actions). */
53
+ actions?: React.ReactNode;
54
+ headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
55
+ /** Disables rename (e.g. while a request is pending); other controls stay. */
56
+ pending?: boolean;
57
+ };
58
+ export declare const AgentHeader: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "title"> & {
59
+ title?: string;
60
+ identity?: AgentIdentityView;
61
+ runStatus?: RunStatus;
62
+ runPhase?: RunPhase;
63
+ /** Overrides the status label (e.g. a custom phase text). */
64
+ statusLabel?: string;
65
+ syncStatus?: SyncStatus;
66
+ origin?: ConversationOrigin;
67
+ onOpenOrigin?: (origin: ConversationOrigin) => void;
68
+ onBack?: () => void;
69
+ backLabel?: string;
70
+ onRename?: () => void;
71
+ renameLabel?: string;
72
+ /** Explicit pane state; defaults to the surrounding AgentShell. */
73
+ contextOpen?: boolean;
74
+ /** Explicit toggle; defaults to the surrounding AgentShell's toggle when it has a context slot. */
75
+ onToggleContext?: () => void;
76
+ contextLabel?: string;
77
+ badges?: AgentHeaderBadge[];
78
+ /** Trailing slot (e.g. a Menu with more conversation actions). */
79
+ actions?: React.ReactNode;
80
+ headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
81
+ /** Disables rename (e.g. while a request is pending); other controls stay. */
82
+ pending?: boolean;
83
+ } & React.RefAttributes<HTMLElement>>;
84
+ //# sourceMappingURL=AgentHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentHeader.d.ts","sourceRoot":"","sources":["../../../src/components/shell/AgentHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQlH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,GAAG;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mGAAmG;IACnG,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC5B,kEAAkE;IAClE,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAyBF,eAAO,MAAM,WAAW;YAjDd,MAAM;eACH,iBAAiB;gBAChB,SAAS;eACV,QAAQ;IACnB,6DAA6D;kBAC/C,MAAM;iBACP,UAAU;aACd,kBAAkB;mBACZ,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI;aAC1C,MAAM,IAAI;gBACP,MAAM;eACP,MAAM,IAAI;kBACP,MAAM;IACpB,mEAAmE;kBACrD,OAAO;IACrB,mGAAmG;sBACjF,MAAM,IAAI;mBACb,MAAM;aACZ,gBAAgB,EAAE;IAC3B,kEAAkE;cACxD,KAAK,CAAC,SAAS;mBACV,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACpC,8EAA8E;cACpE,OAAO;qCAuKjB,CAAC"}
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { IconButton } from '@wzrhine/react';
5
+ import { effectivePhase, runPhaseMeta, runStatusMeta, syncStatusMeta } from '@wzrhine/agent-core';
6
+ import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
7
+ import { AgentIcon } from '../../primitives/icons.js';
8
+ import { AgentStatus } from '../../primitives/AgentStatus.js';
9
+ import { loopAttributes, useAgentLoop } from '../../motion/agent-motion.js';
10
+ import { cx } from '../../utils/cx.js';
11
+ import { useAgentShell } from './AgentShell.js';
12
+ function RunPill({ status, phase, label }) {
13
+ const messages = useAgentMessages().status;
14
+ const run = runStatusMeta[status];
15
+ // `waiting` is not "active" (nothing breathes) but still carries the phase that says what it
16
+ // waits for (approval / answer / sub-tasks), as in RunStatus.
17
+ const shownPhase = run.active || status === 'waiting' ? effectivePhase(status, phase) : undefined;
18
+ const meta = shownPhase ? runPhaseMeta[shownPhase] : run;
19
+ const text = label ?? (shownPhase ? messages.phase[shownPhase] : messages.run[status]);
20
+ const { ref, lifecycle } = useAgentLoop(meta.active);
21
+ return (_jsx(AgentStatus, { ref: ref, className: "rl-agent-header__status", glyph: meta.glyph, tone: meta.tone, label: text, active: meta.active, "data-run": status, ...loopAttributes(lifecycle) }));
22
+ }
23
+ export const AgentHeader = React.forwardRef(function AgentHeader({ title, identity, runStatus, runPhase, statusLabel, syncStatus, origin, onOpenOrigin, onBack, backLabel, onRename, renameLabel, contextOpen: contextOpenProp, onToggleContext: onToggleProp, contextLabel, badges, actions, headingLevel = 2, pending = false, className, ...rest }, ref) {
24
+ const messages = useAgentMessages();
25
+ const shell = messages.shell;
26
+ const format = useAgentFormat();
27
+ const shellState = useAgentShell();
28
+ const Heading = `h${headingLevel}`;
29
+ const shownTitle = title?.trim() || shell.untitled;
30
+ const onToggleContext = onToggleProp ?? (shellState?.hasContext ? shellState.toggleContext : undefined);
31
+ const contextOpen = contextOpenProp ?? shellState?.contextOpen ?? false;
32
+ const showIndexToggle = !!shellState && shellState.hasIndex && shellState.layout === 'narrow';
33
+ const parentTitle = origin?.parentTitle?.trim() || shell.originUnknownParent;
34
+ const originLabel = origin ? (origin.kind === 'fork' ? shell.originFork(parentTitle) : shell.originSubagent(parentTitle)) : '';
35
+ const sync = syncStatus && syncStatus !== 'live' ? syncStatusMeta[syncStatus] : null;
36
+ return (_jsxs("header", { ...rest, ref: ref, className: cx('rl-agent-header', className), "data-run": runStatus, children: [_jsxs("div", { className: "rl-agent-header__lead", children: [onBack && _jsx(IconButton, { size: "sm", icon: _jsx(AgentIcon, { name: "arrow-left" }), label: backLabel ?? shell.back, onClick: onBack }), showIndexToggle && (_jsx(IconButton, { size: "sm", icon: _jsx(AgentIcon, { name: "list" }), label: shell.openIndex, "aria-haspopup": "dialog", onClick: () => shellState.setIndexOpen(true, 'toggle') })), origin && onOpenOrigin && (_jsx(IconButton, { size: "sm", icon: _jsx(AgentIcon, { name: origin.kind === 'fork' ? 'fork' : 'link' }), label: originLabel, onClick: () => onOpenOrigin(origin) }))] }), _jsxs("div", { className: "rl-agent-header__titles", children: [_jsxs("div", { className: "rl-agent-header__title-row", children: [origin?.kind === 'subagent' && (_jsxs("span", { className: "rl-agent-header__badge", children: [_jsx(AgentIcon, { name: "agent" }), shell.subagentBadge] })), _jsx(Heading, { className: "rl-agent-header__title", title: shownTitle, children: shownTitle }), onRename && (_jsx(IconButton, { className: "rl-agent-header__rename", size: "sm", icon: _jsx(AgentIcon, { name: "edit" }), label: renameLabel ?? shell.rename, disabled: pending, onClick: onRename }))] }), (identity || runStatus || sync) && (_jsxs("div", { className: "rl-agent-header__meta", children: [identity && (_jsxs("span", { className: "rl-agent-header__identity", children: [_jsx("span", { className: "rl-agent-header__monogram", "aria-hidden": "true", children: identity.monogram ?? _jsx(AgentIcon, { name: "agent" }) }), _jsx("span", { className: "rl-agent-sr", children: shell.agentIdentity(identity.name, identity.role) }), _jsx("span", { className: "rl-agent-header__identity-name", "aria-hidden": "true", children: identity.name }), identity.role && (_jsx("span", { className: "rl-agent-header__identity-role", "aria-hidden": "true", children: identity.role }))] })), runStatus && _jsx(RunPill, { status: runStatus, phase: runPhase, label: statusLabel }), sync && syncStatus && (_jsx(AgentStatus, { className: "rl-agent-header__sync", glyph: sync.glyph, tone: sync.tone, label: messages.status.sync[syncStatus], "data-sync": syncStatus }))] }))] }), _jsxs("div", { className: "rl-agent-header__trail", children: [badges?.map((badge) => (_jsxs("span", { className: "rl-agent-header__count", children: [badge.icon && (_jsx("span", { className: "rl-agent-header__count-icon", "aria-hidden": "true", children: badge.icon })), _jsx("span", { "aria-hidden": "true", children: format.compact(badge.count) }), _jsx("span", { className: "rl-agent-sr", children: badge.label })] }, badge.id))), actions, onToggleContext && (_jsx(IconButton, { className: "rl-agent-header__toggle", size: "sm", icon: _jsx(AgentIcon, { name: "panel" }), label: contextLabel ?? shell.contextToggle, pressed: contextOpen, onClick: onToggleContext }))] })] }));
37
+ });
38
+ //# sourceMappingURL=AgentHeader.js.map