apps 0.0.1-beta.4 → 0.0.1-beta.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/README.md +68 -44
  2. package/framework-reference.json +1 -1
  3. package/js/{chunk-QKHR7BMF.js → chunk-3MMG2H6M.js} +89 -53
  4. package/js/chunk-4TLZGG4B.js +729 -0
  5. package/js/chunk-6KABJTDO.js +255 -0
  6. package/js/{chunk-FDNTX5QJ.js → chunk-CQD3WSYH.js} +2 -2
  7. package/js/{chunk-EQB7JMAL.js → chunk-DHX2OI2X.js} +146 -31
  8. package/js/{chunk-EVJUVWN2.js → chunk-DKUEYTYD.js} +463 -218
  9. package/js/chunk-EM4UL26F.js +118 -0
  10. package/js/{chunk-WFSQXYUT.js → chunk-GHXRRFZA.js} +418 -52
  11. package/js/{chunk-5MQZEB6Y.js → chunk-KANDIVIH.js} +40 -12
  12. package/js/chunk-KAQD3DTI.js +16 -0
  13. package/js/chunk-KIM5HXNK.js +49 -0
  14. package/js/{chunk-FW5HBOIK.js → chunk-MXDKXAY4.js} +19117 -18309
  15. package/js/{chunk-2VPJHFOU.js → chunk-MYF7KWUB.js} +128 -24
  16. package/js/{chunk-T2LAZCAD.js → chunk-NKWWPJYX.js} +3 -3
  17. package/js/chunk-OD3KFKZD.js +1617 -0
  18. package/js/{chunk-3M2MEDNL.js → chunk-OTCLXFLL.js} +1337 -188
  19. package/js/chunk-P7MGDPFD.js +240 -0
  20. package/js/chunk-PDS2E2OZ.js +42 -0
  21. package/js/{chunk-ZCAMUXSG.js → chunk-PNVCCB4L.js} +432 -79
  22. package/js/{chunk-D47C7KG5.js → chunk-RIXVGVA6.js} +2 -2
  23. package/js/{chunk-6VRYO2BG.js → chunk-SALJXSS3.js} +779 -251
  24. package/js/{chunk-NQ3OMCA5.js → chunk-TT6OU4UG.js} +2 -2
  25. package/js/{chunk-YEJOQEII.js → chunk-UOZMSUJ2.js} +61 -9
  26. package/js/{chunk-G7ZIRKMK.js → chunk-VIU2XXA7.js} +228 -264
  27. package/js/{chunk-HDJH3RPR.js → chunk-VJQXXOQ3.js} +4 -4
  28. package/js/chunk-XDGUGB2A.js +156 -0
  29. package/js/{chunk-SATWJKN6.js → chunk-YQ35E7KS.js} +2 -2
  30. package/js/chunk-ZUKBIHMK.js +92 -0
  31. package/js/client.js +122 -88
  32. package/js/contracts.js +116 -25
  33. package/js/effect.js +19 -20
  34. package/js/{es-APDZKREY.js → es-DIULA3ZF.js} +62 -1659
  35. package/js/graphql.js +57 -55
  36. package/js/host.js +19 -20
  37. package/js/index.js +245 -212
  38. package/js/mcp/effect.js +23 -22
  39. package/js/mcp/stdio.js +34 -30
  40. package/js/mcp.js +104 -68
  41. package/js/openapi.js +4087 -1503
  42. package/js/react.js +2 -3
  43. package/js/skills/effect.js +6 -3
  44. package/js/skills.js +147 -65
  45. package/js/storage/facet.js +1 -540
  46. package/js/ui/auth/contracts.js +2 -2
  47. package/js/ui/auth.js +5 -5
  48. package/js/ui/contracts.js +5 -4
  49. package/js/ui/serving.js +8517 -214
  50. package/package.json +2 -3
  51. package/runtime.json +1 -1
  52. package/types/app-data/src/contracts/database.d.ts +33 -6
  53. package/types/apps/src/contracts/api-response-error.d.ts +4 -0
  54. package/types/apps/src/contracts/app.d.ts +7 -8
  55. package/types/apps/src/contracts/cache.d.ts +14 -0
  56. package/types/apps/src/contracts/context.d.ts +12 -11
  57. package/types/apps/src/contracts/elicitation.d.ts +6 -6
  58. package/types/apps/src/contracts/failure.d.ts +54 -0
  59. package/types/apps/src/contracts/graphql.d.ts +2 -1
  60. package/types/apps/src/contracts/host.d.ts +44 -17
  61. package/types/apps/src/contracts/live.d.ts +2 -0
  62. package/types/apps/src/contracts/mcp.d.ts +96 -10
  63. package/types/apps/src/contracts/network.d.ts +84 -0
  64. package/types/apps/src/contracts/openapi-compile.d.ts +32 -3
  65. package/types/apps/src/contracts/openapi.d.ts +45 -9
  66. package/types/apps/src/contracts/operations.d.ts +8 -9
  67. package/types/apps/src/contracts/protocol-version.d.ts +2 -2
  68. package/types/apps/src/contracts/protocols/1.d.ts +263 -74
  69. package/types/apps/src/contracts/protocols/10.d.ts +1450 -0
  70. package/types/apps/src/contracts/protocols/2.d.ts +66 -24
  71. package/types/apps/src/contracts/protocols/3.d.ts +715 -0
  72. package/types/apps/src/contracts/protocols/4.d.ts +1297 -0
  73. package/types/apps/src/contracts/protocols/5.d.ts +1174 -0
  74. package/types/apps/src/contracts/protocols/6.d.ts +1620 -0
  75. package/types/apps/src/contracts/protocols/7.d.ts +1784 -0
  76. package/types/apps/src/contracts/protocols/8.d.ts +1130 -0
  77. package/types/apps/src/contracts/protocols/9.d.ts +1106 -0
  78. package/types/apps/src/contracts/protocols/oauth.d.ts +89 -0
  79. package/types/apps/src/contracts/provider-error.d.ts +9 -0
  80. package/types/apps/src/contracts/provider.d.ts +115 -10
  81. package/types/apps/src/contracts/router.d.ts +59 -0
  82. package/types/apps/src/contracts/skills.d.ts +39 -9
  83. package/types/apps/src/contracts/sql.d.ts +58 -0
  84. package/types/apps/src/contracts/ui.d.ts +19 -1
  85. package/types/apps/src/contracts/workflows.d.ts +40 -3
  86. package/types/apps/src/facet.d.ts +4 -5
  87. package/types/apps/src/graphql.d.ts +1 -3
  88. package/types/apps/src/implementation/account-router.d.ts +12 -0
  89. package/types/apps/src/implementation/app.d.ts +5 -4
  90. package/types/apps/src/implementation/browser-scripts.gen.d.ts +6 -0
  91. package/types/apps/src/implementation/catalog-cache.d.ts +32 -5
  92. package/types/apps/src/implementation/elicitation.d.ts +9 -9
  93. package/types/apps/src/implementation/failure-detail.d.ts +47 -0
  94. package/types/apps/src/implementation/graphql-catalog.d.ts +4 -7
  95. package/types/apps/src/implementation/graphql.d.ts +4 -3
  96. package/types/apps/src/implementation/input-problems.d.ts +4 -1
  97. package/types/apps/src/implementation/live.d.ts +2 -2
  98. package/types/apps/src/implementation/mcp-call.d.ts +6 -5
  99. package/types/apps/src/implementation/mcp-catalog.d.ts +7 -8
  100. package/types/apps/src/implementation/mcp-client.d.ts +49 -25
  101. package/types/apps/src/implementation/mcp-stdio.d.ts +1 -1
  102. package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
  103. package/types/apps/src/implementation/mcp.d.ts +52 -25
  104. package/types/apps/src/implementation/network.d.ts +16 -0
  105. package/types/apps/src/implementation/openapi-compile.d.ts +27 -6
  106. package/types/apps/src/implementation/openapi-document.d.ts +46 -19
  107. package/types/apps/src/implementation/openapi-names.d.ts +9 -4
  108. package/types/apps/src/implementation/openapi-request.d.ts +10 -2
  109. package/types/apps/src/implementation/openapi-source.d.ts +8 -6
  110. package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
  111. package/types/apps/src/implementation/operations.d.ts +36 -3
  112. package/types/apps/src/implementation/optimistic.d.ts +1 -1
  113. package/types/apps/src/implementation/protocol-operations.d.ts +6 -4
  114. package/types/apps/src/implementation/provider-error.d.ts +28 -1
  115. package/types/apps/src/implementation/provider.d.ts +19 -5
  116. package/types/apps/src/implementation/query-commit.d.ts +1 -1
  117. package/types/apps/src/implementation/router-catalog.d.ts +223 -0
  118. package/types/apps/src/implementation/router.d.ts +68 -0
  119. package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
  120. package/types/apps/src/implementation/schema.d.ts +86 -11
  121. package/types/apps/src/implementation/skills.d.ts +18 -24
  122. package/types/apps/src/implementation/sql.d.ts +66 -0
  123. package/types/apps/src/implementation/ui-account-notice.d.ts +9 -0
  124. package/types/apps/src/implementation/ui-auth.d.ts +1 -1
  125. package/types/apps/src/implementation/ui-client.d.ts +2 -2
  126. package/types/apps/src/implementation/ui-document.d.ts +5 -0
  127. package/types/apps/src/implementation/ui-errors.d.ts +1 -1
  128. package/types/apps/src/implementation/ui-serving.d.ts +11 -5
  129. package/types/apps/src/implementation/ui-watch.d.ts +1 -1
  130. package/types/apps/src/implementation/upstream-error.d.ts +7 -0
  131. package/types/apps/src/implementation/webhooks.d.ts +1 -1
  132. package/types/apps/src/implementation/workflow-context.d.ts +11 -3
  133. package/types/apps/src/index.d.ts +30 -13
  134. package/types/apps/src/mcp-stdio.d.ts +2 -5
  135. package/types/apps/src/mcp.d.ts +25 -5
  136. package/types/apps/src/openapi.d.ts +6 -6
  137. package/types/apps/src/react.d.ts +1 -1
  138. package/types/apps/src/skills.d.ts +10 -8
  139. package/types/telemetry/src/app-records.d.ts +42 -0
  140. package/types/telemetry/src/browser-operations.d.ts +6 -3
  141. package/types/telemetry/src/browser.d.ts +2 -2
  142. package/types/telemetry/src/config.d.ts +2 -2
  143. package/types/telemetry/src/layer.d.ts +2 -2
  144. package/types/telemetry/src/recorded-failure.d.ts +20 -0
  145. package/types/telemetry/src/relay.d.ts +2 -2
  146. package/types/telemetry/src/transport.d.ts +8 -1
  147. package/types/utils/src/api-error.d.ts +53 -0
  148. package/types/utils/src/recorded-message.d.ts +15 -0
  149. package/js/chunk-BMOIAIVR.js +0 -138
  150. package/js/chunk-DHUDODG5.js +0 -213
  151. package/js/chunk-FZJOYIZO.js +0 -19
  152. package/js/chunk-LGIYBDWA.js +0 -85
  153. package/js/chunk-M6ZRRIBI.js +0 -877
  154. package/js/chunk-PLCMJREA.js +0 -590
  155. package/js/chunk-PYUYJRSK.js +0 -93
  156. package/js/chunk-SWPD52J7.js +0 -35
  157. package/js/chunk-W7D7WVSY.js +0 -18
  158. package/js/chunk-Z5NMEGJN.js +0 -29
  159. package/js/chunk-ZJWDMTE3.js +0 -63
  160. package/types/app-data/src/implementation/cursor.d.ts +0 -10
  161. package/types/app-data/src/implementation/index-key.d.ts +0 -7
  162. package/types/app-data/src/implementation/promise.d.ts +0 -68
  163. package/types/app-data/src/implementation/range.d.ts +0 -8
  164. package/types/app-data/src/implementation/schema.d.ts +0 -33
  165. package/types/app-data/src/implementation/sqlite.d.ts +0 -11
  166. package/types/app-data/src/index.d.ts +0 -4
  167. package/types/apps/src/contracts/dynamic-tools.d.ts +0 -13
  168. package/types/apps/src/contracts/storage.d.ts +0 -68
  169. package/types/apps/src/implementation/account-operations.d.ts +0 -151
  170. package/types/apps/src/implementation/dynamic-tools.d.ts +0 -8
  171. package/types/apps/src/implementation/storage.d.ts +0 -13
