@ably/ai-transport 0.1.0 → 0.2.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 +91 -100
- package/dist/ably-ai-transport.js +1553 -1238
- 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 +116 -42
- package/dist/core/agent.d.ts +29 -0
- package/dist/core/codec/decoder.d.ts +20 -23
- package/dist/core/codec/encoder.d.ts +11 -8
- package/dist/core/codec/index.d.ts +1 -2
- package/dist/core/codec/lifecycle-tracker.d.ts +10 -9
- package/dist/core/codec/types.d.ts +407 -115
- package/dist/core/transport/agent-session.d.ts +10 -0
- package/dist/core/transport/branch-chain.d.ts +43 -0
- package/dist/core/transport/client-session.d.ts +13 -0
- package/dist/core/transport/decode-fold.d.ts +47 -0
- package/dist/core/transport/headers.d.ts +96 -18
- package/dist/core/transport/index.d.ts +5 -6
- package/dist/core/transport/internal/bounded-map.d.ts +20 -0
- package/dist/core/transport/invocation.d.ts +74 -0
- package/dist/core/transport/load-conversation.d.ts +128 -0
- package/dist/core/transport/load-history.d.ts +39 -0
- package/dist/core/transport/pipe-stream.d.ts +9 -9
- package/dist/core/transport/run-manager.d.ts +78 -0
- package/dist/core/transport/tree.d.ts +373 -109
- package/dist/core/transport/types/agent.d.ts +353 -0
- package/dist/core/transport/types/client.d.ts +168 -0
- package/dist/core/transport/types/shared.d.ts +24 -0
- package/dist/core/transport/types/tree.d.ts +315 -0
- package/dist/core/transport/types/view.d.ts +222 -0
- package/dist/core/transport/types.d.ts +13 -553
- package/dist/core/transport/view.d.ts +272 -84
- package/dist/errors.d.ts +21 -10
- package/dist/index.d.ts +6 -8
- package/dist/logger.d.ts +12 -0
- package/dist/react/ably-ai-transport-react.js +976 -990
- 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 +36 -0
- package/dist/react/contexts/client-session-provider.d.ts +53 -0
- package/dist/react/create-session-hooks.d.ts +116 -0
- package/dist/react/index.d.ts +12 -12
- package/dist/react/internal/use-resolved-session.d.ts +36 -0
- package/dist/react/use-ably-messages.d.ts +17 -14
- package/dist/react/use-client-session.d.ts +81 -0
- package/dist/react/use-create-view.d.ts +14 -13
- package/dist/react/use-tree.d.ts +30 -15
- package/dist/react/use-view.d.ts +82 -51
- package/dist/utils.d.ts +32 -23
- package/dist/vercel/ably-ai-transport-vercel.js +2573 -2086
- 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/decoder.d.ts +5 -18
- package/dist/vercel/codec/encoder.d.ts +6 -36
- package/dist/vercel/codec/events.d.ts +51 -0
- package/dist/vercel/codec/index.d.ts +24 -12
- package/dist/vercel/codec/reducer.d.ts +144 -0
- package/dist/vercel/codec/tool-transitions.d.ts +2 -2
- package/dist/vercel/index.d.ts +4 -5
- package/dist/vercel/react/ably-ai-transport-vercel-react.js +3907 -3266
- package/dist/vercel/react/ably-ai-transport-vercel-react.js.map +1 -1
- package/dist/vercel/react/ably-ai-transport-vercel-react.umd.cjs +33 -8
- package/dist/vercel/react/ably-ai-transport-vercel-react.umd.cjs.map +1 -1
- package/dist/vercel/react/contexts/chat-transport-context.d.ts +7 -6
- package/dist/vercel/react/contexts/chat-transport-provider.d.ts +53 -41
- package/dist/vercel/react/index.d.ts +1 -2
- package/dist/vercel/react/use-chat-transport.d.ts +30 -26
- package/dist/vercel/react/use-message-sync.d.ts +17 -30
- package/dist/vercel/run-end-reason.d.ts +29 -0
- package/dist/vercel/transport/chat-transport.d.ts +43 -24
- package/dist/vercel/transport/index.d.ts +25 -21
- package/dist/vercel/transport/run-output-stream.d.ts +56 -0
- package/dist/version.d.ts +2 -0
- package/package.json +30 -23
- package/src/constants.ts +124 -51
- package/src/core/agent.ts +68 -0
- package/src/core/codec/decoder.ts +71 -98
- package/src/core/codec/encoder.ts +113 -65
- package/src/core/codec/index.ts +13 -6
- package/src/core/codec/lifecycle-tracker.ts +10 -9
- package/src/core/codec/types.ts +436 -120
- package/src/core/transport/agent-session.ts +1344 -0
- package/src/core/transport/branch-chain.ts +58 -0
- package/src/core/transport/client-session.ts +775 -0
- package/src/core/transport/decode-fold.ts +91 -0
- package/src/core/transport/headers.ts +181 -22
- package/src/core/transport/index.ts +25 -26
- package/src/core/transport/internal/bounded-map.ts +27 -0
- package/src/core/transport/invocation.ts +98 -0
- package/src/core/transport/load-conversation.ts +355 -0
- package/src/core/transport/load-history.ts +269 -0
- package/src/core/transport/pipe-stream.ts +54 -39
- package/src/core/transport/run-manager.ts +249 -0
- package/src/core/transport/tree.ts +926 -308
- package/src/core/transport/types/agent.ts +407 -0
- package/src/core/transport/types/client.ts +211 -0
- package/src/core/transport/types/shared.ts +27 -0
- package/src/core/transport/types/tree.ts +344 -0
- package/src/core/transport/types/view.ts +259 -0
- package/src/core/transport/types.ts +13 -706
- package/src/core/transport/view.ts +864 -433
- package/src/errors.ts +22 -9
- package/src/event-emitter.ts +3 -2
- package/src/index.ts +52 -41
- package/src/logger.ts +14 -1
- package/src/react/contexts/client-session-context.ts +41 -0
- package/src/react/contexts/client-session-provider.tsx +186 -0
- package/src/react/create-session-hooks.ts +141 -0
- package/src/react/index.ts +23 -13
- package/src/react/internal/use-resolved-session.ts +63 -0
- package/src/react/use-ably-messages.ts +32 -22
- package/src/react/use-client-session.ts +201 -0
- package/src/react/use-create-view.ts +33 -29
- package/src/react/use-tree.ts +61 -30
- package/src/react/use-view.ts +139 -97
- package/src/utils.ts +63 -45
- package/src/vercel/codec/decoder.ts +336 -258
- package/src/vercel/codec/encoder.ts +343 -205
- package/src/vercel/codec/events.ts +87 -0
- package/src/vercel/codec/index.ts +60 -13
- package/src/vercel/codec/reducer.ts +977 -0
- package/src/vercel/codec/tool-transitions.ts +2 -2
- package/src/vercel/index.ts +6 -19
- package/src/vercel/react/contexts/chat-transport-context.ts +7 -6
- package/src/vercel/react/contexts/chat-transport-provider.tsx +87 -59
- package/src/vercel/react/index.ts +3 -5
- package/src/vercel/react/use-chat-transport.ts +47 -49
- package/src/vercel/react/use-message-sync.ts +80 -39
- package/src/vercel/run-end-reason.ts +78 -0
- package/src/vercel/transport/chat-transport.ts +392 -98
- package/src/vercel/transport/index.ts +39 -38
- package/src/vercel/transport/run-output-stream.ts +170 -0
- package/src/version.ts +2 -0
- package/dist/core/transport/client-transport.d.ts +0 -10
- package/dist/core/transport/decode-history.d.ts +0 -43
- package/dist/core/transport/server-transport.d.ts +0 -7
- package/dist/core/transport/stream-router.d.ts +0 -29
- package/dist/core/transport/turn-manager.d.ts +0 -37
- package/dist/react/contexts/transport-context.d.ts +0 -31
- package/dist/react/contexts/transport-provider.d.ts +0 -49
- package/dist/react/create-transport-hooks.d.ts +0 -124
- package/dist/react/use-active-turns.d.ts +0 -12
- package/dist/react/use-client-transport.d.ts +0 -80
- package/dist/vercel/codec/accumulator.d.ts +0 -21
- package/dist/vercel/react/use-staged-add-tool-approval-response.d.ts +0 -30
- package/dist/vercel/tool-approvals.d.ts +0 -124
- package/dist/vercel/tool-events.d.ts +0 -26
- package/src/core/transport/client-transport.ts +0 -977
- package/src/core/transport/decode-history.ts +0 -485
- package/src/core/transport/server-transport.ts +0 -612
- package/src/core/transport/stream-router.ts +0 -136
- package/src/core/transport/turn-manager.ts +0 -165
- package/src/react/contexts/transport-context.ts +0 -37
- package/src/react/contexts/transport-provider.tsx +0 -164
- package/src/react/create-transport-hooks.ts +0 -144
- package/src/react/use-active-turns.ts +0 -72
- package/src/react/use-client-transport.ts +0 -197
- package/src/vercel/codec/accumulator.ts +0 -588
- package/src/vercel/react/use-staged-add-tool-approval-response.ts +0 -87
- package/src/vercel/tool-approvals.ts +0 -380
- package/src/vercel/tool-events.ts +0 -53
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel codec input/output unions.
|
|
3
|
+
*
|
|
4
|
+
* The codec splits cleanly along the protocol's `ai-input` / `ai-output`
|
|
5
|
+
* wire seam:
|
|
6
|
+
*
|
|
7
|
+
* - **`VercelOutput`** = `AI.UIMessageChunk` — the AI SDK's streamed-output
|
|
8
|
+
* domain model, published by the agent on `ai-output`.
|
|
9
|
+
* - **`VercelInput`** = a discriminated union of the SDK's well-known
|
|
10
|
+
* input shapes — published by the client on `ai-input`. The Vercel
|
|
11
|
+
* codec has no codec-local input variants today: every variant comes
|
|
12
|
+
* from `@ably/ai-transport`'s well-known set.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type * as AI from 'ai';
|
|
16
|
+
|
|
17
|
+
import type {
|
|
18
|
+
Regenerate,
|
|
19
|
+
ToolApprovalResponse,
|
|
20
|
+
ToolResult,
|
|
21
|
+
ToolResultError,
|
|
22
|
+
UserMessage,
|
|
23
|
+
} from '../../core/codec/types.js';
|
|
24
|
+
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Domain payloads
|
|
27
|
+
//
|
|
28
|
+
// The core well-known tool variants are domain-independent: the Vercel
|
|
29
|
+
// layer supplies the concrete payload shapes. Tool outputs are inherently
|
|
30
|
+
// tool-defined, so `output` stays `unknown` — but confined here, never in
|
|
31
|
+
// the core.
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
|
|
34
|
+
/** Vercel domain payload for a {@link ToolResult}. */
|
|
35
|
+
export interface VercelToolResultPayload {
|
|
36
|
+
/** The tool call this result corresponds to. */
|
|
37
|
+
toolCallId: string;
|
|
38
|
+
/** The tool's output value. Tool-defined shape. */
|
|
39
|
+
output: unknown;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Vercel domain payload for a {@link ToolResultError}. */
|
|
43
|
+
export interface VercelToolResultErrorPayload {
|
|
44
|
+
/** The tool call this error corresponds to. */
|
|
45
|
+
toolCallId: string;
|
|
46
|
+
/** Human-readable description of the failure. */
|
|
47
|
+
message: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Vercel domain payload for a {@link ToolApprovalResponse}. */
|
|
51
|
+
export interface VercelToolApprovalResponsePayload {
|
|
52
|
+
/** The tool call this approval responds to. */
|
|
53
|
+
toolCallId: string;
|
|
54
|
+
/** Whether the user approved the tool execution. */
|
|
55
|
+
approved: boolean;
|
|
56
|
+
/** Optional human-readable reason (typically used on denial). */
|
|
57
|
+
reason?: string;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Unions
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The Vercel codec's `TInput` — every record-shape a client publishes on
|
|
66
|
+
* the `ai-input` wire. Composed from the SDK's well-known input shapes,
|
|
67
|
+
* with the tool variants parameterized by the Vercel domain payloads above.
|
|
68
|
+
*/
|
|
69
|
+
export type VercelInput =
|
|
70
|
+
| UserMessage<AI.UIMessage>
|
|
71
|
+
| Regenerate
|
|
72
|
+
| ToolResult<VercelToolResultPayload>
|
|
73
|
+
| ToolResultError<VercelToolResultErrorPayload>
|
|
74
|
+
| ToolApprovalResponse<VercelToolApprovalResponsePayload>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The Vercel codec's `TOutput` — every record-shape the agent publishes
|
|
78
|
+
* on the `ai-output` wire. The Vercel codec passes the AI SDK's
|
|
79
|
+
* `UIMessageChunk` through unchanged.
|
|
80
|
+
*/
|
|
81
|
+
export type VercelOutput = AI.UIMessageChunk;
|
|
82
|
+
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// Projection re-export
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
|
|
87
|
+
export type { VercelProjection } from './reducer.js';
|
|
@@ -1,35 +1,82 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Vercel AI SDK codec —
|
|
3
|
-
*
|
|
2
|
+
* Vercel AI SDK codec — implements
|
|
3
|
+
* `Codec<VercelInput, VercelOutput, VercelProjection, UIMessage>`.
|
|
4
|
+
*
|
|
5
|
+
* The codec is the reducer (extends `Reducer<VercelInput | VercelOutput,
|
|
6
|
+
* VercelProjection>`) plus encoder/decoder factories and `getMessages`
|
|
7
|
+
* for Tree population.
|
|
4
8
|
*
|
|
5
9
|
* ```ts
|
|
6
10
|
* import { UIMessageCodec } from '@ably/ai-transport/vercel';
|
|
7
11
|
*
|
|
8
12
|
* const encoder = UIMessageCodec.createEncoder(writer, options);
|
|
9
13
|
* const decoder = UIMessageCodec.createDecoder();
|
|
10
|
-
* const
|
|
14
|
+
* const projection = UIMessageCodec.init();
|
|
11
15
|
* ```
|
|
12
16
|
*/
|
|
13
17
|
|
|
14
18
|
import type * as AI from 'ai';
|
|
15
19
|
|
|
16
20
|
import type { Codec } from '../../core/codec/types.js';
|
|
17
|
-
import { createAccumulator } from './accumulator.js';
|
|
18
21
|
import { createDecoder } from './decoder.js';
|
|
19
22
|
import { createEncoder } from './encoder.js';
|
|
23
|
+
import type {
|
|
24
|
+
VercelInput,
|
|
25
|
+
VercelOutput,
|
|
26
|
+
VercelToolApprovalResponsePayload,
|
|
27
|
+
VercelToolResultErrorPayload,
|
|
28
|
+
VercelToolResultPayload,
|
|
29
|
+
} from './events.js';
|
|
30
|
+
import { fold, getMessages, init, type VercelProjection } from './reducer.js';
|
|
20
31
|
|
|
21
32
|
/**
|
|
22
|
-
* Vercel AI SDK codec implementing
|
|
33
|
+
* Vercel AI SDK codec implementing
|
|
34
|
+
* `Codec<VercelInput, VercelOutput, VercelProjection, UIMessage>`.
|
|
23
35
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
36
|
+
* Folds `VercelInput`s and `VercelOutput`s into a `VercelProjection`
|
|
37
|
+
* carrying `UIMessage[]`. Encoder and decoder factories handle the wire
|
|
38
|
+
* mapping for both directions.
|
|
27
39
|
*/
|
|
28
|
-
|
|
40
|
+
const uiMessageCodecImpl = {
|
|
41
|
+
// Internal field - picked up by registerAgent via AdapterTagHolder cast. Spec: AIT-CT1a3, AIT-ST1a3.
|
|
42
|
+
adapterTag: 'vercel-ai-sdk-ui-message' as const,
|
|
43
|
+
init,
|
|
44
|
+
fold,
|
|
29
45
|
createEncoder,
|
|
30
46
|
createDecoder,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
47
|
+
getMessages,
|
|
48
|
+
createUserMessage: (message: AI.UIMessage): VercelInput => ({ kind: 'user-message', message }),
|
|
49
|
+
createRegenerate: (target: string, parent: string): VercelInput => ({
|
|
50
|
+
kind: 'regenerate',
|
|
51
|
+
target,
|
|
52
|
+
parent,
|
|
53
|
+
}),
|
|
54
|
+
createToolResult: (codecMessageId: string, payload: VercelToolResultPayload): VercelInput => ({
|
|
55
|
+
kind: 'tool-result',
|
|
56
|
+
codecMessageId,
|
|
57
|
+
payload,
|
|
58
|
+
}),
|
|
59
|
+
createToolResultError: (codecMessageId: string, payload: VercelToolResultErrorPayload): VercelInput => ({
|
|
60
|
+
kind: 'tool-result-error',
|
|
61
|
+
codecMessageId,
|
|
62
|
+
payload,
|
|
63
|
+
}),
|
|
64
|
+
createToolApprovalResponse: (codecMessageId: string, payload: VercelToolApprovalResponsePayload): VercelInput => ({
|
|
65
|
+
kind: 'tool-approval-response',
|
|
66
|
+
codecMessageId,
|
|
67
|
+
payload,
|
|
68
|
+
}),
|
|
35
69
|
};
|
|
70
|
+
|
|
71
|
+
// Validate Codec conformance via `satisfies` on the variable (no excess-property
|
|
72
|
+
// check, so the internal `adapterTag` is permitted) while keeping the concrete
|
|
73
|
+
// type so the codec-specific factories (createToolResult, etc.) stay callable.
|
|
74
|
+
export const UIMessageCodec = uiMessageCodecImpl satisfies Codec<
|
|
75
|
+
VercelInput,
|
|
76
|
+
VercelOutput,
|
|
77
|
+
VercelProjection,
|
|
78
|
+
AI.UIMessage
|
|
79
|
+
>;
|
|
80
|
+
|
|
81
|
+
export type { VercelInput, VercelOutput } from './events.js';
|
|
82
|
+
export { type VercelProjection } from './reducer.js';
|