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.
Files changed (225) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +2 -1
  3. package/dist/entrypoints/agent-runtime/browser.js +119 -119
  4. package/dist/entrypoints/agent-runtime/coding-tools.js +15 -20
  5. package/dist/entrypoints/agent-runtime/harness.js +55 -63
  6. package/dist/entrypoints/agent-runtime/openrouter.js +6 -6
  7. package/dist/entrypoints/agent-runtime/sandbox.js +20 -25
  8. package/dist/entrypoints/agent-runtime/sqlite/bun.js +11 -13
  9. package/dist/entrypoints/agent-runtime/sqlite/node.js +11 -13
  10. package/dist/entrypoints/agent-runtime/testing.js +32 -34
  11. package/dist/entrypoints/agent-runtime.js +395 -402
  12. package/dist/entrypoints/application/diagnostic-journal.js +26 -27
  13. package/dist/entrypoints/application/directory-inbox.js +16 -17
  14. package/dist/entrypoints/application/grammy.js +13 -13
  15. package/dist/entrypoints/application/opentelemetry.js +13 -13
  16. package/dist/entrypoints/application/schemas.js +24 -24
  17. package/dist/entrypoints/application.js +208 -210
  18. package/dist/entrypoints/bin/upgrade-cli.js +2 -2
  19. package/dist/entrypoints/cli.js +81 -84
  20. package/dist/entrypoints/contract.js +54 -57
  21. package/dist/entrypoints/declaration.js +22 -22
  22. package/dist/entrypoints/files.js +18 -21
  23. package/dist/entrypoints/geo.js +7 -8
  24. package/dist/entrypoints/google.js +2 -2
  25. package/dist/entrypoints/index.js +150 -154
  26. package/dist/entrypoints/live.js +45 -47
  27. package/dist/entrypoints/node.js +68 -74
  28. package/dist/entrypoints/oauth.js +6 -6
  29. package/dist/entrypoints/observability.d.ts +1 -0
  30. package/dist/entrypoints/observability.d.ts.map +1 -1
  31. package/dist/entrypoints/observability.js +115 -87
  32. package/dist/entrypoints/primitives.js +35 -35
  33. package/dist/entrypoints/react/keyboard.d.ts +4 -0
  34. package/dist/entrypoints/react/keyboard.d.ts.map +1 -0
  35. package/dist/entrypoints/react/keyboard.js +397 -0
  36. package/dist/entrypoints/react.js +10 -10
  37. package/dist/entrypoints/release.js +7 -7
  38. package/dist/entrypoints/remote.js +15 -17
  39. package/dist/entrypoints/server.js +198 -200
  40. package/dist/entrypoints/telegram/html.d.ts +5 -0
  41. package/dist/entrypoints/telegram/html.d.ts.map +1 -0
  42. package/dist/entrypoints/telegram/html.js +26 -0
  43. package/dist/entrypoints/telegram/screens.d.ts +14 -0
  44. package/dist/entrypoints/telegram/screens.d.ts.map +1 -0
  45. package/dist/entrypoints/telegram/screens.js +2028 -0
  46. package/dist/entrypoints/telegram.d.ts +5 -1
  47. package/dist/entrypoints/telegram.d.ts.map +1 -1
  48. package/dist/entrypoints/telegram.js +548 -156
  49. package/dist/entrypoints/testing.js +75 -79
  50. package/dist/entrypoints/tools/connections.js +30 -32
  51. package/dist/entrypoints/tools/contract.js +18 -20
  52. package/dist/entrypoints/tools/invoker.js +12 -17
  53. package/dist/entrypoints/tools.js +223 -229
  54. package/dist/entrypoints/tracking/server.js +6 -6
  55. package/dist/entrypoints/tracking.js +40 -42
  56. package/dist/entrypoints/voice.js +3 -3
  57. package/dist/{index-eaysmdtq.js → index-0ndk4555.js} +56 -56
  58. package/dist/{index-2bxbyab0.js → index-1bx1xv1k.js} +1 -1
  59. package/dist/{index-p5r7qpdd.js → index-1eeqpadm.js} +4 -4
  60. package/dist/{index-hadmp193.js → index-3ct7hhq6.js} +210 -210
  61. package/dist/{index-e01r054k.js → index-45tdvqa3.js} +26 -26
  62. package/dist/{index-dce5wxcq.js → index-4s0fep5q.js} +8 -8
  63. package/dist/index-50ejfz75.js +9 -0
  64. package/dist/{index-m9zn6cpq.js → index-5107q189.js} +12 -12
  65. package/dist/{index-sbdmyz75.js → index-5cc6r990.js} +3 -3
  66. package/dist/index-6k1svmjh.js +141 -0
  67. package/dist/{index-c6bxbsnc.js → index-7kxw1awn.js} +2 -2
  68. package/dist/{index-0r0fbk7z.js → index-7z9ym7t8.js} +28 -28
  69. package/dist/{index-p7hgdyhb.js → index-814xpr6d.js} +2 -2
  70. package/dist/{index-gtj3zc53.js → index-8kzct1d6.js} +99 -99
  71. package/dist/{index-1zbbzgfh.js → index-9pw0a51a.js} +4 -4
  72. package/dist/{index-79z7m7dt.js → index-a9pd417t.js} +35 -35
  73. package/dist/{index-ham5sz8m.js → index-aaj97r4y.js} +45 -45
  74. package/dist/{index-s812ycat.js → index-aan6hqb9.js} +3 -3
  75. package/dist/{index-10x2hbx0.js → index-adhgd4pe.js} +44 -44
  76. package/dist/{index-2gxzjvyr.js → index-afjvjyck.js} +23 -23
  77. package/dist/{index-qmy6zq75.js → index-ahvsksw5.js} +16 -16
  78. package/dist/{index-hr4tzbwq.js → index-ap3gqe56.js} +3 -3
  79. package/dist/{index-znfs20ss.js → index-b2bz0kdm.js} +16 -16
  80. package/dist/{index-r066jx76.js → index-c6aagrbd.js} +148 -120
  81. package/dist/{index-k30h66yd.js → index-ck71tbcf.js} +9 -9
  82. package/dist/{index-eqqvgdb3.js → index-ct75c3at.js} +2 -2
  83. package/dist/{index-gw8bmyaj.js → index-djjhhgjk.js} +41 -41
  84. package/dist/{index-8qt2m66q.js → index-dvwj1f43.js} +43 -43
  85. package/dist/{index-fhwqwxe0.js → index-ej331hah.js} +1 -1
  86. package/dist/{index-9t3dffv2.js → index-ewbaywk5.js} +5 -5
  87. package/dist/{index-7p1f0vp2.js → index-fyphpknh.js} +25 -25
  88. package/dist/{index-83bdg97s.js → index-g149e9pk.js} +1 -1
  89. package/dist/{index-ngfhvfpd.js → index-g6a3na27.js} +4 -4
  90. package/dist/{index-qwhynv6x.js → index-h124epcf.js} +20 -20
  91. package/dist/{index-h6eeys1v.js → index-h97tqqp1.js} +9 -9
  92. package/dist/{index-zcgf3gqf.js → index-hby4qhax.js} +10 -10
  93. package/dist/{index-5jrd0yng.js → index-j8aw2c0e.js} +4 -4
  94. package/dist/{index-d8m8zpd8.js → index-jzczzcsb.js} +14 -14
  95. package/dist/index-kqnd6a85.js +26 -0
  96. package/dist/{index-35mh5bhj.js → index-kw1ws0cs.js} +12 -12
  97. package/dist/{index-yw4fzmdz.js → index-kzz6rq0w.js} +28 -17
  98. package/dist/{index-4gcnakhx.js → index-m38ej7e5.js} +2 -2
  99. package/dist/{index-ndddxtyx.js → index-m79yr938.js} +19 -19
  100. package/dist/{index-5p2m7we1.js → index-m9fndta6.js} +11 -11
  101. package/dist/index-mnkk1ffz.js +150 -0
  102. package/dist/index-n15jny5b.js +4 -0
  103. package/dist/{index-2vtcmrj9.js → index-n53mswt3.js} +20 -20
  104. package/dist/{index-bt14acb5.js → index-n5yqxd3d.js} +21 -21
  105. package/dist/{index-bm5rx7n6.js → index-n9tyz8z3.js} +12 -12
  106. package/dist/index-nmaqxdx7.js +463 -0
  107. package/dist/{index-mqv3b5rh.js → index-nx6eazt0.js} +30 -30
  108. package/dist/{index-3z73fh2c.js → index-q0th8q0z.js} +9 -9
  109. package/dist/{index-v260df89.js → index-qjeggp8w.js} +20 -20
  110. package/dist/{index-zfrhfn82.js → index-r1z0rd9c.js} +20 -20
  111. package/dist/{index-wqgjfstn.js → index-r5c4fedv.js} +3 -3
  112. package/dist/{index-cyktc4bp.js → index-r5hsgkz5.js} +118 -118
  113. package/dist/{index-0b1ess5e.js → index-r7a7r7ha.js} +1 -1
  114. package/dist/{index-1j8pm5t0.js → index-rfkh44ss.js} +15 -15
  115. package/dist/index-rz3z13e9.js +47 -0
  116. package/dist/{index-k6gpggb9.js → index-s80awwsw.js} +35 -35
  117. package/dist/{index-vqr7f7v8.js → index-ssmd41kh.js} +124 -124
  118. package/dist/{index-ensd0r74.js → index-v14qqmys.js} +41 -41
  119. package/dist/{index-paz6sgdp.js → index-v4a2fjtk.js} +36 -36
  120. package/dist/{index-d9pk3td4.js → index-w0eqdhyd.js} +14 -14
  121. package/dist/{index-5qn1kx34.js → index-w575evhq.js} +29 -29
  122. package/dist/{index-3gye9wzb.js → index-w5s3xftz.js} +26 -26
  123. package/dist/{index-tm88avnj.js → index-wykebpn9.js} +3 -3
  124. package/dist/{index-sh3s86na.js → index-xkhk5d6g.js} +17 -17
  125. package/dist/{index-6k1937bx.js → index-xqhede6x.js} +4 -4
  126. package/dist/{index-f4fx2tza.js → index-zs4ms3th.js} +181 -181
  127. package/dist/{index-k5hsfc3j.js → index-zsvzhjtk.js} +1 -1
  128. package/dist/observability/bounded-logger.d.ts +2 -0
  129. package/dist/observability/bounded-logger.d.ts.map +1 -1
  130. package/dist/observability/sanitize.d.ts +6 -0
  131. package/dist/observability/sanitize.d.ts.map +1 -1
  132. package/dist/observability/secret-values.d.ts +25 -0
  133. package/dist/observability/secret-values.d.ts.map +1 -0
  134. package/dist/react/keyboard/hooks.d.ts +71 -0
  135. package/dist/react/keyboard/hooks.d.ts.map +1 -0
  136. package/dist/react/keyboard/layers.d.ts +98 -0
  137. package/dist/react/keyboard/layers.d.ts.map +1 -0
  138. package/dist/react/keyboard/zone.d.ts +139 -0
  139. package/dist/react/keyboard/zone.d.ts.map +1 -0
  140. package/dist/telegram/crypto.d.ts +16 -0
  141. package/dist/telegram/crypto.d.ts.map +1 -0
  142. package/dist/telegram/html/check.d.ts +26 -0
  143. package/dist/telegram/html/check.d.ts.map +1 -0
  144. package/dist/telegram/html/nodes.d.ts +70 -0
  145. package/dist/telegram/html/nodes.d.ts.map +1 -0
  146. package/dist/telegram/html/parse.d.ts +35 -0
  147. package/dist/telegram/html/parse.d.ts.map +1 -0
  148. package/dist/telegram/html/render.d.ts +39 -0
  149. package/dist/telegram/html/render.d.ts.map +1 -0
  150. package/dist/telegram/init-data.d.ts.map +1 -1
  151. package/dist/telegram/operator-channel.d.ts +36 -3
  152. package/dist/telegram/operator-channel.d.ts.map +1 -1
  153. package/dist/telegram/screens/callback-codec.d.ts +34 -0
  154. package/dist/telegram/screens/callback-codec.d.ts.map +1 -0
  155. package/dist/telegram/screens/dispatch.d.ts +22 -0
  156. package/dist/telegram/screens/dispatch.d.ts.map +1 -0
  157. package/dist/telegram/screens/display.d.ts +70 -0
  158. package/dist/telegram/screens/display.d.ts.map +1 -0
  159. package/dist/telegram/screens/execute.d.ts +57 -0
  160. package/dist/telegram/screens/execute.d.ts.map +1 -0
  161. package/dist/telegram/screens/html.d.ts +36 -0
  162. package/dist/telegram/screens/html.d.ts.map +1 -0
  163. package/dist/telegram/screens/outcome.d.ts +74 -0
  164. package/dist/telegram/screens/outcome.d.ts.map +1 -0
  165. package/dist/telegram/screens/path.d.ts +29 -0
  166. package/dist/telegram/screens/path.d.ts.map +1 -0
  167. package/dist/telegram/screens/reconcile.d.ts +67 -0
  168. package/dist/telegram/screens/reconcile.d.ts.map +1 -0
  169. package/dist/telegram/screens/registry.d.ts +23 -0
  170. package/dist/telegram/screens/registry.d.ts.map +1 -0
  171. package/dist/telegram/screens/render.d.ts +70 -0
  172. package/dist/telegram/screens/render.d.ts.map +1 -0
  173. package/dist/telegram/screens/runtime.d.ts +133 -0
  174. package/dist/telegram/screens/runtime.d.ts.map +1 -0
  175. package/dist/telegram/screens/screen-types.d.ts +130 -0
  176. package/dist/telegram/screens/screen-types.d.ts.map +1 -0
  177. package/dist/telegram/screens/screen.d.ts +138 -0
  178. package/dist/telegram/screens/screen.d.ts.map +1 -0
  179. package/dist/telegram/screens/state.d.ts +115 -0
  180. package/dist/telegram/screens/state.d.ts.map +1 -0
  181. package/dist/telegram/screens/telegram-screens.d.ts +18 -0
  182. package/dist/telegram/screens/telegram-screens.d.ts.map +1 -0
  183. package/dist/telegram/screens/test-chat-telegram.d.ts +47 -0
  184. package/dist/telegram/screens/test-chat-telegram.d.ts.map +1 -0
  185. package/dist/telegram/screens/test-chat.d.ts +66 -0
  186. package/dist/telegram/screens/test-chat.d.ts.map +1 -0
  187. package/dist/telegram/screens/view.d.ts +89 -0
  188. package/dist/telegram/screens/view.d.ts.map +1 -0
  189. package/dist/telegram/send-failure.d.ts +19 -0
  190. package/dist/telegram/send-failure.d.ts.map +1 -1
  191. package/dist/telegram/update-intake.d.ts +78 -0
  192. package/dist/telegram/update-intake.d.ts.map +1 -0
  193. package/dist/telegram/update-store-sqlite.d.ts +26 -0
  194. package/dist/telegram/update-store-sqlite.d.ts.map +1 -0
  195. package/dist/telegram/update-store.d.ts +67 -0
  196. package/dist/telegram/update-store.d.ts.map +1 -0
  197. package/dist/telegram/webhook.d.ts +105 -0
  198. package/dist/telegram/webhook.d.ts.map +1 -0
  199. package/dist/tools/cli/args-fields.d.ts +8 -0
  200. package/dist/tools/cli/args-fields.d.ts.map +1 -1
  201. package/dist/tools/cli/args-route.d.ts.map +1 -1
  202. package/dist/tools/cli/args.d.ts.map +1 -1
  203. package/dist/tools/cli/help.d.ts.map +1 -1
  204. package/llms/cli.txt +8 -2
  205. package/llms/observability.txt +2 -1
  206. package/llms/react-keyboard.txt +193 -0
  207. package/llms/stitchkit.txt +7 -1
  208. package/llms/telegram-html.txt +35 -0
  209. package/llms/telegram-screens.txt +365 -0
  210. package/llms/telegram.txt +160 -4
  211. package/llms-full.txt +736 -8
  212. package/llms.txt +10 -5
  213. package/package.json +17 -2
  214. package/dist/index-2k4yrqkc.js +0 -9
  215. package/dist/index-crykmqkr.js +0 -26
  216. package/dist/index-y64k3s0h.js +0 -150
  217. package/dist/index-y91ry9h2.js +0 -4
  218. /package/dist/{index-hffjpmq9.js → index-9jfdm5tg.js} +0 -0
  219. /package/dist/{index-zjjyynm3.js → index-d4pa2bgs.js} +0 -0
  220. /package/dist/{index-rxfy4cq7.js → index-dwfv9a85.js} +0 -0
  221. /package/dist/{index-5jm36zv1.js → index-gfk7nrht.js} +0 -0
  222. /package/dist/{index-b9aefrqd.js → index-n1dqr7gf.js} +0 -0
  223. /package/dist/{index-q3pyb9n0.js → index-sykb5ag7.js} +0 -0
  224. /package/dist/{index-48ffdxgk.js → index-xhzq2qvj.js} +0 -0
  225. /package/dist/{index-kzfs85xp.js → index-zsarb5xp.js} +0 -0
