@vibesdotdev/integrations-anthropic 0.0.0-stage → 1.0.0-rc.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.
Files changed (150) hide show
  1. package/LICENSE +126 -0
  2. package/README.md +57 -2
  3. package/dist/ai/anthropic-router-codec.d.ts +32 -0
  4. package/dist/ai/anthropic-router-codec.d.ts.map +1 -0
  5. package/dist/ai/anthropic-router-codec.js +321 -0
  6. package/dist/ai/anthropic-router-codec.js.map +1 -0
  7. package/dist/ai/anthropic.plugin.d.ts +6 -0
  8. package/dist/ai/anthropic.plugin.d.ts.map +1 -0
  9. package/dist/ai/anthropic.plugin.js +116 -0
  10. package/dist/ai/anthropic.plugin.js.map +1 -0
  11. package/dist/ai/catalog.d.ts +87 -0
  12. package/dist/ai/catalog.d.ts.map +1 -0
  13. package/dist/ai/catalog.js +64 -0
  14. package/dist/ai/catalog.js.map +1 -0
  15. package/dist/ai/claude-code-session.d.ts +56 -0
  16. package/dist/ai/claude-code-session.d.ts.map +1 -0
  17. package/dist/ai/claude-code-session.js +75 -0
  18. package/dist/ai/claude-code-session.js.map +1 -0
  19. package/dist/ai/claude-code-turn-env.d.ts +10 -0
  20. package/dist/ai/claude-code-turn-env.d.ts.map +1 -0
  21. package/dist/ai/claude-code-turn-env.js +19 -0
  22. package/dist/ai/claude-code-turn-env.js.map +1 -0
  23. package/dist/ai/hostile.d.ts +23 -0
  24. package/dist/ai/hostile.d.ts.map +1 -0
  25. package/dist/ai/hostile.js +22 -0
  26. package/dist/ai/hostile.js.map +1 -0
  27. package/dist/ai/index.d.ts +4 -0
  28. package/dist/ai/index.d.ts.map +1 -0
  29. package/dist/ai/index.js +4 -0
  30. package/dist/ai/index.js.map +1 -0
  31. package/dist/ai/metadata/assets/logos/providers/anthropic.svg +1 -0
  32. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-3-5-haiku-20241022.json +77 -0
  33. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-3-5-sonnet-20241022.json +42 -0
  34. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-4-opus-20250514.json +79 -0
  35. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-4-sonnet-20250514.json +79 -0
  36. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-haiku-4-5.json +80 -0
  37. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-haiku-5-5.json +39 -0
  38. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-1.json +78 -0
  39. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-5.json +80 -0
  40. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-6.json +80 -0
  41. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-7.json +81 -0
  42. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-sonnet-4-5.json +80 -0
  43. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-sonnet-4-6.json +80 -0
  44. package/dist/ai/metadata/providers/anthropic.json +22 -0
  45. package/dist/ai/providers/anthropic/anthropic.provider.impl.d.ts +62 -0
  46. package/dist/ai/providers/anthropic/anthropic.provider.impl.d.ts.map +1 -0
  47. package/dist/ai/providers/anthropic/anthropic.provider.impl.js +430 -0
  48. package/dist/ai/providers/anthropic/anthropic.provider.impl.js.map +1 -0
  49. package/dist/ai/providers/anthropic/detection/index.d.ts +8 -0
  50. package/dist/ai/providers/anthropic/detection/index.d.ts.map +1 -0
  51. package/dist/ai/providers/anthropic/detection/index.js +8 -0
  52. package/dist/ai/providers/anthropic/detection/index.js.map +1 -0
  53. package/dist/ai/providers/anthropic/detection/system.d.ts +12 -0
  54. package/dist/ai/providers/anthropic/detection/system.d.ts.map +1 -0
  55. package/dist/ai/providers/anthropic/detection/system.js +34 -0
  56. package/dist/ai/providers/anthropic/detection/system.js.map +1 -0
  57. package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.d.ts +4 -0
  58. package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.d.ts.map +1 -0
  59. package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.js +212 -0
  60. package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.js.map +1 -0
  61. package/dist/ai/providers/anthropic/index.d.ts +4 -0
  62. package/dist/ai/providers/anthropic/index.d.ts.map +1 -0
  63. package/dist/ai/providers/anthropic/index.js +4 -0
  64. package/dist/ai/providers/anthropic/index.js.map +1 -0
  65. package/dist/ai/providers/anthropic/recommendations.d.ts +24 -0
  66. package/dist/ai/providers/anthropic/recommendations.d.ts.map +1 -0
  67. package/dist/ai/providers/anthropic/recommendations.js +192 -0
  68. package/dist/ai/providers/anthropic/recommendations.js.map +1 -0
  69. package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.d.ts +4194 -0
  70. package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.d.ts.map +1 -0
  71. package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.js +52 -0
  72. package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.js.map +1 -0
  73. package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.d.ts +46 -0
  74. package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.d.ts.map +1 -0
  75. package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.js +22 -0
  76. package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.js.map +1 -0
  77. package/dist/ai/providers/cloud/frontier/anthropic/index.d.ts +5 -0
  78. package/dist/ai/providers/cloud/frontier/anthropic/index.d.ts.map +1 -0
  79. package/dist/ai/providers/cloud/frontier/anthropic/index.js +4 -0
  80. package/dist/ai/providers/cloud/frontier/anthropic/index.js.map +1 -0
  81. package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.d.ts +183 -0
  82. package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.d.ts.map +1 -0
  83. package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.js +115 -0
  84. package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.js.map +1 -0
  85. package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.d.ts +46 -0
  86. package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.d.ts.map +1 -0
  87. package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.js +183 -0
  88. package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.js.map +1 -0
  89. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.d.ts +34 -0
  90. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.d.ts.map +1 -0
  91. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.js +29 -0
  92. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.js.map +1 -0
  93. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.d.ts +48 -0
  94. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.d.ts.map +1 -0
  95. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.js +557 -0
  96. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.js.map +1 -0
  97. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.d.ts +26 -0
  98. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.d.ts.map +1 -0
  99. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.js +15 -0
  100. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.js.map +1 -0
  101. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.d.ts +35 -0
  102. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.d.ts.map +1 -0
  103. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.js +210 -0
  104. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.js.map +1 -0
  105. package/dist/external/acp-server.consumer.plugin.d.ts +3 -0
  106. package/dist/external/acp-server.consumer.plugin.d.ts.map +1 -0
  107. package/dist/external/acp-server.consumer.plugin.js +29 -0
  108. package/dist/external/acp-server.consumer.plugin.js.map +1 -0
  109. package/dist/external/acp-server.d.ts +19 -0
  110. package/dist/external/acp-server.d.ts.map +1 -0
  111. package/dist/external/acp-server.js +198 -0
  112. package/dist/external/acp-server.js.map +1 -0
  113. package/dist/external/claude-code-hooks.d.ts +51 -0
  114. package/dist/external/claude-code-hooks.d.ts.map +1 -0
  115. package/dist/external/claude-code-hooks.js +252 -0
  116. package/dist/external/claude-code-hooks.js.map +1 -0
  117. package/dist/external/claude-code-installer.d.ts +10 -0
  118. package/dist/external/claude-code-installer.d.ts.map +1 -0
  119. package/dist/external/claude-code-installer.js +604 -0
  120. package/dist/external/claude-code-installer.js.map +1 -0
  121. package/dist/external/claude-code-operations.d.ts +217 -0
  122. package/dist/external/claude-code-operations.d.ts.map +1 -0
  123. package/dist/external/claude-code-operations.js +101 -0
  124. package/dist/external/claude-code-operations.js.map +1 -0
  125. package/dist/external/claude-code-plugin.json +7 -0
  126. package/dist/external/claude-code-presets.d.ts +813 -0
  127. package/dist/external/claude-code-presets.d.ts.map +1 -0
  128. package/dist/external/claude-code-presets.js +157 -0
  129. package/dist/external/claude-code-presets.js.map +1 -0
  130. package/dist/external/claude-code.descriptor.d.ts +160 -0
  131. package/dist/external/claude-code.descriptor.d.ts.map +1 -0
  132. package/dist/external/claude-code.descriptor.js +5 -0
  133. package/dist/external/claude-code.descriptor.js.map +1 -0
  134. package/dist/external/claude-code.manifest.d.ts +5 -0
  135. package/dist/external/claude-code.manifest.d.ts.map +1 -0
  136. package/dist/external/claude-code.manifest.js +205 -0
  137. package/dist/external/claude-code.manifest.js.map +1 -0
  138. package/dist/external/external.plugin.d.ts +6 -0
  139. package/dist/external/external.plugin.d.ts.map +1 -0
  140. package/dist/external/external.plugin.js +56 -0
  141. package/dist/external/external.plugin.js.map +1 -0
  142. package/dist/external/index.d.ts +6 -0
  143. package/dist/external/index.d.ts.map +1 -0
  144. package/dist/external/index.js +6 -0
  145. package/dist/external/index.js.map +1 -0
  146. package/dist/index.d.ts +4 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/index.js +4 -0
  149. package/dist/index.js.map +1 -0
  150. package/package.json +108 -4
