@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,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;qCA4KjB,CAAC"}
@@ -0,0 +1,43 @@
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: (event) => {
37
+ // WebKit pointer activation does not focus buttons automatically. Make this
38
+ // programmatic drawer's opener explicit before its focus scope mounts.
39
+ event.currentTarget.focus({ preventScroll: true });
40
+ onToggleContext();
41
+ } }))] })] }));
42
+ });
43
+ //# sourceMappingURL=AgentHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentHeader.js","sourceRoot":"","sources":["../../../src/components/shell/AgentHeader.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * AgentShell (atlas 01): the workbench frame. It owns regions, slots, focus and responsive
4
+ * behaviour only; routing, window chrome and data stay with the host (ADR-0011 §9).
5
+ *
6
+ * Layout, from the inline start: `rail` (app navigation) · `index` (conversation index) · reading
7
+ * column (`header` / `conversation` / `composer`) · ResizeHandle · `context` (side pane). Every
8
+ * column scrolls on its own (`min-height: 0` + `overflow: auto`); reading content is capped at
9
+ * `--rl-agent-reading-width` and centred, so wide screens never stretch long lines.
10
+ *
11
+ * Responsive: the shell measures its own width (ResizeObserver; without it the shell stays
12
+ * `wide`), so two shells on one page, or a shell inside a card, decide independently.
13
+ * - `wide`: every column inline.
14
+ * - `compact` (< `breakpoints.context` rem): the context pane leaves the row first instead of
15
+ * squeezing the reading column; opening it shows a Drawer sheet.
16
+ * - `narrow` (< `breakpoints.index` rem): the index becomes a sheet too and the rail is hidden;
17
+ * one reading column remains.
18
+ * Shrinking past a breakpoint closes what no longer fits (`onContextOpenChange(false, 'layout')`,
19
+ * so `aria-pressed` on toggles always matches what is visible) and growing back reopens it,
20
+ * unless the user toggled it in between. Controlled hosts receive the same calls.
21
+ *
22
+ * Landmarks: the shell does not force `main`. The reading column is a `<section aria-label>`
23
+ * (`mainLabel`); wrap the shell in `<main>` when it is the page's main content. The index is a
24
+ * labelled section; AgentSidePane brings its own `complementary` landmark. Closing the inline
25
+ * pane while focus is inside it returns focus to the element that was focused when it opened
26
+ * (typically the header toggle); sheets restore focus through Drawer.
27
+ *
28
+ * Motion (ADR-0012): the inline pane opens / closes with a single-axis CSS translate + opacity
29
+ * transition on `--rl-motion-panel`, interruptible and instant under reduced motion. Its width
30
+ * is never animated: it appears at once on open and is released only after the exit fade.
31
+ * Dragging the ResizeHandle follows the pointer directly.
32
+ */
33
+ export type AgentShellLayout = 'wide' | 'compact' | 'narrow';
34
+ /** Why an open state changed: user toggle, sheet dismissal, layout breakpoint, a new selection. */
35
+ export type AgentShellOpenReason = 'toggle' | 'dismiss' | 'layout' | 'selection';
36
+ export interface AgentShellContextValue {
37
+ layout: AgentShellLayout;
38
+ hasContext: boolean;
39
+ hasIndex: boolean;
40
+ contextOpen: boolean;
41
+ setContextOpen: (open: boolean, reason?: AgentShellOpenReason) => void;
42
+ toggleContext: () => void;
43
+ indexOpen: boolean;
44
+ setIndexOpen: (open: boolean, reason?: AgentShellOpenReason) => void;
45
+ /** The index is not visible as an inline column (narrow layout or collapsed). */
46
+ indexCollapsed: boolean;
47
+ }
48
+ /** Where the context slot is rendered right now. */
49
+ export type AgentContextPresentation = 'inline' | 'sheet' | 'standalone';
50
+ /** The nearest AgentShell's state and toggles, or `null` outside a shell. */
51
+ export declare function useAgentShell(): AgentShellContextValue | null;
52
+ /** How the surrounding shell presents the context slot (AgentSidePane hides its close button in a sheet). */
53
+ export declare function useAgentContextPresentation(): AgentContextPresentation;
54
+ export type AgentShellProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> & {
55
+ /** App navigation rail (hidden on narrow layouts; the host offers its own menu there). */
56
+ rail?: React.ReactNode;
57
+ /** Conversation index column, usually a ConversationList. */
58
+ index?: React.ReactNode;
59
+ header?: React.ReactNode;
60
+ /** Main reading area (MessageList). */
61
+ conversation?: React.ReactNode;
62
+ /** Docked at the bottom of the reading column. */
63
+ composer?: React.ReactNode;
64
+ /** Side pane, usually an AgentSidePane. */
65
+ context?: React.ReactNode;
66
+ /** Accessible name of the reading column. */
67
+ mainLabel?: string;
68
+ /** Accessible name of the index column and title of the index sheet. */
69
+ indexLabel?: string;
70
+ /** Title of the context sheet on compact / narrow layouts. */
71
+ contextLabel?: string;
72
+ contextOpen?: boolean;
73
+ defaultContextOpen?: boolean;
74
+ onContextOpenChange?: (open: boolean, reason: AgentShellOpenReason) => void;
75
+ indexOpen?: boolean;
76
+ defaultIndexOpen?: boolean;
77
+ onIndexOpenChange?: (open: boolean, reason: AgentShellOpenReason) => void;
78
+ /** Width of the inline context pane in CSS pixels. */
79
+ contextSize?: number;
80
+ defaultContextSize?: number;
81
+ onContextSizeChange?: (size: number) => void;
82
+ readingMin?: number;
83
+ resizeStep?: number;
84
+ resizeLargeStep?: number;
85
+ onContextClosed?: () => void;
86
+ contextMin?: number;
87
+ contextMax?: number;
88
+ /** Show the ResizeHandle between reading column and pane (default true). */
89
+ resizable?: boolean;
90
+ /** Breakpoints in rem of the shell's own width (defaults: context 64, index 40). */
91
+ breakpoints?: {
92
+ context?: number;
93
+ index?: number;
94
+ };
95
+ /** Force a layout (tests, hosts that already know their size). Overrides measurement. */
96
+ layout?: AgentShellLayout;
97
+ /** Id of the conversation being read; a change closes the index sheet on narrow layouts. */
98
+ activeId?: string;
99
+ /** Stable view identity for main conversation ↔ sub-task transitions. */
100
+ viewKey?: string;
101
+ /** Direction of the view drill-down animation. */
102
+ direction?: 'forward' | 'back';
103
+ };
104
+ export declare const AgentShell: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLDivElement>, "children"> & {
105
+ /** App navigation rail (hidden on narrow layouts; the host offers its own menu there). */
106
+ rail?: React.ReactNode;
107
+ /** Conversation index column, usually a ConversationList. */
108
+ index?: React.ReactNode;
109
+ header?: React.ReactNode;
110
+ /** Main reading area (MessageList). */
111
+ conversation?: React.ReactNode;
112
+ /** Docked at the bottom of the reading column. */
113
+ composer?: React.ReactNode;
114
+ /** Side pane, usually an AgentSidePane. */
115
+ context?: React.ReactNode;
116
+ /** Accessible name of the reading column. */
117
+ mainLabel?: string;
118
+ /** Accessible name of the index column and title of the index sheet. */
119
+ indexLabel?: string;
120
+ /** Title of the context sheet on compact / narrow layouts. */
121
+ contextLabel?: string;
122
+ contextOpen?: boolean;
123
+ defaultContextOpen?: boolean;
124
+ onContextOpenChange?: (open: boolean, reason: AgentShellOpenReason) => void;
125
+ indexOpen?: boolean;
126
+ defaultIndexOpen?: boolean;
127
+ onIndexOpenChange?: (open: boolean, reason: AgentShellOpenReason) => void;
128
+ /** Width of the inline context pane in CSS pixels. */
129
+ contextSize?: number;
130
+ defaultContextSize?: number;
131
+ onContextSizeChange?: (size: number) => void;
132
+ readingMin?: number;
133
+ resizeStep?: number;
134
+ resizeLargeStep?: number;
135
+ onContextClosed?: () => void;
136
+ contextMin?: number;
137
+ contextMax?: number;
138
+ /** Show the ResizeHandle between reading column and pane (default true). */
139
+ resizable?: boolean;
140
+ /** Breakpoints in rem of the shell's own width (defaults: context 64, index 40). */
141
+ breakpoints?: {
142
+ context?: number;
143
+ index?: number;
144
+ };
145
+ /** Force a layout (tests, hosts that already know their size). Overrides measurement. */
146
+ layout?: AgentShellLayout;
147
+ /** Id of the conversation being read; a change closes the index sheet on narrow layouts. */
148
+ activeId?: string;
149
+ /** Stable view identity for main conversation ↔ sub-task transitions. */
150
+ viewKey?: string;
151
+ /** Direction of the view drill-down animation. */
152
+ direction?: "forward" | "back";
153
+ } & React.RefAttributes<HTMLDivElement>>;
154
+ //# sourceMappingURL=AgentShell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentShell.d.ts","sourceRoot":"","sources":["../../../src/components/shell/AgentShell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { motion } from 'motion/react';
5
+ import { Drawer } from '@wzrhine/react';
6
+ import { useRhineMotion } from '@wzrhine/react';
7
+ import { useAgentMessages } from '../../provider/AgentMessages.js';
8
+ import { cx } from '../../utils/cx.js';
9
+ import { ResizeHandle } from './ResizeHandle.js';
10
+ import { useIsoLayoutEffect } from './use-controllable.js';
11
+ const ShellContext = React.createContext(null);
12
+ const PresentationContext = React.createContext('standalone');
13
+ /** The nearest AgentShell's state and toggles, or `null` outside a shell. */
14
+ export function useAgentShell() {
15
+ return React.useContext(ShellContext);
16
+ }
17
+ /** How the surrounding shell presents the context slot (AgentSidePane hides its close button in a sheet). */
18
+ export function useAgentContextPresentation() {
19
+ return React.useContext(PresentationContext);
20
+ }
21
+ const DEFAULT_BREAKPOINTS = { context: 64, index: 40 };
22
+ /** Reading column kept free when clamping the pane width (CSS pixels, 20rem at 16px). */
23
+ const READING_MIN = 320;
24
+ const rank = { narrow: 0, compact: 1, wide: 2 };
25
+ function rootFontSize() {
26
+ if (typeof document === 'undefined' || typeof getComputedStyle === 'undefined')
27
+ return 16;
28
+ return Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;
29
+ }
30
+ function useShellMeasure(ref, contextAt, indexAt) {
31
+ const [state, setState] = React.useState({ layout: 'wide', width: 0, side: 0 });
32
+ useIsoLayoutEffect(() => {
33
+ const el = ref.current;
34
+ if (!el)
35
+ return undefined;
36
+ const measure = () => {
37
+ const width = Math.round(el.getBoundingClientRect().width);
38
+ if (!width)
39
+ return;
40
+ const rem = rootFontSize();
41
+ const layout = width < indexAt * rem ? 'narrow' : width < contextAt * rem ? 'compact' : 'wide';
42
+ let side = 0;
43
+ for (const child of Array.from(el.children)) {
44
+ if (child.matches('.rl-agent-shell__rail, .rl-agent-shell__index'))
45
+ side += child.offsetWidth;
46
+ }
47
+ setState((prev) => (prev.layout === layout && prev.width === width && prev.side === side ? prev : { layout, width, side }));
48
+ };
49
+ measure();
50
+ if (typeof ResizeObserver === 'undefined')
51
+ return undefined;
52
+ const observer = new ResizeObserver(measure);
53
+ observer.observe(el);
54
+ return () => observer.disconnect();
55
+ }, [ref, contextAt, indexAt]);
56
+ return state;
57
+ }
58
+ function useOpenState(value, defaultValue, onChange) {
59
+ const [inner, setInner] = React.useState(defaultValue);
60
+ const controlled = value !== undefined;
61
+ const open = controlled ? value : inner;
62
+ const latest = React.useRef(open);
63
+ latest.current = open;
64
+ const onChangeRef = React.useRef(onChange);
65
+ onChangeRef.current = onChange;
66
+ const restore = React.useRef(false);
67
+ const set = React.useCallback((next, reason = 'toggle') => {
68
+ if (reason !== 'layout')
69
+ restore.current = false;
70
+ if (next === latest.current)
71
+ return;
72
+ latest.current = next;
73
+ if (!controlled)
74
+ setInner(next);
75
+ onChangeRef.current?.(next, reason);
76
+ }, [controlled]);
77
+ return { open, set, restore };
78
+ }
79
+ /** Scroll container that is keyboard-focusable only while it actually overflows. */
80
+ function useScrollable() {
81
+ const [node, setNode] = React.useState(null);
82
+ const [scrollable, setScrollable] = React.useState(false);
83
+ useIsoLayoutEffect(() => {
84
+ if (!node || typeof ResizeObserver === 'undefined')
85
+ return undefined;
86
+ const update = () => setScrollable(node.scrollHeight > node.clientHeight + 1);
87
+ update();
88
+ const observer = new ResizeObserver(update);
89
+ observer.observe(node);
90
+ const content = node.firstElementChild;
91
+ if (content)
92
+ observer.observe(content);
93
+ return () => observer.disconnect();
94
+ }, [node]);
95
+ return { ref: setNode, scrollable };
96
+ }
97
+ const present = (node) => node != null && node !== false;
98
+ export const AgentShell = React.forwardRef(function AgentShell({ rail, index, header, conversation, composer, context, mainLabel, indexLabel, contextLabel, contextOpen: contextOpenProp, defaultContextOpen = false, onContextOpenChange, indexOpen: indexOpenProp, defaultIndexOpen = true, onIndexOpenChange, contextSize, defaultContextSize = 352, onContextSizeChange, contextMin = 288, contextMax = 640, readingMin = READING_MIN, resizeStep = 16, resizeLargeStep = 64, onContextClosed, resizable = true, breakpoints, layout: layoutProp, activeId, viewKey, direction = 'forward', className, style, ...rest }, forwardedRef) {
99
+ const messages = useAgentMessages().shell;
100
+ const motionPrefs = useRhineMotion();
101
+ const rootRef = React.useRef(null);
102
+ const contextRef = React.useRef(null);
103
+ const setRoot = React.useCallback((el) => {
104
+ rootRef.current = el;
105
+ if (typeof forwardedRef === 'function')
106
+ forwardedRef(el);
107
+ else if (forwardedRef)
108
+ forwardedRef.current = el;
109
+ }, [forwardedRef]);
110
+ const measured = useShellMeasure(rootRef, breakpoints?.context ?? DEFAULT_BREAKPOINTS.context, breakpoints?.index ?? DEFAULT_BREAKPOINTS.index);
111
+ const layout = layoutProp ?? measured.layout;
112
+ const hasContext = present(context);
113
+ const hasIndex = present(index);
114
+ const ctx = useOpenState(contextOpenProp, defaultContextOpen, onContextOpenChange);
115
+ const idx = useOpenState(indexOpenProp, defaultIndexOpen, onIndexOpenChange);
116
+ // Leaving a layout closes what no longer fits *before* a sheet could open for it: sheets only
117
+ // follow `open` once the layout change has been reconciled (`synced`).
118
+ // Starts from `wide` (the server / first-paint layout) so a narrow first measurement closes
119
+ // what the defaults opened instead of popping a sheet on load.
120
+ const [synced, setSynced] = React.useState('wide');
121
+ useIsoLayoutEffect(() => {
122
+ if (synced === layout)
123
+ return;
124
+ const reconcile = (state, threshold) => {
125
+ const was = rank[synced] >= threshold;
126
+ const is = rank[layout] >= threshold;
127
+ if (was && !is && state.open) {
128
+ state.set(false, 'layout');
129
+ state.restore.current = true;
130
+ }
131
+ else if (!was && is && state.restore.current) {
132
+ state.restore.current = false;
133
+ state.set(true, 'layout');
134
+ }
135
+ };
136
+ reconcile(ctx, rank.wide);
137
+ reconcile(idx, rank.compact);
138
+ setSynced(layout);
139
+ }, [layout, synced]);
140
+ // Picking a conversation in the narrow index sheet closes the sheet.
141
+ const prevActive = React.useRef(activeId);
142
+ React.useEffect(() => {
143
+ if (prevActive.current === activeId)
144
+ return;
145
+ prevActive.current = activeId;
146
+ if (layout === 'narrow' && idx.open)
147
+ idx.set(false, 'selection');
148
+ });
149
+ // Focus return for the inline pane: remember the opener, restore it when the pane closes with focus inside.
150
+ const opener = React.useRef(null);
151
+ const focusWithin = React.useRef(false);
152
+ const wasOpen = React.useRef(ctx.open);
153
+ useIsoLayoutEffect(() => {
154
+ if (ctx.open === wasOpen.current)
155
+ return;
156
+ wasOpen.current = ctx.open;
157
+ if (typeof document === 'undefined')
158
+ return;
159
+ const active = document.activeElement;
160
+ if (ctx.open) {
161
+ opener.current = active && active !== document.body ? active : null;
162
+ return;
163
+ }
164
+ const pane = contextRef.current;
165
+ // `inert` may already have blurred the focused control, so also trust the focus-within flag.
166
+ if (focusWithin.current || (pane && active && pane.contains(active))) {
167
+ focusWithin.current = false;
168
+ const target = opener.current;
169
+ if (target?.isConnected)
170
+ target.focus();
171
+ else
172
+ rootRef.current?.querySelector('.rl-agent-shell__main')?.focus();
173
+ }
174
+ onContextClosed?.();
175
+ opener.current = null;
176
+ }, [ctx.open, onContextClosed]);
177
+ const [innerSize, setInnerSize] = React.useState(defaultContextSize);
178
+ const rawSize = contextSize ?? innerSize;
179
+ const fitMax = measured.width ? Math.max(contextMin, Math.min(contextMax, measured.width - measured.side - readingMin)) : contextMax;
180
+ const paneSize = Math.round(Math.min(Math.max(rawSize, contextMin), fitMax));
181
+ const setSize = (next) => {
182
+ if (contextSize === undefined)
183
+ setInnerSize(next);
184
+ onContextSizeChange?.(next);
185
+ };
186
+ const inlineContext = hasContext && layout === 'wide';
187
+ const inlineIndex = hasIndex && layout !== 'narrow';
188
+ const contextOpen = hasContext && ctx.open;
189
+ const indexOpen = hasIndex && idx.open;
190
+ const value = React.useMemo(() => ({
191
+ layout,
192
+ hasContext,
193
+ hasIndex,
194
+ contextOpen,
195
+ setContextOpen: ctx.set,
196
+ toggleContext: () => ctx.set(!contextOpen, 'toggle'),
197
+ indexOpen,
198
+ setIndexOpen: idx.set,
199
+ indexCollapsed: hasIndex && (!inlineIndex || !indexOpen),
200
+ }), [layout, hasContext, hasIndex, contextOpen, ctx.set, indexOpen, idx.set, inlineIndex]);
201
+ const scroller = useScrollable();
202
+ const sheetsReady = synced === layout;
203
+ return (_jsxs(ShellContext.Provider, { value: value, children: [_jsxs("div", { ...rest, ref: setRoot, className: cx('rl-agent-shell', className), style: { ...style, ['--rl-agent-pane-size']: `${paneSize}px` }, "data-layout": layout, "data-context-open": (inlineContext && contextOpen) || undefined, children: [present(rail) && layout !== 'narrow' && _jsx("div", { className: "rl-agent-shell__rail", children: rail }), inlineIndex && indexOpen && (_jsx("section", { className: "rl-agent-shell__index", "aria-label": indexLabel ?? messages.indexLabel, children: index })), _jsxs("section", { className: "rl-agent-shell__main", "aria-label": mainLabel ?? messages.mainLabel, tabIndex: -1, children: [present(header) && _jsx("div", { className: "rl-agent-shell__header", children: header }), _jsxs(motion.div, { className: "rl-agent-shell__view", "data-view-key": viewKey, initial: viewKey ? { opacity: 0, x: motionPrefs.reduced ? 0 : direction === 'forward' ? 16 : -16 } : false, animate: { opacity: 1, x: 0 }, transition: { opacity: motionPrefs.resolve('opacity', 'base'), x: motionPrefs.resolve('transform', 'base') }, children: [_jsx("div", { ref: scroller.ref, className: "rl-agent-shell__conversation", tabIndex: scroller.scrollable ? 0 : undefined, children: _jsx("div", { className: "rl-agent-shell__reading", children: conversation }) }), present(composer) && (_jsx("div", { className: "rl-agent-shell__composer", children: _jsx("div", { className: "rl-agent-shell__reading", children: composer }) }))] }, viewKey)] }), inlineContext && resizable && contextOpen && (_jsx(ResizeHandle, { className: "rl-agent-shell__handle", size: paneSize, onSizeChange: setSize, min: contextMin, max: fitMax, resetSize: defaultContextSize, pane: "end", step: resizeStep, largeStep: resizeLargeStep })), inlineContext && (_jsx("div", { ref: contextRef, className: "rl-agent-shell__context", "data-open": contextOpen || undefined, inert: !contextOpen, "aria-hidden": !contextOpen || undefined, onFocus: () => {
204
+ focusWithin.current = true;
205
+ }, onBlur: (event) => {
206
+ if (!event.currentTarget.contains(event.relatedTarget))
207
+ focusWithin.current = false;
208
+ }, children: _jsx("div", { className: "rl-agent-shell__context-inner", children: _jsx(PresentationContext.Provider, { value: "inline", children: context }) }) }))] }), hasIndex && !inlineIndex && (_jsx(Drawer, { open: sheetsReady && indexOpen, onOpenChange: (open) => idx.set(open, 'dismiss'), side: "start", size: "sm", title: indexLabel ?? messages.indexLabel, className: "rl-agent-shell__sheet", children: index })), hasContext && !inlineContext && (_jsx(Drawer, { open: sheetsReady && contextOpen, onOpenChange: (open) => { ctx.set(open, 'dismiss'); }, side: "end", size: "md", title: contextLabel ?? messages.contextLabel, className: "rl-agent-shell__sheet", children: _jsx(PresentationContext.Provider, { value: "sheet", children: context }) }))] }));
209
+ });
210
+ //# sourceMappingURL=AgentShell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentShell.js","sourceRoot":"","sources":["../../../src/components/shell/AgentShell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * AgentSidePane (atlas 26): the context / detail pane. A `complementary` landmark
4
+ * (`<aside aria-label>`) with Tabs (@wzrhine/react) over `sections`.
5
+ *
6
+ * - Every panel stays mounted (`keepMounted`), hidden ones with `hidden`, and each panel is its
7
+ * own scroll container, so switching tabs keeps every tab's scroll position.
8
+ * - A panel that overflows becomes keyboard-scrollable (`tabIndex=0` comes from Base UI).
9
+ * - `count` renders after the tab label and is part of the tab's name; `content` can carry its
10
+ * own loading / error / empty state.
11
+ * - Close button only with `onClose`, or automatically inside an inline AgentShell pane (it
12
+ * closes the pane and the shell returns focus). Inside the shell's sheet the Drawer has its
13
+ * own close button, so the pane's title row and close button are not repeated there.
14
+ * - With one section the tab strip is omitted and the section label becomes the heading.
15
+ * - Motion: tab indicator from Tabs (CSS, `--rl-motion-base`); pane open / close belongs to
16
+ * AgentShell. No content drift between tabs.
17
+ */
18
+ export interface AgentSidePaneSection {
19
+ id: string;
20
+ label: string;
21
+ count?: number;
22
+ content: React.ReactNode;
23
+ }
24
+ export type AgentSidePaneProps = Omit<React.HTMLAttributes<HTMLElement>, 'children' | 'title'> & {
25
+ sections: AgentSidePaneSection[];
26
+ activeTab?: string;
27
+ defaultTab?: string;
28
+ onTabChange?: (id: string) => void;
29
+ /** Accessible name of the landmark (and visible heading). */
30
+ label?: string;
31
+ /** Hide the visible heading (the landmark keeps its name). */
32
+ hideHeading?: boolean;
33
+ onClose?: () => void;
34
+ closeLabel?: string;
35
+ /** Accessible name of the tab list. */
36
+ tabsLabel?: string;
37
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
38
+ };
39
+ export declare const AgentSidePane: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLElement>, "children" | "title"> & {
40
+ sections: AgentSidePaneSection[];
41
+ activeTab?: string;
42
+ defaultTab?: string;
43
+ onTabChange?: (id: string) => void;
44
+ /** Accessible name of the landmark (and visible heading). */
45
+ label?: string;
46
+ /** Hide the visible heading (the landmark keeps its name). */
47
+ hideHeading?: boolean;
48
+ onClose?: () => void;
49
+ closeLabel?: string;
50
+ /** Accessible name of the tab list. */
51
+ tabsLabel?: string;
52
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
53
+ } & React.RefAttributes<HTMLElement>>;
54
+ //# sourceMappingURL=AgentSidePane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentSidePane.d.ts","sourceRoot":"","sources":["../../../src/components/shell/AgentSidePane.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG;IAC/F,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,aAAa;cAfd,oBAAoB,EAAE;gBACpB,MAAM;iBACL,MAAM;kBACL,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI;IAClC,6DAA6D;YACrD,MAAM;IACd,8DAA8D;kBAChD,OAAO;cACX,MAAM,IAAI;iBACP,MAAM;IACnB,uCAAuC;gBAC3B,MAAM;mBACH,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;qCAwEhC,CAAC"}