neural-loom 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -0
- package/.next/app-path-routes-manifest.json +18 -0
- package/.next/build-manifest.json +20 -0
- package/.next/cache/.previewinfo +1 -0
- package/.next/cache/.rscinfo +1 -0
- package/.next/cache/.tsbuildinfo +1 -0
- package/.next/diagnostics/build-diagnostics.json +6 -0
- package/.next/diagnostics/framework.json +1 -0
- package/.next/diagnostics/route-bundle-stats.json +25 -0
- package/.next/export-marker.json +6 -0
- package/.next/fallback-build-manifest.json +13 -0
- package/.next/images-manifest.json +68 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +114 -0
- package/.next/required-server-files.js +332 -0
- package/.next/required-server-files.json +332 -0
- package/.next/routes-manifest.json +141 -0
- package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_global-error/page/build-manifest.json +16 -0
- package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_global-error/page.js +10 -0
- package/.next/server/app/_global-error/page.js.map +5 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_global-error.html +1 -0
- package/.next/server/app/_global-error.meta +15 -0
- package/.next/server/app/_global-error.rsc +15 -0
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_not-found/page/build-manifest.json +16 -0
- package/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
- package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_not-found/page.js +13 -0
- package/.next/server/app/_not-found/page.js.map +5 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
- package/.next/server/app/_not-found.html +1 -0
- package/.next/server/app/_not-found.meta +16 -0
- package/.next/server/app/_not-found.rsc +16 -0
- package/.next/server/app/_not-found.segments/_full.segment.rsc +16 -0
- package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_not-found.segments/_index.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/api/context/aider/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/context/aider/route/build-manifest.json +9 -0
- package/.next/server/app/api/context/aider/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/context/aider/route.js +6 -0
- package/.next/server/app/api/context/aider/route.js.map +5 -0
- package/.next/server/app/api/context/aider/route.js.nft.json +1 -0
- package/.next/server/app/api/context/aider/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/context/claude/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/context/claude/route/build-manifest.json +9 -0
- package/.next/server/app/api/context/claude/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/context/claude/route.js +6 -0
- package/.next/server/app/api/context/claude/route.js.map +5 -0
- package/.next/server/app/api/context/claude/route.js.nft.json +1 -0
- package/.next/server/app/api/context/claude/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/context/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/context/route/build-manifest.json +9 -0
- package/.next/server/app/api/context/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/context/route.js +6 -0
- package/.next/server/app/api/context/route.js.map +5 -0
- package/.next/server/app/api/context/route.js.nft.json +1 -0
- package/.next/server/app/api/context/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/context/ssh/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/context/ssh/route/build-manifest.json +9 -0
- package/.next/server/app/api/context/ssh/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/context/ssh/route.js +6 -0
- package/.next/server/app/api/context/ssh/route.js.map +5 -0
- package/.next/server/app/api/context/ssh/route.js.nft.json +1 -0
- package/.next/server/app/api/context/ssh/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/files/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/files/route/build-manifest.json +9 -0
- package/.next/server/app/api/files/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/files/route.js +7 -0
- package/.next/server/app/api/files/route.js.map +5 -0
- package/.next/server/app/api/files/route.js.nft.json +1 -0
- package/.next/server/app/api/files/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/git/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/git/route/build-manifest.json +9 -0
- package/.next/server/app/api/git/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/git/route.js +6 -0
- package/.next/server/app/api/git/route.js.map +5 -0
- package/.next/server/app/api/git/route.js.nft.json +1 -0
- package/.next/server/app/api/git/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/sessions/inject/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/sessions/inject/route/build-manifest.json +9 -0
- package/.next/server/app/api/sessions/inject/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/sessions/inject/route.js +7 -0
- package/.next/server/app/api/sessions/inject/route.js.map +5 -0
- package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/inject/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/sessions/input/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/sessions/input/route/build-manifest.json +9 -0
- package/.next/server/app/api/sessions/input/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/sessions/input/route.js +7 -0
- package/.next/server/app/api/sessions/input/route.js.map +5 -0
- package/.next/server/app/api/sessions/input/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/input/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/sessions/launch/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/sessions/launch/route/build-manifest.json +9 -0
- package/.next/server/app/api/sessions/launch/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/sessions/launch/route.js +7 -0
- package/.next/server/app/api/sessions/launch/route.js.map +5 -0
- package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/launch/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/sessions/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/sessions/route/build-manifest.json +9 -0
- package/.next/server/app/api/sessions/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/sessions/route.js +7 -0
- package/.next/server/app/api/sessions/route.js.map +5 -0
- package/.next/server/app/api/sessions/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/sessions/stats/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/sessions/stats/route/build-manifest.json +9 -0
- package/.next/server/app/api/sessions/stats/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/sessions/stats/route.js +7 -0
- package/.next/server/app/api/sessions/stats/route.js.map +5 -0
- package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/stats/route_client-reference-manifest.js +3 -0
- package/.next/server/app/api/sessions/stop/route/app-paths-manifest.json +3 -0
- package/.next/server/app/api/sessions/stop/route/build-manifest.json +9 -0
- package/.next/server/app/api/sessions/stop/route/server-reference-manifest.json +4 -0
- package/.next/server/app/api/sessions/stop/route.js +7 -0
- package/.next/server/app/api/sessions/stop/route.js.map +5 -0
- package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -0
- package/.next/server/app/api/sessions/stop/route_client-reference-manifest.js +3 -0
- package/.next/server/app/favicon.ico/route/app-paths-manifest.json +3 -0
- package/.next/server/app/favicon.ico/route/build-manifest.json +9 -0
- package/.next/server/app/favicon.ico/route.js +7 -0
- package/.next/server/app/favicon.ico/route.js.map +5 -0
- package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
- package/.next/server/app/favicon.ico.body +0 -0
- package/.next/server/app/favicon.ico.meta +1 -0
- package/.next/server/app/index.html +1 -0
- package/.next/server/app/index.meta +14 -0
- package/.next/server/app/index.rsc +21 -0
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +10 -0
- package/.next/server/app/index.segments/_full.segment.rsc +21 -0
- package/.next/server/app/index.segments/_head.segment.rsc +6 -0
- package/.next/server/app/index.segments/_index.segment.rsc +5 -0
- package/.next/server/app/index.segments/_tree.segment.rsc +5 -0
- package/.next/server/app/page/app-paths-manifest.json +3 -0
- package/.next/server/app/page/build-manifest.json +16 -0
- package/.next/server/app/page/next-font-manifest.json +11 -0
- package/.next/server/app/page/react-loadable-manifest.json +42 -0
- package/.next/server/app/page/server-reference-manifest.json +4 -0
- package/.next/server/app/page.js +14 -0
- package/.next/server/app/page.js.map +5 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +3 -0
- package/.next/server/app-paths-manifest.json +18 -0
- package/.next/server/chunks/[externals]__0shxiss._.js +3 -0
- package/.next/server/chunks/[externals]__0shxiss._.js.map +1 -0
- package/.next/server/chunks/[externals]_next_dist_0arv.vj._.js +3 -0
- package/.next/server/chunks/[externals]_next_dist_0arv.vj._.js.map +1 -0
- package/.next/server/chunks/[externals]_node-pty_12c-8pf._.js +3 -0
- package/.next/server/chunks/[externals]_node-pty_12c-8pf._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0-k9zyi._.js +15 -0
- package/.next/server/chunks/[root-of-the-server]__0-k9zyi._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__04kdofw._.js +15 -0
- package/.next/server/chunks/[root-of-the-server]__04kdofw._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0c.5qbe._.js +15 -0
- package/.next/server/chunks/[root-of-the-server]__0c.5qbe._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js +28 -0
- package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0e5cwnx._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0e5cwnx._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0efi5cr._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0efi5cr._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0j8-xkl._.js +13 -0
- package/.next/server/chunks/[root-of-the-server]__0j8-xkl._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0k6w___._.js +15 -0
- package/.next/server/chunks/[root-of-the-server]__0k6w___._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0l7c-gn._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0l7c-gn._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0l_q72g._.js +15 -0
- package/.next/server/chunks/[root-of-the-server]__0l_q72g._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0m7-xfc._.js +15 -0
- package/.next/server/chunks/[root-of-the-server]__0m7-xfc._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0m_~dan._.js +15 -0
- package/.next/server/chunks/[root-of-the-server]__0m_~dan._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__0ntt3om._.js +3 -0
- package/.next/server/chunks/[root-of-the-server]__0ntt3om._.js.map +1 -0
- package/.next/server/chunks/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/[turbopack]_runtime.js.map +11 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_aider_route_actions_0dszia..js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_aider_route_actions_0dszia..js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_claude_route_actions_12srkdn.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_claude_route_actions_12srkdn.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_route_actions_03ko8ta.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_route_actions_03ko8ta.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_ssh_route_actions_0~0~96d.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_context_ssh_route_actions_0~0~96d.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_files_route_actions_0x8kqqx.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_files_route_actions_0x8kqqx.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_route_actions_0xetuf~.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_git_route_actions_0xetuf~.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_inject_route_actions_0y2_m1_.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_inject_route_actions_0y2_m1_.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_input_route_actions_032sdjp.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_input_route_actions_032sdjp.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_launch_route_actions_0_qrmsm.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_launch_route_actions_0_qrmsm.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_route_actions_0y1t9w0.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_route_actions_0y1t9w0.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_stats_route_actions_0gc_vw-.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_stats_route_actions_0gc_vw-.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_stop_route_actions_0xg1t9k.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_api_sessions_stop_route_actions_0xg1t9k.js.map +1 -0
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0ev3h.z.js +3 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0ev3h.z.js.map +1 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0m.429v.js +3 -0
- package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0m.429v.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0.kd7dh._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0.kd7dh._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__089dc4i._.js +33 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__089dc4i._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0_7i5h0._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0_7i5h0._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0hw~y-4._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0hw~y-4._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0uk0awy._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0uk0awy._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~y8ue.._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0~y8ue.._.js.map +1 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +903 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +11 -0
- package/.next/server/chunks/ssr/_0t7oqy6._.js +3 -0
- package/.next/server/chunks/ssr/_0t7oqy6._.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0k77kol.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0k77kol.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0eq97pa.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0eq97pa.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app_page_actions_09-gtaw.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_05l396c._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_05l396c._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_09w7yel._.js +33 -0
- package/.next/server/chunks/ssr/node_modules_09w7yel._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_@swc_helpers_cjs__interop_require_default_cjs_11~q6fv._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_@swc_helpers_cjs__interop_require_default_cjs_11~q6fv._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0ppctuh._.js +19 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0ppctuh._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0qoh8ry._.js +6 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_0qoh8ry._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0inhx6q._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_0inhx6q._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0ghu-f7.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0ghu-f7.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0lgvd_..js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0cjv-23.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03-z2qq.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03-z2qq.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_07vh7rm.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_07vh7rm.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0qp4u6g.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0qp4u6g.js.map +1 -0
- package/.next/server/functions-config-manifest.json +4 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +20 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +15 -0
- package/.next/server/pages/404.html +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages-manifest.json +4 -0
- package/.next/server/prefetch-hints.json +1 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +5 -0
- package/.next/static/chunks/03g6xpslyid3~.js +1 -0
- package/.next/static/chunks/03~yq9q893hmn.js +1 -0
- package/.next/static/chunks/07b7-dl8gh17u.js +5 -0
- package/.next/static/chunks/07lhk_q6pmm3r.js +1 -0
- package/.next/static/chunks/0dbhjjzl8qfwv.js +1 -0
- package/.next/static/chunks/0ewdhgxsa_h.q.js +1 -0
- package/.next/static/chunks/0f4at4_v-tkgj.js +1 -0
- package/.next/static/chunks/0fpki3y6aj230.js +31 -0
- package/.next/static/chunks/0ga14ztvrhau2.css +1 -0
- package/.next/static/chunks/0lnobx4eh3~-_.js +1 -0
- package/.next/static/chunks/0mej.ad_ddvf1.js +1 -0
- package/.next/static/chunks/0q4suv6uexpud.css +1 -0
- package/.next/static/chunks/0xq6bhmghl02_.js +1 -0
- package/.next/static/chunks/139c54uo1w7.4.css +3 -0
- package/.next/static/chunks/140ovxvjat1ch.js +5 -0
- package/.next/static/chunks/16w4~t4h7gk13.js +1 -0
- package/.next/static/chunks/turbopack-08fpdsd.-ns2y.js +1 -0
- package/.next/static/media/4fa387ec64143e14-s.0wkzw~je483f-.woff2 +0 -0
- package/.next/static/media/53b9e256198e5412-s.0-wfv7uh4i7h9.woff2 +0 -0
- package/.next/static/media/5ce348bf30bf5439-s.0zgw-jeven.3w.woff2 +0 -0
- package/.next/static/media/6306c77e7c8268e4-s.0rhz0arwfsn~5.woff2 +0 -0
- package/.next/static/media/7178b3e590c64307-s.0nx0ww8fni_q3.woff2 +0 -0
- package/.next/static/media/797e433ab948586e-s.p.08e28id.o-okb.woff2 +0 -0
- package/.next/static/media/7d817b4c03b0c5f1-s.0l76wvqk9d84w.woff2 +0 -0
- package/.next/static/media/8a480f0b521d4e75-s.0jzbimsg8vl84.woff2 +0 -0
- package/.next/static/media/bbc41e54d2fcbd21-s.0k4k9394f2q-k.woff2 +0 -0
- package/.next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2 +0 -0
- package/.next/static/media/favicon.0x3dzn~oxb6tn.ico +0 -0
- package/.next/static/media/fef07dbb0973bf53-s.12tyk43_3sh9u.woff2 +0 -0
- package/.next/static/r-T5V6BKLiZ32Ai9Boe1d/_buildManifest.js +11 -0
- package/.next/static/r-T5V6BKLiZ32Ai9Boe1d/_clientMiddlewareManifest.js +1 -0
- package/.next/static/r-T5V6BKLiZ32Ai9Boe1d/_ssgManifest.js +1 -0
- package/.next/trace +1 -0
- package/.next/trace-build +1 -0
- package/.next/turbopack +0 -0
- package/.next/types/cache-life.d.ts +145 -0
- package/.next/types/routes.d.ts +84 -0
- package/.next/types/validator.ts +178 -0
- package/README.md +125 -0
- package/bin/cli.js +36 -0
- package/next.config.ts +7 -0
- package/package.json +40 -0
- package/public/file.svg +1 -0
- package/public/globe.svg +1 -0
- package/public/next.svg +1 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
- package/src/app/api/context/aider/route.ts +113 -0
- package/src/app/api/context/claude/route.ts +64 -0
- package/src/app/api/context/route.ts +37 -0
- package/src/app/api/context/ssh/route.ts +88 -0
- package/src/app/api/files/route.ts +276 -0
- package/src/app/api/git/route.ts +81 -0
- package/src/app/api/sessions/inject/route.ts +21 -0
- package/src/app/api/sessions/input/route.ts +30 -0
- package/src/app/api/sessions/launch/route.ts +25 -0
- package/src/app/api/sessions/route.ts +27 -0
- package/src/app/api/sessions/stats/route.ts +76 -0
- package/src/app/api/sessions/stop/route.ts +26 -0
- package/src/app/components/AiderWizard.tsx +412 -0
- package/src/app/components/ClaudeWizard.tsx +335 -0
- package/src/app/components/ContextEditor.tsx +169 -0
- package/src/app/components/IdeLayout.tsx +2095 -0
- package/src/app/components/SshWizard.tsx +379 -0
- package/src/app/components/TerminalConsole.tsx +228 -0
- package/src/app/favicon.ico +0 -0
- package/src/app/globals.css +81 -0
- package/src/app/layout.tsx +30 -0
- package/src/app/page.module.css +330 -0
- package/src/app/page.tsx +581 -0
- package/src/lib/agents/AgentRunner.ts +86 -0
- package/src/lib/agents/AiderRunner.ts +261 -0
- package/src/lib/agents/ClaudeRunner.ts +148 -0
- package/src/lib/agents/ContextManager.ts +142 -0
- package/src/lib/agents/DockerRunner.ts +182 -0
- package/src/lib/agents/MockRunner.ts +126 -0
- package/src/lib/agents/SSHRunner.ts +180 -0
- package/src/lib/agents/SessionManager.ts +147 -0
- package/src/lib/agents/SessionPersister.ts +85 -0
- package/src/lib/agents/WebSocketServer.ts +118 -0
- package/tsconfig.json +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__MIDDLEWARE_MATCHERS = [];self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
|
package/.next/trace
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"name":"generate-buildid","duration":318,"timestamp":49623749226,"id":4,"parentId":1,"tags":{},"startTime":1781270359521,"traceId":"9ded3f784a8b66cf"},{"name":"load-custom-routes","duration":409,"timestamp":49623749697,"id":5,"parentId":1,"tags":{},"startTime":1781270359521,"traceId":"9ded3f784a8b66cf"},{"name":"create-dist-dir","duration":2480,"timestamp":49623750157,"id":6,"parentId":1,"tags":{},"startTime":1781270359521,"traceId":"9ded3f784a8b66cf"},{"name":"clean","duration":621,"timestamp":49623753704,"id":7,"parentId":1,"tags":{},"startTime":1781270359525,"traceId":"9ded3f784a8b66cf"},{"name":"discover-routes","duration":8218,"timestamp":49623784902,"id":8,"parentId":1,"tags":{},"startTime":1781270359556,"traceId":"9ded3f784a8b66cf"},{"name":"create-root-mapping","duration":83,"timestamp":49623793177,"id":9,"parentId":1,"tags":{},"startTime":1781270359565,"traceId":"9ded3f784a8b66cf"},{"name":"generate-route-types","duration":20039,"timestamp":49623794808,"id":10,"parentId":1,"tags":{},"startTime":1781270359566,"traceId":"9ded3f784a8b66cf"},{"name":"public-dir-conflict-check","duration":153,"timestamp":49623815040,"id":11,"parentId":1,"tags":{},"startTime":1781270359586,"traceId":"9ded3f784a8b66cf"},{"name":"generate-routes-manifest","duration":2907,"timestamp":49623815347,"id":12,"parentId":1,"tags":{},"startTime":1781270359587,"traceId":"9ded3f784a8b66cf"},{"name":"run-turbopack","duration":2510584,"timestamp":49623827352,"id":14,"parentId":1,"tags":{},"startTime":1781270359599,"traceId":"9ded3f784a8b66cf"},{"name":"turbopack-build-events","duration":64,"timestamp":49624158642,"id":15,"parentId":1,"tags":{},"startTime":1781270359930,"traceId":"9ded3f784a8b66cf"},{"name":"run-typescript","duration":3741595,"timestamp":49626347539,"id":16,"parentId":1,"tags":{},"startTime":1781270362119,"traceId":"9ded3f784a8b66cf"},{"name":"generate-required-server-files","duration":1507,"timestamp":49630090086,"id":18,"parentId":1,"tags":{},"startTime":1781270365861,"traceId":"9ded3f784a8b66cf"},{"name":"check-static-error-page","duration":7406,"timestamp":49630206248,"id":20,"parentId":19,"tags":{},"startTime":1781270365978,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":531706,"timestamp":49630218012,"id":38,"parentId":22,"tags":{},"startTime":1781270365989,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":540278,"timestamp":49630209555,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1781270365981,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":663860,"timestamp":49630218113,"id":39,"parentId":23,"tags":{},"startTime":1781270365989,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":672123,"timestamp":49630209912,"id":23,"parentId":19,"tags":{"page":"/api/context/aider"},"startTime":1781270365981,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":683253,"timestamp":49630217773,"id":37,"parentId":21,"tags":{},"startTime":1781270365989,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":692880,"timestamp":49630208192,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1781270365980,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":682982,"timestamp":49630218194,"id":40,"parentId":24,"tags":{},"startTime":1781270365990,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":691033,"timestamp":49630210165,"id":24,"parentId":19,"tags":{"page":"/api/context/claude"},"startTime":1781270365981,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":683129,"timestamp":49630219047,"id":46,"parentId":30,"tags":{},"startTime":1781270365990,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":690740,"timestamp":49630211466,"id":30,"parentId":19,"tags":{"page":"/api/sessions/input"},"startTime":1781270365983,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":687225,"timestamp":49630219185,"id":47,"parentId":31,"tags":{},"startTime":1781270365991,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":694792,"timestamp":49630211676,"id":31,"parentId":19,"tags":{"page":"/api/sessions/launch"},"startTime":1781270365983,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":690972,"timestamp":49630219359,"id":51,"parentId":35,"tags":{},"startTime":1781270365991,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":697764,"timestamp":49630212624,"id":35,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1781270365984,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":692292,"timestamp":49630218280,"id":41,"parentId":25,"tags":{},"startTime":1781270365990,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":700222,"timestamp":49630210378,"id":25,"parentId":19,"tags":{"page":"/api/context"},"startTime":1781270365982,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":692910,"timestamp":49630222576,"id":52,"parentId":36,"tags":{},"startTime":1781270365994,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":702257,"timestamp":49630213268,"id":36,"parentId":19,"tags":{"page":"/"},"startTime":1781270365985,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":700751,"timestamp":49630218370,"id":42,"parentId":26,"tags":{},"startTime":1781270365990,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":708598,"timestamp":49630210567,"id":26,"parentId":19,"tags":{"page":"/api/context/ssh"},"startTime":1781270365982,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":699960,"timestamp":49630219292,"id":49,"parentId":33,"tags":{},"startTime":1781270365991,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":707200,"timestamp":49630212069,"id":33,"parentId":19,"tags":{"page":"/api/sessions/stats"},"startTime":1781270365983,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":703138,"timestamp":49630218605,"id":43,"parentId":27,"tags":{},"startTime":1781270365990,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":711017,"timestamp":49630210766,"id":27,"parentId":19,"tags":{"page":"/api/files"},"startTime":1781270365982,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":703259,"timestamp":49630218733,"id":44,"parentId":28,"tags":{},"startTime":1781270365990,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":710994,"timestamp":49630211020,"id":28,"parentId":19,"tags":{"page":"/api/git"},"startTime":1781270365982,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":703828,"timestamp":49630218832,"id":45,"parentId":29,"tags":{},"startTime":1781270365990,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":711458,"timestamp":49630211223,"id":29,"parentId":19,"tags":{"page":"/api/sessions/inject"},"startTime":1781270365983,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":706367,"timestamp":49630219246,"id":48,"parentId":32,"tags":{},"startTime":1781270365991,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":713775,"timestamp":49630211869,"id":32,"parentId":19,"tags":{"page":"/api/sessions"},"startTime":1781270365983,"traceId":"9ded3f784a8b66cf"},{"name":"is-page-static","duration":708628,"timestamp":49630219332,"id":50,"parentId":34,"tags":{},"startTime":1781270365991,"traceId":"9ded3f784a8b66cf"},{"name":"check-page","duration":715716,"timestamp":49630212280,"id":34,"parentId":19,"tags":{"page":"/api/sessions/stop"},"startTime":1781270365984,"traceId":"9ded3f784a8b66cf"},{"name":"static-check","duration":722252,"timestamp":49630205776,"id":19,"parentId":1,"tags":{},"startTime":1781270365977,"traceId":"9ded3f784a8b66cf"},{"name":"write-routes-manifest","duration":1017,"timestamp":49630929189,"id":54,"parentId":1,"tags":{},"startTime":1781270366701,"traceId":"9ded3f784a8b66cf"},{"name":"load-dotenv","duration":36,"timestamp":49630946816,"id":57,"parentId":56,"tags":{},"startTime":1781270366718,"traceId":"9ded3f784a8b66cf"},{"name":"run-export-path-map","duration":412,"timestamp":49630951969,"id":58,"parentId":56,"tags":{},"startTime":1781270366723,"traceId":"9ded3f784a8b66cf"},{"name":"next-export","duration":719941,"timestamp":49630945856,"id":56,"parentId":1,"tags":{},"startTime":1781270366717,"traceId":"9ded3f784a8b66cf"},{"name":"move-exported-app-not-found-","duration":2460,"timestamp":49631667418,"id":59,"parentId":55,"tags":{},"startTime":1781270367439,"traceId":"9ded3f784a8b66cf"},{"name":"move-exported-app-global-error-","duration":1865,"timestamp":49631669997,"id":60,"parentId":55,"tags":{},"startTime":1781270367441,"traceId":"9ded3f784a8b66cf"},{"name":"static-generation","duration":740658,"timestamp":49630935117,"id":55,"parentId":1,"tags":{},"startTime":1781270366706,"traceId":"9ded3f784a8b66cf"},{"name":"write-routes-manifest","duration":969,"timestamp":49631675912,"id":61,"parentId":1,"tags":{},"startTime":1781270367447,"traceId":"9ded3f784a8b66cf"},{"name":"print-tree-view","duration":3120,"timestamp":49631692117,"id":62,"parentId":1,"tags":{},"startTime":1781270367463,"traceId":"9ded3f784a8b66cf"},{"name":"write-route-bundle-stats","duration":11542,"timestamp":49631695265,"id":63,"parentId":1,"tags":{},"startTime":1781270367467,"traceId":"9ded3f784a8b66cf"},{"name":"telemetry-flush","duration":171736,"timestamp":49631706847,"id":64,"parentId":1,"tags":{},"startTime":1781270367478,"traceId":"9ded3f784a8b66cf"},{"name":"next-build","duration":8202981,"timestamp":49623675652,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781270359447,"traceId":"9ded3f784a8b66cf"}]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"name":"run-turbopack","duration":2510584,"timestamp":49623827352,"id":14,"parentId":1,"tags":{},"startTime":1781270359599,"traceId":"9ded3f784a8b66cf"},{"name":"turbopack-build-events","duration":64,"timestamp":49624158642,"id":15,"parentId":1,"tags":{},"startTime":1781270359930,"traceId":"9ded3f784a8b66cf"},{"name":"run-typescript","duration":3741595,"timestamp":49626347539,"id":16,"parentId":1,"tags":{},"startTime":1781270362119,"traceId":"9ded3f784a8b66cf"},{"name":"static-check","duration":722252,"timestamp":49630205776,"id":19,"parentId":1,"tags":{},"startTime":1781270365977,"traceId":"9ded3f784a8b66cf"},{"name":"static-generation","duration":740658,"timestamp":49630935117,"id":55,"parentId":1,"tags":{},"startTime":1781270366706,"traceId":"9ded3f784a8b66cf"},{"name":"telemetry-flush","duration":171736,"timestamp":49631706847,"id":64,"parentId":1,"tags":{},"startTime":1781270367478,"traceId":"9ded3f784a8b66cf"},{"name":"next-build","duration":8202981,"timestamp":49623675652,"id":1,"tags":{"buildMode":"default","version":"16.2.6","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781270359447,"traceId":"9ded3f784a8b66cf"}]
|
package/.next/turbopack
ADDED
|
File without changes
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// Type definitions for Next.js cacheLife configs
|
|
2
|
+
|
|
3
|
+
declare module 'next/cache' {
|
|
4
|
+
export { unstable_cache } from 'next/dist/server/web/spec-extension/unstable-cache'
|
|
5
|
+
export {
|
|
6
|
+
updateTag,
|
|
7
|
+
revalidateTag,
|
|
8
|
+
revalidatePath,
|
|
9
|
+
refresh,
|
|
10
|
+
} from 'next/dist/server/web/spec-extension/revalidate'
|
|
11
|
+
export { unstable_noStore } from 'next/dist/server/web/spec-extension/unstable-no-store'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Cache this `"use cache"` for a timespan defined by the `"default"` profile.
|
|
16
|
+
* ```
|
|
17
|
+
* stale: 300 seconds (5 minutes)
|
|
18
|
+
* revalidate: 900 seconds (15 minutes)
|
|
19
|
+
* expire: never
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
23
|
+
* If the server receives a new request after 15 minutes, start revalidating new values in the background.
|
|
24
|
+
* It lives for the maximum age of the server cache. If this entry has no traffic for a while, it may serve an old value the next request.
|
|
25
|
+
*/
|
|
26
|
+
export function cacheLife(profile: "default"): void
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Cache this `"use cache"` for a timespan defined by the `"seconds"` profile.
|
|
30
|
+
* ```
|
|
31
|
+
* stale: 30 seconds
|
|
32
|
+
* revalidate: 1 seconds
|
|
33
|
+
* expire: 60 seconds (1 minute)
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* This cache may be stale on clients for 30 seconds before checking with the server.
|
|
37
|
+
* If the server receives a new request after 1 seconds, start revalidating new values in the background.
|
|
38
|
+
* If this entry has no traffic for 1 minute it will expire. The next request will recompute it.
|
|
39
|
+
*/
|
|
40
|
+
export function cacheLife(profile: "seconds"): void
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Cache this `"use cache"` for a timespan defined by the `"minutes"` profile.
|
|
44
|
+
* ```
|
|
45
|
+
* stale: 300 seconds (5 minutes)
|
|
46
|
+
* revalidate: 60 seconds (1 minute)
|
|
47
|
+
* expire: 3600 seconds (1 hour)
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
51
|
+
* If the server receives a new request after 1 minute, start revalidating new values in the background.
|
|
52
|
+
* If this entry has no traffic for 1 hour it will expire. The next request will recompute it.
|
|
53
|
+
*/
|
|
54
|
+
export function cacheLife(profile: "minutes"): void
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Cache this `"use cache"` for a timespan defined by the `"hours"` profile.
|
|
58
|
+
* ```
|
|
59
|
+
* stale: 300 seconds (5 minutes)
|
|
60
|
+
* revalidate: 3600 seconds (1 hour)
|
|
61
|
+
* expire: 86400 seconds (1 day)
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
65
|
+
* If the server receives a new request after 1 hour, start revalidating new values in the background.
|
|
66
|
+
* If this entry has no traffic for 1 day it will expire. The next request will recompute it.
|
|
67
|
+
*/
|
|
68
|
+
export function cacheLife(profile: "hours"): void
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Cache this `"use cache"` for a timespan defined by the `"days"` profile.
|
|
72
|
+
* ```
|
|
73
|
+
* stale: 300 seconds (5 minutes)
|
|
74
|
+
* revalidate: 86400 seconds (1 day)
|
|
75
|
+
* expire: 604800 seconds (1 week)
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
79
|
+
* If the server receives a new request after 1 day, start revalidating new values in the background.
|
|
80
|
+
* If this entry has no traffic for 1 week it will expire. The next request will recompute it.
|
|
81
|
+
*/
|
|
82
|
+
export function cacheLife(profile: "days"): void
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Cache this `"use cache"` for a timespan defined by the `"weeks"` profile.
|
|
86
|
+
* ```
|
|
87
|
+
* stale: 300 seconds (5 minutes)
|
|
88
|
+
* revalidate: 604800 seconds (1 week)
|
|
89
|
+
* expire: 2592000 seconds (1 month)
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
93
|
+
* If the server receives a new request after 1 week, start revalidating new values in the background.
|
|
94
|
+
* If this entry has no traffic for 1 month it will expire. The next request will recompute it.
|
|
95
|
+
*/
|
|
96
|
+
export function cacheLife(profile: "weeks"): void
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Cache this `"use cache"` for a timespan defined by the `"max"` profile.
|
|
100
|
+
* ```
|
|
101
|
+
* stale: 300 seconds (5 minutes)
|
|
102
|
+
* revalidate: 2592000 seconds (1 month)
|
|
103
|
+
* expire: 31536000 seconds (365 days)
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* This cache may be stale on clients for 5 minutes before checking with the server.
|
|
107
|
+
* If the server receives a new request after 1 month, start revalidating new values in the background.
|
|
108
|
+
* If this entry has no traffic for 365 days it will expire. The next request will recompute it.
|
|
109
|
+
*/
|
|
110
|
+
export function cacheLife(profile: "max"): void
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Cache this `"use cache"` using a custom timespan.
|
|
114
|
+
* ```
|
|
115
|
+
* stale: ... // seconds
|
|
116
|
+
* revalidate: ... // seconds
|
|
117
|
+
* expire: ... // seconds
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* This is similar to Cache-Control: max-age=`stale`,s-max-age=`revalidate`,stale-while-revalidate=`expire-revalidate`
|
|
121
|
+
*
|
|
122
|
+
* If a value is left out, the lowest of other cacheLife() calls or the default, is used instead.
|
|
123
|
+
*/
|
|
124
|
+
export function cacheLife(profile: {
|
|
125
|
+
/**
|
|
126
|
+
* This cache may be stale on clients for ... seconds before checking with the server.
|
|
127
|
+
*/
|
|
128
|
+
stale?: number,
|
|
129
|
+
/**
|
|
130
|
+
* If the server receives a new request after ... seconds, start revalidating new values in the background.
|
|
131
|
+
*/
|
|
132
|
+
revalidate?: number,
|
|
133
|
+
/**
|
|
134
|
+
* If this entry has no traffic for ... seconds it will expire. The next request will recompute it.
|
|
135
|
+
*/
|
|
136
|
+
expire?: number
|
|
137
|
+
}): void
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
import { cacheTag } from 'next/dist/server/use-cache/cache-tag'
|
|
141
|
+
export { cacheTag }
|
|
142
|
+
|
|
143
|
+
export const unstable_cacheTag: typeof cacheTag
|
|
144
|
+
export const unstable_cacheLife: typeof cacheLife
|
|
145
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// This file is generated automatically by Next.js
|
|
2
|
+
// Do not edit this file manually
|
|
3
|
+
|
|
4
|
+
type AppRoutes = "/"
|
|
5
|
+
type AppRouteHandlerRoutes = "/api/context" | "/api/context/aider" | "/api/context/claude" | "/api/context/ssh" | "/api/files" | "/api/git" | "/api/sessions" | "/api/sessions/inject" | "/api/sessions/input" | "/api/sessions/launch" | "/api/sessions/stats" | "/api/sessions/stop"
|
|
6
|
+
type PageRoutes = never
|
|
7
|
+
type LayoutRoutes = "/"
|
|
8
|
+
type RedirectRoutes = never
|
|
9
|
+
type RewriteRoutes = never
|
|
10
|
+
type Routes = AppRoutes | PageRoutes | LayoutRoutes | RedirectRoutes | RewriteRoutes | AppRouteHandlerRoutes
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
interface ParamMap {
|
|
14
|
+
"/": {}
|
|
15
|
+
"/api/context": {}
|
|
16
|
+
"/api/context/aider": {}
|
|
17
|
+
"/api/context/claude": {}
|
|
18
|
+
"/api/context/ssh": {}
|
|
19
|
+
"/api/files": {}
|
|
20
|
+
"/api/git": {}
|
|
21
|
+
"/api/sessions": {}
|
|
22
|
+
"/api/sessions/inject": {}
|
|
23
|
+
"/api/sessions/input": {}
|
|
24
|
+
"/api/sessions/launch": {}
|
|
25
|
+
"/api/sessions/stats": {}
|
|
26
|
+
"/api/sessions/stop": {}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
export type ParamsOf<Route extends Routes> = ParamMap[Route]
|
|
31
|
+
|
|
32
|
+
interface LayoutSlotMap {
|
|
33
|
+
"/": never
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
export type { AppRoutes, PageRoutes, LayoutRoutes, RedirectRoutes, RewriteRoutes, ParamMap, AppRouteHandlerRoutes }
|
|
38
|
+
|
|
39
|
+
declare global {
|
|
40
|
+
/**
|
|
41
|
+
* Props for Next.js App Router page components
|
|
42
|
+
* @example
|
|
43
|
+
* ```tsx
|
|
44
|
+
* export default function Page(props: PageProps<'/blog/[slug]'>) {
|
|
45
|
+
* const { slug } = await props.params
|
|
46
|
+
* return <div>Blog post: {slug}</div>
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
interface PageProps<AppRoute extends AppRoutes> {
|
|
51
|
+
params: Promise<ParamMap[AppRoute]>
|
|
52
|
+
searchParams: Promise<Record<string, string | string[] | undefined>>
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Props for Next.js App Router layout components
|
|
57
|
+
* @example
|
|
58
|
+
* ```tsx
|
|
59
|
+
* export default function Layout(props: LayoutProps<'/dashboard'>) {
|
|
60
|
+
* return <div>{props.children}</div>
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
type LayoutProps<LayoutRoute extends LayoutRoutes> = {
|
|
65
|
+
params: Promise<ParamMap[LayoutRoute]>
|
|
66
|
+
children: React.ReactNode
|
|
67
|
+
} & {
|
|
68
|
+
[K in LayoutSlotMap[LayoutRoute]]: React.ReactNode
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Context for Next.js App Router route handlers
|
|
73
|
+
* @example
|
|
74
|
+
* ```tsx
|
|
75
|
+
* export async function GET(request: NextRequest, context: RouteContext<'/api/users/[id]'>) {
|
|
76
|
+
* const { id } = await context.params
|
|
77
|
+
* return Response.json({ id })
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
interface RouteContext<AppRouteHandlerRoute extends AppRouteHandlerRoutes> {
|
|
82
|
+
params: Promise<ParamMap[AppRouteHandlerRoute]>
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// This file is generated automatically by Next.js
|
|
2
|
+
// Do not edit this file manually
|
|
3
|
+
// This file validates that all pages and layouts export the correct types
|
|
4
|
+
|
|
5
|
+
import type { AppRoutes, LayoutRoutes, ParamMap, AppRouteHandlerRoutes } from "./routes.js"
|
|
6
|
+
import type { ResolvingMetadata, ResolvingViewport } from "next/types.js"
|
|
7
|
+
import type { NextRequest } from 'next/server.js'
|
|
8
|
+
|
|
9
|
+
type AppPageConfig<Route extends AppRoutes = AppRoutes> = {
|
|
10
|
+
default: React.ComponentType<{ params: Promise<ParamMap[Route]> } & any> | ((props: { params: Promise<ParamMap[Route]> } & any) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
|
|
11
|
+
generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
|
|
12
|
+
generateMetadata?: (
|
|
13
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
14
|
+
parent: ResolvingMetadata
|
|
15
|
+
) => Promise<any> | any
|
|
16
|
+
generateViewport?: (
|
|
17
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
18
|
+
parent: ResolvingViewport
|
|
19
|
+
) => Promise<any> | any
|
|
20
|
+
metadata?: any
|
|
21
|
+
viewport?: any
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type LayoutConfig<Route extends LayoutRoutes = LayoutRoutes> = {
|
|
25
|
+
default: React.ComponentType<LayoutProps<Route>> | ((props: LayoutProps<Route>) => React.ReactNode | Promise<React.ReactNode> | never | void | Promise<void>)
|
|
26
|
+
generateStaticParams?: (props: { params: ParamMap[Route] }) => Promise<any[]> | any[]
|
|
27
|
+
generateMetadata?: (
|
|
28
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
29
|
+
parent: ResolvingMetadata
|
|
30
|
+
) => Promise<any> | any
|
|
31
|
+
generateViewport?: (
|
|
32
|
+
props: { params: Promise<ParamMap[Route]> } & any,
|
|
33
|
+
parent: ResolvingViewport
|
|
34
|
+
) => Promise<any> | any
|
|
35
|
+
metadata?: any
|
|
36
|
+
viewport?: any
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRoutes> = {
|
|
40
|
+
GET?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
41
|
+
POST?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
42
|
+
PUT?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
43
|
+
PATCH?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
44
|
+
DELETE?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
45
|
+
HEAD?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
46
|
+
OPTIONS?: (request: NextRequest, context: { params: Promise<ParamMap[Route]> }) => Promise<Response | void> | Response | void
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
// Validate ../../src/app/page.tsx
|
|
51
|
+
{
|
|
52
|
+
type __IsExpected<Specific extends AppPageConfig<"/">> = Specific
|
|
53
|
+
const handler = {} as typeof import("../../src/app/page.js")
|
|
54
|
+
type __Check = __IsExpected<typeof handler>
|
|
55
|
+
// @ts-ignore
|
|
56
|
+
type __Unused = __Check
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Validate ../../src/app/api/context/aider/route.ts
|
|
60
|
+
{
|
|
61
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/context/aider">> = Specific
|
|
62
|
+
const handler = {} as typeof import("../../src/app/api/context/aider/route.js")
|
|
63
|
+
type __Check = __IsExpected<typeof handler>
|
|
64
|
+
// @ts-ignore
|
|
65
|
+
type __Unused = __Check
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Validate ../../src/app/api/context/claude/route.ts
|
|
69
|
+
{
|
|
70
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/context/claude">> = Specific
|
|
71
|
+
const handler = {} as typeof import("../../src/app/api/context/claude/route.js")
|
|
72
|
+
type __Check = __IsExpected<typeof handler>
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
type __Unused = __Check
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Validate ../../src/app/api/context/route.ts
|
|
78
|
+
{
|
|
79
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/context">> = Specific
|
|
80
|
+
const handler = {} as typeof import("../../src/app/api/context/route.js")
|
|
81
|
+
type __Check = __IsExpected<typeof handler>
|
|
82
|
+
// @ts-ignore
|
|
83
|
+
type __Unused = __Check
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Validate ../../src/app/api/context/ssh/route.ts
|
|
87
|
+
{
|
|
88
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/context/ssh">> = Specific
|
|
89
|
+
const handler = {} as typeof import("../../src/app/api/context/ssh/route.js")
|
|
90
|
+
type __Check = __IsExpected<typeof handler>
|
|
91
|
+
// @ts-ignore
|
|
92
|
+
type __Unused = __Check
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Validate ../../src/app/api/files/route.ts
|
|
96
|
+
{
|
|
97
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/files">> = Specific
|
|
98
|
+
const handler = {} as typeof import("../../src/app/api/files/route.js")
|
|
99
|
+
type __Check = __IsExpected<typeof handler>
|
|
100
|
+
// @ts-ignore
|
|
101
|
+
type __Unused = __Check
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Validate ../../src/app/api/git/route.ts
|
|
105
|
+
{
|
|
106
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/git">> = Specific
|
|
107
|
+
const handler = {} as typeof import("../../src/app/api/git/route.js")
|
|
108
|
+
type __Check = __IsExpected<typeof handler>
|
|
109
|
+
// @ts-ignore
|
|
110
|
+
type __Unused = __Check
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Validate ../../src/app/api/sessions/inject/route.ts
|
|
114
|
+
{
|
|
115
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/sessions/inject">> = Specific
|
|
116
|
+
const handler = {} as typeof import("../../src/app/api/sessions/inject/route.js")
|
|
117
|
+
type __Check = __IsExpected<typeof handler>
|
|
118
|
+
// @ts-ignore
|
|
119
|
+
type __Unused = __Check
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Validate ../../src/app/api/sessions/input/route.ts
|
|
123
|
+
{
|
|
124
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/sessions/input">> = Specific
|
|
125
|
+
const handler = {} as typeof import("../../src/app/api/sessions/input/route.js")
|
|
126
|
+
type __Check = __IsExpected<typeof handler>
|
|
127
|
+
// @ts-ignore
|
|
128
|
+
type __Unused = __Check
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Validate ../../src/app/api/sessions/launch/route.ts
|
|
132
|
+
{
|
|
133
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/sessions/launch">> = Specific
|
|
134
|
+
const handler = {} as typeof import("../../src/app/api/sessions/launch/route.js")
|
|
135
|
+
type __Check = __IsExpected<typeof handler>
|
|
136
|
+
// @ts-ignore
|
|
137
|
+
type __Unused = __Check
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Validate ../../src/app/api/sessions/route.ts
|
|
141
|
+
{
|
|
142
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/sessions">> = Specific
|
|
143
|
+
const handler = {} as typeof import("../../src/app/api/sessions/route.js")
|
|
144
|
+
type __Check = __IsExpected<typeof handler>
|
|
145
|
+
// @ts-ignore
|
|
146
|
+
type __Unused = __Check
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Validate ../../src/app/api/sessions/stats/route.ts
|
|
150
|
+
{
|
|
151
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/sessions/stats">> = Specific
|
|
152
|
+
const handler = {} as typeof import("../../src/app/api/sessions/stats/route.js")
|
|
153
|
+
type __Check = __IsExpected<typeof handler>
|
|
154
|
+
// @ts-ignore
|
|
155
|
+
type __Unused = __Check
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Validate ../../src/app/api/sessions/stop/route.ts
|
|
159
|
+
{
|
|
160
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/sessions/stop">> = Specific
|
|
161
|
+
const handler = {} as typeof import("../../src/app/api/sessions/stop/route.js")
|
|
162
|
+
type __Check = __IsExpected<typeof handler>
|
|
163
|
+
// @ts-ignore
|
|
164
|
+
type __Unused = __Check
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
// Validate ../../src/app/layout.tsx
|
|
172
|
+
{
|
|
173
|
+
type __IsExpected<Specific extends LayoutConfig<"/">> = Specific
|
|
174
|
+
const handler = {} as typeof import("../../src/app/layout.js")
|
|
175
|
+
type __Check = __IsExpected<typeof handler>
|
|
176
|
+
// @ts-ignore
|
|
177
|
+
type __Unused = __Check
|
|
178
|
+
}
|
package/README.md
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# NeuralLoom: Unified AI Agent Orchestrator & Context Bridge
|
|
2
|
+
|
|
3
|
+
NeuralLoom is a local Next.js orchestration cockpit and terminal bridge designed to manage multiple concurrent terminal agent sessions (such as **Claude Code** and **Aider**) in isolated or overlapping workspaces. It streams pseudo-terminal (PTY) streams to the browser over secure WebSockets, manages system prompt environments, compiles directory maps, tracks active token costs, and displays visual resource telemetry.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🚀 Key Features
|
|
8
|
+
|
|
9
|
+
* **Multi-Session Workspace Switcher**: Swap between separate active workspaces via a top tab bar. The file explorer tree, git diff panel, terminal stream, and active files are cached independently per session so you never lose your context when swapping projects.
|
|
10
|
+
* **Split Terminal Console**: Split the terminal view horizontally (50/50) to monitor and interact with two different agent sessions simultaneously.
|
|
11
|
+
* **Resource & Token Analytics**:
|
|
12
|
+
- Real-time CPU and Memory telemetry (via `docker stats` for container runners or process-RSS for local host PTYs).
|
|
13
|
+
- Regex-based PTY stdout parsing to extract input/output tokens and estimated dollar cost metrics on the fly.
|
|
14
|
+
* **Context Hub & Command Injection**:
|
|
15
|
+
- Write shared prompts (`cprompt.md`) and global guidelines (`AGENTS.md`).
|
|
16
|
+
- Stage context and directories maps to instantly inject standard commands (like `/ccc` and `/ccp`) with one click.
|
|
17
|
+
* **Inline Git Diff Viewer**: Scan changes via `git status --porcelain` and view modified files with line-by-line syntax-highlighted diffs in a virtual read-only editor tab.
|
|
18
|
+
* **Flexible Runtimes**: Launch sessions in three different environments:
|
|
19
|
+
1. **Local Host OS** (via Git Bash pseudo-terminals).
|
|
20
|
+
2. **Docker Containers** (isolated alpine nodes mounting local folders).
|
|
21
|
+
3. **Remote VMs** (interactive SSH sessions).
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 🛠️ Architecture & Deployment Model
|
|
26
|
+
|
|
27
|
+
> [!IMPORTANT]
|
|
28
|
+
> **NeuralLoom is a local/self-hosted orchestrator and cannot be deployed to serverless environments (like Vercel).**
|
|
29
|
+
> It depends on a persistent server runtime to manage active node-pty terminal threads, keep sockets connected, write to the local filesystem, and interface with Docker/SSH.
|
|
30
|
+
|
|
31
|
+
### Core Components
|
|
32
|
+
1. **Next.js Frontend (Port 3000)**: Visual IDE layout containing the file explorer, Monaco-style editor textareas, resource telemetry gauges, and xterm.js terminals.
|
|
33
|
+
2. **Next.js Backend API routes**: Filesystem operations, git diff generator, context compilers, and launcher configurations.
|
|
34
|
+
3. **WebSocket Server Gateway (Port 3001)**: Intercepts raw keystrokes from the browser, pipes them to respective PTY child processes on the server, and routes stdout buffers back to the UI terminal wrapper.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 🏁 Getting Started (Local Run)
|
|
39
|
+
|
|
40
|
+
### 1. Prerequisites
|
|
41
|
+
- **Node.js**: Version 18 or 20 (Required to compile `node-pty`).
|
|
42
|
+
- **Windows Build Tools**: If running on Windows, compile dependencies using Visual Studio Build Tools (C++ development workload).
|
|
43
|
+
- **Git Bash for Windows**: Ensure Git Bash is installed (used to safely wrapper shell prompts for node-pty).
|
|
44
|
+
|
|
45
|
+
### 2. Path Setup (Windows)
|
|
46
|
+
Prepend the Visual Studio Node.js build PATH to ensure all sub-PTYs can access standard command configurations. In PowerShell:
|
|
47
|
+
```powershell
|
|
48
|
+
$env:Path = "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VisualStudio\NodeJs;" + $env:Path
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 3. Installation
|
|
52
|
+
Clone the repository and install npm packages:
|
|
53
|
+
```bash
|
|
54
|
+
npm install
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 4. Running the Dev Server
|
|
58
|
+
Launches the Next.js app and the background WebSocket gateway concurrently:
|
|
59
|
+
```bash
|
|
60
|
+
npm run dev
|
|
61
|
+
```
|
|
62
|
+
Open **[http://localhost:3000](http://localhost:3000)** to launch your dashboard.
|
|
63
|
+
|
|
64
|
+
### 5. Compiling for Production Local Run
|
|
65
|
+
To build the bundle and boot up the production server locally:
|
|
66
|
+
```bash
|
|
67
|
+
# Clear any lock-induced cache
|
|
68
|
+
rm -Force -Recurse .next
|
|
69
|
+
|
|
70
|
+
# Build the project
|
|
71
|
+
npm run build
|
|
72
|
+
|
|
73
|
+
# Start production server
|
|
74
|
+
npm run start
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 📂 Project Directory Structure
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
neural-loom/
|
|
83
|
+
├── src/
|
|
84
|
+
│ ├── app/
|
|
85
|
+
│ │ ├── api/
|
|
86
|
+
│ │ │ ├── context/ # Claude & Aider wizard launchers persistence API
|
|
87
|
+
│ │ │ ├── files/ # File tree explorer and editor actions (read/write/delete)
|
|
88
|
+
│ │ │ ├── git/ # Porcelain status and diff reader
|
|
89
|
+
│ │ │ └── sessions/ # Launch, stats, and injection routes
|
|
90
|
+
│ │ ├── components/
|
|
91
|
+
│ │ │ ├── ClaudeWizard.tsx # Claude session workspace launch configuration modal
|
|
92
|
+
│ │ │ ├── AiderWizard.tsx # Aider session launch modal (flags and keys)
|
|
93
|
+
│ │ │ ├── SshWizard.tsx # SSH VM credential tester
|
|
94
|
+
│ │ │ ├── IdeLayout.tsx # Workspace controller (Tab switcher, Split Terminal)
|
|
95
|
+
│ │ │ └── TerminalConsole.tsx # xterm.js socket bridge wrapper
|
|
96
|
+
│ │ ├── page.tsx # Main dashboard launcher view
|
|
97
|
+
│ │ └── layout.tsx # Theme wrapper and HTML document
|
|
98
|
+
│ └── lib/
|
|
99
|
+
│ └── agents/
|
|
100
|
+
│ ├── AgentRunner.ts # Base class parsing logs and piping buffers
|
|
101
|
+
│ ├── ClaudeRunner.ts # Local Claude Code process configuration
|
|
102
|
+
│ ├── DockerRunner.ts # Alpine sandbox launcher mounting workspaces
|
|
103
|
+
│ ├── SSHRunner.ts # VM CLI connector
|
|
104
|
+
│ ├── WebSocketServer.ts # WS Gateway forwarding user inputs to terminals
|
|
105
|
+
│ └── SessionManager.ts # Session lifecycles (resume, start, kill)
|
|
106
|
+
└── .ai/
|
|
107
|
+
└── neural-loom/ # Local persisted runtime DB (claude.json, aider.json, ssh.json)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 🛠️ Troubleshooting
|
|
113
|
+
|
|
114
|
+
### EPERM errors during `npm run build`
|
|
115
|
+
On Windows, sometimes system processes lock the `.next` compilation folder. Run the following clean script before rebuilding:
|
|
116
|
+
```powershell
|
|
117
|
+
Remove-Item -Recurse -Force .next
|
|
118
|
+
npm run build
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Git Bash not found
|
|
122
|
+
If Git Bash is installed in a non-standard directory, set the path explicitly in your environment variables:
|
|
123
|
+
```powershell
|
|
124
|
+
$env:WINGMAN_BASH_PATH = "C:\Your\Path\To\bash.exe"
|
|
125
|
+
```
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { spawn } = require('child_process');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
// Change working directory to the package root directory so next start can resolve built pages (.next)
|
|
7
|
+
const packageRoot = path.join(__dirname, '..');
|
|
8
|
+
process.chdir(packageRoot);
|
|
9
|
+
|
|
10
|
+
// Next.js provides a cli entry point in next/dist/bin/next
|
|
11
|
+
const nextBin = require.resolve('next/dist/bin/next');
|
|
12
|
+
|
|
13
|
+
console.log("🚀 Starting NeuralLoom AI Orchestrator dashboard...");
|
|
14
|
+
console.log("🔗 Open http://localhost:3000 in your browser to begin.");
|
|
15
|
+
|
|
16
|
+
const nextProcess = spawn(process.execPath, [nextBin, 'start', '-p', '3000'], {
|
|
17
|
+
stdio: 'inherit',
|
|
18
|
+
env: {
|
|
19
|
+
...process.env
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// Clean up child process on exit signals
|
|
24
|
+
process.on('SIGINT', () => {
|
|
25
|
+
nextProcess.kill('SIGINT');
|
|
26
|
+
process.exit();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
process.on('SIGTERM', () => {
|
|
30
|
+
nextProcess.kill('SIGTERM');
|
|
31
|
+
process.exit();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
nextProcess.on('error', (err) => {
|
|
35
|
+
console.error('Failed to start NeuralLoom server:', err);
|
|
36
|
+
});
|
package/next.config.ts
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "neural-loom",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"bin": {
|
|
5
|
+
"neural-loom": "./bin/cli.js"
|
|
6
|
+
},
|
|
7
|
+
"files": [
|
|
8
|
+
"bin",
|
|
9
|
+
"public",
|
|
10
|
+
".next",
|
|
11
|
+
"src",
|
|
12
|
+
"next.config.ts",
|
|
13
|
+
"tsconfig.json",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"dev": "next dev",
|
|
18
|
+
"build": "next build",
|
|
19
|
+
"start": "next start",
|
|
20
|
+
"lint": "eslint"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"next": "15.2.6",
|
|
24
|
+
"node-pty": "^1.1.0",
|
|
25
|
+
"react": "19.2.4",
|
|
26
|
+
"react-dom": "19.2.4",
|
|
27
|
+
"ws": "^8.21.0",
|
|
28
|
+
"xterm": "^5.3.0",
|
|
29
|
+
"xterm-addon-fit": "^0.8.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^20",
|
|
33
|
+
"@types/react": "^19",
|
|
34
|
+
"@types/react-dom": "^19",
|
|
35
|
+
"@types/ws": "^8.18.1",
|
|
36
|
+
"eslint": "^9",
|
|
37
|
+
"eslint-config-next": "15.2.6",
|
|
38
|
+
"typescript": "^5"
|
|
39
|
+
}
|
|
40
|
+
}
|