anyray-connect 0.5.1 → 0.8.1
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/cli.js +7 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/hook.js +109 -4
- package/dist/commands/hook.js.map +1 -1
- package/dist/tools/copilotChat.js +120 -0
- package/dist/tools/copilotChat.js.map +1 -0
- package/dist/tools/cursor.js +273 -0
- package/dist/tools/cursor.js.map +1 -0
- package/dist/tools/index.js +4 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/manual.js +4 -19
- package/dist/tools/manual.js.map +1 -1
- package/dist/util/appSupport.js +24 -0
- package/dist/util/appSupport.js.map +1 -0
- package/dist/util/hookCache.js +176 -0
- package/dist/util/hookCache.js.map +1 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -408,6 +408,7 @@ const runApplyCommand = async (argv, forceWizard) => {
|
|
|
408
408
|
// Must happen before resolveOrigin: the link itself is a valid https URL
|
|
409
409
|
// and would otherwise be mistaken for the gateway origin.
|
|
410
410
|
const setupLink = args.gateway ? parseSetupLink(args.gateway) : undefined;
|
|
411
|
+
const identityFromSetupLink = Boolean(setupLink);
|
|
411
412
|
if (setupLink) {
|
|
412
413
|
try {
|
|
413
414
|
const resolved = await resolveSetupLink(setupLink);
|
|
@@ -470,8 +471,12 @@ const runApplyCommand = async (argv, forceWizard) => {
|
|
|
470
471
|
}
|
|
471
472
|
// Skipped on revert — no attribution needed there.
|
|
472
473
|
if (!args.revert) {
|
|
473
|
-
|
|
474
|
-
|
|
474
|
+
// Setup-link runs are usually launched through `curl | sh`, where TTY
|
|
475
|
+
// forwarding can be fragile. Identity is non-secret metadata, so avoid
|
|
476
|
+
// asking extra questions there; an explicit --user/--team still wins.
|
|
477
|
+
const skipIdentityPrompts = args.yes || identityFromSetupLink;
|
|
478
|
+
resolvedUser = await resolveDisplayName(args.user, profile.name, skipIdentityPrompts);
|
|
479
|
+
resolvedTeam = await resolveTeam(args.team, profile.team, skipIdentityPrompts);
|
|
475
480
|
}
|
|
476
481
|
// Auth mode. Forced flags win; otherwise AUTO — detect which subscription
|
|
477
482
|
// seats this machine is signed into so each tool rides the dev's own seat when
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/hook.js
CHANGED
|
@@ -9,6 +9,12 @@
|
|
|
9
9
|
* back to a local trim (cache-safe head/tail) + a content-free beacon, so the
|
|
10
10
|
* dev still benefits when offline. Then it prints the replacement output.
|
|
11
11
|
*
|
|
12
|
+
* REPEATS ARE LOCAL: the gateway's verdict is cached on disk by a content hash
|
|
13
|
+
* (util/hookCache.ts), so an identical oversized output seen again replays the
|
|
14
|
+
* cached verdict instantly — no server round-trip, no LLM compute on the hot
|
|
15
|
+
* path — and only a content-free savings beacon goes out. This is the "never
|
|
16
|
+
* block on a repeat" fast path.
|
|
17
|
+
*
|
|
12
18
|
* Hard rule: this runs on Claude Code's hot path, so it MUST NOT throw and MUST
|
|
13
19
|
* NOT block for long. Any error/malformed payload/timeout degrades to a smaller
|
|
14
20
|
* action (local trim) or passthrough (empty stdout + exit 0 = use the original).
|
|
@@ -21,7 +27,10 @@
|
|
|
21
27
|
import { homedir } from 'node:os';
|
|
22
28
|
import { join } from 'node:path';
|
|
23
29
|
import { readFile } from 'node:fs/promises';
|
|
30
|
+
import { gzip } from 'node:zlib';
|
|
31
|
+
import { promisify } from 'node:util';
|
|
24
32
|
import { extractToolOutputBody, trimText, DEFAULT_TRIM, } from '../util/trimOutput.js';
|
|
33
|
+
import { hookCacheKey, readCache, writeCache, } from '../util/hookCache.js';
|
|
25
34
|
const OPTIMIZE_TIMEOUT_MS = 1200;
|
|
26
35
|
const BEACON_TIMEOUT_MS = 400;
|
|
27
36
|
const emit = (value) => JSON.stringify({
|
|
@@ -30,6 +39,17 @@ const emit = (value) => JSON.stringify({
|
|
|
30
39
|
updatedToolOutput: value,
|
|
31
40
|
},
|
|
32
41
|
});
|
|
42
|
+
/** ~4 chars/token (matches util/trimOutput) — content-free saving estimate. */
|
|
43
|
+
const estTokens = (chars) => Math.round(Math.max(0, chars) / 4);
|
|
44
|
+
/**
|
|
45
|
+
* The query hint that produced an output, stringified the same way the gateway
|
|
46
|
+
* does (so the cache key matches the inputs the server optimizes against).
|
|
47
|
+
*/
|
|
48
|
+
const hintOf = (toolInput) => typeof toolInput === 'string'
|
|
49
|
+
? toolInput
|
|
50
|
+
: toolInput != null
|
|
51
|
+
? JSON.stringify(toolInput)
|
|
52
|
+
: '';
|
|
33
53
|
/** Defensive: tool result may live under any of these keys across versions. */
|
|
34
54
|
const OUTPUT_KEYS = ['tool_output', 'tool_response', 'tool_result'];
|
|
35
55
|
const pickOutput = (payload) => {
|
|
@@ -61,8 +81,52 @@ export const runHook = async (raw, deps) => {
|
|
|
61
81
|
if (!found || found.body.length <= deps.sizeGate)
|
|
62
82
|
return passthrough;
|
|
63
83
|
const tool = typeof payload.tool_name === 'string' ? payload.tool_name : 'unknown';
|
|
84
|
+
// Key the cache on the same inputs that drive the gateway's verdict: the tool,
|
|
85
|
+
// the input hint (relevance_filter ranks against it), and the body.
|
|
86
|
+
const key = hookCacheKey(tool, hintOf(payload.tool_input), found.body);
|
|
87
|
+
// Both are best-effort — the cache is an optimization, never a correctness
|
|
88
|
+
// dependency, so a throwing impl must not break the hook.
|
|
89
|
+
const remember = async (verdict) => {
|
|
90
|
+
try {
|
|
91
|
+
await deps.cachePut(key, verdict);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
/* cache write is best-effort */
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const beaconSafe = async (metrics) => {
|
|
98
|
+
try {
|
|
99
|
+
await deps.beacon(tool, metrics);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
/* telemetry is best-effort */
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
// FAST PATH: a verdict for this exact output is already cached → replay it
|
|
106
|
+
// locally. No server round-trip, no LLM compute. A real reduction still
|
|
107
|
+
// happens this turn, so beacon the (content-free) saving to keep accounting
|
|
108
|
+
// honest; the heavy optimize call is what we skip.
|
|
109
|
+
let cached = null;
|
|
110
|
+
try {
|
|
111
|
+
cached = await deps.cacheGet(key);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
cached = null; // cache is best-effort → fall through to the service
|
|
115
|
+
}
|
|
116
|
+
if (cached) {
|
|
117
|
+
if (cached.optimized && cached.output.length < found.body.length) {
|
|
118
|
+
await beaconSafe({
|
|
119
|
+
originalChars: found.body.length,
|
|
120
|
+
trimmedChars: cached.output.length,
|
|
121
|
+
estTokensSaved: cached.tokensSaved,
|
|
122
|
+
});
|
|
123
|
+
return { stdout: emit(found.rebuild(cached.output)) };
|
|
124
|
+
}
|
|
125
|
+
return passthrough; // cached no-op → don't re-ask the service
|
|
126
|
+
}
|
|
64
127
|
// PRIMARY: the service optimizes (and records the saving). If it responds, it
|
|
65
|
-
// decides — no local trim, no beacon.
|
|
128
|
+
// decides — no local trim, no beacon. Cache its verdict so the next identical
|
|
129
|
+
// output takes the fast path above.
|
|
66
130
|
let verdict = null;
|
|
67
131
|
try {
|
|
68
132
|
verdict = await deps.optimize(tool, payload.tool_input, found.body);
|
|
@@ -70,10 +134,22 @@ export const runHook = async (raw, deps) => {
|
|
|
70
134
|
catch {
|
|
71
135
|
verdict = null; // treat any failure as unreachable → fall back
|
|
72
136
|
}
|
|
137
|
+
// A verdict the gateway didn't confirm handling (no `handled`) is a version-
|
|
138
|
+
// mismatched gateway that couldn't read our gzipped body and returned a
|
|
139
|
+
// default no-op. Treat it as unreachable: locally trim AND skip the cache, so
|
|
140
|
+
// we self-correct (no poisoned no-op) the moment the gateway is upgraded.
|
|
141
|
+
if (verdict && !verdict.handled)
|
|
142
|
+
verdict = null;
|
|
73
143
|
if (verdict) {
|
|
74
144
|
if (verdict.optimized && verdict.output.length < found.body.length) {
|
|
145
|
+
await remember({
|
|
146
|
+
optimized: true,
|
|
147
|
+
output: verdict.output,
|
|
148
|
+
tokensSaved: estTokens(found.body.length - verdict.output.length),
|
|
149
|
+
});
|
|
75
150
|
return { stdout: emit(found.rebuild(verdict.output)) };
|
|
76
151
|
}
|
|
152
|
+
await remember({ optimized: false }); // remember the no-op
|
|
77
153
|
return passthrough; // service ran and declined
|
|
78
154
|
}
|
|
79
155
|
// FALLBACK: service unreachable → local cache-safe trim + content-free beacon.
|
|
@@ -86,7 +162,10 @@ export const runHook = async (raw, deps) => {
|
|
|
86
162
|
}
|
|
87
163
|
if (!local.trimmed)
|
|
88
164
|
return passthrough;
|
|
89
|
-
|
|
165
|
+
// beaconSafe (not deps.beacon directly): this runs on Claude Code's hot path,
|
|
166
|
+
// so a throwing beacon impl must not escape runHook — same guard the cache-hit
|
|
167
|
+
// path uses.
|
|
168
|
+
await beaconSafe({
|
|
90
169
|
originalChars: local.originalChars,
|
|
91
170
|
trimmedChars: local.trimmedChars,
|
|
92
171
|
estTokensSaved: local.estTokensSaved,
|
|
@@ -163,6 +242,23 @@ const authHeaders = (target) => {
|
|
|
163
242
|
headers['x-anyray-api-key'] = target.apiKey;
|
|
164
243
|
return headers;
|
|
165
244
|
};
|
|
245
|
+
const gzipAsync = promisify(gzip);
|
|
246
|
+
/**
|
|
247
|
+
* Encode the optimize-output request body. The payload carries a whole
|
|
248
|
+
* oversized tool output, so it gzips well (logs/code compress ~5-10x); we send
|
|
249
|
+
* `content-encoding: gzip` to cut bytes on the wire LOSSLESSLY — the gateway
|
|
250
|
+
* inflates it back byte-for-byte. Async gzip keeps the work off the event loop
|
|
251
|
+
* (this runs on Claude Code's hot path). Fail-safe: if gzip throws we send the
|
|
252
|
+
* plain JSON, which the gateway accepts just the same.
|
|
253
|
+
*/
|
|
254
|
+
export const encodeOptimizeBody = async (payload) => {
|
|
255
|
+
try {
|
|
256
|
+
return { body: await gzipAsync(payload), encoding: 'gzip' };
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
return { body: payload };
|
|
260
|
+
}
|
|
261
|
+
};
|
|
166
262
|
/** POST one tool output to the gateway for server-side optimization. */
|
|
167
263
|
const optimizeViaGateway = async (target, tool, toolInput, body) => {
|
|
168
264
|
if (!target)
|
|
@@ -170,10 +266,14 @@ const optimizeViaGateway = async (target, tool, toolInput, body) => {
|
|
|
170
266
|
const controller = new AbortController();
|
|
171
267
|
const timer = setTimeout(() => controller.abort(), OPTIMIZE_TIMEOUT_MS);
|
|
172
268
|
try {
|
|
269
|
+
const encoded = await encodeOptimizeBody(JSON.stringify({ tool, toolInput, output: body }));
|
|
270
|
+
const headers = authHeaders(target);
|
|
271
|
+
if (encoded.encoding)
|
|
272
|
+
headers['content-encoding'] = encoded.encoding;
|
|
173
273
|
const res = await fetch(`${target.origin}/connect/optimize-output`, {
|
|
174
274
|
method: 'POST',
|
|
175
|
-
headers
|
|
176
|
-
body:
|
|
275
|
+
headers,
|
|
276
|
+
body: encoded.body,
|
|
177
277
|
signal: controller.signal,
|
|
178
278
|
});
|
|
179
279
|
if (!res.ok)
|
|
@@ -182,6 +282,9 @@ const optimizeViaGateway = async (target, tool, toolInput, body) => {
|
|
|
182
282
|
return {
|
|
183
283
|
optimized: data?.optimized === true && typeof data?.output === 'string',
|
|
184
284
|
output: typeof data?.output === 'string' ? data.output : body,
|
|
285
|
+
// Only a gzip-aware gateway echoes `handled` — its absence means the
|
|
286
|
+
// gateway couldn't read our (gzipped) body and returned a default no-op.
|
|
287
|
+
handled: data?.handled === true,
|
|
185
288
|
};
|
|
186
289
|
}
|
|
187
290
|
catch {
|
|
@@ -224,6 +327,8 @@ export const runPostToolUseHook = async () => {
|
|
|
224
327
|
optimize: (tool, toolInput, body) => optimizeViaGateway(target, tool, toolInput, body),
|
|
225
328
|
localTrim: (body) => trimText(body, opts),
|
|
226
329
|
beacon: (tool, metrics) => sendBeacon(target, tool, metrics),
|
|
330
|
+
cacheGet: (key) => readCache(key),
|
|
331
|
+
cachePut: (key, verdict) => writeCache(key, verdict),
|
|
227
332
|
sizeGate: opts.maxChars ?? DEFAULT_TRIM.maxChars,
|
|
228
333
|
});
|
|
229
334
|
if (stdout)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Copilot Chat adapter — manual, by design.
|
|
3
|
+
*
|
|
4
|
+
* Copilot is two products with very different reach:
|
|
5
|
+
* - Inline completions (the ghost-text suggestions) go to GitHub's own backend
|
|
6
|
+
* and CANNOT be redirected — there is no BYOK seam for them.
|
|
7
|
+
* - Copilot CHAT supports "bring your own key" (BYOK): an OpenAI-compatible
|
|
8
|
+
* custom endpoint you point at any base URL. That part we can route through
|
|
9
|
+
* the gateway. It needs Copilot Business/Enterprise (or VS Code 1.122+, which
|
|
10
|
+
* dropped the GitHub-sign-in requirement for BYOK).
|
|
11
|
+
*
|
|
12
|
+
* Why manual (not an automatic writer like claudeCode/cursor):
|
|
13
|
+
* 1. The config is UI-driven. The custom endpoint is added through the model
|
|
14
|
+
* picker → "Manage Language Models" wizard, which prompts for the URL/key
|
|
15
|
+
* and (when offered) stashes the API key in the OS credential store — not in
|
|
16
|
+
* a file we can script.
|
|
17
|
+
* 2. The on-disk shape (`chatLanguageModels.json`, replacing the now-deprecated
|
|
18
|
+
* `github.copilot.chat.customOAIModels` setting) is still evolving and isn't
|
|
19
|
+
* a documented contract. Blind-writing an app's own state is exactly the
|
|
20
|
+
* corruption risk cursor.ts is paranoid about — so we print precise steps
|
|
21
|
+
* plus a paste-able snippet instead of guessing the file.
|
|
22
|
+
*
|
|
23
|
+
* Attribution: unlike Cursor (no header field), Copilot Chat's custom-endpoint
|
|
24
|
+
* config supports a per-model `requestHeaders` object, so content-free spend
|
|
25
|
+
* attribution rides `x-anyray-metadata` there — same contract as every other
|
|
26
|
+
* adapter.
|
|
27
|
+
*
|
|
28
|
+
* PRIVACY: the snippet/steps carry only the gateway base URL, a
|
|
29
|
+
* placeholder/personal key, and the identity-only `x-anyray-metadata` value.
|
|
30
|
+
* Never prompt/response content.
|
|
31
|
+
*/
|
|
32
|
+
import { fileExists } from '../util/jsonFile.js';
|
|
33
|
+
import { appSupportDir } from '../util/appSupport.js';
|
|
34
|
+
import { metadataHeaderValue } from '../types.js';
|
|
35
|
+
/** VS Code distributions that ship the Copilot Chat extension. */
|
|
36
|
+
const VSCODE_VARIANTS = ['Code', 'Code - Insiders', 'VSCodium'];
|
|
37
|
+
/** The custom-endpoint URL Copilot Chat posts to (OpenAI chat-completions). */
|
|
38
|
+
const chatCompletionsUrl = (target) => `${target.openaiBaseUrl.replace(/\/+$/, '')}/chat/completions`;
|
|
39
|
+
/**
|
|
40
|
+
* The `chatLanguageModels.json` provider object that points Copilot Chat at the
|
|
41
|
+
* gateway. Pure and unit-tested — the snippet we print is exactly this, so the
|
|
42
|
+
* test pins the field shape (vendor/apiType/url/requestHeaders) we tell users to
|
|
43
|
+
* paste. The model `id` is an example the user retargets to a model their
|
|
44
|
+
* gateway actually serves.
|
|
45
|
+
*/
|
|
46
|
+
export const byokModelConfig = (target) => {
|
|
47
|
+
const meta = metadataHeaderValue(target.metadata);
|
|
48
|
+
return {
|
|
49
|
+
name: 'Anyray',
|
|
50
|
+
vendor: 'customendpoint',
|
|
51
|
+
apiType: 'chat-completions',
|
|
52
|
+
apiKey: target.clientKey ?? target.placeholderKey,
|
|
53
|
+
models: [
|
|
54
|
+
{
|
|
55
|
+
id: 'gpt-4.1',
|
|
56
|
+
name: 'Anyray Gateway',
|
|
57
|
+
url: chatCompletionsUrl(target),
|
|
58
|
+
toolCalling: true,
|
|
59
|
+
vision: true,
|
|
60
|
+
maxInputTokens: 128000,
|
|
61
|
+
maxOutputTokens: 16000,
|
|
62
|
+
// Copilot Chat forwards these per-request — the only place attribution
|
|
63
|
+
// can ride, since the wizard has no header field. Omitted when no
|
|
64
|
+
// metadata resolved (a bare header would attribute spend to nobody).
|
|
65
|
+
...(meta ? { requestHeaders: { 'x-anyray-metadata': meta } } : {}),
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
/** The full paste-able `chatLanguageModels.json` array (one provider). */
|
|
71
|
+
export const byokSnippet = (target) => JSON.stringify([byokModelConfig(target)], null, 2);
|
|
72
|
+
/** The manual setup steps shown to the user. */
|
|
73
|
+
const copilotSteps = (target, reason) => {
|
|
74
|
+
const meta = metadataHeaderValue(target.metadata);
|
|
75
|
+
const key = target.clientKey ?? target.placeholderKey;
|
|
76
|
+
return [
|
|
77
|
+
...(reason ? [reason] : []),
|
|
78
|
+
'GitHub Copilot Chat — Bring Your Own Key (chat only; inline completions still go to GitHub and cannot be routed). Needs Copilot Business/Enterprise or VS Code 1.122+.',
|
|
79
|
+
'In VS Code: open the Chat view → the model picker → "Manage Language Models…" → "Add Model" → "OpenAI Compatible / Custom Endpoint", then enter:',
|
|
80
|
+
'(No "Custom Endpoint" option? Update VS Code — the BYOK custom-endpoint flow is recent; Insiders gets it first.)',
|
|
81
|
+
` • Endpoint URL: ${chatCompletionsUrl(target)}`,
|
|
82
|
+
' • API type: chat-completions',
|
|
83
|
+
target.clientKey
|
|
84
|
+
? ` • API key: ${key} (your personal gateway key — keep it private; store it in the OS credential store when VS Code offers)`
|
|
85
|
+
: ` • API key: ${key} (placeholder — the gateway holds the real key)`,
|
|
86
|
+
' • Model id: a model your Anyray gateway serves (ask your admin, e.g. gpt-4.1).',
|
|
87
|
+
meta
|
|
88
|
+
? `VS Code opens chatLanguageModels.json — add a requestHeaders entry to the model so spend is attributed:\n "requestHeaders": { "x-anyray-metadata": ${JSON.stringify(meta)} }`
|
|
89
|
+
: '(No attribution metadata resolved; set --user, or use --invite for a per-user key — it rides an x-anyray-metadata requestHeader.)',
|
|
90
|
+
'Or paste this whole provider object into chatLanguageModels.json (set the key via the credential store if you prefer):',
|
|
91
|
+
byokSnippet(target),
|
|
92
|
+
'Reload VS Code, then pick the Anyray model in the Chat model picker.',
|
|
93
|
+
];
|
|
94
|
+
};
|
|
95
|
+
export const copilotChat = {
|
|
96
|
+
id: 'copilot',
|
|
97
|
+
title: 'GitHub Copilot Chat',
|
|
98
|
+
automatic: false,
|
|
99
|
+
async detect() {
|
|
100
|
+
for (const variant of VSCODE_VARIANTS) {
|
|
101
|
+
const dir = appSupportDir(variant);
|
|
102
|
+
if (await fileExists(dir))
|
|
103
|
+
return { installed: true, detail: dir };
|
|
104
|
+
}
|
|
105
|
+
return { installed: false, detail: 'no VS Code install found' };
|
|
106
|
+
},
|
|
107
|
+
async apply(target, _opts) {
|
|
108
|
+
// Always manual — nothing is written, so dry-run and apply are identical.
|
|
109
|
+
return { status: 'manual', messages: copilotSteps(target) };
|
|
110
|
+
},
|
|
111
|
+
async revert(_opts) {
|
|
112
|
+
return {
|
|
113
|
+
status: 'manual',
|
|
114
|
+
messages: [
|
|
115
|
+
'GitHub Copilot Chat: open the Chat model picker → "Manage Language Models…", remove the "Anyray" custom endpoint, and clear its API key from the OS credential store.',
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=copilotChat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilotChat.js","sourceRoot":"","sources":["../../src/tools/copilotChat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cursor adapter — automatic where it can be, manual where it can't.
|
|
3
|
+
*
|
|
4
|
+
* Unlike Claude Code (a plain `settings.json`), Cursor keeps its OpenAI
|
|
5
|
+
* override in `state.vscdb` — an undocumented SQLite app-state DB (the VS Code
|
|
6
|
+
* `ItemTable`: key → JSON blob). We drive it through the system `sqlite3` CLI
|
|
7
|
+
* (no native module, works under both Node and the Bun binary), with hard
|
|
8
|
+
* safety rails because it's an app-owned store:
|
|
9
|
+
*
|
|
10
|
+
* 1. Cursor must be CLOSED — it caches state in memory and would clobber our
|
|
11
|
+
* write on exit. If it's running we refuse and print the manual steps.
|
|
12
|
+
* 2. We BACK UP `state.vscdb` before touching it (`.anyray-bak`), so `revert`
|
|
13
|
+
* is a restore and a botched write is recoverable.
|
|
14
|
+
* 3. We only write when we RECOGNIZE Cursor's settings shape. If we can't find
|
|
15
|
+
* it (different Cursor version, or the key is keychain-encrypted and not in
|
|
16
|
+
* the DB at all), we fall back to the manual steps rather than guess — a
|
|
17
|
+
* blind write into an app's own DB is how you corrupt it.
|
|
18
|
+
*
|
|
19
|
+
* The recognized shape is marked ASSUMED below: it must be confirmed against a
|
|
20
|
+
* real Cursor (Settings → Models → set a sentinel base URL/key, quit Cursor,
|
|
21
|
+
* grep state.vscdb) before the automatic path can be trusted. Until then this
|
|
22
|
+
* adapter degrades to exactly the previous manual behavior — safely.
|
|
23
|
+
*
|
|
24
|
+
* PRIVACY: writes only Anyray's base URL + (placeholder/personal) key into
|
|
25
|
+
* Cursor's own config. Never logs the user's existing secrets or prompt content.
|
|
26
|
+
*/
|
|
27
|
+
import { execFileSync } from 'node:child_process';
|
|
28
|
+
import { copyFileSync, existsSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
29
|
+
import { platform, tmpdir } from 'node:os';
|
|
30
|
+
import { join } from 'node:path';
|
|
31
|
+
import { appSupportDir } from '../util/appSupport.js';
|
|
32
|
+
import { metadataHeaderValue } from '../types.js';
|
|
33
|
+
/** Per-OS Cursor user-data dir (the app-support root that holds globalStorage). */
|
|
34
|
+
const cursorUserDir = () => appSupportDir('Cursor');
|
|
35
|
+
export const stateDbPath = () => join(cursorUserDir(), 'User', 'globalStorage', 'state.vscdb');
|
|
36
|
+
export const backupPath = () => `${stateDbPath()}.anyray-bak`;
|
|
37
|
+
/** True if the `sqlite3` CLI is on PATH (the only external dependency). */
|
|
38
|
+
export const sqliteAvailable = () => {
|
|
39
|
+
try {
|
|
40
|
+
execFileSync('sqlite3', ['--version'], { stdio: 'ignore' });
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
/** Best-effort: is Cursor running? A write while it's open would be clobbered. */
|
|
48
|
+
const cursorRunning = () => {
|
|
49
|
+
try {
|
|
50
|
+
if (platform() === 'win32') {
|
|
51
|
+
const out = execFileSync('tasklist', ['/FI', 'IMAGENAME eq Cursor.exe'], {
|
|
52
|
+
encoding: 'utf-8',
|
|
53
|
+
});
|
|
54
|
+
return /Cursor\.exe/i.test(out);
|
|
55
|
+
}
|
|
56
|
+
// `pgrep -x` matches the exact process name; exit 0 ⇒ at least one match.
|
|
57
|
+
execFileSync('pgrep', ['-x', 'Cursor'], { stdio: 'ignore' });
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Non-zero exit (no match) or pgrep/tasklist missing → treat as not running.
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
/** Read one ItemTable value (the raw JSON text), or undefined if absent. */
|
|
66
|
+
const readItem = (db, key) => {
|
|
67
|
+
const sql = `SELECT value FROM ItemTable WHERE key=${sqlQuote(key)};`;
|
|
68
|
+
const out = execFileSync('sqlite3', [db, sql], { encoding: 'utf-8' });
|
|
69
|
+
const trimmed = out.replace(/\n$/, '');
|
|
70
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
71
|
+
};
|
|
72
|
+
/** All ItemTable keys (so we can scan for the settings row across versions). */
|
|
73
|
+
const listKeys = (db) => {
|
|
74
|
+
const out = execFileSync('sqlite3', [db, 'SELECT key FROM ItemTable;'], {
|
|
75
|
+
encoding: 'utf-8',
|
|
76
|
+
});
|
|
77
|
+
return out.split('\n').filter((k) => k.length > 0);
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Write a value into an ItemTable row via `readfile()`, so a JSON blob full of
|
|
81
|
+
* quotes never has to be SQL-escaped. The row must already exist (we only
|
|
82
|
+
* UPDATE rows we discovered).
|
|
83
|
+
*/
|
|
84
|
+
const writeItem = (db, key, value) => {
|
|
85
|
+
const dir = mkdtempSync(join(tmpdir(), 'anyray-cursor-'));
|
|
86
|
+
const tmp = join(dir, 'value.json');
|
|
87
|
+
try {
|
|
88
|
+
writeFileSync(tmp, value);
|
|
89
|
+
const sql = `UPDATE ItemTable SET value=readfile(${sqlQuote(tmp)}) WHERE key=${sqlQuote(key)};`;
|
|
90
|
+
execFileSync('sqlite3', [db, sql], { stdio: 'ignore' });
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
rmSync(dir, { recursive: true, force: true });
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
/** Single-quote-escape a string for an inline SQL literal. */
|
|
97
|
+
const sqlQuote = (s) => `'${s.replace(/'/g, "''")}'`;
|
|
98
|
+
/**
|
|
99
|
+
* Recognize Cursor's OpenAI-override settings object by FIELD SHAPE rather than
|
|
100
|
+
* a hardcoded field name, since the exact spelling differs across Cursor
|
|
101
|
+
* versions (and isn't a documented contract). The anchor is a field whose name
|
|
102
|
+
* contains both "openai" and "base"+"url" — strong enough that an unrelated row
|
|
103
|
+
* won't match. When found we patch that field plus, if present, the matching
|
|
104
|
+
* enable flag and api-key field (the key may instead live in the OS keychain,
|
|
105
|
+
* in which case there's nothing to write here and the caller tells the user to
|
|
106
|
+
* paste it once). Returns null when the value isn't the settings object — the
|
|
107
|
+
* caller then falls back to the manual steps rather than write blind.
|
|
108
|
+
*
|
|
109
|
+
* NOTE: still ASSUMED — the patterns are modeled on the expected layout and
|
|
110
|
+
* want one confirmation against a real Cursor (see the module header). The
|
|
111
|
+
* matching LOGIC is unit-tested; only the real field spelling is unverified.
|
|
112
|
+
*/
|
|
113
|
+
const matchKey = (obj, test) => Object.keys(obj).find(test);
|
|
114
|
+
const isBaseUrlField = (k) => /openai/i.test(k) && /base.?url/i.test(k);
|
|
115
|
+
const isApiKeyField = (k) => /openai/i.test(k) && /(api.?)?key/i.test(k) && !/base/i.test(k);
|
|
116
|
+
const isEnabledField = (k) => /openai/i.test(k) && /enabled?$/i.test(k);
|
|
117
|
+
export const patchCursorSettings = (rawValue, target) => {
|
|
118
|
+
let obj;
|
|
119
|
+
try {
|
|
120
|
+
const parsed = JSON.parse(rawValue);
|
|
121
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
obj = parsed;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
const baseUrlKey = matchKey(obj, isBaseUrlField);
|
|
130
|
+
if (!baseUrlKey)
|
|
131
|
+
return null; // not the settings row → caller falls back
|
|
132
|
+
obj[baseUrlKey] = target.openaiBaseUrl;
|
|
133
|
+
const enabledKey = matchKey(obj, isEnabledField);
|
|
134
|
+
if (enabledKey)
|
|
135
|
+
obj[enabledKey] = true;
|
|
136
|
+
const apiKeyKey = matchKey(obj, isApiKeyField);
|
|
137
|
+
if (apiKeyKey)
|
|
138
|
+
obj[apiKeyKey] = target.clientKey ?? target.placeholderKey;
|
|
139
|
+
return { value: JSON.stringify(obj), wroteKey: Boolean(apiKeyKey) };
|
|
140
|
+
};
|
|
141
|
+
/** Find the ItemTable row holding the OpenAI settings, or undefined. */
|
|
142
|
+
const findSettingsRow = (db, target) => {
|
|
143
|
+
for (const key of listKeys(db)) {
|
|
144
|
+
const value = readItem(db, key);
|
|
145
|
+
if (!value)
|
|
146
|
+
continue;
|
|
147
|
+
const patch = patchCursorSettings(value, target);
|
|
148
|
+
if (patch)
|
|
149
|
+
return { key, patch };
|
|
150
|
+
}
|
|
151
|
+
return undefined;
|
|
152
|
+
};
|
|
153
|
+
/** The manual steps — the fallback whenever we can't safely automate. */
|
|
154
|
+
const manualSteps = (target, reason) => {
|
|
155
|
+
const meta = metadataHeaderValue(target.metadata);
|
|
156
|
+
return [
|
|
157
|
+
...(reason ? [reason] : []),
|
|
158
|
+
'Configure Cursor by hand: Cursor → Settings → Models → OpenAI API Key:',
|
|
159
|
+
` • Override OpenAI Base URL: ${target.openaiBaseUrl}`,
|
|
160
|
+
target.clientKey
|
|
161
|
+
? ` • API key: ${target.clientKey} (your personal gateway key — keep it private)`
|
|
162
|
+
: ` • API key: ${target.placeholderKey} (placeholder — the gateway holds the real key)`,
|
|
163
|
+
meta
|
|
164
|
+
? ` • Cursor has no custom-header field, so attribution rides your per-user key (above), not ${meta}.`
|
|
165
|
+
: ' • (No attribution metadata resolved; set --user, or use --invite for a per-user key.)',
|
|
166
|
+
];
|
|
167
|
+
};
|
|
168
|
+
export const cursor = {
|
|
169
|
+
id: 'cursor',
|
|
170
|
+
title: 'Cursor',
|
|
171
|
+
automatic: true,
|
|
172
|
+
async detect() {
|
|
173
|
+
const dir = cursorUserDir();
|
|
174
|
+
const installed = existsSync(dir);
|
|
175
|
+
return {
|
|
176
|
+
installed,
|
|
177
|
+
detail: installed ? stateDbPath() : 'Cursor user dir not found',
|
|
178
|
+
};
|
|
179
|
+
},
|
|
180
|
+
async apply(target, opts) {
|
|
181
|
+
const db = stateDbPath();
|
|
182
|
+
// Without sqlite3 or the DB, or with Cursor open, we can't safely write —
|
|
183
|
+
// fall back to the manual steps (which always work) instead of failing.
|
|
184
|
+
if (!sqliteAvailable()) {
|
|
185
|
+
return {
|
|
186
|
+
status: 'manual',
|
|
187
|
+
messages: manualSteps(target, 'sqlite3 not found — automatic Cursor config needs it.'),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
if (!existsSync(db)) {
|
|
191
|
+
return {
|
|
192
|
+
status: 'manual',
|
|
193
|
+
messages: manualSteps(target, `No Cursor state DB at ${db} (open Cursor once first).`),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
if (cursorRunning()) {
|
|
197
|
+
return {
|
|
198
|
+
status: 'manual',
|
|
199
|
+
messages: manualSteps(target, 'Cursor is running — quit it and re-run, or set it by hand:'),
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
if (opts.dryRun) {
|
|
203
|
+
return {
|
|
204
|
+
status: 'configured',
|
|
205
|
+
messages: [
|
|
206
|
+
`Would back up ${db} and write the gateway base URL + key into Cursor's OpenAI override.`,
|
|
207
|
+
],
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
// Locate the settings row first; if we can't recognize it, don't touch the
|
|
211
|
+
// DB — fall back to manual (e.g. the key is keychain-encrypted, not in here).
|
|
212
|
+
const found = findSettingsRow(db, target);
|
|
213
|
+
if (!found) {
|
|
214
|
+
return {
|
|
215
|
+
status: 'manual',
|
|
216
|
+
messages: manualSteps(target, "Couldn't locate Cursor's OpenAI settings in its state DB (version difference or an encrypted key) — set it by hand:"),
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// Back up, then patch the one row. The backup is what `revert` restores.
|
|
220
|
+
const backup = backupPath();
|
|
221
|
+
try {
|
|
222
|
+
copyFileSync(db, backup);
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
return {
|
|
226
|
+
status: 'manual',
|
|
227
|
+
messages: manualSteps(target, `Couldn't back up ${db} (${error instanceof Error ? error.message : String(error)}) — refusing to write; set it by hand:`),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
writeItem(db, found.key, found.patch.value);
|
|
231
|
+
const key = target.clientKey ?? target.placeholderKey;
|
|
232
|
+
return {
|
|
233
|
+
status: 'configured',
|
|
234
|
+
changedFiles: [db],
|
|
235
|
+
messages: [
|
|
236
|
+
`Wrote Cursor's OpenAI override → base URL ${target.openaiBaseUrl} (backup at ${backup}).`,
|
|
237
|
+
found.patch.wroteKey
|
|
238
|
+
? 'Also set the API key.'
|
|
239
|
+
: `Cursor stores the API key outside this DB (keychain) — set it by hand once: Settings → Models → OpenAI API Key = ${key}`,
|
|
240
|
+
'Restart Cursor to pick it up. Note: only chat routes through Anyray — Tab/agent/indexing use Cursor’s own cloud.',
|
|
241
|
+
],
|
|
242
|
+
};
|
|
243
|
+
},
|
|
244
|
+
async revert(opts) {
|
|
245
|
+
const db = stateDbPath();
|
|
246
|
+
const backup = backupPath();
|
|
247
|
+
if (!existsSync(backup)) {
|
|
248
|
+
return {
|
|
249
|
+
status: 'manual',
|
|
250
|
+
messages: [
|
|
251
|
+
'No Anyray backup found. Revert by hand: Cursor → Settings → Models → clear the custom OpenAI base URL / key.',
|
|
252
|
+
],
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
if (opts.dryRun) {
|
|
256
|
+
return { status: 'reverted', messages: [`Would restore ${db} from ${backup}.`] };
|
|
257
|
+
}
|
|
258
|
+
if (cursorRunning()) {
|
|
259
|
+
return {
|
|
260
|
+
status: 'manual',
|
|
261
|
+
messages: ['Cursor is running — quit it and re-run --revert to restore the backup.'],
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
copyFileSync(backup, db);
|
|
265
|
+
rmSync(backup, { force: true });
|
|
266
|
+
return {
|
|
267
|
+
status: 'reverted',
|
|
268
|
+
changedFiles: [db],
|
|
269
|
+
messages: [`Restored Cursor's state DB from the Anyray backup. Restart Cursor.`],
|
|
270
|
+
};
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/tools/cursor.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -8,11 +8,14 @@
|
|
|
8
8
|
import { claudeCode } from './claudeCode.js';
|
|
9
9
|
import { codex } from './codex.js';
|
|
10
10
|
import { shellEnv } from './shellEnv.js';
|
|
11
|
-
import { cursor
|
|
11
|
+
import { cursor } from './cursor.js';
|
|
12
|
+
import { copilotChat } from './copilotChat.js';
|
|
13
|
+
import { windsurf } from './manual.js';
|
|
12
14
|
export const REGISTRY = [
|
|
13
15
|
claudeCode,
|
|
14
16
|
codex,
|
|
15
17
|
cursor,
|
|
18
|
+
copilotChat,
|
|
16
19
|
windsurf,
|
|
17
20
|
shellEnv,
|
|
18
21
|
];
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,CAAC,MAAM,QAAQ,GAAkB;IACrC,UAAU;IACV,KAAK;IACL,MAAM;IACN,WAAW;IACX,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAU,EAA2B,EAAE,CAC1D,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC"}
|
package/dist/tools/manual.js
CHANGED
|
@@ -4,22 +4,11 @@
|
|
|
4
4
|
* UI steps; we never write their internal state. Honest about the boundary —
|
|
5
5
|
* an automatic adapter can replace one of these later without touching the CLI.
|
|
6
6
|
*/
|
|
7
|
-
import { homedir, platform } from 'node:os';
|
|
8
|
-
import { join } from 'node:path';
|
|
9
7
|
import { fileExists } from '../util/jsonFile.js';
|
|
8
|
+
import { appSupportDir } from '../util/appSupport.js';
|
|
10
9
|
import { metadataHeaderValue } from '../types.js';
|
|
11
10
|
/** Per-OS app-support directories where these editors keep their config. */
|
|
12
|
-
const appSupportDirs = (appDir) =>
|
|
13
|
-
const home = homedir();
|
|
14
|
-
switch (platform()) {
|
|
15
|
-
case 'darwin':
|
|
16
|
-
return [join(home, 'Library', 'Application Support', appDir)];
|
|
17
|
-
case 'win32':
|
|
18
|
-
return [join(process.env.APPDATA ?? join(home, 'AppData', 'Roaming'), appDir)];
|
|
19
|
-
default:
|
|
20
|
-
return [join(home, '.config', appDir)];
|
|
21
|
-
}
|
|
22
|
-
};
|
|
11
|
+
const appSupportDirs = (appDir) => [appSupportDir(appDir)];
|
|
23
12
|
const makeManualAdapter = (spec) => ({
|
|
24
13
|
id: spec.id,
|
|
25
14
|
title: spec.title,
|
|
@@ -58,12 +47,8 @@ const openAiStyleSteps = (settingsLabel) => (target) => {
|
|
|
58
47
|
: ' • (No attribution metadata resolved; set --user to attribute spend.)',
|
|
59
48
|
];
|
|
60
49
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
title: 'Cursor',
|
|
64
|
-
appDir: 'Cursor',
|
|
65
|
-
steps: openAiStyleSteps('Cursor → Settings → Models → OpenAI API Key'),
|
|
66
|
-
});
|
|
50
|
+
// Cursor used to live here as a manual adapter; it's now an automatic adapter
|
|
51
|
+
// in ./cursor.ts (writes Cursor's state.vscdb, with a manual fallback).
|
|
67
52
|
export const windsurf = makeManualAdapter({
|
|
68
53
|
id: 'windsurf',
|
|
69
54
|
title: 'Windsurf',
|
package/dist/tools/manual.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manual.js","sourceRoot":"","sources":["../../src/tools/manual.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"manual.js","sourceRoot":"","sources":["../../src/tools/manual.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AASlD,4EAA4E;AAC5E,MAAM,cAAc,GAAG,CAAC,MAAc,EAAY,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AAS7E,MAAM,iBAAiB,GAAG,CAAC,IAAgB,EAAe,EAAE,CAAC,CAAC;IAC5D,EAAE,EAAE,IAAI,CAAC,EAAE;IACX,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,SAAS,EAAE,KAAK;IAEhB,KAAK,CAAC,MAAM;QACV,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,IAAI,MAAM,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACrE,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAqB;QAC/B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAmB;QAC9B,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE;gBACR,GAAG,IAAI,CAAC,KAAK,qEAAqE;aACnF;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,aAAqB,EAAE,EAAE,CAAC,CAClD,MAAqB,EACX,EAAE;IACZ,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClD,wEAAwE;IACxE,0EAA0E;IAC1E,OAAO;QACL,QAAQ,aAAa,uCAAuC;QAC5D,iBAAiB,MAAM,CAAC,aAAa,EAAE;QACvC,MAAM,CAAC,SAAS;YACd,CAAC,CAAC,iBAAiB,MAAM,CAAC,SAAS,iDAAiD;YACpF,CAAC,CAAC,iBAAiB,MAAM,CAAC,cAAc,kDAAkD;QAC5F,IAAI;YACF,CAAC,CAAC,4DAA4D,IAAI,EAAE;YACpE,CAAC,CAAC,wEAAwE;KAC7E,CAAC;AACJ,CAAC,CAAC;AAEF,8EAA8E;AAC9E,wEAAwE;AACxE,MAAM,CAAC,MAAM,QAAQ,GAAG,iBAAiB,CAAC;IACxC,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,gBAAgB,CAAC,+CAA+C,CAAC;CACzE,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-OS application support/config directory for a named app folder — the dir
|
|
3
|
+
* an editor or CLI keeps its config under. One place for the platform switch so
|
|
4
|
+
* every adapter that resolves an app dir (Cursor, the manual editors, VS
|
|
5
|
+
* Code/Copilot) agrees on it instead of re-implementing the same three cases.
|
|
6
|
+
*
|
|
7
|
+
* macOS → ~/Library/Application Support/<app>
|
|
8
|
+
* Windows → %APPDATA%\<app> (falls back to ~/AppData/Roaming)
|
|
9
|
+
* Linux/other → ~/.config/<app>
|
|
10
|
+
*/
|
|
11
|
+
import { homedir, platform } from 'node:os';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
export const appSupportDir = (app) => {
|
|
14
|
+
const home = homedir();
|
|
15
|
+
switch (platform()) {
|
|
16
|
+
case 'darwin':
|
|
17
|
+
return join(home, 'Library', 'Application Support', app);
|
|
18
|
+
case 'win32':
|
|
19
|
+
return join(process.env.APPDATA ?? join(home, 'AppData', 'Roaming'), app);
|
|
20
|
+
default:
|
|
21
|
+
return join(home, '.config', app);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=appSupport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appSupport.js","sourceRoot":"","sources":["../../src/util/appSupport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAU,EAAE;IACnD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,QAAQ,QAAQ,EAAE,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;QAC3D,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5E;YACE,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* On-disk LRU cache of the gateway's tool-output optimization verdicts.
|
|
3
|
+
*
|
|
4
|
+
* Each PostToolUse hook runs as its own short-lived process, so an in-memory
|
|
5
|
+
* cache buys nothing — the cache must live on disk to span tool calls. This
|
|
6
|
+
* makes the dev's *repeat* oversized outputs (re-running the same command,
|
|
7
|
+
* re-reading the same file) resolve LOCALLY: a cache hit replays the verdict
|
|
8
|
+
* the gateway produced earlier and skips the slow server round-trip + LLM
|
|
9
|
+
* strategy compute entirely (see commands/hook.ts).
|
|
10
|
+
*
|
|
11
|
+
* Only the gateway's verdicts are cached — never the cheap local-trim fallback
|
|
12
|
+
* (recomputing head/tail is instant, and we want to retry the server the moment
|
|
13
|
+
* it's reachable again). A "no-op" verdict (the server ran and declined) is
|
|
14
|
+
* cached as a body-free marker so a known-incompressible output also skips the
|
|
15
|
+
* round-trip next time.
|
|
16
|
+
*
|
|
17
|
+
* PRIVACY: the only content stored is the dev's OWN optimized tool output, on
|
|
18
|
+
* the dev's OWN machine, where the full output already lives in Claude Code's
|
|
19
|
+
* conversation history — this introduces no new exposure. It is never
|
|
20
|
+
* transmitted (the wire stays content-free: only counts beacon out), the file
|
|
21
|
+
* is mode 600, entries are bounded + TTL'd, and the cache is opt-out via
|
|
22
|
+
* ANYRAY_HOOK_CACHE=off. The lookup key is a one-way sha256 of the content.
|
|
23
|
+
*/
|
|
24
|
+
import { createHash } from 'node:crypto';
|
|
25
|
+
import { homedir } from 'node:os';
|
|
26
|
+
import { join } from 'node:path';
|
|
27
|
+
import { readFile, writeFile, rename, chmod, stat, unlink } from 'node:fs/promises';
|
|
28
|
+
const DEFAULT_MAX_ENTRIES = 200;
|
|
29
|
+
const DEFAULT_TTL_MS = 24 * 60 * 60 * 1000; // 24h
|
|
30
|
+
/** Bound total cached body bytes so a few huge outputs can't grow the file unboundedly. */
|
|
31
|
+
const MAX_TOTAL_BODY_CHARS = 4_000_000;
|
|
32
|
+
const cacheDisabled = () => (process.env.ANYRAY_HOOK_CACHE ?? '').trim().toLowerCase() === 'off';
|
|
33
|
+
const posIntEnv = (key, fallback) => {
|
|
34
|
+
const v = process.env[key];
|
|
35
|
+
if (!v)
|
|
36
|
+
return fallback;
|
|
37
|
+
const n = Number(v);
|
|
38
|
+
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
39
|
+
};
|
|
40
|
+
const maxEntries = () => posIntEnv('ANYRAY_HOOK_CACHE_MAX_ENTRIES', DEFAULT_MAX_ENTRIES);
|
|
41
|
+
const ttlMs = () => posIntEnv('ANYRAY_HOOK_CACHE_TTL_MS', DEFAULT_TTL_MS);
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the cache file path. An explicit override (for tests) wins; otherwise
|
|
44
|
+
* place it inside `~/.anyray` when that's a directory (the gateway's data dir
|
|
45
|
+
* on a box that also runs the gateway), else a sibling `~/.anyray-hook-cache.json`
|
|
46
|
+
* — mirroring the file-vs-directory handling in util/persist.ts so we never hit
|
|
47
|
+
* EISDIR.
|
|
48
|
+
*/
|
|
49
|
+
const cacheFilePath = async () => {
|
|
50
|
+
const override = process.env.ANYRAY_HOOK_CACHE_FILE?.trim();
|
|
51
|
+
if (override)
|
|
52
|
+
return override;
|
|
53
|
+
const dir = join(homedir(), '.anyray');
|
|
54
|
+
try {
|
|
55
|
+
if ((await stat(dir)).isDirectory())
|
|
56
|
+
return join(dir, 'hook-cache.json');
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
/* missing → use the sibling file path */
|
|
60
|
+
}
|
|
61
|
+
return join(homedir(), '.anyray-hook-cache.json');
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* The cache key: a one-way sha256 over the same inputs that determine the
|
|
65
|
+
* gateway's verdict (tool name, the input hint relevance_filter ranks against,
|
|
66
|
+
* and the body). Distinct queries over the same body get distinct keys, so a
|
|
67
|
+
* verdict is never replayed for a different intent.
|
|
68
|
+
*
|
|
69
|
+
* Each field is length-prefixed (`<len>:<value>`) so the concatenation is
|
|
70
|
+
* unambiguous — a plain separator char could occur inside a tool output, which
|
|
71
|
+
* would let e.g. ('Read','x') and ('Rea','dx') collide.
|
|
72
|
+
*/
|
|
73
|
+
export const hookCacheKey = (tool, hint, body) => createHash('sha256')
|
|
74
|
+
.update(`${tool.length}:${tool}`)
|
|
75
|
+
.update(`${hint.length}:${hint}`)
|
|
76
|
+
.update(body)
|
|
77
|
+
.digest('hex');
|
|
78
|
+
const readFileObj = async (path) => {
|
|
79
|
+
try {
|
|
80
|
+
const parsed = JSON.parse(await readFile(path, 'utf-8'));
|
|
81
|
+
if (parsed?.v === 1 && parsed.entries && typeof parsed.entries === 'object') {
|
|
82
|
+
return parsed;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
/* missing / corrupt → start fresh */
|
|
87
|
+
}
|
|
88
|
+
return { v: 1, entries: {} };
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Look up a cached verdict. Best-effort: returns null on miss, expiry, a
|
|
92
|
+
* disabled cache, or any I/O/parse error (the hook then takes its normal path).
|
|
93
|
+
*/
|
|
94
|
+
export const readCache = async (key) => {
|
|
95
|
+
if (cacheDisabled())
|
|
96
|
+
return null;
|
|
97
|
+
try {
|
|
98
|
+
const file = await readFileObj(await cacheFilePath());
|
|
99
|
+
const entry = file.entries[key];
|
|
100
|
+
if (!entry)
|
|
101
|
+
return null;
|
|
102
|
+
if (Date.now() - entry.at > ttlMs())
|
|
103
|
+
return null;
|
|
104
|
+
if (typeof entry.o === 'string') {
|
|
105
|
+
return {
|
|
106
|
+
optimized: true,
|
|
107
|
+
output: entry.o,
|
|
108
|
+
tokensSaved: Number.isFinite(entry.t) ? entry.t : 0,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return { optimized: false };
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
/** Drop expired entries, then evict oldest until under the entry + byte caps. */
|
|
118
|
+
const prune = (entries) => {
|
|
119
|
+
const now = Date.now();
|
|
120
|
+
const ttl = ttlMs();
|
|
121
|
+
const live = Object.entries(entries).filter(([, e]) => now - e.at <= ttl);
|
|
122
|
+
// Newest first, so we keep the most-recently-written within both caps.
|
|
123
|
+
live.sort((a, b) => b[1].at - a[1].at);
|
|
124
|
+
const kept = [];
|
|
125
|
+
let bodyChars = 0;
|
|
126
|
+
const cap = maxEntries();
|
|
127
|
+
for (const pair of live) {
|
|
128
|
+
if (kept.length >= cap)
|
|
129
|
+
break;
|
|
130
|
+
bodyChars += pair[1].o?.length ?? 0;
|
|
131
|
+
if (bodyChars > MAX_TOTAL_BODY_CHARS && kept.length > 0)
|
|
132
|
+
break;
|
|
133
|
+
kept.push(pair);
|
|
134
|
+
}
|
|
135
|
+
return Object.fromEntries(kept);
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Record a gateway verdict for `key`. Best-effort: a disabled cache or any I/O
|
|
139
|
+
* error is swallowed (the cache is an optimization, never a correctness
|
|
140
|
+
* dependency). Writes atomically (temp + rename) at mode 600.
|
|
141
|
+
*
|
|
142
|
+
* Concurrency: each PostToolUse hook is its own process, so two may read-modify-
|
|
143
|
+
* write this file at once. The atomic rename keeps any reader from seeing a
|
|
144
|
+
* partial file; the cost is a possible lost update (last writer wins), which is
|
|
145
|
+
* harmless — the dropped entry is simply re-fetched and re-cached next time.
|
|
146
|
+
*/
|
|
147
|
+
export const writeCache = async (key, verdict) => {
|
|
148
|
+
if (cacheDisabled())
|
|
149
|
+
return;
|
|
150
|
+
let tmp;
|
|
151
|
+
try {
|
|
152
|
+
const path = await cacheFilePath();
|
|
153
|
+
const file = await readFileObj(path);
|
|
154
|
+
file.entries[key] = verdict.optimized
|
|
155
|
+
? { o: verdict.output, t: verdict.tokensSaved, at: Date.now() }
|
|
156
|
+
: { at: Date.now() };
|
|
157
|
+
file.entries = prune(file.entries);
|
|
158
|
+
tmp = `${path}.${process.pid}.tmp`;
|
|
159
|
+
await writeFile(tmp, JSON.stringify(file), { mode: 0o600 });
|
|
160
|
+
await chmod(tmp, 0o600);
|
|
161
|
+
await rename(tmp, path);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Best-effort: clean up a temp the rename never consumed (a mid-write
|
|
165
|
+
// failure), so failed writes don't leave 600-mode turds behind.
|
|
166
|
+
if (tmp) {
|
|
167
|
+
try {
|
|
168
|
+
await unlink(tmp);
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
/* nothing more we can do */
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=hookCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hookCache.js","sourceRoot":"","sources":["../../src/util/hookCache.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.
|
|
3
|
+
"version": "0.8.1",
|
|
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": {
|