stitchkit 0.100.2 → 0.100.3
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/CHANGELOG.md +86 -0
- package/README.md +2 -1
- package/dist/entrypoints/agent-runtime/browser.js +119 -119
- package/dist/entrypoints/agent-runtime/coding-tools.js +15 -20
- package/dist/entrypoints/agent-runtime/harness.js +55 -63
- package/dist/entrypoints/agent-runtime/openrouter.js +6 -6
- package/dist/entrypoints/agent-runtime/sandbox.js +20 -25
- package/dist/entrypoints/agent-runtime/sqlite/bun.js +11 -13
- package/dist/entrypoints/agent-runtime/sqlite/node.js +11 -13
- package/dist/entrypoints/agent-runtime/testing.js +32 -34
- package/dist/entrypoints/agent-runtime.js +395 -402
- package/dist/entrypoints/application/diagnostic-journal.js +26 -27
- package/dist/entrypoints/application/directory-inbox.js +16 -17
- package/dist/entrypoints/application/grammy.js +13 -13
- package/dist/entrypoints/application/opentelemetry.js +13 -13
- package/dist/entrypoints/application/schemas.js +24 -24
- package/dist/entrypoints/application.js +208 -210
- package/dist/entrypoints/bin/upgrade-cli.js +2 -2
- package/dist/entrypoints/cli.js +81 -84
- package/dist/entrypoints/contract.js +54 -57
- package/dist/entrypoints/declaration.js +22 -22
- package/dist/entrypoints/files.js +18 -21
- package/dist/entrypoints/geo.js +7 -8
- package/dist/entrypoints/google.js +2 -2
- package/dist/entrypoints/index.js +150 -154
- package/dist/entrypoints/live.js +45 -47
- package/dist/entrypoints/node.js +68 -74
- package/dist/entrypoints/oauth.js +6 -6
- package/dist/entrypoints/observability.d.ts +1 -0
- package/dist/entrypoints/observability.d.ts.map +1 -1
- package/dist/entrypoints/observability.js +115 -87
- package/dist/entrypoints/primitives.js +35 -35
- package/dist/entrypoints/react/keyboard.d.ts +4 -0
- package/dist/entrypoints/react/keyboard.d.ts.map +1 -0
- package/dist/entrypoints/react/keyboard.js +397 -0
- package/dist/entrypoints/react.js +10 -10
- package/dist/entrypoints/release.js +7 -7
- package/dist/entrypoints/remote.js +15 -17
- package/dist/entrypoints/server.js +198 -200
- package/dist/entrypoints/telegram/html.d.ts +5 -0
- package/dist/entrypoints/telegram/html.d.ts.map +1 -0
- package/dist/entrypoints/telegram/html.js +26 -0
- package/dist/entrypoints/telegram/screens.d.ts +14 -0
- package/dist/entrypoints/telegram/screens.d.ts.map +1 -0
- package/dist/entrypoints/telegram/screens.js +2028 -0
- package/dist/entrypoints/telegram.d.ts +5 -1
- package/dist/entrypoints/telegram.d.ts.map +1 -1
- package/dist/entrypoints/telegram.js +548 -156
- package/dist/entrypoints/testing.js +75 -79
- package/dist/entrypoints/tools/connections.js +30 -32
- package/dist/entrypoints/tools/contract.js +18 -20
- package/dist/entrypoints/tools/invoker.js +12 -17
- package/dist/entrypoints/tools.js +223 -229
- package/dist/entrypoints/tracking/server.js +6 -6
- package/dist/entrypoints/tracking.js +40 -42
- package/dist/entrypoints/voice.js +3 -3
- package/dist/{index-eaysmdtq.js → index-0ndk4555.js} +56 -56
- package/dist/{index-2bxbyab0.js → index-1bx1xv1k.js} +1 -1
- package/dist/{index-p5r7qpdd.js → index-1eeqpadm.js} +4 -4
- package/dist/{index-hadmp193.js → index-3ct7hhq6.js} +210 -210
- package/dist/{index-e01r054k.js → index-45tdvqa3.js} +26 -26
- package/dist/{index-dce5wxcq.js → index-4s0fep5q.js} +8 -8
- package/dist/index-50ejfz75.js +9 -0
- package/dist/{index-m9zn6cpq.js → index-5107q189.js} +12 -12
- package/dist/{index-sbdmyz75.js → index-5cc6r990.js} +3 -3
- package/dist/index-6k1svmjh.js +141 -0
- package/dist/{index-c6bxbsnc.js → index-7kxw1awn.js} +2 -2
- package/dist/{index-0r0fbk7z.js → index-7z9ym7t8.js} +28 -28
- package/dist/{index-p7hgdyhb.js → index-814xpr6d.js} +2 -2
- package/dist/{index-gtj3zc53.js → index-8kzct1d6.js} +99 -99
- package/dist/{index-1zbbzgfh.js → index-9pw0a51a.js} +4 -4
- package/dist/{index-79z7m7dt.js → index-a9pd417t.js} +35 -35
- package/dist/{index-ham5sz8m.js → index-aaj97r4y.js} +45 -45
- package/dist/{index-s812ycat.js → index-aan6hqb9.js} +3 -3
- package/dist/{index-10x2hbx0.js → index-adhgd4pe.js} +44 -44
- package/dist/{index-2gxzjvyr.js → index-afjvjyck.js} +23 -23
- package/dist/{index-qmy6zq75.js → index-ahvsksw5.js} +16 -16
- package/dist/{index-hr4tzbwq.js → index-ap3gqe56.js} +3 -3
- package/dist/{index-znfs20ss.js → index-b2bz0kdm.js} +16 -16
- package/dist/{index-r066jx76.js → index-c6aagrbd.js} +148 -120
- package/dist/{index-k30h66yd.js → index-ck71tbcf.js} +9 -9
- package/dist/{index-eqqvgdb3.js → index-ct75c3at.js} +2 -2
- package/dist/{index-gw8bmyaj.js → index-djjhhgjk.js} +41 -41
- package/dist/{index-8qt2m66q.js → index-dvwj1f43.js} +43 -43
- package/dist/{index-fhwqwxe0.js → index-ej331hah.js} +1 -1
- package/dist/{index-9t3dffv2.js → index-ewbaywk5.js} +5 -5
- package/dist/{index-7p1f0vp2.js → index-fyphpknh.js} +25 -25
- package/dist/{index-83bdg97s.js → index-g149e9pk.js} +1 -1
- package/dist/{index-ngfhvfpd.js → index-g6a3na27.js} +4 -4
- package/dist/{index-qwhynv6x.js → index-h124epcf.js} +20 -20
- package/dist/{index-h6eeys1v.js → index-h97tqqp1.js} +9 -9
- package/dist/{index-zcgf3gqf.js → index-hby4qhax.js} +10 -10
- package/dist/{index-5jrd0yng.js → index-j8aw2c0e.js} +4 -4
- package/dist/{index-d8m8zpd8.js → index-jzczzcsb.js} +14 -14
- package/dist/index-kqnd6a85.js +26 -0
- package/dist/{index-35mh5bhj.js → index-kw1ws0cs.js} +12 -12
- package/dist/{index-yw4fzmdz.js → index-kzz6rq0w.js} +28 -17
- package/dist/{index-4gcnakhx.js → index-m38ej7e5.js} +2 -2
- package/dist/{index-ndddxtyx.js → index-m79yr938.js} +19 -19
- package/dist/{index-5p2m7we1.js → index-m9fndta6.js} +11 -11
- package/dist/index-mnkk1ffz.js +150 -0
- package/dist/index-n15jny5b.js +4 -0
- package/dist/{index-2vtcmrj9.js → index-n53mswt3.js} +20 -20
- package/dist/{index-bt14acb5.js → index-n5yqxd3d.js} +21 -21
- package/dist/{index-bm5rx7n6.js → index-n9tyz8z3.js} +12 -12
- package/dist/index-nmaqxdx7.js +463 -0
- package/dist/{index-mqv3b5rh.js → index-nx6eazt0.js} +30 -30
- package/dist/{index-3z73fh2c.js → index-q0th8q0z.js} +9 -9
- package/dist/{index-v260df89.js → index-qjeggp8w.js} +20 -20
- package/dist/{index-zfrhfn82.js → index-r1z0rd9c.js} +20 -20
- package/dist/{index-wqgjfstn.js → index-r5c4fedv.js} +3 -3
- package/dist/{index-cyktc4bp.js → index-r5hsgkz5.js} +118 -118
- package/dist/{index-0b1ess5e.js → index-r7a7r7ha.js} +1 -1
- package/dist/{index-1j8pm5t0.js → index-rfkh44ss.js} +15 -15
- package/dist/index-rz3z13e9.js +47 -0
- package/dist/{index-k6gpggb9.js → index-s80awwsw.js} +35 -35
- package/dist/{index-vqr7f7v8.js → index-ssmd41kh.js} +124 -124
- package/dist/{index-ensd0r74.js → index-v14qqmys.js} +41 -41
- package/dist/{index-paz6sgdp.js → index-v4a2fjtk.js} +36 -36
- package/dist/{index-d9pk3td4.js → index-w0eqdhyd.js} +14 -14
- package/dist/{index-5qn1kx34.js → index-w575evhq.js} +29 -29
- package/dist/{index-3gye9wzb.js → index-w5s3xftz.js} +26 -26
- package/dist/{index-tm88avnj.js → index-wykebpn9.js} +3 -3
- package/dist/{index-sh3s86na.js → index-xkhk5d6g.js} +17 -17
- package/dist/{index-6k1937bx.js → index-xqhede6x.js} +4 -4
- package/dist/{index-f4fx2tza.js → index-zs4ms3th.js} +181 -181
- package/dist/{index-k5hsfc3j.js → index-zsvzhjtk.js} +1 -1
- package/dist/observability/bounded-logger.d.ts +2 -0
- package/dist/observability/bounded-logger.d.ts.map +1 -1
- package/dist/observability/sanitize.d.ts +6 -0
- package/dist/observability/sanitize.d.ts.map +1 -1
- package/dist/observability/secret-values.d.ts +25 -0
- package/dist/observability/secret-values.d.ts.map +1 -0
- package/dist/react/keyboard/hooks.d.ts +71 -0
- package/dist/react/keyboard/hooks.d.ts.map +1 -0
- package/dist/react/keyboard/layers.d.ts +98 -0
- package/dist/react/keyboard/layers.d.ts.map +1 -0
- package/dist/react/keyboard/zone.d.ts +139 -0
- package/dist/react/keyboard/zone.d.ts.map +1 -0
- package/dist/telegram/crypto.d.ts +16 -0
- package/dist/telegram/crypto.d.ts.map +1 -0
- package/dist/telegram/html/check.d.ts +26 -0
- package/dist/telegram/html/check.d.ts.map +1 -0
- package/dist/telegram/html/nodes.d.ts +70 -0
- package/dist/telegram/html/nodes.d.ts.map +1 -0
- package/dist/telegram/html/parse.d.ts +35 -0
- package/dist/telegram/html/parse.d.ts.map +1 -0
- package/dist/telegram/html/render.d.ts +39 -0
- package/dist/telegram/html/render.d.ts.map +1 -0
- package/dist/telegram/init-data.d.ts.map +1 -1
- package/dist/telegram/operator-channel.d.ts +36 -3
- package/dist/telegram/operator-channel.d.ts.map +1 -1
- package/dist/telegram/screens/callback-codec.d.ts +34 -0
- package/dist/telegram/screens/callback-codec.d.ts.map +1 -0
- package/dist/telegram/screens/dispatch.d.ts +22 -0
- package/dist/telegram/screens/dispatch.d.ts.map +1 -0
- package/dist/telegram/screens/display.d.ts +70 -0
- package/dist/telegram/screens/display.d.ts.map +1 -0
- package/dist/telegram/screens/execute.d.ts +57 -0
- package/dist/telegram/screens/execute.d.ts.map +1 -0
- package/dist/telegram/screens/html.d.ts +36 -0
- package/dist/telegram/screens/html.d.ts.map +1 -0
- package/dist/telegram/screens/outcome.d.ts +74 -0
- package/dist/telegram/screens/outcome.d.ts.map +1 -0
- package/dist/telegram/screens/path.d.ts +29 -0
- package/dist/telegram/screens/path.d.ts.map +1 -0
- package/dist/telegram/screens/reconcile.d.ts +67 -0
- package/dist/telegram/screens/reconcile.d.ts.map +1 -0
- package/dist/telegram/screens/registry.d.ts +23 -0
- package/dist/telegram/screens/registry.d.ts.map +1 -0
- package/dist/telegram/screens/render.d.ts +70 -0
- package/dist/telegram/screens/render.d.ts.map +1 -0
- package/dist/telegram/screens/runtime.d.ts +133 -0
- package/dist/telegram/screens/runtime.d.ts.map +1 -0
- package/dist/telegram/screens/screen-types.d.ts +130 -0
- package/dist/telegram/screens/screen-types.d.ts.map +1 -0
- package/dist/telegram/screens/screen.d.ts +138 -0
- package/dist/telegram/screens/screen.d.ts.map +1 -0
- package/dist/telegram/screens/state.d.ts +115 -0
- package/dist/telegram/screens/state.d.ts.map +1 -0
- package/dist/telegram/screens/telegram-screens.d.ts +18 -0
- package/dist/telegram/screens/telegram-screens.d.ts.map +1 -0
- package/dist/telegram/screens/test-chat-telegram.d.ts +47 -0
- package/dist/telegram/screens/test-chat-telegram.d.ts.map +1 -0
- package/dist/telegram/screens/test-chat.d.ts +66 -0
- package/dist/telegram/screens/test-chat.d.ts.map +1 -0
- package/dist/telegram/screens/view.d.ts +89 -0
- package/dist/telegram/screens/view.d.ts.map +1 -0
- package/dist/telegram/send-failure.d.ts +19 -0
- package/dist/telegram/send-failure.d.ts.map +1 -1
- package/dist/telegram/update-intake.d.ts +78 -0
- package/dist/telegram/update-intake.d.ts.map +1 -0
- package/dist/telegram/update-store-sqlite.d.ts +26 -0
- package/dist/telegram/update-store-sqlite.d.ts.map +1 -0
- package/dist/telegram/update-store.d.ts +67 -0
- package/dist/telegram/update-store.d.ts.map +1 -0
- package/dist/telegram/webhook.d.ts +105 -0
- package/dist/telegram/webhook.d.ts.map +1 -0
- package/dist/tools/cli/args-fields.d.ts +8 -0
- package/dist/tools/cli/args-fields.d.ts.map +1 -1
- package/dist/tools/cli/args-route.d.ts.map +1 -1
- package/dist/tools/cli/args.d.ts.map +1 -1
- package/dist/tools/cli/help.d.ts.map +1 -1
- package/llms/cli.txt +8 -2
- package/llms/observability.txt +2 -1
- package/llms/react-keyboard.txt +193 -0
- package/llms/stitchkit.txt +7 -1
- package/llms/telegram-html.txt +35 -0
- package/llms/telegram-screens.txt +365 -0
- package/llms/telegram.txt +160 -4
- package/llms-full.txt +736 -8
- package/llms.txt +10 -5
- package/package.json +17 -2
- package/dist/index-2k4yrqkc.js +0 -9
- package/dist/index-crykmqkr.js +0 -26
- package/dist/index-y64k3s0h.js +0 -150
- package/dist/index-y91ry9h2.js +0 -4
- /package/dist/{index-hffjpmq9.js → index-9jfdm5tg.js} +0 -0
- /package/dist/{index-zjjyynm3.js → index-d4pa2bgs.js} +0 -0
- /package/dist/{index-rxfy4cq7.js → index-dwfv9a85.js} +0 -0
- /package/dist/{index-5jm36zv1.js → index-gfk7nrht.js} +0 -0
- /package/dist/{index-b9aefrqd.js → index-n1dqr7gf.js} +0 -0
- /package/dist/{index-q3pyb9n0.js → index-sykb5ag7.js} +0 -0
- /package/dist/{index-48ffdxgk.js → index-xhzq2qvj.js} +0 -0
- /package/dist/{index-kzfs85xp.js → index-zsarb5xp.js} +0 -0
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./index-
|
|
2
|
+
unauthorized2
|
|
3
|
+
} from "./index-n53mswt3.js";
|
|
4
4
|
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} from "./index-rxfy4cq7.js";
|
|
5
|
+
deriveCodeChallenge2
|
|
6
|
+
} from "./index-ap3gqe56.js";
|
|
8
7
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
bytesToBase64Url,
|
|
9
|
+
base64UrlToBytes
|
|
10
|
+
} from "./index-dwfv9a85.js";
|
|
11
11
|
import {
|
|
12
12
|
safeJsonParse
|
|
13
|
-
} from "./index-
|
|
13
|
+
} from "./index-zsarb5xp.js";
|
|
14
14
|
import {
|
|
15
15
|
isRecord
|
|
16
|
-
} from "./index-
|
|
16
|
+
} from "./index-9jfdm5tg.js";
|
|
17
17
|
|
|
18
18
|
// src/server/middleware/jwt.ts
|
|
19
19
|
var MAX_TOKEN_BYTES = 8192;
|
|
20
|
-
async function
|
|
20
|
+
async function verifyJwt2(token, secret, options = {}) {
|
|
21
21
|
if (!secret)
|
|
22
22
|
throw new Error("verifyJwt: a non-empty secret is required");
|
|
23
23
|
if (token.length > MAX_TOKEN_BYTES)
|
|
24
|
-
throw
|
|
24
|
+
throw unauthorized2("Token too large");
|
|
25
25
|
const [headerB64, payloadB64, signatureB64] = token.split(".");
|
|
26
26
|
if (!headerB64 || !payloadB64 || !signatureB64)
|
|
27
|
-
throw
|
|
27
|
+
throw unauthorized2("Invalid token format");
|
|
28
28
|
let header;
|
|
29
29
|
let payloadRaw;
|
|
30
30
|
let signature;
|
|
@@ -34,45 +34,45 @@ async function verifyJwt(token, secret, options = {}) {
|
|
|
34
34
|
payloadRaw = safeJsonParse(decoder.decode(base64UrlToBytes(payloadB64)));
|
|
35
35
|
signature = base64UrlToBytes(signatureB64);
|
|
36
36
|
} catch {
|
|
37
|
-
throw
|
|
37
|
+
throw unauthorized2("Malformed token");
|
|
38
38
|
}
|
|
39
39
|
if (!isRecord(payloadRaw))
|
|
40
|
-
throw
|
|
40
|
+
throw unauthorized2("Malformed token");
|
|
41
41
|
const payload = payloadRaw;
|
|
42
42
|
if (header.alg !== "HS256")
|
|
43
|
-
throw
|
|
43
|
+
throw unauthorized2("Unsupported token algorithm");
|
|
44
44
|
const encoder = new TextEncoder;
|
|
45
45
|
const key = await crypto.subtle.importKey("raw", encoder.encode(secret), { name: "HMAC", hash: "SHA-256" }, false, ["verify"]);
|
|
46
46
|
const data = encoder.encode(`${headerB64}.${payloadB64}`);
|
|
47
47
|
const valid = await crypto.subtle.verify("HMAC", key, signature, data);
|
|
48
48
|
if (!valid)
|
|
49
|
-
throw
|
|
49
|
+
throw unauthorized2("Invalid token signature");
|
|
50
50
|
const leeway = options.leewaySeconds ?? 60;
|
|
51
51
|
const now = Date.now() / 1000;
|
|
52
52
|
if ("exp" in payload) {
|
|
53
53
|
if (typeof payload.exp !== "number")
|
|
54
|
-
throw
|
|
54
|
+
throw unauthorized2("Malformed token");
|
|
55
55
|
if (payload.exp < now - leeway)
|
|
56
|
-
throw
|
|
56
|
+
throw unauthorized2("Token expired");
|
|
57
57
|
}
|
|
58
58
|
if ("nbf" in payload) {
|
|
59
59
|
if (typeof payload.nbf !== "number")
|
|
60
|
-
throw
|
|
60
|
+
throw unauthorized2("Malformed token");
|
|
61
61
|
if (payload.nbf > now + leeway)
|
|
62
|
-
throw
|
|
62
|
+
throw unauthorized2("Token not yet valid");
|
|
63
63
|
}
|
|
64
64
|
if (options.issuer !== undefined && payload.iss !== options.issuer) {
|
|
65
|
-
throw
|
|
65
|
+
throw unauthorized2("Token issuer mismatch");
|
|
66
66
|
}
|
|
67
67
|
if (options.audience !== undefined) {
|
|
68
68
|
const aud = payload.aud;
|
|
69
69
|
const ok = Array.isArray(aud) ? aud.includes(options.audience) : aud === options.audience;
|
|
70
70
|
if (!ok)
|
|
71
|
-
throw
|
|
71
|
+
throw unauthorized2("Token audience mismatch");
|
|
72
72
|
}
|
|
73
73
|
return payload;
|
|
74
74
|
}
|
|
75
|
-
async function
|
|
75
|
+
async function signJwt2(payload, secret, options = {}) {
|
|
76
76
|
if (!secret)
|
|
77
77
|
throw new Error("signJwt: a non-empty secret is required");
|
|
78
78
|
const now = Math.floor(Date.now() / 1000);
|
|
@@ -95,11 +95,11 @@ async function signJwt(payload, secret, options = {}) {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
// src/server/middleware/pkce.ts
|
|
98
|
-
async function
|
|
98
|
+
async function verifyPkce2(verifier, challenge) {
|
|
99
99
|
if (!verifier || !challenge)
|
|
100
100
|
return false;
|
|
101
|
-
const derived = await
|
|
101
|
+
const derived = await deriveCodeChallenge2(verifier);
|
|
102
102
|
return derived === challenge;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
export {
|
|
105
|
+
export { verifyJwt2, signJwt2, verifyPkce2 };
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
// src/realtime/request.ts
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
var
|
|
3
|
+
var RealtimeRequestPhaseSchema2 = z.enum([
|
|
4
4
|
"engine-handoff",
|
|
5
5
|
"engine-ack-received",
|
|
6
6
|
"settled",
|
|
7
7
|
"timeout",
|
|
8
8
|
"disconnected"
|
|
9
9
|
]);
|
|
10
|
-
var
|
|
10
|
+
var RealtimeRequestPhaseEventSchema2 = z.object({
|
|
11
11
|
requestId: z.string().min(1),
|
|
12
12
|
event: z.string().min(1),
|
|
13
|
-
phase:
|
|
13
|
+
phase: RealtimeRequestPhaseSchema2,
|
|
14
14
|
elapsedMs: z.number().nonnegative()
|
|
15
15
|
}).strict();
|
|
16
16
|
|
|
17
|
-
class
|
|
17
|
+
class RealtimeRequestTimeoutError2 extends Error {
|
|
18
18
|
code = "REALTIME_REQUEST_TIMEOUT";
|
|
19
19
|
event;
|
|
20
20
|
timeoutMs;
|
|
@@ -26,7 +26,7 @@ class RealtimeRequestTimeoutError extends Error {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
class
|
|
29
|
+
class RealtimeRequestDisconnectedError2 extends Error {
|
|
30
30
|
code = "REALTIME_REQUEST_DISCONNECTED";
|
|
31
31
|
event;
|
|
32
32
|
constructor(event) {
|
|
@@ -36,7 +36,7 @@ class RealtimeRequestDisconnectedError extends Error {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
class
|
|
39
|
+
class RealtimeRequestInvalidAcknowledgementError2 extends Error {
|
|
40
40
|
code = "REALTIME_REQUEST_INVALID_ACKNOWLEDGEMENT";
|
|
41
41
|
event;
|
|
42
42
|
constructor(event, cause) {
|
|
@@ -46,7 +46,7 @@ class RealtimeRequestInvalidAcknowledgementError extends Error {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
class
|
|
49
|
+
class RealtimeRequestRejectedError2 extends Error {
|
|
50
50
|
code = "REALTIME_REQUEST_REJECTED";
|
|
51
51
|
event;
|
|
52
52
|
reason;
|
|
@@ -60,4 +60,4 @@ class RealtimeRequestRejectedError extends Error {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
export {
|
|
63
|
+
export { RealtimeRequestPhaseSchema2, RealtimeRequestPhaseEventSchema2, RealtimeRequestTimeoutError2, RealtimeRequestDisconnectedError2, RealtimeRequestInvalidAcknowledgementError2, RealtimeRequestRejectedError2 };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// src/application/resource.ts
|
|
2
|
+
function managedResourceDependencyId2(dependency) {
|
|
3
|
+
return typeof dependency === "string" ? dependency : dependency.id;
|
|
4
|
+
}
|
|
5
|
+
function defineManagedResource2(resource) {
|
|
6
|
+
return resource;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export { managedResourceDependencyId2, defineManagedResource2 };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// src/tools/operations/async-operation-contract.ts
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
var
|
|
3
|
+
var AsyncOperationCancelResultSchema2 = z.discriminatedUnion("outcome", [
|
|
4
4
|
z.object({ outcome: z.literal("accepted") }),
|
|
5
5
|
z.object({ outcome: z.literal("already_terminal") }),
|
|
6
6
|
z.object({ outcome: z.literal("rejected"), reason: z.string().min(1) })
|
|
7
7
|
]);
|
|
8
|
-
function
|
|
8
|
+
function createAsyncOperationSnapshotSchema2(config) {
|
|
9
9
|
const progress = config.progress ? { progress: config.progress.optional() } : {};
|
|
10
10
|
return z.discriminatedUnion("phase", [
|
|
11
11
|
z.object({ phase: z.literal("pending"), ...progress }),
|
|
@@ -18,34 +18,34 @@ function createAsyncOperationSnapshotSchema(config) {
|
|
|
18
18
|
// src/tools/transfer/view-file-contract.ts
|
|
19
19
|
import { z as z2 } from "zod";
|
|
20
20
|
var MAX_VIEW_FILES = 20;
|
|
21
|
-
var
|
|
21
|
+
var McpAnnotationsSchema2 = z2.object({
|
|
22
22
|
audience: z2.array(z2.enum(["user", "assistant"])).optional(),
|
|
23
23
|
priority: z2.number().optional()
|
|
24
24
|
});
|
|
25
|
-
var
|
|
25
|
+
var McpMediaContentSchema2 = z2.discriminatedUnion("type", [
|
|
26
26
|
z2.object({ type: z2.literal("text"), text: z2.string() }),
|
|
27
27
|
z2.object({
|
|
28
28
|
type: z2.literal("image"),
|
|
29
29
|
data: z2.string(),
|
|
30
30
|
mimeType: z2.string(),
|
|
31
|
-
annotations:
|
|
31
|
+
annotations: McpAnnotationsSchema2.optional()
|
|
32
32
|
}),
|
|
33
33
|
z2.object({
|
|
34
34
|
type: z2.literal("audio"),
|
|
35
35
|
data: z2.string(),
|
|
36
36
|
mimeType: z2.string(),
|
|
37
|
-
annotations:
|
|
37
|
+
annotations: McpAnnotationsSchema2.optional()
|
|
38
38
|
})
|
|
39
39
|
]);
|
|
40
|
-
var
|
|
40
|
+
var ViewFileErrorSchema2 = z2.object({
|
|
41
41
|
path: z2.string(),
|
|
42
42
|
message: z2.string()
|
|
43
43
|
});
|
|
44
|
-
var
|
|
45
|
-
content: z2.array(
|
|
46
|
-
errors: z2.array(
|
|
44
|
+
var ViewFileOutputSchema2 = z2.object({
|
|
45
|
+
content: z2.array(McpMediaContentSchema2),
|
|
46
|
+
errors: z2.array(ViewFileErrorSchema2)
|
|
47
47
|
});
|
|
48
|
-
var
|
|
48
|
+
var ViewFileInputSchema2 = z2.object({
|
|
49
49
|
paths: z2.union([z2.string(), z2.array(z2.string()).max(MAX_VIEW_FILES)]).describe("Media URL(s) or file path(s) to view")
|
|
50
50
|
});
|
|
51
|
-
export {
|
|
51
|
+
export { AsyncOperationCancelResultSchema2, createAsyncOperationSnapshotSchema2, McpAnnotationsSchema2, McpMediaContentSchema2, ViewFileErrorSchema2, ViewFileOutputSchema2, ViewFileInputSchema2 };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/internal/within-dir.ts
|
|
2
2
|
import { realpath } from "node:fs/promises";
|
|
3
3
|
import { sep } from "node:path";
|
|
4
|
-
function
|
|
4
|
+
function isWithinDir2(root, target) {
|
|
5
5
|
const base = root.endsWith(sep) ? root.slice(0, -sep.length) : root;
|
|
6
6
|
return target === root || target === base || target.startsWith(base + sep);
|
|
7
7
|
}
|
|
@@ -12,7 +12,7 @@ async function realPathWithinDir(root, target) {
|
|
|
12
12
|
]);
|
|
13
13
|
if (realRoot === null || realTarget === null)
|
|
14
14
|
return null;
|
|
15
|
-
return
|
|
15
|
+
return isWithinDir2(realRoot, realTarget) ? realTarget : null;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
export {
|
|
18
|
+
export { isWithinDir2, realPathWithinDir };
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isRecord
|
|
3
|
+
} from "./index-9jfdm5tg.js";
|
|
4
|
+
|
|
5
|
+
// src/telegram/send-failure.ts
|
|
6
|
+
var BY_DESCRIPTION = [
|
|
7
|
+
[/bot was blocked by the user|bot was kicked/i, "blocked-by-user"],
|
|
8
|
+
[/user is deactivated|account is deactivated/i, "user-deactivated"],
|
|
9
|
+
[/can'?t initiate conversation|need to start a conversation/i, "not-started"],
|
|
10
|
+
[/chat not found|peer_id_invalid|user not found/i, "chat-not-found"],
|
|
11
|
+
[/too many requests|retry later|flood/i, "rate-limited"],
|
|
12
|
+
[
|
|
13
|
+
/message is too long|can'?t parse entities|message text is empty|wrong file identifier|button_url_invalid/i,
|
|
14
|
+
"message-invalid"
|
|
15
|
+
]
|
|
16
|
+
];
|
|
17
|
+
var RETRYABLE = new Set([
|
|
18
|
+
"rate-limited",
|
|
19
|
+
"server-error"
|
|
20
|
+
]);
|
|
21
|
+
var UNREACHABLE = new Set([
|
|
22
|
+
"blocked-by-user",
|
|
23
|
+
"user-deactivated",
|
|
24
|
+
"chat-not-found",
|
|
25
|
+
"not-started"
|
|
26
|
+
]);
|
|
27
|
+
function numberAt(value, keys) {
|
|
28
|
+
if (!isRecord(value))
|
|
29
|
+
return;
|
|
30
|
+
for (const key of keys) {
|
|
31
|
+
const candidate = value[key];
|
|
32
|
+
if (typeof candidate === "number" && Number.isFinite(candidate))
|
|
33
|
+
return candidate;
|
|
34
|
+
}
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
function statusOf(value, depth = 0) {
|
|
38
|
+
if (!isRecord(value) || depth > 4)
|
|
39
|
+
return;
|
|
40
|
+
const direct = numberAt(value, ["error_code", "statusCode", "status"]);
|
|
41
|
+
if (direct !== undefined && direct >= 400 && direct < 600)
|
|
42
|
+
return direct;
|
|
43
|
+
const nested = value.cause ?? value.response ?? value.error;
|
|
44
|
+
return nested === value ? undefined : statusOf(nested, depth + 1);
|
|
45
|
+
}
|
|
46
|
+
function retryAfterOf(value, depth = 0) {
|
|
47
|
+
if (!isRecord(value) || depth > 4)
|
|
48
|
+
return;
|
|
49
|
+
const direct = numberAt(value.parameters, ["retry_after"]);
|
|
50
|
+
if (direct !== undefined)
|
|
51
|
+
return direct;
|
|
52
|
+
const nested = value.cause ?? value.response ?? value.error;
|
|
53
|
+
return nested === value ? undefined : retryAfterOf(nested, depth + 1);
|
|
54
|
+
}
|
|
55
|
+
function descriptionOf(value, depth = 0) {
|
|
56
|
+
if (typeof value === "string")
|
|
57
|
+
return value;
|
|
58
|
+
if (value instanceof Error) {
|
|
59
|
+
const nested = isRecord(value) ? descriptionOf(value.cause, depth + 1) : "";
|
|
60
|
+
return `${value.message} ${nested}`.trim();
|
|
61
|
+
}
|
|
62
|
+
if (!isRecord(value) || depth > 4)
|
|
63
|
+
return "";
|
|
64
|
+
const own = typeof value.description === "string" ? value.description : "";
|
|
65
|
+
const message = typeof value.message === "string" ? value.message : "";
|
|
66
|
+
const nested = descriptionOf(value.cause ?? value.response ?? value.error, depth + 1);
|
|
67
|
+
return [own, message, nested].filter(Boolean).join(" ");
|
|
68
|
+
}
|
|
69
|
+
function classifyTelegramSendFailure2(error) {
|
|
70
|
+
const status = statusOf(error);
|
|
71
|
+
const retryAfterSeconds = retryAfterOf(error);
|
|
72
|
+
const description = descriptionOf(error);
|
|
73
|
+
if (retryAfterSeconds !== undefined) {
|
|
74
|
+
return {
|
|
75
|
+
reason: "rate-limited",
|
|
76
|
+
...status !== undefined && { status },
|
|
77
|
+
retryAfterSeconds,
|
|
78
|
+
retryable: true,
|
|
79
|
+
recipientUnreachable: false,
|
|
80
|
+
evidence: "parameters"
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
for (const [pattern, reason] of BY_DESCRIPTION) {
|
|
84
|
+
if (pattern.test(description)) {
|
|
85
|
+
return {
|
|
86
|
+
reason,
|
|
87
|
+
...status !== undefined && { status },
|
|
88
|
+
retryable: RETRYABLE.has(reason),
|
|
89
|
+
recipientUnreachable: UNREACHABLE.has(reason),
|
|
90
|
+
evidence: "description"
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (status === 429) {
|
|
95
|
+
return {
|
|
96
|
+
reason: "rate-limited",
|
|
97
|
+
status,
|
|
98
|
+
retryable: true,
|
|
99
|
+
recipientUnreachable: false,
|
|
100
|
+
evidence: "status"
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (status !== undefined && status >= 500) {
|
|
104
|
+
return {
|
|
105
|
+
reason: "server-error",
|
|
106
|
+
status,
|
|
107
|
+
retryable: true,
|
|
108
|
+
recipientUnreachable: false,
|
|
109
|
+
evidence: "status"
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
reason: "unknown",
|
|
114
|
+
...status !== undefined && { status },
|
|
115
|
+
retryable: false,
|
|
116
|
+
recipientUnreachable: false,
|
|
117
|
+
evidence: "none"
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
var EDIT_REFUSALS = [
|
|
121
|
+
[/message is not modified/i, "not-modified"],
|
|
122
|
+
[
|
|
123
|
+
/message to (edit|delete) not found|message_id_invalid|message identifier is not specified/i,
|
|
124
|
+
"message-gone"
|
|
125
|
+
],
|
|
126
|
+
[
|
|
127
|
+
/message can'?t be (edited|deleted)|there is no (text|caption) in the message to edit/i,
|
|
128
|
+
"message-locked"
|
|
129
|
+
],
|
|
130
|
+
[/query is too old|query id is invalid/i, "query-expired"]
|
|
131
|
+
];
|
|
132
|
+
function classifyTelegramEditRefusal(error) {
|
|
133
|
+
const description = descriptionOf(error);
|
|
134
|
+
for (const [pattern, refusal] of EDIT_REFUSALS) {
|
|
135
|
+
if (pattern.test(description))
|
|
136
|
+
return refusal;
|
|
137
|
+
}
|
|
138
|
+
return "other";
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export { classifyTelegramSendFailure2, classifyTelegramEditRefusal };
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./index-
|
|
2
|
+
AppError2
|
|
3
|
+
} from "./index-n53mswt3.js";
|
|
4
4
|
import {
|
|
5
5
|
validateDeclaredOutput
|
|
6
|
-
} from "./index-
|
|
6
|
+
} from "./index-b2bz0kdm.js";
|
|
7
7
|
import {
|
|
8
|
-
|
|
9
|
-
} from "./index-
|
|
8
|
+
toJsonSchema
|
|
9
|
+
} from "./index-ct75c3at.js";
|
|
10
10
|
import {
|
|
11
11
|
serializeCanonicalJson
|
|
12
|
-
} from "./index-
|
|
12
|
+
} from "./index-zsvzhjtk.js";
|
|
13
13
|
import {
|
|
14
14
|
isRecord
|
|
15
|
-
} from "./index-
|
|
15
|
+
} from "./index-9jfdm5tg.js";
|
|
16
16
|
|
|
17
17
|
// src/tools/schema/portable-formats.ts
|
|
18
|
-
var
|
|
18
|
+
var PORTABLE_JSON_SCHEMA_FORMATS2 = new Set([
|
|
19
19
|
"date",
|
|
20
20
|
"time",
|
|
21
21
|
"date-time",
|
|
@@ -40,8 +40,8 @@ function keywordPath(prefix, keyword) {
|
|
|
40
40
|
return `${prefix}${keyword}`;
|
|
41
41
|
return prefix ? `${prefix}.${keyword}` : keyword;
|
|
42
42
|
}
|
|
43
|
-
function
|
|
44
|
-
const allowed = new Set([...
|
|
43
|
+
function findNonPortableFormats2(schema, allowFormats = []) {
|
|
44
|
+
const allowed = new Set([...PORTABLE_JSON_SCHEMA_FORMATS2, ...allowFormats]);
|
|
45
45
|
const found = [];
|
|
46
46
|
const pending = [{ value: schema, path: "" }];
|
|
47
47
|
while (pending.length > 0) {
|
|
@@ -408,14 +408,14 @@ function flattenNode(node) {
|
|
|
408
408
|
if (!variant)
|
|
409
409
|
continue;
|
|
410
410
|
const labels = discriminator.values[index] ?? [];
|
|
411
|
-
const
|
|
411
|
+
const required = requiredKeys(variant);
|
|
412
412
|
if (!isRecord(variant.properties))
|
|
413
413
|
continue;
|
|
414
414
|
for (const [key, rawSchema] of Object.entries(variant.properties)) {
|
|
415
415
|
if (key === discriminator.key || !isRecord(rawSchema))
|
|
416
416
|
continue;
|
|
417
417
|
const entries = perKey.get(key) ?? [];
|
|
418
|
-
entries.push({ schema: rawSchema, labels, required:
|
|
418
|
+
entries.push({ schema: rawSchema, labels, required: required.has(key) });
|
|
419
419
|
perKey.set(key, entries);
|
|
420
420
|
}
|
|
421
421
|
}
|
|
@@ -463,7 +463,7 @@ function flattenNode(node) {
|
|
|
463
463
|
result.additionalProperties = variants.every((variant) => variant.additionalProperties === false) ? false : {};
|
|
464
464
|
return result;
|
|
465
465
|
}
|
|
466
|
-
function
|
|
466
|
+
function flattenToolJsonSchema2(schema) {
|
|
467
467
|
const result = rebuild(schema);
|
|
468
468
|
return isRecord(result) ? result : {};
|
|
469
469
|
}
|
|
@@ -487,7 +487,7 @@ var TYPE_KEYWORDS2 = ["type", "enum", "const", "anyOf", "oneOf", "allOf", "$ref"
|
|
|
487
487
|
function saysWhatItIs(schema) {
|
|
488
488
|
return TYPE_KEYWORDS2.some((keyword) => schema[keyword] !== undefined);
|
|
489
489
|
}
|
|
490
|
-
function
|
|
490
|
+
function findUntypedProperties2(schema, prefix = "") {
|
|
491
491
|
if (!isRecord(schema))
|
|
492
492
|
return [];
|
|
493
493
|
const found = [];
|
|
@@ -503,18 +503,18 @@ function findUntypedProperties(schema, prefix = "") {
|
|
|
503
503
|
...typeof description === "string" && { description }
|
|
504
504
|
});
|
|
505
505
|
}
|
|
506
|
-
found.push(...
|
|
506
|
+
found.push(...findUntypedProperties2(value, path));
|
|
507
507
|
}
|
|
508
508
|
}
|
|
509
509
|
}
|
|
510
510
|
for (const key of ["items", "additionalProperties"]) {
|
|
511
511
|
const child = schema[key];
|
|
512
512
|
if (isRecord(child))
|
|
513
|
-
found.push(...
|
|
513
|
+
found.push(...findUntypedProperties2(child, prefix));
|
|
514
514
|
if (Array.isArray(child)) {
|
|
515
515
|
for (const entry of child) {
|
|
516
516
|
if (isRecord(entry))
|
|
517
|
-
found.push(...
|
|
517
|
+
found.push(...findUntypedProperties2(entry, prefix));
|
|
518
518
|
}
|
|
519
519
|
}
|
|
520
520
|
}
|
|
@@ -523,7 +523,7 @@ function findUntypedProperties(schema, prefix = "") {
|
|
|
523
523
|
if (Array.isArray(child)) {
|
|
524
524
|
for (const entry of child) {
|
|
525
525
|
if (isRecord(entry))
|
|
526
|
-
found.push(...
|
|
526
|
+
found.push(...findUntypedProperties2(entry, prefix));
|
|
527
527
|
}
|
|
528
528
|
}
|
|
529
529
|
}
|
|
@@ -531,7 +531,7 @@ function findUntypedProperties(schema, prefix = "") {
|
|
|
531
531
|
if (isRecord(patterned)) {
|
|
532
532
|
for (const value of Object.values(patterned)) {
|
|
533
533
|
if (isRecord(value))
|
|
534
|
-
found.push(...
|
|
534
|
+
found.push(...findUntypedProperties2(value, prefix));
|
|
535
535
|
}
|
|
536
536
|
}
|
|
537
537
|
for (const key of ["$defs", "definitions"]) {
|
|
@@ -540,14 +540,14 @@ function findUntypedProperties(schema, prefix = "") {
|
|
|
540
540
|
continue;
|
|
541
541
|
for (const definition of Object.values(container)) {
|
|
542
542
|
if (isRecord(definition))
|
|
543
|
-
found.push(...
|
|
543
|
+
found.push(...findUntypedProperties2(definition, prefix));
|
|
544
544
|
}
|
|
545
545
|
}
|
|
546
546
|
for (const key of ["allOf", "anyOf", "oneOf"]) {
|
|
547
547
|
const branches = schema[key];
|
|
548
548
|
if (Array.isArray(branches)) {
|
|
549
549
|
for (const branch of branches)
|
|
550
|
-
found.push(...
|
|
550
|
+
found.push(...findUntypedProperties2(branch, prefix));
|
|
551
551
|
}
|
|
552
552
|
}
|
|
553
553
|
return found;
|
|
@@ -576,7 +576,7 @@ function projectToolView(options) {
|
|
|
576
576
|
try {
|
|
577
577
|
projected = Reflect.apply(view.project, undefined, [options.full, options.call]);
|
|
578
578
|
} catch (error) {
|
|
579
|
-
const failure = new
|
|
579
|
+
const failure = new AppError2("INTERNAL_SERVER_ERROR", `${options.operation} toolView.project threw`, 500);
|
|
580
580
|
failure.cause = error;
|
|
581
581
|
throw failure;
|
|
582
582
|
}
|
|
@@ -584,7 +584,7 @@ function projectToolView(options) {
|
|
|
584
584
|
Promise.resolve(projected).catch(() => {
|
|
585
585
|
return;
|
|
586
586
|
});
|
|
587
|
-
throw new
|
|
587
|
+
throw new AppError2("INTERNAL_SERVER_ERROR", `${options.operation} toolView.project returned a Promise — it must be synchronous`, 500);
|
|
588
588
|
}
|
|
589
589
|
if (projected === undefined) {
|
|
590
590
|
return {
|
|
@@ -875,7 +875,7 @@ function schemaFromZod(schema, unrepresentable, flatten) {
|
|
|
875
875
|
if (!schema)
|
|
876
876
|
return;
|
|
877
877
|
const json = toJsonSchema(schema, "input", unrepresentable, "draft-07");
|
|
878
|
-
return flatten ?
|
|
878
|
+
return flatten ? flattenToolJsonSchema2(json) : json;
|
|
879
879
|
}
|
|
880
880
|
function buildToolPresentationSchema(config) {
|
|
881
881
|
const unrepresentable = config.unrepresentable ?? "any";
|
|
@@ -1162,7 +1162,7 @@ function prepareProjectedMcpTools(tools, config = {}) {
|
|
|
1162
1162
|
}
|
|
1163
1163
|
if (config.schemaValidation?.requireTypedProperties) {
|
|
1164
1164
|
const allowed = new Set(config.schemaValidation.allowUntyped ?? []);
|
|
1165
|
-
for (const untyped of
|
|
1165
|
+
for (const untyped of findUntypedProperties2(inputSchema)) {
|
|
1166
1166
|
const path = `${tool.name}.${untyped.path}`;
|
|
1167
1167
|
if (allowed.has(path))
|
|
1168
1168
|
continue;
|
|
@@ -1171,7 +1171,7 @@ function prepareProjectedMcpTools(tools, config = {}) {
|
|
|
1171
1171
|
}
|
|
1172
1172
|
}
|
|
1173
1173
|
if (config.schemaValidation?.requirePortableFormats) {
|
|
1174
|
-
for (const finding of
|
|
1174
|
+
for (const finding of findNonPortableFormats2(inputSchema, config.schemaValidation.allowFormats)) {
|
|
1175
1175
|
reportIncompatible(`MCP tool "${tool.name}" — input property "${finding.path}" uses non-portable JSON Schema format "${finding.format}". Use a portable pattern/schema, or list the format in \`allowFormats\` only when every MCP client supports it.`, policy === "skip" ? "warn" : policy, config.logger, failures);
|
|
1176
1176
|
}
|
|
1177
1177
|
}
|
|
@@ -1182,7 +1182,7 @@ function prepareProjectedMcpTools(tools, config = {}) {
|
|
|
1182
1182
|
const output = toJsonSchema(outputSchema, "output");
|
|
1183
1183
|
compatibleOutput = outputSchema;
|
|
1184
1184
|
if (config.schemaValidation?.requirePortableFormats) {
|
|
1185
|
-
for (const finding of
|
|
1185
|
+
for (const finding of findNonPortableFormats2(output, config.schemaValidation.allowFormats)) {
|
|
1186
1186
|
reportIncompatible(`MCP tool "${tool.name}" — output property "${finding.path}" uses non-portable JSON Schema format "${finding.format}". Use a portable pattern/schema, or list the format in \`allowFormats\` only when every MCP client supports it.`, policy === "skip" ? "warn" : policy, config.logger, failures);
|
|
1187
1187
|
}
|
|
1188
1188
|
}
|
|
@@ -1204,4 +1204,4 @@ function prepareProjectedMcpTools(tools, config = {}) {
|
|
|
1204
1204
|
return prepared;
|
|
1205
1205
|
}
|
|
1206
1206
|
|
|
1207
|
-
export { toolSurfaceOutputSchema, applyToolViewDefaults, projectToolView, objectShapeKeys, rebuildObject, mergeSchemas, staticInputRounds, validateMcpRoundPolicy, validateResolvedInputRounds, assertToolName, assertUniqueToolName,
|
|
1207
|
+
export { toolSurfaceOutputSchema, applyToolViewDefaults, projectToolView, objectShapeKeys, rebuildObject, mergeSchemas, staticInputRounds, validateMcpRoundPolicy, validateResolvedInputRounds, assertToolName, assertUniqueToolName, PORTABLE_JSON_SCHEMA_FORMATS2, findNonPortableFormats2, declaresDraft07, withDefsDialect, flattenToolJsonSchema2, buildToolPresentationSchema, presentationMetadata, findUntypedProperties2, assertToolExtensionCompatible, projectRuntimeTool, projectToolSurface, mcpProjectionCandidate, prepareProjectedMcpTools };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/realtime/contract.ts
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
function
|
|
3
|
+
function defineRealtimeContract2(contract) {
|
|
4
4
|
return contract;
|
|
5
5
|
}
|
|
6
6
|
var RealtimeRejectDirectionSchema = z.enum([
|
|
@@ -19,4 +19,4 @@ var RealtimeRejectReasonSchema = z.enum([
|
|
|
19
19
|
]);
|
|
20
20
|
var RealtimeRejectFaultSchema = z.enum(["peer", "local"]);
|
|
21
21
|
|
|
22
|
-
export {
|
|
22
|
+
export { defineRealtimeContract2, RealtimeRejectDirectionSchema, RealtimeRejectPhaseSchema, RealtimeRejectReasonSchema, RealtimeRejectFaultSchema };
|