@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
package/dist/mcp.js CHANGED
@@ -20,91 +20,102 @@
20
20
  * - `nifra_levels` - the cumulative verification ladder (L0 contract → L4 invariants): what the
21
21
  * project actually proves, and why each level it misses does not hold.
22
22
  * - `nifra_doctor` - package.json dependency drift detector, with safe local-version auto-fix.
23
- * - `nifra_explain` - resolve an error (pasted, or the dev server's last) into a structured
23
+ * - `nifra_errors` - the running dev server's errors (SSR, loader, API, build, browser, hydration,
24
+ * crash), each a structured diagnostic tagged with its request; `since` cursors, stale flags.
25
+ * - `nifra_logs` - the dev server's console output, server and browser, tagged by request.
26
+ * - `nifra_db_schema` / `nifra_db_query` / `nifra_db_role` - the development database declared as
27
+ * `devDatabase` in nifra.config.ts: its schema, one read-only query (or plan) per call in a fresh
28
+ * subprocess killed at the deadline, and the SQL for a read-only role. Separate tools, so a client
29
+ * can allow reading the schema without allowing queries.
30
+ * - `nifra_explain` - resolve an error (pasted, or the dev server's latest) into a structured
24
31
  * diagnostic: stable code, a codeframe in the user's source, and the recognised cause + fix.
25
32
  * - `nifra_inspect` - read the running dev server's recent request traces (method/path/status/
26
- * duration/ISR) from the DevTools plugin: what your requests ACTUALLY did, not a guess.
33
+ * duration/ISR/errors): what your requests ACTUALLY did, not a guess.
27
34
  *
28
35
  * Wire it into a client (e.g. Claude Desktop / Cursor) as: command `nifra`, args `["mcp"]` (or
29
36
  * `["mcp", "<dir>"]` to pin the project directory explicitly). The server does NOT silently trust its
30
37
  * spawn directory: the root is resolved via `./mcp-root.ts` (marker walk-up, the client's MCP `roots`,
31
38
  * fail-closed tools when no nifra project is found) and announced in `initialize` + on every project
32
- * tool result. The protocol is hand-rolled (newline-delimited JSON-RPC 2.0 over stdio), including
39
+ * tool result. A project that installs its own `@nifrajs/cli` at a different version gets the session
40
+ * handed to that CLI; when that is impossible the version-sensitive tools refuse rather than answer
41
+ * for the wrong release (see `./mcp-delegate.ts`). The protocol is hand-rolled (newline-delimited JSON-RPC 2.0 over stdio), including
33
42
  * standard MCP progress notifications and request cancellation - no SDK dependency, the same
34
43
  * minimal-surface choice as the rest of nifra. The pure dispatch lives in `./mcp-protocol.ts`; this
35
44
  * module is the I/O shell (stdin loop, tool wiring, the run subprocess).
45
+ *
46
+ * This process runs no project code and holds none of the project's `.env`: the config, the backend
47
+ * and everything they import run in a fresh subprocess per call (`./mcp-isolate.ts`), and a session
48
+ * whose process Bun started with `.env` values moves to a copy that never loads them (`./cli.ts`).
36
49
  */
37
50
  import { stat } from "node:fs/promises";
38
51
  import { resolve } from "node:path";
39
52
  import { loadDocsCorpus } from "./docs-search.js";
40
53
  import { loadExamplesCorpus } from "./examples.js";
41
- import { detectMonorepo, loadMonorepoApps } from "./load.js";
54
+ import { loadMonorepoApps } from "./load.js";
55
+ import { delegateToProjectCli, refuseVersionSensitive } from "./mcp-delegate.js";
42
56
  import { docsTools } from "./mcp-docs-tools.js";
