agents 0.22.0 → 0.23.0

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 (186) hide show
  1. package/README.md +20 -1
  2. package/dist/{agent-routing-CnkaHb-v.d.ts → agent-routing-DE5zmCQ8.d.ts} +1038 -394
  3. package/dist/agent-routing.d.ts +1 -1
  4. package/dist/agent-tool-types.d.ts +26 -26
  5. package/dist/{agent-tools-C0XJqWzB.d.ts → agent-tools-DtXMTDGM.d.ts} +7 -7
  6. package/dist/agent-tools.d.ts +21 -21
  7. package/dist/browser/ai.js +4 -1
  8. package/dist/browser/ai.js.map +1 -1
  9. package/dist/browser/tanstack-ai.js.map +1 -1
  10. package/dist/callable-decorator-DP__HhBA.d.ts +72 -0
  11. package/dist/callable-decorator.d.ts +18 -0
  12. package/dist/callable-decorator.js +71 -0
  13. package/dist/callable-decorator.js.map +1 -0
  14. package/dist/capability-BjSKYpzg.js.map +1 -1
  15. package/dist/capability-runner-Be_-PLR1.d.ts +459 -0
  16. package/dist/channel-Bnm4S7T2.d.ts +491 -0
  17. package/dist/channels/ai-sdk.d.ts +46 -0
  18. package/dist/channels/ai-sdk.js +120 -0
  19. package/dist/channels/ai-sdk.js.map +1 -0
  20. package/dist/channels/email.d.ts +95 -0
  21. package/dist/channels/email.js +323 -0
  22. package/dist/channels/email.js.map +1 -0
  23. package/dist/channels/index.d.ts +233 -0
  24. package/dist/channels/index.js +608 -0
  25. package/dist/channels/index.js.map +1 -0
  26. package/dist/channels/slack.d.ts +140 -0
  27. package/dist/channels/slack.js +614 -0
  28. package/dist/channels/slack.js.map +1 -0
  29. package/dist/channels/tanstack-ai.d.ts +39 -0
  30. package/dist/channels/tanstack-ai.js +17 -0
  31. package/dist/channels/tanstack-ai.js.map +1 -0
  32. package/dist/channels/telegram.d.ts +106 -0
  33. package/dist/channels/telegram.js +427 -0
  34. package/dist/channels/telegram.js.map +1 -0
  35. package/dist/channels/voice.d.ts +45 -0
  36. package/dist/channels/voice.js +122 -0
  37. package/dist/channels/voice.js.map +1 -0
  38. package/dist/chat/index.d.ts +2325 -2019
  39. package/dist/chat/index.js +888 -518
  40. package/dist/chat/index.js.map +1 -1
  41. package/dist/chat-sdk/index.d.ts +7 -7
  42. package/dist/chat-sdk/index.js +1 -1
  43. package/dist/client.d.ts +1 -1
  44. package/dist/context/index.d.ts +216 -0
  45. package/dist/context/index.js +454 -0
  46. package/dist/context/index.js.map +1 -0
  47. package/dist/{current-agent-CuMErtly.d.ts → current-agent-Da_C9a3b.d.ts} +90 -107
  48. package/dist/current-agent-DhoDkSnH.js.map +1 -1
  49. package/dist/{diagnostics-CaBjfz4J.js → diagnostics-BzvaX2UT.js} +5 -1
  50. package/dist/diagnostics-BzvaX2UT.js.map +1 -0
  51. package/dist/diagnostics-C4jcz3VK.js +360 -0
  52. package/dist/diagnostics-C4jcz3VK.js.map +1 -0
  53. package/dist/index-BB0kqhIz.d.ts +101 -0
  54. package/dist/index-BVVgDSdq.d.ts +1 -0
  55. package/dist/index-XDkuQ7zm.d.ts +89 -0
  56. package/dist/{index-DcSAZKsB.d.ts → index-YSKgfgg9.d.ts} +3 -1
  57. package/dist/index.d.ts +91 -82
  58. package/dist/index.js +3 -2
  59. package/dist/ingress-BfetZbMO.js +83 -0
  60. package/dist/ingress-BfetZbMO.js.map +1 -0
  61. package/dist/internal-CYlgHl1l.js +59 -0
  62. package/dist/internal-CYlgHl1l.js.map +1 -0
  63. package/dist/internal_context.d.ts +1 -1
  64. package/dist/lifecycle/index.d.ts +35 -17
  65. package/dist/lifecycle/index.js +1 -1
  66. package/dist/lifecycle-CMRGjZdw.js +1299 -0
  67. package/dist/lifecycle-CMRGjZdw.js.map +1 -0
  68. package/dist/mcp/client/index.d.ts +20 -20
  69. package/dist/mcp/index.d.ts +35 -35
  70. package/dist/mcp/index.js +1 -1
  71. package/dist/observability/index.d.ts +1 -1
  72. package/dist/observability/index.js +1 -1
  73. package/dist/react.d.ts +4 -4
  74. package/dist/{retries-CAvxtG9d.d.ts → retries-D9Ds-1lz.d.ts} +17 -6
  75. package/dist/retries.d.ts +8 -6
  76. package/dist/retries.js +13 -1
  77. package/dist/retries.js.map +1 -1
  78. package/dist/routing/index.d.ts +137 -0
  79. package/dist/routing/index.js +244 -0
  80. package/dist/routing/index.js.map +1 -0
  81. package/dist/sanitize-D9TujEK8.js +79 -0
  82. package/dist/sanitize-D9TujEK8.js.map +1 -0
  83. package/dist/scheduler-DD9NdYbF.js +665 -0
  84. package/dist/scheduler-DD9NdYbF.js.map +1 -0
  85. package/dist/{scheduler-DQoTGoAW.d.ts → scheduler-Dwh85ZGl.d.ts} +21 -22
  86. package/dist/schedules/index.d.ts +1 -1
  87. package/dist/schedules/index.js +1 -1
  88. package/dist/sentence-chunker-BAidJ4DA.d.ts +68 -0
  89. package/dist/serializable.d.ts +1 -1
  90. package/dist/sessions/index.d.ts +441 -0
  91. package/dist/sessions/index.js +2063 -0
  92. package/dist/sessions/index.js.map +1 -0
  93. package/dist/skills/index.d.ts +99 -0
  94. package/dist/skills/index.js +254 -5
  95. package/dist/skills/index.js.map +1 -1
  96. package/dist/{src-5W6JNKVb.js → src-DlSHshb2.js} +1460 -1110
  97. package/dist/src-DlSHshb2.js.map +1 -0
  98. package/dist/streams/index.d.ts +120 -0
  99. package/dist/streams/index.js +107 -0
  100. package/dist/streams/index.js.map +1 -0
  101. package/dist/streams-D6tJ0NN9.d.ts +370 -0
  102. package/dist/streams-DZKgAj9b.js +709 -0
  103. package/dist/streams-DZKgAj9b.js.map +1 -0
  104. package/dist/sub-routing.d.ts +12 -12
  105. package/dist/surface-bZZJqBka.js +17 -0
  106. package/dist/surface-bZZJqBka.js.map +1 -0
  107. package/dist/tasks/index.d.ts +64 -0
  108. package/dist/tasks/index.js +2 -0
  109. package/dist/tasks-BRJ5zgya.d.ts +517 -0
  110. package/dist/tasks-ylZgBjhj.js +1656 -0
  111. package/dist/tasks-ylZgBjhj.js.map +1 -0
  112. package/dist/text-segment-joiner-BtAFQSA_.js +57 -0
  113. package/dist/text-segment-joiner-BtAFQSA_.js.map +1 -0
  114. package/dist/text-stream-CpdiKrJB.js +272 -0
  115. package/dist/text-stream-CpdiKrJB.js.map +1 -0
  116. package/dist/tokens-nHAKcN6M.js +52 -0
  117. package/dist/tokens-nHAKcN6M.js.map +1 -0
  118. package/dist/tool-schema-CBjGPrsQ.js +31 -0
  119. package/dist/tool-schema-CBjGPrsQ.js.map +1 -0
  120. package/dist/types-B7LojTe4.d.ts +202 -0
  121. package/dist/types-_Faxb570.d.ts +439 -0
  122. package/dist/voice/client.d.ts +226 -0
  123. package/dist/voice/client.js +932 -0
  124. package/dist/voice/client.js.map +1 -0
  125. package/dist/voice/errors.d.ts +43 -0
  126. package/dist/voice/errors.js +41 -0
  127. package/dist/voice/errors.js.map +1 -0
  128. package/dist/voice/index.d.ts +271 -0
  129. package/dist/voice/index.js +1812 -0
  130. package/dist/voice/index.js.map +1 -0
  131. package/dist/voice/react.d.ts +167 -0
  132. package/dist/voice/react.js +234 -0
  133. package/dist/voice/react.js.map +1 -0
  134. package/dist/voice/sfu.d.ts +71 -0
  135. package/dist/voice/sfu.js +157 -0
  136. package/dist/voice/sfu.js.map +1 -0
  137. package/dist/voice/text.d.ts +6 -0
  138. package/dist/voice/text.js +2 -0
  139. package/dist/voice/types.d.ts +58 -0
  140. package/dist/voice/types.js +18 -0
  141. package/dist/voice/types.js.map +1 -0
  142. package/dist/voice/workers-ai.d.ts +136 -0
  143. package/dist/voice/workers-ai.js +568 -0
  144. package/dist/voice/workers-ai.js.map +1 -0
  145. package/dist/websockets/index.d.ts +192 -0
  146. package/dist/websockets/index.js +2 -0
  147. package/dist/websockets-DUfRHPRq.js +502 -0
  148. package/dist/websockets-DUfRHPRq.js.map +1 -0
  149. package/dist/workflow-types.d.ts +25 -25
  150. package/dist/workflows.d.ts +21 -21
  151. package/dist/workflows.js +1 -1
  152. package/docs/agent-class.md +2 -2
  153. package/docs/agent-tools.md +2 -1
  154. package/docs/channels.md +323 -0
  155. package/docs/chat-agents.md +6 -13
  156. package/docs/context.md +131 -0
  157. package/docs/index.md +15 -12
  158. package/docs/lifecycle.md +102 -55
  159. package/docs/long-running-agents.md +2 -2
  160. package/docs/mcp-servers.md +5 -1
  161. package/docs/resumable-streaming.md +1 -1
  162. package/docs/routing.md +105 -0
  163. package/docs/sessions.md +237 -871
  164. package/docs/streams.md +213 -0
  165. package/docs/sub-agents.md +184 -124
  166. package/docs/tasks.md +246 -0
  167. package/docs/voice.md +745 -0
  168. package/package.json +115 -13
  169. package/dist/capability-runner-CvHGZqUu.d.ts +0 -150
  170. package/dist/compaction-helpers-iiKMr2TQ.js +0 -340
  171. package/dist/compaction-helpers-iiKMr2TQ.js.map +0 -1
  172. package/dist/compaction-helpers-wUz6M3us.d.ts +0 -621
  173. package/dist/diagnostics-CaBjfz4J.js.map +0 -1
  174. package/dist/durable-object-lifecycle-D6nNQJJd.js +0 -862
  175. package/dist/durable-object-lifecycle-D6nNQJJd.js.map +0 -1
  176. package/dist/experimental/memory/session/index.d.ts +0 -671
  177. package/dist/experimental/memory/session/index.js +0 -2379
  178. package/dist/experimental/memory/session/index.js.map +0 -1
  179. package/dist/experimental/memory/utils/index.d.ts +0 -96
  180. package/dist/experimental/memory/utils/index.js +0 -79
  181. package/dist/experimental/memory/utils/index.js.map +0 -1
  182. package/dist/scheduler-CR9RHGos.js +0 -857
  183. package/dist/scheduler-CR9RHGos.js.map +0 -1
  184. package/dist/src-5W6JNKVb.js.map +0 -1
  185. package/dist/tool-output-truncation-CNnnGZQ3.js +0 -98
  186. package/dist/tool-output-truncation-CNnnGZQ3.js.map +0 -1