@@ -0,0 +1,557 @@
1
+ /**
2
+ * `spec-anthropic-messages` — Anthropic Messages dialect impl.
3
+ *
4
+ * Encodes `TextGenerationRequest` → `/v1/messages` JSON body.
5
+ * Decodes event-named SSE records (`message_start`, `content_block_start`,
6
+ * `content_block_delta`, `content_block_stop`, `message_delta`,
7
+ * `message_stop`) into `text-delta` / `tool-call-*` / `usage` / `result`
8
+ * events.
9
+ *
10
+ * A turn either completes or fails typed. An HTTP error chunk, a stream `error`
11
+ * event, a stream that ends before `message_stop`, a record or body that is not
12
+ * JSON, and tool arguments that are not a complete JSON object each yield one
13
+ * `error` event (a `CapabilityError`) and nothing after it: no `end` result, so
14
+ * no failure is ever a successful empty reply.
15
+ */
16
+ import * as z from 'zod/v4';
17
+ import { concatAll, isTextRequest, textResultEvent } from '@vibesdotdev/ai/specs/interfaces';
18
+ import { CapabilityError, CaughtFailureSchema, isCapabilityError } from '@vibesdotdev/kernel';
19
+ import descriptor from "./anthropic-messages.spec.descriptor.js";
20
+ import { MAX_RESPONSE_TEXT, MAX_TOOL_ARGUMENT_CHARS, MAX_TOOL_CALLS, invalidBody, invalidToolArguments, streamFailure, transportFailure, truncatedStream } from "./anthropic-messages.failures.js";
21
+ import { JsonObjectSchema } from '@vibesdotdev/kernel/schemas/json';
22
+ const DEFAULT_MAX_TOKENS = 16000;
23
+ // Stream fields of an unexpected type read as absent: a malformed field never
24
+ // aborts a response that is otherwise usable.
25
+ const optionalNumber = z.number().optional().catch(undefined);
26
+ const optionalString = z.string().optional().catch(undefined);
27
+ const EventTypeSchema = z.looseObject({ type: optionalString });
28
+ const MessageStartSchema = z.looseObject({
29
+ message: z
30
+ .looseObject({
31
+ usage: z
32
+ .looseObject({ input_tokens: optionalNumber, output_tokens: optionalNumber })
33
+ .optional()
34
+ .catch(undefined)
35
+ })
36
+ .optional()
37
+ .catch(undefined)
38
+ });
39
+ const MessageDeltaSchema = z.looseObject({
40
+ usage: z.looseObject({ output_tokens: optionalNumber }).optional().catch(undefined),
41
+ delta: z.looseObject({ stop_reason: optionalString }).optional().catch(undefined)
42
+ });
43
+ const ContentBlockStartSchema = z.looseObject({
44
+ index: optionalNumber,
45
+ content_block: z
46
+ .looseObject({ type: optionalString, id: optionalString, name: optionalString })
47
+ .optional()
48
+ .catch(undefined)
49
+ });
50
+ const ContentBlockDeltaSchema = z.looseObject({
51
+ index: optionalNumber,
52
+ delta: z
53
+ .looseObject({ type: optionalString, text: optionalString, partial_json: optionalString })
54
+ .optional()
55
+ .catch(undefined)
56
+ });
57
+ const ContentBlockStopSchema = z.looseObject({ index: optionalNumber });
58
+ const NonStreamingSchema = z.looseObject({
59
+ type: optionalString,
60
+ content: z
61
+ .array(z
62
+ .looseObject({
63
+ type: optionalString,
64
+ text: optionalString,
65
+ id: optionalString,
66
+ name: optionalString,
67
+ input: z.unknown().optional()
68
+ })
69
+ .catch({}))
70
+ .optional()
71
+ .catch(undefined),
72
+ usage: z
73
+ .looseObject({ input_tokens: optionalNumber, output_tokens: optionalNumber })
74
+ .optional()
75
+ .catch(undefined),
76
+ stop_reason: optionalString
77
+ });
78
+ const ToolArgumentsSchema = JsonObjectSchema;
79
+ /** Opus 4.7/4.8 and the Claude 5 family reject temperature/top_p/top_k with HTTP 400. */
80
+ function rejectsSamplingParams(wireModelId) {
81
+ return /claude-opus-4-[78]|claude-[a-z]+-5(?:[-.]|$)/.test(wireModelId);
82
+ }
83
+ /** Adaptive thinking exists from the 4.6 generation onward; older models take budget_tokens, which we do not emit. */
84
+ function supportsAdaptiveThinking(wireModelId) {
85
+ return /claude-(?:opus|sonnet)-4-[6-9]|claude-[a-z]+-5(?:[-.]|$)/.test(wireModelId);
86
+ }
87
+ function adaptiveEffort(wireModelId, reasoningEffort) {
88
+ if (!reasoningEffort || reasoningEffort === 'none')
89
+ return undefined;
90
+ if (!supportsAdaptiveThinking(wireModelId))
91
+ return undefined;
92
+ if (reasoningEffort === 'xhigh' || reasoningEffort === 'max')
93
+ return 'max';
94
+ if (reasoningEffort === 'low' || reasoningEffort === 'medium' || reasoningEffort === 'high')
95
+ return reasoningEffort;
96
+ return undefined;
97
+ }
98
+ class AnthropicMessagesSpec {
99
+ descriptor = descriptor;
100
+ encodeRequest(request, context) {
101
+ if (!isTextRequest(request)) {
102
+ throw new CapabilityError('spec-anthropic-messages only encodes text requests.', 'INVALID_INPUT', {
103
+ reason: 'unsupported-modality',
104
+ retryable: false
105
+ });
106
+ }
107
+ const { system, messages } = splitSystem(request.messages);
108
+ const body = {
109
+ model: context.wireModelId,
110
+ messages,
111
+ max_tokens: request.maxTokens ?? DEFAULT_MAX_TOKENS,
112
+ cache_control: { type: 'ephemeral' },
113
+ stream: request.streaming === true
114
+ };
115
+ if (system)
116
+ body.system = system;
117
+ if (!rejectsSamplingParams(context.wireModelId)) {
118
+ if (request.temperature !== undefined)
119
+ body.temperature = request.temperature;
120
+ if (request.topP !== undefined)
121
+ body.top_p = request.topP;
122
+ if (request.topK !== undefined)
123
+ body.top_k = request.topK;
124
+ }
125
+ const effort = adaptiveEffort(context.wireModelId, request.reasoningEffort);
126
+ if (effort) {
127
+ body.thinking = { type: 'adaptive' };
128
+ body.output_config = { effort };
129
+ }
130
+ if (request.stopSequences)
131
+ body.stop_sequences = request.stopSequences;
132
+ if (request.tools && request.tools.length > 0)
133
+ body.tools = encodeTools(request.tools);
134
+ // Anthropic accepts `tool_choice` only beside `tools`.
135
+ if (body.tools && request.toolChoice !== undefined) {
136
+ body.tool_choice = encodeToolChoice(request.toolChoice);
137
+ }
138
+ return {
139
+ method: 'POST',
140
+ // Spec contract: variant endpoints terminate at the version segment
141
+ // (e.g., 'https://api.anthropic.com/v1' or '{baseUrl}/anthropic/v1').
142
+ // The spec contributes the leaf path only.
143
+ path: '/messages',
144
+ headers: {
145
+ 'Content-Type': 'application/json',
146
+ Accept: request.streaming ? 'text/event-stream' : 'application/json',
147
+ 'anthropic-version': '2023-06-01'
148
+ },
149
+ body,
150
+ streaming: request.streaming === true
151
+ };
152
+ }
153
+ async *decodeResponse(chunks, request, context) {
154
+ const turn = new TurnState(context.secrets);
155
+ try {
156
+ for await (const chunk of chunks) {
157
+ if (chunk.kind === 'sse-record') {
158
+ yield* turn.acceptRecord(chunk.event, chunk.data);
159
+ }
160
+ else if (chunk.kind === 'bytes') {
161
+ turn.acceptBody(chunk.data);
162
+ }
163
+ else if (chunk.kind === 'error') {
164
+ // An error chunk is terminal: nothing after it, `end` included, becomes a result.
165
+ yield { kind: 'error', error: transportFailure(chunk.error, context) };
166
+ return;
167
+ }
168
+ else if (chunk.kind === 'end') {
169
+ const completed = turn.complete(request.streaming === true);
170
+ if (completed.usage) {
171
+ yield {
172
+ kind: 'usage',
173
+ tokensPrompt: completed.usage.tokensPrompt,
174
+ tokensCompletion: completed.usage.tokensCompletion,
175
+ finishReason: completed.usage.finishReason
176
+ };
177
+ }
178
+ const result = {
179
+ id: `${context.providerId}.${context.variantId}.${Date.now()}`,
180
+ timestamp: new Date(),
181
+ content: completed.content,
182
+ toolCalls: completed.toolCalls,
183
+ metadata: {
184
+ tokensPrompt: completed.usage?.tokensPrompt,
185
+ tokensCompletion: completed.usage?.tokensCompletion,
186
+ finishReason: completed.usage?.finishReason
187
+ }
188
+ };
189
+ yield textResultEvent(request, result);
190
+ return;
191
+ }
192
+ }
193
+ }
194
+ catch (thrown) {
195
+ const failure = CaughtFailureSchema.parse(thrown);
196
+ // A typed failure of this turn is the turn's one `error` event; anything else is not ours to name.
197
+ if (!isCapabilityError(failure))
198
+ throw thrown;
199
+ yield { kind: 'error', error: failure };
200
+ }
201
+ }
202
+ }
203
+ /**
204
+ * One turn's decoding state. Its methods throw a typed `CapabilityError` when
205
+ * the reply stops being a valid turn; the decoder turns that into the turn's
206
+ * single `error` event.
207
+ */
208
+ class TurnState {
209
+ secrets;
210
+ accumulated = '';
211
+ toolCalls = new Map();
212
+ usage;
213
+ sawMessageStop = false;
214
+ sawRecord = false;
215
+ bodyBytes = [];
216
+ bodyLength = 0;
217
+ /** `secrets`: the request's own credential values, removed by value from any provider text a failure keeps. */
218
+ constructor(secrets) {
219
+ this.secrets = secrets;
220
+ }
221
+ *acceptRecord(event, data) {
222
+ this.sawRecord = true;
223
+ const json = parseJson(data);
224
+ if (json.kind === 'invalid')
225
+ throw invalidBody('a stream record is not JSON');
226
+ const type = event ?? readType(json.value);
227
+ if (!type)
228
+ return;
229
+ switch (type) {
230
+ case 'message_start': {
231
+ const u = readMessageStartUsage(json.value);
232
+ if (u)
233
+ this.usage = { ...this.usage, ...u };
234
+ return;
235
+ }
236
+ case 'content_block_start': {
237
+ const block = readContentBlockStart(json.value);
238
+ if (block?.type !== 'tool_use')
239
+ return;
240
+ if (this.toolCalls.size >= MAX_TOOL_CALLS) {
241
+ throw invalidBody('too many tool calls', { limit: 'tool-calls' });
242
+ }
243
+ const id = block.id ?? `idx-${block.index}`;
244
+ this.toolCalls.set(block.index, { id, name: block.name ?? '', args: '' });
245
+ yield { kind: 'tool-call-start', id, name: block.name ?? '' };
246
+ return;
247
+ }
248
+ case 'content_block_delta': {
249
+ const delta = readContentBlockDelta(json.value);
250
+ if (!delta)
251
+ return;
252
+ if (delta.kind === 'text') {
253
+ if (this.accumulated.length + delta.text.length > MAX_RESPONSE_TEXT) {
254
+ throw invalidBody('the reply text is too large', { limit: 'text' });
255
+ }
256
+ this.accumulated += delta.text;
257
+ yield { kind: 'text-delta', delta: delta.text };
258
+ return;
259
+ }
260
+ const existing = this.toolCalls.get(delta.index);
261
+ // Arguments for a tool block that never started would be dropped, leaving a tool call that is missing.
262
+ if (!existing)
263
+ throw invalidBody('tool arguments arrived for a tool call that did not start');
264
+ if (existing.args.length + delta.partial.length > MAX_TOOL_ARGUMENT_CHARS) {
265
+ throw invalidBody('tool arguments are too large', { limit: 'tool-arguments' });
266
+ }
267
+ existing.args += delta.partial;
268
+ yield { kind: 'tool-call-arg-delta', id: existing.id, delta: delta.partial };
269
+ return;
270
+ }
271
+ case 'content_block_stop': {
272
+ const stop = readContentBlockStop(json.value);
273
+ const existing = stop ? this.toolCalls.get(stop.index) : undefined;
274
+ if (!existing)
275
+ return;
276
+ existing.arguments = parseToolArguments(existing.name, existing.args);
277
+ yield { kind: 'tool-call-end', id: existing.id };
278
+ return;
279
+ }
280
+ case 'message_delta': {
281
+ const u = readMessageDeltaUsage(json.value);
282
+ if (u)
283
+ this.usage = { ...this.usage, ...u };
284
+ return;
285
+ }
286
+ case 'message_stop':
287
+ this.sawMessageStop = true;
288
+ return;
289
+ case 'error':
290
+ throw streamFailure(json.value, this.secrets);
291
+ default:
292
+ // `ping` and event types this dialect has not defined yet carry nothing a turn needs.
293
+ return;
294
+ }
295
+ }
296
+ /** A buffered (non-streaming) body arrives as bytes; it is parsed once, at the end. */
297
+ acceptBody(data) {
298
+ this.bodyLength += data.length;
299
+ if (this.bodyLength > MAX_RESPONSE_TEXT)
300
+ throw invalidBody('the reply is too large', { limit: 'body' });
301
+ this.bodyBytes.push(data);
302
+ }
303
+ complete(streaming) {
304
+ if (this.bodyBytes.length > 0)
305
+ return this.completeBody();
306
+ if (!this.sawRecord) {
307
+ // Nothing at all arrived: a streamed reply is a truncated one, a buffered reply has no body.
308
+ if (streaming)
309
+ throw truncatedStream();
310
+ throw invalidBody('the reply body is empty');
311
+ }
312
+ if (!this.sawMessageStop)
313
+ throw truncatedStream();
314
+ for (const call of this.toolCalls.values()) {
315
+ // A tool block with no `content_block_stop` was cut off: its arguments are incomplete.
316
+ if (call.arguments === undefined)
317
+ throw invalidToolArguments(call.name);
318
+ }
319
+ return {
320
+ content: this.accumulated,
321
+ toolCalls: finishedToolCalls(this.toolCalls),
322
+ usage: this.usage
323
+ };
324
+ }
325
+ completeBody() {
326
+ const text = new TextDecoder().decode(concatAll(this.bodyBytes));
327
+ const parsed = parseJson(text);
328
+ if (parsed.kind === 'invalid')
329
+ throw invalidBody('the body is not JSON');
330
+ const final = readNonStreaming(parsed.value, this.secrets);
331
+ return { content: final.content, toolCalls: final.toolCalls, usage: final.usage };
332
+ }
333
+ }
334
+ function parseJson(text) {
335
+ try {
336
+ return { kind: 'value', value: JSON.parse(text) };
337
+ }
338
+ catch (error) {
339
+ if (error instanceof SyntaxError)
340
+ return { kind: 'invalid' };
341
+ throw error;
342
+ }
343
+ }
344
+ function encodeTools(tools) {
345
+ return tools.map((tool) => ({
346
+ name: tool.name,
347
+ description: tool.description ?? tool.name,
348
+ input_schema: tool.inputSchema
349
+ }));
350
+ }
351
+ function encodeToolChoice(choice) {
352
+ if (choice === 'auto')
353
+ return { type: 'auto' };
354
+ if (choice === 'required')
355
+ return { type: 'any' };
356
+ if (choice === 'none')
357
+ return { type: 'none' };
358
+ return { type: 'tool', name: choice.function.name };
359
+ }
360
+ function finishedToolCalls(toolCalls) {
361
+ if (toolCalls.size === 0)
362
+ return undefined;
363
+ return Array.from(toolCalls.values()).map((call) => ({
364
+ id: call.id,
365
+ name: call.name,
366
+ arguments: call.arguments ?? {}
367
+ }));
368
+ }
369
+ /**
370
+ * The arguments of one tool call. No argument text at all is a tool that takes
371
+ * none; text that is truncated, or JSON that is not an object, is a failure: a
372
+ * tool must never run with arguments the model did not send.
373
+ */
374
+ function parseToolArguments(name, value) {
375
+ if (value.trim() === '')
376
+ return {};
377
+ const decoded = parseJson(value);
378
+ if (decoded.kind === 'invalid')
379
+ throw invalidToolArguments(name);
380
+ const parsed = ToolArgumentsSchema.safeParse(decoded.value);
381
+ if (!parsed.success)
382
+ throw invalidToolArguments(name);
383
+ return parsed.data;
384
+ }
385
+ /** The input of an assistant tool call in the history: its argument JSON, which must be an object. */
386
+ function toolUseInput(call) {
387
+ return parseToolArguments(call.name, call.arguments);
388
+ }
389
+ function invalidHistory(why) {
390
+ return new CapabilityError(`The chat history cannot be sent to Anthropic: ${why}.`, 'INVALID_INPUT', {
391
+ reason: 'invalid-chat-history',
392
+ retryable: false
393
+ });
394
+ }
395
+ function splitSystem(messages) {
396
+ let system;
397
+ const out = [];
398
+ // Every tool_result must answer a tool_use the assistant made earlier in the history.
399
+ const toolUseIds = new Set();
400
+ for (const m of messages) {
401
+ if (m.role === 'system') {
402
+ system = system ? `${system}\n\n${m.content}` : m.content;
403
+ continue;
404
+ }
405
+ if (m.role === 'tool') {
406
+ if (!m.toolCallId)
407
+ throw invalidHistory('a tool message names no tool call');
408
+ if (!toolUseIds.has(m.toolCallId)) {
409
+ throw invalidHistory('a tool message answers a tool call the assistant did not make');
410
+ }
411
+ const result = { type: 'tool_result', tool_use_id: m.toolCallId, content: m.content };
412
+ const previous = out[out.length - 1];
413
+ // The results of parallel tool calls travel in one user message, ahead of any other content.
414
+ if (previous && previous.role === 'user' && Array.isArray(previous.content) && previous.content.every((block) => block.type === 'tool_result')) {
415
+ previous.content.push(result);
416
+ }
417
+ else {
418
+ out.push({ role: 'user', content: [result] });
419
+ }
420
+ continue;
421
+ }
422
+ if (m.role === 'assistant' && m.toolCalls && m.toolCalls.length > 0) {
423
+ const blocks = [];
424
+ if (m.content)
425
+ blocks.push({ type: 'text', text: m.content });
426
+ for (const call of m.toolCalls) {
427
+ toolUseIds.add(call.id);
428
+ blocks.push({ type: 'tool_use', id: call.id, name: call.name, input: toolUseInput(call) });
429
+ }
430
+ out.push({ role: 'assistant', content: blocks });
431
+ continue;
432
+ }
433
+ if (m.images && m.images.length > 0) {
434
+ out.push({
435
+ role: m.role === 'assistant' ? 'assistant' : 'user',
436
+ content: [
437
+ { type: 'text', text: m.content },
438
+ ...m.images.map((img) => ({
439
+ type: 'image',
440
+ source: { type: 'base64', media_type: img.mimeType, data: img.data }
441
+ }))
442
+ ]
443
+ });
444
+ continue;
445
+ }
446
+ out.push({ role: m.role === 'assistant' ? 'assistant' : 'user', content: m.content });
447
+ }
448
+ return { system, messages: out };
449
+ }
450
+ function readType(json) {
451
+ const parsed = EventTypeSchema.safeParse(json);
452
+ return parsed.success ? parsed.data.type : undefined;
453
+ }
454
+ function readMessageStartUsage(json) {
455
+ const parsed = MessageStartSchema.safeParse(json);
456
+ const usage = parsed.success ? parsed.data.message?.usage : undefined;
457
+ if (!usage)
458
+ return null;
459
+ const out = {};
460
+ if (usage.input_tokens !== undefined)
461
+ out.tokensPrompt = usage.input_tokens;
462
+ if (usage.output_tokens !== undefined)
463
+ out.tokensCompletion = usage.output_tokens;
464
+ return Object.keys(out).length === 0 ? null : out;
465
+ }
466
+ function readMessageDeltaUsage(json) {
467
+ const parsed = MessageDeltaSchema.safeParse(json);
468
+ if (!parsed.success)
469
+ return null;
470
+ const out = {};
471
+ if (parsed.data.usage?.output_tokens !== undefined)
472
+ out.tokensCompletion = parsed.data.usage.output_tokens;
473
+ if (parsed.data.delta?.stop_reason !== undefined)
474
+ out.finishReason = parsed.data.delta.stop_reason;
475
+ return Object.keys(out).length === 0 ? null : out;
476
+ }
477
+ /** A started block; a tool block with no index would lose its arguments, so it is a failure, not a skip. */
478
+ function readContentBlockStart(json) {
479
+ const parsed = ContentBlockStartSchema.safeParse(json);
480
+ if (!parsed.success)
481
+ return null;
482
+ const { index, content_block: block } = parsed.data;
483
+ if (!block?.type)
484
+ return null;
485
+ if (index === undefined) {
486
+ if (block.type === 'tool_use')
487
+ throw invalidBody('a tool call started without an index');
488
+ return null;
489
+ }
490
+ return { index, type: block.type, id: block.id, name: block.name };
491
+ }
492
+ function readContentBlockDelta(json) {
493
+ const parsed = ContentBlockDeltaSchema.safeParse(json);
494
+ if (!parsed.success || !parsed.data.delta)
495
+ return null;
496
+ const { delta, index } = parsed.data;
497
+ if (delta.type === 'text_delta' && delta.text !== undefined) {
498
+ return { kind: 'text', text: delta.text };
499
+ }
500
+ if (delta.type === 'input_json_delta' && delta.partial_json !== undefined) {
501
+ if (index === undefined || index < 0)
502
+ return null;
503
+ return { kind: 'input_json', index, partial: delta.partial_json };
504
+ }
505
+ return null;
506
+ }
507
+ function readContentBlockStop(json) {
508
+ const parsed = ContentBlockStopSchema.safeParse(json);
509
+ return parsed.success && parsed.data.index !== undefined ? { index: parsed.data.index } : null;
510
+ }
511
+ /** A buffered reply: its text blocks joined and its `tool_use` blocks as tool calls. Anything that is not a message fails. */
512
+ function readNonStreaming(record, secrets) {
513
+ const parsed = NonStreamingSchema.safeParse(record);
514
+ if (!parsed.success)
515
+ throw invalidBody('the body is not a message');
516
+ if (parsed.data.type === 'error')
517
+ throw streamFailure(record, secrets);
518
+ const blocks = parsed.data.content;
519
+ if (blocks === undefined)
520
+ throw invalidBody('the body has no content blocks');
521
+ let text = '';
522
+ const toolCalls = [];
523
+ for (const block of blocks) {
524
+ if (block.type === 'text' && block.text !== undefined) {
525
+ if (text.length + block.text.length > MAX_RESPONSE_TEXT) {
526
+ throw invalidBody('the reply text is too large', { limit: 'text' });
527
+ }
528
+ text += block.text;
529
+ }
530
+ else if (block.type === 'tool_use') {
531
+ if (block.id === undefined || block.name === undefined) {
532
+ throw invalidBody('a tool_use block has no id or name');
533
+ }
534
+ if (toolCalls.length >= MAX_TOOL_CALLS)
535
+ throw invalidBody('too many tool calls', { limit: 'tool-calls' });
536
+ const input = ToolArgumentsSchema.safeParse(block.input ?? {});
537
+ if (!input.success)
538
+ throw invalidToolArguments(block.name);
539
+ toolCalls.push({ id: block.id, name: block.name, arguments: input.data });
540
+ }
541
+ }
542
+ const usage = {};
543
+ if (parsed.data.usage?.input_tokens !== undefined)
544
+ usage.tokensPrompt = parsed.data.usage.input_tokens;
545
+ if (parsed.data.usage?.output_tokens !== undefined)
546
+ usage.tokensCompletion = parsed.data.usage.output_tokens;
547
+ if (parsed.data.stop_reason !== undefined)
548
+ usage.finishReason = parsed.data.stop_reason;
549
+ return {
550
+ content: text,
551
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
552
+ usage: Object.keys(usage).length === 0 ? undefined : usage
553
+ };
554
+ }
555
+ const anthropicMessagesSpec = new AnthropicMessagesSpec();
556
+ export default anthropicMessagesSpec;
557
+ //# sourceMappingURL=anthropic-messages.spec.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-messages.spec.impl.js","sourceRoot":"","sources":["../../../../src/ai/specs/anthropic-messages/anthropic-messages.spec.impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /** Consumer-only Claude Code subscription-backed text generation. */
2
+ declare const _default: {
3
+ id: string;
4
+ kind: "ai/spec";
5
+ name: string;
6
+ description: string;
7
+ modalities: ("text" | "image" | "speech" | "audio" | "video" | "embedding" | "transcription" | "ocr" | "evaluation")[];
8
+ streamFraming: "none" | "sse" | "sse-named" | "ndjson" | "binary-chunked" | "ws-frame";
9
+ toolCallEnvelope: string;
10
+ transports: string[];
11
+ external: boolean;
12
+ priority: number;
13
+ enabled: boolean;
14
+ capabilities?: ("streaming" | "json_mode" | "text_generation" | "chat_completion" | "function_calling" | "embedding_generation" | "image_generation_text_to_image" | "image_generation_image_to_image" | "image_generation_inpainting" | "image_generation_outpainting" | "image_upscaling" | "image_editing_via_instructions" | "audio_generation_text_to_speech" | "audio_generation_voice_cloning" | "audio_generation_music" | "audio_generation_sound_effects" | "audio_transcription" | "audio_transcription_realtime" | "video_generation_text_to_video" | "workflow_execution" | "code_generation" | "image_understanding" | "structured_evaluation")[] | undefined;
15
+ imageControls?: {
16
+ steps: boolean;
17
+ cfg: boolean;
18
+ sampler: boolean;
19
+ scheduler: boolean;
20
+ negativePrompt: boolean;
21
+ seed: boolean;
22
+ } | undefined;
23
+ tags?: string[] | undefined;
24
+ };
25
+ export default _default;
26
+ //# sourceMappingURL=claude-code-exec.spec.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-exec.spec.descriptor.d.ts","sourceRoot":"","sources":["../../../../src/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.ts"],"names":[],"mappings":"AAEA,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;AACrE,wBAYG"}
@@ -0,0 +1,15 @@
1
+ import { createAISpecDescriptor } from '@vibesdotdev/ai/specs/schemas/descriptor';
2
+ /** Consumer-only Claude Code subscription-backed text generation. */
3
+ export default createAISpecDescriptor({
4
+ id: 'claude-code-exec',
5
+ name: 'Claude Code CLI',
6
+ description: 'Runs Claude Code headlessly through a verified local claude.ai subscription session without exposing or persisting OAuth credentials.',
7
+ modalities: ['text'],
8
+ streamFraming: 'none',
9
+ toolCallEnvelope: 'none',
10
+ transports: ['process'],
11
+ capabilities: ['text_generation'],
12
+ priority: 100,
13
+ tags: ['anthropic', 'claude-code', 'oauth-browser', 'subscription', 'consumer-only']
14
+ });
15
+ //# sourceMappingURL=claude-code-exec.spec.descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-exec.spec.descriptor.js","sourceRoot":"","sources":["../../../../src/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF,qEAAqE;AACrE,eAAe,sBAAsB,CAAC;IACrC,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACV,uIAAuI;IACxI,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM;IACrB,gBAAgB,EAAE,MAAM;IACxB,UAAU,EAAE,CAAC,SAAS,CAAC;IACvB,YAAY,EAAE,CAAC,iBAAiB,CAAC;IACjC,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,CAAC;CACpF,CAAC,CAAC"}