@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/README.md CHANGED
@@ -16,7 +16,9 @@ nifra assure [--config <file>] [--json] Gate reflected routes against enforcem
16
16
  nifra capabilities check [--json] Gate effect provenance + the reviewed capability lockfile.
17
17
  nifra manifest emit [--sign <key-ref>] Emit the hash-verified route trust artifact after assurance.
18
18
  nifra manifest diff <before> <after> Block promotion on contract/governance regressions.
19
- nifra sdk --lang <python|go> Generate a deterministic non-TypeScript SDK from `backend.ts`.
19
+ nifra sdk --lang <python|go> [--strict]
20
+ Generate typed Python dataclass or Go SDK from `backend.ts`; strict mode
21
+ fails on opaque schemas and unsupported SSE contracts.
20
22
  nifra doctor [--json] [--auto-fix] Catch undeclared imports and duplicate Nifra/React installs.
21
23
  ```
22
24
 
@@ -45,7 +47,20 @@ Ed25519 sidecar, so the private key can stay inside KMS/HSM infrastructure.
45
47
 
46
48
  At promotion time, `nifra manifest diff previous.json candidate.json` hash-verifies both files and exits
47
49
  non-zero on a breaking API change, removed assurance, expanded effect, lost provenance coverage, or
48
- increased data sensitivity. This is separate from the frontend asset `dist/manifest.json`.
50
+ increased data sensitivity. A new route counts as well: one that declares a capability or returns `pii`
51
+ or `secret` data blocks promotion as the same change to an existing route would. This is separate from
52
+ the frontend asset `dist/manifest.json`.
53
+
54
+ ## `nifra verify` - verification tiers
55
+
56
+ `nifra check` is the fast project done-gate: TypeScript plus static contract and boundary diagnostics.
57
+ It is not a release claim. `nifra verify` runs the ordered local verification plan; its default mode
58
+ is the feedback plan and reports which release gates it omits. CI and release automation should run
59
+ `nifra verify --release` (or `bun run check:release`), which includes build, coverage, corpus,
60
+ consumer, publish, and cross-runtime gates. Each gate runs a `package.json` script (`bun run lint`,
61
+ `bun run check:docs`, ...); a gate whose script the project does not declare is reported as
62
+ `undeclared` and does not fail the run. Run `nifra port --ci --target <target>` for an app's
63
+ resolved deployment target; CI never guesses a target when none is configured.
49
64
 
50
65
  ## `nifra check` - the drift gate (run as "done")
51
66
 
@@ -74,6 +89,15 @@ For hand-rolled own-API `fetch()` calls, `nifra check` stays conservative: simpl
74
89
  that match a statically visible Nifra route get an exact typed-client rewrite diff; dynamic URLs, custom
75
90
  headers, bodies, query strings, or ambiguous routes fall back to manual steps.
76
91
 
92
+ ## `nifra i18n check` - the catalog gate
93
+
94
+ `nifra i18n check [entry]` imports the module that exports your `locales` (from `defineLocales`) and
95
+ `catalogs` - unlike `nifra check`, it runs that code - and reports per-locale coverage, missing and
96
+ unused keys, ICU syntax errors, placeholder and rich-tag parity with the default message, plural cases
97
+ the locale's grammar needs, script purity (letters from a script the locale does not write in), and
98
+ untranslated messages. It exits 1 on an error, `--strict` also fails on warnings, and `--json` prints
99
+ the result. The checks are `checkCatalogs()` from `@nifrajs/i18n/check`, usable in a test.
100
+
77
101
  ## `nifra migrate --from tailwind --to stylex`
78
102
 
79
103
  This command is a dry run by default. It rewrites static `className` attributes whose utilities have a
@@ -109,7 +133,7 @@ an agent can act on the project, not just read about it. Core tools:
109
133
  - **`nifra_context`** - the same project surface as above.
110
134
  - **`nifra_routes`** / **`nifra_openapi`** - structured API route contracts and an OpenAPI 3.1 document.
111
135
  - **`nifra_docs`** / **`nifra_example`** - token-efficient docs slices and verified code snippets.
112
- - **`nifra_scaffold`** - map a URL to the correct `routes/` file; optionally write safe JSX stubs.
136
+ - **`nifra_scaffold`** - map a URL to the correct `routes/` files and a route pair (the page + its `.backend.ts` loader with an output schema); optionally write them.
113
137
  - **`nifra_run`** - run HTTP requests through this project's backend and get structured results
114
138
  (status, headers, parsed body, and any thrown error). The backend is re-loaded in a fresh process
115
139
  each call by default, so it reflects the agent's latest edits - the write → run → see-the-failure
@@ -153,6 +177,21 @@ Claude Code:
153
177
  claude mcp add nifra -- nifra mcp
154
178
  ```
