autosnippet 3.2.21 → 3.3.2
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-BJ2mUBi8.js +1 -0
- package/dashboard/dist/assets/index-B659K9t5.js +128 -0
- package/dashboard/dist/assets/index-NCm40PMD.css +1 -0
- package/dashboard/dist/index.html +3 -3
- package/dist/bin/cli.d.ts +1 -1
- package/dist/bin/cli.js +244 -261
- package/dist/lib/agent/context/ExplorationTracker.d.ts +2 -0
- package/dist/lib/agent/context/ExplorationTracker.js +21 -3
- package/dist/lib/agent/core/ToolExecutionPipeline.d.ts +3 -1
- package/dist/lib/agent/core/ToolExecutionPipeline.js +8 -1
- package/dist/lib/agent/forge/DynamicComposer.d.ts +58 -0
- package/dist/lib/agent/forge/DynamicComposer.js +99 -0
- package/dist/lib/agent/forge/SandboxRunner.d.ts +60 -0
- package/dist/lib/agent/forge/SandboxRunner.js +251 -0
- package/dist/lib/agent/forge/TemporaryToolRegistry.d.ts +76 -0
- package/dist/lib/agent/forge/TemporaryToolRegistry.js +154 -0
- package/dist/lib/agent/forge/ToolForge.d.ts +92 -0
- package/dist/lib/agent/forge/ToolForge.js +239 -0
- package/dist/lib/agent/forge/ToolRequirementAnalyzer.d.ts +44 -0
- package/dist/lib/agent/forge/ToolRequirementAnalyzer.js +119 -0
- package/dist/lib/agent/tools/ToolRegistry.d.ts +2 -0
- package/dist/lib/agent/tools/ToolRegistry.js +4 -0
- package/dist/lib/agent/tools/composite.js +0 -1
- package/dist/lib/agent/tools/index.d.ts +2 -50
- package/dist/lib/agent/tools/index.js +2 -3
- package/dist/lib/agent/tools/lifecycle.d.ts +1 -58
- package/dist/lib/agent/tools/lifecycle.js +2 -75
- package/dist/lib/cli/SetupService.d.ts +46 -2
- package/dist/lib/cli/SetupService.js +2 -27
- package/dist/lib/cli/deploy/FileManifest.d.ts +0 -21
- package/dist/lib/cli/deploy/FileManifest.js +0 -11
- package/dist/lib/{platform/ios/spm → core/discovery}/SpmDiscoverer.d.ts +2 -5
- package/dist/lib/{platform/ios/spm → core/discovery}/SpmDiscoverer.js +159 -44
- package/dist/lib/core/discovery/index.d.ts +1 -1
- package/dist/lib/core/discovery/index.js +2 -2
- package/dist/lib/domain/knowledge/KnowledgeEntry.d.ts +10 -0
- package/dist/lib/domain/knowledge/KnowledgeEntry.js +2 -0
- package/dist/lib/domain/knowledge/Lifecycle.d.ts +19 -2
- package/dist/lib/domain/knowledge/Lifecycle.js +32 -6
- package/dist/lib/domain/knowledge/UnifiedValidator.d.ts +1 -5
- package/dist/lib/domain/knowledge/UnifiedValidator.js +7 -44
- package/dist/lib/domain/knowledge/values/Stats.d.ts +29 -0
- package/dist/lib/domain/knowledge/values/Stats.js +41 -0
- package/dist/lib/external/mcp/McpServer.d.ts +19 -38
- package/dist/lib/external/mcp/McpServer.js +145 -117
- package/dist/lib/external/mcp/autoApproveInjector.js +0 -2
- package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.d.ts +26 -1
- package/dist/lib/external/mcp/handlers/bootstrap/MissionBriefingBuilder.js +41 -0
- package/dist/lib/external/mcp/handlers/bootstrap/pipeline/orchestrator.js +49 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.d.ts +3 -0
- package/dist/lib/external/mcp/handlers/bootstrap/shared/bootstrap-phases.js +27 -0
- package/dist/lib/external/mcp/handlers/bootstrap/skills.js +1 -1
- package/dist/lib/external/mcp/handlers/bootstrap-external.js +1 -0
- package/dist/lib/external/mcp/handlers/bootstrap-internal.js +2 -0
- package/dist/lib/external/mcp/handlers/consolidated.d.ts +116 -6
- package/dist/lib/external/mcp/handlers/consolidated.js +251 -71
- package/dist/lib/external/mcp/handlers/guard.d.ts +150 -0
- package/dist/lib/external/mcp/handlers/guard.js +245 -8
- package/dist/lib/external/mcp/handlers/knowledge.d.ts +0 -29
- package/dist/lib/external/mcp/handlers/knowledge.js +1 -76
- package/dist/lib/external/mcp/handlers/panorama.d.ts +36 -0
- package/dist/lib/external/mcp/handlers/panorama.js +156 -0
- package/dist/lib/external/mcp/handlers/system.d.ts +2 -54
- package/dist/lib/external/mcp/handlers/system.js +3 -113
- package/dist/lib/external/mcp/handlers/task.d.ts +13 -24
- package/dist/lib/external/mcp/handlers/task.js +217 -557
- package/dist/lib/external/mcp/handlers/types.d.ts +91 -8
- package/dist/lib/external/mcp/handlers/types.js +18 -1
- package/dist/lib/external/mcp/handlers/wiki-external.d.ts +18 -1
- package/dist/lib/external/mcp/handlers/wiki-external.js +16 -1
- package/dist/lib/external/mcp/tools.d.ts +14 -20
- package/dist/lib/external/mcp/tools.js +62 -91
- package/dist/lib/http/HttpServer.js +52 -6
- package/dist/lib/http/routes/{snippets.d.ts → audit.d.ts} +4 -2
- package/dist/lib/http/routes/audit.js +51 -0
- package/dist/lib/http/routes/commands.d.ts +1 -1
- package/dist/lib/http/routes/commands.js +1 -66
- package/dist/lib/http/routes/guardReport.d.ts +10 -0
- package/dist/lib/http/routes/guardReport.js +143 -0
- package/dist/lib/http/routes/knowledge.js +32 -1
- package/dist/lib/http/routes/panorama.d.ts +11 -0
- package/dist/lib/http/routes/panorama.js +322 -0
- package/dist/lib/http/routes/remote.js +0 -5
- package/dist/lib/http/routes/signals.d.ts +10 -0
- package/dist/lib/http/routes/signals.js +104 -0
- package/dist/lib/http/routes/task.d.ts +2 -3
- package/dist/lib/http/routes/task.js +17 -347
- package/dist/lib/http/routes/violations.js +1 -1
- package/dist/lib/infrastructure/audit/AuditLogger.d.ts +6 -1
- package/dist/lib/infrastructure/audit/AuditLogger.js +14 -1
- package/dist/lib/infrastructure/database/drizzle/schema.d.ts +181 -583
- package/dist/lib/infrastructure/database/drizzle/schema.js +28 -69
- package/dist/lib/infrastructure/database/migrations/004_evolution_proposals.d.ts +8 -0
- package/dist/lib/infrastructure/database/migrations/004_evolution_proposals.js +43 -0
- package/dist/lib/infrastructure/logging/Logger.d.ts +2 -0
- package/dist/lib/infrastructure/logging/Logger.js +34 -7
- package/dist/lib/infrastructure/monitoring/ErrorTracker.js +3 -1
- package/dist/lib/infrastructure/monitoring/PerformanceMonitor.d.ts +2 -2
- package/dist/lib/infrastructure/monitoring/PerformanceMonitor.js +12 -10
- package/dist/lib/infrastructure/notification/LarkNotifier.d.ts +24 -0
- package/dist/lib/infrastructure/notification/LarkNotifier.js +97 -0
- package/dist/lib/infrastructure/report/ReportStore.d.ts +45 -0
- package/dist/lib/infrastructure/report/ReportStore.js +133 -0
- package/dist/lib/infrastructure/signal/SignalAggregator.d.ts +18 -0
- package/dist/lib/infrastructure/signal/SignalAggregator.js +84 -0
- package/dist/lib/infrastructure/signal/SignalBridge.d.ts +13 -0
- package/dist/lib/infrastructure/signal/SignalBridge.js +20 -0
- package/dist/lib/infrastructure/signal/SignalBus.d.ts +63 -0
- package/dist/lib/infrastructure/signal/SignalBus.js +106 -0
- package/dist/lib/infrastructure/signal/SignalTraceWriter.d.ts +36 -0
- package/dist/lib/infrastructure/signal/SignalTraceWriter.js +130 -0
- package/dist/lib/injection/ServiceContainer.js +6 -0
- package/dist/lib/injection/ServiceMap.d.ts +16 -19
- package/dist/lib/injection/modules/AgentModule.d.ts +1 -1
- package/dist/lib/injection/modules/AgentModule.js +7 -1
- package/dist/lib/injection/modules/AppModule.d.ts +3 -4
- package/dist/lib/injection/modules/AppModule.js +7 -43
- package/dist/lib/injection/modules/GuardModule.js +59 -2
- package/dist/lib/injection/modules/InfraModule.d.ts +0 -1
- package/dist/lib/injection/modules/InfraModule.js +9 -7
- package/dist/lib/injection/modules/KnowledgeModule.js +51 -0
- package/dist/lib/injection/modules/PanoramaModule.d.ts +18 -0
- package/dist/lib/injection/modules/PanoramaModule.js +76 -0
- package/dist/lib/injection/modules/SignalModule.d.ts +10 -0
- package/dist/lib/injection/modules/SignalModule.js +84 -0
- package/dist/lib/repository/knowledge/KnowledgeRepository.impl.d.ts +1 -0
- package/dist/lib/repository/knowledge/KnowledgeRepository.impl.js +6 -0
- package/dist/lib/service/bootstrap/BootstrapTaskManager.d.ts +3 -1
- package/dist/lib/service/bootstrap/BootstrapTaskManager.js +20 -1
- package/dist/lib/service/delivery/AgentInstructionsGenerator.js +4 -5
- package/dist/lib/service/delivery/CursorDeliveryPipeline.d.ts +3 -1
- package/dist/lib/service/delivery/CursorDeliveryPipeline.js +13 -10
- package/dist/lib/service/delivery/RulesGenerator.js +3 -2
- package/dist/lib/service/evolution/ConsolidationAdvisor.d.ts +114 -0
- package/dist/lib/service/evolution/ConsolidationAdvisor.js +542 -0
- package/dist/lib/service/evolution/ContradictionDetector.d.ts +54 -0
- package/dist/lib/service/evolution/ContradictionDetector.js +253 -0
- package/dist/lib/service/evolution/DecayDetector.d.ts +71 -0
- package/dist/lib/service/evolution/DecayDetector.js +244 -0
- package/dist/lib/service/evolution/EnhancementSuggester.d.ts +38 -0
- package/dist/lib/service/evolution/EnhancementSuggester.js +220 -0
- package/dist/lib/service/evolution/KnowledgeMetabolism.d.ts +82 -0
- package/dist/lib/service/evolution/KnowledgeMetabolism.js +167 -0
- package/dist/lib/service/evolution/RedundancyAnalyzer.d.ts +53 -0
- package/dist/lib/service/evolution/RedundancyAnalyzer.js +210 -0
- package/dist/lib/service/evolution/StagingManager.d.ts +57 -0
- package/dist/lib/service/evolution/StagingManager.js +201 -0
- package/dist/lib/service/guard/ComplianceReporter.d.ts +42 -2
- package/dist/lib/service/guard/ComplianceReporter.js +43 -5
- package/dist/lib/service/guard/CoverageAnalyzer.d.ts +54 -0
- package/dist/lib/service/guard/CoverageAnalyzer.js +149 -0
- package/dist/lib/service/guard/GuardCheckEngine.d.ts +55 -1
- package/dist/lib/service/guard/GuardCheckEngine.js +508 -15
- package/dist/lib/service/guard/GuardFeedbackLoop.d.ts +3 -0
- package/dist/lib/service/guard/GuardFeedbackLoop.js +9 -0
- package/dist/lib/service/guard/ReverseGuard.d.ts +73 -0
- package/dist/lib/service/guard/ReverseGuard.js +256 -0
- package/dist/lib/service/guard/RuleLearner.d.ts +12 -0
- package/dist/lib/service/guard/RuleLearner.js +38 -0
- package/dist/lib/service/guard/UncertaintyCollector.d.ts +83 -0
- package/dist/lib/service/guard/UncertaintyCollector.js +149 -0
- package/dist/lib/service/guard/ViolationsStore.d.ts +1 -0
- package/dist/lib/service/guard/ViolationsStore.js +33 -3
- package/dist/lib/service/knowledge/ConfidenceRouter.d.ts +13 -0
- package/dist/lib/service/knowledge/ConfidenceRouter.js +14 -0
- package/dist/lib/service/knowledge/KnowledgeService.js +22 -4
- package/dist/lib/service/module/ModuleService.js +3 -13
- package/dist/lib/service/panorama/CouplingAnalyzer.d.ts +27 -0
- package/dist/lib/service/panorama/CouplingAnalyzer.js +192 -0
- package/dist/lib/service/panorama/DimensionAnalyzer.d.ts +28 -0
- package/dist/lib/service/panorama/DimensionAnalyzer.js +320 -0
- package/dist/lib/service/panorama/LayerInferrer.d.ts +19 -0
- package/dist/lib/service/panorama/LayerInferrer.js +182 -0
- package/dist/lib/service/panorama/ModuleDiscoverer.d.ts +24 -0
- package/dist/lib/service/panorama/ModuleDiscoverer.js +185 -0
- package/dist/lib/service/panorama/PanoramaAggregator.d.ts +29 -0
- package/dist/lib/service/panorama/PanoramaAggregator.js +228 -0
- package/dist/lib/service/panorama/PanoramaScanner.d.ts +52 -0
- package/dist/lib/service/panorama/PanoramaScanner.js +188 -0
- package/dist/lib/service/panorama/PanoramaService.d.ts +108 -0
- package/dist/lib/service/panorama/PanoramaService.js +220 -0
- package/dist/lib/service/panorama/PanoramaTypes.d.ts +134 -0
- package/dist/lib/service/panorama/PanoramaTypes.js +6 -0
- package/dist/lib/service/panorama/RoleRefiner.d.ts +48 -0
- package/dist/lib/service/panorama/RoleRefiner.js +535 -0
- package/dist/lib/service/search/MultiSignalRanker.d.ts +1 -0
- package/dist/lib/service/search/MultiSignalRanker.js +16 -0
- package/dist/lib/service/search/SearchEngine.d.ts +1 -0
- package/dist/lib/service/search/SearchEngine.js +9 -1
- package/dist/lib/service/search/SearchTypes.d.ts +2 -0
- package/dist/lib/service/signal/HitRecorder.d.ts +68 -0
- package/dist/lib/service/signal/HitRecorder.js +173 -0
- package/dist/lib/service/skills/SignalCollector.d.ts +3 -1
- package/dist/lib/service/skills/SignalCollector.js +31 -1
- package/dist/lib/service/task/IntentExtractor.d.ts +58 -0
- package/dist/lib/service/task/IntentExtractor.js +142 -0
- package/dist/lib/service/task/PrimeSearchPipeline.d.ts +54 -0
- package/dist/lib/service/task/PrimeSearchPipeline.js +98 -0
- package/dist/lib/shared/constants.d.ts +0 -15
- package/dist/lib/shared/constants.js +0 -10
- package/dist/lib/shared/schemas/config.d.ts +4 -1
- package/dist/lib/shared/schemas/config.js +8 -1
- package/dist/lib/shared/schemas/mcp-tools.d.ts +41 -96
- package/dist/lib/shared/schemas/mcp-tools.js +59 -119
- package/dist/scripts/analyze-signals.d.ts +20 -0
- package/dist/scripts/analyze-signals.js +155 -0
- package/dist/scripts/diagnose-mcp.js +1 -1
- package/dist/scripts/release.js +2 -10
- package/package.json +4 -19
- package/skills/autosnippet-devdocs/SKILL.md +11 -8
- package/templates/claude-code/hooks/autosnippet-session.sh +10 -15
- package/templates/cursor-hooks/hooks/session-start.sh +1 -1
- package/templates/instructions/agent-static.md +2 -1
- package/templates/instructions/conventions.md +5 -6
- package/templates/recipes-setup/README.md +1 -2
- package/dashboard/dist/assets/icons-C1dUryS-.js +0 -1
- package/dashboard/dist/assets/index-D0whuycy.css +0 -1
- package/dashboard/dist/assets/index-DdvZE4Yd.js +0 -128
- package/dist/lib/domain/task/Task.d.ts +0 -140
- package/dist/lib/domain/task/Task.js +0 -254
- package/dist/lib/domain/task/TaskDependency.d.ts +0 -23
- package/dist/lib/domain/task/TaskDependency.js +0 -34
- package/dist/lib/domain/task/TaskIdGenerator.d.ts +0 -40
- package/dist/lib/domain/task/TaskIdGenerator.js +0 -75
- package/dist/lib/domain/task/index.d.ts +0 -4
- package/dist/lib/domain/task/index.js +0 -4
- package/dist/lib/http/routes/snippets.js +0 -49
- package/dist/lib/infrastructure/database/migrations/002_add_tasks.d.ts +0 -11
- package/dist/lib/infrastructure/database/migrations/002_add_tasks.js +0 -86
- package/dist/lib/platform/ClipboardManager.d.ts +0 -24
- package/dist/lib/platform/ClipboardManager.js +0 -142
- package/dist/lib/platform/NativeUi.d.ts +0 -53
- package/dist/lib/platform/NativeUi.js +0 -284
- package/dist/lib/platform/ios/index.d.ts +0 -38
- package/dist/lib/platform/ios/index.js +0 -42
- package/dist/lib/platform/ios/routes/spm.d.ts +0 -9
- package/dist/lib/platform/ios/routes/spm.js +0 -371
- package/dist/lib/platform/ios/snippet/PlaceholderConverter.d.ts +0 -21
- package/dist/lib/platform/ios/snippet/PlaceholderConverter.js +0 -48
- package/dist/lib/platform/ios/snippet/XcodeCodec.d.ts +0 -23
- package/dist/lib/platform/ios/snippet/XcodeCodec.js +0 -96
- package/dist/lib/platform/ios/spm/DependencyGraph.d.ts +0 -56
- package/dist/lib/platform/ios/spm/DependencyGraph.js +0 -195
- package/dist/lib/platform/ios/spm/PackageSwiftParser.d.ts +0 -69
- package/dist/lib/platform/ios/spm/PackageSwiftParser.js +0 -231
- package/dist/lib/platform/ios/spm/PathFinder.d.ts +0 -28
- package/dist/lib/platform/ios/spm/PathFinder.js +0 -117
- package/dist/lib/platform/ios/spm/PolicyEngine.d.ts +0 -44
- package/dist/lib/platform/ios/spm/PolicyEngine.js +0 -79
- package/dist/lib/platform/ios/spm/SpmHelper.d.ts +0 -102
- package/dist/lib/platform/ios/spm/SpmHelper.js +0 -464
- package/dist/lib/platform/ios/xcode/HeaderResolver.d.ts +0 -33
- package/dist/lib/platform/ios/xcode/HeaderResolver.js +0 -90
- package/dist/lib/platform/ios/xcode/SaveEventFilter.d.ts +0 -66
- package/dist/lib/platform/ios/xcode/SaveEventFilter.js +0 -142
- package/dist/lib/platform/ios/xcode/XcodeAutomation.d.ts +0 -71
- package/dist/lib/platform/ios/xcode/XcodeAutomation.js +0 -327
- package/dist/lib/platform/ios/xcode/XcodeImportResolver.d.ts +0 -130
- package/dist/lib/platform/ios/xcode/XcodeImportResolver.js +0 -404
- package/dist/lib/platform/ios/xcode/XcodeIntegration.d.ts +0 -89
- package/dist/lib/platform/ios/xcode/XcodeIntegration.js +0 -588
- package/dist/lib/platform/ios/xcode/XcodeWriteUtils.d.ts +0 -99
- package/dist/lib/platform/ios/xcode/XcodeWriteUtils.js +0 -190
- package/dist/lib/repository/task/TaskRepository.impl.d.ts +0 -171
- package/dist/lib/repository/task/TaskRepository.impl.js +0 -347
- package/dist/lib/service/automation/ActionPipeline.d.ts +0 -34
- package/dist/lib/service/automation/ActionPipeline.js +0 -53
- package/dist/lib/service/automation/AutomationOrchestrator.d.ts +0 -86
- package/dist/lib/service/automation/AutomationOrchestrator.js +0 -57
- package/dist/lib/service/automation/ContextCollector.d.ts +0 -24
- package/dist/lib/service/automation/ContextCollector.js +0 -35
- package/dist/lib/service/automation/DirectiveDetector.d.ts +0 -51
- package/dist/lib/service/automation/DirectiveDetector.js +0 -112
- package/dist/lib/service/automation/FileWatcher.d.ts +0 -51
- package/dist/lib/service/automation/FileWatcher.js +0 -366
- package/dist/lib/service/automation/TriggerResolver.d.ts +0 -36
- package/dist/lib/service/automation/TriggerResolver.js +0 -62
- package/dist/lib/service/automation/handlers/AlinkHandler.d.ts +0 -7
- package/dist/lib/service/automation/handlers/AlinkHandler.js +0 -80
- package/dist/lib/service/automation/handlers/CreateHandler.d.ts +0 -11
- package/dist/lib/service/automation/handlers/CreateHandler.js +0 -170
- package/dist/lib/service/automation/handlers/GuardHandler.d.ts +0 -17
- package/dist/lib/service/automation/handlers/GuardHandler.js +0 -218
- package/dist/lib/service/automation/handlers/HeaderHandler.d.ts +0 -2
- package/dist/lib/service/automation/handlers/HeaderHandler.js +0 -32
- package/dist/lib/service/automation/handlers/SearchHandler.d.ts +0 -11
- package/dist/lib/service/automation/handlers/SearchHandler.js +0 -278
- package/dist/lib/service/snippet/SnippetFactory.d.ts +0 -101
- package/dist/lib/service/snippet/SnippetFactory.js +0 -145
- package/dist/lib/service/snippet/SnippetInstaller.d.ts +0 -91
- package/dist/lib/service/snippet/SnippetInstaller.js +0 -276
- package/dist/lib/service/snippet/codecs/SnippetCodec.d.ts +0 -44
- package/dist/lib/service/snippet/codecs/SnippetCodec.js +0 -35
- package/dist/lib/service/snippet/codecs/VSCodeCodec.d.ts +0 -27
- package/dist/lib/service/snippet/codecs/VSCodeCodec.js +0 -82
- package/dist/lib/service/task/TaskGraphService.d.ts +0 -222
- package/dist/lib/service/task/TaskGraphService.js +0 -597
- package/dist/lib/service/task/TaskKnowledgeBridge.d.ts +0 -95
- package/dist/lib/service/task/TaskKnowledgeBridge.js +0 -298
- package/dist/lib/service/task/TaskReadyEngine.d.ts +0 -84
- package/dist/lib/service/task/TaskReadyEngine.js +0 -115
- package/dist/scripts/build-native-ui.d.ts +0 -3
- package/dist/scripts/build-native-ui.js +0 -62
- package/dist/scripts/init-snippets.d.ts +0 -30
- package/dist/scripts/init-snippets.js +0 -298
- package/dist/scripts/install-full.d.ts +0 -7
- package/dist/scripts/install-full.js +0 -38
- package/resources/native-ui/README.md +0 -29
- package/resources/native-ui/combined-window.swift +0 -494
- package/resources/native-ui/main.swift +0 -598
- package/scripts/postinstall-safe.mjs +0 -89
|
@@ -2,18 +2,13 @@
|
|
|
2
2
|
* AppModule — 应用层杂项服务注册
|
|
3
3
|
*
|
|
4
4
|
* 负责注册:
|
|
5
|
-
* - recipeParser, recipeCandidateValidator
|
|
5
|
+
* - recipeParser, recipeCandidateValidator
|
|
6
6
|
* - qualityScorer, feedbackCollector, tokenUsageStore, recipeExtractor
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
* - taskIdGenerator, taskReadyEngine, taskKnowledgeBridge, taskGraphService
|
|
7
|
+
* - moduleService, cursorDeliveryPipeline
|
|
8
|
+
* - primeSearchPipeline (for prime multi-query search — no DB dependency)
|
|
10
9
|
*/
|
|
11
10
|
import { resolveProjectRoot } from '#shared/resolveProjectRoot.js';
|
|
12
|
-
import { TaskIdGenerator } from '../../domain/task/TaskIdGenerator.js';
|
|
13
|
-
import { XcodeCodec } from '../../platform/ios/snippet/XcodeCodec.js';
|
|
14
|
-
import { SpmHelper } from '../../platform/ios/spm/SpmHelper.js';
|
|
15
11
|
import { TokenUsageStore } from '../../repository/token/TokenUsageStore.js';
|
|
16
|
-
import { AutomationOrchestrator } from '../../service/automation/AutomationOrchestrator.js';
|
|
17
12
|
import { CursorDeliveryPipeline } from '../../service/delivery/CursorDeliveryPipeline.js';
|
|
18
13
|
import { RecipeExtractor } from '../../service/knowledge/RecipeExtractor.js';
|
|
19
14
|
import { ModuleService } from '../../service/module/ModuleService.js';
|
|
@@ -21,12 +16,7 @@ import { FeedbackCollector } from '../../service/quality/FeedbackCollector.js';
|
|
|
21
16
|
import { QualityScorer } from '../../service/quality/QualityScorer.js';
|
|
22
17
|
import { RecipeCandidateValidator } from '../../service/recipe/RecipeCandidateValidator.js';
|
|
23
18
|
import { RecipeParser } from '../../service/recipe/RecipeParser.js';
|
|
24
|
-
import {
|
|
25
|
-
import { SnippetFactory } from '../../service/snippet/SnippetFactory.js';
|
|
26
|
-
import { SnippetInstaller } from '../../service/snippet/SnippetInstaller.js';
|
|
27
|
-
import { TaskGraphService } from '../../service/task/TaskGraphService.js';
|
|
28
|
-
import { TaskKnowledgeBridge } from '../../service/task/TaskKnowledgeBridge.js';
|
|
29
|
-
import { TaskReadyEngine } from '../../service/task/TaskReadyEngine.js';
|
|
19
|
+
import { PrimeSearchPipeline } from '../../service/task/PrimeSearchPipeline.js';
|
|
30
20
|
export function register(c) {
|
|
31
21
|
// ═══ Quality + Recipe ═══
|
|
32
22
|
c.singleton('qualityScorer', () => new QualityScorer());
|
|
@@ -41,27 +31,7 @@ export function register(c) {
|
|
|
41
31
|
const db = ct.get('database');
|
|
42
32
|
return new TokenUsageStore(db.getDb(), db.getDrizzle());
|
|
43
33
|
});
|
|
44
|
-
// ═══
|
|
45
|
-
c.singleton('snippetFactory', (ct) => {
|
|
46
|
-
const factory = new SnippetFactory(ct.get('knowledgeRepository'));
|
|
47
|
-
factory.registerCodec(new XcodeCodec());
|
|
48
|
-
factory.registerCodec(new VSCodeCodec());
|
|
49
|
-
return factory;
|
|
50
|
-
});
|
|
51
|
-
c.singleton('snippetInstaller', (ct) => {
|
|
52
|
-
const factory = ct.get('snippetFactory');
|
|
53
|
-
return new SnippetInstaller({ codec: factory.getCodec('xcode'), snippetFactory: factory });
|
|
54
|
-
});
|
|
55
|
-
c.singleton('vscodeSnippetInstaller', (ct) => {
|
|
56
|
-
const factory = ct.get('snippetFactory');
|
|
57
|
-
return new SnippetInstaller({ codec: factory.getCodec('vscode'), snippetFactory: factory });
|
|
58
|
-
});
|
|
59
|
-
// ═══ Platform + Automation ═══
|
|
60
|
-
c.singleton('spmService', (ct) => {
|
|
61
|
-
const projectRoot = resolveProjectRoot(ct);
|
|
62
|
-
return new SpmHelper(projectRoot);
|
|
63
|
-
});
|
|
64
|
-
c.singleton('automationOrchestrator', () => new AutomationOrchestrator());
|
|
34
|
+
// ═══ Module ═══
|
|
65
35
|
c.singleton('moduleService', (ct) => {
|
|
66
36
|
const projectRoot = resolveProjectRoot(ct);
|
|
67
37
|
return new ModuleService(projectRoot, {
|
|
@@ -79,14 +49,8 @@ export function register(c) {
|
|
|
79
49
|
database: ct.get('database'),
|
|
80
50
|
logger: ct.logger,
|
|
81
51
|
}));
|
|
82
|
-
// ═══
|
|
83
|
-
c.singleton('
|
|
84
|
-
const db = ct.get('database');
|
|
85
|
-
return new TaskIdGenerator(db.getDb(), db.getDrizzle());
|
|
86
|
-
});
|
|
87
|
-
c.singleton('taskReadyEngine', (ct) => new TaskReadyEngine(ct.get('database').getDb()));
|
|
88
|
-
c.singleton('taskKnowledgeBridge', (ct) => new TaskKnowledgeBridge(ct.get('searchEngine')));
|
|
89
|
-
c.singleton('taskGraphService', (ct) => new TaskGraphService(ct.get('taskRepository'), ct.get('taskReadyEngine'), ct.get('taskKnowledgeBridge'), ct.get('auditLogger'), ct.get('taskIdGenerator')));
|
|
52
|
+
// ═══ PrimeSearchPipeline (for prime multi-query search) ═══
|
|
53
|
+
c.singleton('primeSearchPipeline', (ct) => new PrimeSearchPipeline(ct.get('searchEngine')));
|
|
90
54
|
}
|
|
91
55
|
/** 初始化 RecipeExtractor 实例 (在 initialize 期间调用) */
|
|
92
56
|
export function initRecipeExtractor(c) {
|
|
@@ -6,12 +6,16 @@
|
|
|
6
6
|
* - exclusionManager, ruleLearner, violationsStore
|
|
7
7
|
* - complianceReporter, guardFeedbackLoop
|
|
8
8
|
*/
|
|
9
|
+
import fs from 'node:fs';
|
|
10
|
+
import path from 'node:path';
|
|
9
11
|
import { resolveProjectRoot } from '#shared/resolveProjectRoot.js';
|
|
10
12
|
import { ComplianceReporter } from '../../service/guard/ComplianceReporter.js';
|
|
13
|
+
import { CoverageAnalyzer } from '../../service/guard/CoverageAnalyzer.js';
|
|
11
14
|
import { ExclusionManager } from '../../service/guard/ExclusionManager.js';
|
|
12
15
|
import { GuardCheckEngine } from '../../service/guard/GuardCheckEngine.js';
|
|
13
16
|
import { GuardFeedbackLoop } from '../../service/guard/GuardFeedbackLoop.js';
|
|
14
17
|
import { GuardService } from '../../service/guard/GuardService.js';
|
|
18
|
+
import { ReverseGuard } from '../../service/guard/ReverseGuard.js';
|
|
15
19
|
import { RuleLearner } from '../../service/guard/RuleLearner.js';
|
|
16
20
|
import { ViolationsStore } from '../../service/guard/ViolationsStore.js';
|
|
17
21
|
export function register(c) {
|
|
@@ -29,7 +33,40 @@ export function register(c) {
|
|
|
29
33
|
});
|
|
30
34
|
c.singleton('guardCheckEngine', (ct) => {
|
|
31
35
|
const config = ct.singletons._config || {};
|
|
32
|
-
|
|
36
|
+
// 基础配置(AutoSnippet 自身 config/default.json)
|
|
37
|
+
const baseGuard = config.guard || {};
|
|
38
|
+
// 项目级覆盖(.autosnippet/config.json 的 guard 段)
|
|
39
|
+
let projectGuard = {};
|
|
40
|
+
try {
|
|
41
|
+
const projectRoot = resolveProjectRoot(ct);
|
|
42
|
+
const projConfigPath = path.join(projectRoot, '.autosnippet', 'config.json');
|
|
43
|
+
if (fs.existsSync(projConfigPath)) {
|
|
44
|
+
const raw = JSON.parse(fs.readFileSync(projConfigPath, 'utf-8'));
|
|
45
|
+
if (raw.guard && typeof raw.guard === 'object') {
|
|
46
|
+
projectGuard = raw.guard;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
/* 项目配置读取失败不阻塞 */
|
|
52
|
+
}
|
|
53
|
+
// 合并:项目级覆盖基础配置
|
|
54
|
+
const merged = { ...baseGuard, ...projectGuard };
|
|
55
|
+
if (baseGuard.codeLevelThresholds || projectGuard.codeLevelThresholds) {
|
|
56
|
+
merged.codeLevelThresholds = {
|
|
57
|
+
...(baseGuard.codeLevelThresholds || {}),
|
|
58
|
+
...(projectGuard.codeLevelThresholds || {}),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (baseGuard.disabledRules || projectGuard.disabledRules) {
|
|
62
|
+
const base = Array.isArray(baseGuard.disabledRules) ? baseGuard.disabledRules : [];
|
|
63
|
+
const proj = Array.isArray(projectGuard.disabledRules) ? projectGuard.disabledRules : [];
|
|
64
|
+
merged.disabledRules = [...new Set([...base, ...proj])];
|
|
65
|
+
}
|
|
66
|
+
return new GuardCheckEngine(ct.get('database'), {
|
|
67
|
+
guardConfig: merged,
|
|
68
|
+
signalBus: ct.singletons.signalBus || undefined,
|
|
69
|
+
});
|
|
33
70
|
});
|
|
34
71
|
c.singleton('exclusionManager', (ct) => {
|
|
35
72
|
const projectRoot = resolveProjectRoot(ct);
|
|
@@ -37,7 +74,9 @@ export function register(c) {
|
|
|
37
74
|
});
|
|
38
75
|
c.singleton('ruleLearner', (ct) => {
|
|
39
76
|
const projectRoot = resolveProjectRoot(ct);
|
|
40
|
-
return new RuleLearner(projectRoot
|
|
77
|
+
return new RuleLearner(projectRoot, {
|
|
78
|
+
signalBus: ct.singletons.signalBus || undefined,
|
|
79
|
+
});
|
|
41
80
|
});
|
|
42
81
|
c.singleton('violationsStore', (ct) => {
|
|
43
82
|
const db = ct.get('database');
|
|
@@ -49,5 +88,23 @@ export function register(c) {
|
|
|
49
88
|
});
|
|
50
89
|
c.singleton('guardFeedbackLoop', (ct) => new GuardFeedbackLoop(ct.get('violationsStore'), ct.get('feedbackCollector'), {
|
|
51
90
|
guardCheckEngine: ct.get('guardCheckEngine'),
|
|
91
|
+
signalBus: ct.singletons.signalBus || undefined,
|
|
52
92
|
}));
|
|
93
|
+
c.singleton('reverseGuard', (ct) => {
|
|
94
|
+
const db = ct.get('database');
|
|
95
|
+
return new ReverseGuard(db.getDb(), {
|
|
96
|
+
signalBus: ct.singletons.signalBus || undefined,
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
c.singleton('coverageAnalyzer', (ct) => {
|
|
100
|
+
const db = ct.get('database');
|
|
101
|
+
let ruleLearner;
|
|
102
|
+
try {
|
|
103
|
+
ruleLearner = { ruleLearner: ct.get('ruleLearner') };
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
/* ruleLearner not yet available */
|
|
107
|
+
}
|
|
108
|
+
return new CoverageAnalyzer(db.getDb(), ruleLearner);
|
|
109
|
+
});
|
|
53
110
|
}
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* - database, logger, auditStore, auditLogger
|
|
6
6
|
* - gateway, eventBus, bootstrapTaskManager
|
|
7
7
|
* - knowledgeRepository, knowledgeFileWriter, knowledgeSyncService
|
|
8
|
-
* - taskRepository
|
|
9
8
|
*/
|
|
10
9
|
import type { ServiceContainer } from '../ServiceContainer.js';
|
|
11
10
|
export declare function register(c: ServiceContainer): void;
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* - database, logger, auditStore, auditLogger
|
|
6
6
|
* - gateway, eventBus, bootstrapTaskManager
|
|
7
7
|
* - knowledgeRepository, knowledgeFileWriter, knowledgeSyncService
|
|
8
|
-
* - taskRepository
|
|
9
8
|
*/
|
|
9
|
+
import path from 'node:path';
|
|
10
10
|
import { resolveProjectRoot } from '#shared/resolveProjectRoot.js';
|
|
11
11
|
import { KnowledgeSyncService } from '../../cli/KnowledgeSyncService.js';
|
|
12
12
|
import Gateway from '../../core/gateway/Gateway.js';
|
|
@@ -15,8 +15,8 @@ import AuditStore from '../../infrastructure/audit/AuditStore.js';
|
|
|
15
15
|
import { EventBus } from '../../infrastructure/event/EventBus.js';
|
|
16
16
|
import Logger from '../../infrastructure/logging/Logger.js';
|
|
17
17
|
import { getRealtimeService as _getRealtimeService } from '../../infrastructure/realtime/RealtimeService.js';
|
|
18
|
+
import { ReportStore } from '../../infrastructure/report/ReportStore.js';
|
|
18
19
|
import { KnowledgeRepositoryImpl } from '../../repository/knowledge/KnowledgeRepository.impl.js';
|
|
19
|
-
import { TaskRepositoryImpl } from '../../repository/task/TaskRepository.impl.js';
|
|
20
20
|
import { BootstrapTaskManager } from '../../service/bootstrap/BootstrapTaskManager.js';
|
|
21
21
|
import { KnowledgeFileWriter } from '../../service/knowledge/KnowledgeFileWriter.js';
|
|
22
22
|
export function register(c) {
|
|
@@ -33,7 +33,9 @@ export function register(c) {
|
|
|
33
33
|
const drizzle = db.getDrizzle();
|
|
34
34
|
return new AuditStore(db, drizzle);
|
|
35
35
|
});
|
|
36
|
-
c.singleton('auditLogger', (ct) => new AuditLogger(ct.get('auditStore')
|
|
36
|
+
c.singleton('auditLogger', (ct) => new AuditLogger(ct.get('auditStore'), ct.services.eventBus
|
|
37
|
+
? ct.get('eventBus')
|
|
38
|
+
: null));
|
|
37
39
|
c.singleton('gateway', () => new Gateway());
|
|
38
40
|
c.singleton('eventBus', () => new EventBus({ maxListeners: 30 }));
|
|
39
41
|
c.singleton('bootstrapTaskManager', (ct) => {
|
|
@@ -65,9 +67,9 @@ export function register(c) {
|
|
|
65
67
|
const projectRoot = resolveProjectRoot(ct);
|
|
66
68
|
return new KnowledgeSyncService(projectRoot);
|
|
67
69
|
});
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
return new
|
|
70
|
+
// ═══ ReportStore ═══
|
|
71
|
+
c.singleton('reportStore', (ct) => {
|
|
72
|
+
const projectRoot = resolveProjectRoot(ct);
|
|
73
|
+
return new ReportStore(path.join(projectRoot, '.autosnippet', 'logs', 'reports'));
|
|
72
74
|
});
|
|
73
75
|
}
|
|
@@ -14,6 +14,13 @@ import { HnswVectorAdapter } from '../../infrastructure/vector/HnswVectorAdapter
|
|
|
14
14
|
import { IndexingPipeline } from '../../infrastructure/vector/IndexingPipeline.js';
|
|
15
15
|
import { JsonVectorAdapter } from '../../infrastructure/vector/JsonVectorAdapter.js';
|
|
16
16
|
import { DimensionCopy } from '../../service/bootstrap/DimensionCopyRegistry.js';
|
|
17
|
+
import { ConsolidationAdvisor } from '../../service/evolution/ConsolidationAdvisor.js';
|
|
18
|
+
import { ContradictionDetector } from '../../service/evolution/ContradictionDetector.js';
|
|
19
|
+
import { DecayDetector } from '../../service/evolution/DecayDetector.js';
|
|
20
|
+
import { EnhancementSuggester } from '../../service/evolution/EnhancementSuggester.js';
|
|
21
|
+
import { KnowledgeMetabolism } from '../../service/evolution/KnowledgeMetabolism.js';
|
|
22
|
+
import { RedundancyAnalyzer } from '../../service/evolution/RedundancyAnalyzer.js';
|
|
23
|
+
import { StagingManager } from '../../service/evolution/StagingManager.js';
|
|
17
24
|
import { CodeEntityGraph } from '../../service/knowledge/CodeEntityGraph.js';
|
|
18
25
|
import { ConfidenceRouter } from '../../service/knowledge/ConfidenceRouter.js';
|
|
19
26
|
import { KnowledgeGraphService } from '../../service/knowledge/KnowledgeGraphService.js';
|
|
@@ -50,6 +57,7 @@ export function register(c) {
|
|
|
50
57
|
// is sufficient for knowledge-base scale (hundreds~thousands of entries).
|
|
51
58
|
// Re-enable when document scale grows to 10k+ or external noisy sources are integrated.
|
|
52
59
|
crossEncoderReranker: null,
|
|
60
|
+
signalBus: ct.singletons.signalBus || null,
|
|
53
61
|
});
|
|
54
62
|
}, { aiDependent: true });
|
|
55
63
|
c.singleton('vectorStore', (ct) => {
|
|
@@ -120,4 +128,47 @@ export function register(c) {
|
|
|
120
128
|
c.register('constitution', () => c.singletons.constitution || null);
|
|
121
129
|
c.register('aiProvider', () => c.singletons.aiProvider || null);
|
|
122
130
|
c.register('projectGraph', () => c.singletons.projectGraph || null);
|
|
131
|
+
// ═══ Governance / Evolution ═══
|
|
132
|
+
c.singleton('stagingManager', (ct) => {
|
|
133
|
+
const db = ct.get('database');
|
|
134
|
+
return new StagingManager(db.getDb(), {
|
|
135
|
+
signalBus: ct.singletons.signalBus || undefined,
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
c.singleton('decayDetector', (ct) => {
|
|
139
|
+
const db = ct.get('database');
|
|
140
|
+
return new DecayDetector(db.getDb(), {
|
|
141
|
+
signalBus: ct.singletons.signalBus || undefined,
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
c.singleton('contradictionDetector', (ct) => {
|
|
145
|
+
const db = ct.get('database');
|
|
146
|
+
return new ContradictionDetector(db.getDb(), {
|
|
147
|
+
signalBus: ct.singletons.signalBus || undefined,
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
c.singleton('redundancyAnalyzer', (ct) => {
|
|
151
|
+
const db = ct.get('database');
|
|
152
|
+
return new RedundancyAnalyzer(db.getDb(), {
|
|
153
|
+
signalBus: ct.singletons.signalBus || undefined,
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
c.singleton('enhancementSuggester', (ct) => {
|
|
157
|
+
const db = ct.get('database');
|
|
158
|
+
return new EnhancementSuggester(db.getDb(), {
|
|
159
|
+
signalBus: ct.singletons.signalBus || undefined,
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
c.singleton('knowledgeMetabolism', (ct) => {
|
|
163
|
+
return new KnowledgeMetabolism({
|
|
164
|
+
contradictionDetector: ct.get('contradictionDetector'),
|
|
165
|
+
redundancyAnalyzer: ct.get('redundancyAnalyzer'),
|
|
166
|
+
decayDetector: ct.get('decayDetector'),
|
|
167
|
+
signalBus: ct.singletons.signalBus || undefined,
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
c.singleton('consolidationAdvisor', (ct) => {
|
|
171
|
+
const db = ct.get('database');
|
|
172
|
+
return new ConsolidationAdvisor(db.getDb());
|
|
173
|
+
});
|
|
123
174
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PanoramaModule — DI 注册
|
|
3
|
+
*
|
|
4
|
+
* 注册全景服务到 ServiceContainer:
|
|
5
|
+
* - moduleDiscoverer
|
|
6
|
+
* - roleRefiner
|
|
7
|
+
* - couplingAnalyzer
|
|
8
|
+
* - layerInferrer
|
|
9
|
+
* - panoramaAggregator
|
|
10
|
+
* - panoramaScanner
|
|
11
|
+
* - panoramaService
|
|
12
|
+
*
|
|
13
|
+
* @module PanoramaModule
|
|
14
|
+
*/
|
|
15
|
+
import type { ServiceContainer } from '../ServiceContainer.js';
|
|
16
|
+
export declare const PanoramaModule: {
|
|
17
|
+
register(container: ServiceContainer): void;
|
|
18
|
+
};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PanoramaModule — DI 注册
|
|
3
|
+
*
|
|
4
|
+
* 注册全景服务到 ServiceContainer:
|
|
5
|
+
* - moduleDiscoverer
|
|
6
|
+
* - roleRefiner
|
|
7
|
+
* - couplingAnalyzer
|
|
8
|
+
* - layerInferrer
|
|
9
|
+
* - panoramaAggregator
|
|
10
|
+
* - panoramaScanner
|
|
11
|
+
* - panoramaService
|
|
12
|
+
*
|
|
13
|
+
* @module PanoramaModule
|
|
14
|
+
*/
|
|
15
|
+
import { CouplingAnalyzer } from '../../service/panorama/CouplingAnalyzer.js';
|
|
16
|
+
import { DimensionAnalyzer } from '../../service/panorama/DimensionAnalyzer.js';
|
|
17
|
+
import { LayerInferrer } from '../../service/panorama/LayerInferrer.js';
|
|
18
|
+
import { ModuleDiscoverer } from '../../service/panorama/ModuleDiscoverer.js';
|
|
19
|
+
import { PanoramaAggregator } from '../../service/panorama/PanoramaAggregator.js';
|
|
20
|
+
import { PanoramaScanner } from '../../service/panorama/PanoramaScanner.js';
|
|
21
|
+
import { PanoramaService } from '../../service/panorama/PanoramaService.js';
|
|
22
|
+
import { RoleRefiner } from '../../service/panorama/RoleRefiner.js';
|
|
23
|
+
export const PanoramaModule = {
|
|
24
|
+
register(container) {
|
|
25
|
+
const ct = container;
|
|
26
|
+
const getDb = () => {
|
|
27
|
+
const db = ct.singletons.database;
|
|
28
|
+
return (db?.getDb ? db.getDb() : db);
|
|
29
|
+
};
|
|
30
|
+
const getProjectRoot = () => ct.config?.projectRoot ?? process.cwd();
|
|
31
|
+
ct.singleton('moduleDiscoverer', () => new ModuleDiscoverer(getDb(), getProjectRoot()));
|
|
32
|
+
ct.singleton('roleRefiner', () => new RoleRefiner(getDb(), getProjectRoot()));
|
|
33
|
+
ct.singleton('couplingAnalyzer', () => new CouplingAnalyzer(getDb(), getProjectRoot()));
|
|
34
|
+
ct.singleton('layerInferrer', () => new LayerInferrer());
|
|
35
|
+
ct.singleton('dimensionAnalyzer', () => new DimensionAnalyzer(getDb()));
|
|
36
|
+
ct.singleton('panoramaAggregator', (c) => {
|
|
37
|
+
const sc = c;
|
|
38
|
+
const roleRefiner = sc.get('roleRefiner');
|
|
39
|
+
const couplingAnalyzer = sc.get('couplingAnalyzer');
|
|
40
|
+
const layerInferrer = sc.get('layerInferrer');
|
|
41
|
+
const dimensionAnalyzer = sc.get('dimensionAnalyzer');
|
|
42
|
+
return new PanoramaAggregator({
|
|
43
|
+
roleRefiner,
|
|
44
|
+
couplingAnalyzer,
|
|
45
|
+
layerInferrer,
|
|
46
|
+
db: getDb(),
|
|
47
|
+
projectRoot: getProjectRoot(),
|
|
48
|
+
dimensionAnalyzer,
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
ct.singleton('panoramaScanner', () => {
|
|
52
|
+
const logger = (ct.singletons.logger ?? {
|
|
53
|
+
info() { },
|
|
54
|
+
warn() { },
|
|
55
|
+
});
|
|
56
|
+
return new PanoramaScanner({
|
|
57
|
+
projectRoot: getProjectRoot(),
|
|
58
|
+
container: container,
|
|
59
|
+
logger,
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
ct.singleton('panoramaService', (c) => {
|
|
63
|
+
const sc = c;
|
|
64
|
+
const aggregator = sc.get('panoramaAggregator');
|
|
65
|
+
const scanner = sc.get('panoramaScanner');
|
|
66
|
+
const moduleDiscoverer = sc.get('moduleDiscoverer');
|
|
67
|
+
return new PanoramaService({
|
|
68
|
+
aggregator,
|
|
69
|
+
db: getDb(),
|
|
70
|
+
projectRoot: getProjectRoot(),
|
|
71
|
+
scanner,
|
|
72
|
+
moduleDiscoverer,
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
},
|
|
76
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SignalModule — Phase 0 信号基础设施注册
|
|
3
|
+
*
|
|
4
|
+
* 注册:
|
|
5
|
+
* - signalBus: 统一信号总线(基础设施层)
|
|
6
|
+
* - hitRecorder: 批量使用信号采集器(服务层)
|
|
7
|
+
* - intent JSONL persistence subscriber
|
|
8
|
+
*/
|
|
9
|
+
import type { ServiceContainer } from '../ServiceContainer.js';
|
|
10
|
+
export declare function register(c: ServiceContainer): void;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SignalModule — Phase 0 信号基础设施注册
|
|
3
|
+
*
|
|
4
|
+
* 注册:
|
|
5
|
+
* - signalBus: 统一信号总线(基础设施层)
|
|
6
|
+
* - hitRecorder: 批量使用信号采集器(服务层)
|
|
7
|
+
* - intent JSONL persistence subscriber
|
|
8
|
+
*/
|
|
9
|
+
import fs from 'node:fs';
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
import { SignalAggregator } from '../../infrastructure/signal/SignalAggregator.js';
|
|
12
|
+
import { SignalBridge } from '../../infrastructure/signal/SignalBridge.js';
|
|
13
|
+
import { SignalBus } from '../../infrastructure/signal/SignalBus.js';
|
|
14
|
+
import { SignalTraceWriter } from '../../infrastructure/signal/SignalTraceWriter.js';
|
|
15
|
+
import { HitRecorder } from '../../service/signal/HitRecorder.js';
|
|
16
|
+
import { resolveProjectRoot } from '../../shared/resolveProjectRoot.js';
|
|
17
|
+
import { shutdown } from '../../shared/shutdown.js';
|
|
18
|
+
/**
|
|
19
|
+
* Register intent signal subscriber for JSONL persistence.
|
|
20
|
+
* Replaces standalone SignalLogger — writes IntentChainRecord to .autosnippet/logs/signals/YYYY-MM-DD.jsonl.
|
|
21
|
+
*/
|
|
22
|
+
function registerIntentPersistence(signalBus, projectRoot) {
|
|
23
|
+
signalBus.subscribe('intent', (signal) => {
|
|
24
|
+
try {
|
|
25
|
+
const chain = signal.metadata?.chain;
|
|
26
|
+
if (!chain) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const dir = path.join(projectRoot, '.autosnippet', 'logs', 'signals');
|
|
30
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
31
|
+
const d = new Date(signal.timestamp);
|
|
32
|
+
const dateStr = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
|
|
33
|
+
const filePath = path.join(dir, `${dateStr}.jsonl`);
|
|
34
|
+
fs.appendFileSync(filePath, `${JSON.stringify(chain)}\n`, 'utf8');
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Write failure is non-blocking
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
export function register(c) {
|
|
42
|
+
// ═══ Infrastructure ═══
|
|
43
|
+
c.singleton('signalBus', () => new SignalBus());
|
|
44
|
+
// ═══ Service ═══
|
|
45
|
+
c.singleton('hitRecorder', (ct) => {
|
|
46
|
+
const bus = ct.get('signalBus');
|
|
47
|
+
const db = ct.get('database');
|
|
48
|
+
const recorder = new HitRecorder(bus, db);
|
|
49
|
+
recorder.start();
|
|
50
|
+
// shutdown hook: 在 DB close 之前 flush buffer
|
|
51
|
+
shutdown.register(async () => {
|
|
52
|
+
await recorder.stop();
|
|
53
|
+
}, 'hitRecorder');
|
|
54
|
+
return recorder;
|
|
55
|
+
});
|
|
56
|
+
// ═══ Intent Signal Persistence ═══
|
|
57
|
+
// Register after signalBus is created — subscribe for JSONL persistence
|
|
58
|
+
const signalBus = c.get('signalBus');
|
|
59
|
+
const projectRoot = resolveProjectRoot(c);
|
|
60
|
+
registerIntentPersistence(signalBus, projectRoot);
|
|
61
|
+
// ═══ SignalBridge — SignalBus → EventBus 桥接 ═══
|
|
62
|
+
c.singleton('signalBridge', (ct) => {
|
|
63
|
+
const bus = ct.get('signalBus');
|
|
64
|
+
const eventBus = ct.get('eventBus');
|
|
65
|
+
return new SignalBridge(bus, eventBus);
|
|
66
|
+
});
|
|
67
|
+
// ═══ SignalTraceWriter — 全类型信号 JSONL 留痕 ═══
|
|
68
|
+
c.singleton('signalTraceWriter', (ct) => {
|
|
69
|
+
const bus = ct.get('signalBus');
|
|
70
|
+
const root = resolveProjectRoot(ct);
|
|
71
|
+
return new SignalTraceWriter(bus, path.join(root, '.autosnippet', 'logs', 'signals'));
|
|
72
|
+
});
|
|
73
|
+
// ═══ SignalAggregator — 滑窗统计 + 异常检测 ═══
|
|
74
|
+
c.singleton('signalAggregator', (ct) => {
|
|
75
|
+
const bus = ct.get('signalBus');
|
|
76
|
+
const reportStore = ct.get('reportStore');
|
|
77
|
+
const agg = new SignalAggregator(bus, reportStore);
|
|
78
|
+
agg.start();
|
|
79
|
+
shutdown.register(async () => {
|
|
80
|
+
agg.stop();
|
|
81
|
+
}, 'signalAggregator');
|
|
82
|
+
return agg;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
@@ -200,7 +200,10 @@ export class KnowledgeRepositoryImpl extends BaseRepository {
|
|
|
200
200
|
SELECT
|
|
201
201
|
COUNT(*) as total,
|
|
202
202
|
SUM(CASE WHEN lifecycle = 'pending' THEN 1 ELSE 0 END) as pending,
|
|
203
|
+
SUM(CASE WHEN lifecycle = 'staging' THEN 1 ELSE 0 END) as staging,
|
|
203
204
|
SUM(CASE WHEN lifecycle = 'active' THEN 1 ELSE 0 END) as active,
|
|
205
|
+
SUM(CASE WHEN lifecycle = 'evolving' THEN 1 ELSE 0 END) as evolving,
|
|
206
|
+
SUM(CASE WHEN lifecycle = 'decaying' THEN 1 ELSE 0 END) as decaying,
|
|
204
207
|
SUM(CASE WHEN lifecycle = 'deprecated' THEN 1 ELSE 0 END) as deprecated,
|
|
205
208
|
SUM(CASE WHEN kind = 'rule' THEN 1 ELSE 0 END) as rules,
|
|
206
209
|
SUM(CASE WHEN kind = 'pattern' THEN 1 ELSE 0 END) as patterns,
|
|
@@ -238,6 +241,8 @@ export class KnowledgeRepositoryImpl extends BaseRepository {
|
|
|
238
241
|
// SQLite INTEGER → boolean
|
|
239
242
|
autoApprovable: !!row.autoApprovable,
|
|
240
243
|
includeHeaders: !!row.includeHeaders,
|
|
244
|
+
// Staging support
|
|
245
|
+
stagingDeadline: row.staging_deadline || null,
|
|
241
246
|
});
|
|
242
247
|
}
|
|
243
248
|
/** KnowledgeEntry → DB Row (camelCase 列名 = 属性名,直传) */
|
|
@@ -287,6 +292,7 @@ export class KnowledgeRepositoryImpl extends BaseRepository {
|
|
|
287
292
|
updatedAt: e.updatedAt || now,
|
|
288
293
|
publishedAt: e.publishedAt || null,
|
|
289
294
|
publishedBy: e.publishedBy || null,
|
|
295
|
+
staging_deadline: e.stagingDeadline || null,
|
|
290
296
|
};
|
|
291
297
|
}
|
|
292
298
|
/**
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* bootstrap:all-completed — 全部任务完成
|
|
19
19
|
*/
|
|
20
20
|
import type { EventBus } from '../../infrastructure/event/EventBus.js';
|
|
21
|
+
import type { SignalBus } from '../../infrastructure/signal/SignalBus.js';
|
|
21
22
|
interface TaskMeta {
|
|
22
23
|
type?: string;
|
|
23
24
|
dimId?: string;
|
|
@@ -40,6 +41,7 @@ interface TaskDef {
|
|
|
40
41
|
}
|
|
41
42
|
interface BootstrapTaskManagerOpts {
|
|
42
43
|
eventBus?: EventBus | null;
|
|
44
|
+
signalBus?: SignalBus | null;
|
|
43
45
|
getRealtimeService?: (() => {
|
|
44
46
|
broadcastEvent(name: string, data: unknown): void;
|
|
45
47
|
} | null) | null;
|
|
@@ -96,7 +98,7 @@ declare class BootstrapSession {
|
|
|
96
98
|
}
|
|
97
99
|
export declare class BootstrapTaskManager {
|
|
98
100
|
#private;
|
|
99
|
-
constructor({ eventBus, getRealtimeService }?: BootstrapTaskManagerOpts);
|
|
101
|
+
constructor({ eventBus, signalBus, getRealtimeService }?: BootstrapTaskManagerOpts);
|
|
100
102
|
/**
|
|
101
103
|
* 启动新的 bootstrap 会话
|
|
102
104
|
*
|
|
@@ -118,10 +118,12 @@ class BootstrapSession {
|
|
|
118
118
|
export class BootstrapTaskManager {
|
|
119
119
|
#currentSession = null;
|
|
120
120
|
#eventBus = null;
|
|
121
|
+
#signalBus = null;
|
|
121
122
|
/** 获取 RealtimeService 的 getter(延迟获取,避免循环依赖) */
|
|
122
123
|
#getRealtimeService = null;
|
|
123
|
-
constructor({ eventBus, getRealtimeService } = {}) {
|
|
124
|
+
constructor({ eventBus, signalBus, getRealtimeService } = {}) {
|
|
124
125
|
this.#eventBus = eventBus || null;
|
|
126
|
+
this.#signalBus = signalBus || null;
|
|
125
127
|
this.#getRealtimeService = getRealtimeService || null;
|
|
126
128
|
}
|
|
127
129
|
// ═══════════════════════════════════════════════════════════
|
|
@@ -197,6 +199,15 @@ export class BootstrapTaskManager {
|
|
|
197
199
|
error: t.error,
|
|
198
200
|
})),
|
|
199
201
|
});
|
|
202
|
+
this.#signalBus?.send('lifecycle', 'Bootstrap', 0.3, {
|
|
203
|
+
metadata: {
|
|
204
|
+
action: 'bootstrap_aborted',
|
|
205
|
+
sessionId: session.id,
|
|
206
|
+
reason,
|
|
207
|
+
completed: session.completedTasks,
|
|
208
|
+
failed: session.failedTasks,
|
|
209
|
+
},
|
|
210
|
+
});
|
|
200
211
|
}
|
|
201
212
|
/**
|
|
202
213
|
* 验证 sessionId 是否仍然是活跃 session
|
|
@@ -350,6 +361,14 @@ export class BootstrapTaskManager {
|
|
|
350
361
|
error: t.error,
|
|
351
362
|
})),
|
|
352
363
|
});
|
|
364
|
+
this.#signalBus?.send('lifecycle', 'Bootstrap', 1, {
|
|
365
|
+
metadata: {
|
|
366
|
+
action: 'bootstrap_completed',
|
|
367
|
+
sessionId: session.id,
|
|
368
|
+
completed: session.completedTasks,
|
|
369
|
+
failed: session.failedTasks,
|
|
370
|
+
},
|
|
371
|
+
});
|
|
353
372
|
}
|
|
354
373
|
/** 发射事件到 EventBus + 推送到前端 Socket.io */
|
|
355
374
|
#emit(eventName, data) {
|
|
@@ -44,16 +44,15 @@ const MCP_TOOLS_SUMMARY = [
|
|
|
44
44
|
name: 'autosnippet_submit_knowledge',
|
|
45
45
|
desc: 'Submit a knowledge candidate (strict validation)',
|
|
46
46
|
},
|
|
47
|
-
{
|
|
48
|
-
name: 'autosnippet_submit_knowledge_batch',
|
|
49
|
-
desc: 'Batch submit candidates (with dedup + throttle)',
|
|
50
|
-
},
|
|
51
47
|
{ name: 'autosnippet_guard', desc: 'Code compliance check (single file or batch audit)' },
|
|
52
48
|
{ name: 'autosnippet_structure', desc: 'Project structure discovery (targets/files/metadata)' },
|
|
53
49
|
{ name: 'autosnippet_graph', desc: 'Knowledge graph query (query/impact/path/stats)' },
|
|
54
50
|
{ name: 'autosnippet_skill', desc: 'Skill management (list/load/create/update/delete)' },
|
|
55
|
-
{ name: 'autosnippet_save_document', desc: 'Save development document (auto-publish)' },
|
|
56
51
|
{ name: 'autosnippet_bootstrap', desc: 'Project cold-start & scan' },
|
|
52
|
+
{
|
|
53
|
+
name: 'autosnippet_panorama',
|
|
54
|
+
desc: 'Project panorama (operation: overview/module/gaps/health)',
|
|
55
|
+
},
|
|
57
56
|
{ name: 'autosnippet_health', desc: 'Service health & KB statistics' },
|
|
58
57
|
{ name: 'autosnippet_capabilities', desc: 'List all available MCP tools (self-discovery)' },
|
|
59
58
|
];
|
|
@@ -157,7 +157,9 @@ export declare class CursorDeliveryPipeline {
|
|
|
157
157
|
};
|
|
158
158
|
}>;
|
|
159
159
|
/**
|
|
160
|
-
* 加载知识条目(active + high-confidence pending)
|
|
160
|
+
* 加载知识条目(active + staging + high-confidence pending)
|
|
161
|
+
*
|
|
162
|
+
* M2 六态状态机: staging/active/evolving 均为 CONSUMABLE 状态
|
|
161
163
|
*/
|
|
162
164
|
_loadEntries(): Promise<KnowledgeEntryProps[]>;
|
|
163
165
|
/**
|