@wzrhine/agent 0.0.0-stage → 0.2.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 (360) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/LICENSE +21 -0
  3. package/README.md +29 -3
  4. package/dist/agent.css +16 -0
  5. package/dist/components/artifact/ArtifactCard.d.ts +59 -0
  6. package/dist/components/artifact/ArtifactCard.d.ts.map +1 -0
  7. package/dist/components/artifact/ArtifactCard.js +79 -0
  8. package/dist/components/artifact/ArtifactCard.js.map +1 -0
  9. package/dist/components/artifact/FilePreview.d.ts +121 -0
  10. package/dist/components/artifact/FilePreview.d.ts.map +1 -0
  11. package/dist/components/artifact/FilePreview.js +213 -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 +60 -0
  20. package/dist/components/composer/AttachmentList.js.map +1 -0
  21. package/dist/components/composer/Composer.d.ts +119 -0
  22. package/dist/components/composer/Composer.d.ts.map +1 -0
  23. package/dist/components/composer/Composer.js +336 -0
  24. package/dist/components/composer/Composer.js.map +1 -0
  25. package/dist/components/composer/ComposerInput.d.ts +103 -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 +56 -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 +53 -0
  42. package/dist/components/composer/ModelPicker.d.ts.map +1 -0
  43. package/dist/components/composer/ModelPicker.js +126 -0
  44. package/dist/components/composer/ModelPicker.js.map +1 -0
  45. package/dist/components/composer/PermissionPicker.d.ts +35 -0
  46. package/dist/components/composer/PermissionPicker.d.ts.map +1 -0
  47. package/dist/components/composer/PermissionPicker.js +51 -0
  48. package/dist/components/composer/PermissionPicker.js.map +1 -0
  49. package/dist/components/composer/ReferencePicker.d.ts +31 -0
  50. package/dist/components/composer/ReferencePicker.d.ts.map +1 -0
  51. package/dist/components/composer/ReferencePicker.js +50 -0
  52. package/dist/components/composer/ReferencePicker.js.map +1 -0
  53. package/dist/components/composer/SendStopButton.d.ts +73 -0
  54. package/dist/components/composer/SendStopButton.d.ts.map +1 -0
  55. package/dist/components/composer/SendStopButton.js +88 -0
  56. package/dist/components/composer/SendStopButton.js.map +1 -0
  57. package/dist/components/composer/SkillPicker.d.ts +26 -0
  58. package/dist/components/composer/SkillPicker.d.ts.map +1 -0
  59. package/dist/components/composer/SkillPicker.js +26 -0
  60. package/dist/components/composer/SkillPicker.js.map +1 -0
  61. package/dist/components/composer/SlashCommandMenu.d.ts +33 -0
  62. package/dist/components/composer/SlashCommandMenu.d.ts.map +1 -0
  63. package/dist/components/composer/SlashCommandMenu.js +43 -0
  64. package/dist/components/composer/SlashCommandMenu.js.map +1 -0
  65. package/dist/components/composer/composer-text.d.ts +10 -0
  66. package/dist/components/composer/composer-text.d.ts.map +1 -0
  67. package/dist/components/composer/composer-text.js +26 -0
  68. package/dist/components/composer/composer-text.js.map +1 -0
  69. package/dist/components/composer/composer-utils.d.ts +74 -0
  70. package/dist/components/composer/composer-utils.d.ts.map +1 -0
  71. package/dist/components/composer/composer-utils.js +133 -0
  72. package/dist/components/composer/composer-utils.js.map +1 -0
  73. package/dist/components/conversation/ConversationList.d.ts +94 -0
  74. package/dist/components/conversation/ConversationList.d.ts.map +1 -0
  75. package/dist/components/conversation/ConversationList.js +81 -0
  76. package/dist/components/conversation/ConversationList.js.map +1 -0
  77. package/dist/components/conversation/ConversationRow.d.ts +66 -0
  78. package/dist/components/conversation/ConversationRow.d.ts.map +1 -0
  79. package/dist/components/conversation/ConversationRow.js +65 -0
  80. package/dist/components/conversation/ConversationRow.js.map +1 -0
  81. package/dist/components/conversation/conversation-status.d.ts +21 -0
  82. package/dist/components/conversation/conversation-status.d.ts.map +1 -0
  83. package/dist/components/conversation/conversation-status.js +33 -0
  84. package/dist/components/conversation/conversation-status.js.map +1 -0
  85. package/dist/components/intervention/ApprovalDiff.d.ts +14 -0
  86. package/dist/components/intervention/ApprovalDiff.d.ts.map +1 -0
  87. package/dist/components/intervention/ApprovalDiff.js +25 -0
  88. package/dist/components/intervention/ApprovalDiff.js.map +1 -0
  89. package/dist/components/intervention/ApprovalPanel.d.ts +57 -0
  90. package/dist/components/intervention/ApprovalPanel.d.ts.map +1 -0
  91. package/dist/components/intervention/ApprovalPanel.js +111 -0
  92. package/dist/components/intervention/ApprovalPanel.js.map +1 -0
  93. package/dist/components/intervention/ErrorRecoveryNotice.d.ts +28 -0
  94. package/dist/components/intervention/ErrorRecoveryNotice.d.ts.map +1 -0
  95. package/dist/components/intervention/ErrorRecoveryNotice.js +31 -0
  96. package/dist/components/intervention/ErrorRecoveryNotice.js.map +1 -0
  97. package/dist/components/intervention/GrantList.d.ts +49 -0
  98. package/dist/components/intervention/GrantList.d.ts.map +1 -0
  99. package/dist/components/intervention/GrantList.js +58 -0
  100. package/dist/components/intervention/GrantList.js.map +1 -0
  101. package/dist/components/intervention/InterventionDock.d.ts +24 -0
  102. package/dist/components/intervention/InterventionDock.d.ts.map +1 -0
  103. package/dist/components/intervention/InterventionDock.js +18 -0
  104. package/dist/components/intervention/InterventionDock.js.map +1 -0
  105. package/dist/components/intervention/QuestionnaireCard.d.ts +81 -0
  106. package/dist/components/intervention/QuestionnaireCard.d.ts.map +1 -0
  107. package/dist/components/intervention/QuestionnaireCard.js +333 -0
  108. package/dist/components/intervention/QuestionnaireCard.js.map +1 -0
  109. package/dist/components/intervention/action-lock.d.ts +20 -0
  110. package/dist/components/intervention/action-lock.d.ts.map +1 -0
  111. package/dist/components/intervention/action-lock.js +65 -0
  112. package/dist/components/intervention/action-lock.js.map +1 -0
  113. package/dist/components/intervention/icons.d.ts +8 -0
  114. package/dist/components/intervention/icons.d.ts.map +1 -0
  115. package/dist/components/intervention/icons.js +11 -0
  116. package/dist/components/intervention/icons.js.map +1 -0
  117. package/dist/components/intervention/questionnaire-answers.d.ts +34 -0
  118. package/dist/components/intervention/questionnaire-answers.d.ts.map +1 -0
  119. package/dist/components/intervention/questionnaire-answers.js +97 -0
  120. package/dist/components/intervention/questionnaire-answers.js.map +1 -0
  121. package/dist/components/message/AgentMessage.d.ts +98 -0
  122. package/dist/components/message/AgentMessage.d.ts.map +1 -0
  123. package/dist/components/message/AgentMessage.js +94 -0
  124. package/dist/components/message/AgentMessage.js.map +1 -0
  125. package/dist/components/message/CitationChip.d.ts +38 -0
  126. package/dist/components/message/CitationChip.d.ts.map +1 -0
  127. package/dist/components/message/CitationChip.js +32 -0
  128. package/dist/components/message/CitationChip.js.map +1 -0
  129. package/dist/components/message/CodeBlock.d.ts +45 -0
  130. package/dist/components/message/CodeBlock.d.ts.map +1 -0
  131. package/dist/components/message/CodeBlock.js +21 -0
  132. package/dist/components/message/CodeBlock.js.map +1 -0
  133. package/dist/components/message/JumpToLatest.d.ts +27 -0
  134. package/dist/components/message/JumpToLatest.d.ts.map +1 -0
  135. package/dist/components/message/JumpToLatest.js +17 -0
  136. package/dist/components/message/JumpToLatest.js.map +1 -0
  137. package/dist/components/message/Markdown.d.ts +21 -0
  138. package/dist/components/message/Markdown.d.ts.map +1 -0
  139. package/dist/components/message/Markdown.js +21 -0
  140. package/dist/components/message/Markdown.js.map +1 -0
  141. package/dist/components/message/MessageActions.d.ts +67 -0
  142. package/dist/components/message/MessageActions.d.ts.map +1 -0
  143. package/dist/components/message/MessageActions.js +83 -0
  144. package/dist/components/message/MessageActions.js.map +1 -0
  145. package/dist/components/message/MessageList.d.ts +106 -0
  146. package/dist/components/message/MessageList.d.ts.map +1 -0
  147. package/dist/components/message/MessageList.js +327 -0
  148. package/dist/components/message/MessageList.js.map +1 -0
  149. package/dist/components/message/MessagePart.d.ts +44 -0
  150. package/dist/components/message/MessagePart.d.ts.map +1 -0
  151. package/dist/components/message/MessagePart.js +150 -0
  152. package/dist/components/message/MessagePart.js.map +1 -0
  153. package/dist/components/message/RunDetails.d.ts +26 -0
  154. package/dist/components/message/RunDetails.d.ts.map +1 -0
  155. package/dist/components/message/RunDetails.js +113 -0
  156. package/dist/components/message/RunDetails.js.map +1 -0
  157. package/dist/components/message/SkillUseList.d.ts +22 -0
  158. package/dist/components/message/SkillUseList.d.ts.map +1 -0
  159. package/dist/components/message/SkillUseList.js +20 -0
  160. package/dist/components/message/SkillUseList.js.map +1 -0
  161. package/dist/components/message/ThinkingBlock.d.ts +44 -0
  162. package/dist/components/message/ThinkingBlock.d.ts.map +1 -0
  163. package/dist/components/message/ThinkingBlock.js +34 -0
  164. package/dist/components/message/ThinkingBlock.js.map +1 -0
  165. package/dist/components/message/icons.d.ts +14 -0
  166. package/dist/components/message/icons.d.ts.map +1 -0
  167. package/dist/components/message/icons.js +16 -0
  168. package/dist/components/message/icons.js.map +1 -0
  169. package/dist/components/message/plain-text.d.ts +11 -0
  170. package/dist/components/message/plain-text.d.ts.map +1 -0
  171. package/dist/components/message/plain-text.js +58 -0
  172. package/dist/components/message/plain-text.js.map +1 -0
  173. package/dist/components/message/renderers.d.ts +30 -0
  174. package/dist/components/message/renderers.d.ts.map +1 -0
  175. package/dist/components/message/renderers.js +2 -0
  176. package/dist/components/message/renderers.js.map +1 -0
  177. package/dist/components/message/use-copy.d.ts +19 -0
  178. package/dist/components/message/use-copy.d.ts.map +1 -0
  179. package/dist/components/message/use-copy.js +67 -0
  180. package/dist/components/message/use-copy.js.map +1 -0
  181. package/dist/components/process/AgentProcess.d.ts +47 -0
  182. package/dist/components/process/AgentProcess.d.ts.map +1 -0
  183. package/dist/components/process/AgentProcess.js +78 -0
  184. package/dist/components/process/AgentProcess.js.map +1 -0
  185. package/dist/components/process/RunStatus.d.ts +60 -0
  186. package/dist/components/process/RunStatus.d.ts.map +1 -0
  187. package/dist/components/process/RunStatus.js +34 -0
  188. package/dist/components/process/RunStatus.js.map +1 -0
  189. package/dist/components/shell/AgentEmptyState.d.ts +35 -0
  190. package/dist/components/shell/AgentEmptyState.d.ts.map +1 -0
  191. package/dist/components/shell/AgentEmptyState.js +20 -0
  192. package/dist/components/shell/AgentEmptyState.js.map +1 -0
  193. package/dist/components/shell/AgentHeader.d.ts +84 -0
  194. package/dist/components/shell/AgentHeader.d.ts.map +1 -0
  195. package/dist/components/shell/AgentHeader.js +43 -0
  196. package/dist/components/shell/AgentHeader.js.map +1 -0
  197. package/dist/components/shell/AgentShell.d.ts +154 -0
  198. package/dist/components/shell/AgentShell.d.ts.map +1 -0
  199. package/dist/components/shell/AgentShell.js +210 -0
  200. package/dist/components/shell/AgentShell.js.map +1 -0
  201. package/dist/components/shell/AgentSidePane.d.ts +54 -0
  202. package/dist/components/shell/AgentSidePane.d.ts.map +1 -0
  203. package/dist/components/shell/AgentSidePane.js +26 -0
  204. package/dist/components/shell/AgentSidePane.js.map +1 -0
  205. package/dist/components/shell/ResizeHandle.d.ts +54 -0
  206. package/dist/components/shell/ResizeHandle.d.ts.map +1 -0
  207. package/dist/components/shell/ResizeHandle.js +94 -0
  208. package/dist/components/shell/ResizeHandle.js.map +1 -0
  209. package/dist/components/shell/use-controllable.d.ts +9 -0
  210. package/dist/components/shell/use-controllable.d.ts.map +1 -0
  211. package/dist/components/shell/use-controllable.js +26 -0
  212. package/dist/components/shell/use-controllable.js.map +1 -0
  213. package/dist/components/tools/ChunkPager.d.ts +48 -0
  214. package/dist/components/tools/ChunkPager.d.ts.map +1 -0
  215. package/dist/components/tools/ChunkPager.js +68 -0
  216. package/dist/components/tools/ChunkPager.js.map +1 -0
  217. package/dist/components/tools/CodeModeToolTree.d.ts +64 -0
  218. package/dist/components/tools/CodeModeToolTree.d.ts.map +1 -0
  219. package/dist/components/tools/CodeModeToolTree.js +97 -0
  220. package/dist/components/tools/CodeModeToolTree.js.map +1 -0
  221. package/dist/components/tools/DiffPreview.d.ts +83 -0
  222. package/dist/components/tools/DiffPreview.d.ts.map +1 -0
  223. package/dist/components/tools/DiffPreview.js +95 -0
  224. package/dist/components/tools/DiffPreview.js.map +1 -0
  225. package/dist/components/tools/ToolActivity.d.ts +63 -0
  226. package/dist/components/tools/ToolActivity.d.ts.map +1 -0
  227. package/dist/components/tools/ToolActivity.js +45 -0
  228. package/dist/components/tools/ToolActivity.js.map +1 -0
  229. package/dist/components/tools/ToolDetails.d.ts +118 -0
  230. package/dist/components/tools/ToolDetails.d.ts.map +1 -0
  231. package/dist/components/tools/ToolDetails.js +258 -0
  232. package/dist/components/tools/ToolDetails.js.map +1 -0
  233. package/dist/components/tools/ToolHistory.d.ts +48 -0
  234. package/dist/components/tools/ToolHistory.d.ts.map +1 -0
  235. package/dist/components/tools/ToolHistory.js +37 -0
  236. package/dist/components/tools/ToolHistory.js.map +1 -0
  237. package/dist/components/tools/ToolOutput.d.ts +61 -0
  238. package/dist/components/tools/ToolOutput.d.ts.map +1 -0
  239. package/dist/components/tools/ToolOutput.js +45 -0
  240. package/dist/components/tools/ToolOutput.js.map +1 -0
  241. package/dist/components/tools/ToolRecord.d.ts +58 -0
  242. package/dist/components/tools/ToolRecord.d.ts.map +1 -0
  243. package/dist/components/tools/ToolRecord.js +79 -0
  244. package/dist/components/tools/ToolRecord.js.map +1 -0
  245. package/dist/components/tools/shared.d.ts +93 -0
  246. package/dist/components/tools/shared.d.ts.map +1 -0
  247. package/dist/components/tools/shared.js +160 -0
  248. package/dist/components/tools/shared.js.map +1 -0
  249. package/dist/components/workspace/ActivityLedger.d.ts +44 -0
  250. package/dist/components/workspace/ActivityLedger.d.ts.map +1 -0
  251. package/dist/components/workspace/ActivityLedger.js +63 -0
  252. package/dist/components/workspace/ActivityLedger.js.map +1 -0
  253. package/dist/components/workspace/CompactionNotice.d.ts +63 -0
  254. package/dist/components/workspace/CompactionNotice.d.ts.map +1 -0
  255. package/dist/components/workspace/CompactionNotice.js +36 -0
  256. package/dist/components/workspace/CompactionNotice.js.map +1 -0
  257. package/dist/components/workspace/ContextUsage.d.ts +50 -0
  258. package/dist/components/workspace/ContextUsage.d.ts.map +1 -0
  259. package/dist/components/workspace/ContextUsage.js +106 -0
  260. package/dist/components/workspace/ContextUsage.js.map +1 -0
  261. package/dist/components/workspace/PersistentTerminal.d.ts +86 -0
  262. package/dist/components/workspace/PersistentTerminal.d.ts.map +1 -0
  263. package/dist/components/workspace/PersistentTerminal.js +155 -0
  264. package/dist/components/workspace/PersistentTerminal.js.map +1 -0
  265. package/dist/components/workspace/PinnedSummary.d.ts +43 -0
  266. package/dist/components/workspace/PinnedSummary.d.ts.map +1 -0
  267. package/dist/components/workspace/PinnedSummary.js +33 -0
  268. package/dist/components/workspace/PinnedSummary.js.map +1 -0
  269. package/dist/components/workspace/RunOverview.d.ts +29 -0
  270. package/dist/components/workspace/RunOverview.d.ts.map +1 -0
  271. package/dist/components/workspace/RunOverview.js +20 -0
  272. package/dist/components/workspace/RunOverview.js.map +1 -0
  273. package/dist/components/workspace/RunSummary.d.ts +35 -0
  274. package/dist/components/workspace/RunSummary.d.ts.map +1 -0
  275. package/dist/components/workspace/RunSummary.js +46 -0
  276. package/dist/components/workspace/RunSummary.js.map +1 -0
  277. package/dist/components/workspace/SubAgentCard.d.ts +64 -0
  278. package/dist/components/workspace/SubAgentCard.d.ts.map +1 -0
  279. package/dist/components/workspace/SubAgentCard.js +78 -0
  280. package/dist/components/workspace/SubAgentCard.js.map +1 -0
  281. package/dist/components/workspace/TerminalRow.d.ts +61 -0
  282. package/dist/components/workspace/TerminalRow.d.ts.map +1 -0
  283. package/dist/components/workspace/TerminalRow.js +65 -0
  284. package/dist/components/workspace/TerminalRow.js.map +1 -0
  285. package/dist/components/workspace/shared.d.ts +26 -0
  286. package/dist/components/workspace/shared.d.ts.map +1 -0
  287. package/dist/components/workspace/shared.js +41 -0
  288. package/dist/components/workspace/shared.js.map +1 -0
  289. package/dist/index.d.ts +136 -0
  290. package/dist/index.d.ts.map +1 -0
  291. package/dist/index.js +79 -0
  292. package/dist/index.js.map +1 -0
  293. package/dist/motion/agent-motion.d.ts +62 -0
  294. package/dist/motion/agent-motion.d.ts.map +1 -0
  295. package/dist/motion/agent-motion.js +61 -0
  296. package/dist/motion/agent-motion.js.map +1 -0
  297. package/dist/primitives/AgentSpark.d.ts +17 -0
  298. package/dist/primitives/AgentSpark.d.ts.map +1 -0
  299. package/dist/primitives/AgentSpark.js +11 -0
  300. package/dist/primitives/AgentSpark.js.map +1 -0
  301. package/dist/primitives/AgentStatus.d.ts +32 -0
  302. package/dist/primitives/AgentStatus.d.ts.map +1 -0
  303. package/dist/primitives/AgentStatus.js +13 -0
  304. package/dist/primitives/AgentStatus.js.map +1 -0
  305. package/dist/primitives/StatusGlyph.d.ts +16 -0
  306. package/dist/primitives/StatusGlyph.d.ts.map +1 -0
  307. package/dist/primitives/StatusGlyph.js +31 -0
  308. package/dist/primitives/StatusGlyph.js.map +1 -0
  309. package/dist/primitives/icons.d.ts +13 -0
  310. package/dist/primitives/icons.d.ts.map +1 -0
  311. package/dist/primitives/icons.js +55 -0
  312. package/dist/primitives/icons.js.map +1 -0
  313. package/dist/provider/AgentMessages.d.ts +61 -0
  314. package/dist/provider/AgentMessages.d.ts.map +1 -0
  315. package/dist/provider/AgentMessages.js +81 -0
  316. package/dist/provider/AgentMessages.js.map +1 -0
  317. package/dist/provider/messages/composer.d.ts +112 -0
  318. package/dist/provider/messages/composer.d.ts.map +1 -0
  319. package/dist/provider/messages/composer.js +165 -0
  320. package/dist/provider/messages/composer.js.map +1 -0
  321. package/dist/provider/messages/intervention.d.ts +136 -0
  322. package/dist/provider/messages/intervention.d.ts.map +1 -0
  323. package/dist/provider/messages/intervention.js +321 -0
  324. package/dist/provider/messages/intervention.js.map +1 -0
  325. package/dist/provider/messages/message.d.ts +119 -0
  326. package/dist/provider/messages/message.d.ts.map +1 -0
  327. package/dist/provider/messages/message.js +224 -0
  328. package/dist/provider/messages/message.js.map +1 -0
  329. package/dist/provider/messages/shell.d.ts +70 -0
  330. package/dist/provider/messages/shell.d.ts.map +1 -0
  331. package/dist/provider/messages/shell.js +109 -0
  332. package/dist/provider/messages/shell.js.map +1 -0
  333. package/dist/provider/messages/status.d.ts +21 -0
  334. package/dist/provider/messages/status.d.ts.map +1 -0
  335. package/dist/provider/messages/status.js +195 -0
  336. package/dist/provider/messages/status.js.map +1 -0
  337. package/dist/provider/messages/tools.d.ts +217 -0
  338. package/dist/provider/messages/tools.d.ts.map +1 -0
  339. package/dist/provider/messages/tools.js +496 -0
  340. package/dist/provider/messages/tools.js.map +1 -0
  341. package/dist/provider/messages/workspace.d.ts +187 -0
  342. package/dist/provider/messages/workspace.d.ts.map +1 -0
  343. package/dist/provider/messages/workspace.js +333 -0
  344. package/dist/provider/messages/workspace.js.map +1 -0
  345. package/dist/styles/artifact.css +564 -0
  346. package/dist/styles/base.css +220 -0
  347. package/dist/styles/composer.css +1001 -0
  348. package/dist/styles/conversation.css +275 -0
  349. package/dist/styles/intervention.css +929 -0
  350. package/dist/styles/message.css +917 -0
  351. package/dist/styles/process.css +207 -0
  352. package/dist/styles/shell.css +453 -0
  353. package/dist/styles/tools.css +929 -0
  354. package/dist/styles/workspace.css +1297 -0
  355. package/dist/styles/wpi-adoption.css +24 -0
  356. package/dist/utils/cx.d.ts +3 -0
  357. package/dist/utils/cx.d.ts.map +1 -0
  358. package/dist/utils/cx.js +5 -0
  359. package/dist/utils/cx.js.map +1 -0
  360. package/package.json +64 -3
