@geminilight/mindos 0.6.77 → 0.6.78

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 (204) hide show
  1. package/_standalone/.mindos-build-version +1 -1
  2. package/_standalone/.next/BUILD_ID +1 -1
  3. package/_standalone/.next/app-path-routes-manifest.json +26 -26
  4. package/_standalone/.next/build-manifest.json +3 -3
  5. package/_standalone/.next/cache/.previewinfo +1 -1
  6. package/_standalone/.next/cache/.rscinfo +1 -1
  7. package/_standalone/.next/cache/config.json +3 -3
  8. package/_standalone/.next/prerender-manifest.json +3 -3
  9. package/_standalone/.next/react-loadable-manifest.json +4 -4
  10. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  11. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/_standalone/.next/server/app/_global-error.html +2 -2
  13. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  14. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  21. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
  24. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  25. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  26. package/_standalone/.next/server/app/agents/page.js +1 -1
  27. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  28. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  29. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  31. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/agents/copy-skill/route.js.nft.json +1 -1
  40. package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  44. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  45. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  48. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  49. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  50. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  51. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  52. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/channels/verify/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/connect/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/embedding/route_client-reference-manifest.js +1 -1
  56. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  57. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  60. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
  62. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  63. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  64. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  65. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  66. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  68. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  69. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  70. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/im/activity/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/im/config/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/im/feishu/long-connection/route.js.nft.json +1 -1
  75. package/_standalone/.next/server/app/api/im/feishu/long-connection/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/im/status/route.js.nft.json +1 -1
  77. package/_standalone/.next/server/app/api/im/status/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/im/test/route_client-reference-manifest.js +1 -1
  79. package/_standalone/.next/server/app/api/im/webhook/feishu/route.js.nft.json +1 -1
  80. package/_standalone/.next/server/app/api/im/webhook/feishu/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/im/webhook-status/route.js.nft.json +1 -1
  82. package/_standalone/.next/server/app/api/im/webhook-status/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/inbox/clip/route.js.nft.json +1 -1
  84. package/_standalone/.next/server/app/api/inbox/clip/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  86. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  87. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  88. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/api/lint/route.js.nft.json +1 -1
  90. package/_standalone/.next/server/app/api/lint/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/mcp/direct-tools/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  101. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/obsidian/compat-report/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/obsidian/import/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  105. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  108. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  109. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  112. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  114. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  117. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  118. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  120. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  121. package/_standalone/.next/server/app/api/space-overview/route.js +1 -1
  122. package/_standalone/.next/server/app/api/space-overview/route.js.nft.json +1 -1
  123. package/_standalone/.next/server/app/api/space-overview/route_client-reference-manifest.js +1 -1
  124. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  126. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  129. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  132. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  133. package/_standalone/.next/server/app/changelog/page.js +1 -1
  134. package/_standalone/.next/server/app/changelog/page.js.nft.json +1 -1
  135. package/_standalone/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
  136. package/_standalone/.next/server/app/changes/page.js +1 -1
  137. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  138. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  139. package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
  140. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  141. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  142. package/_standalone/.next/server/app/echo/page.js +1 -1
  143. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  144. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  145. package/_standalone/.next/server/app/explore/page.js +1 -1
  146. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  147. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  148. package/_standalone/.next/server/app/help/page.js +1 -1
  149. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  150. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  151. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  152. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  153. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  154. package/_standalone/.next/server/app/login/page.js +1 -1
  155. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  156. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  157. package/_standalone/.next/server/app/page.js +1 -1
  158. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  159. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  160. package/_standalone/.next/server/app/setup/page.js +1 -1
  161. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  162. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  163. package/_standalone/.next/server/app/trash/page.js +3 -3
  164. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  165. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  166. package/_standalone/.next/server/app/view/[...path]/page.js +2 -2
  167. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  168. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  169. package/_standalone/.next/server/app-paths-manifest.json +26 -26
  170. package/_standalone/.next/server/chunks/1299.js +1 -1
  171. package/_standalone/.next/server/chunks/{5913.js → 2057.js} +2 -2
  172. package/_standalone/.next/server/chunks/4802.js +33 -33
  173. package/_standalone/.next/server/chunks/5299.js +1 -1
  174. package/_standalone/.next/server/chunks/6223.js +1 -1
  175. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  176. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  177. package/_standalone/.next/server/pages/500.html +2 -2
  178. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  179. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  180. package/_standalone/.next/static/chunks/{7011.223941e5ce187180.js → 1768.1e964db7834ecb4f.js} +2 -2
  181. package/_standalone/.next/static/chunks/{8954.b927d1b38b3c3878.js → 1937.e178266395104aa3.js} +1 -1
  182. package/_standalone/.next/static/chunks/{5358-ac2733e1433981be.js → 5358-4d1ef32068d304de.js} +1 -1
  183. package/_standalone/.next/static/chunks/app/{layout-d17d1ec3d728ab91.js → layout-5832614ed6a78167.js} +63 -63
  184. package/_standalone/.next/static/chunks/app/trash/page-21dc1c6b6490cae8.js +1 -0
  185. package/_standalone/.next/static/chunks/app/view/[...path]/{page-283e9e8b07c8949e.js → page-e5330470ce362641.js} +2 -2
  186. package/_standalone/.next/static/chunks/webpack-6a9916defe5b8b6d.js +1 -0
  187. package/_standalone/.next/trace +72 -72
  188. package/_standalone/__tests__/agent/model-config.test.ts +90 -0
  189. package/_standalone/__tests__/ask/ask-content-input-during-run.test.tsx +1 -1
  190. package/_standalone/components/ask/AskContent.tsx +1 -1
  191. package/_standalone/package-lock.json +2 -2
  192. package/_standalone/package.json +1 -1
  193. package/_standalone/tsconfig.tsbuildinfo +1 -1
  194. package/app/__tests__/agent/model-config.test.ts +90 -0
  195. package/app/__tests__/ask/ask-content-input-during-run.test.tsx +1 -1
  196. package/app/components/ask/AskContent.tsx +1 -1
  197. package/app/lib/agent/model.ts +2 -1
  198. package/app/lib/settings.ts +17 -5
  199. package/app/package.json +1 -1
  200. package/package.json +1 -1
  201. package/_standalone/.next/static/chunks/app/trash/page-9b2798b1cd1c53e3.js +0 -1
  202. package/_standalone/.next/static/chunks/webpack-8cda3cd172a0535c.js +0 -1
  203. /package/_standalone/.next/static/{xTjrONxqaI_ZUUPRRKA_X → yJdsYbp_76hvDnNeV7OCT}/_buildManifest.js +0 -0
  204. /package/_standalone/.next/static/{xTjrONxqaI_ZUUPRRKA_X → yJdsYbp_76hvDnNeV7OCT}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8954],{28954:(e,s,t)=>{t.r(s),t.d(s,{default:()=>h});var a=t(95155),r=t(12115),n=t(47650),i=t(33210),l=t(86901),o=t(41585),c=t(38798),d=t(6296),u=t(73321),m=t(91337),x=t(9339);let p=(0,x.createServerReference)("7006260f22b08966945299cbdaa60b1b284da42086",x.callServer,void 0,x.findSourceMapURL,"createSpaceAction");var b=t(5292),f=t(70620);function h({t:e,dirPaths:s}){let t=(0,u.useRouter)(),[x,h]=(0,r.useState)(!1),[g,v]=(0,r.useState)(""),[N,j]=(0,r.useState)(""),[w,y]=(0,r.useState)(""),[k,S]=(0,r.useState)(!1),[C,A]=(0,r.useState)(""),[E,I]=(0,r.useState)(""),[L,z]=(0,r.useState)(null),[R,D]=(0,r.useState)(!0),K=(0,r.useRef)(null);(0,r.useEffect)(()=>{let e=()=>{h(!0),A(""),I(""),setTimeout(()=>K.current?.focus(),80)};return window.addEventListener("mindos:create-space",e),()=>window.removeEventListener("mindos:create-space",e)},[]),(0,r.useEffect)(()=>{x&&null===L&&(0,b.w)().then(e=>{z(e),D(e)})},[x,L]);let M=(0,r.useCallback)(()=>{h(!1),v(""),j(""),y(""),A(""),I(""),z(null)},[]),P=(0,r.useCallback)(s=>s.includes("/")||s.includes("\\")?(I(e.home.spaceNameNoSlash??"Name cannot contain / or \\"),!1):(I(""),!0),[e]),T=(0,r.useMemo)(()=>{let e=g.trim();return e?(w?w+"/":"")+e+"/":""},[g,w]),$=(0,r.useCallback)(async()=>{if(!g.trim()||k||!P(g))return;S(!0),A("");let s=g.trim(),a=await p(s,N,w);if(a.success){let e=a.path??s;R&&L&&(0,b.V)(s,e,N),M(),t.refresh(),window.dispatchEvent(new Event("mindos:files-changed")),t.push(`/view/${(0,m.O0)(e+"/")}`)}else(a.error??"").includes("already exists")?A(e.home.spaceExists??"A space with this name already exists"):A(e.home.spaceCreateFailed??"Failed to create space");S(!1)},[g,N,w,k,M,t,e,P,R,L]),_=(0,r.useCallback)(e=>{"Escape"===e.key&&M(),"Enter"===e.key&&!e.shiftKey&&e.target instanceof HTMLInputElement&&(e.preventDefault(),$())},[M,$]);if(!x)return null;let F=e.home;return(0,n.createPortal)((0,a.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center",onKeyDown:_,children:[(0,a.jsx)("div",{className:"absolute inset-0 overlay-backdrop",onClick:M}),(0,a.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":F.newSpace,className:"relative w-full max-w-md mx-4 rounded-2xl border border-border bg-card shadow-xl",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between px-5 pt-5 pb-3",children:[(0,a.jsx)("h3",{className:"text-base font-semibold text-foreground",children:F.newSpace}),(0,a.jsx)("button",{onClick:M,className:"p-1 rounded-md text-muted-foreground hover:bg-muted transition-colors",children:(0,a.jsx)(i.A,{size:14})})]}),(0,a.jsxs)("div",{className:"px-5 pb-5 flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:F.spaceLocation??"Location"}),(0,a.jsx)(f.A,{dirPaths:s,value:w,onChange:y,rootLabel:F.rootLevel??"Root"})]}),(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:F.spaceName}),(0,a.jsx)("input",{ref:K,type:"text",value:g,onChange:e=>{v(e.target.value),A(""),P(e.target.value)},placeholder:"e.g. \uD83D\uDCDD Notes",maxLength:80,"aria-invalid":!!E,"aria-describedby":E?"space-name-hint":void 0,className:`w-full px-3 py-2 text-sm rounded-lg border bg-background outline-none transition-colors ${E?"border-error focus-visible:border-error":"border-border focus-visible:ring-1 focus-visible:ring-ring"}`}),E&&(0,a.jsx)("span",{id:"space-name-hint",className:"text-xs text-error",children:E})]}),(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsxs)("label",{className:"text-xs font-medium text-muted-foreground",children:[F.spaceDescription," ",(0,a.jsxs)("span",{className:"opacity-50",children:["(",F.optional??"optional",")"]})]}),(0,a.jsx)("input",{type:"text",value:N,onChange:e=>j(e.target.value),placeholder:F.spaceDescPlaceholder??"Describe the purpose of this space",maxLength:200,className:"w-full px-3 py-2 text-sm rounded-lg border border-border bg-background text-foreground placeholder:text-muted-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring transition-colors"})]}),(0,a.jsxs)("div",{className:"flex items-start gap-2.5 px-1 py-1",children:[(0,a.jsx)("button",{type:"button",role:"switch","aria-checked":R,disabled:!L,title:L?void 0:e.hints.configureAiKey,onClick:()=>D(e=>!e),className:`relative mt-0.5 inline-flex shrink-0 h-4 w-7 cursor-pointer rounded-full border-2 border-transparent transition-colors focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 ${R?"bg-[var(--amber)]":"bg-muted"}`,children:(0,a.jsx)("span",{className:`pointer-events-none inline-block h-3 w-3 rounded-full bg-white shadow-sm transition-transform ${R?"translate-x-3":"translate-x-0"}`})}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)(l.A,{size:12,className:"text-[var(--amber)] shrink-0"}),(0,a.jsx)("span",{className:"text-xs font-medium text-foreground",children:F.aiInit??"AI initialize content"})]}),!1===L&&(0,a.jsxs)("p",{className:"text-2xs text-muted-foreground mt-0.5 flex items-center gap-1",children:[(0,a.jsx)(o.A,{size:10,className:"text-[var(--amber)] shrink-0"}),F.aiInitNoKey??"Configure an API key in Settings → AI to enable"]}),L&&R&&(0,a.jsx)("p",{className:"text-2xs text-muted-foreground mt-0.5",children:F.aiInitHint??"AI will generate README and INSTRUCTION for this space"})]})]}),T&&(0,a.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground font-mono px-1",children:[(0,a.jsx)(c.A,{size:12,className:"shrink-0 text-[var(--amber)]"}),(0,a.jsx)("span",{className:"truncate",children:T})]}),C&&(0,a.jsx)("span",{role:"alert",className:"text-xs text-error px-1",children:C}),(0,a.jsxs)("div",{className:"flex items-center justify-end gap-2 pt-1",children:[(0,a.jsx)("button",{onClick:M,className:"px-4 py-2 rounded-lg text-sm font-medium text-muted-foreground transition-colors hover:bg-muted",children:F.cancelCreate}),(0,a.jsxs)("button",{onClick:$,disabled:!g.trim()||k||!!E,className:"flex items-center gap-1.5 px-4 py-2 rounded-lg text-sm font-medium bg-[var(--amber)] text-[var(--amber-foreground)] transition-colors hover:opacity-90 disabled:opacity-50 disabled:cursor-not-allowed",children:[k&&(0,a.jsx)(d.A,{size:14,className:"animate-spin"}),F.createSpace]})]})]})]})]}),document.body)}}}]);
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1937],{51937:(e,s,t)=>{t.r(s),t.d(s,{default:()=>h});var a=t(95155),r=t(12115),n=t(47650),i=t(33210),l=t(86901),o=t(41585),c=t(38798),d=t(6296),u=t(73321),m=t(91337),x=t(9339);let p=(0,x.createServerReference)("70419f305533c76addb37678969d8346b90abbc86d",x.callServer,void 0,x.findSourceMapURL,"createSpaceAction");var b=t(5292),f=t(70620);function h({t:e,dirPaths:s}){let t=(0,u.useRouter)(),[x,h]=(0,r.useState)(!1),[g,v]=(0,r.useState)(""),[N,j]=(0,r.useState)(""),[w,y]=(0,r.useState)(""),[k,S]=(0,r.useState)(!1),[C,A]=(0,r.useState)(""),[E,I]=(0,r.useState)(""),[L,z]=(0,r.useState)(null),[R,D]=(0,r.useState)(!0),K=(0,r.useRef)(null);(0,r.useEffect)(()=>{let e=()=>{h(!0),A(""),I(""),setTimeout(()=>K.current?.focus(),80)};return window.addEventListener("mindos:create-space",e),()=>window.removeEventListener("mindos:create-space",e)},[]),(0,r.useEffect)(()=>{x&&null===L&&(0,b.w)().then(e=>{z(e),D(e)})},[x,L]);let M=(0,r.useCallback)(()=>{h(!1),v(""),j(""),y(""),A(""),I(""),z(null)},[]),P=(0,r.useCallback)(s=>s.includes("/")||s.includes("\\")?(I(e.home.spaceNameNoSlash??"Name cannot contain / or \\"),!1):(I(""),!0),[e]),T=(0,r.useMemo)(()=>{let e=g.trim();return e?(w?w+"/":"")+e+"/":""},[g,w]),$=(0,r.useCallback)(async()=>{if(!g.trim()||k||!P(g))return;S(!0),A("");let s=g.trim(),a=await p(s,N,w);if(a.success){let e=a.path??s;R&&L&&(0,b.V)(s,e,N),M(),t.refresh(),window.dispatchEvent(new Event("mindos:files-changed")),t.push(`/view/${(0,m.O0)(e+"/")}`)}else(a.error??"").includes("already exists")?A(e.home.spaceExists??"A space with this name already exists"):A(e.home.spaceCreateFailed??"Failed to create space");S(!1)},[g,N,w,k,M,t,e,P,R,L]),_=(0,r.useCallback)(e=>{"Escape"===e.key&&M(),"Enter"===e.key&&!e.shiftKey&&e.target instanceof HTMLInputElement&&(e.preventDefault(),$())},[M,$]);if(!x)return null;let F=e.home;return(0,n.createPortal)((0,a.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center",onKeyDown:_,children:[(0,a.jsx)("div",{className:"absolute inset-0 overlay-backdrop",onClick:M}),(0,a.jsxs)("div",{role:"dialog","aria-modal":"true","aria-label":F.newSpace,className:"relative w-full max-w-md mx-4 rounded-2xl border border-border bg-card shadow-xl",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between px-5 pt-5 pb-3",children:[(0,a.jsx)("h3",{className:"text-base font-semibold text-foreground",children:F.newSpace}),(0,a.jsx)("button",{onClick:M,className:"p-1 rounded-md text-muted-foreground hover:bg-muted transition-colors",children:(0,a.jsx)(i.A,{size:14})})]}),(0,a.jsxs)("div",{className:"px-5 pb-5 flex flex-col gap-3",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:F.spaceLocation??"Location"}),(0,a.jsx)(f.A,{dirPaths:s,value:w,onChange:y,rootLabel:F.rootLevel??"Root"})]}),(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)("label",{className:"text-xs font-medium text-muted-foreground",children:F.spaceName}),(0,a.jsx)("input",{ref:K,type:"text",value:g,onChange:e=>{v(e.target.value),A(""),P(e.target.value)},placeholder:"e.g. \uD83D\uDCDD Notes",maxLength:80,"aria-invalid":!!E,"aria-describedby":E?"space-name-hint":void 0,className:`w-full px-3 py-2 text-sm rounded-lg border bg-background outline-none transition-colors ${E?"border-error focus-visible:border-error":"border-border focus-visible:ring-1 focus-visible:ring-ring"}`}),E&&(0,a.jsx)("span",{id:"space-name-hint",className:"text-xs text-error",children:E})]}),(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsxs)("label",{className:"text-xs font-medium text-muted-foreground",children:[F.spaceDescription," ",(0,a.jsxs)("span",{className:"opacity-50",children:["(",F.optional??"optional",")"]})]}),(0,a.jsx)("input",{type:"text",value:N,onChange:e=>j(e.target.value),placeholder:F.spaceDescPlaceholder??"Describe the purpose of this space",maxLength:200,className:"w-full px-3 py-2 text-sm rounded-lg border border-border bg-background text-foreground placeholder:text-muted-foreground outline-none focus-visible:ring-1 focus-visible:ring-ring transition-colors"})]}),(0,a.jsxs)("div",{className:"flex items-start gap-2.5 px-1 py-1",children:[(0,a.jsx)("button",{type:"button",role:"switch","aria-checked":R,disabled:!L,title:L?void 0:e.hints.configureAiKey,onClick:()=>D(e=>!e),className:`relative mt-0.5 inline-flex shrink-0 h-4 w-7 cursor-pointer rounded-full border-2 border-transparent transition-colors focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 ${R?"bg-[var(--amber)]":"bg-muted"}`,children:(0,a.jsx)("span",{className:`pointer-events-none inline-block h-3 w-3 rounded-full bg-white shadow-sm transition-transform ${R?"translate-x-3":"translate-x-0"}`})}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)(l.A,{size:12,className:"text-[var(--amber)] shrink-0"}),(0,a.jsx)("span",{className:"text-xs font-medium text-foreground",children:F.aiInit??"AI initialize content"})]}),!1===L&&(0,a.jsxs)("p",{className:"text-2xs text-muted-foreground mt-0.5 flex items-center gap-1",children:[(0,a.jsx)(o.A,{size:10,className:"text-[var(--amber)] shrink-0"}),F.aiInitNoKey??"Configure an API key in Settings → AI to enable"]}),L&&R&&(0,a.jsx)("p",{className:"text-2xs text-muted-foreground mt-0.5",children:F.aiInitHint??"AI will generate README and INSTRUCTION for this space"})]})]}),T&&(0,a.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground font-mono px-1",children:[(0,a.jsx)(c.A,{size:12,className:"shrink-0 text-[var(--amber)]"}),(0,a.jsx)("span",{className:"truncate",children:T})]}),C&&(0,a.jsx)("span",{role:"alert",className:"text-xs text-error px-1",children:C}),(0,a.jsxs)("div",{className:"flex items-center justify-end gap-2 pt-1",children:[(0,a.jsx)("button",{onClick:M,className:"px-4 py-2 rounded-lg text-sm font-medium text-muted-foreground transition-colors hover:bg-muted",children:F.cancelCreate}),(0,a.jsxs)("button",{onClick:$,disabled:!g.trim()||k||!!E,className:"flex items-center gap-1.5 px-4 py-2 rounded-lg text-sm font-medium bg-[var(--amber)] text-[var(--amber-foreground)] transition-colors hover:opacity-90 disabled:opacity-50 disabled:cursor-not-allowed",children:[k&&(0,a.jsx)(d.A,{size:14,className:"animate-spin"}),F.createSpace]})]})]})]})]}),document.body)}}}]);
@@ -25,4 +25,4 @@ ${e}`}(e),source:"user"})}),v(!0),ey.oR.success(o?.savedToKB?.replace("{path}",k
25
25
  border focus:outline-none focus-visible:ring-2 focus-visible:ring-ring
26
26
  disabled:opacity-40 disabled:cursor-not-allowed
27
27
  ${e||ew?"bg-[var(--amber)]/10 border-[var(--amber)]/25 text-foreground hover:bg-[var(--amber)]/15":"bg-muted/50 border-border/50 text-muted-foreground hover:bg-muted hover:text-foreground"}
28
- `,title:ej,"aria-expanded":d,"aria-haspopup":"listbox",children:[(0,n.jsx)(e8.A,{size:11,className:"shrink-0"}),(0,n.jsxs)("span",{className:"truncate",children:[ey,(0,n.jsx)("span",{className:"text-muted-foreground",children:" \xb7 "}),(0,n.jsx)("span",{className:ew?"text-[var(--amber)]":"text-muted-foreground",children:ev})]}),(0,n.jsx)(g.A,{size:10,className:"shrink-0 text-muted-foreground"})]}),"u">typeof document&&ek&&(0,a.createPortal)(ek,document.body),"u">typeof document&&d&&(()=>{if(!S)return null;let t=(0,e9.lh)(j?.ai?.providers??[],S),s=t?e6.T_[t.protocol]:null,o=t?.name||(s?"zh"===c?s.nameZh:s.name:String(S));return(0,a.createPortal)((0,n.jsxs)("div",{ref:b,style:A,className:"w-[220px] rounded-lg border border-border bg-card shadow-lg py-1 animate-in fade-in-0 zoom-in-95 duration-100",onMouseEnter:Y,onMouseLeave:J,children:[(0,n.jsxs)("div",{className:"flex items-center justify-between px-3 py-1.5 border-b border-border/40",children:[(0,n.jsx)("span",{className:"text-2xs font-medium text-muted-foreground",children:o}),(0,n.jsx)("button",{type:"button",onClick:()=>ec(S,!0),disabled:T,className:"p-1 text-muted-foreground/50 hover:text-foreground transition-colors disabled:opacity-30",title:"Refresh",children:(0,n.jsx)(e4.A,{size:10,className:T?"animate-spin":""})})]}),(0,n.jsx)("div",{className:"px-2 pt-1.5 pb-1",children:(0,n.jsxs)("div",{className:"relative",children:[(0,n.jsx)(H.A,{size:10,className:"absolute left-2 top-1/2 -translate-y-1/2 text-muted-foreground/40"}),(0,n.jsx)("input",{ref:v,type:"text",value:M,onChange:e=>_(e.target.value),onKeyDown:eb,placeholder:u.ask?.searchModels??"Search...",className:"w-full text-2xs pl-6 pr-2 py-1 rounded border border-border/50 bg-transparent text-foreground placeholder:text-muted-foreground/40 focus:outline-none focus-visible:border-[var(--amber)]/50",autoComplete:"off"})]})}),(0,n.jsxs)("div",{ref:y,className:"max-h-[240px] overflow-y-auto px-1 pb-1",children:[T&&!R&&(0,n.jsxs)("div",{className:"flex items-center gap-1.5 px-2 py-3 text-2xs text-muted-foreground justify-center",children:[(0,n.jsx)(P.A,{size:10,className:"animate-spin"}),u.ask?.loadingModels??"Loading..."]}),L&&!T&&(0,n.jsx)("div",{className:"px-2 py-3 text-2xs text-destructive text-center",children:L}),!T&&!L&&0===eh.length&&null!==R&&(0,n.jsx)("div",{className:"px-2 py-3 text-2xs text-muted-foreground text-center",children:M?"No matches":"No models"}),eh.map((a,o)=>{let l=e===S&&r===a,i=t?.model||s?.defaultModel;return(0,n.jsxs)("button",{type:"button","data-model-item":!0,onClick:()=>eg(S,a),className:`w-full text-left px-2 py-1 text-2xs rounded transition-colors flex items-center gap-1 ${l?"bg-[var(--amber)]/12 text-foreground font-medium":o===F?"bg-accent":"hover:bg-accent/60"}`,children:[l?(0,n.jsx)(x.A,{size:9,className:"shrink-0 text-[var(--amber)]"}):(0,n.jsx)("span",{className:"w-[9px] shrink-0"}),(0,n.jsx)("span",{className:"truncate",children:a}),a===i&&!l&&(0,n.jsx)("span",{className:"ml-auto text-[9px] text-muted-foreground/30 shrink-0",children:"default"})]},a)})]})]}),document.body)})()]})}var tr=r(68589);let tn=new Set([401,403,429]),ts=[/api.?key/i,/model.*not.?found/i,/authentication/i,/unauthorized/i,/forbidden/i];var ta=r(91337),to=r(2431);let tl=new WeakMap;function ti({visible:e,currentFile:t,initialMessage:r,initialAcpAgent:f,onFirstMessage:p,variant:x,onClose:g,maximized:b,onMaximize:k,askMode:D,onModeSwitch:M,onDockToPanel:_}){let F="panel"===x,P="home"===x,I=(0,s.useRef)(null),O=(0,s.useRef)(null),{t:H}=(0,m.Y)(),[B,U]=(0,s.useState)(!1);(0,s.useEffect)(()=>U(!0),[]);let[W,Y]=(0,s.useState)(""),J=(0,s.useRef)("");J.current=W;let[K,q]=(0,s.useState)([]),Q=(0,s.useRef)(K);Q.current=K;let[V,Z]=(0,s.useState)(!1),[G,X]=(0,s.useState)(!1),[ee,et]=(0,s.useState)(!1),er=(0,s.useRef)(null),en=(0,s.useRef)(null),[es,ea]=(0,s.useState)(null),[eo,el]=(0,s.useState)(null),ei=(0,s.useRef)(eo);ei.current=eo;let[eu,ec]=(0,s.useState)(null),ed=(0,s.useRef)(eu),em=(0,s.useRef)(null);ed.current=eu;let[ef,ep]=(0,s.useState)("agent"),[ex,eg]=(0,s.useState)(null),[eh,eb]=(0,s.useState)(null);(0,s.useEffect)(()=>{ep(function(){try{let e=localStorage.getItem(h);if("chat"===e||"agent"===e)return e}catch{}return"agent"}());let e=function(){try{let e=localStorage.getItem(e7);if(!e){let e=localStorage.getItem("mindos-provider-override");if(e&&((0,e6.rl)(e)||(0,e9.Ny)(e)))return{provider:e,model:null};return{provider:null,model:null}}let t=JSON.parse(e),r=t?.provider&&((0,e6.rl)(t.provider)||(0,e9.Ny)(t.provider))?t.provider:null,n="string"==typeof t?.model?t.model:null;return{provider:r,model:n}}catch{return{provider:null,model:null}}}();eg(e.provider),eb(e.model)},[]);let ev=function(e){let[t,r]=(0,s.useState)([]),[n,a]=(0,s.useState)([]),[o,l]=(0,s.useState)(null),i=(0,s.useRef)(null),u=(0,s.useCallback)(async()=>{let t=(await N()).sort((e,t)=>t.updatedAt-e.updatedAt).slice(0,30),n=t.filter(e=>0===e.messages.length).map(e=>e.id),s=n.length>0?t.filter(e=>!n.includes(e.id)):t;n.length>0&&A(n);let o=w(e),i=e?s.find(t=>t.currentFile===e):s[0];i?(l(i.id),r(i.messages),a([...s])):(l(o.id),r([]),a([o,...s].slice(0,30)))},[e]),c=(0,s.useCallback)((t,r)=>{if(!r||0===t.length)return;let n=null;a(s=>{let a=Date.now(),o=s.find(e=>e.id===r);n=o?{...o,currentFile:e,updatedAt:a,messages:t}:{id:r,currentFile:e,createdAt:a,updatedAt:a,messages:t};let l=s.filter(e=>e.id!==r);return[n,...l].sort((e,t)=>t.updatedAt-e.updatedAt).slice(0,30)}),i.current&&clearTimeout(i.current),i.current=setTimeout(()=>{n&&S(n)},600)},[e]),d=(0,s.useCallback)(()=>{i.current&&(clearTimeout(i.current),i.current=null)},[]),m=(0,s.useCallback)(()=>{a(t=>{let n=t.find(e=>e.id===o);if(n&&0===n.messages.length)return t;let s=w(e);return l(s.id),r([]),[s,...t].sort((e,t)=>t.updatedAt-e.updatedAt).slice(0,30)})},[e,o]),f=(0,s.useCallback)(e=>{let t=n.find(t=>t.id===e);if(!t)return;let s=o?n.find(e=>e.id===o):null;s&&0===s.messages.length&&s.id!==e&&a(e=>e.filter(e=>e.id!==s.id)),l(t.id),r(t.messages)},[n,o]),p=(0,s.useCallback)(t=>{let s=n.find(e=>e.id===t);s&&s.messages.length>0&&C(t);let i=n.filter(e=>e.id!==t);if(a(i),o===t){let t=w(e);l(t.id),r([]),a([t,...i].slice(0,30))}},[o,e,n]),x=(0,s.useCallback)((e,t)=>{let r=t.trim();a(t=>{let n=t.findIndex(t=>t.id===e);if(n<0)return t;let s={...t[n],title:r||void 0},a=[...t];return a[n]=s,S(s),a})},[]),g=(0,s.useCallback)(e=>{a(t=>{let r=t.findIndex(t=>t.id===e);if(r<0)return t;let n={...t[r],pinned:!t[r].pinned},s=[...t];return s[r]=n,n.messages.length>0&&S(n),s})},[]),h=(0,s.useCallback)(t=>{var r;if(!o)return;let s=n.find(e=>e.id===o);if(!s)return;let l=(r={...s,currentFile:s.currentFile??e,updatedAt:Date.now()},{...r,defaultAcpAgent:t});a(e=>[l,...e.filter(e=>e.id!==o)].sort((e,t)=>t.updatedAt-e.updatedAt).slice(0,30)),i.current&&clearTimeout(i.current),l.messages.length>0&&(i.current=setTimeout(()=>{S(l)},600))},[o,e,n]),b=(0,s.useCallback)(()=>{let t=n.filter(e=>e.messages.length>0).map(e=>e.id);t.length>0&&A(t);let s=w(e);l(s.id),r([]),a([s])},[e,n]);return{messages:t,setMessages:r,sessions:[...n].sort((e,t)=>e.pinned&&!t.pinned?-1:!e.pinned&&t.pinned?1:t.updatedAt-e.updatedAt),activeSession:n.find(e=>e.id===o)??null,activeSessionId:o,initSessions:u,persistSession:c,clearPersistTimer:d,resetSession:m,loadSession:f,deleteSession:p,renameSession:x,togglePinSession:g,setSessionDefaultAcpAgent:h,clearAllSessions:b}}(t),ey=(0,s.useRef)(ev);ey.current=ev;let ej=function(e){let[t,r]=(0,s.useState)([]),[n,a]=(0,s.useState)(""),o=(0,s.useRef)(null),l=(0,s.useRef)(e);l.current=e;let i=(0,s.useCallback)(async e=>{if(!e||0===e.length)return;let t=Array.from(e).slice(0,8),n=[],s=[];for(let e of t){let t=R(e.name);E.has(t)?n.push(e):s.push(e.name)}if(s.length>0){let e=l.current?.unsupportedType??"Unsupported file type";a(`${e}: ${s.join(", ")}`)}else a("");let o=[],i=[];for(let e of n)".pdf"===R(e.name)?(i.push({name:e.name,content:"",status:"loading"}),o.push(e)):i.push({name:e.name,content:await e.text(),status:"success"});if(r(e=>{let t=[...e];for(let e of i)t.some(t=>t.name===e.name)||t.push(e);return t}),o.length>0){let e=await Promise.all(o.map(z));r(t=>t.map(t=>"loading"!==t.status?t:e.find(e=>e.name===t.name)??t))}},[]),u=(0,s.useCallback)(e=>{r(t=>t.filter((t,r)=>r!==e))},[]);return{localAttachments:t,uploadError:n,uploadInputRef:o,pickFiles:i,removeAttachment:u,clearAttachments:(0,s.useCallback)(()=>{r([]),a("")},[]),injectFiles:(0,s.useCallback)(e=>{r(t=>{let r=[...t];for(let t of e)r.some(e=>e.name===t.name)||r.push(t);return r})},[])}}((0,s.useMemo)(()=>({unsupportedType:H.fileImport?.unsupported}),[H])),ew=(0,s.useRef)(ej);ew.current=ej;let ek=function(){let[e,t]=(0,s.useState)([]),[r,n]=(0,s.useState)(""),a=(0,s.useCallback)(async e=>{n("");let r=e.slice(0,4),s=[];for(let e of r){var a;if(a=e.type,!T.has(a)){n(`Unsupported image type: ${e.type}`);continue}try{let{data:t,mimeType:r}=await $(e);s.push({type:"image",data:t,mimeType:r,fileName:e.name||void 0})}catch{n(`Failed to process image: ${e.name}`)}}t(e=>{let t=[...e,...s];return t.length>4?(n("Maximum 4 images allowed"),t.slice(0,4)):t})},[]),o=(0,s.useCallback)(async e=>{let t=e.clipboardData?.items;if(!t)return!1;let r=L(t);return 0!==r.length&&(await a(r),!0)},[a]),l=(0,s.useCallback)(async e=>{let t=e.dataTransfer?.items;if(!t)return;let r=L(t);r.length>0&&(e.preventDefault(),await a(r))},[a]),i=(0,s.useCallback)(async e=>{if(!e)return;let t=Array.from(e).filter(e=>{var t;return t=e.type,T.has(t)});await a(t)},[a]);return{images:e,imageError:r,addImages:a,handlePaste:o,handleDrop:l,handleFileSelect:i,removeImage:(0,s.useCallback)(e=>{t(t=>t.filter((t,r)=>r!==e))},[]),clearImages:(0,s.useCallback)(()=>{t([]),n("")},[])}}(),eN=function(){let[e,t]=(0,s.useState)([]),[r,n]=(0,s.useState)(null),[a,o]=(0,s.useState)([]),[l,i]=(0,s.useState)(0),u=(0,s.useCallback)(()=>{fetch("/api/files").then(e=>e.ok?e.json():[]).then(e=>Array.isArray(e)?e:[]).catch(()=>[]).then(t)},[]);(0,s.useEffect)(()=>{u();let e=()=>u();return window.addEventListener("mindos:files-changed",e),()=>window.removeEventListener("mindos:files-changed",e)},[u]);let c=(0,s.useCallback)((t,r)=>{let s=r??t.length,a=t.slice(0,s),l=a.lastIndexOf("@");if(-1===l||l>0&&" "!==a[l-1]&&"\n"!==a[l-1])return void n(null);let u=a.slice(l+1);if(u.includes(" ")||u.includes("\n")){n(null),o([]),i(0);return}let c=u.toLowerCase();if(!c){n(u),o(e.slice(0,30)),i(0);return}let d=e.map(e=>{let t=(e.split("/").pop()??e).toLowerCase(),r=e.toLowerCase(),n=0;return t.startsWith(c)?n=100:t.includes(c)?n=50:r.includes(c)&&(n=10),{path:e,score:n}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score).slice(0,30);if(0===d.length){n(null),o([]),i(0);return}n(u),o(d.map(e=>e.path)),i(0)},[e]),d=(0,s.useCallback)(e=>{0!==a.length&&("down"===e?i(e=>Math.min(e+1,a.length-1)):i(e=>Math.max(e-1,0)))},[a.length]);return{mentionQuery:r,mentionResults:a,mentionIndex:l,updateMentionFromInput:c,navigateMention:d,resetMention:(0,s.useCallback)(()=>{n(null),o([]),i(0)},[])}}(),eS=function(){let[e,t]=(0,s.useState)([]),[r,n]=(0,s.useState)(null),[a,o]=(0,s.useState)([]),[l,i]=(0,s.useState)(0),u=(0,s.useRef)(!1),c=(0,s.useCallback)(async()=>{t((await fetch("/api/skills").then(e=>e.ok?e.json():{skills:[]}).then(e=>Array.isArray(e?.skills)?e.skills:[]).catch(()=>[])).filter(e=>e.enabled)),u.current=!0},[]);(0,s.useEffect)(()=>{c();let e=()=>c();return window.addEventListener("mindos:skills-changed",e),()=>window.removeEventListener("mindos:skills-changed",e)},[c]);let d=(0,s.useCallback)((t,r)=>{let s=t.slice(0,r),a=s.lastIndexOf("/");if(-1===a||a>0&&" "!==s[a-1]&&"\n"!==s[a-1])return void n(null);let l=s.slice(a+1);if(l.includes(" "))return void n(null);if(!u.current){c(),n(null);return}let d=l.toLowerCase(),m=d?e.map(e=>{let t=e.name.toLowerCase(),r=0;return t.startsWith(d)?r=100:t.includes(d)?r=50:e.description.toLowerCase().includes(d)&&(r=10),{s:e,score:r}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score).slice(0,20).map(e=>({type:"skill",name:e.s.name,description:e.s.description})):e.slice(0,20).map(e=>({type:"skill",name:e.name,description:e.description}));if(0===m.length){n(null),o([]),i(0);return}n(l),o(m),i(0)},[e,c]),m=(0,s.useCallback)(e=>{0!==a.length&&("down"===e?i(e=>Math.min(e+1,a.length-1)):i(e=>Math.max(e-1,0)))},[a.length]);return{slashQuery:r,slashResults:a,slashIndex:l,updateSlashFromInput:d,navigateSlash:m,resetSlash:(0,s.useCallback)(()=>{n(null),o([]),i(0)},[])}}(),eC=(0,to.z)(),eA=(0,s.useRef)(ek);eA.current=ek;let eE=(0,s.useRef)(eN);eE.current=eN;let eR=(0,s.useRef)(eS);eR.current=eS;let ez=(0,s.useCallback)(()=>{Y(""),el(null),q(t?[t]:[]),ew.current.clearAttachments()},[t]),eT=(0,s.useCallback)(e=>{Y(e.content),e.images&&e.images.length>0&&eA.current.clearImages(),e.attachedFiles&&q(e.attachedFiles),e.skillName&&eR.current.resetSlash(),ec(e.agentId&&e.agentName&&e.agentId!==y.id?{id:e.agentId,name:e.agentName}:null),setTimeout(()=>I.current?.focus(),50)},[]),e$=(0,s.useRef)({inputValueRef:J,mentionRef:eE,slashRef:eR,imageUploadRef:eA,sessionRef:ey,uploadRef:ew,selectedSkillRef:ei,selectedAcpAgentRef:ed,attachedFilesRef:Q}),eL=function({currentFile:e,chatMode:t,providerOverride:r,modelOverride:n,onFirstMessage:a,refs:o,errorLabels:l,resetInputState:i,onRestoreInput:u}){let[c,d]=(0,s.useState)(!1),[m,f]=(0,s.useState)("connecting"),[p,x]=(0,s.useState)(0),g=(0,s.useRef)(3),h=(0,s.useRef)(null),b=(0,s.useRef)(!1),v=(0,s.useRef)(!1),y=(0,s.useRef)(null),w=(0,s.useRef)(!1),k=(0,s.useCallback)(()=>{let e=y.current;h.current?.abort(),e&&(w.current=!0,o.sessionRef.current?.setMessages(t=>{let r=[...t],n=e.userMessageIndex;return n+1<r.length&&r[n+1]?.role==="assistant"&&r.splice(n+1,1),n<r.length&&r[n]?.role==="user"&&r.splice(n,1),r}),u?.(e.userMessage),y.current=null,v.current=!0,setTimeout(()=>{v.current=!1},300))},[o,u]),N=(0,s.useCallback)(async s=>{if(s.preventDefault(),v.current)return;let u=o.mentionRef.current,c=o.slashRef.current,m=o.imageUploadRef.current,p=o.sessionRef.current,k=o.uploadRef.current;if(!u||!c||!m||!p||!k||null!==u.mentionQuery||null!==c.slashQuery)return;let N=o.inputValueRef.current?.trim()??"";if(k.localAttachments.some(e=>"loading"===e.status)||!N&&0===m.images.length||S.current)return;let C=o.selectedSkillRef.current,A=o.selectedAcpAgentRef.current,E=m.images.length>0?[...m.images]:void 0,R=o.attachedFilesRef.current.filter(t=>t!==e),z=R.length>0?R:void 0,T=k.localAttachments.filter(e=>"loading"!==e.status).map(e=>e.name),$=j({role:"user",content:N,timestamp:Date.now(),...C&&{skillName:C.name},...E&&{images:E},...z&&{attachedFiles:z},...T.length>0&&{uploadedFileNames:T}},A);m.clearImages();let L=[...p.messages,$];y.current={userMessageIndex:L.length-1,userMessage:$},w.current=!1,p.setMessages([...L,j({role:"assistant",content:"",timestamp:Date.now()},A)]),i(),a&&!b.current&&(b.current=!0,a()),d(!0),f("connecting"),x(0);let D=new AbortController;h.current=D;let M=3;try{let e=localStorage.getItem("mindos-reconnect-retries");if(null!==e){let t=parseInt(e,10);Number.isFinite(t)&&(M=Math.max(0,Math.min(10,t)))}}catch{}g.current=M;let _=JSON.stringify({messages:L,currentFile:e,attachedFiles:o.attachedFilesRef.current,uploadedFiles:k.localAttachments.filter(e=>"loading"!==e.status).map(e=>({name:e.name,content:e.content.length>8e4?e.content.slice(0,8e4)+"\n\n[...truncated to first ~80000 chars]":e.content})),selectedAcpAgent:A,mode:t,providerOverride:r??void 0,modelOverride:n??void 0}),F=async()=>{let e=await fetch("/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:_,signal:D.signal});if(!e.ok){let t=`Request failed (${e.status})`;try{let r=await e.json();"string"==typeof r?.error&&r.error.trim()?t=r.error:"object"==typeof r?.error&&"string"==typeof r.error?.message&&r.error.message.trim()?t=r.error.message:"string"==typeof r?.message&&r.message.trim()&&(t=r.message)}catch(e){console.warn("[useAskChat] error body parse failed:",e)}let r=Error(t);throw r.httpStatus=e.status,r}if(!e.body)throw Error("No response body");return f("thinking"),{finalMessage:await (0,tr.m)(e.body,e=>{f("streaming"),o.sessionRef.current?.setMessages(t=>{let r=[...t];return r[r.length-1]=j(e,A),r})},D.signal)}};try{let e=null;for(let t=0;t<=M&&!D.signal.aborted;t++){if(t>0){var P;x(t),f("reconnecting"),o.sessionRef.current?.setMessages(e=>{let t=[...e];return t[t.length-1]=j({role:"assistant",content:"",timestamp:Date.now()},A),t}),await function(e,t){return new Promise((r,n)=>{let s=()=>t?.reason??new DOMException("The operation was aborted.","AbortError");if(t?.aborted)return void n(s());let a=setTimeout(r,e);t?.addEventListener("abort",()=>{clearTimeout(a),n(s())},{once:!0})})}((P=t-1,Math.min(1e3*2**P,1e4)),D.signal),f("connecting")}try{let{finalMessage:e}=await F();e.content.trim()||e.parts&&0!==e.parts.length||o.sessionRef.current?.setMessages(e=>{let t=[...e];return t[t.length-1]=j({role:"assistant",content:`__error__${l.noResponse}`},A),t}),y.current=null;return}catch(n){e=n instanceof Error?n:Error(String(n));let r=n.httpStatus;if(!function(e,t){if(e instanceof DOMException&&"AbortError"===e.name||t&&tn.has(t))return!1;if(e instanceof Error){let t=e.message;if(ts.some(e=>e.test(t)))return!1}return!0}(n,r)||t>=M)break}}if(e)throw e}catch(e){if("AbortError"===e.name)w.current||o.sessionRef.current?.setMessages(e=>{let t=[...e],r=t.length-1;if(r>=0&&"assistant"===t[r].role){let e=t[r];e.content.trim()||e.parts&&e.parts.length>0||(t[r]=j({role:"assistant",content:`__error__${l.stopped}`},A))}return t});else{let t=e instanceof Error?e.message:"Something went wrong";o.sessionRef.current?.setMessages(e=>{let r=[...e],n=r.length-1;if(n>=0&&"assistant"===r[n].role){let e=r[n];if(!(e.content.trim()||e.parts&&e.parts.length>0))return r[n]=j({role:"assistant",content:`__error__${t}`},A),r}return[...r,j({role:"assistant",content:`__error__${t}`},A)]})}}finally{d(!1),x(0),h.current=null,y.current=null}},[e,t,r,l.noResponse,l.stopped,a,o,i]),S=(0,s.useRef)(c);return S.current=c,{isLoading:c,isLoadingRef:S,loadingPhase:m,reconnectAttempt:p,reconnectMaxRef:g,abortRef:h,firstMessageFired:b,submit:N,stop:k}}({currentFile:t,chatMode:ef,providerOverride:ex,modelOverride:eh,onFirstMessage:p,refs:e$.current,errorLabels:{noResponse:H.ask.errorNoResponse,stopped:H.ask.stopped},resetInputState:ez,onRestoreInput:eT}),{isLoading:eD,loadingPhase:eM,reconnectAttempt:e_,reconnectMaxRef:eF}=eL,eP=eL.submit,eI=eL.stop,eO=(0,s.useCallback)(e=>{ec(e),ev.setSessionDefaultAcpAgent(e)},[ev]),eB=ej.localAttachments.some(e=>"loading"===e.status),eY=ej.uploadError||ek.imageError||(eB?H.ask.uploadsProcessing??"Wait for uploaded files to finish processing before sending.":"");(0,s.useEffect)(()=>{let e=e=>{let t=e.detail?.files;Array.isArray(t)&&t.length>0&&ew.current.injectFiles(t)};return window.addEventListener("mindos:inject-ask-files",e),()=>window.removeEventListener("mindos:inject-ask-files",e)},[]),(0,s.useEffect)(()=>{if(!ee||!er.current)return void ea(null);let e=er.current.getBoundingClientRect();ea({top:e.top-8,left:e.left})},[ee]),(0,s.useEffect)(()=>{if(!ee)return;let e=e=>{let t=e.target;!t||er.current?.contains(t)||en.current?.contains(t)||et(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[ee]),(0,s.useEffect)(()=>{if(!P)return;let e=e=>{let t=e.detail?.text;"string"==typeof t&&(Y(t),setTimeout(()=>I.current?.focus(),50))};return window.addEventListener("mindos:home-suggestion",e),()=>window.removeEventListener("mindos:home-suggestion",e)},[P]);let eJ=(0,s.useRef)(!1),eq=(0,s.useRef)(t);(0,s.useEffect)(()=>{let n="panel"===x||"home"===x?e&&!eJ.current:e,s=e&&eJ.current&&t!==eq.current;n?(em.current=f??null,setTimeout(()=>I.current?.focus(),50),ev.initSessions(),Y(r||""),eL.firstMessageFired.current=!1,q(t?[t]:[]),ej.clearAttachments(),ek.clearImages(),eN.resetMention(),eS.resetSlash(),el(null),ec(f??null),Z(!1)):s?q(t?[t]:[]):e||"modal"!==x||eL.abortRef.current?.abort(),"home"===x&&e&&!eJ.current&&setTimeout(()=>I.current?.focus(),150),eJ.current=e,eq.current=t},[e,t]),(0,s.useEffect)(()=>{if(!e||!ev.activeSessionId)return;let t=em.current;ec(function({sessionAgent:e,initialAgent:t}){return e??t??null}({sessionAgent:ev.activeSession?.defaultAcpAgent??null,initialAgent:t})),t&&!ev.activeSession?.defaultAcpAgent&&ev.activeSession?.messages.length===0&&ev.setSessionDefaultAcpAgent(t),em.current=null},[e,ev.activeSessionId,ev.activeSession?.defaultAcpAgent,ev.activeSession?.messages.length,ev.setSessionDefaultAcpAgent]);let eQ=(0,s.useRef)(ev.clearPersistTimer);eQ.current=ev.clearPersistTimer,(0,s.useEffect)(()=>{if(!e||!ev.activeSessionId)return;let t=ev.messages;if(eL.isLoading&&t.length>0){let e=t[t.length-1];if("assistant"===e.role&&!e.content.trim()&&(!e.parts||0===e.parts.length))return}return ev.persistSession(t,ev.activeSessionId),()=>eQ.current()},[e,ev.messages,ev.activeSessionId,eL.isLoading]),(0,s.useEffect)(()=>{if(!e||"home"===x)return;let t="modal"===x,r="panel"===x&&b;if(!t&&!r)return;let n=e=>{if("Escape"===e.key){if(null!==eE.current.mentionQuery)return void eE.current.resetMention();if(null!==eR.current.slashQuery)return void eR.current.resetSlash();if(r&&k)return void k();t&&g&&g()}};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[x,e,g,b,k]);let eV=(0,s.useRef)(null);(0,s.useLayoutEffect)(()=>{if(!e)return;let t=I.current;t&&t instanceof HTMLTextAreaElement&&function(e,t){let r=tl.get(e);if(!r){let t=getComputedStyle(e),n=parseFloat(t.lineHeight),s=parseFloat(t.fontSize),a=Number.isFinite(s)?s:14,o=8*(Number.isFinite(n)?n:1.375*a)+((Number.isFinite(parseFloat(t.paddingTop))?parseFloat(t.paddingTop):0)+(Number.isFinite(parseFloat(t.paddingBottom))?parseFloat(t.paddingBottom):0));if(!Number.isFinite(o)||o<=0)return;r={maxH:o},tl.set(e,r)}let{maxH:n}=r;e.style.height="auto";let s=e.scrollHeight,a=Math.min(s,n);e.style.height=`${a}px`,e.style.overflowY=s>n?"auto":"hidden"}(t,0)},[W,eD,e]),(0,s.useEffect)(()=>{let e=I.current;if(!e)return;let t=()=>tl.delete(e);return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]);let eZ=(0,s.useRef)(null),eG=(0,s.useRef)(null),e0=(0,s.useCallback)((e,t)=>{Y(e);let r=t??e.length;eZ.current&&clearTimeout(eZ.current),eG.current&&clearTimeout(eG.current),eZ.current=setTimeout(()=>eE.current.updateMentionFromInput(e,r),80),eG.current=setTimeout(()=>eR.current.updateSlashFromInput(e,r),80)},[]);(0,s.useEffect)(()=>()=>{eZ.current&&clearTimeout(eZ.current),eG.current&&clearTimeout(eG.current)},[]);let e1=(0,s.useCallback)(e=>{let t=I.current,r=J.current,n=t?.selectionStart??r.length,s=r.slice(0,n).lastIndexOf("@");Y(r.slice(0,s)+r.slice(n)),eE.current.resetMention(),Q.current.includes(e)||q(t=>[...t,e]),setTimeout(()=>{I.current?.focus(),I.current?.setSelectionRange(s,s)},0)},[]),e2=(0,s.useCallback)(e=>{let t=I.current,r=J.current,n=t?.selectionStart??r.length,s=r.slice(0,n).lastIndexOf("/");Y(r.slice(0,s)+r.slice(n)),el(e),eR.current.resetSlash(),setTimeout(()=>{I.current?.focus(),I.current?.setSelectionRange(s,s)},0)},[]),e4=(0,s.useRef)(e1);e4.current=e1;let e8=(0,s.useRef)(e2);e8.current=e2;let te=(0,s.useCallback)(e=>{let t=eE.current,r=eR.current;if(null!==t.mentionQuery){if("Escape"===e.key){e.preventDefault(),t.resetMention();return}if("ArrowDown"===e.key)e.preventDefault(),t.navigateMention("down");else if("ArrowUp"===e.key)e.preventDefault(),t.navigateMention("up");else if("Enter"===e.key||"Tab"===e.key){if("Enter"===e.key&&(e.shiftKey||e.nativeEvent.isComposing))return;t.mentionResults.length>0&&(e.preventDefault(),e4.current(t.mentionResults[t.mentionIndex]))}return}if(null!==r.slashQuery){if("Escape"===e.key){e.preventDefault(),r.resetSlash();return}if("ArrowDown"===e.key)e.preventDefault(),r.navigateSlash("down");else if("ArrowUp"===e.key)e.preventDefault(),r.navigateSlash("up");else if("Enter"===e.key||"Tab"===e.key){if("Enter"===e.key&&(e.shiftKey||e.nativeEvent.isComposing))return;r.slashResults.length>0&&(e.preventDefault(),e8.current(r.slashResults[r.slashIndex]))}return}"Enter"===e.key&&!e.shiftKey&&!e.nativeEvent.isComposing&&!eL.isLoadingRef.current&&(J.current.trim()||eA.current.images.length>0)&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())},[]),ti=(0,s.useCallback)(()=>{eL.isLoadingRef.current||(ey.current.resetSession(),Y(""),q(t?[t]:[]),ew.current.clearAttachments(),eA.current.clearImages(),eE.current.resetMention(),eR.current.resetSlash(),el(null),ec(null),em.current=null,Z(!1),eL.firstMessageFired.current=!1,setTimeout(()=>I.current?.focus(),0))},[t]),tu=(0,s.useCallback)(e=>{(e.dataTransfer.types.includes("text/mindos-path")||e.dataTransfer.types.includes("Files"))&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy",X(!0))},[]),tc=(0,s.useCallback)(()=>X(!1),[]),td=(0,s.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),X(!1);let t=e.dataTransfer.getData("text/mindos-path");if(t){let r="directory"===e.dataTransfer.getData("text/mindos-type")?t.replace(/\/?$/,"/"):t;Q.current.includes(r)||q(e=>[...e,r]);return}let r=e.dataTransfer.files;if(r.length>0){let t=Array.from(r).some(e=>e.type.startsWith("image/")),n=Array.from(r).filter(e=>!e.type.startsWith("image/"));(async()=>{try{if(t&&await eA.current.handleDrop(e),n.length>0){let e=new DataTransfer;n.forEach(t=>e.items.add(t)),await ew.current.pickFiles(e.files)}}catch(e){console.warn("[AskContent] Drop file processing failed:",e)}})()}},[]),tm=(0,s.useCallback)(e=>{let t=e.clipboardData?.items;!t||Array.from(t).some(e=>"file"===e.kind&&e.type.startsWith("image/"))&&(e.preventDefault(),eA.current.handlePaste(e))},[]),tf=(0,s.useCallback)(e=>{if(eL.isLoadingRef.current)return;let r=ev.sessions.find(t=>t.id===e)??null;ey.current.loadSession(e),Z(!1),Y(""),q(t?[t]:[]),ew.current.clearAttachments(),eA.current.clearImages(),eE.current.resetMention(),eR.current.resetSlash(),el(null),ec(r?.defaultAcpAgent??null),setTimeout(()=>I.current?.focus(),0)},[t,ev.sessions]),tp=(0,s.useCallback)(()=>Z(e=>!e),[]),tx=(0,s.useMemo)(()=>({connecting:H.ask.connecting,thinking:H.ask.thinking,generating:H.ask.generating,reconnecting:e_>0?H.ask.reconnecting(e_,eF.current):void 0,copyMessage:H.ask.copyMessage}),[H,e_]),tg=(0,s.useCallback)(e=>{eg(e),eb(null)},[]);return(0,n.jsxs)("div",{className:"flex min-h-0 w-full flex-col h-full",children:[(0,n.jsx)(eX,{isPanel:F||P,showHistory:V,onToggleHistory:tp,onReset:ti,isLoading:eD,maximized:b,onMaximize:k,askMode:P?void 0:D,onModeSwitch:P?void 0:M,onClose:P?void 0:g,onDockToPanel:b?_:void 0,sessions:ev.sessions,activeSessionId:ev.activeSessionId,onLoadSession:tf,onDeleteSession:ev.deleteSession,onRenameSession:ev.renameSession,onTogglePinSession:ev.togglePinSession,messages:ev.messages}),V&&(0,n.jsx)(eK,{sessions:ev.sessions,activeSessionId:ev.activeSessionId,onLoad:tf,onDelete:ev.deleteSession,onRename:ev.renameSession,onTogglePin:ev.togglePinSession,onClearAll:ev.clearAllSessions,onClose:()=>Z(!1),onNewChat:ti}),!V&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"flex-1 min-h-0 flex flex-col",children:[!P&&(0,n.jsx)(eH,{messages:ev.messages,isLoading:eD,loadingPhase:eM,emptyPrompt:H.ask.emptyPrompt,emptyHint:H.ask.emptyHint,suggestions:H.ask.suggestions,onSuggestionClick:Y,labels:tx}),P&&(ev.messages.length>0||b)&&(0,n.jsx)(eH,{messages:ev.messages,isLoading:eD,loadingPhase:eM,emptyPrompt:H.ask.emptyPrompt,emptyHint:H.ask.emptyHint,suggestions:b&&0===ev.messages.length?H.ask.suggestions:[],onSuggestionClick:Y,labels:tx})]}),null!==eN.mentionQuery&&eN.mentionResults.length>0&&(0,n.jsx)("div",{className:"shrink-0 px-3 pb-1",children:(0,n.jsx)(eU,{results:eN.mentionResults,selectedIndex:eN.mentionIndex,query:eN.mentionQuery??void 0,onSelect:e1})}),null!==eS.slashQuery&&eS.slashResults.length>0&&(0,n.jsx)("div",{className:"shrink-0 px-3 pb-1",children:(0,n.jsx)(eW,{results:eS.slashResults,selectedIndex:eS.slashIndex,query:eS.slashQuery??void 0,onSelect:e2})}),(0,n.jsx)("div",{className:(0,ta.cn)("shrink-0",P?"px-2 pb-2 pt-0.5":"px-3 pb-2.5 pt-1"),children:(0,n.jsxs)("div",{className:(0,ta.cn)("rounded-xl bg-muted/40 transition-all focus-within:bg-muted/60",G&&"ring-2 ring-[var(--amber)] bg-[var(--amber-dim)]"),onDragOver:tu,onDragLeave:tc,onDrop:td,children:[(K.length>0||ej.localAttachments.length>0||ek.images.length>0||eo||eu||ej.uploadError||ek.imageError)&&(0,n.jsxs)("div",{className:(0,ta.cn)("px-3 pt-2.5 pb-1",F?"max-h-24 overflow-y-auto":"max-h-28 overflow-y-auto"),children:[(0,n.jsxs)("div",{className:"flex flex-wrap gap-1.5",children:[K.map(e=>(0,n.jsx)(e5,{path:e,variant:"kb",onRemove:()=>q(t=>t.filter(t=>t!==e))},e)),ej.localAttachments.map((e,t)=>(0,n.jsx)(e5,{path:e.name,variant:"upload",status:e.status,error:e.error,truncatedInfo:e.truncatedInfo,onRemove:()=>ej.removeAttachment(t)},`up-${e.name}-${t}`)),ek.images.map((e,t)=>(0,n.jsx)(e5,{path:e.fileName||`Image ${t+1}`,variant:"image",imageData:e.data,imageMime:e.mimeType,onRemove:()=>ek.removeImage(t)},`img-${t}`)),eo&&(0,n.jsx)(e5,{path:eo.name,variant:"skill",onRemove:()=>{el(null),I.current?.focus()}}),eu&&(0,n.jsx)(e5,{path:"object"==typeof eu&&"name"in eu?eu.name:"Remote Agent",variant:"agent",onRemove:()=>{eO(null),I.current?.focus()}})]}),eY&&(0,n.jsx)("div",{className:"mt-1 text-xs text-error",children:eY})]}),(0,n.jsxs)("form",{ref:eV,onSubmit:eP,className:(0,ta.cn)("flex items-end gap-1.5",P?"px-2 py-1.5":"px-3 py-2"),children:[(0,n.jsx)("div",{className:"relative shrink-0",children:(0,n.jsx)("button",{ref:er,type:"button",onClick:()=>et(e=>!e),className:"p-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted/60 transition-colors",title:H.hints.attachFile,children:(0,n.jsx)(o.A,{size:15})})}),B&&ee&&es&&(0,a.createPortal)((0,n.jsxs)("div",{ref:en,className:"fixed py-1 rounded-xl border border-border/60 bg-card shadow-lg z-50 min-w-[150px] animate-in fade-in-0 slide-in-from-bottom-2 duration-150",style:{top:`${es.top}px`,left:`${es.left}px`,transform:"translateY(-100%)"},onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("button",{type:"button",className:"flex w-full items-center gap-2.5 px-3 py-2 text-xs hover:bg-muted transition-colors text-left rounded-lg",onClick:()=>{ej.uploadInputRef.current?.click(),et(!1)},children:[(0,n.jsx)(l.A,{size:12,className:"shrink-0 text-muted-foreground"}),H.ask.attachFileLabel]}),(0,n.jsxs)("button",{type:"button",className:"flex w-full items-center gap-2.5 px-3 py-2 text-xs hover:bg-muted transition-colors text-left rounded-lg",onClick:()=>{O.current?.click(),et(!1)},children:[(0,n.jsx)(i.A,{size:12,className:"shrink-0 text-muted-foreground"}),H.ask.attachImageLabel]})]}),document.body),(0,n.jsx)("input",{ref:ej.uploadInputRef,type:"file",className:"hidden",multiple:!0,accept:".txt,.md,.markdown,.csv,.json,.yaml,.yml,.xml,.html,.htm,.pdf,text/plain,text/markdown,text/csv,application/json,application/pdf",onChange:async e=>{let t=e.currentTarget;await ej.pickFiles(t.files),t.value=""}}),(0,n.jsx)("input",{ref:O,type:"file",className:"hidden",multiple:!0,accept:"image/png,image/jpeg,image/gif,image/webp",onChange:async e=>{let t=e.currentTarget;await ek.handleFileSelect(t.files),t.value=""}}),(0,n.jsx)("textarea",{ref:e=>{I.current=e},value:W,onChange:e=>e0(e.target.value,e.target.selectionStart??void 0),onKeyDown:te,onPaste:tm,placeholder:H.ask.placeholder,rows:1,className:(0,ta.cn)("min-w-0 flex-1 resize-none overflow-y-hidden bg-transparent py-2 leading-relaxed text-foreground placeholder:text-muted-foreground/50 outline-none focus-visible:ring-0",P?"text-xs":"text-sm")}),eD?(0,n.jsx)("button",{type:"button",onClick:eI,className:"p-2 rounded-xl transition-colors shrink-0 text-foreground bg-muted hover:bg-muted/80",title:"reconnecting"===eM?H.ask.cancelReconnect:H.ask.stopTitle,children:"reconnecting"===eM?(0,n.jsx)(u.A,{size:15}):(0,n.jsx)(c.A,{size:15})}):(0,n.jsx)("button",{type:"submit",title:eB?H.ask.uploadsProcessing??"Wait for uploaded files to finish processing before sending.":H.ask.send,disabled:eB||!W.trim()&&0===ek.images.length,className:"p-2 rounded-xl disabled:opacity-20 disabled:scale-95 disabled:cursor-not-allowed transition-all duration-150 shrink-0 bg-[var(--amber)] text-[var(--amber-foreground)] shadow-sm shadow-[var(--amber)]/15 hover:shadow-md hover:shadow-[var(--amber)]/20 active:scale-95",children:(0,n.jsx)(d.A,{size:14})})]}),(0,n.jsxs)("div",{className:(0,ta.cn)("flex items-center justify-between border-t border-border/10",F?"px-2 pb-1.5 pt-1 gap-1":"px-3 pb-2 pt-1.5"),children:[(0,n.jsxs)("div",{className:(0,ta.cn)("flex items-center flex-wrap",F?"gap-1":"gap-2"),children:[(0,n.jsx)(v,{mode:ef,onChange:ep,disabled:eD}),B&&(0,n.jsx)(e3,{selectedAgent:eu,onSelect:eO,installedAgents:eC.installedAgents,loading:eC.loading}),B&&(0,n.jsx)(tt,{providerValue:ex,onProviderChange:tg,modelValue:eh,onModelChange:eb,disabled:eD})]}),!F&&!P&&(0,n.jsxs)("span",{className:"hidden md:inline text-2xs text-muted-foreground/40 select-none shrink-0",children:[(0,n.jsx)("kbd",{className:"font-mono",children:"Enter"})," ",H.ask.send," \xb7 ",(0,n.jsx)("kbd",{className:"font-mono",children:"Shift+Enter"})," ",H.ask.newlineHint]})]})]})})]})]})}},70620:(e,t,r)=>{r.d(t,{A:()=>d});var n=r(95155),s=r(12115),a=r(47650),o=r(21362),l=r(38798),i=r(94514),u=r(66088),c=r(91337);function d({dirPaths:e,value:t,onChange:r,rootLabel:d="Root"}){let[m,f]=(0,s.useState)(!1),[p,x]=(0,s.useState)(t),[g,h]=(0,s.useState)(null),b=(0,s.useRef)(null),v=(0,s.useRef)(null);(0,s.useEffect)(()=>{x(t)},[t]);let y=(0,s.useCallback)(()=>{if(!b.current)return;let e=b.current.getBoundingClientRect(),t=window.innerHeight-e.bottom,r=e.top,n=t<208&&r>t;h({top:n?e.top:e.bottom,left:e.left,width:e.width,flipUp:n})},[]),j=(0,s.useRef)(0),w=(0,s.useCallback)(()=>{j.current||(j.current=requestAnimationFrame(()=>{j.current=0,y()}))},[y]);(0,s.useEffect)(()=>m?(y(),window.addEventListener("scroll",w,!0),window.addEventListener("resize",w),()=>{window.removeEventListener("scroll",w,!0),window.removeEventListener("resize",w),j.current&&(cancelAnimationFrame(j.current),j.current=0)}):void h(null),[m,y,w]);let k=(0,s.useCallback)(()=>f(!1),[]);(0,s.useEffect)(()=>{if(!m)return;let e=e=>{"Escape"===e.key&&(e.preventDefault(),k())},t=e=>{let t=e.target;b.current?.contains(t)||v.current?.contains(t)||k()};return document.addEventListener("keydown",e),document.addEventListener("mousedown",t),()=>{document.removeEventListener("keydown",e),document.removeEventListener("mousedown",t)}},[m,k]);let N=(0,s.useMemo)(()=>{let t=p?p+"/":"";return e.filter(e=>{if(!e.startsWith(t))return!1;let r=e.slice(t.length);return r.length>0&&!r.includes("/")}).sort()},[e,p]),S=(0,s.useMemo)(()=>p?p.split("/"):[],[p]),C=e=>{if(e<0)x(""),r("");else{let t=S.slice(0,e+1).join("/");x(t),r(t)}},A=t?t.split("/").map(e=>(0,c.vr)(e)).join(" / "):"/ "+d,E=m&&g&&(0,a.createPortal)((0,n.jsxs)("div",{ref:v,className:"fixed z-50 rounded-lg border border-[var(--amber)] bg-card shadow-lg overflow-hidden flex flex-col",style:{left:g.left,width:g.width,maxHeight:200,...g.flipUp?{bottom:window.innerHeight-g.top+4}:{top:g.top+4}},children:[(0,n.jsxs)("div",{className:"flex items-center gap-0.5 px-3 py-1.5 bg-muted/30 border-b border-border overflow-x-auto text-xs shrink-0",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>C(-1),className:`shrink-0 px-1.5 py-0.5 rounded transition-colors ${""===p?"text-[var(--amber)] font-medium":"text-muted-foreground hover:text-foreground"}`,children:["/ ",d]}),S.map((e,t)=>(0,n.jsxs)("span",{className:"flex items-center gap-0.5 shrink-0",children:[(0,n.jsx)(o.A,{size:10,className:"text-muted-foreground/50"}),(0,n.jsx)("button",{type:"button",onClick:()=>C(t),className:`px-1.5 py-0.5 rounded transition-colors truncate max-w-[100px] ${t===S.length-1?"text-[var(--amber)] font-medium":"text-muted-foreground hover:text-foreground"}`,children:e})]},t))]}),N.length>0?(0,n.jsx)("div",{className:"flex-1 min-h-0 overflow-y-auto",children:N.map(t=>{let s=t.split("/").pop()||t,a=e.some(e=>e.startsWith(t+"/"));return(0,n.jsxs)("button",{type:"button",onClick:()=>{x(t),r(t)},className:"w-full flex items-center gap-2 px-3 py-1.5 text-xs text-foreground hover:bg-muted/60 transition-colors",children:[(0,n.jsx)(l.A,{size:12,className:"shrink-0 text-[var(--amber)]"}),(0,n.jsx)("span",{className:"flex-1 text-left truncate",children:s}),a&&(0,n.jsx)(o.A,{size:11,className:"shrink-0 text-muted-foreground/40"})]},t)})}):(0,n.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground/50 text-center",children:"—"}),(0,n.jsx)("button",{type:"button",onClick:k,className:"w-full py-1.5 flex items-center justify-center gap-1 text-xs font-medium text-[var(--amber)] border-t border-border hover:bg-muted/30 transition-colors shrink-0",children:(0,n.jsx)(i.A,{size:12})})]}),document.body);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{ref:b,type:"button",onClick:()=>f(e=>!e),"aria-haspopup":"true","aria-expanded":m,className:`w-full flex items-center gap-2 px-3 py-2 text-sm rounded-lg border bg-background text-foreground transition-colors text-left focus-visible:ring-1 focus-visible:ring-ring outline-none ${m?"border-[var(--amber)]":"border-border hover:border-[var(--amber)]/40"}`,children:[(0,n.jsx)(l.A,{size:14,className:"shrink-0 text-[var(--amber)]"}),(0,n.jsx)("span",{className:"flex-1 truncate",children:A}),(0,n.jsx)(u.A,{size:14,className:`shrink-0 text-muted-foreground transition-transform duration-150 ${m?"rotate-180":""}`})]}),E]})}},76449:(e,t,r)=>{r.d(t,{g:()=>n});let n=[{anchor:"files-panel",position:"right"},{anchor:"ask-button",position:"bottom"},{anchor:"agents-panel",position:"right"}]}}]);
28
+ `,title:ej,"aria-expanded":d,"aria-haspopup":"listbox",children:[(0,n.jsx)(e8.A,{size:11,className:"shrink-0"}),(0,n.jsxs)("span",{className:"truncate",children:[ey,(0,n.jsx)("span",{className:"text-muted-foreground",children:" \xb7 "}),(0,n.jsx)("span",{className:ew?"text-[var(--amber)]":"text-muted-foreground",children:ev})]}),(0,n.jsx)(g.A,{size:10,className:"shrink-0 text-muted-foreground"})]}),"u">typeof document&&ek&&(0,a.createPortal)(ek,document.body),"u">typeof document&&d&&(()=>{if(!S)return null;let t=(0,e9.lh)(j?.ai?.providers??[],S),s=t?e6.T_[t.protocol]:null,o=t?.name||(s?"zh"===c?s.nameZh:s.name:String(S));return(0,a.createPortal)((0,n.jsxs)("div",{ref:b,style:A,className:"w-[220px] rounded-lg border border-border bg-card shadow-lg py-1 animate-in fade-in-0 zoom-in-95 duration-100",onMouseEnter:Y,onMouseLeave:J,children:[(0,n.jsxs)("div",{className:"flex items-center justify-between px-3 py-1.5 border-b border-border/40",children:[(0,n.jsx)("span",{className:"text-2xs font-medium text-muted-foreground",children:o}),(0,n.jsx)("button",{type:"button",onClick:()=>ec(S,!0),disabled:T,className:"p-1 text-muted-foreground/50 hover:text-foreground transition-colors disabled:opacity-30",title:"Refresh",children:(0,n.jsx)(e4.A,{size:10,className:T?"animate-spin":""})})]}),(0,n.jsx)("div",{className:"px-2 pt-1.5 pb-1",children:(0,n.jsxs)("div",{className:"relative",children:[(0,n.jsx)(H.A,{size:10,className:"absolute left-2 top-1/2 -translate-y-1/2 text-muted-foreground/40"}),(0,n.jsx)("input",{ref:v,type:"text",value:M,onChange:e=>_(e.target.value),onKeyDown:eb,placeholder:u.ask?.searchModels??"Search...",className:"w-full text-2xs pl-6 pr-2 py-1 rounded border border-border/50 bg-transparent text-foreground placeholder:text-muted-foreground/40 focus:outline-none focus-visible:border-[var(--amber)]/50",autoComplete:"off"})]})}),(0,n.jsxs)("div",{ref:y,className:"max-h-[240px] overflow-y-auto px-1 pb-1",children:[T&&!R&&(0,n.jsxs)("div",{className:"flex items-center gap-1.5 px-2 py-3 text-2xs text-muted-foreground justify-center",children:[(0,n.jsx)(P.A,{size:10,className:"animate-spin"}),u.ask?.loadingModels??"Loading..."]}),L&&!T&&(0,n.jsx)("div",{className:"px-2 py-3 text-2xs text-destructive text-center",children:L}),!T&&!L&&0===eh.length&&null!==R&&(0,n.jsx)("div",{className:"px-2 py-3 text-2xs text-muted-foreground text-center",children:M?"No matches":"No models"}),eh.map((a,o)=>{let l=e===S&&r===a,i=t?.model||s?.defaultModel;return(0,n.jsxs)("button",{type:"button","data-model-item":!0,onClick:()=>eg(S,a),className:`w-full text-left px-2 py-1 text-2xs rounded transition-colors flex items-center gap-1 ${l?"bg-[var(--amber)]/12 text-foreground font-medium":o===F?"bg-accent":"hover:bg-accent/60"}`,children:[l?(0,n.jsx)(x.A,{size:9,className:"shrink-0 text-[var(--amber)]"}):(0,n.jsx)("span",{className:"w-[9px] shrink-0"}),(0,n.jsx)("span",{className:"truncate",children:a}),a===i&&!l&&(0,n.jsx)("span",{className:"ml-auto text-[9px] text-muted-foreground/30 shrink-0",children:"default"})]},a)})]})]}),document.body)})()]})}var tr=r(68589);let tn=new Set([401,403,429]),ts=[/api.?key/i,/model.*not.?found/i,/authentication/i,/unauthorized/i,/forbidden/i];var ta=r(91337),to=r(2431);let tl=new WeakMap;function ti({visible:e,currentFile:t,initialMessage:r,initialAcpAgent:f,onFirstMessage:p,variant:x,onClose:g,maximized:b,onMaximize:k,askMode:D,onModeSwitch:M,onDockToPanel:_}){let F="panel"===x,P="home"===x,I=(0,s.useRef)(null),O=(0,s.useRef)(null),{t:H}=(0,m.Y)(),[B,U]=(0,s.useState)(!1);(0,s.useEffect)(()=>U(!0),[]);let[W,Y]=(0,s.useState)(""),J=(0,s.useRef)("");J.current=W;let[K,q]=(0,s.useState)([]),Q=(0,s.useRef)(K);Q.current=K;let[V,Z]=(0,s.useState)(!1),[G,X]=(0,s.useState)(!1),[ee,et]=(0,s.useState)(!1),er=(0,s.useRef)(null),en=(0,s.useRef)(null),[es,ea]=(0,s.useState)(null),[eo,el]=(0,s.useState)(null),ei=(0,s.useRef)(eo);ei.current=eo;let[eu,ec]=(0,s.useState)(null),ed=(0,s.useRef)(eu),em=(0,s.useRef)(null);ed.current=eu;let[ef,ep]=(0,s.useState)("agent"),[ex,eg]=(0,s.useState)(null),[eh,eb]=(0,s.useState)(null);(0,s.useEffect)(()=>{ep(function(){try{let e=localStorage.getItem(h);if("chat"===e||"agent"===e)return e}catch{}return"agent"}());let e=function(){try{let e=localStorage.getItem(e7);if(!e){let e=localStorage.getItem("mindos-provider-override");if(e&&((0,e6.rl)(e)||(0,e9.Ny)(e)))return{provider:e,model:null};return{provider:null,model:null}}let t=JSON.parse(e),r=t?.provider&&((0,e6.rl)(t.provider)||(0,e9.Ny)(t.provider))?t.provider:null,n="string"==typeof t?.model?t.model:null;return{provider:r,model:n}}catch{return{provider:null,model:null}}}();eg(e.provider),eb(e.model)},[]);let ev=function(e){let[t,r]=(0,s.useState)([]),[n,a]=(0,s.useState)([]),[o,l]=(0,s.useState)(null),i=(0,s.useRef)(null),u=(0,s.useCallback)(async()=>{let t=(await N()).sort((e,t)=>t.updatedAt-e.updatedAt).slice(0,30),n=t.filter(e=>0===e.messages.length).map(e=>e.id),s=n.length>0?t.filter(e=>!n.includes(e.id)):t;n.length>0&&A(n);let o=w(e),i=e?s.find(t=>t.currentFile===e):s[0];i?(l(i.id),r(i.messages),a([...s])):(l(o.id),r([]),a([o,...s].slice(0,30)))},[e]),c=(0,s.useCallback)((t,r)=>{if(!r||0===t.length)return;let n=null;a(s=>{let a=Date.now(),o=s.find(e=>e.id===r);n=o?{...o,currentFile:e,updatedAt:a,messages:t}:{id:r,currentFile:e,createdAt:a,updatedAt:a,messages:t};let l=s.filter(e=>e.id!==r);return[n,...l].sort((e,t)=>t.updatedAt-e.updatedAt).slice(0,30)}),i.current&&clearTimeout(i.current),i.current=setTimeout(()=>{n&&S(n)},600)},[e]),d=(0,s.useCallback)(()=>{i.current&&(clearTimeout(i.current),i.current=null)},[]),m=(0,s.useCallback)(()=>{a(t=>{let n=t.find(e=>e.id===o);if(n&&0===n.messages.length)return t;let s=w(e);return l(s.id),r([]),[s,...t].sort((e,t)=>t.updatedAt-e.updatedAt).slice(0,30)})},[e,o]),f=(0,s.useCallback)(e=>{let t=n.find(t=>t.id===e);if(!t)return;let s=o?n.find(e=>e.id===o):null;s&&0===s.messages.length&&s.id!==e&&a(e=>e.filter(e=>e.id!==s.id)),l(t.id),r(t.messages)},[n,o]),p=(0,s.useCallback)(t=>{let s=n.find(e=>e.id===t);s&&s.messages.length>0&&C(t);let i=n.filter(e=>e.id!==t);if(a(i),o===t){let t=w(e);l(t.id),r([]),a([t,...i].slice(0,30))}},[o,e,n]),x=(0,s.useCallback)((e,t)=>{let r=t.trim();a(t=>{let n=t.findIndex(t=>t.id===e);if(n<0)return t;let s={...t[n],title:r||void 0},a=[...t];return a[n]=s,S(s),a})},[]),g=(0,s.useCallback)(e=>{a(t=>{let r=t.findIndex(t=>t.id===e);if(r<0)return t;let n={...t[r],pinned:!t[r].pinned},s=[...t];return s[r]=n,n.messages.length>0&&S(n),s})},[]),h=(0,s.useCallback)(t=>{var r;if(!o)return;let s=n.find(e=>e.id===o);if(!s)return;let l=(r={...s,currentFile:s.currentFile??e,updatedAt:Date.now()},{...r,defaultAcpAgent:t});a(e=>[l,...e.filter(e=>e.id!==o)].sort((e,t)=>t.updatedAt-e.updatedAt).slice(0,30)),i.current&&clearTimeout(i.current),l.messages.length>0&&(i.current=setTimeout(()=>{S(l)},600))},[o,e,n]),b=(0,s.useCallback)(()=>{let t=n.filter(e=>e.messages.length>0).map(e=>e.id);t.length>0&&A(t);let s=w(e);l(s.id),r([]),a([s])},[e,n]);return{messages:t,setMessages:r,sessions:[...n].sort((e,t)=>e.pinned&&!t.pinned?-1:!e.pinned&&t.pinned?1:t.updatedAt-e.updatedAt),activeSession:n.find(e=>e.id===o)??null,activeSessionId:o,initSessions:u,persistSession:c,clearPersistTimer:d,resetSession:m,loadSession:f,deleteSession:p,renameSession:x,togglePinSession:g,setSessionDefaultAcpAgent:h,clearAllSessions:b}}(t),ey=(0,s.useRef)(ev);ey.current=ev;let ej=function(e){let[t,r]=(0,s.useState)([]),[n,a]=(0,s.useState)(""),o=(0,s.useRef)(null),l=(0,s.useRef)(e);l.current=e;let i=(0,s.useCallback)(async e=>{if(!e||0===e.length)return;let t=Array.from(e).slice(0,8),n=[],s=[];for(let e of t){let t=R(e.name);E.has(t)?n.push(e):s.push(e.name)}if(s.length>0){let e=l.current?.unsupportedType??"Unsupported file type";a(`${e}: ${s.join(", ")}`)}else a("");let o=[],i=[];for(let e of n)".pdf"===R(e.name)?(i.push({name:e.name,content:"",status:"loading"}),o.push(e)):i.push({name:e.name,content:await e.text(),status:"success"});if(r(e=>{let t=[...e];for(let e of i)t.some(t=>t.name===e.name)||t.push(e);return t}),o.length>0){let e=await Promise.all(o.map(z));r(t=>t.map(t=>"loading"!==t.status?t:e.find(e=>e.name===t.name)??t))}},[]),u=(0,s.useCallback)(e=>{r(t=>t.filter((t,r)=>r!==e))},[]);return{localAttachments:t,uploadError:n,uploadInputRef:o,pickFiles:i,removeAttachment:u,clearAttachments:(0,s.useCallback)(()=>{r([]),a("")},[]),injectFiles:(0,s.useCallback)(e=>{r(t=>{let r=[...t];for(let t of e)r.some(e=>e.name===t.name)||r.push(t);return r})},[])}}((0,s.useMemo)(()=>({unsupportedType:H.fileImport?.unsupported}),[H])),ew=(0,s.useRef)(ej);ew.current=ej;let ek=function(){let[e,t]=(0,s.useState)([]),[r,n]=(0,s.useState)(""),a=(0,s.useCallback)(async e=>{n("");let r=e.slice(0,4),s=[];for(let e of r){var a;if(a=e.type,!T.has(a)){n(`Unsupported image type: ${e.type}`);continue}try{let{data:t,mimeType:r}=await $(e);s.push({type:"image",data:t,mimeType:r,fileName:e.name||void 0})}catch{n(`Failed to process image: ${e.name}`)}}t(e=>{let t=[...e,...s];return t.length>4?(n("Maximum 4 images allowed"),t.slice(0,4)):t})},[]),o=(0,s.useCallback)(async e=>{let t=e.clipboardData?.items;if(!t)return!1;let r=L(t);return 0!==r.length&&(await a(r),!0)},[a]),l=(0,s.useCallback)(async e=>{let t=e.dataTransfer?.items;if(!t)return;let r=L(t);r.length>0&&(e.preventDefault(),await a(r))},[a]),i=(0,s.useCallback)(async e=>{if(!e)return;let t=Array.from(e).filter(e=>{var t;return t=e.type,T.has(t)});await a(t)},[a]);return{images:e,imageError:r,addImages:a,handlePaste:o,handleDrop:l,handleFileSelect:i,removeImage:(0,s.useCallback)(e=>{t(t=>t.filter((t,r)=>r!==e))},[]),clearImages:(0,s.useCallback)(()=>{t([]),n("")},[])}}(),eN=function(){let[e,t]=(0,s.useState)([]),[r,n]=(0,s.useState)(null),[a,o]=(0,s.useState)([]),[l,i]=(0,s.useState)(0),u=(0,s.useCallback)(()=>{fetch("/api/files").then(e=>e.ok?e.json():[]).then(e=>Array.isArray(e)?e:[]).catch(()=>[]).then(t)},[]);(0,s.useEffect)(()=>{u();let e=()=>u();return window.addEventListener("mindos:files-changed",e),()=>window.removeEventListener("mindos:files-changed",e)},[u]);let c=(0,s.useCallback)((t,r)=>{let s=r??t.length,a=t.slice(0,s),l=a.lastIndexOf("@");if(-1===l||l>0&&" "!==a[l-1]&&"\n"!==a[l-1])return void n(null);let u=a.slice(l+1);if(u.includes(" ")||u.includes("\n")){n(null),o([]),i(0);return}let c=u.toLowerCase();if(!c){n(u),o(e.slice(0,30)),i(0);return}let d=e.map(e=>{let t=(e.split("/").pop()??e).toLowerCase(),r=e.toLowerCase(),n=0;return t.startsWith(c)?n=100:t.includes(c)?n=50:r.includes(c)&&(n=10),{path:e,score:n}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score).slice(0,30);if(0===d.length){n(null),o([]),i(0);return}n(u),o(d.map(e=>e.path)),i(0)},[e]),d=(0,s.useCallback)(e=>{0!==a.length&&("down"===e?i(e=>Math.min(e+1,a.length-1)):i(e=>Math.max(e-1,0)))},[a.length]);return{mentionQuery:r,mentionResults:a,mentionIndex:l,updateMentionFromInput:c,navigateMention:d,resetMention:(0,s.useCallback)(()=>{n(null),o([]),i(0)},[])}}(),eS=function(){let[e,t]=(0,s.useState)([]),[r,n]=(0,s.useState)(null),[a,o]=(0,s.useState)([]),[l,i]=(0,s.useState)(0),u=(0,s.useRef)(!1),c=(0,s.useCallback)(async()=>{t((await fetch("/api/skills").then(e=>e.ok?e.json():{skills:[]}).then(e=>Array.isArray(e?.skills)?e.skills:[]).catch(()=>[])).filter(e=>e.enabled)),u.current=!0},[]);(0,s.useEffect)(()=>{c();let e=()=>c();return window.addEventListener("mindos:skills-changed",e),()=>window.removeEventListener("mindos:skills-changed",e)},[c]);let d=(0,s.useCallback)((t,r)=>{let s=t.slice(0,r),a=s.lastIndexOf("/");if(-1===a||a>0&&" "!==s[a-1]&&"\n"!==s[a-1])return void n(null);let l=s.slice(a+1);if(l.includes(" "))return void n(null);if(!u.current){c(),n(null);return}let d=l.toLowerCase(),m=d?e.map(e=>{let t=e.name.toLowerCase(),r=0;return t.startsWith(d)?r=100:t.includes(d)?r=50:e.description.toLowerCase().includes(d)&&(r=10),{s:e,score:r}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score).slice(0,20).map(e=>({type:"skill",name:e.s.name,description:e.s.description})):e.slice(0,20).map(e=>({type:"skill",name:e.name,description:e.description}));if(0===m.length){n(null),o([]),i(0);return}n(l),o(m),i(0)},[e,c]),m=(0,s.useCallback)(e=>{0!==a.length&&("down"===e?i(e=>Math.min(e+1,a.length-1)):i(e=>Math.max(e-1,0)))},[a.length]);return{slashQuery:r,slashResults:a,slashIndex:l,updateSlashFromInput:d,navigateSlash:m,resetSlash:(0,s.useCallback)(()=>{n(null),o([]),i(0)},[])}}(),eC=(0,to.z)(),eA=(0,s.useRef)(ek);eA.current=ek;let eE=(0,s.useRef)(eN);eE.current=eN;let eR=(0,s.useRef)(eS);eR.current=eS;let ez=(0,s.useCallback)(()=>{Y(""),el(null),q(t?[t]:[]),ew.current.clearAttachments()},[t]),eT=(0,s.useCallback)(e=>{Y(e.content),e.images&&e.images.length>0&&eA.current.clearImages(),e.attachedFiles&&q(e.attachedFiles),e.skillName&&eR.current.resetSlash(),ec(e.agentId&&e.agentName&&e.agentId!==y.id?{id:e.agentId,name:e.agentName}:null),setTimeout(()=>I.current?.focus(),50)},[]),e$=(0,s.useRef)({inputValueRef:J,mentionRef:eE,slashRef:eR,imageUploadRef:eA,sessionRef:ey,uploadRef:ew,selectedSkillRef:ei,selectedAcpAgentRef:ed,attachedFilesRef:Q}),eL=function({currentFile:e,chatMode:t,providerOverride:r,modelOverride:n,onFirstMessage:a,refs:o,errorLabels:l,resetInputState:i,onRestoreInput:u}){let[c,d]=(0,s.useState)(!1),[m,f]=(0,s.useState)("connecting"),[p,x]=(0,s.useState)(0),g=(0,s.useRef)(3),h=(0,s.useRef)(null),b=(0,s.useRef)(!1),v=(0,s.useRef)(!1),y=(0,s.useRef)(null),w=(0,s.useRef)(!1),k=(0,s.useCallback)(()=>{let e=y.current;h.current?.abort(),e&&(w.current=!0,o.sessionRef.current?.setMessages(t=>{let r=[...t],n=e.userMessageIndex;return n+1<r.length&&r[n+1]?.role==="assistant"&&r.splice(n+1,1),n<r.length&&r[n]?.role==="user"&&r.splice(n,1),r}),u?.(e.userMessage),y.current=null,v.current=!0,setTimeout(()=>{v.current=!1},300))},[o,u]),N=(0,s.useCallback)(async s=>{if(s.preventDefault(),v.current)return;let u=o.mentionRef.current,c=o.slashRef.current,m=o.imageUploadRef.current,p=o.sessionRef.current,k=o.uploadRef.current;if(!u||!c||!m||!p||!k||null!==u.mentionQuery||null!==c.slashQuery)return;let N=o.inputValueRef.current?.trim()??"";if(k.localAttachments.some(e=>"loading"===e.status)||!N&&0===m.images.length||S.current)return;let C=o.selectedSkillRef.current,A=o.selectedAcpAgentRef.current,E=m.images.length>0?[...m.images]:void 0,R=o.attachedFilesRef.current.filter(t=>t!==e),z=R.length>0?R:void 0,T=k.localAttachments.filter(e=>"loading"!==e.status).map(e=>e.name),$=j({role:"user",content:N,timestamp:Date.now(),...C&&{skillName:C.name},...E&&{images:E},...z&&{attachedFiles:z},...T.length>0&&{uploadedFileNames:T}},A);m.clearImages();let L=[...p.messages,$];y.current={userMessageIndex:L.length-1,userMessage:$},w.current=!1,p.setMessages([...L,j({role:"assistant",content:"",timestamp:Date.now()},A)]),i(),a&&!b.current&&(b.current=!0,a()),d(!0),f("connecting"),x(0);let D=new AbortController;h.current=D;let M=3;try{let e=localStorage.getItem("mindos-reconnect-retries");if(null!==e){let t=parseInt(e,10);Number.isFinite(t)&&(M=Math.max(0,Math.min(10,t)))}}catch{}g.current=M;let _=JSON.stringify({messages:L,currentFile:e,attachedFiles:o.attachedFilesRef.current,uploadedFiles:k.localAttachments.filter(e=>"loading"!==e.status).map(e=>({name:e.name,content:e.content.length>8e4?e.content.slice(0,8e4)+"\n\n[...truncated to first ~80000 chars]":e.content})),selectedAcpAgent:A,mode:t,providerOverride:r??void 0,modelOverride:n??void 0}),F=async()=>{let e=await fetch("/api/ask",{method:"POST",headers:{"Content-Type":"application/json"},body:_,signal:D.signal});if(!e.ok){let t=`Request failed (${e.status})`;try{let r=await e.json();"string"==typeof r?.error&&r.error.trim()?t=r.error:"object"==typeof r?.error&&"string"==typeof r.error?.message&&r.error.message.trim()?t=r.error.message:"string"==typeof r?.message&&r.message.trim()&&(t=r.message)}catch(e){console.warn("[useAskChat] error body parse failed:",e)}let r=Error(t);throw r.httpStatus=e.status,r}if(!e.body)throw Error("No response body");return f("thinking"),{finalMessage:await (0,tr.m)(e.body,e=>{f("streaming"),o.sessionRef.current?.setMessages(t=>{let r=[...t];return r[r.length-1]=j(e,A),r})},D.signal)}};try{let e=null;for(let t=0;t<=M&&!D.signal.aborted;t++){if(t>0){var P;x(t),f("reconnecting"),o.sessionRef.current?.setMessages(e=>{let t=[...e];return t[t.length-1]=j({role:"assistant",content:"",timestamp:Date.now()},A),t}),await function(e,t){return new Promise((r,n)=>{let s=()=>t?.reason??new DOMException("The operation was aborted.","AbortError");if(t?.aborted)return void n(s());let a=setTimeout(r,e);t?.addEventListener("abort",()=>{clearTimeout(a),n(s())},{once:!0})})}((P=t-1,Math.min(1e3*2**P,1e4)),D.signal),f("connecting")}try{let{finalMessage:e}=await F();e.content.trim()||e.parts&&0!==e.parts.length||o.sessionRef.current?.setMessages(e=>{let t=[...e];return t[t.length-1]=j({role:"assistant",content:`__error__${l.noResponse}`},A),t}),y.current=null;return}catch(n){e=n instanceof Error?n:Error(String(n));let r=n.httpStatus;if(!function(e,t){if(e instanceof DOMException&&"AbortError"===e.name||t&&tn.has(t))return!1;if(e instanceof Error){let t=e.message;if(ts.some(e=>e.test(t)))return!1}return!0}(n,r)||t>=M)break}}if(e)throw e}catch(e){if("AbortError"===e.name)w.current||o.sessionRef.current?.setMessages(e=>{let t=[...e],r=t.length-1;if(r>=0&&"assistant"===t[r].role){let e=t[r];e.content.trim()||e.parts&&e.parts.length>0||(t[r]=j({role:"assistant",content:`__error__${l.stopped}`},A))}return t});else{let t=e instanceof Error?e.message:"Something went wrong";o.sessionRef.current?.setMessages(e=>{let r=[...e],n=r.length-1;if(n>=0&&"assistant"===r[n].role){let e=r[n];if(!(e.content.trim()||e.parts&&e.parts.length>0))return r[n]=j({role:"assistant",content:`__error__${t}`},A),r}return[...r,j({role:"assistant",content:`__error__${t}`},A)]})}}finally{d(!1),x(0),h.current=null,y.current=null}},[e,t,r,l.noResponse,l.stopped,a,o,i]),S=(0,s.useRef)(c);return S.current=c,{isLoading:c,isLoadingRef:S,loadingPhase:m,reconnectAttempt:p,reconnectMaxRef:g,abortRef:h,firstMessageFired:b,submit:N,stop:k}}({currentFile:t,chatMode:ef,providerOverride:ex,modelOverride:eh,onFirstMessage:p,refs:e$.current,errorLabels:{noResponse:H.ask.errorNoResponse,stopped:H.ask.stopped},resetInputState:ez,onRestoreInput:eT}),{isLoading:eD,loadingPhase:eM,reconnectAttempt:e_,reconnectMaxRef:eF}=eL,eP=eL.submit,eI=eL.stop,eO=(0,s.useCallback)(e=>{ec(e),ev.setSessionDefaultAcpAgent(e)},[ev]),eB=ej.localAttachments.some(e=>"loading"===e.status),eY=ej.uploadError||ek.imageError||"";(0,s.useEffect)(()=>{let e=e=>{let t=e.detail?.files;Array.isArray(t)&&t.length>0&&ew.current.injectFiles(t)};return window.addEventListener("mindos:inject-ask-files",e),()=>window.removeEventListener("mindos:inject-ask-files",e)},[]),(0,s.useEffect)(()=>{if(!ee||!er.current)return void ea(null);let e=er.current.getBoundingClientRect();ea({top:e.top-8,left:e.left})},[ee]),(0,s.useEffect)(()=>{if(!ee)return;let e=e=>{let t=e.target;!t||er.current?.contains(t)||en.current?.contains(t)||et(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[ee]),(0,s.useEffect)(()=>{if(!P)return;let e=e=>{let t=e.detail?.text;"string"==typeof t&&(Y(t),setTimeout(()=>I.current?.focus(),50))};return window.addEventListener("mindos:home-suggestion",e),()=>window.removeEventListener("mindos:home-suggestion",e)},[P]);let eJ=(0,s.useRef)(!1),eq=(0,s.useRef)(t);(0,s.useEffect)(()=>{let n="panel"===x||"home"===x?e&&!eJ.current:e,s=e&&eJ.current&&t!==eq.current;n?(em.current=f??null,setTimeout(()=>I.current?.focus(),50),ev.initSessions(),Y(r||""),eL.firstMessageFired.current=!1,q(t?[t]:[]),ej.clearAttachments(),ek.clearImages(),eN.resetMention(),eS.resetSlash(),el(null),ec(f??null),Z(!1)):s?q(t?[t]:[]):e||"modal"!==x||eL.abortRef.current?.abort(),"home"===x&&e&&!eJ.current&&setTimeout(()=>I.current?.focus(),150),eJ.current=e,eq.current=t},[e,t]),(0,s.useEffect)(()=>{if(!e||!ev.activeSessionId)return;let t=em.current;ec(function({sessionAgent:e,initialAgent:t}){return e??t??null}({sessionAgent:ev.activeSession?.defaultAcpAgent??null,initialAgent:t})),t&&!ev.activeSession?.defaultAcpAgent&&ev.activeSession?.messages.length===0&&ev.setSessionDefaultAcpAgent(t),em.current=null},[e,ev.activeSessionId,ev.activeSession?.defaultAcpAgent,ev.activeSession?.messages.length,ev.setSessionDefaultAcpAgent]);let eQ=(0,s.useRef)(ev.clearPersistTimer);eQ.current=ev.clearPersistTimer,(0,s.useEffect)(()=>{if(!e||!ev.activeSessionId)return;let t=ev.messages;if(eL.isLoading&&t.length>0){let e=t[t.length-1];if("assistant"===e.role&&!e.content.trim()&&(!e.parts||0===e.parts.length))return}return ev.persistSession(t,ev.activeSessionId),()=>eQ.current()},[e,ev.messages,ev.activeSessionId,eL.isLoading]),(0,s.useEffect)(()=>{if(!e||"home"===x)return;let t="modal"===x,r="panel"===x&&b;if(!t&&!r)return;let n=e=>{if("Escape"===e.key){if(null!==eE.current.mentionQuery)return void eE.current.resetMention();if(null!==eR.current.slashQuery)return void eR.current.resetSlash();if(r&&k)return void k();t&&g&&g()}};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[x,e,g,b,k]);let eV=(0,s.useRef)(null);(0,s.useLayoutEffect)(()=>{if(!e)return;let t=I.current;t&&t instanceof HTMLTextAreaElement&&function(e,t){let r=tl.get(e);if(!r){let t=getComputedStyle(e),n=parseFloat(t.lineHeight),s=parseFloat(t.fontSize),a=Number.isFinite(s)?s:14,o=8*(Number.isFinite(n)?n:1.375*a)+((Number.isFinite(parseFloat(t.paddingTop))?parseFloat(t.paddingTop):0)+(Number.isFinite(parseFloat(t.paddingBottom))?parseFloat(t.paddingBottom):0));if(!Number.isFinite(o)||o<=0)return;r={maxH:o},tl.set(e,r)}let{maxH:n}=r;e.style.height="auto";let s=e.scrollHeight,a=Math.min(s,n);e.style.height=`${a}px`,e.style.overflowY=s>n?"auto":"hidden"}(t,0)},[W,eD,e]),(0,s.useEffect)(()=>{let e=I.current;if(!e)return;let t=()=>tl.delete(e);return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]);let eZ=(0,s.useRef)(null),eG=(0,s.useRef)(null),e0=(0,s.useCallback)((e,t)=>{Y(e);let r=t??e.length;eZ.current&&clearTimeout(eZ.current),eG.current&&clearTimeout(eG.current),eZ.current=setTimeout(()=>eE.current.updateMentionFromInput(e,r),80),eG.current=setTimeout(()=>eR.current.updateSlashFromInput(e,r),80)},[]);(0,s.useEffect)(()=>()=>{eZ.current&&clearTimeout(eZ.current),eG.current&&clearTimeout(eG.current)},[]);let e1=(0,s.useCallback)(e=>{let t=I.current,r=J.current,n=t?.selectionStart??r.length,s=r.slice(0,n).lastIndexOf("@");Y(r.slice(0,s)+r.slice(n)),eE.current.resetMention(),Q.current.includes(e)||q(t=>[...t,e]),setTimeout(()=>{I.current?.focus(),I.current?.setSelectionRange(s,s)},0)},[]),e2=(0,s.useCallback)(e=>{let t=I.current,r=J.current,n=t?.selectionStart??r.length,s=r.slice(0,n).lastIndexOf("/");Y(r.slice(0,s)+r.slice(n)),el(e),eR.current.resetSlash(),setTimeout(()=>{I.current?.focus(),I.current?.setSelectionRange(s,s)},0)},[]),e4=(0,s.useRef)(e1);e4.current=e1;let e8=(0,s.useRef)(e2);e8.current=e2;let te=(0,s.useCallback)(e=>{let t=eE.current,r=eR.current;if(null!==t.mentionQuery){if("Escape"===e.key){e.preventDefault(),t.resetMention();return}if("ArrowDown"===e.key)e.preventDefault(),t.navigateMention("down");else if("ArrowUp"===e.key)e.preventDefault(),t.navigateMention("up");else if("Enter"===e.key||"Tab"===e.key){if("Enter"===e.key&&(e.shiftKey||e.nativeEvent.isComposing))return;t.mentionResults.length>0&&(e.preventDefault(),e4.current(t.mentionResults[t.mentionIndex]))}return}if(null!==r.slashQuery){if("Escape"===e.key){e.preventDefault(),r.resetSlash();return}if("ArrowDown"===e.key)e.preventDefault(),r.navigateSlash("down");else if("ArrowUp"===e.key)e.preventDefault(),r.navigateSlash("up");else if("Enter"===e.key||"Tab"===e.key){if("Enter"===e.key&&(e.shiftKey||e.nativeEvent.isComposing))return;r.slashResults.length>0&&(e.preventDefault(),e8.current(r.slashResults[r.slashIndex]))}return}"Enter"===e.key&&!e.shiftKey&&!e.nativeEvent.isComposing&&!eL.isLoadingRef.current&&(J.current.trim()||eA.current.images.length>0)&&(e.preventDefault(),e.currentTarget.form?.requestSubmit())},[]),ti=(0,s.useCallback)(()=>{eL.isLoadingRef.current||(ey.current.resetSession(),Y(""),q(t?[t]:[]),ew.current.clearAttachments(),eA.current.clearImages(),eE.current.resetMention(),eR.current.resetSlash(),el(null),ec(null),em.current=null,Z(!1),eL.firstMessageFired.current=!1,setTimeout(()=>I.current?.focus(),0))},[t]),tu=(0,s.useCallback)(e=>{(e.dataTransfer.types.includes("text/mindos-path")||e.dataTransfer.types.includes("Files"))&&(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect="copy",X(!0))},[]),tc=(0,s.useCallback)(()=>X(!1),[]),td=(0,s.useCallback)(e=>{e.preventDefault(),e.stopPropagation(),X(!1);let t=e.dataTransfer.getData("text/mindos-path");if(t){let r="directory"===e.dataTransfer.getData("text/mindos-type")?t.replace(/\/?$/,"/"):t;Q.current.includes(r)||q(e=>[...e,r]);return}let r=e.dataTransfer.files;if(r.length>0){let t=Array.from(r).some(e=>e.type.startsWith("image/")),n=Array.from(r).filter(e=>!e.type.startsWith("image/"));(async()=>{try{if(t&&await eA.current.handleDrop(e),n.length>0){let e=new DataTransfer;n.forEach(t=>e.items.add(t)),await ew.current.pickFiles(e.files)}}catch(e){console.warn("[AskContent] Drop file processing failed:",e)}})()}},[]),tm=(0,s.useCallback)(e=>{let t=e.clipboardData?.items;!t||Array.from(t).some(e=>"file"===e.kind&&e.type.startsWith("image/"))&&(e.preventDefault(),eA.current.handlePaste(e))},[]),tf=(0,s.useCallback)(e=>{if(eL.isLoadingRef.current)return;let r=ev.sessions.find(t=>t.id===e)??null;ey.current.loadSession(e),Z(!1),Y(""),q(t?[t]:[]),ew.current.clearAttachments(),eA.current.clearImages(),eE.current.resetMention(),eR.current.resetSlash(),el(null),ec(r?.defaultAcpAgent??null),setTimeout(()=>I.current?.focus(),0)},[t,ev.sessions]),tp=(0,s.useCallback)(()=>Z(e=>!e),[]),tx=(0,s.useMemo)(()=>({connecting:H.ask.connecting,thinking:H.ask.thinking,generating:H.ask.generating,reconnecting:e_>0?H.ask.reconnecting(e_,eF.current):void 0,copyMessage:H.ask.copyMessage}),[H,e_]),tg=(0,s.useCallback)(e=>{eg(e),eb(null)},[]);return(0,n.jsxs)("div",{className:"flex min-h-0 w-full flex-col h-full",children:[(0,n.jsx)(eX,{isPanel:F||P,showHistory:V,onToggleHistory:tp,onReset:ti,isLoading:eD,maximized:b,onMaximize:k,askMode:P?void 0:D,onModeSwitch:P?void 0:M,onClose:P?void 0:g,onDockToPanel:b?_:void 0,sessions:ev.sessions,activeSessionId:ev.activeSessionId,onLoadSession:tf,onDeleteSession:ev.deleteSession,onRenameSession:ev.renameSession,onTogglePinSession:ev.togglePinSession,messages:ev.messages}),V&&(0,n.jsx)(eK,{sessions:ev.sessions,activeSessionId:ev.activeSessionId,onLoad:tf,onDelete:ev.deleteSession,onRename:ev.renameSession,onTogglePin:ev.togglePinSession,onClearAll:ev.clearAllSessions,onClose:()=>Z(!1),onNewChat:ti}),!V&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"flex-1 min-h-0 flex flex-col",children:[!P&&(0,n.jsx)(eH,{messages:ev.messages,isLoading:eD,loadingPhase:eM,emptyPrompt:H.ask.emptyPrompt,emptyHint:H.ask.emptyHint,suggestions:H.ask.suggestions,onSuggestionClick:Y,labels:tx}),P&&(ev.messages.length>0||b)&&(0,n.jsx)(eH,{messages:ev.messages,isLoading:eD,loadingPhase:eM,emptyPrompt:H.ask.emptyPrompt,emptyHint:H.ask.emptyHint,suggestions:b&&0===ev.messages.length?H.ask.suggestions:[],onSuggestionClick:Y,labels:tx})]}),null!==eN.mentionQuery&&eN.mentionResults.length>0&&(0,n.jsx)("div",{className:"shrink-0 px-3 pb-1",children:(0,n.jsx)(eU,{results:eN.mentionResults,selectedIndex:eN.mentionIndex,query:eN.mentionQuery??void 0,onSelect:e1})}),null!==eS.slashQuery&&eS.slashResults.length>0&&(0,n.jsx)("div",{className:"shrink-0 px-3 pb-1",children:(0,n.jsx)(eW,{results:eS.slashResults,selectedIndex:eS.slashIndex,query:eS.slashQuery??void 0,onSelect:e2})}),(0,n.jsx)("div",{className:(0,ta.cn)("shrink-0",P?"px-2 pb-2 pt-0.5":"px-3 pb-2.5 pt-1"),children:(0,n.jsxs)("div",{className:(0,ta.cn)("rounded-xl bg-muted/40 transition-all focus-within:bg-muted/60",G&&"ring-2 ring-[var(--amber)] bg-[var(--amber-dim)]"),onDragOver:tu,onDragLeave:tc,onDrop:td,children:[(K.length>0||ej.localAttachments.length>0||ek.images.length>0||eo||eu||ej.uploadError||ek.imageError)&&(0,n.jsxs)("div",{className:(0,ta.cn)("px-3 pt-2.5 pb-1",F?"max-h-24 overflow-y-auto":"max-h-28 overflow-y-auto"),children:[(0,n.jsxs)("div",{className:"flex flex-wrap gap-1.5",children:[K.map(e=>(0,n.jsx)(e5,{path:e,variant:"kb",onRemove:()=>q(t=>t.filter(t=>t!==e))},e)),ej.localAttachments.map((e,t)=>(0,n.jsx)(e5,{path:e.name,variant:"upload",status:e.status,error:e.error,truncatedInfo:e.truncatedInfo,onRemove:()=>ej.removeAttachment(t)},`up-${e.name}-${t}`)),ek.images.map((e,t)=>(0,n.jsx)(e5,{path:e.fileName||`Image ${t+1}`,variant:"image",imageData:e.data,imageMime:e.mimeType,onRemove:()=>ek.removeImage(t)},`img-${t}`)),eo&&(0,n.jsx)(e5,{path:eo.name,variant:"skill",onRemove:()=>{el(null),I.current?.focus()}}),eu&&(0,n.jsx)(e5,{path:"object"==typeof eu&&"name"in eu?eu.name:"Remote Agent",variant:"agent",onRemove:()=>{eO(null),I.current?.focus()}})]}),eY&&(0,n.jsx)("div",{className:"mt-1 text-xs text-error",children:eY})]}),(0,n.jsxs)("form",{ref:eV,onSubmit:eP,className:(0,ta.cn)("flex items-end gap-1.5",P?"px-2 py-1.5":"px-3 py-2"),children:[(0,n.jsx)("div",{className:"relative shrink-0",children:(0,n.jsx)("button",{ref:er,type:"button",onClick:()=>et(e=>!e),className:"p-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted/60 transition-colors",title:H.hints.attachFile,children:(0,n.jsx)(o.A,{size:15})})}),B&&ee&&es&&(0,a.createPortal)((0,n.jsxs)("div",{ref:en,className:"fixed py-1 rounded-xl border border-border/60 bg-card shadow-lg z-50 min-w-[150px] animate-in fade-in-0 slide-in-from-bottom-2 duration-150",style:{top:`${es.top}px`,left:`${es.left}px`,transform:"translateY(-100%)"},onClick:e=>e.stopPropagation(),children:[(0,n.jsxs)("button",{type:"button",className:"flex w-full items-center gap-2.5 px-3 py-2 text-xs hover:bg-muted transition-colors text-left rounded-lg",onClick:()=>{ej.uploadInputRef.current?.click(),et(!1)},children:[(0,n.jsx)(l.A,{size:12,className:"shrink-0 text-muted-foreground"}),H.ask.attachFileLabel]}),(0,n.jsxs)("button",{type:"button",className:"flex w-full items-center gap-2.5 px-3 py-2 text-xs hover:bg-muted transition-colors text-left rounded-lg",onClick:()=>{O.current?.click(),et(!1)},children:[(0,n.jsx)(i.A,{size:12,className:"shrink-0 text-muted-foreground"}),H.ask.attachImageLabel]})]}),document.body),(0,n.jsx)("input",{ref:ej.uploadInputRef,type:"file",className:"hidden",multiple:!0,accept:".txt,.md,.markdown,.csv,.json,.yaml,.yml,.xml,.html,.htm,.pdf,text/plain,text/markdown,text/csv,application/json,application/pdf",onChange:async e=>{let t=e.currentTarget;await ej.pickFiles(t.files),t.value=""}}),(0,n.jsx)("input",{ref:O,type:"file",className:"hidden",multiple:!0,accept:"image/png,image/jpeg,image/gif,image/webp",onChange:async e=>{let t=e.currentTarget;await ek.handleFileSelect(t.files),t.value=""}}),(0,n.jsx)("textarea",{ref:e=>{I.current=e},value:W,onChange:e=>e0(e.target.value,e.target.selectionStart??void 0),onKeyDown:te,onPaste:tm,placeholder:H.ask.placeholder,rows:1,className:(0,ta.cn)("min-w-0 flex-1 resize-none overflow-y-hidden bg-transparent py-2 leading-relaxed text-foreground placeholder:text-muted-foreground/50 outline-none focus-visible:ring-0",P?"text-xs":"text-sm")}),eD?(0,n.jsx)("button",{type:"button",onClick:eI,className:"p-2 rounded-xl transition-colors shrink-0 text-foreground bg-muted hover:bg-muted/80",title:"reconnecting"===eM?H.ask.cancelReconnect:H.ask.stopTitle,children:"reconnecting"===eM?(0,n.jsx)(u.A,{size:15}):(0,n.jsx)(c.A,{size:15})}):(0,n.jsx)("button",{type:"submit",title:eB?H.ask.uploadsProcessing??"Wait for uploaded files to finish processing before sending.":H.ask.send,disabled:eB||!W.trim()&&0===ek.images.length,className:"p-2 rounded-xl disabled:opacity-20 disabled:scale-95 disabled:cursor-not-allowed transition-all duration-150 shrink-0 bg-[var(--amber)] text-[var(--amber-foreground)] shadow-sm shadow-[var(--amber)]/15 hover:shadow-md hover:shadow-[var(--amber)]/20 active:scale-95",children:(0,n.jsx)(d.A,{size:14})})]}),(0,n.jsxs)("div",{className:(0,ta.cn)("flex items-center justify-between border-t border-border/10",F?"px-2 pb-1.5 pt-1 gap-1":"px-3 pb-2 pt-1.5"),children:[(0,n.jsxs)("div",{className:(0,ta.cn)("flex items-center flex-wrap",F?"gap-1":"gap-2"),children:[(0,n.jsx)(v,{mode:ef,onChange:ep,disabled:eD}),B&&(0,n.jsx)(e3,{selectedAgent:eu,onSelect:eO,installedAgents:eC.installedAgents,loading:eC.loading}),B&&(0,n.jsx)(tt,{providerValue:ex,onProviderChange:tg,modelValue:eh,onModelChange:eb,disabled:eD})]}),!F&&!P&&(0,n.jsxs)("span",{className:"hidden md:inline text-2xs text-muted-foreground/40 select-none shrink-0",children:[(0,n.jsx)("kbd",{className:"font-mono",children:"Enter"})," ",H.ask.send," \xb7 ",(0,n.jsx)("kbd",{className:"font-mono",children:"Shift+Enter"})," ",H.ask.newlineHint]})]})]})})]})]})}},70620:(e,t,r)=>{r.d(t,{A:()=>d});var n=r(95155),s=r(12115),a=r(47650),o=r(21362),l=r(38798),i=r(94514),u=r(66088),c=r(91337);function d({dirPaths:e,value:t,onChange:r,rootLabel:d="Root"}){let[m,f]=(0,s.useState)(!1),[p,x]=(0,s.useState)(t),[g,h]=(0,s.useState)(null),b=(0,s.useRef)(null),v=(0,s.useRef)(null);(0,s.useEffect)(()=>{x(t)},[t]);let y=(0,s.useCallback)(()=>{if(!b.current)return;let e=b.current.getBoundingClientRect(),t=window.innerHeight-e.bottom,r=e.top,n=t<208&&r>t;h({top:n?e.top:e.bottom,left:e.left,width:e.width,flipUp:n})},[]),j=(0,s.useRef)(0),w=(0,s.useCallback)(()=>{j.current||(j.current=requestAnimationFrame(()=>{j.current=0,y()}))},[y]);(0,s.useEffect)(()=>m?(y(),window.addEventListener("scroll",w,!0),window.addEventListener("resize",w),()=>{window.removeEventListener("scroll",w,!0),window.removeEventListener("resize",w),j.current&&(cancelAnimationFrame(j.current),j.current=0)}):void h(null),[m,y,w]);let k=(0,s.useCallback)(()=>f(!1),[]);(0,s.useEffect)(()=>{if(!m)return;let e=e=>{"Escape"===e.key&&(e.preventDefault(),k())},t=e=>{let t=e.target;b.current?.contains(t)||v.current?.contains(t)||k()};return document.addEventListener("keydown",e),document.addEventListener("mousedown",t),()=>{document.removeEventListener("keydown",e),document.removeEventListener("mousedown",t)}},[m,k]);let N=(0,s.useMemo)(()=>{let t=p?p+"/":"";return e.filter(e=>{if(!e.startsWith(t))return!1;let r=e.slice(t.length);return r.length>0&&!r.includes("/")}).sort()},[e,p]),S=(0,s.useMemo)(()=>p?p.split("/"):[],[p]),C=e=>{if(e<0)x(""),r("");else{let t=S.slice(0,e+1).join("/");x(t),r(t)}},A=t?t.split("/").map(e=>(0,c.vr)(e)).join(" / "):"/ "+d,E=m&&g&&(0,a.createPortal)((0,n.jsxs)("div",{ref:v,className:"fixed z-50 rounded-lg border border-[var(--amber)] bg-card shadow-lg overflow-hidden flex flex-col",style:{left:g.left,width:g.width,maxHeight:200,...g.flipUp?{bottom:window.innerHeight-g.top+4}:{top:g.top+4}},children:[(0,n.jsxs)("div",{className:"flex items-center gap-0.5 px-3 py-1.5 bg-muted/30 border-b border-border overflow-x-auto text-xs shrink-0",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>C(-1),className:`shrink-0 px-1.5 py-0.5 rounded transition-colors ${""===p?"text-[var(--amber)] font-medium":"text-muted-foreground hover:text-foreground"}`,children:["/ ",d]}),S.map((e,t)=>(0,n.jsxs)("span",{className:"flex items-center gap-0.5 shrink-0",children:[(0,n.jsx)(o.A,{size:10,className:"text-muted-foreground/50"}),(0,n.jsx)("button",{type:"button",onClick:()=>C(t),className:`px-1.5 py-0.5 rounded transition-colors truncate max-w-[100px] ${t===S.length-1?"text-[var(--amber)] font-medium":"text-muted-foreground hover:text-foreground"}`,children:e})]},t))]}),N.length>0?(0,n.jsx)("div",{className:"flex-1 min-h-0 overflow-y-auto",children:N.map(t=>{let s=t.split("/").pop()||t,a=e.some(e=>e.startsWith(t+"/"));return(0,n.jsxs)("button",{type:"button",onClick:()=>{x(t),r(t)},className:"w-full flex items-center gap-2 px-3 py-1.5 text-xs text-foreground hover:bg-muted/60 transition-colors",children:[(0,n.jsx)(l.A,{size:12,className:"shrink-0 text-[var(--amber)]"}),(0,n.jsx)("span",{className:"flex-1 text-left truncate",children:s}),a&&(0,n.jsx)(o.A,{size:11,className:"shrink-0 text-muted-foreground/40"})]},t)})}):(0,n.jsx)("div",{className:"px-3 py-2 text-xs text-muted-foreground/50 text-center",children:"—"}),(0,n.jsx)("button",{type:"button",onClick:k,className:"w-full py-1.5 flex items-center justify-center gap-1 text-xs font-medium text-[var(--amber)] border-t border-border hover:bg-muted/30 transition-colors shrink-0",children:(0,n.jsx)(i.A,{size:12})})]}),document.body);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{ref:b,type:"button",onClick:()=>f(e=>!e),"aria-haspopup":"true","aria-expanded":m,className:`w-full flex items-center gap-2 px-3 py-2 text-sm rounded-lg border bg-background text-foreground transition-colors text-left focus-visible:ring-1 focus-visible:ring-ring outline-none ${m?"border-[var(--amber)]":"border-border hover:border-[var(--amber)]/40"}`,children:[(0,n.jsx)(l.A,{size:14,className:"shrink-0 text-[var(--amber)]"}),(0,n.jsx)("span",{className:"flex-1 truncate",children:A}),(0,n.jsx)(u.A,{size:14,className:`shrink-0 text-muted-foreground transition-transform duration-150 ${m?"rotate-180":""}`})]}),E]})}},76449:(e,t,r)=>{r.d(t,{g:()=>n});let n=[{anchor:"files-panel",position:"right"},{anchor:"ask-button",position:"bottom"},{anchor:"agents-panel",position:"right"}]}}]);