@axhub/acp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +21 -0
  3. package/.next/build-manifest.json +22 -0
  4. package/.next/export-marker.json +6 -0
  5. package/.next/fallback-build-manifest.json +13 -0
  6. package/.next/images-manifest.json +68 -0
  7. package/.next/next-minimal-server.js.nft.json +1 -0
  8. package/.next/next-server.js.nft.json +1 -0
  9. package/.next/package.json +1 -0
  10. package/.next/prerender-manifest.json +90 -0
  11. package/.next/required-server-files.js +336 -0
  12. package/.next/required-server-files.json +336 -0
  13. package/.next/routes-manifest.json +171 -0
  14. package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  15. package/.next/server/app/_global-error/page/build-manifest.json +18 -0
  16. package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  17. package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  18. package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  19. package/.next/server/app/_global-error/page.js +10 -0
  20. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  21. package/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
  22. package/.next/server/app/_global-error.html +1 -0
  23. package/.next/server/app/_global-error.meta +15 -0
  24. package/.next/server/app/_global-error.rsc +15 -0
  25. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
  26. package/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
  27. package/.next/server/app/_global-error.segments/_head.segment.rsc +6 -0
  28. package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
  29. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  30. package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  31. package/.next/server/app/_not-found/page/build-manifest.json +18 -0
  32. package/.next/server/app/_not-found/page/next-font-manifest.json +6 -0
  33. package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  34. package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
  35. package/.next/server/app/_not-found/page.js +13 -0
  36. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  37. package/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
  38. package/.next/server/app/_not-found.html +1 -0
  39. package/.next/server/app/_not-found.meta +16 -0
  40. package/.next/server/app/_not-found.rsc +17 -0
  41. package/.next/server/app/_not-found.segments/_full.segment.rsc +17 -0
  42. package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
  43. package/.next/server/app/_not-found.segments/_index.segment.rsc +6 -0
  44. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  45. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
  46. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
  47. package/.next/server/app/api/acp/capabilities/route/app-paths-manifest.json +3 -0
  48. package/.next/server/app/api/acp/capabilities/route/build-manifest.json +9 -0
  49. package/.next/server/app/api/acp/capabilities/route/server-reference-manifest.json +4 -0
  50. package/.next/server/app/api/acp/capabilities/route.js +9 -0
  51. package/.next/server/app/api/acp/capabilities/route.js.nft.json +1 -0
  52. package/.next/server/app/api/acp/capabilities/route_client-reference-manifest.js +3 -0
  53. package/.next/server/app/api/acp/commands/route/app-paths-manifest.json +3 -0
  54. package/.next/server/app/api/acp/commands/route/build-manifest.json +9 -0
  55. package/.next/server/app/api/acp/commands/route/server-reference-manifest.json +4 -0
  56. package/.next/server/app/api/acp/commands/route.js +6 -0
  57. package/.next/server/app/api/acp/commands/route.js.nft.json +1 -0
  58. package/.next/server/app/api/acp/commands/route_client-reference-manifest.js +3 -0
  59. package/.next/server/app/api/acp/runtime/route/app-paths-manifest.json +3 -0
  60. package/.next/server/app/api/acp/runtime/route/build-manifest.json +9 -0
  61. package/.next/server/app/api/acp/runtime/route/server-reference-manifest.json +4 -0
  62. package/.next/server/app/api/acp/runtime/route.js +6 -0
  63. package/.next/server/app/api/acp/runtime/route.js.nft.json +1 -0
  64. package/.next/server/app/api/acp/runtime/route_client-reference-manifest.js +3 -0
  65. package/.next/server/app/api/chat/route/app-paths-manifest.json +3 -0
  66. package/.next/server/app/api/chat/route/build-manifest.json +9 -0
  67. package/.next/server/app/api/chat/route/server-reference-manifest.json +4 -0
  68. package/.next/server/app/api/chat/route.js +9 -0
  69. package/.next/server/app/api/chat/route.js.nft.json +1 -0
  70. package/.next/server/app/api/chat/route_client-reference-manifest.js +3 -0
  71. package/.next/server/app/api/conversations/[threadId]/messages/route/app-paths-manifest.json +3 -0
  72. package/.next/server/app/api/conversations/[threadId]/messages/route/build-manifest.json +9 -0
  73. package/.next/server/app/api/conversations/[threadId]/messages/route/server-reference-manifest.json +4 -0
  74. package/.next/server/app/api/conversations/[threadId]/messages/route.js +8 -0
  75. package/.next/server/app/api/conversations/[threadId]/messages/route.js.nft.json +1 -0
  76. package/.next/server/app/api/conversations/[threadId]/messages/route_client-reference-manifest.js +3 -0
  77. package/.next/server/app/api/conversations/[threadId]/route/app-paths-manifest.json +3 -0
  78. package/.next/server/app/api/conversations/[threadId]/route/build-manifest.json +9 -0
  79. package/.next/server/app/api/conversations/[threadId]/route/server-reference-manifest.json +4 -0
  80. package/.next/server/app/api/conversations/[threadId]/route.js +8 -0
  81. package/.next/server/app/api/conversations/[threadId]/route.js.nft.json +1 -0
  82. package/.next/server/app/api/conversations/[threadId]/route_client-reference-manifest.js +3 -0
  83. package/.next/server/app/api/conversations/route/app-paths-manifest.json +3 -0
  84. package/.next/server/app/api/conversations/route/build-manifest.json +9 -0
  85. package/.next/server/app/api/conversations/route/server-reference-manifest.json +4 -0
  86. package/.next/server/app/api/conversations/route.js +8 -0
  87. package/.next/server/app/api/conversations/route.js.nft.json +1 -0
  88. package/.next/server/app/api/conversations/route_client-reference-manifest.js +3 -0
  89. package/.next/server/app/api/local-files/image/route/app-paths-manifest.json +3 -0
  90. package/.next/server/app/api/local-files/image/route/build-manifest.json +9 -0
  91. package/.next/server/app/api/local-files/image/route/server-reference-manifest.json +4 -0
  92. package/.next/server/app/api/local-files/image/route.js +6 -0
  93. package/.next/server/app/api/local-files/image/route.js.nft.json +1 -0
  94. package/.next/server/app/api/local-files/image/route_client-reference-manifest.js +3 -0
  95. package/.next/server/app/api/local-files/open/route/app-paths-manifest.json +3 -0
  96. package/.next/server/app/api/local-files/open/route/build-manifest.json +9 -0
  97. package/.next/server/app/api/local-files/open/route/server-reference-manifest.json +4 -0
  98. package/.next/server/app/api/local-files/open/route.js +6 -0
  99. package/.next/server/app/api/local-files/open/route.js.nft.json +1 -0
  100. package/.next/server/app/api/local-files/open/route_client-reference-manifest.js +3 -0
  101. package/.next/server/app/api/output-artifacts/workspace/route/app-paths-manifest.json +3 -0
  102. package/.next/server/app/api/output-artifacts/workspace/route/build-manifest.json +9 -0
  103. package/.next/server/app/api/output-artifacts/workspace/route/server-reference-manifest.json +4 -0
  104. package/.next/server/app/api/output-artifacts/workspace/route.js +6 -0
  105. package/.next/server/app/api/output-artifacts/workspace/route.js.nft.json +1 -0
  106. package/.next/server/app/api/output-artifacts/workspace/route_client-reference-manifest.js +3 -0
  107. package/.next/server/app/api/tools/image-generation/files/[id]/route/app-paths-manifest.json +3 -0
  108. package/.next/server/app/api/tools/image-generation/files/[id]/route/build-manifest.json +9 -0
  109. package/.next/server/app/api/tools/image-generation/files/[id]/route/server-reference-manifest.json +4 -0
  110. package/.next/server/app/api/tools/image-generation/files/[id]/route.js +7 -0
  111. package/.next/server/app/api/tools/image-generation/files/[id]/route.js.nft.json +1 -0
  112. package/.next/server/app/api/tools/image-generation/files/[id]/route_client-reference-manifest.js +3 -0
  113. package/.next/server/app/api/tools/image-generation/records/route/app-paths-manifest.json +3 -0
  114. package/.next/server/app/api/tools/image-generation/records/route/build-manifest.json +9 -0
  115. package/.next/server/app/api/tools/image-generation/records/route/server-reference-manifest.json +4 -0
  116. package/.next/server/app/api/tools/image-generation/records/route.js +7 -0
  117. package/.next/server/app/api/tools/image-generation/records/route.js.nft.json +1 -0
  118. package/.next/server/app/api/tools/image-generation/records/route_client-reference-manifest.js +3 -0
  119. package/.next/server/app/api/tools/user-choice/route/app-paths-manifest.json +3 -0
  120. package/.next/server/app/api/tools/user-choice/route/build-manifest.json +9 -0
  121. package/.next/server/app/api/tools/user-choice/route/server-reference-manifest.json +4 -0
  122. package/.next/server/app/api/tools/user-choice/route.js +6 -0
  123. package/.next/server/app/api/tools/user-choice/route.js.nft.json +1 -0
  124. package/.next/server/app/api/tools/user-choice/route_client-reference-manifest.js +3 -0
  125. package/.next/server/app/favicon.ico/route/app-paths-manifest.json +3 -0
  126. package/.next/server/app/favicon.ico/route/build-manifest.json +9 -0
  127. package/.next/server/app/favicon.ico/route.js +7 -0
  128. package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  129. package/.next/server/app/favicon.ico.body +0 -0
  130. package/.next/server/app/favicon.ico.meta +1 -0
  131. package/.next/server/app/page/app-paths-manifest.json +3 -0
  132. package/.next/server/app/page/build-manifest.json +18 -0
  133. package/.next/server/app/page/next-font-manifest.json +6 -0
  134. package/.next/server/app/page/react-loadable-manifest.json +1 -0
  135. package/.next/server/app/page/server-reference-manifest.json +4 -0
  136. package/.next/server/app/page.js +14 -0
  137. package/.next/server/app/page.js.nft.json +1 -0
  138. package/.next/server/app/page_client-reference-manifest.js +3 -0
  139. package/.next/server/app/session/[provider]/[sessionId]/page/app-paths-manifest.json +3 -0
  140. package/.next/server/app/session/[provider]/[sessionId]/page/build-manifest.json +18 -0
  141. package/.next/server/app/session/[provider]/[sessionId]/page/next-font-manifest.json +6 -0
  142. package/.next/server/app/session/[provider]/[sessionId]/page/react-loadable-manifest.json +1 -0
  143. package/.next/server/app/session/[provider]/[sessionId]/page/server-reference-manifest.json +4 -0
  144. package/.next/server/app/session/[provider]/[sessionId]/page.js +16 -0
  145. package/.next/server/app/session/[provider]/[sessionId]/page.js.nft.json +1 -0
  146. package/.next/server/app/session/[provider]/[sessionId]/page_client-reference-manifest.js +3 -0
  147. package/.next/server/app/thread/[threadId]/page/app-paths-manifest.json +3 -0
  148. package/.next/server/app/thread/[threadId]/page/build-manifest.json +18 -0
  149. package/.next/server/app/thread/[threadId]/page/next-font-manifest.json +6 -0
  150. package/.next/server/app/thread/[threadId]/page/react-loadable-manifest.json +1 -0
  151. package/.next/server/app/thread/[threadId]/page/server-reference-manifest.json +4 -0
  152. package/.next/server/app/thread/[threadId]/page.js +15 -0
  153. package/.next/server/app/thread/[threadId]/page.js.nft.json +1 -0
  154. package/.next/server/app/thread/[threadId]/page_client-reference-manifest.js +3 -0
  155. package/.next/server/app-paths-manifest.json +21 -0
  156. package/.next/server/chunks/0zjb_server_app_api_conversations_[threadId]_messages_route_actions_0poed25.js +3 -0
  157. package/.next/server/chunks/0zjb_server_app_api_tools_image-generation_files_[id]_route_actions_0-tbvpw.js +3 -0
  158. package/.next/server/chunks/0zjb_server_app_api_tools_image-generation_records_route_actions_0vu38s2.js +3 -0
  159. package/.next/server/chunks/[externals]_next_dist_0.m~pv6._.js +3 -0
  160. package/.next/server/chunks/[root-of-the-server]__04xq..~._.js +3 -0
  161. package/.next/server/chunks/[root-of-the-server]__07sxz4_._.js +3 -0
  162. package/.next/server/chunks/[root-of-the-server]__0dwg3fr._.js +178 -0
  163. package/.next/server/chunks/[root-of-the-server]__0eanzwb._.js +3 -0
  164. package/.next/server/chunks/[root-of-the-server]__0gqx~5k._.js +3 -0
  165. package/.next/server/chunks/[root-of-the-server]__0iokgmz._.js +3 -0
  166. package/.next/server/chunks/[root-of-the-server]__0j-lxr4._.js +3 -0
  167. package/.next/server/chunks/[root-of-the-server]__0ly6hop._.js +3 -0
  168. package/.next/server/chunks/[root-of-the-server]__0nil~wi._.js +3 -0
  169. package/.next/server/chunks/[root-of-the-server]__0tmhg7j._.js +3 -0
  170. package/.next/server/chunks/[root-of-the-server]__0txmfnw._.js +4 -0
  171. package/.next/server/chunks/[root-of-the-server]__0wo0b8z._.js +3 -0
  172. package/.next/server/chunks/[root-of-the-server]__0~mtsby._.js +3 -0
  173. package/.next/server/chunks/[root-of-the-server]__10-n4io._.js +3 -0
  174. package/.next/server/chunks/[root-of-the-server]__10g507v._.js +3 -0
  175. package/.next/server/chunks/[turbopack]_runtime.js +903 -0
  176. package/.next/server/chunks/_next-internal_server_app_api_acp_capabilities_route_actions_08lck.p.js +3 -0
  177. package/.next/server/chunks/_next-internal_server_app_api_acp_commands_route_actions_0as.2z6.js +3 -0
  178. package/.next/server/chunks/_next-internal_server_app_api_acp_runtime_route_actions_0o1ybkn.js +3 -0
  179. package/.next/server/chunks/_next-internal_server_app_api_chat_route_actions_0tmcf6..js +3 -0
  180. package/.next/server/chunks/_next-internal_server_app_api_conversations_[threadId]_route_actions_12yq8z_.js +3 -0
  181. package/.next/server/chunks/_next-internal_server_app_api_conversations_route_actions_131xv69.js +3 -0
  182. package/.next/server/chunks/_next-internal_server_app_api_local-files_image_route_actions_0f~10mn.js +3 -0
  183. package/.next/server/chunks/_next-internal_server_app_api_local-files_open_route_actions_026mg-2.js +3 -0
  184. package/.next/server/chunks/_next-internal_server_app_api_output-artifacts_workspace_route_actions_1239-n7.js +3 -0
  185. package/.next/server/chunks/_next-internal_server_app_api_tools_user-choice_route_actions_09xqbn_.js +3 -0
  186. package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js +3 -0
  187. package/.next/server/chunks/instrumentation_ts_0zq9-xz._.js +3 -0
  188. package/.next/server/chunks/lib_conversations_store_ts_0gzcj38._.js +7 -0
  189. package/.next/server/chunks/node_modules_@vercel_oidc_dist_token_0zdeuds.js +3 -0
  190. package/.next/server/chunks/node_modules_next_00hve1e._.js +13 -0
  191. package/.next/server/chunks/ssr/[root-of-the-server]__02qo-zr._.js +19 -0
  192. package/.next/server/chunks/ssr/[root-of-the-server]__0488vn3._.js +3 -0
  193. package/.next/server/chunks/ssr/[root-of-the-server]__08e5v4-._.js +3 -0
  194. package/.next/server/chunks/ssr/[root-of-the-server]__08iwq-u._.js +3 -0
  195. package/.next/server/chunks/ssr/[root-of-the-server]__0a1m1mq._.js +3 -0
  196. package/.next/server/chunks/ssr/[root-of-the-server]__0i9qg2.._.js +33 -0
  197. package/.next/server/chunks/ssr/[root-of-the-server]__0icm-_h._.js +3 -0
  198. package/.next/server/chunks/ssr/[root-of-the-server]__0piffp7._.js +3 -0
  199. package/.next/server/chunks/ssr/[root-of-the-server]__0xn-a8p._.js +3 -0
  200. package/.next/server/chunks/ssr/[root-of-the-server]__0~c929r._.js +33 -0
  201. package/.next/server/chunks/ssr/[turbopack]_runtime.js +903 -0
  202. package/.next/server/chunks/ssr/_0-oaqqe._.js +6 -0
  203. package/.next/server/chunks/ssr/_006q235._.js +3 -0
  204. package/.next/server/chunks/ssr/_03.pm1z._.js +108 -0
  205. package/.next/server/chunks/ssr/_0txwi90._.js +3 -0
  206. package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0k77kol.js +3 -0
  207. package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0eq97pa.js +3 -0
  208. package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js +3 -0
  209. package/.next/server/chunks/ssr/_next-internal_server_app_session_[provider]_[sessionId]_page_actions_0_67qh_.js +3 -0
  210. package/.next/server/chunks/ssr/_next-internal_server_app_thread_[threadId]_page_actions_11mcypo.js +3 -0
  211. package/.next/server/chunks/ssr/lib_conversations_store_ts_0-pd6d3._.js +4 -0
  212. package/.next/server/chunks/ssr/node_modules_09w7yel._.js +33 -0
  213. package/.next/server/chunks/ssr/node_modules_0tev5qq._.js +3 -0
  214. package/.next/server/chunks/ssr/node_modules_@vercel_oidc_dist_token_0yj7kvj.js +3 -0
  215. package/.next/server/chunks/ssr/node_modules_next_dist_09jzzl8._.js +3 -0
  216. package/.next/server/chunks/ssr/node_modules_next_dist_0h9llsw._.js +6 -0
  217. package/.next/server/chunks/ssr/node_modules_next_dist_0t-hj0x._.js +3 -0
  218. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0inhx6q._.js +3 -0
  219. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0ghu-f7.js +3 -0
  220. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js +3 -0
  221. package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js +3 -0
  222. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00297nb.js +4 -0
  223. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_002l7yi.js +4 -0
  224. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_02suzhc.js +4 -0
  225. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_04x9gct.js +4 -0
  226. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0nsg22r.js +4 -0
  227. package/.next/server/chunks/tools_image-generation_service_mjs_0k_th7-._.js +3 -0
  228. package/.next/server/edge/chunks/_0e82_ds._.js +3 -0
  229. package/.next/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_00ue99t.js +3 -0
  230. package/.next/server/functions-config-manifest.json +11 -0
  231. package/.next/server/instrumentation/middleware-manifest.json +12 -0
  232. package/.next/server/instrumentation.js +4 -0
  233. package/.next/server/instrumentation.js.nft.json +1 -0
  234. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  235. package/.next/server/middleware-build-manifest.js +22 -0
  236. package/.next/server/middleware-manifest.json +6 -0
  237. package/.next/server/next-font-manifest.js +1 -0
  238. package/.next/server/next-font-manifest.json +6 -0
  239. package/.next/server/pages/404.html +1 -0
  240. package/.next/server/pages/500.html +1 -0
  241. package/.next/server/pages-manifest.json +4 -0
  242. package/.next/server/prefetch-hints.json +1 -0
  243. package/.next/server/server-reference-manifest.js +1 -0
  244. package/.next/server/server-reference-manifest.json +5 -0
  245. package/.next/static/chunks/01xlw8hd842-c.js +1 -0
  246. package/.next/static/chunks/03edqrb4zdj~g.js +31 -0
  247. package/.next/static/chunks/03qq5fxc~pg00.js +1 -0
  248. package/.next/static/chunks/03~yq9q893hmn.js +1 -0
  249. package/.next/static/chunks/0l-_vd.~~z2bw.js +2 -0
  250. package/.next/static/chunks/0qid5lwcbx9s0.js +1 -0
  251. package/.next/static/chunks/0t.k8~x~sghva.js +4 -0
  252. package/.next/static/chunks/0tmpufzgpw2-w.js +1 -0
  253. package/.next/static/chunks/0v_ue~msygctw.js +1 -0
  254. package/.next/static/chunks/0y2l0xgouorae.css +1 -0
  255. package/.next/static/chunks/0zftsky7gte_9.js +102 -0
  256. package/.next/static/chunks/13nvdsh0e09d0.js +1 -0
  257. package/.next/static/chunks/1610ha42i.fl~.css +1 -0
  258. package/.next/static/chunks/turbopack-0mxz-ap91rcoe.js +1 -0
  259. package/.next/static/mbk_N5Gs4ZJg3lciRL6ya/_buildManifest.js +11 -0
  260. package/.next/static/mbk_N5Gs4ZJg3lciRL6ya/_clientMiddlewareManifest.js +1 -0
  261. package/.next/static/mbk_N5Gs4ZJg3lciRL6ya/_ssgManifest.js +1 -0
  262. package/.next/static/media/favicon.0x3dzn~oxb6tn.ico +0 -0
  263. package/README.md +113 -0
  264. package/THIRD_PARTY_NOTICES.md +34 -0
  265. package/bin/acp.mjs +224 -0
  266. package/dist/app/globals.css +146 -0
  267. package/dist/components/assistant-ui/acp-command-menu.d.ts +2 -0
  268. package/dist/components/assistant-ui/acp-command-menu.mjs +176 -0
  269. package/dist/components/assistant-ui/acp-elicitation-option-list.d.ts +3 -0
  270. package/dist/components/assistant-ui/acp-elicitation-option-list.mjs +157 -0
  271. package/dist/components/assistant-ui/acp-selectors.d.ts +2 -0
  272. package/dist/components/assistant-ui/acp-selectors.mjs +301 -0
  273. package/dist/components/assistant-ui/acp-tool-content.d.ts +4 -0
  274. package/dist/components/assistant-ui/acp-tool-content.mjs +127 -0
  275. package/dist/components/assistant-ui/addons/host.d.ts +4 -0
  276. package/dist/components/assistant-ui/addons/host.mjs +85 -0
  277. package/dist/components/assistant-ui/addons/image-generation-records-section.d.ts +14 -0
  278. package/dist/components/assistant-ui/addons/image-generation-records-section.mjs +116 -0
  279. package/dist/components/assistant-ui/addons/output-artifacts-section.d.ts +9 -0
  280. package/dist/components/assistant-ui/addons/output-artifacts-section.mjs +24 -0
  281. package/dist/components/assistant-ui/addons/output-artifacts.d.ts +14 -0
  282. package/dist/components/assistant-ui/addons/output-artifacts.mjs +87 -0
  283. package/dist/components/assistant-ui/addons/plan-addon.d.ts +2 -0
  284. package/dist/components/assistant-ui/addons/plan-addon.mjs +39 -0
  285. package/dist/components/assistant-ui/addons/plan-data.d.ts +5 -0
  286. package/dist/components/assistant-ui/addons/plan-data.mjs +97 -0
  287. package/dist/components/assistant-ui/addons/registry.d.ts +2 -0
  288. package/dist/components/assistant-ui/addons/registry.mjs +8 -0
  289. package/dist/components/assistant-ui/addons/types.d.ts +13 -0
  290. package/dist/components/assistant-ui/addons/types.mjs +1 -0
  291. package/dist/components/assistant-ui/attachment.d.ts +7 -0
  292. package/dist/components/assistant-ui/attachment.mjs +88 -0
  293. package/dist/components/assistant-ui/file.d.ts +37 -0
  294. package/dist/components/assistant-ui/file.mjs +107 -0
  295. package/dist/components/assistant-ui/image-generation-settings-dialog.d.ts +4 -0
  296. package/dist/components/assistant-ui/image-generation-settings-dialog.mjs +28 -0
  297. package/dist/components/assistant-ui/image.d.ts +51 -0
  298. package/dist/components/assistant-ui/image.mjs +215 -0
  299. package/dist/components/assistant-ui/markdown-text.d.ts +2 -0
  300. package/dist/components/assistant-ui/markdown-text.mjs +208 -0
  301. package/dist/components/assistant-ui/thread/composer.d.ts +27 -0
  302. package/dist/components/assistant-ui/thread/composer.mjs +15 -0
  303. package/dist/components/assistant-ui/thread/context-chips.d.ts +2 -0
  304. package/dist/components/assistant-ui/thread/context-chips.mjs +123 -0
  305. package/dist/components/assistant-ui/thread/empty-state.d.ts +9 -0
  306. package/dist/components/assistant-ui/thread/empty-state.mjs +24 -0
  307. package/dist/components/assistant-ui/thread/index.d.ts +11 -0
  308. package/dist/components/assistant-ui/thread/index.mjs +43 -0
  309. package/dist/components/assistant-ui/thread/message-list.d.ts +3 -0
  310. package/dist/components/assistant-ui/thread/message-list.mjs +16 -0
  311. package/dist/components/assistant-ui/thread/messages.d.ts +9 -0
  312. package/dist/components/assistant-ui/thread/messages.mjs +71 -0
  313. package/dist/components/assistant-ui/thread/scroll-to-bottom.d.ts +2 -0
  314. package/dist/components/assistant-ui/thread/scroll-to-bottom.mjs +8 -0
  315. package/dist/components/assistant-ui/thread-list.d.ts +2 -0
  316. package/dist/components/assistant-ui/thread-list.mjs +31 -0
  317. package/dist/components/assistant-ui/thread.d.ts +1 -0
  318. package/dist/components/assistant-ui/thread.mjs +2 -0
  319. package/dist/components/assistant-ui/threadlist-sidebar.d.ts +6 -0
  320. package/dist/components/assistant-ui/threadlist-sidebar.mjs +32 -0
  321. package/dist/components/assistant-ui/tool-fallback.d.ts +31 -0
  322. package/dist/components/assistant-ui/tool-fallback.mjs +114 -0
  323. package/dist/components/assistant-ui/tooltip-icon-button.d.ts +7 -0
  324. package/dist/components/assistant-ui/tooltip-icon-button.mjs +23 -0
  325. package/dist/components/icons/github.d.ts +3 -0
  326. package/dist/components/icons/github.mjs +4 -0
  327. package/dist/components/theme-toggle.d.ts +1 -0
  328. package/dist/components/theme-toggle.mjs +26 -0
  329. package/dist/components/tool-ui/option-list.d.ts +34 -0
  330. package/dist/components/tool-ui/option-list.mjs +163 -0
  331. package/dist/components/ui/avatar.d.ts +11 -0
  332. package/dist/components/ui/avatar.mjs +40 -0
  333. package/dist/components/ui/button.d.ts +10 -0
  334. package/dist/components/ui/button.mjs +47 -0
  335. package/dist/components/ui/collapsible.d.ts +5 -0
  336. package/dist/components/ui/collapsible.mjs +27 -0
  337. package/dist/components/ui/dialog.d.ts +17 -0
  338. package/dist/components/ui/dialog.mjs +58 -0
  339. package/dist/components/ui/input.d.ts +3 -0
  340. package/dist/components/ui/input.mjs +18 -0
  341. package/dist/components/ui/label.d.ts +4 -0
  342. package/dist/components/ui/label.mjs +20 -0
  343. package/dist/components/ui/scroll-area.d.ts +5 -0
  344. package/dist/components/ui/scroll-area.mjs +26 -0
  345. package/dist/components/ui/select.d.ts +13 -0
  346. package/dist/components/ui/select.mjs +59 -0
  347. package/dist/components/ui/separator.d.ts +4 -0
  348. package/dist/components/ui/separator.mjs +20 -0
  349. package/dist/components/ui/sheet.d.ts +14 -0
  350. package/dist/components/ui/sheet.mjs +61 -0
  351. package/dist/components/ui/sidebar.d.ts +69 -0
  352. package/dist/components/ui/sidebar.mjs +245 -0
  353. package/dist/components/ui/skeleton.d.ts +2 -0
  354. package/dist/components/ui/skeleton.mjs +18 -0
  355. package/dist/components/ui/switch.d.ts +4 -0
  356. package/dist/components/ui/switch.mjs +20 -0
  357. package/dist/components/ui/tabs.d.ts +7 -0
  358. package/dist/components/ui/tabs.mjs +32 -0
  359. package/dist/components/ui/tooltip.d.ts +7 -0
  360. package/dist/components/ui/tooltip.mjs +32 -0
  361. package/dist/hooks/use-mobile.d.ts +1 -0
  362. package/dist/hooks/use-mobile.mjs +15 -0
  363. package/dist/lib/acp2aisdk/capabilities.d.ts +6 -0
  364. package/dist/lib/acp2aisdk/capabilities.mjs +210 -0
  365. package/dist/lib/acp2aisdk/capability-cache.d.ts +17 -0
  366. package/dist/lib/acp2aisdk/capability-cache.mjs +259 -0
  367. package/dist/lib/acp2aisdk/client-context.d.ts +38 -0
  368. package/dist/lib/acp2aisdk/client-context.mjs +247 -0
  369. package/dist/lib/acp2aisdk/commands.d.ts +11 -0
  370. package/dist/lib/acp2aisdk/commands.mjs +121 -0
  371. package/dist/lib/acp2aisdk/config-options.d.ts +3 -0
  372. package/dist/lib/acp2aisdk/config-options.mjs +86 -0
  373. package/dist/lib/acp2aisdk/context.d.ts +88 -0
  374. package/dist/lib/acp2aisdk/context.mjs +33 -0
  375. package/dist/lib/acp2aisdk/default-capabilities.d.ts +275 -0
  376. package/dist/lib/acp2aisdk/default-capabilities.mjs +421 -0
  377. package/dist/lib/acp2aisdk/elicitation.d.ts +37 -0
  378. package/dist/lib/acp2aisdk/elicitation.mjs +193 -0
  379. package/dist/lib/acp2aisdk/hitl.d.ts +25 -0
  380. package/dist/lib/acp2aisdk/hitl.mjs +134 -0
  381. package/dist/lib/acp2aisdk/index.d.ts +12 -0
  382. package/dist/lib/acp2aisdk/index.mjs +182 -0
  383. package/dist/lib/acp2aisdk/mcp-servers.d.ts +17 -0
  384. package/dist/lib/acp2aisdk/mcp-servers.mjs +153 -0
  385. package/dist/lib/acp2aisdk/model-selection.d.ts +16 -0
  386. package/dist/lib/acp2aisdk/model-selection.mjs +65 -0
  387. package/dist/lib/acp2aisdk/prompt-history.d.ts +9 -0
  388. package/dist/lib/acp2aisdk/prompt-history.mjs +168 -0
  389. package/dist/lib/acp2aisdk/provider-compat.d.ts +85 -0
  390. package/dist/lib/acp2aisdk/provider-compat.mjs +501 -0
  391. package/dist/lib/acp2aisdk/provider-registry.d.ts +15 -0
  392. package/dist/lib/acp2aisdk/provider-registry.mjs +196 -0
  393. package/dist/lib/acp2aisdk/response.d.ts +3 -0
  394. package/dist/lib/acp2aisdk/response.mjs +33 -0
  395. package/dist/lib/acp2aisdk/runtime-options.d.ts +2 -0
  396. package/dist/lib/acp2aisdk/runtime-options.mjs +10 -0
  397. package/dist/lib/acp2aisdk/session-runtime.d.ts +5 -0
  398. package/dist/lib/acp2aisdk/session-runtime.mjs +186 -0
  399. package/dist/lib/acp2aisdk/session-store.d.ts +31 -0
  400. package/dist/lib/acp2aisdk/session-store.mjs +169 -0
  401. package/dist/lib/acp2aisdk/skill-command-cache.d.ts +20 -0
  402. package/dist/lib/acp2aisdk/skill-command-cache.mjs +122 -0
  403. package/dist/lib/acp2aisdk/stream-metadata.d.ts +10 -0
  404. package/dist/lib/acp2aisdk/stream-metadata.mjs +251 -0
  405. package/dist/lib/acp2aisdk/types.d.ts +129 -0
  406. package/dist/lib/acp2aisdk/types.mjs +0 -0
  407. package/dist/lib/acp2aisdk/vendor/acp-ai-provider/index.d.ts +10 -0
  408. package/dist/lib/acp2aisdk/vendor/acp-ai-provider/index.mjs +10 -0
  409. package/dist/lib/acp2aisdk/vendor/acp-ai-provider/package/index.mjs +1945 -0
  410. package/dist/lib/api/client.d.ts +93 -0
  411. package/dist/lib/api/client.mjs +199 -0
  412. package/dist/lib/api/cors.d.ts +2 -0
  413. package/dist/lib/api/cors.mjs +47 -0
  414. package/dist/lib/conversations/client-adapter.d.ts +21 -0
  415. package/dist/lib/conversations/client-adapter.mjs +329 -0
  416. package/dist/lib/conversations/message-repository.d.ts +8 -0
  417. package/dist/lib/conversations/message-repository.mjs +87 -0
  418. package/dist/lib/conversations/store.d.ts +17 -0
  419. package/dist/lib/conversations/store.mjs +678 -0
  420. package/dist/lib/conversations/types.d.ts +92 -0
  421. package/dist/lib/conversations/types.mjs +0 -0
  422. package/dist/lib/local-image-files.d.ts +5 -0
  423. package/dist/lib/local-image-files.mjs +76 -0
  424. package/dist/lib/local-image-paths.d.ts +7 -0
  425. package/dist/lib/local-image-paths.mjs +106 -0
  426. package/dist/lib/output-artifacts/workspace.d.ts +8 -0
  427. package/dist/lib/output-artifacts/workspace.mjs +174 -0
  428. package/dist/lib/provider-history/codex.d.ts +4 -0
  429. package/dist/lib/provider-history/codex.mjs +272 -0
  430. package/dist/lib/provider-history/index.d.ts +7 -0
  431. package/dist/lib/provider-history/index.mjs +88 -0
  432. package/dist/lib/provider-history/types.d.ts +31 -0
  433. package/dist/lib/provider-history/types.mjs +0 -0
  434. package/dist/lib/server-runtime.d.ts +22 -0
  435. package/dist/lib/server-runtime.mjs +78 -0
  436. package/dist/lib/url-routing.d.ts +18 -0
  437. package/dist/lib/url-routing.mjs +59 -0
  438. package/dist/lib/utils.d.ts +2 -0
  439. package/dist/lib/utils.mjs +5 -0
  440. package/dist/lib/workspace-metadata.d.ts +2 -0
  441. package/dist/lib/workspace-metadata.mjs +20 -0
  442. package/dist/public-api/react.d.ts +14 -0
  443. package/dist/public-api/react.mjs +16 -0
  444. package/dist/public-api/runtime.d.ts +8 -0
  445. package/dist/public-api/runtime.mjs +7 -0
  446. package/dist/public-api/server.d.ts +5 -0
  447. package/dist/public-api/server.mjs +4 -0
  448. package/dist/public-api/styles.css +1 -0
  449. package/dist/public-api/ui.d.ts +13 -0
  450. package/dist/public-api/ui.mjs +13 -0
  451. package/dist/tools/client-registry.d.ts +9 -0
  452. package/dist/tools/client-registry.mjs +70 -0
  453. package/dist/tools/image-generation/client.d.ts +18 -0
  454. package/dist/tools/image-generation/client.mjs +31 -0
  455. package/dist/tools/image-generation/config.d.ts +9 -0
  456. package/dist/tools/image-generation/config.example.json +14 -0
  457. package/dist/tools/image-generation/config.mjs +11 -0
  458. package/dist/tools/image-generation/mcp-server.mjs +87 -0
  459. package/dist/tools/image-generation/registry.d.ts +13 -0
  460. package/dist/tools/image-generation/registry.mjs +30 -0
  461. package/dist/tools/image-generation/server.d.ts +6 -0
  462. package/dist/tools/image-generation/server.mjs +58 -0
  463. package/dist/tools/image-generation/service.mjs +978 -0
  464. package/dist/tools/image-generation/shared.d.ts +103 -0
  465. package/dist/tools/image-generation/shared.mjs +80 -0
  466. package/dist/tools/image-generation/storage.d.ts +22 -0
  467. package/dist/tools/image-generation/storage.mjs +8 -0
  468. package/dist/tools/image-generation/ui-detail.d.ts +26 -0
  469. package/dist/tools/image-generation/ui-detail.mjs +109 -0
  470. package/dist/tools/image-generation/ui.d.ts +8 -0
  471. package/dist/tools/image-generation/ui.mjs +121 -0
  472. package/dist/tools/registry.d.ts +32 -0
  473. package/dist/tools/registry.mjs +142 -0
  474. package/dist/tools/ui-registry.d.ts +3 -0
  475. package/dist/tools/ui-registry.mjs +20 -0
  476. package/dist/tools/user-choice/client.d.ts +10 -0
  477. package/dist/tools/user-choice/client.mjs +18 -0
  478. package/dist/tools/user-choice/registry.d.ts +12 -0
  479. package/dist/tools/user-choice/registry.mjs +21 -0
  480. package/dist/tools/user-choice/server.d.ts +6 -0
  481. package/dist/tools/user-choice/server.mjs +42 -0
  482. package/dist/tools/user-choice/shared.d.ts +79 -0
  483. package/dist/tools/user-choice/shared.mjs +56 -0
  484. package/dist/tools/user-choice/store.d.ts +19 -0
  485. package/dist/tools/user-choice/store.mjs +95 -0
  486. package/dist/tools/user-choice/ui.d.ts +3 -0
  487. package/dist/tools/user-choice/ui.mjs +396 -0
  488. package/package.json +118 -0
