autosnippet 3.3.5 → 3.3.7

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 (279) hide show
  1. package/dashboard/dist/assets/icons-FHns2ypa.js +1 -0
  2. package/dashboard/dist/assets/index-BRJv5Y3r.js +135 -0
  3. package/dashboard/dist/assets/index-DzoB7kxK.css +1 -0
  4. package/dashboard/dist/index.html +3 -3
  5. package/dist/bin/api-server.js +1 -0
  6. package/dist/bin/cli.d.ts +1 -0
  7. package/dist/bin/cli.js +137 -9
  8. package/dist/lib/agent/AgentFactory.d.ts +0 -17
  9. package/dist/lib/agent/AgentFactory.js +1 -25
  10. package/dist/lib/agent/AgentRuntime.d.ts +2 -2
  11. package/dist/lib/agent/AgentRuntime.js +26 -18
  12. package/dist/lib/agent/capabilities.d.ts +11 -0
  13. package/dist/lib/agent/capabilities.js +29 -5
  14. package/dist/lib/agent/context/ExplorationTracker.js +10 -1
  15. package/dist/lib/agent/context/exploration/ExplorationStrategies.d.ts +2 -0
  16. package/dist/lib/agent/context/exploration/ExplorationStrategies.js +2 -2
  17. package/dist/lib/agent/domain/ChatAgentTasks.js +4 -0
  18. package/dist/lib/agent/domain/insight-analyst.d.ts +47 -3
  19. package/dist/lib/agent/domain/insight-analyst.js +111 -11
  20. package/dist/lib/agent/domain/insight-evolver.d.ts +69 -0
  21. package/dist/lib/agent/domain/insight-evolver.js +230 -0
  22. package/dist/lib/agent/domain/insight-gate.d.ts +42 -0
  23. package/dist/lib/agent/domain/insight-gate.js +41 -0
  24. package/dist/lib/agent/domain/insight-producer.d.ts +27 -2
  25. package/dist/lib/agent/domain/insight-producer.js +60 -5
  26. package/dist/lib/agent/domain/scan-prompts.js +10 -7
  27. package/dist/lib/agent/forced-summary.js +7 -2
  28. package/dist/lib/agent/memory/ActiveContext.d.ts +2 -28
  29. package/dist/lib/agent/memory/MemoryCoordinator.d.ts +2 -2
  30. package/dist/lib/agent/memory/SessionStore.d.ts +6 -12
  31. package/dist/lib/agent/memory/SessionStore.js +9 -15
  32. package/dist/lib/agent/memory/memory-flush-contract.d.ts +49 -0
  33. package/dist/lib/agent/memory/memory-flush-contract.js +16 -0
  34. package/dist/lib/agent/memory/session-store-schema.d.ts +20 -0
  35. package/dist/lib/agent/memory/session-store-schema.js +41 -0
  36. package/dist/lib/agent/presets.d.ts +89 -1
  37. package/dist/lib/agent/presets.js +53 -5
  38. package/dist/lib/agent/tools/_shared.d.ts +7 -15
  39. package/dist/lib/agent/tools/_shared.js +20 -21
  40. package/dist/lib/agent/tools/composite.d.ts +25 -22
  41. package/dist/lib/agent/tools/composite.js +108 -109
  42. package/dist/lib/agent/tools/evolution-tools.d.ts +145 -0
  43. package/dist/lib/agent/tools/evolution-tools.js +161 -0
  44. package/dist/lib/agent/tools/index.d.ts +163 -92
  45. package/dist/lib/agent/tools/index.js +9 -1
  46. package/dist/lib/agent/tools/lifecycle.d.ts +7 -1
  47. package/dist/lib/agent/tools/lifecycle.js +59 -75
  48. package/dist/lib/cli/AiScanService.js +5 -5
  49. package/dist/lib/cli/KnowledgeSyncService.js +1 -1
  50. package/dist/lib/core/AstAnalyzer.d.ts +1 -0
  51. package/dist/lib/core/discovery/ConfigWatcher.d.ts +64 -0
  52. package/dist/lib/core/discovery/ConfigWatcher.js +336 -0
  53. package/dist/lib/core/discovery/CustomConfigDiscoverer.d.ts +30 -0
  54. package/dist/lib/core/discovery/CustomConfigDiscoverer.js +1305 -0
  55. package/dist/lib/core/discovery/DiscovererPreference.d.ts +44 -0
  56. package/dist/lib/core/discovery/DiscovererPreference.js +141 -0
  57. package/dist/lib/core/discovery/DiscovererRegistry.d.ts +10 -1
  58. package/dist/lib/core/discovery/DiscovererRegistry.js +42 -2
  59. package/dist/lib/core/discovery/ProjectDiscoverer.d.ts +19 -0
  60. package/dist/lib/core/discovery/index.d.ts +2 -0
  61. package/dist/lib/core/discovery/index.js +4 -0
  62. package/dist/lib/core/discovery/parsers/CMakeParser.d.ts +32 -0
  63. package/dist/lib/core/discovery/parsers/CMakeParser.js +148 -0
  64. package/dist/lib/core/discovery/parsers/GradleDslParser.d.ts +43 -0
  65. package/dist/lib/core/discovery/parsers/GradleDslParser.js +171 -0
  66. package/dist/lib/core/discovery/parsers/JsonConfigParser.d.ts +45 -0
  67. package/dist/lib/core/discovery/parsers/JsonConfigParser.js +122 -0
  68. package/dist/lib/core/discovery/parsers/RubyDslParser.d.ts +49 -0
  69. package/dist/lib/core/discovery/parsers/RubyDslParser.js +282 -0
  70. package/dist/lib/core/discovery/parsers/StarlarkParser.d.ts +33 -0
  71. package/dist/lib/core/discovery/parsers/StarlarkParser.js +229 -0
  72. package/dist/lib/core/discovery/parsers/YamlConfigParser.d.ts +37 -0
  73. package/dist/lib/core/discovery/parsers/YamlConfigParser.js +212 -0
  74. package/dist/lib/{service/bootstrap/DimensionCopyRegistry.d.ts → domain/dimension/DimensionCopy.d.ts} +2 -2
  75. package/dist/lib/{service/bootstrap/DimensionCopyRegistry.js → domain/dimension/DimensionCopy.js} +22 -72
  76. package/dist/lib/domain/dimension/DimensionRegistry.d.ts +54 -0
  77. package/dist/lib/domain/dimension/DimensionRegistry.js +620 -0
  78. package/dist/lib/domain/dimension/DimensionSop.d.ts +55 -0
  79. package/dist/lib/domain/dimension/DimensionSop.js +1604 -0
  80. package/dist/lib/domain/dimension/UnifiedDimension.d.ts +61 -0
  81. package/dist/lib/domain/dimension/UnifiedDimension.js +53 -0
  82. package/dist/lib/domain/dimension/index.d.ts +10 -0
  83. package/dist/lib/domain/dimension/index.js +9 -0
  84. package/dist/lib/domain/knowledge/FieldSpec.d.ts +1 -1
  85. package/dist/lib/domain/knowledge/FieldSpec.js +29 -16
  86. package/dist/lib/domain/knowledge/KnowledgeEntry.d.ts +40 -112
  87. package/dist/lib/domain/knowledge/KnowledgeEntry.js +44 -9
  88. package/dist/lib/domain/knowledge/KnowledgeRepository.d.ts +1 -0
  89. package/dist/lib/domain/knowledge/KnowledgeRepository.js +3 -0
  90. package/dist/lib/domain/knowledge/Lifecycle.js +1 -1
  91. package/dist/lib/domain/knowledge/StyleGuide.d.ts +1 -1
  92. package/dist/lib/domain/knowledge/StyleGuide.js +1 -1
  93. package/dist/lib/domain/knowledge/UnifiedValidator.js +15 -0
  94. package/dist/lib/external/ai/AiProvider.d.ts +12 -0
  95. package/dist/lib/external/ai/AiProvider.js +24 -0
  96. package/dist/lib/external/ai/AiProviderManager.d.ts +101 -0
  97. package/dist/lib/external/ai/AiProviderManager.js +193 -0
  98. package/dist/lib/external/ai/providers/ClaudeProvider.js +11 -0
  99. package/dist/lib/external/ai/providers/GoogleGeminiProvider.js +18 -0
  100. package/dist/lib/external/ai/providers/MockProvider.d.ts +21 -3
  101. package/dist/lib/external/ai/providers/MockProvider.js +290 -14
  102. package/dist/lib/external/ai/providers/OpenAiProvider.js +16 -0
  103. package/dist/lib/external/lark/LarkTransport.d.ts +5 -1
  104. package/dist/lib/external/lark/LarkTransport.js +10 -2
  105. package/dist/lib/external/mcp/McpServer.js +4 -0
  106. package/dist/lib/external/mcp/handlers/TargetClassifier.d.ts +1 -1
  107. package/dist/lib/external/mcp/handlers/bootstrap/BootstrapSession.d.ts +8 -16
  108. package/dist/lib/external/mcp/handlers/bootstrap/BootstrapSession.js +10 -10
  109. package/dist/lib/external/mcp/handlers/bootstrap/ExternalSubmissionTracker.d.ts +7 -0
  110. package/dist/lib/external/mcp/handlers/bootstrap/ExternalSubmissionTracker.js +20 -0
  111. package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.d.ts +52 -132
  112. package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.js +204 -17
  113. package/dist/lib/external/mcp/handlers/bootstrap/base-dimensions.d.ts +11 -75
  114. package/dist/lib/external/mcp/handlers/bootstrap/base-dimensions.js +40 -191
  115. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-configs.d.ts +13 -78
  116. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-configs.js +30 -52
  117. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-context.d.ts +0 -1
  118. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/mock-pipeline.d.ts +20 -0
  119. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/mock-pipeline.js +432 -0
  120. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.d.ts +99 -12
  121. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +188 -169
  122. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/tier-scheduler.js +7 -17
  123. package/dist/lib/external/mcp/handlers/bootstrap/refine.js +8 -0
  124. package/dist/lib/external/mcp/handlers/bootstrap/shared/async-fill-helpers.d.ts +46 -0
  125. package/dist/lib/external/mcp/handlers/bootstrap/shared/async-fill-helpers.js +58 -0
  126. package/dist/lib/external/mcp/handlers/bootstrap/shared/audit-helpers.d.ts +25 -0
  127. package/dist/lib/external/mcp/handlers/bootstrap/shared/audit-helpers.js +47 -0
  128. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.d.ts +50 -12
  129. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.js +30 -10
  130. package/dist/lib/external/mcp/handlers/bootstrap/shared/dimension-text.js +1 -1
  131. package/dist/lib/external/mcp/handlers/bootstrap/shared/handler-types.d.ts +24 -0
  132. package/dist/lib/external/mcp/handlers/bootstrap/shared/handler-types.js +14 -0
  133. package/dist/lib/external/mcp/handlers/bootstrap/shared/panorama-utils.d.ts +14 -0
  134. package/dist/lib/external/mcp/handlers/bootstrap/shared/panorama-utils.js +48 -0
  135. package/dist/lib/external/mcp/handlers/bootstrap/shared/session-helpers.d.ts +21 -0
  136. package/dist/lib/external/mcp/handlers/bootstrap/shared/session-helpers.js +45 -0
  137. package/dist/lib/external/mcp/handlers/bootstrap/shared/skill-generator.d.ts +1 -1
  138. package/dist/lib/external/mcp/handlers/bootstrap/shared/target-file-map.d.ts +27 -0
  139. package/dist/lib/external/mcp/handlers/bootstrap/shared/target-file-map.js +44 -0
  140. package/dist/lib/external/mcp/handlers/bootstrap-external.d.ts +23 -10
  141. package/dist/lib/external/mcp/handlers/bootstrap-external.js +41 -51
  142. package/dist/lib/external/mcp/handlers/bootstrap-internal.d.ts +2 -0
  143. package/dist/lib/external/mcp/handlers/bootstrap-internal.js +117 -82
  144. package/dist/lib/external/mcp/handlers/consolidated.d.ts +4 -4
  145. package/dist/lib/external/mcp/handlers/consolidated.js +108 -332
  146. package/dist/lib/external/mcp/handlers/dimension-complete-external.js +71 -2
  147. package/dist/lib/external/mcp/handlers/evolve-external.d.ts +54 -0
  148. package/dist/lib/external/mcp/handlers/evolve-external.js +229 -0
  149. package/dist/lib/external/mcp/handlers/knowledge.js +30 -5
  150. package/dist/lib/external/mcp/handlers/rescan-external.d.ts +76 -0
  151. package/dist/lib/external/mcp/handlers/rescan-external.js +335 -0
  152. package/dist/lib/external/mcp/handlers/rescan-internal.d.ts +120 -0
  153. package/dist/lib/external/mcp/handlers/rescan-internal.js +359 -0
  154. package/dist/lib/external/mcp/handlers/search.d.ts +6 -5
  155. package/dist/lib/external/mcp/handlers/search.js +6 -5
  156. package/dist/lib/external/mcp/handlers/types.d.ts +2 -1
  157. package/dist/lib/external/mcp/handlers/wiki-external.js +2 -2
  158. package/dist/lib/external/mcp/tools.d.ts +8 -18
  159. package/dist/lib/external/mcp/tools.js +58 -2
  160. package/dist/lib/http/routes/ai.js +111 -30
  161. package/dist/lib/http/routes/candidates.js +11 -4
  162. package/dist/lib/http/routes/commands.js +10 -1
  163. package/dist/lib/http/routes/health.js +11 -0
  164. package/dist/lib/http/routes/knowledge.js +122 -1
  165. package/dist/lib/http/routes/modules.js +52 -3
  166. package/dist/lib/http/routes/panorama.js +16 -4
  167. package/dist/lib/http/routes/recipes.js +7 -0
  168. package/dist/lib/http/utils/routeHelpers.js +2 -1
  169. package/dist/lib/infrastructure/cache/CacheCoordinator.d.ts +41 -0
  170. package/dist/lib/infrastructure/cache/CacheCoordinator.js +105 -0
  171. package/dist/lib/infrastructure/database/migrations/006_lifecycle_transition_events.d.ts +7 -0
  172. package/dist/lib/infrastructure/database/migrations/006_lifecycle_transition_events.js +28 -0
  173. package/dist/lib/infrastructure/vector/HnswVectorAdapter.js +1 -1
  174. package/dist/lib/injection/ServiceContainer.d.ts +6 -5
  175. package/dist/lib/injection/ServiceContainer.js +64 -25
  176. package/dist/lib/injection/ServiceMap.d.ts +10 -1
  177. package/dist/lib/injection/modules/AiModule.d.ts +6 -9
  178. package/dist/lib/injection/modules/AiModule.js +82 -39
  179. package/dist/lib/injection/modules/KnowledgeModule.js +15 -1
  180. package/dist/lib/injection/modules/PanoramaModule.js +1 -1
  181. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.d.ts +4 -0
  182. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.js +16 -1
  183. package/dist/lib/service/bootstrap/BootstrapEventEmitter.d.ts +3 -2
  184. package/dist/lib/service/bootstrap/BootstrapEventEmitter.js +1 -1
  185. package/dist/lib/service/bootstrap/DeliveryVerifier.d.ts +51 -0
  186. package/dist/lib/service/bootstrap/DeliveryVerifier.js +163 -0
  187. package/dist/lib/service/bootstrap/UiStartupTasks.d.ts +5 -0
  188. package/dist/lib/service/bootstrap/UiStartupTasks.js +20 -0
  189. package/dist/lib/service/bootstrap/bootstrap-event-types.d.ts +54 -0
  190. package/dist/lib/service/bootstrap/bootstrap-event-types.js +10 -0
  191. package/dist/lib/service/cleanup/CleanupService.d.ts +132 -0
  192. package/dist/lib/service/cleanup/CleanupService.js +571 -0
  193. package/dist/lib/service/delivery/AgentInstructionsGenerator.js +39 -43
  194. package/dist/lib/service/delivery/FileProtection.d.ts +20 -0
  195. package/dist/lib/service/delivery/FileProtection.js +54 -0
  196. package/dist/lib/service/delivery/SkillsSyncer.js +16 -21
  197. package/dist/lib/service/evolution/ContentPatcher.d.ts +44 -0
  198. package/dist/lib/service/evolution/ContentPatcher.js +310 -0
  199. package/dist/lib/service/evolution/ProposalExecutor.d.ts +4 -0
  200. package/dist/lib/service/evolution/ProposalExecutor.js +77 -13
  201. package/dist/lib/service/evolution/RecipeLifecycleSupervisor.d.ts +64 -0
  202. package/dist/lib/service/evolution/RecipeLifecycleSupervisor.js +458 -0
  203. package/dist/lib/service/evolution/RecipeRelevanceAuditor.d.ts +89 -0
  204. package/dist/lib/service/evolution/RecipeRelevanceAuditor.js +492 -0
  205. package/dist/lib/service/evolution/createSupersedeProposal.d.ts +44 -0
  206. package/dist/lib/service/evolution/createSupersedeProposal.js +81 -0
  207. package/dist/lib/service/guard/ComplianceReporter.d.ts +4 -0
  208. package/dist/lib/service/guard/ComplianceReporter.js +51 -0
  209. package/dist/lib/service/guard/GuardCheckEngine.js +5 -4
  210. package/dist/lib/service/knowledge/CodeEntityGraph.d.ts +6 -0
  211. package/dist/lib/service/knowledge/CodeEntityGraph.js +16 -0
  212. package/dist/lib/service/knowledge/ConfidenceRouter.js +1 -1
  213. package/dist/lib/service/knowledge/KnowledgeService.d.ts +11 -1
  214. package/dist/lib/service/knowledge/KnowledgeService.js +67 -14
  215. package/dist/lib/service/knowledge/RecipeProductionGateway.d.ts +225 -0
  216. package/dist/lib/service/knowledge/RecipeProductionGateway.js +384 -0
  217. package/dist/lib/service/module/ModuleService.js +10 -19
  218. package/dist/lib/service/panorama/CouplingAnalyzer.d.ts +10 -1
  219. package/dist/lib/service/panorama/CouplingAnalyzer.js +44 -2
  220. package/dist/lib/service/panorama/DimensionAnalyzer.d.ts +4 -3
  221. package/dist/lib/service/panorama/DimensionAnalyzer.js +40 -151
  222. package/dist/lib/service/panorama/LayerInferrer.d.ts +16 -1
  223. package/dist/lib/service/panorama/LayerInferrer.js +118 -1
  224. package/dist/lib/service/panorama/ModuleDiscoverer.d.ts +9 -0
  225. package/dist/lib/service/panorama/ModuleDiscoverer.js +58 -2
  226. package/dist/lib/service/panorama/PanoramaAggregator.d.ts +6 -2
  227. package/dist/lib/service/panorama/PanoramaAggregator.js +84 -6
  228. package/dist/lib/service/panorama/PanoramaScanner.js +28 -0
  229. package/dist/lib/service/panorama/PanoramaService.js +10 -5
  230. package/dist/lib/service/panorama/PanoramaTypes.d.ts +38 -0
  231. package/dist/lib/service/panorama/RoleRefiner.d.ts +2 -0
  232. package/dist/lib/service/panorama/RoleRefiner.js +41 -0
  233. package/dist/lib/service/panorama/TechStackProfiler.d.ts +13 -0
  234. package/dist/lib/service/panorama/TechStackProfiler.js +191 -0
  235. package/dist/lib/service/search/BM25Scorer.d.ts +2 -2
  236. package/dist/lib/service/search/SearchEngine.d.ts +11 -10
  237. package/dist/lib/service/search/SearchEngine.js +38 -36
  238. package/dist/lib/service/search/SearchTypes.d.ts +14 -8
  239. package/dist/lib/service/search/SearchTypes.js +1 -1
  240. package/dist/lib/service/search/tokenizer.d.ts +1 -1
  241. package/dist/lib/service/search/tokenizer.js +2 -2
  242. package/dist/lib/service/skills/SignalCollector.d.ts +1 -0
  243. package/dist/lib/service/skills/SignalCollector.js +6 -5
  244. package/dist/lib/service/vector/ContextualEnricher.d.ts +1 -0
  245. package/dist/lib/service/vector/ContextualEnricher.js +4 -0
  246. package/dist/lib/shared/LanguageService.js +3 -0
  247. package/dist/lib/shared/developer-identity.d.ts +18 -0
  248. package/dist/lib/shared/developer-identity.js +62 -0
  249. package/dist/lib/shared/schemas/common.d.ts +4 -4
  250. package/dist/lib/shared/schemas/http-requests.d.ts +20 -18
  251. package/dist/lib/shared/schemas/http-requests.js +17 -6
  252. package/dist/lib/shared/schemas/mcp-tools.d.ts +32 -2
  253. package/dist/lib/shared/schemas/mcp-tools.js +38 -0
  254. package/dist/lib/types/evolution.d.ts +135 -0
  255. package/dist/lib/types/evolution.js +6 -0
  256. package/dist/lib/types/graph-shared.d.ts +25 -0
  257. package/dist/lib/types/graph-shared.js +7 -0
  258. package/dist/lib/types/knowledge-wire.d.ts +132 -0
  259. package/dist/lib/types/knowledge-wire.js +7 -0
  260. package/dist/lib/types/project-snapshot-builder.d.ts +19 -0
  261. package/dist/lib/types/project-snapshot-builder.js +189 -0
  262. package/dist/lib/types/project-snapshot.d.ts +399 -0
  263. package/dist/lib/types/project-snapshot.js +17 -0
  264. package/dist/lib/types/search-wire.d.ts +46 -0
  265. package/dist/lib/types/search-wire.js +7 -0
  266. package/dist/lib/types/snapshot-views.d.ts +58 -0
  267. package/dist/lib/types/snapshot-views.js +103 -0
  268. package/package.json +1 -1
  269. package/skills/autosnippet-recipes/SKILL.md +1 -1
  270. package/templates/instructions/agent-static.md +2 -0
  271. package/templates/instructions/conventions.md +3 -1
  272. package/templates/recipes-setup/README.md +2 -2
  273. package/dashboard/dist/assets/icons-BJ2mUBi8.js +0 -1
  274. package/dashboard/dist/assets/index-B659K9t5.js +0 -128
  275. package/dashboard/dist/assets/index-NCm40PMD.css +0 -1
  276. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/noAiFallback.d.ts +0 -169
  277. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/noAiFallback.js +0 -727
  278. package/dist/lib/external/mcp/handlers/bootstrap/shared/dimension-sop.d.ts +0 -370
  279. package/dist/lib/external/mcp/handlers/bootstrap/shared/dimension-sop.js +0 -821
