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
@@ -9,8 +9,8 @@
9
9
  * autosnippet_bootstrap 已迁移到 bootstrap-external.js(外部 Agent 路径)。
10
10
  */
11
11
  import { getRequiredFieldsDescription } from '#domain/knowledge/FieldSpec.js';
12
+ import { envelope } from '../envelope.js';
12
13
  import * as browseHandlers from './browse.js';
13
- import * as candidateHandlers from './candidate.js';
14
14
  import * as guardHandlers from './guard.js';
15
15
  import * as searchHandlers from './search.js';
16
16
  import * as skillHandlers from './skill.js';
@@ -123,11 +123,24 @@ export async function consolidatedGraph(ctx, args) {
123
123
  // ─── autosnippet_guard (整合 3 → 1) ─────────────────────────
124
124
  /**
125
125
  * Guard 检查:按参数自动路由
126
+ * operation: 'reverse_audit' → guardReverseAudit() (Recipe→Code 反向验证)
127
+ * operation: 'coverage_matrix' → guardCoverageMatrix() (模块覆盖率矩阵)
128
+ * operation: 'compliance_report' → guardComplianceReport() (3D 合规报告)
126
129
  * 无参数 → guardReview() (自动 git diff 检测 + inline recipe)
127
130
  * 有 files → guardReview() (指定文件 + inline recipe) — files 为 string[] 或 {path}[]
128
131
  * 有 code → guardCheck() (单文件内联检查)
129
132
  */
130
133
  export async function consolidatedGuard(ctx, args) {
134
+ // operation 显式路由
135
+ if (args.operation === 'reverse_audit') {
136
+ return guardHandlers.guardReverseAudit(ctx, args);
137
+ }
138
+ if (args.operation === 'coverage_matrix') {
139
+ return guardHandlers.guardCoverageMatrix(ctx, args);
140
+ }
141
+ if (args.operation === 'compliance_report') {
142
+ return guardHandlers.guardComplianceReport(ctx, args);
143
+ }
131
144
  // 有 code → 单文件检查(旧模式)
132
145
  if (args.code) {
133
146
  return guardHandlers.guardCheck(ctx, args);
@@ -174,116 +187,283 @@ export async function consolidatedSkill(ctx, args) {
174
187
  throw new Error(`Unknown skill operation: ${op}. Expected: list, load, create, update, delete, suggest, feedback`);
175
188
  }
176
189
  }
177
- // ─── autosnippet_submit_knowledge (增强:严格前置校验 + dedup + 提交追踪) ──
190
+ // ─── autosnippet_submit_knowledge (unified pipeline) ──────────────────────
178
191
  /**
179
- * 增强版提交:严格前置校验,缺少必要字段直接拒绝(不入库)。
180
- * 通过校验后执行提交 + 去重检测,结果附在响应中。
181
- * v2: 成功提交后记录到 BootstrapSession.submissionTracker (如果有活跃 session)。
192
+ * 统一提交管线:单条与批量走同一代码路径。
193
+ *
194
+ * 流程:
195
+ * 1. 解析 items[] → 限流
196
+ * 2. 严格校验所有条目(UnifiedValidator)→ valid[] + rejected[]
197
+ * 3. 融合分析(ConsolidationAdvisor.analyzeBatch)→ submittable[] + blocked[]
198
+ * 4. 提交 submittable → enrich + service.create()
199
+ * 5. 返回统一结果
182
200
  *
183
201
  * 设计原则:
184
202
  * - 不降级:缺字段不自动补全,要求 Agent 一次性生成完整数据
185
- * - 不重复提交:拒绝时不创建任何记录,Agent 需补齐后重新调用
203
+ * - 不碎片化:优先增强已有 Recipe,而非总新建
204
+ * - 不重复提交:拒绝时不创建任何记录
205
+ * - 单条/批量完全一致的校验与融合逻辑
186
206
  */
187
207
  export async function enhancedSubmitKnowledge(ctx, args) {
188
208
  const { submitKnowledge } = await import('./knowledge.js');
189
209
  const { UnifiedValidator } = await import('#domain/knowledge/UnifiedValidator.js');
190
- const { envelope } = await import('../envelope.js');
191
- const skipDuplicateCheck = args.skipDuplicateCheck === true;
192
- // ── 严格前置校验:UnifiedValidator 不通过则直接拒绝 ──
210
+ const items = args.items;
211
+ if (!items || !Array.isArray(items) || items.length === 0) {
212
+ return envelope({
213
+ success: false,
214
+ errorCode: 'INVALID_INPUT',
215
+ message: 'items 数组是必需的且不能为空。请传入 items: [{ title, language, ... }]',
216
+ meta: { tool: 'autosnippet_submit_knowledge' },
217
+ });
218
+ }
219
+ const skipConsolidation = args.skipConsolidation === true;
220
+ const source = args.source || 'mcp';
221
+ const dimensionId = args.dimensionId;
222
+ const clientId = args.client_id;
223
+ // ── Step 1: 限流 ──
224
+ const { checkRecipeSave } = await import('#http/middleware/RateLimiter.js');
225
+ const { resolveProjectRoot } = await import('#shared/resolveProjectRoot.js');
226
+ const projectRoot = resolveProjectRoot(ctx.container);
227
+ const limitCheck = checkRecipeSave(projectRoot, clientId || process.env.USER || 'mcp-client');
228
+ if (!limitCheck.allowed) {
229
+ return envelope({
230
+ success: false,
231
+ message: `提交过于频繁,请 ${limitCheck.retryAfter}s 后再试。`,
232
+ errorCode: 'RATE_LIMIT',
233
+ meta: { tool: 'autosnippet_submit_knowledge' },
234
+ });
235
+ }
236
+ // ── Step 2: 严格校验所有条目 ──
193
237
  const validator = new UnifiedValidator();
194
- const validResult = validator.validate(args, {
195
- skipUniqueness: true, // 去重由下方 dedup 单独处理
196
- });
197
- if (!validResult.pass) {
198
- // v2: 记录拒绝到 BootstrapSession tracker
199
- _trackRejection(ctx, args);
238
+ const validItems = [];
239
+ const rejectedItems = [];
240
+ for (let i = 0; i < items.length; i++) {
241
+ const item = items[i];
242
+ // 合并批次级选项到条目
243
+ if (!item.source) {
244
+ item.source = source;
245
+ }
246
+ if (dimensionId && !item.dimensionId) {
247
+ item.dimensionId = dimensionId;
248
+ }
249
+ const validation = validator.validate(item, { skipUniqueness: false });
250
+ if (validation.pass) {
251
+ validItems.push({ index: i, item });
252
+ // 记录标题/指纹供后续去重检测
253
+ validator.recordSubmission(item.title, item.content?.pattern);
254
+ }
255
+ else {
256
+ rejectedItems.push({
257
+ index: i,
258
+ title: item.title || '(untitled)',
259
+ errors: validation.errors,
260
+ warnings: validation.warnings,
261
+ });
262
+ // 记录拒绝到 BootstrapSession tracker
263
+ _trackRejection(ctx, item, dimensionId);
264
+ // 仍然记录标题/指纹防止后续条目重复
265
+ validator.recordSubmission(item.title, item.content?.pattern);
266
+ }
267
+ }
268
+ // 全部被拒绝
269
+ if (validItems.length === 0) {
270
+ const allMissing = [...new Set(rejectedItems.flatMap((it) => it.errors))];
200
271
  return envelope({
201
272
  success: false,
202
- message: `提交被拒绝:${validResult.errors.join('; ')}。请在单次调用中补齐所有字段后重新提交,不要分步提交或先提交再补全。`,
203
273
  errorCode: 'INCOMPLETE_SUBMISSION',
274
+ message: `全部 ${items.length} 条知识条目被拒绝。请在单次调用中补齐所有字段后重新提交。`,
204
275
  data: {
205
- errors: validResult.errors,
206
- warnings: validResult.warnings,
276
+ rejectedItems,
207
277
  requiredFields: getRequiredFieldsDescription(),
278
+ commonErrors: allMissing,
208
279
  },
209
280
  meta: { tool: 'autosnippet_submit_knowledge' },
210
281
  });
211
282
  }
212
- // ── 校验通过,执行提交 ──
213
- const result = await submitKnowledge(ctx, args);
214
- // 如果提交本身失败,直接返回
215
- if (result && !result.success) {
216
- return result;
283
+ // ── Step 3: 融合分析(统一对所有有效条目运行) ──
284
+ const submittableItems = [];
285
+ const blockedItems = [];
286
+ if (skipConsolidation) {
287
+ submittableItems.push(...validItems);
217
288
  }
218
- // ── 附加去重检测结果(非阻塞) ──
219
- let duplicateCheck = null;
220
- if (!skipDuplicateCheck) {
289
+ else {
290
+ const advisor = ctx.container.get('consolidationAdvisor');
291
+ if (!advisor || typeof advisor.analyzeBatch !== 'function') {
292
+ // DI 未注册时降级放行
293
+ submittableItems.push(...validItems);
294
+ }
295
+ else {
296
+ try {
297
+ const candidates = validItems.map((v) => ({
298
+ title: v.item.title || '',
299
+ description: v.item.description || '',
300
+ doClause: v.item.doClause,
301
+ dontClause: v.item.dontClause,
302
+ coreCode: v.item.coreCode,
303
+ category: v.item.category,
304
+ trigger: v.item.trigger,
305
+ whenClause: v.item.whenClause,
306
+ kind: v.item.kind,
307
+ content: v.item.content,
308
+ }));
309
+ const batchAdvice = advisor.analyzeBatch(candidates);
310
+ for (const { index: adviceIdx, advice } of batchAdvice.items) {
311
+ const validEntry = validItems[adviceIdx];
312
+ if (advice.action === 'create') {
313
+ submittableItems.push(validEntry);
314
+ }
315
+ else {
316
+ blockedItems.push({
317
+ index: validEntry.index,
318
+ title: validEntry.item.title || '(untitled)',
319
+ consolidation: advice,
320
+ });
321
+ }
322
+ }
323
+ // 将批次内重叠信息附加到 blockedItems
324
+ if (batchAdvice.internalOverlaps.length > 0) {
325
+ for (const overlap of batchAdvice.internalOverlaps) {
326
+ const entryB = validItems[overlap.indexB];
327
+ // 如果 B 已经被放行,降级为 blocked(批次内碎片化警告)
328
+ const alreadyBlocked = blockedItems.some((b) => b.index === entryB.index);
329
+ if (!alreadyBlocked) {
330
+ const entryA = validItems[overlap.indexA];
331
+ blockedItems.push({
332
+ index: entryB.index,
333
+ title: entryB.item.title || '(untitled)',
334
+ consolidation: {
335
+ action: 'merge',
336
+ reason: `与同批次候选「${entryA.item.title || ''}」高度重叠(${(overlap.similarity * 100).toFixed(0)}%),建议合并后再提交。`,
337
+ internalOverlap: true,
338
+ overlapWith: {
339
+ index: entryA.index,
340
+ title: entryA.item.title,
341
+ similarity: overlap.similarity,
342
+ },
343
+ },
344
+ });
345
+ // 从 submittable 中移除
346
+ const subIdx = submittableItems.findIndex((s) => s.index === entryB.index);
347
+ if (subIdx >= 0) {
348
+ submittableItems.splice(subIdx, 1);
349
+ }
350
+ }
351
+ }
352
+ }
353
+ }
354
+ catch {
355
+ // 分析失败时静默降级放行
356
+ submittableItems.push(...validItems.filter((v) => !submittableItems.some((s) => s.index === v.index)));
357
+ }
358
+ }
359
+ }
360
+ // ── Step 4: 提交所有通过的条目 ──
361
+ let successCount = 0;
362
+ const successIds = [];
363
+ const submitErrors = [];
364
+ for (const { index, item } of submittableItems) {
221
365
  try {
222
- const dedupCandidate = {
223
- title: args.title,
224
- summary: args.description || '',
225
- code: args.content?.pattern || '',
226
- };
227
- const dedupResult = await candidateHandlers.checkDuplicate(ctx, {
228
- candidate: dedupCandidate,
229
- threshold: 0.7,
230
- topK: 3,
366
+ const result = await submitKnowledge(ctx, {
367
+ ...item,
368
+ source: item.source || source,
369
+ client_id: clientId,
231
370
  });
232
- if (dedupResult?.data) {
233
- duplicateCheck = {
234
- hasSimilar: dedupResult.data.similar?.length > 0,
235
- closest: dedupResult.data.similar?.[0] || null,
236
- };
371
+ if (result?.success && result.data?.id) {
372
+ successCount++;
373
+ const recipeId = result.data.id;
374
+ successIds.push(recipeId);
375
+ _trackSubmission(ctx, item, dimensionId, recipeId);
376
+ }
377
+ else {
378
+ submitErrors.push({
379
+ index,
380
+ title: item.title || '(untitled)',
381
+ error: result?.message || 'unknown error',
382
+ });
237
383
  }
238
384
  }
239
- catch {
240
- duplicateCheck = { hasSimilar: false, note: 'dedup skipped due to error' };
385
+ catch (err) {
386
+ submitErrors.push({
387
+ index,
388
+ title: item.title || '(untitled)',
389
+ error: err instanceof Error ? err.message : String(err),
390
+ });
241
391
  }
242
392
  }
243
- // 将去重结果附到响应中
244
- if (result?.data) {
245
- result.data.duplicateCheck = duplicateCheck;
393
+ // ── Step 5: 构建统一响应 ──
394
+ const data = {
395
+ count: successCount,
396
+ total: items.length,
397
+ };
398
+ if (successIds.length > 0) {
399
+ data.ids = successIds;
400
+ }
401
+ if (submitErrors.length > 0) {
402
+ data.errors = submitErrors;
246
403
  }
247
- // v2: 记录成功提交到 BootstrapSession tracker
248
- if (result?.data?.id) {
249
- _trackSubmission(ctx, args, result.data.id);
404
+ if (rejectedItems.length > 0) {
405
+ const allMissing = [...new Set(rejectedItems.flatMap((it) => it.errors))];
406
+ data.rejectedItems = rejectedItems;
407
+ data.rejectedSummary = {
408
+ rejectedCount: rejectedItems.length,
409
+ commonErrors: allMissing,
410
+ message: `${rejectedItems.length}/${items.length} 条知识条目因校验未通过被拒绝。`,
411
+ };
250
412
  }
251
- return result;
413
+ if (blockedItems.length > 0) {
414
+ data.blockedItems = blockedItems;
415
+ data.blockedSummary = {
416
+ blockedCount: blockedItems.length,
417
+ message: `${blockedItems.length} 条因融合分析被阻塞(与已有 Recipe 重叠或实质性不足)。设 skipConsolidation: true 可跳过。`,
418
+ };
419
+ }
420
+ const allOk = successCount === items.length;
421
+ return envelope({
422
+ success: successCount > 0,
423
+ data,
424
+ message: allOk
425
+ ? `已提交 ${successCount} 条知识条目。`
426
+ : `已提交 ${successCount}/${items.length} 条知识条目。`,
427
+ meta: { tool: 'autosnippet_submit_knowledge' },
428
+ });
252
429
  }
253
- // ── v2: BootstrapSession 提交追踪辅助函数 ──────────────────
254
- /**
255
- * 记录成功提交到活跃 BootstrapSession 的 submissionTracker
256
- * 静默失败 — tracker 不可用时不影响提交本身
257
- */
258
- function _trackSubmission(ctx, args, recipeId) {
430
+ function _getSession(ctx) {
259
431
  try {
260
432
  const sessionManager = ctx.container.get('bootstrapSessionManager');
261
433
  const session = sessionManager?.getSession?.();
262
434
  if (!session?.submissionTracker) {
263
- return;
435
+ return null;
264
436
  }
265
- // 推断当前维度: 优先使用 Agent 显式传递的 dimensionId,其次推断 remainingDimIds[0]
266
437
  const progress = session.getProgress();
267
- const currentDimId = args.dimensionId || progress.remainingDimIds[0] || args.knowledgeType || 'unknown';
268
- session.submissionTracker.recordSubmission(currentDimId, args, recipeId);
438
+ return { session, dimId: progress.remainingDimIds[0] || 'unknown' };
439
+ }
440
+ catch {
441
+ return null;
442
+ }
443
+ }
444
+ function _trackSubmission(ctx, item, dimensionId, recipeId) {
445
+ const s = _getSession(ctx);
446
+ if (!s) {
447
+ return;
448
+ }
449
+ try {
450
+ const dimId = dimensionId || item.dimensionId || s.dimId;
451
+ s.session.submissionTracker?.recordSubmission(dimId, item, recipeId);
269
452
  }
270
453
  catch {
271
- // tracker 不可用时静默降级
454
+ /* best effort */
272
455
  }
273
456
  }
274
- /** 记录拒绝到活跃 BootstrapSession submissionTracker */
275
- function _trackRejection(ctx, args) {
457
+ function _trackRejection(ctx, item, dimensionId) {
458
+ const s = _getSession(ctx);
459
+ if (!s) {
460
+ return;
461
+ }
276
462
  try {
277
- const sessionManager = ctx.container.get('bootstrapSessionManager');
278
- const session = sessionManager?.getSession?.();
279
- if (!session?.submissionTracker) {
280
- return;
281
- }
282
- const progress = session.getProgress();
283
- const currentDimId = args?.dimensionId || progress.remainingDimIds[0] || 'unknown';
284
- session.submissionTracker.recordRejection(currentDimId, args?.title || '(untitled)', 'validation failed');
463
+ const dimId = dimensionId || item.dimensionId || s.dimId;
464
+ s.session.submissionTracker?.recordRejection(dimId, item.title || '(untitled)', 'validation failed');
285
465
  }
286
466
  catch {
287
- // 静默降级
467
+ /* best effort */
288
468
  }
289
469
  }
@@ -113,6 +113,29 @@ export declare function guardAuditFiles(ctx: McpContext, args: GuardAuditArgs):
113
113
  errorCode: string | null;
114
114
  message: string;
115
115
  data: {
116
+ capabilityReport?: {
117
+ executedChecks: Record<string, {
118
+ total: number;
119
+ executed: number;
120
+ skipped: number;
121
+ }>;
122
+ skippedChecks: unknown[];
123
+ boundaries: unknown[];
124
+ uncertainResults: Array<{
125
+ ruleId: string;
126
+ message: string;
127
+ layer: string;
128
+ reason: string;
129
+ detail: string;
130
+ }>;
131
+ checkCoverage: number;
132
+ } | undefined;
133
+ uncertainSummary?: {
134
+ total: number;
135
+ byLayer: Record<string, number>;
136
+ byReason: Record<string, number>;
137
+ } | undefined;
138
+ boundaries?: unknown[] | undefined;
116
139
  crossFileViolations?: unknown[] | undefined;
117
140
  summary: {
118
141
  [key: string]: unknown;
@@ -128,6 +151,7 @@ export declare function guardAuditFiles(ctx: McpContext, args: GuardAuditArgs):
128
151
  total: number;
129
152
  errors: number;
130
153
  warnings: number;
154
+ uncertain?: number;
131
155
  };
132
156
  }[];
133
157
  } | null;
@@ -190,6 +214,12 @@ export declare function guardReview(ctx: McpContext, args: GuardReviewArgs): Pro
190
214
  errorCode: string | null;
191
215
  message: string;
192
216
  data: {
217
+ uncertainSummary?: {
218
+ total: number;
219
+ byLayer: Record<string, number>;
220
+ byReason: Record<string, number>;
221
+ } | undefined;
222
+ uncertainResults?: unknown[] | undefined;
193
223
  passed: boolean;
194
224
  reviewRound: any;
195
225
  fileSource: string;
@@ -260,6 +290,7 @@ export declare function scanProject(ctx: McpContext, args: ScanProjectArgs): Pro
260
290
  total: number;
261
291
  errors: number;
262
292
  warnings: number;
293
+ uncertain?: number;
263
294
  };
264
295
  }[];
265
296
  } | null;
@@ -271,4 +302,123 @@ export declare function scanProject(ctx: McpContext, args: ScanProjectArgs): Pro
271
302
  tool?: string | undefined;
272
303
  };
273
304
  }>;
305
+ interface ReverseAuditArgs {
306
+ maxFiles?: number;
307
+ [key: string]: unknown;
308
+ }
309
+ /**
310
+ * 对所有 active rule Recipe 执行反向验证:
311
+ * - 检查 coreCode 引用的符号是否还存在
312
+ * - 检查 guard pattern 匹配率是否骤降
313
+ */
314
+ export declare function guardReverseAudit(ctx: McpContext, args: ReverseAuditArgs): Promise<{
315
+ success: boolean;
316
+ errorCode: string | null;
317
+ message: string;
318
+ data: {
319
+ totalRecipes: number;
320
+ healthy: number;
321
+ investigate: number;
322
+ decay: number;
323
+ drifts: {
324
+ recipeId: string;
325
+ title: string;
326
+ recommendation: import("#service/guard/ReverseGuard.js").ReverseRecommendation;
327
+ signals: import("#service/guard/ReverseGuard.js").PatternDriftSignal[];
328
+ }[];
329
+ allResults: {
330
+ recipeId: string;
331
+ title: string;
332
+ recommendation: import("#service/guard/ReverseGuard.js").ReverseRecommendation;
333
+ signalCount: number;
334
+ }[];
335
+ } | null;
336
+ meta: {
337
+ source?: string | undefined;
338
+ responseTimeMs?: number | undefined;
339
+ version: string;
340
+ tool?: string | undefined;
341
+ };
342
+ }>;
343
+ interface CoverageMatrixArgs {
344
+ [key: string]: unknown;
345
+ }
346
+ /**
347
+ * 计算模块级 Guard 规则覆盖率矩阵
348
+ */
349
+ export declare function guardCoverageMatrix(ctx: McpContext, _args: CoverageMatrixArgs): Promise<{
350
+ success: boolean;
351
+ errorCode: string | null;
352
+ message: string;
353
+ data: {
354
+ overallCoverage: number;
355
+ zeroModules: string[];
356
+ lowModules: string[];
357
+ modules: import("#service/guard/CoverageAnalyzer.js").ModuleCoverage[];
358
+ } | null;
359
+ meta: {
360
+ source?: string | undefined;
361
+ responseTimeMs?: number | undefined;
362
+ version: string;
363
+ tool?: string | undefined;
364
+ };
365
+ }>;
366
+ interface ComplianceReportArgs {
367
+ [key: string]: unknown;
368
+ }
369
+ /**
370
+ * 生成 3D 合规报告(compliance + coverage + confidence)
371
+ * 包含完整 uncertain 消费数据
372
+ */
373
+ export declare function guardComplianceReport(ctx: McpContext, _args: ComplianceReportArgs): Promise<{
374
+ success: boolean;
375
+ errorCode: string | null;
376
+ message: string;
377
+ data: {
378
+ scores: {
379
+ compliance: number;
380
+ coverage: number;
381
+ confidence: number;
382
+ };
383
+ qualityGate: {
384
+ status: string;
385
+ score: number;
386
+ thresholds: {
387
+ maxErrors: number;
388
+ maxWarnings: number;
389
+ minScore: number;
390
+ };
391
+ };
392
+ summary: {
393
+ filesScanned: number;
394
+ totalViolations: number;
395
+ errors: number;
396
+ warnings: number;
397
+ infos: number;
398
+ };
399
+ uncertainSummary: {
400
+ total: number;
401
+ byLayer: Record<string, number>;
402
+ byReason: Record<string, number>;
403
+ };
404
+ boundaries: {
405
+ type: string;
406
+ description: string;
407
+ affectedRules: string[];
408
+ suggestedAction: string;
409
+ }[];
410
+ topViolations: any[];
411
+ trend: {
412
+ errorsChange: number;
413
+ warningsChange: number;
414
+ hasHistory: boolean;
415
+ };
416
+ } | null;
417
+ meta: {
418
+ source?: string | undefined;
419
+ responseTimeMs?: number | undefined;
420
+ version: string;
421
+ tool?: string | undefined;
422
+ };
423
+ }>;
274
424
  export {};