apps 0.0.1-beta.7 → 0.0.1-beta.73
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-RJDDBDSN.js → chunk-3CVQ3VPP.js} +762 -171
- package/js/chunk-3R3KFCDU.js +426 -0
- package/js/chunk-5FHWNLCI.js +88 -0
- package/js/{chunk-M3B3DE4K.js → chunk-74YVXBKY.js} +463 -218
- package/js/chunk-7LMU3ER3.js +274 -0
- package/js/chunk-CDXQDN7W.js +92 -0
- package/js/{chunk-RFVIONFX.js → chunk-ECCWT5GJ.js} +79 -41
- package/js/{chunk-UK573G7W.js → chunk-EOPQ727L.js} +87 -51
- package/js/{chunk-CMYUWAX7.js → chunk-G7L5DHQX.js} +126 -31
- 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-WLE7WX2U.js → chunk-JW5LYSER.js} +2262 -474
- package/js/{chunk-5T57N25Q.js → chunk-KGCTYL2S.js} +511 -63
- package/js/{chunk-KUMBKVJD.js → chunk-KLYSEHUD.js} +2 -2
- package/js/chunk-LTF4TLMO.js +347 -0
- package/js/chunk-MHB7IFG7.js +49 -0
- package/js/{chunk-FL2QR3XW.js → chunk-OBYMFSWA.js} +333 -69
- package/js/chunk-OD3KFKZD.js +1617 -0
- package/js/{chunk-57RKNWL2.js → chunk-PD6I2SDG.js} +4 -4
- package/js/{chunk-72JNVHPK.js → chunk-QGHGYH5V.js} +4 -3
- package/js/{chunk-NKLWZJLE.js → chunk-RUP4JMKO.js} +25 -14
- package/js/{chunk-IJX4CYZO.js → chunk-TUMGL2OC.js} +228 -264
- package/js/{chunk-UESPOTUI.js → chunk-WCVV4PPS.js} +899 -190
- package/js/{chunk-IPI4MFSN.js → chunk-XBG7HHXC.js} +2 -2
- package/js/{chunk-Z5M2LQOZ.js → chunk-ZEJ3IKEC.js} +67 -55
- package/js/chunk-ZR7QAG67.js +171 -0
- package/js/client.js +142 -94
- package/js/contracts.js +125 -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 +8517 -214
- package/package.json +3 -4
- package/runtime.json +1 -1
- package/types/app-cache/src/contracts/cache.d.ts +2 -0
- 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 +641 -16
- 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 +3842 -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 +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/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 +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 +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/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 +2 -1
- package/types/telemetry/src/layer.d.ts +2 -2
- package/types/telemetry/src/measurements.d.ts +1 -1
- 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 +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-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,9 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
prepareElicitation
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WCVV4PPS.js";
|
|
4
4
|
import {
|
|
5
|
+
bodyUpstreamError,
|
|
5
6
|
fromPromise
|
|
6
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ZR7QAG67.js";
|
|
7
8
|
import {
|
|
8
9
|
ElicitationFailed,
|
|
9
10
|
McpError,
|
|
@@ -15,14 +16,18 @@ import {
|
|
|
15
16
|
defaultElicitationLimits,
|
|
16
17
|
defaultMcpClientLimits,
|
|
17
18
|
mcpSdkTimerCeilingMs
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-JW5LYSER.js";
|
|
19
20
|
import {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
jsonSchemaDecoder,
|
|
22
|
+
nestJsonSchema,
|
|
23
|
+
preparedJsonSchemaDecoder
|
|
24
|
+
} from "./chunk-KGCTYL2S.js";
|
|
25
|
+
import {
|
|
26
|
+
owned
|
|
27
|
+
} from "./chunk-3CVQ3VPP.js";
|
|
23
28
|
import {
|
|
24
29
|
JsonObject
|
|
25
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-H2CJWXA3.js";
|
|
26
31
|
import {
|
|
27
32
|
Clock_exports,
|
|
28
33
|
Deferred_exports,
|
|
@@ -31,29 +36,79 @@ import {
|
|
|
31
36
|
Option_exports,
|
|
32
37
|
Queue_exports,
|
|
33
38
|
Schema_exports
|
|
34
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
35
40
|
|
|
36
41
|
// src/implementation/mcp-tools.ts
|
|
42
|
+
var resultFields = {
|
|
43
|
+
content: { type: "array", items: { type: "object" } },
|
|
44
|
+
structuredContent: { type: "object" },
|
|
45
|
+
isError: { type: "boolean" },
|
|
46
|
+
_meta: { type: "object" }
|
|
47
|
+
};
|
|
48
|
+
var definitionReference = /^#\/(?:\$defs|definitions)\/[^/]+$/;
|
|
49
|
+
var locating = /* @__PURE__ */ new Set(["$id", "$anchor", "$dynamicAnchor", "$recursiveAnchor"]);
|
|
50
|
+
var onlyDefinitionReferences = (value) => Array.isArray(value) ? value.every(onlyDefinitionReferences) : value === null || typeof value !== "object" ? true : Object.entries(value).every(
|
|
51
|
+
([key, item]) => locating.has(key) || key === "$dynamicRef" || key === "$recursiveRef" ? false : key === "$ref" ? typeof item === "string" && definitionReference.test(item) : onlyDefinitionReferences(item)
|
|
52
|
+
);
|
|
53
|
+
var placed = (structuredContent, pointer) => {
|
|
54
|
+
if (onlyDefinitionReferences(structuredContent)) {
|
|
55
|
+
const { $defs, definitions, $schema: _draft, ...schema } = structuredContent;
|
|
56
|
+
return {
|
|
57
|
+
schema,
|
|
58
|
+
root: {
|
|
59
|
+
...$defs === void 0 ? {} : { $defs },
|
|
60
|
+
...definitions === void 0 ? {} : { definitions }
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
return { schema: nestJsonSchema(structuredContent, pointer), root: {} };
|
|
66
|
+
} catch {
|
|
67
|
+
return { schema: structuredContent, root: {} };
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
var resultSchema = (structuredContent) => {
|
|
71
|
+
if (structuredContent === void 0)
|
|
72
|
+
return { type: "object", properties: resultFields, required: ["content"] };
|
|
73
|
+
const { schema, root } = placed(structuredContent, "#/anyOf/0/properties/structuredContent");
|
|
74
|
+
return {
|
|
75
|
+
// The envelope's keywords mean the same in every draft, so the server's draft applies.
|
|
76
|
+
...structuredContent.$schema === void 0 ? {} : { $schema: structuredContent.$schema },
|
|
77
|
+
...root,
|
|
78
|
+
anyOf: [
|
|
79
|
+
{
|
|
80
|
+
type: "object",
|
|
81
|
+
properties: { ...resultFields, structuredContent: schema, isError: { const: false } },
|
|
82
|
+
required: ["content", "structuredContent"]
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: "object",
|
|
86
|
+
properties: { ...resultFields, isError: { const: true } },
|
|
87
|
+
required: ["content", "isError"]
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
};
|
|
91
|
+
};
|
|
37
92
|
var adaptMcpTool = (client, tool) => Effect_exports.gen(function* () {
|
|
38
93
|
const decoder = yield* jsonSchemaDecoder(tool.inputSchema).pipe(
|
|
39
94
|
Effect_exports.mapError(() => new McpError({ phase: "schema", reason: "invalid_response" }))
|
|
40
95
|
);
|
|
41
|
-
const output = tool.outputSchema
|
|
42
|
-
|
|
43
|
-
Effect_exports.mapError(() => new McpError({ phase: "schema", reason: "invalid_response" }))
|
|
44
|
-
)
|
|
45
|
-
);
|
|
96
|
+
const output = preparedJsonSchemaDecoder(resultSchema(tool.outputSchema));
|
|
97
|
+
const { outputSchema: _upstream, ...metadata } = tool;
|
|
46
98
|
const adapted = {
|
|
47
|
-
...
|
|
99
|
+
...metadata,
|
|
48
100
|
description: tool.description ?? tool.title ?? tool.name,
|
|
49
101
|
input: decoder,
|
|
102
|
+
output: output.decoder,
|
|
50
103
|
...tool.annotations?.readOnlyHint === void 0 ? {} : { readOnly: tool.annotations.readOnlyHint },
|
|
51
104
|
run: (context, input) => Effect_exports.gen(function* () {
|
|
52
105
|
const arguments_ = yield* Schema_exports.decodeUnknownEffect(decoder)(input).pipe(
|
|
53
106
|
Effect_exports.flatMap(Schema_exports.decodeUnknownEffect(JsonObject)),
|
|
54
107
|
Effect_exports.mapError(() => new McpError({ phase: "call", reason: "invalid_input" }))
|
|
55
108
|
);
|
|
56
|
-
|
|
109
|
+
yield* output.compile.pipe(
|
|
110
|
+
Effect_exports.mapError(() => new McpError({ phase: "schema", reason: "invalid_response" }))
|
|
111
|
+
);
|
|
57
112
|
const result = yield* client.call(tool.name, arguments_, context);
|
|
58
113
|
if (result.isError === true) {
|
|
59
114
|
(yield* ToolResultObservation).failed();
|
|
@@ -62,10 +117,6 @@ var adaptMcpTool = (client, tool) => Effect_exports.gen(function* () {
|
|
|
62
117
|
"error.type": "McpToolError"
|
|
63
118
|
});
|
|
64
119
|
}
|
|
65
|
-
if (outputDecoder !== void 0 && !result.isError)
|
|
66
|
-
yield* Schema_exports.decodeUnknownEffect(outputDecoder)(result.structuredContent).pipe(
|
|
67
|
-
Effect_exports.mapError(() => new McpError({ phase: "call", reason: "invalid_response" }))
|
|
68
|
-
);
|
|
69
120
|
return result;
|
|
70
121
|
})
|
|
71
122
|
};
|
|
@@ -81,7 +132,11 @@ var adaptMcpTools = (client) => Effect_exports.gen(function* () {
|
|
|
81
132
|
});
|
|
82
133
|
|
|
83
134
|
// src/implementation/mcp-client.ts
|
|
84
|
-
import {
|
|
135
|
+
import {
|
|
136
|
+
ErrorCode as ErrorCode2,
|
|
137
|
+
ListToolsResultSchema,
|
|
138
|
+
McpError as ProtocolError2
|
|
139
|
+
} from "@modelcontextprotocol/sdk/types.js";
|
|
85
140
|
|
|
86
141
|
// src/implementation/mcp-call.ts
|
|
87
142
|
import {
|
|
@@ -133,11 +188,14 @@ var mcpCall = (client, name, input, context, timeoutMs, failure) => Effect_expor
|
|
|
133
188
|
const callbacks = /* @__PURE__ */ new Set();
|
|
134
189
|
const lifetime = yield* Effect_exports.acquireRelease(
|
|
135
190
|
Effect_exports.sync(() => new AbortController()),
|
|
136
|
-
(controller) =>
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
191
|
+
(controller) => (
|
|
192
|
+
// oxlint-disable-next-line executor/authored-code-through-adapter -- the MCP SDK's elicitation callbacks
|
|
193
|
+
Effect_exports.promise(async () => {
|
|
194
|
+
controller.abort();
|
|
195
|
+
client.removeRequestHandler("elicitation/create");
|
|
196
|
+
await Promise.allSettled(callbacks);
|
|
197
|
+
})
|
|
198
|
+
)
|
|
141
199
|
);
|
|
142
200
|
client.setRequestHandler(ElicitRequestSchema, (request, extra) => {
|
|
143
201
|
const signal = AbortSignal.any([lifetime.signal, extra.signal]);
|
|
@@ -149,7 +207,10 @@ var mcpCall = (client, name, input, context, timeoutMs, failure) => Effect_expor
|
|
|
149
207
|
const deliver = context.elicit;
|
|
150
208
|
if (deliver === void 0) return yield* new ElicitationFailed({ reason: "unavailable" });
|
|
151
209
|
const answer = yield* budget.waitForInput(
|
|
152
|
-
fromPromise(
|
|
210
|
+
fromPromise(
|
|
211
|
+
deliver,
|
|
212
|
+
"elicitation"
|
|
213
|
+
)(form.request).pipe(
|
|
153
214
|
Effect_exports.mapError(
|
|
154
215
|
(error) => Option_exports.getOrElse(
|
|
155
216
|
Schema_exports.decodeUnknownOption(ElicitationFailed)(error),
|
|
@@ -199,7 +260,7 @@ var mcpCall = (client, name, input, context, timeoutMs, failure) => Effect_expor
|
|
|
199
260
|
);
|
|
200
261
|
})
|
|
201
262
|
).pipe(
|
|
202
|
-
|
|
263
|
+
owned("upstream", "provider.mcp.request", {
|
|
203
264
|
kind: "client",
|
|
204
265
|
attributes: {
|
|
205
266
|
"rpc.system.name": "jsonrpc",
|
|
@@ -210,6 +271,20 @@ var mcpCall = (client, name, input, context, timeoutMs, failure) => Effect_expor
|
|
|
210
271
|
);
|
|
211
272
|
|
|
212
273
|
// src/implementation/mcp-client.ts
|
|
274
|
+
var clientCodes = /* @__PURE__ */ new Set([
|
|
275
|
+
ErrorCode2.RequestTimeout,
|
|
276
|
+
ErrorCode2.ConnectionClosed
|
|
277
|
+
]);
|
|
278
|
+
var answeredError = (error) => {
|
|
279
|
+
if (!(error instanceof ProtocolError2) || clientCodes.has(error.code)) return void 0;
|
|
280
|
+
const prefix = `MCP error ${error.code}: `;
|
|
281
|
+
return bodyUpstreamError({
|
|
282
|
+
error: {
|
|
283
|
+
code: error.code,
|
|
284
|
+
message: error.message.startsWith(prefix) ? error.message.slice(prefix.length) : error.message
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
};
|
|
213
288
|
var mcpJsonSchemaValidator = {
|
|
214
289
|
getValidator(document) {
|
|
215
290
|
const decoder = Effect_exports.runSync(jsonSchemaDecoder(document));
|
|
@@ -243,7 +318,7 @@ function mcpClient(withClient, timeoutMs, failure) {
|
|
|
243
318
|
),
|
|
244
319
|
catch: (error) => failure("discover", error)
|
|
245
320
|
}).pipe(
|
|
246
|
-
|
|
321
|
+
owned("upstream", "provider.mcp.request", {
|
|
247
322
|
kind: "client",
|
|
248
323
|
attributes: { "rpc.system.name": "jsonrpc", "rpc.method": "tools/list" }
|
|
249
324
|
})
|
|
@@ -284,16 +359,36 @@ function mcpClient(withClient, timeoutMs, failure) {
|
|
|
284
359
|
server: Option_exports.getOrElse(server, () => ({}))
|
|
285
360
|
};
|
|
286
361
|
})
|
|
287
|
-
).pipe(
|
|
362
|
+
).pipe(owned("upstream", "provider.mcp.discover"));
|
|
363
|
+
const check = withClient(
|
|
364
|
+
"discover",
|
|
365
|
+
(client) => (
|
|
366
|
+
// oxlint-disable-next-line executor/authored-code-through-adapter -- MCP SDK
|
|
367
|
+
Effect_exports.tryPromise({
|
|
368
|
+
try: (signal) => client.request({ method: "tools/list", params: {} }, ListToolsResultSchema, {
|
|
369
|
+
signal,
|
|
370
|
+
timeout: timeoutMs
|
|
371
|
+
}),
|
|
372
|
+
catch: (error) => failure("discover", error)
|
|
373
|
+
}).pipe(
|
|
374
|
+
Effect_exports.asVoid,
|
|
375
|
+
owned("upstream", "provider.mcp.request", {
|
|
376
|
+
kind: "client",
|
|
377
|
+
attributes: { "rpc.system.name": "jsonrpc", "rpc.method": "tools/list" }
|
|
378
|
+
})
|
|
379
|
+
)
|
|
380
|
+
)
|
|
381
|
+
).pipe(owned("upstream", "provider.mcp.check"));
|
|
288
382
|
const call = (name, input, context) => withClient("call", (client) => mcpCall(client, name, input, context, timeoutMs, failure)).pipe(
|
|
289
|
-
|
|
383
|
+
owned("upstream", "provider.mcp.call", { attributes: { "mcp.tool.name": name } })
|
|
290
384
|
);
|
|
291
|
-
return { list, call };
|
|
385
|
+
return { list, check, call };
|
|
292
386
|
}
|
|
293
387
|
|
|
294
388
|
export {
|
|
295
389
|
adaptMcpTool,
|
|
296
390
|
adaptMcpTools,
|
|
391
|
+
answeredError,
|
|
297
392
|
mcpJsonSchemaValidator,
|
|
298
393
|
mcpClient
|
|
299
394
|
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Schema_exports
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
4
4
|
|
|
5
5
|
// src/contracts/schema.ts
|
|
6
6
|
var JsonValue = Schema_exports.Json;
|
|
7
7
|
var JsonObject = Schema_exports.Record(Schema_exports.String, JsonValue);
|
|
8
8
|
var AccountId = Schema_exports.String.pipe(
|
|
9
|
-
Schema_exports.check(Schema_exports.
|
|
9
|
+
Schema_exports.check(Schema_exports.isStartingWith("acc_"), Schema_exports.isMinLength(5)),
|
|
10
10
|
Schema_exports.brand("acc")
|
|
11
11
|
);
|
|
12
12
|
var HttpUrl = Schema_exports.String.check(
|
|
@@ -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 {
|