@wolfx/opencode-magic-context 0.22.3 → 0.23.0

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 (195) hide show
  1. package/dist/agents/magic-context-prompt.d.ts +1 -1
  2. package/dist/agents/magic-context-prompt.d.ts.map +1 -1
  3. package/dist/agents/permissions.d.ts +4 -4
  4. package/dist/agents/permissions.d.ts.map +1 -1
  5. package/dist/config/index.d.ts.map +1 -1
  6. package/dist/config/project-security.d.ts +30 -0
  7. package/dist/config/project-security.d.ts.map +1 -0
  8. package/dist/config/prune-config-leaf.d.ts +27 -0
  9. package/dist/config/prune-config-leaf.d.ts.map +1 -0
  10. package/dist/config/schema/magic-context.d.ts +7 -13
  11. package/dist/config/schema/magic-context.d.ts.map +1 -1
  12. package/dist/config/variable.d.ts.map +1 -1
  13. package/dist/features/magic-context/compartment-storage.d.ts +9 -6
  14. package/dist/features/magic-context/compartment-storage.d.ts.map +1 -1
  15. package/dist/features/magic-context/dreamer/runner.d.ts.map +1 -1
  16. package/dist/features/magic-context/dreamer/scheduler.d.ts.map +1 -1
  17. package/dist/features/magic-context/dreamer/task-prompts.d.ts +1 -1
  18. package/dist/features/magic-context/dreamer/task-prompts.d.ts.map +1 -1
  19. package/dist/features/magic-context/key-files/aft-availability.d.ts.map +1 -1
  20. package/dist/features/magic-context/key-files/identify-key-files.d.ts.map +1 -1
  21. package/dist/features/magic-context/key-files/read-stats.d.ts +0 -2
  22. package/dist/features/magic-context/key-files/read-stats.d.ts.map +1 -1
  23. package/dist/features/magic-context/memory/constants.d.ts +7 -0
  24. package/dist/features/magic-context/memory/constants.d.ts.map +1 -1
  25. package/dist/features/magic-context/memory/embedding-openai.d.ts.map +1 -1
  26. package/dist/features/magic-context/memory/embedding-ssrf.d.ts +29 -0
  27. package/dist/features/magic-context/memory/embedding-ssrf.d.ts.map +1 -0
  28. package/dist/features/magic-context/memory/memory-migration.d.ts.map +1 -1
  29. package/dist/features/magic-context/memory/project-identity.d.ts +10 -0
  30. package/dist/features/magic-context/memory/project-identity.d.ts.map +1 -1
  31. package/dist/features/magic-context/migrations.d.ts.map +1 -1
  32. package/dist/features/magic-context/project-docs-hash.d.ts.map +1 -1
  33. package/dist/features/magic-context/project-embedding-registry.d.ts.map +1 -1
  34. package/dist/features/magic-context/range-parser.d.ts +6 -0
  35. package/dist/features/magic-context/range-parser.d.ts.map +1 -1
  36. package/dist/features/magic-context/sidekick/agent.d.ts.map +1 -1
  37. package/dist/features/magic-context/storage-db.d.ts +1 -1
  38. package/dist/features/magic-context/storage-db.d.ts.map +1 -1
  39. package/dist/features/magic-context/storage-meta-persisted.d.ts +124 -16
  40. package/dist/features/magic-context/storage-meta-persisted.d.ts.map +1 -1
  41. package/dist/features/magic-context/storage-meta-session.d.ts.map +1 -1
  42. package/dist/features/magic-context/storage-meta-shared.d.ts +15 -1
  43. package/dist/features/magic-context/storage-meta-shared.d.ts.map +1 -1
  44. package/dist/features/magic-context/storage-meta.d.ts +1 -1
  45. package/dist/features/magic-context/storage-meta.d.ts.map +1 -1
  46. package/dist/features/magic-context/storage-notes.d.ts.map +1 -1
  47. package/dist/features/magic-context/storage-tags.d.ts +118 -1
  48. package/dist/features/magic-context/storage-tags.d.ts.map +1 -1
  49. package/dist/features/magic-context/storage.d.ts +3 -3
  50. package/dist/features/magic-context/storage.d.ts.map +1 -1
  51. package/dist/features/magic-context/tagger.d.ts +12 -2
  52. package/dist/features/magic-context/tagger.d.ts.map +1 -1
  53. package/dist/features/magic-context/tool-definition-tokens.d.ts +21 -0
  54. package/dist/features/magic-context/tool-definition-tokens.d.ts.map +1 -1
  55. package/dist/features/magic-context/tool-owner-backfill.d.ts +2 -1
  56. package/dist/features/magic-context/tool-owner-backfill.d.ts.map +1 -1
  57. package/dist/features/magic-context/types.d.ts +12 -0
  58. package/dist/features/magic-context/types.d.ts.map +1 -1
  59. package/dist/features/magic-context/user-memory/review-user-memories.d.ts.map +1 -1
  60. package/dist/hooks/magic-context/auto-search-runner.d.ts.map +1 -1
  61. package/dist/hooks/magic-context/channel2-delivery.d.ts +22 -0
  62. package/dist/hooks/magic-context/channel2-delivery.d.ts.map +1 -0
  63. package/dist/hooks/magic-context/command-handler.d.ts +1 -7
  64. package/dist/hooks/magic-context/command-handler.d.ts.map +1 -1
  65. package/dist/hooks/magic-context/compaction-marker-manager.d.ts +1 -1
  66. package/dist/hooks/magic-context/compaction-marker-manager.d.ts.map +1 -1
  67. package/dist/hooks/magic-context/compartment-runner-historian.d.ts.map +1 -1
  68. package/dist/hooks/magic-context/compartment-runner-incremental.d.ts.map +1 -1
  69. package/dist/hooks/magic-context/compartment-runner-partial-recomp.d.ts.map +1 -1
  70. package/dist/hooks/magic-context/compartment-runner-recomp.d.ts.map +1 -1
  71. package/dist/hooks/magic-context/compartment-runner-types.d.ts +5 -0
  72. package/dist/hooks/magic-context/compartment-runner-types.d.ts.map +1 -1
  73. package/dist/hooks/magic-context/compartment-runner-validation.d.ts +25 -0
  74. package/dist/hooks/magic-context/compartment-runner-validation.d.ts.map +1 -1
  75. package/dist/hooks/magic-context/compartment-runner.d.ts.map +1 -1
  76. package/dist/hooks/magic-context/compartment-trigger.d.ts +47 -2
  77. package/dist/hooks/magic-context/compartment-trigger.d.ts.map +1 -1
  78. package/dist/hooks/magic-context/ctx-reduce-nudge.d.ts +117 -0
  79. package/dist/hooks/magic-context/ctx-reduce-nudge.d.ts.map +1 -0
  80. package/dist/hooks/magic-context/decay-render.d.ts.map +1 -1
  81. package/dist/hooks/magic-context/drop-stale-reduce-calls.d.ts +36 -1
  82. package/dist/hooks/magic-context/drop-stale-reduce-calls.d.ts.map +1 -1
  83. package/dist/hooks/magic-context/emergency-drop.d.ts +86 -0
  84. package/dist/hooks/magic-context/emergency-drop.d.ts.map +1 -0
  85. package/dist/hooks/magic-context/event-handler.d.ts +6 -4
  86. package/dist/hooks/magic-context/event-handler.d.ts.map +1 -1
  87. package/dist/hooks/magic-context/execute-flush.d.ts.map +1 -1
  88. package/dist/hooks/magic-context/execute-status.d.ts +1 -1
  89. package/dist/hooks/magic-context/execute-status.d.ts.map +1 -1
  90. package/dist/hooks/magic-context/heuristic-cleanup.d.ts +10 -3
  91. package/dist/hooks/magic-context/heuristic-cleanup.d.ts.map +1 -1
  92. package/dist/hooks/magic-context/hook-handlers.d.ts +3 -9
  93. package/dist/hooks/magic-context/hook-handlers.d.ts.map +1 -1
  94. package/dist/hooks/magic-context/hook.d.ts +3 -5
  95. package/dist/hooks/magic-context/hook.d.ts.map +1 -1
  96. package/dist/hooks/magic-context/inject-compartments.d.ts +41 -0
  97. package/dist/hooks/magic-context/inject-compartments.d.ts.map +1 -1
  98. package/dist/hooks/magic-context/note-visibility.d.ts +1 -1
  99. package/dist/hooks/magic-context/protected-tail-boundary.d.ts +132 -0
  100. package/dist/hooks/magic-context/protected-tail-boundary.d.ts.map +1 -0
  101. package/dist/hooks/magic-context/read-session-chunk.d.ts +55 -0
  102. package/dist/hooks/magic-context/read-session-chunk.d.ts.map +1 -1
  103. package/dist/hooks/magic-context/read-session-formatting.d.ts.map +1 -1
  104. package/dist/hooks/magic-context/read-session-raw.d.ts +91 -0
  105. package/dist/hooks/magic-context/read-session-raw.d.ts.map +1 -1
  106. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts +70 -0
  107. package/dist/hooks/magic-context/read-session-true-raw-tokens.d.ts.map +1 -0
  108. package/dist/hooks/magic-context/reference-retrieval.d.ts.map +1 -1
  109. package/dist/hooks/magic-context/send-session-notification.d.ts +2 -1
  110. package/dist/hooks/magic-context/send-session-notification.d.ts.map +1 -1
  111. package/dist/hooks/magic-context/system-prompt-hash.d.ts +0 -1
  112. package/dist/hooks/magic-context/system-prompt-hash.d.ts.map +1 -1
  113. package/dist/hooks/magic-context/tag-messages.d.ts +3 -0
  114. package/dist/hooks/magic-context/tag-messages.d.ts.map +1 -1
  115. package/dist/hooks/magic-context/todo-view.d.ts +1 -1
  116. package/dist/hooks/magic-context/tool-drop-target.d.ts +9 -0
  117. package/dist/hooks/magic-context/tool-drop-target.d.ts.map +1 -1
  118. package/dist/hooks/magic-context/transform-compartment-phase.d.ts +15 -0
  119. package/dist/hooks/magic-context/transform-compartment-phase.d.ts.map +1 -1
  120. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts +9 -11
  121. package/dist/hooks/magic-context/transform-postprocess-phase.d.ts.map +1 -1
  122. package/dist/hooks/magic-context/transform.d.ts +22 -9
  123. package/dist/hooks/magic-context/transform.d.ts.map +1 -1
  124. package/dist/hooks/magic-context/upgrade-reminder.d.ts +2 -1
  125. package/dist/hooks/magic-context/upgrade-reminder.d.ts.map +1 -1
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +5915 -1336
  128. package/dist/plugin/conflict-warning-hook.d.ts.map +1 -1
  129. package/dist/plugin/embedding-bootstrap-helpers.d.ts.map +1 -1
  130. package/dist/plugin/hooks/create-session-hooks.d.ts +1 -1
  131. package/dist/plugin/hooks/create-session-hooks.d.ts.map +1 -1
  132. package/dist/plugin/rpc-handlers.d.ts.map +1 -1
  133. package/dist/plugin/tool-registry.d.ts.map +1 -1
  134. package/dist/shared/announcement.d.ts +4 -6
  135. package/dist/shared/announcement.d.ts.map +1 -1
  136. package/dist/shared/keep-subagents.d.ts +7 -0
  137. package/dist/shared/keep-subagents.d.ts.map +1 -0
  138. package/dist/shared/live-server-client.d.ts +50 -0
  139. package/dist/shared/live-server-client.d.ts.map +1 -0
  140. package/dist/shared/prompt-context.d.ts +31 -0
  141. package/dist/shared/prompt-context.d.ts.map +1 -0
  142. package/dist/shared/rpc-server.d.ts.map +1 -1
  143. package/dist/shared/rpc-types.d.ts +0 -3
  144. package/dist/shared/rpc-types.d.ts.map +1 -1
  145. package/dist/shared/safe-notification-target.d.ts +23 -0
  146. package/dist/shared/safe-notification-target.d.ts.map +1 -0
  147. package/dist/shared/tag-transcript.d.ts.map +1 -1
  148. package/dist/shared/transcript-opencode.d.ts.map +1 -1
  149. package/dist/shared/transcript.d.ts +15 -1
  150. package/dist/shared/transcript.d.ts.map +1 -1
  151. package/dist/tools/ctx-expand/constants.d.ts +1 -1
  152. package/dist/tools/ctx-expand/constants.d.ts.map +1 -1
  153. package/dist/tools/ctx-expand/tools.d.ts.map +1 -1
  154. package/dist/tools/ctx-memory/constants.d.ts +1 -1
  155. package/dist/tools/ctx-memory/constants.d.ts.map +1 -1
  156. package/dist/tools/ctx-memory/tools.d.ts.map +1 -1
  157. package/dist/tools/ctx-memory/types.d.ts +7 -3
  158. package/dist/tools/ctx-memory/types.d.ts.map +1 -1
  159. package/dist/tools/ctx-note/constants.d.ts +1 -1
  160. package/dist/tools/ctx-note/constants.d.ts.map +1 -1
  161. package/dist/tools/ctx-note/tools.d.ts.map +1 -1
  162. package/dist/tools/ctx-note/types.d.ts +4 -0
  163. package/dist/tools/ctx-note/types.d.ts.map +1 -1
  164. package/dist/tools/ctx-search/constants.d.ts +1 -1
  165. package/dist/tools/ctx-search/constants.d.ts.map +1 -1
  166. package/dist/tools/ctx-search/tools.d.ts.map +1 -1
  167. package/dist/tui/data/context-db.d.ts.map +1 -1
  168. package/package.json +3 -1
  169. package/src/shared/announcement.test.ts +18 -0
  170. package/src/shared/announcement.ts +35 -20
  171. package/src/shared/keep-subagents.test.ts +39 -0
  172. package/src/shared/keep-subagents.ts +33 -0
  173. package/src/shared/live-server-client.ts +152 -0
  174. package/src/shared/prompt-context.ts +135 -0
  175. package/src/shared/rpc-server.ts +18 -2
  176. package/src/shared/rpc-types.ts +0 -3
  177. package/src/shared/safe-notification-target.test.ts +97 -0
  178. package/src/shared/safe-notification-target.ts +102 -0
  179. package/src/shared/tag-transcript.test.ts +34 -8
  180. package/src/shared/tag-transcript.ts +110 -8
  181. package/src/shared/transcript-opencode.ts +15 -5
  182. package/src/shared/transcript.ts +20 -2
  183. package/src/tui/data/context-db.ts +0 -3
  184. package/src/tui/index.tsx +11 -10
  185. package/src/tui/slots/sidebar-content.tsx +1 -26
  186. package/dist/hooks/magic-context/apply-context-nudge.d.ts +0 -5
  187. package/dist/hooks/magic-context/apply-context-nudge.d.ts.map +0 -1
  188. package/dist/hooks/magic-context/nudge-bands.d.ts +0 -6
  189. package/dist/hooks/magic-context/nudge-bands.d.ts.map +0 -1
  190. package/dist/hooks/magic-context/nudge-injection.d.ts +0 -7
  191. package/dist/hooks/magic-context/nudge-injection.d.ts.map +0 -1
  192. package/dist/hooks/magic-context/nudge-placement-store.d.ts +0 -15
  193. package/dist/hooks/magic-context/nudge-placement-store.d.ts.map +0 -1
  194. package/dist/hooks/magic-context/nudger.d.ts +0 -21
  195. package/dist/hooks/magic-context/nudger.d.ts.map +0 -1
