@nifrajs/cli 3.5.0 → 4.0.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 (403) 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 +57 -5
  37. package/dist/command-catalog.d.ts.map +1 -1
  38. package/dist/command-catalog.js +270 -26
  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 +41 -21
  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 +982 -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 +34 -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.map +1 -1
  285. package/dist/sync-manifest.js +2 -1
  286. package/dist/sync-manifest.js.map +1 -1
  287. package/dist/sync-routes.d.ts +4 -3
  288. package/dist/sync-routes.d.ts.map +1 -1
  289. package/dist/sync-routes.js +4 -3
  290. package/dist/sync-routes.js.map +1 -1
  291. package/dist/test-tool.d.ts.map +1 -1
  292. package/dist/test-tool.js +30 -11
  293. package/dist/test-tool.js.map +1 -1
  294. package/dist/types-search.d.ts.map +1 -1
  295. package/dist/types-search.js +11 -5
  296. package/dist/types-search.js.map +1 -1
  297. package/dist/upgrade.d.ts +36 -6
  298. package/dist/upgrade.d.ts.map +1 -1
  299. package/dist/upgrade.js +167 -29
  300. package/dist/upgrade.js.map +1 -1
  301. package/dist/verification-plan.d.ts.map +1 -1
  302. package/dist/verification-plan.js +4 -0
  303. package/dist/verification-plan.js.map +1 -1
  304. package/dist/verification.d.ts.map +1 -1
  305. package/dist/verification.js +45 -12
  306. package/dist/verification.js.map +1 -1
  307. package/dist/web-app-options.d.ts +19 -0
  308. package/dist/web-app-options.d.ts.map +1 -0
  309. package/dist/web-app-options.js +49 -0
  310. package/dist/web-app-options.js.map +1 -0
  311. package/dist/work-graph.d.ts.map +1 -1
  312. package/dist/work-graph.js +29 -13
  313. package/dist/work-graph.js.map +1 -1
  314. package/docs/examples.json +185 -29
  315. package/docs/llms-full.txt +3807 -580
  316. package/docs/types.json +14229 -10939
  317. package/package.json +19 -12
  318. package/src/app-files.ts +40 -0
  319. package/src/assure-hydration.ts +139 -46
  320. package/src/assure.ts +17 -2
  321. package/src/capabilities-tool.ts +35 -9
  322. package/src/cdn-check.ts +268 -0
  323. package/src/check-diagnostics.ts +17 -0
  324. package/src/check-scan.ts +358 -63
  325. package/src/check.ts +97 -62
  326. package/src/cli.ts +296 -87
  327. package/src/command-catalog.ts +374 -38
  328. package/src/config-target.ts +47 -0
  329. package/src/contracts.ts +54 -12
  330. package/src/db-audit.ts +128 -0
  331. package/src/db-child.ts +285 -0
  332. package/src/db-config.ts +224 -0
  333. package/src/db-tool.ts +690 -0
  334. package/src/dev-bun-config.ts +116 -40
  335. package/src/dev-feed-tool.ts +912 -0
  336. package/src/dev-server-client.ts +267 -0
  337. package/src/diff-tool.ts +6 -5
  338. package/src/docs-search.ts +10 -3
  339. package/src/doctor.ts +98 -15
  340. package/src/env-file.ts +78 -1
  341. package/src/fix-recipes.ts +44 -31
  342. package/src/frontend-guidance.ts +5 -5
  343. package/src/i18n-check.ts +179 -0
  344. package/src/init-agents.ts +301 -38
  345. package/src/internal/code-unit-order.ts +5 -0
  346. package/src/internal/script-kind.ts +11 -0
  347. package/src/internal/source-facts.ts +96 -22
  348. package/src/internal/typescript-import.ts +663 -68
  349. package/src/introspect.ts +90 -27
  350. package/src/learn.ts +3 -3
  351. package/src/levels-tool.ts +47 -2
  352. package/src/load.ts +140 -33
  353. package/src/manifest-tool.ts +3 -2
  354. package/src/mcp-app-tool.ts +2 -0
  355. package/src/mcp-context.ts +1 -1
  356. package/src/mcp-delegate.ts +162 -0
  357. package/src/mcp-docs-tools.ts +23 -5
  358. package/src/mcp-exec.ts +160 -132
  359. package/src/mcp-http.ts +19 -5
  360. package/src/mcp-io.ts +57 -0
  361. package/src/mcp-isolate.ts +287 -0
  362. package/src/mcp-project-child.ts +182 -0
  363. package/src/mcp-render.ts +2 -2
  364. package/src/mcp-root.ts +117 -22
  365. package/src/mcp-run.ts +104 -10
  366. package/src/mcp-ws.ts +4 -1
  367. package/src/mcp.ts +106 -64
  368. package/src/migrate-layout.ts +1121 -0
  369. package/src/openapi-tool.ts +7 -3
  370. package/src/openapi-types.ts +315 -13
  371. package/src/pipeline-report.ts +22 -18
  372. package/src/port.ts +53 -30
  373. package/src/project-facts.ts +5 -0
  374. package/src/recipes/4.0.0.ts +35 -0
  375. package/src/recipes/index.ts +2 -0
  376. package/src/release-verification.ts +74 -5
  377. package/src/review.ts +13 -8
  378. package/src/route-types.ts +133 -0
  379. package/src/rules/codes.ts +9 -0
  380. package/src/rules/data-guard.ts +230 -0
  381. package/src/rules/index.ts +18 -5
  382. package/src/rules/islands.ts +12 -4
  383. package/src/rules/legacy.ts +71 -39
  384. package/src/rules/nano.ts +18 -6
  385. package/src/rules/pages.ts +99 -0
  386. package/src/rules/routes.ts +181 -2
  387. package/src/rules/secrets.ts +174 -0
  388. package/src/rules/security.ts +198 -70
  389. package/src/rules/typescript.ts +77 -0
  390. package/src/rules/zones.ts +195 -0
  391. package/src/scaffold.ts +147 -95
  392. package/src/sdk.ts +1215 -158
  393. package/src/search-terms.ts +24 -7
  394. package/src/smoke.ts +607 -0
  395. package/src/sync-manifest.ts +2 -1
  396. package/src/sync-routes.ts +4 -3
  397. package/src/test-tool.ts +32 -11
  398. package/src/types-search.ts +11 -4
  399. package/src/upgrade.ts +205 -25
  400. package/src/verification-plan.ts +13 -0
  401. package/src/verification.ts +50 -12
  402. package/src/web-app-options.ts +57 -0
  403. package/src/work-graph.ts +27 -13
