@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.
- package/.next/BUILD_ID +1 -0
- package/.next/app-path-routes-manifest.json +21 -0
- package/.next/build-manifest.json +22 -0
- package/.next/export-marker.json +6 -0
- package/.next/fallback-build-manifest.json +13 -0
- package/.next/images-manifest.json +68 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +90 -0
- package/.next/required-server-files.js +336 -0
- package/.next/required-server-files.json +336 -0
- package/.next/routes-manifest.json +171 -0
- package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_global-error/page/build-manifest.json +18 -0
- package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_global-error/page.js +10 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +15 -0
- package/.next/server/app/_global-error.rsc +15 -0
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_not-found/page/build-manifest.json +18 -0
- package/.next/server/app/_not-found/page/next-font-manifest.json +6 -0
- package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_not-found/page.js +13 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_not-found.html +1 -0
- package/.next/server/app/_not-found.meta +16 -0
- package/.next/server/app/_not-found.rsc +17 -0
- package/.next/server/app/_not-found.segments/_full.segment.rsc +17 -0
- package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_not-found.segments/_index.segment.rsc +6 -0
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/api/acp/capabilities/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/acp/capabilities/route/build-manifest.json +9 -0
- package/.next/server/app/api/acp/capabilities/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/acp/capabilities/route.js +9 -0
- package/.next/server/app/api/acp/capabilities/route.js.nft.json +1 -0
- package/.next/server/app/api/acp/capabilities/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/acp/commands/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/acp/commands/route/build-manifest.json +9 -0
- package/.next/server/app/api/acp/commands/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/acp/commands/route.js +6 -0
- package/.next/server/app/api/acp/commands/route.js.nft.json +1 -0
- package/.next/server/app/api/acp/commands/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/acp/runtime/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/acp/runtime/route/build-manifest.json +9 -0
- package/.next/server/app/api/acp/runtime/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/acp/runtime/route.js +6 -0
- package/.next/server/app/api/acp/runtime/route.js.nft.json +1 -0
- package/.next/server/app/api/acp/runtime/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/chat/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/chat/route/build-manifest.json +9 -0
- package/.next/server/app/api/chat/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/chat/route.js +9 -0
- package/.next/server/app/api/chat/route.js.nft.json +1 -0
- package/.next/server/app/api/chat/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/conversations/[threadId]/messages/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/conversations/[threadId]/messages/route/build-manifest.json +9 -0
- package/.next/server/app/api/conversations/[threadId]/messages/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/conversations/[threadId]/messages/route.js +8 -0
- package/.next/server/app/api/conversations/[threadId]/messages/route.js.nft.json +1 -0
- package/.next/server/app/api/conversations/[threadId]/messages/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/conversations/[threadId]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/conversations/[threadId]/route/build-manifest.json +9 -0
- package/.next/server/app/api/conversations/[threadId]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/conversations/[threadId]/route.js +8 -0
- package/.next/server/app/api/conversations/[threadId]/route.js.nft.json +1 -0
- package/.next/server/app/api/conversations/[threadId]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/conversations/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/conversations/route/build-manifest.json +9 -0
- package/.next/server/app/api/conversations/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/conversations/route.js +8 -0
- package/.next/server/app/api/conversations/route.js.nft.json +1 -0
- package/.next/server/app/api/conversations/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/local-files/image/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/local-files/image/route/build-manifest.json +9 -0
- package/.next/server/app/api/local-files/image/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/local-files/image/route.js +6 -0
- package/.next/server/app/api/local-files/image/route.js.nft.json +1 -0
- package/.next/server/app/api/local-files/image/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/local-files/open/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/local-files/open/route/build-manifest.json +9 -0
- package/.next/server/app/api/local-files/open/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/local-files/open/route.js +6 -0
- package/.next/server/app/api/local-files/open/route.js.nft.json +1 -0
- package/.next/server/app/api/local-files/open/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/output-artifacts/workspace/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/output-artifacts/workspace/route/build-manifest.json +9 -0
- package/.next/server/app/api/output-artifacts/workspace/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/output-artifacts/workspace/route.js +6 -0
- package/.next/server/app/api/output-artifacts/workspace/route.js.nft.json +1 -0
- package/.next/server/app/api/output-artifacts/workspace/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/tools/image-generation/files/[id]/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/tools/image-generation/files/[id]/route/build-manifest.json +9 -0
- package/.next/server/app/api/tools/image-generation/files/[id]/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/tools/image-generation/files/[id]/route.js +7 -0
- package/.next/server/app/api/tools/image-generation/files/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/tools/image-generation/files/[id]/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/tools/image-generation/records/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/tools/image-generation/records/route/build-manifest.json +9 -0
- package/.next/server/app/api/tools/image-generation/records/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/tools/image-generation/records/route.js +7 -0
- package/.next/server/app/api/tools/image-generation/records/route.js.nft.json +1 -0
- package/.next/server/app/api/tools/image-generation/records/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/tools/user-choice/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/tools/user-choice/route/build-manifest.json +9 -0
- package/.next/server/app/api/tools/user-choice/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/tools/user-choice/route.js +6 -0
- package/.next/server/app/api/tools/user-choice/route.js.nft.json +1 -0
- package/.next/server/app/api/tools/user-choice/route_client-reference-manifest.js +3 -0
- package/.next/server/app/favicon.ico/route/app-paths-manifest.json +3 -0
- package/.next/server/app/favicon.ico/route/build-manifest.json +9 -0
- package/.next/server/app/favicon.ico/route.js +7 -0
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
- package/.next/server/app/favicon.ico.body +0 -0
- package/.next/server/app/favicon.ico.meta +1 -0
- package/.next/server/app/page/app-paths-manifest.json +3 -0
- package/.next/server/app/page/build-manifest.json +18 -0
- package/.next/server/app/page/next-font-manifest.json +6 -0
- package/.next/server/app/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/page/server-reference-manifest.json +4 -0
- package/.next/server/app/page.js +14 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +3 -0
- package/.next/server/app/session/[provider]/[sessionId]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/session/[provider]/[sessionId]/page/build-manifest.json +18 -0
- package/.next/server/app/session/[provider]/[sessionId]/page/next-font-manifest.json +6 -0
- package/.next/server/app/session/[provider]/[sessionId]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/session/[provider]/[sessionId]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/session/[provider]/[sessionId]/page.js +16 -0
- package/.next/server/app/session/[provider]/[sessionId]/page.js.nft.json +1 -0
- package/.next/server/app/session/[provider]/[sessionId]/page_client-reference-manifest.js +3 -0
- package/.next/server/app/thread/[threadId]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/thread/[threadId]/page/build-manifest.json +18 -0
- package/.next/server/app/thread/[threadId]/page/next-font-manifest.json +6 -0
- package/.next/server/app/thread/[threadId]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/thread/[threadId]/page/server-reference-manifest.json +4 -0
- package/.next/server/app/thread/[threadId]/page.js +15 -0
- package/.next/server/app/thread/[threadId]/page.js.nft.json +1 -0
- package/.next/server/app/thread/[threadId]/page_client-reference-manifest.js +3 -0
- package/.next/server/app-paths-manifest.json +21 -0
- package/.next/server/chunks/0zjb_server_app_api_conversations_[threadId]_messages_route_actions_0poed25.js +3 -0
- package/.next/server/chunks/0zjb_server_app_api_tools_image-generation_files_[id]_route_actions_0-tbvpw.js +3 -0
- package/.next/server/chunks/0zjb_server_app_api_tools_image-generation_records_route_actions_0vu38s2.js +3 -0
- package/.next/server/chunks/[externals]_next_dist_0.m~pv6._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__04xq..~._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__07sxz4_._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0dwg3fr._.js +178 -0
- package/.next/server/chunks/[root-of-the-server]__0eanzwb._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0gqx~5k._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0iokgmz._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0j-lxr4._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ly6hop._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0nil~wi._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0tmhg7j._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0txmfnw._.js +4 -0
- package/.next/server/chunks/[root-of-the-server]__0wo0b8z._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0~mtsby._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__10-n4io._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__10g507v._.js +3 -0
- package/.next/server/chunks/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/_next-internal_server_app_api_acp_capabilities_route_actions_08lck.p.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_acp_commands_route_actions_0as.2z6.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_acp_runtime_route_actions_0o1ybkn.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_chat_route_actions_0tmcf6..js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_conversations_[threadId]_route_actions_12yq8z_.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_conversations_route_actions_131xv69.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_local-files_image_route_actions_0f~10mn.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_local-files_open_route_actions_026mg-2.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_output-artifacts_workspace_route_actions_1239-n7.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_tools_user-choice_route_actions_09xqbn_.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js +3 -0
- package/.next/server/chunks/instrumentation_ts_0zq9-xz._.js +3 -0
- package/.next/server/chunks/lib_conversations_store_ts_0gzcj38._.js +7 -0
- package/.next/server/chunks/node_modules_@vercel_oidc_dist_token_0zdeuds.js +3 -0
- package/.next/server/chunks/node_modules_next_00hve1e._.js +13 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__02qo-zr._.js +19 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0488vn3._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__08e5v4-._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__08iwq-u._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0a1m1mq._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0i9qg2.._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0icm-_h._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0piffp7._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0xn-a8p._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~c929r._.js +33 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/ssr/_0-oaqqe._.js +6 -0
- package/.next/server/chunks/ssr/_006q235._.js +3 -0
- package/.next/server/chunks/ssr/_03.pm1z._.js +108 -0
- package/.next/server/chunks/ssr/_0txwi90._.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0k77kol.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0eq97pa.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_session_[provider]_[sessionId]_page_actions_0_67qh_.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_thread_[threadId]_page_actions_11mcypo.js +3 -0
- package/.next/server/chunks/ssr/lib_conversations_store_ts_0-pd6d3._.js +4 -0
- package/.next/server/chunks/ssr/node_modules_09w7yel._.js +33 -0
- package/.next/server/chunks/ssr/node_modules_0tev5qq._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_@vercel_oidc_dist_token_0yj7kvj.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_09jzzl8._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0h9llsw._.js +6 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0t-hj0x._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0inhx6q._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0ghu-f7.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00297nb.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_002l7yi.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_02suzhc.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_04x9gct.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0nsg22r.js +4 -0
- package/.next/server/chunks/tools_image-generation_service_mjs_0k_th7-._.js +3 -0
- package/.next/server/edge/chunks/_0e82_ds._.js +3 -0
- package/.next/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_00ue99t.js +3 -0
- package/.next/server/functions-config-manifest.json +11 -0
- package/.next/server/instrumentation/middleware-manifest.json +12 -0
- package/.next/server/instrumentation.js +4 -0
- package/.next/server/instrumentation.js.nft.json +1 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +22 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +6 -0
- package/.next/server/pages/404.html +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +4 -0
- package/.next/server/prefetch-hints.json +1 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +5 -0
- package/.next/static/chunks/01xlw8hd842-c.js +1 -0
- package/.next/static/chunks/03edqrb4zdj~g.js +31 -0
- package/.next/static/chunks/03qq5fxc~pg00.js +1 -0
- package/.next/static/chunks/03~yq9q893hmn.js +1 -0
- package/.next/static/chunks/0l-_vd.~~z2bw.js +2 -0
- package/.next/static/chunks/0qid5lwcbx9s0.js +1 -0
- package/.next/static/chunks/0t.k8~x~sghva.js +4 -0
- package/.next/static/chunks/0tmpufzgpw2-w.js +1 -0
- package/.next/static/chunks/0v_ue~msygctw.js +1 -0
- package/.next/static/chunks/0y2l0xgouorae.css +1 -0
- package/.next/static/chunks/0zftsky7gte_9.js +102 -0
- package/.next/static/chunks/13nvdsh0e09d0.js +1 -0
- package/.next/static/chunks/1610ha42i.fl~.css +1 -0
- package/.next/static/chunks/turbopack-0mxz-ap91rcoe.js +1 -0
- package/.next/static/mbk_N5Gs4ZJg3lciRL6ya/_buildManifest.js +11 -0
- package/.next/static/mbk_N5Gs4ZJg3lciRL6ya/_clientMiddlewareManifest.js +1 -0
- package/.next/static/mbk_N5Gs4ZJg3lciRL6ya/_ssgManifest.js +1 -0
- package/.next/static/media/favicon.0x3dzn~oxb6tn.ico +0 -0
- package/README.md +113 -0
- package/THIRD_PARTY_NOTICES.md +34 -0
- package/bin/acp.mjs +224 -0
- package/dist/app/globals.css +146 -0
- package/dist/components/assistant-ui/acp-command-menu.d.ts +2 -0
- package/dist/components/assistant-ui/acp-command-menu.mjs +176 -0
- package/dist/components/assistant-ui/acp-elicitation-option-list.d.ts +3 -0
- package/dist/components/assistant-ui/acp-elicitation-option-list.mjs +157 -0
- package/dist/components/assistant-ui/acp-selectors.d.ts +2 -0
- package/dist/components/assistant-ui/acp-selectors.mjs +301 -0
- package/dist/components/assistant-ui/acp-tool-content.d.ts +4 -0
- package/dist/components/assistant-ui/acp-tool-content.mjs +127 -0
- package/dist/components/assistant-ui/addons/host.d.ts +4 -0
- package/dist/components/assistant-ui/addons/host.mjs +85 -0
- package/dist/components/assistant-ui/addons/image-generation-records-section.d.ts +14 -0
- package/dist/components/assistant-ui/addons/image-generation-records-section.mjs +116 -0
- package/dist/components/assistant-ui/addons/output-artifacts-section.d.ts +9 -0
- package/dist/components/assistant-ui/addons/output-artifacts-section.mjs +24 -0
- package/dist/components/assistant-ui/addons/output-artifacts.d.ts +14 -0
- package/dist/components/assistant-ui/addons/output-artifacts.mjs +87 -0
- package/dist/components/assistant-ui/addons/plan-addon.d.ts +2 -0
- package/dist/components/assistant-ui/addons/plan-addon.mjs +39 -0
- package/dist/components/assistant-ui/addons/plan-data.d.ts +5 -0
- package/dist/components/assistant-ui/addons/plan-data.mjs +97 -0
- package/dist/components/assistant-ui/addons/registry.d.ts +2 -0
- package/dist/components/assistant-ui/addons/registry.mjs +8 -0
- package/dist/components/assistant-ui/addons/types.d.ts +13 -0
- package/dist/components/assistant-ui/addons/types.mjs +1 -0
- package/dist/components/assistant-ui/attachment.d.ts +7 -0
- package/dist/components/assistant-ui/attachment.mjs +88 -0
- package/dist/components/assistant-ui/file.d.ts +37 -0
- package/dist/components/assistant-ui/file.mjs +107 -0
- package/dist/components/assistant-ui/image-generation-settings-dialog.d.ts +4 -0
- package/dist/components/assistant-ui/image-generation-settings-dialog.mjs +28 -0
- package/dist/components/assistant-ui/image.d.ts +51 -0
- package/dist/components/assistant-ui/image.mjs +215 -0
- package/dist/components/assistant-ui/markdown-text.d.ts +2 -0
- package/dist/components/assistant-ui/markdown-text.mjs +208 -0
- package/dist/components/assistant-ui/thread/composer.d.ts +27 -0
- package/dist/components/assistant-ui/thread/composer.mjs +15 -0
- package/dist/components/assistant-ui/thread/context-chips.d.ts +2 -0
- package/dist/components/assistant-ui/thread/context-chips.mjs +123 -0
- package/dist/components/assistant-ui/thread/empty-state.d.ts +9 -0
- package/dist/components/assistant-ui/thread/empty-state.mjs +24 -0
- package/dist/components/assistant-ui/thread/index.d.ts +11 -0
- package/dist/components/assistant-ui/thread/index.mjs +43 -0
- package/dist/components/assistant-ui/thread/message-list.d.ts +3 -0
- package/dist/components/assistant-ui/thread/message-list.mjs +16 -0
- package/dist/components/assistant-ui/thread/messages.d.ts +9 -0
- package/dist/components/assistant-ui/thread/messages.mjs +71 -0
- package/dist/components/assistant-ui/thread/scroll-to-bottom.d.ts +2 -0
- package/dist/components/assistant-ui/thread/scroll-to-bottom.mjs +8 -0
- package/dist/components/assistant-ui/thread-list.d.ts +2 -0
- package/dist/components/assistant-ui/thread-list.mjs +31 -0
- package/dist/components/assistant-ui/thread.d.ts +1 -0
- package/dist/components/assistant-ui/thread.mjs +2 -0
- package/dist/components/assistant-ui/threadlist-sidebar.d.ts +6 -0
- package/dist/components/assistant-ui/threadlist-sidebar.mjs +32 -0
- package/dist/components/assistant-ui/tool-fallback.d.ts +31 -0
- package/dist/components/assistant-ui/tool-fallback.mjs +114 -0
- package/dist/components/assistant-ui/tooltip-icon-button.d.ts +7 -0
- package/dist/components/assistant-ui/tooltip-icon-button.mjs +23 -0
- package/dist/components/icons/github.d.ts +3 -0
- package/dist/components/icons/github.mjs +4 -0
- package/dist/components/theme-toggle.d.ts +1 -0
- package/dist/components/theme-toggle.mjs +26 -0
- package/dist/components/tool-ui/option-list.d.ts +34 -0
- package/dist/components/tool-ui/option-list.mjs +163 -0
- package/dist/components/ui/avatar.d.ts +11 -0
- package/dist/components/ui/avatar.mjs +40 -0
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/button.mjs +47 -0
- package/dist/components/ui/collapsible.d.ts +5 -0
- package/dist/components/ui/collapsible.mjs +27 -0
- package/dist/components/ui/dialog.d.ts +17 -0
- package/dist/components/ui/dialog.mjs +58 -0
- package/dist/components/ui/input.d.ts +3 -0
- package/dist/components/ui/input.mjs +18 -0
- package/dist/components/ui/label.d.ts +4 -0
- package/dist/components/ui/label.mjs +20 -0
- package/dist/components/ui/scroll-area.d.ts +5 -0
- package/dist/components/ui/scroll-area.mjs +26 -0
- package/dist/components/ui/select.d.ts +13 -0
- package/dist/components/ui/select.mjs +59 -0
- package/dist/components/ui/separator.d.ts +4 -0
- package/dist/components/ui/separator.mjs +20 -0
- package/dist/components/ui/sheet.d.ts +14 -0
- package/dist/components/ui/sheet.mjs +61 -0
- package/dist/components/ui/sidebar.d.ts +69 -0
- package/dist/components/ui/sidebar.mjs +245 -0
- package/dist/components/ui/skeleton.d.ts +2 -0
- package/dist/components/ui/skeleton.mjs +18 -0
- package/dist/components/ui/switch.d.ts +4 -0
- package/dist/components/ui/switch.mjs +20 -0
- package/dist/components/ui/tabs.d.ts +7 -0
- package/dist/components/ui/tabs.mjs +32 -0
- package/dist/components/ui/tooltip.d.ts +7 -0
- package/dist/components/ui/tooltip.mjs +32 -0
- package/dist/hooks/use-mobile.d.ts +1 -0
- package/dist/hooks/use-mobile.mjs +15 -0
- package/dist/lib/acp2aisdk/capabilities.d.ts +6 -0
- package/dist/lib/acp2aisdk/capabilities.mjs +210 -0
- package/dist/lib/acp2aisdk/capability-cache.d.ts +17 -0
- package/dist/lib/acp2aisdk/capability-cache.mjs +259 -0
- package/dist/lib/acp2aisdk/client-context.d.ts +38 -0
- package/dist/lib/acp2aisdk/client-context.mjs +247 -0
- package/dist/lib/acp2aisdk/commands.d.ts +11 -0
- package/dist/lib/acp2aisdk/commands.mjs +121 -0
- package/dist/lib/acp2aisdk/config-options.d.ts +3 -0
- package/dist/lib/acp2aisdk/config-options.mjs +86 -0
- package/dist/lib/acp2aisdk/context.d.ts +88 -0
- package/dist/lib/acp2aisdk/context.mjs +33 -0
- package/dist/lib/acp2aisdk/default-capabilities.d.ts +275 -0
- package/dist/lib/acp2aisdk/default-capabilities.mjs +421 -0
- package/dist/lib/acp2aisdk/elicitation.d.ts +37 -0
- package/dist/lib/acp2aisdk/elicitation.mjs +193 -0
- package/dist/lib/acp2aisdk/hitl.d.ts +25 -0
- package/dist/lib/acp2aisdk/hitl.mjs +134 -0
- package/dist/lib/acp2aisdk/index.d.ts +12 -0
- package/dist/lib/acp2aisdk/index.mjs +182 -0
- package/dist/lib/acp2aisdk/mcp-servers.d.ts +17 -0
- package/dist/lib/acp2aisdk/mcp-servers.mjs +153 -0
- package/dist/lib/acp2aisdk/model-selection.d.ts +16 -0
- package/dist/lib/acp2aisdk/model-selection.mjs +65 -0
- package/dist/lib/acp2aisdk/prompt-history.d.ts +9 -0
- package/dist/lib/acp2aisdk/prompt-history.mjs +168 -0
- package/dist/lib/acp2aisdk/provider-compat.d.ts +85 -0
- package/dist/lib/acp2aisdk/provider-compat.mjs +501 -0
- package/dist/lib/acp2aisdk/provider-registry.d.ts +15 -0
- package/dist/lib/acp2aisdk/provider-registry.mjs +196 -0
- package/dist/lib/acp2aisdk/response.d.ts +3 -0
- package/dist/lib/acp2aisdk/response.mjs +33 -0
- package/dist/lib/acp2aisdk/runtime-options.d.ts +2 -0
- package/dist/lib/acp2aisdk/runtime-options.mjs +10 -0
- package/dist/lib/acp2aisdk/session-runtime.d.ts +5 -0
- package/dist/lib/acp2aisdk/session-runtime.mjs +186 -0
- package/dist/lib/acp2aisdk/session-store.d.ts +31 -0
- package/dist/lib/acp2aisdk/session-store.mjs +169 -0
- package/dist/lib/acp2aisdk/skill-command-cache.d.ts +20 -0
- package/dist/lib/acp2aisdk/skill-command-cache.mjs +122 -0
- package/dist/lib/acp2aisdk/stream-metadata.d.ts +10 -0
- package/dist/lib/acp2aisdk/stream-metadata.mjs +251 -0
- package/dist/lib/acp2aisdk/types.d.ts +129 -0
- package/dist/lib/acp2aisdk/types.mjs +0 -0
- package/dist/lib/acp2aisdk/vendor/acp-ai-provider/index.d.ts +10 -0
- package/dist/lib/acp2aisdk/vendor/acp-ai-provider/index.mjs +10 -0
- package/dist/lib/acp2aisdk/vendor/acp-ai-provider/package/index.mjs +1945 -0
- package/dist/lib/api/client.d.ts +93 -0
- package/dist/lib/api/client.mjs +199 -0
- package/dist/lib/api/cors.d.ts +2 -0
- package/dist/lib/api/cors.mjs +47 -0
- package/dist/lib/conversations/client-adapter.d.ts +21 -0
- package/dist/lib/conversations/client-adapter.mjs +329 -0
- package/dist/lib/conversations/message-repository.d.ts +8 -0
- package/dist/lib/conversations/message-repository.mjs +87 -0
- package/dist/lib/conversations/store.d.ts +17 -0
- package/dist/lib/conversations/store.mjs +678 -0
- package/dist/lib/conversations/types.d.ts +92 -0
- package/dist/lib/conversations/types.mjs +0 -0
- package/dist/lib/local-image-files.d.ts +5 -0
- package/dist/lib/local-image-files.mjs +76 -0
- package/dist/lib/local-image-paths.d.ts +7 -0
- package/dist/lib/local-image-paths.mjs +106 -0
- package/dist/lib/output-artifacts/workspace.d.ts +8 -0
- package/dist/lib/output-artifacts/workspace.mjs +174 -0
- package/dist/lib/provider-history/codex.d.ts +4 -0
- package/dist/lib/provider-history/codex.mjs +272 -0
- package/dist/lib/provider-history/index.d.ts +7 -0
- package/dist/lib/provider-history/index.mjs +88 -0
- package/dist/lib/provider-history/types.d.ts +31 -0
- package/dist/lib/provider-history/types.mjs +0 -0
- package/dist/lib/server-runtime.d.ts +22 -0
- package/dist/lib/server-runtime.mjs +78 -0
- package/dist/lib/url-routing.d.ts +18 -0
- package/dist/lib/url-routing.mjs +59 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.mjs +5 -0
- package/dist/lib/workspace-metadata.d.ts +2 -0
- package/dist/lib/workspace-metadata.mjs +20 -0
- package/dist/public-api/react.d.ts +14 -0
- package/dist/public-api/react.mjs +16 -0
- package/dist/public-api/runtime.d.ts +8 -0
- package/dist/public-api/runtime.mjs +7 -0
- package/dist/public-api/server.d.ts +5 -0
- package/dist/public-api/server.mjs +4 -0
- package/dist/public-api/styles.css +1 -0
- package/dist/public-api/ui.d.ts +13 -0
- package/dist/public-api/ui.mjs +13 -0
- package/dist/tools/client-registry.d.ts +9 -0
- package/dist/tools/client-registry.mjs +70 -0
- package/dist/tools/image-generation/client.d.ts +18 -0
- package/dist/tools/image-generation/client.mjs +31 -0
- package/dist/tools/image-generation/config.d.ts +9 -0
- package/dist/tools/image-generation/config.example.json +14 -0
- package/dist/tools/image-generation/config.mjs +11 -0
- package/dist/tools/image-generation/mcp-server.mjs +87 -0
- package/dist/tools/image-generation/registry.d.ts +13 -0
- package/dist/tools/image-generation/registry.mjs +30 -0
- package/dist/tools/image-generation/server.d.ts +6 -0
- package/dist/tools/image-generation/server.mjs +58 -0
- package/dist/tools/image-generation/service.mjs +978 -0
- package/dist/tools/image-generation/shared.d.ts +103 -0
- package/dist/tools/image-generation/shared.mjs +80 -0
- package/dist/tools/image-generation/storage.d.ts +22 -0
- package/dist/tools/image-generation/storage.mjs +8 -0
- package/dist/tools/image-generation/ui-detail.d.ts +26 -0
- package/dist/tools/image-generation/ui-detail.mjs +109 -0
- package/dist/tools/image-generation/ui.d.ts +8 -0
- package/dist/tools/image-generation/ui.mjs +121 -0
- package/dist/tools/registry.d.ts +32 -0
- package/dist/tools/registry.mjs +142 -0
- package/dist/tools/ui-registry.d.ts +3 -0
- package/dist/tools/ui-registry.mjs +20 -0
- package/dist/tools/user-choice/client.d.ts +10 -0
- package/dist/tools/user-choice/client.mjs +18 -0
- package/dist/tools/user-choice/registry.d.ts +12 -0
- package/dist/tools/user-choice/registry.mjs +21 -0
- package/dist/tools/user-choice/server.d.ts +6 -0
- package/dist/tools/user-choice/server.mjs +42 -0
- package/dist/tools/user-choice/shared.d.ts +79 -0
- package/dist/tools/user-choice/shared.mjs +56 -0
- package/dist/tools/user-choice/store.d.ts +19 -0
- package/dist/tools/user-choice/store.mjs +95 -0
- package/dist/tools/user-choice/ui.d.ts +3 -0
- package/dist/tools/user-choice/ui.mjs +396 -0
- 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,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,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,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
|
+
};
|