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,323 @@
1
+ import "./sysexits.js";
2
+ import { printUsage, printUsageError } from "./usageReport.js";
3
+ import { findProjectRoot } from "./projectRoot.js";
4
+ import { stripGlobalCliFlags } from "./globalFlags.js";
5
+ import { SKILLS_DIR, planSync, renderPlan } from "./aiSyncReport.js";
6
+ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
7
+ import path from "node:path";
8
+ //#region src/cli/aiSync.ts
9
+ /** La page d'aide — `nodefony ai:sync --help`, et le rappel après un refus. */
10
+ const PAGE = {
11
+ command: "nodefony ai:sync",
12
+ tagline: "installe dans ce projet les pointeurs vers les skills d'agent que livrent les paquets présents",
13
+ sections: [{
14
+ title: "CE QU'ELLE ÉCRIT",
15
+ paragraph: "Des POINTEURS, jamais une copie : le contenu des skills reste dans les paquets, où npm le met à jour. Elle écrit `.agents/skills/` et son miroir `.claude/skills/`, et n'y touche qu'aux entrées qu'elle a posées. Elle ne DÉMARRE pas l'application — elle répond donc dans un terminal qui n'a pas posé NODE_ENV."
16
+ }],
17
+ options: [
18
+ {
19
+ term: "--dry-run",
20
+ text: "le plan, sans rien écrire"
21
+ },
22
+ {
23
+ term: "--json",
24
+ text: "le même plan, exploitable par un script"
25
+ },
26
+ {
27
+ term: "--cwd <chemin>",
28
+ text: "point de départ (la racine de l'app est résolue en remontant)"
29
+ }
30
+ ],
31
+ examples: [{
32
+ term: "nodefony ai:sync",
33
+ text: "pose les pointeurs manquants"
34
+ }, {
35
+ term: "nodefony ai:sync --dry-run",
36
+ text: "ce qu'elle ferait, avant de la laisser faire"
37
+ }],
38
+ exitCodes: [{
39
+ term: "66",
40
+ text: "aucune application ici (EX_NOINPUT)"
41
+ }]
42
+ };
43
+ /**
44
+ * Les paquets d'où proviennent des skills.
45
+ *
46
+ * On scanne `node_modules/@nodefony/*` ET les modules LOCAUX de l'application
47
+ * (`modules/<nom>`), pas seulement le devkit : rien dans la mécanique n'est
48
+ * propre à un paquet, et un module tiers qui livre ses propres skills doit être
49
+ * servi par la même commande. Coder `@nodefony/devkit` en dur aurait fait de
50
+ * cette généralité un cas particulier, et obligé à toucher au cœur le jour où
51
+ * quelqu'un d'autre en livre.
52
+ */
53
+ /**
54
+ * Les paquets que CE projet produit lui-même — ses espaces de travail.
55
+ *
56
+ * ⚠️ Ce n'est PAS « le paquet est un lien symbolique ». Une application créée
57
+ * avec `--link` pointe elle aussi vers un checkout du framework, et elle, elle
58
+ * VEUT ses pointeurs : elle consomme le framework sans le produire. Le
59
+ * discriminant est la propriété — un paquet déclaré comme espace de travail
60
+ * appartient à ce dépôt, sa source y est versionnée et éditable, et lui poser un
61
+ * pointeur vers `node_modules` reviendrait à s'envoyer chercher le double de ce
62
+ * qu'on a sous la main.
63
+ *
64
+ * Lecture volontairement tolérante : un `package.json` illisible ou sans
65
+ * `workspaces` rend un ensemble vide — c'est le cas d'une application ordinaire,
66
+ * et le comportement doit alors être exactement celui d'avant.
67
+ *
68
+ * @param projectRoot - racine du projet.
69
+ * @returns les noms de paquets produits ici.
70
+ */
71
+ function packagesBuiltByThisProject(projectRoot) {
72
+ const produced = /* @__PURE__ */ new Set();
73
+ let patterns;
74
+ try {
75
+ patterns = JSON.parse(readFileSync(path.join(projectRoot, "package.json"), "utf8")).workspaces;
76
+ } catch {
77
+ return produced;
78
+ }
79
+ const list = Array.isArray(patterns) ? patterns : Array.isArray(patterns?.packages) ? patterns.packages : [];
80
+ for (const pattern of list) {
81
+ if (typeof pattern !== "string") continue;
82
+ const etoile = pattern.endsWith("/*");
83
+ const base = path.join(projectRoot, etoile ? pattern.slice(0, -2) : pattern);
84
+ for (const folder of etoile ? listDir(base) : [""]) {
85
+ const dir = etoile ? path.join(base, folder) : base;
86
+ try {
87
+ const name = JSON.parse(readFileSync(path.join(dir, "package.json"), "utf8")).name;
88
+ if (typeof name === "string") produced.add(name);
89
+ } catch {}
90
+ }
91
+ }
92
+ return produced;
93
+ }
94
+ function packageRoots(projectRoot) {
95
+ const roots = [];
96
+ const scope = path.join(projectRoot, "node_modules", "@nodefony");
97
+ const producedHere = packagesBuiltByThisProject(projectRoot);
98
+ for (const name of listDir(scope)) {
99
+ if (name.startsWith(".")) continue;
100
+ if (producedHere.has(`@nodefony/${name}`)) continue;
101
+ roots.push({
102
+ dir: path.join(scope, name),
103
+ name: `@nodefony/${name}`
104
+ });
105
+ }
106
+ const locaux = path.join(projectRoot, "modules");
107
+ for (const name of listDir(locaux)) {
108
+ if (name.startsWith(".")) continue;
109
+ roots.push({
110
+ dir: path.join(locaux, name),
111
+ name
112
+ });
113
+ }
114
+ return roots;
115
+ }
116
+ /**
117
+ * Le contenu d'un dossier, ou rien s'il n'existe pas.
118
+ *
119
+ * @param dir - chemin absolu.
120
+ * @returns les entrées, ou `[]` — un dossier absent est un cas NORMAL ici.
121
+ */
122
+ function listDir(dir) {
123
+ try {
124
+ return readdirSync(dir);
125
+ } catch {
126
+ return [];
127
+ }
128
+ }
129
+ /**
130
+ * La première phrase de la `description` d'un `SKILL.md`.
131
+ *
132
+ * Volontairement écrit à la main plutôt que par un analyseur YAML : le cœur ne
133
+ * dépend d'aucune bibliothèque pour lire deux champs, et un `SKILL.md` non
134
+ * conforme doit être IGNORÉ, pas faire échouer la commande — la synchronisation
135
+ * ne juge pas la qualité des skills des autres.
136
+ *
137
+ * @param src - contenu complet du fichier.
138
+ * @returns `{ name, summary }`, ou `null` si le frontmatter est inexploitable.
139
+ */
140
+ function readSkillHeader(src) {
141
+ const block = /^---\r?\n([\s\S]*?)\r?\n---/u.exec(src);
142
+ if (block === null) return null;
143
+ const fm = block[1] ?? "";
144
+ const name = /^name:[ \t]*(\S.*)$/mu.exec(fm)?.[1]?.trim();
145
+ if (name === void 0 || name === "") return null;
146
+ let desc = /^description:[ \t]*(\S.*)$/mu.exec(fm)?.[1]?.trim() ?? "";
147
+ if (desc === "" || desc === ">" || desc === "|") desc = (/^description:[ \t]*[>|][^\n]*\n((?:[ \t]+\S[^\n]*\n?)+)/mu.exec(fm)?.[1] ?? "").split("\n").map((l) => l.trim()).filter(Boolean).join(" ");
148
+ return {
149
+ name,
150
+ summary: (/^(.*?[.!?])(\s|$)/u.exec(desc)?.[1] ?? desc).trim()
151
+ };
152
+ }
153
+ /**
154
+ * Découvre les skills livrés par les paquets installés.
155
+ *
156
+ * Un skill est un DOSSIER portant un `SKILL.md` — c'est la spécification, et
157
+ * c'est le seul critère retenu : ni le nom du paquet, ni un champ maison.
158
+ *
159
+ * @param projectRoot - racine de l'application.
160
+ * @returns les skills trouvés, dans l'ordre de découverte.
161
+ */
162
+ function discoverSkills(projectRoot) {
163
+ const out = [];
164
+ for (const pkg of packageRoots(projectRoot)) {
165
+ const skillsDir = path.join(pkg.dir, "skills");
166
+ for (const entry of listDir(skillsDir)) {
167
+ const md = path.join(skillsDir, entry, "SKILL.md");
168
+ if (!existsSync(md)) continue;
169
+ let header = null;
170
+ try {
171
+ header = readSkillHeader(readFileSync(md, "utf8"));
172
+ } catch {
173
+ continue;
174
+ }
175
+ if (header === null || header.name !== entry) continue;
176
+ out.push({
177
+ name: header.name,
178
+ packageName: pkg.name,
179
+ summary: header.summary,
180
+ source: path.relative(projectRoot, md).split(path.sep).join("/")
181
+ });
182
+ }
183
+ }
184
+ return out;
185
+ }
186
+ /**
187
+ * Ce que le dossier de découverte porte déjà : nom du skill → contenu.
188
+ *
189
+ * @param projectRoot - racine de l'application.
190
+ * @returns la table, vide si le dossier n'existe pas encore.
191
+ */
192
+ function readExistingPointers(projectRoot) {
193
+ const dir = path.join(projectRoot, ...SKILLS_DIR.split("/"));
194
+ const out = Object.create(null);
195
+ for (const entry of listDir(dir)) {
196
+ const md = path.join(dir, entry, "SKILL.md");
197
+ try {
198
+ out[entry] = readFileSync(md, "utf8");
199
+ } catch {}
200
+ }
201
+ return out;
202
+ }
203
+ /**
204
+ * Analyse les arguments de `ai:sync`.
205
+ *
206
+ * @param argv - `process.argv` complet.
207
+ * @returns les options, ou une erreur d'usage.
208
+ */
209
+ function parseAiSyncArgv(argv) {
210
+ const args = stripGlobalCliFlags(argv.slice(2).filter((a) => a !== "ai:sync"));
211
+ let cwd = process.cwd();
212
+ let json = false;
213
+ let dryRun = false;
214
+ let help = false;
215
+ for (let i = 0; i < args.length; i += 1) {
216
+ const a = args[i];
217
+ if (a === "--help" || a === "-h") help = true;
218
+ else if (a === "--json") json = true;
219
+ else if (a === "--dry-run") dryRun = true;
220
+ else if (a === "--cwd") {
221
+ const v = args[i + 1];
222
+ if (v === void 0) return { error: "--cwd attend un chemin" };
223
+ cwd = path.resolve(v);
224
+ i += 1;
225
+ } else return { error: `option inconnue : ${a}` };
226
+ }
227
+ return {
228
+ cwd,
229
+ json,
230
+ dryRun,
231
+ help
232
+ };
233
+ }
234
+ /**
235
+ * Pose dans un projet les pointeurs vers les skills livrés par les paquets
236
+ * installés, et rend le plan de ce qui a été fait.
237
+ *
238
+ * C'est le geste ENTIER — découvrir, comparer, écrire — tel que l'exécutent ses
239
+ * DEUX appelants : la commande `ai:sync` et le scaffold `create app`. Il vit ici
240
+ * en un seul exemplaire : recopier la boucle d'écriture dans le scaffold aurait
241
+ * produit deux gestes divergeant au premier réglage (format du pointeur, dossier
242
+ * visé, condition de réécriture), et chacun aurait passé ses propres tests.
243
+ *
244
+ * @param projectRoot - racine de l'application, DÉJÀ résolue (la remontée par
245
+ * `findProjectRoot` appartient à l'appelant : le scaffold connaît sa cible,
246
+ * la commande doit la chercher).
247
+ * @param dryRun - `true` pour calculer sans rien écrire.
248
+ * @returns le plan, qu'il ait été appliqué ou non.
249
+ */
250
+ /**
251
+ * Ce fichier est-il un pointeur que cette commande a posé ?
252
+ *
253
+ * Le marqueur est celui que `renderPointer` écrit dans le frontmatter
254
+ * (`nodefony-source-package`) : il DIT l'appartenance, là où une heuristique de
255
+ * taille ou de contenu se tromperait un jour. Tout le reste — un skill écrit à
256
+ * la main, un skill du dépôt lui-même — n'appartient pas à cette commande, et
257
+ * ne se remplace pas.
258
+ *
259
+ * @param content - le fichier tel qu'il est sur le disque.
260
+ * @returns `true` si la synchronisation peut le remplacer.
261
+ */
262
+ function estUnPointeur(content) {
263
+ return content.includes("nodefony-source-package:");
264
+ }
265
+ function syncSkillPointers(projectRoot, dryRun = false) {
266
+ const plan = planSync(discoverSkills(projectRoot), readExistingPointers(projectRoot));
267
+ if (dryRun) return plan;
268
+ for (const skill of plan.skills) {
269
+ if (skill.action !== "inchange") {
270
+ const dest = path.join(projectRoot, ...skill.target.split("/"));
271
+ mkdirSync(path.dirname(dest), { recursive: true });
272
+ writeFileSync(dest, skill.content, "utf8");
273
+ }
274
+ const mirror = path.join(projectRoot, ...skill.mirrorTarget.split("/"));
275
+ let current = null;
276
+ try {
277
+ current = readFileSync(mirror, "utf8");
278
+ } catch {}
279
+ if (current !== null && !estUnPointeur(current)) {
280
+ plan.preserves.push(skill.mirrorTarget);
281
+ continue;
282
+ }
283
+ if (current !== skill.content) {
284
+ mkdirSync(path.dirname(mirror), { recursive: true });
285
+ writeFileSync(mirror, skill.content, "utf8");
286
+ }
287
+ }
288
+ return plan;
289
+ }
290
+ /**
291
+ * Commande `nodefony ai:sync` — pose dans le projet les pointeurs vers les
292
+ * skills livrés par les paquets installés.
293
+ *
294
+ * Standalone (0 boot), et il le FAUT : la commande doit répondre dans un
295
+ * terminal qui n'a pas posé `NODE_ENV`. Portée par un module `policy: "dev"`,
296
+ * elle n'aurait tout simplement pas existé là — c'est exactement le défaut qui a
297
+ * fait remonter `card` dans le cœur, et il n'y a aucune raison de le repayer.
298
+ *
299
+ * ⚠️ Aucun `postinstall` ne l'appelle, volontairement : `--ignore-scripts` est
300
+ * courant (intégration continue, politiques d'entreprise), les scripts
301
+ * d'installation sont un vecteur d'attaque connu de l'écosystème npm, et écrire
302
+ * dans un dossier VERSIONNÉ à chaque installation produirait des différences
303
+ * surprises. Le scaffold pose les pointeurs à la création ; cette commande les
304
+ * remet à jour quand on le demande.
305
+ *
306
+ * @param argv - `process.argv` complet.
307
+ * @returns exit code sémantique (`OK`, `USAGE`, `NOINPUT` hors projet).
308
+ */
309
+ function runAiSyncCommand(argv) {
310
+ const parsed = parseAiSyncArgv(argv);
311
+ if ("error" in parsed) return printUsageError(PAGE, parsed.error);
312
+ if (parsed.help) return printUsage(PAGE);
313
+ const projectRoot = findProjectRoot(parsed.cwd);
314
+ if (projectRoot === null) {
315
+ process.stderr.write("ai:sync: aucun projet Nodefony ici (nodefony.config.ts introuvable en remontant).\nPour en créer un :\n npx nodefony create app mon-app\n");
316
+ return 66;
317
+ }
318
+ const plan = syncSkillPointers(projectRoot, parsed.dryRun);
319
+ process.stdout.write(parsed.json ? `${JSON.stringify(plan, null, 2)}\n` : renderPlan(plan, !parsed.dryRun));
320
+ return 0;
321
+ }
322
+ //#endregion
323
+ export { discoverSkills, parseAiSyncArgv, readExistingPointers, readSkillHeader, runAiSyncCommand, syncSkillPointers };
@@ -0,0 +1,142 @@
1
+ //#region src/cli/aiSyncReport.ts
2
+ /**
3
+ * Le dossier de découverte INTEROPÉRABLE.
4
+ *
5
+ * La spécification Agent Skills ne mandate AUCUN emplacement — elle ne définit
6
+ * que ce qu'un skill contient. La convention qui a émergé pour le partage entre
7
+ * clients est `.agents/skills/` : c'est la racine CANONIQUE, celle où vivent
8
+ * aussi la détection d'orphelins et l'inventaire.
9
+ *
10
+ * ⭐ **« La convention qui a émergé » n'est pas un pari : deux clients la
11
+ * lisent, et l'un des deux la PRÉFÈRE à son propre dossier.** Une convention
12
+ * qu'on affirme sans nommer qui l'honore est une croyance ; celle-ci est
13
+ * constatée au source de chaque client :
14
+ *
15
+ * | client | lit `.agents/skills` | preuve |
16
+ * | ------ | -------------------- | ----------------------------------------------- |
17
+ * | vibe | oui | `vibe/core/paths/_local_config_files.py` (`_AGENTS_SKILLS_SUBDIR`) |
18
+ * | gemini | oui, **en priorité** | `@google/gemini-cli` `bundle/docs/cli/skills.md` |
19
+ * | claude | non | mesuré — d'où {@link CLAUDE_SKILLS_DIR} |
20
+ * | codex | pas de skills | rien dans son paquet (0.149.0) |
21
+ *
22
+ * Gemini est explicite sur la préférence : à niveau égal, « the `.agents/skills/`
23
+ * alias takes precedence over the `.gemini/skills/` directory ». Poser en plus
24
+ * un `skill_paths` dans la configuration d'un agent serait donc une SECONDE
25
+ * source pour la même règle — la racine canonique suffit, et c'est tout
26
+ * l'intérêt d'une convention.
27
+ */
28
+ const SKILLS_DIR = ".agents/skills";
29
+ /**
30
+ * Le MIROIR pour Claude Code — parce que le pari « c'est aux clients d'ajouter
31
+ * `.agents/skills/` » a été MESURÉ perdu.
32
+ *
33
+ * Constaté sur une application générée (claude-code 2.1.238, mode headless) :
34
+ * les cinq pointeurs étaient posés dans `.agents/skills/`, et le champ `skills`
35
+ * de la session n'en listait AUCUN ; les mêmes fichiers recopiés dans
36
+ * `.claude/skills/` y apparaissaient tous. Un skill que le client dominant ne
37
+ * charge jamais n'existe pas — même motif que la porte MCP câblée sans
38
+ * `--mcp-config`. Le contenu reste rendu par `renderPointer`, en un seul
39
+ * exemplaire : deux racines, un écrivain, aucune divergence possible.
40
+ *
41
+ * ⚠️ Cette racine appartient d'abord à l'UTILISATEUR (ses propres skills y
42
+ * vivent) : la synchronisation n'y écrit QUE les pointeurs qu'elle livre, n'y
43
+ * détecte aucun orphelin et n'y supprime jamais rien.
44
+ */
45
+ const CLAUDE_SKILLS_DIR = ".claude/skills";
46
+ /**
47
+ * Le pointeur écrit dans le projet.
48
+ *
49
+ * Il ne COPIE pas le skill : il le désigne. C'est ce qui fait que le contenu se
50
+ * met à jour par `npm update` sans qu'aucun fichier du projet ne soit réécrit —
51
+ * une copie, elle, mentirait six mois plus tard. Le corps reste court à dessein :
52
+ * l'agent charge d'abord les métadonnées de tous les skills, et seulement
53
+ * ensuite le corps de celui qu'il active.
54
+ *
55
+ * @param skill - le skill découvert.
56
+ * @returns le contenu complet du `SKILL.md` pointeur.
57
+ */
58
+ function renderPointer(skill) {
59
+ return `---
60
+ name: ${skill.name}
61
+ description: >
62
+ ${skill.summary}
63
+ metadata:
64
+ nodefony-source-package: "${skill.packageName}"
65
+ ---
66
+
67
+ # ${skill.name}
68
+
69
+ > Ce fichier est un **pointeur**, posé par \`nodefony ai:sync\`. Le contenu vit
70
+ > dans le paquet \`${skill.packageName}\` et se met à jour par \`npm update\` —
71
+ > ne l'édite pas ici, l'édition serait écrasée et ne profiterait à personne.
72
+
73
+ **Lis maintenant \`${skill.source}\`** : c'est la version qui correspond à la
74
+ version du framework installée dans ce projet.
75
+ `;
76
+ }
77
+ /**
78
+ * Décide, pour chaque skill découvert, s'il faut poser, remplacer ou ne rien
79
+ * faire — et relève les pointeurs devenus orphelins.
80
+ *
81
+ * Un pointeur déjà identique n'est PAS réécrit : sans cette comparaison, chaque
82
+ * passage salirait l'arbre git de l'utilisateur avec des fichiers au contenu
83
+ * inchangé, et `ai:sync` deviendrait une commande qu'on hésite à lancer.
84
+ *
85
+ * @param decouverts - les skills livrés par les paquets installés.
86
+ * @param existing - ce que le dossier de découverte porte déjà : nom → contenu.
87
+ * @returns le plan, trié par nom pour que deux exécutions se comparent.
88
+ */
89
+ function planSync(decouverts, existing) {
90
+ const skills = [];
91
+ const delivered = /* @__PURE__ */ new Set();
92
+ for (const skill of [...decouverts].sort((a, b) => a.name.localeCompare(b.name))) {
93
+ delivered.add(skill.name);
94
+ const content = renderPointer(skill);
95
+ const current = existing[skill.name];
96
+ skills.push({
97
+ name: skill.name,
98
+ packageName: skill.packageName,
99
+ action: current === void 0 ? "pose" : current === content ? "inchange" : "remplace",
100
+ target: `${SKILLS_DIR}/${skill.name}/SKILL.md`,
101
+ mirrorTarget: `${CLAUDE_SKILLS_DIR}/${skill.name}/SKILL.md`,
102
+ content
103
+ });
104
+ }
105
+ const orphelins = Object.keys(existing).filter((name) => !delivered.has(name)).sort();
106
+ return {
107
+ directory: SKILLS_DIR,
108
+ skills,
109
+ orphelins,
110
+ preserves: []
111
+ };
112
+ }
113
+ /**
114
+ * Rend le plan pour un humain.
115
+ *
116
+ * @param plan - le plan calculé.
117
+ * @param applique - `false` quand rien n'a été écrit (`--dry-run`).
118
+ * @returns le texte à écrire sur la sortie standard.
119
+ */
120
+ function renderPlan(plan, applique) {
121
+ const lines = [];
122
+ const poses = plan.skills.filter((s) => s.action === "pose");
123
+ const replaced = plan.skills.filter((s) => s.action === "remplace");
124
+ const inchanges = plan.skills.filter((s) => s.action === "inchange");
125
+ lines.push(`\n Skills d'agent — ${plan.directory} (miroir Claude Code : ${CLAUDE_SKILLS_DIR})\n`);
126
+ if (plan.skills.length === 0) {
127
+ lines.push(" Aucun skill trouvé dans les paquets installés.\n\n Les skills sont livrés par les paquets Nodefony (dossier skills/).\n Si tu attendais ceux du devkit :\n npm install --save-dev @nodefony/devkit\n");
128
+ return lines.join("");
129
+ }
130
+ for (const s of plan.skills) {
131
+ const marque = s.action === "pose" ? "+" : s.action === "remplace" ? "~" : "=";
132
+ lines.push(` ${marque} ${s.name.padEnd(24)} ${s.packageName}\n`);
133
+ }
134
+ for (const name of plan.orphelins) lines.push(` ? ${name.padEnd(24)} plus livré par aucun paquet — à supprimer à la main\n`);
135
+ for (const target of plan.preserves) lines.push(` ! ${target} existe déjà et n'est PAS un pointeur — conservé tel quel\n`);
136
+ lines.push(`\n ${poses.length} posé(s) · ${replaced.length} mis à jour · ${inchanges.length} inchangé(s)` + (plan.orphelins.length > 0 ? ` · ${plan.orphelins.length} orphelin(s)` : "") + (plan.preserves.length > 0 ? ` · ${plan.preserves.length} conservé(s)` : "") + `\n`);
137
+ if (!applique) lines.push(`\n Rien n'a été écrit (--dry-run).\n`);
138
+ else if (poses.length > 0 || replaced.length > 0) lines.push("\n Ces fichiers sont faits pour être COMMITÉS : ton équipe et ton\n intégration continue disposeront des mêmes skills.\n");
139
+ return lines.join("");
140
+ }
141
+ //#endregion
142
+ export { CLAUDE_SKILLS_DIR, SKILLS_DIR, planSync, renderPlan, renderPointer };
@@ -0,0 +1,186 @@
1
+ import "./sysexits.js";
2
+ import { printUsage, printUsageError } from "./usageReport.js";
3
+ import { findProjectRoot } from "./projectRoot.js";
4
+ import { stripGlobalCliFlags } from "./globalFlags.js";
5
+ import { buildCard, renderCard } from "./cardReport.js";
6
+ import { readFileSync, readdirSync } from "node:fs";
7
+ import path from "node:path";
8
+ //#region src/cli/card.ts
9
+ /**
10
+ * `nodefony card [--json]` — qui répond, et où aller ensuite.
11
+ *
12
+ * La PREMIÈRE commande qu'un agent (ou un humain) lance en arrivant dans une
13
+ * application qu'il ne connaît pas. C'est ce qui décide de son placement :
14
+ * standalone, comme `check` et `env`, elle ne lit que des fichiers.
15
+ *
16
+ * Ce qu'elle répare, mesuré sur le terrain, deux portes fermées au moment exact
17
+ * où elle sert :
18
+ *
19
+ * 1. **Application NON CONSTRUITE** — le cas d'une app fraîchement générée, donc
20
+ * précisément celle où l'on cherche par où commencer. Faire booter la carte
21
+ * la rendait muette (`diagnoseUnbootableProject` répond « lance npm run
22
+ * build » à toute commande qui exige un Kernel).
23
+ * 2. **`NODE_ENV` non posé** — la carte était portée par une commande du module
24
+ * `@nodefony/devkit`, `policy: "dev"`. Hors développement le module n'est pas
25
+ * chargé : la commande n'EXISTAIT pas, et le CLI répondait `unknown command`,
26
+ * sans piste. Une porte d'accueil qui disparaît selon l'environnement n'est
27
+ * pas une porte d'accueil.
28
+ *
29
+ * La contrepartie est ÉNONCÉE, jamais masquée : sans boot, on ne connaît que les
30
+ * modules INSTALLÉS, pas les modules CHARGÉS (cf `renderCard`). La vérité
31
+ * runtime reste à `npx nodefony inspect modules`, que la carte cite.
32
+ *
33
+ * La composition (`buildCard`) et le rendu (`renderCard`) vivent dans
34
+ * `cli/cardReport.ts` : le module `@nodefony/devkit` les réutilise pour sa porte
35
+ * HTTP, où le Kernel tourne et où la liste est celle des modules chargés. Une
36
+ * source, deux portes.
37
+ */
38
+ /** La page d'aide — `nodefony card --help`, et le rappel après un refus. */
39
+ const PAGE = {
40
+ command: "nodefony card",
41
+ tagline: "la carte de visite de cette application : où l'on est, ce qu'elle embarque, et quoi taper ensuite",
42
+ aliases: ["nodefony devkit:card"],
43
+ sections: [{
44
+ title: "CE QU'ELLE LIT",
45
+ paragraph: "Des fichiers, et rien d'autre : elle ne DÉMARRE pas l'application. Elle répond donc dans une application pas encore construite, et dans un terminal qui n'a pas posé NODE_ENV — les deux situations où l'on cherche précisément par où commencer. La contrepartie est écrite dans la carte : elle connaît les modules INSTALLÉS, pas les modules CHARGÉS. Pour ceux-là, `nodefony inspect modules`."
46
+ }],
47
+ options: [{
48
+ term: "-j, --json",
49
+ text: "la même carte, exploitable par un script"
50
+ }, {
51
+ term: "--cwd <chemin>",
52
+ text: "point de départ (la racine de l'app est résolue en remontant)"
53
+ }],
54
+ examples: [{
55
+ term: "nodefony card",
56
+ text: "la carte de l'application d'ici"
57
+ }, {
58
+ term: "nodefony card --json | jq .",
59
+ text: "la même, pour un script ou un agent"
60
+ }],
61
+ exitCodes: [{
62
+ term: "66",
63
+ text: "aucune application ici (EX_NOINPUT)"
64
+ }]
65
+ };
66
+ /**
67
+ * Parse l'argv après le mot `card` (ou son alias).
68
+ *
69
+ * @param argv - `process.argv` complet.
70
+ * @returns la demande, ou le motif du refus.
71
+ */
72
+ function parseCardArgv(argv) {
73
+ const at = argv.findIndex((a) => a === "card" || a === "devkit:card");
74
+ const rest = stripGlobalCliFlags(at === -1 ? [] : argv.slice(at + 1));
75
+ let json = false;
76
+ let cwd = process.cwd();
77
+ let help = false;
78
+ for (let i = 0; i < rest.length; i++) {
79
+ const word = rest[i];
80
+ if (word === "--help" || word === "-h") help = true;
81
+ else if (word === "--json" || word === "-j") json = true;
82
+ else if (word === "--cwd") cwd = path.resolve(rest[++i] ?? "");
83
+ else return { error: `option inconnue : ${word}` };
84
+ }
85
+ return {
86
+ json,
87
+ cwd,
88
+ help
89
+ };
90
+ }
91
+ /** Lit un `package.json` sans jamais lever — absent ou illisible → `null`. */
92
+ function readPackage(file) {
93
+ try {
94
+ return JSON.parse(readFileSync(file, "utf8"));
95
+ } catch {
96
+ return null;
97
+ }
98
+ }
99
+ /** Liste les entrées d'un dossier sans jamais lever — absent → `[]`. */
100
+ function listDir(dir) {
101
+ try {
102
+ return readdirSync(dir, { withFileTypes: true }).filter((e) => e.isDirectory() || e.isSymbolicLink()).map((e) => e.name);
103
+ } catch {
104
+ return [];
105
+ }
106
+ }
107
+ /**
108
+ * Nom COURT d'un module à partir de son nom npm : `@nodefony/studio` → `studio`.
109
+ *
110
+ * C'est la clé du conteneur — celle que le Kernel expose dans `kernel.modules`,
111
+ * et donc la seule qui permette à la carte froide et à la carte chaude de dire
112
+ * la même chose du même module.
113
+ */
114
+ function shortName(pkgName) {
115
+ const at = pkgName.lastIndexOf("/");
116
+ return at === -1 ? pkgName : pkgName.slice(at + 1);
117
+ }
118
+ /**
119
+ * Compose l'état de la carte à FROID : ce que des fichiers suffisent à établir.
120
+ *
121
+ * Que des lectures, aucune exécution : le `package.json` de l'application (nom,
122
+ * version, briques déclarées), celui du framework installé (sa version), puis le
123
+ * DISQUE — `node_modules/@nodefony/*` et `modules/*`, réunis aux déclarations.
124
+ *
125
+ * Ce sont des FAITS, là où lire les `use()` de `nodefony.config.ts` à
126
+ * l'expression régulière produirait une liste fausse dès qu'un appel est
127
+ * conditionnel, sans le dire. Ils restent des modules INSTALLÉS : ce qui sera
128
+ * réellement chargé dépend du gating `policy`/`when`, qui n'a pas encore eu lieu
129
+ * — d'où `source: "static"`, que le rendu annonce.
130
+ *
131
+ * @param projectRoot - racine de l'application (cf `findProjectRoot`).
132
+ * @param fallbackVersion - version du framework à afficher si l'application ne
133
+ * l'a pas encore installé (celle du CLI qui répond).
134
+ * @returns l'état à passer à `buildCard`, ou `null` si le `package.json` de
135
+ * l'application est illisible.
136
+ */
137
+ function readColdCardInput(projectRoot, fallbackVersion) {
138
+ const appPkg = readPackage(path.join(projectRoot, "package.json"));
139
+ if (appPkg === null) return null;
140
+ const deps = {
141
+ ...appPkg.dependencies,
142
+ ...appPkg.devDependencies
143
+ };
144
+ const modules = new Set(Object.keys(deps).filter((name) => name.startsWith("@nodefony/")).map(shortName));
145
+ for (const name of listDir(path.join(projectRoot, "node_modules", "@nodefony"))) if (!name.startsWith(".")) modules.add(name);
146
+ for (const name of listDir(path.join(projectRoot, "modules"))) if (!name.startsWith(".")) modules.add(name);
147
+ const corePkg = readPackage(path.join(projectRoot, "node_modules", "nodefony", "package.json"));
148
+ const nodefonyVersion = typeof corePkg?.version === "string" ? corePkg.version : fallbackVersion;
149
+ return {
150
+ appName: typeof appPkg.name === "string" ? appPkg.name : "application",
151
+ appVersion: typeof appPkg.version === "string" ? appPkg.version : "0.0.0",
152
+ nodefonyVersion,
153
+ environment: process.env.NODE_ENV ?? "development",
154
+ modules: [...modules],
155
+ source: "static"
156
+ };
157
+ }
158
+ /**
159
+ * Commande `nodefony card` — orchestre : résout le projet, lit l'état statique,
160
+ * délègue la composition au module pur, rend.
161
+ *
162
+ * @param argv - `process.argv` complet.
163
+ * @param fallbackVersion - version du CLI courant, affichée si l'application n'a
164
+ * pas (encore) `nodefony` dans ses `node_modules`.
165
+ * @returns exit code sémantique (`OK`, `USAGE`, `NOINPUT` hors projet).
166
+ */
167
+ function runCardCommand(argv, fallbackVersion) {
168
+ const parsed = parseCardArgv(argv);
169
+ if ("error" in parsed) return printUsageError(PAGE, parsed.error);
170
+ if (parsed.help) return printUsage(PAGE);
171
+ const projectRoot = findProjectRoot(parsed.cwd);
172
+ if (projectRoot === null) {
173
+ process.stderr.write("card: aucun projet Nodefony ici (nodefony.config.ts introuvable en remontant).\nPour en créer un :\n npx nodefony create app mon-app\n");
174
+ return 66;
175
+ }
176
+ const input = readColdCardInput(projectRoot, fallbackVersion);
177
+ if (input === null) {
178
+ process.stderr.write(`card: package.json illisible dans ${projectRoot}\n`);
179
+ return 66;
180
+ }
181
+ const card = buildCard(input);
182
+ process.stdout.write(parsed.json ? `${JSON.stringify(card, null, 2)}\n` : renderCard(card));
183
+ return 0;
184
+ }
185
+ //#endregion
186
+ export { parseCardArgv, readColdCardInput, runCardCommand };