@agent-native/core 0.37.3 → 0.39.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 (476) hide show
  1. package/README.md +19 -6
  2. package/dist/action.d.ts +60 -2
  3. package/dist/action.d.ts.map +1 -1
  4. package/dist/action.js +6 -2
  5. package/dist/action.js.map +1 -1
  6. package/dist/agent/production-agent.d.ts +12 -6
  7. package/dist/agent/production-agent.d.ts.map +1 -1
  8. package/dist/agent/production-agent.js +161 -11
  9. package/dist/agent/production-agent.js.map +1 -1
  10. package/dist/agent/types.d.ts +2 -0
  11. package/dist/agent/types.d.ts.map +1 -1
  12. package/dist/agent/types.js.map +1 -1
  13. package/dist/catalog.json +2 -2
  14. package/dist/cli/connect.d.ts.map +1 -1
  15. package/dist/cli/connect.js +15 -0
  16. package/dist/cli/connect.js.map +1 -1
  17. package/dist/cli/create.d.ts.map +1 -1
  18. package/dist/cli/create.js +8 -1
  19. package/dist/cli/create.js.map +1 -1
  20. package/dist/cli/index.js +10 -6
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/cli/plan-publish-store.d.ts +52 -0
  23. package/dist/cli/plan-publish-store.d.ts.map +1 -0
  24. package/dist/cli/plan-publish-store.js +103 -0
  25. package/dist/cli/plan-publish-store.js.map +1 -0
  26. package/dist/cli/skills.d.ts +30 -4
  27. package/dist/cli/skills.d.ts.map +1 -1
  28. package/dist/cli/skills.js +1240 -339
  29. package/dist/cli/skills.js.map +1 -1
  30. package/dist/cli/templates-meta.js +12 -12
  31. package/dist/cli/templates-meta.js.map +1 -1
  32. package/dist/client/AssistantChat.d.ts +3 -1
  33. package/dist/client/AssistantChat.d.ts.map +1 -1
  34. package/dist/client/AssistantChat.js +65 -15
  35. package/dist/client/AssistantChat.js.map +1 -1
  36. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  37. package/dist/client/MultiTabAssistantChat.js +20 -2
  38. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  39. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  40. package/dist/client/agent-chat-adapter.js +12 -0
  41. package/dist/client/agent-chat-adapter.js.map +1 -1
  42. package/dist/client/agent-engine-key.d.ts +24 -0
  43. package/dist/client/agent-engine-key.d.ts.map +1 -0
  44. package/dist/client/agent-engine-key.js +49 -0
  45. package/dist/client/agent-engine-key.js.map +1 -0
  46. package/dist/client/analytics.d.ts.map +1 -1
  47. package/dist/client/analytics.js +34 -0
  48. package/dist/client/analytics.js.map +1 -1
  49. package/dist/client/blocks/BlockView.d.ts +35 -0
  50. package/dist/client/blocks/BlockView.d.ts.map +1 -0
  51. package/dist/client/blocks/BlockView.js +45 -0
  52. package/dist/client/blocks/BlockView.js.map +1 -0
  53. package/dist/client/blocks/SchemaBlockEditor.d.ts +25 -0
  54. package/dist/client/blocks/SchemaBlockEditor.d.ts.map +1 -0
  55. package/dist/client/blocks/SchemaBlockEditor.js +165 -0
  56. package/dist/client/blocks/SchemaBlockEditor.js.map +1 -0
  57. package/dist/client/blocks/agent.d.ts +30 -0
  58. package/dist/client/blocks/agent.d.ts.map +1 -0
  59. package/dist/client/blocks/agent.js +61 -0
  60. package/dist/client/blocks/agent.js.map +1 -0
  61. package/dist/client/blocks/index.d.ts +51 -0
  62. package/dist/client/blocks/index.d.ts.map +1 -0
  63. package/dist/client/blocks/index.js +67 -0
  64. package/dist/client/blocks/index.js.map +1 -0
  65. package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts +6 -0
  66. package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -0
  67. package/dist/client/blocks/library/AnnotatedCodeBlock.js +135 -0
  68. package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -0
  69. package/dist/client/blocks/library/ApiEndpointBlock.d.ts +20 -0
  70. package/dist/client/blocks/library/ApiEndpointBlock.d.ts.map +1 -0
  71. package/dist/client/blocks/library/ApiEndpointBlock.js +131 -0
  72. package/dist/client/blocks/library/ApiEndpointBlock.js.map +1 -0
  73. package/dist/client/blocks/library/DataModelBlock.d.ts +28 -0
  74. package/dist/client/blocks/library/DataModelBlock.d.ts.map +1 -0
  75. package/dist/client/blocks/library/DataModelBlock.js +222 -0
  76. package/dist/client/blocks/library/DataModelBlock.js.map +1 -0
  77. package/dist/client/blocks/library/DiffBlock.d.ts +6 -0
  78. package/dist/client/blocks/library/DiffBlock.d.ts.map +1 -0
  79. package/dist/client/blocks/library/DiffBlock.js +293 -0
  80. package/dist/client/blocks/library/DiffBlock.js.map +1 -0
  81. package/dist/client/blocks/library/FileTreeBlock.d.ts +23 -0
  82. package/dist/client/blocks/library/FileTreeBlock.d.ts.map +1 -0
  83. package/dist/client/blocks/library/FileTreeBlock.js +225 -0
  84. package/dist/client/blocks/library/FileTreeBlock.js.map +1 -0
  85. package/dist/client/blocks/library/JsonExplorerBlock.d.ts +19 -0
  86. package/dist/client/blocks/library/JsonExplorerBlock.d.ts.map +1 -0
  87. package/dist/client/blocks/library/JsonExplorerBlock.js +171 -0
  88. package/dist/client/blocks/library/JsonExplorerBlock.js.map +1 -0
  89. package/dist/client/blocks/library/MermaidBlock.d.ts +17 -0
  90. package/dist/client/blocks/library/MermaidBlock.d.ts.map +1 -0
  91. package/dist/client/blocks/library/MermaidBlock.js +131 -0
  92. package/dist/client/blocks/library/MermaidBlock.js.map +1 -0
  93. package/dist/client/blocks/library/OpenApiSpecBlock.d.ts +19 -0
  94. package/dist/client/blocks/library/OpenApiSpecBlock.d.ts.map +1 -0
  95. package/dist/client/blocks/library/OpenApiSpecBlock.js +494 -0
  96. package/dist/client/blocks/library/OpenApiSpecBlock.js.map +1 -0
  97. package/dist/client/blocks/library/annotated-code.config.d.ts +58 -0
  98. package/dist/client/blocks/library/annotated-code.config.d.ts.map +1 -0
  99. package/dist/client/blocks/library/annotated-code.config.js +53 -0
  100. package/dist/client/blocks/library/annotated-code.config.js.map +1 -0
  101. package/dist/client/blocks/library/api-endpoint.config.d.ts +71 -0
  102. package/dist/client/blocks/library/api-endpoint.config.d.ts.map +1 -0
  103. package/dist/client/blocks/library/api-endpoint.config.js +91 -0
  104. package/dist/client/blocks/library/api-endpoint.config.js.map +1 -0
  105. package/dist/client/blocks/library/checklist.config.d.ts +36 -0
  106. package/dist/client/blocks/library/checklist.config.d.ts.map +1 -0
  107. package/dist/client/blocks/library/checklist.config.js +25 -0
  108. package/dist/client/blocks/library/checklist.config.js.map +1 -0
  109. package/dist/client/blocks/library/checklist.d.ts +26 -0
  110. package/dist/client/blocks/library/checklist.d.ts.map +1 -0
  111. package/dist/client/blocks/library/checklist.js +78 -0
  112. package/dist/client/blocks/library/checklist.js.map +1 -0
  113. package/dist/client/blocks/library/code-tabs.config.d.ts +36 -0
  114. package/dist/client/blocks/library/code-tabs.config.d.ts.map +1 -0
  115. package/dist/client/blocks/library/code-tabs.config.js +30 -0
  116. package/dist/client/blocks/library/code-tabs.config.js.map +1 -0
  117. package/dist/client/blocks/library/code-tabs.d.ts +3 -0
  118. package/dist/client/blocks/library/code-tabs.d.ts.map +1 -0
  119. package/dist/client/blocks/library/code-tabs.js +165 -0
  120. package/dist/client/blocks/library/code-tabs.js.map +1 -0
  121. package/dist/client/blocks/library/data-model.config.d.ts +72 -0
  122. package/dist/client/blocks/library/data-model.config.d.ts.map +1 -0
  123. package/dist/client/blocks/library/data-model.config.js +59 -0
  124. package/dist/client/blocks/library/data-model.config.js.map +1 -0
  125. package/dist/client/blocks/library/dev-doc-ui.d.ts +49 -0
  126. package/dist/client/blocks/library/dev-doc-ui.d.ts.map +1 -0
  127. package/dist/client/blocks/library/dev-doc-ui.js +50 -0
  128. package/dist/client/blocks/library/dev-doc-ui.js.map +1 -0
  129. package/dist/client/blocks/library/diff.config.d.ts +41 -0
  130. package/dist/client/blocks/library/diff.config.d.ts.map +1 -0
  131. package/dist/client/blocks/library/diff.config.js +34 -0
  132. package/dist/client/blocks/library/diff.config.js.map +1 -0
  133. package/dist/client/blocks/library/file-tree.config.d.ts +59 -0
  134. package/dist/client/blocks/library/file-tree.config.d.ts.map +1 -0
  135. package/dist/client/blocks/library/file-tree.config.js +45 -0
  136. package/dist/client/blocks/library/file-tree.config.js.map +1 -0
  137. package/dist/client/blocks/library/html.config.d.ts +37 -0
  138. package/dist/client/blocks/library/html.config.d.ts.map +1 -0
  139. package/dist/client/blocks/library/html.config.js +46 -0
  140. package/dist/client/blocks/library/html.config.js.map +1 -0
  141. package/dist/client/blocks/library/html.d.ts +21 -0
  142. package/dist/client/blocks/library/html.d.ts.map +1 -0
  143. package/dist/client/blocks/library/html.js +72 -0
  144. package/dist/client/blocks/library/html.js.map +1 -0
  145. package/dist/client/blocks/library/json-explorer.config.d.ts +46 -0
  146. package/dist/client/blocks/library/json-explorer.config.d.ts.map +1 -0
  147. package/dist/client/blocks/library/json-explorer.config.js +28 -0
  148. package/dist/client/blocks/library/json-explorer.config.js.map +1 -0
  149. package/dist/client/blocks/library/mermaid.config.d.ts +32 -0
  150. package/dist/client/blocks/library/mermaid.config.d.ts.map +1 -0
  151. package/dist/client/blocks/library/mermaid.config.js +24 -0
  152. package/dist/client/blocks/library/mermaid.config.js.map +1 -0
  153. package/dist/client/blocks/library/openapi-spec.config.d.ts +49 -0
  154. package/dist/client/blocks/library/openapi-spec.config.d.ts.map +1 -0
  155. package/dist/client/blocks/library/openapi-spec.config.js +24 -0
  156. package/dist/client/blocks/library/openapi-spec.config.js.map +1 -0
  157. package/dist/client/blocks/library/server-specs.d.ts +35 -0
  158. package/dist/client/blocks/library/server-specs.d.ts.map +1 -0
  159. package/dist/client/blocks/library/server-specs.js +171 -0
  160. package/dist/client/blocks/library/server-specs.js.map +1 -0
  161. package/dist/client/blocks/library/specs.d.ts +29 -0
  162. package/dist/client/blocks/library/specs.d.ts.map +1 -0
  163. package/dist/client/blocks/library/specs.js +229 -0
  164. package/dist/client/blocks/library/specs.js.map +1 -0
  165. package/dist/client/blocks/library/table.config.d.ts +30 -0
  166. package/dist/client/blocks/library/table.config.d.ts.map +1 -0
  167. package/dist/client/blocks/library/table.config.js +22 -0
  168. package/dist/client/blocks/library/table.config.js.map +1 -0
  169. package/dist/client/blocks/library/table.d.ts +8 -0
  170. package/dist/client/blocks/library/table.d.ts.map +1 -0
  171. package/dist/client/blocks/library/table.js +109 -0
  172. package/dist/client/blocks/library/table.js.map +1 -0
  173. package/dist/client/blocks/library/tabs.config.d.ts +56 -0
  174. package/dist/client/blocks/library/tabs.config.d.ts.map +1 -0
  175. package/dist/client/blocks/library/tabs.config.js +36 -0
  176. package/dist/client/blocks/library/tabs.config.js.map +1 -0
  177. package/dist/client/blocks/library/tabs.d.ts +20 -0
  178. package/dist/client/blocks/library/tabs.d.ts.map +1 -0
  179. package/dist/client/blocks/library/tabs.js +123 -0
  180. package/dist/client/blocks/library/tabs.js.map +1 -0
  181. package/dist/client/blocks/mdx.d.ts +74 -0
  182. package/dist/client/blocks/mdx.d.ts.map +1 -0
  183. package/dist/client/blocks/mdx.js +205 -0
  184. package/dist/client/blocks/mdx.js.map +1 -0
  185. package/dist/client/blocks/provider.d.ts +25 -0
  186. package/dist/client/blocks/provider.d.ts.map +1 -0
  187. package/dist/client/blocks/provider.js +19 -0
  188. package/dist/client/blocks/provider.js.map +1 -0
  189. package/dist/client/blocks/registry.d.ts +32 -0
  190. package/dist/client/blocks/registry.d.ts.map +1 -0
  191. package/dist/client/blocks/registry.js +65 -0
  192. package/dist/client/blocks/registry.js.map +1 -0
  193. package/dist/client/blocks/schema-form/introspect.d.ts +31 -0
  194. package/dist/client/blocks/schema-form/introspect.d.ts.map +1 -0
  195. package/dist/client/blocks/schema-form/introspect.js +164 -0
  196. package/dist/client/blocks/schema-form/introspect.js.map +1 -0
  197. package/dist/client/blocks/server.d.ts +31 -0
  198. package/dist/client/blocks/server.d.ts.map +1 -0
  199. package/dist/client/blocks/server.js +41 -0
  200. package/dist/client/blocks/server.js.map +1 -0
  201. package/dist/client/blocks/types.d.ts +252 -0
  202. package/dist/client/blocks/types.d.ts.map +1 -0
  203. package/dist/client/blocks/types.js +5 -0
  204. package/dist/client/blocks/types.js.map +1 -0
  205. package/dist/client/composer/ComposerPlusMenu.js +10 -1
  206. package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
  207. package/dist/client/guided-questions.d.ts +68 -0
  208. package/dist/client/guided-questions.d.ts.map +1 -1
  209. package/dist/client/guided-questions.js +158 -3
  210. package/dist/client/guided-questions.js.map +1 -1
  211. package/dist/client/index.d.ts +6 -1
  212. package/dist/client/index.d.ts.map +1 -1
  213. package/dist/client/index.js +24 -1
  214. package/dist/client/index.js.map +1 -1
  215. package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts +37 -0
  216. package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts.map +1 -0
  217. package/dist/client/rich-markdown-editor/BubbleToolbar.js +161 -0
  218. package/dist/client/rich-markdown-editor/BubbleToolbar.js.map +1 -0
  219. package/dist/client/rich-markdown-editor/DragHandle.d.ts +52 -0
  220. package/dist/client/rich-markdown-editor/DragHandle.d.ts.map +1 -0
  221. package/dist/client/rich-markdown-editor/DragHandle.js +403 -0
  222. package/dist/client/rich-markdown-editor/DragHandle.js.map +1 -0
  223. package/dist/client/rich-markdown-editor/ImageExtension.d.ts +63 -0
  224. package/dist/client/rich-markdown-editor/ImageExtension.d.ts.map +1 -0
  225. package/dist/client/rich-markdown-editor/ImageExtension.js +242 -0
  226. package/dist/client/rich-markdown-editor/ImageExtension.js.map +1 -0
  227. package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts +97 -0
  228. package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts.map +1 -0
  229. package/dist/client/rich-markdown-editor/RegistryBlockNode.js +214 -0
  230. package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +1 -0
  231. package/dist/client/rich-markdown-editor/RichMarkdownEditor.d.ts +51 -0
  232. package/dist/client/rich-markdown-editor/RichMarkdownEditor.d.ts.map +1 -0
  233. package/dist/client/rich-markdown-editor/RichMarkdownEditor.js +37 -0
  234. package/dist/client/rich-markdown-editor/RichMarkdownEditor.js.map +1 -0
  235. package/dist/client/rich-markdown-editor/RunId.d.ts +28 -0
  236. package/dist/client/rich-markdown-editor/RunId.d.ts.map +1 -0
  237. package/dist/client/rich-markdown-editor/RunId.js +60 -0
  238. package/dist/client/rich-markdown-editor/RunId.js.map +1 -0
  239. package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts +85 -0
  240. package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts.map +1 -0
  241. package/dist/client/rich-markdown-editor/SharedRichEditor.js +130 -0
  242. package/dist/client/rich-markdown-editor/SharedRichEditor.js.map +1 -0
  243. package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts +36 -0
  244. package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts.map +1 -0
  245. package/dist/client/rich-markdown-editor/SlashCommandMenu.js +193 -0
  246. package/dist/client/rich-markdown-editor/SlashCommandMenu.js.map +1 -0
  247. package/dist/client/rich-markdown-editor/extensions.d.ts +166 -0
  248. package/dist/client/rich-markdown-editor/extensions.d.ts.map +1 -0
  249. package/dist/client/rich-markdown-editor/extensions.js +222 -0
  250. package/dist/client/rich-markdown-editor/extensions.js.map +1 -0
  251. package/dist/client/rich-markdown-editor/gfmDoc.d.ts +24 -0
  252. package/dist/client/rich-markdown-editor/gfmDoc.d.ts.map +1 -0
  253. package/dist/client/rich-markdown-editor/gfmDoc.js +83 -0
  254. package/dist/client/rich-markdown-editor/gfmDoc.js.map +1 -0
  255. package/dist/client/rich-markdown-editor/index.d.ts +14 -0
  256. package/dist/client/rich-markdown-editor/index.d.ts.map +1 -0
  257. package/dist/client/rich-markdown-editor/index.js +14 -0
  258. package/dist/client/rich-markdown-editor/index.js.map +1 -0
  259. package/dist/client/rich-markdown-editor/registrySlashCommands.d.ts +46 -0
  260. package/dist/client/rich-markdown-editor/registrySlashCommands.d.ts.map +1 -0
  261. package/dist/client/rich-markdown-editor/registrySlashCommands.js +13 -0
  262. package/dist/client/rich-markdown-editor/registrySlashCommands.js.map +1 -0
  263. package/dist/client/rich-markdown-editor/uploadEditorImage.d.ts +18 -0
  264. package/dist/client/rich-markdown-editor/uploadEditorImage.d.ts.map +1 -0
  265. package/dist/client/rich-markdown-editor/uploadEditorImage.js +57 -0
  266. package/dist/client/rich-markdown-editor/uploadEditorImage.js.map +1 -0
  267. package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts +91 -0
  268. package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -0
  269. package/dist/client/rich-markdown-editor/useCollabReconcile.js +375 -0
  270. package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -0
  271. package/dist/client/track.d.ts +25 -0
  272. package/dist/client/track.d.ts.map +1 -0
  273. package/dist/client/track.js +53 -0
  274. package/dist/client/track.js.map +1 -0
  275. package/dist/client/use-action.d.ts.map +1 -1
  276. package/dist/client/use-action.js +6 -0
  277. package/dist/client/use-action.js.map +1 -1
  278. package/dist/client/use-session.d.ts +3 -2
  279. package/dist/client/use-session.d.ts.map +1 -1
  280. package/dist/client/use-session.js +3 -2
  281. package/dist/client/use-session.js.map +1 -1
  282. package/dist/deploy/build.d.ts +5 -0
  283. package/dist/deploy/build.d.ts.map +1 -1
  284. package/dist/deploy/build.js +67 -1
  285. package/dist/deploy/build.js.map +1 -1
  286. package/dist/extensions/schema.d.ts +1 -1
  287. package/dist/mcp/build-server.d.ts.map +1 -1
  288. package/dist/mcp/build-server.js +9 -2
  289. package/dist/mcp/build-server.js.map +1 -1
  290. package/dist/mcp/server.d.ts +1 -1
  291. package/dist/mcp/server.d.ts.map +1 -1
  292. package/dist/mcp/server.js +35 -2
  293. package/dist/mcp/server.js.map +1 -1
  294. package/dist/provider-api/index.d.ts +1 -1
  295. package/dist/provider-api/index.d.ts.map +1 -1
  296. package/dist/scripts/docs/search.d.ts.map +1 -1
  297. package/dist/scripts/docs/search.js +5 -2
  298. package/dist/scripts/docs/search.js.map +1 -1
  299. package/dist/scripts/runner.d.ts.map +1 -1
  300. package/dist/scripts/runner.js +16 -3
  301. package/dist/scripts/runner.js.map +1 -1
  302. package/dist/server/action-discovery.d.ts.map +1 -1
  303. package/dist/server/action-discovery.js +2 -0
  304. package/dist/server/action-discovery.js.map +1 -1
  305. package/dist/server/action-routes.d.ts.map +1 -1
  306. package/dist/server/action-routes.js +30 -4
  307. package/dist/server/action-routes.js.map +1 -1
  308. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  309. package/dist/server/agent-chat-plugin.js +65 -19
  310. package/dist/server/agent-chat-plugin.js.map +1 -1
  311. package/dist/server/agent-teams.d.ts.map +1 -1
  312. package/dist/server/agent-teams.js +8 -1
  313. package/dist/server/agent-teams.js.map +1 -1
  314. package/dist/server/agents-bundle.d.ts +27 -1
  315. package/dist/server/agents-bundle.d.ts.map +1 -1
  316. package/dist/server/agents-bundle.js +41 -3
  317. package/dist/server/agents-bundle.js.map +1 -1
  318. package/dist/server/auth.d.ts.map +1 -1
  319. package/dist/server/auth.js +76 -3
  320. package/dist/server/auth.js.map +1 -1
  321. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  322. package/dist/server/core-routes-plugin.js +60 -0
  323. package/dist/server/core-routes-plugin.js.map +1 -1
  324. package/dist/server/onboarding-html.d.ts.map +1 -1
  325. package/dist/server/onboarding-html.js +160 -22
  326. package/dist/server/onboarding-html.js.map +1 -1
  327. package/dist/server/sentry.d.ts.map +1 -1
  328. package/dist/server/sentry.js +6 -0
  329. package/dist/server/sentry.js.map +1 -1
  330. package/dist/server/social-og-image.d.ts +2 -1
  331. package/dist/server/social-og-image.d.ts.map +1 -1
  332. package/dist/server/social-og-image.js +24 -4
  333. package/dist/server/social-og-image.js.map +1 -1
  334. package/dist/sharing/schema.d.ts +1 -1
  335. package/dist/styles/agent-native.css +1 -0
  336. package/dist/styles/rich-markdown-editor.css +439 -0
  337. package/dist/templates/default/.agents/skills/actions/SKILL.md +4 -1
  338. package/dist/templates/default/.agents/skills/security/SKILL.md +13 -4
  339. package/dist/templates/default/.agents/skills/storing-data/SKILL.md +15 -3
  340. package/dist/templates/default/AGENTS.md +1 -0
  341. package/dist/templates/default/DEVELOPING.md +2 -0
  342. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +10 -3
  343. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +98 -10
  344. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +45 -3
  345. package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -0
  346. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +37 -4
  347. package/dist/templates/workspace-core/.agents/skills/automations/SKILL.md +9 -4
  348. package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +2 -0
  349. package/dist/templates/workspace-core/.agents/skills/client-methods/SKILL.md +106 -0
  350. package/dist/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +53 -0
  351. package/dist/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +2 -0
  352. package/dist/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +62 -61
  353. package/dist/templates/workspace-core/.agents/skills/context-xray/SKILL.md +47 -0
  354. package/dist/templates/workspace-core/.agents/skills/create-skill/SKILL.md +28 -0
  355. package/dist/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +52 -1
  356. package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +2 -0
  357. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +95 -433
  358. package/dist/templates/workspace-core/.agents/skills/extensions/references/api.md +285 -0
  359. package/dist/templates/workspace-core/.agents/skills/extensions/references/examples.md +259 -0
  360. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +398 -0
  361. package/dist/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +157 -0
  362. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +17 -0
  363. package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +13 -2
  364. package/dist/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +51 -0
  365. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +14 -4
  366. package/dist/templates/workspace-core/.agents/skills/onboarding/SKILL.md +13 -1
  367. package/dist/templates/workspace-core/.agents/skills/portability/SKILL.md +27 -5
  368. package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +24 -8
  369. package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +53 -7
  370. package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +43 -10
  371. package/dist/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +2 -0
  372. package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +43 -14
  373. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +50 -1
  374. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -2
  375. package/dist/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +11 -1
  376. package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +15 -0
  377. package/dist/templates/workspace-core/.agents/skills/sharing/SKILL.md +5 -1
  378. package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +48 -19
  379. package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +7 -3
  380. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +13 -6
  381. package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +236 -0
  382. package/dist/templates/workspace-core/AGENTS.md +5 -1
  383. package/dist/templates/workspace-root/AGENTS.md +5 -2
  384. package/dist/tracking/route.d.ts +43 -0
  385. package/dist/tracking/route.d.ts.map +1 -0
  386. package/dist/tracking/route.js +85 -0
  387. package/dist/tracking/route.js.map +1 -0
  388. package/dist/vite/client.d.ts.map +1 -1
  389. package/dist/vite/client.js +15 -0
  390. package/dist/vite/client.js.map +1 -1
  391. package/docs/content/a2a-protocol.md +18 -4
  392. package/docs/content/actions.md +87 -0
  393. package/docs/content/agent-mentions.md +2 -1
  394. package/docs/content/authentication.md +2 -1
  395. package/docs/content/client.md +64 -13
  396. package/docs/content/cloneable-saas.md +1 -1
  397. package/docs/content/code-agents-ui.md +17 -11
  398. package/docs/content/context-awareness.md +23 -28
  399. package/docs/content/creating-templates.md +1 -1
  400. package/docs/content/drop-in-agent.md +2 -0
  401. package/docs/content/getting-started.md +2 -2
  402. package/docs/content/key-concepts.md +2 -2
  403. package/docs/content/messaging.md +57 -15
  404. package/docs/content/migration-workbench.md +1 -1
  405. package/docs/content/multi-app-workspace.md +1 -1
  406. package/docs/content/multi-tenancy.md +17 -15
  407. package/docs/content/real-time-collaboration.md +1 -1
  408. package/docs/content/recurring-jobs.md +1 -1
  409. package/docs/content/security.md +2 -2
  410. package/docs/content/server.md +4 -4
  411. package/docs/content/skills-guide.md +30 -0
  412. package/docs/content/template-analytics.md +2 -2
  413. package/docs/content/template-assets.md +17 -1
  414. package/docs/content/template-brain.md +2 -2
  415. package/docs/content/template-calendar.md +1 -1
  416. package/docs/content/template-clips.md +3 -3
  417. package/docs/content/template-content.md +2 -2
  418. package/docs/content/template-design.md +2 -2
  419. package/docs/content/template-dispatch.md +3 -3
  420. package/docs/content/template-forms.md +14 -2
  421. package/docs/content/template-mail.md +1 -3
  422. package/docs/content/template-plan.md +133 -0
  423. package/docs/content/template-slides.md +5 -4
  424. package/docs/content/template-starter.md +4 -4
  425. package/docs/content/template-videos.md +6 -11
  426. package/docs/content/tracking.md +21 -1
  427. package/docs/content/visual-plans.md +74 -0
  428. package/docs/content/workspace.md +9 -9
  429. package/package.json +26 -11
  430. package/src/templates/default/.agents/skills/actions/SKILL.md +4 -1
  431. package/src/templates/default/.agents/skills/security/SKILL.md +13 -4
  432. package/src/templates/default/.agents/skills/storing-data/SKILL.md +15 -3
  433. package/src/templates/default/AGENTS.md +1 -0
  434. package/src/templates/default/DEVELOPING.md +2 -0
  435. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +10 -3
  436. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +98 -10
  437. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +45 -3
  438. package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -0
  439. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +37 -4
  440. package/src/templates/workspace-core/.agents/skills/automations/SKILL.md +9 -4
  441. package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +2 -0
  442. package/src/templates/workspace-core/.agents/skills/client-methods/SKILL.md +106 -0
  443. package/src/templates/workspace-core/.agents/skills/client-methods/references/legacy-client-fetch-audit-2026-06-03.md +53 -0
  444. package/src/templates/workspace-core/.agents/skills/client-side-routing/SKILL.md +2 -0
  445. package/src/templates/workspace-core/.agents/skills/context-awareness/SKILL.md +62 -61
  446. package/src/templates/workspace-core/.agents/skills/context-xray/SKILL.md +47 -0
  447. package/src/templates/workspace-core/.agents/skills/create-skill/SKILL.md +28 -0
  448. package/src/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +52 -1
  449. package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +2 -0
  450. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +95 -433
  451. package/src/templates/workspace-core/.agents/skills/extensions/references/api.md +285 -0
  452. package/src/templates/workspace-core/.agents/skills/extensions/references/examples.md +259 -0
  453. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +398 -0
  454. package/src/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +157 -0
  455. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +17 -0
  456. package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +13 -2
  457. package/src/templates/workspace-core/.agents/skills/mvp-followup/SKILL.md +51 -0
  458. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +14 -4
  459. package/src/templates/workspace-core/.agents/skills/onboarding/SKILL.md +13 -1
  460. package/src/templates/workspace-core/.agents/skills/portability/SKILL.md +27 -5
  461. package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +24 -8
  462. package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +53 -7
  463. package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +43 -10
  464. package/src/templates/workspace-core/.agents/skills/recurring-jobs/SKILL.md +2 -0
  465. package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +43 -14
  466. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +50 -1
  467. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -2
  468. package/src/templates/workspace-core/.agents/skills/server-plugins/SKILL.md +11 -1
  469. package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +15 -0
  470. package/src/templates/workspace-core/.agents/skills/sharing/SKILL.md +5 -1
  471. package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +48 -19
  472. package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +7 -3
  473. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +13 -6
  474. package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +236 -0
  475. package/src/templates/workspace-core/AGENTS.md +5 -1
  476. package/src/templates/workspace-root/AGENTS.md +5 -2
