autosnippet 3.2.21 → 3.3.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 (311) hide show
  1. package/dashboard/dist/assets/icons-BJ2mUBi8.js +1 -0
  2. package/dashboard/dist/assets/index-B659K9t5.js +128 -0
  3. package/dashboard/dist/assets/index-NCm40PMD.css +1 -0
  4. package/dashboard/dist/index.html +3 -3
  5. package/dist/bin/cli.d.ts +1 -1
  6. package/dist/bin/cli.js +244 -261
  7. package/dist/lib/agent/context/ExplorationTracker.d.ts +2 -0
  8. package/dist/lib/agent/context/ExplorationTracker.js +21 -3
  9. package/dist/lib/agent/core/ToolExecutionPipeline.d.ts +3 -1
  10. package/dist/lib/agent/core/ToolExecutionPipeline.js +8 -1
  11. package/dist/lib/agent/forge/DynamicComposer.d.ts +58 -0
  12. package/dist/lib/agent/forge/DynamicComposer.js +99 -0
  13. package/dist/lib/agent/forge/SandboxRunner.d.ts +60 -0
  14. package/dist/lib/agent/forge/SandboxRunner.js +251 -0
  15. package/dist/lib/agent/forge/TemporaryToolRegistry.d.ts +76 -0
  16. package/dist/lib/agent/forge/TemporaryToolRegistry.js +154 -0
  17. package/dist/lib/agent/forge/ToolForge.d.ts +92 -0
  18. package/dist/lib/agent/forge/ToolForge.js +239 -0
  19. package/dist/lib/agent/forge/ToolRequirementAnalyzer.d.ts +44 -0
  20. package/dist/lib/agent/forge/ToolRequirementAnalyzer.js +119 -0
  21. package/dist/lib/agent/tools/ToolRegistry.d.ts +2 -0
  22. package/dist/lib/agent/tools/ToolRegistry.js +4 -0
  23. package/dist/lib/agent/tools/composite.js +0 -1
  24. package/dist/lib/agent/tools/index.d.ts +2 -50
  25. package/dist/lib/agent/tools/index.js +2 -3
  26. package/dist/lib/agent/tools/lifecycle.d.ts +1 -58
  27. package/dist/lib/agent/tools/lifecycle.js +2 -75
  28. package/dist/lib/cli/SetupService.d.ts +46 -2
  29. package/dist/lib/cli/SetupService.js +2 -27
  30. package/dist/lib/cli/deploy/FileManifest.d.ts +0 -21
  31. package/dist/lib/cli/deploy/FileManifest.js +0 -11
  32. package/dist/lib/{platform/ios/spm → core/discovery}/SpmDiscoverer.d.ts +2 -5
  33. package/dist/lib/{platform/ios/spm → core/discovery}/SpmDiscoverer.js +159 -44
  34. package/dist/lib/core/discovery/index.d.ts +1 -1
  35. package/dist/lib/core/discovery/index.js +2 -2
  36. package/dist/lib/domain/knowledge/KnowledgeEntry.d.ts +10 -0
  37. package/dist/lib/domain/knowledge/KnowledgeEntry.js +2 -0
  38. package/dist/lib/domain/knowledge/Lifecycle.d.ts +19 -2
  39. package/dist/lib/domain/knowledge/Lifecycle.js +32 -6
  40. package/dist/lib/domain/knowledge/UnifiedValidator.d.ts +1 -5
  41. package/dist/lib/domain/knowledge/UnifiedValidator.js +7 -44
  42. package/dist/lib/domain/knowledge/values/Stats.d.ts +29 -0
  43. package/dist/lib/domain/knowledge/values/Stats.js +41 -0
  44. package/dist/lib/external/mcp/McpServer.d.ts +19 -38
  45. package/dist/lib/external/mcp/McpServer.js +145 -117
  46. package/dist/lib/external/mcp/autoApproveInjector.js +0 -2
  47. package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.d.ts +26 -1
  48. package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.js +41 -0
  49. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +49 -0
  50. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.d.ts +3 -0
  51. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.js +27 -0
  52. package/dist/lib/external/mcp/handlers/bootstrap/skills.js +1 -1
  53. package/dist/lib/external/mcp/handlers/bootstrap-external.js +1 -0
  54. package/dist/lib/external/mcp/handlers/bootstrap-internal.js +2 -0
  55. package/dist/lib/external/mcp/handlers/consolidated.d.ts +116 -6
  56. package/dist/lib/external/mcp/handlers/consolidated.js +251 -71
  57. package/dist/lib/external/mcp/handlers/guard.d.ts +150 -0
  58. package/dist/lib/external/mcp/handlers/guard.js +245 -8
  59. package/dist/lib/external/mcp/handlers/knowledge.d.ts +0 -29
  60. package/dist/lib/external/mcp/handlers/knowledge.js +1 -76
  61. package/dist/lib/external/mcp/handlers/panorama.d.ts +36 -0
  62. package/dist/lib/external/mcp/handlers/panorama.js +156 -0
  63. package/dist/lib/external/mcp/handlers/system.d.ts +2 -54
  64. package/dist/lib/external/mcp/handlers/system.js +3 -113
  65. package/dist/lib/external/mcp/handlers/task.d.ts +13 -24
  66. package/dist/lib/external/mcp/handlers/task.js +217 -557
  67. package/dist/lib/external/mcp/handlers/types.d.ts +91 -8
  68. package/dist/lib/external/mcp/handlers/types.js +18 -1
  69. package/dist/lib/external/mcp/handlers/wiki-external.d.ts +18 -1
  70. package/dist/lib/external/mcp/handlers/wiki-external.js +16 -1
  71. package/dist/lib/external/mcp/tools.d.ts +14 -20
  72. package/dist/lib/external/mcp/tools.js +62 -91
  73. package/dist/lib/http/HttpServer.js +52 -6
  74. package/dist/lib/http/routes/{snippets.d.ts → audit.d.ts} +4 -2
  75. package/dist/lib/http/routes/audit.js +51 -0
  76. package/dist/lib/http/routes/commands.d.ts +1 -1
  77. package/dist/lib/http/routes/commands.js +1 -66
  78. package/dist/lib/http/routes/guardReport.d.ts +10 -0
  79. package/dist/lib/http/routes/guardReport.js +143 -0
  80. package/dist/lib/http/routes/knowledge.js +32 -1
  81. package/dist/lib/http/routes/panorama.d.ts +11 -0
  82. package/dist/lib/http/routes/panorama.js +322 -0
  83. package/dist/lib/http/routes/remote.js +0 -5
  84. package/dist/lib/http/routes/signals.d.ts +10 -0
  85. package/dist/lib/http/routes/signals.js +104 -0
  86. package/dist/lib/http/routes/task.d.ts +2 -3
  87. package/dist/lib/http/routes/task.js +17 -347
  88. package/dist/lib/http/routes/violations.js +1 -1
  89. package/dist/lib/infrastructure/audit/AuditLogger.d.ts +6 -1
  90. package/dist/lib/infrastructure/audit/AuditLogger.js +14 -1
  91. package/dist/lib/infrastructure/database/drizzle/schema.d.ts +181 -583
  92. package/dist/lib/infrastructure/database/drizzle/schema.js +28 -69
  93. package/dist/lib/infrastructure/database/migrations/004_evolution_proposals.d.ts +8 -0
  94. package/dist/lib/infrastructure/database/migrations/004_evolution_proposals.js +43 -0
  95. package/dist/lib/infrastructure/logging/Logger.d.ts +2 -0
  96. package/dist/lib/infrastructure/logging/Logger.js +34 -7
  97. package/dist/lib/infrastructure/monitoring/ErrorTracker.js +3 -1
  98. package/dist/lib/infrastructure/monitoring/PerformanceMonitor.d.ts +2 -2
  99. package/dist/lib/infrastructure/monitoring/PerformanceMonitor.js +12 -10
  100. package/dist/lib/infrastructure/notification/LarkNotifier.d.ts +24 -0
  101. package/dist/lib/infrastructure/notification/LarkNotifier.js +97 -0
  102. package/dist/lib/infrastructure/report/ReportStore.d.ts +45 -0
  103. package/dist/lib/infrastructure/report/ReportStore.js +133 -0
  104. package/dist/lib/infrastructure/signal/SignalAggregator.d.ts +18 -0
  105. package/dist/lib/infrastructure/signal/SignalAggregator.js +84 -0
  106. package/dist/lib/infrastructure/signal/SignalBridge.d.ts +13 -0
  107. package/dist/lib/infrastructure/signal/SignalBridge.js +20 -0
  108. package/dist/lib/infrastructure/signal/SignalBus.d.ts +63 -0
  109. package/dist/lib/infrastructure/signal/SignalBus.js +106 -0
  110. package/dist/lib/infrastructure/signal/SignalTraceWriter.d.ts +36 -0
  111. package/dist/lib/infrastructure/signal/SignalTraceWriter.js +130 -0
  112. package/dist/lib/injection/ServiceContainer.js +6 -0
  113. package/dist/lib/injection/ServiceMap.d.ts +16 -19
  114. package/dist/lib/injection/modules/AgentModule.d.ts +1 -1
  115. package/dist/lib/injection/modules/AgentModule.js +7 -1
  116. package/dist/lib/injection/modules/AppModule.d.ts +3 -4
  117. package/dist/lib/injection/modules/AppModule.js +7 -43
  118. package/dist/lib/injection/modules/GuardModule.js +59 -2
  119. package/dist/lib/injection/modules/InfraModule.d.ts +0 -1
  120. package/dist/lib/injection/modules/InfraModule.js +9 -7
  121. package/dist/lib/injection/modules/KnowledgeModule.js +51 -0
  122. package/dist/lib/injection/modules/PanoramaModule.d.ts +18 -0
  123. package/dist/lib/injection/modules/PanoramaModule.js +76 -0
  124. package/dist/lib/injection/modules/SignalModule.d.ts +10 -0
  125. package/dist/lib/injection/modules/SignalModule.js +84 -0
  126. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.d.ts +1 -0
  127. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.js +6 -0
  128. package/dist/lib/service/bootstrap/BootstrapTaskManager.d.ts +3 -1
  129. package/dist/lib/service/bootstrap/BootstrapTaskManager.js +20 -1
  130. package/dist/lib/service/delivery/AgentInstructionsGenerator.js +4 -5
  131. package/dist/lib/service/delivery/CursorDeliveryPipeline.d.ts +3 -1
  132. package/dist/lib/service/delivery/CursorDeliveryPipeline.js +13 -10
  133. package/dist/lib/service/delivery/RulesGenerator.js +3 -2
  134. package/dist/lib/service/evolution/ConsolidationAdvisor.d.ts +114 -0
  135. package/dist/lib/service/evolution/ConsolidationAdvisor.js +542 -0
  136. package/dist/lib/service/evolution/ContradictionDetector.d.ts +54 -0
  137. package/dist/lib/service/evolution/ContradictionDetector.js +253 -0
  138. package/dist/lib/service/evolution/DecayDetector.d.ts +71 -0
  139. package/dist/lib/service/evolution/DecayDetector.js +244 -0
  140. package/dist/lib/service/evolution/EnhancementSuggester.d.ts +38 -0
  141. package/dist/lib/service/evolution/EnhancementSuggester.js +220 -0
  142. package/dist/lib/service/evolution/KnowledgeMetabolism.d.ts +82 -0
  143. package/dist/lib/service/evolution/KnowledgeMetabolism.js +167 -0
  144. package/dist/lib/service/evolution/RedundancyAnalyzer.d.ts +53 -0
  145. package/dist/lib/service/evolution/RedundancyAnalyzer.js +210 -0
  146. package/dist/lib/service/evolution/StagingManager.d.ts +57 -0
  147. package/dist/lib/service/evolution/StagingManager.js +201 -0
  148. package/dist/lib/service/guard/ComplianceReporter.d.ts +42 -2
  149. package/dist/lib/service/guard/ComplianceReporter.js +43 -5
  150. package/dist/lib/service/guard/CoverageAnalyzer.d.ts +54 -0
  151. package/dist/lib/service/guard/CoverageAnalyzer.js +149 -0
  152. package/dist/lib/service/guard/GuardCheckEngine.d.ts +55 -1
  153. package/dist/lib/service/guard/GuardCheckEngine.js +508 -15
  154. package/dist/lib/service/guard/GuardFeedbackLoop.d.ts +3 -0
  155. package/dist/lib/service/guard/GuardFeedbackLoop.js +9 -0
  156. package/dist/lib/service/guard/ReverseGuard.d.ts +73 -0
  157. package/dist/lib/service/guard/ReverseGuard.js +256 -0
  158. package/dist/lib/service/guard/RuleLearner.d.ts +12 -0
  159. package/dist/lib/service/guard/RuleLearner.js +38 -0
  160. package/dist/lib/service/guard/UncertaintyCollector.d.ts +83 -0
  161. package/dist/lib/service/guard/UncertaintyCollector.js +149 -0
  162. package/dist/lib/service/guard/ViolationsStore.d.ts +1 -0
  163. package/dist/lib/service/guard/ViolationsStore.js +33 -3
  164. package/dist/lib/service/knowledge/ConfidenceRouter.d.ts +13 -0
  165. package/dist/lib/service/knowledge/ConfidenceRouter.js +14 -0
  166. package/dist/lib/service/knowledge/KnowledgeService.js +22 -4
  167. package/dist/lib/service/module/ModuleService.js +3 -13
  168. package/dist/lib/service/panorama/CouplingAnalyzer.d.ts +27 -0
  169. package/dist/lib/service/panorama/CouplingAnalyzer.js +192 -0
  170. package/dist/lib/service/panorama/DimensionAnalyzer.d.ts +28 -0
  171. package/dist/lib/service/panorama/DimensionAnalyzer.js +320 -0
  172. package/dist/lib/service/panorama/LayerInferrer.d.ts +19 -0
  173. package/dist/lib/service/panorama/LayerInferrer.js +182 -0
  174. package/dist/lib/service/panorama/ModuleDiscoverer.d.ts +24 -0
  175. package/dist/lib/service/panorama/ModuleDiscoverer.js +185 -0
  176. package/dist/lib/service/panorama/PanoramaAggregator.d.ts +29 -0
  177. package/dist/lib/service/panorama/PanoramaAggregator.js +228 -0
  178. package/dist/lib/service/panorama/PanoramaScanner.d.ts +52 -0
  179. package/dist/lib/service/panorama/PanoramaScanner.js +188 -0
  180. package/dist/lib/service/panorama/PanoramaService.d.ts +108 -0
  181. package/dist/lib/service/panorama/PanoramaService.js +220 -0
  182. package/dist/lib/service/panorama/PanoramaTypes.d.ts +134 -0
  183. package/dist/lib/service/panorama/PanoramaTypes.js +6 -0
  184. package/dist/lib/service/panorama/RoleRefiner.d.ts +48 -0
  185. package/dist/lib/service/panorama/RoleRefiner.js +535 -0
  186. package/dist/lib/service/search/MultiSignalRanker.d.ts +1 -0
  187. package/dist/lib/service/search/MultiSignalRanker.js +16 -0
  188. package/dist/lib/service/search/SearchEngine.d.ts +1 -0
  189. package/dist/lib/service/search/SearchEngine.js +9 -1
  190. package/dist/lib/service/search/SearchTypes.d.ts +2 -0
  191. package/dist/lib/service/signal/HitRecorder.d.ts +68 -0
  192. package/dist/lib/service/signal/HitRecorder.js +173 -0
  193. package/dist/lib/service/skills/SignalCollector.d.ts +3 -1
  194. package/dist/lib/service/skills/SignalCollector.js +31 -1
  195. package/dist/lib/service/task/IntentExtractor.d.ts +58 -0
  196. package/dist/lib/service/task/IntentExtractor.js +142 -0
  197. package/dist/lib/service/task/PrimeSearchPipeline.d.ts +54 -0
  198. package/dist/lib/service/task/PrimeSearchPipeline.js +98 -0
  199. package/dist/lib/shared/constants.d.ts +0 -15
  200. package/dist/lib/shared/constants.js +0 -10
  201. package/dist/lib/shared/schemas/config.d.ts +4 -1
  202. package/dist/lib/shared/schemas/config.js +8 -1
  203. package/dist/lib/shared/schemas/mcp-tools.d.ts +41 -96
  204. package/dist/lib/shared/schemas/mcp-tools.js +59 -119
  205. package/dist/scripts/analyze-signals.d.ts +20 -0
  206. package/dist/scripts/analyze-signals.js +155 -0
  207. package/dist/scripts/diagnose-mcp.js +1 -1
  208. package/dist/scripts/release.js +2 -10
  209. package/package.json +4 -19
  210. package/skills/autosnippet-devdocs/SKILL.md +11 -8
  211. package/templates/claude-code/hooks/autosnippet-session.sh +10 -15
  212. package/templates/cursor-hooks/hooks/session-start.sh +1 -1
  213. package/templates/instructions/agent-static.md +2 -1
  214. package/templates/instructions/conventions.md +5 -6
  215. package/templates/recipes-setup/README.md +1 -2
  216. package/dashboard/dist/assets/icons-C1dUryS-.js +0 -1
  217. package/dashboard/dist/assets/index-D0whuycy.css +0 -1
  218. package/dashboard/dist/assets/index-DdvZE4Yd.js +0 -128
  219. package/dist/lib/domain/task/Task.d.ts +0 -140
  220. package/dist/lib/domain/task/Task.js +0 -254
  221. package/dist/lib/domain/task/TaskDependency.d.ts +0 -23
  222. package/dist/lib/domain/task/TaskDependency.js +0 -34
  223. package/dist/lib/domain/task/TaskIdGenerator.d.ts +0 -40
  224. package/dist/lib/domain/task/TaskIdGenerator.js +0 -75
  225. package/dist/lib/domain/task/index.d.ts +0 -4
  226. package/dist/lib/domain/task/index.js +0 -4
  227. package/dist/lib/http/routes/snippets.js +0 -49
  228. package/dist/lib/infrastructure/database/migrations/002_add_tasks.d.ts +0 -11
  229. package/dist/lib/infrastructure/database/migrations/002_add_tasks.js +0 -86
  230. package/dist/lib/platform/ClipboardManager.d.ts +0 -24
  231. package/dist/lib/platform/ClipboardManager.js +0 -142
  232. package/dist/lib/platform/NativeUi.d.ts +0 -53
  233. package/dist/lib/platform/NativeUi.js +0 -284
  234. package/dist/lib/platform/ios/index.d.ts +0 -38
  235. package/dist/lib/platform/ios/index.js +0 -42
  236. package/dist/lib/platform/ios/routes/spm.d.ts +0 -9
  237. package/dist/lib/platform/ios/routes/spm.js +0 -371
  238. package/dist/lib/platform/ios/snippet/PlaceholderConverter.d.ts +0 -21
  239. package/dist/lib/platform/ios/snippet/PlaceholderConverter.js +0 -48
  240. package/dist/lib/platform/ios/snippet/XcodeCodec.d.ts +0 -23
  241. package/dist/lib/platform/ios/snippet/XcodeCodec.js +0 -96
  242. package/dist/lib/platform/ios/spm/DependencyGraph.d.ts +0 -56
  243. package/dist/lib/platform/ios/spm/DependencyGraph.js +0 -195
  244. package/dist/lib/platform/ios/spm/PackageSwiftParser.d.ts +0 -69
  245. package/dist/lib/platform/ios/spm/PackageSwiftParser.js +0 -231
  246. package/dist/lib/platform/ios/spm/PathFinder.d.ts +0 -28
  247. package/dist/lib/platform/ios/spm/PathFinder.js +0 -117
  248. package/dist/lib/platform/ios/spm/PolicyEngine.d.ts +0 -44
  249. package/dist/lib/platform/ios/spm/PolicyEngine.js +0 -79
  250. package/dist/lib/platform/ios/spm/SpmHelper.d.ts +0 -102
  251. package/dist/lib/platform/ios/spm/SpmHelper.js +0 -464
  252. package/dist/lib/platform/ios/xcode/HeaderResolver.d.ts +0 -33
  253. package/dist/lib/platform/ios/xcode/HeaderResolver.js +0 -90
  254. package/dist/lib/platform/ios/xcode/SaveEventFilter.d.ts +0 -66
  255. package/dist/lib/platform/ios/xcode/SaveEventFilter.js +0 -142
  256. package/dist/lib/platform/ios/xcode/XcodeAutomation.d.ts +0 -71
  257. package/dist/lib/platform/ios/xcode/XcodeAutomation.js +0 -327
  258. package/dist/lib/platform/ios/xcode/XcodeImportResolver.d.ts +0 -130
  259. package/dist/lib/platform/ios/xcode/XcodeImportResolver.js +0 -404
  260. package/dist/lib/platform/ios/xcode/XcodeIntegration.d.ts +0 -89
  261. package/dist/lib/platform/ios/xcode/XcodeIntegration.js +0 -588
  262. package/dist/lib/platform/ios/xcode/XcodeWriteUtils.d.ts +0 -99
  263. package/dist/lib/platform/ios/xcode/XcodeWriteUtils.js +0 -190
  264. package/dist/lib/repository/task/TaskRepository.impl.d.ts +0 -171
  265. package/dist/lib/repository/task/TaskRepository.impl.js +0 -347
  266. package/dist/lib/service/automation/ActionPipeline.d.ts +0 -34
  267. package/dist/lib/service/automation/ActionPipeline.js +0 -53
  268. package/dist/lib/service/automation/AutomationOrchestrator.d.ts +0 -86
  269. package/dist/lib/service/automation/AutomationOrchestrator.js +0 -57
  270. package/dist/lib/service/automation/ContextCollector.d.ts +0 -24
  271. package/dist/lib/service/automation/ContextCollector.js +0 -35
  272. package/dist/lib/service/automation/DirectiveDetector.d.ts +0 -51
  273. package/dist/lib/service/automation/DirectiveDetector.js +0 -112
  274. package/dist/lib/service/automation/FileWatcher.d.ts +0 -51
  275. package/dist/lib/service/automation/FileWatcher.js +0 -366
  276. package/dist/lib/service/automation/TriggerResolver.d.ts +0 -36
  277. package/dist/lib/service/automation/TriggerResolver.js +0 -62
  278. package/dist/lib/service/automation/handlers/AlinkHandler.d.ts +0 -7
  279. package/dist/lib/service/automation/handlers/AlinkHandler.js +0 -80
  280. package/dist/lib/service/automation/handlers/CreateHandler.d.ts +0 -11
  281. package/dist/lib/service/automation/handlers/CreateHandler.js +0 -170
  282. package/dist/lib/service/automation/handlers/GuardHandler.d.ts +0 -17
  283. package/dist/lib/service/automation/handlers/GuardHandler.js +0 -218
  284. package/dist/lib/service/automation/handlers/HeaderHandler.d.ts +0 -2
  285. package/dist/lib/service/automation/handlers/HeaderHandler.js +0 -32
  286. package/dist/lib/service/automation/handlers/SearchHandler.d.ts +0 -11
  287. package/dist/lib/service/automation/handlers/SearchHandler.js +0 -278
  288. package/dist/lib/service/snippet/SnippetFactory.d.ts +0 -101
  289. package/dist/lib/service/snippet/SnippetFactory.js +0 -145
  290. package/dist/lib/service/snippet/SnippetInstaller.d.ts +0 -91
  291. package/dist/lib/service/snippet/SnippetInstaller.js +0 -276
  292. package/dist/lib/service/snippet/codecs/SnippetCodec.d.ts +0 -44
  293. package/dist/lib/service/snippet/codecs/SnippetCodec.js +0 -35
  294. package/dist/lib/service/snippet/codecs/VSCodeCodec.d.ts +0 -27
  295. package/dist/lib/service/snippet/codecs/VSCodeCodec.js +0 -82
  296. package/dist/lib/service/task/TaskGraphService.d.ts +0 -222
  297. package/dist/lib/service/task/TaskGraphService.js +0 -597
  298. package/dist/lib/service/task/TaskKnowledgeBridge.d.ts +0 -95
  299. package/dist/lib/service/task/TaskKnowledgeBridge.js +0 -298
  300. package/dist/lib/service/task/TaskReadyEngine.d.ts +0 -84
  301. package/dist/lib/service/task/TaskReadyEngine.js +0 -115
  302. package/dist/scripts/build-native-ui.d.ts +0 -3
  303. package/dist/scripts/build-native-ui.js +0 -62
  304. package/dist/scripts/init-snippets.d.ts +0 -30
  305. package/dist/scripts/init-snippets.js +0 -298
  306. package/dist/scripts/install-full.d.ts +0 -7
  307. package/dist/scripts/install-full.js +0 -38
  308. package/resources/native-ui/README.md +0 -29
  309. package/resources/native-ui/combined-window.swift +0 -494
  310. package/resources/native-ui/main.swift +0 -598
  311. package/scripts/postinstall-safe.mjs +0 -89
