stitchkit 0.110.6 → 0.111.1

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 (88) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/agent-runtime/sandbox-broker.d.ts.map +1 -1
  3. package/dist/application/grammy-update-admission.d.ts.map +1 -1
  4. package/dist/browser/stream.d.ts +3 -2
  5. package/dist/browser/stream.d.ts.map +1 -1
  6. package/dist/contract/runtime-context.d.ts +3 -1
  7. package/dist/contract/runtime-context.d.ts.map +1 -1
  8. package/dist/entrypoints/agent-runtime/sandbox.js +13 -27
  9. package/dist/entrypoints/application/grammy.js +11 -2
  10. package/dist/entrypoints/bin/upgrade-cli.d.ts.map +1 -1
  11. package/dist/entrypoints/bin/upgrade-cli.js +123 -29
  12. package/dist/entrypoints/cli/publish.js +1 -1
  13. package/dist/entrypoints/cli.js +2 -2
  14. package/dist/entrypoints/http.d.ts +2 -0
  15. package/dist/entrypoints/http.d.ts.map +1 -1
  16. package/dist/entrypoints/http.js +5 -1
  17. package/dist/entrypoints/index.d.ts +1 -0
  18. package/dist/entrypoints/index.d.ts.map +1 -1
  19. package/dist/entrypoints/index.js +5 -1
  20. package/dist/entrypoints/node.d.ts +1 -0
  21. package/dist/entrypoints/node.d.ts.map +1 -1
  22. package/dist/entrypoints/node.js +3 -1
  23. package/dist/entrypoints/observability.js +24 -9
  24. package/dist/entrypoints/remote.js +1 -1
  25. package/dist/entrypoints/server.d.ts +1 -0
  26. package/dist/entrypoints/server.d.ts.map +1 -1
  27. package/dist/entrypoints/server.js +24 -3
  28. package/dist/entrypoints/telegram.js +3 -3
  29. package/dist/entrypoints/testing.js +1 -1
  30. package/dist/entrypoints/tools/connections.js +16 -31
  31. package/dist/entrypoints/tools/mcp.js +1 -1
  32. package/dist/entrypoints/tools.js +40 -8
  33. package/dist/entrypoints/voice.js +17 -10
  34. package/dist/{index-s6d8zsha.js → index-2qymcsq2.js} +66 -121
  35. package/dist/index-5efrpfmj.js +55 -0
  36. package/dist/{index-s2eybn7b.js → index-c5374vpt.js} +10 -9
  37. package/dist/{index-jk44mbqb.js → index-c5at3ykd.js} +3 -57
  38. package/dist/index-cjbn98zt.js +68 -0
  39. package/dist/{index-3h0ztg0z.js → index-cxpcdswt.js} +5 -21
  40. package/dist/{index-s0xbnpfh.js → index-erv5shjq.js} +1 -1
  41. package/dist/{index-n7hrpngg.js → index-v2eyj2ws.js} +1 -1
  42. package/dist/internal/bounded-body.d.ts +44 -0
  43. package/dist/internal/bounded-body.d.ts.map +1 -0
  44. package/dist/internal/bounded-lines.d.ts +1 -2
  45. package/dist/internal/bounded-lines.d.ts.map +1 -1
  46. package/dist/internal/secure-fetch.d.ts.map +1 -1
  47. package/dist/internal/stream-chunks.d.ts +13 -0
  48. package/dist/internal/stream-chunks.d.ts.map +1 -0
  49. package/dist/internal/upgrade-affects.d.ts +5 -0
  50. package/dist/internal/upgrade-affects.d.ts.map +1 -1
  51. package/dist/internal/upgrade-plan.d.ts +18 -3
  52. package/dist/internal/upgrade-plan.d.ts.map +1 -1
  53. package/dist/internal/upgrade-usage.d.ts +21 -5
  54. package/dist/internal/upgrade-usage.d.ts.map +1 -1
  55. package/dist/observability/audit.d.ts +10 -0
  56. package/dist/observability/audit.d.ts.map +1 -1
  57. package/dist/observability/event.d.ts +5 -0
  58. package/dist/observability/event.d.ts.map +1 -1
  59. package/dist/server/contract-stream.d.ts.map +1 -1
  60. package/dist/server/multipart.d.ts.map +1 -1
  61. package/dist/server/oauth/endpoints.d.ts.map +1 -1
  62. package/dist/server/oauth/provider.d.ts +5 -0
  63. package/dist/server/oauth/provider.d.ts.map +1 -1
  64. package/dist/server/raw.d.ts +6 -3
  65. package/dist/server/raw.d.ts.map +1 -1
  66. package/dist/server/request-body.d.ts.map +1 -1
  67. package/dist/server/request-completion.d.ts.map +1 -1
  68. package/dist/server/request-ingress.d.ts +31 -0
  69. package/dist/server/request-ingress.d.ts.map +1 -0
  70. package/dist/server/unix-client-body.d.ts.map +1 -1
  71. package/dist/tools/connections/limits.d.ts.map +1 -1
  72. package/dist/tools/mcp/handler.d.ts.map +1 -1
  73. package/dist/voice/speech-queue.d.ts +6 -1
  74. package/dist/voice/speech-queue.d.ts.map +1 -1
  75. package/llms/http.txt +3 -0
  76. package/llms/observability.txt +19 -2
  77. package/llms/server.2.txt +4 -0
  78. package/llms/server.5.txt +2 -1
  79. package/llms/server.txt +42 -0
  80. package/llms/stitchkit.2.txt +28 -0
  81. package/llms/stitchkit.txt +3 -3
  82. package/llms/tools.3.txt +1 -1
  83. package/llms/tools.txt +4 -0
  84. package/llms/{upgrading-0.101.0-0.110.0.txt → upgrading-0.101.0-0.111.0.txt} +29 -3
  85. package/llms/upgrading.txt +8 -2
  86. package/llms-full.txt +136 -8
  87. package/llms.txt +6 -6
  88. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/entrypoints/node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,SAAS,EACT,KAAK,qBAAqB,EAC1B,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,qBAAqB,EACrB,KAAK,cAAc,EACnB,oBAAoB,EACpB,KAAK,aAAa,EAClB,mBAAmB,EACnB,KAAK,cAAc,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,IAAI,oBAAoB,EAChD,KAAK,wBAAwB,IAAI,oBAAoB,EACrD,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,QAAQ,EACR,eAAe,EACf,aAAa,EACb,cAAc,EACd,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,wBAAwB,EACxB,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/entrypoints/node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,SAAS,EACT,KAAK,qBAAqB,EAC1B,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,qBAAqB,EACrB,KAAK,cAAc,EACnB,oBAAoB,EACpB,KAAK,aAAa,EAClB,mBAAmB,EACnB,KAAK,cAAc,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,IAAI,oBAAoB,EAChD,KAAK,wBAAwB,IAAI,oBAAoB,EACrD,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,QAAQ,EACR,eAAe,EACf,aAAa,EACb,cAAc,EACd,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,yBAAyB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,wBAAwB,EACxB,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC"}