@@ -4,6 +4,7 @@ import { useQuery, useQueryClient } from "@tanstack/react-query";
4
4
  import { IconCheck, IconChevronRight, IconHelpCircle, IconUpload, IconX, } from "@tabler/icons-react";
5
5
  import { agentNativePath } from "./api-path.js";
6
6
  import { sendToAgentChat } from "./agent-chat.js";
7
+ import { setClientAppState } from "./application-state.js";
7
8
  import { cn } from "./utils.js";
8
9
  const OTHER_OPTION_PREFIX = "__other__:";
9
10
  const EXPLORE_OPTION = {
@@ -71,6 +72,145 @@ export function formatGuidedAnswersForAgent(answers) {
71
72
  })
72
73
  .join("\n");
73
74
  }
75
+ const GUIDED_QUESTIONS_STATE_KEY = "guided-questions";
76
+ const clientQuestionResolvers = new Map();
77
+ let askQuestionCounter = 0;
78
+ function nextClientResolveId() {
79
+ askQuestionCounter += 1;
80
+ const rand = typeof crypto !== "undefined" && typeof crypto.randomUUID === "function"
81
+ ? crypto.randomUUID()
82
+ : `${Date.now()}-${Math.random().toString(36).slice(2)}`;
83
+ return `askq-${askQuestionCounter}-${rand}`;
84
+ }
85
+ /** Resolve a pending client-initiated question by id. Returns false when no
86
+ * resolver is registered (e.g. an agent-initiated question, or a reload). */
87
+ function resolveClientQuestion(id, answer) {
88
+ const resolver = clientQuestionResolvers.get(id);
89
+ if (!resolver)
90
+ return false;
91
+ clientQuestionResolvers.delete(id);
92
+ resolver(answer);
93
+ return true;
94
+ }
95
+ /** Pull the answer for a single guided question out of the answers map,
96
+ * normalizing "Other" free-text and multi-select arrays. */
97
+ function extractSingleAnswer(answers, questionId) {
98
+ const raw = answers[questionId];
99
+ if (!hasGuidedAnswer(raw))
100
+ return null;
101
+ if (Array.isArray(raw)) {
102
+ const values = raw
103
+ .map((v) => isOtherGuidedAnswer(v) ? getOtherGuidedAnswerText(v).trim() : String(v))
104
+ .filter((s) => s.length > 0);
105
+ return values.length ? values : null;
106
+ }
107
+ if (isOtherGuidedAnswer(raw)) {
108
+ const text = getOtherGuidedAnswerText(raw).trim();
109
+ return text.length ? text : null;
110
+ }
111
+ return String(raw);
112
+ }
113
+ /**
114
+ * Ask the user a multiple-choice question from app code and render it inline in
115
+ * the agent panel — the client-side twin of the agent's `ask-question` tool.
116
+ *
117
+ * The question is written to application state (`"guided-questions"` by
118
+ * default), where the mounted `GuidedQuestionFlow` (driven by
119
+ * {@link useGuidedQuestionFlow}) renders it, and the agent panel is revealed so
120
+ * it's visible. **Resolves with the user's answer** — the selected option
121
+ * value (or `value[]` when `allowMultiple`), the free-text "Other" string, or
122
+ * `null` if they skip — so the caller can branch on it (e.g. build the right
123
+ * generate prompt before kicking off agent work):
124
+ *
125
+ * ```ts
126
+ * const length = await askUserQuestion({
127
+ * question: "How long should this deck be?",
128
+ * header: "Deck length",
129
+ * options: [{ label: "Short", recommended: true }, { label: "Long" }],
130
+ * });
131
+ * if (length) sendToAgentChat({ message: `Make a ${length} deck`, submit: true });
132
+ * ```
133
+ *
134
+ * Requires the agent panel (the mounted `GuidedQuestionFlow`) to exist, which
135
+ * it does in every template. The returned promise stays pending until the user
136
+ * answers or skips.
137
+ */
138
+ export async function askUserQuestion(input) {
139
+ const question = String(input?.question ?? "").trim();
140
+ if (!question) {
141
+ throw new TypeError("askUserQuestion: `question` is required.");
142
+ }
143
+ const header = typeof input.header === "string" && input.header.trim()
144
+ ? input.header.trim()
145
+ : undefined;
146
+ const allowMultiple = input.allowMultiple === true;
147
+ const allowFreeText = input.allowFreeText !== false;
148
+ const options = (Array.isArray(input.options) ? input.options : [])
149
+ .map((raw) => {
150
+ const label = typeof raw?.label === "string" && raw.label.trim()
151
+ ? raw.label.trim()
152
+ : typeof raw?.value === "string"
153
+ ? String(raw.value).trim()
154
+ : "";
155
+ if (!label)
156
+ return null;
157
+ const value = typeof raw?.value === "string" && raw.value.trim()
158
+ ? raw.value.trim()
159
+ : label;
160
+ const option = { label, value };
161
+ if (typeof raw.description === "string" && raw.description.trim()) {
162
+ option.description = raw.description.trim();
163
+ }
164
+ if (typeof raw.preview === "string" && raw.preview.trim()) {
165
+ option.preview = raw.preview;
166
+ }
167
+ if (raw.recommended === true)
168
+ option.recommended = true;
169
+ return option;
170
+ })
171
+ .filter((opt) => opt !== null);
172
+ if (options.length === 0) {
173
+ throw new TypeError("askUserQuestion: `options` must contain at least one option with a label.");
174
+ }
175
+ const resolveId = nextClientResolveId();
176
+ const payload = {
177
+ clientResolveId: resolveId,
178
+ questions: [
179
+ {
180
+ id: "q1",
181
+ type: "text-options",
182
+ question,
183
+ ...(header ? { header } : {}),
184
+ required: !allowFreeText,
185
+ multiSelect: allowMultiple,
186
+ allowOther: allowFreeText,
187
+ includeExplore: false,
188
+ includeDecide: false,
189
+ options,
190
+ },
191
+ ],
192
+ };
193
+ const answerPromise = new Promise((resolve) => {
194
+ clientQuestionResolvers.set(resolveId, resolve);
195
+ });
196
+ // Reveal the agent panel so the inline question is visible even if collapsed.
197
+ if (typeof window !== "undefined") {
198
+ try {
199
+ window.dispatchEvent(new CustomEvent("agent-panel:open"));
200
+ }
201
+ catch {
202
+ // best-effort — the question still renders if the panel is already open
203
+ }
204
+ }
205
+ try {
206
+ await setClientAppState(input.stateKey ?? GUIDED_QUESTIONS_STATE_KEY, payload);
207
+ }
208
+ catch (err) {
209
+ clientQuestionResolvers.delete(resolveId);
210
+ throw err;
211
+ }
212
+ return answerPromise;
213
+ }
74
214
  function optionKey(option) {
75
215
  return `${option.value.toLowerCase()}::${option.label.toLowerCase()}`;
76
216
  }
