@gracker/smartperfetto 1.0.14 → 1.0.16
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/.env.example +16 -8
- package/dist/agent/agents/base/baseAgent.d.ts.map +1 -1
- package/dist/agent/agents/base/baseAgent.js +5 -1
- package/dist/agent/agents/base/baseAgent.js.map +1 -1
- package/dist/agent/context/enhancedSessionContext.d.ts +5 -0
- package/dist/agent/context/enhancedSessionContext.d.ts.map +1 -1
- package/dist/agent/context/enhancedSessionContext.js +13 -0
- package/dist/agent/context/enhancedSessionContext.js.map +1 -1
- package/dist/agent/core/conclusionContract.d.ts +16 -1
- package/dist/agent/core/conclusionContract.d.ts.map +1 -1
- package/dist/agent/core/conclusionGenerator.d.ts.map +1 -1
- package/dist/agent/core/conclusionGenerator.js +90 -7
- package/dist/agent/core/conclusionGenerator.js.map +1 -1
- package/dist/agent/core/executors/directSkillExecutor.d.ts.map +1 -1
- package/dist/agent/core/executors/directSkillExecutor.js +6 -12
- package/dist/agent/core/executors/directSkillExecutor.js.map +1 -1
- package/dist/agent/core/orchestratorTypes.d.ts +16 -0
- package/dist/agent/core/orchestratorTypes.d.ts.map +1 -1
- package/dist/agent/core/orchestratorTypes.js.map +1 -1
- package/dist/agent/experts/crossDomain/moduleExpertInvoker.d.ts.map +1 -1
- package/dist/agent/experts/crossDomain/moduleExpertInvoker.js +4 -1
- package/dist/agent/experts/crossDomain/moduleExpertInvoker.js.map +1 -1
- package/dist/agent/scene/sceneStage1Runner.d.ts +1 -1
- package/dist/agent/scene/sceneStage1Runner.d.ts.map +1 -1
- package/dist/agent/scene/sceneStage1Runner.js +1 -1
- package/dist/agent/scene/sceneStage1Runner.js.map +1 -1
- package/dist/agent/scene/sceneStoryService.d.ts +1 -1
- package/dist/agent/scene/sceneStoryService.d.ts.map +1 -1
- package/dist/agent/scene/sceneStoryService.js +4 -1
- package/dist/agent/scene/sceneStoryService.js.map +1 -1
- package/dist/agent/types/agentProtocol.d.ts.map +1 -1
- package/dist/agent/types/agentProtocol.js +4 -1
- package/dist/agent/types/agentProtocol.js.map +1 -1
- package/dist/agent/types.d.ts +7 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/agentOpenAI/openAiRuntime.d.ts.map +1 -1
- package/dist/agentOpenAI/openAiRuntime.js +11 -1
- package/dist/agentOpenAI/openAiRuntime.js.map +1 -1
- package/dist/agentOpenAI/openAiToolAdapter.d.ts.map +1 -1
- package/dist/agentOpenAI/openAiToolAdapter.js +27 -2
- package/dist/agentOpenAI/openAiToolAdapter.js.map +1 -1
- package/dist/agentv3/artifactStore.d.ts +5 -0
- package/dist/agentv3/artifactStore.d.ts.map +1 -1
- package/dist/agentv3/artifactStore.js +3 -0
- package/dist/agentv3/artifactStore.js.map +1 -1
- package/dist/agentv3/claudeMcpServer.d.ts +15 -1
- package/dist/agentv3/claudeMcpServer.d.ts.map +1 -1
- package/dist/agentv3/claudeMcpServer.js +436 -91
- package/dist/agentv3/claudeMcpServer.js.map +1 -1
- package/dist/agentv3/claudeRuntime.d.ts.map +1 -1
- package/dist/agentv3/claudeRuntime.js +17 -0
- package/dist/agentv3/claudeRuntime.js.map +1 -1
- package/dist/agentv3/claudeSystemPrompt.d.ts.map +1 -1
- package/dist/agentv3/claudeSystemPrompt.js +9 -0
- package/dist/agentv3/claudeSystemPrompt.js.map +1 -1
- package/dist/agentv3/mcpToolRegistry.d.ts +14 -2
- package/dist/agentv3/mcpToolRegistry.d.ts.map +1 -1
- package/dist/agentv3/mcpToolRegistry.js +25 -6
- package/dist/agentv3/mcpToolRegistry.js.map +1 -1
- package/dist/agentv3/sessionStateSnapshot.d.ts +41 -0
- package/dist/agentv3/sessionStateSnapshot.d.ts.map +1 -1
- package/dist/agentv3/types.d.ts +5 -0
- package/dist/agentv3/types.d.ts.map +1 -1
- package/dist/agentv3/types.js.map +1 -1
- package/dist/assistant/application/agentAnalyzeSessionService.d.ts +6 -0
- package/dist/assistant/application/agentAnalyzeSessionService.d.ts.map +1 -1
- package/dist/assistant/application/agentAnalyzeSessionService.js +9 -3
- package/dist/assistant/application/agentAnalyzeSessionService.js.map +1 -1
- package/dist/assistant/application/assistantApplicationService.d.ts.map +1 -1
- package/dist/assistant/application/assistantApplicationService.js +3 -1
- package/dist/assistant/application/assistantApplicationService.js.map +1 -1
- package/dist/cli-user/bin.js +99 -1
- package/dist/cli-user/bin.js.map +1 -1
- package/dist/cli-user/commands/analyze.d.ts +3 -0
- package/dist/cli-user/commands/analyze.d.ts.map +1 -1
- package/dist/cli-user/commands/analyze.js +2 -0
- package/dist/cli-user/commands/analyze.js.map +1 -1
- package/dist/cli-user/commands/codebase.d.ts +29 -0
- package/dist/cli-user/commands/codebase.d.ts.map +1 -0
- package/dist/cli-user/commands/codebase.js +152 -0
- package/dist/cli-user/commands/codebase.js.map +1 -0
- package/dist/cli-user/commands/config.d.ts.map +1 -1
- package/dist/cli-user/commands/config.js +4 -1
- package/dist/cli-user/commands/config.js.map +1 -1
- package/dist/cli-user/commands/report.js +64 -0
- package/dist/cli-user/commands/report.js.map +1 -1
- package/dist/cli-user/io/paths.d.ts +3 -0
- package/dist/cli-user/io/paths.d.ts.map +1 -1
- package/dist/cli-user/io/paths.js +6 -0
- package/dist/cli-user/io/paths.js.map +1 -1
- package/dist/cli-user/io/sessionStore.d.ts +1 -0
- package/dist/cli-user/io/sessionStore.d.ts.map +1 -1
- package/dist/cli-user/io/sessionStore.js +5 -0
- package/dist/cli-user/io/sessionStore.js.map +1 -1
- package/dist/cli-user/repl/renderer.d.ts +8 -0
- package/dist/cli-user/repl/renderer.d.ts.map +1 -1
- package/dist/cli-user/repl/renderer.js.map +1 -1
- package/dist/cli-user/services/cliAnalyzeService.d.ts +6 -0
- package/dist/cli-user/services/cliAnalyzeService.d.ts.map +1 -1
- package/dist/cli-user/services/cliAnalyzeService.js +183 -29
- package/dist/cli-user/services/cliAnalyzeService.js.map +1 -1
- package/dist/cli-user/services/turnPersistence.d.ts +0 -10
- package/dist/cli-user/services/turnPersistence.d.ts.map +1 -1
- package/dist/cli-user/services/turnPersistence.js +62 -0
- package/dist/cli-user/services/turnPersistence.js.map +1 -1
- package/dist/cli-user/services/turnRunner.d.ts +3 -0
- package/dist/cli-user/services/turnRunner.d.ts.map +1 -1
- package/dist/cli-user/services/turnRunner.js +6 -0
- package/dist/cli-user/services/turnRunner.js.map +1 -1
- package/dist/cli-user/types.d.ts +5 -0
- package/dist/cli-user/types.d.ts.map +1 -1
- package/dist/routes/agentReportRoutes.d.ts +1 -0
- package/dist/routes/agentReportRoutes.d.ts.map +1 -1
- package/dist/routes/agentReportRoutes.js +13 -2
- package/dist/routes/agentReportRoutes.js.map +1 -1
- package/dist/routes/agentResumeRoutes.d.ts.map +1 -1
- package/dist/routes/agentResumeRoutes.js +29 -5
- package/dist/routes/agentResumeRoutes.js.map +1 -1
- package/dist/routes/agentRoutes.d.ts.map +1 -1
- package/dist/routes/agentRoutes.js +297 -91
- package/dist/routes/agentRoutes.js.map +1 -1
- package/dist/routes/ragAdminRoutes.d.ts +13 -24
- package/dist/routes/ragAdminRoutes.d.ts.map +1 -1
- package/dist/routes/ragAdminRoutes.js +266 -11
- package/dist/routes/ragAdminRoutes.js.map +1 -1
- package/dist/scripts/verifyAgentSseScrolling.js +119 -3
- package/dist/scripts/verifyAgentSseScrolling.js.map +1 -1
- package/dist/services/agentEventStore.d.ts.map +1 -1
- package/dist/services/agentEventStore.js +13 -3
- package/dist/services/agentEventStore.js.map +1 -1
- package/dist/services/agentReportData.d.ts +3 -0
- package/dist/services/agentReportData.d.ts.map +1 -1
- package/dist/services/agentReportData.js.map +1 -1
- package/dist/services/analysisResultSnapshotPipeline.d.ts +3 -0
- package/dist/services/analysisResultSnapshotPipeline.d.ts.map +1 -1
- package/dist/services/analysisResultSnapshotPipeline.js +3 -0
- package/dist/services/analysisResultSnapshotPipeline.js.map +1 -1
- package/dist/services/analysisResultSnapshotStore.d.ts.map +1 -1
- package/dist/services/analysisResultSnapshotStore.js +34 -2
- package/dist/services/analysisResultSnapshotStore.js.map +1 -1
- package/dist/services/aospKnowledgeIngester.d.ts +7 -0
- package/dist/services/aospKnowledgeIngester.d.ts.map +1 -1
- package/dist/services/aospKnowledgeIngester.js +19 -7
- package/dist/services/aospKnowledgeIngester.js.map +1 -1
- package/dist/services/auth/codebaseScopes.d.ts +6 -0
- package/dist/services/auth/codebaseScopes.d.ts.map +1 -0
- package/dist/services/auth/codebaseScopes.js +23 -0
- package/dist/services/auth/codebaseScopes.js.map +1 -0
- package/dist/services/codebase/codeAwareFeature.d.ts +4 -0
- package/dist/services/codebase/codeAwareFeature.d.ts.map +1 -0
- package/dist/services/codebase/codeAwareFeature.js +18 -0
- package/dist/services/codebase/codeAwareFeature.js.map +1 -0
- package/dist/services/codebase/codeLookupLedger.d.ts +37 -0
- package/dist/services/codebase/codeLookupLedger.d.ts.map +1 -0
- package/dist/services/codebase/codeLookupLedger.js +126 -0
- package/dist/services/codebase/codeLookupLedger.js.map +1 -0
- package/dist/services/codebase/codebaseRegistry.d.ts +76 -0
- package/dist/services/codebase/codebaseRegistry.d.ts.map +1 -0
- package/dist/services/codebase/codebaseRegistry.js +164 -0
- package/dist/services/codebase/codebaseRegistry.js.map +1 -0
- package/dist/services/codebase/defaultCodebaseServices.d.ts +5 -0
- package/dist/services/codebase/defaultCodebaseServices.d.ts.map +1 -0
- package/dist/services/codebase/defaultCodebaseServices.js +21 -0
- package/dist/services/codebase/defaultCodebaseServices.js.map +1 -0
- package/dist/services/codebase/patchProposer.d.ts +44 -0
- package/dist/services/codebase/patchProposer.d.ts.map +1 -0
- package/dist/services/codebase/patchProposer.js +163 -0
- package/dist/services/codebase/patchProposer.js.map +1 -0
- package/dist/services/codebase/pathSecurityGate.d.ts +33 -0
- package/dist/services/codebase/pathSecurityGate.d.ts.map +1 -0
- package/dist/services/codebase/pathSecurityGate.js +214 -0
- package/dist/services/codebase/pathSecurityGate.js.map +1 -0
- package/dist/services/enterpriseSchema.d.ts.map +1 -1
- package/dist/services/enterpriseSchema.js +11 -0
- package/dist/services/enterpriseSchema.js.map +1 -1
- package/dist/services/evidence/evidenceContractBuilder.d.ts +11 -0
- package/dist/services/evidence/evidenceContractBuilder.d.ts.map +1 -0
- package/dist/services/evidence/evidenceContractBuilder.js +530 -0
- package/dist/services/evidence/evidenceContractBuilder.js.map +1 -0
- package/dist/services/htmlReportGenerator.d.ts +9 -0
- package/dist/services/htmlReportGenerator.d.ts.map +1 -1
- package/dist/services/htmlReportGenerator.js +133 -0
- package/dist/services/htmlReportGenerator.js.map +1 -1
- package/dist/services/persistAgentSession.d.ts.map +1 -1
- package/dist/services/persistAgentSession.js +24 -0
- package/dist/services/persistAgentSession.js.map +1 -1
- package/dist/services/processIdentity/identityContractMapper.d.ts +14 -0
- package/dist/services/processIdentity/identityContractMapper.d.ts.map +1 -0
- package/dist/services/processIdentity/identityContractMapper.js +135 -0
- package/dist/services/processIdentity/identityContractMapper.js.map +1 -0
- package/dist/services/processIdentity/types.d.ts +5 -0
- package/dist/services/processIdentity/types.d.ts.map +1 -1
- package/dist/services/processIdentity/types.js.map +1 -1
- package/dist/services/rag/aospSourceIngester.d.ts +26 -0
- package/dist/services/rag/aospSourceIngester.d.ts.map +1 -0
- package/dist/services/rag/aospSourceIngester.js +143 -0
- package/dist/services/rag/aospSourceIngester.js.map +1 -0
- package/dist/services/rag/appSourceIngester.d.ts +37 -0
- package/dist/services/rag/appSourceIngester.d.ts.map +1 -0
- package/dist/services/rag/appSourceIngester.js +165 -0
- package/dist/services/rag/appSourceIngester.js.map +1 -0
- package/dist/services/rag/baseIngester.d.ts +18 -0
- package/dist/services/rag/baseIngester.d.ts.map +1 -0
- package/dist/services/rag/baseIngester.js +197 -0
- package/dist/services/rag/baseIngester.js.map +1 -0
- package/dist/services/rag/kernelSourceIngester.d.ts +35 -0
- package/dist/services/rag/kernelSourceIngester.d.ts.map +1 -0
- package/dist/services/rag/kernelSourceIngester.js +170 -0
- package/dist/services/rag/kernelSourceIngester.js.map +1 -0
- package/dist/services/rag/lookupResponseFilter.d.ts +42 -0
- package/dist/services/rag/lookupResponseFilter.d.ts.map +1 -0
- package/dist/services/rag/lookupResponseFilter.js +192 -0
- package/dist/services/rag/lookupResponseFilter.js.map +1 -0
- package/dist/services/rag/sessionToolResultRegistry.d.ts +25 -0
- package/dist/services/rag/sessionToolResultRegistry.d.ts.map +1 -0
- package/dist/services/rag/sessionToolResultRegistry.js +57 -0
- package/dist/services/rag/sessionToolResultRegistry.js.map +1 -0
- package/dist/services/rag/toolResultProjectionFilter.d.ts +18 -0
- package/dist/services/rag/toolResultProjectionFilter.d.ts.map +1 -0
- package/dist/services/rag/toolResultProjectionFilter.js +33 -0
- package/dist/services/rag/toolResultProjectionFilter.js.map +1 -0
- package/dist/services/ragStore.d.ts +8 -0
- package/dist/services/ragStore.d.ts.map +1 -1
- package/dist/services/ragStore.js +77 -8
- package/dist/services/ragStore.js.map +1 -1
- package/dist/services/rbac.d.ts +1 -1
- package/dist/services/rbac.d.ts.map +1 -1
- package/dist/services/rbac.js +6 -0
- package/dist/services/rbac.js.map +1 -1
- package/dist/services/security/codeAwareOutputRegistry.d.ts +6 -0
- package/dist/services/security/codeAwareOutputRegistry.d.ts.map +1 -0
- package/dist/services/security/codeAwareOutputRegistry.js +55 -0
- package/dist/services/security/codeAwareOutputRegistry.js.map +1 -0
- package/dist/services/security/llmEchoOutputFilter.d.ts +49 -0
- package/dist/services/security/llmEchoOutputFilter.d.ts.map +1 -0
- package/dist/services/security/llmEchoOutputFilter.js +133 -0
- package/dist/services/security/llmEchoOutputFilter.js.map +1 -0
- package/dist/services/security/secretPatterns.d.ts +6 -0
- package/dist/services/security/secretPatterns.d.ts.map +1 -0
- package/dist/services/security/secretPatterns.js +23 -0
- package/dist/services/security/secretPatterns.js.map +1 -0
- package/dist/services/skillEngine/skillExecutor.d.ts +14 -2
- package/dist/services/skillEngine/skillExecutor.d.ts.map +1 -1
- package/dist/services/skillEngine/skillExecutor.js +133 -13
- package/dist/services/skillEngine/skillExecutor.js.map +1 -1
- package/dist/services/skillEngine/types.d.ts +2 -0
- package/dist/services/skillEngine/types.d.ts.map +1 -1
- package/dist/services/symbol/breakpadSymParser.d.ts +19 -0
- package/dist/services/symbol/breakpadSymParser.d.ts.map +1 -0
- package/dist/services/symbol/breakpadSymParser.js +40 -0
- package/dist/services/symbol/breakpadSymParser.js.map +1 -0
- package/dist/services/symbol/kallsymsParser.d.ts +12 -0
- package/dist/services/symbol/kallsymsParser.d.ts.map +1 -0
- package/dist/services/symbol/kallsymsParser.js +41 -0
- package/dist/services/symbol/kallsymsParser.js.map +1 -0
- package/dist/services/symbol/r8MappingParser.d.ts +40 -0
- package/dist/services/symbol/r8MappingParser.d.ts.map +1 -0
- package/dist/services/symbol/r8MappingParser.js +99 -0
- package/dist/services/symbol/r8MappingParser.js.map +1 -0
- package/dist/services/symbol/symbolResolver.d.ts +59 -0
- package/dist/services/symbol/symbolResolver.d.ts.map +1 -0
- package/dist/services/symbol/symbolResolver.js +147 -0
- package/dist/services/symbol/symbolResolver.js.map +1 -0
- package/dist/services/symbol/traceSymbolContext.d.ts +14 -0
- package/dist/services/symbol/traceSymbolContext.d.ts.map +1 -0
- package/dist/services/symbol/traceSymbolContext.js +45 -0
- package/dist/services/symbol/traceSymbolContext.js.map +1 -0
- package/dist/services/verifier/claimVerificationRunner.d.ts +20 -0
- package/dist/services/verifier/claimVerificationRunner.d.ts.map +1 -0
- package/dist/services/verifier/claimVerificationRunner.js +88 -0
- package/dist/services/verifier/claimVerificationRunner.js.map +1 -0
- package/dist/services/verifier/deterministicClaimVerifier.d.ts +8 -0
- package/dist/services/verifier/deterministicClaimVerifier.d.ts.map +1 -0
- package/dist/services/verifier/deterministicClaimVerifier.js +178 -0
- package/dist/services/verifier/deterministicClaimVerifier.js.map +1 -0
- package/dist/types/claimVerification.d.ts +38 -0
- package/dist/types/claimVerification.d.ts.map +1 -0
- package/dist/types/claimVerification.js +6 -0
- package/dist/types/claimVerification.js.map +1 -0
- package/dist/types/dataContract.d.ts +30 -0
- package/dist/types/dataContract.d.ts.map +1 -1
- package/dist/types/dataContract.js +7 -0
- package/dist/types/dataContract.js.map +1 -1
- package/dist/types/evidenceContract.d.ts +100 -0
- package/dist/types/evidenceContract.d.ts.map +1 -0
- package/dist/types/evidenceContract.js +6 -0
- package/dist/types/evidenceContract.js.map +1 -0
- package/dist/types/identityContract.d.ts +57 -0
- package/dist/types/identityContract.d.ts.map +1 -0
- package/dist/types/identityContract.js +6 -0
- package/dist/types/identityContract.js.map +1 -0
- package/dist/types/multiTraceComparison.d.ts +3 -0
- package/dist/types/multiTraceComparison.d.ts.map +1 -1
- package/dist/types/sparkContracts.d.ts +31 -3
- package/dist/types/sparkContracts.d.ts.map +1 -1
- package/dist/types/sparkContracts.js.map +1 -1
- package/package.json +8 -1
- package/skills/atomic/process_identity_resolver.skill.yaml +130 -1
- package/skills/atomic/process_slice_cpu_hotspots.skill.yaml +321 -0
- package/skills/composite/code_pinpoint.skill.yaml +111 -0
- package/strategies/anr.strategy.md +2 -2
- package/strategies/code-aware.template.md +37 -0
- package/strategies/game.strategy.md +1 -1
- package/strategies/general.strategy.md +1 -1
- package/strategies/prompt-methodology.template.md +2 -0
- package/strategies/scrolling.strategy.md +1 -0
|
@@ -37,6 +37,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
37
37
|
})();
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.MIN_PHASE_SUMMARY_CHARS = exports.MCP_NAME_PREFIX = void 0;
|
|
40
|
+
exports.normalizeOptionalToolString = normalizeOptionalToolString;
|
|
40
41
|
exports.loadLearnedSqlFixPairs = loadLearnedSqlFixPairs;
|
|
41
42
|
exports.createClaudeMcpServer = createClaudeMcpServer;
|
|
42
43
|
const claude_agent_sdk_1 = require("@anthropic-ai/claude-agent-sdk");
|
|
@@ -73,6 +74,12 @@ const caseLibrary_1 = require("../services/caseLibrary");
|
|
|
73
74
|
const scopedKnowledgeStore_1 = require("../services/scopedKnowledgeStore");
|
|
74
75
|
const mcpToolRegistry_1 = require("./mcpToolRegistry");
|
|
75
76
|
const runtimePaths_1 = require("../runtimePaths");
|
|
77
|
+
const defaultCodebaseServices_1 = require("../services/codebase/defaultCodebaseServices");
|
|
78
|
+
const codeLookupLedger_1 = require("../services/codebase/codeLookupLedger");
|
|
79
|
+
const patchProposer_1 = require("../services/codebase/patchProposer");
|
|
80
|
+
const codeAwareFeature_1 = require("../services/codebase/codeAwareFeature");
|
|
81
|
+
const lookupResponseFilter_1 = require("../services/rag/lookupResponseFilter");
|
|
82
|
+
const symbolResolver_1 = require("../services/symbol/symbolResolver");
|
|
76
83
|
/**
|
|
77
84
|
* Process-wide RagStore singleton, lazily initialized on first MCP tool
|
|
78
85
|
* call. Backs the `lookup_blog_knowledge` tool (Plan 55) and will back
|
|
@@ -207,6 +214,18 @@ function parseOptionalToolArrayInput(value) {
|
|
|
207
214
|
}
|
|
208
215
|
return parseToolArrayInput(value);
|
|
209
216
|
}
|
|
217
|
+
function normalizeOptionalToolString(value) {
|
|
218
|
+
if (typeof value !== 'string')
|
|
219
|
+
return undefined;
|
|
220
|
+
const trimmed = value.trim();
|
|
221
|
+
if (!trimmed)
|
|
222
|
+
return undefined;
|
|
223
|
+
const normalized = trimmed.toLowerCase();
|
|
224
|
+
if (normalized === 'null' || normalized === 'undefined' || normalized === 'none') {
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
return trimmed;
|
|
228
|
+
}
|
|
210
229
|
function parseToolStringArrayInput(value) {
|
|
211
230
|
if (Array.isArray(value)) {
|
|
212
231
|
return value.filter((entry) => typeof entry === 'string' && entry.trim().length > 0);
|
|
@@ -618,6 +637,14 @@ function createClaudeMcpServer(options) {
|
|
|
618
637
|
const skillNotesBudget = options.skillNotesBudget;
|
|
619
638
|
const outputLanguage = options.outputLanguage ?? outputLanguage_1.DEFAULT_OUTPUT_LANGUAGE;
|
|
620
639
|
const knowledgeScope = options.knowledgeScope;
|
|
640
|
+
const codeAwareMode = (0, codeAwareFeature_1.normalizeCodeAwareMode)(options.codeAwareMode);
|
|
641
|
+
const codebaseIds = Array.from(new Set(options.codebaseIds ?? [])).filter(Boolean);
|
|
642
|
+
const codebaseRegistry = options.codebaseRegistry ?? (0, defaultCodebaseServices_1.getDefaultCodebaseRegistry)();
|
|
643
|
+
const codeLookupLedger = options.codeLookupLedger ?? (options.sessionId ? codeLookupLedger_1.CodeLookupLedger.restore(options.sessionId, 12000, 2) : undefined);
|
|
644
|
+
const toolRequestScope = {
|
|
645
|
+
sessionId: options.sessionId ?? traceId,
|
|
646
|
+
hasCodebaseAccess: codeAwareMode !== 'off' && codebaseIds.length > 0,
|
|
647
|
+
};
|
|
621
648
|
/** Normalize skill params: ensure process_name ↔ package are both set. */
|
|
622
649
|
function normalizeSkillParams(params, defaultPackage) {
|
|
623
650
|
const p = { ...params };
|
|
@@ -1410,7 +1437,7 @@ function createClaudeMcpServer(options) {
|
|
|
1410
1437
|
if (summary && success && rows.length > 0) {
|
|
1411
1438
|
const summaryResult = (0, sqlSummarizer_1.summarizeSqlResult)(result.columns, result.rows);
|
|
1412
1439
|
if (emitUpdate) {
|
|
1413
|
-
emittedEvidence = emitSqlSummaryDataEnvelope(emitUpdate, summaryResult, finalSql, injected, traceProvenance, producer);
|
|
1440
|
+
emittedEvidence = emitSqlSummaryDataEnvelope(emitUpdate, summaryResult, finalSql, injected, traceProvenance, producer, processIdentityWarning);
|
|
1414
1441
|
}
|
|
1415
1442
|
return {
|
|
1416
1443
|
content: [{
|
|
@@ -1439,10 +1466,10 @@ function createClaudeMcpServer(options) {
|
|
|
1439
1466
|
};
|
|
1440
1467
|
}
|
|
1441
1468
|
if (emitUpdate && success && result.columns.length > 0) {
|
|
1442
|
-
emittedEvidence = emitSqlDataEnvelope(emitUpdate, result.columns, rows, finalSql, injected, traceProvenance, producer);
|
|
1469
|
+
emittedEvidence = emitSqlDataEnvelope(emitUpdate, result.columns, rows, finalSql, injected, traceProvenance, producer, processIdentityWarning);
|
|
1443
1470
|
}
|
|
1444
1471
|
else if (emitUpdate && !success) {
|
|
1445
|
-
emittedEvidence = emitSqlDiagnosticDataEnvelope(emitUpdate, result.error || (0, outputLanguage_1.localize)(outputLanguage, 'SQL 执行失败', 'SQL execution failed'), finalSql, injected, traceProvenance, producer, outputLanguage);
|
|
1472
|
+
emittedEvidence = emitSqlDiagnosticDataEnvelope(emitUpdate, result.error || (0, outputLanguage_1.localize)(outputLanguage, 'SQL 执行失败', 'SQL execution failed'), finalSql, injected, traceProvenance, producer, processIdentityWarning, outputLanguage);
|
|
1446
1473
|
}
|
|
1447
1474
|
return {
|
|
1448
1475
|
content: [{
|
|
@@ -1476,7 +1503,7 @@ function createClaudeMcpServer(options) {
|
|
|
1476
1503
|
traceId,
|
|
1477
1504
|
traceSide: 'current',
|
|
1478
1505
|
});
|
|
1479
|
-
const emittedEvidence = emitUpdate ? emitSqlDiagnosticDataEnvelope(emitUpdate, errMsg, sql, undefined, traceProvenance, producer, outputLanguage) : undefined;
|
|
1506
|
+
const emittedEvidence = emitUpdate ? emitSqlDiagnosticDataEnvelope(emitUpdate, errMsg, sql, undefined, traceProvenance, producer, undefined, outputLanguage) : undefined;
|
|
1480
1507
|
emitUpdate?.({
|
|
1481
1508
|
type: 'progress',
|
|
1482
1509
|
content: {
|
|
@@ -1588,6 +1615,10 @@ function createClaudeMcpServer(options) {
|
|
|
1588
1615
|
try {
|
|
1589
1616
|
const effectiveParams = normalizeSkillParams(params, packageName);
|
|
1590
1617
|
const producer = createEvidenceProducerContext('invoke_skill', { skillId, params: effectiveParams }, (0, outputLanguage_1.localize)(outputLanguage, `调用 Skill ${skillId},收集本阶段结构化证据。`, `Run Skill ${skillId} to collect structured evidence for this phase.`));
|
|
1618
|
+
const skillTraceProvenance = (0, traceProcessorConnectionModel_1.buildTraceProcessorQueryProvenance)({
|
|
1619
|
+
traceId,
|
|
1620
|
+
traceSide: 'current',
|
|
1621
|
+
});
|
|
1591
1622
|
emitUpdate?.({
|
|
1592
1623
|
type: 'progress',
|
|
1593
1624
|
content: {
|
|
@@ -1622,8 +1653,82 @@ function createClaudeMcpServer(options) {
|
|
|
1622
1653
|
// Persist to disk (fire-and-forget) for cross-session learning
|
|
1623
1654
|
logSqlErrorFixPair(errorPair, knowledgeScope).catch(() => { });
|
|
1624
1655
|
}
|
|
1656
|
+
// Artifact mode stores displayResults before emitting DataEnvelopes so
|
|
1657
|
+
// evidence meta can carry the same artifact ids that the model sees.
|
|
1658
|
+
let artifacts;
|
|
1659
|
+
let diagnosticsArtifactId;
|
|
1660
|
+
let synthesizeArtifacts;
|
|
1661
|
+
const artifactIdsByStepId = new Map();
|
|
1662
|
+
if (artifactStore && result.displayResults?.length) {
|
|
1663
|
+
artifacts = result.displayResults.map(dr => {
|
|
1664
|
+
const artId = artifactStore.store({
|
|
1665
|
+
skillId: result.skillId || skillId,
|
|
1666
|
+
stepId: dr.stepId,
|
|
1667
|
+
layer: dr.layer,
|
|
1668
|
+
title: dr.title,
|
|
1669
|
+
data: dr.data,
|
|
1670
|
+
diagnostics: undefined,
|
|
1671
|
+
planPhaseId: producer.planPhaseId,
|
|
1672
|
+
planPhaseTitle: producer.planPhaseTitle,
|
|
1673
|
+
planPhaseGoal: producer.planPhaseGoal,
|
|
1674
|
+
sourceToolCallId: producer.sourceToolCallId,
|
|
1675
|
+
paramsHash: producer.paramsHash,
|
|
1676
|
+
identityResolution: result.identityResolution,
|
|
1677
|
+
});
|
|
1678
|
+
if (dr.stepId)
|
|
1679
|
+
artifactIdsByStepId.set(dr.stepId, artId);
|
|
1680
|
+
const summary = artifactStore.generateCompactSummary(artId);
|
|
1681
|
+
return summary;
|
|
1682
|
+
}).filter((summary) => Boolean(summary));
|
|
1683
|
+
}
|
|
1684
|
+
// Store diagnostics as a separate artifact if present, even for
|
|
1685
|
+
// diagnostics-only skill results that do not emit displayResults.
|
|
1686
|
+
if (artifactStore && result.diagnostics && Array.isArray(result.diagnostics) && result.diagnostics.length > 0) {
|
|
1687
|
+
diagnosticsArtifactId = artifactStore.store({
|
|
1688
|
+
skillId: result.skillId || skillId,
|
|
1689
|
+
stepId: '_diagnostics',
|
|
1690
|
+
layer: 'diagnosis',
|
|
1691
|
+
title: `${skillId} diagnostics`,
|
|
1692
|
+
data: { columns: ['diagnostic'], rows: result.diagnostics.map((d) => [d]) },
|
|
1693
|
+
diagnostics: result.diagnostics,
|
|
1694
|
+
planPhaseId: producer.planPhaseId,
|
|
1695
|
+
planPhaseTitle: producer.planPhaseTitle,
|
|
1696
|
+
planPhaseGoal: producer.planPhaseGoal,
|
|
1697
|
+
sourceToolCallId: producer.sourceToolCallId,
|
|
1698
|
+
paramsHash: producer.paramsHash,
|
|
1699
|
+
identityResolution: result.identityResolution,
|
|
1700
|
+
});
|
|
1701
|
+
}
|
|
1702
|
+
// Store synthesizeData entries as artifacts too — these contain the
|
|
1703
|
+
// raw step data that would otherwise overflow token limits.
|
|
1704
|
+
if (artifactStore && result.synthesizeData && Array.isArray(result.synthesizeData) && result.synthesizeData.length > 0) {
|
|
1705
|
+
synthesizeArtifacts = result.synthesizeData
|
|
1706
|
+
.filter((sd) => sd.data && sd.success !== false)
|
|
1707
|
+
.map((sd) => {
|
|
1708
|
+
const normalizedData = normalizeSynthesizeDataForStorage(sd.data);
|
|
1709
|
+
const artId = artifactStore.store({
|
|
1710
|
+
skillId: result.skillId || skillId,
|
|
1711
|
+
stepId: sd.stepId,
|
|
1712
|
+
layer: sd.layer || 'synthesize',
|
|
1713
|
+
title: sd.stepName || sd.stepId,
|
|
1714
|
+
data: normalizedData,
|
|
1715
|
+
planPhaseId: producer.planPhaseId,
|
|
1716
|
+
planPhaseTitle: producer.planPhaseTitle,
|
|
1717
|
+
planPhaseGoal: producer.planPhaseGoal,
|
|
1718
|
+
sourceToolCallId: producer.sourceToolCallId,
|
|
1719
|
+
paramsHash: producer.paramsHash,
|
|
1720
|
+
identityResolution: result.identityResolution,
|
|
1721
|
+
});
|
|
1722
|
+
return {
|
|
1723
|
+
artifactId: artId,
|
|
1724
|
+
stepId: sd.stepId,
|
|
1725
|
+
rowCount: normalizedData.rows?.length ?? 0,
|
|
1726
|
+
columns: normalizedData.columns ?? [],
|
|
1727
|
+
};
|
|
1728
|
+
});
|
|
1729
|
+
}
|
|
1625
1730
|
if (emitUpdate && result.displayResults?.length) {
|
|
1626
|
-
emitSkillDataEnvelopes(result.displayResults, result.skillId || skillId, emitUpdate,
|
|
1731
|
+
emitSkillDataEnvelopes(result.displayResults, result.skillId || skillId, emitUpdate, skillTraceProvenance, producer, result.identityResolution, artifactIdsByStepId);
|
|
1627
1732
|
}
|
|
1628
1733
|
if (onSkillResult && result.success && result.displayResults?.length) {
|
|
1629
1734
|
onSkillResult({ skillId: result.skillId || skillId, displayResults: result.displayResults });
|
|
@@ -1661,72 +1766,9 @@ function createClaudeMcpServer(options) {
|
|
|
1661
1766
|
};
|
|
1662
1767
|
}
|
|
1663
1768
|
}
|
|
1664
|
-
// Artifact mode:
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
const artId = artifactStore.store({
|
|
1668
|
-
skillId: result.skillId || skillId,
|
|
1669
|
-
stepId: dr.stepId,
|
|
1670
|
-
layer: dr.layer,
|
|
1671
|
-
title: dr.title,
|
|
1672
|
-
data: dr.data,
|
|
1673
|
-
diagnostics: undefined,
|
|
1674
|
-
planPhaseId: producer.planPhaseId,
|
|
1675
|
-
planPhaseTitle: producer.planPhaseTitle,
|
|
1676
|
-
planPhaseGoal: producer.planPhaseGoal,
|
|
1677
|
-
sourceToolCallId: producer.sourceToolCallId,
|
|
1678
|
-
paramsHash: producer.paramsHash,
|
|
1679
|
-
});
|
|
1680
|
-
const summary = artifactStore.generateCompactSummary(artId);
|
|
1681
|
-
return summary;
|
|
1682
|
-
});
|
|
1683
|
-
// Store diagnostics as a separate artifact if present
|
|
1684
|
-
let diagnosticsArtifactId;
|
|
1685
|
-
if (result.diagnostics && Array.isArray(result.diagnostics) && result.diagnostics.length > 0) {
|
|
1686
|
-
diagnosticsArtifactId = artifactStore.store({
|
|
1687
|
-
skillId: result.skillId || skillId,
|
|
1688
|
-
stepId: '_diagnostics',
|
|
1689
|
-
layer: 'diagnosis',
|
|
1690
|
-
title: `${skillId} diagnostics`,
|
|
1691
|
-
data: { columns: ['diagnostic'], rows: result.diagnostics.map((d) => [d]) },
|
|
1692
|
-
diagnostics: result.diagnostics,
|
|
1693
|
-
planPhaseId: producer.planPhaseId,
|
|
1694
|
-
planPhaseTitle: producer.planPhaseTitle,
|
|
1695
|
-
planPhaseGoal: producer.planPhaseGoal,
|
|
1696
|
-
sourceToolCallId: producer.sourceToolCallId,
|
|
1697
|
-
paramsHash: producer.paramsHash,
|
|
1698
|
-
});
|
|
1699
|
-
}
|
|
1700
|
-
// Store synthesizeData entries as artifacts too — these contain the raw step data
|
|
1701
|
-
// (e.g. batch_frame_root_cause with 487 rows) that would otherwise overflow token limits.
|
|
1702
|
-
// Claude can fetch them on demand via fetch_artifact with pagination.
|
|
1703
|
-
let synthesizeArtifacts;
|
|
1704
|
-
if (result.synthesizeData && Array.isArray(result.synthesizeData) && result.synthesizeData.length > 0) {
|
|
1705
|
-
synthesizeArtifacts = result.synthesizeData
|
|
1706
|
-
.filter((sd) => sd.data && sd.success !== false)
|
|
1707
|
-
.map((sd) => {
|
|
1708
|
-
// synthesizeData entries have data as array-of-objects or { columns, rows }
|
|
1709
|
-
const normalizedData = normalizeSynthesizeDataForStorage(sd.data);
|
|
1710
|
-
const artId = artifactStore.store({
|
|
1711
|
-
skillId: result.skillId || skillId,
|
|
1712
|
-
stepId: sd.stepId,
|
|
1713
|
-
layer: sd.layer || 'synthesize',
|
|
1714
|
-
title: sd.stepName || sd.stepId,
|
|
1715
|
-
data: normalizedData,
|
|
1716
|
-
planPhaseId: producer.planPhaseId,
|
|
1717
|
-
planPhaseTitle: producer.planPhaseTitle,
|
|
1718
|
-
planPhaseGoal: producer.planPhaseGoal,
|
|
1719
|
-
sourceToolCallId: producer.sourceToolCallId,
|
|
1720
|
-
paramsHash: producer.paramsHash,
|
|
1721
|
-
});
|
|
1722
|
-
return {
|
|
1723
|
-
artifactId: artId,
|
|
1724
|
-
stepId: sd.stepId,
|
|
1725
|
-
rowCount: normalizedData.rows?.length ?? 0,
|
|
1726
|
-
columns: normalizedData.columns ?? [],
|
|
1727
|
-
};
|
|
1728
|
-
});
|
|
1729
|
-
}
|
|
1769
|
+
// Artifact mode: return compact references whenever any fetchable
|
|
1770
|
+
// artifact was created.
|
|
1771
|
+
if (artifactStore && (artifacts?.length || diagnosticsArtifactId || synthesizeArtifacts?.length)) {
|
|
1730
1772
|
return {
|
|
1731
1773
|
content: [{
|
|
1732
1774
|
type: 'text',
|
|
@@ -1735,6 +1777,7 @@ function createClaudeMcpServer(options) {
|
|
|
1735
1777
|
skillId: result.skillId,
|
|
1736
1778
|
skillName: result.skillName,
|
|
1737
1779
|
...(result.error ? { error: result.error } : {}),
|
|
1780
|
+
...(result.identityResolution ? { identityResolution: result.identityResolution } : {}),
|
|
1738
1781
|
artifacts,
|
|
1739
1782
|
...(diagnosticsArtifactId ? { diagnosticsArtifactId } : {}),
|
|
1740
1783
|
...(synthesizeArtifacts && synthesizeArtifacts.length > 0
|
|
@@ -1755,6 +1798,7 @@ function createClaudeMcpServer(options) {
|
|
|
1755
1798
|
skillId: result.skillId,
|
|
1756
1799
|
skillName: result.skillName,
|
|
1757
1800
|
...(result.error ? { error: result.error } : {}),
|
|
1801
|
+
...(result.identityResolution ? { identityResolution: result.identityResolution } : {}),
|
|
1758
1802
|
...(vendorOverrideHint ? { vendorOverride: vendorOverrideHint } : {}),
|
|
1759
1803
|
displayResults: result.displayResults?.map(dr => ({
|
|
1760
1804
|
stepId: dr.stepId,
|
|
@@ -2045,7 +2089,8 @@ function createClaudeMcpServer(options) {
|
|
|
2045
2089
|
success: true,
|
|
2046
2090
|
detail: effectiveDetail,
|
|
2047
2091
|
...result,
|
|
2048
|
-
sourceToolCallId: producer.sourceToolCallId,
|
|
2092
|
+
sourceToolCallId: result?.sourceToolCallId || producer.sourceToolCallId,
|
|
2093
|
+
fetchedByToolCallId: producer.sourceToolCallId,
|
|
2049
2094
|
paramsHash: producer.paramsHash,
|
|
2050
2095
|
planPhaseId: producer.planPhaseId,
|
|
2051
2096
|
planPhaseTitle: producer.planPhaseTitle,
|
|
@@ -2295,13 +2340,50 @@ function createClaudeMcpServer(options) {
|
|
|
2295
2340
|
'When the result carries `unsupportedReason` (license_blocked, index empty), the agent must say the source is unavailable and must NOT summarize, paraphrase, or invent content.', {
|
|
2296
2341
|
query: zod_1.z.string().describe('Search query — typically a function or class name, or a behavior description.'),
|
|
2297
2342
|
top_k: zod_1.z.number().int().min(1).max(20).optional().describe('Maximum hits returned (1-20, default 5).'),
|
|
2298
|
-
|
|
2343
|
+
codebase_id: zod_1.z.string().optional().describe('Optional whitelisted registered AOSP codebase id.'),
|
|
2344
|
+
build_id: zod_1.z.string().optional().describe('Optional native build id filter.'),
|
|
2345
|
+
symbol: zod_1.z.string().optional().describe('Exact symbol filter when known.'),
|
|
2346
|
+
path_prefix: zod_1.z.string().optional().describe('Optional relative source path prefix.'),
|
|
2347
|
+
}, async ({ query, top_k, codebase_id, build_id, symbol, path_prefix }) => {
|
|
2348
|
+
const codebaseId = normalizeOptionalToolString(codebase_id);
|
|
2349
|
+
const buildId = normalizeOptionalToolString(build_id);
|
|
2350
|
+
const symbolExact = normalizeOptionalToolString(symbol);
|
|
2351
|
+
const pathPrefix = normalizeOptionalToolString(path_prefix);
|
|
2352
|
+
if (codebaseId && !codebaseIds.includes(codebaseId)) {
|
|
2353
|
+
return {
|
|
2354
|
+
content: [{ type: 'text', text: JSON.stringify({ success: false, error: 'Requested codebase is not whitelisted for this session' }) }],
|
|
2355
|
+
isError: true,
|
|
2356
|
+
};
|
|
2357
|
+
}
|
|
2299
2358
|
const store = getRagStore();
|
|
2300
2359
|
const result = store.search(query, {
|
|
2301
2360
|
topK: top_k ?? 5,
|
|
2302
2361
|
kinds: ['aosp'],
|
|
2362
|
+
...(codebaseId ? { codebaseIds: [codebaseId] } : {}),
|
|
2363
|
+
...(buildId ? { buildId } : {}),
|
|
2364
|
+
...(symbolExact ? { symbolExact } : {}),
|
|
2365
|
+
...(pathPrefix ? { pathPrefix } : {}),
|
|
2303
2366
|
scope: knowledgeScope,
|
|
2304
2367
|
});
|
|
2368
|
+
if (result.results.some(hit => hit.chunk?.registryOrigin === 'codebase_registry')) {
|
|
2369
|
+
const scopedResult = {
|
|
2370
|
+
...result,
|
|
2371
|
+
results: result.results.filter(hit => hit.chunk?.registryOrigin !== 'codebase_registry' ||
|
|
2372
|
+
(hit.chunk.codebaseId && codebaseIds.includes(hit.chunk.codebaseId))),
|
|
2373
|
+
};
|
|
2374
|
+
const filtered = await (0, lookupResponseFilter_1.filterRagLookup)(scopedResult, {
|
|
2375
|
+
toolName: 'lookup_aosp_source',
|
|
2376
|
+
turn: 0,
|
|
2377
|
+
codebaseRegistry,
|
|
2378
|
+
ledger: codeLookupLedger,
|
|
2379
|
+
allowProviderSend: codeAwareMode === 'provider_send',
|
|
2380
|
+
sessionId: options.sessionId,
|
|
2381
|
+
});
|
|
2382
|
+
await codeLookupLedger?.flush();
|
|
2383
|
+
return {
|
|
2384
|
+
content: [{ type: 'text', text: JSON.stringify({ success: true, result: filtered }) }],
|
|
2385
|
+
};
|
|
2386
|
+
}
|
|
2305
2387
|
return {
|
|
2306
2388
|
content: [{ type: 'text', text: JSON.stringify(result) }],
|
|
2307
2389
|
};
|
|
@@ -2314,17 +2396,254 @@ function createClaudeMcpServer(options) {
|
|
|
2314
2396
|
'Read-only over the RagStore. When the result carries `unsupportedReason` (license_blocked, index empty), the agent must say the source is unavailable and must NOT summarize or invent.', {
|
|
2315
2397
|
query: zod_1.z.string().describe('Search query — typically a tuning concept or vendor-specific knob.'),
|
|
2316
2398
|
top_k: zod_1.z.number().int().min(1).max(20).optional().describe('Maximum hits returned (1-20, default 5).'),
|
|
2317
|
-
|
|
2399
|
+
codebase_id: zod_1.z.string().optional().describe('Optional whitelisted registered OEM codebase id.'),
|
|
2400
|
+
vendor: zod_1.z.string().optional().describe('Optional vendor filter.'),
|
|
2401
|
+
}, async ({ query, top_k, codebase_id, vendor }) => {
|
|
2402
|
+
const codebaseId = normalizeOptionalToolString(codebase_id);
|
|
2403
|
+
const vendorId = normalizeOptionalToolString(vendor);
|
|
2404
|
+
if (codebaseId && !codebaseIds.includes(codebaseId)) {
|
|
2405
|
+
return {
|
|
2406
|
+
content: [{ type: 'text', text: JSON.stringify({ success: false, error: 'Requested codebase is not whitelisted for this session' }) }],
|
|
2407
|
+
isError: true,
|
|
2408
|
+
};
|
|
2409
|
+
}
|
|
2318
2410
|
const store = getRagStore();
|
|
2319
2411
|
const result = store.search(query, {
|
|
2320
2412
|
topK: top_k ?? 5,
|
|
2321
2413
|
kinds: ['oem_sdk'],
|
|
2414
|
+
...(codebaseId ? { codebaseIds: [codebaseId] } : {}),
|
|
2415
|
+
...(vendorId ? { vendor: vendorId } : {}),
|
|
2322
2416
|
scope: knowledgeScope,
|
|
2323
2417
|
});
|
|
2418
|
+
if (result.results.some(hit => hit.chunk?.registryOrigin === 'codebase_registry')) {
|
|
2419
|
+
const scopedResult = {
|
|
2420
|
+
...result,
|
|
2421
|
+
results: result.results.filter(hit => hit.chunk?.registryOrigin !== 'codebase_registry' ||
|
|
2422
|
+
(hit.chunk.codebaseId && codebaseIds.includes(hit.chunk.codebaseId))),
|
|
2423
|
+
};
|
|
2424
|
+
const filtered = await (0, lookupResponseFilter_1.filterRagLookup)(scopedResult, {
|
|
2425
|
+
toolName: 'lookup_oem_sdk',
|
|
2426
|
+
turn: 0,
|
|
2427
|
+
codebaseRegistry,
|
|
2428
|
+
ledger: codeLookupLedger,
|
|
2429
|
+
allowProviderSend: codeAwareMode === 'provider_send',
|
|
2430
|
+
sessionId: options.sessionId,
|
|
2431
|
+
});
|
|
2432
|
+
await codeLookupLedger?.flush();
|
|
2433
|
+
return {
|
|
2434
|
+
content: [{ type: 'text', text: JSON.stringify({ success: true, result: filtered }) }],
|
|
2435
|
+
};
|
|
2436
|
+
}
|
|
2324
2437
|
return {
|
|
2325
2438
|
content: [{ type: 'text', text: JSON.stringify(result) }],
|
|
2326
2439
|
};
|
|
2327
2440
|
}, { annotations: { readOnlyHint: true } });
|
|
2441
|
+
const listCodebases = (0, claude_agent_sdk_1.tool)('list_codebases', 'List the app/AOSP/kernel/OEM codebases explicitly whitelisted for this analysis session. ' +
|
|
2442
|
+
'Returns metadata only; it never exposes local root paths.', {}, async () => {
|
|
2443
|
+
const allowed = new Set(codebaseIds);
|
|
2444
|
+
const codebases = codebaseRegistry.list()
|
|
2445
|
+
.filter(ref => allowed.has(ref.codebaseId))
|
|
2446
|
+
.map(ref => ({
|
|
2447
|
+
codebaseId: ref.codebaseId,
|
|
2448
|
+
kind: ref.kind,
|
|
2449
|
+
displayName: ref.displayName,
|
|
2450
|
+
indexGeneration: ref.indexGeneration,
|
|
2451
|
+
chunkCount: ref.chunkCount,
|
|
2452
|
+
eligibleForSendToProvider: ref.eligibleForSendToProvider,
|
|
2453
|
+
}));
|
|
2454
|
+
return {
|
|
2455
|
+
content: [{ type: 'text', text: JSON.stringify({ success: true, codebases }) }],
|
|
2456
|
+
};
|
|
2457
|
+
}, { annotations: { readOnlyHint: true } });
|
|
2458
|
+
const lookupAppSource = (0, claude_agent_sdk_1.tool)('lookup_app_source', 'Look up registered app source chunks for this analysis session. ' +
|
|
2459
|
+
'Only whitelisted codebase IDs are accepted. In metadata_only mode the result carries file/symbol references without snippets.', {
|
|
2460
|
+
query: zod_1.z.string().describe('Natural-language query, symbol, class, method, or file term.'),
|
|
2461
|
+
top_k: zod_1.z.number().int().min(1).max(20).optional().describe('Maximum hits returned (1-20, default 5).'),
|
|
2462
|
+
codebase_id: zod_1.z.string().optional().describe('Restrict to one whitelisted codebase id. Defaults to all session codebases.'),
|
|
2463
|
+
symbol: zod_1.z.string().optional().describe('Exact symbol filter when known.'),
|
|
2464
|
+
file_path: zod_1.z.string().optional().describe('Exact source file path relative to the registered root.'),
|
|
2465
|
+
path_prefix: zod_1.z.string().optional().describe('Restrict lookup to a relative path prefix.'),
|
|
2466
|
+
}, async ({ query, top_k, codebase_id, symbol, file_path, path_prefix }) => {
|
|
2467
|
+
const codebaseId = normalizeOptionalToolString(codebase_id);
|
|
2468
|
+
const symbolExact = normalizeOptionalToolString(symbol);
|
|
2469
|
+
const filePath = normalizeOptionalToolString(file_path);
|
|
2470
|
+
const pathPrefix = normalizeOptionalToolString(path_prefix);
|
|
2471
|
+
const requestedIds = codebaseId ? [codebaseId] : codebaseIds;
|
|
2472
|
+
const allowed = requestedIds.filter(id => codebaseIds.includes(id));
|
|
2473
|
+
if (allowed.length === 0) {
|
|
2474
|
+
return {
|
|
2475
|
+
content: [{
|
|
2476
|
+
type: 'text',
|
|
2477
|
+
text: JSON.stringify({ success: false, error: 'No requested codebase is whitelisted for this session' }),
|
|
2478
|
+
}],
|
|
2479
|
+
isError: true,
|
|
2480
|
+
};
|
|
2481
|
+
}
|
|
2482
|
+
const raw = getRagStore().search(query, {
|
|
2483
|
+
topK: top_k ?? 5,
|
|
2484
|
+
kinds: ['app_source'],
|
|
2485
|
+
codebaseIds: allowed,
|
|
2486
|
+
...(symbolExact ? { symbolExact } : {}),
|
|
2487
|
+
...(filePath ? { filePathExact: filePath } : {}),
|
|
2488
|
+
...(pathPrefix ? { pathPrefix } : {}),
|
|
2489
|
+
scope: knowledgeScope,
|
|
2490
|
+
});
|
|
2491
|
+
const filtered = await (0, lookupResponseFilter_1.filterRagLookup)(raw, {
|
|
2492
|
+
toolName: 'lookup_app_source',
|
|
2493
|
+
turn: 0,
|
|
2494
|
+
codebaseRegistry,
|
|
2495
|
+
ledger: codeLookupLedger,
|
|
2496
|
+
allowProviderSend: codeAwareMode === 'provider_send',
|
|
2497
|
+
sessionId: options.sessionId,
|
|
2498
|
+
});
|
|
2499
|
+
await codeLookupLedger?.flush();
|
|
2500
|
+
return {
|
|
2501
|
+
content: [{ type: 'text', text: JSON.stringify({ success: true, result: filtered }) }],
|
|
2502
|
+
};
|
|
2503
|
+
}, { annotations: { readOnlyHint: true } });
|
|
2504
|
+
const lookupKernelSource = (0, claude_agent_sdk_1.tool)('lookup_kernel_source', 'Use when kernel/vendor source evidence is needed after trace evidence points at binder, scheduler, mm, io, or a kernel symbol. ' +
|
|
2505
|
+
'Do NOT use for app or AOSP framework code. Prerequisites: a whitelisted kernel_source codebase, vendor or codebase_id, and a path_prefix/subsys. ' +
|
|
2506
|
+
'Budget: top_k is capped at 20 and metadata_only sessions return CodeRef metadata without snippets. Outcomes: source hits, metadata-only hits, or an explicit unsupportedReason.', {
|
|
2507
|
+
query: zod_1.z.string().describe('Kernel symbol, subsystem, or behavior query.'),
|
|
2508
|
+
top_k: zod_1.z.number().int().min(1).max(20).optional().describe('Maximum hits returned (1-20, default 5).'),
|
|
2509
|
+
codebase_id: zod_1.z.string().optional().describe('Restrict to one whitelisted kernel codebase id.'),
|
|
2510
|
+
vendor: zod_1.z.string().optional().describe('Vendor id. Required when multiple kernel codebases are available and codebase_id is omitted.'),
|
|
2511
|
+
symbol: zod_1.z.string().optional().describe('Exact symbol filter when known.'),
|
|
2512
|
+
path_prefix: zod_1.z.string().optional().describe('Required subsystem path prefix, for example drivers/android/binder.'),
|
|
2513
|
+
}, async ({ query, top_k, codebase_id, vendor, symbol, path_prefix }) => {
|
|
2514
|
+
const codebaseId = normalizeOptionalToolString(codebase_id);
|
|
2515
|
+
const vendorId = normalizeOptionalToolString(vendor);
|
|
2516
|
+
const symbolExact = normalizeOptionalToolString(symbol);
|
|
2517
|
+
const pathPrefix = normalizeOptionalToolString(path_prefix);
|
|
2518
|
+
const requestedIds = codebaseId ? [codebaseId] : codebaseIds;
|
|
2519
|
+
const allowed = requestedIds.filter(id => codebaseIds.includes(id));
|
|
2520
|
+
if (allowed.length === 0) {
|
|
2521
|
+
return {
|
|
2522
|
+
content: [{
|
|
2523
|
+
type: 'text',
|
|
2524
|
+
text: JSON.stringify({ success: false, error: 'No requested codebase is whitelisted for this session' }),
|
|
2525
|
+
}],
|
|
2526
|
+
isError: true,
|
|
2527
|
+
};
|
|
2528
|
+
}
|
|
2529
|
+
const kernelRefs = allowed
|
|
2530
|
+
.map(id => codebaseRegistry.get(id))
|
|
2531
|
+
.filter(ref => ref?.kind === 'kernel_source');
|
|
2532
|
+
const vendors = new Set(kernelRefs.map(ref => ref.vendor).filter(Boolean));
|
|
2533
|
+
if (!codebaseId && !vendorId && vendors.size > 1) {
|
|
2534
|
+
return {
|
|
2535
|
+
content: [{ type: 'text', text: JSON.stringify({
|
|
2536
|
+
success: false,
|
|
2537
|
+
unsupportedReason: 'vendor_required_for_multi_vendor_kernel_lookup',
|
|
2538
|
+
vendors: Array.from(vendors).sort(),
|
|
2539
|
+
}) }],
|
|
2540
|
+
isError: true,
|
|
2541
|
+
};
|
|
2542
|
+
}
|
|
2543
|
+
const raw = getRagStore().search(query, {
|
|
2544
|
+
topK: top_k ?? 5,
|
|
2545
|
+
kinds: ['kernel_source'],
|
|
2546
|
+
codebaseIds: kernelRefs.map(ref => ref.codebaseId),
|
|
2547
|
+
...(vendorId ? { vendor: vendorId } : {}),
|
|
2548
|
+
...(symbolExact ? { symbolExact } : {}),
|
|
2549
|
+
...(pathPrefix ? { pathPrefix } : {}),
|
|
2550
|
+
scope: knowledgeScope,
|
|
2551
|
+
});
|
|
2552
|
+
const filtered = await (0, lookupResponseFilter_1.filterRagLookup)(raw, {
|
|
2553
|
+
toolName: 'lookup_kernel_source',
|
|
2554
|
+
turn: 0,
|
|
2555
|
+
codebaseRegistry,
|
|
2556
|
+
ledger: codeLookupLedger,
|
|
2557
|
+
allowProviderSend: codeAwareMode === 'provider_send',
|
|
2558
|
+
sessionId: options.sessionId,
|
|
2559
|
+
});
|
|
2560
|
+
await codeLookupLedger?.flush();
|
|
2561
|
+
return {
|
|
2562
|
+
content: [{ type: 'text', text: JSON.stringify({ success: true, result: filtered }) }],
|
|
2563
|
+
};
|
|
2564
|
+
}, { annotations: { readOnlyHint: true } });
|
|
2565
|
+
const resolveSymbol = (0, claude_agent_sdk_1.tool)('resolve_symbol', 'Use when trace frames or obfuscated names must be resolved to CodeRef metadata before source lookup. ' +
|
|
2566
|
+
'Do NOT use to guess file:line when build_id is missing; return the degraded result instead. ' +
|
|
2567
|
+
'Prerequisites: whitelisted codebase ids and indexed source/symbol metadata. Budget: top_k capped at 20. Outcomes: app, native/AOSP, or kernel candidates with degradation reasons.', {
|
|
2568
|
+
symbol: zod_1.z.string().describe('Class, function, or method name to resolve.'),
|
|
2569
|
+
kind: zod_1.z.enum(['app', 'native', 'kernel']).optional().describe('Resolution domain; default app.'),
|
|
2570
|
+
codebase_id: zod_1.z.string().optional().describe('Restrict to one whitelisted codebase id. Defaults to all session codebases.'),
|
|
2571
|
+
file_path: zod_1.z.string().optional().describe('Optional relative source file path for fallback matching.'),
|
|
2572
|
+
build_id: zod_1.z.string().optional().describe('Optional build id. Missing build id returns a degraded result.'),
|
|
2573
|
+
vendor: zod_1.z.string().optional().describe('Vendor id for kernel lookup.'),
|
|
2574
|
+
top_k: zod_1.z.number().int().min(1).max(20).optional().describe('Maximum candidates returned.'),
|
|
2575
|
+
}, async ({ symbol, kind, codebase_id, file_path, build_id, vendor, top_k }) => {
|
|
2576
|
+
const codebaseId = normalizeOptionalToolString(codebase_id);
|
|
2577
|
+
const filePath = normalizeOptionalToolString(file_path);
|
|
2578
|
+
const buildId = normalizeOptionalToolString(build_id);
|
|
2579
|
+
const vendorId = normalizeOptionalToolString(vendor);
|
|
2580
|
+
const requestedIds = codebaseId ? [codebaseId] : codebaseIds;
|
|
2581
|
+
const allowed = requestedIds.filter(id => codebaseIds.includes(id));
|
|
2582
|
+
if (allowed.length === 0) {
|
|
2583
|
+
return {
|
|
2584
|
+
content: [{
|
|
2585
|
+
type: 'text',
|
|
2586
|
+
text: JSON.stringify({ success: false, error: 'No requested codebase is whitelisted for this session' }),
|
|
2587
|
+
}],
|
|
2588
|
+
isError: true,
|
|
2589
|
+
};
|
|
2590
|
+
}
|
|
2591
|
+
const resolver = new symbolResolver_1.SymbolResolver(getRagStore());
|
|
2592
|
+
const results = allowed.map(id => {
|
|
2593
|
+
const ref = codebaseRegistry.get(id);
|
|
2594
|
+
if (kind === 'kernel' || ref?.kind === 'kernel_source') {
|
|
2595
|
+
return resolver.resolveKernel({
|
|
2596
|
+
symbol,
|
|
2597
|
+
codebaseId: id,
|
|
2598
|
+
vendor: vendorId ?? ref?.vendor,
|
|
2599
|
+
...(buildId ? { buildId } : {}),
|
|
2600
|
+
topK: top_k ?? 5,
|
|
2601
|
+
});
|
|
2602
|
+
}
|
|
2603
|
+
if (kind === 'native' || ref?.kind === 'aosp') {
|
|
2604
|
+
return resolver.resolveNative({
|
|
2605
|
+
symbol,
|
|
2606
|
+
codebaseId: id,
|
|
2607
|
+
...(buildId ? { buildId } : {}),
|
|
2608
|
+
topK: top_k ?? 5,
|
|
2609
|
+
});
|
|
2610
|
+
}
|
|
2611
|
+
return resolver.resolveApp({
|
|
2612
|
+
symbol,
|
|
2613
|
+
codebaseId: id,
|
|
2614
|
+
...(filePath ? { filePath } : {}),
|
|
2615
|
+
...(buildId ? { buildId } : {}),
|
|
2616
|
+
topK: top_k ?? 5,
|
|
2617
|
+
});
|
|
2618
|
+
});
|
|
2619
|
+
return {
|
|
2620
|
+
content: [{ type: 'text', text: JSON.stringify({
|
|
2621
|
+
success: results.some(result => result.success),
|
|
2622
|
+
results,
|
|
2623
|
+
}) }],
|
|
2624
|
+
};
|
|
2625
|
+
}, { annotations: { readOnlyHint: true } });
|
|
2626
|
+
const proposePatch = (0, claude_agent_sdk_1.tool)('propose_patch', 'Use when the user asks for a concrete fix after successful code lookup. Do NOT use before lookup_app_source/lookup_kernel_source/lookup_aosp_source has returned prior contextChunkIds. ' +
|
|
2627
|
+
'Prerequisites: all contextChunkIds must belong to one whitelisted codebase and provider_send consent must be enabled. Budget: patch attempts are capped by the session ledger. Outcomes: verified diff, non-copyable sketch, or unverified rejection.', {
|
|
2628
|
+
context_chunk_ids: zod_1.z.array(zod_1.z.string()).min(1).describe('Chunk ids previously returned by a successful source lookup in this session.'),
|
|
2629
|
+
problem: zod_1.z.string().describe('Performance problem the patch should address.'),
|
|
2630
|
+
proposed_diff: zod_1.z.string().optional().describe('Optional unified diff to validate. Only returned to the user if git apply --check passes.'),
|
|
2631
|
+
patch_sketch: zod_1.z.string().optional().describe('Optional high-level sketch when no verified diff is available.'),
|
|
2632
|
+
}, async ({ context_chunk_ids, problem, proposed_diff, patch_sketch }) => {
|
|
2633
|
+
const proposer = new patchProposer_1.PatchProposer(getRagStore(), codebaseRegistry, codeLookupLedger);
|
|
2634
|
+
const result = proposer.propose({
|
|
2635
|
+
contextChunkIds: context_chunk_ids,
|
|
2636
|
+
problem,
|
|
2637
|
+
...(proposed_diff ? { proposedDiff: proposed_diff } : {}),
|
|
2638
|
+
...(patch_sketch ? { patchSketch: patch_sketch } : {}),
|
|
2639
|
+
turn: 0,
|
|
2640
|
+
});
|
|
2641
|
+
await codeLookupLedger?.flush();
|
|
2642
|
+
return {
|
|
2643
|
+
content: [{ type: 'text', text: JSON.stringify({ success: result.patchStatus !== 'unverified', result }) }],
|
|
2644
|
+
...(result.patchStatus === 'unverified' ? { isError: true } : {}),
|
|
2645
|
+
};
|
|
2646
|
+
}, { annotations: { readOnlyHint: false } });
|
|
2328
2647
|
// recall_project_memory (Plan 44): pure-read recall over project +
|
|
2329
2648
|
// world memory entries. Strict invariant: handler MUST NOT cause any
|
|
2330
2649
|
// disk writes; ProjectMemory.recallProjectMemory() is enforced via
|
|
@@ -3251,7 +3570,7 @@ function createClaudeMcpServer(options) {
|
|
|
3251
3570
|
const summaryResult = (0, sqlSummarizer_1.summarizeSqlResult)(result.columns, result.rows);
|
|
3252
3571
|
const durationMs = Date.now() - sqlStart;
|
|
3253
3572
|
if (emitUpdate) {
|
|
3254
|
-
emittedEvidence = emitSqlSummaryDataEnvelope(emitUpdate, summaryResult, finalSql, injected, traceProvenance, producer);
|
|
3573
|
+
emittedEvidence = emitSqlSummaryDataEnvelope(emitUpdate, summaryResult, finalSql, injected, traceProvenance, producer, processIdentityWarning);
|
|
3255
3574
|
}
|
|
3256
3575
|
const text = JSON.stringify({
|
|
3257
3576
|
success: true,
|
|
@@ -3275,10 +3594,10 @@ function createClaudeMcpServer(options) {
|
|
|
3275
3594
|
}
|
|
3276
3595
|
const durationMs = Date.now() - sqlStart;
|
|
3277
3596
|
if (emitUpdate && success && result.columns.length > 0) {
|
|
3278
|
-
emittedEvidence = emitSqlDataEnvelope(emitUpdate, result.columns, rows, finalSql, injected, traceProvenance, producer);
|
|
3597
|
+
emittedEvidence = emitSqlDataEnvelope(emitUpdate, result.columns, rows, finalSql, injected, traceProvenance, producer, processIdentityWarning);
|
|
3279
3598
|
}
|
|
3280
3599
|
else if (emitUpdate && !success) {
|
|
3281
|
-
emittedEvidence = emitSqlDiagnosticDataEnvelope(emitUpdate, result.error || (0, outputLanguage_1.localize)(outputLanguage, 'SQL 执行失败', 'SQL execution failed'), finalSql, injected, traceProvenance, producer);
|
|
3600
|
+
emittedEvidence = emitSqlDiagnosticDataEnvelope(emitUpdate, result.error || (0, outputLanguage_1.localize)(outputLanguage, 'SQL 执行失败', 'SQL execution failed'), finalSql, injected, traceProvenance, producer, processIdentityWarning);
|
|
3282
3601
|
}
|
|
3283
3602
|
const text = JSON.stringify({
|
|
3284
3603
|
success,
|
|
@@ -3308,7 +3627,7 @@ function createClaudeMcpServer(options) {
|
|
|
3308
3627
|
traceId: targetTraceId,
|
|
3309
3628
|
traceSide: trace,
|
|
3310
3629
|
});
|
|
3311
|
-
const emittedEvidence = emitUpdate ? emitSqlDiagnosticDataEnvelope(emitUpdate, e.message, sql, undefined, traceProvenance, producer, outputLanguage) : undefined;
|
|
3630
|
+
const emittedEvidence = emitUpdate ? emitSqlDiagnosticDataEnvelope(emitUpdate, e.message, sql, undefined, traceProvenance, producer, undefined, outputLanguage) : undefined;
|
|
3312
3631
|
return {
|
|
3313
3632
|
content: [{
|
|
3314
3633
|
type: 'text',
|
|
@@ -3367,8 +3686,8 @@ function createClaudeMcpServer(options) {
|
|
|
3367
3686
|
traceSide: 'reference',
|
|
3368
3687
|
});
|
|
3369
3688
|
const [currentResult, refResult] = await Promise.all([
|
|
3370
|
-
skillExecutor.execute(skillId, traceId, effectiveParams),
|
|
3371
|
-
skillExecutor.execute(skillId, referenceTraceId, refParams),
|
|
3689
|
+
skillExecutor.execute(skillId, traceId, effectiveParams, { __traceSide: 'current' }),
|
|
3690
|
+
skillExecutor.execute(skillId, referenceTraceId, refParams, { __traceSide: 'reference' }),
|
|
3372
3691
|
]);
|
|
3373
3692
|
const compareDuration = Date.now() - compareStart;
|
|
3374
3693
|
// Schema alignment: check which steps are comparable
|
|
@@ -3389,14 +3708,14 @@ function createClaudeMcpServer(options) {
|
|
|
3389
3708
|
...baseProducer,
|
|
3390
3709
|
sourceToolCallId: `${baseProducer.sourceToolCallId}:current`,
|
|
3391
3710
|
producerReason: (0, outputLanguage_1.localize)(outputLanguage, `当前 Trace 对比 Skill ${skillId} 结果。`, `Current trace result for comparison Skill ${skillId}.`),
|
|
3392
|
-
});
|
|
3711
|
+
}, currentResult.identityResolution);
|
|
3393
3712
|
}
|
|
3394
3713
|
if (emitUpdate && refResult.displayResults?.length) {
|
|
3395
3714
|
emitSkillDataEnvelopes(refResult.displayResults, skillId, emitUpdate, referenceTraceProvenance, {
|
|
3396
3715
|
...baseProducer,
|
|
3397
3716
|
sourceToolCallId: `${baseProducer.sourceToolCallId}:reference`,
|
|
3398
3717
|
producerReason: (0, outputLanguage_1.localize)(outputLanguage, `参考 Trace 对比 Skill ${skillId} 结果。`, `Reference trace result for comparison Skill ${skillId}.`),
|
|
3399
|
-
});
|
|
3718
|
+
}, refResult.identityResolution);
|
|
3400
3719
|
}
|
|
3401
3720
|
// Build compact comparison summary for Claude
|
|
3402
3721
|
const buildStepSummary = (results) => results.map(r => ({
|
|
@@ -3416,6 +3735,7 @@ function createClaudeMcpServer(options) {
|
|
|
3416
3735
|
stepCount: currentResult.displayResults?.length || 0,
|
|
3417
3736
|
steps: buildStepSummary(currentResult.displayResults || []),
|
|
3418
3737
|
diagnosticCount: currentResult.diagnostics?.length || 0,
|
|
3738
|
+
identityResolution: currentResult.identityResolution,
|
|
3419
3739
|
error: currentResult.error,
|
|
3420
3740
|
},
|
|
3421
3741
|
reference: {
|
|
@@ -3426,6 +3746,7 @@ function createClaudeMcpServer(options) {
|
|
|
3426
3746
|
stepCount: refResult.displayResults?.length || 0,
|
|
3427
3747
|
steps: buildStepSummary(refResult.displayResults || []),
|
|
3428
3748
|
diagnosticCount: refResult.diagnostics?.length || 0,
|
|
3749
|
+
identityResolution: refResult.identityResolution,
|
|
3429
3750
|
error: refResult.error,
|
|
3430
3751
|
},
|
|
3431
3752
|
alignment: {
|
|
@@ -3498,6 +3819,11 @@ function createClaudeMcpServer(options) {
|
|
|
3498
3819
|
registry.registerSdk(lookupBlogKnowledge, 'lookup_blog_knowledge', 'public');
|
|
3499
3820
|
registry.registerSdk(lookupAospSource, 'lookup_aosp_source', 'public');
|
|
3500
3821
|
registry.registerSdk(lookupOemSdk, 'lookup_oem_sdk', 'public');
|
|
3822
|
+
registry.registerSdk(listCodebases, 'list_codebases', 'requires_codebase_permission');
|
|
3823
|
+
registry.registerSdk(lookupAppSource, 'lookup_app_source', 'requires_codebase_permission');
|
|
3824
|
+
registry.registerSdk(lookupKernelSource, 'lookup_kernel_source', 'requires_codebase_permission');
|
|
3825
|
+
registry.registerSdk(resolveSymbol, 'resolve_symbol', 'requires_codebase_permission');
|
|
3826
|
+
registry.registerSdk(proposePatch, 'propose_patch', 'requires_codebase_permission');
|
|
3501
3827
|
registry.registerSdk(lookupBaseline, 'lookup_baseline', 'public');
|
|
3502
3828
|
registry.registerSdk(compareBaselines, 'compare_baselines', 'public');
|
|
3503
3829
|
registry.registerSdk(recallProjectMemory, 'recall_project_memory', 'public');
|
|
@@ -3534,9 +3860,9 @@ function createClaudeMcpServer(options) {
|
|
|
3534
3860
|
registry.registerSdk(getComparisonContext, 'get_comparison_context', 'internal');
|
|
3535
3861
|
}
|
|
3536
3862
|
return {
|
|
3537
|
-
server: registry.buildSdkServer(),
|
|
3538
|
-
allowedTools: registry.buildAllowedTools(),
|
|
3539
|
-
toolDefinitions: registry.
|
|
3863
|
+
server: registry.buildSdkServer({ scope: toolRequestScope }),
|
|
3864
|
+
allowedTools: registry.buildAllowedTools(toolRequestScope),
|
|
3865
|
+
toolDefinitions: registry.listForRequest(toolRequestScope),
|
|
3540
3866
|
};
|
|
3541
3867
|
}
|
|
3542
3868
|
function evidenceHash(input) {
|
|
@@ -3626,7 +3952,7 @@ function producerEnvelopeOptions(producer) {
|
|
|
3626
3952
|
};
|
|
3627
3953
|
}
|
|
3628
3954
|
/** Emit a DataEnvelope for SQL query results. */
|
|
3629
|
-
function emitSqlDataEnvelope(emit, columns, rows, sql, stdlibInjectedModules, traceProvenance, producer) {
|
|
3955
|
+
function emitSqlDataEnvelope(emit, columns, rows, sql, stdlibInjectedModules, traceProvenance, producer, processIdentityWarning) {
|
|
3630
3956
|
const { evidenceRefId, queryHash } = stableSqlEvidenceRefId(sql, columns, rows, traceProvenance, producer);
|
|
3631
3957
|
const envelope = (0, dataContract_1.createDataEnvelope)({ columns, rows }, {
|
|
3632
3958
|
type: 'sql_result',
|
|
@@ -3643,6 +3969,7 @@ function emitSqlDataEnvelope(emit, columns, rows, sql, stdlibInjectedModules, tr
|
|
|
3643
3969
|
traceId: traceProvenance?.traceId,
|
|
3644
3970
|
queryHash,
|
|
3645
3971
|
...producerEnvelopeOptions(producer),
|
|
3972
|
+
processIdentityWarning,
|
|
3646
3973
|
intent: 'ad_hoc_sql_verification',
|
|
3647
3974
|
});
|
|
3648
3975
|
emit({
|
|
@@ -3662,7 +3989,7 @@ function emitSqlDataEnvelope(emit, columns, rows, sql, stdlibInjectedModules, tr
|
|
|
3662
3989
|
return { evidenceRefId, queryHash };
|
|
3663
3990
|
}
|
|
3664
3991
|
/** Emit a DataEnvelope for SQL summary-mode results. */
|
|
3665
|
-
function emitSqlSummaryDataEnvelope(emit, summary, sql, stdlibInjectedModules, traceProvenance, producer) {
|
|
3992
|
+
function emitSqlSummaryDataEnvelope(emit, summary, sql, stdlibInjectedModules, traceProvenance, producer, processIdentityWarning) {
|
|
3666
3993
|
const { evidenceRefId, queryHash } = stableSqlEvidenceRefId(sql, summary.columns, summary.sampleRows, traceProvenance, producer, 'summary');
|
|
3667
3994
|
const envelope = (0, dataContract_1.createDataEnvelope)({
|
|
3668
3995
|
summary: {
|
|
@@ -3681,6 +4008,7 @@ function emitSqlSummaryDataEnvelope(emit, summary, sql, stdlibInjectedModules, t
|
|
|
3681
4008
|
traceId: traceProvenance?.traceId,
|
|
3682
4009
|
queryHash,
|
|
3683
4010
|
...producerEnvelopeOptions(producer),
|
|
4011
|
+
processIdentityWarning,
|
|
3684
4012
|
intent: 'ad_hoc_sql_summary',
|
|
3685
4013
|
});
|
|
3686
4014
|
emit({
|
|
@@ -3700,7 +4028,7 @@ function emitSqlSummaryDataEnvelope(emit, summary, sql, stdlibInjectedModules, t
|
|
|
3700
4028
|
return { evidenceRefId, queryHash };
|
|
3701
4029
|
}
|
|
3702
4030
|
/** Emit a diagnostic DataEnvelope for failed SQL so missing tables remain explainable. */
|
|
3703
|
-
function emitSqlDiagnosticDataEnvelope(emit, error, sql, stdlibInjectedModules, traceProvenance, producer, outputLanguage = outputLanguage_1.DEFAULT_OUTPUT_LANGUAGE) {
|
|
4031
|
+
function emitSqlDiagnosticDataEnvelope(emit, error, sql, stdlibInjectedModules, traceProvenance, producer, processIdentityWarning, outputLanguage = outputLanguage_1.DEFAULT_OUTPUT_LANGUAGE) {
|
|
3704
4032
|
const { evidenceRefId, queryHash } = stableSqlEvidenceRefId(sql, [], [[error]], traceProvenance, producer, 'diagnostic');
|
|
3705
4033
|
const envelope = (0, dataContract_1.createDataEnvelope)({
|
|
3706
4034
|
text: [
|
|
@@ -3720,6 +4048,7 @@ function emitSqlDiagnosticDataEnvelope(emit, error, sql, stdlibInjectedModules,
|
|
|
3720
4048
|
traceId: traceProvenance?.traceId,
|
|
3721
4049
|
queryHash,
|
|
3722
4050
|
...producerEnvelopeOptions(producer),
|
|
4051
|
+
processIdentityWarning,
|
|
3723
4052
|
intent: 'ad_hoc_sql_diagnostic',
|
|
3724
4053
|
});
|
|
3725
4054
|
emit({
|
|
@@ -3751,13 +4080,22 @@ function inferSqlColumnType(col) {
|
|
|
3751
4080
|
* Convert skill DisplayResults to DataEnvelopes and emit as SSE 'data' events.
|
|
3752
4081
|
* This enables interactive tables (clickable timestamps, expandable rows) in the frontend.
|
|
3753
4082
|
*/
|
|
3754
|
-
function emitSkillDataEnvelopes(displayResults, skillId, emit, traceProvenance, producer) {
|
|
4083
|
+
function emitSkillDataEnvelopes(displayResults, skillId, emit, traceProvenance, producer, identityResolution, artifactIdsByStepId) {
|
|
3755
4084
|
const envelopes = displayResults
|
|
3756
|
-
.filter(dr =>
|
|
4085
|
+
.filter(dr => Boolean(dr.data))
|
|
3757
4086
|
.map(dr => {
|
|
3758
4087
|
const explicitColumns = dr.columnDefinitions;
|
|
3759
|
-
const
|
|
4088
|
+
const drForEnvelope = {
|
|
4089
|
+
...dr,
|
|
4090
|
+
metadataConfig: dr.metadataConfig || (Array.isArray(dr.metadataFields)
|
|
4091
|
+
? { fields: dr.metadataFields }
|
|
4092
|
+
: undefined),
|
|
4093
|
+
};
|
|
4094
|
+
const envelope = (0, dataContract_1.displayResultToEnvelope)(drForEnvelope, skillId, explicitColumns);
|
|
3760
4095
|
const evidenceRefId = stableSkillEvidenceRefId(skillId, envelope.meta.stepId, envelope.display.title, envelope.data, traceProvenance, producer);
|
|
4096
|
+
const artifactId = envelope.meta.stepId
|
|
4097
|
+
? artifactIdsByStepId?.get(envelope.meta.stepId)
|
|
4098
|
+
: undefined;
|
|
3761
4099
|
const withEvidence = {
|
|
3762
4100
|
...envelope,
|
|
3763
4101
|
meta: {
|
|
@@ -3765,6 +4103,13 @@ function emitSkillDataEnvelopes(displayResults, skillId, emit, traceProvenance,
|
|
|
3765
4103
|
evidenceRefId,
|
|
3766
4104
|
traceSide: traceProvenance?.traceSide,
|
|
3767
4105
|
traceId: traceProvenance?.traceId,
|
|
4106
|
+
...(artifactId ? { artifactId, sourceArtifactId: artifactId } : {}),
|
|
4107
|
+
...(identityResolution ? {
|
|
4108
|
+
identityRefId: identityResolution.identityRefId,
|
|
4109
|
+
identityStatus: identityResolution.status,
|
|
4110
|
+
identityWarnings: identityResolution.warnings,
|
|
4111
|
+
identityResolution,
|
|
4112
|
+
} : {}),
|
|
3768
4113
|
...producerEnvelopeOptions(producer),
|
|
3769
4114
|
intent: 'skill_structured_result',
|
|
3770
4115
|
},
|