@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.
Files changed (175) hide show
  1. package/.env.example +16 -8
  2. package/dist/agent/core/orchestratorTypes.d.ts +10 -0
  3. package/dist/agent/core/orchestratorTypes.d.ts.map +1 -1
  4. package/dist/agent/core/orchestratorTypes.js.map +1 -1
  5. package/dist/agentOpenAI/openAiRuntime.d.ts.map +1 -1
  6. package/dist/agentOpenAI/openAiRuntime.js +11 -1
  7. package/dist/agentOpenAI/openAiRuntime.js.map +1 -1
  8. package/dist/agentOpenAI/openAiToolAdapter.d.ts.map +1 -1
  9. package/dist/agentOpenAI/openAiToolAdapter.js +27 -2
  10. package/dist/agentOpenAI/openAiToolAdapter.js.map +1 -1
  11. package/dist/agentv3/claudeMcpServer.d.ts +15 -1
  12. package/dist/agentv3/claudeMcpServer.d.ts.map +1 -1
  13. package/dist/agentv3/claudeMcpServer.js +311 -5
  14. package/dist/agentv3/claudeMcpServer.js.map +1 -1
  15. package/dist/agentv3/claudeRuntime.d.ts.map +1 -1
  16. package/dist/agentv3/claudeRuntime.js +17 -0
  17. package/dist/agentv3/claudeRuntime.js.map +1 -1
  18. package/dist/agentv3/claudeSystemPrompt.d.ts.map +1 -1
  19. package/dist/agentv3/claudeSystemPrompt.js +9 -0
  20. package/dist/agentv3/claudeSystemPrompt.js.map +1 -1
  21. package/dist/agentv3/mcpToolRegistry.d.ts +14 -2
  22. package/dist/agentv3/mcpToolRegistry.d.ts.map +1 -1
  23. package/dist/agentv3/mcpToolRegistry.js +25 -6
  24. package/dist/agentv3/mcpToolRegistry.js.map +1 -1
  25. package/dist/agentv3/sessionStateSnapshot.d.ts +18 -0
  26. package/dist/agentv3/sessionStateSnapshot.d.ts.map +1 -1
  27. package/dist/agentv3/types.d.ts +5 -0
  28. package/dist/agentv3/types.d.ts.map +1 -1
  29. package/dist/agentv3/types.js.map +1 -1
  30. package/dist/cli-user/bin.js +99 -1
  31. package/dist/cli-user/bin.js.map +1 -1
  32. package/dist/cli-user/commands/analyze.d.ts +3 -0
  33. package/dist/cli-user/commands/analyze.d.ts.map +1 -1
  34. package/dist/cli-user/commands/analyze.js +2 -0
  35. package/dist/cli-user/commands/analyze.js.map +1 -1
  36. package/dist/cli-user/commands/codebase.d.ts +29 -0
  37. package/dist/cli-user/commands/codebase.d.ts.map +1 -0
  38. package/dist/cli-user/commands/codebase.js +152 -0
  39. package/dist/cli-user/commands/codebase.js.map +1 -0
  40. package/dist/cli-user/commands/config.d.ts.map +1 -1
  41. package/dist/cli-user/commands/config.js +4 -1
  42. package/dist/cli-user/commands/config.js.map +1 -1
  43. package/dist/cli-user/services/cliAnalyzeService.d.ts +3 -0
  44. package/dist/cli-user/services/cliAnalyzeService.d.ts.map +1 -1
  45. package/dist/cli-user/services/cliAnalyzeService.js +116 -29
  46. package/dist/cli-user/services/cliAnalyzeService.js.map +1 -1
  47. package/dist/cli-user/services/turnRunner.d.ts +3 -0
  48. package/dist/cli-user/services/turnRunner.d.ts.map +1 -1
  49. package/dist/cli-user/services/turnRunner.js +6 -0
  50. package/dist/cli-user/services/turnRunner.js.map +1 -1
  51. package/dist/cli-user/types.d.ts +5 -0
  52. package/dist/cli-user/types.d.ts.map +1 -1
  53. package/dist/routes/agentRoutes.d.ts.map +1 -1
  54. package/dist/routes/agentRoutes.js +4 -0
  55. package/dist/routes/agentRoutes.js.map +1 -1
  56. package/dist/routes/ragAdminRoutes.d.ts +13 -24
  57. package/dist/routes/ragAdminRoutes.d.ts.map +1 -1
  58. package/dist/routes/ragAdminRoutes.js +266 -11
  59. package/dist/routes/ragAdminRoutes.js.map +1 -1
  60. package/dist/scripts/verifyAgentSseScrolling.js +119 -3
  61. package/dist/scripts/verifyAgentSseScrolling.js.map +1 -1
  62. package/dist/services/aospKnowledgeIngester.d.ts +7 -0
  63. package/dist/services/aospKnowledgeIngester.d.ts.map +1 -1
  64. package/dist/services/aospKnowledgeIngester.js +19 -7
  65. package/dist/services/aospKnowledgeIngester.js.map +1 -1
  66. package/dist/services/auth/codebaseScopes.d.ts +6 -0
  67. package/dist/services/auth/codebaseScopes.d.ts.map +1 -0
  68. package/dist/services/auth/codebaseScopes.js +23 -0
  69. package/dist/services/auth/codebaseScopes.js.map +1 -0
  70. package/dist/services/codebase/codeAwareFeature.d.ts +4 -0
  71. package/dist/services/codebase/codeAwareFeature.d.ts.map +1 -0
  72. package/dist/services/codebase/codeAwareFeature.js +18 -0
  73. package/dist/services/codebase/codeAwareFeature.js.map +1 -0
  74. package/dist/services/codebase/codeLookupLedger.d.ts +37 -0
  75. package/dist/services/codebase/codeLookupLedger.d.ts.map +1 -0
  76. package/dist/services/codebase/codeLookupLedger.js +126 -0
  77. package/dist/services/codebase/codeLookupLedger.js.map +1 -0
  78. package/dist/services/codebase/codebaseRegistry.d.ts +76 -0
  79. package/dist/services/codebase/codebaseRegistry.d.ts.map +1 -0
  80. package/dist/services/codebase/codebaseRegistry.js +164 -0
  81. package/dist/services/codebase/codebaseRegistry.js.map +1 -0
  82. package/dist/services/codebase/defaultCodebaseServices.d.ts +5 -0
  83. package/dist/services/codebase/defaultCodebaseServices.d.ts.map +1 -0
  84. package/dist/services/codebase/defaultCodebaseServices.js +21 -0
  85. package/dist/services/codebase/defaultCodebaseServices.js.map +1 -0
  86. package/dist/services/codebase/patchProposer.d.ts +44 -0
  87. package/dist/services/codebase/patchProposer.d.ts.map +1 -0
  88. package/dist/services/codebase/patchProposer.js +163 -0
  89. package/dist/services/codebase/patchProposer.js.map +1 -0
  90. package/dist/services/codebase/pathSecurityGate.d.ts +33 -0
  91. package/dist/services/codebase/pathSecurityGate.d.ts.map +1 -0
  92. package/dist/services/codebase/pathSecurityGate.js +214 -0
  93. package/dist/services/codebase/pathSecurityGate.js.map +1 -0
  94. package/dist/services/htmlReportGenerator.d.ts +2 -0
  95. package/dist/services/htmlReportGenerator.d.ts.map +1 -1
  96. package/dist/services/htmlReportGenerator.js +67 -0
  97. package/dist/services/htmlReportGenerator.js.map +1 -1
  98. package/dist/services/persistAgentSession.d.ts.map +1 -1
  99. package/dist/services/persistAgentSession.js +19 -0
  100. package/dist/services/persistAgentSession.js.map +1 -1
  101. package/dist/services/rag/aospSourceIngester.d.ts +26 -0
  102. package/dist/services/rag/aospSourceIngester.d.ts.map +1 -0
  103. package/dist/services/rag/aospSourceIngester.js +143 -0
  104. package/dist/services/rag/aospSourceIngester.js.map +1 -0
  105. package/dist/services/rag/appSourceIngester.d.ts +37 -0
  106. package/dist/services/rag/appSourceIngester.d.ts.map +1 -0
  107. package/dist/services/rag/appSourceIngester.js +165 -0
  108. package/dist/services/rag/appSourceIngester.js.map +1 -0
  109. package/dist/services/rag/baseIngester.d.ts +18 -0
  110. package/dist/services/rag/baseIngester.d.ts.map +1 -0
  111. package/dist/services/rag/baseIngester.js +197 -0
  112. package/dist/services/rag/baseIngester.js.map +1 -0
  113. package/dist/services/rag/kernelSourceIngester.d.ts +35 -0
  114. package/dist/services/rag/kernelSourceIngester.d.ts.map +1 -0
  115. package/dist/services/rag/kernelSourceIngester.js +170 -0
  116. package/dist/services/rag/kernelSourceIngester.js.map +1 -0
  117. package/dist/services/rag/lookupResponseFilter.d.ts +42 -0
  118. package/dist/services/rag/lookupResponseFilter.d.ts.map +1 -0
  119. package/dist/services/rag/lookupResponseFilter.js +192 -0
  120. package/dist/services/rag/lookupResponseFilter.js.map +1 -0
  121. package/dist/services/rag/sessionToolResultRegistry.d.ts +25 -0
  122. package/dist/services/rag/sessionToolResultRegistry.d.ts.map +1 -0
  123. package/dist/services/rag/sessionToolResultRegistry.js +57 -0
  124. package/dist/services/rag/sessionToolResultRegistry.js.map +1 -0
  125. package/dist/services/rag/toolResultProjectionFilter.d.ts +18 -0
  126. package/dist/services/rag/toolResultProjectionFilter.d.ts.map +1 -0
  127. package/dist/services/rag/toolResultProjectionFilter.js +33 -0
  128. package/dist/services/rag/toolResultProjectionFilter.js.map +1 -0
  129. package/dist/services/ragStore.d.ts +8 -0
  130. package/dist/services/ragStore.d.ts.map +1 -1
  131. package/dist/services/ragStore.js +77 -8
  132. package/dist/services/ragStore.js.map +1 -1
  133. package/dist/services/rbac.d.ts +1 -1
  134. package/dist/services/rbac.d.ts.map +1 -1
  135. package/dist/services/rbac.js +6 -0
  136. package/dist/services/rbac.js.map +1 -1
  137. package/dist/services/security/codeAwareOutputRegistry.d.ts +6 -0
  138. package/dist/services/security/codeAwareOutputRegistry.d.ts.map +1 -0
  139. package/dist/services/security/codeAwareOutputRegistry.js +55 -0
  140. package/dist/services/security/codeAwareOutputRegistry.js.map +1 -0
  141. package/dist/services/security/llmEchoOutputFilter.d.ts +49 -0
  142. package/dist/services/security/llmEchoOutputFilter.d.ts.map +1 -0
  143. package/dist/services/security/llmEchoOutputFilter.js +133 -0
  144. package/dist/services/security/llmEchoOutputFilter.js.map +1 -0
  145. package/dist/services/security/secretPatterns.d.ts +6 -0
  146. package/dist/services/security/secretPatterns.d.ts.map +1 -0
  147. package/dist/services/security/secretPatterns.js +23 -0
  148. package/dist/services/security/secretPatterns.js.map +1 -0
  149. package/dist/services/symbol/breakpadSymParser.d.ts +19 -0
  150. package/dist/services/symbol/breakpadSymParser.d.ts.map +1 -0
  151. package/dist/services/symbol/breakpadSymParser.js +40 -0
  152. package/dist/services/symbol/breakpadSymParser.js.map +1 -0
  153. package/dist/services/symbol/kallsymsParser.d.ts +12 -0
  154. package/dist/services/symbol/kallsymsParser.d.ts.map +1 -0
  155. package/dist/services/symbol/kallsymsParser.js +41 -0
  156. package/dist/services/symbol/kallsymsParser.js.map +1 -0
  157. package/dist/services/symbol/r8MappingParser.d.ts +40 -0
  158. package/dist/services/symbol/r8MappingParser.d.ts.map +1 -0
  159. package/dist/services/symbol/r8MappingParser.js +99 -0
  160. package/dist/services/symbol/r8MappingParser.js.map +1 -0
  161. package/dist/services/symbol/symbolResolver.d.ts +59 -0
  162. package/dist/services/symbol/symbolResolver.d.ts.map +1 -0
  163. package/dist/services/symbol/symbolResolver.js +147 -0
  164. package/dist/services/symbol/symbolResolver.js.map +1 -0
  165. package/dist/services/symbol/traceSymbolContext.d.ts +14 -0
  166. package/dist/services/symbol/traceSymbolContext.d.ts.map +1 -0
  167. package/dist/services/symbol/traceSymbolContext.js +45 -0
  168. package/dist/services/symbol/traceSymbolContext.js.map +1 -0
  169. package/dist/types/sparkContracts.d.ts +31 -3
  170. package/dist/types/sparkContracts.d.ts.map +1 -1
  171. package/dist/types/sparkContracts.js.map +1 -1
  172. package/package.json +12 -5
  173. package/skills/composite/code_pinpoint.skill.yaml +111 -0
  174. package/strategies/code-aware.template.md +37 -0
  175. package/strategies/prompt-methodology.template.md +2 -0
