@adonis-agora/agent 0.11.0 → 0.13.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/CHANGELOG.md +21 -0
- package/dist/providers/agent_provider.d.ts.map +1 -1
- package/dist/providers/agent_provider.js +12 -8
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/src/agent-loop.d.ts.map +1 -1
- package/dist/src/agent-loop.js +1 -0
- package/dist/src/agent-loop.js.map +1 -1
- package/dist/src/agent-service.d.ts +2 -1
- package/dist/src/agent-service.d.ts.map +1 -1
- package/dist/src/agent-service.js.map +1 -1
- package/dist/src/ai-sdk/ai-sdk-model.d.ts.map +1 -1
- package/dist/src/ai-sdk/ai-sdk-model.js +1 -3
- package/dist/src/ai-sdk/ai-sdk-model.js.map +1 -1
- package/dist/src/client/chat-client.d.ts +90 -0
- package/dist/src/client/chat-client.d.ts.map +1 -0
- package/dist/src/client/chat-client.js +204 -0
- package/dist/src/client/chat-client.js.map +1 -0
- package/dist/src/client/index.d.ts +3 -0
- package/dist/src/client/index.d.ts.map +1 -0
- package/dist/src/client/index.js +3 -0
- package/dist/src/client/index.js.map +1 -0
- package/dist/src/client/sse.d.ts +64 -0
- package/dist/src/client/sse.d.ts.map +1 -0
- package/dist/src/client/sse.js +129 -0
- package/dist/src/client/sse.js.map +1 -0
- package/dist/src/durable/agent-run-workflow.js +1 -1
- package/dist/src/durable/agent-run-workflow.js.map +1 -1
- package/dist/src/in-process-sink.d.ts +4 -4
- package/dist/src/in-process-sink.d.ts.map +1 -1
- package/dist/src/in-process-sink.js +4 -4
- package/dist/src/in-process-sink.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/react/index.d.ts +2 -0
- package/dist/src/react/index.d.ts.map +1 -0
- package/dist/src/react/index.js +2 -0
- package/dist/src/react/index.js.map +1 -0
- package/dist/src/react/use-agent-chat.d.ts +33 -0
- package/dist/src/react/use-agent-chat.d.ts.map +1 -0
- package/dist/src/react/use-agent-chat.js +103 -0
- package/dist/src/react/use-agent-chat.js.map +1 -0
- package/dist/src/redis-token-stream-sink.d.ts +5 -4
- package/dist/src/redis-token-stream-sink.d.ts.map +1 -1
- package/dist/src/redis-token-stream-sink.js +6 -11
- package/dist/src/redis-token-stream-sink.js.map +1 -1
- package/dist/src/runners/inline-agent-runner.js +1 -1
- package/dist/src/runners/inline-agent-runner.js.map +1 -1
- package/dist/src/spi/token-stream-sink.d.ts +15 -7
- package/dist/src/spi/token-stream-sink.d.ts.map +1 -1
- package/dist/src/spi/tool.d.ts +6 -0
- package/dist/src/spi/tool.d.ts.map +1 -1
- package/dist/src/sse.d.ts +8 -0
- package/dist/src/sse.d.ts.map +1 -0
- package/dist/src/sse.js +12 -0
- package/dist/src/sse.js.map +1 -0
- package/dist/src/testing/fake-model-provider.d.ts.map +1 -1
- package/dist/src/testing/fake-model-provider.js +1 -2
- package/dist/src/testing/fake-model-provider.js.map +1 -1
- package/dist/src/testing/in-memory-sink.d.ts +3 -3
- package/dist/src/testing/in-memory-sink.d.ts.map +1 -1
- package/dist/src/testing/in-memory-sink.js +3 -3
- package/dist/src/testing/in-memory-sink.js.map +1 -1
- package/package.json +17 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type AgentChatClientOptions, type AgentChatRequestBody, type ChatPart } from '../client/index.js';
|
|
2
|
+
/** A message in the chat transcript — the user's text, or the assistant's streamed parts. */
|
|
3
|
+
export interface AgentChatMessage {
|
|
4
|
+
id: string;
|
|
5
|
+
role: 'user' | 'assistant';
|
|
6
|
+
parts: ChatPart[];
|
|
7
|
+
/** `true` while this assistant message is still receiving stream frames. */
|
|
8
|
+
streaming?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export type AgentChatStatus = 'idle' | 'streaming' | 'error';
|
|
11
|
+
export interface UseAgentChatOptions extends AgentChatClientOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Builds the request body for a typed message. Defaults to `{ message }`. Override to attach
|
|
14
|
+
* `pageContext`, `agent`, `persona`, etc. The `threadId` is injected by the hook after the first
|
|
15
|
+
* turn, so a custom `buildBody` should NOT set it.
|
|
16
|
+
*/
|
|
17
|
+
buildBody?: (message: string) => AgentChatRequestBody;
|
|
18
|
+
}
|
|
19
|
+
export interface UseAgentChatResult {
|
|
20
|
+
messages: AgentChatMessage[];
|
|
21
|
+
status: AgentChatStatus;
|
|
22
|
+
error: string | null;
|
|
23
|
+
send: (text: string) => Promise<void>;
|
|
24
|
+
cancel: () => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* React binding over {@link createAgentChatClient}: owns the transcript, thread id, and streaming
|
|
28
|
+
* status, and drives one `AbortController` per turn. Reconnection (re-attach on a dropped stream) is
|
|
29
|
+
* handled by the client — the hook just renders whatever parts it reports. Pass client options
|
|
30
|
+
* (`basePath`, `fetch`, `getHeaders`, `resume`) straight through.
|
|
31
|
+
*/
|
|
32
|
+
export declare function useAgentChat(options?: UseAgentChatOptions): UseAgentChatResult;
|
|
33
|
+
//# sourceMappingURL=use-agent-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-agent-chat.d.ts","sourceRoot":"","sources":["../../../src/react/use-agent-chat.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EAEd,MAAM,oBAAoB,CAAC;AAE5B,6FAA6F;AAC7F,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC;AAE7D,MAAM,WAAW,mBAAoB,SAAQ,sBAAsB;IACjE;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,oBAAoB,CAAC;CACvD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAQD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,kBAAkB,CAgHlF"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { AgentChatDisconnectedError, createAgentChatClient, } from '../client/index.js';
|
|
3
|
+
function randomId() {
|
|
4
|
+
return (globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* React binding over {@link createAgentChatClient}: owns the transcript, thread id, and streaming
|
|
8
|
+
* status, and drives one `AbortController` per turn. Reconnection (re-attach on a dropped stream) is
|
|
9
|
+
* handled by the client — the hook just renders whatever parts it reports. Pass client options
|
|
10
|
+
* (`basePath`, `fetch`, `getHeaders`, `resume`) straight through.
|
|
11
|
+
*/
|
|
12
|
+
export function useAgentChat(options = {}) {
|
|
13
|
+
const { buildBody, ...clientOptions } = options;
|
|
14
|
+
const [messages, setMessages] = useState([]);
|
|
15
|
+
const [status, setStatus] = useState('idle');
|
|
16
|
+
const [error, setError] = useState(null);
|
|
17
|
+
const threadIdRef = useRef(undefined);
|
|
18
|
+
const abortRef = useRef(null);
|
|
19
|
+
const streamingIdRef = useRef(null);
|
|
20
|
+
// Keep one client instance stable across renders; the latest options ride on a ref so option
|
|
21
|
+
// changes take effect on the next send without re-creating the client.
|
|
22
|
+
const optionsRef = useRef(clientOptions);
|
|
23
|
+
optionsRef.current = clientOptions;
|
|
24
|
+
const buildBodyRef = useRef(buildBody);
|
|
25
|
+
buildBodyRef.current = buildBody;
|
|
26
|
+
const clientRef = useRef(createAgentChatClient({
|
|
27
|
+
...clientOptions,
|
|
28
|
+
getHeaders: () => optionsRef.current.getHeaders?.() ?? {},
|
|
29
|
+
}));
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
return () => {
|
|
32
|
+
abortRef.current?.abort();
|
|
33
|
+
};
|
|
34
|
+
}, []);
|
|
35
|
+
const send = useCallback(async (text) => {
|
|
36
|
+
const trimmed = text.trim();
|
|
37
|
+
if (!trimmed || streamingIdRef.current) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
setError(null);
|
|
41
|
+
const userMessage = {
|
|
42
|
+
id: randomId(),
|
|
43
|
+
role: 'user',
|
|
44
|
+
parts: [{ type: 'text', text: trimmed }],
|
|
45
|
+
};
|
|
46
|
+
const assistantId = randomId();
|
|
47
|
+
setMessages((prev) => [
|
|
48
|
+
...prev,
|
|
49
|
+
userMessage,
|
|
50
|
+
{ id: assistantId, role: 'assistant', parts: [], streaming: true },
|
|
51
|
+
]);
|
|
52
|
+
setStatus('streaming');
|
|
53
|
+
const controller = new AbortController();
|
|
54
|
+
abortRef.current = controller;
|
|
55
|
+
streamingIdRef.current = assistantId;
|
|
56
|
+
const applyParts = (parts) => setMessages((prev) => prev.map((message) => (message.id === assistantId ? { ...message, parts } : message)));
|
|
57
|
+
const stopStreaming = () => setMessages((prev) => prev.map((message) => message.id === assistantId ? { ...message, streaming: false } : message));
|
|
58
|
+
const body = {
|
|
59
|
+
...(buildBodyRef.current?.(trimmed) ?? { message: trimmed }),
|
|
60
|
+
...(threadIdRef.current ? { threadId: threadIdRef.current } : {}),
|
|
61
|
+
};
|
|
62
|
+
try {
|
|
63
|
+
await clientRef.current.send({
|
|
64
|
+
body,
|
|
65
|
+
signal: controller.signal,
|
|
66
|
+
onParts: applyParts,
|
|
67
|
+
onThreadId: (id) => {
|
|
68
|
+
threadIdRef.current = id;
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
stopStreaming();
|
|
72
|
+
setStatus('idle');
|
|
73
|
+
}
|
|
74
|
+
catch (caught) {
|
|
75
|
+
if (controller.signal.aborted) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
// Keep whatever streamed before the drop so the user doesn't lose a long answer.
|
|
79
|
+
if (caught instanceof AgentChatDisconnectedError && caught.parts.length > 0) {
|
|
80
|
+
applyParts(caught.parts);
|
|
81
|
+
}
|
|
82
|
+
stopStreaming();
|
|
83
|
+
setError(caught instanceof Error ? caught.message : 'Failed to reach the agent.');
|
|
84
|
+
setStatus('error');
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
abortRef.current = null;
|
|
88
|
+
streamingIdRef.current = null;
|
|
89
|
+
}
|
|
90
|
+
}, []);
|
|
91
|
+
const cancel = useCallback(() => {
|
|
92
|
+
abortRef.current?.abort();
|
|
93
|
+
abortRef.current = null;
|
|
94
|
+
const streamingId = streamingIdRef.current;
|
|
95
|
+
if (streamingId) {
|
|
96
|
+
setMessages((prev) => prev.map((message) => message.id === streamingId ? { ...message, streaming: false } : message));
|
|
97
|
+
streamingIdRef.current = null;
|
|
98
|
+
}
|
|
99
|
+
setStatus('idle');
|
|
100
|
+
}, []);
|
|
101
|
+
return { messages, status, error, send, cancel };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=use-agent-chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-agent-chat.js","sourceRoot":"","sources":["../../../src/react/use-agent-chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RedisStreamClient } from './redis-stream-client.js';
|
|
2
|
-
import type { SinkWriter, TokenStreamSink } from './spi/token-stream-sink.js';
|
|
2
|
+
import type { SinkWriter, StreamFrame, TokenStreamSink } from './spi/token-stream-sink.js';
|
|
3
3
|
export interface RedisTokenStreamSinkOptions {
|
|
4
4
|
/** Key/channel namespace. Defaults to `agent:stream`. Keys are `${keyPrefix}:${runId}:...`. */
|
|
5
5
|
keyPrefix?: string;
|
|
@@ -14,8 +14,9 @@ export interface RedisTokenStreamSinkOptions {
|
|
|
14
14
|
* (`${keyPrefix}:${runId}:state`), so an SSE handler on ANOTHER replica that subscribes after the run
|
|
15
15
|
* finished still sees the ending and closes the stream.
|
|
16
16
|
*
|
|
17
|
-
* The yielded
|
|
18
|
-
* pipes (`data: {"delta":...}`
|
|
17
|
+
* The yielded frames are identical (frame-for-frame) to the in-process sink's, so the SSE envelope
|
|
18
|
+
* the provider pipes (`data: {"delta":...}` for text, a component event for `{ t: 'component' }`)
|
|
19
|
+
* is unchanged — swapping this in is transparent to clients.
|
|
19
20
|
*
|
|
20
21
|
* The host supplies a {@link RedisStreamClient} adapter over its own Redis driver; `subscribe` needs a
|
|
21
22
|
* connection in subscriber mode (see the client docs). Wire it with `defineConfig({ sink:
|
|
@@ -29,7 +30,7 @@ export declare class RedisTokenStreamSink implements TokenStreamSink {
|
|
|
29
30
|
private stateKey;
|
|
30
31
|
private channel;
|
|
31
32
|
open(runId: string): SinkWriter;
|
|
32
|
-
subscribe(runId: string): AsyncIterable<
|
|
33
|
+
subscribe(runId: string): AsyncIterable<StreamFrame>;
|
|
33
34
|
close(runId: string): Promise<void>;
|
|
34
35
|
private hasEnded;
|
|
35
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-token-stream-sink.d.ts","sourceRoot":"","sources":["../../src/redis-token-stream-sink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"redis-token-stream-sink.d.ts","sourceRoot":"","sources":["../../src/redis-token-stream-sink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAK3F,MAAM,WAAW,2BAA2B;IAC1C,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,oBAAqB,YAAW,eAAe;IAIxD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAGhB,MAAM,EAAE,iBAAiB,EAC1C,OAAO,GAAE,2BAAgC;IAK3C,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAIf,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAaxB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC;IAgCrD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAI3B,QAAQ;CAIvB"}
|
|
@@ -10,8 +10,9 @@ const ENDED = 'ended';
|
|
|
10
10
|
* (`${keyPrefix}:${runId}:state`), so an SSE handler on ANOTHER replica that subscribes after the run
|
|
11
11
|
* finished still sees the ending and closes the stream.
|
|
12
12
|
*
|
|
13
|
-
* The yielded
|
|
14
|
-
* pipes (`data: {"delta":...}`
|
|
13
|
+
* The yielded frames are identical (frame-for-frame) to the in-process sink's, so the SSE envelope
|
|
14
|
+
* the provider pipes (`data: {"delta":...}` for text, a component event for `{ t: 'component' }`)
|
|
15
|
+
* is unchanged — swapping this in is transparent to clients.
|
|
15
16
|
*
|
|
16
17
|
* The host supplies a {@link RedisStreamClient} adapter over its own Redis driver; `subscribe` needs a
|
|
17
18
|
* connection in subscriber mode (see the client docs). Wire it with `defineConfig({ sink:
|
|
@@ -35,8 +36,8 @@ export class RedisTokenStreamSink {
|
|
|
35
36
|
}
|
|
36
37
|
open(runId) {
|
|
37
38
|
return {
|
|
38
|
-
write: async (
|
|
39
|
-
await this.client.rpush(this.chunksKey(runId),
|
|
39
|
+
write: async (frame) => {
|
|
40
|
+
await this.client.rpush(this.chunksKey(runId), JSON.stringify(frame));
|
|
40
41
|
await this.client.publish(this.channel(runId), 'chunk');
|
|
41
42
|
},
|
|
42
43
|
end: async () => {
|
|
@@ -65,7 +66,7 @@ export class RedisTokenStreamSink {
|
|
|
65
66
|
const chunks = await this.client.lrange(this.chunksKey(runId), index, -1);
|
|
66
67
|
for (const encoded of chunks) {
|
|
67
68
|
index += 1;
|
|
68
|
-
yield
|
|
69
|
+
yield JSON.parse(encoded);
|
|
69
70
|
}
|
|
70
71
|
if (await this.hasEnded(runId)) {
|
|
71
72
|
return;
|
|
@@ -85,10 +86,4 @@ export class RedisTokenStreamSink {
|
|
|
85
86
|
return raw === ENDED;
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
|
-
function toBase64(chunk) {
|
|
89
|
-
return Buffer.from(chunk).toString('base64');
|
|
90
|
-
}
|
|
91
|
-
function fromBase64(encoded) {
|
|
92
|
-
return new Uint8Array(Buffer.from(encoded, 'base64'));
|
|
93
|
-
}
|
|
94
89
|
//# sourceMappingURL=redis-token-stream-sink.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-token-stream-sink.js","sourceRoot":"","sources":["../../src/redis-token-stream-sink.ts"],"names":[],"mappings":"AAGA,uEAAuE;AACvE,MAAM,KAAK,GAAG,OAAO,CAAC;AAOtB
|
|
1
|
+
{"version":3,"file":"redis-token-stream-sink.js","sourceRoot":"","sources":["../../src/redis-token-stream-sink.ts"],"names":[],"mappings":"AAGA,uEAAuE;AACvE,MAAM,KAAK,GAAG,OAAO,CAAC;AAOtB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,oBAAoB;IAIZ;IAHF,SAAS,CAAS;IAEnC,YACmB,MAAyB,EAC1C,UAAuC,EAAE;QADxB,WAAM,GAAN,MAAM,CAAmB;QAG1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC;IACvD,CAAC;IAEO,SAAS,CAAC,KAAa;QAC7B,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,SAAS,CAAC;IAC7C,CAAC;IAEO,QAAQ,CAAC,KAAa;QAC5B,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,QAAQ,CAAC;IAC5C,CAAC;IAEO,OAAO,CAAC,KAAa;QAC3B,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,OAAO;YACL,KAAK,EAAE,KAAK,EAAE,KAAkB,EAAE,EAAE;gBAClC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1D,CAAC;YACD,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;gBACnD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;YACxD,CAAC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,SAAS,CAAC,KAAa;QAC5B,2FAA2F;QAC3F,8FAA8F;QAC9F,cAAc;QACd,IAAI,WAAW,GAAwB,IAAI,CAAC;QAC5C,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,MAAM,OAAO,GAAG,WAAW,CAAC;YAC5B,WAAW,GAAG,IAAI,CAAC;YACnB,OAAO,EAAE,EAAE,CAAC;QACd,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QAChF,IAAI,CAAC;YACH,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBACzC,WAAW,GAAG,OAAO,CAAC;gBACxB,CAAC,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1E,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;oBAC7B,KAAK,IAAI,CAAC,CAAC;oBACX,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;gBAC3C,CAAC;gBACD,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/B,OAAO;gBACT,CAAC;gBACD,MAAM,IAAI,CAAC;YACb,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAa;QACvB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,KAAa;QAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,OAAO,GAAG,KAAK,KAAK,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -33,7 +33,7 @@ export class InlineAgentRunner {
|
|
|
33
33
|
await this.store.recordRunEnd({ runId, status: 'failed', error: message });
|
|
34
34
|
// Surface the failure on the live stream and close it, so a subscriber isn't left hanging.
|
|
35
35
|
const writer = await deps.sink.open(runId);
|
|
36
|
-
await writer.write(
|
|
36
|
+
await writer.write({ t: 'text', v: `\n[error] ${message}` });
|
|
37
37
|
await writer.end();
|
|
38
38
|
});
|
|
39
39
|
return { runId };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-agent-runner.js","sourceRoot":"","sources":["../../../src/runners/inline-agent-runner.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAuB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IAIT;IACA;IAJF,OAAO,GAAG,IAAI,GAAG,EAAwC,CAAC;IAE3E,YACmB,OAAyB,EACzB,KAAiB;QADjB,YAAO,GAAP,OAAO,CAAkB;QACzB,UAAK,GAAL,KAAK,CAAY;IACjC,CAAC;IAEJ,KAAK,CAAC,KAAK,CAAC,KAAoB;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEhE,iGAAiG;QACjG,kGAAkG;QAClG,+FAA+F;QAC/F,mBAAmB;QACnB,KAAK,YAAY,CACf,MAAM,EACN,KAAK,EACL,EAAE,KAAK,EAAE,EACT,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,EAClD,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CACjD,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,6BAA6B,KAAK,YAAY,OAAO,EAAE,CAAC,CAAC;YACvE,6FAA6F;YAC7F,sFAAsF;YACtF,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3E,2FAA2F;YAC3F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,MAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"inline-agent-runner.js","sourceRoot":"","sources":["../../../src/runners/inline-agent-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The "data plane": live token transport, decoupled from the durable control plane.
|
|
3
3
|
*
|
|
4
|
-
* The model turn writes
|
|
5
|
-
* `subscribe`s by runId and pipes the
|
|
6
|
-
* (reconnect/resume) replays buffered
|
|
4
|
+
* The model turn writes typed frames to a `SinkWriter` keyed by runId; the HTTP layer
|
|
5
|
+
* `subscribe`s by runId and pipes the frames to the browser as SSE. A late subscriber
|
|
6
|
+
* (reconnect/resume) replays buffered frames first, then follows live — which is what
|
|
7
7
|
* makes streaming survive a dropped connection or a pod restart.
|
|
8
8
|
*/
|
|
9
|
+
export type StreamFrame = {
|
|
10
|
+
t: 'text';
|
|
11
|
+
v: string;
|
|
12
|
+
} | {
|
|
13
|
+
t: 'component';
|
|
14
|
+
name: string;
|
|
15
|
+
data: unknown;
|
|
16
|
+
};
|
|
9
17
|
export interface SinkWriter {
|
|
10
|
-
write(
|
|
11
|
-
/** Mark the run's stream finished (no more
|
|
18
|
+
write(frame: StreamFrame): void | Promise<void>;
|
|
19
|
+
/** Mark the run's stream finished (no more frames). */
|
|
12
20
|
end(): void | Promise<void>;
|
|
13
21
|
}
|
|
14
22
|
export interface TokenStreamSink {
|
|
15
23
|
/** Open (or reopen) the writer for a run. */
|
|
16
24
|
open(runId: string): SinkWriter | Promise<SinkWriter>;
|
|
17
|
-
/** Replay buffered
|
|
18
|
-
subscribe(runId: string): AsyncIterable<
|
|
25
|
+
/** Replay buffered frames for the run, then yield live ones until `end()`. */
|
|
26
|
+
subscribe(runId: string): AsyncIterable<StreamFrame>;
|
|
19
27
|
/** Drop any buffer/resources for the run. */
|
|
20
28
|
close(runId: string): void | Promise<void>;
|
|
21
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-stream-sink.d.ts","sourceRoot":"","sources":["../../../src/spi/token-stream-sink.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"token-stream-sink.d.ts","sourceRoot":"","sources":["../../../src/spi/token-stream-sink.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB;IAAE,CAAC,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,uDAAuD;IACvD,GAAG,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,8EAA8E;IAC9E,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IACrD,6CAA6C;IAC7C,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C"}
|
package/dist/src/spi/tool.d.ts
CHANGED
|
@@ -13,6 +13,12 @@ export interface AiToolCtx {
|
|
|
13
13
|
pageContext?: PageContext;
|
|
14
14
|
/** Optional host handle (e.g. an ORM EntityManager) the app threads through options. */
|
|
15
15
|
host?: unknown;
|
|
16
|
+
/**
|
|
17
|
+
* Empurra um componente de UI pro stream do run, na posição atual (entre os
|
|
18
|
+
* tokens de texto já emitidos e os próximos). Opcional: só a montagem no
|
|
19
|
+
* agent-loop provê; outros construtores de ctx podem omitir.
|
|
20
|
+
*/
|
|
21
|
+
emitComponent?(name: string, data: unknown): void | Promise<void>;
|
|
16
22
|
}
|
|
17
23
|
/**
|
|
18
24
|
* A tool implementation. `I` is the parsed (Zod-validated) input; `O` is what `execute` returns
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../src/spi/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE/D;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../src/spi/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE/D;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,wFAAwF;IACxF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACnD,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CACnD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { StreamFrame } from './spi/token-stream-sink.js';
|
|
2
|
+
/**
|
|
3
|
+
* Serializa um {@link StreamFrame} pro envelope SSE do provider. Texto vira o
|
|
4
|
+
* frame `data: {"delta":...}` (byte-idêntico ao envelope legado só-texto);
|
|
5
|
+
* componente vira `event: component\ndata: {name,data}`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function frameToSse(frame: StreamFrame): string;
|
|
8
|
+
//# sourceMappingURL=sse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/sse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAKrD"}
|
package/dist/src/sse.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializa um {@link StreamFrame} pro envelope SSE do provider. Texto vira o
|
|
3
|
+
* frame `data: {"delta":...}` (byte-idêntico ao envelope legado só-texto);
|
|
4
|
+
* componente vira `event: component\ndata: {name,data}`.
|
|
5
|
+
*/
|
|
6
|
+
export function frameToSse(frame) {
|
|
7
|
+
if (frame.t === 'component') {
|
|
8
|
+
return `event: component\ndata: ${JSON.stringify({ name: frame.name, data: frame.data })}\n\n`;
|
|
9
|
+
}
|
|
10
|
+
return `data: ${JSON.stringify({ delta: frame.v })}\n\n`;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=sse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/sse.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,KAAkB;IAC3C,IAAI,KAAK,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO,2BAA2B,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;IACjG,CAAC;IACD,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;AAC3D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fake-model-provider.d.ts","sourceRoot":"","sources":["../../../src/testing/fake-model-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5C,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,KAAK,QAAQ,CAAC;AAE9E;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAEzC,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"fake-model-provider.d.ts","sourceRoot":"","sources":["../../../src/testing/fake-model-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5C,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,KAAK,QAAQ,CAAC;AAE9E;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAEzC,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;CAuB7D;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,KAAK,SAAO,GAAG,UAAU,CAEnD"}
|
|
@@ -10,8 +10,7 @@ export class FakeModelProvider {
|
|
|
10
10
|
async runTurn(args) {
|
|
11
11
|
const turnIndex = args.messages.filter((message) => message.role === 'assistant').length;
|
|
12
12
|
const turn = this.script(args, turnIndex);
|
|
13
|
-
|
|
14
|
-
await args.sink.write(encoder.encode(turn.text));
|
|
13
|
+
await args.sink.write({ t: 'text', v: turn.text });
|
|
15
14
|
const toolCalls = turn.toolCall
|
|
16
15
|
? [
|
|
17
16
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fake-model-provider.js","sourceRoot":"","sources":["../../../src/testing/fake-model-provider.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,IAAmB;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;QACzF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAE1C,MAAM,
|
|
1
|
+
{"version":3,"file":"fake-model-provider.js","sourceRoot":"","sources":["../../../src/testing/fake-model-provider.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,IAAmB;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;QACzF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAE1C,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ;YAC7B,CAAC,CAAC;gBACE;oBACE,EAAE,EAAE,QAAQ,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;oBAC7C,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;oBACxB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;iBAC3B;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS;YACT,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC5E,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC;CACF;AAED,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,KAAK,GAAG,IAAI;IACrC,OAAO,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { SinkWriter, TokenStreamSink } from '../index.js';
|
|
1
|
+
import type { SinkWriter, StreamFrame, TokenStreamSink } from '../index.js';
|
|
2
2
|
/**
|
|
3
|
-
* In-memory `TokenStreamSink`. Buffers
|
|
3
|
+
* In-memory `TokenStreamSink`. Buffers typed frames per run so a late subscriber (reconnect)
|
|
4
4
|
* replays everything emitted so far, then follows live until the run ends.
|
|
5
5
|
*/
|
|
6
6
|
export declare class InMemoryTokenStreamSink implements TokenStreamSink {
|
|
@@ -8,7 +8,7 @@ export declare class InMemoryTokenStreamSink implements TokenStreamSink {
|
|
|
8
8
|
private buffer;
|
|
9
9
|
private wake;
|
|
10
10
|
open(runId: string): SinkWriter;
|
|
11
|
-
subscribe(runId: string): AsyncIterable<
|
|
11
|
+
subscribe(runId: string): AsyncIterable<StreamFrame>;
|
|
12
12
|
close(runId: string): void;
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=in-memory-sink.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-sink.d.ts","sourceRoot":"","sources":["../../../src/testing/in-memory-sink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"in-memory-sink.d.ts","sourceRoot":"","sources":["../../../src/testing/in-memory-sink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ5E;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgC;IAErD,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,IAAI;IAOZ,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAcxB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC;IAkB3D,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAG3B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* In-memory `TokenStreamSink`. Buffers
|
|
2
|
+
* In-memory `TokenStreamSink`. Buffers typed frames per run so a late subscriber (reconnect)
|
|
3
3
|
* replays everything emitted so far, then follows live until the run ends.
|
|
4
4
|
*/
|
|
5
5
|
export class InMemoryTokenStreamSink {
|
|
@@ -21,8 +21,8 @@ export class InMemoryTokenStreamSink {
|
|
|
21
21
|
open(runId) {
|
|
22
22
|
const buf = this.buffer(runId);
|
|
23
23
|
return {
|
|
24
|
-
write: (
|
|
25
|
-
buf.chunks.push(
|
|
24
|
+
write: (frame) => {
|
|
25
|
+
buf.chunks.push(frame);
|
|
26
26
|
this.wake(buf);
|
|
27
27
|
},
|
|
28
28
|
end: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-sink.js","sourceRoot":"","sources":["../../../src/testing/in-memory-sink.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IACjB,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE7C,MAAM,CAAC,KAAa;QAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,IAAI,CAAC,GAAc;QACzB,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO;YACL,KAAK,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"in-memory-sink.js","sourceRoot":"","sources":["../../../src/testing/in-memory-sink.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IACjB,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE7C,MAAM,CAAC,KAAa;QAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,IAAI,CAAC,GAAc;QACzB,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO;YACL,KAAK,EAAE,CAAC,KAAkB,EAAE,EAAE;gBAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,GAAG,EAAE,GAAG,EAAE;gBACR,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,SAAS,CAAC,KAAa;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,IAAI,EAAE,CAAC;YACZ,OAAO,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChC,KAAK,IAAI,CAAC,CAAC;gBACX,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YACD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adonis-agora/agent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "Governed, durable-backed AI agent (chat + tool-calling + governance) for AdonisJS — part of the Agora ecosystem.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -77,6 +77,16 @@
|
|
|
77
77
|
"types": "./dist/src/telescope/index.d.ts",
|
|
78
78
|
"import": "./dist/src/telescope/index.js",
|
|
79
79
|
"default": "./dist/src/telescope/index.js"
|
|
80
|
+
},
|
|
81
|
+
"./client": {
|
|
82
|
+
"types": "./dist/src/client/index.d.ts",
|
|
83
|
+
"import": "./dist/src/client/index.js",
|
|
84
|
+
"default": "./dist/src/client/index.js"
|
|
85
|
+
},
|
|
86
|
+
"./react": {
|
|
87
|
+
"types": "./dist/src/react/index.d.ts",
|
|
88
|
+
"import": "./dist/src/react/index.js",
|
|
89
|
+
"default": "./dist/src/react/index.js"
|
|
80
90
|
}
|
|
81
91
|
},
|
|
82
92
|
"files": [
|
|
@@ -99,9 +109,13 @@
|
|
|
99
109
|
"@adonisjs/redis": "^9.2.0",
|
|
100
110
|
"ai": "^7.0.0",
|
|
101
111
|
"node-sql-parser": "^5.3.0",
|
|
112
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
102
113
|
"zod": "^3.23.0 || ^4.0.0"
|
|
103
114
|
},
|
|
104
115
|
"peerDependenciesMeta": {
|
|
116
|
+
"react": {
|
|
117
|
+
"optional": true
|
|
118
|
+
},
|
|
105
119
|
"node-sql-parser": {
|
|
106
120
|
"optional": true
|
|
107
121
|
},
|
|
@@ -142,10 +156,12 @@
|
|
|
142
156
|
"@adonisjs/core": "^7.3.0",
|
|
143
157
|
"@adonisjs/lucid": "^22.4.0",
|
|
144
158
|
"@types/node": "^22.0.0",
|
|
159
|
+
"@types/react": "^19.0.0",
|
|
145
160
|
"ai": "^7.0.0",
|
|
146
161
|
"better-sqlite3": "^11.0.0",
|
|
147
162
|
"luxon": "^3.4.0",
|
|
148
163
|
"node-sql-parser": "^5.3.0",
|
|
164
|
+
"react": "^19.0.0",
|
|
149
165
|
"typescript": "^5.4.0",
|
|
150
166
|
"vitest": "^3.0.0",
|
|
151
167
|
"zod": "^3.25.0"
|