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
package/dist/chat/index.js
CHANGED
|
@@ -2,12 +2,13 @@ import { isPositionlessAgentToolChunk } from "../agent-tool-types.js";
|
|
|
2
2
|
import { isDurableObjectResetError, isPlatformFailure, tryN } from "../retries.js";
|
|
3
3
|
import { a as isReplayChunk, i as isLateToolInputChunk, n as applyLateToolInput, o as lateToolInputForwardChunks, r as getPartialStreamText, s as normalizeToolInput, t as applyChunkToParts } from "../message-builder-DAl9AhHH.js";
|
|
4
4
|
import { a as interceptAgentToolBroadcast, i as createAgentToolEventState, r as applyAgentToolEvent, s as storedChunkBytes, t as AgentToolProgressEmitter } from "../agent-tools-CdJC-8Dc.js";
|
|
5
|
-
import { t as TextSegmentJoiner } from "../text-segment-joiner-BtAFQSA_.js";
|
|
6
5
|
import { n as sanitizeMessage, t as byteLength } from "../sanitize-D9TujEK8.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { n as STREAM_RESUME_NONE_REASONS, r as StreamAccumulator, t as CHAT_MESSAGE_TYPES } from "../protocol-eXeJxhgu.js";
|
|
7
|
+
import { t as TextSegmentJoiner } from "../text-segment-joiner-BtAFQSA_.js";
|
|
8
|
+
import { n as transition } from "../broadcast-state-CEyI4uAK.js";
|
|
9
|
+
import { n as Streams } from "../streams-lsHMJhRW.js";
|
|
10
|
+
import { i as createToolsFromClientSchemas, n as iterateWithStallWatchdog, r as parseProtocolMessage, t as ChatStreamStalledError } from "../stall-watchdog-BpRF2uwG.js";
|
|
9
11
|
import { t as MessageType } from "../wire-types-CnMt6_HR.js";
|
|
10
|
-
import { jsonSchema, tool } from "ai";
|
|
11
12
|
import { nanoid } from "nanoid";
|
|
12
13
|
//#region src/chat/tool-output-truncation.ts
|
|
13
14
|
const DEFAULT_MAX_DEPTH = 8;
|
|
@@ -1495,42 +1496,6 @@ function buildInClauseStrings(prefix, count) {
|
|
|
1495
1496
|
return asTemplateStringsArray(parts);
|
|
1496
1497
|
}
|
|
1497
1498
|
//#endregion
|
|
1498
|
-
//#region src/chat/client-tools.ts
|
|
1499
|
-
/**
|
|
1500
|
-
* Converts client tool schemas to AI SDK tool format.
|
|
1501
|
-
*
|
|
1502
|
-
* By default these tools have no `execute` function — when the AI model calls
|
|
1503
|
-
* them, the tool call is sent back to the client for execution.
|
|
1504
|
-
*
|
|
1505
|
-
* When `options.execute` is provided, each tool is built WITH an `execute` that
|
|
1506
|
-
* delegates to it. This is used by the RPC path (e.g. a parent agent driving a
|
|
1507
|
-
* Think sub-agent) so the model's client-tool call is resolved inline within
|
|
1508
|
-
* the same turn.
|
|
1509
|
-
*
|
|
1510
|
-
* @param clientTools - Array of tool schemas from the client
|
|
1511
|
-
* @param options - Optional `execute` delegate to run the tools inline
|
|
1512
|
-
* @returns Record of AI SDK tools that can be spread into your tools object
|
|
1513
|
-
*/
|
|
1514
|
-
function createToolsFromClientSchemas(clientTools, options) {
|
|
1515
|
-
if (!clientTools || clientTools.length === 0) return {};
|
|
1516
|
-
const seenNames = /* @__PURE__ */ new Set();
|
|
1517
|
-
for (const t of clientTools) {
|
|
1518
|
-
if (seenNames.has(t.name)) console.warn(`[createToolsFromClientSchemas] Duplicate tool name "${t.name}" found. Later definitions will override earlier ones.`);
|
|
1519
|
-
seenNames.add(t.name);
|
|
1520
|
-
}
|
|
1521
|
-
const execute = options?.execute;
|
|
1522
|
-
const createTool = tool;
|
|
1523
|
-
return Object.fromEntries(clientTools.map((t) => [t.name, createTool({
|
|
1524
|
-
description: typeof t.description === "function" ? "" : t.description ?? "",
|
|
1525
|
-
inputSchema: jsonSchema(t.parameters ?? { type: "object" }),
|
|
1526
|
-
...execute ? { execute: (input, executeOptions) => execute({
|
|
1527
|
-
toolName: t.name,
|
|
1528
|
-
input,
|
|
1529
|
-
toolCallId: executeOptions?.toolCallId ?? ""
|
|
1530
|
-
}) } : {}
|
|
1531
|
-
})]));
|
|
1532
|
-
}
|
|
1533
|
-
//#endregion
|
|
1534
1499
|
//#region src/chat/continuation-state.ts
|
|
1535
1500
|
/**
|
|
1536
1501
|
* ContinuationState — shared state container for auto-continuation lifecycle.
|
|
@@ -2274,84 +2239,6 @@ function hasIncompleteToolBatch(messages) {
|
|
|
2274
2239
|
return false;
|
|
2275
2240
|
}
|
|
2276
2241
|
//#endregion
|
|
2277
|
-
//#region src/chat/parse-protocol.ts
|
|
2278
|
-
/**
|
|
2279
|
-
* Protocol Message Parser — typed parsing of cf_agent_chat_* WebSocket messages.
|
|
2280
|
-
*
|
|
2281
|
-
* Parses raw WebSocket messages into a discriminated union of protocol events.
|
|
2282
|
-
* Both AIChatAgent and Think can use this instead of manual JSON.parse + type checking.
|
|
2283
|
-
*/
|
|
2284
|
-
/**
|
|
2285
|
-
* Parse a raw WebSocket message string into a typed protocol event.
|
|
2286
|
-
*
|
|
2287
|
-
* Returns `null` if the message is not valid JSON or not a recognized
|
|
2288
|
-
* protocol message type. Callers should fall through to the user's
|
|
2289
|
-
* `onMessage` handler when `null` is returned.
|
|
2290
|
-
*
|
|
2291
|
-
* @example
|
|
2292
|
-
* ```typescript
|
|
2293
|
-
* const event = parseProtocolMessage(rawMessage);
|
|
2294
|
-
* if (!event) return userOnMessage(connection, rawMessage);
|
|
2295
|
-
*
|
|
2296
|
-
* switch (event.type) {
|
|
2297
|
-
* case "chat-request": { ... }
|
|
2298
|
-
* case "clear": { ... }
|
|
2299
|
-
* case "tool-result": { ... }
|
|
2300
|
-
* }
|
|
2301
|
-
* ```
|
|
2302
|
-
*/
|
|
2303
|
-
function parseProtocolMessage(raw) {
|
|
2304
|
-
let data;
|
|
2305
|
-
try {
|
|
2306
|
-
data = JSON.parse(raw);
|
|
2307
|
-
} catch {
|
|
2308
|
-
return null;
|
|
2309
|
-
}
|
|
2310
|
-
const wireType = data.type;
|
|
2311
|
-
if (!wireType) return null;
|
|
2312
|
-
switch (wireType) {
|
|
2313
|
-
case CHAT_MESSAGE_TYPES.USE_CHAT_REQUEST: return {
|
|
2314
|
-
type: "chat-request",
|
|
2315
|
-
id: data.id,
|
|
2316
|
-
init: data.init ?? {}
|
|
2317
|
-
};
|
|
2318
|
-
case CHAT_MESSAGE_TYPES.CHAT_CLEAR: return { type: "clear" };
|
|
2319
|
-
case CHAT_MESSAGE_TYPES.CHAT_REQUEST_CANCEL: return {
|
|
2320
|
-
type: "cancel",
|
|
2321
|
-
id: data.id
|
|
2322
|
-
};
|
|
2323
|
-
case CHAT_MESSAGE_TYPES.TOOL_RESULT: return {
|
|
2324
|
-
type: "tool-result",
|
|
2325
|
-
toolCallId: data.toolCallId,
|
|
2326
|
-
toolName: data.toolName ?? "",
|
|
2327
|
-
output: data.output,
|
|
2328
|
-
state: data.state,
|
|
2329
|
-
errorText: data.errorText,
|
|
2330
|
-
autoContinue: data.autoContinue,
|
|
2331
|
-
clientTools: data.clientTools
|
|
2332
|
-
};
|
|
2333
|
-
case CHAT_MESSAGE_TYPES.TOOL_APPROVAL: return {
|
|
2334
|
-
type: "tool-approval",
|
|
2335
|
-
toolCallId: data.toolCallId,
|
|
2336
|
-
approved: data.approved,
|
|
2337
|
-
autoContinue: data.autoContinue
|
|
2338
|
-
};
|
|
2339
|
-
case CHAT_MESSAGE_TYPES.STREAM_RESUME_REQUEST: return {
|
|
2340
|
-
type: "stream-resume-request",
|
|
2341
|
-
...typeof data.probeId === "string" ? { probeId: data.probeId } : {}
|
|
2342
|
-
};
|
|
2343
|
-
case CHAT_MESSAGE_TYPES.STREAM_RESUME_ACK: return {
|
|
2344
|
-
type: "stream-resume-ack",
|
|
2345
|
-
id: data.id
|
|
2346
|
-
};
|
|
2347
|
-
case CHAT_MESSAGE_TYPES.CHAT_MESSAGES: return {
|
|
2348
|
-
type: "messages",
|
|
2349
|
-
messages: data.messages ?? []
|
|
2350
|
-
};
|
|
2351
|
-
default: return null;
|
|
2352
|
-
}
|
|
2353
|
-
}
|
|
2354
|
-
//#endregion
|
|
2355
2242
|
//#region src/chat/message-reconciler.ts
|
|
2356
2243
|
/**
|
|
2357
2244
|
* Reconcile incoming client messages against server state.
|
|
@@ -4057,82 +3944,6 @@ async function runChatRecoveryExhaustion(input, hooks) {
|
|
|
4057
3944
|
await hooks.terminalize(ctx);
|
|
4058
3945
|
}
|
|
4059
3946
|
//#endregion
|
|
4060
|
-
//#region src/chat/stall-watchdog.ts
|
|
4061
|
-
/**
|
|
4062
|
-
* Shared inactivity watchdog for UI-message streams.
|
|
4063
|
-
*
|
|
4064
|
-
* A model/transport stream can park indefinitely without ever throwing (a hung
|
|
4065
|
-
* provider, a wedged transport). Left unguarded, the consumer read-loop waits
|
|
4066
|
-
* forever. {@link iterateWithStallWatchdog} wraps such a stream so that a gap of
|
|
4067
|
-
* `timeoutMs` between chunks aborts the upstream and throws
|
|
4068
|
-
* {@link ChatStreamStalledError}, letting the consumer route the stall into
|
|
4069
|
-
* bounded recovery (#1626) — a transient hang is retried within the existing
|
|
4070
|
-
* recovery budget — while genuine in-band errors stay terminal.
|
|
4071
|
-
*
|
|
4072
|
-
* @internal Sibling-package support for `@cloudflare/ai-chat` and
|
|
4073
|
-
* `@cloudflare/think`, not a public API. See
|
|
4074
|
-
* `design/rfc-chat-recovery-foundation.md`.
|
|
4075
|
-
*/
|
|
4076
|
-
/**
|
|
4077
|
-
* Thrown by {@link iterateWithStallWatchdog} when the inactivity watchdog fires
|
|
4078
|
-
* (a model/transport stream that parks without ever throwing). Distinct from
|
|
4079
|
-
* in-band model/stream errors so the read-loop catch can route a stall into
|
|
4080
|
-
* bounded recovery (#1626) — a transient hang is retried within the existing
|
|
4081
|
-
* recovery budget — while genuine errors stay terminal.
|
|
4082
|
-
*/
|
|
4083
|
-
var ChatStreamStalledError = class extends Error {
|
|
4084
|
-
constructor(message) {
|
|
4085
|
-
super(message);
|
|
4086
|
-
this.isChatStreamStall = true;
|
|
4087
|
-
this.name = "ChatStreamStalledError";
|
|
4088
|
-
}
|
|
4089
|
-
};
|
|
4090
|
-
/**
|
|
4091
|
-
* Wrap a UI-message stream with an inactivity watchdog. If no chunk arrives
|
|
4092
|
-
* within `timeoutMs`, `onStall` runs (aborting the upstream model stream) and
|
|
4093
|
-
* the iterator throws, so the consumer loop exits with a terminal error
|
|
4094
|
-
* instead of parking forever on a hung provider/transport. `timeoutMs <= 0`
|
|
4095
|
-
* passes the source through untouched.
|
|
4096
|
-
*/
|
|
4097
|
-
async function* iterateWithStallWatchdog(source, timeoutMs, onStall) {
|
|
4098
|
-
if (!(timeoutMs > 0)) {
|
|
4099
|
-
yield* source;
|
|
4100
|
-
return;
|
|
4101
|
-
}
|
|
4102
|
-
const iterator = source[Symbol.asyncIterator]();
|
|
4103
|
-
let selfAborted = false;
|
|
4104
|
-
try {
|
|
4105
|
-
while (true) {
|
|
4106
|
-
let timer;
|
|
4107
|
-
let stalled = false;
|
|
4108
|
-
const stall = new Promise((_, reject) => {
|
|
4109
|
-
timer = setTimeout(() => {
|
|
4110
|
-
stalled = true;
|
|
4111
|
-
reject(new ChatStreamStalledError(`Chat stream stalled: no activity for ${timeoutMs}ms; the turn was aborted by the stall watchdog.`));
|
|
4112
|
-
}, timeoutMs);
|
|
4113
|
-
});
|
|
4114
|
-
const nextPromise = iterator.next();
|
|
4115
|
-
nextPromise.catch(() => {});
|
|
4116
|
-
let next;
|
|
4117
|
-
try {
|
|
4118
|
-
next = await Promise.race([nextPromise, stall]);
|
|
4119
|
-
} catch (err) {
|
|
4120
|
-
if (stalled) {
|
|
4121
|
-
selfAborted = true;
|
|
4122
|
-
onStall();
|
|
4123
|
-
}
|
|
4124
|
-
throw err;
|
|
4125
|
-
} finally {
|
|
4126
|
-
if (timer !== void 0) clearTimeout(timer);
|
|
4127
|
-
}
|
|
4128
|
-
if (next.done) return;
|
|
4129
|
-
yield next.value;
|
|
4130
|
-
}
|
|
4131
|
-
} finally {
|
|
4132
|
-
if (!selfAborted) await iterator.return?.(void 0).catch(() => {});
|
|
4133
|
-
}
|
|
4134
|
-
}
|
|
4135
|
-
//#endregion
|
|
4136
3947
|
//#region src/chat/truncate-older-messages.ts
|
|
4137
3948
|
/**
|
|
4138
3949
|
* Truncate tool outputs and long text in older messages.
|