@@ -0,0 +1,729 @@
1
+ import {
2
+ skillFromFiles
3
+ } from "./chunk-CQD3WSYH.js";
4
+ import {
5
+ joinPath,
6
+ mergeMeta
7
+ } from "./chunk-6KABJTDO.js";
8
+ import {
9
+ isShortenedUpstream,
10
+ parseProviderError,
11
+ providerError
12
+ } from "./chunk-EM4UL26F.js";
13
+ import {
14
+ ApiErrorResponse,
15
+ HostDeclarationInvalid,
16
+ HostEvaluationFailed,
17
+ HostedRouter,
18
+ HostedTool,
19
+ HostedToolSummary,
20
+ McpCredentialsUnverified,
21
+ McpError,
22
+ McpError2,
23
+ SkillLoadFailed as SkillLoadFailed2
24
+ } from "./chunk-OTCLXFLL.js";
25
+ import {
26
+ CacheError,
27
+ FailureCode,
28
+ FailureFieldName,
29
+ FetchOptionUnsupported,
30
+ NetworkRefused,
31
+ maxFailureFieldLength,
32
+ maxFailureFields,
33
+ maxFailureMessageLength,
34
+ maxUpstreamMessageLength
35
+ } from "./chunk-P7MGDPFD.js";
36
+ import {
37
+ SkillLoadFailed,
38
+ skillFormatLimits
39
+ } from "./chunk-UOZMSUJ2.js";
40
+ import {
41
+ jsonSchemaDocument
42
+ } from "./chunk-GHXRRFZA.js";
43
+ import {
44
+ AccountId,
45
+ HttpUrl,
46
+ JsonObject
47
+ } from "./chunk-YQ35E7KS.js";
48
+ import {
49
+ Cause_exports,
50
+ Effect_exports,
51
+ Match_exports,
52
+ Option_exports,
53
+ Predicate_exports,
54
+ Redacted_exports,
55
+ Result_exports,
56
+ Schema_exports
57
+ } from "./chunk-MXDKXAY4.js";
58
+
59
+ // src/contracts/openapi.ts
60
+ var OpenapiErrorResponse = Schema_exports.Struct({
61
+ code: ApiErrorResponse.fields.code,
62
+ status: ApiErrorResponse.fields.status,
63
+ message: Schema_exports.Union([
64
+ Schema_exports.Struct({ source: Schema_exports.Literal("body") }),
65
+ Schema_exports.Struct({ source: Schema_exports.Literal("schema"), value: ApiErrorResponse.fields.message })
66
+ ]),
67
+ schema: JsonObject
68
+ });
69
+ var OpenapiParameter = Schema_exports.Struct({
70
+ name: Schema_exports.String,
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"]),
73
+ required: Schema_exports.optionalKey(Schema_exports.Boolean),
74
+ schema: Schema_exports.optionalKey(JsonObject),
75
+ style: Schema_exports.optionalKey(Schema_exports.String),
76
+ explode: Schema_exports.optionalKey(Schema_exports.Boolean),
77
+ allowReserved: Schema_exports.optionalKey(Schema_exports.Boolean),
78
+ allowEmptyValue: Schema_exports.optionalKey(Schema_exports.Boolean),
79
+ content: Schema_exports.optionalKey(JsonObject)
80
+ });
81
+ var OpenapiRequestBody = Schema_exports.Struct({
82
+ required: Schema_exports.optionalKey(Schema_exports.Boolean),
83
+ content: Schema_exports.Record(
84
+ Schema_exports.String,
85
+ Schema_exports.Struct({
86
+ schema: Schema_exports.optionalKey(JsonObject),
87
+ encoding: Schema_exports.optionalKey(JsonObject)
88
+ })
89
+ )
90
+ });
91
+ var OpenapiOperation = Schema_exports.Struct({
92
+ /** The tool name after `queries.` or `mutations.`, grouped as `<group>.<leaf>`. */
93
+ name: Schema_exports.NonEmptyString,
94
+ /** The document's operationId, when it declares one. `kinds` overrides are keyed by it. */
95
+ operationId: Schema_exports.optionalKey(Schema_exports.String),
96
+ description: Schema_exports.String,
97
+ method: Schema_exports.Literals(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS", "QUERY"]),
98
+ path: Schema_exports.String,
99
+ baseUrl: HttpUrl,
100
+ openapi: Schema_exports.String,
101
+ securitySchemes: Schema_exports.Record(Schema_exports.String, JsonObject),
102
+ /** The resolved OpenAPI Operation Object; Executor schemas remain separate. */
103
+ request: Schema_exports.Struct({
104
+ parameters: Schema_exports.Array(OpenapiParameter),
105
+ requestBody: Schema_exports.optionalKey(OpenapiRequestBody),
106
+ security: Schema_exports.Array(Schema_exports.Record(Schema_exports.String, Schema_exports.Array(Schema_exports.String))),
107
+ responses: Schema_exports.Record(Schema_exports.String, JsonObject)
108
+ }),
109
+ /** Streams remain in the metadata but cannot run through a single-result tool call. */
110
+ streaming: Schema_exports.optionalKey(Schema_exports.Literal(true)),
111
+ /** The operation's OpenAPI tags, shown to agents as labels within its router. */
112
+ tags: Schema_exports.optionalKey(Schema_exports.Array(Schema_exports.NonEmptyString)),
113
+ input: JsonObject,
114
+ outputSchema: Schema_exports.optionalKey(JsonObject),
115
+ errorResponses: Schema_exports.optionalKey(Schema_exports.Array(OpenapiErrorResponse))
116
+ });
117
+ var isOpenapiReadMethod = (method) => method === "GET" || method === "HEAD" || method === "OPTIONS" || method === "QUERY";
118
+ var CredentialBinding = Schema_exports.Struct({
119
+ scheme: Schema_exports.String,
120
+ field: Schema_exports.String,
121
+ part: Schema_exports.Literals(["value", "username", "password"]),
122
+ prefix: Schema_exports.String
123
+ });
124
+ var OpenapiAccount = Schema_exports.Struct({
125
+ id: Schema_exports.optional(AccountId),
126
+ method: Schema_exports.String,
127
+ fields: Schema_exports.Record(Schema_exports.String, Schema_exports.Unknown)
128
+ });
129
+ var OpenapiParameterDefaults = Schema_exports.Struct({
130
+ path: Schema_exports.optionalKey(Schema_exports.Record(Schema_exports.String, Schema_exports.String)),
131
+ query: Schema_exports.optionalKey(Schema_exports.Record(Schema_exports.String, Schema_exports.String)),
132
+ headers: Schema_exports.optionalKey(Schema_exports.Record(Schema_exports.String, Schema_exports.String))
133
+ });
134
+ var OpenapiToolsOptions = Schema_exports.Struct({
135
+ operations: Schema_exports.Array(OpenapiOperation),
136
+ /**
137
+ * Component schemas stored once per app and referenced as `#/$defs/<name>`. Operations
138
+ * generated before shared definitions carry their own `$defs` and omit this.
139
+ */
140
+ definitions: Schema_exports.optional(Schema_exports.Record(Schema_exports.String, JsonObject)),
141
+ methods: Schema_exports.Record(Schema_exports.String, Schema_exports.Array(CredentialBinding)),
142
+ oauth: Schema_exports.Array(Schema_exports.String),
143
+ account: Schema_exports.optional(OpenapiAccount),
144
+ parameterDefaults: Schema_exports.optional(OpenapiParameterDefaults),
145
+ signal: Schema_exports.optional(Schema_exports.instanceOf(AbortSignal)),
146
+ fetch: Schema_exports.optional(
147
+ Schema_exports.declare((value) => typeof value === "function")
148
+ )
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
+ );
158
+ var OpenapiError = class extends Schema_exports.TaggedError()("OpenapiError", {
159
+ reason: Schema_exports.Literals(["invalid_definition", "invalid_input", "request"]),
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)))
166
+ }) {
167
+ };
168
+ var defaultOpenapiResponseLimits = {
169
+ maxBodyBytes: 16777216,
170
+ readTimeoutMs: 3e4
171
+ };
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(
174
+ type
175
+ );
176
+ var isOpenapiFileSchema = (shape) => shape.contentMediaType !== void 0 && shape.contentEncoding === void 0 || shape.type === "string" && shape.format === "binary";
177
+ var openapiBinaryResultSchema = {
178
+ type: "object",
179
+ properties: {
180
+ base64: { type: "string", contentEncoding: "base64" },
181
+ contentType: { type: "string" }
182
+ },
183
+ required: ["base64", "contentType"],
184
+ additionalProperties: false
185
+ };
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
+
265
+ // src/implementation/failure-detail.ts
266
+ var cacheMessages = {
267
+ capacity: "A cache key, value or batch exceeded the app cache's size limits.",
268
+ invalid: "The app made a cache request the app cache could not accept.",
269
+ unavailable: "The app cache is not available on this host.",
270
+ storage: "The app cache failed to complete the operation.",
271
+ timeout: "The app cache did not respond in time."
272
+ };
273
+ var mcpStages = {
274
+ connect: "connecting",
275
+ transport: "connecting",
276
+ discover: "listing its tools",
277
+ schema: "reading a tool's schema",
278
+ call: "calling a tool"
279
+ };
280
+ var mcpMessage = ({ phase, reason, status }) => {
281
+ const stage = mcpStages[phase];
282
+ return Match_exports.value(reason).pipe(
283
+ Match_exports.when("timeout", () => `The MCP server did not respond in time while ${stage}.`),
284
+ Match_exports.when("unauthorized", () => `The MCP server rejected the credentials while ${stage}.`),
285
+ Match_exports.when(
286
+ "invalid_response",
287
+ () => `The MCP server returned a response Executor could not use while ${stage}, such as an unreadable message or an address on another origin.`
288
+ ),
289
+ Match_exports.when("invalid_input", () => "The MCP server URL or connection settings are invalid."),
290
+ // Only a transport failure has no answer from the server; a JSON-RPC error is an answer.
291
+ Match_exports.when(
292
+ "request",
293
+ () => 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}.`
294
+ ),
295
+ Match_exports.exhaustive
296
+ );
297
+ };
298
+ 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}.`}`;
299
+ var minimumSecretLength = 6;
300
+ var secretValues = (value, found) => {
301
+ if (typeof value === "string") {
302
+ if (value.length >= minimumSecretLength) found.add(value);
303
+ } else if (Array.isArray(value)) for (const item of value) secretValues(item, found);
304
+ else if (Predicate_exports.isObject(value))
305
+ for (const item of Object.values(value)) secretValues(item, found);
306
+ return found;
307
+ };
308
+ var accountFieldSecrets = (accounts) => {
309
+ const found = /* @__PURE__ */ new Set();
310
+ if (Predicate_exports.isObject(accounts)) {
311
+ for (const slot of Object.values(accounts))
312
+ for (const account of Array.isArray(slot) ? slot : [slot])
313
+ if (Predicate_exports.hasProperty(account, "fields")) secretValues(account.fields, found);
314
+ }
315
+ return [...found].sort((a, b) => b.length - a.length);
316
+ };
317
+ var accountSecrets = (accounts) => accountFieldSecrets(Redacted_exports.value(accounts));
318
+ var replaceSecrets = (text, secrets) => {
319
+ let redacted = text;
320
+ for (const secret of secrets) redacted = redacted.split(secret).join("[redacted]");
321
+ return redacted;
322
+ };
323
+ var bound = (text, maximum) => text.length <= maximum ? text : `${text.slice(0, maximum - 1)}\u2026`;
324
+ var boundText = (text, secrets, maximum) => bound(replaceSecrets(text, secrets), maximum);
325
+ var replaceSecretStart = (text, secrets) => {
326
+ let longest = 0;
327
+ for (const secret of secrets)
328
+ for (let length = Math.min(secret.length - 1, text.length); length > longest; length--)
329
+ if (text.endsWith(secret.slice(0, length))) {
330
+ longest = length;
331
+ break;
332
+ }
333
+ return longest === 0 ? text : `${text.slice(0, -longest)}[redacted]`;
334
+ };
335
+ var boundFailureMessage = (message, secrets) => boundText(message, secrets, maxFailureMessageLength);
336
+ var redactUpstream = (upstream, secrets) => {
337
+ if (upstream?.message === void 0) return upstream;
338
+ const message = isShortenedUpstream(upstream.message) ? `${replaceSecretStart(replaceSecrets(upstream.message.slice(0, -1), secrets), secrets)}\u2026` : replaceSecrets(upstream.message, secrets);
339
+ return { code: upstream.code, message: bound(message, maxUpstreamMessageLength) };
340
+ };
341
+ var leavingProviderError = (error, secrets, phase) => providerError({
342
+ ...error,
343
+ phase: error.phase ?? phase,
344
+ upstream: redactUpstream(error.upstream, secrets)
345
+ });
346
+ var parseMcpError = (error, secrets) => Schema_exports.decodeUnknownOption(McpError)(error).pipe(
347
+ Option_exports.map(({ phase, reason, status, upstream, session }) => {
348
+ const stated = redactUpstream(upstream, secrets);
349
+ return new McpError2({
350
+ phase,
351
+ reason,
352
+ ...status === void 0 ? {} : { status },
353
+ ...stated === void 0 ? {} : { upstream: stated },
354
+ ...session === void 0 ? {} : { session }
355
+ });
356
+ })
357
+ );
358
+ var parseSkillLoadFailed = (error) => Schema_exports.decodeUnknownOption(SkillLoadFailed)(error).pipe(
359
+ Option_exports.map(
360
+ ({ reason, message, status, missing }) => new SkillLoadFailed2({
361
+ reason,
362
+ ...message ? { message } : {},
363
+ ...status === void 0 ? {} : { status },
364
+ ...missing === void 0 ? {} : { missing }
365
+ })
366
+ )
367
+ );
368
+ var errorName = (error) => (error.name.length > 0 ? error.name : "Error").slice(0, 128);
369
+ var ownCode = (error, secrets) => Predicate_exports.hasProperty(error, "code") && Schema_exports.is(FailureCode)(error.code) && error.code !== "" ? boundText(error.code, secrets, 128) : void 0;
370
+ var reservedFields = /* @__PURE__ */ new Set(["name", "message", "stack", "cause", "_tag"]);
371
+ var ownFields = (error, code, secrets) => {
372
+ const fields = {};
373
+ let count = 0;
374
+ for (const [key, value] of Object.entries(error)) {
375
+ if (count === maxFailureFields) break;
376
+ if (reservedFields.has(key) || key === "code" && code !== void 0) continue;
377
+ if (!Schema_exports.is(FailureFieldName)(key)) continue;
378
+ if (typeof value === "string") fields[key] = boundText(value, secrets, maxFailureFieldLength);
379
+ else if (typeof value === "boolean" || typeof value === "number" && Number.isFinite(value))
380
+ fields[key] = value;
381
+ else continue;
382
+ count++;
383
+ }
384
+ return count === 0 ? void 0 : fields;
385
+ };
386
+ var ownMessage = (error) => {
387
+ const cause = error.cause;
388
+ const suffix = cause instanceof Error && cause.message.length > 0 ? ` (caused by ${errorName(cause)}: ${cause.message})` : "";
389
+ return error.message.length > 0 ? `${error.message}${suffix}` : void 0;
390
+ };
391
+ 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`;
392
+ var openapiFailureMessage = (error) => {
393
+ const operation = error.operation === void 0 ? "The API request" : `${error.operation.method} ${error.operation.path}`;
394
+ if (error.reason === "invalid_definition")
395
+ return "The API's OpenAPI definition for this operation is invalid.";
396
+ if (error.reason === "invalid_input")
397
+ 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}.`;
398
+ if (error.status === void 0) return `${operation} failed before a response arrived.`;
399
+ const shape = [error.contentType, error.bytes === void 0 ? void 0 : `${error.bytes} bytes`].filter((part) => part !== void 0).join(", ");
400
+ const response = `${operation} responded with HTTP ${error.status}${shape === "" ? "" : ` (${shape})`}`;
401
+ 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.`;
402
+ };
403
+ var failureDetail = (error, secrets) => {
404
+ if (Schema_exports.is(CacheError)(error))
405
+ return {
406
+ source: "storage",
407
+ errorName: "CacheError",
408
+ code: error.reason,
409
+ message: cacheMessages[error.reason]
410
+ };
411
+ if (Schema_exports.is(OpenapiError)(error))
412
+ return {
413
+ source: "service",
414
+ errorName: "OpenapiError",
415
+ code: error.reason,
416
+ message: boundFailureMessage(openapiFailureMessage(error), secrets)
417
+ };
418
+ if (Schema_exports.is(McpError)(error))
419
+ return {
420
+ source: "service",
421
+ errorName: "McpError",
422
+ code: error.reason,
423
+ message: mcpMessage(error)
424
+ };
425
+ if (Schema_exports.is(McpCredentialsUnverified)(error))
426
+ return {
427
+ source: "service",
428
+ errorName: "McpCredentialsUnverified",
429
+ code: error.anonymous === "answered" ? "anonymous_access" : error.anonymous.reason,
430
+ message: unverifiedMessage(error)
431
+ };
432
+ if (Schema_exports.is(OpenapiCompileError)(error))
433
+ return {
434
+ source: "app",
435
+ errorName: "OpenapiCompileError",
436
+ code: error.code,
437
+ message: boundFailureMessage(error.message, secrets)
438
+ };
439
+ if (Schema_exports.is(NetworkRefused)(error))
440
+ return {
441
+ source: "app",
442
+ errorName: "NetworkRefused",
443
+ code: error.refusal.reason,
444
+ message: boundFailureMessage(error.message, secrets)
445
+ };
446
+ if (Schema_exports.is(FetchOptionUnsupported)(error))
447
+ return {
448
+ source: "app",
449
+ errorName: "FetchOptionUnsupported",
450
+ code: error.option,
451
+ message: boundFailureMessage(error.message, secrets)
452
+ };
453
+ if (error instanceof Error) {
454
+ const code = ownCode(error, secrets);
455
+ const fields = ownFields(error, code, secrets);
456
+ return {
457
+ source: "app",
458
+ errorName: errorName(error),
459
+ ...code === void 0 ? {} : { code },
460
+ message: boundFailureMessage(
461
+ ownMessage(error) ?? `${errorName(error)} was thrown without a message.`,
462
+ secrets
463
+ ),
464
+ ...fields === void 0 ? {} : { fields }
465
+ };
466
+ }
467
+ if (typeof error === "string")
468
+ return { source: "app", errorName: "string", message: boundFailureMessage(error, secrets) };
469
+ return {
470
+ source: "app",
471
+ errorName: typeof error,
472
+ message: `A non-Error ${error === null ? "null" : typeof error} value was thrown.`
473
+ };
474
+ };
475
+
476
+ // src/implementation/router-catalog.ts
477
+ var safeFailure = (error, secrets) => {
478
+ const provider = parseProviderError(error);
479
+ if (Option_exports.isSome(provider)) return leavingProviderError(provider.value, secrets, "discover");
480
+ const skills = parseSkillLoadFailed(error);
481
+ if (Option_exports.isSome(skills)) return skills.value;
482
+ const mcp = parseMcpError(error, secrets);
483
+ if (Option_exports.isSome(mcp)) return mcp.value;
484
+ if (Schema_exports.is(HostDeclarationInvalid)(error)) return error;
485
+ return new HostEvaluationFailed(failureDetail(error, secrets));
486
+ };
487
+ var sourced = (work, secrets) => Effect_exports.suspend(work).pipe(
488
+ Effect_exports.catchCause(
489
+ (cause) => Cause_exports.hasInterrupts(cause) ? Effect_exports.interrupt : Effect_exports.fail(safeFailure(Cause_exports.squash(cause), secrets))
490
+ )
491
+ );
492
+ var routerMeta = (node, secrets) => node.kind === "router" ? Effect_exports.succeed(node.meta) : node.meta === void 0 ? Effect_exports.succeed(node.overrides) : sourced(node.meta, secrets).pipe(Effect_exports.map((meta) => mergeMeta(meta, node.overrides)));
493
+ var routerSkillPrefix = "tools";
494
+ var plainSegment = /^[a-z][a-z0-9]*$/;
495
+ var pathHash = (path) => {
496
+ let hash = 2166136261;
497
+ for (let index = 0; index < path.length; index++)
498
+ hash = Math.imul(hash ^ path.charCodeAt(index), 16777619) >>> 0;
499
+ return hash.toString().padStart(10, "0");
500
+ };
501
+ var routerSkillName = (path) => {
502
+ if (path === "") return routerSkillPrefix;
503
+ const segments = path.split(".");
504
+ const plain = [routerSkillPrefix, ...segments].join("-");
505
+ if (segments.every((segment) => plainSegment.test(segment)) && plain.length <= skillFormatLimits.nameCharacters)
506
+ return plain;
507
+ const hash = pathHash(path);
508
+ const slug = path.toLowerCase().replace(/[^a-z0-9]+/g, "-").slice(0, skillFormatLimits.nameCharacters - routerSkillPrefix.length - hash.length - 2).replace(/^-+|-+$/g, "");
509
+ return [routerSkillPrefix, slug, hash].filter((part) => part !== "").join("-");
510
+ };
511
+ var entry = (path, meta, error) => Schema_exports.decodeUnknownEffect(HostedRouter)({
512
+ path,
513
+ ...meta?.title === void 0 ? {} : { title: meta.title },
514
+ ...meta?.description === void 0 ? {} : { description: meta.description },
515
+ ...meta?.icons === void 0 ? {} : { icons: meta.icons },
516
+ ...meta?.tags === void 0 ? {} : { tags: meta.tags },
517
+ ...meta?.instructions === void 0 ? {} : { skill: routerSkillName(path) },
518
+ ...error === void 0 ? {} : { error }
519
+ }).pipe(Effect_exports.mapError(() => new HostDeclarationInvalid()));
520
+ var invalid = (work) => work.pipe(
521
+ Effect_exports.catchCause(
522
+ (cause) => Cause_exports.hasInterrupts(cause) ? Effect_exports.interrupt : Effect_exports.fail(new HostDeclarationInvalid())
523
+ )
524
+ );
525
+ var summaryFields = (name, router, operation, schedules) => {
526
+ const readOnly = operation.kind === "query";
527
+ return {
528
+ name,
529
+ ...router === "" ? {} : { router },
530
+ ...schedules === void 0 ? {} : { schedules },
531
+ description: operation.description ?? `${readOnly ? "Query" : "Mutate"} ${name}`,
532
+ ...operation.title === void 0 ? {} : { title: operation.title },
533
+ readOnly,
534
+ annotations: { ...operation.annotations, readOnlyHint: readOnly }
535
+ };
536
+ };
537
+ var operationSummary = (name, router, operation, schedules) => invalid(
538
+ Schema_exports.decodeUnknownEffect(HostedToolSummary)(
539
+ summaryFields(name, router, operation, schedules)
540
+ )
541
+ );
542
+ var operationDescription = (name, router, operation, schedules) => invalid(
543
+ Effect_exports.gen(function* () {
544
+ return yield* Schema_exports.decodeUnknownEffect(HostedTool)({
545
+ ...summaryFields(name, router, operation, schedules),
546
+ inputSchema: yield* jsonSchemaDocument(operation.input),
547
+ ...operation.output === void 0 ? operation.outputSchema === void 0 ? {} : { outputSchema: operation.outputSchema } : { outputSchema: yield* jsonSchemaDocument(operation.output) },
548
+ ...operation._meta === void 0 ? {} : { _meta: operation._meta }
549
+ });
550
+ })
551
+ );
552
+ var fixedRouter = (operations, meta) => ({
553
+ kind: "dynamic",
554
+ ...meta === void 0 ? {} : { meta: () => Effect_exports.succeed(meta) },
555
+ list: () => Effect_exports.forEach(
556
+ Object.entries(operations),
557
+ ([name, operation]) => operationDescription(name, "", operation)
558
+ ),
559
+ summaries: () => Effect_exports.forEach(
560
+ Object.entries(operations),
561
+ ([name, operation]) => operationSummary(name, "", operation)
562
+ ),
563
+ describe: (name) => {
564
+ const operation = Object.hasOwn(operations, name) ? operations[name] : void 0;
565
+ return operation === void 0 ? Effect_exports.succeed(void 0) : operationDescription(name, "", operation);
566
+ },
567
+ resolve: (name) => Effect_exports.succeed(Object.hasOwn(operations, name) ? operations[name] : void 0)
568
+ });
569
+ var within = (wanted, path) => [...wanted].flatMap(
570
+ (name) => path === "" ? [name] : name.startsWith(`${path}.`) ? [name.slice(path.length + 1)] : []
571
+ );
572
+ var readCatalog = (root, options) => Effect_exports.gen(function* () {
573
+ const tools = [];
574
+ const routers = [];
575
+ const { wanted, secrets } = options;
576
+ const readSource = (source, path, relative) => Effect_exports.gen(function* () {
577
+ const describe = source.describe;
578
+ const [meta, listed] = yield* Effect_exports.all(
579
+ [
580
+ routerMeta(source, secrets),
581
+ options.summary && source.summaries !== void 0 ? sourced(source.summaries, secrets) : relative !== void 0 && describe !== void 0 ? sourced(
582
+ () => Effect_exports.forEach(relative, (name) => describe(name), {
583
+ concurrency: "unbounded"
584
+ }),
585
+ secrets
586
+ ).pipe(Effect_exports.map((tools2) => tools2.filter((tool) => tool !== void 0))) : sourced(source.list, secrets)
587
+ ],
588
+ { concurrency: "unbounded" }
589
+ );
590
+ const parsed = yield* Schema_exports.decodeUnknownEffect(
591
+ Schema_exports.Array(options.summary ? HostedToolSummary : HostedTool)
592
+ )(listed).pipe(Effect_exports.mapError(() => new HostDeclarationInvalid()));
593
+ const names = /* @__PURE__ */ new Set();
594
+ const found = [];
595
+ for (const tool of parsed) {
596
+ if (names.has(tool.name)) return yield* new HostDeclarationInvalid();
597
+ names.add(tool.name);
598
+ if (relative !== void 0 && !relative.includes(tool.name)) continue;
599
+ const readOnly = tool.readOnly === true;
600
+ found.push({
601
+ ...tool,
602
+ name: joinPath(path, tool.name),
603
+ ...path === "" ? {} : { router: path },
604
+ readOnly,
605
+ annotations: { ...tool.annotations, readOnlyHint: readOnly }
606
+ });
607
+ }
608
+ return { meta, found };
609
+ });
610
+ const include = (source, path, relative) => Effect_exports.gen(function* () {
611
+ if (path === "") {
612
+ const { meta, found } = yield* readSource(source, path, relative);
613
+ tools.push(...found);
614
+ return { meta, error: void 0 };
615
+ }
616
+ const result = yield* Effect_exports.result(readSource(source, path, relative));
617
+ if (Result_exports.isFailure(result)) return { meta: source.overrides, error: result.failure };
618
+ tools.push(...result.success.found);
619
+ return { meta: result.success.meta, error: void 0 };
620
+ });
621
+ const visit = (node, path) => Effect_exports.gen(function* () {
622
+ if (path !== "" || wanted === void 0 && node.meta !== void 0)
623
+ routers.push(yield* entry(path, node.meta));
624
+ for (const [key, child] of Object.entries(node.children)) {
625
+ const name = joinPath(path, key);
626
+ switch (child.kind) {
627
+ case "query":
628
+ case "mutation":
629
+ if (options.scheduled === true && options.schedules(name).length === 0) break;
630
+ if (wanted === void 0 || wanted.has(name))
631
+ tools.push(
632
+ options.summary ? yield* operationSummary(name, path, child, options.schedules(name)) : yield* operationDescription(name, path, child, options.schedules(name))
633
+ );
634
+ break;
635
+ case "router":
636
+ if (wanted === void 0 || within(wanted, name).length > 0)
637
+ yield* visit(child, name);
638
+ break;
639
+ case "dynamic": {
640
+ if (options.scheduled === true) break;
641
+ const relative = wanted === void 0 ? void 0 : within(wanted, name);
642
+ if (relative !== void 0 && relative.length === 0) break;
643
+ const read = yield* include(child, name, relative);
644
+ routers.push(yield* entry(name, read.meta, read.error));
645
+ }
646
+ }
647
+ }
648
+ });
649
+ if (root?.kind === "router") yield* visit(root, "");
650
+ else if (root?.kind === "dynamic" && options.scheduled !== true) {
651
+ const read = yield* include(root, "", wanted === void 0 ? void 0 : [...wanted]);
652
+ if (wanted === void 0 && read.meta !== void 0)
653
+ routers.push(yield* entry("", read.meta));
654
+ }
655
+ return { tools, routers };
656
+ });
657
+ var routerSkills = (root) => Effect_exports.gen(function* () {
658
+ const nodes = [];
659
+ const collect = (node, path) => {
660
+ nodes.push({ path, node });
661
+ if (node.kind === "router") {
662
+ for (const [key, child] of Object.entries(node.children))
663
+ if (child.kind === "router" || child.kind === "dynamic")
664
+ collect(child, joinPath(path, key));
665
+ }
666
+ };
667
+ if (root !== void 0) collect(root, "");
668
+ const skills = yield* Effect_exports.forEach(
669
+ nodes,
670
+ ({ path, node }) => (
671
+ // Skills that fail are skipped, so their failures are never reported.
672
+ routerMeta(node, []).pipe(
673
+ Effect_exports.flatMap((meta) => routerSkill(path, meta)),
674
+ Effect_exports.orElseSucceed(() => void 0)
675
+ )
676
+ ),
677
+ { concurrency: "unbounded" }
678
+ );
679
+ const names = /* @__PURE__ */ new Set();
680
+ return skills.filter((skill) => {
681
+ if (skill === void 0 || names.has(skill.name)) return false;
682
+ names.add(skill.name);
683
+ return true;
684
+ });
685
+ });
686
+ var routerSkill = (path, meta) => Effect_exports.gen(function* () {
687
+ if (meta?.instructions === void 0) return void 0;
688
+ const name = routerSkillName(path);
689
+ const description = ([meta.description, meta.title].find((text) => text !== void 0 && text.trim() !== "") ?? (path === "" ? "How to use this app's tools" : `How to use the ${path} tools`)).slice(0, skillFormatLimits.descriptionCharacters);
690
+ const content = `---
691
+ name: ${name}
692
+ description: ${JSON.stringify(description)}
693
+ ---
694
+
695
+ ${meta.instructions}
696
+ `;
697
+ return yield* skillFromFiles([{ path: "SKILL.md", content }], { name });
698
+ });
699
+
700
+ export {
701
+ OpenapiErrorResponse,
702
+ OpenapiParameter,
703
+ OpenapiRequestBody,
704
+ OpenapiOperation,
705
+ isOpenapiReadMethod,
706
+ OpenapiToolsOptions,
707
+ OpenapiMediaType,
708
+ OpenapiError,
709
+ defaultOpenapiResponseLimits,
710
+ isOpenapiJsonSequence,
711
+ isOpenapiTextMedia,
712
+ isOpenapiFileSchema,
713
+ openapiBinaryResultSchema,
714
+ openapiMediaKind,
715
+ OpenapiCompileErrorCode,
716
+ OpenapiSkippedOperation,
717
+ OpenapiCompileError,
718
+ accountSecrets,
719
+ boundFailureMessage,
720
+ leavingProviderError,
721
+ parseMcpError,
722
+ parseSkillLoadFailed,
723
+ describeFailure,
724
+ failureDetail,
725
+ operationDescription,
726
+ fixedRouter,
727
+ readCatalog,
728
+ routerSkills
729
+ };