veryfront 0.1.167 → 0.1.170

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.167",
3
+ "version": "0.1.170",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [
@@ -1 +1 @@
1
- {"version":3,"file":"chat-stream-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/chat-stream-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAqB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAWtF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1C,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,KAAK,IAAI,CAAC;CACZ;AA4FD,wBAAgB,iBAAiB,IAAI,eAAe,CAQnD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,+BAA+B,EAC3C,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,CAAC,EAAE,mBAAmB,EAC/B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC,CA0Nf"}
1
+ {"version":3,"file":"chat-stream-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/chat-stream-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAqB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAWtF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1C,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,KAAK,IAAI,CAAC;CACZ;AA4FD,wBAAgB,iBAAiB,IAAI,eAAe,CAQnD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,+BAA+B,EAC3C,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,CAAC,EAAE,mBAAmB,EAC/B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC,CAmPf"}
@@ -121,6 +121,28 @@ export function processStream(result, state, controller, encoder, textPartId, ca
121
121
  callbacks?.onChunk?.(typedPart.text);
122
122
  break;
123
123
  }
124
+ case "reasoning-start": {
125
+ sendSSE(controller, encoder, {
126
+ type: "reasoning-start",
127
+ id: typeof typedPart.id === "string" ? typedPart.id : "reasoning",
128
+ });
129
+ break;
130
+ }
131
+ case "reasoning-delta": {
132
+ sendSSE(controller, encoder, {
133
+ type: "reasoning-delta",
134
+ id: typeof typedPart.id === "string" ? typedPart.id : "reasoning",
135
+ delta: typeof typedPart.delta === "string" ? typedPart.delta : "",
136
+ });
137
+ break;
138
+ }
139
+ case "reasoning-end": {
140
+ sendSSE(controller, encoder, {
141
+ type: "reasoning-end",
142
+ id: typeof typedPart.id === "string" ? typedPart.id : "reasoning",
143
+ });
144
+ break;
145
+ }
124
146
  case "tool-input-start": {
125
147
  const toolId = typedPart.id;
126
148
  state.toolCalls.set(toolId, {
@@ -48,6 +48,16 @@ export type RuntimeToolCallRepairFunction = (context: RuntimeToolCallRepairConte
48
48
  export type RuntimeStreamPart = {
49
49
  type: "text-delta";
50
50
  text: string;
51
+ } | {
52
+ type: "reasoning-start";
53
+ id: string;
54
+ } | {
55
+ type: "reasoning-delta";
56
+ id: string;
57
+ delta: string;
58
+ } | {
59
+ type: "reasoning-end";
60
+ id: string;
51
61
  } | {
52
62
  type: "tool-input-start";
53
63
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-tool-types.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/runtime-tool-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACtC,WAAW,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAC1C,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IAC7C,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,MAAM,MAAM,6BAA6B,GAAG,CAC1C,OAAO,EAAE,4BAA4B,KAClC,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,qBAAqB,GAAG,IAAI,CAAC;AAE1E,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IACA,IAAI,EAAE,kBAAkB,CAAC;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvD;IACA,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACC;IACA,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACC;IACA,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACC;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE;QACX,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,IAAI,CAAC;CACV,GACC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACnC"}
1
+ {"version":3,"file":"runtime-tool-types.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/runtime-tool-types.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ export interface RunFinishedMetadata {
13
13
  export interface StreamTransformState {
14
14
  messageId: string | null;
15
15
  textOpen: boolean;
16
+ reasoningMessageId: string | null;
16
17
  sawVisibleOutput: boolean;
17
18
  sawTerminalError: boolean;
18
19
  metadata: RunFinishedMetadata;
@@ -1 +1 @@
1
- {"version":3,"file":"ag-ui-sse.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/ag-ui-sse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOvD,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,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,oBAAoB;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED,wBAAgB,0BAA0B,IAAI,oBAAoB,CAQjE;AAiED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAI3F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG;IACjD,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB,CAyBA;AAkDD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,gBAAgB,GACtB,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAoH5D;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,aAAa,GAAG,IAAI,GAC7B,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAmC5D"}
1
+ {"version":3,"file":"ag-ui-sse.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/ag-ui-sse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOvD,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,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,oBAAoB;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED,wBAAgB,0BAA0B,IAAI,oBAAoB,CASjE;AA4ED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAI3F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG;IACjD,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB,CAyBA;AAmED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,gBAAgB,GACtB,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CA8I5D;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,aAAa,GAAG,IAAI,GAC7B,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAmC5D"}
@@ -7,6 +7,7 @@ export function createStreamTransformState() {
7
7
  return {
8
8
  messageId: null,
9
9
  textOpen: false,
10
+ reasoningMessageId: null,
10
11
  sawVisibleOutput: false,
11
12
  sawTerminalError: false,
12
13
  metadata: {},
@@ -41,6 +42,17 @@ const agUiEventPayloadSchemas = {
41
42
  TextMessageEnd: z.object({
42
43
  messageId: z.string().min(1),
43
44
  }),
45
+ ReasoningMessageStart: z.object({
46
+ messageId: z.string().min(1),
47
+ role: z.literal("reasoning"),
48
+ }),
49
+ ReasoningMessageContent: z.object({
50
+ messageId: z.string().min(1),
51
+ delta: z.string(),
52
+ }),
53
+ ReasoningMessageEnd: z.object({
54
+ messageId: z.string().min(1),
55
+ }),
44
56
  ToolCallStart: z.object({
45
57
  toolCallId: z.string().min(1),
46
58
  toolCallName: z.string().min(1),
@@ -114,6 +126,20 @@ function getMessageId(state, event) {
114
126
  }
115
127
  return state.messageId;
116
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
+ }
117
143
  function applyDataMetadata(state, event) {
118
144
  const data = event.data && typeof event.data === "object" && !Array.isArray(event.data)
119
145
  ? event.data
@@ -184,6 +210,29 @@ export function mapRuntimeEventToAgUi(state, event) {
184
210
  payload: { messageId: getMessageId(state, event) },
185
211
  }];
186
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
+ }
187
236
  case "tool-input-start":
188
237
  state.sawVisibleOutput = true;
189
238
  return [{
@@ -9,4 +9,7 @@ export declare function loadVeryfrontExportsMap(projectDir: string, fs: FileSyst
9
9
  }>>;
10
10
  export declare function rewriteNodeExternalImports(code: string, projectDir: string, fs: FileSystem, userDeps: Map<string, string>): Promise<string>;
11
11
  export declare function rewriteCompiledBinaryVeryfrontImports(code: string): string;
12
+ export declare function rewriteCompiledBinaryUserDependencyImports(code: string, userDeps: Map<string, string>): string;
13
+ export declare function rewriteDenoNpmDependencyImports(code: string, projectDir: string, fs: FileSystem, userDeps: Map<string, string>): Promise<string>;
14
+ export declare function rewriteDenoNodeBuiltinImports(code: string): string;
12
15
  //# sourceMappingURL=loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../../src/src/routing/api/module-loader/loader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAI9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AA4KjE,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAejE;AAgBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAyBtF;AAuaD,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAUxF;AAED,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,UAAU,EACd,aAAa,EAAE,cAAc,UAAU,EAAE,aAAa,GACrD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBxB;AAED,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,UAAU,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAW9C;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CA6EjB;AAED,wBAAgB,qCAAqC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqB1E"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../../src/src/routing/api/module-loader/loader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAI9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AA4KjE,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAejE;AAgBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAyBtF;AAuaD,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAUxF;AAED,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,UAAU,EACd,aAAa,EAAE,cAAc,UAAU,EAAE,aAAa,GACrD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBxB;AAED,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,UAAU,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAW9C;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CA6EjB;AAED,wBAAgB,qCAAqC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqB1E;AAED,wBAAgB,0CAA0C,CACxD,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM,CAoDR;AAED,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBlE"}
@@ -623,6 +623,60 @@ export function rewriteCompiledBinaryVeryfrontImports(code) {
623
623
  transformed = transformed.replace(/import\s*\(\s*["']veryfront\/([^"']+)["']\s*\)/g, (_match, subpath) => `import("./_vf_${subpath.replace(/\//g, "_")}.mjs")`);
624
624
  return transformed;
625
625
  }
626
+ export function rewriteCompiledBinaryUserDependencyImports(code, userDeps) {
627
+ let transformed = code;
628
+ for (const name of userDeps.keys()) {
629
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
630
+ transformed = transformed.replace(new RegExp(`import\\s+(\\w+)\\s+from\\s+["']${escaped}["']`, "g"), (_, localName) => `const ${localName} = __vf_interopDefault(require("${name}"))`);
631
+ transformed = transformed.replace(new RegExp(`import\\s+(\\{[^}]+\\})\\s+from\\s+["']${escaped}["']`, "g"), (_, bindings) => `const ${toCjsDestructureBindings(bindings)} = require("${name}")`);
632
+ transformed = transformed.replace(new RegExp(`import\\s+\\*\\s+as\\s+(\\w+)\\s+from\\s+["']${escaped}["']`, "g"), (_, localName) => `const ${localName} = require("${name}")`);
633
+ transformed = transformed.replace(new RegExp(`import\\s+(\\w+)\\s*,\\s*(\\{[^}]+\\})\\s+from\\s+["']${escaped}["']`, "g"), (_, defaultName, bindings) => {
634
+ const tmp = `__vf_tmp_${defaultName}`;
635
+ return `const ${tmp} = require("${name}"); const ${defaultName} = __vf_interopDefault(${tmp}); const ${toCjsDestructureBindings(bindings)} = ${tmp}`;
636
+ });
637
+ transformed = transformed.replace(new RegExp(`import\\s+(\\w+|\\*\\s+as\\s+\\w+|\\{[^}]+\\})\\s+from\\s+["']${escaped}(/[^"']+)["']`, "g"), (_, binding, subpath) => {
638
+ const trimmedBinding = String(binding).trim();
639
+ if (trimmedBinding.startsWith("{")) {
640
+ return `const ${toCjsDestructureBindings(trimmedBinding)} = require("${name}${subpath}")`;
641
+ }
642
+ const name_ = trimmedBinding.startsWith("*")
643
+ ? trimmedBinding.replace(/\*\s+as\s+/, "")
644
+ : trimmedBinding;
645
+ return `const ${name_} = require("${name}${subpath}")`;
646
+ });
647
+ transformed = transformed.replace(new RegExp(`import\\s*\\(\\s*["']${escaped}(/[^"']*)?["']\\s*\\)`, "g"), (_, subpath) => `Promise.resolve(require("${name}${subpath || ""}"))`);
648
+ }
649
+ return transformed;
650
+ }
651
+ export async function rewriteDenoNpmDependencyImports(code, projectDir, fs, userDeps) {
652
+ let transformed = code;
653
+ for (const [name, version] of userDeps) {
654
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
655
+ let resolvedVersion = version;
656
+ try {
657
+ const pkgPath = pathHelper.join(projectDir, "node_modules", name, "package.json");
658
+ const pkgContent = await fs.readTextFile(pkgPath);
659
+ const pkg = JSON.parse(pkgContent);
660
+ if (pkg.version)
661
+ resolvedVersion = pkg.version;
662
+ }
663
+ catch (_) {
664
+ /* expected: installed package.json may not exist, fall back to declared range */
665
+ }
666
+ transformed = transformed.replace(new RegExp(`from\\s+["']${escaped}(/[^"']*)?["']`, "g"), (_, subpath) => `from "npm:${name}@${resolvedVersion}${subpath || ""}"`);
667
+ transformed = transformed.replace(new RegExp(`import\\s*\\(\\s*["']${escaped}(/[^"']*)?["']\\s*\\)`, "g"), (_, subpath) => `import("npm:${name}@${resolvedVersion}${subpath || ""}")`);
668
+ }
669
+ return transformed;
670
+ }
671
+ export function rewriteDenoNodeBuiltinImports(code) {
672
+ let transformed = code;
673
+ for (const mod of NODE_BUILTINS) {
674
+ const escaped = mod.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
675
+ transformed = transformed.replace(new RegExp(`from\\s+["']${escaped}["']`, "g"), `from "node:${mod}"`);
676
+ transformed = transformed.replace(new RegExp(`import\\s*\\(\\s*["']${escaped}["']\\s*\\)`, "g"), `import("node:${mod}")`);
677
+ }
678
+ return transformed;
679
+ }
626
680
  async function rewriteExternalImports(code, projectDir, fs, userDeps = new Map()) {
627
681
  let transformed = code;
628
682
  if (isNode) {
@@ -635,68 +689,17 @@ async function rewriteExternalImports(code, projectDir, fs, userDeps = new Map()
635
689
  }
636
690
  if (isDeno) {
637
691
  transformed = rewriteNpmImports(transformed);
638
- // Rewrite bare Node.js built-in imports to node: prefix for Deno compatibility.
639
- // npm packages often use require('fs') / from "fs" without the node: prefix.
640
- for (const mod of NODE_BUILTINS) {
641
- const escaped = mod.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
642
- transformed = transformed.replace(new RegExp(`from\\s+["']${escaped}["']`, "g"), `from "node:${mod}"`);
643
- transformed = transformed.replace(new RegExp(`import\\s*\\(\\s*["']${escaped}["']\\s*\\)`, "g"), `import("node:${mod}")`);
644
- }
692
+ transformed = rewriteDenoNodeBuiltinImports(transformed);
645
693
  // Rewrite user-installed npm dependencies.
646
694
  // In non-compiled Deno: use npm: specifiers (resolved by Deno's npm support).
647
695
  // In compiled binaries: use the createRequire-based `require` shim (already
648
696
  // injected by the esbuild banner) to load CJS packages from node_modules,
649
697
  // since npm: specifiers only work for packages embedded at compile time.
650
698
  if (isCompiledBinary()) {
651
- for (const name of userDeps.keys()) {
652
- const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
653
- // Default imports: import foo from "pkg" → const foo = __vf_interopDefault(require("pkg"))
654
- // interopDefault unwraps .default for ESM packages transpiled to CJS
655
- transformed = transformed.replace(new RegExp(`import\\s+(\\w+)\\s+from\\s+["']${escaped}["']`, "g"), (_, localName) => `const ${localName} = __vf_interopDefault(require("${name}"))`);
656
- // Named imports: import { a, b } from "pkg" → const { a, b } = require("pkg")
657
- transformed = transformed.replace(new RegExp(`import\\s+(\\{[^}]+\\})\\s+from\\s+["']${escaped}["']`, "g"), (_, bindings) => `const ${toCjsDestructureBindings(bindings)} = require("${name}")`);
658
- // Namespace imports: import * as foo from "pkg" → const foo = require("pkg")
659
- transformed = transformed.replace(new RegExp(`import\\s+\\*\\s+as\\s+(\\w+)\\s+from\\s+["']${escaped}["']`, "g"), (_, localName) => `const ${localName} = require("${name}")`);
660
- // Mixed imports: import foo, { bar } from "pkg"
661
- transformed = transformed.replace(new RegExp(`import\\s+(\\w+)\\s*,\\s*(\\{[^}]+\\})\\s+from\\s+["']${escaped}["']`, "g"), (_, defaultName, bindings) => {
662
- const tmp = `__vf_tmp_${defaultName}`;
663
- return `const ${tmp} = require("${name}"); const ${defaultName} = __vf_interopDefault(${tmp}); const ${toCjsDestructureBindings(bindings)} = ${tmp}`;
664
- });
665
- // Subpath static imports: from "pkg/sub" → require("pkg/sub")
666
- transformed = transformed.replace(new RegExp(`import\\s+(\\w+|\\*\\s+as\\s+\\w+|\\{[^}]+\\})\\s+from\\s+["']${escaped}(/[^"']+)["']`, "g"), (_, binding, subpath) => {
667
- const trimmedBinding = String(binding).trim();
668
- if (trimmedBinding.startsWith("{")) {
669
- return `const ${toCjsDestructureBindings(trimmedBinding)} = require("${name}${subpath}")`;
670
- }
671
- const name_ = trimmedBinding.startsWith("*")
672
- ? trimmedBinding.replace(/\*\s+as\s+/, "")
673
- : trimmedBinding;
674
- return `const ${name_} = require("${name}${subpath}")`;
675
- });
676
- // Dynamic imports: import("pkg") → Promise.resolve(require("pkg"))
677
- transformed = transformed.replace(new RegExp(`import\\s*\\(\\s*["']${escaped}(/[^"']*)?["']\\s*\\)`, "g"), (_, subpath) => `Promise.resolve(require("${name}${subpath || ""}"))`);
678
- }
699
+ transformed = rewriteCompiledBinaryUserDependencyImports(transformed, userDeps);
679
700
  }
680
701
  else {
681
- for (const [name, version] of userDeps) {
682
- const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
683
- // Resolve exact installed version from node_modules (falls back to range)
684
- let resolvedVersion = version;
685
- try {
686
- const pkgPath = pathHelper.join(projectDir, "node_modules", name, "package.json");
687
- const pkgContent = await fs.readTextFile(pkgPath);
688
- const pkg = JSON.parse(pkgContent);
689
- if (pkg.version)
690
- resolvedVersion = pkg.version;
691
- }
692
- catch (_) {
693
- /* expected: installed package.json may not exist, fall back to declared range */
694
- }
695
- // Static: from "pkg" and from "pkg/sub"
696
- transformed = transformed.replace(new RegExp(`from\\s+["']${escaped}(/[^"']*)?["']`, "g"), (_, subpath) => `from "npm:${name}@${resolvedVersion}${subpath || ""}"`);
697
- // Dynamic: import("pkg") and import("pkg/sub")
698
- transformed = transformed.replace(new RegExp(`import\\s*\\(\\s*["']${escaped}(/[^"']*)?["']\\s*\\)`, "g"), (_, subpath) => `import("npm:${name}@${resolvedVersion}${subpath || ""}")`);
699
- }
702
+ transformed = await rewriteDenoNpmDependencyImports(transformed, projectDir, fs, userDeps);
700
703
  }
701
704
  // In compiled binaries, "veryfront" resolves to embedded source that can't be
702
705
  // imported from external temp files. Rewrite to use local runtime shims.
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.167";
1
+ export declare const VERSION = "0.1.170";
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.167";
3
+ export const VERSION = "0.1.170";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.167",
3
+ "version": "0.1.170",
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.167",
3
+ "version": "0.1.170",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [
@@ -200,6 +200,31 @@ export function processStream(
200
200
  break;
201
201
  }
202
202
 
203
+ case "reasoning-start": {
204
+ sendSSE(controller, encoder, {
205
+ type: "reasoning-start",
206
+ id: typeof typedPart.id === "string" ? typedPart.id : "reasoning",
207
+ });
208
+ break;
209
+ }
210
+
211
+ case "reasoning-delta": {
212
+ sendSSE(controller, encoder, {
213
+ type: "reasoning-delta",
214
+ id: typeof typedPart.id === "string" ? typedPart.id : "reasoning",
215
+ delta: typeof typedPart.delta === "string" ? typedPart.delta : "",
216
+ });
217
+ break;
218
+ }
219
+
220
+ case "reasoning-end": {
221
+ sendSSE(controller, encoder, {
222
+ type: "reasoning-end",
223
+ id: typeof typedPart.id === "string" ? typedPart.id : "reasoning",
224
+ });
225
+ break;
226
+ }
227
+
203
228
  case "tool-input-start": {
204
229
  const toolId = typedPart.id;
205
230
  state.toolCalls.set(toolId, {
@@ -59,6 +59,9 @@ export type RuntimeToolCallRepairFunction = (
59
59
 
60
60
  export type RuntimeStreamPart =
61
61
  | { type: "text-delta"; text: string }
62
+ | { type: "reasoning-start"; id: string }
63
+ | { type: "reasoning-delta"; id: string; delta: string }
64
+ | { type: "reasoning-end"; id: string }
62
65
  | {
63
66
  type: "tool-input-start";
64
67
  id: string;
@@ -20,6 +20,7 @@ export interface RunFinishedMetadata {
20
20
  export interface StreamTransformState {
21
21
  messageId: string | null;
22
22
  textOpen: boolean;
23
+ reasoningMessageId: string | null;
23
24
  sawVisibleOutput: boolean;
24
25
  sawTerminalError: boolean;
25
26
  metadata: RunFinishedMetadata;
@@ -29,6 +30,7 @@ export function createStreamTransformState(): StreamTransformState {
29
30
  return {
30
31
  messageId: null,
31
32
  textOpen: false,
33
+ reasoningMessageId: null,
32
34
  sawVisibleOutput: false,
33
35
  sawTerminalError: false,
34
36
  metadata: {},
@@ -64,6 +66,17 @@ const agUiEventPayloadSchemas = {
64
66
  TextMessageEnd: z.object({
65
67
  messageId: z.string().min(1),
66
68
  }),
69
+ ReasoningMessageStart: z.object({
70
+ messageId: z.string().min(1),
71
+ role: z.literal("reasoning"),
72
+ }),
73
+ ReasoningMessageContent: z.object({
74
+ messageId: z.string().min(1),
75
+ delta: z.string(),
76
+ }),
77
+ ReasoningMessageEnd: z.object({
78
+ messageId: z.string().min(1),
79
+ }),
67
80
  ToolCallStart: z.object({
68
81
  toolCallId: z.string().min(1),
69
82
  toolCallName: z.string().min(1),
@@ -151,6 +164,23 @@ function getMessageId(state: StreamTransformState, event: RuntimeDataEvent): str
151
164
  return state.messageId;
152
165
  }
153
166
 
167
+ function getReasoningMessageId(state: StreamTransformState, event: RuntimeDataEvent): string {
168
+ if (typeof event.id === "string" && event.id.length > 0) {
169
+ state.reasoningMessageId = state.messageId
170
+ ? `${state.messageId}:reasoning:${event.id}`
171
+ : event.id;
172
+ return state.reasoningMessageId;
173
+ }
174
+
175
+ if (!state.reasoningMessageId) {
176
+ state.reasoningMessageId = state.messageId
177
+ ? `${state.messageId}:reasoning:${dntShim.crypto.randomUUID()}`
178
+ : dntShim.crypto.randomUUID();
179
+ }
180
+
181
+ return state.reasoningMessageId;
182
+ }
183
+
154
184
  function applyDataMetadata(state: StreamTransformState, event: RuntimeDataEvent): void {
155
185
  const data = event.data && typeof event.data === "object" && !Array.isArray(event.data)
156
186
  ? event.data as Record<string, unknown>
@@ -231,6 +261,32 @@ export function mapRuntimeEventToAgUi(
231
261
  }];
232
262
  }
233
263
 
264
+ case "reasoning-start":
265
+ state.sawVisibleOutput = true;
266
+ return [{
267
+ event: "ReasoningMessageStart",
268
+ payload: { messageId: getReasoningMessageId(state, event), role: "reasoning" },
269
+ }];
270
+
271
+ case "reasoning-delta":
272
+ state.sawVisibleOutput = true;
273
+ return [{
274
+ event: "ReasoningMessageContent",
275
+ payload: {
276
+ messageId: getReasoningMessageId(state, event),
277
+ delta: typeof event.delta === "string" ? event.delta : "",
278
+ },
279
+ }];
280
+
281
+ case "reasoning-end": {
282
+ const messageId = getReasoningMessageId(state, event);
283
+ state.reasoningMessageId = null;
284
+ return [{
285
+ event: "ReasoningMessageEnd",
286
+ payload: { messageId },
287
+ }];
288
+ }
289
+
234
290
  case "tool-input-start":
235
291
  state.sawVisibleOutput = true;
236
292
  return [{
@@ -823,6 +823,114 @@ export function rewriteCompiledBinaryVeryfrontImports(code: string): string {
823
823
  return transformed;
824
824
  }
825
825
 
826
+ export function rewriteCompiledBinaryUserDependencyImports(
827
+ code: string,
828
+ userDeps: Map<string, string>,
829
+ ): string {
830
+ let transformed = code;
831
+
832
+ for (const name of userDeps.keys()) {
833
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
834
+ transformed = transformed.replace(
835
+ new RegExp(`import\\s+(\\w+)\\s+from\\s+["']${escaped}["']`, "g"),
836
+ (_, localName) => `const ${localName} = __vf_interopDefault(require("${name}"))`,
837
+ );
838
+ transformed = transformed.replace(
839
+ new RegExp(`import\\s+(\\{[^}]+\\})\\s+from\\s+["']${escaped}["']`, "g"),
840
+ (_, bindings) => `const ${toCjsDestructureBindings(bindings)} = require("${name}")`,
841
+ );
842
+ transformed = transformed.replace(
843
+ new RegExp(`import\\s+\\*\\s+as\\s+(\\w+)\\s+from\\s+["']${escaped}["']`, "g"),
844
+ (_, localName) => `const ${localName} = require("${name}")`,
845
+ );
846
+ transformed = transformed.replace(
847
+ new RegExp(
848
+ `import\\s+(\\w+)\\s*,\\s*(\\{[^}]+\\})\\s+from\\s+["']${escaped}["']`,
849
+ "g",
850
+ ),
851
+ (_, defaultName, bindings) => {
852
+ const tmp = `__vf_tmp_${defaultName}`;
853
+ return `const ${tmp} = require("${name}"); const ${defaultName} = __vf_interopDefault(${tmp}); const ${
854
+ toCjsDestructureBindings(bindings)
855
+ } = ${tmp}`;
856
+ },
857
+ );
858
+ transformed = transformed.replace(
859
+ new RegExp(
860
+ `import\\s+(\\w+|\\*\\s+as\\s+\\w+|\\{[^}]+\\})\\s+from\\s+["']${escaped}(/[^"']+)["']`,
861
+ "g",
862
+ ),
863
+ (_, binding, subpath) => {
864
+ const trimmedBinding = String(binding).trim();
865
+ if (trimmedBinding.startsWith("{")) {
866
+ return `const ${toCjsDestructureBindings(trimmedBinding)} = require("${name}${subpath}")`;
867
+ }
868
+ const name_ = trimmedBinding.startsWith("*")
869
+ ? trimmedBinding.replace(/\*\s+as\s+/, "")
870
+ : trimmedBinding;
871
+ return `const ${name_} = require("${name}${subpath}")`;
872
+ },
873
+ );
874
+ transformed = transformed.replace(
875
+ new RegExp(`import\\s*\\(\\s*["']${escaped}(/[^"']*)?["']\\s*\\)`, "g"),
876
+ (_, subpath) => `Promise.resolve(require("${name}${subpath || ""}"))`,
877
+ );
878
+ }
879
+
880
+ return transformed;
881
+ }
882
+
883
+ export async function rewriteDenoNpmDependencyImports(
884
+ code: string,
885
+ projectDir: string,
886
+ fs: FileSystem,
887
+ userDeps: Map<string, string>,
888
+ ): Promise<string> {
889
+ let transformed = code;
890
+
891
+ for (const [name, version] of userDeps) {
892
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
893
+ let resolvedVersion = version;
894
+ try {
895
+ const pkgPath = pathHelper.join(projectDir, "node_modules", name, "package.json");
896
+ const pkgContent = await fs.readTextFile(pkgPath);
897
+ const pkg = JSON.parse(pkgContent) as { version?: string };
898
+ if (pkg.version) resolvedVersion = pkg.version;
899
+ } catch (_) {
900
+ /* expected: installed package.json may not exist, fall back to declared range */
901
+ }
902
+
903
+ transformed = transformed.replace(
904
+ new RegExp(`from\\s+["']${escaped}(/[^"']*)?["']`, "g"),
905
+ (_, subpath) => `from "npm:${name}@${resolvedVersion}${subpath || ""}"`,
906
+ );
907
+ transformed = transformed.replace(
908
+ new RegExp(`import\\s*\\(\\s*["']${escaped}(/[^"']*)?["']\\s*\\)`, "g"),
909
+ (_, subpath) => `import("npm:${name}@${resolvedVersion}${subpath || ""}")`,
910
+ );
911
+ }
912
+
913
+ return transformed;
914
+ }
915
+
916
+ export function rewriteDenoNodeBuiltinImports(code: string): string {
917
+ let transformed = code;
918
+
919
+ for (const mod of NODE_BUILTINS) {
920
+ const escaped = mod.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
921
+ transformed = transformed.replace(
922
+ new RegExp(`from\\s+["']${escaped}["']`, "g"),
923
+ `from "node:${mod}"`,
924
+ );
925
+ transformed = transformed.replace(
926
+ new RegExp(`import\\s*\\(\\s*["']${escaped}["']\\s*\\)`, "g"),
927
+ `import("node:${mod}")`,
928
+ );
929
+ }
930
+
931
+ return transformed;
932
+ }
933
+
826
934
  async function rewriteExternalImports(
827
935
  code: string,
828
936
  projectDir: string,
@@ -841,20 +949,7 @@ async function rewriteExternalImports(
841
949
 
842
950
  if (isDeno) {
843
951
  transformed = rewriteNpmImports(transformed);
844
-
845
- // Rewrite bare Node.js built-in imports to node: prefix for Deno compatibility.
846
- // npm packages often use require('fs') / from "fs" without the node: prefix.
847
- for (const mod of NODE_BUILTINS) {
848
- const escaped = mod.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
849
- transformed = transformed.replace(
850
- new RegExp(`from\\s+["']${escaped}["']`, "g"),
851
- `from "node:${mod}"`,
852
- );
853
- transformed = transformed.replace(
854
- new RegExp(`import\\s*\\(\\s*["']${escaped}["']\\s*\\)`, "g"),
855
- `import("node:${mod}")`,
856
- );
857
- }
952
+ transformed = rewriteDenoNodeBuiltinImports(transformed);
858
953
 
859
954
  // Rewrite user-installed npm dependencies.
860
955
  // In non-compiled Deno: use npm: specifiers (resolved by Deno's npm support).
@@ -862,86 +957,9 @@ async function rewriteExternalImports(
862
957
  // injected by the esbuild banner) to load CJS packages from node_modules,
863
958
  // since npm: specifiers only work for packages embedded at compile time.
864
959
  if (isCompiledBinary()) {
865
- for (const name of userDeps.keys()) {
866
- const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
867
- // Default imports: import foo from "pkg" → const foo = __vf_interopDefault(require("pkg"))
868
- // interopDefault unwraps .default for ESM packages transpiled to CJS
869
- transformed = transformed.replace(
870
- new RegExp(`import\\s+(\\w+)\\s+from\\s+["']${escaped}["']`, "g"),
871
- (_, localName) => `const ${localName} = __vf_interopDefault(require("${name}"))`,
872
- );
873
- // Named imports: import { a, b } from "pkg" → const { a, b } = require("pkg")
874
- transformed = transformed.replace(
875
- new RegExp(`import\\s+(\\{[^}]+\\})\\s+from\\s+["']${escaped}["']`, "g"),
876
- (_, bindings) => `const ${toCjsDestructureBindings(bindings)} = require("${name}")`,
877
- );
878
- // Namespace imports: import * as foo from "pkg" → const foo = require("pkg")
879
- transformed = transformed.replace(
880
- new RegExp(`import\\s+\\*\\s+as\\s+(\\w+)\\s+from\\s+["']${escaped}["']`, "g"),
881
- (_, localName) => `const ${localName} = require("${name}")`,
882
- );
883
- // Mixed imports: import foo, { bar } from "pkg"
884
- transformed = transformed.replace(
885
- new RegExp(
886
- `import\\s+(\\w+)\\s*,\\s*(\\{[^}]+\\})\\s+from\\s+["']${escaped}["']`,
887
- "g",
888
- ),
889
- (_, defaultName, bindings) => {
890
- const tmp = `__vf_tmp_${defaultName}`;
891
- return `const ${tmp} = require("${name}"); const ${defaultName} = __vf_interopDefault(${tmp}); const ${
892
- toCjsDestructureBindings(bindings)
893
- } = ${tmp}`;
894
- },
895
- );
896
- // Subpath static imports: from "pkg/sub" → require("pkg/sub")
897
- transformed = transformed.replace(
898
- new RegExp(
899
- `import\\s+(\\w+|\\*\\s+as\\s+\\w+|\\{[^}]+\\})\\s+from\\s+["']${escaped}(/[^"']+)["']`,
900
- "g",
901
- ),
902
- (_, binding, subpath) => {
903
- const trimmedBinding = String(binding).trim();
904
- if (trimmedBinding.startsWith("{")) {
905
- return `const ${
906
- toCjsDestructureBindings(trimmedBinding)
907
- } = require("${name}${subpath}")`;
908
- }
909
- const name_ = trimmedBinding.startsWith("*")
910
- ? trimmedBinding.replace(/\*\s+as\s+/, "")
911
- : trimmedBinding;
912
- return `const ${name_} = require("${name}${subpath}")`;
913
- },
914
- );
915
- // Dynamic imports: import("pkg") → Promise.resolve(require("pkg"))
916
- transformed = transformed.replace(
917
- new RegExp(`import\\s*\\(\\s*["']${escaped}(/[^"']*)?["']\\s*\\)`, "g"),
918
- (_, subpath) => `Promise.resolve(require("${name}${subpath || ""}"))`,
919
- );
920
- }
960
+ transformed = rewriteCompiledBinaryUserDependencyImports(transformed, userDeps);
921
961
  } else {
922
- for (const [name, version] of userDeps) {
923
- const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
924
- // Resolve exact installed version from node_modules (falls back to range)
925
- let resolvedVersion = version;
926
- try {
927
- const pkgPath = pathHelper.join(projectDir, "node_modules", name, "package.json");
928
- const pkgContent = await fs.readTextFile(pkgPath);
929
- const pkg = JSON.parse(pkgContent) as { version?: string };
930
- if (pkg.version) resolvedVersion = pkg.version;
931
- } catch (_) {
932
- /* expected: installed package.json may not exist, fall back to declared range */
933
- }
934
- // Static: from "pkg" and from "pkg/sub"
935
- transformed = transformed.replace(
936
- new RegExp(`from\\s+["']${escaped}(/[^"']*)?["']`, "g"),
937
- (_, subpath) => `from "npm:${name}@${resolvedVersion}${subpath || ""}"`,
938
- );
939
- // Dynamic: import("pkg") and import("pkg/sub")
940
- transformed = transformed.replace(
941
- new RegExp(`import\\s*\\(\\s*["']${escaped}(/[^"']*)?["']\\s*\\)`, "g"),
942
- (_, subpath) => `import("npm:${name}@${resolvedVersion}${subpath || ""}")`,
943
- );
944
- }
962
+ transformed = await rewriteDenoNpmDependencyImports(transformed, projectDir, fs, userDeps);
945
963
  }
946
964
 
947
965
  // In compiled binaries, "veryfront" resolves to embedded source that can't be
@@ -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.167";
3
+ export const VERSION = "0.1.170";