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
@@ -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
+ }
@@ -7,8 +7,8 @@
7
7
  *
8
8
  * ---
9
9
  * 使用方式:
10
- * import { DimensionCopy } from '../service/bootstrap/DimensionCopyRegistry.js';
11
- * const copy = DimensionCopy.get('code-pattern', 'python');
10
+ * import { DimensionCopy } from '#domain/dimension/DimensionCopy.js';
11
+ * const copy = DimensionCopy.get('design-patterns', 'python');
12
12
  * // → { label: '设计模式与代码惯例', guide: '装饰器/描述器/上下文管理器/生成器/ABC 抽象基类/Mixin 模式' }
13
13
  */
14
14
  export declare class DimensionCopy {
@@ -7,10 +7,11 @@
7
7
  *
8
8
  * ---
9
9
  * 使用方式:
10
- * import { DimensionCopy } from '../service/bootstrap/DimensionCopyRegistry.js';
11
- * const copy = DimensionCopy.get('code-pattern', 'python');
10
+ * import { DimensionCopy } from '#domain/dimension/DimensionCopy.js';
11
+ * const copy = DimensionCopy.get('design-patterns', 'python');
12
12
  * // → { label: '设计模式与代码惯例', guide: '装饰器/描述器/上下文管理器/生成器/ABC 抽象基类/Mixin 模式' }
13
13
  */
14
+ import { getDimension } from './DimensionRegistry.js';
14
15
  // ═══════════════════════════════════════════════════════════
15
16
  // 语言族定义
16
17
  // ═══════════════════════════════════════════════════════════
@@ -45,11 +46,7 @@ function _langFamily(lang) {
45
46
  */
46
47
  const COPY_REGISTRY = {
47
48
  // ── ① 代码规范 ──────────────────────────────────────
48
- 'code-standard': {
49
- _default: {
50
- label: '代码规范',
51
- guide: '命名约定、注释风格、文件组织规范、代码格式化标准',
52
- },
49
+ 'coding-standards': {
53
50
  apple: {
54
51
  label: '代码规范',
55
52
  guide: '命名约定(类名前缀/方法签名风格/API 命名)、注释风格(语言/格式/MARK 分段)、文件组织规范',
@@ -80,11 +77,7 @@ const COPY_REGISTRY = {
80
77
  },
81
78
  },
82
79
  // ── ② 设计模式与代码惯例 ─────────────────────────────
83
- 'code-pattern': {
84
- _default: {
85
- label: '设计模式与代码惯例',
86
- guide: '单例/工厂/观察者/策略/Builder 等设计模式在项目中的使用方式',
87
- },
80
+ 'design-patterns': {
88
81
  apple: {
89
82
  label: '设计模式与代码惯例',
90
83
  guide: '单例/委托/Category·Extension/工厂/Builder/观察者/Coordinator 模式、继承关系',
@@ -116,10 +109,6 @@ const COPY_REGISTRY = {
116
109
  },
117
110
  // ── ③ 架构模式 ──────────────────────────────────────
118
111
  architecture: {
119
- _default: {
120
- label: '架构模式',
121
- guide: '分层架构、模块职责与边界、依赖图、导入约束规则',
122
- },
123
112
  apple: {
124
113
  label: '架构模式',
125
114
  guide: '分层架构(MVVM/VIPER/TCA)、Package/Target 模块边界、依赖图、import 约束规则',
@@ -149,12 +138,8 @@ const COPY_REGISTRY = {
149
138
  guide: '分层架构、Workspace/crate 边界、pub/pub(crate) 可见性、trait object 抽象层',
150
139
  },
151
140
  },
152
- // ── ④ 最佳实践 ──────────────────────────────────────
153
- 'best-practice': {
154
- _default: {
155
- label: '最佳实践',
156
- guide: '错误处理、并发安全、资源管理、日志规范、测试模式',
157
- },
141
+ // ── ④ 错误韧性 ──────────────────────────────────────
142
+ 'error-resilience': {
158
143
  apple: {
159
144
  label: '最佳实践',
160
145
  guide: '错误处理、并发安全(Swift Concurrency/GCD)、内存管理(ARC/weak/unowned)、日志规范、XCTest 模式',
@@ -184,12 +169,8 @@ const COPY_REGISTRY = {
184
169
  guide: '错误处理(Result/? 操作符/thiserror)、并发安全(Send+Sync/Arc/Mutex)、生命周期管理、日志(tracing)、#[test] 模式',
185
170
  },
186
171
  },
187
- // ── ⑤ 事件与数据流 ─────────────────────────────────
188
- 'event-and-data-flow': {
189
- _default: {
190
- label: '事件与数据流',
191
- guide: '事件传播机制、状态管理模式、数据流向追踪',
192
- },
172
+ // ── ⑤ 数据与事件流 ─────────────────────────────────
173
+ 'data-event-flow': {
193
174
  apple: {
194
175
  label: '事件与数据流',
195
176
  guide: '事件传播(Delegate/Notification/Block·Closure/Target-Action)、数据状态管理(KVO/属性观察/Combine/SwiftUI State)',
@@ -219,47 +200,8 @@ const COPY_REGISTRY = {
219
200
  guide: '事件传播(tokio channel/crossbeam-channel)、Stream trait、Actor 模式(Actix)、状态管理(Arc<RwLock<T>>)',
220
201
  },
221
202
  },
222
- // ── ⑥ 项目特征 ──────────────────────────────────────
223
- 'project-profile': {
224
- _default: {
225
- label: '项目特征',
226
- guide: '技术栈、目录结构、三方依赖枚举与用途、基础设施服务注册表',
227
- },
228
- apple: {
229
- label: '项目特征',
230
- guide: '技术栈、目录结构、三方依赖枚举与用途、Extension/Category 分类聚合、自定义基类层级与全局定义(宏/typealias/PCH)、系统事件 hook 与生命周期入口、基础设施服务注册表、Runtime 与语言互操作',
231
- },
232
- js: {
233
- label: '项目特征',
234
- guide: '技术栈(框架/构建工具/包管理器)、目录结构、三方依赖枚举与用途、monorepo 配置、环境变量与配置注入、CI/CD 管线',
235
- },
236
- jvm: {
237
- label: '项目特征',
238
- guide: '技术栈(Spring/Android/Ktor)、module 结构、三方依赖枚举与用途、构建配置(Gradle/Maven)、Profile 环境管理、基础设施服务',
239
- },
240
- python: {
241
- label: '项目特征',
242
- guide: '技术栈(Django/FastAPI/Flask)、包结构、三方依赖枚举与用途、pyproject.toml/setup.cfg 配置、虚拟环境管理',
243
- },
244
- go: {
245
- label: '项目特征',
246
- guide: '技术栈、module 结构、go.mod 依赖枚举与用途、internal 包组织、build tags、Makefile 构建',
247
- },
248
- dart: {
249
- label: '项目特征',
250
- guide: '技术栈(Flutter/Dart Server/CLI)、目录结构(lib/src 分层)、pubspec.yaml 依赖枚举与用途、平台通道(MethodChannel/FFI)、Flavors/多环境配置',
251
- },
252
- rust: {
253
- label: '项目特征',
254
- guide: '技术栈、Workspace/crate 结构、Cargo.toml 依赖枚举与用途、feature flags、#[cfg] 条件编译',
255
- },
256
- },
257
- // ── ⑦ Agent 开发注意事项 ─────────────────────────────
203
+ // ── ⑥ Agent 开发注意事项 ─────────────────────────────
258
204
  'agent-guidelines': {
259
- _default: {
260
- label: 'Agent 开发注意事项',
261
- guide: '三大核心原则(严谨性/深度特征挖掘/完整性)、命名强制、并发安全、资源管理、已废弃 API 标记、架构约束注释、TODO/FIXME',
262
- },
263
205
  apple: {
264
206
  label: 'Agent 开发注意事项',
265
207
  guide: '三大核心原则(严谨性/深度特征挖掘/完整性)、命名强制、线程安全、内存约束、已废弃 API 标记、架构约束注释、TODO/FIXME',
@@ -302,11 +244,19 @@ export class DimensionCopy {
302
244
  */
303
245
  static get(dimId, lang) {
304
246
  const entry = COPY_REGISTRY[dimId];
305
- if (!entry) {
306
- return null;
247
+ if (entry) {
248
+ const family = _langFamily(lang);
249
+ const match = entry[family] || entry[lang];
250
+ if (match) {
251
+ return match;
252
+ }
253
+ }
254
+ // 回退到 Registry 元数据(消除 _default 双源)
255
+ const dim = getDimension(dimId);
256
+ if (dim) {
257
+ return { label: dim.label, guide: dim.extractionGuide };
307
258
  }
308
- const family = _langFamily(lang);
309
- return entry[family] || entry[lang] || entry._default || null;
259
+ return null;
310
260
  }
311
261
  /**
312
262
  * 批量为维度数组注入语言差异化文案(单语言版本)