@ably/ai-transport 0.0.1 → 0.1.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 +54 -47
- package/dist/ably-ai-transport.js +1006 -539
- 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 +4 -0
- package/dist/core/codec/types.d.ts +19 -2
- package/dist/core/transport/decode-history.d.ts +8 -6
- package/dist/core/transport/headers.d.ts +4 -2
- package/dist/core/transport/index.d.ts +4 -1
- package/dist/core/transport/pipe-stream.d.ts +3 -2
- package/dist/core/transport/stream-router.d.ts +11 -1
- package/dist/core/transport/tree.d.ts +171 -0
- package/dist/core/transport/turn-manager.d.ts +4 -1
- package/dist/core/transport/types.d.ts +270 -119
- package/dist/core/transport/view.d.ts +166 -0
- package/dist/errors.d.ts +19 -2
- package/dist/index.d.ts +3 -1
- package/dist/react/ably-ai-transport-react.js +1019 -486
- 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/transport-context.d.ts +31 -0
- package/dist/react/contexts/transport-provider.d.ts +49 -0
- package/dist/react/create-transport-hooks.d.ts +124 -0
- package/dist/react/index.d.ts +14 -8
- package/dist/react/use-ably-messages.d.ts +14 -8
- package/dist/react/use-active-turns.d.ts +7 -3
- package/dist/react/use-client-transport.d.ts +78 -5
- package/dist/react/use-create-view.d.ts +22 -0
- package/dist/react/use-tree.d.ts +20 -0
- package/dist/react/use-view.d.ts +79 -0
- package/dist/vercel/ably-ai-transport-vercel.js +1478 -842
- 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/tool-transitions.d.ts +50 -0
- package/dist/vercel/index.d.ts +3 -0
- package/dist/vercel/react/ably-ai-transport-vercel-react.js +9099 -852
- package/dist/vercel/react/ably-ai-transport-vercel-react.js.map +1 -1
- package/dist/vercel/react/ably-ai-transport-vercel-react.umd.cjs +45 -1
- package/dist/vercel/react/ably-ai-transport-vercel-react.umd.cjs.map +1 -1
- package/dist/vercel/react/contexts/chat-transport-context.d.ts +32 -0
- package/dist/vercel/react/contexts/chat-transport-provider.d.ts +84 -0
- package/dist/vercel/react/index.d.ts +5 -0
- package/dist/vercel/react/use-chat-transport.d.ts +61 -20
- package/dist/vercel/react/use-message-sync.d.ts +41 -9
- package/dist/vercel/react/use-staged-add-tool-approval-response.d.ts +30 -0
- package/dist/vercel/tool-approvals.d.ts +124 -0
- package/dist/vercel/tool-events.d.ts +26 -0
- package/dist/vercel/transport/chat-transport.d.ts +33 -11
- package/dist/vercel/transport/index.d.ts +5 -2
- package/package.json +23 -17
- package/src/constants.ts +6 -0
- package/src/core/codec/encoder.ts +10 -1
- package/src/core/codec/types.ts +19 -3
- package/src/core/transport/client-transport.ts +382 -364
- package/src/core/transport/decode-history.ts +229 -81
- package/src/core/transport/headers.ts +6 -2
- package/src/core/transport/index.ts +13 -5
- package/src/core/transport/pipe-stream.ts +8 -5
- package/src/core/transport/server-transport.ts +212 -58
- package/src/core/transport/stream-router.ts +21 -3
- package/src/core/transport/{conversation-tree.ts → tree.ts} +192 -77
- package/src/core/transport/turn-manager.ts +28 -10
- package/src/core/transport/types.ts +318 -139
- package/src/core/transport/view.ts +840 -0
- package/src/errors.ts +21 -1
- package/src/index.ts +10 -5
- package/src/react/contexts/transport-context.ts +37 -0
- package/src/react/contexts/transport-provider.tsx +164 -0
- package/src/react/create-transport-hooks.ts +144 -0
- package/src/react/index.ts +15 -8
- package/src/react/use-ably-messages.ts +34 -16
- package/src/react/use-active-turns.ts +28 -17
- package/src/react/use-client-transport.ts +184 -24
- package/src/react/use-create-view.ts +68 -0
- package/src/react/use-tree.ts +53 -0
- package/src/react/use-view.ts +233 -0
- package/src/react/vite.config.ts +4 -1
- package/src/vercel/codec/accumulator.ts +64 -79
- package/src/vercel/codec/decoder.ts +11 -8
- package/src/vercel/codec/encoder.ts +68 -54
- package/src/vercel/codec/index.ts +0 -2
- package/src/vercel/codec/tool-transitions.ts +122 -0
- package/src/vercel/index.ts +17 -0
- package/src/vercel/react/contexts/chat-transport-context.ts +40 -0
- package/src/vercel/react/contexts/chat-transport-provider.tsx +122 -0
- package/src/vercel/react/index.ts +14 -0
- package/src/vercel/react/use-chat-transport.ts +164 -42
- package/src/vercel/react/use-message-sync.ts +77 -19
- package/src/vercel/react/use-staged-add-tool-approval-response.ts +87 -0
- package/src/vercel/react/vite.config.ts +4 -2
- package/src/vercel/tool-approvals.ts +380 -0
- package/src/vercel/tool-events.ts +53 -0
- package/src/vercel/transport/chat-transport.ts +225 -79
- package/src/vercel/transport/index.ts +14 -3
- package/dist/core/transport/conversation-tree.d.ts +0 -9
- package/dist/react/use-conversation-tree.d.ts +0 -20
- package/dist/react/use-edit.d.ts +0 -7
- package/dist/react/use-history.d.ts +0 -19
- package/dist/react/use-messages.d.ts +0 -7
- package/dist/react/use-regenerate.d.ts +0 -7
- package/dist/react/use-send.d.ts +0 -7
- package/src/react/use-conversation-tree.ts +0 -71
- package/src/react/use-edit.ts +0 -24
- package/src/react/use-history.ts +0 -111
- package/src/react/use-messages.ts +0 -32
- package/src/react/use-regenerate.ts +0 -24
- package/src/react/use-send.ts +0 -25
package/src/react/use-history.ts
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useHistory — history pagination handle for a ClientTransport.
|
|
3
|
-
*
|
|
4
|
-
* Returns a `HistoryHandle` with `load()`, `next()`, `hasNext`, and
|
|
5
|
-
* `loading` — mirroring the transport's `history()` and
|
|
6
|
-
* `PaginatedMessages` API.
|
|
7
|
-
*
|
|
8
|
-
* The transport's `history()` is branch-aware: `limit` means "keep loading
|
|
9
|
-
* until N new messages appear on the selected branch." Messages on
|
|
10
|
-
* unselected branches are loaded into the tree but not counted toward the
|
|
11
|
-
* limit. The returned `items` contain only the newly visible messages.
|
|
12
|
-
*
|
|
13
|
-
* When `options` are provided, auto-loads the first page on mount
|
|
14
|
-
* (SWR-style: options present = enabled). When omitted or null,
|
|
15
|
-
* no auto-load — call `load()` manually.
|
|
16
|
-
*
|
|
17
|
-
* Usage:
|
|
18
|
-
* ```tsx
|
|
19
|
-
* // Auto-load on mount
|
|
20
|
-
* const history = useHistory(transport, { limit: 30 });
|
|
21
|
-
*
|
|
22
|
-
* // Manual load (e.g. on button press)
|
|
23
|
-
* const history = useHistory(transport);
|
|
24
|
-
* // ...later: await history.load({ limit: 30 });
|
|
25
|
-
*
|
|
26
|
-
* // Scroll-back
|
|
27
|
-
* if (history.hasNext) await history.next();
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
32
|
-
|
|
33
|
-
import type { ClientTransport, LoadHistoryOptions, PaginatedMessages } from '../core/transport/types.js';
|
|
34
|
-
|
|
35
|
-
/** Handle for paginated history loading. */
|
|
36
|
-
export interface HistoryHandle {
|
|
37
|
-
/** Are there older pages available? False until `load()` has been called. */
|
|
38
|
-
hasNext: boolean;
|
|
39
|
-
/** Is a page being fetched? */
|
|
40
|
-
loading: boolean;
|
|
41
|
-
/** Load the first page (or re-load with different options). Inserts into the conversation tree. */
|
|
42
|
-
load: (options?: LoadHistoryOptions) => Promise<void>;
|
|
43
|
-
/** Fetch the next (older) page. No-op if loading or no more pages. Inserts into the conversation tree. */
|
|
44
|
-
next: () => Promise<void>;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Paginated history handle for a client transport.
|
|
49
|
-
* @param transport - The client transport to load history from, or null/undefined if not yet available.
|
|
50
|
-
* @param options - When provided, auto-loads the first page on mount. Omit or pass null for manual loading.
|
|
51
|
-
* @returns A {@link HistoryHandle} for loading and paginating through history.
|
|
52
|
-
*/
|
|
53
|
-
export const useHistory = <TEvent, TMessage>(
|
|
54
|
-
transport: ClientTransport<TEvent, TMessage> | null | undefined,
|
|
55
|
-
options?: LoadHistoryOptions | null,
|
|
56
|
-
): HistoryHandle => {
|
|
57
|
-
const [hasNext, setHasNext] = useState(false);
|
|
58
|
-
const [loading, setLoading] = useState(false);
|
|
59
|
-
const loadingRef = useRef(false);
|
|
60
|
-
const pageRef = useRef<PaginatedMessages<TMessage> | null>(null);
|
|
61
|
-
const transportRef = useRef(transport);
|
|
62
|
-
transportRef.current = transport;
|
|
63
|
-
|
|
64
|
-
const load = useCallback(async (loadOptions?: LoadHistoryOptions) => {
|
|
65
|
-
if (!transportRef.current || loadingRef.current) return;
|
|
66
|
-
loadingRef.current = true;
|
|
67
|
-
setLoading(true);
|
|
68
|
-
try {
|
|
69
|
-
const page = await transportRef.current.history(loadOptions);
|
|
70
|
-
pageRef.current = page;
|
|
71
|
-
setHasNext(page.hasNext());
|
|
72
|
-
} finally {
|
|
73
|
-
loadingRef.current = false;
|
|
74
|
-
setLoading(false);
|
|
75
|
-
}
|
|
76
|
-
}, []);
|
|
77
|
-
|
|
78
|
-
const next = useCallback(async () => {
|
|
79
|
-
const page = pageRef.current;
|
|
80
|
-
if (!page || !page.hasNext() || loadingRef.current || !transportRef.current) return;
|
|
81
|
-
|
|
82
|
-
loadingRef.current = true;
|
|
83
|
-
setLoading(true);
|
|
84
|
-
try {
|
|
85
|
-
const older = await page.next();
|
|
86
|
-
if (older) {
|
|
87
|
-
pageRef.current = older;
|
|
88
|
-
setHasNext(older.hasNext());
|
|
89
|
-
} else {
|
|
90
|
-
setHasNext(false);
|
|
91
|
-
}
|
|
92
|
-
} finally {
|
|
93
|
-
loadingRef.current = false;
|
|
94
|
-
setLoading(false);
|
|
95
|
-
}
|
|
96
|
-
}, []);
|
|
97
|
-
|
|
98
|
-
// Auto-load first page on mount when options are provided (SWR-style).
|
|
99
|
-
const autoLoad = options !== undefined && options !== null;
|
|
100
|
-
const autoLoadedRef = useRef(false);
|
|
101
|
-
const optionsRef = useRef(options);
|
|
102
|
-
optionsRef.current = options;
|
|
103
|
-
|
|
104
|
-
useEffect(() => {
|
|
105
|
-
if (!autoLoad || autoLoadedRef.current || !transportRef.current) return;
|
|
106
|
-
autoLoadedRef.current = true;
|
|
107
|
-
void load(optionsRef.current ?? undefined);
|
|
108
|
-
}, [autoLoad, load]);
|
|
109
|
-
|
|
110
|
-
return { hasNext, loading, load, next };
|
|
111
|
-
};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useMessages — reactive message list from a ClientTransport.
|
|
3
|
-
*
|
|
4
|
-
* Subscribes to the transport's "message" notification and returns
|
|
5
|
-
* the current message list as React state. Replaces the manual
|
|
6
|
-
* useState + useEffect + on("message") + getMessages() pattern.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { useEffect, useState } from 'react';
|
|
10
|
-
|
|
11
|
-
import type { ClientTransport } from '../core/transport/types.js';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Subscribe to transport message updates and return the current message list.
|
|
15
|
-
* @param transport - The client transport to observe.
|
|
16
|
-
* @returns The current list of decoded messages.
|
|
17
|
-
*/
|
|
18
|
-
export const useMessages = <TEvent, TMessage>(transport: ClientTransport<TEvent, TMessage>): TMessage[] => {
|
|
19
|
-
const [messages, setMessages] = useState<TMessage[]>(() => transport.getMessages());
|
|
20
|
-
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
// Sync initial state in case the transport already has messages
|
|
23
|
-
setMessages(transport.getMessages());
|
|
24
|
-
|
|
25
|
-
const unsub = transport.on('message', () => {
|
|
26
|
-
setMessages(transport.getMessages());
|
|
27
|
-
});
|
|
28
|
-
return unsub;
|
|
29
|
-
}, [transport]);
|
|
30
|
-
|
|
31
|
-
return messages;
|
|
32
|
-
};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useRegenerate — stable callback for regenerating an assistant message.
|
|
3
|
-
*
|
|
4
|
-
* Delegates to `transport.regenerate()`, which automatically computes
|
|
5
|
-
* `forkOf`, `parent`, and truncated history from the conversation tree.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { useCallback } from 'react';
|
|
9
|
-
|
|
10
|
-
import type { ActiveTurn, ClientTransport, SendOptions } from '../core/transport/types.js';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Return a stable `regenerate` callback bound to the given transport.
|
|
14
|
-
* @param transport - The client transport to regenerate through.
|
|
15
|
-
* @returns A function that regenerates an assistant message and returns an {@link ActiveTurn} handle.
|
|
16
|
-
*/
|
|
17
|
-
export const useRegenerate = <TEvent, TMessage>(
|
|
18
|
-
transport: ClientTransport<TEvent, TMessage>,
|
|
19
|
-
): ((messageId: string, options?: SendOptions) => Promise<ActiveTurn<TEvent>>) =>
|
|
20
|
-
useCallback(
|
|
21
|
-
async (messageId: string, options?: SendOptions): Promise<ActiveTurn<TEvent>> =>
|
|
22
|
-
transport.regenerate(messageId, options),
|
|
23
|
-
[transport],
|
|
24
|
-
);
|
package/src/react/use-send.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useSend — stable callback for sending messages through a ClientTransport.
|
|
3
|
-
*
|
|
4
|
-
* Returns a `send` function that sends one or more messages in a single
|
|
5
|
-
* turn via `transport.send()`. Callers construct the domain messages
|
|
6
|
-
* themselves; the hook provides a stable reference suitable for React deps.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { useCallback } from 'react';
|
|
10
|
-
|
|
11
|
-
import type { ActiveTurn, ClientTransport, SendOptions } from '../core/transport/types.js';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Return a stable `send` callback bound to the given transport.
|
|
15
|
-
* @param transport - The client transport to send through.
|
|
16
|
-
* @returns A function that sends messages and returns an {@link ActiveTurn} handle.
|
|
17
|
-
*/
|
|
18
|
-
export const useSend = <TEvent, TMessage>(
|
|
19
|
-
transport: ClientTransport<TEvent, TMessage>,
|
|
20
|
-
): ((messages: TMessage[], options?: SendOptions) => Promise<ActiveTurn<TEvent>>) =>
|
|
21
|
-
useCallback(
|
|
22
|
-
async (messages: TMessage[], options?: SendOptions): Promise<ActiveTurn<TEvent>> =>
|
|
23
|
-
transport.send(messages, options),
|
|
24
|
-
[transport],
|
|
25
|
-
);
|