@blockrun/clawrouter 0.12.102 → 0.12.103

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 (281) hide show
  1. package/dist/cli.d.ts +0 -15
  2. package/dist/cli.js +80037 -407
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.d.ts +1406 -34
  5. package/dist/index.js +81085 -1075
  6. package/dist/index.js.map +1 -1
  7. package/package.json +1 -1
  8. package/dist/auth.d.ts +0 -82
  9. package/dist/auth.d.ts.map +0 -1
  10. package/dist/auth.js +0 -388
  11. package/dist/auth.js.map +0 -1
  12. package/dist/balance.d.ts +0 -97
  13. package/dist/balance.d.ts.map +0 -1
  14. package/dist/balance.js +0 -157
  15. package/dist/balance.js.map +0 -1
  16. package/dist/cli.d.ts.map +0 -1
  17. package/dist/compression/codebook.d.ts +0 -24
  18. package/dist/compression/codebook.d.ts.map +0 -1
  19. package/dist/compression/codebook.js +0 -119
  20. package/dist/compression/codebook.js.map +0 -1
  21. package/dist/compression/index.d.ts +0 -33
  22. package/dist/compression/index.d.ts.map +0 -1
  23. package/dist/compression/index.js +0 -246
  24. package/dist/compression/index.js.map +0 -1
  25. package/dist/compression/layers/deduplication.d.ts +0 -28
  26. package/dist/compression/layers/deduplication.d.ts.map +0 -1
  27. package/dist/compression/layers/deduplication.js +0 -101
  28. package/dist/compression/layers/deduplication.js.map +0 -1
  29. package/dist/compression/layers/dictionary.d.ts +0 -21
  30. package/dist/compression/layers/dictionary.d.ts.map +0 -1
  31. package/dist/compression/layers/dictionary.js +0 -73
  32. package/dist/compression/layers/dictionary.js.map +0 -1
  33. package/dist/compression/layers/dynamic-codebook.d.ts +0 -26
  34. package/dist/compression/layers/dynamic-codebook.d.ts.map +0 -1
  35. package/dist/compression/layers/dynamic-codebook.js +0 -149
  36. package/dist/compression/layers/dynamic-codebook.js.map +0 -1
  37. package/dist/compression/layers/json-compact.d.ts +0 -23
  38. package/dist/compression/layers/json-compact.d.ts.map +0 -1
  39. package/dist/compression/layers/json-compact.js +0 -79
  40. package/dist/compression/layers/json-compact.js.map +0 -1
  41. package/dist/compression/layers/observation.d.ts +0 -21
  42. package/dist/compression/layers/observation.d.ts.map +0 -1
  43. package/dist/compression/layers/observation.js +0 -130
  44. package/dist/compression/layers/observation.js.map +0 -1
  45. package/dist/compression/layers/paths.d.ts +0 -24
  46. package/dist/compression/layers/paths.d.ts.map +0 -1
  47. package/dist/compression/layers/paths.js +0 -110
  48. package/dist/compression/layers/paths.js.map +0 -1
  49. package/dist/compression/layers/whitespace.d.ts +0 -27
  50. package/dist/compression/layers/whitespace.d.ts.map +0 -1
  51. package/dist/compression/layers/whitespace.js +0 -60
  52. package/dist/compression/layers/whitespace.js.map +0 -1
  53. package/dist/compression/types.d.ts +0 -84
  54. package/dist/compression/types.d.ts.map +0 -1
  55. package/dist/compression/types.js +0 -27
  56. package/dist/compression/types.js.map +0 -1
  57. package/dist/config.d.ts +0 -12
  58. package/dist/config.d.ts.map +0 -1
  59. package/dist/config.js +0 -22
  60. package/dist/config.js.map +0 -1
  61. package/dist/dedup.d.ts +0 -34
  62. package/dist/dedup.d.ts.map +0 -1
  63. package/dist/dedup.js +0 -150
  64. package/dist/dedup.js.map +0 -1
  65. package/dist/doctor.d.ts +0 -8
  66. package/dist/doctor.d.ts.map +0 -1
  67. package/dist/doctor.js +0 -375
  68. package/dist/doctor.js.map +0 -1
  69. package/dist/error-classification.test.d.ts +0 -2
  70. package/dist/error-classification.test.d.ts.map +0 -1
  71. package/dist/error-classification.test.js +0 -59
  72. package/dist/error-classification.test.js.map +0 -1
  73. package/dist/errors.d.ts +0 -54
  74. package/dist/errors.d.ts.map +0 -1
  75. package/dist/errors.js +0 -85
  76. package/dist/errors.js.map +0 -1
  77. package/dist/exclude-models.d.ts +0 -28
  78. package/dist/exclude-models.d.ts.map +0 -1
  79. package/dist/exclude-models.integration.test.d.ts +0 -2
  80. package/dist/exclude-models.integration.test.d.ts.map +0 -1
  81. package/dist/exclude-models.integration.test.js +0 -46
  82. package/dist/exclude-models.integration.test.js.map +0 -1
  83. package/dist/exclude-models.js +0 -70
  84. package/dist/exclude-models.js.map +0 -1
  85. package/dist/exclude-models.test.d.ts +0 -5
  86. package/dist/exclude-models.test.d.ts.map +0 -1
  87. package/dist/exclude-models.test.js +0 -95
  88. package/dist/exclude-models.test.js.map +0 -1
  89. package/dist/fs-read.d.ts +0 -11
  90. package/dist/fs-read.d.ts.map +0 -1
  91. package/dist/fs-read.js +0 -47
  92. package/dist/fs-read.js.map +0 -1
  93. package/dist/index.d.ts.map +0 -1
  94. package/dist/journal.d.ts +0 -67
  95. package/dist/journal.d.ts.map +0 -1
  96. package/dist/journal.js +0 -184
  97. package/dist/journal.js.map +0 -1
  98. package/dist/journal.test.d.ts +0 -2
  99. package/dist/journal.test.d.ts.map +0 -1
  100. package/dist/journal.test.js +0 -201
  101. package/dist/journal.test.js.map +0 -1
  102. package/dist/logger.d.ts +0 -33
  103. package/dist/logger.d.ts.map +0 -1
  104. package/dist/logger.js +0 -35
  105. package/dist/logger.js.map +0 -1
  106. package/dist/models.d.ts +0 -107
  107. package/dist/models.d.ts.map +0 -1
  108. package/dist/models.js +0 -941
  109. package/dist/models.js.map +0 -1
  110. package/dist/models.test.d.ts +0 -2
  111. package/dist/models.test.d.ts.map +0 -1
  112. package/dist/models.test.js +0 -38
  113. package/dist/models.test.js.map +0 -1
  114. package/dist/partners/index.d.ts +0 -8
  115. package/dist/partners/index.d.ts.map +0 -1
  116. package/dist/partners/index.js +0 -6
  117. package/dist/partners/index.js.map +0 -1
  118. package/dist/partners/registry.d.ts +0 -51
  119. package/dist/partners/registry.d.ts.map +0 -1
  120. package/dist/partners/registry.js +0 -256
  121. package/dist/partners/registry.js.map +0 -1
  122. package/dist/partners/tools.d.ts +0 -24
  123. package/dist/partners/tools.d.ts.map +0 -1
  124. package/dist/partners/tools.js +0 -97
  125. package/dist/partners/tools.js.map +0 -1
  126. package/dist/payment-preauth.d.ts +0 -17
  127. package/dist/payment-preauth.d.ts.map +0 -1
  128. package/dist/payment-preauth.js +0 -102
  129. package/dist/payment-preauth.js.map +0 -1
  130. package/dist/provider.d.ts +0 -19
  131. package/dist/provider.d.ts.map +0 -1
  132. package/dist/provider.js +0 -45
  133. package/dist/provider.js.map +0 -1
  134. package/dist/proxy.d.ts +0 -210
  135. package/dist/proxy.d.ts.map +0 -1
  136. package/dist/proxy.debrand.test.d.ts +0 -2
  137. package/dist/proxy.debrand.test.d.ts.map +0 -1
  138. package/dist/proxy.debrand.test.js +0 -101
  139. package/dist/proxy.debrand.test.js.map +0 -1
  140. package/dist/proxy.degraded-response.test.d.ts +0 -2
  141. package/dist/proxy.degraded-response.test.d.ts.map +0 -1
  142. package/dist/proxy.degraded-response.test.js +0 -105
  143. package/dist/proxy.degraded-response.test.js.map +0 -1
  144. package/dist/proxy.image-download.test.d.ts +0 -2
  145. package/dist/proxy.image-download.test.d.ts.map +0 -1
  146. package/dist/proxy.image-download.test.js +0 -92
  147. package/dist/proxy.image-download.test.js.map +0 -1
  148. package/dist/proxy.js +0 -3810
  149. package/dist/proxy.js.map +0 -1
  150. package/dist/proxy.models-endpoint.test.d.ts +0 -2
  151. package/dist/proxy.models-endpoint.test.d.ts.map +0 -1
  152. package/dist/proxy.models-endpoint.test.js +0 -19
  153. package/dist/proxy.models-endpoint.test.js.map +0 -1
  154. package/dist/proxy.multiturn-thinking.test.d.ts +0 -2
  155. package/dist/proxy.multiturn-thinking.test.d.ts.map +0 -1
  156. package/dist/proxy.multiturn-thinking.test.js +0 -82
  157. package/dist/proxy.multiturn-thinking.test.js.map +0 -1
  158. package/dist/proxy.payment-chain-reuse.test.d.ts +0 -2
  159. package/dist/proxy.payment-chain-reuse.test.d.ts.map +0 -1
  160. package/dist/proxy.payment-chain-reuse.test.js +0 -30
  161. package/dist/proxy.payment-chain-reuse.test.js.map +0 -1
  162. package/dist/proxy.solana-resilience.test.d.ts +0 -12
  163. package/dist/proxy.solana-resilience.test.d.ts.map +0 -1
  164. package/dist/proxy.solana-resilience.test.js +0 -39
  165. package/dist/proxy.solana-resilience.test.js.map +0 -1
  166. package/dist/report.d.ts +0 -6
  167. package/dist/report.d.ts.map +0 -1
  168. package/dist/report.js +0 -44
  169. package/dist/report.js.map +0 -1
  170. package/dist/response-cache.advanced.test.d.ts +0 -2
  171. package/dist/response-cache.advanced.test.d.ts.map +0 -1
  172. package/dist/response-cache.advanced.test.js +0 -566
  173. package/dist/response-cache.advanced.test.js.map +0 -1
  174. package/dist/response-cache.d.ts +0 -85
  175. package/dist/response-cache.d.ts.map +0 -1
  176. package/dist/response-cache.edge-cases.test.d.ts +0 -2
  177. package/dist/response-cache.edge-cases.test.d.ts.map +0 -1
  178. package/dist/response-cache.edge-cases.test.js +0 -488
  179. package/dist/response-cache.edge-cases.test.js.map +0 -1
  180. package/dist/response-cache.extreme.test.d.ts +0 -2
  181. package/dist/response-cache.extreme.test.d.ts.map +0 -1
  182. package/dist/response-cache.extreme.test.js +0 -561
  183. package/dist/response-cache.extreme.test.js.map +0 -1
  184. package/dist/response-cache.js +0 -240
  185. package/dist/response-cache.js.map +0 -1
  186. package/dist/response-cache.test.d.ts +0 -2
  187. package/dist/response-cache.test.d.ts.map +0 -1
  188. package/dist/response-cache.test.js +0 -242
  189. package/dist/response-cache.test.js.map +0 -1
  190. package/dist/retry.d.ts +0 -42
  191. package/dist/retry.d.ts.map +0 -1
  192. package/dist/retry.js +0 -99
  193. package/dist/retry.js.map +0 -1
  194. package/dist/router/config.d.ts +0 -11
  195. package/dist/router/config.d.ts.map +0 -1
  196. package/dist/router/config.js +0 -1215
  197. package/dist/router/config.js.map +0 -1
  198. package/dist/router/index.d.ts +0 -18
  199. package/dist/router/index.d.ts.map +0 -1
  200. package/dist/router/index.js +0 -19
  201. package/dist/router/index.js.map +0 -1
  202. package/dist/router/llm-classifier.d.ts +0 -29
  203. package/dist/router/llm-classifier.d.ts.map +0 -1
  204. package/dist/router/llm-classifier.js +0 -99
  205. package/dist/router/llm-classifier.js.map +0 -1
  206. package/dist/router/rules.d.ts +0 -12
  207. package/dist/router/rules.d.ts.map +0 -1
  208. package/dist/router/rules.js +0 -202
  209. package/dist/router/rules.js.map +0 -1
  210. package/dist/router/selector.d.ts +0 -58
  211. package/dist/router/selector.d.ts.map +0 -1
  212. package/dist/router/selector.js +0 -165
  213. package/dist/router/selector.js.map +0 -1
  214. package/dist/router/selector.test.d.ts +0 -2
  215. package/dist/router/selector.test.d.ts.map +0 -1
  216. package/dist/router/selector.test.js +0 -67
  217. package/dist/router/selector.test.js.map +0 -1
  218. package/dist/router/strategy.d.ts +0 -19
  219. package/dist/router/strategy.d.ts.map +0 -1
  220. package/dist/router/strategy.js +0 -138
  221. package/dist/router/strategy.js.map +0 -1
  222. package/dist/router/strategy.test.d.ts +0 -2
  223. package/dist/router/strategy.test.d.ts.map +0 -1
  224. package/dist/router/strategy.test.js +0 -131
  225. package/dist/router/strategy.test.js.map +0 -1
  226. package/dist/router/types.d.ts +0 -127
  227. package/dist/router/types.d.ts.map +0 -1
  228. package/dist/router/types.js +0 -11
  229. package/dist/router/types.js.map +0 -1
  230. package/dist/session.d.ts +0 -124
  231. package/dist/session.d.ts.map +0 -1
  232. package/dist/session.js +0 -256
  233. package/dist/session.js.map +0 -1
  234. package/dist/session.test.d.ts +0 -2
  235. package/dist/session.test.d.ts.map +0 -1
  236. package/dist/session.test.js +0 -163
  237. package/dist/session.test.js.map +0 -1
  238. package/dist/solana-balance.d.ts +0 -48
  239. package/dist/solana-balance.d.ts.map +0 -1
  240. package/dist/solana-balance.js +0 -142
  241. package/dist/solana-balance.js.map +0 -1
  242. package/dist/spend-control.d.ts +0 -112
  243. package/dist/spend-control.d.ts.map +0 -1
  244. package/dist/spend-control.js +0 -278
  245. package/dist/spend-control.js.map +0 -1
  246. package/dist/spend-control.test.d.ts +0 -5
  247. package/dist/spend-control.test.d.ts.map +0 -1
  248. package/dist/spend-control.test.js +0 -210
  249. package/dist/spend-control.test.js.map +0 -1
  250. package/dist/stats.d.ts +0 -64
  251. package/dist/stats.d.ts.map +0 -1
  252. package/dist/stats.js +0 -295
  253. package/dist/stats.js.map +0 -1
  254. package/dist/types.d.ts +0 -150
  255. package/dist/types.d.ts.map +0 -1
  256. package/dist/types.js +0 -9
  257. package/dist/types.js.map +0 -1
  258. package/dist/update-hint.test.d.ts +0 -9
  259. package/dist/update-hint.test.d.ts.map +0 -1
  260. package/dist/update-hint.test.js +0 -156
  261. package/dist/update-hint.test.js.map +0 -1
  262. package/dist/updater.d.ts +0 -10
  263. package/dist/updater.d.ts.map +0 -1
  264. package/dist/updater.js +0 -55
  265. package/dist/updater.js.map +0 -1
  266. package/dist/version.d.ts +0 -3
  267. package/dist/version.d.ts.map +0 -1
  268. package/dist/version.js +0 -16
  269. package/dist/version.js.map +0 -1
  270. package/dist/wallet.d.ts +0 -52
  271. package/dist/wallet.d.ts.map +0 -1
  272. package/dist/wallet.js +0 -94
  273. package/dist/wallet.js.map +0 -1
  274. package/dist/wallet.test.d.ts +0 -6
  275. package/dist/wallet.test.d.ts.map +0 -1
  276. package/dist/wallet.test.js +0 -117
  277. package/dist/wallet.test.js.map +0 -1
  278. package/dist/x402-sdk.test.d.ts +0 -6
  279. package/dist/x402-sdk.test.d.ts.map +0 -1
  280. package/dist/x402-sdk.test.js +0 -161
  281. package/dist/x402-sdk.test.js.map +0 -1
