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,6 +2,9 @@
2
2
  * Stats — 统计值对象
3
3
  *
4
4
  * 记录知识条目的使用统计:浏览、采用、应用、Guard 命中、搜索命中、权威分。
5
+ *
6
+ * Phase 0 扩展:新增时间戳、滑窗统计、版本号、FP 率字段。
7
+ * 新字段均有默认值,与旧 JSON 100% 向后兼容。
5
8
  */
6
9
  type StatsCounter = 'views' | 'adoptions' | 'applications' | 'guardHits' | 'searchHits';
7
10
  interface StatsProps {
@@ -11,6 +14,14 @@ interface StatsProps {
11
14
  guardHits?: number;
12
15
  searchHits?: number;
13
16
  authority?: number;
17
+ lastHitAt?: number | null;
18
+ lastSearchedAt?: number | null;
19
+ lastGuardHitAt?: number | null;
20
+ hitsLast30d?: number;
21
+ hitsLast90d?: number;
22
+ searchHitsLast30d?: number;
23
+ version?: number;
24
+ ruleFalsePositiveRate?: number | null;
14
25
  }
15
26
  export declare class Stats {
16
27
  adoptions: number;
@@ -19,11 +30,21 @@ export declare class Stats {
19
30
  guardHits: number;
20
31
  searchHits: number;
21
32
  views: number;
33
+ lastHitAt: number | null;
34
+ lastSearchedAt: number | null;
35
+ lastGuardHitAt: number | null;
36
+ hitsLast30d: number;
37
+ hitsLast90d: number;
38
+ searchHitsLast30d: number;
39
+ version: number;
40
+ ruleFalsePositiveRate: number | null;
22
41
  constructor(props?: StatsProps);
23
42
  /** 从任意输入构造 Stats */
24
43
  static from(input: unknown): Stats;
25
44
  /** 增加计数 */
26
45
  increment(counter: StatsCounter, delta?: number): Stats;
46
+ /** 记录一次命中,同时更新时间戳 */
47
+ recordHit(counter: StatsCounter, timestamp?: number): Stats;
27
48
  /** 转换为 JSON */
28
49
  toJSON(): {
29
50
  views: number;
@@ -32,6 +53,14 @@ export declare class Stats {
32
53
  guardHits: number;
33
54
  searchHits: number;
34
55
  authority: number;
56
+ lastHitAt: number | null;
57
+ lastSearchedAt: number | null;
58
+ lastGuardHitAt: number | null;
59
+ hitsLast30d: number;
60
+ hitsLast90d: number;
61
+ searchHitsLast30d: number;
62
+ version: number;
63
+ ruleFalsePositiveRate: number | null;
35
64
  };
36
65
  /** 从 wire format 创建 */
37
66
  static fromJSON(data: unknown): Stats;
@@ -5,6 +5,18 @@ export class Stats {
5
5
  guardHits;
6
6
  searchHits;
7
7
  views;
8
+ // Phase 0: 时间戳 —— "最后一次被使用是什么时候"
9
+ lastHitAt;
10
+ lastSearchedAt;
11
+ lastGuardHitAt;
12
+ // Phase 0: 滑窗统计 —— "最近趋势如何"
13
+ hitsLast30d;
14
+ hitsLast90d;
15
+ searchHitsLast30d;
16
+ // Phase 0: 版本 —— "这条知识更新了几次"
17
+ version;
18
+ // Phase 0: 精度 (仅 kind=rule)
19
+ ruleFalsePositiveRate;
8
20
  constructor(props = {}) {
9
21
  /** 浏览次数 */
10
22
  this.views = props.views ?? 0;
@@ -18,6 +30,15 @@ export class Stats {
18
30
  this.searchHits = props.searchHits ?? 0;
19
31
  /** 权威分 0-5 */
20
32
  this.authority = props.authority ?? 0;
33
+ // Phase 0 扩展字段(旧 JSON 无这些字段时取默认值)
34
+ this.lastHitAt = props.lastHitAt ?? null;
35
+ this.lastSearchedAt = props.lastSearchedAt ?? null;
36
+ this.lastGuardHitAt = props.lastGuardHitAt ?? null;
37
+ this.hitsLast30d = props.hitsLast30d ?? 0;
38
+ this.hitsLast90d = props.hitsLast90d ?? 0;
39
+ this.searchHitsLast30d = props.searchHitsLast30d ?? 0;
40
+ this.version = props.version ?? 1;
41
+ this.ruleFalsePositiveRate = props.ruleFalsePositiveRate ?? null;
21
42
  }
22
43
  /** 从任意输入构造 Stats */
23
44
  static from(input) {
@@ -39,6 +60,18 @@ export class Stats {
39
60
  this[counter] += delta;
40
61
  return this;
41
62
  }
63
+ /** 记录一次命中,同时更新时间戳 */
64
+ recordHit(counter, timestamp = Date.now()) {
65
+ this[counter] += 1;
66
+ this.lastHitAt = timestamp;
67
+ if (counter === 'searchHits') {
68
+ this.lastSearchedAt = timestamp;
69
+ }
70
+ if (counter === 'guardHits') {
71
+ this.lastGuardHitAt = timestamp;
72
+ }
73
+ return this;
74
+ }
42
75
  /** 转换为 JSON */
43
76
  toJSON() {
44
77
  return {
@@ -48,6 +81,14 @@ export class Stats {
48
81
  guardHits: this.guardHits,
49
82
  searchHits: this.searchHits,
50
83
  authority: this.authority,
84
+ lastHitAt: this.lastHitAt,
85
+ lastSearchedAt: this.lastSearchedAt,
86
+ lastGuardHitAt: this.lastGuardHitAt,
87
+ hitsLast30d: this.hitsLast30d,
88
+ hitsLast90d: this.hitsLast90d,
89
+ searchHitsLast30d: this.searchHitsLast30d,
90
+ version: this.version,
91
+ ruleFalsePositiveRate: this.ruleFalsePositiveRate,
51
92
  };
52
93
  }
53
94
  /** 从 wire format 创建 */
@@ -4,11 +4,11 @@
4
4
  * Model Context Protocol (stdio transport)
5
5
  * 提供给 IDE AI Agent (Cursor/VSCode Copilot) 的工具集
6
6
  *
7
- * V3.1 整合:39 → 22 工具(18 agent + 4 admin)
7
+ * V3.3 整合:39 → 16 工具(14 agent + 2 admin)
8
8
  * 通过 ASD_MCP_TIER 环境变量控制可见工具集(agent/admin)
9
9
  *
10
10
  * 冷启动双路径:
11
- * - 外部 Agent 路径: bootstrap (Mission Briefing) → dimension_complete × N → wiki_planwiki_finalize
11
+ * - 外部 Agent 路径: bootstrap (Mission Briefing) → dimension_complete × N → wiki(plan)wiki(finalize)
12
12
  * - 内部 Agent 路径: bootstrap.js bootstrapKnowledge() → orchestrator.js AI pipeline (Phase 5)
13
13
  *
14
14
  * Gateway 权限 gating: 写操作经过 Gateway 权限/宪法/审计检查(支持动态 resolver)
@@ -21,27 +21,15 @@
21
21
  import { McpServer as SdkMcpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
22
22
  import { CapabilityProbe } from '#core/capability/CapabilityProbe.js';
23
23
  import Logger from '#infra/logging/Logger.js';
24
- import type { McpContext, McpServiceContainer } from './handlers/types.js';
25
- /** Decision entry (id + title pair) */
26
- interface DecisionEntry {
27
- id: string;
28
- title: string;
29
- }
30
- /** Decision cache structure */
31
- interface DecisionCache {
32
- decisions: DecisionEntry[];
33
- fetchedAt: number;
34
- ttl: number;
35
- _pending: Promise<DecisionEntry[]> | null;
36
- }
37
- /** MCP session tracking */
24
+ import type { IntentState, McpContext, McpServiceContainer } from './handlers/types.js';
25
+ /** MCP session tracking (with intent lifecycle) */
38
26
  interface McpSession {
39
27
  id: string;
40
28
  startedAt: number;
41
- readyCalled: boolean;
42
29
  toolCallCount: number;
43
30
  toolsUsed: Set<string>;
44
31
  lastActivityAt: number;
32
+ intent: IntentState;
45
33
  }
46
34
  /** McpServer constructor options */
47
35
  interface McpServerOptions {
@@ -60,7 +48,6 @@ export declare class McpServer {
60
48
  logger: ReturnType<typeof Logger.getInstance>;
61
49
  _autoApproveMarked: boolean;
62
50
  _capabilityProbe: CapabilityProbe | null;
63
- _decisionCache: DecisionCache;
64
51
  _lastTaskOperation: string;
65
52
  _session: McpSession;
66
53
  _startedAt: number;
@@ -82,30 +69,24 @@ export declare class McpServer {
82
69
  _registerHandlers(): void;
83
70
  _handleToolCall(name: string, args: Record<string, unknown>): Promise<unknown>;
84
71
  /**
85
- * 在工具返回结果中注入 decisions 摘要 + 更新 session 统计
72
+ * Post-tool-call hook: update session stats + intent behavior tracking.
73
+ * Always called (non-blocking, synchronous).
86
74
  *
87
- * 策略:
88
- * - prime: 刷新缓存,不额外注入(response 本身含 decisions)
89
- * - decision 写操作 (record/revise/unpin): invalidate 缓存(下次查询拉最新)
90
- * - 其他工具: 注入 _activeDecisions 摘要
91
- * - 首次未调 prime 的工具: 注入更强提醒
92
- *
93
- * @param result handler 返回的 envelope 对象
94
- */
95
- _injectDecisions(toolName: string, result: unknown): Promise<unknown>;
96
- /**
97
- * 获取 decisions 摘要(带缓存 + 防并发)
98
- * @returns >>}
75
+ * - Session stats: toolCallCount, toolsUsed, lastActivityAt
76
+ * - Intent tracking (when active): toolCalls, searchQueries, mentionedFiles, drift detection
99
77
  */
100
- private _getDecisionsSummary;
78
+ _trackSession(toolName: string, result: unknown): void;
101
79
  /**
102
- * DB 查询 decisions 摘要(仅 id + title)
80
+ * Inject active decisions + intent context into tool results.
81
+ * Currently deferred — enable by uncommenting the call in _handleToolCall.
103
82
  */
104
- _fetchDecisionsSummary(): Promise<DecisionEntry[]>;
105
- /**
106
- * 从 ready 响应结果中刷新缓存(避免额外 DB 查询)
107
- */
108
- _refreshCacheFromReady(readyResult: unknown): void;
83
+ _injectDecisions(toolName: string, result: unknown): Promise<unknown>;
84
+ private _detectDrift;
85
+ private _computeKeywordOverlap;
86
+ private _computeOverlap;
87
+ private _extractSearchQuery;
88
+ private _extractMentionedFiles;
89
+ private _inferModule;
109
90
  /**
110
91
  * 解析工具名到 handler 函数(V3 整合版)
111
92
  */
@@ -4,11 +4,11 @@
4
4
  * Model Context Protocol (stdio transport)
5
5
  * 提供给 IDE AI Agent (Cursor/VSCode Copilot) 的工具集
6
6
  *
7
- * V3.1 整合:39 → 22 工具(18 agent + 4 admin)
7
+ * V3.3 整合:39 → 16 工具(14 agent + 2 admin)
8
8
  * 通过 ASD_MCP_TIER 环境变量控制可见工具集(agent/admin)
9
9
  *
10
10
  * 冷启动双路径:
11
- * - 外部 Agent 路径: bootstrap (Mission Briefing) → dimension_complete × N → wiki_planwiki_finalize
11
+ * - 外部 Agent 路径: bootstrap (Mission Briefing) → dimension_complete × N → wiki(plan)wiki(finalize)
12
12
  * - 内部 Agent 路径: bootstrap.js bootstrapKnowledge() → orchestrator.js AI pipeline (Phase 5)
13
13
  *
14
14
  * Gateway 权限 gating: 写操作经过 Gateway 权限/宪法/审计检查(支持动态 resolver)
@@ -26,6 +26,7 @@ import Logger from '#infra/logging/Logger.js';
26
26
  import { applyPendingAutoApprove, markAutoApproveNeeded } from './autoApproveInjector.js';
27
27
  import { envelope } from './envelope.js';
28
28
  import { wrapHandler } from './errorHandler.js';
29
+ import { createIdleIntent } from './handlers/types.js';
29
30
  import { TIER_ORDER, TOOL_GATEWAY_MAP, TOOLS } from './tools.js';
30
31
  // ─── Handler 模块 ─────────────────────────────────────────────
31
32
  import * as candidateHandlers from './handlers/candidate.js';
@@ -35,15 +36,15 @@ import * as systemHandlers from './handlers/system.js';
35
36
  // ─── External Agent Bootstrap 新 handler ──────────────────────
36
37
  import { bootstrapExternal } from './handlers/bootstrap-external.js';
37
38
  import { dimensionComplete } from './handlers/dimension-complete-external.js';
39
+ import { panoramaHandler } from './handlers/panorama.js';
38
40
  import { taskHandler } from './handlers/task.js';
39
- import { wikiFinalize, wikiPlan } from './handlers/wiki-external.js';
41
+ import { wikiRouter } from './handlers/wiki-external.js';
40
42
  // ─── McpServer 类 ─────────────────────────────────────────────
41
43
  export class McpServer {
42
44
  container;
43
45
  logger;
44
46
  _autoApproveMarked;
45
47
  _capabilityProbe;
46
- _decisionCache;
47
48
  _lastTaskOperation;
48
49
  _session;
49
50
  _startedAt;
@@ -58,21 +59,14 @@ export class McpServer {
58
59
  this._autoApproveMarked = false;
59
60
  this._capabilityProbe = null;
60
61
  this._lastTaskOperation = '';
61
- // ── P0: Decision 注入缓存 ──
62
- this._decisionCache = {
63
- decisions: [], // [{ id, title }]
64
- fetchedAt: 0, // timestamp ms
65
- ttl: 60_000, // 60s TTL
66
- _pending: null, // 防并发重复查询的 pending promise
67
- };
68
- // ── P3: Session 管理 ──
62
+ // ── Session 管理 (with intent lifecycle) ──
69
63
  this._session = {
70
64
  id: `ses-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`,
71
65
  startedAt: Date.now(),
72
- readyCalled: false,
73
66
  toolCallCount: 0,
74
67
  toolsUsed: new Set(),
75
68
  lastActivityAt: Date.now(),
69
+ intent: createIdleIntent(),
76
70
  };
77
71
  }
78
72
  /** 共享上下文对象,传给所有 handler */
@@ -174,8 +168,10 @@ export class McpServer {
174
168
  this._lastTaskOperation = args.operation || '';
175
169
  }
176
170
  const result = await wrapped(ctx, args);
177
- // ── P0+P3: Decision 注入 + Session 追踪 ──
178
- await this._injectDecisions(name, result);
171
+ // ── Session 追踪 + 行为采集 ──
172
+ this._trackSession(name, result);
173
+ // ── [DEFERRED] Decision 注入(待 JSONL 数据验证后启用) ──
174
+ // await this._injectDecisions(name, result);
179
175
  // ── 首次成功 tool call → 标记 autoApprove(one-shot) ──
180
176
  // 用户已手动授权了至少一个工具,标记后下次 MCP 启动注入 autoApprove
181
177
  if (!this._autoApproveMarked) {
@@ -190,135 +186,171 @@ export class McpServer {
190
186
  }
191
187
  return result;
192
188
  }
193
- // ─── P0: Decision 自动注入 ────────────────────────────
189
+ // ─── Session tracking + behavior collection ─────────────
194
190
  /**
195
- * 在工具返回结果中注入 decisions 摘要 + 更新 session 统计
196
- *
197
- * 策略:
198
- * - prime: 刷新缓存,不额外注入(response 本身含 decisions)
199
- * - decision 写操作 (record/revise/unpin): invalidate 缓存(下次查询拉最新)
200
- * - 其他工具: 注入 _activeDecisions 摘要
201
- * - 首次未调 prime 的工具: 注入更强提醒
191
+ * Post-tool-call hook: update session stats + intent behavior tracking.
192
+ * Always called (non-blocking, synchronous).
202
193
  *
203
- * @param result handler 返回的 envelope 对象
194
+ * - Session stats: toolCallCount, toolsUsed, lastActivityAt
195
+ * - Intent tracking (when active): toolCalls, searchQueries, mentionedFiles, drift detection
204
196
  */
205
- async _injectDecisions(toolName, result) {
206
- // ── P3: Session 统计 ──
197
+ _trackSession(toolName, result) {
198
+ // ── Session stats (always) ──
207
199
  this._session.toolCallCount++;
208
200
  this._session.toolsUsed.add(toolName);
209
201
  this._session.lastActivityAt = Date.now();
210
- // 1) autosnippet_task: prime 刷新缓存,decision 写操作 invalidate 缓存
202
+ // Task handler manages IntentState internally skip behavior tracking
211
203
  if (toolName === 'autosnippet_task') {
212
- const op = this._lastTaskOperation;
213
- if (op === 'prime') {
214
- this._session.readyCalled = true;
215
- this._refreshCacheFromReady(result);
216
- }
217
- else if (['record_decision', 'revise_decision', 'unpin_decision'].includes(op)) {
218
- this._decisionCache.fetchedAt = 0;
219
- this._decisionCache._pending = null;
220
- }
221
- return result;
204
+ return;
222
205
  }
223
- // 4) 对非 task 操作工具:注入 decisions 摘要
224
- const decisions = await this._getDecisionsSummary();
225
- if (decisions.length > 0 && typeof result === 'object' && result !== null) {
226
- const resultObj = result;
227
- resultObj._activeDecisions = decisions;
228
- // P3: 如果 ready 从未被调用,注入更强提醒
229
- if (!this._session.readyCalled) {
230
- resultObj._decisionReminder =
231
- '⚠️ You have NOT called autosnippet_task({ operation: "prime" }) yet this session. ' +
232
- 'These decisions may affect your work. Call autosnippet_task({ operation: "prime" }) for full context.';
206
+ // ── Intent behavior tracking (active intent only) ──
207
+ const intent = this._session.intent;
208
+ if (intent.phase !== 'active') {
209
+ return;
210
+ }
211
+ // Track tool call
212
+ intent.toolCalls.push({
213
+ tool: toolName,
214
+ timestamp: Date.now(),
215
+ args_summary: toolName,
216
+ });
217
+ // Auto-collect search queries
218
+ if (toolName === 'autosnippet_search') {
219
+ const query = this._extractSearchQuery(result);
220
+ if (query) {
221
+ intent.searchQueries.push(query);
233
222
  }
234
- else {
235
- resultObj._decisionReminder =
236
- 'Respect these team decisions. Call autosnippet_task({ operation: "list_decisions" }) for full details.';
223
+ }
224
+ // Auto-collect mentioned files
225
+ const files = this._extractMentionedFiles(toolName, result);
226
+ for (const f of files) {
227
+ if (!intent.mentionedFiles.includes(f)) {
228
+ intent.mentionedFiles.push(f);
229
+ const mod = this._inferModule(f);
230
+ if (mod) {
231
+ intent.mentionedModules.add(mod);
232
+ }
237
233
  }
238
234
  }
239
- return result;
235
+ // Drift detection
236
+ this._detectDrift(toolName, intent);
240
237
  }
238
+ // ─── [DEFERRED] Decision injection ───────────────────────
241
239
  /**
242
- * 获取 decisions 摘要(带缓存 + 防并发)
243
- * @returns >>}
240
+ * Inject active decisions + intent context into tool results.
241
+ * Currently deferred — enable by uncommenting the call in _handleToolCall.
244
242
  */
245
- async _getDecisionsSummary() {
246
- const cache = this._decisionCache;
247
- const now = Date.now();
248
- // 缓存有效(包括缓存了"空 decisions"的情况),直接返回
249
- if (cache.fetchedAt > 0 && now - cache.fetchedAt < cache.ttl) {
250
- return cache.decisions;
243
+ async _injectDecisions(toolName, result) {
244
+ if (toolName === 'autosnippet_task') {
245
+ return result;
251
246
  }
252
- // 防并发:如果有正在进行的查询,等它完成
253
- if (cache._pending) {
254
- try {
255
- return await cache._pending;
247
+ const intent = this._session.intent;
248
+ if (intent.phase !== 'active') {
249
+ return result;
250
+ }
251
+ if (intent.decisions.length > 0 && typeof result === 'object' && result !== null) {
252
+ const resultObj = result;
253
+ resultObj._activeDecisions = intent.decisions.map((d) => ({
254
+ id: d.id,
255
+ title: d.title,
256
+ }));
257
+ resultObj._intentContext =
258
+ `Active intent: "${intent.primeQuery || '(no query)'}"` +
259
+ (intent.taskId ? ` | Task: ${intent.taskId}` : '') +
260
+ ` | ${intent.toolCalls.length} tool calls | ${intent.decisions.length} decision(s)`;
261
+ }
262
+ return result;
263
+ }
264
+ // ─── Drift detection helpers ───────────────────
265
+ _detectDrift(toolName, intent) {
266
+ for (const mod of intent.mentionedModules) {
267
+ if (intent.primeModule && mod !== intent.primeModule) {
268
+ const alreadyDrifted = intent.driftEvents.some((d) => d.type === 'new_module' && d.detail.includes(mod));
269
+ if (!alreadyDrifted) {
270
+ intent.driftEvents.push({
271
+ timestamp: Date.now(),
272
+ trigger: toolName,
273
+ type: 'new_module',
274
+ detail: `New module: ${mod} (prime: ${intent.primeModule})`,
275
+ primeOverlap: this._computeOverlap(mod, intent.primeQuery),
276
+ });
277
+ }
256
278
  }
257
- catch {
258
- return cache.decisions; // 降级返回旧缓存
279
+ }
280
+ if (toolName === 'autosnippet_search' && intent.searchQueries.length > 0) {
281
+ const latestQuery = intent.searchQueries[intent.searchQueries.length - 1];
282
+ const overlap = this._computeKeywordOverlap(latestQuery, intent.primeQuery);
283
+ if (overlap < 0.3) {
284
+ intent.driftEvents.push({
285
+ timestamp: Date.now(),
286
+ trigger: toolName,
287
+ type: 'search_shift',
288
+ detail: `Search drift: "${latestQuery.slice(0, 40)}" (overlap: ${Math.round(overlap * 100)}%)`,
289
+ primeOverlap: overlap,
290
+ });
259
291
  }
260
292
  }
261
- // 发起新查询
262
- cache._pending = this._fetchDecisionsSummary();
263
- try {
264
- const result = await cache._pending;
265
- return result;
293
+ }
294
+ _computeKeywordOverlap(a, b) {
295
+ if (!a || !b) {
296
+ return 0;
266
297
  }
267
- finally {
268
- cache._pending = null;
298
+ const tokensA = new Set(a
299
+ .toLowerCase()
300
+ .split(/[\s,./\\|]+/)
301
+ .filter((t) => t.length > 1));
302
+ const tokensB = new Set(b
303
+ .toLowerCase()
304
+ .split(/[\s,./\\|]+/)
305
+ .filter((t) => t.length > 1));
306
+ if (tokensA.size === 0 || tokensB.size === 0) {
307
+ return 0;
269
308
  }
270
- }
271
- /**
272
- * DB 查询 decisions 摘要(仅 id + title)
273
- */
274
- async _fetchDecisionsSummary() {
275
- const cache = this._decisionCache;
276
- try {
277
- const taskService = this.container?.get('taskGraphService');
278
- if (!taskService) {
279
- return cache.decisions;
309
+ let shared = 0;
310
+ for (const t of tokensA) {
311
+ if (tokensB.has(t)) {
312
+ shared++;
280
313
  }
281
- // 使用 service 公共 API(不直接访问 repo)
282
- const pinned = await taskService.list({ status: 'pinned', taskType: 'decision' }, { limit: 50 });
283
- cache.decisions = pinned.map((d) => ({
284
- id: d.id,
285
- title: d.title,
286
- }));
287
- cache.fetchedAt = Date.now();
288
314
  }
289
- catch (err) {
290
- // 查询失败不阻塞,保留旧缓存
291
- const errMsg = err instanceof Error ? err.message : String(err);
292
- this.logger.debug('_fetchDecisionsSummary error', { error: errMsg });
315
+ return shared / Math.max(tokensA.size, tokensB.size);
316
+ }
317
+ _computeOverlap(term, query) {
318
+ if (!term || !query) {
319
+ return 0;
293
320
  }
294
- return cache.decisions;
321
+ return query.toLowerCase().includes(term.toLowerCase()) ? 1 : 0;
295
322
  }
296
- /**
297
- * ready 响应结果中刷新缓存(避免额外 DB 查询)
298
- */
299
- _refreshCacheFromReady(readyResult) {
300
- try {
301
- // readyResult 是 envelope({ data: { decisions: [...] } })
302
- const data = readyResult?.data;
303
- const decisions = (data?.decisions || []);
304
- this._decisionCache.decisions = decisions.map((d) => ({
305
- id: d.id,
306
- title: d.title,
307
- }));
308
- this._decisionCache.fetchedAt = Date.now();
323
+ _extractSearchQuery(result) {
324
+ if (typeof result === 'object' && result !== null) {
325
+ const obj = result;
326
+ if (typeof obj.query === 'string') {
327
+ return obj.query;
328
+ }
309
329
  }
310
- catch {
311
- /* ignore */
330
+ return null;
331
+ }
332
+ _extractMentionedFiles(_toolName, result) {
333
+ if (typeof result === 'object' && result !== null) {
334
+ const obj = result;
335
+ const files = obj.files || obj.mentionedFiles;
336
+ if (Array.isArray(files)) {
337
+ return files.filter((f) => typeof f === 'string');
338
+ }
312
339
  }
340
+ return [];
341
+ }
342
+ _inferModule(filePath) {
343
+ const parts = filePath.replace(/\\/g, '/').split('/');
344
+ const meaningful = parts.slice(1, -1).filter((p) => !['src', 'lib', 'Sources'].includes(p));
345
+ return meaningful.slice(0, 2).join('/') || null;
313
346
  }
314
347
  /**
315
348
  * 解析工具名到 handler 函数(V3 整合版)
316
349
  */
317
350
  _resolveHandler(name) {
318
351
  const HANDLER_MAP = {
319
- // ── Agent 层 (18) ──
352
+ // ── Agent 层 ──
320
353
  autosnippet_health: (ctx) => systemHandlers.health(ctx),
321
- autosnippet_capabilities: () => systemHandlers.capabilities(),
322
354
  autosnippet_search: (ctx, args) => consolidated.consolidatedSearch(ctx, args),
323
355
  autosnippet_knowledge: (ctx, args) => consolidated.consolidatedKnowledge(ctx, args),
324
356
  autosnippet_structure: (ctx, args) => consolidated.consolidatedStructure(ctx, args),
@@ -326,20 +358,16 @@ export class McpServer {
326
358
  autosnippet_graph: (ctx, args) => consolidated.consolidatedGraph(ctx, args),
327
359
  autosnippet_guard: (ctx, args) => consolidated.consolidatedGuard(ctx, args),
328
360
  autosnippet_submit_knowledge: (ctx, args) => consolidated.enhancedSubmitKnowledge(ctx, args),
329
- autosnippet_submit_knowledge_batch: (ctx, args) => knowledgeHandlers.submitKnowledgeBatch(ctx, args),
330
- autosnippet_save_document: (ctx, args) => knowledgeHandlers.saveDocument(ctx, args),
331
361
  autosnippet_skill: (ctx, args) => consolidated.consolidatedSkill(ctx, args),
332
362
  autosnippet_task: (ctx, args) => taskHandler(ctx, args),
363
+ autosnippet_panorama: (ctx, args) => panoramaHandler(ctx, args),
333
364
  // ── External Agent Bootstrap (v3.1) ──
334
365
  autosnippet_bootstrap: (ctx, _args) => bootstrapExternal(ctx),
335
366
  autosnippet_dimension_complete: (ctx, args) => dimensionComplete(ctx, args),
336
- autosnippet_wiki_plan: (ctx, args) => wikiPlan(ctx, args),
337
- autosnippet_wiki_finalize: (ctx, args) => wikiFinalize(ctx, args),
367
+ autosnippet_wiki: (ctx, args) => wikiRouter(ctx, args),
338
368
  // ── Admin 层 (+4) ──
339
369
  autosnippet_enrich_candidates: (ctx, args) => candidateHandlers.enrichCandidates(ctx, args),
340
370
  autosnippet_knowledge_lifecycle: (ctx, args) => knowledgeHandlers.knowledgeLifecycle(ctx, args),
341
- autosnippet_validate_candidate: (ctx, args) => candidateHandlers.validateCandidate(ctx, args),
342
- autosnippet_check_duplicate: (ctx, args) => candidateHandlers.checkDuplicate(ctx, args),
343
371
  };
344
372
  return HANDLER_MAP[name] ?? null;
345
373
  }
@@ -31,8 +31,6 @@ const AUTO_APPROVE_TOOLS = [
31
31
  'autosnippet_graph',
32
32
  'autosnippet_guard',
33
33
  'autosnippet_submit_knowledge',
34
- 'autosnippet_submit_knowledge_batch',
35
- 'autosnippet_save_document',
36
34
  'autosnippet_skill',
37
35
  'autosnippet_task',
38
36
  'autosnippet_bootstrap',
@@ -252,6 +252,29 @@ interface MissionBriefing {
252
252
  totalDimensions: number;
253
253
  workflow: string;
254
254
  };
255
+ panorama: {
256
+ layers: Array<{
257
+ level: number;
258
+ name: string;
259
+ modules: string[];
260
+ }>;
261
+ couplingHotspots: Array<{
262
+ module: string;
263
+ fanIn: number;
264
+ fanOut: number;
265
+ }>;
266
+ cyclicDependencies: Array<{
267
+ cycle: string[];
268
+ severity: string;
269
+ }>;
270
+ knowledgeGaps: Array<{
271
+ dimension: string;
272
+ dimensionName: string;
273
+ recipeCount: number;
274
+ status: string;
275
+ priority: string;
276
+ }>;
277
+ } | null;
255
278
  session: Record<string, unknown>;
256
279
  meta?: {
257
280
  responseSizeKB: number;
@@ -276,6 +299,7 @@ interface MissionBriefingParams {
276
299
  languageExtension?: unknown;
277
300
  incrementalPlan?: IncrementalPlan | null;
278
301
  languageStats?: Record<string, number> | null;
302
+ panoramaResult?: Record<string, unknown> | null;
279
303
  }
280
304
  /**
281
305
  * 构建 Mission Briefing
@@ -293,5 +317,6 @@ interface MissionBriefingParams {
293
317
  */
294
318
  export declare function buildMissionBriefing({ projectMeta, astData, codeEntityResult, callGraphResult, depGraphData, guardAudit, targets, activeDimensions, session, languageExtension, // §7.1: 语言扩展(反模式、Guard 规则、Agent 注意事项)
295
319
  incrementalPlan, // §7.3: 增量 Bootstrap 评估结果
296
- languageStats, }: MissionBriefingParams): MissionBriefing;
320
+ languageStats, // §7.4: 完整语言分布统计
321
+ panoramaResult, }: MissionBriefingParams): MissionBriefing;
297
322
  export {};