@xtruder/opencode-claude-max-plugin 0.1.14 → 0.1.16
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/build/index.d.ts +2 -2
- package/build/index.js +83 -41
- package/build/model.d.ts +7 -7
- package/build/model.d.ts.map +1 -1
- package/build/prompt.d.ts +2 -2
- package/build/prompt.d.ts.map +1 -1
- package/build/stream.d.ts +2 -2
- package/build/stream.d.ts.map +1 -1
- package/build/tools.d.ts +3 -3
- package/build/tools.d.ts.map +1 -1
- package/package.json +2 -2
package/build/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LanguageModelV3 } from "@ai-sdk/provider";
|
|
2
2
|
import type { Plugin } from "@opencode-ai/plugin";
|
|
3
3
|
export interface AnthropicSDKProviderOptions {
|
|
4
4
|
/**
|
|
@@ -35,7 +35,7 @@ export interface AnthropicSDKProvider {
|
|
|
35
35
|
/**
|
|
36
36
|
* Get a language model by model ID.
|
|
37
37
|
*/
|
|
38
|
-
languageModel(modelId: string):
|
|
38
|
+
languageModel(modelId: string): LanguageModelV3;
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
41
|
* Create an Anthropic SDK provider for use with OpenCode / Vercel AI SDK.
|
package/build/index.js
CHANGED
|
@@ -155,9 +155,6 @@ function convertPrompt(prompt) {
|
|
|
155
155
|
break;
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
|
-
while (messages.length > 0 && messages[messages.length - 1].role === "assistant") {
|
|
159
|
-
messages.pop();
|
|
160
|
-
}
|
|
161
158
|
return {
|
|
162
159
|
system: systemParts.length > 0 ? systemParts.join(`
|
|
163
160
|
|
|
@@ -240,12 +237,15 @@ function convertAssistantMessage(message) {
|
|
|
240
237
|
function convertToolMessage(message) {
|
|
241
238
|
const content = [];
|
|
242
239
|
for (const part of message.content) {
|
|
243
|
-
|
|
240
|
+
if (part.type !== "tool-result")
|
|
241
|
+
continue;
|
|
242
|
+
const output = part.output;
|
|
243
|
+
const resultContent = formatToolResultContent(output);
|
|
244
244
|
content.push({
|
|
245
245
|
type: "tool_result",
|
|
246
246
|
tool_use_id: part.toolCallId,
|
|
247
247
|
content: resultContent,
|
|
248
|
-
is_error:
|
|
248
|
+
is_error: output.type === "error-text" || output.type === "error-json" ? true : undefined
|
|
249
249
|
});
|
|
250
250
|
}
|
|
251
251
|
return { role: "user", content };
|
|
@@ -507,18 +507,20 @@ function generateId() {
|
|
|
507
507
|
return `block-${Date.now()}-${idCounter++}`;
|
|
508
508
|
}
|
|
509
509
|
function mapFinishReason(stopReason) {
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
510
|
+
const unified = (() => {
|
|
511
|
+
switch (stopReason) {
|
|
512
|
+
case "end_turn":
|
|
513
|
+
case "stop_sequence":
|
|
514
|
+
return "stop";
|
|
515
|
+
case "max_tokens":
|
|
516
|
+
return "length";
|
|
517
|
+
case "tool_use":
|
|
518
|
+
return "tool-calls";
|
|
519
|
+
default:
|
|
520
|
+
return "other";
|
|
521
|
+
}
|
|
522
|
+
})();
|
|
523
|
+
return { unified, raw: stopReason ?? undefined };
|
|
522
524
|
}
|
|
523
525
|
function convertStream(anthropicStream, modelId) {
|
|
524
526
|
const blockStates = new Map;
|
|
@@ -545,10 +547,17 @@ function convertStream(anthropicStream, modelId) {
|
|
|
545
547
|
type: "finish",
|
|
546
548
|
finishReason,
|
|
547
549
|
usage: {
|
|
548
|
-
inputTokens:
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
550
|
+
inputTokens: {
|
|
551
|
+
total: inputTokens ?? 0,
|
|
552
|
+
noCache: undefined,
|
|
553
|
+
cacheRead: cachedInputTokens ?? 0,
|
|
554
|
+
cacheWrite: cacheCreationTokens ?? 0
|
|
555
|
+
},
|
|
556
|
+
outputTokens: {
|
|
557
|
+
total: outputTokens ?? 0,
|
|
558
|
+
text: undefined,
|
|
559
|
+
reasoning: undefined
|
|
560
|
+
}
|
|
552
561
|
},
|
|
553
562
|
providerMetadata: {
|
|
554
563
|
anthropic: {
|
|
@@ -694,18 +703,20 @@ function handleApiError(error) {
|
|
|
694
703
|
throw error;
|
|
695
704
|
}
|
|
696
705
|
function mapFinishReason2(stopReason) {
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
706
|
+
const unified = (() => {
|
|
707
|
+
switch (stopReason) {
|
|
708
|
+
case "end_turn":
|
|
709
|
+
case "stop_sequence":
|
|
710
|
+
return "stop";
|
|
711
|
+
case "max_tokens":
|
|
712
|
+
return "length";
|
|
713
|
+
case "tool_use":
|
|
714
|
+
return "tool-calls";
|
|
715
|
+
default:
|
|
716
|
+
return "other";
|
|
717
|
+
}
|
|
718
|
+
})();
|
|
719
|
+
return { unified, raw: stopReason ?? undefined };
|
|
709
720
|
}
|
|
710
721
|
var BILLING_SYSTEM_BLOCK = {
|
|
711
722
|
type: "text",
|
|
@@ -794,7 +805,7 @@ class AnthropicSDKModel {
|
|
|
794
805
|
client;
|
|
795
806
|
providerName;
|
|
796
807
|
isOAuth;
|
|
797
|
-
specificationVersion = "
|
|
808
|
+
specificationVersion = "v3";
|
|
798
809
|
provider;
|
|
799
810
|
modelId;
|
|
800
811
|
supportedUrls = {};
|
|
@@ -809,13 +820,13 @@ class AnthropicSDKModel {
|
|
|
809
820
|
const { system, messages } = convertPrompt(options.prompt);
|
|
810
821
|
const warnings = [];
|
|
811
822
|
if (options.presencePenalty != null) {
|
|
812
|
-
warnings.push({ type: "
|
|
823
|
+
warnings.push({ type: "compatibility", feature: "presencePenalty" });
|
|
813
824
|
}
|
|
814
825
|
if (options.frequencyPenalty != null) {
|
|
815
|
-
warnings.push({ type: "
|
|
826
|
+
warnings.push({ type: "compatibility", feature: "frequencyPenalty" });
|
|
816
827
|
}
|
|
817
828
|
if (options.seed != null) {
|
|
818
|
-
warnings.push({ type: "
|
|
829
|
+
warnings.push({ type: "compatibility", feature: "seed" });
|
|
819
830
|
}
|
|
820
831
|
const tools = options.toolChoice?.type === "none" ? undefined : convertTools(options.tools);
|
|
821
832
|
const toolChoice = options.toolChoice?.type === "none" ? undefined : convertToolChoice(options.toolChoice);
|
|
@@ -977,10 +988,17 @@ class AnthropicSDKModel {
|
|
|
977
988
|
content,
|
|
978
989
|
finishReason: mapFinishReason2(response.stop_reason),
|
|
979
990
|
usage: {
|
|
980
|
-
inputTokens:
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
991
|
+
inputTokens: {
|
|
992
|
+
total: response.usage.input_tokens,
|
|
993
|
+
noCache: undefined,
|
|
994
|
+
cacheRead: cacheReadTokens,
|
|
995
|
+
cacheWrite: cacheCreateTokens
|
|
996
|
+
},
|
|
997
|
+
outputTokens: {
|
|
998
|
+
total: response.usage.output_tokens,
|
|
999
|
+
text: undefined,
|
|
1000
|
+
reasoning: undefined
|
|
1001
|
+
}
|
|
984
1002
|
},
|
|
985
1003
|
providerMetadata: {
|
|
986
1004
|
anthropic: {
|
|
@@ -1006,6 +1024,30 @@ class AnthropicSDKModel {
|
|
|
1006
1024
|
stream: true
|
|
1007
1025
|
}, { signal: options.abortSignal });
|
|
1008
1026
|
} catch (error) {
|
|
1027
|
+
if (error instanceof APIError && error.status === 400 && error.message?.includes("must end with a user message")) {
|
|
1028
|
+
return {
|
|
1029
|
+
stream: new ReadableStream({
|
|
1030
|
+
start(controller) {
|
|
1031
|
+
controller.enqueue({ type: "stream-start", warnings });
|
|
1032
|
+
controller.enqueue({
|
|
1033
|
+
type: "finish",
|
|
1034
|
+
finishReason: { unified: "stop", raw: undefined },
|
|
1035
|
+
usage: {
|
|
1036
|
+
inputTokens: {
|
|
1037
|
+
total: 0,
|
|
1038
|
+
noCache: undefined,
|
|
1039
|
+
cacheRead: undefined,
|
|
1040
|
+
cacheWrite: undefined
|
|
1041
|
+
},
|
|
1042
|
+
outputTokens: { total: 0, text: undefined, reasoning: undefined }
|
|
1043
|
+
}
|
|
1044
|
+
});
|
|
1045
|
+
controller.close();
|
|
1046
|
+
}
|
|
1047
|
+
}),
|
|
1048
|
+
request: { body: params }
|
|
1049
|
+
};
|
|
1050
|
+
}
|
|
1009
1051
|
handleApiError(error);
|
|
1010
1052
|
}
|
|
1011
1053
|
const stream = convertStream(anthropicStream, this.modelId);
|
package/build/model.d.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3GenerateResult, LanguageModelV3StreamResult } from "@ai-sdk/provider";
|
|
2
2
|
import type Anthropic from "@anthropic-ai/sdk";
|
|
3
|
-
type DoGenerateResult =
|
|
4
|
-
type DoStreamResult =
|
|
5
|
-
export declare class AnthropicSDKModel implements
|
|
3
|
+
type DoGenerateResult = LanguageModelV3GenerateResult;
|
|
4
|
+
type DoStreamResult = LanguageModelV3StreamResult;
|
|
5
|
+
export declare class AnthropicSDKModel implements LanguageModelV3 {
|
|
6
6
|
private client;
|
|
7
7
|
private providerName;
|
|
8
8
|
private isOAuth;
|
|
9
|
-
readonly specificationVersion: "
|
|
9
|
+
readonly specificationVersion: "v3";
|
|
10
10
|
readonly provider: string;
|
|
11
11
|
readonly modelId: string;
|
|
12
12
|
readonly supportedUrls: Record<string, RegExp[]>;
|
|
13
13
|
constructor(modelId: string, client: Anthropic, providerName: string, isOAuth?: boolean);
|
|
14
14
|
private buildParams;
|
|
15
|
-
doGenerate(options:
|
|
16
|
-
doStream(options:
|
|
15
|
+
doGenerate(options: LanguageModelV3CallOptions): Promise<DoGenerateResult>;
|
|
16
|
+
doStream(options: LanguageModelV3CallOptions): Promise<DoStreamResult>;
|
|
17
17
|
}
|
|
18
18
|
export {};
|
|
19
19
|
//# sourceMappingURL=model.d.ts.map
|
package/build/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,0BAA0B,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,0BAA0B,EAI1B,6BAA6B,EAC7B,2BAA2B,EAE5B,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAU9C,KAAK,gBAAgB,GAAG,6BAA6B,CAAA;AACrD,KAAK,cAAc,GAAG,2BAA2B,CAAA;AAwLjD,qBAAa,iBAAkB,YAAW,eAAe;IAQrD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,OAAO;IATjB,QAAQ,CAAC,oBAAoB,EAAG,IAAI,CAAS;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAK;gBAGnD,OAAO,EAAE,MAAM,EACP,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,OAAe;IAMlC,OAAO,CAAC,WAAW;IA2Lb,UAAU,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuF1E,QAAQ,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,cAAc,CAAC;CA6E7E"}
|
package/build/prompt.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LanguageModelV3Prompt } from "@ai-sdk/provider";
|
|
2
2
|
import type Anthropic from "@anthropic-ai/sdk";
|
|
3
3
|
type AnthropicMessage = Anthropic.MessageCreateParams["messages"][number];
|
|
4
4
|
type AnthropicSystemParam = Anthropic.MessageCreateParams["system"];
|
|
@@ -6,6 +6,6 @@ export interface ConvertedPrompt {
|
|
|
6
6
|
system: AnthropicSystemParam;
|
|
7
7
|
messages: AnthropicMessage[];
|
|
8
8
|
}
|
|
9
|
-
export declare function convertPrompt(prompt:
|
|
9
|
+
export declare function convertPrompt(prompt: LanguageModelV3Prompt): ConvertedPrompt;
|
|
10
10
|
export {};
|
|
11
11
|
//# sourceMappingURL=prompt.d.ts.map
|
package/build/prompt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAA0B,MAAM,kBAAkB,CAAA;AACrF,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAG9C,KAAK,gBAAgB,GAAG,SAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAEzE,KAAK,oBAAoB,GAAG,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAA;AAEnE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,oBAAoB,CAAA;IAC5B,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAA0B,MAAM,kBAAkB,CAAA;AACrF,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAG9C,KAAK,gBAAgB,GAAG,SAAS,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAEzE,KAAK,oBAAoB,GAAG,SAAS,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAA;AAEnE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,oBAAoB,CAAA;IAC5B,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,CAiC5E"}
|
package/build/stream.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LanguageModelV3StreamPart } from "@ai-sdk/provider";
|
|
2
2
|
import type Anthropic from "@anthropic-ai/sdk";
|
|
3
3
|
type MessageStreamEvent = Anthropic.MessageStreamEvent;
|
|
4
|
-
export declare function convertStream(anthropicStream: AsyncIterable<MessageStreamEvent>, modelId: string): ReadableStream<
|
|
4
|
+
export declare function convertStream(anthropicStream: AsyncIterable<MessageStreamEvent>, modelId: string): ReadableStream<LanguageModelV3StreamPart>;
|
|
5
5
|
export {};
|
|
6
6
|
//# sourceMappingURL=stream.d.ts.map
|
package/build/stream.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAA+B,MAAM,kBAAkB,CAAA;AAC9F,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAG9C,KAAK,kBAAkB,GAAG,SAAS,CAAC,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAA+B,MAAM,kBAAkB,CAAA;AAC9F,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAG9C,KAAK,kBAAkB,GAAG,SAAS,CAAC,kBAAkB,CAAA;AAmCtD,wBAAgB,aAAa,CAC3B,eAAe,EAAE,aAAa,CAAC,kBAAkB,CAAC,EAClD,OAAO,EAAE,MAAM,GACd,cAAc,CAAC,yBAAyB,CAAC,CAwD3C"}
|
package/build/tools.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LanguageModelV3FunctionTool, LanguageModelV3ProviderTool, LanguageModelV3ToolChoice } from "@ai-sdk/provider";
|
|
2
2
|
import type Anthropic from "@anthropic-ai/sdk";
|
|
3
3
|
type AnthropicTool = Anthropic.Tool;
|
|
4
4
|
type AnthropicToolChoice = Anthropic.MessageCreateParams["tool_choice"];
|
|
5
|
-
export declare function convertTools(tools: Array<
|
|
6
|
-
export declare function convertToolChoice(toolChoice:
|
|
5
|
+
export declare function convertTools(tools: Array<LanguageModelV3FunctionTool | LanguageModelV3ProviderTool> | undefined): AnthropicTool[] | undefined;
|
|
6
|
+
export declare function convertToolChoice(toolChoice: LanguageModelV3ToolChoice | undefined): AnthropicToolChoice | undefined;
|
|
7
7
|
export {};
|
|
8
8
|
//# sourceMappingURL=tools.d.ts.map
|
package/build/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,EAC1B,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAA;AAG9C,KAAK,aAAa,GAAG,SAAS,CAAC,IAAI,CAAA;AACnC,KAAK,mBAAmB,GAAG,SAAS,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAA;AAwBvE,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,CAAC,2BAA2B,GAAG,2BAA2B,CAAC,GAAG,SAAS,GAClF,aAAa,EAAE,GAAG,SAAS,CAY7B;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,yBAAyB,GAAG,SAAS,GAChD,mBAAmB,GAAG,SAAS,CAcjC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xtruder/opencode-claude-max-plugin",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"description": "OpenCode plugin for Claude Max/Pro subscription via @anthropic-ai/sdk - uses Claude Code OAuth credentials",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-sdk",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"@anthropic-ai/sdk": "0.74.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@ai-sdk/provider": "
|
|
40
|
+
"@ai-sdk/provider": "3.0.8",
|
|
41
41
|
"@ai-sdk/provider-utils": "3.0.2",
|
|
42
42
|
"@opencode-ai/plugin": "^1.3.0",
|
|
43
43
|
"ai": "5.0.124",
|