@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
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
// Copyright (C) 2024-2026 Gracker (Chris)
|
|
4
|
+
// This file is part of SmartPerfetto. See LICENSE for details.
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.__TEST_ONLY__ = exports.AppSourceIngester = void 0;
|
|
40
|
+
const crypto_1 = require("crypto");
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const secretPatterns_1 = require("../security/secretPatterns");
|
|
44
|
+
const pathSecurityGate_1 = require("../codebase/pathSecurityGate");
|
|
45
|
+
const baseIngester_1 = require("./baseIngester");
|
|
46
|
+
const DEFAULT_MAX_CHUNK_CHARS = 2200;
|
|
47
|
+
function makeChunkId(codebaseId, indexGeneration, relativePath, startLine) {
|
|
48
|
+
return (0, crypto_1.createHash)('sha256')
|
|
49
|
+
.update(`${codebaseId}|${indexGeneration}|${relativePath}|${startLine}`)
|
|
50
|
+
.digest('hex')
|
|
51
|
+
.slice(0, 16);
|
|
52
|
+
}
|
|
53
|
+
const chunkSource = baseIngester_1.chunkSourceBySymbols;
|
|
54
|
+
function filterPreviewFiles(preview, ref, opts) {
|
|
55
|
+
const prefixes = [
|
|
56
|
+
...(ref.pathFilters ?? []),
|
|
57
|
+
...(opts.pathPrefix ? [opts.pathPrefix] : []),
|
|
58
|
+
].filter(Boolean);
|
|
59
|
+
if (prefixes.length === 0)
|
|
60
|
+
return preview.acceptedFiles;
|
|
61
|
+
return preview.acceptedFiles.filter(file => prefixes.some(prefix => file.relativePath.startsWith(prefix.replace(/^\//, ''))));
|
|
62
|
+
}
|
|
63
|
+
class AppSourceIngester {
|
|
64
|
+
constructor(store, registry, gate = new pathSecurityGate_1.PathSecurityGate()) {
|
|
65
|
+
this.store = store;
|
|
66
|
+
this.registry = registry;
|
|
67
|
+
this.gate = gate;
|
|
68
|
+
}
|
|
69
|
+
ingest(codebaseId, opts = {}) {
|
|
70
|
+
const ref = this.registry.get(codebaseId);
|
|
71
|
+
if (!ref) {
|
|
72
|
+
throw new Error(`Codebase '${codebaseId}' not found`);
|
|
73
|
+
}
|
|
74
|
+
if (ref.kind !== 'app_source') {
|
|
75
|
+
throw new Error(`Codebase '${codebaseId}' is kind=${ref.kind}; app source ingestion requires app_source`);
|
|
76
|
+
}
|
|
77
|
+
const preview = this.gate.preview(ref.rootRealpath);
|
|
78
|
+
if (preview.blocked) {
|
|
79
|
+
this.registry.updateIngestStatus(codebaseId, {
|
|
80
|
+
lastIngestStatus: 'blocked_by_security',
|
|
81
|
+
lastIngestAt: Date.now(),
|
|
82
|
+
lastIngestError: preview.blockedReason,
|
|
83
|
+
blockedFileCount: preview.skippedFiles.length,
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
codebaseId,
|
|
87
|
+
filesProcessed: 0,
|
|
88
|
+
chunksAdded: 0,
|
|
89
|
+
chunksSkipped: 0,
|
|
90
|
+
blockedFileCount: preview.skippedFiles.length,
|
|
91
|
+
redactionHitCount: 0,
|
|
92
|
+
errors: [{ filePath: ref.displayName, reason: preview.blockedReason ?? 'blocked' }],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const maxChars = opts.maxChunkChars ?? DEFAULT_MAX_CHUNK_CHARS;
|
|
96
|
+
const result = {
|
|
97
|
+
codebaseId,
|
|
98
|
+
filesProcessed: 0,
|
|
99
|
+
chunksAdded: 0,
|
|
100
|
+
chunksSkipped: 0,
|
|
101
|
+
blockedFileCount: preview.skippedFiles.length,
|
|
102
|
+
redactionHitCount: 0,
|
|
103
|
+
errors: [],
|
|
104
|
+
};
|
|
105
|
+
for (const file of filterPreviewFiles(preview, ref, opts)) {
|
|
106
|
+
result.filesProcessed++;
|
|
107
|
+
try {
|
|
108
|
+
const absolutePath = path.join(ref.rootRealpath, file.relativePath);
|
|
109
|
+
const content = fs.readFileSync(absolutePath, 'utf-8');
|
|
110
|
+
const chunks = chunkSource(content, maxChars);
|
|
111
|
+
if (chunks.length === 0) {
|
|
112
|
+
result.chunksSkipped++;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
for (const chunk of chunks) {
|
|
116
|
+
const redaction = (0, secretPatterns_1.redactSecrets)(chunk.text);
|
|
117
|
+
result.redactionHitCount += redaction.redactedCount;
|
|
118
|
+
this.store.addChunk({
|
|
119
|
+
chunkId: makeChunkId(codebaseId, ref.indexGeneration, file.relativePath, chunk.startLine),
|
|
120
|
+
kind: 'app_source',
|
|
121
|
+
uri: `codebase://${codebaseId}/${file.relativePath}`,
|
|
122
|
+
title: file.relativePath.split('/').pop(),
|
|
123
|
+
snippet: chunk.text,
|
|
124
|
+
tokenCount: (0, baseIngester_1.estimateTokenCount)(chunk.text),
|
|
125
|
+
indexedAt: Date.now(),
|
|
126
|
+
filePath: file.relativePath,
|
|
127
|
+
lineRange: { start: chunk.startLine, end: chunk.endLine },
|
|
128
|
+
...(chunk.symbol ? { symbol: chunk.symbol } : {}),
|
|
129
|
+
language: (0, baseIngester_1.languageForPath)(file.relativePath),
|
|
130
|
+
...(ref.commitHash ? { commitHash: ref.commitHash } : {}),
|
|
131
|
+
...(ref.vendor ? { vendor: ref.vendor } : {}),
|
|
132
|
+
...(ref.buildId ? { buildId: ref.buildId } : {}),
|
|
133
|
+
codebaseId,
|
|
134
|
+
registryOrigin: 'codebase_registry',
|
|
135
|
+
});
|
|
136
|
+
result.chunksAdded++;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
result.chunksSkipped++;
|
|
141
|
+
result.errors.push({
|
|
142
|
+
filePath: file.relativePath,
|
|
143
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
this.registry.updateIngestStatus(codebaseId, {
|
|
148
|
+
lastIngestStatus: result.errors.length > 0 ? 'partial' : 'ok',
|
|
149
|
+
lastIngestAt: Date.now(),
|
|
150
|
+
lastIngestError: result.errors[0]?.reason,
|
|
151
|
+
chunkCount: result.chunksAdded,
|
|
152
|
+
blockedFileCount: result.blockedFileCount,
|
|
153
|
+
redactionHitCount: result.redactionHitCount,
|
|
154
|
+
});
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.AppSourceIngester = AppSourceIngester;
|
|
159
|
+
exports.__TEST_ONLY__ = {
|
|
160
|
+
chunkSource,
|
|
161
|
+
detectSymbol: baseIngester_1.detectSourceSymbol,
|
|
162
|
+
makeChunkId,
|
|
163
|
+
languageFor: baseIngester_1.languageForPath,
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=appSourceIngester.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appSourceIngester.js","sourceRoot":"","sources":["../../../src/services/rag/appSourceIngester.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { RagChunk } from '../../types/sparkContracts';
|
|
2
|
+
export interface SourceChunk {
|
|
3
|
+
text: string;
|
|
4
|
+
startLine: number;
|
|
5
|
+
endLine: number;
|
|
6
|
+
symbol?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface OffsetChunk {
|
|
9
|
+
text: string;
|
|
10
|
+
offset: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function estimateTokenCount(text: string): number;
|
|
13
|
+
export declare function stableChunkId(parts: readonly unknown[], length?: number): string;
|
|
14
|
+
export declare function languageForPath(relativePath: string): NonNullable<RagChunk['language']>;
|
|
15
|
+
export declare function detectSourceSymbol(line: string): string | undefined;
|
|
16
|
+
export declare function chunkSourceBySymbols(content: string, maxChars: number): SourceChunk[];
|
|
17
|
+
export declare function chunkTextByParagraphs(text: string, maxChars: number): OffsetChunk[];
|
|
18
|
+
//# sourceMappingURL=baseIngester.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseIngester.d.ts","sourceRoot":"","sources":["../../../src/services/rag/baseIngester.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,4BAA4B,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,MAAM,SAAK,GAAG,MAAM,CAK5E;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAUvF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASnE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CA2ErF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CA0BnF"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
// Copyright (C) 2024-2026 Gracker (Chris)
|
|
4
|
+
// This file is part of SmartPerfetto. See LICENSE for details.
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.estimateTokenCount = estimateTokenCount;
|
|
40
|
+
exports.stableChunkId = stableChunkId;
|
|
41
|
+
exports.languageForPath = languageForPath;
|
|
42
|
+
exports.detectSourceSymbol = detectSourceSymbol;
|
|
43
|
+
exports.chunkSourceBySymbols = chunkSourceBySymbols;
|
|
44
|
+
exports.chunkTextByParagraphs = chunkTextByParagraphs;
|
|
45
|
+
const crypto_1 = require("crypto");
|
|
46
|
+
const path = __importStar(require("path"));
|
|
47
|
+
function estimateTokenCount(text) {
|
|
48
|
+
return Math.max(1, Math.round(text.length / 4));
|
|
49
|
+
}
|
|
50
|
+
function stableChunkId(parts, length = 16) {
|
|
51
|
+
return (0, crypto_1.createHash)('sha256')
|
|
52
|
+
.update(parts.map(part => String(part)).join('|'))
|
|
53
|
+
.digest('hex')
|
|
54
|
+
.slice(0, length);
|
|
55
|
+
}
|
|
56
|
+
function languageForPath(relativePath) {
|
|
57
|
+
const ext = path.extname(relativePath);
|
|
58
|
+
if (ext === '.kt' || ext === '.kts')
|
|
59
|
+
return 'kotlin';
|
|
60
|
+
if (ext === '.java')
|
|
61
|
+
return 'java';
|
|
62
|
+
if (ext === '.c')
|
|
63
|
+
return 'c';
|
|
64
|
+
if (ext === '.cc' || ext === '.cpp' || ext === '.cxx' || ext === '.h' || ext === '.hpp')
|
|
65
|
+
return 'cpp';
|
|
66
|
+
if (ext === '.rs')
|
|
67
|
+
return 'rust';
|
|
68
|
+
if (ext === '.go')
|
|
69
|
+
return 'go';
|
|
70
|
+
if (ext === '.py')
|
|
71
|
+
return 'py';
|
|
72
|
+
return 'unknown';
|
|
73
|
+
}
|
|
74
|
+
function detectSourceSymbol(line) {
|
|
75
|
+
const classMatch = line.match(/\b(?:class|object|interface|enum\s+class|struct)\s+([A-Za-z_][A-Za-z0-9_]*)/);
|
|
76
|
+
if (classMatch?.[1])
|
|
77
|
+
return classMatch[1];
|
|
78
|
+
const kotlinFun = line.match(/\bfun\s+([A-Za-z_][A-Za-z0-9_]*)\s*\(/);
|
|
79
|
+
if (kotlinFun?.[1])
|
|
80
|
+
return kotlinFun[1];
|
|
81
|
+
const cLikeFunction = line.match(/\b(?:[A-Za-z_][A-Za-z0-9_:<>~*&\s]+)\s+([A-Za-z_~][A-Za-z0-9_:~]*)\s*\([^;]*\)\s*(?:const\s*)?(?:noexcept\s*)?(?:override\s*)?\{/);
|
|
82
|
+
if (cLikeFunction?.[1])
|
|
83
|
+
return cLikeFunction[1].split('::').pop();
|
|
84
|
+
const javaMethod = line.match(/\b(?:public|private|protected|internal|static|final|suspend|override|\s)+[A-Za-z0-9_<>,.?[\]\s]+\s+([A-Za-z_][A-Za-z0-9_]*)\s*\([^;]*\)\s*\{/);
|
|
85
|
+
return javaMethod?.[1];
|
|
86
|
+
}
|
|
87
|
+
function chunkSourceBySymbols(content, maxChars) {
|
|
88
|
+
const normalized = content.replace(/\r\n?/g, '\n');
|
|
89
|
+
if (normalized.trim().length === 0)
|
|
90
|
+
return [];
|
|
91
|
+
const lines = normalized.split('\n');
|
|
92
|
+
const boundaries = new Set([0]);
|
|
93
|
+
for (let i = 0; i < lines.length; i++) {
|
|
94
|
+
if (detectSourceSymbol(lines[i]))
|
|
95
|
+
boundaries.add(i);
|
|
96
|
+
}
|
|
97
|
+
boundaries.add(lines.length);
|
|
98
|
+
const sorted = Array.from(boundaries).sort((a, b) => a - b);
|
|
99
|
+
const sections = [];
|
|
100
|
+
for (let i = 0; i < sorted.length - 1; i++) {
|
|
101
|
+
const start = sorted[i];
|
|
102
|
+
const end = sorted[i + 1];
|
|
103
|
+
if (end <= start)
|
|
104
|
+
continue;
|
|
105
|
+
const text = lines.slice(start, end).join('\n').trim();
|
|
106
|
+
if (!text)
|
|
107
|
+
continue;
|
|
108
|
+
sections.push({
|
|
109
|
+
text,
|
|
110
|
+
startLine: start + 1,
|
|
111
|
+
endLine: end,
|
|
112
|
+
symbol: detectSourceSymbol(lines[start]),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const out = [];
|
|
116
|
+
for (const section of sections) {
|
|
117
|
+
if (section.text.length <= maxChars * 2) {
|
|
118
|
+
out.push(section);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const sectionLines = section.text.split('\n');
|
|
122
|
+
let startLine = section.startLine;
|
|
123
|
+
let buf = [];
|
|
124
|
+
let bufChars = 0;
|
|
125
|
+
for (const line of sectionLines) {
|
|
126
|
+
if (bufChars === 0 && line.length > maxChars) {
|
|
127
|
+
let cursor = 0;
|
|
128
|
+
while (cursor < line.length) {
|
|
129
|
+
const piece = line.slice(cursor, cursor + maxChars);
|
|
130
|
+
out.push({
|
|
131
|
+
text: piece,
|
|
132
|
+
startLine,
|
|
133
|
+
endLine: startLine,
|
|
134
|
+
symbol: section.symbol,
|
|
135
|
+
});
|
|
136
|
+
cursor += maxChars;
|
|
137
|
+
}
|
|
138
|
+
startLine += 1;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (bufChars > 0 && bufChars + line.length + 1 > maxChars) {
|
|
142
|
+
out.push({
|
|
143
|
+
text: buf.join('\n'),
|
|
144
|
+
startLine,
|
|
145
|
+
endLine: startLine + buf.length - 1,
|
|
146
|
+
symbol: section.symbol,
|
|
147
|
+
});
|
|
148
|
+
startLine += buf.length;
|
|
149
|
+
buf = [];
|
|
150
|
+
bufChars = 0;
|
|
151
|
+
}
|
|
152
|
+
buf.push(line);
|
|
153
|
+
bufChars += line.length + 1;
|
|
154
|
+
}
|
|
155
|
+
if (buf.length > 0) {
|
|
156
|
+
out.push({
|
|
157
|
+
text: buf.join('\n'),
|
|
158
|
+
startLine,
|
|
159
|
+
endLine: startLine + buf.length - 1,
|
|
160
|
+
symbol: section.symbol,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return out;
|
|
165
|
+
}
|
|
166
|
+
function chunkTextByParagraphs(text, maxChars) {
|
|
167
|
+
const trimmed = text.trim();
|
|
168
|
+
if (trimmed.length === 0)
|
|
169
|
+
return [];
|
|
170
|
+
const paragraphs = trimmed
|
|
171
|
+
.split(/\n\s*\n+/)
|
|
172
|
+
.map(p => p.trim())
|
|
173
|
+
.filter(p => p.length > 0);
|
|
174
|
+
const out = [];
|
|
175
|
+
let cursor = 0;
|
|
176
|
+
let buf = '';
|
|
177
|
+
let bufStart = 0;
|
|
178
|
+
for (const p of paragraphs) {
|
|
179
|
+
if (buf.length === 0) {
|
|
180
|
+
buf = p;
|
|
181
|
+
bufStart = cursor;
|
|
182
|
+
}
|
|
183
|
+
else if (buf.length + 2 + p.length <= maxChars) {
|
|
184
|
+
buf += '\n\n' + p;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
out.push({ text: buf, offset: bufStart });
|
|
188
|
+
buf = p;
|
|
189
|
+
bufStart = cursor;
|
|
190
|
+
}
|
|
191
|
+
cursor += p.length + 2;
|
|
192
|
+
}
|
|
193
|
+
if (buf.length > 0)
|
|
194
|
+
out.push({ text: buf, offset: bufStart });
|
|
195
|
+
return out;
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=baseIngester.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseIngester.js","sourceRoot":"","sources":["../../../src/services/rag/baseIngester.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { RagStore } from '../ragStore';
|
|
2
|
+
import type { CodebaseRegistry, CodebaseRef } from '../codebase/codebaseRegistry';
|
|
3
|
+
import { PathSecurityGate, type PathPreviewResult } from '../codebase/pathSecurityGate';
|
|
4
|
+
export interface KernelSourceIngestOptions {
|
|
5
|
+
maxChunkChars?: number;
|
|
6
|
+
pathPrefix?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface KernelSourceIngestError {
|
|
9
|
+
filePath: string;
|
|
10
|
+
reason: string;
|
|
11
|
+
}
|
|
12
|
+
export interface KernelSourceIngestResult {
|
|
13
|
+
codebaseId: string;
|
|
14
|
+
filesProcessed: number;
|
|
15
|
+
chunksAdded: number;
|
|
16
|
+
chunksSkipped: number;
|
|
17
|
+
blockedFileCount: number;
|
|
18
|
+
redactionHitCount: number;
|
|
19
|
+
errors: KernelSourceIngestError[];
|
|
20
|
+
}
|
|
21
|
+
declare function spdxLicense(content: string): string | undefined;
|
|
22
|
+
declare function filterPreviewFiles(preview: PathPreviewResult, ref: CodebaseRef, opts: KernelSourceIngestOptions): import("../codebase/pathSecurityGate").PathPreviewFile[];
|
|
23
|
+
export declare class KernelSourceIngester {
|
|
24
|
+
private readonly store;
|
|
25
|
+
private readonly registry;
|
|
26
|
+
private readonly gate;
|
|
27
|
+
constructor(store: RagStore, registry: CodebaseRegistry, gate?: PathSecurityGate);
|
|
28
|
+
ingest(codebaseId: string, opts?: KernelSourceIngestOptions): KernelSourceIngestResult;
|
|
29
|
+
}
|
|
30
|
+
export declare const __TEST_ONLY__: {
|
|
31
|
+
spdxLicense: typeof spdxLicense;
|
|
32
|
+
filterPreviewFiles: typeof filterPreviewFiles;
|
|
33
|
+
};
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=kernelSourceIngester.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernelSourceIngester.d.ts","sourceRoot":"","sources":["../../../src/services/rag/kernelSourceIngester.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAC,gBAAgB,EAAE,WAAW,EAAC,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAC,gBAAgB,EAAE,KAAK,iBAAiB,EAAC,MAAM,8BAA8B,CAAC;AAYtF,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,uBAAuB,EAAE,CAAC;CACnC;AAED,iBAAS,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIxD;AAED,iBAAS,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,yBAAyB,4DASxG;AAED,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,GAAE,gBAAyC;IAGlE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,yBAA8B,GAAG,wBAAwB;CAoG3F;AAED,eAAO,MAAM,aAAa;;;CAGzB,CAAC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
// Copyright (C) 2024-2026 Gracker (Chris)
|
|
4
|
+
// This file is part of SmartPerfetto. See LICENSE for details.
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.__TEST_ONLY__ = exports.KernelSourceIngester = void 0;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const pathSecurityGate_1 = require("../codebase/pathSecurityGate");
|
|
43
|
+
const secretPatterns_1 = require("../security/secretPatterns");
|
|
44
|
+
const baseIngester_1 = require("./baseIngester");
|
|
45
|
+
const DEFAULT_MAX_CHUNK_CHARS = 1800;
|
|
46
|
+
const UNKNOWN_LICENSE = 'UNKNOWN';
|
|
47
|
+
function spdxLicense(content) {
|
|
48
|
+
const header = content.split(/\r?\n/).slice(0, 12).join('\n');
|
|
49
|
+
const match = header.match(/SPDX-License-Identifier:\s*([A-Za-z0-9+_.()-]+(?:\s+(?:WITH|OR|AND)\s+[A-Za-z0-9+_.()-]+)*)/);
|
|
50
|
+
return match?.[1]?.trim();
|
|
51
|
+
}
|
|
52
|
+
function filterPreviewFiles(preview, ref, opts) {
|
|
53
|
+
const prefixes = [
|
|
54
|
+
...(ref.pathFilters ?? []),
|
|
55
|
+
...(opts.pathPrefix ? [opts.pathPrefix] : []),
|
|
56
|
+
].filter(Boolean).map(prefix => prefix.replace(/^\//, ''));
|
|
57
|
+
if (prefixes.length === 0)
|
|
58
|
+
return [];
|
|
59
|
+
return preview.acceptedFiles.filter(file => prefixes.some(prefix => file.relativePath.startsWith(prefix)));
|
|
60
|
+
}
|
|
61
|
+
class KernelSourceIngester {
|
|
62
|
+
constructor(store, registry, gate = new pathSecurityGate_1.PathSecurityGate()) {
|
|
63
|
+
this.store = store;
|
|
64
|
+
this.registry = registry;
|
|
65
|
+
this.gate = gate;
|
|
66
|
+
}
|
|
67
|
+
ingest(codebaseId, opts = {}) {
|
|
68
|
+
const ref = this.registry.get(codebaseId);
|
|
69
|
+
if (!ref) {
|
|
70
|
+
throw new Error(`Codebase '${codebaseId}' not found`);
|
|
71
|
+
}
|
|
72
|
+
if (ref.kind !== 'kernel_source') {
|
|
73
|
+
throw new Error(`Codebase '${codebaseId}' is kind=${ref.kind}; kernel ingestion requires kernel_source`);
|
|
74
|
+
}
|
|
75
|
+
if (!ref.vendor) {
|
|
76
|
+
throw new Error(`Kernel codebase '${codebaseId}' requires vendor`);
|
|
77
|
+
}
|
|
78
|
+
if ((ref.pathFilters ?? []).length === 0 && !opts.pathPrefix) {
|
|
79
|
+
throw new Error(`Kernel codebase '${codebaseId}' requires pathFilters or pathPrefix`);
|
|
80
|
+
}
|
|
81
|
+
const preview = this.gate.preview(ref.rootRealpath);
|
|
82
|
+
if (preview.blocked) {
|
|
83
|
+
this.registry.updateIngestStatus(codebaseId, {
|
|
84
|
+
lastIngestStatus: 'blocked_by_security',
|
|
85
|
+
lastIngestAt: Date.now(),
|
|
86
|
+
lastIngestError: preview.blockedReason,
|
|
87
|
+
blockedFileCount: preview.skippedFiles.length,
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
codebaseId,
|
|
91
|
+
filesProcessed: 0,
|
|
92
|
+
chunksAdded: 0,
|
|
93
|
+
chunksSkipped: 0,
|
|
94
|
+
blockedFileCount: preview.skippedFiles.length,
|
|
95
|
+
redactionHitCount: 0,
|
|
96
|
+
errors: [{ filePath: ref.displayName, reason: preview.blockedReason ?? 'blocked' }],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const result = {
|
|
100
|
+
codebaseId,
|
|
101
|
+
filesProcessed: 0,
|
|
102
|
+
chunksAdded: 0,
|
|
103
|
+
chunksSkipped: 0,
|
|
104
|
+
blockedFileCount: preview.skippedFiles.length,
|
|
105
|
+
redactionHitCount: 0,
|
|
106
|
+
errors: [],
|
|
107
|
+
};
|
|
108
|
+
const maxChars = opts.maxChunkChars ?? DEFAULT_MAX_CHUNK_CHARS;
|
|
109
|
+
for (const file of filterPreviewFiles(preview, ref, opts)) {
|
|
110
|
+
result.filesProcessed++;
|
|
111
|
+
try {
|
|
112
|
+
const absolutePath = path.join(ref.rootRealpath, file.relativePath);
|
|
113
|
+
const content = fs.readFileSync(absolutePath, 'utf-8');
|
|
114
|
+
const license = ref.licenseTag ?? spdxLicense(content);
|
|
115
|
+
const chunks = (0, baseIngester_1.chunkSourceBySymbols)(content, maxChars);
|
|
116
|
+
if (chunks.length === 0) {
|
|
117
|
+
result.chunksSkipped++;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
for (const chunk of chunks) {
|
|
121
|
+
const redaction = (0, secretPatterns_1.redactSecrets)(chunk.text);
|
|
122
|
+
result.redactionHitCount += redaction.redactedCount;
|
|
123
|
+
this.store.addChunk({
|
|
124
|
+
chunkId: (0, baseIngester_1.stableChunkId)([codebaseId, ref.indexGeneration, file.relativePath, chunk.startLine]),
|
|
125
|
+
kind: 'kernel_source',
|
|
126
|
+
uri: `codebase://${codebaseId}/${file.relativePath}`,
|
|
127
|
+
title: file.relativePath.split('/').pop(),
|
|
128
|
+
snippet: redaction.text,
|
|
129
|
+
tokenCount: (0, baseIngester_1.estimateTokenCount)(redaction.text),
|
|
130
|
+
license: license ?? UNKNOWN_LICENSE,
|
|
131
|
+
indexedAt: Date.now(),
|
|
132
|
+
filePath: file.relativePath,
|
|
133
|
+
lineRange: { start: chunk.startLine, end: chunk.endLine },
|
|
134
|
+
...(chunk.symbol ? { symbol: chunk.symbol } : {}),
|
|
135
|
+
language: (0, baseIngester_1.languageForPath)(file.relativePath),
|
|
136
|
+
...(ref.commitHash ? { commitHash: ref.commitHash } : {}),
|
|
137
|
+
vendor: ref.vendor,
|
|
138
|
+
...(ref.buildId ? { buildId: ref.buildId } : {}),
|
|
139
|
+
codebaseId,
|
|
140
|
+
registryOrigin: 'codebase_registry',
|
|
141
|
+
...(!license ? { unsupportedReason: 'license_unknown' } : {}),
|
|
142
|
+
});
|
|
143
|
+
result.chunksAdded++;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
result.chunksSkipped++;
|
|
148
|
+
result.errors.push({
|
|
149
|
+
filePath: file.relativePath,
|
|
150
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
this.registry.updateIngestStatus(codebaseId, {
|
|
155
|
+
lastIngestStatus: result.errors.length > 0 ? 'partial' : 'ok',
|
|
156
|
+
lastIngestAt: Date.now(),
|
|
157
|
+
lastIngestError: result.errors[0]?.reason,
|
|
158
|
+
chunkCount: result.chunksAdded,
|
|
159
|
+
blockedFileCount: result.blockedFileCount,
|
|
160
|
+
redactionHitCount: result.redactionHitCount,
|
|
161
|
+
});
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.KernelSourceIngester = KernelSourceIngester;
|
|
166
|
+
exports.__TEST_ONLY__ = {
|
|
167
|
+
spdxLicense,
|
|
168
|
+
filterPreviewFiles,
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=kernelSourceIngester.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernelSourceIngester.js","sourceRoot":"","sources":["../../../src/services/rag/kernelSourceIngester.ts"],"names":[],"mappings":"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"}
|