veryfront 0.1.227 → 0.1.229

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.227",
3
+ "version": "0.1.229",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
@@ -26,6 +26,7 @@ export interface AgUiBrowserEncodedEvent {
26
26
  payload: Record<string, unknown>;
27
27
  }
28
28
  export declare function createAgUiBrowserEncoderState(): AgUiBrowserEncoderState;
29
+ export declare function buildAgUiBrowserFinalizeResponse(metadata: AgUiBrowserRunFinishedMetadata): AgentResponse | null;
29
30
  export declare function mapRuntimeStreamEventToAgUiBrowserEvents(state: AgUiBrowserEncoderState, event: AgUiRuntimeStreamEvent): AgUiBrowserEncodedEvent[];
30
31
  export declare function finalizeAgUiBrowserEvents(state: AgUiBrowserEncoderState, response: AgentResponse | null): AgUiBrowserEncodedEvent[];
31
32
  //# sourceMappingURL=ag-ui-browser-encoder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ag-ui-browser-encoder.d.ts","sourceRoot":"","sources":["../../../src/src/agent/ag-ui-browser-encoder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,8BAA8B,CAAC;CAC1C;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,6BAA6B,IAAI,uBAAuB,CAYvE;AAuND,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,uBAAuB,EAC9B,KAAK,EAAE,sBAAsB,GAC5B,uBAAuB,EAAE,CAgN3B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,aAAa,GAAG,IAAI,GAC7B,uBAAuB,EAAE,CA8B3B"}
1
+ {"version":3,"file":"ag-ui-browser-encoder.d.ts","sourceRoot":"","sources":["../../../src/src/agent/ag-ui-browser-encoder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,8BAA8B,CAAC;CAC1C;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,6BAA6B,IAAI,uBAAuB,CAYvE;AA6FD,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,8BAA8B,GACvC,aAAa,GAAG,IAAI,CA6BtB;AA4HD,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,uBAAuB,EAC9B,KAAK,EAAE,sBAAsB,GAC5B,uBAAuB,EAAE,CAgN3B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,aAAa,GAAG,IAAI,GAC7B,uBAAuB,EAAE,CA8B3B"}
@@ -84,6 +84,33 @@ function applyResponseMetadata(state, response) {
84
84
  state.metadata.finishReason = finishReason;
85
85
  }
86
86
  }
