@nifrajs/cli 3.5.0 → 4.0.2

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 (404) hide show
  1. package/README.md +42 -3
  2. package/dist/app-files.d.ts +11 -0
  3. package/dist/app-files.d.ts.map +1 -0
  4. package/dist/app-files.js +34 -0
  5. package/dist/app-files.js.map +1 -0
  6. package/dist/assure-hydration.d.ts +7 -1
  7. package/dist/assure-hydration.d.ts.map +1 -1
  8. package/dist/assure-hydration.js +128 -43
  9. package/dist/assure-hydration.js.map +1 -1
  10. package/dist/assure.d.ts.map +1 -1
  11. package/dist/assure.js +16 -2
  12. package/dist/assure.js.map +1 -1
  13. package/dist/capabilities-tool.d.ts +5 -1
  14. package/dist/capabilities-tool.d.ts.map +1 -1
  15. package/dist/capabilities-tool.js +32 -10
  16. package/dist/capabilities-tool.js.map +1 -1
  17. package/dist/cdn-check.d.ts +41 -0
  18. package/dist/cdn-check.d.ts.map +1 -0
  19. package/dist/cdn-check.js +207 -0
  20. package/dist/cdn-check.js.map +1 -0
  21. package/dist/check-diagnostics.d.ts +4 -0
  22. package/dist/check-diagnostics.d.ts.map +1 -1
  23. package/dist/check-diagnostics.js +13 -0
  24. package/dist/check-diagnostics.js.map +1 -1
  25. package/dist/check-scan.d.ts +49 -7
  26. package/dist/check-scan.d.ts.map +1 -1
  27. package/dist/check-scan.js +291 -62
  28. package/dist/check-scan.js.map +1 -1
  29. package/dist/check.d.ts.map +1 -1
  30. package/dist/check.js +99 -63
  31. package/dist/check.js.map +1 -1
  32. package/dist/cli.d.ts +42 -16
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +262 -82
  35. package/dist/cli.js.map +1 -1
  36. package/dist/command-catalog.d.ts +62 -5
  37. package/dist/command-catalog.d.ts.map +1 -1
  38. package/dist/command-catalog.js +275 -35
  39. package/dist/command-catalog.js.map +1 -1
  40. package/dist/config-target.d.ts +8 -0
  41. package/dist/config-target.d.ts.map +1 -0
  42. package/dist/config-target.js +45 -0
  43. package/dist/config-target.js.map +1 -0
  44. package/dist/contracts.d.ts.map +1 -1
  45. package/dist/contracts.js +52 -13
  46. package/dist/contracts.js.map +1 -1
  47. package/dist/db-audit.d.ts +37 -0
  48. package/dist/db-audit.d.ts.map +1 -0
  49. package/dist/db-audit.js +99 -0
  50. package/dist/db-audit.js.map +1 -0
  51. package/dist/db-child.d.ts +64 -0
  52. package/dist/db-child.d.ts.map +1 -0
  53. package/dist/db-child.js +213 -0
  54. package/dist/db-child.js.map +1 -0
  55. package/dist/db-config.d.ts +60 -0
  56. package/dist/db-config.d.ts.map +1 -0
  57. package/dist/db-config.js +176 -0
  58. package/dist/db-config.js.map +1 -0
  59. package/dist/db-tool.d.ts +84 -0
  60. package/dist/db-tool.d.ts.map +1 -0
  61. package/dist/db-tool.js +537 -0
  62. package/dist/db-tool.js.map +1 -0
  63. package/dist/dev-bun-config.d.ts +20 -13
  64. package/dist/dev-bun-config.d.ts.map +1 -1
  65. package/dist/dev-bun-config.js +98 -41
  66. package/dist/dev-bun-config.js.map +1 -1
  67. package/dist/dev-feed-tool.d.ts +106 -0
  68. package/dist/dev-feed-tool.d.ts.map +1 -0
  69. package/dist/dev-feed-tool.js +713 -0
  70. package/dist/dev-feed-tool.js.map +1 -0
  71. package/dist/dev-server-client.d.ts +67 -0
  72. package/dist/dev-server-client.d.ts.map +1 -0
  73. package/dist/dev-server-client.js +195 -0
  74. package/dist/dev-server-client.js.map +1 -0
  75. package/dist/diff-tool.d.ts +3 -3
  76. package/dist/diff-tool.d.ts.map +1 -1
  77. package/dist/diff-tool.js +6 -5
  78. package/dist/diff-tool.js.map +1 -1
  79. package/dist/docs-search.d.ts.map +1 -1
  80. package/dist/docs-search.js +12 -4
  81. package/dist/docs-search.js.map +1 -1
  82. package/dist/doctor.d.ts +17 -0
  83. package/dist/doctor.d.ts.map +1 -1
  84. package/dist/doctor.js +76 -15
  85. package/dist/doctor.js.map +1 -1
  86. package/dist/env-file.d.ts +15 -0
  87. package/dist/env-file.d.ts.map +1 -1
  88. package/dist/env-file.js +73 -1
  89. package/dist/env-file.js.map +1 -1
  90. package/dist/fix-recipes.d.ts.map +1 -1
  91. package/dist/fix-recipes.js +48 -22
  92. package/dist/fix-recipes.js.map +1 -1
  93. package/dist/frontend-guidance.js +5 -5
  94. package/dist/frontend-guidance.js.map +1 -1
  95. package/dist/i18n-check.d.ts +16 -0
  96. package/dist/i18n-check.d.ts.map +1 -0
  97. package/dist/i18n-check.js +154 -0
  98. package/dist/i18n-check.js.map +1 -0
  99. package/dist/init-agents.d.ts +49 -13
  100. package/dist/init-agents.d.ts.map +1 -1
  101. package/dist/init-agents.js +239 -34
  102. package/dist/init-agents.js.map +1 -1
  103. package/dist/internal/code-unit-order.d.ts +4 -0
  104. package/dist/internal/code-unit-order.d.ts.map +1 -0
  105. package/dist/internal/code-unit-order.js +6 -0
  106. package/dist/internal/code-unit-order.js.map +1 -0
  107. package/dist/internal/script-kind.d.ts +7 -0
  108. package/dist/internal/script-kind.d.ts.map +1 -0
  109. package/dist/internal/script-kind.js +12 -0
  110. package/dist/internal/script-kind.js.map +1 -0
  111. package/dist/internal/source-facts.d.ts +5 -0
  112. package/dist/internal/source-facts.d.ts.map +1 -1
  113. package/dist/internal/source-facts.js +61 -5
  114. package/dist/internal/source-facts.js.map +1 -1
  115. package/dist/internal/typescript-import.d.ts +49 -24
  116. package/dist/internal/typescript-import.d.ts.map +1 -1
  117. package/dist/internal/typescript-import.js +507 -67
  118. package/dist/internal/typescript-import.js.map +1 -1
  119. package/dist/introspect.d.ts +5 -1
  120. package/dist/introspect.d.ts.map +1 -1
  121. package/dist/introspect.js +92 -27
  122. package/dist/introspect.js.map +1 -1
  123. package/dist/learn.js +3 -3
  124. package/dist/learn.js.map +1 -1
  125. package/dist/levels-tool.d.ts +10 -0
  126. package/dist/levels-tool.d.ts.map +1 -1
  127. package/dist/levels-tool.js +33 -3
  128. package/dist/levels-tool.js.map +1 -1
  129. package/dist/load.d.ts +67 -17
  130. package/dist/load.d.ts.map +1 -1
  131. package/dist/load.js +78 -18
  132. package/dist/load.js.map +1 -1
  133. package/dist/manifest-tool.d.ts.map +1 -1
  134. package/dist/manifest-tool.js +3 -2
  135. package/dist/manifest-tool.js.map +1 -1
  136. package/dist/mcp-app-tool.d.ts.map +1 -1
  137. package/dist/mcp-app-tool.js +2 -0
  138. package/dist/mcp-app-tool.js.map +1 -1
  139. package/dist/mcp-context.js +1 -1
  140. package/dist/mcp-context.js.map +1 -1
  141. package/dist/mcp-delegate.d.ts +57 -0
  142. package/dist/mcp-delegate.d.ts.map +1 -0
  143. package/dist/mcp-delegate.js +130 -0
  144. package/dist/mcp-delegate.js.map +1 -0
  145. package/dist/mcp-docs-tools.d.ts.map +1 -1
  146. package/dist/mcp-docs-tools.js +23 -5
  147. package/dist/mcp-docs-tools.js.map +1 -1
  148. package/dist/mcp-exec.d.ts +2 -0
  149. package/dist/mcp-exec.d.ts.map +1 -1
  150. package/dist/mcp-exec.js +132 -108
  151. package/dist/mcp-exec.js.map +1 -1
  152. package/dist/mcp-http.d.ts.map +1 -1
  153. package/dist/mcp-http.js +17 -5
  154. package/dist/mcp-http.js.map +1 -1
  155. package/dist/mcp-io.d.ts +14 -0
  156. package/dist/mcp-io.d.ts.map +1 -1
  157. package/dist/mcp-io.js +45 -0
  158. package/dist/mcp-io.js.map +1 -1
  159. package/dist/mcp-isolate.d.ts +48 -0
  160. package/dist/mcp-isolate.d.ts.map +1 -0
  161. package/dist/mcp-isolate.js +222 -0
  162. package/dist/mcp-isolate.js.map +1 -0
  163. package/dist/mcp-project-child.d.ts +74 -0
  164. package/dist/mcp-project-child.d.ts.map +1 -0
  165. package/dist/mcp-project-child.js +130 -0
  166. package/dist/mcp-project-child.js.map +1 -0
  167. package/dist/mcp-render.js +2 -2
  168. package/dist/mcp-render.js.map +1 -1
  169. package/dist/mcp-root.d.ts +37 -9
  170. package/dist/mcp-root.d.ts.map +1 -1
  171. package/dist/mcp-root.js +110 -23
  172. package/dist/mcp-root.js.map +1 -1
  173. package/dist/mcp-run.d.ts +18 -1
  174. package/dist/mcp-run.d.ts.map +1 -1
  175. package/dist/mcp-run.js +82 -9
  176. package/dist/mcp-run.js.map +1 -1
  177. package/dist/mcp-ws.js +4 -1
  178. package/dist/mcp-ws.js.map +1 -1
  179. package/dist/mcp.d.ts +16 -3
  180. package/dist/mcp.d.ts.map +1 -1
  181. package/dist/mcp.js +81 -53
  182. package/dist/mcp.js.map +1 -1
  183. package/dist/migrate-layout.d.ts +44 -0
  184. package/dist/migrate-layout.d.ts.map +1 -0
  185. package/dist/migrate-layout.js +1155 -0
  186. package/dist/migrate-layout.js.map +1 -0
  187. package/dist/openapi-tool.d.ts +2 -2
  188. package/dist/openapi-tool.d.ts.map +1 -1
  189. package/dist/openapi-tool.js.map +1 -1
  190. package/dist/openapi-types.d.ts +2 -1
  191. package/dist/openapi-types.d.ts.map +1 -1
  192. package/dist/openapi-types.js +240 -12
  193. package/dist/openapi-types.js.map +1 -1
  194. package/dist/pipeline-report.d.ts +3 -2
  195. package/dist/pipeline-report.d.ts.map +1 -1
  196. package/dist/pipeline-report.js +19 -16
  197. package/dist/pipeline-report.js.map +1 -1
  198. package/dist/port.d.ts +5 -4
  199. package/dist/port.d.ts.map +1 -1
  200. package/dist/port.js +46 -29
  201. package/dist/port.js.map +1 -1
  202. package/dist/project-facts.d.ts +5 -0
  203. package/dist/project-facts.d.ts.map +1 -1
  204. package/dist/project-facts.js.map +1 -1
  205. package/dist/recipes/4.0.0.d.ts +9 -0
  206. package/dist/recipes/4.0.0.d.ts.map +1 -0
  207. package/dist/recipes/4.0.0.js +36 -0
  208. package/dist/recipes/4.0.0.js.map +1 -0
  209. package/dist/recipes/index.d.ts.map +1 -1
  210. package/dist/recipes/index.js +2 -0
  211. package/dist/recipes/index.js.map +1 -1
  212. package/dist/release-verification.d.ts +11 -1
  213. package/dist/release-verification.d.ts.map +1 -1
  214. package/dist/release-verification.js +47 -4
  215. package/dist/release-verification.js.map +1 -1
  216. package/dist/review.d.ts.map +1 -1
  217. package/dist/review.js +12 -8
  218. package/dist/review.js.map +1 -1
  219. package/dist/route-types.d.ts +28 -0
  220. package/dist/route-types.d.ts.map +1 -0
  221. package/dist/route-types.js +106 -0
  222. package/dist/route-types.js.map +1 -0
  223. package/dist/rules/codes.d.ts +9 -0
  224. package/dist/rules/codes.d.ts.map +1 -1
  225. package/dist/rules/codes.js +9 -0
  226. package/dist/rules/codes.js.map +1 -1
  227. package/dist/rules/data-guard.d.ts +12 -0
  228. package/dist/rules/data-guard.d.ts.map +1 -0
  229. package/dist/rules/data-guard.js +213 -0
  230. package/dist/rules/data-guard.js.map +1 -0
  231. package/dist/rules/index.d.ts +3 -0
  232. package/dist/rules/index.d.ts.map +1 -1
  233. package/dist/rules/index.js +17 -5
  234. package/dist/rules/index.js.map +1 -1
  235. package/dist/rules/islands.d.ts.map +1 -1
  236. package/dist/rules/islands.js +7 -4
  237. package/dist/rules/islands.js.map +1 -1
  238. package/dist/rules/legacy.d.ts.map +1 -1
  239. package/dist/rules/legacy.js +71 -38
  240. package/dist/rules/legacy.js.map +1 -1
  241. package/dist/rules/nano.d.ts.map +1 -1
  242. package/dist/rules/nano.js +15 -6
  243. package/dist/rules/nano.js.map +1 -1
  244. package/dist/rules/pages.d.ts +15 -0
  245. package/dist/rules/pages.d.ts.map +1 -0
  246. package/dist/rules/pages.js +88 -0
  247. package/dist/rules/pages.js.map +1 -0
  248. package/dist/rules/routes.d.ts +11 -0
  249. package/dist/rules/routes.d.ts.map +1 -1
  250. package/dist/rules/routes.js +180 -2
  251. package/dist/rules/routes.js.map +1 -1
  252. package/dist/rules/secrets.d.ts +10 -0
  253. package/dist/rules/secrets.d.ts.map +1 -0
  254. package/dist/rules/secrets.js +169 -0
  255. package/dist/rules/secrets.js.map +1 -0
  256. package/dist/rules/security.d.ts +7 -0
  257. package/dist/rules/security.d.ts.map +1 -1
  258. package/dist/rules/security.js +171 -65
  259. package/dist/rules/security.js.map +1 -1
  260. package/dist/rules/typescript.d.ts +16 -0
  261. package/dist/rules/typescript.d.ts.map +1 -0
  262. package/dist/rules/typescript.js +59 -0
  263. package/dist/rules/typescript.js.map +1 -0
  264. package/dist/rules/zones.d.ts +17 -0
  265. package/dist/rules/zones.d.ts.map +1 -0
  266. package/dist/rules/zones.js +174 -0
  267. package/dist/rules/zones.js.map +1 -0
  268. package/dist/scaffold.d.ts +25 -12
  269. package/dist/scaffold.d.ts.map +1 -1
  270. package/dist/scaffold.js +132 -87
  271. package/dist/scaffold.js.map +1 -1
  272. package/dist/sdk.d.ts +17 -3
  273. package/dist/sdk.d.ts.map +1 -1
  274. package/dist/sdk.js +941 -153
  275. package/dist/sdk.js.map +1 -1
  276. package/dist/search-terms.d.ts +2 -0
  277. package/dist/search-terms.d.ts.map +1 -1
  278. package/dist/search-terms.js +23 -8
  279. package/dist/search-terms.js.map +1 -1
  280. package/dist/smoke.d.ts +79 -0
  281. package/dist/smoke.d.ts.map +1 -0
  282. package/dist/smoke.js +494 -0
  283. package/dist/smoke.js.map +1 -0
  284. package/dist/sync-manifest.d.ts +10 -2
  285. package/dist/sync-manifest.d.ts.map +1 -1
  286. package/dist/sync-manifest.js +44 -19
  287. package/dist/sync-manifest.js.map +1 -1
  288. package/dist/sync-routes.d.ts +4 -3
  289. package/dist/sync-routes.d.ts.map +1 -1
  290. package/dist/sync-routes.js +4 -3
  291. package/dist/sync-routes.js.map +1 -1
  292. package/dist/test-tool.d.ts.map +1 -1
  293. package/dist/test-tool.js +30 -11
  294. package/dist/test-tool.js.map +1 -1
  295. package/dist/types-search.d.ts.map +1 -1
  296. package/dist/types-search.js +11 -5
  297. package/dist/types-search.js.map +1 -1
  298. package/dist/upgrade.d.ts +36 -6
  299. package/dist/upgrade.d.ts.map +1 -1
  300. package/dist/upgrade.js +167 -29
  301. package/dist/upgrade.js.map +1 -1
  302. package/dist/verification-plan.d.ts.map +1 -1
  303. package/dist/verification-plan.js +4 -0
  304. package/dist/verification-plan.js.map +1 -1
  305. package/dist/verification.d.ts.map +1 -1
  306. package/dist/verification.js +45 -12
  307. package/dist/verification.js.map +1 -1
  308. package/dist/web-app-options.d.ts +19 -0
  309. package/dist/web-app-options.d.ts.map +1 -0
  310. package/dist/web-app-options.js +49 -0
  311. package/dist/web-app-options.js.map +1 -0
  312. package/dist/work-graph.d.ts.map +1 -1
  313. package/dist/work-graph.js +29 -13
  314. package/dist/work-graph.js.map +1 -1
  315. package/docs/examples.json +185 -29
  316. package/docs/llms-full.txt +3807 -580
  317. package/docs/types.json +14229 -10939
  318. package/package.json +19 -12
  319. package/src/app-files.ts +40 -0
  320. package/src/assure-hydration.ts +139 -46
  321. package/src/assure.ts +17 -2
  322. package/src/capabilities-tool.ts +35 -9
  323. package/src/cdn-check.ts +268 -0
  324. package/src/check-diagnostics.ts +17 -0
  325. package/src/check-scan.ts +358 -63
  326. package/src/check.ts +97 -62
  327. package/src/cli.ts +296 -87
  328. package/src/command-catalog.ts +389 -48
  329. package/src/config-target.ts +47 -0
  330. package/src/contracts.ts +54 -12
  331. package/src/db-audit.ts +128 -0
  332. package/src/db-child.ts +285 -0
  333. package/src/db-config.ts +224 -0
  334. package/src/db-tool.ts +690 -0
  335. package/src/dev-bun-config.ts +116 -40
  336. package/src/dev-feed-tool.ts +912 -0
  337. package/src/dev-server-client.ts +267 -0
  338. package/src/diff-tool.ts +6 -5
  339. package/src/docs-search.ts +10 -3
  340. package/src/doctor.ts +98 -15
  341. package/src/env-file.ts +78 -1
  342. package/src/fix-recipes.ts +53 -32
  343. package/src/frontend-guidance.ts +5 -5
  344. package/src/i18n-check.ts +179 -0
  345. package/src/init-agents.ts +301 -38
  346. package/src/internal/code-unit-order.ts +5 -0
  347. package/src/internal/script-kind.ts +11 -0
  348. package/src/internal/source-facts.ts +96 -22
  349. package/src/internal/typescript-import.ts +663 -68
  350. package/src/introspect.ts +90 -27
  351. package/src/learn.ts +3 -3
  352. package/src/levels-tool.ts +47 -2
  353. package/src/load.ts +140 -33
  354. package/src/manifest-tool.ts +3 -2
  355. package/src/mcp-app-tool.ts +2 -0
  356. package/src/mcp-context.ts +1 -1
  357. package/src/mcp-delegate.ts +162 -0
  358. package/src/mcp-docs-tools.ts +23 -5
  359. package/src/mcp-exec.ts +160 -132
  360. package/src/mcp-http.ts +19 -5
  361. package/src/mcp-io.ts +57 -0
  362. package/src/mcp-isolate.ts +287 -0
  363. package/src/mcp-project-child.ts +182 -0
  364. package/src/mcp-render.ts +2 -2
  365. package/src/mcp-root.ts +117 -22
  366. package/src/mcp-run.ts +104 -10
  367. package/src/mcp-ws.ts +4 -1
  368. package/src/mcp.ts +106 -64
  369. package/src/migrate-layout.ts +1338 -0
  370. package/src/openapi-tool.ts +7 -3
  371. package/src/openapi-types.ts +315 -13
  372. package/src/pipeline-report.ts +22 -18
  373. package/src/port.ts +53 -30
  374. package/src/project-facts.ts +5 -0
  375. package/src/recipes/4.0.0.ts +37 -0
  376. package/src/recipes/index.ts +2 -0
  377. package/src/release-verification.ts +74 -5
  378. package/src/review.ts +13 -8
  379. package/src/route-types.ts +133 -0
  380. package/src/rules/codes.ts +9 -0
  381. package/src/rules/data-guard.ts +230 -0
  382. package/src/rules/index.ts +18 -5
  383. package/src/rules/islands.ts +12 -4
  384. package/src/rules/legacy.ts +71 -39
  385. package/src/rules/nano.ts +18 -6
  386. package/src/rules/pages.ts +99 -0
  387. package/src/rules/routes.ts +181 -2
  388. package/src/rules/secrets.ts +174 -0
  389. package/src/rules/security.ts +198 -70
  390. package/src/rules/typescript.ts +77 -0
  391. package/src/rules/zones.ts +195 -0
  392. package/src/scaffold.ts +147 -95
  393. package/src/sdk.ts +1215 -158
  394. package/src/search-terms.ts +24 -7
  395. package/src/smoke.ts +607 -0
  396. package/src/sync-manifest.ts +50 -19
  397. package/src/sync-routes.ts +4 -3
  398. package/src/test-tool.ts +32 -11
  399. package/src/types-search.ts +11 -4
  400. package/src/upgrade.ts +205 -25
  401. package/src/verification-plan.ts +13 -0
  402. package/src/verification.ts +50 -12
  403. package/src/web-app-options.ts +57 -0
  404. package/src/work-graph.ts +27 -13