@@ -2,18 +2,13 @@
2
2
  * AppModule — 应用层杂项服务注册
3
3
  *
4
4
  * 负责注册:
5
- * - recipeParser, recipeCandidateValidator, snippetFactory, snippetInstaller
5
+ * - recipeParser, recipeCandidateValidator
6
6
  * - qualityScorer, feedbackCollector, tokenUsageStore, recipeExtractor
7
- * - spmService, automationOrchestrator, moduleService
8
- * - cursorDeliveryPipeline
9
- * - taskIdGenerator, taskReadyEngine, taskKnowledgeBridge, taskGraphService
7
+ * - moduleService, cursorDeliveryPipeline
8
+ * - primeSearchPipeline (for prime multi-query search — no DB dependency)
10
9
  */
11
10
  import { resolveProjectRoot } from '#shared/resolveProjectRoot.js';
12
- import { TaskIdGenerator } from '../../domain/task/TaskIdGenerator.js';
13
- import { XcodeCodec } from '../../platform/ios/snippet/XcodeCodec.js';
14
- import { SpmHelper } from '../../platform/ios/spm/SpmHelper.js';
15
11
  import { TokenUsageStore } from '../../repository/token/TokenUsageStore.js';
16
- import { AutomationOrchestrator } from '../../service/automation/AutomationOrchestrator.js';
17
12
  import { CursorDeliveryPipeline } from '../../service/delivery/CursorDeliveryPipeline.js';
