@nifrajs/cli 3.3.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 (425) 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 +7 -15
  22. package/dist/check-diagnostics.d.ts.map +1 -1
  23. package/dist/check-diagnostics.js +162 -713
  24. package/dist/check-diagnostics.js.map +1 -1
  25. package/dist/check-scan.d.ts +58 -7
  26. package/dist/check-scan.d.ts.map +1 -1
  27. package/dist/check-scan.js +323 -62
  28. package/dist/check-scan.js.map +1 -1
  29. package/dist/check.d.ts +1 -0
  30. package/dist/check.d.ts.map +1 -1
  31. package/dist/check.js +145 -54
  32. package/dist/check.js.map +1 -1
  33. package/dist/cli.d.ts +42 -16
  34. package/dist/cli.d.ts.map +1 -1
  35. package/dist/cli.js +306 -87
  36. package/dist/cli.js.map +1 -1
  37. package/dist/command-catalog.d.ts +60 -5
  38. package/dist/command-catalog.d.ts.map +1 -1
  39. package/dist/command-catalog.js +298 -33
  40. package/dist/command-catalog.js.map +1 -1
  41. package/dist/config-target.d.ts +8 -0
  42. package/dist/config-target.d.ts.map +1 -0
  43. package/dist/config-target.js +45 -0
  44. package/dist/config-target.js.map +1 -0
  45. package/dist/contracts.d.ts +3 -2
  46. package/dist/contracts.d.ts.map +1 -1
  47. package/dist/contracts.js +56 -16
  48. package/dist/contracts.js.map +1 -1
  49. package/dist/db-audit.d.ts +37 -0
  50. package/dist/db-audit.d.ts.map +1 -0
  51. package/dist/db-audit.js +99 -0
  52. package/dist/db-audit.js.map +1 -0
  53. package/dist/db-child.d.ts +64 -0
  54. package/dist/db-child.d.ts.map +1 -0
  55. package/dist/db-child.js +213 -0
  56. package/dist/db-child.js.map +1 -0
  57. package/dist/db-config.d.ts +60 -0
  58. package/dist/db-config.d.ts.map +1 -0
  59. package/dist/db-config.js +176 -0
  60. package/dist/db-config.js.map +1 -0
  61. package/dist/db-tool.d.ts +84 -0
  62. package/dist/db-tool.d.ts.map +1 -0
  63. package/dist/db-tool.js +537 -0
  64. package/dist/db-tool.js.map +1 -0
  65. package/dist/dev-bun-config.d.ts +20 -13
  66. package/dist/dev-bun-config.d.ts.map +1 -1
  67. package/dist/dev-bun-config.js +98 -41
  68. package/dist/dev-bun-config.js.map +1 -1
  69. package/dist/dev-feed-tool.d.ts +106 -0
  70. package/dist/dev-feed-tool.d.ts.map +1 -0
  71. package/dist/dev-feed-tool.js +713 -0
  72. package/dist/dev-feed-tool.js.map +1 -0
  73. package/dist/dev-server-client.d.ts +67 -0
  74. package/dist/dev-server-client.d.ts.map +1 -0
  75. package/dist/dev-server-client.js +195 -0
  76. package/dist/dev-server-client.js.map +1 -0
  77. package/dist/diagnostics.d.ts +86 -0
  78. package/dist/diagnostics.d.ts.map +1 -1
  79. package/dist/diagnostics.js +85 -0
  80. package/dist/diagnostics.js.map +1 -1
  81. package/dist/diff-tool.d.ts +3 -3
  82. package/dist/diff-tool.d.ts.map +1 -1
  83. package/dist/diff-tool.js +6 -5
  84. package/dist/diff-tool.js.map +1 -1
  85. package/dist/docs-search.d.ts.map +1 -1
  86. package/dist/docs-search.js +12 -4
  87. package/dist/docs-search.js.map +1 -1
  88. package/dist/doctor.d.ts +17 -0
  89. package/dist/doctor.d.ts.map +1 -1
  90. package/dist/doctor.js +76 -15
  91. package/dist/doctor.js.map +1 -1
  92. package/dist/env-file.d.ts +15 -0
  93. package/dist/env-file.d.ts.map +1 -1
  94. package/dist/env-file.js +73 -1
  95. package/dist/env-file.js.map +1 -1
  96. package/dist/fix-recipes.d.ts.map +1 -1
  97. package/dist/fix-recipes.js +41 -21
  98. package/dist/fix-recipes.js.map +1 -1
  99. package/dist/frontend-guidance.js +5 -5
  100. package/dist/frontend-guidance.js.map +1 -1
  101. package/dist/i18n-check.d.ts +16 -0
  102. package/dist/i18n-check.d.ts.map +1 -0
  103. package/dist/i18n-check.js +154 -0
  104. package/dist/i18n-check.js.map +1 -0
  105. package/dist/init-agents.d.ts +49 -13
  106. package/dist/init-agents.d.ts.map +1 -1
  107. package/dist/init-agents.js +239 -34
  108. package/dist/init-agents.js.map +1 -1
  109. package/dist/internal/code-unit-order.d.ts +4 -0
  110. package/dist/internal/code-unit-order.d.ts.map +1 -0
  111. package/dist/internal/code-unit-order.js +6 -0
  112. package/dist/internal/code-unit-order.js.map +1 -0
  113. package/dist/internal/script-kind.d.ts +7 -0
  114. package/dist/internal/script-kind.d.ts.map +1 -0
  115. package/dist/internal/script-kind.js +12 -0
  116. package/dist/internal/script-kind.js.map +1 -0
  117. package/dist/internal/source-facts.d.ts +5 -0
  118. package/dist/internal/source-facts.d.ts.map +1 -1
  119. package/dist/internal/source-facts.js +61 -5
  120. package/dist/internal/source-facts.js.map +1 -1
  121. package/dist/internal/typescript-import.d.ts +49 -24
  122. package/dist/internal/typescript-import.d.ts.map +1 -1
  123. package/dist/internal/typescript-import.js +507 -67
  124. package/dist/internal/typescript-import.js.map +1 -1
  125. package/dist/introspect.d.ts +6 -4
  126. package/dist/introspect.d.ts.map +1 -1
  127. package/dist/introspect.js +93 -74
  128. package/dist/introspect.js.map +1 -1
  129. package/dist/learn.js +3 -3
  130. package/dist/learn.js.map +1 -1
  131. package/dist/levels-tool.d.ts +10 -0
  132. package/dist/levels-tool.d.ts.map +1 -1
  133. package/dist/levels-tool.js +33 -3
  134. package/dist/levels-tool.js.map +1 -1
  135. package/dist/load.d.ts +71 -16
  136. package/dist/load.d.ts.map +1 -1
  137. package/dist/load.js +78 -18
  138. package/dist/load.js.map +1 -1
  139. package/dist/manifest-tool.d.ts.map +1 -1
  140. package/dist/manifest-tool.js +3 -2
  141. package/dist/manifest-tool.js.map +1 -1
  142. package/dist/mcp-app-tool.d.ts.map +1 -1
  143. package/dist/mcp-app-tool.js +2 -0
  144. package/dist/mcp-app-tool.js.map +1 -1
  145. package/dist/mcp-context.d.ts.map +1 -1
  146. package/dist/mcp-context.js +5 -6
  147. package/dist/mcp-context.js.map +1 -1
  148. package/dist/mcp-delegate.d.ts +57 -0
  149. package/dist/mcp-delegate.d.ts.map +1 -0
  150. package/dist/mcp-delegate.js +130 -0
  151. package/dist/mcp-delegate.js.map +1 -0
  152. package/dist/mcp-docs-tools.d.ts.map +1 -1
  153. package/dist/mcp-docs-tools.js +23 -5
  154. package/dist/mcp-docs-tools.js.map +1 -1
  155. package/dist/mcp-exec.d.ts +3 -0
  156. package/dist/mcp-exec.d.ts.map +1 -1
  157. package/dist/mcp-exec.js +263 -131
  158. package/dist/mcp-exec.js.map +1 -1
  159. package/dist/mcp-http.d.ts.map +1 -1
  160. package/dist/mcp-http.js +20 -5
  161. package/dist/mcp-http.js.map +1 -1
  162. package/dist/mcp-io.d.ts +26 -0
  163. package/dist/mcp-io.d.ts.map +1 -1
  164. package/dist/mcp-io.js +113 -0
  165. package/dist/mcp-io.js.map +1 -1
  166. package/dist/mcp-isolate.d.ts +48 -0
  167. package/dist/mcp-isolate.d.ts.map +1 -0
  168. package/dist/mcp-isolate.js +222 -0
  169. package/dist/mcp-isolate.js.map +1 -0
  170. package/dist/mcp-path.d.ts +10 -0
  171. package/dist/mcp-path.d.ts.map +1 -0
  172. package/dist/mcp-path.js +51 -0
  173. package/dist/mcp-path.js.map +1 -0
  174. package/dist/mcp-project-child.d.ts +74 -0
  175. package/dist/mcp-project-child.d.ts.map +1 -0
  176. package/dist/mcp-project-child.js +130 -0
  177. package/dist/mcp-project-child.js.map +1 -0
  178. package/dist/mcp-reflect.d.ts.map +1 -1
  179. package/dist/mcp-reflect.js +2 -2
  180. package/dist/mcp-reflect.js.map +1 -1
  181. package/dist/mcp-render.d.ts.map +1 -1
  182. package/dist/mcp-render.js +64 -45
  183. package/dist/mcp-render.js.map +1 -1
  184. package/dist/mcp-root.d.ts +37 -9
  185. package/dist/mcp-root.d.ts.map +1 -1
  186. package/dist/mcp-root.js +124 -25
  187. package/dist/mcp-root.js.map +1 -1
  188. package/dist/mcp-run.d.ts +18 -1
  189. package/dist/mcp-run.d.ts.map +1 -1
  190. package/dist/mcp-run.js +159 -55
  191. package/dist/mcp-run.js.map +1 -1
  192. package/dist/mcp-ws.js +4 -1
  193. package/dist/mcp-ws.js.map +1 -1
  194. package/dist/mcp.d.ts +18 -5
  195. package/dist/mcp.d.ts.map +1 -1
  196. package/dist/mcp.js +165 -82
  197. package/dist/mcp.js.map +1 -1
  198. package/dist/migrate-layout.d.ts +44 -0
  199. package/dist/migrate-layout.d.ts.map +1 -0
  200. package/dist/migrate-layout.js +982 -0
  201. package/dist/migrate-layout.js.map +1 -0
  202. package/dist/openapi-tool.d.ts +2 -2
  203. package/dist/openapi-tool.d.ts.map +1 -1
  204. package/dist/openapi-tool.js.map +1 -1
  205. package/dist/openapi-types.d.ts +2 -1
  206. package/dist/openapi-types.d.ts.map +1 -1
  207. package/dist/openapi-types.js +240 -12
  208. package/dist/openapi-types.js.map +1 -1
  209. package/dist/pipeline-report.d.ts +3 -2
  210. package/dist/pipeline-report.d.ts.map +1 -1
  211. package/dist/pipeline-report.js +19 -16
  212. package/dist/pipeline-report.js.map +1 -1
  213. package/dist/port.d.ts +5 -4
  214. package/dist/port.d.ts.map +1 -1
  215. package/dist/port.js +46 -29
  216. package/dist/port.js.map +1 -1
  217. package/dist/project-facts.d.ts +28 -4
  218. package/dist/project-facts.d.ts.map +1 -1
  219. package/dist/project-facts.js +12 -2
  220. package/dist/project-facts.js.map +1 -1
  221. package/dist/recipes/4.0.0.d.ts +9 -0
  222. package/dist/recipes/4.0.0.d.ts.map +1 -0
  223. package/dist/recipes/4.0.0.js +34 -0
  224. package/dist/recipes/4.0.0.js.map +1 -0
  225. package/dist/recipes/index.d.ts.map +1 -1
  226. package/dist/recipes/index.js +2 -0
  227. package/dist/recipes/index.js.map +1 -1
  228. package/dist/release-verification.d.ts +11 -1
  229. package/dist/release-verification.d.ts.map +1 -1
  230. package/dist/release-verification.js +47 -4
  231. package/dist/release-verification.js.map +1 -1
  232. package/dist/review.d.ts +21 -0
  233. package/dist/review.d.ts.map +1 -0
  234. package/dist/review.js +823 -0
  235. package/dist/review.js.map +1 -0
  236. package/dist/route-types.d.ts +28 -0
  237. package/dist/route-types.d.ts.map +1 -0
  238. package/dist/route-types.js +106 -0
  239. package/dist/route-types.js.map +1 -0
  240. package/dist/rules/codes.d.ts +9 -0
  241. package/dist/rules/codes.d.ts.map +1 -1
  242. package/dist/rules/codes.js +9 -0
  243. package/dist/rules/codes.js.map +1 -1
  244. package/dist/rules/data-guard.d.ts +12 -0
  245. package/dist/rules/data-guard.d.ts.map +1 -0
  246. package/dist/rules/data-guard.js +213 -0
  247. package/dist/rules/data-guard.js.map +1 -0
  248. package/dist/rules/index.d.ts +3 -0
  249. package/dist/rules/index.d.ts.map +1 -1
  250. package/dist/rules/index.js +17 -5
  251. package/dist/rules/index.js.map +1 -1
  252. package/dist/rules/islands.d.ts.map +1 -1
  253. package/dist/rules/islands.js +7 -4
  254. package/dist/rules/islands.js.map +1 -1
  255. package/dist/rules/legacy.d.ts +3 -1
  256. package/dist/rules/legacy.d.ts.map +1 -1
  257. package/dist/rules/legacy.js +829 -34
  258. package/dist/rules/legacy.js.map +1 -1
  259. package/dist/rules/nano.d.ts.map +1 -1
  260. package/dist/rules/nano.js +15 -6
  261. package/dist/rules/nano.js.map +1 -1
  262. package/dist/rules/pages.d.ts +15 -0
  263. package/dist/rules/pages.d.ts.map +1 -0
  264. package/dist/rules/pages.js +88 -0
  265. package/dist/rules/pages.js.map +1 -0
  266. package/dist/rules/routes.d.ts +11 -0
  267. package/dist/rules/routes.d.ts.map +1 -1
  268. package/dist/rules/routes.js +180 -2
  269. package/dist/rules/routes.js.map +1 -1
  270. package/dist/rules/secrets.d.ts +10 -0
  271. package/dist/rules/secrets.d.ts.map +1 -0
  272. package/dist/rules/secrets.js +169 -0
  273. package/dist/rules/secrets.js.map +1 -0
  274. package/dist/rules/security.d.ts +7 -0
  275. package/dist/rules/security.d.ts.map +1 -1
  276. package/dist/rules/security.js +171 -65
  277. package/dist/rules/security.js.map +1 -1
  278. package/dist/rules/typescript.d.ts +16 -0
  279. package/dist/rules/typescript.d.ts.map +1 -0
  280. package/dist/rules/typescript.js +59 -0
  281. package/dist/rules/typescript.js.map +1 -0
  282. package/dist/rules/zones.d.ts +17 -0
  283. package/dist/rules/zones.d.ts.map +1 -0
  284. package/dist/rules/zones.js +174 -0
  285. package/dist/rules/zones.js.map +1 -0
  286. package/dist/scaffold.d.ts +25 -12
  287. package/dist/scaffold.d.ts.map +1 -1
  288. package/dist/scaffold.js +154 -90
  289. package/dist/scaffold.js.map +1 -1
  290. package/dist/sdk.d.ts +17 -3
  291. package/dist/sdk.d.ts.map +1 -1
  292. package/dist/sdk.js +941 -153
  293. package/dist/sdk.js.map +1 -1
  294. package/dist/search-terms.d.ts +2 -0
  295. package/dist/search-terms.d.ts.map +1 -1
  296. package/dist/search-terms.js +23 -8
  297. package/dist/search-terms.js.map +1 -1
  298. package/dist/smoke.d.ts +79 -0
  299. package/dist/smoke.d.ts.map +1 -0
  300. package/dist/smoke.js +494 -0
  301. package/dist/smoke.js.map +1 -0
  302. package/dist/sync-manifest.d.ts.map +1 -1
  303. package/dist/sync-manifest.js +2 -1
  304. package/dist/sync-manifest.js.map +1 -1
  305. package/dist/sync-routes.d.ts +4 -3
  306. package/dist/sync-routes.d.ts.map +1 -1
  307. package/dist/sync-routes.js +4 -3
  308. package/dist/sync-routes.js.map +1 -1
  309. package/dist/test-tool.d.ts.map +1 -1
  310. package/dist/test-tool.js +30 -11
  311. package/dist/test-tool.js.map +1 -1
  312. package/dist/types-search.d.ts.map +1 -1
  313. package/dist/types-search.js +11 -5
  314. package/dist/types-search.js.map +1 -1
  315. package/dist/upgrade.d.ts +36 -6
  316. package/dist/upgrade.d.ts.map +1 -1
  317. package/dist/upgrade.js +167 -29
  318. package/dist/upgrade.js.map +1 -1
  319. package/dist/verification-plan.d.ts.map +1 -1
  320. package/dist/verification-plan.js +8 -0
  321. package/dist/verification-plan.js.map +1 -1
  322. package/dist/verification.d.ts.map +1 -1
  323. package/dist/verification.js +45 -12
  324. package/dist/verification.js.map +1 -1
  325. package/dist/web-app-options.d.ts +19 -0
  326. package/dist/web-app-options.d.ts.map +1 -0
  327. package/dist/web-app-options.js +49 -0
  328. package/dist/web-app-options.js.map +1 -0
  329. package/dist/work-graph.d.ts +3 -0
  330. package/dist/work-graph.d.ts.map +1 -1
  331. package/dist/work-graph.js +33 -16
  332. package/dist/work-graph.js.map +1 -1
  333. package/docs/examples.json +185 -29
  334. package/docs/llms-full.txt +4123 -548
  335. package/docs/types.json +14391 -10060
  336. package/package.json +19 -11
  337. package/src/app-files.ts +40 -0
  338. package/src/assure-hydration.ts +139 -46
  339. package/src/assure.ts +17 -2
  340. package/src/capabilities-tool.ts +35 -9
  341. package/src/cdn-check.ts +268 -0
  342. package/src/check-diagnostics.ts +199 -797
  343. package/src/check-scan.ts +394 -63
  344. package/src/check.ts +146 -58
  345. package/src/cli.ts +347 -92
  346. package/src/command-catalog.ts +407 -45
  347. package/src/config-target.ts +47 -0
  348. package/src/contracts.ts +66 -15
  349. package/src/db-audit.ts +128 -0
  350. package/src/db-child.ts +285 -0
  351. package/src/db-config.ts +224 -0
  352. package/src/db-tool.ts +690 -0
  353. package/src/dev-bun-config.ts +116 -40
  354. package/src/dev-feed-tool.ts +912 -0
  355. package/src/dev-server-client.ts +267 -0
  356. package/src/diagnostics.ts +179 -0
  357. package/src/diff-tool.ts +6 -5
  358. package/src/docs-search.ts +10 -3
  359. package/src/doctor.ts +98 -15
  360. package/src/env-file.ts +78 -1
  361. package/src/fix-recipes.ts +44 -31
  362. package/src/frontend-guidance.ts +5 -5
  363. package/src/i18n-check.ts +179 -0
  364. package/src/init-agents.ts +301 -38
  365. package/src/internal/code-unit-order.ts +5 -0
  366. package/src/internal/script-kind.ts +11 -0
  367. package/src/internal/source-facts.ts +96 -22
  368. package/src/internal/typescript-import.ts +663 -68
  369. package/src/introspect.ts +93 -82
  370. package/src/learn.ts +3 -3
  371. package/src/levels-tool.ts +47 -2
  372. package/src/load.ts +144 -32
  373. package/src/manifest-tool.ts +3 -2
  374. package/src/mcp-app-tool.ts +2 -0
  375. package/src/mcp-context.ts +5 -7
  376. package/src/mcp-delegate.ts +162 -0
  377. package/src/mcp-docs-tools.ts +23 -5
  378. package/src/mcp-exec.ts +301 -161
  379. package/src/mcp-http.ts +22 -5
  380. package/src/mcp-io.ts +130 -0
  381. package/src/mcp-isolate.ts +287 -0
  382. package/src/mcp-path.ts +50 -0
  383. package/src/mcp-project-child.ts +182 -0
  384. package/src/mcp-reflect.ts +3 -2
  385. package/src/mcp-render.ts +72 -42
  386. package/src/mcp-root.ts +130 -24
  387. package/src/mcp-run.ts +190 -56
  388. package/src/mcp-ws.ts +4 -1
  389. package/src/mcp.ts +193 -91
  390. package/src/migrate-layout.ts +1121 -0
  391. package/src/openapi-tool.ts +7 -3
  392. package/src/openapi-types.ts +315 -13
  393. package/src/pipeline-report.ts +22 -18
  394. package/src/port.ts +53 -30
  395. package/src/project-facts.ts +42 -8
  396. package/src/recipes/4.0.0.ts +35 -0
  397. package/src/recipes/index.ts +2 -0
  398. package/src/release-verification.ts +74 -5
  399. package/src/review.ts +988 -0
  400. package/src/route-types.ts +133 -0
  401. package/src/rules/codes.ts +9 -0
  402. package/src/rules/data-guard.ts +230 -0
  403. package/src/rules/index.ts +18 -5
  404. package/src/rules/islands.ts +12 -4
  405. package/src/rules/legacy.ts +947 -35
  406. package/src/rules/nano.ts +18 -6
  407. package/src/rules/pages.ts +99 -0
  408. package/src/rules/routes.ts +181 -2
  409. package/src/rules/secrets.ts +174 -0
  410. package/src/rules/security.ts +198 -70
  411. package/src/rules/typescript.ts +77 -0
  412. package/src/rules/zones.ts +195 -0
  413. package/src/scaffold.ts +175 -98
  414. package/src/sdk.ts +1215 -158
  415. package/src/search-terms.ts +24 -7
  416. package/src/smoke.ts +607 -0
  417. package/src/sync-manifest.ts +2 -1
  418. package/src/sync-routes.ts +4 -3
  419. package/src/test-tool.ts +32 -11
  420. package/src/types-search.ts +11 -4
  421. package/src/upgrade.ts +205 -25
  422. package/src/verification-plan.ts +27 -0
  423. package/src/verification.ts +50 -12
  424. package/src/web-app-options.ts +57 -0
  425. package/src/work-graph.ts +40 -16
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-feed-tool.js","sourceRoot":"","sources":["../src/dev-feed-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Finds the running `nifra dev` server a tool should read, and reads its agent feed.
3
+ *
4
+ * A dev server writes `.nifra/dev-server.json` (owner-only) with its port and a per-run token. A
5
+ * record alone proves nothing - the process may have died and the port been reused - so a server
6
+ * counts as live only after it answers the identity endpoint with the record's own pid and root.
7
+ */
8
+ import { type DevPipeline, type DevServerIdentity } from "@nifrajs/web/dev-feed";
9
+ export interface LiveDevServer {
10
+ readonly root: string;
11
+ readonly port: number;
12
+ readonly origin: string;
13
+ readonly pipeline: DevPipeline;
14
+ readonly pid: number;
15
+ readonly startedAt: string;
16
+ readonly token: string;
17
+ readonly identity: DevServerIdentity;
18
+ }
19
+ /** A dev server whose record survived it: it crashed or was killed before it could clean up. */
20
+ export interface DeadDevServer {
21
+ readonly root: string;
22
+ readonly port: number;
23
+ readonly pid: number;
24
+ readonly startedAt: string;
25
+ }
26
+ export type DevServerLookup = {
27
+ readonly status: "live";
28
+ readonly server: LiveDevServer;
29
+ }
30
+ /** An explicit port no record under the project names: reachable only through token-free paths. */
31
+ | {
32
+ readonly status: "unverified";
33
+ readonly port: number;
34
+ readonly origin: string;
35
+ } | {
36
+ readonly status: "ambiguous";
37
+ readonly servers: readonly Pick<LiveDevServer, "root" | "port" | "pipeline">[];
38
+ } | {
39
+ readonly status: "down";
40
+ /** Project roots holding a persisted feed from an earlier run, nearest first. */
41
+ readonly persisted: readonly string[];
42
+ readonly dead: readonly DeadDevServer[];
43
+ /** Servers whose record and process exist but which did not answer as themselves. */
44
+ readonly unreachable: readonly {
45
+ readonly root: string;
46
+ readonly port: number;
47
+ readonly reason: string;
48
+ }[];
49
+ } | {
50
+ readonly status: "invalid-port";
51
+ };
52
+ export interface FindDevServerOptions {
53
+ readonly port?: number | undefined;
54
+ }
55
+ /**
56
+ * The dev server for the project at `cwd`: its own record first, else the one live server among the
57
+ * workspace's apps. An explicit `port` picks among them, and still works when no record names it.
58
+ */
59
+ export declare function findDevServer(cwd: string, options?: FindDevServerOptions, signal?: AbortSignal): Promise<DevServerLookup>;
60
+ export type FeedQuery = Readonly<Record<string, string | number | boolean | readonly string[] | undefined>>;
61
+ /** GET one feed endpoint as the authenticated agent. Throws when the server does not answer with JSON. */
62
+ export declare function readDevFeed(server: LiveDevServer, path: string, query?: FeedQuery, signal?: AbortSignal): Promise<unknown>;
63
+ /** One line telling a caller how to get past a lookup that did not yield a single live server. */
64
+ export declare function describeLookup(lookup: Exclude<DevServerLookup, {
65
+ status: "live";
66
+ }>, cwd: string): string;
67
+ //# sourceMappingURL=dev-server-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-server-client.d.ts","sourceRoot":"","sources":["../src/dev-server-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAML,KAAK,WAAW,EAChB,KAAK,iBAAiB,EAIvB,MAAM,uBAAuB,CAAA;AAG9B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;CACrC;AAED,gGAAgG;AAChG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAAE;AAC7D,mGAAmG;GACjG;IAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjF;IACE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,EAAE,CAAA;CAC/E,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAA;IACvC,qFAAqF;IACrF,QAAQ,CAAC,WAAW,EAAE,SAAS;QAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB,EAAE,CAAA;CACJ,GACD;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAAA;AAEvC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAuFD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,EAClC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC,CAgD1B;AAED,MAAM,MAAM,SAAS,GAAG,QAAQ,CAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,CAC1E,CAAA;AAED,0GAA0G;AAC1G,wBAAsB,WAAW,CAC/B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,SAAc,EACrB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC,CAelB;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EACpD,GAAG,EAAE,MAAM,GACV,MAAM,CAuBR"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Finds the running `nifra dev` server a tool should read, and reads its agent feed.
3
+ *
4
+ * A dev server writes `.nifra/dev-server.json` (owner-only) with its port and a per-run token. A
5
+ * record alone proves nothing - the process may have died and the port been reused - so a server
6
+ * counts as live only after it answers the identity endpoint with the record's own pid and root.
7
+ */
8
+ import { existsSync, readdirSync } from "node:fs";
9
+ import { join, resolve } from "node:path";
10
+ import { DEV_FEED_HEADER, DEV_FEED_PATHS, DEV_SERVER_LOG_FILE, DEV_SERVER_RECORD_FILE, DEV_TOKEN_HEADER, isProcessAlive, readDevServerRecord, } from "@nifrajs/web/dev-feed";
11
+ import { LOCAL_TOOL_FETCH_TIMEOUT_MS, readBoundedResponse, validateLocalPort } from "./mcp-io.js";
12
+ // Where a workspace keeps its apps. One level only: the scan runs on every tool call.
13
+ const SCAN_PARENTS = [".", "apps", "packages", "examples"];
14
+ const MAX_SCANNED_ROOTS = 512;
15
+ function candidateRoots(cwd) {
16
+ const roots = [cwd];
17
+ for (const parent of SCAN_PARENTS) {
18
+ const base = join(cwd, parent);
19
+ let names;
20
+ try {
21
+ names = readdirSync(base, { withFileTypes: true })
22
+ .filter((entry) => entry.isDirectory())
23
+ .map((entry) => entry.name)
24
+ .filter((name) => !name.startsWith(".") && name !== "node_modules")
25
+ .sort();
26
+ }
27
+ catch {
28
+ continue;
29
+ }
30
+ for (const name of names) {
31
+ if (roots.length >= MAX_SCANNED_ROOTS)
32
+ return roots;
33
+ const root = join(base, name);
34
+ if (!roots.includes(root))
35
+ roots.push(root);
36
+ }
37
+ }
38
+ return roots;
39
+ }
40
+ const originOf = (port) => `http://127.0.0.1:${port}`;
41
+ function isIdentity(value) {
42
+ if (typeof value !== "object" || value === null)
43
+ return false;
44
+ return ("pid" in value &&
45
+ typeof value.pid === "number" &&
46
+ "root" in value &&
47
+ typeof value.root === "string" &&
48
+ "port" in value &&
49
+ typeof value.port === "number" &&
50
+ "cursor" in value &&
51
+ typeof value.cursor === "number");
52
+ }
53
+ async function verify(record, signal) {
54
+ const origin = originOf(record.port);
55
+ let body;
56
+ try {
57
+ const response = await fetch(`${origin}${DEV_FEED_PATHS.identity}`, {
58
+ headers: { [DEV_TOKEN_HEADER]: record.token },
59
+ signal: anySignal(signal),
60
+ });
61
+ if (response.headers.get(DEV_FEED_HEADER) !== "true")
62
+ return { ok: false, reason: `port ${record.port} is not a nifra dev server` };
63
+ if (!response.ok)
64
+ return { ok: false, reason: `identity check returned ${response.status}` };
65
+ body = JSON.parse(await readBoundedResponse(response));
66
+ }
67
+ catch (cause) {
68
+ return { ok: false, reason: cause instanceof Error ? cause.message : String(cause) };
69
+ }
70
+ // A recycled port can host a different nifra server; its pid and root give it away.
71
+ if (!isIdentity(body) || body.pid !== record.pid || resolve(body.root) !== resolve(record.root))
72
+ return { ok: false, reason: `port ${record.port} now belongs to another server` };
73
+ return {
74
+ ok: true,
75
+ server: {
76
+ root: record.root,
77
+ port: record.port,
78
+ origin,
79
+ pipeline: record.pipeline,
80
+ pid: record.pid,
81
+ startedAt: record.startedAt,
82
+ token: record.token,
83
+ identity: body,
84
+ },
85
+ };
86
+ }
87
+ function anySignal(signal) {
88
+ const timeout = AbortSignal.timeout(LOCAL_TOOL_FETCH_TIMEOUT_MS);
89
+ return signal === undefined ? timeout : AbortSignal.any([signal, timeout]);
90
+ }
91
+ /**
92
+ * The dev server for the project at `cwd`: its own record first, else the one live server among the
93
+ * workspace's apps. An explicit `port` picks among them, and still works when no record names it.
94
+ */
95
+ export async function findDevServer(cwd, options = {}, signal) {
96
+ let port;
97
+ if (options.port !== undefined) {
98
+ port = validateLocalPort(options.port);
99
+ if (port === undefined)
100
+ return { status: "invalid-port" };
101
+ }
102
+ // The project's own live server wins outright, whatever else the workspace runs.
103
+ const own = readDevServerRecord(cwd);
104
+ if (own !== undefined && (port === undefined || own.port === port) && isProcessAlive(own.pid)) {
105
+ const result = await verify(own, signal);
106
+ if (result.ok)
107
+ return { status: "live", server: result.server };
108
+ }
109
+ const roots = candidateRoots(cwd);
110
+ const records = [];
111
+ const dead = [];
112
+ for (const root of roots) {
113
+ if (!existsSync(join(root, DEV_SERVER_RECORD_FILE)))
114
+ continue;
115
+ const record = readDevServerRecord(root);
116
+ if (record === undefined)
117
+ continue;
118
+ if (port !== undefined && record.port !== port)
119
+ continue;
120
+ if (isProcessAlive(record.pid))
121
+ records.push(record);
122
+ else
123
+ dead.push({ root, port: record.port, pid: record.pid, startedAt: record.startedAt });
124
+ }
125
+ const checked = await Promise.all(records.map((record) => verify(record, signal)));
126
+ const live = [];
127
+ const unreachable = [];
128
+ checked.forEach((result, index) => {
129
+ const record = records[index];
130
+ if (record === undefined)
131
+ return;
132
+ if (result.ok)
133
+ live.push(result.server);
134
+ else
135
+ unreachable.push({ root: record.root, port: record.port, reason: result.reason });
136
+ });
137
+ const [first] = live;
138
+ if (first !== undefined && live.length === 1)
139
+ return { status: "live", server: first };
140
+ if (live.length > 1) {
141
+ return {
142
+ status: "ambiguous",
143
+ servers: live.map(({ root, port: livePort, pipeline }) => ({
144
+ root,
145
+ port: livePort,
146
+ pipeline,
147
+ })),
148
+ };
149
+ }
150
+ if (port !== undefined && unreachable.length === 0)
151
+ return { status: "unverified", port, origin: originOf(port) };
152
+ const persisted = roots.filter((root) => existsSync(join(root, DEV_SERVER_LOG_FILE)));
153
+ return { status: "down", persisted, dead, unreachable };
154
+ }
155
+ /** GET one feed endpoint as the authenticated agent. Throws when the server does not answer with JSON. */
156
+ export async function readDevFeed(server, path, query = {}, signal) {
157
+ const url = new URL(path, server.origin);
158
+ for (const [name, value] of Object.entries(query)) {
159
+ if (value === undefined)
160
+ continue;
161
+ url.searchParams.set(name, Array.isArray(value) ? value.join(",") : String(value));
162
+ }
163
+ const response = await fetch(url, {
164
+ headers: { [DEV_TOKEN_HEADER]: server.token },
165
+ signal: anySignal(signal),
166
+ });
167
+ if (response.headers.get(DEV_FEED_HEADER) !== "true")
168
+ throw new Error(`${server.origin} did not answer as a nifra dev server`);
169
+ const text = await readBoundedResponse(response);
170
+ if (!response.ok)
171
+ throw new Error(`${path} returned ${response.status}: ${text.slice(0, 200)}`);
172
+ return JSON.parse(text);
173
+ }
174
+ /** One line telling a caller how to get past a lookup that did not yield a single live server. */
175
+ export function describeLookup(lookup, cwd) {
176
+ switch (lookup.status) {
177
+ case "invalid-port":
178
+ return "port must be an integer from 1 to 65535.";
179
+ case "unverified":
180
+ return `No ${DEV_SERVER_RECORD_FILE} under ${cwd} names port ${lookup.port}. Pass \`dir\` (the project that server runs) so its token can be read.`;
181
+ case "ambiguous":
182
+ return `${lookup.servers.length} dev servers are running: ${lookup.servers.map((s) => `${s.root} (:${s.port})`).join(", ")}. Pass \`dir\` or \`port\` to pick one.`;
183
+ case "down": {
184
+ const parts = [];
185
+ for (const server of lookup.dead)
186
+ parts.push(`the dev server for ${server.root} (:${server.port}, pid ${server.pid}) is gone without cleaning up - it crashed or was killed`);
187
+ for (const server of lookup.unreachable)
188
+ parts.push(`the dev server for ${server.root} (:${server.port}) did not answer: ${server.reason}`);
189
+ if (parts.length === 0)
190
+ parts.push(`no nifra dev server is running for ${cwd}; start one with \`nifra dev\``);
191
+ return `${parts.join("; ")}.`;
192
+ }
193
+ }
194
+ }
195
+ //# sourceMappingURL=dev-server-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-server-client.js","sourceRoot":"","sources":["../src/dev-server-client.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,30 @@ export interface DiagnosticFix {
4
4
  readonly recipe: string;
