@blockrun/clawrouter 0.12.102 → 0.12.104

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 (283) hide show
  1. package/dist/cli.d.ts +0 -15
  2. package/dist/cli.js +80068 -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/scripts/reinstall.sh +43 -7
  9. package/scripts/update.sh +35 -1
  10. package/dist/auth.d.ts +0 -82
  11. package/dist/auth.d.ts.map +0 -1
  12. package/dist/auth.js +0 -388
  13. package/dist/auth.js.map +0 -1
  14. package/dist/balance.d.ts +0 -97
  15. package/dist/balance.d.ts.map +0 -1
  16. package/dist/balance.js +0 -157
  17. package/dist/balance.js.map +0 -1
  18. package/dist/cli.d.ts.map +0 -1
  19. package/dist/compression/codebook.d.ts +0 -24
  20. package/dist/compression/codebook.d.ts.map +0 -1
  21. package/dist/compression/codebook.js +0 -119
  22. package/dist/compression/codebook.js.map +0 -1
  23. package/dist/compression/index.d.ts +0 -33
  24. package/dist/compression/index.d.ts.map +0 -1
  25. package/dist/compression/index.js +0 -246
  26. package/dist/compression/index.js.map +0 -1
  27. package/dist/compression/layers/deduplication.d.ts +0 -28
  28. package/dist/compression/layers/deduplication.d.ts.map +0 -1
  29. package/dist/compression/layers/deduplication.js +0 -101
  30. package/dist/compression/layers/deduplication.js.map +0 -1
  31. package/dist/compression/layers/dictionary.d.ts +0 -21
  32. package/dist/compression/layers/dictionary.d.ts.map +0 -1
  33. package/dist/compression/layers/dictionary.js +0 -73
  34. package/dist/compression/layers/dictionary.js.map +0 -1
  35. package/dist/compression/layers/dynamic-codebook.d.ts +0 -26
  36. package/dist/compression/layers/dynamic-codebook.d.ts.map +0 -1
  37. package/dist/compression/layers/dynamic-codebook.js +0 -149
  38. package/dist/compression/layers/dynamic-codebook.js.map +0 -1
  39. package/dist/compression/layers/json-compact.d.ts +0 -23
  40. package/dist/compression/layers/json-compact.d.ts.map +0 -1
  41. package/dist/compression/layers/json-compact.js +0 -79
  42. package/dist/compression/layers/json-compact.js.map +0 -1
  43. package/dist/compression/layers/observation.d.ts +0 -21
  44. package/dist/compression/layers/observation.d.ts.map +0 -1
  45. package/dist/compression/layers/observation.js +0 -130
  46. package/dist/compression/layers/observation.js.map +0 -1
  47. package/dist/compression/layers/paths.d.ts +0 -24
  48. package/dist/compression/layers/paths.d.ts.map +0 -1
  49. package/dist/compression/layers/paths.js +0 -110
  50. package/dist/compression/layers/paths.js.map +0 -1
  51. package/dist/compression/layers/whitespace.d.ts +0 -27
  52. package/dist/compression/layers/whitespace.d.ts.map +0 -1
  53. package/dist/compression/layers/whitespace.js +0 -60
  54. package/dist/compression/layers/whitespace.js.map +0 -1
  55. package/dist/compression/types.d.ts +0 -84
  56. package/dist/compression/types.d.ts.map +0 -1
  57. package/dist/compression/types.js +0 -27
  58. package/dist/compression/types.js.map +0 -1
  59. package/dist/config.d.ts +0 -12
  60. package/dist/config.d.ts.map +0 -1
  61. package/dist/config.js +0 -22
  62. package/dist/config.js.map +0 -1
  63. package/dist/dedup.d.ts +0 -34
  64. package/dist/dedup.d.ts.map +0 -1
  65. package/dist/dedup.js +0 -150
  66. package/dist/dedup.js.map +0 -1
  67. package/dist/doctor.d.ts +0 -8
  68. package/dist/doctor.d.ts.map +0 -1
  69. package/dist/doctor.js +0 -375
  70. package/dist/doctor.js.map +0 -1
  71. package/dist/error-classification.test.d.ts +0 -2
  72. package/dist/error-classification.test.d.ts.map +0 -1
  73. package/dist/error-classification.test.js +0 -59
  74. package/dist/error-classification.test.js.map +0 -1
  75. package/dist/errors.d.ts +0 -54
  76. package/dist/errors.d.ts.map +0 -1
  77. package/dist/errors.js +0 -85
  78. package/dist/errors.js.map +0 -1
  79. package/dist/exclude-models.d.ts +0 -28
  80. package/dist/exclude-models.d.ts.map +0 -1
  81. package/dist/exclude-models.integration.test.d.ts +0 -2
  82. package/dist/exclude-models.integration.test.d.ts.map +0 -1
  83. package/dist/exclude-models.integration.test.js +0 -46
  84. package/dist/exclude-models.integration.test.js.map +0 -1
  85. package/dist/exclude-models.js +0 -70
  86. package/dist/exclude-models.js.map +0 -1
  87. package/dist/exclude-models.test.d.ts +0 -5
  88. package/dist/exclude-models.test.d.ts.map +0 -1
  89. package/dist/exclude-models.test.js +0 -95
  90. package/dist/exclude-models.test.js.map +0 -1
  91. package/dist/fs-read.d.ts +0 -11
  92. package/dist/fs-read.d.ts.map +0 -1
  93. package/dist/fs-read.js +0 -47
  94. package/dist/fs-read.js.map +0 -1
  95. package/dist/index.d.ts.map +0 -1
  96. package/dist/journal.d.ts +0 -67
  97. package/dist/journal.d.ts.map +0 -1
  98. package/dist/journal.js +0 -184
  99. package/dist/journal.js.map +0 -1
  100. package/dist/journal.test.d.ts +0 -2
  101. package/dist/journal.test.d.ts.map +0 -1
  102. package/dist/journal.test.js +0 -201
  103. package/dist/journal.test.js.map +0 -1
  104. package/dist/logger.d.ts +0 -33
  105. package/dist/logger.d.ts.map +0 -1
  106. package/dist/logger.js +0 -35
  107. package/dist/logger.js.map +0 -1
  108. package/dist/models.d.ts +0 -107
  109. package/dist/models.d.ts.map +0 -1
  110. package/dist/models.js +0 -941
  111. package/dist/models.js.map +0 -1
  112. package/dist/models.test.d.ts +0 -2
  113. package/dist/models.test.d.ts.map +0 -1
  114. package/dist/models.test.js +0 -38
  115. package/dist/models.test.js.map +0 -1
  116. package/dist/partners/index.d.ts +0 -8
  117. package/dist/partners/index.d.ts.map +0 -1
  118. package/dist/partners/index.js +0 -6
  119. package/dist/partners/index.js.map +0 -1
  120. package/dist/partners/registry.d.ts +0 -51
  121. package/dist/partners/registry.d.ts.map +0 -1
  122. package/dist/partners/registry.js +0 -256
  123. package/dist/partners/registry.js.map +0 -1
  124. package/dist/partners/tools.d.ts +0 -24
  125. package/dist/partners/tools.d.ts.map +0 -1
  126. package/dist/partners/tools.js +0 -97
  127. package/dist/partners/tools.js.map +0 -1
  128. package/dist/payment-preauth.d.ts +0 -17
  129. package/dist/payment-preauth.d.ts.map +0 -1
  130. package/dist/payment-preauth.js +0 -102
  131. package/dist/payment-preauth.js.map +0 -1
  132. package/dist/provider.d.ts +0 -19
  133. package/dist/provider.d.ts.map +0 -1
  134. package/dist/provider.js +0 -45
  135. package/dist/provider.js.map +0 -1
  136. package/dist/proxy.d.ts +0 -210
  137. package/dist/proxy.d.ts.map +0 -1
  138. package/dist/proxy.debrand.test.d.ts +0 -2
  139. package/dist/proxy.debrand.test.d.ts.map +0 -1
  140. package/dist/proxy.debrand.test.js +0 -101
  141. package/dist/proxy.debrand.test.js.map +0 -1
  142. package/dist/proxy.degraded-response.test.d.ts +0 -2
  143. package/dist/proxy.degraded-response.test.d.ts.map +0 -1
  144. package/dist/proxy.degraded-response.test.js +0 -105
  145. package/dist/proxy.degraded-response.test.js.map +0 -1
  146. package/dist/proxy.image-download.test.d.ts +0 -2
  147. package/dist/proxy.image-download.test.d.ts.map +0 -1
  148. package/dist/proxy.image-download.test.js +0 -92
  149. package/dist/proxy.image-download.test.js.map +0 -1
  150. package/dist/proxy.js +0 -3810
  151. package/dist/proxy.js.map +0 -1
  152. package/dist/proxy.models-endpoint.test.d.ts +0 -2
  153. package/dist/proxy.models-endpoint.test.d.ts.map +0 -1
  154. package/dist/proxy.models-endpoint.test.js +0 -19
  155. package/dist/proxy.models-endpoint.test.js.map +0 -1
  156. package/dist/proxy.multiturn-thinking.test.d.ts +0 -2
  157. package/dist/proxy.multiturn-thinking.test.d.ts.map +0 -1
  158. package/dist/proxy.multiturn-thinking.test.js +0 -82
  159. package/dist/proxy.multiturn-thinking.test.js.map +0 -1
  160. package/dist/proxy.payment-chain-reuse.test.d.ts +0 -2
  161. package/dist/proxy.payment-chain-reuse.test.d.ts.map +0 -1
  162. package/dist/proxy.payment-chain-reuse.test.js +0 -30
  163. package/dist/proxy.payment-chain-reuse.test.js.map +0 -1
  164. package/dist/proxy.solana-resilience.test.d.ts +0 -12
  165. package/dist/proxy.solana-resilience.test.d.ts.map +0 -1
  166. package/dist/proxy.solana-resilience.test.js +0 -39
  167. package/dist/proxy.solana-resilience.test.js.map +0 -1
  168. package/dist/report.d.ts +0 -6
  169. package/dist/report.d.ts.map +0 -1
  170. package/dist/report.js +0 -44
  171. package/dist/report.js.map +0 -1
  172. package/dist/response-cache.advanced.test.d.ts +0 -2
  173. package/dist/response-cache.advanced.test.d.ts.map +0 -1
  174. package/dist/response-cache.advanced.test.js +0 -566
  175. package/dist/response-cache.advanced.test.js.map +0 -1
  176. package/dist/response-cache.d.ts +0 -85
  177. package/dist/response-cache.d.ts.map +0 -1
  178. package/dist/response-cache.edge-cases.test.d.ts +0 -2
  179. package/dist/response-cache.edge-cases.test.d.ts.map +0 -1
  180. package/dist/response-cache.edge-cases.test.js +0 -488
  181. package/dist/response-cache.edge-cases.test.js.map +0 -1
  182. package/dist/response-cache.extreme.test.d.ts +0 -2
  183. package/dist/response-cache.extreme.test.d.ts.map +0 -1
  184. package/dist/response-cache.extreme.test.js +0 -561
  185. package/dist/response-cache.extreme.test.js.map +0 -1
  186. package/dist/response-cache.js +0 -240
  187. package/dist/response-cache.js.map +0 -1
  188. package/dist/response-cache.test.d.ts +0 -2
  189. package/dist/response-cache.test.d.ts.map +0 -1
  190. package/dist/response-cache.test.js +0 -242
  191. package/dist/response-cache.test.js.map +0 -1
  192. package/dist/retry.d.ts +0 -42
  193. package/dist/retry.d.ts.map +0 -1
  194. package/dist/retry.js +0 -99
  195. package/dist/retry.js.map +0 -1
  196. package/dist/router/config.d.ts +0 -11
  197. package/dist/router/config.d.ts.map +0 -1
  198. package/dist/router/config.js +0 -1215
  199. package/dist/router/config.js.map +0 -1
  200. package/dist/router/index.d.ts +0 -18
  201. package/dist/router/index.d.ts.map +0 -1
  202. package/dist/router/index.js +0 -19
  203. package/dist/router/index.js.map +0 -1
  204. package/dist/router/llm-classifier.d.ts +0 -29
  205. package/dist/router/llm-classifier.d.ts.map +0 -1
  206. package/dist/router/llm-classifier.js +0 -99
  207. package/dist/router/llm-classifier.js.map +0 -1
  208. package/dist/router/rules.d.ts +0 -12
  209. package/dist/router/rules.d.ts.map +0 -1
  210. package/dist/router/rules.js +0 -202
  211. package/dist/router/rules.js.map +0 -1
  212. package/dist/router/selector.d.ts +0 -58
  213. package/dist/router/selector.d.ts.map +0 -1
  214. package/dist/router/selector.js +0 -165
  215. package/dist/router/selector.js.map +0 -1
  216. package/dist/router/selector.test.d.ts +0 -2
  217. package/dist/router/selector.test.d.ts.map +0 -1
  218. package/dist/router/selector.test.js +0 -67
  219. package/dist/router/selector.test.js.map +0 -1
  220. package/dist/router/strategy.d.ts +0 -19
  221. package/dist/router/strategy.d.ts.map +0 -1
  222. package/dist/router/strategy.js +0 -138
  223. package/dist/router/strategy.js.map +0 -1
  224. package/dist/router/strategy.test.d.ts +0 -2
  225. package/dist/router/strategy.test.d.ts.map +0 -1
  226. package/dist/router/strategy.test.js +0 -131
  227. package/dist/router/strategy.test.js.map +0 -1
  228. package/dist/router/types.d.ts +0 -127
  229. package/dist/router/types.d.ts.map +0 -1
  230. package/dist/router/types.js +0 -11
  231. package/dist/router/types.js.map +0 -1
  232. package/dist/session.d.ts +0 -124
  233. package/dist/session.d.ts.map +0 -1
  234. package/dist/session.js +0 -256
  235. package/dist/session.js.map +0 -1
  236. package/dist/session.test.d.ts +0 -2
  237. package/dist/session.test.d.ts.map +0 -1
  238. package/dist/session.test.js +0 -163
  239. package/dist/session.test.js.map +0 -1
  240. package/dist/solana-balance.d.ts +0 -48
  241. package/dist/solana-balance.d.ts.map +0 -1
  242. package/dist/solana-balance.js +0 -142
  243. package/dist/solana-balance.js.map +0 -1
  244. package/dist/spend-control.d.ts +0 -112
  245. package/dist/spend-control.d.ts.map +0 -1
  246. package/dist/spend-control.js +0 -278
  247. package/dist/spend-control.js.map +0 -1
  248. package/dist/spend-control.test.d.ts +0 -5
  249. package/dist/spend-control.test.d.ts.map +0 -1
  250. package/dist/spend-control.test.js +0 -210
  251. package/dist/spend-control.test.js.map +0 -1
  252. package/dist/stats.d.ts +0 -64
  253. package/dist/stats.d.ts.map +0 -1
  254. package/dist/stats.js +0 -295
  255. package/dist/stats.js.map +0 -1
  256. package/dist/types.d.ts +0 -150
  257. package/dist/types.d.ts.map +0 -1
  258. package/dist/types.js +0 -9
  259. package/dist/types.js.map +0 -1
  260. package/dist/update-hint.test.d.ts +0 -9
  261. package/dist/update-hint.test.d.ts.map +0 -1
  262. package/dist/update-hint.test.js +0 -156
  263. package/dist/update-hint.test.js.map +0 -1
  264. package/dist/updater.d.ts +0 -10
  265. package/dist/updater.d.ts.map +0 -1
  266. package/dist/updater.js +0 -55
  267. package/dist/updater.js.map +0 -1
  268. package/dist/version.d.ts +0 -3
  269. package/dist/version.d.ts.map +0 -1
  270. package/dist/version.js +0 -16
  271. package/dist/version.js.map +0 -1
  272. package/dist/wallet.d.ts +0 -52
  273. package/dist/wallet.d.ts.map +0 -1
  274. package/dist/wallet.js +0 -94
  275. package/dist/wallet.js.map +0 -1
  276. package/dist/wallet.test.d.ts +0 -6
  277. package/dist/wallet.test.d.ts.map +0 -1
  278. package/dist/wallet.test.js +0 -117
  279. package/dist/wallet.test.js.map +0 -1
  280. package/dist/x402-sdk.test.d.ts +0 -6
  281. package/dist/x402-sdk.test.d.ts.map +0 -1
  282. package/dist/x402-sdk.test.js +0 -161
  283. package/dist/x402-sdk.test.js.map +0 -1
