@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
|
@@ -20,7 +20,7 @@ export interface ClientSessionSlot {
|
|
|
20
20
|
* `nearest` is the slot from the innermost enclosing {@link ClientSessionProvider}.
|
|
21
21
|
* `providers` is the full registry of all enclosing providers, keyed by channelName.
|
|
22
22
|
*/
|
|
23
|
-
|
|
23
|
+
interface ClientSessionContextValue {
|
|
24
24
|
/** The innermost {@link ClientSessionProvider}'s slot. `undefined` when no provider is present. */
|
|
25
25
|
nearest: ClientSessionSlot | undefined;
|
|
26
26
|
/** All registered session slots from enclosing providers, keyed by channelName. */
|
|
@@ -34,3 +34,4 @@ export interface ClientSessionContextValue {
|
|
|
34
34
|
* read by {@link useClientSession} and internal hooks.
|
|
35
35
|
*/
|
|
36
36
|
export declare const ClientSessionContext: import('react').Context<ClientSessionContextValue>;
|
|
37
|
+
export {};
|
|
@@ -46,6 +46,9 @@ export interface ClientSessionProviderProps<TInput extends CodecInputEvent, TOut
|
|
|
46
46
|
* const { session: main } = useClientSession({ channelName: 'ai:main' });
|
|
47
47
|
* const { session: aux } = useClientSession({ channelName: 'ai:aux' });
|
|
48
48
|
* ```
|
|
49
|
+
* `channelModes` must stay constant for the provider's lifetime: the session is
|
|
50
|
+
* only recreated when `channelName` changes, and removing the modes after mount
|
|
51
|
+
* silently reverts the channel's mode set without a reattach.
|
|
49
52
|
* @param props - Provider configuration including `channelName`, `codec`, and all other {@link ClientSessionOptions} except `client`.
|
|
50
53
|
* @param props.children - Descendant components that consume the session via {@link useClientSession}.
|
|
51
54
|
* @returns A React element wrapping children with ClientSessionContext.
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
export { OBJECT_MODES } from '../core/channel-options.js';
|
|
1
2
|
export type { CodecMessage } from '../core/codec/types.js';
|
|
2
|
-
export type { ActiveRun, BranchSelection, ClientSession, ConversationNode,
|
|
3
|
+
export type { ActiveRun, BranchSelection, ClientSession, ConversationNode, InputNode, MessageNode, RunInfo, RunNode, RunNodeState, SendOptions, } from '../core/transport/types.js';
|
|
3
4
|
export type { ClientSessionSlot } from './contexts/client-session-context.js';
|
|
4
5
|
export type { ClientSessionProviderProps } from './contexts/client-session-provider.js';
|
|
5
6
|
export { ClientSessionProvider } from './contexts/client-session-provider.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CodecInputEvent, CodecOutputEvent } from '../../core/codec/types.js';
|
|
2
|
+
import { ClientSession } from '../../core/transport/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create a throwing stub {@link ClientSession}. Held safely in state before a
|
|
5
|
+
* provider resolves; any access throws {@link Ably.ErrorInfo}.
|
|
6
|
+
* @returns A stub session whose every member throws.
|
|
7
|
+
*/
|
|
8
|
+
export declare const makeSkippedClientSession: <TInput extends CodecInputEvent, TOutput extends CodecOutputEvent, TProjection, TMessage>() => ClientSession<TInput, TOutput, TProjection, TMessage>;
|
package/dist/react/use-view.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ import * as Ably from 'ably';
|
|
|
15
15
|
export interface UseViewOptions<TInput extends CodecInputEvent, TOutput extends CodecOutputEvent, TProjection, TMessage> extends BaseSessionOption<TInput, TOutput, TProjection, TMessage> {
|
|
16
16
|
/** A specific {@link View} to subscribe to directly. Takes priority over `session`. */
|
|
17
17
|
view?: View<TInput, TMessage> | null;
|
|
18
|
-
/**
|
|
18
|
+
/** Number of older codecMessages to reveal per page (exactly `limit`, fewer only at the end of history). When provided, auto-loads the first page on mount. */
|
|
19
19
|
limit?: number;
|
|
20
20
|
/** When `true`, skip all subscriptions and return an empty handle immediately. */
|
|
21
21
|
skip?: boolean;
|
|
@@ -34,7 +34,7 @@ export interface ViewHandle<TInput extends CodecInputEvent, TMessage> {
|
|
|
34
34
|
* identity the domain `message` may carry. See {@link View.getMessages}.
|
|
35
35
|
*/
|
|
36
36
|
messages: CodecMessage<TMessage>[];
|
|
37
|
-
/** Whether there are older
|
|
37
|
+
/** Whether there are older messages that can be revealed via `loadOlder`. */
|
|
38
38
|
hasOlder: boolean;
|
|
39
39
|
/** Whether a page load is currently in progress. */
|
|
40
40
|
loading: boolean;
|
|
@@ -103,7 +103,7 @@ export interface ViewHandle<TInput extends CodecInputEvent, TMessage> {
|
|
|
103
103
|
* @param props - Options for selecting the view source and configuring auto-load.
|
|
104
104
|
* @param props.session - Client session whose default view to subscribe to; defaults to the nearest provider.
|
|
105
105
|
* @param props.view - A specific {@link View} to subscribe to directly. Takes priority over `session`.
|
|
106
|
-
* @param props.limit -
|
|
106
|
+
* @param props.limit - Number of older codecMessages to reveal per page (exactly `limit`, fewer only at end of history); when provided, auto-loads the first page on mount.
|
|
107
107
|
* @param props.skip - When `true`, skip all subscriptions and return an empty handle.
|
|
108
108
|
* @returns A {@link ViewHandle} with messages, pagination state, navigation, write operations, and loadOlder.
|
|
109
109
|
*/
|
package/dist/utils.d.ts
CHANGED
|
@@ -5,7 +5,22 @@
|
|
|
5
5
|
* layers. They live at the top level to avoid either layer depending on
|
|
6
6
|
* the other.
|
|
7
7
|
*/
|
|
8
|
-
import
|
|
8
|
+
import * as Ably from 'ably';
|
|
9
|
+
/**
|
|
10
|
+
* Extract a human-readable message from an unknown thrown value.
|
|
11
|
+
* @param error - The thrown value.
|
|
12
|
+
* @returns The error's `message` when it is an `Error`, otherwise its string form.
|
|
13
|
+
*/
|
|
14
|
+
export declare const errorMessage: (error: unknown) => string;
|
|
15
|
+
/**
|
|
16
|
+
* Narrow an unknown thrown value to an `Ably.ErrorInfo` for use as a wrapping
|
|
17
|
+
* `cause`, returning `undefined` when it is not one. Pass the result as the
|
|
18
|
+
* fourth argument to the `Ably.ErrorInfo` constructor to preserve the error
|
|
19
|
+
* chain without asserting a type the value may not have.
|
|
20
|
+
* @param error - The thrown value.
|
|
21
|
+
* @returns The value when it is an `Ably.ErrorInfo`, otherwise `undefined`.
|
|
22
|
+
*/
|
|
23
|
+
export declare const errorCause: (error: unknown) => Ably.ErrorInfo | undefined;
|
|
9
24
|
/**
|
|
10
25
|
* Extract the transport-tier headers (`extras.ai.transport`) from an Ably
|
|
11
26
|
* InboundMessage. These are the generic transport headers (run/stream/identity/
|
|
@@ -29,13 +44,13 @@ export declare const getCodecHeaders: (message: Ably.InboundMessage) => Record<s
|
|
|
29
44
|
*/
|
|
30
45
|
export declare const parseJson: (value: string | undefined) => unknown;
|
|
31
46
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* @param
|
|
36
|
-
* @
|
|
47
|
+
* Parse a string as JSON, falling back to the raw string when it isn't valid
|
|
48
|
+
* JSON. An empty string yields `undefined`. Used for accumulated stream text
|
|
49
|
+
* whose payload may be JSON or a plain string.
|
|
50
|
+
* @param value - The string to parse.
|
|
51
|
+
* @returns The parsed value, the raw string on parse failure, or undefined if empty.
|
|
37
52
|
*/
|
|
38
|
-
export declare const
|
|
53
|
+
export declare const parseJsonOrString: (value: string) => unknown;
|
|
39
54
|
/**
|
|
40
55
|
* Merge two header records into a new object. Later values override earlier ones.
|
|
41
56
|
* Undefined inputs are treated as empty.
|
|
@@ -64,13 +79,6 @@ interface HasSerial {
|
|
|
64
79
|
* @returns Negative if `a` precedes `b`, positive if `a` follows `b`, 0 if equal.
|
|
65
80
|
*/
|
|
66
81
|
export declare const compareBySerial: (a: HasSerial, b: HasSerial) => number;
|
|
67
|
-
/**
|
|
68
|
-
* Read a domain header value from a codec-tier headers record.
|
|
69
|
-
* @param headers - The codec headers record to read from.
|
|
70
|
-
* @param key - The domain key (e.g. `'toolCallId'`).
|
|
71
|
-
* @returns The header value, or undefined if absent.
|
|
72
|
-
*/
|
|
73
|
-
export declare const getDomainHeader: (headers: Record<string, string>, key: string) => string | undefined;
|
|
74
82
|
/**
|
|
75
83
|
* Mapped type that converts properties whose type includes `undefined`
|
|
76
84
|
* into optional properties with `undefined` excluded from the value.
|
|
@@ -93,44 +101,4 @@ export type Stripped<T> = {
|
|
|
93
101
|
* @returns A shallow copy with undefined-valued keys removed.
|
|
94
102
|
*/
|
|
95
103
|
export declare const stripUndefined: <T extends Record<string, unknown>>(obj: T) => Stripped<T>;
|
|
96
|
-
/**
|
|
97
|
-
* Typed accessor wrapper around a headers record for reading domain headers.
|
|
98
|
-
* Reduces repetitive `getDomainHeader` + `parseBool` / `parseJson` chains.
|
|
99
|
-
*/
|
|
100
|
-
export interface DomainHeaderReader {
|
|
101
|
-
/** Read a domain header as a string, or undefined if absent. */
|
|
102
|
-
str(key: string): string | undefined;
|
|
103
|
-
/** Read a domain header as a string, falling back to a default if absent. */
|
|
104
|
-
strOr(key: string, fallback: string): string;
|
|
105
|
-
/** Read a domain header as a boolean: `true` only for the exact string "true", `false` for any other present value, or undefined if absent. */
|
|
106
|
-
bool(key: string): boolean | undefined;
|
|
107
|
-
/** Read a domain header as parsed JSON, or undefined if absent or invalid. */
|
|
108
|
-
json(key: string): unknown;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Create a {@link DomainHeaderReader} over a headers record.
|
|
112
|
-
* @param headers - The raw headers record to read domain headers from.
|
|
113
|
-
* @returns A typed accessor for domain header values.
|
|
114
|
-
*/
|
|
115
|
-
export declare const headerReader: (headers: Record<string, string>) => DomainHeaderReader;
|
|
116
|
-
/**
|
|
117
|
-
* Fluent builder for constructing domain header records with typed setters.
|
|
118
|
-
* Mirrors {@link DomainHeaderReader} with the same method names for symmetry.
|
|
119
|
-
* Undefined values are silently skipped on all setters.
|
|
120
|
-
*/
|
|
121
|
-
export interface DomainHeaderWriter {
|
|
122
|
-
/** Set a string domain header. Skips if value is undefined. */
|
|
123
|
-
str(key: string, value: string | undefined): DomainHeaderWriter;
|
|
124
|
-
/** Set a boolean domain header (serialized as "true"/"false"). Skips if value is undefined. */
|
|
125
|
-
bool(key: string, value: boolean | undefined): DomainHeaderWriter;
|
|
126
|
-
/** Set a JSON-serialized domain header. Skips if value is undefined or null. */
|
|
127
|
-
json(key: string, value: unknown): DomainHeaderWriter;
|
|
128
|
-
/** Return the accumulated headers record. */
|
|
129
|
-
build(): Record<string, string>;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Create a {@link DomainHeaderWriter} for building a codec-tier headers record.
|
|
133
|
-
* @returns A fluent builder that accumulates codec headers under their bare keys.
|
|
134
|
-
*/
|
|
135
|
-
export declare const headerWriter: () => DomainHeaderWriter;
|
|
136
104
|
export {};
|