@@ -0,0 +1,130 @@
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 { detectMonorepo } from "./load.js";
12
+ import { projectResources } from "./mcp-context.js";
13
+ import { createCachedAppLoader, projectTools } from "./mcp-exec.js";
14
+ import { CHILD_INPUT_MAX_BYTES, readBoundedStream } from "./mcp-io.js";
15
+ import { extractBackendPrompts, extractBackendResources, extractBackendTools, } from "./mcp-reflect.js";
16
+ /**
17
+ * Answer `request` for the project at `cwd`. A tool, resource or prompt that throws answers
18
+ * `ok: false` with its message; an app that cannot be loaded declares nothing, as in the server.
19
+ */
20
+ export async function answerProjectRequest(cwd, request, reportProgress = () => { }) {
21
+ try {
22
+ if (request.op === "monorepo") {
23
+ return { ok: true, apps: (await detectMonorepo(cwd))?.apps ?? null };
24
+ }
25
+ const loadAppCached = createCachedAppLoader(cwd);
26
+ const backend = () => loadAppCached().then((app) => app.backend, () => undefined);
27
+ if (request.op === "surface") {
28
+ const declared = await backend();
29
+ return {
30
+ ok: true,
31
+ surface: {
32
+ tools: extractBackendTools(declared),
33
+ resources: extractBackendResources(declared),
34
+ prompts: extractBackendPrompts(declared),
35
+ },
36
+ };
37
+ }
38
+ if (request.op === "tool") {
39
+ const tool = projectTools(cwd, loadAppCached).find((t) => t.name === request.name) ??
40
+ extractBackendTools(await backend()).find((t) => t.name === request.name);
41
+ if (tool === undefined)
42
+ return { ok: false, message: `unknown tool: ${request.name}` };
43
+ const result = await tool.handler(request.args, {
44
+ signal: new AbortController().signal,
45
+ requestId: null,
46
+ reportProgress,
47
+ });
48
+ return { ok: true, result };
49
+ }
50
+ if (request.op === "resource") {
51
+ const resource = projectResources(cwd, loadAppCached).find((r) => r.uri === request.uri) ??
52
+ extractBackendResources(await backend()).find((r) => r.uri === request.uri);
53
+ if (resource === undefined)
54
+ return { ok: false, message: `unknown resource: ${request.uri}` };
55
+ return { ok: true, resource: await resource.read() };
56
+ }
57
+ const prompt = extractBackendPrompts(await backend()).find((p) => p.name === request.name);
58
+ if (prompt === undefined)
59
+ return { ok: false, message: `unknown prompt: ${request.name}` };
60
+ return { ok: true, messages: await prompt.handler(request.args) };
61
+ }
62
+ catch (error) {
63
+ return { ok: false, message: error instanceof Error ? error.message : String(error) };
64
+ }
65
+ }
66
+ const isArgs = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
67
+ function parseRequest(text) {
68
+ let value;
69
+ try {
70
+ value = JSON.parse(text);
71
+ }
72
+ catch {
73
+ return undefined;
74
+ }
75
+ if (!isArgs(value))
76
+ return undefined;
77
+ const { token, op, name, uri, args } = value;
78
+ if (typeof token !== "string" || !/^[0-9a-f-]{16,64}$/.test(token))
79
+ return undefined;
80
+ if (op === "monorepo" || op === "surface")
81
+ return { token, request: { op } };
82
+ if (op === "resource" && typeof uri === "string")
83
+ return { token, request: { op, uri } };
84
+ if ((op === "tool" || op === "prompt") && typeof name === "string" && isArgs(args)) {
85
+ return { token, request: { op, name, args } };
86
+ }
87
+ return undefined;
88
+ }
89
+ /**
90
+ * Serve one request: read it from `input`, answer it and write each message through `write`,
91
+ * prefixed with the request's token. Returns false (writing nothing) for a malformed request.
92
+ */
93
+ export async function serveProjectChild(cwd, input, write) {
94
+ const text = await readBoundedStream(input, CHILD_INPUT_MAX_BYTES);
95
+ const parsed = text.truncated ? undefined : parseRequest(text.text);
96
+ if (parsed === undefined)
97
+ return false;
98
+ const send = (message) => write(`${parsed.token} ${JSON.stringify(message)}\n`);
99
+ const answer = await answerProjectRequest(cwd, parsed.request, (progress, total) => {
100
+ void send(total === undefined ? { type: "progress", progress } : { type: "progress", progress, total });
101
+ });
102
+ let line;
103
+ try {
104
+ line = JSON.stringify({ type: "answer", answer });
105
+ }
106
+ catch {
107
+ line = JSON.stringify({
108
+ type: "answer",
109
+ answer: { ok: false, message: "the answer is not serializable" },
110
+ });
111
+ }
112
+ await write(`${parsed.token} ${line}\n`);
113
+ return true;
114
+ }
115
+ if (import.meta.main) {
116
+ // Bound before project code loads, so nothing it patches can reach the protocol channel.
117
+ const stdout = process.stdout.write.bind(process.stdout);
118
+ const toStderr = (...args) => {
119
+ process.stderr.write(`${args.map((arg) => String(arg)).join(" ")}\n`);
120
+ };
121
+ console.log = toStderr;
122
+ console.info = toStderr;
123
+ console.debug = toStderr;
124
+ const served = await serveProjectChild(process.argv[2] ?? process.cwd(), Bun.stdin.stream(), (line) => new Promise((done) => stdout(line, () => done())));
125
+ if (!served)
126
+ process.stderr.write("nifra mcp: invalid project request\n");
127
+ // Project code may leave a handle open (a pool, an interval); the answer is written, so stop here.
128
+ process.exit(served ? 0 : 2);
129
+ }
130
+ //# sourceMappingURL=mcp-project-child.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-project-child.js","sourceRoot":"","sources":["../src/mcp-project-child.ts"],"names":[],"mappings":"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"}
@@ -9,12 +9,12 @@
9
9
  * {@link renderPages} never throws - every failure (no config, a loader error, a render throw) becomes