@@ -8,6 +8,7 @@
8
8
  */
9
9
  var _a;
10
10
  import { DimensionAnalyzer } from './DimensionAnalyzer.js';
11
+ import { profileTechStack } from './TechStackProfiler.js';
11
12
  /* ═══ PanoramaAggregator Class ════════════════════════════ */
12
13
  export class PanoramaAggregator {
13
14
  #roleRefiner;
@@ -22,12 +23,15 @@ export class PanoramaAggregator {
22
23
  this.#layerInferrer = opts.layerInferrer;
23
24
  this.#db = opts.db;
24
25
  this.#projectRoot = opts.projectRoot;
25
- this.#dimensionAnalyzer = opts.dimensionAnalyzer ?? new DimensionAnalyzer(opts.db);
26
+ this.#dimensionAnalyzer =
27
+ opts.dimensionAnalyzer ?? new DimensionAnalyzer(opts.db, opts.projectRoot);
26
28
  }
27
29
  /**
28
30
  * 计算完整全景数据
31
+ * @param moduleCandidates 模块候选列表
32
+ * @param options.configLayers 来自配置文件的层级声明(如 Boxfile layer 定义)
29
33
  */
30
- compute(moduleCandidates) {
34
+ compute(moduleCandidates, options) {
31
35
  // 1. RoleRefiner: 精化角色
32
36
  const refinedRoles = this.#roleRefiner.refineAll(moduleCandidates);
33
37
  // 2. 构建模块-文件映射
@@ -35,11 +39,21 @@ export class PanoramaAggregator {
35
39
  for (const mc of moduleCandidates) {
36
40
  moduleFiles.set(mc.name, mc.files);
37
41
  }
38
- // 3. CouplingAnalyzer: 耦合分析
39
- const coupling = this.#couplingAnalyzer.analyze(moduleFiles);
40
- // 4. LayerInferrer: 层级推断
42
+ // 3. CouplingAnalyzer: 耦合分析(含外部依赖 fan-in)
43
+ const externalModules = this.#collectExternalModules();
44
+ const coupling = this.#couplingAnalyzer.analyze(moduleFiles, externalModules);
45
+ // 4. LayerInferrer: 层级推断(优先使用配置层级)
41
46
  const modules = moduleCandidates.map((m) => m.name);
42
- const layers = this.#layerInferrer.infer(coupling.edges, modules, coupling.cycles);
47
+ const configModuleLayerMap = new Map();
48
+ for (const mc of moduleCandidates) {
49
+ if (mc.configLayer) {
50
+ configModuleLayerMap.set(mc.name, mc.configLayer);
51
+ }
52
+ }
53
+ const layers = this.#layerInferrer.infer(coupling.edges, modules, coupling.cycles, {
54
+ configLayers: options?.configLayers,
55
+ moduleLayerMap: configModuleLayerMap.size > 0 ? configModuleLayerMap : undefined,
56
+ });
43
57
  // 5. 构建层级映射 (模块名 → 层级号)
44
58
  const moduleLayerMap = new Map();
45
59
  for (const level of layers.levels) {
@@ -85,6 +99,9 @@ export class PanoramaAggregator {
85
99
  const { radar, gaps } = this.#dimensionAnalyzer.analyze(moduleRoles);
86
100
  // 10. 调用流概要
87
101
  const callFlowSummary = this.#computeCallFlowSummary();
102
+ // 11. 外部依赖概况 + 技术栈画像
103
+ const externalDeps = this.#buildExternalDepProfiles(coupling.externalDeps);
104
+ const techStack = externalDeps.length > 0 ? profileTechStack(externalDeps) : null;
88
105
  return {
89
106
  modules: panoramaModules,
90
107
  layers,
@@ -93,6 +110,8 @@ export class PanoramaAggregator {
93
110
  healthRadar: radar,
94
111
  callFlowSummary,
95
112
  projectRecipeCount,
113
+ externalDeps,
114
+ techStack,
96
115
  computedAt: Date.now(),
97
116
  };
98
117
  }
@@ -108,6 +127,65 @@ export class PanoramaAggregator {
108
127
  return 0;
109
128
  }
110
129
  }
130
+ /* ─── External Dependencies ─────────────────────── */
131
+ /**
132
+ * 从 code_entities 收集标记为 external 的模块名
133
+ */
134
+ #collectExternalModules() {
135
+ try {
136
+ const rows = this.#db
137
+ .prepare(`SELECT entity_id FROM code_entities
138
+ WHERE entity_type = 'module' AND project_root = ?
139
+ AND json_extract(metadata_json, '$.nodeType') IN ('external', 'host')`)
140
+ .all(this.#projectRoot);
141
+ return new Set(rows.map((r) => r.entity_id));
142
+ }
143
+ catch {
144
+ return new Set();
145
+ }
146
+ }
147
+ /**
148
+ * 将 CouplingAnalyzer 的外部依赖统计转为 ExternalDepProfile
149
+ * 并从 code_entities 补充 layer/version 元数据
150
+ */
151
+ #buildExternalDepProfiles(rawExternalDeps) {
152
+ if (rawExternalDeps.length === 0) {
153
+ return [];
154
+ }
155
+ // 批量查询外部依赖的元数据
156
+ const metadataMap = new Map();
157
+ try {
158
+ for (const dep of rawExternalDeps) {
159
+ const row = this.#db
160
+ .prepare(`SELECT metadata_json FROM code_entities
161
+ WHERE entity_id = ? AND entity_type = 'module' AND project_root = ?
162
+ LIMIT 1`)
163
+ .get(dep.name, this.#projectRoot);
164
+ if (row?.metadata_json) {
165
+ const meta = typeof row.metadata_json === 'string'
166
+ ? JSON.parse(row.metadata_json)
167
+ : row.metadata_json;
168
+ metadataMap.set(dep.name, {
169
+ layer: meta.layer,
170
+ version: meta.version,
171
+ });
172
+ }
173
+ }
174
+ }
175
+ catch {
176
+ /* skip metadata enrichment errors */
177
+ }
178
+ return rawExternalDeps.map((dep) => {
179
+ const meta = metadataMap.get(dep.name);
180
+ return {
181
+ name: dep.name,
182
+ fanIn: dep.fanIn,
183
+ dependedBy: dep.dependedBy,
184
+ layer: meta?.layer,
185
+ version: meta?.version,
186
+ };
187
+ });
188
+ }
111
189
  /* ─── Layer Naming (role-based) ─────────────────── */
112
190
  /** 角色 → 层级名映射 */
113
191
  static #ROLE_TO_LAYER = {
@@ -103,6 +103,34 @@ export class PanoramaScanner {
103
103
  modules = phase2.depGraphData.nodes?.length ?? 0;
104
104
  }
105
105
  }
106
+ // Phase 2-extra: CustomConfig 增强
107
+ // 当主 discoverer 不是 customConfig 时,尝试 CustomConfigDiscoverer
108
+ // 以获取更丰富的模块视图(混编项目常见:jvm/node/dart 获胜但模块数偏少)
109
+ if (phase1.discoverer && phase1.discoverer.id !== 'customConfig') {
110
+ try {
111
+ const { CustomConfigDiscoverer } = await import('../../core/discovery/CustomConfigDiscoverer.js');
112
+ const ccDiscoverer = new CustomConfigDiscoverer();
113
+ const ccDetect = await ccDiscoverer.detect(this.#projectRoot);
114
+ if (ccDetect.match && ccDetect.confidence >= 0.7) {
115
+ await ccDiscoverer.load(this.#projectRoot);
116
+ const ccTargets = await ccDiscoverer.listTargets();
117
+ // 仅当 CustomConfig 发现更多模块时才采纳
118
+ if (ccTargets.length > modules) {
119
+ this.#logger.info(`[PanoramaScanner] CustomConfig enrichment: ${ccTargets.length} modules ` +
120
+ `(primary discoverer '${phase1.discoverer.id}' found ${modules})`);
121
+ const ccPhase2 = await runPhase2_DependencyGraph(ccDiscoverer, this.#container, this.#logger, 'custom-enrichment');
122
+ edges += ccPhase2.depEdgesWritten;
123
+ if (ccPhase2.depGraphData) {
124
+ await runPhase2_1_ModuleEntities(ccPhase2.depGraphData, this.#projectRoot, this.#container, this.#logger);
125
+ modules = Math.max(modules, ccPhase2.depGraphData.nodes?.length ?? 0);
126
+ }
127
+ }
128
+ }
129
+ }
130
+ catch {
131
+ // CustomConfig 增强失败不阻塞主流程
132
+ }
133
+ }
106
134
  // Phase 2.2: 目录推断兜底
107
135
  // 当 Phase 2.1 未产出 module 实体时(无 Package.swift / build.gradle 等),
108
136
  // 从已有 code_entities 按顶层目录分组写入 module 实体
@@ -187,11 +187,13 @@ export class PanoramaService {
187
187
  let prefix = paths[0];
188
188
  for (const p of paths) {
189
189
  while (!p.startsWith(prefix)) {
190
- const lastSlash = prefix.lastIndexOf('/');
190
+ // Strip trailing slash before searching for last separator
191
+ const trimmed = prefix.endsWith('/') ? prefix.slice(0, -1) : prefix;
192
+ const lastSlash = trimmed.lastIndexOf('/');
191
193
  if (lastSlash < 0) {
192
194
  return '';
193
195
  }
194
- prefix = prefix.slice(0, lastSlash + 1);
196
+ prefix = trimmed.slice(0, lastSlash + 1);
195
197
  }
196
198
  }
197
199
  return prefix;
@@ -328,8 +330,10 @@ export class PanoramaService {
328
330
  return;
329
331
  }
330
332
  if (!this.#scanPromise) {
331
- this.#scanPromise = this.#scanner.ensureData().then(() => {
332
- this.#cache = null; // 扫描后清除缓存以触发重新计算
333
+ this.#scanPromise = this.#scanner.ensureData().then((scanResult) => {
334
+ if (scanResult) {
335
+ this.#cache = null; // 扫描后清除缓存以触发重新计算
336
+ }
333
337
  });
334
338
  }
335
339
  await this.#scanPromise;
@@ -357,7 +361,8 @@ export class PanoramaService {
357
361
  return this.#cache;
358
362
  }
359
363
  const candidates = this.#moduleDiscoverer.discover();
360
- this.#cache = this.#aggregator.compute(candidates);
364
+ const configLayers = this.#moduleDiscoverer.readConfigLayers();
365
+ this.#cache = this.#aggregator.compute(candidates, { configLayers });
361
366
  return this.#cache;
362
367
  }
363
368
  }
@@ -33,6 +33,40 @@ export interface PanoramaModule {
33
33
  fileCount: number;
34
34
  recipeCount: number;
35
35
  coverageRatio: number;
36
+ /** 模块类型: local(有源码) / external(第三方) / host(宿主应用) */
37
+ kind?: 'local' | 'external' | 'host';
38
+ }
39
+ export interface ExternalDepProfile {
40
+ name: string;
41
+ /** 被多少本地模块依赖 */
42
+ fanIn: number;
43
+ /** 依赖此外部库的本地模块列表 */
44
+ dependedBy: string[];
45
+ /** 所属层级 */
46
+ layer?: string;
47
+ /** 声明版本 */
48
+ version?: string;
49
+ /** 技术栈分类标签 */
50
+ category?: string;
51
+ }
52
+ export interface TechStackProfile {
53
+ /** 按类别分组的外部依赖 */
54
+ categories: Array<{
55
+ name: string;
56
+ deps: Array<{
57
+ name: string;
58
+ fanIn: number;
59
+ version?: string;
60
+ }>;
61
+ }>;
62
+ /** 关键外部依赖(fan-in ≥ 3 的热点) */
63
+ hotspots: Array<{
64
+ name: string;
65
+ fanIn: number;
66
+ dependedBy: string[];
67
+ }>;
68
+ /** 外部依赖总数 */
69
+ totalExternalDeps: number;
36
70
  }
37
71
  export interface LayerLevel {
38
72
  level: number;
@@ -130,5 +164,9 @@ export interface PanoramaResult {
130
164
  callFlowSummary: CallFlowSummary;
131
165
  /** 项目级活跃 recipe 总数(不限模块匹配) */
132
166
  projectRecipeCount: number;
167
+ /** 外部依赖概况 */
168
+ externalDeps: ExternalDepProfile[];
169
+ /** 技术栈画像 */
170
+ techStack: TechStackProfile | null;
133
171
  computedAt: number;
134
172
  }
@@ -33,6 +33,8 @@ export interface ModuleCandidate {
33
33
  name: string;
34
34
  inferredRole: ModuleRole;
35
35
  files: string[];
36
+ /** 来自配置文件的层级名称(如 Boxfile 中的 layer 声明) */
37
+ configLayer?: string;
36
38
  }
37
39
  export declare class RoleRefiner {
38
40
  #private;
@@ -21,6 +21,35 @@ const WEIGHTS = {
21
21
  entityGraph: 0.1,
22
22
  regex: 0.15,
23
23
  };
24
+ /**
25
+ * 配置文件层级名 → 模块角色映射
26
+ * 当配置文件声明了层级时(如 Boxfile 的 layer),
27
+ * 层级名是判断模块角色的强信号
28
+ */
29
+ const CONFIG_LAYER_TO_ROLE = {
30
+ vendors: 'utility',
31
+ vendor: 'utility',
32
+ basics: 'core',
33
+ basic: 'core',
34
+ foundation: 'core',
35
+ core: 'core',
36
+ services: 'service',
37
+ service: 'service',
38
+ components: 'feature',
39
+ component: 'feature',
40
+ accessories: 'feature',
41
+ accessory: 'feature',
42
+ underlays: 'feature',
43
+ application: 'app',
44
+ app: 'app',
45
+ ui: 'ui',
46
+ networking: 'networking',
47
+ network: 'networking',
48
+ storage: 'storage',
49
+ model: 'model',
50
+ test: 'test',
51
+ tests: 'test',
52
+ };
24
53
  /** primary_lang / LanguageService 输出 → 语言族 */
25
54
  const LANG_TO_FAMILY = {
26
55
  swift: 'apple',
@@ -267,6 +296,18 @@ export class RoleRefiner {
267
296
  signals.push(...this.#extractFlowSignals(module));
268
297
  // 4. EntityGraph 拓扑信号 (0.10)
269
298
  signals.push(...this.#extractTopoSignals(module));
299
+ // 4.5. 配置层级信号 — 来自 Boxfile/Tuist 等配置文件的 layer 声明
300
+ if (module.configLayer) {
301
+ const layerRole = CONFIG_LAYER_TO_ROLE[module.configLayer.toLowerCase()];
302
+ if (layerRole) {
303
+ signals.push({
304
+ role: layerRole,
305
+ confidence: 0.85,
306
+ weight: WEIGHTS.ast, // 与 AST 等权重级别 (0.30)
307
+ source: 'config-layer',
308
+ });
309
+ }
310
+ }
270
311
  // 5. 正则基线 (0.15)
271
312
  signals.push({
272
313
  role: module.inferredRole,
@@ -0,0 +1,13 @@
1
+ /**
2
+ * TechStackProfiler — 技术栈画像聚合
3
+ *
4
+ * 根据外部依赖名称自动分类,生成项目技术栈画像。
5
+ * 使用已知库名映射表 + 关键词启发式进行分类。
6
+ *
7
+ * @module TechStackProfiler
8
+ */
9
+ import type { ExternalDepProfile, TechStackProfile } from './PanoramaTypes.js';
10
+ /**
11
+ * 对外部依赖进行分类,生成技术栈画像
12
+ */
13
+ export declare function profileTechStack(externalDeps: ExternalDepProfile[]): TechStackProfile;
@@ -0,0 +1,191 @@
1
+ /**
2
+ * TechStackProfiler — 技术栈画像聚合
3
+ *
4
+ * 根据外部依赖名称自动分类,生成项目技术栈画像。
5
+ * 使用已知库名映射表 + 关键词启发式进行分类。
6
+ *
7
+ * @module TechStackProfiler
8
+ */
9
+ /* ═══ Known Library Categories ════════════════════════════ */
10
+ /**
11
+ * 知名开源库 → 技术栈分类映射
12
+ * 覆盖 iOS/Swift/ObjC + 跨平台常见 + Node/Web 常见
13
+ */
14
+ const KNOWN_LIBRARIES = {
15
+ // 网络
16
+ afnetworking: 'Networking',
17
+ alamofire: 'Networking',
18
+ moya: 'Networking',
19
+ axios: 'Networking',
20
+ urlsession: 'Networking',
21
+ grpc: 'Networking',
22
+ starscream: 'Networking',
23
+ socketrocket: 'Networking',
24
+ // 图片
25
+ sdwebimage: 'Image',
26
+ kingfisher: 'Image',
27
+ nuke: 'Image',
28
+ yyimage: 'Image',
29
+ flanimatedimage: 'Image',
30
+ // UI / 布局
31
+ snapkit: 'UI',
32
+ masonry: 'UI',
33
+ flexlayout: 'UI',
34
+ yoga: 'UI',
35
+ texture: 'UI',
36
+ asyncdisplaykit: 'UI',
37
+ iglistkit: 'UI',
38
+ mbprogresshud: 'UI',
39
+ svprogresshud: 'UI',
40
+ lottie: 'UI',
41
+ yytext: 'UI',
42
+ dzzfloatingactionbutton: 'UI',
43
+ herocard: 'UI',
44
+ // 响应式 / 函数式
45
+ rxswift: 'Reactive',
46
+ rxcocoa: 'Reactive',
47
+ reactiveswift: 'Reactive',
48
+ combine: 'Reactive',
49
+ openombine: 'Reactive',
50
+ promisekit: 'Reactive',
51
+ // 数据 / 存储
52
+ realm: 'Storage',
53
+ coredata: 'Storage',
54
+ fmdb: 'Storage',
55
+ grdb: 'Storage',
56
+ sqlite: 'Storage',
57
+ wcdb: 'Storage',
58
+ mmkv: 'Storage',
59
+ userdefaults: 'Storage',
60
+ yymodel: 'Serialization',
61
+ objectmapper: 'Serialization',
62
+ codable: 'Serialization',
63
+ swiftyjson: 'Serialization',
64
+ mantle: 'Serialization',
65
+ handyjson: 'Serialization',
66
+ mjextension: 'Serialization',
67
+ // 日志 / 诊断
68
+ cocoalumberjack: 'Logging',
69
+ swiftybeaver: 'Logging',
70
+ oslog: 'Logging',
71
+ bugly: 'Diagnostics',
72
+ sentry: 'Diagnostics',
73
+ firebase: 'Diagnostics',
74
+ crashlytics: 'Diagnostics',
75
+ // 路由
76
+ urlnavigator: 'Routing',
77
+ deeplink: 'Routing',
78
+ arouter: 'Routing',
79
+ ctmediator: 'Routing',
80
+ // 测试
81
+ quick: 'Testing',
82
+ nimble: 'Testing',
83
+ xctest: 'Testing',
84
+ ocmock: 'Testing',
85
+ ohhttpstubs: 'Testing',
86
+ // 安全 / 加密
87
+ cryptoswift: 'Security',
88
+ keychain: 'Security',
89
+ keychainaccess: 'Security',
90
+ commonCrypto: 'Security',
91
+ // 依赖注入
92
+ swinject: 'Architecture',
93
+ needle: 'Architecture',
94
+ // 工具
95
+ swiftlint: 'Tooling',
96
+ r_swift: 'Tooling',
97
+ swiftgen: 'Tooling',
98
+ cocoapods: 'Tooling',
99
+ };
100
+ /**
101
+ * 关键词 → 分类的启发式映射
102
+ * 用于 KNOWN_LIBRARIES 未命中时的 fallback
103
+ */
104
+ const KEYWORD_CATEGORIES = [
105
+ [/net(work)?|http|api|url|request|socket|grpc/i, 'Networking'],
106
+ [/image|photo|picture|avatar|thumbnail/i, 'Image'],
107
+ [/ui|view|layout|widget|button|label|cell|collection|table/i, 'UI'],
108
+ [/anim(at)?|lottie|transition|motion/i, 'Animation'],
109
+ [/rx|reactive|combine|signal|observable|promise/i, 'Reactive'],
110
+ [/db|database|sql|realm|store|cache|storage|persist/i, 'Storage'],
111
+ [/json|model|mapper|serial|codable|parse|decode/i, 'Serialization'],
112
+ [/log|debug|trace|monitor|crash|sentry|bugly|diagnostic/i, 'Diagnostics'],
113
+ [/route|router|navigation|deeplink|scheme|mediator/i, 'Routing'],
114
+ [/test|mock|stub|spec|expect|assert/i, 'Testing'],
115
+ [/crypto|encrypt|security|keychain|auth|token|oauth/i, 'Security'],
116
+ [/player|video|audio|media|av|stream/i, 'Media'],
117
+ [/map|location|geo|coordinate|clocation/i, 'Location'],
118
+ [/pay|purchase|billing|iap/i, 'Payment'],
119
+ [/push|notification|apns|message/i, 'Messaging'],
120
+ [/analytics|track|event|statistics/i, 'Analytics'],
121
+ [/ad|banner|interstitial|reward/i, 'Advertising'],
122
+ ];
123
+ /* ═══ TechStackProfiler ═══════════════════════════════════ */
124
+ /** Fan-in 阈值:高于此值视为关键依赖热点 */
125
+ const HOTSPOT_THRESHOLD = 3;
126
+ /**
127
+ * 对外部依赖进行分类,生成技术栈画像
128
+ */
129
+ export function profileTechStack(externalDeps) {
130
+ if (externalDeps.length === 0) {
131
+ return { categories: [], hotspots: [], totalExternalDeps: 0 };
132
+ }
133
+ // 1. 分类每个外部依赖
134
+ const categoryMap = new Map();
135
+ for (const dep of externalDeps) {
136
+ const category = classifyDependency(dep.name);
137
+ dep.category = category;
138
+ if (!categoryMap.has(category)) {
139
+ categoryMap.set(category, []);
140
+ }
141
+ categoryMap.get(category).push({
142
+ name: dep.name,
143
+ fanIn: dep.fanIn,
144
+ version: dep.version,
145
+ });
146
+ }
147
+ // 2. 按分类排序(每个分类内按 fan-in 降序,分类间按依赖数降序)
148
+ const categories = [...categoryMap.entries()]
149
+ .map(([name, deps]) => ({
150
+ name,
151
+ deps: deps.sort((a, b) => b.fanIn - a.fanIn),
152
+ }))
153
+ .sort((a, b) => b.deps.length - a.deps.length);
154
+ // 3. 提取热点(fan-in ≥ 阈值)
155
+ const hotspots = externalDeps
156
+ .filter((d) => d.fanIn >= HOTSPOT_THRESHOLD)
157
+ .map((d) => ({ name: d.name, fanIn: d.fanIn, dependedBy: d.dependedBy }))
158
+ .sort((a, b) => b.fanIn - a.fanIn);
159
+ return {
160
+ categories,
161
+ hotspots,
162
+ totalExternalDeps: externalDeps.length,
163
+ };
164
+ }
165
+ /**
166
+ * 分类单个外部依赖
167
+ */
168
+ function classifyDependency(name) {
169
+ // 标准化名称:移除前缀、转小写
170
+ const normalized = name
171
+ .replace(/^(BDMV|BDP|FMT|BD|MTL|Bai|Ali|TX|TT)/, '')
172
+ .toLowerCase()
173
+ .replace(/[-_]/g, '');
174
+ // 1. 精确匹配已知库
175
+ if (KNOWN_LIBRARIES[normalized]) {
176
+ return KNOWN_LIBRARIES[normalized];
177
+ }
178
+ // 尝试原始名称小写
179
+ const rawLower = name.toLowerCase().replace(/[-_]/g, '');
180
+ if (KNOWN_LIBRARIES[rawLower]) {
181
+ return KNOWN_LIBRARIES[rawLower];
182
+ }
183
+ // 2. 关键词启发式
184
+ for (const [pattern, category] of KEYWORD_CATEGORIES) {
185
+ if (pattern.test(name)) {
186
+ return category;
187
+ }
188
+ }
189
+ // 3. 默认分类
190
+ return 'Other';
191
+ }
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module BM25Scorer
8
8
  */
9
- import type { BM25Document, BM25SearchResult, Scorer } from './SearchTypes.js';
9
+ import type { BM25Document, Scorer } from './SearchTypes.js';
10
10
  /** BM25 评分器 */
11
11
  export declare class BM25Scorer implements Scorer {
12
12
  _idIndex: Map<string, number>;
@@ -31,7 +31,7 @@ export declare class BM25Scorer implements Scorer {
31
31
  /** 压缩 documents 数组,清除 tombstone 空洞 */
32
32
  _compact(): void;
33
33
  /** 查询文档,返回按 BM25 分数排序的结果 */
34
- search(query: string, limit?: number): BM25SearchResult[];
34
+ search(query: string, limit?: number): import("./SearchTypes.js").ScorerResult[];
35
35
  /** 清空索引 */
36
36
  clear(): void;
37
37
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * SearchEngine - 统一搜索引擎
3
3
  *
4
- * 三级搜索策略: keyword → BM25 ranking → semantic(可选)
4
+ * 三级搜索策略: keyword → FieldWeighted ranking → semantic(可选)
5
5
  * 从 V1 SearchServiceV2 迁移,适配 V2 架构
6
6
  */
7
7
  import Logger from '../../infrastructure/logging/Logger.js';
@@ -10,7 +10,7 @@ import { MultiSignalRanker } from './MultiSignalRanker.js';
10
10
  import type { DbRow, RankingContext, Scorer, SearchAiProvider, SearchCrossEncoder, SearchDb, SearchEngineOptions, SearchHybridRetriever, SearchOptions, SearchResponse, SearchResultItem, SearchVectorService, SearchVectorStore } from './SearchTypes.js';
11
11
  export { BM25Scorer } from './BM25Scorer.js';
12
12
  export { FieldWeightedScorer } from './FieldWeightedScorer.js';
13
- export type { BM25DocMeta, BM25SearchResult, DbRow, RankingContext, RrfHit, Scorer, SearchAiProvider, SearchCrossEncoder, SearchDb, SearchEngineOptions, SearchHybridRetriever, SearchOptions, SearchResponse, SearchResultItem, SearchVectorService, SearchVectorStore, SlimSearchResult, VectorHit, } from './SearchTypes.js';
13
+ export type { BM25DocMeta, DbRow, DocMeta, RankingContext, RrfHit, Scorer, ScorerResult, SearchAiProvider, SearchCrossEncoder, SearchDb, SearchEngineOptions, SearchHybridRetriever, SearchOptions, SearchResponse, SearchResultItem, SearchVectorService, SearchVectorStore, SlimSearchResult, VectorHit, } from './SearchTypes.js';
14
14
  export { groupByKind, slimSearchResult } from './SearchTypes.js';
15
15
  export { tokenize } from './tokenizer.js';
16
16
  /**
@@ -97,18 +97,18 @@ export declare class SearchEngine {
97
97
  /**
98
98
  * 关键词搜索 - 直接 SQL LIKE
99
99
  * 返回包含 kind 字段的完整结果,使用 ESCAPE 防止通配符注入
100
- * 当 SQL LIKE 无结果时,降级到 BM25 搜索以提升自然语言查询的召回率
100
+ * 当 SQL LIKE 无结果时,降级到 FieldWeighted 搜索以提升自然语言查询的召回率
101
101
  */
102
102
  _keywordSearch(query: string, type: string, limit: number): SearchResultItem[];
103
103
  /**
104
- * BM25 排序搜索
104
+ * 加权字段搜索(FieldWeightedScorer)
105
105
  * 增加 Title/Trigger 精确匹配 bonus — 当 query 出现在标题/触发词中时
106
- * 给予额外 BM25 分数加成,确保精确匹配的条目排名靠前
106
+ * 给予额外分数加成,确保精确匹配的条目排名靠前
107
107
  */
108
- _bm25Search(query: string, type: string, limit: number): SearchResultItem[];
108
+ _scorerSearch(query: string, type: string, limit: number): SearchResultItem[];
109
109
  /**
110
110
  * 语义搜索 - 需要 AI Provider 的 embed 功能
111
- * 降级到 BM25 如果 AI 不可用
111
+ * 不可用时降级到 FieldWeighted 搜索
112
112
  * @returns >}
113
113
  */
114
114
  _semanticSearch(query: string, type: string, limit: number): Promise<{
@@ -117,7 +117,7 @@ export declare class SearchEngine {
117
117
  }>;
118
118
  /**
119
119
  * 补充详细字段(content / description / trigger / delivery 字段)— 批量 IN 查询
120
- * 用于向量搜索结果与 BM25 结果的一致性
120
+ * 用于向量搜索结果与 FieldWeighted 结果的一致性
121
121
  */
122
122
  _supplementDetails(items: SearchResultItem[]): void;
123
123
  /**
@@ -138,9 +138,10 @@ export declare class SearchEngine {
138
138
  /**
139
139
  * 从 DB 行构建索引文本
140
140
  *
141
- * 使用 BM25F 思想:高价值字段(title, trigger)重复出现以提升 TF 权重
141
+ * 高价值字段(title, trigger)通过重复出现提升 TF 权重
142
142
  * — title ×3, trigger ×2, description ×1.5(通过重复 token 实现)
143
- * 这确保标题匹配的文档获得显著更高的 BM25 分数
143
+ * 这确保标题匹配的文档获得显著更高的分数
144
+ * 注:此逻辑主要服务于 BM25Scorer,FieldWeightedScorer 内部已有字段权重机制
144
145
  */
145
146
  _buildDocText(r: DbRow): string;
146
147
  /**