package/dist/mcp-http.js CHANGED
@@ -23,7 +23,7 @@ import { loadTypesCorpus } from "./types-search.js";
23
23
  export { examplesAppTool, examplesWidget } from "./mcp-app-tool.js";
24
24
  export { docsTools } from "./mcp-docs-tools.js";
25
25
  // Kept in lockstep with packages/cli/package.json by check:publish's version-consistency gate.
26
- const VERSION = "3.5.0";
26
+ const VERSION = "4.0.2";
27
27
  const SERVER_INFO = { name: "nifra-docs", version: VERSION };
28
28
  // Derive the GET/health tool list from the tools actually served, so the line can never drift from them.
29
29
  const docsHealth = (tools) => `nifra docs MCP - POST JSON-RPC 2.0 here (methods: initialize, tools/list, tools/call). Tools: ${tools
@@ -32,10 +32,11 @@ const docsHealth = (tools) => `nifra docs MCP - POST JSON-RPC 2.0 here (methods:
32
32
  /** The project-independent tools, reading the package's bundled corpus from disk (CLI use): the text
33
33
  * docs tools plus the `nifra_gallery` MCP Apps widget tool. */
34
34
  export function publicDocsTools() {
35
- return [
36
- ...docsTools(loadDocsCorpus, loadExamplesCorpus, loadTypesCorpus),
37
- examplesAppTool(loadExamplesCorpus),
38
- ];
35
+ return [...openAiDocsTools(), examplesAppTool(loadExamplesCorpus)];
36
+ }
37
+ /** The text-only tool surface used by the public OpenAI Agent Plugin package. */
38
+ function openAiDocsTools() {
39
+ return docsTools(loadDocsCorpus, loadExamplesCorpus, loadTypesCorpus);
39
40
  }
40
41
  /**
41
42
  * Handle one MCP request against the given `tools` with the docs server identity. A thin docs-flavored
@@ -45,9 +46,20 @@ export function publicDocsTools() {
45
46
  export function respondMcpHttp(request, tools, options = {}) {
46
47
  return respondMcpHttpCore(request, tools, SERVER_INFO, { health: docsHealth(tools), ...options });
47
48
  }
49
+ /** The text-only handler used by the OpenAI Agent Plugin surface. */
50
+ function handleOpenAiMcpHttp(request) {
51
+ return respondMcpHttp(request, openAiDocsTools(), {
52
+ features: {
53
+ instructions: "Nifra's public documentation tools for the OpenAI plugin. The server is stateless, read-only, and limited to Nifra's bundled documentation corpus, verified examples, API types, learning path, and frontend guidance.",
54
+ },
55
+ allowAnyOrigin: true,
56
+ });
57
+ }
48
58
  /** The CLI HTTP handler: serves the disk-backed corpus tools + registers the examples widget's `ui://`
49
59
  * resource so MCP Apps hosts can render `nifra_gallery`. (`nifra docs-mcp` / `bun run` this file.) */
50
60
  export function handleMcpHttp(request) {
61
+ if (new URL(request.url).pathname === "/openai")
62
+ return handleOpenAiMcpHttp(request);
51
63
  return respondMcpHttp(request, publicDocsTools(), {
52
64
  features: {
53
65
  resources: [examplesWidget.resource],
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-http.js","sourceRoot":"","sources":["../src/mcp-http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAuB,cAAc,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC7F,OAAO,EAAgB,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAInD,qGAAqG;AACrG,0FAA0F;AAC1F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAG/C,+FAA+F;AAC/F,MAAM,OAAO,GAAG,OAAO,CAAA;AACvB,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AAC5D,yGAAyG;AACzG,MAAM,UAAU,GAAG,CAAC,KAAgB,EAAU,EAAE,CAC9C,iGAAiG,KAAK;KACnG,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;KACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;AAElB;+DAC+D;AAC/D,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,GAAG,SAAS,CAAC,cAAc,EAAE,kBAAkB,EAAE,eAAe,CAAC;QACjE,eAAe,CAAC,kBAAkB,CAAC;KACpC,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,KAAgB,EAChB,UAA0B,EAAE;IAE5B,OAAO,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;AACnG,CAAC;AAED;sGACsG;AACtG,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE;QAChD,QAAQ,EAAE;YACR,SAAS,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;YACpC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE;YAC5B,YAAY,EACV,wMAAwM;SAC3M;QACD,sFAAsF;QACtF,8FAA8F;QAC9F,cAAc,EAAE,IAAI;KACrB,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,eAAe;IACb,IAAI,EAAE,OAAO,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;IACtE,KAAK,EAAE,aAAa;CACrB,CAAA"}
1
+ {"version":3,"file":"mcp-http.js","sourceRoot":"","sources":["../src/mcp-http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAuB,cAAc,IAAI,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC7F,OAAO,EAAgB,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAInD,qGAAqG;AACrG,0FAA0F;AAC1F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAG/C,+FAA+F;AAC/F,MAAM,OAAO,GAAG,OAAO,CAAA;AACvB,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AAC5D,yGAAyG;AACzG,MAAM,UAAU,GAAG,CAAC,KAAgB,EAAU,EAAE,CAC9C,iGAAiG,KAAK;KACnG,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;KACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;AAElB;+DAC+D;AAC/D,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,GAAG,eAAe,EAAE,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAA;AACpE,CAAC;AAED,iFAAiF;AACjF,SAAS,eAAe;IACtB,OAAO,SAAS,CAAC,cAAc,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAA;AACvE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,KAAgB,EAChB,UAA0B,EAAE;IAE5B,OAAO,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;AACnG,CAAC;AAED,qEAAqE;AACrE,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,OAAO,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE;QAChD,QAAQ,EAAE;YACR,YAAY,EACV,wNAAwN;SAC3N;QACD,cAAc,EAAE,IAAI;KACrB,CAAC,CAAA;AACJ,CAAC;AAED;sGACsG;AACtG,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACpF,OAAO,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE;QAChD,QAAQ,EAAE;YACR,SAAS,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;YACpC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE;YAC5B,YAAY,EACV,wMAAwM;SAC3M;QACD,sFAAsF;QACtF,8FAA8F;QAC9F,cAAc,EAAE,IAAI;KACrB,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,eAAe;IACb,IAAI,EAAE,OAAO,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;IACtE,KAAK,EAAE,aAAa;CACrB,CAAA"}
package/dist/mcp-io.d.ts CHANGED
@@ -33,6 +33,20 @@ export type BoundedLine = {
33
33
  export declare function readBoundedLines(stream: ReadableStream<Uint8Array>, maxBytes?: number): AsyncGenerator<BoundedLine>;
34
34
  /** Serialize a JSON value only when its UTF-8 representation fits within the byte budget. */
35
35
  export declare function serializeBoundedJson(value: unknown, maxBytes: number, space?: string | number): string | undefined;
36
+ /** What {@link readHeadTail} kept: the start and end of a stream, and how many bytes fell between. */
37
+ export interface HeadTailOutput {
38
+ readonly head: string;
39
+ readonly tail: string;
40
+ /** Bytes dropped between `head` and `tail`; when 0, `head + tail` is the whole stream. */
41
+ readonly droppedBytes: number;
42
+ }
43
+ /**
44
+ * Drain a stream to its end, keeping at most `headBytes` from its start and `tailBytes` from its end,
45
+ * so a child that prints without limit costs bounded memory and still runs to completion.
46
+ */
47
+ export declare function readHeadTail(stream: ReadableStream<Uint8Array>, headBytes: number, tailBytes: number): Promise<HeadTailOutput>;
48
+ /** A {@link HeadTailOutput} as one string, marking where bytes were dropped. */
49
+ export declare function joinHeadTail(output: HeadTailOutput): string;
36
50
  /** Read child output incrementally and cancel as soon as the byte budget is crossed. */
37
51
  export declare function readBoundedStream(stream: ReadableStream<Uint8Array>, maxBytes?: number, onLimit?: () => void): Promise<BoundedOutput>;
38
52
  //# sourceMappingURL=mcp-io.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-io.d.ts","sourceRoot":"","sources":["../src/mcp-io.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,gBAAgB,QAAS,CAAA;AACtC,uGAAuG;AACvG,eAAO,MAAM,sBAAsB,UAAY,CAAA;AAC/C,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,QAAkB,CAAA;AAEpD;mFACmF;AACnF,eAAO,MAAM,2BAA2B,OAAQ,CAAA;AAChD,eAAO,MAAM,6BAA6B,UAAY,CAAA;AAEtD,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAInE;AAED,6GAA6G;AAC7G,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,SAAgC,GACvC,OAAO,CAAC,MAAM,CAAC,CAiCjB;AAED,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,KAAG,MAQhD,CAAA;AAEH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,IAAI,MAAM,KAAG,MAIqC,CAAA;AAEhG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAA;AAYlC,oGAAoG;AACpG,wBAAuB,gBAAgB,CACrC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,QAAQ,SAAwB,GAC/B,cAAc,CAAC,WAAW,CAAC,CAkC7B;AAED,6FAA6F;AAC7F,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GACtB,MAAM,GAAG,SAAS,CAUpB;AAED,wFAAwF;AACxF,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,QAAQ,SAAyB,EACjC,OAAO,CAAC,EAAE,MAAM,IAAI,GACnB,OAAO,CAAC,aAAa,CAAC,CA6BxB"}
1
+ {"version":3,"file":"mcp-io.d.ts","sourceRoot":"","sources":["../src/mcp-io.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,gBAAgB,QAAS,CAAA;AACtC,uGAAuG;AACvG,eAAO,MAAM,sBAAsB,UAAY,CAAA;AAC/C,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,QAAkB,CAAA;AAEpD;mFACmF;AACnF,eAAO,MAAM,2BAA2B,OAAQ,CAAA;AAChD,eAAO,MAAM,6BAA6B,UAAY,CAAA;AAEtD,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAInE;AAED,6GAA6G;AAC7G,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,SAAgC,GACvC,OAAO,CAAC,MAAM,CAAC,CAiCjB;AAED,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,KAAG,MAQhD,CAAA;AAEH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,IAAI,MAAM,KAAG,MAIqC,CAAA;AAEhG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAA;AAYlC,oGAAoG;AACpG,wBAAuB,gBAAgB,CACrC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,QAAQ,SAAwB,GAC/B,cAAc,CAAC,WAAW,CAAC,CAkC7B;AAED,6FAA6F;AAC7F,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GACtB,MAAM,GAAG,SAAS,CAUpB;AAED,sGAAsG;AACtG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0FAA0F;IAC1F,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC9B;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,CAgCzB;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAI3D;AAED,wFAAwF;AACxF,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,QAAQ,SAAyB,EACjC,OAAO,CAAC,EAAE,MAAM,IAAI,GACnB,OAAO,CAAC,aAAa,CAAC,CA6BxB"}
package/dist/mcp-io.js CHANGED
@@ -132,6 +132,51 @@ export function serializeBoundedJson(value, maxBytes, space) {
132
132
  return undefined;
133
133
  return text;
134
134
  }
135
+ /**
136
+ * Drain a stream to its end, keeping at most `headBytes` from its start and `tailBytes` from its end,
137
+ * so a child that prints without limit costs bounded memory and still runs to completion.
138
+ */
139
+ export async function readHeadTail(stream, headBytes, tailBytes) {
140
+ const head = [];
141
+ let headSize = 0;
142
+ const tail = [];
143
+ let tailSize = 0;
144
+ let droppedBytes = 0;
145
+ for await (let chunk of stream) {
146
+ if (headSize < headBytes) {
147
+ const taken = chunk.subarray(0, headBytes - headSize);
148
+ head.push(taken);
149
+ headSize += taken.byteLength;
150
+ chunk = chunk.subarray(taken.byteLength);
151
+ }
152
+ if (chunk.byteLength === 0)
153
+ continue;
154
+ tail.push(chunk);
155
+ tailSize += chunk.byteLength;
156
+ while (tailSize > tailBytes) {
157
+ const first = tail[0];
158
+ const excess = tailSize - tailBytes;
159
+ if (first.byteLength <= excess) {
160
+ tail.shift();
161
+ tailSize -= first.byteLength;
162
+ droppedBytes += first.byteLength;
163
+ }
164
+ else {
165
+ tail[0] = first.subarray(excess);
166
+ tailSize -= excess;
167
+ droppedBytes += excess;
168
+ }
169
+ }
170
+ }
171
+ const decode = (chunks) => Buffer.concat(chunks).toString("utf8");
172
+ return { head: decode(head), tail: decode(tail), droppedBytes };
173
+ }
174
+ /** A {@link HeadTailOutput} as one string, marking where bytes were dropped. */
175
+ export function joinHeadTail(output) {
176
+ return output.droppedBytes === 0
177
+ ? output.head + output.tail
178
+ : `${output.head}\n…(${output.droppedBytes} bytes omitted)…\n${output.tail}`;
179
+ }
135
180
  /** Read child output incrementally and cancel as soon as the byte budget is crossed. */
136
181
  export async function readBoundedStream(stream, maxBytes = CHILD_OUTPUT_MAX_BYTES, onLimit) {
137
182
  const reader = stream.getReader();
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-io.js","sourceRoot":"","sources":["../src/mcp-io.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-io.js","sourceRoot":"","sources":["../src/mcp-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Where `nifra mcp` keeps project code: in a fresh subprocess per call (`mcp-project-child.ts`), never
3
+ * in the server. The server lists the tools, resources and prompts and forwards each call; the child,
4
+ * started in the project's directory, loads `.env` there, imports the config and the backend, answers
5
+ * and exits. So the server holds neither the project's environment nor its modules, and every call
6
+ * sees the project's current code.
7
+ */
8
+ import type { NifraMonorepoConfig } from "./load.js";
9
+ import type { ProjectChildAnswer, ProjectChildRequest } from "./mcp-project-child.js";
10
+ import type { McpPrompt, McpResource, McpTool, McpToolContext } from "./mcp-protocol.js";
11
+ /**
12
+ * Project tools that stay in the server, because none runs project code in this process: each starts
13
+ * its own subprocess (run, render, ws, hydrate, test, the database tools), or reads only the
14
+ * framework's docs or the dev server's feed. `mcp-project-isolation.test.ts` calls each one and fails
15
+ * if the server evaluated project code, or if a name here has no probe there.
16
+ */
17
+ export declare const IN_PROCESS_TOOLS: ReadonlySet<string>;
18
+ export interface ProjectChildOptions {
19
+ /** Progress is forwarded to it, and its cancellation kills the subprocess. */
20
+ readonly context?: McpToolContext;
21
+ /** Kill the subprocess after this long. Tool calls have none: a client cancels them instead. */
22
+ readonly timeoutMs?: number;
23
+ }
24
+ /** Answer `request` in a fresh subprocess in `cwd`; a crash, a timeout or no answer is `ok: false`. */
25
+ export declare function askProjectChild(cwd: string, request: ProjectChildRequest, options?: ProjectChildOptions): Promise<ProjectChildAnswer>;
26
+ /** Each tool runs in a fresh project subprocess, unless it is one that runs no project code here. */
27
+ export declare function isolateTools(cwd: string, tools: readonly McpTool[]): McpTool[];
28
+ /** Each resource is read in a fresh project subprocess. */
29
+ export declare function isolateResources(cwd: string, resources: readonly McpResource[]): McpResource[];
30
+ /** The app's own tools, resources and prompts, each forwarded to a project subprocess. */
31
+ export interface IsolatedSurface {
32
+ readonly tools: readonly McpTool[];
33
+ readonly resources: readonly McpResource[];
34
+ readonly prompts: readonly McpPrompt[];
35
+ }
36
+ /**
37
+ * What the app declares on its backend (`app.tool(...)` and its resources and prompts), read in a
38
+ * project subprocess and kept until `nifra.config.ts`, `backend/framework.ts` or `backend/app.ts`
39
+ * changes. An app that cannot be loaded declares nothing: its absence must not withdraw the built-in
40
+ * tools, and a broken app must not start a subprocess on every message.
41
+ */
42
+ export declare function createAppSurface(cwd: string): () => Promise<IsolatedSurface>;
43
+ /**
44
+ * `detectMonorepo`, with the root config evaluated in a project subprocess. Only a directory with a
45
+ * `nifra.config.ts` and no `routes/` can be a monorepo root, so no other directory starts one.
46
+ */
47
+ export declare function detectMonorepoIsolated(cwd: string): Promise<NifraMonorepoConfig | null>;
48
+ //# sourceMappingURL=mcp-isolate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-isolate.d.ts","sourceRoot":"","sources":["../src/mcp-isolate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAGpD,OAAO,KAAK,EAEV,kBAAkB,EAElB,mBAAmB,EACpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EACV,SAAS,EAET,WAAW,EACX,OAAO,EACP,cAAc,EAEf,MAAM,mBAAmB,CAAA;AAE1B;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAkB/C,CAAA;AA2CF,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAA;IACjC,gGAAgG;IAChG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,uGAAuG;AACvG,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CA4D7B;AA2CD,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,CAM9E;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,WAAW,EAAE,GAAG,WAAW,EAAE,CAE9F;AAED,0FAA0F;AAC1F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAA;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,WAAW,EAAE,CAAA;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAA;CACvC;AAuBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,CAW5E;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAQ7F"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Where `nifra mcp` keeps project code: in a fresh subprocess per call (`mcp-project-child.ts`), never
3
+ * in the server. The server lists the tools, resources and prompts and forwards each call; the child,
4
+ * started in the project's directory, loads `.env` there, imports the config and the backend, answers
5
+ * and exits. So the server holds neither the project's environment nor its modules, and every call
6
+ * sees the project's current code.
7
+ */
8
+ import { randomUUID } from "node:crypto";
9
+ import { existsSync } from "node:fs";
10
+ import { resolve } from "node:path";
11
+ import { fileURLToPath } from "node:url";
12
+ import { CONFIG_FILE } from "./app-files.js";
13
+ import { appFingerprint } from "./mcp-exec.js";
14
+ import { CHILD_TIMEOUT_MS, readBoundedLines, readBoundedStream } from "./mcp-io.js";
15
+ /**
16
+ * Project tools that stay in the server, because none runs project code in this process: each starts
17
+ * its own subprocess (run, render, ws, hydrate, test, the database tools), or reads only the
18
+ * framework's docs or the dev server's feed. `mcp-project-isolation.test.ts` calls each one and fails
19
+ * if the server evaluated project code, or if a name here has no probe there.
20
+ */
21
+ export const IN_PROCESS_TOOLS = new Set([
22
+ "nifra_run",
23
+ "nifra_render",
24
+ "nifra_ws",
25
+ "nifra_hydrate",
26
+ "nifra_test",
27
+ "nifra_db_schema",
28
+ "nifra_db_query",
29
+ "nifra_db_role",
30
+ "nifra_errors",
31
+ "nifra_logs",
32
+ "nifra_inspect",
33
+ "nifra_explain",
34
+ "nifra_docs",
35
+ "nifra_example",
36
+ "nifra_types",
37
+ "nifra_learn",
38
+ "nifra_frontend",
39
+ ]);
40
+ /** A tool result is bounded again by the stdio message limit when the server sends it. */
41
+ const ANSWER_MAX_BYTES = 8 * 1024 * 1024;
42
+ function childPath() {
43
+ return fileURLToPath(new URL(import.meta.url)).replace(/mcp-isolate\.(ts|js)$/, "mcp-project-child.$1");
44
+ }
45
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
46
+ const isAnswer = (value) => isRecord(value) &&
47
+ (value.ok === true || (value.ok === false && typeof value.message === "string"));
48
+ function parseMessage(text) {
49
+ let value;
50
+ try {
51
+ value = JSON.parse(text);
52
+ }
53
+ catch {
54
+ return undefined;
55
+ }
56
+ if (!isRecord(value))
57
+ return undefined;
58
+ if (value.type === "answer" && isAnswer(value.answer)) {
59
+ return { type: "answer", answer: value.answer };
60
+ }
61
+ if (value.type === "progress" && typeof value.progress === "number") {
62
+ return typeof value.total === "number"
63
+ ? { type: "progress", progress: value.progress, total: value.total }
64
+ : { type: "progress", progress: value.progress };
65
+ }
66
+ return undefined;
67
+ }
68
+ const failed = (message) => ({
69
+ ok: false,
70
+ message: `[nifra] ${message}`,
71
+ });
72
+ /** Answer `request` in a fresh subprocess in `cwd`; a crash, a timeout or no answer is `ok: false`. */
73
+ export async function askProjectChild(cwd, request, options = {}) {
74
+ const { context, timeoutMs } = options;
75
+ if (context?.signal.aborted)
76
+ return failed("the call was cancelled before it started");
77
+ const token = randomUUID();
78
+ let proc;
79
+ try {
80
+ proc = Bun.spawn([process.execPath, childPath(), cwd], {
81
+ cwd,
82
+ // Explicit: without `env`, Bun passes the environment it started with, missing `--env-file` values.
83
+ env: process.env,
84
+ stdin: "pipe",
85
+ stdout: "pipe",
86
+ stderr: "pipe",
87
+ });
88
+ }
89
+ catch (error) {
90
+ return failed(`cannot start a process in ${cwd}: ${error instanceof Error ? error.message : String(error)}`);
91
+ }
92
+ let stopped;
93
+ const stop = (reason) => {
94
+ if (stopped !== undefined)
95
+ return;
96
+ stopped = reason;
97
+ proc.kill("SIGKILL");
98
+ };
99
+ const timer = timeoutMs === undefined ? undefined : setTimeout(() => stop("timeout"), timeoutMs);
100
+ const onAbort = () => stop("cancel");
101
+ context?.signal.addEventListener("abort", onAbort, { once: true });
102
+ try {
103
+ proc.stdin.write(JSON.stringify({ ...request, token }));
104
+ await proc.stdin.end();
105
+ const stderr = readBoundedStream(proc.stderr, 16 * 1024);
106
+ let answer;
107
+ let tooLarge = false;
108
+ for await (const item of readBoundedLines(proc.stdout, ANSWER_MAX_BYTES)) {
109
+ if (item.kind === "too-large") {
110
+ tooLarge = true;
111
+ continue;
112
+ }
113
+ if (!item.text.startsWith(`${token} `))
114
+ continue;
115
+ const message = parseMessage(item.text.slice(token.length + 1));
116
+ if (message?.type === "progress")
117
+ context?.reportProgress(message.progress, message.total);
118
+ else if (message?.type === "answer")
119
+ answer = message.answer;
120
+ }
121
+ const [errors] = await Promise.all([stderr, proc.exited]);
122
+ if (answer !== undefined)
123
+ return answer;
124
+ if (stopped === "timeout") {
125
+ return failed(`the project process did not answer within ${timeoutMs}ms and was killed`);
126
+ }
127
+ if (stopped === "cancel")
128
+ return failed("the call was cancelled");
129
+ if (tooLarge)
130
+ return failed(`the answer exceeded ${ANSWER_MAX_BYTES} bytes`);
131
+ const tail = errors.text.trim().slice(-600);
132
+ const how = proc.signalCode === null ? `with code ${proc.exitCode}` : `on ${proc.signalCode}`;
133
+ return failed(`the project process exited ${how} before answering${tail === "" ? "" : `: ${tail}`}`);
134
+ }
135
+ finally {
136
+ clearTimeout(timer);
137
+ context?.signal.removeEventListener("abort", onAbort);
138
+ }
139
+ }
140
+ async function callTool(cwd, name, args, context) {
141
+ const answer = await askProjectChild(cwd, { op: "tool", name, args }, { context });
142
+ if (!answer.ok)
143
+ throw new Error(answer.message);
144
+ if ("result" in answer)
145
+ return answer.result;
146
+ throw new Error(`[nifra] the project process answered ${name} without a result`);
147
+ }
148
+ async function readResource(cwd, uri) {
149
+ const answer = await askProjectChild(cwd, { op: "resource", uri }, { timeoutMs: CHILD_TIMEOUT_MS });
150
+ if (!answer.ok)
151
+ throw new Error(answer.message);
152
+ if ("resource" in answer)
153
+ return answer.resource;
154
+ throw new Error(`[nifra] the project process answered ${uri} without its text`);
155
+ }
156
+ async function getPrompt(cwd, name, args) {
157
+ const answer = await askProjectChild(cwd, { op: "prompt", name, args }, { timeoutMs: CHILD_TIMEOUT_MS });
158
+ if (!answer.ok)
159
+ throw new Error(answer.message);
160
+ if ("messages" in answer)
161
+ return answer.messages;
162
+ throw new Error(`[nifra] the project process answered ${name} without messages`);
163
+ }
164
+ /** Each tool runs in a fresh project subprocess, unless it is one that runs no project code here. */
165
+ export function isolateTools(cwd, tools) {
166
+ return tools.map((tool) => IN_PROCESS_TOOLS.has(tool.name)
167
+ ? tool
168
+ : { ...tool, handler: (args, context) => callTool(cwd, tool.name, args, context) });
169
+ }
170
+ /** Each resource is read in a fresh project subprocess. */
171
+ export function isolateResources(cwd, resources) {
172
+ return resources.map((resource) => ({ ...resource, read: () => readResource(cwd, resource.uri) }));
173
+ }
174
+ const EMPTY_SURFACE = { tools: [], resources: [], prompts: [] };
175
+ async function readSurface(cwd) {
176
+ const answer = await askProjectChild(cwd, { op: "surface" }, { timeoutMs: CHILD_TIMEOUT_MS });
177
+ const surface = answer.ok && "surface" in answer ? answer.surface : EMPTY_SURFACE;
178
+ return {
179
+ tools: surface.tools.map((tool) => ({
180
+ ...tool,
181
+ handler: (args, context) => callTool(cwd, tool.name, args, context),
182
+ })),
183
+ resources: surface.resources.map((resource) => ({
184
+ ...resource,
185
+ read: () => readResource(cwd, resource.uri),
186
+ })),
187
+ prompts: surface.prompts.map((prompt) => ({
188
+ ...prompt,
189
+ handler: (args) => getPrompt(cwd, prompt.name, args),
190
+ })),
191
+ };
192
+ }
193
+ /**
194
+ * What the app declares on its backend (`app.tool(...)` and its resources and prompts), read in a
195
+ * project subprocess and kept until `nifra.config.ts`, `backend/framework.ts` or `backend/app.ts`
196
+ * changes. An app that cannot be loaded declares nothing: its absence must not withdraw the built-in
197
+ * tools, and a broken app must not start a subprocess on every message.
198
+ */
199
+ export function createAppSurface(cwd) {
200
+ let cached;
201
+ return async () => {
202
+ const fingerprint = await appFingerprint(cwd).catch(() => "unreadable");
203
+ if (cached?.fingerprint !== fingerprint) {
204
+ cached = { fingerprint, surface: readSurface(cwd) };
205
+ }
206
+ return cached.surface;
207
+ };
208
+ }
209
+ /**
210
+ * `detectMonorepo`, with the root config evaluated in a project subprocess. Only a directory with a
211
+ * `nifra.config.ts` and no `routes/` can be a monorepo root, so no other directory starts one.
212
+ */
213
+ export async function detectMonorepoIsolated(cwd) {
214
+ if (!existsSync(resolve(cwd, CONFIG_FILE)) || existsSync(resolve(cwd, "routes")))
215
+ return null;
216
+ const answer = await askProjectChild(cwd, { op: "monorepo" }, { timeoutMs: CHILD_TIMEOUT_MS });
217
+ if (!answer.ok || !("apps" in answer) || answer.apps === null)
218
+ return null;
219
+ const apps = Object.entries(answer.apps).filter((entry) => typeof entry[1] === "string");
220
+ return { apps: Object.fromEntries(apps) };
221
+ }
222
+ //# sourceMappingURL=mcp-isolate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-isolate.js","sourceRoot":"","sources":["../src/mcp-isolate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * The subprocess `nifra mcp` runs project code in. The server (`mcp-isolate.ts`) spawns a fresh one
3
+ * per call in the project's directory, so Bun loads that directory's `.env` files here, and the
4
+ * config, the backend and everything they import run here and exit with the process. The tools,
5
+ * resources and prompts answered here are the same ones the server lists: the project tools, and the
6
+ * ones the app declares on its backend.
7
+ *
8
+ * Protocol: one JSON request on stdin; on stdout, progress lines and then one answer line, each
9
+ * prefixed with the request's token, so anything project code prints cannot be read as an answer.
10
+ */
11
+ import type { McpPrompt, McpPromptMessage, McpResource, McpTool, McpToolResult } from "./mcp-protocol.js";
12
+ export type ProjectChildRequest = {
13
+ readonly op: "monorepo";
14
+ } | {
15
+ readonly op: "surface";
16
+ } | {
17
+ readonly op: "tool";
18
+ readonly name: string;
19
+ readonly args: Record<string, unknown>;
20
+ } | {
21
+ readonly op: "resource";
22
+ readonly uri: string;
23
+ } | {
24
+ readonly op: "prompt";
25
+ readonly name: string;
26
+ readonly args: Record<string, unknown>;
27
+ };
28
+ /** What the server lists for the tools, resources and prompts the app declares on its backend. */
29
+ export interface AppSurface {
30
+ readonly tools: readonly Omit<McpTool, "handler">[];
31
+ readonly resources: readonly Omit<McpResource, "read">[];
32
+ readonly prompts: readonly Omit<McpPrompt, "handler">[];
33
+ }
34
+ export type ProjectChildAnswer = {
35
+ readonly ok: true;
36
+ readonly apps: Readonly<Record<string, string>> | null;
37
+ } | {
38
+ readonly ok: true;
39
+ readonly surface: AppSurface;
40
+ } | {
41
+ readonly ok: true;
42
+ readonly result: string | McpToolResult;
43
+ } | {
44
+ readonly ok: true;
45
+ readonly resource: {
46
+ readonly text: string;
47
+ readonly mimeType?: string;
48
+ };
49
+ } | {
50
+ readonly ok: true;
51
+ readonly messages: readonly McpPromptMessage[];
52
+ } | {
53
+ readonly ok: false;
54
+ readonly message: string;
55
+ };
56
+ export type ProjectChildMessage = {
57
+ readonly type: "progress";
58
+ readonly progress: number;
59
+ readonly total?: number;
60
+ } | {
61
+ readonly type: "answer";
62
+ readonly answer: ProjectChildAnswer;
63
+ };
64
+ /**
65
+ * Answer `request` for the project at `cwd`. A tool, resource or prompt that throws answers
66
+ * `ok: false` with its message; an app that cannot be loaded declares nothing, as in the server.
67
+ */
68
+ export declare function answerProjectRequest(cwd: string, request: ProjectChildRequest, reportProgress?: (progress: number, total?: number) => void): Promise<ProjectChildAnswer>;
69
+ /**
70
+ * Serve one request: read it from `input`, answer it and write each message through `write`,
71
+ * prefixed with the request's token. Returns false (writing nothing) for a malformed request.
72
+ */
73
+ export declare function serveProjectChild(cwd: string, input: ReadableStream<Uint8Array>, write: (line: string) => Promise<void>): Promise<boolean>;
74
+ //# sourceMappingURL=mcp-project-child.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-project-child.d.ts","sourceRoot":"","sources":["../src/mcp-project-child.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,aAAa,EACd,MAAM,mBAAmB,CAAA;AAO1B,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACtF;IAAE,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAA;AAE5F,kGAAkG;AAClG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAA;IACnD,QAAQ,CAAC,SAAS,EAAE,SAAS,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAA;IACxD,QAAQ,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAA;CACxD;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAA;CAAE,GAC7E;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC/F;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,GACrE;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAA;AAEpE;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,mBAAmB,EAC5B,cAAc,GAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAe,GACpE,OAAO,CAAC,kBAAkB,CAAC,CA+C7B;AAuBD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,EACjC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACrC,OAAO,CAAC,OAAO,CAAC,CAsBlB"}