10
10
  * `{ error }` so the agent gets the actionable message.
11
11
  */
12
- import { inProcessClient } from "@nifrajs/client";
13
12
  import { runApp } from "@nifrajs/runner";
14
13
  import { createWebApp } from "@nifrajs/web";
15
14
  import { discoverRoutes } from "@nifrajs/web/fs";
16
15
  import { loadApp, resolvePlugins } from "./load.js";
17
16
  import { CHILD_INPUT_MAX_BYTES, CHILD_OUTPUT_MAX_BYTES, readBoundedLines, readBoundedStream, serializeBoundedJson, } from "./mcp-io.js";
17
+ import { frameworkWebAppOptions } from "./web-app-options.js";
18
18
  const errString = (err) => err instanceof Error ? `${err.name}: ${err.message}` : String(err);
19
19
  /** Load the project, register its SSR plugins, and build the SSR `createWebApp` once - the cost the warm
20
20
  * worker amortizes across calls. Never throws (every failure → `{ error }`). Factored out of
@@ -44,7 +44,7 @@ async function buildWebApp(cwd) {
44
44
  adapter: app.framework.adapter,
45
45
  manifest: discoverRoutes(app.routesDir),
46
46
  clientEntry: "/_nifra-render-only.js", // placeholder; SSR HTML does not need the built client
47
- ...(app.backend !== undefined ? { api: inProcessClient(app.backend) } : {}),
47
+ ...frameworkWebAppOptions(app.framework, app.backend),
48
48
  });
49
49
  return { app: webApp };
50
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-render.js","sourceRoot":"","sources":["../src/mcp-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-render.js","sourceRoot":"","sources":["../src/mcp-render.ts"],"names":[],"mappings":"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"}
@@ -5,17 +5,21 @@
5
5
  * 1. An explicit `nifra mcp <dir>` argument is taken literally (human configuration wins).
6
6
  * 2. A cwd guess walks UP to the nearest nifra marker (a `package.json` depending on `@nifrajs/*`,
7
7
  * or a `nifra.config.ts` monorepo root), so running from a subdirectory still finds the project.
8
+ * When nothing above is a project but the spawn directory is a package-manager workspace root
9
+ * (`package.json` `workspaces`) with exactly one nifra member, the server adopts that member.
8
10
  * 3. The client's MCP `roots` (its workspace folders) are requested after the handshake. When the
9
11
  * guess found no project - or found one DISJOINT from every workspace root - and exactly one
10
- * workspace root is a nifra project, the server adopts it.
12
+ * workspace root (or one member of a workspace-root folder) is a nifra project, the server
13
+ * adopts it.
11
14
  * 4. What cannot be resolved fails CLOSED: project-scoped tools refuse with a remediation message
12
15
  * instead of describing whatever directory the server happened to start in.
13
16
  *
14
17
  * Everything here is pure state + fs probes; the I/O wiring lives in `./mcp.ts`.
15
18
  */
