@vacbo/opencode-anthropic-fix 0.1.7 → 0.1.9
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/README.md +88 -88
- package/dist/opencode-anthropic-auth-cli.mjs +804 -507
- package/dist/opencode-anthropic-auth-plugin.js +4751 -4109
- package/package.json +67 -59
- package/src/__tests__/billing-edge-cases.test.ts +59 -59
- package/src/__tests__/bun-proxy.parallel.test.ts +388 -382
- package/src/__tests__/cc-comparison.test.ts +87 -87
- package/src/__tests__/cc-credentials.test.ts +254 -250
- package/src/__tests__/cch-drift-checker.test.ts +51 -51
- package/src/__tests__/cch-native-style.test.ts +56 -56
- package/src/__tests__/debug-gating.test.ts +42 -42
- package/src/__tests__/decomposition-smoke.test.ts +68 -68
- package/src/__tests__/fingerprint-regression.test.ts +575 -566
- package/src/__tests__/helpers/conversation-history.smoke.test.ts +271 -271
- package/src/__tests__/helpers/conversation-history.ts +119 -119
- package/src/__tests__/helpers/deferred.smoke.test.ts +103 -103
- package/src/__tests__/helpers/deferred.ts +69 -69
- package/src/__tests__/helpers/in-memory-storage.smoke.test.ts +155 -155
- package/src/__tests__/helpers/in-memory-storage.ts +88 -88
- package/src/__tests__/helpers/mock-bun-proxy.smoke.test.ts +68 -68
- package/src/__tests__/helpers/mock-bun-proxy.ts +189 -189
- package/src/__tests__/helpers/plugin-fetch-harness.smoke.test.ts +273 -273
- package/src/__tests__/helpers/plugin-fetch-harness.ts +288 -288
- package/src/__tests__/helpers/sse.smoke.test.ts +236 -236
- package/src/__tests__/helpers/sse.ts +209 -209
- package/src/__tests__/index.parallel.test.ts +605 -595
- package/src/__tests__/sanitization-regex.test.ts +112 -112
- package/src/__tests__/state-bounds.test.ts +90 -90
- package/src/account-identity.test.ts +197 -192
- package/src/account-identity.ts +69 -67
- package/src/account-state.test.ts +86 -86
- package/src/account-state.ts +25 -25
- package/src/accounts/matching.test.ts +335 -0
- package/src/accounts/matching.ts +167 -0
- package/src/accounts/persistence.test.ts +345 -0
- package/src/accounts/persistence.ts +432 -0
- package/src/accounts/repair.test.ts +276 -0
- package/src/accounts/repair.ts +407 -0
- package/src/accounts.dedup.test.ts +621 -621
- package/src/accounts.test.ts +933 -929
- package/src/accounts.ts +633 -989
- package/src/backoff.test.ts +345 -345
- package/src/backoff.ts +219 -219
- package/src/betas.ts +124 -124
- package/src/bun-fetch.test.ts +345 -342
- package/src/bun-fetch.ts +424 -424
- package/src/bun-proxy.test.ts +25 -25
- package/src/bun-proxy.ts +209 -209
- package/src/cc-credentials.ts +111 -111
- package/src/circuit-breaker.test.ts +184 -184
- package/src/circuit-breaker.ts +169 -169
- package/src/cli/commands/auth.ts +963 -0
- package/src/cli/commands/config.ts +547 -0
- package/src/cli/formatting.test.ts +406 -0
- package/src/cli/formatting.ts +219 -0
- package/src/cli.ts +255 -2022
- package/src/commands/handlers/betas.ts +100 -0
- package/src/commands/handlers/config.ts +99 -0
- package/src/commands/handlers/files.ts +375 -0
- package/src/commands/oauth-flow.ts +181 -166
- package/src/commands/prompts.ts +61 -61
- package/src/commands/router.test.ts +421 -0
- package/src/commands/router.ts +143 -635
- package/src/config.test.ts +482 -482
- package/src/config.ts +412 -404
- package/src/constants.ts +48 -48
- package/src/drift/cch-constants.ts +95 -95
- package/src/env.ts +111 -105
- package/src/headers/billing.ts +33 -33
- package/src/headers/builder.ts +130 -130
- package/src/headers/cch.ts +75 -75
- package/src/headers/stainless.ts +25 -25
- package/src/headers/user-agent.ts +23 -23
- package/src/index.ts +436 -828
- package/src/models.ts +27 -27
- package/src/oauth.test.ts +102 -102
- package/src/oauth.ts +178 -178
- package/src/parent-pid-watcher.test.ts +148 -148
- package/src/parent-pid-watcher.ts +69 -69
- package/src/plugin-helpers.ts +82 -82
- package/src/refresh-helpers.ts +145 -139
- package/src/refresh-lock.test.ts +94 -94
- package/src/refresh-lock.ts +93 -93
- package/src/request/body.history.test.ts +579 -571
- package/src/request/body.ts +255 -255
- package/src/request/metadata.ts +65 -65
- package/src/request/retry.test.ts +156 -156
- package/src/request/retry.ts +67 -67
- package/src/request/url.ts +21 -21
- package/src/request-orchestration-helpers.ts +648 -0
- package/src/response/index.ts +5 -5
- package/src/response/mcp.ts +58 -58
- package/src/response/streaming.test.ts +313 -311
- package/src/response/streaming.ts +412 -410
- package/src/rotation.test.ts +304 -301
- package/src/rotation.ts +205 -205
- package/src/storage.test.ts +547 -547
- package/src/storage.ts +315 -291
- package/src/system-prompt/builder.ts +38 -38
- package/src/system-prompt/index.ts +5 -5
- package/src/system-prompt/normalize.ts +60 -60
- package/src/system-prompt/sanitize.ts +30 -30
- package/src/thinking.ts +21 -20
- package/src/token-refresh.test.ts +265 -265
- package/src/token-refresh.ts +219 -214
- package/src/types.ts +30 -30
- package/dist/bun-proxy.mjs +0 -291
package/src/response/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { stripMcpPrefixFromJsonBody, stripMcpPrefixFromParsedEvent, stripMcpPrefixFromSSE } from "./mcp.js";
|
|
2
2
|
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
extractUsageFromSSEEvent,
|
|
4
|
+
getMidStreamAccountError,
|
|
5
|
+
getSSEDataPayload,
|
|
6
|
+
isEventStreamResponse,
|
|
7
|
+
transformResponse,
|
|
8
8
|
} from "./streaming.js";
|
package/src/response/mcp.ts
CHANGED
|
@@ -8,56 +8,56 @@
|
|
|
8
8
|
* Non-JSON lines and text blocks are left untouched.
|
|
9
9
|
*/
|
|
10
10
|
export function stripMcpPrefixFromSSE(text: string): string {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
return text.replace(/^data:\s*(.+)$/gm, (_match, jsonStr: string) => {
|
|
12
|
+
try {
|
|
13
|
+
const parsed = JSON.parse(jsonStr);
|
|
14
|
+
if (stripMcpPrefixFromParsedEvent(parsed)) {
|
|
15
|
+
return `data: ${JSON.stringify(parsed)}`;
|
|
16
|
+
}
|
|
17
|
+
} catch {
|
|
18
|
+
// Not valid JSON — pass through unchanged.
|
|
19
|
+
}
|
|
20
|
+
return _match;
|
|
21
|
+
});
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
function stripMcpPrefixFromToolUseBlock(block: unknown): boolean {
|
|
25
|
-
|
|
25
|
+
if (!block || typeof block !== "object") return false;
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
const parsedBlock = block as Record<string, unknown>;
|
|
28
|
+
if (parsedBlock.type !== "tool_use" || typeof parsedBlock.name !== "string") {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
if (!parsedBlock.name.startsWith("mcp_")) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
parsedBlock.name = parsedBlock.name.slice(4);
|
|
37
|
+
return true;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
function stripMcpPrefixFromContentBlocks(content: unknown): boolean {
|
|
41
|
-
|
|
41
|
+
if (!Array.isArray(content)) return false;
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
let modified = false;
|
|
44
|
+
for (const block of content) {
|
|
45
|
+
modified = stripMcpPrefixFromToolUseBlock(block) || modified;
|
|
46
|
+
}
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
return modified;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
function stripMcpPrefixFromMessages(messages: unknown): boolean {
|
|
52
|
-
|
|
52
|
+
if (!Array.isArray(messages)) return false;
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
let modified = false;
|
|
55
|
+
for (const message of messages) {
|
|
56
|
+
if (!message || typeof message !== "object") continue;
|
|
57
|
+
modified = stripMcpPrefixFromContentBlocks((message as Record<string, unknown>).content) || modified;
|
|
58
|
+
}
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
return modified;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
/**
|
|
@@ -65,38 +65,38 @@ function stripMcpPrefixFromMessages(messages: unknown): boolean {
|
|
|
65
65
|
* name fields. Returns true if any modification was made.
|
|
66
66
|
*/
|
|
67
67
|
export function stripMcpPrefixFromParsedEvent(parsed: unknown): boolean {
|
|
68
|
-
|
|
68
|
+
if (!parsed || typeof parsed !== "object") return false;
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
const p = parsed as Record<string, unknown>;
|
|
71
|
+
let modified = false;
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
// content_block_start: { content_block: { type: "tool_use", name: "mcp_..." } }
|
|
74
|
+
modified = stripMcpPrefixFromToolUseBlock(p.content_block) || modified;
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
// message_start: { message: { content: [{ type: "tool_use", name: "mcp_..." }] } }
|
|
77
|
+
if (p.message && typeof p.message === "object") {
|
|
78
|
+
modified = stripMcpPrefixFromContentBlocks((p.message as Record<string, unknown>).content) || modified;
|
|
79
|
+
}
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
// Top-level content array (non-streaming responses forwarded through SSE)
|
|
82
|
+
modified = stripMcpPrefixFromContentBlocks(p.content) || modified;
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
return modified;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
export function stripMcpPrefixFromJsonBody(body: string): string {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
try {
|
|
89
|
+
const parsed = JSON.parse(body) as Record<string, unknown>;
|
|
90
|
+
let modified = false;
|
|
91
91
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
92
|
+
modified = stripMcpPrefixFromContentBlocks(parsed.content) || modified;
|
|
93
|
+
modified = stripMcpPrefixFromMessages(parsed.messages) || modified;
|
|
94
|
+
if (parsed.message && typeof parsed.message === "object") {
|
|
95
|
+
modified = stripMcpPrefixFromContentBlocks((parsed.message as Record<string, unknown>).content) || modified;
|
|
96
|
+
}
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
return modified ? JSON.stringify(parsed) : body;
|
|
99
|
+
} catch {
|
|
100
|
+
return body;
|
|
101
|
+
}
|
|
102
102
|
}
|