apps 0.0.1-beta.8 → 0.0.1-beta.81
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 +25 -22
- package/framework-reference.json +1 -1
- package/js/{chunk-72JNVHPK.js → chunk-4NFSABEA.js} +4 -3
- package/js/chunk-5FHWNLCI.js +88 -0
- package/js/chunk-5WGONRKQ.js +426 -0
- package/js/{chunk-M3B3DE4K.js → chunk-74YVXBKY.js} +463 -218
- 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-FL2QR3XW.js → chunk-HJG4RBYM.js} +333 -69
- package/js/chunk-I6Q7ZPKJ.js +49 -0
- package/js/{chunk-CDL5PM2Q.js → chunk-IFJU5SYQ.js} +19082 -18402
- package/js/{chunk-VFZKSM3T.js → chunk-JPEUKEV4.js} +3 -3
- package/js/{chunk-5T57N25Q.js → chunk-KGCTYL2S.js} +511 -63
- package/js/{chunk-KUMBKVJD.js → chunk-KLYSEHUD.js} +2 -2
- package/js/{chunk-WLE7WX2U.js → chunk-NG56RPCA.js} +2348 -472
- package/js/chunk-OD3KFKZD.js +1617 -0
- package/js/{chunk-Z5M2LQOZ.js → chunk-OY47QPQY.js} +67 -55
- package/js/{chunk-57RKNWL2.js → chunk-PD6I2SDG.js} +4 -4
- package/js/chunk-PL5KOEZD.js +334 -0
- package/js/chunk-Q4IZAUIF.js +285 -0
- package/js/{chunk-RJDDBDSN.js → chunk-QWQM3CLH.js} +795 -177
- package/js/{chunk-RFVIONFX.js → chunk-TE25A7D6.js} +123 -44
- package/js/{chunk-IJX4CYZO.js → chunk-TUMGL2OC.js} +228 -264
- package/js/chunk-W6XCQAXP.js +171 -0
- package/js/chunk-WCGAO3X5.js +348 -0
- package/js/{chunk-IPI4MFSN.js → chunk-XBG7HHXC.js} +2 -2
- package/js/{chunk-CMYUWAX7.js → chunk-YQUG4CES.js} +126 -31
- package/js/{chunk-UESPOTUI.js → chunk-Z2SWTZCF.js} +861 -231
- package/js/client.js +142 -94
- package/js/contracts.js +127 -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 +131 -46
- package/js/mcp/effect.js +23 -21
- package/js/mcp/stdio.js +44 -34
- package/js/mcp.js +76 -53
- package/js/openapi.js +4071 -1357
- 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 +8604 -223
- package/package.json +3 -4
- package/runtime.json +1 -1
- package/types/app-cache/src/contracts/cache.d.ts +18 -0
- package/types/app-cache/src/index.d.ts +34 -2
- 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 +23 -7
- 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 +649 -17
- 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 +120 -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/placement.d.ts +102 -0
- 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 +157 -47
- 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 +3843 -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 +90 -6
- package/types/apps/src/contracts/skills.d.ts +50 -13
- package/types/apps/src/contracts/sql.d.ts +63 -0
- package/types/apps/src/contracts/ui.d.ts +37 -3
- 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 +28 -1
- 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 +18 -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/placement.d.ts +60 -0
- 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 +18 -3
- 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 +28 -9
- 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 +55 -13
- 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/apps/src/ui-serving.d.ts +1 -1
- package/types/telemetry/src/app-records.d.ts +42 -0
- package/types/telemetry/src/browser-operations.d.ts +2 -2
- 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 +2 -1
- package/types/telemetry/src/layer.d.ts +10 -4
- package/types/telemetry/src/measurements.d.ts +1 -1
- package/types/telemetry/src/ownership.d.ts +60 -0
- package/types/telemetry/src/recorded-failure.d.ts +29 -0
- package/types/telemetry/src/relay.d.ts +16 -6
- package/types/telemetry/src/span-attributes.d.ts +17 -1
- 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-MKWZPDR6.js +0 -63
- package/js/chunk-N7YDVXYJ.js +0 -186
- package/js/chunk-NKLWZJLE.js +0 -172
- package/js/chunk-OCYUEU47.js +0 -224
- package/js/chunk-PJJ24GU7.js +0 -877
- package/js/chunk-PZB6T6KU.js +0 -19
- package/js/chunk-R3EV5FTO.js +0 -97
- package/js/chunk-YXQHV65J.js +0 -242
- 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,6 +1,49 @@
|
|
|
1
1
|
import {
|
|
2
|
+
RecordedMessage
|
|
3
|
+
} from "./chunk-5FHWNLCI.js";
|
|
4
|
+
import {
|
|
5
|
+
SchemaGetter_exports,
|
|
2
6
|
Schema_exports
|
|
3
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
8
|
+
|
|
9
|
+
// ../utils/src/api-error.ts
|
|
10
|
+
var MessageField = Schema_exports.String.pipe(
|
|
11
|
+
Schema_exports.decodeTo(Schema_exports.optionalKey(Schema_exports.String), {
|
|
12
|
+
decode: SchemaGetter_exports.omit(),
|
|
13
|
+
encode: SchemaGetter_exports.passthrough()
|
|
14
|
+
})
|
|
15
|
+
);
|
|
16
|
+
function withFields(definition) {
|
|
17
|
+
const fields = definition.fields;
|
|
18
|
+
const message = definition.message;
|
|
19
|
+
const documentation = typeof message === "string" ? { description: message } : {};
|
|
20
|
+
const DefinedError = Schema_exports.Error(definition.tag)(
|
|
21
|
+
Schema_exports.TaggedStruct(definition.tag, { ...fields, message: MessageField }).annotate(
|
|
22
|
+
documentation
|
|
23
|
+
),
|
|
24
|
+
{ httpApiStatus: definition.status, ...documentation }
|
|
25
|
+
);
|
|
26
|
+
const recorded = definition.recorded ?? (typeof message === "string" ? () => message : void 0);
|
|
27
|
+
Object.defineProperties(DefinedError.prototype, {
|
|
28
|
+
message: {
|
|
29
|
+
get() {
|
|
30
|
+
return typeof message === "string" ? message : message(this);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
...recorded === void 0 ? {} : {
|
|
34
|
+
[RecordedMessage]: {
|
|
35
|
+
get() {
|
|
36
|
+
return recorded(this);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return DefinedError;
|
|
42
|
+
}
|
|
43
|
+
function define(definition) {
|
|
44
|
+
return "fields" in definition ? withFields(definition) : withFields({ ...definition, fields: {} });
|
|
45
|
+
}
|
|
46
|
+
var ApiError = { define };
|
|
4
47
|
|
|
5
48
|
// src/contracts/skills.ts
|
|
6
49
|
var SkillFilePath = Schema_exports.NonEmptyString.check(
|
|
@@ -45,9 +88,18 @@ var AppSkillSource = Schema_exports.Struct({
|
|
|
45
88
|
)
|
|
46
89
|
)
|
|
47
90
|
});
|
|
48
|
-
var
|
|
49
|
-
|
|
50
|
-
{
|
|
91
|
+
var skillDefinitionFailures = {
|
|
92
|
+
files: (file) => `The skill files of \u201C${file}\u201D are invalid: each needs a unique relative path, text content and a SKILL.md document.`,
|
|
93
|
+
directory: (file) => `\u201C${file}\u201D is not a valid skill directory. Skill directory names use lowercase letters and digits separated by single hyphens.`,
|
|
94
|
+
"missing-document": (file) => `\u201C${file}\u201D is missing.`,
|
|
95
|
+
frontmatter: (file) => `\u201C${file}\u201D must start with valid YAML frontmatter between --- lines.`,
|
|
96
|
+
metadata: (file) => `The frontmatter of \u201C${file}\u201D needs a valid name and description within the Agent Skills limits.`,
|
|
97
|
+
"name-mismatch": (file) => `The name in \u201C${file}\u201D does not match its skill directory.`
|
|
98
|
+
};
|
|
99
|
+
var SkillDefinitionInvalid = ApiError.define({
|
|
100
|
+
tag: "SkillDefinitionInvalid",
|
|
101
|
+
status: 400,
|
|
102
|
+
fields: {
|
|
51
103
|
file: SkillFilePath,
|
|
52
104
|
reason: Schema_exports.Literals([
|
|
53
105
|
"files",
|
|
@@ -58,14 +110,14 @@ var SkillDefinitionInvalid = class extends Schema_exports.TaggedError()(
|
|
|
58
110
|
"name-mismatch"
|
|
59
111
|
])
|
|
60
112
|
},
|
|
61
|
-
{
|
|
62
|
-
) {
|
|
63
|
-
};
|
|
113
|
+
message: ({ file, reason }) => skillDefinitionFailures[reason](file),
|
|
114
|
+
recorded: ({ reason }) => `The app's skill definition is invalid (${reason})`
|
|
115
|
+
});
|
|
64
116
|
var AppSkills = Schema_exports.Array(AppSkillSource).check(
|
|
65
117
|
Schema_exports.makeFilter((skills) => new Set(skills.map((skill) => skill.name)).size === skills.length)
|
|
66
118
|
);
|
|
67
119
|
var SkillServiceName = Schema_exports.String.check(
|
|
68
|
-
Schema_exports.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9 .-]{0,98}[A-Za-z0-9])?$/)
|
|
120
|
+
Schema_exports.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9 .-]{0,98}[A-Za-z0-9])?$/u)
|
|
69
121
|
);
|
|
70
122
|
var SkillLoadFailed = class extends Schema_exports.TaggedError()("SkillLoadFailed", {
|
|
71
123
|
reason: Schema_exports.Literals([
|
|
@@ -79,14 +131,17 @@ var SkillLoadFailed = class extends Schema_exports.TaggedError()("SkillLoadFaile
|
|
|
79
131
|
]),
|
|
80
132
|
// Error instances read an omitted message as "", so an empty message means none was given.
|
|
81
133
|
message: Schema_exports.optional(Schema_exports.String.check(Schema_exports.isMaxLength(500))),
|
|
82
|
-
status: Schema_exports.optional(Schema_exports.Int.check(Schema_exports.isBetween({ minimum: 100, maximum: 599 })))
|
|
134
|
+
status: Schema_exports.optional(Schema_exports.Int.check(Schema_exports.isBetween({ minimum: 100, maximum: 599 }))),
|
|
135
|
+
missing: Schema_exports.optional(Schema_exports.Literals(["repository", "ref"]))
|
|
83
136
|
}) {
|
|
84
137
|
};
|
|
85
138
|
var skillLoadLimits = {
|
|
86
139
|
files: 1e3,
|
|
87
140
|
fileBytes: 2e6,
|
|
88
141
|
totalBytes: 2e7,
|
|
89
|
-
concurrency: 8
|
|
142
|
+
concurrency: 8,
|
|
143
|
+
/** The request that checks whether a kept catalog's publication changed. */
|
|
144
|
+
checkMillis: 5e3
|
|
90
145
|
};
|
|
91
146
|
|
|
92
147
|
export {
|
|
@@ -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-OY47QPQY.js";
|
|
8
8
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
isShortenedUpstream,
|
|
10
|
+
parseProviderError,
|
|
11
|
+
providerError
|
|
12
|
+
} from "./chunk-W6XCQAXP.js";
|
|
11
13
|
import {
|
|
12
14
|
ApiErrorResponse,
|
|
13
15
|
HostDeclarationInvalid,
|
|
@@ -15,37 +17,45 @@ 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-NG56RPCA.js";
|
|
21
25
|
import {
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
CacheError,
|
|
27
|
+
FailureCode,
|
|
28
|
+
FailureFieldName,
|
|
29
|
+
FetchOptionUnsupported,
|
|
30
|
+
NetworkRefused,
|
|
31
|
+
cacheLimits,
|
|
32
|
+
maxFailureFieldLength,
|
|
33
|
+
maxFailureFields,
|
|
34
|
+
maxFailureMessageLength,
|
|
35
|
+
maxUpstreamMessageLength
|
|
36
|
+
} from "./chunk-Q4IZAUIF.js";
|
|
24
37
|
import {
|
|
25
38
|
SkillLoadFailed,
|
|
26
39
|
skillFormatLimits
|
|
27
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-H72MEDMN.js";
|
|
28
41
|
import {
|
|
29
42
|
jsonSchemaDocument
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import {
|
|
32
|
-
AppStorageError,
|
|
33
|
-
AppStorageUnavailable
|
|
34
|
-
} from "./chunk-PZB6T6KU.js";
|
|
43
|
+
} from "./chunk-KGCTYL2S.js";
|
|
35
44
|
import {
|
|
36
45
|
AccountId,
|
|
37
46
|
HttpUrl,
|
|
38
47
|
JsonObject
|
|
39
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-H2CJWXA3.js";
|
|
40
49
|
import {
|
|
41
50
|
Cause_exports,
|
|
42
51
|
Effect_exports,
|
|
52
|
+
Match_exports,
|
|
43
53
|
Option_exports,
|
|
44
54
|
Predicate_exports,
|
|
45
55
|
Redacted_exports,
|
|
46
56
|
Result_exports,
|
|
47
57
|
Schema_exports
|
|
48
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
49
59
|
|
|
50
60
|
// src/contracts/openapi.ts
|
|
51
61
|
var OpenapiErrorResponse = Schema_exports.Struct({
|
|
@@ -59,7 +69,8 @@ var OpenapiErrorResponse = Schema_exports.Struct({
|
|
|
59
69
|
});
|
|
60
70
|
var OpenapiParameter = Schema_exports.Struct({
|
|
61
71
|
name: Schema_exports.String,
|
|
62
|
-
|
|
72
|
+
/** OpenAPI 3.2's `querystring` is the whole query string, serialized from one `content` value. */
|
|
73
|
+
in: Schema_exports.Literals(["path", "query", "querystring", "header", "cookie"]),
|
|
63
74
|
required: Schema_exports.optionalKey(Schema_exports.Boolean),
|
|
64
75
|
schema: Schema_exports.optionalKey(JsonObject),
|
|
65
76
|
style: Schema_exports.optionalKey(Schema_exports.String),
|
|
@@ -84,7 +95,7 @@ var OpenapiOperation = Schema_exports.Struct({
|
|
|
84
95
|
/** The document's operationId, when it declares one. `kinds` overrides are keyed by it. */
|
|
85
96
|
operationId: Schema_exports.optionalKey(Schema_exports.String),
|
|
86
97
|
description: Schema_exports.String,
|
|
87
|
-
method: Schema_exports.Literals(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]),
|
|
98
|
+
method: Schema_exports.Literals(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS", "QUERY"]),
|
|
88
99
|
path: Schema_exports.String,
|
|
89
100
|
baseUrl: HttpUrl,
|
|
90
101
|
openapi: Schema_exports.String,
|
|
@@ -104,6 +115,7 @@ var OpenapiOperation = Schema_exports.Struct({
|
|
|
104
115
|
outputSchema: Schema_exports.optionalKey(JsonObject),
|
|
105
116
|
errorResponses: Schema_exports.optionalKey(Schema_exports.Array(OpenapiErrorResponse))
|
|
106
117
|
});
|
|
118
|
+
var isOpenapiReadMethod = (method) => method === "GET" || method === "HEAD" || method === "OPTIONS" || method === "QUERY";
|
|
107
119
|
var CredentialBinding = Schema_exports.Struct({
|
|
108
120
|
scheme: Schema_exports.String,
|
|
109
121
|
field: Schema_exports.String,
|
|
@@ -136,16 +148,30 @@ var OpenapiToolsOptions = Schema_exports.Struct({
|
|
|
136
148
|
Schema_exports.declare((value) => typeof value === "function")
|
|
137
149
|
)
|
|
138
150
|
});
|
|
151
|
+
var OpenapiFailedOperation = Schema_exports.Struct({
|
|
152
|
+
method: OpenapiOperation.fields.method,
|
|
153
|
+
path: Schema_exports.String
|
|
154
|
+
});
|
|
155
|
+
var OpenapiMediaType = Schema_exports.String.check(
|
|
156
|
+
Schema_exports.isMaxLength(128),
|
|
157
|
+
Schema_exports.isPattern(/^[\w!#$&^.+-]+\/[\w!#$&^.+-]+$/u)
|
|
158
|
+
);
|
|
139
159
|
var OpenapiError = class extends Schema_exports.TaggedError()("OpenapiError", {
|
|
140
160
|
reason: Schema_exports.Literals(["invalid_definition", "invalid_input", "request"]),
|
|
141
|
-
status: Schema_exports.optional(Schema_exports.Number)
|
|
161
|
+
status: Schema_exports.optional(Schema_exports.Number),
|
|
162
|
+
/** Absent only when the definition itself could not be read. */
|
|
163
|
+
operation: Schema_exports.optional(OpenapiFailedOperation),
|
|
164
|
+
contentType: Schema_exports.optional(OpenapiMediaType),
|
|
165
|
+
/** The response's `content-length`, when it declared one. */
|
|
166
|
+
bytes: Schema_exports.optional(Schema_exports.Int.check(Schema_exports.isGreaterThanOrEqualTo(0)))
|
|
142
167
|
}) {
|
|
143
168
|
};
|
|
144
169
|
var defaultOpenapiResponseLimits = {
|
|
145
170
|
maxBodyBytes: 16777216,
|
|
146
171
|
readTimeoutMs: 3e4
|
|
147
172
|
};
|
|
148
|
-
var
|
|
173
|
+
var isOpenapiJsonSequence = (type) => /^application\/(?:x-)?(?:ndjson|jsonl|jsonlines|json-seq)\s*(?:;|$)/i.test(type);
|
|
174
|
+
var isOpenapiTextMedia = (type) => isOpenapiJsonSequence(type) || /^(?:text\/|application\/(?:[\w.-]+\+)?(?:json|xml)|application\/(?:javascript|x-www-form-urlencoded))/i.test(
|
|
149
175
|
type
|
|
150
176
|
);
|
|
151
177
|
var isOpenapiFileSchema = (shape) => shape.contentMediaType !== void 0 && shape.contentEncoding === void 0 || shape.type === "string" && shape.format === "binary";
|
|
@@ -158,23 +184,158 @@ var openapiBinaryResultSchema = {
|
|
|
158
184
|
required: ["base64", "contentType"],
|
|
159
185
|
additionalProperties: false
|
|
160
186
|
};
|
|
161
|
-
var openapiMediaKind = (type) => type.includes("json") && !type
|
|
187
|
+
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";
|
|
188
|
+
|
|
189
|
+
// src/contracts/openapi-compile.ts
|
|
190
|
+
var OpenapiCompileErrorCode = Schema_exports.Literals([
|
|
191
|
+
"server_protocol",
|
|
192
|
+
"server_url",
|
|
193
|
+
"external_reference",
|
|
194
|
+
"circular_reference",
|
|
195
|
+
"schema_keyword",
|
|
196
|
+
"schema_reference",
|
|
197
|
+
"missing_component",
|
|
198
|
+
"openapi_version",
|
|
199
|
+
"auth_helper",
|
|
200
|
+
"auth_missing",
|
|
201
|
+
"operation_path",
|
|
202
|
+
"operation_method",
|
|
203
|
+
"duplicate_operation",
|
|
204
|
+
"server_missing",
|
|
205
|
+
"multiple_hosts",
|
|
206
|
+
"parameter_encoding",
|
|
207
|
+
"parameter_style",
|
|
208
|
+
"request_body",
|
|
209
|
+
"combined_oauth",
|
|
210
|
+
"auth_method",
|
|
211
|
+
"event_stream",
|
|
212
|
+
"input_schema",
|
|
213
|
+
"no_operations",
|
|
214
|
+
"no_supported_operations",
|
|
215
|
+
"invalid_document",
|
|
216
|
+
"source_generation",
|
|
217
|
+
"authoring_reference"
|
|
218
|
+
]);
|
|
219
|
+
var OpenapiSkippedOperation = Schema_exports.Struct({
|
|
220
|
+
/** The tool name the operation would have; reading that tool reports why it is missing. */
|
|
221
|
+
name: Schema_exports.String,
|
|
222
|
+
/** The HTTP method, such as `GET`. */
|
|
223
|
+
method: Schema_exports.String,
|
|
224
|
+
/** The path as the definition declares it. */
|
|
225
|
+
path: Schema_exports.String,
|
|
226
|
+
code: OpenapiCompileErrorCode,
|
|
227
|
+
reason: Schema_exports.String
|
|
228
|
+
});
|
|
229
|
+
var listedReasons = 8;
|
|
230
|
+
var reasonLength = 240;
|
|
231
|
+
var cut = (text) => text.length <= reasonLength ? text : `${text.slice(0, reasonLength - 1)}\u2026`;
|
|
232
|
+
var customTool = `To call a left-out operation anyway, write a custom tool for it in this app with the same account: see "Custom tools beside generated ones" in the app-authoring skill's integrations.md.`;
|
|
233
|
+
var compileMessage = (error) => {
|
|
234
|
+
const skipped = error.skipped ?? [];
|
|
235
|
+
if (skipped.length === 0) return error.reason;
|
|
236
|
+
const close = skipped.some(({ code }) => code !== "event_stream") ? ` ${customTool}` : "";
|
|
237
|
+
const groups = /* @__PURE__ */ new Map();
|
|
238
|
+
for (const operation of skipped) {
|
|
239
|
+
const key = JSON.stringify([operation.code, operation.reason]);
|
|
240
|
+
const group = groups.get(key);
|
|
241
|
+
if (group === void 0) groups.set(key, { first: operation, count: 1 });
|
|
242
|
+
else group.count++;
|
|
243
|
+
}
|
|
244
|
+
const example = ({ first, count: count2 }) => `${first.method} ${first.path}${count2 > 1 ? ` and ${count2 - 1} more` : ""}`;
|
|
245
|
+
const [only, ...others] = groups.values();
|
|
246
|
+
if (only !== void 0 && others.length === 0 && only.first.code === error.code && only.first.reason === error.reason)
|
|
247
|
+
return `${error.reason} Left out: ${example(only)}.${close}`;
|
|
248
|
+
const listed = [];
|
|
249
|
+
let room = maxFailureMessageLength - `${error.reason} Left out: ; and ${groups.size} other reasons.${close}`.length;
|
|
250
|
+
for (const group of groups.values()) {
|
|
251
|
+
const text = `${example(group)} (${group.first.code}: ${cut(group.first.reason.replace(/\.$/, ""))})`;
|
|
252
|
+
if (listed.length === listedReasons || text.length + 2 > room) break;
|
|
253
|
+
listed.push(text);
|
|
254
|
+
room -= text.length + 2;
|
|
255
|
+
}
|
|
256
|
+
const rest = groups.size - listed.length;
|
|
257
|
+
return `${error.reason} Left out: ${listed.join("; ")}${rest > 0 ? `; and ${rest} other reasons` : ""}.${close}`;
|
|
258
|
+
};
|
|
259
|
+
var OpenapiCompileError = class extends Schema_exports.TaggedError()(
|
|
260
|
+
"OpenapiCompileError",
|
|
261
|
+
{
|
|
262
|
+
code: OpenapiCompileErrorCode,
|
|
263
|
+
reason: Schema_exports.String,
|
|
264
|
+
skipped: Schema_exports.optionalKey(Schema_exports.Array(OpenapiSkippedOperation)),
|
|
265
|
+
origins: Schema_exports.optionalKey(Schema_exports.Array(Schema_exports.String))
|
|
266
|
+
}
|
|
267
|
+
) {
|
|
268
|
+
get message() {
|
|
269
|
+
return compileMessage(this);
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
var OpenapiToolName = Schema_exports.Struct({
|
|
273
|
+
/** The tool name relative to the router, as `withApprovals` receives it. */
|
|
274
|
+
name: Schema_exports.String,
|
|
275
|
+
/** The HTTP method, such as `GET`. */
|
|
276
|
+
method: Schema_exports.String,
|
|
277
|
+
/** The request path, including any `pathPrefix`. */
|
|
278
|
+
path: Schema_exports.String,
|
|
279
|
+
operationId: Schema_exports.optionalKey(Schema_exports.String),
|
|
280
|
+
/** After `kinds` (keyed by `operationId`, else `name`); otherwise reading methods are queries. */
|
|
281
|
+
kind: Schema_exports.Literals(["query", "mutation"]),
|
|
282
|
+
/** Callable without credentials, so every account and a router without one expose it. */
|
|
283
|
+
public: Schema_exports.Boolean,
|
|
284
|
+
/** The `methods` and `oauth` entries whose accounts expose it. */
|
|
285
|
+
methods: Schema_exports.Array(Schema_exports.String)
|
|
286
|
+
});
|
|
287
|
+
var OpenapiToolNames = Schema_exports.Struct({
|
|
288
|
+
tools: Schema_exports.Array(OpenapiToolName),
|
|
289
|
+
/**
|
|
290
|
+
* Operations the compiler left out, and why. An operation it imports but no configured `methods`
|
|
291
|
+
* or `oauth` entry can authorize is missing from `tools` and is not listed here.
|
|
292
|
+
*/
|
|
293
|
+
skipped: Schema_exports.Array(OpenapiSkippedOperation)
|
|
294
|
+
});
|
|
162
295
|
|
|
163
296
|
// src/implementation/failure-detail.ts
|
|
164
|
-
var
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
297
|
+
var cacheMessages = {
|
|
298
|
+
capacity: "A cache key, value or batch exceeded the app cache's size limits.",
|
|
299
|
+
invalid: "The app made a cache request the app cache could not accept.",
|
|
300
|
+
unavailable: "The app cache was not available for this operation.",
|
|
301
|
+
storage: "The app cache failed to complete the operation.",
|
|
302
|
+
timeout: "The app cache did not respond in time."
|
|
303
|
+
};
|
|
304
|
+
var count = (value) => value.toLocaleString("en-US");
|
|
305
|
+
var cacheLimitMessages = {
|
|
306
|
+
keyBytes: `A cache key exceeded the app cache's limit of ${count(cacheLimits.keyBytes)} bytes per key.`,
|
|
307
|
+
entryBytes: `A cache value exceeded the app cache's limit of ${count(cacheLimits.entryBytes)} bytes per entry.`,
|
|
308
|
+
batchBytes: `A cache read or write exceeded the app cache's limit of ${count(cacheLimits.batchBytes)} bytes per batch.`,
|
|
309
|
+
batchEntries: `A cache read or write exceeded the app cache's limit of ${count(cacheLimits.batchEntries)} entries per batch.`,
|
|
310
|
+
totalBytes: `The app cache is full: it holds at most ${count(cacheLimits.totalBytes)} bytes.`,
|
|
311
|
+
totalEntries: `The app cache is full: it holds at most ${count(cacheLimits.totalEntries)} entries.`
|
|
312
|
+
};
|
|
313
|
+
var mcpStages = {
|
|
314
|
+
connect: "connecting",
|
|
315
|
+
transport: "connecting",
|
|
316
|
+
discover: "listing its tools",
|
|
317
|
+
schema: "reading a tool's schema",
|
|
318
|
+
call: "calling a tool"
|
|
319
|
+
};
|
|
320
|
+
var mcpMessage = ({ phase, reason, status }) => {
|
|
321
|
+
const stage = mcpStages[phase];
|
|
322
|
+
return Match_exports.value(reason).pipe(
|
|
323
|
+
Match_exports.when("timeout", () => `The MCP server did not respond in time while ${stage}.`),
|
|
324
|
+
Match_exports.when("unauthorized", () => `The MCP server rejected the credentials while ${stage}.`),
|
|
325
|
+
Match_exports.when(
|
|
326
|
+
"invalid_response",
|
|
327
|
+
() => `The MCP server returned a response Executor could not use while ${stage}, such as an unreadable message or an address on another origin.`
|
|
328
|
+
),
|
|
329
|
+
Match_exports.when("invalid_input", () => "The MCP server URL or connection settings are invalid."),
|
|
330
|
+
// Only a transport failure has no answer from the server; a JSON-RPC error is an answer.
|
|
331
|
+
Match_exports.when(
|
|
332
|
+
"request",
|
|
333
|
+
() => 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}.`
|
|
334
|
+
),
|
|
335
|
+
Match_exports.exhaustive
|
|
336
|
+
);
|
|
177
337
|
};
|
|
338
|
+
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
339
|
var minimumSecretLength = 6;
|
|
179
340
|
var secretValues = (value, found) => {
|
|
180
341
|
if (typeof value === "string") {
|
|
@@ -194,54 +355,155 @@ var accountFieldSecrets = (accounts) => {
|
|
|
194
355
|
return [...found].sort((a, b) => b.length - a.length);
|
|
195
356
|
};
|
|
196
357
|
var accountSecrets = (accounts) => accountFieldSecrets(Redacted_exports.value(accounts));
|
|
197
|
-
var
|
|
198
|
-
let redacted =
|
|
358
|
+
var replaceSecrets = (text, secrets) => {
|
|
359
|
+
let redacted = text;
|
|
199
360
|
for (const secret of secrets) redacted = redacted.split(secret).join("[redacted]");
|
|
200
|
-
return redacted
|
|
361
|
+
return redacted;
|
|
362
|
+
};
|
|
363
|
+
var bound = (text, maximum) => text.length <= maximum ? text : `${text.slice(0, maximum - 1)}\u2026`;
|
|
364
|
+
var boundText = (text, secrets, maximum) => bound(replaceSecrets(text, secrets), maximum);
|
|
365
|
+
var replaceSecretStart = (text, secrets) => {
|
|
366
|
+
let longest = 0;
|
|
367
|
+
for (const secret of secrets)
|
|
368
|
+
for (let length = Math.min(secret.length - 1, text.length); length > longest; length--)
|
|
369
|
+
if (text.endsWith(secret.slice(0, length))) {
|
|
370
|
+
longest = length;
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
return longest === 0 ? text : `${text.slice(0, -longest)}[redacted]`;
|
|
201
374
|
};
|
|
375
|
+
var boundFailureMessage = (message, secrets) => boundText(message, secrets, maxFailureMessageLength);
|
|
376
|
+
var redactUpstream = (upstream, secrets) => {
|
|
377
|
+
if (upstream?.message === void 0) return upstream;
|
|
378
|
+
const message = isShortenedUpstream(upstream.message) ? `${replaceSecretStart(replaceSecrets(upstream.message.slice(0, -1), secrets), secrets)}\u2026` : replaceSecrets(upstream.message, secrets);
|
|
379
|
+
return { code: upstream.code, message: bound(message, maxUpstreamMessageLength) };
|
|
380
|
+
};
|
|
381
|
+
var leavingProviderError = (error, secrets, phase) => providerError({
|
|
382
|
+
...error,
|
|
383
|
+
phase: error.phase ?? phase,
|
|
384
|
+
upstream: redactUpstream(error.upstream, secrets)
|
|
385
|
+
});
|
|
386
|
+
var parseMcpError = (error, secrets) => Schema_exports.decodeUnknownOption(McpError)(error).pipe(
|
|
387
|
+
Option_exports.map(({ phase, reason, status, upstream, session }) => {
|
|
388
|
+
const stated = redactUpstream(upstream, secrets);
|
|
389
|
+
return new McpError2({
|
|
390
|
+
phase,
|
|
391
|
+
reason,
|
|
392
|
+
...status === void 0 ? {} : { status },
|
|
393
|
+
...stated === void 0 ? {} : { upstream: stated },
|
|
394
|
+
...session === void 0 ? {} : { session }
|
|
395
|
+
});
|
|
396
|
+
})
|
|
397
|
+
);
|
|
398
|
+
var parseSkillLoadFailed = (error) => Schema_exports.decodeUnknownOption(SkillLoadFailed)(error).pipe(
|
|
399
|
+
Option_exports.map(
|
|
400
|
+
({ reason, message, status, missing }) => new SkillLoadFailed2({
|
|
401
|
+
reason,
|
|
402
|
+
...message ? { message } : {},
|
|
403
|
+
...status === void 0 ? {} : { status },
|
|
404
|
+
...missing === void 0 ? {} : { missing }
|
|
405
|
+
})
|
|
406
|
+
)
|
|
407
|
+
);
|
|
202
408
|
var errorName = (error) => (error.name.length > 0 ? error.name : "Error").slice(0, 128);
|
|
409
|
+
var ownCode = (error, secrets) => Predicate_exports.hasProperty(error, "code") && Schema_exports.is(FailureCode)(error.code) && error.code !== "" ? boundText(error.code, secrets, 128) : void 0;
|
|
410
|
+
var reservedFields = /* @__PURE__ */ new Set(["name", "message", "stack", "cause", "_tag"]);
|
|
411
|
+
var ownFields = (error, code, secrets) => {
|
|
412
|
+
const fields = {};
|
|
413
|
+
let count2 = 0;
|
|
414
|
+
for (const [key, value] of Object.entries(error)) {
|
|
415
|
+
if (count2 === maxFailureFields) break;
|
|
416
|
+
if (reservedFields.has(key) || key === "code" && code !== void 0) continue;
|
|
417
|
+
if (!Schema_exports.is(FailureFieldName)(key)) continue;
|
|
418
|
+
if (typeof value === "string") fields[key] = boundText(value, secrets, maxFailureFieldLength);
|
|
419
|
+
else if (typeof value === "boolean" || typeof value === "number" && Number.isFinite(value))
|
|
420
|
+
fields[key] = value;
|
|
421
|
+
else continue;
|
|
422
|
+
count2++;
|
|
423
|
+
}
|
|
424
|
+
return count2 === 0 ? void 0 : fields;
|
|
425
|
+
};
|
|
203
426
|
var ownMessage = (error) => {
|
|
204
427
|
const cause = error.cause;
|
|
205
428
|
const suffix = cause instanceof Error && cause.message.length > 0 ? ` (caused by ${errorName(cause)}: ${cause.message})` : "";
|
|
206
429
|
return error.message.length > 0 ? `${error.message}${suffix}` : void 0;
|
|
207
430
|
};
|
|
208
431
|
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`;
|
|
432
|
+
var openapiFailureMessage = (error) => {
|
|
433
|
+
const operation = error.operation === void 0 ? "The API request" : `${error.operation.method} ${error.operation.path}`;
|
|
434
|
+
if (error.reason === "invalid_definition")
|
|
435
|
+
return "The API's OpenAPI definition for this operation is invalid.";
|
|
436
|
+
if (error.reason === "invalid_input")
|
|
437
|
+
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}.`;
|
|
438
|
+
if (error.status === void 0) return `${operation} failed before a response arrived.`;
|
|
439
|
+
const shape = [error.contentType, error.bytes === void 0 ? void 0 : `${error.bytes} bytes`].filter((part) => part !== void 0).join(", ");
|
|
440
|
+
const response = `${operation} responded with HTTP ${error.status}${shape === "" ? "" : ` (${shape})`}`;
|
|
441
|
+
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.`;
|
|
442
|
+
};
|
|
209
443
|
var failureDetail = (error, secrets) => {
|
|
210
|
-
if (Schema_exports.is(
|
|
444
|
+
if (Schema_exports.is(CacheError)(error))
|
|
211
445
|
return {
|
|
212
446
|
source: "storage",
|
|
213
|
-
errorName: "
|
|
447
|
+
errorName: "CacheError",
|
|
214
448
|
code: error.reason,
|
|
215
|
-
message:
|
|
449
|
+
message: error.limit === void 0 ? cacheMessages[error.reason] : cacheLimitMessages[error.limit]
|
|
216
450
|
};
|
|
217
|
-
if (Schema_exports.is(
|
|
451
|
+
if (Schema_exports.is(OpenapiError)(error))
|
|
218
452
|
return {
|
|
219
|
-
source: "
|
|
220
|
-
errorName: "
|
|
221
|
-
|
|
453
|
+
source: "service",
|
|
454
|
+
errorName: "OpenapiError",
|
|
455
|
+
code: error.reason,
|
|
456
|
+
message: boundFailureMessage(openapiFailureMessage(error), secrets)
|
|
222
457
|
};
|
|
223
|
-
if (Schema_exports.is(
|
|
458
|
+
if (Schema_exports.is(McpError)(error))
|
|
224
459
|
return {
|
|
225
|
-
source: "
|
|
226
|
-
errorName: "
|
|
227
|
-
|
|
460
|
+
source: "service",
|
|
461
|
+
errorName: "McpError",
|
|
462
|
+
code: error.reason,
|
|
463
|
+
message: mcpMessage(error)
|
|
228
464
|
};
|
|
229
|
-
if (Schema_exports.is(
|
|
465
|
+
if (Schema_exports.is(McpCredentialsUnverified)(error))
|
|
230
466
|
return {
|
|
231
467
|
source: "service",
|
|
232
|
-
errorName: "
|
|
233
|
-
code: error.reason,
|
|
234
|
-
message: error
|
|
468
|
+
errorName: "McpCredentialsUnverified",
|
|
469
|
+
code: error.anonymous === "answered" ? "anonymous_access" : error.anonymous.reason,
|
|
470
|
+
message: unverifiedMessage(error)
|
|
235
471
|
};
|
|
236
|
-
if (error
|
|
472
|
+
if (Schema_exports.is(OpenapiCompileError)(error))
|
|
473
|
+
return {
|
|
474
|
+
source: "app",
|
|
475
|
+
errorName: "OpenapiCompileError",
|
|
476
|
+
code: error.code,
|
|
477
|
+
message: boundFailureMessage(error.message, secrets)
|
|
478
|
+
};
|
|
479
|
+
if (Schema_exports.is(NetworkRefused)(error))
|
|
480
|
+
return {
|
|
481
|
+
source: "app",
|
|
482
|
+
errorName: "NetworkRefused",
|
|
483
|
+
code: error.refusal.reason,
|
|
484
|
+
message: boundFailureMessage(error.message, secrets)
|
|
485
|
+
};
|
|
486
|
+
if (Schema_exports.is(FetchOptionUnsupported)(error))
|
|
487
|
+
return {
|
|
488
|
+
source: "app",
|
|
489
|
+
errorName: "FetchOptionUnsupported",
|
|
490
|
+
code: error.option,
|
|
491
|
+
message: boundFailureMessage(error.message, secrets)
|
|
492
|
+
};
|
|
493
|
+
if (error instanceof Error) {
|
|
494
|
+
const code = ownCode(error, secrets);
|
|
495
|
+
const fields = ownFields(error, code, secrets);
|
|
237
496
|
return {
|
|
238
497
|
source: "app",
|
|
239
498
|
errorName: errorName(error),
|
|
499
|
+
...code === void 0 ? {} : { code },
|
|
240
500
|
message: boundFailureMessage(
|
|
241
501
|
ownMessage(error) ?? `${errorName(error)} was thrown without a message.`,
|
|
242
502
|
secrets
|
|
243
|
-
)
|
|
503
|
+
),
|
|
504
|
+
...fields === void 0 ? {} : { fields }
|
|
244
505
|
};
|
|
506
|
+
}
|
|
245
507
|
if (typeof error === "string")
|
|
246
508
|
return { source: "app", errorName: "string", message: boundFailureMessage(error, secrets) };
|
|
247
509
|
return {
|
|
@@ -254,21 +516,11 @@ var failureDetail = (error, secrets) => {
|
|
|
254
516
|
// src/implementation/router-catalog.ts
|
|
255
517
|
var safeFailure = (error, secrets) => {
|
|
256
518
|
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
|
-
}
|
|
519
|
+
if (Option_exports.isSome(provider)) return leavingProviderError(provider.value, secrets, "discover");
|
|
520
|
+
const skills = parseSkillLoadFailed(error);
|
|
521
|
+
if (Option_exports.isSome(skills)) return skills.value;
|
|
522
|
+
const mcp = parseMcpError(error, secrets);
|
|
523
|
+
if (Option_exports.isSome(mcp)) return mcp.value;
|
|
272
524
|
if (Schema_exports.is(HostDeclarationInvalid)(error)) return error;
|
|
273
525
|
return new HostEvaluationFailed(failureDetail(error, secrets));
|
|
274
526
|
};
|
|
@@ -490,17 +742,29 @@ export {
|
|
|
490
742
|
OpenapiParameter,
|
|
491
743
|
OpenapiRequestBody,
|
|
492
744
|
OpenapiOperation,
|
|
745
|
+
isOpenapiReadMethod,
|
|
493
746
|
OpenapiToolsOptions,
|
|
747
|
+
OpenapiMediaType,
|
|
494
748
|
OpenapiError,
|
|
495
749
|
defaultOpenapiResponseLimits,
|
|
750
|
+
isOpenapiJsonSequence,
|
|
496
751
|
isOpenapiTextMedia,
|
|
497
752
|
isOpenapiFileSchema,
|
|
498
753
|
openapiBinaryResultSchema,
|
|
499
754
|
openapiMediaKind,
|
|
755
|
+
OpenapiCompileErrorCode,
|
|
756
|
+
OpenapiSkippedOperation,
|
|
757
|
+
OpenapiCompileError,
|
|
758
|
+
OpenapiToolName,
|
|
759
|
+
OpenapiToolNames,
|
|
500
760
|
accountSecrets,
|
|
501
761
|
boundFailureMessage,
|
|
762
|
+
leavingProviderError,
|
|
763
|
+
parseMcpError,
|
|
764
|
+
parseSkillLoadFailed,
|
|
502
765
|
describeFailure,
|
|
503
766
|
failureDetail,
|
|
767
|
+
operationDescription,
|
|
504
768
|
fixedRouter,
|
|
505
769
|
readCatalog,
|
|
506
770
|
routerSkills
|