@vibesdotdev/integrations-anthropic 0.0.0-stage → 1.0.0-rc.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.
- package/LICENSE +126 -0
- package/README.md +57 -2
- package/dist/ai/anthropic-router-codec.d.ts +32 -0
- package/dist/ai/anthropic-router-codec.d.ts.map +1 -0
- package/dist/ai/anthropic-router-codec.js +321 -0
- package/dist/ai/anthropic-router-codec.js.map +1 -0
- package/dist/ai/anthropic.plugin.d.ts +6 -0
- package/dist/ai/anthropic.plugin.d.ts.map +1 -0
- package/dist/ai/anthropic.plugin.js +116 -0
- package/dist/ai/anthropic.plugin.js.map +1 -0
- package/dist/ai/catalog.d.ts +87 -0
- package/dist/ai/catalog.d.ts.map +1 -0
- package/dist/ai/catalog.js +64 -0
- package/dist/ai/catalog.js.map +1 -0
- package/dist/ai/claude-code-session.d.ts +56 -0
- package/dist/ai/claude-code-session.d.ts.map +1 -0
- package/dist/ai/claude-code-session.js +75 -0
- package/dist/ai/claude-code-session.js.map +1 -0
- package/dist/ai/claude-code-turn-env.d.ts +10 -0
- package/dist/ai/claude-code-turn-env.d.ts.map +1 -0
- package/dist/ai/claude-code-turn-env.js +19 -0
- package/dist/ai/claude-code-turn-env.js.map +1 -0
- package/dist/ai/hostile.d.ts +23 -0
- package/dist/ai/hostile.d.ts.map +1 -0
- package/dist/ai/hostile.js +22 -0
- package/dist/ai/hostile.js.map +1 -0
- package/dist/ai/index.d.ts +4 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +4 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/metadata/assets/logos/providers/anthropic.svg +1 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-3-5-haiku-20241022.json +77 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-3-5-sonnet-20241022.json +42 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-4-opus-20250514.json +79 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-4-sonnet-20250514.json +79 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-haiku-4-5.json +80 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-haiku-5-5.json +39 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-1.json +78 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-5.json +80 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-6.json +80 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-7.json +81 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-sonnet-4-5.json +80 -0
- package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-sonnet-4-6.json +80 -0
- package/dist/ai/metadata/providers/anthropic.json +22 -0
- package/dist/ai/providers/anthropic/anthropic.provider.impl.d.ts +62 -0
- package/dist/ai/providers/anthropic/anthropic.provider.impl.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/anthropic.provider.impl.js +430 -0
- package/dist/ai/providers/anthropic/anthropic.provider.impl.js.map +1 -0
- package/dist/ai/providers/anthropic/detection/index.d.ts +8 -0
- package/dist/ai/providers/anthropic/detection/index.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/detection/index.js +8 -0
- package/dist/ai/providers/anthropic/detection/index.js.map +1 -0
- package/dist/ai/providers/anthropic/detection/system.d.ts +12 -0
- package/dist/ai/providers/anthropic/detection/system.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/detection/system.js +34 -0
- package/dist/ai/providers/anthropic/detection/system.js.map +1 -0
- package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.d.ts +4 -0
- package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.js +212 -0
- package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.js.map +1 -0
- package/dist/ai/providers/anthropic/index.d.ts +4 -0
- package/dist/ai/providers/anthropic/index.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/index.js +4 -0
- package/dist/ai/providers/anthropic/index.js.map +1 -0
- package/dist/ai/providers/anthropic/recommendations.d.ts +24 -0
- package/dist/ai/providers/anthropic/recommendations.d.ts.map +1 -0
- package/dist/ai/providers/anthropic/recommendations.js +192 -0
- package/dist/ai/providers/anthropic/recommendations.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.d.ts +4194 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.js +52 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.d.ts +46 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.js +22 -0
- package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/index.d.ts +5 -0
- package/dist/ai/providers/cloud/frontier/anthropic/index.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/index.js +4 -0
- package/dist/ai/providers/cloud/frontier/anthropic/index.js.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.d.ts +183 -0
- package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.d.ts.map +1 -0
- package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.js +115 -0
- package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.js.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.d.ts +46 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.d.ts.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.js +183 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.js.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.d.ts +34 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.d.ts.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.js +29 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.js.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.d.ts +48 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.d.ts.map +1 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.js +557 -0
- package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.js.map +1 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.d.ts +26 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.d.ts.map +1 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.js +15 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.js.map +1 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.d.ts +35 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.d.ts.map +1 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.js +210 -0
- package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.js.map +1 -0
- package/dist/external/acp-server.consumer.plugin.d.ts +3 -0
- package/dist/external/acp-server.consumer.plugin.d.ts.map +1 -0
- package/dist/external/acp-server.consumer.plugin.js +29 -0
- package/dist/external/acp-server.consumer.plugin.js.map +1 -0
- package/dist/external/acp-server.d.ts +19 -0
- package/dist/external/acp-server.d.ts.map +1 -0
- package/dist/external/acp-server.js +198 -0
- package/dist/external/acp-server.js.map +1 -0
- package/dist/external/claude-code-hooks.d.ts +51 -0
- package/dist/external/claude-code-hooks.d.ts.map +1 -0
- package/dist/external/claude-code-hooks.js +252 -0
- package/dist/external/claude-code-hooks.js.map +1 -0
- package/dist/external/claude-code-installer.d.ts +10 -0
- package/dist/external/claude-code-installer.d.ts.map +1 -0
- package/dist/external/claude-code-installer.js +604 -0
- package/dist/external/claude-code-installer.js.map +1 -0
- package/dist/external/claude-code-operations.d.ts +217 -0
- package/dist/external/claude-code-operations.d.ts.map +1 -0
- package/dist/external/claude-code-operations.js +101 -0
- package/dist/external/claude-code-operations.js.map +1 -0
- package/dist/external/claude-code-plugin.json +7 -0
- package/dist/external/claude-code-presets.d.ts +813 -0
- package/dist/external/claude-code-presets.d.ts.map +1 -0
- package/dist/external/claude-code-presets.js +157 -0
- package/dist/external/claude-code-presets.js.map +1 -0
- package/dist/external/claude-code.descriptor.d.ts +160 -0
- package/dist/external/claude-code.descriptor.d.ts.map +1 -0
- package/dist/external/claude-code.descriptor.js +5 -0
- package/dist/external/claude-code.descriptor.js.map +1 -0
- package/dist/external/claude-code.manifest.d.ts +5 -0
- package/dist/external/claude-code.manifest.d.ts.map +1 -0
- package/dist/external/claude-code.manifest.js +205 -0
- package/dist/external/claude-code.manifest.js.map +1 -0
- package/dist/external/external.plugin.d.ts +6 -0
- package/dist/external/external.plugin.d.ts.map +1 -0
- package/dist/external/external.plugin.js +56 -0
- package/dist/external/external.plugin.js.map +1 -0
- package/dist/external/index.d.ts +6 -0
- package/dist/external/index.d.ts.map +1 -0
- package/dist/external/index.js +6 -0
- package/dist/external/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +108 -4
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The typed failures of the Messages dialect.
|
|
3
|
+
*
|
|
4
|
+
* Every failure of a turn is a `CapabilityError` with a code and a reason. What
|
|
5
|
+
* the provider said (an HTTP body, a stream `error` event's message) travels
|
|
6
|
+
* only as a bounded `cause` the logger scrubs; the message names the status and
|
|
7
|
+
* the provider's own error type (a fixed vocabulary), never its text. The status
|
|
8
|
+
* stays in the message as `HTTP <status>`, the form the framework's failure
|
|
9
|
+
* categoriser reads to classify a rate limit, an overload or a rejected key.
|
|
10
|
+
*/
|
|
11
|
+
import { CapabilityError, CaughtFailureSchema, isCapabilityError, valueFreeFailure } from '@vibesdotdev/kernel';
|
|
12
|
+
import * as z from 'zod/v4';
|
|
13
|
+
import { readHostile } from "../../hostile.js";
|
|
14
|
+
import { providerTextCause, urlRedactions } from '@vibesdotdev/ai/utils/provider-text';
|
|
15
|
+
/** Anthropic's documented error types. */
|
|
16
|
+
const ErrorTypeSchema = z.enum([
|
|
17
|
+
'invalid_request_error',
|
|
18
|
+
'authentication_error',
|
|
19
|
+
'billing_error',
|
|
20
|
+
'permission_error',
|
|
21
|
+
'not_found_error',
|
|
22
|
+
'request_too_large',
|
|
23
|
+
'rate_limit_error',
|
|
24
|
+
'api_error',
|
|
25
|
+
'timeout_error',
|
|
26
|
+
'overloaded_error'
|
|
27
|
+
]);
|
|
28
|
+
/** The HTTP status each documented error type stands for. */
|
|
29
|
+
const ANTHROPIC_ERROR_STATUS = {
|
|
30
|
+
invalid_request_error: 400,
|
|
31
|
+
authentication_error: 401,
|
|
32
|
+
billing_error: 402,
|
|
33
|
+
permission_error: 403,
|
|
34
|
+
not_found_error: 404,
|
|
35
|
+
request_too_large: 413,
|
|
36
|
+
rate_limit_error: 429,
|
|
37
|
+
api_error: 500,
|
|
38
|
+
timeout_error: 504,
|
|
39
|
+
overloaded_error: 529
|
|
40
|
+
};
|
|
41
|
+
/** The `{ type: 'error', error: { type, message } }` object Anthropic sends, as a stream event and as an HTTP body. */
|
|
42
|
+
const ErrorObjectSchema = z.looseObject({
|
|
43
|
+
error: z
|
|
44
|
+
.looseObject({
|
|
45
|
+
type: z.string().optional().catch(undefined),
|
|
46
|
+
message: z.string().optional().catch(undefined)
|
|
47
|
+
})
|
|
48
|
+
.optional()
|
|
49
|
+
.catch(undefined)
|
|
50
|
+
});
|
|
51
|
+
/**
|
|
52
|
+
* The transport's text for a non-2xx answer: `HTTP <status>`, the provider's
|
|
53
|
+
* redacted, bounded body riding as the error's cause (the older
|
|
54
|
+
* `HTTP <status>: <body>` text is read too).
|
|
55
|
+
*/
|
|
56
|
+
const HTTP_ERROR_TEXT = /^HTTP (\d{3})(?:: ([\s\S]*))?$/;
|
|
57
|
+
/** The largest response text a turn accepts (accumulated text, and one buffered body), in characters or bytes. */
|
|
58
|
+
export const MAX_RESPONSE_TEXT = 8 * 1024 * 1024;
|
|
59
|
+
/** The largest argument JSON one tool call accepts. */
|
|
60
|
+
export const MAX_TOOL_ARGUMENT_CHARS = 1024 * 1024;
|
|
61
|
+
/** The most tool calls one reply accepts. */
|
|
62
|
+
export const MAX_TOOL_CALLS = 128;
|
|
63
|
+
function retryableStatus(status) {
|
|
64
|
+
return status === 408 || status === 409 || status === 429 || status >= 500;
|
|
65
|
+
}
|
|
66
|
+
/** The provider's error type, when it names one of the documented types. */
|
|
67
|
+
function errorTypeOf(body) {
|
|
68
|
+
const object = ErrorObjectSchema.safeParse(body);
|
|
69
|
+
if (!object.success)
|
|
70
|
+
return undefined;
|
|
71
|
+
const type = ErrorTypeSchema.safeParse(object.data.error?.type);
|
|
72
|
+
return type.success ? type.data : undefined;
|
|
73
|
+
}
|
|
74
|
+
/** What a JSON text holds, or `undefined` when it is not JSON (a body the provider's proxy wrote is often HTML). */
|
|
75
|
+
function jsonOrUndefined(text) {
|
|
76
|
+
try {
|
|
77
|
+
return JSON.parse(text);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (error instanceof SyntaxError)
|
|
81
|
+
return { notJson: error };
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function providerText(body, raw) {
|
|
86
|
+
const object = ErrorObjectSchema.safeParse(body);
|
|
87
|
+
return object.success && object.data.error?.message !== undefined ? object.data.error.message : raw;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A non-2xx answer: its status and the provider's error type are the message; its
|
|
91
|
+
* text is the cause, with the request's own credential values (`secrets`) removed.
|
|
92
|
+
*/
|
|
93
|
+
export function httpFailure(status, bodyText, secrets) {
|
|
94
|
+
const body = jsonOrUndefined(bodyText);
|
|
95
|
+
const errorType = errorTypeOf(body);
|
|
96
|
+
return new CapabilityError(`Anthropic API answered HTTP ${status}${errorType ? ` (${errorType})` : ''}.`, 'UNAVAILABLE', {
|
|
97
|
+
reason: 'provider-http-error',
|
|
98
|
+
retryable: retryableStatus(status),
|
|
99
|
+
details: errorType ? { status, errorType } : { status },
|
|
100
|
+
cause: providerTextCause(providerText(body, bodyText), secrets)
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/** An `error` object in a successful answer (a stream `error` event, or a buffered body that is one). */
|
|
104
|
+
export function streamFailure(body, secrets) {
|
|
105
|
+
const errorType = errorTypeOf(body);
|
|
106
|
+
const status = errorType ? ANTHROPIC_ERROR_STATUS[errorType] : undefined;
|
|
107
|
+
const text = ErrorObjectSchema.safeParse(body);
|
|
108
|
+
return new CapabilityError(`Anthropic stream failed${errorType ? ` with ${errorType}` : ''}${status ? ` (HTTP ${status})` : ''}.`, 'UNAVAILABLE', {
|
|
109
|
+
reason: 'provider-stream-error',
|
|
110
|
+
retryable: status === undefined ? true : retryableStatus(status),
|
|
111
|
+
details: errorType && status ? { status, errorType } : undefined,
|
|
112
|
+
cause: providerTextCause(text.success ? (text.data.error?.message ?? '') : '', secrets)
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/** The reply ended without `message_stop`: what arrived is not a complete turn. */
|
|
116
|
+
export function truncatedStream() {
|
|
117
|
+
return new CapabilityError('The Anthropic stream ended before message_stop.', 'UNAVAILABLE', {
|
|
118
|
+
reason: 'provider-truncated-stream',
|
|
119
|
+
retryable: true
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/** A successful answer that is not a usable message, or is larger than the declared bounds. */
|
|
123
|
+
export function invalidBody(what, bound) {
|
|
124
|
+
return new CapabilityError(`The Anthropic reply is not a valid message: ${what}.`, 'UNAVAILABLE', {
|
|
125
|
+
reason: 'invalid-response-body',
|
|
126
|
+
retryable: false,
|
|
127
|
+
details: bound
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/** Tool-call arguments that are truncated or are not a JSON object. */
|
|
131
|
+
export function invalidToolArguments(toolName) {
|
|
132
|
+
return new CapabilityError('Tool-call arguments are not a complete JSON object.', 'INVALID_INPUT', {
|
|
133
|
+
reason: 'invalid-tool-arguments',
|
|
134
|
+
retryable: false,
|
|
135
|
+
details: { tool: toolName.slice(0, 128) }
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* What a transport `error` chunk becomes. A cancellation or a deadline keeps its
|
|
140
|
+
* own shape (the framework classifies those by it); an HTTP answer becomes
|
|
141
|
+
* {@link httpFailure}; a typed failure stays itself; anything else (a refused
|
|
142
|
+
* connection, a TLS failure) becomes a fixed-message failure whose cause is the
|
|
143
|
+
* bounded text of what happened, with the request's credentials and the endpoint
|
|
144
|
+
* URL (whole and in parts) removed.
|
|
145
|
+
*/
|
|
146
|
+
export function transportFailure(error, context) {
|
|
147
|
+
const failure = CaughtFailureSchema.parse(error);
|
|
148
|
+
if (!(failure instanceof Error))
|
|
149
|
+
return invalidBody('the transport reported a non-error failure');
|
|
150
|
+
if (isCapabilityError(failure))
|
|
151
|
+
return failure;
|
|
152
|
+
if (failure instanceof DOMException && (failure.name === 'AbortError' || failure.name === 'TimeoutError')) {
|
|
153
|
+
return failure;
|
|
154
|
+
}
|
|
155
|
+
const reading = readMessage(failure);
|
|
156
|
+
const http = HTTP_ERROR_TEXT.exec(reading.text);
|
|
157
|
+
const secrets = context.secrets ?? [];
|
|
158
|
+
if (http)
|
|
159
|
+
return httpFailure(Number(http[1]), http[2] ?? causeText(failure), secrets);
|
|
160
|
+
return new CapabilityError('Anthropic request failed with a network error.', 'UNAVAILABLE', {
|
|
161
|
+
reason: 'provider-transport-error',
|
|
162
|
+
retryable: true,
|
|
163
|
+
cause: reading.unreadable
|
|
164
|
+
? new Error(JSON.stringify(reading.unreadable))
|
|
165
|
+
: providerTextCause(reading.text, [...urlRedactions(context.endpointBase), ...secrets])
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/** The text of a failure's `cause` (where the transport puts the provider's redacted body); none when it has no `Error` cause or reading it throws (the status alone is then the failure). */
|
|
169
|
+
function causeText(failure) {
|
|
170
|
+
const carried = readHostile(CauseOfSchema, failure);
|
|
171
|
+
return carried.ok && carried.data instanceof Error ? readMessage(carried.data).text : '';
|
|
172
|
+
}
|
|
173
|
+
/** An error's `cause`, parsed: the read happens inside the guard, so a getter that throws is a failed read, never a throw. */
|
|
174
|
+
const CauseOfSchema = z.instanceof(Error).transform((error) => CaughtFailureSchema.parse(error.cause));
|
|
175
|
+
function readMessage(failure) {
|
|
176
|
+
try {
|
|
177
|
+
return { text: String(failure.message) };
|
|
178
|
+
}
|
|
179
|
+
catch (unreadable) {
|
|
180
|
+
return { text: '', unreadable: valueFreeFailure(CaughtFailureSchema.parse(unreadable)) };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=anthropic-messages.failures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-messages.failures.js","sourceRoot":"","sources":["../../../../src/ai/specs/anthropic-messages/anthropic-messages.failures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `spec-anthropic-messages` — Anthropic Messages API wire dialect.
|
|
3
|
+
*
|
|
4
|
+
* Used by: Anthropic direct, AWS Bedrock (Anthropic family), Google
|
|
5
|
+
* Vertex (Anthropic family), LM Studio's optional `/anthropic/v1`
|
|
6
|
+
* endpoint, and any vendor that speaks `/v1/messages` with
|
|
7
|
+
* `messages: [{role, content: blocks}]` body and `event:`-named SSE
|
|
8
|
+
* streams (`message_start`, `content_block_delta`, etc.).
|
|
9
|
+
*/
|
|
10
|
+
declare const _default: {
|
|
11
|
+
id: string;
|
|
12
|
+
kind: "ai/spec";
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
modalities: ("text" | "image" | "speech" | "audio" | "video" | "embedding" | "transcription" | "ocr" | "evaluation")[];
|
|
16
|
+
streamFraming: "none" | "sse" | "sse-named" | "ndjson" | "binary-chunked" | "ws-frame";
|
|
17
|
+
toolCallEnvelope: string;
|
|
18
|
+
transports: string[];
|
|
19
|
+
external: boolean;
|
|
20
|
+
priority: number;
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
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;
|
|
23
|
+
imageControls?: {
|
|
24
|
+
steps: boolean;
|
|
25
|
+
cfg: boolean;
|
|
26
|
+
sampler: boolean;
|
|
27
|
+
scheduler: boolean;
|
|
28
|
+
negativePrompt: boolean;
|
|
29
|
+
seed: boolean;
|
|
30
|
+
} | undefined;
|
|
31
|
+
tags?: string[] | undefined;
|
|
32
|
+
};
|
|
33
|
+
export default _default;
|
|
34
|
+
//# sourceMappingURL=anthropic-messages.spec.descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-messages.spec.descriptor.d.ts","sourceRoot":"","sources":["../../../../src/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;AACH,wBAkBG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createAISpecDescriptor } from '@vibesdotdev/ai/specs/schemas/descriptor';
|
|
2
|
+
/**
|
|
3
|
+
* `spec-anthropic-messages` — Anthropic Messages API wire dialect.
|
|
4
|
+
*
|
|
5
|
+
* Used by: Anthropic direct, AWS Bedrock (Anthropic family), Google
|
|
6
|
+
* Vertex (Anthropic family), LM Studio's optional `/anthropic/v1`
|
|
7
|
+
* endpoint, and any vendor that speaks `/v1/messages` with
|
|
8
|
+
* `messages: [{role, content: blocks}]` body and `event:`-named SSE
|
|
9
|
+
* streams (`message_start`, `content_block_delta`, etc.).
|
|
10
|
+
*/
|
|
11
|
+
export default createAISpecDescriptor({
|
|
12
|
+
id: 'anthropic-messages',
|
|
13
|
+
name: 'Anthropic Messages',
|
|
14
|
+
description: 'Anthropic /v1/messages dialect. JSON request, event-named SSE stream, content-block tool-use envelope.',
|
|
15
|
+
modalities: ['text'],
|
|
16
|
+
streamFraming: 'sse-named',
|
|
17
|
+
toolCallEnvelope: 'anthropic-content-blocks',
|
|
18
|
+
transports: ['fetch'],
|
|
19
|
+
capabilities: [
|
|
20
|
+
'text_generation',
|
|
21
|
+
'chat_completion',
|
|
22
|
+
'function_calling',
|
|
23
|
+
'streaming',
|
|
24
|
+
'image_understanding'
|
|
25
|
+
],
|
|
26
|
+
priority: 100,
|
|
27
|
+
tags: ['anthropic', 'messages']
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=anthropic-messages.spec.descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-messages.spec.descriptor.js","sourceRoot":"","sources":["../../../../src/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF;;;;;;;;GAQG;AACH,eAAe,sBAAsB,CAAC;IACrC,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACV,wGAAwG;IACzG,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,aAAa,EAAE,WAAW;IAC1B,gBAAgB,EAAE,0BAA0B;IAC5C,UAAU,EAAE,CAAC,OAAO,CAAC;IACrB,YAAY,EAAE;QACb,iBAAiB;QACjB,iBAAiB;QACjB,kBAAkB;QAClB,WAAW;QACX,qBAAqB;KACrB;IACD,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;CAC/B,CAAC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
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 { type AISpecInterface, type DecodedEvent, type SpecCallContext, type WireRequest, type WireResponseChunk } from '@vibesdotdev/ai/specs/interfaces';
|
|
17
|
+
import type { GenerationRequest } from '@vibesdotdev/ai/interfaces';
|
|
18
|
+
import type { Modality } from '@vibesdotdev/ai/models/schemas';
|
|
19
|
+
declare class AnthropicMessagesSpec implements AISpecInterface {
|
|
20
|
+
readonly descriptor: {
|
|
21
|
+
id: string;
|
|
22
|
+
kind: "ai/spec";
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
modalities: ("text" | "image" | "speech" | "audio" | "video" | "embedding" | "transcription" | "ocr" | "evaluation")[];
|
|
26
|
+
streamFraming: "none" | "sse" | "sse-named" | "ndjson" | "binary-chunked" | "ws-frame";
|
|
27
|
+
toolCallEnvelope: string;
|
|
28
|
+
transports: string[];
|
|
29
|
+
external: boolean;
|
|
30
|
+
priority: number;
|
|
31
|
+
enabled: boolean;
|
|
32
|
+
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;
|
|
33
|
+
imageControls?: {
|
|
34
|
+
steps: boolean;
|
|
35
|
+
cfg: boolean;
|
|
36
|
+
sampler: boolean;
|
|
37
|
+
scheduler: boolean;
|
|
38
|
+
negativePrompt: boolean;
|
|
39
|
+
seed: boolean;
|
|
40
|
+
} | undefined;
|
|
41
|
+
tags?: string[] | undefined;
|
|
42
|
+
};
|
|
43
|
+
encodeRequest<M extends Modality>(request: GenerationRequest<M>, context: SpecCallContext): WireRequest;
|
|
44
|
+
decodeResponse<M extends Modality>(chunks: AsyncIterable<WireResponseChunk>, request: GenerationRequest<M>, context: SpecCallContext): AsyncIterable<DecodedEvent<M>>;
|
|
45
|
+
}
|
|
46
|
+
declare const anthropicMessagesSpec: AnthropicMessagesSpec;
|
|
47
|
+
export default anthropicMessagesSpec;
|
|
48
|
+
//# sourceMappingURL=anthropic-messages.spec.impl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic-messages.spec.impl.d.ts","sourceRoot":"","sources":["../../../../src/ai/specs/anthropic-messages/anthropic-messages.spec.impl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAIN,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAEX,iBAAiB,EAGjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AA0K/D,cAAM,qBAAsB,YAAW,eAAe;IACrD,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;MAAc;IAEjC,aAAa,CAAC,CAAC,SAAS,QAAQ,EAC/B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,OAAO,EAAE,eAAe,GACtB,WAAW;IAgDP,cAAc,CAAC,CAAC,SAAS,QAAQ,EACvC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACxC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,OAAO,EAAE,eAAe,GACtB,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CA4CjC;AAuWD,QAAA,MAAM,qBAAqB,uBAA8B,CAAC;AAC1D,eAAe,qBAAqB,CAAC"}
|