veryfront 0.1.225 → 0.1.227

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/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.225",
3
+ "version": "0.1.227",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
@@ -0,0 +1,28 @@
1
+ import type { AgentResponse } from "./types.js";
2
+ import type { AgUiSseEvent } from "./ag-ui-host-support.js";
3
+ export interface AgUiBrowserResponseRequestState {
4
+ runId?: string;
5
+ threadId?: string;
6
+ state?: unknown;
7
+ messages: unknown[];
8
+ }
9
+ export interface AgUiBrowserResponseExecution<TChunk> {
10
+ agentUIStream: AsyncIterable<TChunk>;
11
+ fail: (error: unknown) => Promise<void>;
12
+ waitForFinish: () => Promise<void>;
13
+ }
14
+ export interface AgUiBrowserResponseEncoder<TChunk> {
15
+ encode: (chunk: TChunk) => AgUiSseEvent[];
16
+ finalize: (response: AgentResponse | null) => AgUiSseEvent[];
17
+ }
18
+ export interface CreateAgUiBrowserResponseStreamInput<TChunk, TState> {
19
+ agUiInput: AgUiBrowserResponseRequestState;
20
+ agentId: string;
21
+ execution: AgUiBrowserResponseExecution<TChunk>;
22
+ encoder: AgUiBrowserResponseEncoder<TChunk>;
23
+ initialState: TState;
24
+ onChunk?: (state: TState, chunk: TChunk) => void;
25
+ getFinalResponse?: (state: TState) => AgentResponse | null;
26
+ }
27
+ export declare function createAgUiBrowserResponseStream<TChunk, TState>(input: CreateAgUiBrowserResponseStreamInput<TChunk, TState>): ReadableStream<Uint8Array>;
28
+ //# sourceMappingURL=ag-ui-browser-response-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ag-ui-browser-response-stream.d.ts","sourceRoot":"","sources":["../../../src/src/agent/ag-ui-browser-response-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAkB5D,MAAM,WAAW,+BAA+B;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B,CAAC,MAAM;IAClD,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,0BAA0B,CAAC,MAAM;IAChD,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,YAAY,EAAE,CAAC;IAC1C,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,KAAK,YAAY,EAAE,CAAC;CAC9D;AAED,MAAM,WAAW,oCAAoC,CAAC,MAAM,EAAE,MAAM;IAClE,SAAS,EAAE,+BAA+B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,GAAG,IAAI,CAAC;CAC5D;AAUD,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAC5D,KAAK,EAAE,oCAAoC,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1D,cAAc,CAAC,UAAU,CAAC,CAqH5B"}
@@ -0,0 +1,117 @@
1
+ const encoder = new TextEncoder();
2
+ function formatAgUiSseEventWithId(event, eventId) {
3
+ const idLine = eventId === null ? "" : `id: ${eventId}\n`;
4
+ return encoder.encode(`${idLine}event: ${event.event}\ndata: ${JSON.stringify(event.payload)}\n\n`);
5
+ }
6
+ function invokeFailWithoutLeaking(fail, error) {
7
+ return fail(error).catch(() => undefined);
8
+ }
9
+ function isRecord(value) {
10
+ return typeof value === "object" && value !== null && !Array.isArray(value);
11
+ }
12
+ function normalizeSnapshot(snapshot) {
13
+ return isRecord(snapshot) ? snapshot : {};
14
+ }
15
+ export function createAgUiBrowserResponseStream(input) {
16
+ let streamClosed = false;
17
+ let nextEventId = 1;
18
+ return new ReadableStream({
19
+ start(controller) {
20
+ const writeEvent = (event) => {
21
+ if (streamClosed) {
22
+ return false;
23
+ }
24
+ try {
25
+ controller.enqueue(formatAgUiSseEventWithId(event, nextEventId));
26
+ nextEventId += 1;
27
+ return true;
28
+ }
29
+ catch {
30
+ streamClosed = true;
31
+ return false;
32
+ }
33
+ };
34
+ const closeStream = () => {
35
+ if (streamClosed) {
36
+ return;
37
+ }
38
+ if (controller.desiredSize === null) {
39
+ streamClosed = true;
40
+ return;
41
+ }
42
+ controller.close();
43
+ streamClosed = true;
44
+ };
45
+ void (async () => {
46
+ const state = input.initialState;
47
+ try {
48
+ if (!writeEvent({
49
+ event: "RunStarted",
50
+ payload: {
51
+ runId: input.agUiInput.runId,
52
+ threadId: input.agUiInput.threadId,
53
+ agentId: input.agentId,
54
+ },
55
+ })) {
56
+ return;
57
+ }
58
+ if (!writeEvent({
59
+ event: "StateSnapshot",
60
+ payload: {
61
+ snapshot: normalizeSnapshot(input.agUiInput.state),
62
+ },
63
+ })) {
64
+ return;
65
+ }
66
+ if (!writeEvent({
67
+ event: "MessagesSnapshot",
68
+ payload: {
69
+ messages: input.agUiInput.messages,
70
+ },
71
+ })) {
72
+ return;
73
+ }
74
+ for await (const chunk of input.execution.agentUIStream) {
75
+ if (streamClosed) {
76
+ return;
77
+ }
78
+ input.onChunk?.(state, chunk);
79
+ for (const event of input.encoder.encode(chunk)) {
80
+ if (!writeEvent(event)) {
81
+ return;
82
+ }
83
+ }
84
+ }
85
+ if (streamClosed) {
86
+ return;
87
+ }
88
+ await input.execution.waitForFinish();
89
+ if (streamClosed) {
90
+ return;
91
+ }
92
+ for (const event of input.encoder.finalize(input.getFinalResponse?.(state) ?? null)) {
93
+ if (!writeEvent(event)) {
94
+ return;
95
+ }
96
+ }
97
+ }
98
+ catch (error) {
99
+ await invokeFailWithoutLeaking(input.execution.fail, error);
100
+ writeEvent({
101
+ event: "RunError",
102
+ payload: {
103
+ code: "STREAM_ERROR",
104
+ message: error instanceof Error ? error.message : String(error),
105
+ },
106
+ });
107
+ }
108
+ finally {
109
+ closeStream();
110
+ }
111
+ })();
112
+ },
113
+ cancel() {
114
+ streamClosed = true;
115
+ },
116
+ });
117
+ }
@@ -88,6 +88,7 @@ export { type AgUiRuntimeHandlerConfig, type AgUiRuntimeHandlerConfigWithAgent,
88
88
  export { type AgUiRuntimeContextItem, AgUiRuntimeContextItemSchema, type AgUiRuntimeInjectedTool, AgUiRuntimeInjectedToolSchema, type AgUiRuntimeMessage, AgUiRuntimeMessageSchema, type AgUiRuntimeRequest, AgUiRuntimeRequestSchema, parseAgUiRuntimeRequest, parseAgUiRuntimeRequestOrError, } from "./runtime-ag-ui-contract.js";
89
89
  export { normalizeAgUiRuntimeMessages } from "./ag-ui-runtime-support.js";
90
90
  export { type AgUiBrowserEncodedEvent, type AgUiBrowserEncoderState, type AgUiBrowserRunFinishedMetadata, type AgUiRuntimeStreamEvent, createAgUiBrowserEncoderState, finalizeAgUiBrowserEvents, mapRuntimeStreamEventToAgUiBrowserEvents, } from "./ag-ui-browser-encoder.js";
91
+ export { type AgUiBrowserResponseEncoder, type AgUiBrowserResponseExecution, type AgUiBrowserResponseRequestState, createAgUiBrowserResponseStream, type CreateAgUiBrowserResponseStreamInput, } from "./ag-ui-browser-response-stream.js";
91
92
  export { mergeToolCallInput, mergeToolInputDelta, parseDataStreamSseEvents, parseToolInputObject, streamDataStreamEvents, stripLeadingEmptyObjectPlaceholder, } from "./data-stream.js";
92
93
  export { expandAllowedRemoteToolNames, getProviderNativeToolNames, type ProviderNativeToolInventoryOptions, } from "./provider-native-tool-inventory.js";
93
94
  export { type AgUiDetachedStartAccepted, AgUiDetachedStartAcceptedSchema, type AgUiDetachedStartHandlerOptions, type AgUiDetachedStartRequest, AgUiDetachedStartRequestSchema, createAgUiDetachedStartHandler, executeAgUiDetachedStart, type ExecuteAgUiDetachedStartInput, } from "./ag-ui-detached-start.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/agent/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/agent/index.ts"],"names":[],"mappings":"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"}
