autosnippet 3.3.6 → 3.3.8

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 (275) hide show
  1. package/README.md +1 -0
  2. package/dashboard/dist/assets/icons-BMNb0V6L.js +1 -0
  3. package/dashboard/dist/assets/index-DHJ1Dj7u.css +1 -0
  4. package/dashboard/dist/assets/index-DV8biUkH.js +112 -0
  5. package/dashboard/dist/index.html +3 -3
  6. package/dist/bin/cli.js +8 -4
  7. package/dist/lib/agent/AgentRuntime.d.ts +2 -2
  8. package/dist/lib/agent/AgentRuntime.js +26 -18
  9. package/dist/lib/agent/core/ChatAgentPrompts.js +57 -21
  10. package/dist/lib/agent/core/LoopContext.d.ts +1 -0
  11. package/dist/lib/agent/core/ToolExecutionPipeline.js +13 -0
  12. package/dist/lib/agent/domain/ChatAgentTasks.js +4 -0
  13. package/dist/lib/agent/forced-summary.js +7 -2
  14. package/dist/lib/agent/memory/ActiveContext.d.ts +0 -2
  15. package/dist/lib/agent/memory/ActiveContext.js +0 -2
  16. package/dist/lib/agent/memory/MemoryEmbeddingStore.d.ts +49 -0
  17. package/dist/lib/agent/memory/MemoryEmbeddingStore.js +159 -0
  18. package/dist/lib/agent/memory/MemoryRetriever.d.ts +2 -0
  19. package/dist/lib/agent/memory/MemoryRetriever.js +25 -11
  20. package/dist/lib/agent/memory/MemoryStore.d.ts +8 -41
  21. package/dist/lib/agent/memory/MemoryStore.js +196 -261
  22. package/dist/lib/agent/memory/PersistentMemory.d.ts +2 -0
  23. package/dist/lib/agent/memory/PersistentMemory.js +4 -5
  24. package/dist/lib/agent/memory/SessionStore.d.ts +0 -2
  25. package/dist/lib/agent/memory/SessionStore.js +0 -2
  26. package/dist/lib/agent/tools/ast-graph.js +21 -19
  27. package/dist/lib/agent/tools/infrastructure.js +3 -2
  28. package/dist/lib/agent/tools/project-access.d.ts +2 -2
  29. package/dist/lib/agent/tools/project-access.js +5 -4
  30. package/dist/lib/bootstrap.js +2 -1
  31. package/dist/lib/cli/AiScanService.js +8 -21
  32. package/dist/lib/cli/KnowledgeSyncService.d.ts +7 -37
  33. package/dist/lib/cli/KnowledgeSyncService.js +23 -51
  34. package/dist/lib/core/ast/ProjectGraph.js +5 -27
  35. package/dist/lib/core/discovery/ConfigWatcher.d.ts +64 -0
  36. package/dist/lib/core/discovery/ConfigWatcher.js +336 -0
  37. package/dist/lib/core/discovery/CustomConfigDiscoverer.d.ts +28 -0
  38. package/dist/lib/core/discovery/CustomConfigDiscoverer.js +1303 -0
  39. package/dist/lib/core/discovery/DiscovererPreference.d.ts +44 -0
  40. package/dist/lib/core/discovery/DiscovererPreference.js +141 -0
  41. package/dist/lib/core/discovery/DiscovererRegistry.d.ts +10 -1
  42. package/dist/lib/core/discovery/DiscovererRegistry.js +42 -2
  43. package/dist/lib/core/discovery/ProjectDiscoverer.d.ts +19 -0
  44. package/dist/lib/core/discovery/index.d.ts +2 -0
  45. package/dist/lib/core/discovery/index.js +4 -0
  46. package/dist/lib/core/discovery/parsers/CMakeParser.d.ts +32 -0
  47. package/dist/lib/core/discovery/parsers/CMakeParser.js +148 -0
  48. package/dist/lib/core/discovery/parsers/GradleDslParser.d.ts +43 -0
  49. package/dist/lib/core/discovery/parsers/GradleDslParser.js +171 -0
  50. package/dist/lib/core/discovery/parsers/JsonConfigParser.d.ts +45 -0
  51. package/dist/lib/core/discovery/parsers/JsonConfigParser.js +122 -0
  52. package/dist/lib/core/discovery/parsers/RubyDslParser.d.ts +49 -0
  53. package/dist/lib/core/discovery/parsers/RubyDslParser.js +282 -0
  54. package/dist/lib/core/discovery/parsers/StarlarkParser.d.ts +33 -0
  55. package/dist/lib/core/discovery/parsers/StarlarkParser.js +229 -0
  56. package/dist/lib/core/discovery/parsers/YamlConfigParser.d.ts +37 -0
  57. package/dist/lib/core/discovery/parsers/YamlConfigParser.js +212 -0
  58. package/dist/lib/domain/dimension/DimensionRegistry.d.ts +0 -2
  59. package/dist/lib/domain/dimension/DimensionRegistry.js +0 -2
  60. package/dist/lib/domain/dimension/DimensionSop.js +44 -33
  61. package/dist/lib/domain/dimension/UnifiedDimension.d.ts +0 -2
  62. package/dist/lib/domain/dimension/UnifiedDimension.js +0 -2
  63. package/dist/lib/domain/knowledge/KnowledgeEntry.d.ts +7 -1
  64. package/dist/lib/domain/knowledge/KnowledgeEntry.js +17 -3
  65. package/dist/lib/domain/knowledge/Lifecycle.d.ts +26 -0
  66. package/dist/lib/domain/knowledge/Lifecycle.js +42 -0
  67. package/dist/lib/domain/knowledge/index.d.ts +2 -1
  68. package/dist/lib/domain/knowledge/index.js +1 -1
  69. package/dist/lib/external/ai/AiProvider.d.ts +12 -0
  70. package/dist/lib/external/ai/AiProvider.js +24 -0
  71. package/dist/lib/external/ai/AiProviderManager.d.ts +101 -0
  72. package/dist/lib/external/ai/AiProviderManager.js +193 -0
  73. package/dist/lib/external/ai/providers/ClaudeProvider.js +11 -0
  74. package/dist/lib/external/ai/providers/GoogleGeminiProvider.js +18 -0
  75. package/dist/lib/external/ai/providers/MockProvider.d.ts +21 -3
  76. package/dist/lib/external/ai/providers/MockProvider.js +290 -14
  77. package/dist/lib/external/ai/providers/OpenAiProvider.js +16 -0
  78. package/dist/lib/external/lark/LarkTransport.d.ts +5 -1
  79. package/dist/lib/external/lark/LarkTransport.js +10 -2
  80. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/BootstrapSnapshot.d.ts +2 -1
  81. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/BootstrapSnapshot.js +102 -153
  82. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/mock-pipeline.d.ts +20 -0
  83. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/mock-pipeline.js +432 -0
  84. package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +49 -24
  85. package/dist/lib/external/mcp/handlers/bootstrap/refine.js +8 -0
  86. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.d.ts +1 -1
  87. package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.js +41 -37
  88. package/dist/lib/external/mcp/handlers/bootstrap-external.d.ts +9 -0
  89. package/dist/lib/external/mcp/handlers/bootstrap-external.js +3 -1
  90. package/dist/lib/external/mcp/handlers/bootstrap-internal.js +2 -0
  91. package/dist/lib/external/mcp/handlers/consolidated.js +2 -1
  92. package/dist/lib/external/mcp/handlers/dimension-complete-external.js +9 -4
  93. package/dist/lib/external/mcp/handlers/evolve-external.d.ts +1 -0
  94. package/dist/lib/external/mcp/handlers/evolve-external.js +18 -18
  95. package/dist/lib/external/mcp/handlers/guard.js +15 -24
  96. package/dist/lib/external/mcp/handlers/knowledge.js +5 -4
  97. package/dist/lib/external/mcp/handlers/panorama.js +9 -9
  98. package/dist/lib/external/mcp/handlers/rescan-external.js +7 -6
  99. package/dist/lib/external/mcp/handlers/rescan-internal.js +9 -5
  100. package/dist/lib/external/mcp/handlers/search.js +3 -1
  101. package/dist/lib/external/mcp/handlers/skill.js +4 -4
  102. package/dist/lib/external/mcp/handlers/structure.js +8 -12
  103. package/dist/lib/external/mcp/handlers/system.js +10 -34
  104. package/dist/lib/http/routes/ai.js +109 -30
  105. package/dist/lib/http/routes/candidates.js +11 -4
  106. package/dist/lib/http/routes/commands.js +10 -1
  107. package/dist/lib/http/routes/guardReport.js +3 -5
  108. package/dist/lib/http/routes/health.js +11 -0
  109. package/dist/lib/http/routes/modules.js +27 -0
  110. package/dist/lib/http/routes/panorama.js +12 -12
  111. package/dist/lib/http/routes/recipes.js +66 -8
  112. package/dist/lib/http/routes/remote.js +3 -13
  113. package/dist/lib/http/routes/search.js +11 -8
  114. package/dist/lib/http/utils/routeHelpers.js +2 -1
  115. package/dist/lib/infrastructure/audit/AuditLogger.d.ts +20 -3
  116. package/dist/lib/infrastructure/audit/AuditStore.d.ts +28 -29
  117. package/dist/lib/infrastructure/audit/AuditStore.js +81 -88
  118. package/dist/lib/infrastructure/database/drizzle/schema.d.ts +180 -2
  119. package/dist/lib/infrastructure/database/drizzle/schema.js +23 -3
  120. package/dist/lib/injection/ServiceContainer.d.ts +6 -5
  121. package/dist/lib/injection/ServiceContainer.js +18 -31
  122. package/dist/lib/injection/ServiceMap.d.ts +22 -0
  123. package/dist/lib/injection/modules/AiModule.d.ts +6 -9
  124. package/dist/lib/injection/modules/AiModule.js +82 -39
  125. package/dist/lib/injection/modules/AppModule.js +2 -1
  126. package/dist/lib/injection/modules/GuardModule.js +5 -5
  127. package/dist/lib/injection/modules/InfraModule.js +60 -0
  128. package/dist/lib/injection/modules/KnowledgeModule.js +86 -51
  129. package/dist/lib/injection/modules/PanoramaModule.js +16 -10
  130. package/dist/lib/injection/modules/VectorModule.js +3 -0
  131. package/dist/lib/repository/audit/AuditRepository.d.ts +107 -0
  132. package/dist/lib/repository/audit/AuditRepository.js +272 -0
  133. package/dist/lib/repository/base/RepositoryBase.d.ts +46 -0
  134. package/dist/lib/repository/base/RepositoryBase.js +32 -0
  135. package/dist/lib/repository/bootstrap/BootstrapRepository.d.ts +94 -0
  136. package/dist/lib/repository/bootstrap/BootstrapRepository.js +246 -0
  137. package/dist/lib/repository/code/CodeEntityRepository.d.ts +91 -0
  138. package/dist/lib/repository/code/CodeEntityRepository.js +361 -0
  139. package/dist/lib/repository/delivery/DeliveryRepoAdapter.d.ts +39 -0
  140. package/dist/lib/repository/delivery/DeliveryRepoAdapter.js +23 -0
  141. package/dist/lib/repository/evolution/LifecycleEventRepository.d.ts +51 -0
  142. package/dist/lib/repository/evolution/LifecycleEventRepository.js +119 -0
  143. package/dist/lib/repository/evolution/ProposalRepository.d.ts +9 -12
  144. package/dist/lib/repository/evolution/ProposalRepository.js +114 -57
  145. package/dist/lib/repository/guard/GuardViolationRepository.d.ts +104 -0
  146. package/dist/lib/repository/guard/GuardViolationRepository.js +217 -0
  147. package/dist/lib/repository/knowledge/KnowledgeEdgeRepository.d.ts +129 -0
  148. package/dist/lib/repository/knowledge/KnowledgeEdgeRepository.js +475 -0
  149. package/dist/lib/repository/knowledge/KnowledgeFileStore.d.ts +39 -0
  150. package/dist/lib/repository/knowledge/KnowledgeFileStore.js +12 -0
  151. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.d.ts +295 -11
  152. package/dist/lib/repository/knowledge/KnowledgeRepository.impl.js +608 -13
  153. package/dist/lib/repository/knowledge/KnowledgeUnitOfWork.d.ts +61 -0
  154. package/dist/lib/repository/knowledge/KnowledgeUnitOfWork.js +156 -0
  155. package/dist/lib/repository/memory/MemoryRepository.d.ts +90 -0
  156. package/dist/lib/repository/memory/MemoryRepository.js +260 -0
  157. package/dist/lib/repository/search/SearchRepoAdapter.d.ts +92 -0
  158. package/dist/lib/repository/search/SearchRepoAdapter.js +124 -0
  159. package/dist/lib/repository/session/SessionRepository.d.ts +46 -0
  160. package/dist/lib/repository/session/SessionRepository.js +110 -0
  161. package/dist/lib/repository/sourceref/RecipeSourceRefRepository.d.ts +66 -0
  162. package/dist/lib/repository/sourceref/RecipeSourceRefRepository.js +182 -0
  163. package/dist/lib/repository/sync/SyncRepoAdapter.d.ts +58 -0
  164. package/dist/lib/repository/sync/SyncRepoAdapter.js +58 -0
  165. package/dist/lib/service/bootstrap/UiStartupTasks.js +5 -6
  166. package/dist/lib/service/bootstrap/bootstrap-event-types.d.ts +0 -1
  167. package/dist/lib/service/bootstrap/bootstrap-event-types.js +0 -1
  168. package/dist/lib/service/cleanup/CleanupService.d.ts +54 -7
  169. package/dist/lib/service/cleanup/CleanupService.js +291 -40
  170. package/dist/lib/service/delivery/CursorDeliveryPipeline.js +6 -8
  171. package/dist/lib/service/evolution/ConsolidationAdvisor.d.ts +4 -9
  172. package/dist/lib/service/evolution/ConsolidationAdvisor.js +34 -70
  173. package/dist/lib/service/evolution/ContentPatcher.d.ts +4 -12
  174. package/dist/lib/service/evolution/ContentPatcher.js +48 -19
  175. package/dist/lib/service/evolution/ContradictionDetector.d.ts +3 -7
  176. package/dist/lib/service/evolution/ContradictionDetector.js +17 -24
  177. package/dist/lib/service/evolution/DecayDetector.d.ts +10 -9
  178. package/dist/lib/service/evolution/DecayDetector.js +63 -57
  179. package/dist/lib/service/evolution/EnhancementSuggester.d.ts +3 -9
  180. package/dist/lib/service/evolution/EnhancementSuggester.js +42 -86
  181. package/dist/lib/service/evolution/KnowledgeMetabolism.d.ts +4 -4
  182. package/dist/lib/service/evolution/KnowledgeMetabolism.js +102 -71
  183. package/dist/lib/service/evolution/ProposalExecutor.d.ts +5 -12
  184. package/dist/lib/service/evolution/ProposalExecutor.js +64 -69
  185. package/dist/lib/service/evolution/RecipeLifecycleSupervisor.d.ts +9 -14
  186. package/dist/lib/service/evolution/RecipeLifecycleSupervisor.js +94 -155
  187. package/dist/lib/service/evolution/RecipeRelevanceAuditor.d.ts +4 -1
  188. package/dist/lib/service/evolution/RecipeRelevanceAuditor.js +50 -49
  189. package/dist/lib/service/evolution/RedundancyAnalyzer.d.ts +3 -7
  190. package/dist/lib/service/evolution/RedundancyAnalyzer.js +15 -22
  191. package/dist/lib/service/evolution/StagingManager.d.ts +6 -15
  192. package/dist/lib/service/evolution/StagingManager.js +37 -95
  193. package/dist/lib/service/evolution/createSupersedeProposal.d.ts +1 -1
  194. package/dist/lib/service/evolution/createSupersedeProposal.js +7 -8
  195. package/dist/lib/service/guard/CoverageAnalyzer.d.ts +3 -7
  196. package/dist/lib/service/guard/CoverageAnalyzer.js +9 -11
  197. package/dist/lib/service/guard/GuardCheckEngine.d.ts +3 -0
  198. package/dist/lib/service/guard/GuardCheckEngine.js +14 -22
  199. package/dist/lib/service/guard/ReverseGuard.d.ts +4 -7
  200. package/dist/lib/service/guard/ReverseGuard.js +21 -31
  201. package/dist/lib/service/guard/ViolationsStore.d.ts +15 -21
  202. package/dist/lib/service/guard/ViolationsStore.js +75 -69
  203. package/dist/lib/service/knowledge/CodeEntityGraph.d.ts +45 -63
  204. package/dist/lib/service/knowledge/CodeEntityGraph.js +418 -496
  205. package/dist/lib/service/knowledge/ConfidenceRouter.js +18 -9
  206. package/dist/lib/service/knowledge/KnowledgeFileWriter.d.ts +2 -1
  207. package/dist/lib/service/knowledge/KnowledgeGraphService.d.ts +18 -60
  208. package/dist/lib/service/knowledge/KnowledgeGraphService.js +58 -109
  209. package/dist/lib/service/knowledge/KnowledgeService.d.ts +15 -1
  210. package/dist/lib/service/knowledge/KnowledgeService.js +97 -46
  211. package/dist/lib/service/knowledge/RecipeProductionGateway.d.ts +0 -2
  212. package/dist/lib/service/knowledge/RecipeProductionGateway.js +0 -2
  213. package/dist/lib/service/knowledge/SourceRefReconciler.d.ts +5 -13
  214. package/dist/lib/service/knowledge/SourceRefReconciler.js +58 -78
  215. package/dist/lib/service/module/ModuleService.js +10 -19
  216. package/dist/lib/service/panorama/CouplingAnalyzer.d.ts +14 -3
  217. package/dist/lib/service/panorama/CouplingAnalyzer.js +137 -32
  218. package/dist/lib/service/panorama/DimensionAnalyzer.d.ts +7 -4
  219. package/dist/lib/service/panorama/DimensionAnalyzer.js +94 -33
  220. package/dist/lib/service/panorama/LayerInferrer.d.ts +16 -1
  221. package/dist/lib/service/panorama/LayerInferrer.js +118 -1
  222. package/dist/lib/service/panorama/ModuleDiscoverer.d.ts +14 -4
  223. package/dist/lib/service/panorama/ModuleDiscoverer.js +209 -61
  224. package/dist/lib/service/panorama/PanoramaAggregator.d.ts +15 -4
  225. package/dist/lib/service/panorama/PanoramaAggregator.js +128 -62
  226. package/dist/lib/service/panorama/PanoramaScanner.d.ts +5 -1
  227. package/dist/lib/service/panorama/PanoramaScanner.js +60 -31
  228. package/dist/lib/service/panorama/PanoramaService.d.ts +11 -8
  229. package/dist/lib/service/panorama/PanoramaService.js +49 -69
  230. package/dist/lib/service/panorama/PanoramaTypes.d.ts +41 -0
  231. package/dist/lib/service/panorama/RoleRefiner.d.ts +10 -5
  232. package/dist/lib/service/panorama/RoleRefiner.js +92 -282
  233. package/dist/lib/service/panorama/TechStackProfiler.d.ts +13 -0
  234. package/dist/lib/service/panorama/TechStackProfiler.js +79 -0
  235. package/dist/lib/service/quality/QualityScorer.d.ts +45 -26
  236. package/dist/lib/service/quality/QualityScorer.js +157 -83
  237. package/dist/lib/service/search/SearchEngine.d.ts +1 -0
  238. package/dist/lib/service/search/SearchEngine.js +32 -37
  239. package/dist/lib/service/signal/HitRecorder.js +5 -5
  240. package/dist/lib/service/skills/RuleRecallStrategy.js +7 -3
  241. package/dist/lib/service/skills/SignalCollector.d.ts +6 -8
  242. package/dist/lib/service/skills/SignalCollector.js +34 -60
  243. package/dist/lib/service/skills/SkillAdvisor.d.ts +7 -13
  244. package/dist/lib/service/skills/SkillAdvisor.js +30 -79
  245. package/dist/lib/service/vector/ContextualEnricher.d.ts +1 -0
  246. package/dist/lib/service/vector/ContextualEnricher.js +4 -0
  247. package/dist/lib/service/vector/SyncCoordinator.d.ts +3 -1
  248. package/dist/lib/service/vector/SyncCoordinator.js +25 -3
  249. package/dist/lib/service/vector/VectorService.d.ts +2 -0
  250. package/dist/lib/service/vector/VectorService.js +3 -0
  251. package/dist/lib/service/wiki/WikiGenerator.js +1 -1
  252. package/dist/lib/shared/LanguageProfiles.d.ts +109 -0
  253. package/dist/lib/shared/LanguageProfiles.js +939 -0
  254. package/dist/lib/shared/LanguageService.d.ts +6 -0
  255. package/dist/lib/shared/LanguageService.js +19 -0
  256. package/dist/lib/shared/constants.d.ts +19 -19
  257. package/dist/lib/shared/constants.js +10 -10
  258. package/dist/lib/shared/developer-identity.d.ts +18 -0
  259. package/dist/lib/shared/developer-identity.js +62 -0
  260. package/dist/lib/shared/schemas/http-requests.d.ts +8 -17
  261. package/dist/lib/shared/schemas/http-requests.js +9 -6
  262. package/dist/lib/shared/schemas/mcp-tools.d.ts +1 -1
  263. package/dist/lib/types/knowledge-wire.d.ts +1 -0
  264. package/dist/lib/types/project-snapshot-builder.d.ts +0 -1
  265. package/dist/lib/types/project-snapshot-builder.js +0 -1
  266. package/dist/lib/types/project-snapshot.d.ts +0 -1
  267. package/dist/lib/types/project-snapshot.js +0 -1
  268. package/dist/lib/types/snapshot-views.d.ts +0 -2
  269. package/dist/lib/types/snapshot-views.js +0 -1
  270. package/package.json +2 -1
  271. package/dashboard/dist/assets/icons-D1aVZYFW.js +0 -1
  272. package/dashboard/dist/assets/index-CxHOu8Hd.css +0 -1
  273. package/dashboard/dist/assets/index-DDdAOpYT.js +0 -128
  274. package/dist/lib/repository/base/BaseRepository.d.ts +0 -53
  275. package/dist/lib/repository/base/BaseRepository.js +0 -226
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @module StarlarkParser
3
+ * @description Starlark (Python 子集) 轻量解析器 — 从 BUILD / BUILD.bazel / BUCK 文件提取构建目标信息
4
+ *
5
+ * 支持解析:
6
+ * - load() 语句 → 推断语言
7
+ * - 目标声明 (swift_library, cc_binary, java_library 等)
8
+ * - name / deps / srcs / visibility 字段
9
+ *
10
+ * 设计策略: 正则 + 逐行状态机(不做宏展开)
11
+ */
12
+ export interface StarlarkTarget {
13
+ rule: string;
14
+ name: string;
15
+ srcs: string[];
16
+ deps: string[];
17
+ visibility: string[];
18
+ testonly?: boolean;
19
+ }
20
+ export interface LoadStatement {
21
+ repository: string;
22
+ path: string;
23
+ symbols: string[];
24
+ }
25
+ export interface ParsedBuildFile {
26
+ targets: StarlarkTarget[];
27
+ loads: LoadStatement[];
28
+ }
29
+ export declare const RULE_TO_LANGUAGE: Record<string, string>;
30
+ /**
31
+ * 解析单个 BUILD/BUILD.bazel/BUCK 文件内容
32
+ */
33
+ export declare function parseStarlarkBuildFile(content: string): ParsedBuildFile;
@@ -0,0 +1,229 @@
1
+ /**
2
+ * @module StarlarkParser
3
+ * @description Starlark (Python 子集) 轻量解析器 — 从 BUILD / BUILD.bazel / BUCK 文件提取构建目标信息
4
+ *
5
+ * 支持解析:
6
+ * - load() 语句 → 推断语言
7
+ * - 目标声明 (swift_library, cc_binary, java_library 等)
8
+ * - name / deps / srcs / visibility 字段
9
+ *
10
+ * 设计策略: 正则 + 逐行状态机(不做宏展开)
11
+ */
12
+ // ── 规则名 → 语言映射 ────────────────────────────────
13
+ export const RULE_TO_LANGUAGE = {
14
+ // Bazel
15
+ swift_library: 'swift',
16
+ swift_binary: 'swift',
17
+ swift_test: 'swift',
18
+ cc_library: 'cpp',
19
+ cc_binary: 'cpp',
20
+ cc_test: 'cpp',
21
+ java_library: 'java',
22
+ java_binary: 'java',
23
+ java_test: 'java',
24
+ kt_jvm_library: 'kotlin',
25
+ kt_jvm_binary: 'kotlin',
26
+ py_library: 'python',
27
+ py_binary: 'python',
28
+ py_test: 'python',
29
+ go_library: 'go',
30
+ go_binary: 'go',
31
+ go_test: 'go',
32
+ rust_library: 'rust',
33
+ rust_binary: 'rust',
34
+ rust_test: 'rust',
35
+ ts_project: 'typescript',
36
+ proto_library: 'protobuf',
37
+ // Buck2
38
+ cxx_library: 'cpp',
39
+ cxx_binary: 'cpp',
40
+ cxx_test: 'cpp',
41
+ android_library: 'kotlin',
42
+ android_binary: 'kotlin',
43
+ apple_library: 'swift',
44
+ apple_binary: 'swift',
45
+ python_library: 'python',
46
+ python_binary: 'python',
47
+ // Pants
48
+ python_source: 'python',
49
+ python_sources: 'python',
50
+ docker_image: 'docker',
51
+ };
52
+ // ── 正则模式 ────────────────────────────────────────
53
+ const LOAD_RE = /^load\(\s*"([^"]+)"\s*,\s*((?:"[^"]+"(?:\s*,\s*)?)+)\s*\)/;
54
+ const RULE_CALL_RE = /^(\w+)\(\s*$/;
55
+ const NAME_RE = /name\s*=\s*"([^"]+)"/;
56
+ const TESTONLY_RE = /testonly\s*=\s*(True|1)/;
57
+ const STRING_LIST_RE = (field) => new RegExp(`${field}\\s*=\\s*(?:glob\\(\\s*)?\\[([^\\]]*)\\]`, 's');
58
+ const DEP_LABEL_RE = /"((?:\/\/[^"]*|:[^"]*))"/g;
59
+ const GLOB_RE = /glob\(\s*\[([^\]]*)\]\s*\)/;
60
+ // ── 公开 API ────────────────────────────────────────
61
+ /**
62
+ * 解析单个 BUILD/BUILD.bazel/BUCK 文件内容
63
+ */
64
+ export function parseStarlarkBuildFile(content) {
65
+ const result = { targets: [], loads: [] };
66
+ const lines = content.split('\n');
67
+ // Pass 1: 提取 load 语句
68
+ for (const line of lines) {
69
+ const trimmed = line.trim();
70
+ if (trimmed.startsWith('#')) {
71
+ continue;
72
+ }
73
+ const loadMatch = trimmed.match(LOAD_RE);
74
+ if (loadMatch) {
75
+ const fullLabel = loadMatch[1];
76
+ const symbolsPart = loadMatch[2];
77
+ // 解析 repository 和 path
78
+ let repository = '';
79
+ let path = fullLabel;
80
+ if (fullLabel.startsWith('@')) {
81
+ const slashIdx = fullLabel.indexOf('//');
82
+ if (slashIdx !== -1) {
83
+ repository = fullLabel.substring(0, slashIdx);
84
+ path = fullLabel.substring(slashIdx);
85
+ }
86
+ }
87
+ const symbols = [];
88
+ const symRe = /"([^"]+)"/g;
89
+ let symMatch;
90
+ while ((symMatch = symRe.exec(symbolsPart)) !== null) {
91
+ symbols.push(symMatch[1]);
92
+ }
93
+ result.loads.push({ repository, path, symbols });
94
+ }
95
+ }
96
+ // Pass 2: 提取目标声明(逐行状态机)
97
+ let i = 0;
98
+ while (i < lines.length) {
99
+ const trimmed = lines[i].trim();
100
+ // 跳过注释和空行
101
+ if (trimmed.startsWith('#') || trimmed === '') {
102
+ i++;
103
+ continue;
104
+ }
105
+ // 检测规则调用开始: rule_name(
106
+ const ruleMatch = trimmed.match(RULE_CALL_RE);
107
+ if (ruleMatch) {
108
+ const rule = ruleMatch[1];
109
+ // 收集整个调用块直到匹配的 )
110
+ const blockLines = [trimmed];
111
+ let depth = 1;
112
+ let j = i + 1;
113
+ while (j < lines.length && depth > 0) {
114
+ const bLine = lines[j];
115
+ for (const ch of bLine) {
116
+ if (ch === '(') {
117
+ depth++;
118
+ }
119
+ if (ch === ')') {
120
+ depth--;
121
+ }
122
+ }
123
+ blockLines.push(bLine);
124
+ j++;
125
+ }
126
+ const block = blockLines.join('\n');
127
+ const target = parseTargetBlock(rule, block);
128
+ if (target) {
129
+ result.targets.push(target);
130
+ }
131
+ i = j;
132
+ continue;
133
+ }
134
+ // 也检测单行调用: rule_name(name = "...")
135
+ const inlineMatch = trimmed.match(/^(\w+)\(/);
136
+ if (inlineMatch && RULE_TO_LANGUAGE[inlineMatch[1]]) {
137
+ // 同样收集到闭合 )
138
+ const rule = inlineMatch[1];
139
+ const blockLines = [trimmed];
140
+ let depth = 0;
141
+ for (const ch of trimmed) {
142
+ if (ch === '(') {
143
+ depth++;
144
+ }
145
+ if (ch === ')') {
146
+ depth--;
147
+ }
148
+ }
149
+ let j = i + 1;
150
+ while (j < lines.length && depth > 0) {
151
+ const bLine = lines[j];
152
+ for (const ch of bLine) {
153
+ if (ch === '(') {
154
+ depth++;
155
+ }
156
+ if (ch === ')') {
157
+ depth--;
158
+ }
159
+ }
160
+ blockLines.push(bLine);
161
+ j++;
162
+ }
163
+ const block = blockLines.join('\n');
164
+ const target = parseTargetBlock(rule, block);
165
+ if (target) {
166
+ result.targets.push(target);
167
+ }
168
+ i = j;
169
+ continue;
170
+ }
171
+ i++;
172
+ }
173
+ return result;
174
+ }
175
+ // ── 内部解析函数 ────────────────────────────────────
176
+ function parseTargetBlock(rule, block) {
177
+ const nameMatch = block.match(NAME_RE);
178
+ if (!nameMatch) {
179
+ return null;
180
+ }
181
+ return {
182
+ rule,
183
+ name: nameMatch[1],
184
+ srcs: extractStringList(block, 'srcs'),
185
+ deps: extractDepLabels(block),
186
+ visibility: extractStringList(block, 'visibility'),
187
+ testonly: TESTONLY_RE.test(block) ? true : undefined,
188
+ };
189
+ }
190
+ function extractStringList(block, field) {
191
+ const listMatch = block.match(STRING_LIST_RE(field));
192
+ if (!listMatch) {
193
+ return [];
194
+ }
195
+ let inner = listMatch[1];
196
+ // 处理 glob() 模式
197
+ const globMatch = inner.match(GLOB_RE);
198
+ if (globMatch) {
199
+ inner = globMatch[1];
200
+ }
201
+ const items = [];
202
+ const strRe = /"([^"]+)"/g;
203
+ let m;
204
+ while ((m = strRe.exec(inner)) !== null) {
205
+ items.push(m[1]);
206
+ }
207
+ return items;
208
+ }
209
+ function extractDepLabels(block) {
210
+ const depsMatch = block.match(STRING_LIST_RE('deps'));
211
+ if (!depsMatch) {
212
+ return [];
213
+ }
214
+ const inner = depsMatch[1];
215
+ const deps = [];
216
+ const re = new RegExp(DEP_LABEL_RE.source, 'g');
217
+ let m;
218
+ while ((m = re.exec(inner)) !== null) {
219
+ deps.push(m[1]);
220
+ }
221
+ // 也捕获非标签格式的字符串依赖
222
+ const strRe = /"([^"]+)"/g;
223
+ while ((m = strRe.exec(inner)) !== null) {
224
+ if (!m[1].startsWith('//') && !m[1].startsWith(':') && !deps.includes(m[1])) {
225
+ deps.push(m[1]);
226
+ }
227
+ }
228
+ return deps;
229
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @module YamlConfigParser
3
+ * @description YAML 配置解析器 — 从 XcodeGen project.yml 中提取项目结构信息
4
+ *
5
+ * 支持解析:
6
+ * - targets(构建目标)及其依赖关系
7
+ * - settings(项目级/目标级构建设置)
8
+ * - schemes(构建方案)
9
+ * - sources(源文件路径)
10
+ *
11
+ * 使用 js-yaml 进行安全解析(禁用危险的 YAML 特性)。
12
+ */
13
+ import type { ParsedModuleSpec, ParsedProjectConfig } from './RubyDslParser.js';
14
+ /**
15
+ * 解析 XcodeGen project.yml 内容
16
+ * 返回与 RubyDslParser 兼容的 ParsedProjectConfig
17
+ */
18
+ export declare function parseXcodeGenProject(content: string): ParsedProjectConfig;
19
+ /**
20
+ * 解析单个 target 为 ParsedModuleSpec 格式
21
+ */
22
+ export declare function parseXcodeGenTarget(targetName: string, content: string): ParsedModuleSpec | null;
23
+ /**
24
+ * 提取所有 target 的依赖图
25
+ * 返回 [from, to][] 形式的有向边列表
26
+ */
27
+ export declare function extractXcodeGenDependencyEdges(content: string): Array<[string, string]>;
28
+ export interface ParsedMelosProject {
29
+ name: string;
30
+ packageGlobs: string[];
31
+ scripts: string[];
32
+ }
33
+ /**
34
+ * 解析 melos.yaml 内容
35
+ * 提取项目名、包路径 glob 模式、scripts 列表
36
+ */
37
+ export declare function parseMelosProject(content: string): ParsedMelosProject;
@@ -0,0 +1,212 @@
1
+ /**
2
+ * @module YamlConfigParser
3
+ * @description YAML 配置解析器 — 从 XcodeGen project.yml 中提取项目结构信息
4
+ *
5
+ * 支持解析:
6
+ * - targets(构建目标)及其依赖关系
7
+ * - settings(项目级/目标级构建设置)
8
+ * - schemes(构建方案)
9
+ * - sources(源文件路径)
10
+ *
11
+ * 使用 js-yaml 进行安全解析(禁用危险的 YAML 特性)。
12
+ */
13
+ import yaml from 'js-yaml';
14
+ // ── 目标类型 → 层级推断 ────────────────────────────────
15
+ const TARGET_TYPE_LAYER = {
16
+ application: 'App',
17
+ 'app-extension': 'Extension',
18
+ framework: 'Framework',
19
+ 'static-library': 'Library',
20
+ 'dynamic-library': 'Library',
21
+ bundle: 'Resource',
22
+ 'unit-test': 'Test',
23
+ 'ui-test': 'Test',
24
+ tool: 'Tool',
25
+ };
26
+ // ── 公开 API ────────────────────────────────────────
27
+ /**
28
+ * 解析 XcodeGen project.yml 内容
29
+ * 返回与 RubyDslParser 兼容的 ParsedProjectConfig
30
+ */
31
+ export function parseXcodeGenProject(content) {
32
+ let doc;
33
+ try {
34
+ doc = yaml.load(content, { schema: yaml.CORE_SCHEMA });
35
+ }
36
+ catch {
37
+ return { layers: [], globalDependencies: [] };
38
+ }
39
+ if (!doc || typeof doc !== 'object') {
40
+ return { layers: [], globalDependencies: [] };
41
+ }
42
+ const result = {
43
+ layers: [],
44
+ globalDependencies: [],
45
+ };
46
+ // 提取宿主应用
47
+ if (doc.name) {
48
+ result.hostApp = { name: doc.name, version: '0.0.0' };
49
+ }
50
+ if (!doc.targets) {
51
+ return result;
52
+ }
53
+ // 将 targets 按类型分层
54
+ const layerMap = new Map();
55
+ for (const [targetName, target] of Object.entries(doc.targets)) {
56
+ const targetType = target.type ?? 'framework';
57
+ const layerName = TARGET_TYPE_LAYER[targetType] ?? 'Other';
58
+ const isLocal = !isExternalTarget(targetName, doc);
59
+ const mod = {
60
+ name: targetName,
61
+ version: '0.0.0',
62
+ isLocal,
63
+ localPath: extractSourcePath(target),
64
+ group: layerName,
65
+ };
66
+ if (!layerMap.has(layerName)) {
67
+ layerMap.set(layerName, []);
68
+ }
69
+ layerMap.get(layerName)?.push(mod);
70
+ }
71
+ // 转为 ParsedLayer[]
72
+ let order = 0;
73
+ for (const [name, modules] of layerMap.entries()) {
74
+ result.layers.push({
75
+ name,
76
+ order: order++,
77
+ accessibleLayers: [],
78
+ modules,
79
+ });
80
+ }
81
+ // 提取 SPM packages → globalDependencies
82
+ if (doc.packages) {
83
+ for (const [pkgName, pkg] of Object.entries(doc.packages)) {
84
+ result.globalDependencies.push({
85
+ name: pkgName,
86
+ version: pkg.from ?? pkg.version ?? pkg.branch ?? '0.0.0',
87
+ isLocal: !!pkg.path,
88
+ localPath: pkg.path,
89
+ });
90
+ }
91
+ }
92
+ return result;
93
+ }
94
+ /**
95
+ * 解析单个 target 为 ParsedModuleSpec 格式
96
+ */
97
+ export function parseXcodeGenTarget(targetName, content) {
98
+ let doc;
99
+ try {
100
+ doc = yaml.load(content, { schema: yaml.CORE_SCHEMA });
101
+ }
102
+ catch {
103
+ return null;
104
+ }
105
+ if (!doc?.targets?.[targetName]) {
106
+ return null;
107
+ }
108
+ const target = doc.targets[targetName];
109
+ return {
110
+ name: targetName,
111
+ version: '0.0.0',
112
+ sources: extractSourcePath(target) ?? targetName,
113
+ dependencies: extractTargetDependencies(target),
114
+ publicHeaders: [],
115
+ deploymentTarget: extractDeploymentTarget(target),
116
+ };
117
+ }
118
+ /**
119
+ * 提取所有 target 的依赖图
120
+ * 返回 [from, to][] 形式的有向边列表
121
+ */
122
+ export function extractXcodeGenDependencyEdges(content) {
123
+ let doc;
124
+ try {
125
+ doc = yaml.load(content, { schema: yaml.CORE_SCHEMA });
126
+ }
127
+ catch {
128
+ return [];
129
+ }
130
+ if (!doc?.targets) {
131
+ return [];
132
+ }
133
+ const edges = [];
134
+ for (const [targetName, target] of Object.entries(doc.targets)) {
135
+ if (!target.dependencies) {
136
+ continue;
137
+ }
138
+ for (const dep of target.dependencies) {
139
+ const depName = dep.target ?? dep.framework ?? dep.package ?? dep.carthage;
140
+ if (depName) {
141
+ edges.push([targetName, depName]);
142
+ }
143
+ }
144
+ }
145
+ return edges;
146
+ }
147
+ // ── 内部帮助函数 ────────────────────────────────────
148
+ function extractSourcePath(target) {
149
+ if (!target.sources || target.sources.length === 0) {
150
+ return undefined;
151
+ }
152
+ const first = target.sources[0];
153
+ if (typeof first === 'string') {
154
+ return first;
155
+ }
156
+ return first.path;
157
+ }
158
+ function extractTargetDependencies(target) {
159
+ if (!target.dependencies) {
160
+ return [];
161
+ }
162
+ return target.dependencies
163
+ .map((dep) => dep.target ?? dep.framework ?? dep.package ?? dep.carthage)
164
+ .filter((name) => !!name);
165
+ }
166
+ function extractDeploymentTarget(target) {
167
+ if (!target.deploymentTarget) {
168
+ return undefined;
169
+ }
170
+ if (typeof target.deploymentTarget === 'string') {
171
+ return target.deploymentTarget;
172
+ }
173
+ // Object form: { iOS: "15.0", macOS: "12.0" }
174
+ const values = Object.values(target.deploymentTarget);
175
+ return values[0];
176
+ }
177
+ function isExternalTarget(targetName, doc) {
178
+ // SPM packages referenced as targets are external
179
+ if (doc.packages?.[targetName]) {
180
+ return true;
181
+ }
182
+ // Targets defined in the project are local
183
+ return false;
184
+ }
185
+ /**
186
+ * 解析 melos.yaml 内容
187
+ * 提取项目名、包路径 glob 模式、scripts 列表
188
+ */
189
+ export function parseMelosProject(content) {
190
+ const result = {
191
+ name: '',
192
+ packageGlobs: [],
193
+ scripts: [],
194
+ };
195
+ try {
196
+ const doc = yaml.load(content, { schema: yaml.CORE_SCHEMA });
197
+ if (!doc) {
198
+ return result;
199
+ }
200
+ result.name = doc.name ?? '';
201
+ if (Array.isArray(doc.packages)) {
202
+ result.packageGlobs = doc.packages.filter((p) => typeof p === 'string');
203
+ }
204
+ if (doc.scripts && typeof doc.scripts === 'object') {
205
+ result.scripts = Object.keys(doc.scripts);
206
+ }
207
+ }
208
+ catch {
209
+ // YAML 解析失败时返回空结果
210
+ }
211
+ return result;
212
+ }
@@ -9,8 +9,6 @@
9
9
  * 这是整个系统中维度定义的唯一来源。
10
10
  * Bootstrap / Panorama / Rescan / Dashboard 均从此模块消费维度元数据。
11
11
  *
12
- * 设计文档: docs/copilot/unified-dimension-design.md §4
13
- *
14
12
  * @module domain/dimension/DimensionRegistry
15
13
  */
16
14
  import type { DimensionId, UnifiedDimension } from './UnifiedDimension.js';
@@ -9,8 +9,6 @@
9
9
  * 这是整个系统中维度定义的唯一来源。
10
10
  * Bootstrap / Panorama / Rescan / Dashboard 均从此模块消费维度元数据。
11
11
  *
12
- * 设计文档: docs/copilot/unified-dimension-design.md §4
13
- *
14
12
  * @module domain/dimension/DimensionRegistry
15
13
  */
16
14
  // ═══════════════════════════════════════════════════════════