@@ -0,0 +1,40 @@
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.parseBreakpadSym = parseBreakpadSym;
7
+ exports.resolveBreakpadAddress = resolveBreakpadAddress;
8
+ function parseBreakpadSym(text) {
9
+ const module = { functions: [] };
10
+ for (const line of text.replace(/\r\n?/g, '\n').split('\n')) {
11
+ const moduleMatch = line.match(/^MODULE\s+(\S+)\s+(\S+)\s+(\S+)\s+(.+)$/);
12
+ if (moduleMatch) {
13
+ module.os = moduleMatch[1];
14
+ module.arch = moduleMatch[2];
15
+ module.buildId = moduleMatch[3];
16
+ module.moduleName = moduleMatch[4].trim();
17
+ continue;
18
+ }
19
+ const funcMatch = line.match(/^FUNC\s+([0-9a-fA-F]+)\s+([0-9a-fA-F]+)\s+([0-9a-fA-F]+)\s+(.+)$/);
20
+ if (!funcMatch)
21
+ continue;
22
+ module.functions.push({
23
+ address: BigInt(`0x${funcMatch[1]}`),
24
+ size: BigInt(`0x${funcMatch[2]}`),
25
+ parameterSize: BigInt(`0x${funcMatch[3]}`),
26
+ name: funcMatch[4].trim(),
27
+ });
28
+ }
29
+ module.functions.sort((a, b) => a.address < b.address ? -1 : a.address > b.address ? 1 : 0);
30
+ return module;
31
+ }
32
+ function resolveBreakpadAddress(module, address) {
33
+ for (const func of module.functions) {
34
+ if (address >= func.address && address < func.address + func.size) {
35
+ return { func, offset: address - func.address };
36
+ }
37
+ }
38
+ return undefined;
39
+ }
40
+ //# sourceMappingURL=breakpadSymParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breakpadSymParser.js","sourceRoot":"","sources":["../../../src/services/symbol/breakpadSymParser.ts"],"names":[],"mappings":";AAAA,6CAA6C;AAC7C,0CAA0C;AAC1C,+DAA+D;;AAiB/D,4CAsBC;AAED,wDAUC;AAlCD,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAmB,EAAC,SAAS,EAAE,EAAE,EAAC,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC1E,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACjG,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,IAAI,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,aAAa,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,sBAAsB,CACpC,MAAsB,EACtB,OAAe;IAEf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACpC,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAClE,OAAO,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface KallsymsEntry {
2
+ address: bigint;
3
+ type: string;
4
+ symbol: string;
5
+ module?: string;
6
+ }
7
+ export declare function parseKallsyms(text: string): KallsymsEntry[];
8
+ export declare function resolveKallsymsAddress(entries: readonly KallsymsEntry[], address: bigint): {
9
+ entry: KallsymsEntry;
10
+ offset: bigint;
11
+ } | undefined;
12
+ //# sourceMappingURL=kallsymsParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kallsymsParser.d.ts","sourceRoot":"","sources":["../../../src/services/symbol/kallsymsParser.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAc3D;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,SAAS,aAAa,EAAE,EACjC,OAAO,EAAE,MAAM,GACd;IAAC,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,GAAG,SAAS,CAepD"}
@@ -0,0 +1,41 @@
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.parseKallsyms = parseKallsyms;
7
+ exports.resolveKallsymsAddress = resolveKallsymsAddress;
8
+ function parseKallsyms(text) {
9
+ const entries = [];
10
+ for (const line of text.replace(/\r\n?/g, '\n').split('\n')) {
11
+ const match = line.trim().match(/^([0-9a-fA-F]+)\s+([A-Za-z])\s+(\S+)(?:\s+\[([^\]]+)\])?/);
12
+ if (!match)
13
+ continue;
14
+ entries.push({
15
+ address: BigInt(`0x${match[1]}`),
16
+ type: match[2],
17
+ symbol: match[3],
18
+ ...(match[4] ? { module: match[4] } : {}),
19
+ });
20
+ }
21
+ entries.sort((a, b) => a.address < b.address ? -1 : a.address > b.address ? 1 : 0);
22
+ return entries;
23
+ }
24
+ function resolveKallsymsAddress(entries, address) {
25
+ let lo = 0;
26
+ let hi = entries.length - 1;
27
+ let best;
28
+ while (lo <= hi) {
29
+ const mid = Math.floor((lo + hi) / 2);
30
+ const entry = entries[mid];
31
+ if (entry.address <= address) {
32
+ best = entry;
33
+ lo = mid + 1;
34
+ }
35
+ else {
36
+ hi = mid - 1;
37
+ }
38
+ }
39
+ return best ? { entry: best, offset: address - best.address } : undefined;
40
+ }
41
+ //# sourceMappingURL=kallsymsParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kallsymsParser.js","sourceRoot":"","sources":["../../../src/services/symbol/kallsymsParser.ts"],"names":[],"mappings":";AAAA,6CAA6C;AAC7C,0CAA0C;AAC1C,+DAA+D;;AAS/D,sCAcC;AAED,wDAkBC;AAlCD,SAAgB,aAAa,CAAC,IAAY;IACxC,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC5F,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,OAAO,CAAC,IAAI,CAAC;YACX,OAAO,EAAE,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAChB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,sBAAsB,CACpC,OAAiC,EACjC,OAAe;IAEf,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,IAAI,IAA+B,CAAC;IACpC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,GAAG,KAAK,CAAC;YACb,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACf,CAAC;aAAM,CAAC;YACN,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,40 @@
1
+ export interface R8ClassMapping {
2
+ originalClass: string;
3
+ obfuscatedClass: string;
4
+ methods: R8MethodMapping[];
5
+ }
6
+ export interface R8MethodMapping {
7
+ originalName: string;
8
+ obfuscatedName: string;
9
+ originalClass: string;
10
+ obfuscatedClass: string;
11
+ originalLineRange?: {
12
+ start: number;
13
+ end: number;
14
+ };
15
+ obfuscatedLineRange?: {
16
+ start: number;
17
+ end: number;
18
+ };
19
+ signature?: string;
20
+ }
21
+ export interface R8RetraceResult {
22
+ success: boolean;
23
+ originalClass?: string;
24
+ originalName?: string;
25
+ originalSymbol?: string;
26
+ lineRange?: {
27
+ start: number;
28
+ end: number;
29
+ };
30
+ inlineFrames: R8MethodMapping[];
31
+ degradedReason?: 'no_mapping' | 'class_only';
32
+ }
33
+ export declare function parseR8Mapping(text: string): R8ClassMapping[];
34
+ export declare function retraceR8Symbol(mappings: readonly R8ClassMapping[], opts: {
35
+ obfuscatedClass?: string;
36
+ obfuscatedMethod?: string;
37
+ obfuscatedSymbol?: string;
38
+ line?: number;
39
+ }): R8RetraceResult;
40
+ //# sourceMappingURL=r8MappingParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"r8MappingParser.d.ts","sourceRoot":"","sources":["../../../src/services/symbol/r8MappingParser.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,CAAC;IACjD,mBAAmB,CAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,CAAC;IACzC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;CAC9C;AASD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,CAqC7D;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,IAAI,EAAE;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,GACpG,eAAe,CAuCjB"}
@@ -0,0 +1,99 @@
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.parseR8Mapping = parseR8Mapping;
7
+ exports.retraceR8Symbol = retraceR8Symbol;
8
+ function parseLineRange(value) {
9
+ if (!value)
10
+ return undefined;
11
+ const parts = value.split(':').map(part => Number(part));
12
+ if (parts.length !== 2 || parts.some(part => !Number.isFinite(part)))
13
+ return undefined;
14
+ return { start: parts[0], end: parts[1] };
15
+ }
16
+ function parseR8Mapping(text) {
17
+ const classes = [];
18
+ let current;
19
+ for (const rawLine of text.replace(/\r\n?/g, '\n').split('\n')) {
20
+ if (!rawLine.trim() || rawLine.trim().startsWith('#'))
21
+ continue;
22
+ const classMatch = rawLine.match(/^(\S.*?)\s+->\s+([A-Za-z0-9_.$]+):\s*$/);
23
+ if (classMatch) {
24
+ current = {
25
+ originalClass: classMatch[1].trim(),
26
+ obfuscatedClass: classMatch[2].trim(),
27
+ methods: [],
28
+ };
29
+ classes.push(current);
30
+ continue;
31
+ }
32
+ if (!current)
33
+ continue;
34
+ const line = rawLine.trim();
35
+ const arrow = line.match(/^(.*?)\s+->\s+([A-Za-z_$][A-Za-z0-9_$]*)$/);
36
+ if (!arrow)
37
+ continue;
38
+ const lhs = arrow[1].trim();
39
+ const obfuscatedName = arrow[2].trim();
40
+ const ranged = lhs.match(/^(?:(\d+:\d+):)?(.+?)(?::(\d+:\d+))?$/);
41
+ if (!ranged)
42
+ continue;
43
+ const signature = ranged[2].trim();
44
+ const nameMatch = signature.match(/([A-Za-z_$][A-Za-z0-9_$<>]*)\s*\([^)]*\)\s*$/);
45
+ if (!nameMatch)
46
+ continue;
47
+ current.methods.push({
48
+ originalName: nameMatch[1],
49
+ obfuscatedName,
50
+ originalClass: current.originalClass,
51
+ obfuscatedClass: current.obfuscatedClass,
52
+ ...(parseLineRange(ranged[3]) ? { originalLineRange: parseLineRange(ranged[3]) } : {}),
53
+ ...(parseLineRange(ranged[1]) ? { obfuscatedLineRange: parseLineRange(ranged[1]) } : {}),
54
+ signature,
55
+ });
56
+ }
57
+ return classes;
58
+ }
59
+ function retraceR8Symbol(mappings, opts) {
60
+ const className = opts.obfuscatedClass ?? opts.obfuscatedSymbol?.split('.').slice(0, -1).join('.');
61
+ const methodName = opts.obfuscatedMethod ?? opts.obfuscatedSymbol?.split('.').pop();
62
+ const classMapping = mappings.find(mapping => mapping.obfuscatedClass === className);
63
+ if (!classMapping)
64
+ return { success: false, inlineFrames: [], degradedReason: 'no_mapping' };
65
+ if (!methodName) {
66
+ return {
67
+ success: true,
68
+ originalClass: classMapping.originalClass,
69
+ originalSymbol: classMapping.originalClass,
70
+ inlineFrames: [],
71
+ degradedReason: 'class_only',
72
+ };
73
+ }
74
+ const candidates = classMapping.methods.filter(method => method.obfuscatedName === methodName);
75
+ const byLine = opts.line
76
+ ? candidates.filter(method => !method.obfuscatedLineRange ||
77
+ (opts.line >= method.obfuscatedLineRange.start && opts.line <= method.obfuscatedLineRange.end))
78
+ : candidates;
79
+ const selected = byLine[0] ?? candidates[0];
80
+ if (!selected) {
81
+ return {
82
+ success: true,
83
+ originalClass: classMapping.originalClass,
84
+ originalName: methodName,
85
+ originalSymbol: `${classMapping.originalClass}.${methodName}`,
86
+ inlineFrames: [],
87
+ degradedReason: 'class_only',
88
+ };
89
+ }
90
+ return {
91
+ success: true,
92
+ originalClass: selected.originalClass,
93
+ originalName: selected.originalName,
94
+ originalSymbol: `${selected.originalClass}.${selected.originalName}`,
95
+ ...(selected.originalLineRange ? { lineRange: selected.originalLineRange } : {}),
96
+ inlineFrames: byLine.length > 0 ? byLine : [selected],
97
+ };
98
+ }
99
+ //# sourceMappingURL=r8MappingParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"r8MappingParser.js","sourceRoot":"","sources":["../../../src/services/symbol/r8MappingParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { RagChunk } from '../../types/sparkContracts';
2
+ import type { RagStore } from '../ragStore';
3
+ export interface ResolveAppSymbolOptions {
4
+ symbol: string;
5
+ codebaseId?: string;
6
+ buildId?: string;
7
+ filePath?: string;
8
+ r8MappingText?: string;
9
+ obfuscatedClass?: string;
10
+ obfuscatedMethod?: string;
11
+ line?: number;
12
+ topK?: number;
13
+ }
14
+ export interface ResolveKernelSymbolOptions {
15
+ symbol?: string;
16
+ address?: string;
17
+ codebaseId?: string;
18
+ vendor?: string;
19
+ buildId?: string;
20
+ kallsymsText?: string;
21
+ systemMapText?: string;
22
+ topK?: number;
23
+ }
24
+ export interface ResolveNativeSymbolOptions {
25
+ symbol?: string;
26
+ address?: string;
27
+ codebaseId?: string;
28
+ buildId?: string;
29
+ breakpadSymText?: string;
30
+ topK?: number;
31
+ }
32
+ export interface ResolvedSymbolCandidate {
33
+ chunkId: string;
34
+ codebaseId?: string;
35
+ filePath?: string;
36
+ lineRange?: {
37
+ start: number;
38
+ end: number;
39
+ };
40
+ symbol?: string;
41
+ language?: RagChunk['language'];
42
+ confidence: 'exact' | 'file' | 'text';
43
+ }
44
+ export interface ResolveAppSymbolResult {
45
+ success: boolean;
46
+ query: string;
47
+ candidates: ResolvedSymbolCandidate[];
48
+ degradedReason?: 'missing_build_id' | 'no_match' | 'symbol_only_low_confidence';
49
+ }
50
+ export type ResolveSymbolResult = ResolveAppSymbolResult;
51
+ export declare class SymbolResolver {
52
+ private readonly store;
53
+ constructor(store: RagStore);
54
+ resolveApp(opts: ResolveAppSymbolOptions): ResolveAppSymbolResult;
55
+ resolveKernel(opts: ResolveKernelSymbolOptions): ResolveSymbolResult;
56
+ resolveNative(opts: ResolveNativeSymbolOptions): ResolveSymbolResult;
57
+ private resolveSourceKind;
58
+ }
59
+ //# sourceMappingURL=symbolResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolResolver.d.ts","sourceRoot":"","sources":["../../../src/services/symbol/symbolResolver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAK1C,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAC,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAChC,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,uBAAuB,EAAE,CAAC;IACtC,cAAc,CAAC,EAAE,kBAAkB,GAAG,UAAU,GAAG,4BAA4B,CAAC;CACjF;AAED,MAAM,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAczD,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,QAAQ;IAE5C,UAAU,CAAC,IAAI,EAAE,uBAAuB,GAAG,sBAAsB;IAgEjE,aAAa,CAAC,IAAI,EAAE,0BAA0B,GAAG,mBAAmB;IAkBpE,aAAa,CAAC,IAAI,EAAE,0BAA0B,GAAG,mBAAmB;IAiBpE,OAAO,CAAC,iBAAiB;CA2B1B"}
@@ -0,0 +1,147 @@
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.SymbolResolver = void 0;
7
+ const breakpadSymParser_1 = require("./breakpadSymParser");
8
+ const kallsymsParser_1 = require("./kallsymsParser");
9
+ const r8MappingParser_1 = require("./r8MappingParser");
10
+ function toCandidate(chunk, confidence) {
11
+ return {
12
+ chunkId: chunk.chunkId,
13
+ ...(chunk.codebaseId ? { codebaseId: chunk.codebaseId } : {}),
14
+ ...(chunk.filePath ? { filePath: chunk.filePath } : {}),
15
+ ...(chunk.lineRange ? { lineRange: chunk.lineRange } : {}),
16
+ ...(chunk.symbol ? { symbol: chunk.symbol } : {}),
17
+ ...(chunk.language ? { language: chunk.language } : {}),
18
+ confidence,
19
+ };
20
+ }
21
+ class SymbolResolver {
22
+ constructor(store) {
23
+ this.store = store;
24
+ }
25
+ resolveApp(opts) {
26
+ const retraced = opts.r8MappingText
27
+ ? (0, r8MappingParser_1.retraceR8Symbol)((0, r8MappingParser_1.parseR8Mapping)(opts.r8MappingText), {
28
+ obfuscatedSymbol: opts.symbol,
29
+ obfuscatedClass: opts.obfuscatedClass,
30
+ obfuscatedMethod: opts.obfuscatedMethod,
31
+ line: opts.line,
32
+ })
33
+ : undefined;
34
+ const querySymbol = retraced?.originalSymbol ?? opts.symbol;
35
+ const symbolName = retraced?.originalName ?? querySymbol.split('.').pop() ?? querySymbol;
36
+ const topK = opts.topK ?? 5;
37
+ const base = {
38
+ kinds: ['app_source'],
39
+ topK,
40
+ ...(opts.codebaseId ? { codebaseIds: [opts.codebaseId] } : {}),
41
+ ...(opts.buildId ? { buildId: opts.buildId } : {}),
42
+ };
43
+ const exact = this.store.search(querySymbol, {
44
+ ...base,
45
+ symbolExact: symbolName,
46
+ });
47
+ if (exact.results.length > 0) {
48
+ return {
49
+ success: true,
50
+ query: querySymbol,
51
+ candidates: exact.results
52
+ .filter(hit => hit.chunk)
53
+ .map(hit => toCandidate(hit.chunk, 'exact')),
54
+ degradedReason: opts.buildId ? undefined : 'symbol_only_low_confidence',
55
+ };
56
+ }
57
+ if (opts.filePath) {
58
+ const byFile = this.store.search(querySymbol, {
59
+ ...base,
60
+ filePathExact: opts.filePath,
61
+ });
62
+ if (byFile.results.length > 0) {
63
+ return {
64
+ success: true,
65
+ query: querySymbol,
66
+ candidates: byFile.results
67
+ .filter(hit => hit.chunk)
68
+ .map(hit => toCandidate(hit.chunk, 'file')),
69
+ degradedReason: opts.buildId ? undefined : 'symbol_only_low_confidence',
70
+ };
71
+ }
72
+ }
73
+ const text = this.store.search(querySymbol, base);
74
+ return {
75
+ success: text.results.length > 0,
76
+ query: querySymbol,
77
+ candidates: text.results
78
+ .filter(hit => hit.chunk)
79
+ .map(hit => toCandidate(hit.chunk, 'text')),
80
+ degradedReason: text.results.length > 0
81
+ ? (opts.buildId ? undefined : 'symbol_only_low_confidence')
82
+ : 'no_match',
83
+ };
84
+ }
85
+ resolveKernel(opts) {
86
+ let query = opts.symbol;
87
+ if (!query && opts.address && (opts.kallsymsText || opts.systemMapText)) {
88
+ const parsed = (0, kallsymsParser_1.parseKallsyms)(opts.kallsymsText ?? opts.systemMapText ?? '');
89
+ const resolved = (0, kallsymsParser_1.resolveKallsymsAddress)(parsed, parseAddress(opts.address));
90
+ query = resolved?.entry.symbol;
91
+ }
92
+ if (!query) {
93
+ return { success: false, query: opts.address ?? '', candidates: [], degradedReason: 'no_match' };
94
+ }
95
+ return this.resolveSourceKind(query, 'kernel_source', {
96
+ codebaseId: opts.codebaseId,
97
+ vendor: opts.vendor,
98
+ buildId: opts.buildId,
99
+ topK: opts.topK,
100
+ });
101
+ }
102
+ resolveNative(opts) {
103
+ let query = opts.symbol;
104
+ if (!query && opts.address && opts.breakpadSymText) {
105
+ const module = (0, breakpadSymParser_1.parseBreakpadSym)(opts.breakpadSymText);
106
+ const resolved = (0, breakpadSymParser_1.resolveBreakpadAddress)(module, parseAddress(opts.address));
107
+ query = resolved?.func.name;
108
+ }
109
+ if (!query) {
110
+ return { success: false, query: opts.address ?? '', candidates: [], degradedReason: 'no_match' };
111
+ }
112
+ return this.resolveSourceKind(query, 'aosp', {
113
+ codebaseId: opts.codebaseId,
114
+ buildId: opts.buildId,
115
+ topK: opts.topK,
116
+ });
117
+ }
118
+ resolveSourceKind(symbol, kind, opts) {
119
+ const topK = opts.topK ?? 5;
120
+ const symbolName = symbol.split('::').pop()?.split('.').pop() ?? symbol;
121
+ const base = {
122
+ kinds: [kind],
123
+ topK,
124
+ ...(opts.codebaseId ? { codebaseIds: [opts.codebaseId] } : {}),
125
+ ...(opts.vendor ? { vendor: opts.vendor } : {}),
126
+ ...(opts.buildId ? { buildId: opts.buildId } : {}),
127
+ };
128
+ const exact = this.store.search(symbol, { ...base, symbolExact: symbolName });
129
+ const result = exact.results.length > 0 ? exact : this.store.search(symbol, base);
130
+ return {
131
+ success: result.results.length > 0,
132
+ query: symbol,
133
+ candidates: result.results
134
+ .filter(hit => hit.chunk)
135
+ .map(hit => toCandidate(hit.chunk, exact.results.length > 0 ? 'exact' : 'text')),
136
+ degradedReason: result.results.length > 0
137
+ ? (opts.buildId ? undefined : 'symbol_only_low_confidence')
138
+ : 'no_match',
139
+ };
140
+ }
141
+ }
142
+ exports.SymbolResolver = SymbolResolver;
143
+ function parseAddress(value) {
144
+ const trimmed = value.trim();
145
+ return BigInt(trimmed.startsWith('0x') || trimmed.startsWith('0X') ? trimmed : `0x${trimmed}`);
146
+ }
147
+ //# sourceMappingURL=symbolResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolResolver.js","sourceRoot":"","sources":["../../../src/services/symbol/symbolResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface TraceSymbolFrame {
2
+ module?: string;
3
+ buildId?: string;
4
+ address?: string;
5
+ relativePc?: string;
6
+ symbol?: string;
7
+ }
8
+ export interface TraceSymbolContext {
9
+ frames: TraceSymbolFrame[];
10
+ hasBuildIds: boolean;
11
+ modules: string[];
12
+ }
13
+ export declare function normalizeTraceSymbolRows(rows: readonly Record<string, unknown>[]): TraceSymbolContext;
14
+ //# sourceMappingURL=traceSymbolContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceSymbolContext.d.ts","sourceRoot":"","sources":["../../../src/services/symbol/traceSymbolContext.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,kBAAkB,CAsBrG"}
@@ -0,0 +1,45 @@
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.normalizeTraceSymbolRows = normalizeTraceSymbolRows;
7
+ function normalizeTraceSymbolRows(rows) {
8
+ const frames = [];
9
+ const modules = new Set();
10
+ let hasBuildIds = false;
11
+ for (const row of rows) {
12
+ const module = firstString(row, ['module', 'module_name', 'mapping_name', 'name']);
13
+ const buildId = firstString(row, ['build_id', 'buildId', 'buildid']);
14
+ const address = firstString(row, ['address', 'addr', 'pc']);
15
+ const relativePc = firstString(row, ['relative_pc', 'rel_pc', 'relativePc']);
16
+ const symbol = firstString(row, ['symbol', 'function_name', 'frame_name']);
17
+ if (!module && !buildId && !address && !relativePc && !symbol)
18
+ continue;
19
+ if (module)
20
+ modules.add(module);
21
+ if (buildId)
22
+ hasBuildIds = true;
23
+ frames.push({
24
+ ...(module ? { module } : {}),
25
+ ...(buildId ? { buildId } : {}),
26
+ ...(address ? { address } : {}),
27
+ ...(relativePc ? { relativePc } : {}),
28
+ ...(symbol ? { symbol } : {}),
29
+ });
30
+ }
31
+ return { frames, hasBuildIds, modules: Array.from(modules).sort() };
32
+ }
33
+ function firstString(row, keys) {
34
+ for (const key of keys) {
35
+ const value = row[key];
36
+ if (typeof value === 'string' && value.trim())
37
+ return value.trim();
38
+ if (typeof value === 'number' && Number.isFinite(value))
39
+ return String(value);
40
+ if (typeof value === 'bigint')
41
+ return value.toString();
42
+ }
43
+ return undefined;
44
+ }
45
+ //# sourceMappingURL=traceSymbolContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceSymbolContext.js","sourceRoot":"","sources":["../../../src/services/symbol/traceSymbolContext.ts"],"names":[],"mappings":";AAAA,6CAA6C;AAC7C,0CAA0C;AAC1C,+DAA+D;;AAgB/D,4DAsBC;AAtBD,SAAgB,wBAAwB,CAAC,IAAwC;IAC/E,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM;YAAE,SAAS;QACxE,IAAI,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,OAAO;YAAE,WAAW,GAAG,IAAI,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,UAAU,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAC,CAAC;AACpE,CAAC;AAED,SAAS,WAAW,CAAC,GAA4B,EAAE,IAAuB;IACxE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9E,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IACzD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -94,7 +94,11 @@ export type RagSourceKind =
94
94
  /** Plan 44 — world-scope consolidated memory (post-review). */
