neural-loom 0.2.17 → 0.2.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.previewinfo +1 -1
- package/.next/cache/.rscinfo +1 -1
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/diagnostics/route-bundle-stats.json +2 -2
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/api/context/aider/route.js.nft.json +1 -1
- package/.next/server/app/api/context/claude/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
- package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js +7 -2
- package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0iqaxhx._.js +5 -5
- package/.next/server/chunks/[root-of-the-server]__0iqaxhx._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0qyrt6_._.js +1 -1
- package/.next/server/chunks/[root-of-the-server]__0qyrt6_._.js.map +1 -1
- package/.next/server/chunks/[root-of-the-server]__0qz~w0~._.js +6 -6
- package/.next/server/chunks/[root-of-the-server]__0qz~w0~._.js.map +1 -1
- package/.next/server/chunks/ssr/_0t7oqy6._.js +1 -1
- package/.next/server/chunks/ssr/_0t7oqy6._.js.map +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/01.1lqu6kmllv.js +1 -0
- package/.next/trace +1 -1
- package/.next/trace-build +1 -1
- package/package.json +1 -1
- package/src/app/api/sessions/launch/route.ts +4 -1
- package/src/app/page.tsx +115 -18
- package/src/lib/agents/AgentRunner.ts +2 -2
- package/src/lib/agents/SessionManager.ts +7 -1
- package/src/lib/agents/ShellRunner.ts +159 -0
- package/src/lib/recents.ts +19 -2
- package/.next/static/chunks/0bd3rlzi9lh-u.js +0 -1
- /package/.next/static/{5kCkuutustVYfLkGO2JIi → W3UxhE_D02EcHxTzdXKHX}/_buildManifest.js +0 -0
- /package/.next/static/{5kCkuutustVYfLkGO2JIi → W3UxhE_D02EcHxTzdXKHX}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{5kCkuutustVYfLkGO2JIi → W3UxhE_D02EcHxTzdXKHX}/_ssgManifest.js +0 -0
package/.next/trace
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":357,"timestamp":121258431658,"id":4,"parentId":1,"tags":{},"startTime":1781341994202,"traceId":"8688474b07a00073"},{"name":"load-custom-routes","duration":427,"timestamp":121258432151,"id":5,"parentId":1,"tags":{},"startTime":1781341994203,"traceId":"8688474b07a00073"},{"name":"create-dist-dir","duration":724,"timestamp":121258432616,"id":6,"parentId":1,"tags":{},"startTime":1781341994203,"traceId":"8688474b07a00073"},{"name":"clean","duration":614,"timestamp":121258436542,"id":7,"parentId":1,"tags":{},"startTime":1781341994207,"traceId":"8688474b07a00073"},{"name":"discover-routes","duration":9549,"timestamp":121258463121,"id":8,"parentId":1,"tags":{},"startTime":1781341994234,"traceId":"8688474b07a00073"},{"name":"create-root-mapping","duration":112,"timestamp":121258472741,"id":9,"parentId":1,"tags":{},"startTime":1781341994243,"traceId":"8688474b07a00073"},{"name":"generate-route-types","duration":18986,"timestamp":121258475084,"id":10,"parentId":1,"tags":{},"startTime":1781341994246,"traceId":"8688474b07a00073"},{"name":"public-dir-conflict-check","duration":106,"timestamp":121258494228,"id":11,"parentId":1,"tags":{},"startTime":1781341994265,"traceId":"8688474b07a00073"},{"name":"generate-routes-manifest","duration":2661,"timestamp":121258494452,"id":12,"parentId":1,"tags":{},"startTime":1781341994265,"traceId":"8688474b07a00073"},{"name":"run-turbopack","duration":2566029,"timestamp":121258505273,"id":14,"parentId":1,"tags":{},"startTime":1781341994276,"traceId":"8688474b07a00073"},{"name":"turbopack-build-events","duration":62,"timestamp":121258816573,"id":15,"parentId":1,"tags":{},"startTime":1781341994587,"traceId":"8688474b07a00073"},{"name":"run-typescript","duration":3916701,"timestamp":121261084165,"id":16,"parentId":1,"tags":{},"startTime":1781341996855,"traceId":"8688474b07a00073"},{"name":"generate-required-server-files","duration":1445,"timestamp":121265001724,"id":18,"parentId":1,"tags":{},"startTime":1781342000772,"traceId":"8688474b07a00073"},{"name":"check-static-error-page","duration":7320,"timestamp":121265134742,"id":20,"parentId":19,"tags":{},"startTime":1781342000905,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":599827,"timestamp":121265147251,"id":41,"parentId":22,"tags":{},"startTime":1781342000918,"traceId":"8688474b07a00073"},{"name":"check-page","duration":609618,"timestamp":121265137581,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1781342000908,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":721689,"timestamp":121265147363,"id":42,"parentId":23,"tags":{},"startTime":1781342000918,"traceId":"8688474b07a00073"},{"name":"check-page","duration":731239,"timestamp":121265137901,"id":23,"parentId":19,"tags":{"page":"/api/context/aider"},"startTime":1781342000908,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":722579,"timestamp":121265148140,"id":48,"parentId":29,"tags":{},"startTime":1781342000919,"traceId":"8688474b07a00073"},{"name":"check-page","duration":731601,"timestamp":121265139185,"id":29,"parentId":19,"tags":{"page":"/api/recents"},"startTime":1781342000910,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":732541,"timestamp":121265147542,"id":44,"parentId":25,"tags":{},"startTime":1781342000918,"traceId":"8688474b07a00073"},{"name":"check-page","duration":741804,"timestamp":121265138333,"id":25,"parentId":19,"tags":{"page":"/api/context"},"startTime":1781342000909,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":735100,"timestamp":121265146927,"id":40,"parentId":21,"tags":{},"startTime":1781342000917,"traceId":"8688474b07a00073"},{"name":"check-page","duration":745605,"timestamp":121265136477,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1781342000907,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":742480,"timestamp":121265147635,"id":45,"parentId":26,"tags":{},"startTime":1781342000918,"traceId":"8688474b07a00073"},{"name":"check-page","duration":751644,"timestamp":121265138528,"id":26,"parentId":19,"tags":{"page":"/api/context/ssh"},"startTime":1781342000909,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":746750,"timestamp":121265147451,"id":43,"parentId":24,"tags":{},"startTime":1781342000918,"traceId":"8688474b07a00073"},{"name":"check-page","duration":756138,"timestamp":121265138121,"id":24,"parentId":19,"tags":{"page":"/api/context/claude"},"startTime":1781342000909,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":751038,"timestamp":121265147875,"id":46,"parentId":27,"tags":{},"startTime":1781342000918,"traceId":"8688474b07a00073"},{"name":"check-page","duration":760242,"timestamp":121265138721,"id":27,"parentId":19,"tags":{"page":"/api/files"},"startTime":1781342000909,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":754513,"timestamp":121265148731,"id":54,"parentId":35,"tags":{},"startTime":1781342000919,"traceId":"8688474b07a00073"},{"name":"check-page","duration":762736,"timestamp":121265140568,"id":35,"parentId":19,"tags":{"page":"/api/sessions/start"},"startTime":1781342000911,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":755829,"timestamp":121265148349,"id":49,"parentId":30,"tags":{},"startTime":1781342000919,"traceId":"8688474b07a00073"},{"name":"check-page","duration":764800,"timestamp":121265139427,"id":30,"parentId":19,"tags":{"page":"/api/sessions/inject"},"startTime":1781342000910,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":756959,"timestamp":121265148774,"id":55,"parentId":36,"tags":{},"startTime":1781342000919,"traceId":"8688474b07a00073"},{"name":"check-page","duration":764801,"timestamp":121265140969,"id":36,"parentId":19,"tags":{"page":"/api/sessions/stats"},"startTime":1781342000912,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":757363,"timestamp":121265148686,"id":53,"parentId":34,"tags":{},"startTime":1781342000919,"traceId":"8688474b07a00073"},{"name":"check-page","duration":765790,"timestamp":121265140286,"id":34,"parentId":19,"tags":{"page":"/api/sessions/scope"},"startTime":1781342000911,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":757209,"timestamp":121265152274,"id":58,"parentId":39,"tags":{},"startTime":1781342000923,"traceId":"8688474b07a00073"},{"name":"check-page","duration":767755,"timestamp":121265141769,"id":39,"parentId":19,"tags":{"page":"/"},"startTime":1781342000912,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":760672,"timestamp":121265148969,"id":57,"parentId":38,"tags":{},"startTime":1781342000920,"traceId":"8688474b07a00073"},{"name":"check-page","duration":768258,"timestamp":121265141400,"id":38,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1781342000912,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":762400,"timestamp":121265148557,"id":51,"parentId":32,"tags":{},"startTime":1781342000919,"traceId":"8688474b07a00073"},{"name":"check-page","duration":771083,"timestamp":121265139908,"id":32,"parentId":19,"tags":{"page":"/api/sessions/launch"},"startTime":1781342000910,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":769142,"timestamp":121265148026,"id":47,"parentId":28,"tags":{},"startTime":1781342000919,"traceId":"8688474b07a00073"},{"name":"check-page","duration":778260,"timestamp":121265138943,"id":28,"parentId":19,"tags":{"page":"/api/git"},"startTime":1781342000909,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":772960,"timestamp":121265148621,"id":52,"parentId":33,"tags":{},"startTime":1781342000919,"traceId":"8688474b07a00073"},{"name":"check-page","duration":781528,"timestamp":121265140101,"id":33,"parentId":19,"tags":{"page":"/api/sessions"},"startTime":1781342000911,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":773942,"timestamp":121265148487,"id":50,"parentId":31,"tags":{},"startTime":1781342000919,"traceId":"8688474b07a00073"},{"name":"check-page","duration":782781,"timestamp":121265139686,"id":31,"parentId":19,"tags":{"page":"/api/sessions/input"},"startTime":1781342000910,"traceId":"8688474b07a00073"},{"name":"is-page-static","duration":782103,"timestamp":121265148813,"id":56,"parentId":37,"tags":{},"startTime":1781342000919,"traceId":"8688474b07a00073"},{"name":"check-page","duration":789765,"timestamp":121265141194,"id":37,"parentId":19,"tags":{"page":"/api/sessions/stop"},"startTime":1781342000912,"traceId":"8688474b07a00073"},{"name":"static-check","duration":796716,"timestamp":121265134269,"id":19,"parentId":1,"tags":{},"startTime":1781342000905,"traceId":"8688474b07a00073"},{"name":"write-routes-manifest","duration":900,"timestamp":121265932156,"id":60,"parentId":1,"tags":{},"startTime":1781342001703,"traceId":"8688474b07a00073"},{"name":"load-dotenv","duration":41,"timestamp":121265953555,"id":63,"parentId":62,"tags":{},"startTime":1781342001724,"traceId":"8688474b07a00073"},{"name":"run-export-path-map","duration":498,"timestamp":121265958786,"id":64,"parentId":62,"tags":{},"startTime":1781342001729,"traceId":"8688474b07a00073"},{"name":"next-export","duration":691152,"timestamp":121265952393,"id":62,"parentId":1,"tags":{},"startTime":1781342001723,"traceId":"8688474b07a00073"},{"name":"move-exported-app-not-found-","duration":2309,"timestamp":121266645141,"id":65,"parentId":61,"tags":{},"startTime":1781342002416,"traceId":"8688474b07a00073"},{"name":"move-exported-app-global-error-","duration":1659,"timestamp":121266647573,"id":66,"parentId":61,"tags":{},"startTime":1781342002418,"traceId":"8688474b07a00073"},{"name":"static-generation","duration":715196,"timestamp":121265937993,"id":61,"parentId":1,"tags":{},"startTime":1781342001709,"traceId":"8688474b07a00073"},{"name":"write-routes-manifest","duration":804,"timestamp":121266653332,"id":67,"parentId":1,"tags":{},"startTime":1781342002424,"traceId":"8688474b07a00073"},{"name":"print-tree-view","duration":3790,"timestamp":121266670216,"id":68,"parentId":1,"tags":{},"startTime":1781342002441,"traceId":"8688474b07a00073"},{"name":"write-route-bundle-stats","duration":17557,"timestamp":121266674042,"id":69,"parentId":1,"tags":{},"startTime":1781342002445,"traceId":"8688474b07a00073"},{"name":"telemetry-flush","duration":163669,"timestamp":121266691641,"id":70,"parentId":1,"tags":{},"startTime":1781342002462,"traceId":"8688474b07a00073"},{"name":"next-build","duration":8479521,"timestamp":121258375813,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781341994146,"traceId":"8688474b07a00073"}]
|
|
1
|
+
[{"name":"generate-buildid","duration":227,"timestamp":124430718032,"id":4,"parentId":1,"tags":{},"startTime":1781345166489,"traceId":"03ec074240b63189"},{"name":"load-custom-routes","duration":348,"timestamp":124430718377,"id":5,"parentId":1,"tags":{},"startTime":1781345166489,"traceId":"03ec074240b63189"},{"name":"create-dist-dir","duration":531,"timestamp":124430718757,"id":6,"parentId":1,"tags":{},"startTime":1781345166490,"traceId":"03ec074240b63189"},{"name":"clean","duration":532,"timestamp":124430720256,"id":7,"parentId":1,"tags":{},"startTime":1781345166491,"traceId":"03ec074240b63189"},{"name":"discover-routes","duration":7971,"timestamp":124430742739,"id":8,"parentId":1,"tags":{},"startTime":1781345166514,"traceId":"03ec074240b63189"},{"name":"create-root-mapping","duration":62,"timestamp":124430750764,"id":9,"parentId":1,"tags":{},"startTime":1781345166522,"traceId":"03ec074240b63189"},{"name":"generate-route-types","duration":18116,"timestamp":124430752252,"id":10,"parentId":1,"tags":{},"startTime":1781345166523,"traceId":"03ec074240b63189"},{"name":"public-dir-conflict-check","duration":93,"timestamp":124430770501,"id":11,"parentId":1,"tags":{},"startTime":1781345166542,"traceId":"03ec074240b63189"},{"name":"generate-routes-manifest","duration":2507,"timestamp":124430770697,"id":12,"parentId":1,"tags":{},"startTime":1781345166542,"traceId":"03ec074240b63189"},{"name":"run-turbopack","duration":2338917,"timestamp":124430780739,"id":14,"parentId":1,"tags":{},"startTime":1781345166552,"traceId":"03ec074240b63189"},{"name":"turbopack-build-events","duration":66,"timestamp":124431072169,"id":15,"parentId":1,"tags":{},"startTime":1781345166843,"traceId":"03ec074240b63189"},{"name":"run-typescript","duration":3601131,"timestamp":124433130391,"id":16,"parentId":1,"tags":{},"startTime":1781345168901,"traceId":"03ec074240b63189"},{"name":"generate-required-server-files","duration":1254,"timestamp":124436732323,"id":18,"parentId":1,"tags":{},"startTime":1781345172503,"traceId":"03ec074240b63189"},{"name":"check-static-error-page","duration":8735,"timestamp":124436875306,"id":20,"parentId":19,"tags":{},"startTime":1781345172646,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":576913,"timestamp":124436889280,"id":41,"parentId":22,"tags":{},"startTime":1781345172660,"traceId":"03ec074240b63189"},{"name":"check-page","duration":587619,"timestamp":124436878712,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1781345172650,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":703353,"timestamp":124436889470,"id":43,"parentId":24,"tags":{},"startTime":1781345172661,"traceId":"03ec074240b63189"},{"name":"check-page","duration":713548,"timestamp":124436879347,"id":24,"parentId":19,"tags":{"page":"/api/context/claude"},"startTime":1781345172650,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":715786,"timestamp":124436889620,"id":45,"parentId":26,"tags":{},"startTime":1781345172661,"traceId":"03ec074240b63189"},{"name":"check-page","duration":725606,"timestamp":124436879848,"id":26,"parentId":19,"tags":{"page":"/api/context/ssh"},"startTime":1781345172651,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":719164,"timestamp":124436890081,"id":48,"parentId":29,"tags":{},"startTime":1781345172661,"traceId":"03ec074240b63189"},{"name":"check-page","duration":728653,"timestamp":124436880643,"id":29,"parentId":19,"tags":{"page":"/api/recents"},"startTime":1781345172652,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":723956,"timestamp":124436889980,"id":47,"parentId":28,"tags":{},"startTime":1781345172661,"traceId":"03ec074240b63189"},{"name":"check-page","duration":733599,"timestamp":124436880379,"id":28,"parentId":19,"tags":{"page":"/api/git"},"startTime":1781345172651,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":726358,"timestamp":124436889389,"id":42,"parentId":23,"tags":{},"startTime":1781345172660,"traceId":"03ec074240b63189"},{"name":"check-page","duration":736713,"timestamp":124436879082,"id":23,"parentId":19,"tags":{"page":"/api/context/aider"},"startTime":1781345172650,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":728818,"timestamp":124436888959,"id":40,"parentId":21,"tags":{},"startTime":1781345172660,"traceId":"03ec074240b63189"},{"name":"check-page","duration":740525,"timestamp":124436877305,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1781345172648,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":735911,"timestamp":124436889544,"id":44,"parentId":25,"tags":{},"startTime":1781345172661,"traceId":"03ec074240b63189"},{"name":"check-page","duration":745909,"timestamp":124436879596,"id":25,"parentId":19,"tags":{"page":"/api/context"},"startTime":1781345172651,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":745931,"timestamp":124436889829,"id":46,"parentId":27,"tags":{},"startTime":1781345172661,"traceId":"03ec074240b63189"},{"name":"check-page","duration":755721,"timestamp":124436880097,"id":27,"parentId":19,"tags":{"page":"/api/files"},"startTime":1781345172651,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":748384,"timestamp":124436890632,"id":55,"parentId":36,"tags":{},"startTime":1781345172662,"traceId":"03ec074240b63189"},{"name":"check-page","duration":756235,"timestamp":124436882831,"id":36,"parentId":19,"tags":{"page":"/api/sessions/stats"},"startTime":1781345172654,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":748845,"timestamp":124436890824,"id":57,"parentId":38,"tags":{},"startTime":1781345172662,"traceId":"03ec074240b63189"},{"name":"check-page","duration":756420,"timestamp":124436883296,"id":38,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1781345172654,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":751943,"timestamp":124436890559,"id":53,"parentId":34,"tags":{},"startTime":1781345172662,"traceId":"03ec074240b63189"},{"name":"check-page","duration":760630,"timestamp":124436881918,"id":34,"parentId":19,"tags":{"page":"/api/sessions/scope"},"startTime":1781345172653,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":752277,"timestamp":124436890457,"id":51,"parentId":32,"tags":{},"startTime":1781345172662,"traceId":"03ec074240b63189"},{"name":"check-page","duration":761339,"timestamp":124436881420,"id":32,"parentId":19,"tags":{"page":"/api/sessions/launch"},"startTime":1781345172653,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":754643,"timestamp":124436890597,"id":54,"parentId":35,"tags":{},"startTime":1781345172662,"traceId":"03ec074240b63189"},{"name":"check-page","duration":762971,"timestamp":124436882300,"id":35,"parentId":19,"tags":{"page":"/api/sessions/start"},"startTime":1781345172653,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":751158,"timestamp":124436894177,"id":58,"parentId":39,"tags":{},"startTime":1781345172665,"traceId":"03ec074240b63189"},{"name":"check-page","duration":761642,"timestamp":124436883704,"id":39,"parentId":19,"tags":{"page":"/"},"startTime":1781345172655,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":755381,"timestamp":124436890269,"id":49,"parentId":30,"tags":{},"startTime":1781345172661,"traceId":"03ec074240b63189"},{"name":"check-page","duration":764790,"timestamp":124436880891,"id":30,"parentId":19,"tags":{"page":"/api/sessions/inject"},"startTime":1781345172652,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":763680,"timestamp":124436890392,"id":50,"parentId":31,"tags":{},"startTime":1781345172661,"traceId":"03ec074240b63189"},{"name":"check-page","duration":772946,"timestamp":124436881170,"id":31,"parentId":19,"tags":{"page":"/api/sessions/input"},"startTime":1781345172652,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":763516,"timestamp":124436890671,"id":56,"parentId":37,"tags":{},"startTime":1781345172662,"traceId":"03ec074240b63189"},{"name":"check-page","duration":771112,"timestamp":124436883086,"id":37,"parentId":19,"tags":{"page":"/api/sessions/stop"},"startTime":1781345172654,"traceId":"03ec074240b63189"},{"name":"is-page-static","duration":763727,"timestamp":124436890508,"id":52,"parentId":33,"tags":{},"startTime":1781345172662,"traceId":"03ec074240b63189"},{"name":"check-page","duration":772583,"timestamp":124436881663,"id":33,"parentId":19,"tags":{"page":"/api/sessions"},"startTime":1781345172653,"traceId":"03ec074240b63189"},{"name":"static-check","duration":779592,"timestamp":124436874671,"id":19,"parentId":1,"tags":{},"startTime":1781345172646,"traceId":"03ec074240b63189"},{"name":"write-routes-manifest","duration":863,"timestamp":124437655271,"id":60,"parentId":1,"tags":{},"startTime":1781345173426,"traceId":"03ec074240b63189"},{"name":"load-dotenv","duration":33,"timestamp":124437672218,"id":63,"parentId":62,"tags":{},"startTime":1781345173443,"traceId":"03ec074240b63189"},{"name":"run-export-path-map","duration":496,"timestamp":124437677617,"id":64,"parentId":62,"tags":{},"startTime":1781345173449,"traceId":"03ec074240b63189"},{"name":"next-export","duration":666604,"timestamp":124437671286,"id":62,"parentId":1,"tags":{},"startTime":1781345173442,"traceId":"03ec074240b63189"},{"name":"move-exported-app-not-found-","duration":2164,"timestamp":124438339682,"id":65,"parentId":61,"tags":{},"startTime":1781345174111,"traceId":"03ec074240b63189"},{"name":"move-exported-app-global-error-","duration":1470,"timestamp":124438341962,"id":66,"parentId":61,"tags":{},"startTime":1781345174113,"traceId":"03ec074240b63189"},{"name":"static-generation","duration":685947,"timestamp":124437660791,"id":61,"parentId":1,"tags":{},"startTime":1781345173432,"traceId":"03ec074240b63189"},{"name":"write-routes-manifest","duration":756,"timestamp":124438346845,"id":67,"parentId":1,"tags":{},"startTime":1781345174118,"traceId":"03ec074240b63189"},{"name":"print-tree-view","duration":3052,"timestamp":124438357942,"id":68,"parentId":1,"tags":{},"startTime":1781345174129,"traceId":"03ec074240b63189"},{"name":"write-route-bundle-stats","duration":10112,"timestamp":124438361029,"id":69,"parentId":1,"tags":{},"startTime":1781345174132,"traceId":"03ec074240b63189"},{"name":"telemetry-flush","duration":179267,"timestamp":124438371182,"id":70,"parentId":1,"tags":{},"startTime":1781345174142,"traceId":"03ec074240b63189"},{"name":"next-build","duration":7881949,"timestamp":124430668524,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781345166440,"traceId":"03ec074240b63189"}]
|
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":2338917,"timestamp":124430780739,"id":14,"parentId":1,"tags":{},"startTime":1781345166552,"traceId":"03ec074240b63189"},{"name":"turbopack-build-events","duration":66,"timestamp":124431072169,"id":15,"parentId":1,"tags":{},"startTime":1781345166843,"traceId":"03ec074240b63189"},{"name":"run-typescript","duration":3601131,"timestamp":124433130391,"id":16,"parentId":1,"tags":{},"startTime":1781345168901,"traceId":"03ec074240b63189"},{"name":"static-check","duration":779592,"timestamp":124436874671,"id":19,"parentId":1,"tags":{},"startTime":1781345172646,"traceId":"03ec074240b63189"},{"name":"static-generation","duration":685947,"timestamp":124437660791,"id":61,"parentId":1,"tags":{},"startTime":1781345173432,"traceId":"03ec074240b63189"},{"name":"telemetry-flush","duration":179267,"timestamp":124438371182,"id":70,"parentId":1,"tags":{},"startTime":1781345174142,"traceId":"03ec074240b63189"},{"name":"next-build","duration":7881949,"timestamp":124430668524,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781345166440,"traceId":"03ec074240b63189"}]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NextResponse } from "next/server";
|
|
2
2
|
import { SessionManager } from "@/lib/agents/SessionManager";
|
|
3
|
-
import { addRecent } from "@/lib/recents";
|
|
3
|
+
import { addRecent, saveLastSession } from "@/lib/recents";
|
|
4
4
|
|
|
5
5
|
export async function POST(request: Request) {
|
|
6
6
|
try {
|
|
@@ -15,6 +15,9 @@ export async function POST(request: Request) {
|
|
|
15
15
|
const manager = SessionManager.getInstance();
|
|
16
16
|
const session = await manager.createSession(type, name, workspaceRoot, scopedDirs);
|
|
17
17
|
|
|
18
|
+
// Save session config to recents
|
|
19
|
+
saveLastSession({ type, name, workspaceRoot, scopedDirs });
|
|
20
|
+
|
|
18
21
|
// Save workspace root to recents list
|
|
19
22
|
if (workspaceRoot) {
|
|
20
23
|
addRecent("workspace", workspaceRoot);
|
package/src/app/page.tsx
CHANGED
|
@@ -89,10 +89,17 @@ export default function Home() {
|
|
|
89
89
|
const [isClaudeDockerLaunch, setIsClaudeDockerLaunch] = useState<boolean>(false);
|
|
90
90
|
const [serverCwd, setServerCwd] = useState<string>("");
|
|
91
91
|
const [wsPort, setWsPort] = useState<number>(3001);
|
|
92
|
+
const [lastSessionConfig, setLastSessionConfig] = useState<{
|
|
93
|
+
type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker';
|
|
94
|
+
name?: string;
|
|
95
|
+
workspaceRoot?: string;
|
|
96
|
+
scopedDirs?: string[];
|
|
97
|
+
} | null>(null);
|
|
92
98
|
|
|
99
|
+
const activeAgents = sessions.filter(s => s.id !== "workspace-terminal");
|
|
93
100
|
const activeSession = sessions.find(s => s.id === activeSessionId);
|
|
94
|
-
const isDockerActive =
|
|
95
|
-
const isSshActive =
|
|
101
|
+
const isDockerActive = activeAgents.some(s => (s.type === 'claude-docker' || s.type === 'aider-docker') && s.status === 'running');
|
|
102
|
+
const isSshActive = activeAgents.some(s => s.type === 'claude-ssh' && s.status === 'running');
|
|
96
103
|
|
|
97
104
|
// Fetch all sessions on mount & periodically
|
|
98
105
|
const fetchSessions = async () => {
|
|
@@ -113,9 +120,24 @@ export default function Home() {
|
|
|
113
120
|
}
|
|
114
121
|
};
|
|
115
122
|
|
|
123
|
+
const fetchRecents = async () => {
|
|
124
|
+
try {
|
|
125
|
+
const res = await fetch("/api/recents");
|
|
126
|
+
if (res.ok) {
|
|
127
|
+
const data = await res.json();
|
|
128
|
+
if (data.success && data.recents && data.recents.lastSession) {
|
|
129
|
+
setLastSessionConfig(data.recents.lastSession);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
} catch (err) {
|
|
133
|
+
console.error("Failed to fetch recents:", err);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
116
137
|
useEffect(() => {
|
|
117
138
|
const initFetch = async () => {
|
|
118
139
|
await fetchSessions();
|
|
140
|
+
await fetchRecents();
|
|
119
141
|
};
|
|
120
142
|
initFetch();
|
|
121
143
|
const interval = setInterval(fetchSessions, 4000);
|
|
@@ -177,6 +199,7 @@ export default function Home() {
|
|
|
177
199
|
if (data.success) {
|
|
178
200
|
await fetchSessions();
|
|
179
201
|
setActiveSessionId(data.session.id);
|
|
202
|
+
setLastSessionConfig({ type, name: sessionName, workspaceRoot: customWorkspaceRoot, scopedDirs: customScopedDirs });
|
|
180
203
|
}
|
|
181
204
|
} catch (err) {
|
|
182
205
|
console.error("Failed to launch session:", err);
|
|
@@ -241,23 +264,78 @@ export default function Home() {
|
|
|
241
264
|
<section>
|
|
242
265
|
<h2 className={styles.sectionTitle}>Active AI Agents</h2>
|
|
243
266
|
|
|
244
|
-
{
|
|
267
|
+
{activeAgents.length === 0 ? (
|
|
245
268
|
<div className="card" style={{ padding: "3rem 1.5rem", textAlign: "center" }}>
|
|
246
269
|
<p style={{ color: "var(--muted)", marginBottom: "1.5rem" }}>
|
|
247
|
-
No active agent sessions in this workspace. Launch a
|
|
270
|
+
No active agent sessions in this workspace. Launch a Claude or Aider agent session to begin.
|
|
248
271
|
</p>
|
|
249
|
-
<
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
272
|
+
<div style={{ display: "flex", gap: "1rem", justifyContent: "center", flexWrap: "wrap" }}>
|
|
273
|
+
{lastSessionConfig && (
|
|
274
|
+
<button
|
|
275
|
+
className={styles.quickLaunchBtn}
|
|
276
|
+
onClick={() => {
|
|
277
|
+
handleLaunchSession(
|
|
278
|
+
lastSessionConfig.type,
|
|
279
|
+
lastSessionConfig.name,
|
|
280
|
+
lastSessionConfig.workspaceRoot,
|
|
281
|
+
lastSessionConfig.scopedDirs
|
|
282
|
+
);
|
|
283
|
+
}}
|
|
284
|
+
disabled={isLoading}
|
|
285
|
+
style={{
|
|
286
|
+
background: "linear-gradient(135deg, hsl(38, 92%, 50%) 0%, hsl(0, 84%, 60%) 100%)",
|
|
287
|
+
border: "none",
|
|
288
|
+
maxWidth: "200px"
|
|
289
|
+
}}
|
|
290
|
+
title={`Re-launch: ${lastSessionConfig.name || lastSessionConfig.type}`}
|
|
291
|
+
>
|
|
292
|
+
⚡ Re-launch Last Session
|
|
293
|
+
</button>
|
|
294
|
+
)}
|
|
295
|
+
<button
|
|
296
|
+
className={styles.quickLaunchBtn}
|
|
297
|
+
onClick={() => {
|
|
298
|
+
setIsClaudeDockerLaunch(false);
|
|
299
|
+
setIsClaudeWizardOpen(true);
|
|
300
|
+
}}
|
|
301
|
+
disabled={isLoading}
|
|
302
|
+
style={{
|
|
303
|
+
background: "linear-gradient(135deg, hsl(262, 83%, 60%) 0%, hsl(195, 100%, 45%) 100%)",
|
|
304
|
+
border: "none",
|
|
305
|
+
maxWidth: "200px"
|
|
306
|
+
}}
|
|
307
|
+
>
|
|
308
|
+
Launch Claude PTY
|
|
309
|
+
</button>
|
|
310
|
+
<button
|
|
311
|
+
className={styles.quickLaunchBtn}
|
|
312
|
+
onClick={() => {
|
|
313
|
+
setIsAiderDockerLaunch(false);
|
|
314
|
+
setIsAiderWizardOpen(true);
|
|
315
|
+
}}
|
|
316
|
+
disabled={isLoading}
|
|
317
|
+
style={{
|
|
318
|
+
background: "linear-gradient(135deg, hsl(210, 80%, 45%) 0%, hsl(262, 80%, 55%) 100%)",
|
|
319
|
+
border: "none",
|
|
320
|
+
maxWidth: "200px"
|
|
321
|
+
}}
|
|
322
|
+
>
|
|
323
|
+
Launch Aider PTY
|
|
324
|
+
</button>
|
|
325
|
+
</div>
|
|
326
|
+
<div style={{ marginTop: "1.5rem", fontSize: "0.75rem", color: "var(--muted)" }}>
|
|
327
|
+
Want to verify layout features first?{" "}
|
|
328
|
+
<span
|
|
329
|
+
onClick={() => handleLaunchSession('mock')}
|
|
330
|
+
style={{ color: "var(--primary)", cursor: "pointer", textDecoration: "underline" }}
|
|
331
|
+
>
|
|
332
|
+
Start simulated sandbox session
|
|
333
|
+
</span>
|
|
334
|
+
</div>
|
|
257
335
|
</div>
|
|
258
336
|
) : (
|
|
259
337
|
<div className={styles.agentGrid}>
|
|
260
|
-
{
|
|
338
|
+
{activeAgents.map(session => (
|
|
261
339
|
<div key={session.id} className={`${styles.agentCard} card ${activeSessionId === session.id ? styles.activeBorder : ""}`}>
|
|
262
340
|
<div className={styles.agentHeader}>
|
|
263
341
|
<span className={styles.agentName}>{session.name}</span>
|
|
@@ -333,7 +411,7 @@ export default function Home() {
|
|
|
333
411
|
</section>
|
|
334
412
|
|
|
335
413
|
{/* Interactive Session Terminal Display */}
|
|
336
|
-
{activeSessionId && (
|
|
414
|
+
{activeSessionId && activeSessionId !== "workspace-terminal" && (
|
|
337
415
|
<section className="card" style={{ display: "flex", flexDirection: "column", border: "1px solid var(--border-focus)" }}>
|
|
338
416
|
<div className={styles.agentHeader} style={{ justifyContent: "space-between", background: "rgba(109, 40, 217, 0.08)" }}>
|
|
339
417
|
<span style={{ fontWeight: 600, display: "flex", alignItems: "center", gap: "0.5rem" }}>
|
|
@@ -460,6 +538,20 @@ export default function Home() {
|
|
|
460
538
|
</div>
|
|
461
539
|
<ContextEditor />
|
|
462
540
|
</section>
|
|
541
|
+
|
|
542
|
+
{/* Workspace Shell Terminal */}
|
|
543
|
+
<section style={{ marginTop: "2rem" }}>
|
|
544
|
+
<h2 className={styles.sectionTitle}>Workspace Shell Terminal</h2>
|
|
545
|
+
<div className="card" style={{ display: "flex", flexDirection: "column", border: "1px solid var(--border)", padding: 0 }}>
|
|
546
|
+
<div className={styles.agentHeader} style={{ justifyContent: "space-between", background: "rgba(255, 255, 255, 0.02)" }}>
|
|
547
|
+
<span style={{ fontWeight: 600, display: "flex", alignItems: "center", gap: "0.5rem", fontSize: "0.85rem" }}>
|
|
548
|
+
💻 Local Workspace Shell (CWD: {serverCwd || "root"})
|
|
549
|
+
</span>
|
|
550
|
+
<span style={{ fontSize: "0.7rem", color: "var(--muted)" }}>Pre-configured environment</span>
|
|
551
|
+
</div>
|
|
552
|
+
<TerminalConsole sessionId="workspace-terminal" height="300px" wsPort={wsPort} />
|
|
553
|
+
</div>
|
|
554
|
+
</section>
|
|
463
555
|
</main>
|
|
464
556
|
|
|
465
557
|
{/* Right Panel: Environments & Actions */}
|
|
@@ -487,10 +579,6 @@ export default function Home() {
|
|
|
487
579
|
</section>
|
|
488
580
|
|
|
489
581
|
<section style={{ display: "flex", flexDirection: "column", gap: "0.75rem" }}>
|
|
490
|
-
<button className={styles.quickLaunchBtn} onClick={() => handleLaunchSession('mock')} disabled={isLoading}>
|
|
491
|
-
<span>⚡</span>
|
|
492
|
-
<span>Launch Mock Agent</span>
|
|
493
|
-
</button>
|
|
494
582
|
<button
|
|
495
583
|
className={styles.quickLaunchBtn}
|
|
496
584
|
onClick={() => {
|
|
@@ -581,6 +669,15 @@ export default function Home() {
|
|
|
581
669
|
<span style={{ color: "var(--primary)", cursor: "pointer" }}>→</span>
|
|
582
670
|
</li>
|
|
583
671
|
</ul>
|
|
672
|
+
<div style={{ marginTop: "1.2rem", textAlign: "center", fontSize: "0.72rem", color: "var(--muted)" }}>
|
|
673
|
+
Need to troubleshoot?{" "}
|
|
674
|
+
<span
|
|
675
|
+
onClick={() => handleLaunchSession('mock')}
|
|
676
|
+
style={{ color: "var(--primary)", cursor: "pointer", textDecoration: "underline" }}
|
|
677
|
+
>
|
|
678
|
+
Launch simulated playground sandbox
|
|
679
|
+
</span>
|
|
680
|
+
</div>
|
|
584
681
|
</section>
|
|
585
682
|
</aside>
|
|
586
683
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export interface RunnerStatus {
|
|
2
2
|
id: string;
|
|
3
3
|
name: string;
|
|
4
|
-
type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker';
|
|
4
|
+
type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker' | 'shell';
|
|
5
5
|
status: 'idle' | 'running' | 'stopped';
|
|
6
6
|
createdAt: string;
|
|
7
7
|
logsCount: number;
|
|
@@ -14,7 +14,7 @@ export interface RunnerStatus {
|
|
|
14
14
|
export abstract class AgentRunner {
|
|
15
15
|
abstract id: string;
|
|
16
16
|
abstract name: string;
|
|
17
|
-
abstract type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker';
|
|
17
|
+
abstract type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker' | 'shell';
|
|
18
18
|
abstract status: 'idle' | 'running' | 'stopped';
|
|
19
19
|
abstract createdAt: string;
|
|
20
20
|
abstract logs: string[];
|
|
@@ -8,6 +8,7 @@ import { AiderRunner } from "./AiderRunner";
|
|
|
8
8
|
import { initWebSocketServer } from "./WebSocketServer";
|
|
9
9
|
import { ContextManager } from "./ContextManager";
|
|
10
10
|
import { SessionPersister } from "./SessionPersister";
|
|
11
|
+
import { ShellRunner } from "./ShellRunner";
|
|
11
12
|
import { getWorkspaceFileFolders } from "../workspaceParser";
|
|
12
13
|
|
|
13
14
|
export class SessionManager {
|
|
@@ -19,6 +20,11 @@ export class SessionManager {
|
|
|
19
20
|
ContextManager.initializeStaging();
|
|
20
21
|
ContextManager.compileGlobalRules();
|
|
21
22
|
|
|
23
|
+
// Spawn/start permanent workspace terminal shell runner
|
|
24
|
+
const shellRunner = new ShellRunner();
|
|
25
|
+
shellRunner.start();
|
|
26
|
+
this.sessions.set(shellRunner.id, shellRunner);
|
|
27
|
+
|
|
22
28
|
// Reload persisted sessions
|
|
23
29
|
try {
|
|
24
30
|
const saved = SessionPersister.loadAllSessions();
|
|
@@ -114,7 +120,7 @@ export class SessionManager {
|
|
|
114
120
|
}
|
|
115
121
|
|
|
116
122
|
public syncWorkspaceFolders(session: AgentRunner) {
|
|
117
|
-
if (session.type === 'mock') return;
|
|
123
|
+
if (session.type === 'mock' || session.type === 'shell') return;
|
|
118
124
|
const root = session.workspaceRoot || process.env.ORIGINAL_CWD || process.cwd();
|
|
119
125
|
const currentWorkspaceFolders = getWorkspaceFileFolders(root);
|
|
120
126
|
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import type { IPty } from "node-pty";
|
|
4
|
+
import { AgentRunner, RunnerStatus } from "./AgentRunner";
|
|
5
|
+
|
|
6
|
+
function isWindows(): boolean {
|
|
7
|
+
if (typeof process === "undefined") return false;
|
|
8
|
+
const key = Object.keys(process).find(k => k.startsWith("plat") && k.endsWith("form"));
|
|
9
|
+
return !!key && (process as unknown as Record<string, unknown>)[key] === "win32";
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function findGitBash(): string | null {
|
|
13
|
+
if (!isWindows()) {
|
|
14
|
+
return "bash";
|
|
15
|
+
}
|
|
16
|
+
const pf = process.env.PROGRAMFILES || "C:\\Program Files";
|
|
17
|
+
const pf86 = process.env["PROGRAMFILES(X86)"] || "C:\\Program Files (x86)";
|
|
18
|
+
const local = process.env.LOCALAPPDATA || "";
|
|
19
|
+
|
|
20
|
+
const candidates: string[] = [
|
|
21
|
+
process.env.WINGMAN_BASH_PATH,
|
|
22
|
+
path.join(pf, "Git", "bin", "bash.exe"),
|
|
23
|
+
path.join(pf86, "Git", "bin", "bash.exe"),
|
|
24
|
+
local ? path.join(local, "Programs", "Git", "bin", "bash.exe") : "",
|
|
25
|
+
].filter((p): p is string => typeof p === "string" && p !== "");
|
|
26
|
+
|
|
27
|
+
const found = candidates.find(p => fs.existsSync(p));
|
|
28
|
+
if (found) return found;
|
|
29
|
+
|
|
30
|
+
// Fallback to PowerShell or Cmd on Windows
|
|
31
|
+
const windir = process.env.windir || "C:\\Windows";
|
|
32
|
+
const powershell = path.join(windir, "System32", "WindowsPowerShell", "v1.0", "powershell.exe");
|
|
33
|
+
if (fs.existsSync(powershell)) return powershell;
|
|
34
|
+
|
|
35
|
+
const cmd = path.join(windir, "System32", "cmd.exe");
|
|
36
|
+
if (fs.existsSync(cmd)) return cmd;
|
|
37
|
+
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export class ShellRunner extends AgentRunner {
|
|
42
|
+
id: string = "workspace-terminal";
|
|
43
|
+
name: string = "Workspace Shell";
|
|
44
|
+
type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker' | 'shell' = "shell";
|
|
45
|
+
status: 'idle' | 'running' | 'stopped' = 'idle';
|
|
46
|
+
createdAt: string = new Date().toISOString();
|
|
47
|
+
logs: string[] = [];
|
|
48
|
+
|
|
49
|
+
private ptyProcess: IPty | null = null;
|
|
50
|
+
private ptyModule: typeof import("node-pty") | null = null;
|
|
51
|
+
|
|
52
|
+
constructor() {
|
|
53
|
+
super();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private appendLog(line: string) {
|
|
57
|
+
this.logs.push(line);
|
|
58
|
+
if (this.logs.length > 5000) {
|
|
59
|
+
this.logs.shift();
|
|
60
|
+
}
|
|
61
|
+
this.emitOutput(line);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async start(): Promise<void> {
|
|
65
|
+
if (this.status === 'running') return;
|
|
66
|
+
|
|
67
|
+
const shellPath = findGitBash();
|
|
68
|
+
if (!shellPath) {
|
|
69
|
+
this.status = 'stopped';
|
|
70
|
+
this.appendLog("[System Error] Shell executable (Git Bash/PowerShell) not found.\r\n");
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
if (!this.ptyModule) {
|
|
76
|
+
this.ptyModule = eval("require")("node-pty");
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
this.status = 'running';
|
|
80
|
+
this.appendLog("\x1b[1;36m[System] Launching workspace terminal interactive shell...\x1b[0m\r\n");
|
|
81
|
+
|
|
82
|
+
const targetCwd = process.env.ORIGINAL_CWD || process.cwd();
|
|
83
|
+
|
|
84
|
+
// Spawn login/interactive shell
|
|
85
|
+
const spawnArgs = isWindows() && shellPath.endsWith("bash.exe") ? ["--login"] : [];
|
|
86
|
+
|
|
87
|
+
this.ptyProcess = this.ptyModule!.spawn(shellPath, spawnArgs, {
|
|
88
|
+
name: "xterm-256color",
|
|
89
|
+
cols: 120,
|
|
90
|
+
rows: 30,
|
|
91
|
+
cwd: targetCwd,
|
|
92
|
+
env: {
|
|
93
|
+
...process.env,
|
|
94
|
+
TERM: "xterm-256color",
|
|
95
|
+
COLORTERM: "truecolor",
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
this.ptyProcess.onData((data: string) => {
|
|
100
|
+
this.appendLog(data);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
this.ptyProcess.onExit(({ exitCode, signal }: { exitCode: number; signal?: number }) => {
|
|
104
|
+
this.status = 'stopped';
|
|
105
|
+
this.appendLog(`\r\n\x1b[1;31m[System] Shell process exited (code=${exitCode}, signal=${signal}).\x1b[0m\r\n`);
|
|
106
|
+
this.ptyProcess = null;
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
} catch (err) {
|
|
110
|
+
const errorMessage = err instanceof Error ? err.message : "Unknown error";
|
|
111
|
+
this.status = 'stopped';
|
|
112
|
+
this.appendLog(`[System Error] Failed to initialize shell runner: ${errorMessage}\r\n`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
async stop(): Promise<void> {
|
|
117
|
+
this.status = 'stopped';
|
|
118
|
+
if (this.ptyProcess) {
|
|
119
|
+
try {
|
|
120
|
+
this.ptyProcess.kill();
|
|
121
|
+
} catch (err) {
|
|
122
|
+
console.error("Error killing shell process:", err);
|
|
123
|
+
}
|
|
124
|
+
this.ptyProcess = null;
|
|
125
|
+
}
|
|
126
|
+
this.appendLog("\r\n\x1b[1;31m[System] Shell session stopped.\x1b[0m\r\n");
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
async sendInput(text: string, isRaw = false): Promise<void> {
|
|
130
|
+
if (this.status !== 'running' || !this.ptyProcess) {
|
|
131
|
+
this.appendLog(`\r\n[Error] Shell process is ${this.status}.\r\n`);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
this.ptyProcess.write(isRaw ? text : text + "\r");
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
override resize(cols: number, rows: number): void {
|
|
138
|
+
if (this.ptyProcess) {
|
|
139
|
+
try {
|
|
140
|
+
this.ptyProcess.resize(cols, rows);
|
|
141
|
+
} catch (err) {
|
|
142
|
+
console.error("[ShellRunner] Failed to resize:", err);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
getStatus(): RunnerStatus {
|
|
148
|
+
return {
|
|
149
|
+
id: this.id,
|
|
150
|
+
name: this.name,
|
|
151
|
+
type: this.type,
|
|
152
|
+
status: this.status,
|
|
153
|
+
createdAt: this.createdAt,
|
|
154
|
+
logsCount: this.logs.length,
|
|
155
|
+
workspaceRoot: process.env.ORIGINAL_CWD || process.cwd(),
|
|
156
|
+
scopedDirs: [],
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
package/src/lib/recents.ts
CHANGED
|
@@ -16,13 +16,30 @@ export function loadRecents() {
|
|
|
16
16
|
const data = JSON.parse(fs.readFileSync(recentsPath, "utf8"));
|
|
17
17
|
return {
|
|
18
18
|
workspaces: Array.isArray(data.workspaces) ? (data.workspaces as string[]) : [],
|
|
19
|
-
scopes: Array.isArray(data.scopes) ? (data.scopes as string[]) : []
|
|
19
|
+
scopes: Array.isArray(data.scopes) ? (data.scopes as string[]) : [],
|
|
20
|
+
lastSession: data.lastSession || null
|
|
20
21
|
};
|
|
21
22
|
} catch (e) {
|
|
22
23
|
console.error("[Recents] Failed to parse recents.json:", e);
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
|
-
return { workspaces: [], scopes: [] };
|
|
26
|
+
return { workspaces: [], scopes: [], lastSession: null };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function saveLastSession(config: {
|
|
30
|
+
type: 'mock' | 'claude' | 'claude-docker' | 'claude-ssh' | 'aider' | 'aider-docker';
|
|
31
|
+
name?: string;
|
|
32
|
+
workspaceRoot?: string;
|
|
33
|
+
scopedDirs?: string[];
|
|
34
|
+
}) {
|
|
35
|
+
const recents = loadRecents();
|
|
36
|
+
recents.lastSession = config;
|
|
37
|
+
try {
|
|
38
|
+
ensureDir();
|
|
39
|
+
fs.writeFileSync(recentsPath, JSON.stringify(recents, null, 2), "utf8");
|
|
40
|
+
} catch (err) {
|
|
41
|
+
console.error("[Recents] Failed to write recents.json:", err);
|
|
42
|
+
}
|
|
26
43
|
}
|
|
27
44
|
|
|
28
45
|
export function addRecent(type: "workspace" | "scope", folderPath: string) {
|
|
@@ -1 +0,0 @@
|
|
|
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),l=e.r(63599),r=e.r(9885),o=e.r(43369);function i({moduleIds:e}){if("u">typeof window)return null;let a=l.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,r.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),l=e.r(67585),r=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)(r.PreloadChunks,{moduleIds:a.modules}):null,(0,t.jsx)(s,{...e})]}):(0,t.jsx)(l.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 l=(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..."})})}),r=(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),[x,g]=(0,s.useState)(!1),[j,y]=(0,s.useState)(!1),[b,v]=(0,s.useState)(!1),[w,k]=(0,s.useState)(!1),[C,S]=(0,s.useState)(""),[N,P]=(0,s.useState)(3001),E=e.find(e=>e.id===u),W=e.some(e=>("claude-docker"===e.type||"aider-docker"===e.type)&&"running"===e.status),T=e.some(e=>"claude-ssh"===e.type&&"running"===e.status),L=async()=>{try{let e=await fetch("/api/sessions"),a=await e.json();a.sessions&&t(a.sessions),a.wsPort&&P(a.wsPort),a.originalCwd&&S(a.originalCwd)}catch(e){console.error("Failed to fetch sessions:",e)}};(0,s.useEffect)(()=>{(async()=>{await L()})();let e=setInterval(L,4e3);return()=>clearInterval(e)},[]);let R=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 l={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&&(l.workspaceRoot=a.config.workspaceRoot,l.scopedDirs=a.config.scopedDirs)}}catch(e){console.error("Failed to load aider configuration before launch:",e)}let r=await fetch("/api/sessions/launch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(l)}),o=await r.json();o.success&&(await L(),p(o.session.id))}catch(e){console.error("Failed to launch session:",e)}finally{h(!1)}},A=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 L())}catch(e){console.error("Failed to stop session:",e)}};return(0,a.jsxs)("div",{className:`${n.default.container} ${E?n.default.containerActive:""}`,children:[(0,a.jsxs)("header",{className:n.default.header,children:[(0,a.jsxs)("div",{className:n.default.logoArea,children:[(0,a.jsx)("h1",{className:n.default.title,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"})]})]}),E?(0,a.jsx)("div",{style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:(0,a.jsx)(c,{sessionId:E.id,workspaceRoot:E.workspaceRoot||"",scopedDirs:E.scopedDirs||[],onClose:()=>p(null),sessions:e,onSwitchSession:e=>p(e),onRefreshSessions:L,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===e.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 simulated session to verify the control bridge."}),(0,a.jsx)("button",{className:n.default.quickLaunchBtn,onClick:()=>R("mock"),disabled:m,style:{maxWidth:"240px",margin:"0 auto"},children:m?"Launching...":"⚡ Launch Simulated Session"})]}):(0,a.jsx)("div",{className:n.default.agentGrid,children:e.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:()=>A(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:()=>A(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&&(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 L();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)(l,{sessionId:u,wsPort:N})]}),(0,a.jsxs)("section",{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)(r,{})]})]}),(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:W?1:.6},children:[(0,a.jsx)("span",{className:n.default.envName,children:"🐳 Docker Sandbox"}),(0,a.jsx)("span",{className:n.default.envStatus,style:{color:W?"var(--success)":"var(--muted)"},children:W?"Active":"Not Mounted"})]}),(0,a.jsxs)("div",{className:n.default.envRow,style:{opacity:T?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:T?"var(--success)":"var(--muted)"},children:T?"Active":"Disconnected"})]})]})]}),(0,a.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"},children:[(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>R("mock"),disabled:m,children:[(0,a.jsx)("span",{children:"⚡"}),(0,a.jsx)("span",{children:"Launch Mock Agent"})]}),(0,a.jsxs)("button",{className:n.default.quickLaunchBtn,onClick:()=>{k(!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:()=>{k(!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:()=>f(!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),g(!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),g(!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)("footer",{className:n.default.footer,children:[(0,a.jsx)("span",{children:"NeuralLoom v0.2.13 — Experimental AI Orchestrator Bridge"}),(0,a.jsxs)("span",{children:["Directory: ",C||"Loading..."]})]}),_&&(0,a.jsx)(o,{onClose:()=>f(!1),onConfirmLaunch:()=>{f(!1),R("claude-ssh")}}),x&&(0,a.jsx)(i,{onClose:()=>g(!1),isDocker:j,onConfirmLaunch:()=>{g(!1),R(j?"aider-docker":"aider")}}),b&&(0,a.jsx)(d,{onClose:()=>v(!1),isDocker:w,onConfirmLaunch:(e,a,s)=>{v(!1),R(w?"claude-docker":"claude",e,a,s)}})]})}])},33779,e=>{e.v(a=>Promise.all(["static/chunks/03g6xpslyid3~.js","static/chunks/0x__nd4avi0fg.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/0jxar8nsw_py3.js"].map(a=>e.l(a))).then(()=>a(9949)))},33789,e=>{e.v(a=>Promise.all(["static/chunks/0b89ti7ob.09t.js"].map(a=>e.l(a))).then(()=>a(20032)))},78003,e=>{e.v(a=>Promise.all(["static/chunks/0eidfx-s54367.js","static/chunks/0x__nd4avi0fg.js","static/chunks/0ek0280331wie.js","static/chunks/0ga14ztvrhau2.css"].map(a=>e.l(a))).then(()=>a(97722)))}]);
|
|
File without changes
|
/package/.next/static/{5kCkuutustVYfLkGO2JIi → W3UxhE_D02EcHxTzdXKHX}/_clientMiddlewareManifest.js
RENAMED
|
File without changes
|
|
File without changes
|