@diyor28/context 1.0.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 (280) hide show
  1. package/README.md +270 -0
  2. package/dist/__tests__/attachment-selector.test.d.ts +11 -0
  3. package/dist/__tests__/attachment-selector.test.d.ts.map +1 -0
  4. package/dist/__tests__/attachment-selector.test.js +449 -0
  5. package/dist/__tests__/attachment-selector.test.js.map +1 -0
  6. package/dist/__tests__/cache-breakpoints.test.d.ts +11 -0
  7. package/dist/__tests__/cache-breakpoints.test.d.ts.map +1 -0
  8. package/dist/__tests__/cache-breakpoints.test.js +398 -0
  9. package/dist/__tests__/cache-breakpoints.test.js.map +1 -0
  10. package/dist/__tests__/codecs.test.d.ts +7 -0
  11. package/dist/__tests__/codecs.test.d.ts.map +1 -0
  12. package/dist/__tests__/codecs.test.js +331 -0
  13. package/dist/__tests__/codecs.test.js.map +1 -0
  14. package/dist/__tests__/compactor.test.d.ts +11 -0
  15. package/dist/__tests__/compactor.test.d.ts.map +1 -0
  16. package/dist/__tests__/compactor.test.js +519 -0
  17. package/dist/__tests__/compactor.test.js.map +1 -0
  18. package/dist/__tests__/context-graph.test.d.ts +7 -0
  19. package/dist/__tests__/context-graph.test.d.ts.map +1 -0
  20. package/dist/__tests__/context-graph.test.js +262 -0
  21. package/dist/__tests__/context-graph.test.js.map +1 -0
  22. package/dist/__tests__/hash.test.d.ts +7 -0
  23. package/dist/__tests__/hash.test.d.ts.map +1 -0
  24. package/dist/__tests__/hash.test.js +228 -0
  25. package/dist/__tests__/hash.test.js.map +1 -0
  26. package/dist/__tests__/integration.test.d.ts +15 -0
  27. package/dist/__tests__/integration.test.d.ts.map +1 -0
  28. package/dist/__tests__/integration.test.js +728 -0
  29. package/dist/__tests__/integration.test.js.map +1 -0
  30. package/dist/__tests__/kind-order.test.d.ts +7 -0
  31. package/dist/__tests__/kind-order.test.d.ts.map +1 -0
  32. package/dist/__tests__/kind-order.test.js +243 -0
  33. package/dist/__tests__/kind-order.test.js.map +1 -0
  34. package/dist/__tests__/phase2-integration.test.d.ts +5 -0
  35. package/dist/__tests__/phase2-integration.test.d.ts.map +1 -0
  36. package/dist/__tests__/phase2-integration.test.js +222 -0
  37. package/dist/__tests__/phase2-integration.test.js.map +1 -0
  38. package/dist/__tests__/queries.test.d.ts +7 -0
  39. package/dist/__tests__/queries.test.d.ts.map +1 -0
  40. package/dist/__tests__/queries.test.js +254 -0
  41. package/dist/__tests__/queries.test.js.map +1 -0
  42. package/dist/__tests__/token-estimator.test.d.ts +7 -0
  43. package/dist/__tests__/token-estimator.test.d.ts.map +1 -0
  44. package/dist/__tests__/token-estimator.test.js +267 -0
  45. package/dist/__tests__/token-estimator.test.js.map +1 -0
  46. package/dist/adapters/anthropic-estimator.d.ts +38 -0
  47. package/dist/adapters/anthropic-estimator.d.ts.map +1 -0
  48. package/dist/adapters/anthropic-estimator.js +108 -0
  49. package/dist/adapters/anthropic-estimator.js.map +1 -0
  50. package/dist/adapters/attachment-resolver.d.ts +96 -0
  51. package/dist/adapters/attachment-resolver.d.ts.map +1 -0
  52. package/dist/adapters/attachment-resolver.js +176 -0
  53. package/dist/adapters/attachment-resolver.js.map +1 -0
  54. package/dist/adapters/attachment-selector.d.ts +59 -0
  55. package/dist/adapters/attachment-selector.d.ts.map +1 -0
  56. package/dist/adapters/attachment-selector.js +163 -0
  57. package/dist/adapters/attachment-selector.js.map +1 -0
  58. package/dist/adapters/gemini-estimator.d.ts +27 -0
  59. package/dist/adapters/gemini-estimator.d.ts.map +1 -0
  60. package/dist/adapters/gemini-estimator.js +80 -0
  61. package/dist/adapters/gemini-estimator.js.map +1 -0
  62. package/dist/adapters/index.d.ts +12 -0
  63. package/dist/adapters/index.d.ts.map +1 -0
  64. package/dist/adapters/index.js +28 -0
  65. package/dist/adapters/index.js.map +1 -0
  66. package/dist/adapters/memory-store.d.ts +139 -0
  67. package/dist/adapters/memory-store.d.ts.map +1 -0
  68. package/dist/adapters/memory-store.js +187 -0
  69. package/dist/adapters/memory-store.js.map +1 -0
  70. package/dist/adapters/openai-estimator.d.ts +35 -0
  71. package/dist/adapters/openai-estimator.d.ts.map +1 -0
  72. package/dist/adapters/openai-estimator.js +89 -0
  73. package/dist/adapters/openai-estimator.js.map +1 -0
  74. package/dist/adapters/summarizer.d.ts +121 -0
  75. package/dist/adapters/summarizer.d.ts.map +1 -0
  76. package/dist/adapters/summarizer.js +121 -0
  77. package/dist/adapters/summarizer.js.map +1 -0
  78. package/dist/adapters/token-estimator.d.ts +63 -0
  79. package/dist/adapters/token-estimator.d.ts.map +1 -0
  80. package/dist/adapters/token-estimator.js +37 -0
  81. package/dist/adapters/token-estimator.js.map +1 -0
  82. package/dist/builder/context-builder.d.ts +186 -0
  83. package/dist/builder/context-builder.d.ts.map +1 -0
  84. package/dist/builder/context-builder.js +305 -0
  85. package/dist/builder/context-builder.js.map +1 -0
  86. package/dist/builder/context-fork.d.ts +166 -0
  87. package/dist/builder/context-fork.d.ts.map +1 -0
  88. package/dist/builder/context-fork.js +282 -0
  89. package/dist/builder/context-fork.js.map +1 -0
  90. package/dist/builder/index.d.ts +6 -0
  91. package/dist/builder/index.d.ts.map +1 -0
  92. package/dist/builder/index.js +22 -0
  93. package/dist/builder/index.js.map +1 -0
  94. package/dist/codecs/base.d.ts +18 -0
  95. package/dist/codecs/base.d.ts.map +1 -0
  96. package/dist/codecs/base.js +39 -0
  97. package/dist/codecs/base.js.map +1 -0
  98. package/dist/codecs/conversation-history.codec.d.ts +81 -0
  99. package/dist/codecs/conversation-history.codec.d.ts.map +1 -0
  100. package/dist/codecs/conversation-history.codec.js +89 -0
  101. package/dist/codecs/conversation-history.codec.js.map +1 -0
  102. package/dist/codecs/index.d.ts +31 -0
  103. package/dist/codecs/index.d.ts.map +1 -0
  104. package/dist/codecs/index.js +71 -0
  105. package/dist/codecs/index.js.map +1 -0
  106. package/dist/codecs/redacted-stub.codec.d.ts +32 -0
  107. package/dist/codecs/redacted-stub.codec.d.ts.map +1 -0
  108. package/dist/codecs/redacted-stub.codec.js +64 -0
  109. package/dist/codecs/redacted-stub.codec.js.map +1 -0
  110. package/dist/codecs/structured-reference.codec.d.ts +40 -0
  111. package/dist/codecs/structured-reference.codec.d.ts.map +1 -0
  112. package/dist/codecs/structured-reference.codec.js +81 -0
  113. package/dist/codecs/structured-reference.codec.js.map +1 -0
  114. package/dist/codecs/system-rules.codec.d.ts +32 -0
  115. package/dist/codecs/system-rules.codec.d.ts.map +1 -0
  116. package/dist/codecs/system-rules.codec.js +62 -0
  117. package/dist/codecs/system-rules.codec.js.map +1 -0
  118. package/dist/codecs/tool-output.codec.d.ts +66 -0
  119. package/dist/codecs/tool-output.codec.d.ts.map +1 -0
  120. package/dist/codecs/tool-output.codec.js +95 -0
  121. package/dist/codecs/tool-output.codec.js.map +1 -0
  122. package/dist/codecs/tool-schema.codec.d.ts +36 -0
  123. package/dist/codecs/tool-schema.codec.d.ts.map +1 -0
  124. package/dist/codecs/tool-schema.codec.js +74 -0
  125. package/dist/codecs/tool-schema.codec.js.map +1 -0
  126. package/dist/codecs/unsafe-text.codec.d.ts +28 -0
  127. package/dist/codecs/unsafe-text.codec.d.ts.map +1 -0
  128. package/dist/codecs/unsafe-text.codec.js +63 -0
  129. package/dist/codecs/unsafe-text.codec.js.map +1 -0
  130. package/dist/graph/context-graph.d.ts +121 -0
  131. package/dist/graph/context-graph.d.ts.map +1 -0
  132. package/dist/graph/context-graph.js +166 -0
  133. package/dist/graph/context-graph.js.map +1 -0
  134. package/dist/graph/index.d.ts +8 -0
  135. package/dist/graph/index.d.ts.map +1 -0
  136. package/dist/graph/index.js +24 -0
  137. package/dist/graph/index.js.map +1 -0
  138. package/dist/graph/kind-order.d.ts +60 -0
  139. package/dist/graph/kind-order.d.ts.map +1 -0
  140. package/dist/graph/kind-order.js +113 -0
  141. package/dist/graph/kind-order.js.map +1 -0
  142. package/dist/graph/queries.d.ts +68 -0
  143. package/dist/graph/queries.d.ts.map +1 -0
  144. package/dist/graph/queries.js +240 -0
  145. package/dist/graph/queries.js.map +1 -0
  146. package/dist/graph/views.d.ts +90 -0
  147. package/dist/graph/views.d.ts.map +1 -0
  148. package/dist/graph/views.js +173 -0
  149. package/dist/graph/views.js.map +1 -0
  150. package/dist/index.d.ts +16 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +40 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/pipeline/compactor.d.ts +128 -0
  155. package/dist/pipeline/compactor.d.ts.map +1 -0
  156. package/dist/pipeline/compactor.js +346 -0
  157. package/dist/pipeline/compactor.js.map +1 -0
  158. package/dist/pipeline/index.d.ts +6 -0
  159. package/dist/pipeline/index.d.ts.map +1 -0
  160. package/dist/pipeline/index.js +22 -0
  161. package/dist/pipeline/index.js.map +1 -0
  162. package/dist/pipeline/summarizer.d.ts +18 -0
  163. package/dist/pipeline/summarizer.d.ts.map +1 -0
  164. package/dist/pipeline/summarizer.js +68 -0
  165. package/dist/pipeline/summarizer.js.map +1 -0
  166. package/dist/policies/default-policy.d.ts +29 -0
  167. package/dist/policies/default-policy.d.ts.map +1 -0
  168. package/dist/policies/default-policy.js +58 -0
  169. package/dist/policies/default-policy.js.map +1 -0
  170. package/dist/policies/index.d.ts +5 -0
  171. package/dist/policies/index.d.ts.map +1 -0
  172. package/dist/policies/index.js +21 -0
  173. package/dist/policies/index.js.map +1 -0
  174. package/dist/providers/anthropic-compiler.d.ts +58 -0
  175. package/dist/providers/anthropic-compiler.d.ts.map +1 -0
  176. package/dist/providers/anthropic-compiler.js +182 -0
  177. package/dist/providers/anthropic-compiler.js.map +1 -0
  178. package/dist/providers/capabilities.d.ts +54 -0
  179. package/dist/providers/capabilities.d.ts.map +1 -0
  180. package/dist/providers/capabilities.js +87 -0
  181. package/dist/providers/capabilities.js.map +1 -0
  182. package/dist/providers/gemini-compiler.d.ts +51 -0
  183. package/dist/providers/gemini-compiler.d.ts.map +1 -0
  184. package/dist/providers/gemini-compiler.js +206 -0
  185. package/dist/providers/gemini-compiler.js.map +1 -0
  186. package/dist/providers/index.d.ts +8 -0
  187. package/dist/providers/index.d.ts.map +1 -0
  188. package/dist/providers/index.js +24 -0
  189. package/dist/providers/index.js.map +1 -0
  190. package/dist/providers/openai-compiler.d.ts +46 -0
  191. package/dist/providers/openai-compiler.d.ts.map +1 -0
  192. package/dist/providers/openai-compiler.js +149 -0
  193. package/dist/providers/openai-compiler.js.map +1 -0
  194. package/dist/types/attachment.d.ts +62 -0
  195. package/dist/types/attachment.d.ts.map +1 -0
  196. package/dist/types/attachment.js +6 -0
  197. package/dist/types/attachment.js.map +1 -0
  198. package/dist/types/block.d.ts +61 -0
  199. package/dist/types/block.d.ts.map +1 -0
  200. package/dist/types/block.js +8 -0
  201. package/dist/types/block.js.map +1 -0
  202. package/dist/types/codec.d.ts +58 -0
  203. package/dist/types/codec.d.ts.map +1 -0
  204. package/dist/types/codec.js +6 -0
  205. package/dist/types/codec.js.map +1 -0
  206. package/dist/types/compiled.d.ts +91 -0
  207. package/dist/types/compiled.d.ts.map +1 -0
  208. package/dist/types/compiled.js +6 -0
  209. package/dist/types/compiled.js.map +1 -0
  210. package/dist/types/hash.d.ts +24 -0
  211. package/dist/types/hash.d.ts.map +1 -0
  212. package/dist/types/hash.js +49 -0
  213. package/dist/types/hash.js.map +1 -0
  214. package/dist/types/index.d.ts +10 -0
  215. package/dist/types/index.d.ts.map +1 -0
  216. package/dist/types/index.js +26 -0
  217. package/dist/types/index.js.map +1 -0
  218. package/dist/types/policy.d.ts +128 -0
  219. package/dist/types/policy.d.ts.map +1 -0
  220. package/dist/types/policy.js +55 -0
  221. package/dist/types/policy.js.map +1 -0
  222. package/package.json +55 -0
  223. package/postcss.config.js +4 -0
  224. package/src/__tests__/attachment-selector.test.ts +559 -0
  225. package/src/__tests__/cache-breakpoints.test.ts +566 -0
  226. package/src/__tests__/codecs.test.ts +417 -0
  227. package/src/__tests__/compactor.test.ts +608 -0
  228. package/src/__tests__/context-graph.test.ts +383 -0
  229. package/src/__tests__/hash.test.ts +274 -0
  230. package/src/__tests__/integration.test.ts +866 -0
  231. package/src/__tests__/kind-order.test.ts +312 -0
  232. package/src/__tests__/phase2-integration.test.ts +253 -0
  233. package/src/__tests__/queries.test.ts +387 -0
  234. package/src/__tests__/token-estimator.test.ts +326 -0
  235. package/src/adapters/anthropic-estimator.ts +125 -0
  236. package/src/adapters/attachment-resolver.ts +295 -0
  237. package/src/adapters/attachment-selector.ts +218 -0
  238. package/src/adapters/gemini-estimator.ts +93 -0
  239. package/src/adapters/index.ts +12 -0
  240. package/src/adapters/memory-store.ts +299 -0
  241. package/src/adapters/openai-estimator.ts +105 -0
  242. package/src/adapters/summarizer.ts +250 -0
  243. package/src/adapters/token-estimator.ts +74 -0
  244. package/src/builder/context-builder.ts +467 -0
  245. package/src/builder/context-fork.ts +471 -0
  246. package/src/builder/index.ts +6 -0
  247. package/src/codecs/base.ts +36 -0
  248. package/src/codecs/conversation-history.codec.ts +108 -0
  249. package/src/codecs/index.ts +57 -0
  250. package/src/codecs/redacted-stub.codec.ts +76 -0
  251. package/src/codecs/structured-reference.codec.ts +96 -0
  252. package/src/codecs/system-rules.codec.ts +74 -0
  253. package/src/codecs/tool-output.codec.ts +109 -0
  254. package/src/codecs/tool-schema.codec.ts +87 -0
  255. package/src/codecs/unsafe-text.codec.ts +74 -0
  256. package/src/graph/context-graph.ts +205 -0
  257. package/src/graph/index.ts +8 -0
  258. package/src/graph/kind-order.ts +125 -0
  259. package/src/graph/queries.ts +306 -0
  260. package/src/graph/views.ts +255 -0
  261. package/src/index.ts +31 -0
  262. package/src/pipeline/compactor.ts +563 -0
  263. package/src/pipeline/index.ts +6 -0
  264. package/src/pipeline/summarizer.ts +76 -0
  265. package/src/policies/default-policy.ts +69 -0
  266. package/src/policies/index.ts +5 -0
  267. package/src/providers/anthropic-compiler.ts +294 -0
  268. package/src/providers/capabilities.ts +144 -0
  269. package/src/providers/gemini-compiler.ts +272 -0
  270. package/src/providers/index.ts +8 -0
  271. package/src/providers/openai-compiler.ts +191 -0
  272. package/src/types/attachment.ts +86 -0
  273. package/src/types/block.ts +84 -0
  274. package/src/types/codec.ts +68 -0
  275. package/src/types/compiled.ts +109 -0
  276. package/src/types/hash.ts +58 -0
  277. package/src/types/index.ts +10 -0
  278. package/src/types/policy.ts +194 -0
  279. package/tsconfig.json +21 -0
  280. package/vitest.config.ts +21 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /**
3
+ * GeminiTokenEstimator: High-confidence token counting via tiktoken.
4
+ *
5
+ * Uses tiktoken with gpt-4 encoding as a good approximation for Gemini.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.GeminiTokenEstimator = void 0;
9
+ const tiktoken_1 = require("tiktoken");
10
+ const token_estimator_js_1 = require("./token-estimator.js");
11
+ /**
12
+ * GeminiTokenEstimator using tiktoken (gpt-4 encoding as approximation).
13
+ */
14
+ class GeminiTokenEstimator {
15
+ /**
16
+ * Estimate tokens for a single block using tiktoken.
17
+ *
18
+ * @param block - Block to estimate
19
+ * @returns Token estimate (high confidence)
20
+ */
21
+ async estimateBlock(block) {
22
+ try {
23
+ const text = (0, token_estimator_js_1.serializeBlockForEstimation)(block);
24
+ const encoding = (0, tiktoken_1.encoding_for_model)('gpt-4');
25
+ const tokens = encoding.encode(text);
26
+ encoding.free(); // Important: free memory
27
+ return {
28
+ tokens: tokens.length,
29
+ confidence: 'high',
30
+ };
31
+ }
32
+ catch (error) {
33
+ // Fallback to heuristic on error
34
+ console.warn('[GeminiTokenEstimator] tiktoken error, falling back to heuristic:', error);
35
+ const text = (0, token_estimator_js_1.serializeBlockForEstimation)(block);
36
+ return {
37
+ tokens: (0, token_estimator_js_1.heuristicTokenCount)(text),
38
+ confidence: 'low',
39
+ };
40
+ }
41
+ }
42
+ /**
43
+ * Estimate tokens for multiple blocks.
44
+ *
45
+ * @param blocks - Blocks to estimate
46
+ * @returns Token estimate (high confidence if all succeed)
47
+ */
48
+ async estimate(blocks) {
49
+ if (blocks.length === 0) {
50
+ return { tokens: 0, confidence: 'high' };
51
+ }
52
+ try {
53
+ const combinedText = blocks
54
+ .map((block) => (0, token_estimator_js_1.serializeBlockForEstimation)(block))
55
+ .join('\n\n');
56
+ const encoding = (0, tiktoken_1.encoding_for_model)('gpt-4');
57
+ const tokens = encoding.encode(combinedText);
58
+ encoding.free(); // Important: free memory
59
+ return {
60
+ tokens: tokens.length,
61
+ confidence: 'high',
62
+ };
63
+ }
64
+ catch (error) {
65
+ // Fallback: sum individual heuristic estimates
66
+ console.warn('[GeminiTokenEstimator] tiktoken error, falling back to heuristic:', error);
67
+ let totalTokens = 0;
68
+ for (const block of blocks) {
69
+ const text = (0, token_estimator_js_1.serializeBlockForEstimation)(block);
70
+ totalTokens += (0, token_estimator_js_1.heuristicTokenCount)(text);
71
+ }
72
+ return {
73
+ tokens: totalTokens,
74
+ confidence: 'low',
75
+ };
76
+ }
77
+ }
78
+ }
79
+ exports.GeminiTokenEstimator = GeminiTokenEstimator;
80
+ //# sourceMappingURL=gemini-estimator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-estimator.js","sourceRoot":"","sources":["../../src/adapters/gemini-estimator.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,uCAA8C;AAG9C,6DAG8B;AAE9B;;GAEG;AACH,MAAa,oBAAoB;IAC/B;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,KAA4B;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAA,gDAA2B,EAAC,KAAK,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAA,6BAAkB,EAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,yBAAyB;YAE1C,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU,EAAE,MAAM;aACnB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iCAAiC;YACjC,OAAO,CAAC,IAAI,CACV,mEAAmE,EACnE,KAAK,CACN,CAAC;YACF,MAAM,IAAI,GAAG,IAAA,gDAA2B,EAAC,KAAK,CAAC,CAAC;YAChD,OAAO;gBACL,MAAM,EAAE,IAAA,wCAAmB,EAAC,IAAI,CAAC;gBACjC,UAAU,EAAE,KAAK;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,MAA+B;QAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM;iBACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,gDAA2B,EAAC,KAAK,CAAC,CAAC;iBAClD,IAAI,CAAC,MAAM,CAAC,CAAC;YAEhB,MAAM,QAAQ,GAAG,IAAA,6BAAkB,EAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC7C,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,yBAAyB;YAE1C,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU,EAAE,MAAM;aACnB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+CAA+C;YAC/C,OAAO,CAAC,IAAI,CACV,mEAAmE,EACnE,KAAK,CACN,CAAC;YAEF,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAA,gDAA2B,EAAC,KAAK,CAAC,CAAC;gBAChD,WAAW,IAAI,IAAA,wCAAmB,EAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;YAED,OAAO;gBACL,MAAM,EAAE,WAAW;gBACnB,UAAU,EAAE,KAAK;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA3ED,oDA2EC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Adapter exports (token estimators, attachment resolvers, etc.)
3
+ */
4
+ export * from './token-estimator.js';
5
+ export * from './anthropic-estimator.js';
6
+ export * from './openai-estimator.js';
7
+ export * from './gemini-estimator.js';
8
+ export * from './attachment-resolver.js';
9
+ export * from './attachment-selector.js';
10
+ export * from './summarizer.js';
11
+ export * from './memory-store.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /**
3
+ * Adapter exports (token estimators, attachment resolvers, etc.)
4
+ */
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./token-estimator.js"), exports);
21
+ __exportStar(require("./anthropic-estimator.js"), exports);
22
+ __exportStar(require("./openai-estimator.js"), exports);
23
+ __exportStar(require("./gemini-estimator.js"), exports);
24
+ __exportStar(require("./attachment-resolver.js"), exports);
25
+ __exportStar(require("./attachment-selector.js"), exports);
26
+ __exportStar(require("./summarizer.js"), exports);
27
+ __exportStar(require("./memory-store.js"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,uDAAqC;AACrC,2DAAyC;AACzC,wDAAsC;AACtC,wDAAsC;AACtC,2DAAyC;AACzC,2DAAyC;AACzC,kDAAgC;AAChC,oDAAkC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * MemoryStore: Persistence interface for context blocks.
3
+ *
4
+ * Provides a common interface for storing and retrieving context blocks
5
+ * with support for querying and deletion.
6
+ *
7
+ * External implementations:
8
+ * - @foundry/context-store-postgres - PostgreSQL backend
9
+ * - @foundry/context-store-redis - Redis backend
10
+ * - @foundry/context-store-memory - In-memory backend (testing)
11
+ */
12
+ import type { ContextBlock } from '../types/block.js';
13
+ import type { BlockQuery } from '../graph/queries.js';
14
+ /**
15
+ * Memory store query options.
16
+ */
17
+ export interface MemoryQueryOptions {
18
+ /** Block query filter */
19
+ query?: BlockQuery;
20
+ /** Maximum number of results */
21
+ limit?: number;
22
+ /** Offset for pagination */
23
+ offset?: number;
24
+ /** Sort by field (default: createdAt descending) */
25
+ sortBy?: 'createdAt' | 'blockHash';
26
+ /** Sort order */
27
+ sortOrder?: 'asc' | 'desc';
28
+ }
29
+ /**
30
+ * Memory store save options.
31
+ */
32
+ export interface MemorySaveOptions {
33
+ /** Time-to-live (seconds, optional) */
34
+ ttl?: number;
35
+ /** Overwrite existing block with same hash */
36
+ overwrite?: boolean;
37
+ }
38
+ /**
39
+ * MemoryStore interface for context block persistence.
40
+ */
41
+ export interface MemoryStore {
42
+ /**
43
+ * Save a block to the store.
44
+ *
45
+ * @param block - Block to save
46
+ * @param options - Save options
47
+ * @returns Promise resolving when save is complete
48
+ */
49
+ save<TPayload>(block: ContextBlock<TPayload>, options?: MemorySaveOptions): Promise<void>;
50
+ /**
51
+ * Load a block by hash.
52
+ *
53
+ * @param blockHash - Block hash to load
54
+ * @returns Block if found, undefined otherwise
55
+ */
56
+ load<TPayload = unknown>(blockHash: string): Promise<ContextBlock<TPayload> | undefined>;
57
+ /**
58
+ * Query blocks matching criteria.
59
+ *
60
+ * @param options - Query options
61
+ * @returns Matching blocks
62
+ */
63
+ query(options?: MemoryQueryOptions): Promise<ContextBlock<unknown>[]>;
64
+ /**
65
+ * Delete a block by hash.
66
+ *
67
+ * @param blockHash - Block hash to delete
68
+ * @returns True if block was deleted, false if not found
69
+ */
70
+ delete(blockHash: string): Promise<boolean>;
71
+ /**
72
+ * Delete all blocks matching a query.
73
+ *
74
+ * @param query - Block query filter
75
+ * @returns Number of blocks deleted
76
+ */
77
+ deleteMany(query: BlockQuery): Promise<number>;
78
+ /**
79
+ * Check if a block exists in the store.
80
+ *
81
+ * @param blockHash - Block hash to check
82
+ * @returns True if block exists
83
+ */
84
+ exists(blockHash: string): Promise<boolean>;
85
+ /**
86
+ * Get store statistics.
87
+ *
88
+ * @returns Store stats
89
+ */
90
+ getStats(): Promise<{
91
+ blockCount: number;
92
+ totalSizeBytes?: number;
93
+ }>;
94
+ /**
95
+ * Clear all blocks from the store.
96
+ * Use with caution!
97
+ *
98
+ * @returns Promise resolving when clear is complete
99
+ */
100
+ clear(): Promise<void>;
101
+ }
102
+ /**
103
+ * InMemoryStore: Simple in-memory implementation for testing.
104
+ *
105
+ * WARNING: Not suitable for production use. Data is lost on process restart.
106
+ */
107
+ export declare class InMemoryStore implements MemoryStore {
108
+ private readonly blocks;
109
+ private readonly ttls;
110
+ constructor();
111
+ /**
112
+ * Clean up expired blocks (called before operations).
113
+ */
114
+ private cleanupExpired;
115
+ save<TPayload>(block: ContextBlock<TPayload>, options?: MemorySaveOptions): Promise<void>;
116
+ load<TPayload = unknown>(blockHash: string): Promise<ContextBlock<TPayload> | undefined>;
117
+ query(options?: MemoryQueryOptions): Promise<ContextBlock<unknown>[]>;
118
+ delete(blockHash: string): Promise<boolean>;
119
+ deleteMany(query: BlockQuery): Promise<number>;
120
+ exists(blockHash: string): Promise<boolean>;
121
+ getStats(): Promise<{
122
+ blockCount: number;
123
+ totalSizeBytes?: number;
124
+ }>;
125
+ clear(): Promise<void>;
126
+ /**
127
+ * Get all blocks (testing only).
128
+ *
129
+ * @returns All blocks in the store
130
+ */
131
+ getAllBlocks(): ContextBlock<unknown>[];
132
+ }
133
+ /**
134
+ * Create an in-memory store for testing.
135
+ *
136
+ * @returns InMemoryStore instance
137
+ */
138
+ export declare function createInMemoryStore(): MemoryStore;
139
+ //# sourceMappingURL=memory-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/adapters/memory-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ /**
3
+ * MemoryStore: Persistence interface for context blocks.
4
+ *
5
+ * Provides a common interface for storing and retrieving context blocks
6
+ * with support for querying and deletion.
7
+ *
8
+ * External implementations:
9
+ * - @foundry/context-store-postgres - PostgreSQL backend
10
+ * - @foundry/context-store-redis - Redis backend
11
+ * - @foundry/context-store-memory - In-memory backend (testing)
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.InMemoryStore = void 0;
48
+ exports.createInMemoryStore = createInMemoryStore;
49
+ /**
50
+ * InMemoryStore: Simple in-memory implementation for testing.
51
+ *
52
+ * WARNING: Not suitable for production use. Data is lost on process restart.
53
+ */
54
+ class InMemoryStore {
55
+ blocks;
56
+ ttls; // blockHash -> expiresAt timestamp
57
+ constructor() {
58
+ this.blocks = new Map();
59
+ this.ttls = new Map();
60
+ }
61
+ /**
62
+ * Clean up expired blocks (called before operations).
63
+ */
64
+ cleanupExpired() {
65
+ const now = Math.floor(Date.now() / 1000);
66
+ const expiredHashes = [];
67
+ for (const [blockHash, expiresAt] of this.ttls.entries()) {
68
+ if (expiresAt <= now) {
69
+ expiredHashes.push(blockHash);
70
+ }
71
+ }
72
+ for (const hash of expiredHashes) {
73
+ this.blocks.delete(hash);
74
+ this.ttls.delete(hash);
75
+ }
76
+ }
77
+ async save(block, options) {
78
+ this.cleanupExpired();
79
+ const { blockHash } = block;
80
+ // Check for existing block
81
+ if (this.blocks.has(blockHash) && !options?.overwrite) {
82
+ // Block already exists and overwrite is false - skip
83
+ return;
84
+ }
85
+ // Save block
86
+ this.blocks.set(blockHash, block);
87
+ // Set TTL if provided
88
+ if (options?.ttl) {
89
+ const expiresAt = Math.floor(Date.now() / 1000) + options.ttl;
90
+ this.ttls.set(blockHash, expiresAt);
91
+ }
92
+ else {
93
+ // Remove TTL if overwriting without TTL
94
+ this.ttls.delete(blockHash);
95
+ }
96
+ }
97
+ async load(blockHash) {
98
+ this.cleanupExpired();
99
+ return this.blocks.get(blockHash);
100
+ }
101
+ async query(options) {
102
+ this.cleanupExpired();
103
+ let results = Array.from(this.blocks.values());
104
+ // Apply query filter if provided
105
+ if (options?.query) {
106
+ const { matchesQuery } = await Promise.resolve().then(() => __importStar(require('../graph/queries.js')));
107
+ results = results.filter((block) => matchesQuery(block, options.query, {
108
+ select: () => [],
109
+ hasBlock: (hash) => this.blocks.has(hash),
110
+ }));
111
+ }
112
+ // Sort results
113
+ const sortBy = options?.sortBy ?? 'createdAt';
114
+ const sortOrder = options?.sortOrder ?? 'desc';
115
+ results.sort((a, b) => {
116
+ let comparison = 0;
117
+ if (sortBy === 'createdAt') {
118
+ comparison = a.meta.createdAt - b.meta.createdAt;
119
+ }
120
+ else if (sortBy === 'blockHash') {
121
+ comparison = a.blockHash.localeCompare(b.blockHash);
122
+ }
123
+ return sortOrder === 'asc' ? comparison : -comparison;
124
+ });
125
+ // Apply limit and offset
126
+ const offset = options?.offset ?? 0;
127
+ const limit = options?.limit ?? results.length;
128
+ return results.slice(offset, offset + limit);
129
+ }
130
+ async delete(blockHash) {
131
+ this.cleanupExpired();
132
+ const existed = this.blocks.delete(blockHash);
133
+ this.ttls.delete(blockHash);
134
+ return existed;
135
+ }
136
+ async deleteMany(query) {
137
+ this.cleanupExpired();
138
+ const matchingBlocks = await this.query({ query });
139
+ let deleted = 0;
140
+ for (const block of matchingBlocks) {
141
+ if (await this.delete(block.blockHash)) {
142
+ deleted++;
143
+ }
144
+ }
145
+ return deleted;
146
+ }
147
+ async exists(blockHash) {
148
+ this.cleanupExpired();
149
+ return this.blocks.has(blockHash);
150
+ }
151
+ async getStats() {
152
+ this.cleanupExpired();
153
+ // Estimate total size in bytes
154
+ let totalSizeBytes = 0;
155
+ for (const block of this.blocks.values()) {
156
+ // Rough estimate: JSON.stringify length
157
+ totalSizeBytes += JSON.stringify(block).length;
158
+ }
159
+ return {
160
+ blockCount: this.blocks.size,
161
+ totalSizeBytes,
162
+ };
163
+ }
164
+ async clear() {
165
+ this.blocks.clear();
166
+ this.ttls.clear();
167
+ }
168
+ /**
169
+ * Get all blocks (testing only).
170
+ *
171
+ * @returns All blocks in the store
172
+ */
173
+ getAllBlocks() {
174
+ this.cleanupExpired();
175
+ return Array.from(this.blocks.values());
176
+ }
177
+ }
178
+ exports.InMemoryStore = InMemoryStore;
179
+ /**
180
+ * Create an in-memory store for testing.
181
+ *
182
+ * @returns InMemoryStore instance
183
+ */
184
+ function createInMemoryStore() {
185
+ return new InMemoryStore();
186
+ }
187
+ //# sourceMappingURL=memory-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/adapters/memory-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * OpenAITokenEstimator: High-confidence token counting via tiktoken.
3
+ *
4
+ * Uses tiktoken library for accurate token counts.
5
+ */
6
+ import type { TiktokenModel } from 'tiktoken';
7
+ import type { ContextBlock } from '../types/block.js';
8
+ import type { TokenEstimator, TokenEstimate } from './token-estimator.js';
9
+ /**
10
+ * OpenAITokenEstimator using tiktoken.
11
+ */
12
+ export declare class OpenAITokenEstimator implements TokenEstimator {
13
+ private readonly model;
14
+ /**
15
+ * Create an OpenAITokenEstimator.
16
+ *
17
+ * @param model - Model name (e.g., 'gpt-4', 'gpt-3.5-turbo')
18
+ */
19
+ constructor(model?: TiktokenModel);
20
+ /**
21
+ * Estimate tokens for a single block using tiktoken.
22
+ *
23
+ * @param block - Block to estimate
24
+ * @returns Token estimate (high confidence)
25
+ */
26
+ estimateBlock(block: ContextBlock<unknown>): Promise<TokenEstimate>;
27
+ /**
28
+ * Estimate tokens for multiple blocks.
29
+ *
30
+ * @param blocks - Blocks to estimate
31
+ * @returns Token estimate (high confidence if all succeed)
32
+ */
33
+ estimate(blocks: ContextBlock<unknown>[]): Promise<TokenEstimate>;
34
+ }
35
+ //# sourceMappingURL=openai-estimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-estimator.d.ts","sourceRoot":"","sources":["../../src/adapters/openai-estimator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1E;;GAEG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IAEtC;;;;OAIG;gBACS,KAAK,GAAE,aAAuB;IAI1C;;;;;OAKG;IACG,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAyBzE;;;;;OAKG;IACG,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;CAqCxE"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /**
3
+ * OpenAITokenEstimator: High-confidence token counting via tiktoken.
4
+ *
5
+ * Uses tiktoken library for accurate token counts.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.OpenAITokenEstimator = void 0;
9
+ const tiktoken_1 = require("tiktoken");
10
+ const token_estimator_js_1 = require("./token-estimator.js");
11
+ /**
12
+ * OpenAITokenEstimator using tiktoken.
13
+ */
14
+ class OpenAITokenEstimator {
15
+ model;
16
+ /**
17
+ * Create an OpenAITokenEstimator.
18
+ *
19
+ * @param model - Model name (e.g., 'gpt-4', 'gpt-3.5-turbo')
20
+ */
21
+ constructor(model = 'gpt-4') {
22
+ this.model = model;
23
+ }
24
+ /**
25
+ * Estimate tokens for a single block using tiktoken.
26
+ *
27
+ * @param block - Block to estimate
28
+ * @returns Token estimate (high confidence)
29
+ */
30
+ async estimateBlock(block) {
31
+ try {
32
+ const text = (0, token_estimator_js_1.serializeBlockForEstimation)(block);
33
+ const encoding = (0, tiktoken_1.encoding_for_model)(this.model);
34
+ const tokens = encoding.encode(text);
35
+ encoding.free(); // Important: free memory
36
+ return {
37
+ tokens: tokens.length,
38
+ confidence: 'high',
39
+ };
40
+ }
41
+ catch (error) {
42
+ // Fallback to heuristic on error
43
+ console.warn('[OpenAITokenEstimator] tiktoken error, falling back to heuristic:', error);
44
+ const text = (0, token_estimator_js_1.serializeBlockForEstimation)(block);
45
+ return {
46
+ tokens: (0, token_estimator_js_1.heuristicTokenCount)(text),
47
+ confidence: 'low',
48
+ };
49
+ }
50
+ }
51
+ /**
52
+ * Estimate tokens for multiple blocks.
53
+ *
54
+ * @param blocks - Blocks to estimate
55
+ * @returns Token estimate (high confidence if all succeed)
56
+ */
57
+ async estimate(blocks) {
58
+ if (blocks.length === 0) {
59
+ return { tokens: 0, confidence: 'high' };
60
+ }
61
+ try {
62
+ const combinedText = blocks
63
+ .map((block) => (0, token_estimator_js_1.serializeBlockForEstimation)(block))
64
+ .join('\n\n');
65
+ const encoding = (0, tiktoken_1.encoding_for_model)(this.model);
66
+ const tokens = encoding.encode(combinedText);
67
+ encoding.free(); // Important: free memory
68
+ return {
69
+ tokens: tokens.length,
70
+ confidence: 'high',
71
+ };
72
+ }
73
+ catch (error) {
74
+ // Fallback: sum individual heuristic estimates
75
+ console.warn('[OpenAITokenEstimator] tiktoken error, falling back to heuristic:', error);
76
+ let totalTokens = 0;
77
+ for (const block of blocks) {
78
+ const text = (0, token_estimator_js_1.serializeBlockForEstimation)(block);
79
+ totalTokens += (0, token_estimator_js_1.heuristicTokenCount)(text);
80
+ }
81
+ return {
82
+ tokens: totalTokens,
83
+ confidence: 'low',
84
+ };
85
+ }
86
+ }
87
+ }
88
+ exports.OpenAITokenEstimator = OpenAITokenEstimator;
89
+ //# sourceMappingURL=openai-estimator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-estimator.js","sourceRoot":"","sources":["../../src/adapters/openai-estimator.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,uCAA8C;AAI9C,6DAG8B;AAE9B;;GAEG;AACH,MAAa,oBAAoB;IACd,KAAK,CAAgB;IAEtC;;;;OAIG;IACH,YAAY,QAAuB,OAAO;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,KAA4B;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAA,gDAA2B,EAAC,KAAK,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAA,6BAAkB,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,yBAAyB;YAE1C,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU,EAAE,MAAM;aACnB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iCAAiC;YACjC,OAAO,CAAC,IAAI,CACV,mEAAmE,EACnE,KAAK,CACN,CAAC;YACF,MAAM,IAAI,GAAG,IAAA,gDAA2B,EAAC,KAAK,CAAC,CAAC;YAChD,OAAO;gBACL,MAAM,EAAE,IAAA,wCAAmB,EAAC,IAAI,CAAC;gBACjC,UAAU,EAAE,KAAK;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,MAA+B;QAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM;iBACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,gDAA2B,EAAC,KAAK,CAAC,CAAC;iBAClD,IAAI,CAAC,MAAM,CAAC,CAAC;YAEhB,MAAM,QAAQ,GAAG,IAAA,6BAAkB,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC7C,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,yBAAyB;YAE1C,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU,EAAE,MAAM;aACnB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+CAA+C;YAC/C,OAAO,CAAC,IAAI,CACV,mEAAmE,EACnE,KAAK,CACN,CAAC;YAEF,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAA,gDAA2B,EAAC,KAAK,CAAC,CAAC;gBAChD,WAAW,IAAI,IAAA,wCAAmB,EAAC,IAAI,CAAC,CAAC;YAC3C,CAAC;YAED,OAAO;gBACL,MAAM,EAAE,WAAW;gBACnB,UAAU,EAAE,KAAK;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAtFD,oDAsFC"}