5
5
  readonly command?: string;
6
6
  }
7
+ /**
8
+ * The richer compatibility view used by the original `nifra check` renderer. It is deliberately
9
+ * kept out of the enumerable diagnostic shape: SARIF, MCP structured output, and JSON consumers get
10
+ * the small stable diagnostic contract, while the legacy text view can still explain an exact edit.
11
+ */
12
+ export interface DiagnosticCompatibility {
13
+ /** The pre-registry rule name used by the human/legacy check result. */
14
+ readonly rule: string;
15
+ /** The old human-facing fix text, when the rule had one. */
16
+ readonly fix?: string;
17
+ /** A richer legacy suggestion (diff, command, or manual steps). */
18
+ readonly suggestion?: DiagnosticSuggestion;
19
+ /** The import path evidence used by the legacy server-only-import view. */
20
+ readonly chain?: readonly string[];
21
+ /** Preserve the old optional `CheckDiagnostic.code` field exactly where it existed. */
22
+ readonly includeCode?: boolean;
23
+ }
24
+ export interface DiagnosticSuggestion {
25
+ readonly kind: "edit" | "command" | "manual";
26
+ readonly title: string;
27
+ readonly diff?: string;
28
+ readonly command?: readonly string[];
29
+ readonly steps?: readonly string[];
30
+ }
7
31
  export interface Diagnostic {
8
32
  /** Stable forever. Never renumber or reuse. */
9
33
  readonly code: string;
@@ -17,6 +41,68 @@ export interface Diagnostic {
17
41
  /** Command that proves the fix worked. */
18
42
  readonly verify?: string;
19
43
  }
44
+ /** Attach legacy-only rendering metadata without widening the serialized diagnostic protocol. */
45
+ export declare function diagnosticWithCompatibility(value: Diagnostic, compatibility: DiagnosticCompatibility): Diagnostic;
46
+ /** Read legacy-only rendering metadata. Undefined means the diagnostic has no compatibility view. */
47
+ export declare function diagnosticCompatibilityOf(value: Diagnostic): DiagnosticCompatibility | undefined;
48
+ /** The subset of SARIF 2.1.0 emitted by {@link toSarifLog}. */
49
+ export interface SarifLog {
50
+ readonly $schema: "https://json.schemastore.org/sarif-2.1.0.json";
51
+ readonly version: "2.1.0";
52
+ readonly runs: readonly SarifRun[];
53
+ }
54
+ export interface SarifRun {
55
+ readonly tool: {
56
+ readonly driver: {
57
+ readonly name: string;
58
+ readonly version?: string;
59
+ readonly rules: readonly SarifRule[];
60
+ };
61
+ };
62
+ readonly results: readonly SarifResult[];
63
+ }
64
+ export interface SarifRule {
65
+ readonly id: string;
66
+ readonly shortDescription: {
67
+ readonly text: string;
68
+ };
69
+ }
70
+ export interface SarifResult {
71
+ readonly ruleId: string;
72
+ readonly level: "error" | "warning" | "note";
73
+ readonly message: {
74
+ readonly text: string;
75
+ };
76
+ readonly locations?: readonly SarifLocation[];
77
+ readonly properties?: Readonly<Record<string, string | readonly string[]>>;
78
+ }
79
+ export interface SarifLocation {
80
+ readonly physicalLocation: {
81
+ readonly artifactLocation: {
82
+ readonly uri: string;
83
+ readonly uriBaseId?: string;
84
+ };
85
+ readonly region?: {
86
+ readonly startLine: number;
87
+ };
88
+ };
89
+ }
90
+ export interface SarifProjectionOptions {
91
+ /** Name shown by external review tools in the SARIF run metadata. Defaults to `nifra`. */
92
+ readonly toolName?: string;
93
+ /** Optional CLI/framework version shown by external review tools. */
94
+ readonly toolVersion?: string;
95
+ /** Base URI identifier for relative diagnostic file paths. */
96
+ readonly uriBaseId?: string;
97
+ }
98
+ /**
99
+ * Project stable Nifra diagnostics into SARIF for code-host and external review surfaces.
100
+ *
101
+ * This is deliberately a pure projection: it does not run checks, read files, or reinterpret policy.
102
+ * Relative file names remain relative so callers can choose the review tool's checkout base through
103
+ * {@link SarifProjectionOptions.uriBaseId}.
104
+ */
105
+ export declare function toSarifLog(diagnostics: readonly Diagnostic[], options?: SarifProjectionOptions): SarifLog;
20
106
  export declare const diagnostic: (value: Diagnostic) => Diagnostic;
21
107
  export declare function severityFails(severity: Severity, strict?: boolean): boolean;
22
108
  export declare function normalizeSeverity(value: "error" | "warning" | "warn" | "info"): Severity;
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAEpF,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAEhD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,CAAA;IAC5B,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,UAAU,KAAG,UAAkC,CAAA;AAEjF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,UAAQ,GAAG,OAAO,CAEzE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAExF"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,89 @@
1
1
  /** Stable, machine-actionable diagnostics shared by CLI gates and MCP renderers. */
2
+ const DIAGNOSTIC_COMPATIBILITY = Symbol("nifra.diagnosticCompatibility");
3
+ /** Attach legacy-only rendering metadata without widening the serialized diagnostic protocol. */
4
+ export function diagnosticWithCompatibility(value, compatibility) {
5
+ const result = { ...value };
6
+ Object.defineProperty(result, DIAGNOSTIC_COMPATIBILITY, {
7
+ value: Object.freeze({
8
+ ...compatibility,
9
+ ...(compatibility.chain === undefined
10
+ ? {}
11
+ : { chain: Object.freeze([...compatibility.chain]) }),
12
+ }),
13
+ enumerable: false,
14
+ });
15
+ return Object.freeze(result);
16
+ }
17
+ /** Read legacy-only rendering metadata. Undefined means the diagnostic has no compatibility view. */
18
+ export function diagnosticCompatibilityOf(value) {
19
+ return value[DIAGNOSTIC_COMPATIBILITY];
20
+ }
21
+ function sarifLevel(severity) {
22
+ return severity === "error" ? "error" : severity === "warn" ? "warning" : "note";
23
+ }
24
+ function sarifProperties(value) {
25
+ const properties = {};
26
+ if (value.evidence !== undefined && value.evidence.length > 0)
27
+ properties["nifra.evidence"] = [...value.evidence];
28
+ if (value.verify !== undefined)
29
+ properties["nifra.verify"] = value.verify;
30
+ if (value.fix !== undefined) {
31
+ properties["nifra.fix.recipe"] = value.fix.recipe;
32
+ if (value.fix.command !== undefined)
33
+ properties["nifra.fix.command"] = value.fix.command;
34
+ }
35
+ return Object.keys(properties).length === 0 ? undefined : properties;
36
+ }
37
+ /**
38
+ * Project stable Nifra diagnostics into SARIF for code-host and external review surfaces.
39
+ *
40
+ * This is deliberately a pure projection: it does not run checks, read files, or reinterpret policy.
41
+ * Relative file names remain relative so callers can choose the review tool's checkout base through
42
+ * {@link SarifProjectionOptions.uriBaseId}.
43
+ */
44
+ export function toSarifLog(diagnostics, options = {}) {
45
+ const rules = new Map();
46
+ const results = [];
47
+ for (const value of diagnostics) {
48
+ if (!rules.has(value.code)) {
49
+ rules.set(value.code, {
50
+ id: value.code,
51
+ shortDescription: { text: value.message },
52
+ });
53
+ }
54
+ const location = value.file === undefined
55
+ ? undefined
56
+ : {
57
+ physicalLocation: {
58
+ artifactLocation: {
59
+ uri: value.file.replaceAll("\\", "/"),
60
+ ...(options.uriBaseId === undefined ? {} : { uriBaseId: options.uriBaseId }),
61
+ },
62
+ ...(value.line !== undefined && Number.isInteger(value.line) && value.line >= 1
63
+ ? { region: { startLine: value.line } }
64
+ : {}),
65
+ },
66
+ };
67
+ const properties = sarifProperties(value);
68
+ results.push({
69
+ ruleId: value.code,
70
+ level: sarifLevel(value.severity),
71
+ message: { text: value.message },
72
+ ...(location === undefined ? {} : { locations: [location] }),
73
+ ...(properties === undefined ? {} : { properties }),
74
+ });
75
+ }
76
+ const driver = {
77
+ name: options.toolName ?? "nifra",
78
+ ...(options.toolVersion === undefined ? {} : { version: options.toolVersion }),
79
+ rules: [...rules.values()],
80
+ };
81
+ return {
82
+ $schema: "https://json.schemastore.org/sarif-2.1.0.json",
83
+ version: "2.1.0",
84
+ runs: [{ tool: { driver }, results }],
85
+ };
86
+ }
2
87
  export const diagnostic = (value) => Object.freeze(value);
3
88
  export function severityFails(severity, strict = false) {
4
89
  return severity === "error" || (strict && severity === "warn");
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,oFAAoF;AAuBpF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAc,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAEjF,MAAM,UAAU,aAAa,CAAC,QAAkB,EAAE,MAAM,GAAG,KAAK;IAC9D,OAAO,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,IAAI,QAAQ,KAAK,MAAM,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA4C;IAC5E,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;AAC7C,CAAC"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -8,9 +8,9 @@
8
8
  * The CI loop: commit a snapshot on main, run `nifra diff api-snapshot.json` on every PR, and an
9
9
  * accidental contract break (removed route, new required field, retyped response) fails the build
10
10
  * before it ships. Classification lives in `@nifrajs/core/diff` (direction-aware, fails closed);
11
- * this module only loads `backend.ts` and renders the result.
11
+ * this module only loads `backend/app.ts` and renders the result.
12
12
  *
13
- * Loads ONLY `backend.ts` - the API contract - so it works on an API-only project with no
13
+ * Loads ONLY `backend/app.ts` - the API contract - so it works on an API-only project with no
14
14
  * framework config or routes/ directory (unlike the eager `loadApp`).
15
15
  */
16
16
  import { type RouteSnapshot, type RoutesDiff } from "@nifrajs/core/diff";
@@ -24,7 +24,7 @@ export declare const DEFAULT_SNAPSHOT_FILE = "api-snapshot.json";
24
24
  export declare function parseSnapshotFile(content: string, sourcePath: string): SnapshotFile;
25
25
  /** Render a diff for terminals: breaking first, then info, then compatible. */
26
26
  export declare function formatDiff(diff: RoutesDiff): string;
27
- /** Import `backend.ts` from `cwd` and snapshot its routes. */
27
+ /** Import `backend/app.ts` from `cwd` and snapshot its routes. */
28
28
  export declare function snapshotBackend(cwd: string): Promise<readonly RouteSnapshot[]>;
29
29
  /** `nifra snapshot`: write the current contract as the CI baseline. */
30
30
  export declare function runSnapshot(cwd: string, options: {
@@ -1 +1 @@
1
- {"version":3,"file":"diff-tool.d.ts","sourceRoot":"","sources":["../src/diff-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAA;AAE3B,oGAAoG;AACpG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAA;CAC1C;AAED,eAAO,MAAM,qBAAqB,sBAAsB,CAAA;AAExD,qGAAqG;AACrG,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAqBnF;AAaD,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAWnD;AAED,8DAA8D;AAC9D,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAYpF;AAED,uEAAuE;AACvE,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvF;AAED,wGAAwG;AACxG,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,OAAO,CAAC,CAiBlB"}
1
+ {"version":3,"file":"diff-tool.d.ts","sourceRoot":"","sources":["../src/diff-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAA;AAG3B,oGAAoG;AACpG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAA;CAC1C;AAED,eAAO,MAAM,qBAAqB,sBAAsB,CAAA;AAExD,qGAAqG;AACrG,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAqBnF;AAaD,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAWnD;AAED,kEAAkE;AAClE,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAYpF;AAED,uEAAuE;AACvE,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvF;AAED,wGAAwG;AACxG,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,OAAO,CAAC,CAiBlB"}
package/dist/diff-tool.js CHANGED
@@ -8,9 +8,9 @@
8
8
  * The CI loop: commit a snapshot on main, run `nifra diff api-snapshot.json` on every PR, and an
9
9
  * accidental contract break (removed route, new required field, retyped response) fails the build
10
10
  * before it ships. Classification lives in `@nifrajs/core/diff` (direction-aware, fails closed);
11
- * this module only loads `backend.ts` and renders the result.
11
+ * this module only loads `backend/app.ts` and renders the result.
12
12
  *
13
- * Loads ONLY `backend.ts` - the API contract - so it works on an API-only project with no
13
+ * Loads ONLY `backend/app.ts` - the API contract - so it works on an API-only project with no
14
14
  * framework config or routes/ directory (unlike the eager `loadApp`).
15
15
  */
16
16
  var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
@@ -24,6 +24,7 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
24
24
  import { existsSync } from "node:fs";
25
25
  import { resolve } from "node:path";
26
26
  import { diffRouteSnapshots, snapshotRoutes, } from "@nifrajs/core/diff";
27
+ import { BACKEND_APP_FILE } from "./app-files.js";
27
28
  export const DEFAULT_SNAPSHOT_FILE = "api-snapshot.json";
28
29
  /** Parse + validate a snapshot file's content. Throws with an actionable message on any mismatch. */
29
30
  export function parseSnapshotFile(content, sourcePath) {
@@ -66,11 +67,11 @@ export function formatDiff(diff) {
66
67
  : "No breaking changes.";
67
68
  return `${lines.join("\n")}\n\n${summary}`;
68
69
  }
69
- /** Import `backend.ts` from `cwd` and snapshot its routes. */
70
+ /** Import `backend/app.ts` from `cwd` and snapshot its routes. */
70
71
  export async function snapshotBackend(cwd) {
71
- const backendPath = resolve(cwd, "backend.ts");
72
+ const backendPath = resolve(cwd, BACKEND_APP_FILE);
72
73
  if (!existsSync(backendPath)) {
73
- throw new Error(`[nifra] no backend.ts in ${cwd} - \`nifra snapshot\`/\`nifra diff\` compare the API contract, which lives in backend.ts.`);
74
+ throw new Error(`[nifra] no backend/app.ts in ${cwd} - \`nifra snapshot\`/\`nifra diff\` compare the API contract, which lives in backend/app.ts.`);
74
75
  }
75
76
  const backend = (await import(__rewriteRelativeImportExtension(backendPath))).backend;
76
77
  if (backend === undefined) {