@wzrhine/agent 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +21 -0
  3. package/README.md +29 -3
  4. package/dist/agent.css +15 -0
  5. package/dist/components/artifact/ArtifactCard.d.ts +56 -0
  6. package/dist/components/artifact/ArtifactCard.d.ts.map +1 -0
  7. package/dist/components/artifact/ArtifactCard.js +78 -0
  8. package/dist/components/artifact/ArtifactCard.js.map +1 -0
  9. package/dist/components/artifact/FilePreview.d.ts +117 -0
  10. package/dist/components/artifact/FilePreview.d.ts.map +1 -0
  11. package/dist/components/artifact/FilePreview.js +207 -0
  12. package/dist/components/artifact/FilePreview.js.map +1 -0
  13. package/dist/components/artifact/FilePreviewTabs.d.ts +51 -0
  14. package/dist/components/artifact/FilePreviewTabs.d.ts.map +1 -0
  15. package/dist/components/artifact/FilePreviewTabs.js +150 -0
  16. package/dist/components/artifact/FilePreviewTabs.js.map +1 -0
  17. package/dist/components/composer/AttachmentList.d.ts +33 -0
  18. package/dist/components/composer/AttachmentList.d.ts.map +1 -0
  19. package/dist/components/composer/AttachmentList.js +56 -0
  20. package/dist/components/composer/AttachmentList.js.map +1 -0
  21. package/dist/components/composer/Composer.d.ts +113 -0
  22. package/dist/components/composer/Composer.d.ts.map +1 -0
  23. package/dist/components/composer/Composer.js +327 -0
  24. package/dist/components/composer/Composer.js.map +1 -0
  25. package/dist/components/composer/ComposerInput.d.ts +101 -0
  26. package/dist/components/composer/ComposerInput.d.ts.map +1 -0
  27. package/dist/components/composer/ComposerInput.js +301 -0
  28. package/dist/components/composer/ComposerInput.js.map +1 -0
  29. package/dist/components/composer/ComposerNotice.d.ts +38 -0
  30. package/dist/components/composer/ComposerNotice.d.ts.map +1 -0
  31. package/dist/components/composer/ComposerNotice.js +16 -0
  32. package/dist/components/composer/ComposerNotice.js.map +1 -0
  33. package/dist/components/composer/MentionMenu.d.ts +37 -0
  34. package/dist/components/composer/MentionMenu.d.ts.map +1 -0
  35. package/dist/components/composer/MentionMenu.js +55 -0
  36. package/dist/components/composer/MentionMenu.js.map +1 -0
  37. package/dist/components/composer/MenuPanel.d.ts +49 -0
  38. package/dist/components/composer/MenuPanel.d.ts.map +1 -0
  39. package/dist/components/composer/MenuPanel.js +50 -0
  40. package/dist/components/composer/MenuPanel.js.map +1 -0
  41. package/dist/components/composer/ModelPicker.d.ts +40 -0
  42. package/dist/components/composer/ModelPicker.d.ts.map +1 -0
  43. package/dist/components/composer/ModelPicker.js +115 -0
  44. package/dist/components/composer/ModelPicker.js.map +1 -0
  45. package/dist/components/composer/PermissionPicker.d.ts +31 -0
  46. package/dist/components/composer/PermissionPicker.d.ts.map +1 -0
  47. package/dist/components/composer/PermissionPicker.js +43 -0
  48. package/dist/components/composer/PermissionPicker.js.map +1 -0
  49. package/dist/components/composer/SendStopButton.d.ts +71 -0
  50. package/dist/components/composer/SendStopButton.d.ts.map +1 -0
  51. package/dist/components/composer/SendStopButton.js +87 -0
  52. package/dist/components/composer/SendStopButton.js.map +1 -0
  53. package/dist/components/composer/SlashCommandMenu.d.ts +33 -0
  54. package/dist/components/composer/SlashCommandMenu.d.ts.map +1 -0
  55. package/dist/components/composer/SlashCommandMenu.js +43 -0
  56. package/dist/components/composer/SlashCommandMenu.js.map +1 -0
  57. package/dist/components/composer/composer-text.d.ts +10 -0
  58. package/dist/components/composer/composer-text.d.ts.map +1 -0
  59. package/dist/components/composer/composer-text.js +26 -0
  60. package/dist/components/composer/composer-text.js.map +1 -0
  61. package/dist/components/composer/composer-utils.d.ts +74 -0
  62. package/dist/components/composer/composer-utils.d.ts.map +1 -0
  63. package/dist/components/composer/composer-utils.js +133 -0
  64. package/dist/components/composer/composer-utils.js.map +1 -0
  65. package/dist/components/conversation/ConversationList.d.ts +88 -0
  66. package/dist/components/conversation/ConversationList.d.ts.map +1 -0
  67. package/dist/components/conversation/ConversationList.js +81 -0
  68. package/dist/components/conversation/ConversationList.js.map +1 -0
  69. package/dist/components/conversation/ConversationRow.d.ts +66 -0
  70. package/dist/components/conversation/ConversationRow.d.ts.map +1 -0
  71. package/dist/components/conversation/ConversationRow.js +65 -0
  72. package/dist/components/conversation/ConversationRow.js.map +1 -0
  73. package/dist/components/conversation/conversation-status.d.ts +21 -0
  74. package/dist/components/conversation/conversation-status.d.ts.map +1 -0
  75. package/dist/components/conversation/conversation-status.js +33 -0
  76. package/dist/components/conversation/conversation-status.js.map +1 -0
  77. package/dist/components/intervention/ApprovalDiff.d.ts +14 -0
  78. package/dist/components/intervention/ApprovalDiff.d.ts.map +1 -0
  79. package/dist/components/intervention/ApprovalDiff.js +25 -0
  80. package/dist/components/intervention/ApprovalDiff.js.map +1 -0
  81. package/dist/components/intervention/ApprovalPanel.d.ts +57 -0
  82. package/dist/components/intervention/ApprovalPanel.d.ts.map +1 -0
  83. package/dist/components/intervention/ApprovalPanel.js +111 -0
  84. package/dist/components/intervention/ApprovalPanel.js.map +1 -0
  85. package/dist/components/intervention/ErrorRecoveryNotice.d.ts +28 -0
  86. package/dist/components/intervention/ErrorRecoveryNotice.d.ts.map +1 -0
  87. package/dist/components/intervention/ErrorRecoveryNotice.js +30 -0
  88. package/dist/components/intervention/ErrorRecoveryNotice.js.map +1 -0
  89. package/dist/components/intervention/GrantList.d.ts +49 -0
  90. package/dist/components/intervention/GrantList.d.ts.map +1 -0
  91. package/dist/components/intervention/GrantList.js +58 -0
  92. package/dist/components/intervention/GrantList.js.map +1 -0
  93. package/dist/components/intervention/InterventionDock.d.ts +24 -0
  94. package/dist/components/intervention/InterventionDock.d.ts.map +1 -0
  95. package/dist/components/intervention/InterventionDock.js +18 -0
  96. package/dist/components/intervention/InterventionDock.js.map +1 -0
  97. package/dist/components/intervention/QuestionnaireCard.d.ts +60 -0
  98. package/dist/components/intervention/QuestionnaireCard.d.ts.map +1 -0
  99. package/dist/components/intervention/QuestionnaireCard.js +322 -0
  100. package/dist/components/intervention/QuestionnaireCard.js.map +1 -0
  101. package/dist/components/intervention/action-lock.d.ts +20 -0
  102. package/dist/components/intervention/action-lock.d.ts.map +1 -0
  103. package/dist/components/intervention/action-lock.js +65 -0
  104. package/dist/components/intervention/action-lock.js.map +1 -0
  105. package/dist/components/intervention/icons.d.ts +8 -0
  106. package/dist/components/intervention/icons.d.ts.map +1 -0
  107. package/dist/components/intervention/icons.js +11 -0
  108. package/dist/components/intervention/icons.js.map +1 -0
  109. package/dist/components/intervention/questionnaire-answers.d.ts +29 -0
  110. package/dist/components/intervention/questionnaire-answers.d.ts.map +1 -0
  111. package/dist/components/intervention/questionnaire-answers.js +81 -0
  112. package/dist/components/intervention/questionnaire-answers.js.map +1 -0
  113. package/dist/components/message/AgentMessage.d.ts +98 -0
  114. package/dist/components/message/AgentMessage.d.ts.map +1 -0
  115. package/dist/components/message/AgentMessage.js +94 -0
  116. package/dist/components/message/AgentMessage.js.map +1 -0
  117. package/dist/components/message/CitationChip.d.ts +34 -0
  118. package/dist/components/message/CitationChip.d.ts.map +1 -0
  119. package/dist/components/message/CitationChip.js +30 -0
  120. package/dist/components/message/CitationChip.js.map +1 -0
  121. package/dist/components/message/CodeBlock.d.ts +45 -0
  122. package/dist/components/message/CodeBlock.d.ts.map +1 -0
  123. package/dist/components/message/CodeBlock.js +21 -0
  124. package/dist/components/message/CodeBlock.js.map +1 -0
  125. package/dist/components/message/JumpToLatest.d.ts +27 -0
  126. package/dist/components/message/JumpToLatest.d.ts.map +1 -0
  127. package/dist/components/message/JumpToLatest.js +17 -0
  128. package/dist/components/message/JumpToLatest.js.map +1 -0
  129. package/dist/components/message/Markdown.d.ts +21 -0
  130. package/dist/components/message/Markdown.d.ts.map +1 -0
  131. package/dist/components/message/Markdown.js +21 -0
  132. package/dist/components/message/Markdown.js.map +1 -0
  133. package/dist/components/message/MessageActions.d.ts +63 -0
  134. package/dist/components/message/MessageActions.d.ts.map +1 -0
  135. package/dist/components/message/MessageActions.js +83 -0
  136. package/dist/components/message/MessageActions.js.map +1 -0
  137. package/dist/components/message/MessageList.d.ts +100 -0
  138. package/dist/components/message/MessageList.d.ts.map +1 -0
  139. package/dist/components/message/MessageList.js +266 -0
  140. package/dist/components/message/MessageList.js.map +1 -0
  141. package/dist/components/message/MessagePart.d.ts +44 -0
  142. package/dist/components/message/MessagePart.d.ts.map +1 -0
  143. package/dist/components/message/MessagePart.js +146 -0
  144. package/dist/components/message/MessagePart.js.map +1 -0
  145. package/dist/components/message/RunDetails.d.ts +26 -0
  146. package/dist/components/message/RunDetails.d.ts.map +1 -0
  147. package/dist/components/message/RunDetails.js +113 -0
  148. package/dist/components/message/RunDetails.js.map +1 -0
  149. package/dist/components/message/SkillUseList.d.ts +22 -0
  150. package/dist/components/message/SkillUseList.d.ts.map +1 -0
  151. package/dist/components/message/SkillUseList.js +20 -0
  152. package/dist/components/message/SkillUseList.js.map +1 -0
  153. package/dist/components/message/ThinkingBlock.d.ts +44 -0
  154. package/dist/components/message/ThinkingBlock.d.ts.map +1 -0
  155. package/dist/components/message/ThinkingBlock.js +34 -0
  156. package/dist/components/message/ThinkingBlock.js.map +1 -0
  157. package/dist/components/message/icons.d.ts +14 -0
  158. package/dist/components/message/icons.d.ts.map +1 -0
  159. package/dist/components/message/icons.js +16 -0
  160. package/dist/components/message/icons.js.map +1 -0
  161. package/dist/components/message/plain-text.d.ts +11 -0
  162. package/dist/components/message/plain-text.d.ts.map +1 -0
  163. package/dist/components/message/plain-text.js +58 -0
  164. package/dist/components/message/plain-text.js.map +1 -0
  165. package/dist/components/message/renderers.d.ts +30 -0
  166. package/dist/components/message/renderers.d.ts.map +1 -0
  167. package/dist/components/message/renderers.js +2 -0
  168. package/dist/components/message/renderers.js.map +1 -0
  169. package/dist/components/message/use-copy.d.ts +18 -0
  170. package/dist/components/message/use-copy.d.ts.map +1 -0
  171. package/dist/components/message/use-copy.js +65 -0
  172. package/dist/components/message/use-copy.js.map +1 -0
  173. package/dist/components/process/AgentProcess.d.ts +47 -0
  174. package/dist/components/process/AgentProcess.d.ts.map +1 -0
  175. package/dist/components/process/AgentProcess.js +78 -0
  176. package/dist/components/process/AgentProcess.js.map +1 -0
  177. package/dist/components/process/RunStatus.d.ts +60 -0
  178. package/dist/components/process/RunStatus.d.ts.map +1 -0
  179. package/dist/components/process/RunStatus.js +34 -0
  180. package/dist/components/process/RunStatus.js.map +1 -0
  181. package/dist/components/shell/AgentEmptyState.d.ts +35 -0
  182. package/dist/components/shell/AgentEmptyState.d.ts.map +1 -0
  183. package/dist/components/shell/AgentEmptyState.js +20 -0
  184. package/dist/components/shell/AgentEmptyState.js.map +1 -0
  185. package/dist/components/shell/AgentHeader.d.ts +84 -0
  186. package/dist/components/shell/AgentHeader.d.ts.map +1 -0
  187. package/dist/components/shell/AgentHeader.js +38 -0
  188. package/dist/components/shell/AgentHeader.js.map +1 -0
  189. package/dist/components/shell/AgentShell.d.ts +138 -0
  190. package/dist/components/shell/AgentShell.d.ts.map +1 -0
  191. package/dist/components/shell/AgentShell.js +206 -0
  192. package/dist/components/shell/AgentShell.js.map +1 -0
  193. package/dist/components/shell/AgentSidePane.d.ts +54 -0
  194. package/dist/components/shell/AgentSidePane.d.ts.map +1 -0
  195. package/dist/components/shell/AgentSidePane.js +26 -0
  196. package/dist/components/shell/AgentSidePane.js.map +1 -0
  197. package/dist/components/shell/ResizeHandle.d.ts +50 -0
  198. package/dist/components/shell/ResizeHandle.d.ts.map +1 -0
  199. package/dist/components/shell/ResizeHandle.js +84 -0
  200. package/dist/components/shell/ResizeHandle.js.map +1 -0
  201. package/dist/components/shell/use-controllable.d.ts +9 -0
  202. package/dist/components/shell/use-controllable.d.ts.map +1 -0
  203. package/dist/components/shell/use-controllable.js +26 -0
  204. package/dist/components/shell/use-controllable.js.map +1 -0
  205. package/dist/components/tools/ChunkPager.d.ts +48 -0
  206. package/dist/components/tools/ChunkPager.d.ts.map +1 -0
  207. package/dist/components/tools/ChunkPager.js +68 -0
  208. package/dist/components/tools/ChunkPager.js.map +1 -0
  209. package/dist/components/tools/CodeModeToolTree.d.ts +64 -0
  210. package/dist/components/tools/CodeModeToolTree.d.ts.map +1 -0
  211. package/dist/components/tools/CodeModeToolTree.js +97 -0
  212. package/dist/components/tools/CodeModeToolTree.js.map +1 -0
  213. package/dist/components/tools/DiffPreview.d.ts +83 -0
  214. package/dist/components/tools/DiffPreview.d.ts.map +1 -0
  215. package/dist/components/tools/DiffPreview.js +95 -0
  216. package/dist/components/tools/DiffPreview.js.map +1 -0
  217. package/dist/components/tools/ToolActivity.d.ts +63 -0
  218. package/dist/components/tools/ToolActivity.d.ts.map +1 -0
  219. package/dist/components/tools/ToolActivity.js +45 -0
  220. package/dist/components/tools/ToolActivity.js.map +1 -0
  221. package/dist/components/tools/ToolDetails.d.ts +106 -0
  222. package/dist/components/tools/ToolDetails.d.ts.map +1 -0
  223. package/dist/components/tools/ToolDetails.js +247 -0
  224. package/dist/components/tools/ToolDetails.js.map +1 -0
  225. package/dist/components/tools/ToolHistory.d.ts +48 -0
  226. package/dist/components/tools/ToolHistory.d.ts.map +1 -0
  227. package/dist/components/tools/ToolHistory.js +37 -0
  228. package/dist/components/tools/ToolHistory.js.map +1 -0
  229. package/dist/components/tools/ToolOutput.d.ts +61 -0
  230. package/dist/components/tools/ToolOutput.d.ts.map +1 -0
  231. package/dist/components/tools/ToolOutput.js +45 -0
  232. package/dist/components/tools/ToolOutput.js.map +1 -0
  233. package/dist/components/tools/ToolRecord.d.ts +54 -0
  234. package/dist/components/tools/ToolRecord.d.ts.map +1 -0
  235. package/dist/components/tools/ToolRecord.js +78 -0
  236. package/dist/components/tools/ToolRecord.js.map +1 -0
  237. package/dist/components/tools/shared.d.ts +93 -0
  238. package/dist/components/tools/shared.d.ts.map +1 -0
  239. package/dist/components/tools/shared.js +160 -0
  240. package/dist/components/tools/shared.js.map +1 -0
  241. package/dist/components/workspace/ActivityLedger.d.ts +44 -0
  242. package/dist/components/workspace/ActivityLedger.d.ts.map +1 -0
  243. package/dist/components/workspace/ActivityLedger.js +63 -0
  244. package/dist/components/workspace/ActivityLedger.js.map +1 -0
  245. package/dist/components/workspace/CompactionNotice.d.ts +63 -0
  246. package/dist/components/workspace/CompactionNotice.d.ts.map +1 -0
  247. package/dist/components/workspace/CompactionNotice.js +36 -0
  248. package/dist/components/workspace/CompactionNotice.js.map +1 -0
  249. package/dist/components/workspace/ContextUsage.d.ts +44 -0
  250. package/dist/components/workspace/ContextUsage.d.ts.map +1 -0
  251. package/dist/components/workspace/ContextUsage.js +106 -0
  252. package/dist/components/workspace/ContextUsage.js.map +1 -0
  253. package/dist/components/workspace/PersistentTerminal.d.ts +86 -0
  254. package/dist/components/workspace/PersistentTerminal.d.ts.map +1 -0
  255. package/dist/components/workspace/PersistentTerminal.js +155 -0
  256. package/dist/components/workspace/PersistentTerminal.js.map +1 -0
  257. package/dist/components/workspace/PinnedSummary.d.ts +43 -0
  258. package/dist/components/workspace/PinnedSummary.d.ts.map +1 -0
  259. package/dist/components/workspace/PinnedSummary.js +33 -0
  260. package/dist/components/workspace/PinnedSummary.js.map +1 -0
  261. package/dist/components/workspace/RunSummary.d.ts +35 -0
  262. package/dist/components/workspace/RunSummary.d.ts.map +1 -0
  263. package/dist/components/workspace/RunSummary.js +46 -0
  264. package/dist/components/workspace/RunSummary.js.map +1 -0
  265. package/dist/components/workspace/SubAgentCard.d.ts +60 -0
  266. package/dist/components/workspace/SubAgentCard.d.ts.map +1 -0
  267. package/dist/components/workspace/SubAgentCard.js +73 -0
  268. package/dist/components/workspace/SubAgentCard.js.map +1 -0
  269. package/dist/components/workspace/TerminalRow.d.ts +51 -0
  270. package/dist/components/workspace/TerminalRow.d.ts.map +1 -0
  271. package/dist/components/workspace/TerminalRow.js +62 -0
  272. package/dist/components/workspace/TerminalRow.js.map +1 -0
  273. package/dist/components/workspace/shared.d.ts +22 -0
  274. package/dist/components/workspace/shared.d.ts.map +1 -0
  275. package/dist/components/workspace/shared.js +36 -0
  276. package/dist/components/workspace/shared.js.map +1 -0
  277. package/dist/index.d.ts +130 -0
  278. package/dist/index.d.ts.map +1 -0
  279. package/dist/index.js +76 -0
  280. package/dist/index.js.map +1 -0
  281. package/dist/motion/agent-motion.d.ts +62 -0
  282. package/dist/motion/agent-motion.d.ts.map +1 -0
  283. package/dist/motion/agent-motion.js +61 -0
  284. package/dist/motion/agent-motion.js.map +1 -0
  285. package/dist/primitives/AgentSpark.d.ts +17 -0
  286. package/dist/primitives/AgentSpark.d.ts.map +1 -0
  287. package/dist/primitives/AgentSpark.js +11 -0
  288. package/dist/primitives/AgentSpark.js.map +1 -0
  289. package/dist/primitives/AgentStatus.d.ts +32 -0
  290. package/dist/primitives/AgentStatus.d.ts.map +1 -0
  291. package/dist/primitives/AgentStatus.js +13 -0
  292. package/dist/primitives/AgentStatus.js.map +1 -0
  293. package/dist/primitives/StatusGlyph.d.ts +10 -0
  294. package/dist/primitives/StatusGlyph.d.ts.map +1 -0
  295. package/dist/primitives/StatusGlyph.js +31 -0
  296. package/dist/primitives/StatusGlyph.js.map +1 -0
  297. package/dist/primitives/icons.d.ts +7 -0
  298. package/dist/primitives/icons.d.ts.map +1 -0
  299. package/dist/primitives/icons.js +55 -0
  300. package/dist/primitives/icons.js.map +1 -0
  301. package/dist/provider/AgentMessages.d.ts +51 -0
  302. package/dist/provider/AgentMessages.d.ts.map +1 -0
  303. package/dist/provider/AgentMessages.js +77 -0
  304. package/dist/provider/AgentMessages.js.map +1 -0
  305. package/dist/provider/messages/composer.d.ts +90 -0
  306. package/dist/provider/messages/composer.d.ts.map +1 -0
  307. package/dist/provider/messages/composer.js +155 -0
  308. package/dist/provider/messages/composer.js.map +1 -0
  309. package/dist/provider/messages/intervention.d.ts +135 -0
  310. package/dist/provider/messages/intervention.d.ts.map +1 -0
  311. package/dist/provider/messages/intervention.js +321 -0
  312. package/dist/provider/messages/intervention.js.map +1 -0
  313. package/dist/provider/messages/message.d.ts +118 -0
  314. package/dist/provider/messages/message.d.ts.map +1 -0
  315. package/dist/provider/messages/message.js +224 -0
  316. package/dist/provider/messages/message.js.map +1 -0
  317. package/dist/provider/messages/shell.d.ts +70 -0
  318. package/dist/provider/messages/shell.d.ts.map +1 -0
  319. package/dist/provider/messages/shell.js +109 -0
  320. package/dist/provider/messages/shell.js.map +1 -0
  321. package/dist/provider/messages/status.d.ts +20 -0
  322. package/dist/provider/messages/status.d.ts.map +1 -0
  323. package/dist/provider/messages/status.js +195 -0
  324. package/dist/provider/messages/status.js.map +1 -0
  325. package/dist/provider/messages/tools.d.ts +210 -0
  326. package/dist/provider/messages/tools.d.ts.map +1 -0
  327. package/dist/provider/messages/tools.js +482 -0
  328. package/dist/provider/messages/tools.js.map +1 -0
  329. package/dist/provider/messages/workspace.d.ts +176 -0
  330. package/dist/provider/messages/workspace.d.ts.map +1 -0
  331. package/dist/provider/messages/workspace.js +325 -0
  332. package/dist/provider/messages/workspace.js.map +1 -0
  333. package/dist/styles/artifact.css +564 -0
  334. package/dist/styles/base.css +220 -0
  335. package/dist/styles/composer.css +1001 -0
  336. package/dist/styles/conversation.css +275 -0
  337. package/dist/styles/intervention.css +929 -0
  338. package/dist/styles/message.css +917 -0
  339. package/dist/styles/process.css +207 -0
  340. package/dist/styles/shell.css +441 -0
  341. package/dist/styles/tools.css +929 -0
  342. package/dist/styles/workspace.css +1294 -0
  343. package/dist/utils/cx.d.ts +3 -0
  344. package/dist/utils/cx.d.ts.map +1 -0
  345. package/dist/utils/cx.js +5 -0
  346. package/dist/utils/cx.js.map +1 -0
  347. package/package.json +64 -3
