@codeworksh/aikit 0.7.1 → 0.7.2

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/cli.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { c as openAICodexHeaders, r as OpenAICodexOAuthClient, t as JsonOpenAICodexAuthStorage } from "./codex-DyQHzQmn.mjs";
3
- import { t as ModelgenCommand } from "./modelgen-BcsqB44a.mjs";
3
+ import { t as ModelgenCommand } from "./modelgen-xolcfdfT.mjs";
4
4
  import yargs from "yargs";
5
5
  import { hideBin } from "yargs/helpers";
6
6
  //#region package.json
7
- var version = "0.7.1";
7
+ var version = "0.7.2";
8
8
  //#endregion
9
9
  //#region src/cli/oauth.ts
10
10
  async function promptLine(message) {
@@ -0,0 +1,240 @@
1
+ import Type$1, { Static } from "typebox";
2
+ //#region src/llm/failure/schema.d.ts
3
+ declare const Authentication: Type$1.TObject<{
4
+ message: Type$1.TString;
5
+ retryable: Type$1.TBoolean;
6
+ status: Type$1.TOptional<Type$1.TNumber>;
7
+ code: Type$1.TOptional<Type$1.TString>;
8
+ requestId: Type$1.TOptional<Type$1.TString>;
9
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
10
+ _tag: Type$1.TLiteral<"Authentication">;
11
+ reason: Type$1.TUnion<[Type$1.TLiteral<"missing">, Type$1.TLiteral<"invalid">, Type$1.TLiteral<"expired">]>;
12
+ }>;
13
+ declare const Configuration: Type$1.TObject<{
14
+ message: Type$1.TString;
15
+ retryable: Type$1.TBoolean;
16
+ status: Type$1.TOptional<Type$1.TNumber>;
17
+ code: Type$1.TOptional<Type$1.TString>;
18
+ requestId: Type$1.TOptional<Type$1.TString>;
19
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
20
+ _tag: Type$1.TLiteral<"Configuration">;
21
+ }>;
22
+ declare const Authorization: Type$1.TObject<{
23
+ message: Type$1.TString;
24
+ retryable: Type$1.TBoolean;
25
+ status: Type$1.TOptional<Type$1.TNumber>;
26
+ code: Type$1.TOptional<Type$1.TString>;
27
+ requestId: Type$1.TOptional<Type$1.TString>;
28
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
29
+ _tag: Type$1.TLiteral<"Authorization">;
30
+ }>;
31
+ declare const ModelUnavailable: Type$1.TObject<{
32
+ message: Type$1.TString;
33
+ retryable: Type$1.TBoolean;
34
+ status: Type$1.TOptional<Type$1.TNumber>;
35
+ code: Type$1.TOptional<Type$1.TString>;
36
+ requestId: Type$1.TOptional<Type$1.TString>;
37
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
38
+ _tag: Type$1.TLiteral<"ModelUnavailable">;
39
+ }>;
40
+ declare const RateLimit: Type$1.TObject<{
41
+ message: Type$1.TString;
42
+ retryable: Type$1.TBoolean;
43
+ status: Type$1.TOptional<Type$1.TNumber>;
44
+ code: Type$1.TOptional<Type$1.TString>;
45
+ requestId: Type$1.TOptional<Type$1.TString>;
46
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
47
+ _tag: Type$1.TLiteral<"RateLimit">;
48
+ }>;
49
+ declare const Quota: Type$1.TObject<{
50
+ message: Type$1.TString;
51
+ retryable: Type$1.TBoolean;
52
+ status: Type$1.TOptional<Type$1.TNumber>;
53
+ code: Type$1.TOptional<Type$1.TString>;
54
+ requestId: Type$1.TOptional<Type$1.TString>;
55
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
56
+ _tag: Type$1.TLiteral<"Quota">;
57
+ }>;
58
+ declare const InvalidRequest: Type$1.TObject<{
59
+ message: Type$1.TString;
60
+ retryable: Type$1.TBoolean;
61
+ status: Type$1.TOptional<Type$1.TNumber>;
62
+ code: Type$1.TOptional<Type$1.TString>;
63
+ requestId: Type$1.TOptional<Type$1.TString>;
64
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
65
+ _tag: Type$1.TLiteral<"InvalidRequest">;
66
+ }>;
67
+ declare const ContentPolicy: Type$1.TObject<{
68
+ message: Type$1.TString;
69
+ retryable: Type$1.TBoolean;
70
+ status: Type$1.TOptional<Type$1.TNumber>;
71
+ code: Type$1.TOptional<Type$1.TString>;
72
+ requestId: Type$1.TOptional<Type$1.TString>;
73
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
74
+ _tag: Type$1.TLiteral<"ContentPolicy">;
75
+ }>;
76
+ declare const Timeout: Type$1.TObject<{
77
+ message: Type$1.TString;
78
+ retryable: Type$1.TBoolean;
79
+ status: Type$1.TOptional<Type$1.TNumber>;
80
+ code: Type$1.TOptional<Type$1.TString>;
81
+ requestId: Type$1.TOptional<Type$1.TString>;
82
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
83
+ _tag: Type$1.TLiteral<"Timeout">;
84
+ }>;
85
+ declare const Transport: Type$1.TObject<{
86
+ message: Type$1.TString;
87
+ retryable: Type$1.TBoolean;
88
+ status: Type$1.TOptional<Type$1.TNumber>;
89
+ code: Type$1.TOptional<Type$1.TString>;
90
+ requestId: Type$1.TOptional<Type$1.TString>;
91
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
92
+ _tag: Type$1.TLiteral<"Transport">;
93
+ }>;
94
+ declare const Unavailable: Type$1.TObject<{
95
+ message: Type$1.TString;
96
+ retryable: Type$1.TBoolean;
97
+ status: Type$1.TOptional<Type$1.TNumber>;
98
+ code: Type$1.TOptional<Type$1.TString>;
99
+ requestId: Type$1.TOptional<Type$1.TString>;
100
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
101
+ _tag: Type$1.TLiteral<"Unavailable">;
102
+ }>;
103
+ declare const InvalidResponse: Type$1.TObject<{
104
+ message: Type$1.TString;
105
+ retryable: Type$1.TBoolean;
106
+ status: Type$1.TOptional<Type$1.TNumber>;
107
+ code: Type$1.TOptional<Type$1.TString>;
108
+ requestId: Type$1.TOptional<Type$1.TString>;
109
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
110
+ _tag: Type$1.TLiteral<"InvalidResponse">;
111
+ }>;
112
+ declare const Unknown: Type$1.TObject<{
113
+ message: Type$1.TString;
114
+ retryable: Type$1.TBoolean;
115
+ status: Type$1.TOptional<Type$1.TNumber>;
116
+ code: Type$1.TOptional<Type$1.TString>;
117
+ requestId: Type$1.TOptional<Type$1.TString>;
118
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
119
+ _tag: Type$1.TLiteral<"Unknown">;
120
+ }>;
121
+ /** Provider-independent, JSON-safe failure data carried by terminal assistant messages. */
122
+ declare const FailureSchema: Type$1.TUnion<[Type$1.TObject<{
123
+ message: Type$1.TString;
124
+ retryable: Type$1.TBoolean;
125
+ status: Type$1.TOptional<Type$1.TNumber>;
126
+ code: Type$1.TOptional<Type$1.TString>;
127
+ requestId: Type$1.TOptional<Type$1.TString>;
128
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
129
+ _tag: Type$1.TLiteral<"Authentication">;
130
+ reason: Type$1.TUnion<[Type$1.TLiteral<"missing">, Type$1.TLiteral<"invalid">, Type$1.TLiteral<"expired">]>;
131
+ }>, Type$1.TObject<{
132
+ message: Type$1.TString;
133
+ retryable: Type$1.TBoolean;
134
+ status: Type$1.TOptional<Type$1.TNumber>;
135
+ code: Type$1.TOptional<Type$1.TString>;
136
+ requestId: Type$1.TOptional<Type$1.TString>;
137
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
138
+ _tag: Type$1.TLiteral<"Configuration">;
139
+ }>, Type$1.TObject<{
140
+ message: Type$1.TString;
141
+ retryable: Type$1.TBoolean;
142
+ status: Type$1.TOptional<Type$1.TNumber>;
143
+ code: Type$1.TOptional<Type$1.TString>;
144
+ requestId: Type$1.TOptional<Type$1.TString>;
145
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
146
+ _tag: Type$1.TLiteral<"Authorization">;
147
+ }>, Type$1.TObject<{
148
+ message: Type$1.TString;
149
+ retryable: Type$1.TBoolean;
150
+ status: Type$1.TOptional<Type$1.TNumber>;
151
+ code: Type$1.TOptional<Type$1.TString>;
152
+ requestId: Type$1.TOptional<Type$1.TString>;
153
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
154
+ _tag: Type$1.TLiteral<"ModelUnavailable">;
155
+ }>, Type$1.TObject<{
156
+ message: Type$1.TString;
157
+ retryable: Type$1.TBoolean;
158
+ status: Type$1.TOptional<Type$1.TNumber>;
159
+ code: Type$1.TOptional<Type$1.TString>;
160
+ requestId: Type$1.TOptional<Type$1.TString>;
161
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
162
+ _tag: Type$1.TLiteral<"RateLimit">;
163
+ }>, Type$1.TObject<{
164
+ message: Type$1.TString;
165
+ retryable: Type$1.TBoolean;
166
+ status: Type$1.TOptional<Type$1.TNumber>;
167
+ code: Type$1.TOptional<Type$1.TString>;
168
+ requestId: Type$1.TOptional<Type$1.TString>;
169
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
170
+ _tag: Type$1.TLiteral<"Quota">;
171
+ }>, Type$1.TObject<{
172
+ message: Type$1.TString;
173
+ retryable: Type$1.TBoolean;
174
+ status: Type$1.TOptional<Type$1.TNumber>;
175
+ code: Type$1.TOptional<Type$1.TString>;
176
+ requestId: Type$1.TOptional<Type$1.TString>;
177
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
178
+ _tag: Type$1.TLiteral<"InvalidRequest">;
179
+ }>, Type$1.TObject<{
180
+ message: Type$1.TString;
181
+ retryable: Type$1.TBoolean;
182
+ status: Type$1.TOptional<Type$1.TNumber>;
183
+ code: Type$1.TOptional<Type$1.TString>;
184
+ requestId: Type$1.TOptional<Type$1.TString>;
185
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
186
+ _tag: Type$1.TLiteral<"ContentPolicy">;
187
+ }>, Type$1.TObject<{
188
+ message: Type$1.TString;
189
+ retryable: Type$1.TBoolean;
190
+ status: Type$1.TOptional<Type$1.TNumber>;
191
+ code: Type$1.TOptional<Type$1.TString>;
192
+ requestId: Type$1.TOptional<Type$1.TString>;
193
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
194
+ _tag: Type$1.TLiteral<"Timeout">;
195
+ }>, Type$1.TObject<{
196
+ message: Type$1.TString;
197
+ retryable: Type$1.TBoolean;
198
+ status: Type$1.TOptional<Type$1.TNumber>;
199
+ code: Type$1.TOptional<Type$1.TString>;
200
+ requestId: Type$1.TOptional<Type$1.TString>;
201
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
202
+ _tag: Type$1.TLiteral<"Transport">;
203
+ }>, Type$1.TObject<{
204
+ message: Type$1.TString;
205
+ retryable: Type$1.TBoolean;
206
+ status: Type$1.TOptional<Type$1.TNumber>;
207
+ code: Type$1.TOptional<Type$1.TString>;
208
+ requestId: Type$1.TOptional<Type$1.TString>;
209
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
210
+ _tag: Type$1.TLiteral<"Unavailable">;
211
+ }>, Type$1.TObject<{
212
+ message: Type$1.TString;
213
+ retryable: Type$1.TBoolean;
214
+ status: Type$1.TOptional<Type$1.TNumber>;
215
+ code: Type$1.TOptional<Type$1.TString>;
216
+ requestId: Type$1.TOptional<Type$1.TString>;
217
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
218
+ _tag: Type$1.TLiteral<"InvalidResponse">;
219
+ }>, Type$1.TObject<{
220
+ message: Type$1.TString;
221
+ retryable: Type$1.TBoolean;
222
+ status: Type$1.TOptional<Type$1.TNumber>;
223
+ code: Type$1.TOptional<Type$1.TString>;
224
+ requestId: Type$1.TOptional<Type$1.TString>;
225
+ retryAfterMs: Type$1.TOptional<Type$1.TNumber>;
226
+ _tag: Type$1.TLiteral<"Unknown">;
227
+ }>]>;
228
+ type Failure = Static<typeof FailureSchema>;
229
+ /** Lightweight guard for failure data crossing package or persistence boundaries. */
230
+ declare function isFailure(value: unknown): value is Failure;
231
+ declare namespace failure_d_exports {
232
+ export { Authentication, Authorization, Configuration, ContentPolicy, Failure, FailureSchema, InvalidRequest, InvalidResponse, ModelUnavailable, Quota, RateLimit, Timeout, Transport, Unavailable, Unknown, fromMessage, isFailure, normalize };
233
+ }
234
+ /** Normalize AI SDK and provider exceptions without retaining request bodies, response bodies, or headers. */
235
+ declare function normalize(error: unknown): Failure;
236
+ /** Best-effort compatibility for terminal messages written before structured failures existed. */
237
+ declare function fromMessage(message: string): Failure;
238
+ //#endregion
239
+ export { Unavailable as _, Authorization as a, Failure as c, InvalidResponse as d, ModelUnavailable as f, Transport as g, Timeout as h, Authentication as i, FailureSchema as l, RateLimit as m, fromMessage as n, Configuration as o, Quota as p, normalize as r, ContentPolicy as s, failure_d_exports as t, InvalidRequest as u, Unknown as v, isFailure as y };
240
+ //# sourceMappingURL=failure-C0lCOdFE.d.mts.map
@@ -0,0 +1,281 @@
1
+ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
+ import Type$1 from "typebox";
3
+ import { APICallError, EmptyResponseBodyError, InvalidArgumentError, InvalidPromptError, InvalidResponseDataError, JSONParseError, LoadAPIKeyError, LoadSettingError, NoContentGeneratedError, NoSuchModelError, TypeValidationError, UnsupportedFunctionalityError } from "@ai-sdk/provider";
4
+ import { RetryError } from "ai";
5
+ //#region src/llm/failure/schema.ts
6
+ const metadata = {
7
+ message: Type$1.String(),
8
+ retryable: Type$1.Boolean(),
9
+ status: Type$1.Optional(Type$1.Number()),
10
+ code: Type$1.Optional(Type$1.String()),
11
+ requestId: Type$1.Optional(Type$1.String()),
12
+ retryAfterMs: Type$1.Optional(Type$1.Number())
13
+ };
14
+ const variant = (tag) => Type$1.Object({
15
+ _tag: Type$1.Literal(tag),
16
+ ...metadata
17
+ });
18
+ const Authentication = Type$1.Object({
19
+ _tag: Type$1.Literal("Authentication"),
20
+ reason: Type$1.Union([
21
+ Type$1.Literal("missing"),
22
+ Type$1.Literal("invalid"),
23
+ Type$1.Literal("expired")
24
+ ]),
25
+ ...metadata
26
+ });
27
+ const Configuration = variant("Configuration");
28
+ const Authorization = variant("Authorization");
29
+ const ModelUnavailable = variant("ModelUnavailable");
30
+ const RateLimit = variant("RateLimit");
31
+ const Quota = variant("Quota");
32
+ const InvalidRequest = variant("InvalidRequest");
33
+ const ContentPolicy = variant("ContentPolicy");
34
+ const Timeout = variant("Timeout");
35
+ const Transport = variant("Transport");
36
+ const Unavailable = variant("Unavailable");
37
+ const InvalidResponse = variant("InvalidResponse");
38
+ const Unknown = variant("Unknown");
39
+ /** Provider-independent, JSON-safe failure data carried by terminal assistant messages. */
40
+ const FailureSchema = Type$1.Union([
41
+ Authentication,
42
+ Configuration,
43
+ Authorization,
44
+ ModelUnavailable,
45
+ RateLimit,
46
+ Quota,
47
+ InvalidRequest,
48
+ ContentPolicy,
49
+ Timeout,
50
+ Transport,
51
+ Unavailable,
52
+ InvalidResponse,
53
+ Unknown
54
+ ]);
55
+ const tags = /* @__PURE__ */ new Set([
56
+ "Authentication",
57
+ "Configuration",
58
+ "Authorization",
59
+ "ModelUnavailable",
60
+ "RateLimit",
61
+ "Quota",
62
+ "InvalidRequest",
63
+ "ContentPolicy",
64
+ "Timeout",
65
+ "Transport",
66
+ "Unavailable",
67
+ "InvalidResponse",
68
+ "Unknown"
69
+ ]);
70
+ const record$1 = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
71
+ /** Lightweight guard for failure data crossing package or persistence boundaries. */
72
+ function isFailure(value) {
73
+ const candidate = record$1(value);
74
+ return tags.has(candidate?._tag) && typeof candidate?.message === "string" && typeof candidate.retryable === "boolean" && (candidate.status === void 0 || typeof candidate.status === "number" && Number.isFinite(candidate.status)) && (candidate.code === void 0 || typeof candidate.code === "string") && (candidate.requestId === void 0 || typeof candidate.requestId === "string") && (candidate.retryAfterMs === void 0 || typeof candidate.retryAfterMs === "number" && Number.isFinite(candidate.retryAfterMs) && candidate.retryAfterMs >= 0) && (candidate._tag !== "Authentication" || candidate.reason === "missing" || candidate.reason === "invalid" || candidate.reason === "expired");
75
+ }
76
+ //#endregion
77
+ //#region src/llm/failure.ts
78
+ var failure_exports = /* @__PURE__ */ __exportAll({
79
+ Authentication: () => Authentication,
80
+ Authorization: () => Authorization,
81
+ Configuration: () => Configuration,
82
+ ContentPolicy: () => ContentPolicy,
83
+ FailureSchema: () => FailureSchema,
84
+ InvalidRequest: () => InvalidRequest,
85
+ InvalidResponse: () => InvalidResponse,
86
+ ModelUnavailable: () => ModelUnavailable,
87
+ Quota: () => Quota,
88
+ RateLimit: () => RateLimit,
89
+ Timeout: () => Timeout,
90
+ Transport: () => Transport,
91
+ Unavailable: () => Unavailable,
92
+ Unknown: () => Unknown,
93
+ fromMessage: () => fromMessage,
94
+ isFailure: () => isFailure,
95
+ normalize: () => normalize
96
+ });
97
+ const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
98
+ const nonEmptyString = (value) => typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
99
+ const normalizeMessage = (message) => {
100
+ return message.trim().replace(/[.!?]+$/u, "").replace(/^[A-Za-z]+/u, (word) => word.toLowerCase());
101
+ };
102
+ const errorMessage = (error) => {
103
+ const value = record(error);
104
+ const data = record(value?.data);
105
+ if (value?.name === "ProtocolAuthError") return normalizeMessage(nonEmptyString(data?.message) ?? "provider credentials are missing");
106
+ if (error instanceof Error) return normalizeMessage(nonEmptyString(error.message) ?? error.name);
107
+ return normalizeMessage(nonEmptyString(error) ?? "the provider request failed for an unknown reason");
108
+ };
109
+ const isProtocolAuthError = (error) => {
110
+ return record(error)?.name === "ProtocolAuthError";
111
+ };
112
+ const errorCode = (data) => {
113
+ const top = record(data);
114
+ const nested = record(top?.error);
115
+ return nonEmptyString(top?.code) ?? nonEmptyString(top?.type) ?? nonEmptyString(nested?.code) ?? nonEmptyString(nested?.type);
116
+ };
117
+ const header = (headers, name) => {
118
+ if (headers === void 0) return void 0;
119
+ const expected = name.toLowerCase();
120
+ for (const [key, value] of Object.entries(headers)) if (key.toLowerCase() === expected) return nonEmptyString(value);
121
+ };
122
+ const retryAfter = (headers) => {
123
+ const value = header(headers, "retry-after");
124
+ if (value === void 0) return void 0;
125
+ const seconds = Number(value);
126
+ if (Number.isFinite(seconds) && seconds >= 0) return seconds * 1e3;
127
+ };
128
+ const apiMetadata = (error) => {
129
+ const code = errorCode(error.data);
130
+ const data = record(error.data);
131
+ const nested = record(data?.error);
132
+ const structuredMessage = nonEmptyString(data?.message) ?? nonEmptyString(nested?.message);
133
+ const message = normalizeMessage(structuredMessage ?? (error.responseBody !== void 0 && error.message.includes(error.responseBody) ? `provider request failed${error.statusCode === void 0 ? "" : ` with http ${error.statusCode}`}` : errorMessage(error)));
134
+ const requestId = header(error.responseHeaders, "x-request-id") ?? header(error.responseHeaders, "request-id") ?? header(error.responseHeaders, "cf-ray");
135
+ const retryAfterMs = retryAfter(error.responseHeaders);
136
+ return {
137
+ message,
138
+ retryable: error.isRetryable,
139
+ ...error.statusCode === void 0 ? {} : { status: error.statusCode },
140
+ ...code === void 0 ? {} : { code },
141
+ ...requestId === void 0 ? {} : { requestId },
142
+ ...retryAfterMs === void 0 ? {} : { retryAfterMs }
143
+ };
144
+ };
145
+ const includes = (value, terms) => value !== void 0 && terms.some((term) => value.toLowerCase().includes(term));
146
+ const fromAPICall = (error) => {
147
+ const details = apiMetadata(error);
148
+ if (includes(details.code, [
149
+ "quota",
150
+ "billing",
151
+ "credit"
152
+ ])) return {
153
+ _tag: "Quota",
154
+ ...details
155
+ };
156
+ if (includes(details.code, [
157
+ "content_filter",
158
+ "content_policy",
159
+ "safety"
160
+ ])) return {
161
+ _tag: "ContentPolicy",
162
+ ...details
163
+ };
164
+ if (error.statusCode === 401) return {
165
+ _tag: "Authentication",
166
+ reason: "invalid",
167
+ ...details
168
+ };
169
+ if (error.statusCode === 403) return {
170
+ _tag: "Authorization",
171
+ ...details
172
+ };
173
+ if (error.statusCode === 404) return {
174
+ _tag: "ModelUnavailable",
175
+ ...details
176
+ };
177
+ if (error.statusCode === 408) return {
178
+ _tag: "Timeout",
179
+ ...details
180
+ };
181
+ if (error.statusCode === 429) return {
182
+ _tag: "RateLimit",
183
+ ...details
184
+ };
185
+ if (error.statusCode !== void 0 && error.statusCode >= 500) return {
186
+ _tag: "Unavailable",
187
+ ...details
188
+ };
189
+ if (error.statusCode === void 0) return {
190
+ _tag: "Transport",
191
+ ...details
192
+ };
193
+ if (error.statusCode >= 400 && error.statusCode < 500) return {
194
+ _tag: "InvalidRequest",
195
+ ...details
196
+ };
197
+ return {
198
+ _tag: "Unknown",
199
+ ...details
200
+ };
201
+ };
202
+ const resemblesTimeout = (error) => {
203
+ const value = error instanceof Error ? `${error.name} ${error.message}` : String(error);
204
+ return /timeout|timed out/i.test(value);
205
+ };
206
+ const resemblesTransportFailure = (error) => {
207
+ if (error instanceof TypeError) return true;
208
+ const value = error instanceof Error ? `${error.name} ${error.message}` : String(error);
209
+ return /fetch|network|socket|connection|econn|dns/i.test(value);
210
+ };
211
+ /** Normalize AI SDK and provider exceptions without retaining request bodies, response bodies, or headers. */
212
+ function normalize(error) {
213
+ if (RetryError.isInstance(error) && error.lastError !== void 0 && error.lastError !== error) return normalize(error.lastError);
214
+ if (LoadAPIKeyError.isInstance(error) || isProtocolAuthError(error)) return {
215
+ _tag: "Authentication",
216
+ reason: "missing",
217
+ message: errorMessage(error),
218
+ retryable: false
219
+ };
220
+ if (LoadSettingError.isInstance(error)) return {
221
+ _tag: "Configuration",
222
+ message: errorMessage(error),
223
+ retryable: false
224
+ };
225
+ if (NoSuchModelError.isInstance(error)) return {
226
+ _tag: "ModelUnavailable",
227
+ message: errorMessage(error),
228
+ retryable: false
229
+ };
230
+ if (APICallError.isInstance(error)) return fromAPICall(error);
231
+ if (InvalidPromptError.isInstance(error) || InvalidArgumentError.isInstance(error) || UnsupportedFunctionalityError.isInstance(error)) return {
232
+ _tag: "InvalidRequest",
233
+ message: errorMessage(error),
234
+ retryable: false
235
+ };
236
+ if (InvalidResponseDataError.isInstance(error) || JSONParseError.isInstance(error) || EmptyResponseBodyError.isInstance(error) || NoContentGeneratedError.isInstance(error) || TypeValidationError.isInstance(error)) return {
237
+ _tag: "InvalidResponse",
238
+ message: errorMessage(error),
239
+ retryable: false
240
+ };
241
+ if (resemblesTimeout(error)) return {
242
+ _tag: "Timeout",
243
+ message: errorMessage(error),
244
+ retryable: true
245
+ };
246
+ if (resemblesTransportFailure(error)) return {
247
+ _tag: "Transport",
248
+ message: errorMessage(error),
249
+ retryable: true
250
+ };
251
+ return {
252
+ _tag: "Unknown",
253
+ message: errorMessage(error),
254
+ retryable: false
255
+ };
256
+ }
257
+ /** Best-effort compatibility for terminal messages written before structured failures existed. */
258
+ function fromMessage(message) {
259
+ const normalized = normalizeMessage(message);
260
+ if (/api key/i.test(normalized) && /missing|required|not set/i.test(normalized)) return {
261
+ _tag: "Authentication",
262
+ reason: "missing",
263
+ message: normalized,
264
+ retryable: false
265
+ };
266
+ if (/api key|credential|token/i.test(normalized) && /invalid|expired|unauthorized/i.test(normalized)) return {
267
+ _tag: "Authentication",
268
+ reason: /expired/i.test(normalized) ? "expired" : "invalid",
269
+ message: normalized,
270
+ retryable: false
271
+ };
272
+ return {
273
+ _tag: "Unknown",
274
+ message: normalized,
275
+ retryable: false
276
+ };
277
+ }
278
+ //#endregion
279
+ export { Unknown as _, Authorization as a, FailureSchema as c, ModelUnavailable as d, Quota as f, Unavailable as g, Transport as h, Authentication as i, InvalidRequest as l, Timeout as m, fromMessage as n, Configuration as o, RateLimit as p, normalize as r, ContentPolicy as s, failure_exports as t, InvalidResponse as u, isFailure as v };
280
+
281
+ //# sourceMappingURL=failure-xra3YPdY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-xra3YPdY.mjs","names":["Type","record"],"sources":["../../src/llm/failure/schema.ts","../../src/llm/failure.ts"],"sourcesContent":["import Type, { type Static } from \"typebox\";\n\nconst metadata = {\n\tmessage: Type.String(),\n\tretryable: Type.Boolean(),\n\tstatus: Type.Optional(Type.Number()),\n\tcode: Type.Optional(Type.String()),\n\trequestId: Type.Optional(Type.String()),\n\tretryAfterMs: Type.Optional(Type.Number()),\n};\n\nconst variant = <TTag extends string>(tag: TTag) =>\n\tType.Object({\n\t\t_tag: Type.Literal(tag),\n\t\t...metadata,\n\t});\n\nexport const Authentication = Type.Object({\n\t_tag: Type.Literal(\"Authentication\"),\n\treason: Type.Union([Type.Literal(\"missing\"), Type.Literal(\"invalid\"), Type.Literal(\"expired\")]),\n\t...metadata,\n});\nexport const Configuration = variant(\"Configuration\");\nexport const Authorization = variant(\"Authorization\");\nexport const ModelUnavailable = variant(\"ModelUnavailable\");\nexport const RateLimit = variant(\"RateLimit\");\nexport const Quota = variant(\"Quota\");\nexport const InvalidRequest = variant(\"InvalidRequest\");\nexport const ContentPolicy = variant(\"ContentPolicy\");\nexport const Timeout = variant(\"Timeout\");\nexport const Transport = variant(\"Transport\");\nexport const Unavailable = variant(\"Unavailable\");\nexport const InvalidResponse = variant(\"InvalidResponse\");\nexport const Unknown = variant(\"Unknown\");\n\n/** Provider-independent, JSON-safe failure data carried by terminal assistant messages. */\nexport const FailureSchema = Type.Union([\n\tAuthentication,\n\tConfiguration,\n\tAuthorization,\n\tModelUnavailable,\n\tRateLimit,\n\tQuota,\n\tInvalidRequest,\n\tContentPolicy,\n\tTimeout,\n\tTransport,\n\tUnavailable,\n\tInvalidResponse,\n\tUnknown,\n]);\nexport type Failure = Static<typeof FailureSchema>;\n\nconst tags = new Set<Failure[\"_tag\"]>([\n\t\"Authentication\",\n\t\"Configuration\",\n\t\"Authorization\",\n\t\"ModelUnavailable\",\n\t\"RateLimit\",\n\t\"Quota\",\n\t\"InvalidRequest\",\n\t\"ContentPolicy\",\n\t\"Timeout\",\n\t\"Transport\",\n\t\"Unavailable\",\n\t\"InvalidResponse\",\n\t\"Unknown\",\n]);\n\nconst record = (value: unknown): Record<string, unknown> | undefined =>\n\ttypeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n\n/** Lightweight guard for failure data crossing package or persistence boundaries. */\nexport function isFailure(value: unknown): value is Failure {\n\tconst candidate = record(value);\n\treturn (\n\t\ttags.has(candidate?._tag as Failure[\"_tag\"]) &&\n\t\ttypeof candidate?.message === \"string\" &&\n\t\ttypeof candidate.retryable === \"boolean\" &&\n\t\t(candidate.status === undefined || (typeof candidate.status === \"number\" && Number.isFinite(candidate.status))) &&\n\t\t(candidate.code === undefined || typeof candidate.code === \"string\") &&\n\t\t(candidate.requestId === undefined || typeof candidate.requestId === \"string\") &&\n\t\t(candidate.retryAfterMs === undefined ||\n\t\t\t(typeof candidate.retryAfterMs === \"number\" &&\n\t\t\t\tNumber.isFinite(candidate.retryAfterMs) &&\n\t\t\t\tcandidate.retryAfterMs >= 0)) &&\n\t\t(candidate._tag !== \"Authentication\" ||\n\t\t\tcandidate.reason === \"missing\" ||\n\t\t\tcandidate.reason === \"invalid\" ||\n\t\t\tcandidate.reason === \"expired\")\n\t);\n}\n","import {\n\tAPICallError,\n\tEmptyResponseBodyError,\n\tInvalidArgumentError,\n\tInvalidPromptError,\n\tInvalidResponseDataError,\n\tJSONParseError,\n\tLoadAPIKeyError,\n\tLoadSettingError,\n\tNoContentGeneratedError,\n\tNoSuchModelError,\n\tTypeValidationError,\n\tUnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { RetryError } from \"ai\";\nimport type { Failure } from \"./failure/schema.ts\";\n\nexport * from \"./failure/schema.ts\";\n\ntype Metadata = Omit<Failure, \"_tag\" | \"reason\">;\n\nconst record = (value: unknown): Record<string, unknown> | undefined =>\n\ttypeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n\nconst nonEmptyString = (value: unknown): string | undefined =>\n\ttypeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n\nconst normalizeMessage = (message: string): string => {\n\tconst trimmed = message.trim().replace(/[.!?]+$/u, \"\");\n\treturn trimmed.replace(/^[A-Za-z]+/u, (word) => word.toLowerCase());\n};\n\nconst errorMessage = (error: unknown): string => {\n\tconst value = record(error);\n\tconst data = record(value?.data);\n\tif (value?.name === \"ProtocolAuthError\") {\n\t\treturn normalizeMessage(nonEmptyString(data?.message) ?? \"provider credentials are missing\");\n\t}\n\tif (error instanceof Error) return normalizeMessage(nonEmptyString(error.message) ?? error.name);\n\treturn normalizeMessage(nonEmptyString(error) ?? \"the provider request failed for an unknown reason\");\n};\n\nconst isProtocolAuthError = (error: unknown): boolean => {\n\tconst value = record(error);\n\treturn value?.name === \"ProtocolAuthError\";\n};\n\nconst errorCode = (data: unknown): string | undefined => {\n\tconst top = record(data);\n\tconst nested = record(top?.error);\n\treturn (\n\t\tnonEmptyString(top?.code) ??\n\t\tnonEmptyString(top?.type) ??\n\t\tnonEmptyString(nested?.code) ??\n\t\tnonEmptyString(nested?.type)\n\t);\n};\n\nconst header = (headers: Record<string, string> | undefined, name: string): string | undefined => {\n\tif (headers === undefined) return undefined;\n\tconst expected = name.toLowerCase();\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tif (key.toLowerCase() === expected) return nonEmptyString(value);\n\t}\n};\n\nconst retryAfter = (headers: Record<string, string> | undefined): number | undefined => {\n\tconst value = header(headers, \"retry-after\");\n\tif (value === undefined) return undefined;\n\tconst seconds = Number(value);\n\tif (Number.isFinite(seconds) && seconds >= 0) return seconds * 1_000;\n};\n\nconst apiMetadata = (error: APICallError): Metadata => {\n\tconst code = errorCode(error.data);\n\tconst data = record(error.data);\n\tconst nested = record(data?.error);\n\tconst structuredMessage = nonEmptyString(data?.message) ?? nonEmptyString(nested?.message);\n\tconst message = normalizeMessage(\n\t\tstructuredMessage ??\n\t\t\t(error.responseBody !== undefined && error.message.includes(error.responseBody)\n\t\t\t\t? `provider request failed${error.statusCode === undefined ? \"\" : ` with http ${error.statusCode}`}`\n\t\t\t\t: errorMessage(error)),\n\t);\n\tconst requestId =\n\t\theader(error.responseHeaders, \"x-request-id\") ??\n\t\theader(error.responseHeaders, \"request-id\") ??\n\t\theader(error.responseHeaders, \"cf-ray\");\n\tconst retryAfterMs = retryAfter(error.responseHeaders);\n\treturn {\n\t\tmessage,\n\t\tretryable: error.isRetryable,\n\t\t...(error.statusCode === undefined ? {} : { status: error.statusCode }),\n\t\t...(code === undefined ? {} : { code }),\n\t\t...(requestId === undefined ? {} : { requestId }),\n\t\t...(retryAfterMs === undefined ? {} : { retryAfterMs }),\n\t};\n};\n\nconst includes = (value: string | undefined, terms: ReadonlyArray<string>): boolean =>\n\tvalue !== undefined && terms.some((term) => value.toLowerCase().includes(term));\n\nconst fromAPICall = (error: APICallError): Failure => {\n\tconst details = apiMetadata(error);\n\tif (includes(details.code, [\"quota\", \"billing\", \"credit\"])) return { _tag: \"Quota\", ...details };\n\tif (includes(details.code, [\"content_filter\", \"content_policy\", \"safety\"])) {\n\t\treturn { _tag: \"ContentPolicy\", ...details };\n\t}\n\tif (error.statusCode === 401) return { _tag: \"Authentication\", reason: \"invalid\", ...details };\n\tif (error.statusCode === 403) return { _tag: \"Authorization\", ...details };\n\tif (error.statusCode === 404) return { _tag: \"ModelUnavailable\", ...details };\n\tif (error.statusCode === 408) return { _tag: \"Timeout\", ...details };\n\tif (error.statusCode === 429) return { _tag: \"RateLimit\", ...details };\n\tif (error.statusCode !== undefined && error.statusCode >= 500) return { _tag: \"Unavailable\", ...details };\n\tif (error.statusCode === undefined) return { _tag: \"Transport\", ...details };\n\tif (error.statusCode >= 400 && error.statusCode < 500) return { _tag: \"InvalidRequest\", ...details };\n\treturn { _tag: \"Unknown\", ...details };\n};\n\nconst resemblesTimeout = (error: unknown): boolean => {\n\tconst value = error instanceof Error ? `${error.name} ${error.message}` : String(error);\n\treturn /timeout|timed out/i.test(value);\n};\n\nconst resemblesTransportFailure = (error: unknown): boolean => {\n\tif (error instanceof TypeError) return true;\n\tconst value = error instanceof Error ? `${error.name} ${error.message}` : String(error);\n\treturn /fetch|network|socket|connection|econn|dns/i.test(value);\n};\n\n/** Normalize AI SDK and provider exceptions without retaining request bodies, response bodies, or headers. */\nexport function normalize(error: unknown): Failure {\n\tif (RetryError.isInstance(error) && error.lastError !== undefined && error.lastError !== error) {\n\t\treturn normalize(error.lastError);\n\t}\n\tif (LoadAPIKeyError.isInstance(error) || isProtocolAuthError(error)) {\n\t\treturn { _tag: \"Authentication\", reason: \"missing\", message: errorMessage(error), retryable: false };\n\t}\n\tif (LoadSettingError.isInstance(error)) {\n\t\treturn { _tag: \"Configuration\", message: errorMessage(error), retryable: false };\n\t}\n\tif (NoSuchModelError.isInstance(error)) {\n\t\treturn { _tag: \"ModelUnavailable\", message: errorMessage(error), retryable: false };\n\t}\n\tif (APICallError.isInstance(error)) return fromAPICall(error);\n\tif (\n\t\tInvalidPromptError.isInstance(error) ||\n\t\tInvalidArgumentError.isInstance(error) ||\n\t\tUnsupportedFunctionalityError.isInstance(error)\n\t) {\n\t\treturn { _tag: \"InvalidRequest\", message: errorMessage(error), retryable: false };\n\t}\n\tif (\n\t\tInvalidResponseDataError.isInstance(error) ||\n\t\tJSONParseError.isInstance(error) ||\n\t\tEmptyResponseBodyError.isInstance(error) ||\n\t\tNoContentGeneratedError.isInstance(error) ||\n\t\tTypeValidationError.isInstance(error)\n\t) {\n\t\treturn { _tag: \"InvalidResponse\", message: errorMessage(error), retryable: false };\n\t}\n\tif (resemblesTimeout(error)) return { _tag: \"Timeout\", message: errorMessage(error), retryable: true };\n\tif (resemblesTransportFailure(error)) {\n\t\treturn { _tag: \"Transport\", message: errorMessage(error), retryable: true };\n\t}\n\treturn { _tag: \"Unknown\", message: errorMessage(error), retryable: false };\n}\n\n/** Best-effort compatibility for terminal messages written before structured failures existed. */\nexport function fromMessage(message: string): Failure {\n\tconst normalized = normalizeMessage(message);\n\tif (/api key/i.test(normalized) && /missing|required|not set/i.test(normalized)) {\n\t\treturn { _tag: \"Authentication\", reason: \"missing\", message: normalized, retryable: false };\n\t}\n\tif (/api key|credential|token/i.test(normalized) && /invalid|expired|unauthorized/i.test(normalized)) {\n\t\treturn {\n\t\t\t_tag: \"Authentication\",\n\t\t\treason: /expired/i.test(normalized) ? \"expired\" : \"invalid\",\n\t\t\tmessage: normalized,\n\t\t\tretryable: false,\n\t\t};\n\t}\n\treturn { _tag: \"Unknown\", message: normalized, retryable: false };\n}\n"],"mappings":"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"}