neural-loom 0.2.60 → 0.2.62

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 (186) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +3 -0
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/cache/.previewinfo +1 -1
  5. package/.next/cache/.rscinfo +1 -1
  6. package/.next/cache/.tsbuildinfo +1 -1
  7. package/.next/diagnostics/route-bundle-stats.json +2 -2
  8. package/.next/fallback-build-manifest.json +3 -3
  9. package/.next/prerender-manifest.json +3 -3
  10. package/.next/routes-manifest.json +18 -0
  11. package/.next/server/app/_global-error.html +1 -1
  12. package/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.html +1 -1
  19. package/.next/server/app/_not-found.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  26. package/.next/server/app/api/configs/route/app-paths-manifest.json +3 -0
  27. package/.next/server/app/api/configs/route/build-manifest.json +9 -0
  28. package/.next/server/app/api/configs/route/server-reference-manifest.json +4 -0
  29. package/.next/server/app/api/configs/route.js +6 -0
  30. package/.next/server/app/api/configs/route.js.map +5 -0
  31. package/.next/server/app/api/configs/route.js.nft.json +1 -0
  32. package/.next/server/app/api/configs/route_client-reference-manifest.js +3 -0
  33. package/.next/server/app/api/context/aider/route.js.nft.json +1 -1
  34. package/.next/server/app/api/context/claude/route.js.nft.json +1 -1
  35. package/.next/server/app/api/context/route.js.nft.json +1 -1
  36. package/.next/server/app/api/context/ssh/route.js.nft.json +1 -1
  37. package/.next/server/app/api/recents/route.js.nft.json +1 -1
  38. package/.next/server/app/api/sessions/inject/route.js +2 -2
  39. package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
  40. package/.next/server/app/api/sessions/input/route.js +2 -2
  41. package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
  42. package/.next/server/app/api/sessions/launch/route.js +2 -2
  43. package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
  44. package/.next/server/app/api/sessions/route.js +2 -2
  45. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  46. package/.next/server/app/api/sessions/scope/route.js +2 -2
  47. package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
  48. package/.next/server/app/api/sessions/start/route.js +2 -2
  49. package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
  50. package/.next/server/app/api/sessions/stats/route.js +2 -2
  51. package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
  52. package/.next/server/app/api/sessions/stop/route.js +2 -2
  53. package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
  54. package/.next/server/app/api/sessions/upload-image/route/app-paths-manifest.json +3 -0
  55. package/.next/server/app/api/sessions/upload-image/route/build-manifest.json +9 -0
  56. package/.next/server/app/api/sessions/upload-image/route/server-reference-manifest.json +4 -0
  57. package/.next/server/app/api/sessions/upload-image/route.js +7 -0
  58. package/.next/server/app/api/sessions/upload-image/route.js.map +5 -0
  59. package/.next/server/app/api/sessions/upload-image/route.js.nft.json +1 -0
  60. package/.next/server/app/api/sessions/upload-image/route_client-reference-manifest.js +3 -0
  61. package/.next/server/app/api/sql/connections/route.js.nft.json +1 -1
  62. package/.next/server/app/api/sql/mcp/route.js.nft.json +1 -1
  63. package/.next/server/app/api/sql/query/route.js.nft.json +1 -1
  64. package/.next/server/app/api/sql/schema/route.js.nft.json +1 -1
  65. package/.next/server/app/api/telemetry/route/app-paths-manifest.json +3 -0
  66. package/.next/server/app/api/telemetry/route/build-manifest.json +9 -0
  67. package/.next/server/app/api/telemetry/route/server-reference-manifest.json +4 -0
  68. package/.next/server/app/api/telemetry/route.js +6 -0
  69. package/.next/server/app/api/telemetry/route.js.map +5 -0
  70. package/.next/server/app/api/telemetry/route.js.nft.json +1 -0
  71. package/.next/server/app/api/telemetry/route_client-reference-manifest.js +3 -0
  72. package/.next/server/app/index.html +1 -1
  73. package/.next/server/app/index.rsc +3 -3
  74. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  75. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  76. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  77. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  78. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  79. package/.next/server/app/page/react-loadable-manifest.json +5 -5
  80. package/.next/server/app/page_client-reference-manifest.js +1 -1
  81. package/.next/server/app-paths-manifest.json +3 -0
  82. package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js +1 -1
  83. package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js.map +1 -1
  84. package/.next/server/chunks/[root-of-the-server]__00-sqou._.js +15 -0
  85. package/.next/server/chunks/{[root-of-the-server]__0thsozo._.js.map → [root-of-the-server]__00-sqou._.js.map} +1 -1
  86. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js +1 -1
  87. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js.map +1 -1
  88. package/.next/server/chunks/[root-of-the-server]__01621nz._.js +3 -0
  89. package/.next/server/chunks/[root-of-the-server]__01621nz._.js.map +1 -0
  90. package/.next/server/chunks/[root-of-the-server]__06men8g._.js +1 -1
  91. package/.next/server/chunks/[root-of-the-server]__06men8g._.js.map +1 -1
  92. package/.next/server/chunks/[root-of-the-server]__08r0s-s._.js +3 -0
  93. package/.next/server/chunks/[root-of-the-server]__08r0s-s._.js.map +1 -0
  94. package/.next/server/chunks/[root-of-the-server]__097vtn1._.js +15 -0
  95. package/.next/server/chunks/{[root-of-the-server]__0em6a~~._.js.map → [root-of-the-server]__097vtn1._.js.map} +1 -1
  96. package/.next/server/chunks/[root-of-the-server]__0_v2.a8._.js +15 -0
  97. package/.next/server/chunks/[root-of-the-server]__0_v2.a8._.js.map +1 -0
  98. package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js +1 -1
  99. package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js.map +1 -1
  100. package/.next/server/chunks/[root-of-the-server]__0e03ite._.js +15 -0
  101. package/.next/server/chunks/{[root-of-the-server]__10wwca8._.js.map → [root-of-the-server]__0e03ite._.js.map} +1 -1
  102. package/.next/server/chunks/[root-of-the-server]__0fxtx7z._.js +15 -0
  103. package/.next/server/chunks/[root-of-the-server]__0fxtx7z._.js.map +1 -0
  104. package/.next/server/chunks/[root-of-the-server]__0h.~hv6._.js +15 -0
  105. package/.next/server/chunks/{[root-of-the-server]__0s0is_9._.js.map → [root-of-the-server]__0h.~hv6._.js.map} +1 -1
  106. package/.next/server/chunks/[root-of-the-server]__0li1h1u._.js +33 -0
  107. package/.next/server/chunks/[root-of-the-server]__0li1h1u._.js.map +1 -0
  108. package/.next/server/chunks/[root-of-the-server]__0s1axek._.js +15 -0
  109. package/.next/server/chunks/{[root-of-the-server]__0i~01cv._.js.map → [root-of-the-server]__0s1axek._.js.map} +1 -1
  110. package/.next/server/chunks/[root-of-the-server]__0tq0maq._.js +15 -0
  111. package/.next/server/chunks/{[root-of-the-server]__0_o7_jj._.js.map → [root-of-the-server]__0tq0maq._.js.map} +1 -1
  112. package/.next/server/chunks/[root-of-the-server]__0viil6b._.js +15 -0
  113. package/.next/server/chunks/{[root-of-the-server]__07zx04e._.js.map → [root-of-the-server]__0viil6b._.js.map} +1 -1
  114. package/.next/server/chunks/_next-internal_server_app_api_configs_route_actions_087k_4j.js +3 -0
  115. package/.next/server/chunks/_next-internal_server_app_api_configs_route_actions_087k_4j.js.map +1 -0
  116. package/.next/server/chunks/_next-internal_server_app_api_sessions_upload-image_route_actions_09tfn3a.js +3 -0
  117. package/.next/server/chunks/_next-internal_server_app_api_sessions_upload-image_route_actions_09tfn3a.js.map +1 -0
  118. package/.next/server/chunks/_next-internal_server_app_api_telemetry_route_actions_0.yo5qr.js +3 -0
  119. package/.next/server/chunks/_next-internal_server_app_api_telemetry_route_actions_0.yo5qr.js.map +1 -0
  120. package/.next/server/chunks/ssr/_0t7oqy6._.js +3 -3
  121. package/.next/server/chunks/ssr/_0t7oqy6._.js.map +1 -1
  122. package/.next/server/middleware-build-manifest.js +3 -3
  123. package/.next/server/pages/404.html +1 -1
  124. package/.next/server/pages/500.html +1 -1
  125. package/.next/server/server-reference-manifest.js +1 -1
  126. package/.next/server/server-reference-manifest.json +1 -1
  127. package/.next/static/chunks/0qu1p~ny_bvko.css +1 -0
  128. package/.next/static/chunks/0sr3d9iqny2rf.js +4 -0
  129. package/.next/static/chunks/0xhaghhxllgzs.js +1 -0
  130. package/.next/static/chunks/{0y~7jjqbr14.5.js → 15_baizhaiq8c.js} +10 -7
  131. package/.next/static/chunks/15sigqif_v.mu.js +1 -0
  132. package/.next/static/chunks/16rky3981raz5.js +11 -0
  133. package/.next/trace +1 -1
  134. package/.next/trace-build +1 -1
  135. package/.next/types/routes.d.ts +4 -1
  136. package/.next/types/validator.ts +27 -0
  137. package/bin/cli.js +4 -4
  138. package/bin/fix-pwa-ubuntu.sh +50 -0
  139. package/package.json +1 -1
  140. package/src/app/api/configs/route.ts +40 -0
  141. package/src/app/api/sessions/launch/route.ts +3 -3
  142. package/src/app/api/sessions/route.ts +2 -2
  143. package/src/app/api/sessions/start/route.ts +2 -2
  144. package/src/app/api/sessions/upload-image/route.ts +57 -0
  145. package/src/app/api/sql/connections/route.ts +9 -6
  146. package/src/app/api/sql/mcp/route.ts +3 -2
  147. package/src/app/api/sql/query/route.ts +3 -2
  148. package/src/app/api/sql/schema/route.ts +3 -2
  149. package/src/app/api/telemetry/route.ts +18 -0
  150. package/src/app/components/AiderWizard.tsx +46 -2
  151. package/src/app/components/ClaudeWizard.tsx +30 -0
  152. package/src/app/components/DbExplorer.tsx +37 -4
  153. package/src/app/components/IdeLayout.tsx +577 -72
  154. package/src/app/components/TerminalConsole.tsx +54 -0
  155. package/src/app/page.module.css +12 -5
  156. package/src/app/page.tsx +534 -401
  157. package/src/lib/agents/AgentRunner.ts +98 -12
  158. package/src/lib/agents/AiderRunner.ts +4 -18
  159. package/src/lib/agents/ClaudeRunner.ts +16 -26
  160. package/src/lib/agents/DockerRunner.ts +16 -26
  161. package/src/lib/agents/MockRunner.ts +4 -16
  162. package/src/lib/agents/SSHRunner.ts +16 -26
  163. package/src/lib/agents/SessionConfig.ts +79 -0
  164. package/src/lib/agents/SessionManager.ts +16 -16
  165. package/src/lib/agents/SessionPersister.ts +13 -9
  166. package/src/lib/agents/ShellRunner.ts +14 -21
  167. package/src/lib/agents/WebSocketServer.ts +2 -2
  168. package/.next/server/chunks/[root-of-the-server]__01.zh3b._.js +0 -15
  169. package/.next/server/chunks/[root-of-the-server]__01.zh3b._.js.map +0 -1
  170. package/.next/server/chunks/[root-of-the-server]__07zx04e._.js +0 -15
  171. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js +0 -15
  172. package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js +0 -33
  173. package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js.map +0 -1
  174. package/.next/server/chunks/[root-of-the-server]__0em6a~~._.js +0 -15
  175. package/.next/server/chunks/[root-of-the-server]__0i~01cv._.js +0 -15
  176. package/.next/server/chunks/[root-of-the-server]__0s0is_9._.js +0 -15
  177. package/.next/server/chunks/[root-of-the-server]__0thsozo._.js +0 -15
  178. package/.next/server/chunks/[root-of-the-server]__10wwca8._.js +0 -15
  179. package/.next/static/chunks/076_b43_kienv.js +0 -1
  180. package/.next/static/chunks/07r_au7dcyu8l.js +0 -11
  181. package/.next/static/chunks/0hoyc~vbuqe0t.css +0 -1
  182. package/.next/static/chunks/0k2co3uj4w81_.js +0 -1
  183. package/.next/static/chunks/0sqeixl35qoac.js +0 -1
  184. /package/.next/static/{PdRX_M_W5hqhNmHxYt-oH → K1_el6-FnhIqHfvSMHXCm}/_buildManifest.js +0 -0
  185. /package/.next/static/{PdRX_M_W5hqhNmHxYt-oH → K1_el6-FnhIqHfvSMHXCm}/_clientMiddlewareManifest.js +0 -0
  186. /package/.next/static/{PdRX_M_W5hqhNmHxYt-oH → K1_el6-FnhIqHfvSMHXCm}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,54370,e=>{"use strict";var r=e.i(43476),o=e.i(71645);let t={position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(5, 7, 10, 0.85)",backdropFilter:"blur(12px)",zIndex:1100,display:"flex",alignItems:"center",justifyContent:"center"},n={width:"90%",maxWidth:"550px",height:"480px",backgroundColor:"var(--card)",border:"1px solid var(--border-focus)",borderRadius:"12px",boxShadow:"0 20px 25px -5px rgba(0,0,0,0.7), 0 10px 10px -5px rgba(0,0,0,0.7)",display:"flex",flexDirection:"column",overflow:"hidden"},a={display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.85rem 1.25rem",borderBottom:"1px solid var(--border)",background:"hsla(var(--border-hsl), 0.2)"},i={background:"none",border:"none",color:"var(--muted)",fontSize:"0.9rem",cursor:"pointer",padding:"0.25rem"},s={display:"flex",padding:"0.75rem 1.25rem",gap:"0.5rem",backgroundColor:"rgba(10, 15, 25, 0.5)",borderBottom:"1px solid var(--border)"},l={flex:1,padding:"0.45rem 0.75rem",backgroundColor:"#05070a",border:"1px solid var(--border)",borderRadius:"6px",color:"var(--foreground)",fontFamily:"var(--font-mono), monospace",fontSize:"0.8rem",outline:"none"},d={padding:"0.45rem 0.85rem",backgroundColor:"var(--border)",border:"1px solid var(--border-focus)",borderRadius:"6px",color:"var(--foreground)",fontSize:"0.75rem",fontWeight:600,cursor:"pointer"},c={padding:"0.15rem 0.45rem",backgroundColor:"rgba(255, 255, 255, 0.15)",border:"none",borderRadius:"4px",color:"var(--foreground)",fontSize:"0.7rem",cursor:"pointer",fontWeight:600},p={flex:1,padding:"0.5rem 1.25rem",overflowY:"auto",backgroundColor:"#070a0f"},u={display:"flex",flexDirection:"column",gap:"0.25rem"},m={display:"flex",alignItems:"center",gap:"0.6rem",padding:"0.45rem 0.65rem",borderRadius:"6px",cursor:"pointer",fontSize:"0.825rem",border:"1px solid transparent",userSelect:"none",transition:"all 0.15s ease"},g={textAlign:"center",padding:"2rem",fontSize:"0.85rem",color:"var(--muted)"},x={display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.85rem 1.25rem",borderTop:"1px solid var(--border)",background:"hsla(var(--border-hsl), 0.2)"},f={fontSize:"0.75rem",color:"var(--muted)",maxWidth:"240px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},h={padding:"0.45rem 0.9rem",borderRadius:"6px",border:"none",background:"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)",color:"#fff",fontSize:"0.75rem",fontWeight:600,cursor:"pointer"},b={padding:"0.45rem 0.9rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"transparent",color:"var(--foreground)",fontSize:"0.75rem",fontWeight:600,cursor:"pointer"};e.s(["default",0,function({title:e,initialPath:y,onClose:v,onSelect:j}){let[k,C]=(0,o.useState)(y||""),[S,w]=(0,o.useState)(null),[D,R]=(0,o.useState)([]),[z,F]=(0,o.useState)(null),[T,W]=(0,o.useState)(""),[I,P]=(0,o.useState)(!1),[B,A]=(0,o.useState)(""),L=async e=>{P(!0),A("");try{let r=`/api/files?action=browse_dirs&path=${encodeURIComponent(e)}`,o=await fetch(r),t=await o.json();o.ok&&t.success?(C(t.currentPath),W(t.currentPath),w(t.parentPath),R(t.directories),F(null)):A(t.error||"Failed to load directory content.")}catch(e){console.error("Error browsing directories:",e),A("Failed to fetch directory contents.")}finally{P(!1)}};(0,o.useEffect)(()=>{L(y)},[y]);let O=e=>{L(e)},N=()=>{T.trim()&&L(T.trim())};return(0,r.jsx)("div",{style:t,children:(0,r.jsxs)("div",{style:n,children:[(0,r.jsxs)("div",{style:a,children:[(0,r.jsxs)("h3",{style:{fontSize:"1rem",fontWeight:700,margin:0,color:"var(--foreground)"},children:["📁 ",e]}),(0,r.jsx)("button",{onClick:v,style:i,"aria-label":"Close browser",children:"✖"})]}),(0,r.jsxs)("div",{style:s,children:[(0,r.jsx)("input",{type:"text",value:T,onChange:e=>W(e.target.value),onKeyDown:e=>{"Enter"===e.key&&N()},style:l,placeholder:"Absolute folder path..."}),(0,r.jsx)("button",{onClick:N,style:d,disabled:I,children:"Go"})]}),(0,r.jsx)("div",{style:p,children:I?(0,r.jsx)("div",{style:g,children:"Loading directories..."}):B?(0,r.jsxs)("div",{style:{...g,color:"var(--danger)"},children:[B,(0,r.jsx)("button",{onClick:()=>L(k||"."),style:{...d,display:"block",margin:"0.75rem auto 0"},children:"Retry"})]}):(0,r.jsxs)("div",{style:u,children:[S&&(0,r.jsxs)("div",{onClick:()=>O(S),onDoubleClick:()=>O(S),style:m,title:"Go up to parent directory",children:[(0,r.jsx)("span",{style:{fontSize:"1.1rem"},children:"⬆️"}),(0,r.jsx)("span",{style:{fontWeight:600},children:".. (Up)"})]}),0===D.length?(0,r.jsx)("div",{style:{...g,color:"var(--muted)"},children:"No subdirectories found"}):D.map(e=>{let o=z===e.path;return(0,r.jsxs)("div",{onClick:()=>F(e.path),onDoubleClick:()=>O(e.path),style:{...m,backgroundColor:o?"rgba(109, 40, 217, 0.25)":"transparent",borderColor:o?"var(--border-focus)":"transparent"},title:"Single click to highlight, double click to enter",children:[(0,r.jsx)("span",{style:{fontSize:"1.1rem"},children:"📁"}),(0,r.jsx)("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),o&&(0,r.jsx)("button",{type:"button",onClick:r=>{r.stopPropagation(),O(e.path)},style:c,children:"Enter ➜"})]},e.path)})]})}),(0,r.jsxs)("div",{style:x,children:[(0,r.jsxs)("span",{style:f,children:["Selection: ",(0,r.jsx)("span",{style:{color:"var(--foreground)",fontFamily:"var(--font-mono), monospace"},children:z||k||"(None)"})]}),(0,r.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[(0,r.jsx)("button",{onClick:v,style:b,children:"Cancel"}),(0,r.jsx)("button",{onClick:()=>{j(z||k),v()},style:h,disabled:I,children:"Select Folder"})]})]})]})})}])},44837,e=>{"use strict";var r=e.i(43476),o=e.i(71645),t=e.i(54370);let n={position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(5, 7, 10, 0.8)",backdropFilter:"blur(8px)",zIndex:1e3,display:"flex",alignItems:"center",justifyContent:"center",animation:"fadeIn 0.2s ease-out"},a={width:"90%",maxWidth:"500px",backgroundColor:"var(--card)",border:"1px solid var(--border-focus)",borderRadius:"12px",boxShadow:"0 10px 25px -5px rgba(0, 0, 0, 0.5), 0 8px 10px -6px rgba(0, 0, 0, 0.5)",overflow:"hidden",display:"flex",flexDirection:"column"},i={display:"flex",alignItems:"center",justifyContent:"space-between",padding:"1rem 1.25rem",borderBottom:"1px solid var(--border)",background:"hsla(var(--border-hsl), 0.2)"},s={background:"none",border:"none",color:"var(--muted)",fontSize:"0.9rem",cursor:"pointer",padding:"0.25rem"},l={padding:"1.25rem",display:"flex",flexDirection:"column"},d={display:"flex",flexDirection:"column",marginBottom:"1rem"},c={fontSize:"0.75rem",fontWeight:600,color:"var(--foreground)",marginBottom:"0.375rem",textTransform:"uppercase",letterSpacing:"0.05em"},p={width:"100%",padding:"0.5rem 0.75rem",backgroundColor:"#080c14",border:"1px solid var(--border)",borderRadius:"6px",color:"var(--foreground)",fontFamily:"var(--font-mono), monospace",fontSize:"0.825rem",outline:"none",transition:"border-color 0.15s ease"},u={marginTop:"0.75rem",padding:"0.75rem",borderRadius:"6px",border:"1px solid var(--danger)",backgroundColor:"rgba(239, 68, 68, 0.05)",color:"var(--danger)",fontSize:"0.8rem",lineHeight:1.4},m={display:"flex",justifyContent:"flex-end",gap:"0.75rem",padding:"1rem 1.25rem",borderTop:"1px solid var(--border)",background:"hsla(var(--border-hsl), 0.2)"},g={padding:"0.5rem 1rem",borderRadius:"6px",border:"none",background:"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)",color:"#fff",fontSize:"0.8rem",fontWeight:600,cursor:"pointer"},x={padding:"0.5rem 1rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"transparent",color:"var(--foreground)",fontSize:"0.8rem",fontWeight:600,cursor:"pointer"},f={padding:"0.35rem 0.75rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"rgba(255, 255, 255, 0.05)",color:"var(--foreground)",fontSize:"0.75rem",fontWeight:600,cursor:"pointer",transition:"all 0.15s ease"};e.s(["default",0,function({onClose:e,onConfirmLaunch:h,isDocker:b}){let[y,v]=(0,o.useState)({name:b?"Claude Docker":"Claude Local",workspaceRoot:"",scopedDirs:[],extraFlags:""}),[j,k]=(0,o.useState)(""),[C,S]=(0,o.useState)(!1),[w,D]=(0,o.useState)(!0),[R,z]=(0,o.useState)(!1),[F,T]=(0,o.useState)(""),[W,I]=(0,o.useState)(!1),[P,B]=(0,o.useState)(!1),[A,L]=(0,o.useState)({workspaces:[],scopes:[]});(0,o.useEffect)(()=>{(async()=>{try{let e=await fetch("/api/context/claude");if(e.ok){let r=await e.json();r.success&&r.config&&v({name:r.config.name||(b?"Claude Docker":"Claude Local"),workspaceRoot:r.config.workspaceRoot||r.config.defaultWorkspaceRoot||"",scopedDirs:r.config.scopedDirs||[],extraFlags:r.config.extraFlags||""})}let r=await fetch("/api/recents");if(r.ok){let e=await r.json();e.success&&e.recents&&L(e.recents)}}catch(e){console.error("Failed to load Claude configuration / recents:",e)}finally{D(!1)}})()},[b]);let O=async()=>{z(!0),T("");try{let e=await fetch("/api/context/claude",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(y)});if(e.ok)C&&await fetch("/api/configs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"save",config:{name:y.name,type:b?"claude-docker":"claude",workspaceRoot:y.workspaceRoot,scopedDirs:y.scopedDirs,extraFlags:y.extraFlags}})}),z(!1),h(y.name,y.workspaceRoot,y.scopedDirs);else{let r=await e.json();T(r.error||"Failed to save settings."),z(!1)}}catch(e){console.error(e),T("Network error: failed to connect to NeuralLoom dashboard API."),z(!1)}};return w?(0,r.jsx)("div",{style:n,children:(0,r.jsx)("div",{style:a,children:(0,r.jsx)("div",{style:{textAlign:"center",padding:"2rem"},children:(0,r.jsx)("span",{style:{color:"var(--muted)"},children:"Loading Claude Configuration..."})})})}):(0,r.jsx)("div",{style:n,children:(0,r.jsxs)("div",{style:a,children:[(0,r.jsxs)("div",{style:i,children:[(0,r.jsxs)("h3",{style:{fontSize:"1.1rem",fontWeight:700,margin:0,display:"flex",alignItems:"center",gap:"0.5rem"},children:[b?"🐳":"🤖"," Claude PTY Launch Wizard ",b?"(Docker)":"(Local)"]}),(0,r.jsx)("button",{onClick:e,style:s,"aria-label":"Close wizard",children:"✖"})]}),(0,r.jsxs)("div",{style:l,children:[(0,r.jsx)("p",{style:{fontSize:"0.825rem",color:"var(--muted)",marginBottom:"1.25rem",lineHeight:1.4},children:"Configure the local workspace path and access parameters for the Claude Code session. Settings are saved in `.ai/neural-loom/claude.json`."}),(0,r.jsxs)("div",{style:d,children:[(0,r.jsx)("label",{style:c,children:"Session Display Name"}),(0,r.jsx)("input",{type:"text",value:y.name,onChange:e=>v({...y,name:e.target.value}),placeholder:b?"Claude Docker":"Claude Local",style:p})]}),(0,r.jsxs)("div",{style:d,children:[(0,r.jsx)("label",{style:c,children:"Workspace Directory (Root)"}),(0,r.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[(0,r.jsx)("input",{type:"text",value:y.workspaceRoot,onChange:e=>v({...y,workspaceRoot:e.target.value}),placeholder:"e.g. C:\\Users\\Dave\\OneDrive\\Projects\\JS\\wingman",style:{...p,flex:1}}),(0,r.jsx)("button",{type:"button",onClick:()=>I(!0),style:f,children:"Browse..."})]}),A.workspaces.length>0&&(0,r.jsxs)("div",{style:{marginTop:"0.35rem",display:"flex",gap:"0.35rem",flexWrap:"wrap",alignItems:"center"},children:[(0,r.jsx)("span",{style:{fontSize:"0.65rem",color:"var(--muted)"},children:"Recent:"}),A.workspaces.map(e=>(0,r.jsx)("button",{type:"button",onClick:()=>v({...y,workspaceRoot:e}),style:{background:"rgba(255,255,255,0.03)",border:"1px solid var(--border)",borderRadius:"3px",color:"var(--muted)",fontSize:"0.65rem",padding:"1px 6px",cursor:"pointer",fontFamily:"var(--font-mono)"},title:e,children:e.split(/[/\\]/).pop()||e},e))]}),(0,r.jsx)("span",{style:{fontSize:"0.7rem",color:"var(--muted)",marginTop:"0.25rem"},children:"The active folder Claude Code will run in. Leave blank to run in the current orchestrator directory."})]}),(0,r.jsxs)("div",{style:d,children:[(0,r.jsx)("label",{style:c,children:"Extra Command Flags"}),(0,r.jsx)("input",{type:"text",value:y.extraFlags||"",onChange:e=>v({...y,extraFlags:e.target.value}),placeholder:"e.g. --resume ace806f9-cb5f-4a19-b0e9-d4331b7863a7",style:p}),(0,r.jsxs)("span",{style:{fontSize:"0.7rem",color:"var(--muted)",marginTop:"0.25rem"},children:["Custom parameters passed to the Claude CLI (e.g. ",(0,r.jsx)("code",{children:"--resume <session-id>"}),")."]})]}),(0,r.jsxs)("div",{style:d,children:[(0,r.jsx)("label",{style:c,children:"Scoped Directories (Additional Access)"}),y.scopedDirs.length>0&&(0,r.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem",marginBottom:"0.5rem"},children:y.scopedDirs.map((e,o)=>(0,r.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",backgroundColor:"#080c14",padding:"0.35rem 0.5rem",borderRadius:"4px",border:"1px solid var(--border)"},children:[(0,r.jsx)("span",{style:{fontSize:"0.8rem",fontFamily:"var(--font-mono), monospace",wordBreak:"break-all"},children:e}),(0,r.jsx)("button",{type:"button",onClick:()=>{let e=y.scopedDirs.filter((e,r)=>r!==o);v({...y,scopedDirs:e})},style:{background:"none",border:"none",color:"var(--danger)",cursor:"pointer",fontSize:"0.8rem",padding:"0 0.25rem"},children:"Remove"})]},o))}),(0,r.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[(0,r.jsx)("input",{type:"text",value:j,onChange:e=>k(e.target.value),placeholder:"e.g. C:\\Users\\Dave\\OneDrive\\Projects\\JS\\other-repo",style:{...p,flex:1}}),(0,r.jsx)("button",{type:"button",onClick:()=>B(!0),style:f,children:"Browse..."}),(0,r.jsx)("button",{type:"button",onClick:()=>{j.trim()&&!y.scopedDirs.includes(j.trim())&&(v({...y,scopedDirs:[...y.scopedDirs,j.trim()]}),k(""))},style:{padding:"0.35rem 0.75rem",borderRadius:"6px",border:"1px solid var(--border-focus)",backgroundColor:"rgba(109, 40, 217, 0.1)",color:"var(--foreground)",fontSize:"0.75rem",fontWeight:600,cursor:"pointer"},children:"Add"})]}),A.scopes.length>0&&(0,r.jsxs)("div",{style:{marginTop:"0.35rem",display:"flex",gap:"0.35rem",flexWrap:"wrap",alignItems:"center"},children:[(0,r.jsx)("span",{style:{fontSize:"0.65rem",color:"var(--muted)"},children:"Recent:"}),A.scopes.filter(e=>!y.scopedDirs.includes(e)).map(e=>(0,r.jsxs)("button",{type:"button",onClick:()=>{y.scopedDirs.includes(e)||v({...y,scopedDirs:[...y.scopedDirs,e]})},style:{background:"rgba(168, 85, 247, 0.05)",border:"1px solid rgba(168, 85, 247, 0.2)",borderRadius:"3px",color:"#c084fc",fontSize:"0.65rem",padding:"1px 6px",cursor:"pointer",fontFamily:"var(--font-mono)"},title:e,children:["+",e.split(/[/\\]/).pop()||e]},e))]})]}),(0,r.jsxs)("div",{style:{...d,flexDirection:"row",alignItems:"center",gap:"0.5rem",marginTop:"1rem",marginBottom:"0.5rem"},children:[(0,r.jsx)("input",{type:"checkbox",id:"saveAsTemplate",checked:C,onChange:e=>S(e.target.checked),style:{width:"16px",height:"16px",cursor:"pointer",accentColor:"var(--accent)"}}),(0,r.jsx)("label",{htmlFor:"saveAsTemplate",style:{fontSize:"0.8rem",color:"var(--foreground)",cursor:"pointer",userSelect:"none"},children:"Save configuration template"})]}),F&&(0,r.jsxs)("div",{style:u,children:["✗ ",F]})]}),(0,r.jsxs)("div",{style:m,children:[(0,r.jsx)("button",{onClick:e,style:x,disabled:R,children:"Cancel"}),(0,r.jsx)("button",{onClick:O,style:g,disabled:R,children:R?"Saving...":"Launch Session"})]}),W&&(0,r.jsx)(t.default,{title:"Select Workspace Root",initialPath:y.workspaceRoot,onClose:()=>I(!1),onSelect:e=>v({...y,workspaceRoot:e})}),P&&(0,r.jsx)(t.default,{title:"Add Scoped Directory",initialPath:j,onClose:()=>B(!1),onSelect:e=>k(e)})]})})}])},20032,e=>{e.n(e.i(44837))}]);
@@ -0,0 +1,11 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,67585,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"BailoutToCSR",{enumerable:!0,get:function(){return s}});let a=e.r(32061);function s({reason:e,children:t}){if("u"<typeof window)throw Object.defineProperty(new a.BailoutToCSRError(e),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return t}},9885,(e,t,r)=>{"use strict";function a(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"encodeURIPath",{enumerable:!0,get:function(){return a}})},52157,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"PreloadChunks",{enumerable:!0,get:function(){return i}});let a=e.r(43476),s=e.r(74080),n=e.r(63599),l=e.r(9885),o=e.r(43369);function i({moduleIds:e}){if("u">typeof window)return null;let t=n.workAsyncStorage.getStore();if(void 0===t)return null;let r=[];if(t.reactLoadableManifest&&e){let a=t.reactLoadableManifest;for(let t of e){if(!a[t])continue;let e=a[t].files;r.push(...e)}}if(0===r.length)return null;let d=(0,o.getAssetTokenQuery)();return(0,a.jsx)(a.Fragment,{children:r.map(e=>{let r=`${t.assetPrefix}/_next/${(0,l.encodeURIPath)(e)}${d}`;return e.endsWith(".css")?(0,a.jsx)("link",{precedence:"dynamic",href:r,rel:"stylesheet",as:"style",nonce:t.nonce},e):((0,s.preload)(r,{as:"script",fetchPriority:"low",nonce:t.nonce}),null)})})}},69093,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return d}});let a=e.r(43476),s=e.r(71645),n=e.r(67585),l=e.r(52157);function o(e){return{default:e&&"default"in e?e.default:e}}let i={loader:()=>Promise.resolve(o(()=>null)),loading:null,ssr:!0},d=function(e){let t={...i,...e},r=(0,s.lazy)(()=>t.loader().then(o)),d=t.loading;function c(e){let o=d?(0,a.jsx)(d,{isLoading:!0,pastDelay:!0,error:null}):null,i=!t.ssr||!!t.loading,c=i?s.Suspense:s.Fragment,u=t.ssr?(0,a.jsxs)(a.Fragment,{children:["u"<typeof window?(0,a.jsx)(l.PreloadChunks,{moduleIds:t.modules}):null,(0,a.jsx)(r,{...e})]}):(0,a.jsx)(n.BailoutToCSR,{reason:"next/dynamic",children:(0,a.jsx)(r,{...e})});return(0,a.jsx)(c,{...i?{fallback:o}:{},children:u})}return c.displayName="LoadableComponent",c}},70703,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return s}});let a=e.r(55682)._(e.r(69093));function s(e,t){let r={};"function"==typeof e&&(r.loader=e);let s={...r,...t};return(0,a.default)({...s,modules:s.loadableGenerated?.modules})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},66381,e=>{"use strict";var t=e.i(43476),r=e.i(71645),a=e.i(74080);let s={display:"flex",height:"100%",width:"100%",backgroundColor:"#05070a",color:"#cbd5e1",fontSize:"0.875rem",minHeight:0},n={width:"220px",borderRight:"1px solid var(--border)",display:"flex",flexDirection:"column",minHeight:0,backgroundColor:"rgba(10, 15, 24, 0.4)",flexShrink:0},l={display:"flex",flexDirection:"column",padding:"1rem",minHeight:0},o={display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.75rem"},i={fontWeight:700,letterSpacing:"0.05em",textTransform:"uppercase",fontSize:"0.75rem",color:"var(--muted)"},d={padding:"0.2rem 0.5rem",borderRadius:"4px",border:"1px solid var(--primary)",backgroundColor:"transparent",color:"var(--primary)",fontSize:"0.7rem",fontWeight:600,cursor:"pointer"},c={display:"flex",flexDirection:"column",gap:"0.4rem",overflowY:"auto",maxHeight:"220px"},u={fontSize:"0.65rem",fontWeight:600,color:"var(--muted)",marginTop:"0.5rem",marginBottom:"0.2rem",letterSpacing:"0.05em"},p={display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0.5rem 0.6rem",borderRadius:"6px",backgroundColor:"rgba(255, 255, 255, 0.02)",border:"1px solid var(--border)",cursor:"pointer",transition:"all 0.2s ease"},m={backgroundColor:"rgba(109, 40, 217, 0.08)",border:"1px solid var(--border-focus)",boxShadow:"0 0 10px rgba(109, 40, 217, 0.1)"},f={display:"flex",flexDirection:"column",gap:"0.15rem",flex:1,minWidth:0},h={fontWeight:600,fontSize:"0.8rem",color:"#fff",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},g={fontSize:"0.7rem",color:"var(--muted)",textTransform:"uppercase"},x={background:"none",border:"none",color:"rgba(239, 68, 68, 0.4)",cursor:"pointer",fontSize:"0.75rem",padding:"0.25rem"},y={display:"flex",flexDirection:"column",gap:"0.25rem",overflowY:"auto",flex:1,minHeight:0},b={fontSize:"0.75rem",color:"var(--muted)",textAlign:"center",padding:"1rem 0"},j={display:"flex",flexDirection:"column"},v={display:"flex",alignItems:"center",padding:"0.35rem 0.5rem",borderRadius:"4px",cursor:"pointer",userSelect:"none",transition:"background 0.2s ease"},_={marginRight:"0.4rem",fontSize:"0.9rem"},w={flex:1,fontSize:"0.8rem",color:"#e2e8f0",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},S={fontSize:"0.6rem",color:"var(--muted)",marginLeft:"0.25rem"},k={display:"flex",flexDirection:"column",gap:"0.2rem",paddingLeft:"1.5rem",marginTop:"0.15rem",borderLeft:"1px dashed rgba(255,255,255,0.06)",marginLeft:"0.8rem",marginBottom:"0.25rem"},C={display:"flex",alignItems:"center",padding:"0.15rem 0.25rem",fontSize:"0.75rem"},N={marginRight:"0.3rem",fontSize:"0.7rem"},R={flex:1,color:"var(--muted)",overflow:"hidden",textOverflow:"ellipsis"},E={fontSize:"0.65rem",color:"rgba(109, 40, 217, 0.75)",fontFamily:"monospace",paddingLeft:"0.5rem"},L={flex:1,display:"flex",flexDirection:"column",minHeight:0,backgroundColor:"#05070a"},W={display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0.75rem 1rem",borderBottom:"1px solid var(--border)",backgroundColor:"rgba(15, 23, 42, 0.3)",flexShrink:0},O={fontSize:"0.75rem",color:"var(--muted)"},T={fontSize:"0.8rem",fontWeight:600,color:"#fff",display:"flex",alignItems:"center",gap:"0.4rem"},I={padding:"0.1rem 0.4rem",borderRadius:"4px",backgroundColor:"rgba(234, 179, 8, 0.12)",color:"#eab308",fontSize:"0.65rem",fontWeight:700,border:"1px solid rgba(234, 179, 8, 0.2)"},D={padding:"0.4rem 0.9rem",borderRadius:"6px",border:"none",backgroundColor:"var(--primary)",color:"#fff",fontSize:"0.8rem",fontWeight:600,transition:"all 0.2s ease"},P={height:"180px",borderBottom:"1px solid var(--border)",position:"relative",flexShrink:0},z={width:"100%",height:"100%",backgroundColor:"#080c14",border:"none",resize:"none",color:"#e2e8f0",fontFamily:"monospace",fontSize:"0.85rem",padding:"1rem",outline:"none",lineHeight:"1.4"},q={flex:1,display:"flex",flexDirection:"column",minHeight:0,padding:"1rem"},A={padding:"1rem",borderRadius:"8px",backgroundColor:"rgba(239, 68, 68, 0.08)",border:"1px solid rgba(239, 68, 68, 0.2)",overflowY:"auto"},B={margin:0,fontFamily:"monospace",fontSize:"0.8rem",color:"#f87171",whiteSpace:"pre-wrap"},$={marginTop:"1rem",padding:"0.75rem",borderRadius:"6px",backgroundColor:"rgba(0, 0, 0, 0.3)",border:"1px solid var(--border)"},F={display:"block",padding:"0.5rem",backgroundColor:"#090d16",borderRadius:"4px",fontFamily:"monospace",fontSize:"0.8rem",color:"var(--primary)",border:"1px solid var(--border)"},M={display:"flex",flexDirection:"column",height:"100%",minHeight:0},U={display:"flex",justifyContent:"space-between",alignItems:"center",fontSize:"0.75rem",color:"var(--muted)",marginBottom:"0.5rem"},H={flex:1,overflow:"auto",border:"1px solid var(--border)",borderRadius:"6px"},G={width:"100%",borderCollapse:"collapse",fontFamily:"monospace",fontSize:"0.8rem"},J={padding:"0.5rem 0.75rem",textAlign:"left",backgroundColor:"#0f172a",borderBottom:"1px solid var(--border)",color:"#94a3b8",fontWeight:600,position:"sticky",top:0,zIndex:1},Q={padding:"0.4rem 0.75rem",borderBottom:"1px solid rgba(255, 255, 255, 0.03)",color:"#cbd5e1",whiteSpace:"nowrap"},K={padding:"0.2rem 0.5rem",borderRadius:"4px",border:"1px solid var(--border)",backgroundColor:"rgba(255, 255, 255, 0.02)",color:"var(--muted)",fontSize:"0.7rem",fontWeight:600,cursor:"pointer",transition:"all 0.15s ease"},Y={width:"100%",backgroundColor:"#070a12",border:"1px solid var(--border-focus)",borderRadius:"3px",color:"#fff",padding:"0.1rem 0.3rem",fontSize:"0.8rem",fontFamily:"monospace",outline:"none"},V={cursor:"pointer",transition:"all 0.15s ease"},X={backgroundColor:"transparent"},Z={backgroundColor:"rgba(255, 255, 255, 0.01)"},ee={flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--muted)",fontSize:"0.8rem",textAlign:"center"},et={flex:1,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"1rem"},er={width:"24px",height:"24px",border:"3px solid rgba(109, 40, 217, 0.15)",borderTop:"3px solid var(--primary)",borderRadius:"50%",animation:"spin 1s linear infinite"},ea={width:"12px",height:"12px",border:"2px solid rgba(255, 255, 255, 0.1)",borderTop:"2px solid var(--muted)",borderRadius:"50%",animation:"spin 1s linear infinite"},es={position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.7)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:999},en={width:"480px",backgroundColor:"#0d131f",borderRadius:"12px",border:"1px solid var(--border-focus)",padding:"1.5rem",boxShadow:"0 4px 24px rgba(0, 0, 0, 0.5)"},el={display:"flex",flexDirection:"column",gap:"0.35rem",marginBottom:"1rem"},eo={fontSize:"0.75rem",fontWeight:600,color:"var(--muted)"},ei={padding:"0.5rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"#070a12",color:"#fff",outline:"none",fontSize:"0.8rem"},ed={padding:"0.5rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"#070a12",color:"#fff",outline:"none",fontSize:"0.8rem"},ec={padding:"0.5rem",borderRadius:"6px",fontSize:"0.75rem",marginBottom:"1rem"},eu={display:"flex",justifyContent:"space-between",marginTop:"1.5rem"},ep={padding:"0.4rem 0.75rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"transparent",color:"var(--muted)",fontSize:"0.75rem",fontWeight:600,cursor:"pointer"},em={padding:"0.4rem 0.75rem",borderRadius:"6px",border:"none",backgroundColor:"transparent",color:"var(--muted)",fontSize:"0.75rem",fontWeight:600,cursor:"pointer"},ef={padding:"0.4rem 0.75rem",borderRadius:"6px",border:"none",backgroundColor:"var(--primary)",color:"#fff",fontSize:"0.75rem",fontWeight:600,cursor:"pointer"};if("u">typeof document){let e=document.createElement("style");e.innerHTML=`
2
+ @keyframes spin {
3
+ 0% { transform: rotate(0deg); }
4
+ 100% { transform: rotate(360deg); }
5
+ }
6
+ .db-cell:hover {
7
+ background-color: rgba(255, 255, 255, 0.03) !important;
8
+ outline: 1px dashed rgba(255, 255, 255, 0.2);
9
+ }
10
+ `,document.head.appendChild(e)}e.s(["default",0,function({workspaceRoot:e}){let[eh,eg]=(0,r.useState)({global:[],workspace:[]}),[ex,ey]=(0,r.useState)(null),[eb,ej]=(0,r.useState)(!0),[ev,e_]=(0,r.useState)(!0),[ew,eS]=(0,r.useState)([]),[ek,eC]=(0,r.useState)(null),[eN,eR]=(0,r.useState)({}),[eE,eL]=(0,r.useState)(!1),[eW,eO]=(0,r.useState)("SELECT * FROM sqlite_master;"),[eT,eI]=(0,r.useState)(!1),[eD,eP]=(0,r.useState)(null),[ez,eq]=(0,r.useState)(null),[eA,eB]=(0,r.useState)(null),[e$,eF]=(0,r.useState)(null),[eM,eU]=(0,r.useState)(!1),[eH,eG]=(0,r.useState)(!1),[eJ,eQ]=(0,r.useState)({id:"",name:"",type:"sqlite",filepath:"./dev.db",host:"localhost",port:5432,database:"postgres",username:"postgres",password:"",ssl:!1,readOnly:!0}),[eK,eY]=(0,r.useState)(!1),[eV,eX]=(0,r.useState)(null),eZ=async()=>{try{let t=await fetch(`/api/sql/connections?root=${encodeURIComponent(e)}`);if(t.ok){let e=await t.json();e.success&&(eg({global:e.global||[],workspace:e.workspace||[]}),ey(e.activeId),ej(e.isActiveGlobal))}}catch(e){console.error("Failed to load connection profiles:",e)}},e0=async()=>{if(!ex)return void eS([]);eL(!0);try{let t=await fetch(`/api/sql/schema?action=list_tables&root=${encodeURIComponent(e)}`);if(t.ok){let e=await t.json();e.success?(eS(e.tables||[]),eP(null)):eP(e.error||"Failed to load database schema.")}else{let e=await t.json();eP(e.error||"Failed to load database schema.")}}catch(e){console.error("Failed to load schema:",e)}finally{eL(!1)}},e1=async t=>{if(eN[t])return void eC(ek===t?null:t);try{let r=await fetch(`/api/sql/schema?action=describe_table&table=${encodeURIComponent(t)}&root=${encodeURIComponent(e)}`);if(r.ok){let e=await r.json();e.success&&(eR(r=>({...r,[t]:e.columns})),eC(t))}}catch(e){console.error(`Failed to load columns for table ${t}:`,e)}};(0,r.useEffect)(()=>{eZ()},[e]),(0,r.useEffect)(()=>{e0(),eq(null),eC(null),eR({});let e=eb?eh.global.find(e=>e.id===ex):eh.workspace.find(e=>e.id===ex);e&&("sqlite"===e.type?eO("SELECT name, type FROM sqlite_master WHERE type='table';"):"mssql"===e.type?eO("SELECT * FROM sys.tables;"):eO("SELECT * FROM information_schema.tables LIMIT 10;"))},[ex,eb,eh.global.length,eh.workspace.length]);let e5=async(t,r)=>{try{(await fetch("/api/sql/connections",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"set_active",profileId:t,isGlobal:r,root:e})})).ok&&(ey(t),ej(r))}catch(e){console.error("Failed to set active profile:",e)}},e2=async()=>{eX(null);try{let t=await fetch("/api/sql/connections",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"test",profile:eJ,root:e})}),r=await t.json();r.success?eX({success:!0,message:"Connection test successful!"}):eX({success:!1,message:r.error||"Connection test failed."})}catch(e){eX({success:!1,message:e.message||"Failed to make test query."})}},e8=async t=>{if(t.preventDefault(),!eJ.name||!eJ.type)return;eY(!0);let r=eJ.id||`profile_${Math.random().toString(36).substring(7)}`,a={...eJ,id:r,name:eJ.name,type:eJ.type};try{(await fetch("/api/sql/connections",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"save",profile:a,isGlobal:eH,root:e})})).ok&&(await eZ(),eU(!1),ex||e5(r,eH))}catch(e){console.error("Failed to save profile:",e)}finally{eY(!1)}},e6=async(t,r)=>{if(confirm("Are you sure you want to delete this connection profile?"))try{(await fetch("/api/sql/connections",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"delete",profileId:t,isGlobal:r,root:e})})).ok&&(await eZ(),ex===t&&ey(null))}catch(e){console.error("Failed to delete connection profile:",e)}},e7=async(t,r,a,s)=>{if(e4?.readOnly)return void alert("Database connection is Read-Only. Updates are disabled.");let n=(e=>{let t=e.match(/from\s+([a-zA-Z0-9_\`"\[\]\.]+)/i);if(!t)return null;let r=t[1].trim(),a=(r=r.replace(/[\`"\[\]]/g,"")).split(".");return a[a.length-1]})(eW);if(!n)return void alert("Could not extract table name from query for inline edit. Please ensure your query includes 'FROM tableName'.");eF({rowIndex:t,field:r,status:"saving"});try{let s=eN[n];if(!s){let t=await fetch(`/api/sql/schema?action=describe_table&table=${encodeURIComponent(n)}&root=${encodeURIComponent(e)}`);if(t.ok){let e=await t.json();e.success&&e.columns&&(s=e.columns,eR(t=>({...t,[n]:e.columns})))}}if(!s)throw Error(`Could not load schema columns for table "${n}".`);let l=s.find(e=>e.isPrimaryKey);if(!l)throw Error(`Table "${n}" does not have a primary key. Inline editing requires a primary key.`);let o=ez?.rows[t];if(!o||!(l.name in o))throw Error(`Primary key column "${l.name}" was not returned in the query results. Please include it in your SELECT statement.`);let i=o[l.name],d=s.find(e=>e.name===r);if(!d)throw Error(`Column "${r}" was not found in schema columns.`);let c=e=>{let t=e.toLowerCase();return t.includes("int")||t.includes("decimal")||t.includes("numeric")||t.includes("float")||t.includes("double")||t.includes("real")},u="";if("NULL"===a.toUpperCase())u=`${r} = NULL`;else if(c(d.type)){if(""===a||isNaN(Number(a)))throw Error(`Value "${a}" is not a valid number for column "${r}".`);u=`${r} = ${a}`}else u=`${r} = '${a.replace(/'/g,"''")}'`;let p="";p=c(l.type)?`${l.name} = ${i}`:`${l.name} = '${String(i).replace(/'/g,"''")}'`;let m=`UPDATE ${n} SET ${u} WHERE ${p};`,f=await fetch("/api/sql/query",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sql:m,root:e})}),h=await f.json();if(f.ok&&h.success){if(ez){let e=[...ez.rows],s=a;"NULL"===a.toUpperCase()?s=null:c(d.type)&&(s=Number(a)),e[t]={...e[t],[r]:s},eq({...ez,rows:e})}eF({rowIndex:t,field:r,status:"success"}),setTimeout(()=>eF(null),1500)}else throw Error(h.error||"Update database query failed.")}catch(e){eF({rowIndex:t,field:r,status:"error",message:e.message}),alert(`Inline Update Failed:
11
+ ${e.message}`)}},e3=async()=>{if(eW.trim()&&ex){eI(!0),eP(null),eq(null);try{let t=await fetch("/api/sql/query",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sql:eW.trim(),root:e})}),r=await t.json();t.ok&&r.success?(eq({rows:r.rows||[],fields:r.fields||[],durationMs:r.durationMs||0,affectedRows:r.affectedRows}),(eW.toLowerCase().includes("create table")||eW.toLowerCase().includes("drop table")||eW.toLowerCase().includes("alter table"))&&e0()):eP(r.error||"Failed to execute query.")}catch(e){eP(e.message||"An unexpected error occurred during execution.")}finally{eI(!1)}}},e4=eb?eh.global.find(e=>e.id===ex):eh.workspace.find(e=>e.id===ex);return(0,t.jsxs)("div",{style:s,children:[(0,t.jsx)("div",{style:{...n,width:ev?"220px":"0px",borderRight:ev?"1px solid var(--border)":"none",overflow:"hidden",transition:"all 0.25s cubic-bezier(0.4, 0, 0.2, 1)"},children:ev&&(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",height:"100%",minWidth:"220px",minHeight:0},children:[(0,t.jsxs)("div",{style:l,children:[(0,t.jsxs)("div",{style:o,children:[(0,t.jsx)("span",{style:i,children:"Connections"}),(0,t.jsx)("button",{style:d,onClick:()=>{eX(null),eQ({id:"",name:"",type:"sqlite",filepath:"./dev.db",host:"localhost",port:5432,database:"postgres",username:"postgres",password:"",ssl:!1,readOnly:!0}),eG(!1),eU(!0)},title:"Add Database Connection Profile",children:"➕ Add"})]}),(0,t.jsxs)("div",{style:c,children:[0===eh.global.length&&0===eh.workspace.length&&(0,t.jsx)("div",{style:b,children:"No connections configured. Add one to start."}),eh.workspace.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{style:u,children:"WORKSPACE CONNECTIONS"}),eh.workspace.map(e=>(0,t.jsxs)("div",{style:{...p,...ex===e.id&&!eb?m:{}},onClick:()=>e5(e.id,!1),children:[(0,t.jsxs)("div",{style:f,children:[(0,t.jsxs)("span",{style:h,children:["📁 ",e.name]}),(0,t.jsx)("span",{style:g,children:e.type})]}),(0,t.jsx)("button",{style:x,onClick:t=>{t.stopPropagation(),e6(e.id,!1)},children:"✖"})]},e.id))]}),eh.global.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{style:u,children:"GLOBAL CONNECTIONS"}),eh.global.map(e=>(0,t.jsxs)("div",{style:{...p,...ex===e.id&&eb?m:{}},onClick:()=>e5(e.id,!0),children:[(0,t.jsxs)("div",{style:f,children:[(0,t.jsxs)("span",{style:h,children:["🌐 ",e.name]}),(0,t.jsx)("span",{style:g,children:e.type})]}),(0,t.jsx)("button",{style:x,onClick:t=>{t.stopPropagation(),e6(e.id,!0)},children:"✖"})]},e.id))]})]})]}),(0,t.jsxs)("div",{style:{...l,flex:1,borderTop:"1px solid var(--border)"},children:[(0,t.jsxs)("div",{style:o,children:[(0,t.jsx)("span",{style:i,children:"Schema Tables"}),eE&&(0,t.jsx)("span",{style:ea})]}),(0,t.jsxs)("div",{style:y,children:[!ex&&(0,t.jsx)("div",{style:b,children:"Select an active connection to view tables."}),ex&&0===ew.length&&!eE&&(0,t.jsx)("div",{style:b,children:"No tables found in database schema."}),ew.map(e=>(0,t.jsxs)("div",{style:j,children:[(0,t.jsxs)("div",{style:v,onClick:()=>e1(e.name),children:[(0,t.jsx)("span",{style:_,children:"view"===e.type?"👁️":"📊"}),(0,t.jsx)("span",{style:w,children:e.name}),(0,t.jsx)("span",{style:S,children:ek===e.name?"▼":"▶"})]}),ek===e.name&&eN[e.name]&&(0,t.jsx)("div",{style:k,children:eN[e.name].map(e=>(0,t.jsxs)("div",{style:C,children:[(0,t.jsx)("span",{style:N,children:e.isPrimaryKey?"🔑":e.isForeignKey?"🔗":"▫"}),(0,t.jsx)("span",{style:R,title:e.type,children:e.name}),(0,t.jsx)("span",{style:E,children:e.type.toLowerCase().substring(0,12)})]},e.name))})]},e.name))]})]})]})}),(0,t.jsxs)("div",{style:L,children:[(0,t.jsxs)("div",{style:W,children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[(0,t.jsx)("button",{type:"button",onClick:()=>e_(!ev),style:{background:"rgba(255, 255, 255, 0.05)",border:"1px solid var(--border)",borderRadius:"6px",color:"var(--muted)",cursor:"pointer",padding:"0.25rem 0.5rem",fontSize:"0.75rem",display:"flex",alignItems:"center",justifyContent:"center",transition:"all 0.15s ease"},title:ev?"Collapse Connections List":"Expand Connections List",children:ev?"◀ Collapse":"📂 Schema Connections"}),(0,t.jsx)("span",{style:O,children:"Active Connection:"}),e4?(0,t.jsxs)("span",{style:T,children:[eb?"🌐":"📁"," ",e4.name," (",e4.type,")",e4.readOnly&&(0,t.jsx)("span",{style:I,children:"Read-Only"})]}):(0,t.jsx)("span",{style:{...T,color:"var(--danger)"},children:"No Connection Selected"})]}),(0,t.jsx)("button",{style:{...D,opacity:!ex||eT?.6:1,cursor:!ex||eT?"not-allowed":"pointer"},onClick:e3,disabled:!ex||eT,children:eT?"⌛ Running...":"⚡ Execute Query (F5)"})]}),(0,t.jsx)("div",{style:P,children:(0,t.jsx)("textarea",{style:z,value:eW,onChange:e=>eO(e.target.value),placeholder:"Write your SQL query script here...",onKeyDown:e=>{("F5"===e.key||e.ctrlKey&&"Enter"===e.key)&&(e.preventDefault(),e3())}})}),(0,t.jsxs)("div",{style:q,children:[eD&&(0,t.jsxs)("div",{style:A,children:[(0,t.jsx)("h4",{style:{margin:"0 0 0.5rem 0",color:"var(--danger)"},children:"⚠️ Execution Error"}),(0,t.jsx)("pre",{style:B,children:eD}),eD.includes("not installed")&&(0,t.jsxs)("div",{style:$,children:[(0,t.jsx)("p",{style:{margin:"0 0 0.5rem 0"},children:"To resolve this, run this installer command in your workspace terminal:"}),(0,t.jsx)("code",{style:F,children:e4?.type==="sqlite"?"npm install better-sqlite3":e4?.type==="postgres"?"npm install pg":e4?.type==="mysql"?"npm install mysql2":"npm install mssql"})]})]}),ez&&(0,t.jsxs)("div",{style:M,children:[(0,t.jsxs)("div",{style:U,children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[(0,t.jsxs)("span",{children:["Query completed."," ",void 0!==ez.affectedRows?`Affected rows: ${ez.affectedRows}`:`Returned ${ez.rows.length} rows`]}),(0,t.jsxs)("span",{children:["Duration: ",ez.durationMs,"ms"]})]}),ez.rows.length>0&&(0,t.jsxs)("div",{style:{display:"flex",gap:"0.4rem"},children:[(0,t.jsx)("button",{onClick:()=>{if(ez&&0!==ez.rows.length)try{let e=ez.fields.join(","),t=ez.rows.map(e=>ez.fields.map(t=>{let r=e[t];if(null===r)return"NULL";let a=String(r);return a.includes(",")||a.includes('"')||a.includes("\n")||a.includes("\r")?`"${a.replace(/"/g,'""')}"`:a}).join(",")),r=[e,...t].join("\r\n"),a=new Blob([r],{type:"text/csv;charset=utf-8;"}),s=URL.createObjectURL(a),n=document.createElement("a");n.setAttribute("href",s),n.setAttribute("download",`query-results-${Date.now()}.csv`),document.body.appendChild(n),n.click(),document.body.removeChild(n)}catch(e){console.error("Export CSV failed:",e),alert("Failed to export as CSV")}},style:K,children:"📥 Export CSV"}),(0,t.jsx)("button",{onClick:()=>{if(ez&&0!==ez.rows.length)try{let e=JSON.stringify(ez.rows,null,2),t=new Blob([e],{type:"application/json;charset=utf-8;"}),r=URL.createObjectURL(t),a=document.createElement("a");a.setAttribute("href",r),a.setAttribute("download",`query-results-${Date.now()}.json`),document.body.appendChild(a),a.click(),document.body.removeChild(a)}catch(e){console.error("Export JSON failed:",e),alert("Failed to export as JSON")}},style:K,children:"📥 Export JSON"})]})]}),ez.rows.length>0?(0,t.jsx)("div",{style:H,children:(0,t.jsxs)("table",{style:G,children:[(0,t.jsx)("thead",{children:(0,t.jsx)("tr",{children:ez.fields.map(e=>(0,t.jsx)("th",{style:J,children:e},e))})}),(0,t.jsx)("tbody",{children:ez.rows.map((e,r)=>(0,t.jsx)("tr",{style:r%2==0?X:Z,children:ez.fields.map(a=>{let s=eA&&eA.rowIndex===r&&eA.field===a,n=e$&&e$.rowIndex===r&&e$.field===a&&"saving"===e$.status,l=e$&&e$.rowIndex===r&&e$.field===a&&"success"===e$.status,o=e$&&e$.rowIndex===r&&e$.field===a&&"error"===e$.status,i={...Q,...V};return n?i={...i,backgroundColor:"rgba(168, 85, 247, 0.15)"}:l?i={...i,backgroundColor:"rgba(16, 185, 129, 0.25)"}:o&&(i={...i,backgroundColor:"rgba(239, 68, 68, 0.25)"}),(0,t.jsx)("td",{style:i,onDoubleClick:()=>{e4?.readOnly?alert("Database connection is Read-Only. Editing is disabled."):eB({rowIndex:r,field:a,value:null===e[a]?"NULL":String(e[a])})},className:"db-cell",title:"Double click to edit cell",children:s?(0,t.jsx)("input",{style:Y,value:eA.value,autoFocus:!0,onChange:e=>eB({...eA,value:e.target.value}),onKeyDown:async t=>{if("Enter"===t.key){t.preventDefault();let s=eA.value;eB(null),s!==(null===e[a]?"NULL":String(e[a]))&&await e7(r,a,s,e[a])}else"Escape"===t.key&&eB(null)},onBlur:async()=>{let t=eA.value;eB(null),t!==(null===e[a]?"NULL":String(e[a]))&&await e7(r,a,t,e[a])}}):null===e[a]?"NULL":"object"==typeof e[a]?JSON.stringify(e[a]):String(e[a])},a)})},r))})]})}):void 0===ez.affectedRows&&(0,t.jsx)("div",{style:ee,children:"Query executed successfully, but returned 0 results."})]}),!eD&&!ez&&!eT&&(0,t.jsx)("div",{style:ee,children:"Write a query script and click Execute to view table records."}),eT&&(0,t.jsxs)("div",{style:et,children:[(0,t.jsx)("span",{style:er}),(0,t.jsx)("span",{style:{color:"var(--muted)"},children:"Running database statement..."})]})]})]}),eM&&"u">typeof document&&(0,a.createPortal)((0,t.jsx)("div",{style:es,children:(0,t.jsxs)("div",{style:en,children:[(0,t.jsxs)("h3",{style:{margin:"0 0 1rem 0",display:"flex",justifyContent:"space-between"},children:[(0,t.jsx)("span",{children:"🔌 Add Database Profile"}),(0,t.jsx)("span",{style:{cursor:"pointer"},onClick:()=>eU(!1),children:"✖"})]}),(0,t.jsxs)("form",{onSubmit:e8,children:[(0,t.jsxs)("div",{style:el,children:[(0,t.jsx)("label",{style:eo,children:"Profile Name"}),(0,t.jsx)("input",{style:ei,type:"text",required:!0,value:eJ.name,onChange:e=>eQ(t=>({...t,name:e.target.value})),placeholder:"e.g. Local Postgres, Dev SQLite"})]}),(0,t.jsxs)("div",{style:el,children:[(0,t.jsx)("label",{style:eo,children:"Scope Level"}),(0,t.jsxs)("div",{style:{display:"flex",gap:"1rem"},children:[(0,t.jsxs)("label",{style:{cursor:"pointer",display:"flex",alignItems:"center",gap:"0.25rem"},children:[(0,t.jsx)("input",{type:"radio",checked:!eH,onChange:()=>eG(!1)}),"Workspace Local"]}),(0,t.jsxs)("label",{style:{cursor:"pointer",display:"flex",alignItems:"center",gap:"0.25rem"},children:[(0,t.jsx)("input",{type:"radio",checked:eH,onChange:()=>eG(!0)}),"Global User Profile"]})]})]}),(0,t.jsxs)("div",{style:el,children:[(0,t.jsx)("label",{style:eo,children:"Database Type"}),(0,t.jsxs)("select",{style:ed,value:eJ.type,onChange:e=>{let t=e.target.value,r=5432;"mysql"===t&&(r=3306),"mssql"===t&&(r=1433),eQ(e=>({...e,type:t,filepath:"sqlite"===t?"./dev.db":void 0,port:"sqlite"!==t?r:void 0,database:"sqlite"===t?void 0:"mssql"===t?"master":"postgres"===t?"postgres":"",username:"sqlite"===t?void 0:"mssql"===t?"sa":"postgres"===t?"postgres":"root"}))},children:[(0,t.jsx)("option",{value:"sqlite",children:"SQLite (Local File)"}),(0,t.jsx)("option",{value:"postgres",children:"PostgreSQL"}),(0,t.jsx)("option",{value:"mysql",children:"MySQL"}),(0,t.jsx)("option",{value:"mssql",children:"Microsoft SQL Server"})]})]}),"sqlite"===eJ.type?(0,t.jsxs)("div",{style:el,children:[(0,t.jsx)("label",{style:eo,children:"Database File Path"}),(0,t.jsx)("input",{style:ei,type:"text",required:!0,value:eJ.filepath||"",onChange:e=>eQ(t=>({...t,filepath:e.target.value})),placeholder:"Relative (e.g. ./data/dev.db) or Absolute path"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",gap:"1rem"},children:[(0,t.jsxs)("div",{style:{...el,flex:3},children:[(0,t.jsx)("label",{style:eo,children:"Host IP Address"}),(0,t.jsx)("input",{style:ei,type:"text",required:!0,value:eJ.host||"",onChange:e=>eQ(t=>({...t,host:e.target.value})),placeholder:"localhost or IP"})]}),(0,t.jsxs)("div",{style:{...el,flex:1},children:[(0,t.jsx)("label",{style:eo,children:"Port"}),(0,t.jsx)("input",{style:ei,type:"number",required:!0,value:eJ.port||0,onChange:e=>eQ(t=>({...t,port:parseInt(e.target.value)}))})]})]}),(0,t.jsxs)("div",{style:el,children:[(0,t.jsx)("label",{style:eo,children:"Database Name"}),(0,t.jsx)("input",{style:ei,type:"text",required:!0,value:eJ.database||"",onChange:e=>eQ(t=>({...t,database:e.target.value}))})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:"1rem"},children:[(0,t.jsxs)("div",{style:{...el,flex:1},children:[(0,t.jsx)("label",{style:eo,children:"Username"}),(0,t.jsx)("input",{style:ei,type:"text",required:!0,value:eJ.username||"",onChange:e=>eQ(t=>({...t,username:e.target.value}))})]}),(0,t.jsxs)("div",{style:{...el,flex:1},children:[(0,t.jsx)("label",{style:eo,children:"Password"}),(0,t.jsx)("input",{style:ei,type:"password",value:eJ.password||"",onChange:e=>eQ(t=>({...t,password:e.target.value}))})]})]}),("postgres"===eJ.type||"mssql"===eJ.type)&&(0,t.jsx)("div",{style:el,children:(0,t.jsxs)("label",{style:{cursor:"pointer",display:"flex",alignItems:"center",gap:"0.25rem"},children:[(0,t.jsx)("input",{type:"checkbox",checked:!!eJ.ssl,onChange:e=>eQ(t=>({...t,ssl:e.target.checked}))}),"Require SSL Secure Connection"]})})]}),(0,t.jsx)("div",{style:el,children:(0,t.jsxs)("label",{style:{cursor:"pointer",display:"flex",alignItems:"center",gap:"0.25rem"},children:[(0,t.jsx)("input",{type:"checkbox",checked:!!eJ.readOnly,onChange:e=>eQ(t=>({...t,readOnly:e.target.checked}))}),"Enforce Read-Only Connection (Disable mutations)"]})}),eV&&(0,t.jsx)("div",{style:{...ec,backgroundColor:eV.success?"rgba(16, 185, 129, 0.12)":"rgba(239, 68, 68, 0.12)",border:eV.success?"1px solid var(--success)":"1px solid var(--danger)",color:eV.success?"var(--success)":"var(--danger)"},children:eV.message}),(0,t.jsxs)("div",{style:eu,children:[(0,t.jsx)("button",{type:"button",style:ep,onClick:e2,children:"🔍 Test Connection"}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[(0,t.jsx)("button",{type:"button",style:em,onClick:()=>eU(!1),children:"Cancel"}),(0,t.jsx)("button",{type:"submit",style:ef,disabled:eK,children:eK?"Saving...":"Save Profile"})]})]})]})]})}),document.body)]})}])},20897,e=>{e.v({activeBorder:"page-module___8aEwW__activeBorder",agentBadge:"page-module___8aEwW__agentBadge",agentCard:"page-module___8aEwW__agentCard",agentGrid:"page-module___8aEwW__agentGrid",agentHeader:"page-module___8aEwW__agentHeader",agentName:"page-module___8aEwW__agentName",agentStateBadge:"page-module___8aEwW__agentStateBadge",ansiCyan:"page-module___8aEwW__ansiCyan",ansiGreen:"page-module___8aEwW__ansiGreen",ansiMagenta:"page-module___8aEwW__ansiMagenta",ansiRed:"page-module___8aEwW__ansiRed",ansiYellow:"page-module___8aEwW__ansiYellow",cardBody:"page-module___8aEwW__cardBody",container:"page-module___8aEwW__container",containerActive:"page-module___8aEwW__containerActive",contextDetails:"page-module___8aEwW__contextDetails",contextItem:"page-module___8aEwW__contextItem",contextList:"page-module___8aEwW__contextList",contextMeta:"page-module___8aEwW__contextMeta",contextTitle:"page-module___8aEwW__contextTitle",dashboardGrid:"page-module___8aEwW__dashboardGrid",envGrid:"page-module___8aEwW__envGrid",envName:"page-module___8aEwW__envName",envRow:"page-module___8aEwW__envRow",envStatus:"page-module___8aEwW__envStatus",footer:"page-module___8aEwW__footer",header:"page-module___8aEwW__header",logoArea:"page-module___8aEwW__logoArea",mainPanel:"page-module___8aEwW__mainPanel",pulse:"page-module___8aEwW__pulse","pulse-attention":"page-module___8aEwW__pulse-attention","pulse-thinking":"page-module___8aEwW__pulse-thinking",pulseDot:"page-module___8aEwW__pulseDot",quickLaunchBtn:"page-module___8aEwW__quickLaunchBtn",sectionTitle:"page-module___8aEwW__sectionTitle",sidePanel:"page-module___8aEwW__sidePanel","state-complete":"page-module___8aEwW__state-complete","state-idle":"page-module___8aEwW__state-idle","state-needs-input":"page-module___8aEwW__state-needs-input","state-thinking":"page-module___8aEwW__state-thinking",statusIndicator:"page-module___8aEwW__statusIndicator",stoppedBadge:"page-module___8aEwW__stoppedBadge",subtitle:"page-module___8aEwW__subtitle",terminalContainer:"page-module___8aEwW__terminalContainer",terminalInput:"page-module___8aEwW__terminalInput",terminalInputArea:"page-module___8aEwW__terminalInputArea",terminalLine:"page-module___8aEwW__terminalLine",terminalSendBtn:"page-module___8aEwW__terminalSendBtn",title:"page-module___8aEwW__title"})},52683,e=>{"use strict";var t=e.i(43476),r=e.i(71645),a=e.i(70703),s=e.i(20897),n=e.i(66381);let l=e=>"mock"===e?"🧪":e.includes("-docker")?"🐳":e.includes("-ssh")?"🌐":"💻",o=(0,a.default)(()=>e.A(33779),{loadableGenerated:{modules:[37314]},ssr:!1,loading:()=>(0,t.jsx)("div",{style:{height:"400px",display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"#05070a",color:"var(--muted)",border:"1px solid var(--border)",borderBottomLeftRadius:"12px",borderBottomRightRadius:"12px"},children:(0,t.jsx)("span",{children:"Initializing terminal emulator..."})})}),i=(0,a.default)(()=>e.A(39429),{loadableGenerated:{modules:[1985]},ssr:!1,loading:()=>(0,t.jsx)("div",{style:{height:"280px",display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"var(--card)",border:"1px solid var(--border)",borderRadius:"12px",marginTop:"1.5rem"},children:(0,t.jsx)("span",{style:{color:"var(--muted)"},children:"Initializing prompt editor..."})})}),d=(0,a.default)(()=>e.A(56915),{loadableGenerated:{modules:[99026]},ssr:!1}),c=(0,a.default)(()=>e.A(78716),{loadableGenerated:{modules:[9949]},ssr:!1}),u=(0,a.default)(()=>e.A(33789),{loadableGenerated:{modules:[20032]},ssr:!1}),p=(0,a.default)(()=>e.A(78003),{loadableGenerated:{modules:[97722]},ssr:!1});e.s(["default",0,function(){let[e,a]=(0,r.useState)([]),[m,f]=(0,r.useState)(null),[h,g]=(0,r.useState)(!1),[x,y]=(0,r.useState)(!1),[b,j]=(0,r.useState)(!1),[v,_]=(0,r.useState)(!1),[w,S]=(0,r.useState)(!1),[k,C]=(0,r.useState)(!1),[N,R]=(0,r.useState)(""),[E,L]=(0,r.useState)(9601),[W,O]=(0,r.useState)("0.2.19"),[T,I]=(0,r.useState)(null),[D,P]=(0,r.useState)([]),z=e.filter(e=>"workspace-terminal"!==e.id),q=e.find(e=>e.id===m),A=z.some(e=>("claude-docker"===e.type||"aider-docker"===e.type)&&"running"===e.status),B=z.some(e=>"claude-ssh"===e.type&&"running"===e.status),$=async()=>{try{let e=await fetch("/api/sessions"),t=await e.json();t.sessions&&a(t.sessions),t.wsPort&&L(t.wsPort),t.originalCwd&&R(t.originalCwd),t.version&&O(t.version)}catch(e){console.error("Failed to fetch sessions:",e)}},F=async()=>{try{let e=await fetch("/api/recents");if(e.ok){let t=await e.json();t.success&&t.recents&&t.recents.lastSession&&I(t.recents.lastSession)}}catch(e){console.error("Failed to fetch recents:",e)}},M=async()=>{try{let e=await fetch("/api/configs");if(e.ok){let t=await e.json();t.configs&&P(t.configs)}}catch(e){console.error("Failed to fetch configs:",e)}};(0,r.useEffect)(()=>{(async()=>{await $(),await F(),await M()})(),"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").then(e=>console.log("Service Worker registered:",e.scope)).catch(e=>console.error("Service Worker registration failed:",e));let e=setInterval($,4e3);return()=>clearInterval(e)},[]);let U=async(e,t,r,a)=>{g(!0);try{let s=t;s||("claude"===e?s="Claude Local":"claude-docker"===e?s="Claude Docker":"claude-ssh"===e?s="Claude SSH":"aider"===e?s="Aider Local":"aider-docker"===e?s="Aider Docker":"mock"===e&&(s="Mock Session"));let n={type:e,name:s,workspaceRoot:r,scopedDirs:a};if(("aider"===e||"aider-docker"===e)&&!r)try{let e=await fetch("/api/context/aider");if(e.ok){let t=await e.json();t.success&&t.config&&(n.workspaceRoot=t.config.workspaceRoot,n.scopedDirs=t.config.scopedDirs)}}catch(e){console.error("Failed to load aider configuration before launch:",e)}let l=await fetch("/api/sessions/launch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}),o=await l.json();o.success&&(await $(),await M(),f(o.session.id),I({type:e,name:s,workspaceRoot:r,scopedDirs:a}))}catch(e){console.error("Failed to launch session:",e)}finally{g(!1)}},H=async e=>{g(!0);try{let t=await fetch("/api/sessions/launch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:e.type,name:e.name,workspaceRoot:e.workspaceRoot,scopedDirs:e.scopedDirs})}),r=await t.json();r.success?(await $(),f(r.session.id)):alert(r.error||"Failed to launch configuration.")}catch(e){console.error(e),alert("Network error: failed to launch configuration.")}finally{g(!1)}},G=async e=>{if(window.confirm("Are you sure you want to delete this configuration template?"))try{(await fetch("/api/configs",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"delete",id:e})})).ok?await M():alert("Failed to delete configuration template.")}catch(e){console.error(e),alert("Network error: failed to delete configuration template.")}},J=async(e,t=!1)=>{try{let r=await fetch("/api/sessions/stop",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e,delete:t})});(await r.json()).success&&(t&&m===e&&f(null),await $())}catch(e){console.error("Failed to stop session:",e)}};return(0,t.jsxs)("div",{className:`${s.default.container} ${q?s.default.containerActive:""}`,children:[(0,t.jsxs)("header",{className:s.default.header,children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"1.5rem"},children:[(0,t.jsx)("img",{src:"/logo.png",alt:"NeuralLoom Logo",style:{width:"160px",height:"160px",borderRadius:"16px",objectFit:"contain"}}),(0,t.jsxs)("div",{className:s.default.logoArea,children:[(0,t.jsx)("h1",{className:s.default.title,style:{margin:0,lineHeight:1.1},children:"NeuralLoom"}),(0,t.jsx)("span",{className:s.default.subtitle,children:"Unified AI Orchestrator & Context Bridge"})]})]}),(0,t.jsxs)("div",{className:s.default.statusIndicator,children:[(0,t.jsx)("span",{className:s.default.pulseDot}),(0,t.jsx)("span",{children:"Orchestrator Online"})]})]}),q?(0,t.jsx)("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:(0,t.jsx)(p,{sessionId:q.id,workspaceRoot:q.workspaceRoot||"",scopedDirs:q.scopedDirs||[],onClose:()=>f(null),sessions:e,onSwitchSession:e=>f(e),onRefreshSessions:$,wsPort:E})}):(0,t.jsxs)("div",{className:s.default.dashboardGrid,children:[(0,t.jsxs)("div",{className:s.default.mainPanel,children:[(0,t.jsxs)("section",{children:[(0,t.jsx)("h2",{className:s.default.sectionTitle,children:"Built-in Database Explorer & SQL Client"}),(0,t.jsx)("div",{className:"card",style:{padding:0,overflow:"hidden",height:"450px",border:"1px solid var(--border)"},children:(0,t.jsx)(n.default,{workspaceRoot:N||""})})]}),(0,t.jsxs)("section",{style:{marginTop:"1.5rem"},children:[(0,t.jsx)("h2",{className:s.default.sectionTitle,children:"Shared Context Hub & Slash Commands"}),(0,t.jsxs)("div",{className:s.default.contextList,children:[(0,t.jsxs)("div",{className:`${s.default.contextItem} card`,children:[(0,t.jsxs)("div",{className:s.default.contextMeta,children:[(0,t.jsx)("span",{className:s.default.contextTitle,children:"Staged Context & System Rules (/ccc)"}),(0,t.jsx)("span",{className:s.default.contextDetails,children:"Compiles AGENTS.md guidelines and files map."})]}),(0,t.jsx)("button",{onClick:async()=>{m&&await fetch("/api/sessions/inject",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:m,command:"/ccc"})})},disabled:!m,style:{padding:"0.4rem 0.8rem",borderRadius:"6px",border:"1px solid var(--primary)",backgroundColor:"transparent",color:"var(--primary)",fontSize:"0.75rem",fontWeight:600,opacity:m?1:.5,cursor:m?"pointer":"not-allowed"},children:"🚀 Mount (/ccc)"})]}),(0,t.jsxs)("div",{className:`${s.default.contextItem} card`,children:[(0,t.jsxs)("div",{className:s.default.contextMeta,children:[(0,t.jsx)("span",{className:s.default.contextTitle,children:"Staged Developer Prompt (/ccp)"}),(0,t.jsx)("span",{className:s.default.contextDetails,children:"Executes prompt in .ai/neural-loom/cprompt.md."})]}),(0,t.jsx)("button",{onClick:async()=>{m&&await fetch("/api/sessions/inject",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:m,command:"/ccp"})})},disabled:!m,style:{padding:"0.4rem 0.8rem",borderRadius:"6px",border:"1px solid var(--success)",backgroundColor:"transparent",color:"var(--success)",fontSize:"0.75rem",fontWeight:600,opacity:m?1:.5,cursor:m?"pointer":"not-allowed"},children:"⚡ Run (/ccp)"})]})]}),(0,t.jsx)(i,{})]})]}),(0,t.jsxs)("div",{className:s.default.mainPanel,children:[(0,t.jsxs)("section",{children:[(0,t.jsx)("h2",{className:s.default.sectionTitle,children:"Active AI Agents"}),0===z.length?(0,t.jsxs)("div",{className:"card",style:{padding:"3rem 1.5rem",textAlign:"center"},children:[(0,t.jsx)("p",{style:{color:"var(--muted)",marginBottom:"1.5rem"},children:"No active agent sessions. Launch a Claude or Aider agent session to begin."}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.75rem",flexDirection:"column"},children:[T&&(0,t.jsx)("button",{className:s.default.quickLaunchBtn,onClick:()=>{U(T.type,T.name,T.workspaceRoot,T.scopedDirs)},disabled:h,style:{background:"linear-gradient(135deg, hsl(38, 92%, 50%) 0%, hsl(0, 84%, 60%) 100%)",border:"none"},title:`Re-launch: ${T.name||T.type}`,children:"⚡ Re-launch Last Session"}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[(0,t.jsx)("button",{className:s.default.quickLaunchBtn,onClick:()=>{C(!1),S(!0)},disabled:h,style:{background:"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)",border:"none",flex:1},children:"Launch Claude"}),(0,t.jsx)("button",{className:s.default.quickLaunchBtn,onClick:()=>{_(!1),j(!0)},disabled:h,style:{background:"linear-gradient(135deg, hsl(210, 80%, 45%) 0%, hsl(262, 80%, 55%) 100%)",border:"none",flex:1},children:"Launch Aider"})]})]}),(0,t.jsxs)("div",{style:{marginTop:"1.5rem",fontSize:"0.75rem",color:"var(--muted)"},children:["Need a simulator?"," ",(0,t.jsx)("span",{onClick:()=>U("mock"),style:{color:"var(--primary)",cursor:"pointer",textDecoration:"underline"},children:"Start mock playground"})]})]}):(0,t.jsx)("div",{className:s.default.agentGrid,children:z.map(e=>(0,t.jsxs)("div",{className:`${s.default.agentCard} card ${m===e.id?s.default.activeBorder:""}`,children:[(0,t.jsxs)("div",{className:s.default.agentHeader,children:[(0,t.jsx)("span",{className:s.default.agentName,children:e.name}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.35rem",alignItems:"center"},children:["running"===e.status&&e.agentState&&(0,t.jsxs)("span",{className:`${s.default.agentStateBadge} ${s.default["state-"+e.agentState]}`,children:["thinking"===e.agentState&&`${l(e.type)} 💭`,"needs-input"===e.agentState&&`${l(e.type)} ⚠️`,"complete"===e.agentState&&`${l(e.type)} ✅`,"idle"===e.agentState&&`${l(e.type)} 💤`]}),(0,t.jsx)("span",{className:`${s.default.agentBadge} ${"stopped"===e.status?s.default.stoppedBadge:""}`,children:e.status})]})]}),(0,t.jsxs)("div",{className:s.default.cardBody,style:{padding:"1rem"},children:[(0,t.jsxs)("p",{style:{fontSize:"0.8rem",color:"var(--muted)",margin:0},children:["ID: ",(0,t.jsx)("code",{style:{fontSize:"0.72rem"},children:e.id.substring(0,8)})," | Type: ",e.type,(0,t.jsx)("br",{}),"Logs: ",e.logsCount," lines"]}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.5rem",marginTop:"0.75rem"},children:["running"===e.status?(0,t.jsx)("button",{onClick:()=>J(e.id,!1),style:{flex:1,padding:"0.35rem",borderRadius:"6px",border:"1px solid var(--danger)",backgroundColor:"transparent",fontSize:"0.75rem",color:"var(--danger)",cursor:"pointer"},children:"Stop"}):(0,t.jsx)("button",{onClick:()=>J(e.id,!0),style:{flex:1,padding:"0.35rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"transparent",fontSize:"0.75rem",color:"var(--muted)",cursor:"pointer"},children:"Delete"}),(0,t.jsx)("button",{onClick:()=>f(e.id),style:{flex:2,padding:"0.35rem",borderRadius:"6px",border:"none",backgroundColor:m===e.id?"var(--border-focus)":"var(--primary)",fontSize:"0.75rem",fontWeight:600,color:"#fff",cursor:"pointer"},children:m===e.id?"Connected":"Open Console"})]})]})]},e.id))})]}),m&&"workspace-terminal"!==m&&(0,t.jsxs)("section",{className:"card",style:{display:"flex",flexDirection:"column",border:"1px solid var(--border-focus)",marginTop:"1rem"},children:[(0,t.jsxs)("div",{className:s.default.agentHeader,style:{justifyContent:"space-between",background:"rgba(109, 40, 217, 0.08)",padding:"0.5rem 1rem"},children:[(0,t.jsxs)("span",{style:{fontWeight:600,fontSize:"0.85rem",display:"flex",alignItems:"center",gap:"0.5rem"},children:["🖥️ Console — ",e.find(e=>e.id===m)?.name]}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"},children:[e.find(e=>e.id===m)?.status==="stopped"&&(0,t.jsx)("button",{onClick:async()=>{try{let t=e.find(e=>e.id===m),r=t&&("claude"===t.type||"claude-docker"===t.type||"claude-ssh"===t.type),a=!1;r&&(a=window.confirm("Would you like to resume your previous Claude session?"));let s=await fetch("/api/sessions/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:m,resume:a})});if(s.ok)await $();else{let e=await s.json();alert(e.error||"Failed to restart session.")}}catch(e){console.error("Failed to restart session:",e)}},style:{padding:"0.15rem 0.4rem",borderRadius:"4px",border:"1px solid #eab308",backgroundColor:"rgba(234, 179, 8, 0.15)",color:"#eab308",fontSize:"0.65rem",fontWeight:600,cursor:"pointer"},children:"⚡ Restart"}),(0,t.jsx)("button",{onClick:()=>f(null),style:{border:"none",background:"none",color:"var(--muted)",cursor:"pointer",fontSize:"0.75rem"},children:"✖"})]})]}),(0,t.jsx)(o,{sessionId:m,wsPort:E})]})]}),(0,t.jsxs)("div",{className:s.default.sidePanel,children:[(0,t.jsxs)("section",{children:[(0,t.jsx)("h2",{className:s.default.sectionTitle,children:"Execution Environments"}),(0,t.jsxs)("div",{className:s.default.envGrid,children:[(0,t.jsxs)("div",{className:s.default.envRow,style:{padding:"0.5rem 0.75rem"},children:[(0,t.jsx)("span",{className:s.default.envName,children:"💻 Local Host"}),(0,t.jsx)("span",{className:s.default.envStatus,style:{color:"var(--success)"},children:"Active"})]}),(0,t.jsxs)("div",{className:s.default.envRow,style:{opacity:A?1:.6,padding:"0.5rem 0.75rem"},children:[(0,t.jsx)("span",{className:s.default.envName,children:"🐳 Docker Sandbox"}),(0,t.jsx)("span",{className:s.default.envStatus,style:{color:A?"var(--success)":"var(--muted)"},children:A?"Active":"Not Mounted"})]}),(0,t.jsxs)("div",{className:s.default.envRow,style:{opacity:B?1:.6,padding:"0.5rem 0.75rem"},children:[(0,t.jsx)("span",{className:s.default.envName,children:"🌐 Remote VM (SSH)"}),(0,t.jsx)("span",{className:s.default.envStatus,style:{color:B?"var(--success)":"var(--muted)"},children:B?"Active":"Offline"})]})]})]}),(0,t.jsxs)("section",{children:[(0,t.jsx)("h2",{className:s.default.sectionTitle,children:"Saved Configurations"}),(0,t.jsx)("div",{className:"card",style:{padding:"1rem",display:"flex",flexDirection:"column",gap:"0.75rem"},children:0===D.length?(0,t.jsx)("p",{style:{color:"var(--muted)",fontSize:"0.8rem",textAlign:"center",margin:"1rem 0"},children:"No configuration templates saved yet. Save a template from the Claude/Aider launch wizards."}):(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem",maxHeight:"200px",overflowY:"auto"},children:D.map(e=>(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",background:"rgba(255, 255, 255, 0.02)",padding:"0.5rem",borderRadius:"6px",border:"1px solid var(--border)"},children:[(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.15rem",minWidth:0},children:[(0,t.jsx)("span",{style:{fontSize:"0.8rem",fontWeight:600,color:"var(--foreground)",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:e.name}),(0,t.jsx)("span",{style:{fontSize:"0.65rem",color:"var(--muted)",textTransform:"uppercase"},children:e.type})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.25rem"},children:[(0,t.jsx)("button",{onClick:()=>H(e),disabled:h,style:{padding:"0.2rem 0.4rem",borderRadius:"4px",backgroundColor:"var(--primary)",color:"#fff",border:"none",fontSize:"0.7rem",cursor:"pointer"},children:"Launch"}),(0,t.jsx)("button",{onClick:()=>G(e.id),style:{padding:"0.2rem 0.4rem",borderRadius:"4px",backgroundColor:"transparent",color:"var(--danger)",border:"1px solid var(--danger)",fontSize:"0.7rem",cursor:"pointer"},children:"Delete"})]})]},e.id))})})]}),(0,t.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[(0,t.jsx)("button",{className:s.default.quickLaunchBtn,onClick:()=>{C(!1),S(!0)},disabled:h,style:{background:"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)",border:"none",padding:"0.6rem",fontSize:"0.8rem",flex:1},children:"🤖 Claude Local"}),(0,t.jsx)("button",{className:s.default.quickLaunchBtn,onClick:()=>{C(!0),S(!0)},disabled:h,style:{background:"linear-gradient(135deg, hsl(170, 72%, 40%) 0%, hsl(195, 100%, 40%) 100%)",border:"none",padding:"0.6rem",fontSize:"0.8rem",flex:1},children:"🐳 Claude Docker"})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[(0,t.jsx)("button",{className:s.default.quickLaunchBtn,onClick:()=>{_(!1),j(!0)},disabled:h,style:{background:"linear-gradient(135deg, hsl(210, 80%, 45%) 0%, hsl(262, 80%, 55%) 100%)",border:"none",padding:"0.6rem",fontSize:"0.8rem",flex:1},children:"🐍 Aider Local"}),(0,t.jsx)("button",{className:s.default.quickLaunchBtn,onClick:()=>{_(!0),j(!0)},disabled:h,style:{background:"linear-gradient(135deg, hsl(195, 100%, 40%) 0%, hsl(262, 80%, 55%) 100%)",border:"none",padding:"0.6rem",fontSize:"0.8rem",flex:1},children:"🐳 Aider Docker"})]}),(0,t.jsx)("button",{className:s.default.quickLaunchBtn,onClick:()=>y(!0),disabled:h,style:{background:"linear-gradient(135deg, hsl(38, 92%, 50%) 0%, hsl(0, 84%, 60%) 100%)",border:"none",padding:"0.6rem",fontSize:"0.8rem"},children:"🌐 Connect Remote SSH"})]}),(0,t.jsxs)("section",{children:[(0,t.jsx)("h2",{className:s.default.sectionTitle,children:"Workspace Terminal"}),(0,t.jsxs)("div",{className:"card",style:{display:"flex",flexDirection:"column",border:"1px solid var(--border)",padding:0},children:[(0,t.jsx)("div",{className:s.default.agentHeader,style:{justifyContent:"space-between",background:"rgba(255, 255, 255, 0.02)",padding:"0.4rem 0.75rem"},children:(0,t.jsxs)("span",{style:{fontWeight:600,fontSize:"0.75rem"},children:["💻 Local Shell (CWD: ",N.split(/[/\\]/).pop()||"root",")"]})}),(0,t.jsx)(o,{sessionId:"workspace-terminal",height:"180px",wsPort:E})]})]}),(0,t.jsxs)("section",{className:"card",style:{padding:"1rem",display:"flex",flexDirection:"column",gap:"0.5rem"},children:[(0,t.jsx)("h3",{style:{fontSize:"0.9rem",fontWeight:700,margin:0},children:"Quick Actions"}),(0,t.jsxs)("ul",{style:{listStyle:"none",fontSize:"0.75rem",display:"flex",flexDirection:"column",gap:"0.35rem",color:"var(--muted)",padding:0,margin:0},children:[(0,t.jsxs)("li",{style:{display:"flex",justifyContent:"space-between"},children:[(0,t.jsx)("span",{children:"Configure API Keys"}),(0,t.jsx)("span",{style:{color:"var(--primary)",cursor:"pointer"},children:"→"})]}),(0,t.jsxs)("li",{style:{display:"flex",justifyContent:"space-between"},children:[(0,t.jsx)("span",{children:"Edit rules templates"}),(0,t.jsx)("span",{style:{color:"var(--primary)",cursor:"pointer"},children:"→"})]}),(0,t.jsxs)("li",{style:{display:"flex",justifyContent:"space-between"},children:[(0,t.jsx)("span",{children:"Inspect process locks"}),(0,t.jsx)("span",{style:{color:"var(--primary)",cursor:"pointer"},children:"→"})]})]})]})]})]}),(0,t.jsxs)("footer",{className:s.default.footer,children:[(0,t.jsxs)("span",{children:["NeuralLoom v",W," — Experimental AI Orchestrator Bridge"]}),(0,t.jsxs)("span",{children:["Directory: ",N||"Loading..."]})]}),x&&(0,t.jsx)(d,{onClose:()=>y(!1),onConfirmLaunch:()=>{y(!1),U("claude-ssh")}}),b&&(0,t.jsx)(c,{onClose:()=>j(!1),isDocker:v,onConfirmLaunch:(e,t,r)=>{j(!1),U(v?"aider-docker":"aider",e,t,r)}}),w&&(0,t.jsx)(u,{onClose:()=>S(!1),isDocker:k,onConfirmLaunch:(e,t,r)=>{S(!1),U(k?"claude-docker":"claude",e,t,r)}})]})}])},33779,e=>{e.v(t=>Promise.all(["static/chunks/03g6xpslyid3~.js","static/chunks/15_baizhaiq8c.js","static/chunks/0ga14ztvrhau2.css"].map(t=>e.l(t))).then(()=>t(37314)))},39429,e=>{e.v(t=>Promise.all(["static/chunks/16w4~t4h7gk13.js"].map(t=>e.l(t))).then(()=>t(1985)))},56915,e=>{e.v(t=>Promise.all(["static/chunks/0lnobx4eh3~-_.js"].map(t=>e.l(t))).then(()=>t(99026)))},78716,e=>{e.v(t=>Promise.all(["static/chunks/0xhaghhxllgzs.js"].map(t=>e.l(t))).then(()=>t(9949)))},33789,e=>{e.v(t=>Promise.all(["static/chunks/15sigqif_v.mu.js"].map(t=>e.l(t))).then(()=>t(20032)))},78003,e=>{e.v(t=>Promise.all(["static/chunks/0gy2rolwxzjl8.js","static/chunks/15_baizhaiq8c.js","static/chunks/0sr3d9iqny2rf.js","static/chunks/0ga14ztvrhau2.css"].map(t=>e.l(t))).then(()=>t(97722)))}]);
package/.next/trace CHANGED
@@ -1 +1 @@
1
- [{"name":"generate-buildid","duration":289,"timestamp":15887653929,"id":4,"parentId":1,"tags":{},"startTime":1782098854855,"traceId":"f3194e3b8a8014eb"},{"name":"load-custom-routes","duration":354,"timestamp":15887654335,"id":5,"parentId":1,"tags":{},"startTime":1782098854855,"traceId":"f3194e3b8a8014eb"},{"name":"create-dist-dir","duration":839,"timestamp":15887654727,"id":6,"parentId":1,"tags":{},"startTime":1782098854855,"traceId":"f3194e3b8a8014eb"},{"name":"clean","duration":716,"timestamp":15887658946,"id":7,"parentId":1,"tags":{},"startTime":1782098854860,"traceId":"f3194e3b8a8014eb"},{"name":"discover-routes","duration":6632,"timestamp":15887686082,"id":8,"parentId":1,"tags":{},"startTime":1782098854887,"traceId":"f3194e3b8a8014eb"},{"name":"create-root-mapping","duration":66,"timestamp":15887692767,"id":9,"parentId":1,"tags":{},"startTime":1782098854893,"traceId":"f3194e3b8a8014eb"},{"name":"generate-route-types","duration":19104,"timestamp":15887694530,"id":10,"parentId":1,"tags":{},"startTime":1782098854895,"traceId":"f3194e3b8a8014eb"},{"name":"public-dir-conflict-check","duration":128,"timestamp":15887713821,"id":11,"parentId":1,"tags":{},"startTime":1782098854915,"traceId":"f3194e3b8a8014eb"},{"name":"generate-routes-manifest","duration":2718,"timestamp":15887714075,"id":12,"parentId":1,"tags":{},"startTime":1782098854915,"traceId":"f3194e3b8a8014eb"},{"name":"run-turbopack","duration":2687848,"timestamp":15887727011,"id":14,"parentId":1,"tags":{},"startTime":1782098854928,"traceId":"f3194e3b8a8014eb"},{"name":"turbopack-build-events","duration":61,"timestamp":15888089614,"id":15,"parentId":1,"tags":{},"startTime":1782098855290,"traceId":"f3194e3b8a8014eb"},{"name":"run-typescript","duration":4891153,"timestamp":15890430282,"id":16,"parentId":1,"tags":{},"startTime":1782098857631,"traceId":"f3194e3b8a8014eb"},{"name":"generate-required-server-files","duration":1502,"timestamp":15895323235,"id":18,"parentId":1,"tags":{},"startTime":1782098862524,"traceId":"f3194e3b8a8014eb"},{"name":"check-static-error-page","duration":10695,"timestamp":15895474390,"id":20,"parentId":19,"tags":{},"startTime":1782098862675,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":809632,"timestamp":15895491271,"id":44,"parentId":22,"tags":{},"startTime":1782098862692,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":821655,"timestamp":15895479375,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1782098862680,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":962011,"timestamp":15895492098,"id":50,"parentId":28,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":972768,"timestamp":15895481401,"id":28,"parentId":19,"tags":{"page":"/api/git"},"startTime":1782098862682,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":963600,"timestamp":15895490937,"id":43,"parentId":21,"tags":{},"startTime":1782098862692,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":977569,"timestamp":15895477017,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1782098862678,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":977005,"timestamp":15895491661,"id":46,"parentId":24,"tags":{},"startTime":1782098862692,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":988270,"timestamp":15895480469,"id":24,"parentId":19,"tags":{"page":"/api/context/claude"},"startTime":1782098862681,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":977395,"timestamp":15895492686,"id":56,"parentId":34,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":987220,"timestamp":15895482912,"id":34,"parentId":19,"tags":{"page":"/api/sessions/scope"},"startTime":1782098862684,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":988038,"timestamp":15895492494,"id":53,"parentId":31,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":998313,"timestamp":15895482271,"id":31,"parentId":19,"tags":{"page":"/api/sessions/input"},"startTime":1782098862683,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":988318,"timestamp":15895492621,"id":55,"parentId":33,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":998299,"timestamp":15895482684,"id":33,"parentId":19,"tags":{"page":"/api/sessions"},"startTime":1782098862683,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":991274,"timestamp":15895492020,"id":49,"parentId":27,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1002244,"timestamp":15895481100,"id":27,"parentId":19,"tags":{"page":"/api/files"},"startTime":1782098862682,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":992167,"timestamp":15895491801,"id":47,"parentId":25,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1003312,"timestamp":15895480704,"id":25,"parentId":19,"tags":{"page":"/api/context"},"startTime":1782098862681,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1016309,"timestamp":15895493005,"id":60,"parentId":38,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1025284,"timestamp":15895484079,"id":38,"parentId":19,"tags":{"page":"/api/sql/connections"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1017937,"timestamp":15895491527,"id":45,"parentId":23,"tags":{},"startTime":1782098862692,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1029319,"timestamp":15895480171,"id":23,"parentId":19,"tags":{"page":"/api/context/aider"},"startTime":1782098862681,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1017691,"timestamp":15895491871,"id":48,"parentId":26,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1028668,"timestamp":15895480913,"id":26,"parentId":19,"tags":{"page":"/api/context/ssh"},"startTime":1782098862682,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1018994,"timestamp":15895493044,"id":61,"parentId":39,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1027821,"timestamp":15895484269,"id":39,"parentId":19,"tags":{"page":"/api/sql/mcp"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1019584,"timestamp":15895493077,"id":62,"parentId":40,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1028258,"timestamp":15895484435,"id":40,"parentId":19,"tags":{"page":"/api/sql/query"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1020630,"timestamp":15895492181,"id":51,"parentId":29,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1031137,"timestamp":15895481693,"id":29,"parentId":19,"tags":{"page":"/api/recents"},"startTime":1782098862682,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1023500,"timestamp":15895492961,"id":59,"parentId":37,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1032648,"timestamp":15895483859,"id":37,"parentId":19,"tags":{"page":"/api/sessions/stop"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1024405,"timestamp":15895492839,"id":57,"parentId":35,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1034082,"timestamp":15895483216,"id":35,"parentId":19,"tags":{"page":"/api/sessions/start"},"startTime":1782098862684,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1024984,"timestamp":15895492916,"id":58,"parentId":36,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1034306,"timestamp":15895483623,"id":36,"parentId":19,"tags":{"page":"/api/sessions/stats"},"startTime":1782098862684,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1024968,"timestamp":15895493107,"id":63,"parentId":41,"tags":{},"startTime":1782098862694,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1033513,"timestamp":15895484595,"id":41,"parentId":19,"tags":{"page":"/api/sql/schema"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1025806,"timestamp":15895492361,"id":52,"parentId":30,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1036223,"timestamp":15895481957,"id":30,"parentId":19,"tags":{"page":"/api/sessions/inject"},"startTime":1782098862683,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1030634,"timestamp":15895492563,"id":54,"parentId":32,"tags":{},"startTime":1782098862693,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1040760,"timestamp":15895482479,"id":32,"parentId":19,"tags":{"page":"/api/sessions/launch"},"startTime":1782098862683,"traceId":"f3194e3b8a8014eb"},{"name":"is-page-static","duration":1026283,"timestamp":15895497021,"id":64,"parentId":42,"tags":{},"startTime":1782098862698,"traceId":"f3194e3b8a8014eb"},{"name":"check-page","duration":1038567,"timestamp":15895484748,"id":42,"parentId":19,"tags":{"page":"/"},"startTime":1782098862685,"traceId":"f3194e3b8a8014eb"},{"name":"static-check","duration":1049525,"timestamp":15895473813,"id":19,"parentId":1,"tags":{},"startTime":1782098862675,"traceId":"f3194e3b8a8014eb"},{"name":"write-routes-manifest","duration":870,"timestamp":15896524523,"id":66,"parentId":1,"tags":{},"startTime":1782098863725,"traceId":"f3194e3b8a8014eb"},{"name":"load-dotenv","duration":50,"timestamp":15896546193,"id":69,"parentId":68,"tags":{},"startTime":1782098863747,"traceId":"f3194e3b8a8014eb"},{"name":"run-export-path-map","duration":441,"timestamp":15896552270,"id":70,"parentId":68,"tags":{},"startTime":1782098863753,"traceId":"f3194e3b8a8014eb"},{"name":"next-export","duration":832486,"timestamp":15896545248,"id":68,"parentId":1,"tags":{},"startTime":1782098863746,"traceId":"f3194e3b8a8014eb"},{"name":"move-exported-app-not-found-","duration":2156,"timestamp":15897379653,"id":71,"parentId":67,"tags":{},"startTime":1782098864580,"traceId":"f3194e3b8a8014eb"},{"name":"move-exported-app-global-error-","duration":1749,"timestamp":15897381943,"id":72,"parentId":67,"tags":{},"startTime":1782098864583,"traceId":"f3194e3b8a8014eb"},{"name":"static-generation","duration":855737,"timestamp":15896531954,"id":67,"parentId":1,"tags":{},"startTime":1782098863733,"traceId":"f3194e3b8a8014eb"},{"name":"write-routes-manifest","duration":951,"timestamp":15897387812,"id":73,"parentId":1,"tags":{},"startTime":1782098864589,"traceId":"f3194e3b8a8014eb"},{"name":"print-tree-view","duration":2895,"timestamp":15897410621,"id":74,"parentId":1,"tags":{},"startTime":1782098864611,"traceId":"f3194e3b8a8014eb"},{"name":"write-route-bundle-stats","duration":11820,"timestamp":15897413546,"id":75,"parentId":1,"tags":{},"startTime":1782098864614,"traceId":"f3194e3b8a8014eb"},{"name":"telemetry-flush","duration":163593,"timestamp":15897425420,"id":76,"parentId":1,"tags":{},"startTime":1782098864626,"traceId":"f3194e3b8a8014eb"},{"name":"next-build","duration":10009052,"timestamp":15887579991,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1782098854781,"traceId":"f3194e3b8a8014eb"}]
1
+ [{"name":"generate-buildid","duration":294,"timestamp":7381324591,"id":4,"parentId":1,"tags":{},"startTime":1782177483524,"traceId":"1b73121fe494691e"},{"name":"load-custom-routes","duration":338,"timestamp":7381325000,"id":5,"parentId":1,"tags":{},"startTime":1782177483524,"traceId":"1b73121fe494691e"},{"name":"create-dist-dir","duration":604,"timestamp":7381325368,"id":6,"parentId":1,"tags":{},"startTime":1782177483524,"traceId":"1b73121fe494691e"},{"name":"clean","duration":515,"timestamp":7381328848,"id":7,"parentId":1,"tags":{},"startTime":1782177483528,"traceId":"1b73121fe494691e"},{"name":"discover-routes","duration":6285,"timestamp":7381355916,"id":8,"parentId":1,"tags":{},"startTime":1782177483555,"traceId":"1b73121fe494691e"},{"name":"create-root-mapping","duration":59,"timestamp":7381362250,"id":9,"parentId":1,"tags":{},"startTime":1782177483561,"traceId":"1b73121fe494691e"},{"name":"generate-route-types","duration":18765,"timestamp":7381363774,"id":10,"parentId":1,"tags":{},"startTime":1782177483563,"traceId":"1b73121fe494691e"},{"name":"public-dir-conflict-check","duration":143,"timestamp":7381382717,"id":11,"parentId":1,"tags":{},"startTime":1782177483582,"traceId":"1b73121fe494691e"},{"name":"generate-routes-manifest","duration":2866,"timestamp":7381382985,"id":12,"parentId":1,"tags":{},"startTime":1782177483582,"traceId":"1b73121fe494691e"},{"name":"run-turbopack","duration":2889339,"timestamp":7381395198,"id":14,"parentId":1,"tags":{},"startTime":1782177483594,"traceId":"1b73121fe494691e"},{"name":"turbopack-build-events","duration":73,"timestamp":7381816171,"id":15,"parentId":1,"tags":{},"startTime":1782177484015,"traceId":"1b73121fe494691e"},{"name":"run-typescript","duration":5206946,"timestamp":7384300009,"id":16,"parentId":1,"tags":{},"startTime":1782177486499,"traceId":"1b73121fe494691e"},{"name":"generate-required-server-files","duration":1654,"timestamp":7389508877,"id":18,"parentId":1,"tags":{},"startTime":1782177491708,"traceId":"1b73121fe494691e"},{"name":"check-static-error-page","duration":15747,"timestamp":7389674819,"id":20,"parentId":19,"tags":{},"startTime":1782177491874,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":780879,"timestamp":7389705720,"id":47,"parentId":22,"tags":{},"startTime":1782177491905,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":807682,"timestamp":7389679247,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1782177491878,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":971924,"timestamp":7389707188,"id":65,"parentId":40,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":991033,"timestamp":7389688155,"id":40,"parentId":19,"tags":{"page":"/api/sql/connections"},"startTime":1782177491887,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":973783,"timestamp":7389705883,"id":50,"parentId":25,"tags":{},"startTime":1782177491905,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":999002,"timestamp":7389680710,"id":25,"parentId":19,"tags":{"page":"/api/context/claude"},"startTime":1782177491880,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":976182,"timestamp":7389705835,"id":49,"parentId":24,"tags":{},"startTime":1782177491905,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1001883,"timestamp":7389680185,"id":24,"parentId":19,"tags":{"page":"/api/context/aider"},"startTime":1782177491879,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":976341,"timestamp":7389706427,"id":55,"parentId":30,"tags":{},"startTime":1782177491905,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":999872,"timestamp":7389682943,"id":30,"parentId":19,"tags":{"page":"/api/recents"},"startTime":1782177491882,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":978686,"timestamp":7389707147,"id":64,"parentId":39,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":998135,"timestamp":7389687757,"id":39,"parentId":19,"tags":{"page":"/api/sessions/upload-image"},"startTime":1782177491887,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":986735,"timestamp":7389705490,"id":46,"parentId":21,"tags":{},"startTime":1782177491905,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1015261,"timestamp":7389677025,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1782177491876,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":992899,"timestamp":7389705786,"id":48,"parentId":23,"tags":{},"startTime":1782177491905,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1018800,"timestamp":7389679938,"id":23,"parentId":19,"tags":{"page":"/api/configs"},"startTime":1782177491879,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":993752,"timestamp":7389705995,"id":52,"parentId":27,"tags":{},"startTime":1782177491905,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1018359,"timestamp":7389681450,"id":27,"parentId":19,"tags":{"page":"/api/context/ssh"},"startTime":1782177491880,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":995116,"timestamp":7389707231,"id":66,"parentId":41,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1013875,"timestamp":7389688527,"id":41,"parentId":19,"tags":{"page":"/api/sql/mcp"},"startTime":1782177491888,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1004375,"timestamp":7389707019,"id":61,"parentId":36,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1025097,"timestamp":7389686351,"id":36,"parentId":19,"tags":{"page":"/api/sessions/start"},"startTime":1782177491885,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1006404,"timestamp":7389705927,"id":51,"parentId":26,"tags":{},"startTime":1782177491905,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1031423,"timestamp":7389680947,"id":26,"parentId":19,"tags":{"page":"/api/context"},"startTime":1782177491880,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1005443,"timestamp":7389707309,"id":68,"parentId":43,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1023521,"timestamp":7389689252,"id":43,"parentId":19,"tags":{"page":"/api/sql/schema"},"startTime":1782177491888,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1010619,"timestamp":7389707270,"id":67,"parentId":42,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1029048,"timestamp":7389688893,"id":42,"parentId":19,"tags":{"page":"/api/sql/query"},"startTime":1782177491888,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1011950,"timestamp":7389706782,"id":57,"parentId":32,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1034894,"timestamp":7389683886,"id":32,"parentId":19,"tags":{"page":"/api/sessions/input"},"startTime":1782177491883,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1014806,"timestamp":7389706208,"id":53,"parentId":28,"tags":{},"startTime":1782177491905,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1039119,"timestamp":7389681936,"id":28,"parentId":19,"tags":{"page":"/api/files"},"startTime":1782177491881,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1016660,"timestamp":7389706866,"id":58,"parentId":33,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1039172,"timestamp":7389684423,"id":33,"parentId":19,"tags":{"page":"/api/sessions/launch"},"startTime":1782177491883,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1017745,"timestamp":7389706323,"id":54,"parentId":29,"tags":{},"startTime":1782177491905,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1041647,"timestamp":7389682465,"id":29,"parentId":19,"tags":{"page":"/api/git"},"startTime":1782177491881,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1017732,"timestamp":7389706979,"id":60,"parentId":35,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1039132,"timestamp":7389685611,"id":35,"parentId":19,"tags":{"page":"/api/sessions/scope"},"startTime":1782177491885,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1018927,"timestamp":7389706931,"id":59,"parentId":34,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1040934,"timestamp":7389684955,"id":34,"parentId":19,"tags":{"page":"/api/sessions"},"startTime":1782177491884,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1030474,"timestamp":7389707061,"id":62,"parentId":37,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1050727,"timestamp":7389686850,"id":37,"parentId":19,"tags":{"page":"/api/sessions/stats"},"startTime":1782177491886,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1032039,"timestamp":7389707107,"id":63,"parentId":38,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1051862,"timestamp":7389687324,"id":38,"parentId":19,"tags":{"page":"/api/sessions/stop"},"startTime":1782177491886,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1033600,"timestamp":7389706545,"id":56,"parentId":31,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1056811,"timestamp":7389683382,"id":31,"parentId":19,"tags":{"page":"/api/sessions/inject"},"startTime":1782177491882,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1037612,"timestamp":7389707346,"id":69,"parentId":44,"tags":{},"startTime":1782177491906,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1055284,"timestamp":7389689714,"id":44,"parentId":19,"tags":{"page":"/api/telemetry"},"startTime":1782177491889,"traceId":"1b73121fe494691e"},{"name":"is-page-static","duration":1061538,"timestamp":7389711173,"id":70,"parentId":45,"tags":{},"startTime":1782177491910,"traceId":"1b73121fe494691e"},{"name":"check-page","duration":1082817,"timestamp":7389689936,"id":45,"parentId":19,"tags":{"page":"/"},"startTime":1782177491889,"traceId":"1b73121fe494691e"},{"name":"static-check","duration":1098404,"timestamp":7389674375,"id":19,"parentId":1,"tags":{},"startTime":1782177491873,"traceId":"1b73121fe494691e"},{"name":"write-routes-manifest","duration":874,"timestamp":7390773991,"id":72,"parentId":1,"tags":{},"startTime":1782177492973,"traceId":"1b73121fe494691e"},{"name":"load-dotenv","duration":42,"timestamp":7390794259,"id":75,"parentId":74,"tags":{},"startTime":1782177492993,"traceId":"1b73121fe494691e"},{"name":"run-export-path-map","duration":497,"timestamp":7390800257,"id":76,"parentId":74,"tags":{},"startTime":1782177492999,"traceId":"1b73121fe494691e"},{"name":"next-export","duration":836160,"timestamp":7390793316,"id":74,"parentId":1,"tags":{},"startTime":1782177492992,"traceId":"1b73121fe494691e"},{"name":"move-exported-app-not-found-","duration":2119,"timestamp":7391631111,"id":77,"parentId":73,"tags":{},"startTime":1782177493830,"traceId":"1b73121fe494691e"},{"name":"move-exported-app-global-error-","duration":1622,"timestamp":7391633366,"id":78,"parentId":73,"tags":{},"startTime":1782177493832,"traceId":"1b73121fe494691e"},{"name":"static-generation","duration":857720,"timestamp":7390780823,"id":73,"parentId":1,"tags":{},"startTime":1782177492980,"traceId":"1b73121fe494691e"},{"name":"write-routes-manifest","duration":836,"timestamp":7391638665,"id":79,"parentId":1,"tags":{},"startTime":1782177493838,"traceId":"1b73121fe494691e"},{"name":"print-tree-view","duration":4125,"timestamp":7391659840,"id":80,"parentId":1,"tags":{},"startTime":1782177493859,"traceId":"1b73121fe494691e"},{"name":"write-route-bundle-stats","duration":14185,"timestamp":7391664006,"id":81,"parentId":1,"tags":{},"startTime":1782177493863,"traceId":"1b73121fe494691e"},{"name":"telemetry-flush","duration":159851,"timestamp":7391678222,"id":82,"parentId":1,"tags":{},"startTime":1782177493877,"traceId":"1b73121fe494691e"},{"name":"next-build","duration":10565934,"timestamp":7381272165,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1782177483471,"traceId":"1b73121fe494691e"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":2687848,"timestamp":15887727011,"id":14,"parentId":1,"tags":{},"startTime":1782098854928,"traceId":"f3194e3b8a8014eb"},{"name":"turbopack-build-events","duration":61,"timestamp":15888089614,"id":15,"parentId":1,"tags":{},"startTime":1782098855290,"traceId":"f3194e3b8a8014eb"},{"name":"run-typescript","duration":4891153,"timestamp":15890430282,"id":16,"parentId":1,"tags":{},"startTime":1782098857631,"traceId":"f3194e3b8a8014eb"},{"name":"static-check","duration":1049525,"timestamp":15895473813,"id":19,"parentId":1,"tags":{},"startTime":1782098862675,"traceId":"f3194e3b8a8014eb"},{"name":"static-generation","duration":855737,"timestamp":15896531954,"id":67,"parentId":1,"tags":{},"startTime":1782098863733,"traceId":"f3194e3b8a8014eb"},{"name":"telemetry-flush","duration":163593,"timestamp":15897425420,"id":76,"parentId":1,"tags":{},"startTime":1782098864626,"traceId":"f3194e3b8a8014eb"},{"name":"next-build","duration":10009052,"timestamp":15887579991,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1782098854781,"traceId":"f3194e3b8a8014eb"}]
1
+ [{"name":"run-turbopack","duration":2889339,"timestamp":7381395198,"id":14,"parentId":1,"tags":{},"startTime":1782177483594,"traceId":"1b73121fe494691e"},{"name":"turbopack-build-events","duration":73,"timestamp":7381816171,"id":15,"parentId":1,"tags":{},"startTime":1782177484015,"traceId":"1b73121fe494691e"},{"name":"run-typescript","duration":5206946,"timestamp":7384300009,"id":16,"parentId":1,"tags":{},"startTime":1782177486499,"traceId":"1b73121fe494691e"},{"name":"static-check","duration":1098404,"timestamp":7389674375,"id":19,"parentId":1,"tags":{},"startTime":1782177491873,"traceId":"1b73121fe494691e"},{"name":"static-generation","duration":857720,"timestamp":7390780823,"id":73,"parentId":1,"tags":{},"startTime":1782177492980,"traceId":"1b73121fe494691e"},{"name":"telemetry-flush","duration":159851,"timestamp":7391678222,"id":82,"parentId":1,"tags":{},"startTime":1782177493877,"traceId":"1b73121fe494691e"},{"name":"next-build","duration":10565934,"timestamp":7381272165,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1782177483471,"traceId":"1b73121fe494691e"}]
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/"
5
- type AppRouteHandlerRoutes = "/api/context" | "/api/context/aider" | "/api/context/claude" | "/api/context/ssh" | "/api/files" | "/api/git" | "/api/recents" | "/api/sessions" | "/api/sessions/inject" | "/api/sessions/input" | "/api/sessions/launch" | "/api/sessions/scope" | "/api/sessions/start" | "/api/sessions/stats" | "/api/sessions/stop" | "/api/sql/connections" | "/api/sql/mcp" | "/api/sql/query" | "/api/sql/schema"
5
+ type AppRouteHandlerRoutes = "/api/configs" | "/api/context" | "/api/context/aider" | "/api/context/claude" | "/api/context/ssh" | "/api/files" | "/api/git" | "/api/recents" | "/api/sessions" | "/api/sessions/inject" | "/api/sessions/input" | "/api/sessions/launch" | "/api/sessions/scope" | "/api/sessions/start" | "/api/sessions/stats" | "/api/sessions/stop" | "/api/sessions/upload-image" | "/api/sql/connections" | "/api/sql/mcp" | "/api/sql/query" | "/api/sql/schema" | "/api/telemetry"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -12,6 +12,7 @@ type Routes = AppRoutes | PageRoutes | LayoutRoutes | RedirectRoutes | RewriteRo
12
12
 
13
13
  interface ParamMap {
14
14
  "/": {}
15
+ "/api/configs": {}
15
16
  "/api/context": {}
16
17
  "/api/context/aider": {}
17
18
  "/api/context/claude": {}
@@ -27,10 +28,12 @@ interface ParamMap {
27
28
  "/api/sessions/start": {}
28
29
  "/api/sessions/stats": {}
29
30
  "/api/sessions/stop": {}
31
+ "/api/sessions/upload-image": {}
30
32
  "/api/sql/connections": {}
31
33
  "/api/sql/mcp": {}
32
34
  "/api/sql/query": {}
33
35
  "/api/sql/schema": {}
36
+ "/api/telemetry": {}
34
37
  }
35
38
 
36
39
 
@@ -56,6 +56,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
56
56
  type __Unused = __Check
57
57
  }
58
58
 
59
+ // Validate ../../src/app/api/configs/route.ts
60
+ {
61
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/configs">> = Specific
62
+ const handler = {} as typeof import("../../src/app/api/configs/route.js")
63
+ type __Check = __IsExpected<typeof handler>
64
+ // @ts-ignore
65
+ type __Unused = __Check
66
+ }
67
+
59
68
  // Validate ../../src/app/api/context/aider/route.ts
60
69
  {
61
70
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/context/aider">> = Specific
@@ -191,6 +200,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
191
200
  type __Unused = __Check
192
201
  }
193
202
 
203
+ // Validate ../../src/app/api/sessions/upload-image/route.ts
204
+ {
205
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/sessions/upload-image">> = Specific
206
+ const handler = {} as typeof import("../../src/app/api/sessions/upload-image/route.js")
207
+ type __Check = __IsExpected<typeof handler>
208
+ // @ts-ignore
209
+ type __Unused = __Check
210
+ }
211
+
194
212
  // Validate ../../src/app/api/sql/connections/route.ts
195
213
  {
196
214
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/sql/connections">> = Specific
@@ -227,6 +245,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
227
245
  type __Unused = __Check
228
246
  }
229
247
 
248
+ // Validate ../../src/app/api/telemetry/route.ts
249
+ {
250
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/telemetry">> = Specific
251
+ const handler = {} as typeof import("../../src/app/api/telemetry/route.js")
252
+ type __Check = __IsExpected<typeof handler>
253
+ // @ts-ignore
254
+ type __Unused = __Check
255
+ }
256
+
230
257
 
231
258
 
232
259
 
package/bin/cli.js CHANGED
@@ -12,7 +12,7 @@ if (process.argv[2] === 'mcp') {
12
12
  wsRoot = path.resolve(wsRoot).replace(/\\/g, '/');
13
13
 
14
14
  console.error(`[NeuralLoom MCP Bridge] Workspace context: ${wsRoot}`);
15
- console.error(`[NeuralLoom MCP Bridge] Connecting to Next.js server on http://localhost:3000...`);
15
+ console.error(`[NeuralLoom MCP Bridge] Connecting to Next.js server on http://localhost:${process.env.PORT || 9600}...`);
16
16
 
17
17
  const rl = readline.createInterface({
18
18
  input: process.stdin,
@@ -39,7 +39,7 @@ if (process.argv[2] === 'mcp') {
39
39
  const payload = JSON.stringify(requestObj);
40
40
  const options = {
41
41
  hostname: 'localhost',
42
- port: 3000,
42
+ port: parseInt(process.env.PORT || '9600', 10),
43
43
  path: '/api/sql/mcp',
44
44
  method: 'POST',
45
45
  headers: {
@@ -141,9 +141,9 @@ process.chdir(packageRoot);
141
141
  const nextBin = require.resolve('next/dist/bin/next');
142
142
 
143
143
  console.log("🚀 Starting NeuralLoom AI Orchestrator dashboard...");
144
- console.log("🔗 Open http://localhost:3000 in your browser to begin.");
144
+ console.log(`🔗 Open http://localhost:${process.env.PORT || 9600} in your browser to begin.`);
145
145
 
146
- const nextProcess = spawn(process.execPath, [nextBin, 'start', '-p', '3000'], {
146
+ const nextProcess = spawn(process.execPath, [nextBin, 'start', '-p', process.env.PORT || '9600'], {
147
147
  stdio: 'inherit',
148
148
  env: {
149
149
  ...process.env,
@@ -0,0 +1,50 @@
1
+ #!/bin/bash
2
+
3
+ # This script fixes taskbar stacking issues for the NeuralLoom Chrome PWA on Ubuntu/Debian.
4
+ # It aligns StartupWMClass in the PWA desktop entry to match the window class.
5
+
6
+ DESKTOP_DIR="$HOME/.local/share/applications"
7
+ if [ ! -d "$DESKTOP_DIR" ]; then
8
+ echo "Error: Application shortcut directory not found at $DESKTOP_DIR"
9
+ exit 1
10
+ fi
11
+
12
+ # Find all chrome-chrome-*.desktop files that contain 'NeuralLoom'
13
+ DE_FILES=$(grep -l -i "NeuralLoom" "$DESKTOP_DIR"/chrome-*.desktop 2>/dev/null)
14
+
15
+ if [ -z "$DE_FILES" ]; then
16
+ echo "Could not find any NeuralLoom Chrome PWA shortcut (.desktop) in $DESKTOP_DIR."
17
+ echo "Please make sure you have installed the NeuralLoom PWA via Google Chrome first."
18
+ exit 1
19
+ fi
20
+
21
+ for de_file in $DE_FILES; do
22
+ echo "Found NeuralLoom PWA desktop shortcut: $(basename "$de_file")"
23
+
24
+ # Extract App ID from the Exec line (chrome --app-id=...)
25
+ APP_ID=$(grep -oP '(?<=--app-id=)[a-z0-9]+' "$de_file")
26
+
27
+ if [ -z "$APP_ID" ]; then
28
+ echo " Error: Could not extract PWA App ID from execution command."
29
+ continue
30
+ fi
31
+
32
+ WM_CLASS="crx_$APP_ID"
33
+ echo " Extracted App ID: $APP_ID"
34
+ echo " Target StartupWMClass: $WM_CLASS"
35
+
36
+ # Remove existing StartupWMClass entries
37
+ sed -i '/^StartupWMClass=/d' "$de_file"
38
+
39
+ # Append new entry
40
+ echo "StartupWMClass=$WM_CLASS" >> "$de_file"
41
+ echo " Updated $de_file successfully."
42
+ done
43
+
44
+ # Restart the desktop shell runner / database to reload desktop entries
45
+ if command -v update-desktop-database &> /dev/null; then
46
+ update-desktop-database "$DESKTOP_DIR"
47
+ echo "Desktop entry database updated."
48
+ fi
49
+
50
+ echo "PWA Stacking fix completed successfully. Please restart your NeuralLoom app from the application menu."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neural-loom",
3
- "version": "0.2.60",
3
+ "version": "0.2.62",
4
4
  "bin": {
5
5
  "neural-loom": "./bin/cli.js"
6
6
  },
@@ -0,0 +1,40 @@
1
+ import { NextResponse } from "next/server";
2
+ import { SessionConfigManager } from "@/lib/agents/SessionConfig";
3
+
4
+ export async function GET() {
5
+ try {
6
+ const configs = SessionConfigManager.loadAllConfigs();
7
+ return NextResponse.json({ success: true, configs });
8
+ } catch (error) {
9
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
10
+ return NextResponse.json({ error: errorMessage }, { status: 500 });
11
+ }
12
+ }
13
+
14
+ export async function POST(request: Request) {
15
+ try {
16
+ const body = await request.json();
17
+ const { action, config, id } = body;
18
+
19
+ if (action === "save") {
20
+ if (!config || !config.name || !config.type) {
21
+ return NextResponse.json({ error: "Missing config, name, or type." }, { status: 400 });
22
+ }
23
+ const saved = SessionConfigManager.saveConfig(config);
24
+ return NextResponse.json({ success: true, config: saved });
25
+ }
26
+
27
+ if (action === "delete") {
28
+ if (!id) {
29
+ return NextResponse.json({ error: "Missing config ID." }, { status: 400 });
30
+ }
31
+ const success = SessionConfigManager.deleteConfig(id);
32
+ return NextResponse.json({ success });
33
+ }
34
+
35
+ return NextResponse.json({ error: "Invalid action." }, { status: 400 });
36
+ } catch (error) {
37
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
38
+ return NextResponse.json({ error: errorMessage }, { status: 500 });
39
+ }
40
+ }
@@ -5,15 +5,15 @@ import { addRecent, saveLastSession } from "@/lib/recents";
5
5
  export async function POST(request: Request) {
6
6
  try {
7
7
  const body = await request.json();
8
- const { type, name, workspaceRoot, scopedDirs } = body;
8
+ const { type, name, workspaceRoot, scopedDirs, parentSessionId } = body;
9
9
 
10
- const allowed = ['mock', 'claude', 'claude-docker', 'claude-ssh', 'aider', 'aider-docker'];
10
+ const allowed = ['mock', 'claude', 'claude-docker', 'claude-ssh', 'aider', 'aider-docker', 'shell'];
11
11
  if (!type || !allowed.includes(type)) {
12
12
  return NextResponse.json({ error: `Invalid type. Must be one of: ${allowed.join(', ')}` }, { status: 400 });
13
13
  }
14
14
 
15
15
  const manager = SessionManager.getInstance();
16
- const session = await manager.createSession(type, name, workspaceRoot, scopedDirs);
16
+ const session = await manager.createSession(type, name, workspaceRoot, scopedDirs, parentSessionId);
17
17
 
18
18
  // Save session config to recents
19
19
  saveLastSession({ type, name, workspaceRoot, scopedDirs });
@@ -20,14 +20,14 @@ export async function GET(request: Request) {
20
20
  return NextResponse.json({
21
21
  ...session.getStatus(),
22
22
  logs: session.logs,
23
- wsPort: global.wsPort || 3001,
23
+ wsPort: global.wsPort || 9601,
24
24
  version: pkg.version,
25
25
  });
26
26
  }
27
27
 
28
28
  const sessions = manager.listSessions();
29
29
  const originalCwd = process.env.ORIGINAL_CWD || process.cwd();
30
- const wsPort = global.wsPort || 3001;
30
+ const wsPort = global.wsPort || 9601;
31
31
  return NextResponse.json({ sessions, originalCwd, wsPort, version: pkg.version });
32
32
  } catch (error) {
33
33
  const errorMessage = error instanceof Error ? error.message : "Unknown error";
@@ -4,14 +4,14 @@ import { SessionManager } from "@/lib/agents/SessionManager";
4
4
  export async function POST(request: Request) {
5
5
  try {
6
6
  const body = await request.json();
7
- const { id } = body;
7
+ const { id, resume } = body;
8
8
 
9
9
  if (!id) {
10
10
  return NextResponse.json({ error: "Missing required field 'id'." }, { status: 400 });
11
11
  }
12
12
 
13
13
  const manager = SessionManager.getInstance();
14
- const success = await manager.startSession(id);
14
+ const success = await manager.startSession(id, resume);
15
15
  return NextResponse.json({ success });
16
16
  } catch (error) {
17
17
  const errorMessage = error instanceof Error ? error.message : "Unknown error";