@@ -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"}
@@ -1,130 +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
- // Max length for tool results before compression kicks in
11
- const TOOL_RESULT_THRESHOLD = 500;
12
- // Max length to compress tool results down to
13
- const COMPRESSED_RESULT_MAX = 300;
14
- /**
15
- * Extract key information from tool result.
16
- * Keeps: errors, key values, status, first/last important lines.
17
- */
18
- function compressToolResult(content) {
19
- if (!content || content.length <= TOOL_RESULT_THRESHOLD) {
20
- return content;
21
- }
22
- const lines = content
23
- .split("\n")
24
- .map((l) => l.trim())
25
- .filter(Boolean);
26
- // Priority 1: Error messages (always keep)
27
- const errorLines = lines.filter((l) => /error|exception|failed|denied|refused|timeout|invalid/i.test(l) && l.length < 200);
28
- // Priority 2: Status/result lines
29
- const statusLines = lines.filter((l) => /success|complete|created|updated|found|result|status|total|count/i.test(l) && l.length < 150);
30
- // Priority 3: Key JSON fields (extract important values)
31
- const jsonMatches = [];
32
- const jsonPattern = /"(id|name|status|error|message|count|total|url|path)":\s*"?([^",}\n]+)"?/gi;
33
- let match;
34
- while ((match = jsonPattern.exec(content)) !== null) {
35
- jsonMatches.push(`${match[1]}: ${match[2].slice(0, 50)}`);
36
- }
37
- // Priority 4: First and last meaningful lines
38
- const firstLine = lines[0]?.slice(0, 100);
39
- const lastLine = lines.length > 1 ? lines[lines.length - 1]?.slice(0, 100) : "";
40
- // Build compressed observation
41
- const parts = [];
42
- if (errorLines.length > 0) {
43
- parts.push("[ERR] " + errorLines.slice(0, 3).join(" | "));
44
- }
45
- if (statusLines.length > 0) {
46
- parts.push(statusLines.slice(0, 3).join(" | "));
47
- }
48
- if (jsonMatches.length > 0) {
49
- parts.push(jsonMatches.slice(0, 5).join(", "));
50
- }
51
- if (parts.length === 0) {
52
- // Fallback: keep first/last lines with truncation marker
53
- parts.push(firstLine || "");
54
- if (lines.length > 2) {
55
- parts.push(`[...${lines.length - 2} lines...]`);
56
- }
57
- if (lastLine && lastLine !== firstLine) {
58
- parts.push(lastLine);
59
- }
60
- }
61
- let result = parts.join("\n");
62
- // Final length cap
63
- if (result.length > COMPRESSED_RESULT_MAX) {
64
- result = result.slice(0, COMPRESSED_RESULT_MAX - 20) + "\n[...truncated]";
65
- }
66
- return result;
67
- }
68
- /**
69
- * Compress large repeated content blocks.
70
- * Detects when same large block appears multiple times.
71
- */
72
- function deduplicateLargeBlocks(messages) {
73
- const blockHashes = new Map(); // hash -> first occurrence index
74
- let charsSaved = 0;
75
- const result = messages.map((msg, idx) => {
76
- // Only process string content (skip arrays for multimodal messages)
77
- if (!msg.content || typeof msg.content !== "string" || msg.content.length < 500) {
78
- return msg;
79
- }
80
- // Hash first 200 chars as block identifier
81
- const blockKey = msg.content.slice(0, 200);
82
- if (blockHashes.has(blockKey)) {
83
- const firstIdx = blockHashes.get(blockKey);
84
- const original = msg.content;
85
- const compressed = `[See message #${firstIdx + 1} - same content]`;
86
- charsSaved += original.length - compressed.length;
87
- return { ...msg, content: compressed };
88
- }
89
- blockHashes.set(blockKey, idx);
90
- return msg;
91
- });
92
- return { messages: result, charsSaved };
93
- }
94
- /**
95
- * Compress tool results in messages.
96
- */
97
- export function compressObservations(messages) {
98
- let charsSaved = 0;
99
- let observationsCompressed = 0;
100
- // First pass: compress individual tool results
101
- let result = messages.map((msg) => {
102
- // Only compress tool role messages (these are tool call results)
103
- // Only process string content (skip arrays for multimodal messages)
104
- if (msg.role !== "tool" || !msg.content || typeof msg.content !== "string") {
105
- return msg;
106
- }
107
- const original = msg.content;
108
- if (original.length <= TOOL_RESULT_THRESHOLD) {
109
- return msg;
110
- }
111
- const compressed = compressToolResult(original);
112
- const saved = original.length - compressed.length;
113
- if (saved > 50) {
114
- charsSaved += saved;
115
- observationsCompressed++;
116
- return { ...msg, content: compressed };
117
- }
118
- return msg;
119
- });
120
- // Second pass: deduplicate large repeated blocks
121
- const dedupResult = deduplicateLargeBlocks(result);
122
- result = dedupResult.messages;
123
- charsSaved += dedupResult.charsSaved;
124
- return {
125
- messages: result,
126
- charsSaved,
127
- observationsCompressed,
128
- };
129
- }
130
- //# sourceMappingURL=observation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"observation.js","sourceRoot":"","sources":["../../../src/compression/layers/observation.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Layer 4: Path Shortening
3
- *
4
- * Detects common filesystem path prefixes and replaces them with short codes.
5
- * Common in coding assistant contexts with repeated file paths.
6
- *
7
- * Safe for LLM: Lossless abbreviation with path map header.
8
- * Expected savings: 1-3%
9
- */
10
- import { NormalizedMessage } from "../types.js";
11
- export interface PathShorteningResult {
12
- messages: NormalizedMessage[];
13
- pathMap: Record<string, string>;
14
- charsSaved: number;
15
- }
16
- /**
17
- * Apply path shortening to all messages.
18
- */
19
- export declare function shortenPaths(messages: NormalizedMessage[]): PathShorteningResult;
20
- /**
21
- * Generate the path map header for the codebook.
22
- */
23
- export declare function generatePathMapHeader(pathMap: Record<string, string>): string;
24
- //# sourceMappingURL=paths.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/compression/layers/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAgDD;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,oBAAoB,CAwDhF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAQ7E"}
@@ -1,110 +0,0 @@
1
- /**
2
- * Layer 4: Path Shortening
3
- *
4
- * Detects common filesystem path prefixes and replaces them with short codes.
5
- * Common in coding assistant contexts with repeated file paths.
6
- *
7
- * Safe for LLM: Lossless abbreviation with path map header.
8
- * Expected savings: 1-3%
9
- */
10
- // Regex to match filesystem paths
11
- const PATH_REGEX = /(?:\/[\w.-]+){3,}/g;
12
- /**
13
- * Extract all paths from messages and find common prefixes.
14
- */
15
- function extractPaths(messages) {
16
- const paths = [];
17
- for (const message of messages) {
18
- // Only process string content (skip arrays for multimodal messages)
19
- if (!message.content || typeof message.content !== "string")
20
- continue;
21
- const matches = message.content.match(PATH_REGEX);
22
- if (matches) {
23
- paths.push(...matches);
24
- }
25
- }
26
- return paths;
27
- }
28
- /**
29
- * Group paths by their common prefixes.
30
- * Returns prefixes that appear at least 3 times.
31
- */
32
- function findFrequentPrefixes(paths) {
33
- const prefixCounts = new Map();
34
- for (const path of paths) {
35
- const parts = path.split("/").filter(Boolean);
36
- // Try prefixes of different lengths
37
- for (let i = 2; i < parts.length; i++) {
38
- const prefix = "/" + parts.slice(0, i).join("/") + "/";
39
- prefixCounts.set(prefix, (prefixCounts.get(prefix) || 0) + 1);
40
- }
41
- }
42
- // Return prefixes that appear 3+ times, sorted by length (longest first)
43
- return Array.from(prefixCounts.entries())
44
- .filter(([, count]) => count >= 3)
45
- .sort((a, b) => b[0].length - a[0].length)
46
- .slice(0, 5) // Max 5 path codes
47
- .map(([prefix]) => prefix);
48
- }
49
- /**
50
- * Apply path shortening to all messages.
51
- */
52
- export function shortenPaths(messages) {
53
- const allPaths = extractPaths(messages);
54
- if (allPaths.length < 5) {
55
- // Not enough paths to benefit from shortening
56
- return {
57
- messages,
58
- pathMap: {},
59
- charsSaved: 0,
60
- };
61
- }
62
- const prefixes = findFrequentPrefixes(allPaths);
63
- if (prefixes.length === 0) {
64
- return {
65
- messages,
66
- pathMap: {},
67
- charsSaved: 0,
68
- };
69
- }
70
- // Create path map
71
- const pathMap = {};
72
- prefixes.forEach((prefix, i) => {
73
- pathMap[`$P${i + 1}`] = prefix;
74
- });
75
- // Replace paths in messages
76
- let charsSaved = 0;
77
- const result = messages.map((message) => {
78
- // Only process string content (skip arrays for multimodal messages)
79
- if (!message.content || typeof message.content !== "string")
80
- return message;
81
- let content = message.content;
82
- const originalLength = content.length;
83
- // Replace prefixes (longest first to avoid partial replacements)
84
- for (const [code, prefix] of Object.entries(pathMap)) {
85
- content = content.split(prefix).join(code + "/");
86
- }
87
- charsSaved += originalLength - content.length;
88
- return {
89
- ...message,
90
- content,
91
- };
92
- });
93
- return {
94
- messages: result,
95
- pathMap,
96
- charsSaved,
97
- };
98
- }
99
- /**
100
- * Generate the path map header for the codebook.
101
- */
102
- export function generatePathMapHeader(pathMap) {
103
- if (Object.keys(pathMap).length === 0)
104
- return "";
105
- const entries = Object.entries(pathMap)
106
- .map(([code, path]) => `${code}=${path}`)
107
- .join(", ");
108
- return `[Paths: ${entries}]`;
109
- }
110
- //# sourceMappingURL=paths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/compression/layers/paths.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Layer 2: Whitespace Normalization
3
- *
4
- * Reduces excessive whitespace without changing semantic meaning.
5
- *
6
- * Safe for LLM: Tokenizers normalize whitespace anyway.
7
- * Expected savings: 3-8%
8
- */
9
- import { NormalizedMessage } from "../types.js";
10
- export interface WhitespaceResult {
11
- messages: NormalizedMessage[];
12
- charsSaved: number;
13
- }
14
- /**
15
- * Normalize whitespace in a string.
16
- *
17
- * - Max 2 consecutive newlines
18
- * - Remove trailing whitespace from lines
19
- * - Normalize tabs to spaces
20
- * - Trim start/end
21
- */
22
- export declare function normalizeWhitespace(content: string): string;
23
- /**
24
- * Apply whitespace normalization to all messages.
25
- */
26
- export declare function normalizeMessagesWhitespace(messages: NormalizedMessage[]): WhitespaceResult;
27
- //# sourceMappingURL=whitespace.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whitespace.d.ts","sourceRoot":"","sources":["../../../src/compression/layers/whitespace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsB3D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,gBAAgB,CAqB3F"}