neural-loom 0.2.47 → 0.2.49

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 (126) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -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 +1 -1
  8. package/.next/fallback-build-manifest.json +3 -3
  9. package/.next/prerender-manifest.json +3 -3
  10. package/.next/routes-manifest.json +24 -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 +2 -2
  20. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  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/context/aider/route.js.nft.json +1 -1
  27. package/.next/server/app/api/context/claude/route.js.nft.json +1 -1
  28. package/.next/server/app/api/context/route.js.nft.json +1 -1
  29. package/.next/server/app/api/context/ssh/route.js.nft.json +1 -1
  30. package/.next/server/app/api/recents/route.js.nft.json +1 -1
  31. package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
  32. package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
  33. package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
  34. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  35. package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
  36. package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
  37. package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
  38. package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
  39. package/.next/server/app/api/sql/connections/route/app-paths-manifest.json +3 -0
  40. package/.next/server/app/api/sql/connections/route/build-manifest.json +9 -0
  41. package/.next/server/app/api/sql/connections/route/server-reference-manifest.json +4 -0
  42. package/.next/server/app/api/sql/connections/route.js +6 -0
  43. package/.next/server/app/api/sql/connections/route.js.map +5 -0
  44. package/.next/server/app/api/sql/connections/route.js.nft.json +1 -0
  45. package/.next/server/app/api/sql/connections/route_client-reference-manifest.js +3 -0
  46. package/.next/server/app/api/sql/mcp/route/app-paths-manifest.json +3 -0
  47. package/.next/server/app/api/sql/mcp/route/build-manifest.json +9 -0
  48. package/.next/server/app/api/sql/mcp/route/server-reference-manifest.json +4 -0
  49. package/.next/server/app/api/sql/mcp/route.js +6 -0
  50. package/.next/server/app/api/sql/mcp/route.js.map +5 -0
  51. package/.next/server/app/api/sql/mcp/route.js.nft.json +1 -0
  52. package/.next/server/app/api/sql/mcp/route_client-reference-manifest.js +3 -0
  53. package/.next/server/app/api/sql/query/route/app-paths-manifest.json +3 -0
  54. package/.next/server/app/api/sql/query/route/build-manifest.json +9 -0
  55. package/.next/server/app/api/sql/query/route/server-reference-manifest.json +4 -0
  56. package/.next/server/app/api/sql/query/route.js +6 -0
  57. package/.next/server/app/api/sql/query/route.js.map +5 -0
  58. package/.next/server/app/api/sql/query/route.js.nft.json +1 -0
  59. package/.next/server/app/api/sql/query/route_client-reference-manifest.js +3 -0
  60. package/.next/server/app/api/sql/schema/route/app-paths-manifest.json +3 -0
  61. package/.next/server/app/api/sql/schema/route/build-manifest.json +9 -0
  62. package/.next/server/app/api/sql/schema/route/server-reference-manifest.json +4 -0
  63. package/.next/server/app/api/sql/schema/route.js +6 -0
  64. package/.next/server/app/api/sql/schema/route.js.map +5 -0
  65. package/.next/server/app/api/sql/schema/route.js.nft.json +1 -0
  66. package/.next/server/app/api/sql/schema/route_client-reference-manifest.js +3 -0
  67. package/.next/server/app/index.html +1 -1
  68. package/.next/server/app/index.rsc +3 -3
  69. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  70. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  71. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  72. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  73. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  74. package/.next/server/app/page/react-loadable-manifest.json +1 -1
  75. package/.next/server/app/page_client-reference-manifest.js +1 -1
  76. package/.next/server/app-paths-manifest.json +4 -0
  77. package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js +86 -0
  78. package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js.map +1 -0
  79. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js +74 -0
  80. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js.map +1 -0
  81. package/.next/server/chunks/[root-of-the-server]__06men8g._.js +74 -0
  82. package/.next/server/chunks/[root-of-the-server]__06men8g._.js.map +1 -0
  83. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js +1 -1
  84. package/.next/server/chunks/[root-of-the-server]__0_o7_jj._.js.map +1 -1
  85. package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js +74 -0
  86. package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js.map +1 -0
  87. package/.next/server/chunks/_next-internal_server_app_api_sql_connections_route_actions_11cib8~.js +3 -0
  88. package/.next/server/chunks/_next-internal_server_app_api_sql_connections_route_actions_11cib8~.js.map +1 -0
  89. package/.next/server/chunks/_next-internal_server_app_api_sql_mcp_route_actions_0wihfps.js +3 -0
  90. package/.next/server/chunks/_next-internal_server_app_api_sql_mcp_route_actions_0wihfps.js.map +1 -0
  91. package/.next/server/chunks/_next-internal_server_app_api_sql_query_route_actions_11x3q3c.js +3 -0
  92. package/.next/server/chunks/_next-internal_server_app_api_sql_query_route_actions_11x3q3c.js.map +1 -0
  93. package/.next/server/chunks/_next-internal_server_app_api_sql_schema_route_actions_015okwb.js +3 -0
  94. package/.next/server/chunks/_next-internal_server_app_api_sql_schema_route_actions_015okwb.js.map +1 -0
  95. package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js +1 -1
  96. package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js.map +1 -1
  97. package/.next/server/middleware-build-manifest.js +3 -3
  98. package/.next/server/pages/404.html +1 -1
  99. package/.next/server/pages/500.html +1 -1
  100. package/.next/server/server-reference-manifest.js +1 -1
  101. package/.next/server/server-reference-manifest.json +1 -1
  102. package/.next/static/chunks/03f4bqk_d65hs.js +6 -0
  103. package/.next/static/chunks/{15zf~gqr_i8s1.js → 0~6gm~u8rgtpd.js} +1 -1
  104. package/.next/trace +1 -1
  105. package/.next/trace-build +1 -1
  106. package/.next/types/routes.d.ts +5 -1
  107. package/.next/types/validator.ts +36 -0
  108. package/bin/cli.js +76 -0
  109. package/package.json +2 -2
  110. package/src/app/api/sql/connections/route.ts +60 -0
  111. package/src/app/api/sql/mcp/route.ts +27 -0
  112. package/src/app/api/sql/query/route.ts +56 -0
  113. package/src/app/api/sql/schema/route.ts +42 -0
  114. package/src/app/components/DbExplorer.tsx +1279 -0
  115. package/src/app/components/IdeLayout.tsx +27 -1
  116. package/src/app/layout.tsx +1 -0
  117. package/src/lib/sql/ConnectionManager.ts +207 -0
  118. package/src/lib/sql/DbAdapter.ts +62 -0
  119. package/src/lib/sql/McpServer.ts +278 -0
  120. package/src/lib/sql/adapters/MysqlAdapter.ts +120 -0
  121. package/src/lib/sql/adapters/PostgresAdapter.ts +139 -0
  122. package/src/lib/sql/adapters/SqliteAdapter.ts +111 -0
  123. package/.next/static/chunks/0bclk7hf35ac4.js +0 -1
  124. /package/.next/static/{kPeXDg1G9iPLf0aCjKTXh → BoncS4SNz6CDpSdR8oY-K}/_buildManifest.js +0 -0
  125. /package/.next/static/{kPeXDg1G9iPLf0aCjKTXh → BoncS4SNz6CDpSdR8oY-K}/_clientMiddlewareManifest.js +0 -0
  126. /package/.next/static/{kPeXDg1G9iPLf0aCjKTXh → BoncS4SNz6CDpSdR8oY-K}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,67585,(e,a,s)=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"BailoutToCSR",{enumerable:!0,get:function(){return n}});let t=e.r(32061);function n({reason:e,children:a}){if("u"<typeof window)throw Object.defineProperty(new t.BailoutToCSRError(e),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return a}},9885,(e,a,s)=>{"use strict";function t(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"encodeURIPath",{enumerable:!0,get:function(){return t}})},52157,(e,a,s)=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"PreloadChunks",{enumerable:!0,get:function(){return i}});let t=e.r(43476),n=e.r(74080),r=e.r(63599),l=e.r(9885),o=e.r(43369);function i({moduleIds:e}){if("u">typeof window)return null;let a=r.workAsyncStorage.getStore();if(void 0===a)return null;let s=[];if(a.reactLoadableManifest&&e){let t=a.reactLoadableManifest;for(let a of e){if(!t[a])continue;let e=t[a].files;s.push(...e)}}if(0===s.length)return null;let d=(0,o.getAssetTokenQuery)();return(0,t.jsx)(t.Fragment,{children:s.map(e=>{let s=`${a.assetPrefix}/_next/${(0,l.encodeURIPath)(e)}${d}`;return e.endsWith(".css")?(0,t.jsx)("link",{precedence:"dynamic",href:s,rel:"stylesheet",as:"style",nonce:a.nonce},e):((0,n.preload)(s,{as:"script",fetchPriority:"low",nonce:a.nonce}),null)})})}},69093,(e,a,s)=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d}});let t=e.r(43476),n=e.r(71645),r=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 a={...i,...e},s=(0,n.lazy)(()=>a.loader().then(o)),d=a.loading;function c(e){let o=d?(0,t.jsx)(d,{isLoading:!0,pastDelay:!0,error:null}):null,i=!a.ssr||!!a.loading,c=i?n.Suspense:n.Fragment,u=a.ssr?(0,t.jsxs)(t.Fragment,{children:["u"<typeof window?(0,t.jsx)(l.PreloadChunks,{moduleIds:a.modules}):null,(0,t.jsx)(s,{...e})]}):(0,t.jsx)(r.BailoutToCSR,{reason:"next/dynamic",children:(0,t.jsx)(s,{...e})});return(0,t.jsx)(c,{...i?{fallback:o}:{},children:u})}return c.displayName="LoadableComponent",c}},70703,(e,a,s)=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return n}});let t=e.r(55682)._(e.r(69093));function n(e,a){let s={};"function"==typeof e&&(s.loader=e);let n={...s,...a};return(0,t.default)({...n,modules:n.loadableGenerated?.modules})}("function"==typeof s.default||"object"==typeof s.default&&null!==s.default)&&void 0===s.default.__esModule&&(Object.defineProperty(s.default,"__esModule",{value:!0}),Object.assign(s.default,s),a.exports=s.default)},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",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",pulseDot:"page-module___8aEwW__pulseDot",quickLaunchBtn:"page-module___8aEwW__quickLaunchBtn",sectionTitle:"page-module___8aEwW__sectionTitle",sidePanel:"page-module___8aEwW__sidePanel",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 a=e.i(43476),s=e.i(71645),t=e.i(70703),n=e.i(20897);let r=(0,t.default)(()=>e.A(33779),{loadableGenerated:{modules:[37314]},ssr:!1,loading:()=>(0,a.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,a.jsx)("span",{children:"Initializing terminal emulator..."})})}),l=(0,t.default)(()=>e.A(39429),{loadableGenerated:{modules:[1985]},ssr:!1,loading:()=>(0,a.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,a.jsx)("span",{style:{color:"var(--muted)"},children:"Initializing prompt editor..."})})}),o=(0,t.default)(()=>e.A(56915),{loadableGenerated:{modules:[99026]},ssr:!1}),i=(0,t.default)(()=>e.A(78716),{loadableGenerated:{modules:[9949]},ssr:!1}),d=(0,t.default)(()=>e.A(33789),{loadableGenerated:{modules:[20032]},ssr:!1}),c=(0,t.default)(()=>e.A(78003),{loadableGenerated:{modules:[97722]},ssr:!1});e.s(["default",0,function(){let[e,t]=(0,s.useState)([]),[u,p]=(0,s.useState)(null),[m,h]=(0,s.useState)(!1),[f,_]=(0,s.useState)(!1),[g,x]=(0,s.useState)(!1),[j,y]=(0,s.useState)(!1),[b,v]=(0,s.useState)(!1),[k,w]=(0,s.useState)(!1),[C,S]=(0,s.useState)(""),[N,W]=(0,s.useState)(3001),[P,E]=(0,s.useState)("0.2.19"),[T,L]=(0,s.useState)(null),R=e.filter(e=>"workspace-terminal"!==e.id),A=e.find(e=>e.id===u),D=R.some(e=>("claude-docker"===e.type||"aider-docker"===e.type)&&"running"===e.status),B=R.some(e=>"claude-ssh"===e.type&&"running"===e.status),I=async()=>{try{let e=await fetch("/api/sessions"),a=await e.json();a.sessions&&t(a.sessions),a.wsPort&&W(a.wsPort),a.originalCwd&&S(a.originalCwd),a.version&&E(a.version)}catch(e){console.error("Failed to fetch sessions:",e)}},O=async()=>{try{let e=await fetch("/api/recents");if(e.ok){let a=await e.json();a.success&&a.recents&&a.recents.lastSession&&L(a.recents.lastSession)}}catch(e){console.error("Failed to fetch recents:",e)}};(0,s.useEffect)(()=>{(async()=>{await I(),await O()})(),"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(I,4e3);return()=>clearInterval(e)},[]);let z=async(e,a,s,t)=>{h(!0);try{let n=a;n||("claude"===e?n="Claude Local":"claude-docker"===e?n="Claude Docker":"claude-ssh"===e?n="Claude SSH":"aider"===e?n="Aider Local":"aider-docker"===e?n="Aider Docker":"mock"===e&&(n="Mock Session"));let r={type:e,name:n,workspaceRoot:s,scopedDirs:t};if(("aider"===e||"aider-docker"===e)&&!s)try{let e=await fetch("/api/context/aider");if(e.ok){let a=await e.json();a.success&&a.config&&(r.workspaceRoot=a.config.workspaceRoot,r.scopedDirs=a.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(r)}),o=await l.json();o.success&&(await I(),p(o.session.id),L({type:e,name:n,workspaceRoot:s,scopedDirs:t}))}catch(e){console.error("Failed to launch session:",e)}finally{h(!1)}},M=async(e,a=!1)=>{try{let s=await fetch("/api/sessions/stop",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e,delete:a})});(await s.json()).success&&(a&&u===e&&p(null),await I())}catch(e){console.error("Failed to stop session:",e)}};return(0,a.jsxs)("div",{className:`${n.default.container} ${A?n.default.containerActive:""}`,children:[(0,a.jsxs)("header",{className:n.default.header,children:[(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"1.5rem"},children:[(0,a.jsx)("img",{src:"/logo.png",alt:"NeuralLoom Logo",style:{width:"160px",height:"160px",borderRadius:"16px",objectFit:"contain"}}),(0,a.jsxs)("div",{className:n.default.logoArea,children:[(0,a.jsx)("h1",{className:n.default.title,style:{margin:0,lineHeight:1.1},children:"NeuralLoom"}),(0,a.jsx)("span",{className:n.default.subtitle,children:"Unified AI Orchestrator & Context Bridge"})]})]}),(0,a.jsxs)("div",{className:n.default.statusIndicator,children:[(0,a.jsx)("span",{className:n.default.pulseDot}),(0,a.jsx)("span",{children:"Orchestrator Online"})]})]}),A?(0,a.jsx)("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:(0,a.jsx)(c,{sessionId:A.id,workspaceRoot:A.workspaceRoot||"",scopedDirs:A.scopedDirs||[],onClose:()=>p(null),sessions:e,onSwitchSession:e=>p(e),onRefreshSessions:I,wsPort:N})}):(0,a.jsxs)("div",{className:n.default.dashboardGrid,children:[(0,a.jsxs)("main",{className:n.default.mainPanel,children:[(0,a.jsxs)("section",{children:[(0,a.jsx)("h2",{className:n.default.sectionTitle,children:"Active AI Agents"}),0===R.length?(0,a.jsxs)("div",{className:"card",style:{padding:"3rem 1.5rem",textAlign:"center"},children:[(0,a.jsx)("p",{style:{color:"var(--muted)",marginBottom:"1.5rem"},children:"No active agent sessions in this workspace. Launch a Claude or Aider agent session to begin."}),(0,a.jsxs)("div",{style:{display:"flex",gap:"1rem",justifyContent:"center",flexWrap:"wrap"},children:[T&&(0,a.jsx)("button",{className:n.default.quickLaunchBtn,onClick:()=>{z(T.type,T.name,T.workspaceRoot,T.scopedDirs)},disabled:m,style:{background:"linear-gradient(135deg, hsl(38, 92%, 50%) 0%, hsl(0, 84%, 60%) 100%)",border:"none",maxWidth:"200px"},title:`Re-launch: ${T.name||T.type}`,children:"⚡ Re-launch Last Session"}),(0,a.jsx)("button",{className:n.default.quickLaunchBtn,onClick:()=>{w(!1),v(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)",border:"none",maxWidth:"200px"},children:"Launch Claude PTY"}),(0,a.jsx)("button",{className:n.default.quickLaunchBtn,onClick:()=>{y(!1),x(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(210, 80%, 45%) 0%, hsl(262, 80%, 55%) 100%)",border:"none",maxWidth:"200px"},children:"Launch Aider PTY"})]}),(0,a.jsxs)("div",{style:{marginTop:"1.5rem",fontSize:"0.75rem",color:"var(--muted)"},children:["Want to verify layout features first?"," ",(0,a.jsx)("span",{onClick:()=>z("mock"),style:{color:"var(--primary)",cursor:"pointer",textDecoration:"underline"},children:"Start simulated sandbox session"})]})]}):(0,a.jsx)("div",{className:n.default.agentGrid,children:R.map(e=>(0,a.jsxs)("div",{className:`${n.default.agentCard} card ${u===e.id?n.default.activeBorder:""}`,children:[(0,a.jsxs)("div",{className:n.default.agentHeader,children:[(0,a.jsx)("span",{className:n.default.agentName,children:e.name}),(0,a.jsx)("span",{className:`${n.default.agentBadge} ${"stopped"===e.status?n.default.stoppedBadge:""}`,children:e.status})]}),(0,a.jsxs)("div",{className:n.default.cardBody,children:[(0,a.jsxs)("p",{style:{fontSize:"0.825rem",color:"var(--muted)"},children:["ID: ",(0,a.jsx)("code",{style:{fontSize:"0.75rem"},children:e.id.substring(0,8)}),(0,a.jsx)("br",{}),"Type: ","claude"===e.type?"Claude Local PTY":"claude-docker"===e.type?"Claude Docker PTY":"claude-ssh"===e.type?"Claude SSH PTY":"aider"===e.type?"Aider Local PTY":"aider-docker"===e.type?"Aider Docker PTY":"mock"===e.type?"Simulated Mock PTY":"Unknown PTY",(0,a.jsx)("br",{}),"Logs: ",e.logsCount," captured lines"]}),(0,a.jsxs)("div",{style:{display:"flex",gap:"0.5rem",marginTop:"1rem"},children:["running"===e.status?(0,a.jsx)("button",{onClick:()=>M(e.id,!1),style:{flex:1,padding:"0.4rem 0.6rem",borderRadius:"6px",border:"1px solid var(--danger)",backgroundColor:"transparent",fontSize:"0.75rem",fontWeight:600,color:"var(--danger)"},children:"Stop"}):(0,a.jsx)("button",{onClick:()=>M(e.id,!0),style:{flex:1,padding:"0.4rem 0.6rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"transparent",fontSize:"0.75rem",fontWeight:600,color:"var(--muted)"},children:"Delete"}),(0,a.jsx)("button",{onClick:()=>p(e.id),style:{flex:2,padding:"0.4rem 0.6rem",borderRadius:"6px",border:"none",backgroundColor:u===e.id?"var(--border-focus)":"var(--primary)",fontSize:"0.75rem",fontWeight:600,color:"#fff"},children:u===e.id?"Connected":"Open Session"})]})]})]},e.id))})]}),u&&"workspace-terminal"!==u&&(0,a.jsxs)("section",{className:"card",style:{display:"flex",flexDirection:"column",border:"1px solid var(--border-focus)"},children:[(0,a.jsxs)("div",{className:n.default.agentHeader,style:{justifyContent:"space-between",background:"rgba(109, 40, 217, 0.08)"},children:[(0,a.jsxs)("span",{style:{fontWeight:600,display:"flex",alignItems:"center",gap:"0.5rem"},children:["🖥️ Console Bridge — ",e.find(e=>e.id===u)?.name]}),(0,a.jsxs)("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"},children:[e.find(e=>e.id===u)?.status==="stopped"&&(0,a.jsx)("button",{onClick:async()=>{try{let e=await fetch("/api/sessions/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:u})});if(e.ok)await I();else{let a=await e.json();alert(a.error||"Failed to restart session.")}}catch(e){console.error("Failed to restart session:",e),alert("Network error: failed to restart session.")}},style:{padding:"0.2rem 0.5rem",borderRadius:"4px",border:"1px solid #eab308",backgroundColor:"rgba(234, 179, 8, 0.15)",color:"#eab308",fontSize:"0.7rem",fontWeight:600,cursor:"pointer",boxShadow:"0 0 8px rgba(234, 179, 8, 0.2)"},title:"Restart the stopped session process runner",children:"⚡ Restart Session"}),(0,a.jsx)("button",{onClick:()=>p(null),style:{border:"none",background:"none",color:"var(--muted)",cursor:"pointer",fontSize:"0.75rem"},children:"Close Panel ✖"})]})]}),(0,a.jsx)(r,{sessionId:u,wsPort:N})]}),(0,a.jsxs)("section",{children:[(0,a.jsx)("h2",{className:n.default.sectionTitle,children:"Workspace Shell Terminal"}),(0,a.jsxs)("div",{className:"card",style:{display:"flex",flexDirection:"column",border:"1px solid var(--border)",padding:0},children:[(0,a.jsxs)("div",{className:n.default.agentHeader,style:{justifyContent:"space-between",background:"rgba(255, 255, 255, 0.02)"},children:[(0,a.jsxs)("span",{style:{fontWeight:600,display:"flex",alignItems:"center",gap:"0.5rem",fontSize:"0.85rem"},children:["💻 Local Workspace Shell (CWD: ",C||"root",")"]}),(0,a.jsx)("span",{style:{fontSize:"0.7rem",color:"var(--muted)"},children:"Pre-configured environment"})]}),(0,a.jsx)(r,{sessionId:"workspace-terminal",height:"300px",wsPort:N})]})]}),(0,a.jsxs)("section",{style:{marginTop:"2rem"},children:[(0,a.jsx)("h2",{className:n.default.sectionTitle,children:"Shared Context Hub & Slash Commands"}),(0,a.jsxs)("div",{className:n.default.contextList,children:[(0,a.jsxs)("div",{className:`${n.default.contextItem} card`,children:[(0,a.jsxs)("div",{className:n.default.contextMeta,children:[(0,a.jsx)("span",{className:n.default.contextTitle,children:"Staged Context & System Rules (/ccc)"}),(0,a.jsx)("span",{className:n.default.contextDetails,children:"Compiles AGENTS.md guidelines and project files folder hierarchy map."})]}),(0,a.jsx)("button",{onClick:async()=>{u&&await fetch("/api/sessions/inject",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:u,command:"/ccc"})})},disabled:!u,style:{padding:"0.4rem 0.8rem",borderRadius:"6px",border:"1px solid var(--primary)",backgroundColor:"transparent",color:"var(--primary)",fontSize:"0.75rem",fontWeight:600,opacity:u?1:.5,cursor:u?"pointer":"not-allowed"},children:"🚀 Mount Context (/ccc)"})]}),(0,a.jsxs)("div",{className:`${n.default.contextItem} card`,children:[(0,a.jsxs)("div",{className:n.default.contextMeta,children:[(0,a.jsx)("span",{className:n.default.contextTitle,children:"Staged Developer Prompt (/ccp)"}),(0,a.jsx)("span",{className:n.default.contextDetails,children:"Executes instructions written in .ai/neural-loom/cprompt.md."})]}),(0,a.jsx)("button",{onClick:async()=>{u&&await fetch("/api/sessions/inject",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:u,command:"/ccp"})})},disabled:!u,style:{padding:"0.4rem 0.8rem",borderRadius:"6px",border:"1px solid var(--success)",backgroundColor:"transparent",color:"var(--success)",fontSize:"0.75rem",fontWeight:600,opacity:u?1:.5,cursor:u?"pointer":"not-allowed"},children:"⚡ Trigger Prompt (/ccp)"})]})]}),(0,a.jsx)(l,{})]})]}),(0,a.jsxs)("aside",{className:n.default.sidePanel,children:[(0,a.jsxs)("section",{children:[(0,a.jsx)("h2",{className:n.default.sectionTitle,children:"Execution Environments"}),(0,a.jsxs)("div",{className:n.default.envGrid,children:[(0,a.jsxs)("div",{className:n.default.envRow,children:[(0,a.jsx)("span",{className:n.default.envName,children:"💻 Local host OS"}),(0,a.jsx)("span",{className:n.default.envStatus,style:{color:"var(--success)"},children:"Active"})]}),(0,a.jsxs)("div",{className:n.default.envRow,style:{opacity:D?1:.6},children:[(0,a.jsx)("span",{className:n.default.envName,children:"🐳 Docker Sandbox"}),(0,a.jsx)("span",{className:n.default.envStatus,style:{color:D?"var(--success)":"var(--muted)"},children:D?"Active":"Not Mounted"})]}),(0,a.jsxs)("div",{className:n.default.envRow,style:{opacity:B?1:.6},children:[(0,a.jsx)("span",{className:n.default.envName,children:"🌐 Remote VM (SSH)"}),(0,a.jsx)("span",{className:n.default.envStatus,style:{color:B?"var(--success)":"var(--muted)"},children:B?"Active":"Disconnected"})]})]})]}),(0,a.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"},children:[(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>{w(!1),v(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)",border:"none"},children:[(0,a.jsx)("span",{children:"🤖"}),(0,a.jsx)("span",{children:"Launch Claude PTY"})]}),(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>{w(!0),v(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(170, 72%, 40%) 0%, hsl(195, 100%, 40%) 100%)",border:"none"},children:[(0,a.jsx)("span",{children:"🐳"}),(0,a.jsx)("span",{children:"Launch Docker PTY"})]}),(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>_(!0),disabled:m,style:{background:"linear-gradient(135deg, hsl(38, 92%, 50%) 0%, hsl(0, 84%, 60%) 100%)",border:"none"},children:[(0,a.jsx)("span",{children:"🌐"}),(0,a.jsx)("span",{children:"Launch SSH PTY"})]}),(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>{y(!1),x(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(210, 80%, 45%) 0%, hsl(262, 80%, 55%) 100%)",border:"none"},children:[(0,a.jsx)("span",{children:"🐍"}),(0,a.jsx)("span",{children:"Launch Aider PTY"})]}),(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>{y(!0),x(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(195, 100%, 40%) 0%, hsl(262, 80%, 55%) 100%)",border:"none"},children:[(0,a.jsx)("span",{children:"🐳"}),(0,a.jsx)("span",{children:"Launch Aider Docker"})]})]}),(0,a.jsxs)("section",{className:"card",style:{padding:"1.5rem",display:"flex",flexDirection:"column",gap:"0.75rem"},children:[(0,a.jsx)("h3",{style:{fontSize:"1rem",fontWeight:700},children:"Quick Actions"}),(0,a.jsxs)("ul",{style:{listStyle:"none",fontSize:"0.875rem",display:"flex",flexDirection:"column",gap:"0.5rem",color:"var(--muted)"},children:[(0,a.jsxs)("li",{style:{display:"flex",justifyContent:"space-between"},children:[(0,a.jsx)("span",{children:"Configure global API Keys"}),(0,a.jsx)("span",{style:{color:"var(--primary)",cursor:"pointer"},children:"→"})]}),(0,a.jsxs)("li",{style:{display:"flex",justifyContent:"space-between"},children:[(0,a.jsx)("span",{children:"Edit rules templates"}),(0,a.jsx)("span",{style:{color:"var(--primary)",cursor:"pointer"},children:"→"})]}),(0,a.jsxs)("li",{style:{display:"flex",justifyContent:"space-between"},children:[(0,a.jsx)("span",{children:"Inspect process locks"}),(0,a.jsx)("span",{style:{color:"var(--primary)",cursor:"pointer"},children:"→"})]})]}),(0,a.jsxs)("div",{style:{marginTop:"1.2rem",textAlign:"center",fontSize:"0.72rem",color:"var(--muted)"},children:["Need to troubleshoot?"," ",(0,a.jsx)("span",{onClick:()=>z("mock"),style:{color:"var(--primary)",cursor:"pointer",textDecoration:"underline"},children:"Launch simulated playground sandbox"})]})]})]})]}),(0,a.jsxs)("footer",{className:n.default.footer,children:[(0,a.jsxs)("span",{children:["NeuralLoom v",P," — Experimental AI Orchestrator Bridge"]}),(0,a.jsxs)("span",{children:["Directory: ",C||"Loading..."]})]}),f&&(0,a.jsx)(o,{onClose:()=>_(!1),onConfirmLaunch:()=>{_(!1),z("claude-ssh")}}),g&&(0,a.jsx)(i,{onClose:()=>x(!1),isDocker:j,onConfirmLaunch:()=>{x(!1),z(j?"aider-docker":"aider")}}),b&&(0,a.jsx)(d,{onClose:()=>v(!1),isDocker:k,onConfirmLaunch:(e,a,s)=>{v(!1),z(k?"claude-docker":"claude",e,a,s)}})]})}])},33779,e=>{e.v(a=>Promise.all(["static/chunks/03g6xpslyid3~.js","static/chunks/070hz362~_h8n.js","static/chunks/0ga14ztvrhau2.css"].map(a=>e.l(a))).then(()=>a(37314)))},39429,e=>{e.v(a=>Promise.all(["static/chunks/16w4~t4h7gk13.js"].map(a=>e.l(a))).then(()=>a(1985)))},56915,e=>{e.v(a=>Promise.all(["static/chunks/0lnobx4eh3~-_.js"].map(a=>e.l(a))).then(()=>a(99026)))},78716,e=>{e.v(a=>Promise.all(["static/chunks/0k2co3uj4w81_.js"].map(a=>e.l(a))).then(()=>a(9949)))},33789,e=>{e.v(a=>Promise.all(["static/chunks/076_b43_kienv.js"].map(a=>e.l(a))).then(()=>a(20032)))},78003,e=>{e.v(a=>Promise.all(["static/chunks/0eidfx-s54367.js","static/chunks/070hz362~_h8n.js","static/chunks/0bclk7hf35ac4.js","static/chunks/0ga14ztvrhau2.css"].map(a=>e.l(a))).then(()=>a(97722)))}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,67585,(e,a,s)=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"BailoutToCSR",{enumerable:!0,get:function(){return n}});let t=e.r(32061);function n({reason:e,children:a}){if("u"<typeof window)throw Object.defineProperty(new t.BailoutToCSRError(e),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return a}},9885,(e,a,s)=>{"use strict";function t(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"encodeURIPath",{enumerable:!0,get:function(){return t}})},52157,(e,a,s)=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"PreloadChunks",{enumerable:!0,get:function(){return i}});let t=e.r(43476),n=e.r(74080),r=e.r(63599),l=e.r(9885),o=e.r(43369);function i({moduleIds:e}){if("u">typeof window)return null;let a=r.workAsyncStorage.getStore();if(void 0===a)return null;let s=[];if(a.reactLoadableManifest&&e){let t=a.reactLoadableManifest;for(let a of e){if(!t[a])continue;let e=t[a].files;s.push(...e)}}if(0===s.length)return null;let d=(0,o.getAssetTokenQuery)();return(0,t.jsx)(t.Fragment,{children:s.map(e=>{let s=`${a.assetPrefix}/_next/${(0,l.encodeURIPath)(e)}${d}`;return e.endsWith(".css")?(0,t.jsx)("link",{precedence:"dynamic",href:s,rel:"stylesheet",as:"style",nonce:a.nonce},e):((0,n.preload)(s,{as:"script",fetchPriority:"low",nonce:a.nonce}),null)})})}},69093,(e,a,s)=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return d}});let t=e.r(43476),n=e.r(71645),r=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 a={...i,...e},s=(0,n.lazy)(()=>a.loader().then(o)),d=a.loading;function c(e){let o=d?(0,t.jsx)(d,{isLoading:!0,pastDelay:!0,error:null}):null,i=!a.ssr||!!a.loading,c=i?n.Suspense:n.Fragment,u=a.ssr?(0,t.jsxs)(t.Fragment,{children:["u"<typeof window?(0,t.jsx)(l.PreloadChunks,{moduleIds:a.modules}):null,(0,t.jsx)(s,{...e})]}):(0,t.jsx)(r.BailoutToCSR,{reason:"next/dynamic",children:(0,t.jsx)(s,{...e})});return(0,t.jsx)(c,{...i?{fallback:o}:{},children:u})}return c.displayName="LoadableComponent",c}},70703,(e,a,s)=>{"use strict";Object.defineProperty(s,"__esModule",{value:!0}),Object.defineProperty(s,"default",{enumerable:!0,get:function(){return n}});let t=e.r(55682)._(e.r(69093));function n(e,a){let s={};"function"==typeof e&&(s.loader=e);let n={...s,...a};return(0,t.default)({...n,modules:n.loadableGenerated?.modules})}("function"==typeof s.default||"object"==typeof s.default&&null!==s.default)&&void 0===s.default.__esModule&&(Object.defineProperty(s.default,"__esModule",{value:!0}),Object.assign(s.default,s),a.exports=s.default)},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",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",pulseDot:"page-module___8aEwW__pulseDot",quickLaunchBtn:"page-module___8aEwW__quickLaunchBtn",sectionTitle:"page-module___8aEwW__sectionTitle",sidePanel:"page-module___8aEwW__sidePanel",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 a=e.i(43476),s=e.i(71645),t=e.i(70703),n=e.i(20897);let r=(0,t.default)(()=>e.A(33779),{loadableGenerated:{modules:[37314]},ssr:!1,loading:()=>(0,a.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,a.jsx)("span",{children:"Initializing terminal emulator..."})})}),l=(0,t.default)(()=>e.A(39429),{loadableGenerated:{modules:[1985]},ssr:!1,loading:()=>(0,a.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,a.jsx)("span",{style:{color:"var(--muted)"},children:"Initializing prompt editor..."})})}),o=(0,t.default)(()=>e.A(56915),{loadableGenerated:{modules:[99026]},ssr:!1}),i=(0,t.default)(()=>e.A(78716),{loadableGenerated:{modules:[9949]},ssr:!1}),d=(0,t.default)(()=>e.A(33789),{loadableGenerated:{modules:[20032]},ssr:!1}),c=(0,t.default)(()=>e.A(78003),{loadableGenerated:{modules:[97722]},ssr:!1});e.s(["default",0,function(){let[e,t]=(0,s.useState)([]),[u,p]=(0,s.useState)(null),[m,h]=(0,s.useState)(!1),[f,_]=(0,s.useState)(!1),[g,x]=(0,s.useState)(!1),[j,y]=(0,s.useState)(!1),[b,v]=(0,s.useState)(!1),[k,w]=(0,s.useState)(!1),[C,S]=(0,s.useState)(""),[N,W]=(0,s.useState)(3001),[P,E]=(0,s.useState)("0.2.19"),[T,L]=(0,s.useState)(null),R=e.filter(e=>"workspace-terminal"!==e.id),A=e.find(e=>e.id===u),D=R.some(e=>("claude-docker"===e.type||"aider-docker"===e.type)&&"running"===e.status),B=R.some(e=>"claude-ssh"===e.type&&"running"===e.status),I=async()=>{try{let e=await fetch("/api/sessions"),a=await e.json();a.sessions&&t(a.sessions),a.wsPort&&W(a.wsPort),a.originalCwd&&S(a.originalCwd),a.version&&E(a.version)}catch(e){console.error("Failed to fetch sessions:",e)}},O=async()=>{try{let e=await fetch("/api/recents");if(e.ok){let a=await e.json();a.success&&a.recents&&a.recents.lastSession&&L(a.recents.lastSession)}}catch(e){console.error("Failed to fetch recents:",e)}};(0,s.useEffect)(()=>{(async()=>{await I(),await O()})(),"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(I,4e3);return()=>clearInterval(e)},[]);let z=async(e,a,s,t)=>{h(!0);try{let n=a;n||("claude"===e?n="Claude Local":"claude-docker"===e?n="Claude Docker":"claude-ssh"===e?n="Claude SSH":"aider"===e?n="Aider Local":"aider-docker"===e?n="Aider Docker":"mock"===e&&(n="Mock Session"));let r={type:e,name:n,workspaceRoot:s,scopedDirs:t};if(("aider"===e||"aider-docker"===e)&&!s)try{let e=await fetch("/api/context/aider");if(e.ok){let a=await e.json();a.success&&a.config&&(r.workspaceRoot=a.config.workspaceRoot,r.scopedDirs=a.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(r)}),o=await l.json();o.success&&(await I(),p(o.session.id),L({type:e,name:n,workspaceRoot:s,scopedDirs:t}))}catch(e){console.error("Failed to launch session:",e)}finally{h(!1)}},M=async(e,a=!1)=>{try{let s=await fetch("/api/sessions/stop",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e,delete:a})});(await s.json()).success&&(a&&u===e&&p(null),await I())}catch(e){console.error("Failed to stop session:",e)}};return(0,a.jsxs)("div",{className:`${n.default.container} ${A?n.default.containerActive:""}`,children:[(0,a.jsxs)("header",{className:n.default.header,children:[(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"1.5rem"},children:[(0,a.jsx)("img",{src:"/logo.png",alt:"NeuralLoom Logo",style:{width:"160px",height:"160px",borderRadius:"16px",objectFit:"contain"}}),(0,a.jsxs)("div",{className:n.default.logoArea,children:[(0,a.jsx)("h1",{className:n.default.title,style:{margin:0,lineHeight:1.1},children:"NeuralLoom"}),(0,a.jsx)("span",{className:n.default.subtitle,children:"Unified AI Orchestrator & Context Bridge"})]})]}),(0,a.jsxs)("div",{className:n.default.statusIndicator,children:[(0,a.jsx)("span",{className:n.default.pulseDot}),(0,a.jsx)("span",{children:"Orchestrator Online"})]})]}),A?(0,a.jsx)("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:(0,a.jsx)(c,{sessionId:A.id,workspaceRoot:A.workspaceRoot||"",scopedDirs:A.scopedDirs||[],onClose:()=>p(null),sessions:e,onSwitchSession:e=>p(e),onRefreshSessions:I,wsPort:N})}):(0,a.jsxs)("div",{className:n.default.dashboardGrid,children:[(0,a.jsxs)("main",{className:n.default.mainPanel,children:[(0,a.jsxs)("section",{children:[(0,a.jsx)("h2",{className:n.default.sectionTitle,children:"Active AI Agents"}),0===R.length?(0,a.jsxs)("div",{className:"card",style:{padding:"3rem 1.5rem",textAlign:"center"},children:[(0,a.jsx)("p",{style:{color:"var(--muted)",marginBottom:"1.5rem"},children:"No active agent sessions in this workspace. Launch a Claude or Aider agent session to begin."}),(0,a.jsxs)("div",{style:{display:"flex",gap:"1rem",justifyContent:"center",flexWrap:"wrap"},children:[T&&(0,a.jsx)("button",{className:n.default.quickLaunchBtn,onClick:()=>{z(T.type,T.name,T.workspaceRoot,T.scopedDirs)},disabled:m,style:{background:"linear-gradient(135deg, hsl(38, 92%, 50%) 0%, hsl(0, 84%, 60%) 100%)",border:"none",maxWidth:"200px"},title:`Re-launch: ${T.name||T.type}`,children:"⚡ Re-launch Last Session"}),(0,a.jsx)("button",{className:n.default.quickLaunchBtn,onClick:()=>{w(!1),v(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)",border:"none",maxWidth:"200px"},children:"Launch Claude PTY"}),(0,a.jsx)("button",{className:n.default.quickLaunchBtn,onClick:()=>{y(!1),x(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(210, 80%, 45%) 0%, hsl(262, 80%, 55%) 100%)",border:"none",maxWidth:"200px"},children:"Launch Aider PTY"})]}),(0,a.jsxs)("div",{style:{marginTop:"1.5rem",fontSize:"0.75rem",color:"var(--muted)"},children:["Want to verify layout features first?"," ",(0,a.jsx)("span",{onClick:()=>z("mock"),style:{color:"var(--primary)",cursor:"pointer",textDecoration:"underline"},children:"Start simulated sandbox session"})]})]}):(0,a.jsx)("div",{className:n.default.agentGrid,children:R.map(e=>(0,a.jsxs)("div",{className:`${n.default.agentCard} card ${u===e.id?n.default.activeBorder:""}`,children:[(0,a.jsxs)("div",{className:n.default.agentHeader,children:[(0,a.jsx)("span",{className:n.default.agentName,children:e.name}),(0,a.jsx)("span",{className:`${n.default.agentBadge} ${"stopped"===e.status?n.default.stoppedBadge:""}`,children:e.status})]}),(0,a.jsxs)("div",{className:n.default.cardBody,children:[(0,a.jsxs)("p",{style:{fontSize:"0.825rem",color:"var(--muted)"},children:["ID: ",(0,a.jsx)("code",{style:{fontSize:"0.75rem"},children:e.id.substring(0,8)}),(0,a.jsx)("br",{}),"Type: ","claude"===e.type?"Claude Local PTY":"claude-docker"===e.type?"Claude Docker PTY":"claude-ssh"===e.type?"Claude SSH PTY":"aider"===e.type?"Aider Local PTY":"aider-docker"===e.type?"Aider Docker PTY":"mock"===e.type?"Simulated Mock PTY":"Unknown PTY",(0,a.jsx)("br",{}),"Logs: ",e.logsCount," captured lines"]}),(0,a.jsxs)("div",{style:{display:"flex",gap:"0.5rem",marginTop:"1rem"},children:["running"===e.status?(0,a.jsx)("button",{onClick:()=>M(e.id,!1),style:{flex:1,padding:"0.4rem 0.6rem",borderRadius:"6px",border:"1px solid var(--danger)",backgroundColor:"transparent",fontSize:"0.75rem",fontWeight:600,color:"var(--danger)"},children:"Stop"}):(0,a.jsx)("button",{onClick:()=>M(e.id,!0),style:{flex:1,padding:"0.4rem 0.6rem",borderRadius:"6px",border:"1px solid var(--border)",backgroundColor:"transparent",fontSize:"0.75rem",fontWeight:600,color:"var(--muted)"},children:"Delete"}),(0,a.jsx)("button",{onClick:()=>p(e.id),style:{flex:2,padding:"0.4rem 0.6rem",borderRadius:"6px",border:"none",backgroundColor:u===e.id?"var(--border-focus)":"var(--primary)",fontSize:"0.75rem",fontWeight:600,color:"#fff"},children:u===e.id?"Connected":"Open Session"})]})]})]},e.id))})]}),u&&"workspace-terminal"!==u&&(0,a.jsxs)("section",{className:"card",style:{display:"flex",flexDirection:"column",border:"1px solid var(--border-focus)"},children:[(0,a.jsxs)("div",{className:n.default.agentHeader,style:{justifyContent:"space-between",background:"rgba(109, 40, 217, 0.08)"},children:[(0,a.jsxs)("span",{style:{fontWeight:600,display:"flex",alignItems:"center",gap:"0.5rem"},children:["🖥️ Console Bridge — ",e.find(e=>e.id===u)?.name]}),(0,a.jsxs)("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"},children:[e.find(e=>e.id===u)?.status==="stopped"&&(0,a.jsx)("button",{onClick:async()=>{try{let e=await fetch("/api/sessions/start",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:u})});if(e.ok)await I();else{let a=await e.json();alert(a.error||"Failed to restart session.")}}catch(e){console.error("Failed to restart session:",e),alert("Network error: failed to restart session.")}},style:{padding:"0.2rem 0.5rem",borderRadius:"4px",border:"1px solid #eab308",backgroundColor:"rgba(234, 179, 8, 0.15)",color:"#eab308",fontSize:"0.7rem",fontWeight:600,cursor:"pointer",boxShadow:"0 0 8px rgba(234, 179, 8, 0.2)"},title:"Restart the stopped session process runner",children:"⚡ Restart Session"}),(0,a.jsx)("button",{onClick:()=>p(null),style:{border:"none",background:"none",color:"var(--muted)",cursor:"pointer",fontSize:"0.75rem"},children:"Close Panel ✖"})]})]}),(0,a.jsx)(r,{sessionId:u,wsPort:N})]}),(0,a.jsxs)("section",{children:[(0,a.jsx)("h2",{className:n.default.sectionTitle,children:"Workspace Shell Terminal"}),(0,a.jsxs)("div",{className:"card",style:{display:"flex",flexDirection:"column",border:"1px solid var(--border)",padding:0},children:[(0,a.jsxs)("div",{className:n.default.agentHeader,style:{justifyContent:"space-between",background:"rgba(255, 255, 255, 0.02)"},children:[(0,a.jsxs)("span",{style:{fontWeight:600,display:"flex",alignItems:"center",gap:"0.5rem",fontSize:"0.85rem"},children:["💻 Local Workspace Shell (CWD: ",C||"root",")"]}),(0,a.jsx)("span",{style:{fontSize:"0.7rem",color:"var(--muted)"},children:"Pre-configured environment"})]}),(0,a.jsx)(r,{sessionId:"workspace-terminal",height:"300px",wsPort:N})]})]}),(0,a.jsxs)("section",{style:{marginTop:"2rem"},children:[(0,a.jsx)("h2",{className:n.default.sectionTitle,children:"Shared Context Hub & Slash Commands"}),(0,a.jsxs)("div",{className:n.default.contextList,children:[(0,a.jsxs)("div",{className:`${n.default.contextItem} card`,children:[(0,a.jsxs)("div",{className:n.default.contextMeta,children:[(0,a.jsx)("span",{className:n.default.contextTitle,children:"Staged Context & System Rules (/ccc)"}),(0,a.jsx)("span",{className:n.default.contextDetails,children:"Compiles AGENTS.md guidelines and project files folder hierarchy map."})]}),(0,a.jsx)("button",{onClick:async()=>{u&&await fetch("/api/sessions/inject",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:u,command:"/ccc"})})},disabled:!u,style:{padding:"0.4rem 0.8rem",borderRadius:"6px",border:"1px solid var(--primary)",backgroundColor:"transparent",color:"var(--primary)",fontSize:"0.75rem",fontWeight:600,opacity:u?1:.5,cursor:u?"pointer":"not-allowed"},children:"🚀 Mount Context (/ccc)"})]}),(0,a.jsxs)("div",{className:`${n.default.contextItem} card`,children:[(0,a.jsxs)("div",{className:n.default.contextMeta,children:[(0,a.jsx)("span",{className:n.default.contextTitle,children:"Staged Developer Prompt (/ccp)"}),(0,a.jsx)("span",{className:n.default.contextDetails,children:"Executes instructions written in .ai/neural-loom/cprompt.md."})]}),(0,a.jsx)("button",{onClick:async()=>{u&&await fetch("/api/sessions/inject",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:u,command:"/ccp"})})},disabled:!u,style:{padding:"0.4rem 0.8rem",borderRadius:"6px",border:"1px solid var(--success)",backgroundColor:"transparent",color:"var(--success)",fontSize:"0.75rem",fontWeight:600,opacity:u?1:.5,cursor:u?"pointer":"not-allowed"},children:"⚡ Trigger Prompt (/ccp)"})]})]}),(0,a.jsx)(l,{})]})]}),(0,a.jsxs)("aside",{className:n.default.sidePanel,children:[(0,a.jsxs)("section",{children:[(0,a.jsx)("h2",{className:n.default.sectionTitle,children:"Execution Environments"}),(0,a.jsxs)("div",{className:n.default.envGrid,children:[(0,a.jsxs)("div",{className:n.default.envRow,children:[(0,a.jsx)("span",{className:n.default.envName,children:"💻 Local host OS"}),(0,a.jsx)("span",{className:n.default.envStatus,style:{color:"var(--success)"},children:"Active"})]}),(0,a.jsxs)("div",{className:n.default.envRow,style:{opacity:D?1:.6},children:[(0,a.jsx)("span",{className:n.default.envName,children:"🐳 Docker Sandbox"}),(0,a.jsx)("span",{className:n.default.envStatus,style:{color:D?"var(--success)":"var(--muted)"},children:D?"Active":"Not Mounted"})]}),(0,a.jsxs)("div",{className:n.default.envRow,style:{opacity:B?1:.6},children:[(0,a.jsx)("span",{className:n.default.envName,children:"🌐 Remote VM (SSH)"}),(0,a.jsx)("span",{className:n.default.envStatus,style:{color:B?"var(--success)":"var(--muted)"},children:B?"Active":"Disconnected"})]})]})]}),(0,a.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"},children:[(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>{w(!1),v(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)",border:"none"},children:[(0,a.jsx)("span",{children:"🤖"}),(0,a.jsx)("span",{children:"Launch Claude PTY"})]}),(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>{w(!0),v(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(170, 72%, 40%) 0%, hsl(195, 100%, 40%) 100%)",border:"none"},children:[(0,a.jsx)("span",{children:"🐳"}),(0,a.jsx)("span",{children:"Launch Docker PTY"})]}),(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>_(!0),disabled:m,style:{background:"linear-gradient(135deg, hsl(38, 92%, 50%) 0%, hsl(0, 84%, 60%) 100%)",border:"none"},children:[(0,a.jsx)("span",{children:"🌐"}),(0,a.jsx)("span",{children:"Launch SSH PTY"})]}),(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>{y(!1),x(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(210, 80%, 45%) 0%, hsl(262, 80%, 55%) 100%)",border:"none"},children:[(0,a.jsx)("span",{children:"🐍"}),(0,a.jsx)("span",{children:"Launch Aider PTY"})]}),(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>{y(!0),x(!0)},disabled:m,style:{background:"linear-gradient(135deg, hsl(195, 100%, 40%) 0%, hsl(262, 80%, 55%) 100%)",border:"none"},children:[(0,a.jsx)("span",{children:"🐳"}),(0,a.jsx)("span",{children:"Launch Aider Docker"})]})]}),(0,a.jsxs)("section",{className:"card",style:{padding:"1.5rem",display:"flex",flexDirection:"column",gap:"0.75rem"},children:[(0,a.jsx)("h3",{style:{fontSize:"1rem",fontWeight:700},children:"Quick Actions"}),(0,a.jsxs)("ul",{style:{listStyle:"none",fontSize:"0.875rem",display:"flex",flexDirection:"column",gap:"0.5rem",color:"var(--muted)"},children:[(0,a.jsxs)("li",{style:{display:"flex",justifyContent:"space-between"},children:[(0,a.jsx)("span",{children:"Configure global API Keys"}),(0,a.jsx)("span",{style:{color:"var(--primary)",cursor:"pointer"},children:"→"})]}),(0,a.jsxs)("li",{style:{display:"flex",justifyContent:"space-between"},children:[(0,a.jsx)("span",{children:"Edit rules templates"}),(0,a.jsx)("span",{style:{color:"var(--primary)",cursor:"pointer"},children:"→"})]}),(0,a.jsxs)("li",{style:{display:"flex",justifyContent:"space-between"},children:[(0,a.jsx)("span",{children:"Inspect process locks"}),(0,a.jsx)("span",{style:{color:"var(--primary)",cursor:"pointer"},children:"→"})]})]}),(0,a.jsxs)("div",{style:{marginTop:"1.2rem",textAlign:"center",fontSize:"0.72rem",color:"var(--muted)"},children:["Need to troubleshoot?"," ",(0,a.jsx)("span",{onClick:()=>z("mock"),style:{color:"var(--primary)",cursor:"pointer",textDecoration:"underline"},children:"Launch simulated playground sandbox"})]})]})]})]}),(0,a.jsxs)("footer",{className:n.default.footer,children:[(0,a.jsxs)("span",{children:["NeuralLoom v",P," — Experimental AI Orchestrator Bridge"]}),(0,a.jsxs)("span",{children:["Directory: ",C||"Loading..."]})]}),f&&(0,a.jsx)(o,{onClose:()=>_(!1),onConfirmLaunch:()=>{_(!1),z("claude-ssh")}}),g&&(0,a.jsx)(i,{onClose:()=>x(!1),isDocker:j,onConfirmLaunch:()=>{x(!1),z(j?"aider-docker":"aider")}}),b&&(0,a.jsx)(d,{onClose:()=>v(!1),isDocker:k,onConfirmLaunch:(e,a,s)=>{v(!1),z(k?"claude-docker":"claude",e,a,s)}})]})}])},33779,e=>{e.v(a=>Promise.all(["static/chunks/03g6xpslyid3~.js","static/chunks/070hz362~_h8n.js","static/chunks/0ga14ztvrhau2.css"].map(a=>e.l(a))).then(()=>a(37314)))},39429,e=>{e.v(a=>Promise.all(["static/chunks/16w4~t4h7gk13.js"].map(a=>e.l(a))).then(()=>a(1985)))},56915,e=>{e.v(a=>Promise.all(["static/chunks/0lnobx4eh3~-_.js"].map(a=>e.l(a))).then(()=>a(99026)))},78716,e=>{e.v(a=>Promise.all(["static/chunks/0k2co3uj4w81_.js"].map(a=>e.l(a))).then(()=>a(9949)))},33789,e=>{e.v(a=>Promise.all(["static/chunks/076_b43_kienv.js"].map(a=>e.l(a))).then(()=>a(20032)))},78003,e=>{e.v(a=>Promise.all(["static/chunks/0eidfx-s54367.js","static/chunks/070hz362~_h8n.js","static/chunks/03f4bqk_d65hs.js","static/chunks/0ga14ztvrhau2.css"].map(a=>e.l(a))).then(()=>a(97722)))}]);
package/.next/trace CHANGED
@@ -1 +1 @@
1
- [{"name":"generate-buildid","duration":327,"timestamp":38945701762,"id":4,"parentId":1,"tags":{},"startTime":1781518329901,"traceId":"bef02229efd60db2"},{"name":"load-custom-routes","duration":404,"timestamp":38945702216,"id":5,"parentId":1,"tags":{},"startTime":1781518329901,"traceId":"bef02229efd60db2"},{"name":"create-dist-dir","duration":644,"timestamp":38945702654,"id":6,"parentId":1,"tags":{},"startTime":1781518329902,"traceId":"bef02229efd60db2"},{"name":"clean","duration":629,"timestamp":38945706161,"id":7,"parentId":1,"tags":{},"startTime":1781518329905,"traceId":"bef02229efd60db2"},{"name":"discover-routes","duration":6351,"timestamp":38945731118,"id":8,"parentId":1,"tags":{},"startTime":1781518329930,"traceId":"bef02229efd60db2"},{"name":"create-root-mapping","duration":61,"timestamp":38945737517,"id":9,"parentId":1,"tags":{},"startTime":1781518329937,"traceId":"bef02229efd60db2"},{"name":"generate-route-types","duration":18497,"timestamp":38945738856,"id":10,"parentId":1,"tags":{},"startTime":1781518329938,"traceId":"bef02229efd60db2"},{"name":"public-dir-conflict-check","duration":148,"timestamp":38945757568,"id":11,"parentId":1,"tags":{},"startTime":1781518329957,"traceId":"bef02229efd60db2"},{"name":"generate-routes-manifest","duration":2653,"timestamp":38945757867,"id":12,"parentId":1,"tags":{},"startTime":1781518329957,"traceId":"bef02229efd60db2"},{"name":"run-turbopack","duration":2482106,"timestamp":38945768473,"id":14,"parentId":1,"tags":{},"startTime":1781518329967,"traceId":"bef02229efd60db2"},{"name":"turbopack-build-events","duration":68,"timestamp":38946079902,"id":15,"parentId":1,"tags":{},"startTime":1781518330279,"traceId":"bef02229efd60db2"},{"name":"run-typescript","duration":4081290,"timestamp":38948262533,"id":16,"parentId":1,"tags":{},"startTime":1781518332462,"traceId":"bef02229efd60db2"},{"name":"generate-required-server-files","duration":1759,"timestamp":38952345044,"id":18,"parentId":1,"tags":{},"startTime":1781518336544,"traceId":"bef02229efd60db2"},{"name":"check-static-error-page","duration":8390,"timestamp":38952480757,"id":20,"parentId":19,"tags":{},"startTime":1781518336680,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":561981,"timestamp":38952494218,"id":40,"parentId":22,"tags":{},"startTime":1781518336693,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":572087,"timestamp":38952484233,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1781518336683,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":696155,"timestamp":38952494372,"id":42,"parentId":24,"tags":{},"startTime":1781518336693,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":705641,"timestamp":38952484943,"id":24,"parentId":19,"tags":{"page":"/api/context/claude"},"startTime":1781518336684,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":699290,"timestamp":38952493924,"id":39,"parentId":21,"tags":{},"startTime":1781518336693,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":710617,"timestamp":38952482642,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1781518336682,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":707321,"timestamp":38952494566,"id":44,"parentId":26,"tags":{},"startTime":1781518336694,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":716517,"timestamp":38952485414,"id":26,"parentId":19,"tags":{"page":"/api/context/ssh"},"startTime":1781518336684,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":713435,"timestamp":38952495156,"id":47,"parentId":29,"tags":{},"startTime":1781518336694,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":722451,"timestamp":38952486181,"id":29,"parentId":19,"tags":{"page":"/api/recents"},"startTime":1781518336685,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":713815,"timestamp":38952495030,"id":46,"parentId":28,"tags":{},"startTime":1781518336694,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":722949,"timestamp":38952485933,"id":28,"parentId":19,"tags":{"page":"/api/git"},"startTime":1781518336685,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":722345,"timestamp":38952494311,"id":41,"parentId":23,"tags":{},"startTime":1781518336693,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":732057,"timestamp":38952484648,"id":23,"parentId":19,"tags":{"page":"/api/context/aider"},"startTime":1781518336684,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":719187,"timestamp":38952499400,"id":56,"parentId":38,"tags":{},"startTime":1781518336698,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":729857,"timestamp":38952488762,"id":38,"parentId":19,"tags":{"page":"/"},"startTime":1781518336688,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":724701,"timestamp":38952494818,"id":45,"parentId":27,"tags":{},"startTime":1781518336694,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":733895,"timestamp":38952485661,"id":27,"parentId":19,"tags":{"page":"/api/files"},"startTime":1781518336685,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":729366,"timestamp":38952494467,"id":43,"parentId":25,"tags":{},"startTime":1781518336693,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":738694,"timestamp":38952485188,"id":25,"parentId":19,"tags":{"page":"/api/context"},"startTime":1781518336684,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":737762,"timestamp":38952496145,"id":55,"parentId":37,"tags":{},"startTime":1781518336695,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":745419,"timestamp":38952488529,"id":37,"parentId":19,"tags":{"page":"/api/sessions/stop"},"startTime":1781518336688,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":739088,"timestamp":38952495629,"id":49,"parentId":31,"tags":{},"startTime":1781518336695,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":748056,"timestamp":38952486694,"id":31,"parentId":19,"tags":{"page":"/api/sessions/input"},"startTime":1781518336686,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":739484,"timestamp":38952495715,"id":50,"parentId":32,"tags":{},"startTime":1781518336695,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":748291,"timestamp":38952486943,"id":32,"parentId":19,"tags":{"page":"/api/sessions/launch"},"startTime":1781518336686,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":739552,"timestamp":38952495764,"id":51,"parentId":33,"tags":{},"startTime":1781518336695,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":748154,"timestamp":38952487175,"id":33,"parentId":19,"tags":{"page":"/api/sessions"},"startTime":1781518336686,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":742828,"timestamp":38952496105,"id":54,"parentId":36,"tags":{},"startTime":1781518336695,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":750718,"timestamp":38952488248,"id":36,"parentId":19,"tags":{"page":"/api/sessions/stats"},"startTime":1781518336687,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":742974,"timestamp":38952496048,"id":53,"parentId":35,"tags":{},"startTime":1781518336695,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":751297,"timestamp":38952487739,"id":35,"parentId":19,"tags":{"page":"/api/sessions/start"},"startTime":1781518336687,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":745356,"timestamp":38952495374,"id":48,"parentId":30,"tags":{},"startTime":1781518336694,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":754341,"timestamp":38952486430,"id":30,"parentId":19,"tags":{"page":"/api/sessions/inject"},"startTime":1781518336685,"traceId":"bef02229efd60db2"},{"name":"is-page-static","duration":748267,"timestamp":38952495815,"id":52,"parentId":34,"tags":{},"startTime":1781518336695,"traceId":"bef02229efd60db2"},{"name":"check-page","duration":756718,"timestamp":38952487399,"id":34,"parentId":19,"tags":{"page":"/api/sessions/scope"},"startTime":1781518336686,"traceId":"bef02229efd60db2"},{"name":"static-check","duration":763988,"timestamp":38952480168,"id":19,"parentId":1,"tags":{},"startTime":1781518336679,"traceId":"bef02229efd60db2"},{"name":"write-routes-manifest","duration":785,"timestamp":38953245112,"id":58,"parentId":1,"tags":{},"startTime":1781518337444,"traceId":"bef02229efd60db2"},{"name":"load-dotenv","duration":34,"timestamp":38953261433,"id":61,"parentId":60,"tags":{},"startTime":1781518337460,"traceId":"bef02229efd60db2"},{"name":"run-export-path-map","duration":421,"timestamp":38953266507,"id":62,"parentId":60,"tags":{},"startTime":1781518337465,"traceId":"bef02229efd60db2"},{"name":"next-export","duration":656462,"timestamp":38953260439,"id":60,"parentId":1,"tags":{},"startTime":1781518337459,"traceId":"bef02229efd60db2"},{"name":"move-exported-app-not-found-","duration":2162,"timestamp":38953918583,"id":63,"parentId":59,"tags":{},"startTime":1781518338118,"traceId":"bef02229efd60db2"},{"name":"move-exported-app-global-error-","duration":1443,"timestamp":38953920860,"id":64,"parentId":59,"tags":{},"startTime":1781518338120,"traceId":"bef02229efd60db2"},{"name":"static-generation","duration":675435,"timestamp":38953250344,"id":59,"parentId":1,"tags":{},"startTime":1781518337449,"traceId":"bef02229efd60db2"},{"name":"write-routes-manifest","duration":996,"timestamp":38953925897,"id":65,"parentId":1,"tags":{},"startTime":1781518338125,"traceId":"bef02229efd60db2"},{"name":"print-tree-view","duration":4426,"timestamp":38953943345,"id":66,"parentId":1,"tags":{},"startTime":1781518338142,"traceId":"bef02229efd60db2"},{"name":"write-route-bundle-stats","duration":8963,"timestamp":38953947808,"id":67,"parentId":1,"tags":{},"startTime":1781518338147,"traceId":"bef02229efd60db2"},{"name":"telemetry-flush","duration":174996,"timestamp":38953956802,"id":68,"parentId":1,"tags":{},"startTime":1781518338156,"traceId":"bef02229efd60db2"},{"name":"next-build","duration":8481015,"timestamp":38945650806,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781518329850,"traceId":"bef02229efd60db2"}]
1
+ [{"name":"generate-buildid","duration":204,"timestamp":101660272230,"id":4,"parentId":1,"tags":{},"startTime":1781581043065,"traceId":"b5d2378e0f84a25f"},{"name":"load-custom-routes","duration":333,"timestamp":101660272541,"id":5,"parentId":1,"tags":{},"startTime":1781581043066,"traceId":"b5d2378e0f84a25f"},{"name":"create-dist-dir","duration":693,"timestamp":101660272905,"id":6,"parentId":1,"tags":{},"startTime":1781581043066,"traceId":"b5d2378e0f84a25f"},{"name":"clean","duration":490,"timestamp":101660274388,"id":7,"parentId":1,"tags":{},"startTime":1781581043068,"traceId":"b5d2378e0f84a25f"},{"name":"discover-routes","duration":5931,"timestamp":101660298062,"id":8,"parentId":1,"tags":{},"startTime":1781581043091,"traceId":"b5d2378e0f84a25f"},{"name":"create-root-mapping","duration":56,"timestamp":101660304035,"id":9,"parentId":1,"tags":{},"startTime":1781581043097,"traceId":"b5d2378e0f84a25f"},{"name":"generate-route-types","duration":17144,"timestamp":101660305386,"id":10,"parentId":1,"tags":{},"startTime":1781581043099,"traceId":"b5d2378e0f84a25f"},{"name":"public-dir-conflict-check","duration":85,"timestamp":101660322657,"id":11,"parentId":1,"tags":{},"startTime":1781581043116,"traceId":"b5d2378e0f84a25f"},{"name":"generate-routes-manifest","duration":2263,"timestamp":101660322837,"id":12,"parentId":1,"tags":{},"startTime":1781581043116,"traceId":"b5d2378e0f84a25f"},{"name":"run-turbopack","duration":2708649,"timestamp":101660333048,"id":14,"parentId":1,"tags":{},"startTime":1781581043126,"traceId":"b5d2378e0f84a25f"},{"name":"turbopack-build-events","duration":72,"timestamp":101660716387,"id":15,"parentId":1,"tags":{},"startTime":1781581043510,"traceId":"b5d2378e0f84a25f"},{"name":"run-typescript","duration":4272171,"timestamp":101663053353,"id":16,"parentId":1,"tags":{},"startTime":1781581045847,"traceId":"b5d2378e0f84a25f"},{"name":"generate-required-server-files","duration":1353,"timestamp":101667326493,"id":18,"parentId":1,"tags":{},"startTime":1781581050120,"traceId":"b5d2378e0f84a25f"},{"name":"check-static-error-page","duration":8199,"timestamp":101667477416,"id":20,"parentId":19,"tags":{},"startTime":1781581050271,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":577192,"timestamp":101667491407,"id":44,"parentId":22,"tags":{},"startTime":1781581050285,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":588154,"timestamp":101667480566,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1781581050274,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":725042,"timestamp":101667491506,"id":46,"parentId":24,"tags":{},"startTime":1781581050285,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":735413,"timestamp":101667481219,"id":24,"parentId":19,"tags":{"page":"/api/context/claude"},"startTime":1781581050274,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":730452,"timestamp":101667492185,"id":52,"parentId":30,"tags":{},"startTime":1781581050285,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":740086,"timestamp":101667482605,"id":30,"parentId":19,"tags":{"page":"/api/sessions/inject"},"startTime":1781581050276,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":739771,"timestamp":101667491465,"id":45,"parentId":23,"tags":{},"startTime":1781581050285,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":750332,"timestamp":101667480958,"id":23,"parentId":19,"tags":{"page":"/api/context/aider"},"startTime":1781581050274,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":743917,"timestamp":101667491746,"id":49,"parentId":27,"tags":{},"startTime":1781581050285,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":753848,"timestamp":101667481872,"id":27,"parentId":19,"tags":{"page":"/api/files"},"startTime":1781581050275,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":744513,"timestamp":101667491549,"id":47,"parentId":25,"tags":{},"startTime":1781581050285,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":754621,"timestamp":101667481479,"id":25,"parentId":19,"tags":{"page":"/api/context"},"startTime":1781581050275,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":746839,"timestamp":101667491592,"id":48,"parentId":26,"tags":{},"startTime":1781581050285,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":756803,"timestamp":101667481679,"id":26,"parentId":19,"tags":{"page":"/api/context/ssh"},"startTime":1781581050275,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":749844,"timestamp":101667491980,"id":51,"parentId":29,"tags":{},"startTime":1781581050285,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":759478,"timestamp":101667482394,"id":29,"parentId":19,"tags":{"page":"/api/recents"},"startTime":1781581050276,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":751643,"timestamp":101667492854,"id":61,"parentId":39,"tags":{},"startTime":1781581050286,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":759756,"timestamp":101667484801,"id":39,"parentId":19,"tags":{"page":"/api/sql/mcp"},"startTime":1781581050278,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":757563,"timestamp":101667492929,"id":63,"parentId":41,"tags":{},"startTime":1781581050286,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":765388,"timestamp":101667485153,"id":41,"parentId":19,"tags":{"page":"/api/sql/schema"},"startTime":1781581050278,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":759559,"timestamp":101667492309,"id":53,"parentId":31,"tags":{},"startTime":1781581050286,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":769090,"timestamp":101667482828,"id":31,"parentId":19,"tags":{"page":"/api/sessions/input"},"startTime":1781581050276,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":759577,"timestamp":101667492725,"id":58,"parentId":36,"tags":{},"startTime":1781581050286,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":768156,"timestamp":101667484180,"id":36,"parentId":19,"tags":{"page":"/api/sessions/stats"},"startTime":1781581050277,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":761732,"timestamp":101667496680,"id":64,"parentId":42,"tags":{},"startTime":1781581050290,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":773136,"timestamp":101667485318,"id":42,"parentId":19,"tags":{"page":"/"},"startTime":1781581050279,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":768129,"timestamp":101667492817,"id":60,"parentId":38,"tags":{},"startTime":1781581050286,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":776370,"timestamp":101667484630,"id":38,"parentId":19,"tags":{"page":"/api/sql/connections"},"startTime":1781581050278,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":768480,"timestamp":101667492650,"id":57,"parentId":35,"tags":{},"startTime":1781581050286,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":777397,"timestamp":101667483762,"id":35,"parentId":19,"tags":{"page":"/api/sessions/start"},"startTime":1781581050277,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":774396,"timestamp":101667492893,"id":62,"parentId":40,"tags":{},"startTime":1781581050286,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":782368,"timestamp":101667484975,"id":40,"parentId":19,"tags":{"page":"/api/sql/query"},"startTime":1781581050278,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":776379,"timestamp":101667491203,"id":43,"parentId":21,"tags":{},"startTime":1781581050284,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":788652,"timestamp":101667478968,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1781581050272,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":776633,"timestamp":101667492378,"id":54,"parentId":32,"tags":{},"startTime":1781581050286,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":786037,"timestamp":101667483039,"id":32,"parentId":19,"tags":{"page":"/api/sessions/launch"},"startTime":1781581050276,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":776733,"timestamp":101667492433,"id":55,"parentId":33,"tags":{},"startTime":1781581050286,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":785951,"timestamp":101667483232,"id":33,"parentId":19,"tags":{"page":"/api/sessions"},"startTime":1781581050276,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":778800,"timestamp":101667492491,"id":56,"parentId":34,"tags":{},"startTime":1781581050286,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":787860,"timestamp":101667483463,"id":34,"parentId":19,"tags":{"page":"/api/sessions/scope"},"startTime":1781581050277,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":779512,"timestamp":101667491871,"id":50,"parentId":28,"tags":{},"startTime":1781581050285,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":789234,"timestamp":101667482161,"id":28,"parentId":19,"tags":{"page":"/api/git"},"startTime":1781581050275,"traceId":"b5d2378e0f84a25f"},{"name":"is-page-static","duration":784808,"timestamp":101667492773,"id":59,"parentId":37,"tags":{},"startTime":1781581050286,"traceId":"b5d2378e0f84a25f"},{"name":"check-page","duration":793207,"timestamp":101667484410,"id":37,"parentId":19,"tags":{"page":"/api/sessions/stop"},"startTime":1781581050278,"traceId":"b5d2378e0f84a25f"},{"name":"static-check","duration":800781,"timestamp":101667476861,"id":19,"parentId":1,"tags":{},"startTime":1781581050270,"traceId":"b5d2378e0f84a25f"},{"name":"write-routes-manifest","duration":904,"timestamp":101668278924,"id":66,"parentId":1,"tags":{},"startTime":1781581051072,"traceId":"b5d2378e0f84a25f"},{"name":"load-dotenv","duration":35,"timestamp":101668297159,"id":69,"parentId":68,"tags":{},"startTime":1781581051090,"traceId":"b5d2378e0f84a25f"},{"name":"run-export-path-map","duration":361,"timestamp":101668301958,"id":70,"parentId":68,"tags":{},"startTime":1781581051095,"traceId":"b5d2378e0f84a25f"},{"name":"next-export","duration":642431,"timestamp":101668296308,"id":68,"parentId":1,"tags":{},"startTime":1781581051090,"traceId":"b5d2378e0f84a25f"},{"name":"move-exported-app-not-found-","duration":1969,"timestamp":101668940336,"id":71,"parentId":67,"tags":{},"startTime":1781581051734,"traceId":"b5d2378e0f84a25f"},{"name":"move-exported-app-global-error-","duration":1438,"timestamp":101668942416,"id":72,"parentId":67,"tags":{},"startTime":1781581051736,"traceId":"b5d2378e0f84a25f"},{"name":"static-generation","duration":661424,"timestamp":101668285427,"id":67,"parentId":1,"tags":{},"startTime":1781581051079,"traceId":"b5d2378e0f84a25f"},{"name":"write-routes-manifest","duration":847,"timestamp":101668946956,"id":73,"parentId":1,"tags":{},"startTime":1781581051740,"traceId":"b5d2378e0f84a25f"},{"name":"print-tree-view","duration":4358,"timestamp":101668963737,"id":74,"parentId":1,"tags":{},"startTime":1781581051757,"traceId":"b5d2378e0f84a25f"},{"name":"write-route-bundle-stats","duration":11186,"timestamp":101668968129,"id":75,"parentId":1,"tags":{},"startTime":1781581051761,"traceId":"b5d2378e0f84a25f"},{"name":"telemetry-flush","duration":196909,"timestamp":101668979352,"id":76,"parentId":1,"tags":{},"startTime":1781581051773,"traceId":"b5d2378e0f84a25f"},{"name":"next-build","duration":8952303,"timestamp":101660223981,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781581043017,"traceId":"b5d2378e0f84a25f"}]
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":2482106,"timestamp":38945768473,"id":14,"parentId":1,"tags":{},"startTime":1781518329967,"traceId":"bef02229efd60db2"},{"name":"turbopack-build-events","duration":68,"timestamp":38946079902,"id":15,"parentId":1,"tags":{},"startTime":1781518330279,"traceId":"bef02229efd60db2"},{"name":"run-typescript","duration":4081290,"timestamp":38948262533,"id":16,"parentId":1,"tags":{},"startTime":1781518332462,"traceId":"bef02229efd60db2"},{"name":"static-check","duration":763988,"timestamp":38952480168,"id":19,"parentId":1,"tags":{},"startTime":1781518336679,"traceId":"bef02229efd60db2"},{"name":"static-generation","duration":675435,"timestamp":38953250344,"id":59,"parentId":1,"tags":{},"startTime":1781518337449,"traceId":"bef02229efd60db2"},{"name":"telemetry-flush","duration":174996,"timestamp":38953956802,"id":68,"parentId":1,"tags":{},"startTime":1781518338156,"traceId":"bef02229efd60db2"},{"name":"next-build","duration":8481015,"timestamp":38945650806,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781518329850,"traceId":"bef02229efd60db2"}]
1
+ [{"name":"run-turbopack","duration":2708649,"timestamp":101660333048,"id":14,"parentId":1,"tags":{},"startTime":1781581043126,"traceId":"b5d2378e0f84a25f"},{"name":"turbopack-build-events","duration":72,"timestamp":101660716387,"id":15,"parentId":1,"tags":{},"startTime":1781581043510,"traceId":"b5d2378e0f84a25f"},{"name":"run-typescript","duration":4272171,"timestamp":101663053353,"id":16,"parentId":1,"tags":{},"startTime":1781581045847,"traceId":"b5d2378e0f84a25f"},{"name":"static-check","duration":800781,"timestamp":101667476861,"id":19,"parentId":1,"tags":{},"startTime":1781581050270,"traceId":"b5d2378e0f84a25f"},{"name":"static-generation","duration":661424,"timestamp":101668285427,"id":67,"parentId":1,"tags":{},"startTime":1781581051079,"traceId":"b5d2378e0f84a25f"},{"name":"telemetry-flush","duration":196909,"timestamp":101668979352,"id":76,"parentId":1,"tags":{},"startTime":1781581051773,"traceId":"b5d2378e0f84a25f"},{"name":"next-build","duration":8952303,"timestamp":101660223981,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781581043017,"traceId":"b5d2378e0f84a25f"}]
@@ -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"
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"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -27,6 +27,10 @@ interface ParamMap {
27
27
  "/api/sessions/start": {}
28
28
  "/api/sessions/stats": {}
29
29
  "/api/sessions/stop": {}
30
+ "/api/sql/connections": {}
31
+ "/api/sql/mcp": {}
32
+ "/api/sql/query": {}
33
+ "/api/sql/schema": {}
30
34
  }
31
35
 
32
36
 
@@ -191,6 +191,42 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
191
191
  type __Unused = __Check
192
192
  }
193
193
 
194
+ // Validate ../../src/app/api/sql/connections/route.ts
195
+ {
196
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/sql/connections">> = Specific
197
+ const handler = {} as typeof import("../../src/app/api/sql/connections/route.js")
198
+ type __Check = __IsExpected<typeof handler>
199
+ // @ts-ignore
200
+ type __Unused = __Check
201
+ }
202
+
203
+ // Validate ../../src/app/api/sql/mcp/route.ts
204
+ {
205
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/sql/mcp">> = Specific
206
+ const handler = {} as typeof import("../../src/app/api/sql/mcp/route.js")
207
+ type __Check = __IsExpected<typeof handler>
208
+ // @ts-ignore
209
+ type __Unused = __Check
210
+ }
211
+
212
+ // Validate ../../src/app/api/sql/query/route.ts
213
+ {
214
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/sql/query">> = Specific
215
+ const handler = {} as typeof import("../../src/app/api/sql/query/route.js")
216
+ type __Check = __IsExpected<typeof handler>
217
+ // @ts-ignore
218
+ type __Unused = __Check
219
+ }
220
+
221
+ // Validate ../../src/app/api/sql/schema/route.ts
222
+ {
223
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/sql/schema">> = Specific
224
+ const handler = {} as typeof import("../../src/app/api/sql/schema/route.js")
225
+ type __Check = __IsExpected<typeof handler>
226
+ // @ts-ignore
227
+ type __Unused = __Check
228
+ }
229
+
194
230
 
195
231
 
196
232
 
package/bin/cli.js CHANGED
@@ -4,6 +4,82 @@
4
4
  const { spawn } = require('child_process');
5
5
  const path = require('path');
6
6
 
7
+ if (process.argv[2] === 'mcp') {
8
+ const readline = require('readline');
9
+ const http = require('http');
10
+
11
+ let wsRoot = process.argv[3] || process.env.ORIGINAL_CWD || process.cwd();
12
+ wsRoot = path.resolve(wsRoot).replace(/\\/g, '/');
13
+
14
+ console.error(`[NeuralLoom MCP Bridge] Workspace context: ${wsRoot}`);
15
+ console.error(`[NeuralLoom MCP Bridge] Connecting to Next.js server on http://localhost:3000...`);
16
+
17
+ const rl = readline.createInterface({
18
+ input: process.stdin,
19
+ output: process.stdout,
20
+ terminal: false
21
+ });
22
+
23
+ rl.on('line', (line) => {
24
+ if (!line.trim()) return;
25
+
26
+ let requestObj;
27
+ try {
28
+ requestObj = JSON.parse(line);
29
+ } catch (e) {
30
+ const errResponse = {
31
+ jsonrpc: "2.0",
32
+ id: null,
33
+ error: { code: -32700, message: "Parse error" }
34
+ };
35
+ process.stdout.write(JSON.stringify(errResponse) + "\n");
36
+ return;
37
+ }
38
+
39
+ const payload = JSON.stringify(requestObj);
40
+ const options = {
41
+ hostname: 'localhost',
42
+ port: 3000,
43
+ path: '/api/sql/mcp',
44
+ method: 'POST',
45
+ headers: {
46
+ 'Content-Type': 'application/json',
47
+ 'Content-Length': Buffer.byteLength(payload),
48
+ 'x-workspace-root': wsRoot
49
+ }
50
+ };
51
+
52
+ const req = http.request(options, (res) => {
53
+ let data = '';
54
+ res.on('data', (chunk) => { data += chunk; });
55
+ res.on('end', () => {
56
+ if (res.statusCode === 204) {
57
+ return;
58
+ }
59
+ process.stdout.write(data + "\n");
60
+ });
61
+ });
62
+
63
+ req.on('error', (err) => {
64
+ console.error(`[NeuralLoom MCP Bridge ERROR] Failed to connect to local server: ${err.message}`);
65
+ const errResponse = {
66
+ jsonrpc: "2.0",
67
+ id: requestObj.id || null,
68
+ error: {
69
+ code: -32603,
70
+ message: "NeuralLoom backend server is offline. Please launch the dashboard first using 'npm run dev' or 'neural-loom'."
71
+ }
72
+ };
73
+ process.stdout.write(JSON.stringify(errResponse) + "\n");
74
+ });
75
+
76
+ req.write(payload);
77
+ req.end();
78
+ });
79
+
80
+ return;
81
+ }
82
+
7
83
  const originalCwd = process.cwd();
8
84
  const fs = require('fs');
9
85
  const os = require('os');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neural-loom",
3
- "version": "0.2.47",
3
+ "version": "0.2.49",
4
4
  "bin": {
5
5
  "neural-loom": "./bin/cli.js"
6
6
  },
@@ -37,4 +37,4 @@
37
37
  "eslint-config-next": "16.2.6",
38
38
  "typescript": "^5"
39
39
  }
40
- }
40
+ }
@@ -0,0 +1,60 @@
1
+ import { NextResponse } from "next/server";
2
+ import { ConnectionManager } from "@/lib/sql/ConnectionManager";
3
+
4
+ export async function GET(request: Request) {
5
+ try {
6
+ const { searchParams } = new URL(request.url);
7
+ const root = searchParams.get("root") || undefined;
8
+ const data = await ConnectionManager.getProfiles(root);
9
+ return NextResponse.json({ success: true, ...data });
10
+ } catch (error: any) {
11
+ return NextResponse.json({ error: error.message || String(error) }, { status: 500 });
12
+ }
13
+ }
14
+
15
+ export async function POST(request: Request) {
16
+ try {
17
+ const body = await request.json();
18
+ const { action, profile, isGlobal, root, profileId } = body;
19
+
20
+ if (action === "save") {
21
+ if (!profile || !profile.id || !profile.name || !profile.type) {
22
+ return NextResponse.json({ error: "Missing required profile parameters" }, { status: 400 });
23
+ }
24
+ await ConnectionManager.saveProfile(profile, !!isGlobal, root);
25
+ return NextResponse.json({ success: true, message: "Profile saved successfully" });
26
+ }
27
+
28
+ if (action === "delete") {
29
+ if (!profileId) {
30
+ return NextResponse.json({ error: "Missing required parameter 'profileId'" }, { status: 400 });
31
+ }
32
+ await ConnectionManager.deleteProfile(profileId, !!isGlobal, root);
33
+ return NextResponse.json({ success: true, message: "Profile deleted successfully" });
34
+ }
35
+
36
+ if (action === "set_active") {
37
+ await ConnectionManager.setActiveProfile(profileId || null, !!isGlobal, root);
38
+ return NextResponse.json({ success: true, message: "Active profile updated successfully" });
39
+ }
40
+
41
+ if (action === "test") {
42
+ if (!profile) {
43
+ return NextResponse.json({ error: "Missing required parameter 'profile'" }, { status: 400 });
44
+ }
45
+ const adapter = ConnectionManager.createAdapter(profile, root);
46
+ try {
47
+ await adapter.connect();
48
+ await adapter.listTables(); // Quick verify
49
+ await adapter.disconnect();
50
+ return NextResponse.json({ success: true, message: "Connection test successful!" });
51
+ } catch (err: any) {
52
+ return NextResponse.json({ success: false, error: err.message || String(err) });
53
+ }
54
+ }
55
+
56
+ return NextResponse.json({ error: "Invalid action" }, { status: 400 });
57
+ } catch (error: any) {
58
+ return NextResponse.json({ error: error.message || String(error) }, { status: 500 });
59
+ }
60
+ }
@@ -0,0 +1,27 @@
1
+ import { NextResponse } from "next/server";
2
+ import { McpServer } from "@/lib/sql/McpServer";
3
+
4
+ export async function POST(request: Request) {
5
+ try {
6
+ const workspaceRoot = request.headers.get("x-workspace-root") || undefined;
7
+ const body = await request.json();
8
+
9
+ const mcpServer = new McpServer(workspaceRoot);
10
+ const response = await mcpServer.handleMessage(body);
11
+
12
+ if (response === null) {
13
+ return new Response("", { status: 204 });
14
+ }
15
+
16
+ return NextResponse.json(response);
17
+ } catch (error: any) {
18
+ return NextResponse.json({
19
+ jsonrpc: "2.0",
20
+ id: null,
21
+ error: {
22
+ code: -32603,
23
+ message: "Internal server error: " + (error.message || String(error))
24
+ }
25
+ }, { status: 500 });
26
+ }
27
+ }
@@ -0,0 +1,56 @@
1
+ import { NextResponse } from "next/server";
2
+ import { ConnectionManager } from "@/lib/sql/ConnectionManager";
3
+
4
+ const isMutation = (sql: string): boolean => {
5
+ const clean = sql.trim().toLowerCase();
6
+ return (
7
+ clean.startsWith("insert") ||
8
+ clean.startsWith("update") ||
9
+ clean.startsWith("delete") ||
10
+ clean.startsWith("drop") ||
11
+ clean.startsWith("alter") ||
12
+ clean.startsWith("create") ||
13
+ clean.startsWith("truncate") ||
14
+ clean.startsWith("replace")
15
+ );
16
+ };
17
+
18
+ export async function POST(request: Request) {
19
+ try {
20
+ const body = await request.json();
21
+ const { sql, root } = body;
22
+
23
+ if (!sql || !sql.trim()) {
24
+ return NextResponse.json({ error: "Missing parameter 'sql'" }, { status: 400 });
25
+ }
26
+
27
+ const active = await ConnectionManager.getActiveAdapter(root);
28
+ if (!active) {
29
+ return NextResponse.json({
30
+ error: "No active database connection configured. Please set up and select an active profile in the database panel."
31
+ }, { status: 400 });
32
+ }
33
+
34
+ const { adapter, profile } = active;
35
+
36
+ if (profile.readOnly && isMutation(sql)) {
37
+ return NextResponse.json({
38
+ error: "This connection profile is configured as Read-Only. Modifications are disabled."
39
+ }, { status: 403 });
40
+ }
41
+
42
+ const startTime = Date.now();
43
+ const result = await adapter.query(sql);
44
+ const durationMs = Date.now() - startTime;
45
+
46
+ return NextResponse.json({
47
+ success: true,
48
+ rows: result.rows,
49
+ fields: result.fields,
50
+ affectedRows: result.affectedRows,
51
+ durationMs
52
+ });
53
+ } catch (error: any) {
54
+ return NextResponse.json({ error: error.message || String(error) }, { status: 500 });
55
+ }
56
+ }
@@ -0,0 +1,42 @@
1
+ import { NextResponse } from "next/server";
2
+ import { ConnectionManager } from "@/lib/sql/ConnectionManager";
3
+
4
+ export async function GET(request: Request) {
5
+ try {
6
+ const { searchParams } = new URL(request.url);
7
+ const root = searchParams.get("root") || undefined;
8
+ const action = searchParams.get("action");
9
+
10
+ const active = await ConnectionManager.getActiveAdapter(root);
11
+ if (!active) {
12
+ return NextResponse.json({
13
+ error: "No active database connection configured."
14
+ }, { status: 400 });
15
+ }
16
+
17
+ const { adapter } = active;
18
+
19
+ if (action === "list_tables") {
20
+ const tables = await adapter.listTables();
21
+ return NextResponse.json({ success: true, tables });
22
+ }
23
+
24
+ if (action === "describe_table") {
25
+ const table = searchParams.get("table");
26
+ if (!table) {
27
+ return NextResponse.json({ error: "Missing required parameter 'table'" }, { status: 400 });
28
+ }
29
+ const columns = await adapter.describeTable(table);
30
+ return NextResponse.json({ success: true, columns });
31
+ }
32
+
33
+ if (action === "summary") {
34
+ const summary = await adapter.getSchemaSummary();
35
+ return NextResponse.json({ success: true, summary });
36
+ }
37
+
38
+ return NextResponse.json({ error: "Invalid action. Must be 'list_tables', 'describe_table', or 'summary'" }, { status: 400 });
39
+ } catch (error: any) {
40
+ return NextResponse.json({ error: error.message || String(error) }, { status: 500 });
41
+ }
42
+ }