apps 0.0.1-beta.6 → 0.0.1-beta.61
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/README.md +24 -21
- package/framework-reference.json +1 -1
- package/js/chunk-2A26IT3X.js +171 -0
- package/js/chunk-4HYFEAR7.js +49 -0
- package/js/chunk-5FHWNLCI.js +88 -0
- package/js/{chunk-M3B3DE4K.js → chunk-74YVXBKY.js} +463 -218
- package/js/{chunk-MNMNLXBL.js → chunk-7QBUFK6I.js} +316 -69
- package/js/{chunk-SB4HEPNJ.js → chunk-A4RQSTHG.js} +883 -189
- package/js/{chunk-T7GKZBLP.js → chunk-ANN7H2FL.js} +67 -55
- package/js/{chunk-NKLWZJLE.js → chunk-AQU56EPI.js} +9 -5
- package/js/chunk-CDXQDN7W.js +92 -0
- package/js/{chunk-UK573G7W.js → chunk-EOPQ727L.js} +87 -51
- package/js/{chunk-27F7W2LG.js → chunk-H2CJWXA3.js} +2 -2
- package/js/{chunk-JU7VHODU.js → chunk-H72MEDMN.js} +65 -10
- package/js/{chunk-CDL5PM2Q.js → chunk-IFJU5SYQ.js} +19082 -18402
- package/js/{chunk-VFZKSM3T.js → chunk-JPEUKEV4.js} +3 -3
- package/js/{chunk-RFVIONFX.js → chunk-JSAZHHWI.js} +79 -41
- package/js/{chunk-RJDDBDSN.js → chunk-K6P2US3D.js} +635 -89
- package/js/{chunk-5T57N25Q.js → chunk-KGCTYL2S.js} +511 -63
- package/js/{chunk-KUMBKVJD.js → chunk-KLYSEHUD.js} +2 -2
- package/js/chunk-MWKHKOTL.js +240 -0
- package/js/chunk-NFHURZBA.js +340 -0
- package/js/chunk-OD3KFKZD.js +1617 -0
- package/js/{chunk-57RKNWL2.js → chunk-PD6I2SDG.js} +4 -4
- package/js/{chunk-ITM77QPO.js → chunk-QE4JSN3X.js} +126 -31
- package/js/chunk-S34PXQUC.js +266 -0
- package/js/{chunk-B3EOZTK3.js → chunk-TLWLJ7PD.js} +2227 -453
- package/js/{chunk-IJX4CYZO.js → chunk-TUMGL2OC.js} +228 -264
- package/js/{chunk-ECQFRCH4.js → chunk-VHUR5HUL.js} +4 -3
- package/js/{chunk-IPI4MFSN.js → chunk-XBG7HHXC.js} +2 -2
- package/js/client.js +142 -94
- package/js/contracts.js +103 -26
- package/js/effect.js +19 -19
- package/js/{es-APDZKREY.js → es-DIULA3ZF.js} +62 -1659
- package/js/graphql.js +50 -40
- package/js/host.js +83 -58
- package/js/index.js +90 -61
- package/js/mcp/effect.js +23 -21
- package/js/mcp/stdio.js +44 -34
- package/js/mcp.js +76 -53
- package/js/openapi.js +4050 -1354
- package/js/react.js +2 -3
- package/js/skills/effect.js +6 -3
- package/js/skills.js +208 -81
- package/js/storage/facet.js +1 -540
- package/js/ui/auth/contracts.js +2 -2
- package/js/ui/auth.js +5 -5
- package/js/ui/contracts.js +5 -4
- package/js/ui/serving.js +8517 -214
- package/package.json +2 -3
- package/runtime.json +1 -1
- package/types/app-cache/src/index.d.ts +10 -1
- package/types/apps/src/contracts/api-response-error.d.ts +4 -0
- package/types/apps/src/contracts/app.d.ts +7 -3
- package/types/apps/src/contracts/cache.d.ts +20 -0
- package/types/apps/src/contracts/context.d.ts +19 -11
- package/types/apps/src/contracts/elicitation.d.ts +6 -6
- package/types/apps/src/contracts/events.d.ts +93 -0
- package/types/apps/src/contracts/failure.d.ts +30 -1
- package/types/apps/src/contracts/graphql.d.ts +2 -1
- package/types/apps/src/contracts/host.d.ts +48 -13
- package/types/apps/src/contracts/live.d.ts +2 -0
- package/types/apps/src/contracts/mcp.d.ts +80 -10
- package/types/apps/src/contracts/network.d.ts +84 -0
- package/types/apps/src/contracts/openapi-compile.d.ts +82 -3
- package/types/apps/src/contracts/openapi.d.ts +41 -9
- package/types/apps/src/contracts/operations.d.ts +8 -4
- package/types/apps/src/contracts/protocol-version.d.ts +2 -2
- package/types/apps/src/contracts/protocols/1.d.ts +733 -81
- package/types/apps/src/contracts/protocols/10.d.ts +1450 -0
- package/types/apps/src/contracts/protocols/2.d.ts +69 -26
- package/types/apps/src/contracts/protocols/3.d.ts +133 -33
- package/types/apps/src/contracts/protocols/4.d.ts +122 -45
- package/types/apps/src/contracts/protocols/5.d.ts +1200 -0
- package/types/apps/src/contracts/protocols/6.d.ts +1629 -0
- package/types/apps/src/contracts/protocols/7.d.ts +1785 -0
- package/types/apps/src/contracts/protocols/8.d.ts +1182 -0
- package/types/apps/src/contracts/protocols/9.d.ts +1104 -0
- package/types/apps/src/contracts/protocols/current.d.ts +2476 -0
- package/types/apps/src/contracts/protocols/oauth-6.d.ts +74 -0
- package/types/apps/src/contracts/protocols/oauth.d.ts +134 -0
- package/types/apps/src/contracts/provider-error.d.ts +9 -0
- package/types/apps/src/contracts/provider.d.ts +115 -10
- package/types/apps/src/contracts/skills.d.ts +50 -13
- package/types/apps/src/contracts/sql.d.ts +58 -0
- package/types/apps/src/contracts/ui.d.ts +19 -1
- package/types/apps/src/contracts/workflows.d.ts +6 -0
- package/types/apps/src/facet.d.ts +4 -5
- package/types/apps/src/host.d.ts +5 -0
- package/types/apps/src/implementation/account-router.d.ts +4 -3
- package/types/apps/src/implementation/authoring.d.ts +25 -5
- package/types/apps/src/implementation/browser-scripts.gen.d.ts +6 -0
- package/types/apps/src/implementation/cache.d.ts +4 -0
- package/types/apps/src/implementation/catalog-cache.d.ts +35 -4
- package/types/apps/src/implementation/elicitation.d.ts +18 -15
- package/types/apps/src/implementation/events.d.ts +59 -0
- package/types/apps/src/implementation/failure-detail.d.ts +25 -3
- package/types/apps/src/implementation/graphql-catalog.d.ts +3 -3
- package/types/apps/src/implementation/graphql.d.ts +4 -3
- package/types/apps/src/implementation/input-problems.d.ts +6 -2
- package/types/apps/src/implementation/invocation-timing.d.ts +16 -0
- package/types/apps/src/implementation/live.d.ts +2 -2
- package/types/apps/src/implementation/mcp-call.d.ts +6 -5
- package/types/apps/src/implementation/mcp-catalog.d.ts +6 -4
- package/types/apps/src/implementation/mcp-client.d.ts +17 -9
- package/types/apps/src/implementation/mcp-stdio.d.ts +1 -1
- package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
- package/types/apps/src/implementation/mcp.d.ts +20 -9
- package/types/apps/src/implementation/network.d.ts +16 -0
- package/types/apps/src/implementation/openapi-compile.d.ts +26 -6
- package/types/apps/src/implementation/openapi-document.d.ts +46 -19
- package/types/apps/src/implementation/openapi-names.d.ts +9 -4
- package/types/apps/src/implementation/openapi-request.d.ts +10 -2
- package/types/apps/src/implementation/openapi-source.d.ts +18 -0
- package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
- package/types/apps/src/implementation/operations.d.ts +17 -2
- package/types/apps/src/implementation/optimistic.d.ts +1 -1
- package/types/apps/src/implementation/protocol-operations.d.ts +3 -0
- package/types/apps/src/implementation/provider-error.d.ts +28 -1
- package/types/apps/src/implementation/provider.d.ts +19 -5
- package/types/apps/src/implementation/query-commit.d.ts +1 -1
- package/types/apps/src/implementation/router-catalog.d.ts +11 -13
- package/types/apps/src/implementation/router.d.ts +16 -5
- package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
- package/types/apps/src/implementation/schema.d.ts +90 -10
- package/types/apps/src/implementation/skills.d.ts +18 -24
- package/types/apps/src/implementation/sql.d.ts +71 -0
- package/types/apps/src/implementation/ui-account-notice.d.ts +9 -0
- package/types/apps/src/implementation/ui-auth.d.ts +1 -1
- package/types/apps/src/implementation/ui-client.d.ts +2 -2
- package/types/apps/src/implementation/ui-document.d.ts +5 -0
- package/types/apps/src/implementation/ui-errors.d.ts +1 -1
- package/types/apps/src/implementation/ui-serving.d.ts +11 -5
- package/types/apps/src/implementation/ui-watch.d.ts +1 -1
- package/types/apps/src/implementation/upstream-error.d.ts +7 -0
- package/types/apps/src/implementation/webhooks.d.ts +1 -1
- package/types/apps/src/implementation/workflows.d.ts +1 -1
- package/types/apps/src/index.d.ts +30 -12
- package/types/apps/src/mcp.d.ts +20 -1
- package/types/apps/src/openapi.d.ts +1 -1
- package/types/apps/src/react.d.ts +1 -1
- package/types/apps/src/skills.d.ts +10 -8
- package/types/telemetry/src/app-records.d.ts +42 -0
- package/types/telemetry/src/browser-operations.d.ts +7 -4
- package/types/telemetry/src/browser.d.ts +8 -3
- package/types/telemetry/src/config.d.ts +2 -2
- package/types/telemetry/src/index.d.ts +1 -0
- package/types/telemetry/src/layer.d.ts +2 -2
- package/types/telemetry/src/ownership.d.ts +56 -0
- package/types/telemetry/src/recorded-failure.d.ts +29 -0
- package/types/telemetry/src/relay.d.ts +11 -3
- package/types/telemetry/src/transport.d.ts +8 -1
- package/types/utils/src/api-error.d.ts +55 -0
- package/types/utils/src/connection-failure.d.ts +33 -0
- package/types/utils/src/recorded-message.d.ts +18 -0
- package/types/utils/src/user-facing-error.d.ts +83 -0
- package/js/chunk-6BSSI67S.js +0 -224
- package/js/chunk-MKWZPDR6.js +0 -63
- package/js/chunk-N7YDVXYJ.js +0 -186
- package/js/chunk-OE3QQTSB.js +0 -222
- package/js/chunk-PJJ24GU7.js +0 -877
- package/js/chunk-PZB6T6KU.js +0 -19
- package/js/chunk-R3EV5FTO.js +0 -97
- package/js/chunk-ZQINWV4W.js +0 -630
- package/types/app-data/src/implementation/cursor.d.ts +0 -10
- package/types/app-data/src/implementation/index-key.d.ts +0 -7
- package/types/app-data/src/implementation/promise.d.ts +0 -68
- package/types/app-data/src/implementation/range.d.ts +0 -8
- package/types/app-data/src/implementation/schema.d.ts +0 -18
- package/types/app-data/src/implementation/sqlite.d.ts +0 -11
- package/types/app-data/src/index.d.ts +0 -4
- package/types/apps/src/contracts/storage.d.ts +0 -68
- package/types/apps/src/implementation/storage.d.ts +0 -15
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
skillFromFiles
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XBG7HHXC.js";
|
|
4
4
|
import {
|
|
5
5
|
joinPath,
|
|
6
6
|
mergeMeta
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ANN7H2FL.js";
|
|
8
8
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
isShortenedUpstream,
|
|
10
|
+
parseProviderError,
|
|
11
|
+
providerError
|
|
12
|
+
} from "./chunk-2A26IT3X.js";
|
|
11
13
|
import {
|
|
12
14
|
ApiErrorResponse,
|
|
13
15
|
HostDeclarationInvalid,
|
|
@@ -15,37 +17,44 @@ import {
|
|
|
15
17
|
HostedRouter,
|
|
16
18
|
HostedTool,
|
|
17
19
|
HostedToolSummary,
|
|
20
|
+
McpCredentialsUnverified,
|
|
18
21
|
McpError,
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
McpError2,
|
|
23
|
+
SkillLoadFailed as SkillLoadFailed2
|
|
24
|
+
} from "./chunk-TLWLJ7PD.js";
|
|
21
25
|
import {
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
CacheError,
|
|
27
|
+
FailureCode,
|
|
28
|
+
FailureFieldName,
|
|
29
|
+
FetchOptionUnsupported,
|
|
30
|
+
NetworkRefused,
|
|
31
|
+
maxFailureFieldLength,
|
|
32
|
+
maxFailureFields,
|
|
33
|
+
maxFailureMessageLength,
|
|
34
|
+
maxUpstreamMessageLength
|
|
35
|
+
} from "./chunk-MWKHKOTL.js";
|
|
24
36
|
import {
|
|
25
37
|
SkillLoadFailed,
|
|
26
38
|
skillFormatLimits
|
|
27
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-H72MEDMN.js";
|
|
28
40
|
import {
|
|
29
41
|
jsonSchemaDocument
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import {
|
|
32
|
-
AppStorageError,
|
|
33
|
-
AppStorageUnavailable
|
|
34
|
-
} from "./chunk-PZB6T6KU.js";
|
|
42
|
+
} from "./chunk-KGCTYL2S.js";
|
|
35
43
|
import {
|
|
36
44
|
AccountId,
|
|
37
45
|
HttpUrl,
|
|
38
46
|
JsonObject
|
|
39
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-H2CJWXA3.js";
|
|
40
48
|
import {
|
|
41
49
|
Cause_exports,
|
|
42
50
|
Effect_exports,
|
|
51
|
+
Match_exports,
|
|
43
52
|
Option_exports,
|
|
44
53
|
Predicate_exports,
|
|
45
54
|
Redacted_exports,
|
|
46
55
|
Result_exports,
|
|
47
56
|
Schema_exports
|
|
48
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
49
58
|
|
|
50
59
|
// src/contracts/openapi.ts
|
|
51
60
|
var OpenapiErrorResponse = Schema_exports.Struct({
|
|
@@ -59,7 +68,8 @@ var OpenapiErrorResponse = Schema_exports.Struct({
|
|
|
59
68
|
});
|
|
60
69
|
var OpenapiParameter = Schema_exports.Struct({
|
|
61
70
|
name: Schema_exports.String,
|
|
62
|
-
|
|
71
|
+
/** OpenAPI 3.2's `querystring` is the whole query string, serialized from one `content` value. */
|
|
72
|
+
in: Schema_exports.Literals(["path", "query", "querystring", "header", "cookie"]),
|
|
63
73
|
required: Schema_exports.optionalKey(Schema_exports.Boolean),
|
|
64
74
|
schema: Schema_exports.optionalKey(JsonObject),
|
|
65
75
|
style: Schema_exports.optionalKey(Schema_exports.String),
|
|
@@ -84,7 +94,7 @@ var OpenapiOperation = Schema_exports.Struct({
|
|
|
84
94
|
/** The document's operationId, when it declares one. `kinds` overrides are keyed by it. */
|
|
85
95
|
operationId: Schema_exports.optionalKey(Schema_exports.String),
|
|
86
96
|
description: Schema_exports.String,
|
|
87
|
-
method: Schema_exports.Literals(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]),
|
|
97
|
+
method: Schema_exports.Literals(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS", "QUERY"]),
|
|
88
98
|
path: Schema_exports.String,
|
|
89
99
|
baseUrl: HttpUrl,
|
|
90
100
|
openapi: Schema_exports.String,
|
|
@@ -104,6 +114,7 @@ var OpenapiOperation = Schema_exports.Struct({
|
|
|
104
114
|
outputSchema: Schema_exports.optionalKey(JsonObject),
|
|
105
115
|
errorResponses: Schema_exports.optionalKey(Schema_exports.Array(OpenapiErrorResponse))
|
|
106
116
|
});
|
|
117
|
+
var isOpenapiReadMethod = (method) => method === "GET" || method === "HEAD" || method === "OPTIONS" || method === "QUERY";
|
|
107
118
|
var CredentialBinding = Schema_exports.Struct({
|
|
108
119
|
scheme: Schema_exports.String,
|
|
109
120
|
field: Schema_exports.String,
|
|
@@ -136,16 +147,30 @@ var OpenapiToolsOptions = Schema_exports.Struct({
|
|
|
136
147
|
Schema_exports.declare((value) => typeof value === "function")
|
|
137
148
|
)
|
|
138
149
|
});
|
|
150
|
+
var OpenapiFailedOperation = Schema_exports.Struct({
|
|
151
|
+
method: OpenapiOperation.fields.method,
|
|
152
|
+
path: Schema_exports.String
|
|
153
|
+
});
|
|
154
|
+
var OpenapiMediaType = Schema_exports.String.check(
|
|
155
|
+
Schema_exports.isMaxLength(128),
|
|
156
|
+
Schema_exports.isPattern(/^[\w!#$&^.+-]+\/[\w!#$&^.+-]+$/u)
|
|
157
|
+
);
|
|
139
158
|
var OpenapiError = class extends Schema_exports.TaggedError()("OpenapiError", {
|
|
140
159
|
reason: Schema_exports.Literals(["invalid_definition", "invalid_input", "request"]),
|
|
141
|
-
status: Schema_exports.optional(Schema_exports.Number)
|
|
160
|
+
status: Schema_exports.optional(Schema_exports.Number),
|
|
161
|
+
/** Absent only when the definition itself could not be read. */
|
|
162
|
+
operation: Schema_exports.optional(OpenapiFailedOperation),
|
|
163
|
+
contentType: Schema_exports.optional(OpenapiMediaType),
|
|
164
|
+
/** The response's `content-length`, when it declared one. */
|
|
165
|
+
bytes: Schema_exports.optional(Schema_exports.Int.check(Schema_exports.isGreaterThanOrEqualTo(0)))
|
|
142
166
|
}) {
|
|
143
167
|
};
|
|
144
168
|
var defaultOpenapiResponseLimits = {
|
|
145
169
|
maxBodyBytes: 16777216,
|
|
146
170
|
readTimeoutMs: 3e4
|
|
147
171
|
};
|
|
148
|
-
var
|
|
172
|
+
var isOpenapiJsonSequence = (type) => /^application\/(?:x-)?(?:ndjson|jsonl|jsonlines|json-seq)\s*(?:;|$)/i.test(type);
|
|
173
|
+
var isOpenapiTextMedia = (type) => isOpenapiJsonSequence(type) || /^(?:text\/|application\/(?:[\w.-]+\+)?(?:json|xml)|application\/(?:javascript|x-www-form-urlencoded))/i.test(
|
|
149
174
|
type
|
|
150
175
|
);
|
|
151
176
|
var isOpenapiFileSchema = (shape) => shape.contentMediaType !== void 0 && shape.contentEncoding === void 0 || shape.type === "string" && shape.format === "binary";
|
|
@@ -158,23 +183,142 @@ var openapiBinaryResultSchema = {
|
|
|
158
183
|
required: ["base64", "contentType"],
|
|
159
184
|
additionalProperties: false
|
|
160
185
|
};
|
|
161
|
-
var openapiMediaKind = (type) => type.includes("json") && !type
|
|
186
|
+
var openapiMediaKind = (type) => type.includes("json") && !isOpenapiJsonSequence(type) ? "json" : type === "application/x-www-form-urlencoded" ? "form" : type === "multipart/form-data" ? "multipart" : isOpenapiTextMedia(type) ? "text" : "binary";
|
|
187
|
+
|
|
188
|
+
// src/contracts/openapi-compile.ts
|
|
189
|
+
var OpenapiCompileErrorCode = Schema_exports.Literals([
|
|
190
|
+
"server_protocol",
|
|
191
|
+
"server_url",
|
|
192
|
+
"external_reference",
|
|
193
|
+
"circular_reference",
|
|
194
|
+
"schema_keyword",
|
|
195
|
+
"schema_reference",
|
|
196
|
+
"missing_component",
|
|
197
|
+
"openapi_version",
|
|
198
|
+
"auth_helper",
|
|
199
|
+
"auth_missing",
|
|
200
|
+
"operation_path",
|
|
201
|
+
"operation_method",
|
|
202
|
+
"duplicate_operation",
|
|
203
|
+
"server_missing",
|
|
204
|
+
"multiple_hosts",
|
|
205
|
+
"parameter_encoding",
|
|
206
|
+
"parameter_style",
|
|
207
|
+
"request_body",
|
|
208
|
+
"combined_oauth",
|
|
209
|
+
"auth_method",
|
|
210
|
+
"event_stream",
|
|
211
|
+
"input_schema",
|
|
212
|
+
"no_operations",
|
|
213
|
+
"no_supported_operations",
|
|
214
|
+
"invalid_document",
|
|
215
|
+
"source_generation",
|
|
216
|
+
"authoring_reference"
|
|
217
|
+
]);
|
|
218
|
+
var OpenapiSkippedOperation = Schema_exports.Struct({
|
|
219
|
+
/** The tool name the operation would have; reading that tool reports why it is missing. */
|
|
220
|
+
name: Schema_exports.String,
|
|
221
|
+
/** The HTTP method, such as `GET`. */
|
|
222
|
+
method: Schema_exports.String,
|
|
223
|
+
/** The path as the definition declares it. */
|
|
224
|
+
path: Schema_exports.String,
|
|
225
|
+
code: OpenapiCompileErrorCode,
|
|
226
|
+
reason: Schema_exports.String
|
|
227
|
+
});
|
|
228
|
+
var listedReasons = 8;
|
|
229
|
+
var reasonLength = 240;
|
|
230
|
+
var cut = (text) => text.length <= reasonLength ? text : `${text.slice(0, reasonLength - 1)}\u2026`;
|
|
231
|
+
var compileMessage = (error) => {
|
|
232
|
+
const skipped = error.skipped ?? [];
|
|
233
|
+
if (skipped.length === 0) return error.reason;
|
|
234
|
+
const groups = /* @__PURE__ */ new Map();
|
|
235
|
+
for (const operation of skipped) {
|
|
236
|
+
const key = JSON.stringify([operation.code, operation.reason]);
|
|
237
|
+
const group = groups.get(key);
|
|
238
|
+
if (group === void 0) groups.set(key, { first: operation, count: 1 });
|
|
239
|
+
else group.count++;
|
|
240
|
+
}
|
|
241
|
+
const example = ({ first, count }) => `${first.method} ${first.path}${count > 1 ? ` and ${count - 1} more` : ""}`;
|
|
242
|
+
const [only, ...others] = groups.values();
|
|
243
|
+
if (only !== void 0 && others.length === 0 && only.first.code === error.code && only.first.reason === error.reason)
|
|
244
|
+
return `${error.reason} Left out: ${example(only)}.`;
|
|
245
|
+
const listed = [...groups.values()].slice(0, listedReasons);
|
|
246
|
+
const rest = groups.size - listed.length;
|
|
247
|
+
return `${error.reason} Left out: ${listed.map(
|
|
248
|
+
(group) => `${example(group)} (${group.first.code}: ${cut(group.first.reason.replace(/\.$/, ""))})`
|
|
249
|
+
).join("; ")}${rest > 0 ? `; and ${rest} other reasons` : ""}.`;
|
|
250
|
+
};
|
|
251
|
+
var OpenapiCompileError = class extends Schema_exports.TaggedError()(
|
|
252
|
+
"OpenapiCompileError",
|
|
253
|
+
{
|
|
254
|
+
code: OpenapiCompileErrorCode,
|
|
255
|
+
reason: Schema_exports.String,
|
|
256
|
+
skipped: Schema_exports.optionalKey(Schema_exports.Array(OpenapiSkippedOperation)),
|
|
257
|
+
origins: Schema_exports.optionalKey(Schema_exports.Array(Schema_exports.String))
|
|
258
|
+
}
|
|
259
|
+
) {
|
|
260
|
+
get message() {
|
|
261
|
+
return compileMessage(this);
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
var OpenapiToolName = Schema_exports.Struct({
|
|
265
|
+
/** The tool name relative to the router, as `withApprovals` receives it. */
|
|
266
|
+
name: Schema_exports.String,
|
|
267
|
+
/** The HTTP method, such as `GET`. */
|
|
268
|
+
method: Schema_exports.String,
|
|
269
|
+
/** The request path, including any `pathPrefix`. */
|
|
270
|
+
path: Schema_exports.String,
|
|
271
|
+
operationId: Schema_exports.optionalKey(Schema_exports.String),
|
|
272
|
+
/** After `kinds` (keyed by `operationId`, else `name`); otherwise reading methods are queries. */
|
|
273
|
+
kind: Schema_exports.Literals(["query", "mutation"]),
|
|
274
|
+
/** Callable without credentials, so every account and a router without one expose it. */
|
|
275
|
+
public: Schema_exports.Boolean,
|
|
276
|
+
/** The `methods` and `oauth` entries whose accounts expose it. */
|
|
277
|
+
methods: Schema_exports.Array(Schema_exports.String)
|
|
278
|
+
});
|
|
279
|
+
var OpenapiToolNames = Schema_exports.Struct({
|
|
280
|
+
tools: Schema_exports.Array(OpenapiToolName),
|
|
281
|
+
/**
|
|
282
|
+
* Operations the compiler left out, and why. An operation it imports but no configured `methods`
|
|
283
|
+
* or `oauth` entry can authorize is missing from `tools` and is not listed here.
|
|
284
|
+
*/
|
|
285
|
+
skipped: Schema_exports.Array(OpenapiSkippedOperation)
|
|
286
|
+
});
|
|
162
287
|
|
|
163
288
|
// src/implementation/failure-detail.ts
|
|
164
|
-
var
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
value: "A value does not match the table's declared field schema.",
|
|
171
|
-
readonly: "Queries cannot write. Move writes into a mutation.",
|
|
172
|
-
cursor: "The pagination cursor is invalid or belongs to a different query.",
|
|
173
|
-
limit: "The operation exceeded a per-invocation app data limit.",
|
|
174
|
-
closed: "The database session closed before this operation finished.",
|
|
175
|
-
storage: "App storage failed to complete the operation.",
|
|
176
|
-
replay: "A workflow step replayed with different input than its first run."
|
|
289
|
+
var cacheMessages = {
|
|
290
|
+
capacity: "A cache key, value or batch exceeded the app cache's size limits.",
|
|
291
|
+
invalid: "The app made a cache request the app cache could not accept.",
|
|
292
|
+
unavailable: "The app cache is not available on this host.",
|
|
293
|
+
storage: "The app cache failed to complete the operation.",
|
|
294
|
+
timeout: "The app cache did not respond in time."
|
|
177
295
|
};
|
|
296
|
+
var mcpStages = {
|
|
297
|
+
connect: "connecting",
|
|
298
|
+
transport: "connecting",
|
|
299
|
+
discover: "listing its tools",
|
|
300
|
+
schema: "reading a tool's schema",
|
|
301
|
+
call: "calling a tool"
|
|
302
|
+
};
|
|
303
|
+
var mcpMessage = ({ phase, reason, status }) => {
|
|
304
|
+
const stage = mcpStages[phase];
|
|
305
|
+
return Match_exports.value(reason).pipe(
|
|
306
|
+
Match_exports.when("timeout", () => `The MCP server did not respond in time while ${stage}.`),
|
|
307
|
+
Match_exports.when("unauthorized", () => `The MCP server rejected the credentials while ${stage}.`),
|
|
308
|
+
Match_exports.when(
|
|
309
|
+
"invalid_response",
|
|
310
|
+
() => `The MCP server returned a response Executor could not use while ${stage}, such as an unreadable message or an address on another origin.`
|
|
311
|
+
),
|
|
312
|
+
Match_exports.when("invalid_input", () => "The MCP server URL or connection settings are invalid."),
|
|
313
|
+
// Only a transport failure has no answer from the server; a JSON-RPC error is an answer.
|
|
314
|
+
Match_exports.when(
|
|
315
|
+
"request",
|
|
316
|
+
() => status !== void 0 ? `The MCP server answered HTTP ${status} while ${stage}.` : phase === "transport" ? `Executor could not reach the MCP server while ${stage}.` : `The request to the MCP server failed while ${stage}.`
|
|
317
|
+
),
|
|
318
|
+
Match_exports.exhaustive
|
|
319
|
+
);
|
|
320
|
+
};
|
|
321
|
+
var unverifiedMessage = ({ anonymous }) => anonymous === "answered" ? "This MCP server answers without credentials, so Executor can't check this account. A refused key will show up when a tool is called." : `The MCP server accepted the credentials, but the same check without them failed, so Executor can't tell whether it requires them. ${Schema_exports.is(McpError)(anonymous) ? mcpMessage(anonymous) : anonymous.status === void 0 ? "The MCP server could not answer the request." : `The MCP server answered HTTP ${anonymous.status}.`}`;
|
|
178
322
|
var minimumSecretLength = 6;
|
|
179
323
|
var secretValues = (value, found) => {
|
|
180
324
|
if (typeof value === "string") {
|
|
@@ -194,54 +338,155 @@ var accountFieldSecrets = (accounts) => {
|
|
|
194
338
|
return [...found].sort((a, b) => b.length - a.length);
|
|
195
339
|
};
|
|
196
340
|
var accountSecrets = (accounts) => accountFieldSecrets(Redacted_exports.value(accounts));
|
|
197
|
-
var
|
|
198
|
-
let redacted =
|
|
341
|
+
var replaceSecrets = (text, secrets) => {
|
|
342
|
+
let redacted = text;
|
|
199
343
|
for (const secret of secrets) redacted = redacted.split(secret).join("[redacted]");
|
|
200
|
-
return redacted
|
|
344
|
+
return redacted;
|
|
201
345
|
};
|
|
346
|
+
var bound = (text, maximum) => text.length <= maximum ? text : `${text.slice(0, maximum - 1)}\u2026`;
|
|
347
|
+
var boundText = (text, secrets, maximum) => bound(replaceSecrets(text, secrets), maximum);
|
|
348
|
+
var replaceSecretStart = (text, secrets) => {
|
|
349
|
+
let longest = 0;
|
|
350
|
+
for (const secret of secrets)
|
|
351
|
+
for (let length = Math.min(secret.length - 1, text.length); length > longest; length--)
|
|
352
|
+
if (text.endsWith(secret.slice(0, length))) {
|
|
353
|
+
longest = length;
|
|
354
|
+
break;
|
|
355
|
+
}
|
|
356
|
+
return longest === 0 ? text : `${text.slice(0, -longest)}[redacted]`;
|
|
357
|
+
};
|
|
358
|
+
var boundFailureMessage = (message, secrets) => boundText(message, secrets, maxFailureMessageLength);
|
|
359
|
+
var redactUpstream = (upstream, secrets) => {
|
|
360
|
+
if (upstream?.message === void 0) return upstream;
|
|
361
|
+
const message = isShortenedUpstream(upstream.message) ? `${replaceSecretStart(replaceSecrets(upstream.message.slice(0, -1), secrets), secrets)}\u2026` : replaceSecrets(upstream.message, secrets);
|
|
362
|
+
return { code: upstream.code, message: bound(message, maxUpstreamMessageLength) };
|
|
363
|
+
};
|
|
364
|
+
var leavingProviderError = (error, secrets, phase) => providerError({
|
|
365
|
+
...error,
|
|
366
|
+
phase: error.phase ?? phase,
|
|
367
|
+
upstream: redactUpstream(error.upstream, secrets)
|
|
368
|
+
});
|
|
369
|
+
var parseMcpError = (error, secrets) => Schema_exports.decodeUnknownOption(McpError)(error).pipe(
|
|
370
|
+
Option_exports.map(({ phase, reason, status, upstream, session }) => {
|
|
371
|
+
const stated = redactUpstream(upstream, secrets);
|
|
372
|
+
return new McpError2({
|
|
373
|
+
phase,
|
|
374
|
+
reason,
|
|
375
|
+
...status === void 0 ? {} : { status },
|
|
376
|
+
...stated === void 0 ? {} : { upstream: stated },
|
|
377
|
+
...session === void 0 ? {} : { session }
|
|
378
|
+
});
|
|
379
|
+
})
|
|
380
|
+
);
|
|
381
|
+
var parseSkillLoadFailed = (error) => Schema_exports.decodeUnknownOption(SkillLoadFailed)(error).pipe(
|
|
382
|
+
Option_exports.map(
|
|
383
|
+
({ reason, message, status, missing }) => new SkillLoadFailed2({
|
|
384
|
+
reason,
|
|
385
|
+
...message ? { message } : {},
|
|
386
|
+
...status === void 0 ? {} : { status },
|
|
387
|
+
...missing === void 0 ? {} : { missing }
|
|
388
|
+
})
|
|
389
|
+
)
|
|
390
|
+
);
|
|
202
391
|
var errorName = (error) => (error.name.length > 0 ? error.name : "Error").slice(0, 128);
|
|
392
|
+
var ownCode = (error, secrets) => Predicate_exports.hasProperty(error, "code") && Schema_exports.is(FailureCode)(error.code) && error.code !== "" ? boundText(error.code, secrets, 128) : void 0;
|
|
393
|
+
var reservedFields = /* @__PURE__ */ new Set(["name", "message", "stack", "cause", "_tag"]);
|
|
394
|
+
var ownFields = (error, code, secrets) => {
|
|
395
|
+
const fields = {};
|
|
396
|
+
let count = 0;
|
|
397
|
+
for (const [key, value] of Object.entries(error)) {
|
|
398
|
+
if (count === maxFailureFields) break;
|
|
399
|
+
if (reservedFields.has(key) || key === "code" && code !== void 0) continue;
|
|
400
|
+
if (!Schema_exports.is(FailureFieldName)(key)) continue;
|
|
401
|
+
if (typeof value === "string") fields[key] = boundText(value, secrets, maxFailureFieldLength);
|
|
402
|
+
else if (typeof value === "boolean" || typeof value === "number" && Number.isFinite(value))
|
|
403
|
+
fields[key] = value;
|
|
404
|
+
else continue;
|
|
405
|
+
count++;
|
|
406
|
+
}
|
|
407
|
+
return count === 0 ? void 0 : fields;
|
|
408
|
+
};
|
|
203
409
|
var ownMessage = (error) => {
|
|
204
410
|
const cause = error.cause;
|
|
205
411
|
const suffix = cause instanceof Error && cause.message.length > 0 ? ` (caused by ${errorName(cause)}: ${cause.message})` : "";
|
|
206
412
|
return error.message.length > 0 ? `${error.message}${suffix}` : void 0;
|
|
207
413
|
};
|
|
208
414
|
var describeFailure = (error) => error instanceof Error ? `${errorName(error)}: ${ownMessage(error) ?? "(no message)"}` : typeof error === "string" ? error : `A non-Error ${error === null ? "null" : typeof error} value was thrown`;
|
|
415
|
+
var openapiFailureMessage = (error) => {
|
|
416
|
+
const operation = error.operation === void 0 ? "The API request" : `${error.operation.method} ${error.operation.path}`;
|
|
417
|
+
if (error.reason === "invalid_definition")
|
|
418
|
+
return "The API's OpenAPI definition for this operation is invalid.";
|
|
419
|
+
if (error.reason === "invalid_input")
|
|
420
|
+
return error.operation === void 0 ? "The input could not be encoded as a request for this API operation." : `The input could not be encoded as a request for ${operation}.`;
|
|
421
|
+
if (error.status === void 0) return `${operation} failed before a response arrived.`;
|
|
422
|
+
const shape = [error.contentType, error.bytes === void 0 ? void 0 : `${error.bytes} bytes`].filter((part) => part !== void 0).join(", ");
|
|
423
|
+
const response = `${operation} responded with HTTP ${error.status}${shape === "" ? "" : ` (${shape})`}`;
|
|
424
|
+
return error.status >= 200 && error.status < 300 ? `${response}, but its body could not be read within the response limits.` : `${response}, which matches no error with a message in the API's OpenAPI document.`;
|
|
425
|
+
};
|
|
209
426
|
var failureDetail = (error, secrets) => {
|
|
210
|
-
if (Schema_exports.is(
|
|
427
|
+
if (Schema_exports.is(CacheError)(error))
|
|
211
428
|
return {
|
|
212
429
|
source: "storage",
|
|
213
|
-
errorName: "
|
|
430
|
+
errorName: "CacheError",
|
|
214
431
|
code: error.reason,
|
|
215
|
-
message:
|
|
432
|
+
message: cacheMessages[error.reason]
|
|
216
433
|
};
|
|
217
|
-
if (Schema_exports.is(
|
|
434
|
+
if (Schema_exports.is(OpenapiError)(error))
|
|
218
435
|
return {
|
|
219
|
-
source: "
|
|
220
|
-
errorName: "
|
|
221
|
-
|
|
436
|
+
source: "service",
|
|
437
|
+
errorName: "OpenapiError",
|
|
438
|
+
code: error.reason,
|
|
439
|
+
message: boundFailureMessage(openapiFailureMessage(error), secrets)
|
|
222
440
|
};
|
|
223
|
-
if (Schema_exports.is(
|
|
441
|
+
if (Schema_exports.is(McpError)(error))
|
|
224
442
|
return {
|
|
225
|
-
source: "
|
|
226
|
-
errorName: "
|
|
227
|
-
|
|
443
|
+
source: "service",
|
|
444
|
+
errorName: "McpError",
|
|
445
|
+
code: error.reason,
|
|
446
|
+
message: mcpMessage(error)
|
|
228
447
|
};
|
|
229
|
-
if (Schema_exports.is(
|
|
448
|
+
if (Schema_exports.is(McpCredentialsUnverified)(error))
|
|
230
449
|
return {
|
|
231
450
|
source: "service",
|
|
232
|
-
errorName: "
|
|
233
|
-
code: error.reason,
|
|
234
|
-
message: error
|
|
451
|
+
errorName: "McpCredentialsUnverified",
|
|
452
|
+
code: error.anonymous === "answered" ? "anonymous_access" : error.anonymous.reason,
|
|
453
|
+
message: unverifiedMessage(error)
|
|
235
454
|
};
|
|
236
|
-
if (error
|
|
455
|
+
if (Schema_exports.is(OpenapiCompileError)(error))
|
|
456
|
+
return {
|
|
457
|
+
source: "app",
|
|
458
|
+
errorName: "OpenapiCompileError",
|
|
459
|
+
code: error.code,
|
|
460
|
+
message: boundFailureMessage(error.message, secrets)
|
|
461
|
+
};
|
|
462
|
+
if (Schema_exports.is(NetworkRefused)(error))
|
|
463
|
+
return {
|
|
464
|
+
source: "app",
|
|
465
|
+
errorName: "NetworkRefused",
|
|
466
|
+
code: error.refusal.reason,
|
|
467
|
+
message: boundFailureMessage(error.message, secrets)
|
|
468
|
+
};
|
|
469
|
+
if (Schema_exports.is(FetchOptionUnsupported)(error))
|
|
470
|
+
return {
|
|
471
|
+
source: "app",
|
|
472
|
+
errorName: "FetchOptionUnsupported",
|
|
473
|
+
code: error.option,
|
|
474
|
+
message: boundFailureMessage(error.message, secrets)
|
|
475
|
+
};
|
|
476
|
+
if (error instanceof Error) {
|
|
477
|
+
const code = ownCode(error, secrets);
|
|
478
|
+
const fields = ownFields(error, code, secrets);
|
|
237
479
|
return {
|
|
238
480
|
source: "app",
|
|
239
481
|
errorName: errorName(error),
|
|
482
|
+
...code === void 0 ? {} : { code },
|
|
240
483
|
message: boundFailureMessage(
|
|
241
484
|
ownMessage(error) ?? `${errorName(error)} was thrown without a message.`,
|
|
242
485
|
secrets
|
|
243
|
-
)
|
|
486
|
+
),
|
|
487
|
+
...fields === void 0 ? {} : { fields }
|
|
244
488
|
};
|
|
489
|
+
}
|
|
245
490
|
if (typeof error === "string")
|
|
246
491
|
return { source: "app", errorName: "string", message: boundFailureMessage(error, secrets) };
|
|
247
492
|
return {
|
|
@@ -254,21 +499,11 @@ var failureDetail = (error, secrets) => {
|
|
|
254
499
|
// src/implementation/router-catalog.ts
|
|
255
500
|
var safeFailure = (error, secrets) => {
|
|
256
501
|
const provider = parseProviderError(error);
|
|
257
|
-
if (Option_exports.isSome(provider)) return provider.value;
|
|
258
|
-
const skills =
|
|
259
|
-
if (Option_exports.isSome(skills))
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
reason,
|
|
263
|
-
...message ? { message } : {},
|
|
264
|
-
...status === void 0 ? {} : { status }
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
const mcp = Schema_exports.decodeUnknownOption(McpError)(error);
|
|
268
|
-
if (Option_exports.isSome(mcp)) {
|
|
269
|
-
const { phase, reason, status } = mcp.value;
|
|
270
|
-
return new McpError({ phase, reason, ...status === void 0 ? {} : { status } });
|
|
271
|
-
}
|
|
502
|
+
if (Option_exports.isSome(provider)) return leavingProviderError(provider.value, secrets, "discover");
|
|
503
|
+
const skills = parseSkillLoadFailed(error);
|
|
504
|
+
if (Option_exports.isSome(skills)) return skills.value;
|
|
505
|
+
const mcp = parseMcpError(error, secrets);
|
|
506
|
+
if (Option_exports.isSome(mcp)) return mcp.value;
|
|
272
507
|
if (Schema_exports.is(HostDeclarationInvalid)(error)) return error;
|
|
273
508
|
return new HostEvaluationFailed(failureDetail(error, secrets));
|
|
274
509
|
};
|
|
@@ -490,17 +725,29 @@ export {
|
|
|
490
725
|
OpenapiParameter,
|
|
491
726
|
OpenapiRequestBody,
|
|
492
727
|
OpenapiOperation,
|
|
728
|
+
isOpenapiReadMethod,
|
|
493
729
|
OpenapiToolsOptions,
|
|
730
|
+
OpenapiMediaType,
|
|
494
731
|
OpenapiError,
|
|
495
732
|
defaultOpenapiResponseLimits,
|
|
733
|
+
isOpenapiJsonSequence,
|
|
496
734
|
isOpenapiTextMedia,
|
|
497
735
|
isOpenapiFileSchema,
|
|
498
736
|
openapiBinaryResultSchema,
|
|
499
737
|
openapiMediaKind,
|
|
738
|
+
OpenapiCompileErrorCode,
|
|
739
|
+
OpenapiSkippedOperation,
|
|
740
|
+
OpenapiCompileError,
|
|
741
|
+
OpenapiToolName,
|
|
742
|
+
OpenapiToolNames,
|
|
500
743
|
accountSecrets,
|
|
501
744
|
boundFailureMessage,
|
|
745
|
+
leavingProviderError,
|
|
746
|
+
parseMcpError,
|
|
747
|
+
parseSkillLoadFailed,
|
|
502
748
|
describeFailure,
|
|
503
749
|
failureDetail,
|
|
750
|
+
operationDescription,
|
|
504
751
|
fixedRouter,
|
|
505
752
|
readCatalog,
|
|
506
753
|
routerSkills
|