@@ -1,30 +1,30 @@
1
1
  import {
2
- deriveCodeChallenge
3
- } from "./index-hr4tzbwq.js";
2
+ unauthorized2
3
+ } from "./index-n53mswt3.js";
4
4
  import {
5
- base64UrlToBytes,
6
- bytesToBase64Url
7
- } from "./index-rxfy4cq7.js";
5
+ deriveCodeChallenge2
6
+ } from "./index-ap3gqe56.js";
8
7
  import {
9
- unauthorized
10
- } from "./index-2vtcmrj9.js";
8
+ bytesToBase64Url,
9
+ base64UrlToBytes
10
+ } from "./index-dwfv9a85.js";
11
11
  import {
12
12
  safeJsonParse
13
- } from "./index-kzfs85xp.js";
13
+ } from "./index-zsarb5xp.js";
14
14
  import {
15
15
  isRecord
16
- } from "./index-hffjpmq9.js";
16
+ } from "./index-9jfdm5tg.js";
17
17
 
18
18
  // src/server/middleware/jwt.ts
19
19
  var MAX_TOKEN_BYTES = 8192;
20
- async function verifyJwt(token, secret, options = {}) {
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 unauthorized("Token too large");
24
+ throw unauthorized2("Token too large");
25
25
  const [headerB64, payloadB64, signatureB64] = token.split(".");
26
26
  if (!headerB64 || !payloadB64 || !signatureB64)
27
- throw unauthorized("Invalid token format");
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 unauthorized("Malformed token");
37
+ throw unauthorized2("Malformed token");
38
38
  }