18
13
  import { RecipeExtractor } from '../../service/knowledge/RecipeExtractor.js';
19
14
  import { ModuleService } from '../../service/module/ModuleService.js';
@@ -21,12 +16,7 @@ import { FeedbackCollector } from '../../service/quality/FeedbackCollector.js';
21
16
  import { QualityScorer } from '../../service/quality/QualityScorer.js';
22
17
  import { RecipeCandidateValidator } from '../../service/recipe/RecipeCandidateValidator.js';
23
18
  import { RecipeParser } from '../../service/recipe/RecipeParser.js';
24
- import { VSCodeCodec } from '../../service/snippet/codecs/VSCodeCodec.js';
25
- import { SnippetFactory } from '../../service/snippet/SnippetFactory.js';
26
- import { SnippetInstaller } from '../../service/snippet/SnippetInstaller.js';
27
- import { TaskGraphService } from '../../service/task/TaskGraphService.js';
28
- import { TaskKnowledgeBridge } from '../../service/task/TaskKnowledgeBridge.js';
29
- import { TaskReadyEngine } from '../../service/task/TaskReadyEngine.js';
19
+ import { PrimeSearchPipeline } from '../../service/task/PrimeSearchPipeline.js';
30
20
  export function register(c) {
31
21
  // ═══ Quality + Recipe ═══
32
22
  c.singleton('qualityScorer', () => new QualityScorer());
@@ -41,27 +31,7 @@ export function register(c) {
41
31
  const db = ct.get('database');
42
32
  return new TokenUsageStore(db.getDb(), db.getDrizzle());
43
33
  });