@@ -0,0 +1,208 @@
1
+ "use client";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
+ import "@assistant-ui/react-markdown/styles/dot.css";
15
+ import { MarkdownTextPrimitive, unstable_memoizeMarkdownComponents as memoizeMarkdownComponents, useIsMarkdownCodeBlock, } from "@assistant-ui/react-markdown";
16
+ import { CheckIcon, CopyIcon } from "lucide-react";
17
+ import { memo, useState } from "react";
18
+ import remarkGfm from "remark-gfm";
19
+ import { File } from "./file.mjs";
20
+ import { Image } from "./image.mjs";
21
+ import { TooltipIconButton } from "./tooltip-icon-button.mjs";
22
+ import { getLocalFileName, getLocalImageFileName, getLocalImagePreviewUrl, isLocalFilePath, isLocalImagePath, isRenderableImageUrl, markdownEscapeLinkDestination, } from "../../lib/local-image-paths.mjs";
23
+ import { cn } from "../../lib/utils.mjs";
24
+ const LOCAL_FILE_TEXT_RE = /(file:\/\/[^\s<>"']+\.[A-Za-z0-9][A-Za-z0-9_-]{0,15}(?:[?#][^\s<>"']*)?|https?:\/\/(?:localhost|127\.0\.0\.1|\[::1\])(?::\d+)?\/[^\s<>"']+\.[A-Za-z0-9][A-Za-z0-9_-]{0,15}(?:[?#][^\s<>"']*)?|\/(?:Users|home|tmp|var|private|Volumes|mnt|media|opt)\/[^\s<>"']+\.[A-Za-z0-9][A-Za-z0-9_-]{0,15}(?:[?#][^\s<>"']*)?|(?:[A-Za-z]:[\\/]|\\\\)[^\s<>"']+\.[A-Za-z0-9][A-Za-z0-9_-]{0,15}(?:[?#][^\s<>"']*)?)/gi;
25
+ function isInsideMarkdownDestination(text, offset) {
26
+ const before = text.slice(Math.max(0, offset - 3), offset);
27
+ return before.endsWith("](") || before.endsWith("](<") || before === "<";
28
+ }
29
+ function preprocessLocalFilePaths(text) {
30
+ return text.replace(LOCAL_FILE_TEXT_RE, (match, _value, offset, fullText) => {
31
+ if (!isLocalFilePath(match))
32
+ return match;
33
+ if (isInsideMarkdownDestination(fullText, offset))
34
+ return match;
35
+ const fileName = isLocalImagePath(match)
36
+ ? getLocalImageFileName(match)
37
+ : getLocalFileName(match);
38
+ const destination = markdownEscapeLinkDestination(match);
39
+ return `[${fileName}](<${destination}>)`;
40
+ });
41
+ }
42
+ function getRenderableImageUrl(value) {
43
+ if (isRenderableImageUrl(value))
44
+ return value;
45
+ return null;
46
+ }
47
+ const MarkdownTextImpl = () => {
48
+ return (_jsx(MarkdownTextPrimitive, { remarkPlugins: [remarkGfm], smooth: false, className: "aui-md", components: defaultComponents, preprocess: preprocessLocalFilePaths }));
49
+ };
50
+ export const MarkdownText = memo(MarkdownTextImpl);
51
+ const CodeHeader = ({ language, code }) => {
52
+ const { isCopied, copyToClipboard } = useCopyToClipboard();
53
+ const onCopy = () => {
54
+ if (!code || isCopied)
55
+ return;
56
+ copyToClipboard(code);
57
+ };
58
+ return (_jsxs("div", { className: "aui-code-header-root mt-2.5 flex items-center justify-between rounded-t-lg border border-border/50 border-b-0 bg-muted/50 px-3 py-1.5 text-xs", children: [_jsx("span", { className: "aui-code-header-language font-medium text-muted-foreground lowercase", children: language }), _jsxs(TooltipIconButton, { tooltip: "\u590D\u5236", onClick: onCopy, children: [!isCopied && _jsx(CopyIcon, {}), isCopied && _jsx(CheckIcon, {})] })] }));
59
+ };
60
+ const useCopyToClipboard = ({ copiedDuration = 3000, } = {}) => {
61
+ const [isCopied, setIsCopied] = useState(false);
62
+ const copyToClipboard = (value) => {
63
+ if (!value || typeof navigator === "undefined" || !navigator.clipboard) {
64
+ return;
65
+ }
66
+ navigator.clipboard.writeText(value).then(() => {
67
+ setIsCopied(true);
68
+ setTimeout(() => setIsCopied(false), copiedDuration);
69
+ }, () => { });
70
+ };
71
+ return { isCopied, copyToClipboard };
72
+ };
73
+ const defaultComponents = memoizeMarkdownComponents({
74
+ h1: (_a) => {
75
+ var { className } = _a, props = __rest(_a, ["className"]);
76
+ return (_jsx("h1", Object.assign({ className: cn("aui-md-h1 mb-2 scroll-m-20 font-semibold text-base first:mt-0 last:mb-0", className) }, props)));
77
+ },
78
+ h2: (_a) => {
79
+ var { className } = _a, props = __rest(_a, ["className"]);
80
+ return (_jsx("h2", Object.assign({ className: cn("aui-md-h2 mt-3 mb-1.5 scroll-m-20 font-semibold text-sm first:mt-0 last:mb-0", className) }, props)));
81
+ },
82
+ h3: (_a) => {
83
+ var { className } = _a, props = __rest(_a, ["className"]);
84
+ return (_jsx("h3", Object.assign({ className: cn("aui-md-h3 mt-2.5 mb-1 scroll-m-20 font-semibold text-sm first:mt-0 last:mb-0", className) }, props)));
85
+ },
86
+ h4: (_a) => {
87
+ var { className } = _a, props = __rest(_a, ["className"]);
88
+ return (_jsx("h4", Object.assign({ className: cn("aui-md-h4 mt-2 mb-1 scroll-m-20 font-medium text-sm first:mt-0 last:mb-0", className) }, props)));
89
+ },
90
+ h5: (_a) => {
91
+ var { className } = _a, props = __rest(_a, ["className"]);
92
+ return (_jsx("h5", Object.assign({ className: cn("aui-md-h5 mt-2 mb-1 font-medium text-sm first:mt-0 last:mb-0", className) }, props)));
93
+ },
94
+ h6: (_a) => {
95
+ var { className } = _a, props = __rest(_a, ["className"]);
96
+ return (_jsx("h6", Object.assign({ className: cn("aui-md-h6 mt-2 mb-1 font-medium text-sm first:mt-0 last:mb-0", className) }, props)));
97
+ },
98
+ p: (_a) => {
99
+ var { className } = _a, props = __rest(_a, ["className"]);
100
+ return (_jsx("div", Object.assign({ className: cn("aui-md-p my-2.5 leading-[1.7] first:mt-0 last:mb-0", className) }, props)));
101
+ },
102
+ a: (_a) => {
103
+ var { className, href, children } = _a, props = __rest(_a, ["className", "href", "children"]);
104
+ const linkHref = typeof href === "string" ? href : "";
105
+ if (isLocalImagePath(linkHref)) {
106
+ return _jsx(LocalImage, { path: linkHref, className: className });
107
+ }
108
+ if (isLocalFilePath(linkHref)) {
109
+ return _jsx(LocalFile, { path: linkHref, className: className });
110
+ }
111
+ const renderableImageUrl = getRenderableImageUrl(linkHref);
112
+ if (renderableImageUrl) {
113
+ return (_jsx(RemoteImageLink, { href: renderableImageUrl, className: className }));
114
+ }
115
+ return (_jsx("a", Object.assign({ href: href, className: cn("aui-md-a text-primary underline underline-offset-2 hover:text-primary/80", className) }, props, { children: children })));
116
+ },
117
+ img: (_a) => {
118
+ var { className, src, alt } = _a, props = __rest(_a, ["className", "src", "alt"]);
119
+ const imageSrc = typeof src === "string" ? src : "";
120
+ if (isLocalImagePath(imageSrc)) {
121
+ return _jsx(LocalImage, { path: imageSrc, className: className });
122
+ }
123
+ const renderableImageUrl = getRenderableImageUrl(imageSrc);
124
+ if (!renderableImageUrl)
125
+ return null;
126
+ return (_jsx(MarkdownImage, Object.assign({ src: renderableImageUrl, alt: alt, className: className }, props)));
127
+ },
128
+ blockquote: (_a) => {
129
+ var { className } = _a, props = __rest(_a, ["className"]);
130
+ return (_jsx("blockquote", Object.assign({ className: cn("aui-md-blockquote my-2.5 border-muted-foreground/30 border-s-2 ps-3 text-muted-foreground italic", className) }, props)));
131
+ },
132
+ ul: (_a) => {
133
+ var { className } = _a, props = __rest(_a, ["className"]);
134
+ return (_jsx("ul", Object.assign({ className: cn("aui-md-ul my-2 ms-4 list-disc marker:text-muted-foreground [&>li]:mt-1", className) }, props)));
135
+ },
136
+ ol: (_a) => {
137
+ var { className } = _a, props = __rest(_a, ["className"]);
138
+ return (_jsx("ol", Object.assign({ className: cn("aui-md-ol my-2 ms-4 list-decimal marker:text-muted-foreground [&>li]:mt-1", className) }, props)));
139
+ },
140
+ hr: (_a) => {
141
+ var { className } = _a, props = __rest(_a, ["className"]);
142
+ return (_jsx("hr", Object.assign({ className: cn("aui-md-hr my-2 border-muted-foreground/20", className) }, props)));
143
+ },
144
+ table: (_a) => {
145
+ var { className } = _a, props = __rest(_a, ["className"]);
146
+ return (_jsx("table", Object.assign({ className: cn("aui-md-table my-2 w-full border-separate border-spacing-0 overflow-y-auto", className) }, props)));
147
+ },
148
+ th: (_a) => {
149
+ var { className } = _a, props = __rest(_a, ["className"]);
150
+ return (_jsx("th", Object.assign({ className: cn("aui-md-th bg-muted px-2 py-1 text-start font-medium first:rounded-ss-lg last:rounded-se-lg [[align=center]]:text-center [[align=right]]:text-right", className) }, props)));
151
+ },
152
+ td: (_a) => {
153
+ var { className } = _a, props = __rest(_a, ["className"]);
154
+ return (_jsx("td", Object.assign({ className: cn("aui-md-td border-muted-foreground/20 border-s border-b px-2 py-1 text-start last:border-e [[align=center]]:text-center [[align=right]]:text-right", className) }, props)));
155
+ },
156
+ tr: (_a) => {
157
+ var { className } = _a, props = __rest(_a, ["className"]);
158
+ return (_jsx("tr", Object.assign({ className: cn("aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-es-lg [&:last-child>td:last-child]:rounded-ee-lg", className) }, props)));
159
+ },
160
+ li: (_a) => {
161
+ var { className } = _a, props = __rest(_a, ["className"]);
162
+ return (_jsx("li", Object.assign({ className: cn("aui-md-li leading-[1.7]", className) }, props)));
163
+ },
164
+ sup: (_a) => {
165
+ var { className } = _a, props = __rest(_a, ["className"]);
166
+ return (_jsx("sup", Object.assign({ className: cn("aui-md-sup [&>a]:text-xs [&>a]:no-underline", className) }, props)));
167
+ },
168
+ pre: (_a) => {
169
+ var { className } = _a, props = __rest(_a, ["className"]);
170
+ return (_jsx("pre", Object.assign({ className: cn("aui-md-pre overflow-x-auto rounded-t-none rounded-b-lg border border-border/50 border-t-0 bg-muted/30 p-3 text-xs leading-relaxed", className) }, props)));
171
+ },
172
+ code: function Code(_a) {
173
+ var { className } = _a, props = __rest(_a, ["className"]);
174
+ const isCodeBlock = useIsMarkdownCodeBlock();
175
+ return (_jsx("code", Object.assign({ className: cn(!isCodeBlock &&
176
+ "aui-md-inline-code rounded-md border border-border/50 bg-muted/50 px-1.5 py-0.5 font-mono text-[0.85em]", className) }, props)));
177
+ },
178
+ CodeHeader,
179
+ });
180
+ function RemoteImageLink({ href, className, }) {
181
+ return _jsx(MarkdownImage, { src: href, alt: "\u56FE\u7247", className: className });
182
+ }
183
+ function MarkdownImage({ src, alt, className, }) {
184
+ if (typeof src !== "string")
185
+ return null;
186
+ return (_jsx(Image.Root, { className: cn("my-2", className), children: _jsx(Image.Zoom, { src: src, alt: alt || "Image content", children: _jsx(Image.Preview, { src: src, alt: alt || "Image content" }) }) }));
187
+ }
188
+ function LocalImage({ path, className }) {
189
+ const fileName = getLocalImageFileName(path);
190
+ const previewUrl = getLocalImagePreviewUrl(path);
191
+ return (_jsxs(Image.Root, { className: cn("my-2", className), children: [_jsx(Image.Zoom, { src: previewUrl, alt: fileName, children: _jsx(Image.Preview, { src: previewUrl, alt: fileName }) }), _jsx(Image.Filename, { children: fileName })] }));
192
+ }
193
+ function LocalFile({ path, className }) {
194
+ const fileName = getLocalFileName(path);
195
+ const openFile = () => {
196
+ fetch("/api/local-files/open", {
197
+ method: "POST",
198
+ headers: { "content-type": "application/json" },
199
+ body: JSON.stringify({ path }),
200
+ }).catch(() => { });
201
+ };
202
+ return (_jsxs(File.Root, { role: "button", tabIndex: 0, className: cn("my-2 cursor-pointer", className), onClick: openFile, onKeyDown: (event) => {
203
+ if (event.key === "Enter" || event.key === " ") {
204
+ event.preventDefault();
205
+ openFile();
206
+ }
207
+ }, children: [_jsx(File.Icon, {}), _jsx(File.Name, { children: fileName })] }));
208
+ }
@@ -0,0 +1,27 @@
1
+ import { ComposerPrimitive } from "@assistant-ui/react";
2
+ import type { ComponentPropsWithoutRef, FC, ReactNode } from "react";
3
+ type ComposerInputProps = ComponentPropsWithoutRef<typeof ComposerPrimitive.Input>;
4
+ export type ComposerProps = {
5
+ placeholder?: string;
6
+ ariaLabel?: string;
7
+ addAttachmentLabel?: string;
8
+ sendLabel?: string;
9
+ showAttachments?: boolean;
10
+ showCommandMenu?: boolean;
11
+ showSelectors?: boolean;
12
+ leadingActions?: ReactNode;
13
+ trailingActions?: ReactNode;
14
+ triggerPopovers?: ReactNode;
15
+ onPaste?: ComposerInputProps["onPaste"];
16
+ };
17
+ export type ComposerActionProps = {
18
+ addAttachmentLabel?: string;
19
+ sendLabel?: string;
20
+ showAddAttachment?: boolean;
21
+ showSelectors?: boolean;
22
+ leadingActions?: ReactNode;
23
+ trailingActions?: ReactNode;
24
+ };
25
+ export declare const Composer: FC<ComposerProps>;
26
+ export declare const ComposerAction: FC<ComposerActionProps>;
27
+ export {};
@@ -0,0 +1,15 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { AuiIf, ComposerPrimitive } from "@assistant-ui/react";
4
+ import { ArrowUpIcon, SquareIcon } from "lucide-react";
5
+ import { AcpCommandMenu } from "../acp-command-menu.mjs";
6
+ import { AcpComposerSelectors } from "../acp-selectors.mjs";
7
+ import { ComposerAddAttachment, ComposerAttachments, } from "../attachment.mjs";
8
+ import { TooltipIconButton } from "../tooltip-icon-button.mjs";
9
+ import { Button } from "../../ui/button.mjs";
10
+ export const Composer = ({ addAttachmentLabel, ariaLabel = "消息输入框", leadingActions, onPaste, placeholder = "输入 / 使用技能,或直接发送消息...", sendLabel, showAttachments = true, showCommandMenu = true, showSelectors = true, trailingActions, triggerPopovers, }) => {
11
+ return (_jsx(ComposerPrimitive.Root, { className: "aui-composer-root relative flex w-full flex-col", children: _jsx(ComposerPrimitive.AttachmentDropzone, { asChild: true, children: _jsxs("div", { "data-slot": "aui_composer-shell", className: "flex w-full flex-col gap-2 rounded-(--composer-radius) border bg-background p-(--composer-padding) transition-shadow focus-within:border-ring/75 focus-within:ring-2 focus-within:ring-ring/20 data-[dragging=true]:border-ring data-[dragging=true]:border-dashed data-[dragging=true]:bg-accent/50", children: [_jsxs(ComposerPrimitive.Unstable_TriggerPopoverRoot, { children: [showAttachments ? _jsx(ComposerAttachments, {}) : null, _jsx(ComposerPrimitive.Input, { placeholder: placeholder, className: "aui-composer-input max-h-32 min-h-10 w-full resize-none bg-transparent px-1.75 py-1 text-[13px] outline-none placeholder:text-muted-foreground/80 md:text-sm", rows: 1, autoFocus: true, "aria-label": ariaLabel, onPaste: onPaste }), showCommandMenu ? _jsx(AcpCommandMenu, {}) : null, triggerPopovers] }), _jsx(ComposerAction, { addAttachmentLabel: addAttachmentLabel, leadingActions: leadingActions, sendLabel: sendLabel, showAddAttachment: showAttachments, showSelectors: showSelectors, trailingActions: trailingActions })] }) }) }));
12
+ };
13
+ export const ComposerAction = ({ addAttachmentLabel, leadingActions, sendLabel = "发送消息", showAddAttachment = true, showSelectors = true, trailingActions, }) => {
14
+ return (_jsxs("div", { className: "aui-composer-action-wrapper relative flex items-center justify-between text-[13px] md:text-sm", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-1", children: [showAddAttachment ? (_jsx(ComposerAddAttachment, { label: addAttachmentLabel })) : null, showSelectors ? _jsx(AcpComposerSelectors, {}) : null, leadingActions] }), _jsxs("div", { className: "flex items-center gap-1", children: [trailingActions, _jsx(AuiIf, { condition: (s) => !s.thread.isRunning, children: _jsx(ComposerPrimitive.Send, { asChild: true, children: _jsx(TooltipIconButton, { tooltip: sendLabel, side: "bottom", type: "button", variant: "default", size: "icon", className: "aui-composer-send size-8 rounded-full", "aria-label": sendLabel, children: _jsx(ArrowUpIcon, { className: "aui-composer-send-icon size-4" }) }) }) }), _jsx(AuiIf, { condition: (s) => s.thread.isRunning, children: _jsx(ComposerPrimitive.Cancel, { asChild: true, children: _jsx(Button, { type: "button", variant: "default", size: "icon", className: "aui-composer-cancel size-8 rounded-full", "aria-label": "\u505C\u6B62\u751F\u6210", children: _jsx(SquareIcon, { className: "aui-composer-cancel-icon size-3 fill-current" }) }) }) })] })] }));
15
+ };
@@ -0,0 +1,2 @@
1
+ import type { FC } from "react";
2
+ export declare const ContextChips: FC;
@@ -0,0 +1,123 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { FileTextIcon, StickyNoteIcon, XIcon } from "lucide-react";
4
+ import { Button } from "../../ui/button.mjs";
5
+ import { Tooltip, TooltipContent, TooltipTrigger, } from "../../ui/tooltip.mjs";
6
+ import { useAcpUiRuntimeContext } from "../../../lib/acp2aisdk/client-context.mjs";
7
+ const PATH_TOOLTIP_MAX_LINE_CHARS = 42;
8
+ function isAbsoluteFilePath(path) {
9
+ return (path.startsWith("/") ||
10
+ path.startsWith("\\\\") ||
11
+ /^[A-Za-z]:[\\/]/.test(path));
12
+ }
13
+ function getFullFilePath(item, workspacePath) {
14
+ const filePath = item.path.trim();
15
+ if (!filePath || isAbsoluteFilePath(filePath) || !workspacePath) {
16
+ return filePath || item.path;
17
+ }
18
+ const normalizedWorkspacePath = workspacePath.replace(/[\\/]+$/g, "");
19
+ const normalizedFilePath = filePath.replace(/^[\\/]+/g, "");
20
+ const separator = normalizedWorkspacePath.includes("\\") &&
21
+ !normalizedWorkspacePath.includes("/")
22
+ ? "\\"
23
+ : "/";
24
+ return `${normalizedWorkspacePath}${separator}${normalizedFilePath}`;
25
+ }
26
+ function splitPathTooltipLines(path) {
27
+ const parts = [];
28
+ let start = 0;
29
+ for (let index = 0; index < path.length; index += 1) {
30
+ const char = path[index];
31
+ if (char !== "/" && char !== "\\")
32
+ continue;
33
+ parts.push(path.slice(start, index + 1));
34
+ start = index + 1;
35
+ }
36
+ if (start < path.length)
37
+ parts.push(path.slice(start));
38
+ if (parts.length === 0)
39
+ return [path];
40
+ const lines = [];
41
+ let currentLine = "";
42
+ for (const part of parts) {
43
+ if (currentLine &&
44
+ currentLine.length + part.length > PATH_TOOLTIP_MAX_LINE_CHARS) {
45
+ lines.push(currentLine);
46
+ currentLine = "";
47
+ }
48
+ if (part.length <= PATH_TOOLTIP_MAX_LINE_CHARS) {
49
+ currentLine += part;
50
+ continue;
51
+ }
52
+ for (let index = 0; index < part.length; index += PATH_TOOLTIP_MAX_LINE_CHARS) {
53
+ const chunk = part.slice(index, index + PATH_TOOLTIP_MAX_LINE_CHARS);
54
+ if (currentLine) {
55
+ lines.push(currentLine);
56
+ currentLine = "";
57
+ }
58
+ if (chunk.length === PATH_TOOLTIP_MAX_LINE_CHARS) {
59
+ lines.push(chunk);
60
+ }
61
+ else {
62
+ currentLine = chunk;
63
+ }
64
+ }
65
+ }
66
+ if (currentLine)
67
+ lines.push(currentLine);
68
+ return lines;
69
+ }
70
+ function formatFilePathTooltip(path) {
71
+ return splitPathTooltipLines(path).join("\n");
72
+ }
73
+ function getFileChipLabel(item) {
74
+ return (item.name || item.path.split(/[\\/]/).filter(Boolean).at(-1) || item.path);
75
+ }
76
+ function getAnnotationTargetLabel(item) {
77
+ if (item.target.label)
78
+ return item.target.label;
79
+ if (item.target.type === "web-element") {
80
+ return (item.target.elementId || item.target.selector || item.target.url || "网页");
81
+ }
82
+ if (item.target.type === "canvas-element") {
83
+ return (item.target.elementId ||
84
+ item.target.elementType ||
85
+ item.target.canvasId ||
86
+ item.target.filePath ||
87
+ "画布");
88
+ }
89
+ return item.target.filePath || item.target.quote || "文本";
90
+ }
91
+ function getAnnotationChipLabel(item) {
92
+ return item.title || getAnnotationTargetLabel(item) || item.body;
93
+ }
94
+ function getContextChipLabel(item) {
95
+ if (item.kind === "file")
96
+ return getFileChipLabel(item);
97
+ return getAnnotationChipLabel(item);
98
+ }
99
+ function getContextChipTooltip(item, workspacePath) {
100
+ if (item.kind === "file")
101
+ return getFullFilePath(item, workspacePath);
102
+ return getAnnotationChipLabel(item);
103
+ }
104
+ export const ContextChips = () => {
105
+ const { contextBundle, removeContextItems, workspacePath } = useAcpUiRuntimeContext();
106
+ if (contextBundle.items.length === 0)
107
+ return null;
108
+ return (_jsx("div", { className: "flex min-h-11 w-full items-center", children: _jsx("div", { className: "flex w-full flex-wrap items-center gap-1.5 px-1", children: contextBundle.items.map((item) => {
109
+ const id = item.id;
110
+ if (!id)
111
+ return null;
112
+ const label = getContextChipLabel(item);
113
+ const tooltip = getContextChipTooltip(item, workspacePath);
114
+ const Icon = item.kind === "file" ? FileTextIcon : StickyNoteIcon;
115
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "inline-flex max-w-full items-center gap-1.5 rounded-md border bg-muted/50 px-2 py-1 text-muted-foreground text-xs", children: [_jsx(Icon, { className: "size-3.5 shrink-0" }), _jsx("span", { className: "min-w-0 max-w-48 truncate", children: label }), _jsx(Button, { type: "button", variant: "ghost", size: "icon-xs", className: "-me-1 size-5 rounded-sm text-muted-foreground hover:text-foreground", "aria-label": "\u79FB\u9664\u4E0A\u4E0B\u6587", onClick: () => removeContextItems([id]), children: _jsx(XIcon, { className: "size-3" }) })] }) }), _jsx(TooltipContent, { side: "top", className: "whitespace-pre-wrap break-normal text-left [overflow-wrap:anywhere]", style: {
116
+ width: "max-content",
117
+ maxWidth: "min(28rem, calc(100vw - 2rem))",
118
+ textWrap: "wrap",
119
+ }, children: item.kind === "file"
120
+ ? formatFilePathTooltip(tooltip)
121
+ : tooltip })] }, id));
122
+ }) }) }));
123
+ };
@@ -0,0 +1,9 @@
1
+ import type { FC } from "react";
2
+ export declare const ThreadEmptyState: FC<{
3
+ isHistoryRoute: boolean;
4
+ }>;
5
+ export declare const ThreadWelcome: FC;
6
+ export declare const ThreadHistoryEmpty: FC;
7
+ export declare const ThreadHistoryLoading: FC;
8
+ export declare const ThreadSuggestions: FC;
9
+ export declare const ThreadSuggestionItem: FC;
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { SuggestionPrimitive, ThreadPrimitive } from "@assistant-ui/react";
4
+ import { Button } from "../../ui/button.mjs";
5
+ export const ThreadEmptyState = ({ isHistoryRoute, }) => {
6
+ if (isHistoryRoute)
7
+ return _jsx(ThreadHistoryEmpty, {});
8
+ return _jsx(ThreadWelcome, {});
9
+ };
10
+ export const ThreadWelcome = () => {
11
+ return (_jsxs("div", { className: "aui-thread-welcome-root my-auto flex grow flex-col", children: [_jsx("div", { className: "aui-thread-welcome-center flex w-full grow flex-col items-center justify-center", children: _jsxs("div", { className: "aui-thread-welcome-message flex size-full flex-col justify-center px-4", children: [_jsx("h1", { className: "aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both font-semibold text-2xl duration-200", children: "\u51C6\u5907\u597D\u4E86" }), _jsx("p", { className: "aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-muted-foreground text-xl delay-75 duration-200", children: "\u53D1\u6765\u4F60\u7684\u60F3\u6CD5\uFF0C\u6211\u4EEC\u4E00\u8D77\u5F00\u59CB\u3002" })] }) }), _jsx(ThreadSuggestions, {})] }));
12
+ };
13
+ export const ThreadHistoryEmpty = () => {
14
+ return (_jsx("div", { className: "aui-thread-welcome-root my-auto flex grow flex-col", children: _jsx("div", { className: "aui-thread-welcome-center flex w-full grow flex-col items-center justify-center", children: _jsxs("div", { className: "aui-thread-welcome-message flex size-full flex-col justify-center px-4", children: [_jsx("h1", { className: "aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both font-semibold text-2xl duration-200", children: "\u8FD8\u6CA1\u6709\u53EF\u663E\u793A\u7684\u56DE\u590D" }), _jsx("p", { className: "aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-muted-foreground text-xl delay-75 duration-200", children: "\u4F60\u53EF\u4EE5\u7EE7\u7EED\u53D1\u9001\u6D88\u606F\uFF0C\u6211\u4F1A\u63A5\u7740\u5E2E\u4F60\u5904\u7406\u3002" })] }) }) }));
15
+ };
16
+ export const ThreadHistoryLoading = () => {
17
+ return (_jsx("div", { className: "aui-thread-welcome-root my-auto flex grow flex-col", children: _jsx("div", { className: "aui-thread-welcome-center flex w-full grow flex-col items-center justify-center", children: _jsxs("div", { className: "aui-thread-welcome-message flex size-full flex-col justify-center px-4", children: [_jsx("h1", { className: "aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both font-semibold text-2xl duration-200", children: "\u6B63\u5728\u6253\u5F00\u5BF9\u8BDD" }), _jsx("p", { className: "aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-muted-foreground text-xl delay-75 duration-200", children: "\u7A0D\u7B49\u4E00\u4E0B\uFF0C\u6B63\u5728\u6574\u7406\u8BB0\u5F55\u3002" })] }) }) }));
18
+ };
19
+ export const ThreadSuggestions = () => {
20
+ return (_jsx("div", { className: "aui-thread-welcome-suggestions grid w-full @md:grid-cols-2 gap-2 pb-4", children: _jsx(ThreadPrimitive.Suggestions, { children: () => _jsx(ThreadSuggestionItem, {}) }) }));
21
+ };
22
+ export const ThreadSuggestionItem = () => {
23
+ return (_jsx("div", { className: "aui-thread-welcome-suggestion-display fade-in slide-in-from-bottom-2 @md:nth-[n+3]:block nth-[n+3]:hidden animate-in fill-mode-both duration-200", children: _jsx(SuggestionPrimitive.Trigger, { send: true, asChild: true, children: _jsxs(Button, { variant: "ghost", className: "aui-thread-welcome-suggestion h-auto w-full @md:flex-col flex-wrap items-start justify-start gap-1 rounded-3xl border bg-background px-4 py-3 text-start text-sm transition-colors hover:bg-muted", children: [_jsx(SuggestionPrimitive.Title, { className: "aui-thread-welcome-suggestion-text-1 font-medium" }), _jsx(SuggestionPrimitive.Description, { className: "aui-thread-welcome-suggestion-text-2 text-muted-foreground empty:hidden" })] }) }) }));
24
+ };
@@ -0,0 +1,11 @@
1
+ import { type FC } from "react";
2
+ export type ThreadProps = {
3
+ isHistoryRoute?: boolean;
4
+ };
5
+ export declare const Thread: FC<ThreadProps>;
6
+ export { Composer, ComposerAction, type ComposerActionProps, type ComposerProps, } from "./composer";
7
+ export { ContextChips } from "./context-chips";
8
+ export { ThreadEmptyState, ThreadHistoryEmpty, ThreadHistoryLoading, ThreadSuggestionItem, ThreadSuggestions, ThreadWelcome, } from "./empty-state";
9
+ export { MessageList, ThreadMessage } from "./message-list";
10
+ export { AssistantActionBar, AssistantMessage, BranchPicker, EditComposer, MessageError, UserActionBar, UserMessage, } from "./messages";
11
+ export { ThreadScrollToBottom } from "./scroll-to-bottom";
@@ -0,0 +1,43 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { AuiIf, ThreadPrimitive, useAuiState } from "@assistant-ui/react";
4
+ import { useEffect, useState } from "react";
5
+ import { Composer } from "./composer.mjs";
6
+ import { ContextChips } from "./context-chips.mjs";
7
+ import { ThreadEmptyState, ThreadHistoryLoading } from "./empty-state.mjs";
8
+ import { MessageList } from "./message-list.mjs";
9
+ import { ThreadScrollToBottom } from "./scroll-to-bottom.mjs";
10
+ const HISTORY_EMPTY_STATE_DELAY_MS = 450;
11
+ export const Thread = ({ isHistoryRoute = false }) => {
12
+ const messageCount = useAuiState((s) => s.thread.messages.length);
13
+ const isLoading = useAuiState((s) => s.thread.isLoading);
14
+ const showHistoryEmpty = useDebouncedHistoryEmptyState({
15
+ isHistoryRoute,
16
+ isLoading,
17
+ messageCount,
18
+ });
19
+ const showLoadingState = isHistoryRoute && messageCount === 0 && (isLoading || !showHistoryEmpty);
20
+ return (_jsx(ThreadPrimitive.Root, { className: "aui-root aui-thread-root @container flex h-full flex-col bg-background", style: {
21
+ ["--thread-max-width"]: "44rem",
22
+ ["--composer-radius"]: "24px",
23
+ ["--composer-padding"]: "10px",
24
+ }, children: _jsx(ThreadPrimitive.Viewport, { turnAnchor: "top", "data-slot": "aui_thread-viewport", className: "relative flex flex-1 flex-col overflow-x-auto overflow-y-auto scroll-smooth", children: _jsxs("div", { className: "mx-auto flex w-full max-w-(--thread-max-width) flex-1 flex-col px-4 pt-4", children: [_jsx(AuiIf, { condition: () => showLoadingState, children: _jsx(ThreadHistoryLoading, {}) }), _jsx(AuiIf, { condition: () => messageCount === 0 && (!isHistoryRoute || showHistoryEmpty), children: _jsx(ThreadEmptyState, { isHistoryRoute: isHistoryRoute }) }), _jsx(MessageList, {}), _jsxs(ThreadPrimitive.ViewportFooter, { className: "aui-thread-viewport-footer sticky bottom-0 mt-auto flex flex-col gap-0 overflow-visible rounded-t-(--composer-radius) bg-background pb-4 md:pb-6", children: [_jsx(ThreadScrollToBottom, {}), _jsx(ContextChips, {}), _jsx(Composer, {})] })] }) }) }));
25
+ };
26
+ function useDebouncedHistoryEmptyState({ isHistoryRoute, isLoading, messageCount, }) {
27
+ const [showEmpty, setShowEmpty] = useState(false);
28
+ useEffect(() => {
29
+ if (!isHistoryRoute || isLoading || messageCount > 0) {
30
+ setShowEmpty(false);
31
+ return;
32
+ }
33
+ const timeout = window.setTimeout(() => setShowEmpty(true), HISTORY_EMPTY_STATE_DELAY_MS);
34
+ return () => window.clearTimeout(timeout);
35
+ }, [isHistoryRoute, isLoading, messageCount]);
36
+ return showEmpty;
37
+ }
38
+ export { Composer, ComposerAction, } from "./composer.mjs";
39
+ export { ContextChips } from "./context-chips.mjs";
40
+ export { ThreadEmptyState, ThreadHistoryEmpty, ThreadHistoryLoading, ThreadSuggestionItem, ThreadSuggestions, ThreadWelcome, } from "./empty-state.mjs";
41
+ export { MessageList, ThreadMessage } from "./message-list.mjs";
42
+ export { AssistantActionBar, AssistantMessage, BranchPicker, EditComposer, MessageError, UserActionBar, UserMessage, } from "./messages.mjs";
43
+ export { ThreadScrollToBottom } from "./scroll-to-bottom.mjs";
@@ -0,0 +1,3 @@
1
+ import type { FC } from "react";
2
+ export declare const MessageList: FC;
3
+ export declare const ThreadMessage: FC;
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { ThreadPrimitive, useAuiState } from "@assistant-ui/react";
4
+ import { AssistantMessage, EditComposer, UserMessage } from "./messages.mjs";
5
+ export const MessageList = () => {
6
+ return (_jsx("div", { "data-slot": "aui_message-group", className: "mb-10 flex flex-col gap-y-8 empty:hidden", children: _jsx(ThreadPrimitive.Messages, { children: () => _jsx(ThreadMessage, {}) }) }));
7
+ };
8
+ export const ThreadMessage = () => {
9
+ const role = useAuiState((s) => s.message.role);
10
+ const isEditing = useAuiState((s) => s.message.composer.isEditing);
11
+ if (isEditing)
12
+ return _jsx(EditComposer, {});
13
+ if (role === "user")
14
+ return _jsx(UserMessage, {});
15
+ return _jsx(AssistantMessage, {});
16
+ };
@@ -0,0 +1,9 @@
1
+ import { BranchPickerPrimitive } from "@assistant-ui/react";
2
+ import type { FC } from "react";
3
+ export declare const MessageError: FC;
4
+ export declare const AssistantMessage: FC;
5
+ export declare const AssistantActionBar: FC;
6
+ export declare const UserMessage: FC;
7
+ export declare const UserActionBar: FC;
8
+ export declare const EditComposer: FC;
9
+ export declare const BranchPicker: FC<BranchPickerPrimitive.Root.Props>;
@@ -0,0 +1,71 @@
1
+ "use client";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
+ import { ActionBarMorePrimitive, ActionBarPrimitive, AuiIf, BranchPickerPrimitive, ComposerPrimitive, ErrorPrimitive, MessagePrimitive, useAuiState, } from "@assistant-ui/react";
15
+ import { CheckIcon, ChevronLeftIcon, ChevronRightIcon, CopyIcon, DownloadIcon, MoreHorizontalIcon, PencilIcon, RefreshCwIcon, } from "lucide-react";
16
+ import { AcpElicitationOptionListCard, isAcpElicitationOptionListPart, } from "../acp-elicitation-option-list.mjs";
17
+ import { UserMessageAttachments } from "../attachment.mjs";
18
+ import { File } from "../file.mjs";
19
+ import { ImageMessage } from "../image.mjs";
20
+ import { MarkdownText } from "../markdown-text.mjs";
21
+ import { ToolFallback } from "../tool-fallback.mjs";
22
+ import { TooltipIconButton } from "../tooltip-icon-button.mjs";
23
+ import { Button } from "../../ui/button.mjs";
24
+ import { cn } from "../../../lib/utils.mjs";
25
+ import { renderRegisteredToolCallPart } from "../../../tools/ui-registry.mjs";
26
+ import { isUserChoiceResultMessageText } from "../../../tools/user-choice/shared.mjs";
27
+ export const MessageError = () => {
28
+ return (_jsx(MessagePrimitive.Error, { children: _jsx(ErrorPrimitive.Root, { className: "aui-message-error-root mt-2 rounded-md border border-destructive bg-destructive/10 p-3 text-destructive text-sm dark:bg-destructive/5 dark:text-red-200", children: _jsx(ErrorPrimitive.Message, { className: "aui-message-error-message line-clamp-2" }) }) }));
29
+ };
30
+ export const AssistantMessage = () => {
31
+ const ACTION_BAR_PT = "pt-1.5";
32
+ const ACTION_BAR_HEIGHT = `-mb-7.5 min-h-7.5 ${ACTION_BAR_PT}`;
33
+ return (_jsxs(MessagePrimitive.Root, { "data-slot": "aui_assistant-message-root", "data-role": "assistant", className: "fade-in slide-in-from-bottom-1 relative animate-in duration-150 [contain-intrinsic-size:auto_300px] [content-visibility:auto]", children: [_jsxs("div", { "data-slot": "aui_assistant-message-content", className: "wrap-break-word px-2 text-[15px] text-foreground leading-relaxed md:text-base", children: [_jsx(MessagePrimitive.Parts, { children: ({ part }) => {
34
+ var _a;
35
+ if (part.type === "text")
36
+ return _jsx(MarkdownText, {});
37
+ if (part.type === "image")
38
+ return _jsx(ImageMessage, Object.assign({}, part));
39
+ if (part.type === "file")
40
+ return _jsx(File, Object.assign({}, part));
41
+ if (part.type === "tool-call") {
42
+ if (isAcpElicitationOptionListPart(part)) {
43
+ return _jsx(AcpElicitationOptionListCard, Object.assign({}, part));
44
+ }
45
+ const registeredTool = renderRegisteredToolCallPart(part);
46
+ if (registeredTool)
47
+ return registeredTool;
48
+ return (_a = part.toolUI) !== null && _a !== void 0 ? _a : _jsx(ToolFallback, Object.assign({}, part));
49
+ }
50
+ return null;
51
+ } }), _jsx(MessageError, {})] }), _jsxs("div", { "data-slot": "aui_assistant-message-footer", className: cn("ms-2 flex items-center", ACTION_BAR_HEIGHT), children: [_jsx(BranchPicker, {}), _jsx(AssistantActionBar, {})] })] }));
52
+ };
53
+ export const AssistantActionBar = () => {
54
+ return (_jsxs(ActionBarPrimitive.Root, { hideWhenRunning: true, autohide: "not-last", className: "aui-assistant-action-bar-root col-start-3 row-start-2 -ms-1 flex gap-1 text-muted-foreground", children: [_jsx(ActionBarPrimitive.Copy, { asChild: true, children: _jsxs(TooltipIconButton, { tooltip: "\u590D\u5236", children: [_jsx(AuiIf, { condition: (s) => s.message.isCopied, children: _jsx(CheckIcon, {}) }), _jsx(AuiIf, { condition: (s) => !s.message.isCopied, children: _jsx(CopyIcon, {}) })] }) }), _jsx(ActionBarPrimitive.Reload, { asChild: true, children: _jsx(TooltipIconButton, { tooltip: "\u91CD\u65B0\u751F\u6210", children: _jsx(RefreshCwIcon, {}) }) }), _jsxs(ActionBarMorePrimitive.Root, { children: [_jsx(ActionBarMorePrimitive.Trigger, { asChild: true, children: _jsx(TooltipIconButton, { tooltip: "\u66F4\u591A", className: "data-[state=open]:bg-accent", children: _jsx(MoreHorizontalIcon, {}) }) }), _jsx(ActionBarMorePrimitive.Content, { side: "bottom", align: "start", className: "aui-action-bar-more-content z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md", children: _jsx(ActionBarPrimitive.ExportMarkdown, { asChild: true, children: _jsxs(ActionBarMorePrimitive.Item, { className: "aui-action-bar-more-item flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground", children: [_jsx(DownloadIcon, { className: "size-4" }), "\u5BFC\u51FA\u4E3A Markdown"] }) }) })] })] }));
55
+ };
56
+ export const UserMessage = () => {
57
+ const isInternalUserChoiceResult = useAuiState((state) => state.message.content.some((part) => part.type === "text" && isUserChoiceResultMessageText(part.text)));
58
+ if (isInternalUserChoiceResult)
59
+ return null;
60
+ return (_jsxs(MessagePrimitive.Root, { "data-slot": "aui_user-message-root", className: "fade-in slide-in-from-bottom-1 grid animate-in auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] content-start gap-y-2 px-2 duration-150 [contain-intrinsic-size:auto_60px] [content-visibility:auto] [&:where(>*)]:col-start-2", "data-role": "user", children: [_jsx(UserMessageAttachments, {}), _jsxs("div", { className: "aui-user-message-content-wrapper relative col-start-2 min-w-0", children: [_jsx("div", { className: "aui-user-message-content wrap-break-word peer rounded-2xl bg-muted px-4 py-2.5 text-[15px] text-foreground md:text-base empty:hidden", children: _jsx(MessagePrimitive.Parts, { components: { Image: ImageMessage, File } }) }), _jsx("div", { className: "aui-user-action-bar-wrapper absolute start-0 top-1/2 -translate-x-full -translate-y-1/2 pe-2 peer-empty:hidden rtl:translate-x-full", children: _jsx(UserActionBar, {}) })] }), _jsx(BranchPicker, { "data-slot": "aui_user-branch-picker", className: "col-span-full col-start-1 row-start-3 -me-1 justify-end" })] }));
61
+ };
62
+ export const UserActionBar = () => {
63
+ return (_jsx(ActionBarPrimitive.Root, { hideWhenRunning: true, autohide: "not-last", className: "aui-user-action-bar-root flex flex-col items-end", children: _jsx(ActionBarPrimitive.Edit, { asChild: true, children: _jsx(TooltipIconButton, { tooltip: "\u7F16\u8F91", className: "aui-user-action-edit p-4", children: _jsx(PencilIcon, {}) }) }) }));
64
+ };
65
+ export const EditComposer = () => {
66
+ return (_jsx(MessagePrimitive.Root, { "data-slot": "aui_edit-composer-wrapper", className: "flex flex-col px-2", children: _jsxs(ComposerPrimitive.Root, { className: "aui-edit-composer-root ms-auto flex w-full max-w-[85%] flex-col rounded-2xl bg-muted", children: [_jsx(ComposerPrimitive.Input, { className: "aui-edit-composer-input min-h-14 w-full resize-none bg-transparent p-4 text-foreground text-sm outline-none", autoFocus: true }), _jsxs("div", { className: "aui-edit-composer-footer mx-3 mb-3 flex items-center gap-2 self-end", children: [_jsx(ComposerPrimitive.Cancel, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "sm", children: "\u53D6\u6D88" }) }), _jsx(ComposerPrimitive.Send, { asChild: true, children: _jsx(Button, { size: "sm", children: "\u66F4\u65B0" }) })] })] }) }));
67
+ };
68
+ export const BranchPicker = (_a) => {
69
+ var { className } = _a, rest = __rest(_a, ["className"]);
70
+ return (_jsxs(BranchPickerPrimitive.Root, Object.assign({ hideWhenSingleBranch: true, className: cn("aui-branch-picker-root -ms-2 me-2 inline-flex items-center text-muted-foreground text-xs", className) }, rest, { children: [_jsx(BranchPickerPrimitive.Previous, { asChild: true, children: _jsx(TooltipIconButton, { tooltip: "\u4E0A\u4E00\u4E2A\u7248\u672C", children: _jsx(ChevronLeftIcon, {}) }) }), _jsxs("span", { className: "aui-branch-picker-state font-medium", children: [_jsx(BranchPickerPrimitive.Number, {}), " / ", _jsx(BranchPickerPrimitive.Count, {})] }), _jsx(BranchPickerPrimitive.Next, { asChild: true, children: _jsx(TooltipIconButton, { tooltip: "\u4E0B\u4E00\u4E2A\u7248\u672C", children: _jsx(ChevronRightIcon, {}) }) })] })));
71
+ };
@@ -0,0 +1,2 @@
1
+ import type { FC } from "react";
2
+ export declare const ThreadScrollToBottom: FC;
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { ThreadPrimitive } from "@assistant-ui/react";
4
+ import { ArrowDownIcon } from "lucide-react";
5
+ import { TooltipIconButton } from "../tooltip-icon-button.mjs";
6
+ export const ThreadScrollToBottom = () => {
7
+ return (_jsx(ThreadPrimitive.ScrollToBottom, { asChild: true, children: _jsx(TooltipIconButton, { tooltip: "\u6EDA\u52A8\u5230\u5E95\u90E8", variant: "outline", className: "aui-thread-scroll-to-bottom absolute -top-12 z-10 self-center rounded-full p-4 disabled:invisible dark:border-border dark:bg-background dark:hover:bg-accent", children: _jsx(ArrowDownIcon, {}) }) }));
8
+ };
@@ -0,0 +1,2 @@
1
+ import type { FC } from "react";
2
+ export declare const ThreadList: FC;