autosnippet 3.3.7 → 3.3.9
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/README.md +1 -0
- package/dashboard/dist/assets/icons-BMNb0V6L.js +1 -0
- package/dashboard/dist/assets/index-DEU4tJtP.js +112 -0
- package/dashboard/dist/assets/index-DHJ1Dj7u.css +1 -0
- package/dashboard/dist/index.html +3 -3
- package/dist/bin/cli.js +7 -4
- package/dist/lib/agent/core/ChatAgentPrompts.js +57 -21
- package/dist/lib/agent/core/LoopContext.d.ts +1 -0
- package/dist/lib/agent/core/ToolExecutionPipeline.js +13 -0
- package/dist/lib/agent/memory/ActiveContext.d.ts +0 -2
- package/dist/lib/agent/memory/ActiveContext.js +0 -2
- package/dist/lib/agent/memory/MemoryEmbeddingStore.d.ts +49 -0
- package/dist/lib/agent/memory/MemoryEmbeddingStore.js +159 -0
- package/dist/lib/agent/memory/MemoryRetriever.d.ts +2 -0
- package/dist/lib/agent/memory/MemoryRetriever.js +25 -11
- package/dist/lib/agent/memory/MemoryStore.d.ts +8 -41
- package/dist/lib/agent/memory/MemoryStore.js +196 -261
- package/dist/lib/agent/memory/PersistentMemory.d.ts +2 -0
- package/dist/lib/agent/memory/PersistentMemory.js +4 -5
- package/dist/lib/agent/memory/SessionStore.d.ts +0 -2
- package/dist/lib/agent/memory/SessionStore.js +0 -2
- package/dist/lib/agent/tools/ast-graph.js +21 -19
- package/dist/lib/agent/tools/infrastructure.js +3 -2
- package/dist/lib/agent/tools/project-access.d.ts +2 -2
- package/dist/lib/agent/tools/project-access.js +5 -4
- package/dist/lib/bootstrap.js +8 -2
- package/dist/lib/cli/AiScanService.js +4 -17
- package/dist/lib/cli/KnowledgeSyncService.d.ts +7 -37
- package/dist/lib/cli/KnowledgeSyncService.js +23 -51
- package/dist/lib/cli/SetupService.js +5 -4
- package/dist/lib/core/ast/ProjectGraph.js +5 -27
- package/dist/lib/core/discovery/CustomConfigDiscoverer.d.ts +0 -2
- package/dist/lib/core/discovery/CustomConfigDiscoverer.js +0 -2
- package/dist/lib/domain/dimension/DimensionRegistry.d.ts +0 -2
- package/dist/lib/domain/dimension/DimensionRegistry.js +0 -2
- package/dist/lib/domain/dimension/DimensionSop.js +44 -33
- package/dist/lib/domain/dimension/UnifiedDimension.d.ts +0 -2
- package/dist/lib/domain/dimension/UnifiedDimension.js +0 -2
- package/dist/lib/domain/knowledge/Lifecycle.d.ts +26 -0
- package/dist/lib/domain/knowledge/Lifecycle.js +42 -0
- package/dist/lib/domain/knowledge/index.d.ts +2 -1
- package/dist/lib/domain/knowledge/index.js +1 -1
- package/dist/lib/external/mcp/McpServer.js +19 -2
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/BootstrapSnapshot.d.ts +2 -1
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/BootstrapSnapshot.js +102 -153
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/mock-pipeline.js +10 -29
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +33 -16
- package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.d.ts +1 -1
- package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.js +41 -37
- package/dist/lib/external/mcp/handlers/bootstrap-external.js +1 -1
- package/dist/lib/external/mcp/handlers/dimension-complete-external.js +7 -3
- package/dist/lib/external/mcp/handlers/evolve-external.d.ts +1 -0
- package/dist/lib/external/mcp/handlers/evolve-external.js +13 -16
- package/dist/lib/external/mcp/handlers/guard.js +15 -24
- package/dist/lib/external/mcp/handlers/panorama.js +9 -9
- package/dist/lib/external/mcp/handlers/rescan-external.js +7 -6
- package/dist/lib/external/mcp/handlers/rescan-internal.js +9 -5
- package/dist/lib/external/mcp/handlers/search.js +3 -1
- package/dist/lib/external/mcp/handlers/skill.js +4 -4
- package/dist/lib/external/mcp/handlers/structure.js +8 -12
- package/dist/lib/external/mcp/handlers/system.js +10 -34
- package/dist/lib/http/routes/ai.js +11 -13
- package/dist/lib/http/routes/guardReport.js +3 -5
- package/dist/lib/http/routes/panorama.js +12 -12
- package/dist/lib/http/routes/recipes.js +59 -8
- package/dist/lib/http/routes/remote.js +3 -13
- package/dist/lib/http/routes/search.js +11 -8
- package/dist/lib/infrastructure/audit/AuditLogger.d.ts +20 -3
- package/dist/lib/infrastructure/audit/AuditStore.d.ts +28 -29
- package/dist/lib/infrastructure/audit/AuditStore.js +81 -88
- package/dist/lib/infrastructure/database/DatabaseConnection.js +7 -6
- package/dist/lib/infrastructure/database/drizzle/schema.d.ts +180 -2
- package/dist/lib/infrastructure/database/drizzle/schema.js +23 -3
- package/dist/lib/injection/ServiceContainer.js +7 -4
- package/dist/lib/injection/ServiceMap.d.ts +20 -0
- package/dist/lib/injection/modules/AppModule.js +2 -1
- package/dist/lib/injection/modules/GuardModule.js +5 -5
- package/dist/lib/injection/modules/InfraModule.js +60 -0
- package/dist/lib/injection/modules/KnowledgeModule.js +86 -51
- package/dist/lib/injection/modules/PanoramaModule.js +16 -10
- package/dist/lib/injection/modules/VectorModule.js +3 -0
- package/dist/lib/repository/audit/AuditRepository.d.ts +107 -0
- package/dist/lib/repository/audit/AuditRepository.js +272 -0
- package/dist/lib/repository/base/RepositoryBase.d.ts +46 -0
- package/dist/lib/repository/base/RepositoryBase.js +32 -0
- package/dist/lib/repository/bootstrap/BootstrapRepository.d.ts +94 -0
- package/dist/lib/repository/bootstrap/BootstrapRepository.js +246 -0
- package/dist/lib/repository/code/CodeEntityRepository.d.ts +91 -0
- package/dist/lib/repository/code/CodeEntityRepository.js +361 -0
- package/dist/lib/repository/delivery/DeliveryRepoAdapter.d.ts +39 -0
- package/dist/lib/repository/delivery/DeliveryRepoAdapter.js +23 -0
- package/dist/lib/repository/evolution/LifecycleEventRepository.d.ts +51 -0
- package/dist/lib/repository/evolution/LifecycleEventRepository.js +119 -0
- package/dist/lib/repository/evolution/ProposalRepository.d.ts +9 -12
- package/dist/lib/repository/evolution/ProposalRepository.js +114 -57
- package/dist/lib/repository/guard/GuardViolationRepository.d.ts +104 -0
- package/dist/lib/repository/guard/GuardViolationRepository.js +217 -0
- package/dist/lib/repository/knowledge/KnowledgeEdgeRepository.d.ts +129 -0
- package/dist/lib/repository/knowledge/KnowledgeEdgeRepository.js +475 -0
- package/dist/lib/repository/knowledge/KnowledgeFileStore.d.ts +39 -0
- package/dist/lib/repository/knowledge/KnowledgeFileStore.js +12 -0
- package/dist/lib/repository/knowledge/KnowledgeRepository.impl.d.ts +295 -11
- package/dist/lib/repository/knowledge/KnowledgeRepository.impl.js +608 -13
- package/dist/lib/repository/knowledge/KnowledgeUnitOfWork.d.ts +61 -0
- package/dist/lib/repository/knowledge/KnowledgeUnitOfWork.js +156 -0
- package/dist/lib/repository/memory/MemoryRepository.d.ts +90 -0
- package/dist/lib/repository/memory/MemoryRepository.js +260 -0
- package/dist/lib/repository/search/SearchRepoAdapter.d.ts +92 -0
- package/dist/lib/repository/search/SearchRepoAdapter.js +124 -0
- package/dist/lib/repository/session/SessionRepository.d.ts +46 -0
- package/dist/lib/repository/session/SessionRepository.js +110 -0
- package/dist/lib/repository/sourceref/RecipeSourceRefRepository.d.ts +66 -0
- package/dist/lib/repository/sourceref/RecipeSourceRefRepository.js +182 -0
- package/dist/lib/repository/sync/SyncRepoAdapter.d.ts +58 -0
- package/dist/lib/repository/sync/SyncRepoAdapter.js +58 -0
- package/dist/lib/service/bootstrap/UiStartupTasks.js +5 -6
- package/dist/lib/service/bootstrap/bootstrap-event-types.d.ts +0 -1
- package/dist/lib/service/bootstrap/bootstrap-event-types.js +0 -1
- package/dist/lib/service/cleanup/CleanupService.js +8 -4
- package/dist/lib/service/delivery/CursorDeliveryPipeline.js +21 -9
- package/dist/lib/service/evolution/ConsolidationAdvisor.d.ts +4 -9
- package/dist/lib/service/evolution/ConsolidationAdvisor.js +34 -70
- package/dist/lib/service/evolution/ContentPatcher.d.ts +4 -12
- package/dist/lib/service/evolution/ContentPatcher.js +48 -19
- package/dist/lib/service/evolution/ContradictionDetector.d.ts +3 -7
- package/dist/lib/service/evolution/ContradictionDetector.js +17 -24
- package/dist/lib/service/evolution/DecayDetector.d.ts +10 -9
- package/dist/lib/service/evolution/DecayDetector.js +63 -57
- package/dist/lib/service/evolution/EnhancementSuggester.d.ts +3 -9
- package/dist/lib/service/evolution/EnhancementSuggester.js +42 -86
- package/dist/lib/service/evolution/KnowledgeMetabolism.d.ts +4 -4
- package/dist/lib/service/evolution/KnowledgeMetabolism.js +102 -71
- package/dist/lib/service/evolution/ProposalExecutor.d.ts +5 -12
- package/dist/lib/service/evolution/ProposalExecutor.js +64 -69
- package/dist/lib/service/evolution/RecipeLifecycleSupervisor.d.ts +9 -14
- package/dist/lib/service/evolution/RecipeLifecycleSupervisor.js +94 -155
- package/dist/lib/service/evolution/RecipeRelevanceAuditor.d.ts +4 -1
- package/dist/lib/service/evolution/RecipeRelevanceAuditor.js +50 -49
- package/dist/lib/service/evolution/RedundancyAnalyzer.d.ts +3 -7
- package/dist/lib/service/evolution/RedundancyAnalyzer.js +15 -22
- package/dist/lib/service/evolution/StagingManager.d.ts +6 -15
- package/dist/lib/service/evolution/StagingManager.js +37 -95
- package/dist/lib/service/evolution/createSupersedeProposal.d.ts +1 -1
- package/dist/lib/service/evolution/createSupersedeProposal.js +7 -8
- package/dist/lib/service/guard/CoverageAnalyzer.d.ts +3 -7
- package/dist/lib/service/guard/CoverageAnalyzer.js +9 -11
- package/dist/lib/service/guard/GuardCheckEngine.d.ts +3 -0
- package/dist/lib/service/guard/GuardCheckEngine.js +14 -22
- package/dist/lib/service/guard/ReverseGuard.d.ts +4 -7
- package/dist/lib/service/guard/ReverseGuard.js +21 -31
- package/dist/lib/service/guard/ViolationsStore.d.ts +15 -21
- package/dist/lib/service/guard/ViolationsStore.js +75 -69
- package/dist/lib/service/knowledge/CodeEntityGraph.d.ts +39 -63
- package/dist/lib/service/knowledge/CodeEntityGraph.js +418 -512
- package/dist/lib/service/knowledge/ConfidenceRouter.js +18 -9
- package/dist/lib/service/knowledge/KnowledgeFileWriter.d.ts +2 -1
- package/dist/lib/service/knowledge/KnowledgeGraphService.d.ts +18 -60
- package/dist/lib/service/knowledge/KnowledgeGraphService.js +58 -109
- package/dist/lib/service/knowledge/KnowledgeService.d.ts +15 -1
- package/dist/lib/service/knowledge/KnowledgeService.js +76 -38
- package/dist/lib/service/knowledge/RecipeProductionGateway.d.ts +0 -2
- package/dist/lib/service/knowledge/RecipeProductionGateway.js +0 -2
- package/dist/lib/service/knowledge/SourceRefReconciler.d.ts +5 -13
- package/dist/lib/service/knowledge/SourceRefReconciler.js +58 -78
- package/dist/lib/service/panorama/CouplingAnalyzer.d.ts +5 -3
- package/dist/lib/service/panorama/CouplingAnalyzer.js +102 -39
- package/dist/lib/service/panorama/DimensionAnalyzer.d.ts +7 -4
- package/dist/lib/service/panorama/DimensionAnalyzer.js +72 -25
- package/dist/lib/service/panorama/LayerInferrer.js +1 -1
- package/dist/lib/service/panorama/ModuleDiscoverer.d.ts +7 -6
- package/dist/lib/service/panorama/ModuleDiscoverer.js +174 -82
- package/dist/lib/service/panorama/PanoramaAggregator.d.ts +10 -3
- package/dist/lib/service/panorama/PanoramaAggregator.js +67 -79
- package/dist/lib/service/panorama/PanoramaScanner.d.ts +5 -1
- package/dist/lib/service/panorama/PanoramaScanner.js +32 -31
- package/dist/lib/service/panorama/PanoramaService.d.ts +11 -8
- package/dist/lib/service/panorama/PanoramaService.js +41 -66
- package/dist/lib/service/panorama/PanoramaTypes.d.ts +3 -0
- package/dist/lib/service/panorama/RoleRefiner.d.ts +8 -5
- package/dist/lib/service/panorama/RoleRefiner.js +52 -283
- package/dist/lib/service/panorama/TechStackProfiler.js +7 -119
- package/dist/lib/service/quality/QualityScorer.d.ts +45 -26
- package/dist/lib/service/quality/QualityScorer.js +157 -83
- package/dist/lib/service/search/SearchEngine.d.ts +1 -0
- package/dist/lib/service/search/SearchEngine.js +32 -37
- package/dist/lib/service/signal/HitRecorder.js +5 -5
- package/dist/lib/service/skills/RuleRecallStrategy.js +7 -3
- package/dist/lib/service/skills/SignalCollector.d.ts +5 -8
- package/dist/lib/service/skills/SignalCollector.js +28 -55
- package/dist/lib/service/skills/SkillAdvisor.d.ts +7 -13
- package/dist/lib/service/skills/SkillAdvisor.js +30 -79
- package/dist/lib/service/vector/SyncCoordinator.d.ts +3 -1
- package/dist/lib/service/vector/SyncCoordinator.js +25 -3
- package/dist/lib/service/vector/VectorService.d.ts +2 -0
- package/dist/lib/service/vector/VectorService.js +3 -0
- package/dist/lib/service/wiki/WikiGenerator.js +1 -1
- package/dist/lib/shared/LanguageProfiles.d.ts +109 -0
- package/dist/lib/shared/LanguageProfiles.js +939 -0
- package/dist/lib/shared/LanguageService.d.ts +6 -0
- package/dist/lib/shared/LanguageService.js +16 -0
- package/dist/lib/shared/PathGuard.js +16 -10
- package/dist/lib/shared/constants.d.ts +19 -19
- package/dist/lib/shared/constants.js +10 -10
- package/dist/lib/shared/isOwnDevRepo.d.ts +29 -4
- package/dist/lib/shared/isOwnDevRepo.js +64 -4
- package/dist/lib/shared/schemas/mcp-tools.d.ts +1 -1
- package/dist/lib/types/project-snapshot-builder.d.ts +0 -1
- package/dist/lib/types/project-snapshot-builder.js +0 -1
- package/dist/lib/types/project-snapshot.d.ts +0 -1
- package/dist/lib/types/project-snapshot.js +0 -1
- package/dist/lib/types/snapshot-views.d.ts +0 -2
- package/dist/lib/types/snapshot-views.js +0 -1
- package/package.json +2 -1
- package/dashboard/dist/assets/icons-FHns2ypa.js +0 -1
- package/dashboard/dist/assets/index-BRJv5Y3r.js +0 -135
- package/dashboard/dist/assets/index-DzoB7kxK.css +0 -1
- package/dist/lib/repository/base/BaseRepository.d.ts +0 -53
- package/dist/lib/repository/base/BaseRepository.js +0 -226
|
@@ -182,7 +182,7 @@ const COMPACT_SOPS = {
|
|
|
182
182
|
phases: [
|
|
183
183
|
{
|
|
184
184
|
name: '架构层次映射',
|
|
185
|
-
action: '浏览项目根目录和核心子目录,识别分层架构类型(MVC/MVVM/Clean Architecture/Feature-based/Monorepo)。阅读构建配置(Package.swift/build.gradle/package.json/Cargo.toml)确认模块划分。绘制层次关系:哪些目录属于哪一层、各层的职责边界',
|
|
185
|
+
action: '浏览项目根目录和核心子目录,识别分层架构类型(MVC/MVVM/Clean Architecture/Feature-based/Monorepo)。阅读构建配置(Package.swift/build.gradle/package.json/Cargo.toml/go.mod/pyproject.toml/CMakeLists.txt)确认模块划分。绘制层次关系:哪些目录属于哪一层、各层的职责边界',
|
|
186
186
|
output: '架构层次图:层名→目录映射→职责定义→层间依赖方向(上层→下层,禁止反向)',
|
|
187
187
|
tools: ['list_dir 浏览目录树(至少两层深度)', 'read_file 阅读构建配置文件确认模块划分'],
|
|
188
188
|
},
|
|
@@ -302,7 +302,7 @@ const COMPACT_SOPS = {
|
|
|
302
302
|
phases: [
|
|
303
303
|
{
|
|
304
304
|
name: '数据流框架识别',
|
|
305
|
-
action: '搜索项目中的状态管理和事件框架信号:
|
|
305
|
+
action: '搜索项目中的状态管理和事件框架信号:Rx系列(Observable/Subject/Driver/Relay/Flowable), Combine/Publisher, Redux/Flux(Store/Action/Reducer/dispatch), Vuex/Pinia/Zustand(state/mutations/actions), EventBus/Notification/KVO/LiveData/StateFlow。确认主框架选型及其在项目中的角色分配',
|
|
306
306
|
output: '数据流技术选型全景:主框架 + 辅助机制 + 各层的角色分配',
|
|
307
307
|
tools: [
|
|
308
308
|
'grep_search 搜索 Observable/Subject/Publisher/Store/dispatch 等信号词',
|
|
@@ -317,7 +317,7 @@ const COMPACT_SOPS = {
|
|
|
317
317
|
},
|
|
318
318
|
{
|
|
319
319
|
name: '订阅泄漏检测',
|
|
320
|
-
action: '
|
|
320
|
+
action: '搜索内存泄漏风险模式:未取消的订阅/观察者(disposeBag/cancellable/removeObserver/取消订阅)、闭包/回调内强引用导致循环引用、未取消的 Timer/定时器、长生命周期对象持有短生命周期对象的订阅',
|
|
321
321
|
output: '泄漏风险点清单 + 项目已有的防泄漏机制(disposeBag 管理策略、weak self 约定)',
|
|
322
322
|
},
|
|
323
323
|
],
|
|
@@ -325,8 +325,8 @@ const COMPACT_SOPS = {
|
|
|
325
325
|
submitExtras: ['每个候选聚焦单一数据流模式,说明其适用场景和约束'],
|
|
326
326
|
mistakes: [
|
|
327
327
|
'不要只描述框架 API(如 "使用 Observable")— 必须说明项目如何使用该框架、约定了哪些模式',
|
|
328
|
-
'不要混淆不同框架的模式 —
|
|
329
|
-
'不要忽略订阅的生命周期管理 —
|
|
328
|
+
'不要混淆不同框架的模式 — 如果项目同时使用多种响应式/状态管理框架,应按框架分别提交',
|
|
329
|
+
'不要忽略订阅的生命周期管理 — 订阅取消/引用管理/防泄漏机制的使用约定是核心知识',
|
|
330
330
|
'不要遗漏 Output 类型约束 — "Driver 不能 error" 这类约束比 "使用 Driver" 更有价值',
|
|
331
331
|
'【跨维度边界】data-event-flow 只关注数据流/事件/状态 — UI 组件构建归 ui-interaction,设计模式归 design-patterns',
|
|
332
332
|
],
|
|
@@ -367,7 +367,7 @@ const COMPACT_SOPS = {
|
|
|
367
367
|
},
|
|
368
368
|
{
|
|
369
369
|
name: '规则强度分级',
|
|
370
|
-
action: '区分硬规则(CI 强制执行、lint 报错、pre-commit 拦截)和软指南(文档建议但无自动化检查)。阅读 CI 配置(.github/workflows/)、lint 配置(biome.json/.eslintrc/swiftlint.yml)、pre-commit/husky 配置,提取被工具链强制的规则',
|
|
370
|
+
action: '区分硬规则(CI 强制执行、lint 报错、pre-commit 拦截)和软指南(文档建议但无自动化检查)。阅读 CI 配置(.github/workflows/)、lint 配置(biome.json/.eslintrc/swiftlint.yml/rustfmt.toml/.golangci.yml/flake8/mypy.ini)、pre-commit/husky 配置,提取被工具链强制的规则',
|
|
371
371
|
output: '规则强度矩阵:硬规则(工具强制)vs 软指南(文档建议)+ 每条规则的强制机制',
|
|
372
372
|
tools: [
|
|
373
373
|
'read_file 阅读 CI 配置和 lint 配置文件',
|
|
@@ -420,29 +420,31 @@ const COMPACT_SOPS = {
|
|
|
420
420
|
phases: [
|
|
421
421
|
{
|
|
422
422
|
name: '并发模型全景扫描',
|
|
423
|
-
action: '搜索项目中的并发原语和异步模式:structured concurrency(async/await/Task/TaskGroup), actors
|
|
423
|
+
action: '搜索项目中的并发原语和异步模式:structured concurrency(async/await/Task/TaskGroup/asyncio), actors/isolates, locks/mutexes(Mutex/synchronized/Lock/RWLock), thread pools/executors/dispatch queues, Promise/Future/Rx/Channel/Flow。统计各种并发模型的使用频率和场景分布',
|
|
424
424
|
output: '并发模型使用全景:主模型选型 + 各层/各场景的并发策略分布',
|
|
425
|
-
tools: [
|
|
425
|
+
tools: [
|
|
426
|
+
'grep_search 搜索 async/await/Task/Actor/Lock/Mutex/Thread/coroutine/goroutine 等关键词',
|
|
427
|
+
],
|
|
426
428
|
},
|
|
427
429
|
{
|
|
428
430
|
name: '线程安全策略提取',
|
|
429
|
-
action: '
|
|
431
|
+
action: '阅读核心并发文件,提取项目的线程安全约定:共享可变状态的保护方式(Lock/Actor/Mutex/串行队列/synchronized)、UI 线程保障机制(MainActor/main thread dispatch/runOnUiThread)、跨线程数据传递方式(值拷贝/不可变引用/Channel/Queue)、线程安全标注或约束(Sendable/ThreadSafe/@WorkerThread)',
|
|
430
432
|
output: '线程安全策略矩阵:各场景的标准做法 + 标准代码骨架',
|
|
431
433
|
tools: ['read_file 阅读包含并发逻辑的核心文件'],
|
|
432
434
|
},
|
|
433
435
|
{
|
|
434
436
|
name: '竞态与死锁风险检测',
|
|
435
|
-
action: '
|
|
437
|
+
action: '搜索并发风险信号:未加锁的共享可变状态、缺少 UI 线程保障的界面更新代码、嵌套锁(潜在死锁)、异步闭包/回调中的资源泄漏(未释放引用/未取消订阅)、回调地狱(多层嵌套的异步回调)',
|
|
436
438
|
output: '并发风险点清单 + 项目已有的防护机制评估',
|
|
437
439
|
},
|
|
438
440
|
],
|
|
439
441
|
submitAction: '并发模型选型、线程安全策略、锁使用模式分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
440
442
|
submitExtras: ['每个候选聚焦单一并发策略,coreCode 展示标准的线程安全写法'],
|
|
441
443
|
mistakes: [
|
|
442
|
-
'不要把不同并发策略混在一个候选中 — Actor
|
|
444
|
+
'不要把不同并发策略混在一个候选中 — 不同锁/队列/Actor 模式应独立成条',
|
|
443
445
|
'不要写通用并发理论 — 必须引用项目实际代码,展示项目团队选择的具体方案',
|
|
444
|
-
'不要忽略
|
|
445
|
-
'
|
|
446
|
+
'不要忽略 UI 线程保障 — 确保界面更新总是在主线程/UI 线程执行是最常见的并发约束',
|
|
447
|
+
'不要忽略异步上下文中的资源管理 — 引用捕获/订阅取消/上下文传递策略是关键决策',
|
|
446
448
|
'【跨维度边界】concurrency-async 只关注并发/线程安全 — 错误处理归 error-resilience,性能优化归 performance-optimization',
|
|
447
449
|
],
|
|
448
450
|
},
|
|
@@ -475,7 +477,7 @@ const COMPACT_SOPS = {
|
|
|
475
477
|
phases: [
|
|
476
478
|
{
|
|
477
479
|
name: '网络架构映射',
|
|
478
|
-
action: '搜索项目的网络请求基础设施:HTTP 客户端选型(URLSession/
|
|
480
|
+
action: '搜索项目的网络请求基础设施:HTTP 客户端选型(URLSession/OkHttp/Retrofit/fetch/axios/requests/net/http)、API 定义方式(枚举/类/装饰器/接口)、请求构建流程(URL+参数+Header+Body 的组装方式)、拦截器/中间件链(认证注入/日志/重试/缓存)',
|
|
479
481
|
output: '网络架构全景图:技术选型 → 分层结构 → 请求流水线(构建→拦截→发送→响应→解析)',
|
|
480
482
|
tools: [
|
|
481
483
|
'grep_search 搜索 request/response/API/endpoint/interceptor 关键词',
|
|
@@ -497,7 +499,7 @@ const COMPACT_SOPS = {
|
|
|
497
499
|
submitAction: '网络架构、请求模式、认证管理、响应解析分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
498
500
|
submitExtras: ['doClause 强制使用项目的网络封装层,禁止直接调用底层 HTTP API'],
|
|
499
501
|
mistakes: [
|
|
500
|
-
'
|
|
502
|
+
'不要描述底层 HTTP 库的通用 API 用法 — 必须说明项目特定的封装方式和约定',
|
|
501
503
|
'不要忽略认证/Token 管理 — Token 存储位置、刷新机制、过期处理是网络层核心知识',
|
|
502
504
|
'不要遗漏错误码映射规则 — 服务端返回的 code/status 如何映射到客户端 Error 类型',
|
|
503
505
|
'不要忽略超时、重试、缓存策略 — 这些直接影响用户体验和接口健壮性',
|
|
@@ -534,12 +536,9 @@ const COMPACT_SOPS = {
|
|
|
534
536
|
phases: [
|
|
535
537
|
{
|
|
536
538
|
name: 'UI 技术栈识别',
|
|
537
|
-
action: '搜索项目的 UI 构建方式:布局技术(
|
|
539
|
+
action: '搜索项目的 UI 构建方式:布局技术(代码布局/声明式UI/XML布局/CSS/模板引擎)、布局引擎(AutoLayout/SnapKit/Flexbox/Grid/ConstraintLayout/Compose)、组件库(自定义基础组件/第三方 UI 库)、动画框架。识别是否有统一的 BaseView/BaseComponent',
|
|
538
540
|
output: 'UI 技术栈全景:布局方式 + 组件库 + 基类继承体系 + 动画技术',
|
|
539
|
-
tools: [
|
|
540
|
-
'grep_search 搜索 SnapKit/AutoLayout/Storyboard/SwiftUI/CSS 等关键词',
|
|
541
|
-
'浏览 UI/View/Component 集中目录',
|
|
542
|
-
],
|
|
541
|
+
tools: ['grep_search 搜索项目使用的布局/UI 框架关键词', '浏览 UI/View/Component 集中目录'],
|
|
543
542
|
},
|
|
544
543
|
{
|
|
545
544
|
name: '组件规范深挖',
|
|
@@ -549,17 +548,17 @@ const COMPACT_SOPS = {
|
|
|
549
548
|
},
|
|
550
549
|
{
|
|
551
550
|
name: 'UI 一致性检测',
|
|
552
|
-
action: '搜索 UI
|
|
551
|
+
action: '搜索 UI 实现的不一致现象:混用不同布局方式(同一项目中多种布局引擎共存)、硬编码样式值(直接写颜色/字体数值而非引用常量/token)、遗漏 Dark Mode 适配(未使用动态颜色/CSS 变量)、缺失无障碍标注(accessibilityLabel/contentDescription/aria-label)',
|
|
553
552
|
output: 'UI 一致性问题清单 + 项目 UI 规范整体遵守情况评估',
|
|
554
553
|
},
|
|
555
554
|
],
|
|
556
555
|
submitAction: 'UI 布局模式、样式管理、组件复用、主题适配分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
557
556
|
submitExtras: ['每个候选聚焦单一 UI 规范(布局写法 和 样式管理 是独立候选)'],
|
|
558
557
|
mistakes: [
|
|
559
|
-
'不要描述
|
|
558
|
+
'不要描述 UI 框架的通用 API — 必须说明项目特定的布局约定和样式管理方式',
|
|
560
559
|
'不要合并不同层次的 UI 规范 — "布局约束写法"和"主题颜色管理"应独立提交',
|
|
561
560
|
'不要忽略 Dark Mode/主题适配 — 动态颜色和样式切换是现代 UI 项目的标配',
|
|
562
|
-
'
|
|
561
|
+
'不要遗漏基类/基组件继承约定 — BaseView/BaseActivity/BaseComponent 的重写点和使用规则是高频知识',
|
|
563
562
|
'【跨维度边界】ui-interaction 只关注 UI 构建/布局/样式 — 数据绑定归 data-event-flow,设计模式归 design-patterns',
|
|
564
563
|
],
|
|
565
564
|
},
|
|
@@ -593,7 +592,7 @@ const COMPACT_SOPS = {
|
|
|
593
592
|
phases: [
|
|
594
593
|
{
|
|
595
594
|
name: '测试基础设施扫描',
|
|
596
|
-
action: '搜索项目的测试配置和目录结构:测试框架(XCTest/Jest/Vitest/pytest/JUnit)、测试目录组织(unit/integration/e2e 分离方式)、测试辅助工具(Mock 框架/Fixture 管理/测试 DSL)、CI 中的测试命令和覆盖率配置',
|
|
595
|
+
action: '搜索项目的测试配置和目录结构:测试框架(XCTest/Jest/Vitest/pytest/JUnit/go test/RSpec)、测试目录组织(unit/integration/e2e 分离方式)、测试辅助工具(Mock 框架/Fixture 管理/测试 DSL)、CI 中的测试命令和覆盖率配置',
|
|
597
596
|
output: '测试基础设施全景:框架选型 + 目录结构 + 覆盖率要求 + CI 集成方式',
|
|
598
597
|
tools: [
|
|
599
598
|
'file_search 搜索 *Test*/*Spec*/*test* 文件',
|
|
@@ -618,7 +617,7 @@ const COMPACT_SOPS = {
|
|
|
618
617
|
'不要只列出测试框架名称 — 必须说明项目特定的测试约定(命名/Mock/Fixture 管理方式)',
|
|
619
618
|
'不要忽略 Mock 的创建和管理方式 — 手写 Mock vs Protocol Mock vs 框架 Mock 的选择策略是核心知识',
|
|
620
619
|
'不要把单元测试和集成测试的约定混在一起 — 它们的 Mock 策略和 Fixture 管理通常不同',
|
|
621
|
-
'不要遗漏异步测试的写法约定 — async/await
|
|
620
|
+
'不要遗漏异步测试的写法约定 — async/await 测试、异步等待机制(expectation/waitFor/eventually)、超时控制',
|
|
622
621
|
'【跨维度边界】testing-quality 只关注测试策略和模式 — CI/CD 流程归 agent-guidelines',
|
|
623
622
|
],
|
|
624
623
|
},
|
|
@@ -652,10 +651,10 @@ const COMPACT_SOPS = {
|
|
|
652
651
|
phases: [
|
|
653
652
|
{
|
|
654
653
|
name: '认证架构映射',
|
|
655
|
-
action: '搜索项目的认证/授权基础设施:认证方式(JWT/OAuth/Session/Cookie/SSO/生物识别)、Token 存储位置(
|
|
654
|
+
action: '搜索项目的认证/授权基础设施:认证方式(JWT/OAuth/Session/Cookie/SSO/生物识别)、Token 存储位置(Keychain/SharedPreferences/EncryptedStorage/HttpOnly Cookie/内存)、用户状态管理(登录/登出/Token 过期/Session 过期)、权限控制粒度(角色/功能/页面级)',
|
|
656
655
|
output: '认证架构全景:认证方式 + Token 生命周期 + 权限控制体系 + 用户状态机',
|
|
657
656
|
tools: [
|
|
658
|
-
'grep_search 搜索 Token/Auth/Login/
|
|
657
|
+
'grep_search 搜索 Token/Auth/Login/Credential/Session/OAuth 关键词',
|
|
659
658
|
'浏览认证/安全相关目录',
|
|
660
659
|
],
|
|
661
660
|
},
|
|
@@ -667,17 +666,23 @@ const COMPACT_SOPS = {
|
|
|
667
666
|
},
|
|
668
667
|
{
|
|
669
668
|
name: '安全漏洞扫描',
|
|
670
|
-
action: '搜索安全风险信号:硬编码的密钥/Token/URL、明文存储敏感数据(UserDefaults
|
|
669
|
+
action: '搜索安全风险信号:硬编码的密钥/Token/URL、明文存储敏感数据(明文写入本地存储/localStorage/UserDefaults/plain text file)、缺失的输入校验、允许 HTTP 明文传输的配置、日志中泄漏敏感信息(打印 Token/密码)',
|
|
671
670
|
output: '潜在安全漏洞清单 + 严重等级评估 + 修复建议',
|
|
672
671
|
},
|
|
673
672
|
],
|
|
674
673
|
submitAction: '认证机制、Token 管理、安全存储、权限控制分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
675
|
-
submitExtras: [
|
|
674
|
+
submitExtras: [
|
|
675
|
+
'严禁在候选的 coreCode/content 中包含实际密钥、Token 或敏感配置值',
|
|
676
|
+
'每个候选必须引用具体的安全相关类名和文件路径 — 纯理论描述会被拒绝',
|
|
677
|
+
'如果项目使用第三方 SDK 提供认证,只提交项目自身的集成方式和配置,不要重复 SDK 通用文档',
|
|
678
|
+
],
|
|
676
679
|
mistakes: [
|
|
677
680
|
'不要描述通用安全理论 — 必须说明项目特定的认证机制和存储方式',
|
|
678
681
|
'严禁在候选中暴露实际的密钥、Token、API Secret 或敏感配置 — 用占位符替代',
|
|
679
682
|
'不要忽略 Token 刷新机制 — "过期后如何自动刷新、刷新失败如何引导重新登录"是核心流程',
|
|
680
683
|
'不要遗漏登录/登出的状态广播机制 — 其他模块如何感知认证状态变化',
|
|
684
|
+
'不要将同一个认证流程拆分成过多候选 — "登录 + Token 存储 + Cookie 同步"如果是一个紧密耦合的流程,应合并为一个候选',
|
|
685
|
+
'不要提交与 networking-api 维度重叠的内容 — HTTPS 配置、证书校验归本维度,但请求拦截、Header 注入归 networking-api',
|
|
681
686
|
'【跨维度边界】security-auth 只关注认证/授权/安全 — 网络请求封装归 networking-api,错误处理归 error-resilience',
|
|
682
687
|
],
|
|
683
688
|
},
|
|
@@ -710,7 +715,7 @@ const COMPACT_SOPS = {
|
|
|
710
715
|
phases: [
|
|
711
716
|
{
|
|
712
717
|
name: '性能策略扫描',
|
|
713
|
-
action: '搜索项目中的性能优化策略:缓存(内存缓存/磁盘缓存/HTTP
|
|
718
|
+
action: '搜索项目中的性能优化策略:缓存(内存缓存/磁盘缓存/HTTP 缓存/CDN)、懒加载/延迟初始化(lazy init/dynamic import/按需创建)、预加载/预取(prefetch/preload)、列表优化(组件复用/虚拟滚动/分页加载)、图片/资源优化(压缩/缩放/缓存)、节流防抖(throttle/debounce/合并请求)',
|
|
714
719
|
output: '性能优化策略全景:各场景的优化手段 + 技术选型 + 实现位置',
|
|
715
720
|
tools: [
|
|
716
721
|
'grep_search 搜索 cache/lazy/prefetch/throttle/debounce/reuse 关键词',
|
|
@@ -725,17 +730,23 @@ const COMPACT_SOPS = {
|
|
|
725
730
|
},
|
|
726
731
|
{
|
|
727
732
|
name: '性能瓶颈检测',
|
|
728
|
-
action: '
|
|
733
|
+
action: '搜索可能的性能问题:主线程/UI 线程上的同步 I/O 或重计算、未缓存的重复网络请求、未复用的列表项组件、过大的资源未优化直接加载、内存泄漏点(未释放的缓存/循环引用/未取消的订阅)',
|
|
729
734
|
output: '潜在性能瓶颈清单 + 优化优先级建议',
|
|
730
735
|
},
|
|
731
736
|
],
|
|
732
737
|
submitAction: '缓存策略、列表优化、图片管线、启动优化分别提交候选(**按实际发现提交,无实质内容则跳过本维度**)',
|
|
733
|
-
submitExtras: [
|
|
738
|
+
submitExtras: [
|
|
739
|
+
'每个候选聚焦单一优化策略,说明适用场景和配置参数',
|
|
740
|
+
'每个候选的 coreCode 必须包含项目实际的类名/方法名/配置值 — 不能是伪代码或通用示例',
|
|
741
|
+
'content.markdown 必须包含具体的度量数据或配置参数(如缓存大小、超时时间、阈值等)— 纯文字描述的优化建议会被拒绝',
|
|
742
|
+
],
|
|
734
743
|
mistakes: [
|
|
735
744
|
'不要写通用性能理论 — 必须引用项目实际的优化代码和配置参数',
|
|
736
745
|
'不要合并不同维度的优化策略 — "内存缓存策略"和"列表分页加载"是独立候选',
|
|
737
746
|
'不要忽略缓存的淘汰和过期机制 — "缓存了什么"不如"何时淘汰、容量多大"有价值',
|
|
738
|
-
'
|
|
747
|
+
'不要遗漏资源加载优化 — 图片/字体/数据等大资源的压缩/缩放/缓存策略必须覆盖',
|
|
748
|
+
'不要提交没有具体代码证据的性能建议 — "建议使用懒加载"不是候选,"项目中 XxxManager 使用单例/延迟初始化模式"才是候选',
|
|
749
|
+
'不要重复框架/三方库的通用用法 — 只有项目对第三方库有自定义配置或封装时才值得提交',
|
|
739
750
|
'【跨维度边界】performance-optimization 只关注性能优化策略 — 并发模型归 concurrency-async,网络策略归 networking-api',
|
|
740
751
|
],
|
|
741
752
|
},
|
|
@@ -28,6 +28,20 @@ export declare const CANDIDATE_STATES: string[];
|
|
|
28
28
|
export declare const CONSUMABLE_STATES: string[];
|
|
29
29
|
/** 降级消费状态(Guard violation 降为 warning,Search 降权) */
|
|
30
30
|
export declare const DEGRADED_STATES: string[];
|
|
31
|
+
/** 可消费状态(别名,与 CONSUMABLE_STATES 相同) */
|
|
32
|
+
export declare const CONSUMABLE_LIFECYCLES: string[];
|
|
33
|
+
/** 可计数状态: 全景/统计看板应纳入的 Recipe(含 PENDING) */
|
|
34
|
+
export declare const COUNTABLE_LIFECYCLES: readonly [string, string, string, string];
|
|
35
|
+
/** 候选状态(别名,与 CANDIDATE_STATES 相同) */
|
|
36
|
+
export declare const CANDIDATE_LIFECYCLES: string[];
|
|
37
|
+
/** Guard 可消费状态(含降级 decaying): Guard/Search 可匹配的全范围 */
|
|
38
|
+
export declare const GUARD_LIFECYCLES: readonly [string, string, string, string];
|
|
39
|
+
/** 已发布状态: 通过置信度路由已确认的 Recipe */
|
|
40
|
+
export declare const PUBLISHED_LIFECYCLES: readonly [string, string];
|
|
41
|
+
/** 非弃用状态: 除 deprecated 外所有 */
|
|
42
|
+
export declare const NON_DEPRECATED_LIFECYCLES: readonly [string, string, string, string, string];
|
|
43
|
+
/** 类型导出 */
|
|
44
|
+
export type LifecycleFilter = (typeof Lifecycle)[keyof typeof Lifecycle];
|
|
31
45
|
/** 规范化生命周期值 */
|
|
32
46
|
export declare function normalizeLifecycle(lifecycle: string): string;
|
|
33
47
|
/** 检查状态转移是否合法 */
|
|
@@ -40,6 +54,18 @@ export declare function isCandidate(lifecycle: string): boolean;
|
|
|
40
54
|
export declare function isConsumable(lifecycle: string): boolean;
|
|
41
55
|
/** 是否为降级消费状态 */
|
|
42
56
|
export declare function isDegraded(lifecycle: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* 生成 `column IN (?, ?, ...)` SQL 片段和对应的参数数组。
|
|
59
|
+
* 用于在 raw SQL 中安全引用 lifecycle 常量数组。
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* const { sql, params } = lifecycleInSql(COUNTABLE_LIFECYCLES);
|
|
63
|
+
* db.prepare(`SELECT * FROM knowledge_entries WHERE ${sql}`).all(...params);
|
|
64
|
+
*/
|
|
65
|
+
export declare function lifecycleInSql(lifecycles: readonly string[], column?: string): {
|
|
66
|
+
sql: string;
|
|
67
|
+
params: string[];
|
|
68
|
+
};
|
|
43
69
|
/** 从 knowledgeType 推导 kind */
|
|
44
70
|
export declare function inferKind(knowledgeType: string): 'rule' | 'pattern' | 'fact';
|
|
45
71
|
export default Lifecycle;
|
|
@@ -28,6 +28,35 @@ export const CANDIDATE_STATES = [Lifecycle.PENDING, Lifecycle.STAGING];
|
|
|
28
28
|
export const CONSUMABLE_STATES = [Lifecycle.STAGING, Lifecycle.ACTIVE, Lifecycle.EVOLVING];
|
|
29
29
|
/** 降级消费状态(Guard violation 降为 warning,Search 降权) */
|
|
30
30
|
export const DEGRADED_STATES = [Lifecycle.DECAYING];
|
|
31
|
+
// ═══ 新增统一命名常量 ═══
|
|
32
|
+
/** 可消费状态(别名,与 CONSUMABLE_STATES 相同) */
|
|
33
|
+
export const CONSUMABLE_LIFECYCLES = CONSUMABLE_STATES;
|
|
34
|
+
/** 可计数状态: 全景/统计看板应纳入的 Recipe(含 PENDING) */
|
|
35
|
+
export const COUNTABLE_LIFECYCLES = [
|
|
36
|
+
Lifecycle.ACTIVE,
|
|
37
|
+
Lifecycle.STAGING,
|
|
38
|
+
Lifecycle.PENDING,
|
|
39
|
+
Lifecycle.EVOLVING,
|
|
40
|
+
];
|
|
41
|
+
/** 候选状态(别名,与 CANDIDATE_STATES 相同) */
|
|
42
|
+
export const CANDIDATE_LIFECYCLES = CANDIDATE_STATES;
|
|
43
|
+
/** Guard 可消费状态(含降级 decaying): Guard/Search 可匹配的全范围 */
|
|
44
|
+
export const GUARD_LIFECYCLES = [
|
|
45
|
+
Lifecycle.STAGING,
|
|
46
|
+
Lifecycle.ACTIVE,
|
|
47
|
+
Lifecycle.EVOLVING,
|
|
48
|
+
Lifecycle.DECAYING,
|
|
49
|
+
];
|
|
50
|
+
/** 已发布状态: 通过置信度路由已确认的 Recipe */
|
|
51
|
+
export const PUBLISHED_LIFECYCLES = [Lifecycle.ACTIVE, Lifecycle.STAGING];
|
|
52
|
+
/** 非弃用状态: 除 deprecated 外所有 */
|
|
53
|
+
export const NON_DEPRECATED_LIFECYCLES = [
|
|
54
|
+
Lifecycle.PENDING,
|
|
55
|
+
Lifecycle.STAGING,
|
|
56
|
+
Lifecycle.ACTIVE,
|
|
57
|
+
Lifecycle.EVOLVING,
|
|
58
|
+
Lifecycle.DECAYING,
|
|
59
|
+
];
|
|
31
60
|
/** 合法状态转移表 */
|
|
32
61
|
const VALID_TRANSITIONS = {
|
|
33
62
|
[Lifecycle.PENDING]: [Lifecycle.STAGING, Lifecycle.ACTIVE, Lifecycle.DEPRECATED],
|
|
@@ -70,6 +99,19 @@ export function isDegraded(lifecycle) {
|
|
|
70
99
|
const normalized = normalizeLifecycle(lifecycle);
|
|
71
100
|
return DEGRADED_STATES.includes(normalized);
|
|
72
101
|
}
|
|
102
|
+
/* ── SQL 辅助函数 ── */
|
|
103
|
+
/**
|
|
104
|
+
* 生成 `column IN (?, ?, ...)` SQL 片段和对应的参数数组。
|
|
105
|
+
* 用于在 raw SQL 中安全引用 lifecycle 常量数组。
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* const { sql, params } = lifecycleInSql(COUNTABLE_LIFECYCLES);
|
|
109
|
+
* db.prepare(`SELECT * FROM knowledge_entries WHERE ${sql}`).all(...params);
|
|
110
|
+
*/
|
|
111
|
+
export function lifecycleInSql(lifecycles, column = 'lifecycle') {
|
|
112
|
+
const placeholders = lifecycles.map(() => '?').join(', ');
|
|
113
|
+
return { sql: `${column} IN (${placeholders})`, params: [...lifecycles] };
|
|
114
|
+
}
|
|
73
115
|
/* ── knowledgeType → kind 映射 ── */
|
|
74
116
|
const KIND_MAP = {
|
|
75
117
|
'code-standard': 'rule',
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/** KnowledgeEntry 领域层统一导出 */
|
|
2
2
|
export { KnowledgeEntry } from './KnowledgeEntry.js';
|
|
3
3
|
export { KnowledgeRepository } from './KnowledgeRepository.js';
|
|
4
|
-
export {
|
|
4
|
+
export type { LifecycleFilter } from './Lifecycle.js';
|
|
5
|
+
export { CANDIDATE_LIFECYCLES, CANDIDATE_STATES, CONSUMABLE_LIFECYCLES, CONSUMABLE_STATES, COUNTABLE_LIFECYCLES, DEGRADED_STATES, GUARD_LIFECYCLES, inferKind, isCandidate, isConsumable, isDegraded, isValidLifecycle, isValidTransition, Lifecycle, lifecycleInSql, NON_DEPRECATED_LIFECYCLES, PUBLISHED_LIFECYCLES, } from './Lifecycle.js';
|
|
5
6
|
export { Constraints } from './values/Constraints.js';
|
|
6
7
|
export { Content } from './values/Content.js';
|
|
7
8
|
export { Quality } from './values/Quality.js';
|
|
@@ -4,7 +4,7 @@ export { KnowledgeEntry } from './KnowledgeEntry.js';
|
|
|
4
4
|
// Repository 接口
|
|
5
5
|
export { KnowledgeRepository } from './KnowledgeRepository.js';
|
|
6
6
|
// 生命周期
|
|
7
|
-
export { CANDIDATE_STATES, inferKind, isCandidate, isValidLifecycle, isValidTransition, Lifecycle, } from './Lifecycle.js';
|
|
7
|
+
export { CANDIDATE_LIFECYCLES, CANDIDATE_STATES, CONSUMABLE_LIFECYCLES, CONSUMABLE_STATES, COUNTABLE_LIFECYCLES, DEGRADED_STATES, GUARD_LIFECYCLES, inferKind, isCandidate, isConsumable, isDegraded, isValidLifecycle, isValidTransition, Lifecycle, lifecycleInSql, NON_DEPRECATED_LIFECYCLES, PUBLISHED_LIFECYCLES, } from './Lifecycle.js';
|
|
8
8
|
export { Constraints } from './values/Constraints.js';
|
|
9
9
|
// 值对象
|
|
10
10
|
export { Content } from './values/Content.js';
|
|
@@ -83,8 +83,25 @@ export class McpServer {
|
|
|
83
83
|
async initialize() {
|
|
84
84
|
if (!this.container) {
|
|
85
85
|
const { default: Bootstrap } = await import('../../bootstrap.js');
|
|
86
|
-
//
|
|
87
|
-
const projectRoot = process.env.ASD_PROJECT_DIR
|
|
86
|
+
// MCP 模式必须显式指定项目目录 — process.cwd() 在多根工作区中不可靠
|
|
87
|
+
const projectRoot = process.env.ASD_PROJECT_DIR;
|
|
88
|
+
if (!projectRoot) {
|
|
89
|
+
const msg = `[MCP] 缺少 ASD_PROJECT_DIR 环境变量。MCP server 拒绝启动。\n` +
|
|
90
|
+
`在多根工作区中 process.cwd() 可能指向任意子目录,不能作为项目根目录。\n` +
|
|
91
|
+
`请在 .vscode/mcp.json 的 env 中设置 ASD_PROJECT_DIR 为目标项目的绝对路径。`;
|
|
92
|
+
process.stderr.write(`${msg}\n`);
|
|
93
|
+
throw new Error(msg);
|
|
94
|
+
}
|
|
95
|
+
// ── 排除项目检查 — 防止误配置 ASD_PROJECT_DIR 到不该创建运行时数据的目录 ──
|
|
96
|
+
const { isExcludedProject } = await import('../../shared/isOwnDevRepo.js');
|
|
97
|
+
const exclusion = isExcludedProject(projectRoot);
|
|
98
|
+
if (exclusion.excluded) {
|
|
99
|
+
const msg = `[MCP] projectRoot "${projectRoot}" 是排除项目(${exclusion.reason}),` +
|
|
100
|
+
`MCP server 拒绝在此目录创建运行时数据。\n` +
|
|
101
|
+
`提示: 在 .vscode/mcp.json 的 env 中设置正确的 ASD_PROJECT_DIR。`;
|
|
102
|
+
process.stderr.write(`${msg}\n`);
|
|
103
|
+
throw new Error(msg);
|
|
104
|
+
}
|
|
88
105
|
// 切换工作目录到项目根 — 确保 DB 等相对路径正确解析
|
|
89
106
|
if (projectRoot !== process.cwd()) {
|
|
90
107
|
process.chdir(projectRoot);
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* 4. 提供增量 diff 计算
|
|
9
9
|
*
|
|
10
10
|
* 存储: SQLite bootstrap_snapshots + bootstrap_dim_files 表
|
|
11
|
+
* 所有操作使用 Drizzle 类型安全 API。
|
|
11
12
|
*
|
|
12
13
|
* @module pipeline/BootstrapSnapshot
|
|
13
14
|
*/
|
|
@@ -90,7 +91,7 @@ interface AffectedDimensionResult {
|
|
|
90
91
|
}
|
|
91
92
|
export declare class BootstrapSnapshot {
|
|
92
93
|
#private;
|
|
93
|
-
/** @param db better-sqlite3 实例 */
|
|
94
|
+
/** @param db DatabaseConnection 或 better-sqlite3 实例 */
|
|
94
95
|
constructor(db: unknown, { logger }?: {
|
|
95
96
|
logger?: LoggerLike | null;
|
|
96
97
|
});
|