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
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* autosnippet_bootstrap 已迁移到 bootstrap-external.js(外部 Agent 路径)。
|
|
10
10
|
*/
|
|
11
11
|
import { getRequiredFieldsDescription } from '#domain/knowledge/FieldSpec.js';
|
|
12
|
+
import { envelope } from '../envelope.js';
|
|
12
13
|
import * as browseHandlers from './browse.js';
|
|
13
|
-
import * as candidateHandlers from './candidate.js';
|
|
14
14
|
import * as guardHandlers from './guard.js';
|
|
15
15
|
import * as searchHandlers from './search.js';
|
|
16
16
|
import * as skillHandlers from './skill.js';
|
|
@@ -123,11 +123,24 @@ export async function consolidatedGraph(ctx, args) {
|
|
|
123
123
|
// ─── autosnippet_guard (整合 3 → 1) ─────────────────────────
|
|
124
124
|
/**
|
|
125
125
|
* Guard 检查:按参数自动路由
|
|
126
|
+
* operation: 'reverse_audit' → guardReverseAudit() (Recipe→Code 反向验证)
|
|
127
|
+
* operation: 'coverage_matrix' → guardCoverageMatrix() (模块覆盖率矩阵)
|
|
128
|
+
* operation: 'compliance_report' → guardComplianceReport() (3D 合规报告)
|
|
126
129
|
* 无参数 → guardReview() (自动 git diff 检测 + inline recipe)
|
|
127
130
|
* 有 files → guardReview() (指定文件 + inline recipe) — files 为 string[] 或 {path}[]
|
|
128
131
|
* 有 code → guardCheck() (单文件内联检查)
|
|
129
132
|
*/
|
|
130
133
|
export async function consolidatedGuard(ctx, args) {
|
|
134
|
+
// operation 显式路由
|
|
135
|
+
if (args.operation === 'reverse_audit') {
|
|
136
|
+
return guardHandlers.guardReverseAudit(ctx, args);
|
|
137
|
+
}
|
|
138
|
+
if (args.operation === 'coverage_matrix') {
|
|
139
|
+
return guardHandlers.guardCoverageMatrix(ctx, args);
|
|
140
|
+
}
|
|
141
|
+
if (args.operation === 'compliance_report') {
|
|
142
|
+
return guardHandlers.guardComplianceReport(ctx, args);
|
|
143
|
+
}
|
|
131
144
|
// 有 code → 单文件检查(旧模式)
|
|
132
145
|
if (args.code) {
|
|
133
146
|
return guardHandlers.guardCheck(ctx, args);
|
|
@@ -174,116 +187,283 @@ export async function consolidatedSkill(ctx, args) {
|
|
|
174
187
|
throw new Error(`Unknown skill operation: ${op}. Expected: list, load, create, update, delete, suggest, feedback`);
|
|
175
188
|
}
|
|
176
189
|
}
|
|
177
|
-
// ─── autosnippet_submit_knowledge (
|
|
190
|
+
// ─── autosnippet_submit_knowledge (unified pipeline) ──────────────────────
|
|
178
191
|
/**
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
192
|
+
* 统一提交管线:单条与批量走同一代码路径。
|
|
193
|
+
*
|
|
194
|
+
* 流程:
|
|
195
|
+
* 1. 解析 items[] → 限流
|
|
196
|
+
* 2. 严格校验所有条目(UnifiedValidator)→ valid[] + rejected[]
|
|
197
|
+
* 3. 融合分析(ConsolidationAdvisor.analyzeBatch)→ submittable[] + blocked[]
|
|
198
|
+
* 4. 提交 submittable → enrich + service.create()
|
|
199
|
+
* 5. 返回统一结果
|
|
182
200
|
*
|
|
183
201
|
* 设计原则:
|
|
184
202
|
* - 不降级:缺字段不自动补全,要求 Agent 一次性生成完整数据
|
|
185
|
-
* -
|
|
203
|
+
* - 不碎片化:优先增强已有 Recipe,而非总新建
|
|
204
|
+
* - 不重复提交:拒绝时不创建任何记录
|
|
205
|
+
* - 单条/批量完全一致的校验与融合逻辑
|
|
186
206
|
*/
|
|
187
207
|
export async function enhancedSubmitKnowledge(ctx, args) {
|
|
188
208
|
const { submitKnowledge } = await import('./knowledge.js');
|
|
189
209
|
const { UnifiedValidator } = await import('#domain/knowledge/UnifiedValidator.js');
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
210
|
+
const items = args.items;
|
|
211
|
+
if (!items || !Array.isArray(items) || items.length === 0) {
|
|
212
|
+
return envelope({
|
|
213
|
+
success: false,
|
|
214
|
+
errorCode: 'INVALID_INPUT',
|
|
215
|
+
message: 'items 数组是必需的且不能为空。请传入 items: [{ title, language, ... }]',
|
|
216
|
+
meta: { tool: 'autosnippet_submit_knowledge' },
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
const skipConsolidation = args.skipConsolidation === true;
|
|
220
|
+
const source = args.source || 'mcp';
|
|
221
|
+
const dimensionId = args.dimensionId;
|
|
222
|
+
const clientId = args.client_id;
|
|
223
|
+
// ── Step 1: 限流 ──
|
|
224
|
+
const { checkRecipeSave } = await import('#http/middleware/RateLimiter.js');
|
|
225
|
+
const { resolveProjectRoot } = await import('#shared/resolveProjectRoot.js');
|
|
226
|
+
const projectRoot = resolveProjectRoot(ctx.container);
|
|
227
|
+
const limitCheck = checkRecipeSave(projectRoot, clientId || process.env.USER || 'mcp-client');
|
|
228
|
+
if (!limitCheck.allowed) {
|
|
229
|
+
return envelope({
|
|
230
|
+
success: false,
|
|
231
|
+
message: `提交过于频繁,请 ${limitCheck.retryAfter}s 后再试。`,
|
|
232
|
+
errorCode: 'RATE_LIMIT',
|
|
233
|
+
meta: { tool: 'autosnippet_submit_knowledge' },
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
// ── Step 2: 严格校验所有条目 ──
|
|
193
237
|
const validator = new UnifiedValidator();
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
//
|
|
199
|
-
|
|
238
|
+
const validItems = [];
|
|
239
|
+
const rejectedItems = [];
|
|
240
|
+
for (let i = 0; i < items.length; i++) {
|
|
241
|
+
const item = items[i];
|
|
242
|
+
// 合并批次级选项到条目
|
|
243
|
+
if (!item.source) {
|
|
244
|
+
item.source = source;
|
|
245
|
+
}
|
|
246
|
+
if (dimensionId && !item.dimensionId) {
|
|
247
|
+
item.dimensionId = dimensionId;
|
|
248
|
+
}
|
|
249
|
+
const validation = validator.validate(item, { skipUniqueness: false });
|
|
250
|
+
if (validation.pass) {
|
|
251
|
+
validItems.push({ index: i, item });
|
|
252
|
+
// 记录标题/指纹供后续去重检测
|
|
253
|
+
validator.recordSubmission(item.title, item.content?.pattern);
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
rejectedItems.push({
|
|
257
|
+
index: i,
|
|
258
|
+
title: item.title || '(untitled)',
|
|
259
|
+
errors: validation.errors,
|
|
260
|
+
warnings: validation.warnings,
|
|
261
|
+
});
|
|
262
|
+
// 记录拒绝到 BootstrapSession tracker
|
|
263
|
+
_trackRejection(ctx, item, dimensionId);
|
|
264
|
+
// 仍然记录标题/指纹防止后续条目重复
|
|
265
|
+
validator.recordSubmission(item.title, item.content?.pattern);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// 全部被拒绝
|
|
269
|
+
if (validItems.length === 0) {
|
|
270
|
+
const allMissing = [...new Set(rejectedItems.flatMap((it) => it.errors))];
|
|
200
271
|
return envelope({
|
|
201
272
|
success: false,
|
|
202
|
-
message: `提交被拒绝:${validResult.errors.join('; ')}。请在单次调用中补齐所有字段后重新提交,不要分步提交或先提交再补全。`,
|
|
203
273
|
errorCode: 'INCOMPLETE_SUBMISSION',
|
|
274
|
+
message: `全部 ${items.length} 条知识条目被拒绝。请在单次调用中补齐所有字段后重新提交。`,
|
|
204
275
|
data: {
|
|
205
|
-
|
|
206
|
-
warnings: validResult.warnings,
|
|
276
|
+
rejectedItems,
|
|
207
277
|
requiredFields: getRequiredFieldsDescription(),
|
|
278
|
+
commonErrors: allMissing,
|
|
208
279
|
},
|
|
209
280
|
meta: { tool: 'autosnippet_submit_knowledge' },
|
|
210
281
|
});
|
|
211
282
|
}
|
|
212
|
-
// ──
|
|
213
|
-
const
|
|
214
|
-
|
|
215
|
-
if (
|
|
216
|
-
|
|
283
|
+
// ── Step 3: 融合分析(统一对所有有效条目运行) ──
|
|
284
|
+
const submittableItems = [];
|
|
285
|
+
const blockedItems = [];
|
|
286
|
+
if (skipConsolidation) {
|
|
287
|
+
submittableItems.push(...validItems);
|
|
217
288
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
289
|
+
else {
|
|
290
|
+
const advisor = ctx.container.get('consolidationAdvisor');
|
|
291
|
+
if (!advisor || typeof advisor.analyzeBatch !== 'function') {
|
|
292
|
+
// DI 未注册时降级放行
|
|
293
|
+
submittableItems.push(...validItems);
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
try {
|
|
297
|
+
const candidates = validItems.map((v) => ({
|
|
298
|
+
title: v.item.title || '',
|
|
299
|
+
description: v.item.description || '',
|
|
300
|
+
doClause: v.item.doClause,
|
|
301
|
+
dontClause: v.item.dontClause,
|
|
302
|
+
coreCode: v.item.coreCode,
|
|
303
|
+
category: v.item.category,
|
|
304
|
+
trigger: v.item.trigger,
|
|
305
|
+
whenClause: v.item.whenClause,
|
|
306
|
+
kind: v.item.kind,
|
|
307
|
+
content: v.item.content,
|
|
308
|
+
}));
|
|
309
|
+
const batchAdvice = advisor.analyzeBatch(candidates);
|
|
310
|
+
for (const { index: adviceIdx, advice } of batchAdvice.items) {
|
|
311
|
+
const validEntry = validItems[adviceIdx];
|
|
312
|
+
if (advice.action === 'create') {
|
|
313
|
+
submittableItems.push(validEntry);
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
blockedItems.push({
|
|
317
|
+
index: validEntry.index,
|
|
318
|
+
title: validEntry.item.title || '(untitled)',
|
|
319
|
+
consolidation: advice,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// 将批次内重叠信息附加到 blockedItems
|
|
324
|
+
if (batchAdvice.internalOverlaps.length > 0) {
|
|
325
|
+
for (const overlap of batchAdvice.internalOverlaps) {
|
|
326
|
+
const entryB = validItems[overlap.indexB];
|
|
327
|
+
// 如果 B 已经被放行,降级为 blocked(批次内碎片化警告)
|
|
328
|
+
const alreadyBlocked = blockedItems.some((b) => b.index === entryB.index);
|
|
329
|
+
if (!alreadyBlocked) {
|
|
330
|
+
const entryA = validItems[overlap.indexA];
|
|
331
|
+
blockedItems.push({
|
|
332
|
+
index: entryB.index,
|
|
333
|
+
title: entryB.item.title || '(untitled)',
|
|
334
|
+
consolidation: {
|
|
335
|
+
action: 'merge',
|
|
336
|
+
reason: `与同批次候选「${entryA.item.title || ''}」高度重叠(${(overlap.similarity * 100).toFixed(0)}%),建议合并后再提交。`,
|
|
337
|
+
internalOverlap: true,
|
|
338
|
+
overlapWith: {
|
|
339
|
+
index: entryA.index,
|
|
340
|
+
title: entryA.item.title,
|
|
341
|
+
similarity: overlap.similarity,
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
});
|
|
345
|
+
// 从 submittable 中移除
|
|
346
|
+
const subIdx = submittableItems.findIndex((s) => s.index === entryB.index);
|
|
347
|
+
if (subIdx >= 0) {
|
|
348
|
+
submittableItems.splice(subIdx, 1);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
catch {
|
|
355
|
+
// 分析失败时静默降级放行
|
|
356
|
+
submittableItems.push(...validItems.filter((v) => !submittableItems.some((s) => s.index === v.index)));
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
// ── Step 4: 提交所有通过的条目 ──
|
|
361
|
+
let successCount = 0;
|
|
362
|
+
const successIds = [];
|
|
363
|
+
const submitErrors = [];
|
|
364
|
+
for (const { index, item } of submittableItems) {
|
|
221
365
|
try {
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
};
|
|
227
|
-
const dedupResult = await candidateHandlers.checkDuplicate(ctx, {
|
|
228
|
-
candidate: dedupCandidate,
|
|
229
|
-
threshold: 0.7,
|
|
230
|
-
topK: 3,
|
|
366
|
+
const result = await submitKnowledge(ctx, {
|
|
367
|
+
...item,
|
|
368
|
+
source: item.source || source,
|
|
369
|
+
client_id: clientId,
|
|
231
370
|
});
|
|
232
|
-
if (
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
371
|
+
if (result?.success && result.data?.id) {
|
|
372
|
+
successCount++;
|
|
373
|
+
const recipeId = result.data.id;
|
|
374
|
+
successIds.push(recipeId);
|
|
375
|
+
_trackSubmission(ctx, item, dimensionId, recipeId);
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
submitErrors.push({
|
|
379
|
+
index,
|
|
380
|
+
title: item.title || '(untitled)',
|
|
381
|
+
error: result?.message || 'unknown error',
|
|
382
|
+
});
|
|
237
383
|
}
|
|
238
384
|
}
|
|
239
|
-
catch {
|
|
240
|
-
|
|
385
|
+
catch (err) {
|
|
386
|
+
submitErrors.push({
|
|
387
|
+
index,
|
|
388
|
+
title: item.title || '(untitled)',
|
|
389
|
+
error: err instanceof Error ? err.message : String(err),
|
|
390
|
+
});
|
|
241
391
|
}
|
|
242
392
|
}
|
|
243
|
-
//
|
|
244
|
-
|
|
245
|
-
|
|
393
|
+
// ── Step 5: 构建统一响应 ──
|
|
394
|
+
const data = {
|
|
395
|
+
count: successCount,
|
|
396
|
+
total: items.length,
|
|
397
|
+
};
|
|
398
|
+
if (successIds.length > 0) {
|
|
399
|
+
data.ids = successIds;
|
|
400
|
+
}
|
|
401
|
+
if (submitErrors.length > 0) {
|
|
402
|
+
data.errors = submitErrors;
|
|
246
403
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
404
|
+
if (rejectedItems.length > 0) {
|
|
405
|
+
const allMissing = [...new Set(rejectedItems.flatMap((it) => it.errors))];
|
|
406
|
+
data.rejectedItems = rejectedItems;
|
|
407
|
+
data.rejectedSummary = {
|
|
408
|
+
rejectedCount: rejectedItems.length,
|
|
409
|
+
commonErrors: allMissing,
|
|
410
|
+
message: `${rejectedItems.length}/${items.length} 条知识条目因校验未通过被拒绝。`,
|
|
411
|
+
};
|
|
250
412
|
}
|
|
251
|
-
|
|
413
|
+
if (blockedItems.length > 0) {
|
|
414
|
+
data.blockedItems = blockedItems;
|
|
415
|
+
data.blockedSummary = {
|
|
416
|
+
blockedCount: blockedItems.length,
|
|
417
|
+
message: `${blockedItems.length} 条因融合分析被阻塞(与已有 Recipe 重叠或实质性不足)。设 skipConsolidation: true 可跳过。`,
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
const allOk = successCount === items.length;
|
|
421
|
+
return envelope({
|
|
422
|
+
success: successCount > 0,
|
|
423
|
+
data,
|
|
424
|
+
message: allOk
|
|
425
|
+
? `已提交 ${successCount} 条知识条目。`
|
|
426
|
+
: `已提交 ${successCount}/${items.length} 条知识条目。`,
|
|
427
|
+
meta: { tool: 'autosnippet_submit_knowledge' },
|
|
428
|
+
});
|
|
252
429
|
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* 记录成功提交到活跃 BootstrapSession 的 submissionTracker
|
|
256
|
-
* 静默失败 — tracker 不可用时不影响提交本身
|
|
257
|
-
*/
|
|
258
|
-
function _trackSubmission(ctx, args, recipeId) {
|
|
430
|
+
function _getSession(ctx) {
|
|
259
431
|
try {
|
|
260
432
|
const sessionManager = ctx.container.get('bootstrapSessionManager');
|
|
261
433
|
const session = sessionManager?.getSession?.();
|
|
262
434
|
if (!session?.submissionTracker) {
|
|
263
|
-
return;
|
|
435
|
+
return null;
|
|
264
436
|
}
|
|
265
|
-
// 推断当前维度: 优先使用 Agent 显式传递的 dimensionId,其次推断 remainingDimIds[0]
|
|
266
437
|
const progress = session.getProgress();
|
|
267
|
-
|
|
268
|
-
|
|
438
|
+
return { session, dimId: progress.remainingDimIds[0] || 'unknown' };
|
|
439
|
+
}
|
|
440
|
+
catch {
|
|
441
|
+
return null;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
function _trackSubmission(ctx, item, dimensionId, recipeId) {
|
|
445
|
+
const s = _getSession(ctx);
|
|
446
|
+
if (!s) {
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
try {
|
|
450
|
+
const dimId = dimensionId || item.dimensionId || s.dimId;
|
|
451
|
+
s.session.submissionTracker?.recordSubmission(dimId, item, recipeId);
|
|
269
452
|
}
|
|
270
453
|
catch {
|
|
271
|
-
|
|
454
|
+
/* best effort */
|
|
272
455
|
}
|
|
273
456
|
}
|
|
274
|
-
|
|
275
|
-
|
|
457
|
+
function _trackRejection(ctx, item, dimensionId) {
|
|
458
|
+
const s = _getSession(ctx);
|
|
459
|
+
if (!s) {
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
276
462
|
try {
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
if (!session?.submissionTracker) {
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
const progress = session.getProgress();
|
|
283
|
-
const currentDimId = args?.dimensionId || progress.remainingDimIds[0] || 'unknown';
|
|
284
|
-
session.submissionTracker.recordRejection(currentDimId, args?.title || '(untitled)', 'validation failed');
|
|
463
|
+
const dimId = dimensionId || item.dimensionId || s.dimId;
|
|
464
|
+
s.session.submissionTracker?.recordRejection(dimId, item.title || '(untitled)', 'validation failed');
|
|
285
465
|
}
|
|
286
466
|
catch {
|
|
287
|
-
|
|
467
|
+
/* best effort */
|
|
288
468
|
}
|
|
289
469
|
}
|
|
@@ -113,6 +113,29 @@ export declare function guardAuditFiles(ctx: McpContext, args: GuardAuditArgs):
|
|
|
113
113
|
errorCode: string | null;
|
|
114
114
|
message: string;
|
|
115
115
|
data: {
|
|
116
|
+
capabilityReport?: {
|
|
117
|
+
executedChecks: Record<string, {
|
|
118
|
+
total: number;
|
|
119
|
+
executed: number;
|
|
120
|
+
skipped: number;
|
|
121
|
+
}>;
|
|
122
|
+
skippedChecks: unknown[];
|
|
123
|
+
boundaries: unknown[];
|
|
124
|
+
uncertainResults: Array<{
|
|
125
|
+
ruleId: string;
|
|
126
|
+
message: string;
|
|
127
|
+
layer: string;
|
|
128
|
+
reason: string;
|
|
129
|
+
detail: string;
|
|
130
|
+
}>;
|
|
131
|
+
checkCoverage: number;
|
|
132
|
+
} | undefined;
|
|
133
|
+
uncertainSummary?: {
|
|
134
|
+
total: number;
|
|
135
|
+
byLayer: Record<string, number>;
|
|
136
|
+
byReason: Record<string, number>;
|
|
137
|
+
} | undefined;
|
|
138
|
+
boundaries?: unknown[] | undefined;
|
|
116
139
|
crossFileViolations?: unknown[] | undefined;
|
|
117
140
|
summary: {
|
|
118
141
|
[key: string]: unknown;
|
|
@@ -128,6 +151,7 @@ export declare function guardAuditFiles(ctx: McpContext, args: GuardAuditArgs):
|
|
|
128
151
|
total: number;
|
|
129
152
|
errors: number;
|
|
130
153
|
warnings: number;
|
|
154
|
+
uncertain?: number;
|
|
131
155
|
};
|
|
132
156
|
}[];
|
|
133
157
|
} | null;
|
|
@@ -190,6 +214,12 @@ export declare function guardReview(ctx: McpContext, args: GuardReviewArgs): Pro
|
|
|
190
214
|
errorCode: string | null;
|
|
191
215
|
message: string;
|
|
192
216
|
data: {
|
|
217
|
+
uncertainSummary?: {
|
|
218
|
+
total: number;
|
|
219
|
+
byLayer: Record<string, number>;
|
|
220
|
+
byReason: Record<string, number>;
|
|
221
|
+
} | undefined;
|
|
222
|
+
uncertainResults?: unknown[] | undefined;
|
|
193
223
|
passed: boolean;
|
|
194
224
|
reviewRound: any;
|
|
195
225
|
fileSource: string;
|
|
@@ -260,6 +290,7 @@ export declare function scanProject(ctx: McpContext, args: ScanProjectArgs): Pro
|
|
|
260
290
|
total: number;
|
|
261
291
|
errors: number;
|
|
262
292
|
warnings: number;
|
|
293
|
+
uncertain?: number;
|
|
263
294
|
};
|
|
264
295
|
}[];
|
|
265
296
|
} | null;
|
|
@@ -271,4 +302,123 @@ export declare function scanProject(ctx: McpContext, args: ScanProjectArgs): Pro
|
|
|
271
302
|
tool?: string | undefined;
|
|
272
303
|
};
|
|
273
304
|
}>;
|
|
305
|
+
interface ReverseAuditArgs {
|
|
306
|
+
maxFiles?: number;
|
|
307
|
+
[key: string]: unknown;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* 对所有 active rule Recipe 执行反向验证:
|
|
311
|
+
* - 检查 coreCode 引用的符号是否还存在
|
|
312
|
+
* - 检查 guard pattern 匹配率是否骤降
|
|
313
|
+
*/
|
|
314
|
+
export declare function guardReverseAudit(ctx: McpContext, args: ReverseAuditArgs): Promise<{
|
|
315
|
+
success: boolean;
|
|
316
|
+
errorCode: string | null;
|
|
317
|
+
message: string;
|
|
318
|
+
data: {
|
|
319
|
+
totalRecipes: number;
|
|
320
|
+
healthy: number;
|
|
321
|
+
investigate: number;
|
|
322
|
+
decay: number;
|
|
323
|
+
drifts: {
|
|
324
|
+
recipeId: string;
|
|
325
|
+
title: string;
|
|
326
|
+
recommendation: import("#service/guard/ReverseGuard.js").ReverseRecommendation;
|
|
327
|
+
signals: import("#service/guard/ReverseGuard.js").PatternDriftSignal[];
|
|
328
|
+
}[];
|
|
329
|
+
allResults: {
|
|
330
|
+
recipeId: string;
|
|
331
|
+
title: string;
|
|
332
|
+
recommendation: import("#service/guard/ReverseGuard.js").ReverseRecommendation;
|
|
333
|
+
signalCount: number;
|
|
334
|
+
}[];
|
|
335
|
+
} | null;
|
|
336
|
+
meta: {
|
|
337
|
+
source?: string | undefined;
|
|
338
|
+
responseTimeMs?: number | undefined;
|
|
339
|
+
version: string;
|
|
340
|
+
tool?: string | undefined;
|
|
341
|
+
};
|
|
342
|
+
}>;
|
|
343
|
+
interface CoverageMatrixArgs {
|
|
344
|
+
[key: string]: unknown;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* 计算模块级 Guard 规则覆盖率矩阵
|
|
348
|
+
*/
|
|
349
|
+
export declare function guardCoverageMatrix(ctx: McpContext, _args: CoverageMatrixArgs): Promise<{
|
|
350
|
+
success: boolean;
|
|
351
|
+
errorCode: string | null;
|
|
352
|
+
message: string;
|
|
353
|
+
data: {
|
|
354
|
+
overallCoverage: number;
|
|
355
|
+
zeroModules: string[];
|
|
356
|
+
lowModules: string[];
|
|
357
|
+
modules: import("#service/guard/CoverageAnalyzer.js").ModuleCoverage[];
|
|
358
|
+
} | null;
|
|
359
|
+
meta: {
|
|
360
|
+
source?: string | undefined;
|
|
361
|
+
responseTimeMs?: number | undefined;
|
|
362
|
+
version: string;
|
|
363
|
+
tool?: string | undefined;
|
|
364
|
+
};
|
|
365
|
+
}>;
|
|
366
|
+
interface ComplianceReportArgs {
|
|
367
|
+
[key: string]: unknown;
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* 生成 3D 合规报告(compliance + coverage + confidence)
|
|
371
|
+
* 包含完整 uncertain 消费数据
|
|
372
|
+
*/
|
|
373
|
+
export declare function guardComplianceReport(ctx: McpContext, _args: ComplianceReportArgs): Promise<{
|
|
374
|
+
success: boolean;
|
|
375
|
+
errorCode: string | null;
|
|
376
|
+
message: string;
|
|
377
|
+
data: {
|
|
378
|
+
scores: {
|
|
379
|
+
compliance: number;
|
|
380
|
+
coverage: number;
|
|
381
|
+
confidence: number;
|
|
382
|
+
};
|
|
383
|
+
qualityGate: {
|
|
384
|
+
status: string;
|
|
385
|
+
score: number;
|
|
386
|
+
thresholds: {
|
|
387
|
+
maxErrors: number;
|
|
388
|
+
maxWarnings: number;
|
|
389
|
+
minScore: number;
|
|
390
|
+
};
|
|
391
|
+
};
|
|
392
|
+
summary: {
|
|
393
|
+
filesScanned: number;
|
|
394
|
+
totalViolations: number;
|
|
395
|
+
errors: number;
|
|
396
|
+
warnings: number;
|
|
397
|
+
infos: number;
|
|
398
|
+
};
|
|
399
|
+
uncertainSummary: {
|
|
400
|
+
total: number;
|
|
401
|
+
byLayer: Record<string, number>;
|
|
402
|
+
byReason: Record<string, number>;
|
|
403
|
+
};
|
|
404
|
+
boundaries: {
|
|
405
|
+
type: string;
|
|
406
|
+
description: string;
|
|
407
|
+
affectedRules: string[];
|
|
408
|
+
suggestedAction: string;
|
|
409
|
+
}[];
|
|
410
|
+
topViolations: any[];
|
|
411
|
+
trend: {
|
|
412
|
+
errorsChange: number;
|
|
413
|
+
warningsChange: number;
|
|
414
|
+
hasHistory: boolean;
|
|
415
|
+
};
|
|
416
|
+
} | null;
|
|
417
|
+
meta: {
|
|
418
|
+
source?: string | undefined;
|
|
419
|
+
responseTimeMs?: number | undefined;
|
|
420
|
+
version: string;
|
|
421
|
+
tool?: string | undefined;
|
|
422
|
+
};
|
|
423
|
+
}>;
|
|
274
424
|
export {};
|