16
19
  /** How the current root was chosen. `arg` = explicit `nifra mcp <dir>`; `cwd` = the spawn directory;
17
- * `parent` = a marker found walking up from cwd; `client-root` = adopted from the client's MCP roots. */
18
- export type McpRootSource = "arg" | "cwd" | "parent" | "client-root";
20
+ * `parent` = a marker found walking up from cwd; `workspace` = the one nifra member of the spawn
21
+ * directory's package-manager workspaces; `client-root` = adopted from the client's MCP roots. */
22
+ export type McpRootSource = "arg" | "cwd" | "parent" | "workspace" | "client-root";
19
23
  export interface McpRootState {
20
24
  /** Absolute directory every project-scoped tool operates on. */
21
25
  readonly root: string;
@@ -25,6 +29,9 @@ export interface McpRootState {
25
29
  /** The client's workspace roots (absolute paths), or `null` until (unless) the client answers
26
30
  * `roots/list`. `null` disables mismatch detection - no data is not a mismatch. */
27
31
  readonly clientRoots: readonly string[] | null;
32
+ /** Nifra members of the spawn directory's workspaces when there were several to choose from - the
33
+ * remediation list, since adopting one of them would be a guess. */
34
+ readonly workspaceCandidates?: readonly string[];
28
35
  }
29
36
  /** A directory is a nifra project when its `package.json` depends on any `@nifrajs/*` package, or it
30
37
  * is a `nifra.config.ts` monorepo root. Backend-only projects (no web config, no `routes/`) count -
@@ -32,8 +39,15 @@ export interface McpRootState {
32
39
  export declare function isNifraProjectDir(dir: string): Promise<boolean>;
33
40
  /** Nearest ancestor (including `start` itself) that is a nifra project, or `null`. */
34
41
  export declare function findNifraRoot(start: string): Promise<string | null>;
42
+ /**
43
+ * The nifra projects among `dir`'s package-manager workspace members, in declaration order. Empty when
44
+ * `dir` declares no `workspaces`. A member is a directory a pattern matches that holds a `package.json`;
45
+ * `node_modules` is never a member.
46
+ */
47
+ export declare function workspaceProjects(dir: string): Promise<string[]>;
35
48
  /** Initial root state. An explicit dir is taken literally (no walk-up - the human named it); a cwd
36
- * guess walks up so a subdirectory spawn still lands on the project. */
49
+ * guess walks up so a subdirectory spawn still lands on the project, then tries the spawn directory's
50
+ * workspace members so a monorepo root finds its one nifra app. */
37
51
  export declare function resolveRootState(requested: string, explicit: boolean): Promise<McpRootState>;
38
52
  /** `file://` roots from a `roots/list` result, as absolute paths. Non-file and malformed URIs are
39
53
  * skipped - the client owns that list, this server only reads it. */
@@ -45,13 +59,14 @@ export declare function rootMismatch(state: McpRootState): boolean;
45
59
  /**
46
60
  * Fold the client's workspace roots into the state, adopting one of them when the current root is
47
61
  * wrong and the correction is unambiguous: the root was GUESSED (never an explicit `nifra mcp <dir>`),
48
- * it is not a project - or is one disjoint from the whole workspace - and exactly ONE workspace root
49
- * is a nifra project. Ambiguity (zero or several candidates) adopts nothing; the guard's remediation
50
- * message lists the candidates instead.
62
+ * it is not a project - or is one disjoint from the whole workspace - and exactly ONE candidate exists
63
+ * (see {@link nifraCandidates}). Ambiguity (zero or several candidates) adopts nothing; the guard's
64
+ * remediation message lists the candidates instead.
51
65
  */
52
66
  export declare function applyClientRoots(state: McpRootState, paths: readonly string[]): Promise<McpRootState>;
53
- /** The nifra project roots among the client's workspace roots - the remediation list when adoption
54
- * was ambiguous. */
67
+ /** The nifra projects the client's workspace roots name: each root that is a project itself, and
68
+ * otherwise the nifra members of a root that is a package-manager workspace. The remediation list
69
+ * when adoption was ambiguous. */
55
70
  export declare function nifraCandidates(paths: readonly string[]): Promise<string[]>;
56
71
  /** Per-call verdict for the tool guard: `blocked` set = project tools refuse with that message;
57
72
  * otherwise `note` is appended to every project tool result so the effective root stays visible. */
@@ -80,6 +95,19 @@ export declare const driftNote: (drift: ToolingDrift) => string;
80
95
  * the version sprawl is invisible because every answer still looks authoritative.
81
96
  */
82
97
  export declare function detectToolingDrift(root: string, cliVersion: string): Promise<ToolingDrift | undefined>;
98
+ /**
99
+ * The nifra the project builds with: its `@nifrajs/cli` when installed, else its `@nifrajs/core`
100
+ * (`fixed` versioning keeps the two in lockstep, so either names the CLI that matches the project).
101
+ * The version drift detection compares against and the version `init-agents --sync-mcp` pins to.
102
+ */
103
+ export declare function installedNifraVersion(root: string): Promise<{
104
+ readonly package: string;
105
+ readonly version: string;
106
+ } | undefined>;
107
+ /** The command that re-pins a project's MCP launch to the nifra it installs. Named with the running
108
+ * CLI's own exact version: the binary printing this is the one known to have `--sync-mcp`, and it pins
109
+ * to the project's version, not its own. */
110
+ export declare const syncMcpCommand: (cliVersion: string) => string;
83
111
  /**
84
112
  * Wrap project-scoped tools with root trust. A bad root refuses in-band; a good root stamps every
85
113
  * result so the agent can see which project answered. Docs tools pass through untouched.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-root.d.ts","sourceRoot":"","sources":["../src/mcp-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH;yGACyG;AACzG,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,aAAa,CAAA;AAEpE,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B;uFACmF;IACnF,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;CAC/C;AAMD;;sDAEsD;AACtD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBrE;AAED,sFAAsF;AACtF,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQzE;AAED;wEACwE;AACxE,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,YAAY,CAAC,CAmBvB;AAED;qEACqE;AACrE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CA+B9D;AAUD;;0EAE0E;AAC1E,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAKzD;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,YAAY,CAAC,CAavB;AAED;oBACoB;AACpB,wBAAsB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAIjF;AAMD;oGACoG;AACpG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAiC9E;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAKlF;AAED,gGAAgG;AAChG,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,gGAAgG;IAChG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED;wGACwG;AACxG,eAAO,MAAM,SAAS,GAAI,OAAO,YAAY,KAAG,MAGyF,CAAA;AA0BzI;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CASnC;AAKD;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,OAAO,mBAAmB,EAAE,OAAO,EAAE,EAC5C,OAAO,EAAE,cAAc,GACtB,OAAO,mBAAmB,EAAE,OAAO,EAAE,CAwBvC;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,OAAO,CAKxF"}
1
+ {"version":3,"file":"mcp-root.d.ts","sourceRoot":"","sources":["../src/mcp-root.ts"],"names":[],"mappings":"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"}
package/dist/mcp-root.js CHANGED
@@ -5,20 +5,26 @@
5
5
  * 1. An explicit `nifra mcp <dir>` argument is taken literally (human configuration wins).
6
6
  * 2. A cwd guess walks UP to the nearest nifra marker (a `package.json` depending on `@nifrajs/*`,
7
7
  * or a `nifra.config.ts` monorepo root), so running from a subdirectory still finds the project.
8
+ * When nothing above is a project but the spawn directory is a package-manager workspace root
9
+ * (`package.json` `workspaces`) with exactly one nifra member, the server adopts that member.
8
10
  * 3. The client's MCP `roots` (its workspace folders) are requested after the handshake. When the
9
11
  * guess found no project - or found one DISJOINT from every workspace root - and exactly one
10
- * workspace root is a nifra project, the server adopts it.
12
+ * workspace root (or one member of a workspace-root folder) is a nifra project, the server
13
+ * adopts it.
11
14
  * 4. What cannot be resolved fails CLOSED: project-scoped tools refuse with a remediation message
12
15
  * instead of describing whatever directory the server happened to start in.
13
16
  *
14
17
  * Everything here is pure state + fs probes; the I/O wiring lives in `./mcp.ts`.
15
18
  */
16
19
  import { readFile } from "node:fs/promises";
17
- import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
20
+ import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
18
21
  import { fileURLToPath } from "node:url";
19
22
  const MAX_CLIENT_ROOTS = 64;
20
23
  const MAX_ROOT_URI_LENGTH = 16_384;
21
24
  const MAX_ROOT_PATH_LENGTH = 4_096;
25
+ /** Workspace members probed per workspace root. A monorepo larger than this is pointed at explicitly
26
+ * (`nifra mcp <dir>`) rather than scanned on every server start. */
27
+ const MAX_WORKSPACE_MEMBERS = 256;
22
28
  /** A directory is a nifra project when its `package.json` depends on any `@nifrajs/*` package, or it
23
29
  * is a `nifra.config.ts` monorepo root. Backend-only projects (no web config, no `routes/`) count -
24
30
  * the marker is the dependency, not the app shape. */
@@ -53,8 +59,57 @@ export async function findNifraRoot(start) {
53
59
  dir = parent;
54
60
  }
55
61
  }
