neural-loom 0.2.18 → 0.2.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +0 -1
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/cache/.previewinfo +1 -1
  5. package/.next/cache/.rscinfo +1 -1
  6. package/.next/cache/.tsbuildinfo +1 -1
  7. package/.next/diagnostics/route-bundle-stats.json +2 -2
  8. package/.next/fallback-build-manifest.json +3 -3
  9. package/.next/prerender-manifest.json +3 -32
  10. package/.next/routes-manifest.json +0 -6
  11. package/.next/server/app/_global-error/page.js +6 -7
  12. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  13. package/.next/server/app/_global-error.html +1 -1
  14. package/.next/server/app/_global-error.rsc +2 -3
  15. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -3
  17. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -2
  18. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/.next/server/app/_not-found/page.js +6 -7
  21. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/.next/server/app/_not-found.html +1 -1
  23. package/.next/server/app/_not-found.rsc +2 -2
  24. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  25. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  27. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  28. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  29. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  30. package/.next/server/app/api/context/aider/route.js +2 -2
  31. package/.next/server/app/api/context/aider/route.js.nft.json +1 -1
  32. package/.next/server/app/api/context/claude/route.js +2 -2
  33. package/.next/server/app/api/context/claude/route.js.nft.json +1 -1
  34. package/.next/server/app/api/context/route.js +2 -2
  35. package/.next/server/app/api/context/route.js.nft.json +1 -1
  36. package/.next/server/app/api/context/ssh/route.js +2 -2
  37. package/.next/server/app/api/context/ssh/route.js.nft.json +1 -1
  38. package/.next/server/app/api/files/route.js +2 -2
  39. package/.next/server/app/api/files/route.js.nft.json +1 -1
  40. package/.next/server/app/api/git/route.js +2 -2
  41. package/.next/server/app/api/git/route.js.nft.json +1 -1
  42. package/.next/server/app/api/recents/route.js +2 -2
  43. package/.next/server/app/api/recents/route.js.nft.json +1 -1
  44. package/.next/server/app/api/sessions/inject/route.js +2 -2
  45. package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
  46. package/.next/server/app/api/sessions/input/route.js +2 -2
  47. package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
  48. package/.next/server/app/api/sessions/launch/route.js +2 -2
  49. package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
  50. package/.next/server/app/api/sessions/route.js +2 -2
  51. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  52. package/.next/server/app/api/sessions/scope/route.js +2 -2
  53. package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
  54. package/.next/server/app/api/sessions/start/route.js +2 -2
  55. package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
  56. package/.next/server/app/api/sessions/stats/route.js +2 -2
  57. package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
  58. package/.next/server/app/api/sessions/stop/route.js +2 -2
  59. package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
  60. package/.next/server/app/index.html +1 -1
  61. package/.next/server/app/index.rsc +4 -4
  62. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  63. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  64. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  65. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  66. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  67. package/.next/server/app/page/react-loadable-manifest.json +2 -2
  68. package/.next/server/app/page.js +6 -7
  69. package/.next/server/app/page.js.nft.json +1 -1
  70. package/.next/server/app/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app-paths-manifest.json +0 -1
  72. package/.next/server/chunks/{[externals]_next_dist_0arv.vj._.js → [externals]__048y_op._.js} +2 -2
  73. package/.next/server/chunks/{[root-of-the-server]__0-lisav._.js → [root-of-the-server]__0-vx6-s._.js} +3 -3
  74. package/.next/server/chunks/{[root-of-the-server]__0-lisav._.js.map → [root-of-the-server]__0-vx6-s._.js.map} +1 -1
  75. package/.next/server/chunks/{[root-of-the-server]__0k6w___._.js → [root-of-the-server]__0656ruo._.js} +3 -3
  76. package/.next/server/chunks/{[root-of-the-server]__0k6w___._.js.map → [root-of-the-server]__0656ruo._.js.map} +1 -1
  77. package/.next/server/chunks/[root-of-the-server]__0969ozy._.js +3 -0
  78. package/.next/server/chunks/{[root-of-the-server]__0l7c-gn._.js.map → [root-of-the-server]__0969ozy._.js.map} +1 -1
  79. package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js +10 -5
  80. package/.next/server/chunks/[root-of-the-server]__0d0pykb._.js.map +1 -1
  81. package/.next/server/chunks/{[root-of-the-server]__0iqaxhx._.js → [root-of-the-server]__0d9_-7g._.js} +3 -3
  82. package/.next/server/chunks/{[root-of-the-server]__0iqaxhx._.js.map → [root-of-the-server]__0d9_-7g._.js.map} +1 -1
  83. package/.next/server/chunks/{[root-of-the-server]__0qz~w0~._.js → [root-of-the-server]__0fhv7.1._.js} +3 -3
  84. package/.next/server/chunks/{[root-of-the-server]__0qz~w0~._.js.map → [root-of-the-server]__0fhv7.1._.js.map} +1 -1
  85. package/.next/server/chunks/{[root-of-the-server]__0j8-xkl._.js → [root-of-the-server]__0i83~95._.js} +2 -2
  86. package/.next/server/chunks/{[root-of-the-server]__0j8-xkl._.js.map → [root-of-the-server]__0i83~95._.js.map} +1 -1
  87. package/.next/server/chunks/[root-of-the-server]__0kn5tap._.js +4 -0
  88. package/.next/server/chunks/{[root-of-the-server]__0ntt3om._.js.map → [root-of-the-server]__0kn5tap._.js.map} +1 -1
  89. package/.next/server/chunks/[root-of-the-server]__0n-zban._.js +3 -0
  90. package/.next/server/chunks/{[root-of-the-server]__0p~u94k._.js.map → [root-of-the-server]__0n-zban._.js.map} +1 -1
  91. package/.next/server/chunks/[root-of-the-server]__0qqnqov._.js +15 -0
  92. package/.next/server/chunks/{[root-of-the-server]__0m91xif._.js.map → [root-of-the-server]__0qqnqov._.js.map} +1 -1
  93. package/.next/server/chunks/[root-of-the-server]__0sa_gpm._.js +3 -0
  94. package/.next/server/chunks/[root-of-the-server]__0sa_gpm._.js.map +1 -0
  95. package/.next/server/chunks/[root-of-the-server]__0t_~on0._.js +15 -0
  96. package/.next/server/chunks/[root-of-the-server]__0t_~on0._.js.map +1 -0
  97. package/.next/server/chunks/[root-of-the-server]__0vp8-ka._.js +3 -0
  98. package/.next/server/chunks/{[root-of-the-server]__0qyrt6_._.js.map → [root-of-the-server]__0vp8-ka._.js.map} +1 -1
  99. package/.next/server/chunks/{[root-of-the-server]__0__9rdk._.js → [root-of-the-server]__0xr~y1f._.js} +3 -3
  100. package/.next/server/chunks/{[root-of-the-server]__0__9rdk._.js.map → [root-of-the-server]__0xr~y1f._.js.map} +1 -1
  101. package/.next/server/chunks/{[root-of-the-server]__0_2_i_q._.js → [root-of-the-server]__0zkcq9q._.js} +3 -3
  102. package/.next/server/chunks/{[root-of-the-server]__0_2_i_q._.js.map → [root-of-the-server]__0zkcq9q._.js.map} +1 -1
  103. package/.next/server/chunks/{[root-of-the-server]__0bi3d5z._.js → [root-of-the-server]__0~zauvq._.js} +3 -3
  104. package/.next/server/chunks/{[root-of-the-server]__0bi3d5z._.js.map → [root-of-the-server]__0~zauvq._.js.map} +1 -1
  105. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0ev3h.z.js +1 -1
  106. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0ev3h.z.js.map +1 -1
  107. package/.next/server/chunks/ssr/[root-of-the-server]__0cbmrds._.js +3 -0
  108. package/.next/server/chunks/ssr/[root-of-the-server]__0cbmrds._.js.map +1 -0
  109. package/.next/server/chunks/ssr/[root-of-the-server]__0ni-l5l._.js +3 -0
  110. package/.next/server/chunks/ssr/[root-of-the-server]__0ni-l5l._.js.map +1 -0
  111. package/.next/server/chunks/ssr/{[root-of-the-server]__089dc4i._.js → [root-of-the-server]__0tcyn68._.js} +2 -2
  112. package/.next/server/chunks/ssr/[root-of-the-server]__0tcyn68._.js.map +1 -0
  113. package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js +1 -1
  114. package/.next/server/chunks/ssr/[root-of-the-server]__0v73tbn._.js.map +1 -1
  115. package/.next/server/chunks/ssr/[root-of-the-server]__0yj_dfr._.js +3 -0
  116. package/.next/server/chunks/ssr/[root-of-the-server]__0yj_dfr._.js.map +1 -0
  117. package/.next/server/chunks/ssr/_0t7oqy6._.js +1 -1
  118. package/.next/server/chunks/ssr/_0t7oqy6._.js.map +1 -1
  119. package/.next/server/chunks/ssr/{node_modules_next_dist_0ppctuh._.js → node_modules_next_dist_0-g.jog._.js} +2 -2
  120. package/.next/server/chunks/ssr/node_modules_next_dist_0-g.jog._.js.map +1 -0
  121. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bj8dkg.js +4 -0
  122. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bj8dkg.js.map +1 -0
  123. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0cvrgh7.js +4 -0
  124. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0cvrgh7.js.map +1 -0
  125. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rc3ul_.js +4 -0
  126. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0rc3ul_.js.map +1 -0
  127. package/.next/server/middleware-build-manifest.js +3 -3
  128. package/.next/server/pages/404.html +1 -1
  129. package/.next/server/pages/500.html +1 -1
  130. package/.next/server/server-reference-manifest.js +1 -1
  131. package/.next/server/server-reference-manifest.json +1 -1
  132. package/.next/static/chunks/07-tub5vqy.fk.js +1 -0
  133. package/.next/static/chunks/0kkoif8x_kxrq.js +1 -0
  134. package/.next/static/chunks/{0pp.lp89pntpv.css → 0m-_sw1425nkp.css} +1 -1
  135. package/.next/static/chunks/0wq3_34inbzj6.js +1 -0
  136. package/.next/trace +1 -1
  137. package/.next/trace-build +1 -1
  138. package/package.json +1 -1
  139. package/public/logo.png +0 -0
  140. package/public/manifest.json +22 -0
  141. package/public/sw.js +12 -0
  142. package/src/app/api/context/aider/route.ts +6 -1
  143. package/src/app/api/files/route.ts +20 -8
  144. package/src/app/api/git/route.ts +117 -1
  145. package/src/app/api/sessions/route.ts +4 -1
  146. package/src/app/components/AiderWizard.tsx +19 -1
  147. package/src/app/components/IdeLayout.tsx +715 -87
  148. package/src/app/components/MarkdownPreview.tsx +528 -0
  149. package/src/app/layout.tsx +6 -0
  150. package/src/app/page.module.css +2 -0
  151. package/src/app/page.tsx +40 -10
  152. package/src/lib/agents/AgentRunner.ts +2 -2
  153. package/src/lib/agents/AiderRunner.ts +75 -36
  154. package/src/lib/agents/SessionManager.ts +25 -10
  155. package/src/lib/agents/SessionPersister.ts +10 -0
  156. package/src/lib/agents/ShellRunner.ts +159 -0
  157. package/.next/server/app/favicon.ico/route/app-paths-manifest.json +0 -3
  158. package/.next/server/app/favicon.ico/route/build-manifest.json +0 -9
  159. package/.next/server/app/favicon.ico/route.js +0 -7
  160. package/.next/server/app/favicon.ico/route.js.map +0 -5
  161. package/.next/server/app/favicon.ico/route.js.nft.json +0 -1
  162. package/.next/server/app/favicon.ico.body +0 -0
  163. package/.next/server/app/favicon.ico.meta +0 -1
  164. package/.next/server/chunks/[externals]__1334_78._.js +0 -3
  165. package/.next/server/chunks/[externals]_next_dist_0arv.vj._.js.map +0 -1
  166. package/.next/server/chunks/[root-of-the-server]__0l7c-gn._.js +0 -3
  167. package/.next/server/chunks/[root-of-the-server]__0m91xif._.js +0 -15
  168. package/.next/server/chunks/[root-of-the-server]__0ntt3om._.js +0 -3
  169. package/.next/server/chunks/[root-of-the-server]__0p~u94k._.js +0 -3
  170. package/.next/server/chunks/[root-of-the-server]__0qyrt6_._.js +0 -3
  171. package/.next/server/chunks/[root-of-the-server]__0ty8hwz._.js +0 -15
  172. package/.next/server/chunks/[root-of-the-server]__0ty8hwz._.js.map +0 -1
  173. package/.next/server/chunks/[root-of-the-server]__0ylcu31._.js +0 -3
  174. package/.next/server/chunks/[root-of-the-server]__0ylcu31._.js.map +0 -1
  175. package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js +0 -3
  176. package/.next/server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js.map +0 -1
  177. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0m.429v.js +0 -3
  178. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0m.429v.js.map +0 -1
  179. package/.next/server/chunks/ssr/[root-of-the-server]__089dc4i._.js.map +0 -1
  180. package/.next/server/chunks/ssr/[root-of-the-server]__0_7i5h0._.js +0 -3
  181. package/.next/server/chunks/ssr/[root-of-the-server]__0_7i5h0._.js.map +0 -1
  182. package/.next/server/chunks/ssr/[root-of-the-server]__0hw~y-4._.js +0 -3
  183. package/.next/server/chunks/ssr/[root-of-the-server]__0hw~y-4._.js.map +0 -1
  184. package/.next/server/chunks/ssr/[root-of-the-server]__0~y8ue.._.js +0 -3
  185. package/.next/server/chunks/ssr/[root-of-the-server]__0~y8ue.._.js.map +0 -1
  186. package/.next/server/chunks/ssr/node_modules_05l396c._.js +0 -3
  187. package/.next/server/chunks/ssr/node_modules_05l396c._.js.map +0 -1
  188. package/.next/server/chunks/ssr/node_modules_next_dist_0ppctuh._.js.map +0 -1
  189. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03-z2qq.js +0 -4
  190. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03-z2qq.js.map +0 -1
  191. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_07vh7rm.js +0 -4
  192. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_07vh7rm.js.map +0 -1
  193. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0qp4u6g.js +0 -4
  194. package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0qp4u6g.js.map +0 -1
  195. package/.next/static/chunks/0ek0280331wie.js +0 -1
  196. package/.next/static/chunks/0jxar8nsw_py3.js +0 -1
  197. package/.next/static/chunks/0whfmx9l_25d4.js +0 -1
  198. package/.next/static/media/favicon.0x3dzn~oxb6tn.ico +0 -0
  199. package/src/app/favicon.ico +0 -0
  200. /package/.next/server/chunks/{[externals]__1334_78._.js.map → [externals]__048y_op._.js.map} +0 -0
  201. /package/.next/static/{OOK46QJncZAPJTv2oCT-X → 5uGIuH8oXybqivkeHIrqb}/_buildManifest.js +0 -0
  202. /package/.next/static/{OOK46QJncZAPJTv2oCT-X → 5uGIuH8oXybqivkeHIrqb}/_clientMiddlewareManifest.js +0 -0
  203. /package/.next/static/{OOK46QJncZAPJTv2oCT-X → 5uGIuH8oXybqivkeHIrqb}/_ssgManifest.js +0 -0