@@ -0,0 +1,58 @@
1
+ import * as React from 'react';
2
+ import type { ToolCallView } from '@wzrhine/agent-core';
3
+ import type { ToolDetailActions } from './ToolDetails.js';
4
+ /**
5
+ * ToolRecord (atlas 12): one tool call. The whole row is the disclosure trigger (a real
6
+ * `<button>` from `@wzrhine/react` Collapsible, `aria-expanded` / `aria-controls`) whose
7
+ * accessible name reads category, name, subject, summary, status and elapsed time. The raw tool
8
+ * name is in the name's `title` and in the details.
9
+ *
10
+ * Details mount on first open (the panel is unmounted while closed). When
11
+ * `tool.detailsLoaded === false`, opening calls `onLoadDetails(id)` once and shows a skeleton in
12
+ * an `aria-busy` container until the adapter delivers the record; `detailsError` shows the
13
+ * failure with a retry that calls `onLoadDetails` again. A summary is never presented as the full
14
+ * record. The expanded state lives here (or in `expanded` / `onExpandedChange`) and survives any
15
+ * status change. Height animates through Collapsible (CSS, interruptible, instant when reduced);
16
+ * the row itself has no layout animation.
17
+ */
18
+ export type ToolRecordProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {
19
+ tool: ToolCallView;
20
+ expanded?: boolean;
21
+ defaultExpanded?: boolean;
22
+ onExpandedChange?: (expanded: boolean, id: string) => void;
23
+ /** Called when the row opens and `tool.detailsLoaded === false`, and on retry. */
24
+ onLoadDetails?: (id: string) => void;
25
+ /** Loading the full record failed (shown with a retry when `onLoadDetails` exists). */
26
+ detailsError?: React.ReactNode;
27
+ detailsLoading?: boolean;
28
+ onRetry?: (tool: ToolCallView) => void;
29
+ /** Override the detail body. Return `undefined` to fall back to the built-in view. */
30
+ renderDetail?: (tool: ToolCallView) => React.ReactNode | undefined;
31
+ /** Callbacks for the built-in detail views (read more, reload, open terminal…). */
32
+ detailActions?: ToolDetailActions;
33
+ /** Controls placed next to the row (outside the trigger button), e.g. 「在对话中定位」. */
34
+ actions?: React.ReactNode;
35
+ /** Extra content at the end of the details (e.g. Code Mode script). */
36
+ detailsFooter?: React.ReactNode;
37
+ };
38
+ export declare const ToolRecord: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & {
39
+ tool: ToolCallView;
40
+ expanded?: boolean;
41
+ defaultExpanded?: boolean;
42
+ onExpandedChange?: (expanded: boolean, id: string) => void;
43
+ /** Called when the row opens and `tool.detailsLoaded === false`, and on retry. */
44
+ onLoadDetails?: (id: string) => void;
45
+ /** Loading the full record failed (shown with a retry when `onLoadDetails` exists). */
46
+ detailsError?: React.ReactNode;
47
+ detailsLoading?: boolean;
48
+ onRetry?: (tool: ToolCallView) => void;
49
+ /** Override the detail body. Return `undefined` to fall back to the built-in view. */
50
+ renderDetail?: (tool: ToolCallView) => React.ReactNode | undefined;
51
+ /** Callbacks for the built-in detail views (read more, reload, open terminal…). */
52
+ detailActions?: ToolDetailActions;
53
+ /** Controls placed next to the row (outside the trigger button), e.g. 「在对话中定位」. */
54
+ actions?: React.ReactNode;
55
+ /** Extra content at the end of the details (e.g. Code Mode script). */
56
+ detailsFooter?: React.ReactNode;
57
+ } & React.RefAttributes<HTMLDivElement>>;
58
+ //# sourceMappingURL=ToolRecord.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolRecord.d.ts","sourceRoot":"","sources":["../../../src/components/tools/ToolRecord.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,GAAG;IACrF,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,kFAAkF;IAClF,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,uFAAuF;IACvF,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,sFAAsF;IACtF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACnE,mFAAmF;IACnF,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,mFAAmF;IACnF,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,uEAAuE;IACvE,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,UAAU;UApBf,YAAY;eACP,OAAO;sBACA,OAAO;uBACN,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI;IAC1D,kFAAkF;oBAClE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI;IACpC,uFAAuF;mBACxE,KAAK,CAAC,SAAS;qBACb,OAAO;cACd,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI;IACtC,sFAAsF;mBACvE,CAAC,IAAI,EAAE,YAAY,KAAK,KAAK,CAAC,SAAS,GAAG,SAAS;IAClE,mFAAmF;oBACnE,iBAAiB;IACjC,mFAAmF;cACzE,KAAK,CAAC,SAAS;IACzB,uEAAuE;oBACvD,KAAK,CAAC,SAAS;wCA2H/B,CAAC"}
@@ -0,0 +1,79 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { toolStatusMeta } from '@wzrhine/agent-core';
5
+ import { Collapsible, Skeleton } from '@wzrhine/react';
6
+ import { useAgentFormat, useAgentMessages } from '../../provider/AgentMessages.js';
7
+ import { cx } from '../../utils/cx.js';
8
+ import { ToolDetail } from './ToolDetails.js';
9
+ import { ActionButton, ToolCategoryChip, Notice, ToolStatusPill } from './shared.js';
10
+ export const ToolRecord = React.forwardRef(function ToolRecord({ tool, expanded, defaultExpanded = false, onExpandedChange, onLoadDetails, detailsError, detailsLoading = false, onRetry, renderDetail, detailActions, actions, detailsFooter, className, ...rest }, ref) {
11
+ const messages = useAgentMessages();
12
+ const m = messages.tools;
13
+ const fmt = useAgentFormat();
14
+ const [innerOpen, setInnerOpen] = React.useState(defaultExpanded);
15
+ const open = expanded ?? innerOpen;
16
+ const requested = React.useRef(false);
17
+ const needsLoad = tool.detailsLoaded === false || detailsLoading;
18
+ const disabled = Boolean(tool.disabled);
19
+ // One request per row while the record is missing; StrictMode-safe via the ref.
20
+ React.useEffect(() => {
21
+ if (!needsLoad) {
22
+ requested.current = false;
23
+ return;
24
+ }
25
+ if (open && !requested.current && onLoadDetails && detailsError == null) {
26
+ requested.current = true;
27
+ onLoadDetails(tool.id);
28
+ }
29
+ }, [open, needsLoad, onLoadDetails, detailsError, tool.id]);
30
+ const setOpen = (next) => {
31
+ if (expanded === undefined)
32
+ setInnerOpen(next);
33
+ onExpandedChange?.(next, tool.id);
34
+ };
35
+ const category = tool.category ?? 'other';
36
+ const name = tool.displayName ?? tool.name;
37
+ const statusLabel = messages.status.tool[tool.status] ?? tool.status;
38
+ const elapsed = tool.elapsedMs != null ? fmt.duration(tool.elapsedMs) : undefined;
39
+ const label = m.rowLabel({
40
+ category: messages.status.category[category],
41
+ name,
42
+ subject: tool.subject,
43
+ summary: tool.summary,
44
+ status: statusLabel,
45
+ elapsed: elapsed ? messages.status.elapsed(elapsed) : undefined,
46
+ });
47
+ const meta = toolStatusMeta[tool.status] ?? toolStatusMeta.unknown;
48
+ const trigger = (_jsxs("span", { className: "rl-agent-tool-row", children: [_jsx(ToolCategoryChip, { category: category, className: "rl-agent-tool-row__chip" }), _jsxs("span", { className: "rl-agent-tool-row__main", children: [_jsx("span", { className: "rl-agent-tool-row__name", title: tool.name, children: name }), tool.subject && (_jsx("span", { className: "rl-agent-tool-row__subject", title: tool.subject, children: tool.subject })), tool.summary && _jsx("span", { className: "rl-agent-tool-row__summary", children: tool.summary })] }), _jsxs("span", { className: "rl-agent-tool-row__status", children: [_jsx(ToolStatusPill, { status: tool.status }), elapsed && _jsx("span", { className: "rl-agent-tool-row__elapsed", children: elapsed })] })] }));
49
+ return (_jsx("div", { ...rest, ref: ref, className: cx('rl-agent-tool', className), "data-status": tool.status, "data-category": category, "data-active": meta.active || undefined, "data-tool-id": tool.id, "data-disabled": disabled || undefined, children: _jsxs("div", { className: "rl-agent-tool__head", children: [tool.failure && _jsxs(Notice, { tone: "danger", action: tool.failure.retryable && onRetry && _jsx(ActionButton, { icon: "retry", onClick: () => onRetry(tool), children: m.retry }), children: [_jsx("code", { children: tool.failure.code }), " ", tool.failure.message] }), _jsx(Collapsible, { className: "rl-agent-tool__disclosure", open: open, disabled: disabled, onOpenChange: setOpen, trigger: trigger, triggerProps: {
50
+ className: 'rl-agent-tool__trigger',
51
+ 'aria-label': label,
52
+ }, panelClassName: "rl-agent-tool__panel", children: _jsx(ToolRecordDetails, { tool: tool, name: name, needsLoad: needsLoad, detailsError: detailsError, onRetry: onLoadDetails ? () => onLoadDetails(tool.id) : undefined, renderDetail: renderDetail, detailActions: detailActions, footer: detailsFooter }) }), actions != null && _jsx("div", { className: "rl-agent-tool__actions", children: actions })] }) }));
53
+ });
54
+ function ToolRecordDetails({ tool, name, needsLoad, detailsError, onRetry, renderDetail, detailActions, footer, }) {
55
+ const messages = useAgentMessages();
56
+ const m = messages.tools;
57
+ const auth = tool.authorization;
58
+ let body;
59
+ if (needsLoad && detailsError != null) {
60
+ body = (_jsx(Notice, { tone: "danger", action: onRetry && (_jsx(ActionButton, { icon: "retry", onClick: onRetry, children: m.retry })), children: detailsError === true || detailsError === '' ? m.detailsError : detailsError }));
61
+ }
62
+ else if (needsLoad) {
63
+ body = (_jsxs("div", { className: "rl-agent-tool__loading", "aria-busy": "true", children: [_jsx(Skeleton, { shape: "text", lines: 3 }), _jsx("p", { className: "rl-agent-tool__loading-text", role: "status", children: m.loadingDetails })] }));
64
+ }
65
+ else {
66
+ const custom = renderDetail?.(tool);
67
+ body =
68
+ custom !== undefined ? (custom) : tool.detail ? (_jsx(ToolDetail, { tool: tool, ...detailActions })) : (_jsx("p", { className: "rl-agent-detail__aside", children: m.noDetails }));
69
+ }
70
+ const receipt = tool.receipt && tool.receipt.status !== 'idle' ? tool.receipt : undefined;
71
+ return (_jsxs("div", { className: "rl-agent-tool__details", role: "group", "aria-label": m.detailsRegion(name), children: [_jsxs("p", { className: "rl-agent-tool__facts", children: [_jsx("code", { className: "rl-agent-tool__raw", title: m.rawName(tool.name), children: tool.name }), auth && _jsx("span", { className: "rl-agent-tool__auth", children: m.authorization(m.authorizationDecision[auth.decision], auth.source) })] }), body, receipt && (_jsxs(Notice, { tone: receipt.status === 'unknown'
72
+ ? 'warning'
73
+ : receipt.status === 'rejected'
74
+ ? 'danger'
75
+ : receipt.status === 'accepted'
76
+ ? 'success'
77
+ : 'info', children: [m.receipt[receipt.status], receipt.reason ? ` · ${receipt.reason}` : ''] })), footer] }));
78
+ }
79
+ //# sourceMappingURL=ToolRecord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolRecord.js","sourceRoot":"","sources":["../../../src/components/tools/ToolRecord.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import * as React from 'react';
2
+ import type { AgentTone, StatusGlyphName, ToolCategory, ToolStatus } from '@wzrhine/agent-core';
3
+ import type { AgentIconName } from '../../primitives/icons.js';
4
+ /** Icon + tone per tool category. Tone is never the only signal: the chip always has text. */
5
+ export declare const categoryMeta: Record<ToolCategory, {
6
+ icon: AgentIconName;
7
+ tone: AgentTone | 'ink';
8
+ }>;
9
+ export declare function ToolCategoryChip({ category, className }: {
10
+ category?: ToolCategory | (string & {});
11
+ className?: string;
12
+ }): React.JSX.Element;
13
+ /** Status pill for a tool status: glyph + shared label (+ meta). */
14
+ export declare function ToolStatusPill({ status, meta, appearance, }: {
15
+ status: ToolStatus;
16
+ meta?: React.ReactNode;
17
+ appearance?: 'pill' | 'inline';
18
+ }): React.JSX.Element;
19
+ /** Plain glyph + tone + label pill for local enums (diff status, execution state…). */
20
+ export declare function Pill({ glyph, tone, label, active, }: {
21
+ glyph: StatusGlyphName;
22
+ tone: AgentTone;
23
+ label: React.ReactNode;
24
+ active?: boolean;
25
+ }): React.JSX.Element;
26
+ /** Copy text to the clipboard. `onCopyText` replaces the default `navigator.clipboard` write. */
27
+ export declare function CopyButton({ text, label, onCopyText, className, }: {
28
+ text: string;
29
+ /** Accessible name; defaults to 「复制」. */
30
+ label?: string;
31
+ onCopyText?: (text: string) => void | Promise<void>;
32
+ className?: string;
33
+ }): React.JSX.Element;
34
+ /** Small text button used for in-detail actions (load more, reload, open terminal). */
35
+ export declare function ActionButton({ children, icon, onClick, tone, disabled, busy, describedBy, }: {
36
+ children: React.ReactNode;
37
+ icon?: AgentIconName;
38
+ onClick: () => void;
39
+ tone?: 'accent' | 'neutral';
40
+ disabled?: boolean;
41
+ busy?: boolean;
42
+ describedBy?: string;
43
+ }): React.JSX.Element;
44
+ /**
45
+ * Bounded, horizontally scrollable code view. Optional line numbers start at `startLine` and are
46
+ * `aria-hidden` + unselectable, so copying the code never copies the gutter. The scroller is a
47
+ * focusable named region, so keyboard users can scroll it.
48
+ */
49
+ export declare function CodeView({ code, label, startLine, tone, className, }: {
50
+ code: string;
51
+ label: string;
52
+ /** Show a line-number gutter starting at this 1-based line. */
53
+ startLine?: number;
54
+ tone?: 'surface' | 'inverse';
55
+ className?: string;
56
+ }): React.JSX.Element;
57
+ export interface MetaEntry {
58
+ label: React.ReactNode;
59
+ value: React.ReactNode;
60
+ mono?: boolean;
61
+ }
62
+ /** Key/value facts of a detail view (`<dl>`); entries with an empty value are dropped. */
63
+ export declare function MetaList({ items, label, className, }: {
64
+ items: Array<MetaEntry | false | null | undefined | ''>;
65
+ label?: string;
66
+ className?: string;
67
+ }): React.JSX.Element | null;
68
+ /** One-line notice inside a detail: icon + text, toned. Not a live region. */
69
+ export declare function Notice({ tone, children, action, id, }: {
70
+ tone?: 'neutral' | 'info' | 'warning' | 'danger' | 'success';
71
+ children: React.ReactNode;
72
+ action?: React.ReactNode;
73
+ id?: string;
74
+ }): React.JSX.Element;
75
+ /** Pretty-print JSON content; anything that does not parse is returned untouched. */
76
+ export declare function prettyJson(content: string): string;
77
+ /** Serialise an arbitrary value for display (strings stay as-is unless they hold JSON). */
78
+ export declare function toDisplayJson(value: unknown): string;
79
+ /** Maximum number of rows that still get an entrance when they arrive together. */
80
+ export declare const ENTRANCE_BATCH_LIMIT = 20;
81
+ /**
82
+ * Tracks which ids appeared after the first render. Returns, per id, its index within the batch
83
+ * that just arrived (for stagger) or `-1` for rows present at mount / already seen. Batches larger
84
+ * than `ENTRANCE_BATCH_LIMIT` get no entrance at all (history restore, page loads).
85
+ */
86
+ export declare function useFreshIndex(ids: readonly string[]): (id: string) => number;
87
+ /** Statuses that mean "still moving". */
88
+ export declare const ACTIVE_TOOL_STATUSES: readonly ToolStatus[];
89
+ export declare const FAILED_TOOL_STATUSES: readonly ToolStatus[];
90
+ /** Fixed display order for aggregated status counts. */
91
+ export declare const TOOL_STATUS_ORDER: readonly ToolStatus[];
92
+ export declare function countStatuses(statuses: readonly ToolStatus[]): Array<[ToolStatus, number]>;
93
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/components/tools/shared.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { toolStatusMeta } from '@wzrhine/agent-core';
5
+ import { useAgentMessages } from '../../provider/AgentMessages.js';
6
+ import { AgentIcon } from '../../primitives/icons.js';
7
+ import { AgentStatus } from '../../primitives/AgentStatus.js';
8
+ import { cx } from '../../utils/cx.js';
9
+ /*
10
+ * Small building blocks shared by the tools family: category chip, copy button, bounded code
11
+ * view, key/value list, inline notice and the "fresh rows" tracker that decides which rows get a
12
+ * first entrance. Internal to the family (only the types that leak into public props are exported
13
+ * from the package entry).
14
+ */
15
+ /** Icon + tone per tool category. Tone is never the only signal: the chip always has text. */
16
+ export const categoryMeta = {
17
+ read: { icon: 'file', tone: 'info' },
18
+ write: { icon: 'edit', tone: 'accent' },
19
+ execute: { icon: 'terminal', tone: 'ink' },
20
+ network: { icon: 'globe', tone: 'info' },
21
+ model: { icon: 'model', tone: 'neutral' },
22
+ agent: { icon: 'agent', tone: 'neutral' },
23
+ question: { icon: 'question', tone: 'neutral' },
24
+ other: { icon: 'tool', tone: 'neutral' },
25
+ };
26
+ export function ToolCategoryChip({ category = 'other', className }) {
27
+ const m = useAgentMessages();
28
+ const meta = categoryMeta[category] ?? categoryMeta.other;
29
+ return (_jsxs("span", { className: cx('rl-agent-tool-chip', className), "data-category": category, "data-tone": meta.tone, children: [_jsx(AgentIcon, { name: meta.icon }), _jsx("span", { className: "rl-agent-tool-chip__label", children: m.status.category[category] ?? category })] }));
30
+ }
31
+ /** Status pill for a tool status: glyph + shared label (+ meta). */
32
+ export function ToolStatusPill({ status, meta, appearance, }) {
33
+ const m = useAgentMessages();
34
+ const s = toolStatusMeta[status] ?? toolStatusMeta.unknown;
35
+ return (_jsx(AgentStatus, { glyph: s.glyph, tone: s.tone, active: s.active, label: m.status.tool[status] ?? status, meta: meta, appearance: appearance }));
36
+ }
37
+ /** Plain glyph + tone + label pill for local enums (diff status, execution state…). */
38
+ export function Pill({ glyph, tone, label, active, }) {
39
+ return _jsx(AgentStatus, { glyph: glyph, tone: tone, label: label, active: active });
40
+ }
41
+ /** Copy text to the clipboard. `onCopyText` replaces the default `navigator.clipboard` write. */
42
+ export function CopyButton({ text, label, onCopyText, className, }) {
43
+ const m = useAgentMessages().tools;
44
+ const [state, setState] = React.useState('idle');
45
+ const timer = React.useRef(undefined);
46
+ React.useEffect(() => () => clearTimeout(timer.current), []);
47
+ const copy = async () => {
48
+ try {
49
+ if (onCopyText)
50
+ await onCopyText(text);
51
+ else if (typeof navigator !== 'undefined' && navigator.clipboard)
52
+ await navigator.clipboard.writeText(text);
53
+ else
54
+ throw new Error('clipboard unavailable');
55
+ setState('copied');
56
+ }
57
+ catch {
58
+ setState('failed');
59
+ }
60
+ clearTimeout(timer.current);
61
+ // Reset the visible confirmation; the status text stays announced once.
62
+ timer.current = setTimeout(() => setState('idle'), 2000);
63
+ };
64
+ const name = label ?? m.copy;
65
+ return (_jsxs("span", { className: cx('rl-agent-copy', className), children: [_jsxs("button", { type: "button", className: "rl-agent-tool-button", "data-size": "sm", "aria-label": name, title: name, onClick: () => void copy(), children: [_jsx(AgentIcon, { name: state === 'copied' ? 'check' : 'copy' }), _jsx("span", { className: "rl-agent-tool-button__text", "aria-hidden": "true", children: state === 'copied' ? m.copied : state === 'failed' ? m.copyFailed : m.copy })] }), _jsx("span", { className: "rl-agent-sr", role: "status", children: state === 'copied' ? m.copied : state === 'failed' ? m.copyFailed : '' })] }));
66
+ }
67
+ /** Small text button used for in-detail actions (load more, reload, open terminal). */
68
+ export function ActionButton({ children, icon, onClick, tone, disabled, busy, describedBy, }) {
69
+ return (_jsxs("button", { type: "button", className: "rl-agent-tool-button", "data-tone": tone, disabled: disabled, "aria-busy": busy || undefined, "aria-disabled": busy || undefined, "aria-describedby": describedBy, onClick: busy ? undefined : onClick, children: [icon && _jsx(AgentIcon, { name: icon }), _jsx("span", { className: "rl-agent-tool-button__text", children: children })] }));
70
+ }
71
+ /**
72
+ * Bounded, horizontally scrollable code view. Optional line numbers start at `startLine` and are
73
+ * `aria-hidden` + unselectable, so copying the code never copies the gutter. The scroller is a
74
+ * focusable named region, so keyboard users can scroll it.
75
+ */
76
+ export function CodeView({ code, label, startLine, tone = 'surface', className, }) {
77
+ const lines = React.useMemo(() => code.replace(/\r\n/g, '\n').split('\n'), [code]);
78
+ return (_jsx("div", { className: cx('rl-agent-code', className), "data-tone": tone, role: "region", tabIndex: 0, "aria-label": label, children: _jsx("pre", { className: "rl-agent-code__pre", children: _jsx("code", { children: startLine != null
79
+ ? lines.map((line, i) => (_jsxs("span", { className: "rl-agent-code__line", children: [_jsx("span", { className: "rl-agent-code__ln", "aria-hidden": "true", children: startLine + i }), _jsx("span", { className: "rl-agent-code__text", children: line }), i < lines.length - 1 ? '\n' : null] }, i)))
80
+ : code }) }) }));
81
+ }
82
+ /** Key/value facts of a detail view (`<dl>`); entries with an empty value are dropped. */
83
+ export function MetaList({ items, label, className, }) {
84
+ const shown = items.filter((x) => !!x && x.value != null && x.value !== '' && x.value !== false);
85
+ if (shown.length === 0)
86
+ return null;
87
+ return (_jsx("dl", { className: cx('rl-agent-tool-meta', className), "aria-label": label, children: shown.map((item, i) => (_jsxs("div", { className: "rl-agent-tool-meta__item", children: [_jsx("dt", { children: item.label }), _jsx("dd", { "data-mono": item.mono || undefined, children: item.value })] }, i))) }));
88
+ }
89
+ /** One-line notice inside a detail: icon + text, toned. Not a live region. */
90
+ export function Notice({ tone = 'neutral', children, action, id, }) {
91
+ const icon = tone === 'warning' || tone === 'danger' ? 'warning' : tone === 'success' ? 'check' : 'info';
92
+ return (_jsxs("div", { className: "rl-agent-notice", "data-tone": tone, children: [_jsx(AgentIcon, { name: icon }), _jsx("p", { className: "rl-agent-notice__text", id: id, children: children }), action != null && _jsx("span", { className: "rl-agent-notice__action", children: action })] }));
93
+ }
94
+ /** Pretty-print JSON content; anything that does not parse is returned untouched. */
95
+ export function prettyJson(content) {
96
+ try {
97
+ return JSON.stringify(JSON.parse(content), null, 2);
98
+ }
99
+ catch {
100
+ return content;
101
+ }
102
+ }
103
+ /** Serialise an arbitrary value for display (strings stay as-is unless they hold JSON). */
104
+ export function toDisplayJson(value) {
105
+ if (value === undefined)
106
+ return '';
107
+ if (typeof value === 'string')
108
+ return prettyJson(value);
109
+ try {
110
+ return JSON.stringify(value, null, 2) ?? String(value);
111
+ }
112
+ catch {
113
+ return String(value);
114
+ }
115
+ }
116
+ /** Maximum number of rows that still get an entrance when they arrive together. */
117
+ export const ENTRANCE_BATCH_LIMIT = 20;
118
+ /**
119
+ * Tracks which ids appeared after the first render. Returns, per id, its index within the batch
120
+ * that just arrived (for stagger) or `-1` for rows present at mount / already seen. Batches larger
121
+ * than `ENTRANCE_BATCH_LIMIT` get no entrance at all (history restore, page loads).
122
+ */
123
+ export function useFreshIndex(ids) {
124
+ const known = React.useRef(null);
125
+ if (known.current === null)
126
+ known.current = new Set(ids);
127
+ const seen = known.current;
128
+ const fresh = ids.filter((id) => !seen.has(id));
129
+ React.useEffect(() => {
130
+ for (const id of ids)
131
+ seen.add(id);
132
+ });
133
+ const allow = fresh.length > 0 && fresh.length <= ENTRANCE_BATCH_LIMIT;
134
+ return (id) => (allow ? fresh.indexOf(id) : -1);
135
+ }
136
+ /** Statuses that mean "still moving". */
137
+ export const ACTIVE_TOOL_STATUSES = ['queued', 'running', 'waiting-approval', 'waiting-user', 'waiting-children'];
138
+ export const FAILED_TOOL_STATUSES = ['failed', 'denied', 'timed-out'];
139
+ /** Fixed display order for aggregated status counts. */
140
+ export const TOOL_STATUS_ORDER = [
141
+ 'running',
142
+ 'queued',
143
+ 'waiting-approval',
144
+ 'waiting-user',
145
+ 'waiting-children',
146
+ 'unknown',
147
+ 'failed',
148
+ 'timed-out',
149
+ 'denied',
150
+ 'partial',
151
+ 'cancelled',
152
+ 'completed',
153
+ ];
154
+ export function countStatuses(statuses) {
155
+ const counts = new Map();
156
+ for (const s of statuses)
157
+ counts.set(s, (counts.get(s) ?? 0) + 1);
158
+ return TOOL_STATUS_ORDER.filter((s) => counts.has(s)).map((s) => [s, counts.get(s)]);
159
+ }
160
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/components/tools/shared.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import * as React from 'react';
2
+ import type { LedgerEventView } from '@wzrhine/agent-core';
3
+ import type { LedgerFilterKey } from '../../provider/messages/workspace.js';
4
+ import type { WorkspaceMessagesProp } from './shared.js';
5
+ /** Events in sequence order, duplicates dropped (first occurrence wins). */
6
+ export declare function orderLedger(events: readonly LedgerEventView[]): LedgerEventView[];
7
+ export type ActivityLedgerProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
8
+ events: LedgerEventView[];
9
+ /** Actor filter (controlled). */
10
+ filter?: LedgerFilterKey;
11
+ defaultFilter?: LedgerFilterKey;
12
+ onFilterChange?: (filter: LedgerFilterKey) => void;
13
+ /** Opens one event; each row title becomes a button. */
14
+ onOpenEvent?: (event: LedgerEventView) => void;
15
+ /** First load in progress (Skeleton rows, `aria-busy`). */
16
+ loading?: boolean;
17
+ /** Show the filter tabs (default true). */
18
+ showFilters?: boolean;
19
+ messages?: WorkspaceMessagesProp;
20
+ };
21
+ /**
22
+ * ActivityLedger (atlas 33): audit events of agent, tool, system and user in `sequence` order.
23
+ * Filtering hides rows but never reorders them; duplicate ids are dropped. Each row has the
24
+ * actor (icon + text), title, optional detail, a `<time dateTime>` and the outcome as glyph +
25
+ * text. Filter tabs are `@wzrhine/react` Tabs (arrow keys, `aria-selected`).
26
+ *
27
+ * Motion: rows present on first render are static; rows that arrive later enter once with
28
+ * AgentEntrance `row` (4px, fast; reduced → no movement). Nothing replays on filter changes.
29
+ */
30
+ export declare const ActivityLedger: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children"> & {
31
+ events: LedgerEventView[];
32
+ /** Actor filter (controlled). */
33
+ filter?: LedgerFilterKey;
34
+ defaultFilter?: LedgerFilterKey;
35
+ onFilterChange?: (filter: LedgerFilterKey) => void;
36
+ /** Opens one event; each row title becomes a button. */
37
+ onOpenEvent?: (event: LedgerEventView) => void;
38
+ /** First load in progress (Skeleton rows, `aria-busy`). */
39
+ loading?: boolean;
40
+ /** Show the filter tabs (default true). */
41
+ showFilters?: boolean;
42
+ messages?: WorkspaceMessagesProp;
43
+ } & React.RefAttributes<HTMLElement>>;
44
+ //# sourceMappingURL=ActivityLedger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityLedger.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/ActivityLedger.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAA0B,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAOpG,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,sCAAsC,CAAC;AAE9F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAczD,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,GAAG,eAAe,EAAE,CAKjF;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;IACtF,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,iCAAiC;IACjC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,wDAAwD;IACxD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/C,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;YAvBjB,eAAe,EAAE;IACzB,iCAAiC;aACxB,eAAe;oBACR,eAAe;qBACd,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI;IAClD,wDAAwD;kBAC1C,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI;IAC9C,2DAA2D;cACjD,OAAO;IACjB,2CAA2C;kBAC7B,OAAO;eACV,qBAAqB;qCA8FhC,CAAC"}
@@ -0,0 +1,63 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { Skeleton, Tab, TabList, Tabs } from '@wzrhine/react';
5
+ import { dedupeById } from '@wzrhine/agent-core';
6
+ import { useAgentFormat } from '../../provider/AgentMessages.js';
7
+ import { AgentEntrance } from '../../motion/agent-motion.js';
8
+ import { StatusGlyph } from '../../primitives/StatusGlyph.js';
9
+ import { AgentIcon } from '../../primitives/icons.js';
10
+ import { cx } from '../../utils/cx.js';
11
+ import { useIsNewId, useWorkspaceMessages } from './shared.js';
12
+ const FILTERS = ['all', 'agent', 'tool', 'system', 'user'];
13
+ const actorIcon = { agent: 'agent', tool: 'tool', system: 'info', user: 'at' };
14
+ const outcomeGlyph = {
15
+ info: { glyph: 'idle', tone: 'info' },
16
+ success: { glyph: 'done', tone: 'success' },
17
+ warning: { glyph: 'unknown', tone: 'warning' },
18
+ danger: { glyph: 'failed', tone: 'danger' },
19
+ neutral: { glyph: 'idle', tone: 'neutral' },
20
+ };
21
+ /** Events in sequence order, duplicates dropped (first occurrence wins). */
22
+ export function orderLedger(events) {
23
+ return dedupeById(events)
24
+ .map((event, index) => ({ event, index }))
25
+ .sort((a, b) => a.event.sequence - b.event.sequence || a.index - b.index)
26
+ .map(({ event }) => event);
27
+ }
28
+ /**
29
+ * ActivityLedger (atlas 33): audit events of agent, tool, system and user in `sequence` order.
30
+ * Filtering hides rows but never reorders them; duplicate ids are dropped. Each row has the
31
+ * actor (icon + text), title, optional detail, a `<time dateTime>` and the outcome as glyph +
32
+ * text. Filter tabs are `@wzrhine/react` Tabs (arrow keys, `aria-selected`).
33
+ *
34
+ * Motion: rows present on first render are static; rows that arrive later enter once with
35
+ * AgentEntrance `row` (4px, fast; reduced → no movement). Nothing replays on filter changes.
36
+ */
37
+ export const ActivityLedger = React.forwardRef(function ActivityLedger({ events, filter, defaultFilter = 'all', onFilterChange, onOpenEvent, loading, showFilters = true, messages: override, className, ...rest }, ref) {
38
+ const m = useWorkspaceMessages(override);
39
+ const format = useAgentFormat();
40
+ const [innerFilter, setInnerFilter] = React.useState(defaultFilter);
41
+ const active = filter ?? innerFilter;
42
+ const ordered = React.useMemo(() => orderLedger(events), [events]);
43
+ const isNew = useIsNewId(ordered.map((e) => e.id));
44
+ const visible = active === 'all' ? ordered : ordered.filter((e) => e.actor === active);
45
+ const counts = React.useMemo(() => {
46
+ const c = { all: ordered.length, agent: 0, tool: 0, system: 0, user: 0 };
47
+ for (const e of ordered)
48
+ c[e.actor] += 1;
49
+ return c;
50
+ }, [ordered]);
51
+ const listId = React.useId();
52
+ const change = (next) => {
53
+ const key = next;
54
+ if (filter === undefined)
55
+ setInnerFilter(key);
56
+ onFilterChange?.(key);
57
+ };
58
+ return (_jsxs("section", { ...rest, ref: ref, className: cx('rl-agent-ledger', className), "aria-label": m.ledgerList, "aria-busy": loading || undefined, children: [showFilters && (_jsx(Tabs, { value: active, onValueChange: change, size: "sm", variant: "segmented", className: "rl-agent-ledger__filters", children: _jsx(TabList, { "aria-label": m.ledgerFilters, children: FILTERS.map((key) => (_jsx(Tab, { value: key, meta: counts[key], "aria-controls": listId, children: m.ledgerFilter[key] }, key))) }) })), loading && ordered.length === 0 ? (_jsxs("div", { className: "rl-agent-ledger__loading", children: [_jsx(Skeleton, { lines: 3 }), _jsx("span", { className: "rl-agent-sr", children: m.ledgerLoading })] })) : visible.length === 0 ? (_jsx("p", { className: "rl-agent-ledger__empty", id: listId, children: ordered.length === 0 ? m.ledgerEmpty : m.ledgerEmptyFiltered })) : (_jsx("ol", { className: "rl-agent-ledger__list", id: listId, children: visible.map((event) => {
59
+ const outcome = event.outcome ? outcomeGlyph[event.outcome] : undefined;
60
+ return (_jsxs(AgentEntrance, { as: "li", kind: "row", animate: isNew(event.id), className: "rl-agent-ledger__row", "data-actor": event.actor, "data-outcome": event.outcome, children: [_jsxs("span", { className: "rl-agent-ledger__actor", children: [_jsx(AgentIcon, { name: actorIcon[event.actor] }), _jsx("span", { children: m.ledgerActor[event.actor] })] }), _jsxs("span", { className: "rl-agent-ledger__main", children: [onOpenEvent ? (_jsx("button", { type: "button", className: "rl-agent-ledger__title rl-agent-ledger__open", "aria-label": m.ledgerOpen(event.title), onClick: () => onOpenEvent(event), children: event.title })) : (_jsx("span", { className: "rl-agent-ledger__title", children: event.title })), event.detail && _jsx("span", { className: "rl-agent-ledger__detail", children: event.detail })] }), outcome && (_jsxs("span", { className: "rl-agent-ledger__outcome", "data-tone": outcome.tone, children: [_jsx(StatusGlyph, { name: outcome.glyph, tone: outcome.tone }), _jsx("span", { children: m.ledgerOutcome[event.outcome] })] })), _jsx("time", { className: "rl-agent-ledger__time", dateTime: event.at, children: format.time(event.at) })] }, event.id));
61
+ }) }))] }));
62
+ });
63
+ //# sourceMappingURL=ActivityLedger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActivityLedger.js","sourceRoot":"","sources":["../../../src/components/workspace/ActivityLedger.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG/D,MAAM,OAAO,GAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE9E,MAAM,SAAS,GAAuC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAEnH,MAAM,YAAY,GAA0E;IAC1F,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IACrC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3C,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;IAC9C,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC3C,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;CAC5C,CAAC;AAEF,4EAA4E;AAC5E,MAAM,UAAU,WAAW,CAAC,MAAkC;IAC5D,OAAO,UAAU,CAAC,MAAM,CAAC;SACtB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACxE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAiBD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAmC,SAAS,cAAc,CACtG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAC3I,GAAG;IAEH,MAAM,CAAC,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAkB,aAAa,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAChC,MAAM,CAAC,GAAoC,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC1G,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACd,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAE7B,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;QAC9B,MAAM,GAAG,GAAG,IAAuB,CAAC;QACpC,IAAI,MAAM,KAAK,SAAS;YAAE,cAAc,CAAC,GAAG,CAAC,CAAC;QAC9C,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO,CACL,sBAAa,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,gBAAc,CAAC,CAAC,UAAU,eAAa,OAAO,IAAI,SAAS,aAChI,WAAW,IAAI,CACd,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,SAAS,EAAC,0BAA0B,YAC5G,KAAC,OAAO,kBAAa,CAAC,CAAC,aAAa,YACjC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACpB,KAAC,GAAG,IAAW,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,mBAAiB,MAAM,YAChE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IADZ,GAAG,CAEP,CACP,CAAC,GACM,GACL,CACR,EACA,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACjC,eAAK,SAAS,EAAC,0BAA0B,aACvC,KAAC,QAAQ,IAAC,KAAK,EAAE,CAAC,GAAI,EACtB,eAAM,SAAS,EAAC,aAAa,YAAE,CAAC,CAAC,aAAa,GAAQ,IAClD,CACP,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACzB,YAAG,SAAS,EAAC,wBAAwB,EAAC,EAAE,EAAE,MAAM,YAC7C,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,GAC3D,CACL,CAAC,CAAC,CAAC,CACF,aAAI,SAAS,EAAC,uBAAuB,EAAC,EAAE,EAAE,MAAM,YAC7C,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACrB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACxE,OAAO,CACL,MAAC,aAAa,IAAC,EAAE,EAAC,IAAI,EAAgB,IAAI,EAAC,KAAK,EAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,SAAS,EAAC,sBAAsB,gBAAa,KAAK,CAAC,KAAK,kBAAgB,KAAK,CAAC,OAAO,aAC9J,gBAAM,SAAS,EAAC,wBAAwB,aACtC,KAAC,SAAS,IAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAI,EAC3C,yBAAO,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAQ,IACpC,EACP,gBAAM,SAAS,EAAC,uBAAuB,aACpC,WAAW,CAAC,CAAC,CAAC,CACb,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,8CAA8C,gBAAa,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,YACpJ,KAAK,CAAC,KAAK,GACL,CACV,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,wBAAwB,YAAE,KAAK,CAAC,KAAK,GAAQ,CAC9D,EACA,KAAK,CAAC,MAAM,IAAI,eAAM,SAAS,EAAC,yBAAyB,YAAE,KAAK,CAAC,MAAM,GAAQ,IAC3E,EACN,OAAO,IAAI,CACV,gBAAM,SAAS,EAAC,0BAA0B,eAAY,OAAO,CAAC,IAAI,aAChE,KAAC,WAAW,IAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,GAAI,EACxD,yBAAO,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAQ,CAAC,GAAQ,IACzC,CACR,EACD,eAAM,SAAS,EAAC,uBAAuB,EAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,YACvD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GACjB,KAvBmB,KAAK,CAAC,EAAE,CAwBpB,CACjB,CAAC;gBACJ,CAAC,CAAC,GACC,CACN,IACO,CACX,CAAC;AACJ,CAAC,CAAC,CAAC"}