155
179
 
180
+ The server answers for the nifra the project installs. When the project has its own `@nifrajs/cli` at
181
+ a different version than the `nifra` the client spawned (a global install, say), the session is handed
182
+ to `./node_modules/.bin/nifra mcp`. When that is impossible, `nifra_check`, `nifra_types`,
183
+ `nifra_docs`, `nifra_example`, `nifra_assure` and `nifra_contracts` refuse with the fix instead of
184
+ describing a different release.
185
+
186
+ The server runs none of the project's code and keeps none of its `.env`. Every tool, resource and
187
+ prompt that loads the app, including the ones the app declares with `.tool()`, runs in a fresh process
188
+ started in the project's directory, which loads that directory's `.env` files, answers and exits; a
189
+ config that exits or hangs fails only that call. Values from the environment and from
190
+ `nifra mcp --env-file <path>` reach every such process. In a monorepo each app's tools see that app's
191
+ `.env`, not the root's. A call that loads the app costs one process start, and `warm: true` on
192
+ `nifra_run`/`nifra_render` keeps one worker with the app loaded until a source file changes. Details
193
+ and limits: [Where your code and secrets run](https://nifra.dev/docs/agents#project-code).
194
+
156
195
  ## Structured verification
157
196
 
158
197
  `nifra check --json` returns stable diagnostic codes and machine-actionable evidence. `nifra assure --json --strict` returns one versioned bundle with explicit pass, fail, and skip gate results plus a `green` or `red` verdict. Use `nifra fix --code NF-...` for a registered fix recipe, and `nifra contracts snapshot` to opt into route contract drift detection.
@@ -0,0 +1,11 @@
1
+ export declare const CONFIG_FILE = "nifra.config.ts";
2
+ export declare const FRAMEWORK_FILE = "backend/framework.ts";
3
+ export declare const BACKEND_APP_FILE = "backend/app.ts";
4
+ /** The root files this layout retired, and where each lives now. */
5
+ export declare const RETIRED_ROOT_FILES: Readonly<Record<string, string>>;
6
+ /** Refuse an app still on the retired root files: run against it, a command would silently miss them. */
7
+ export declare function assertCurrentLayout(cwd: string): void;
8
+ /** The file the generated server entry imports the adapter from: `backend/framework.ts` when it exists,
9
+ * else the config (a single-target app may keep everything in `nifra.config.ts`). */
10
+ export declare function adapterFile(cwd: string): string;
11
+ //# sourceMappingURL=app-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-files.d.ts","sourceRoot":"","sources":["../src/app-files.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,WAAW,oBAAoB,CAAA;AAC5C,eAAO,MAAM,cAAc,yBAAyB,CAAA;AACpD,eAAO,MAAM,gBAAgB,mBAAmB,CAAA;AAEhD,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAG/D,CAAA;AAED,yGAAyG;AACzG,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAUrD;AAED;qFACqF;AACrF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Where an app's own entry files live, in one place for every command.
3
+ *
4
+ * - `nifra.config.ts` - the CLI's config (dev/build tooling); only the CLI imports it.
5
+ * - `backend/framework.ts` - the render adapter and the options the generated server entry imports,
6
+ * kept free of build tooling because it is bundled into every server build.
7
+ * - `backend/app.ts` - exports `backend`, the app's API (a `@nifrajs/core` server). Optional.
8
+ */
9
+ import { existsSync } from "node:fs";
10
+ import { resolve } from "node:path";
11
+ export const CONFIG_FILE = "nifra.config.ts";
12
+ export const FRAMEWORK_FILE = "backend/framework.ts";
13
+ export const BACKEND_APP_FILE = "backend/app.ts";
14
+ /** The root files this layout retired, and where each lives now. */
15
+ export const RETIRED_ROOT_FILES = {
16
+ "backend.ts": BACKEND_APP_FILE,
17
+ "framework.ts": FRAMEWORK_FILE,
18
+ };
19
+ /** Refuse an app still on the retired root files: run against it, a command would silently miss them. */
20
+ export function assertCurrentLayout(cwd) {
21
+ const retired = Object.entries(RETIRED_ROOT_FILES).filter(([file]) => existsSync(resolve(cwd, file)));
22
+ if (retired.length === 0)
23
+ return;
24
+ const moves = retired.map(([from, to]) => `${from} -> ${to}`).join(", ");
25
+ throw new Error(`[nifra] this app uses the retired root layout (${moves}). Run \`nifra migrate layout\` to see the ` +
26
+ "move (it also splits each route into x.tsx and x.backend.ts), then `nifra migrate layout --write`.");
27
+ }
28
+ /** The file the generated server entry imports the adapter from: `backend/framework.ts` when it exists,
29
+ * else the config (a single-target app may keep everything in `nifra.config.ts`). */
30
+ export function adapterFile(cwd) {
31
+ const framework = resolve(cwd, FRAMEWORK_FILE);
32
+ return existsSync(framework) ? framework : resolve(cwd, CONFIG_FILE);
33
+ }
34
+ //# sourceMappingURL=app-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-files.js","sourceRoot":"","sources":["../src/app-files.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAA;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,sBAAsB,CAAA;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAA;AAEhD,oEAAoE;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAqC;IAClE,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,cAAc;CAC/B,CAAA;AAED,yGAAyG;AACzG,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CACnE,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAC/B,CAAA;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxE,MAAM,IAAI,KAAK,CACb,kDAAkD,KAAK,6CAA6C;QAClG,oGAAoG,CACvG,CAAA;AACH,CAAC;AAED;qFACqF;AACrF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAC9C,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;AACtE,CAAC"}
@@ -9,6 +9,12 @@ export interface HydrationOptions {
9
9
  readonly interact?: boolean;
10
10
  readonly seed?: string;
11
11
  }
12
+ /** Bounds on a hydration run beyond its {@link HydrationOptions}. */
13
+ export interface HydrationRunControl {
14
+ readonly signal?: AbortSignal;
15
+ /** Default 300000 (five minutes). */
16
+ readonly timeoutMs?: number;
17
+ }
12
18
  /** Run hydration in a fresh process so the project's current client and framework modules are isolated. */
13
- export declare function runHydrationAssurance(cwd: string, options?: HydrationOptions): Promise<HydrationResult>;
19
+ export declare function runHydrationAssurance(cwd: string, options?: HydrationOptions, control?: HydrationRunControl): Promise<HydrationResult>;
14
20
  //# sourceMappingURL=assure-hydration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assure-hydration.d.ts","sourceRoot":"","sources":["../src/assure-hydration.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS,OAAO,kBAAkB,EAAE,UAAU,EAAE,CAAA;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AA+gBD,2GAA2G;AAC3G,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CA4B1B"}
1
+ {"version":3,"file":"assure-hydration.d.ts","sourceRoot":"","sources":["../src/assure-hydration.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS,OAAO,kBAAkB,EAAE,UAAU,EAAE,CAAA;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AA+jBD,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,qCAAqC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,2GAA2G;AAC3G,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,gBAAqB,EAC9B,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,eAAe,CAAC,CA0D1B"}
@@ -7,11 +7,10 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
7
7
  return path;
8
8
  };
9
9
  import { existsSync, statSync } from "node:fs";
10
- import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
10
+ import { copyFile, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
11
11
  import { tmpdir } from "node:os";
12
12
  import { basename, join, resolve } from "node:path";
13
13
  import { fileURLToPath, pathToFileURL } from "node:url";
14
- import { inProcessClient } from "@nifrajs/client";
15
14
  import { defineReplayFile } from "@nifrajs/core/replay";
16
15
  import { runApp } from "@nifrajs/runner";
17
16
  import { createWebApp } from "@nifrajs/web";
@@ -19,6 +18,8 @@ import { buildClient } from "@nifrajs/web/build";
19
18
  import { discoverRoutes } from "@nifrajs/web/fs";
20
19
  import { collectDoctorResult } from "./doctor.js";
21
20
  import { loadApp, resolvePlugins } from "./load.js";
21
+ import { CHILD_OUTPUT_MAX_BYTES, joinHeadTail, readBoundedStream, readHeadTail } from "./mcp-io.js";
22
+ import { frameworkWebAppOptions } from "./web-app-options.js";
22
23
  const HYDRATION_ASSURANCE = Symbol.for("nifra.hydration.assurance");
23
24
  const SOURCE_GLOB = "**/*.{ts,tsx,js,jsx,vue,svelte,mdx}";
24
25
  const IGNORED = /(^|\/)(node_modules|dist|build|coverage|\.git|\.nifra)\//;
@@ -120,6 +121,8 @@ async function buildHydrationApp(cwd) {
120
121
  const client = await buildClient({
121
122
  routesDir: loaded.routesDir,
122
123
  outDir: clientOutput,
124
+ // The runner imports the entry from disk, where a `/assets/` chunk URL is a filesystem path.
125
+ publicPath: `${pathToFileURL(clientOutput).href}/`,
123
126
  clientModule: loaded.framework.clientModule,
124
127
  ...(plugins.length === 0 ? {} : { plugins: plugins }),
125
128
  ...(loaded.framework.conditions === undefined
@@ -130,6 +133,9 @@ async function buildHydrationApp(cwd) {
130
133
  ...(loaded.framework.publicEnvPrefix === undefined
131
134
  ? {}
132
135
  : { publicEnvPrefix: loaded.framework.publicEnvPrefix }),
136
+ ...(loaded.framework.secretExemptions === undefined
137
+ ? {}
138
+ : { secretExemptions: loaded.framework.secretExemptions }),
133
139
  });
134
140
  if (client.entry.trim() === "" || client.assets.length === 0) {
135
141
  await rm(workDir, { recursive: true, force: true });
@@ -145,7 +151,7 @@ async function buildHydrationApp(cwd) {
145
151
  adapter: loaded.framework.adapter,
146
152
  manifest: discoverRoutes(loaded.routesDir),
147
153
  clientEntry: client.entry,
148
- ...(loaded.backend === undefined ? {} : { api: inProcessClient(loaded.backend) }),
154
+ ...frameworkWebAppOptions(loaded.framework, loaded.backend),
149
155
  });
150
156
  return {
151
157
  app: webApp,
@@ -176,21 +182,12 @@ async function sourceFiles(cwd) {
176
182
  }
177
183
  return files;
178
184
  }
185
+ /** How long a route may take to mark itself hydrated before the gate fails it. */
186
+ const HYDRATION_TIMEOUT_MS = 5_000;
187
+ let entryCopies = 0;
179
188
  function outputPath(outputDir, entry) {
180
189
  return join(outputDir, basename(entry));
181
190
  }
182
- function globalValue(html, name) {
183
- const expression = new RegExp(`window\\.${name}=([\\s\\S]*?)(?:</script>|;window\\.)`);
184
- const value = expression.exec(html)?.[1]?.replace(/;$/, "");
185
- if (value === undefined)
186
- return undefined;
187
- try {
188
- return JSON.parse(value);
189
- }
190
- catch {
191
- return undefined;
192
- }
193
- }
194
191
  async function runDomHydration(cwd, built, html, path, interact) {
195
192
  const domModule = await loadOptionalDom(cwd);
196
193
  if (domModule === undefined)
@@ -228,11 +225,23 @@ async function runDomHydration(cwd, built, html, path, interact) {
228
225
  else
229
226
  globals[name] = windowValue[name];
230
227
  }
228
+ // Framework runtimes reach for more DOM globals (Vue's `SVGElement`, `Text`, `Comment`). Lend every
229
+ // one the runtime does not define itself, so its own `fetch`, `URL` and timers stay in place.
230
+ for (const name of Object.getOwnPropertyNames(windowValue)) {
231
+ if (name in globals)
232
+ continue;
233
+ let value;
234
+ try {
235
+ value = windowValue[name];
236
+ }
237
+ catch {
238
+ continue;
239
+ }
240
+ previous.set(name, undefined);
241
+ globals[name] =
242
+ typeof value === "function" && !/^[A-Z]/.test(name) ? value.bind(windowValue) : value;
243
+ }
231
244
  const windowRecord = windowValue;
232
- windowRecord.__NIFRA_ROUTE__ = globalValue(html, "__NIFRA_ROUTE__");
233
- windowRecord.__NIFRA_DATA__ = globalValue(html, "__NIFRA_DATA__");
234
- windowRecord.__NIFRA_LAYOUT_DATA__ = globalValue(html, "__NIFRA_LAYOUT_DATA__");
235
- windowRecord.__NIFRA_ACTION__ = globalValue(html, "__NIFRA_ACTION__");
236
245
  windowRecord.console = console;
237
246
  const errors = [];
238
247
  const recover = (error, info) => {
@@ -249,7 +258,12 @@ async function runDomHydration(cwd, built, html, path, interact) {
249
258
  write.call(documentValue, html);
250
259
  const beforeRoot = documentValue.querySelector("#root");
251
260
  const before = String(beforeRoot?.innerHTML ?? "");
252
- const entry = outputPath(built.outputDir, built.client.entry);
261
+ // Bun evaluates a file module once per path, query or not, so each route imports its own copy.
262
+ // A fresh directory each time: Bun's resolver caches a directory's listing once it has read it.
263
+ const copyDir = join(built.outputDir, `route-${++entryCopies}`);
264
+ await mkdir(copyDir);
265
+ const entry = join(copyDir, basename(built.client.entry));
266
+ await copyFile(outputPath(built.outputDir, built.client.entry), entry);
253
267
  const originalError = console.error;
254
268
  const originalWarn = console.warn;
255
269
  console.error = (...args) => {
@@ -264,17 +278,42 @@ async function runDomHydration(cwd, built, html, path, interact) {
264
278
  errors.push(message);
265
279
  originalWarn(...args);
266
280
  };
281
+ // A render that throws on the client surfaces from a scheduler task, not from the import.
282
+ const uncaught = (error) => {
283
+ errors.push(`uncaught: ${error instanceof Error ? error.message : String(error)}`);
284
+ };
285
+ process.on("uncaughtException", uncaught);
286
+ process.on("unhandledRejection", uncaught);
287
+ let hydrated = false;
267
288
  try {
268
- await import(__rewriteRelativeImportExtension(`${pathToFileURL(entry).href}?nifra-hydration=${encodeURIComponent(path)}`));
269
- await new Promise((resolvePromise) => setTimeout(resolvePromise, 0));
289
+ await import(__rewriteRelativeImportExtension(pathToFileURL(entry).href));
290
+ // The entry marks <html> once the adapter has mounted the route. `Date.now` is pinned by the
291
+ // deterministic runtime, so the bound is measured with `performance.now`.
292
+ const marked = documentValue.documentElement;
293
+ const started = performance.now();
294
+ for (;;) {
295
+ hydrated = marked.hasAttribute("data-nifra-hydrated");
296
+ if (hydrated || errors.length > 0 || performance.now() - started >= HYDRATION_TIMEOUT_MS)
297
+ break;
298
+ await new Promise((resolvePromise) => setTimeout(resolvePromise, 1));
299
+ }
300
+ // The framework commits the hydration in its own scheduler tasks after the marker's frame.
301
+ for (let tick = 0; tick < 10; tick++) {
302
+ await new Promise((resolvePromise) => setTimeout(resolvePromise, 0));
303
+ }
270
304
  }
271
305
  finally {
306
+ process.off("uncaughtException", uncaught);
307
+ process.off("unhandledRejection", uncaught);
272
308
  console.error = originalError;
273
309
  console.warn = originalWarn;
274
310
  }
275
311
  const afterRoot = documentValue.querySelector("#root");
276
312
  const after = String(afterRoot?.innerHTML ?? "");
277
313
  const diagnostics = [];
314
+ if (!hydrated && errors.length === 0) {
315
+ diagnostics.push(diagnostic("NF-H001", `client hydration did not complete within ${HYDRATION_TIMEOUT_MS / 1000}s`, undefined, [built.framework]));
316
+ }
278
317
  if (errors.length > 0 || before !== after) {
279
318
  diagnostics.push(diagnostic("NF-H001", "client hydration reported a recoverable mismatch", undefined, [
280
319
  built.framework,
@@ -442,47 +481,93 @@ async function runHydrationProof(cwd, options) {
442
481
  await cleanup();
443
482
  }
444
483
  }
484
+ /** How long one hydration run may take: it builds the client and renders every route. */
485
+ const HYDRATION_RUN_TIMEOUT_MS = 300_000;
445
486
  /** Run hydration in a fresh process so the project's current client and framework modules are isolated. */
446
- export async function runHydrationAssurance(cwd, options = {}) {
487
+ export async function runHydrationAssurance(cwd, options = {}, control = {}) {
488
+ const failed = (reason) => ({
489
+ diagnostics: [diagnostic("NF-H001", `hydration runner failed: ${reason}`)],
490
+ });
491
+ if (control.signal?.aborted)
492
+ return failed("cancelled");
447
493
  const root = resolve(cwd);
448
494
  const entry = fileURLToPath(import.meta.url);
495
+ // The answer line carries this token, so whatever project code prints cannot be read as the result.
496
+ const token = crypto.randomUUID();
449
497
  const proc = Bun.spawn([process.execPath, entry, root, "--nifra-hydration-child", JSON.stringify(options)], {
450
- stdin: "ignore",
498
+ cwd: root,
499
+ // Explicit: without `env`, Bun passes the environment it started with, missing `--env-file` values.
500
+ env: process.env,
501
+ stdin: "pipe",
451
502
  stdout: "pipe",
452
503
  stderr: "pipe",
453
504
  });
454
- const [stdout, stderr] = await Promise.all([
455
- new Response(proc.stdout).text(),
456
- new Response(proc.stderr).text(),
457
- ]);
458
- await proc.exited;
505
+ let stopped;
506
+ const stop = (reason) => {
507
+ stopped ??= reason;
508
+ proc.kill();
509
+ };
510
+ const onAbort = () => stop("cancelled");
511
+ control.signal?.addEventListener("abort", onAbort, { once: true });
512
+ const timeoutMs = control.timeoutMs ?? HYDRATION_RUN_TIMEOUT_MS;
513
+ const timer = setTimeout(() => stop(`timed out after ${timeoutMs} ms`), timeoutMs);
459
514
  try {
460
- return JSON.parse(stdout);
515
+ try {
516
+ proc.stdin.write(`${token}\n`);
517
+ await proc.stdin.end();
518
+ }
519
+ catch {
520
+ // The child exited before reading its token; its stderr says why.
521
+ }
522
+ const [stdout, stderr] = await Promise.all([
523
+ readBoundedStream(proc.stdout, CHILD_OUTPUT_MAX_BYTES, () => stop(`output exceeded ${CHILD_OUTPUT_MAX_BYTES} bytes`)),
524
+ readHeadTail(proc.stderr, 2048, 2048),
525
+ proc.exited,
526
+ ]);
527
+ if (stopped !== undefined)
528
+ return failed(stopped);
529
+ const prefix = `${token} `;
530
+ const answer = stdout.text.split("\n").find((line) => line.startsWith(prefix));
531
+ if (answer !== undefined) {
532
+ try {
533
+ return JSON.parse(answer.slice(prefix.length));
534
+ }
535
+ catch {
536
+ // A truncated answer line falls through to the stderr report.
537
+ }
538
+ }
539
+ return failed(joinHeadTail(stderr).trim() || "no result");
461
540
  }
462
- catch {
463
- return {
464
- diagnostics: [
465
- diagnostic("NF-H001", `hydration runner failed: ${stderr.trim() || stdout.trim() || "no result"}`),
466
- ],
467
- };
541
+ finally {
542
+ clearTimeout(timer);
543
+ control.signal?.removeEventListener("abort", onAbort);
468
544
  }
469
545
  }
470
546
  if (import.meta.main && process.argv.includes("--nifra-hydration-child")) {
547
+ // Bound before project code loads, so a `console.log` in a config or loader goes to stderr and
548
+ // never reaches the answer channel.
549
+ const stdout = process.stdout.write.bind(process.stdout);
550
+ const toStderr = (...args) => {
551
+ process.stderr.write(`${args.map((arg) => String(arg)).join(" ")}\n`);
552
+ };
553
+ console.log = toStderr;
554
+ console.info = toStderr;
555
+ console.debug = toStderr;
556
+ const token = (await readBoundedStream(Bun.stdin.stream(), 256)).text.trim();
471
557
  const cwd = process.argv[2] ?? process.cwd();
472
558
  const rawOptions = process.argv[4];
559
+ let result;
473
560
  try {
474
561
  process.chdir(cwd);
475
562
  const options = rawOptions === undefined ? {} : JSON.parse(rawOptions);
476
- const result = await runHydrationProof(cwd, options);
477
- await Bun.write(Bun.stdout, JSON.stringify(result));
563
+ result = await runHydrationProof(cwd, options);
478
564
  }
479
565
  catch (error) {
480
- await Bun.write(Bun.stdout, JSON.stringify({
481
- diagnostics: [
482
- diagnostic("NF-H001", error instanceof Error ? error.message : String(error)),
483
- ],
484
- }));
566
+ result = {
567
+ diagnostics: [diagnostic("NF-H001", error instanceof Error ? error.message : String(error))],
568
+ };
485
569
  }
570
+ await new Promise((done) => stdout(`${token} ${JSON.stringify(result)}\n`, () => done()));
486
571
  process.exit(0);
487
572
  }
488
573
  //# sourceMappingURL=assure-hydration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assure-hydration.js","sourceRoot":"","sources":["../src/assure-hydration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assure-hydration.js","sourceRoot":"","sources":["../src/assure-hydration.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"assure.d.ts","sourceRoot":"","sources":["../src/assure.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAK3F,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EACT,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,WAAW,GACX,MAAM,GACN,OAAO,GACP,MAAM,CAAA;IACV,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAA;CAClC;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IACzC,KAAK,IAAI,IAAI,CAAA;CACd;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAazD;AAED,eAAO,MAAM,wBAAwB,uBAAuB,CAAA;AAc5D,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,UAAU,SAA2B,GACpC,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAYrE;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAkB1B;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACvB,GACL,OAAO,CAAC,OAAO,CAAC,CAalB;AAiCD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACvB,GACL,OAAO,CAAC,YAAY,CAAC,CAgNvB"}
1
+ {"version":3,"file":"assure.d.ts","sourceRoot":"","sources":["../src/assure.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAK3F,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAE/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EACT,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,WAAW,GACX,MAAM,GACN,OAAO,GACP,MAAM,CAAA;IACV,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAA;CAClC;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IACzC,KAAK,IAAI,IAAI,CAAA;CACd;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAazD;AAED,eAAO,MAAM,wBAAwB,uBAAuB,CAAA;AAc5D,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,UAAU,SAA2B,GACpC,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA0BrE;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAkB1B;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACvB,GACL,OAAO,CAAC,OAAO,CAAC,CAalB;AAiCD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CACvB,GACL,OAAO,CAAC,YAAY,CAAC,CAgNvB"}
package/dist/assure.js CHANGED
@@ -10,6 +10,7 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
10
10
  import { existsSync } from "node:fs";
11
11
  import { join, resolve } from "node:path";
12
12
  import { pathToFileURL } from "node:url";
13
+ import { CONFIG_FILE, FRAMEWORK_FILE } from "./app-files.js";
13
14
  export function createMemoryAssureSink() {
14
15
  const bundles = [];
15
16
  return {
@@ -49,10 +50,23 @@ export async function loadAssuranceConfig(cwd, configPath = DEFAULT_ASSURANCE_CO
49
50
  }
50
51
  export function formatAssuranceReport(report) {
51
52
  if (report.ok) {
53
+ const contracted = report.routes.filter((route) => route.responseContract !== undefined);
54
+ const enforced = contracted.filter((route) => route.responseContract === "enforce").length;
55
+ const warned = contracted.filter((route) => route.responseContract === "warn").length;
56
+ const unchecked = contracted.filter((route) => route.responseContract === "unchecked").length;
57
+ const runtimeContract = contracted.length === 0
58
+ ? " No declared response/error schemas were found."
59
+ : " Runtime response contracts: " +
60
+ enforced +
61
+ " enforced, " +
62
+ warned +
63
+ " warn-only, " +
64
+ unchecked +
65
+ " typed-only.";
52
66
  const capability = report.capabilities
53
67
  ? ` Capability assurance covered ${report.capabilities.routes.length} route${report.capabilities.routes.length === 1 ? "" : "s"}.`
54
68
  : "";
55
- return `✓ route assurance: ${report.routes.length} route${report.routes.length === 1 ? "" : "s"} classified; all required evidence is present.${capability}`;
69
+ return `✓ route assurance: ${report.routes.length} route${report.routes.length === 1 ? "" : "s"} classified; all required evidence is present.${capability}${runtimeContract}`;
56
70
  }
57
71
  const messages = [
58
72
  ...report.findings.map((finding) => finding.message),
@@ -187,7 +201,7 @@ export async function collectAssureBundle(cwd, options = {}) {
187
201
  };
188
202
  });
189
203
  await addGate("render", async () => {
190
- if (!existsSync(join(cwd, "nifra.config.ts")) && !existsSync(join(cwd, "framework.ts")))
204
+ if (!existsSync(join(cwd, CONFIG_FILE)) && !existsSync(join(cwd, FRAMEWORK_FILE)))
191
205
  return { diagnostics: [], skipReason: "no client render target configured" };
192
206
  const { renderPages } = await import("./mcp-render.js");
193
207
  const result = await renderPages(cwd, [{ path: "/" }]);