@ably/ai-transport 0.2.0 → 0.3.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 +10 -19
- package/dist/ably-ai-transport.js +1790 -1091
- package/dist/ably-ai-transport.js.map +1 -1
- package/dist/ably-ai-transport.umd.cjs +1 -1
- package/dist/ably-ai-transport.umd.cjs.map +1 -1
- package/dist/constants.d.ts +2 -2
- package/dist/core/agent.d.ts +20 -5
- package/dist/core/channel-options.d.ts +57 -0
- package/dist/core/codec/codec-event.d.ts +9 -0
- package/dist/core/codec/decoder.d.ts +4 -1
- package/dist/core/codec/define-codec.d.ts +100 -0
- package/dist/core/codec/encoder.d.ts +2 -7
- package/dist/core/codec/field-bag.d.ts +85 -0
- package/dist/core/codec/fields.d.ts +141 -0
- package/dist/core/codec/index.d.ts +8 -1
- package/dist/core/codec/input-descriptor-decoder.d.ts +19 -0
- package/dist/core/codec/input-descriptor-encoder.d.ts +22 -0
- package/dist/core/codec/input-descriptors.d.ts +281 -0
- package/dist/core/codec/output-descriptor-decoder.d.ts +29 -0
- package/dist/core/codec/output-descriptor-encoder.d.ts +31 -0
- package/dist/core/codec/output-descriptors.d.ts +237 -0
- package/dist/core/codec/types.d.ts +95 -36
- package/dist/core/codec/well-known-inputs.d.ts +52 -0
- package/dist/core/transport/agent-view.d.ts +296 -0
- package/dist/core/transport/decode-fold.d.ts +40 -32
- package/dist/core/transport/headers.d.ts +30 -1
- package/dist/core/transport/index.d.ts +1 -1
- package/dist/core/transport/invocation.d.ts +1 -1
- package/dist/core/transport/load-history-pages.d.ts +71 -0
- package/dist/core/transport/load-history.d.ts +21 -16
- package/dist/core/transport/run-manager.d.ts +9 -11
- package/dist/core/transport/session-support.d.ts +55 -0
- package/dist/core/transport/tree.d.ts +165 -15
- package/dist/core/transport/types/agent.d.ts +120 -98
- package/dist/core/transport/types/client.d.ts +45 -12
- package/dist/core/transport/types/tree.d.ts +52 -10
- package/dist/core/transport/types/view.d.ts +55 -28
- package/dist/core/transport/view.d.ts +176 -58
- package/dist/core/transport/wire-log.d.ts +102 -0
- package/dist/errors.d.ts +10 -4
- package/dist/index.d.ts +6 -5
- package/dist/react/ably-ai-transport-react.js +784 -415
- package/dist/react/ably-ai-transport-react.js.map +1 -1
- package/dist/react/ably-ai-transport-react.umd.cjs +1 -1
- package/dist/react/ably-ai-transport-react.umd.cjs.map +1 -1
- package/dist/react/contexts/client-session-context.d.ts +2 -1
- package/dist/react/contexts/client-session-provider.d.ts +3 -0
- package/dist/react/index.d.ts +2 -1
- package/dist/react/internal/skipped-session.d.ts +8 -0
- package/dist/react/use-view.d.ts +3 -3
- package/dist/utils.d.ts +22 -54
- package/dist/vercel/ably-ai-transport-vercel.js +2297 -2026
- package/dist/vercel/ably-ai-transport-vercel.js.map +1 -1
- package/dist/vercel/ably-ai-transport-vercel.umd.cjs +1 -1
- package/dist/vercel/ably-ai-transport-vercel.umd.cjs.map +1 -1
- package/dist/vercel/codec/decode-lifecycle.d.ts +9 -0
- package/dist/vercel/codec/events.d.ts +1 -2
- package/dist/vercel/codec/fields.d.ts +44 -0
- package/dist/vercel/codec/fold-content.d.ts +16 -0
- package/dist/vercel/codec/fold-data.d.ts +16 -0
- package/dist/vercel/codec/fold-input.d.ts +67 -0
- package/dist/vercel/codec/fold-lifecycle.d.ts +16 -0
- package/dist/vercel/codec/fold-text.d.ts +16 -0
- package/dist/vercel/codec/fold-tool-input.d.ts +17 -0
- package/dist/vercel/codec/fold-tool-output.d.ts +16 -0
- package/dist/vercel/codec/index.d.ts +5 -30
- package/dist/vercel/codec/inputs.d.ts +11 -0
- package/dist/vercel/codec/outputs.d.ts +11 -0
- package/dist/vercel/codec/reducer-state.d.ts +121 -0
- package/dist/vercel/codec/reducer.d.ts +20 -102
- package/dist/vercel/codec/tool-transitions.d.ts +0 -6
- package/dist/vercel/codec/wire-data.d.ts +34 -0
- package/dist/vercel/index.d.ts +1 -0
- package/dist/vercel/react/ably-ai-transport-vercel-react.js +2013 -9500
- package/dist/vercel/react/ably-ai-transport-vercel-react.js.map +1 -1
- package/dist/vercel/react/ably-ai-transport-vercel-react.umd.cjs +1 -70
- package/dist/vercel/react/ably-ai-transport-vercel-react.umd.cjs.map +1 -1
- package/dist/vercel/react/contexts/chat-transport-context.d.ts +2 -1
- package/dist/vercel/run-end-reason.d.ts +66 -11
- package/dist/vercel/tool-part.d.ts +21 -0
- package/dist/vercel/transport/chat-transport.d.ts +0 -2
- package/dist/vercel/transport/index.d.ts +1 -1
- package/dist/vercel/transport/run-output-stream.d.ts +6 -8
- package/dist/version.d.ts +1 -1
- package/package.json +2 -2
- package/src/constants.ts +2 -2
- package/src/core/agent.ts +43 -19
- package/src/core/channel-options.ts +89 -0
- package/src/core/codec/codec-event.ts +27 -0
- package/src/core/codec/decoder.ts +145 -21
- package/src/core/codec/define-codec.ts +432 -0
- package/src/core/codec/encoder.ts +13 -54
- package/src/core/codec/field-bag.ts +142 -0
- package/src/core/codec/fields.ts +193 -0
- package/src/core/codec/index.ts +43 -0
- package/src/core/codec/input-descriptor-decoder.ts +97 -0
- package/src/core/codec/input-descriptor-encoder.ts +150 -0
- package/src/core/codec/input-descriptors.ts +373 -0
- package/src/core/codec/output-descriptor-decoder.ts +139 -0
- package/src/core/codec/output-descriptor-encoder.ts +101 -0
- package/src/core/codec/output-descriptors.ts +307 -0
- package/src/core/codec/types.ts +99 -36
- package/src/core/codec/well-known-inputs.ts +96 -0
- package/src/core/transport/agent-session.ts +330 -589
- package/src/core/transport/agent-view.ts +738 -0
- package/src/core/transport/client-session.ts +74 -69
- package/src/core/transport/decode-fold.ts +57 -47
- package/src/core/transport/headers.ts +57 -4
- package/src/core/transport/index.ts +2 -1
- package/src/core/transport/invocation.ts +1 -1
- package/src/core/transport/load-history-pages.ts +220 -0
- package/src/core/transport/load-history.ts +63 -61
- package/src/core/transport/pipe-stream.ts +10 -1
- package/src/core/transport/run-manager.ts +25 -31
- package/src/core/transport/session-support.ts +96 -0
- package/src/core/transport/tree.ts +414 -47
- package/src/core/transport/types/agent.ts +129 -102
- package/src/core/transport/types/client.ts +49 -13
- package/src/core/transport/types/tree.ts +61 -12
- package/src/core/transport/types/view.ts +57 -28
- package/src/core/transport/view.ts +520 -172
- package/src/core/transport/wire-log.ts +189 -0
- package/src/errors.ts +10 -3
- package/src/index.ts +44 -11
- package/src/react/contexts/client-session-context.ts +1 -1
- package/src/react/contexts/client-session-provider.tsx +38 -2
- package/src/react/index.ts +2 -1
- package/src/react/internal/skipped-session.ts +62 -0
- package/src/react/use-client-session.ts +7 -30
- package/src/react/use-view.ts +3 -3
- package/src/utils.ts +31 -97
- package/src/vercel/codec/decode-lifecycle.ts +70 -0
- package/src/vercel/codec/events.ts +1 -3
- package/src/vercel/codec/fields.ts +58 -0
- package/src/vercel/codec/fold-content.ts +54 -0
- package/src/vercel/codec/fold-data.ts +46 -0
- package/src/vercel/codec/fold-input.ts +255 -0
- package/src/vercel/codec/fold-lifecycle.ts +85 -0
- package/src/vercel/codec/fold-text.ts +55 -0
- package/src/vercel/codec/fold-tool-input.ts +86 -0
- package/src/vercel/codec/fold-tool-output.ts +79 -0
- package/src/vercel/codec/index.ts +23 -63
- package/src/vercel/codec/inputs.ts +116 -0
- package/src/vercel/codec/outputs.ts +207 -0
- package/src/vercel/codec/reducer-state.ts +169 -0
- package/src/vercel/codec/reducer.ts +52 -838
- package/src/vercel/codec/tool-transitions.ts +1 -12
- package/src/vercel/codec/wire-data.ts +64 -0
- package/src/vercel/index.ts +1 -0
- package/src/vercel/react/contexts/chat-transport-context.ts +1 -1
- package/src/vercel/react/use-chat-transport.ts +8 -28
- package/src/vercel/react/use-message-sync.ts +5 -10
- package/src/vercel/run-end-reason.ts +95 -16
- package/src/vercel/tool-part.ts +25 -0
- package/src/vercel/transport/chat-transport.ts +10 -22
- package/src/vercel/transport/index.ts +1 -1
- package/src/vercel/transport/run-output-stream.ts +7 -8
- package/src/version.ts +1 -1
- package/dist/core/transport/branch-chain.d.ts +0 -43
- package/dist/core/transport/load-conversation.d.ts +0 -128
- package/dist/vercel/codec/decoder.d.ts +0 -9
- package/dist/vercel/codec/encoder.d.ts +0 -11
- package/src/core/transport/branch-chain.ts +0 -58
- package/src/core/transport/load-conversation.ts +0 -355
- package/src/vercel/codec/decoder.ts +0 -696
- package/src/vercel/codec/encoder.ts +0 -548
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-node event log.
|
|
3
|
+
*
|
|
4
|
+
* Each node retains the decoded events it was folded from, grouped by
|
|
5
|
+
* wire-message serial and ordered ascending by serial. The log captures
|
|
6
|
+
* canonical serial order regardless of delivery order, so a node's event
|
|
7
|
+
* sequence can be re-derived in that order even when wires arrive late
|
|
8
|
+
* (cross-publisher reordering) or out of order (history pages applying older
|
|
9
|
+
* messages after newer ones).
|
|
10
|
+
*
|
|
11
|
+
* Within one serial, deliveries are sequenced by `Message.version.serial`
|
|
12
|
+
* (lexicographically ordered per mutation — platform guarantee): each entry
|
|
13
|
+
* records the highest version decoded into it, so a delivery the entry has
|
|
14
|
+
* already incorporated — a whole-wire replay from a second hydration, a
|
|
15
|
+
* remount, or an agent re-walk — is recognised and dropped at the transport.
|
|
16
|
+
*
|
|
17
|
+
* {@link WireLog} encapsulates the entry list and all of its mutation: the
|
|
18
|
+
* caller hands it a wire and is told only how to fold (see {@link WireLogFold}).
|
|
19
|
+
*/
|
|
20
|
+
/** How a {@link WireLog.record} call tells the caller to fold the wire's events. */
|
|
21
|
+
export type WireLogFold =
|
|
22
|
+
/**
|
|
23
|
+
* The version guard rejected a re-delivery the log already incorporated — a
|
|
24
|
+
* whole-wire replay, or a newer version of a non-streamed wire (an edited
|
|
25
|
+
* discrete). Nothing was recorded; fold nothing.
|
|
26
|
+
*/
|
|
27
|
+
'dropped'
|
|
28
|
+
/**
|
|
29
|
+
* The events extend the log tail (in-order delivery) or landed on a swept
|
|
30
|
+
* log; fold them onto the node's existing projection.
|
|
31
|
+
*/
|
|
32
|
+
| 'incremental'
|
|
33
|
+
/**
|
|
34
|
+
* An earlier-serial wire arrived late, so incremental folding would corrupt
|
|
35
|
+
* serial order; rebuild the projection from the whole log via {@link replay}.
|
|
36
|
+
*/
|
|
37
|
+
| 'refold';
|
|
38
|
+
/**
|
|
39
|
+
* A node's event log: one entry per wire-message serial, kept ascending by
|
|
40
|
+
* serial, each accumulating that serial's decoded events in arrival order.
|
|
41
|
+
*/
|
|
42
|
+
export declare class WireLog<TEvent> {
|
|
43
|
+
private readonly _entries;
|
|
44
|
+
private _swept;
|
|
45
|
+
/**
|
|
46
|
+
* Whether the retention sweep has dropped this log's decoded payloads. A
|
|
47
|
+
* swept log keeps each entry's replay key (serial + `decodedThrough`) so it
|
|
48
|
+
* still recognises whole-wire replays, but it can no longer be refolded.
|
|
49
|
+
* @returns True once {@link sweep} has run.
|
|
50
|
+
*/
|
|
51
|
+
get swept(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Record a wire message's decoded events and report how to fold them.
|
|
54
|
+
*
|
|
55
|
+
* Events for an already-logged serial are guarded by the entry's
|
|
56
|
+
* `decodedThrough` version before being recorded; a new serial is inserted
|
|
57
|
+
* at the position that keeps the log ascending by serial (Ably serials order
|
|
58
|
+
* lexicographically). The version guard fires only for deliveries carrying
|
|
59
|
+
* an explicit `version.serial`: in-contract mutations always do, while a
|
|
60
|
+
* version-less delivery records unguarded (and never advances
|
|
61
|
+
* `decodedThrough`), matching the decoder's convention.
|
|
62
|
+
*
|
|
63
|
+
* On a swept log the payload is not retained (only the replay key is), so
|
|
64
|
+
* the fold is never `refold` — a genuinely-new wire there is outside the
|
|
65
|
+
* reorder window and folds incrementally in arrival order.
|
|
66
|
+
* @param serial - The Ably channel serial of the wire message.
|
|
67
|
+
* @param messageId - The wire's codec-message-id, or undefined.
|
|
68
|
+
* @param events - The decoded events to record, in arrival order.
|
|
69
|
+
* @param version - The delivery's `Message.version.serial`, or undefined
|
|
70
|
+
* when the delivery carried none (guard disabled for this delivery).
|
|
71
|
+
* @param streamed - Whether the delivery is part of a streamed wire; a
|
|
72
|
+
* guarded newer delivery for a non-streamed wire is an edited discrete and
|
|
73
|
+
* is dropped.
|
|
74
|
+
* @returns How the caller should fold the events.
|
|
75
|
+
*/
|
|
76
|
+
record(serial: string, messageId: string | undefined, events: TEvent[], version: string | undefined, streamed: boolean): WireLogFold;
|
|
77
|
+
/**
|
|
78
|
+
* Replay every recorded event in canonical order — wire messages ascending
|
|
79
|
+
* by serial, events within a wire in arrival order — each with its wire's
|
|
80
|
+
* routing metadata, for a refold.
|
|
81
|
+
* @param visit - Called once per event, in canonical order.
|
|
82
|
+
*/
|
|
83
|
+
replay(visit: (event: TEvent, serial: string, messageId: string | undefined) => void): void;
|
|
84
|
+
/**
|
|
85
|
+
* Drop the decoded payloads (the unbounded cost) but keep each entry's
|
|
86
|
+
* replay key, so a post-sweep whole-wire replay is still recognised and
|
|
87
|
+
* dropped rather than re-folded. The log becomes {@link swept}; a refold can
|
|
88
|
+
* no longer rebuild the dropped events, which `swept` reflects.
|
|
89
|
+
*/
|
|
90
|
+
sweep(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Insert or extend the entry for `serial`, guarding replays by version.
|
|
93
|
+
* @param serial - The Ably channel serial of the wire message.
|
|
94
|
+
* @param messageId - The wire's codec-message-id, or undefined.
|
|
95
|
+
* @param events - The decoded events to store (empty on a swept log).
|
|
96
|
+
* @param version - The delivery's `Message.version.serial`, or undefined.
|
|
97
|
+
* @param streamed - Whether the delivery is part of a streamed wire.
|
|
98
|
+
* @returns The index of the entry the events landed in, or `undefined` when
|
|
99
|
+
* the version guard dropped the delivery.
|
|
100
|
+
*/
|
|
101
|
+
private _recordEntry;
|
|
102
|
+
}
|
package/dist/errors.d.ts
CHANGED
|
@@ -59,11 +59,17 @@ export declare enum ErrorCode {
|
|
|
59
59
|
*/
|
|
60
60
|
StreamError = 104008,
|
|
61
61
|
/**
|
|
62
|
-
* The agent
|
|
63
|
-
*
|
|
64
|
-
* lapsed without seeing them.
|
|
62
|
+
* The agent waited for the input event(s) the invocation points at —
|
|
63
|
+
* across the bounded history scan and the live subscription — but
|
|
64
|
+
* `inputEventLookupTimeoutMs` lapsed without seeing them.
|
|
65
65
|
*/
|
|
66
|
-
InputEventNotFound = 104010
|
|
66
|
+
InputEventNotFound = 104010,
|
|
67
|
+
/**
|
|
68
|
+
* Channel history pagination failed after bounded retry — either the initial
|
|
69
|
+
* `channel.history()` call or a subsequent `page.next()` exhausted its
|
|
70
|
+
* retry budget. The original failure is preserved as `cause`.
|
|
71
|
+
*/
|
|
72
|
+
HistoryFetchFailed = 104011
|
|
67
73
|
}
|
|
68
74
|
/**
|
|
69
75
|
* Returns true if the {@link Ably.ErrorInfo} code matches the provided ErrorCode value.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
export type { ActiveRun, AgentSession, AgentSessionOptions, BranchSelection, CancelRequest, ClientSession, ClientSessionOptions, ConversationNode,
|
|
1
|
+
export type { ActiveRun, AgentSession, AgentSessionOptions, BranchSelection, CancelRequest, ClientSession, ClientSessionOptions, ConversationNode, InputNode, InvocationData, LoadConversationOptions, MessageNode, OutputEvent, PipeOptions, Run, RunEndParams, RunEndReason, RunInfo, RunLifecycleEvent, RunNode, RunNodeState, RunRuntime, RunView, SendOptions, StreamResult, Tree, View, } from './core/transport/index.js';
|
|
2
2
|
export { buildTransportHeaders, createAgentSession, createClientSession, Invocation } from './core/transport/index.js';
|
|
3
|
-
export
|
|
4
|
-
export {
|
|
3
|
+
export { OBJECT_MODES } from './core/channel-options.js';
|
|
4
|
+
export type { BatchAssembleContext, BatchMessageHeaders, BatchSpec, ChannelWriter, Codec, CodecEvent, CodecInputEvent, CodecMessage, CodecOutputEvent, CodecReducer, DataCodec, DecodedMessage, Decoder, DecoderCore, DecoderCoreHooks, DecoderCoreOptions, DefineCodecConfig, DefinedCodec, Encoder, EncoderCore, EncoderCoreOptions, EncoderOptions, EscapeHatchCore, Extras, FieldFor, HeaderBuilder, HeaderField, InputBuilder, InputDescriptor, InputEventSpec, LifecycleDiscreteContext, LifecyclePolicy, LifecycleTracker, MessagePayload, OutputBuilder, OutputDecodeContext, OutputDescriptor, OutputEncodeHatchContext, OutputEventSpec, OutputStreamEndContext, OutputStreamSpec, PartBuilder, PartSpec, PhaseConfig, Reducer, ReducerMeta, Regenerate, StreamPayload, StreamTrackerState, ToolApprovalResponse, ToolResult, ToolResultError, UserMessage, WellKnownInputFactories, WriteOptions, } from './core/codec/index.js';
|
|
5
|
+
export { boolField, createDecoderCore, createEncoderCore, createLifecycleTracker, defineCodec, enumField, jsonField, strField, } from './core/codec/index.js';
|
|
5
6
|
export { EVENT_CANCEL, EVENT_RUN_END, EVENT_RUN_START, HEADER_CODEC_MESSAGE_ID, HEADER_ERROR_CODE, HEADER_ERROR_MESSAGE, HEADER_FORK_OF, HEADER_INPUT_CLIENT_ID, HEADER_MSG_REGENERATE, HEADER_PARENT, HEADER_ROLE, HEADER_RUN_CLIENT_ID, HEADER_RUN_ID, HEADER_RUN_REASON, HEADER_STATUS, HEADER_STREAM, HEADER_STREAM_ID, } from './constants.js';
|
|
6
|
-
export type {
|
|
7
|
-
export { getCodecHeaders, getTransportHeaders,
|
|
7
|
+
export type { Stripped } from './utils.js';
|
|
8
|
+
export { getCodecHeaders, getTransportHeaders, mergeHeaders, stripUndefined } from './utils.js';
|
|
8
9
|
export { EventEmitter } from './event-emitter.js';
|
|
9
10
|
export { ErrorCode, errorInfoIs } from './errors.js';
|
|
10
11
|
export type { LogContext, Logger, LoggerOptions, LogHandler } from './logger.js';
|