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.
- package/.ai/symbols.json +36135 -0
- package/LICENSE +544 -0
- package/README.md +316 -694
- package/bin/nodefony +2183 -85
- package/dist/client/Container.js +367 -0
- package/dist/client/Event.js +198 -0
- package/dist/client/Service.js +344 -0
- package/dist/client/Tools.js +162 -0
- package/dist/client/client/ClientKernel.js +276 -0
- package/dist/client/client/angular/index.js +352 -0
- package/dist/client/client/announce.js +212 -0
- package/dist/client/client/debugbar/DebugBar.js +1624 -0
- package/dist/client/client/debugbar/format.js +103 -0
- package/dist/client/client/debugbar/hmr.js +37 -0
- package/dist/client/client/debugbar/index.js +29 -0
- package/dist/client/client/debugbar/model.js +133 -0
- package/dist/client/client/debugbar/network.js +173 -0
- package/dist/client/client/debugbar/profile.js +114 -0
- package/dist/client/client/index.js +34 -0
- package/dist/client/client/react/index.js +268 -0
- package/dist/client/client/realtime/AdaptiveRate.js +240 -0
- package/dist/client/client/realtime/BrowserWsTransport.js +57 -0
- package/dist/client/client/realtime/RealtimeClient.js +898 -0
- package/dist/client/client/realtime/localEvents.js +56 -0
- package/dist/client/client/realtime/notice.js +125 -0
- package/dist/client/client/realtime/observe.js +280 -0
- package/dist/client/client/roles/index.js +3 -0
- package/dist/client/client/roles/registry.js +97 -0
- package/dist/client/client/roles/roles.js +91 -0
- package/dist/client/client/shim/events.js +88 -0
- package/dist/client/client/shim/util.js +20 -0
- package/dist/client/client/svelte/index.js +319 -0
- package/dist/client/client/syslog/context.js +122 -0
- package/dist/client/client/syslog/errors.js +49 -0
- package/dist/client/client/syslog/uplink.js +106 -0
- package/dist/client/client/vue/index.js +321 -0
- package/dist/client/colors.js +63 -0
- package/dist/client/debugbar.standalone.js +4274 -0
- package/dist/client/realtime/IRealtimeTransport.js +32 -0
- package/dist/client/realtime/JsonRpcPeer.js +251 -0
- package/dist/client/realtime/channelRate.js +39 -0
- package/dist/client/realtime/platformChannels.js +155 -0
- package/dist/client/syslog/Pdu.js +224 -0
- package/dist/client/syslog/Syslog.js +1159 -0
- package/dist/client/syslog/drivers/pduFlow.js +106 -0
- package/dist/client/syslog/drivers/pduProtocol.js +28 -0
- package/dist/client/syslog/logColor.js +80 -0
- package/dist/client/types/src/Container.d.ts +221 -0
- package/dist/client/types/src/Event.d.ts +171 -0
- package/dist/client/types/src/FileClass.d.ts +184 -0
- package/dist/client/types/src/Service.d.ts +165 -0
- package/dist/client/types/src/Tools.d.ts +116 -0
- package/dist/client/types/src/client/ClientKernel.d.ts +90 -0
- package/dist/client/types/src/client/IClientKernel.d.ts +195 -0
- package/dist/client/types/src/client/angular/index.d.ts +273 -0
- package/dist/client/types/src/client/announce.d.ts +74 -0
- package/dist/client/types/src/client/debugbar/DebugBar.d.ts +279 -0
- package/dist/client/types/src/client/debugbar/format.d.ts +48 -0
- package/dist/client/types/src/client/debugbar/hmr.d.ts +16 -0
- package/dist/client/types/src/client/debugbar/index.d.ts +30 -0
- package/dist/client/types/src/client/debugbar/model.d.ts +158 -0
- package/dist/client/types/src/client/debugbar/network.d.ts +55 -0
- package/dist/client/types/src/client/debugbar/profile.d.ts +99 -0
- package/dist/client/types/src/client/index.d.ts +47 -0
- package/dist/client/types/src/client/react/index.d.ts +207 -0
- package/dist/client/types/src/client/realtime/AdaptiveRate.d.ts +138 -0
- package/dist/client/types/src/client/realtime/BrowserWsTransport.d.ts +27 -0
- package/dist/client/types/src/client/realtime/RealtimeClient.d.ts +573 -0
- package/dist/client/types/src/client/realtime/localEvents.d.ts +53 -0
- package/dist/client/types/src/client/realtime/notice.d.ts +70 -0
- package/dist/client/types/src/client/realtime/observe.d.ts +284 -0
- package/dist/client/types/src/client/roles/index.d.ts +15 -0
- package/dist/client/types/src/client/roles/registry.d.ts +72 -0
- package/dist/client/types/src/client/roles/roles.d.ts +68 -0
- package/dist/client/types/src/client/shim/cli-color.d.ts +2 -0
- package/dist/client/types/src/client/shim/events.d.ts +39 -0
- package/dist/client/types/src/client/shim/util.d.ts +14 -0
- package/dist/client/types/src/client/svelte/index.d.ts +216 -0
- package/dist/client/types/src/client/syslog/context.d.ts +76 -0
- package/dist/client/types/src/client/syslog/errors.d.ts +46 -0
- package/dist/client/types/src/client/syslog/uplink.d.ts +89 -0
- package/dist/client/types/src/client/transport/websocket.d.ts +5 -0
- package/dist/client/types/src/client/vue/index.d.ts +234 -0
- package/dist/client/types/src/colors.d.ts +32 -0
- package/dist/client/types/src/config/infra.d.ts +171 -0
- package/dist/client/types/src/kernel/bootReport.d.ts +112 -0
- package/dist/client/types/src/kernel/readinessRegistry.d.ts +104 -0
- package/dist/client/types/src/realtime/IRealtimeSocket.d.ts +142 -0
- package/dist/client/types/src/realtime/IRealtimeTransport.d.ts +50 -0
- package/dist/client/types/src/realtime/JsonRpcPeer.d.ts +251 -0
- package/dist/client/types/src/realtime/RealtimeEventMap.d.ts +269 -0
- package/dist/client/types/src/realtime/channelRate.d.ts +55 -0
- package/dist/client/types/src/realtime/platformChannels.d.ts +147 -0
- package/dist/client/types/src/syslog/Pdu.d.ts +134 -0
- package/dist/client/types/src/syslog/Syslog.d.ts +482 -0
- package/dist/client/types/src/syslog/drivers/ILogDriver.d.ts +177 -0
- package/dist/client/types/src/syslog/drivers/pduFlow.d.ts +53 -0
- package/dist/client/types/src/syslog/drivers/pduProtocol.d.ts +20 -0
- package/dist/client/types/src/syslog/logColor.d.ts +59 -0
- package/dist/client/types/src/types/ICliKernel.d.ts +28 -0
- package/dist/client/types/src/types/ICommand.d.ts +14 -0
- package/dist/client/types/src/types/IContainer.d.ts +35 -0
- package/dist/client/types/src/types/IKernel.d.ts +138 -0
- package/dist/client/types/src/types/IMcpTool.d.ts +157 -0
- package/dist/client/types/src/types/IModule.d.ts +73 -0
- package/dist/client/types/src/types/IPage.d.ts +119 -0
- package/dist/client/types/src/types/IService.d.ts +62 -0
- package/dist/client/types/src/types/ISyslog.d.ts +58 -0
- package/dist/client/types/src/types/ITransport.d.ts +5 -0
- package/dist/client/types/src/types/globals.d.ts +47 -0
- package/dist/node/Cli.js +750 -0
- package/dist/node/Container.js +367 -0
- package/dist/node/Error.js +309 -0
- package/dist/node/Event.js +198 -0
- package/dist/node/FileClass.js +308 -0
- package/dist/node/Nodefony.js +78 -0
- package/dist/node/Service.js +344 -0
- package/dist/node/Tools.js +205 -0
- package/dist/node/bin/resolveLocalCli.js +10 -0
- package/dist/node/bundler/index.js +103 -0
- package/dist/node/cli/agentTargets.js +461 -0
- package/dist/node/cli/aiMcp.js +553 -0
- package/dist/node/cli/aiMcpReport.js +129 -0
- package/dist/node/cli/aiSync.js +323 -0
- package/dist/node/cli/aiSyncReport.js +142 -0
- package/dist/node/cli/card.js +186 -0
- package/dist/node/cli/cardReport.js +110 -0
- package/dist/node/cli/completion.js +415 -0
- package/dist/node/cli/create.js +805 -0
- package/dist/node/cli/env.js +332 -0
- package/dist/node/cli/envReport.js +159 -0
- package/dist/node/cli/execPortable.js +60 -0
- package/dist/node/cli/gitHooks.js +191 -0
- package/dist/node/cli/gitHooksReport.js +119 -0
- package/dist/node/cli/globalFlags.js +67 -0
- package/dist/node/cli/helpReport.js +288 -0
- package/dist/node/cli/manPage.js +165 -0
- package/dist/node/cli/nodefonyBin.js +61 -0
- package/dist/node/cli/outdated.js +144 -0
- package/dist/node/cli/progress.js +555 -0
- package/dist/node/cli/projectRoot.js +32 -0
- package/dist/node/cli/promptPassword.js +44 -0
- package/dist/node/cli/prompts.js +86 -0
- package/dist/node/cli/scaffold/destination.js +92 -0
- package/dist/node/cli/scaffold/engine.js +2156 -0
- package/dist/node/cli/scaffold/entityFields.js +589 -0
- package/dist/node/cli/scaffold/format.js +243 -0
- package/dist/node/cli/scaffold/interactive.js +124 -0
- package/dist/node/cli/scaffold/moduleLayout.js +38 -0
- package/dist/node/cli/scaffold/reservedEntities.js +74 -0
- package/dist/node/cli/scaffold/spec.js +704 -0
- package/dist/node/cli/scaffold/steps.js +40 -0
- package/dist/node/cli/scaffold/userContractSource.js +133 -0
- package/dist/node/cli/scaffold/versions.js +57 -0
- package/dist/node/cli/scaffold/writer.js +172 -0
- package/dist/node/cli/startMenu.js +496 -0
- package/dist/node/cli/symbols.js +205 -0
- package/dist/node/cli/sysexits.js +34 -0
- package/dist/node/cli/tableReport.js +184 -0
- package/dist/node/cli/usageReport.js +144 -0
- package/dist/node/colors.js +63 -0
- package/dist/node/command/Builder.js +153 -0
- package/dist/node/command/Command.js +348 -0
- package/dist/node/config/configProvenance.js +101 -0
- package/dist/node/config/defaults.js +39 -0
- package/dist/node/config/defineConfig.js +129 -0
- package/dist/node/config/defineEnv.js +264 -0
- package/dist/node/config/envExample.js +41 -0
- package/dist/node/config/envOverride.js +423 -0
- package/dist/node/config/infra.js +163 -0
- package/dist/node/config/reactivity.js +23 -0
- package/dist/node/config/reservedEnv.js +118 -0
- package/dist/node/config/schema.js +134 -0
- package/dist/node/config/use.js +24 -0
- package/dist/node/finder/File.js +49 -0
- package/dist/node/finder/FileResult.js +86 -0
- package/dist/node/finder/Finder.js +201 -0
- package/dist/node/finder/Result.js +45 -0
- package/dist/node/index.js +121 -0
- package/dist/node/kernel/BootConfigurationError.js +54 -0
- package/dist/node/kernel/CliKernel.js +630 -0
- package/dist/node/kernel/Kernel.js +2198 -0
- package/dist/node/kernel/Module.js +453 -0
- package/dist/node/kernel/adminPlane/adminCaller.js +98 -0
- package/dist/node/kernel/adminPlane/adminRbac.js +51 -0
- package/dist/node/kernel/adminPlane/catalog.js +158 -0
- package/dist/node/kernel/adminPlane/executeAdmin.js +78 -0
- package/dist/node/kernel/checks/deep.js +335 -0
- package/dist/node/kernel/checks/freshness.js +139 -0
- package/dist/node/kernel/checks/gating.js +231 -0
- package/dist/node/kernel/checks/guards.js +232 -0
- package/dist/node/kernel/checks/lastBoot.js +136 -0
- package/dist/node/kernel/checks/live.js +330 -0
- package/dist/node/kernel/checks/packageDeps.js +292 -0
- package/dist/node/kernel/checks/readiness.js +153 -0
- package/dist/node/kernel/checks/renderReport.js +780 -0
- package/dist/node/kernel/checks/report.js +421 -0
- package/dist/node/kernel/checks/runDoctor.js +731 -0
- package/dist/node/kernel/checks/surface.js +364 -0
- package/dist/node/kernel/checks/walk.js +100 -0
- package/dist/node/kernel/checks/wiring.js +450 -0
- package/dist/node/kernel/commands/AiMcpCommand.js +65 -0
- package/dist/node/kernel/commands/AiSyncCommand.js +48 -0
- package/dist/node/kernel/commands/BuildCommand.js +49 -0
- package/dist/node/kernel/commands/CardCommand.js +50 -0
- package/dist/node/kernel/commands/ClusterCommand.js +58 -0
- package/dist/node/kernel/commands/CompletionCommand.js +31 -0
- package/dist/node/kernel/commands/CreateCommand.js +45 -0
- package/dist/node/kernel/commands/DevCommand.js +99 -0
- package/dist/node/kernel/commands/DoctorCommand.js +115 -0
- package/dist/node/kernel/commands/EnvCommand.js +52 -0
- package/dist/node/kernel/commands/GitHooksCommand.js +47 -0
- package/dist/node/kernel/commands/InspectCommand.js +153 -0
- package/dist/node/kernel/commands/InstallCommand.js +20 -0
- package/dist/node/kernel/commands/MenuCommand.js +261 -0
- package/dist/node/kernel/commands/OutdatedCommand.js +164 -0
- package/dist/node/kernel/commands/ProdCommand.js +60 -0
- package/dist/node/kernel/commands/StatusCommand.js +30 -0
- package/dist/node/kernel/commands/StopCommand.js +35 -0
- package/dist/node/kernel/commands/SymbolsCommand.js +45 -0
- package/dist/node/kernel/commands/runtimeLauncher.js +95 -0
- package/dist/node/kernel/decorators/kernelDecorator.js +110 -0
- package/dist/node/kernel/injector/injector.js +137 -0
- package/dist/node/kernel/injector/serviceOrder.js +106 -0
- package/dist/node/kernel/inspect/adminSubjects.js +194 -0
- package/dist/node/kernel/inspect/docOutline.js +86 -0
- package/dist/node/kernel/lifecycleTags.js +76 -0
- package/dist/node/kernel/moduleConfig.js +75 -0
- package/dist/node/kernel/moduleGating.js +68 -0
- package/dist/node/kernel/readinessRegistry.js +98 -0
- package/dist/node/kernel/resolveModuleEntry.js +61 -0
- package/dist/node/mcp/caller.js +40 -0
- package/dist/node/mcp/guard.js +51 -0
- package/dist/node/mcp/protocol.js +157 -0
- package/dist/node/mcp/server.js +216 -0
- package/dist/node/mcp/tools.js +861 -0
- package/dist/node/oauth/authorizationServer.js +221 -0
- package/dist/node/oauth/protectedResource.js +293 -0
- package/dist/node/package.js +4 -0
- package/dist/node/realtime/IRealtimeTransport.js +32 -0
- package/dist/node/realtime/JsonRpcPeer.js +251 -0
- package/dist/node/realtime/RealtimeEventMap.js +15 -0
- package/dist/node/realtime/channelRate.js +39 -0
- package/dist/node/realtime/platformChannels.js +155 -0
- package/dist/node/runtime/GcScheduler.js +92 -0
- package/dist/node/runtime/RequestContext.js +76 -0
- package/dist/node/runtime/bearer.js +84 -0
- package/dist/node/runtime/engineEnvironment.js +79 -0
- package/dist/node/runtime/loadEnv.js +105 -0
- package/dist/node/runtime/pageFacets.js +85 -0
- package/dist/node/runtime/pageFilters.js +103 -0
- package/dist/node/runtime/pageGuard.js +84 -0
- package/dist/node/runtime/pageQuery.js +160 -0
- package/dist/node/runtime/pageSort.js +114 -0
- package/dist/node/runtime/redact.js +43 -0
- package/dist/node/runtime/withTimeout.js +71 -0
- package/dist/node/service/cluster/ClusterManager.js +202 -0
- package/dist/node/service/cluster/ClusterProbeAggregator.js +120 -0
- package/dist/node/service/cluster/ClusterRelay.js +74 -0
- package/dist/node/service/cluster/clusterMaster.js +65 -0
- package/dist/node/service/cluster/clusterMessage.js +70 -0
- package/dist/node/service/cluster/cpuQuota.js +59 -0
- package/dist/node/service/cluster/instanceProbe.js +52 -0
- package/dist/node/service/cluster/podEnvironment.js +48 -0
- package/dist/node/service/cluster/processProbe.js +70 -0
- package/dist/node/service/cluster/richProcessProbe.js +115 -0
- package/dist/node/service/cluster/topology.js +71 -0
- package/dist/node/service/dev/BootReporter.js +490 -0
- package/dist/node/service/dev/DevSupervisor.js +1004 -0
- package/dist/node/service/dev/bootVerdict.js +158 -0
- package/dist/node/service/dev/detachedStart.js +372 -0
- package/dist/node/service/dev/devProcess.js +1137 -0
- package/dist/node/service/dev/devProjects.js +138 -0
- package/dist/node/service/dev/devStatusReport.js +395 -0
- package/dist/node/service/dev/devStop.js +263 -0
- package/dist/node/service/fetchService.js +35 -0
- package/dist/node/service/gitService.js +62 -0
- package/dist/node/syslog/Pdu.js +224 -0
- package/dist/node/syslog/Syslog.js +1159 -0
- package/dist/node/syslog/drivers/ClusterFileLogDriver.js +114 -0
- package/dist/node/syslog/drivers/FileLogDriver.js +127 -0
- package/dist/node/syslog/drivers/ILogDriver.js +26 -0
- package/dist/node/syslog/drivers/LokiLogDriver.js +144 -0
- package/dist/node/syslog/drivers/MemoryLogDriver.js +33 -0
- package/dist/node/syslog/drivers/OpenSearchLogDriver.js +159 -0
- package/dist/node/syslog/drivers/builtinLogDrivers.js +114 -0
- package/dist/node/syslog/drivers/filterPdus.js +71 -0
- package/dist/node/syslog/drivers/logDriverRegistry.js +83 -0
- package/dist/node/syslog/drivers/opensearchShared.js +17 -0
- package/dist/node/syslog/drivers/pduFlow.js +106 -0
- package/dist/node/syslog/drivers/pduProtocol.js +28 -0
- package/dist/node/syslog/httpFetch.js +43 -0
- package/dist/node/syslog/logColor.js +80 -0
- package/dist/node/syslog/sinks/FileSink.js +142 -0
- package/dist/node/syslog/transports/BatchingHttpTransport.js +98 -0
- package/dist/node/syslog/transports/ConsoleTransport.js +14 -0
- package/dist/node/syslog/transports/FileTransport.js +17 -0
- package/dist/node/syslog/transports/HttpTransport.js +44 -0
- package/dist/node/syslog/transports/LokiTransport.js +80 -0
- package/dist/node/syslog/transports/OpenSearchTransport.js +53 -0
- package/dist/node/syslog/transports/SyslogTransport.js +13 -0
- package/dist/node/syslog/transports/index.js +8 -0
- package/dist/node/testing/index.js +190 -0
- package/dist/types/Cli.d.ts +177 -0
- package/dist/types/Container.d.ts +221 -0
- package/dist/types/Error.d.ts +162 -0
- package/dist/types/Event.d.ts +171 -0
- package/dist/types/FileClass.d.ts +184 -0
- package/dist/types/Nodefony.d.ts +66 -0
- package/dist/types/Service.d.ts +165 -0
- package/dist/types/Tools.d.ts +116 -0
- package/dist/types/bin/resolveLocalCli.d.ts +49 -0
- package/dist/types/bundler/index.d.ts +66 -0
- package/dist/types/cli/agentTargets.d.ts +378 -0
- package/dist/types/cli/aiMcp.d.ts +239 -0
- package/dist/types/cli/aiMcpReport.d.ts +113 -0
- package/dist/types/cli/aiSync.d.ts +68 -0
- package/dist/types/cli/aiSyncReport.d.ts +149 -0
- package/dist/types/cli/card.d.ts +49 -0
- package/dist/types/cli/cardReport.d.ts +127 -0
- package/dist/types/cli/completion.d.ts +154 -0
- package/dist/types/cli/create.d.ts +177 -0
- package/dist/types/cli/env.d.ts +103 -0
- package/dist/types/cli/envReport.d.ts +153 -0
- package/dist/types/cli/execPortable.d.ts +54 -0
- package/dist/types/cli/gitHooks.d.ts +48 -0
- package/dist/types/cli/gitHooksReport.d.ts +101 -0
- package/dist/types/cli/globalFlags.d.ts +48 -0
- package/dist/types/cli/helpReport.d.ts +110 -0
- package/dist/types/cli/manPage.d.ts +21 -0
- package/dist/types/cli/nodefonyBin.d.ts +45 -0
- package/dist/types/cli/outdated.d.ts +119 -0
- package/dist/types/cli/progress.d.ts +349 -0
- package/dist/types/cli/projectRoot.d.ts +19 -0
- package/dist/types/cli/promptPassword.d.ts +22 -0
- package/dist/types/cli/prompts.d.ts +102 -0
- package/dist/types/cli/scaffold/destination.d.ts +70 -0
- package/dist/types/cli/scaffold/engine.d.ts +545 -0
- package/dist/types/cli/scaffold/entityFields.d.ts +238 -0
- package/dist/types/cli/scaffold/format.d.ts +78 -0
- package/dist/types/cli/scaffold/interactive.d.ts +11 -0
- package/dist/types/cli/scaffold/moduleLayout.d.ts +69 -0
- package/dist/types/cli/scaffold/reservedEntities.d.ts +49 -0
- package/dist/types/cli/scaffold/spec.d.ts +159 -0
- package/dist/types/cli/scaffold/steps.d.ts +24 -0
- package/dist/types/cli/scaffold/userContractSource.d.ts +86 -0
- package/dist/types/cli/scaffold/versions.d.ts +14 -0
- package/dist/types/cli/scaffold/writer.d.ts +100 -0
- package/dist/types/cli/startMenu.d.ts +195 -0
- package/dist/types/cli/symbols.d.ts +84 -0
- package/dist/types/cli/sysexits.d.ts +31 -0
- package/dist/types/cli/tableReport.d.ts +44 -0
- package/dist/types/cli/usageReport.d.ts +108 -0
- package/dist/types/client/ClientKernel.d.ts +90 -0
- package/dist/types/client/IClientKernel.d.ts +195 -0
- package/dist/types/client/angular/index.d.ts +273 -0
- package/dist/types/client/announce.d.ts +74 -0
- package/dist/types/client/debugbar/DebugBar.d.ts +279 -0
- package/dist/types/client/debugbar/format.d.ts +48 -0
- package/dist/types/client/debugbar/hmr.d.ts +16 -0
- package/dist/types/client/debugbar/index.d.ts +30 -0
- package/dist/types/client/debugbar/model.d.ts +158 -0
- package/dist/types/client/debugbar/network.d.ts +55 -0
- package/dist/types/client/debugbar/profile.d.ts +99 -0
- package/dist/types/client/index.d.ts +47 -0
- package/dist/types/client/react/index.d.ts +207 -0
- package/dist/types/client/realtime/AdaptiveRate.d.ts +138 -0
- package/dist/types/client/realtime/BrowserWsTransport.d.ts +27 -0
- package/dist/types/client/realtime/RealtimeClient.d.ts +573 -0
- package/dist/types/client/realtime/localEvents.d.ts +53 -0
- package/dist/types/client/realtime/notice.d.ts +70 -0
- package/dist/types/client/realtime/observe.d.ts +284 -0
- package/dist/types/client/roles/index.d.ts +15 -0
- package/dist/types/client/roles/registry.d.ts +72 -0
- package/dist/types/client/roles/roles.d.ts +68 -0
- package/dist/types/client/shim/cli-color.d.ts +2 -0
- package/dist/types/client/shim/events.d.ts +39 -0
- package/dist/types/client/shim/util.d.ts +14 -0
- package/dist/types/client/svelte/index.d.ts +216 -0
- package/dist/types/client/syslog/context.d.ts +76 -0
- package/dist/types/client/syslog/errors.d.ts +46 -0
- package/dist/types/client/syslog/uplink.d.ts +89 -0
- package/dist/types/client/transport/websocket.d.ts +5 -0
- package/dist/types/client/vue/index.d.ts +234 -0
- package/dist/types/colors.d.ts +32 -0
- package/dist/types/command/Builder.d.ts +47 -0
- package/dist/types/command/Command.d.ts +268 -0
- package/dist/types/config/configMeta.d.ts +53 -0
- package/dist/types/config/configProvenance.d.ts +58 -0
- package/dist/types/config/defaults.d.ts +33 -0
- package/dist/types/config/defineConfig.d.ts +70 -0
- package/dist/types/config/defineEnv.d.ts +170 -0
- package/dist/types/config/envExample.d.ts +23 -0
- package/dist/types/config/envOverride.d.ts +236 -0
- package/dist/types/config/index.d.ts +23 -0
- package/dist/types/config/infra.d.ts +171 -0
- package/dist/types/config/reactivity.d.ts +36 -0
- package/dist/types/config/reservedEnv.d.ts +145 -0
- package/dist/types/config/schema.d.ts +113 -0
- package/dist/types/config/types.d.ts +374 -0
- package/dist/types/config/use.d.ts +80 -0
- package/dist/types/finder/File.d.ts +26 -0
- package/dist/types/finder/FileResult.d.ts +14 -0
- package/dist/types/finder/Finder.d.ts +51 -0
- package/dist/types/finder/Result.d.ts +10 -0
- package/dist/types/index.d.ts +205 -0
- package/dist/types/kernel/BootConfigurationError.d.ts +50 -0
- package/dist/types/kernel/CliKernel.d.ts +289 -0
- package/dist/types/kernel/Kernel.d.ts +1255 -0
- package/dist/types/kernel/Module.d.ts +326 -0
- package/dist/types/kernel/adminPlane/adminCaller.d.ts +105 -0
- package/dist/types/kernel/adminPlane/adminRbac.d.ts +44 -0
- package/dist/types/kernel/adminPlane/catalog.d.ts +122 -0
- package/dist/types/kernel/adminPlane/executeAdmin.d.ts +99 -0
- package/dist/types/kernel/bootReport.d.ts +112 -0
- package/dist/types/kernel/checks/deep.d.ts +122 -0
- package/dist/types/kernel/checks/freshness.d.ts +49 -0
- package/dist/types/kernel/checks/gating.d.ts +134 -0
- package/dist/types/kernel/checks/guards.d.ts +57 -0
- package/dist/types/kernel/checks/lastBoot.d.ts +189 -0
- package/dist/types/kernel/checks/live.d.ts +110 -0
- package/dist/types/kernel/checks/packageDeps.d.ts +44 -0
- package/dist/types/kernel/checks/readiness.d.ts +97 -0
- package/dist/types/kernel/checks/renderReport.d.ts +107 -0
- package/dist/types/kernel/checks/report.d.ts +414 -0
- package/dist/types/kernel/checks/runDoctor.d.ts +361 -0
- package/dist/types/kernel/checks/surface.d.ts +148 -0
- package/dist/types/kernel/checks/walk.d.ts +45 -0
- package/dist/types/kernel/checks/wiring.d.ts +54 -0
- package/dist/types/kernel/commands/AiMcpCommand.d.ts +39 -0
- package/dist/types/kernel/commands/AiSyncCommand.d.ts +28 -0
- package/dist/types/kernel/commands/BuildCommand.d.ts +13 -0
- package/dist/types/kernel/commands/CardCommand.d.ts +34 -0
- package/dist/types/kernel/commands/ClusterCommand.d.ts +29 -0
- package/dist/types/kernel/commands/CompletionCommand.d.ts +17 -0
- package/dist/types/kernel/commands/CreateCommand.d.ts +16 -0
- package/dist/types/kernel/commands/DevCommand.d.ts +40 -0
- package/dist/types/kernel/commands/DoctorCommand.d.ts +55 -0
- package/dist/types/kernel/commands/EnvCommand.d.ts +35 -0
- package/dist/types/kernel/commands/GitHooksCommand.d.ts +27 -0
- package/dist/types/kernel/commands/InspectCommand.d.ts +59 -0
- package/dist/types/kernel/commands/InstallCommand.d.ts +7 -0
- package/dist/types/kernel/commands/MenuCommand.d.ts +58 -0
- package/dist/types/kernel/commands/OutdatedCommand.d.ts +47 -0
- package/dist/types/kernel/commands/ProdCommand.d.ts +29 -0
- package/dist/types/kernel/commands/StatusCommand.d.ts +17 -0
- package/dist/types/kernel/commands/StopCommand.d.ts +17 -0
- package/dist/types/kernel/commands/SymbolsCommand.d.ts +29 -0
- package/dist/types/kernel/commands/runtimeLauncher.d.ts +76 -0
- package/dist/types/kernel/decorators/kernelDecorator.d.ts +76 -0
- package/dist/types/kernel/injector/injector.d.ts +47 -0
- package/dist/types/kernel/injector/serviceOrder.d.ts +29 -0
- package/dist/types/kernel/inspect/adminSubjects.d.ts +169 -0
- package/dist/types/kernel/inspect/docOutline.d.ts +53 -0
- package/dist/types/kernel/lifecycleTags.d.ts +79 -0
- package/dist/types/kernel/moduleConfig.d.ts +35 -0
- package/dist/types/kernel/moduleGating.d.ts +78 -0
- package/dist/types/kernel/readinessRegistry.d.ts +104 -0
- package/dist/types/kernel/resolveModuleEntry.d.ts +46 -0
- package/dist/types/mcp/caller.d.ts +55 -0
- package/dist/types/mcp/guard.d.ts +66 -0
- package/dist/types/mcp/protocol.d.ts +163 -0
- package/dist/types/mcp/server.d.ts +70 -0
- package/dist/types/mcp/tools.d.ts +209 -0
- package/dist/types/oauth/authorizationServer.d.ts +204 -0
- package/dist/types/oauth/protectedResource.d.ts +339 -0
- package/dist/types/realtime/IRealtimeSocket.d.ts +142 -0
- package/dist/types/realtime/IRealtimeTransport.d.ts +50 -0
- package/dist/types/realtime/JsonRpcPeer.d.ts +251 -0
- package/dist/types/realtime/RealtimeEventMap.d.ts +269 -0
- package/dist/types/realtime/channelRate.d.ts +55 -0
- package/dist/types/realtime/platformChannels.d.ts +147 -0
- package/dist/types/runtime/GcScheduler.d.ts +96 -0
- package/dist/types/runtime/RequestContext.d.ts +152 -0
- package/dist/types/runtime/bearer.d.ts +88 -0
- package/dist/types/runtime/engineEnvironment.d.ts +115 -0
- package/dist/types/runtime/loadEnv.d.ts +86 -0
- package/dist/types/runtime/pageFacets.d.ts +104 -0
- package/dist/types/runtime/pageFilters.d.ts +139 -0
- package/dist/types/runtime/pageGuard.d.ts +78 -0
- package/dist/types/runtime/pageQuery.d.ts +138 -0
- package/dist/types/runtime/pageSort.d.ts +86 -0
- package/dist/types/runtime/redact.d.ts +27 -0
- package/dist/types/runtime/withTimeout.d.ts +51 -0
- package/dist/types/service/cluster/ClusterManager.d.ts +112 -0
- package/dist/types/service/cluster/ClusterProbeAggregator.d.ts +68 -0
- package/dist/types/service/cluster/ClusterRelay.d.ts +57 -0
- package/dist/types/service/cluster/clusterMaster.d.ts +40 -0
- package/dist/types/service/cluster/clusterMessage.d.ts +94 -0
- package/dist/types/service/cluster/cpuQuota.d.ts +37 -0
- package/dist/types/service/cluster/instanceProbe.d.ts +82 -0
- package/dist/types/service/cluster/podEnvironment.d.ts +35 -0
- package/dist/types/service/cluster/processProbe.d.ts +53 -0
- package/dist/types/service/cluster/richProcessProbe.d.ts +77 -0
- package/dist/types/service/cluster/topology.d.ts +64 -0
- package/dist/types/service/dev/BootReporter.d.ts +67 -0
- package/dist/types/service/dev/DevSupervisor.d.ts +117 -0
- package/dist/types/service/dev/bootVerdict.d.ts +99 -0
- package/dist/types/service/dev/detachedStart.d.ts +164 -0
- package/dist/types/service/dev/devProcess.d.ts +638 -0
- package/dist/types/service/dev/devProjects.d.ts +121 -0
- package/dist/types/service/dev/devStatusReport.d.ts +141 -0
- package/dist/types/service/dev/devStop.d.ts +57 -0
- package/dist/types/service/fetchService.d.ts +29 -0
- package/dist/types/service/gitService.d.ts +24 -0
- package/dist/types/syslog/Pdu.d.ts +134 -0
- package/dist/types/syslog/Syslog.d.ts +482 -0
- package/dist/types/syslog/drivers/ClusterFileLogDriver.d.ts +40 -0
- package/dist/types/syslog/drivers/FileLogDriver.d.ts +55 -0
- package/dist/types/syslog/drivers/ILogDriver.d.ts +177 -0
- package/dist/types/syslog/drivers/LokiLogDriver.d.ts +44 -0
- package/dist/types/syslog/drivers/MemoryLogDriver.d.ts +20 -0
- package/dist/types/syslog/drivers/OpenSearchLogDriver.d.ts +40 -0
- package/dist/types/syslog/drivers/builtinLogDrivers.d.ts +43 -0
- package/dist/types/syslog/drivers/filterPdus.d.ts +21 -0
- package/dist/types/syslog/drivers/logDriverRegistry.d.ts +100 -0
- package/dist/types/syslog/drivers/opensearchShared.d.ts +11 -0
- package/dist/types/syslog/drivers/pduFlow.d.ts +53 -0
- package/dist/types/syslog/drivers/pduProtocol.d.ts +20 -0
- package/dist/types/syslog/httpFetch.d.ts +48 -0
- package/dist/types/syslog/logColor.d.ts +59 -0
- package/dist/types/syslog/sinks/FileSink.d.ts +78 -0
- package/dist/types/syslog/transports/BatchingHttpTransport.d.ts +59 -0
- package/dist/types/syslog/transports/ConsoleTransport.d.ts +8 -0
- package/dist/types/syslog/transports/FileTransport.d.ts +13 -0
- package/dist/types/syslog/transports/HttpTransport.d.ts +15 -0
- package/dist/types/syslog/transports/LokiTransport.d.ts +45 -0
- package/dist/types/syslog/transports/OpenSearchTransport.d.ts +40 -0
- package/dist/types/syslog/transports/SyslogTransport.d.ts +9 -0
- package/dist/types/syslog/transports/index.d.ts +12 -0
- package/dist/types/testing/index.d.ts +197 -0
- package/dist/types/types/IAdminApi.d.ts +246 -0
- package/dist/types/types/ICliKernel.d.ts +28 -0
- package/dist/types/types/ICommand.d.ts +14 -0
- package/dist/types/types/IContainer.d.ts +35 -0
- package/dist/types/types/IIdempotencyStore.d.ts +159 -0
- package/dist/types/types/IKernel.d.ts +138 -0
- package/dist/types/types/IMcpTool.d.ts +157 -0
- package/dist/types/types/IModule.d.ts +73 -0
- package/dist/types/types/IModuleManifest.d.ts +49 -0
- package/dist/types/types/IPage.d.ts +119 -0
- package/dist/types/types/IService.d.ts +62 -0
- package/dist/types/types/ISyslog.d.ts +58 -0
- package/dist/types/types/ITransport.d.ts +5 -0
- package/dist/types/types/globals.d.ts +47 -0
- package/docs/angular-services.md +318 -0
- package/docs/catalogue.md +184 -0
- package/docs/cli.md +369 -0
- package/docs/client.md +616 -0
- package/docs/debugbar.md +218 -0
- package/docs/environnement.md +308 -0
- package/docs/index.md +388 -0
- package/docs/kernel.md +670 -0
- package/docs/progression.md +228 -0
- package/docs/react-hooks.md +686 -0
- package/docs/request-context.md +507 -0
- package/docs/service.md +590 -0
- package/docs/svelte-reactivite.md +293 -0
- package/docs/syslog.md +848 -0
- package/docs/testing.md +203 -0
- package/docs/vue-composables.md +255 -0
- package/man/nodefony.1 +152 -0
- package/package.json +163 -83
- package/templates/app/agents/AGENTS.md.tpl +967 -0
- package/templates/app/agents/POINTEUR.md.tpl +12 -0
- package/templates/app/base/Dockerfile.tpl +104 -0
- package/templates/app/base/README.md.tpl +314 -0
- package/templates/app/base/dockerignore.tpl +28 -0
- package/templates/app/base/env.ts.tpl +130 -0
- package/templates/app/base/gitattributes.tpl +28 -0
- package/templates/app/base/github/workflows/ci.yml.tpl +91 -0
- package/templates/app/base/gitignore.tpl +46 -0
- package/templates/app/base/gitlab-ci.yml.tpl +42 -0
- package/templates/app/base/index.ts.tpl +69 -0
- package/templates/app/base/nodefony.config.ts.tpl +342 -0
- package/templates/app/base/oxlintrc.json.tpl +127 -0
- package/templates/app/base/package.json.tpl +75 -0
- package/templates/app/base/prettierignore.tpl +24 -0
- package/templates/app/base/prettierrc.json.tpl +12 -0
- package/templates/app/base/rolldown.config.ts.tpl +8 -0
- package/templates/app/base/tests/config.test.ts.tpl +29 -0
- package/templates/app/base/tests/e2e.setup.ts.tpl +181 -0
- package/templates/app/base/tests/e2e.test.ts.tpl +105 -0
- package/templates/app/base/tests/migrations.e2e.test.ts.tpl +579 -0
- package/templates/app/base/tsconfig.json.tpl +47 -0
- package/templates/app/base/vitest.config.ts.tpl +88 -0
- package/templates/app/base/vitest.e2e.config.ts.tpl +39 -0
- package/templates/app/complete/compose.yaml.tpl +328 -0
- package/templates/app/complete/deploy/migrate-job.yaml.tpl +100 -0
- package/templates/app/complete/docker/db/init-nodefony-e2e.sql.tpl +30 -0
- package/templates/app/complete/docker/grafana/provisioning/datasources/loki.yaml.tpl +15 -0
- package/templates/app/complete/env.local.tpl +11 -0
- package/templates/app/complete/env.tpl +53 -0
- package/templates/app/complete/nodefony/entity/User.ts.tpl +69 -0
- package/templates/app/complete/nodefony/security/provisionUsers.ts.tpl +124 -0
- package/templates/app/complete/nodefony/service/AppBannerService.ts.tpl +98 -0
- package/templates/app/complete/nodefony/service/AppInfoService.ts.tpl +85 -0
- package/templates/app/frontend/angular/frontend/src/accent.css.tpl +34 -0
- package/templates/app/frontend/angular/frontend/src/app/app.component.ts.tpl +400 -0
- package/templates/app/frontend/react/frontend/src/App.tsx.tpl +421 -0
- package/templates/app/frontend/react/frontend/src/accent.css.tpl +30 -0
- package/templates/app/frontend/shared/frontend/src/brand.ts.tpl +3 -0
- package/templates/app/frontend/shared/frontend/src/showcase.css.tpl +224 -0
- package/templates/app/frontend/shared/nodefony/controllers/AppController.ts.tpl +45 -0
- package/templates/app/frontend/svelte/frontend/src/App.svelte.tpl +371 -0
- package/templates/app/frontend/svelte/frontend/src/accent.css.tpl +34 -0
- package/templates/app/frontend/vue/frontend/src/App.vue.tpl +367 -0
- package/templates/app/frontend/vue/frontend/src/accent.css.tpl +34 -0
- package/templates/app/home/nodefony/controllers/HomeController.ts.tpl +38 -0
- package/templates/command/nodefony/command/__NAME__.ts.tpl +132 -0
- package/templates/controller/duplex/nodefony/controllers/__NAME__.ts.tpl +188 -0
- package/templates/controller/example/nodefony/controllers/__NAME__.ts.tpl +348 -0
- package/templates/controller/hello/nodefony/controllers/__NAME__.ts.tpl +143 -0
- package/templates/controller/realtime/nodefony/controllers/__NAME__.ts.tpl +153 -0
- package/templates/controller/realtime/tests/__KEBAB__-realtime.test.ts.tpl +79 -0
- package/templates/controller/rest/nodefony/controllers/__NAME__.ts.tpl +159 -0
- package/templates/entity/base/nodefony/entity/__PASCAL__.schema.ts.tpl +31 -0
- package/templates/entity/base/nodefony/entity/__PASCAL__.ts.tpl +68 -0
- package/templates/entity/controller/nodefony/controllers/__PASCAL__Controller.ts.tpl +335 -0
- package/templates/entity/service/nodefony/service/__PASCAL__Service.ts.tpl +126 -0
- package/templates/entity/tests/tests/__KEBAB__.e2e.test.ts.tpl +358 -0
- package/templates/entity/tests/tests/__KEBAB__.test.ts.tpl +87 -0
- package/templates/front/angular/frontend/src/app/app.component.ts.tpl +30 -0
- package/templates/front/base/nodefony/controllers/__NAME__.ts.tpl +60 -0
- package/templates/front/react/frontend/src/App.tsx.tpl +26 -0
- package/templates/front/svelte/frontend/src/App.svelte.tpl +19 -0
- package/templates/front/vue/frontend/src/App.vue.tpl +23 -0
- package/templates/module/ai/AGENTS.md.tpl +71 -0
- package/templates/module/base/README.md.tpl +62 -0
- package/templates/module/base/docs/index.md.tpl +55 -0
- package/templates/module/base/index.ts.tpl +50 -0
- package/templates/module/base/nodefony/config/config.ts.tpl +60 -0
- package/templates/module/base/nodefony/config/defineModuleConfig.ts.tpl +55 -0
- package/templates/module/base/nodefony/src/errors/__PASCAL__Error.ts.tpl +20 -0
- package/templates/module/base/package.json.tpl +53 -0
- package/templates/module/base/rolldown.config.ts.tpl +14 -0
- package/templates/module/base/tests/__KEBAB__.test.ts.tpl +39 -0
- package/templates/module/base/tsconfig.json.tpl +42 -0
- package/templates/module/base/vitest.config.ts.tpl +27 -0
- package/templates/module/packages/CLAUDE.md.tpl +51 -0
- package/templates/module/packages/MEMORY.md.tpl +39 -0
- package/templates/module/packages/tsconfig.declarations.json.tpl +19 -0
- package/templates/module/packages/tsconfig.tests.json.tpl +11 -0
- package/templates/module/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +14 -0
- package/templates/module/service/nodefony/interfaces/index.ts.tpl +1 -0
- package/templates/module/service/nodefony/service/__PASCAL__Service.ts.tpl +116 -0
- package/templates/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +19 -0
- package/templates/service/nodefony/service/__PASCAL__Service.ts.tpl +136 -0
- package/templates/service/tests/__PASCAL__Service.test.ts.tpl +53 -0
- package/templates/shared/front-entry/angular/frontend/src/main.ts.tpl +17 -0
- package/templates/shared/front-entry/react/frontend/src/main.tsx.tpl +11 -0
- package/templates/shared/front-entry/svelte/frontend/src/main.ts.tpl +13 -0
- package/templates/shared/front-entry/vue/frontend/src/main.ts.tpl +12 -0
- package/templates/shared/front-registrar/nodefony/frontend/register__PASCAL__Entry.ts.tpl +40 -0
- package/templates/shared/front-shell/frontend/index.html.tpl +39 -0
- package/templates/shared/ng-app-tsconfig/frontend/tsconfig.app.json.tpl +18 -0
- package/templates/shared/svelte-shim/frontend/src/env.d.ts.tpl +12 -0
- package/templates/shared/vue-shim/frontend/src/env.d.ts.tpl +15 -0
- package/.yarnclean +0 -45
- package/CHANGELOG.md +0 -406
- package/autoloader.es6 +0 -253
- package/builder.es6 +0 -366
- package/cli/builder/bundles/bundle.js +0 -328
- package/cli/builder/bundles/controller.js +0 -73
- package/cli/builder/bundles/users-bundle/.yarnclean +0 -45
- package/cli/builder/bundles/users-bundle/Command/fixtureTask.js +0 -47
- package/cli/builder/bundles/users-bundle/Command/usersCommand.js +0 -105
- package/cli/builder/bundles/users-bundle/Entity/mongoose/userEntity.js +0 -168
- package/cli/builder/bundles/users-bundle/Entity/sequelize/userEntity.js +0 -231
- package/cli/builder/bundles/users-bundle/Fixtures/users.js +0 -117
- package/cli/builder/bundles/users-bundle/Fixtures/usersFixtures.js +0 -114
- package/cli/builder/bundles/users-bundle/Resources/config/config.js +0 -90
- package/cli/builder/bundles/users-bundle/Resources/config/routing.js +0 -17
- package/cli/builder/bundles/users-bundle/Resources/config/security.js +0 -96
- package/cli/builder/bundles/users-bundle/Resources/config/services.js +0 -7
- package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.dev.config.js +0 -13
- package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.prod.config.js +0 -31
- package/cli/builder/bundles/users-bundle/Resources/config/webpack.config.js +0 -146
- package/cli/builder/bundles/users-bundle/Resources/js/users.js +0 -153
- package/cli/builder/bundles/users-bundle/Resources/public/favicon.ico +0 -0
- package/cli/builder/bundles/users-bundle/Resources/public/images/users-logo.png +0 -0
- package/cli/builder/bundles/users-bundle/Resources/scss/awesome/font-awesome.config.js +0 -11
- package/cli/builder/bundles/users-bundle/Resources/scss/custom.scss +0 -23
- package/cli/builder/bundles/users-bundle/Resources/scss/users.scss +0 -59
- package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/login.js +0 -235
- package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/users.js +0 -232
- package/cli/builder/bundles/users-bundle/Resources/translations/login.en_en.yml +0 -14
- package/cli/builder/bundles/users-bundle/Resources/translations/login.fr_fr.yml +0 -14
- package/cli/builder/bundles/users-bundle/Resources/translations/users.en_en.yml +0 -35
- package/cli/builder/bundles/users-bundle/Resources/translations/users.fr_fr.yml +0 -36
- package/cli/builder/bundles/users-bundle/Resources/views/base.html.twig +0 -32
- package/cli/builder/bundles/users-bundle/Resources/views/footer.html.twig +0 -7
- package/cli/builder/bundles/users-bundle/Resources/views/header.html.twig +0 -90
- package/cli/builder/bundles/users-bundle/Resources/views/login/login.html.twig +0 -43
- package/cli/builder/bundles/users-bundle/Resources/views/users/createUser.html.twig +0 -296
- package/cli/builder/bundles/users-bundle/Resources/views/users/readUsers.html.twig +0 -94
- package/cli/builder/bundles/users-bundle/controller/api/graphql/graphqlController.js +0 -56
- package/cli/builder/bundles/users-bundle/controller/api/graphql/userResolver.js +0 -121
- package/cli/builder/bundles/users-bundle/controller/api/graphql/usertype.js +0 -58
- package/cli/builder/bundles/users-bundle/controller/api/openapi/loginApiController.js +0 -210
- package/cli/builder/bundles/users-bundle/controller/api/openapi/restUserController.js +0 -244
- package/cli/builder/bundles/users-bundle/controller/loginController.js +0 -91
- package/cli/builder/bundles/users-bundle/controller/usersController.js +0 -332
- package/cli/builder/bundles/users-bundle/package.json +0 -58
- package/cli/builder/bundles/users-bundle/readme.md +0 -360
- package/cli/builder/bundles/users-bundle/services/usersService.js +0 -411
- package/cli/builder/bundles/users-bundle/src/providers/mongoose/userProvider.js +0 -47
- package/cli/builder/bundles/users-bundle/src/providers/sequelize/userProvider.js +0 -48
- package/cli/builder/bundles/users-bundle/tests/loginTest.js +0 -182
- package/cli/builder/bundles/users-bundle/usersBundle.js +0 -26
- package/cli/builder/microService/microService.js +0 -261
- package/cli/builder/microService/skeletons/.editorconfig +0 -18
- package/cli/builder/microService/skeletons/.env-cmdrc.js +0 -32
- package/cli/builder/microService/skeletons/.jshintrc +0 -37
- package/cli/builder/microService/skeletons/README.md +0 -117
- package/cli/builder/microService/skeletons/bin/bash/hello.sh +0 -5
- package/cli/builder/microService/skeletons/bin/cli +0 -13
- package/cli/builder/microService/skeletons/bin/python/hello.py +0 -20
- package/cli/builder/microService/skeletons/config/config.js +0 -29
- package/cli/builder/microService/skeletons/config/pm2.config.js +0 -72
- package/cli/builder/microService/skeletons/config/webpack/webpack.config.dev.js +0 -8
- package/cli/builder/microService/skeletons/config/webpack/webpack.config.prod.js +0 -25
- package/cli/builder/microService/skeletons/config/webpack.config.js +0 -114
- package/cli/builder/microService/skeletons/package.json +0 -76
- package/cli/builder/microService/skeletons/src/browser/index.css +0 -3
- package/cli/builder/microService/skeletons/src/browser/index.js +0 -16
- package/cli/builder/microService/skeletons/src/browser/socketio.js +0 -46
- package/cli/builder/microService/skeletons/src/cli/cli.js +0 -224
- package/cli/builder/microService/skeletons/src/cli/menu.js +0 -28
- package/cli/builder/microService/skeletons/src/n-api/README.md +0 -1
- package/cli/builder/microService/skeletons/src/n-api/binding.gyp +0 -14
- package/cli/builder/microService/skeletons/src/n-api/hello.cc +0 -14
- package/cli/builder/microService/skeletons/src/n-api/hello.js +0 -23
- package/cli/builder/microService/skeletons/src/n-api/package.json +0 -15
- package/cli/builder/microService/skeletons/src/node/examples/index.js +0 -120
- package/cli/builder/microService/skeletons/src/node/index.js +0 -102
- package/cli/builder/microService/skeletons/src/node/services/markdown/markdown.js +0 -27
- package/cli/builder/microService/skeletons/src/node/services/servers/http.js +0 -45
- package/cli/builder/microService/skeletons/src/node/services/servers/https.js +0 -44
- package/cli/builder/microService/skeletons/src/node/services/socketio/socketio.js +0 -46
- package/cli/builder/microService/skeletons/src/node/services/syscall/syscall.js +0 -111
- package/cli/builder/microService/skeletons/src/node/services/worker/thread.js +0 -59
- package/cli/builder/microService/skeletons/src/node/services/worker/worker.js +0 -60
- package/cli/builder/microService/skeletons/src/templates/base.html +0 -12
- package/cli/builder/microService/skeletons/src/templates/socket.html +0 -23
- package/cli/builder/microService/skeletons/tests/unit/serviceTest.js +0 -30
- package/cli/builder/project/project.js +0 -474
- package/cli/builder/project/skeletons/README.md +0 -778
- package/cli/builder/project/skeletons/bin/dev-deploy.sh +0 -5
- package/cli/builder/project/skeletons/bin/generateCertificates.sh.skeleton +0 -180
- package/cli/builder/project/skeletons/bin/prod-deploy.sh +0 -3
- package/cli/builder/project/skeletons/config/config.js.skeleton +0 -178
- package/cli/builder/project/skeletons/config/openssl/ca/openssl.cnf.skeleton +0 -150
- package/cli/builder/project/skeletons/config/openssl/ca_intermediate/openssl.cnf.skeleton +0 -152
- package/cli/builder/project/skeletons/config/pm2.config.js.skeleton +0 -62
- package/cli/builder/project/skeletons/documentation.html.twig +0 -24
- package/cli/builder/project/skeletons/editorconfig.skeleton +0 -18
- package/cli/builder/project/skeletons/eslintignore.skeleton +0 -15
- package/cli/builder/project/skeletons/eslintrc.js.skeleton +0 -97
- package/cli/builder/project/skeletons/gitignore.skeleton +0 -32
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.37.entity-user.js +0 -137
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.38.entity-session.js +0 -97
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.39.entity-requests.js +0 -115
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.40.entity-jwts.js +0 -97
- package/cli/builder/project/skeletons/migrations/migrations.skeleton.js +0 -101
- package/cli/builder/project/skeletons/package.json.twig +0 -71
- package/cli/builder/react/reactBuilder.js +0 -224
- package/cli/builder/react/skeletons/app/Resources/databases/nodefony.db +0 -0
- package/cli/builder/react/skeletons/app/Resources/translations/messages.en_en.yml +0 -5
- package/cli/builder/react/skeletons/app/Resources/translations/messages.fr_fr.yml +0 -5
- package/cli/builder/react/skeletons/app/Resources/views/base.html.twig +0 -33
- package/cli/builder/react/skeletons/app/config/config.js +0 -392
- package/cli/builder/react/skeletons/app/config/routing.js +0 -10
- package/cli/builder/react/skeletons/app/config/security.js +0 -74
- package/cli/builder/react/skeletons/app/controller/appController.js +0 -22
- package/cli/builder/sandbox/sandBoxBuilder.js +0 -610
- package/cli/builder/sandbox/skeletons/Resources/css/entry.css +0 -48
- package/cli/builder/sandbox/skeletons/Resources/js/entry.js +0 -60
- package/cli/builder/sandbox/skeletons/Resources/public/manifest.json +0 -32
- package/cli/builder/sandbox/skeletons/Resources/translations/messages.en_en.yml +0 -5
- package/cli/builder/sandbox/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
- package/cli/builder/sandbox/skeletons/Resources/views/base.html.twig +0 -46
- package/cli/builder/sandbox/skeletons/Resources/views/index.html.twig +0 -34
- package/cli/builder/sandbox/skeletons/bootstrap/custom.scss +0 -27
- package/cli/builder/sandbox/skeletons/bootstrap/entry.scss +0 -60
- package/cli/builder/sandbox/skeletons/workbox/templates/index.html.twig +0 -32
- package/cli/builder/sandbox/skeletons/workbox/workers/service-worker.js +0 -196
- package/cli/builder/skeletons/Resources/public/favicon.ico +0 -0
- package/cli/builder/skeletons/Resources/public/images/app-logo.png +0 -0
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.json.twig +0 -24
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.json.twig +0 -20
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.json.twig +0 -20
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/500.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/base.html.twig +0 -30
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.json.twig +0 -24
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/footer.html.twig +0 -33
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/header.html.twig +0 -6
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.html.twig +0 -6
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.json.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.html.twig +0 -125
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.json.twig +0 -5
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.json.twig +0 -24
- package/cli/builder/skeletons/app/appKernel.js +0 -133
- package/cli/builder/skeletons/binding/binding.cc +0 -26
- package/cli/builder/skeletons/binding/binding.skeleton +0 -8
- package/cli/builder/skeletons/bundle/bundleClass.js +0 -37
- package/cli/builder/skeletons/command/commandClass.js +0 -11
- package/cli/builder/skeletons/command/taskClass.js +0 -20
- package/cli/builder/skeletons/config/config.js +0 -138
- package/cli/builder/skeletons/config/nodefony/elastic-bundle.js +0 -37
- package/cli/builder/skeletons/config/nodefony/framework-bundle.js +0 -22
- package/cli/builder/skeletons/config/nodefony/http-bundle.js +0 -104
- package/cli/builder/skeletons/config/nodefony/mail-bundle.js +0 -44
- package/cli/builder/skeletons/config/nodefony/mongoose-bundle.js +0 -51
- package/cli/builder/skeletons/config/nodefony/monitoring-bundle.js +0 -34
- package/cli/builder/skeletons/config/nodefony/realtime-bundle.js +0 -15
- package/cli/builder/skeletons/config/nodefony/redis-bundle.js +0 -44
- package/cli/builder/skeletons/config/nodefony/security-bundle.js +0 -25
- package/cli/builder/skeletons/config/nodefony/sequelize-bundle.js +0 -156
- package/cli/builder/skeletons/config/routing.js +0 -55
- package/cli/builder/skeletons/config/security.js +0 -102
- package/cli/builder/skeletons/config/services.js +0 -1
- package/cli/builder/skeletons/config/webpack/webpack.dev.config.js +0 -13
- package/cli/builder/skeletons/config/webpack/webpack.prod.config.js +0 -20
- package/cli/builder/skeletons/config/webpack.config.js +0 -148
- package/cli/builder/skeletons/controller/controllerClass.js +0 -75
- package/cli/builder/skeletons/package.json.twig +0 -57
- package/cli/builder/skeletons/unittest/testFile.js +0 -46
- package/cli/builder/vue/skeletons/Resources/public/images/app-logo.png +0 -0
- package/cli/builder/vue/skeletons/Resources/translations/messages.en_en.yml +0 -5
- package/cli/builder/vue/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
- package/cli/builder/vue/skeletons/vue.config.js +0 -129
- package/cli/builder/vue/vueBuilder.js +0 -410
- package/cli/generate/generate.es6 +0 -103
- package/cli/install/install.js +0 -190
- package/cli/sequelize/sequelize.js +0 -94
- package/cli/start.js +0 -702
- package/cli/tools/pm2.es6 +0 -112
- package/cli/tools/tools.es6 +0 -97
- package/cli.es6 +0 -925
- package/container.es6 +0 -272
- package/error.es6 +0 -293
- package/fileClass.es6 +0 -242
- package/finder/file.es6 +0 -33
- package/finder/fileResult.es6 +0 -138
- package/finder/finder2.es6 +0 -275
- package/finder.es6 +0 -427
- package/kernel/annotations/annotations.es6 +0 -286
- package/kernel/api/api.es6 +0 -61
- package/kernel/api/graphqlApi.es6 +0 -107
- package/kernel/api/jsonApi.es6 +0 -177
- package/kernel/api/openApi.es6 +0 -139
- package/kernel/api/schemas/openApiSchema.js +0 -394
- package/kernel/babylon.es6 +0 -162
- package/kernel/bundle.es6 +0 -1200
- package/kernel/cliKernel.es6 +0 -869
- package/kernel/command.es6 +0 -78
- package/kernel/commands/nodefonyCommand.es6 +0 -247
- package/kernel/commands/tasks/bundlesTask.es6 +0 -59
- package/kernel/controllers/controller.es6 +0 -791
- package/kernel/fixture.es6 +0 -19
- package/kernel/injections/injections.es6 +0 -424
- package/kernel/kernel.es6 +0 -1960
- package/kernel/kernelWatcher.es6 +0 -387
- package/kernel/orm/entity.es6 +0 -59
- package/kernel/orm/orm.es6 +0 -139
- package/kernel/reader.es6 +0 -290
- package/kernel/security/encoder.es6 +0 -17
- package/kernel/security/factories/factory.es6 +0 -111
- package/kernel/security/factories/passeportFactory.es6 +0 -61
- package/kernel/security/provider.es6 +0 -58
- package/kernel/security/providers/chainProvider.es6 +0 -99
- package/kernel/security/providers/memoryProvider.es6 +0 -55
- package/kernel/security/providers/providerManager.es6 +0 -67
- package/kernel/security/providers/userEntityProvider.es6 +0 -50
- package/kernel/security/role.es6 +0 -12
- package/kernel/security/secureArea.es6 +0 -431
- package/kernel/security/tokens/token.es6 +0 -171
- package/kernel/security/user.es6 +0 -106
- package/kernel/serviceRealTime.es6 +0 -21
- package/kernel/services/connectionsService.es6 +0 -93
- package/kernel/services/cron/cronService.es6 +0 -123
- package/kernel/task.es6 +0 -80
- package/kernel/templates.es6 +0 -22
- package/kernel/templating/twig.es6 +0 -218
- package/kernel/tests/cliTest.js +0 -59
- package/kernel/tests/containerTest.js +0 -232
- package/kernel/tests/kernelTest.js +0 -39
- package/nodefony.es6 +0 -1084
- package/notificationsCenter.es6 +0 -118
- package/protocol.es6 +0 -86
- package/protocols/bayeux.es6 +0 -174
- package/protocols/jsonRpc/jsonrpc.es6 +0 -56
- package/result.es6 +0 -99
- package/service.es6 +0 -288
- package/syslog/pdu.es6 +0 -141
- package/syslog/syslog.es6 +0 -754
- 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 };
|