@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.
Files changed (307) hide show
  1. package/.env.example +16 -8
  2. package/dist/agent/agents/base/baseAgent.d.ts.map +1 -1
  3. package/dist/agent/agents/base/baseAgent.js +5 -1
  4. package/dist/agent/agents/base/baseAgent.js.map +1 -1
  5. package/dist/agent/context/enhancedSessionContext.d.ts +5 -0
  6. package/dist/agent/context/enhancedSessionContext.d.ts.map +1 -1
  7. package/dist/agent/context/enhancedSessionContext.js +13 -0
  8. package/dist/agent/context/enhancedSessionContext.js.map +1 -1
  9. package/dist/agent/core/conclusionContract.d.ts +16 -1
  10. package/dist/agent/core/conclusionContract.d.ts.map +1 -1
  11. package/dist/agent/core/conclusionGenerator.d.ts.map +1 -1
  12. package/dist/agent/core/conclusionGenerator.js +90 -7
  13. package/dist/agent/core/conclusionGenerator.js.map +1 -1
  14. package/dist/agent/core/executors/directSkillExecutor.d.ts.map +1 -1
  15. package/dist/agent/core/executors/directSkillExecutor.js +6 -12
  16. package/dist/agent/core/executors/directSkillExecutor.js.map +1 -1
  17. package/dist/agent/core/orchestratorTypes.d.ts +16 -0
  18. package/dist/agent/core/orchestratorTypes.d.ts.map +1 -1
  19. package/dist/agent/core/orchestratorTypes.js.map +1 -1
  20. package/dist/agent/experts/crossDomain/moduleExpertInvoker.d.ts.map +1 -1
  21. package/dist/agent/experts/crossDomain/moduleExpertInvoker.js +4 -1
  22. package/dist/agent/experts/crossDomain/moduleExpertInvoker.js.map +1 -1
  23. package/dist/agent/scene/sceneStage1Runner.d.ts +1 -1
  24. package/dist/agent/scene/sceneStage1Runner.d.ts.map +1 -1
  25. package/dist/agent/scene/sceneStage1Runner.js +1 -1
  26. package/dist/agent/scene/sceneStage1Runner.js.map +1 -1
  27. package/dist/agent/scene/sceneStoryService.d.ts +1 -1
  28. package/dist/agent/scene/sceneStoryService.d.ts.map +1 -1
  29. package/dist/agent/scene/sceneStoryService.js +4 -1
  30. package/dist/agent/scene/sceneStoryService.js.map +1 -1
  31. package/dist/agent/types/agentProtocol.d.ts.map +1 -1
  32. package/dist/agent/types/agentProtocol.js +4 -1
  33. package/dist/agent/types/agentProtocol.js.map +1 -1
  34. package/dist/agent/types.d.ts +7 -0
  35. package/dist/agent/types.d.ts.map +1 -1
  36. package/dist/agent/types.js.map +1 -1
  37. package/dist/agentOpenAI/openAiRuntime.d.ts.map +1 -1
  38. package/dist/agentOpenAI/openAiRuntime.js +11 -1
  39. package/dist/agentOpenAI/openAiRuntime.js.map +1 -1
  40. package/dist/agentOpenAI/openAiToolAdapter.d.ts.map +1 -1
  41. package/dist/agentOpenAI/openAiToolAdapter.js +27 -2
  42. package/dist/agentOpenAI/openAiToolAdapter.js.map +1 -1
  43. package/dist/agentv3/artifactStore.d.ts +5 -0
  44. package/dist/agentv3/artifactStore.d.ts.map +1 -1
  45. package/dist/agentv3/artifactStore.js +3 -0
  46. package/dist/agentv3/artifactStore.js.map +1 -1
  47. package/dist/agentv3/claudeMcpServer.d.ts +15 -1
  48. package/dist/agentv3/claudeMcpServer.d.ts.map +1 -1
  49. package/dist/agentv3/claudeMcpServer.js +436 -91
  50. package/dist/agentv3/claudeMcpServer.js.map +1 -1
  51. package/dist/agentv3/claudeRuntime.d.ts.map +1 -1
  52. package/dist/agentv3/claudeRuntime.js +17 -0
  53. package/dist/agentv3/claudeRuntime.js.map +1 -1
  54. package/dist/agentv3/claudeSystemPrompt.d.ts.map +1 -1
  55. package/dist/agentv3/claudeSystemPrompt.js +9 -0
  56. package/dist/agentv3/claudeSystemPrompt.js.map +1 -1
  57. package/dist/agentv3/mcpToolRegistry.d.ts +14 -2
  58. package/dist/agentv3/mcpToolRegistry.d.ts.map +1 -1
  59. package/dist/agentv3/mcpToolRegistry.js +25 -6
  60. package/dist/agentv3/mcpToolRegistry.js.map +1 -1
  61. package/dist/agentv3/sessionStateSnapshot.d.ts +41 -0
  62. package/dist/agentv3/sessionStateSnapshot.d.ts.map +1 -1
  63. package/dist/agentv3/types.d.ts +5 -0
  64. package/dist/agentv3/types.d.ts.map +1 -1
  65. package/dist/agentv3/types.js.map +1 -1
  66. package/dist/assistant/application/agentAnalyzeSessionService.d.ts +6 -0
  67. package/dist/assistant/application/agentAnalyzeSessionService.d.ts.map +1 -1
  68. package/dist/assistant/application/agentAnalyzeSessionService.js +9 -3
  69. package/dist/assistant/application/agentAnalyzeSessionService.js.map +1 -1
  70. package/dist/assistant/application/assistantApplicationService.d.ts.map +1 -1
  71. package/dist/assistant/application/assistantApplicationService.js +3 -1
  72. package/dist/assistant/application/assistantApplicationService.js.map +1 -1
  73. package/dist/cli-user/bin.js +99 -1
  74. package/dist/cli-user/bin.js.map +1 -1
  75. package/dist/cli-user/commands/analyze.d.ts +3 -0
  76. package/dist/cli-user/commands/analyze.d.ts.map +1 -1
  77. package/dist/cli-user/commands/analyze.js +2 -0
  78. package/dist/cli-user/commands/analyze.js.map +1 -1
  79. package/dist/cli-user/commands/codebase.d.ts +29 -0
  80. package/dist/cli-user/commands/codebase.d.ts.map +1 -0
  81. package/dist/cli-user/commands/codebase.js +152 -0
  82. package/dist/cli-user/commands/codebase.js.map +1 -0
  83. package/dist/cli-user/commands/config.d.ts.map +1 -1
  84. package/dist/cli-user/commands/config.js +4 -1
  85. package/dist/cli-user/commands/config.js.map +1 -1
  86. package/dist/cli-user/commands/report.js +64 -0
  87. package/dist/cli-user/commands/report.js.map +1 -1
  88. package/dist/cli-user/io/paths.d.ts +3 -0
  89. package/dist/cli-user/io/paths.d.ts.map +1 -1
  90. package/dist/cli-user/io/paths.js +6 -0
  91. package/dist/cli-user/io/paths.js.map +1 -1
  92. package/dist/cli-user/io/sessionStore.d.ts +1 -0
  93. package/dist/cli-user/io/sessionStore.d.ts.map +1 -1
  94. package/dist/cli-user/io/sessionStore.js +5 -0
  95. package/dist/cli-user/io/sessionStore.js.map +1 -1
  96. package/dist/cli-user/repl/renderer.d.ts +8 -0
  97. package/dist/cli-user/repl/renderer.d.ts.map +1 -1
  98. package/dist/cli-user/repl/renderer.js.map +1 -1
  99. package/dist/cli-user/services/cliAnalyzeService.d.ts +6 -0
  100. package/dist/cli-user/services/cliAnalyzeService.d.ts.map +1 -1
  101. package/dist/cli-user/services/cliAnalyzeService.js +183 -29
  102. package/dist/cli-user/services/cliAnalyzeService.js.map +1 -1
  103. package/dist/cli-user/services/turnPersistence.d.ts +0 -10
  104. package/dist/cli-user/services/turnPersistence.d.ts.map +1 -1
  105. package/dist/cli-user/services/turnPersistence.js +62 -0
  106. package/dist/cli-user/services/turnPersistence.js.map +1 -1
  107. package/dist/cli-user/services/turnRunner.d.ts +3 -0
  108. package/dist/cli-user/services/turnRunner.d.ts.map +1 -1
  109. package/dist/cli-user/services/turnRunner.js +6 -0
  110. package/dist/cli-user/services/turnRunner.js.map +1 -1
  111. package/dist/cli-user/types.d.ts +5 -0
  112. package/dist/cli-user/types.d.ts.map +1 -1
  113. package/dist/routes/agentReportRoutes.d.ts +1 -0
  114. package/dist/routes/agentReportRoutes.d.ts.map +1 -1
  115. package/dist/routes/agentReportRoutes.js +13 -2
  116. package/dist/routes/agentReportRoutes.js.map +1 -1
  117. package/dist/routes/agentResumeRoutes.d.ts.map +1 -1
  118. package/dist/routes/agentResumeRoutes.js +29 -5
  119. package/dist/routes/agentResumeRoutes.js.map +1 -1
  120. package/dist/routes/agentRoutes.d.ts.map +1 -1
  121. package/dist/routes/agentRoutes.js +297 -91
  122. package/dist/routes/agentRoutes.js.map +1 -1
  123. package/dist/routes/ragAdminRoutes.d.ts +13 -24
  124. package/dist/routes/ragAdminRoutes.d.ts.map +1 -1
  125. package/dist/routes/ragAdminRoutes.js +266 -11
  126. package/dist/routes/ragAdminRoutes.js.map +1 -1
  127. package/dist/scripts/verifyAgentSseScrolling.js +119 -3
  128. package/dist/scripts/verifyAgentSseScrolling.js.map +1 -1
  129. package/dist/services/agentEventStore.d.ts.map +1 -1
  130. package/dist/services/agentEventStore.js +13 -3
  131. package/dist/services/agentEventStore.js.map +1 -1
  132. package/dist/services/agentReportData.d.ts +3 -0
  133. package/dist/services/agentReportData.d.ts.map +1 -1
  134. package/dist/services/agentReportData.js.map +1 -1
  135. package/dist/services/analysisResultSnapshotPipeline.d.ts +3 -0
  136. package/dist/services/analysisResultSnapshotPipeline.d.ts.map +1 -1
  137. package/dist/services/analysisResultSnapshotPipeline.js +3 -0
  138. package/dist/services/analysisResultSnapshotPipeline.js.map +1 -1
  139. package/dist/services/analysisResultSnapshotStore.d.ts.map +1 -1
  140. package/dist/services/analysisResultSnapshotStore.js +34 -2
  141. package/dist/services/analysisResultSnapshotStore.js.map +1 -1
  142. package/dist/services/aospKnowledgeIngester.d.ts +7 -0
  143. package/dist/services/aospKnowledgeIngester.d.ts.map +1 -1
  144. package/dist/services/aospKnowledgeIngester.js +19 -7
  145. package/dist/services/aospKnowledgeIngester.js.map +1 -1
  146. package/dist/services/auth/codebaseScopes.d.ts +6 -0
  147. package/dist/services/auth/codebaseScopes.d.ts.map +1 -0
  148. package/dist/services/auth/codebaseScopes.js +23 -0
  149. package/dist/services/auth/codebaseScopes.js.map +1 -0
  150. package/dist/services/codebase/codeAwareFeature.d.ts +4 -0
  151. package/dist/services/codebase/codeAwareFeature.d.ts.map +1 -0
  152. package/dist/services/codebase/codeAwareFeature.js +18 -0
  153. package/dist/services/codebase/codeAwareFeature.js.map +1 -0
  154. package/dist/services/codebase/codeLookupLedger.d.ts +37 -0
  155. package/dist/services/codebase/codeLookupLedger.d.ts.map +1 -0
  156. package/dist/services/codebase/codeLookupLedger.js +126 -0
  157. package/dist/services/codebase/codeLookupLedger.js.map +1 -0
  158. package/dist/services/codebase/codebaseRegistry.d.ts +76 -0
  159. package/dist/services/codebase/codebaseRegistry.d.ts.map +1 -0
  160. package/dist/services/codebase/codebaseRegistry.js +164 -0
  161. package/dist/services/codebase/codebaseRegistry.js.map +1 -0
  162. package/dist/services/codebase/defaultCodebaseServices.d.ts +5 -0
  163. package/dist/services/codebase/defaultCodebaseServices.d.ts.map +1 -0
  164. package/dist/services/codebase/defaultCodebaseServices.js +21 -0
  165. package/dist/services/codebase/defaultCodebaseServices.js.map +1 -0
  166. package/dist/services/codebase/patchProposer.d.ts +44 -0
  167. package/dist/services/codebase/patchProposer.d.ts.map +1 -0
  168. package/dist/services/codebase/patchProposer.js +163 -0
  169. package/dist/services/codebase/patchProposer.js.map +1 -0
  170. package/dist/services/codebase/pathSecurityGate.d.ts +33 -0
  171. package/dist/services/codebase/pathSecurityGate.d.ts.map +1 -0
  172. package/dist/services/codebase/pathSecurityGate.js +214 -0
  173. package/dist/services/codebase/pathSecurityGate.js.map +1 -0
  174. package/dist/services/enterpriseSchema.d.ts.map +1 -1
  175. package/dist/services/enterpriseSchema.js +11 -0
  176. package/dist/services/enterpriseSchema.js.map +1 -1
  177. package/dist/services/evidence/evidenceContractBuilder.d.ts +11 -0
  178. package/dist/services/evidence/evidenceContractBuilder.d.ts.map +1 -0
  179. package/dist/services/evidence/evidenceContractBuilder.js +530 -0
  180. package/dist/services/evidence/evidenceContractBuilder.js.map +1 -0
  181. package/dist/services/htmlReportGenerator.d.ts +9 -0
  182. package/dist/services/htmlReportGenerator.d.ts.map +1 -1
  183. package/dist/services/htmlReportGenerator.js +133 -0
  184. package/dist/services/htmlReportGenerator.js.map +1 -1
  185. package/dist/services/persistAgentSession.d.ts.map +1 -1
  186. package/dist/services/persistAgentSession.js +24 -0
  187. package/dist/services/persistAgentSession.js.map +1 -1
  188. package/dist/services/processIdentity/identityContractMapper.d.ts +14 -0
  189. package/dist/services/processIdentity/identityContractMapper.d.ts.map +1 -0
  190. package/dist/services/processIdentity/identityContractMapper.js +135 -0
  191. package/dist/services/processIdentity/identityContractMapper.js.map +1 -0
  192. package/dist/services/processIdentity/types.d.ts +5 -0
  193. package/dist/services/processIdentity/types.d.ts.map +1 -1
  194. package/dist/services/processIdentity/types.js.map +1 -1
  195. package/dist/services/rag/aospSourceIngester.d.ts +26 -0
  196. package/dist/services/rag/aospSourceIngester.d.ts.map +1 -0
  197. package/dist/services/rag/aospSourceIngester.js +143 -0
  198. package/dist/services/rag/aospSourceIngester.js.map +1 -0
  199. package/dist/services/rag/appSourceIngester.d.ts +37 -0
  200. package/dist/services/rag/appSourceIngester.d.ts.map +1 -0
  201. package/dist/services/rag/appSourceIngester.js +165 -0
  202. package/dist/services/rag/appSourceIngester.js.map +1 -0
  203. package/dist/services/rag/baseIngester.d.ts +18 -0
  204. package/dist/services/rag/baseIngester.d.ts.map +1 -0
  205. package/dist/services/rag/baseIngester.js +197 -0
  206. package/dist/services/rag/baseIngester.js.map +1 -0
  207. package/dist/services/rag/kernelSourceIngester.d.ts +35 -0
  208. package/dist/services/rag/kernelSourceIngester.d.ts.map +1 -0
  209. package/dist/services/rag/kernelSourceIngester.js +170 -0
  210. package/dist/services/rag/kernelSourceIngester.js.map +1 -0
  211. package/dist/services/rag/lookupResponseFilter.d.ts +42 -0
  212. package/dist/services/rag/lookupResponseFilter.d.ts.map +1 -0
  213. package/dist/services/rag/lookupResponseFilter.js +192 -0
  214. package/dist/services/rag/lookupResponseFilter.js.map +1 -0
  215. package/dist/services/rag/sessionToolResultRegistry.d.ts +25 -0
  216. package/dist/services/rag/sessionToolResultRegistry.d.ts.map +1 -0
  217. package/dist/services/rag/sessionToolResultRegistry.js +57 -0
  218. package/dist/services/rag/sessionToolResultRegistry.js.map +1 -0
  219. package/dist/services/rag/toolResultProjectionFilter.d.ts +18 -0
  220. package/dist/services/rag/toolResultProjectionFilter.d.ts.map +1 -0
  221. package/dist/services/rag/toolResultProjectionFilter.js +33 -0
  222. package/dist/services/rag/toolResultProjectionFilter.js.map +1 -0
  223. package/dist/services/ragStore.d.ts +8 -0
  224. package/dist/services/ragStore.d.ts.map +1 -1
  225. package/dist/services/ragStore.js +77 -8
  226. package/dist/services/ragStore.js.map +1 -1
  227. package/dist/services/rbac.d.ts +1 -1
  228. package/dist/services/rbac.d.ts.map +1 -1
  229. package/dist/services/rbac.js +6 -0
  230. package/dist/services/rbac.js.map +1 -1
  231. package/dist/services/security/codeAwareOutputRegistry.d.ts +6 -0
  232. package/dist/services/security/codeAwareOutputRegistry.d.ts.map +1 -0
  233. package/dist/services/security/codeAwareOutputRegistry.js +55 -0
  234. package/dist/services/security/codeAwareOutputRegistry.js.map +1 -0
  235. package/dist/services/security/llmEchoOutputFilter.d.ts +49 -0
  236. package/dist/services/security/llmEchoOutputFilter.d.ts.map +1 -0
  237. package/dist/services/security/llmEchoOutputFilter.js +133 -0
  238. package/dist/services/security/llmEchoOutputFilter.js.map +1 -0
  239. package/dist/services/security/secretPatterns.d.ts +6 -0
  240. package/dist/services/security/secretPatterns.d.ts.map +1 -0
  241. package/dist/services/security/secretPatterns.js +23 -0
  242. package/dist/services/security/secretPatterns.js.map +1 -0
  243. package/dist/services/skillEngine/skillExecutor.d.ts +14 -2
  244. package/dist/services/skillEngine/skillExecutor.d.ts.map +1 -1
  245. package/dist/services/skillEngine/skillExecutor.js +133 -13
  246. package/dist/services/skillEngine/skillExecutor.js.map +1 -1
  247. package/dist/services/skillEngine/types.d.ts +2 -0
  248. package/dist/services/skillEngine/types.d.ts.map +1 -1
  249. package/dist/services/symbol/breakpadSymParser.d.ts +19 -0
  250. package/dist/services/symbol/breakpadSymParser.d.ts.map +1 -0
  251. package/dist/services/symbol/breakpadSymParser.js +40 -0
  252. package/dist/services/symbol/breakpadSymParser.js.map +1 -0
  253. package/dist/services/symbol/kallsymsParser.d.ts +12 -0
  254. package/dist/services/symbol/kallsymsParser.d.ts.map +1 -0
  255. package/dist/services/symbol/kallsymsParser.js +41 -0
  256. package/dist/services/symbol/kallsymsParser.js.map +1 -0
  257. package/dist/services/symbol/r8MappingParser.d.ts +40 -0
  258. package/dist/services/symbol/r8MappingParser.d.ts.map +1 -0
  259. package/dist/services/symbol/r8MappingParser.js +99 -0
  260. package/dist/services/symbol/r8MappingParser.js.map +1 -0
  261. package/dist/services/symbol/symbolResolver.d.ts +59 -0
  262. package/dist/services/symbol/symbolResolver.d.ts.map +1 -0
  263. package/dist/services/symbol/symbolResolver.js +147 -0
  264. package/dist/services/symbol/symbolResolver.js.map +1 -0
  265. package/dist/services/symbol/traceSymbolContext.d.ts +14 -0
  266. package/dist/services/symbol/traceSymbolContext.d.ts.map +1 -0
  267. package/dist/services/symbol/traceSymbolContext.js +45 -0
  268. package/dist/services/symbol/traceSymbolContext.js.map +1 -0
  269. package/dist/services/verifier/claimVerificationRunner.d.ts +20 -0
  270. package/dist/services/verifier/claimVerificationRunner.d.ts.map +1 -0
  271. package/dist/services/verifier/claimVerificationRunner.js +88 -0
  272. package/dist/services/verifier/claimVerificationRunner.js.map +1 -0
  273. package/dist/services/verifier/deterministicClaimVerifier.d.ts +8 -0
  274. package/dist/services/verifier/deterministicClaimVerifier.d.ts.map +1 -0
  275. package/dist/services/verifier/deterministicClaimVerifier.js +178 -0
  276. package/dist/services/verifier/deterministicClaimVerifier.js.map +1 -0
  277. package/dist/types/claimVerification.d.ts +38 -0
  278. package/dist/types/claimVerification.d.ts.map +1 -0
  279. package/dist/types/claimVerification.js +6 -0
  280. package/dist/types/claimVerification.js.map +1 -0
  281. package/dist/types/dataContract.d.ts +30 -0
  282. package/dist/types/dataContract.d.ts.map +1 -1
  283. package/dist/types/dataContract.js +7 -0
  284. package/dist/types/dataContract.js.map +1 -1
  285. package/dist/types/evidenceContract.d.ts +100 -0
  286. package/dist/types/evidenceContract.d.ts.map +1 -0
  287. package/dist/types/evidenceContract.js +6 -0
  288. package/dist/types/evidenceContract.js.map +1 -0
  289. package/dist/types/identityContract.d.ts +57 -0
  290. package/dist/types/identityContract.d.ts.map +1 -0
  291. package/dist/types/identityContract.js +6 -0
  292. package/dist/types/identityContract.js.map +1 -0
  293. package/dist/types/multiTraceComparison.d.ts +3 -0
  294. package/dist/types/multiTraceComparison.d.ts.map +1 -1
  295. package/dist/types/sparkContracts.d.ts +31 -3
  296. package/dist/types/sparkContracts.d.ts.map +1 -1
  297. package/dist/types/sparkContracts.js.map +1 -1
  298. package/package.json +8 -1
  299. package/skills/atomic/process_identity_resolver.skill.yaml +130 -1
  300. package/skills/atomic/process_slice_cpu_hotspots.skill.yaml +321 -0
  301. package/skills/composite/code_pinpoint.skill.yaml +111 -0
  302. package/strategies/anr.strategy.md +2 -2
  303. package/strategies/code-aware.template.md +37 -0
  304. package/strategies/game.strategy.md +1 -1
  305. package/strategies/general.strategy.md +1 -1
  306. package/strategies/prompt-methodology.template.md +2 -0
  307. 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":";AAAA,6CAA6C;AAC7C,0CAA0C;AAC1C,+DAA+D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmB/D,gDAEC;AAED,sCAKC;AAED,0CAUC;AAED,gDASC;AAED,oDA2EC;AAED,sDA0BC;AA1JD,mCAAkC;AAClC,2CAA6B;AAgB7B,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,aAAa,CAAC,KAAyB,EAAE,MAAM,GAAG,EAAE;IAClE,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACjD,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,SAAgB,eAAe,CAAC,YAAoB;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IACrD,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAC7B,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACtG,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC;IACjC,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;IAC7G,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACtE,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,kIAAkI,CAAC,CAAC;IACrK,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,8IAA8I,CAAC,CAAC;IAC9K,OAAO,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAAe,EAAE,QAAgB;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACnD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,IAAI,KAAK;YAAE,SAAS;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI;YACJ,SAAS,EAAE,KAAK,GAAG,CAAC;YACpB,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACzC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAClC,IAAI,GAAG,GAAa,EAAE,CAAC;QACvB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,IAAI,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;oBACpD,GAAG,CAAC,IAAI,CAAC;wBACP,IAAI,EAAE,KAAK;wBACX,SAAS;wBACT,OAAO,EAAE,SAAS;wBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;qBACvB,CAAC,CAAC;oBACH,MAAM,IAAI,QAAQ,CAAC;gBACrB,CAAC;gBACD,SAAS,IAAI,CAAC,CAAC;gBACf,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC;gBAC1D,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;oBACpB,SAAS;oBACT,OAAO,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;oBACnC,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB,CAAC,CAAC;gBACH,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC;gBACxB,GAAG,GAAG,EAAE,CAAC;gBACT,QAAQ,GAAG,CAAC,CAAC;YACf,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBACpB,SAAS;gBACT,OAAO,EAAE,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;gBACnC,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,qBAAqB,CAAC,IAAY,EAAE,QAAgB;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,OAAO;SACvB,KAAK,CAAC,UAAU,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,GAAG,GAAG,CAAC,CAAC;YACR,QAAQ,GAAG,MAAM,CAAC;QACpB,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YACjD,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;YACxC,GAAG,GAAG,CAAC,CAAC;YACR,QAAQ,GAAG,MAAM,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;IAC5D,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -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":";AAAA,6CAA6C;AAC7C,0CAA0C;AAC1C,+DAA+D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE/D,uCAAyB;AACzB,2CAA6B;AAI7B,mEAAsF;AACtF,+DAAyD;AACzD,iDAKwB;AAExB,MAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,MAAM,eAAe,GAAG,SAAS,CAAC;AAsBlC,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,6FAA6F,CAAC,CAAC;IAC1H,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA0B,EAAE,GAAgB,EAAE,IAA+B;IACvG,MAAM,QAAQ,GAAG;QACf,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACzC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAC9D,CAAC;AACJ,CAAC;AAED,MAAa,oBAAoB;IAC/B,YACmB,KAAe,EACf,QAA0B,EAC1B,OAAyB,IAAI,mCAAgB,EAAE;QAF/C,UAAK,GAAL,KAAK,CAAU;QACf,aAAQ,GAAR,QAAQ,CAAkB;QAC1B,SAAI,GAAJ,IAAI,CAA2C;IAC/D,CAAC;IAEJ,MAAM,CAAC,UAAkB,EAAE,OAAkC,EAAE;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,aAAa,UAAU,aAAa,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,aAAa,UAAU,aAAa,GAAG,CAAC,IAAI,2CAA2C,CAAC,CAAC;QAC3G,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,mBAAmB,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,oBAAoB,UAAU,sCAAsC,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE;gBAC3C,gBAAgB,EAAE,qBAAqB;gBACvC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;gBACxB,eAAe,EAAE,OAAO,CAAC,aAAa;gBACtC,gBAAgB,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;aAC9C,CAAC,CAAC;YACH,OAAO;gBACL,UAAU;gBACV,cAAc,EAAE,CAAC;gBACjB,WAAW,EAAE,CAAC;gBACd,aAAa,EAAE,CAAC;gBAChB,gBAAgB,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;gBAC7C,iBAAiB,EAAE,CAAC;gBACpB,MAAM,EAAE,CAAC,EAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,IAAI,SAAS,EAAC,CAAC;aAClF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAA6B;YACvC,UAAU;YACV,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;YAChB,gBAAgB,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;YAC7C,iBAAiB,EAAE,CAAC;YACpB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,uBAAuB,CAAC;QAE/D,KAAK,MAAM,IAAI,IAAI,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBACpE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;gBACvD,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;gBACvD,MAAM,MAAM,GAAG,IAAA,mCAAoB,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACvD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxB,MAAM,CAAC,aAAa,EAAE,CAAC;oBACvB,SAAS;gBACX,CAAC;gBACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,SAAS,GAAG,IAAA,8BAAa,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC5C,MAAM,CAAC,iBAAiB,IAAI,SAAS,CAAC,aAAa,CAAC;oBACpD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;wBAClB,OAAO,EAAE,IAAA,4BAAa,EAAC,CAAC,UAAU,EAAE,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;wBAC7F,IAAI,EAAE,eAAe;wBACrB,GAAG,EAAE,cAAc,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE;wBACpD,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;wBACzC,OAAO,EAAE,SAAS,CAAC,IAAI;wBACvB,UAAU,EAAE,IAAA,iCAAkB,EAAC,SAAS,CAAC,IAAI,CAAC;wBAC9C,OAAO,EAAE,OAAO,IAAI,eAAe;wBACnC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;wBACrB,QAAQ,EAAE,IAAI,CAAC,YAAY;wBAC3B,SAAS,EAAE,EAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAC;wBACvD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC/C,QAAQ,EAAE,IAAA,8BAAe,EAAC,IAAI,CAAC,YAAY,CAAC;wBAC5C,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACvD,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9C,UAAU;wBACV,cAAc,EAAE,mBAAmB;wBACnC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC5D,CAAC,CAAC;oBACH,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACjB,QAAQ,EAAE,IAAI,CAAC,YAAY;oBAC3B,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC/D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE;YAC3C,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YAC7D,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;YACxB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM;YACzC,UAAU,EAAE,MAAM,CAAC,WAAW;YAC9B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;SAC5C,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA3GD,oDA2GC;AAEY,QAAA,aAAa,GAAG;IAC3B,WAAW;IACX,kBAAkB;CACnB,CAAC"}