95
95
  | 'world_memory'
96
96
  /** Plan 54 — published case library entries. */
97
- | 'case_library';
97
+ | 'case_library'
98
+ /** Codebase-aware analysis — user application source. */
99
+ | 'app_source'
100
+ /** Codebase-aware analysis — Linux kernel or vendor kernel source. */
101
+ | 'kernel_source';
98
102
  /**
99
103
  * Pointer to a RAG-indexed document chunk.
100
104
  *
@@ -1164,6 +1168,27 @@ export interface RagChunk {
1164
1168
  * traceable.
1165
1169
  */
1166
1170
  unsupportedReason?: string;
1171
+ /** Path relative to the registered codebase root, when this chunk is source-backed. */
1172
+ filePath?: string;
1173
+ /** 1-based source line range covered by this chunk. */
1174
+ lineRange?: {
1175
+ start: number;
1176
+ end: number;
1177
+ };
1178
+ /** Primary symbol/function/class represented by the chunk. */
1179
+ symbol?: string;
1180
+ /** Best-effort language tag for source-backed chunks. */
1181
+ language?: 'cpp' | 'c' | 'java' | 'kotlin' | 'rust' | 'go' | 'py' | 'unknown';
1182
+ /** Pinned source commit, when available. */
1183
+ commitHash?: string;
1184
+ /** Vendor tag for kernel/OEM sources. */
1185
+ vendor?: string;
1186
+ /** Build-id or equivalent artifact identity used to pin symbolization. */
1187
+ buildId?: string;
1188
+ /** Registered codebase id for user-configured source chunks. */
1189
+ codebaseId?: string;
1190
+ /** Origin that decides legacy-vs-codebase filtering. Missing old values are backfilled by RagStore. */
1191
+ registryOrigin?: 'codebase_registry' | 'legacy_plan55' | 'plan44_memory' | 'plan54_cases';
1167
1192
  }
