commandcode-api-proxy 0.1.4 → 0.2.0

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.
@@ -11,16 +11,6 @@ interface UpstreamOptions {
11
11
  * detected") if any of the CLI-identifying headers are missing/stale.
12
12
  */
13
13
  export declare function buildHeaders(apiKey: string, ccVersion: string, body: CCRequestBody): Record<string, string>;
14
- /**
15
- * Send a request to the Command Code /alpha/generate endpoint and parse
16
- * the NDJSON response into CCEvent objects.
17
- *
18
- * CC's upstream is always streaming; we force `params.stream = true` here
19
- * regardless of the downstream client's `stream` flag. For non-streaming
20
- * downstream requests, the caller drains the returned `stream` into events.
21
- *
22
- * Returns a Readable of parsed CCEvents. Callers MUST consume or destroy it.
23
- */
24
14
  export declare function sendToCC(body: CCRequestBody, options: UpstreamOptions, signal?: AbortSignal): Promise<{
25
15
  stream: NodeJS.ReadableStream;
26
16
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"upstream.d.ts","sourceRoot":"","sources":["../src/upstream.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGnE,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,aAAa,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBxB;AAmBD;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,eAAe,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAA;CAAE,CAAC,CA8C5C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAO/E;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;CAMtE"}
1
+ {"version":3,"file":"upstream.d.ts","sourceRoot":"","sources":["../src/upstream.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGnE,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,aAAa,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBxB;AAkDD,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,eAAe,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC,cAAc,CAAA;CAAE,CAAC,CAwE5C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAO/E;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;CAMtE"}
package/dist/upstream.js CHANGED
@@ -9,7 +9,7 @@ import { logger } from "./logger.js";
9
9
  */
10
10
  export function buildHeaders(apiKey, ccVersion, body) {
11
11
  const sessionId = body.threadId;
12
- logger.debug(`Sending Authorization: Bearer ${apiKey.slice(0, 12)}... (length: ${apiKey.length})`);
12
+ logger.debug(`Sending Authorization header (key length: ${apiKey.length})`);
13
13
  return {
14
14
  "Content-Type": "application/json",
15
15
  Accept: "application/json, */*",
@@ -47,44 +47,78 @@ function generateTraceparent() {
47
47
  * regardless of the downstream client's `stream` flag. For non-streaming
48
48
  * downstream requests, the caller drains the returned `stream` into events.
49
49
  *
50
+ * Retryable failures (HTTP 5xx/429, timeouts, network errors) are retried up
51
+ * to MAX_RETRIES times with linear backoff — but ONLY before the stream starts.
52
+ * A client-initiated abort (caller already disconnected) is never retried.
53
+ *
50
54
  * Returns a Readable of parsed CCEvents. Callers MUST consume or destroy it.
51
55
  */
56
+ const MAX_RETRIES = 2;
57
+ const RETRY_BACKOFF_MS = 500;
58
+ function sleep(ms, signal) {
59
+ return new Promise((resolve) => {
60
+ const t = setTimeout(resolve, ms);
61
+ signal?.addEventListener("abort", () => {
62
+ clearTimeout(t);
63
+ resolve();
64
+ }, { once: true });
65
+ });
66
+ }
52
67
  export async function sendToCC(body, options, signal) {
53
68
  const { apiBase, apiKey, ccVersion, timeoutMs = 300_000 } = options;
54
69
  const url = `${apiBase}/alpha/generate`;
55
70
  // CC's API is always streaming — force it on so the upstream stays a stream.
56
71
  body.params.stream = true;
57
- const controller = new AbortController();
58
- const combinedSignal = signal ? combineSignals(signal, controller.signal) : controller.signal;
59
- const timeout = setTimeout(() => controller.abort(new Error("Upstream timeout")), timeoutMs);
60
- try {
61
- const response = await fetch(url, {
62
- method: "POST",
63
- headers: buildHeaders(apiKey, ccVersion, body),
64
- body: JSON.stringify(body),
65
- signal: combinedSignal,
66
- });
67
- clearTimeout(timeout);
68
- if (!response.ok) {
69
- const errorText = await response.text().catch(() => "");
70
- const isRetryable = response.status >= 500 || response.status === 429;
71
- throw new UpstreamError(`CC API ${response.status}: ${errorText || response.statusText}`, response.status, isRetryable);
72
- }
73
- if (!response.body) {
74
- throw new UpstreamError("CC API returned no body", 0, true);
72
+ let lastError = null;
73
+ for (let attempt = 1; attempt <= MAX_RETRIES + 1; attempt++) {
74
+ // Per-attempt timeout so one dead connection can't burn the whole budget.
75
+ const controller = new AbortController();
76
+ const combinedSignal = signal ? combineSignals(signal, controller.signal) : controller.signal;
77
+ const timeout = setTimeout(() => controller.abort(new Error("Upstream timeout")), timeoutMs);
78
+ try {
79
+ const response = await fetch(url, {
80
+ method: "POST",
81
+ headers: buildHeaders(apiKey, ccVersion, body),
82
+ body: JSON.stringify(body),
83
+ signal: combinedSignal,
84
+ });
85
+ clearTimeout(timeout);
86
+ if (!response.ok) {
87
+ const errorText = await response.text().catch(() => "");
88
+ const retryable = response.status >= 500 || response.status === 429;
89
+ lastError = new UpstreamError(`CC API ${response.status}: ${errorText || response.statusText}`, response.status, retryable);
90
+ if (retryable && attempt <= MAX_RETRIES) {
91
+ logger.warn(`CC upstream ${response.status}, retrying ${attempt}/${MAX_RETRIES}...`);
92
+ await sleep(RETRY_BACKOFF_MS * attempt, signal);
93
+ continue;
94
+ }
95
+ throw lastError;
96
+ }
97
+ if (!response.body) {
98
+ throw new UpstreamError("CC API returned no body", 0, true);
99
+ }
100
+ return { stream: nodeReaderToStream(response.body.getReader()) };
75
101
  }
76
- const stream = nodeReaderToStream(response.body.getReader());
77
- return { stream };
78
- }
79
- catch (err) {
80
- clearTimeout(timeout);
81
- if (err instanceof UpstreamError)
82
- throw err;
83
- if (err.name === "AbortError") {
84
- throw new UpstreamError("Request aborted", 0, true);
102
+ catch (err) {
103
+ clearTimeout(timeout);
104
+ if (err instanceof UpstreamError)
105
+ throw err;
106
+ // Distinguish a client-initiated abort (caller is gone — never retry, it
107
+ // only wastes a request) from a timeout/network blip (retryable).
108
+ const aborted = err.name === "AbortError";
109
+ if (aborted && signal?.aborted) {
110
+ throw new UpstreamError("Request aborted", 0, true);
111
+ }
112
+ lastError = new UpstreamError(aborted ? "Upstream timeout" : `Upstream request failed: ${err.message}`, 0, true);
113
+ if (attempt <= MAX_RETRIES) {
114
+ logger.warn(`CC upstream ${aborted ? "timeout" : "error"}, retrying ${attempt}/${MAX_RETRIES}...`);
115
+ await sleep(RETRY_BACKOFF_MS * attempt, signal);
116
+ continue;
117
+ }
118
+ throw lastError;
85
119
  }
86
- throw new UpstreamError(`Upstream request failed: ${err.message}`, 0, true);
87
120
  }
121
+ throw lastError ?? new UpstreamError("Upstream request failed after retries", 0, true);
88
122
  }
89
123
  /**
90
124
  * Drain a CCEvent stream into an array. Used for non-streaming downstream
@@ -1 +1 @@
1
- {"version":3,"file":"upstream.js","sourceRoot":"","sources":["../src/upstream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upstream.js","sourceRoot":"","sources":["../src/upstream.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandcode-api-proxy",
3
- "version": "0.1.4",
3
+ "version": "0.2.0",
4
4
  "description": "OpenAI-compatible API proxy for Command Code. Use your Command Code subscription from any OpenAI client.",
5
5
  "keywords": [
6
6
  "ai-proxy",
@@ -27,6 +27,20 @@
27
27
  ],
28
28
  "type": "module",
29
29
  "main": "./dist/proxy.js",
30
+ "scripts": {
31
+ "build": "tsc && tsc-alias",
32
+ "start": "node dist/proxy.js",
33
+ "dev": "tsx src/proxy.ts",
34
+ "test": "vitest run",
35
+ "test:watch": "vitest",
36
+ "test:coverage": "vitest run --coverage",
37
+ "lint": "vp lint",
38
+ "fmt": "vp fmt",
39
+ "fmt:check": "vp fmt --check",
40
+ "auth": "tsx src/proxy.ts auth",
41
+ "check": "vp check",
42
+ "prepublishOnly": "pnpm build && pnpm test"
43
+ },
30
44
  "devDependencies": {
31
45
  "@types/node": "^24.0.0",
32
46
  "ai": "^5.0.206",
@@ -39,17 +53,5 @@
39
53
  "engines": {
40
54
  "node": ">=24.0.0"
41
55
  },
42
- "scripts": {
43
- "build": "tsc && tsc-alias",
44
- "start": "node dist/proxy.js",
45
- "dev": "tsx src/proxy.ts",
46
- "test": "vitest run",
47
- "test:watch": "vitest",
48
- "test:coverage": "vitest run --coverage",
49
- "lint": "vp lint",
50
- "fmt": "vp fmt",
51
- "fmt:check": "vp fmt --check",
52
- "auth": "tsx src/proxy.ts auth",
53
- "check": "vp check"
54
- }
55
- }
56
+ "packageManager": "pnpm@10.32.1"
57
+ }