neural-loom 0.2.70 → 0.3.0

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 (232) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/cache/.previewinfo +1 -1
  4. package/.next/cache/.rscinfo +1 -1
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/diagnostics/route-bundle-stats.json +11 -11
  7. package/.next/fallback-build-manifest.json +3 -3
  8. package/.next/next-server.js.nft.json +1 -1
  9. package/.next/prerender-manifest.json +3 -3
  10. package/.next/required-server-files.js +20 -20
  11. package/.next/required-server-files.json +20 -20
  12. package/.next/server/app/_global-error.html +1 -1
  13. package/.next/server/app/_global-error.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  17. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  18. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.html +1 -1
  20. package/.next/server/app/_not-found.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  27. package/.next/server/app/api/configs/route.js.nft.json +1 -1
  28. package/.next/server/app/api/context/aider/route.js.nft.json +1 -1
  29. package/.next/server/app/api/context/claude/route.js.nft.json +1 -1
  30. package/.next/server/app/api/context/route.js.nft.json +1 -1
  31. package/.next/server/app/api/context/ssh/route.js.nft.json +1 -1
  32. package/.next/server/app/api/files/route.js +1 -1
  33. package/.next/server/app/api/files/route.js.nft.json +1 -1
  34. package/.next/server/app/api/recents/route.js.nft.json +1 -1
  35. package/.next/server/app/api/sessions/inject/route.js.nft.json +1 -1
  36. package/.next/server/app/api/sessions/input/route.js.nft.json +1 -1
  37. package/.next/server/app/api/sessions/launch/route.js.nft.json +1 -1
  38. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  39. package/.next/server/app/api/sessions/scope/route.js.nft.json +1 -1
  40. package/.next/server/app/api/sessions/start/route.js.nft.json +1 -1
  41. package/.next/server/app/api/sessions/stats/route.js.nft.json +1 -1
  42. package/.next/server/app/api/sessions/stop/route.js.nft.json +1 -1
  43. package/.next/server/app/api/sessions/upload-image/route.js.nft.json +1 -1
  44. package/.next/server/app/api/sql/connections/route.js.nft.json +1 -1
  45. package/.next/server/app/api/sql/mcp/route.js +1 -1
  46. package/.next/server/app/api/sql/mcp/route.js.nft.json +1 -1
  47. package/.next/server/app/api/sql/query/route.js +1 -1
  48. package/.next/server/app/api/sql/query/route.js.nft.json +1 -1
  49. package/.next/server/app/api/sql/schema/route.js.nft.json +1 -1
  50. package/.next/server/app/api/telemetry/route.js +1 -1
  51. package/.next/server/app/api/telemetry/route.js.nft.json +1 -1
  52. package/.next/server/app/index.html +1 -1
  53. package/.next/server/app/index.rsc +2 -2
  54. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  55. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  56. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  57. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  58. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  59. package/.next/server/app/page/react-loadable-manifest.json +2 -2
  60. package/.next/server/app/page_client-reference-manifest.js +1 -1
  61. package/.next/server/chunks/[root-of-the-server]__0.hmw1f._.js +3 -0
  62. package/.next/server/chunks/[root-of-the-server]__0.hmw1f._.js.map +1 -0
  63. package/.next/server/chunks/[root-of-the-server]__00-sqou._.js +2 -2
  64. package/.next/server/chunks/[root-of-the-server]__00-sqou._.js.map +1 -1
  65. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js +4 -4
  66. package/.next/server/chunks/[root-of-the-server]__00l5btc._.js.map +1 -1
  67. package/.next/server/chunks/[root-of-the-server]__06men8g._.js +4 -4
  68. package/.next/server/chunks/[root-of-the-server]__06men8g._.js.map +1 -1
  69. package/.next/server/chunks/[root-of-the-server]__097vtn1._.js +2 -2
  70. package/.next/server/chunks/[root-of-the-server]__097vtn1._.js.map +1 -1
  71. package/.next/server/chunks/[root-of-the-server]__0_v2.a8._.js +2 -2
  72. package/.next/server/chunks/[root-of-the-server]__0_v2.a8._.js.map +1 -1
  73. package/.next/server/chunks/{[root-of-the-server]__0.ptwor._.js → [root-of-the-server]__0ajln56._.js} +7 -7
  74. package/.next/server/chunks/[root-of-the-server]__0ajln56._.js.map +1 -0
  75. package/.next/server/chunks/{[root-of-the-server]__0co.g5k._.js → [root-of-the-server]__0auh-2z._.js} +5 -5
  76. package/.next/server/chunks/[root-of-the-server]__0auh-2z._.js.map +1 -0
  77. package/.next/server/chunks/[root-of-the-server]__0e03ite._.js +2 -2
  78. package/.next/server/chunks/[root-of-the-server]__0e03ite._.js.map +1 -1
  79. package/.next/server/chunks/[root-of-the-server]__0fxtx7z._.js +2 -2
  80. package/.next/server/chunks/[root-of-the-server]__0fxtx7z._.js.map +1 -1
  81. package/.next/server/chunks/[root-of-the-server]__0h.~hv6._.js +2 -2
  82. package/.next/server/chunks/[root-of-the-server]__0h.~hv6._.js.map +1 -1
  83. package/.next/server/chunks/[root-of-the-server]__0i83~95._.js +1 -1
  84. package/.next/server/chunks/[root-of-the-server]__0li1h1u._.js +19 -19
  85. package/.next/server/chunks/[root-of-the-server]__0li1h1u._.js.map +1 -1
  86. package/.next/server/chunks/[root-of-the-server]__0s1axek._.js +5 -5
  87. package/.next/server/chunks/[root-of-the-server]__0s1axek._.js.map +1 -1
  88. package/.next/server/chunks/[root-of-the-server]__0t713sv._.js +1 -1
  89. package/.next/server/chunks/[root-of-the-server]__0t713sv._.js.map +1 -1
  90. package/.next/server/chunks/[root-of-the-server]__0tq0maq._.js +5 -5
  91. package/.next/server/chunks/[root-of-the-server]__0tq0maq._.js.map +1 -1
  92. package/.next/server/chunks/[root-of-the-server]__0viil6b._.js +2 -2
  93. package/.next/server/chunks/[root-of-the-server]__0viil6b._.js.map +1 -1
  94. package/.next/server/chunks/[root-of-the-server]__0ykd4~u._.js +3 -0
  95. package/.next/server/chunks/[root-of-the-server]__0ykd4~u._.js.map +1 -0
  96. package/.next/server/chunks/[root-of-the-server]__11h_nxt._.js +1 -1
  97. package/.next/server/chunks/[root-of-the-server]__11h_nxt._.js.map +1 -1
  98. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_016qk~0.js +2 -2
  99. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_016qk~0.js.map +1 -1
  100. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0ev3h.z.js +1 -1
  101. package/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0ev3h.z.js.map +1 -1
  102. package/.next/server/edge/chunks/[root-of-the-server]__08ca2jv._.js +11 -0
  103. package/.next/server/edge/chunks/[root-of-the-server]__08ca2jv._.js.map +1 -0
  104. package/.next/server/edge/chunks/node_modules_next_dist_esm_build_templates_edge-wrapper_0kvehva.js +3 -0
  105. package/.next/server/edge/chunks/node_modules_next_dist_esm_build_templates_edge-wrapper_0kvehva.js.map +1 -0
  106. package/.next/server/edge/chunks/node_modules_next_dist_esm_build_templates_edge-wrapper_0lcpsxv.js.map +1 -0
  107. package/.next/server/edge/chunks/turbopack-node_modules_next_dist_esm_build_templates_edge-wrapper_0lcpsxv.js +3 -0
  108. package/.next/server/middleware/middleware-manifest.json +32 -0
  109. package/.next/server/middleware-build-manifest.js +3 -3
  110. package/.next/server/middleware-manifest.json +30 -2
  111. package/.next/server/pages/404.html +1 -1
  112. package/.next/server/pages/500.html +1 -1
  113. package/.next/server/server-reference-manifest.js +1 -1
  114. package/.next/server/server-reference-manifest.json +1 -1
  115. package/.next/static/04j4ht7eCOOXSLQ5Wixq0/_clientMiddlewareManifest.js +6 -0
  116. package/.next/static/chunks/{0fxouf2n_5adf.js → 0uyuco-451j.n.js} +2 -2
  117. package/.next/static/chunks/{0r3x2gcn0sde..js → 14~-ojwsxf~oe.js} +4 -4
  118. package/.next/trace +1 -1
  119. package/.next/trace-build +1 -1
  120. package/README.md +18 -0
  121. package/bin/cli.js +12 -2
  122. package/package.json +9 -6
  123. package/src/app/api/files/route.ts +30 -0
  124. package/src/app/api/git/route.ts +46 -31
  125. package/src/app/api/sessions/stats/route.ts +40 -22
  126. package/src/app/api/sql/query/route.ts +2 -15
  127. package/src/app/api/telemetry/route.ts +2 -1
  128. package/src/app/components/TerminalConsole.tsx +103 -39
  129. package/src/lib/agents/AgentRunner.ts +41 -5
  130. package/src/lib/agents/AiderRunner.ts +20 -36
  131. package/src/lib/agents/ClaudeRunner.ts +8 -62
  132. package/src/lib/agents/DockerRunner.ts +18 -54
  133. package/src/lib/agents/MockRunner.ts +3 -1
  134. package/src/lib/agents/SSHRunner.ts +8 -54
  135. package/src/lib/agents/SessionPersister.ts +11 -1
  136. package/src/lib/agents/ShellRunner.ts +10 -46
  137. package/src/lib/agents/WebSocketServer.ts +17 -2
  138. package/src/lib/agents/pricing.ts +45 -0
  139. package/src/lib/agents/runtime.ts +92 -0
  140. package/src/lib/gitSafe.ts +15 -0
  141. package/src/lib/security.ts +76 -0
  142. package/src/lib/sql/McpServer.ts +2 -11
  143. package/src/lib/sql/adapters/MssqlAdapter.ts +16 -1
  144. package/src/lib/sql/adapters/MysqlAdapter.ts +23 -1
  145. package/src/lib/sql/adapters/PostgresAdapter.ts +22 -1
  146. package/src/lib/sql/adapters/SqliteAdapter.ts +21 -10
  147. package/src/lib/sql/sqlGuard.ts +20 -0
  148. package/src/lib/workspaceParser.ts +23 -6
  149. package/src/middleware.ts +27 -0
  150. package/.next/dev/build-manifest.json +0 -50
  151. package/.next/dev/fallback-build-manifest.json +0 -37
  152. package/.next/dev/logs/next-development.log +0 -3737
  153. package/.next/dev/server/chunks/[root-of-the-server]__11uf~fd._.js +0 -2396
  154. package/.next/dev/server/chunks/[root-of-the-server]__11uf~fd._.js.map +0 -20
  155. package/.next/dev/server/chunks/ssr/[externals]__0.o~_~l._.js +0 -32
  156. package/.next/dev/server/chunks/ssr/[externals]__0.o~_~l._.js.map +0 -5
  157. package/.next/dev/server/chunks/ssr/[externals]_next_dist_shared_lib_no-fallback-error_external_0fgm~bn.js +0 -8
  158. package/.next/dev/server/chunks/ssr/[externals]_next_dist_shared_lib_no-fallback-error_external_0fgm~bn.js.map +0 -5
  159. package/.next/dev/server/chunks/ssr/[root-of-the-server]__0je5zm2._.js +0 -285
  160. package/.next/dev/server/chunks/ssr/[root-of-the-server]__0je5zm2._.js.map +0 -9
  161. package/.next/dev/server/chunks/ssr/node_modules_01ed9g5._.js +0 -6621
  162. package/.next/dev/server/chunks/ssr/node_modules_01ed9g5._.js.map +0 -76
  163. package/.next/dev/server/chunks/ssr/node_modules_129w7gn._.js +0 -4399
  164. package/.next/dev/server/chunks/ssr/node_modules_129w7gn._.js.map +0 -35
  165. package/.next/dev/server/chunks/ssr/node_modules_next_12i4inu._.js +0 -55
  166. package/.next/dev/server/chunks/ssr/node_modules_next_12i4inu._.js.map +0 -7
  167. package/.next/dev/server/middleware-build-manifest.js +0 -50
  168. package/.next/dev/server/next-font-manifest.js +0 -1
  169. package/.next/dev/server/next-font-manifest.json +0 -11
  170. package/.next/dev/server/pages/_app/build-manifest.json +0 -23
  171. package/.next/dev/server/pages/_app/client-build-manifest.json +0 -5
  172. package/.next/dev/server/pages/_app/next-font-manifest.json +0 -6
  173. package/.next/dev/server/pages/_app/pages-manifest.json +0 -3
  174. package/.next/dev/server/pages/_app/react-loadable-manifest.json +0 -1
  175. package/.next/dev/server/pages/_app.js +0 -4
  176. package/.next/dev/server/pages/_app.js.map +0 -5
  177. package/.next/dev/server/pages/_document/next-font-manifest.json +0 -6
  178. package/.next/dev/server/pages/_document/pages-manifest.json +0 -3
  179. package/.next/dev/server/pages/_document/react-loadable-manifest.json +0 -1
  180. package/.next/dev/server/pages/_document.js +0 -5
  181. package/.next/dev/server/pages/_document.js.map +0 -5
  182. package/.next/dev/server/pages/_error/build-manifest.json +0 -22
  183. package/.next/dev/server/pages/_error/client-build-manifest.json +0 -5
  184. package/.next/dev/server/pages/_error/next-font-manifest.json +0 -6
  185. package/.next/dev/server/pages/_error/pages-manifest.json +0 -3
  186. package/.next/dev/server/pages/_error/react-loadable-manifest.json +0 -1
  187. package/.next/dev/server/pages/_error.js +0 -8
  188. package/.next/dev/server/pages/_error.js.map +0 -5
  189. package/.next/dev/server/pages-manifest.json +0 -5
  190. package/.next/dev/static/chunks/[next]_entry_page-loader_ts_0j~flwh._.js +0 -23
  191. package/.next/dev/static/chunks/[next]_entry_page-loader_ts_0j~flwh._.js.map +0 -6
  192. package/.next/dev/static/chunks/[next]_entry_page-loader_ts_0rqw6yo._.js +0 -23
  193. package/.next/dev/static/chunks/[next]_entry_page-loader_ts_0rqw6yo._.js.map +0 -6
  194. package/.next/dev/static/chunks/[root-of-the-server]__01mw43t._.js +0 -476
  195. package/.next/dev/static/chunks/[root-of-the-server]__01mw43t._.js.map +0 -6
  196. package/.next/dev/static/chunks/[root-of-the-server]__0c0okpg._.js +0 -476
  197. package/.next/dev/static/chunks/[root-of-the-server]__0c0okpg._.js.map +0 -6
  198. package/.next/dev/static/chunks/node_modules_0lx093h._.js +0 -1343
  199. package/.next/dev/static/chunks/node_modules_0lx093h._.js.map +0 -13
  200. package/.next/dev/static/chunks/node_modules_next_app_0jt-zj..js +0 -8
  201. package/.next/dev/static/chunks/node_modules_next_app_0jt-zj..js.map +0 -6
  202. package/.next/dev/static/chunks/node_modules_next_dist_0rt-2cr._.js +0 -2334
  203. package/.next/dev/static/chunks/node_modules_next_dist_0rt-2cr._.js.map +0 -26
  204. package/.next/dev/static/chunks/node_modules_next_dist_0u_w_5s._.js +0 -2165
  205. package/.next/dev/static/chunks/node_modules_next_dist_0u_w_5s._.js.map +0 -25
  206. package/.next/dev/static/chunks/node_modules_next_dist_client_0pe1dg-._.js +0 -4091
  207. package/.next/dev/static/chunks/node_modules_next_dist_client_0pe1dg-._.js.map +0 -49
  208. package/.next/dev/static/chunks/node_modules_next_dist_compiled_0o6l_m6._.js +0 -6064
  209. package/.next/dev/static/chunks/node_modules_next_dist_compiled_0o6l_m6._.js.map +0 -17
  210. package/.next/dev/static/chunks/node_modules_next_dist_shared_lib_0ek5eq7._.js +0 -6535
  211. package/.next/dev/static/chunks/node_modules_next_dist_shared_lib_0ek5eq7._.js.map +0 -72
  212. package/.next/dev/static/chunks/node_modules_next_dist_shared_lib_0n1wg2c._.js +0 -6294
  213. package/.next/dev/static/chunks/node_modules_next_dist_shared_lib_0n1wg2c._.js.map +0 -70
  214. package/.next/dev/static/chunks/node_modules_react-dom_0bruynb._.js +0 -15381
  215. package/.next/dev/static/chunks/node_modules_react-dom_0bruynb._.js.map +0 -9
  216. package/.next/dev/static/chunks/pages/_app.js +0 -13
  217. package/.next/dev/static/chunks/pages/_error.js +0 -12
  218. package/.next/dev/static/chunks/pages__app_0-bg2z-._.js.map +0 -11
  219. package/.next/dev/static/chunks/pages__app_07xvfw~._.js +0 -5
  220. package/.next/dev/static/chunks/pages__error_0.i_zsq._.js.map +0 -11
  221. package/.next/dev/static/chunks/pages__error_07xvfw~._.js +0 -5
  222. package/.next/dev/static/chunks/turbopack-pages__app_0-bg2z-._.js +0 -2236
  223. package/.next/dev/static/chunks/turbopack-pages__error_0.i_zsq._.js +0 -2236
  224. package/.next/server/chunks/[externals]__048y_op._.js +0 -3
  225. package/.next/server/chunks/[externals]__048y_op._.js.map +0 -1
  226. package/.next/server/chunks/[root-of-the-server]__0.ptwor._.js.map +0 -1
  227. package/.next/server/chunks/[root-of-the-server]__08r0s-s._.js +0 -3
  228. package/.next/server/chunks/[root-of-the-server]__08r0s-s._.js.map +0 -1
  229. package/.next/server/chunks/[root-of-the-server]__0co.g5k._.js.map +0 -1
  230. package/.next/static/llmJsGQafolZV5_sqEw4l/_clientMiddlewareManifest.js +0 -1
  231. /package/.next/static/{llmJsGQafolZV5_sqEw4l → 04j4ht7eCOOXSLQ5Wixq0}/_buildManifest.js +0 -0
  232. /package/.next/static/{llmJsGQafolZV5_sqEw4l → 04j4ht7eCOOXSLQ5Wixq0}/_ssgManifest.js +0 -0
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Backstop guard for read-only DB connections.
3
+ *
4
+ * Real enforcement happens at the driver/transaction level (SQLite opened
5
+ * read-only, Postgres/MySQL session set READ ONLY). This statement inspection is
6
+ * a defense-in-depth layer and the only available guard for drivers without a
7
+ * session read-only mode (e.g. MSSQL). It strips SQL comments first so a leading
8
+ * comment trick can't hide a mutation, and matches mutation keywords anywhere
9
+ * (covering CTEs such as `WITH x AS (...) DELETE ...` and stacked statements
10
+ * like `SELECT 1; DROP TABLE t`). It intentionally errs toward over-blocking.
11
+ */
12
+ export function isReadOnlyViolation(sql: string): boolean {
13
+ if (!sql) return false;
14
+ const stripped = sql
15
+ .replace(/\/\*[\s\S]*?\*\//g, " ") // block comments
16
+ .replace(/--[^\n]*/g, " "); // line comments
17
+ return /\b(insert|update|delete|drop|alter|create|truncate|replace|grant|revoke|merge|exec|execute)\b/i.test(
18
+ stripped
19
+ );
20
+ }
@@ -1,29 +1,45 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
3
 
4
+ // Cache parsed folders per workspace root, keyed off the .code-workspace file's
5
+ // mtime so repeated polling doesn't re-read and re-parse it every call.
6
+ const folderCache = new Map<string, { mtimeMs: number; folders: string[] }>();
7
+
4
8
  export function getWorkspaceFileFolders(workspaceRoot: string): string[] {
5
9
  try {
6
10
  if (!workspaceRoot || !fs.existsSync(workspaceRoot)) return [];
7
-
11
+
8
12
  // Normalize workspaceRoot path
9
13
  const normRoot = path.resolve(workspaceRoot).replace(/\\/g, "/");
10
-
14
+
11
15
  const files = fs.readdirSync(normRoot);
12
16
  const workspaceFile = files.find(f => f.endsWith(".code-workspace"));
13
- if (!workspaceFile) return [];
17
+ if (!workspaceFile) {
18
+ folderCache.delete(normRoot);
19
+ return [];
20
+ }
14
21
 
15
22
  const filePath = path.join(normRoot, workspaceFile);
23
+ const mtimeMs = fs.statSync(filePath).mtimeMs;
24
+ const cached = folderCache.get(normRoot);
25
+ if (cached && cached.mtimeMs === mtimeMs) {
26
+ return cached.folders;
27
+ }
28
+
16
29
  const content = fs.readFileSync(filePath, "utf8");
17
30
  const json = JSON.parse(content);
18
31
 
19
- if (!json.folders || !Array.isArray(json.folders)) return [];
20
-
32
+ if (!json.folders || !Array.isArray(json.folders)) {
33
+ folderCache.set(normRoot, { mtimeMs, folders: [] });
34
+ return [];
35
+ }
36
+
21
37
  const folders: string[] = [];
22
38
  for (const folder of json.folders) {
23
39
  if (folder.path) {
24
40
  // Resolve relative to workspace root (where the workspace file resides)
25
41
  const resolved = path.resolve(normRoot, folder.path).replace(/\\/g, "/");
26
-
42
+
27
43
  // Exclude the workspace root folder itself
28
44
  if (resolved !== normRoot) {
29
45
  if (fs.existsSync(resolved)) {
@@ -32,6 +48,7 @@ export function getWorkspaceFileFolders(workspaceRoot: string): string[] {
32
48
  }
33
49
  }
34
50
  }
51
+ folderCache.set(normRoot, { mtimeMs, folders });
35
52
  return folders;
36
53
  } catch (err) {
37
54
  console.error("[WorkspaceParser] Failed to parse code-workspace file:", err);
@@ -0,0 +1,27 @@
1
+ import { NextResponse } from "next/server";
2
+ import type { NextRequest } from "next/server";
3
+ import { isRequestAllowed } from "@/lib/security";
4
+
5
+ // Gate every API route behind the localhost-origin guard. The dashboard's APIs
6
+ // expose arbitrary shell, filesystem and database access, so cross-origin / LAN
7
+ // callers are rejected unless NEURAL_LOOM_ALLOW_LAN is explicitly set.
8
+ export function middleware(request: NextRequest) {
9
+ const host = request.headers.get("host");
10
+ const origin = request.headers.get("origin");
11
+
12
+ if (!isRequestAllowed(host, origin)) {
13
+ return NextResponse.json(
14
+ {
15
+ error:
16
+ "Forbidden: NeuralLoom only accepts requests from localhost. Set NEURAL_LOOM_ALLOW_LAN=1 to permit network access.",
17
+ },
18
+ { status: 403 }
19
+ );
20
+ }
21
+
22
+ return NextResponse.next();
23
+ }
24
+
25
+ export const config = {
26
+ matcher: "/api/:path*",
27
+ };
@@ -1,50 +0,0 @@
1
- {
2
- "pages": {
3
- "/_app": [
4
- "static/chunks/node_modules_next_dist_compiled_0o6l_m6._.js",
5
- "static/chunks/node_modules_next_dist_shared_lib_0n1wg2c._.js",
6
- "static/chunks/node_modules_next_dist_client_0pe1dg-._.js",
7
- "static/chunks/node_modules_next_dist_0u_w_5s._.js",
8
- "static/chunks/node_modules_next_app_0jt-zj..js",
9
- "static/chunks/[next]_entry_page-loader_ts_0j~flwh._.js",
10
- "static/chunks/node_modules_react-dom_0bruynb._.js",
11
- "static/chunks/node_modules_0lx093h._.js",
12
- "static/chunks/[root-of-the-server]__0c0okpg._.js",
13
- "static/chunks/pages__app_07xvfw~._.js",
14
- "static/chunks/turbopack-pages__app_0-bg2z-._.js"
15
- ],
16
- "/_error": [
17
- "static/chunks/node_modules_next_dist_compiled_0o6l_m6._.js",
18
- "static/chunks/node_modules_next_dist_shared_lib_0ek5eq7._.js",
19
- "static/chunks/node_modules_next_dist_client_0pe1dg-._.js",
20
- "static/chunks/node_modules_next_dist_0rt-2cr._.js",
21
- "static/chunks/[next]_entry_page-loader_ts_0rqw6yo._.js",
22
- "static/chunks/node_modules_react-dom_0bruynb._.js",
23
- "static/chunks/node_modules_0lx093h._.js",
24
- "static/chunks/[root-of-the-server]__01mw43t._.js",
25
- "static/chunks/pages__error_07xvfw~._.js",
26
- "static/chunks/turbopack-pages__error_0.i_zsq._.js"
27
- ]
28
- },
29
- "devFiles": [],
30
- "polyfillFiles": [
31
- "static/chunks/node_modules_next_dist_build_polyfills_polyfill-nomodule.js"
32
- ],
33
- "lowPriorityFiles": [
34
- "static/development/_buildManifest.js",
35
- "static/development/_ssgManifest.js",
36
- "static/development/_clientMiddlewareManifest.js"
37
- ],
38
- "rootMainFiles": [
39
- "static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_10z625~._.js",
40
- "static/chunks/node_modules_next_dist_compiled_next-devtools_index_0553esy.js",
41
- "static/chunks/node_modules_next_dist_compiled_react-dom_058-ah~._.js",
42
- "static/chunks/node_modules_next_dist_compiled_react-server-dom-turbopack_0p3wegg._.js",
43
- "static/chunks/node_modules_next_dist_compiled_0rpq4pf._.js",
44
- "static/chunks/node_modules_next_dist_client_0fhqo1d._.js",
45
- "static/chunks/node_modules_next_dist_115brz8._.js",
46
- "static/chunks/node_modules_@swc_helpers_cjs_0-4ujiy._.js",
47
- "static/chunks/_0rqeker._.js",
48
- "static/chunks/turbopack-_0p44nws._.js"
49
- ]
50
- }
@@ -1,37 +0,0 @@
1
- {
2
- "pages": {
3
- "/_app": [
4
- "static/chunks/node_modules_next_dist_compiled_0o6l_m6._.js",
5
- "static/chunks/node_modules_next_dist_shared_lib_0n1wg2c._.js",
6
- "static/chunks/node_modules_next_dist_client_0pe1dg-._.js",
7
- "static/chunks/node_modules_next_dist_0u_w_5s._.js",
8
- "static/chunks/node_modules_next_app_0jt-zj..js",
9
- "static/chunks/[next]_entry_page-loader_ts_0j~flwh._.js",
10
- "static/chunks/node_modules_react-dom_0bruynb._.js",
11
- "static/chunks/node_modules_0lx093h._.js",
12
- "static/chunks/[root-of-the-server]__0c0okpg._.js",
13
- "static/chunks/pages__app_07xvfw~._.js",
14
- "static/chunks/turbopack-pages__app_0-bg2z-._.js"
15
- ],
16
- "/_error": [
17
- "static/chunks/node_modules_next_dist_compiled_0o6l_m6._.js",
18
- "static/chunks/node_modules_next_dist_shared_lib_0ek5eq7._.js",
19
- "static/chunks/node_modules_next_dist_client_0pe1dg-._.js",
20
- "static/chunks/node_modules_next_dist_0rt-2cr._.js",
21
- "static/chunks/[next]_entry_page-loader_ts_0rqw6yo._.js",
22
- "static/chunks/node_modules_react-dom_0bruynb._.js",
23
- "static/chunks/node_modules_0lx093h._.js",
24
- "static/chunks/[root-of-the-server]__01mw43t._.js",
25
- "static/chunks/pages__error_07xvfw~._.js",
26
- "static/chunks/turbopack-pages__error_0.i_zsq._.js"
27
- ]
28
- },
29
- "devFiles": [],
30
- "polyfillFiles": [],
31
- "lowPriorityFiles": [
32
- "static/development/_buildManifest.js",
33
- "static/development/_ssgManifest.js",
34
- "static/development/_clientMiddlewareManifest.js"
35
- ],
36
- "rootMainFiles": []
37
- }