87
+ export function buildAgUiBrowserFinalizeResponse(metadata) {
88
+ const responseMetadata = {};
89
+ if (typeof metadata.finishReason === "string" && metadata.finishReason.length > 0) {
90
+ responseMetadata.finishReason = metadata.finishReason;
91
+ }
92
+ const usage = typeof metadata.inputTokens === "number" ||
93
+ typeof metadata.outputTokens === "number" ||
94
+ typeof metadata.totalTokens === "number"
95
+ ? {
96
+ promptTokens: metadata.inputTokens ?? 0,
97
+ completionTokens: metadata.outputTokens ?? 0,
98
+ totalTokens: metadata.totalTokens ??
99
+ ((metadata.inputTokens ?? 0) + (metadata.outputTokens ?? 0)),
100
+ }
101
+ : undefined;
102
+ if (!usage && Object.keys(responseMetadata).length === 0) {
103
+ return null;
104
+ }
105
+ return {
106
+ text: "",
107
+ messages: [],
108
+ toolCalls: [],
109
+ status: "completed",
110
+ ...(usage ? { usage } : {}),
111
+ ...(Object.keys(responseMetadata).length > 0 ? { metadata: responseMetadata } : {}),
112
+ };
113
+ }
87
114
  function completeToolInput(state, event) {
88
115
  const toolCallId = typeof event.toolCallId === "string" ? event.toolCallId : "";
89
116
  const events = [];
@@ -0,0 +1,41 @@
1
+ export interface HostedLifecycleTerminalState {
2
+ status: "completed" | "failed" | "cancelled";
3
+ metadata?: {
4
+ modelId?: string;
5
+ usage?: {
6
+ inputTokens?: number;
7
+ outputTokens?: number;
8
+ cachedInputTokens?: number;
9
+ };
10
+ };
11
+ terminalErrorCode?: string | null;
12
+ terminalErrorMessage?: string | null;
13
+ }
14
+ export interface HostedLifecycleExecution<TChunk> {
15
+ stream: AsyncIterable<TChunk>;
16
+ waitForFinish: () => Promise<void>;
17
+ }
18
+ export interface HostedLifecycleAdapter<TRun, TChunk> {
19
+ startRun: (input: {
20
+ abortSignal: AbortSignal;
21
+ }) => Promise<TRun> | TRun;
22
+ appendEvents?: (run: TRun, chunk: TChunk) => Promise<void> | void;
23
+ persistTranscriptChunk?: (run: TRun, chunk: TChunk) => Promise<void> | void;
24
+ persistTranscriptTerminalState?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
25
+ onTerminalState?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
26
+ finalizeRun?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
27
+ cancelRun?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
28
+ }
29
+ export interface HostedLifecycleRunnerOptions<TRun, TChunk> {
30
+ abortSignal: AbortSignal;
31
+ execution: HostedLifecycleExecution<TChunk>;
32
+ adapter: HostedLifecycleAdapter<TRun, TChunk>;
33
+ resolveTerminalState: () => Promise<HostedLifecycleTerminalState> | HostedLifecycleTerminalState;
34
+ resolveErrorTerminalState?: (error: unknown) => Promise<HostedLifecycleTerminalState> | HostedLifecycleTerminalState;
35
+ }
36
+ export interface HostedLifecycleRunResult<TRun> {
37
+ run: TRun;
38
+ terminalState: HostedLifecycleTerminalState;
39
+ }
40
+ export declare function runHostedLifecycle<TRun, TChunk>(options: HostedLifecycleRunnerOptions<TRun, TChunk>): Promise<HostedLifecycleRunResult<TRun>>;
41
+ //# sourceMappingURL=hosted-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/src/agent/hosted-lifecycle.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC7C,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE;YACN,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;SAC5B,CAAC;KACH,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,wBAAwB,CAAC,MAAM;IAC9C,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB,CAAC,IAAI,EAAE,MAAM;IAClD,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAClE,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5E,8BAA8B,CAAC,EAAE,CAC/B,GAAG,EAAE,IAAI,EACT,aAAa,EAAE,4BAA4B,KACxC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,CAChB,GAAG,EAAE,IAAI,EACT,aAAa,EAAE,4BAA4B,KACxC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,4BAA4B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/F,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,4BAA4B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9F;AAED,MAAM,WAAW,4BAA4B,CAAC,IAAI,EAAE,MAAM;IACxD,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,EAAE,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,oBAAoB,EAAE,MAAM,OAAO,CAAC,4BAA4B,CAAC,GAAG,4BAA4B,CAAC;IACjG,yBAAyB,CAAC,EAAE,CAC1B,KAAK,EAAE,OAAO,KACX,OAAO,CAAC,4BAA4B,CAAC,GAAG,4BAA4B,CAAC;CAC3E;AAED,MAAM,WAAW,wBAAwB,CAAC,IAAI;IAC5C,GAAG,EAAE,IAAI,CAAC;IACV,aAAa,EAAE,4BAA4B,CAAC;CAC7C;AA4ED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EACnD,OAAO,EAAE,4BAA4B,CAAC,IAAI,EAAE,MAAM,CAAC,GAClD,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAgCzC"}
@@ -0,0 +1,77 @@
1
+ function getTerminalErrorMessage(error) {
2
+ return error instanceof Error ? error.message : String(error);
3
+ }
4
+ function defaultErrorTerminalState(abortSignal, error) {
5
+ if (abortSignal.aborted) {
6
+ return {
7
+ status: "cancelled",
8
+ terminalErrorCode: "ABORTED",
9
+ terminalErrorMessage: getTerminalErrorMessage(error),
10
+ };
11
+ }
12
+ return {
13
+ status: "failed",
14
+ terminalErrorCode: "STREAM_ERROR",
15
+ terminalErrorMessage: getTerminalErrorMessage(error),
16
+ };
17
+ }
18
+ async function captureHookError(callback) {
19
+ if (!callback) {
20
+ return null;
21
+ }
22
+ try {
23
+ await callback();
24
+ return null;
25
+ }
26
+ catch (error) {
27
+ return error;
28
+ }
29
+ }
30
+ async function runTerminalHooks(input) {
31
+ let firstHookError = null;
32
+ const persistError = await captureHookError(() => input.adapter.persistTranscriptTerminalState?.(input.run, input.terminalState));
33
+ if (persistError) {
34
+ firstHookError = persistError;
35
+ }
36
+ const terminalObserverError = await captureHookError(() => input.adapter.onTerminalState?.(input.run, input.terminalState));
37
+ if (!firstHookError && terminalObserverError) {
38
+ firstHookError = terminalObserverError;
39
+ }
40
+ const terminalControlError = await captureHookError(() => input.terminalState.status === "cancelled"
41
+ ? input.adapter.cancelRun?.(input.run, input.terminalState)
42
+ : input.adapter.finalizeRun?.(input.run, input.terminalState));
43
+ if (firstHookError) {
44
+ throw firstHookError;
45
+ }
46
+ if (terminalControlError) {
47
+ throw terminalControlError;
48
+ }
49
+ }
50
+ export async function runHostedLifecycle(options) {
51
+ const run = await options.adapter.startRun({ abortSignal: options.abortSignal });
52
+ try {
53
+ for await (const chunk of options.execution.stream) {
54
+ await options.adapter.appendEvents?.(run, chunk);
55
+ await options.adapter.persistTranscriptChunk?.(run, chunk);
56
+ }
57
+ await options.execution.waitForFinish();
58
+ }
59
+ catch (error) {
60
+ const terminalState = options.resolveErrorTerminalState
61
+ ? await options.resolveErrorTerminalState(error)
62
+ : defaultErrorTerminalState(options.abortSignal, error);
63
+ await runTerminalHooks({
64
+ run,
65
+ terminalState,
66
+ adapter: options.adapter,
67
+ }).catch(() => undefined);
68
+ throw error;
69
+ }
70
+ const terminalState = await options.resolveTerminalState();
71
+ await runTerminalHooks({
72
+ run,
73
+ terminalState,
74
+ adapter: options.adapter,
75
+ });
76
+ return { run, terminalState };
77
+ }
@@ -87,8 +87,9 @@ export { agent } from "./factory.js";
87
87
  export { type AgUiRuntimeHandlerConfig, type AgUiRuntimeHandlerConfigWithAgent, type AgUiRuntimeHandlerExecute, type AgUiRuntimeHandlerExecuteInput, type AgUiRuntimeHandlerOptions, type AgUiRuntimeLifecycleContext, createAgUiRuntimeHandler, } from "./ag-ui-runtime-handler.js";
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
- export { type AgUiBrowserEncodedEvent, type AgUiBrowserEncoderState, type AgUiBrowserRunFinishedMetadata, type AgUiRuntimeStreamEvent, createAgUiBrowserEncoderState, finalizeAgUiBrowserEvents, mapRuntimeStreamEventToAgUiBrowserEvents, } from "./ag-ui-browser-encoder.js";
90
+ export { type AgUiBrowserEncodedEvent, type AgUiBrowserEncoderState, type AgUiBrowserRunFinishedMetadata, type AgUiRuntimeStreamEvent, buildAgUiBrowserFinalizeResponse, createAgUiBrowserEncoderState, finalizeAgUiBrowserEvents, mapRuntimeStreamEventToAgUiBrowserEvents, } from "./ag-ui-browser-encoder.js";
91
91
  export { type AgUiBrowserResponseEncoder, type AgUiBrowserResponseExecution, type AgUiBrowserResponseRequestState, createAgUiBrowserResponseStream, type CreateAgUiBrowserResponseStreamInput, } from "./ag-ui-browser-response-stream.js";
92
+ export { type HostedLifecycleAdapter, type HostedLifecycleExecution, type HostedLifecycleRunnerOptions, type HostedLifecycleRunResult, type HostedLifecycleTerminalState, runHostedLifecycle, } from "./hosted-lifecycle.js";
92
93
  export { mergeToolCallInput, mergeToolInputDelta, parseDataStreamSseEvents, parseToolInputObject, streamDataStreamEvents, stripLeadingEmptyObjectPlaceholder, } from "./data-stream.js";
93
94
  export { expandAllowedRemoteToolNames, getProviderNativeToolNames, type ProviderNativeToolInventoryOptions, } from "./provider-native-tool-inventory.js";
94
95
  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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"}
@@ -86,8 +86,9 @@ export { agent } from "./factory.js";
86
86
  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
- export { createAgUiBrowserEncoderState, finalizeAgUiBrowserEvents, mapRuntimeStreamEventToAgUiBrowserEvents, } from "./ag-ui-browser-encoder.js";
89
+ export { buildAgUiBrowserFinalizeResponse, createAgUiBrowserEncoderState, finalizeAgUiBrowserEvents, mapRuntimeStreamEventToAgUiBrowserEvents, } from "./ag-ui-browser-encoder.js";
90
90
  export { createAgUiBrowserResponseStream, } from "./ag-ui-browser-response-stream.js";
91
+ export { runHostedLifecycle, } from "./hosted-lifecycle.js";
91
92
  export { mergeToolCallInput, mergeToolInputDelta, parseDataStreamSseEvents, parseToolInputObject, streamDataStreamEvents, stripLeadingEmptyObjectPlaceholder, } from "./data-stream.js";
92
93
  export { expandAllowedRemoteToolNames, getProviderNativeToolNames, } from "./provider-native-tool-inventory.js";
93
94
  export { AgUiDetachedStartAcceptedSchema, AgUiDetachedStartRequestSchema, createAgUiDetachedStartHandler, executeAgUiDetachedStart, } from "./ag-ui-detached-start.js";
@@ -1 +1 @@
1
- {"version":3,"file":"sse-utils.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/sse-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;;GAGG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,+BAA+B,EAC3C,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAEN;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,+BAA+B,GAAG,IAAI,CAUhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
1
+ {"version":3,"file":"sse-utils.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/sse-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;;GAGG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,+BAA+B,EAC3C,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAUN;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,+BAA+B,GAAG,IAAI,CAUhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
@@ -14,7 +14,15 @@ function isClosedStreamControllerError(error) {
14
14
  * Formats event as: data: {json}\n\n
15
15
  */
16
16
  export function sendSSE(controller, encoder, event) {
17
- controller.enqueue(encoder.encode(`data: ${JSON.stringify(event)}\n\n`));
17
+ try {
18
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify(event)}\n\n`));
19
+ }
20
+ catch (error) {
21
+ if (isClosedStreamControllerError(error)) {
22
+ return;
23
+ }
24
+ throw error;
25
+ }
18
26
  }
19
27
  export function closeSSEStream(controller) {
20
28
  try {
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.227";
1
+ export declare const VERSION = "0.1.229";
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.227";
3
+ export const VERSION = "0.1.229";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.227",
3
+ "version": "0.1.229",
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.227",
3
+ "version": "0.1.229",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
@@ -134,6 +134,39 @@ function applyResponseMetadata(
134
134
  }
135
135
  }
136
136
 
137
+ export function buildAgUiBrowserFinalizeResponse(
138
+ metadata: AgUiBrowserRunFinishedMetadata,
139
+ ): AgentResponse | null {
140
+ const responseMetadata: Record<string, unknown> = {};
141
+ if (typeof metadata.finishReason === "string" && metadata.finishReason.length > 0) {
142
+ responseMetadata.finishReason = metadata.finishReason;
143
+ }
144
+
145
+ const usage = typeof metadata.inputTokens === "number" ||
146
+ typeof metadata.outputTokens === "number" ||
147
+ typeof metadata.totalTokens === "number"
148
+ ? {
149
+ promptTokens: metadata.inputTokens ?? 0,
150
+ completionTokens: metadata.outputTokens ?? 0,
151
+ totalTokens: metadata.totalTokens ??
152
+ ((metadata.inputTokens ?? 0) + (metadata.outputTokens ?? 0)),
153
+ }
154
+ : undefined;
155
+
156
+ if (!usage && Object.keys(responseMetadata).length === 0) {
157
+ return null;
158
+ }
159
+
160
+ return {
161
+ text: "",
162
+ messages: [],
163
+ toolCalls: [],
164
+ status: "completed",
165
+ ...(usage ? { usage } : {}),
166
+ ...(Object.keys(responseMetadata).length > 0 ? { metadata: responseMetadata } : {}),
167
+ };
168
+ }
169
+
137
170
  function completeToolInput(
138
171
  state: AgUiBrowserEncoderState,
139
172
  event: AgUiRuntimeStreamEvent,
@@ -0,0 +1,159 @@
1
+ export interface HostedLifecycleTerminalState {
2
+ status: "completed" | "failed" | "cancelled";
3
+ metadata?: {
4
+ modelId?: string;
5
+ usage?: {
6
+ inputTokens?: number;
7
+ outputTokens?: number;
8
+ cachedInputTokens?: number;
9
+ };
10
+ };
11
+ terminalErrorCode?: string | null;
12
+ terminalErrorMessage?: string | null;
13
+ }
14
+
15
+ export interface HostedLifecycleExecution<TChunk> {
16
+ stream: AsyncIterable<TChunk>;
17
+ waitForFinish: () => Promise<void>;
18
+ }
19
+
20
+ export interface HostedLifecycleAdapter<TRun, TChunk> {
21
+ startRun: (input: { abortSignal: AbortSignal }) => Promise<TRun> | TRun;
22
+ appendEvents?: (run: TRun, chunk: TChunk) => Promise<void> | void;
23
+ persistTranscriptChunk?: (run: TRun, chunk: TChunk) => Promise<void> | void;
24
+ persistTranscriptTerminalState?: (
25
+ run: TRun,
26
+ terminalState: HostedLifecycleTerminalState,
27
+ ) => Promise<void> | void;
28
+ onTerminalState?: (
29
+ run: TRun,
30
+ terminalState: HostedLifecycleTerminalState,
31
+ ) => Promise<void> | void;
32
+ finalizeRun?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
33
+ cancelRun?: (run: TRun, terminalState: HostedLifecycleTerminalState) => Promise<void> | void;
34
+ }
35
+
36
+ export interface HostedLifecycleRunnerOptions<TRun, TChunk> {
37
+ abortSignal: AbortSignal;
38
+ execution: HostedLifecycleExecution<TChunk>;
39
+ adapter: HostedLifecycleAdapter<TRun, TChunk>;
40
+ resolveTerminalState: () => Promise<HostedLifecycleTerminalState> | HostedLifecycleTerminalState;
41
+ resolveErrorTerminalState?: (
42
+ error: unknown,
43
+ ) => Promise<HostedLifecycleTerminalState> | HostedLifecycleTerminalState;
44
+ }
45
+
46
+ export interface HostedLifecycleRunResult<TRun> {
47
+ run: TRun;
48
+ terminalState: HostedLifecycleTerminalState;
49
+ }
50
+
51
+ function getTerminalErrorMessage(error: unknown): string {
52
+ return error instanceof Error ? error.message : String(error);
53
+ }
54
+
55
+ function defaultErrorTerminalState(
56
+ abortSignal: AbortSignal,
57
+ error: unknown,
58
+ ): HostedLifecycleTerminalState {
59
+ if (abortSignal.aborted) {
60
+ return {
61
+ status: "cancelled",
62
+ terminalErrorCode: "ABORTED",
63
+ terminalErrorMessage: getTerminalErrorMessage(error),
64
+ };
65
+ }
66
+
67
+ return {
68
+ status: "failed",
69
+ terminalErrorCode: "STREAM_ERROR",
70
+ terminalErrorMessage: getTerminalErrorMessage(error),
71
+ };
72
+ }
73
+
74
+ async function captureHookError(
75
+ callback: (() => Promise<void> | void) | undefined,
76
+ ): Promise<unknown | null> {
77
+ if (!callback) {
78
+ return null;
79
+ }
80
+
81
+ try {
82
+ await callback();
83
+ return null;
84
+ } catch (error) {
85
+ return error;
86
+ }
87
+ }
88
+
89
+ async function runTerminalHooks<TRun, TChunk>(input: {
90
+ run: TRun;
91
+ terminalState: HostedLifecycleTerminalState;
92
+ adapter: HostedLifecycleAdapter<TRun, TChunk>;
93
+ }): Promise<void> {
94
+ let firstHookError: unknown | null = null;
95
+
96
+ const persistError = await captureHookError(() =>
97
+ input.adapter.persistTranscriptTerminalState?.(input.run, input.terminalState)
98
+ );
99
+ if (persistError) {
100
+ firstHookError = persistError;
101
+ }
102
+
103
+ const terminalObserverError = await captureHookError(() =>
104
+ input.adapter.onTerminalState?.(input.run, input.terminalState)
105
+ );
106
+ if (!firstHookError && terminalObserverError) {
107
+ firstHookError = terminalObserverError;
108
+ }
109
+
110
+ const terminalControlError = await captureHookError(() =>
111
+ input.terminalState.status === "cancelled"
112
+ ? input.adapter.cancelRun?.(input.run, input.terminalState)
113
+ : input.adapter.finalizeRun?.(input.run, input.terminalState)
114
+ );
115
+
116
+ if (firstHookError) {
117
+ throw firstHookError;
118
+ }
119
+
120
+ if (terminalControlError) {
121
+ throw terminalControlError;
122
+ }
123
+ }
124
+
125
+ export async function runHostedLifecycle<TRun, TChunk>(
126
+ options: HostedLifecycleRunnerOptions<TRun, TChunk>,
127
+ ): Promise<HostedLifecycleRunResult<TRun>> {
128
+ const run = await options.adapter.startRun({ abortSignal: options.abortSignal });
129
+
130
+ try {
131
+ for await (const chunk of options.execution.stream) {
132
+ await options.adapter.appendEvents?.(run, chunk);
133
+ await options.adapter.persistTranscriptChunk?.(run, chunk);
134
+ }
135
+
136
+ await options.execution.waitForFinish();
137
+ } catch (error) {
138
+ const terminalState = options.resolveErrorTerminalState
139
+ ? await options.resolveErrorTerminalState(error)
140
+ : defaultErrorTerminalState(options.abortSignal, error);
141
+
142
+ await runTerminalHooks({
143
+ run,
144
+ terminalState,
145
+ adapter: options.adapter,
146
+ }).catch(() => undefined);
147
+
148
+ throw error;
149
+ }
150
+
151
+ const terminalState = await options.resolveTerminalState();
152
+ await runTerminalHooks({
153
+ run,
154
+ terminalState,
155
+ adapter: options.adapter,
156
+ });
157
+
158
+ return { run, terminalState };
159
+ }
@@ -168,6 +168,7 @@ export {
168
168
  type AgUiBrowserEncoderState,
169
169
  type AgUiBrowserRunFinishedMetadata,
170
170
  type AgUiRuntimeStreamEvent,
171
+ buildAgUiBrowserFinalizeResponse,
171
172
  createAgUiBrowserEncoderState,
172
173
  finalizeAgUiBrowserEvents,
173
174
  mapRuntimeStreamEventToAgUiBrowserEvents,
@@ -179,6 +180,14 @@ export {
179
180
  createAgUiBrowserResponseStream,
180
181
  type CreateAgUiBrowserResponseStreamInput,
181
182
  } from "./ag-ui-browser-response-stream.js";
183
+ export {
184
+ type HostedLifecycleAdapter,
185
+ type HostedLifecycleExecution,
186
+ type HostedLifecycleRunnerOptions,
187
+ type HostedLifecycleRunResult,
188
+ type HostedLifecycleTerminalState,
189
+ runHostedLifecycle,
190
+ } from "./hosted-lifecycle.js";
182
191
  export {
183
192
  mergeToolCallInput,
184
193
  mergeToolInputDelta,
@@ -20,7 +20,15 @@ export function sendSSE(
20
20
  encoder: TextEncoder,
21
21
  event: Record<string, unknown>,
22
22
  ): void {
23
- controller.enqueue(encoder.encode(`data: ${JSON.stringify(event)}\n\n`));
23
+ try {
24
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify(event)}\n\n`));
25
+ } catch (error) {
26
+ if (isClosedStreamControllerError(error)) {
27
+ return;
28
+ }
29
+
30
+ throw error;
31
+ }
24
32
  }
25
33
 
26
34
  export function closeSSEStream(controller: ReadableStreamDefaultController): void {
@@ -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.227";
3
+ export const VERSION = "0.1.229";