@stackmemoryai/stackmemory 0.2.7 → 0.2.8

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 (297) hide show
  1. package/README.md +25 -8
  2. package/dist/scripts/cancel-duplicate-tasks.js +2 -1
  3. package/dist/scripts/cancel-duplicate-tasks.js.map +1 -1
  4. package/dist/scripts/list-linear-tasks.js +3 -4
  5. package/dist/scripts/list-linear-tasks.js.map +1 -1
  6. package/dist/scripts/merge-linear-duplicates-safe.js +4 -2
  7. package/dist/scripts/merge-linear-duplicates-safe.js.map +1 -1
  8. package/dist/scripts/show-linear-summary.js +4 -1
  9. package/dist/scripts/show-linear-summary.js.map +1 -1
  10. package/dist/scripts/status.js +6 -2
  11. package/dist/scripts/status.js.map +1 -1
  12. package/dist/src/cli/auto-detect.js.map +1 -1
  13. package/dist/src/cli/claude-sm.js.map +1 -1
  14. package/dist/src/cli/commands/config.d.ts +6 -0
  15. package/dist/src/cli/commands/config.d.ts.map +1 -0
  16. package/dist/src/cli/commands/config.js +224 -0
  17. package/dist/src/cli/commands/config.js.map +1 -0
  18. package/dist/src/cli/commands/linear.d.ts.map +1 -1
  19. package/dist/src/cli/commands/linear.js +123 -47
  20. package/dist/src/cli/commands/linear.js.map +1 -1
  21. package/dist/src/cli/index.d.ts.map +1 -1
  22. package/dist/src/cli/index.js +48 -1
  23. package/dist/src/cli/index.js.map +1 -1
  24. package/dist/src/core/config/config-manager.d.ts +95 -0
  25. package/dist/src/core/config/config-manager.d.ts.map +1 -0
  26. package/dist/src/core/config/config-manager.js +359 -0
  27. package/dist/src/core/config/config-manager.js.map +1 -0
  28. package/dist/src/core/config/types.d.ts +72 -0
  29. package/dist/src/core/config/types.d.ts.map +1 -0
  30. package/dist/src/core/config/types.js +127 -0
  31. package/dist/src/core/config/types.js.map +1 -0
  32. package/dist/src/core/context/compaction-handler.d.ts +119 -0
  33. package/dist/src/core/context/compaction-handler.d.ts.map +1 -0
  34. package/dist/src/core/context/compaction-handler.js +306 -0
  35. package/dist/src/core/context/compaction-handler.js.map +1 -0
  36. package/dist/src/core/context/model-aware-compaction.d.ts +101 -0
  37. package/dist/src/core/context/model-aware-compaction.d.ts.map +1 -0
  38. package/dist/src/core/context/model-aware-compaction.js +616 -0
  39. package/dist/src/core/context/model-aware-compaction.js.map +1 -0
  40. package/dist/src/core/query/query-parser.d.ts +104 -0
  41. package/dist/src/core/query/query-parser.d.ts.map +1 -0
  42. package/dist/src/core/query/query-parser.js +347 -0
  43. package/dist/src/core/query/query-parser.js.map +1 -0
  44. package/dist/src/core/retrieval/index.d.ts +8 -0
  45. package/dist/src/core/retrieval/index.d.ts.map +1 -0
  46. package/dist/src/core/retrieval/index.js +8 -0
  47. package/dist/src/core/retrieval/index.js.map +1 -0
  48. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +71 -0
  49. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +1 -0
  50. package/dist/src/core/retrieval/llm-context-retrieval.js +545 -0
  51. package/dist/src/core/retrieval/llm-context-retrieval.js.map +1 -0
  52. package/dist/src/core/retrieval/summary-generator.d.ts +63 -0
  53. package/dist/src/core/retrieval/summary-generator.d.ts.map +1 -0
  54. package/dist/src/core/retrieval/summary-generator.js +622 -0
  55. package/dist/src/core/retrieval/summary-generator.js.map +1 -0
  56. package/dist/src/core/retrieval/types.d.ts +257 -0
  57. package/dist/src/core/retrieval/types.d.ts.map +1 -0
  58. package/dist/src/core/retrieval/types.js +18 -0
  59. package/dist/src/core/retrieval/types.js.map +1 -0
  60. package/dist/src/core/trace/trace-detector.d.ts +108 -0
  61. package/dist/src/core/trace/trace-detector.d.ts.map +1 -0
  62. package/dist/src/core/trace/trace-detector.demo.d.ts +5 -0
  63. package/dist/src/core/trace/trace-detector.demo.d.ts.map +1 -0
  64. package/dist/src/core/trace/trace-detector.demo.js +145 -0
  65. package/dist/src/core/trace/trace-detector.demo.js.map +1 -0
  66. package/dist/src/core/trace/trace-detector.js +425 -0
  67. package/dist/src/core/trace/trace-detector.js.map +1 -0
  68. package/dist/src/core/trace/trace-store.d.ts +60 -0
  69. package/dist/src/core/trace/trace-store.d.ts.map +1 -0
  70. package/dist/src/core/trace/trace-store.js +323 -0
  71. package/dist/src/core/trace/trace-store.js.map +1 -0
  72. package/dist/src/core/trace/types.d.ts +81 -0
  73. package/dist/src/core/trace/types.d.ts.map +1 -0
  74. package/dist/src/core/trace/types.js +70 -0
  75. package/dist/src/core/trace/types.js.map +1 -0
  76. package/dist/src/integrations/linear/sync-manager.d.ts +76 -0
  77. package/dist/src/integrations/linear/sync-manager.d.ts.map +1 -0
  78. package/dist/src/integrations/linear/sync-manager.js +223 -0
  79. package/dist/src/integrations/linear/sync-manager.js.map +1 -0
  80. package/dist/src/integrations/mcp/server.d.ts +8 -0
  81. package/dist/src/integrations/mcp/server.d.ts.map +1 -1
  82. package/dist/src/integrations/mcp/server.js +368 -16
  83. package/dist/src/integrations/mcp/server.js.map +1 -1
  84. package/dist/src/integrations/mcp/trace-test.d.ts +5 -0
  85. package/dist/src/integrations/mcp/trace-test.d.ts.map +1 -0
  86. package/dist/src/integrations/mcp/trace-test.js +54 -0
  87. package/dist/src/integrations/mcp/trace-test.js.map +1 -0
  88. package/dist/src/services/config-service.d.ts +1 -1
  89. package/dist/src/services/config-service.d.ts.map +1 -1
  90. package/dist/src/services/config-service.js.map +1 -1
  91. package/dist/src/types/task.d.ts +11 -1
  92. package/dist/src/types/task.d.ts.map +1 -1
  93. package/dist/src/utils/logger.d.ts +4 -4
  94. package/dist/src/utils/logger.d.ts.map +1 -1
  95. package/dist/src/utils/logger.js.map +1 -1
  96. package/package.json +9 -8
  97. package/dist/attention-scoring/src/attention-tracker.d.ts +0 -79
  98. package/dist/attention-scoring/src/attention-tracker.d.ts.map +0 -1
  99. package/dist/attention-scoring/src/attention-tracker.js +0 -488
  100. package/dist/attention-scoring/src/attention-tracker.js.map +0 -1
  101. package/dist/attention-scoring/src/mcp-integration.d.ts +0 -56
  102. package/dist/attention-scoring/src/mcp-integration.d.ts.map +0 -1
  103. package/dist/attention-scoring/src/mcp-integration.js +0 -369
  104. package/dist/attention-scoring/src/mcp-integration.js.map +0 -1
  105. package/dist/index.js +0 -382
  106. package/dist/p2p-sync/src/p2p-sync.d.ts +0 -81
  107. package/dist/p2p-sync/src/p2p-sync.d.ts.map +0 -1
  108. package/dist/p2p-sync/src/p2p-sync.js +0 -457
  109. package/dist/p2p-sync/src/p2p-sync.js.map +0 -1
  110. package/dist/p2p-sync/src/team-context-sync.d.ts +0 -99
  111. package/dist/p2p-sync/src/team-context-sync.d.ts.map +0 -1
  112. package/dist/p2p-sync/src/team-context-sync.js +0 -491
  113. package/dist/p2p-sync/src/team-context-sync.js.map +0 -1
  114. package/dist/scripts/merge-linear-duplicates.d.ts +0 -7
  115. package/dist/scripts/merge-linear-duplicates.d.ts.map +0 -1
  116. package/dist/scripts/merge-linear-duplicates.js +0 -126
  117. package/dist/scripts/merge-linear-duplicates.js.map +0 -1
  118. package/dist/src/analytics/api/analytics-api.d.ts +0 -24
  119. package/dist/src/analytics/api/analytics-api.d.ts.map +0 -1
  120. package/dist/src/analytics/api/analytics-api.js +0 -279
  121. package/dist/src/analytics/api/analytics-api.js.map +0 -1
  122. package/dist/src/analytics/core/analytics-service.d.ts +0 -23
  123. package/dist/src/analytics/core/analytics-service.d.ts.map +0 -1
  124. package/dist/src/analytics/core/analytics-service.js +0 -160
  125. package/dist/src/analytics/core/analytics-service.js.map +0 -1
  126. package/dist/src/analytics/index.d.ts +0 -12
  127. package/dist/src/analytics/index.d.ts.map +0 -1
  128. package/dist/src/analytics/index.js +0 -11
  129. package/dist/src/analytics/index.js.map +0 -1
  130. package/dist/src/analytics/queries/metrics-queries.d.ts +0 -11
  131. package/dist/src/analytics/queries/metrics-queries.d.ts.map +0 -1
  132. package/dist/src/analytics/queries/metrics-queries.js +0 -179
  133. package/dist/src/analytics/queries/metrics-queries.js.map +0 -1
  134. package/dist/src/analytics/types/metrics.d.ts +0 -60
  135. package/dist/src/analytics/types/metrics.d.ts.map +0 -1
  136. package/dist/src/analytics/types/metrics.js +0 -2
  137. package/dist/src/analytics/types/metrics.js.map +0 -1
  138. package/dist/src/beads/beads-task-store.d.ts +0 -117
  139. package/dist/src/beads/beads-task-store.d.ts.map +0 -1
  140. package/dist/src/beads/beads-task-store.js +0 -318
  141. package/dist/src/beads/beads-task-store.js.map +0 -1
  142. package/dist/src/beads/task-aware-context.d.ts +0 -103
  143. package/dist/src/beads/task-aware-context.d.ts.map +0 -1
  144. package/dist/src/beads/task-aware-context.js +0 -395
  145. package/dist/src/beads/task-aware-context.js.map +0 -1
  146. package/dist/src/beads-task-store.d.ts +0 -117
  147. package/dist/src/beads-task-store.d.ts.map +0 -1
  148. package/dist/src/beads-task-store.js +0 -318
  149. package/dist/src/beads-task-store.js.map +0 -1
  150. package/dist/src/cli/__tests__/index.test.d.ts +0 -5
  151. package/dist/src/cli/__tests__/index.test.d.ts.map +0 -1
  152. package/dist/src/cli/__tests__/index.test.js +0 -726
  153. package/dist/src/cli/__tests__/index.test.js.map +0 -1
  154. package/dist/src/cli/analytics-viewer.d.ts +0 -3
  155. package/dist/src/cli/analytics-viewer.d.ts.map +0 -1
  156. package/dist/src/cli/analytics-viewer.js +0 -89
  157. package/dist/src/cli/analytics-viewer.js.map +0 -1
  158. package/dist/src/cli/cli.d.ts +0 -7
  159. package/dist/src/cli/cli.d.ts.map +0 -1
  160. package/dist/src/cli/cli.js +0 -704
  161. package/dist/src/cli/cli.js.map +0 -1
  162. package/dist/src/cli/project-commands.d.ts +0 -8
  163. package/dist/src/cli/project-commands.d.ts.map +0 -1
  164. package/dist/src/cli/project-commands.js +0 -212
  165. package/dist/src/cli/project-commands.js.map +0 -1
  166. package/dist/src/cli.d.ts +0 -7
  167. package/dist/src/cli.d.ts.map +0 -1
  168. package/dist/src/cli.js +0 -73
  169. package/dist/src/cli.js.map +0 -1
  170. package/dist/src/core/context/__tests__/frame-manager.test.d.ts +0 -5
  171. package/dist/src/core/context/__tests__/frame-manager.test.d.ts.map +0 -1
  172. package/dist/src/core/context/__tests__/frame-manager.test.js +0 -892
  173. package/dist/src/core/context/__tests__/frame-manager.test.js.map +0 -1
  174. package/dist/src/core/error-handler.d.ts +0 -46
  175. package/dist/src/core/error-handler.d.ts.map +0 -1
  176. package/dist/src/core/error-handler.js +0 -212
  177. package/dist/src/core/error-handler.js.map +0 -1
  178. package/dist/src/core/errors/__tests__/error-handling.test.d.ts +0 -5
  179. package/dist/src/core/errors/__tests__/error-handling.test.d.ts.map +0 -1
  180. package/dist/src/core/errors/__tests__/error-handling.test.js +0 -239
  181. package/dist/src/core/errors/__tests__/error-handling.test.js.map +0 -1
  182. package/dist/src/core/frame-manager.d.ts +0 -106
  183. package/dist/src/core/frame-manager.d.ts.map +0 -1
  184. package/dist/src/core/frame-manager.js +0 -387
  185. package/dist/src/core/frame-manager.js.map +0 -1
  186. package/dist/src/core/logger.d.ts +0 -24
  187. package/dist/src/core/logger.d.ts.map +0 -1
  188. package/dist/src/core/logger.js +0 -121
  189. package/dist/src/core/logger.js.map +0 -1
  190. package/dist/src/core/logger.test.d.ts +0 -2
  191. package/dist/src/core/logger.test.d.ts.map +0 -1
  192. package/dist/src/core/logger.test.js +0 -31
  193. package/dist/src/core/logger.test.js.map +0 -1
  194. package/dist/src/core/progress-tracker.d.ts +0 -95
  195. package/dist/src/core/progress-tracker.d.ts.map +0 -1
  196. package/dist/src/core/progress-tracker.js +0 -178
  197. package/dist/src/core/progress-tracker.js.map +0 -1
  198. package/dist/src/core/project-manager.d.ts +0 -130
  199. package/dist/src/core/project-manager.d.ts.map +0 -1
  200. package/dist/src/core/project-manager.js +0 -582
  201. package/dist/src/core/project-manager.js.map +0 -1
  202. package/dist/src/core/update-checker.d.ts +0 -38
  203. package/dist/src/core/update-checker.d.ts.map +0 -1
  204. package/dist/src/core/update-checker.js +0 -156
  205. package/dist/src/core/update-checker.js.map +0 -1
  206. package/dist/src/error-handler.d.ts +0 -42
  207. package/dist/src/error-handler.d.ts.map +0 -1
  208. package/dist/src/error-handler.js +0 -155
  209. package/dist/src/error-handler.js.map +0 -1
  210. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts +0 -5
  211. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts.map +0 -1
  212. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js +0 -712
  213. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -1
  214. package/dist/src/frame-manager.d.ts +0 -106
  215. package/dist/src/frame-manager.d.ts.map +0 -1
  216. package/dist/src/frame-manager.js +0 -361
  217. package/dist/src/frame-manager.js.map +0 -1
  218. package/dist/src/integrations/browser-mcp.d.ts +0 -94
  219. package/dist/src/integrations/browser-mcp.d.ts.map +0 -1
  220. package/dist/src/integrations/browser-mcp.js +0 -431
  221. package/dist/src/integrations/browser-mcp.js.map +0 -1
  222. package/dist/src/integrations/linear/__tests__/auth.test.d.ts +0 -5
  223. package/dist/src/integrations/linear/__tests__/auth.test.d.ts.map +0 -1
  224. package/dist/src/integrations/linear/__tests__/auth.test.js +0 -517
  225. package/dist/src/integrations/linear/__tests__/auth.test.js.map +0 -1
  226. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts +0 -5
  227. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts.map +0 -1
  228. package/dist/src/integrations/linear/__tests__/sync-service.test.js +0 -700
  229. package/dist/src/integrations/linear/__tests__/sync-service.test.js.map +0 -1
  230. package/dist/src/integrations/linear-auth.d.ts +0 -99
  231. package/dist/src/integrations/linear-auth.d.ts.map +0 -1
  232. package/dist/src/integrations/linear-auth.js +0 -319
  233. package/dist/src/integrations/linear-auth.js.map +0 -1
  234. package/dist/src/integrations/linear-auto-sync.d.ts +0 -77
  235. package/dist/src/integrations/linear-auto-sync.d.ts.map +0 -1
  236. package/dist/src/integrations/linear-auto-sync.js +0 -268
  237. package/dist/src/integrations/linear-auto-sync.js.map +0 -1
  238. package/dist/src/integrations/linear-client.d.ts +0 -86
  239. package/dist/src/integrations/linear-client.d.ts.map +0 -1
  240. package/dist/src/integrations/linear-client.js +0 -277
  241. package/dist/src/integrations/linear-client.js.map +0 -1
  242. package/dist/src/integrations/linear-config.d.ts +0 -51
  243. package/dist/src/integrations/linear-config.d.ts.map +0 -1
  244. package/dist/src/integrations/linear-config.js +0 -103
  245. package/dist/src/integrations/linear-config.js.map +0 -1
  246. package/dist/src/integrations/linear-sync.d.ts +0 -97
  247. package/dist/src/integrations/linear-sync.d.ts.map +0 -1
  248. package/dist/src/integrations/linear-sync.js +0 -391
  249. package/dist/src/integrations/linear-sync.js.map +0 -1
  250. package/dist/src/integrations/mcp/__tests__/server.test.d.ts +0 -5
  251. package/dist/src/integrations/mcp/__tests__/server.test.d.ts.map +0 -1
  252. package/dist/src/integrations/mcp/__tests__/server.test.js +0 -790
  253. package/dist/src/integrations/mcp/__tests__/server.test.js.map +0 -1
  254. package/dist/src/logger.d.ts +0 -24
  255. package/dist/src/logger.d.ts.map +0 -1
  256. package/dist/src/logger.js +0 -120
  257. package/dist/src/logger.js.map +0 -1
  258. package/dist/src/mcp/mcp-server.d.ts +0 -40
  259. package/dist/src/mcp/mcp-server.d.ts.map +0 -1
  260. package/dist/src/mcp/mcp-server.js +0 -828
  261. package/dist/src/mcp/mcp-server.js.map +0 -1
  262. package/dist/src/mcp-server.d.ts +0 -32
  263. package/dist/src/mcp-server.d.ts.map +0 -1
  264. package/dist/src/mcp-server.js +0 -441
  265. package/dist/src/mcp-server.js.map +0 -1
  266. package/dist/src/pebbles/pebbles-task-store.d.ts +0 -117
  267. package/dist/src/pebbles/pebbles-task-store.d.ts.map +0 -1
  268. package/dist/src/pebbles/pebbles-task-store.js +0 -335
  269. package/dist/src/pebbles/pebbles-task-store.js.map +0 -1
  270. package/dist/src/pebbles/task-aware-context.d.ts +0 -103
  271. package/dist/src/pebbles/task-aware-context.d.ts.map +0 -1
  272. package/dist/src/pebbles/task-aware-context.js +0 -412
  273. package/dist/src/pebbles/task-aware-context.js.map +0 -1
  274. package/dist/src/railway/index.d.ts +0 -7
  275. package/dist/src/railway/index.d.ts.map +0 -1
  276. package/dist/src/railway/index.js +0 -401
  277. package/dist/src/railway/index.js.map +0 -1
  278. package/dist/src/runway/auth/auth-middleware.d.ts +0 -66
  279. package/dist/src/runway/auth/auth-middleware.d.ts.map +0 -1
  280. package/dist/src/runway/auth/auth-middleware.js +0 -337
  281. package/dist/src/runway/auth/auth-middleware.js.map +0 -1
  282. package/dist/src/runway/server/runway-mcp-server.d.ts +0 -46
  283. package/dist/src/runway/server/runway-mcp-server.d.ts.map +0 -1
  284. package/dist/src/runway/server/runway-mcp-server.js +0 -601
  285. package/dist/src/runway/server/runway-mcp-server.js.map +0 -1
  286. package/dist/src/runway.bak/auth/auth-middleware.d.ts +0 -66
  287. package/dist/src/runway.bak/auth/auth-middleware.d.ts.map +0 -1
  288. package/dist/src/runway.bak/auth/auth-middleware.js +0 -337
  289. package/dist/src/runway.bak/auth/auth-middleware.js.map +0 -1
  290. package/dist/src/runway.bak/server/runway-mcp-server.d.ts +0 -46
  291. package/dist/src/runway.bak/server/runway-mcp-server.d.ts.map +0 -1
  292. package/dist/src/runway.bak/server/runway-mcp-server.js +0 -601
  293. package/dist/src/runway.bak/server/runway-mcp-server.js.map +0 -1
  294. package/dist/src/task-aware-context.d.ts +0 -103
  295. package/dist/src/task-aware-context.d.ts.map +0 -1
  296. package/dist/src/task-aware-context.js +0 -395
  297. package/dist/src/task-aware-context.js.map +0 -1
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Compaction Handler for Claude Code Autocompaction
3
+ * Preserves critical context across token limit boundaries
4
+ */
5
+ import { FrameManager } from './frame-manager.js';
6
+ export interface CompactionMetrics {
7
+ estimatedTokens: number;
8
+ warningThreshold: number;
9
+ criticalThreshold: number;
10
+ lastCompactionAt?: number;
11
+ anchorsPreserved: number;
12
+ }
13
+ export interface ToolCallSummary {
14
+ tool: string;
15
+ timestamp: number;
16
+ key_inputs: Record<string, any>;
17
+ key_outputs: Record<string, any>;
18
+ files_affected: string[];
19
+ success: boolean;
20
+ error?: string;
21
+ }
22
+ export interface CriticalContextAnchor {
23
+ anchor_id: string;
24
+ type: 'COMPACTION_PRESERVE';
25
+ priority: 10;
26
+ content: {
27
+ tool_calls: ToolCallSummary[];
28
+ decisions: string[];
29
+ file_operations: FileOperation[];
30
+ error_resolutions: ErrorPattern[];
31
+ };
32
+ created_at: number;
33
+ token_estimate: number;
34
+ }
35
+ export interface FileOperation {
36
+ type: 'read' | 'write' | 'edit' | 'delete' | 'create';
37
+ path: string;
38
+ timestamp: number;
39
+ success: boolean;
40
+ error?: string;
41
+ }
42
+ export interface ErrorPattern {
43
+ error: string;
44
+ resolution: string;
45
+ tool_sequence: string[];
46
+ timestamp: number;
47
+ }
48
+ export declare class CompactionHandler {
49
+ private frameManager;
50
+ private metrics;
51
+ private tokenAccumulator;
52
+ private preservedAnchors;
53
+ constructor(frameManager: FrameManager);
54
+ /**
55
+ * Track token usage from a message
56
+ */
57
+ trackTokens(content: string): void;
58
+ /**
59
+ * Check if approaching compaction threshold
60
+ */
61
+ isApproachingCompaction(): boolean;
62
+ /**
63
+ * Check if past critical threshold
64
+ */
65
+ isPastCriticalThreshold(): boolean;
66
+ /**
67
+ * Detect if compaction likely occurred
68
+ */
69
+ detectCompactionEvent(content: string): boolean;
70
+ /**
71
+ * Preserve critical context before compaction
72
+ */
73
+ preserveCriticalContext(): Promise<void>;
74
+ /**
75
+ * Extract tool calls from events
76
+ */
77
+ private extractToolCalls;
78
+ /**
79
+ * Extract key inputs from tool call
80
+ */
81
+ private extractKeyInputs;
82
+ /**
83
+ * Extract key outputs from tool result
84
+ */
85
+ private extractKeyOutputs;
86
+ /**
87
+ * Extract affected files from tool events
88
+ */
89
+ private extractAffectedFiles;
90
+ /**
91
+ * Extract file operations from events
92
+ */
93
+ private extractFileOperations;
94
+ /**
95
+ * Map tool name to file operation type
96
+ */
97
+ private mapToolToOperation;
98
+ /**
99
+ * Extract decisions from events
100
+ */
101
+ private extractDecisions;
102
+ /**
103
+ * Extract error patterns and resolutions
104
+ */
105
+ private extractErrorPatterns;
106
+ /**
107
+ * Restore context after compaction detected
108
+ */
109
+ restoreContext(): Promise<void>;
110
+ /**
111
+ * Get current metrics
112
+ */
113
+ getMetrics(): CompactionMetrics;
114
+ /**
115
+ * Reset token counter (e.g., at session start)
116
+ */
117
+ resetTokenCount(): void;
118
+ }
119
+ //# sourceMappingURL=compaction-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction-handler.d.ts","sourceRoot":"","sources":["../../../../src/core/context/compaction-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAC;AAGjE,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,QAAQ,EAAE,EAAE,CAAC;IACb,OAAO,EAAE;QACP,UAAU,EAAE,eAAe,EAAE,CAAC;QAC9B,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,eAAe,EAAE,aAAa,EAAE,CAAC;QACjC,iBAAiB,EAAE,YAAY,EAAE,CAAC;KACnC,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,gBAAgB,CAAiD;gBAE7D,YAAY,EAAE,YAAY;IAUtC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAYlC;;OAEG;IACH,uBAAuB,IAAI,OAAO;IAIlC;;OAEG;IACH,uBAAuB,IAAI,OAAO;IAIlC;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAgB/C;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwD9C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4B7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAkErC;;OAEG;IACH,UAAU,IAAI,iBAAiB;IAI/B;;OAEG;IACH,eAAe,IAAI,IAAI;CAKxB"}
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Compaction Handler for Claude Code Autocompaction
3
+ * Preserves critical context across token limit boundaries
4
+ */
5
+ import { logger } from '../monitoring/logger.js';
6
+ export class CompactionHandler {
7
+ frameManager;
8
+ metrics;
9
+ tokenAccumulator = 0;
10
+ preservedAnchors = new Map();
11
+ constructor(frameManager) {
12
+ this.frameManager = frameManager;
13
+ this.metrics = {
14
+ estimatedTokens: 0,
15
+ warningThreshold: 150000, // 150K tokens
16
+ criticalThreshold: 170000, // 170K tokens
17
+ anchorsPreserved: 0,
18
+ };
19
+ }
20
+ /**
21
+ * Track token usage from a message
22
+ */
23
+ trackTokens(content) {
24
+ // Rough estimation: 1 token ≈ 4 characters
25
+ const estimatedTokens = Math.ceil(content.length / 4);
26
+ this.tokenAccumulator += estimatedTokens;
27
+ this.metrics.estimatedTokens += estimatedTokens;
28
+ // Check thresholds
29
+ if (this.isApproachingCompaction()) {
30
+ this.preserveCriticalContext();
31
+ }
32
+ }
33
+ /**
34
+ * Check if approaching compaction threshold
35
+ */
36
+ isApproachingCompaction() {
37
+ return this.metrics.estimatedTokens >= this.metrics.warningThreshold;
38
+ }
39
+ /**
40
+ * Check if past critical threshold
41
+ */
42
+ isPastCriticalThreshold() {
43
+ return this.metrics.estimatedTokens >= this.metrics.criticalThreshold;
44
+ }
45
+ /**
46
+ * Detect if compaction likely occurred
47
+ */
48
+ detectCompactionEvent(content) {
49
+ const compactionIndicators = [
50
+ 'earlier in this conversation',
51
+ 'previously discussed',
52
+ 'as mentioned before',
53
+ 'summarized for brevity',
54
+ '[conversation compressed]',
55
+ '[context truncated]',
56
+ ];
57
+ const lowerContent = content.toLowerCase();
58
+ return compactionIndicators.some((indicator) => lowerContent.includes(indicator));
59
+ }
60
+ /**
61
+ * Preserve critical context before compaction
62
+ */
63
+ async preserveCriticalContext() {
64
+ try {
65
+ const currentFrameId = this.frameManager.getCurrentFrameId();
66
+ if (!currentFrameId) {
67
+ logger.warn('No active frame to preserve context from');
68
+ return;
69
+ }
70
+ // Get events from current frame
71
+ const events = this.frameManager.getFrameEvents(currentFrameId);
72
+ // Extract critical information
73
+ const toolCalls = this.extractToolCalls(events);
74
+ const fileOps = this.extractFileOperations(events);
75
+ const decisions = this.extractDecisions(events);
76
+ const errorPatterns = this.extractErrorPatterns(events);
77
+ // Create preservation anchor
78
+ const anchor = {
79
+ anchor_id: `compact_${Date.now()}`,
80
+ type: 'COMPACTION_PRESERVE',
81
+ priority: 10,
82
+ content: {
83
+ tool_calls: toolCalls,
84
+ file_operations: fileOps,
85
+ decisions: decisions,
86
+ error_resolutions: errorPatterns,
87
+ },
88
+ created_at: Date.now(),
89
+ token_estimate: this.metrics.estimatedTokens,
90
+ };
91
+ // Store in frame manager as high-priority anchor
92
+ this.frameManager.addAnchor('CONSTRAINT', // Using CONSTRAINT type for now
93
+ JSON.stringify(anchor), 10, {
94
+ compaction_preserve: true,
95
+ token_count: this.metrics.estimatedTokens,
96
+ }, currentFrameId);
97
+ // Store locally for quick access
98
+ this.preservedAnchors.set(anchor.anchor_id, anchor);
99
+ this.metrics.anchorsPreserved++;
100
+ logger.info(`Preserved critical context at ${this.metrics.estimatedTokens} tokens`);
101
+ }
102
+ catch (error) {
103
+ logger.error('Failed to preserve critical context:', error);
104
+ }
105
+ }
106
+ /**
107
+ * Extract tool calls from events
108
+ */
109
+ extractToolCalls(events) {
110
+ const toolCalls = [];
111
+ const toolEvents = events.filter((e) => e.event_type === 'tool_call');
112
+ for (const event of toolEvents) {
113
+ const resultEvent = events.find((e) => e.event_type === 'tool_result' &&
114
+ e.seq > event.seq &&
115
+ e.payload.tool_name === event.payload.tool_name);
116
+ toolCalls.push({
117
+ tool: event.payload.tool_name || 'unknown',
118
+ timestamp: event.ts,
119
+ key_inputs: this.extractKeyInputs(event.payload),
120
+ key_outputs: resultEvent
121
+ ? this.extractKeyOutputs(resultEvent.payload)
122
+ : {},
123
+ files_affected: this.extractAffectedFiles(event.payload, resultEvent?.payload),
124
+ success: resultEvent ? !resultEvent.payload.error : false,
125
+ error: resultEvent?.payload.error,
126
+ });
127
+ }
128
+ return toolCalls;
129
+ }
130
+ /**
131
+ * Extract key inputs from tool call
132
+ */
133
+ extractKeyInputs(payload) {
134
+ const keys = [
135
+ 'file_path',
136
+ 'command',
137
+ 'query',
138
+ 'path',
139
+ 'pattern',
140
+ 'content',
141
+ ];
142
+ const result = {};
143
+ for (const key of keys) {
144
+ if (payload.arguments?.[key]) {
145
+ result[key] = payload.arguments[key];
146
+ }
147
+ }
148
+ return result;
149
+ }
150
+ /**
151
+ * Extract key outputs from tool result
152
+ */
153
+ extractKeyOutputs(payload) {
154
+ return {
155
+ success: !payload.error,
156
+ error: payload.error,
157
+ result_type: payload.result_type,
158
+ files_created: payload.files_created,
159
+ files_modified: payload.files_modified,
160
+ };
161
+ }
162
+ /**
163
+ * Extract affected files from tool events
164
+ */
165
+ extractAffectedFiles(callPayload, resultPayload) {
166
+ const files = new Set();
167
+ // From tool call
168
+ if (callPayload?.arguments?.file_path) {
169
+ files.add(callPayload.arguments.file_path);
170
+ }
171
+ if (callPayload?.arguments?.path) {
172
+ files.add(callPayload.arguments.path);
173
+ }
174
+ // From tool result
175
+ if (resultPayload?.files_created) {
176
+ resultPayload.files_created.forEach((f) => files.add(f));
177
+ }
178
+ if (resultPayload?.files_modified) {
179
+ resultPayload.files_modified.forEach((f) => files.add(f));
180
+ }
181
+ return Array.from(files);
182
+ }
183
+ /**
184
+ * Extract file operations from events
185
+ */
186
+ extractFileOperations(events) {
187
+ const fileOps = [];
188
+ const fileTools = ['Read', 'Write', 'Edit', 'MultiEdit', 'Delete'];
189
+ const toolEvents = events.filter((e) => e.event_type === 'tool_call' && fileTools.includes(e.payload.tool_name));
190
+ for (const event of toolEvents) {
191
+ const operation = this.mapToolToOperation(event.payload.tool_name);
192
+ const path = event.payload.arguments?.file_path ||
193
+ event.payload.arguments?.path ||
194
+ 'unknown';
195
+ fileOps.push({
196
+ type: operation,
197
+ path: path,
198
+ timestamp: event.ts,
199
+ success: true, // Will be updated from result
200
+ error: undefined,
201
+ });
202
+ }
203
+ return fileOps;
204
+ }
205
+ /**
206
+ * Map tool name to file operation type
207
+ */
208
+ mapToolToOperation(toolName) {
209
+ const mapping = {
210
+ Read: 'read',
211
+ Write: 'write',
212
+ Edit: 'edit',
213
+ MultiEdit: 'edit',
214
+ Delete: 'delete',
215
+ };
216
+ return mapping[toolName] || 'read';
217
+ }
218
+ /**
219
+ * Extract decisions from events
220
+ */
221
+ extractDecisions(events) {
222
+ const decisions = [];
223
+ const decisionEvents = events.filter((e) => e.event_type === 'decision');
224
+ for (const event of decisionEvents) {
225
+ if (event.payload.text) {
226
+ decisions.push(event.payload.text);
227
+ }
228
+ }
229
+ return decisions;
230
+ }
231
+ /**
232
+ * Extract error patterns and resolutions
233
+ */
234
+ extractErrorPatterns(events) {
235
+ const patterns = [];
236
+ // Find tool results with errors
237
+ const errorEvents = events.filter((e) => e.event_type === 'tool_result' && e.payload.error);
238
+ for (const errorEvent of errorEvents) {
239
+ // Look for subsequent successful tool calls that might be resolutions
240
+ const subsequentTools = events
241
+ .filter((e) => e.event_type === 'tool_call' && e.seq > errorEvent.seq)
242
+ .slice(0, 3); // Next 3 tools might be resolution attempts
243
+ if (subsequentTools.length > 0) {
244
+ patterns.push({
245
+ error: errorEvent.payload.error,
246
+ resolution: `Attempted resolution with ${subsequentTools.map((t) => t.payload.tool_name).join(', ')}`,
247
+ tool_sequence: subsequentTools.map((t) => t.payload.tool_name),
248
+ timestamp: errorEvent.ts,
249
+ });
250
+ }
251
+ }
252
+ return patterns;
253
+ }
254
+ /**
255
+ * Restore context after compaction detected
256
+ */
257
+ async restoreContext() {
258
+ if (this.preservedAnchors.size === 0) {
259
+ logger.warn('No preserved anchors to restore from');
260
+ return;
261
+ }
262
+ // Get the most recent anchor
263
+ const anchors = Array.from(this.preservedAnchors.values());
264
+ anchors.sort((a, b) => b.created_at - a.created_at);
265
+ const latestAnchor = anchors[0];
266
+ // Create restoration frame
267
+ const restorationFrame = this.frameManager.createFrame({
268
+ type: 'review',
269
+ name: 'Context Restoration After Compaction',
270
+ inputs: { reason: 'autocompaction_detected' },
271
+ });
272
+ // Add restoration anchor
273
+ this.frameManager.addAnchor('FACT', `Context restored from token position ${latestAnchor.token_estimate}`, 10, { restoration: true }, restorationFrame);
274
+ // Add tool sequence summary
275
+ const toolSequence = latestAnchor.content.tool_calls
276
+ .map((t) => t.tool)
277
+ .join(' → ');
278
+ this.frameManager.addAnchor('FACT', `Tool sequence: ${toolSequence}`, 9, {}, restorationFrame);
279
+ // Add file operations summary
280
+ const files = new Set();
281
+ latestAnchor.content.file_operations.forEach((op) => files.add(op.path));
282
+ if (files.size > 0) {
283
+ this.frameManager.addAnchor('FACT', `Files touched: ${Array.from(files).join(', ')}`, 8, {}, restorationFrame);
284
+ }
285
+ // Add decisions
286
+ for (const decision of latestAnchor.content.decisions) {
287
+ this.frameManager.addAnchor('DECISION', decision, 7, {}, restorationFrame);
288
+ }
289
+ logger.info('Context restored after compaction detection');
290
+ }
291
+ /**
292
+ * Get current metrics
293
+ */
294
+ getMetrics() {
295
+ return { ...this.metrics };
296
+ }
297
+ /**
298
+ * Reset token counter (e.g., at session start)
299
+ */
300
+ resetTokenCount() {
301
+ this.metrics.estimatedTokens = 0;
302
+ this.tokenAccumulator = 0;
303
+ this.metrics.lastCompactionAt = undefined;
304
+ }
305
+ }
306
+ //# sourceMappingURL=compaction-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction-handler.js","sourceRoot":"","sources":["../../../../src/core/context/compaction-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Model-Aware Compaction Handler
3
+ * Dynamically adjusts thresholds based on detected Claude model
4
+ */
5
+ export interface ModelProfile {
6
+ name: string;
7
+ contextWindow: number;
8
+ outputLimit: number;
9
+ warningThreshold: number;
10
+ criticalThreshold: number;
11
+ compactionZone: number;
12
+ characteristics: {
13
+ supportsLongContext: boolean;
14
+ betaFeatures?: string[];
15
+ costTier: 'low' | 'medium' | 'high' | 'premium';
16
+ };
17
+ }
18
+ export interface ModelDetectionResult {
19
+ detectedModel: string;
20
+ confidence: number;
21
+ profile: ModelProfile;
22
+ source: 'header' | 'behavior' | 'default';
23
+ }
24
+ export declare class ModelAwareCompactionHandler {
25
+ private static readonly MODEL_PROFILES;
26
+ private currentModel;
27
+ private detectionHistory;
28
+ private tokenEstimate;
29
+ constructor();
30
+ /**
31
+ * Detect model from various signals
32
+ */
33
+ detectModel(signals: {
34
+ headers?: Record<string, string>;
35
+ responsePatterns?: string;
36
+ tokenCount?: number;
37
+ outputLength?: number;
38
+ }): ModelDetectionResult;
39
+ /**
40
+ * Normalize model name to match our profiles
41
+ */
42
+ private normalizeModelName;
43
+ /**
44
+ * Get adaptive thresholds based on current model
45
+ */
46
+ getAdaptiveThresholds(): {
47
+ warning: number;
48
+ critical: number;
49
+ compaction: number;
50
+ };
51
+ /**
52
+ * Calculate preservation strategy based on model
53
+ */
54
+ getPreservationStrategy(): {
55
+ aggressiveness: 'minimal' | 'balanced' | 'aggressive';
56
+ preserveRatio: number;
57
+ compressionLevel: 'light' | 'moderate' | 'heavy';
58
+ };
59
+ /**
60
+ * Estimate tokens more accurately based on model
61
+ */
62
+ estimateTokens(text: string): number;
63
+ /**
64
+ * Check if approaching any threshold
65
+ */
66
+ checkThresholds(currentTokens: number): {
67
+ status: 'safe' | 'warning' | 'critical' | 'compaction';
68
+ percentage: number;
69
+ tokensRemaining: number;
70
+ recommendation: string;
71
+ };
72
+ /**
73
+ * Get model-specific compaction hints
74
+ */
75
+ getCompactionHints(): string[];
76
+ /**
77
+ * Suggest optimal preservation points based on model
78
+ */
79
+ getSuggestedPreservationPoints(): number[];
80
+ /**
81
+ * Get current model profile
82
+ */
83
+ getCurrentModel(): ModelProfile;
84
+ /**
85
+ * Get detection history for diagnostics
86
+ */
87
+ getDetectionHistory(): ModelDetectionResult[];
88
+ /**
89
+ * Update model manually (for testing or override)
90
+ */
91
+ setModel(modelKey: string): boolean;
92
+ /**
93
+ * Export model profiles for reference
94
+ */
95
+ static getAvailableModels(): string[];
96
+ /**
97
+ * Get specific model profile
98
+ */
99
+ static getModelProfile(modelKey: string): ModelProfile | undefined;
100
+ }
101
+ //# sourceMappingURL=model-aware-compaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-aware-compaction.d.ts","sourceRoot":"","sources":["../../../../src/core/context/model-aware-compaction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IAEpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE;QACf,mBAAmB,EAAE,OAAO,CAAC;QAC7B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;KACjD,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;CAC3C;AAED,qBAAa,2BAA2B;IACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAqRpC;IAEF,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,aAAa,CAAa;;IAQlC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,oBAAoB;IA4FxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmD1B;;OAEG;IACH,qBAAqB,IAAI;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB;IAQD;;OAEG;IACH,uBAAuB,IAAI;QACzB,cAAc,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;QACtD,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;KAClD;IA4BD;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAyCpC;;OAEG;IACH,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG;QACtC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;QACvD,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;KACxB;IAkCD;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAuC9B;;OAEG;IACH,8BAA8B,IAAI,MAAM,EAAE;IAwB1C;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,mBAAmB,IAAI,oBAAoB,EAAE;IAI7C;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAUnC;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,MAAM,EAAE;IAIrC;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;CAGnE"}