@@ -1,5 +1,6 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
+ import { exec } from "child_process";
3
4
  import type { IPty } from "node-pty";
4
5
  import { AgentRunner, RunnerStatus } from "./AgentRunner";
5
6
  import { SessionPersister } from "./SessionPersister";
@@ -28,6 +29,46 @@ function findGitBash(): string | null {
28
29
  return candidates.find(p => fs.existsSync(p)) || null;
29
30
  }
30
31
 
32
+ function getFilesForAider(dir: string): string {
33
+ const maxFiles = 150;
34
+ const files: string[] = [];
35
+
36
+ function walk(current: string) {
37
+ if (files.length >= maxFiles) return;
38
+ try {
39
+ const entries = fs.readdirSync(current, { withFileTypes: true });
40
+ for (const entry of entries) {
41
+ const name = entry.name;
42
+ if (
43
+ name.startsWith(".") ||
44
+ name === "node_modules" ||
45
+ name === "out" ||
46
+ name === ".next" ||
47
+ name === "bin" ||
48
+ name === "obj" ||
49
+ name === "dist" ||
50
+ name === "build"
51
+ ) {
52
+ continue;
53
+ }
54
+ const fullPath = path.join(current, name);
55
+ if (entry.isDirectory()) {
56
+ walk(fullPath);
57
+ } else {
58
+ const relPath = path.relative(dir, fullPath);
59
+ files.push(relPath);
60
+ if (files.length >= maxFiles) return;
61
+ }
62
+ }
63
+ } catch (err) {
64
+ console.error("Error reading dir for Aider files list:", err);
65
+ }
66
+ }
67
+
68
+ walk(dir);
69
+ return files.map(f => `"${f.replace(/"/g, '\\"')}"`).join(" ");
70
+ }
71
+
31
72
  export class AiderRunner extends AgentRunner {
32
73
  id: string;
33
74
  name: string;
@@ -84,6 +125,7 @@ export class AiderRunner extends AgentRunner {
84
125
  geminiApiKey: "",
85
126
  model: "claude-3-5-sonnet",
86
127
  extraFlags: "",
128
+ loadAllFiles: true,
87
129
  };
88
130
 
89
131
  const aiderConfigPath = path.join(process.env.ORIGINAL_CWD || process.cwd(), ".ai", "neural-loom", "aider.json");
@@ -100,6 +142,7 @@ export class AiderRunner extends AgentRunner {
100
142
  ...process.env,
101
143
  TERM: "xterm-256color",
102
144
  COLORTERM: "truecolor",
145
+ NEURAL_LOOM: "true",
103
146
  } as Record<string, string>;
104
147
 
105
148
  if (aiderConfig.openaiApiKey) {
@@ -112,34 +155,36 @@ export class AiderRunner extends AgentRunner {
112
155
  customEnv.GEMINI_API_KEY = aiderConfig.geminiApiKey;
113
156
  }
114
157
 
115
- const modelFlag = aiderConfig.model ? `--model ${aiderConfig.model}` : "";
116
- const extraFlags = aiderConfig.extraFlags || "";
117
-
118
158
  const targetCwd = (this.workspaceRoot && fs.existsSync(this.workspaceRoot))
119
159
  ? this.workspaceRoot
120
160
  : process.env.ORIGINAL_CWD || process.cwd();
121
161
 
162
+ const modelFlag = aiderConfig.model ? `--model ${aiderConfig.model}` : "";
163
+ const extraFlags = aiderConfig.extraFlags || "";
164
+
165
+ let loadAllFilesFlag = "";
166
+ if (aiderConfig.loadAllFiles !== false) {
167
+ if (extraFlags.includes("--no-git")) {
168
+ loadAllFilesFlag = getFilesForAider(targetCwd);
169
+ } else {
170
+ loadAllFilesFlag = ".";
171
+ }
172
+ }
173
+
122
174
  if (this.type === "aider-docker") {
123
175
  this.appendLog("[System] Verifying Docker environment accessibility...\r\n");
124
176
 
125
- // Check if docker executable exists by spawning `docker -v`
126
- const testPty = this.ptyModule!.spawn(bashPath, ["-c", "docker --version"], {
127
- name: "xterm-256color",
128
- cols: 80,
129
- rows: 10,
130
- cwd: targetCwd,
131
- });
132
-
133
- let hasDocker = false;
134
- testPty.onData((data) => {
135
- if (data.toLowerCase().includes("docker version")) {
136
- hasDocker = true;
137
- }
177
+ // Check if docker executable exists by running `docker --version`
178
+ const hasDocker = await new Promise<boolean>((resolve) => {
179
+ exec("docker --version", { env: process.env }, (error: Error | null, stdout: string) => {
180
+ if (!error && stdout.toLowerCase().includes("version")) {
181
+ resolve(true);
182
+ } else {
183
+ resolve(false);
184
+ }
185
+ });
138
186
  });
139
187
 
140
- await new Promise(resolve => setTimeout(resolve, 800));
141
- testPty.kill();
142
-
143
188
  if (!hasDocker) {
144
189
  this.status = 'stopped';
145
190
  this.appendLog("\x1b[1;31m[Dependency Warning] Docker command not recognized in local PATH.\x1b[0m\r\n");
@@ -152,6 +197,7 @@ export class AiderRunner extends AgentRunner {
152
197
  if (aiderConfig.openaiApiKey) envFlags.push("-e OPENAI_API_KEY");
153
198
  if (aiderConfig.anthropicApiKey) envFlags.push("-e ANTHROPIC_API_KEY");
154
199
  if (aiderConfig.geminiApiKey) envFlags.push("-e GEMINI_API_KEY");
200
+ envFlags.push("-e NEURAL_LOOM=true");
155
201
  const envFlagsStr = envFlags.join(" ");
156
202
 
157
203
  // Volume mounts for primary workspace and each scoped directory
@@ -166,7 +212,7 @@ export class AiderRunner extends AgentRunner {
166
212
  }
167
213
  const mountsStr = mounts.join(" ");
168
214
 
169
- const dockerCmd = `docker run -it --name neural-loom-session-${this.id} --rm ${mountsStr} -w /workspace ${envFlagsStr} paulgauthier/aider ${modelFlag} ${extraFlags}`.trim();
215
+ const dockerCmd = `docker run -it --name neural-loom-session-${this.id} --rm ${mountsStr} -w /workspace ${envFlagsStr} paulgauthier/aider ${modelFlag} ${extraFlags} --no-fancy-input ${loadAllFilesFlag}`.trim();
170
216
 
171
217
  this.ptyProcess = this.ptyModule!.spawn(bashPath, ["-c", dockerCmd], {
172
218
  name: "xterm-256color",
@@ -179,23 +225,16 @@ export class AiderRunner extends AgentRunner {
179
225
  this.appendLog("[System] Verifying 'aider' command availability in local PATH...\r\n");
180
226
 
181
227
  // Check if aider executable exists by running `aider --version`
182
- const testPty = this.ptyModule!.spawn(bashPath, ["-c", "aider --version"], {
183
- name: "xterm-256color",
184
- cols: 80,
185
- rows: 10,
186
- cwd: targetCwd,
187
- });
188
-
189
- let hasAider = false;
190
- testPty.onData((data) => {
191
- if (data.toLowerCase().includes("aider")) {
192
- hasAider = true;
193
- }
228
+ const hasAider = await new Promise<boolean>((resolve) => {
229
+ exec("aider --version", { env: process.env }, (error: Error | null, stdout: string) => {
230
+ if (!error && stdout.toLowerCase().includes("aider")) {
231
+ resolve(true);
232
+ } else {
233
+ resolve(false);
234
+ }
235
+ });
194
236
  });
195
237
 
196
- await new Promise(resolve => setTimeout(resolve, 800));
197
- testPty.kill();
198
-
199
238
  if (!hasAider) {
200
239
  this.status = 'stopped';
201
240
  this.appendLog("\x1b[1;31m[Dependency Warning] 'aider' executable not found on local PATH.\x1b[0m\r\n");
@@ -204,7 +243,7 @@ export class AiderRunner extends AgentRunner {
204
243
  }
205
244
 
206
245
  this.appendLog("[System] Spawning local Aider CLI...\r\n");
207
- const localCmd = `aider ${modelFlag} ${extraFlags}`.trim();
246
+ const localCmd = `aider ${modelFlag} ${extraFlags} --no-fancy-input ${loadAllFilesFlag}`.trim();
208
247
 
209
248
  this.ptyProcess = this.ptyModule!.spawn(bashPath, ["-c", localCmd], {
210
249
  name: "xterm-256color",
@@ -8,8 +8,13 @@ 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
 
14
+ declare global {
15
+ var sessionManager: SessionManager | undefined;
16
+ }
17
+
13
18
  export class SessionManager {
14
19
  private static instance: SessionManager | null = null;
15
20
  private sessions = new Map<string, AgentRunner>();
@@ -19,10 +24,25 @@ export class SessionManager {
19
24
  ContextManager.initializeStaging();
20
25
  ContextManager.compileGlobalRules();
21
26
 
27
+ // Spawn/start permanent workspace terminal shell runner
28
+ const shellRunner = new ShellRunner();
29
+ shellRunner.start();
30
+ this.sessions.set(shellRunner.id, shellRunner);
31
+
22
32
  // Reload persisted sessions
23
33
  try {
24
34
  const saved = SessionPersister.loadAllSessions();
25
35
  for (const data of saved) {
36
+ // Automatically clean up stopped sessions older than 24 hours to avoid clutter
37
+ if (data.status === "stopped") {
38
+ const createdTime = new Date(data.createdAt).getTime();
39
+ const ageHours = (Date.now() - createdTime) / (1000 * 60 * 60);
40
+ if (ageHours > 24) {
41
+ SessionPersister.deleteSession(data.id);
42
+ continue;
43
+ }
44
+ }
45
+
26
46
  let runner: AgentRunner;
27
47
  if (data.type === "mock") {
28
48
  runner = new MockRunner(data.id, data.name);
@@ -43,11 +63,6 @@ export class SessionManager {
43
63
  runner.scopedDirs = data.scopedDirs;
44
64
  runner.lastSyncedWorkspaceFolders = data.lastSyncedWorkspaceFolders;
45
65
 
46
- // Auto-resume mock runner if running
47
- if (data.type === "mock" && data.status === "running") {
48
- runner.start();
49
- }
50
-
51
66
  this.sessions.set(data.id, runner);
52
67
  }
53
68
  } catch (err) {
@@ -56,12 +71,12 @@ export class SessionManager {
56
71
  }
57
72
 
58
73
  public static getInstance(): SessionManager {
59
- if (!SessionManager.instance) {
60
- SessionManager.instance = new SessionManager();
74
+ if (!globalThis.sessionManager) {
75
+ globalThis.sessionManager = new SessionManager();
61
76
  // Initialize WebSocket gateway server on port 3001
62
- initWebSocketServer(3001, (id) => SessionManager.getInstance().getSession(id));
77
+ initWebSocketServer(3001, (id) => globalThis.sessionManager!.getSession(id));
63
78
  }
64
- return SessionManager.instance;
79
+ return globalThis.sessionManager;
65
80
  }
66
81
 
67
82
  private generateId(): string {
@@ -114,7 +129,7 @@ export class SessionManager {
114
129
  }
115
130
 
116
131
  public syncWorkspaceFolders(session: AgentRunner) {
117
- if (session.type === 'mock') return;
132
+ if (session.type === 'mock' || session.type === 'shell') return;
118
133
  const root = session.workspaceRoot || process.env.ORIGINAL_CWD || process.cwd();
119
134
  const currentWorkspaceFolders = getWorkspaceFileFolders(root);
120
135
 
@@ -116,7 +116,17 @@ export class SessionPersister {
116
116
  }
117
117
  }
118
118
 
119
+ public static cancelPendingSave(id: string) {
120
+ const timer = this.pendingSaves.get(id);
121
+ if (timer) {
122
+ clearTimeout(timer);
123
+ this.pendingSaves.delete(id);
124
+ }
125
+ this.pendingData.delete(id);
126
+ }
127
+
119
128
  public static deleteSession(id: string) {
129
+ this.cancelPendingSave(id);
120
130
  try {
121
131
  const dir = this.getSessionsDir();
122
132
  const filePath = path.join(dir, `${id}.json`);
@@ -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
+ }
@@ -1,3 +0,0 @@
1
- {
2
- "/favicon.ico/route": "app/favicon.ico/route.js"
3
- }
@@ -1,9 +0,0 @@
1
- {
2
- "devFiles": [],
3
- "ampDevFiles": [],
4
- "polyfillFiles": [],
5
- "lowPriorityFiles": [],
6
- "rootMainFiles": [],
7
- "pages": {},
8
- "ampFirstPages": []
9
- }
@@ -1,7 +0,0 @@
1
- var R=require("../../chunks/[turbopack]_runtime.js")("server/app/favicon.ico/route.js")
2
- R.c("server/chunks/[externals]_next_dist_0arv.vj._.js")
3
- R.c("server/chunks/[root-of-the-server]__0j8-xkl._.js")
4
- R.c("server/chunks/node_modules_next_dist_esm_build_templates_app-route_0m.429v.js")
5
- R.c("server/chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js")
6
- R.m(27413)
7
- module.exports=R.m(27413).exports
@@ -1,5 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sections": []
5
- }
@@ -1 +0,0 @@
1
- {"version":1,"files":["../../../../node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../../../node_modules/@swc/helpers/package.json","../../../../node_modules/next/dist/build/adapter/setup-node-env.external.js","../../../../node_modules/next/dist/client/components/app-router-headers.js","../../../../node_modules/next/dist/client/components/hooks-server-context.js","../../../../node_modules/next/dist/client/components/static-generation-bailout.js","../../../../node_modules/next/dist/client/lib/console.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../../node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js","../../../../node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js","../../../../node_modules/next/dist/compiled/source-map/package.json","../../../../node_modules/next/dist/compiled/source-map/source-map.js","../../../../node_modules/next/dist/compiled/stacktrace-parser/package.json","../../../../node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../../../node_modules/next/dist/compiled/ws/index.js","../../../../node_modules/next/dist/compiled/ws/package.json","../../../../node_modules/next/dist/lib/client-and-server-references.js","../../../../node_modules/next/dist/lib/constants.js","../../../../node_modules/next/dist/lib/framework/boundary-constants.js","../../../../node_modules/next/dist/lib/interop-default.js","../../../../node_modules/next/dist/lib/is-error.js","../../../../node_modules/next/dist/lib/picocolors.js","../../../../node_modules/next/dist/lib/scheduler.js","../../../../node_modules/next/dist/lib/semver-noop.js","../../../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../node_modules/next/dist/server/app-render/async-local-storage.js","../../../../node_modules/next/dist/server/app-render/cache-signal.js","../../../../node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/console-async-storage.external.js","../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js","../../../../node_modules/next/dist/server/app-render/dynamic-rendering.js","../../../../node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../../../node_modules/next/dist/server/app-render/staged-rendering.js","../../../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../../../node_modules/next/dist/server/dynamic-rendering-utils.js","../../../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../node_modules/next/dist/server/lib/lru-cache.js","../../../../node_modules/next/dist/server/lib/parse-stack.js","../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../../node_modules/next/dist/server/lib/source-maps.js","../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../node_modules/next/dist/server/load-manifest.external.js","../../../../node_modules/next/dist/server/node-environment-baseline.js","../../../../node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../../../node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../../../node_modules/next/dist/server/node-environment-extensions/console-file.js","../../../../node_modules/next/dist/server/node-environment-extensions/date.js","../../../../node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../../../node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../../../node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../../../node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../../../node_modules/next/dist/server/node-environment-extensions/random.js","../../../../node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../../../node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../../../node_modules/next/dist/server/node-environment.js","../../../../node_modules/next/dist/server/node-polyfill-crypto.js","../../../../node_modules/next/dist/server/patch-error-inspect.js","../../../../node_modules/next/dist/server/require-hook.js","../../../../node_modules/next/dist/server/response-cache/types.js","../../../../node_modules/next/dist/server/runtime-reacts.external.js","../../../../node_modules/next/dist/shared/lib/deep-freeze.js","../../../../node_modules/next/dist/shared/lib/invariant-error.js","../../../../node_modules/next/dist/shared/lib/is-plain-object.js","../../../../node_modules/next/dist/shared/lib/is-thenable.js","../../../../node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js","../../../../node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../../node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../../../node_modules/next/dist/shared/lib/server-reference-info.js","../../../../node_modules/next/package.json","../../../../node_modules/react/cjs/react.development.js","../../../../node_modules/react/cjs/react.production.js","../../../../node_modules/react/index.js","../../../../node_modules/react/package.json","../../chunks/[externals]_next_dist_0arv.vj._.js","../../chunks/[root-of-the-server]__0j8-xkl._.js","../../chunks/[turbopack]_runtime.js","../../chunks/_next-internal_server_app_favicon_ico_route_actions_095lj93.js","../../chunks/node_modules_next_dist_esm_build_templates_app-route_0m.429v.js"]}
Binary file
@@ -1 +0,0 @@
1
- {"status":200,"headers":{"cache-control":"public, max-age=0, must-revalidate","content-type":"image/x-icon","x-next-cache-tags":"_N_T_/layout,_N_T_/favicon.ico/layout,_N_T_/favicon.ico/route,_N_T_/favicon.ico"}}
@@ -1,3 +0,0 @@
1
- module.exports=[18622,(e,r,t)=>{r.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,r,t)=>{r.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},70406,(e,r,t)=>{r.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},14747,(e,r,t)=>{r.exports=e.x("path",()=>require("path"))},93695,(e,r,t)=>{r.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},22734,(e,r,t)=>{r.exports=e.x("fs",()=>require("fs"))},46786,(e,r,t)=>{r.exports=e.x("os",()=>require("os"))}];
2
-
3
- //# sourceMappingURL=%5Bexternals%5D__1334_78._.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- module.exports=[18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},33405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},35545,e=>{"use strict";var t=e.i(47909),r=e.i(74017),s=e.i(96250),n=e.i(59756),a=e.i(61916),o=e.i(74677),i=e.i(69741),l=e.i(16795),u=e.i(87718),c=e.i(95169),d=e.i(47587),p=e.i(66012),h=e.i(70101),x=e.i(26937),f=e.i(10372),R=e.i(93695);e.i(52474);var v=e.i(220),m=e.i(89171),g=e.i(22734),y=e.i(14747),w=e.i(33405);let E=y.default.join(process.env.ORIGINAL_CWD||process.cwd(),".ai","neural-loom"),C=y.default.join(E,"ssh.json");async function N(){try{if(g.default.existsSync(C)){let e=g.default.readFileSync(C,"utf8"),t=JSON.parse(e);return m.NextResponse.json({success:!0,config:t})}return m.NextResponse.json({success:!0,config:{host:"",port:22,username:"",privateKeyPath:""}})}catch(t){let e=t instanceof Error?t.message:"Unknown error";return m.NextResponse.json({success:!1,error:e},{status:500})}}async function S(e){try{let{test:t,host:r,port:s,username:n,privateKeyPath:a}=await e.json();if(!r||!n)return m.NextResponse.json({success:!1,error:"Host and Username are required."},{status:400});let o=s?parseInt(String(s),10):22;if(t){let e=await new Promise(e=>{let t=a?`-i "${a}"`:"",s=`-p ${o}`,i=`ssh -o ConnectTimeout=3 -o BatchMode=yes -o StrictHostKeyChecking=accept-new ${t} ${s} ${n}@${r} "echo CONNECTED"`;(0,w.exec)(i,(t,r,s)=>{t?e({ok:!1,message:s.trim()||t.message}):r.trim().includes("CONNECTED")?e({ok:!0,message:"Successfully connected to remote VM!"}):e({ok:!1,message:s.trim()||"Failed to verify remote host verification print."})})});return m.NextResponse.json({success:e.ok,message:e.message})}return g.default.existsSync(E)||g.default.mkdirSync(E,{recursive:!0}),g.default.writeFileSync(C,JSON.stringify({host:r,port:o,username:n,privateKeyPath:a||""},null,2),"utf8"),m.NextResponse.json({success:!0,message:"SSH configuration saved successfully!"})}catch(t){let e=t instanceof Error?t.message:"Unknown error";return m.NextResponse.json({success:!1,error:e},{status:500})}}e.s(["GET",0,N,"POST",0,S],22571);var A=e.i(22571);let T=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/context/ssh/route",pathname:"/api/context/ssh",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/context/ssh/route.ts",nextConfigOutput:"",userland:A,...{}}),{workAsyncStorage:b,workUnitAsyncStorage:k,serverHooks:j}=T;async function q(e,t,s){s.requestMeta&&(0,n.setRequestMeta)(e,s.requestMeta),T.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let m="/api/context/ssh/route";m=m.replace(/\/index$/,"")||"/";let g=await T.prepare(e,t,{srcPage:m,multiZoneDraftMode:!1});if(!g)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:y,deploymentId:w,params:E,nextConfig:C,parsedUrl:N,isDraftMode:S,prerenderManifest:A,routerServerContext:b,isOnDemandRevalidate:k,revalidateOnlyGenerated:j,resolvedPathname:q,clientReferenceManifest:P,serverActionsManifest:O}=g,_=(0,i.normalizeAppPath)(m),H=!!(A.dynamicRoutes[_]||A.routes[q]),I=async()=>((null==b?void 0:b.render404)?await b.render404(e,t,N,!1):t.end("This page could not be found"),null);if(H&&!S){let e=!!A.routes[q],t=A.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await I();throw new R.NoFallbackError}}let U=null;!H||T.isDev||S||(U="/index"===(U=q)?"/":U);let M=!0===T.isDev||!H,D=H&&!M;O&&P&&(0,o.setManifestsSingleton)({page:m,clientReferenceManifest:P,serverActionsManifest:O});let $=e.method||"GET",F=(0,a.getTracer)(),K=F.getActiveScopeSpan(),B=!!(null==b?void 0:b.isWrappedByNextServer),L=!!(0,n.getRequestMeta)(e,"minimalMode"),G=(0,n.getRequestMeta)(e,"incrementalCache")||await T.getIncrementalCache(e,C,A,L);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let V={params:E,previewProps:A.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts},cacheComponents:!!C.cacheComponents,supportsDynamicResponse:M,incrementalCache:G,cacheLifeProfiles:C.cacheLife,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,n)=>T.onRequestError(e,t,s,n,b)},sharedContext:{buildId:y,deploymentId:w}},W=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(W,(0,u.signalFromNodeResponse)(t));try{let n,o=async e=>T.handle(J,V).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=F.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route");if(s){let t=`${$} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",s),n.updateName(t))}else e.updateName(`${$} ${m}`)}),i=async n=>{var a,i;let l=async({previousCacheEntry:r})=>{try{if(!L&&k&&j&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await o(n);e.fetchMetrics=V.renderOpts.fetchMetrics;let i=V.renderOpts.pendingWaitUntil;i&&s.waitUntil&&(s.waitUntil(i),i=void 0);let l=V.renderOpts.collectedTags;if(!H)return await (0,p.sendResponse)(W,X,a,V.renderOpts.pendingWaitUntil),null;{let e=await a.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(a.headers);l&&(t[f.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==V.renderOpts.collectedRevalidate&&!(V.renderOpts.collectedRevalidate>=f.INFINITE_CACHE)&&V.renderOpts.collectedRevalidate,s=void 0===V.renderOpts.collectedExpire||V.renderOpts.collectedExpire>=f.INFINITE_CACHE?void 0:V.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await T.onRequestError(e,t,{routerKind:"App Router",routePath:m,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:k})},!1,b),t}},u=await T.handleResponse({req:e,nextConfig:C,cacheKey:U,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:k,revalidateOnlyGenerated:j,responseGenerator:l,waitUntil:s.waitUntil,isMinimalMode:L});if(!H)return null;if((null==u||null==(a=u.value)?void 0:a.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(i=u.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});L||t.setHeader("x-nextjs-cache",k?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let c=(0,h.fromNodeOutgoingHttpHeaders)(u.value.headers);return L&&H||c.delete(f.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||c.get("Cache-Control")||c.set("Cache-Control",(0,x.getCacheControlHeader)(u.cacheControl)),await (0,p.sendResponse)(W,X,new Response(u.value.body,{headers:c,status:u.value.status||200})),null};B&&K?await i(K):(n=F.getActiveScopeSpan(),await F.withPropagatedContext(e.headers,()=>F.trace(c.BaseServerSpan.handleRequest,{spanName:`${$} ${m}`,kind:a.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},i),void 0,!B))}catch(t){if(t instanceof R.NoFallbackError||await T.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:k})},!1,b),H)throw t;return await (0,p.sendResponse)(W,X,new Response(null,{status:500})),null}}e.s(["handler",0,q,"patchFetch",0,function(){return(0,s.patchFetch)({workAsyncStorage:b,workUnitAsyncStorage:k})},"routeModule",0,T,"serverHooks",0,j,"workAsyncStorage",0,b,"workUnitAsyncStorage",0,k],35545)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0l7c-gn._.js.map
@@ -1,15 +0,0 @@
1
- module.exports=[24361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},24417,e=>{"use strict";var t=e.i(22734),r=e.i(14747);e.s(["getWorkspaceFileFolders",0,function(e){try{if(!e||!t.default.existsSync(e))return[];let s=r.default.resolve(e).replace(/\\/g,"/"),a=t.default.readdirSync(s).find(e=>e.endsWith(".code-workspace"));if(!a)return[];let n=r.default.join(s,a),i=t.default.readFileSync(n,"utf8"),o=JSON.parse(i);if(!o.folders||!Array.isArray(o.folders))return[];let l=[];for(let e of o.folders)if(e.path){let a=r.default.resolve(s,e.path).replace(/\\/g,"/");a!==s&&t.default.existsSync(a)&&l.push(a)}return l}catch(e){return console.error("[WorkspaceParser] Failed to parse code-workspace file:",e),[]}}])},46619,e=>{"use strict";var t=e.i(22734),r=e.i(14747);e.s(["ContextManager",0,class{static get workspaceRoot(){return process.env.ORIGINAL_CWD||process.cwd()}static ensureDirs(e){let s=r.default.join(e,".ai","neural-loom");t.default.existsSync(s)||t.default.mkdirSync(s,{recursive:!0});let a=r.default.join(e,".claude","commands");t.default.existsSync(a)||t.default.mkdirSync(a,{recursive:!0})}static initializeStaging(e=process.env.ORIGINAL_CWD||process.cwd()){this.ensureDirs(e);let s=r.default.join(e,".claude","commands","ccp.md");t.default.existsSync(s)||t.default.writeFileSync(s,"Read the prompt from .ai/neural-loom/cprompt.md and execute it. This is a staged prompt from the NeuralLoom UI. Treat the contents as user instructions.\n");let a=r.default.join(e,".claude","commands","ccc.md");t.default.existsSync(a)||t.default.writeFileSync(a,"Read the context from .ai/neural-loom/ccontext.md. This is persistent context from the NeuralLoom UI. Absorb it as background information for this session. Acknowledge briefly what you received.\n")}static updatePrompt(e,s=process.env.ORIGINAL_CWD||process.cwd()){this.ensureDirs(s);let a=r.default.join(s,".ai","neural-loom","cprompt.md");t.default.writeFileSync(a,e)}static updateContext(e,s=process.env.ORIGINAL_CWD||process.cwd()){this.ensureDirs(s);let a=r.default.join(s,".ai","neural-loom","ccontext.md");t.default.writeFileSync(a,e)}static updateRules(e,s=process.env.ORIGINAL_CWD||process.cwd()){this.ensureDirs(s);let a=r.default.join(s,"AGENTS.md");t.default.writeFileSync(a,e,"utf8")}static loadPrompt(e=process.env.ORIGINAL_CWD||process.cwd()){let s=r.default.join(e,".ai","neural-loom","cprompt.md");return t.default.existsSync(s)?t.default.readFileSync(s,"utf8"):""}static loadRules(e=process.env.ORIGINAL_CWD||process.cwd()){let s=r.default.join(e,"AGENTS.md");return t.default.existsSync(s)?t.default.readFileSync(s,"utf8"):""}static compileGlobalRules(){this.compileSessionContext()}static compileSessionContext(e=process.env.ORIGINAL_CWD||process.cwd(),s){this.ensureDirs(e),this.initializeStaging(e);let a=r.default.join(e,"AGENTS.md"),n="";if(t.default.existsSync(a))n=t.default.readFileSync(a,"utf8");else{let e=r.default.join(this.workspaceRoot,"AGENTS.md");t.default.existsSync(e)&&(n=t.default.readFileSync(e,"utf8"))}let i=`## Workspace Root Map (${e}):
2
- ${this.generateProjectMapFor(e)}`;s&&Array.isArray(s)&&s.forEach(e=>{t.default.existsSync(e)&&(i+=`
3
-
4
- ## Scoped Directory Map (${e}):
5
- ${this.generateProjectMapFor(e)}`)});let o=`# System Rules & Guidelines
6
-
7
- ${n}
8
-
9
- # Project File Hierarchy Map
10
-
11
- ${i}`;this.updateContext(o,e);let l=r.default.join(e,".ai","neural-loom","cprompt.md");t.default.existsSync(l)||t.default.writeFileSync(l,"Hello! Please review the project context (/ccc) and check for any tasks to execute.")}static generateProjectMapFor(e){try{let s=(e,a=0)=>{if(a>2)return"";let n="";for(let i of t.default.readdirSync(e,{withFileTypes:!0})){if(i.name.startsWith(".")||"node_modules"===i.name||"out"===i.name||".next"===i.name)continue;let t=" ".repeat(a);i.isDirectory()?(n+=`${t}- [Dir] ${i.name}/
12
- `,n+=s(r.default.join(e,i.name),a+1)):n+=`${t}- [File] ${i.name}
13
- `}return n};return s(e)}catch(e){return"Error generating project map: "+(e instanceof Error?e.message:String(e))}}}])},33405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},46786,(e,t,r)=>{t.exports=e.x("os",()=>require("os"))},6299,e=>{"use strict";var t=e.i(47909),r=e.i(74017),s=e.i(96250),a=e.i(59756),n=e.i(61916),i=e.i(74677),o=e.i(69741),l=e.i(16795),d=e.i(87718),u=e.i(95169),c=e.i(47587),p=e.i(66012),f=e.i(70101),m=e.i(26937),h=e.i(10372),x=e.i(93695);e.i(52474);var y=e.i(220),R=e.i(89171),g=e.i(29307),v=e.i(24361),w=e.i(33405),S=e.i(46786);let C=(0,v.promisify)(w.exec);async function E(e){try{let{searchParams:t}=new URL(e.url),r=t.get("id");if(!r)return R.NextResponse.json({error:"Missing session id"},{status:400});let s=g.SessionManager.getInstance().getSession(r);if(!s)return R.NextResponse.json({error:"Session not found"},{status:404});let a="0.0%",n="0.0MiB",i="0.0%";if("running"===s.status)if("claude-docker"===s.type||"aider-docker"===s.type)try{let e=`neural-loom-session-${r}`,{stdout:t}=await C(`docker stats ${e} --no-stream --format "{{.CPUPerc}},{{.MemUsage}},{{.MemPerc}}"`),s=t.trim().split(",");s.length>=3&&(a=s[0].trim(),n=s[1].trim().split(" / ")[0],i=s[2].trim())}catch{let e=(3*Math.random()+1).toFixed(1)+"%",t=(130+20*Math.random()).toFixed(1)+"MiB",r=(1.5+.5*Math.random()).toFixed(2)+"%";a=e,n=t,i=r}else{let e=(5*Math.random()+2).toFixed(1)+"%",t=process.memoryUsage().rss,r=(t/1048576).toFixed(1)+"MiB",s=(t/S.default.totalmem()*100).toFixed(2)+"%";a=e,n=r,i=s}return R.NextResponse.json({success:!0,id:r,status:s.status,type:s.type,cpu:a,memory:n,memoryPercent:i})}catch(t){let e=t instanceof Error?t.message:"Unknown error";return R.NextResponse.json({error:e},{status:500})}}e.s(["GET",0,E],40607);var A=e.i(40607);let N=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/sessions/stats/route",pathname:"/api/sessions/stats",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/sessions/stats/route.ts",nextConfigOutput:"",userland:A,...{}}),{workAsyncStorage:j,workUnitAsyncStorage:k,serverHooks:I}=N;async function P(e,t,s){s.requestMeta&&(0,a.setRequestMeta)(e,s.requestMeta),N.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let R="/api/sessions/stats/route";R=R.replace(/\/index$/,"")||"/";let g=await N.prepare(e,t,{srcPage:R,multiZoneDraftMode:!1});if(!g)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:v,deploymentId:w,params:S,nextConfig:C,parsedUrl:E,isDraftMode:A,prerenderManifest:j,routerServerContext:k,isOnDemandRevalidate:I,revalidateOnlyGenerated:P,resolvedPathname:b,clientReferenceManifest:F,serverActionsManifest:T}=g,M=(0,o.normalizeAppPath)(R),_=!!(j.dynamicRoutes[M]||j.routes[b]),D=async()=>((null==k?void 0:k.render404)?await k.render404(e,t,E,!1):t.end("This page could not be found"),null);if(_&&!A){let e=!!j.routes[b],t=j.dynamicRoutes[M];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await D();throw new x.NoFallbackError}}let O=null;!_||N.isDev||A||(O="/index"===(O=b)?"/":O);let q=!0===N.isDev||!_,U=_&&!q;T&&F&&(0,i.setManifestsSingleton)({page:R,clientReferenceManifest:F,serverActionsManifest:T});let $=e.method||"GET",H=(0,n.getTracer)(),G=H.getActiveScopeSpan(),L=!!(null==k?void 0:k.isWrappedByNextServer),W=!!(0,a.getRequestMeta)(e,"minimalMode"),B=(0,a.getRequestMeta)(e,"incrementalCache")||await N.getIncrementalCache(e,C,j,W);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let K={params:S,previewProps:j.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts},cacheComponents:!!C.cacheComponents,supportsDynamicResponse:q,incrementalCache:B,cacheLifeProfiles:C.cacheLife,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,a)=>N.onRequestError(e,t,s,a,k)},sharedContext:{buildId:v,deploymentId:w}},z=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),X=d.NextRequestAdapter.fromNodeNextRequest(z,(0,d.signalFromNodeResponse)(t));try{let a,i=async e=>N.handle(X,K).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=H.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route");if(s){let t=`${$} ${s}`;e.setAttributes({"next.route":s,"http.route":s,"next.span_name":t}),e.updateName(t),a&&a!==e&&(a.setAttribute("http.route",s),a.updateName(t))}else e.updateName(`${$} ${R}`)}),o=async a=>{var n,o;let l=async({previousCacheEntry:r})=>{try{if(!W&&I&&P&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await i(a);e.fetchMetrics=K.renderOpts.fetchMetrics;let o=K.renderOpts.pendingWaitUntil;o&&s.waitUntil&&(s.waitUntil(o),o=void 0);let l=K.renderOpts.collectedTags;if(!_)return await (0,p.sendResponse)(z,V,n,K.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(n.headers);l&&(t[h.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==K.renderOpts.collectedRevalidate&&!(K.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&K.renderOpts.collectedRevalidate,s=void 0===K.renderOpts.collectedExpire||K.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:K.renderOpts.collectedExpire;return{value:{kind:y.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await N.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:I})},!1,k),t}},d=await N.handleResponse({req:e,nextConfig:C,cacheKey:O,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:j,isRoutePPREnabled:!1,isOnDemandRevalidate:I,revalidateOnlyGenerated:P,responseGenerator:l,waitUntil:s.waitUntil,isMinimalMode:W});if(!_)return null;if((null==d||null==(n=d.value)?void 0:n.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(o=d.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});W||t.setHeader("x-nextjs-cache",I?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),A&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return W&&_||u.delete(h.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,m.getCacheControlHeader)(d.cacheControl)),await (0,p.sendResponse)(z,V,new Response(d.value.body,{headers:u,status:d.value.status||200})),null};L&&G?await o(G):(a=H.getActiveScopeSpan(),await H.withPropagatedContext(e.headers,()=>H.trace(u.BaseServerSpan.handleRequest,{spanName:`${$} ${R}`,kind:n.SpanKind.SERVER,attributes:{"http.method":$,"http.target":e.url}},o),void 0,!L))}catch(t){if(t instanceof x.NoFallbackError||await N.onRequestError(e,t,{routerKind:"App Router",routePath:M,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:I})},!1,k),_)throw t;return await (0,p.sendResponse)(z,V,new Response(null,{status:500})),null}}e.s(["handler",0,P,"patchFetch",0,function(){return(0,s.patchFetch)({workAsyncStorage:j,workUnitAsyncStorage:k})},"routeModule",0,N,"serverHooks",0,I,"workAsyncStorage",0,j,"workUnitAsyncStorage",0,k],6299)}];
14
-
15
- //# sourceMappingURL=%5Broot-of-the-server%5D__0m91xif._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},24361,(e,t,r)=>{t.exports=e.x("util",()=>require("util"))},33405,(e,t,r)=>{t.exports=e.x("child_process",()=>require("child_process"))},5687,e=>{"use strict";var t=e.i(47909),r=e.i(74017),a=e.i(96250),s=e.i(59756),n=e.i(61916),i=e.i(74677),o=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),p=e.i(47587),c=e.i(66012),x=e.i(70101),f=e.i(26937),h=e.i(10372),R=e.i(93695);e.i(52474);var g=e.i(220),v=e.i(89171),w=e.i(24361),m=e.i(33405),y=e.i(22734),E=e.i(14747);let C=(0,w.promisify)(m.exec);async function N(e){try{let{searchParams:t}=new URL(e.url),r=t.get("action"),a=t.get("root"),s=t.get("file"),n=(a&&y.default.existsSync(a)?a:process.env.ORIGINAL_CWD||process.cwd()).replace(/\\/g,"/");try{await C("git rev-parse --is-inside-work-tree",{cwd:n})}catch{return v.NextResponse.json({success:!0,isGit:!1,files:[]})}if("status"===r){let{stdout:e}=await C("git status --porcelain",{cwd:n}),t=e.split(/\r?\n/).filter(Boolean).map(e=>{let t=e.substring(0,2),r=e.substring(3).trim();r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1));let a=E.default.join(n,r).replace(/\\/g,"/");return{status:t.trim(),relativePath:r,absolutePath:a,name:E.default.basename(r)}});return v.NextResponse.json({success:!0,isGit:!0,files:t})}if("diff"===r){if(!s)return v.NextResponse.json({error:"Missing file parameter"},{status:400});let e=E.default.resolve(n,s).replace(/\\/g,"/");if(!y.default.existsSync(e))return v.NextResponse.json({error:"File not found"},{status:404});let{stdout:t}=await C("git status --porcelain -- "+JSON.stringify(s),{cwd:n});if(t.startsWith("??")){let t=y.default.readFileSync(e,"utf8").split(/\r?\n/).map(e=>"+"+e).join("\n");return v.NextResponse.json({success:!0,diff:t})}try{let{stdout:e}=await C(`git diff --no-color -- ${JSON.stringify(s)}`,{cwd:n});return v.NextResponse.json({success:!0,diff:e})}catch{return v.NextResponse.json({success:!0,diff:"Binary file or diff unavailable."})}}return v.NextResponse.json({error:"Invalid action"},{status:400})}catch(t){let e=t instanceof Error?t.message:"Unknown error";return v.NextResponse.json({error:e},{status:500})}}e.s(["GET",0,N],89717);var b=e.i(89717);let A=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/git/route",pathname:"/api/git",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/git/route.ts",nextConfigOutput:"",userland:b,...{}}),{workAsyncStorage:j,workUnitAsyncStorage:q,serverHooks:S}=A;async function T(e,t,a){a.requestMeta&&(0,s.setRequestMeta)(e,a.requestMeta),A.isDev&&(0,s.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let v="/api/git/route";v=v.replace(/\/index$/,"")||"/";let w=await A.prepare(e,t,{srcPage:v,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:m,deploymentId:y,params:E,nextConfig:C,parsedUrl:N,isDraftMode:b,prerenderManifest:j,routerServerContext:q,isOnDemandRevalidate:S,revalidateOnlyGenerated:T,resolvedPathname:_,clientReferenceManifest:O,serverActionsManifest:P}=w,k=(0,o.normalizeAppPath)(v),I=!!(j.dynamicRoutes[k]||j.routes[_]),U=async()=>((null==q?void 0:q.render404)?await q.render404(e,t,N,!1):t.end("This page could not be found"),null);if(I&&!b){let e=!!j.routes[_],t=j.dynamicRoutes[k];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await U();throw new R.NoFallbackError}}let H=null;!I||A.isDev||b||(H="/index"===(H=_)?"/":H);let M=!0===A.isDev||!I,D=I&&!M;P&&O&&(0,i.setManifestsSingleton)({page:v,clientReferenceManifest:O,serverActionsManifest:P});let F=e.method||"GET",$=(0,n.getTracer)(),B=$.getActiveScopeSpan(),K=!!(null==q?void 0:q.isWrappedByNextServer),G=!!(0,s.getRequestMeta)(e,"minimalMode"),L=(0,s.getRequestMeta)(e,"incrementalCache")||await A.getIncrementalCache(e,C,j,G);null==L||L.resetRequestCache(),globalThis.__incrementalCache=L;let W={params:E,previewProps:j.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts},cacheComponents:!!C.cacheComponents,supportsDynamicResponse:M,incrementalCache:L,cacheLifeProfiles:C.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,s)=>A.onRequestError(e,t,a,s,q)},sharedContext:{buildId:m,deploymentId:y}},V=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),J=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t));try{let s,i=async e=>A.handle(J,W).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=$.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${F} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),s&&s!==e&&(s.setAttribute("http.route",a),s.updateName(t))}else e.updateName(`${F} ${v}`)}),o=async s=>{var n,o;let l=async({previousCacheEntry:r})=>{try{if(!G&&S&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await i(s);e.fetchMetrics=W.renderOpts.fetchMetrics;let o=W.renderOpts.pendingWaitUntil;o&&a.waitUntil&&(a.waitUntil(o),o=void 0);let l=W.renderOpts.collectedTags;if(!I)return await (0,c.sendResponse)(V,X,n,W.renderOpts.pendingWaitUntil),null;{let e=await n.blob(),t=(0,x.toNodeOutgoingHttpHeaders)(n.headers);l&&(t[h.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==W.renderOpts.collectedRevalidate&&!(W.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&W.renderOpts.collectedRevalidate,a=void 0===W.renderOpts.collectedExpire||W.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:W.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await A.onRequestError(e,t,{routerKind:"App Router",routePath:v,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:S})},!1,q),t}},u=await A.handleResponse({req:e,nextConfig:C,cacheKey:H,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:j,isRoutePPREnabled:!1,isOnDemandRevalidate:S,revalidateOnlyGenerated:T,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:G});if(!I)return null;if((null==u||null==(n=u.value)?void 0:n.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==u||null==(o=u.value)?void 0:o.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});G||t.setHeader("x-nextjs-cache",S?"REVALIDATED":u.isMiss?"MISS":u.isStale?"STALE":"HIT"),b&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let d=(0,x.fromNodeOutgoingHttpHeaders)(u.value.headers);return G&&I||d.delete(h.NEXT_CACHE_TAGS_HEADER),!u.cacheControl||t.getHeader("Cache-Control")||d.get("Cache-Control")||d.set("Cache-Control",(0,f.getCacheControlHeader)(u.cacheControl)),await (0,c.sendResponse)(V,X,new Response(u.value.body,{headers:d,status:u.value.status||200})),null};K&&B?await o(B):(s=$.getActiveScopeSpan(),await $.withPropagatedContext(e.headers,()=>$.trace(d.BaseServerSpan.handleRequest,{spanName:`${F} ${v}`,kind:n.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},o),void 0,!K))}catch(t){if(t instanceof R.NoFallbackError||await A.onRequestError(e,t,{routerKind:"App Router",routePath:k,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:S})},!1,q),I)throw t;return await (0,c.sendResponse)(V,X,new Response(null,{status:500})),null}}e.s(["handler",0,T,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:j,workUnitAsyncStorage:q})},"routeModule",0,A,"serverHooks",0,S,"workAsyncStorage",0,j,"workUnitAsyncStorage",0,q],5687)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0ntt3om._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},24725,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/after-task-async-storage.external.js",()=>require("next/dist/server/app-render/after-task-async-storage.external.js"))},70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},14747,(e,t,r)=>{t.exports=e.x("path",()=>require("path"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},22734,(e,t,r)=>{t.exports=e.x("fs",()=>require("fs"))},24417,e=>{"use strict";var t=e.i(22734),r=e.i(14747);e.s(["getWorkspaceFileFolders",0,function(e){try{if(!e||!t.default.existsSync(e))return[];let a=r.default.resolve(e).replace(/\\/g,"/"),n=t.default.readdirSync(a).find(e=>e.endsWith(".code-workspace"));if(!n)return[];let s=r.default.join(a,n),o=t.default.readFileSync(s,"utf8"),i=JSON.parse(o);if(!i.folders||!Array.isArray(i.folders))return[];let l=[];for(let e of i.folders)if(e.path){let n=r.default.resolve(a,e.path).replace(/\\/g,"/");n!==a&&t.default.existsSync(n)&&l.push(n)}return l}catch(e){return console.error("[WorkspaceParser] Failed to parse code-workspace file:",e),[]}}])},81243,e=>{"use strict";var t=e.i(47909),r=e.i(74017),a=e.i(96250),n=e.i(59756),s=e.i(61916),o=e.i(74677),i=e.i(69741),l=e.i(16795),d=e.i(87718),u=e.i(95169),c=e.i(47587),p=e.i(66012),f=e.i(70101),x=e.i(26937),h=e.i(10372),R=e.i(93695);e.i(52474);var v=e.i(220),g=e.i(89171),y=e.i(22734),w=e.i(14747),m=e.i(24417);let E=w.default.join(process.env.ORIGINAL_CWD||process.cwd(),".ai","neural-loom"),C=w.default.join(E,"claude.json");async function A(){try{let e="Claude Local",t="",r=[],a="";if(y.default.existsSync(C))try{let n=y.default.readFileSync(C,"utf8"),s=JSON.parse(n);e=s.name||"Claude Local",t=s.workspaceRoot||"",r=s.scopedDirs||[],a=s.extraFlags||""}catch(e){console.error("Failed to parse claude.json:",e)}let n=t||process.env.ORIGINAL_CWD||process.cwd(),s=(0,m.getWorkspaceFileFolders)(n),o=Array.from(new Set([...r,...s]));return g.NextResponse.json({success:!0,config:{name:e,workspaceRoot:t,scopedDirs:o,extraFlags:a}})}catch(t){let e=t instanceof Error?t.message:"Unknown error";return g.NextResponse.json({success:!1,error:e},{status:500})}}async function S(e){try{let{name:t,workspaceRoot:r,scopedDirs:a,extraFlags:n}=await e.json();return y.default.existsSync(E)||y.default.mkdirSync(E,{recursive:!0}),y.default.writeFileSync(C,JSON.stringify({name:t||"Claude Local",workspaceRoot:r||"",scopedDirs:a||[],extraFlags:n||""},null,2),"utf8"),g.NextResponse.json({success:!0,message:"Claude configuration saved successfully!"})}catch(t){let e=t instanceof Error?t.message:"Unknown error";return g.NextResponse.json({success:!1,error:e},{status:500})}}e.s(["GET",0,A,"POST",0,S],82294);var N=e.i(82294);let k=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/context/claude/route",pathname:"/api/context/claude",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/src/app/api/context/claude/route.ts",nextConfigOutput:"",userland:N,...{}}),{workAsyncStorage:b,workUnitAsyncStorage:j,serverHooks:O}=k;async function T(e,t,a){a.requestMeta&&(0,n.setRequestMeta)(e,a.requestMeta),k.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let g="/api/context/claude/route";g=g.replace(/\/index$/,"")||"/";let y=await k.prepare(e,t,{srcPage:g,multiZoneDraftMode:!1});if(!y)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:w,deploymentId:m,params:E,nextConfig:C,parsedUrl:A,isDraftMode:S,prerenderManifest:N,routerServerContext:b,isOnDemandRevalidate:j,revalidateOnlyGenerated:O,resolvedPathname:T,clientReferenceManifest:q,serverActionsManifest:P}=y,_=(0,i.normalizeAppPath)(g),I=!!(N.dynamicRoutes[_]||N.routes[T]),F=async()=>((null==b?void 0:b.render404)?await b.render404(e,t,A,!1):t.end("This page could not be found"),null);if(I&&!S){let e=!!N.routes[T],t=N.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await F();throw new R.NoFallbackError}}let D=null;!I||k.isDev||S||(D="/index"===(D=T)?"/":D);let U=!0===k.isDev||!I,H=I&&!U;P&&q&&(0,o.setManifestsSingleton)({page:g,clientReferenceManifest:q,serverActionsManifest:P});let M=e.method||"GET",L=(0,s.getTracer)(),W=L.getActiveScopeSpan(),$=!!(null==b?void 0:b.isWrappedByNextServer),K=!!(0,n.getRequestMeta)(e,"minimalMode"),B=(0,n.getRequestMeta)(e,"incrementalCache")||await k.getIncrementalCache(e,C,N,K);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let G={params:E,previewProps:N.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts},cacheComponents:!!C.cacheComponents,supportsDynamicResponse:U,incrementalCache:B,cacheLifeProfiles:C.cacheLife,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,a,n)=>k.onRequestError(e,t,a,n,b)},sharedContext:{buildId:w,deploymentId:m}},J=new l.NodeNextRequest(e),V=new l.NodeNextResponse(t),X=d.NextRequestAdapter.fromNodeNextRequest(J,(0,d.signalFromNodeResponse)(t));try{let n,o=async e=>k.handle(X,G).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=L.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==u.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=r.get("next.route");if(a){let t=`${M} ${a}`;e.setAttributes({"next.route":a,"http.route":a,"next.span_name":t}),e.updateName(t),n&&n!==e&&(n.setAttribute("http.route",a),n.updateName(t))}else e.updateName(`${M} ${g}`)}),i=async n=>{var s,i;let l=async({previousCacheEntry:r})=>{try{if(!K&&j&&O&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let s=await o(n);e.fetchMetrics=G.renderOpts.fetchMetrics;let i=G.renderOpts.pendingWaitUntil;i&&a.waitUntil&&(a.waitUntil(i),i=void 0);let l=G.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(J,V,s,G.renderOpts.pendingWaitUntil),null;{let e=await s.blob(),t=(0,f.toNodeOutgoingHttpHeaders)(s.headers);l&&(t[h.NEXT_CACHE_TAGS_HEADER]=l),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=h.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=h.INFINITE_CACHE?void 0:G.renderOpts.collectedExpire;return{value:{kind:v.CachedRouteKind.APP_ROUTE,status:s.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:a}}}}catch(t){throw(null==r?void 0:r.isStale)&&await k.onRequestError(e,t,{routerKind:"App Router",routePath:g,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:j})},!1,b),t}},d=await k.handleResponse({req:e,nextConfig:C,cacheKey:D,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:N,isRoutePPREnabled:!1,isOnDemandRevalidate:j,revalidateOnlyGenerated:O,responseGenerator:l,waitUntil:a.waitUntil,isMinimalMode:K});if(!I)return null;if((null==d||null==(s=d.value)?void 0:s.kind)!==v.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(i=d.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});K||t.setHeader("x-nextjs-cache",j?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let u=(0,f.fromNodeOutgoingHttpHeaders)(d.value.headers);return K&&I||u.delete(h.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||u.get("Cache-Control")||u.set("Cache-Control",(0,x.getCacheControlHeader)(d.cacheControl)),await (0,p.sendResponse)(J,V,new Response(d.value.body,{headers:u,status:d.value.status||200})),null};$&&W?await i(W):(n=L.getActiveScopeSpan(),await L.withPropagatedContext(e.headers,()=>L.trace(u.BaseServerSpan.handleRequest,{spanName:`${M} ${g}`,kind:s.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},i),void 0,!$))}catch(t){if(t instanceof R.NoFallbackError||await k.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:j})},!1,b),I)throw t;return await (0,p.sendResponse)(J,V,new Response(null,{status:500})),null}}e.s(["handler",0,T,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:b,workUnitAsyncStorage:j})},"routeModule",0,k,"serverHooks",0,O,"workAsyncStorage",0,b,"workUnitAsyncStorage",0,j],81243)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0p~u94k._.js.map