1168
1193
  /** A single retrieval hit — supports per-hit missing-data paths. */
1169
1194
  export interface RagRetrievalHit {
@@ -1559,13 +1584,16 @@ export interface CaseGraphLibraryContract extends SparkProvenance {
1559
1584
  * Tool exposure level. Drives whether external hosts (Claude Code,
1560
1585
  * Cursor, Codex via stdio) and remote A2A peers see the tool.
1561
1586
  *
1562
- * - `public` — safe for any host. Read-only data tools.
1587
+ * - `public` — safe for any host.
1588
+ * - `public-readonly` — externally visible read-only metadata tool.
1563
1589
  * - `internal` — agentv3 protocol tools (plan / hypothesis / note
1564
1590
  * updates). Writing them from an external host would corrupt the
1565
1591
  * active session.
1592
+ * - `requires_codebase_permission` — only visible inside a request/session
1593
+ * with codebase permission; never exposed via stdio/A2A.
1566
1594
  * - `deprecated` — kept for compatibility, hidden from public surface.
1567
1595
  */
1568
- export type McpToolExposure = 'public' | 'internal' | 'deprecated';
1596
+ export type McpToolExposure = 'public' | 'public-readonly' | 'internal' | 'requires_codebase_permission' | 'deprecated';
1569
1597
  /**
1570
1598
  * ACI — Agent-Callable Interface descriptor (Spark #96).
1571
1599
  *