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.
@@ -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
- const OPTIMIZE_TIMEOUT_MS = 1200;
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 input hint (relevance_filter ranks against it), and the body.
87
- const key = hookCacheKey(tool, hintOf(payload.tool_input), found.body);
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(), OPTIMIZE_TIMEOUT_MS);
308
+ const timer = setTimeout(() => controller.abort(), optimizeTimeoutMs());
269
309
  try {
270
- const encoded = await encodeOptimizeBody(JSON.stringify({ tool, toolInput, output: body }));
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":"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"}
@@ -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. Keeps `headChars` + a content-free marker + `tailChars`
38
- * when the input exceeds `maxChars`; otherwise returns it untouched. Clamps the
39
- * head/tail budget so the result is always strictly shorter than the original.
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
- // Never keep so much that we fail to shrink: cap the kept budget under maxChars
50
- // (leave room for the marker), preferring to shave the head first.
51
- const keepBudget = maxChars - 1;
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
- const head = input.slice(0, headChars);
57
- const tail = tailChars > 0 ? input.slice(input.length - tailChars) : '';
58
- const elided = input.length - head.length - tail.length;
59
- const estTokensSaved = Math.round(elided / CHARS_PER_TOKEN);
60
- const marker = `\n\n…[anyray-hook trimmed ${elided} chars (~${estTokensSaved} tokens) — full output elided locally, cache-safe]…\n\n`;
61
- const text = head + marker + tail;
62
- // Degenerate guard: if the marker made it longer (tiny maxChars), don't trim.
63
- if (text.length >= input.length)
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: input.length,
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":"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"}
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.6",
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": {