@@ -87,6 +87,7 @@ export { createAgUiRuntimeHandler, } from "./ag-ui-runtime-handler.js";
87
87
  export { AgUiRuntimeContextItemSchema, AgUiRuntimeInjectedToolSchema, AgUiRuntimeMessageSchema, AgUiRuntimeRequestSchema, parseAgUiRuntimeRequest, parseAgUiRuntimeRequestOrError, } from "./runtime-ag-ui-contract.js";
88
88
  export { normalizeAgUiRuntimeMessages } from "./ag-ui-runtime-support.js";
89
89
  export { createAgUiBrowserEncoderState, finalizeAgUiBrowserEvents, mapRuntimeStreamEventToAgUiBrowserEvents, } from "./ag-ui-browser-encoder.js";
90
+ export { createAgUiBrowserResponseStream, } from "./ag-ui-browser-response-stream.js";
90
91
  export { mergeToolCallInput, mergeToolInputDelta, parseDataStreamSseEvents, parseToolInputObject, streamDataStreamEvents, stripLeadingEmptyObjectPlaceholder, } from "./data-stream.js";
91
92
  export { expandAllowedRemoteToolNames, getProviderNativeToolNames, } from "./provider-native-tool-inventory.js";
92
93
  export { AgUiDetachedStartAcceptedSchema, AgUiDetachedStartRequestSchema, createAgUiDetachedStartHandler, executeAgUiDetachedStart, } from "./ag-ui-detached-start.js";
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.225";
1
+ export declare const VERSION = "0.1.227";
2
2
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.225";
3
+ export const VERSION = "0.1.227";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.225",
3
+ "version": "0.1.227",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
package/src/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.225",
3
+ "version": "0.1.227",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
@@ -0,0 +1,175 @@
1
+ import type { AgentResponse } from "./types.js";
2
+ import type { AgUiSseEvent } from "./ag-ui-host-support.js";
3
+
4
+ const encoder = new TextEncoder();
5
+
6
+ function formatAgUiSseEventWithId(event: AgUiSseEvent, eventId: number | null): Uint8Array {
7
+ const idLine = eventId === null ? "" : `id: ${eventId}\n`;
8
+ return encoder.encode(
9
+ `${idLine}event: ${event.event}\ndata: ${JSON.stringify(event.payload)}\n\n`,
10
+ );
11
+ }
12
+
13
+ function invokeFailWithoutLeaking(
14
+ fail: (error: unknown) => Promise<void>,
15
+ error: unknown,
16
+ ): Promise<void> {
17
+ return fail(error).catch(() => undefined);
18
+ }
19
+
20
+ export interface AgUiBrowserResponseRequestState {
21
+ runId?: string;
22
+ threadId?: string;
23
+ state?: unknown;
24
+ messages: unknown[];
25
+ }
26
+
27
+ export interface AgUiBrowserResponseExecution<TChunk> {
28
+ agentUIStream: AsyncIterable<TChunk>;
29
+ fail: (error: unknown) => Promise<void>;
30
+ waitForFinish: () => Promise<void>;
31
+ }
32
+
33
+ export interface AgUiBrowserResponseEncoder<TChunk> {
34
+ encode: (chunk: TChunk) => AgUiSseEvent[];
35
+ finalize: (response: AgentResponse | null) => AgUiSseEvent[];
36
+ }
37
+
38
+ export interface CreateAgUiBrowserResponseStreamInput<TChunk, TState> {
39
+ agUiInput: AgUiBrowserResponseRequestState;
40
+ agentId: string;
41
+ execution: AgUiBrowserResponseExecution<TChunk>;
42
+ encoder: AgUiBrowserResponseEncoder<TChunk>;
43
+ initialState: TState;
44
+ onChunk?: (state: TState, chunk: TChunk) => void;
45
+ getFinalResponse?: (state: TState) => AgentResponse | null;
46
+ }
47
+
48
+ function isRecord(value: unknown): value is Record<string, unknown> {
49
+ return typeof value === "object" && value !== null && !Array.isArray(value);
50
+ }
51
+
52
+ function normalizeSnapshot(snapshot: unknown): Record<string, unknown> {
53
+ return isRecord(snapshot) ? snapshot : {};
54
+ }
55
+
56
+ export function createAgUiBrowserResponseStream<TChunk, TState>(
57
+ input: CreateAgUiBrowserResponseStreamInput<TChunk, TState>,
58
+ ): ReadableStream<Uint8Array> {
59
+ let streamClosed = false;
60
+ let nextEventId = 1;
61
+
62
+ return new ReadableStream<Uint8Array>({
63
+ start(controller) {
64
+ const writeEvent = (event: AgUiSseEvent) => {
65
+ if (streamClosed) {
66
+ return false;
67
+ }
68
+
69
+ try {
70
+ controller.enqueue(formatAgUiSseEventWithId(event, nextEventId));
71
+ nextEventId += 1;
72
+ return true;
73
+ } catch {
74
+ streamClosed = true;
75
+ return false;
76
+ }
77
+ };
78
+
79
+ const closeStream = () => {
80
+ if (streamClosed) {
81
+ return;
82
+ }
83
+
84
+ if (controller.desiredSize === null) {
85
+ streamClosed = true;
86
+ return;
87
+ }
88
+
89
+ controller.close();
90
+ streamClosed = true;
91
+ };
92
+
93
+ void (async () => {
94
+ const state = input.initialState;
95
+
96
+ try {
97
+ if (
98
+ !writeEvent({
99
+ event: "RunStarted",
100
+ payload: {
101
+ runId: input.agUiInput.runId,
102
+ threadId: input.agUiInput.threadId,
103
+ agentId: input.agentId,
104
+ },
105
+ })
106
+ ) {
107
+ return;
108
+ }
109
+
110
+ if (
111
+ !writeEvent({
112
+ event: "StateSnapshot",
113
+ payload: {
114
+ snapshot: normalizeSnapshot(input.agUiInput.state),
115
+ },
116
+ })
117
+ ) {
118
+ return;
119
+ }
120
+
121
+ if (
122
+ !writeEvent({
123
+ event: "MessagesSnapshot",
124
+ payload: {
125
+ messages: input.agUiInput.messages,
126
+ },
127
+ })
128
+ ) {
129
+ return;
130
+ }
131
+
132
+ for await (const chunk of input.execution.agentUIStream) {
133
+ if (streamClosed) {
134
+ return;
135
+ }
136
+ input.onChunk?.(state, chunk);
137
+ for (const event of input.encoder.encode(chunk)) {
138
+ if (!writeEvent(event)) {
139
+ return;
140
+ }
141
+ }
142
+ }
143
+
144
+ if (streamClosed) {
145
+ return;
146
+ }
147
+ await input.execution.waitForFinish();
148
+
149
+ if (streamClosed) {
150
+ return;
151
+ }
152
+ for (const event of input.encoder.finalize(input.getFinalResponse?.(state) ?? null)) {
153
+ if (!writeEvent(event)) {
154
+ return;
155
+ }
156
+ }
157
+ } catch (error) {
158
+ await invokeFailWithoutLeaking(input.execution.fail, error);
159
+ writeEvent({
160
+ event: "RunError",
161
+ payload: {
162
+ code: "STREAM_ERROR",
163
+ message: error instanceof Error ? error.message : String(error),
164
+ },
165
+ });
166
+ } finally {
167
+ closeStream();
168
+ }
169
+ })();
170
+ },
171
+ cancel() {
172
+ streamClosed = true;
173
+ },
174
+ });
175
+ }
@@ -172,6 +172,13 @@ export {
172
172
  finalizeAgUiBrowserEvents,
173
173
  mapRuntimeStreamEventToAgUiBrowserEvents,
174
174
  } from "./ag-ui-browser-encoder.js";
175
+ export {
176
+ type AgUiBrowserResponseEncoder,
177
+ type AgUiBrowserResponseExecution,
178
+ type AgUiBrowserResponseRequestState,
179
+ createAgUiBrowserResponseStream,
180
+ type CreateAgUiBrowserResponseStreamInput,
181
+ } from "./ag-ui-browser-response-stream.js";
175
182
  export {
176
183
  mergeToolCallInput,
177
184
  mergeToolInputDelta,
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.225";
3
+ export const VERSION = "0.1.227";