@gracker/smartperfetto 1.0.13 → 1.0.15
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/core/orchestratorTypes.d.ts +10 -0
- package/dist/agent/core/orchestratorTypes.d.ts.map +1 -1
- package/dist/agent/core/orchestratorTypes.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/claudeMcpServer.d.ts +15 -1
- package/dist/agentv3/claudeMcpServer.d.ts.map +1 -1
- package/dist/agentv3/claudeMcpServer.js +311 -5
- 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 +18 -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/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/services/cliAnalyzeService.d.ts +3 -0
- package/dist/cli-user/services/cliAnalyzeService.d.ts.map +1 -1
- package/dist/cli-user/services/cliAnalyzeService.js +116 -29
- package/dist/cli-user/services/cliAnalyzeService.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/agentRoutes.d.ts.map +1 -1
- package/dist/routes/agentRoutes.js +4 -0
- 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/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/htmlReportGenerator.d.ts +2 -0
- package/dist/services/htmlReportGenerator.d.ts.map +1 -1
- package/dist/services/htmlReportGenerator.js +67 -0
- package/dist/services/htmlReportGenerator.js.map +1 -1
- package/dist/services/persistAgentSession.d.ts.map +1 -1
- package/dist/services/persistAgentSession.js +19 -0
- package/dist/services/persistAgentSession.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/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/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 +12 -5
- package/skills/composite/code_pinpoint.skill.yaml +111 -0
- package/strategies/code-aware.template.md +37 -0
- package/strategies/prompt-methodology.template.md +2 -0
|
@@ -7,6 +7,14 @@ export interface RagStoreSearchOptions {
|
|
|
7
7
|
kinds?: RagSourceKind[];
|
|
8
8
|
/** Enterprise tenant/workspace scope. Ignored by legacy JSON storage. */
|
|
9
9
|
scope?: KnowledgeScope;
|
|
10
|
+
/** Restrict source-backed chunks to selected codebases. */
|
|
11
|
+
codebaseIds?: string[];
|
|
12
|
+
vendor?: string;
|
|
13
|
+
buildId?: string;
|
|
14
|
+
pathPrefix?: string;
|
|
15
|
+
symbolExact?: string;
|
|
16
|
+
filePathExact?: string;
|
|
17
|
+
languages?: RagChunk['language'][];
|
|
10
18
|
}
|
|
11
19
|
/** Per-kind index summary returned by `getStats()`. */
|
|
12
20
|
export type RagStoreStats = Record<RagSourceKind, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ragStore.d.ts","sourceRoot":"","sources":["../../src/services/ragStore.ts"],"names":[],"mappings":"AA2BA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAIL,KAAK,cAAc,EAKpB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ragStore.d.ts","sourceRoot":"","sources":["../../src/services/ragStore.ts"],"names":[],"mappings":"AA2BA,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAIL,KAAK,cAAc,EAKpB,MAAM,wBAAwB,CAAC;AAkChC,MAAM,WAAW,qBAAqB;IACpC,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,yEAAyE;IACzE,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;CACpC;AAED,uDAAuD;AACvD,MAAM,MAAM,aAAa,GAAG,MAAM,CAChC,aAAa,EACb;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAC,CAC7C,CAAC;AAuEF;;;;;GAKG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,MAAM,CAAS;gBAEX,WAAW,EAAE,MAAM;IAI/B,uDAAuD;IACvD,IAAI,IAAI,IAAI;IAqBZ;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI;IAwBvD,qEAAqE;IACrE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,OAAO;IAc7D,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,QAAQ,GAAG,SAAS;IAYvE,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,aAAa;IAoB/C;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B,GAAG,kBAAkB;IAsF3E;uCACmC;IACnC,OAAO,CAAC,OAAO;CAchB;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAEpE"}
|
|
@@ -65,6 +65,7 @@ const scopedKnowledgeStore_1 = require("./scopedKnowledgeStore");
|
|
|
65
65
|
const LICENSE_REQUIRED_KINDS = new Set([
|
|
66
66
|
'aosp',
|
|
67
67
|
'oem_sdk',
|
|
68
|
+
'kernel_source',
|
|
68
69
|
]);
|
|
69
70
|
/** All RagSourceKind values. Kept here so getStats() can initialize a
|
|
70
71
|
* complete record without reaching into the type system at runtime. When
|
|
@@ -77,6 +78,8 @@ const ALL_RAG_SOURCE_KINDS = [
|
|
|
77
78
|
'project_memory',
|
|
78
79
|
'world_memory',
|
|
79
80
|
'case_library',
|
|
81
|
+
'app_source',
|
|
82
|
+
'kernel_source',
|
|
80
83
|
];
|
|
81
84
|
const KNOWLEDGE_KIND = 'rag_chunk';
|
|
82
85
|
const RAG_ROW_SCOPE_PREFIX = 'rag:';
|
|
@@ -98,6 +101,49 @@ function emptyStats() {
|
|
|
98
101
|
}
|
|
99
102
|
return stats;
|
|
100
103
|
}
|
|
104
|
+
function defaultRegistryOrigin(kind) {
|
|
105
|
+
switch (kind) {
|
|
106
|
+
case 'androidperformance.com':
|
|
107
|
+
case 'aosp':
|
|
108
|
+
case 'oem_sdk':
|
|
109
|
+
return 'legacy_plan55';
|
|
110
|
+
case 'project_memory':
|
|
111
|
+
case 'world_memory':
|
|
112
|
+
return 'plan44_memory';
|
|
113
|
+
case 'case_library':
|
|
114
|
+
return 'plan54_cases';
|
|
115
|
+
case 'app_source':
|
|
116
|
+
case 'kernel_source':
|
|
117
|
+
return 'codebase_registry';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function normalizeChunkForStorage(chunk) {
|
|
121
|
+
const registryOrigin = chunk.registryOrigin ?? defaultRegistryOrigin(chunk.kind);
|
|
122
|
+
if ((chunk.kind === 'app_source' || chunk.kind === 'kernel_source') && !chunk.codebaseId) {
|
|
123
|
+
throw new Error(`Code-aware source chunk '${chunk.chunkId}' (${chunk.kind}) requires codebaseId`);
|
|
124
|
+
}
|
|
125
|
+
if (registryOrigin === 'codebase_registry' && !chunk.codebaseId) {
|
|
126
|
+
throw new Error(`Codebase registry chunk '${chunk.chunkId}' requires codebaseId`);
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
...chunk,
|
|
130
|
+
registryOrigin,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function backfillChunk(chunk) {
|
|
134
|
+
if (chunk.registryOrigin)
|
|
135
|
+
return chunk;
|
|
136
|
+
if (chunk.kind === 'app_source' || chunk.kind === 'kernel_source') {
|
|
137
|
+
return {
|
|
138
|
+
...chunk,
|
|
139
|
+
unsupportedReason: chunk.unsupportedReason ?? 'pre_v3_2_invalid_kind_origin_combo',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
...chunk,
|
|
144
|
+
registryOrigin: defaultRegistryOrigin(chunk.kind),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
101
147
|
/**
|
|
102
148
|
* Local file-backed RAG store. Single instance per storage path is
|
|
103
149
|
* enough for M0 — concurrent writers in the same process serialize via
|
|
@@ -120,13 +166,13 @@ class RagStore {
|
|
|
120
166
|
try {
|
|
121
167
|
const raw = fs.readFileSync(this.storagePath, 'utf-8');
|
|
122
168
|
const parsed = JSON.parse(raw);
|
|
123
|
-
if (parsed.schemaVersion !== 1 || !Array.isArray(parsed.chunks)) {
|
|
169
|
+
if ((parsed.schemaVersion !== 1 && parsed.schemaVersion !== 2) || !Array.isArray(parsed.chunks)) {
|
|
124
170
|
// Schema mismatch: leave in-memory empty; do not delete the file
|
|
125
171
|
// so the operator can inspect it.
|
|
126
172
|
return;
|
|
127
173
|
}
|
|
128
174
|
for (const c of parsed.chunks) {
|
|
129
|
-
this.chunks.set(c.chunkId, c);
|
|
175
|
+
this.chunks.set(c.chunkId, backfillChunk(c));
|
|
130
176
|
}
|
|
131
177
|
}
|
|
132
178
|
catch {
|
|
@@ -141,15 +187,16 @@ class RagStore {
|
|
|
141
187
|
*/
|
|
142
188
|
addChunk(chunk, scope) {
|
|
143
189
|
this.load();
|
|
190
|
+
const normalized = normalizeChunkForStorage(chunk);
|
|
144
191
|
if (LICENSE_REQUIRED_KINDS.has(chunk.kind) && !chunk.license) {
|
|
145
192
|
throw new Error(`License required for source kind '${chunk.kind}' but missing on chunk '${chunk.chunkId}'`);
|
|
146
193
|
}
|
|
147
194
|
if ((0, scopedKnowledgeStore_1.legacyKnowledgeFilesystemWritesEnabled)()) {
|
|
148
|
-
this.chunks.set(
|
|
195
|
+
this.chunks.set(normalized.chunkId, normalized);
|
|
149
196
|
this.persist();
|
|
150
197
|
}
|
|
151
198
|
if ((0, scopedKnowledgeStore_1.enterpriseKnowledgeDbWritesEnabled)()) {
|
|
152
|
-
(0, scopedKnowledgeStore_1.upsertScopedKnowledgeRecord)(KNOWLEDGE_KIND,
|
|
199
|
+
(0, scopedKnowledgeStore_1.upsertScopedKnowledgeRecord)(KNOWLEDGE_KIND, normalized.chunkId, ragRowScope(normalized.kind), normalized, scope, { createdAt: normalized.indexedAt, updatedAt: normalized.indexedAt });
|
|
153
200
|
}
|
|
154
201
|
}
|
|
155
202
|
/** Remove a chunk. Returns whether anything was actually removed. */
|
|
@@ -210,6 +257,8 @@ class RagStore {
|
|
|
210
257
|
const chunks = (0, scopedKnowledgeStore_1.enterpriseKnowledgeStoreEnabled)()
|
|
211
258
|
? (0, scopedKnowledgeStore_1.listScopedKnowledgeRecords)(KNOWLEDGE_KIND, opts.scope, { rowScopePrefix: RAG_ROW_SCOPE_PREFIX, includeSystem: true }).map(row => row.record)
|
|
212
259
|
: Array.from(this.chunks.values());
|
|
260
|
+
const codebaseFilter = opts.codebaseIds ? new Set(opts.codebaseIds) : null;
|
|
261
|
+
const languageFilter = opts.languages ? new Set(opts.languages) : null;
|
|
213
262
|
const probed = opts.kinds
|
|
214
263
|
? [...opts.kinds]
|
|
215
264
|
: Array.from(new Set(chunks.map(c => c.kind)));
|
|
@@ -221,22 +270,42 @@ class RagStore {
|
|
|
221
270
|
continue;
|
|
222
271
|
if (chunk.unsupportedReason)
|
|
223
272
|
continue;
|
|
273
|
+
if (codebaseFilter && (!chunk.codebaseId || !codebaseFilter.has(chunk.codebaseId)))
|
|
274
|
+
continue;
|
|
275
|
+
if (opts.vendor && chunk.vendor !== opts.vendor)
|
|
276
|
+
continue;
|
|
277
|
+
if (opts.buildId && chunk.buildId !== opts.buildId)
|
|
278
|
+
continue;
|
|
279
|
+
if (opts.pathPrefix && !(chunk.filePath ?? chunk.uri).startsWith(opts.pathPrefix))
|
|
280
|
+
continue;
|
|
281
|
+
if (opts.symbolExact && chunk.symbol !== opts.symbolExact)
|
|
282
|
+
continue;
|
|
283
|
+
if (opts.filePathExact && (chunk.filePath ?? chunk.uri) !== opts.filePathExact)
|
|
284
|
+
continue;
|
|
285
|
+
if (languageFilter && (!chunk.language || !languageFilter.has(chunk.language)))
|
|
286
|
+
continue;
|
|
224
287
|
eligibleSeen++;
|
|
225
288
|
const chunkTokens = new Set([
|
|
226
289
|
...tokenize(chunk.snippet),
|
|
227
290
|
...tokenize(chunk.title ?? ''),
|
|
291
|
+
...tokenize(chunk.symbol ?? ''),
|
|
292
|
+
...tokenize(chunk.filePath ?? ''),
|
|
228
293
|
]);
|
|
229
294
|
let overlap = 0;
|
|
230
295
|
for (const t of queryTokens) {
|
|
231
296
|
if (chunkTokens.has(t))
|
|
232
297
|
overlap++;
|
|
233
298
|
}
|
|
234
|
-
|
|
299
|
+
const exactSymbol = Boolean(opts.symbolExact && chunk.symbol === opts.symbolExact);
|
|
300
|
+
const exactFile = Boolean(opts.filePathExact && (chunk.filePath ?? chunk.uri) === opts.filePathExact);
|
|
301
|
+
const pathPrefix = Boolean(opts.pathPrefix && (chunk.filePath ?? chunk.uri).startsWith(opts.pathPrefix));
|
|
302
|
+
const tier = exactSymbol || exactFile ? 3 : pathPrefix ? 2 : 1;
|
|
303
|
+
if (overlap === 0 && tier === 1)
|
|
235
304
|
continue;
|
|
236
305
|
const score = overlap / Math.max(queryTokens.size, 1);
|
|
237
|
-
candidates.push({ chunk, score });
|
|
306
|
+
candidates.push({ chunk, score, tier });
|
|
238
307
|
}
|
|
239
|
-
candidates.sort((a, b) => b.score - a.score);
|
|
308
|
+
candidates.sort((a, b) => (b.tier - a.tier) || (b.score - a.score));
|
|
240
309
|
const top = candidates.slice(0, topK);
|
|
241
310
|
const results = top.map(c => ({
|
|
242
311
|
chunkId: c.chunk.chunkId,
|
|
@@ -279,7 +348,7 @@ class RagStore {
|
|
|
279
348
|
// unique suffix costs nothing and removes the foot-gun.
|
|
280
349
|
const tmp = `${this.storagePath}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`;
|
|
281
350
|
const envelope = {
|
|
282
|
-
schemaVersion:
|
|
351
|
+
schemaVersion: 2,
|
|
283
352
|
chunks: Array.from(this.chunks.values()),
|
|
284
353
|
};
|
|
285
354
|
fs.writeFileSync(tmp, JSON.stringify(envelope, null, 2), 'utf-8');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ragStore.js","sourceRoot":"","sources":["../../src/services/ragStore.ts"],"names":[],"mappings":";AAAA,6CAA6C;AAC7C,0CAA0C;AAC1C,+DAA+D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"ragStore.js","sourceRoot":"","sources":["../../src/services/ragStore.ts"],"names":[],"mappings":"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"}
|
package/dist/services/rbac.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Response } from 'express';
|
|
2
2
|
import type { RequestContext } from '../middleware/auth';
|
|
3
3
|
import { type ResourceOwnerFields } from './resourceOwnership';
|
|
4
|
-
export type RbacPermission = 'trace:read' | 'trace:write' | 'trace:download' | 'trace:delete_own' | 'trace:delete_any' | 'agent:run' | 'report:read' | 'report:delete' | 'analysis_result:read' | 'analysis_result:create' | 'analysis_result:share' | 'analysis_result:delete' | 'comparison:create' | 'comparison:read' | 'provider:manage_workspace' | 'provider:manage_org' | 'audit:read' | 'runtime:manage';
|
|
4
|
+
export type RbacPermission = 'trace:read' | 'trace:write' | 'trace:download' | 'trace:delete_own' | 'trace:delete_any' | 'agent:run' | 'report:read' | 'report:delete' | 'analysis_result:read' | 'analysis_result:create' | 'analysis_result:share' | 'analysis_result:delete' | 'comparison:create' | 'comparison:read' | 'codebase:read' | 'codebase:manage' | 'codebase:admin' | 'provider:manage_workspace' | 'provider:manage_org' | 'audit:read' | 'runtime:manage';
|
|
5
5
|
export declare function hasRbacPermission(context: RequestContext, permission: RbacPermission): boolean;
|
|
6
6
|
export declare function sharesWorkspaceWithContext(resource: ResourceOwnerFields | null | undefined, context: RequestContext): boolean;
|
|
7
7
|
export declare function canReadTraceResource(resource: ResourceOwnerFields | null | undefined, context: RequestContext): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rbac.d.ts","sourceRoot":"","sources":["../../src/services/rbac.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,aAAa,GACb,gBAAgB,GAChB,kBAAkB,GAClB,kBAAkB,GAClB,WAAW,GACX,aAAa,GACb,eAAe,GACf,sBAAsB,GACtB,wBAAwB,GACxB,uBAAuB,GACvB,wBAAwB,GACxB,mBAAmB,GACnB,iBAAiB,GACjB,2BAA2B,GAC3B,qBAAqB,GACrB,YAAY,GACZ,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"rbac.d.ts","sourceRoot":"","sources":["../../src/services/rbac.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,aAAa,GACb,gBAAgB,GAChB,kBAAkB,GAClB,kBAAkB,GAClB,WAAW,GACX,aAAa,GACb,eAAe,GACf,sBAAsB,GACtB,wBAAwB,GACxB,uBAAuB,GACvB,wBAAwB,GACxB,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,GACf,iBAAiB,GACjB,gBAAgB,GAChB,2BAA2B,GAC3B,qBAAqB,GACrB,YAAY,GACZ,gBAAgB,CAAC;AAwErB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAK9F;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAChD,OAAO,EAAE,cAAc,GACtB,OAAO,CAGT;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAChD,OAAO,EAAE,cAAc,GACtB,OAAO,CAET;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAChD,OAAO,EAAE,cAAc,GACtB,OAAO,CAGT;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAChD,OAAO,EAAE,cAAc,GACtB,OAAO,CAIT;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAChD,OAAO,EAAE,cAAc,GACtB,OAAO,CAET;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAChD,OAAO,EAAE,cAAc,GACtB,OAAO,CAIT;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,CAAC,mBAAmB,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EACnF,OAAO,EAAE,cAAc,GACtB,OAAO,CAKT;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAEhF;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAChD,OAAO,EAAE,cAAc,GACtB,OAAO,CAKT;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAChD,OAAO,EAAE,cAAc,GACtB,OAAO,CAIT;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,SAAc,GAAG,QAAQ,CAM5E"}
|
package/dist/services/rbac.js
CHANGED
|
@@ -30,6 +30,7 @@ const ROLE_PERMISSIONS = {
|
|
|
30
30
|
'analysis_result:share',
|
|
31
31
|
'comparison:create',
|
|
32
32
|
'comparison:read',
|
|
33
|
+
'codebase:read',
|
|
33
34
|
],
|
|
34
35
|
workspace_admin: [
|
|
35
36
|
'trace:read',
|
|
@@ -46,6 +47,8 @@ const ROLE_PERMISSIONS = {
|
|
|
46
47
|
'analysis_result:delete',
|
|
47
48
|
'comparison:create',
|
|
48
49
|
'comparison:read',
|
|
50
|
+
'codebase:read',
|
|
51
|
+
'codebase:manage',
|
|
49
52
|
'provider:manage_workspace',
|
|
50
53
|
'audit:read',
|
|
51
54
|
'runtime:manage',
|
|
@@ -65,6 +68,9 @@ const ROLE_PERMISSIONS = {
|
|
|
65
68
|
'analysis_result:delete',
|
|
66
69
|
'comparison:create',
|
|
67
70
|
'comparison:read',
|
|
71
|
+
'codebase:read',
|
|
72
|
+
'codebase:manage',
|
|
73
|
+
'codebase:admin',
|
|
68
74
|
'provider:manage_workspace',
|
|
69
75
|
'provider:manage_org',
|
|
70
76
|
'audit:read',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rbac.js","sourceRoot":"","sources":["../../src/services/rbac.ts"],"names":[],"mappings":";AAAA,6CAA6C;AAC7C,0CAA0C;AAC1C,+DAA+D;;
|
|
1
|
+
{"version":3,"file":"rbac.js","sourceRoot":"","sources":["../../src/services/rbac.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SanitizedRagResult } from '../rag/lookupResponseFilter';
|
|
2
|
+
export declare function registerCodeAwareLookupForEcho(sessionId: string | undefined, result: SanitizedRagResult): void;
|
|
3
|
+
export declare function registerCodeAwareCanary(sessionId: string | undefined, canary: string): void;
|
|
4
|
+
export declare function sanitizeCodeAwareText(sessionId: string | undefined, text: string): string;
|
|
5
|
+
export declare function clearCodeAwareOutputGuards(sessionId: string): void;
|
|
6
|
+
//# sourceMappingURL=codeAwareOutputRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeAwareOutputRegistry.d.ts","sourceRoot":"","sources":["../../../src/services/security/codeAwareOutputRegistry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,6BAA6B,CAAC;AAcpE,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAc9G;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAG3F;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKzF;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAIlE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerCodeAwareLookupForEcho = registerCodeAwareLookupForEcho;
|
|
7
|
+
exports.registerCodeAwareCanary = registerCodeAwareCanary;
|
|
8
|
+
exports.sanitizeCodeAwareText = sanitizeCodeAwareText;
|
|
9
|
+
exports.clearCodeAwareOutputGuards = clearCodeAwareOutputGuards;
|
|
10
|
+
const llmEchoOutputFilter_1 = require("./llmEchoOutputFilter");
|
|
11
|
+
const sessionStreams = new Map();
|
|
12
|
+
function streamFor(sessionId) {
|
|
13
|
+
let stream = sessionStreams.get(sessionId);
|
|
14
|
+
if (!stream) {
|
|
15
|
+
stream = new llmEchoOutputFilter_1.LLMEchoOutputStream();
|
|
16
|
+
sessionStreams.set(sessionId, stream);
|
|
17
|
+
}
|
|
18
|
+
return stream;
|
|
19
|
+
}
|
|
20
|
+
function registerCodeAwareLookupForEcho(sessionId, result) {
|
|
21
|
+
if (!sessionId)
|
|
22
|
+
return;
|
|
23
|
+
const stream = streamFor(sessionId);
|
|
24
|
+
for (const hit of result.hits) {
|
|
25
|
+
if (!hit.snippet || !hit.metadata?.codebaseId || !hit.metadata.filePath)
|
|
26
|
+
continue;
|
|
27
|
+
const ref = {
|
|
28
|
+
chunkId: hit.chunkId,
|
|
29
|
+
codebaseId: hit.metadata.codebaseId,
|
|
30
|
+
filePath: hit.metadata.filePath,
|
|
31
|
+
...(hit.metadata.lineRange ? { lineRange: hit.metadata.lineRange } : {}),
|
|
32
|
+
...(hit.metadata.symbol ? { symbol: hit.metadata.symbol } : {}),
|
|
33
|
+
};
|
|
34
|
+
stream.registerSnippet(hit.snippet, ref);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function registerCodeAwareCanary(sessionId, canary) {
|
|
38
|
+
if (!sessionId || !canary)
|
|
39
|
+
return;
|
|
40
|
+
streamFor(sessionId).registerCanary(canary);
|
|
41
|
+
}
|
|
42
|
+
function sanitizeCodeAwareText(sessionId, text) {
|
|
43
|
+
if (!sessionId || !text)
|
|
44
|
+
return text;
|
|
45
|
+
const stream = sessionStreams.get(sessionId);
|
|
46
|
+
if (!stream)
|
|
47
|
+
return text;
|
|
48
|
+
return stream.write(text) + stream.flush();
|
|
49
|
+
}
|
|
50
|
+
function clearCodeAwareOutputGuards(sessionId) {
|
|
51
|
+
const stream = sessionStreams.get(sessionId);
|
|
52
|
+
stream?.destroy();
|
|
53
|
+
sessionStreams.delete(sessionId);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=codeAwareOutputRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeAwareOutputRegistry.js","sourceRoot":"","sources":["../../../src/services/security/codeAwareOutputRegistry.ts"],"names":[],"mappings":";AAAA,6CAA6C;AAC7C,0CAA0C;AAC1C,+DAA+D;;AAgB/D,wEAcC;AAED,0DAGC;AAED,sDAKC;AAED,gEAIC;AA7CD,+DAAwE;AAExE,MAAM,cAAc,GAAG,IAAI,GAAG,EAA+B,CAAC;AAE9D,SAAS,SAAS,CAAC,SAAiB;IAClC,IAAI,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,yCAAmB,EAAE,CAAC;QACnC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,8BAA8B,CAAC,SAA6B,EAAE,MAA0B;IACtG,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ;YAAE,SAAS;QAClF,MAAM,GAAG,GAAY;YACnB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU;YACnC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ;YAC/B,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAgB,uBAAuB,CAAC,SAA6B,EAAE,MAAc;IACnF,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;QAAE,OAAO;IAClC,SAAS,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,qBAAqB,CAAC,SAA6B,EAAE,IAAY;IAC/E,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC7C,CAAC;AAED,SAAgB,0BAA0B,CAAC,SAAiB;IAC1D,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export interface CodeRef {
|
|
2
|
+
chunkId: string;
|
|
3
|
+
codebaseId: string;
|
|
4
|
+
filePath: string;
|
|
5
|
+
lineRange?: {
|
|
6
|
+
start: number;
|
|
7
|
+
end: number;
|
|
8
|
+
};
|
|
9
|
+
symbol?: string;
|
|
10
|
+
}
|
|
11
|
+
interface Pattern {
|
|
12
|
+
text: string;
|
|
13
|
+
hash: string;
|
|
14
|
+
kind: 'exact' | 'line' | 'sliding' | 'canary';
|
|
15
|
+
codeRef?: CodeRef;
|
|
16
|
+
}
|
|
17
|
+
export interface LlmEchoStats {
|
|
18
|
+
bytesProcessed: number;
|
|
19
|
+
hits: Array<{
|
|
20
|
+
patternHash: string;
|
|
21
|
+
patternKind: Pattern['kind'];
|
|
22
|
+
codeRef?: CodeRef;
|
|
23
|
+
replacement: string;
|
|
24
|
+
atOffset: number;
|
|
25
|
+
}>;
|
|
26
|
+
redactedBytes: number;
|
|
27
|
+
}
|
|
28
|
+
export declare class LLMEchoOutputStream {
|
|
29
|
+
private readonly maxPatternLength;
|
|
30
|
+
private patterns;
|
|
31
|
+
private buffer;
|
|
32
|
+
private destroyed;
|
|
33
|
+
private bytesProcessed;
|
|
34
|
+
private redactedBytes;
|
|
35
|
+
private hits;
|
|
36
|
+
constructor(maxPatternLength?: number);
|
|
37
|
+
registerSnippet(snippet: string, ref: CodeRef): void;
|
|
38
|
+
registerCanary(canary: string): void;
|
|
39
|
+
write(tokenChunk: string | Buffer): string;
|
|
40
|
+
flush(): string;
|
|
41
|
+
stats(): LlmEchoStats;
|
|
42
|
+
destroy(): void;
|
|
43
|
+
private addPattern;
|
|
44
|
+
private sortPatterns;
|
|
45
|
+
private redact;
|
|
46
|
+
private assertActive;
|
|
47
|
+
}
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=llmEchoOutputFilter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llmEchoOutputFilter.d.ts","sourceRoot":"","sources":["../../../src/services/security/llmEchoOutputFilter.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,KAAK,CAAC;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAcD,qBAAa,mBAAmB;IAQlB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAP7C,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,IAAI,CAA4B;gBAEX,gBAAgB,SAAO;IAEpD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI;IAcpD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMpC,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAiB1C,KAAK,IAAI,MAAM;IAOf,KAAK,IAAI,YAAY;IAQrB,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,MAAM;IAqBd,OAAO,CAAC,YAAY;CAKrB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LLMEchoOutputStream = void 0;
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
function hash(text) {
|
|
9
|
+
return (0, crypto_1.createHash)('sha256').update(text).digest('hex').slice(0, 12);
|
|
10
|
+
}
|
|
11
|
+
function replacementFor(pattern) {
|
|
12
|
+
if (pattern.kind === 'canary' || !pattern.codeRef)
|
|
13
|
+
return '[REDACTED_CODE_ECHO]';
|
|
14
|
+
const loc = pattern.codeRef.lineRange
|
|
15
|
+
? `${pattern.codeRef.filePath}:${pattern.codeRef.lineRange.start}-${pattern.codeRef.lineRange.end}`
|
|
16
|
+
: pattern.codeRef.filePath;
|
|
17
|
+
return `[Code: ${pattern.codeRef.symbol ?? pattern.codeRef.chunkId} @ ${loc}]`;
|
|
18
|
+
}
|
|
19
|
+
class LLMEchoOutputStream {
|
|
20
|
+
constructor(maxPatternLength = 2048) {
|
|
21
|
+
this.maxPatternLength = maxPatternLength;
|
|
22
|
+
this.patterns = [];
|
|
23
|
+
this.buffer = '';
|
|
24
|
+
this.destroyed = false;
|
|
25
|
+
this.bytesProcessed = 0;
|
|
26
|
+
this.redactedBytes = 0;
|
|
27
|
+
this.hits = [];
|
|
28
|
+
}
|
|
29
|
+
registerSnippet(snippet, ref) {
|
|
30
|
+
this.assertActive();
|
|
31
|
+
this.addPattern(snippet, 'exact', ref);
|
|
32
|
+
for (const line of snippet.split(/\r?\n/)) {
|
|
33
|
+
const trimmed = line.trim();
|
|
34
|
+
if (trimmed.length >= 8)
|
|
35
|
+
this.addPattern(trimmed, 'line', ref);
|
|
36
|
+
}
|
|
37
|
+
for (let i = 0; i < snippet.length; i += 80) {
|
|
38
|
+
const window = snippet.slice(i, i + 80).trim();
|
|
39
|
+
if (window.length >= 16)
|
|
40
|
+
this.addPattern(window, 'sliding', ref);
|
|
41
|
+
}
|
|
42
|
+
this.sortPatterns();
|
|
43
|
+
}
|
|
44
|
+
registerCanary(canary) {
|
|
45
|
+
this.assertActive();
|
|
46
|
+
this.addPattern(canary, 'canary');
|
|
47
|
+
this.sortPatterns();
|
|
48
|
+
}
|
|
49
|
+
write(tokenChunk) {
|
|
50
|
+
this.assertActive();
|
|
51
|
+
const text = Buffer.isBuffer(tokenChunk) ? tokenChunk.toString('utf-8') : tokenChunk;
|
|
52
|
+
this.bytesProcessed += Buffer.byteLength(text);
|
|
53
|
+
this.buffer += text;
|
|
54
|
+
const redacted = this.redact(this.buffer);
|
|
55
|
+
const safeWindow = Math.max(0, this.maxPatternLength - 1);
|
|
56
|
+
if (redacted.length <= safeWindow) {
|
|
57
|
+
this.buffer = redacted;
|
|
58
|
+
return '';
|
|
59
|
+
}
|
|
60
|
+
const emitLength = redacted.length - safeWindow;
|
|
61
|
+
const out = redacted.slice(0, emitLength);
|
|
62
|
+
this.buffer = redacted.slice(emitLength);
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
flush() {
|
|
66
|
+
this.assertActive();
|
|
67
|
+
const out = this.redact(this.buffer);
|
|
68
|
+
this.buffer = '';
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
stats() {
|
|
72
|
+
return {
|
|
73
|
+
bytesProcessed: this.bytesProcessed,
|
|
74
|
+
hits: [...this.hits],
|
|
75
|
+
redactedBytes: this.redactedBytes,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
destroy() {
|
|
79
|
+
this.buffer = '';
|
|
80
|
+
this.patterns = [];
|
|
81
|
+
this.destroyed = true;
|
|
82
|
+
}
|
|
83
|
+
addPattern(text, kind, codeRef) {
|
|
84
|
+
const normalized = text.trim();
|
|
85
|
+
if (!normalized)
|
|
86
|
+
return;
|
|
87
|
+
this.patterns.push({
|
|
88
|
+
text: normalized,
|
|
89
|
+
hash: hash(normalized),
|
|
90
|
+
kind,
|
|
91
|
+
...(codeRef ? { codeRef } : {}),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
sortPatterns() {
|
|
95
|
+
const seen = new Set();
|
|
96
|
+
this.patterns = this.patterns
|
|
97
|
+
.filter(pattern => {
|
|
98
|
+
const key = `${pattern.kind}:${pattern.hash}`;
|
|
99
|
+
if (seen.has(key))
|
|
100
|
+
return false;
|
|
101
|
+
seen.add(key);
|
|
102
|
+
return true;
|
|
103
|
+
})
|
|
104
|
+
.sort((a, b) => b.text.length - a.text.length);
|
|
105
|
+
}
|
|
106
|
+
redact(input) {
|
|
107
|
+
let output = input;
|
|
108
|
+
for (const pattern of this.patterns) {
|
|
109
|
+
let index = output.indexOf(pattern.text);
|
|
110
|
+
while (index >= 0) {
|
|
111
|
+
const replacement = replacementFor(pattern);
|
|
112
|
+
this.hits.push({
|
|
113
|
+
patternHash: pattern.hash,
|
|
114
|
+
patternKind: pattern.kind,
|
|
115
|
+
...(pattern.codeRef ? { codeRef: pattern.codeRef } : {}),
|
|
116
|
+
replacement,
|
|
117
|
+
atOffset: index,
|
|
118
|
+
});
|
|
119
|
+
this.redactedBytes += Buffer.byteLength(pattern.text);
|
|
120
|
+
output = output.slice(0, index) + replacement + output.slice(index + pattern.text.length);
|
|
121
|
+
index = output.indexOf(pattern.text, index + replacement.length);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return output;
|
|
125
|
+
}
|
|
126
|
+
assertActive() {
|
|
127
|
+
if (this.destroyed) {
|
|
128
|
+
throw new Error('LLMEchoOutputStream has been destroyed');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.LLMEchoOutputStream = LLMEchoOutputStream;
|
|
133
|
+
//# sourceMappingURL=llmEchoOutputFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llmEchoOutputFilter.js","sourceRoot":"","sources":["../../../src/services/security/llmEchoOutputFilter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretPatterns.d.ts","sourceRoot":"","sources":["../../../src/services/security/secretPatterns.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAU5D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.redactSecrets = redactSecrets;
|
|
7
|
+
const SECRET_PATTERNS = [
|
|
8
|
+
/(api[_-]?key|secret|password|token)\s*[:=]\s*['"]([^'"]{8,})['"]/gi,
|
|
9
|
+
/https?:\/\/[a-z0-9.-]+\.(?:internal|corp|local)\/[\w/-]+/gi,
|
|
10
|
+
/\b[A-Za-z0-9+/]{40,}={0,2}\b/g,
|
|
11
|
+
];
|
|
12
|
+
function redactSecrets(input) {
|
|
13
|
+
let text = input;
|
|
14
|
+
let redactedCount = 0;
|
|
15
|
+
for (const pattern of SECRET_PATTERNS) {
|
|
16
|
+
text = text.replace(pattern, () => {
|
|
17
|
+
redactedCount++;
|
|
18
|
+
return '[REDACTED_SECRET]';
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return { text, redactedCount };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=secretPatterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretPatterns.js","sourceRoot":"","sources":["../../../src/services/security/secretPatterns.ts"],"names":[],"mappings":";AAAA,6CAA6C;AAC7C,0CAA0C;AAC1C,+DAA+D;;AAa/D,sCAUC;AArBD,MAAM,eAAe,GAAa;IAChC,oEAAoE;IACpE,4DAA4D;IAC5D,+BAA+B;CAChC,CAAC;AAOF,SAAgB,aAAa,CAAC,KAAa;IACzC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE;YAChC,aAAa,EAAE,CAAC;YAChB,OAAO,mBAAmB,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAC,IAAI,EAAE,aAAa,EAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface BreakpadFunction {
|
|
2
|
+
address: bigint;
|
|
3
|
+
size: bigint;
|
|
4
|
+
parameterSize: bigint;
|
|
5
|
+
name: string;
|
|
6
|
+
}
|
|
7
|
+
export interface BreakpadModule {
|
|
8
|
+
os?: string;
|
|
9
|
+
arch?: string;
|
|
10
|
+
buildId?: string;
|
|
11
|
+
moduleName?: string;
|
|
12
|
+
functions: BreakpadFunction[];
|
|
13
|
+
}
|
|
14
|
+
export declare function parseBreakpadSym(text: string): BreakpadModule;
|
|
15
|
+
export declare function resolveBreakpadAddress(module: BreakpadModule, address: bigint): {
|
|
16
|
+
func: BreakpadFunction;
|
|
17
|
+
offset: bigint;
|
|
18
|
+
} | undefined;
|
|
19
|
+
//# sourceMappingURL=breakpadSymParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakpadSymParser.d.ts","sourceRoot":"","sources":["../../../src/services/symbol/breakpadSymParser.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAsB7D;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,GACd;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,GAAG,SAAS,CAOtD"}
|