anyray-connect 0.9.6 → 0.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/hook.js +54 -8
- package/dist/commands/hook.js.map +1 -1
- package/dist/util/intent.js +124 -0
- package/dist/util/intent.js.map +1 -0
- package/dist/util/trimOutput.js +78 -16
- package/dist/util/trimOutput.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/hook.js
CHANGED
|
@@ -32,7 +32,20 @@ import { gzip } from 'node:zlib';
|
|
|
32
32
|
import { promisify } from 'node:util';
|
|
33
33
|
import { extractToolOutputBody, trimText, DEFAULT_TRIM, } from '../util/trimOutput.js';
|
|
34
34
|
import { hookCacheKey, readCache, writeCache, } from '../util/hookCache.js';
|
|
35
|
-
|
|
35
|
+
import { readTranscriptIntent } from '../util/intent.js';
|
|
36
|
+
/**
|
|
37
|
+
* How long to wait on the gateway before falling back to the local trim. The
|
|
38
|
+
* gateway's relevance_filter + gzip round-trip on a big log can take ~1.5-2s, so
|
|
39
|
+
* a tight budget would abort the smart path and hand the dev the query-blind
|
|
40
|
+
* local trim instead. Default 3s; tunable for slow links / hot boxes. The hook
|
|
41
|
+
* is async (PostToolUse runs off Claude Code's critical path), so a few seconds
|
|
42
|
+
* here doesn't block the user's turn — it just defers the optimized output.
|
|
43
|
+
*/
|
|
44
|
+
const DEFAULT_OPTIMIZE_TIMEOUT_MS = 3000;
|
|
45
|
+
const optimizeTimeoutMs = () => {
|
|
46
|
+
const v = Number(process.env.ANYRAY_HOOK_OPTIMIZE_TIMEOUT_MS);
|
|
47
|
+
return Number.isFinite(v) && v > 0 ? v : DEFAULT_OPTIMIZE_TIMEOUT_MS;
|
|
48
|
+
};
|
|
36
49
|
const BEACON_TIMEOUT_MS = 400;
|
|
37
50
|
const emit = (value) => JSON.stringify({
|
|
38
51
|
hookSpecificOutput: {
|
|
@@ -82,9 +95,26 @@ export const runHook = async (raw, deps) => {
|
|
|
82
95
|
if (!found || found.body.length <= deps.sizeGate)
|
|
83
96
|
return passthrough;
|
|
84
97
|
const tool = typeof payload.tool_name === 'string' ? payload.tool_name : 'unknown';
|
|
98
|
+
// Recover the dev's live question (the rank target). Best-effort: a missing
|
|
99
|
+
// transcript / reader yields '' and we fall back to the tool-input hint.
|
|
100
|
+
const transcriptPath = typeof payload.transcript_path === 'string' ? payload.transcript_path : '';
|
|
101
|
+
let intent = '';
|
|
102
|
+
if (deps.readIntent && transcriptPath) {
|
|
103
|
+
try {
|
|
104
|
+
intent = await deps.readIntent(transcriptPath);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
intent = ''; // intent recovery is best-effort, never blocks the hook
|
|
108
|
+
}
|
|
109
|
+
}
|
|
85
110
|
// Key the cache on the same inputs that drive the gateway's verdict: the tool,
|
|
86
|
-
// the
|
|
87
|
-
|
|
111
|
+
// the query it ranks against (the live question, else the input hint), and the
|
|
112
|
+
// body. Folding intent in means the same output asked about two different ways
|
|
113
|
+
// gets two verdicts — a filter tuned to question A is never replayed for B.
|
|
114
|
+
const queryHint = intent
|
|
115
|
+
? `${intent}\n${hintOf(payload.tool_input)}`
|
|
116
|
+
: hintOf(payload.tool_input);
|
|
117
|
+
const key = hookCacheKey(tool, queryHint, found.body);
|
|
88
118
|
// Both are best-effort — the cache is an optimization, never a correctness
|
|
89
119
|
// dependency, so a throwing impl must not break the hook.
|
|
90
120
|
const remember = async (verdict) => {
|
|
@@ -130,7 +160,7 @@ export const runHook = async (raw, deps) => {
|
|
|
130
160
|
// output takes the fast path above.
|
|
131
161
|
let verdict = null;
|
|
132
162
|
try {
|
|
133
|
-
verdict = await deps.optimize(tool, payload.tool_input, found.body);
|
|
163
|
+
verdict = await deps.optimize(tool, payload.tool_input, found.body, intent);
|
|
134
164
|
}
|
|
135
165
|
catch {
|
|
136
166
|
verdict = null; // treat any failure as unreachable → fall back
|
|
@@ -195,10 +225,20 @@ const trimOptionsFromEnv = () => {
|
|
|
195
225
|
const parsed = Number(v);
|
|
196
226
|
return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;
|
|
197
227
|
};
|
|
228
|
+
// Like `n` but allows 0, so ANYRAY_HOOK_MIDDLE_WINDOWS=0 can DISABLE middle
|
|
229
|
+
// sampling (the prod escape hatch); a positive value tunes the window count.
|
|
230
|
+
const nonNeg = (k) => {
|
|
231
|
+
const v = process.env[k];
|
|
232
|
+
if (!v)
|
|
233
|
+
return undefined;
|
|
234
|
+
const parsed = Number(v);
|
|
235
|
+
return Number.isFinite(parsed) && parsed >= 0 ? Math.floor(parsed) : undefined;
|
|
236
|
+
};
|
|
198
237
|
return {
|
|
199
238
|
maxChars: n('ANYRAY_HOOK_MAX_CHARS'),
|
|
200
239
|
headChars: n('ANYRAY_HOOK_HEAD_CHARS'),
|
|
201
240
|
tailChars: n('ANYRAY_HOOK_TAIL_CHARS'),
|
|
241
|
+
middleWindows: nonNeg('ANYRAY_HOOK_MIDDLE_WINDOWS'),
|
|
202
242
|
};
|
|
203
243
|
};
|
|
204
244
|
/**
|
|
@@ -261,13 +301,18 @@ export const encodeOptimizeBody = async (payload) => {
|
|
|
261
301
|
}
|
|
262
302
|
};
|
|
263
303
|
/** POST one tool output to the gateway for server-side optimization. */
|
|
264
|
-
const optimizeViaGateway = async (target, tool, toolInput, body) => {
|
|
304
|
+
const optimizeViaGateway = async (target, tool, toolInput, body, intent) => {
|
|
265
305
|
if (!target)
|
|
266
306
|
return null;
|
|
267
307
|
const controller = new AbortController();
|
|
268
|
-
const timer = setTimeout(() => controller.abort(),
|
|
308
|
+
const timer = setTimeout(() => controller.abort(), optimizeTimeoutMs());
|
|
269
309
|
try {
|
|
270
|
-
const encoded = await encodeOptimizeBody(JSON.stringify({
|
|
310
|
+
const encoded = await encodeOptimizeBody(JSON.stringify({
|
|
311
|
+
tool,
|
|
312
|
+
toolInput,
|
|
313
|
+
...(intent ? { intent } : {}),
|
|
314
|
+
output: body,
|
|
315
|
+
}));
|
|
271
316
|
const headers = authHeaders(target);
|
|
272
317
|
if (encoded.encoding)
|
|
273
318
|
headers['content-encoding'] = encoded.encoding;
|
|
@@ -329,7 +374,8 @@ export const runPostToolUseHook = async () => {
|
|
|
329
374
|
const opts = trimOptionsFromEnv();
|
|
330
375
|
const target = await readBeaconTarget();
|
|
331
376
|
const { stdout } = await runHook(raw, {
|
|
332
|
-
optimize: (tool, toolInput, body) => optimizeViaGateway(target, tool, toolInput, body),
|
|
377
|
+
optimize: (tool, toolInput, body, intent) => optimizeViaGateway(target, tool, toolInput, body, intent),
|
|
378
|
+
readIntent: (transcriptPath) => readTranscriptIntent(transcriptPath),
|
|
333
379
|
localTrim: (body) => trimText(body, opts),
|
|
334
380
|
beacon: (tool, metrics) => sendBeacon(target, tool, metrics),
|
|
335
381
|
cacheGet: (key) => readCache(key),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recover the dev's live question from a Claude Code transcript, so the
|
|
3
|
+
* PostToolUse hook can tell the gateway what a bulky tool output is actually
|
|
4
|
+
* being read FOR.
|
|
5
|
+
*
|
|
6
|
+
* Why this exists: the hook trims a tool result the instant it's produced, in
|
|
7
|
+
* isolation. Without the question, the gateway's relevance_filter has nothing
|
|
8
|
+
* to rank against except the tool INPUT (a file path / shell command), which
|
|
9
|
+
* carries no signal about what the dev wants — so it keeps arbitrary lines and
|
|
10
|
+
* elides the ones that mattered (e.g. the 500s in an access log). Feeding the
|
|
11
|
+
* latest human turn(s) as the rank target is what makes the CLI path match the
|
|
12
|
+
* playground, where the question and the data share one message.
|
|
13
|
+
*
|
|
14
|
+
* Robust-by-design: the most recent `user` entries in a transcript are often
|
|
15
|
+
* tool_result CARRIERS (role:user, content:[{type:'tool_result'}]) or injected
|
|
16
|
+
* meta — never the human's words. We skip those and walk back over real text
|
|
17
|
+
* turns, collecting a few so a bare "continue" still picks up the prior
|
|
18
|
+
* substantive ask. Bounded everywhere (tail read + char/turn caps) because this
|
|
19
|
+
* runs on Claude Code's hot path.
|
|
20
|
+
*
|
|
21
|
+
* PRIVACY: the recovered text is the dev's OWN prompt; it rides the same content
|
|
22
|
+
* boundary the tool output already crosses (gateway processes it transiently,
|
|
23
|
+
* metadata-only logging) and is capped before it leaves. Nothing is logged here.
|
|
24
|
+
*/
|
|
25
|
+
import { open, stat } from 'node:fs/promises';
|
|
26
|
+
/** Cap on the intent text handed to the gateway (matches optimizer intentChars). */
|
|
27
|
+
const INTENT_MAX_CHARS = 600;
|
|
28
|
+
/** Stop after this many recent human turns — enough to survive a "continue". */
|
|
29
|
+
const MAX_TURNS = 3;
|
|
30
|
+
/** Only read this much of the transcript tail — bounds hot-path cost on huge files. */
|
|
31
|
+
const TAIL_BYTES = 256_000;
|
|
32
|
+
/** Pull plain text out of a message content (string, or array of typed blocks);
|
|
33
|
+
* tool_result / image / other blocks contribute nothing. */
|
|
34
|
+
const textOf = (content) => {
|
|
35
|
+
if (typeof content === 'string')
|
|
36
|
+
return content;
|
|
37
|
+
if (Array.isArray(content)) {
|
|
38
|
+
return content
|
|
39
|
+
.filter((b) => !!b &&
|
|
40
|
+
typeof b === 'object' &&
|
|
41
|
+
b.type === 'text' &&
|
|
42
|
+
typeof b.text === 'string')
|
|
43
|
+
.map((b) => b.text)
|
|
44
|
+
.join('\n');
|
|
45
|
+
}
|
|
46
|
+
return '';
|
|
47
|
+
};
|
|
48
|
+
/** Claude Code's own command bookkeeping turns (slash commands, local-command
|
|
49
|
+
* echoes) aren't analytical questions — they'd only add noise to the ranking. */
|
|
50
|
+
const isCommandNoise = (text) => text.startsWith('<command-name>') ||
|
|
51
|
+
text.startsWith('<command-message>') ||
|
|
52
|
+
text.startsWith('<local-command-');
|
|
53
|
+
/**
|
|
54
|
+
* Extract the live intent from raw transcript JSONL lines (newest-relevant
|
|
55
|
+
* first). Pure + deterministic so it's unit-testable; the I/O wrapper feeds it
|
|
56
|
+
* the tail of the file.
|
|
57
|
+
*/
|
|
58
|
+
export const latestUserIntentFromLines = (lines) => {
|
|
59
|
+
const collected = [];
|
|
60
|
+
let total = 0;
|
|
61
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
62
|
+
const line = lines[i];
|
|
63
|
+
if (!line || !line.trim())
|
|
64
|
+
continue;
|
|
65
|
+
let entry;
|
|
66
|
+
try {
|
|
67
|
+
entry = JSON.parse(line);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
continue; // a partial first line from the tail slice, or non-JSON noise
|
|
71
|
+
}
|
|
72
|
+
if (!entry || entry.type !== 'user' || entry.isMeta || entry.isSidechain) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const text = textOf(entry.message?.content).trim();
|
|
76
|
+
if (!text || isCommandNoise(text))
|
|
77
|
+
continue; // tool_result carriers → ''
|
|
78
|
+
collected.unshift(text);
|
|
79
|
+
total += text.length;
|
|
80
|
+
if (collected.length >= MAX_TURNS || total >= INTENT_MAX_CHARS)
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
return collected.join('\n').slice(0, INTENT_MAX_CHARS);
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Best-effort read of the dev's live question from a Claude Code transcript.
|
|
87
|
+
* Reads only the file's tail (bounded), drops the partial leading line, and
|
|
88
|
+
* never throws — any error/missing file yields '' (the hook then falls back to
|
|
89
|
+
* the tool-input hint, i.e. today's behaviour, so there's no regression).
|
|
90
|
+
*/
|
|
91
|
+
export const readTranscriptIntent = async (transcriptPath) => {
|
|
92
|
+
if (!transcriptPath)
|
|
93
|
+
return '';
|
|
94
|
+
let fh;
|
|
95
|
+
try {
|
|
96
|
+
const { size } = await stat(transcriptPath);
|
|
97
|
+
const start = Math.max(0, size - TAIL_BYTES);
|
|
98
|
+
const length = size - start;
|
|
99
|
+
if (length <= 0)
|
|
100
|
+
return '';
|
|
101
|
+
fh = await open(transcriptPath, 'r');
|
|
102
|
+
const buf = Buffer.alloc(length);
|
|
103
|
+
await fh.read(buf, 0, length, start);
|
|
104
|
+
let text = buf.toString('utf-8');
|
|
105
|
+
// If we started mid-file, the first line is partial — drop it.
|
|
106
|
+
if (start > 0) {
|
|
107
|
+
const nl = text.indexOf('\n');
|
|
108
|
+
text = nl >= 0 ? text.slice(nl + 1) : '';
|
|
109
|
+
}
|
|
110
|
+
return latestUserIntentFromLines(text.split('\n'));
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return '';
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
try {
|
|
117
|
+
await fh?.close();
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
/* best-effort close */
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/util/intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE9C,oFAAoF;AACpF,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,gFAAgF;AAChF,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,uFAAuF;AACvF,MAAM,UAAU,GAAG,OAAO,CAAC;AAE3B;6DAC6D;AAC7D,MAAM,MAAM,GAAG,CAAC,OAAgB,EAAU,EAAE;IAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO;aACX,MAAM,CACL,CAAC,CAAC,EAAuC,EAAE,CACzC,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,QAAQ;YACpB,CAAwB,CAAC,IAAI,KAAK,MAAM;YACzC,OAAQ,CAAwB,CAAC,IAAI,KAAK,QAAQ,CACrD;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF;kFACkF;AAClF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAW,EAAE,CAC/C,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AAErC;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAe,EAAU,EAAE;IACnE,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QACpC,IAAI,KAKH,CAAC;QACF,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,8DAA8D;QAC1E,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACzE,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,4BAA4B;QACzE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxB,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;QACrB,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,IAAI,KAAK,IAAI,gBAAgB;YAAE,MAAM;IACxE,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,cAAsB,EACL,EAAE;IACnB,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,EAAgD,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;QAC5B,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAC3B,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjC,+DAA+D;QAC/D,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
|
package/dist/util/trimOutput.js
CHANGED
|
@@ -21,10 +21,15 @@
|
|
|
21
21
|
*/
|
|
22
22
|
/** ~4 chars per token — the standard rough heuristic; good enough for a metric. */
|
|
23
23
|
const CHARS_PER_TOKEN = 4;
|
|
24
|
+
/** Generous upper bound on one elision marker's length (actual ~86 chars). Used
|
|
25
|
+
* to reserve budget so the trimmed total — kept content PLUS markers — stays
|
|
26
|
+
* under `maxChars`, not just the kept content. */
|
|
27
|
+
const MARKER_MAX_CHARS = 100;
|
|
24
28
|
export const DEFAULT_TRIM = {
|
|
25
29
|
maxChars: 12_000,
|
|
26
30
|
headChars: 6_000,
|
|
27
31
|
tailChars: 4_000,
|
|
32
|
+
middleWindows: 3,
|
|
28
33
|
};
|
|
29
34
|
const passthrough = (text) => ({
|
|
30
35
|
text,
|
|
@@ -33,10 +38,17 @@ const passthrough = (text) => ({
|
|
|
33
38
|
trimmedChars: text.length,
|
|
34
39
|
estTokensSaved: 0,
|
|
35
40
|
});
|
|
41
|
+
/** A content-free elision notice — carries only the gap size, never content. */
|
|
42
|
+
const elisionMarker = (gapChars) => `\n\n…[anyray-hook trimmed ${gapChars} chars ` +
|
|
43
|
+
`(~${Math.round(gapChars / CHARS_PER_TOKEN)} tokens) — elided locally, cache-safe]…\n\n`;
|
|
36
44
|
/**
|
|
37
|
-
* Trim a single string
|
|
38
|
-
*
|
|
39
|
-
*
|
|
45
|
+
* Trim a single string when it exceeds `maxChars`; otherwise return it
|
|
46
|
+
* untouched. Keeps the head (orientation), the tail (the result/conclusion), AND
|
|
47
|
+
* `middleWindows` evenly-spaced, line-snapped windows from the middle — so a
|
|
48
|
+
* signal that lives in the body (e.g. an error burst partway through a log)
|
|
49
|
+
* survives, which pure head+tail trimming would drop entirely. Each elided gap
|
|
50
|
+
* is replaced by a content-free marker. Always shrinks (degenerate budgets fall
|
|
51
|
+
* back to passthrough), and never emits content inside a marker.
|
|
40
52
|
*/
|
|
41
53
|
export const trimText = (input, opts = {}) => {
|
|
42
54
|
if (typeof input !== 'string')
|
|
@@ -44,30 +56,80 @@ export const trimText = (input, opts = {}) => {
|
|
|
44
56
|
const maxChars = Math.max(1, opts.maxChars ?? DEFAULT_TRIM.maxChars);
|
|
45
57
|
if (input.length <= maxChars)
|
|
46
58
|
return passthrough(input);
|
|
59
|
+
const len = input.length;
|
|
47
60
|
let headChars = Math.max(0, opts.headChars ?? DEFAULT_TRIM.headChars);
|
|
48
61
|
let tailChars = Math.max(0, opts.tailChars ?? DEFAULT_TRIM.tailChars);
|
|
49
|
-
|
|
50
|
-
//
|
|
51
|
-
|
|
62
|
+
const windowCount = Math.max(0, opts.middleWindows ?? DEFAULT_TRIM.middleWindows);
|
|
63
|
+
// Reserve room for the elision markers so the FINAL output (kept content +
|
|
64
|
+
// markers) lands under maxChars, not just the kept content. Each kept range is
|
|
65
|
+
// followed/preceded by at most one marker; head+windows+tail yields at most
|
|
66
|
+
// windowCount+2 gaps. Budget the rest for kept content, shaving head first.
|
|
67
|
+
const markerReserve = MARKER_MAX_CHARS * (windowCount + 2);
|
|
68
|
+
const keepBudget = Math.max(1, maxChars - 1 - markerReserve);
|
|
52
69
|
if (headChars + tailChars > keepBudget) {
|
|
53
70
|
tailChars = Math.min(tailChars, keepBudget);
|
|
54
71
|
headChars = Math.max(0, keepBudget - tailChars);
|
|
55
72
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
73
|
+
// Kept ranges: head, evenly-spaced middle windows, tail. Windows are funded by
|
|
74
|
+
// whatever budget remains after head+tail and snapped to line boundaries.
|
|
75
|
+
const midStart = headChars;
|
|
76
|
+
const midEnd = len - tailChars;
|
|
77
|
+
const ranges = [];
|
|
78
|
+
if (headChars > 0)
|
|
79
|
+
ranges.push([0, headChars]);
|
|
80
|
+
const middleBudget = keepBudget - headChars - tailChars;
|
|
81
|
+
if (windowCount > 0 && middleBudget > 0 && midEnd > midStart) {
|
|
82
|
+
const region = midEnd - midStart;
|
|
83
|
+
const winSize = Math.max(1, Math.floor(middleBudget / windowCount));
|
|
84
|
+
for (let i = 0; i < windowCount; i++) {
|
|
85
|
+
const center = midStart + Math.round(((i + 0.5) / windowCount) * region);
|
|
86
|
+
let e = Math.min(midEnd, Math.max(midStart, center) + Math.ceil(winSize / 2));
|
|
87
|
+
let s = Math.max(midStart, e - winSize);
|
|
88
|
+
// Snap to whole lines for readability (logs are line-oriented).
|
|
89
|
+
const nl = input.lastIndexOf('\n', s);
|
|
90
|
+
if (nl >= midStart)
|
|
91
|
+
s = nl + 1;
|
|
92
|
+
const nr = input.indexOf('\n', e);
|
|
93
|
+
if (nr !== -1 && nr < midEnd)
|
|
94
|
+
e = nr;
|
|
95
|
+
if (e > s)
|
|
96
|
+
ranges.push([s, e]);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (tailChars > 0)
|
|
100
|
+
ranges.push([midEnd, len]);
|
|
101
|
+
// Merge overlapping/adjacent ranges (windows can collide on a tight budget).
|
|
102
|
+
ranges.sort((a, b) => a[0] - b[0]);
|
|
103
|
+
const merged = [];
|
|
104
|
+
for (const [s, e] of ranges) {
|
|
105
|
+
const last = merged[merged.length - 1];
|
|
106
|
+
if (last && s <= last[1])
|
|
107
|
+
last[1] = Math.max(last[1], e);
|
|
108
|
+
else
|
|
109
|
+
merged.push([s, e]);
|
|
110
|
+
}
|
|
111
|
+
// Stitch kept ranges together, inserting a content-free marker per elided gap.
|
|
112
|
+
let text = '';
|
|
113
|
+
let prevEnd = 0;
|
|
114
|
+
let kept = 0;
|
|
115
|
+
for (const [s, e] of merged) {
|
|
116
|
+
if (s > prevEnd)
|
|
117
|
+
text += elisionMarker(s - prevEnd);
|
|
118
|
+
text += input.slice(s, e);
|
|
119
|
+
kept += e - s;
|
|
120
|
+
prevEnd = e;
|
|
121
|
+
}
|
|
122
|
+
if (len > prevEnd)
|
|
123
|
+
text += elisionMarker(len - prevEnd);
|
|
124
|
+
// Degenerate guard: if markers made it no shorter (tiny budget), don't trim.
|
|
125
|
+
if (text.length >= len)
|
|
64
126
|
return passthrough(input);
|
|
65
127
|
return {
|
|
66
128
|
text,
|
|
67
129
|
trimmed: true,
|
|
68
|
-
originalChars:
|
|
130
|
+
originalChars: len,
|
|
69
131
|
trimmedChars: text.length,
|
|
70
|
-
estTokensSaved,
|
|
132
|
+
estTokensSaved: Math.round((len - kept) / CHARS_PER_TOKEN),
|
|
71
133
|
};
|
|
72
134
|
};
|
|
73
135
|
/** Keys whose string value is treated as the trimmable body of a tool output. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trimOutput.js","sourceRoot":"","sources":["../../src/util/trimOutput.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"trimOutput.js","sourceRoot":"","sources":["../../src/util/trimOutput.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "anyray-connect",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.8",
|
|
4
4
|
"description": "Anyray connect — points local coding tools (Claude Code, Cursor, Windsurf, SDKs) at the Anyray gateway by writing their base URL + a placeholder key. The gateway stays the brain; this is just the on-ramp.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|