@moxxy/plugin-provider-anthropic 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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import type { ProviderMessage, ToolDef } from '@moxxy/sdk';
2
+ type CacheControl = {
3
+ type: 'ephemeral';
4
+ };
5
+ export interface AnthropicMessageInput {
6
+ role: 'user' | 'assistant';
7
+ content: Array<AnthropicContentBlock>;
8
+ }
9
+ export type AnthropicContentBlock = {
10
+ type: 'text';
11
+ text: string;
12
+ cache_control?: CacheControl;
13
+ } | {
14
+ type: 'tool_use';
15
+ id: string;
16
+ name: string;
17
+ input: unknown;
18
+ cache_control?: CacheControl;
19
+ } | {
20
+ type: 'tool_result';
21
+ tool_use_id: string;
22
+ content: string;
23
+ is_error?: boolean;
24
+ cache_control?: CacheControl;
25
+ } | {
26
+ type: 'image';
27
+ source: {
28
+ type: 'base64';
29
+ media_type: string;
30
+ data: string;
31
+ };
32
+ cache_control?: CacheControl;
33
+ } | {
34
+ type: 'document';
35
+ source: {
36
+ type: 'base64';
37
+ media_type: string;
38
+ data: string;
39
+ };
40
+ title?: string;
41
+ cache_control?: CacheControl;
42
+ } | {
43
+ type: 'thinking';
44
+ thinking: string;
45
+ signature: string;
46
+ cache_control?: CacheControl;
47
+ } | {
48
+ type: 'redacted_thinking';
49
+ data: string;
50
+ cache_control?: CacheControl;
51
+ };
52
+ export interface AnthropicToolDef {
53
+ name: string;
54
+ description: string;
55
+ input_schema: unknown;
56
+ cache_control?: CacheControl;
57
+ }
58
+ export interface ToAnthropicMessagesOptions {
59
+ /**
60
+ * Indices (into the input `messages` array) after which a prompt-cache
61
+ * breakpoint should be placed. The marker lands on the last Anthropic
62
+ * content block produced for that source message.
63
+ */
64
+ readonly cacheMessageIndices?: ReadonlySet<number>;
65
+ }
66
+ export declare function toAnthropicMessages(messages: ReadonlyArray<ProviderMessage>, opts?: ToAnthropicMessagesOptions): {
67
+ system: string | undefined;
68
+ messages: AnthropicMessageInput[];
69
+ };
70
+ export interface ToAnthropicToolsOptions {
71
+ /** Place a cache breakpoint on the last tool, caching the whole tools array. */
72
+ readonly cacheLast?: boolean;
73
+ }
74
+ export declare function toAnthropicTools(tools: ReadonlyArray<ToolDef>, opts?: ToAnthropicToolsOptions): AnthropicToolDef[];
75
+ export {};
76
+ //# sourceMappingURL=translate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translate.d.ts","sourceRoot":"","sources":["../src/translate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGzE,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1C,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;CACvC;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,YAAY,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,YAAY,CAAA;CAAE,GAC5F;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,GAID;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,YAAY,CAAA;CAAE,GACvF;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpD;AAMD,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,EACxC,IAAI,GAAE,0BAA+B,GACpC;IACD,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC,CA4DA;AAoDD,MAAM,WAAW,uBAAuB;IACtC,gFAAgF;IAChF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,EAC7B,IAAI,GAAE,uBAA4B,GACjC,gBAAgB,EAAE,CAUpB"}
@@ -0,0 +1,125 @@
1
+ import { zodToJsonSchema } from '@moxxy/sdk';
2
+ function markCache(block) {
3
+ if (block)
4
+ block.cache_control = { type: 'ephemeral' };
5
+ }
6
+ export function toAnthropicMessages(messages, opts = {}) {
7
+ const cacheIdx = opts.cacheMessageIndices;
8
+ let system;
9
+ const out = [];
10
+ let pendingUserBlocks = null;
11
+ const flushUser = () => {
12
+ if (pendingUserBlocks) {
13
+ out.push({ role: 'user', content: pendingUserBlocks });
14
+ pendingUserBlocks = null;
15
+ }
16
+ };
17
+ messages.forEach((msg, i) => {
18
+ const wantCache = cacheIdx?.has(i) ?? false;
19
+ if (msg.role === 'system') {
20
+ const textBlock = msg.content.find((c) => c.type === 'text');
21
+ if (textBlock && textBlock.type === 'text') {
22
+ system = system ? `${system}\n\n${textBlock.text}` : textBlock.text;
23
+ }
24
+ return;
25
+ }
26
+ if (msg.role === 'user') {
27
+ flushUser();
28
+ const content = msg.content.map(toAnthropicBlock);
29
+ if (wantCache)
30
+ markCache(content[content.length - 1]);
31
+ out.push({ role: 'user', content });
32
+ return;
33
+ }
34
+ if (msg.role === 'assistant') {
35
+ flushUser();
36
+ const content = msg.content.map(toAnthropicBlock);
37
+ if (wantCache)
38
+ markCache(content[content.length - 1]);
39
+ out.push({ role: 'assistant', content });
40
+ return;
41
+ }
42
+ if (msg.role === 'tool_result') {
43
+ // Tool results are merged into a user message with tool_result content blocks
44
+ pendingUserBlocks ??= [];
45
+ for (const block of msg.content) {
46
+ if (block.type === 'tool_result') {
47
+ pendingUserBlocks.push({
48
+ type: 'tool_result',
49
+ tool_use_id: block.toolUseId,
50
+ content: block.content,
51
+ is_error: block.isError,
52
+ });
53
+ }
54
+ }
55
+ // Breakpoint after a tool-result source message lands on the last block
56
+ // appended for it. Caching up to a mid-message block is valid (it just
57
+ // defines the prefix boundary), so merging doesn't break this.
58
+ if (wantCache)
59
+ markCache(pendingUserBlocks[pendingUserBlocks.length - 1]);
60
+ }
61
+ });
62
+ flushUser();
63
+ return { system, messages: out };
64
+ }
65
+ function toAnthropicBlock(block) {
66
+ switch (block.type) {
67
+ case 'text':
68
+ return { type: 'text', text: block.text };
69
+ case 'tool_use':
70
+ return { type: 'tool_use', id: block.id, name: block.name, input: block.input };
71
+ case 'tool_result':
72
+ return {
73
+ type: 'tool_result',
74
+ tool_use_id: block.toolUseId,
75
+ content: block.content,
76
+ is_error: block.isError,
77
+ };
78
+ case 'image':
79
+ return {
80
+ type: 'image',
81
+ source: { type: 'base64', media_type: block.mediaType, data: block.data },
82
+ };
83
+ case 'document':
84
+ // Native document support (PDF). Claude reads text + figures/layout.
85
+ return {
86
+ type: 'document',
87
+ source: { type: 'base64', media_type: block.mediaType, data: block.data },
88
+ ...(block.name ? { title: block.name } : {}),
89
+ };
90
+ case 'audio':
91
+ // Anthropic's Messages API does not accept native audio yet. Channels
92
+ // are supposed to transcribe up-front when the active model lacks
93
+ // `supportsAudio`; if an audio block reaches the translator anyway
94
+ // (e.g. a resumed session originally captured on a different
95
+ // provider), degrade to a text placeholder rather than throwing.
96
+ return {
97
+ type: 'text',
98
+ text: `[audio attachment dropped: ${block.mediaType} not supported by this model]`,
99
+ };
100
+ case 'reasoning':
101
+ // Replayed verbatim so Anthropic accepts an interleaved-thinking tool-use
102
+ // continuation. `redacted` → the opaque encrypted blob; otherwise the
103
+ // signed thinking block (projection only forwards reasoning that carries a
104
+ // signature or encrypted blob, so the text fallback below is unreachable).
105
+ if (block.redacted && block.encrypted) {
106
+ return { type: 'redacted_thinking', data: block.encrypted };
107
+ }
108
+ if (block.signature) {
109
+ return { type: 'thinking', thinking: block.text, signature: block.signature };
110
+ }
111
+ return { type: 'text', text: block.text };
112
+ }
113
+ }
114
+ export function toAnthropicTools(tools, opts = {}) {
115
+ const out = tools.map((t) => ({
116
+ name: t.name,
117
+ description: t.description,
118
+ input_schema: t.inputJsonSchema ?? zodToJsonSchema(t.inputSchema),
119
+ }));
120
+ if (opts.cacheLast && out.length > 0) {
121
+ out[out.length - 1].cache_control = { type: 'ephemeral' };
122
+ }
123
+ return out;
124
+ }
125
+ //# sourceMappingURL=translate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translate.js","sourceRoot":"","sources":["../src/translate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export type ValidationResult = {
2
+ ok: true;
3
+ } | {
4
+ ok: false;
5
+ message: string;
6
+ };
7
+ export interface ValidateKeyDeps {
8
+ /** Inject the Anthropic SDK constructor for tests. */
9
+ readonly client?: (apiKey: string) => {
10
+ messages: {
11
+ create: (args: Record<string, unknown>) => Promise<unknown>;
12
+ };
13
+ };
14
+ readonly model?: string;
15
+ }
16
+ /**
17
+ * "Is this key accepted by Anthropic?" Issues a 1-token completion — effectively
18
+ * free. Returns ok or a useful error message.
19
+ */
20
+ export declare function validateKey(key: string, deps?: ValidateKeyDeps): Promise<ValidationResult>;
21
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK;QACpC,QAAQ,EAAE;YAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;SAAE,CAAC;KAC3E,CAAC;IACF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgBpG"}
@@ -0,0 +1,27 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ /**
3
+ * "Is this key accepted by Anthropic?" Issues a 1-token completion — effectively
4
+ * free. Returns ok or a useful error message.
5
+ */
6
+ export async function validateKey(key, deps = {}) {
7
+ if (!key || key.trim().length < 8) {
8
+ return { ok: false, message: 'key looks too short' };
9
+ }
10
+ const make = deps.client ?? defaultMaker;
11
+ try {
12
+ const client = make(key);
13
+ await client.messages.create({
14
+ model: deps.model ?? 'claude-haiku-4-5-20251001',
15
+ max_tokens: 1,
16
+ messages: [{ role: 'user', content: 'ping' }],
17
+ });
18
+ return { ok: true };
19
+ }
20
+ catch (err) {
21
+ return { ok: false, message: err instanceof Error ? err.message : String(err) };
22
+ }
23
+ }
24
+ function defaultMaker(apiKey) {
25
+ return new Anthropic({ apiKey });
26
+ }
27
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAY1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,OAAwB,EAAE;IACvE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,2BAA2B;YAChD,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;SAC9C,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAClF,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAE9B,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@moxxy/plugin-provider-anthropic",
3
+ "version": "0.2.0",
4
+ "description": "Anthropic (Claude) LLMProvider plugin for moxxy. Streams the Messages API with tool use + adaptive thinking; translates moxxy ProviderRequest/Event ↔ the Anthropic wire shape. Register it into an @moxxy/core Session to route turns to Claude models.",
5
+ "keywords": [
6
+ "moxxy",
7
+ "agent",
8
+ "provider",
9
+ "anthropic",
10
+ "claude",
11
+ "llm"
12
+ ],
13
+ "homepage": "https://moxxy.ai",
14
+ "bugs": {
15
+ "url": "https://github.com/moxxy-ai/moxxy/issues"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/moxxy-ai/moxxy.git",
20
+ "directory": "packages/plugin-provider-anthropic"
21
+ },
22
+ "author": "Michal Makowski <michal.makowski97@gmail.com>",
23
+ "license": "MIT",
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "type": "module",
28
+ "main": "./dist/index.js",
29
+ "types": "./dist/index.d.ts",
30
+ "exports": {
31
+ ".": {
32
+ "types": "./dist/index.d.ts",
33
+ "import": "./dist/index.js"
34
+ }
35
+ },
36
+ "files": [
37
+ "dist",
38
+ "src"
39
+ ],
40
+ "moxxy": {
41
+ "plugin": {
42
+ "entry": "./dist/index.js",
43
+ "kind": "provider"
44
+ }
45
+ },
46
+ "dependencies": {
47
+ "@anthropic-ai/sdk": "^0.40.0",
48
+ "@moxxy/sdk": "0.15.0"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^22.10.0",
52
+ "typescript": "^5.7.3",
53
+ "vitest": "^2.1.8",
54
+ "zod": "^3.24.0",
55
+ "@moxxy/mode-default": "0.1.0",
56
+ "@moxxy/tsconfig": "0.0.0",
57
+ "@moxxy/vitest-preset": "0.0.0",
58
+ "@moxxy/core": "0.3.0"
59
+ },
60
+ "scripts": {
61
+ "build": "tsc -p tsconfig.json",
62
+ "typecheck": "tsc -p tsconfig.json --noEmit",
63
+ "test": "vitest run",
64
+ "test:watch": "vitest",
65
+ "clean": "rm -rf dist .turbo"
66
+ }
67
+ }
package/src/index.ts ADDED
@@ -0,0 +1,24 @@
1
+ import { defineProvider, definePlugin } from '@moxxy/sdk';
2
+ import { AnthropicProvider, anthropicModels, type AnthropicProviderConfig } from './provider.js';
3
+
4
+ export { AnthropicProvider, anthropicModels };
5
+ export type { AnthropicProviderConfig };
6
+ export { toAnthropicMessages, toAnthropicTools } from './translate.js';
7
+ export { validateKey, type ValidateKeyDeps, type ValidationResult } from './validate.js';
8
+
9
+ import { validateKey as validateAnthropicKey } from './validate.js';
10
+
11
+ export const anthropicProviderDef = defineProvider({
12
+ name: 'anthropic',
13
+ models: [...anthropicModels],
14
+ createClient: (config) => new AnthropicProvider(config as AnthropicProviderConfig),
15
+ validateKey: (key) => validateAnthropicKey(key),
16
+ });
17
+
18
+ export const anthropicPlugin = definePlugin({
19
+ name: '@moxxy/plugin-provider-anthropic',
20
+ version: '0.0.0',
21
+ providers: [anthropicProviderDef],
22
+ });
23
+
24
+ export default anthropicPlugin;
@@ -0,0 +1,151 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import type Anthropic from '@anthropic-ai/sdk';
3
+ import type { ProviderEvent } from '@moxxy/sdk';
4
+ import { AnthropicProvider } from './provider.js';
5
+
6
+ /** Build a fake Anthropic SDK client that records `messages.stream` args. */
7
+ function fakeClient(events: ReadonlyArray<unknown>): {
8
+ client: Anthropic;
9
+ calls: Array<{ system?: unknown; messages?: unknown }>;
10
+ } {
11
+ const calls: Array<{ system?: unknown; messages?: unknown }> = [];
12
+ const client = {
13
+ messages: {
14
+ stream: (args: { system?: unknown; messages?: unknown }) => {
15
+ calls.push(args);
16
+ return (async function* () {
17
+ for (const e of events) yield e;
18
+ })();
19
+ },
20
+ },
21
+ } as unknown as Anthropic;
22
+ return { client, calls };
23
+ }
24
+
25
+ const DONE_EVENTS = [
26
+ { type: 'message_start', message: { usage: { input_tokens: 1, output_tokens: 0 } } },
27
+ { type: 'message_delta', delta: { stop_reason: 'end_turn' }, usage: { output_tokens: 2 } },
28
+ { type: 'message_stop' },
29
+ ];
30
+
31
+ async function drain(it: AsyncIterable<ProviderEvent>): Promise<ProviderEvent[]> {
32
+ const out: ProviderEvent[] = [];
33
+ for await (const e of it) out.push(e);
34
+ return out;
35
+ }
36
+
37
+ describe('AnthropicProvider OAuth mode', () => {
38
+ it('authenticates with a bearer token and suppresses the api key', () => {
39
+ const p = new AnthropicProvider({ oauthToken: 'tok-123', oauthBeta: ['oauth-2025-04-20'] });
40
+ const client = (p as unknown as { client: { apiKey: unknown; authToken: unknown } }).client;
41
+ // apiKey null => SDK omits x-api-key; authToken => Authorization: Bearer.
42
+ expect(client.apiKey).toBeNull();
43
+ expect(client.authToken).toBe('tok-123');
44
+ expect(p.name).toBe('anthropic');
45
+ });
46
+
47
+ it('honours a provider name override', () => {
48
+ const p = new AnthropicProvider({ oauthToken: 't', name: 'claude-code' });
49
+ expect(p.name).toBe('claude-code');
50
+ });
51
+
52
+ it('prepends the system preamble as the FIRST system block', async () => {
53
+ const { client, calls } = fakeClient(DONE_EVENTS);
54
+ const p = new AnthropicProvider({
55
+ oauthToken: 'tok',
56
+ systemPreamble: "You are Claude Code, Anthropic's official CLI for Claude.",
57
+ client,
58
+ });
59
+ const out = await drain(
60
+ p.stream({
61
+ model: 'claude-x',
62
+ messages: [
63
+ { role: 'system', content: [{ type: 'text', text: 'REAL SYSTEM' }] },
64
+ { role: 'user', content: [{ type: 'text', text: 'hi' }] },
65
+ ],
66
+ }),
67
+ );
68
+
69
+ const sys = calls[0]!.system as Array<{ type: string; text: string }>;
70
+ expect(Array.isArray(sys)).toBe(true);
71
+ expect(sys[0]).toEqual({
72
+ type: 'text',
73
+ text: "You are Claude Code, Anthropic's official CLI for Claude.",
74
+ });
75
+ expect(sys[1]!.text).toBe('REAL SYSTEM');
76
+ expect(out.at(-1)).toMatchObject({ type: 'message_end', stopReason: 'end_turn' });
77
+ });
78
+
79
+ it('apiKey mode is unchanged: system stays a bare string', async () => {
80
+ const { client, calls } = fakeClient([{ type: 'message_stop' }]);
81
+ const p = new AnthropicProvider({ apiKey: 'sk-test', client });
82
+ await drain(
83
+ p.stream({
84
+ model: 'm',
85
+ messages: [
86
+ { role: 'system', content: [{ type: 'text', text: 'REAL' }] },
87
+ { role: 'user', content: [{ type: 'text', text: 'hi' }] },
88
+ ],
89
+ }),
90
+ );
91
+ expect(calls[0]!.system).toBe('REAL');
92
+ });
93
+
94
+ it('delivers hook-injected req.system as an extra system block after the prompt', async () => {
95
+ const { client, calls } = fakeClient([{ type: 'message_stop' }]);
96
+ const p = new AnthropicProvider({ apiKey: 'sk-test', client });
97
+ await drain(
98
+ p.stream({
99
+ model: 'm',
100
+ system: '[memory note] consider consolidating',
101
+ messages: [
102
+ { role: 'system', content: [{ type: 'text', text: 'BASE PROMPT' }] },
103
+ { role: 'user', content: [{ type: 'text', text: 'hi' }] },
104
+ ],
105
+ }),
106
+ );
107
+ const sys = calls[0]!.system as Array<{ type: string; text: string }>;
108
+ expect(Array.isArray(sys)).toBe(true);
109
+ expect(sys.map((b) => b.text)).toEqual(['BASE PROMPT', '[memory note] consider consolidating']);
110
+ });
111
+
112
+ it('keeps the system cache breakpoint on the stable block, not the injected tail', async () => {
113
+ const { client, calls } = fakeClient([{ type: 'message_stop' }]);
114
+ const p = new AnthropicProvider({ apiKey: 'sk-test', client });
115
+ await drain(
116
+ p.stream({
117
+ model: 'm',
118
+ system: 'VOLATILE NUDGE',
119
+ cacheHints: [{ target: 'system' }],
120
+ messages: [
121
+ { role: 'system', content: [{ type: 'text', text: 'BASE PROMPT' }] },
122
+ { role: 'user', content: [{ type: 'text', text: 'hi' }] },
123
+ ],
124
+ }),
125
+ );
126
+ const sys = calls[0]!.system as Array<{ type: string; text: string; cache_control?: unknown }>;
127
+ expect(sys[0]).toEqual({ type: 'text', text: 'BASE PROMPT', cache_control: { type: 'ephemeral' } });
128
+ expect(sys[1]).toEqual({ type: 'text', text: 'VOLATILE NUDGE' });
129
+ });
130
+
131
+ it('OAuth mode appends req.system after the preamble + real system prompt', async () => {
132
+ const { client, calls } = fakeClient(DONE_EVENTS);
133
+ const p = new AnthropicProvider({
134
+ oauthToken: 'tok',
135
+ systemPreamble: 'PREAMBLE',
136
+ client,
137
+ });
138
+ await drain(
139
+ p.stream({
140
+ model: 'm',
141
+ system: 'NUDGE',
142
+ messages: [
143
+ { role: 'system', content: [{ type: 'text', text: 'REAL SYSTEM' }] },
144
+ { role: 'user', content: [{ type: 'text', text: 'hi' }] },
145
+ ],
146
+ }),
147
+ );
148
+ const sys = calls[0]!.system as Array<{ type: string; text: string }>;
149
+ expect(sys.map((b) => b.text)).toEqual(['PREAMBLE', 'REAL SYSTEM', 'NUDGE']);
150
+ });
151
+ });