39
39
  if (!isRecord(payloadRaw))
40
- throw unauthorized("Malformed token");
40
+ throw unauthorized2("Malformed token");
41
41
  const payload = payloadRaw;
42
42
  if (header.alg !== "HS256")
43
- throw unauthorized("Unsupported token algorithm");
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 unauthorized("Invalid token signature");
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 unauthorized("Malformed token");
54
+ throw unauthorized2("Malformed token");
55
55
  if (payload.exp < now - leeway)
56
- throw unauthorized("Token expired");
56
+ throw unauthorized2("Token expired");
57
57
  }
58
58
  if ("nbf" in payload) {
59
59
  if (typeof payload.nbf !== "number")
60
- throw unauthorized("Malformed token");
60
+ throw unauthorized2("Malformed token");
61
61
  if (payload.nbf > now + leeway)
62
- throw unauthorized("Token not yet valid");
62
+ throw unauthorized2("Token not yet valid");
63
63
  }
64
64
  if (options.issuer !== undefined && payload.iss !== options.issuer) {
65
- throw unauthorized("Token issuer mismatch");
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 unauthorized("Token audience mismatch");
71
+ throw unauthorized2("Token audience mismatch");
72
72
  }
73
73
  return payload;
74
74
  }
75
- async function signJwt(payload, secret, options = {}) {
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 verifyPkce(verifier, challenge) {
98
+ async function verifyPkce2(verifier, challenge) {
99
99
  if (!verifier || !challenge)
100
100
  return false;
101
- const derived = await deriveCodeChallenge(verifier);
101
+ const derived = await deriveCodeChallenge2(verifier);
102
102
  return derived === challenge;
103
103
  }
104
104
 
105
- export { verifyJwt, signJwt, verifyPkce };
105
+ export { verifyJwt2, signJwt2, verifyPkce2 };
@@ -1,20 +1,20 @@
1
1
  // src/realtime/request.ts
2
2
  import { z } from "zod";
3
- var RealtimeRequestPhaseSchema = z.enum([
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 RealtimeRequestPhaseEventSchema = z.object({
10
+ var RealtimeRequestPhaseEventSchema2 = z.object({
11
11
  requestId: z.string().min(1),
12
12
  event: z.string().min(1),
13
- phase: RealtimeRequestPhaseSchema,
13
+ phase: RealtimeRequestPhaseSchema2,
14
14
  elapsedMs: z.number().nonnegative()
15
15
  }).strict();
16
16
 
17
- class RealtimeRequestTimeoutError extends Error {
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 RealtimeRequestDisconnectedError extends Error {
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 RealtimeRequestInvalidAcknowledgementError extends Error {
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 RealtimeRequestRejectedError extends Error {
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 { RealtimeRequestPhaseSchema, RealtimeRequestPhaseEventSchema, RealtimeRequestTimeoutError, RealtimeRequestDisconnectedError, RealtimeRequestInvalidAcknowledgementError, RealtimeRequestRejectedError };
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 AsyncOperationCancelResultSchema = z.discriminatedUnion("outcome", [
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 createAsyncOperationSnapshotSchema(config) {
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 McpAnnotationsSchema = z2.object({
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 McpMediaContentSchema = z2.discriminatedUnion("type", [
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: McpAnnotationsSchema.optional()
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: McpAnnotationsSchema.optional()
37
+ annotations: McpAnnotationsSchema2.optional()
38
38
  })
39
39
  ]);
40
- var ViewFileErrorSchema = z2.object({
40
+ var ViewFileErrorSchema2 = z2.object({
41
41
  path: z2.string(),
42
42
  message: z2.string()
43
43
  });
44
- var ViewFileOutputSchema = z2.object({
45
- content: z2.array(McpMediaContentSchema),
46
- errors: z2.array(ViewFileErrorSchema)
44
+ var ViewFileOutputSchema2 = z2.object({
45
+ content: z2.array(McpMediaContentSchema2),
46
+ errors: z2.array(ViewFileErrorSchema2)
47
47
  });
48
- var ViewFileInputSchema = z2.object({
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 { AsyncOperationCancelResultSchema, createAsyncOperationSnapshotSchema, McpAnnotationsSchema, McpMediaContentSchema, ViewFileErrorSchema, ViewFileOutputSchema, ViewFileInputSchema };
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 isWithinDir(root, target) {
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 isWithinDir(realRoot, realTarget) ? realTarget : null;
15
+ return isWithinDir2(realRoot, realTarget) ? realTarget : null;
16
16
  }
17
17
 
18
- export { isWithinDir, realPathWithinDir };
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,9 +1,9 @@
1
1
  import {
2
2
  loadDarwinBinding
3
- } from "./index-zjjyynm3.js";
3
+ } from "./index-d4pa2bgs.js";
4
4
  import {
5
5
  isRecord
6
- } from "./index-hffjpmq9.js";
6
+ } from "./index-9jfdm5tg.js";
7
7
 
8
8
  // src/internal/exclusive-lock.ts
9
9
  import { constants } from "node:fs";
@@ -1,21 +1,21 @@
1
1
  import {
2
- toJsonSchema
3
- } from "./index-eqqvgdb3.js";
2
+ AppError2
3
+ } from "./index-n53mswt3.js";
4
4
  import {
5
5
  validateDeclaredOutput
6
- } from "./index-znfs20ss.js";
6
+ } from "./index-b2bz0kdm.js";
7
7
  import {
8
- AppError
9
- } from "./index-2vtcmrj9.js";
8
+ toJsonSchema
9
+ } from "./index-ct75c3at.js";
10
10
  import {
11
11
  serializeCanonicalJson
12
- } from "./index-k5hsfc3j.js";
12
+ } from "./index-zsvzhjtk.js";
13
13
  import {
14
14
  isRecord
15
- } from "./index-hffjpmq9.js";
15
+ } from "./index-9jfdm5tg.js";
16
16
 
17
17
  // src/tools/schema/portable-formats.ts
18
- var PORTABLE_JSON_SCHEMA_FORMATS = new Set([
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 findNonPortableFormats(schema, allowFormats = []) {
44
- const allowed = new Set([...PORTABLE_JSON_SCHEMA_FORMATS, ...allowFormats]);
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 required2 = requiredKeys(variant);
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: required2.has(key) });
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 flattenToolJsonSchema(schema) {
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 findUntypedProperties(schema, prefix = "") {
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(...findUntypedProperties(value, path));
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(...findUntypedProperties(child, prefix));
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(...findUntypedProperties(entry, prefix));
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(...findUntypedProperties(entry, prefix));
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(...findUntypedProperties(value, prefix));
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(...findUntypedProperties(definition, prefix));
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(...findUntypedProperties(branch, prefix));
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 AppError("INTERNAL_SERVER_ERROR", `${options.operation} toolView.project threw`, 500);
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 AppError("INTERNAL_SERVER_ERROR", `${options.operation} toolView.project returned a Promise — it must be synchronous`, 500);
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 ? flattenToolJsonSchema(json) : json;
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 findUntypedProperties(inputSchema)) {
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 findNonPortableFormats(inputSchema, config.schemaValidation.allowFormats)) {
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 findNonPortableFormats(output, config.schemaValidation.allowFormats)) {
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, PORTABLE_JSON_SCHEMA_FORMATS, findNonPortableFormats, declaresDraft07, withDefsDialect, flattenToolJsonSchema, buildToolPresentationSchema, presentationMetadata, findUntypedProperties, assertToolExtensionCompatible, projectRuntimeTool, projectToolSurface, mcpProjectionCandidate, prepareProjectedMcpTools };
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 defineRealtimeContract(contract) {
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 { defineRealtimeContract, RealtimeRejectDirectionSchema, RealtimeRejectPhaseSchema, RealtimeRejectReasonSchema, RealtimeRejectFaultSchema };
22
+ export { defineRealtimeContract2, RealtimeRejectDirectionSchema, RealtimeRejectPhaseSchema, RealtimeRejectReasonSchema, RealtimeRejectFaultSchema };