@@ -0,0 +1,360 @@
1
+ import { i as _classPrivateFieldInitSpec, n as _classPrivateFieldSet2, r as _assertClassBrand, t as _classPrivateFieldGet2 } from "./classPrivateFieldGet2-DZBYAB34.js";
2
+ import { t as _classPrivateMethodInitSpec } from "./classPrivateMethodInitSpec-qMjJ6sHQ.js";
3
+ import { VoiceProviderError } from "./voice/errors.js";
4
+ //#region src/voice/diagnostics.ts
5
+ const MAX_STRING_LENGTH = 160;
6
+ const PRIVATE_KEY = /(^|_)(audio|body|contents?|exceptions?|messages?|prompts?|query|results?|stack|text|tokens?|tools?|transcripts?|arguments?)(_|$)/i;
7
+ function boundedString(value, maxLength = MAX_STRING_LENGTH) {
8
+ const normalized = value.replace(/\s+/g, " ").trim();
9
+ return normalized.length <= maxLength ? normalized : `${normalized.slice(0, maxLength - 1)}…`;
10
+ }
11
+ function diagnosticErrorData(error) {
12
+ const summary = {
13
+ name: boundedString(error.name || "Error"),
14
+ message: boundedString(error.message || "Unknown error")
15
+ };
16
+ if (error instanceof VoiceProviderError) {
17
+ if (error.code !== void 0) summary.code = error.code;
18
+ if (error.status !== void 0) summary.status = error.status;
19
+ if (error.closeCode !== void 0) summary.closeCode = error.closeCode;
20
+ if (error.closeReason !== void 0) summary.closeReason = boundedString(error.closeReason);
21
+ if (error.wasClean !== void 0) summary.wasClean = error.wasClean;
22
+ }
23
+ return summary;
24
+ }
25
+ /**
26
+ * Keep diagnostic metadata bounded and reject fields that could carry user or
27
+ * provider content. Instrumentation should still pass only known-safe values.
28
+ */
29
+ function sanitizeDiagnosticData(data) {
30
+ if (!data) return void 0;
31
+ const sanitized = {};
32
+ for (const [key, value] of Object.entries(data)) {
33
+ if (PRIVATE_KEY.test(key)) continue;
34
+ sanitized[key] = value instanceof Error ? diagnosticErrorData(value) : typeof value === "string" ? boundedString(value) : value;
35
+ }
36
+ return Object.keys(sanitized).length > 0 ? sanitized : void 0;
37
+ }
38
+ function createDiagnosticEvent(event, data, timestamp = Date.now()) {
39
+ const safeData = sanitizeDiagnosticData(data);
40
+ return {
41
+ event,
42
+ timestamp,
43
+ ...safeData ? { data: safeData } : {}
44
+ };
45
+ }
46
+ /** Server-only diagnostics. The sink is the reserved voice protocol message. */
47
+ var ServerDiagnostics = class {
48
+ constructor(browserConsole) {
49
+ this.browserConsole = browserConsole;
50
+ }
51
+ emit(connection, event, data) {
52
+ if (!this.browserConsole) return;
53
+ try {
54
+ connection.send(JSON.stringify({
55
+ type: "diagnostic",
56
+ ...createDiagnosticEvent(event, data)
57
+ }));
58
+ } catch {}
59
+ }
60
+ turn(connection, turnId, source = "speech", now = Date.now) {
61
+ return new TurnDiagnostics(this, connection, turnId, source, now);
62
+ }
63
+ };
64
+ function safeDuration(value) {
65
+ return Math.max(0, value);
66
+ }
67
+ var _turn = /* @__PURE__ */ new WeakMap();
68
+ var _startedAt = /* @__PURE__ */ new WeakMap();
69
+ /** One sentence attempt measured by its parent turn clock. */
70
+ var TtsSentenceTracker = class {
71
+ constructor(turn, startedAt) {
72
+ _classPrivateFieldInitSpec(this, _turn, void 0);
73
+ _classPrivateFieldInitSpec(this, _startedAt, void 0);
74
+ _classPrivateFieldSet2(_turn, this, turn);
75
+ _classPrivateFieldSet2(_startedAt, this, startedAt);
76
+ }
77
+ providerStarted() {
78
+ _classPrivateFieldGet2(_turn, this).recordTtsProviderStarted();
79
+ }
80
+ settle(outcome) {
81
+ return _classPrivateFieldGet2(_turn, this).recordTtsSentence(_classPrivateFieldGet2(_startedAt, this), outcome);
82
+ }
83
+ };
84
+ var _diagnostics = /* @__PURE__ */ new WeakMap();
85
+ var _connection = /* @__PURE__ */ new WeakMap();
86
+ var _now = /* @__PURE__ */ new WeakMap();
87
+ var _startedAt2 = /* @__PURE__ */ new WeakMap();
88
+ var _speechStartedAt = /* @__PURE__ */ new WeakMap();
89
+ var _firstInterimObserved = /* @__PURE__ */ new WeakMap();
90
+ var _finalInputAt = /* @__PURE__ */ new WeakMap();
91
+ var _firstTtsProviderAt = /* @__PURE__ */ new WeakMap();
92
+ var _firstAudioAt = /* @__PURE__ */ new WeakMap();
93
+ var _ttsFinished = /* @__PURE__ */ new WeakMap();
94
+ var _hasTtsFailures = /* @__PURE__ */ new WeakMap();
95
+ var _metrics = /* @__PURE__ */ new WeakMap();
96
+ /**
97
+ * One content-free turn lifecycle. Diagnostics and stable metrics are emitted
98
+ * from the same recorded landmarks; application metrics never parse event
99
+ * names or diagnostic metadata.
100
+ */
101
+ var TurnDiagnostics = class {
102
+ constructor(diagnostics, connection, turnId, source, now) {
103
+ _classPrivateFieldInitSpec(this, _diagnostics, void 0);
104
+ _classPrivateFieldInitSpec(this, _connection, void 0);
105
+ _classPrivateFieldInitSpec(this, _now, void 0);
106
+ _classPrivateFieldInitSpec(this, _startedAt2, void 0);
107
+ _classPrivateFieldInitSpec(this, _speechStartedAt, void 0);
108
+ _classPrivateFieldInitSpec(this, _firstInterimObserved, false);
109
+ _classPrivateFieldInitSpec(this, _finalInputAt, void 0);
110
+ _classPrivateFieldInitSpec(this, _firstTtsProviderAt, void 0);
111
+ _classPrivateFieldInitSpec(this, _firstAudioAt, void 0);
112
+ _classPrivateFieldInitSpec(this, _ttsFinished, false);
113
+ _classPrivateFieldInitSpec(this, _hasTtsFailures, false);
114
+ _classPrivateFieldInitSpec(this, _metrics, {});
115
+ _classPrivateFieldSet2(_diagnostics, this, diagnostics);
116
+ _classPrivateFieldSet2(_connection, this, connection);
117
+ _classPrivateFieldSet2(_now, this, now);
118
+ _classPrivateFieldSet2(_startedAt2, this, now());
119
+ this.turnId = turnId;
120
+ this.source = source;
121
+ }
122
+ get hasTtsFailures() {
123
+ return _classPrivateFieldGet2(_hasTtsFailures, this);
124
+ }
125
+ get ttsWorkMs() {
126
+ return _classPrivateFieldGet2(_metrics, this).ttsWorkMs ?? 0;
127
+ }
128
+ emit(event, data) {
129
+ const scopedData = {
130
+ ...data,
131
+ turn_id: this.turnId
132
+ };
133
+ _classPrivateFieldGet2(_diagnostics, this).emit(_classPrivateFieldGet2(_connection, this), event, scopedData);
134
+ }
135
+ startModel() {
136
+ return new ModelDiagnosticTracker(this, _classPrivateFieldGet2(_now, this));
137
+ }
138
+ markTextInput() {
139
+ _classPrivateFieldGet2(_finalInputAt, this) ?? _classPrivateFieldSet2(_finalInputAt, this, _classPrivateFieldGet2(_startedAt2, this));
140
+ }
141
+ speechStarted() {
142
+ _classPrivateFieldGet2(_speechStartedAt, this) ?? _classPrivateFieldSet2(_speechStartedAt, this, _classPrivateFieldGet2(_now, this).call(this));
143
+ this.emit("speech.started");
144
+ }
145
+ firstInterim(characters) {
146
+ if (_classPrivateFieldGet2(_firstInterimObserved, this)) return;
147
+ _classPrivateFieldSet2(_firstInterimObserved, this, true);
148
+ const elapsed = _classPrivateFieldGet2(_speechStartedAt, this) === void 0 ? void 0 : safeDuration(_classPrivateFieldGet2(_now, this).call(this) - _classPrivateFieldGet2(_speechStartedAt, this));
149
+ if (elapsed !== void 0) _classPrivateFieldGet2(_metrics, this).speechStartToFirstInterimMs = elapsed;
150
+ this.emit("stt.interim", {
151
+ ...characters === void 0 ? {} : { characters },
152
+ ...elapsed === void 0 ? {} : { speech_to_interim_ms: elapsed }
153
+ });
154
+ }
155
+ finalInput(characters) {
156
+ _classPrivateFieldSet2(_finalInputAt, this, _classPrivateFieldGet2(_now, this).call(this));
157
+ const elapsed = _classPrivateFieldGet2(_speechStartedAt, this) === void 0 ? void 0 : safeDuration(_classPrivateFieldGet2(_finalInputAt, this) - _classPrivateFieldGet2(_speechStartedAt, this));
158
+ if (elapsed !== void 0) _classPrivateFieldGet2(_metrics, this).speechStartToFinalMs = elapsed;
159
+ this.emit("stt.utterance", {
160
+ ...characters === void 0 ? {} : { characters },
161
+ ...elapsed === void 0 ? {} : { speech_to_final_ms: elapsed }
162
+ });
163
+ }
164
+ recordAfterTranscribe(durationMs, outcome, characters) {
165
+ _classPrivateFieldGet2(_metrics, this).afterTranscribeMs = safeDuration(durationMs);
166
+ this.emit("after_transcribe.completed", {
167
+ duration_ms: safeDuration(durationMs),
168
+ outcome,
169
+ characters
170
+ });
171
+ }
172
+ beginTtsSentence() {
173
+ _classPrivateFieldGet2(_metrics, this).ttsWorkMs ??= 0;
174
+ return new TtsSentenceTracker(this, _classPrivateFieldGet2(_now, this).call(this));
175
+ }
176
+ recordTtsProviderStarted() {
177
+ _classPrivateFieldGet2(_firstTtsProviderAt, this) ?? _classPrivateFieldSet2(_firstTtsProviderAt, this, _classPrivateFieldGet2(_now, this).call(this));
178
+ }
179
+ recordTtsSentence(startedAt, outcome) {
180
+ const duration = safeDuration(_classPrivateFieldGet2(_now, this).call(this) - startedAt);
181
+ _classPrivateFieldGet2(_metrics, this).ttsWorkMs = (_classPrivateFieldGet2(_metrics, this).ttsWorkMs ?? 0) + duration;
182
+ if (outcome === "failed") _classPrivateFieldSet2(_hasTtsFailures, this, true);
183
+ return duration;
184
+ }
185
+ finishTts() {
186
+ if (_classPrivateFieldGet2(_ttsFinished, this)) return;
187
+ _classPrivateFieldSet2(_ttsFinished, this, true);
188
+ if (_classPrivateFieldGet2(_firstTtsProviderAt, this) !== void 0) _classPrivateFieldGet2(_metrics, this).ttsWallMs = safeDuration(_classPrivateFieldGet2(_now, this).call(this) - _classPrivateFieldGet2(_firstTtsProviderAt, this));
189
+ }
190
+ audioSent() {
191
+ const now = _classPrivateFieldGet2(_now, this).call(this);
192
+ if (_classPrivateFieldGet2(_firstAudioAt, this) !== void 0) return;
193
+ _classPrivateFieldSet2(_firstAudioAt, this, now);
194
+ if (_classPrivateFieldGet2(_finalInputAt, this) !== void 0) _classPrivateFieldGet2(_metrics, this).finalInputToFirstAudioMs = safeDuration(now - _classPrivateFieldGet2(_finalInputAt, this));
195
+ if (_classPrivateFieldGet2(_firstTtsProviderAt, this) !== void 0) _classPrivateFieldGet2(_metrics, this).ttsToFirstAudioMs = safeDuration(now - _classPrivateFieldGet2(_firstTtsProviderAt, this));
196
+ }
197
+ recordModelFirstText(durationMs) {
198
+ _classPrivateFieldGet2(_metrics, this).modelToFirstTextMs = safeDuration(durationMs);
199
+ }
200
+ recordReasoning(durationMs) {
201
+ _classPrivateFieldGet2(_metrics, this).exposedReasoningMs = (_classPrivateFieldGet2(_metrics, this).exposedReasoningMs ?? 0) + safeDuration(durationMs);
202
+ }
203
+ recordModelTerminal(durationMs) {
204
+ _classPrivateFieldGet2(_metrics, this).modelStreamConsumptionMs = safeDuration(durationMs);
205
+ }
206
+ finish(outcome) {
207
+ this.finishTts();
208
+ const summary = {
209
+ turnId: this.turnId,
210
+ source: this.source,
211
+ outcome,
212
+ turnTotalMs: safeDuration(_classPrivateFieldGet2(_now, this).call(this) - _classPrivateFieldGet2(_startedAt2, this)),
213
+ ..._classPrivateFieldGet2(_metrics, this)
214
+ };
215
+ this.emit("turn.ended", {
216
+ outcome,
217
+ duration_ms: summary.turnTotalMs
218
+ });
219
+ try {
220
+ _classPrivateFieldGet2(_connection, this).send(JSON.stringify({
221
+ type: "turn_metrics",
222
+ ...summary
223
+ }));
224
+ } catch {}
225
+ return summary;
226
+ }
227
+ };
228
+ var _turn2 = /* @__PURE__ */ new WeakMap();
229
+ var _now2 = /* @__PURE__ */ new WeakMap();
230
+ var _startedAt3 = /* @__PURE__ */ new WeakMap();
231
+ var _firstTextObserved = /* @__PURE__ */ new WeakMap();
232
+ var _reasoningActive = /* @__PURE__ */ new WeakMap();
233
+ var _reasoningStartedAt = /* @__PURE__ */ new WeakMap();
234
+ var _characters = /* @__PURE__ */ new WeakMap();
235
+ var _terminal = /* @__PURE__ */ new WeakMap();
236
+ var _ModelDiagnosticTracker_brand = /* @__PURE__ */ new WeakSet();
237
+ /**
238
+ * Tracks one model stream without retaining model or reasoning content.
239
+ * Lifecycle methods are idempotent so stale turn cleanup cannot affect a
240
+ * successor tracker.
241
+ */
242
+ var ModelDiagnosticTracker = class {
243
+ constructor(turn, now) {
244
+ _classPrivateMethodInitSpec(this, _ModelDiagnosticTracker_brand);
245
+ _classPrivateFieldInitSpec(this, _turn2, void 0);
246
+ _classPrivateFieldInitSpec(this, _now2, void 0);
247
+ _classPrivateFieldInitSpec(this, _startedAt3, void 0);
248
+ _classPrivateFieldInitSpec(this, _firstTextObserved, false);
249
+ _classPrivateFieldInitSpec(this, _reasoningActive, false);
250
+ _classPrivateFieldInitSpec(this, _reasoningStartedAt, 0);
251
+ _classPrivateFieldInitSpec(this, _characters, 0);
252
+ _classPrivateFieldInitSpec(this, _terminal, false);
253
+ _classPrivateFieldSet2(_turn2, this, turn);
254
+ _classPrivateFieldSet2(_now2, this, now);
255
+ _classPrivateFieldSet2(_startedAt3, this, now());
256
+ _classPrivateFieldGet2(_turn2, this).emit("model.started");
257
+ }
258
+ observe(event) {
259
+ if (_classPrivateFieldGet2(_terminal, this)) return;
260
+ switch (event.type) {
261
+ case "text":
262
+ _classPrivateFieldSet2(_characters, this, _classPrivateFieldGet2(_characters, this) + event.text.length);
263
+ if (!_classPrivateFieldGet2(_firstTextObserved, this) && event.text.trim().length > 0) {
264
+ _classPrivateFieldSet2(_firstTextObserved, this, true);
265
+ const elapsed = safeDuration(_classPrivateFieldGet2(_now2, this).call(this) - _classPrivateFieldGet2(_startedAt3, this));
266
+ _classPrivateFieldGet2(_turn2, this).recordModelFirstText(elapsed);
267
+ _classPrivateFieldGet2(_turn2, this).emit("model.first_text", { elapsed_ms: elapsed });
268
+ }
269
+ break;
270
+ case "reasoning-start":
271
+ _assertClassBrand(_ModelDiagnosticTracker_brand, this, _startReasoning).call(this);
272
+ break;
273
+ case "reasoning-end":
274
+ _assertClassBrand(_ModelDiagnosticTracker_brand, this, _completeReasoning).call(this, "completed");
275
+ break;
276
+ case "finish":
277
+ _assertClassBrand(_ModelDiagnosticTracker_brand, this, _completeReasoning).call(this, "stream_finished");
278
+ break;
279
+ case "error": break;
280
+ case "boundary": break;
281
+ }
282
+ }
283
+ complete(outcome, finishReason) {
284
+ if (_classPrivateFieldGet2(_terminal, this)) return;
285
+ _assertClassBrand(_ModelDiagnosticTracker_brand, this, _completeReasoning).call(this, "stream_completed");
286
+ _classPrivateFieldSet2(_terminal, this, true);
287
+ const duration = this.elapsedMs();
288
+ _classPrivateFieldGet2(_turn2, this).recordModelTerminal(duration);
289
+ _classPrivateFieldGet2(_turn2, this).emit("model.completed", {
290
+ duration_ms: duration,
291
+ outcome,
292
+ characters: _classPrivateFieldGet2(_characters, this),
293
+ ...finishReason === void 0 ? {} : { finish_reason: finishReason }
294
+ });
295
+ }
296
+ fail(error) {
297
+ if (_classPrivateFieldGet2(_terminal, this)) return;
298
+ _assertClassBrand(_ModelDiagnosticTracker_brand, this, _completeReasoning).call(this, "error");
299
+ _classPrivateFieldSet2(_terminal, this, true);
300
+ _classPrivateFieldGet2(_turn2, this).recordModelTerminal(this.elapsedMs());
301
+ _classPrivateFieldGet2(_turn2, this).emit("model.failed", { error });
302
+ }
303
+ abort() {
304
+ if (_classPrivateFieldGet2(_terminal, this)) return;
305
+ _assertClassBrand(_ModelDiagnosticTracker_brand, this, _completeReasoning).call(this, "aborted");
306
+ _classPrivateFieldSet2(_terminal, this, true);
307
+ _classPrivateFieldGet2(_turn2, this).recordModelTerminal(this.elapsedMs());
308
+ }
309
+ elapsedMs() {
310
+ return safeDuration(_classPrivateFieldGet2(_now2, this).call(this) - _classPrivateFieldGet2(_startedAt3, this));
311
+ }
312
+ };
313
+ function _startReasoning() {
314
+ if (_classPrivateFieldGet2(_reasoningActive, this)) return;
315
+ _classPrivateFieldSet2(_reasoningActive, this, true);
316
+ _classPrivateFieldSet2(_reasoningStartedAt, this, _classPrivateFieldGet2(_now2, this).call(this));
317
+ _classPrivateFieldGet2(_turn2, this).emit("model.reasoning_started");
318
+ }
319
+ function _completeReasoning(outcome) {
320
+ if (!_classPrivateFieldGet2(_reasoningActive, this)) return;
321
+ _classPrivateFieldSet2(_reasoningActive, this, false);
322
+ const duration = safeDuration(_classPrivateFieldGet2(_now2, this).call(this) - _classPrivateFieldGet2(_reasoningStartedAt, this));
323
+ _classPrivateFieldGet2(_turn2, this).recordReasoning(duration);
324
+ _classPrivateFieldGet2(_turn2, this).emit("model.reasoning_completed", {
325
+ duration_ms: duration,
326
+ outcome
327
+ });
328
+ }
329
+ var _enabled = /* @__PURE__ */ new WeakMap();
330
+ var _ClientDiagnostics_brand = /* @__PURE__ */ new WeakSet();
331
+ /** Browser-only diagnostics. Activation always comes from the server welcome. */
332
+ var ClientDiagnostics = class {
333
+ constructor() {
334
+ _classPrivateMethodInitSpec(this, _ClientDiagnostics_brand);
335
+ _classPrivateFieldInitSpec(this, _enabled, false);
336
+ }
337
+ setEnabled(enabled) {
338
+ _classPrivateFieldSet2(_enabled, this, enabled);
339
+ }
340
+ emit(event, data) {
341
+ if (!_classPrivateFieldGet2(_enabled, this)) return;
342
+ _assertClassBrand(_ClientDiagnostics_brand, this, _log).call(this, "client", createDiagnosticEvent(event, data));
343
+ }
344
+ receive(event) {
345
+ if (!_classPrivateFieldGet2(_enabled, this)) return;
346
+ _assertClassBrand(_ClientDiagnostics_brand, this, _log).call(this, "server", event);
347
+ }
348
+ };
349
+ function _log(origin, event) {
350
+ try {
351
+ console.info(`[voice:${origin}] ${event.event}`, {
352
+ timestamp: event.timestamp,
353
+ ...event.data ?? {}
354
+ });
355
+ } catch {}
356
+ }
357
+ //#endregion
358
+ export { ServerDiagnostics as n, ClientDiagnostics as t };
359
+
360
+ //# sourceMappingURL=diagnostics-C4jcz3VK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-C4jcz3VK.js","names":[],"sources":["../src/voice/diagnostics.ts"],"sourcesContent":["import { VoiceProviderError } from \"./errors\";\nimport type { TextStreamEvent } from \"./text-stream\";\nimport type {\n VoiceDiagnosticEvent,\n VoiceModelFinishReason,\n VoiceTurnMetrics,\n VoiceTurnOutcome,\n VoiceTurnSource\n} from \"./types\";\n\nconst MAX_STRING_LENGTH = 160;\n\nconst PRIVATE_KEY =\n /(^|_)(audio|body|contents?|exceptions?|messages?|prompts?|query|results?|stack|text|tokens?|tools?|transcripts?|arguments?)(_|$)/i;\n\ntype DiagnosticValue = string | number | boolean | null | Error;\nexport type DiagnosticData = Record<string, DiagnosticValue>;\n\ntype DiagnosticConnection = {\n send(data: string | ArrayBuffer): void;\n};\n\nfunction boundedString(value: string, maxLength = MAX_STRING_LENGTH): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n return normalized.length <= maxLength\n ? normalized\n : `${normalized.slice(0, maxLength - 1)}…`;\n}\n\nfunction diagnosticErrorData(error: Error): Record<string, unknown> {\n const summary: Record<string, unknown> = {\n name: boundedString(error.name || \"Error\"),\n message: boundedString(error.message || \"Unknown error\")\n };\n\n if (error instanceof VoiceProviderError) {\n if (error.code !== undefined) summary.code = error.code;\n if (error.status !== undefined) summary.status = error.status;\n if (error.closeCode !== undefined) summary.closeCode = error.closeCode;\n if (error.closeReason !== undefined) {\n summary.closeReason = boundedString(error.closeReason);\n }\n if (error.wasClean !== undefined) summary.wasClean = error.wasClean;\n }\n\n return summary;\n}\n\n/**\n * Keep diagnostic metadata bounded and reject fields that could carry user or\n * provider content. Instrumentation should still pass only known-safe values.\n */\nexport function sanitizeDiagnosticData(\n data?: DiagnosticData\n): Record<string, unknown> | undefined {\n if (!data) return undefined;\n\n const sanitized: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n if (PRIVATE_KEY.test(key)) continue;\n sanitized[key] =\n value instanceof Error\n ? diagnosticErrorData(value)\n : typeof value === \"string\"\n ? boundedString(value)\n : value;\n }\n\n return Object.keys(sanitized).length > 0 ? sanitized : undefined;\n}\n\nfunction createDiagnosticEvent(\n event: string,\n data?: DiagnosticData,\n timestamp = Date.now()\n): VoiceDiagnosticEvent {\n const safeData = sanitizeDiagnosticData(data);\n return {\n event,\n timestamp,\n ...(safeData ? { data: safeData } : {})\n };\n}\n\n/** Server-only diagnostics. The sink is the reserved voice protocol message. */\nexport class ServerDiagnostics {\n readonly browserConsole: boolean;\n\n constructor(browserConsole: boolean) {\n this.browserConsole = browserConsole;\n }\n\n emit(\n connection: DiagnosticConnection,\n event: string,\n data?: DiagnosticData\n ): void {\n if (!this.browserConsole) return;\n\n try {\n connection.send(\n JSON.stringify({\n type: \"diagnostic\",\n ...createDiagnosticEvent(event, data)\n })\n );\n } catch {\n // Diagnostics must never alter call behavior.\n }\n }\n\n turn(\n connection: DiagnosticConnection,\n turnId: string,\n source: VoiceTurnSource = \"speech\",\n now: () => number = Date.now\n ): TurnDiagnostics {\n return new TurnDiagnostics(this, connection, turnId, source, now);\n }\n}\n\nfunction safeDuration(value: number): number {\n return Math.max(0, value);\n}\n\nexport type TtsSentenceOutcome = \"completed\" | \"skipped\" | \"failed\";\n\n/** One sentence attempt measured by its parent turn clock. */\nexport class TtsSentenceTracker {\n #turn: TurnDiagnostics;\n #startedAt: number;\n\n constructor(turn: TurnDiagnostics, startedAt: number) {\n this.#turn = turn;\n this.#startedAt = startedAt;\n }\n\n providerStarted(): void {\n this.#turn.recordTtsProviderStarted();\n }\n\n settle(outcome: TtsSentenceOutcome): number {\n return this.#turn.recordTtsSentence(this.#startedAt, outcome);\n }\n}\n\n/**\n * One content-free turn lifecycle. Diagnostics and stable metrics are emitted\n * from the same recorded landmarks; application metrics never parse event\n * names or diagnostic metadata.\n */\nexport class TurnDiagnostics {\n readonly turnId: string;\n readonly source: VoiceTurnSource;\n #diagnostics: ServerDiagnostics;\n #connection: DiagnosticConnection;\n #now: () => number;\n #startedAt: number;\n #speechStartedAt: number | undefined;\n #firstInterimObserved = false;\n #finalInputAt: number | undefined;\n #firstTtsProviderAt: number | undefined;\n #firstAudioAt: number | undefined;\n #ttsFinished = false;\n #hasTtsFailures = false;\n #metrics: Partial<VoiceTurnMetrics> = {};\n\n constructor(\n diagnostics: ServerDiagnostics,\n connection: DiagnosticConnection,\n turnId: string,\n source: VoiceTurnSource,\n now: () => number\n ) {\n this.#diagnostics = diagnostics;\n this.#connection = connection;\n this.#now = now;\n this.#startedAt = now();\n this.turnId = turnId;\n this.source = source;\n }\n\n get hasTtsFailures(): boolean {\n return this.#hasTtsFailures;\n }\n\n get ttsWorkMs(): number {\n return this.#metrics.ttsWorkMs ?? 0;\n }\n\n emit(event: string, data?: DiagnosticData): void {\n const scopedData: DiagnosticData = {\n ...data,\n turn_id: this.turnId\n };\n this.#diagnostics.emit(this.#connection, event, scopedData);\n }\n\n startModel(): ModelDiagnosticTracker {\n return new ModelDiagnosticTracker(this, this.#now);\n }\n\n markTextInput(): void {\n this.#finalInputAt ??= this.#startedAt;\n }\n\n speechStarted(): void {\n this.#speechStartedAt ??= this.#now();\n this.emit(\"speech.started\");\n }\n\n firstInterim(characters?: number): void {\n if (this.#firstInterimObserved) return;\n this.#firstInterimObserved = true;\n const elapsed =\n this.#speechStartedAt === undefined\n ? undefined\n : safeDuration(this.#now() - this.#speechStartedAt);\n if (elapsed !== undefined) {\n this.#metrics.speechStartToFirstInterimMs = elapsed;\n }\n this.emit(\"stt.interim\", {\n ...(characters === undefined ? {} : { characters }),\n ...(elapsed === undefined ? {} : { speech_to_interim_ms: elapsed })\n });\n }\n\n finalInput(characters?: number): void {\n this.#finalInputAt = this.#now();\n const elapsed =\n this.#speechStartedAt === undefined\n ? undefined\n : safeDuration(this.#finalInputAt - this.#speechStartedAt);\n if (elapsed !== undefined) this.#metrics.speechStartToFinalMs = elapsed;\n this.emit(\"stt.utterance\", {\n ...(characters === undefined ? {} : { characters }),\n ...(elapsed === undefined ? {} : { speech_to_final_ms: elapsed })\n });\n }\n\n recordAfterTranscribe(\n durationMs: number,\n outcome: \"accepted\" | \"skipped\",\n characters: number\n ): void {\n this.#metrics.afterTranscribeMs = safeDuration(durationMs);\n this.emit(\"after_transcribe.completed\", {\n duration_ms: safeDuration(durationMs),\n outcome,\n characters\n });\n }\n\n beginTtsSentence(): TtsSentenceTracker {\n this.#metrics.ttsWorkMs ??= 0;\n return new TtsSentenceTracker(this, this.#now());\n }\n\n recordTtsProviderStarted(): void {\n this.#firstTtsProviderAt ??= this.#now();\n }\n\n recordTtsSentence(startedAt: number, outcome: TtsSentenceOutcome): number {\n const duration = safeDuration(this.#now() - startedAt);\n this.#metrics.ttsWorkMs = (this.#metrics.ttsWorkMs ?? 0) + duration;\n if (outcome === \"failed\") this.#hasTtsFailures = true;\n return duration;\n }\n\n finishTts(): void {\n if (this.#ttsFinished) return;\n this.#ttsFinished = true;\n if (this.#firstTtsProviderAt !== undefined) {\n this.#metrics.ttsWallMs = safeDuration(\n this.#now() - this.#firstTtsProviderAt\n );\n }\n }\n\n audioSent(): void {\n const now = this.#now();\n if (this.#firstAudioAt !== undefined) return;\n this.#firstAudioAt = now;\n if (this.#finalInputAt !== undefined) {\n this.#metrics.finalInputToFirstAudioMs = safeDuration(\n now - this.#finalInputAt\n );\n }\n if (this.#firstTtsProviderAt !== undefined) {\n this.#metrics.ttsToFirstAudioMs = safeDuration(\n now - this.#firstTtsProviderAt\n );\n }\n }\n\n recordModelFirstText(durationMs: number): void {\n this.#metrics.modelToFirstTextMs = safeDuration(durationMs);\n }\n\n recordReasoning(durationMs: number): void {\n this.#metrics.exposedReasoningMs =\n (this.#metrics.exposedReasoningMs ?? 0) + safeDuration(durationMs);\n }\n\n recordModelTerminal(durationMs: number): void {\n this.#metrics.modelStreamConsumptionMs = safeDuration(durationMs);\n }\n\n finish(outcome: VoiceTurnOutcome): VoiceTurnMetrics {\n this.finishTts();\n\n const summary: VoiceTurnMetrics = {\n turnId: this.turnId,\n source: this.source,\n outcome,\n turnTotalMs: safeDuration(this.#now() - this.#startedAt),\n ...this.#metrics\n };\n\n this.emit(\"turn.ended\", {\n outcome,\n duration_ms: summary.turnTotalMs\n });\n try {\n this.#connection.send(\n JSON.stringify({ type: \"turn_metrics\", ...summary })\n );\n } catch {\n // A closing connection can make the terminal summary undeliverable.\n }\n return summary;\n }\n}\n\n/**\n * Tracks one model stream without retaining model or reasoning content.\n * Lifecycle methods are idempotent so stale turn cleanup cannot affect a\n * successor tracker.\n */\nexport class ModelDiagnosticTracker {\n #turn: TurnDiagnostics;\n #now: () => number;\n #startedAt: number;\n #firstTextObserved = false;\n #reasoningActive = false;\n #reasoningStartedAt = 0;\n #characters = 0;\n #terminal = false;\n\n constructor(turn: TurnDiagnostics, now: () => number) {\n this.#turn = turn;\n this.#now = now;\n this.#startedAt = now();\n this.#turn.emit(\"model.started\");\n }\n\n observe(event: TextStreamEvent): void {\n if (this.#terminal) return;\n\n switch (event.type) {\n case \"text\":\n this.#characters += event.text.length;\n if (!this.#firstTextObserved && event.text.trim().length > 0) {\n this.#firstTextObserved = true;\n const elapsed = safeDuration(this.#now() - this.#startedAt);\n this.#turn.recordModelFirstText(elapsed);\n this.#turn.emit(\"model.first_text\", { elapsed_ms: elapsed });\n }\n break;\n case \"reasoning-start\":\n this.#startReasoning();\n break;\n case \"reasoning-end\":\n this.#completeReasoning(\"completed\");\n break;\n case \"finish\":\n this.#completeReasoning(\"stream_finished\");\n break;\n case \"error\":\n break;\n case \"boundary\":\n break;\n }\n }\n\n complete(\n outcome: \"output\" | \"no_output\",\n finishReason?: VoiceModelFinishReason\n ): void {\n if (this.#terminal) return;\n this.#completeReasoning(\"stream_completed\");\n this.#terminal = true;\n const duration = this.elapsedMs();\n this.#turn.recordModelTerminal(duration);\n this.#turn.emit(\"model.completed\", {\n duration_ms: duration,\n outcome,\n characters: this.#characters,\n ...(finishReason === undefined ? {} : { finish_reason: finishReason })\n });\n }\n\n fail(error: Error): void {\n if (this.#terminal) return;\n this.#completeReasoning(\"error\");\n this.#terminal = true;\n this.#turn.recordModelTerminal(this.elapsedMs());\n this.#turn.emit(\"model.failed\", { error });\n }\n\n abort(): void {\n if (this.#terminal) return;\n this.#completeReasoning(\"aborted\");\n this.#terminal = true;\n this.#turn.recordModelTerminal(this.elapsedMs());\n }\n\n elapsedMs(): number {\n return safeDuration(this.#now() - this.#startedAt);\n }\n\n #startReasoning(): void {\n if (this.#reasoningActive) return;\n this.#reasoningActive = true;\n this.#reasoningStartedAt = this.#now();\n this.#turn.emit(\"model.reasoning_started\");\n }\n\n #completeReasoning(outcome: string): void {\n if (!this.#reasoningActive) return;\n this.#reasoningActive = false;\n const duration = safeDuration(this.#now() - this.#reasoningStartedAt);\n this.#turn.recordReasoning(duration);\n this.#turn.emit(\"model.reasoning_completed\", {\n duration_ms: duration,\n outcome\n });\n }\n}\n\n/** Browser-only diagnostics. Activation always comes from the server welcome. */\nexport class ClientDiagnostics {\n #enabled = false;\n\n setEnabled(enabled: boolean): void {\n this.#enabled = enabled;\n }\n\n emit(event: string, data?: DiagnosticData): void {\n if (!this.#enabled) return;\n this.#log(\"client\", createDiagnosticEvent(event, data));\n }\n\n receive(event: VoiceDiagnosticEvent): void {\n if (!this.#enabled) return;\n this.#log(\"server\", event);\n }\n\n #log(origin: \"client\" | \"server\", event: VoiceDiagnosticEvent): void {\n try {\n console.info(`[voice:${origin}] ${event.event}`, {\n timestamp: event.timestamp,\n ...(event.data ?? {})\n });\n } catch {\n // Console replacements and test spies are allowed to throw.\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import {
2
+ D as ChannelInboundMessage,
3
+ F as ChannelMessageSurface,
4
+ U as UserIdentity,
5
+ V as ChannelIdentity,
6
+ a as ChannelApprovalRequestOptions,
7
+ d as ChannelRoute,
8
+ h as DeliveryResult,
9
+ j as ChannelIngressEvent,
10
+ l as ChannelDeliveryOptions,
11
+ n as Channel,
12
+ p as ChannelStreamOptions,
13
+ s as ChannelChunkSource,
14
+ u as ChannelMessage,
15
+ w as ChannelEmailInput,
16
+ y as ChannelApprovalResponse
17
+ } from "./channel-Bnm4S7T2.js";
18
+
19
+ //#region src/channels/host/index.d.ts
20
+ type ChannelMessageEvent = {
21
+ channelKey: string;
22
+ route: string /** Stable identity derived only from the configured Channel and eventId. */;
23
+ dispatchId: string;
24
+ message: ChannelInboundMessage;
25
+ };
26
+ type ChannelApprovalResponseEvent = {
27
+ channelKey: string;
28
+ route: string /** Stable identity derived only from the configured Channel and eventId. */;
29
+ dispatchId: string;
30
+ response: ChannelApprovalResponse;
31
+ };
32
+ type ChannelRouteEvent = {
33
+ channelKey: string;
34
+ event: ChannelIngressEvent;
35
+ route:
36
+ | string
37
+ | null /** Stable identity derived only from the configured Channel and eventId. */;
38
+ dispatchId: string;
39
+ };
40
+ type ChannelHostOptions = {
41
+ channels: Record<
42
+ string,
43
+ Channel
44
+ > /** Used when a Channel does not provide a route. Default: event thread id. */;
45
+ defaultRoute?: ChannelRoute /** Resolve an existing, explicitly linked application user. */;
46
+ findUser?(
47
+ identity: ChannelIdentity
48
+ ): Promise<UserIdentity | null> /** Observes every valid route outcome before application dispatch. */;
49
+ onRoute?(event: ChannelRouteEvent): void | Promise<void>;
50
+ onMessage?(event: ChannelMessageEvent): void | Promise<void>;
51
+ onApprovalResponse?(
52
+ event: ChannelApprovalResponseEvent
53
+ ): void | Promise<void>;
54
+ };
55
+ /**
56
+ * Authenticates and normalizes ingress through configured Channel adapters,
57
+ * resolves outbound surfaces, and awaits the application's durable handoff.
58
+ */
59
+ declare class ChannelHost {
60
+ #private;
61
+ constructor(options: ChannelHostOptions);
62
+ handleRequest(request: Request): Promise<Response | undefined>;
63
+ handleEmail(email: ChannelEmailInput): Promise<boolean>;
64
+ /** Deliver through the configured Channel or composite named by the surface. */
65
+ deliver(
66
+ surface: ChannelMessageSurface,
67
+ message: ChannelMessage,
68
+ options?: ChannelDeliveryOptions
69
+ ): Promise<DeliveryResult>;
70
+ /**
71
+ * Deliver a progressively generated answer to the Channel or composite
72
+ * named by the surface.
73
+ *
74
+ * A Channel that can stream consumes the stream itself. A Channel that
75
+ * cannot never learns it was a stream, because the Host collects the answer
76
+ * and calls `deliver` once.
77
+ */
78
+ stream(
79
+ surface: ChannelMessageSurface,
80
+ chunks: ChannelChunkSource,
81
+ options?: ChannelStreamOptions
82
+ ): Promise<DeliveryResult>;
83
+ /** Request approval through the Channel or composite named by the surface. */
84
+ requestApproval(
85
+ surface: ChannelMessageSurface,
86
+ options: ChannelApprovalRequestOptions
87
+ ): Promise<DeliveryResult>;
88
+ /** Return the identity's configured Channel destination, when supported. */
89
+ contactSurface(identity: ChannelIdentity): ChannelMessageSurface | null;
90
+ /** Resolve whether a surface can currently be selected without delivery. */
91
+ isAvailable(surface: ChannelMessageSurface): Promise<boolean>;
92
+ }
93
+ //#endregion
94
+ export {
95
+ ChannelRouteEvent as a,
96
+ ChannelMessageEvent as i,
97
+ ChannelHost as n,
98
+ ChannelHostOptions as r,
99
+ ChannelApprovalResponseEvent as t
100
+ };
101
+ //# sourceMappingURL=index-BB0kqhIz.d.ts.map
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,89 @@
1
+ //#region src/tasks/errors.d.ts
2
+ /**
3
+ * Error classes for the Tasks capability. Each carries a stable `name` so
4
+ * hosts and tests can classify failures without depending on message text.
5
+ */
6
+ /**
7
+ * Thrown by a step callback to fail its run immediately, skipping any
8
+ * remaining retry attempts.
9
+ *
10
+ * Errors named `"NonRetryableError"` from other sources (for example
11
+ * `cloudflare:workflows`) are honored the same way.
12
+ *
13
+ * @experimental The API surface may change before stabilizing.
14
+ */
15
+ declare class NonRetryableError extends Error {
16
+ constructor(
17
+ message: string,
18
+ options?: {
19
+ cause?: unknown;
20
+ }
21
+ );
22
+ }
23
+ /**
24
+ * Thrown before executing user code when one replay uses the same step name
25
+ * twice. Step names are durable journal keys and must be unique within a run.
26
+ *
27
+ * @experimental The API surface may change before stabilizing.
28
+ */
29
+ declare class DuplicateTaskStepError extends Error {
30
+ /** The step name used more than once. */
31
+ readonly stepName: string;
32
+ constructor(stepName: string);
33
+ }
34
+ /**
35
+ * Thrown when a replay observes a journal that this handler code cannot have
36
+ * written — a known step under a different kind, for example. The run fails
37
+ * rather than guessing; changing a definition's step layout for in-flight
38
+ * runs requires versioning the definition name.
39
+ *
40
+ * @experimental The API surface may change before stabilizing.
41
+ */
42
+ declare class TaskReplayDivergedError extends Error {
43
+ /** The step name where replay diverged from the journal. */
44
+ readonly stepName: string;
45
+ constructor(stepName: string, detail: string);
46
+ }
47
+ /**
48
+ * Recorded against a run whose persisted definition name is no longer
49
+ * registered after a deployment. The run fails visibly; it is never silently
50
+ * deleted and never replayed against a different handler.
51
+ *
52
+ * @experimental The API surface may change before stabilizing.
53
+ */
54
+ declare class MissingTaskDefinitionError extends Error {
55
+ /** The persisted definition name that no longer resolves. */
56
+ readonly definition: string;
57
+ constructor(definition: string);
58
+ }
59
+ /**
60
+ * Thrown when a Task input, step result, metadata value, or final result is
61
+ * not JSON-serializable or exceeds the serialized size limit.
62
+ *
63
+ * @experimental The API surface may change before stabilizing.
64
+ */
65
+ declare class TaskSerializationError extends Error {
66
+ constructor(context: string, detail: string);
67
+ }
68
+ //#endregion
69
+ //#region src/tasks/serialization.d.ts
70
+ /**
71
+ * Value serialization for the Tasks capability.
72
+ *
73
+ * Task inputs, step results, metadata, and final results persist as JSON
74
+ * text in SQLite. `undefined` (and a `void` handler result) is represented
75
+ * as SQL `NULL` rather than a JSON envelope, so the JSON column space stays
76
+ * plain: `"null"` is JSON `null`, column `NULL` is `undefined`.
77
+ */
78
+ /** Default ceiling for one serialized value (1 MiB). */
79
+ declare const MAX_SERIALIZED_BYTES = 1048576;
80
+ //#endregion
81
+ export {
82
+ TaskReplayDivergedError as a,
83
+ NonRetryableError as i,
84
+ DuplicateTaskStepError as n,
85
+ TaskSerializationError as o,
86
+ MissingTaskDefinitionError as r,
87
+ MAX_SERIALIZED_BYTES as t
88
+ };
89
+ //# sourceMappingURL=index-XDkuQ7zm.d.ts.map
@@ -785,6 +785,8 @@ declare const channels: {
785
785
  readonly chat: Channel<any, any>;
786
786
  readonly transcript: Channel<any, any>;
787
787
  readonly fiber: Channel<any, any>;
788
+ readonly task: Channel<any, any>;
789
+ readonly stream: Channel<any, any>;
788
790
  readonly agentTool: Channel<any, any>;
789
791
  readonly schedule: Channel<any, any>;
790
792
  readonly lifecycle: Channel<any, any>;
@@ -932,4 +934,4 @@ export {
932
934
  MCPObservabilityEvent as s,
933
935
  ChannelEventMap as t
934
936
  };
935
- //# sourceMappingURL=index-DcSAZKsB.d.ts.map
937
+ //# sourceMappingURL=index-YSKgfgg9.d.ts.map