agents 0.26.0 → 0.28.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.
- package/README.md +8 -9
- package/dist/abortable-C1SpfVoi.js +21 -0
- package/dist/abortable-C1SpfVoi.js.map +1 -0
- package/dist/{agent-routing-0DR0Tk2v.d.ts → agent-routing-QDcchcQP.d.ts} +16 -16
- package/dist/agent-routing.d.ts +1 -1
- package/dist/agent-tool-types.d.ts +1 -1
- package/dist/{agent-tools-YrATZJu2.d.ts → agent-tools-DHL2XI7u.d.ts} +2 -2
- package/dist/agent-tools.d.ts +1 -1
- package/dist/ai-ahruGw7e.d.ts +239 -0
- package/dist/ai-sdk-Bdsf6mSA.js +2444 -0
- package/dist/ai-sdk-Bdsf6mSA.js.map +1 -0
- package/dist/apply-chunks-1FheRb9W.js +99 -0
- package/dist/apply-chunks-1FheRb9W.js.map +1 -0
- package/dist/broadcast-state-CEyI4uAK.js +69 -0
- package/dist/broadcast-state-CEyI4uAK.js.map +1 -0
- package/dist/browser/ai.d.ts +8 -227
- package/dist/browser/ai.js +259 -1
- package/dist/browser/ai.js.map +1 -0
- package/dist/browser/index.d.ts +56 -46
- package/dist/browser/index.js +4 -361
- package/dist/browser/{ai-sdk.d.ts → tools/ai-sdk.d.ts} +7 -7
- package/dist/browser/{ai-sdk.js → tools/ai-sdk.js} +6 -5
- package/dist/browser/tools/ai-sdk.js.map +1 -0
- package/dist/browser/tools/pi.d.ts +111 -0
- package/dist/browser/tools/pi.js +119 -0
- package/dist/browser/tools/pi.js.map +1 -0
- package/dist/browser/{tanstack-ai.d.ts → tools/tanstack-ai.d.ts} +39 -37
- package/dist/browser/{tanstack-ai.js → tools/tanstack-ai.js} +73 -59
- package/dist/browser/tools/tanstack-ai.js.map +1 -0
- package/dist/browser-CEdNlsaD.js +481 -0
- package/dist/browser-CEdNlsaD.js.map +1 -0
- package/dist/{browser-DE3d-RLk.d.ts → browser-D30VlpcA.d.ts} +63 -37
- package/dist/{browser-tool-CQ10e6Kj.js → browser-tool-4iomavs_.js} +198 -62
- package/dist/browser-tool-4iomavs_.js.map +1 -0
- package/dist/{browser-tool-DuNdlwZ9.d.ts → browser-tool-vtrPOV8e.d.ts} +25 -6
- package/dist/{capability-B4WbF81e.js → capability-DBAKc6UZ.js} +1 -3
- package/dist/capability-DBAKc6UZ.js.map +1 -0
- package/dist/{capability-runner-DBAnGr6L.d.ts → capability-runner-BiVUtjqC.d.ts} +9 -7
- package/dist/channel-Bak_6zDP.d.ts +333 -0
- package/dist/chat/index.d.ts +11 -9
- package/dist/chat/index.js +5 -194
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/react.d.ts +2 -4
- package/dist/chat/react.js +3 -1
- package/dist/chat/react.js.map +1 -1
- package/dist/chat-sdk/index.d.ts +1 -1
- package/dist/chat-sdk/index.js +1 -1
- package/dist/cli.js +144 -0
- package/dist/{client-je3koD9Z.d.ts → client-BGIQKJhX.d.ts} +2 -2
- package/dist/{client-fyQrLGkD.js → client-BnYbNT3z.js} +29 -5
- package/dist/client-BnYbNT3z.js.map +1 -0
- package/dist/client-tools-aIBO0Fk7.d.ts +53 -0
- package/dist/client.d.ts +1 -1
- package/dist/{connector-58XDGvc3.js → connector-CtZylXdk.js} +3 -603
- package/dist/connector-CtZylXdk.js.map +1 -0
- package/dist/{connector-Cl-VqPmA.d.ts → connector-DEXzVoaY.d.ts} +9 -374
- package/dist/conversations-FjHDRZyD.d.ts +192 -0
- package/dist/{current-agent-vAk_5JMt.d.ts → current-agent-CKgT5d1O.d.ts} +3 -5
- package/dist/current-agent-DhoDkSnH.js.map +1 -1
- package/dist/daemon-core-Buubj-y1.js +481 -0
- package/dist/daemon-core-Buubj-y1.js.map +1 -0
- package/dist/daemon-core-CbohVPAu.d.ts +132 -0
- package/dist/{do-oauth-client-provider-Tmf1vgKz.d.ts → do-oauth-client-provider-DfsUcpc3.d.ts} +7 -1
- package/dist/{durable-object-lifecycle-HhgOMWq9.d.ts → durable-object-lifecycle-DOI_bzCH.d.ts} +2 -2
- package/dist/{channels/email.d.ts → experimental/channels/email/index.d.ts} +25 -12
- package/dist/{channels/email.js → experimental/channels/email/index.js} +13 -35
- package/dist/experimental/channels/email/index.js.map +1 -0
- package/dist/experimental/channels/index.d.ts +270 -0
- package/dist/experimental/channels/index.js +1186 -0
- package/dist/experimental/channels/index.js.map +1 -0
- package/dist/{channels/slack.d.ts → experimental/channels/slack/index.d.ts} +19 -9
- package/dist/experimental/channels/slack/index.js +267 -0
- package/dist/experimental/channels/slack/index.js.map +1 -0
- package/dist/{channels/telegram.d.ts → experimental/channels/telegram/index.d.ts} +19 -9
- package/dist/experimental/channels/telegram/index.js +198 -0
- package/dist/experimental/channels/telegram/index.js.map +1 -0
- package/dist/experimental/channels/web/ai-sdk.d.ts +55 -0
- package/dist/experimental/channels/web/ai-sdk.js +266 -0
- package/dist/experimental/channels/web/ai-sdk.js.map +1 -0
- package/dist/experimental/channels/web/client.d.ts +97 -0
- package/dist/experimental/channels/web/client.js +349 -0
- package/dist/experimental/channels/web/client.js.map +1 -0
- package/dist/experimental/channels/web/index.d.ts +189 -0
- package/dist/experimental/channels/web/index.js +332 -0
- package/dist/experimental/channels/web/index.js.map +1 -0
- package/dist/gateway-BFO6vRDn.d.ts +100 -0
- package/dist/handle-zAzh0UW2.d.ts +460 -0
- package/dist/harness/ai-sdk/index.d.ts +175 -0
- package/dist/harness/ai-sdk/index.js +605 -0
- package/dist/harness/ai-sdk/index.js.map +1 -0
- package/dist/harness/container/daemon/index.d.ts +76 -0
- package/dist/harness/container/daemon/index.js +3 -0
- package/dist/harness/container/index.d.ts +740 -0
- package/dist/harness/container/index.js +2152 -0
- package/dist/harness/container/index.js.map +1 -0
- package/dist/harness/container/runtime/index.d.ts +144 -0
- package/dist/harness/container/runtime/index.js +1082 -0
- package/dist/harness/container/runtime/index.js.map +1 -0
- package/dist/harness/opencode/index.d.ts +369 -0
- package/dist/harness/opencode/index.js +1072 -0
- package/dist/harness/opencode/index.js.map +1 -0
- package/dist/harness/pi/index.d.ts +3 -2
- package/dist/harness/pi/index.js +3 -3
- package/dist/harness/store/index.d.ts +24 -0
- package/dist/harness/store/index.js +2 -0
- package/dist/harness/think/index.d.ts +821 -0
- package/dist/harness/think/index.js +2721 -0
- package/dist/harness/think/index.js.map +1 -0
- package/dist/harness-B6B9S3rb.d.ts +203 -0
- package/dist/{images-iiTDSyRu.js → images-Ce9SCu3X.js} +2 -248
- package/dist/images-Ce9SCu3X.js.map +1 -0
- package/dist/{index-BreL0YrQ.d.ts → index-BEL3ZV-s.d.ts} +2 -6
- package/dist/index-CBt8oRJt.d.ts +198 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +2 -2
- package/dist/ingress-EFbrS547.js +9 -0
- package/dist/ingress-EFbrS547.js.map +1 -0
- package/dist/input-schema-BQykTEp_.js +20 -0
- package/dist/input-schema-BQykTEp_.js.map +1 -0
- package/dist/input-schema-D2QAtHZH.js +23 -0
- package/dist/input-schema-D2QAtHZH.js.map +1 -0
- package/dist/internal-kmw70xwR.js +46 -0
- package/dist/internal-kmw70xwR.js.map +1 -0
- package/dist/internal_context.d.ts +1 -1
- package/dist/lifecycle/index.d.ts +3 -3
- package/dist/lifecycle/index.js +2 -2
- package/dist/{lifecycle-CFu6OV03.js → lifecycle-DGorpAmA.js} +2 -4
- package/dist/lifecycle-DGorpAmA.js.map +1 -0
- package/dist/mcp/client/do-oauth-client-provider.d.ts +1 -1
- package/dist/mcp/client/do-oauth-client-provider.js +9 -0
- package/dist/mcp/client/do-oauth-client-provider.js.map +1 -1
- package/dist/mcp/client/index.d.ts +1 -1
- package/dist/mcp/client/index.js +1 -1
- package/dist/mcp/client/x402.d.ts +35 -4
- package/dist/mcp/client/x402.js +24 -3
- package/dist/mcp/client/x402.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.js +2 -2
- package/dist/models/ai-sdk/index.d.ts +16 -14
- package/dist/models/ai-sdk/index.js +1 -2442
- package/dist/models/opencode/index.d.ts +65 -0
- package/dist/models/opencode/index.js +285 -0
- package/dist/models/opencode/index.js.map +1 -0
- package/dist/models/pi-ai/index.d.ts +9 -7
- package/dist/models/pi-ai/index.js +2 -1
- package/dist/models/pi-ai/index.js.map +1 -1
- package/dist/options-CiIsJHXR.d.ts +130 -0
- package/dist/protocol-BEgrJYC5.d.ts +331 -0
- package/dist/protocol-CukuI73M.d.ts +386 -0
- package/dist/protocol-cOklVBBD.js +227 -0
- package/dist/protocol-cOklVBBD.js.map +1 -0
- package/dist/{protocol-kHsr-f0X.js → protocol-eXeJxhgu.js} +2 -67
- package/dist/protocol-eXeJxhgu.js.map +1 -0
- package/dist/protocol-y2sSY584.js +148 -0
- package/dist/protocol-y2sSY584.js.map +1 -0
- package/dist/queue/index.d.ts +1 -1
- package/dist/queue/index.js +1 -1
- package/dist/{queue-BB-zfIYF.js → queue-CcIjVYTE.js} +2 -2
- package/dist/{queue-BB-zfIYF.js.map → queue-CcIjVYTE.js.map} +1 -1
- package/dist/react.d.ts +2 -2
- package/dist/routing/index.d.ts +2 -2
- package/dist/routing/index.js +1 -1
- package/dist/{scheduler-RdACNXDP.d.ts → scheduler-BCLESHSC.d.ts} +2 -12
- package/dist/{scheduler-DZ3xQfeK.js → scheduler-FIHv2-kJ.js} +2 -4
- package/dist/scheduler-FIHv2-kJ.js.map +1 -0
- package/dist/schedules/index.d.ts +1 -1
- package/dist/schedules/index.js +1 -1
- package/dist/serializable.d.ts +1 -1
- package/dist/session-store-Do4xkDcf.js +606 -0
- package/dist/session-store-Do4xkDcf.js.map +1 -0
- package/dist/session-store-DoPY12xM.d.ts +383 -0
- package/dist/sessions/index.d.ts +11 -434
- package/dist/sessions/index.js +1 -2271
- package/dist/sessions-_vN5BEZX.js +2272 -0
- package/dist/sessions-_vN5BEZX.js.map +1 -0
- package/dist/settings-C45hDliX.js +253 -0
- package/dist/settings-C45hDliX.js.map +1 -0
- package/dist/{transport-PfFnt-Ld.d.ts → settings-NgGwF7Qt.d.ts} +14 -208
- package/dist/{src-BZeu-SCD.js → src-CQxJFv4l.js} +8 -8
- package/dist/src-CQxJFv4l.js.map +1 -0
- package/dist/stall-watchdog-BpRF2uwG.js +195 -0
- package/dist/stall-watchdog-BpRF2uwG.js.map +1 -0
- package/dist/state/index.d.ts +1 -1
- package/dist/state/index.js +1 -3
- package/dist/state/index.js.map +1 -1
- package/dist/store-BKM4Xm9M.d.ts +332 -0
- package/dist/store-CslVzfN7.js +458 -0
- package/dist/store-CslVzfN7.js.map +1 -0
- package/dist/streams/index.d.ts +1 -1
- package/dist/streams/index.js +1 -1
- package/dist/{streams-DW-UCOUc.js → streams-lsHMJhRW.js} +17 -4
- package/dist/streams-lsHMJhRW.js.map +1 -0
- package/dist/{streams-Cmkj9QfW.d.ts → streams-vrCtbUIn.d.ts} +2 -2
- package/dist/sub-routing.d.ts +1 -1
- package/dist/tasks/index.d.ts +1 -1
- package/dist/tasks/index.js +1 -1
- package/dist/{tasks-68DESxf0.js → tasks-BN_5AWqI.js} +3 -2
- package/dist/tasks-BN_5AWqI.js.map +1 -0
- package/dist/{tasks-9YxYtByh.d.ts → tasks-E89KdwkS.d.ts} +2 -2
- package/dist/tool-CTp72Jb_.d.ts +278 -0
- package/dist/tool-CxKsvxjm.js +1126 -0
- package/dist/tool-CxKsvxjm.js.map +1 -0
- package/dist/tool-DoVberpN.d.ts +301 -0
- package/dist/tool-cQRkwSZZ.js +410 -0
- package/dist/tool-cQRkwSZZ.js.map +1 -0
- package/dist/tool-helpers-O5BDVEAY.js +58 -0
- package/dist/tool-helpers-O5BDVEAY.js.map +1 -0
- package/dist/transport-k2mFrtL8.d.ts +200 -0
- package/dist/turns-DCV3ycDl.js +317 -0
- package/dist/turns-DCV3ycDl.js.map +1 -0
- package/dist/voice/client.js +1 -1
- package/dist/voice/index.d.ts +2 -2
- package/dist/voice/index.js +1 -1
- package/dist/web/fetch/index.d.ts +89 -0
- package/dist/web/fetch/index.js +20 -0
- package/dist/web/fetch/index.js.map +1 -0
- package/dist/web/fetch/tools/ai-sdk.d.ts +80 -0
- package/dist/web/fetch/tools/ai-sdk.js +47 -0
- package/dist/web/fetch/tools/ai-sdk.js.map +1 -0
- package/dist/web/fetch/tools/pi.d.ts +84 -0
- package/dist/web/fetch/tools/pi.js +88 -0
- package/dist/web/fetch/tools/pi.js.map +1 -0
- package/dist/web/fetch/tools/tanstack-ai.d.ts +78 -0
- package/dist/web/fetch/tools/tanstack-ai.js +45 -0
- package/dist/web/fetch/tools/tanstack-ai.js.map +1 -0
- package/dist/web/search/index.d.ts +58 -0
- package/dist/web/search/index.js +2 -0
- package/dist/web/search/tools/ai-sdk.d.ts +77 -0
- package/dist/web/search/tools/ai-sdk.js +46 -0
- package/dist/web/search/tools/ai-sdk.js.map +1 -0
- package/dist/web/search/tools/pi.d.ts +82 -0
- package/dist/web/search/tools/pi.js +89 -0
- package/dist/web/search/tools/pi.js.map +1 -0
- package/dist/web/search/tools/tanstack-ai.d.ts +71 -0
- package/dist/web/search/tools/tanstack-ai.js +46 -0
- package/dist/web/search/tools/tanstack-ai.js.map +1 -0
- package/dist/websockets/index.d.ts +12 -296
- package/dist/websockets/index.js +1 -1
- package/dist/{websockets-Ci-LZFHH.js → websockets-C3zy8YR0.js} +20 -8
- package/dist/websockets-C3zy8YR0.js.map +1 -0
- package/dist/{wire-types-CrjKvDyi.d.ts → wire-types-Cv0iwjk5.d.ts} +3 -51
- package/dist/workflow-types.d.ts +1 -1
- package/dist/workflows.d.ts +1 -1
- package/dist/workflows.js +1 -1
- package/docs/browse-the-web.md +29 -1
- package/docs/fetch-the-web.md +276 -0
- package/docs/harnesses/pi.md +25 -0
- package/docs/harnesses/think.md +215 -0
- package/docs/index.md +99 -75
- package/docs/lifecycle.md +42 -3
- package/docs/queue.md +2 -3
- package/docs/scheduling.md +2 -6
- package/docs/search-the-web.md +135 -0
- package/package.json +148 -44
- package/dist/ai-fm7xx1BK.js +0 -312
- package/dist/ai-fm7xx1BK.js.map +0 -1
- package/dist/browser/ai-sdk.js.map +0 -1
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/tanstack-ai.js.map +0 -1
- package/dist/browser-tool-CQ10e6Kj.js.map +0 -1
- package/dist/capability-B4WbF81e.js.map +0 -1
- package/dist/channel-Bnm4S7T2.d.ts +0 -491
- package/dist/channels/ai-sdk.d.ts +0 -46
- package/dist/channels/ai-sdk.js +0 -120
- package/dist/channels/ai-sdk.js.map +0 -1
- package/dist/channels/email.js.map +0 -1
- package/dist/channels/index.d.ts +0 -233
- package/dist/channels/index.js +0 -608
- package/dist/channels/index.js.map +0 -1
- package/dist/channels/slack.js +0 -614
- package/dist/channels/slack.js.map +0 -1
- package/dist/channels/tanstack-ai.d.ts +0 -39
- package/dist/channels/tanstack-ai.js +0 -17
- package/dist/channels/tanstack-ai.js.map +0 -1
- package/dist/channels/telegram.js +0 -427
- package/dist/channels/telegram.js.map +0 -1
- package/dist/channels/voice.d.ts +0 -45
- package/dist/channels/voice.js +0 -122
- package/dist/channels/voice.js.map +0 -1
- package/dist/client-fyQrLGkD.js.map +0 -1
- package/dist/connector-58XDGvc3.js.map +0 -1
- package/dist/images-iiTDSyRu.js.map +0 -1
- package/dist/index-BB0kqhIz.d.ts +0 -101
- package/dist/ingress-BfetZbMO.js +0 -83
- package/dist/ingress-BfetZbMO.js.map +0 -1
- package/dist/internal-CYlgHl1l.js +0 -59
- package/dist/internal-CYlgHl1l.js.map +0 -1
- package/dist/lifecycle-CFu6OV03.js.map +0 -1
- package/dist/models/ai-sdk/index.js.map +0 -1
- package/dist/protocol-kHsr-f0X.js.map +0 -1
- package/dist/scheduler-DZ3xQfeK.js.map +0 -1
- package/dist/sessions/index.js.map +0 -1
- package/dist/src-BZeu-SCD.js.map +0 -1
- package/dist/streams-DW-UCOUc.js.map +0 -1
- package/dist/surface-bZZJqBka.js +0 -17
- package/dist/surface-bZZJqBka.js.map +0 -1
- package/dist/tasks-68DESxf0.js.map +0 -1
- package/dist/tool-schema-CBjGPrsQ.js +0 -31
- package/dist/tool-schema-CBjGPrsQ.js.map +0 -1
- package/dist/websockets-Ci-LZFHH.js.map +0 -1
- package/docs/channels.md +0 -323
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { a as ResolvedGateway } from "./settings-NgGwF7Qt.js";
|
|
2
|
+
|
|
3
|
+
//#region src/models/core/errors.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Coarse classification of a failed Cloudflare AI call.
|
|
6
|
+
*
|
|
7
|
+
* @experimental This surface is experimental and may change.
|
|
8
|
+
*/
|
|
9
|
+
type CloudflareAIErrorCode =
|
|
10
|
+
| "auth"
|
|
11
|
+
| "rate-limit"
|
|
12
|
+
| "not-found"
|
|
13
|
+
| "bad-request"
|
|
14
|
+
| "provider-error"
|
|
15
|
+
| "gateway-error"
|
|
16
|
+
| "unknown";
|
|
17
|
+
/**
|
|
18
|
+
* One leg of a {@link CloudflareAIError} fallback chain.
|
|
19
|
+
*
|
|
20
|
+
* @experimental This surface is experimental and may change.
|
|
21
|
+
*/
|
|
22
|
+
interface CloudflareAIAttempt {
|
|
23
|
+
/** The model id that was tried. */
|
|
24
|
+
model: string;
|
|
25
|
+
/** The error that leg failed with. */
|
|
26
|
+
error: unknown;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Error thrown for every failed Cloudflare AI call, whether it came back as a
|
|
30
|
+
* non-2xx `Response` or as a thrown Workers AI binding error. Framework
|
|
31
|
+
* modules wrap it into their own error type at their boundary (the AI SDK
|
|
32
|
+
* module into an `APICallError`, so `ai`'s retry loop honours
|
|
33
|
+
* {@link CloudflareAIError.isRetryable}).
|
|
34
|
+
*
|
|
35
|
+
* @experimental This surface is experimental and may change.
|
|
36
|
+
*/
|
|
37
|
+
declare class CloudflareAIError extends Error {
|
|
38
|
+
/** HTTP status, when the failure carried one. */
|
|
39
|
+
readonly status: number | undefined;
|
|
40
|
+
/** Coarse classification used for routing and fallback decisions. */
|
|
41
|
+
readonly code: CloudflareAIErrorCode;
|
|
42
|
+
/** `cf-aig-log-id` of the failed request, when the response carried one. */
|
|
43
|
+
readonly logId: string | undefined;
|
|
44
|
+
/** The model id that produced this error. */
|
|
45
|
+
readonly model: string;
|
|
46
|
+
/** Which binding path the request went down, for error reporting. */
|
|
47
|
+
readonly url: string;
|
|
48
|
+
/** The request body that failed. */
|
|
49
|
+
readonly requestBodyValues: unknown;
|
|
50
|
+
/** Response headers, when there was a response. */
|
|
51
|
+
readonly responseHeaders: Record<string, string> | undefined;
|
|
52
|
+
/** Raw response body text, when there was a response. */
|
|
53
|
+
readonly responseBody: string | undefined;
|
|
54
|
+
/** Whether a retry is worth attempting. */
|
|
55
|
+
readonly isRetryable: boolean;
|
|
56
|
+
/** Parsed error envelope, or other structured detail. */
|
|
57
|
+
readonly data: unknown;
|
|
58
|
+
/** Every leg tried, when this error ends a fallback chain. */
|
|
59
|
+
readonly attempts: CloudflareAIAttempt[] | undefined;
|
|
60
|
+
readonly cause: unknown;
|
|
61
|
+
constructor(options: {
|
|
62
|
+
message: string;
|
|
63
|
+
model: string;
|
|
64
|
+
url: string;
|
|
65
|
+
requestBodyValues: unknown;
|
|
66
|
+
status?: number;
|
|
67
|
+
code: CloudflareAIErrorCode;
|
|
68
|
+
logId?: string;
|
|
69
|
+
responseHeaders?: Record<string, string>;
|
|
70
|
+
responseBody?: string;
|
|
71
|
+
isRetryable?: boolean;
|
|
72
|
+
data?: unknown;
|
|
73
|
+
cause?: unknown;
|
|
74
|
+
attempts?: CloudflareAIAttempt[];
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
//#region src/models/core/gateway-providers.d.ts
|
|
79
|
+
/**
|
|
80
|
+
* The AI Gateway provider table: which gateway provider slug a vendor's own
|
|
81
|
+
* base URL belongs to, and what the universal request's `endpoint` is for a
|
|
82
|
+
* given upstream URL.
|
|
83
|
+
*
|
|
84
|
+
* This is platform knowledge, not vendor knowledge — the gateway publishes the
|
|
85
|
+
* list, and every entry here appears in `AIGatewayProviders` from
|
|
86
|
+
* `@cloudflare/workers-types`. Nothing about a vendor's wire format, model ids
|
|
87
|
+
* or capabilities lives here: the vendor's own provider package builds the
|
|
88
|
+
* request, and this table only says where it goes.
|
|
89
|
+
*
|
|
90
|
+
* Adapted from `@cloudflare/ai-gateway-provider`'s `providers.ts`.
|
|
91
|
+
*
|
|
92
|
+
* @experimental This surface is experimental and may change.
|
|
93
|
+
*/
|
|
94
|
+
/**
|
|
95
|
+
* The gateway provider slugs this table maps onto. A subset of the ambient
|
|
96
|
+
* `AIGatewayProviders` union; {@link GatewayProviderNameCheck} keeps it one.
|
|
97
|
+
*
|
|
98
|
+
* @experimental This surface is experimental and may change.
|
|
99
|
+
*/
|
|
100
|
+
declare const GATEWAY_PROVIDER_NAMES: readonly [
|
|
101
|
+
"workers-ai",
|
|
102
|
+
"anthropic",
|
|
103
|
+
"openai",
|
|
104
|
+
"azure-openai",
|
|
105
|
+
"google-ai-studio",
|
|
106
|
+
"google-vertex-ai",
|
|
107
|
+
"grok",
|
|
108
|
+
"mistral",
|
|
109
|
+
"perplexity-ai",
|
|
110
|
+
"replicate",
|
|
111
|
+
"groq",
|
|
112
|
+
"deepseek",
|
|
113
|
+
"openrouter",
|
|
114
|
+
"cerebras",
|
|
115
|
+
"cohere",
|
|
116
|
+
"huggingface",
|
|
117
|
+
"aws-bedrock",
|
|
118
|
+
"elevenlabs",
|
|
119
|
+
"cartesia"
|
|
120
|
+
];
|
|
121
|
+
/**
|
|
122
|
+
* A gateway provider slug.
|
|
123
|
+
*
|
|
124
|
+
* @experimental This surface is experimental and may change.
|
|
125
|
+
*/
|
|
126
|
+
type GatewayProviderName = (typeof GATEWAY_PROVIDER_NAMES)[number];
|
|
127
|
+
//#endregion
|
|
128
|
+
//#region src/models/core/transport.d.ts
|
|
129
|
+
/** One request on the Cloudflare run path. */
|
|
130
|
+
interface TransportRequest {
|
|
131
|
+
/** Model id — Workers AI slug or catalog `<author>/<model>`. */
|
|
132
|
+
model: string;
|
|
133
|
+
/** The provider-shaped request body (`input` on the run path). */
|
|
134
|
+
input: Record<string, unknown>;
|
|
135
|
+
/** Gateway options for this request. */
|
|
136
|
+
gateway: ResolvedGateway;
|
|
137
|
+
/** Extra request headers, merged last. */
|
|
138
|
+
headers: Record<string, string>;
|
|
139
|
+
/** Abort signal, forwarded to the binding or to `fetch`. */
|
|
140
|
+
signal?: AbortSignal;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* One request on the universal AI Gateway path: a vendor's own request, routed
|
|
144
|
+
* by the gateway to that vendor. The body is the vendor's, untouched — nothing
|
|
145
|
+
* here knows the vendor's wire format.
|
|
146
|
+
*
|
|
147
|
+
* @experimental This surface is experimental and may change.
|
|
148
|
+
*/
|
|
149
|
+
interface UniversalRequest {
|
|
150
|
+
/** The gateway provider slug the request is routed to. */
|
|
151
|
+
provider: GatewayProviderName | string;
|
|
152
|
+
/** The vendor path the gateway appends to that provider's base URL. */
|
|
153
|
+
endpoint: string;
|
|
154
|
+
/** The vendor's own request headers, minus its credential header. */
|
|
155
|
+
headers: Record<string, string>;
|
|
156
|
+
/** The vendor's request body, verbatim. */
|
|
157
|
+
query: unknown;
|
|
158
|
+
/** Gateway options for this request. */
|
|
159
|
+
gateway: ResolvedGateway;
|
|
160
|
+
/** Extra headers merged last, outside the vendor's own set. */
|
|
161
|
+
extraHeaders?: Record<string, string>;
|
|
162
|
+
/** Abort signal, forwarded to the binding or to `fetch`. */
|
|
163
|
+
signal?: AbortSignal;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* The single code path both backends implement. Always resolves to a raw
|
|
167
|
+
* `Response`, so streaming and non-streaming calls share one path and nothing
|
|
168
|
+
* is buffered on the caller's behalf.
|
|
169
|
+
*
|
|
170
|
+
* @experimental This surface is experimental and may change.
|
|
171
|
+
*/
|
|
172
|
+
interface Transport {
|
|
173
|
+
/** A stable identifier for the endpoint, used in error reporting. */
|
|
174
|
+
readonly url: string;
|
|
175
|
+
run(request: TransportRequest): Promise<Response>;
|
|
176
|
+
/**
|
|
177
|
+
* Sends a vendor's own request through the gateway's universal endpoint.
|
|
178
|
+
* Always resolves to the vendor's raw `Response`, error responses included:
|
|
179
|
+
* only the gateway's own failures (a missing gateway, an unpaid account) are
|
|
180
|
+
* lifted into a {@link CloudflareAIError}, because the vendor's provider
|
|
181
|
+
* knows how to read its own errors and we do not.
|
|
182
|
+
*/
|
|
183
|
+
universal(request: UniversalRequest): Promise<Response>;
|
|
184
|
+
/**
|
|
185
|
+
* A log id read off the backend itself when the response carried none. The
|
|
186
|
+
* Workers AI binding exposes the last gateway log id as a mutable property,
|
|
187
|
+
* so it is captured per response rather than read late.
|
|
188
|
+
*/
|
|
189
|
+
logIdFallback(response: Response): string | undefined;
|
|
190
|
+
}
|
|
191
|
+
//#endregion
|
|
192
|
+
export {
|
|
193
|
+
CloudflareAIError as a,
|
|
194
|
+
CloudflareAIAttempt as i,
|
|
195
|
+
GATEWAY_PROVIDER_NAMES as n,
|
|
196
|
+
CloudflareAIErrorCode as o,
|
|
197
|
+
GatewayProviderName as r,
|
|
198
|
+
Transport as t
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=transport-k2mFrtL8.d.ts.map
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
//#region src/harness/ai-sdk/turns.ts
|
|
2
|
+
function ownerOf(toolName, { tools, owner }) {
|
|
3
|
+
const tool = tools && Object.hasOwn(tools, toolName) ? tools[toolName] : void 0;
|
|
4
|
+
return tool && !tool.execute ? owner : void 0;
|
|
5
|
+
}
|
|
6
|
+
const json = (value) => value ?? null;
|
|
7
|
+
const object = (value) => typeof value === "object" && value !== null ? value : void 0;
|
|
8
|
+
function withMetadata(value, metadata) {
|
|
9
|
+
const providerMetadata = object(metadata);
|
|
10
|
+
return providerMetadata ? {
|
|
11
|
+
...value,
|
|
12
|
+
providerMetadata
|
|
13
|
+
} : value;
|
|
14
|
+
}
|
|
15
|
+
let warned = false;
|
|
16
|
+
function warnSkipped(type) {
|
|
17
|
+
if (warned) return;
|
|
18
|
+
warned = true;
|
|
19
|
+
console.warn(`Channels skipped an AI SDK part it cannot carry: "${type}"`);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convert an AI SDK UI message stream into response chunks.
|
|
23
|
+
*
|
|
24
|
+
* An `error` or `abort` chunk makes the iteration throw once the stream
|
|
25
|
+
* ends, so a failed or aborted generation never reads as a finished one, while the stream still
|
|
26
|
+
* runs to its end and its `onEnd` sees the partial message.
|
|
27
|
+
*/
|
|
28
|
+
async function* toResponseChunks(stream, options = {}) {
|
|
29
|
+
let error;
|
|
30
|
+
for await (const chunk of stream) {
|
|
31
|
+
if (chunk.type === "error") error ??= new Error(chunk.errorText);
|
|
32
|
+
if (chunk.type === "abort") error ??= /* @__PURE__ */ new Error("The generation was aborted");
|
|
33
|
+
const converted = toResponseChunk(chunk, options);
|
|
34
|
+
if (converted) yield converted;
|
|
35
|
+
}
|
|
36
|
+
if (error) throw error;
|
|
37
|
+
}
|
|
38
|
+
/** Convert one AI SDK UI message chunk into a response chunk, if it has one. */
|
|
39
|
+
function toResponseChunk(chunk, options) {
|
|
40
|
+
switch (chunk.type) {
|
|
41
|
+
case "text-start":
|
|
42
|
+
case "text-end":
|
|
43
|
+
case "reasoning-start":
|
|
44
|
+
case "reasoning-end": return withMetadata({
|
|
45
|
+
type: chunk.type,
|
|
46
|
+
id: chunk.id
|
|
47
|
+
}, chunk.providerMetadata);
|
|
48
|
+
case "text-delta":
|
|
49
|
+
case "reasoning-delta": return {
|
|
50
|
+
type: chunk.type,
|
|
51
|
+
id: chunk.id,
|
|
52
|
+
delta: chunk.delta
|
|
53
|
+
};
|
|
54
|
+
case "tool-input-start": return tool(chunk, options, { type: "tool-input-start" });
|
|
55
|
+
case "tool-input-delta": return {
|
|
56
|
+
type: "tool-input-delta",
|
|
57
|
+
toolCallId: chunk.toolCallId,
|
|
58
|
+
delta: chunk.inputTextDelta
|
|
59
|
+
};
|
|
60
|
+
case "tool-input-available": return withMetadata(tool(chunk, options, {
|
|
61
|
+
type: "tool-input-available",
|
|
62
|
+
input: json(chunk.input)
|
|
63
|
+
}), chunk.providerMetadata);
|
|
64
|
+
case "tool-input-error": {
|
|
65
|
+
const { owner: _owner, ...call } = tool(chunk, {}, {});
|
|
66
|
+
return {
|
|
67
|
+
...call,
|
|
68
|
+
type: "tool-input-error",
|
|
69
|
+
input: json(chunk.input),
|
|
70
|
+
errorText: chunk.errorText
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
case "tool-approval-request": return {
|
|
74
|
+
type: "tool-approval-request",
|
|
75
|
+
toolCallId: chunk.toolCallId,
|
|
76
|
+
approvalId: chunk.approvalId
|
|
77
|
+
};
|
|
78
|
+
case "tool-output-available": return {
|
|
79
|
+
type: "tool-output-available",
|
|
80
|
+
toolCallId: chunk.toolCallId,
|
|
81
|
+
output: json(chunk.output),
|
|
82
|
+
...chunk.preliminary && { preliminary: true },
|
|
83
|
+
...chunk.providerExecuted && { providerExecuted: true }
|
|
84
|
+
};
|
|
85
|
+
case "tool-output-error": return {
|
|
86
|
+
type: "tool-output-error",
|
|
87
|
+
toolCallId: chunk.toolCallId,
|
|
88
|
+
errorText: chunk.errorText,
|
|
89
|
+
...chunk.providerExecuted && { providerExecuted: true }
|
|
90
|
+
};
|
|
91
|
+
case "tool-output-denied": return {
|
|
92
|
+
type: "tool-output-denied",
|
|
93
|
+
toolCallId: chunk.toolCallId
|
|
94
|
+
};
|
|
95
|
+
case "source-url":
|
|
96
|
+
case "source-document":
|
|
97
|
+
case "file": {
|
|
98
|
+
const { providerMetadata, ...part } = chunk;
|
|
99
|
+
return withMetadata(part, providerMetadata);
|
|
100
|
+
}
|
|
101
|
+
case "start":
|
|
102
|
+
case "finish": return chunk.messageMetadata === void 0 ? void 0 : metadata(chunk.messageMetadata);
|
|
103
|
+
case "message-metadata": return metadata(chunk.messageMetadata);
|
|
104
|
+
case "start-step":
|
|
105
|
+
case "finish-step":
|
|
106
|
+
case "tool-approval-response":
|
|
107
|
+
case "error":
|
|
108
|
+
case "abort": return;
|
|
109
|
+
default:
|
|
110
|
+
if (chunk.type.startsWith("data-") && "data" in chunk) return {
|
|
111
|
+
type: "data",
|
|
112
|
+
name: chunk.type.slice(5),
|
|
113
|
+
...chunk.id !== void 0 && { id: chunk.id },
|
|
114
|
+
data: json(chunk.data),
|
|
115
|
+
...chunk.transient && { transient: true }
|
|
116
|
+
};
|
|
117
|
+
warnSkipped(chunk.type);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function tool(chunk, options, rest) {
|
|
122
|
+
const owner = ownerOf(chunk.toolName, options);
|
|
123
|
+
return {
|
|
124
|
+
toolCallId: chunk.toolCallId,
|
|
125
|
+
toolName: chunk.toolName,
|
|
126
|
+
...owner !== void 0 && { owner },
|
|
127
|
+
...chunk.providerExecuted && { providerExecuted: true },
|
|
128
|
+
...chunk.dynamic && { dynamic: true },
|
|
129
|
+
...chunk.title !== void 0 && { title: chunk.title },
|
|
130
|
+
...rest
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function metadata(value) {
|
|
134
|
+
const converted = object(value);
|
|
135
|
+
return converted ? {
|
|
136
|
+
type: "metadata",
|
|
137
|
+
metadata: converted
|
|
138
|
+
} : void 0;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Convert a response chunk into an AI SDK UI message chunk. Fields that only
|
|
142
|
+
* Channels has, such as a tool call's `owner`, are dropped.
|
|
143
|
+
*/
|
|
144
|
+
function toUIMessageChunk(chunk) {
|
|
145
|
+
switch (chunk.type) {
|
|
146
|
+
case "tool-input-start":
|
|
147
|
+
case "tool-input-available": {
|
|
148
|
+
const { owner: _owner, ...rest } = chunk;
|
|
149
|
+
return rest;
|
|
150
|
+
}
|
|
151
|
+
case "tool-input-delta": return {
|
|
152
|
+
type: "tool-input-delta",
|
|
153
|
+
toolCallId: chunk.toolCallId,
|
|
154
|
+
inputTextDelta: chunk.delta
|
|
155
|
+
};
|
|
156
|
+
case "data": {
|
|
157
|
+
const { name, ...rest } = chunk;
|
|
158
|
+
return {
|
|
159
|
+
...rest,
|
|
160
|
+
type: `data-${name}`
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
case "metadata": return {
|
|
164
|
+
type: "message-metadata",
|
|
165
|
+
messageMetadata: chunk.metadata
|
|
166
|
+
};
|
|
167
|
+
default: return chunk;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/** Convert a saved AI SDK UI message into a transcript message. */
|
|
171
|
+
function toTranscriptMessage(message, options = {}) {
|
|
172
|
+
const metadata = object(message.metadata);
|
|
173
|
+
return {
|
|
174
|
+
id: message.id,
|
|
175
|
+
role: message.role,
|
|
176
|
+
parts: message.parts.flatMap((part) => {
|
|
177
|
+
const converted = toMessagePart(part, options);
|
|
178
|
+
return converted ? [converted] : [];
|
|
179
|
+
}),
|
|
180
|
+
...metadata && { metadata }
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
function toMessagePart(part, options) {
|
|
184
|
+
switch (part.type) {
|
|
185
|
+
case "text":
|
|
186
|
+
case "reasoning": return withMetadata({
|
|
187
|
+
type: part.type,
|
|
188
|
+
text: part.text
|
|
189
|
+
}, part.providerMetadata);
|
|
190
|
+
case "file":
|
|
191
|
+
case "source-url":
|
|
192
|
+
case "source-document": {
|
|
193
|
+
const { providerMetadata, ...rest } = part;
|
|
194
|
+
if ("providerReference" in rest) delete rest.providerReference;
|
|
195
|
+
return withMetadata(rest, providerMetadata);
|
|
196
|
+
}
|
|
197
|
+
case "step-start": return;
|
|
198
|
+
case "dynamic-tool": return toToolPart(part, part.toolName, true, options);
|
|
199
|
+
default:
|
|
200
|
+
if (part.type.startsWith("tool-") && "toolCallId" in part) return toToolPart(part, part.type.slice(5), false, options);
|
|
201
|
+
if (part.type.startsWith("data-") && "data" in part) return {
|
|
202
|
+
type: "data",
|
|
203
|
+
name: part.type.slice(5),
|
|
204
|
+
...part.id !== void 0 && { id: part.id },
|
|
205
|
+
data: json(part.data)
|
|
206
|
+
};
|
|
207
|
+
warnSkipped(part.type);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function toToolPart(part, toolName, dynamic, options) {
|
|
212
|
+
const owner = ownerOf(toolName, options);
|
|
213
|
+
return withMetadata({
|
|
214
|
+
type: "tool",
|
|
215
|
+
toolCallId: part.toolCallId,
|
|
216
|
+
toolName,
|
|
217
|
+
state: part.state,
|
|
218
|
+
...part.input !== void 0 && { input: json(part.input) },
|
|
219
|
+
...part.state === "output-available" && {
|
|
220
|
+
output: json(part.output),
|
|
221
|
+
...part.preliminary && { preliminary: true }
|
|
222
|
+
},
|
|
223
|
+
...part.state === "output-error" && { errorText: part.errorText },
|
|
224
|
+
...part.approval && { approval: {
|
|
225
|
+
id: part.approval.id,
|
|
226
|
+
...part.approval.approved !== void 0 && { approved: part.approval.approved },
|
|
227
|
+
...part.approval.reason !== void 0 && { reason: part.approval.reason }
|
|
228
|
+
} },
|
|
229
|
+
...owner !== void 0 && { owner },
|
|
230
|
+
...part.providerExecuted && { providerExecuted: true },
|
|
231
|
+
...dynamic && { dynamic: true },
|
|
232
|
+
...part.title !== void 0 && { title: part.title }
|
|
233
|
+
}, part.callProviderMetadata);
|
|
234
|
+
}
|
|
235
|
+
/** Convert a transcript message into an AI SDK UI message. */
|
|
236
|
+
function toUIMessage(message) {
|
|
237
|
+
return {
|
|
238
|
+
id: message.id,
|
|
239
|
+
role: message.role,
|
|
240
|
+
parts: message.parts.map(toUIPart),
|
|
241
|
+
...message.metadata && { metadata: message.metadata }
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
function toUIPart(part) {
|
|
245
|
+
switch (part.type) {
|
|
246
|
+
case "data": {
|
|
247
|
+
const { name, ...rest } = part;
|
|
248
|
+
return {
|
|
249
|
+
...rest,
|
|
250
|
+
type: `data-${name}`
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
case "tool": {
|
|
254
|
+
const { type: _type, toolName, dynamic, owner: _owner, providerMetadata, ...rest } = part;
|
|
255
|
+
const call = {
|
|
256
|
+
...rest,
|
|
257
|
+
...providerMetadata && { callProviderMetadata: providerMetadata }
|
|
258
|
+
};
|
|
259
|
+
return dynamic ? {
|
|
260
|
+
...call,
|
|
261
|
+
type: "dynamic-tool",
|
|
262
|
+
toolName
|
|
263
|
+
} : {
|
|
264
|
+
...call,
|
|
265
|
+
type: `tool-${toolName}`
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
default: return part;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/** Whether the message has a tool call waiting for a result or an approval. */
|
|
272
|
+
function awaitsInput(message) {
|
|
273
|
+
return message.parts.some((part) => "toolCallId" in part && (part.state === "input-available" || part.state === "approval-requested"));
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Record a tool result or approval response on the tool call it answers.
|
|
277
|
+
* Returns the updated message, or undefined when no call is waiting for it,
|
|
278
|
+
* so the first answer wins.
|
|
279
|
+
*/
|
|
280
|
+
function answerToolCall(messages, event) {
|
|
281
|
+
for (const message of messages) {
|
|
282
|
+
const index = message.parts.findIndex((part) => answers(part, event));
|
|
283
|
+
if (index === -1) continue;
|
|
284
|
+
const parts = [...message.parts];
|
|
285
|
+
const part = parts[index];
|
|
286
|
+
parts[index] = event.type === "approval-response" ? {
|
|
287
|
+
...part,
|
|
288
|
+
state: event.approved ? "approval-responded" : "output-denied",
|
|
289
|
+
approval: {
|
|
290
|
+
id: event.approvalId,
|
|
291
|
+
approved: event.approved,
|
|
292
|
+
...event.reason !== void 0 && { reason: event.reason }
|
|
293
|
+
}
|
|
294
|
+
} : event.type === "tool-result" && event.result.ok ? {
|
|
295
|
+
...part,
|
|
296
|
+
state: "output-available",
|
|
297
|
+
output: event.result.output
|
|
298
|
+
} : {
|
|
299
|
+
...part,
|
|
300
|
+
state: "output-error",
|
|
301
|
+
errorText: event.type === "tool-result" && !event.result.ok ? event.result.errorText ?? "" : ""
|
|
302
|
+
};
|
|
303
|
+
return {
|
|
304
|
+
...message,
|
|
305
|
+
parts
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
function answers(part, event) {
|
|
310
|
+
if (!("toolCallId" in part)) return false;
|
|
311
|
+
if (event.type === "tool-result") return part.toolCallId === event.toolCallId && (part.state === "input-available" || part.state === "approval-responded");
|
|
312
|
+
return event.type === "approval-response" && part.state === "approval-requested" && part.approval.id === event.approvalId;
|
|
313
|
+
}
|
|
314
|
+
//#endregion
|
|
315
|
+
export { toTranscriptMessage as a, toResponseChunks as i, awaitsInput as n, toUIMessage as o, toResponseChunk as r, toUIMessageChunk as s, answerToolCall as t };
|
|
316
|
+
|
|
317
|
+
//# sourceMappingURL=turns-DCV3ycDl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turns-DCV3ycDl.js","names":[],"sources":["../src/harness/ai-sdk/turns.ts"],"sourcesContent":["import type { ToolSet, UIMessage, UIMessageChunk } from \"ai\";\nimport type {\n InboundEvent,\n Json,\n JsonObject,\n MessagePart,\n ResponseChunk,\n ToolPart,\n TranscriptMessage\n} from \"../../experimental/channels/protocol\";\n\nexport type AiSdkConversionOptions = {\n /** The agent's tools. Those without `execute` run on a client. */\n tools?: ToolSet;\n /** Id of the participant whose client runs this message's client tools. */\n owner?: string;\n};\n\nfunction ownerOf(\n toolName: string,\n { tools, owner }: AiSdkConversionOptions\n): string | undefined {\n const tool =\n tools && Object.hasOwn(tools, toolName) ? tools[toolName] : undefined;\n return tool && !tool.execute ? owner : undefined;\n}\n\ntype UIPart = UIMessage[\"parts\"][number];\n\n// SAFETY: AI SDK values that reach these casts are JSON: tool inputs are\n// parsed JSON, and outputs, metadata and data are JSON-serializable by the\n// AI SDK's own contract for UI messages.\nconst json = (value: unknown): Json => (value ?? null) as Json;\nconst object = (value: unknown): JsonObject | undefined =>\n typeof value === \"object\" && value !== null\n ? (value as JsonObject)\n : undefined;\n\nfunction withMetadata<T extends object>(\n value: T,\n metadata: unknown\n): T & { providerMetadata?: JsonObject } {\n const providerMetadata = object(metadata);\n return providerMetadata ? { ...value, providerMetadata } : value;\n}\n\nlet warned = false;\nfunction warnSkipped(type: string): void {\n if (warned) return;\n warned = true;\n console.warn(`Channels skipped an AI SDK part it cannot carry: \"${type}\"`);\n}\n\n/**\n * Convert an AI SDK UI message stream into response chunks.\n *\n * An `error` or `abort` chunk makes the iteration throw once the stream\n * ends, so a failed or aborted generation never reads as a finished one, while the stream still\n * runs to its end and its `onEnd` sees the partial message.\n */\nexport async function* toResponseChunks(\n stream: AsyncIterable<UIMessageChunk>,\n options: AiSdkConversionOptions = {}\n): AsyncGenerator<ResponseChunk> {\n let error: Error | undefined;\n for await (const chunk of stream) {\n if (chunk.type === \"error\") error ??= new Error(chunk.errorText);\n if (chunk.type === \"abort\")\n error ??= new Error(\"The generation was aborted\");\n const converted = toResponseChunk(chunk, options);\n if (converted) yield converted;\n }\n if (error) throw error;\n}\n\n/** Convert one AI SDK UI message chunk into a response chunk, if it has one. */\nexport function toResponseChunk(\n chunk: UIMessageChunk,\n options: AiSdkConversionOptions\n): ResponseChunk | undefined {\n switch (chunk.type) {\n case \"text-start\":\n case \"text-end\":\n case \"reasoning-start\":\n case \"reasoning-end\":\n return withMetadata(\n { type: chunk.type, id: chunk.id },\n chunk.providerMetadata\n );\n case \"text-delta\":\n case \"reasoning-delta\":\n return { type: chunk.type, id: chunk.id, delta: chunk.delta };\n case \"tool-input-start\":\n return tool(chunk, options, { type: \"tool-input-start\" as const });\n case \"tool-input-delta\":\n return {\n type: \"tool-input-delta\",\n toolCallId: chunk.toolCallId,\n delta: chunk.inputTextDelta\n };\n case \"tool-input-available\":\n return withMetadata(\n tool(chunk, options, {\n type: \"tool-input-available\" as const,\n input: json(chunk.input)\n }),\n chunk.providerMetadata\n );\n case \"tool-input-error\": {\n const { owner: _owner, ...call } = tool(chunk, {}, {});\n return {\n ...call,\n type: \"tool-input-error\",\n input: json(chunk.input),\n errorText: chunk.errorText\n };\n }\n case \"tool-approval-request\":\n return {\n type: \"tool-approval-request\",\n toolCallId: chunk.toolCallId,\n approvalId: chunk.approvalId\n };\n case \"tool-output-available\":\n return {\n type: \"tool-output-available\",\n toolCallId: chunk.toolCallId,\n output: json(chunk.output),\n ...(chunk.preliminary && { preliminary: true }),\n ...(chunk.providerExecuted && { providerExecuted: true })\n };\n case \"tool-output-error\":\n return {\n type: \"tool-output-error\",\n toolCallId: chunk.toolCallId,\n errorText: chunk.errorText,\n ...(chunk.providerExecuted && { providerExecuted: true })\n };\n case \"tool-output-denied\":\n return { type: \"tool-output-denied\", toolCallId: chunk.toolCallId };\n case \"source-url\":\n case \"source-document\":\n case \"file\": {\n const { providerMetadata, ...part } = chunk;\n // SAFETY: these chunk shapes match the Channels parts field for field.\n return withMetadata(part, providerMetadata) as ResponseChunk;\n }\n case \"start\":\n case \"finish\":\n return chunk.messageMetadata === undefined\n ? undefined\n : metadata(chunk.messageMetadata);\n case \"message-metadata\":\n return metadata(chunk.messageMetadata);\n case \"start-step\":\n case \"finish-step\":\n case \"tool-approval-response\":\n case \"error\":\n case \"abort\":\n return undefined;\n default:\n if (chunk.type.startsWith(\"data-\") && \"data\" in chunk) {\n return {\n type: \"data\",\n name: chunk.type.slice(\"data-\".length),\n ...(chunk.id !== undefined && { id: chunk.id }),\n data: json(chunk.data),\n ...(chunk.transient && { transient: true })\n };\n }\n warnSkipped(chunk.type);\n return undefined;\n }\n}\n\nfunction tool<T extends object>(\n chunk: {\n toolCallId: string;\n toolName: string;\n providerExecuted?: boolean;\n dynamic?: boolean;\n title?: string;\n },\n options: AiSdkConversionOptions,\n rest: T\n) {\n const owner = ownerOf(chunk.toolName, options);\n return {\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n ...(owner !== undefined && { owner }),\n ...(chunk.providerExecuted && { providerExecuted: true }),\n ...(chunk.dynamic && { dynamic: true }),\n ...(chunk.title !== undefined && { title: chunk.title }),\n ...rest\n };\n}\n\nfunction metadata(value: unknown): ResponseChunk | undefined {\n const converted = object(value);\n return converted ? { type: \"metadata\", metadata: converted } : undefined;\n}\n\n/**\n * Convert a response chunk into an AI SDK UI message chunk. Fields that only\n * Channels has, such as a tool call's `owner`, are dropped.\n */\nexport function toUIMessageChunk(chunk: ResponseChunk): UIMessageChunk {\n switch (chunk.type) {\n case \"tool-input-start\":\n case \"tool-input-available\": {\n const { owner: _owner, ...rest } = chunk;\n // SAFETY: as below, once the Channels-only owner is gone.\n return rest as UIMessageChunk;\n }\n case \"tool-input-delta\":\n return {\n type: \"tool-input-delta\",\n toolCallId: chunk.toolCallId,\n inputTextDelta: chunk.delta\n };\n case \"data\": {\n const { name, ...rest } = chunk;\n return { ...rest, type: `data-${name}` };\n }\n case \"metadata\":\n return { type: \"message-metadata\", messageMetadata: chunk.metadata };\n default:\n // SAFETY: the remaining chunks match their AI SDK shapes field for\n // field.\n return chunk as UIMessageChunk;\n }\n}\n\n/** Convert a saved AI SDK UI message into a transcript message. */\nexport function toTranscriptMessage(\n message: UIMessage,\n options: AiSdkConversionOptions = {}\n): TranscriptMessage {\n const metadata = object(message.metadata);\n return {\n id: message.id,\n role: message.role,\n parts: message.parts.flatMap((part) => {\n const converted = toMessagePart(part, options);\n return converted ? [converted] : [];\n }),\n ...(metadata && { metadata })\n };\n}\n\nfunction toMessagePart(\n part: UIPart,\n options: AiSdkConversionOptions\n): MessagePart | undefined {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n return withMetadata(\n { type: part.type, text: part.text },\n part.providerMetadata\n );\n case \"file\":\n case \"source-url\":\n case \"source-document\": {\n const { providerMetadata, ...rest } = part;\n if (\"providerReference\" in rest) delete rest.providerReference;\n // SAFETY: these part shapes match the Channels parts field for field.\n return withMetadata(rest, providerMetadata) as MessagePart;\n }\n case \"step-start\":\n return undefined;\n case \"dynamic-tool\":\n return toToolPart(part, part.toolName, true, options);\n default:\n if (part.type.startsWith(\"tool-\") && \"toolCallId\" in part) {\n return toToolPart(\n part,\n part.type.slice(\"tool-\".length),\n false,\n options\n );\n }\n if (part.type.startsWith(\"data-\") && \"data\" in part) {\n return {\n type: \"data\",\n name: part.type.slice(\"data-\".length),\n ...(part.id !== undefined && { id: part.id }),\n data: json(part.data)\n };\n }\n warnSkipped(part.type);\n return undefined;\n }\n}\n\ntype UIToolPart = Extract<UIPart, { toolCallId: string }>;\n\nfunction toToolPart(\n part: UIToolPart,\n toolName: string,\n dynamic: boolean,\n options: AiSdkConversionOptions\n): ToolPart {\n const owner = ownerOf(toolName, options);\n return withMetadata(\n {\n type: \"tool\",\n toolCallId: part.toolCallId,\n toolName,\n state: part.state,\n ...(part.input !== undefined && { input: json(part.input) }),\n ...(part.state === \"output-available\" && {\n output: json(part.output),\n ...(part.preliminary && { preliminary: true })\n }),\n ...(part.state === \"output-error\" && { errorText: part.errorText }),\n ...(part.approval && {\n approval: {\n id: part.approval.id,\n ...(part.approval.approved !== undefined && {\n approved: part.approval.approved\n }),\n ...(part.approval.reason !== undefined && {\n reason: part.approval.reason\n })\n }\n }),\n ...(owner !== undefined && { owner }),\n ...(part.providerExecuted && { providerExecuted: true }),\n ...(dynamic && { dynamic: true }),\n ...(part.title !== undefined && { title: part.title })\n } satisfies ToolPart,\n part.callProviderMetadata\n );\n}\n\n/** Convert a transcript message into an AI SDK UI message. */\nexport function toUIMessage(message: TranscriptMessage): UIMessage {\n return {\n id: message.id,\n role: message.role,\n parts: message.parts.map(toUIPart),\n ...(message.metadata && { metadata: message.metadata })\n };\n}\n\nfunction toUIPart(part: MessagePart): UIPart {\n switch (part.type) {\n case \"data\": {\n const { name, ...rest } = part;\n return { ...rest, type: `data-${name}` };\n }\n case \"tool\": {\n const {\n type: _type,\n toolName,\n dynamic,\n owner: _owner,\n providerMetadata,\n ...rest\n } = part;\n const call = {\n ...rest,\n ...(providerMetadata && { callProviderMetadata: providerMetadata })\n };\n // SAFETY: the state and its fields were produced together by\n // toToolPart, or by an agent following the same ToolState rules.\n return (\n dynamic\n ? { ...call, type: \"dynamic-tool\", toolName }\n : { ...call, type: `tool-${toolName}` }\n ) as UIPart;\n }\n default:\n // SAFETY: the remaining parts match their AI SDK shapes field for field.\n return part as UIPart;\n }\n}\n\n/** Whether the message has a tool call waiting for a result or an approval. */\nexport function awaitsInput(message: UIMessage): boolean {\n return message.parts.some(\n (part) =>\n \"toolCallId\" in part &&\n (part.state === \"input-available\" || part.state === \"approval-requested\")\n );\n}\n\n/** A tool result or approval response, as an inbound event carries it. */\nexport type ToolCallAnswer =\n | Pick<\n Extract<InboundEvent, { type: \"tool-result\" }>,\n \"type\" | \"toolCallId\" | \"result\"\n >\n | Pick<\n Extract<InboundEvent, { type: \"approval-response\" }>,\n \"type\" | \"approvalId\" | \"approved\" | \"reason\"\n >;\n\n/**\n * Record a tool result or approval response on the tool call it answers.\n * Returns the updated message, or undefined when no call is waiting for it,\n * so the first answer wins.\n */\nexport function answerToolCall(\n messages: readonly UIMessage[],\n event: ToolCallAnswer\n): UIMessage | undefined {\n for (const message of messages) {\n const index = message.parts.findIndex((part) => answers(part, event));\n if (index === -1) continue;\n const parts = [...message.parts];\n const part = parts[index] as UIToolPart;\n // SAFETY: the new state is set with exactly the fields it requires.\n parts[index] = (\n event.type === \"approval-response\"\n ? {\n ...part,\n // As the AI SDK records them: a rejection ends the call.\n state: event.approved ? \"approval-responded\" : \"output-denied\",\n approval: {\n id: event.approvalId,\n approved: event.approved,\n ...(event.reason !== undefined && { reason: event.reason })\n }\n }\n : event.type === \"tool-result\" && event.result.ok\n ? { ...part, state: \"output-available\", output: event.result.output }\n : {\n ...part,\n state: \"output-error\",\n errorText:\n event.type === \"tool-result\" && !event.result.ok\n ? (event.result.errorText ?? \"\")\n : \"\"\n }\n ) as UIPart;\n return { ...message, parts };\n }\n return undefined;\n}\n\nfunction answers(part: UIPart, event: ToolCallAnswer): boolean {\n if (!(\"toolCallId\" in part)) return false;\n if (event.type === \"tool-result\") {\n return (\n part.toolCallId === event.toolCallId &&\n // An approved client tool is answered after its approval.\n (part.state === \"input-available\" || part.state === \"approval-responded\")\n );\n }\n return (\n event.type === \"approval-response\" &&\n part.state === \"approval-requested\" &&\n part.approval.id === event.approvalId\n );\n}\n"],"mappings":"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"}
|
package/dist/voice/client.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { i as _classPrivateFieldInitSpec, n as _classPrivateFieldSet2, r as _assertClassBrand, t as _classPrivateFieldGet2 } from "../classPrivateFieldGet2-DZBYAB34.js";
|
|
2
2
|
import { t as _classPrivateMethodInitSpec } from "../classPrivateMethodInitSpec-qMjJ6sHQ.js";
|
|
3
|
-
import { VOICE_PROTOCOL_VERSION } from "./types.js";
|
|
4
3
|
import { toVoiceError } from "./errors.js";
|
|
5
4
|
import { t as ClientDiagnostics } from "../diagnostics-C4jcz3VK.js";
|
|
5
|
+
import { VOICE_PROTOCOL_VERSION } from "./types.js";
|
|
6
6
|
import { PartySocket } from "partysocket";
|
|
7
7
|
//#region src/voice/client.ts
|
|
8
8
|
function camelCaseToKebabCase(str) {
|
package/dist/voice/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { x as Connection } from "../capability-runner-
|
|
2
|
-
import { c as Agent } from "../agent-routing-
|
|
1
|
+
import { x as Connection } from "../capability-runner-BiVUtjqC.js";
|
|
2
|
+
import { c as Agent } from "../agent-routing-QDcchcQP.js";
|
|
3
3
|
import {
|
|
4
4
|
C as VoiceTransport,
|
|
5
5
|
D as VoiceTurnSource,
|
package/dist/voice/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { i as _classPrivateFieldInitSpec, n as _classPrivateFieldSet2, r as _assertClassBrand, t as _classPrivateFieldGet2 } from "../classPrivateFieldGet2-DZBYAB34.js";
|
|
2
2
|
import { t as _classPrivateMethodInitSpec } from "../classPrivateMethodInitSpec-qMjJ6sHQ.js";
|
|
3
|
-
import { VOICE_PROTOCOL_VERSION } from "./types.js";
|
|
4
3
|
import { logVoiceError, toVoiceError, voiceErrorMessage } from "./errors.js";
|
|
5
4
|
import { n as ServerDiagnostics } from "../diagnostics-C4jcz3VK.js";
|
|
5
|
+
import { VOICE_PROTOCOL_VERSION } from "./types.js";
|
|
6
6
|
import { n as iterateTextEvents, r as SentenceChunker, t as iterateText } from "../text-stream-CpdiKrJB.js";
|
|
7
7
|
import { addSFUTracks, createSFUSession, createSFUWebSocketAdapter, decodeVarint, downsample48kStereoTo16kMono, encodePayloadToProtobuf, encodeVarint, extractPayloadFromProtobuf, renegotiateSFUSession, sfuFetch, upsample16kMonoTo48kStereo } from "./sfu.js";
|
|
8
8
|
import { WorkersAIFluxSTT, WorkersAINova3STT, WorkersAITTS } from "./workers-ai.js";
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import {
|
|
2
|
+
C as WindowWebFetchPageOptions,
|
|
3
|
+
S as WebFetchVia,
|
|
4
|
+
T as windowWebFetchPage,
|
|
5
|
+
_ as WEB_FETCH_TOOL_NAME,
|
|
6
|
+
a as WebFetchCallOptions,
|
|
7
|
+
b as WebFetchToolInput,
|
|
8
|
+
c as WebFetchRequest,
|
|
9
|
+
d as DEFAULT_WEB_FETCH_MAX_BYTES,
|
|
10
|
+
f as DEFAULT_WEB_FETCH_MAX_REDIRECTS,
|
|
11
|
+
g as WEB_FETCH_TOOL_DESCRIPTION,
|
|
12
|
+
h as MAX_WEB_FETCH_URL_LENGTH,
|
|
13
|
+
i as DirectWebFetchOptions,
|
|
14
|
+
l as WebFetchSource,
|
|
15
|
+
m as DEFAULT_WEB_FETCH_TIMEOUT_MS,
|
|
16
|
+
n as WebFetchToolOptions,
|
|
17
|
+
o as WebFetchError,
|
|
18
|
+
p as DEFAULT_WEB_FETCH_PAGE_CHARS,
|
|
19
|
+
r as WebFetchToolSourceOptions,
|
|
20
|
+
s as WebFetchErrorCode,
|
|
21
|
+
t as WebFetchToolDirectOptions,
|
|
22
|
+
u as createDirectWebFetch,
|
|
23
|
+
v as WebFetchFormat,
|
|
24
|
+
w as renderWebFetchPage,
|
|
25
|
+
x as WebFetchToolOutput,
|
|
26
|
+
y as WebFetchPage
|
|
27
|
+
} from "../../tool-DoVberpN.js";
|
|
28
|
+
|
|
29
|
+
//#region src/web/url-policy.d.ts
|
|
30
|
+
/**
|
|
31
|
+
* Whether a host, as `URL.hostname` gives it, is in one of the ranges below
|
|
32
|
+
* (IPv4, or IPv6 including IPv4-mapped, NAT64 and 6to4 forms), or is
|
|
33
|
+
* `localhost` or ends in `.localhost` or `.internal`.
|
|
34
|
+
*/
|
|
35
|
+
declare function isPrivateOrLocalHost(hostname: string): boolean;
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/web/fetch/index.d.ts
|
|
38
|
+
/** Options for {@link fetchWeb}: the direct source's, plus a deadline. */
|
|
39
|
+
interface FetchWebOptions extends DirectWebFetchOptions {
|
|
40
|
+
/**
|
|
41
|
+
* Give up after this many milliseconds with a `web_fetch_timeout` error.
|
|
42
|
+
* A positive integer; defaults to 30 seconds.
|
|
43
|
+
*/
|
|
44
|
+
timeoutMs?: number;
|
|
45
|
+
/** Abort the fetch; rejects with the signal's reason. */
|
|
46
|
+
signal?: AbortSignal;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Fetch one URL directly, without a tool: {@link createDirectWebFetch} plus
|
|
50
|
+
* a deadline. Returns the whole page; to show it to a model a window at a
|
|
51
|
+
* time, as the tool does, pass it to {@link windowWebFetchPage} and
|
|
52
|
+
* {@link renderWebFetchPage}.
|
|
53
|
+
*/
|
|
54
|
+
declare function fetchWeb(
|
|
55
|
+
request: WebFetchRequest,
|
|
56
|
+
options: FetchWebOptions
|
|
57
|
+
): Promise<WebFetchPage>;
|
|
58
|
+
//#endregion
|
|
59
|
+
export {
|
|
60
|
+
DEFAULT_WEB_FETCH_MAX_BYTES,
|
|
61
|
+
DEFAULT_WEB_FETCH_MAX_REDIRECTS,
|
|
62
|
+
DEFAULT_WEB_FETCH_PAGE_CHARS,
|
|
63
|
+
DEFAULT_WEB_FETCH_TIMEOUT_MS,
|
|
64
|
+
type DirectWebFetchOptions,
|
|
65
|
+
FetchWebOptions,
|
|
66
|
+
MAX_WEB_FETCH_URL_LENGTH,
|
|
67
|
+
WEB_FETCH_TOOL_DESCRIPTION,
|
|
68
|
+
WEB_FETCH_TOOL_NAME,
|
|
69
|
+
type WebFetchCallOptions,
|
|
70
|
+
WebFetchError,
|
|
71
|
+
type WebFetchErrorCode,
|
|
72
|
+
type WebFetchFormat,
|
|
73
|
+
type WebFetchPage,
|
|
74
|
+
type WebFetchRequest,
|
|
75
|
+
type WebFetchSource,
|
|
76
|
+
type WebFetchToolDirectOptions,
|
|
77
|
+
type WebFetchToolInput,
|
|
78
|
+
type WebFetchToolOptions,
|
|
79
|
+
type WebFetchToolOutput,
|
|
80
|
+
type WebFetchToolSourceOptions,
|
|
81
|
+
type WebFetchVia,
|
|
82
|
+
type WindowWebFetchPageOptions,
|
|
83
|
+
createDirectWebFetch,
|
|
84
|
+
fetchWeb,
|
|
85
|
+
isPrivateOrLocalHost,
|
|
86
|
+
renderWebFetchPage,
|
|
87
|
+
windowWebFetchPage
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=index.d.ts.map
|