43
- import { createMcpProtocolState, handleRpc, rpcError, } from "./mcp-protocol.js";
44
- import { extractBackendPrompts, extractBackendResources, extractBackendTools, } from "./mcp-reflect.js";
57
+ import { createMcpProtocolState, handleRpc, isJsonRpcRequest, isJsonRpcResponse, rpcError, } from "./mcp-protocol.js";
45
58
  import { loadTypesCorpus } from "./types-search.js";
46
59
  export { extractBackendPrompts, extractBackendResources, extractBackendTools, } from "./mcp-reflect.js";
47
60
  import { applyClientRoots, clientSupportsRoots, detectToolingDrift, driftNote, guardTools, pathsFromRootsResult, resolveRootState, rootInstructions, rootVerdict, } from "./mcp-root.js";
48
- export { CHILD_OUTPUT_MAX_BYTES, CHILD_TIMEOUT_MS, LOCAL_TOOL_FETCH_TIMEOUT_MS, LOCAL_TOOL_MAX_RESPONSE_BYTES, notNifraResponse, readBoundedResponse, readBoundedStream, timeoutMessage, validateLocalPort, } from "./mcp-io.js";
61
+ export { CHILD_INPUT_MAX_BYTES, CHILD_OUTPUT_MAX_BYTES, CHILD_TIMEOUT_MS, LOCAL_TOOL_FETCH_TIMEOUT_MS, LOCAL_TOOL_MAX_RESPONSE_BYTES, notNifraResponse, readBoundedLines, readBoundedResponse, readBoundedStream, serializeBoundedJson, timeoutMessage, validateLocalPort, } from "./mcp-io.js";
49
62
  export { clientSupportsRoots, guardTools } from "./mcp-root.js";
50
- import { createCachedAppLoader, projectTools } from "./mcp-exec.js";
63
+ import { projectTools } from "./mcp-exec.js";
64
+ import { createAppSurface, detectMonorepoIsolated, isolateResources, isolateTools, } from "./mcp-isolate.js";
51
65
  export { catalogProjectTools, createCachedAppLoader, createWarmHandler, projectTools, renderHandler, runHandler, spawnChild, toMcpTool, WarmWorker, wsHandler, } from "./mcp-exec.js";
52
- import { namespaceForApp, projectFeatures } from "./mcp-context.js";
66
+ import { namespaceForApp, projectPrompts, projectResources } from "./mcp-context.js";
53
67
  export { dirError, namespaceForApp, projectFeatures, projectPrompts, projectResources, resolveProjectDir, } from "./mcp-context.js";
54
- async function backendFeatures(loader, base) {
55
- const resources = [...(base.resources ?? [])];
56
- const prompts = [...(base.prompts ?? [])];
57
- try {
58
- const app = await loader();
59
- resources.push(...extractBackendResources(app.backend));
60
- prompts.push(...extractBackendPrompts(app.backend));
61
- }
62
- catch {
63
- // Not loadable here (no web config, or the config itself throws). The server still serves.
64
- }
65
- return { resources, prompts };
66
- }
67
68
  /**
68
- * The MCP tools the app itself declares via `app.tool(...)`, or none when the app cannot be loaded.
69
- *
70
- * Same reasoning as {@link backendFeatures}, on the hotter path: this ran on EVERY JSON-RPC message,
71
- * so an unloadable project failed `initialize` itself with a `-32603` and the session never opened.
72
- * An app's own tools are an extension of the built-in set, so their absence must not withdraw the
73
- * built-ins - a backend-only project still gets docs, examples, types, check, doctor, levels and test.
69
+ * The loader the server builds its tool and resource lists with. It never loads: every handler that
70
+ * reaches the app runs in a project subprocess (`./mcp-isolate.ts`), so one that tried here fails.
74
71
  */