@@ -1,6 +0,0 @@
1
- export type RollingNudgeBand = "far" | "near" | "urgent" | "critical";
2
- export declare function getRollingNudgeBand(percentage: number, executeThresholdPercentage: number): RollingNudgeBand;
3
- export declare function getRollingNudgeBandPriority(band: RollingNudgeBand | null): number;
4
- export declare function formatRollingNudgeBand(band: RollingNudgeBand | null): string;
5
- export declare function getRollingNudgeIntervalTokens(baseIntervalTokens: number, band: RollingNudgeBand): number;
6
- //# sourceMappingURL=nudge-bands.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nudge-bands.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/nudge-bands.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEtE,wBAAgB,mBAAmB,CAC/B,UAAU,EAAE,MAAM,EAClB,0BAA0B,EAAE,MAAM,GACnC,gBAAgB,CAWlB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,GAAG,MAAM,CAajF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,GAAG,MAAM,CAE5E;AAED,wBAAgB,6BAA6B,CACzC,kBAAkB,EAAE,MAAM,EAC1B,IAAI,EAAE,gBAAgB,GACvB,MAAM,CAWR"}
@@ -1,7 +0,0 @@
1
- import type { NudgePlacementStore } from "./nudge-placement-store";
2
- import type { MessageLike } from "./tag-messages";
3
- export declare function reinjectNudgeAtAnchor(messages: MessageLike[], nudgeText: string, nudgePlacements: NudgePlacementStore, sessionId: string): boolean;
4
- export declare function appendNudgeToAssistant(messages: MessageLike[], nudge: string, nudgePlacements: NudgePlacementStore, sessionId: string): void;
5
- export declare function appendSupplementalNudgeToAssistant(messages: MessageLike[], nudge: string, nudgePlacements: NudgePlacementStore, sessionId: string): boolean;
6
- export declare function canAppendSupplementalNudgeToAssistant(messages: MessageLike[], nudgePlacements: NudgePlacementStore, sessionId: string): boolean;
7
- //# sourceMappingURL=nudge-injection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nudge-injection.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/nudge-injection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA6ElD,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,mBAAmB,EACpC,SAAS,EAAE,MAAM,GAClB,OAAO,CA+CT;AAED,wBAAgB,sBAAsB,CAClC,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,mBAAmB,EACpC,SAAS,EAAE,MAAM,GAClB,IAAI,CAmDN;AAED,wBAAgB,kCAAkC,CAC9C,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,mBAAmB,EACpC,SAAS,EAAE,MAAM,GAClB,OAAO,CA4BT;AAED,wBAAgB,qCAAqC,CACjD,QAAQ,EAAE,WAAW,EAAE,EACvB,eAAe,EAAE,mBAAmB,EACpC,SAAS,EAAE,MAAM,GAClB,OAAO,CAMT"}
@@ -1,15 +0,0 @@
1
- import type { Database } from "../../shared/sqlite";
2
- interface NudgePlacement {
3
- messageId: string;
4
- nudgeText: string;
5
- }
6
- export interface NudgePlacementStore {
7
- set(sessionId: string, messageId: string, nudgeText: string): void;
8
- get(sessionId: string): NudgePlacement | null;
9
- clear(sessionId: string, options?: {
10
- persist?: boolean;
11
- }): void;
12
- }
13
- export declare function createNudgePlacementStore(db?: Database): NudgePlacementStore;
14
- export {};
15
- //# sourceMappingURL=nudge-placement-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nudge-placement-store.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/nudge-placement-store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,UAAU,cAAc;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAChC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACnE,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAC9C,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CACnE;AAED,wBAAgB,yBAAyB,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,mBAAmB,CAgC5E"}
@@ -1,21 +0,0 @@
1
- import { getOrCreateSessionMeta, type getTopNBySize } from "../../features/magic-context/storage";
2
- import type { ContextUsage, SessionMeta, TagEntry } from "../../features/magic-context/types";
3
- type ContextDatabase = Parameters<typeof getOrCreateSessionMeta>[0];
4
- export type ContextNudge = {
5
- type: "assistant";
6
- text: string;
7
- };
8
- export declare const RECENT_CTX_REDUCE_WINDOW_MS: number;
9
- export declare function createNudger(config: {
10
- protected_tags: number;
11
- nudge_interval_tokens: number;
12
- iteration_nudge_threshold: number;
13
- execute_threshold_percentage: number | {
14
- default: number;
15
- [modelKey: string]: number;
16
- };
17
- now?: () => number;
18
- recentReduceBySession?: Map<string, number>;
19
- }): (sessionId: string, contextUsage: ContextUsage, db: ContextDatabase, topNFn: typeof getTopNBySize, preloadedTags?: TagEntry[], messagesSinceLastUser?: number, preloadedSessionMeta?: SessionMeta) => ContextNudge | null;
20
- export {};
21
- //# sourceMappingURL=nudger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nudger.d.ts","sourceRoot":"","sources":["../../../src/hooks/magic-context/nudger.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,sBAAsB,EAEtB,KAAK,aAAa,EAErB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAY9F,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/D,eAAO,MAAM,2BAA2B,QAAgB,CAAC;AA+BzD,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,yBAAyB,EAAE,MAAM,CAAC;IAClC,4BAA4B,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACvF,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C,IAIO,WAAW,MAAM,EACjB,cAAc,YAAY,EAC1B,IAAI,eAAe,EACnB,QAAQ,OAAO,aAAa,EAC5B,gBAAgB,QAAQ,EAAE,EAC1B,wBAAwB,MAAM,EAC9B,uBAAuB,WAAW,KACnC,YAAY,GAAG,IAAI,CA2IzB"}