44
- // ═══ Snippet ═══
45
- c.singleton('snippetFactory', (ct) => {
46
- const factory = new SnippetFactory(ct.get('knowledgeRepository'));
47
- factory.registerCodec(new XcodeCodec());
48
- factory.registerCodec(new VSCodeCodec());
49
- return factory;
50
- });
51
- c.singleton('snippetInstaller', (ct) => {
52
- const factory = ct.get('snippetFactory');
53
- return new SnippetInstaller({ codec: factory.getCodec('xcode'), snippetFactory: factory });
54
- });
55
- c.singleton('vscodeSnippetInstaller', (ct) => {
56
- const factory = ct.get('snippetFactory');
57
- return new SnippetInstaller({ codec: factory.getCodec('vscode'), snippetFactory: factory });
58
- });
59
- // ═══ Platform + Automation ═══
60
- c.singleton('spmService', (ct) => {
61
- const projectRoot = resolveProjectRoot(ct);
62
- return new SpmHelper(projectRoot);
63
- });
64
- c.singleton('automationOrchestrator', () => new AutomationOrchestrator());
34
+ // ═══ Module ═══
65
35
  c.singleton('moduleService', (ct) => {
66
36
  const projectRoot = resolveProjectRoot(ct);
67
37
  return new ModuleService(projectRoot, {
@@ -79,14 +49,8 @@ export function register(c) {
79
49
  database: ct.get('database'),
80
50
  logger: ct.logger,
81
51
  }));
82
- // ═══ TaskGraph ═══
83
- c.singleton('taskIdGenerator', (ct) => {
84
- const db = ct.get('database');
85
- return new TaskIdGenerator(db.getDb(), db.getDrizzle());
86
- });
87
- c.singleton('taskReadyEngine', (ct) => new TaskReadyEngine(ct.get('database').getDb()));
88
- c.singleton('taskKnowledgeBridge', (ct) => new TaskKnowledgeBridge(ct.get('searchEngine')));
89
- c.singleton('taskGraphService', (ct) => new TaskGraphService(ct.get('taskRepository'), ct.get('taskReadyEngine'), ct.get('taskKnowledgeBridge'), ct.get('auditLogger'), ct.get('taskIdGenerator')));
52
+ // ═══ PrimeSearchPipeline (for prime multi-query search) ═══
53
+ c.singleton('primeSearchPipeline', (ct) => new PrimeSearchPipeline(ct.get('searchEngine')));
90
54
  }
91
55
  /** 初始化 RecipeExtractor 实例 (在 initialize 期间调用) */
92
56
  export function initRecipeExtractor(c) {
@@ -6,12 +6,16 @@
6
6
  * - exclusionManager, ruleLearner, violationsStore
7
7
  * - complianceReporter, guardFeedbackLoop
8
8
  */
9
+ import fs from 'node:fs';
10
+ import path from 'node:path';
9
11
  import { resolveProjectRoot } from '#shared/resolveProjectRoot.js';
10
12
  import { ComplianceReporter } from '../../service/guard/ComplianceReporter.js';
13
+ import { CoverageAnalyzer } from '../../service/guard/CoverageAnalyzer.js';
11
14
  import { ExclusionManager } from '../../service/guard/ExclusionManager.js';
12
15
  import { GuardCheckEngine } from '../../service/guard/GuardCheckEngine.js';
13
16
  import { GuardFeedbackLoop } from '../../service/guard/GuardFeedbackLoop.js';
14
17
  import { GuardService } from '../../service/guard/GuardService.js';
18
+ import { ReverseGuard } from '../../service/guard/ReverseGuard.js';
15
19
  import { RuleLearner } from '../../service/guard/RuleLearner.js';
16
20
  import { ViolationsStore } from '../../service/guard/ViolationsStore.js';
17
21
  export function register(c) {
@@ -29,7 +33,40 @@ export function register(c) {
29
33
  });
30
34
  c.singleton('guardCheckEngine', (ct) => {
31
35
  const config = ct.singletons._config || {};
32
- return new GuardCheckEngine(ct.get('database'), { guardConfig: config.guard || {} });
36
+ // 基础配置(AutoSnippet 自身 config/default.json)
37
+ const baseGuard = config.guard || {};
38
+ // 项目级覆盖(.autosnippet/config.json 的 guard 段)
39
+ let projectGuard = {};
40
+ try {
41
+ const projectRoot = resolveProjectRoot(ct);
42
+ const projConfigPath = path.join(projectRoot, '.autosnippet', 'config.json');
43
+ if (fs.existsSync(projConfigPath)) {
44
+ const raw = JSON.parse(fs.readFileSync(projConfigPath, 'utf-8'));
45
+ if (raw.guard && typeof raw.guard === 'object') {
46
+ projectGuard = raw.guard;
47
+ }
48
+ }
49
+ }
50
+ catch {
51
+ /* 项目配置读取失败不阻塞 */
52
+ }
53
+ // 合并:项目级覆盖基础配置
54
+ const merged = { ...baseGuard, ...projectGuard };
55
+ if (baseGuard.codeLevelThresholds || projectGuard.codeLevelThresholds) {
56
+ merged.codeLevelThresholds = {
57
+ ...(baseGuard.codeLevelThresholds || {}),
58
+ ...(projectGuard.codeLevelThresholds || {}),
59
+ };
60
+ }
61
+ if (baseGuard.disabledRules || projectGuard.disabledRules) {
62
+ const base = Array.isArray(baseGuard.disabledRules) ? baseGuard.disabledRules : [];
63
+ const proj = Array.isArray(projectGuard.disabledRules) ? projectGuard.disabledRules : [];
64
+ merged.disabledRules = [...new Set([...base, ...proj])];
65
+ }
66
+ return new GuardCheckEngine(ct.get('database'), {
67
+ guardConfig: merged,
68
+ signalBus: ct.singletons.signalBus || undefined,
69
+ });
33
70
  });
34
71
  c.singleton('exclusionManager', (ct) => {
35
72
  const projectRoot = resolveProjectRoot(ct);
@@ -37,7 +74,9 @@ export function register(c) {
37
74
  });
38
75
  c.singleton('ruleLearner', (ct) => {
39
76
  const projectRoot = resolveProjectRoot(ct);
40
- return new RuleLearner(projectRoot);
77
+ return new RuleLearner(projectRoot, {
78
+ signalBus: ct.singletons.signalBus || undefined,
79
+ });
41
80
  });
42
81
  c.singleton('violationsStore', (ct) => {
43
82
  const db = ct.get('database');
@@ -49,5 +88,23 @@ export function register(c) {
49
88
  });
50
89
  c.singleton('guardFeedbackLoop', (ct) => new GuardFeedbackLoop(ct.get('violationsStore'), ct.get('feedbackCollector'), {
51
90
  guardCheckEngine: ct.get('guardCheckEngine'),
91
+ signalBus: ct.singletons.signalBus || undefined,
52
92
  }));
93
+ c.singleton('reverseGuard', (ct) => {
94
+ const db = ct.get('database');
95
+ return new ReverseGuard(db.getDb(), {
96
+ signalBus: ct.singletons.signalBus || undefined,
97
+ });
98
+ });
99
+ c.singleton('coverageAnalyzer', (ct) => {
100
+ const db = ct.get('database');
101
+ let ruleLearner;
102
+ try {
103
+ ruleLearner = { ruleLearner: ct.get('ruleLearner') };
104
+ }
105
+ catch {
106
+ /* ruleLearner not yet available */
107
+ }
108
+ return new CoverageAnalyzer(db.getDb(), ruleLearner);
109
+ });
53
110
  }
@@ -5,7 +5,6 @@
5
5
  * - database, logger, auditStore, auditLogger
6
6
  * - gateway, eventBus, bootstrapTaskManager
7
7
  * - knowledgeRepository, knowledgeFileWriter, knowledgeSyncService
8
- * - taskRepository
9
8
  */
10
9
  import type { ServiceContainer } from '../ServiceContainer.js';
11
10
  export declare function register(c: ServiceContainer): void;
@@ -5,8 +5,8 @@
5
5
  * - database, logger, auditStore, auditLogger
6
6
  * - gateway, eventBus, bootstrapTaskManager
7
7
  * - knowledgeRepository, knowledgeFileWriter, knowledgeSyncService
8
- * - taskRepository
9
8
  */
9
+ import path from 'node:path';
10
10
  import { resolveProjectRoot } from '#shared/resolveProjectRoot.js';
11
11
  import { KnowledgeSyncService } from '../../cli/KnowledgeSyncService.js';
12
12
  import Gateway from '../../core/gateway/Gateway.js';
@@ -15,8 +15,8 @@ import AuditStore from '../../infrastructure/audit/AuditStore.js';
15
15
  import { EventBus } from '../../infrastructure/event/EventBus.js';
16
16
  import Logger from '../../infrastructure/logging/Logger.js';
17
17
  import { getRealtimeService as _getRealtimeService } from '../../infrastructure/realtime/RealtimeService.js';
18
+ import { ReportStore } from '../../infrastructure/report/ReportStore.js';
18
19
  import { KnowledgeRepositoryImpl } from '../../repository/knowledge/KnowledgeRepository.impl.js';
19
- import { TaskRepositoryImpl } from '../../repository/task/TaskRepository.impl.js';
20
20
  import { BootstrapTaskManager } from '../../service/bootstrap/BootstrapTaskManager.js';
21
21
  import { KnowledgeFileWriter } from '../../service/knowledge/KnowledgeFileWriter.js';
22
22
  export function register(c) {
@@ -33,7 +33,9 @@ export function register(c) {
33
33
  const drizzle = db.getDrizzle();
34
34
  return new AuditStore(db, drizzle);
35
35
  });
36
- c.singleton('auditLogger', (ct) => new AuditLogger(ct.get('auditStore')));
36
+ c.singleton('auditLogger', (ct) => new AuditLogger(ct.get('auditStore'), ct.services.eventBus
37
+ ? ct.get('eventBus')
38
+ : null));
37
39
  c.singleton('gateway', () => new Gateway());
38
40
  c.singleton('eventBus', () => new EventBus({ maxListeners: 30 }));
39
41
  c.singleton('bootstrapTaskManager', (ct) => {
@@ -65,9 +67,9 @@ export function register(c) {
65
67
  const projectRoot = resolveProjectRoot(ct);
66
68
  return new KnowledgeSyncService(projectRoot);
67
69
  });
68
- c.singleton('taskRepository', (ct) => {
69
- const db = ct.get('database');
70
- const drizzle = db.getDrizzle();
71
- return new TaskRepositoryImpl(db, drizzle);
70
+ // ═══ ReportStore ═══
71
+ c.singleton('reportStore', (ct) => {
72
+ const projectRoot = resolveProjectRoot(ct);
73
+ return new ReportStore(path.join(projectRoot, '.autosnippet', 'logs', 'reports'));
72
74
  });
73
75
  }
@@ -14,6 +14,13 @@ import { HnswVectorAdapter } from '../../infrastructure/vector/HnswVectorAdapter
14
14
  import { IndexingPipeline } from '../../infrastructure/vector/IndexingPipeline.js';
15
15
  import { JsonVectorAdapter } from '../../infrastructure/vector/JsonVectorAdapter.js';
16
16
  import { DimensionCopy } from '../../service/bootstrap/DimensionCopyRegistry.js';
17
+ import { ConsolidationAdvisor } from '../../service/evolution/ConsolidationAdvisor.js';
18
+ import { ContradictionDetector } from '../../service/evolution/ContradictionDetector.js';
19
+ import { DecayDetector } from '../../service/evolution/DecayDetector.js';
20
+ import { EnhancementSuggester } from '../../service/evolution/EnhancementSuggester.js';
21
+ import { KnowledgeMetabolism } from '../../service/evolution/KnowledgeMetabolism.js';
22
+ import { RedundancyAnalyzer } from '../../service/evolution/RedundancyAnalyzer.js';
23
+ import { StagingManager } from '../../service/evolution/StagingManager.js';
17
24
  import { CodeEntityGraph } from '../../service/knowledge/CodeEntityGraph.js';
18
25
  import { ConfidenceRouter } from '../../service/knowledge/ConfidenceRouter.js';
19
26
  import { KnowledgeGraphService } from '../../service/knowledge/KnowledgeGraphService.js';
@@ -50,6 +57,7 @@ export function register(c) {
50
57
  // is sufficient for knowledge-base scale (hundreds~thousands of entries).
51
58
  // Re-enable when document scale grows to 10k+ or external noisy sources are integrated.
52
59
  crossEncoderReranker: null,
60
+ signalBus: ct.singletons.signalBus || null,
53
61
  });
54
62
  }, { aiDependent: true });
55
63
  c.singleton('vectorStore', (ct) => {
@@ -120,4 +128,47 @@ export function register(c) {
120
128
  c.register('constitution', () => c.singletons.constitution || null);
121
129
  c.register('aiProvider', () => c.singletons.aiProvider || null);
122
130
  c.register('projectGraph', () => c.singletons.projectGraph || null);
131
+ // ═══ Governance / Evolution ═══
132
+ c.singleton('stagingManager', (ct) => {
133
+ const db = ct.get('database');
134
+ return new StagingManager(db.getDb(), {
135
+ signalBus: ct.singletons.signalBus || undefined,
136
+ });
137
+ });
138
+ c.singleton('decayDetector', (ct) => {
139
+ const db = ct.get('database');
140
+ return new DecayDetector(db.getDb(), {
141
+ signalBus: ct.singletons.signalBus || undefined,
142
+ });
143
+ });
144
+ c.singleton('contradictionDetector', (ct) => {
145
+ const db = ct.get('database');
146
+ return new ContradictionDetector(db.getDb(), {
147
+ signalBus: ct.singletons.signalBus || undefined,
148
+ });
149
+ });
150
+ c.singleton('redundancyAnalyzer', (ct) => {
151
+ const db = ct.get('database');
152
+ return new RedundancyAnalyzer(db.getDb(), {
153
+ signalBus: ct.singletons.signalBus || undefined,
154
+ });
155
+ });
156
+ c.singleton('enhancementSuggester', (ct) => {
157
+ const db = ct.get('database');
158
+ return new EnhancementSuggester(db.getDb(), {
159
+ signalBus: ct.singletons.signalBus || undefined,
160
+ });
161
+ });
162
+ c.singleton('knowledgeMetabolism', (ct) => {
163
+ return new KnowledgeMetabolism({
164
+ contradictionDetector: ct.get('contradictionDetector'),
165
+ redundancyAnalyzer: ct.get('redundancyAnalyzer'),
166
+ decayDetector: ct.get('decayDetector'),
167
+ signalBus: ct.singletons.signalBus || undefined,
168
+ });
169
+ });
170
+ c.singleton('consolidationAdvisor', (ct) => {
171
+ const db = ct.get('database');
172
+ return new ConsolidationAdvisor(db.getDb());
173
+ });
123
174
  }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * PanoramaModule — DI 注册
3
+ *
4
+ * 注册全景服务到 ServiceContainer:
5
+ * - moduleDiscoverer
6
+ * - roleRefiner
7
+ * - couplingAnalyzer
8
+ * - layerInferrer
9
+ * - panoramaAggregator
10
+ * - panoramaScanner
11
+ * - panoramaService
12
+ *
13
+ * @module PanoramaModule
14
+ */
15
+ import type { ServiceContainer } from '../ServiceContainer.js';
16
+ export declare const PanoramaModule: {
17
+ register(container: ServiceContainer): void;
18
+ };
@@ -0,0 +1,76 @@
1
+ /**
2
+ * PanoramaModule — DI 注册
3
+ *
4
+ * 注册全景服务到 ServiceContainer:
5
+ * - moduleDiscoverer
6
+ * - roleRefiner
7
+ * - couplingAnalyzer
8
+ * - layerInferrer
9
+ * - panoramaAggregator
10
+ * - panoramaScanner
11
+ * - panoramaService
12
+ *
13
+ * @module PanoramaModule
14
+ */
15
+ import { CouplingAnalyzer } from '../../service/panorama/CouplingAnalyzer.js';
16
+ import { DimensionAnalyzer } from '../../service/panorama/DimensionAnalyzer.js';
17
+ import { LayerInferrer } from '../../service/panorama/LayerInferrer.js';
18
+ import { ModuleDiscoverer } from '../../service/panorama/ModuleDiscoverer.js';
19
+ import { PanoramaAggregator } from '../../service/panorama/PanoramaAggregator.js';
20
+ import { PanoramaScanner } from '../../service/panorama/PanoramaScanner.js';
21
+ import { PanoramaService } from '../../service/panorama/PanoramaService.js';
22
+ import { RoleRefiner } from '../../service/panorama/RoleRefiner.js';
23
+ export const PanoramaModule = {
24
+ register(container) {
25
+ const ct = container;
26
+ const getDb = () => {
27
+ const db = ct.singletons.database;
28
+ return (db?.getDb ? db.getDb() : db);
29
+ };
30
+ const getProjectRoot = () => ct.config?.projectRoot ?? process.cwd();
31
+ ct.singleton('moduleDiscoverer', () => new ModuleDiscoverer(getDb(), getProjectRoot()));
32
+ ct.singleton('roleRefiner', () => new RoleRefiner(getDb(), getProjectRoot()));
33
+ ct.singleton('couplingAnalyzer', () => new CouplingAnalyzer(getDb(), getProjectRoot()));
34
+ ct.singleton('layerInferrer', () => new LayerInferrer());
35
+ ct.singleton('dimensionAnalyzer', () => new DimensionAnalyzer(getDb()));
36
+ ct.singleton('panoramaAggregator', (c) => {
37
+ const sc = c;
38
+ const roleRefiner = sc.get('roleRefiner');
39
+ const couplingAnalyzer = sc.get('couplingAnalyzer');
40
+ const layerInferrer = sc.get('layerInferrer');
41
+ const dimensionAnalyzer = sc.get('dimensionAnalyzer');
42
+ return new PanoramaAggregator({
43
+ roleRefiner,
44
+ couplingAnalyzer,
45
+ layerInferrer,
46
+ db: getDb(),
47
+ projectRoot: getProjectRoot(),
48
+ dimensionAnalyzer,
49
+ });
50
+ });
51
+ ct.singleton('panoramaScanner', () => {
52
+ const logger = (ct.singletons.logger ?? {
53
+ info() { },
54
+ warn() { },
55
+ });
56
+ return new PanoramaScanner({
57
+ projectRoot: getProjectRoot(),
58
+ container: container,
59
+ logger,
60
+ });
61
+ });
62
+ ct.singleton('panoramaService', (c) => {
63
+ const sc = c;
64
+ const aggregator = sc.get('panoramaAggregator');
65
+ const scanner = sc.get('panoramaScanner');
66
+ const moduleDiscoverer = sc.get('moduleDiscoverer');
67
+ return new PanoramaService({
68
+ aggregator,
69
+ db: getDb(),
70
+ projectRoot: getProjectRoot(),
71
+ scanner,
72
+ moduleDiscoverer,
73
+ });
74
+ });
75
+ },
76
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * SignalModule — Phase 0 信号基础设施注册
3
+ *
4
+ * 注册:
5
+ * - signalBus: 统一信号总线(基础设施层)
6
+ * - hitRecorder: 批量使用信号采集器(服务层)
7
+ * - intent JSONL persistence subscriber
8
+ */
9
+ import type { ServiceContainer } from '../ServiceContainer.js';
10
+ export declare function register(c: ServiceContainer): void;
@@ -0,0 +1,84 @@
1
+ /**
2
+ * SignalModule — Phase 0 信号基础设施注册
3
+ *
4
+ * 注册:
5
+ * - signalBus: 统一信号总线(基础设施层)
6
+ * - hitRecorder: 批量使用信号采集器(服务层)
7
+ * - intent JSONL persistence subscriber
8
+ */
9
+ import fs from 'node:fs';
10
+ import path from 'node:path';
11
+ import { SignalAggregator } from '../../infrastructure/signal/SignalAggregator.js';
12
+ import { SignalBridge } from '../../infrastructure/signal/SignalBridge.js';
13
+ import { SignalBus } from '../../infrastructure/signal/SignalBus.js';
14
+ import { SignalTraceWriter } from '../../infrastructure/signal/SignalTraceWriter.js';
15
+ import { HitRecorder } from '../../service/signal/HitRecorder.js';
16
+ import { resolveProjectRoot } from '../../shared/resolveProjectRoot.js';
17
+ import { shutdown } from '../../shared/shutdown.js';
18
+ /**
19
+ * Register intent signal subscriber for JSONL persistence.
20
+ * Replaces standalone SignalLogger — writes IntentChainRecord to .autosnippet/logs/signals/YYYY-MM-DD.jsonl.
21
+ */
22
+ function registerIntentPersistence(signalBus, projectRoot) {
23
+ signalBus.subscribe('intent', (signal) => {
24
+ try {
25
+ const chain = signal.metadata?.chain;
26
+ if (!chain) {
27
+ return;
28
+ }
29
+ const dir = path.join(projectRoot, '.autosnippet', 'logs', 'signals');
30
+ fs.mkdirSync(dir, { recursive: true });
31
+ const d = new Date(signal.timestamp);
32
+ const dateStr = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
33
+ const filePath = path.join(dir, `${dateStr}.jsonl`);
34
+ fs.appendFileSync(filePath, `${JSON.stringify(chain)}\n`, 'utf8');
35
+ }
36
+ catch {
37
+ // Write failure is non-blocking
38
+ }
39
+ });
40
+ }
41
+ export function register(c) {
42
+ // ═══ Infrastructure ═══
43
+ c.singleton('signalBus', () => new SignalBus());
44
+ // ═══ Service ═══
45
+ c.singleton('hitRecorder', (ct) => {
46
+ const bus = ct.get('signalBus');
47
+ const db = ct.get('database');
48
+ const recorder = new HitRecorder(bus, db);
49
+ recorder.start();
50
+ // shutdown hook: 在 DB close 之前 flush buffer
51
+ shutdown.register(async () => {
52
+ await recorder.stop();
53
+ }, 'hitRecorder');
54
+ return recorder;
55
+ });
56
+ // ═══ Intent Signal Persistence ═══
57
+ // Register after signalBus is created — subscribe for JSONL persistence
58
+ const signalBus = c.get('signalBus');
59
+ const projectRoot = resolveProjectRoot(c);
60
+ registerIntentPersistence(signalBus, projectRoot);
61
+ // ═══ SignalBridge — SignalBus → EventBus 桥接 ═══
62
+ c.singleton('signalBridge', (ct) => {
63
+ const bus = ct.get('signalBus');
64
+ const eventBus = ct.get('eventBus');
65
+ return new SignalBridge(bus, eventBus);
66
+ });
67
+ // ═══ SignalTraceWriter — 全类型信号 JSONL 留痕 ═══
68
+ c.singleton('signalTraceWriter', (ct) => {
69
+ const bus = ct.get('signalBus');
70
+ const root = resolveProjectRoot(ct);
71
+ return new SignalTraceWriter(bus, path.join(root, '.autosnippet', 'logs', 'signals'));
72
+ });
73
+ // ═══ SignalAggregator — 滑窗统计 + 异常检测 ═══
74
+ c.singleton('signalAggregator', (ct) => {
75
+ const bus = ct.get('signalBus');
76
+ const reportStore = ct.get('reportStore');
77
+ const agg = new SignalAggregator(bus, reportStore);
78
+ agg.start();
79
+ shutdown.register(async () => {
80
+ agg.stop();
81
+ }, 'signalAggregator');
82
+ return agg;
83
+ });
84
+ }
@@ -169,6 +169,7 @@ export declare class KnowledgeRepositoryImpl extends BaseRepository {
169
169
  updatedAt: number;
170
170
  publishedAt: number | null;
171
171
  publishedBy: string | null;
172
+ staging_deadline: number | null;
172
173
  };
173
174
  /**
174
175
  * 覆写 BaseRepository 的 _mapRowToEntity
@@ -200,7 +200,10 @@ export class KnowledgeRepositoryImpl extends BaseRepository {
200
200
  SELECT
201
201
  COUNT(*) as total,
202
202
  SUM(CASE WHEN lifecycle = 'pending' THEN 1 ELSE 0 END) as pending,
203
+ SUM(CASE WHEN lifecycle = 'staging' THEN 1 ELSE 0 END) as staging,
203
204
  SUM(CASE WHEN lifecycle = 'active' THEN 1 ELSE 0 END) as active,
205
+ SUM(CASE WHEN lifecycle = 'evolving' THEN 1 ELSE 0 END) as evolving,
206
+ SUM(CASE WHEN lifecycle = 'decaying' THEN 1 ELSE 0 END) as decaying,
204
207
  SUM(CASE WHEN lifecycle = 'deprecated' THEN 1 ELSE 0 END) as deprecated,
205
208
  SUM(CASE WHEN kind = 'rule' THEN 1 ELSE 0 END) as rules,
206
209
  SUM(CASE WHEN kind = 'pattern' THEN 1 ELSE 0 END) as patterns,
@@ -238,6 +241,8 @@ export class KnowledgeRepositoryImpl extends BaseRepository {
238
241
  // SQLite INTEGER → boolean
239
242
  autoApprovable: !!row.autoApprovable,
240
243
  includeHeaders: !!row.includeHeaders,
244
+ // Staging support
245
+ stagingDeadline: row.staging_deadline || null,
241
246
  });
242
247
  }
243
248
  /** KnowledgeEntry → DB Row (camelCase 列名 = 属性名,直传) */
@@ -287,6 +292,7 @@ export class KnowledgeRepositoryImpl extends BaseRepository {
287
292
  updatedAt: e.updatedAt || now,
288
293
  publishedAt: e.publishedAt || null,
289
294
  publishedBy: e.publishedBy || null,
295
+ staging_deadline: e.stagingDeadline || null,
290
296
  };
291
297
  }
292
298
  /**
@@ -18,6 +18,7 @@
18
18
  * bootstrap:all-completed — 全部任务完成
19
19
  */
20
20
  import type { EventBus } from '../../infrastructure/event/EventBus.js';
21
+ import type { SignalBus } from '../../infrastructure/signal/SignalBus.js';
21
22
  interface TaskMeta {
22
23
  type?: string;
23
24
  dimId?: string;
@@ -40,6 +41,7 @@ interface TaskDef {
40
41
  }
41
42
  interface BootstrapTaskManagerOpts {
42
43
  eventBus?: EventBus | null;
44
+ signalBus?: SignalBus | null;
43
45
  getRealtimeService?: (() => {
44
46
  broadcastEvent(name: string, data: unknown): void;
45
47
  } | null) | null;
@@ -96,7 +98,7 @@ declare class BootstrapSession {
96
98
  }
97
99
  export declare class BootstrapTaskManager {
98
100
  #private;
99
- constructor({ eventBus, getRealtimeService }?: BootstrapTaskManagerOpts);
101
+ constructor({ eventBus, signalBus, getRealtimeService }?: BootstrapTaskManagerOpts);
100
102
  /**
101
103
  * 启动新的 bootstrap 会话
102
104
  *
@@ -118,10 +118,12 @@ class BootstrapSession {
118
118
  export class BootstrapTaskManager {
119
119
  #currentSession = null;
120
120
  #eventBus = null;
121
+ #signalBus = null;
121
122
  /** 获取 RealtimeService 的 getter(延迟获取,避免循环依赖) */
122
123
  #getRealtimeService = null;
123
- constructor({ eventBus, getRealtimeService } = {}) {
124
+ constructor({ eventBus, signalBus, getRealtimeService } = {}) {
124
125
  this.#eventBus = eventBus || null;
126
+ this.#signalBus = signalBus || null;
125
127
  this.#getRealtimeService = getRealtimeService || null;
126
128
  }
127
129
  // ═══════════════════════════════════════════════════════════
@@ -197,6 +199,15 @@ export class BootstrapTaskManager {
197
199
  error: t.error,
198
200
  })),
199
201
  });
202
+ this.#signalBus?.send('lifecycle', 'Bootstrap', 0.3, {
203
+ metadata: {
204
+ action: 'bootstrap_aborted',
205
+ sessionId: session.id,
206
+ reason,
207
+ completed: session.completedTasks,
208
+ failed: session.failedTasks,
209
+ },
210
+ });
200
211
  }
201
212
  /**
202
213
  * 验证 sessionId 是否仍然是活跃 session
@@ -350,6 +361,14 @@ export class BootstrapTaskManager {
350
361
  error: t.error,
351
362
  })),
352
363
  });
364
+ this.#signalBus?.send('lifecycle', 'Bootstrap', 1, {
365
+ metadata: {
366
+ action: 'bootstrap_completed',
367
+ sessionId: session.id,
368
+ completed: session.completedTasks,
369
+ failed: session.failedTasks,
370
+ },
371
+ });
353
372
  }
354
373
  /** 发射事件到 EventBus + 推送到前端 Socket.io */
355
374
  #emit(eventName, data) {
@@ -44,16 +44,15 @@ const MCP_TOOLS_SUMMARY = [
44
44
  name: 'autosnippet_submit_knowledge',
45
45
  desc: 'Submit a knowledge candidate (strict validation)',
46
46
  },
47
- {
48
- name: 'autosnippet_submit_knowledge_batch',
49
- desc: 'Batch submit candidates (with dedup + throttle)',
50
- },
51
47
  { name: 'autosnippet_guard', desc: 'Code compliance check (single file or batch audit)' },
52
48
  { name: 'autosnippet_structure', desc: 'Project structure discovery (targets/files/metadata)' },
53
49
  { name: 'autosnippet_graph', desc: 'Knowledge graph query (query/impact/path/stats)' },
54
50
  { name: 'autosnippet_skill', desc: 'Skill management (list/load/create/update/delete)' },
55
- { name: 'autosnippet_save_document', desc: 'Save development document (auto-publish)' },
56
51
  { name: 'autosnippet_bootstrap', desc: 'Project cold-start & scan' },
52
+ {
53
+ name: 'autosnippet_panorama',
54
+ desc: 'Project panorama (operation: overview/module/gaps/health)',
55
+ },
57
56
  { name: 'autosnippet_health', desc: 'Service health & KB statistics' },
58
57
  { name: 'autosnippet_capabilities', desc: 'List all available MCP tools (self-discovery)' },
59
58
  ];
@@ -157,7 +157,9 @@ export declare class CursorDeliveryPipeline {
157
157
  };
158
158
  }>;
159
159
  /**
160
- * 加载知识条目(active + high-confidence pending)
160
+ * 加载知识条目(active + staging + high-confidence pending)
161
+ *
162
+ * M2 六态状态机: staging/active/evolving 均为 CONSUMABLE 状态
161
163
  */
162
164
  _loadEntries(): Promise<KnowledgeEntryProps[]>;
163
165
  /**