@@ -19,10 +19,11 @@ import {
19
19
  implementRegistry2,
20
20
  createImplementRegistry2,
21
21
  bindProcessSignals2,
22
+ defineRequestIngress2,
22
23
  createSocketIOServer2,
23
24
  UnixClientTransportError2,
24
25
  createUnixClientTransport2
25
- } from "../index-s6d8zsha.js";
26
+ } from "../index-2qymcsq2.js";
26
27
  import {
27
28
  bindRealtimeServer2
28
29
  } from "../index-xmgjtkvr.js";
@@ -292,6 +293,7 @@ export {
292
293
  createScopedImplementRegistry2 as createScopedImplementRegistry,
293
294
  createNodeSocketIOServer as createSocketIOServer,
294
295
  createUnixClientTransport2 as createUnixClientTransport,
296
+ defineRequestIngress2 as defineRequestIngress,
295
297
  forbidden2 as forbidden,
296
298
  implement2 as implement,
297
299
  implementRegistry2 as implementRegistry,
@@ -10,6 +10,9 @@ import {
10
10
  withinBound,
11
11
  createBoundedSinkManager
12
12
  } from "../index-qaet40b2.js";
13
+ import {
14
+ assertPositiveSafeInteger
15
+ } from "../index-0s4xebbg.js";
13
16
  import {
14
17
  redact2,
15
18
  truncatePreview2,
@@ -108,7 +111,17 @@ function readMcpContext(value) {
108
111
  function createSinkManager(config) {
109
112
  return createBoundedSinkManager(config);
110
113
  }
114
+ async function settlePayload(payload, payloadTruncated) {
115
+ if (!payload)
116
+ return { body: undefined, truncated: false };
117
+ try {
118
+ return { body: await payload, truncated: await payloadTruncated ?? false };
119
+ } catch {
120
+ return { body: undefined, truncated: false };
121
+ }
122
+ }
111
123
  function createObservability(config) {
124
+ assertPositiveSafeInteger("request.payloadMaxBytes", config.request?.payloadMaxBytes);
112
125
  const requestManager = config.request ? createSinkManager(config.request) : undefined;
113
126
  const toolManager = config.tools ? createSinkManager(config.tools) : undefined;
114
127
  let closed = false;
@@ -117,7 +130,15 @@ function createObservability(config) {
117
130
  let unbounded;
118
131
  const request = config.request ? {
119
132
  includePayload: config.request.includePayload ?? false,
120
- complete: ({ context, statusCode, durationMs, payload, outcome }) => {
133
+ payloadMaxBytes: config.request.payloadMaxBytes,
134
+ complete: ({
135
+ context,
136
+ statusCode,
137
+ durationMs,
138
+ payload,
139
+ payloadTruncated,
140
+ outcome
141
+ }) => {
121
142
  const requestConfig = config.request;
122
143
  if (!requestConfig)
123
144
  return;
@@ -125,14 +146,7 @@ function createObservability(config) {
125
146
  if (cancelled && !requestConfig.includeCancelled)
126
147
  return;
127
148
  requestManager?.submit(async () => {
128
- let body;
129
- if (!cancelled && payload) {
130
- try {
131
- body = await payload;
132
- } catch {
133
- body = undefined;
134
- }
135
- }
149
+ const { body, truncated } = cancelled ? { body: undefined, truncated: false } : await settlePayload(payload, payloadTruncated);
136
150
  return {
137
151
  source: context.source,
138
152
  kind: context.kind ?? "request",
@@ -161,6 +175,7 @@ function createObservability(config) {
161
175
  }
162
176
  },
163
177
  payload: cancelled ? null : sanitizePayload2(body, requestConfig.sanitize),
178
+ ...truncated && { payloadTruncated: true },
164
179
  resultSize: null,
165
180
  responseBytes: 0,
166
181
  userId: context.userId,
@@ -4,7 +4,7 @@ import"../index-p6apg0jg.js";
4
4
  import {
5
5
  endpointHasArguments,
6
6
  createClient2
7
- } from "../index-jk44mbqb.js";
7
+ } from "../index-c5at3ykd.js";
8
8
  import {
9
9
  ApiError2
10
10
  } from "../index-kfjkb396.js";
@@ -28,6 +28,7 @@ export { createRateLimiter, type RateLimitConfig } from '../server/rate-limit.js
28
28
  export { errorResponse, parseBody, respondJson } from '../server/raw.js';
29
29
  export { bindRealtimeServer, type RealtimeServer, type RealtimeServerConnection, type RealtimeServerHandle, } from '../server/realtime.js';
30
30
  export { bindReleaseRefreshSignal, type ReleaseRefreshSignal, type ReleaseRefreshSignalOptions, } from '../server/release-signal.js';
31
+ export { defineRequestIngress, type RequestIngress, type RequestIngressSource, } from '../server/request-ingress.js';
31
32
  export { type ManagedServerHandle, type ShutdownOptions, ShutdownOptionsSchema, type ShutdownResult, ShutdownResultSchema, type ShutdownState, ShutdownStateSchema, type ShutdownStatus, ShutdownStatusSchema, } from '../server/shutdown.js';
32
33
  export type { SocketIOHandshakeConfig, SocketIOPeerLoaders, SocketIORequestPolicy, SocketIOServerConfig, SocketIOServerHandle, SocketIOServerLifecycle, } from '../server/socket-io.js';
33
34
  export { createSocketIOServer, socketIoLane } from '../server/socket-io.js';
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/entrypoints/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/entrypoints/server.ts"],"names":[],"mappings":"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"}
@@ -42,13 +42,14 @@ import {
42
42
  implementRegistry2,
43
43
  createImplementRegistry2,
44
44
  bindProcessSignals2,
45
+ defineRequestIngress2,
45
46
  webSocketLane2,
46
47
  composeWebSocketHandlers2,
47
48
  createSocketIOServer2,
48
49
  socketIoLane2,
49
50
  UnixClientTransportError2,
50
51
  createUnixClientTransport2
51
- } from "../index-s6d8zsha.js";
52
+ } from "../index-2qymcsq2.js";
52
53
  import {
53
54
  createFileStateStore2
54
55
  } from "../index-nx49x0tw.js";
@@ -82,6 +83,13 @@ import {
82
83
  realPathWithinDir
83
84
  } from "../index-5cc6r990.js";
84
85
  import"../index-1bx1xv1k.js";
86
+ import {
87
+ readBoundedChunks,
88
+ concatChunks
89
+ } from "../index-5efrpfmj.js";
90
+ import {
91
+ assertPositiveSafeInteger
92
+ } from "../index-0s4xebbg.js";
85
93
  import {
86
94
  DEFAULT_CORS_ALLOW_HEADERS2,
87
95
  DEFAULT_CORS_EXPOSE_HEADERS2,
@@ -1695,13 +1703,25 @@ function errorResponse2(error) {
1695
1703
  res.headers.set("x-request-id", traceId);
1696
1704
  return res;
1697
1705
  }
1698
- async function parseBody(req, schema) {
1699
- const raw = await req.json().catch(() => null);
1706
+ async function parseBody(req, schema, options = {}) {
1707
+ assertPositiveSafeInteger("maxBytes", options.maxBytes);
1708
+ const raw = await readJson(req, options.maxBytes ?? DEFAULT_PARSE_BODY_BYTES);
1700
1709
  if (raw === null)
1701
1710
  return null;
1702
1711
  const parsed = schema.safeParse(raw);
1703
1712
  return parsed.success ? parsed.data : null;
1704
1713
  }
1714
+ var DEFAULT_PARSE_BODY_BYTES = 1024 * 1024;
1715
+ async function readJson(req, maxBytes) {
1716
+ try {
1717
+ const result = await readBoundedChunks(req.body, { maxBytes, signal: req.signal });
1718
+ if (result.kind === "over-limit")
1719
+ return null;
1720
+ return JSON.parse(new TextDecoder().decode(concatChunks(result.chunks, result.total)));
1721
+ } catch {
1722
+ return null;
1723
+ }
1724
+ }
1705
1725
  // src/server/release-signal.ts
1706
1726
  function bindReleaseRefreshSignal(marker, options = {}) {
1707
1727
  const signal = options.signal ?? "SIGUSR2";
@@ -1807,6 +1827,7 @@ export {
1807
1827
  createUnixClientTransport2 as createUnixClientTransport,
1808
1828
  defineCookie,
1809
1829
  defineMultipartStream2 as defineMultipartStream,
1830
+ defineRequestIngress2 as defineRequestIngress,
1810
1831
  deriveCodeChallenge2 as deriveCodeChallenge,
1811
1832
  errorCode2 as errorCode,
1812
1833
  errorResponse2 as errorResponse,
@@ -16,9 +16,6 @@ import {
16
16
  TELEGRAM_TEXT_LIMIT2,
17
17
  truncateTelegramHtml2
18
18
  } from "../index-nmaqxdx7.js";
19
- import {
20
- untilAborted
21
- } from "../index-a5qr2rj6.js";
22
19
  import {
23
20
  writeFileAtomic2
24
21
  } from "../index-07dcf2yn.js";
@@ -35,6 +32,9 @@ import {
35
32
  import {
36
33
  BOT_TOKEN_SECRET
37
34
  } from "../index-sznqf8fx.js";
35
+ import {
36
+ untilAborted
37
+ } from "../index-a5qr2rj6.js";
38
38
  import {
39
39
  isRecord,
40
40
  transportResult
@@ -35,7 +35,7 @@ import"../index-fynr93w4.js";
35
35
  import {
36
36
  createClient2,
37
37
  createClients2
38
- } from "../index-jk44mbqb.js";
38
+ } from "../index-c5at3ykd.js";
39
39
  import {
40
40
  assertPositiveSafeInteger
41
41
  } from "../index-0s4xebbg.js";
@@ -13,6 +13,10 @@ import {
13
13
  import {
14
14
  raceAbort
15
15
  } from "../../index-b0kddvzw.js";
16
+ import {
17
+ readBoundedChunks,
18
+ concatChunks
19
+ } from "../../index-5efrpfmj.js";
16
20
  import {
17
21
  MAX_TIMER_MS
18
22
  } from "../../index-eemvahkc.js";
@@ -243,40 +247,21 @@ function withConnectionDeadline(connectionName, context, callerSignal, body) {
243
247
  });
244
248
  }
245
249
  async function readBoundedText(response, maxBytes, connectionName, context) {
246
- context?.signal?.throwIfAborted();
247
- if (!response.body)
248
- return "";
249
- const reader = response.body.getReader();
250
- const decoder = new TextDecoder;
251
- let total = 0;
252
- let text = "";
253
- const cancel = () => void reader.cancel(context?.signal?.reason).catch(() => {
254
- return;
255
- });
256
- context?.signal?.addEventListener("abort", cancel, { once: true });
257
- try {
258
- for (;; ) {
259
- const { done, value } = await awaitConnection(reader.read(), context?.signal);
260
- if (done)
261
- break;
262
- total += value.byteLength;
250
+ const result = await readBoundedChunks(response.body, {
251
+ maxBytes,
252
+ ...context?.signal && { signal: context.signal },
253
+ onChunk: (chunk) => {
263
254
  if (context)
264
- context.observedReadBytes += value.byteLength;
265
- if (total > maxBytes) {
266
- throw new ConnectionResponseTooLargeError(connectionName, maxBytes, {
267
- ...context,
268
- observedReadBytes: total
269
- });
270
- }
271
- text += decoder.decode(value, { stream: true });
255
+ context.observedReadBytes += chunk.byteLength;
272
256
  }
273
- text += decoder.decode();
274
- return text;
275
- } finally {
276
- context?.signal?.removeEventListener("abort", cancel);
277
- cancel();
278
- reader.releaseLock();
257
+ });
258
+ if (result.kind === "over-limit") {
259
+ throw new ConnectionResponseTooLargeError(connectionName, maxBytes, {
260
+ ...context,
261
+ observedReadBytes: result.total
262
+ });
279
263
  }
264
+ return new TextDecoder().decode(concatChunks(result.chunks, result.total));
280
265
  }
281
266
  async function readBoundedJson(response, maxBytes, connectionName, context) {
282
267
  return JSON.parse(await readBoundedText(response, maxBytes, connectionName, context));
@@ -20,7 +20,7 @@ import {
20
20
  createMcpHttpRoute2,
21
21
  createStdioMcpServer2,
22
22
  bindStdioProcessSignals2
23
- } from "../../index-s2eybn7b.js";
23
+ } from "../../index-c5374vpt.js";
24
24
  import"../../index-0d8m0kee.js";
25
25
  import"../../index-636mggad.js";
26
26
  export {
@@ -60,7 +60,7 @@ import {
60
60
  createMcpHttpRoute2,
61
61
  createStdioMcpServer2,
62
62
  bindStdioProcessSignals2
63
- } from "../index-s2eybn7b.js";
63
+ } from "../index-c5374vpt.js";
64
64
  import {
65
65
  AsyncOperationCancelResultSchema2,
66
66
  createAsyncOperationSnapshotSchema2,
@@ -74,7 +74,7 @@ import {
74
74
  WaitTimeoutError,
75
75
  runWaitOperation,
76
76
  createCli2
77
- } from "../index-n7hrpngg.js";
77
+ } from "../index-v2eyj2ws.js";
78
78
  import {
79
79
  ManagedFilePathSchema2,
80
80
  ManagedFileRefSchema2
@@ -97,8 +97,15 @@ import {
97
97
  fetchGuarded,
98
98
  fetchPinnedDocument,
99
99
  readCapped
100
- } from "../index-3h0ztg0z.js";
100
+ } from "../index-cxpcdswt.js";
101
101
  import"../index-1bx1xv1k.js";
102
+ import {
103
+ readBoundedChunks,
104
+ concatChunks
105
+ } from "../index-5efrpfmj.js";
106
+ import {
107
+ assertPositiveSafeInteger
108
+ } from "../index-0s4xebbg.js";
102
109
  import {
103
110
  DEFAULT_CORS_ALLOW_HEADERS2
104
111
  } from "../index-yk4g8805.js";
@@ -468,10 +475,29 @@ function redirectWith(uri, params) {
468
475
  url.searchParams.set(key, value);
469
476
  return new Response(null, { status: 302, headers: { Location: url.toString() } });
470
477
  }
471
- async function readForm(req) {
478
+ var DEFAULT_OAUTH_BODY_BYTES = 64 * 1024;
479
+ var tooLarge = () => oauthError("invalid_request", "Request body is too large", 413);
480
+ async function readBodyText(req, config) {
481
+ const result = await readBoundedChunks(req.body, {
482
+ maxBytes: config.maxRequestBodyBytes ?? DEFAULT_OAUTH_BODY_BYTES,
483
+ signal: req.signal
484
+ });
485
+ return result.kind === "over-limit" ? undefined : new TextDecoder().decode(concatChunks(result.chunks, result.total));
486
+ }
487
+ function parseJson(text) {
488
+ try {
489
+ return JSON.parse(text);
490
+ } catch {
491
+ return null;
492
+ }
493
+ }
494
+ async function readForm(req, config) {
495
+ const text = await readBodyText(req, config);
496
+ if (text === undefined)
497
+ return;
472
498
  const contentType = req.headers.get("content-type") ?? "";
473
499
  if (contentType.includes("application/json")) {
474
- const body = await req.json().catch(() => null);
500
+ const body = parseJson(text);
475
501
  const params = new URLSearchParams;
476
502
  if (isRecord(body)) {
477
503
  for (const [key, value] of Object.entries(body)) {
@@ -481,7 +507,7 @@ async function readForm(req) {
481
507
  }
482
508
  return params;
483
509
  }
484
- return new URLSearchParams(await req.text());
510
+ return new URLSearchParams(text);
485
511
  }
486
512
  function metadataRoute(ctx) {
487
513
  const { config } = ctx;
@@ -519,7 +545,10 @@ function registerRoute(ctx) {
519
545
  return new Response(null, { status: 204, headers: PUBLIC_CORS });
520
546
  if (req.method !== "POST")
521
547
  return oauthError("invalid_request", "POST required", 405);
522
- const meta = await req.json().catch(() => null);
548
+ const text = await readBodyText(req, config);
549
+ if (text === undefined)
550
+ return tooLarge();
551
+ const meta = parseJson(text);
523
552
  if (!isRecord(meta)) {
524
553
  return oauthError("invalid_client_metadata", "Body must be a JSON object");
525
554
  }
@@ -673,7 +702,9 @@ function tokenRoute(ctx) {
673
702
  return new Response(null, { status: 204, headers: PUBLIC_CORS });
674
703
  if (req.method !== "POST")
675
704
  return oauthError("invalid_request", "POST required", 405);
676
- const form = await readForm(req);
705
+ const form = await readForm(req, config);
706
+ if (!form)
707
+ return tooLarge();
677
708
  const grantType = form.get("grant_type");
678
709
  if (grantType === "authorization_code") {
679
710
  const code = form.get("code");
@@ -745,6 +776,7 @@ function tokenRoute(ctx) {
745
776
 
746
777
  // src/server/oauth/provider.ts
747
778
  function mountOAuthProvider(config) {
779
+ assertPositiveSafeInteger("maxRequestBodyBytes", config.maxRequestBodyBytes);
748
780
  const base = config.basePath ?? "/oauth";
749
781
  const ttl = config.accessTokenTtlSec ?? 3600;
750
782
  const registerPath = `${base}/register`;
@@ -1,3 +1,7 @@
1
+ import {
2
+ untilAborted
3
+ } from "../index-a5qr2rj6.js";
4
+
1
5
  // src/voice/phases.ts
2
6
  var LIVE_VOICE_PHASES = [
3
7
  "opening",
@@ -99,10 +103,7 @@ class SpeechQueue {
99
103
  closed = false;
100
104
  cancelled = false;
101
105
  wake = null;
102
- stop;
103
- stopped = new Promise((resolve) => {
104
- this.stop = resolve;
105
- });
106
+ stopped = new AbortController;
106
107
  constructor(options) {
107
108
  this.options = options;
108
109
  const lookahead = options.lookahead ?? 1;
@@ -146,9 +147,16 @@ class SpeechQueue {
146
147
  this.release(outcome.value);
147
148
  });
148
149
  }
149
- this.stop(CANCELLED);
150
+ this.stopped.abort();
150
151
  this.notify();
151
152
  }
153
+ async unlessStopped(pending) {
154
+ try {
155
+ return await untilAborted(pending, this.stopped.signal);
156
+ } catch {
157
+ return CANCELLED;
158
+ }
159
+ }
152
160
  notify() {
153
161
  this.wake?.();
154
162
  }
@@ -179,19 +187,18 @@ class SpeechQueue {
179
187
  }
180
188
  this.current = slot;
181
189
  try {
182
- const prepared = await Promise.race([slot.result, this.stopped]);
190
+ const prepared = await this.unlessStopped(slot.result);
183
191
  if (prepared === CANCELLED)
184
192
  return;
185
193
  if (!prepared.ok) {
186
194
  this.report(prepared.error, slot.text);
187
195
  continue;
188
196
  }
197
+ if (this.cancelled)
198
+ return;
189
199
  this.playing = true;
190
200
  this.fill();
191
- const played = await Promise.race([
192
- settle(() => this.options.play(prepared.value, slot.controller.signal)),
193
- this.stopped
194
- ]);
201
+ const played = await this.unlessStopped(settle(() => this.options.play(prepared.value, slot.controller.signal)));
195
202
  if (played === CANCELLED)
196
203
  return;
197
204
  if (!played.ok)