@@ -167,7 +307,7 @@ function TextOptions({ question, value, onChange, }) {
167
307
  function OptionButton({ option, selected, multiSelect, onClick, }) {
168
308
  return (_jsxs("button", { type: "button", onClick: onClick, className: cn("group flex min-h-[56px] cursor-pointer items-start gap-2 rounded-md border px-3 py-2 text-left transition-colors", selected
169
309
  ? "border-primary bg-primary/10 text-primary"
170
- : "border-border bg-muted/30 text-muted-foreground hover:border-muted-foreground/50 hover:bg-muted/45 hover:text-foreground"), children: [multiSelect && (_jsx("span", { className: cn("mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded border", selected ? "border-primary bg-primary text-primary-foreground" : ""), children: selected && _jsx(IconCheck, { className: "h-3 w-3" }) })), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsxs("span", { className: "flex flex-wrap items-center gap-1.5 text-sm font-medium leading-5", children: [option.label, option.recommended && (_jsx("span", { className: "rounded-sm bg-primary/15 px-1.5 py-0.5 text-[10px] font-medium uppercase text-primary", children: "Recommended" }))] }), option.description && (_jsx("span", { className: "mt-0.5 block text-xs leading-4 text-muted-foreground", children: option.description }))] })] }));
310
+ : "border-border bg-muted/30 text-muted-foreground hover:border-muted-foreground/50 hover:bg-muted/45 hover:text-foreground"), children: [multiSelect && (_jsx("span", { className: cn("mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded border", selected ? "border-primary bg-primary text-primary-foreground" : ""), children: selected && _jsx(IconCheck, { className: "h-3 w-3" }) })), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsxs("span", { className: "flex flex-wrap items-center gap-1.5 text-sm font-medium leading-5", children: [option.label, option.recommended && (_jsx("span", { className: "rounded-sm bg-primary/15 px-1.5 py-0.5 text-[10px] font-medium uppercase text-primary", children: "Recommended" }))] }), option.description && (_jsx("span", { className: "mt-0.5 block text-xs leading-4 text-muted-foreground", children: option.description })), option.preview && (_jsx("span", { className: "mt-1.5 block max-h-40 overflow-auto whitespace-pre-wrap rounded border border-border/60 bg-background/60 px-2 py-1.5 font-mono text-[11px] leading-4 text-muted-foreground", children: option.preview }))] })] }));
171
311
  }