@@ -0,0 +1,60 @@
1
+ import * as React from 'react';
2
+ import type { AgentActionContext, AgentActionHandler, QuestionAnswer, QuestionnaireView } from '@wzrhine/agent-core';
3
+ /**
4
+ * Agent → user questionnaire (atlas 21, ADR-0011 §6). Collects information only: it never grants
5
+ * tool permissions.
6
+ *
7
+ * Data: `questionnaire.answers` is the host's draft. The card keeps a local mirror so typing
8
+ * stays responsive and reports every change with `onAnswerChange(answer)` (the host persists).
9
+ * The mirror is replaced by the props only when `questionnaire.revision` becomes newer (or the
10
+ * questionnaire id changes); an older revision is ignored (`isStaleRevision`), so a late
11
+ * snapshot never rolls the draft back.
12
+ *
13
+ * Submitting emits `onSubmit(answers, { actionId, targetId: id, baseRevision: revision })` with
14
+ * normalised answers (unanswered optional questions become `skipped`). Unanswered optional
15
+ * questions ask for an inline confirmation (`role="alert"`); unanswered required ones block.
16
+ * `unknown` keeps the same answers and revision: 「重试提交相同答案」 re-sends the stored answers
17
+ * with the same `actionId` (after a remount it uses `receipt.actionId`).
18
+ * `completed` / `expired` / `interrupted` render a read-only summary. If such an ended questionnaire
19
+ * still has a draft the host never saved (`draftStatus` `dirty` / `error`) and `onDiscardDraft` is
20
+ * given, the summary adds 「放弃未保存填写」 behind an AlertDialog confirmation (focus returns to the
21
+ * button on cancel; a rejected promise keeps the dialog open with an error).
22
+ *
23
+ * Keyboard (form level; ignored while an IME composes):
24
+ * - `1`…`n` choose option n, `n+1` toggles 「其他」 (not while typing in a textarea);
25
+ * - `Enter` → next question, or submit on the last (not in a textarea, not on a button);
26
+ * - `←` / `→` page (not in a textarea); `Ctrl/⌘ + Enter` submits from anywhere;
27
+ * - after paging, focus moves to the first control of the new page.
28
+ *
29
+ * Motion: the question body slides in on a single axis (`x` + opacity, `fast`) from the paging
30
+ * direction; reduced motion switches instantly. The dock entrance belongs to the caller.
31
+ */
32
+ export interface QuestionnaireCardHandle {
33
+ /** Ask the host to persist the current answers now (e.g. before closing the page). */
34
+ flush: () => void | Promise<void>;
35
+ /** Focus the first control of the current page. */
36
+ focus: () => void;
37
+ }
38
+ export interface QuestionnaireCardProps extends Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onSubmit' | 'children' | 'title'> {
39
+ questionnaire: QuestionnaireView;
40
+ onAnswerChange?: (answer: QuestionAnswer) => void;
41
+ onSubmit?: AgentActionHandler<[QuestionAnswer[], AgentActionContext]>;
42
+ /** Shown with a failed draft save. */
43
+ onRetrySave?: () => void;
44
+ /** Called by the `flush()` handle with the current answers. */
45
+ onFlush?: (answers: QuestionAnswer[]) => void | Promise<void>;
46
+ /** Read-only summary: copy the answers as plain text (host writes the clipboard). */
47
+ onCopyAnswers?: (text: string) => void;
48
+ /**
49
+ * Ended questionnaire (completed / expired / interrupted) with an unsaved draft (`draftStatus`
50
+ * `dirty` or `error`): drop the local draft. Confirmed through an AlertDialog. Return a Promise to
51
+ * keep the dialog open until the host settles.
52
+ */
53
+ onDiscardDraft?: () => void | Promise<unknown>;
54
+ /** Header title override (default: `questionnaire.title` or 「需要你的回答」). */
55
+ title?: React.ReactNode;
56
+ /** Start on this page instead of the first unanswered question. */
57
+ initialPage?: number;
58
+ }
59
+ export declare const QuestionnaireCard: React.ForwardRefExoticComponent<QuestionnaireCardProps & React.RefAttributes<QuestionnaireCardHandle>>;
60
+ //# sourceMappingURL=QuestionnaireCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuestionnaireCard.d.ts","sourceRoot":"","sources":["../../../src/components/intervention/QuestionnaireCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAgB,MAAM,qBAAqB,CAAC;AAUnI;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,uBAAuB;IACtC,sFAAsF;IACtF,KAAK,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,mDAAmD;IACnD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IAChI,aAAa,EAAE,iBAAiB,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,kBAAkB,CAAC,CAAC,cAAc,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACtE,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,qFAAqF;IACrF,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,0EAA0E;IAC1E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoHD,eAAO,MAAM,iBAAiB,wGA2e5B,CAAC"}
@@ -0,0 +1,322 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import * as React from 'react';
4
+ import { motion } from 'motion/react';
5
+ import { Alert, AlertDialog, Button, Callout, Checkbox, CheckboxGroup, IconButton, Radio, RadioGroup, Textarea, useRhineMotion } from '@wzrhine/react';
6
+ import { codePointLength, isStaleRevision } from '@wzrhine/agent-core';
7
+ import { AgentStatus } from '../../primitives/AgentStatus.js';
8
+ import { AgentIcon } from '../../primitives/icons.js';
9
+ import { useAgentMessages } from '../../provider/AgentMessages.js';
10
+ import { cx } from '../../utils/cx.js';
11
+ import { useActionLock } from './action-lock.js';
12
+ import { answerState, answerText, isOverLimit, isQuestionOptional, normalizeAnswers } from './questionnaire-answers.js';
13
+ const CUSTOM = '__rl_agent_custom__';
14
+ const EDITABLE = new Set(['waiting', 'drafting', 'saving']);
15
+ const READ_ONLY = new Set(['completed', 'expired', 'interrupted']);
16
+ const toMap = (answers) => new Map(answers.map((a) => [a.questionId, a]));
17
+ function isComposing(event) {
18
+ return event.nativeEvent.isComposing || event.keyCode === 229;
19
+ }
20
+ function summaryText(questions, answers, m, interrupted) {
21
+ return questions
22
+ .map((q) => {
23
+ const a = answers.get(q.id);
24
+ const text = answerText(q, a, m.questionJoin);
25
+ const value = a?.skipped ? m.questionSummarySkipped : (text ?? (interrupted ? m.questionSummaryUnansweredInterrupted : m.questionSummaryUnanswered));
26
+ return `${q.title}\n${value}`;
27
+ })
28
+ .join('\n\n');
29
+ }
30
+ /** Read-only answers for completed / expired / interrupted questionnaires. */
31
+ function Summary({ questionnaire, answers, title, onCopyAnswers, onDiscardDraft, className, rest, }) {
32
+ const m = useAgentMessages().intervention;
33
+ const id = React.useId();
34
+ const status = questionnaire.status;
35
+ const interrupted = status === 'interrupted';
36
+ const tone = status === 'completed' ? 'success' : interrupted ? 'warning' : 'neutral';
37
+ const unsaved = questionnaire.draftStatus === 'dirty' || questionnaire.draftStatus === 'error';
38
+ return (_jsxs("section", { ...rest, className: cx('rl-agent-question', className), "aria-labelledby": `${id}-title`, "data-status": status, "data-readonly": "", children: [_jsxs("header", { className: "rl-agent-question__header", children: [_jsx(AgentIcon, { name: "question", className: "rl-agent-question__icon" }), _jsx("h3", { id: `${id}-title`, className: "rl-agent-question__title", children: title }), _jsx(AgentStatus, { glyph: status === 'completed' ? 'done' : 'stopped', tone: tone, label: m.questionStatus[status] })] }), _jsx("p", { className: "rl-agent-question__summary-title", children: m.questionSummaryTitle[status] }), _jsx("dl", { className: "rl-agent-question__summary", children: questionnaire.questions.map((q) => {
39
+ const a = answers.get(q.id);
40
+ const text = answerText(q, a, m.questionJoin);
41
+ const state = a?.skipped ? 'skipped' : text ? 'answered' : 'unanswered';
42
+ return (_jsxs("div", { className: "rl-agent-question__summary-row", "data-state": state, children: [_jsx("dt", { children: q.title }), _jsx("dd", { children: state === 'skipped'
43
+ ? m.questionSummarySkipped
44
+ : (text ?? (interrupted ? m.questionSummaryUnansweredInterrupted : m.questionSummaryUnanswered)) })] }, q.id));
45
+ }) }), unsaved && onDiscardDraft && (_jsxs("div", { className: "rl-agent-question__ended-draft", children: [_jsxs("p", { className: "rl-agent-question__ended-draft-text", children: [_jsx(AgentIcon, { name: "warning" }), _jsx("span", { children: m.questionEndedDraft })] }), _jsx(AlertDialog, { trigger: _jsx(Button, { size: "sm", variant: "secondary", iconStart: _jsx(AgentIcon, { name: "trash" }), children: m.questionDiscardDraft }), title: m.questionDiscardTitle, description: m.questionDiscardDescription, confirmLabel: m.questionDiscardConfirm, errorText: m.questionDiscardError, onConfirm: onDiscardDraft })] })), onCopyAnswers && (_jsx("div", { className: "rl-agent-question__footer", children: _jsx(Button, { size: "sm", variant: "secondary", iconStart: _jsx(AgentIcon, { name: "copy" }), onClick: () => onCopyAnswers(summaryText(questionnaire.questions, answers, m, interrupted)), children: m.questionCopy }) }))] }));
46
+ }
47
+ function firstControl(root) {
48
+ if (!root)
49
+ return null;
50
+ return (root.querySelector('[role="radio"][aria-checked="true"]:not([aria-disabled="true"])') ??
51
+ root.querySelector('[role="radio"]:not([aria-disabled="true"]), [role="checkbox"]:not([aria-disabled="true"]), textarea:not([disabled])') ??
52
+ root.querySelector('button:not([disabled])'));
53
+ }
54
+ export const QuestionnaireCard = React.forwardRef(function QuestionnaireCard({ questionnaire, onAnswerChange, onSubmit, onRetrySave, onFlush, onCopyAnswers, onDiscardDraft, title, initialPage, className, ...rest }, ref) {
55
+ const m = useAgentMessages().intervention;
56
+ const { reduced, resolve } = useRhineMotion();
57
+ const id = React.useId();
58
+ const { questions, status, revision } = questionnaire;
59
+ const total = questions.length;
60
+ const formRef = React.useRef(null);
61
+ const bodyRef = React.useRef(null);
62
+ // ----- local mirror; never rolls back to an older revision -----
63
+ const [mirror, setMirror] = React.useState(() => ({ id: questionnaire.id, revision, answers: toMap(questionnaire.answers) }));
64
+ let current = mirror;
65
+ if (mirror.id !== questionnaire.id || (revision !== mirror.revision && !isStaleRevision(mirror.revision, revision))) {
66
+ current = { id: questionnaire.id, revision, answers: toMap(questionnaire.answers) };
67
+ setMirror(current);
68
+ }
69
+ const answers = current.answers;
70
+ const [page, setPage] = React.useState(() => {
71
+ if (initialPage != null)
72
+ return Math.max(0, Math.min(total - 1, initialPage));
73
+ const first = questions.findIndex((q) => answerState(q, questionnaire.answers.find((a) => a.questionId === q.id)) === 'unanswered');
74
+ return Math.max(0, first);
75
+ });
76
+ const index = Math.max(0, Math.min(total - 1, page));
77
+ const [direction, setDirection] = React.useState(0);
78
+ const [confirming, setConfirming] = React.useState(null);
79
+ const focusAfterPaging = React.useRef(false);
80
+ const lastSubmit = React.useRef(null);
81
+ const lock = useActionLock(`${questionnaire.id}:${revision}:${status}:${questionnaire.submitStatus}`);
82
+ React.useImperativeHandle(ref, () => ({
83
+ flush: () => onFlush?.([...answers.values()]),
84
+ focus: () => firstControl(bodyRef.current)?.focus(),
85
+ }), [answers, onFlush]);
86
+ // The confirmation replaces the footer the user just activated: move focus to its safe action.
87
+ const backRef = React.useRef(null);
88
+ React.useEffect(() => {
89
+ if (confirming)
90
+ backRef.current?.focus();
91
+ }, [confirming]);
92
+ React.useEffect(() => {
93
+ if (!focusAfterPaging.current)
94
+ return;
95
+ focusAfterPaging.current = false;
96
+ firstControl(bodyRef.current)?.focus();
97
+ }, [index]);
98
+ const heading = title ?? questionnaire.title ?? m.questionTitle;
99
+ if (READ_ONLY.has(status)) {
100
+ return (_jsx(Summary, { questionnaire: questionnaire, answers: answers, title: heading, onCopyAnswers: onCopyAnswers, onDiscardDraft: onDiscardDraft, className: className, rest: rest }));
101
+ }
102
+ const busy = status === 'submit-pending' || questionnaire.submitStatus === 'submitting' || lock.locked;
103
+ const editable = EDITABLE.has(status) && !busy && !!onAnswerChange;
104
+ const unknown = status === 'unknown' || questionnaire.submitStatus === 'unknown';
105
+ const question = questions[index];
106
+ const states = questions.map((q) => answerState(q, answers.get(q.id)));
107
+ const answeredCount = states.filter((s) => s === 'answered').length;
108
+ const last = index === total - 1;
109
+ const update = (q, next) => {
110
+ if (!editable)
111
+ return;
112
+ setConfirming(null);
113
+ setMirror((prev) => {
114
+ const map = new Map(prev.answers);
115
+ map.set(q.id, next);
116
+ return { ...prev, answers: map };
117
+ });
118
+ onAnswerChange?.(next);
119
+ };
120
+ const go = (next) => {
121
+ const target = Math.max(0, Math.min(total - 1, next));
122
+ if (target === index)
123
+ return;
124
+ setDirection(target > index ? 1 : -1);
125
+ setConfirming(null);
126
+ focusAfterPaging.current = true;
127
+ setPage(target);
128
+ };
129
+ const send = (list, ctx) => {
130
+ if (!onSubmit)
131
+ return;
132
+ lock.run(() => {
133
+ lastSubmit.current = { answers: list, ctx };
134
+ return onSubmit(list, ctx);
135
+ });
136
+ };
137
+ const submit = (force = false) => {
138
+ if (busy || !onSubmit)
139
+ return;
140
+ if (unknown) {
141
+ retry();
142
+ return;
143
+ }
144
+ const result = normalizeAnswers(questions, answers);
145
+ if (result.missing.length) {
146
+ setConfirming('required');
147
+ return;
148
+ }
149
+ if (result.overLimit.length) {
150
+ setConfirming('limit');
151
+ return;
152
+ }
153
+ const unanswered = states.filter((s) => s === 'unanswered').length;
154
+ if (unanswered > 0 && !force) {
155
+ setConfirming('skip');
156
+ return;
157
+ }
158
+ setConfirming(null);
159
+ send(result.answers, { actionId: lock.nextActionId(), targetId: questionnaire.id, baseRevision: revision });
160
+ };
161
+ const retry = () => {
162
+ const prev = lastSubmit.current;
163
+ if (prev) {
164
+ send(prev.answers, prev.ctx);
165
+ return;
166
+ }
167
+ const actionId = questionnaire.receipt?.actionId;
168
+ if (!actionId)
169
+ return;
170
+ send(normalizeAnswers(questions, answers).answers, { actionId, targetId: questionnaire.id, baseRevision: revision });
171
+ };
172
+ const canRetry = unknown && !!onSubmit && questionnaire.receipt?.retryable !== false && (!!lastSubmit.current || !!questionnaire.receipt?.actionId);
173
+ const backToFirstOpen = () => {
174
+ const missing = confirming === 'required' ? questions.findIndex((q, i) => !isQuestionOptional(q) && states[i] === 'unanswered') : -1;
175
+ const over = confirming === 'limit' ? questions.findIndex((q) => isOverLimit(q, answers.get(q.id))) : -1;
176
+ const open = missing >= 0 ? missing : over >= 0 ? over : states.findIndex((s) => s === 'unanswered');
177
+ setConfirming(null);
178
+ if (open >= 0 && open !== index)
179
+ go(open);
180
+ else
181
+ window.requestAnimationFrame?.(() => firstControl(bodyRef.current)?.focus());
182
+ };
183
+ // ----- question body -----
184
+ const answer = question ? answers.get(question.id) : undefined;
185
+ const skipped = answer?.skipped === true;
186
+ const customOn = question?.kind !== 'text' && question?.allowCustom === true && typeof answer?.text === 'string';
187
+ const options = question?.options ?? [];
188
+ const choose = (optionId) => {
189
+ if (!question)
190
+ return;
191
+ if (question.kind === 'single')
192
+ update(question, { questionId: question.id, optionIds: [optionId] });
193
+ else {
194
+ const ids = answer?.optionIds ?? [];
195
+ const nextIds = ids.includes(optionId) ? ids.filter((x) => x !== optionId) : [...ids, optionId];
196
+ update(question, { questionId: question.id, optionIds: nextIds, ...(customOn ? { text: answer?.text } : null) });
197
+ }
198
+ };
199
+ const toggleCustom = (on) => {
200
+ if (!question)
201
+ return;
202
+ if (question.kind === 'single')
203
+ update(question, on ? { questionId: question.id, optionIds: [], text: answer?.text ?? '' } : { questionId: question.id, optionIds: [] });
204
+ else
205
+ update(question, { questionId: question.id, optionIds: answer?.optionIds ?? [], ...(on ? { text: answer?.text ?? '' } : null) });
206
+ };
207
+ const setText = (text) => {
208
+ if (!question)
209
+ return;
210
+ if (question.kind === 'text')
211
+ update(question, { questionId: question.id, text });
212
+ else
213
+ update(question, { questionId: question.id, optionIds: question.kind === 'single' ? [] : (answer?.optionIds ?? []), text });
214
+ };
215
+ const toggleSkip = () => {
216
+ if (!question)
217
+ return;
218
+ if (skipped)
219
+ update(question, { questionId: question.id });
220
+ else {
221
+ update(question, { questionId: question.id, skipped: true });
222
+ if (!last)
223
+ go(index + 1);
224
+ }
225
+ };
226
+ const focusCustomInput = () => window.requestAnimationFrame?.(() => bodyRef.current?.querySelector('textarea')?.focus());
227
+ // ----- keyboard -----
228
+ const isTextField = (target) => target instanceof HTMLTextAreaElement || (target instanceof HTMLInputElement && target.type !== 'checkbox' && target.type !== 'radio');
229
+ const onKeyDownCapture = (event) => {
230
+ // ← / → page; ↑ / ↓ keep moving inside a radio group (ARIA radio pattern).
231
+ if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight')
232
+ return;
233
+ if (isComposing(event) || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey || isTextField(event.target) || total < 2)
234
+ return;
235
+ event.preventDefault();
236
+ event.stopPropagation();
237
+ go(index + (event.key === 'ArrowRight' ? 1 : -1));
238
+ };
239
+ const onKeyDown = (event) => {
240
+ if (isComposing(event) || !question)
241
+ return;
242
+ if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {
243
+ event.preventDefault();
244
+ submit(confirming === 'skip');
245
+ return;
246
+ }
247
+ if (isTextField(event.target) || event.altKey || event.ctrlKey || event.metaKey)
248
+ return;
249
+ if (event.key === 'Enter') {
250
+ // Buttons keep their own Enter activation.
251
+ if (event.target instanceof HTMLButtonElement)
252
+ return;
253
+ event.preventDefault();
254
+ if (last)
255
+ submit(confirming === 'skip');
256
+ else
257
+ go(index + 1);
258
+ return;
259
+ }
260
+ if (!editable || skipped || question.kind === 'text' || !/^[1-9]$/.test(event.key))
261
+ return;
262
+ const digit = Number(event.key);
263
+ if (digit <= options.length) {
264
+ event.preventDefault();
265
+ choose(options[digit - 1].id);
266
+ }
267
+ else if (digit === options.length + 1 && question.allowCustom) {
268
+ event.preventDefault();
269
+ toggleCustom(!customOn);
270
+ if (!customOn)
271
+ focusCustomInput();
272
+ }
273
+ };
274
+ const titleId = `${id}-title`;
275
+ const promptId = `${id}-prompt`;
276
+ const countId = `${id}-count`;
277
+ const hintId = `${id}-hint`;
278
+ const count = answer?.text != null ? codePointLength(answer.text) : 0;
279
+ const over = question ? isOverLimit(question, answer) : false;
280
+ const unansweredCount = states.filter((s) => s === 'unanswered').length;
281
+ const requiredMissing = questions.filter((q, i) => !isQuestionOptional(q) && states[i] === 'unanswered').length;
282
+ const kbd = (n) => (_jsx("kbd", { className: "rl-agent-question__kbd", "aria-hidden": "true", children: n }));
283
+ const textInput = question && (question.kind === 'text' || customOn) && !skipped && (_jsxs("div", { className: "rl-agent-question__text", children: [_jsx(Textarea, { rows: question.kind === 'text' ? 3 : 2, autoResize: true, maxRows: 8, value: answer?.text ?? '', disabled: !editable, placeholder: m.questionPlaceholder, invalid: over, "aria-label": question.kind === 'text' ? question.title : m.questionOtherInput(question.title), "aria-describedby": [question.kind === 'text' && question.prompt ? promptId : undefined, question.maxLength != null ? countId : undefined].filter(Boolean).join(' ') || undefined, onValueChange: (value) => setText(value) }), question.maxLength != null && (_jsx("span", { id: countId, className: "rl-agent-question__count", "data-over": over || undefined, children: m.questionCount(count, question.maxLength) }))] }));
284
+ let body = null;
285
+ if (question) {
286
+ if (skipped) {
287
+ body = (_jsxs("fieldset", { className: "rl-agent-question__fieldset", disabled: !editable, children: [_jsx("legend", { className: "rl-agent-question__legend", children: question.title }), question.prompt && _jsx("p", { className: "rl-agent-question__prompt", children: question.prompt }), _jsx("p", { className: "rl-agent-question__skipped", children: m.questionSkipped })] }));
288
+ }
289
+ else if (question.kind === 'text') {
290
+ body = (_jsxs("fieldset", { className: "rl-agent-question__fieldset", children: [_jsxs("legend", { className: "rl-agent-question__legend", children: [question.title, !isQuestionOptional(question) && _jsx("span", { className: "rl-agent-question__required", children: m.questionRequired })] }), question.prompt && (_jsx("p", { id: promptId, className: "rl-agent-question__prompt", children: question.prompt })), textInput] }));
291
+ }
292
+ else if (question.kind === 'single') {
293
+ body = (_jsxs(_Fragment, { children: [_jsxs(RadioGroup, { className: "rl-agent-question__group", label: question.title, required: !isQuestionOptional(question), description: question.prompt, disabled: !editable, value: customOn ? CUSTOM : (answer?.optionIds?.[0] ?? null), onValueChange: (value) => {
294
+ if (value === CUSTOM) {
295
+ toggleCustom(true);
296
+ }
297
+ else if (typeof value === 'string')
298
+ choose(value);
299
+ }, children: [options.map((option, i) => (_jsx(Radio, { value: option.id, label: _jsxs(_Fragment, { children: [kbd(i + 1), option.label] }), description: option.description }, option.id))), question.allowCustom && _jsx(Radio, { value: CUSTOM, label: _jsxs(_Fragment, { children: [kbd(options.length + 1), m.questionOther] }), description: m.questionOtherDescription })] }), textInput] }));
300
+ }
301
+ else {
302
+ const ids = answer?.optionIds ?? [];
303
+ body = (_jsxs(_Fragment, { children: [_jsxs(CheckboxGroup, { className: "rl-agent-question__group", label: question.title, required: !isQuestionOptional(question), description: question.prompt, disabled: !editable, value: customOn ? [...ids, CUSTOM] : ids, onValueChange: (next) => {
304
+ const nextCustom = next.includes(CUSTOM);
305
+ const nextIds = next.filter((x) => x !== CUSTOM);
306
+ update(question, { questionId: question.id, optionIds: nextIds, ...(nextCustom ? { text: answer?.text ?? '' } : null) });
307
+ }, children: [options.map((option, i) => (_jsx(Checkbox, { value: option.id, label: _jsxs(_Fragment, { children: [kbd(i + 1), option.label] }), description: option.description }, option.id))), question.allowCustom && _jsx(Checkbox, { value: CUSTOM, label: _jsxs(_Fragment, { children: [kbd(options.length + 1), m.questionOther] }), description: m.questionOtherDescription })] }), textInput] }));
308
+ }
309
+ }
310
+ const draftText = m.questionDraft[questionnaire.draftStatus];
311
+ const statusMeta = busy ? { glyph: 'pending', tone: 'info', active: true } : unknown ? { glyph: 'unknown', tone: 'warning' } : { glyph: 'waiting-user', tone: 'warning' };
312
+ return (_jsxs("form", { ...rest, ref: formRef, className: cx('rl-agent-question', className), "aria-labelledby": titleId, "aria-busy": busy || undefined, "data-status": status, noValidate: true, onSubmit: (event) => {
313
+ event.preventDefault();
314
+ submit(confirming === 'skip');
315
+ }, onKeyDownCapture: onKeyDownCapture, onKeyDown: onKeyDown, children: [_jsxs("header", { className: "rl-agent-question__header", children: [_jsx(AgentIcon, { name: "question", className: "rl-agent-question__icon" }), _jsx("h3", { id: titleId, className: "rl-agent-question__title", children: heading }), _jsx("span", { className: "rl-agent-question__progress", children: m.questionProgress(answeredCount, total) }), _jsx(AgentStatus, { glyph: statusMeta.glyph, tone: statusMeta.tone, active: statusMeta.active, label: busy ? m.questionStatus['submit-pending'] : m.questionStatus[unknown ? 'unknown' : status] })] }), total > 1 && (_jsxs("nav", { className: "rl-agent-question__pager", "aria-label": m.questionPager, children: [_jsx(IconButton, { size: "sm", variant: "ghost", icon: _jsx(AgentIcon, { name: "chevron-left" }), label: m.questionPagePrev, disabled: index === 0, onClick: () => go(index - 1) }), _jsx("ol", { className: "rl-agent-question__dots", children: questions.map((q, i) => (_jsx("li", { children: _jsx("button", { type: "button", className: "rl-agent-question__dot", "data-state": states[i], "aria-current": i === index ? 'step' : undefined, "aria-label": m.questionDot(i + 1, states[i]), onClick: () => go(i) }) }, q.id))) }), _jsx("span", { className: "rl-agent-question__page-no", "aria-hidden": "true", children: m.questionPageNo(index + 1, total) }), _jsx(IconButton, { size: "sm", variant: "ghost", icon: _jsx(AgentIcon, { name: "chevron-right" }), label: m.questionPageNext, disabled: last, onClick: () => go(index + 1) })] })), _jsx("div", { ref: bodyRef, className: "rl-agent-question__viewport", children: _jsx(motion.div, { className: "rl-agent-question__page", initial: direction === 0 ? false : { x: reduced ? 0 : direction * 12, opacity: reduced ? 1 : 0 }, animate: { x: 0, opacity: 1 }, transition: { x: resolve('transform', 'fast'), opacity: resolve('opacity', 'fast') }, children: body }, question?.id ?? 'empty') }), unknown && (_jsx(Callout, { tone: "warning", title: m.questionUnknownTitle, className: "rl-agent-question__unknown", children: questionnaire.receipt?.reason ?? m.questionUnknownBody })), questionnaire.submitStatus === 'rejected' && !unknown && (_jsx(Alert, { tone: "danger", title: m.questionRejected, children: questionnaire.receipt?.reason })), _jsxs("div", { className: "rl-agent-question__draft", role: "status", children: [draftText && (_jsxs("span", { className: "rl-agent-question__draft-text", "data-draft": questionnaire.draftStatus, children: [questionnaire.draftStatus === 'saved' && _jsx(AgentIcon, { name: "check" }), questionnaire.draftStatus === 'error' && _jsx(AgentIcon, { name: "warning" }), draftText] })), busy && _jsx("span", { className: "rl-agent-sr", children: m.questionSubmitting })] }), questionnaire.draftStatus === 'error' && onRetrySave && (_jsx("div", { className: "rl-agent-question__draft-retry", children: _jsx(Button, { size: "sm", variant: "ghost", iconStart: _jsx(AgentIcon, { name: "retry" }), onClick: onRetrySave, children: m.questionRetrySave }) })), _jsx("footer", { className: "rl-agent-question__footer", children: confirming ? (_jsxs("div", { className: "rl-agent-question__confirm", children: [_jsxs("p", { role: "alert", className: "rl-agent-question__confirm-text", children: [_jsx(AgentIcon, { name: "warning" }), confirming === 'skip'
316
+ ? m.questionConfirm(unansweredCount)
317
+ : confirming === 'required'
318
+ ? m.questionRequiredMissing(requiredMissing)
319
+ : m.questionOverLimit(questions.find((q) => isOverLimit(q, answers.get(q.id)))?.title ?? '')] }), _jsxs("div", { className: "rl-agent-question__actions", children: [_jsx(Button, { ref: backRef, size: "sm", variant: "secondary", onClick: backToFirstOpen, children: m.questionBack }), confirming === 'skip' && (_jsx(Button, { size: "sm", variant: "accent", loading: busy, onClick: () => submit(true), children: m.questionSkipAndSubmit }))] })] })) : (_jsxs(_Fragment, { children: [_jsx("span", { id: hintId, className: "rl-agent-question__hint", children: question?.kind === 'text' ? m.questionHintText : m.questionHintChoice(last) }), _jsxs("div", { className: "rl-agent-question__actions", children: [question && isQuestionOptional(question) && onAnswerChange && !unknown && (_jsx(Button, { size: "sm", variant: "ghost", disabled: !editable, onClick: toggleSkip, children: skipped ? m.questionUndoSkip : m.questionSkip })), !last && (_jsx(Button, { size: "sm", variant: "secondary", onClick: () => go(index + 1), children: m.questionNext })), onSubmit &&
320
+ (unknown ? (canRetry && (_jsx(Button, { type: "submit", size: "sm", variant: "primary", loading: busy, iconStart: _jsx(AgentIcon, { name: "retry" }), children: m.questionRetrySubmit }))) : (_jsx(Button, { type: "submit", size: "sm", variant: "accent", loading: busy, disabled: !EDITABLE.has(status) && !busy, children: m.questionSubmit })))] })] })) })] }));
321
+ });
322
+ //# sourceMappingURL=QuestionnaireCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuestionnaireCard.js","sourceRoot":"","sources":["../../../src/components/intervention/QuestionnaireCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AgentActionResult } from '@wzrhine/agent-core';
2
+ /**
3
+ * Per-mount action identity and double-submit guard shared by ApprovalPanel and QuestionnaireCard
4
+ * (ADR-0011 §4). Internal; not exported from the package.
5
+ *
6
+ * - `nextActionId()` = stable per-mount prefix (`React.useId`) + counter, so two cards on one page
7
+ * never collide and a retry can reuse the exact id of the attempt it repeats.
8
+ * - `run(call)` blocks re-entry synchronously (a ref, not state, so a double click inside one
9
+ * frame is caught). The lock holds while the handler's promise is pending (`pending` = true:
10
+ * the control shows busy) and afterwards until the view-model changes (`viewKey`). Only a
11
+ * `rejected` result or a thrown / rejected handler releases it at once, because then the
12
+ * host keeps the same view and the user may try again.
13
+ */
14
+ export declare function useActionLock(viewKey: string): {
15
+ locked: boolean;
16
+ pending: boolean;
17
+ nextActionId: () => string;
18
+ run: (call: () => AgentActionResult | void | Promise<AgentActionResult | void>) => boolean;
19
+ };
20
+ //# sourceMappingURL=action-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-lock.d.ts","sourceRoot":"","sources":["../../../src/components/intervention/action-lock.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM;;;;gBA2BxB,MAAM,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAG,OAAO;EA0BhG"}
@@ -0,0 +1,65 @@
1
+ 'use client';
2
+ import * as React from 'react';
3
+ /**
4
+ * Per-mount action identity and double-submit guard shared by ApprovalPanel and QuestionnaireCard
5
+ * (ADR-0011 §4). Internal; not exported from the package.
6
+ *
7
+ * - `nextActionId()` = stable per-mount prefix (`React.useId`) + counter, so two cards on one page
8
+ * never collide and a retry can reuse the exact id of the attempt it repeats.
9
+ * - `run(call)` blocks re-entry synchronously (a ref, not state, so a double click inside one
10
+ * frame is caught). The lock holds while the handler's promise is pending (`pending` = true:
11
+ * the control shows busy) and afterwards until the view-model changes (`viewKey`). Only a
12
+ * `rejected` result or a thrown / rejected handler releases it at once, because then the
13
+ * host keeps the same view and the user may try again.
14
+ */
15
+ export function useActionLock(viewKey) {
16
+ const prefix = React.useId();
17
+ const counter = React.useRef(0);
18
+ const lockRef = React.useRef(null);
19
+ const [, force] = React.useReducer((n) => n + 1, 0);
20
+ const mounted = React.useRef(true);
21
+ React.useEffect(() => {
22
+ mounted.current = true;
23
+ return () => {
24
+ mounted.current = false;
25
+ };
26
+ }, []);
27
+ const lock = lockRef.current;
28
+ const locked = lock !== null && (lock.pending || lock.key === viewKey);
29
+ const pending = lock?.pending === true;
30
+ const nextActionId = React.useCallback(() => {
31
+ counter.current += 1;
32
+ return `${prefix.replace(/[^\w-]/g, '')}-${counter.current}`;
33
+ }, [prefix]);
34
+ const settle = (key, result, failed = false) => {
35
+ lockRef.current = failed || (result && result.status === 'rejected') ? null : { key, pending: false };
36
+ if (mounted.current)
37
+ force();
38
+ };
39
+ const run = (call) => {
40
+ const current = lockRef.current;
41
+ if (current && (current.pending || current.key === viewKey))
42
+ return false;
43
+ const key = viewKey;
44
+ lockRef.current = { key, pending: true };
45
+ let out;
46
+ try {
47
+ out = call();
48
+ }
49
+ catch (error) {
50
+ lockRef.current = null;
51
+ force();
52
+ throw error;
53
+ }
54
+ if (out && typeof out.then === 'function') {
55
+ force();
56
+ out.then((result) => settle(key, result), () => settle(key, undefined, true));
57
+ }
58
+ else {
59
+ settle(key, out);
60
+ }
61
+ return true;
62
+ };
63
+ return { locked, pending, nextActionId, run };
64
+ }
65
+ //# sourceMappingURL=action-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-lock.js","sourceRoot":"","sources":["../../../src/components/intervention/action-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ type LocalIconName = 'shield-alert' | 'lock-open' | 'trash-warning';
3
+ export declare function InterventionIcon({ name, className }: {
4
+ name: LocalIconName;
5
+ className?: string;
6
+ }): React.JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/components/intervention/icons.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,KAAK,aAAa,GAAG,cAAc,GAAG,WAAW,GAAG,eAAe,CAAC;AAQpE,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,qBAMhG"}
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ const paths = {
4
+ 'shield-alert': _jsx("path", { d: "M8 2 3 4v4c0 3 2.2 5 5 6 2.8-1 5-3 5-6V4L8 2ZM8 5.5v3M8 10.5v.01" }),
5
+ 'lock-open': _jsx("path", { d: "M4 7.5h8v6H4zM5.5 7.5V5a2.5 2.5 0 0 1 4.9-.7M8 10v1.5" }),
6
+ 'trash-warning': _jsx("path", { d: "M3 4.5h10M6.5 4.5v-2h3v2M4.5 4.5l.5 9h6l.5-9M8 7v3M8 11.5v.01" }),
7
+ };
8
+ export function InterventionIcon({ name, className }) {
9
+ return (_jsx("svg", { className: className ? `rl-agent-icon ${className}` : 'rl-agent-icon', viewBox: "0 0 16 16", "aria-hidden": "true", focusable: "false", "data-icon": name, children: paths[name] }));
10
+ }
11
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/components/intervention/icons.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAWb,MAAM,KAAK,GAA2C;IACpD,cAAc,EAAE,eAAM,CAAC,EAAC,kEAAkE,GAAG;IAC7F,WAAW,EAAE,eAAM,CAAC,EAAC,uDAAuD,GAAG;IAC/E,eAAe,EAAE,eAAM,CAAC,EAAC,+DAA+D,GAAG;CAC5F,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAA+C;IAC/F,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,OAAO,EAAC,WAAW,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,eAAY,IAAI,YACjJ,KAAK,CAAC,IAAI,CAAC,GACR,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { QuestionAnswer, QuestionView } from '@wzrhine/agent-core';
2
+ /**
3
+ * Pure answer helpers for QuestionnaireCard (ADR-0011 §6). No React; safe for adapters.
4
+ *
5
+ * Encoding of the custom "other" answer inside `QuestionAnswer` (the contract has no extra flag):
6
+ * - `text === undefined` → the custom option is not selected;
7
+ * - `text` is a string (possibly empty) → the custom option is selected and `text` is its content.
8
+ * For `single` questions a selected custom answer clears `optionIds`, and choosing an option clears `text`.
9
+ * For `text` questions `text` is the answer itself.
10
+ */
11
+ export type QuestionAnswerState = 'answered' | 'skipped' | 'unanswered';
12
+ /** Questions are optional unless `optional === false`. */
13
+ export declare const isQuestionOptional: (question: QuestionView) => boolean;
14
+ /** Code-point length of the free text is over `maxLength`. */
15
+ export declare function isOverLimit(question: QuestionView, answer: QuestionAnswer | undefined): boolean;
16
+ export declare function answerState(question: QuestionView, answer: QuestionAnswer | undefined): QuestionAnswerState;
17
+ /**
18
+ * The answers to submit: answered questions normalised (unknown option ids and an unselected
19
+ * custom text dropped), explicitly skipped and unanswered optional questions as `skipped: true`.
20
+ * Unanswered required questions are returned in `missing` and must block submission.
21
+ */
22
+ export declare function normalizeAnswers(questions: readonly QuestionView[], answers: ReadonlyMap<string, QuestionAnswer> | readonly QuestionAnswer[]): {
23
+ answers: QuestionAnswer[];
24
+ missing: string[];
25
+ overLimit: string[];
26
+ };
27
+ /** Human-readable answer of one question; `null` when there is none (caller picks the label). */
28
+ export declare function answerText(question: QuestionView, answer: QuestionAnswer | undefined, join: string): string | null;
29
+ //# sourceMappingURL=questionnaire-answers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questionnaire-answers.d.ts","sourceRoot":"","sources":["../../../src/components/intervention/questionnaire-answers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExE;;;;;;;;GAQG;AAEH,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;AAExE,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,GAAI,UAAU,YAAY,YAAgC,CAAC;AAE1F,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO,CAG/F;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,mBAAmB,CAQ3G;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,SAAS,cAAc,EAAE,GACvE;IAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAiCvE;AAED,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQlH"}