62
+ /** The `workspaces` globs a `package.json` declares (the array form, or Yarn's `{ packages }`), or
63
+ * `null` when the directory is not a workspace root. Negated patterns are dropped: they only exclude. */
64
+ async function workspacePatterns(dir) {
65
+ let field;
66
+ try {
67
+ field = JSON.parse(await readFile(join(dir, "package.json"), "utf8")).workspaces;
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ const list = Array.isArray(field)
73
+ ? field
74
+ : typeof field === "object" && field !== null
75
+ ? field.packages
76
+ : undefined;
77
+ if (!Array.isArray(list))
78
+ return null;
79
+ return list.filter((pattern) => typeof pattern === "string" && pattern !== "" && !pattern.startsWith("!"));
80
+ }
81
+ /**
82
+ * The nifra projects among `dir`'s package-manager workspace members, in declaration order. Empty when
83
+ * `dir` declares no `workspaces`. A member is a directory a pattern matches that holds a `package.json`;
84
+ * `node_modules` is never a member.
85
+ */
86
+ export async function workspaceProjects(dir) {
87
+ const patterns = await workspacePatterns(dir);
88
+ if (patterns === null)
89
+ return [];
90
+ const members = new Set();
91
+ let probed = 0;
92
+ for (const pattern of patterns) {
93
+ const glob = new Bun.Glob(`${pattern.replace(/\/+$/, "")}/package.json`);
94
+ for await (const match of glob.scan({ cwd: dir, onlyFiles: true })) {
95
+ if (match.split(/[\\/]/).includes("node_modules"))
96
+ continue;
97
+ if (++probed > MAX_WORKSPACE_MEMBERS)
98
+ break;
99
+ members.add(dirname(join(dir, match)));
100
+ }
101
+ if (probed > MAX_WORKSPACE_MEMBERS)
102
+ break;
103
+ }
104
+ const projects = [];
105
+ for (const member of members)
106
+ if (await isNifraProjectDir(member))
107
+ projects.push(member);
108
+ return projects;
109
+ }
56
110
  /** Initial root state. An explicit dir is taken literally (no walk-up - the human named it); a cwd
57
- * guess walks up so a subdirectory spawn still lands on the project. */
111
+ * guess walks up so a subdirectory spawn still lands on the project, then tries the spawn directory's
112
+ * workspace members so a monorepo root finds its one nifra app. */
58
113
  export async function resolveRootState(requested, explicit) {
59
114
  if (explicit) {
60
115
  return {
@@ -73,7 +128,17 @@ export async function resolveRootState(requested, explicit) {
73
128
  clientRoots: null,
74
129
  };
75
130
  }
76
- return { root: requested, source: "cwd", isProject: false, clientRoots: null };
131
+ const members = await workspaceProjects(requested);
132
+ if (members.length === 1) {
133
+ return { root: members[0], source: "workspace", isProject: true, clientRoots: null };
134
+ }
135
+ return {
136
+ root: requested,
137
+ source: "cwd",
138
+ isProject: false,
139
+ clientRoots: null,
140
+ ...(members.length > 1 ? { workspaceCandidates: members } : {}),
141
+ };
77
142
  }
78
143
  /** `file://` roots from a `roots/list` result, as absolute paths. Non-file and malformed URIs are
79
144
  * skipped - the client owns that list, this server only reads it. */
@@ -129,9 +194,9 @@ export function rootMismatch(state) {
129
194
  /**
130
195
  * Fold the client's workspace roots into the state, adopting one of them when the current root is
131
196
  * wrong and the correction is unambiguous: the root was GUESSED (never an explicit `nifra mcp <dir>`),
132
- * it is not a project - or is one disjoint from the whole workspace - and exactly ONE workspace root
133
- * is a nifra project. Ambiguity (zero or several candidates) adopts nothing; the guard's remediation
134
- * message lists the candidates instead.
197
+ * it is not a project - or is one disjoint from the whole workspace - and exactly ONE candidate exists
198
+ * (see {@link nifraCandidates}). Ambiguity (zero or several candidates) adopts nothing; the guard's
199
+ * remediation message lists the candidates instead.
135
200
  */
136
201
  export async function applyClientRoots(state, paths) {
137
202
  const next = { ...state, clientRoots: paths };
@@ -139,10 +204,7 @@ export async function applyClientRoots(state, paths) {
139
204
  return next;
140
205
  if (next.isProject && !rootMismatch(next))
141
206
  return next;
142
- const candidates = [];
143
- for (const path of paths)
144
- if (await isNifraProjectDir(path))
145
- candidates.push(path);
207
+ const candidates = await nifraCandidates(paths);
146
208
  if (candidates.length !== 1)
147
209
  return next;
148
210
  return {
@@ -152,13 +214,18 @@ export async function applyClientRoots(state, paths) {
152
214
  clientRoots: paths,
153
215
  };
154
216
  }
155
- /** The nifra project roots among the client's workspace roots - the remediation list when adoption
156
- * was ambiguous. */
217
+ /** The nifra projects the client's workspace roots name: each root that is a project itself, and
218
+ * otherwise the nifra members of a root that is a package-manager workspace. The remediation list
219
+ * when adoption was ambiguous. */
157
220
  export async function nifraCandidates(paths) {
158
221
  const candidates = [];
159
- for (const path of paths)
222
+ for (const path of paths) {
160
223
  if (await isNifraProjectDir(path))
161
224
  candidates.push(path);
225
+ else
226
+ for (const member of await workspaceProjects(path))
227
+ candidates.push(member);
228
+ }
162
229
  return candidates;
163
230
  }
164
231
  const REMEDIATION = "Fix: start the client in the project directory, register the server project-scoped " +
@@ -168,9 +235,14 @@ export async function rootVerdict(state) {
168
235
  ? ` Client workspace roots: ${state.clientRoots.join(", ")}.`
169
236
  : "";
170
237
  if (!state.isProject) {
171
- const candidates = state.clientRoots !== null ? await nifraCandidates(state.clientRoots) : [];
238
+ const candidates = [
239
+ ...new Set([
240
+ ...(state.workspaceCandidates ?? []),
241
+ ...(state.clientRoots !== null ? await nifraCandidates(state.clientRoots) : []),
242
+ ]),
243
+ ];
172
244
  const hint = candidates.length > 1
173
- ? ` Several workspace roots are nifra projects (${candidates.join(", ")}) - pass one: \`nifra mcp <dir>\`.`
245
+ ? ` Several workspace folders are nifra projects (${candidates.join(", ")}) - pass one: \`nifra mcp <dir>\`.`
174
246
  : "";
175
247
  return {
176
248
  blocked: `No nifra project at ${state.root} (no package.json with an @nifrajs/* dependency, no nifra.config.ts). ` +
@@ -204,7 +276,8 @@ export function rootInstructions(state, drift) {
204
276
  * nifra than the project compiles against - stale types, checks, and docs all read as authoritative. */
205
277
  export const driftNote = (drift) => `WARNING: this server runs nifra CLI ${drift.cli}, but the project installs ${drift.package} ${drift.project}. ` +
206
278
  "Types, checks, and docs may describe a different version than your code builds with. " +
207
- "Fix: run the project's own CLI (`bunx --bun nifra mcp` from the project directory, or point the client at ./node_modules/.bin/nifra).";
279
+ `Fix: re-pin the project's MCP launch to the nifra it installs with \`${syncMcpCommand(drift.cli)}\` (run in the project directory), then restart the agent. ` +
280
+ "If this server is not launched from the project's .mcp.json, run the project's own CLI instead (`bunx --bun nifra mcp` from the project directory, or point the client at ./node_modules/.bin/nifra).";
208
281
  /** Feature-level agreement. Patch drift is not reported: it never changes the surface being described. */
209
282
  const featureVersion = (version) => version.split(".").slice(0, 2).join(".");
210
283
  async function installedVersion(root, name) {
@@ -231,16 +304,30 @@ async function installedVersion(root, name) {
231
304
  * the version sprawl is invisible because every answer still looks authoritative.
232
305
  */
233
306
  export async function detectToolingDrift(root, cliVersion) {
307
+ const installed = await installedNifraVersion(root);
308
+ if (installed === undefined)
309
+ return undefined;
310
+ return featureVersion(installed.version) === featureVersion(cliVersion)
311
+ ? undefined
312
+ : { cli: cliVersion, project: installed.version, package: installed.package };
313
+ }
314
+ /**
315
+ * The nifra the project builds with: its `@nifrajs/cli` when installed, else its `@nifrajs/core`
316
+ * (`fixed` versioning keeps the two in lockstep, so either names the CLI that matches the project).
317
+ * The version drift detection compares against and the version `init-agents --sync-mcp` pins to.
318
+ */
319
+ export async function installedNifraVersion(root) {
234
320
  for (const name of ["@nifrajs/cli", "@nifrajs/core"]) {
235
- const project = await installedVersion(root, name);
236
- if (project === undefined)
237
- continue;
238
- return featureVersion(project) === featureVersion(cliVersion)
239
- ? undefined
240
- : { cli: cliVersion, project, package: name };
321
+ const version = await installedVersion(root, name);
322
+ if (version !== undefined)
323
+ return { package: name, version };
241
324
  }
242
325
  return undefined;
243
326
  }
327
+ /** The command that re-pins a project's MCP launch to the nifra it installs. Named with the running
328
+ * CLI's own exact version: the binary printing this is the one known to have `--sync-mcp`, and it pins
329
+ * to the project's version, not its own. */
330
+ export const syncMcpCommand = (cliVersion) => `bunx @nifrajs/cli@${cliVersion} init-agents --sync-mcp`;
244
331
  /** Tool names served from the bundled corpus; they do not depend on the project root. */
245
332
  const PROJECT_FREE_TOOLS = new Set(["nifra_docs", "nifra_example", "nifra_types", "nifra_learn"]);
246
333
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-root.js","sourceRoot":"","sources":["../src/mcp-root.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-root.js","sourceRoot":"","sources":["../src/mcp-root.ts"],"names":[],"mappings":"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"}
package/dist/mcp-run.d.ts CHANGED
@@ -4,7 +4,9 @@
4
4
  * up the agent's latest edits. {@link runBackend} is the pure-ish core (resolve entry → import → run),
5
5
  * exported so it's unit-testable in-process; the entry below wires it to stdin/stdout.
6
6
  */
7
- import { type AppLike } from "@nifrajs/runner";
7
+ import { type AppLike, type RunResult } from "@nifrajs/runner";
8
+ import { type DevLogLevel } from "@nifrajs/web/dev-feed";
9
+ import type { Diagnostic } from "@nifrajs/web/diagnostic";
8
10
  export declare function loadBackend(cwd: string, entry?: string): Promise<{
9
11
  app: AppLike;
10
12
  } | {
@@ -21,4 +23,19 @@ export declare function runBackend(cwd: string, requests: unknown, entry?: strin
21
23
  } | {
22
24
  error: string;
23
25
  }>;
26
+ /** What `nifra_run` adds to the runner's result: what the app printed, and what failed, structured. */
27
+ export interface RunCapture {
28
+ readonly logs?: ReadonlyArray<{
29
+ readonly level: DevLogLevel;
30
+ readonly message: string;
31
+ }>;
32
+ readonly errors?: readonly Diagnostic[];
33
+ }
34
+ /**
35
+ * Run `requests` one at a time, each inside its own request context, so what a handler logs - and
36
+ * core's `unhandled request error` line behind a bare 500 - lands on the result of the request that
37
+ * produced it, redacted, with the error as a Diagnostic (codeframe, cause, fix). Without this a 500 came
38
+ * back as `internal_error` and the reason only ever reached a stderr nobody reads.
39
+ */
40
+ export declare function runCaptured(cwd: string, app: AppLike, requests: readonly unknown[]): Promise<Array<RunResult & RunCapture>>;
24
41
  //# sourceMappingURL=mcp-run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-run.d.ts","sourceRoot":"","sources":["../src/mcp-run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,iBAAiB,CAAA;AActD,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC/C;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,OAAO,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAWnD"}
1
+ {"version":3,"file":"mcp-run.d.ts","sourceRoot":"","sources":["../src/mcp-run.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,KAAK,OAAO,EAAoB,KAAK,SAAS,EAAU,MAAM,iBAAiB,CAAA;AACxF,OAAO,EAIL,KAAK,WAAW,EAEjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAezD,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC/C;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,OAAO,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAWnD;AAED,uGAAuG;AACvG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACxF,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;CACxC;AAID;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC3B,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAqBxC"}