172
312
  function ColorOptions({ question, value, onChange, }) {
173
313
  const options = question.options ?? question.choices ?? [];
@@ -286,6 +426,15 @@ export function useGuidedQuestionFlow({ stateKey = "show-questions", browserTabI
286
426
  del(stateKey);
287
427
  }, [endpointFor, queryClient, resolvedQueryKey, scopedKey, stateKey]);
288
428
  const handleSubmit = useCallback((answers) => {
429
+ // Client-initiated question (askUserQuestion): resolve the caller's
430
+ // promise with the answer instead of forwarding it to the agent chat.
431
+ const resolveId = payload?.clientResolveId;
432
+ if (resolveId) {
433
+ const firstId = payload?.questions?.[0]?.id ?? "q1";
434
+ resolveClientQuestion(resolveId, extractSingleAnswer(answers, firstId));
435
+ clear();
436
+ return;
437
+ }
289
438
  const formattedAnswers = formatGuidedAnswersForAgent(answers);
290
439
  const context = buildSubmitContext?.({ answers, formattedAnswers }) ??
291
440
  [
@@ -296,15 +445,21 @@ export function useGuidedQuestionFlow({ stateKey = "show-questions", browserTabI
296
445
  ].join("\n");
297
446
  sendToAgentChat({ message: submitMessage, context, submit: true });
298
447
  clear();
299
- }, [buildSubmitContext, clear, submitMessage]);
448
+ }, [buildSubmitContext, clear, payload, submitMessage]);
300
449
  const handleSkip = useCallback(() => {
450
+ const resolveId = payload?.clientResolveId;
451
+ if (resolveId) {
452
+ resolveClientQuestion(resolveId, null);
453
+ clear();
454
+ return;
455
+ }
301
456
  sendToAgentChat({
302
457
  message: skipMessage,
303
458
  context: buildSkipContext?.(),
304
459
  submit: true,
305
460
  });
306
461
  clear();
307
- }, [buildSkipContext, clear, skipMessage]);
462
+ }, [buildSkipContext, clear, payload, skipMessage]);
308
463
  return {
309
464
  payload,
310
465
  questions: payload?.questions ?? null,
@@ -1 +1 @@
1
- {"version":3,"file":"guided-questions.js","sourceRoot":"","sources":["../../src/client/guided-questions.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport {\n IconCheck,\n IconChevronRight,\n IconHelpCircle,\n IconUpload,\n IconX,\n} from \"@tabler/icons-react\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { sendToAgentChat } from \"./agent-chat.js\";\nimport { cn } from \"./utils.js\";\n\nexport type GuidedQuestionType =\n | \"text-options\"\n | \"color-options\"\n | \"slider\"\n | \"file\"\n | \"freeform\";\n\nexport interface GuidedQuestionOption {\n label: string;\n value: string;\n color?: string;\n icon?: string;\n description?: string;\n recommended?: boolean;\n}\n\nexport interface GuidedQuestion {\n id: string;\n type: GuidedQuestionType;\n header?: string;\n question: string;\n description?: string;\n options?: GuidedQuestionOption[];\n choices?: GuidedQuestionOption[];\n multiSelect?: boolean;\n min?: number;\n max?: number;\n step?: number;\n required?: boolean;\n placeholder?: string;\n allowOther?: boolean;\n includeExplore?: boolean;\n includeDecide?: boolean;\n}\n\nexport type GuidedQuestionAnswers = Record<string, unknown>;\n\nexport interface GuidedQuestionPayload {\n questions: GuidedQuestion[];\n title?: string;\n description?: string;\n skipLabel?: string;\n submitLabel?: string;\n}\n\nconst OTHER_OPTION_PREFIX = \"__other__:\";\nconst EXPLORE_OPTION: GuidedQuestionOption = {\n label: \"Explore a few options\",\n value: \"__explore__\",\n description: \"Show me a few distinct directions before committing.\",\n};\nconst DECIDE_OPTION: GuidedQuestionOption = {\n label: \"Decide for me\",\n value: \"__decide__\",\n description: \"Use your judgment and keep moving.\",\n};\n\nfunction isFileLike(value: unknown): value is { name: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"name\" in value &&\n typeof (value as { name?: unknown }).name === \"string\"\n );\n}\n\nexport function isOtherGuidedAnswer(value: unknown): value is string {\n return typeof value === \"string\" && value.startsWith(OTHER_OPTION_PREFIX);\n}\n\nexport function getOtherGuidedAnswerText(value: unknown): string {\n return isOtherGuidedAnswer(value)\n ? value.slice(OTHER_OPTION_PREFIX.length)\n : \"\";\n}\n\nexport function makeOtherGuidedAnswer(text = \"\"): string {\n return `${OTHER_OPTION_PREFIX}${text}`;\n}\n\nexport function hasGuidedAnswer(value: unknown): boolean {\n if (value == null || value === \"\") return false;\n if (Array.isArray(value)) return value.some(hasGuidedAnswer);\n if (isOtherGuidedAnswer(value)) {\n return getOtherGuidedAnswerText(value).trim().length > 0;\n }\n return true;\n}\n\nexport function formatGuidedAnswerValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(formatGuidedAnswerValue).filter(hasGuidedAnswer);\n }\n if (isOtherGuidedAnswer(value)) {\n const text = getOtherGuidedAnswerText(value).trim();\n return text ? `Other: ${text}` : \"\";\n }\n if (isFileLike(value)) return value.name;\n return value;\n}\n\nexport function normalizeGuidedAnswers(\n answers: GuidedQuestionAnswers,\n): GuidedQuestionAnswers {\n return Object.fromEntries(\n Object.entries(answers).map(([id, value]) => [\n id,\n formatGuidedAnswerValue(value),\n ]),\n );\n}\n\nexport function formatGuidedAnswersForAgent(\n answers: GuidedQuestionAnswers,\n): string {\n return Object.entries(normalizeGuidedAnswers(answers))\n .filter(([, value]) => hasGuidedAnswer(value))\n .map(([id, value]) => {\n if (Array.isArray(value)) return `${id}: ${value.join(\", \")}`;\n return `${id}: ${String(value)}`;\n })\n .join(\"\\n\");\n}\n\nfunction optionKey(option: GuidedQuestionOption): string {\n return `${option.value.toLowerCase()}::${option.label.toLowerCase()}`;\n}\n\nfunction withDefaultOptions(question: GuidedQuestion): GuidedQuestionOption[] {\n const base = question.options ?? question.choices ?? [];\n const seen = new Set(base.map(optionKey));\n const result = [...base];\n const maybePush = (option: GuidedQuestionOption, enabled: boolean) => {\n if (!enabled) return;\n const key = optionKey(option);\n const label = option.label.toLowerCase();\n const value = option.value.toLowerCase();\n const duplicate = result.some(\n (existing) =>\n optionKey(existing) === key ||\n existing.label.toLowerCase() === label ||\n existing.value.toLowerCase() === value,\n );\n if (duplicate || seen.has(key)) return;\n seen.add(key);\n result.push(option);\n };\n maybePush(EXPLORE_OPTION, question.includeExplore !== false);\n maybePush(DECIDE_OPTION, question.includeDecide !== false);\n return result;\n}\n\nexport interface GuidedQuestionFlowProps {\n questions: GuidedQuestion[];\n onSubmit: (answers: GuidedQuestionAnswers) => void;\n onSkip: () => void;\n title?: string;\n description?: string;\n skipLabel?: string;\n submitLabel?: string;\n className?: string;\n}\n\nexport function GuidedQuestionFlow({\n questions,\n onSubmit,\n onSkip,\n title = \"A few choices before I generate\",\n description = \"Pick what you know. Use Other for anything that does not fit, or let the agent decide.\",\n skipLabel = \"Skip\",\n submitLabel = \"Continue\",\n className,\n}: GuidedQuestionFlowProps) {\n const [answers, setAnswers] = useState<GuidedQuestionAnswers>({});\n\n useEffect(() => {\n setAnswers({});\n }, [questions]);\n\n const setAnswer = useCallback((id: string, value: unknown) => {\n setAnswers((prev) => ({ ...prev, [id]: value }));\n }, []);\n\n const allRequiredAnswered = questions\n .filter((question) => question.required)\n .every((question) => hasGuidedAnswer(answers[question.id]));\n\n return (\n <div\n className={cn(\n \"flex h-full w-full items-center justify-center bg-background text-foreground\",\n className,\n )}\n >\n <div className=\"flex max-h-full w-full max-w-3xl flex-col px-4 py-6 sm:px-8 sm:py-10\">\n <div className=\"mb-6 flex items-start gap-3\">\n <div className=\"mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-md border border-border bg-muted/40 text-primary\">\n <IconHelpCircle className=\"h-5 w-5\" />\n </div>\n <div className=\"min-w-0\">\n <h2 className=\"text-xl font-semibold tracking-normal text-foreground sm:text-2xl\">\n {title}\n </h2>\n {description && (\n <p className=\"mt-1 max-w-2xl text-sm leading-5 text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"min-h-0 flex-1 space-y-4 overflow-y-auto pr-1\">\n {questions.map((question, index) => (\n <QuestionCard\n key={question.id}\n index={index}\n question={question}\n value={answers[question.id]}\n onChange={(value) => setAnswer(question.id, value)}\n />\n ))}\n </div>\n\n <div className=\"mt-5 flex shrink-0 items-center justify-between gap-4 border-t border-border pt-4\">\n <div className=\"flex items-center gap-1.5\">\n {questions.map((question, index) => (\n <span\n key={question.id || index}\n className={cn(\n \"h-1.5 w-1.5 rounded-full\",\n hasGuidedAnswer(answers[question.id])\n ? \"bg-primary\"\n : \"bg-muted-foreground/30\",\n )}\n />\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={onSkip}\n className=\"cursor-pointer rounded-md px-3 py-2 text-sm text-muted-foreground transition-colors hover:bg-muted/60 hover:text-foreground\"\n >\n {skipLabel}\n </button>\n <button\n type=\"button\"\n onClick={() => onSubmit(normalizeGuidedAnswers(answers))}\n disabled={!allRequiredAnswered}\n className=\"inline-flex cursor-pointer items-center gap-2 rounded-md bg-primary px-3.5 py-2 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90 disabled:cursor-not-allowed disabled:opacity-45\"\n >\n {submitLabel}\n <IconChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction QuestionCard({\n index,\n question,\n value,\n onChange,\n}: {\n index: number;\n question: GuidedQuestion;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n return (\n <section className=\"rounded-lg border border-border bg-card/65 p-4 shadow-sm\">\n <div className=\"mb-3 flex gap-3\">\n <div className=\"flex h-6 min-w-6 items-center justify-center rounded-md bg-muted text-xs font-medium text-muted-foreground\">\n {index + 1}\n </div>\n <div className=\"min-w-0\">\n {question.header && (\n <p className=\"mb-1 text-[11px] font-medium uppercase text-muted-foreground\">\n {question.header}\n </p>\n )}\n <h3 className=\"text-sm font-medium leading-5 text-foreground\">\n {question.question}\n {question.required && (\n <span className=\"ml-1 text-destructive\">*</span>\n )}\n </h3>\n {question.description && (\n <p className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n {question.description}\n </p>\n )}\n </div>\n </div>\n\n {question.type === \"text-options\" && (\n <TextOptions question={question} value={value} onChange={onChange} />\n )}\n {question.type === \"color-options\" && (\n <ColorOptions question={question} value={value} onChange={onChange} />\n )}\n {question.type === \"slider\" && (\n <SliderQuestion question={question} value={value} onChange={onChange} />\n )}\n {question.type === \"file\" && (\n <FileDropZone value={value} onChange={onChange} />\n )}\n {question.type === \"freeform\" && (\n <textarea\n value={typeof value === \"string\" ? value : \"\"}\n onChange={(event) => onChange(event.target.value)}\n placeholder={question.placeholder ?? \"Type your answer...\"}\n className=\"min-h-[84px] w-full resize-none rounded-md border border-border bg-muted/45 px-3 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground/70 focus:border-primary\"\n />\n )}\n </section>\n );\n}\n\nfunction TextOptions({\n question,\n value,\n onChange,\n}: {\n question: GuidedQuestion;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const options = useMemo(() => withDefaultOptions(question), [question]);\n const multiSelect = question.multiSelect === true;\n const selectedValues = Array.isArray(value) ? value : [];\n const otherSelected = multiSelect\n ? selectedValues.some(isOtherGuidedAnswer)\n : isOtherGuidedAnswer(value);\n const otherText = multiSelect\n ? getOtherGuidedAnswerText(selectedValues.find(isOtherGuidedAnswer))\n : getOtherGuidedAnswerText(value);\n\n const isSelected = (optionValue: string) =>\n multiSelect ? selectedValues.includes(optionValue) : value === optionValue;\n\n const toggleOption = (optionValue: string) => {\n if (!multiSelect) {\n onChange(optionValue);\n return;\n }\n const next = selectedValues.includes(optionValue)\n ? selectedValues.filter((item) => item !== optionValue)\n : [...selectedValues, optionValue];\n onChange(next);\n };\n\n const toggleOther = () => {\n if (!multiSelect) {\n onChange(otherSelected ? \"\" : makeOtherGuidedAnswer());\n return;\n }\n if (otherSelected) {\n onChange(selectedValues.filter((item) => !isOtherGuidedAnswer(item)));\n return;\n }\n onChange([...selectedValues, makeOtherGuidedAnswer()]);\n };\n\n const setOtherText = (text: string) => {\n const nextOther = makeOtherGuidedAnswer(text);\n if (!multiSelect) {\n onChange(nextOther);\n return;\n }\n onChange([\n ...selectedValues.filter((item) => !isOtherGuidedAnswer(item)),\n nextOther,\n ]);\n };\n\n const allowOther = question.allowOther !== false;\n\n return (\n <div className=\"space-y-3\">\n <div className=\"grid gap-2 sm:grid-cols-2\">\n {options.map((option) => (\n <OptionButton\n key={`${option.value}:${option.label}`}\n option={option}\n selected={isSelected(option.value)}\n multiSelect={multiSelect}\n onClick={() => toggleOption(option.value)}\n />\n ))}\n {allowOther && (\n <OptionButton\n option={{\n label: \"Other...\",\n value: \"__other__\",\n description: \"Tell the agent exactly what you mean.\",\n }}\n selected={otherSelected}\n multiSelect={multiSelect}\n onClick={toggleOther}\n />\n )}\n </div>\n {allowOther && otherSelected && (\n <textarea\n autoFocus\n value={otherText}\n onChange={(event) => setOtherText(event.target.value)}\n placeholder={question.placeholder ?? \"Type a custom answer...\"}\n className=\"min-h-[72px] w-full resize-none rounded-md border border-border bg-muted/45 px-3 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground/70 focus:border-primary\"\n />\n )}\n </div>\n );\n}\n\nfunction OptionButton({\n option,\n selected,\n multiSelect,\n onClick,\n}: {\n option: GuidedQuestionOption;\n selected: boolean;\n multiSelect?: boolean;\n onClick: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"group flex min-h-[56px] cursor-pointer items-start gap-2 rounded-md border px-3 py-2 text-left transition-colors\",\n selected\n ? \"border-primary bg-primary/10 text-primary\"\n : \"border-border bg-muted/30 text-muted-foreground hover:border-muted-foreground/50 hover:bg-muted/45 hover:text-foreground\",\n )}\n >\n {multiSelect && (\n <span\n className={cn(\n \"mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded border\",\n selected ? \"border-primary bg-primary text-primary-foreground\" : \"\",\n )}\n >\n {selected && <IconCheck className=\"h-3 w-3\" />}\n </span>\n )}\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-1.5 text-sm font-medium leading-5\">\n {option.label}\n {option.recommended && (\n <span className=\"rounded-sm bg-primary/15 px-1.5 py-0.5 text-[10px] font-medium uppercase text-primary\">\n Recommended\n </span>\n )}\n </span>\n {option.description && (\n <span className=\"mt-0.5 block text-xs leading-4 text-muted-foreground\">\n {option.description}\n </span>\n )}\n </span>\n </button>\n );\n}\n\nfunction ColorOptions({\n question,\n value,\n onChange,\n}: {\n question: GuidedQuestion;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const options = question.options ?? question.choices ?? [];\n const multiSelect = question.multiSelect === true;\n const selectedValues = Array.isArray(value) ? value : [];\n const isSelected = (optionValue: string) =>\n multiSelect ? selectedValues.includes(optionValue) : value === optionValue;\n\n const toggleOption = (optionValue: string) => {\n if (!multiSelect) {\n onChange(optionValue);\n return;\n }\n onChange(\n selectedValues.includes(optionValue)\n ? selectedValues.filter((item) => item !== optionValue)\n : [...selectedValues, optionValue],\n );\n };\n\n return (\n <div className=\"flex flex-wrap gap-3\">\n {options.map((option) => {\n const selected = isSelected(option.value);\n return (\n <button\n type=\"button\"\n key={`${option.value}:${option.label}`}\n onClick={() => toggleOption(option.value)}\n className=\"group flex cursor-pointer flex-col items-center gap-1.5\"\n >\n <span\n className={cn(\n \"h-10 w-10 rounded-full\",\n selected\n ? \"ring-2 ring-primary ring-offset-2 ring-offset-background\"\n : \"ring-1 ring-border group-hover:ring-muted-foreground/50\",\n )}\n style={{ backgroundColor: option.color || option.value }}\n />\n <span\n className={cn(\n \"max-w-20 truncate text-[10px]\",\n selected ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n >\n {option.label}\n </span>\n </button>\n );\n })}\n </div>\n );\n}\n\nfunction SliderQuestion({\n question,\n value,\n onChange,\n}: {\n question: GuidedQuestion;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const min = question.min ?? 0;\n const max = question.max ?? 100;\n const step = question.step ?? 1;\n const current =\n typeof value === \"number\" ? value : Math.round((min + max) / 2);\n\n return (\n <div className=\"flex items-center gap-4\">\n <span className=\"w-8 text-xs text-muted-foreground\">{min}</span>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={current}\n onChange={(event) => onChange(Number(event.target.value))}\n className=\"h-2 flex-1 cursor-pointer accent-primary\"\n />\n <span className=\"w-8 text-right text-xs text-muted-foreground\">\n {max}\n </span>\n <span className=\"min-w-10 text-right text-sm font-medium tabular-nums text-foreground\">\n {current}\n </span>\n </div>\n );\n}\n\nfunction FileDropZone({\n value,\n onChange,\n}: {\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const [dragOver, setDragOver] = useState(false);\n const files: File[] = Array.isArray(value) ? (value as File[]) : [];\n\n const addFiles = (incoming: File[]) => onChange([...files, ...incoming]);\n const removeFile = (index: number) =>\n onChange(files.filter((_, fileIndex) => fileIndex !== index));\n\n return (\n <div>\n <div\n onDragOver={(event) => {\n event.preventDefault();\n setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n onDrop={(event) => {\n event.preventDefault();\n setDragOver(false);\n addFiles(Array.from(event.dataTransfer.files));\n }}\n className={cn(\n \"flex cursor-pointer flex-col items-center justify-center rounded-md border-2 border-dashed p-5 transition-colors\",\n dragOver\n ? \"border-primary bg-primary/5\"\n : \"border-border bg-muted/30 hover:border-muted-foreground/50\",\n )}\n >\n <IconUpload className=\"mb-2 h-5 w-5 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Drag files here or{\" \"}\n <label className=\"cursor-pointer text-primary hover:underline\">\n browse\n <input\n type=\"file\"\n multiple\n onChange={(event) => {\n if (event.target.files)\n addFiles(Array.from(event.target.files));\n event.currentTarget.value = \"\";\n }}\n className=\"hidden\"\n />\n </label>\n </p>\n </div>\n\n {files.length > 0 && (\n <div className=\"mt-2 space-y-1\">\n {files.map((file, index) => (\n <div\n key={`${file.name}:${index}`}\n className=\"flex items-center gap-2 rounded-md bg-muted/50 px-2 py-1 text-xs text-muted-foreground\"\n >\n <IconCheck className=\"h-3 w-3 text-primary\" />\n <span className=\"min-w-0 flex-1 truncate\">{file.name}</span>\n <button\n type=\"button\"\n onClick={() => removeFile(index)}\n className=\"cursor-pointer text-muted-foreground/70 hover:text-foreground\"\n aria-label={`Remove ${file.name}`}\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nconst SAFE_BROWSER_TAB_ID_RE = /^[A-Za-z0-9_-]{1,96}$/;\n\nfunction normalizeBrowserTabId(browserTabId?: string): string | undefined {\n if (typeof browserTabId !== \"string\") return undefined;\n const trimmed = browserTabId.trim();\n return SAFE_BROWSER_TAB_ID_RE.test(trimmed) ? trimmed : undefined;\n}\n\nexport interface UseGuidedQuestionFlowOptions {\n stateKey?: string;\n /**\n * The current browser tab id. Agent actions that write the guided-questions\n * payload scope the application-state key per tab (`<key>:<tabId>`), so the\n * client must read the scoped key first and fall back to the bare key. Without\n * this, the question card never renders when the agent run carries a tab id\n * (which it almost always does — see `sessionBrowserTabId`).\n */\n browserTabId?: string;\n queryKey?: readonly unknown[];\n refetchInterval?: number | false;\n submitMessage?: string;\n skipMessage?: string;\n buildSubmitContext?: (args: {\n answers: GuidedQuestionAnswers;\n formattedAnswers: string;\n }) => string;\n buildSkipContext?: () => string;\n}\n\nexport function useGuidedQuestionFlow({\n stateKey = \"show-questions\",\n browserTabId,\n queryKey = [\"show-questions\"],\n refetchInterval = 2_000,\n submitMessage = \"Here are my answers — go ahead.\",\n skipMessage = \"Skip the questions — decide for me.\",\n buildSubmitContext,\n buildSkipContext,\n}: UseGuidedQuestionFlowOptions = {}) {\n const queryClient = useQueryClient();\n const [payload, setPayload] = useState<GuidedQuestionPayload | null>(null);\n const normalizedBrowserTabId = useMemo(\n () => normalizeBrowserTabId(browserTabId),\n [browserTabId],\n );\n const endpointFor = useCallback(\n (key: string) => agentNativePath(`/_agent-native/application-state/${key}`),\n [],\n );\n const scopedKey = normalizedBrowserTabId\n ? `${stateKey}:${normalizedBrowserTabId}`\n : stateKey;\n // Match the queryKey to the scope so two tabs polling different scoped keys\n // don't share a cache entry.\n const resolvedQueryKey = useMemo(\n () => [...queryKey, normalizedBrowserTabId ?? \"global\"],\n [queryKey, normalizedBrowserTabId],\n );\n\n const { data } = useQuery({\n queryKey: resolvedQueryKey,\n queryFn: async () => {\n const read = async (key: string) => {\n const res = await fetch(endpointFor(key));\n if (!res.ok) return null;\n const text = await res.text();\n if (!text) return null;\n try {\n const parsed = JSON.parse(text);\n if (Array.isArray(parsed?.questions) && parsed.questions.length > 0) {\n return { ...parsed, _ts: Date.now() } as GuidedQuestionPayload & {\n _ts: number;\n };\n }\n } catch {\n return null;\n }\n return null;\n };\n // Agent writes are tab-scoped; read the scoped key first, then fall back\n // to the bare key (e.g. a deterministic write that omits the tab id).\n return (\n (normalizedBrowserTabId ? await read(scopedKey) : null) ??\n (await read(stateKey))\n );\n },\n refetchInterval,\n structuralSharing: false,\n });\n\n useEffect(() => {\n if (Array.isArray(data?.questions) && data.questions.length > 0) {\n setPayload(data);\n } else {\n setPayload(null);\n }\n }, [data]);\n\n const clear = useCallback(() => {\n setPayload(null);\n queryClient.setQueryData(resolvedQueryKey, null);\n const del = (key: string) =>\n fetch(endpointFor(key), {\n method: \"DELETE\",\n headers: { \"X-Agent-Native-CSRF\": \"1\" },\n }).catch(() => {});\n // Clear whichever key actually held the payload (scoped or bare) so the\n // card doesn't reappear on the next poll.\n del(scopedKey);\n if (scopedKey !== stateKey) del(stateKey);\n }, [endpointFor, queryClient, resolvedQueryKey, scopedKey, stateKey]);\n\n const handleSubmit = useCallback(\n (answers: GuidedQuestionAnswers) => {\n const formattedAnswers = formatGuidedAnswersForAgent(answers);\n const context =\n buildSubmitContext?.({ answers, formattedAnswers }) ??\n [\n \"The user answered the pre-generation questions.\",\n \"\",\n \"Answers:\",\n formattedAnswers,\n ].join(\"\\n\");\n sendToAgentChat({ message: submitMessage, context, submit: true });\n clear();\n },\n [buildSubmitContext, clear, submitMessage],\n );\n\n const handleSkip = useCallback(() => {\n sendToAgentChat({\n message: skipMessage,\n context: buildSkipContext?.(),\n submit: true,\n });\n clear();\n }, [buildSkipContext, clear, skipMessage]);\n\n return {\n payload,\n questions: payload?.questions ?? null,\n title: payload?.title,\n description: payload?.description,\n skipLabel: payload?.skipLabel,\n submitLabel: payload?.submitLabel,\n clear,\n handleSubmit,\n handleSkip,\n };\n}\n"]}
1
+ {"version":3,"file":"guided-questions.js","sourceRoot":"","sources":["../../src/client/guided-questions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,KAAK,GACN,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAyDhC,MAAM,mBAAmB,GAAG,YAAY,CAAC;AACzC,MAAM,cAAc,GAAyB;IAC3C,KAAK,EAAE,uBAAuB;IAC9B,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,sDAAsD;CACpE,CAAC;AACF,MAAM,aAAa,GAAyB;IAC1C,KAAK,EAAE,eAAe;IACtB,KAAK,EAAE,YAAY;IACnB,WAAW,EAAE,oCAAoC;CAClD,CAAC;AAEF,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,mBAAmB,CAAC,KAAK,CAAC;QAC/B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC;QACzC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAI,GAAG,EAAE;IAC7C,OAAO,GAAG,mBAAmB,GAAG,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC7D,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IACzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAA8B;IAE9B,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC3C,EAAE;QACF,uBAAuB,CAAC,KAAK,CAAC;KAC/B,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAA8B;IAE9B,OAAO,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;SACnD,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;QACnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,GAAG,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9D,OAAO,GAAG,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACnC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAiCD,MAAM,0BAA0B,GAAG,kBAAkB,CAAC;AAWtD,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAA+B,CAAC;AACvE,IAAI,kBAAkB,GAAG,CAAC,CAAC;AAE3B,SAAS,mBAAmB;IAC1B,kBAAkB,IAAI,CAAC,CAAC;IACxB,MAAM,IAAI,GACR,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;QACtE,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE;QACrB,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,OAAO,QAAQ,kBAAkB,IAAI,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED;8EAC8E;AAC9E,SAAS,qBAAqB,CAC5B,EAAU,EACV,MAA6B;IAE7B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;6DAC6D;AAC7D,SAAS,mBAAmB,CAC1B,OAA8B,EAC9B,UAAkB;IAElB,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CACxE;aACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IACD,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAA2B;IAE3B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,MAAM,GACV,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;QACrD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;QACrB,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;IACnD,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC;IAEpD,MAAM,OAAO,GAA2B,CACtC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAClD;SACE,GAAG,CAAC,CAAC,GAAG,EAA+B,EAAE;QACxC,MAAM,KAAK,GACT,OAAO,GAAG,EAAE,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;YAChD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;YAClB,CAAC,CAAC,OAAO,GAAG,EAAE,KAAK,KAAK,QAAQ;gBAC9B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;gBAC1B,CAAC,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,KAAK,GACT,OAAO,GAAG,EAAE,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;YAChD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;YAClB,CAAC,CAAC,KAAK,CAAC;QACZ,MAAM,MAAM,GAAyB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACtD,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YAClE,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1D,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC/B,CAAC;QACD,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI;YAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;QACxD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,GAAG,EAA+B,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;IAE9D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CACjB,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,OAAO,GAA0B;QACrC,eAAe,EAAE,SAAS;QAC1B,SAAS,EAAE;YACT;gBACE,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,cAAc;gBACpB,QAAQ;gBACR,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,QAAQ,EAAE,CAAC,aAAa;gBACxB,WAAW,EAAE,aAAa;gBAC1B,UAAU,EAAE,aAAa;gBACzB,cAAc,EAAE,KAAK;gBACrB,aAAa,EAAE,KAAK;gBACpB,OAAO;aACR;SACF;KACF,CAAC;IAEF,MAAM,aAAa,GAAG,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,EAAE;QACnE,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;QAC1E,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,iBAAiB,CACrB,KAAK,CAAC,QAAQ,IAAI,0BAA0B,EAC5C,OAAO,CACR,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uBAAuB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,SAAS,CAAC,MAA4B;IAC7C,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAwB;IAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACxD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,CAAC,MAA4B,EAAE,OAAgB,EAAE,EAAE;QACnE,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAC3B,CAAC,QAAQ,EAAE,EAAE,CACX,SAAS,CAAC,QAAQ,CAAC,KAAK,GAAG;YAC3B,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK;YACtC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CACzC,CAAC;QACF,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC;IAC7D,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC;AAChB,CAAC;AAaD,MAAM,UAAU,kBAAkB,CAAC,EACjC,SAAS,EACT,QAAQ,EACR,MAAM,EACN,KAAK,GAAG,iCAAiC,EACzC,WAAW,GAAG,wFAAwF,EACtG,SAAS,GAAG,MAAM,EAClB,WAAW,GAAG,UAAU,EACxB,SAAS,GACe;IACxB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAwB,EAAE,CAAC,CAAC;IAElE,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,KAAc,EAAE,EAAE;QAC3D,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,SAAS;SAClC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACvC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9D,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,8EAA8E,EAC9E,SAAS,CACV,YAED,eAAK,SAAS,EAAC,sEAAsE,aACnF,eAAK,SAAS,EAAC,6BAA6B,aAC1C,cAAK,SAAS,EAAC,mHAAmH,YAChI,KAAC,cAAc,IAAC,SAAS,EAAC,SAAS,GAAG,GAClC,EACN,eAAK,SAAS,EAAC,SAAS,aACtB,aAAI,SAAS,EAAC,mEAAmE,YAC9E,KAAK,GACH,EACJ,WAAW,IAAI,CACd,YAAG,SAAS,EAAC,wDAAwD,YAClE,WAAW,GACV,CACL,IACG,IACF,EAEN,cAAK,SAAS,EAAC,+CAA+C,YAC3D,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAClC,KAAC,YAAY,IAEX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,IAJ7C,QAAQ,CAAC,EAAE,CAKhB,CACH,CAAC,GACE,EAEN,eAAK,SAAS,EAAC,mFAAmF,aAChG,cAAK,SAAS,EAAC,2BAA2B,YACvC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAClC,eAEE,SAAS,EAAE,EAAE,CACX,0BAA0B,EAC1B,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oCACnC,CAAC,CAAC,YAAY;oCACd,CAAC,CAAC,wBAAwB,CAC7B,IANI,QAAQ,CAAC,EAAE,IAAI,KAAK,CAOzB,CACH,CAAC,GACE,EACN,eAAK,SAAS,EAAC,yBAAyB,aACtC,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAC,6HAA6H,YAEtI,SAAS,GACH,EACT,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,EACxD,QAAQ,EAAE,CAAC,mBAAmB,EAC9B,SAAS,EAAC,mNAAmN,aAE5N,WAAW,EACZ,KAAC,gBAAgB,IAAC,SAAS,EAAC,SAAS,GAAG,IACjC,IACL,IACF,IACF,GACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,GAMT;IACC,OAAO,CACL,mBAAS,SAAS,EAAC,0DAA0D,aAC3E,eAAK,SAAS,EAAC,iBAAiB,aAC9B,cAAK,SAAS,EAAC,4GAA4G,YACxH,KAAK,GAAG,CAAC,GACN,EACN,eAAK,SAAS,EAAC,SAAS,aACrB,QAAQ,CAAC,MAAM,IAAI,CAClB,YAAG,SAAS,EAAC,8DAA8D,YACxE,QAAQ,CAAC,MAAM,GACd,CACL,EACD,cAAI,SAAS,EAAC,+CAA+C,aAC1D,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,QAAQ,IAAI,CACpB,eAAM,SAAS,EAAC,uBAAuB,kBAAS,CACjD,IACE,EACJ,QAAQ,CAAC,WAAW,IAAI,CACvB,YAAG,SAAS,EAAC,8CAA8C,YACxD,QAAQ,CAAC,WAAW,GACnB,CACL,IACG,IACF,EAEL,QAAQ,CAAC,IAAI,KAAK,cAAc,IAAI,CACnC,KAAC,WAAW,IAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAI,CACtE,EACA,QAAQ,CAAC,IAAI,KAAK,eAAe,IAAI,CACpC,KAAC,YAAY,IAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAI,CACvE,EACA,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,CAC7B,KAAC,cAAc,IAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAI,CACzE,EACA,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,CAC3B,KAAC,YAAY,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAI,CACnD,EACA,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,CAC/B,mBACE,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAC7C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACjD,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,qBAAqB,EAC1D,SAAS,EAAC,sLAAsL,GAChM,CACH,IACO,CACX,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,QAAQ,EACR,KAAK,EACL,QAAQ,GAKT;IACC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,KAAK,IAAI,CAAC;IAClD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,aAAa,GAAG,WAAW;QAC/B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAC1C,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,WAAW;QAC3B,CAAC,CAAC,wBAAwB,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACpE,CAAC,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,CAAC,WAAmB,EAAE,EAAE,CACzC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC;IAE7E,MAAM,YAAY,GAAG,CAAC,WAAmB,EAAE,EAAE;QAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,QAAQ,CAAC,WAAW,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC/C,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,WAAW,CAAC;YACvD,CAAC,CAAC,CAAC,GAAG,cAAc,EAAE,WAAW,CAAC,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,CAAC,GAAG,cAAc,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;QACpC,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QACD,QAAQ,CAAC;YACP,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC9D,SAAS;SACV,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,KAAK,KAAK,CAAC;IAEjD,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,eAAK,SAAS,EAAC,2BAA2B,aACvC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,YAAY,IAEX,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAClC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,IAJpC,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAKtC,CACH,CAAC,EACD,UAAU,IAAI,CACb,KAAC,YAAY,IACX,MAAM,EAAE;4BACN,KAAK,EAAE,UAAU;4BACjB,KAAK,EAAE,WAAW;4BAClB,WAAW,EAAE,uCAAuC;yBACrD,EACD,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,WAAW,GACpB,CACH,IACG,EACL,UAAU,IAAI,aAAa,IAAI,CAC9B,mBACE,SAAS,QACT,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACrD,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,yBAAyB,EAC9D,SAAS,EAAC,sLAAsL,GAChM,CACH,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,MAAM,EACN,QAAQ,EACR,WAAW,EACX,OAAO,GAMR;IACC,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,EAAE,CACX,kHAAkH,EAClH,QAAQ;YACN,CAAC,CAAC,2CAA2C;YAC7C,CAAC,CAAC,0HAA0H,CAC/H,aAEA,WAAW,IAAI,CACd,eACE,SAAS,EAAE,EAAE,CACX,yEAAyE,EACzE,QAAQ,CAAC,CAAC,CAAC,mDAAmD,CAAC,CAAC,CAAC,EAAE,CACpE,YAEA,QAAQ,IAAI,KAAC,SAAS,IAAC,SAAS,EAAC,SAAS,GAAG,GACzC,CACR,EACD,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,gBAAM,SAAS,EAAC,mEAAmE,aAChF,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,WAAW,IAAI,CACrB,eAAM,SAAS,EAAC,uFAAuF,4BAEhG,CACR,IACI,EACN,MAAM,CAAC,WAAW,IAAI,CACrB,eAAM,SAAS,EAAC,sDAAsD,YACnE,MAAM,CAAC,WAAW,GACd,CACR,EACA,MAAM,CAAC,OAAO,IAAI,CACjB,eAAM,SAAS,EAAC,4KAA4K,YACzL,MAAM,CAAC,OAAO,GACV,CACR,IACI,IACA,CACV,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,QAAQ,EACR,KAAK,EACL,QAAQ,GAKT;IACC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3D,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,KAAK,IAAI,CAAC;IAClD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,MAAM,UAAU,GAAG,CAAC,WAAmB,EAAE,EAAE,CACzC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC;IAE7E,MAAM,YAAY,GAAG,CAAC,WAAmB,EAAE,EAAE;QAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,QAAQ,CAAC,WAAW,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QACD,QAAQ,CACN,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC;YAClC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,WAAW,CAAC;YACvD,CAAC,CAAC,CAAC,GAAG,cAAc,EAAE,WAAW,CAAC,CACrC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAC,sBAAsB,YAClC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACtB,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1C,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EAEb,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,SAAS,EAAC,yDAAyD,aAEnE,eACE,SAAS,EAAE,EAAE,CACX,wBAAwB,EACxB,QAAQ;4BACN,CAAC,CAAC,0DAA0D;4BAC5D,CAAC,CAAC,yDAAyD,CAC9D,EACD,KAAK,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,GACxD,EACF,eACE,SAAS,EAAE,EAAE,CACX,+BAA+B,EAC/B,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,uBAAuB,CACvD,YAEA,MAAM,CAAC,KAAK,GACR,KApBF,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAqB/B,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,QAAQ,EACR,KAAK,EACL,QAAQ,GAKT;IACC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC;IAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GACX,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAElE,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,mCAAmC,YAAE,GAAG,GAAQ,EAChE,gBACE,IAAI,EAAC,OAAO,EACZ,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACzD,SAAS,EAAC,0CAA0C,GACpD,EACF,eAAM,SAAS,EAAC,8CAA8C,YAC3D,GAAG,GACC,EACP,eAAM,SAAS,EAAC,sEAAsE,YACnF,OAAO,GACH,IACH,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,QAAQ,GAIT;IACC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,KAAK,GAAW,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CACnC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC;IAEhE,OAAO,CACL,0BACE,eACE,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;oBACpB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,WAAW,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC,EACD,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EACrC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,WAAW,CAAC,KAAK,CAAC,CAAC;oBACnB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjD,CAAC,EACD,SAAS,EAAE,EAAE,CACX,kHAAkH,EAClH,QAAQ;oBACN,CAAC,CAAC,6BAA6B;oBAC/B,CAAC,CAAC,4DAA4D,CACjE,aAED,KAAC,UAAU,IAAC,SAAS,EAAC,oCAAoC,GAAG,EAC7D,aAAG,SAAS,EAAC,+BAA+B,mCACvB,GAAG,EACtB,iBAAO,SAAS,EAAC,6CAA6C,uBAE5D,gBACE,IAAI,EAAC,MAAM,EACX,QAAQ,QACR,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4CAClB,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK;gDACpB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;4CAC3C,KAAK,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;wCACjC,CAAC,EACD,SAAS,EAAC,QAAQ,GAClB,IACI,IACN,IACA,EAEL,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACnB,cAAK,SAAS,EAAC,gBAAgB,YAC5B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1B,eAEE,SAAS,EAAC,wFAAwF,aAElG,KAAC,SAAS,IAAC,SAAS,EAAC,sBAAsB,GAAG,EAC9C,eAAM,SAAS,EAAC,yBAAyB,YAAE,IAAI,CAAC,IAAI,GAAQ,EAC5D,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAChC,SAAS,EAAC,+DAA+D,gBAC7D,UAAU,IAAI,CAAC,IAAI,EAAE,YAEjC,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,GACtB,KAZJ,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE,CAaxB,CACP,CAAC,GACE,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAEvD,SAAS,qBAAqB,CAAC,YAAqB;IAClD,IAAI,OAAO,YAAY,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACvD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IACpC,OAAO,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAuBD,MAAM,UAAU,qBAAqB,CAAC,EACpC,QAAQ,GAAG,gBAAgB,EAC3B,YAAY,EACZ,QAAQ,GAAG,CAAC,gBAAgB,CAAC,EAC7B,eAAe,GAAG,KAAK,EACvB,aAAa,GAAG,iCAAiC,EACjD,WAAW,GAAG,qCAAqC,EACnD,kBAAkB,EAClB,gBAAgB,MACgB,EAAE;IAClC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAA+B,IAAI,CAAC,CAAC;IAC3E,MAAM,sBAAsB,GAAG,OAAO,CACpC,GAAG,EAAE,CAAC,qBAAqB,CAAC,YAAY,CAAC,EACzC,CAAC,YAAY,CAAC,CACf,CAAC;IACF,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,GAAW,EAAE,EAAE,CAAC,eAAe,CAAC,oCAAoC,GAAG,EAAE,CAAC,EAC3E,EAAE,CACH,CAAC;IACF,MAAM,SAAS,GAAG,sBAAsB;QACtC,CAAC,CAAC,GAAG,QAAQ,IAAI,sBAAsB,EAAE;QACzC,CAAC,CAAC,QAAQ,CAAC;IACb,4EAA4E;IAC5E,6BAA6B;IAC7B,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,sBAAsB,IAAI,QAAQ,CAAC,EACvD,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CACnC,CAAC;IAEF,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,QAAQ,EAAE,gBAAgB;QAC1B,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;gBACjC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1C,IAAI,CAAC,GAAG,CAAC,EAAE;oBAAE,OAAO,IAAI,CAAC;gBACzB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAChC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACpE,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAElC,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YACF,yEAAyE;YACzE,sEAAsE;YACtE,OAAO,CACL,CAAC,sBAAsB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvD,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CACvB,CAAC;QACJ,CAAC;QACD,eAAe;QACf,iBAAiB,EAAE,KAAK;KACzB,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,WAAW,CAAC,YAAY,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAC1B,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YACtB,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE,qBAAqB,EAAE,GAAG,EAAE;SACxC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrB,wEAAwE;QACxE,0CAA0C;QAC1C,GAAG,CAAC,SAAS,CAAC,CAAC;QACf,IAAI,SAAS,KAAK,QAAQ;YAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtE,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,OAA8B,EAAE,EAAE;QACjC,oEAAoE;QACpE,sEAAsE;QACtE,MAAM,SAAS,GAAG,OAAO,EAAE,eAAe,CAAC;QAC3C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;YACpD,qBAAqB,CAAC,SAAS,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACxE,KAAK,EAAE,CAAC;YACR,OAAO;QACT,CAAC;QACD,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,OAAO,GACX,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;YACnD;gBACE,iDAAiD;gBACjD,EAAE;gBACF,UAAU;gBACV,gBAAgB;aACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,eAAe,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,KAAK,EAAE,CAAC;IACV,CAAC,EACD,CAAC,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,CACpD,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,MAAM,SAAS,GAAG,OAAO,EAAE,eAAe,CAAC;QAC3C,IAAI,SAAS,EAAE,CAAC;YACd,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACvC,KAAK,EAAE,CAAC;YACR,OAAO;QACT,CAAC;QACD,eAAe,CAAC;YACd,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,gBAAgB,EAAE,EAAE;YAC7B,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QACH,KAAK,EAAE,CAAC;IACV,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAEpD,OAAO;QACL,OAAO;QACP,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;QACrC,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,KAAK;QACL,YAAY;QACZ,UAAU;KACX,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport {\n IconCheck,\n IconChevronRight,\n IconHelpCircle,\n IconUpload,\n IconX,\n} from \"@tabler/icons-react\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { sendToAgentChat } from \"./agent-chat.js\";\nimport { setClientAppState } from \"./application-state.js\";\nimport { cn } from \"./utils.js\";\n\nexport type GuidedQuestionType =\n | \"text-options\"\n | \"color-options\"\n | \"slider\"\n | \"file\"\n | \"freeform\";\n\nexport interface GuidedQuestionOption {\n label: string;\n value: string;\n color?: string;\n icon?: string;\n description?: string;\n recommended?: boolean;\n /** Optional preview content (mockup, code snippet, or short comparison)\n * shown beneath the option to help the user compare choices. Mirrors the\n * `preview` field of Claude Code's AskUserQuestion options. */\n preview?: string;\n}\n\nexport interface GuidedQuestion {\n id: string;\n type: GuidedQuestionType;\n header?: string;\n question: string;\n description?: string;\n options?: GuidedQuestionOption[];\n choices?: GuidedQuestionOption[];\n multiSelect?: boolean;\n min?: number;\n max?: number;\n step?: number;\n required?: boolean;\n placeholder?: string;\n allowOther?: boolean;\n includeExplore?: boolean;\n includeDecide?: boolean;\n}\n\nexport type GuidedQuestionAnswers = Record<string, unknown>;\n\nexport interface GuidedQuestionPayload {\n questions: GuidedQuestion[];\n title?: string;\n description?: string;\n skipLabel?: string;\n submitLabel?: string;\n /**\n * @internal Set by {@link askUserQuestion} for client-initiated questions.\n * When present, `useGuidedQuestionFlow` resolves the matching in-memory\n * promise with the answer instead of forwarding it to the agent chat.\n */\n clientResolveId?: string;\n}\n\nconst OTHER_OPTION_PREFIX = \"__other__:\";\nconst EXPLORE_OPTION: GuidedQuestionOption = {\n label: \"Explore a few options\",\n value: \"__explore__\",\n description: \"Show me a few distinct directions before committing.\",\n};\nconst DECIDE_OPTION: GuidedQuestionOption = {\n label: \"Decide for me\",\n value: \"__decide__\",\n description: \"Use your judgment and keep moving.\",\n};\n\nfunction isFileLike(value: unknown): value is { name: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"name\" in value &&\n typeof (value as { name?: unknown }).name === \"string\"\n );\n}\n\nexport function isOtherGuidedAnswer(value: unknown): value is string {\n return typeof value === \"string\" && value.startsWith(OTHER_OPTION_PREFIX);\n}\n\nexport function getOtherGuidedAnswerText(value: unknown): string {\n return isOtherGuidedAnswer(value)\n ? value.slice(OTHER_OPTION_PREFIX.length)\n : \"\";\n}\n\nexport function makeOtherGuidedAnswer(text = \"\"): string {\n return `${OTHER_OPTION_PREFIX}${text}`;\n}\n\nexport function hasGuidedAnswer(value: unknown): boolean {\n if (value == null || value === \"\") return false;\n if (Array.isArray(value)) return value.some(hasGuidedAnswer);\n if (isOtherGuidedAnswer(value)) {\n return getOtherGuidedAnswerText(value).trim().length > 0;\n }\n return true;\n}\n\nexport function formatGuidedAnswerValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(formatGuidedAnswerValue).filter(hasGuidedAnswer);\n }\n if (isOtherGuidedAnswer(value)) {\n const text = getOtherGuidedAnswerText(value).trim();\n return text ? `Other: ${text}` : \"\";\n }\n if (isFileLike(value)) return value.name;\n return value;\n}\n\nexport function normalizeGuidedAnswers(\n answers: GuidedQuestionAnswers,\n): GuidedQuestionAnswers {\n return Object.fromEntries(\n Object.entries(answers).map(([id, value]) => [\n id,\n formatGuidedAnswerValue(value),\n ]),\n );\n}\n\nexport function formatGuidedAnswersForAgent(\n answers: GuidedQuestionAnswers,\n): string {\n return Object.entries(normalizeGuidedAnswers(answers))\n .filter(([, value]) => hasGuidedAnswer(value))\n .map(([id, value]) => {\n if (Array.isArray(value)) return `${id}: ${value.join(\", \")}`;\n return `${id}: ${String(value)}`;\n })\n .join(\"\\n\");\n}\n\n/** A single option for {@link askUserQuestion}. Mirrors the agent `ask-question`\n * tool and Claude Code's AskUserQuestion option shape. */\nexport interface AskUserQuestionOption {\n /** Display text the user picks (1-5 words). */\n label: string;\n /** Value reported back. Defaults to `label` when omitted. */\n value?: string;\n /** Short explanation of the trade-off. */\n description?: string;\n /** Optional preview (mockup, code snippet, short comparison) shown under the option. */\n preview?: string;\n /** Mark the most likely option so the UI highlights it. */\n recommended?: boolean;\n}\n\n/** Input for {@link askUserQuestion}. */\nexport interface AskUserQuestionInput {\n /** The complete question. Clear, specific, ends with a question mark. */\n question: string;\n /** Optional very short chip/heading (≈12 chars), e.g. \"Date range\". */\n header?: string;\n /** 2-4 distinct options (mutually exclusive unless `allowMultiple`). */\n options: AskUserQuestionOption[];\n /** Allow a free-text \"Other\" answer. Default `true`. */\n allowFreeText?: boolean;\n /** Allow selecting more than one option (multi-select). Default `false`. */\n allowMultiple?: boolean;\n /** Application-state key the agent panel polls. Default `\"guided-questions\"`. */\n stateKey?: string;\n}\n\nconst GUIDED_QUESTIONS_STATE_KEY = \"guided-questions\";\n\n/** The user's answer to an {@link askUserQuestion}: the selected option\n * value(s), the free-text \"Other\" string, or `null` if the user skipped. */\nexport type AskUserQuestionResult = string | string[] | null;\n\n// In-memory resolver registry shared between `askUserQuestion` (which registers\n// a resolver and writes the question to application state) and\n// `useGuidedQuestionFlow` (which renders the question and, on submit/skip,\n// resolves the matching promise). Same module → the map is shared.\ntype AskQuestionResolver = (answer: AskUserQuestionResult) => void;\nconst clientQuestionResolvers = new Map<string, AskQuestionResolver>();\nlet askQuestionCounter = 0;\n\nfunction nextClientResolveId(): string {\n askQuestionCounter += 1;\n const rand =\n typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\n ? crypto.randomUUID()\n : `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n return `askq-${askQuestionCounter}-${rand}`;\n}\n\n/** Resolve a pending client-initiated question by id. Returns false when no\n * resolver is registered (e.g. an agent-initiated question, or a reload). */\nfunction resolveClientQuestion(\n id: string,\n answer: AskUserQuestionResult,\n): boolean {\n const resolver = clientQuestionResolvers.get(id);\n if (!resolver) return false;\n clientQuestionResolvers.delete(id);\n resolver(answer);\n return true;\n}\n\n/** Pull the answer for a single guided question out of the answers map,\n * normalizing \"Other\" free-text and multi-select arrays. */\nfunction extractSingleAnswer(\n answers: GuidedQuestionAnswers,\n questionId: string,\n): AskUserQuestionResult {\n const raw = answers[questionId];\n if (!hasGuidedAnswer(raw)) return null;\n if (Array.isArray(raw)) {\n const values = raw\n .map((v) =>\n isOtherGuidedAnswer(v) ? getOtherGuidedAnswerText(v).trim() : String(v),\n )\n .filter((s) => s.length > 0);\n return values.length ? values : null;\n }\n if (isOtherGuidedAnswer(raw)) {\n const text = getOtherGuidedAnswerText(raw).trim();\n return text.length ? text : null;\n }\n return String(raw);\n}\n\n/**\n * Ask the user a multiple-choice question from app code and render it inline in\n * the agent panel — the client-side twin of the agent's `ask-question` tool.\n *\n * The question is written to application state (`\"guided-questions\"` by\n * default), where the mounted `GuidedQuestionFlow` (driven by\n * {@link useGuidedQuestionFlow}) renders it, and the agent panel is revealed so\n * it's visible. **Resolves with the user's answer** — the selected option\n * value (or `value[]` when `allowMultiple`), the free-text \"Other\" string, or\n * `null` if they skip — so the caller can branch on it (e.g. build the right\n * generate prompt before kicking off agent work):\n *\n * ```ts\n * const length = await askUserQuestion({\n * question: \"How long should this deck be?\",\n * header: \"Deck length\",\n * options: [{ label: \"Short\", recommended: true }, { label: \"Long\" }],\n * });\n * if (length) sendToAgentChat({ message: `Make a ${length} deck`, submit: true });\n * ```\n *\n * Requires the agent panel (the mounted `GuidedQuestionFlow`) to exist, which\n * it does in every template. The returned promise stays pending until the user\n * answers or skips.\n */\nexport async function askUserQuestion(\n input: AskUserQuestionInput,\n): Promise<AskUserQuestionResult> {\n const question = String(input?.question ?? \"\").trim();\n if (!question) {\n throw new TypeError(\"askUserQuestion: `question` is required.\");\n }\n const header =\n typeof input.header === \"string\" && input.header.trim()\n ? input.header.trim()\n : undefined;\n const allowMultiple = input.allowMultiple === true;\n const allowFreeText = input.allowFreeText !== false;\n\n const options: GuidedQuestionOption[] = (\n Array.isArray(input.options) ? input.options : []\n )\n .map((raw): GuidedQuestionOption | null => {\n const label =\n typeof raw?.label === \"string\" && raw.label.trim()\n ? raw.label.trim()\n : typeof raw?.value === \"string\"\n ? String(raw.value).trim()\n : \"\";\n if (!label) return null;\n const value =\n typeof raw?.value === \"string\" && raw.value.trim()\n ? raw.value.trim()\n : label;\n const option: GuidedQuestionOption = { label, value };\n if (typeof raw.description === \"string\" && raw.description.trim()) {\n option.description = raw.description.trim();\n }\n if (typeof raw.preview === \"string\" && raw.preview.trim()) {\n option.preview = raw.preview;\n }\n if (raw.recommended === true) option.recommended = true;\n return option;\n })\n .filter((opt): opt is GuidedQuestionOption => opt !== null);\n\n if (options.length === 0) {\n throw new TypeError(\n \"askUserQuestion: `options` must contain at least one option with a label.\",\n );\n }\n\n const resolveId = nextClientResolveId();\n const payload: GuidedQuestionPayload = {\n clientResolveId: resolveId,\n questions: [\n {\n id: \"q1\",\n type: \"text-options\",\n question,\n ...(header ? { header } : {}),\n required: !allowFreeText,\n multiSelect: allowMultiple,\n allowOther: allowFreeText,\n includeExplore: false,\n includeDecide: false,\n options,\n },\n ],\n };\n\n const answerPromise = new Promise<AskUserQuestionResult>((resolve) => {\n clientQuestionResolvers.set(resolveId, resolve);\n });\n\n // Reveal the agent panel so the inline question is visible even if collapsed.\n if (typeof window !== \"undefined\") {\n try {\n window.dispatchEvent(new CustomEvent(\"agent-panel:open\"));\n } catch {\n // best-effort — the question still renders if the panel is already open\n }\n }\n\n try {\n await setClientAppState(\n input.stateKey ?? GUIDED_QUESTIONS_STATE_KEY,\n payload,\n );\n } catch (err) {\n clientQuestionResolvers.delete(resolveId);\n throw err;\n }\n\n return answerPromise;\n}\n\nfunction optionKey(option: GuidedQuestionOption): string {\n return `${option.value.toLowerCase()}::${option.label.toLowerCase()}`;\n}\n\nfunction withDefaultOptions(question: GuidedQuestion): GuidedQuestionOption[] {\n const base = question.options ?? question.choices ?? [];\n const seen = new Set(base.map(optionKey));\n const result = [...base];\n const maybePush = (option: GuidedQuestionOption, enabled: boolean) => {\n if (!enabled) return;\n const key = optionKey(option);\n const label = option.label.toLowerCase();\n const value = option.value.toLowerCase();\n const duplicate = result.some(\n (existing) =>\n optionKey(existing) === key ||\n existing.label.toLowerCase() === label ||\n existing.value.toLowerCase() === value,\n );\n if (duplicate || seen.has(key)) return;\n seen.add(key);\n result.push(option);\n };\n maybePush(EXPLORE_OPTION, question.includeExplore !== false);\n maybePush(DECIDE_OPTION, question.includeDecide !== false);\n return result;\n}\n\nexport interface GuidedQuestionFlowProps {\n questions: GuidedQuestion[];\n onSubmit: (answers: GuidedQuestionAnswers) => void;\n onSkip: () => void;\n title?: string;\n description?: string;\n skipLabel?: string;\n submitLabel?: string;\n className?: string;\n}\n\nexport function GuidedQuestionFlow({\n questions,\n onSubmit,\n onSkip,\n title = \"A few choices before I generate\",\n description = \"Pick what you know. Use Other for anything that does not fit, or let the agent decide.\",\n skipLabel = \"Skip\",\n submitLabel = \"Continue\",\n className,\n}: GuidedQuestionFlowProps) {\n const [answers, setAnswers] = useState<GuidedQuestionAnswers>({});\n\n useEffect(() => {\n setAnswers({});\n }, [questions]);\n\n const setAnswer = useCallback((id: string, value: unknown) => {\n setAnswers((prev) => ({ ...prev, [id]: value }));\n }, []);\n\n const allRequiredAnswered = questions\n .filter((question) => question.required)\n .every((question) => hasGuidedAnswer(answers[question.id]));\n\n return (\n <div\n className={cn(\n \"flex h-full w-full items-center justify-center bg-background text-foreground\",\n className,\n )}\n >\n <div className=\"flex max-h-full w-full max-w-3xl flex-col px-4 py-6 sm:px-8 sm:py-10\">\n <div className=\"mb-6 flex items-start gap-3\">\n <div className=\"mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-md border border-border bg-muted/40 text-primary\">\n <IconHelpCircle className=\"h-5 w-5\" />\n </div>\n <div className=\"min-w-0\">\n <h2 className=\"text-xl font-semibold tracking-normal text-foreground sm:text-2xl\">\n {title}\n </h2>\n {description && (\n <p className=\"mt-1 max-w-2xl text-sm leading-5 text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"min-h-0 flex-1 space-y-4 overflow-y-auto pr-1\">\n {questions.map((question, index) => (\n <QuestionCard\n key={question.id}\n index={index}\n question={question}\n value={answers[question.id]}\n onChange={(value) => setAnswer(question.id, value)}\n />\n ))}\n </div>\n\n <div className=\"mt-5 flex shrink-0 items-center justify-between gap-4 border-t border-border pt-4\">\n <div className=\"flex items-center gap-1.5\">\n {questions.map((question, index) => (\n <span\n key={question.id || index}\n className={cn(\n \"h-1.5 w-1.5 rounded-full\",\n hasGuidedAnswer(answers[question.id])\n ? \"bg-primary\"\n : \"bg-muted-foreground/30\",\n )}\n />\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={onSkip}\n className=\"cursor-pointer rounded-md px-3 py-2 text-sm text-muted-foreground transition-colors hover:bg-muted/60 hover:text-foreground\"\n >\n {skipLabel}\n </button>\n <button\n type=\"button\"\n onClick={() => onSubmit(normalizeGuidedAnswers(answers))}\n disabled={!allRequiredAnswered}\n className=\"inline-flex cursor-pointer items-center gap-2 rounded-md bg-primary px-3.5 py-2 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90 disabled:cursor-not-allowed disabled:opacity-45\"\n >\n {submitLabel}\n <IconChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction QuestionCard({\n index,\n question,\n value,\n onChange,\n}: {\n index: number;\n question: GuidedQuestion;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n return (\n <section className=\"rounded-lg border border-border bg-card/65 p-4 shadow-sm\">\n <div className=\"mb-3 flex gap-3\">\n <div className=\"flex h-6 min-w-6 items-center justify-center rounded-md bg-muted text-xs font-medium text-muted-foreground\">\n {index + 1}\n </div>\n <div className=\"min-w-0\">\n {question.header && (\n <p className=\"mb-1 text-[11px] font-medium uppercase text-muted-foreground\">\n {question.header}\n </p>\n )}\n <h3 className=\"text-sm font-medium leading-5 text-foreground\">\n {question.question}\n {question.required && (\n <span className=\"ml-1 text-destructive\">*</span>\n )}\n </h3>\n {question.description && (\n <p className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n {question.description}\n </p>\n )}\n </div>\n </div>\n\n {question.type === \"text-options\" && (\n <TextOptions question={question} value={value} onChange={onChange} />\n )}\n {question.type === \"color-options\" && (\n <ColorOptions question={question} value={value} onChange={onChange} />\n )}\n {question.type === \"slider\" && (\n <SliderQuestion question={question} value={value} onChange={onChange} />\n )}\n {question.type === \"file\" && (\n <FileDropZone value={value} onChange={onChange} />\n )}\n {question.type === \"freeform\" && (\n <textarea\n value={typeof value === \"string\" ? value : \"\"}\n onChange={(event) => onChange(event.target.value)}\n placeholder={question.placeholder ?? \"Type your answer...\"}\n className=\"min-h-[84px] w-full resize-none rounded-md border border-border bg-muted/45 px-3 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground/70 focus:border-primary\"\n />\n )}\n </section>\n );\n}\n\nfunction TextOptions({\n question,\n value,\n onChange,\n}: {\n question: GuidedQuestion;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const options = useMemo(() => withDefaultOptions(question), [question]);\n const multiSelect = question.multiSelect === true;\n const selectedValues = Array.isArray(value) ? value : [];\n const otherSelected = multiSelect\n ? selectedValues.some(isOtherGuidedAnswer)\n : isOtherGuidedAnswer(value);\n const otherText = multiSelect\n ? getOtherGuidedAnswerText(selectedValues.find(isOtherGuidedAnswer))\n : getOtherGuidedAnswerText(value);\n\n const isSelected = (optionValue: string) =>\n multiSelect ? selectedValues.includes(optionValue) : value === optionValue;\n\n const toggleOption = (optionValue: string) => {\n if (!multiSelect) {\n onChange(optionValue);\n return;\n }\n const next = selectedValues.includes(optionValue)\n ? selectedValues.filter((item) => item !== optionValue)\n : [...selectedValues, optionValue];\n onChange(next);\n };\n\n const toggleOther = () => {\n if (!multiSelect) {\n onChange(otherSelected ? \"\" : makeOtherGuidedAnswer());\n return;\n }\n if (otherSelected) {\n onChange(selectedValues.filter((item) => !isOtherGuidedAnswer(item)));\n return;\n }\n onChange([...selectedValues, makeOtherGuidedAnswer()]);\n };\n\n const setOtherText = (text: string) => {\n const nextOther = makeOtherGuidedAnswer(text);\n if (!multiSelect) {\n onChange(nextOther);\n return;\n }\n onChange([\n ...selectedValues.filter((item) => !isOtherGuidedAnswer(item)),\n nextOther,\n ]);\n };\n\n const allowOther = question.allowOther !== false;\n\n return (\n <div className=\"space-y-3\">\n <div className=\"grid gap-2 sm:grid-cols-2\">\n {options.map((option) => (\n <OptionButton\n key={`${option.value}:${option.label}`}\n option={option}\n selected={isSelected(option.value)}\n multiSelect={multiSelect}\n onClick={() => toggleOption(option.value)}\n />\n ))}\n {allowOther && (\n <OptionButton\n option={{\n label: \"Other...\",\n value: \"__other__\",\n description: \"Tell the agent exactly what you mean.\",\n }}\n selected={otherSelected}\n multiSelect={multiSelect}\n onClick={toggleOther}\n />\n )}\n </div>\n {allowOther && otherSelected && (\n <textarea\n autoFocus\n value={otherText}\n onChange={(event) => setOtherText(event.target.value)}\n placeholder={question.placeholder ?? \"Type a custom answer...\"}\n className=\"min-h-[72px] w-full resize-none rounded-md border border-border bg-muted/45 px-3 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground/70 focus:border-primary\"\n />\n )}\n </div>\n );\n}\n\nfunction OptionButton({\n option,\n selected,\n multiSelect,\n onClick,\n}: {\n option: GuidedQuestionOption;\n selected: boolean;\n multiSelect?: boolean;\n onClick: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"group flex min-h-[56px] cursor-pointer items-start gap-2 rounded-md border px-3 py-2 text-left transition-colors\",\n selected\n ? \"border-primary bg-primary/10 text-primary\"\n : \"border-border bg-muted/30 text-muted-foreground hover:border-muted-foreground/50 hover:bg-muted/45 hover:text-foreground\",\n )}\n >\n {multiSelect && (\n <span\n className={cn(\n \"mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded border\",\n selected ? \"border-primary bg-primary text-primary-foreground\" : \"\",\n )}\n >\n {selected && <IconCheck className=\"h-3 w-3\" />}\n </span>\n )}\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-1.5 text-sm font-medium leading-5\">\n {option.label}\n {option.recommended && (\n <span className=\"rounded-sm bg-primary/15 px-1.5 py-0.5 text-[10px] font-medium uppercase text-primary\">\n Recommended\n </span>\n )}\n </span>\n {option.description && (\n <span className=\"mt-0.5 block text-xs leading-4 text-muted-foreground\">\n {option.description}\n </span>\n )}\n {option.preview && (\n <span className=\"mt-1.5 block max-h-40 overflow-auto whitespace-pre-wrap rounded border border-border/60 bg-background/60 px-2 py-1.5 font-mono text-[11px] leading-4 text-muted-foreground\">\n {option.preview}\n </span>\n )}\n </span>\n </button>\n );\n}\n\nfunction ColorOptions({\n question,\n value,\n onChange,\n}: {\n question: GuidedQuestion;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const options = question.options ?? question.choices ?? [];\n const multiSelect = question.multiSelect === true;\n const selectedValues = Array.isArray(value) ? value : [];\n const isSelected = (optionValue: string) =>\n multiSelect ? selectedValues.includes(optionValue) : value === optionValue;\n\n const toggleOption = (optionValue: string) => {\n if (!multiSelect) {\n onChange(optionValue);\n return;\n }\n onChange(\n selectedValues.includes(optionValue)\n ? selectedValues.filter((item) => item !== optionValue)\n : [...selectedValues, optionValue],\n );\n };\n\n return (\n <div className=\"flex flex-wrap gap-3\">\n {options.map((option) => {\n const selected = isSelected(option.value);\n return (\n <button\n type=\"button\"\n key={`${option.value}:${option.label}`}\n onClick={() => toggleOption(option.value)}\n className=\"group flex cursor-pointer flex-col items-center gap-1.5\"\n >\n <span\n className={cn(\n \"h-10 w-10 rounded-full\",\n selected\n ? \"ring-2 ring-primary ring-offset-2 ring-offset-background\"\n : \"ring-1 ring-border group-hover:ring-muted-foreground/50\",\n )}\n style={{ backgroundColor: option.color || option.value }}\n />\n <span\n className={cn(\n \"max-w-20 truncate text-[10px]\",\n selected ? \"text-foreground\" : \"text-muted-foreground\",\n )}\n >\n {option.label}\n </span>\n </button>\n );\n })}\n </div>\n );\n}\n\nfunction SliderQuestion({\n question,\n value,\n onChange,\n}: {\n question: GuidedQuestion;\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const min = question.min ?? 0;\n const max = question.max ?? 100;\n const step = question.step ?? 1;\n const current =\n typeof value === \"number\" ? value : Math.round((min + max) / 2);\n\n return (\n <div className=\"flex items-center gap-4\">\n <span className=\"w-8 text-xs text-muted-foreground\">{min}</span>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={current}\n onChange={(event) => onChange(Number(event.target.value))}\n className=\"h-2 flex-1 cursor-pointer accent-primary\"\n />\n <span className=\"w-8 text-right text-xs text-muted-foreground\">\n {max}\n </span>\n <span className=\"min-w-10 text-right text-sm font-medium tabular-nums text-foreground\">\n {current}\n </span>\n </div>\n );\n}\n\nfunction FileDropZone({\n value,\n onChange,\n}: {\n value: unknown;\n onChange: (value: unknown) => void;\n}) {\n const [dragOver, setDragOver] = useState(false);\n const files: File[] = Array.isArray(value) ? (value as File[]) : [];\n\n const addFiles = (incoming: File[]) => onChange([...files, ...incoming]);\n const removeFile = (index: number) =>\n onChange(files.filter((_, fileIndex) => fileIndex !== index));\n\n return (\n <div>\n <div\n onDragOver={(event) => {\n event.preventDefault();\n setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n onDrop={(event) => {\n event.preventDefault();\n setDragOver(false);\n addFiles(Array.from(event.dataTransfer.files));\n }}\n className={cn(\n \"flex cursor-pointer flex-col items-center justify-center rounded-md border-2 border-dashed p-5 transition-colors\",\n dragOver\n ? \"border-primary bg-primary/5\"\n : \"border-border bg-muted/30 hover:border-muted-foreground/50\",\n )}\n >\n <IconUpload className=\"mb-2 h-5 w-5 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Drag files here or{\" \"}\n <label className=\"cursor-pointer text-primary hover:underline\">\n browse\n <input\n type=\"file\"\n multiple\n onChange={(event) => {\n if (event.target.files)\n addFiles(Array.from(event.target.files));\n event.currentTarget.value = \"\";\n }}\n className=\"hidden\"\n />\n </label>\n </p>\n </div>\n\n {files.length > 0 && (\n <div className=\"mt-2 space-y-1\">\n {files.map((file, index) => (\n <div\n key={`${file.name}:${index}`}\n className=\"flex items-center gap-2 rounded-md bg-muted/50 px-2 py-1 text-xs text-muted-foreground\"\n >\n <IconCheck className=\"h-3 w-3 text-primary\" />\n <span className=\"min-w-0 flex-1 truncate\">{file.name}</span>\n <button\n type=\"button\"\n onClick={() => removeFile(index)}\n className=\"cursor-pointer text-muted-foreground/70 hover:text-foreground\"\n aria-label={`Remove ${file.name}`}\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nconst SAFE_BROWSER_TAB_ID_RE = /^[A-Za-z0-9_-]{1,96}$/;\n\nfunction normalizeBrowserTabId(browserTabId?: string): string | undefined {\n if (typeof browserTabId !== \"string\") return undefined;\n const trimmed = browserTabId.trim();\n return SAFE_BROWSER_TAB_ID_RE.test(trimmed) ? trimmed : undefined;\n}\n\nexport interface UseGuidedQuestionFlowOptions {\n stateKey?: string;\n /**\n * The current browser tab id. Agent actions that write the guided-questions\n * payload scope the application-state key per tab (`<key>:<tabId>`), so the\n * client must read the scoped key first and fall back to the bare key. Without\n * this, the question card never renders when the agent run carries a tab id\n * (which it almost always does — see `sessionBrowserTabId`).\n */\n browserTabId?: string;\n queryKey?: readonly unknown[];\n refetchInterval?: number | false;\n submitMessage?: string;\n skipMessage?: string;\n buildSubmitContext?: (args: {\n answers: GuidedQuestionAnswers;\n formattedAnswers: string;\n }) => string;\n buildSkipContext?: () => string;\n}\n\nexport function useGuidedQuestionFlow({\n stateKey = \"show-questions\",\n browserTabId,\n queryKey = [\"show-questions\"],\n refetchInterval = 2_000,\n submitMessage = \"Here are my answers — go ahead.\",\n skipMessage = \"Skip the questions — decide for me.\",\n buildSubmitContext,\n buildSkipContext,\n}: UseGuidedQuestionFlowOptions = {}) {\n const queryClient = useQueryClient();\n const [payload, setPayload] = useState<GuidedQuestionPayload | null>(null);\n const normalizedBrowserTabId = useMemo(\n () => normalizeBrowserTabId(browserTabId),\n [browserTabId],\n );\n const endpointFor = useCallback(\n (key: string) => agentNativePath(`/_agent-native/application-state/${key}`),\n [],\n );\n const scopedKey = normalizedBrowserTabId\n ? `${stateKey}:${normalizedBrowserTabId}`\n : stateKey;\n // Match the queryKey to the scope so two tabs polling different scoped keys\n // don't share a cache entry.\n const resolvedQueryKey = useMemo(\n () => [...queryKey, normalizedBrowserTabId ?? \"global\"],\n [queryKey, normalizedBrowserTabId],\n );\n\n const { data } = useQuery({\n queryKey: resolvedQueryKey,\n queryFn: async () => {\n const read = async (key: string) => {\n const res = await fetch(endpointFor(key));\n if (!res.ok) return null;\n const text = await res.text();\n if (!text) return null;\n try {\n const parsed = JSON.parse(text);\n if (Array.isArray(parsed?.questions) && parsed.questions.length > 0) {\n return { ...parsed, _ts: Date.now() } as GuidedQuestionPayload & {\n _ts: number;\n };\n }\n } catch {\n return null;\n }\n return null;\n };\n // Agent writes are tab-scoped; read the scoped key first, then fall back\n // to the bare key (e.g. a deterministic write that omits the tab id).\n return (\n (normalizedBrowserTabId ? await read(scopedKey) : null) ??\n (await read(stateKey))\n );\n },\n refetchInterval,\n structuralSharing: false,\n });\n\n useEffect(() => {\n if (Array.isArray(data?.questions) && data.questions.length > 0) {\n setPayload(data);\n } else {\n setPayload(null);\n }\n }, [data]);\n\n const clear = useCallback(() => {\n setPayload(null);\n queryClient.setQueryData(resolvedQueryKey, null);\n const del = (key: string) =>\n fetch(endpointFor(key), {\n method: \"DELETE\",\n headers: { \"X-Agent-Native-CSRF\": \"1\" },\n }).catch(() => {});\n // Clear whichever key actually held the payload (scoped or bare) so the\n // card doesn't reappear on the next poll.\n del(scopedKey);\n if (scopedKey !== stateKey) del(stateKey);\n }, [endpointFor, queryClient, resolvedQueryKey, scopedKey, stateKey]);\n\n const handleSubmit = useCallback(\n (answers: GuidedQuestionAnswers) => {\n // Client-initiated question (askUserQuestion): resolve the caller's\n // promise with the answer instead of forwarding it to the agent chat.\n const resolveId = payload?.clientResolveId;\n if (resolveId) {\n const firstId = payload?.questions?.[0]?.id ?? \"q1\";\n resolveClientQuestion(resolveId, extractSingleAnswer(answers, firstId));\n clear();\n return;\n }\n const formattedAnswers = formatGuidedAnswersForAgent(answers);\n const context =\n buildSubmitContext?.({ answers, formattedAnswers }) ??\n [\n \"The user answered the pre-generation questions.\",\n \"\",\n \"Answers:\",\n formattedAnswers,\n ].join(\"\\n\");\n sendToAgentChat({ message: submitMessage, context, submit: true });\n clear();\n },\n [buildSubmitContext, clear, payload, submitMessage],\n );\n\n const handleSkip = useCallback(() => {\n const resolveId = payload?.clientResolveId;\n if (resolveId) {\n resolveClientQuestion(resolveId, null);\n clear();\n return;\n }\n sendToAgentChat({\n message: skipMessage,\n context: buildSkipContext?.(),\n submit: true,\n });\n clear();\n }, [buildSkipContext, clear, payload, skipMessage]);\n\n return {\n payload,\n questions: payload?.questions ?? null,\n title: payload?.title,\n description: payload?.description,\n skipLabel: payload?.skipLabel,\n submitLabel: payload?.submitLabel,\n clear,\n handleSubmit,\n handleSkip,\n };\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  export { addContextToAgentChat, appendAgentChatContextToMessage, clearAgentChatContext, formatAgentChatContextItemsForPrompt, listAgentChatContext, refreshAgentChatContext, removeAgentChatContextItem, sendToAgentChat, setAgentChatContextItem, setContextToAgentChat, generateTabId, type AgentChatContextItem, type AgentChatContextMessage, type AgentChatContextMutationOptions, type AgentChatContextRemoveOptions, type AgentChatContextSetOptions, type AgentChatContextState, type AgentChatMessage, } from "./agent-chat.js";
2
+ export { saveAgentEngineApiKey, type AgentEngineProvider, type SaveAgentEngineApiKeyOptions, } from "./agent-engine-key.js";
2
3
  export { useAgentChatGenerating } from "./use-agent-chat.js";
3
4
  export { useAgentChatContext, type UseAgentChatContextResult, } from "./use-agent-chat-context.js";
4
5
  export { useCodeMode, useDevMode } from "./use-dev-mode.js";
@@ -21,6 +22,8 @@ export { useChangeVersion, useChangeVersions, getChangeVersion, bumpChangeVersio
21
22
  export { useReconciledState } from "./use-external-value.js";
22
23
  export { buildDynamicAgentSuggestions, dedupeSuggestions, mergeAgentSuggestions, normalizeAgentDynamicSuggestionsConfig, useAgentDynamicSuggestions, type AgentDynamicSuggestionContext, type AgentDynamicSuggestionsConfig, type AgentDynamicSuggestionsOption, } from "./dynamic-suggestions.js";
23
24
  export { cn } from "./utils.js";
25
+ export { SharedRichEditor, createSharedEditorExtensions, MARKDOWN_DIALECT_CONFIG, useCollabReconcile, getEditorMarkdown, SlashCommandMenu, DEFAULT_SLASH_COMMANDS, createImageSlashCommand, SharedImage, createImageExtension, pickAndInsertImage, uploadEditorImage, BubbleToolbar, buildDefaultBubbleItems, RichMarkdownEditor, createRichMarkdownExtensions, RunId, RUN_ID_NODE_TYPES, gfmToProseJSON, proseJSONToGfm, DragHandle, DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR, createRegistryBlockNode, RegistryBlockNodeView, RegistryBlockDataProvider, useRegistryBlockData, buildRegistryBlockSlashItems, type BuildRegistryBlockSlashItemsOptions, type DragHandleOptions, type CreateRegistryBlockNodeOptions, type RegistryBlockDataValue, type RegistryBlockSideMapBlock, type SharedRichEditorProps, type SharedEditorCollab, type SharedEditorFeatures, type CreateSharedEditorExtensionsOptions, type UseCollabReconcileOptions, type UseCollabReconcileResult, type SlashCommandItem, type SlashCommandMenuProps, type ImageUploadFn, type SharedImageOptions, type BubbleToolbarItem, type BubbleToolbarProps, type RichMarkdownDialect, type RichMarkdownEditorPreset, type RichMarkdownEditorProps, type RichMarkdownCollabUser, type CreateRichMarkdownExtensionsOptions, } from "./rich-markdown-editor/index.js";
26
+ export type { JSONContent } from "@tiptap/core";
24
27
  export { ApiKeySettings } from "./components/ApiKeySettings.js";
25
28
  export { useSession, type AuthSession } from "./use-session.js";
26
29
  export { sendToFrame, onFrameMessage, requestUserInfo, getFrameOrigin, getFramePostMessageTargetOrigin, getCallbackOrigin, oauthRedirectUri, isInFrame, enterStyleEditing, enterTextEditing, exitSelectionMode, type UserInfo, } from "./frame.js";
@@ -44,7 +47,7 @@ export { useRunStuckDetection, useAbortRun, type RunStuckState, type UseRunStuck
44
47
  export { createAgentChatAdapter } from "./agent-chat-adapter.js";
45
48
  export { AgentComposerFrame, type AgentComposerFrameProps, PromptComposer, AGENT_PROMPT_MAX_INLINE_IMAGE_BYTES, AGENT_PROMPT_MAX_INLINE_TEXT_CHARS, escapePromptAttachmentAttribute, formatPromptWithAttachments, isInlineableAgentPromptFile, readAgentPromptAttachment, type PromptComposerProps, type PromptComposerFile, type PromptComposerSubmitOptions, type AgentPromptAttachment, type ReadAgentPromptAttachmentOptions, type AgentComposerLayoutVariant, type SlashCommand, type SkillResult, } from "./composer/index.js";
46
49
  export type { TiptapComposerHandle } from "./composer/TiptapComposer.js";
47
- export { GuidedQuestionFlow, useGuidedQuestionFlow, formatGuidedAnswerValue, formatGuidedAnswersForAgent, getOtherGuidedAnswerText, hasGuidedAnswer, isOtherGuidedAnswer, makeOtherGuidedAnswer, normalizeGuidedAnswers, type GuidedQuestion, type GuidedQuestionAnswers, type GuidedQuestionFlowProps, type GuidedQuestionOption, type GuidedQuestionPayload, type GuidedQuestionType, type UseGuidedQuestionFlowOptions, } from "./guided-questions.js";
50
+ export { GuidedQuestionFlow, useGuidedQuestionFlow, askUserQuestion, formatGuidedAnswerValue, formatGuidedAnswersForAgent, getOtherGuidedAnswerText, hasGuidedAnswer, isOtherGuidedAnswer, makeOtherGuidedAnswer, normalizeGuidedAnswers, type AskUserQuestionInput, type AskUserQuestionOption, type AskUserQuestionResult, type GuidedQuestion, type GuidedQuestionAnswers, type GuidedQuestionFlowProps, type GuidedQuestionOption, type GuidedQuestionPayload, type GuidedQuestionType, type UseGuidedQuestionFlowOptions, } from "./guided-questions.js";
48
51
  export { useChatThreads, type ChatThreadScope, type ChatThreadSummary, type ChatThreadData, type UseChatThreadsOptions, } from "./use-chat-threads.js";
49
52
  export { AgentChatSurface, AgentPanel, AgentSidebar, AgentToggleButton, focusAgentChat, type AgentChatSurfaceMode, type AgentChatSurfaceProps, type AgentPanelProps, type AgentSidebarProps, } from "./AgentPanel.js";
50
53
  export { SIDEBAR_STATE_CHANGE_EVENT, type AgentSidebarStateChangeDetail, type AgentSidebarStateMode, type AgentSidebarStateSource, } from "./agent-sidebar-state.js";
@@ -68,6 +71,7 @@ export { APPEARANCE_PRESETS, applyAppearance, getStoredAppearance, useAppearance
68
71
  export { AppearancePicker, type AppearancePickerProps, } from "./AppearancePicker.js";
69
72
  export { AgentTerminal, type AgentTerminalProps } from "./terminal/index.js";
70
73
  export { trackEvent, trackSessionStatus, configureTracking, setSentryUser, captureError, captureClientException, type ClientCaptureContext, } from "./analytics.js";
74
+ export { track } from "./track.js";
71
75
  export { useCollaborativeDoc, isReconcileLeadClient, emailToColor, emailToName, type UseCollaborativeDocOptions, type UseCollaborativeDocResult, type CollabUser, } from "../collab/client.js";
72
76
  export { AGENT_CLIENT_ID } from "../collab/agent-identity.js";
73
77
  export { ResourcesPanel, ResourceTree, ResourceEditor, useResources, useResourceTree, useResource, useCreateResource, useUpdateResource, useDeleteResource, useUploadResource, type Resource, type ResourceMeta, type TreeNode, type ResourceScope, type ResourceTreeProps, type ResourceEditorProps, } from "./resources/index.js";
@@ -85,4 +89,5 @@ export { PresenceBar, type PresenceBarProps, } from "./components/PresenceBar.js
85
89
  export { AgentPresenceChip, type AgentPresenceChipProps, } from "./components/AgentPresenceChip.js";
86
90
  export { useCollaborativeMap, useCollaborativeArray, type UseCollaborativeMapOptions, type UseCollaborativeMapResult, type UseCollaborativeArrayOptions, type UseCollaborativeArrayResult, } from "../collab/client-struct.js";
87
91
  export { NotificationsBell } from "./notifications/index.js";
92
+ export { defineBlock, BlockRegistry, registerBlocks, BlockRegistryProvider, useBlockRegistry, useOptionalBlockRegistry, BlockView, SchemaBlockEditor, markdown, richtext, introspect, serializeSpecBlock, parseSpecBlock, createAttrReader, describeBlocksForAgent, renderBlockVocabularyReference, type BlockSpec, type BlockPlacement, type BlockMdxConfig, type BlockAttrReader, type BlockRenderContext, type BlockReadProps, type BlockEditProps, type MdxAttrValue, type FieldKind, type FieldDescriptor, type MdxJsxNode, type MdxAttrNode, type SerializableBlock, type ParsedBlockBase, type BlockAgentDoc, } from "./blocks/index.js";
88
93
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { stripAuthRedirectParamFromUrl } from "./auth-redirect-url.js";
3
3
  installRouteChunkRecovery();
4
4
  stripAuthRedirectParamFromUrl();
5
5
  export { addContextToAgentChat, appendAgentChatContextToMessage, clearAgentChatContext, formatAgentChatContextItemsForPrompt, listAgentChatContext, refreshAgentChatContext, removeAgentChatContextItem, sendToAgentChat, setAgentChatContextItem, setContextToAgentChat, generateTabId, } from "./agent-chat.js";
6
+ export { saveAgentEngineApiKey, } from "./agent-engine-key.js";
6
7
  export { useAgentChatGenerating } from "./use-agent-chat.js";
7
8
  export { useAgentChatContext, } from "./use-agent-chat-context.js";
8
9
  export { useCodeMode, useDevMode } from "./use-dev-mode.js";
@@ -25,6 +26,24 @@ export { useChangeVersion, useChangeVersions, getChangeVersion, bumpChangeVersio
25
26
  export { useReconciledState } from "./use-external-value.js";
26
27
  export { buildDynamicAgentSuggestions, dedupeSuggestions, mergeAgentSuggestions, normalizeAgentDynamicSuggestionsConfig, useAgentDynamicSuggestions, } from "./dynamic-suggestions.js";
27
28
  export { cn } from "./utils.js";
29
+ export {
30
+ // Shared editor core (Phase 1): the ONE configurable surface both the plan
31
+ // and content editors build on.
32
+ SharedRichEditor, createSharedEditorExtensions, MARKDOWN_DIALECT_CONFIG, useCollabReconcile, getEditorMarkdown, SlashCommandMenu, DEFAULT_SLASH_COMMANDS, createImageSlashCommand,
33
+ // Shared block-level image node + injectable upload contract. Plans opt in
34
+ // via `features.image` + `onImageUpload`; Content keeps its own image block.
35
+ SharedImage, createImageExtension, pickAndInsertImage, uploadEditorImage, BubbleToolbar, buildDefaultBubbleItems,
36
+ // Back-compat alias + factory kept for existing embedders and specs.
37
+ RichMarkdownEditor, createRichMarkdownExtensions,
38
+ // Single-doc plan editor primitives: the GFM↔ProseMirror serializer, the
39
+ // run-id prose attribute, and the shared drag-handle (block grip + reorder).
40
+ RunId, RUN_ID_NODE_TYPES, gfmToProseJSON, proseJSONToGfm, DragHandle, DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR,
41
+ // Generic registry-block Tiptap NodeView + side-map provider + dedupe plugin.
42
+ // Hosts mount the node from `createRegistryBlockNode` as an extra extension
43
+ // and wrap the editor in `RegistryBlockDataProvider`.
44
+ createRegistryBlockNode, RegistryBlockNodeView, RegistryBlockDataProvider, useRegistryBlockData,
45
+ // Shared registry-derived block slash-command builder (plan + content adapt it).
46
+ buildRegistryBlockSlashItems, } from "./rich-markdown-editor/index.js";
28
47
  export { ApiKeySettings } from "./components/ApiKeySettings.js";
29
48
  export { useSession } from "./use-session.js";
30
49
  export { sendToFrame, onFrameMessage, requestUserInfo, getFrameOrigin, getFramePostMessageTargetOrigin, getCallbackOrigin, oauthRedirectUri, isInFrame, enterStyleEditing, enterTextEditing, exitSelectionMode, } from "./frame.js";
@@ -46,7 +65,7 @@ export { RunStuckBanner } from "./RunStuckBanner.js";
46
65
  export { useRunStuckDetection, useAbortRun, } from "./use-run-stuck-detection.js";
47
66
  export { createAgentChatAdapter } from "./agent-chat-adapter.js";
48
67
  export { AgentComposerFrame, PromptComposer, AGENT_PROMPT_MAX_INLINE_IMAGE_BYTES, AGENT_PROMPT_MAX_INLINE_TEXT_CHARS, escapePromptAttachmentAttribute, formatPromptWithAttachments, isInlineableAgentPromptFile, readAgentPromptAttachment, } from "./composer/index.js";
49
- export { GuidedQuestionFlow, useGuidedQuestionFlow, formatGuidedAnswerValue, formatGuidedAnswersForAgent, getOtherGuidedAnswerText, hasGuidedAnswer, isOtherGuidedAnswer, makeOtherGuidedAnswer, normalizeGuidedAnswers, } from "./guided-questions.js";
68
+ export { GuidedQuestionFlow, useGuidedQuestionFlow, askUserQuestion, formatGuidedAnswerValue, formatGuidedAnswersForAgent, getOtherGuidedAnswerText, hasGuidedAnswer, isOtherGuidedAnswer, makeOtherGuidedAnswer, normalizeGuidedAnswers, } from "./guided-questions.js";
50
69
  export { useChatThreads, } from "./use-chat-threads.js";
51
70
  export { AgentChatSurface, AgentPanel, AgentSidebar, AgentToggleButton, focusAgentChat, } from "./AgentPanel.js";
52
71
  export { SIDEBAR_STATE_CHANGE_EVENT, } from "./agent-sidebar-state.js";
@@ -71,6 +90,7 @@ export { APPEARANCE_PRESETS, applyAppearance, getStoredAppearance, useAppearance
71
90
  export { AppearancePicker, } from "./AppearancePicker.js";
72
91
  export { AgentTerminal } from "./terminal/index.js";
73
92
  export { trackEvent, trackSessionStatus, configureTracking, setSentryUser, captureError, captureClientException, } from "./analytics.js";
93
+ export { track } from "./track.js";
74
94
  export { useCollaborativeDoc, isReconcileLeadClient, emailToColor, emailToName, } from "../collab/client.js";
75
95
  export { AGENT_CLIENT_ID } from "../collab/agent-identity.js";
76
96
  export { ResourcesPanel, ResourceTree, ResourceEditor, useResources, useResourceTree, useResource, useCreateResource, useUpdateResource, useDeleteResource, useUploadResource, } from "./resources/index.js";
@@ -89,4 +109,7 @@ export { AgentPresenceChip, } from "./components/AgentPresenceChip.js";
89
109
  // Structured data collaboration hooks
90
110
  export { useCollaborativeMap, useCollaborativeArray, } from "../collab/client-struct.js";
91
111
  export { NotificationsBell } from "./notifications/index.js";
112
+ // Block registry (also available as the dedicated `@agent-native/core/blocks`
113
+ // subpath, which server/agent code should prefer via `/blocks/server`).
114
+ export { defineBlock, BlockRegistry, registerBlocks, BlockRegistryProvider, useBlockRegistry, useOptionalBlockRegistry, BlockView, SchemaBlockEditor, markdown, richtext, introspect, serializeSpecBlock, parseSpecBlock, createAttrReader, describeBlocksForAgent, renderBlockVocabularyReference, } from "./blocks/index.js";
92
115
  //# sourceMappingURL=index.js.map