@@ -1,101 +0,0 @@
1
- /**
2
- * Layer 1: Message Deduplication
3
- *
4
- * Removes exact duplicate messages from conversation history.
5
- * Common in heartbeat patterns and repeated tool calls.
6
- *
7
- * Safe for LLM: Identical messages add no new information.
8
- * Expected savings: 2-5%
9
- */
10
- import crypto from "crypto";
11
- /**
12
- * Generate a hash for a message based on its semantic content.
13
- * Uses role + content + tool_call_id to identify duplicates.
14
- */
15
- function hashMessage(message) {
16
- // Handle content - stringify arrays (multimodal), use string directly, or empty string
17
- let contentStr = "";
18
- if (typeof message.content === "string") {
19
- contentStr = message.content;
20
- }
21
- else if (Array.isArray(message.content)) {
22
- contentStr = JSON.stringify(message.content);
23
- }
24
- const parts = [message.role, contentStr, message.tool_call_id || "", message.name || ""];
25
- // Include tool_calls if present
26
- if (message.tool_calls) {
27
- parts.push(JSON.stringify(message.tool_calls.map((tc) => ({
28
- name: tc.function.name,
29
- args: tc.function.arguments,
30
- }))));
31
- }
32
- const content = parts.join("|");
33
- return crypto.createHash("md5").update(content).digest("hex");
34
- }
35
- /**
36
- * Remove exact duplicate messages from the conversation.
37
- *
38
- * Strategy:
39
- * - Keep first occurrence of each unique message
40
- * - Preserve order for semantic coherence
41
- * - Never dedupe system messages (they set context)
42
- * - Allow duplicate user messages (user might repeat intentionally)
43
- * - CRITICAL: Never dedupe assistant messages with tool_calls that are
44
- * referenced by subsequent tool messages (breaks Anthropic tool_use/tool_result pairing)
45
- */
46
- export function deduplicateMessages(messages) {
47
- const seen = new Set();
48
- const result = [];
49
- let duplicatesRemoved = 0;
50
- // First pass: collect all tool_call_ids that are referenced by tool messages
51
- // These tool_calls MUST be preserved to maintain tool_use/tool_result pairing
52
- const referencedToolCallIds = new Set();
53
- for (const message of messages) {
54
- if (message.role === "tool" && message.tool_call_id) {
55
- referencedToolCallIds.add(message.tool_call_id);
56
- }
57
- }
58
- for (const message of messages) {
59
- // Always keep system messages (they set important context)
60
- if (message.role === "system") {
61
- result.push(message);
62
- continue;
63
- }
64
- // Always keep user messages (user might repeat intentionally)
65
- if (message.role === "user") {
66
- result.push(message);
67
- continue;
68
- }
69
- // Always keep tool messages (they are results of tool calls)
70
- // Removing them would break the tool_use/tool_result pairing
71
- if (message.role === "tool") {
72
- result.push(message);
73
- continue;
74
- }
75
- // For assistant messages with tool_calls, check if any are referenced
76
- // by subsequent tool messages - if so, we MUST keep this message
77
- if (message.role === "assistant" && message.tool_calls) {
78
- const hasReferencedToolCall = message.tool_calls.some((tc) => referencedToolCallIds.has(tc.id));
79
- if (hasReferencedToolCall) {
80
- // This assistant message has tool_calls that are referenced - keep it
81
- result.push(message);
82
- continue;
83
- }
84
- }
85
- // For other assistant messages, check for duplicates
86
- const hash = hashMessage(message);
87
- if (!seen.has(hash)) {
88
- seen.add(hash);
89
- result.push(message);
90
- }
91
- else {
92
- duplicatesRemoved++;
93
- }
94
- }
95
- return {
96
- messages: result,
97
- duplicatesRemoved,
98
- originalCount: messages.length,
99
- };
100
- }
101
- //# sourceMappingURL=deduplication.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deduplication.js","sourceRoot":"","sources":["../../../src/compression/layers/deduplication.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Layer 3: Dictionary Encoding
3
- *
4
- * Replaces frequently repeated long phrases with short codes.
5
- * Uses a static codebook of common patterns from production logs.
6
- *
7
- * Safe for LLM: Reversible substitution with codebook header.
8
- * Expected savings: 4-8%
9
- */
10
- import { NormalizedMessage } from "../types.js";
11
- export interface DictionaryResult {
12
- messages: NormalizedMessage[];
13
- substitutionCount: number;
14
- usedCodes: Set<string>;
15
- charsSaved: number;
16
- }
17
- /**
18
- * Apply dictionary encoding to all messages.
19
- */
20
- export declare function encodeMessages(messages: NormalizedMessage[]): DictionaryResult;
21
- //# sourceMappingURL=dictionary.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dictionary.d.ts","sourceRoot":"","sources":["../../../src/compression/layers/dictionary.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AA6CD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,gBAAgB,CA+B9E"}
@@ -1,73 +0,0 @@
1
- /**
2
- * Layer 3: Dictionary Encoding
3
- *
4
- * Replaces frequently repeated long phrases with short codes.
5
- * Uses a static codebook of common patterns from production logs.
6
- *
7
- * Safe for LLM: Reversible substitution with codebook header.
8
- * Expected savings: 4-8%
9
- */
10
- import { getInverseCodebook } from "../codebook.js";
11
- /**
12
- * Apply dictionary encoding to a string.
13
- * Returns the encoded string and stats.
14
- */
15
- function encodeContent(content, inverseCodebook) {
16
- // Defensive type check - content might be array/object for multimodal messages
17
- if (!content || typeof content !== "string") {
18
- return { encoded: content, substitutions: 0, codes: new Set(), charsSaved: 0 };
19
- }
20
- let encoded = content;
21
- let substitutions = 0;
22
- let charsSaved = 0;
23
- const codes = new Set();
24
- // Sort phrases by length (longest first) to avoid partial matches
25
- const phrases = Object.keys(inverseCodebook).sort((a, b) => b.length - a.length);
26
- for (const phrase of phrases) {
27
- const code = inverseCodebook[phrase];
28
- const regex = new RegExp(escapeRegex(phrase), "g");
29
- const matches = encoded.match(regex);
30
- if (matches && matches.length > 0) {
31
- encoded = encoded.replace(regex, code);
32
- substitutions += matches.length;
33
- charsSaved += matches.length * (phrase.length - code.length);
34
- codes.add(code);
35
- }
36
- }
37
- return { encoded, substitutions, codes, charsSaved };
38
- }
39
- /**
40
- * Escape special regex characters in a string.
41
- */
42
- function escapeRegex(str) {
43
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
44
- }
45
- /**
46
- * Apply dictionary encoding to all messages.
47
- */
48
- export function encodeMessages(messages) {
49
- const inverseCodebook = getInverseCodebook();
50
- let totalSubstitutions = 0;
51
- let totalCharsSaved = 0;
52
- const allUsedCodes = new Set();
53
- const result = messages.map((message) => {
54
- // Only process string content (skip arrays for multimodal messages)
55
- if (!message.content || typeof message.content !== "string")
56
- return message;
57
- const { encoded, substitutions, codes, charsSaved } = encodeContent(message.content, inverseCodebook);
58
- totalSubstitutions += substitutions;
59
- totalCharsSaved += charsSaved;
60
- codes.forEach((code) => allUsedCodes.add(code));
61
- return {
62
- ...message,
63
- content: encoded,
64
- };
65
- });
66
- return {
67
- messages: result,
68
- substitutionCount: totalSubstitutions,
69
- usedCodes: allUsedCodes,
70
- charsSaved: totalCharsSaved,
71
- };
72
- }
73
- //# sourceMappingURL=dictionary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../../src/compression/layers/dictionary.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * L7: Dynamic Codebook Builder
3
- *
4
- * Inspired by claw-compactor's frequency-based codebook.
5
- * Builds codebook from actual content being compressed,
6
- * rather than relying on static patterns.
7
- *
8
- * Finds phrases that appear 3+ times and replaces with short codes.
9
- */
10
- import { NormalizedMessage } from "../types.js";
11
- interface DynamicCodebookResult {
12
- messages: NormalizedMessage[];
13
- charsSaved: number;
14
- dynamicCodes: Record<string, string>;
15
- substitutions: number;
16
- }
17
- /**
18
- * Apply dynamic codebook to messages.
19
- */
20
- export declare function applyDynamicCodebook(messages: NormalizedMessage[]): DynamicCodebookResult;
21
- /**
22
- * Generate header for dynamic codes (to include in system message).
23
- */
24
- export declare function generateDynamicCodebookHeader(codebook: Record<string, string>): string;
25
- export {};
26
- //# sourceMappingURL=dynamic-codebook.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dynamic-codebook.d.ts","sourceRoot":"","sources":["../../../src/compression/layers/dynamic-codebook.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,aAAa,EAAE,MAAM,CAAC;CACvB;AAyFD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,qBAAqB,CAmDzF;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAatF"}
@@ -1,149 +0,0 @@
1
- /**
2
- * L7: Dynamic Codebook Builder
3
- *
4
- * Inspired by claw-compactor's frequency-based codebook.
5
- * Builds codebook from actual content being compressed,
6
- * rather than relying on static patterns.
7
- *
8
- * Finds phrases that appear 3+ times and replaces with short codes.
9
- */
10
- // Config
11
- const MIN_PHRASE_LENGTH = 20;
12
- const MAX_PHRASE_LENGTH = 200;
13
- const MIN_FREQUENCY = 3;
14
- const MAX_ENTRIES = 100;
15
- const CODE_PREFIX = "$D"; // Dynamic codes: $D01, $D02, etc.
16
- /**
17
- * Find repeated phrases in content.
18
- */
19
- function findRepeatedPhrases(allContent) {
20
- const phrases = new Map();
21
- // Split by sentence-like boundaries
22
- const segments = allContent.split(/(?<=[.!?\n])\s+/);
23
- for (const segment of segments) {
24
- const trimmed = segment.trim();
25
- if (trimmed.length >= MIN_PHRASE_LENGTH && trimmed.length <= MAX_PHRASE_LENGTH) {
26
- phrases.set(trimmed, (phrases.get(trimmed) || 0) + 1);
27
- }
28
- }
29
- // Also find repeated lines
30
- const lines = allContent.split("\n");
31
- for (const line of lines) {
32
- const trimmed = line.trim();
33
- if (trimmed.length >= MIN_PHRASE_LENGTH && trimmed.length <= MAX_PHRASE_LENGTH) {
34
- phrases.set(trimmed, (phrases.get(trimmed) || 0) + 1);
35
- }
36
- }
37
- return phrases;
38
- }
39
- /**
40
- * Build dynamic codebook from message content.
41
- */
42
- function buildDynamicCodebook(messages) {
43
- // Combine all content
44
- let allContent = "";
45
- for (const msg of messages) {
46
- // Only process string content (skip arrays for multimodal messages)
47
- if (msg.content && typeof msg.content === "string") {
48
- allContent += msg.content + "\n";
49
- }
50
- }
51
- // Find repeated phrases
52
- const phrases = findRepeatedPhrases(allContent);
53
- // Filter by frequency and sort by savings potential
54
- const candidates = [];
55
- for (const [phrase, count] of phrases.entries()) {
56
- if (count >= MIN_FREQUENCY) {
57
- // Savings = (phrase length - code length) * occurrences
58
- const codeLength = 4; // e.g., "$D01"
59
- const savings = (phrase.length - codeLength) * count;
60
- if (savings > 50) {
61
- candidates.push({ phrase, count, savings });
62
- }
63
- }
64
- }
65
- // Sort by savings (descending) and take top entries
66
- candidates.sort((a, b) => b.savings - a.savings);
67
- const topCandidates = candidates.slice(0, MAX_ENTRIES);
68
- // Build codebook
69
- const codebook = {};
70
- topCandidates.forEach((c, i) => {
71
- const code = `${CODE_PREFIX}${String(i + 1).padStart(2, "0")}`;
72
- codebook[code] = c.phrase;
73
- });
74
- return codebook;
75
- }
76
- /**
77
- * Escape special regex characters.
78
- */
79
- function escapeRegex(str) {
80
- // Defensive type check
81
- if (!str || typeof str !== "string")
82
- return "";
83
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
84
- }
85
- /**
86
- * Apply dynamic codebook to messages.
87
- */
88
- export function applyDynamicCodebook(messages) {
89
- // Build codebook from content
90
- const codebook = buildDynamicCodebook(messages);
91
- if (Object.keys(codebook).length === 0) {
92
- return {
93
- messages,
94
- charsSaved: 0,
95
- dynamicCodes: {},
96
- substitutions: 0,
97
- };
98
- }
99
- // Create inverse map for replacement
100
- const phraseToCode = {};
101
- for (const [code, phrase] of Object.entries(codebook)) {
102
- phraseToCode[phrase] = code;
103
- }
104
- // Sort phrases by length (longest first) to avoid partial replacements
105
- const sortedPhrases = Object.keys(phraseToCode).sort((a, b) => b.length - a.length);
106
- let charsSaved = 0;
107
- let substitutions = 0;
108
- // Apply replacements
109
- const result = messages.map((msg) => {
110
- // Only process string content (skip arrays for multimodal messages)
111
- if (!msg.content || typeof msg.content !== "string")
112
- return msg;
113
- let content = msg.content;
114
- for (const phrase of sortedPhrases) {
115
- const code = phraseToCode[phrase];
116
- const regex = new RegExp(escapeRegex(phrase), "g");
117
- const matches = content.match(regex);
118
- if (matches) {
119
- content = content.replace(regex, code);
120
- charsSaved += (phrase.length - code.length) * matches.length;
121
- substitutions += matches.length;
122
- }
123
- }
124
- return { ...msg, content };
125
- });
126
- return {
127
- messages: result,
128
- charsSaved,
129
- dynamicCodes: codebook,
130
- substitutions,
131
- };
132
- }
133
- /**
134
- * Generate header for dynamic codes (to include in system message).
135
- */
136
- export function generateDynamicCodebookHeader(codebook) {
137
- if (Object.keys(codebook).length === 0)
138
- return "";
139
- const entries = Object.entries(codebook)
140
- .slice(0, 20) // Limit header size
141
- .map(([code, phrase]) => {
142
- // Truncate long phrases in header
143
- const displayPhrase = phrase.length > 40 ? phrase.slice(0, 37) + "..." : phrase;
144
- return `${code}=${displayPhrase}`;
145
- })
146
- .join(", ");
147
- return `[DynDict: ${entries}]`;
148
- }
149
- //# sourceMappingURL=dynamic-codebook.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dynamic-codebook.js","sourceRoot":"","sources":["../../../src/compression/layers/dynamic-codebook.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Layer 5: JSON Compaction
3
- *
4
- * Minifies JSON in tool_call arguments and tool results.
5
- * Removes pretty-print whitespace from JSON strings.
6
- *
7
- * Safe for LLM: JSON semantics unchanged.
8
- * Expected savings: 2-4%
9
- */
10
- import { NormalizedMessage } from "../types.js";
11
- export interface JsonCompactResult {
12
- messages: NormalizedMessage[];
13
- charsSaved: number;
14
- }
15
- /**
16
- * Apply JSON compaction to all messages.
17
- *
18
- * Targets:
19
- * - tool_call arguments (in assistant messages)
20
- * - tool message content (often JSON)
21
- */
22
- export declare function compactMessagesJson(messages: NormalizedMessage[]): JsonCompactResult;
23
- //# sourceMappingURL=json-compact.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-compact.d.ts","sourceRoot":"","sources":["../../../src/compression/layers/json-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAY,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAuCD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,CAmCpF"}
@@ -1,79 +0,0 @@
1
- /**
2
- * Layer 5: JSON Compaction
3
- *
4
- * Minifies JSON in tool_call arguments and tool results.
5
- * Removes pretty-print whitespace from JSON strings.
6
- *
7
- * Safe for LLM: JSON semantics unchanged.
8
- * Expected savings: 2-4%
9
- */
10
- /**
11
- * Compact a JSON string by parsing and re-stringifying without formatting.
12
- */
13
- function compactJson(jsonString) {
14
- try {
15
- const parsed = JSON.parse(jsonString);
16
- return JSON.stringify(parsed);
17
- }
18
- catch {
19
- // Not valid JSON, return as-is
20
- return jsonString;
21
- }
22
- }
23
- /**
24
- * Check if a string looks like JSON (starts with { or [).
25
- */
26
- function looksLikeJson(str) {
27
- const trimmed = str.trim();
28
- return ((trimmed.startsWith("{") && trimmed.endsWith("}")) ||
29
- (trimmed.startsWith("[") && trimmed.endsWith("]")));
30
- }
31
- /**
32
- * Compact tool_call arguments in a message.
33
- */
34
- function compactToolCalls(toolCalls) {
35
- return toolCalls.map((tc) => ({
36
- ...tc,
37
- function: {
38
- ...tc.function,
39
- arguments: compactJson(tc.function.arguments),
40
- },
41
- }));
42
- }
43
- /**
44
- * Apply JSON compaction to all messages.
45
- *
46
- * Targets:
47
- * - tool_call arguments (in assistant messages)
48
- * - tool message content (often JSON)
49
- */
50
- export function compactMessagesJson(messages) {
51
- let charsSaved = 0;
52
- const result = messages.map((message) => {
53
- const newMessage = { ...message };
54
- // Compact tool_calls arguments
55
- if (message.tool_calls && message.tool_calls.length > 0) {
56
- const originalLength = JSON.stringify(message.tool_calls).length;
57
- newMessage.tool_calls = compactToolCalls(message.tool_calls);
58
- const newLength = JSON.stringify(newMessage.tool_calls).length;
59
- charsSaved += originalLength - newLength;
60
- }
61
- // Compact tool message content if it looks like JSON
62
- // Only process string content (skip arrays for multimodal messages)
63
- if (message.role === "tool" &&
64
- message.content &&
65
- typeof message.content === "string" &&
66
- looksLikeJson(message.content)) {
67
- const originalLength = message.content.length;
68
- const compacted = compactJson(message.content);
69
- charsSaved += originalLength - compacted.length;
70
- newMessage.content = compacted;
71
- }
72
- return newMessage;
73
- });
74
- return {
75
- messages: result,
76
- charsSaved,
77
- };
78
- }
79
- //# sourceMappingURL=json-compact.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-compact.js","sourceRoot":"","sources":["../../../src/compression/layers/json-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;GAEG;AACH,SAAS,WAAW,CAAC,UAAkB;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;QAC/B,OAAO,UAAU,CAAC;IACpB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,OAAO,CACL,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CACnD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,SAAqB;IAC7C,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5B,GAAG,EAAE;QACL,QAAQ,EAAE;YACR,GAAG,EAAE,CAAC,QAAQ;YACd,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;SAC9C;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA6B;IAC/D,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACtC,MAAM,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAElC,+BAA+B;QAC/B,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;YACjE,UAAU,CAAC,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;YAC/D,UAAU,IAAI,cAAc,GAAG,SAAS,CAAC;QAC3C,CAAC;QAED,qDAAqD;QACrD,oEAAoE;QACpE,IACE,OAAO,CAAC,IAAI,KAAK,MAAM;YACvB,OAAO,CAAC,OAAO;YACf,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;YACnC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAC9B,CAAC;YACD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9C,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/C,UAAU,IAAI,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;YAChD,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;QACjC,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -1,21 +0,0 @@
1
- /**
2
- * L6: Observation Compression (AGGRESSIVE)
3
- *
4
- * Inspired by claw-compactor's 97% compression on tool results.
5
- * Tool call results (especially large ones) are summarized to key info only.
6
- *
7
- * This is the biggest compression win - tool outputs can be 10KB+ but
8
- * only ~200 chars of actual useful information.
9
- */
10
- import { NormalizedMessage } from "../types.js";
11
- interface ObservationResult {
12
- messages: NormalizedMessage[];
13
- charsSaved: number;
14
- observationsCompressed: number;
15
- }
16
- /**
17
- * Compress tool results in messages.
18
- */
19
- export declare function compressObservations(messages: NormalizedMessage[]): ObservationResult;
20
- export {};
21
- //# sourceMappingURL=observation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../../../src/compression/layers/observation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAoHD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,CAuCrF"}