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.
- package/dashboard/dist/assets/icons-FHns2ypa.js +1 -0
- package/dashboard/dist/assets/index-BRJv5Y3r.js +135 -0
- package/dashboard/dist/assets/index-DzoB7kxK.css +1 -0
- package/dashboard/dist/index.html +3 -3
- package/dist/bin/api-server.js +1 -0
- package/dist/bin/cli.d.ts +1 -0
- package/dist/bin/cli.js +137 -9
- package/dist/lib/agent/AgentFactory.d.ts +0 -17
- package/dist/lib/agent/AgentFactory.js +1 -25
- package/dist/lib/agent/AgentRuntime.d.ts +2 -2
- package/dist/lib/agent/AgentRuntime.js +26 -18
- package/dist/lib/agent/capabilities.d.ts +11 -0
- package/dist/lib/agent/capabilities.js +29 -5
- package/dist/lib/agent/context/ExplorationTracker.js +10 -1
- package/dist/lib/agent/context/exploration/ExplorationStrategies.d.ts +2 -0
- package/dist/lib/agent/context/exploration/ExplorationStrategies.js +2 -2
- package/dist/lib/agent/domain/ChatAgentTasks.js +4 -0
- package/dist/lib/agent/domain/insight-analyst.d.ts +47 -3
- package/dist/lib/agent/domain/insight-analyst.js +111 -11
- package/dist/lib/agent/domain/insight-evolver.d.ts +69 -0
- package/dist/lib/agent/domain/insight-evolver.js +230 -0
- package/dist/lib/agent/domain/insight-gate.d.ts +42 -0
- package/dist/lib/agent/domain/insight-gate.js +41 -0
- package/dist/lib/agent/domain/insight-producer.d.ts +27 -2
- package/dist/lib/agent/domain/insight-producer.js +60 -5
- package/dist/lib/agent/domain/scan-prompts.js +10 -7
- package/dist/lib/agent/forced-summary.js +7 -2
- package/dist/lib/agent/memory/ActiveContext.d.ts +2 -28
- package/dist/lib/agent/memory/MemoryCoordinator.d.ts +2 -2
- package/dist/lib/agent/memory/SessionStore.d.ts +6 -12
- package/dist/lib/agent/memory/SessionStore.js +9 -15
- package/dist/lib/agent/memory/memory-flush-contract.d.ts +49 -0
- package/dist/lib/agent/memory/memory-flush-contract.js +16 -0
- package/dist/lib/agent/memory/session-store-schema.d.ts +20 -0
- package/dist/lib/agent/memory/session-store-schema.js +41 -0
- package/dist/lib/agent/presets.d.ts +89 -1
- package/dist/lib/agent/presets.js +53 -5
- package/dist/lib/agent/tools/_shared.d.ts +7 -15
- package/dist/lib/agent/tools/_shared.js +20 -21
- package/dist/lib/agent/tools/composite.d.ts +25 -22
- package/dist/lib/agent/tools/composite.js +108 -109
- package/dist/lib/agent/tools/evolution-tools.d.ts +145 -0
- package/dist/lib/agent/tools/evolution-tools.js +161 -0
- package/dist/lib/agent/tools/index.d.ts +163 -92
- package/dist/lib/agent/tools/index.js +9 -1
- package/dist/lib/agent/tools/lifecycle.d.ts +7 -1
- package/dist/lib/agent/tools/lifecycle.js +59 -75
- package/dist/lib/cli/AiScanService.js +5 -5
- package/dist/lib/cli/KnowledgeSyncService.js +1 -1
- package/dist/lib/core/AstAnalyzer.d.ts +1 -0
- package/dist/lib/core/discovery/ConfigWatcher.d.ts +64 -0
- package/dist/lib/core/discovery/ConfigWatcher.js +336 -0
- package/dist/lib/core/discovery/CustomConfigDiscoverer.d.ts +30 -0
- package/dist/lib/core/discovery/CustomConfigDiscoverer.js +1305 -0
- package/dist/lib/core/discovery/DiscovererPreference.d.ts +44 -0
- package/dist/lib/core/discovery/DiscovererPreference.js +141 -0
- package/dist/lib/core/discovery/DiscovererRegistry.d.ts +10 -1
- package/dist/lib/core/discovery/DiscovererRegistry.js +42 -2
- package/dist/lib/core/discovery/ProjectDiscoverer.d.ts +19 -0
- package/dist/lib/core/discovery/index.d.ts +2 -0
- package/dist/lib/core/discovery/index.js +4 -0
- package/dist/lib/core/discovery/parsers/CMakeParser.d.ts +32 -0
- package/dist/lib/core/discovery/parsers/CMakeParser.js +148 -0
- package/dist/lib/core/discovery/parsers/GradleDslParser.d.ts +43 -0
- package/dist/lib/core/discovery/parsers/GradleDslParser.js +171 -0
- package/dist/lib/core/discovery/parsers/JsonConfigParser.d.ts +45 -0
- package/dist/lib/core/discovery/parsers/JsonConfigParser.js +122 -0
- package/dist/lib/core/discovery/parsers/RubyDslParser.d.ts +49 -0
- package/dist/lib/core/discovery/parsers/RubyDslParser.js +282 -0
- package/dist/lib/core/discovery/parsers/StarlarkParser.d.ts +33 -0
- package/dist/lib/core/discovery/parsers/StarlarkParser.js +229 -0
- package/dist/lib/core/discovery/parsers/YamlConfigParser.d.ts +37 -0
- package/dist/lib/core/discovery/parsers/YamlConfigParser.js +212 -0
- package/dist/lib/{service/bootstrap/DimensionCopyRegistry.d.ts → domain/dimension/DimensionCopy.d.ts} +2 -2
- package/dist/lib/{service/bootstrap/DimensionCopyRegistry.js → domain/dimension/DimensionCopy.js} +22 -72
- package/dist/lib/domain/dimension/DimensionRegistry.d.ts +54 -0
- package/dist/lib/domain/dimension/DimensionRegistry.js +620 -0
- package/dist/lib/domain/dimension/DimensionSop.d.ts +55 -0
- package/dist/lib/domain/dimension/DimensionSop.js +1604 -0
- package/dist/lib/domain/dimension/UnifiedDimension.d.ts +61 -0
- package/dist/lib/domain/dimension/UnifiedDimension.js +53 -0
- package/dist/lib/domain/dimension/index.d.ts +10 -0
- package/dist/lib/domain/dimension/index.js +9 -0
- package/dist/lib/domain/knowledge/FieldSpec.d.ts +1 -1
- package/dist/lib/domain/knowledge/FieldSpec.js +29 -16
- package/dist/lib/domain/knowledge/KnowledgeEntry.d.ts +40 -112
- package/dist/lib/domain/knowledge/KnowledgeEntry.js +44 -9
- package/dist/lib/domain/knowledge/KnowledgeRepository.d.ts +1 -0
- package/dist/lib/domain/knowledge/KnowledgeRepository.js +3 -0
- package/dist/lib/domain/knowledge/Lifecycle.js +1 -1
- package/dist/lib/domain/knowledge/StyleGuide.d.ts +1 -1
- package/dist/lib/domain/knowledge/StyleGuide.js +1 -1
- package/dist/lib/domain/knowledge/UnifiedValidator.js +15 -0
- package/dist/lib/external/ai/AiProvider.d.ts +12 -0
- package/dist/lib/external/ai/AiProvider.js +24 -0
- package/dist/lib/external/ai/AiProviderManager.d.ts +101 -0
- package/dist/lib/external/ai/AiProviderManager.js +193 -0
- package/dist/lib/external/ai/providers/ClaudeProvider.js +11 -0
- package/dist/lib/external/ai/providers/GoogleGeminiProvider.js +18 -0
- package/dist/lib/external/ai/providers/MockProvider.d.ts +21 -3
- package/dist/lib/external/ai/providers/MockProvider.js +290 -14
- package/dist/lib/external/ai/providers/OpenAiProvider.js +16 -0
- package/dist/lib/external/lark/LarkTransport.d.ts +5 -1
- package/dist/lib/external/lark/LarkTransport.js +10 -2
- package/dist/lib/external/mcp/McpServer.js +4 -0
- package/dist/lib/external/mcp/handlers/TargetClassifier.d.ts +1 -1
- package/dist/lib/external/mcp/handlers/bootstrap/BootstrapSession.d.ts +8 -16
- package/dist/lib/external/mcp/handlers/bootstrap/BootstrapSession.js +10 -10
- package/dist/lib/external/mcp/handlers/bootstrap/ExternalSubmissionTracker.d.ts +7 -0
- package/dist/lib/external/mcp/handlers/bootstrap/ExternalSubmissionTracker.js +20 -0
- package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.d.ts +52 -132
- package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.js +204 -17
- package/dist/lib/external/mcp/handlers/bootstrap/base-dimensions.d.ts +11 -75
- package/dist/lib/external/mcp/handlers/bootstrap/base-dimensions.js +40 -191
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-configs.d.ts +13 -78
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-configs.js +30 -52
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/dimension-context.d.ts +0 -1
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/mock-pipeline.d.ts +20 -0
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/mock-pipeline.js +432 -0
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.d.ts +99 -12
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +188 -169
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/tier-scheduler.js +7 -17
- package/dist/lib/external/mcp/handlers/bootstrap/refine.js +8 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/async-fill-helpers.d.ts +46 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/async-fill-helpers.js +58 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/audit-helpers.d.ts +25 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/audit-helpers.js +47 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.d.ts +50 -12
- package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.js +30 -10
- package/dist/lib/external/mcp/handlers/bootstrap/shared/dimension-text.js +1 -1
- package/dist/lib/external/mcp/handlers/bootstrap/shared/handler-types.d.ts +24 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/handler-types.js +14 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/panorama-utils.d.ts +14 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/panorama-utils.js +48 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/session-helpers.d.ts +21 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/session-helpers.js +45 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/skill-generator.d.ts +1 -1
- package/dist/lib/external/mcp/handlers/bootstrap/shared/target-file-map.d.ts +27 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/target-file-map.js +44 -0
- package/dist/lib/external/mcp/handlers/bootstrap-external.d.ts +23 -10
- package/dist/lib/external/mcp/handlers/bootstrap-external.js +41 -51
- package/dist/lib/external/mcp/handlers/bootstrap-internal.d.ts +2 -0
- package/dist/lib/external/mcp/handlers/bootstrap-internal.js +117 -82
- package/dist/lib/external/mcp/handlers/consolidated.d.ts +4 -4
- package/dist/lib/external/mcp/handlers/consolidated.js +108 -332
- package/dist/lib/external/mcp/handlers/dimension-complete-external.js +71 -2
- package/dist/lib/external/mcp/handlers/evolve-external.d.ts +54 -0
- package/dist/lib/external/mcp/handlers/evolve-external.js +229 -0
- package/dist/lib/external/mcp/handlers/knowledge.js +30 -5
- package/dist/lib/external/mcp/handlers/rescan-external.d.ts +76 -0
- package/dist/lib/external/mcp/handlers/rescan-external.js +335 -0
- package/dist/lib/external/mcp/handlers/rescan-internal.d.ts +120 -0
- package/dist/lib/external/mcp/handlers/rescan-internal.js +359 -0
- package/dist/lib/external/mcp/handlers/search.d.ts +6 -5
- package/dist/lib/external/mcp/handlers/search.js +6 -5
- package/dist/lib/external/mcp/handlers/types.d.ts +2 -1
- package/dist/lib/external/mcp/handlers/wiki-external.js +2 -2
- package/dist/lib/external/mcp/tools.d.ts +8 -18
- package/dist/lib/external/mcp/tools.js +58 -2
- package/dist/lib/http/routes/ai.js +111 -30
- package/dist/lib/http/routes/candidates.js +11 -4
- package/dist/lib/http/routes/commands.js +10 -1
- package/dist/lib/http/routes/health.js +11 -0
- package/dist/lib/http/routes/knowledge.js +122 -1
- package/dist/lib/http/routes/modules.js +52 -3
- package/dist/lib/http/routes/panorama.js +16 -4
- package/dist/lib/http/routes/recipes.js +7 -0
- package/dist/lib/http/utils/routeHelpers.js +2 -1
- package/dist/lib/infrastructure/cache/CacheCoordinator.d.ts +41 -0
- package/dist/lib/infrastructure/cache/CacheCoordinator.js +105 -0
- package/dist/lib/infrastructure/database/migrations/006_lifecycle_transition_events.d.ts +7 -0
- package/dist/lib/infrastructure/database/migrations/006_lifecycle_transition_events.js +28 -0
- package/dist/lib/infrastructure/vector/HnswVectorAdapter.js +1 -1
- package/dist/lib/injection/ServiceContainer.d.ts +6 -5
- package/dist/lib/injection/ServiceContainer.js +64 -25
- package/dist/lib/injection/ServiceMap.d.ts +10 -1
- package/dist/lib/injection/modules/AiModule.d.ts +6 -9
- package/dist/lib/injection/modules/AiModule.js +82 -39
- package/dist/lib/injection/modules/KnowledgeModule.js +15 -1
- package/dist/lib/injection/modules/PanoramaModule.js +1 -1
- package/dist/lib/repository/knowledge/KnowledgeRepository.impl.d.ts +4 -0
- package/dist/lib/repository/knowledge/KnowledgeRepository.impl.js +16 -1
- package/dist/lib/service/bootstrap/BootstrapEventEmitter.d.ts +3 -2
- package/dist/lib/service/bootstrap/BootstrapEventEmitter.js +1 -1
- package/dist/lib/service/bootstrap/DeliveryVerifier.d.ts +51 -0
- package/dist/lib/service/bootstrap/DeliveryVerifier.js +163 -0
- package/dist/lib/service/bootstrap/UiStartupTasks.d.ts +5 -0
- package/dist/lib/service/bootstrap/UiStartupTasks.js +20 -0
- package/dist/lib/service/bootstrap/bootstrap-event-types.d.ts +54 -0
- package/dist/lib/service/bootstrap/bootstrap-event-types.js +10 -0
- package/dist/lib/service/cleanup/CleanupService.d.ts +132 -0
- package/dist/lib/service/cleanup/CleanupService.js +571 -0
- package/dist/lib/service/delivery/AgentInstructionsGenerator.js +39 -43
- package/dist/lib/service/delivery/FileProtection.d.ts +20 -0
- package/dist/lib/service/delivery/FileProtection.js +54 -0
- package/dist/lib/service/delivery/SkillsSyncer.js +16 -21
- package/dist/lib/service/evolution/ContentPatcher.d.ts +44 -0
- package/dist/lib/service/evolution/ContentPatcher.js +310 -0
- package/dist/lib/service/evolution/ProposalExecutor.d.ts +4 -0
- package/dist/lib/service/evolution/ProposalExecutor.js +77 -13
- package/dist/lib/service/evolution/RecipeLifecycleSupervisor.d.ts +64 -0
- package/dist/lib/service/evolution/RecipeLifecycleSupervisor.js +458 -0
- package/dist/lib/service/evolution/RecipeRelevanceAuditor.d.ts +89 -0
- package/dist/lib/service/evolution/RecipeRelevanceAuditor.js +492 -0
- package/dist/lib/service/evolution/createSupersedeProposal.d.ts +44 -0
- package/dist/lib/service/evolution/createSupersedeProposal.js +81 -0
- package/dist/lib/service/guard/ComplianceReporter.d.ts +4 -0
- package/dist/lib/service/guard/ComplianceReporter.js +51 -0
- package/dist/lib/service/guard/GuardCheckEngine.js +5 -4
- package/dist/lib/service/knowledge/CodeEntityGraph.d.ts +6 -0
- package/dist/lib/service/knowledge/CodeEntityGraph.js +16 -0
- package/dist/lib/service/knowledge/ConfidenceRouter.js +1 -1
- package/dist/lib/service/knowledge/KnowledgeService.d.ts +11 -1
- package/dist/lib/service/knowledge/KnowledgeService.js +67 -14
- package/dist/lib/service/knowledge/RecipeProductionGateway.d.ts +225 -0
- package/dist/lib/service/knowledge/RecipeProductionGateway.js +384 -0
- package/dist/lib/service/module/ModuleService.js +10 -19
- package/dist/lib/service/panorama/CouplingAnalyzer.d.ts +10 -1
- package/dist/lib/service/panorama/CouplingAnalyzer.js +44 -2
- package/dist/lib/service/panorama/DimensionAnalyzer.d.ts +4 -3
- package/dist/lib/service/panorama/DimensionAnalyzer.js +40 -151
- package/dist/lib/service/panorama/LayerInferrer.d.ts +16 -1
- package/dist/lib/service/panorama/LayerInferrer.js +118 -1
- package/dist/lib/service/panorama/ModuleDiscoverer.d.ts +9 -0
- package/dist/lib/service/panorama/ModuleDiscoverer.js +58 -2
- package/dist/lib/service/panorama/PanoramaAggregator.d.ts +6 -2
- package/dist/lib/service/panorama/PanoramaAggregator.js +84 -6
- package/dist/lib/service/panorama/PanoramaScanner.js +28 -0
- package/dist/lib/service/panorama/PanoramaService.js +10 -5
- package/dist/lib/service/panorama/PanoramaTypes.d.ts +38 -0
- package/dist/lib/service/panorama/RoleRefiner.d.ts +2 -0
- package/dist/lib/service/panorama/RoleRefiner.js +41 -0
- package/dist/lib/service/panorama/TechStackProfiler.d.ts +13 -0
- package/dist/lib/service/panorama/TechStackProfiler.js +191 -0
- package/dist/lib/service/search/BM25Scorer.d.ts +2 -2
- package/dist/lib/service/search/SearchEngine.d.ts +11 -10
- package/dist/lib/service/search/SearchEngine.js +38 -36
- package/dist/lib/service/search/SearchTypes.d.ts +14 -8
- package/dist/lib/service/search/SearchTypes.js +1 -1
- package/dist/lib/service/search/tokenizer.d.ts +1 -1
- package/dist/lib/service/search/tokenizer.js +2 -2
- package/dist/lib/service/skills/SignalCollector.d.ts +1 -0
- package/dist/lib/service/skills/SignalCollector.js +6 -5
- package/dist/lib/service/vector/ContextualEnricher.d.ts +1 -0
- package/dist/lib/service/vector/ContextualEnricher.js +4 -0
- package/dist/lib/shared/LanguageService.js +3 -0
- package/dist/lib/shared/developer-identity.d.ts +18 -0
- package/dist/lib/shared/developer-identity.js +62 -0
- package/dist/lib/shared/schemas/common.d.ts +4 -4
- package/dist/lib/shared/schemas/http-requests.d.ts +20 -18
- package/dist/lib/shared/schemas/http-requests.js +17 -6
- package/dist/lib/shared/schemas/mcp-tools.d.ts +32 -2
- package/dist/lib/shared/schemas/mcp-tools.js +38 -0
- package/dist/lib/types/evolution.d.ts +135 -0
- package/dist/lib/types/evolution.js +6 -0
- package/dist/lib/types/graph-shared.d.ts +25 -0
- package/dist/lib/types/graph-shared.js +7 -0
- package/dist/lib/types/knowledge-wire.d.ts +132 -0
- package/dist/lib/types/knowledge-wire.js +7 -0
- package/dist/lib/types/project-snapshot-builder.d.ts +19 -0
- package/dist/lib/types/project-snapshot-builder.js +189 -0
- package/dist/lib/types/project-snapshot.d.ts +399 -0
- package/dist/lib/types/project-snapshot.js +17 -0
- package/dist/lib/types/search-wire.d.ts +46 -0
- package/dist/lib/types/search-wire.js +7 -0
- package/dist/lib/types/snapshot-views.d.ts +58 -0
- package/dist/lib/types/snapshot-views.js +103 -0
- package/package.json +1 -1
- package/skills/autosnippet-recipes/SKILL.md +1 -1
- package/templates/instructions/agent-static.md +2 -0
- package/templates/instructions/conventions.md +3 -1
- package/templates/recipes-setup/README.md +2 -2
- package/dashboard/dist/assets/icons-BJ2mUBi8.js +0 -1
- package/dashboard/dist/assets/index-B659K9t5.js +0 -128
- package/dashboard/dist/assets/index-NCm40PMD.css +0 -1
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/noAiFallback.d.ts +0 -169
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/noAiFallback.js +0 -727
- package/dist/lib/external/mcp/handlers/bootstrap/shared/dimension-sop.d.ts +0 -370
- package/dist/lib/external/mcp/handlers/bootstrap/shared/dimension-sop.js +0 -821
|
@@ -0,0 +1,1604 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DimensionSop — 维度分析 SOP(Standard Operating Procedure)
|
|
3
|
+
*
|
|
4
|
+
* 每个维度定义 3 个自定义分析阶段 + 自动生成的提交阶段。
|
|
5
|
+
* Builder 模式消除 Phase 4 重复 & 共享质量检查清单。
|
|
6
|
+
*/
|
|
7
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
8
|
+
// Shared Constants
|
|
9
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
10
|
+
/** Phase 4 共享质量检查项(与 PRE_SUBMIT_CHECKLIST 互补,非重复) */
|
|
11
|
+
const SHARED_SUBMIT_CHECKLIST = [
|
|
12
|
+
'**数量由证据决定** — 有几条扎实证据就提交几条,不凑数;若本维度在项目中无实质内容则跳过,提交 0 条',
|
|
13
|
+
'content 包含 ✅ 正确写法 和 ❌ 禁止写法(如适用)',
|
|
14
|
+
'coreCode 是可复制的完整代码骨架',
|
|
15
|
+
'doClause 英文祈使句,以动词开头',
|
|
16
|
+
'引用具体的文件路径和代码行',
|
|
17
|
+
];
|
|
18
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
19
|
+
// Builder
|
|
20
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
21
|
+
/** 从紧凑定义生成消费者兼容的完整 SOP 对象 */
|
|
22
|
+
function _sop(def) {
|
|
23
|
+
const steps = def.phases.map((p, i) => ({
|
|
24
|
+
phase: `${i + 1}. ${p.name}`,
|
|
25
|
+
action: p.action,
|
|
26
|
+
expectedOutput: p.output,
|
|
27
|
+
...(p.tools ? { tools: [...p.tools] } : {}),
|
|
28
|
+
}));
|
|
29
|
+
steps.push({
|
|
30
|
+
phase: `${steps.length + 1}. 提交`,
|
|
31
|
+
action: def.submitAction,
|
|
32
|
+
qualityChecklist: [...SHARED_SUBMIT_CHECKLIST, ...(def.submitExtras ?? [])],
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
...(def.keywords ? { focusKeywords: [...def.keywords] } : {}),
|
|
36
|
+
steps,
|
|
37
|
+
timeEstimate: '1-5 min',
|
|
38
|
+
commonMistakes: [...def.mistakes],
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
42
|
+
// ┌──────────────────────────────────────────────┐
|
|
43
|
+
// │ Universal Dimensions (13) │
|
|
44
|
+
// └──────────────────────────────────────────────┘
|
|
45
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
46
|
+
const COMPACT_SOPS = {
|
|
47
|
+
// ──────────────────────────────────────────────
|
|
48
|
+
// 1. coding-standards — 命名/注释/文件组织/代码风格
|
|
49
|
+
// ──────────────────────────────────────────────
|
|
50
|
+
'coding-standards': {
|
|
51
|
+
keywords: [
|
|
52
|
+
'命名约定',
|
|
53
|
+
'类名前缀',
|
|
54
|
+
'方法签名',
|
|
55
|
+
'注释风格',
|
|
56
|
+
'文件组织',
|
|
57
|
+
'camelCase',
|
|
58
|
+
'PascalCase',
|
|
59
|
+
'snake_case',
|
|
60
|
+
'MARK',
|
|
61
|
+
'access control',
|
|
62
|
+
'import 排序',
|
|
63
|
+
'缩进',
|
|
64
|
+
'代码规范',
|
|
65
|
+
],
|
|
66
|
+
phases: [
|
|
67
|
+
{
|
|
68
|
+
name: '命名体系扫描',
|
|
69
|
+
action: '搜索项目中类/协议/结构体的定义语句,统计类名前缀后缀模式(如 BD/XY 前缀、ViewModel/Service/Repository 后缀)、方法命名风格(动词开头 vs 名词短语)、变量命名约定(camelCase/snake_case)、常量命名方式',
|
|
70
|
+
output: '项目命名体系全景:类名模式、方法名惯例、变量/常量命名约定、文件名与类名的对应关系',
|
|
71
|
+
tools: [
|
|
72
|
+
'grep_search 搜索 class/struct/protocol/interface/enum 定义',
|
|
73
|
+
'浏览核心目录文件列表观察文件命名规律',
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: '规范一致性验证',
|
|
78
|
+
action: '跨模块选取核心文件(覆盖不同功能区域),逐一阅读,验证:命名模式是否全局一致、注释风格(MARK 段落/文档注释格式/行内注释习惯)、文件内代码组织顺序(属性→初始化→公开方法→私有方法)、import 排列规则(系统框架/第三方/项目内 分组情况)、access control 使用惯例(public/internal/private/fileprivate 的选择策略)',
|
|
79
|
+
output: '每条规范有跨模块证据支撑,含具体 文件名:行号 引用',
|
|
80
|
+
tools: ['read_file 逐个阅读不同模块的代表性文件'],
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: '偏差与例外检测',
|
|
84
|
+
action: '搜索偏离主流命名体系的代码(不同前缀、不同命名风格、不同文件组织方式),区分"历史遗留"、"第三方适配"和"有意的例外设计"',
|
|
85
|
+
output: '偏差清单及其成因分类 — 判断哪些是要遵循的规范、哪些是要避免的旧写法',
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
submitAction: '每种规范独立提交候选(**按实际发现提交,无实质内容则跳过本维度**),每个候选聚焦一种具体代码规范',
|
|
89
|
+
submitExtras: [
|
|
90
|
+
'每个候选聚焦单一规范维度(命名约定、注释风格、文件组织、import 规则、access control 分别独立)',
|
|
91
|
+
],
|
|
92
|
+
mistakes: [
|
|
93
|
+
'不要只看一两个文件就归纳规范 — 必须跨模块验证一致性,以偏概全是最常见错误',
|
|
94
|
+
'不要合并不同层次的规范 — "类名前缀"、"方法命名风格"、"文件内代码组织"各自独立成条',
|
|
95
|
+
'不要写空泛规范如 "use camelCase" — 必须写明项目特有的前缀/后缀/风格及其适用范围',
|
|
96
|
+
'不要遗漏 access control 约定和 import 排列规则 — 这些是高频编码动作,对一致性影响大',
|
|
97
|
+
'【跨维度边界】coding-standards 只关注命名/注释/文件组织/代码风格 — 设计模式归 design-patterns,分层架构归 architecture',
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
// ──────────────────────────────────────────────
|
|
101
|
+
// 2. design-patterns — 设计模式的使用与实现
|
|
102
|
+
// ──────────────────────────────────────────────
|
|
103
|
+
'design-patterns': {
|
|
104
|
+
keywords: [
|
|
105
|
+
'Singleton',
|
|
106
|
+
'Factory',
|
|
107
|
+
'Delegate',
|
|
108
|
+
'Observer',
|
|
109
|
+
'Builder',
|
|
110
|
+
'Repository',
|
|
111
|
+
'Strategy',
|
|
112
|
+
'Coordinator',
|
|
113
|
+
'Adapter',
|
|
114
|
+
'设计模式',
|
|
115
|
+
'工厂',
|
|
116
|
+
'单例',
|
|
117
|
+
'代理',
|
|
118
|
+
'Protocol',
|
|
119
|
+
'接口',
|
|
120
|
+
'shared',
|
|
121
|
+
'default',
|
|
122
|
+
'make',
|
|
123
|
+
'create',
|
|
124
|
+
],
|
|
125
|
+
phases: [
|
|
126
|
+
{
|
|
127
|
+
name: '模式发现',
|
|
128
|
+
action: '搜索项目中设计模式的典型信号:Singleton(shared/default/instance), Factory(create/make/build), Delegate(delegate/dataSource), Observer(listener/subscribe/on), Repository(repository/store/dao), Coordinator(coordinator/router/navigator), Strategy(protocol+多实现), Builder(builder/configure)',
|
|
129
|
+
output: '项目设计模式全景图:每种模式的使用位置、频率、变体形式',
|
|
130
|
+
tools: [
|
|
131
|
+
'grep_search 搜索 shared/default/create/make/delegate/subscribe 等信号词',
|
|
132
|
+
'浏览核心目录结构识别模式集中区域',
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: '实现规范提取',
|
|
137
|
+
action: '阅读每种模式的代表性实现文件,提取项目的标准写法:线程安全策略(Singleton 的初始化方式)、创建约束(Factory 的参数校验)、生命周期管理(Delegate 的弱引用)、注册/注销对称性(Observer 的移除时机)',
|
|
138
|
+
output: '每种模式的规范实现骨架(含线程安全、生命周期、约束规则)+ 多个实现实例的代码引用',
|
|
139
|
+
tools: ['read_file 阅读模式核心实现文件'],
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: '反模式与滥用检测',
|
|
143
|
+
action: '搜索模式的不规范使用:God Object(单个类包含过多职责)、过度继承(深继承链)、滥用 Singleton(本应局部作用域的实例被全局化)、空 Delegate 方法(实现了协议但方法体为空)',
|
|
144
|
+
output: '反模式实例清单(含文件位置),或确认项目模式使用健康',
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
submitAction: '每种设计模式单独提交候选(**按实际发现提交,无实质内容则跳过本维度**),包含标准实现骨架和使用约束',
|
|
148
|
+
submitExtras: [
|
|
149
|
+
'每个候选只聚焦一种设计模式的项目特定实现',
|
|
150
|
+
'whenClause 需说明何时应使用此模式,dontClause 说明何时不应使用',
|
|
151
|
+
],
|
|
152
|
+
mistakes: [
|
|
153
|
+
'不要将不同模式合并为一个候选(如 "创建型模式")— Singleton 和 Factory 必须分别提交',
|
|
154
|
+
'不要只列模式名称 — 必须包含项目中的实际实现代码,展示规范写法',
|
|
155
|
+
'不要把框架内置模式当作项目自定义模式 — 只提取项目团队主动采用和约定的模式',
|
|
156
|
+
'不要忽略模式的约束面(线程安全、生命周期、弱引用)— 约束才是 Recipe 的核心价值',
|
|
157
|
+
'【跨维度边界】design-patterns 只关注模式的实现规范 — 架构分层归 architecture,编码命名归 coding-standards',
|
|
158
|
+
],
|
|
159
|
+
},
|
|
160
|
+
// ──────────────────────────────────────────────
|
|
161
|
+
// 3. architecture — 分层架构/模块边界/依赖方向
|
|
162
|
+
// ──────────────────────────────────────────────
|
|
163
|
+
architecture: {
|
|
164
|
+
keywords: [
|
|
165
|
+
'架构',
|
|
166
|
+
'分层',
|
|
167
|
+
'模块',
|
|
168
|
+
'依赖方向',
|
|
169
|
+
'import',
|
|
170
|
+
'目录结构',
|
|
171
|
+
'Package',
|
|
172
|
+
'module',
|
|
173
|
+
'layer',
|
|
174
|
+
'feature',
|
|
175
|
+
'target',
|
|
176
|
+
'依赖注入',
|
|
177
|
+
'DI',
|
|
178
|
+
'组装',
|
|
179
|
+
'启动流程',
|
|
180
|
+
'路由',
|
|
181
|
+
],
|
|
182
|
+
phases: [
|
|
183
|
+
{
|
|
184
|
+
name: '架构层次映射',
|
|
185
|
+
action: '浏览项目根目录和核心子目录,识别分层架构类型(MVC/MVVM/Clean Architecture/Feature-based/Monorepo)。阅读构建配置(Package.swift/build.gradle/package.json/Cargo.toml)确认模块划分。绘制层次关系:哪些目录属于哪一层、各层的职责边界',
|
|
186
|
+
output: '架构层次图:层名→目录映射→职责定义→层间依赖方向(上层→下层,禁止反向)',
|
|
187
|
+
tools: ['list_dir 浏览目录树(至少两层深度)', 'read_file 阅读构建配置文件确认模块划分'],
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
name: '依赖规则提取',
|
|
191
|
+
action: '跨层选取文件阅读 import 语句,验证依赖方向是否全局一致。重点关注:表现层是否依赖了数据层、模块间是否通过协议/接口解耦、是否存在跨 Feature 的直接引用。提取项目的依赖注入/组装方式(构造器注入/Service Locator/DI Container)',
|
|
192
|
+
output: '依赖规则矩阵(层A可→层B, 层A禁→层C)+ 依赖注入机制说明 + 违规实例(如有)',
|
|
193
|
+
tools: [
|
|
194
|
+
'grep_search 搜索 import/include/require/from 语句',
|
|
195
|
+
'read_file 阅读 DI/组装/启动入口文件',
|
|
196
|
+
],
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: '边界违规与通信检测',
|
|
200
|
+
action: '搜索跨层直接调用、循环依赖信号。分析模块间通信方式:事件总线/NotificationCenter/URL 路由/协议抽象/回调闭包。确认是否存在启动顺序依赖或隐式耦合',
|
|
201
|
+
output: '模块通信模式清单 + 边界违规实例 + 启动流程依赖图',
|
|
202
|
+
},
|
|
203
|
+
],
|
|
204
|
+
submitAction: '分层规则、依赖方向约束、模块通信模式分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
205
|
+
submitExtras: [
|
|
206
|
+
'dontClause 明确表达禁止的跨层调用方向',
|
|
207
|
+
'content 中包含架构层次图(文字描述即可)和依赖方向规则',
|
|
208
|
+
],
|
|
209
|
+
mistakes: [
|
|
210
|
+
'不要只罗列目录结构 — 必须分析出层间依赖方向和约束规则,目录本身不是知识',
|
|
211
|
+
'不要遗漏依赖注入/组装机制 — 这是架构的关键胶水层',
|
|
212
|
+
'不要把分层架构和模块通信合并 — "禁止 Feature 间直接 import"和"使用 URL 路由跨 Feature 通信"是两条独立规则',
|
|
213
|
+
'不要忽略启动流程中的隐式依赖和初始化顺序要求',
|
|
214
|
+
'【跨维度边界】architecture 只关注分层/模块/依赖 — 设计模式归 design-patterns,编码风格归 coding-standards',
|
|
215
|
+
],
|
|
216
|
+
},
|
|
217
|
+
// ──────────────────────────────────────────────
|
|
218
|
+
// 4. error-resilience — 错误处理体系与降级策略
|
|
219
|
+
// ──────────────────────────────────────────────
|
|
220
|
+
'error-resilience': {
|
|
221
|
+
keywords: [
|
|
222
|
+
'Error',
|
|
223
|
+
'Exception',
|
|
224
|
+
'catch',
|
|
225
|
+
'throw',
|
|
226
|
+
'Result',
|
|
227
|
+
'try',
|
|
228
|
+
'retry',
|
|
229
|
+
'fallback',
|
|
230
|
+
'recovery',
|
|
231
|
+
'错误处理',
|
|
232
|
+
'异常',
|
|
233
|
+
'降级',
|
|
234
|
+
'ErrorType',
|
|
235
|
+
'UserFacingError',
|
|
236
|
+
'toast',
|
|
237
|
+
'错误码',
|
|
238
|
+
'error mapping',
|
|
239
|
+
'错误传播',
|
|
240
|
+
],
|
|
241
|
+
phases: [
|
|
242
|
+
{
|
|
243
|
+
name: '错误类型体系扫描',
|
|
244
|
+
action: '搜索项目中的 Error/Exception 类型定义,构建错误类型层次树。区分:业务错误(如 APIError/BizError)、系统错误(网络/存储/权限)、用户面向错误(展示给用户的提示文案)。关注错误码体系(如有)和错误枚举的分类方式',
|
|
245
|
+
output: '错误类型层次图:基类→子类/枚举→使用场景映射。含错误码编排规则(如有)',
|
|
246
|
+
tools: [
|
|
247
|
+
'grep_search 搜索 Error/Exception/enum.*Error 定义',
|
|
248
|
+
'浏览 Error/Exception 类型集中目录',
|
|
249
|
+
],
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
name: '错误传播链路追踪',
|
|
253
|
+
action: '选取典型业务流程(如网络请求→解析→展示),阅读完整调用链,追踪错误从底层到表现层的传播路径:底层抛出什么错误→中间层如何转换/包装→表现层如何展示给用户。关注统一错误转换层(如 Error Mapper/Handler)、重试策略(指数退避/有限次数)、降级方案(缓存兜底/默认值)',
|
|
254
|
+
output: '错误传播全链路图(底层→中间层→表现层)+ 重试策略说明 + 降级机制说明',
|
|
255
|
+
tools: ['read_file 沿调用链逐层阅读错误处理代码'],
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
name: '薄弱点检测',
|
|
259
|
+
action: '搜索错误处理的薄弱环节:空 catch 块(静默吞错误)、裸 catch(catch 所有异常不区分类型)、未处理的 Promise/async 错误、缺失的 error 回调、print/NSLog 替代正式错误处理',
|
|
260
|
+
output: '错误处理薄弱点清单 + 项目整体错误处理健康度评估',
|
|
261
|
+
},
|
|
262
|
+
],
|
|
263
|
+
submitAction: '错误类型体系、错误传播规则、重试与降级策略分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
264
|
+
submitExtras: ['每个候选聚焦单一错误处理维度 — 类型体系、传播规则、重试策略、用户提示各自独立'],
|
|
265
|
+
mistakes: [
|
|
266
|
+
'不要把所有错误处理塞进一个候选 — 错误类型体系、传播规则、重试策略、用户提示应分别提交',
|
|
267
|
+
'不要只写 "使用 try/catch" — 必须说明项目特定的错误类型层次和转换规则',
|
|
268
|
+
'不要忽略错误传播链路 — "底层 NetworkError 如何变成用户看到的 toast 文案"才是核心知识',
|
|
269
|
+
'不要遗漏降级策略 — 缓存兜底、默认值回退、优雅退出等异常恢复路径同样重要',
|
|
270
|
+
'【跨维度边界】error-resilience 只关注错误处理与恢复 — 日志记录归 observability-logging,线程安全归 concurrency-async',
|
|
271
|
+
],
|
|
272
|
+
},
|
|
273
|
+
// ──────────────────────────────────────────────
|
|
274
|
+
// 5. data-event-flow — 数据流/状态管理/事件传播
|
|
275
|
+
// ──────────────────────────────────────────────
|
|
276
|
+
'data-event-flow': {
|
|
277
|
+
keywords: [
|
|
278
|
+
'数据流',
|
|
279
|
+
'event',
|
|
280
|
+
'事件',
|
|
281
|
+
'state',
|
|
282
|
+
'状态管理',
|
|
283
|
+
'Observable',
|
|
284
|
+
'Subject',
|
|
285
|
+
'Driver',
|
|
286
|
+
'Relay',
|
|
287
|
+
'Signal',
|
|
288
|
+
'Redux',
|
|
289
|
+
'Store',
|
|
290
|
+
'Combine',
|
|
291
|
+
'Flow',
|
|
292
|
+
'Publisher',
|
|
293
|
+
'响应式',
|
|
294
|
+
'binding',
|
|
295
|
+
'emit',
|
|
296
|
+
'subscribe',
|
|
297
|
+
'disposeBag',
|
|
298
|
+
'Notification',
|
|
299
|
+
'EventBus',
|
|
300
|
+
'KVO',
|
|
301
|
+
],
|
|
302
|
+
phases: [
|
|
303
|
+
{
|
|
304
|
+
name: '数据流框架识别',
|
|
305
|
+
action: '搜索项目中的状态管理和事件框架信号:RxSwift(Observable/Subject/Driver/Relay), Combine(Publisher/Subscriber/@Published), Redux/Flux(Store/Action/Reducer/dispatch), Vuex/Pinia(state/mutations/actions), EventBus/Notification/KVO。确认主框架选型及其在项目中的角色分配(ViewModel 用 Rx、View 用 Binding 等)',
|
|
306
|
+
output: '数据流技术选型全景:主框架 + 辅助机制 + 各层的角色分配',
|
|
307
|
+
tools: [
|
|
308
|
+
'grep_search 搜索 Observable/Subject/Publisher/Store/dispatch 等信号词',
|
|
309
|
+
'浏览状态管理/ViewModel 集中目录',
|
|
310
|
+
],
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
name: '数据绑定模式深挖',
|
|
314
|
+
action: '阅读核心 ViewModel/Store 文件,深入分析:数据绑定方式(单向/双向)、Input→Output 转换模式、事件传播路径(用户操作→ViewModel→Service→Repository 的完整链路)、状态持久化策略(内存/磁盘/远程同步)。特别关注 Output 类型约束(如 Driver 不能 error、Relay 必须有初始值)',
|
|
315
|
+
output: '数据绑定标准模式:输入→转换→输出→UI 的完整链路图 + Output 类型约束规则',
|
|
316
|
+
tools: ['read_file 阅读核心 ViewModel/Store/Reducer 文件'],
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
name: '订阅泄漏检测',
|
|
320
|
+
action: '搜索内存泄漏风险模式:未使用 disposeBag/cancellable 的订阅、闭包内强引用 self(缺少 [weak self])、未取消的 Timer/NotificationCenter 观察者、长生命周期对象持有短生命周期对象的订阅',
|
|
321
|
+
output: '泄漏风险点清单 + 项目已有的防泄漏机制(disposeBag 管理策略、weak self 约定)',
|
|
322
|
+
},
|
|
323
|
+
],
|
|
324
|
+
submitAction: '数据绑定模式、事件传播路径、订阅管理规则分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
325
|
+
submitExtras: ['每个候选聚焦单一数据流模式,说明其适用场景和约束'],
|
|
326
|
+
mistakes: [
|
|
327
|
+
'不要只描述框架 API(如 "使用 Observable")— 必须说明项目如何使用该框架、约定了哪些模式',
|
|
328
|
+
'不要混淆不同框架的模式 — 如果项目同时使用 RxSwift 和 Combine,应按框架分别提交',
|
|
329
|
+
'不要忽略订阅的生命周期管理 — disposeBag/cancellable/[weak self] 的使用约定是防泄漏的核心',
|
|
330
|
+
'不要遗漏 Output 类型约束 — "Driver 不能 error" 这类约束比 "使用 Driver" 更有价值',
|
|
331
|
+
'【跨维度边界】data-event-flow 只关注数据流/事件/状态 — UI 组件构建归 ui-interaction,设计模式归 design-patterns',
|
|
332
|
+
],
|
|
333
|
+
},
|
|
334
|
+
// ──────────────────────────────────────────────
|
|
335
|
+
// 6. agent-guidelines — 团队开发指南与隐性约定
|
|
336
|
+
// ──────────────────────────────────────────────
|
|
337
|
+
'agent-guidelines': {
|
|
338
|
+
keywords: [
|
|
339
|
+
'Agent',
|
|
340
|
+
'AI',
|
|
341
|
+
'Copilot',
|
|
342
|
+
'prompt',
|
|
343
|
+
'指南',
|
|
344
|
+
'guideline',
|
|
345
|
+
'约定',
|
|
346
|
+
'convention',
|
|
347
|
+
'规范文档',
|
|
348
|
+
'CONTRIBUTING',
|
|
349
|
+
'AGENTS',
|
|
350
|
+
'PR template',
|
|
351
|
+
'commit message',
|
|
352
|
+
'code review',
|
|
353
|
+
'CI',
|
|
354
|
+
'lint',
|
|
355
|
+
'pre-commit',
|
|
356
|
+
'husky',
|
|
357
|
+
],
|
|
358
|
+
phases: [
|
|
359
|
+
{
|
|
360
|
+
name: '显式规范收集',
|
|
361
|
+
action: "搜索项目中所有开发指南文档:CONTRIBUTING.md, AGENTS.md, CODE_OF_CONDUCT.md, .github/ 下的 PR template/issue template, docs/ 中的开发文档。逐一阅读,提取可编码的规则(明确的 DO/DON'T 约束)",
|
|
362
|
+
output: '显式规范清单:每条规范的来源文档、规则内容、约束范围(全局/某模块/某语言)',
|
|
363
|
+
tools: [
|
|
364
|
+
'file_search 搜索 CONTRIBUTING/AGENTS/GUIDELINES/CONVENTIONS 文件',
|
|
365
|
+
'list_dir 浏览 .github/ 和 docs/ 目录',
|
|
366
|
+
],
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
name: '规则强度分级',
|
|
370
|
+
action: '区分硬规则(CI 强制执行、lint 报错、pre-commit 拦截)和软指南(文档建议但无自动化检查)。阅读 CI 配置(.github/workflows/)、lint 配置(biome.json/.eslintrc/swiftlint.yml)、pre-commit/husky 配置,提取被工具链强制的规则',
|
|
371
|
+
output: '规则强度矩阵:硬规则(工具强制)vs 软指南(文档建议)+ 每条规则的强制机制',
|
|
372
|
+
tools: [
|
|
373
|
+
'read_file 阅读 CI 配置和 lint 配置文件',
|
|
374
|
+
'grep_search 搜索 lint/format/check 相关命令',
|
|
375
|
+
],
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
name: '隐性规范发现',
|
|
379
|
+
action: '分析 PR template 中的必填项、commit message 格式(Conventional Commits/Semantic)、branch 命名约定、代码 review 的 approve 规则。搜索 .editorconfig、.prettierrc 等格式化配置。寻找文档中没写但团队实际遵循的约定',
|
|
380
|
+
output: '隐性规范列表 + 发现路径(从配置/模板/历史 commit 中推断)',
|
|
381
|
+
},
|
|
382
|
+
],
|
|
383
|
+
submitAction: "每条开发规范独立提交候选(**按实际发现提交,无实质内容则跳过本维度**),含明确的 DO/DON'T",
|
|
384
|
+
submitExtras: ['每个候选标注规则强度(硬规则/软指南)和强制机制'],
|
|
385
|
+
mistakes: [
|
|
386
|
+
'不要照搬文档原文 — 必须提炼为可执行的规则,冗长的说明段落不是 Recipe',
|
|
387
|
+
'不要忽略 CI/lint/pre-commit 配置中的隐性规范 — 这些往往比文档更权威',
|
|
388
|
+
'不要把代码风格和提交规范合并 — "import 排序"和"commit message 格式"是不同主题',
|
|
389
|
+
'不要遗漏 PR template 和 branch 命名约定 — 这些是团队协作的高频触发规则',
|
|
390
|
+
'【跨维度边界】agent-guidelines 只关注团队级开发约定 — 代码命名细节归 coding-standards,架构规则归 architecture',
|
|
391
|
+
],
|
|
392
|
+
},
|
|
393
|
+
// ──────────────────────────────────────────────
|
|
394
|
+
// 7. concurrency-async — 并发模型/线程安全/异步策略
|
|
395
|
+
// ──────────────────────────────────────────────
|
|
396
|
+
'concurrency-async': {
|
|
397
|
+
keywords: [
|
|
398
|
+
'async',
|
|
399
|
+
'await',
|
|
400
|
+
'Task',
|
|
401
|
+
'Actor',
|
|
402
|
+
'Sendable',
|
|
403
|
+
'@MainActor',
|
|
404
|
+
'DispatchQueue',
|
|
405
|
+
'GCD',
|
|
406
|
+
'Thread',
|
|
407
|
+
'Lock',
|
|
408
|
+
'NSLock',
|
|
409
|
+
'Mutex',
|
|
410
|
+
'Promise',
|
|
411
|
+
'Future',
|
|
412
|
+
'concurrent',
|
|
413
|
+
'semaphore',
|
|
414
|
+
'并发',
|
|
415
|
+
'异步',
|
|
416
|
+
'线程安全',
|
|
417
|
+
'数据竞争',
|
|
418
|
+
'死锁',
|
|
419
|
+
],
|
|
420
|
+
phases: [
|
|
421
|
+
{
|
|
422
|
+
name: '并发模型全景扫描',
|
|
423
|
+
action: '搜索项目中的并发原语和异步模式:structured concurrency(async/await/Task/TaskGroup), actors(@MainActor/自定义Actor), locks(NSLock/os_unfair_lock/Mutex/synchronized), GCD(DispatchQueue/DispatchGroup), 线程池/Executor, Promise/Future/Combine。统计各种并发模型的使用频率和场景分布',
|
|
424
|
+
output: '并发模型使用全景:主模型选型 + 各层/各场景的并发策略分布',
|
|
425
|
+
tools: ['grep_search 搜索 async/await/Task/Actor/DispatchQueue/Lock/Mutex 等关键词'],
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
name: '线程安全策略提取',
|
|
429
|
+
action: '阅读核心并发文件,提取项目的线程安全约定:Sendable 合规策略(@unchecked Sendable + Lock vs 纯值类型)、共享可变状态的保护方式(Lock/Actor/串行队列)、主线程保障机制(@MainActor/DispatchQueue.main)、跨线程数据传递方式(值拷贝/不可变引用)',
|
|
430
|
+
output: '线程安全策略矩阵:各场景的标准做法 + 标准代码骨架',
|
|
431
|
+
tools: ['read_file 阅读包含并发逻辑的核心文件'],
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
name: '竞态与死锁风险检测',
|
|
435
|
+
action: '搜索并发风险信号:未加锁的共享可变 var、缺少 @MainActor 的 UI 更新代码、嵌套锁(潜在死锁)、Task 中未捕获的 self 强引用、回调地狱(多层嵌套的异步回调)',
|
|
436
|
+
output: '并发风险点清单 + 项目已有的防护机制评估',
|
|
437
|
+
},
|
|
438
|
+
],
|
|
439
|
+
submitAction: '并发模型选型、线程安全策略、锁使用模式分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
440
|
+
submitExtras: ['每个候选聚焦单一并发策略,coreCode 展示标准的线程安全写法'],
|
|
441
|
+
mistakes: [
|
|
442
|
+
'不要把不同并发策略混在一个候选中 — Actor 模式和 NSLock 模式应独立成条',
|
|
443
|
+
'不要写通用并发理论 — 必须引用项目实际代码,展示项目团队选择的具体方案',
|
|
444
|
+
'不要忽略 @MainActor 和 UI 线程保障 — 这是 iOS/桌面应用最常见的并发约束',
|
|
445
|
+
'不要忽略 Task 闭包中的 self 捕获策略 — [weak self] vs 值捕获 vs @Sendable 约束',
|
|
446
|
+
'【跨维度边界】concurrency-async 只关注并发/线程安全 — 错误处理归 error-resilience,性能优化归 performance-optimization',
|
|
447
|
+
],
|
|
448
|
+
},
|
|
449
|
+
// ──────────────────────────────────────────────
|
|
450
|
+
// 8. networking-api — 网络请求/API 封装/接口规范
|
|
451
|
+
// ──────────────────────────────────────────────
|
|
452
|
+
'networking-api': {
|
|
453
|
+
keywords: [
|
|
454
|
+
'API',
|
|
455
|
+
'HTTP',
|
|
456
|
+
'REST',
|
|
457
|
+
'GraphQL',
|
|
458
|
+
'WebSocket',
|
|
459
|
+
'URLSession',
|
|
460
|
+
'Alamofire',
|
|
461
|
+
'Moya',
|
|
462
|
+
'fetch',
|
|
463
|
+
'axios',
|
|
464
|
+
'网络请求',
|
|
465
|
+
'接口',
|
|
466
|
+
'endpoint',
|
|
467
|
+
'request',
|
|
468
|
+
'response',
|
|
469
|
+
'interceptor',
|
|
470
|
+
'middleware',
|
|
471
|
+
'token',
|
|
472
|
+
'retry',
|
|
473
|
+
'timeout',
|
|
474
|
+
],
|
|
475
|
+
phases: [
|
|
476
|
+
{
|
|
477
|
+
name: '网络架构映射',
|
|
478
|
+
action: '搜索项目的网络请求基础设施:HTTP 客户端选型(URLSession/Alamofire/Moya/fetch/axios)、API 定义方式(枚举/类/装饰器)、请求构建流程(URL+参数+Header+Body 的组装方式)、拦截器/中间件链(认证注入/日志/重试/缓存)',
|
|
479
|
+
output: '网络架构全景图:技术选型 → 分层结构 → 请求流水线(构建→拦截→发送→响应→解析)',
|
|
480
|
+
tools: [
|
|
481
|
+
'grep_search 搜索 request/response/API/endpoint/interceptor 关键词',
|
|
482
|
+
'浏览网络层/API 定义目录',
|
|
483
|
+
],
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
name: '请求全链路分析',
|
|
487
|
+
action: '阅读核心网络封装文件,追踪一个典型 API 请求的完整生命周期:API 定义→请求构建→Header/Token 注入→错误码映射→响应模型解析→结果包装(Result/Observable)。提取认证管理(Token 存储/刷新/过期处理)、超时/重试策略、响应缓存机制',
|
|
488
|
+
output: '标准 API 请求全链路文档 + 认证流程 + 重试策略 + 缓存策略',
|
|
489
|
+
tools: ['read_file 沿请求链路逐层阅读网络封装文件'],
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
name: '安全与健壮性检测',
|
|
493
|
+
action: '搜索网络层风险:硬编码的 URL/API Key、不安全的 HTTP 配置(允许明文传输)、缺失的证书校验、无超时的请求、未处理的网络错误场景(无网络/超时/服务端 5xx)',
|
|
494
|
+
output: '网络安全检查结果 + 健壮性评估 + API 版本管理策略',
|
|
495
|
+
},
|
|
496
|
+
],
|
|
497
|
+
submitAction: '网络架构、请求模式、认证管理、响应解析分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
498
|
+
submitExtras: ['doClause 强制使用项目的网络封装层,禁止直接调用底层 HTTP API'],
|
|
499
|
+
mistakes: [
|
|
500
|
+
'不要描述 URLSession/Alamofire 的通用 API 用法 — 必须说明项目特定的封装方式和约定',
|
|
501
|
+
'不要忽略认证/Token 管理 — Token 存储位置、刷新机制、过期处理是网络层核心知识',
|
|
502
|
+
'不要遗漏错误码映射规则 — 服务端返回的 code/status 如何映射到客户端 Error 类型',
|
|
503
|
+
'不要忽略超时、重试、缓存策略 — 这些直接影响用户体验和接口健壮性',
|
|
504
|
+
'【跨维度边界】networking-api 只关注网络请求链路 — 数据持久化归 data-event-flow,认证安全细节归 security-auth',
|
|
505
|
+
],
|
|
506
|
+
},
|
|
507
|
+
// ──────────────────────────────────────────────
|
|
508
|
+
// 9. ui-interaction — UI 构建/布局/交互/样式
|
|
509
|
+
// ──────────────────────────────────────────────
|
|
510
|
+
'ui-interaction': {
|
|
511
|
+
keywords: [
|
|
512
|
+
'UI',
|
|
513
|
+
'View',
|
|
514
|
+
'Layout',
|
|
515
|
+
'Animation',
|
|
516
|
+
'SnapKit',
|
|
517
|
+
'AutoLayout',
|
|
518
|
+
'CSS',
|
|
519
|
+
'Component',
|
|
520
|
+
'Tailwind',
|
|
521
|
+
'Styled',
|
|
522
|
+
'界面',
|
|
523
|
+
'布局',
|
|
524
|
+
'动画',
|
|
525
|
+
'交互',
|
|
526
|
+
'gesture',
|
|
527
|
+
'手势',
|
|
528
|
+
'Dark Mode',
|
|
529
|
+
'主题',
|
|
530
|
+
'theme',
|
|
531
|
+
'accessibility',
|
|
532
|
+
'无障碍',
|
|
533
|
+
],
|
|
534
|
+
phases: [
|
|
535
|
+
{
|
|
536
|
+
name: 'UI 技术栈识别',
|
|
537
|
+
action: '搜索项目的 UI 构建方式:布局技术(代码布局/Storyboard/XIB/SwiftUI/CSS-in-JS/Tailwind)、布局引擎(SnapKit/AutoLayout/Flexbox/Grid)、组件库(自定义基础组件/第三方 UI 库)、动画框架。识别是否有统一的 BaseView/BaseViewController',
|
|
538
|
+
output: 'UI 技术栈全景:布局方式 + 组件库 + 基类继承体系 + 动画技术',
|
|
539
|
+
tools: [
|
|
540
|
+
'grep_search 搜索 SnapKit/AutoLayout/Storyboard/SwiftUI/CSS 等关键词',
|
|
541
|
+
'浏览 UI/View/Component 集中目录',
|
|
542
|
+
],
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
name: '组件规范深挖',
|
|
546
|
+
action: '阅读核心 UI 组件和 ViewController/Page,提取:布局代码的标准写法(约束创建方式/布局方法命名)、样式管理策略(颜色/字体/间距是否有统一管理)、主题/Dark Mode 适配方式、复用组件的使用约定(Cell/Header/Footer 的标准实现)',
|
|
547
|
+
output: 'UI 组件标准实现模式:布局写法 + 样式管理 + 主题适配 + 组件复用约定',
|
|
548
|
+
tools: ['read_file 阅读核心 ViewController/Component/Cell 实现文件'],
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
name: 'UI 一致性检测',
|
|
552
|
+
action: '搜索 UI 实现的不一致现象:混用不同布局方式(同一项目中 SnapKit 和纯 AutoLayout 混用)、硬编码样式值(直接写颜色/字体数值而非引用常量)、遗漏 Dark Mode 适配(未使用动态颜色)、缺失无障碍标注(accessibilityLabel)',
|
|
553
|
+
output: 'UI 一致性问题清单 + 项目 UI 规范整体遵守情况评估',
|
|
554
|
+
},
|
|
555
|
+
],
|
|
556
|
+
submitAction: 'UI 布局模式、样式管理、组件复用、主题适配分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
557
|
+
submitExtras: ['每个候选聚焦单一 UI 规范(布局写法 和 样式管理 是独立候选)'],
|
|
558
|
+
mistakes: [
|
|
559
|
+
'不要描述 UIKit/SwiftUI/CSS 的通用 API — 必须说明项目特定的布局约定和样式管理方式',
|
|
560
|
+
'不要合并不同层次的 UI 规范 — "布局约束写法"和"主题颜色管理"应独立提交',
|
|
561
|
+
'不要忽略 Dark Mode/主题适配 — 动态颜色和样式切换是现代 UI 项目的标配',
|
|
562
|
+
'不要遗漏基类继承约定 — BaseViewController/BaseView 的重写点和使用规则是高频知识',
|
|
563
|
+
'【跨维度边界】ui-interaction 只关注 UI 构建/布局/样式 — 数据绑定归 data-event-flow,设计模式归 design-patterns',
|
|
564
|
+
],
|
|
565
|
+
},
|
|
566
|
+
// ──────────────────────────────────────────────
|
|
567
|
+
// 10. testing-quality — 测试策略/Mock/质量保障
|
|
568
|
+
// ──────────────────────────────────────────────
|
|
569
|
+
'testing-quality': {
|
|
570
|
+
keywords: [
|
|
571
|
+
'Test',
|
|
572
|
+
'XCTest',
|
|
573
|
+
'Jest',
|
|
574
|
+
'Vitest',
|
|
575
|
+
'pytest',
|
|
576
|
+
'JUnit',
|
|
577
|
+
'Mock',
|
|
578
|
+
'Stub',
|
|
579
|
+
'Spy',
|
|
580
|
+
'Fixture',
|
|
581
|
+
'Factory',
|
|
582
|
+
'测试',
|
|
583
|
+
'单元测试',
|
|
584
|
+
'集成测试',
|
|
585
|
+
'snapshot',
|
|
586
|
+
'E2E',
|
|
587
|
+
'coverage',
|
|
588
|
+
'assert',
|
|
589
|
+
'expect',
|
|
590
|
+
'spec',
|
|
591
|
+
'describe',
|
|
592
|
+
],
|
|
593
|
+
phases: [
|
|
594
|
+
{
|
|
595
|
+
name: '测试基础设施扫描',
|
|
596
|
+
action: '搜索项目的测试配置和目录结构:测试框架(XCTest/Jest/Vitest/pytest/JUnit)、测试目录组织(unit/integration/e2e 分离方式)、测试辅助工具(Mock 框架/Fixture 管理/测试 DSL)、CI 中的测试命令和覆盖率配置',
|
|
597
|
+
output: '测试基础设施全景:框架选型 + 目录结构 + 覆盖率要求 + CI 集成方式',
|
|
598
|
+
tools: [
|
|
599
|
+
'file_search 搜索 *Test*/*Spec*/*test* 文件',
|
|
600
|
+
'read_file 阅读测试配置(jest.config/vitest.config/pytest.ini)',
|
|
601
|
+
],
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
name: '测试模式提取',
|
|
605
|
+
action: '阅读核心测试文件,提取项目的测试约定:测试命名规则(test_功能_场景_预期/describe-it 结构)、Mock 创建方式(手写 Mock/框架 Mock/Protocol Mock)、Fixture/测试数据管理(Factory 模式/JSON 文件/Builder)、arrange-act-assert 结构、异步测试写法',
|
|
606
|
+
output: '测试模式规范:命名约定 + Mock 策略 + Fixture 管理 + 异步测试写法',
|
|
607
|
+
tools: ['read_file 阅读不同模块的测试文件(覆盖 Mock/Fixture/异步场景)'],
|
|
608
|
+
},
|
|
609
|
+
{
|
|
610
|
+
name: '测试覆盖评估',
|
|
611
|
+
action: '评估关键模块的测试覆盖情况:核心业务逻辑是否有对应测试、边界条件是否覆盖、Error 路径是否测试。识别测试薄弱区域和测试质量问题(过度 Mock 导致测试与实现耦合、测试名称不能描述场景)',
|
|
612
|
+
output: '测试覆盖评估:强覆盖区域 + 薄弱区域 + 测试质量问题清单',
|
|
613
|
+
},
|
|
614
|
+
],
|
|
615
|
+
submitAction: '测试策略、Mock 模式、测试命名约定分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
616
|
+
submitExtras: ['每个候选聚焦单一测试规范,coreCode 展示标准测试骨架'],
|
|
617
|
+
mistakes: [
|
|
618
|
+
'不要只列出测试框架名称 — 必须说明项目特定的测试约定(命名/Mock/Fixture 管理方式)',
|
|
619
|
+
'不要忽略 Mock 的创建和管理方式 — 手写 Mock vs Protocol Mock vs 框架 Mock 的选择策略是核心知识',
|
|
620
|
+
'不要把单元测试和集成测试的约定混在一起 — 它们的 Mock 策略和 Fixture 管理通常不同',
|
|
621
|
+
'不要遗漏异步测试的写法约定 — async/await 测试、XCTestExpectation、超时控制',
|
|
622
|
+
'【跨维度边界】testing-quality 只关注测试策略和模式 — CI/CD 流程归 agent-guidelines',
|
|
623
|
+
],
|
|
624
|
+
},
|
|
625
|
+
// ──────────────────────────────────────────────
|
|
626
|
+
// 11. security-auth — 认证/授权/安全存储
|
|
627
|
+
// ──────────────────────────────────────────────
|
|
628
|
+
'security-auth': {
|
|
629
|
+
keywords: [
|
|
630
|
+
'Auth',
|
|
631
|
+
'Token',
|
|
632
|
+
'JWT',
|
|
633
|
+
'OAuth',
|
|
634
|
+
'KeyChain',
|
|
635
|
+
'Credential',
|
|
636
|
+
'encrypt',
|
|
637
|
+
'hash',
|
|
638
|
+
'HTTPS',
|
|
639
|
+
'SSL',
|
|
640
|
+
'certificate',
|
|
641
|
+
'安全',
|
|
642
|
+
'认证',
|
|
643
|
+
'授权',
|
|
644
|
+
'permission',
|
|
645
|
+
'CSRF',
|
|
646
|
+
'XSS',
|
|
647
|
+
'cookie',
|
|
648
|
+
'session',
|
|
649
|
+
'SSO',
|
|
650
|
+
'biometric',
|
|
651
|
+
],
|
|
652
|
+
phases: [
|
|
653
|
+
{
|
|
654
|
+
name: '认证架构映射',
|
|
655
|
+
action: '搜索项目的认证/授权基础设施:认证方式(JWT/OAuth/Session/Cookie/SSO/生物识别)、Token 存储位置(KeyChain/SharedPreferences/内存/Cookie)、用户状态管理(登录/登出/Token 过期/Session 过期)、权限控制粒度(角色/功能/页面级)',
|
|
656
|
+
output: '认证架构全景:认证方式 + Token 生命周期 + 权限控制体系 + 用户状态机',
|
|
657
|
+
tools: [
|
|
658
|
+
'grep_search 搜索 Token/Auth/Login/KeyChain/Credential 关键词',
|
|
659
|
+
'浏览认证/安全相关目录',
|
|
660
|
+
],
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
name: '安全实现深挖',
|
|
664
|
+
action: '阅读认证模块核心文件,分析:Token 刷新策略(主动刷新/被动刷新/双 Token 机制)、敏感数据存储方式(加密方式/安全等级)、网络安全配置(HTTPS 强制/证书校验/Certificate Pinning)、输入校验(防 XSS/SQL 注入/CSRF Token)',
|
|
665
|
+
output: '安全实现详图:Token 刷新流程 + 存储安全策略 + 网络安全配置 + 输入校验规则',
|
|
666
|
+
tools: ['read_file 阅读认证/Token 管理/安全配置核心文件'],
|
|
667
|
+
},
|
|
668
|
+
{
|
|
669
|
+
name: '安全漏洞扫描',
|
|
670
|
+
action: '搜索安全风险信号:硬编码的密钥/Token/URL、明文存储敏感数据(UserDefaults 存 Token)、缺失的输入校验、允许 HTTP 明文传输的配置、日志中泄漏敏感信息(打印 Token/密码)',
|
|
671
|
+
output: '潜在安全漏洞清单 + 严重等级评估 + 修复建议',
|
|
672
|
+
},
|
|
673
|
+
],
|
|
674
|
+
submitAction: '认证机制、Token 管理、安全存储、权限控制分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
675
|
+
submitExtras: ['严禁在候选的 coreCode/content 中包含实际密钥、Token 或敏感配置值'],
|
|
676
|
+
mistakes: [
|
|
677
|
+
'不要描述通用安全理论 — 必须说明项目特定的认证机制和存储方式',
|
|
678
|
+
'严禁在候选中暴露实际的密钥、Token、API Secret 或敏感配置 — 用占位符替代',
|
|
679
|
+
'不要忽略 Token 刷新机制 — "过期后如何自动刷新、刷新失败如何引导重新登录"是核心流程',
|
|
680
|
+
'不要遗漏登录/登出的状态广播机制 — 其他模块如何感知认证状态变化',
|
|
681
|
+
'【跨维度边界】security-auth 只关注认证/授权/安全 — 网络请求封装归 networking-api,错误处理归 error-resilience',
|
|
682
|
+
],
|
|
683
|
+
},
|
|
684
|
+
// ──────────────────────────────────────────────
|
|
685
|
+
// 12. performance-optimization — 性能策略/缓存/资源管理
|
|
686
|
+
// ──────────────────────────────────────────────
|
|
687
|
+
'performance-optimization': {
|
|
688
|
+
keywords: [
|
|
689
|
+
'性能',
|
|
690
|
+
'performance',
|
|
691
|
+
'cache',
|
|
692
|
+
'缓存',
|
|
693
|
+
'lazy',
|
|
694
|
+
'懒加载',
|
|
695
|
+
'prefetch',
|
|
696
|
+
'预加载',
|
|
697
|
+
'throttle',
|
|
698
|
+
'debounce',
|
|
699
|
+
'pagination',
|
|
700
|
+
'memory',
|
|
701
|
+
'内存',
|
|
702
|
+
'profiling',
|
|
703
|
+
'benchmark',
|
|
704
|
+
'image',
|
|
705
|
+
'列表优化',
|
|
706
|
+
'cell reuse',
|
|
707
|
+
'virtual scroll',
|
|
708
|
+
'CDN',
|
|
709
|
+
],
|
|
710
|
+
phases: [
|
|
711
|
+
{
|
|
712
|
+
name: '性能策略扫描',
|
|
713
|
+
action: '搜索项目中的性能优化策略:缓存(内存缓存/磁盘缓存/HTTP 缓存)、懒加载/延迟初始化(lazy var/dynamic import)、预加载/预取(prefetch/preload)、列表优化(cell 复用/虚拟滚动/分页加载)、图片优化(压缩/缩放/CDN/缓存)、节流防抖(throttle/debounce/合并请求)',
|
|
714
|
+
output: '性能优化策略全景:各场景的优化手段 + 技术选型 + 实现位置',
|
|
715
|
+
tools: [
|
|
716
|
+
'grep_search 搜索 cache/lazy/prefetch/throttle/debounce/reuse 关键词',
|
|
717
|
+
'浏览缓存/性能相关目录',
|
|
718
|
+
],
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
name: '策略实现深挖',
|
|
722
|
+
action: '阅读核心性能优化文件,分析各策略的实现细节:缓存策略(淘汰算法/容量限制/过期机制)、列表分页(页码/游标/预加载阈值)、图片管线(下载→解码→缩放→缓存的链路)、启动优化(预热/懒加载/延迟任务)',
|
|
723
|
+
output: '性能优化实现详图:各策略的标准实现 + 参数配置 + 使用约束',
|
|
724
|
+
tools: ['read_file 阅读缓存管理器/列表优化/图片管线核心文件'],
|
|
725
|
+
},
|
|
726
|
+
{
|
|
727
|
+
name: '性能瓶颈检测',
|
|
728
|
+
action: '搜索可能的性能问题:主线程上的同步 I/O 或重计算、未缓存的重复网络请求、未复用的 Cell/View、过大的图片未缩放直接渲染、内存泄漏点(未释放的缓存/循环引用)',
|
|
729
|
+
output: '潜在性能瓶颈清单 + 优化优先级建议',
|
|
730
|
+
},
|
|
731
|
+
],
|
|
732
|
+
submitAction: '缓存策略、列表优化、图片管线、启动优化分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
733
|
+
submitExtras: ['每个候选聚焦单一优化策略,说明适用场景和配置参数'],
|
|
734
|
+
mistakes: [
|
|
735
|
+
'不要写通用性能理论 — 必须引用项目实际的优化代码和配置参数',
|
|
736
|
+
'不要合并不同维度的优化策略 — "内存缓存策略"和"列表分页加载"是独立候选',
|
|
737
|
+
'不要忽略缓存的淘汰和过期机制 — "缓存了什么"不如"何时淘汰、容量多大"有价值',
|
|
738
|
+
'不要遗漏图片优化管线 — 图片是移动端第一大性能杀手,压缩/缩放/缓存策略必须覆盖',
|
|
739
|
+
'【跨维度边界】performance-optimization 只关注性能优化策略 — 并发模型归 concurrency-async,网络策略归 networking-api',
|
|
740
|
+
],
|
|
741
|
+
},
|
|
742
|
+
// ──────────────────────────────────────────────
|
|
743
|
+
// 13. observability-logging — 日志/监控/埋点/崩溃
|
|
744
|
+
// ──────────────────────────────────────────────
|
|
745
|
+
'observability-logging': {
|
|
746
|
+
keywords: [
|
|
747
|
+
'Log',
|
|
748
|
+
'Logger',
|
|
749
|
+
'os_log',
|
|
750
|
+
'print',
|
|
751
|
+
'NSLog',
|
|
752
|
+
'console',
|
|
753
|
+
'日志',
|
|
754
|
+
'监控',
|
|
755
|
+
'trace',
|
|
756
|
+
'analytics',
|
|
757
|
+
'metric',
|
|
758
|
+
'event',
|
|
759
|
+
'crash',
|
|
760
|
+
'Sentry',
|
|
761
|
+
'Firebase',
|
|
762
|
+
'Crashlytics',
|
|
763
|
+
'structured logging',
|
|
764
|
+
'埋点',
|
|
765
|
+
'APM',
|
|
766
|
+
],
|
|
767
|
+
phases: [
|
|
768
|
+
{
|
|
769
|
+
name: '可观测性体系扫描',
|
|
770
|
+
action: '搜索项目的日志和监控基础设施:日志框架(os_log/Logger/winston/log4j/自定义)、崩溃收集(Sentry/Firebase Crashlytics/Bugsnag)、性能监控APM(Firebase Performance/自建)、业务埋点(自定义事件/第三方 Analytics)、结构化日志(JSON 格式/标签体系)',
|
|
771
|
+
output: '可观测性体系全景:日志框架 + 崩溃收集 + APM + 埋点 + 数据流向',
|
|
772
|
+
tools: [
|
|
773
|
+
'grep_search 搜索 Logger/log/analytics/track/Sentry/Crashlytics 关键词',
|
|
774
|
+
'浏览日志/监控相关文件',
|
|
775
|
+
],
|
|
776
|
+
},
|
|
777
|
+
{
|
|
778
|
+
name: '日志规范提取',
|
|
779
|
+
action: '阅读日志封装文件,提取项目的日志约定:日志分级规则(verbose/debug/info/warning/error 各自的使用场景)、日志分类系统(Category/Tag/Module 标签)、格式约定(是否使用结构化日志)、Release 构建策略(哪些级别会在 Release 中输出、敏感信息过滤)',
|
|
780
|
+
output: '日志规范矩阵:各级别的使用场景 + 分类标签体系 + Release 安全策略',
|
|
781
|
+
tools: ['read_file 阅读 Logger 封装/Category 定义/日志配置文件'],
|
|
782
|
+
},
|
|
783
|
+
{
|
|
784
|
+
name: '日志合规检测',
|
|
785
|
+
action: '搜索日志使用的不规范之处:使用 print/NSLog 替代正式 Logger、日志中包含敏感数据(Token/密码/个人信息)、缺失错误场景的日志(catch 块中无日志)、verbose/debug 日志泄漏到 Release 构建、埋点事件命名不一致',
|
|
786
|
+
output: '日志合规问题清单 + Release 构建日志安全评估 + 埋点规范遵守情况',
|
|
787
|
+
},
|
|
788
|
+
],
|
|
789
|
+
submitAction: '日志规范、崩溃收集、埋点约定分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
790
|
+
submitExtras: ['每个候选聚焦单一可观测性规范,明确 Release vs Debug 的差异处理'],
|
|
791
|
+
mistakes: [
|
|
792
|
+
'不要描述 Logger API 的通用用法 — 必须说明项目特定的日志分级规则和分类标签',
|
|
793
|
+
'不要忽略 Release 构建的日志安全 — verbose/debug 级别不应出现在 Release 构建中',
|
|
794
|
+
'不要遗漏 print/NSLog 的禁用规则 — 在有正式 Logger 的项目中使用 print 是常见违规',
|
|
795
|
+
'不要忽略埋点事件的命名约定 — 事件名/参数名的一致性直接影响数据分析',
|
|
796
|
+
'【跨维度边界】observability-logging 只关注日志/监控/埋点 — 错误处理逻辑归 error-resilience',
|
|
797
|
+
],
|
|
798
|
+
},
|
|
799
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
800
|
+
// ┌──────────────────────────────────────────────┐
|
|
801
|
+
// │ Language Dimensions (7) │
|
|
802
|
+
// └──────────────────────────────────────────────┘
|
|
803
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
804
|
+
// ──────────────────────────────────────────────
|
|
805
|
+
// 14. swift-objc-idiom — Swift/ObjC 语言惯用法
|
|
806
|
+
// ──────────────────────────────────────────────
|
|
807
|
+
'swift-objc-idiom': {
|
|
808
|
+
keywords: [
|
|
809
|
+
'Swift',
|
|
810
|
+
'Objective-C',
|
|
811
|
+
'@objc',
|
|
812
|
+
'bridging',
|
|
813
|
+
'protocol',
|
|
814
|
+
'Protocol-Oriented',
|
|
815
|
+
'extension',
|
|
816
|
+
'enum',
|
|
817
|
+
'generics',
|
|
818
|
+
'value type',
|
|
819
|
+
'值类型',
|
|
820
|
+
'struct',
|
|
821
|
+
'final class',
|
|
822
|
+
'Category',
|
|
823
|
+
'Block',
|
|
824
|
+
'Closure',
|
|
825
|
+
'KVO',
|
|
826
|
+
'Swizzling',
|
|
827
|
+
'#define',
|
|
828
|
+
'宏',
|
|
829
|
+
'macro',
|
|
830
|
+
'Foundation',
|
|
831
|
+
'UIKit',
|
|
832
|
+
],
|
|
833
|
+
phases: [
|
|
834
|
+
{
|
|
835
|
+
name: '语言特性全景扫描',
|
|
836
|
+
action: '搜索项目中 Swift/ObjC 语言特性的使用模式:Protocol(protocol 定义、extension 默认实现、Protocol-Oriented 编程风格)、值类型 vs 引用类型(struct vs class 的选择策略)、enum 活用(关联值/RawValue/命名空间枚举)、Generics(泛型约束/where 子句)、Swift/ObjC 混编(Bridging Header/@objc 暴露/@objcMembers)',
|
|
837
|
+
output: '语言特性使用全景:各特性的使用频率和场景 + Swift/ObjC 混编策略',
|
|
838
|
+
tools: [
|
|
839
|
+
'grep_search 搜索 protocol/extension/struct/enum/@objc 定义',
|
|
840
|
+
'浏览 Bridging Header 和协议集中定义的目录',
|
|
841
|
+
],
|
|
842
|
+
},
|
|
843
|
+
{
|
|
844
|
+
name: '惯用法规范提取',
|
|
845
|
+
action: '阅读核心 Swift/ObjC 文件,提取项目的语言惯用法约定:Protocol-Oriented vs 继承的选择准则、值类型(struct) vs 引用类型(class) 的边界、final class 的强制/可选策略、enum 命名空间的使用模式、Optional 解包策略(guard let/if let/强制解包的场景限制)、闭包简写约定($0 vs 命名参数)',
|
|
846
|
+
output: '项目 Swift 惯用法矩阵:各场景的标准做法 + 禁止做法',
|
|
847
|
+
tools: ['read_file 阅读展示多种语言特性的核心文件'],
|
|
848
|
+
},
|
|
849
|
+
{
|
|
850
|
+
name: '过时模式检测',
|
|
851
|
+
action: '搜索过时或不推荐的语言使用:不必要的 NSObject 继承(纯 Swift 类继承 NSObject)、@objc 滥用(非必要的 @objc 标注)、过度使用 KVO(Swift 中应优先 Combine/didSet)、force unwrap 在不安全场景的使用、Any/AnyObject 类型擦除的滥用',
|
|
852
|
+
output: '过时/不推荐模式清单 + 推荐的现代替代方案',
|
|
853
|
+
},
|
|
854
|
+
],
|
|
855
|
+
submitAction: '每种 Swift/ObjC 惯用法独立提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
856
|
+
submitExtras: [
|
|
857
|
+
'每个候选标注适用的 Swift 版本要求(如 Swift 5.9+/6.0+)',
|
|
858
|
+
'ObjC 相关候选需说明是否为混编必需',
|
|
859
|
+
],
|
|
860
|
+
mistakes: [
|
|
861
|
+
'不要合并不同层面的惯用法 — "Protocol-Oriented 编程"和"Optional 解包策略"是独立候选',
|
|
862
|
+
'不要写通用 Swift 语法教程 — 必须提取项目特有的选择准则(如"何时用 struct 何时用 class"的项目答案)',
|
|
863
|
+
'不要忽略 Swift/ObjC 混编的桥接规则 — 哪些类需要 @objc、Bridging Header 的管理约定',
|
|
864
|
+
'不要遗漏 Optional 处理约定 — guard let vs if let vs 强制解包各自的适用场景是高频决策',
|
|
865
|
+
'【跨维度边界】swift-objc-idiom 只关注语言惯用法 — 架构模式归 architecture,并发模式归 concurrency-async',
|
|
866
|
+
],
|
|
867
|
+
},
|
|
868
|
+
// ──────────────────────────────────────────────
|
|
869
|
+
// 15. ts-js-module — TypeScript/JavaScript 惯用法
|
|
870
|
+
// ──────────────────────────────────────────────
|
|
871
|
+
'ts-js-module': {
|
|
872
|
+
keywords: [
|
|
873
|
+
'TypeScript',
|
|
874
|
+
'JavaScript',
|
|
875
|
+
'ESM',
|
|
876
|
+
'CommonJS',
|
|
877
|
+
'import',
|
|
878
|
+
'export',
|
|
879
|
+
'type',
|
|
880
|
+
'interface',
|
|
881
|
+
'generic',
|
|
882
|
+
'enum',
|
|
883
|
+
'union',
|
|
884
|
+
'template literal',
|
|
885
|
+
'type guard',
|
|
886
|
+
'module',
|
|
887
|
+
'package.json',
|
|
888
|
+
'tsconfig',
|
|
889
|
+
'barrel',
|
|
890
|
+
'path alias',
|
|
891
|
+
'strict',
|
|
892
|
+
'any',
|
|
893
|
+
'unknown',
|
|
894
|
+
],
|
|
895
|
+
phases: [
|
|
896
|
+
{
|
|
897
|
+
name: '模块与类型体系扫描',
|
|
898
|
+
action: '搜索项目的模块系统和类型基础设施:模块格式(ESM/CommonJS/UMD)、路径别名(tsconfig paths/#imports)、barrel exports(index.ts 重导出策略)、TypeScript 严格模式配置(strict/noImplicitAny/strictNullChecks)、类型定义文件(.d.ts)分布',
|
|
899
|
+
output: '模块+类型体系全景:模块格式 + 路径别名 + barrel 策略 + TS 严格度配置',
|
|
900
|
+
tools: [
|
|
901
|
+
'read_file 阅读 tsconfig.json/package.json 的关键配置',
|
|
902
|
+
'grep_search 搜索 import/export/type/interface 模式',
|
|
903
|
+
],
|
|
904
|
+
},
|
|
905
|
+
{
|
|
906
|
+
name: '类型策略深挖',
|
|
907
|
+
action: '阅读核心类型定义文件和业务代码,提取项目的 TypeScript 约定:泛型使用模式(工具类型/条件类型/映射类型)、类型守卫策略(is/in/typeof/instanceof)、联合类型 vs enum 的选择、模板字面量类型的活用、any/unknown 的使用边界(何时允许 any、何时必须 unknown)、类型断言(as)的使用约束',
|
|
908
|
+
output: '类型策略矩阵:各场景的推荐方案 + 禁止方案 + 代码骨架示例',
|
|
909
|
+
tools: ['read_file 阅读核心 .d.ts 文件和展示泛型使用的业务文件'],
|
|
910
|
+
},
|
|
911
|
+
{
|
|
912
|
+
name: '类型安全薄弱检测',
|
|
913
|
+
action: '搜索类型安全风险:any 的使用频率和场景(是否有 eslint no-explicit-any 规则)、@ts-ignore/@ts-expect-error 的使用、类型断言 as 的滥用、缺失返回类型的函数、未使用 strict null checks 的模块',
|
|
914
|
+
output: '类型安全薄弱点清单 + 项目类型严格度评估',
|
|
915
|
+
},
|
|
916
|
+
],
|
|
917
|
+
submitAction: '模块组织策略、类型系统约定、TS 配置规范分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
918
|
+
submitExtras: ['包含 tsconfig/package.json 关键配置引用作为规则依据'],
|
|
919
|
+
mistakes: [
|
|
920
|
+
'不要描述 TypeScript 通用语法 — 必须说明项目特有的类型策略和模块约定',
|
|
921
|
+
'不要忽略路径别名和 barrel exports — 这些是 TS 项目中最常用且最容易出错的约定',
|
|
922
|
+
'不要遗漏 any/unknown 的使用边界 — 何时允许 any(如遗留代码适配)何时必须 unknown 是关键规则',
|
|
923
|
+
'不要忽略 ESM import 的后缀约定 — 部分项目要求 .js 后缀,这是高频出错点',
|
|
924
|
+
'【跨维度边界】ts-js-module 只关注 TS/JS 语言惯用法 — React/Vue 框架模式归对应框架维度',
|
|
925
|
+
],
|
|
926
|
+
},
|
|
927
|
+
// ──────────────────────────────────────────────
|
|
928
|
+
// 16. python-structure — Python 惯用法与包结构
|
|
929
|
+
// ──────────────────────────────────────────────
|
|
930
|
+
'python-structure': {
|
|
931
|
+
keywords: [
|
|
932
|
+
'Python',
|
|
933
|
+
'__init__',
|
|
934
|
+
'class',
|
|
935
|
+
'dataclass',
|
|
936
|
+
'pydantic',
|
|
937
|
+
'typing',
|
|
938
|
+
'type hint',
|
|
939
|
+
'decorator',
|
|
940
|
+
'generator',
|
|
941
|
+
'async',
|
|
942
|
+
'import',
|
|
943
|
+
'virtual env',
|
|
944
|
+
'pip',
|
|
945
|
+
'poetry',
|
|
946
|
+
'uv',
|
|
947
|
+
'pyproject.toml',
|
|
948
|
+
'setup.py',
|
|
949
|
+
'requirements',
|
|
950
|
+
'mypy',
|
|
951
|
+
],
|
|
952
|
+
phases: [
|
|
953
|
+
{
|
|
954
|
+
name: '包结构与工具链扫描',
|
|
955
|
+
action: '搜索项目的 Python 包结构和开发工具链:包管理(pip/poetry/uv/conda)、构建配置(pyproject.toml/setup.py/setup.cfg)、__init__.py 的导出策略(__all__ 定义)、虚拟环境管理、类型检查工具(mypy/pyright/pytype 配置)',
|
|
956
|
+
output: '包结构+工具链全景:包管理方式 + 目录组织 + 类型检查配置 + 开发工具链',
|
|
957
|
+
tools: ['list_dir 浏览项目包结构', 'read_file 阅读 pyproject.toml/setup.py/mypy.ini'],
|
|
958
|
+
},
|
|
959
|
+
{
|
|
960
|
+
name: 'Python 惯用法提取',
|
|
961
|
+
action: '阅读核心 Python 文件,提取项目的 Python 约定:dataclass vs pydantic vs NamedTuple 的选择策略、类型标注完整度(是否全量标注/关键接口标注)、装饰器使用模式(自定义装饰器/框架装饰器)、上下文管理器(with 语句的使用场景)、生成器/迭代器模式、f-string vs format 的选择',
|
|
962
|
+
output: 'Python 惯用法矩阵:数据类选型 + 类型标注策略 + 装饰器约定 + 其他惯用法',
|
|
963
|
+
tools: ['read_file 阅读核心 Python 模块文件'],
|
|
964
|
+
},
|
|
965
|
+
{
|
|
966
|
+
name: '反模式检测',
|
|
967
|
+
action: '搜索 Python 反模式和风格违规:可变默认参数(def f(x=[]))、裸 except(except: 不指定类型)、过深继承链(>3 层)、循环 import、全局可变状态、过长函数(>50 行)、缺失 docstring',
|
|
968
|
+
output: '反模式清单 + 项目 Python 代码质量评估',
|
|
969
|
+
},
|
|
970
|
+
],
|
|
971
|
+
submitAction: '包结构约定、类型标注策略、Python 惯用法分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
972
|
+
submitExtras: ['包含 pyproject.toml 关键配置引用'],
|
|
973
|
+
mistakes: [
|
|
974
|
+
'不要描述 Python 通用语法 — 必须说明项目特有的类型标注策略和数据类选型',
|
|
975
|
+
'不要忽略包管理工具约定 — pip vs poetry vs uv 的选择以及lock 文件管理',
|
|
976
|
+
'不要遗漏 __init__.py 的导出策略 — __all__ 的使用约定影响模块的公开接口',
|
|
977
|
+
'不要忽略 mypy/pyright 配置 — 类型检查的严格度直接决定类型标注的要求',
|
|
978
|
+
'【跨维度边界】python-structure 只关注 Python 语言惯用法 — Django/FastAPI 框架模式归 django-fastapi',
|
|
979
|
+
],
|
|
980
|
+
},
|
|
981
|
+
// ──────────────────────────────────────────────
|
|
982
|
+
// 17. jvm-annotation — Java/Kotlin 惯用法
|
|
983
|
+
// ──────────────────────────────────────────────
|
|
984
|
+
'jvm-annotation': {
|
|
985
|
+
keywords: [
|
|
986
|
+
'Java',
|
|
987
|
+
'Kotlin',
|
|
988
|
+
'annotation',
|
|
989
|
+
'@',
|
|
990
|
+
'generic',
|
|
991
|
+
'gradle',
|
|
992
|
+
'maven',
|
|
993
|
+
'package',
|
|
994
|
+
'interface',
|
|
995
|
+
'abstract',
|
|
996
|
+
'Stream',
|
|
997
|
+
'coroutine',
|
|
998
|
+
'suspend',
|
|
999
|
+
'sealed',
|
|
1000
|
+
'data class',
|
|
1001
|
+
'Lombok',
|
|
1002
|
+
'Validation',
|
|
1003
|
+
'reflection',
|
|
1004
|
+
'null safety',
|
|
1005
|
+
],
|
|
1006
|
+
phases: [
|
|
1007
|
+
{
|
|
1008
|
+
name: '注解与语言特性扫描',
|
|
1009
|
+
action: '搜索项目中的自定义注解定义和主要注解使用模式:自定义注解(@interface 定义)、元注解使用(@Target/@Retention)、Lombok 注解(@Data/@Builder/@Slf4j)、Validation 注解(@NotNull/@Size)、Kotlin 特性(sealed class/data class/suspend/coroutine)',
|
|
1010
|
+
output: '注解+语言特性全景:自定义注解清单 + 主要注解使用场景分布 + Kotlin 特性采用情况',
|
|
1011
|
+
tools: ['grep_search 搜索 @interface 定义和高频注解使用', '浏览注解定义和核心包目录'],
|
|
1012
|
+
},
|
|
1013
|
+
{
|
|
1014
|
+
name: 'JVM 惯用法提取',
|
|
1015
|
+
action: '阅读核心 Java/Kotlin 文件,提取项目约定:泛型使用模式(泛型约束/通配符/类型擦除处理)、Stream API vs 传统循环的选择、Kotlin coroutine 使用约定(Dispatchers 选择/结构化并发/Flow vs Channel)、null 安全策略(Java: @Nullable/@NonNull/Optional; Kotlin: ?/!!的限制)、sealed class/enum 的使用场景',
|
|
1016
|
+
output: 'JVM 惯用法矩阵:各场景的标准做法 + null 安全约定 + 异步策略',
|
|
1017
|
+
tools: ['read_file 阅读核心 Java/Kotlin 业务文件'],
|
|
1018
|
+
},
|
|
1019
|
+
{
|
|
1020
|
+
name: '反模式检测',
|
|
1021
|
+
action: '搜索 JVM 反模式:注解滥用(过度注解导致声明式代码不可读)、raw type 使用(缺失泛型参数)、Kotlin !! 强制非空的不安全使用、checked exception 的不当处理(空 catch)、过度反射',
|
|
1022
|
+
output: '反模式清单 + JVM 代码质量评估',
|
|
1023
|
+
},
|
|
1024
|
+
],
|
|
1025
|
+
submitAction: '注解约定、泛型策略、Kotlin 惯用法分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
1026
|
+
submitExtras: ['包含 build.gradle/pom.xml 关键配置引用'],
|
|
1027
|
+
mistakes: [
|
|
1028
|
+
'不要描述 Java/Kotlin 通用语法 — 必须说明项目特有的注解约定和惯用法',
|
|
1029
|
+
'不要忽略 null 安全策略 — Java 项目的 @Nullable/@NonNull 约定和 Kotlin 的 !! 限制是核心规则',
|
|
1030
|
+
'不要把 Kotlin 和 Java 的约定混在一起 — 如果项目同时使用两种语言,应区分各自的约定',
|
|
1031
|
+
'不要遗漏 Kotlin coroutine 使用模式 — Dispatchers 选择和结构化并发是高频决策',
|
|
1032
|
+
'【跨维度边界】jvm-annotation 只关注 JVM 语言惯用法 — Spring 框架模式归 spring-patterns',
|
|
1033
|
+
],
|
|
1034
|
+
},
|
|
1035
|
+
// ──────────────────────────────────────────────
|
|
1036
|
+
// 18. go-module — Go 语言惯用法
|
|
1037
|
+
// ──────────────────────────────────────────────
|
|
1038
|
+
'go-module': {
|
|
1039
|
+
keywords: [
|
|
1040
|
+
'Go',
|
|
1041
|
+
'go.mod',
|
|
1042
|
+
'goroutine',
|
|
1043
|
+
'channel',
|
|
1044
|
+
'interface',
|
|
1045
|
+
'struct',
|
|
1046
|
+
'error',
|
|
1047
|
+
'context',
|
|
1048
|
+
'package',
|
|
1049
|
+
'defer',
|
|
1050
|
+
'select',
|
|
1051
|
+
'sync',
|
|
1052
|
+
'WaitGroup',
|
|
1053
|
+
'errgroup',
|
|
1054
|
+
'error wrapping',
|
|
1055
|
+
'%w',
|
|
1056
|
+
'internal',
|
|
1057
|
+
'cmd',
|
|
1058
|
+
'pkg',
|
|
1059
|
+
],
|
|
1060
|
+
phases: [
|
|
1061
|
+
{
|
|
1062
|
+
name: '模块与包结构扫描',
|
|
1063
|
+
action: '搜索项目的 Go 模块结构:go.mod(模块路径/Go 版本/依赖管理)、标准布局(cmd/pkg/internal/api)、包命名约定(单数 vs 复数/缩写规则)、internal 包的使用(封装边界)、接口定义位置(消费方定义 vs 提供方定义)',
|
|
1064
|
+
output: '模块结构全景:标准布局 + 包组织约定 + internal 封装策略 + 接口定义位置约定',
|
|
1065
|
+
tools: ['read_file 阅读 go.mod', 'list_dir 浏览项目目录结构(cmd/pkg/internal 等)'],
|
|
1066
|
+
},
|
|
1067
|
+
{
|
|
1068
|
+
name: 'Go 惯用法提取',
|
|
1069
|
+
action: '阅读核心 Go 文件,提取项目的 Go 约定:接口设计(小接口/单方法接口/embed 组合)、错误处理链(error wrapping with %w/sentinel errors/custom error types)、context 传递(首参数 context/超时控制/取消传播)、goroutine 启动约定(errgroup/WaitGroup/context cancel)、defer 使用模式',
|
|
1070
|
+
output: 'Go 惯用法矩阵:错误处理约定 + 接口设计规范 + goroutine 管理策略',
|
|
1071
|
+
tools: ['read_file 阅读核心 Go 业务文件(选取展示多种惯用法的文件)'],
|
|
1072
|
+
},
|
|
1073
|
+
{
|
|
1074
|
+
name: '反模式检测',
|
|
1075
|
+
action: '搜索 Go 反模式:goroutine 泄漏(启动 goroutine 无退出机制)、缺失 context 传递(函数参数列表中无 context)、过大接口(>5 方法的接口)、init() 函数滥用(隐式初始化副作用)、error 未检查(忽略返回的 error)',
|
|
1076
|
+
output: '反模式清单 + Go 代码质量评估',
|
|
1077
|
+
},
|
|
1078
|
+
],
|
|
1079
|
+
submitAction: '模块组织约定、错误处理规范、goroutine 管理分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
1080
|
+
submitExtras: ['包含 go.mod 和标准目录布局引用'],
|
|
1081
|
+
mistakes: [
|
|
1082
|
+
'不要描述 Go 通用语法 — 必须说明项目特有的错误处理链和接口设计约定',
|
|
1083
|
+
'不要忽略 error wrapping 约定 — fmt.Errorf("%w", err) 的使用规则和 sentinel error 定义方式',
|
|
1084
|
+
'不要遗漏 context 传递规则 — 是否强制所有函数首参为 context 是核心约定',
|
|
1085
|
+
'不要忽略 goroutine 的生命周期管理 — 启动方式、退出机制、panic recovery 策略',
|
|
1086
|
+
'【跨维度边界】go-module 只关注 Go 语言惯用法 — 通用架构分层归 architecture',
|
|
1087
|
+
],
|
|
1088
|
+
},
|
|
1089
|
+
// ──────────────────────────────────────────────
|
|
1090
|
+
// 19. rust-ownership — Rust 所有权与惯用法
|
|
1091
|
+
// ──────────────────────────────────────────────
|
|
1092
|
+
'rust-ownership': {
|
|
1093
|
+
keywords: [
|
|
1094
|
+
'Rust',
|
|
1095
|
+
'ownership',
|
|
1096
|
+
'borrow',
|
|
1097
|
+
'lifetime',
|
|
1098
|
+
'trait',
|
|
1099
|
+
'impl',
|
|
1100
|
+
'derive',
|
|
1101
|
+
'macro',
|
|
1102
|
+
'unsafe',
|
|
1103
|
+
'Cargo',
|
|
1104
|
+
'crate',
|
|
1105
|
+
'mod',
|
|
1106
|
+
'Arc',
|
|
1107
|
+
'Rc',
|
|
1108
|
+
'Box',
|
|
1109
|
+
'Clone',
|
|
1110
|
+
'Result',
|
|
1111
|
+
'Option',
|
|
1112
|
+
'?',
|
|
1113
|
+
'thiserror',
|
|
1114
|
+
'anyhow',
|
|
1115
|
+
],
|
|
1116
|
+
phases: [
|
|
1117
|
+
{
|
|
1118
|
+
name: '所有权与依赖扫描',
|
|
1119
|
+
action: '搜索项目中的所有权模式和 crate 结构:智能指针使用(Arc/Rc/Box/Cow 的选择策略)、生命周期标注(显式 lifetime 的使用场景)、Clone/Copy 的使用频率、Cargo.toml(workspace 结构/依赖管理/feature flags)、mod 组织方式(mod.rs vs 文件名)',
|
|
1120
|
+
output: '所有权策略全景:智能指针选型 + 生命周期管理策略 + crate 组织方式',
|
|
1121
|
+
tools: [
|
|
1122
|
+
'grep_search 搜索 Arc/Rc/Box/lifetime/Clone/unsafe 关键词',
|
|
1123
|
+
'read_file 阅读 Cargo.toml',
|
|
1124
|
+
],
|
|
1125
|
+
},
|
|
1126
|
+
{
|
|
1127
|
+
name: 'Rust 惯用法提取',
|
|
1128
|
+
action: '阅读核心 Rust 文件,提取项目约定:trait 设计(small traits/blanket implements/trait objects vs generics)、错误处理(thiserror vs anyhow/? 操作符链/自定义 Error 类型层次)、derive 宏使用约定(哪些 trait 需要 derive)、enum 活用(Option/Result 的自定义扩展)、迭代器链 vs 命令式循环的选择',
|
|
1129
|
+
output: 'Rust 惯用法矩阵:trait 设计规范 + 错误处理链 + derive 约定 + 迭代器使用策略',
|
|
1130
|
+
tools: ['read_file 阅读核心 Rust 业务文件和 lib.rs'],
|
|
1131
|
+
},
|
|
1132
|
+
{
|
|
1133
|
+
name: 'unsafe 与质量检测',
|
|
1134
|
+
action: '搜索 unsafe 块使用:每处 unsafe 是否有安全注释(// SAFETY: ...)、是否有更安全的替代方案、是否被安全抽象包裹。同时检测:不必要的 Clone(可以用引用替代)、过度的 lifetime 标注(可以省略)、unwrap 在非测试代码中的使用',
|
|
1135
|
+
output: 'unsafe 审计报告 + 所有权健康度评估 + unwrap 使用合规检查',
|
|
1136
|
+
},
|
|
1137
|
+
],
|
|
1138
|
+
submitAction: '所有权策略、trait 规范、错误处理约定分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
1139
|
+
submitExtras: ['包含 Cargo.toml 关键配置和 workspace 结构引用'],
|
|
1140
|
+
mistakes: [
|
|
1141
|
+
'不要描述 Rust 通用语法 — 必须说明项目特有的所有权策略和 trait 设计约定',
|
|
1142
|
+
'不要忽略 unsafe 块的安全注释要求 — // SAFETY: 注释是 Rust 社区的核心约定',
|
|
1143
|
+
'不要遗漏 thiserror vs anyhow 的选择 — 库 crate 和应用 crate 通常有不同的错误策略',
|
|
1144
|
+
'不要忽略 unwrap 的使用限制 — 测试中允许 unwrap,业务代码中应使用 ? 操作符',
|
|
1145
|
+
'【跨维度边界】rust-ownership 只关注 Rust 语言惯用法 — 并发模式归 concurrency-async',
|
|
1146
|
+
],
|
|
1147
|
+
},
|
|
1148
|
+
// ──────────────────────────────────────────────
|
|
1149
|
+
// 20. csharp-dotnet — C#/.NET 惯用法
|
|
1150
|
+
// ──────────────────────────────────────────────
|
|
1151
|
+
'csharp-dotnet': {
|
|
1152
|
+
keywords: [
|
|
1153
|
+
'C#',
|
|
1154
|
+
'.NET',
|
|
1155
|
+
'LINQ',
|
|
1156
|
+
'async',
|
|
1157
|
+
'Task',
|
|
1158
|
+
'nuget',
|
|
1159
|
+
'namespace',
|
|
1160
|
+
'interface',
|
|
1161
|
+
'attribute',
|
|
1162
|
+
'record',
|
|
1163
|
+
'dependency injection',
|
|
1164
|
+
'Entity Framework',
|
|
1165
|
+
'Dapper',
|
|
1166
|
+
'nullable reference',
|
|
1167
|
+
'pattern matching',
|
|
1168
|
+
'IHost',
|
|
1169
|
+
],
|
|
1170
|
+
phases: [
|
|
1171
|
+
{
|
|
1172
|
+
name: '.NET 项目结构扫描',
|
|
1173
|
+
action: '搜索项目的 .NET 结构:.csproj(SDK/TargetFramework/NuGet 依赖)、项目类型(ASP.NET Core/Console/Worker/MAUI)、namespace 组织约定(与目录对齐/自定义规则)、启动配置(Program.cs/Startup.cs/Host Builder)、Nullable reference types 开启状态',
|
|
1174
|
+
output: '.NET 项目结构全景:SDK 版本 + 项目类型 + namespace 约定 + nullable 启用状态',
|
|
1175
|
+
tools: ['read_file 阅读 .csproj/Program.cs/appsettings.json', 'list_dir 浏览项目结构'],
|
|
1176
|
+
},
|
|
1177
|
+
{
|
|
1178
|
+
name: 'C# 惯用法提取',
|
|
1179
|
+
action: '阅读核心 C# 文件,提取项目约定:LINQ 使用模式(方法语法 vs 查询语法/延迟执行的理解)、async/await 模式(ConfigureAwait/async void 禁用/ValueTask vs Task)、DI 注册约定(AddScoped/AddTransient/AddSingleton 的选择策略)、record/readonly struct 的使用场景、pattern matching 活用度',
|
|
1180
|
+
output: 'C# 惯用法矩阵:LINQ 约定 + async 策略 + DI 注册模式 + 现代 C# 特性采用情况',
|
|
1181
|
+
tools: ['read_file 阅读核心 C# 业务文件和 DI 注册文件'],
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
name: '反模式检测',
|
|
1185
|
+
action: '搜索 C# 反模式:async void(非事件处理场景)、缺失 ConfigureAwait(库代码)、Service Locator 模式(绕过 DI)、过度使用 static 类、LINQ N+1 查询(Entity Framework 未使用 Include)、IDisposable 未正确释放',
|
|
1186
|
+
output: '反模式清单 + .NET 代码质量评估',
|
|
1187
|
+
},
|
|
1188
|
+
],
|
|
1189
|
+
submitAction: '.NET 配置约定、C# 惯用法、DI 策略分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
1190
|
+
submitExtras: ['包含 .csproj 和 DI 注册代码引用'],
|
|
1191
|
+
mistakes: [
|
|
1192
|
+
'不要描述 C# 通用语法 — 必须说明项目特有的 .NET 版本特性采用和 C# 约定',
|
|
1193
|
+
'不要忽略 async/await 细节约定 — ConfigureAwait/async void 禁用/取消令牌传递',
|
|
1194
|
+
'不要遗漏 DI 生命周期选择规则 — Scoped vs Transient vs Singleton 的项目约定',
|
|
1195
|
+
'不要忽略 Entity Framework/ORM 的使用约定 — 查询优化和连接管理是高频问题',
|
|
1196
|
+
'【跨维度边界】csharp-dotnet 只关注 C#/.NET 惯用法 — ASP.NET 框架模式归更高层维度',
|
|
1197
|
+
],
|
|
1198
|
+
},
|
|
1199
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1200
|
+
// ┌──────────────────────────────────────────────┐
|
|
1201
|
+
// │ Framework Dimensions (5) │
|
|
1202
|
+
// └──────────────────────────────────────────────┘
|
|
1203
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1204
|
+
// ──────────────────────────────────────────────
|
|
1205
|
+
// 21. react-patterns — React 框架模式
|
|
1206
|
+
// ──────────────────────────────────────────────
|
|
1207
|
+
'react-patterns': {
|
|
1208
|
+
keywords: [
|
|
1209
|
+
'React',
|
|
1210
|
+
'useState',
|
|
1211
|
+
'useEffect',
|
|
1212
|
+
'useCallback',
|
|
1213
|
+
'useMemo',
|
|
1214
|
+
'hook',
|
|
1215
|
+
'component',
|
|
1216
|
+
'JSX',
|
|
1217
|
+
'TSX',
|
|
1218
|
+
'props',
|
|
1219
|
+
'children',
|
|
1220
|
+
'Redux',
|
|
1221
|
+
'Zustand',
|
|
1222
|
+
'Context',
|
|
1223
|
+
'Suspense',
|
|
1224
|
+
'ErrorBoundary',
|
|
1225
|
+
'SSR',
|
|
1226
|
+
'Next.js',
|
|
1227
|
+
'Remix',
|
|
1228
|
+
'compound component',
|
|
1229
|
+
],
|
|
1230
|
+
phases: [
|
|
1231
|
+
{
|
|
1232
|
+
name: 'React 生态扫描',
|
|
1233
|
+
action: '搜索项目的 React 技术栈:组件类型分布(函数组件/类组件/Server Component)、状态管理(useState/useReducer/Redux/Zustand/Jotai/Context)、路由(React Router/Next.js pages/app directory)、自定义 Hooks 清单(use* 前缀函数)、样式方案(CSS Modules/Tailwind/Styled Components/Emotion)',
|
|
1234
|
+
output: 'React 生态全景:组件模式 + 状态管理选型 + 路由方案 + 自定义 Hooks 清单',
|
|
1235
|
+
tools: [
|
|
1236
|
+
'grep_search 搜索 useState/useEffect/Redux/Zustand/Context 关键词',
|
|
1237
|
+
'浏览 hooks/components/pages 目录',
|
|
1238
|
+
],
|
|
1239
|
+
},
|
|
1240
|
+
{
|
|
1241
|
+
name: '组件模式深挖',
|
|
1242
|
+
action: '阅读核心组件和 Hooks 文件,提取项目约定:组件拆分粒度(容器/展示/Layout/原子组件)、Props 设计(interface vs type/children 使用/默认值策略)、自定义 Hook 的封装模式(数据获取/表单/定时器)、副作用管理(useEffect 依赖规则/清理函数约定)、性能优化(React.memo/useMemo/useCallback 的使用准则)',
|
|
1243
|
+
output: '组件模式规范:组件拆分策略 + Props 设计约定 + Hooks 封装模式 + 性能优化规则',
|
|
1244
|
+
tools: ['read_file 阅读核心 Page/Component/Hook 文件'],
|
|
1245
|
+
},
|
|
1246
|
+
{
|
|
1247
|
+
name: '反模式检测',
|
|
1248
|
+
action: '搜索 React 反模式:useEffect 依赖数组缺失或多余、组件过大(>300 行)、prop drilling 过深(>3 层传递)、状态提升过度(应局部的状态放到了全局)、不必要的 re-render(缺少 memo/缺少 useCallback)、直接修改状态(mutation)',
|
|
1249
|
+
output: '反模式清单 + React 代码质量评估',
|
|
1250
|
+
},
|
|
1251
|
+
],
|
|
1252
|
+
submitAction: 'React 组件模式、Hooks 约定、状态管理策略分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
1253
|
+
submitExtras: ['每个候选聚焦单一 React 模式,coreCode 展示标准组件/Hook 骨架'],
|
|
1254
|
+
mistakes: [
|
|
1255
|
+
'不要描述 React 通用 API — 必须说明项目特定的组件约定、Hooks 封装模式',
|
|
1256
|
+
'不要合并状态管理和组件模式 — "使用 Zustand 管理全局状态"和"组件拆分为容器/展示"是独立候选',
|
|
1257
|
+
'不要忽略 useEffect 的依赖管理约定 — 这是 React 项目最高频的 Bug 源',
|
|
1258
|
+
'不要遗漏自定义 Hooks 的命名和封装约定 — 团队的 Hook 抽象策略是核心知识',
|
|
1259
|
+
'【跨维度边界】react-patterns 只关注 React 框架模式 — TypeScript 策略归 ts-js-module',
|
|
1260
|
+
],
|
|
1261
|
+
},
|
|
1262
|
+
// ──────────────────────────────────────────────
|
|
1263
|
+
// 22. vue-patterns — Vue 框架模式
|
|
1264
|
+
// ──────────────────────────────────────────────
|
|
1265
|
+
'vue-patterns': {
|
|
1266
|
+
keywords: [
|
|
1267
|
+
'Vue',
|
|
1268
|
+
'ref',
|
|
1269
|
+
'reactive',
|
|
1270
|
+
'computed',
|
|
1271
|
+
'watch',
|
|
1272
|
+
'watchEffect',
|
|
1273
|
+
'Composition API',
|
|
1274
|
+
'Options API',
|
|
1275
|
+
'Pinia',
|
|
1276
|
+
'Vuex',
|
|
1277
|
+
'SFC',
|
|
1278
|
+
'v-model',
|
|
1279
|
+
'v-bind',
|
|
1280
|
+
'directive',
|
|
1281
|
+
'composable',
|
|
1282
|
+
'defineProps',
|
|
1283
|
+
'defineEmits',
|
|
1284
|
+
'provide',
|
|
1285
|
+
'inject',
|
|
1286
|
+
'Nuxt',
|
|
1287
|
+
],
|
|
1288
|
+
phases: [
|
|
1289
|
+
{
|
|
1290
|
+
name: 'Vue 生态扫描',
|
|
1291
|
+
action: '搜索项目的 Vue 技术栈:API 风格(Composition API/Options API/混用)、状态管理(Pinia/Vuex/provide-inject)、路由(Vue Router/Nuxt)、Composable 清单(use* 函数)、SFC 风格(<script setup> vs <script>)、响应式选型(ref vs reactive 的使用比例)',
|
|
1292
|
+
output: 'Vue 生态全景:API 风格 + 状态管理 + 路由方案 + Composable 清单 + SFC 约定',
|
|
1293
|
+
tools: [
|
|
1294
|
+
'grep_search 搜索 ref/reactive/defineProps/defineEmits/Pinia 关键词',
|
|
1295
|
+
'浏览 composables/stores/pages 目录',
|
|
1296
|
+
],
|
|
1297
|
+
},
|
|
1298
|
+
{
|
|
1299
|
+
name: '组件模式深挖',
|
|
1300
|
+
action: '阅读核心 SFC 和 Composable 文件,提取项目约定:Composable 封装模式(何时抽取为 composable)、ref vs reactive 选择策略、Props/Emits 定义方式(TypeScript interface/runtime 声明)、v-model 组件绑定约定、provide/inject 的使用场景、插槽(slot)使用模式',
|
|
1301
|
+
output: '组件模式规范:Composable 封装策略 + 响应式选型规则 + Props 设计约定',
|
|
1302
|
+
tools: ['read_file 阅读核心 Vue SFC 和 Composable 文件'],
|
|
1303
|
+
},
|
|
1304
|
+
{
|
|
1305
|
+
name: '反模式检测',
|
|
1306
|
+
action: '搜索 Vue 反模式:ref/reactive 混用不一致(同项目无统一策略)、v-for 缺失 :key、过度 watch(应该用 computed 的场景使用了 watch)、Composition API 和 Options API 混用(除迁移期外)、模板中过多逻辑(应抽取为 computed)',
|
|
1307
|
+
output: '反模式清单 + Vue 代码质量评估',
|
|
1308
|
+
},
|
|
1309
|
+
],
|
|
1310
|
+
submitAction: 'Vue 组件模式、Composable 约定、状态管理策略分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
1311
|
+
submitExtras: ['每个候选聚焦单一 Vue 模式'],
|
|
1312
|
+
mistakes: [
|
|
1313
|
+
'不要描述 Vue 通用 API — 必须说明项目特定的 Composition API 约定和 Composable 封装模式',
|
|
1314
|
+
'不要忽略 ref vs reactive 的统一选型策略 — 项目内不一致会导致团队混乱',
|
|
1315
|
+
'不要遗漏 <script setup> 的约定 — defineProps/defineEmits 的 TypeScript 声明方式是高频规则',
|
|
1316
|
+
'不要忽略 provide/inject 的使用边界 — 何时用 provide/inject 何时用 Pinia store',
|
|
1317
|
+
'【跨维度边界】vue-patterns 只关注 Vue 框架模式 — TypeScript 策略归 ts-js-module',
|
|
1318
|
+
],
|
|
1319
|
+
},
|
|
1320
|
+
// ──────────────────────────────────────────────
|
|
1321
|
+
// 23. spring-patterns — Spring 框架模式
|
|
1322
|
+
// ──────────────────────────────────────────────
|
|
1323
|
+
'spring-patterns': {
|
|
1324
|
+
keywords: [
|
|
1325
|
+
'Spring',
|
|
1326
|
+
'Boot',
|
|
1327
|
+
'Bean',
|
|
1328
|
+
'Controller',
|
|
1329
|
+
'Service',
|
|
1330
|
+
'Repository',
|
|
1331
|
+
'@Autowired',
|
|
1332
|
+
'@Inject',
|
|
1333
|
+
'AOP',
|
|
1334
|
+
'Interceptor',
|
|
1335
|
+
'Filter',
|
|
1336
|
+
'Configuration',
|
|
1337
|
+
'Profile',
|
|
1338
|
+
'transaction',
|
|
1339
|
+
'@Transactional',
|
|
1340
|
+
'WebFlux',
|
|
1341
|
+
'Security',
|
|
1342
|
+
],
|
|
1343
|
+
phases: [
|
|
1344
|
+
{
|
|
1345
|
+
name: 'Spring 架构扫描',
|
|
1346
|
+
action: '搜索项目的 Spring 技术栈:Spring Boot 版本 + Web 框架(Spring MVC/WebFlux)、分层(Controller/Service/Repository/Domain)、Bean 管理方式(@Component 扫描/@Configuration 显式注册)、配置管理(application.yml/Profile/Environment)、Spring Security 配置',
|
|
1347
|
+
output: 'Spring 架构全景:技术版本 + 分层约定 + Bean 管理方式 + 配置结构',
|
|
1348
|
+
tools: [
|
|
1349
|
+
'grep_search 搜索 @Controller/@Service/@Repository/@Configuration',
|
|
1350
|
+
'浏览 config/controller/service/repository 目录',
|
|
1351
|
+
],
|
|
1352
|
+
},
|
|
1353
|
+
{
|
|
1354
|
+
name: '框架模式深挖',
|
|
1355
|
+
action: '阅读核心 Spring 组件,提取项目约定:Controller 层约定(响应包装/参数校验/异常处理器)、Service 层约定(事务管理/幂等性)、Repository 层约定(JPA vs MyBatis/查询方法命名)、中间件链(Interceptor→Filter→AOP 的使用分工)、配置管理约定(@Value vs @ConfigurationProperties)',
|
|
1356
|
+
output: 'Spring 框架模式规范:各层职责+约定 + 中间件链 + 配置管理',
|
|
1357
|
+
tools: ['read_file 阅读核心 Controller/Service/Configuration 文件'],
|
|
1358
|
+
},
|
|
1359
|
+
{
|
|
1360
|
+
name: '反模式检测',
|
|
1361
|
+
action: '搜索 Spring 反模式:循环依赖(@Autowired 相互注入)、Controller 膨胀(>200 行/直接调用 Repository)、@Transactional 位置不当(标注在 private 方法/Controller 上)、缺失的参数校验(@Valid 遗漏)、过度使用 @Autowired(应使用构造器注入)',
|
|
1362
|
+
output: '反模式清单 + Spring 代码质量评估',
|
|
1363
|
+
},
|
|
1364
|
+
],
|
|
1365
|
+
submitAction: 'Spring 分层约定、事务管理、中间件配置分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
1366
|
+
submitExtras: ['包含 application.yml/pom.xml 关键配置引用'],
|
|
1367
|
+
mistakes: [
|
|
1368
|
+
'不要描述 Spring 通用 API — 必须说明项目特定的分层约定和 Bean 管理方式',
|
|
1369
|
+
'不要忽略 @Transactional 的使用规则 — 事务边界放在哪一层、传播行为选择',
|
|
1370
|
+
'不要遗漏异常处理器(@ControllerAdvice)的约定 — 统一错误响应格式的规则',
|
|
1371
|
+
'不要忽略构造器注入 vs @Autowired 的选择 — 现代 Spring 推荐构造器注入',
|
|
1372
|
+
'【跨维度边界】spring-patterns 只关注 Spring 框架模式 — Java/Kotlin 语言惯用法归 jvm-annotation',
|
|
1373
|
+
],
|
|
1374
|
+
},
|
|
1375
|
+
// ──────────────────────────────────────────────
|
|
1376
|
+
// 24. swiftui-patterns — SwiftUI 框架模式
|
|
1377
|
+
// ──────────────────────────────────────────────
|
|
1378
|
+
'swiftui-patterns': {
|
|
1379
|
+
keywords: [
|
|
1380
|
+
'SwiftUI',
|
|
1381
|
+
'View',
|
|
1382
|
+
'body',
|
|
1383
|
+
'@State',
|
|
1384
|
+
'@Binding',
|
|
1385
|
+
'@Observable',
|
|
1386
|
+
'@Bindable',
|
|
1387
|
+
'@Environment',
|
|
1388
|
+
'@Query',
|
|
1389
|
+
'modifier',
|
|
1390
|
+
'ViewModifier',
|
|
1391
|
+
'PreviewProvider',
|
|
1392
|
+
'#Preview',
|
|
1393
|
+
'NavigationStack',
|
|
1394
|
+
'NavigationPath',
|
|
1395
|
+
'sheet',
|
|
1396
|
+
'fullScreenCover',
|
|
1397
|
+
'LazyVStack',
|
|
1398
|
+
'LazyHStack',
|
|
1399
|
+
'GeometryReader',
|
|
1400
|
+
],
|
|
1401
|
+
phases: [
|
|
1402
|
+
{
|
|
1403
|
+
name: 'SwiftUI 模式扫描',
|
|
1404
|
+
action: '搜索项目的 SwiftUI 技术栈:数据流属性包装器(@State/@Binding/@Observable/@Environment/@Query 的使用分布)、导航方案(NavigationStack/NavigationPath/自定义 Router)、视图组合方式(子视图拆分粒度/ViewModifier 自定义)、预览配置(#Preview macro/PreviewProvider)',
|
|
1405
|
+
output: 'SwiftUI 技术栈全景:属性包装器选型 + 导航方案 + 视图拆分策略 + 预览配置',
|
|
1406
|
+
tools: [
|
|
1407
|
+
'grep_search 搜索 @State/@Observable/@Environment/NavigationStack 关键词',
|
|
1408
|
+
'浏览 SwiftUI View 集中目录',
|
|
1409
|
+
],
|
|
1410
|
+
},
|
|
1411
|
+
{
|
|
1412
|
+
name: '视图模式深挖',
|
|
1413
|
+
action: '阅读核心 SwiftUI View 文件,提取项目约定:视图拆分策略(何时抽取子视图/何时用 ViewModifier)、数据流规则(@State 局部状态/@Observable 共享状态/@Environment 环境值的选择准则)、导航约定(路由管理方式/sheet vs fullScreenCover 选择)、列表性能(LazyVStack/ForEach 优化)、动画约定(withAnimation/animation modifier 的使用方式)',
|
|
1414
|
+
output: '视图模式规范:拆分策略 + 属性包装器选择准则 + 导航约定 + 性能优化规则',
|
|
1415
|
+
tools: ['read_file 阅读核心 SwiftUI View 文件(覆盖列表/表单/导航场景)'],
|
|
1416
|
+
},
|
|
1417
|
+
{
|
|
1418
|
+
name: '反模式检测',
|
|
1419
|
+
action: '搜索 SwiftUI 反模式:body 过大(>50 行/嵌套过深)、@State 滥用(本应 @Observable 的状态用了 @State)、AnyView 类型擦除(损失性能)、GeometryReader 滥用(非必要时使用)、缺失 .id() 导致列表更新异常',
|
|
1420
|
+
output: '反模式清单 + SwiftUI 代码质量评估',
|
|
1421
|
+
},
|
|
1422
|
+
],
|
|
1423
|
+
submitAction: 'SwiftUI 视图模式、数据流约定、导航方案分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
1424
|
+
submitExtras: ['每个候选聚焦单一 SwiftUI 模式', '标注适用的 iOS/macOS 最低版本要求'],
|
|
1425
|
+
mistakes: [
|
|
1426
|
+
'不要描述 SwiftUI 通用 API — 必须说明项目特定的视图拆分约定和数据流规则',
|
|
1427
|
+
'不要忽略 @Observable vs @State 的选择准则 — 何时局部状态何时共享状态是核心决策',
|
|
1428
|
+
'不要遗漏导航方案约定 — NavigationStack 的路由管理方式差异很大',
|
|
1429
|
+
'不要合并不同层面的约定 — 数据流选型和导航方案应独立提交',
|
|
1430
|
+
'【跨维度边界】swiftui-patterns 只关注 SwiftUI 框架模式 — Swift 语言惯用法归 swift-objc-idiom',
|
|
1431
|
+
],
|
|
1432
|
+
},
|
|
1433
|
+
// ──────────────────────────────────────────────
|
|
1434
|
+
// 25. django-fastapi — Python Web 框架模式
|
|
1435
|
+
// ──────────────────────────────────────────────
|
|
1436
|
+
'django-fastapi': {
|
|
1437
|
+
keywords: [
|
|
1438
|
+
'Django',
|
|
1439
|
+
'FastAPI',
|
|
1440
|
+
'Flask',
|
|
1441
|
+
'model',
|
|
1442
|
+
'serializer',
|
|
1443
|
+
'view',
|
|
1444
|
+
'viewset',
|
|
1445
|
+
'router',
|
|
1446
|
+
'middleware',
|
|
1447
|
+
'ORM',
|
|
1448
|
+
'migration',
|
|
1449
|
+
'Pydantic',
|
|
1450
|
+
'endpoint',
|
|
1451
|
+
'dependency',
|
|
1452
|
+
'Alembic',
|
|
1453
|
+
'SQLAlchemy',
|
|
1454
|
+
'Celery',
|
|
1455
|
+
'admin',
|
|
1456
|
+
],
|
|
1457
|
+
phases: [
|
|
1458
|
+
{
|
|
1459
|
+
name: 'Python Web 框架扫描',
|
|
1460
|
+
action: '搜索项目的 Python Web 技术栈:框架选型(Django/FastAPI/Flask/Starlette)、ORM(Django ORM/SQLAlchemy/Tortoise)、序列化(Django REST Serializer/Pydantic/Marshmallow)、任务队列(Celery/Dramatiq/RQ)、应用目录组织(Django app/FastAPI router/Blueprint)',
|
|
1461
|
+
output: 'Web 框架生态全景:框架+ORM+序列化+任务队列 + 应用组织方式',
|
|
1462
|
+
tools: ['grep_search 搜索框架标志性 import/装饰器', '浏览应用/路由/模型目录'],
|
|
1463
|
+
},
|
|
1464
|
+
{
|
|
1465
|
+
name: '框架模式深挖',
|
|
1466
|
+
action: '阅读核心框架组件,提取项目约定:Model 定义规范(字段命名/Meta 配置/Manager 自定义)、View/Router 组织(URL 命名空间/版本管理/权限装饰器)、序列化策略(嵌套序列化器/自定义验证/动态字段)、中间件链(认证/CORS/日志/限流的顺序和实现)、数据库迁移管理(migration 文件组织/数据迁移策略)',
|
|
1467
|
+
output: '框架模式规范:Model 约定 + View 组织 + 序列化策略 + 中间件链 + 迁移管理',
|
|
1468
|
+
tools: ['read_file 阅读核心 models/views/serializers/middleware 文件'],
|
|
1469
|
+
},
|
|
1470
|
+
{
|
|
1471
|
+
name: '反模式检测',
|
|
1472
|
+
action: '搜索 Python Web 反模式:N+1 查询(缺失 select_related/prefetch_related/joinedload)、View 膨胀(业务逻辑写在 View 中而非 Service 层)、缺失 migration(Model 变更后未生成 migration)、缺失输入校验(未使用 Serializer/Pydantic 校验)、同步阻塞(在异步框架中调用同步 I/O)',
|
|
1473
|
+
output: '反模式清单 + 框架代码质量评估',
|
|
1474
|
+
},
|
|
1475
|
+
],
|
|
1476
|
+
submitAction: '框架分层约定、ORM 规范、中间件配置分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
1477
|
+
submitExtras: ['包含 settings.py/配置文件关键引用'],
|
|
1478
|
+
mistakes: [
|
|
1479
|
+
'不要描述 Django/FastAPI 通用 API — 必须说明项目特定的框架约定和组织方式',
|
|
1480
|
+
'不要忽略 N+1 查询防范规则 — select_related/prefetch_related 的使用约定是性能核心',
|
|
1481
|
+
'不要遗漏 migration 管理约定 — 数据迁移(data migration)和 schema 迁移的区分',
|
|
1482
|
+
'不要忽略异步框架(FastAPI)中的阻塞检测 — 同步 I/O 在 async 视图中会阻塞事件循环',
|
|
1483
|
+
'【跨维度边界】django-fastapi 只关注 Python Web 框架模式 — Python 语言惯用法归 python-structure',
|
|
1484
|
+
],
|
|
1485
|
+
},
|
|
1486
|
+
};
|
|
1487
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1488
|
+
// Built SOP Registry
|
|
1489
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1490
|
+
/** 完整 SOP 注册表(由 COMPACT_SOPS 构建,消费者使用此对象) */
|
|
1491
|
+
const DIMENSION_SOP = Object.fromEntries(Object.entries(COMPACT_SOPS).map(([id, def]) => [id, _sop(def)]));
|
|
1492
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1493
|
+
// PRE_SUBMIT_CHECKLIST
|
|
1494
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1495
|
+
/**
|
|
1496
|
+
* 提交前全局质量检查清单(跨所有维度通用)
|
|
1497
|
+
* 消费者: MissionBriefingBuilder.ts — 嵌入 submissionSpec
|
|
1498
|
+
*/
|
|
1499
|
+
export const PRE_SUBMIT_CHECKLIST = {
|
|
1500
|
+
MUST: [
|
|
1501
|
+
'title: 中文 ≤20 字,引用项目真实类名或模式名(不以项目名开头)',
|
|
1502
|
+
'description: 中文简述 ≤80 字',
|
|
1503
|
+
'trigger: @前缀 kebab-case 唯一标识符',
|
|
1504
|
+
'kind: rule | pattern | fact(必须选一)',
|
|
1505
|
+
'content.markdown: ≥200 字符的项目特写,含代码块+来源标注 (来源: FileName.ext:行号)',
|
|
1506
|
+
'content.rationale: 设计原理说明',
|
|
1507
|
+
'coreCode: 3-8 行纯代码骨架,语法完整可复制',
|
|
1508
|
+
'headers: import 语句数组(无则 [])',
|
|
1509
|
+
'doClause: 英文祈使句 ≤60 tokens,以动词开头',
|
|
1510
|
+
'dontClause: 英文反向约束',
|
|
1511
|
+
'whenClause: 英文触发场景描述',
|
|
1512
|
+
'reasoning.whyStandard + reasoning.sources(非空文件列表)',
|
|
1513
|
+
'sourceRefs: 引用的源文件列表',
|
|
1514
|
+
'usageGuide: ### 使用指南 格式',
|
|
1515
|
+
],
|
|
1516
|
+
SHOULD: [
|
|
1517
|
+
'每个候选只聚焦单一知识点 — 不要合并不同模式',
|
|
1518
|
+
'content 中使用 ✅ / ❌ 对比正确写法和禁止写法',
|
|
1519
|
+
'coreCode 使用项目实际的代码而非伪代码',
|
|
1520
|
+
'description 提及影响范围(全局 / 某层 / 某模块)',
|
|
1521
|
+
'tags 包含有意义的搜索关键词',
|
|
1522
|
+
'confidence ≥0.85 才提交',
|
|
1523
|
+
],
|
|
1524
|
+
FAIL_EXAMPLES: [
|
|
1525
|
+
{
|
|
1526
|
+
bad: "title: '项目使用了 MVVM 模式'",
|
|
1527
|
+
good: "title: 'ViewModel 的 Output 必须通过 Driver 转换'",
|
|
1528
|
+
why: 'title 必须具体到可执行的规则,不能是泛泛的描述',
|
|
1529
|
+
},
|
|
1530
|
+
{
|
|
1531
|
+
bad: "content.markdown: '本项目使用 RxSwift 进行响应式编程。'",
|
|
1532
|
+
good: "content.markdown: '## ViewModel Output 转换规范\\n\\n所有 ViewModel 的 Output 统一使用...(来源: HomeViewModel.swift:45)'",
|
|
1533
|
+
why: 'content 必须 ≥200 字符,包含项目特有的实现细节和代码引用',
|
|
1534
|
+
},
|
|
1535
|
+
],
|
|
1536
|
+
};
|
|
1537
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1538
|
+
// Query Functions
|
|
1539
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1540
|
+
/**
|
|
1541
|
+
* 获取指定维度的完整 SOP
|
|
1542
|
+
* @returns FullSop | undefined
|
|
1543
|
+
*/
|
|
1544
|
+
export function getDimensionSOP(dimId) {
|
|
1545
|
+
return DIMENSION_SOP[dimId];
|
|
1546
|
+
}
|
|
1547
|
+
/**
|
|
1548
|
+
* 获取维度的关注关键词(用于 EpisodicMemory 跨维度匹配)
|
|
1549
|
+
* 优先使用 SOP 中定义的 focusKeywords,fallback 到从 guideText 解析
|
|
1550
|
+
*/
|
|
1551
|
+
export function getDimensionFocusKeywords(dimId, guideText = '') {
|
|
1552
|
+
const sop = DIMENSION_SOP[dimId];
|
|
1553
|
+
if (sop?.focusKeywords && sop.focusKeywords.length > 0) {
|
|
1554
|
+
return sop.focusKeywords;
|
|
1555
|
+
}
|
|
1556
|
+
// fallback: 从 guideText 中提取关键词
|
|
1557
|
+
if (!guideText) {
|
|
1558
|
+
return [];
|
|
1559
|
+
}
|
|
1560
|
+
const keywords = [];
|
|
1561
|
+
// 提取中文关键词(2-6字)
|
|
1562
|
+
const zhMatches = guideText.match(/[\u4E00-\u9FFF]{2,6}/g);
|
|
1563
|
+
if (zhMatches) {
|
|
1564
|
+
keywords.push(...zhMatches.slice(0, 8));
|
|
1565
|
+
}
|
|
1566
|
+
// 提取英文关键词(大写开头或全大写)
|
|
1567
|
+
const enMatches = guideText.match(/\b[A-Z][a-zA-Z]{2,}\b/g);
|
|
1568
|
+
if (enMatches) {
|
|
1569
|
+
keywords.push(...enMatches.slice(0, 5));
|
|
1570
|
+
}
|
|
1571
|
+
return keywords;
|
|
1572
|
+
}
|
|
1573
|
+
/**
|
|
1574
|
+
* 将 SOP / analysisGuide 压缩为纯文本(用于 Level 5 极致压缩模式)
|
|
1575
|
+
* 接受 analysisGuide 对象(含 steps + commonMistakes 字段)
|
|
1576
|
+
*/
|
|
1577
|
+
export function sopToCompactText(guide) {
|
|
1578
|
+
if (!guide || typeof guide !== 'object') {
|
|
1579
|
+
return '';
|
|
1580
|
+
}
|
|
1581
|
+
const lines = [];
|
|
1582
|
+
const steps = Array.isArray(guide.steps) ? guide.steps : [];
|
|
1583
|
+
for (const step of steps) {
|
|
1584
|
+
if (typeof step === 'object' && step !== null) {
|
|
1585
|
+
const s = step;
|
|
1586
|
+
const phase = typeof s.phase === 'string' ? s.phase : '';
|
|
1587
|
+
const action = typeof s.action === 'string' ? s.action : '';
|
|
1588
|
+
lines.push(`${phase}: ${action}`);
|
|
1589
|
+
if (typeof s.expectedOutput === 'string') {
|
|
1590
|
+
lines.push(` → ${s.expectedOutput}`);
|
|
1591
|
+
}
|
|
1592
|
+
}
|
|
1593
|
+
}
|
|
1594
|
+
const mistakes = Array.isArray(guide.commonMistakes) ? guide.commonMistakes : [];
|
|
1595
|
+
if (mistakes.length > 0) {
|
|
1596
|
+
lines.push('⚠️ 常见错误:');
|
|
1597
|
+
for (const m of mistakes) {
|
|
1598
|
+
if (typeof m === 'string') {
|
|
1599
|
+
lines.push(` - ${m}`);
|
|
1600
|
+
}
|
|
1601
|
+
}
|
|
1602
|
+
}
|
|
1603
|
+
return lines.join('\n');
|
|
1604
|
+
}
|