veryfront 0.1.180 → 0.1.182

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.
@@ -1,17 +1,10 @@
1
- import * as dntShim from "../../_dnt.shims.js";
1
+ import { createAgUiBrowserEncoderState, finalizeAgUiBrowserEvents, mapRuntimeStreamEventToAgUiBrowserEvents, } from "../agent/ag-ui-browser-encoder.js";
2
2
  import { serverLogger } from "../utils/index.js";
3
3
  import { z } from "zod";
4
4
  const encoder = new TextEncoder();
5
5
  const logger = serverLogger.component("internal-agents-ag-ui-sse");
6
6
  export function createStreamTransformState() {
7
- return {
8
- messageId: null,
9
- textOpen: false,
10
- reasoningMessageId: null,
11
- sawVisibleOutput: false,
12
- sawTerminalError: false,
13
- metadata: {},
14
- };
7
+ return createAgUiBrowserEncoderState();
15
8
  }
16
9
  const agUiEventPayloadSchemas = {
17
10
  RunStarted: z.object({
@@ -53,6 +46,12 @@ const agUiEventPayloadSchemas = {
53
46
  ReasoningMessageEnd: z.object({
54
47
  messageId: z.string().min(1),
55
48
  }),
49
+ StepStarted: z.object({
50
+ stepName: z.string().min(1),
51
+ }),
52
+ StepFinished: z.object({
53
+ stepName: z.string().min(1),
54
+ }),
56
55
  ToolCallStart: z.object({
57
56
  toolCallId: z.string().min(1),
58
57
  toolCallName: z.string().min(1),
@@ -69,6 +68,10 @@ const agUiEventPayloadSchemas = {
69
68
  result: z.unknown(),
70
69
  isError: z.boolean().optional(),
71
70
  }),
71
+ Custom: z.object({
72
+ name: z.string().min(1),
73
+ value: z.unknown(),
74
+ }),
72
75
  RunError: z.object({
73
76
  code: z.string().min(1).optional(),
74
77
  message: z.string().min(1),
@@ -113,216 +116,9 @@ export function parseSseJsonEvents(chunk) {
113
116
  });
114
117
  return { events, remainder };
115
118
  }
116
- function getMessageId(state, event) {
117
- if (typeof event.messageId === "string") {
118
- state.messageId = event.messageId;
119
- return event.messageId;
120
- }
121
- if (!state.messageId && typeof event.id === "string") {
122
- state.messageId = event.id;
123
- }
124
- if (!state.messageId) {
125
- state.messageId = dntShim.crypto.randomUUID();
126
- }
127
- return state.messageId;
128
- }
129
- function getReasoningMessageId(state, event) {
130
- if (typeof event.id === "string" && event.id.length > 0) {
131
- state.reasoningMessageId = state.messageId
132
- ? `${state.messageId}:reasoning:${event.id}`
133
- : event.id;
134
- return state.reasoningMessageId;
135
- }
136
- if (!state.reasoningMessageId) {
137
- state.reasoningMessageId = state.messageId
138
- ? `${state.messageId}:reasoning:${dntShim.crypto.randomUUID()}`
139
- : dntShim.crypto.randomUUID();
140
- }
141
- return state.reasoningMessageId;
142
- }
143
- function applyDataMetadata(state, event) {
144
- const data = event.data && typeof event.data === "object" && !Array.isArray(event.data)
145
- ? event.data
146
- : event;
147
- if (typeof data.model === "string") {
148
- state.metadata.model = data.model;
149
- const provider = data.model.split("/")[0];
150
- if (provider) {
151
- state.metadata.provider = provider;
152
- }
153
- }
154
- }
155
- function applyResponseMetadata(state, response) {
156
- if (!response)
157
- return;
158
- if (response.usage) {
159
- state.metadata.inputTokens = response.usage.promptTokens;
160
- state.metadata.outputTokens = response.usage.completionTokens;
161
- state.metadata.totalTokens = response.usage.totalTokens;
162
- }
163
- const finishReason = response.metadata && typeof response.metadata === "object"
164
- ? response.metadata.finishReason
165
- : undefined;
166
- if (typeof finishReason === "string") {
167
- state.metadata.finishReason = finishReason;
168
- }
169
- }
170
119
  export function mapRuntimeEventToAgUi(state, event) {
171
- switch (event.type) {
172
- case "message-start":
173
- getMessageId(state, event);
174
- return [];
175
- case "text-start": {
176
- if (state.textOpen)
177
- return [];
178
- const messageId = getMessageId(state, event);
179
- state.textOpen = true;
180
- state.sawVisibleOutput = true;
181
- return [{
182
- event: "TextMessageStart",
183
- payload: { messageId, role: "assistant" },
184
- }];
185
- }
186
- case "text-delta": {
187
- const messageId = getMessageId(state, event);
188
- state.sawVisibleOutput = true;
189
- if (!state.textOpen) {
190
- state.textOpen = true;
191
- return [
192
- { event: "TextMessageStart", payload: { messageId, role: "assistant" } },
193
- {
194
- event: "TextMessageContent",
195
- payload: { messageId, delta: typeof event.delta === "string" ? event.delta : "" },
196
- },
197
- ];
198
- }
199
- return [{
200
- event: "TextMessageContent",
201
- payload: { messageId, delta: typeof event.delta === "string" ? event.delta : "" },
202
- }];
203
- }
204
- case "text-end": {
205
- if (!state.textOpen)
206
- return [];
207
- state.textOpen = false;
208
- return [{
209
- event: "TextMessageEnd",
210
- payload: { messageId: getMessageId(state, event) },
211
- }];
212
- }
213
- case "reasoning-start":
214
- state.sawVisibleOutput = true;
215
- return [{
216
- event: "ReasoningMessageStart",
217
- payload: { messageId: getReasoningMessageId(state, event), role: "reasoning" },
218
- }];
219
- case "reasoning-delta":
220
- state.sawVisibleOutput = true;
221
- return [{
222
- event: "ReasoningMessageContent",
223
- payload: {
224
- messageId: getReasoningMessageId(state, event),
225
- delta: typeof event.delta === "string" ? event.delta : "",
226
- },
227
- }];
228
- case "reasoning-end": {
229
- const messageId = getReasoningMessageId(state, event);
230
- state.reasoningMessageId = null;
231
- return [{
232
- event: "ReasoningMessageEnd",
233
- payload: { messageId },
234
- }];
235
- }
236
- case "tool-input-start":
237
- state.sawVisibleOutput = true;
238
- return [{
239
- event: "ToolCallStart",
240
- payload: {
241
- toolCallId: event.toolCallId,
242
- toolCallName: event.toolName,
243
- },
244
- }];
245
- case "tool-input-delta":
246
- state.sawVisibleOutput = true;
247
- return [{
248
- event: "ToolCallArgs",
249
- payload: {
250
- toolCallId: event.toolCallId,
251
- delta: typeof event.inputTextDelta === "string" ? event.inputTextDelta : "",
252
- },
253
- }];
254
- case "tool-input-available":
255
- state.sawVisibleOutput = true;
256
- return [{
257
- event: "ToolCallEnd",
258
- payload: { toolCallId: event.toolCallId },
259
- }];
260
- case "tool-output-available":
261
- state.sawVisibleOutput = true;
262
- return [{
263
- event: "ToolCallResult",
264
- payload: {
265
- toolCallId: event.toolCallId,
266
- result: event.output,
267
- },
268
- }];
269
- case "tool-output-error":
270
- state.sawVisibleOutput = true;
271
- return [{
272
- event: "ToolCallResult",
273
- payload: {
274
- toolCallId: event.toolCallId,
275
- result: { error: event.errorText },
276
- isError: true,
277
- },
278
- }];
279
- case "step-start":
280
- return [];
281
- case "step-end":
282
- return [];
283
- case "data":
284
- applyDataMetadata(state, event);
285
- return [];
286
- case "error":
287
- state.sawTerminalError = true;
288
- return [{
289
- event: "RunError",
290
- payload: {
291
- message: typeof event.error === "string" ? event.error : "Agent run failed",
292
- },
293
- }];
294
- default:
295
- return [];
296
- }
120
+ return mapRuntimeStreamEventToAgUiBrowserEvents(state, event);
297
121
  }
298
122
  export function finalizeRunEvents(state, response) {
299
- applyResponseMetadata(state, response);
300
- if (state.sawTerminalError) {
301
- return [];
302
- }
303
- if (!state.sawVisibleOutput) {
304
- state.sawTerminalError = true;
305
- return [{
306
- event: "RunError",
307
- payload: {
308
- code: "EMPTY_ASSISTANT_OUTPUT",
309
- message: "Agent run produced no assistant-visible output",
310
- },
311
- }];
312
- }
313
- const events = [];
314
- if (state.textOpen) {
315
- state.textOpen = false;
316
- events.push({
317
- event: "TextMessageEnd",
318
- payload: { messageId: getMessageId(state, { type: "text-end" }) },
319
- });
320
- }
321
- events.push({
322
- event: "RunFinished",
323
- payload: {
324
- metadata: state.metadata,
325
- },
326
- });
327
- return events;
123
+ return finalizeAgUiBrowserEvents(state, response);
328
124
  }
@@ -76,7 +76,10 @@ export declare class RenderPipeline {
76
76
  /** Resolve page data for SPA client-side navigation without rendering HTML. */
77
77
  resolvePageData(slug: string, options?: RenderOptions): Promise<PageDataResponse>;
78
78
  private extractMdxMetadata;
79
+ private serializeLayouts;
80
+ private serializeLayoutProps;
79
81
  private resolveAppPath;
82
+ private resolveProjectUpdatedAt;
80
83
  private resolvePageDataCss;
81
84
  private generatePageCssFromHtml;
82
85
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA6ChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,qBAAqB,EAAE,sBAAsB,CAAC;CAC1E;AAyBD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,MAAM,EAAE,oBAAoB;IAaxC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,sBAAsB;YAIhB,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IAyDnC;;;OAGG;YACW,mBAAmB;IAiGjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA+P9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YA+FzE,kBAAkB;YA2ClB,cAAc;YAWd,kBAAkB;YAmElB,uBAAuB;IAmBrC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAetB"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA6ChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,qBAAqB,EAAE,sBAAsB,CAAC;CAC1E;AAyBD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,MAAM,EAAE,oBAAoB;IAaxC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,sBAAsB;YAIhB,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IAyDnC;;;OAGG;YACW,mBAAmB;IAiGjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA+P9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YA+EzE,kBAAkB;IA2ChC,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,oBAAoB;YAYd,cAAc;IAW5B,OAAO,CAAC,uBAAuB;YAYjB,kBAAkB;YAmElB,uBAAuB;IAmBrC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAetB"}
@@ -407,24 +407,11 @@ export class RenderPipeline {
407
407
  const dataResolution = await this.resolveDataFetching(slug, pageInfo.entity.path, layoutResult.nestedLayouts, options);
408
408
  const pageProps = dataResolution.pageProps;
409
409
  const params = dataResolution.params;
410
- const layoutProps = {};
411
- for (const [layoutId, props] of dataResolution.layoutProps.entries()) {
412
- layoutProps[layoutId] = props;
413
- }
410
+ const layoutProps = this.serializeLayoutProps(dataResolution.layoutProps);
414
411
  const { frontmatter, headings } = await this.extractMdxMetadata(pageType, pageInfo, slug, options, params);
415
- const layouts = layoutResult.nestedLayouts
416
- .filter((l) => l.componentPath || l.path)
417
- .map((l) => ({
418
- kind: l.kind,
419
- path: extractRelativePathShared(l.componentPath || l.path || "", this.config.projectDir),
420
- }));
412
+ const layouts = this.serializeLayouts(layoutResult.nestedLayouts);
421
413
  const providers = [];
422
- let projectUpdatedAt;
423
- const fs = this.config.adapter?.fs;
424
- if (fs && isExtendedFSAdapter(fs) && fs.isVeryfrontAdapter()) {
425
- const wrappedAdapter = fs.getUnderlyingAdapter();
426
- projectUpdatedAt = wrappedAdapter.getProjectData?.()?.updated_at;
427
- }
414
+ const projectUpdatedAt = this.resolveProjectUpdatedAt();
428
415
  const appPath = await this.resolveAppPath();
429
416
  const { css, cssError } = await this.resolvePageDataCss(slug, options, projectUpdatedAt);
430
417
  resolvePageDataLog.debug("Resolved page data", {
@@ -482,6 +469,21 @@ export class RenderPipeline {
482
469
  return { frontmatter: {}, headings: [] };
483
470
  }
484
471
  }
472
+ serializeLayouts(nestedLayouts) {
473
+ return nestedLayouts
474
+ .filter((layout) => layout.componentPath || layout.path)
475
+ .map((layout) => ({
476
+ kind: layout.kind,
477
+ path: extractRelativePathShared(layout.componentPath || layout.path || "", this.config.projectDir),
478
+ }));
479
+ }
480
+ serializeLayoutProps(layoutProps) {
481
+ const serialized = {};
482
+ for (const [layoutId, props] of layoutProps.entries()) {
483
+ serialized[layoutId] = props;
484
+ }
485
+ return serialized;
486
+ }
485
487
  async resolveAppPath() {
486
488
  for (const ext of LAYOUT_EXTENSIONS) {
487
489
  const candidatePath = join(this.config.projectDir, `components/app.${ext}`);
@@ -491,6 +493,14 @@ export class RenderPipeline {
491
493
  }
492
494
  return undefined;
493
495
  }
496
+ resolveProjectUpdatedAt() {
497
+ const fs = this.config.adapter?.fs;
498
+ if (!fs || !isExtendedFSAdapter(fs) || !fs.isVeryfrontAdapter()) {
499
+ return undefined;
500
+ }
501
+ const wrappedAdapter = fs.getUnderlyingAdapter();
502
+ return wrappedAdapter.getProjectData?.()?.updated_at;
503
+ }
494
504
  async resolvePageDataCss(slug, options, projectUpdatedAt) {
495
505
  const cssCacheKey = getPageCssCacheKey(options?.projectId, options?.environment, slug, projectUpdatedAt);
496
506
  const cachedCss = getCachedPageCss(cssCacheKey);
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.180";
1
+ export declare const VERSION = "0.1.182";
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.180";
3
+ export const VERSION = "0.1.182";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.180",
3
+ "version": "0.1.182",
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.180",
3
+ "version": "0.1.182",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [