nodefony 7.0.2 → 10.0.0-alpha.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 (903) hide show
  1. package/.ai/symbols.json +36135 -0
  2. package/LICENSE +544 -0
  3. package/README.md +316 -694
  4. package/bin/nodefony +2183 -85
  5. package/dist/client/Container.js +367 -0
  6. package/dist/client/Event.js +198 -0
  7. package/dist/client/Service.js +344 -0
  8. package/dist/client/Tools.js +162 -0
  9. package/dist/client/client/ClientKernel.js +276 -0
  10. package/dist/client/client/angular/index.js +352 -0
  11. package/dist/client/client/announce.js +212 -0
  12. package/dist/client/client/debugbar/DebugBar.js +1624 -0
  13. package/dist/client/client/debugbar/format.js +103 -0
  14. package/dist/client/client/debugbar/hmr.js +37 -0
  15. package/dist/client/client/debugbar/index.js +29 -0
  16. package/dist/client/client/debugbar/model.js +133 -0
  17. package/dist/client/client/debugbar/network.js +173 -0
  18. package/dist/client/client/debugbar/profile.js +114 -0
  19. package/dist/client/client/index.js +34 -0
  20. package/dist/client/client/react/index.js +268 -0
  21. package/dist/client/client/realtime/AdaptiveRate.js +240 -0
  22. package/dist/client/client/realtime/BrowserWsTransport.js +57 -0
  23. package/dist/client/client/realtime/RealtimeClient.js +898 -0
  24. package/dist/client/client/realtime/localEvents.js +56 -0
  25. package/dist/client/client/realtime/notice.js +125 -0
  26. package/dist/client/client/realtime/observe.js +280 -0
  27. package/dist/client/client/roles/index.js +3 -0
  28. package/dist/client/client/roles/registry.js +97 -0
  29. package/dist/client/client/roles/roles.js +91 -0
  30. package/dist/client/client/shim/events.js +88 -0
  31. package/dist/client/client/shim/util.js +20 -0
  32. package/dist/client/client/svelte/index.js +319 -0
  33. package/dist/client/client/syslog/context.js +122 -0
  34. package/dist/client/client/syslog/errors.js +49 -0
  35. package/dist/client/client/syslog/uplink.js +106 -0
  36. package/dist/client/client/vue/index.js +321 -0
  37. package/dist/client/colors.js +63 -0
  38. package/dist/client/debugbar.standalone.js +4274 -0
  39. package/dist/client/realtime/IRealtimeTransport.js +32 -0
  40. package/dist/client/realtime/JsonRpcPeer.js +251 -0
  41. package/dist/client/realtime/channelRate.js +39 -0
  42. package/dist/client/realtime/platformChannels.js +155 -0
  43. package/dist/client/syslog/Pdu.js +224 -0
  44. package/dist/client/syslog/Syslog.js +1159 -0
  45. package/dist/client/syslog/drivers/pduFlow.js +106 -0
  46. package/dist/client/syslog/drivers/pduProtocol.js +28 -0
  47. package/dist/client/syslog/logColor.js +80 -0
  48. package/dist/client/types/src/Container.d.ts +221 -0
  49. package/dist/client/types/src/Event.d.ts +171 -0
  50. package/dist/client/types/src/FileClass.d.ts +184 -0
  51. package/dist/client/types/src/Service.d.ts +165 -0
  52. package/dist/client/types/src/Tools.d.ts +116 -0
  53. package/dist/client/types/src/client/ClientKernel.d.ts +90 -0
  54. package/dist/client/types/src/client/IClientKernel.d.ts +195 -0
  55. package/dist/client/types/src/client/angular/index.d.ts +273 -0
  56. package/dist/client/types/src/client/announce.d.ts +74 -0
  57. package/dist/client/types/src/client/debugbar/DebugBar.d.ts +279 -0
  58. package/dist/client/types/src/client/debugbar/format.d.ts +48 -0
  59. package/dist/client/types/src/client/debugbar/hmr.d.ts +16 -0
  60. package/dist/client/types/src/client/debugbar/index.d.ts +30 -0
  61. package/dist/client/types/src/client/debugbar/model.d.ts +158 -0
  62. package/dist/client/types/src/client/debugbar/network.d.ts +55 -0
  63. package/dist/client/types/src/client/debugbar/profile.d.ts +99 -0
  64. package/dist/client/types/src/client/index.d.ts +47 -0
  65. package/dist/client/types/src/client/react/index.d.ts +207 -0
  66. package/dist/client/types/src/client/realtime/AdaptiveRate.d.ts +138 -0
  67. package/dist/client/types/src/client/realtime/BrowserWsTransport.d.ts +27 -0
  68. package/dist/client/types/src/client/realtime/RealtimeClient.d.ts +573 -0
  69. package/dist/client/types/src/client/realtime/localEvents.d.ts +53 -0
  70. package/dist/client/types/src/client/realtime/notice.d.ts +70 -0
  71. package/dist/client/types/src/client/realtime/observe.d.ts +284 -0
  72. package/dist/client/types/src/client/roles/index.d.ts +15 -0
  73. package/dist/client/types/src/client/roles/registry.d.ts +72 -0
  74. package/dist/client/types/src/client/roles/roles.d.ts +68 -0
  75. package/dist/client/types/src/client/shim/cli-color.d.ts +2 -0
  76. package/dist/client/types/src/client/shim/events.d.ts +39 -0
  77. package/dist/client/types/src/client/shim/util.d.ts +14 -0
  78. package/dist/client/types/src/client/svelte/index.d.ts +216 -0
  79. package/dist/client/types/src/client/syslog/context.d.ts +76 -0
  80. package/dist/client/types/src/client/syslog/errors.d.ts +46 -0
  81. package/dist/client/types/src/client/syslog/uplink.d.ts +89 -0
  82. package/dist/client/types/src/client/transport/websocket.d.ts +5 -0
  83. package/dist/client/types/src/client/vue/index.d.ts +234 -0
  84. package/dist/client/types/src/colors.d.ts +32 -0
  85. package/dist/client/types/src/config/infra.d.ts +171 -0
  86. package/dist/client/types/src/kernel/bootReport.d.ts +112 -0
  87. package/dist/client/types/src/kernel/readinessRegistry.d.ts +104 -0
  88. package/dist/client/types/src/realtime/IRealtimeSocket.d.ts +142 -0
  89. package/dist/client/types/src/realtime/IRealtimeTransport.d.ts +50 -0
  90. package/dist/client/types/src/realtime/JsonRpcPeer.d.ts +251 -0
  91. package/dist/client/types/src/realtime/RealtimeEventMap.d.ts +269 -0
  92. package/dist/client/types/src/realtime/channelRate.d.ts +55 -0
  93. package/dist/client/types/src/realtime/platformChannels.d.ts +147 -0
  94. package/dist/client/types/src/syslog/Pdu.d.ts +134 -0
  95. package/dist/client/types/src/syslog/Syslog.d.ts +482 -0
  96. package/dist/client/types/src/syslog/drivers/ILogDriver.d.ts +177 -0
  97. package/dist/client/types/src/syslog/drivers/pduFlow.d.ts +53 -0
  98. package/dist/client/types/src/syslog/drivers/pduProtocol.d.ts +20 -0
  99. package/dist/client/types/src/syslog/logColor.d.ts +59 -0
  100. package/dist/client/types/src/types/ICliKernel.d.ts +28 -0
  101. package/dist/client/types/src/types/ICommand.d.ts +14 -0
  102. package/dist/client/types/src/types/IContainer.d.ts +35 -0
  103. package/dist/client/types/src/types/IKernel.d.ts +138 -0
  104. package/dist/client/types/src/types/IMcpTool.d.ts +157 -0
  105. package/dist/client/types/src/types/IModule.d.ts +73 -0
  106. package/dist/client/types/src/types/IPage.d.ts +119 -0
  107. package/dist/client/types/src/types/IService.d.ts +62 -0
  108. package/dist/client/types/src/types/ISyslog.d.ts +58 -0
  109. package/dist/client/types/src/types/ITransport.d.ts +5 -0
  110. package/dist/client/types/src/types/globals.d.ts +47 -0
  111. package/dist/node/Cli.js +750 -0
  112. package/dist/node/Container.js +367 -0
  113. package/dist/node/Error.js +309 -0
  114. package/dist/node/Event.js +198 -0
  115. package/dist/node/FileClass.js +308 -0
  116. package/dist/node/Nodefony.js +78 -0
  117. package/dist/node/Service.js +344 -0
  118. package/dist/node/Tools.js +205 -0
  119. package/dist/node/bin/resolveLocalCli.js +10 -0
  120. package/dist/node/bundler/index.js +103 -0
  121. package/dist/node/cli/agentTargets.js +461 -0
  122. package/dist/node/cli/aiMcp.js +553 -0
  123. package/dist/node/cli/aiMcpReport.js +129 -0
  124. package/dist/node/cli/aiSync.js +323 -0
  125. package/dist/node/cli/aiSyncReport.js +142 -0
  126. package/dist/node/cli/card.js +186 -0
  127. package/dist/node/cli/cardReport.js +110 -0
  128. package/dist/node/cli/completion.js +415 -0
  129. package/dist/node/cli/create.js +805 -0
  130. package/dist/node/cli/env.js +332 -0
  131. package/dist/node/cli/envReport.js +159 -0
  132. package/dist/node/cli/execPortable.js +60 -0
  133. package/dist/node/cli/gitHooks.js +191 -0
  134. package/dist/node/cli/gitHooksReport.js +119 -0
  135. package/dist/node/cli/globalFlags.js +67 -0
  136. package/dist/node/cli/helpReport.js +288 -0
  137. package/dist/node/cli/manPage.js +165 -0
  138. package/dist/node/cli/nodefonyBin.js +61 -0
  139. package/dist/node/cli/outdated.js +144 -0
  140. package/dist/node/cli/progress.js +555 -0
  141. package/dist/node/cli/projectRoot.js +32 -0
  142. package/dist/node/cli/promptPassword.js +44 -0
  143. package/dist/node/cli/prompts.js +86 -0
  144. package/dist/node/cli/scaffold/destination.js +92 -0
  145. package/dist/node/cli/scaffold/engine.js +2156 -0
  146. package/dist/node/cli/scaffold/entityFields.js +589 -0
  147. package/dist/node/cli/scaffold/format.js +243 -0
  148. package/dist/node/cli/scaffold/interactive.js +124 -0
  149. package/dist/node/cli/scaffold/moduleLayout.js +38 -0
  150. package/dist/node/cli/scaffold/reservedEntities.js +74 -0
  151. package/dist/node/cli/scaffold/spec.js +704 -0
  152. package/dist/node/cli/scaffold/steps.js +40 -0
  153. package/dist/node/cli/scaffold/userContractSource.js +133 -0
  154. package/dist/node/cli/scaffold/versions.js +57 -0
  155. package/dist/node/cli/scaffold/writer.js +172 -0
  156. package/dist/node/cli/startMenu.js +496 -0
  157. package/dist/node/cli/symbols.js +205 -0
  158. package/dist/node/cli/sysexits.js +34 -0
  159. package/dist/node/cli/tableReport.js +184 -0
  160. package/dist/node/cli/usageReport.js +144 -0
  161. package/dist/node/colors.js +63 -0
  162. package/dist/node/command/Builder.js +153 -0
  163. package/dist/node/command/Command.js +348 -0
  164. package/dist/node/config/configProvenance.js +101 -0
  165. package/dist/node/config/defaults.js +39 -0
  166. package/dist/node/config/defineConfig.js +129 -0
  167. package/dist/node/config/defineEnv.js +264 -0
  168. package/dist/node/config/envExample.js +41 -0
  169. package/dist/node/config/envOverride.js +423 -0
  170. package/dist/node/config/infra.js +163 -0
  171. package/dist/node/config/reactivity.js +23 -0
  172. package/dist/node/config/reservedEnv.js +118 -0
  173. package/dist/node/config/schema.js +134 -0
  174. package/dist/node/config/use.js +24 -0
  175. package/dist/node/finder/File.js +49 -0
  176. package/dist/node/finder/FileResult.js +86 -0
  177. package/dist/node/finder/Finder.js +201 -0
  178. package/dist/node/finder/Result.js +45 -0
  179. package/dist/node/index.js +121 -0
  180. package/dist/node/kernel/BootConfigurationError.js +54 -0
  181. package/dist/node/kernel/CliKernel.js +630 -0
  182. package/dist/node/kernel/Kernel.js +2198 -0
  183. package/dist/node/kernel/Module.js +453 -0
  184. package/dist/node/kernel/adminPlane/adminCaller.js +98 -0
  185. package/dist/node/kernel/adminPlane/adminRbac.js +51 -0
  186. package/dist/node/kernel/adminPlane/catalog.js +158 -0
  187. package/dist/node/kernel/adminPlane/executeAdmin.js +78 -0
  188. package/dist/node/kernel/checks/deep.js +335 -0
  189. package/dist/node/kernel/checks/freshness.js +139 -0
  190. package/dist/node/kernel/checks/gating.js +231 -0
  191. package/dist/node/kernel/checks/guards.js +232 -0
  192. package/dist/node/kernel/checks/lastBoot.js +136 -0
  193. package/dist/node/kernel/checks/live.js +330 -0
  194. package/dist/node/kernel/checks/packageDeps.js +292 -0
  195. package/dist/node/kernel/checks/readiness.js +153 -0
  196. package/dist/node/kernel/checks/renderReport.js +780 -0
  197. package/dist/node/kernel/checks/report.js +421 -0
  198. package/dist/node/kernel/checks/runDoctor.js +731 -0
  199. package/dist/node/kernel/checks/surface.js +364 -0
  200. package/dist/node/kernel/checks/walk.js +100 -0
  201. package/dist/node/kernel/checks/wiring.js +450 -0
  202. package/dist/node/kernel/commands/AiMcpCommand.js +65 -0
  203. package/dist/node/kernel/commands/AiSyncCommand.js +48 -0
  204. package/dist/node/kernel/commands/BuildCommand.js +49 -0
  205. package/dist/node/kernel/commands/CardCommand.js +50 -0
  206. package/dist/node/kernel/commands/ClusterCommand.js +58 -0
  207. package/dist/node/kernel/commands/CompletionCommand.js +31 -0
  208. package/dist/node/kernel/commands/CreateCommand.js +45 -0
  209. package/dist/node/kernel/commands/DevCommand.js +99 -0
  210. package/dist/node/kernel/commands/DoctorCommand.js +115 -0
  211. package/dist/node/kernel/commands/EnvCommand.js +52 -0
  212. package/dist/node/kernel/commands/GitHooksCommand.js +47 -0
  213. package/dist/node/kernel/commands/InspectCommand.js +153 -0
  214. package/dist/node/kernel/commands/InstallCommand.js +20 -0
  215. package/dist/node/kernel/commands/MenuCommand.js +261 -0
  216. package/dist/node/kernel/commands/OutdatedCommand.js +164 -0
  217. package/dist/node/kernel/commands/ProdCommand.js +60 -0
  218. package/dist/node/kernel/commands/StatusCommand.js +30 -0
  219. package/dist/node/kernel/commands/StopCommand.js +35 -0
  220. package/dist/node/kernel/commands/SymbolsCommand.js +45 -0
  221. package/dist/node/kernel/commands/runtimeLauncher.js +95 -0
  222. package/dist/node/kernel/decorators/kernelDecorator.js +110 -0
  223. package/dist/node/kernel/injector/injector.js +137 -0
  224. package/dist/node/kernel/injector/serviceOrder.js +106 -0
  225. package/dist/node/kernel/inspect/adminSubjects.js +194 -0
  226. package/dist/node/kernel/inspect/docOutline.js +86 -0
  227. package/dist/node/kernel/lifecycleTags.js +76 -0
  228. package/dist/node/kernel/moduleConfig.js +75 -0
  229. package/dist/node/kernel/moduleGating.js +68 -0
  230. package/dist/node/kernel/readinessRegistry.js +98 -0
  231. package/dist/node/kernel/resolveModuleEntry.js +61 -0
  232. package/dist/node/mcp/caller.js +40 -0
  233. package/dist/node/mcp/guard.js +51 -0
  234. package/dist/node/mcp/protocol.js +157 -0
  235. package/dist/node/mcp/server.js +216 -0
  236. package/dist/node/mcp/tools.js +861 -0
  237. package/dist/node/oauth/authorizationServer.js +221 -0
  238. package/dist/node/oauth/protectedResource.js +293 -0
  239. package/dist/node/package.js +4 -0
  240. package/dist/node/realtime/IRealtimeTransport.js +32 -0
  241. package/dist/node/realtime/JsonRpcPeer.js +251 -0
  242. package/dist/node/realtime/RealtimeEventMap.js +15 -0
  243. package/dist/node/realtime/channelRate.js +39 -0
  244. package/dist/node/realtime/platformChannels.js +155 -0
  245. package/dist/node/runtime/GcScheduler.js +92 -0
  246. package/dist/node/runtime/RequestContext.js +76 -0
  247. package/dist/node/runtime/bearer.js +84 -0
  248. package/dist/node/runtime/engineEnvironment.js +79 -0
  249. package/dist/node/runtime/loadEnv.js +105 -0
  250. package/dist/node/runtime/pageFacets.js +85 -0
  251. package/dist/node/runtime/pageFilters.js +103 -0
  252. package/dist/node/runtime/pageGuard.js +84 -0
  253. package/dist/node/runtime/pageQuery.js +160 -0
  254. package/dist/node/runtime/pageSort.js +114 -0
  255. package/dist/node/runtime/redact.js +43 -0
  256. package/dist/node/runtime/withTimeout.js +71 -0
  257. package/dist/node/service/cluster/ClusterManager.js +202 -0
  258. package/dist/node/service/cluster/ClusterProbeAggregator.js +120 -0
  259. package/dist/node/service/cluster/ClusterRelay.js +74 -0
  260. package/dist/node/service/cluster/clusterMaster.js +65 -0
  261. package/dist/node/service/cluster/clusterMessage.js +70 -0
  262. package/dist/node/service/cluster/cpuQuota.js +59 -0
  263. package/dist/node/service/cluster/instanceProbe.js +52 -0
  264. package/dist/node/service/cluster/podEnvironment.js +48 -0
  265. package/dist/node/service/cluster/processProbe.js +70 -0
  266. package/dist/node/service/cluster/richProcessProbe.js +115 -0
  267. package/dist/node/service/cluster/topology.js +71 -0
  268. package/dist/node/service/dev/BootReporter.js +490 -0
  269. package/dist/node/service/dev/DevSupervisor.js +1004 -0
  270. package/dist/node/service/dev/bootVerdict.js +158 -0
  271. package/dist/node/service/dev/detachedStart.js +372 -0
  272. package/dist/node/service/dev/devProcess.js +1137 -0
  273. package/dist/node/service/dev/devProjects.js +138 -0
  274. package/dist/node/service/dev/devStatusReport.js +395 -0
  275. package/dist/node/service/dev/devStop.js +263 -0
  276. package/dist/node/service/fetchService.js +35 -0
  277. package/dist/node/service/gitService.js +62 -0
  278. package/dist/node/syslog/Pdu.js +224 -0
  279. package/dist/node/syslog/Syslog.js +1159 -0
  280. package/dist/node/syslog/drivers/ClusterFileLogDriver.js +114 -0
  281. package/dist/node/syslog/drivers/FileLogDriver.js +127 -0
  282. package/dist/node/syslog/drivers/ILogDriver.js +26 -0
  283. package/dist/node/syslog/drivers/LokiLogDriver.js +144 -0
  284. package/dist/node/syslog/drivers/MemoryLogDriver.js +33 -0
  285. package/dist/node/syslog/drivers/OpenSearchLogDriver.js +159 -0
  286. package/dist/node/syslog/drivers/builtinLogDrivers.js +114 -0
  287. package/dist/node/syslog/drivers/filterPdus.js +71 -0
  288. package/dist/node/syslog/drivers/logDriverRegistry.js +83 -0
  289. package/dist/node/syslog/drivers/opensearchShared.js +17 -0
  290. package/dist/node/syslog/drivers/pduFlow.js +106 -0
  291. package/dist/node/syslog/drivers/pduProtocol.js +28 -0
  292. package/dist/node/syslog/httpFetch.js +43 -0
  293. package/dist/node/syslog/logColor.js +80 -0
  294. package/dist/node/syslog/sinks/FileSink.js +142 -0
  295. package/dist/node/syslog/transports/BatchingHttpTransport.js +98 -0
  296. package/dist/node/syslog/transports/ConsoleTransport.js +14 -0
  297. package/dist/node/syslog/transports/FileTransport.js +17 -0
  298. package/dist/node/syslog/transports/HttpTransport.js +44 -0
  299. package/dist/node/syslog/transports/LokiTransport.js +80 -0
  300. package/dist/node/syslog/transports/OpenSearchTransport.js +53 -0
  301. package/dist/node/syslog/transports/SyslogTransport.js +13 -0
  302. package/dist/node/syslog/transports/index.js +8 -0
  303. package/dist/node/testing/index.js +190 -0
  304. package/dist/types/Cli.d.ts +177 -0
  305. package/dist/types/Container.d.ts +221 -0
  306. package/dist/types/Error.d.ts +162 -0
  307. package/dist/types/Event.d.ts +171 -0
  308. package/dist/types/FileClass.d.ts +184 -0
  309. package/dist/types/Nodefony.d.ts +66 -0
  310. package/dist/types/Service.d.ts +165 -0
  311. package/dist/types/Tools.d.ts +116 -0
  312. package/dist/types/bin/resolveLocalCli.d.ts +49 -0
  313. package/dist/types/bundler/index.d.ts +66 -0
  314. package/dist/types/cli/agentTargets.d.ts +378 -0
  315. package/dist/types/cli/aiMcp.d.ts +239 -0
  316. package/dist/types/cli/aiMcpReport.d.ts +113 -0
  317. package/dist/types/cli/aiSync.d.ts +68 -0
  318. package/dist/types/cli/aiSyncReport.d.ts +149 -0
  319. package/dist/types/cli/card.d.ts +49 -0
  320. package/dist/types/cli/cardReport.d.ts +127 -0
  321. package/dist/types/cli/completion.d.ts +154 -0
  322. package/dist/types/cli/create.d.ts +177 -0
  323. package/dist/types/cli/env.d.ts +103 -0
  324. package/dist/types/cli/envReport.d.ts +153 -0
  325. package/dist/types/cli/execPortable.d.ts +54 -0
  326. package/dist/types/cli/gitHooks.d.ts +48 -0
  327. package/dist/types/cli/gitHooksReport.d.ts +101 -0
  328. package/dist/types/cli/globalFlags.d.ts +48 -0
  329. package/dist/types/cli/helpReport.d.ts +110 -0
  330. package/dist/types/cli/manPage.d.ts +21 -0
  331. package/dist/types/cli/nodefonyBin.d.ts +45 -0
  332. package/dist/types/cli/outdated.d.ts +119 -0
  333. package/dist/types/cli/progress.d.ts +349 -0
  334. package/dist/types/cli/projectRoot.d.ts +19 -0
  335. package/dist/types/cli/promptPassword.d.ts +22 -0
  336. package/dist/types/cli/prompts.d.ts +102 -0
  337. package/dist/types/cli/scaffold/destination.d.ts +70 -0
  338. package/dist/types/cli/scaffold/engine.d.ts +545 -0
  339. package/dist/types/cli/scaffold/entityFields.d.ts +238 -0
  340. package/dist/types/cli/scaffold/format.d.ts +78 -0
  341. package/dist/types/cli/scaffold/interactive.d.ts +11 -0
  342. package/dist/types/cli/scaffold/moduleLayout.d.ts +69 -0
  343. package/dist/types/cli/scaffold/reservedEntities.d.ts +49 -0
  344. package/dist/types/cli/scaffold/spec.d.ts +159 -0
  345. package/dist/types/cli/scaffold/steps.d.ts +24 -0
  346. package/dist/types/cli/scaffold/userContractSource.d.ts +86 -0
  347. package/dist/types/cli/scaffold/versions.d.ts +14 -0
  348. package/dist/types/cli/scaffold/writer.d.ts +100 -0
  349. package/dist/types/cli/startMenu.d.ts +195 -0
  350. package/dist/types/cli/symbols.d.ts +84 -0
  351. package/dist/types/cli/sysexits.d.ts +31 -0
  352. package/dist/types/cli/tableReport.d.ts +44 -0
  353. package/dist/types/cli/usageReport.d.ts +108 -0
  354. package/dist/types/client/ClientKernel.d.ts +90 -0
  355. package/dist/types/client/IClientKernel.d.ts +195 -0
  356. package/dist/types/client/angular/index.d.ts +273 -0
  357. package/dist/types/client/announce.d.ts +74 -0
  358. package/dist/types/client/debugbar/DebugBar.d.ts +279 -0
  359. package/dist/types/client/debugbar/format.d.ts +48 -0
  360. package/dist/types/client/debugbar/hmr.d.ts +16 -0
  361. package/dist/types/client/debugbar/index.d.ts +30 -0
  362. package/dist/types/client/debugbar/model.d.ts +158 -0
  363. package/dist/types/client/debugbar/network.d.ts +55 -0
  364. package/dist/types/client/debugbar/profile.d.ts +99 -0
  365. package/dist/types/client/index.d.ts +47 -0
  366. package/dist/types/client/react/index.d.ts +207 -0
  367. package/dist/types/client/realtime/AdaptiveRate.d.ts +138 -0
  368. package/dist/types/client/realtime/BrowserWsTransport.d.ts +27 -0
  369. package/dist/types/client/realtime/RealtimeClient.d.ts +573 -0
  370. package/dist/types/client/realtime/localEvents.d.ts +53 -0
  371. package/dist/types/client/realtime/notice.d.ts +70 -0
  372. package/dist/types/client/realtime/observe.d.ts +284 -0
  373. package/dist/types/client/roles/index.d.ts +15 -0
  374. package/dist/types/client/roles/registry.d.ts +72 -0
  375. package/dist/types/client/roles/roles.d.ts +68 -0
  376. package/dist/types/client/shim/cli-color.d.ts +2 -0
  377. package/dist/types/client/shim/events.d.ts +39 -0
  378. package/dist/types/client/shim/util.d.ts +14 -0
  379. package/dist/types/client/svelte/index.d.ts +216 -0
  380. package/dist/types/client/syslog/context.d.ts +76 -0
  381. package/dist/types/client/syslog/errors.d.ts +46 -0
  382. package/dist/types/client/syslog/uplink.d.ts +89 -0
  383. package/dist/types/client/transport/websocket.d.ts +5 -0
  384. package/dist/types/client/vue/index.d.ts +234 -0
  385. package/dist/types/colors.d.ts +32 -0
  386. package/dist/types/command/Builder.d.ts +47 -0
  387. package/dist/types/command/Command.d.ts +268 -0
  388. package/dist/types/config/configMeta.d.ts +53 -0
  389. package/dist/types/config/configProvenance.d.ts +58 -0
  390. package/dist/types/config/defaults.d.ts +33 -0
  391. package/dist/types/config/defineConfig.d.ts +70 -0
  392. package/dist/types/config/defineEnv.d.ts +170 -0
  393. package/dist/types/config/envExample.d.ts +23 -0
  394. package/dist/types/config/envOverride.d.ts +236 -0
  395. package/dist/types/config/index.d.ts +23 -0
  396. package/dist/types/config/infra.d.ts +171 -0
  397. package/dist/types/config/reactivity.d.ts +36 -0
  398. package/dist/types/config/reservedEnv.d.ts +145 -0
  399. package/dist/types/config/schema.d.ts +113 -0
  400. package/dist/types/config/types.d.ts +374 -0
  401. package/dist/types/config/use.d.ts +80 -0
  402. package/dist/types/finder/File.d.ts +26 -0
  403. package/dist/types/finder/FileResult.d.ts +14 -0
  404. package/dist/types/finder/Finder.d.ts +51 -0
  405. package/dist/types/finder/Result.d.ts +10 -0
  406. package/dist/types/index.d.ts +205 -0
  407. package/dist/types/kernel/BootConfigurationError.d.ts +50 -0
  408. package/dist/types/kernel/CliKernel.d.ts +289 -0
  409. package/dist/types/kernel/Kernel.d.ts +1255 -0
  410. package/dist/types/kernel/Module.d.ts +326 -0
  411. package/dist/types/kernel/adminPlane/adminCaller.d.ts +105 -0
  412. package/dist/types/kernel/adminPlane/adminRbac.d.ts +44 -0
  413. package/dist/types/kernel/adminPlane/catalog.d.ts +122 -0
  414. package/dist/types/kernel/adminPlane/executeAdmin.d.ts +99 -0
  415. package/dist/types/kernel/bootReport.d.ts +112 -0
  416. package/dist/types/kernel/checks/deep.d.ts +122 -0
  417. package/dist/types/kernel/checks/freshness.d.ts +49 -0
  418. package/dist/types/kernel/checks/gating.d.ts +134 -0
  419. package/dist/types/kernel/checks/guards.d.ts +57 -0
  420. package/dist/types/kernel/checks/lastBoot.d.ts +189 -0
  421. package/dist/types/kernel/checks/live.d.ts +110 -0
  422. package/dist/types/kernel/checks/packageDeps.d.ts +44 -0
  423. package/dist/types/kernel/checks/readiness.d.ts +97 -0
  424. package/dist/types/kernel/checks/renderReport.d.ts +107 -0
  425. package/dist/types/kernel/checks/report.d.ts +414 -0
  426. package/dist/types/kernel/checks/runDoctor.d.ts +361 -0
  427. package/dist/types/kernel/checks/surface.d.ts +148 -0
  428. package/dist/types/kernel/checks/walk.d.ts +45 -0
  429. package/dist/types/kernel/checks/wiring.d.ts +54 -0
  430. package/dist/types/kernel/commands/AiMcpCommand.d.ts +39 -0
  431. package/dist/types/kernel/commands/AiSyncCommand.d.ts +28 -0
  432. package/dist/types/kernel/commands/BuildCommand.d.ts +13 -0
  433. package/dist/types/kernel/commands/CardCommand.d.ts +34 -0
  434. package/dist/types/kernel/commands/ClusterCommand.d.ts +29 -0
  435. package/dist/types/kernel/commands/CompletionCommand.d.ts +17 -0
  436. package/dist/types/kernel/commands/CreateCommand.d.ts +16 -0
  437. package/dist/types/kernel/commands/DevCommand.d.ts +40 -0
  438. package/dist/types/kernel/commands/DoctorCommand.d.ts +55 -0
  439. package/dist/types/kernel/commands/EnvCommand.d.ts +35 -0
  440. package/dist/types/kernel/commands/GitHooksCommand.d.ts +27 -0
  441. package/dist/types/kernel/commands/InspectCommand.d.ts +59 -0
  442. package/dist/types/kernel/commands/InstallCommand.d.ts +7 -0
  443. package/dist/types/kernel/commands/MenuCommand.d.ts +58 -0
  444. package/dist/types/kernel/commands/OutdatedCommand.d.ts +47 -0
  445. package/dist/types/kernel/commands/ProdCommand.d.ts +29 -0
  446. package/dist/types/kernel/commands/StatusCommand.d.ts +17 -0
  447. package/dist/types/kernel/commands/StopCommand.d.ts +17 -0
  448. package/dist/types/kernel/commands/SymbolsCommand.d.ts +29 -0
  449. package/dist/types/kernel/commands/runtimeLauncher.d.ts +76 -0
  450. package/dist/types/kernel/decorators/kernelDecorator.d.ts +76 -0
  451. package/dist/types/kernel/injector/injector.d.ts +47 -0
  452. package/dist/types/kernel/injector/serviceOrder.d.ts +29 -0
  453. package/dist/types/kernel/inspect/adminSubjects.d.ts +169 -0
  454. package/dist/types/kernel/inspect/docOutline.d.ts +53 -0
  455. package/dist/types/kernel/lifecycleTags.d.ts +79 -0
  456. package/dist/types/kernel/moduleConfig.d.ts +35 -0
  457. package/dist/types/kernel/moduleGating.d.ts +78 -0
  458. package/dist/types/kernel/readinessRegistry.d.ts +104 -0
  459. package/dist/types/kernel/resolveModuleEntry.d.ts +46 -0
  460. package/dist/types/mcp/caller.d.ts +55 -0
  461. package/dist/types/mcp/guard.d.ts +66 -0
  462. package/dist/types/mcp/protocol.d.ts +163 -0
  463. package/dist/types/mcp/server.d.ts +70 -0
  464. package/dist/types/mcp/tools.d.ts +209 -0
  465. package/dist/types/oauth/authorizationServer.d.ts +204 -0
  466. package/dist/types/oauth/protectedResource.d.ts +339 -0
  467. package/dist/types/realtime/IRealtimeSocket.d.ts +142 -0
  468. package/dist/types/realtime/IRealtimeTransport.d.ts +50 -0
  469. package/dist/types/realtime/JsonRpcPeer.d.ts +251 -0
  470. package/dist/types/realtime/RealtimeEventMap.d.ts +269 -0
  471. package/dist/types/realtime/channelRate.d.ts +55 -0
  472. package/dist/types/realtime/platformChannels.d.ts +147 -0
  473. package/dist/types/runtime/GcScheduler.d.ts +96 -0
  474. package/dist/types/runtime/RequestContext.d.ts +152 -0
  475. package/dist/types/runtime/bearer.d.ts +88 -0
  476. package/dist/types/runtime/engineEnvironment.d.ts +115 -0
  477. package/dist/types/runtime/loadEnv.d.ts +86 -0
  478. package/dist/types/runtime/pageFacets.d.ts +104 -0
  479. package/dist/types/runtime/pageFilters.d.ts +139 -0
  480. package/dist/types/runtime/pageGuard.d.ts +78 -0
  481. package/dist/types/runtime/pageQuery.d.ts +138 -0
  482. package/dist/types/runtime/pageSort.d.ts +86 -0
  483. package/dist/types/runtime/redact.d.ts +27 -0
  484. package/dist/types/runtime/withTimeout.d.ts +51 -0
  485. package/dist/types/service/cluster/ClusterManager.d.ts +112 -0
  486. package/dist/types/service/cluster/ClusterProbeAggregator.d.ts +68 -0
  487. package/dist/types/service/cluster/ClusterRelay.d.ts +57 -0
  488. package/dist/types/service/cluster/clusterMaster.d.ts +40 -0
  489. package/dist/types/service/cluster/clusterMessage.d.ts +94 -0
  490. package/dist/types/service/cluster/cpuQuota.d.ts +37 -0
  491. package/dist/types/service/cluster/instanceProbe.d.ts +82 -0
  492. package/dist/types/service/cluster/podEnvironment.d.ts +35 -0
  493. package/dist/types/service/cluster/processProbe.d.ts +53 -0
  494. package/dist/types/service/cluster/richProcessProbe.d.ts +77 -0
  495. package/dist/types/service/cluster/topology.d.ts +64 -0
  496. package/dist/types/service/dev/BootReporter.d.ts +67 -0
  497. package/dist/types/service/dev/DevSupervisor.d.ts +117 -0
  498. package/dist/types/service/dev/bootVerdict.d.ts +99 -0
  499. package/dist/types/service/dev/detachedStart.d.ts +164 -0
  500. package/dist/types/service/dev/devProcess.d.ts +638 -0
  501. package/dist/types/service/dev/devProjects.d.ts +121 -0
  502. package/dist/types/service/dev/devStatusReport.d.ts +141 -0
  503. package/dist/types/service/dev/devStop.d.ts +57 -0
  504. package/dist/types/service/fetchService.d.ts +29 -0
  505. package/dist/types/service/gitService.d.ts +24 -0
  506. package/dist/types/syslog/Pdu.d.ts +134 -0
  507. package/dist/types/syslog/Syslog.d.ts +482 -0
  508. package/dist/types/syslog/drivers/ClusterFileLogDriver.d.ts +40 -0
  509. package/dist/types/syslog/drivers/FileLogDriver.d.ts +55 -0
  510. package/dist/types/syslog/drivers/ILogDriver.d.ts +177 -0
  511. package/dist/types/syslog/drivers/LokiLogDriver.d.ts +44 -0
  512. package/dist/types/syslog/drivers/MemoryLogDriver.d.ts +20 -0
  513. package/dist/types/syslog/drivers/OpenSearchLogDriver.d.ts +40 -0
  514. package/dist/types/syslog/drivers/builtinLogDrivers.d.ts +43 -0
  515. package/dist/types/syslog/drivers/filterPdus.d.ts +21 -0
  516. package/dist/types/syslog/drivers/logDriverRegistry.d.ts +100 -0
  517. package/dist/types/syslog/drivers/opensearchShared.d.ts +11 -0
  518. package/dist/types/syslog/drivers/pduFlow.d.ts +53 -0
  519. package/dist/types/syslog/drivers/pduProtocol.d.ts +20 -0
  520. package/dist/types/syslog/httpFetch.d.ts +48 -0
  521. package/dist/types/syslog/logColor.d.ts +59 -0
  522. package/dist/types/syslog/sinks/FileSink.d.ts +78 -0
  523. package/dist/types/syslog/transports/BatchingHttpTransport.d.ts +59 -0
  524. package/dist/types/syslog/transports/ConsoleTransport.d.ts +8 -0
  525. package/dist/types/syslog/transports/FileTransport.d.ts +13 -0
  526. package/dist/types/syslog/transports/HttpTransport.d.ts +15 -0
  527. package/dist/types/syslog/transports/LokiTransport.d.ts +45 -0
  528. package/dist/types/syslog/transports/OpenSearchTransport.d.ts +40 -0
  529. package/dist/types/syslog/transports/SyslogTransport.d.ts +9 -0
  530. package/dist/types/syslog/transports/index.d.ts +12 -0
  531. package/dist/types/testing/index.d.ts +197 -0
  532. package/dist/types/types/IAdminApi.d.ts +246 -0
  533. package/dist/types/types/ICliKernel.d.ts +28 -0
  534. package/dist/types/types/ICommand.d.ts +14 -0
  535. package/dist/types/types/IContainer.d.ts +35 -0
  536. package/dist/types/types/IIdempotencyStore.d.ts +159 -0
  537. package/dist/types/types/IKernel.d.ts +138 -0
  538. package/dist/types/types/IMcpTool.d.ts +157 -0
  539. package/dist/types/types/IModule.d.ts +73 -0
  540. package/dist/types/types/IModuleManifest.d.ts +49 -0
  541. package/dist/types/types/IPage.d.ts +119 -0
  542. package/dist/types/types/IService.d.ts +62 -0
  543. package/dist/types/types/ISyslog.d.ts +58 -0
  544. package/dist/types/types/ITransport.d.ts +5 -0
  545. package/dist/types/types/globals.d.ts +47 -0
  546. package/docs/angular-services.md +318 -0
  547. package/docs/catalogue.md +184 -0
  548. package/docs/cli.md +369 -0
  549. package/docs/client.md +616 -0
  550. package/docs/debugbar.md +218 -0
  551. package/docs/environnement.md +308 -0
  552. package/docs/index.md +388 -0
  553. package/docs/kernel.md +670 -0
  554. package/docs/progression.md +228 -0
  555. package/docs/react-hooks.md +686 -0
  556. package/docs/request-context.md +507 -0
  557. package/docs/service.md +590 -0
  558. package/docs/svelte-reactivite.md +293 -0
  559. package/docs/syslog.md +848 -0
  560. package/docs/testing.md +203 -0
  561. package/docs/vue-composables.md +255 -0
  562. package/man/nodefony.1 +152 -0
  563. package/package.json +163 -83
  564. package/templates/app/agents/AGENTS.md.tpl +967 -0
  565. package/templates/app/agents/POINTEUR.md.tpl +12 -0
  566. package/templates/app/base/Dockerfile.tpl +104 -0
  567. package/templates/app/base/README.md.tpl +314 -0
  568. package/templates/app/base/dockerignore.tpl +28 -0
  569. package/templates/app/base/env.ts.tpl +130 -0
  570. package/templates/app/base/gitattributes.tpl +28 -0
  571. package/templates/app/base/github/workflows/ci.yml.tpl +91 -0
  572. package/templates/app/base/gitignore.tpl +46 -0
  573. package/templates/app/base/gitlab-ci.yml.tpl +42 -0
  574. package/templates/app/base/index.ts.tpl +69 -0
  575. package/templates/app/base/nodefony.config.ts.tpl +342 -0
  576. package/templates/app/base/oxlintrc.json.tpl +127 -0
  577. package/templates/app/base/package.json.tpl +75 -0
  578. package/templates/app/base/prettierignore.tpl +24 -0
  579. package/templates/app/base/prettierrc.json.tpl +12 -0
  580. package/templates/app/base/rolldown.config.ts.tpl +8 -0
  581. package/templates/app/base/tests/config.test.ts.tpl +29 -0
  582. package/templates/app/base/tests/e2e.setup.ts.tpl +181 -0
  583. package/templates/app/base/tests/e2e.test.ts.tpl +105 -0
  584. package/templates/app/base/tests/migrations.e2e.test.ts.tpl +579 -0
  585. package/templates/app/base/tsconfig.json.tpl +47 -0
  586. package/templates/app/base/vitest.config.ts.tpl +88 -0
  587. package/templates/app/base/vitest.e2e.config.ts.tpl +39 -0
  588. package/templates/app/complete/compose.yaml.tpl +328 -0
  589. package/templates/app/complete/deploy/migrate-job.yaml.tpl +100 -0
  590. package/templates/app/complete/docker/db/init-nodefony-e2e.sql.tpl +30 -0
  591. package/templates/app/complete/docker/grafana/provisioning/datasources/loki.yaml.tpl +15 -0
  592. package/templates/app/complete/env.local.tpl +11 -0
  593. package/templates/app/complete/env.tpl +53 -0
  594. package/templates/app/complete/nodefony/entity/User.ts.tpl +69 -0
  595. package/templates/app/complete/nodefony/security/provisionUsers.ts.tpl +124 -0
  596. package/templates/app/complete/nodefony/service/AppBannerService.ts.tpl +98 -0
  597. package/templates/app/complete/nodefony/service/AppInfoService.ts.tpl +85 -0
  598. package/templates/app/frontend/angular/frontend/src/accent.css.tpl +34 -0
  599. package/templates/app/frontend/angular/frontend/src/app/app.component.ts.tpl +400 -0
  600. package/templates/app/frontend/react/frontend/src/App.tsx.tpl +421 -0
  601. package/templates/app/frontend/react/frontend/src/accent.css.tpl +30 -0
  602. package/templates/app/frontend/shared/frontend/src/brand.ts.tpl +3 -0
  603. package/templates/app/frontend/shared/frontend/src/showcase.css.tpl +224 -0
  604. package/templates/app/frontend/shared/nodefony/controllers/AppController.ts.tpl +45 -0
  605. package/templates/app/frontend/svelte/frontend/src/App.svelte.tpl +371 -0
  606. package/templates/app/frontend/svelte/frontend/src/accent.css.tpl +34 -0
  607. package/templates/app/frontend/vue/frontend/src/App.vue.tpl +367 -0
  608. package/templates/app/frontend/vue/frontend/src/accent.css.tpl +34 -0
  609. package/templates/app/home/nodefony/controllers/HomeController.ts.tpl +38 -0
  610. package/templates/command/nodefony/command/__NAME__.ts.tpl +132 -0
  611. package/templates/controller/duplex/nodefony/controllers/__NAME__.ts.tpl +188 -0
  612. package/templates/controller/example/nodefony/controllers/__NAME__.ts.tpl +348 -0
  613. package/templates/controller/hello/nodefony/controllers/__NAME__.ts.tpl +143 -0
  614. package/templates/controller/realtime/nodefony/controllers/__NAME__.ts.tpl +153 -0
  615. package/templates/controller/realtime/tests/__KEBAB__-realtime.test.ts.tpl +79 -0
  616. package/templates/controller/rest/nodefony/controllers/__NAME__.ts.tpl +159 -0
  617. package/templates/entity/base/nodefony/entity/__PASCAL__.schema.ts.tpl +31 -0
  618. package/templates/entity/base/nodefony/entity/__PASCAL__.ts.tpl +68 -0
  619. package/templates/entity/controller/nodefony/controllers/__PASCAL__Controller.ts.tpl +335 -0
  620. package/templates/entity/service/nodefony/service/__PASCAL__Service.ts.tpl +126 -0
  621. package/templates/entity/tests/tests/__KEBAB__.e2e.test.ts.tpl +358 -0
  622. package/templates/entity/tests/tests/__KEBAB__.test.ts.tpl +87 -0
  623. package/templates/front/angular/frontend/src/app/app.component.ts.tpl +30 -0
  624. package/templates/front/base/nodefony/controllers/__NAME__.ts.tpl +60 -0
  625. package/templates/front/react/frontend/src/App.tsx.tpl +26 -0
  626. package/templates/front/svelte/frontend/src/App.svelte.tpl +19 -0
  627. package/templates/front/vue/frontend/src/App.vue.tpl +23 -0
  628. package/templates/module/ai/AGENTS.md.tpl +71 -0
  629. package/templates/module/base/README.md.tpl +62 -0
  630. package/templates/module/base/docs/index.md.tpl +55 -0
  631. package/templates/module/base/index.ts.tpl +50 -0
  632. package/templates/module/base/nodefony/config/config.ts.tpl +60 -0
  633. package/templates/module/base/nodefony/config/defineModuleConfig.ts.tpl +55 -0
  634. package/templates/module/base/nodefony/src/errors/__PASCAL__Error.ts.tpl +20 -0
  635. package/templates/module/base/package.json.tpl +53 -0
  636. package/templates/module/base/rolldown.config.ts.tpl +14 -0
  637. package/templates/module/base/tests/__KEBAB__.test.ts.tpl +39 -0
  638. package/templates/module/base/tsconfig.json.tpl +42 -0
  639. package/templates/module/base/vitest.config.ts.tpl +27 -0
  640. package/templates/module/packages/CLAUDE.md.tpl +51 -0
  641. package/templates/module/packages/MEMORY.md.tpl +39 -0
  642. package/templates/module/packages/tsconfig.declarations.json.tpl +19 -0
  643. package/templates/module/packages/tsconfig.tests.json.tpl +11 -0
  644. package/templates/module/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +14 -0
  645. package/templates/module/service/nodefony/interfaces/index.ts.tpl +1 -0
  646. package/templates/module/service/nodefony/service/__PASCAL__Service.ts.tpl +116 -0
  647. package/templates/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +19 -0
  648. package/templates/service/nodefony/service/__PASCAL__Service.ts.tpl +136 -0
  649. package/templates/service/tests/__PASCAL__Service.test.ts.tpl +53 -0
  650. package/templates/shared/front-entry/angular/frontend/src/main.ts.tpl +17 -0
  651. package/templates/shared/front-entry/react/frontend/src/main.tsx.tpl +11 -0
  652. package/templates/shared/front-entry/svelte/frontend/src/main.ts.tpl +13 -0
  653. package/templates/shared/front-entry/vue/frontend/src/main.ts.tpl +12 -0
  654. package/templates/shared/front-registrar/nodefony/frontend/register__PASCAL__Entry.ts.tpl +40 -0
  655. package/templates/shared/front-shell/frontend/index.html.tpl +39 -0
  656. package/templates/shared/ng-app-tsconfig/frontend/tsconfig.app.json.tpl +18 -0
  657. package/templates/shared/svelte-shim/frontend/src/env.d.ts.tpl +12 -0
  658. package/templates/shared/vue-shim/frontend/src/env.d.ts.tpl +15 -0
  659. package/.yarnclean +0 -45
  660. package/CHANGELOG.md +0 -406
  661. package/autoloader.es6 +0 -253
  662. package/builder.es6 +0 -366
  663. package/cli/builder/bundles/bundle.js +0 -328
  664. package/cli/builder/bundles/controller.js +0 -73
  665. package/cli/builder/bundles/users-bundle/.yarnclean +0 -45
  666. package/cli/builder/bundles/users-bundle/Command/fixtureTask.js +0 -47
  667. package/cli/builder/bundles/users-bundle/Command/usersCommand.js +0 -105
  668. package/cli/builder/bundles/users-bundle/Entity/mongoose/userEntity.js +0 -168
  669. package/cli/builder/bundles/users-bundle/Entity/sequelize/userEntity.js +0 -231
  670. package/cli/builder/bundles/users-bundle/Fixtures/users.js +0 -117
  671. package/cli/builder/bundles/users-bundle/Fixtures/usersFixtures.js +0 -114
  672. package/cli/builder/bundles/users-bundle/Resources/config/config.js +0 -90
  673. package/cli/builder/bundles/users-bundle/Resources/config/routing.js +0 -17
  674. package/cli/builder/bundles/users-bundle/Resources/config/security.js +0 -96
  675. package/cli/builder/bundles/users-bundle/Resources/config/services.js +0 -7
  676. package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.dev.config.js +0 -13
  677. package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.prod.config.js +0 -31
  678. package/cli/builder/bundles/users-bundle/Resources/config/webpack.config.js +0 -146
  679. package/cli/builder/bundles/users-bundle/Resources/js/users.js +0 -153
  680. package/cli/builder/bundles/users-bundle/Resources/public/favicon.ico +0 -0
  681. package/cli/builder/bundles/users-bundle/Resources/public/images/users-logo.png +0 -0
  682. package/cli/builder/bundles/users-bundle/Resources/scss/awesome/font-awesome.config.js +0 -11
  683. package/cli/builder/bundles/users-bundle/Resources/scss/custom.scss +0 -23
  684. package/cli/builder/bundles/users-bundle/Resources/scss/users.scss +0 -59
  685. package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/login.js +0 -235
  686. package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/users.js +0 -232
  687. package/cli/builder/bundles/users-bundle/Resources/translations/login.en_en.yml +0 -14
  688. package/cli/builder/bundles/users-bundle/Resources/translations/login.fr_fr.yml +0 -14
  689. package/cli/builder/bundles/users-bundle/Resources/translations/users.en_en.yml +0 -35
  690. package/cli/builder/bundles/users-bundle/Resources/translations/users.fr_fr.yml +0 -36
  691. package/cli/builder/bundles/users-bundle/Resources/views/base.html.twig +0 -32
  692. package/cli/builder/bundles/users-bundle/Resources/views/footer.html.twig +0 -7
  693. package/cli/builder/bundles/users-bundle/Resources/views/header.html.twig +0 -90
  694. package/cli/builder/bundles/users-bundle/Resources/views/login/login.html.twig +0 -43
  695. package/cli/builder/bundles/users-bundle/Resources/views/users/createUser.html.twig +0 -296
  696. package/cli/builder/bundles/users-bundle/Resources/views/users/readUsers.html.twig +0 -94
  697. package/cli/builder/bundles/users-bundle/controller/api/graphql/graphqlController.js +0 -56
  698. package/cli/builder/bundles/users-bundle/controller/api/graphql/userResolver.js +0 -121
  699. package/cli/builder/bundles/users-bundle/controller/api/graphql/usertype.js +0 -58
  700. package/cli/builder/bundles/users-bundle/controller/api/openapi/loginApiController.js +0 -210
  701. package/cli/builder/bundles/users-bundle/controller/api/openapi/restUserController.js +0 -244
  702. package/cli/builder/bundles/users-bundle/controller/loginController.js +0 -91
  703. package/cli/builder/bundles/users-bundle/controller/usersController.js +0 -332
  704. package/cli/builder/bundles/users-bundle/package.json +0 -58
  705. package/cli/builder/bundles/users-bundle/readme.md +0 -360
  706. package/cli/builder/bundles/users-bundle/services/usersService.js +0 -411
  707. package/cli/builder/bundles/users-bundle/src/providers/mongoose/userProvider.js +0 -47
  708. package/cli/builder/bundles/users-bundle/src/providers/sequelize/userProvider.js +0 -48
  709. package/cli/builder/bundles/users-bundle/tests/loginTest.js +0 -182
  710. package/cli/builder/bundles/users-bundle/usersBundle.js +0 -26
  711. package/cli/builder/microService/microService.js +0 -261
  712. package/cli/builder/microService/skeletons/.editorconfig +0 -18
  713. package/cli/builder/microService/skeletons/.env-cmdrc.js +0 -32
  714. package/cli/builder/microService/skeletons/.jshintrc +0 -37
  715. package/cli/builder/microService/skeletons/README.md +0 -117
  716. package/cli/builder/microService/skeletons/bin/bash/hello.sh +0 -5
  717. package/cli/builder/microService/skeletons/bin/cli +0 -13
  718. package/cli/builder/microService/skeletons/bin/python/hello.py +0 -20
  719. package/cli/builder/microService/skeletons/config/config.js +0 -29
  720. package/cli/builder/microService/skeletons/config/pm2.config.js +0 -72
  721. package/cli/builder/microService/skeletons/config/webpack/webpack.config.dev.js +0 -8
  722. package/cli/builder/microService/skeletons/config/webpack/webpack.config.prod.js +0 -25
  723. package/cli/builder/microService/skeletons/config/webpack.config.js +0 -114
  724. package/cli/builder/microService/skeletons/package.json +0 -76
  725. package/cli/builder/microService/skeletons/src/browser/index.css +0 -3
  726. package/cli/builder/microService/skeletons/src/browser/index.js +0 -16
  727. package/cli/builder/microService/skeletons/src/browser/socketio.js +0 -46
  728. package/cli/builder/microService/skeletons/src/cli/cli.js +0 -224
  729. package/cli/builder/microService/skeletons/src/cli/menu.js +0 -28
  730. package/cli/builder/microService/skeletons/src/n-api/README.md +0 -1
  731. package/cli/builder/microService/skeletons/src/n-api/binding.gyp +0 -14
  732. package/cli/builder/microService/skeletons/src/n-api/hello.cc +0 -14
  733. package/cli/builder/microService/skeletons/src/n-api/hello.js +0 -23
  734. package/cli/builder/microService/skeletons/src/n-api/package.json +0 -15
  735. package/cli/builder/microService/skeletons/src/node/examples/index.js +0 -120
  736. package/cli/builder/microService/skeletons/src/node/index.js +0 -102
  737. package/cli/builder/microService/skeletons/src/node/services/markdown/markdown.js +0 -27
  738. package/cli/builder/microService/skeletons/src/node/services/servers/http.js +0 -45
  739. package/cli/builder/microService/skeletons/src/node/services/servers/https.js +0 -44
  740. package/cli/builder/microService/skeletons/src/node/services/socketio/socketio.js +0 -46
  741. package/cli/builder/microService/skeletons/src/node/services/syscall/syscall.js +0 -111
  742. package/cli/builder/microService/skeletons/src/node/services/worker/thread.js +0 -59
  743. package/cli/builder/microService/skeletons/src/node/services/worker/worker.js +0 -60
  744. package/cli/builder/microService/skeletons/src/templates/base.html +0 -12
  745. package/cli/builder/microService/skeletons/src/templates/socket.html +0 -23
  746. package/cli/builder/microService/skeletons/tests/unit/serviceTest.js +0 -30
  747. package/cli/builder/project/project.js +0 -474
  748. package/cli/builder/project/skeletons/README.md +0 -778
  749. package/cli/builder/project/skeletons/bin/dev-deploy.sh +0 -5
  750. package/cli/builder/project/skeletons/bin/generateCertificates.sh.skeleton +0 -180
  751. package/cli/builder/project/skeletons/bin/prod-deploy.sh +0 -3
  752. package/cli/builder/project/skeletons/config/config.js.skeleton +0 -178
  753. package/cli/builder/project/skeletons/config/openssl/ca/openssl.cnf.skeleton +0 -150
  754. package/cli/builder/project/skeletons/config/openssl/ca_intermediate/openssl.cnf.skeleton +0 -152
  755. package/cli/builder/project/skeletons/config/pm2.config.js.skeleton +0 -62
  756. package/cli/builder/project/skeletons/documentation.html.twig +0 -24
  757. package/cli/builder/project/skeletons/editorconfig.skeleton +0 -18
  758. package/cli/builder/project/skeletons/eslintignore.skeleton +0 -15
  759. package/cli/builder/project/skeletons/eslintrc.js.skeleton +0 -97
  760. package/cli/builder/project/skeletons/gitignore.skeleton +0 -32
  761. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.37.entity-user.js +0 -137
  762. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.38.entity-session.js +0 -97
  763. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.39.entity-requests.js +0 -115
  764. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.40.entity-jwts.js +0 -97
  765. package/cli/builder/project/skeletons/migrations/migrations.skeleton.js +0 -101
  766. package/cli/builder/project/skeletons/package.json.twig +0 -71
  767. package/cli/builder/react/reactBuilder.js +0 -224
  768. package/cli/builder/react/skeletons/app/Resources/databases/nodefony.db +0 -0
  769. package/cli/builder/react/skeletons/app/Resources/translations/messages.en_en.yml +0 -5
  770. package/cli/builder/react/skeletons/app/Resources/translations/messages.fr_fr.yml +0 -5
  771. package/cli/builder/react/skeletons/app/Resources/views/base.html.twig +0 -33
  772. package/cli/builder/react/skeletons/app/config/config.js +0 -392
  773. package/cli/builder/react/skeletons/app/config/routing.js +0 -10
  774. package/cli/builder/react/skeletons/app/config/security.js +0 -74
  775. package/cli/builder/react/skeletons/app/controller/appController.js +0 -22
  776. package/cli/builder/sandbox/sandBoxBuilder.js +0 -610
  777. package/cli/builder/sandbox/skeletons/Resources/css/entry.css +0 -48
  778. package/cli/builder/sandbox/skeletons/Resources/js/entry.js +0 -60
  779. package/cli/builder/sandbox/skeletons/Resources/public/manifest.json +0 -32
  780. package/cli/builder/sandbox/skeletons/Resources/translations/messages.en_en.yml +0 -5
  781. package/cli/builder/sandbox/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
  782. package/cli/builder/sandbox/skeletons/Resources/views/base.html.twig +0 -46
  783. package/cli/builder/sandbox/skeletons/Resources/views/index.html.twig +0 -34
  784. package/cli/builder/sandbox/skeletons/bootstrap/custom.scss +0 -27
  785. package/cli/builder/sandbox/skeletons/bootstrap/entry.scss +0 -60
  786. package/cli/builder/sandbox/skeletons/workbox/templates/index.html.twig +0 -32
  787. package/cli/builder/sandbox/skeletons/workbox/workers/service-worker.js +0 -196
  788. package/cli/builder/skeletons/Resources/public/favicon.ico +0 -0
  789. package/cli/builder/skeletons/Resources/public/images/app-logo.png +0 -0
  790. package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.html.twig +0 -1
  791. package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.json.twig +0 -24
  792. package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.html.twig +0 -1
  793. package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.json.twig +0 -20
  794. package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.html.twig +0 -1
  795. package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.json.twig +0 -20
  796. package/cli/builder/skeletons/Resources/views/framework-bundle/views/500.html.twig +0 -1
  797. package/cli/builder/skeletons/Resources/views/framework-bundle/views/base.html.twig +0 -30
  798. package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.html.twig +0 -1
  799. package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.json.twig +0 -24
  800. package/cli/builder/skeletons/Resources/views/framework-bundle/views/footer.html.twig +0 -33
  801. package/cli/builder/skeletons/Resources/views/framework-bundle/views/header.html.twig +0 -6
  802. package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.html.twig +0 -6
  803. package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.json.twig +0 -1
  804. package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.html.twig +0 -125
  805. package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.json.twig +0 -5
  806. package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.html.twig +0 -1
  807. package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.json.twig +0 -24
  808. package/cli/builder/skeletons/app/appKernel.js +0 -133
  809. package/cli/builder/skeletons/binding/binding.cc +0 -26
  810. package/cli/builder/skeletons/binding/binding.skeleton +0 -8
  811. package/cli/builder/skeletons/bundle/bundleClass.js +0 -37
  812. package/cli/builder/skeletons/command/commandClass.js +0 -11
  813. package/cli/builder/skeletons/command/taskClass.js +0 -20
  814. package/cli/builder/skeletons/config/config.js +0 -138
  815. package/cli/builder/skeletons/config/nodefony/elastic-bundle.js +0 -37
  816. package/cli/builder/skeletons/config/nodefony/framework-bundle.js +0 -22
  817. package/cli/builder/skeletons/config/nodefony/http-bundle.js +0 -104
  818. package/cli/builder/skeletons/config/nodefony/mail-bundle.js +0 -44
  819. package/cli/builder/skeletons/config/nodefony/mongoose-bundle.js +0 -51
  820. package/cli/builder/skeletons/config/nodefony/monitoring-bundle.js +0 -34
  821. package/cli/builder/skeletons/config/nodefony/realtime-bundle.js +0 -15
  822. package/cli/builder/skeletons/config/nodefony/redis-bundle.js +0 -44
  823. package/cli/builder/skeletons/config/nodefony/security-bundle.js +0 -25
  824. package/cli/builder/skeletons/config/nodefony/sequelize-bundle.js +0 -156
  825. package/cli/builder/skeletons/config/routing.js +0 -55
  826. package/cli/builder/skeletons/config/security.js +0 -102
  827. package/cli/builder/skeletons/config/services.js +0 -1
  828. package/cli/builder/skeletons/config/webpack/webpack.dev.config.js +0 -13
  829. package/cli/builder/skeletons/config/webpack/webpack.prod.config.js +0 -20
  830. package/cli/builder/skeletons/config/webpack.config.js +0 -148
  831. package/cli/builder/skeletons/controller/controllerClass.js +0 -75
  832. package/cli/builder/skeletons/package.json.twig +0 -57
  833. package/cli/builder/skeletons/unittest/testFile.js +0 -46
  834. package/cli/builder/vue/skeletons/Resources/public/images/app-logo.png +0 -0
  835. package/cli/builder/vue/skeletons/Resources/translations/messages.en_en.yml +0 -5
  836. package/cli/builder/vue/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
  837. package/cli/builder/vue/skeletons/vue.config.js +0 -129
  838. package/cli/builder/vue/vueBuilder.js +0 -410
  839. package/cli/generate/generate.es6 +0 -103
  840. package/cli/install/install.js +0 -190
  841. package/cli/sequelize/sequelize.js +0 -94
  842. package/cli/start.js +0 -702
  843. package/cli/tools/pm2.es6 +0 -112
  844. package/cli/tools/tools.es6 +0 -97
  845. package/cli.es6 +0 -925
  846. package/container.es6 +0 -272
  847. package/error.es6 +0 -293
  848. package/fileClass.es6 +0 -242
  849. package/finder/file.es6 +0 -33
  850. package/finder/fileResult.es6 +0 -138
  851. package/finder/finder2.es6 +0 -275
  852. package/finder.es6 +0 -427
  853. package/kernel/annotations/annotations.es6 +0 -286
  854. package/kernel/api/api.es6 +0 -61
  855. package/kernel/api/graphqlApi.es6 +0 -107
  856. package/kernel/api/jsonApi.es6 +0 -177
  857. package/kernel/api/openApi.es6 +0 -139
  858. package/kernel/api/schemas/openApiSchema.js +0 -394
  859. package/kernel/babylon.es6 +0 -162
  860. package/kernel/bundle.es6 +0 -1200
  861. package/kernel/cliKernel.es6 +0 -869
  862. package/kernel/command.es6 +0 -78
  863. package/kernel/commands/nodefonyCommand.es6 +0 -247
  864. package/kernel/commands/tasks/bundlesTask.es6 +0 -59
  865. package/kernel/controllers/controller.es6 +0 -791
  866. package/kernel/fixture.es6 +0 -19
  867. package/kernel/injections/injections.es6 +0 -424
  868. package/kernel/kernel.es6 +0 -1960
  869. package/kernel/kernelWatcher.es6 +0 -387
  870. package/kernel/orm/entity.es6 +0 -59
  871. package/kernel/orm/orm.es6 +0 -139
  872. package/kernel/reader.es6 +0 -290
  873. package/kernel/security/encoder.es6 +0 -17
  874. package/kernel/security/factories/factory.es6 +0 -111
  875. package/kernel/security/factories/passeportFactory.es6 +0 -61
  876. package/kernel/security/provider.es6 +0 -58
  877. package/kernel/security/providers/chainProvider.es6 +0 -99
  878. package/kernel/security/providers/memoryProvider.es6 +0 -55
  879. package/kernel/security/providers/providerManager.es6 +0 -67
  880. package/kernel/security/providers/userEntityProvider.es6 +0 -50
  881. package/kernel/security/role.es6 +0 -12
  882. package/kernel/security/secureArea.es6 +0 -431
  883. package/kernel/security/tokens/token.es6 +0 -171
  884. package/kernel/security/user.es6 +0 -106
  885. package/kernel/serviceRealTime.es6 +0 -21
  886. package/kernel/services/connectionsService.es6 +0 -93
  887. package/kernel/services/cron/cronService.es6 +0 -123
  888. package/kernel/task.es6 +0 -80
  889. package/kernel/templates.es6 +0 -22
  890. package/kernel/templating/twig.es6 +0 -218
  891. package/kernel/tests/cliTest.js +0 -59
  892. package/kernel/tests/containerTest.js +0 -232
  893. package/kernel/tests/kernelTest.js +0 -39
  894. package/nodefony.es6 +0 -1084
  895. package/notificationsCenter.es6 +0 -118
  896. package/protocol.es6 +0 -86
  897. package/protocols/bayeux.es6 +0 -174
  898. package/protocols/jsonRpc/jsonrpc.es6 +0 -56
  899. package/result.es6 +0 -99
  900. package/service.es6 +0 -288
  901. package/syslog/pdu.es6 +0 -141
  902. package/syslog/syslog.es6 +0 -754
  903. package/watcher.es6 +0 -113
@@ -0,0 +1,553 @@
1
+ import "./sysexits.js";
2
+ import { chargePrompts } from "./prompts.js";
3
+ import { printUsage, printUsageError } from "./usageReport.js";
4
+ import { defaultDevPorts } from "../service/dev/devProcess.js";
5
+ import { findProjectRoot } from "./projectRoot.js";
6
+ import { ADMIN_SCOPE_READ, ADMIN_SCOPE_WRITE } from "../kernel/adminPlane/adminCaller.js";
7
+ import { MCP_CONFIG_FILE, MCP_SERVER_KEY, MCP_TOKEN_ENV, buildMcpUrl, planMcpConfig, renderMcpPlan } from "./aiMcpReport.js";
8
+ import { AGENT_TARGETS, agentRoot, agentsPresents, litVariable, planAgentDeclaration, renderPlanShell, requestedAgents } from "./agentTargets.js";
9
+ import { writeAgentPointers } from "./scaffold/engine.js";
10
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
11
+ import path from "node:path";
12
+ //#region src/cli/aiMcp.ts
13
+ /**
14
+ * `nodefony ai:mcp` — déclare le serveur MCP de cette application à ton agent.
15
+ *
16
+ * ## Ce que cette commande fait, et ce qu'elle NE fait pas
17
+ *
18
+ * Elle **écrit un fichier de câblage** (`.mcp.json`) et rend la main. Elle ne
19
+ * démarre aucun process : depuis la révision `2026-07-28` du transport, un
20
+ * serveur MCP est un simple endpoint `POST` sans session — chez Nodefony,
21
+ * c'est une **route de l'application** (`POST /nodefony/mcp`, module
22
+ * `@nodefony/devkit`). Il n'y a donc rien à lancer en plus de l'application,
23
+ * et rien à relancer quand le superviseur la recharge.
24
+ *
25
+ * ## Pourquoi standalone (aucun boot)
26
+ *
27
+ * Même raison que `card` et `ai:sync` : écrire un fichier de configuration ne
28
+ * dépend d'aucun service, et la commande doit répondre dans un terminal qui n'a
29
+ * pas posé `NODE_ENV` — le module qui sert la route est `policy: "dev"`, il
30
+ * n'existerait pas ici.
31
+ *
32
+ * ## Le port n'est pas deviné
33
+ *
34
+ * Il est lu du fichier d'état que le runtime publie une fois ses serveurs en
35
+ * écoute (`defaultDevPorts`), et retombe sur la convention `5151` seulement
36
+ * quand rien n'a jamais tourné. C'est la même source que `nodefony status` :
37
+ * deux lectures indépendantes finiraient par annoncer un port où personne
38
+ * n'écoute.
39
+ */
40
+ /** Chemin de la route MCP — dupliqué NULLE PART ailleurs dans le cœur. */
41
+ const MCP_PATH = "/nodefony/mcp";
42
+ /** La page d'aide — `nodefony ai:mcp --help`, et le rappel après un refus. */
43
+ const PAGE = {
44
+ command: "nodefony ai:mcp",
45
+ tagline: "déclare le serveur MCP de cette application à ton agent, et si tu veux chez les agents installés",
46
+ synopsis: ["nodefony ai:mcp [--auth|--no-auth] [--url <origine>] [options]", "nodefony ai:mcp --agent <liste> [--remove] [--global] [options]"],
47
+ sections: [{
48
+ title: "CE QU'ELLE ÉCRIT",
49
+ paragraph: `Le fichier ${MCP_CONFIG_FILE} du projet, et — si --agent est donné — la déclaration chez les agents nommés, par LEUR propre outil en ligne de commande. Elle ne DÉMARRE rien : le serveur MCP est une route de l'application, pas un process.`
50
+ }, {
51
+ title: "AGENTS RECONNUS",
52
+ lines: [`${AGENT_TARGETS.map((c) => c.key).join(" · ")} · all · none`],
53
+ paragraph: "« none » — ou aucune case cochée en mode interactif — ne touche à aucun agent : coder seul est un choix, pas un oubli."
54
+ }],
55
+ options: [
56
+ {
57
+ term: "-a, --auth",
58
+ text: `mode authentifié : l'en-tête porte \${${MCP_TOKEN_ENV}}, jamais le jeton lui-même. Sans option, le mode déjà en place est CONSERVÉ`
59
+ },
60
+ {
61
+ term: "--no-auth",
62
+ text: "retire l'en-tête d'autorisation"
63
+ },
64
+ {
65
+ term: "-u, --url <origine>",
66
+ text: "origine forcée (ex. https://localhost:5152)"
67
+ },
68
+ {
69
+ term: "--agent <liste>",
70
+ text: "déclare AUSSI la porte chez ces agents, via leur propre CLI"
71
+ },
72
+ {
73
+ term: "--remove",
74
+ text: "avec --agent : retire la déclaration au lieu de la poser"
75
+ },
76
+ {
77
+ term: "--global",
78
+ text: "avec --agent : déclare dans TON foyer au lieu du projet (une seule application servie)"
79
+ },
80
+ {
81
+ term: "-n, --dry-run",
82
+ text: "le plan, sans rien écrire"
83
+ },
84
+ {
85
+ term: "-j, --json",
86
+ text: "le même plan, exploitable par un script"
87
+ },
88
+ {
89
+ term: "--cwd <chemin>",
90
+ text: "point de départ (la racine de l'app est résolue en remontant)"
91
+ }
92
+ ],
93
+ examples: [
94
+ {
95
+ term: "nodefony ai:mcp",
96
+ text: "déclare la porte dans le projet"
97
+ },
98
+ {
99
+ term: "nodefony ai:mcp --auth",
100
+ text: "en mode authentifié — le jeton s'obtient par `nodefony security:token --write`"
101
+ },
102
+ {
103
+ term: "nodefony ai:mcp --agent all",
104
+ text: "et chez tous les agents installés sur ce poste"
105
+ }
106
+ ],
107
+ exitCodes: [{
108
+ term: "66",
109
+ text: "aucune application ici (EX_NOINPUT)"
110
+ }]
111
+ };
112
+ /**
113
+ * Parse l'argv après le mot `ai:mcp`.
114
+ *
115
+ * @param argv - `process.argv` complet
116
+ * @returns la demande, ou le motif du refus
117
+ */
118
+ function parseAiMcpArgv(argv) {
119
+ const at = argv.indexOf("ai:mcp");
120
+ const rest = at === -1 ? [] : argv.slice(at + 1);
121
+ const req = {
122
+ url: null,
123
+ auth: null,
124
+ agent: void 0,
125
+ remove: false,
126
+ global: false,
127
+ dryRun: false,
128
+ json: false,
129
+ cwd: process.cwd(),
130
+ help: false
131
+ };
132
+ for (let i = 0; i < rest.length; i++) {
133
+ const word = rest[i];
134
+ if (word === "--help" || word === "-h") req.help = true;
135
+ else if (word === "--auth" || word === "-a") req.auth = true;
136
+ else if (word === "--no-auth") req.auth = false;
137
+ else if (word === "--dry-run" || word === "-n") req.dryRun = true;
138
+ else if (word === "--json" || word === "-j") req.json = true;
139
+ else if (word === "--agent") req.agent = rest[++i] ?? "";
140
+ else if (word === "--global") req.global = true;
141
+ else if (word === "--remove") req.remove = true;
142
+ else if (word === "--url" || word === "-u") req.url = rest[++i] ?? null;
143
+ else if (word === "--cwd") req.cwd = path.resolve(rest[++i] ?? "");
144
+ else return { error: `argument inconnu : ${word}` };
145
+ }
146
+ return req;
147
+ }
148
+ /**
149
+ * Déduit l'origine du serveur de développement.
150
+ *
151
+ * ⚠️ **Le port en clair est préféré au port TLS**, et ce n'est pas une
152
+ * négligence : en développement le certificat est auto-signé, et un client MCP
153
+ * qui le refuse ne dit pas pourquoi — il rend « serveur injoignable ». L'appel
154
+ * est purement local ; `--url` reste là pour qui veut le TLS.
155
+ *
156
+ * @param cwd - racine du projet
157
+ */
158
+ function guessOrigin(cwd) {
159
+ return `http://localhost:${defaultDevPorts(cwd)[0] ?? 5151}`;
160
+ }
161
+ /**
162
+ * Lit l'échéance et les scopes d'un JWT, sans le valider ni le divulguer.
163
+ *
164
+ * @param token - le jeton compact (`en-tête.charge.signature`).
165
+ * @param nowSeconds - l'instant de référence, INJECTÉ pour que le banc
166
+ * n'ait pas à attendre le temps qui passe.
167
+ * @returns l'état lisible, ou `null` si ce n'est pas un JWT exploitable.
168
+ */
169
+ function tokenState(token, nowSeconds) {
170
+ const parts = token.split(".");
171
+ if (parts.length !== 3 || !parts[1]) return null;
172
+ try {
173
+ const charge = JSON.parse(Buffer.from(parts[1], "base64url").toString("utf8"));
174
+ const scope = typeof charge.scope === "string" ? charge.scope : "";
175
+ return {
176
+ remainingSeconds: typeof charge.exp === "number" ? charge.exp - nowSeconds : null,
177
+ scopes: scope.split(/\s+/u).filter((s) => s !== "")
178
+ };
179
+ } catch {
180
+ return null;
181
+ }
182
+ }
183
+ /**
184
+ * Phrase d'état d'un jeton, pour un humain devant une question.
185
+ *
186
+ * @param state - ce que {@link tokenState} a lu, ou `null` s'il n'y en a pas.
187
+ * @returns la ligne à afficher.
188
+ */
189
+ function renderTokenState(state) {
190
+ if (state === null) return "aucun jeton lisible n'est posé chez tes agents";
191
+ const scopes = state.scopes.length > 0 ? state.scopes.join(" ") : "aucun scope déclaré";
192
+ if (state.remainingSeconds === null) return `jeton sans échéance (${scopes})`;
193
+ if (state.remainingSeconds <= 0) return `jeton EXPIRÉ depuis ${Math.round(-state.remainingSeconds / 60)} min (${scopes}) — c'est lui qui provoque les 401`;
194
+ const hours = state.remainingSeconds / 3600;
195
+ return `jeton valide encore ${hours >= 48 ? `${Math.round(hours / 24)} jours` : hours >= 2 ? `${Math.round(hours)} heures` : `${Math.round(state.remainingSeconds / 60)} min`} (${scopes})`;
196
+ }
197
+ /**
198
+ * État du jeton posé chez CHAQUE agent détecté — l'échéance et la portée, pas
199
+ * le secret.
200
+ *
201
+ * ⭐ Par agent, et non « le » jeton : rien ne garantit qu'ils portent le même.
202
+ * Un agent servi il y a trois semaines a le sien, périmé, pendant qu'un autre
203
+ * vient d'être rafraîchi — et c'est précisément l'écart qu'on ne voit jamais,
204
+ * parce qu'il se manifeste par un `401` chez un seul outil.
205
+ *
206
+ * @param targets - agents détectés sur ce poste.
207
+ * @param projectRoot - racine du projet, pour résoudre leurs fichiers.
208
+ * @param nowSeconds - instant de référence, injecté pour le banc.
209
+ * @returns pour chaque agent, sa phrase d'état.
210
+ */
211
+ function agentTokenStates(targets, projectRoot, nowSeconds) {
212
+ const states = /* @__PURE__ */ new Map();
213
+ for (const target of targets) {
214
+ const file = path.resolve(agentRoot(target, { projectRoot }), target.file);
215
+ let content = "";
216
+ try {
217
+ content = readFileSync(file, "utf8");
218
+ } catch (e) {
219
+ if (e.code !== "ENOENT") {
220
+ states.set(target.key, "état du jeton illisible");
221
+ continue;
222
+ }
223
+ }
224
+ const token = litVariable(target.forme, content, MCP_TOKEN_ENV);
225
+ states.set(target.key, token === null ? "pas de jeton posé" : renderTokenState(tokenState(token, nowSeconds)));
226
+ }
227
+ return states;
228
+ }
229
+ function planTokenChaining(request, context) {
230
+ if (request.auth !== true) return null;
231
+ if (request.dryRun || request.json) return null;
232
+ if (!context.isTTY) return null;
233
+ const argv = ["security:token", "--write"];
234
+ if (context.ttlMinutes !== void 0) argv.push("--ttl", String(context.ttlMinutes));
235
+ if (context.scopes !== void 0 && context.scopes.trim() !== "") argv.push("--scope", context.scopes);
236
+ return {
237
+ argv,
238
+ env: {
239
+ ...context.env ?? process.env,
240
+ NODE_ENV: "development"
241
+ },
242
+ cwd: context.projectRoot
243
+ };
244
+ }
245
+ /**
246
+ * Déclare (ou retire) la porte MCP chez chaque agent, **par SA propre CLI**.
247
+ *
248
+ * ⭐ La règle qui gouverne cette fonction : **on n'écrit pas le fichier de
249
+ * configuration d'un outil tiers.** Son format lui appartient, il change avec
250
+ * ses versions, et une écriture faite « à la main » se découvre le jour où
251
+ * l'agent ne voit plus rien — sans rien dire. Sa CLI, elle, connaît son format
252
+ * et le suit.
253
+ *
254
+ * La sortie des CLI est CAPTURÉE plutôt qu'héritée, et n'est montrée qu'en cas
255
+ * d'échec : l'une d'elles écrit des avertissements d'interpréteur sur la sortie
256
+ * d'erreur à chaque appel, et les laisser passer ferait lire un succès comme
257
+ * une panne.
258
+ *
259
+ * @param targets - agents à servir
260
+ * @param ctx - l'URL de la porte, et le sens du geste
261
+ * @returns un verdict par agent — jamais une exception : un agent qui refuse
262
+ * n'empêche pas de servir les suivants
263
+ */
264
+ async function declareToAgents(targets, ctx) {
265
+ const { spawnSync } = await import("node:child_process");
266
+ const { mkdirSync } = await import("node:fs");
267
+ const results = [];
268
+ for (const target of targets) {
269
+ const plan = planAgentDeclaration(target, {
270
+ url: ctx.url,
271
+ tokenEnv: MCP_TOKEN_ENV
272
+ }, ctx.remove);
273
+ if (plan.voie !== "cli") {
274
+ results.push({
275
+ target,
276
+ state: "fichier-projet",
277
+ command: ""
278
+ });
279
+ continue;
280
+ }
281
+ const command = renderPlanShell(plan);
282
+ const projectRoot = target.home ? path.join(ctx.projectRoot, target.marker) : void 0;
283
+ const inProject = projectRoot !== void 0 && !ctx.global;
284
+ if (inProject && projectRoot) try {
285
+ mkdirSync(projectRoot, { recursive: true });
286
+ } catch {}
287
+ const envAgent = inProject && projectRoot && target.home ? {
288
+ ...process.env,
289
+ [target.home]: projectRoot
290
+ } : process.env;
291
+ const argvListBefore = target.argvList?.();
292
+ let replacesOtherUrl = false;
293
+ if (argvListBefore && !ctx.remove) {
294
+ const before = spawnSync(plan.bin, argvListBefore, {
295
+ encoding: "utf8",
296
+ shell: false,
297
+ cwd: ctx.projectRoot,
298
+ env: envAgent
299
+ });
300
+ const vu = `${before.stdout ?? ""}${before.stderr ?? ""}`;
301
+ replacesOtherUrl = !before.error && before.status === 0 && vu.includes("nodefony") && !vu.includes(ctx.url);
302
+ }
303
+ const r = spawnSync(plan.bin, plan.argv, {
304
+ encoding: "utf8",
305
+ shell: false,
306
+ cwd: ctx.projectRoot,
307
+ env: envAgent
308
+ });
309
+ if (r.error && r.error.code === "ENOENT") {
310
+ results.push({
311
+ target,
312
+ state: "cli-absente",
313
+ command
314
+ });
315
+ continue;
316
+ }
317
+ if (r.status !== 0) {
318
+ results.push({
319
+ target,
320
+ state: "echec",
321
+ command,
322
+ detail: `${r.stderr ?? ""}${r.stdout ?? ""}`.trim().split("\n").slice(-6).join("\n")
323
+ });
324
+ continue;
325
+ }
326
+ const argvList = target.argvList?.();
327
+ if (argvList) {
328
+ const vue = spawnSync(plan.bin, argvList, {
329
+ encoding: "utf8",
330
+ shell: false,
331
+ cwd: ctx.projectRoot,
332
+ env: envAgent
333
+ });
334
+ const output = `${vue.stdout ?? ""}${vue.stderr ?? ""}`;
335
+ const lisible = !vue.error && vue.status === 0;
336
+ const present = output.includes(MCP_SERVER_KEY);
337
+ if (lisible && present === ctx.remove) {
338
+ results.push({
339
+ target,
340
+ state: "sans-effet",
341
+ command,
342
+ detail: output.trim().split("\n").slice(-4).join("\n")
343
+ });
344
+ continue;
345
+ }
346
+ }
347
+ results.push({
348
+ target,
349
+ inProject,
350
+ state: ctx.remove ? "retire" : "declare",
351
+ command,
352
+ ...replacesOtherUrl ? { replacesOtherUrl: true } : {}
353
+ });
354
+ }
355
+ return results;
356
+ }
357
+ /**
358
+ * Rend le compte rendu des déclarations.
359
+ *
360
+ * PURE : c'est le texte que l'utilisateur lit, et il doit pouvoir être éprouvé
361
+ * sans lancer la moindre CLI.
362
+ *
363
+ * @param results - un verdict par agent
364
+ * @param remove - le sens du geste, pour accorder les phrases
365
+ */
366
+ function renderDeclarations(results, remove) {
367
+ if (results.length === 0) return "\n Aucun agent : tu codes seul, c'est un choix.\n Quand tu voudras : nodefony ai:mcp --agent all\n";
368
+ let out = "\n";
369
+ for (const r of results) if (r.state === "fichier-projet") out += ` • ${r.target.name} — rien à faire : il lit ${MCP_CONFIG_FILE}, ${remove ? "retiré par --no-auth ou à la main" : "déjà à jour"}.\n`;
370
+ else if (r.state === "declare") {
371
+ const scope = r.inProject || r.target.scope === "projet" ? "dans ce projet" : "GLOBALE — elle vaut pour tous tes projets";
372
+ out += ` ✓ ${r.target.name} — porte déclarée, ${scope}. RELANCE-le.\n`;
373
+ if (r.state === "declare" && r.replacesOtherUrl) out += ` ⚠ elle a REMPLACÉ une déclaration « ${MCP_SERVER_KEY} » qui visait ailleurs — une autre application ?\n`;
374
+ if (r.target.noteAfter) out += ` ⓘ ${r.target.noteAfter}\n`;
375
+ } else if (r.state === "retire") out += ` ✓ ${r.target.name} — déclaration retirée.\n`;
376
+ else if (r.state === "sans-effet") out += ` ⚠ ${r.target.name} — sa CLI a répondu « ok », mais la porte est ${remove ? "TOUJOURS déclarée" : "INTROUVABLE"} chez lui.\n Ce qu'elle liste :\n${(r.detail ?? "").split("\n").map((l) => ` ${l}`).join("\n")}\n La commande jouée : ${r.command}\n Son outil ne l'a pas honorée — reprends depuis SA configuration.\n`;
377
+ else if (r.state === "cli-absente") out += ` ⚠ ${r.target.name} — sa commande « ${r.target.bin} » est introuvable ici.\n Le jour où tu l'installes :\n ${r.command}\n`;
378
+ else out += ` ⚠ ${r.target.name} — sa CLI a refusé :\n${(r.detail ?? "").split("\n").map((l) => ` ${l}`).join("\n")}\n La commande jouée était :\n ${r.command}\n`;
379
+ return out;
380
+ }
381
+ /** Lit le `.mcp.json` du projet, ou `null` s'il est absent ou illisible. */
382
+ function readMcpConfig(file) {
383
+ if (!existsSync(file)) return null;
384
+ try {
385
+ const parsed = JSON.parse(readFileSync(file, "utf8"));
386
+ return typeof parsed === "object" && parsed !== null ? parsed : null;
387
+ } catch {
388
+ return null;
389
+ }
390
+ }
391
+ /**
392
+ * Point d'entrée de la commande.
393
+ *
394
+ * @param argv - `process.argv` complet
395
+ * @returns code de sortie sémantique (`OK`, `USAGE`, `NOINPUT` hors projet,
396
+ * `CANTCREAT` si l'écriture échoue)
397
+ */
398
+ async function runAiMcpCommand(argv) {
399
+ const parsed = parseAiMcpArgv(argv);
400
+ if ("error" in parsed) return printUsageError(PAGE, parsed.error);
401
+ if (parsed.help) return printUsage(PAGE);
402
+ const projectRoot = findProjectRoot(parsed.cwd);
403
+ if (projectRoot === null) {
404
+ process.stderr.write(`ai:mcp: aucun projet Nodefony ici (pas de nodefony.config.ts en remontant depuis ${parsed.cwd}).\n`);
405
+ return 66;
406
+ }
407
+ if (parsed.auth === null && !parsed.dryRun && !parsed.json && parsed.url === null && process.stdin.isTTY) {
408
+ const alreadyAuth = Boolean(readMcpConfig(path.join(projectRoot, MCP_CONFIG_FILE))?.mcpServers?.["nodefony"]?.headers?.Authorization);
409
+ const { confirm } = await chargePrompts();
410
+ parsed.auth = await confirm({
411
+ message: `Mode authentifié ? (en-tête \${${MCP_TOKEN_ENV}}${alreadyAuth ? " — répondre non le RETIRE" : ""})`,
412
+ default: alreadyAuth
413
+ });
414
+ }
415
+ const origin = parsed.url ?? guessOrigin(projectRoot);
416
+ const mcpUrl = buildMcpUrl(origin, MCP_PATH);
417
+ const file = path.join(projectRoot, MCP_CONFIG_FILE);
418
+ const plan = planMcpConfig(readMcpConfig(file), mcpUrl, parsed.auth === null ? {} : { auth: parsed.auth });
419
+ if (!parsed.dryRun && plan.action !== "inchange") try {
420
+ writeFileSync(file, `${JSON.stringify(plan.document, null, 2)}\n`);
421
+ } catch (error) {
422
+ process.stderr.write(`ai:mcp: écriture impossible (${error.message}).\n`);
423
+ return 73;
424
+ }
425
+ const requests = requestedAgents(parsed.agent);
426
+ if (requests instanceof Error) {
427
+ process.stderr.write(`ai:mcp: ${requests.message}\n`);
428
+ return 64;
429
+ }
430
+ let targets = requests ?? [];
431
+ if (requests === void 0 && !parsed.dryRun && !parsed.json) {
432
+ const detected = agentsPresents({
433
+ projectRoot,
434
+ exists: existsSync
435
+ });
436
+ const presents = detected.filter((c) => c.declaration === "cli");
437
+ const byFile = detected.filter((c) => c.declaration === "fichier-projet");
438
+ if (detected.length > 0 && process.stdin.isTTY) {
439
+ const { checkbox } = await chargePrompts();
440
+ const chosen = await checkbox({
441
+ message: `Déclarer la porte chez quels agents ? (espace pour cocher — ENTRÉE sans rien cocher : aucun, je code seul)`,
442
+ choices: [...byFile.map((c) => ({
443
+ name: `${c.name} — servi par le ${path.basename(file)} de ce projet`,
444
+ value: c.key,
445
+ checked: true,
446
+ disabled: "déjà à jour, rien à lancer"
447
+ })), ...presents.map((c) => ({
448
+ name: `${c.name} — ${c.bin} mcp ${parsed.remove ? "remove" : "add"}`,
449
+ value: c.key,
450
+ checked: false
451
+ }))]
452
+ });
453
+ targets = presents.filter((c) => chosen.includes(c.key));
454
+ }
455
+ }
456
+ if (parsed.json) {
457
+ process.stdout.write(`${JSON.stringify({
458
+ file,
459
+ ...plan,
460
+ dryRun: parsed.dryRun,
461
+ agents: targets.map((c) => c.key)
462
+ }, null, 2)}\n`);
463
+ return 0;
464
+ }
465
+ process.stdout.write(renderMcpPlan(plan, file, parsed.dryRun));
466
+ if (parsed.dryRun) {
467
+ if (targets.length > 0) process.stdout.write(`\n À lancer (non joué — --dry-run) :\n` + targets.map((c) => {
468
+ const p = planAgentDeclaration(c, {
469
+ url: mcpUrl,
470
+ tokenEnv: MCP_TOKEN_ENV
471
+ }, parsed.remove);
472
+ return p.voie === "cli" ? ` ${renderPlanShell(p)}\n` : ` (${c.name} : rien — il lit ${MCP_CONFIG_FILE})\n`;
473
+ }).join(""));
474
+ } else if (requests !== void 0 || targets.length > 0) {
475
+ process.stdout.write(renderDeclarations(await declareToAgents(targets, {
476
+ url: mcpUrl,
477
+ remove: parsed.remove,
478
+ projectRoot,
479
+ global: parsed.global
480
+ }), parsed.remove));
481
+ if (!parsed.remove) {
482
+ const poses = writeAgentPointers(projectRoot, targets.map((c) => c.key), path.basename(projectRoot));
483
+ if (poses.length > 0) process.stdout.write(`\n instructions : ${poses.join(", ")} — pointeur(s) vers AGENTS.md\n`);
484
+ }
485
+ }
486
+ const chainage = planTokenChaining(parsed, {
487
+ projectRoot,
488
+ isTTY: Boolean(process.stdin.isTTY)
489
+ });
490
+ if (chainage) {
491
+ const { confirm, select } = await chargePrompts();
492
+ const detectedForToken = agentsPresents({
493
+ projectRoot,
494
+ exists: existsSync
495
+ });
496
+ const states = agentTokenStates(detectedForToken, projectRoot, Math.floor(Date.now() / 1e3));
497
+ for (const target of detectedForToken) process.stdout.write(` ${target.name} : ${states.get(target.key)}\n`);
498
+ const perime = detectedForToken.length === 0 || [...states.values()].some((phrase) => phrase.includes("EXPIRÉ") || phrase.includes("pas de jeton"));
499
+ const now = await confirm({
500
+ message: `${perime ? "Obtenir" : "Réémettre"} un jeton maintenant (${MCP_TOKEN_ENV}) ?`,
501
+ default: perime
502
+ });
503
+ const bin = process.argv[1];
504
+ if (now && bin) {
505
+ const withDuration = planTokenChaining(parsed, {
506
+ projectRoot,
507
+ isTTY: true,
508
+ ttlMinutes: await select({
509
+ message: "Durée de validité du jeton",
510
+ default: 10080,
511
+ choices: [
512
+ {
513
+ name: "7 jours (recommandé pour un agent local)",
514
+ value: 10080
515
+ },
516
+ {
517
+ name: "30 jours (maximum)",
518
+ value: 43200
519
+ },
520
+ {
521
+ name: "12 heures",
522
+ value: 720
523
+ },
524
+ {
525
+ name: "15 minutes (le défaut de la configuration)",
526
+ value: 15
527
+ }
528
+ ]
529
+ }),
530
+ scopes: await select({
531
+ message: "Ce que le jeton autorise",
532
+ default: ADMIN_SCOPE_READ,
533
+ choices: [{
534
+ name: `Lecture seule (${ADMIN_SCOPE_READ}) — recommandé`,
535
+ value: ADMIN_SCOPE_READ
536
+ }, {
537
+ name: `Lecture et mutations (${ADMIN_SCOPE_READ} ${ADMIN_SCOPE_WRITE})`,
538
+ value: `${ADMIN_SCOPE_READ} ${ADMIN_SCOPE_WRITE}`
539
+ }]
540
+ })
541
+ });
542
+ const { spawnSync } = await import("node:child_process");
543
+ spawnSync(process.execPath, [bin, ...(withDuration ?? chainage).argv], {
544
+ stdio: "inherit",
545
+ cwd: chainage.cwd,
546
+ env: chainage.env
547
+ });
548
+ }
549
+ }
550
+ return 0;
551
+ }
552
+ //#endregion
553
+ export { agentTokenStates, declareToAgents, guessOrigin, parseAiMcpArgv, planTokenChaining, readMcpConfig, renderDeclarations, renderTokenState, runAiMcpCommand, tokenState };
@@ -0,0 +1,129 @@
1
+ import { stripTrailingSlashes } from "../Tools.js";
2
+ //#region src/cli/aiMcpReport.ts
3
+ /**
4
+ * Composition PURE de la configuration MCP d'un projet — `.mcp.json`.
5
+ *
6
+ * Séparée de l'écriture pour la même raison que `env`, `card` et `ai:sync` :
7
+ * ce qui décide (que faut-il écrire ? est-ce déjà bon ?) s'éprouve sans toucher
8
+ * au disque, donc se teste vraiment.
9
+ *
10
+ * ## Ce que ce fichier NE fait pas
11
+ *
12
+ * Il ne lance aucun serveur et n'en décrit aucun : le serveur MCP de Nodefony
13
+ * est une **route** de l'application (`POST /nodefony/mcp`), servie par le
14
+ * module `@nodefony/devkit`. Ce fichier ne produit que le **câblage** — le
15
+ * papier qui dit à un agent où taper.
16
+ */
17
+ /** Nom de la clé sous laquelle notre serveur est déclaré. */
18
+ const MCP_SERVER_KEY = "nodefony";
19
+ /** Fichier de configuration, à la racine du projet. */
20
+ const MCP_CONFIG_FILE = ".mcp.json";
21
+ /**
22
+ * Nom de la variable d'environnement qui porte le jeton de la porte MCP.
23
+ *
24
+ * 🔴 C'est la VARIABLE qui s'écrit dans `.mcp.json`, jamais le jeton : ce
25
+ * fichier est un fichier de projet, suivi par git. Les clients MCP développent
26
+ * `${VAR}` à la lecture, donc le porteur reste dans l'environnement du poste et
27
+ * ne peut pas partir dans un commit.
28
+ */
29
+ const MCP_TOKEN_ENV = "NF_MCP_TOKEN";
30
+ /**
31
+ * Compose l'URL de l'endpoint MCP.
32
+ *
33
+ * @param origin - origine du serveur (`http://localhost:5151`)
34
+ * @param endpointPath - chemin de l'endpoint, tel que le module le monte
35
+ */
36
+ function buildMcpUrl(origin, endpointPath) {
37
+ return `${stripTrailingSlashes(origin)}${endpointPath}`;
38
+ }
39
+ /**
40
+ * Décide ce qu'il faut écrire dans `.mcp.json`.
41
+ *
42
+ * ⭐ **Le document existant est PRÉSERVÉ**, et pas seulement par politesse :
43
+ * un projet y déclare ses autres serveurs MCP, et une commande de câblage qui
44
+ * les emporterait serait une commande qu'on n'ose plus lancer. Seule la clé
45
+ * `nodefony` est posée ou mise à jour.
46
+ *
47
+ * L'idempotence est au sens FORT : une URL déjà correcte rend `inchange`, donc
48
+ * l'appelant n'écrit pas — l'horodatage du fichier ne bouge pas, et l'arbre
49
+ * reste propre.
50
+ *
51
+ * @param existing - document déjà présent, ou `null`
52
+ * @param url - URL de l'endpoint à déclarer
53
+ */
54
+ function planMcpConfig(existing, url, options = {}) {
55
+ const base = existing ? {
56
+ ...existing,
57
+ mcpServers: { ...existing.mcpServers }
58
+ } : { mcpServers: {} };
59
+ const previous = base.mcpServers[MCP_SERVER_KEY];
60
+ const auth = options.auth === true ? true : options.auth === false ? false : Boolean(previous?.headers?.Authorization);
61
+ const entry = auth ? {
62
+ type: "http",
63
+ url,
64
+ headers: { Authorization: `Bearer \${${MCP_TOKEN_ENV}}` }
65
+ } : {
66
+ type: "http",
67
+ url
68
+ };
69
+ base.mcpServers[MCP_SERVER_KEY] = entry;
70
+ const authRemoved = Boolean(previous?.headers?.Authorization) && !entry.headers?.Authorization;
71
+ if (!previous) return {
72
+ action: "pose",
73
+ document: base,
74
+ url,
75
+ auth
76
+ };
77
+ const memeAuth = (previous.headers?.Authorization ?? null) === (entry.headers?.Authorization ?? null);
78
+ if (previous.url === url && previous.type === "http" && memeAuth) return {
79
+ action: "inchange",
80
+ document: base,
81
+ url,
82
+ auth
83
+ };
84
+ return {
85
+ action: "remplace",
86
+ document: base,
87
+ url,
88
+ auth,
89
+ previousUrl: previous.url,
90
+ ...authRemoved ? { authRemoved: true } : {}
91
+ };
92
+ }
93
+ /**
94
+ * URL des métadonnées de la porte protégée (RFC 9728) : le chemin bien connu
95
+ * s'INSÈRE entre l'hôte et le chemin de la ressource, il ne s'y ajoute pas.
96
+ *
97
+ * @param url - URL de l'endpoint MCP
98
+ * @returns l'URL du document de métadonnées
99
+ */
100
+ function metadataUrlOf(url) {
101
+ try {
102
+ const u = new URL(url);
103
+ return `${u.origin}/.well-known/oauth-protected-resource${u.pathname}`;
104
+ } catch {
105
+ return `/.well-known/oauth-protected-resource`;
106
+ }
107
+ }
108
+ /**
109
+ * Rend le plan pour un lecteur humain.
110
+ *
111
+ * Dit surtout **ce qui reste à faire** : écrire le fichier ne branche rien tant
112
+ * que l'application ne tourne pas, et un agent déjà lancé ne relit pas sa
113
+ * configuration. Taire ces deux conditions produirait le pire des retours — un
114
+ * succès annoncé, suivi d'un outil introuvable.
115
+ */
116
+ function renderMcpPlan(plan, file, dryRun) {
117
+ const verbe = plan.action === "pose" ? "posé" : plan.action === "remplace" ? "mis à jour" : "déjà à jour";
118
+ const lines = [dryRun ? `${file} — ${plan.action} (simulation, rien n'est écrit)` : `${file} — ${verbe}`, ` serveur « ${MCP_SERVER_KEY} » → ${plan.url}`];
119
+ if (plan.previousUrl && plan.previousUrl !== plan.url) lines.push(` (remplaçait ${plan.previousUrl})`);
120
+ if (plan.authRemoved) lines.push(` ⚠ l'en-tête Authorization a été RETIRÉ — la porte est redevenue anonyme.`, ` (le remettre : nodefony ai:mcp --auth)`);
121
+ lines.push("", "Pour que ça réponde :", " 1. l'application doit TOURNER (npm run dev) — le serveur MCP est une de ses routes ;", " 2. redémarre ton agent, il ne relit pas sa configuration en cours de route.");
122
+ if (plan.auth === true) {
123
+ const metadata = metadataUrlOf(plan.url);
124
+ lines.push("", `Mode AUTHENTIFIÉ — l'en-tête envoie \${${MCP_TOKEN_ENV}}, jamais un jeton écrit ici.`, ` 1. la porte publie où prendre un jeton : curl ${metadata}`, " (champ `authorization_servers` — RFC 9728) ;", " 2. obtiens-en un, sans serveur ni mot de passe — l'application le SIGNE :", ` nodefony security:token --write → pose NF_MCP_TOKEN chez tes agents`, " nodefony security:token (l'affiche, pour un export manuel)", " Elle vise l'audience de la porte d'elle-même (RFC 8707) : un jeton", " d'audience différente serait refusé, à juste titre ;", ` 3. ou exporte-le à la main : export ${MCP_TOKEN_ENV}=<access_token>`, " 4. un jeton d'accès EXPIRE — pose une durée qui tienne la journée :", " nodefony security:token --write --ttl 10080 (7 jours)", "", "Sans jeton, la porte sert quand même ses outils publics — l'authentification", "ajoute les outils réservés, elle n'est pas un péage.");
125
+ }
126
+ return `${lines.join("\n")}\n`;
127
+ }
128
+ //#endregion
129
+ export { MCP_CONFIG_FILE, MCP_SERVER_KEY, MCP_TOKEN_ENV, buildMcpUrl, metadataUrlOf, planMcpConfig, renderMcpPlan };