75
- async function appDeclaredTools(loader) {
76
- try {
77
- return extractBackendTools((await loader()).backend);
78
- }
79
- catch {
80
- return [];
72
+ const noAppInServer = () => Promise.reject(new Error("[nifra] the MCP server does not load the app; project code runs in a subprocess"));
73
+ const isolatedToolsByDir = new Map();
74
+ /**
75
+ * The project's tools, each forwarded to a project subprocess unless it runs no project code. Built
76
+ * once per directory: `nifra_run`/`nifra_render` hold their warm worker in the tool, so a list rebuilt
77
+ * per message started a fresh worker for every `warm: true` call.
78
+ */
79
+ function isolatedProjectTools(cwd) {
80
+ let tools = isolatedToolsByDir.get(cwd);
81
+ if (tools === undefined) {
82
+ tools = isolateTools(cwd, projectTools(cwd, noAppInServer));
83
+ isolatedToolsByDir.set(cwd, tools);
81
84
  }
85
+ return tools;
86
+ }
87
+ /** The project's resources and prompts, with the ones the app declares. */
88
+ function appFeatures(cwd, surface) {
89
+ return {
90
+ resources: [
91
+ ...isolateResources(cwd, projectResources(cwd, noAppInServer)),
92
+ ...surface.resources,
93
+ ],
94
+ prompts: [...projectPrompts(), ...surface.prompts],
95
+ };
82
96
  }
83
97
  const ROOTS_REQUEST_ID = "nifra:roots/list";
98
+ const MAX_STDIO_MESSAGE_BYTES = 8 * 1024 * 1024;
99
+ const STDIO_ENCODER = new TextEncoder();
84
100
  async function createProjectContext(root) {
85
- const monorepo = await detectMonorepo(root);
101
+ const monorepo = await detectMonorepoIsolated(root);
86
102
  if (monorepo) {
87
- const appEntries = await loadMonorepoApps(root, monorepo);
103
+ const apps = (await loadMonorepoApps(root, monorepo)).map(({ name, cwd }) => ({ name, cwd, surface: createAppSurface(cwd) }));
88
104
  const allResources = [];
89
105
  const allPrompts = [];
90
- for (const { name, cwd: appCwd } of appEntries) {
91
- const loader = createCachedAppLoader(appCwd);
92
- const ns = namespaceForApp(name, [], await backendFeatures(loader, projectFeatures(appCwd, loader)));
106
+ for (const { name, cwd: appCwd, surface } of apps) {
107
+ const ns = namespaceForApp(name, [], appFeatures(appCwd, await surface()));
93
108
  allResources.push(...(ns.features.resources ?? []));
94
109
  allPrompts.push(...(ns.features.prompts ?? []));
95
110
  }
96
111
  return {
97
- monorepo,
112
+ apps,
98
113
  features: { resources: allResources, prompts: allPrompts },
99
- loadAppCached: createCachedAppLoader(root),
114
+ surface: createAppSurface(root),
100
115
  };
101
116
  }
102
- const loadAppCached = createCachedAppLoader(root);
103
- return {
104
- monorepo,
105
- features: await backendFeatures(loadAppCached, projectFeatures(root, loadAppCached)),
106
- loadAppCached,
107
- };
117
+ const surface = createAppSurface(root);
118
+ return { apps: undefined, features: appFeatures(root, await surface()), surface };
108
119
  }
109
120
  /**
110
121
  * Run the stdio MCP server: read newline-delimited JSON-RPC from stdin, write responses to stdout.
@@ -118,21 +129,45 @@ export async function runMcpServer(cwd, version, explicitDir) {
118
129
  throw new Error(`nifra mcp: directory not found: ${requested}`);
119
130
  }
120
131
  let rootState = await resolveRootState(requested, explicitDir !== undefined);
132
+ if (rootState.isProject) {
133
+ // Before anything reads stdin: a hand-off child inherits the descriptor and owns the session.
134
+ const exitCode = await delegateToProjectCli({
135
+ cwd,
136
+ root: rootState.root,
137
+ version,
138
+ args: explicitDir === undefined ? [] : [requested],
139
+ });
140
+ if (exitCode !== undefined) {
141
+ process.exitCode = exitCode;
142
+ return;
143
+ }
144
+ }
121
145
  let ctx = await createProjectContext(rootState.root);
122
146
  let drift = await detectToolingDrift(rootState.root, version);
123
147
  const serverInfo = { name: "nifra", version };
124
148
  const state = createMcpProtocolState();
125
149
  const send = (message) => {
126
- process.stdout.write(`${JSON.stringify(message)}\n`);
150
+ let encoded;
151
+ try {
152
+ encoded = JSON.stringify(message);
153
+ }
154
+ catch {
155
+ encoded = JSON.stringify(rpcError(responseIdOf(message), -32603, "MCP response is not serializable"));
156
+ }
157
+ if (STDIO_ENCODER.encode(encoded).byteLength > MAX_STDIO_MESSAGE_BYTES)
158
+ encoded = JSON.stringify(rpcError(responseIdOf(message), -32603, "MCP response exceeded the size limit"));
159
+ process.stdout.write(`${encoded}\n`);
127
160
  };
128
161
  let rootsSupported = false;
162
+ let rootsRequestPending = false;
129
163
  const requestRoots = () => {
130
- if (!rootsSupported)
164
+ if (!rootsSupported || rootsRequestPending)
131
165
  return;
166
+ rootsRequestPending = true;
132
167
  process.stdout.write(`${JSON.stringify({ jsonrpc: "2.0", id: ROOTS_REQUEST_ID, method: "roots/list" })}\n`);
133
168
  };
134
169
  const onRootsAnswer = async (message) => {
135
- const result = message.result;
170
+ const result = "result" in message ? message.result : undefined;
136
171
  // An error response (or a malformed one) carries no roots: keep the current state - the absence
137
172
  // of workspace data is not a mismatch, and never a reason to move the root.
138
173
  if (result === undefined)
@@ -147,35 +182,39 @@ export async function runMcpServer(cwd, version, explicitDir) {
147
182
  // Root updates are serialized against tool dispatch: a message read AFTER the client's roots answer
148
183
  // must see the adopted root, even though dispatches themselves run concurrently.
149
184
  let rootsUpdate = Promise.resolve();
150
- const dispatch = async (message) => {
151
- // The client's answer to OUR `roots/list` request - a response (id, no method), which the pure
152
- // dispatch would reject as an unknown method. Intercept it before handleRpc ever sees it.
153
- if (message.method === undefined && message.id === ROOTS_REQUEST_ID) {
154
- // Swallow failures: a bad answer must not poison the chain and 500 every later dispatch.
155
- rootsUpdate = onRootsAnswer(message).catch(() => { });
156
- await rootsUpdate;
185
+ const dispatchRootsAnswer = (message) => {
186
+ // The roots answer is a response to a request initiated by this server, not a client RPC request.
187
+ // Serialize adoption with normal dispatch so a following request cannot observe a half-updated root.
188
+ if (!rootsRequestPending)
157
189
  return;
158
- }
190
+ rootsRequestPending = false;
191
+ rootsUpdate = onRootsAnswer(message).catch(() => { });
192
+ };
193
+ const dispatch = async (message) => {
159
194
  await rootsUpdate;
160
195
  if (message.method === "initialize") {
161
196
  rootsSupported = clientSupportsRoots(message.params);
162
197
  }
163
198
  let activeTools;
164
- if (ctx.monorepo) {
165
- const appEntries = await loadMonorepoApps(rootState.root, ctx.monorepo);
199
+ if (ctx.apps) {
166
200
  const allTools = [];
167
- for (const { name, cwd: appCwd } of appEntries) {
168
- const loader = createCachedAppLoader(appCwd);
169
- const tools = [...projectTools(appCwd, loader), ...(await appDeclaredTools(loader))];
201
+ for (const { name, cwd: appCwd, surface } of ctx.apps) {
202
+ const tools = [
203
+ ...refuseVersionSensitive(isolatedProjectTools(appCwd), drift),
204
+ ...(await surface()).tools,
205
+ ];
170
206
  const ns = namespaceForApp(name, tools, { resources: [], prompts: [] });
171
207
  allTools.push(...ns.tools);
172
208
  }
173
- activeTools = [...docsTools(loadDocsCorpus, loadExamplesCorpus, loadTypesCorpus), ...allTools];
209
+ activeTools = [
210
+ ...refuseVersionSensitive(docsTools(loadDocsCorpus, loadExamplesCorpus, loadTypesCorpus), drift),
211
+ ...allTools,
212
+ ];
174
213
  }
175
214
  else {
176
215
  activeTools = [
177
- ...projectTools(rootState.root, ctx.loadAppCached),
178
- ...(await appDeclaredTools(ctx.loadAppCached)),
216
+ ...refuseVersionSensitive(isolatedProjectTools(rootState.root), drift),
217
+ ...(await ctx.surface()).tools,
179
218
  ];
180
219
  }
181
220
  const verdict = await rootVerdict(rootState);
@@ -189,6 +228,8 @@ export async function runMcpServer(cwd, version, explicitDir) {
189
228
  const response = await handleRpc(message, activeTools, serverInfo, features, {
190
229
  state,
191
230
  sendNotification: send,
231
+ // The stdio caller is the developer's own agent: a failure it cannot read it cannot fix.
232
+ exposeToolErrors: true,
192
233
  });
193
234
  if (response)
194
235
  send(response);
@@ -201,28 +242,70 @@ export async function runMcpServer(cwd, version, explicitDir) {
201
242
  };
202
243
  const decoder = new TextDecoder();
203
244
  let buffer = "";
245
+ let bufferBytes = 0;
246
+ let discardingOversized = false;
247
+ const processLine = (rawLine) => {
248
+ const line = rawLine.trim();
249
+ if (line === "")
250
+ return;
251
+ if (STDIO_ENCODER.encode(rawLine).byteLength > MAX_STDIO_MESSAGE_BYTES) {
252
+ send(rpcError(null, -32600, "MCP message exceeded the size limit"));
253
+ return;
254
+ }
255
+ let parsed;
256
+ try {
257
+ parsed = JSON.parse(line);
258
+ }
259
+ catch {
260
+ send(rpcError(null, -32700, "parse error"));
261
+ return;
262
+ }
263
+ if (isJsonRpcRequest(parsed)) {
264
+ void dispatch(parsed).catch((err) => {
265
+ const msg = err instanceof Error ? err.message : String(err);
266
+ send(rpcError(parsed.id ?? null, -32603, msg));
267
+ });
268
+ }
269
+ else if (isJsonRpcResponse(parsed) && parsed.id === ROOTS_REQUEST_ID) {
270
+ dispatchRootsAnswer(parsed);
271
+ }
272
+ else {
273
+ // Do not let null, arrays, scalars, responses for unknown ids, or malformed envelopes reach the
274
+ // dispatch shell. In particular, reading `.id` from a hostile `null` must never crash the loop.
275
+ send(rpcError(null, -32600, "Invalid Request"));
276
+ }
277
+ };
204
278
  for await (const chunk of Bun.stdin.stream()) {
205
- buffer += decoder.decode(chunk, { stream: true });
279
+ let text = decoder.decode(chunk, { stream: true });
280
+ if (discardingOversized) {
281
+ const newline = text.indexOf("\n");
282
+ if (newline === -1)
283
+ continue;
284
+ text = text.slice(newline + 1);
285
+ discardingOversized = false;
286
+ }
287
+ buffer += text;
288
+ bufferBytes += STDIO_ENCODER.encode(text).byteLength;
206
289
  let nl = buffer.indexOf("\n");
207
290
  while (nl !== -1) {
208
- const line = buffer.slice(0, nl).trim();
291
+ const line = buffer.slice(0, nl);
209
292
  buffer = buffer.slice(nl + 1);
293
+ bufferBytes = Math.max(0, bufferBytes - STDIO_ENCODER.encode(line).byteLength - 1);
210
294
  nl = buffer.indexOf("\n");
211
- if (line === "")
212
- continue;
213
- let message;
214
- try {
215
- message = JSON.parse(line);
216
- }
217
- catch {
218
- send(rpcError(null, -32700, "parse error"));
219
- continue;
220
- }
221
- void dispatch(message).catch((err) => {
222
- const msg = err instanceof Error ? err.message : String(err);
223
- send(rpcError(message.id ?? null, -32603, msg));
224
- });
295
+ processLine(line);
296
+ }
297
+ if (bufferBytes > MAX_STDIO_MESSAGE_BYTES) {
298
+ buffer = "";
299
+ bufferBytes = 0;
300
+ discardingOversized = true;
301
+ send(rpcError(null, -32600, "MCP message exceeded the size limit"));
225
302
  }
226
303
  }
227
304
  }
305
+ function responseIdOf(message) {
306
+ if (!("id" in message))
307
+ return null;
308
+ const id = message.id;
309
+ return id === null || typeof id === "string" || typeof id === "number" ? id : null;
310
+ }
228
311
  //# sourceMappingURL=mcp.js.map
package/dist/mcp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type * as TS from "typescript";
2
+ export interface LayoutMigrationIssue {
3
+ readonly file: string;
4
+ readonly reason: string;
5
+ }
6
+ export interface LayoutMigrationResult {
7
+ readonly ok: boolean;
8
+ readonly write: boolean;
9
+ /** Route files whose backend exports moved, and where they went. */
10
+ readonly splits: ReadonlyArray<{
11
+ readonly file: string;
12
+ readonly backend: string;
13
+ readonly moved: readonly string[];
14
+ }>;
15
+ /** Files that moved, app-relative. */
16
+ readonly moves: ReadonlyArray<{
17
+ readonly from: string;
18
+ readonly to: string;
19
+ }>;
20
+ /** Files whose imports were rewritten (and were not otherwise created). */
21
+ readonly rewritten: readonly string[];
22
+ readonly issues: readonly LayoutMigrationIssue[];
23
+ }
24
+ export interface LayoutMigrationOptions {
25
+ readonly write?: boolean;
26
+ /** Inject the TypeScript compiler (tests); defaults to the CLI's own. */
27
+ readonly typescript?: typeof TS;
28
+ }
29
+ export interface SplitResult {
30
+ readonly frontend: string;
31
+ /** `undefined` when the file exports nothing for the server. */
32
+ readonly backend: string | undefined;
33
+ readonly moved: readonly string[];
34
+ readonly issues: readonly string[];
35
+ }
36
+ /**
37
+ * Split one route module's source into its frontend and backend halves. `backendSpecifier` is how the
38
+ * frontend refers to the backend half in an `import type` (`./index.backend.ts`).
39
+ */
40
+ export declare function splitRouteSource(ts: typeof TS, source: string, fileName: string, backendSpecifier: string): SplitResult;
41
+ /** `_middleware.ts`'s default export, as the `middleware` export of a `_layout.backend.ts`. */
42
+ export declare function middlewareSource(ts: typeof TS, source: string, fileName: string): string;
43
+ export declare function migrateLayout(appRoot: string, options?: LayoutMigrationOptions): Promise<LayoutMigrationResult>;
44
+ //# sourceMappingURL=migrate-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-layout.d.ts","sourceRoot":"","sources":["../src/migrate-layout.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAA;AA8BrC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;KAClC,CAAC,CAAA;IACF,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7E,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAA;CACjD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,yEAAyE;IACzE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAA;CAChC;AAqCD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC;AAsKD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,OAAO,EAAE,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GACvB,WAAW,CAyKb;AAeD,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6BxF;AAwUD,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC,CA+PhC"}