veryfront 0.1.700 → 0.1.703

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.
Files changed (37) hide show
  1. package/esm/cli/templates/manifest.d.ts +0 -2
  2. package/esm/cli/templates/manifest.js +1 -3
  3. package/esm/deno.js +1 -1
  4. package/esm/src/agent/streaming/fork-runtime-part-mapper.d.ts +59 -0
  5. package/esm/src/agent/streaming/fork-runtime-part-mapper.d.ts.map +1 -0
  6. package/esm/src/agent/streaming/fork-runtime-part-mapper.js +246 -0
  7. package/esm/src/agent/streaming/fork-runtime-stream.d.ts +2 -50
  8. package/esm/src/agent/streaming/fork-runtime-stream.d.ts.map +1 -1
  9. package/esm/src/agent/streaming/fork-runtime-stream.js +3 -245
  10. package/esm/src/integrations/_data.d.ts.map +1 -1
  11. package/esm/src/integrations/_data.js +1 -42
  12. package/esm/src/oauth/providers/common.d.ts.map +1 -1
  13. package/esm/src/oauth/providers/common.js +6 -1
  14. package/esm/src/utils/version-constant.d.ts +1 -1
  15. package/esm/src/utils/version-constant.js +1 -1
  16. package/esm/src/workflow/claude-code/react/event-state-reducer.d.ts +37 -0
  17. package/esm/src/workflow/claude-code/react/event-state-reducer.d.ts.map +1 -0
  18. package/esm/src/workflow/claude-code/react/event-state-reducer.js +104 -0
  19. package/esm/src/workflow/claude-code/react/use-claude-code-stream.d.ts +3 -35
  20. package/esm/src/workflow/claude-code/react/use-claude-code-stream.d.ts.map +1 -1
  21. package/esm/src/workflow/claude-code/react/use-claude-code-stream.js +9 -78
  22. package/esm/src/workflow/claude-code/react/use-claude-code-websocket.d.ts +2 -27
  23. package/esm/src/workflow/claude-code/react/use-claude-code-websocket.d.ts.map +1 -1
  24. package/esm/src/workflow/claude-code/react/use-claude-code-websocket.js +5 -57
  25. package/esm/src/workflow/executor/dag/index.d.ts +1 -2
  26. package/esm/src/workflow/executor/dag/index.d.ts.map +1 -1
  27. package/esm/src/workflow/executor/dag/index.js +37 -216
  28. package/esm/src/workflow/executor/dag/loop-node-strategy.d.ts +13 -0
  29. package/esm/src/workflow/executor/dag/loop-node-strategy.d.ts.map +1 -0
  30. package/esm/src/workflow/executor/dag/loop-node-strategy.js +134 -0
  31. package/esm/src/workflow/executor/dag/map-node-strategy.d.ts +13 -0
  32. package/esm/src/workflow/executor/dag/map-node-strategy.d.ts.map +1 -0
  33. package/esm/src/workflow/executor/dag/map-node-strategy.js +78 -0
  34. package/esm/src/workflow/executor/dag/node-strategy-types.d.ts +11 -0
  35. package/esm/src/workflow/executor/dag/node-strategy-types.d.ts.map +1 -0
  36. package/esm/src/workflow/executor/dag/node-strategy-types.js +1 -0
  37. package/package.json +1 -1
@@ -248,8 +248,6 @@ declare namespace _default {
248
248
  "lib/types.ts": string;
249
249
  "tools/get-comments.ts": string;
250
250
  "tools/get-file.ts": string;
251
- "tools/list-files.ts": string;
252
- "tools/list-projects.ts": string;
253
251
  "tools/post-comment.ts": string;
254
252
  };
255
253
  };
@@ -244,12 +244,10 @@ export default {
244
244
  ".env.example": "# Figma OAuth Integration\n# Get these credentials from https://www.figma.com/developers/apps\n\nFIGMA_CLIENT_ID=your_figma_client_id\nFIGMA_CLIENT_SECRET=your_figma_client_secret\n",
245
245
  "app/api/auth/figma/callback/route.ts": "import { createOAuthCallbackHandler, figmaConfig } from \"veryfront/oauth\";\nimport { tokenStore } from \"../../../../../lib/token-store.ts\";\nimport { oauthMemoryTokenStore } from \"../../../../../lib/oauth-memory-store.ts\";\n\nconst hybridTokenStore = {\n getTokens(serviceId: string, userId: string) {\n return tokenStore.getToken(userId, serviceId);\n },\n async setTokens(\n serviceId: string,\n userId: string,\n tokens: { accessToken: string; refreshToken?: string; expiresAt?: number },\n ) {\n await tokenStore.setToken(userId, serviceId, tokens);\n },\n async clearTokens(serviceId: string, userId: string) {\n await tokenStore.revokeToken(userId, serviceId);\n },\n setState(\n state: string,\n meta: {\n userId: string;\n serviceId: string;\n codeVerifier?: string;\n redirectUri?: string;\n scopes?: string[];\n createdAt: number;\n },\n ) {\n return oauthMemoryTokenStore.setState(state, meta);\n },\n consumeState(state: string) {\n return oauthMemoryTokenStore.consumeState(state);\n },\n};\n\nexport const GET = createOAuthCallbackHandler(figmaConfig, { tokenStore: hybridTokenStore });\n",
246
246
  "app/api/auth/figma/route.ts": "import { createOAuthInitHandler, figmaConfig } from \"veryfront/oauth\";\nimport { oauthMemoryTokenStore } from \"../../../../../lib/oauth-memory-store.ts\";\nimport { requireUserIdFromRequest } from \"../../../../../lib/user-id.ts\";\n\nfunction getUserId(request: Request): string {\n return requireUserIdFromRequest(request);\n}\n\nexport const GET = createOAuthInitHandler(figmaConfig, {\n tokenStore: oauthMemoryTokenStore,\n getUserId,\n});",
247
- "lib/figma-client.ts": "import { getAccessToken } from \"./token-store.ts\";\n\nconst FIGMA_BASE_URL = \"https://api.figma.com/v1\";\n\nexport interface FigmaFile {\n document: FigmaNode;\n components: Record<string, FigmaComponent>;\n componentSets: Record<string, FigmaComponentSet>;\n schemaVersion: number;\n styles: Record<string, FigmaStyle>;\n name: string;\n lastModified: string;\n thumbnailUrl: string;\n version: string;\n role: string;\n editorType: string;\n linkAccess: string;\n}\n\nexport interface FigmaNode {\n id: string;\n name: string;\n type: string;\n children?: FigmaNode[];\n visible?: boolean;\n locked?: boolean;\n absoluteBoundingBox?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n fills?: Array<{\n type: string;\n color?: {\n r: number;\n g: number;\n b: number;\n a: number;\n };\n }>;\n strokes?: unknown[];\n strokeWeight?: number;\n effects?: unknown[];\n cornerRadius?: number;\n rectangleCornerRadii?: number[];\n characters?: string;\n style?: {\n fontFamily?: string;\n fontSize?: number;\n fontWeight?: number;\n lineHeightPx?: number;\n };\n}\n\nexport interface FigmaComponent {\n key: string;\n name: string;\n description: string;\n componentSetId?: string;\n documentationLinks: unknown[];\n}\n\nexport interface FigmaComponentSet {\n key: string;\n name: string;\n description: string;\n documentationLinks: unknown[];\n}\n\nexport interface FigmaStyle {\n key: string;\n name: string;\n description: string;\n styleType: \"FILL\" | \"TEXT\" | \"EFFECT\" | \"GRID\";\n}\n\nexport interface FigmaComment {\n id: string;\n file_key: string;\n parent_id?: string;\n user: {\n id: string;\n handle: string;\n img_url: string;\n };\n created_at: string;\n resolved_at?: string;\n message: string;\n client_meta: {\n x?: number;\n y?: number;\n node_id?: string[];\n node_offset?: { x: number; y: number };\n };\n order_id: string;\n}\n\nexport interface FigmaProject {\n id: string;\n name: string;\n}\n\nexport interface FigmaTeamProject {\n id: string;\n name: string;\n}\n\nexport interface FigmaUser {\n id: string;\n handle: string;\n img_url: string;\n email?: string;\n}\n\nasync function figmaFetch<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\n const token = await getAccessToken();\n if (!token) {\n throw new Error(\"Not authenticated with Figma. Please connect your account.\");\n }\n\n const response = await fetch(`${FIGMA_BASE_URL}${endpoint}`, {\n ...options,\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n if (response.ok) {\n return response.json() as Promise<T>;\n }\n\n const error = (await response.json().catch(() => ({}))) as { message?: string; err?: string };\n throw new Error(\n `Figma API error: ${response.status} ${error.message ?? error.err ?? response.statusText}`,\n );\n}\n\nexport function getMe(): Promise<FigmaUser> {\n return figmaFetch<FigmaUser>(\"/me\");\n}\n\nexport function getFile(\n fileKey: string,\n options?: {\n version?: string;\n ids?: string[];\n depth?: number;\n geometry?: \"paths\" | \"bounds\";\n plugin_data?: string;\n branch_data?: boolean;\n },\n): Promise<FigmaFile> {\n const params = new URLSearchParams();\n\n if (options?.version) params.set(\"version\", options.version);\n if (options?.ids?.length) params.set(\"ids\", options.ids.join(\",\"));\n if (options?.depth) params.set(\"depth\", String(options.depth));\n if (options?.geometry) params.set(\"geometry\", options.geometry);\n if (options?.plugin_data) params.set(\"plugin_data\", options.plugin_data);\n if (options?.branch_data) params.set(\"branch_data\", \"true\");\n\n const query = params.toString();\n const url = query ? `/files/${fileKey}?${query}` : `/files/${fileKey}`;\n\n return figmaFetch<FigmaFile>(url);\n}\n\nexport function getFileNodes(\n fileKey: string,\n nodeIds: string[],\n): Promise<{\n name: string;\n lastModified: string;\n thumbnailUrl: string;\n version: string;\n nodes: Record<string, { document: FigmaNode; components: Record<string, FigmaComponent> }>;\n}> {\n const params = new URLSearchParams({ ids: nodeIds.join(\",\") });\n return figmaFetch(`/files/${fileKey}/nodes?${params.toString()}`);\n}\n\nexport function getFileImages(\n fileKey: string,\n nodeIds: string[],\n options?: {\n format?: \"jpg\" | \"png\" | \"svg\" | \"pdf\";\n scale?: number;\n svg_include_id?: boolean;\n svg_simplify_stroke?: boolean;\n use_absolute_bounds?: boolean;\n version?: string;\n },\n): Promise<{\n err?: string;\n images: Record<string, string | null>;\n status?: number;\n}> {\n const params = new URLSearchParams({\n ids: nodeIds.join(\",\"),\n format: options?.format ?? \"png\",\n });\n\n if (options?.scale) params.set(\"scale\", String(options.scale));\n if (options?.svg_include_id) params.set(\"svg_include_id\", \"true\");\n if (options?.svg_simplify_stroke) params.set(\"svg_simplify_stroke\", \"true\");\n if (options?.use_absolute_bounds) params.set(\"use_absolute_bounds\", \"true\");\n if (options?.version) params.set(\"version\", options.version);\n\n return figmaFetch(`/images/${fileKey}?${params.toString()}`);\n}\n\nexport function getComments(fileKey: string): Promise<{ comments: FigmaComment[] }> {\n return figmaFetch<{ comments: FigmaComment[] }>(`/files/${fileKey}/comments`);\n}\n\nexport function postComment(\n fileKey: string,\n message: string,\n options?: {\n client_meta?: { x?: number; y?: number; node_id?: string[] };\n parent_id?: string;\n },\n): Promise<FigmaComment> {\n return figmaFetch<FigmaComment>(`/files/${fileKey}/comments`, {\n method: \"POST\",\n body: JSON.stringify({\n message,\n client_meta: options?.client_meta ?? {},\n ...(options?.parent_id ? { parent_id: options.parent_id } : {}),\n }),\n });\n}\n\nexport function getTeamProjects(teamId: string): Promise<{ projects: FigmaTeamProject[] }> {\n return figmaFetch<{ projects: FigmaTeamProject[] }>(`/teams/${teamId}/projects`);\n}\n\nexport function getProjectFiles(projectId: string): Promise<{\n files: Array<{\n key: string;\n name: string;\n thumbnail_url: string;\n last_modified: string;\n }>;\n}> {\n return figmaFetch(`/projects/${projectId}/files`);\n}\n\nexport function getUserFiles(): Promise<{\n files: Array<{\n key: string;\n name: string;\n thumbnail_url: string;\n last_modified: string;\n }>;\n}> {\n throw new Error(\n \"Getting user files requires team ID. Use getTeamProjects and getProjectFiles instead.\",\n );\n}\n\nexport function extractComponents(file: FigmaFile): Array<{\n key: string;\n name: string;\n description: string;\n type: \"component\" | \"component_set\";\n}> {\n const components = Object.entries(file.components).map(([key, component]) => ({\n key,\n name: component.name,\n description: component.description,\n type: \"component\" as const,\n }));\n\n const componentSets = Object.entries(file.componentSets).map(([key, componentSet]) => ({\n key,\n name: componentSet.name,\n description: componentSet.description,\n type: \"component_set\" as const,\n }));\n\n return [...components, ...componentSets];\n}\n\nexport function extractStyles(file: FigmaFile): Array<{\n key: string;\n name: string;\n description: string;\n type: string;\n}> {\n return Object.entries(file.styles).map(([key, style]) => ({\n key,\n name: style.name,\n description: style.description,\n type: style.styleType,\n }));\n}\n\nexport function findNodesByType(node: FigmaNode, type: string): FigmaNode[] {\n const results: FigmaNode[] = [];\n\n if (node.type === type) {\n results.push(node);\n }\n\n for (const child of node.children ?? []) {\n results.push(...findNodesByType(child, type));\n }\n\n return results;\n}\n\nexport function getFileSummary(file: FigmaFile): {\n name: string;\n lastModified: string;\n componentCount: number;\n componentSetCount: number;\n styleCount: number;\n pageCount: number;\n} {\n return {\n name: file.name,\n lastModified: file.lastModified,\n componentCount: Object.keys(file.components).length,\n componentSetCount: Object.keys(file.componentSets).length,\n styleCount: Object.keys(file.styles).length,\n pageCount: file.document.children?.length ?? 0,\n };\n}\n",
247
+ "lib/figma-client.ts": "import { getAccessToken } from \"./token-store.ts\";\n\nconst FIGMA_BASE_URL = \"https://api.figma.com/v1\";\n\nexport interface FigmaFile {\n document: FigmaNode;\n components: Record<string, FigmaComponent>;\n componentSets: Record<string, FigmaComponentSet>;\n schemaVersion: number;\n styles: Record<string, FigmaStyle>;\n name: string;\n lastModified: string;\n thumbnailUrl: string;\n version: string;\n role: string;\n editorType: string;\n linkAccess: string;\n}\n\nexport interface FigmaNode {\n id: string;\n name: string;\n type: string;\n children?: FigmaNode[];\n visible?: boolean;\n locked?: boolean;\n absoluteBoundingBox?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n fills?: Array<{\n type: string;\n color?: {\n r: number;\n g: number;\n b: number;\n a: number;\n };\n }>;\n strokes?: unknown[];\n strokeWeight?: number;\n effects?: unknown[];\n cornerRadius?: number;\n rectangleCornerRadii?: number[];\n characters?: string;\n style?: {\n fontFamily?: string;\n fontSize?: number;\n fontWeight?: number;\n lineHeightPx?: number;\n };\n}\n\nexport interface FigmaComponent {\n key: string;\n name: string;\n description: string;\n componentSetId?: string;\n documentationLinks: unknown[];\n}\n\nexport interface FigmaComponentSet {\n key: string;\n name: string;\n description: string;\n documentationLinks: unknown[];\n}\n\nexport interface FigmaStyle {\n key: string;\n name: string;\n description: string;\n styleType: \"FILL\" | \"TEXT\" | \"EFFECT\" | \"GRID\";\n}\n\nexport interface FigmaComment {\n id: string;\n file_key: string;\n parent_id?: string;\n user: {\n id: string;\n handle: string;\n img_url: string;\n };\n created_at: string;\n resolved_at?: string;\n message: string;\n client_meta: {\n x?: number;\n y?: number;\n node_id?: string[];\n node_offset?: { x: number; y: number };\n };\n order_id: string;\n}\n\nexport interface FigmaUser {\n id: string;\n handle: string;\n img_url: string;\n email?: string;\n}\n\nasync function figmaFetch<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\n const token = await getAccessToken();\n if (!token) {\n throw new Error(\"Not authenticated with Figma. Please connect your account.\");\n }\n\n const response = await fetch(`${FIGMA_BASE_URL}${endpoint}`, {\n ...options,\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n if (response.ok) {\n return response.json() as Promise<T>;\n }\n\n const error = (await response.json().catch(() => ({}))) as { message?: string; err?: string };\n throw new Error(\n `Figma API error: ${response.status} ${error.message ?? error.err ?? response.statusText}`,\n );\n}\n\nexport function getMe(): Promise<FigmaUser> {\n return figmaFetch<FigmaUser>(\"/me\");\n}\n\nexport function getFile(\n fileKey: string,\n options?: {\n version?: string;\n ids?: string[];\n depth?: number;\n geometry?: \"paths\" | \"bounds\";\n plugin_data?: string;\n branch_data?: boolean;\n },\n): Promise<FigmaFile> {\n const params = new URLSearchParams();\n\n if (options?.version) params.set(\"version\", options.version);\n if (options?.ids?.length) params.set(\"ids\", options.ids.join(\",\"));\n if (options?.depth) params.set(\"depth\", String(options.depth));\n if (options?.geometry) params.set(\"geometry\", options.geometry);\n if (options?.plugin_data) params.set(\"plugin_data\", options.plugin_data);\n if (options?.branch_data) params.set(\"branch_data\", \"true\");\n\n const query = params.toString();\n const url = query ? `/files/${fileKey}?${query}` : `/files/${fileKey}`;\n\n return figmaFetch<FigmaFile>(url);\n}\n\nexport function getFileNodes(\n fileKey: string,\n nodeIds: string[],\n): Promise<{\n name: string;\n lastModified: string;\n thumbnailUrl: string;\n version: string;\n nodes: Record<string, { document: FigmaNode; components: Record<string, FigmaComponent> }>;\n}> {\n const params = new URLSearchParams({ ids: nodeIds.join(\",\") });\n return figmaFetch(`/files/${fileKey}/nodes?${params.toString()}`);\n}\n\nexport function getFileImages(\n fileKey: string,\n nodeIds: string[],\n options?: {\n format?: \"jpg\" | \"png\" | \"svg\" | \"pdf\";\n scale?: number;\n svg_include_id?: boolean;\n svg_simplify_stroke?: boolean;\n use_absolute_bounds?: boolean;\n version?: string;\n },\n): Promise<{\n err?: string;\n images: Record<string, string | null>;\n status?: number;\n}> {\n const params = new URLSearchParams({\n ids: nodeIds.join(\",\"),\n format: options?.format ?? \"png\",\n });\n\n if (options?.scale) params.set(\"scale\", String(options.scale));\n if (options?.svg_include_id) params.set(\"svg_include_id\", \"true\");\n if (options?.svg_simplify_stroke) params.set(\"svg_simplify_stroke\", \"true\");\n if (options?.use_absolute_bounds) params.set(\"use_absolute_bounds\", \"true\");\n if (options?.version) params.set(\"version\", options.version);\n\n return figmaFetch(`/images/${fileKey}?${params.toString()}`);\n}\n\nexport function getComments(fileKey: string): Promise<{ comments: FigmaComment[] }> {\n return figmaFetch<{ comments: FigmaComment[] }>(`/files/${fileKey}/comments`);\n}\n\nexport function postComment(\n fileKey: string,\n message: string,\n options?: {\n client_meta?: { x?: number; y?: number; node_id?: string[] };\n parent_id?: string;\n },\n): Promise<FigmaComment> {\n return figmaFetch<FigmaComment>(`/files/${fileKey}/comments`, {\n method: \"POST\",\n body: JSON.stringify({\n message,\n client_meta: options?.client_meta ?? {},\n ...(options?.parent_id ? { parent_id: options.parent_id } : {}),\n }),\n });\n}\n\nexport function extractComponents(file: FigmaFile): Array<{\n key: string;\n name: string;\n description: string;\n type: \"component\" | \"component_set\";\n}> {\n const components = Object.entries(file.components).map(([key, component]) => ({\n key,\n name: component.name,\n description: component.description,\n type: \"component\" as const,\n }));\n\n const componentSets = Object.entries(file.componentSets).map(([key, componentSet]) => ({\n key,\n name: componentSet.name,\n description: componentSet.description,\n type: \"component_set\" as const,\n }));\n\n return [...components, ...componentSets];\n}\n\nexport function extractStyles(file: FigmaFile): Array<{\n key: string;\n name: string;\n description: string;\n type: string;\n}> {\n return Object.entries(file.styles).map(([key, style]) => ({\n key,\n name: style.name,\n description: style.description,\n type: style.styleType,\n }));\n}\n\nexport function findNodesByType(node: FigmaNode, type: string): FigmaNode[] {\n const results: FigmaNode[] = [];\n\n if (node.type === type) {\n results.push(node);\n }\n\n for (const child of node.children ?? []) {\n results.push(...findNodesByType(child, type));\n }\n\n return results;\n}\n\nexport function getFileSummary(file: FigmaFile): {\n name: string;\n lastModified: string;\n componentCount: number;\n componentSetCount: number;\n styleCount: number;\n pageCount: number;\n} {\n return {\n name: file.name,\n lastModified: file.lastModified,\n componentCount: Object.keys(file.components).length,\n componentSetCount: Object.keys(file.componentSets).length,\n styleCount: Object.keys(file.styles).length,\n pageCount: file.document.children?.length ?? 0,\n };\n}\n",
248
248
  "lib/types.ts": "export type NodeType =\n | \"DOCUMENT\"\n | \"CANVAS\"\n | \"FRAME\"\n | \"GROUP\"\n | \"VECTOR\"\n | \"BOOLEAN_OPERATION\"\n | \"STAR\"\n | \"LINE\"\n | \"ELLIPSE\"\n | \"REGULAR_POLYGON\"\n | \"RECTANGLE\"\n | \"TEXT\"\n | \"SLICE\"\n | \"COMPONENT\"\n | \"COMPONENT_SET\"\n | \"INSTANCE\";\n\nexport type BlendMode =\n | \"NORMAL\"\n | \"DARKEN\"\n | \"MULTIPLY\"\n | \"LINEAR_BURN\"\n | \"COLOR_BURN\"\n | \"LIGHTEN\"\n | \"SCREEN\"\n | \"LINEAR_DODGE\"\n | \"COLOR_DODGE\"\n | \"OVERLAY\"\n | \"SOFT_LIGHT\"\n | \"HARD_LIGHT\"\n | \"DIFFERENCE\"\n | \"EXCLUSION\"\n | \"HUE\"\n | \"SATURATION\"\n | \"COLOR\"\n | \"LUMINOSITY\";\n\nexport type EasingType = \"EASE_IN\" | \"EASE_OUT\" | \"EASE_IN_AND_OUT\" | \"LINEAR\";\n\nexport interface Vector2D {\n x: number;\n y: number;\n}\n\nexport interface Rectangle {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface Transform {\n /** 2D transformation matrix [[a, b, tx], [c, d, ty]] */\n matrix: [[number, number, number], [number, number, number]];\n}\n\nexport type PaintType =\n | \"SOLID\"\n | \"GRADIENT_LINEAR\"\n | \"GRADIENT_RADIAL\"\n | \"GRADIENT_ANGULAR\"\n | \"GRADIENT_DIAMOND\"\n | \"IMAGE\"\n | \"EMOJI\";\n\nexport interface Color {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nexport interface ColorStop {\n position: number;\n color: Color;\n}\n\nexport interface Paint {\n type: PaintType;\n visible?: boolean;\n opacity?: number;\n color?: Color;\n blendMode?: BlendMode;\n gradientHandlePositions?: Vector2D[];\n gradientStops?: ColorStop[];\n scaleMode?: \"FILL\" | \"FIT\" | \"TILE\" | \"STRETCH\";\n imageTransform?: Transform;\n scalingFactor?: number;\n imageRef?: string;\n gifRef?: string;\n}\n\nexport type EffectType = \"INNER_SHADOW\" | \"DROP_SHADOW\" | \"LAYER_BLUR\" | \"BACKGROUND_BLUR\";\n\nexport interface Effect {\n type: EffectType;\n visible?: boolean;\n radius?: number;\n color?: Color;\n blendMode?: BlendMode;\n offset?: Vector2D;\n spread?: number;\n}\n\nexport type LayoutConstraintVertical = \"TOP\" | \"BOTTOM\" | \"CENTER\" | \"TOP_BOTTOM\" | \"SCALE\";\nexport type LayoutConstraintHorizontal = \"LEFT\" | \"RIGHT\" | \"CENTER\" | \"LEFT_RIGHT\" | \"SCALE\";\n\nexport interface LayoutConstraint {\n vertical: LayoutConstraintVertical;\n horizontal: LayoutConstraintHorizontal;\n}\n\nexport type LayoutAlign = \"MIN\" | \"CENTER\" | \"MAX\" | \"STRETCH\" | \"INHERIT\";\nexport type LayoutMode = \"NONE\" | \"HORIZONTAL\" | \"VERTICAL\";\n\nexport interface LayoutGrid {\n pattern: \"COLUMNS\" | \"ROWS\" | \"GRID\";\n sectionSize?: number;\n visible?: boolean;\n color?: Color;\n alignment?: \"MIN\" | \"MAX\" | \"CENTER\" | \"STRETCH\";\n gutterSize?: number;\n offset?: number;\n count?: number;\n}\n\nexport type TextAlignHorizontal = \"LEFT\" | \"CENTER\" | \"RIGHT\" | \"JUSTIFIED\";\nexport type TextAlignVertical = \"TOP\" | \"CENTER\" | \"BOTTOM\";\nexport type TextCase = \"ORIGINAL\" | \"UPPER\" | \"LOWER\" | \"TITLE\";\nexport type TextDecoration = \"NONE\" | \"STRIKETHROUGH\" | \"UNDERLINE\";\n\nexport interface TypeStyle {\n fontFamily: string;\n fontPostScriptName?: string;\n paragraphSpacing?: number;\n paragraphIndent?: number;\n italic?: boolean;\n fontWeight: number;\n fontSize: number;\n textAlignHorizontal?: TextAlignHorizontal;\n textAlignVertical?: TextAlignVertical;\n letterSpacing?: number;\n fills?: Paint[];\n lineHeightPx?: number;\n lineHeightPercent?: number;\n lineHeightPercentFontSize?: number;\n lineHeightUnit?: \"PIXELS\" | \"FONT_SIZE_%\" | \"INTRINSIC_%\";\n}\n\nexport interface Component {\n key: string;\n name: string;\n description: string;\n componentSetId?: string;\n documentationLinks: string[];\n remote?: boolean;\n}\n\nexport interface ComponentSet {\n key: string;\n name: string;\n description: string;\n documentationLinks: string[];\n remote?: boolean;\n}\n\nexport type StyleType = \"FILL\" | \"TEXT\" | \"EFFECT\" | \"GRID\";\n\nexport interface Style {\n key: string;\n name: string;\n description: string;\n styleType: StyleType;\n remote?: boolean;\n}\n\nexport type ExportFormat = \"JPG\" | \"PNG\" | \"SVG\" | \"PDF\";\n\nexport interface ExportSettings {\n suffix: string;\n format: ExportFormat;\n constraint?: {\n type: \"SCALE\" | \"WIDTH\" | \"HEIGHT\";\n value: number;\n };\n}\n\nexport interface Comment {\n id: string;\n file_key: string;\n parent_id?: string;\n user: User;\n created_at: string;\n resolved_at?: string;\n message: string;\n client_meta: CommentClientMeta;\n order_id: string;\n}\n\nexport interface CommentClientMeta {\n x?: number;\n y?: number;\n node_id?: string[];\n node_offset?: Vector2D;\n}\n\nexport interface User {\n id: string;\n handle: string;\n img_url: string;\n email?: string;\n}\n\nexport interface FileResponse {\n document: Node;\n components: Record<string, Component>;\n componentSets: Record<string, ComponentSet>;\n schemaVersion: number;\n styles: Record<string, Style>;\n name: string;\n lastModified: string;\n thumbnailUrl: string;\n version: string;\n role: \"owner\" | \"editor\" | \"viewer\";\n editorType: \"figma\" | \"figjam\";\n linkAccess: \"view\" | \"edit\" | \"org_view\" | \"org_edit\";\n}\n\nexport interface NodeBase {\n id: string;\n name: string;\n visible?: boolean;\n type: NodeType;\n pluginData?: unknown;\n sharedPluginData?: unknown;\n locked?: boolean;\n}\n\nexport interface NodeWithChildren extends NodeBase {\n children: Node[];\n}\n\nexport interface DocumentNode extends NodeWithChildren {\n type: \"DOCUMENT\";\n}\n\nexport interface CanvasNode extends NodeWithChildren {\n type: \"CANVAS\";\n backgroundColor: Color;\n prototypeStartNodeID?: string;\n prototypeDevice?: {\n type: string;\n rotation: \"NONE\" | \"CCW_90\";\n };\n exportSettings?: ExportSettings[];\n}\n\nexport interface FrameNode extends NodeWithChildren {\n type: \"FRAME\";\n absoluteBoundingBox?: Rectangle;\n absoluteRenderBounds?: Rectangle;\n constraints?: LayoutConstraint;\n clipsContent?: boolean;\n background: Paint[];\n backgroundColor?: Color;\n fills?: Paint[];\n strokes?: Paint[];\n strokeWeight?: number;\n strokeAlign?: \"INSIDE\" | \"OUTSIDE\" | \"CENTER\";\n strokeDashes?: number[];\n cornerRadius?: number;\n rectangleCornerRadii?: [number, number, number, number];\n exportSettings?: ExportSettings[];\n blendMode?: BlendMode;\n preserveRatio?: boolean;\n layoutAlign?: LayoutAlign;\n layoutGrow?: number;\n layoutMode?: LayoutMode;\n primaryAxisSizingMode?: \"FIXED\" | \"AUTO\";\n counterAxisSizingMode?: \"FIXED\" | \"AUTO\";\n primaryAxisAlignItems?: LayoutAlign;\n counterAxisAlignItems?: LayoutAlign;\n paddingLeft?: number;\n paddingRight?: number;\n paddingTop?: number;\n paddingBottom?: number;\n itemSpacing?: number;\n layoutGrids?: LayoutGrid[];\n effects?: Effect[];\n isMask?: boolean;\n isMaskOutline?: boolean;\n transitionNodeID?: string;\n transitionDuration?: number;\n transitionEasing?: EasingType;\n opacity?: number;\n}\n\nexport interface GroupNode extends NodeWithChildren {\n type: \"GROUP\";\n absoluteBoundingBox?: Rectangle;\n absoluteRenderBounds?: Rectangle;\n constraints?: LayoutConstraint;\n clipsContent?: boolean;\n blendMode?: BlendMode;\n effects?: Effect[];\n opacity?: number;\n}\n\nexport type VectorNodeType =\n | \"VECTOR\"\n | \"BOOLEAN_OPERATION\"\n | \"STAR\"\n | \"LINE\"\n | \"ELLIPSE\"\n | \"REGULAR_POLYGON\"\n | \"RECTANGLE\";\n\nexport interface VectorNode extends NodeBase {\n type: VectorNodeType;\n absoluteBoundingBox?: Rectangle;\n absoluteRenderBounds?: Rectangle;\n constraints?: LayoutConstraint;\n fills?: Paint[];\n fillGeometry?: unknown[];\n strokes?: Paint[];\n strokeWeight?: number;\n strokeCap?: \"NONE\" | \"ROUND\" | \"SQUARE\" | \"LINE_ARROW\" | \"TRIANGLE_ARROW\";\n strokeJoin?: \"MITER\" | \"BEVEL\" | \"ROUND\";\n strokeDashes?: number[];\n strokeAlign?: \"INSIDE\" | \"OUTSIDE\" | \"CENTER\";\n strokeGeometry?: unknown[];\n cornerRadius?: number;\n rectangleCornerRadii?: [number, number, number, number];\n exportSettings?: ExportSettings[];\n blendMode?: BlendMode;\n preserveRatio?: boolean;\n layoutAlign?: LayoutAlign;\n layoutGrow?: number;\n effects?: Effect[];\n isMask?: boolean;\n opacity?: number;\n}\n\nexport interface TextNode extends NodeBase {\n type: \"TEXT\";\n absoluteBoundingBox?: Rectangle;\n absoluteRenderBounds?: Rectangle;\n constraints?: LayoutConstraint;\n fills?: Paint[];\n strokes?: Paint[];\n strokeWeight?: number;\n strokeAlign?: \"INSIDE\" | \"OUTSIDE\" | \"CENTER\";\n strokeDashes?: number[];\n exportSettings?: ExportSettings[];\n blendMode?: BlendMode;\n preserveRatio?: boolean;\n layoutAlign?: LayoutAlign;\n layoutGrow?: number;\n effects?: Effect[];\n characters: string;\n style: TypeStyle;\n characterStyleOverrides?: number[];\n styleOverrideTable?: Record<number, TypeStyle>;\n opacity?: number;\n}\n\nexport interface ComponentNode extends FrameNode {\n type: \"COMPONENT\";\n}\n\nexport interface ComponentSetNode extends FrameNode {\n type: \"COMPONENT_SET\";\n}\n\nexport interface InstanceNode extends FrameNode {\n type: \"INSTANCE\";\n componentId: string;\n overrides?: unknown[];\n}\n\nexport type Node =\n | DocumentNode\n | CanvasNode\n | FrameNode\n | GroupNode\n | VectorNode\n | TextNode\n | ComponentNode\n | ComponentSetNode\n | InstanceNode;\n\nexport interface Project {\n id: string;\n name: string;\n}\n\nexport interface FileReference {\n key: string;\n name: string;\n thumbnail_url: string;\n last_modified: string;\n}\n\nexport interface ProjectFilesResponse {\n files: FileReference[];\n}\n\nexport interface TeamProjectsResponse {\n projects: Project[];\n}\n\nexport interface Version {\n id: string;\n created_at: string;\n label?: string;\n description?: string;\n user: User;\n thumbnail_url?: string;\n}\n\nexport interface VersionsResponse {\n versions: Version[];\n pagination?: {\n next_page?: number;\n };\n}\n",
249
249
  "tools/get-comments.ts": "import { tool } from \"veryfront/tool\";\nimport { defineSchema } from \"veryfront/schemas\";\nimport { getComments } from \"../../lib/figma-client.ts\";\n\ntype FormattedComment = {\n id: string;\n message: string;\n author: { handle: string; avatar: string };\n createdAt: string;\n resolvedAt: string | null;\n isResolved: boolean;\n parentId: string | null;\n isReply: boolean;\n location: { nodeIds: string; x: number; y: number } | null;\n};\n\ntype Output = {\n totalComments: number;\n unresolvedCount: number;\n resolvedCount: number;\n threads: Array<{\n rootComment: FormattedComment;\n replies: FormattedComment[];\n }>;\n fileUrl: string;\n};\n\nexport default tool({\n id: \"get-comments\",\n description:\n \"Get all comments on a Figma file. Returns comment threads with messages, authors, timestamps, and resolution status.\",\n inputSchema: defineSchema((v) => v.object({\n fileKey: v.string().describe(\"The file key (from the Figma URL)\"),\n includeResolved: v.boolean().default(false).describe(\"Include resolved comments\"),\n limit: v\n .number()\n .min(1)\n .max(100)\n .default(50)\n .describe(\"Maximum number of comments to return\"),\n }))(),\n async execute({ fileKey, includeResolved, limit }): Promise<Output> {\n const response = await getComments(fileKey);\n\n const filteredComments = includeResolved\n ? response.comments\n : response.comments.filter((comment) => !comment.resolved_at);\n\n const comments = filteredComments.slice(0, limit);\n\n const formattedComments: FormattedComment[] = comments.map((comment) => ({\n id: comment.id,\n message: comment.message,\n author: {\n handle: comment.user.handle,\n avatar: comment.user.img_url,\n },\n createdAt: comment.created_at,\n resolvedAt: comment.resolved_at,\n isResolved: Boolean(comment.resolved_at),\n parentId: comment.parent_id,\n isReply: Boolean(comment.parent_id),\n location: comment.client_meta.node_id\n ? {\n nodeIds: comment.client_meta.node_id,\n x: comment.client_meta.x,\n y: comment.client_meta.y,\n }\n : null,\n }));\n\n const rootComments = formattedComments.filter((comment) => !comment.isReply);\n\n const repliesByParentId = new Map<string, FormattedComment[]>();\n for (const comment of formattedComments) {\n if (!comment.parentId) continue;\n const replies = repliesByParentId.get(comment.parentId);\n if (replies) replies.push(comment);\n else repliesByParentId.set(comment.parentId, [comment]);\n }\n\n const threads = rootComments.map((root) => ({\n rootComment: root,\n replies: repliesByParentId.get(root.id) ?? [],\n }));\n\n let unresolvedCount = 0;\n let resolvedCount = 0;\n\n for (const comment of comments) {\n if (comment.resolved_at) resolvedCount += 1;\n else unresolvedCount += 1;\n }\n\n return {\n totalComments: comments.length,\n unresolvedCount,\n resolvedCount,\n threads,\n fileUrl: `https://www.figma.com/file/${fileKey}`,\n };\n },\n});\n",
250
250
  "tools/get-file.ts": "import { tool } from \"veryfront/tool\";\nimport { defineSchema } from \"veryfront/schemas\";\nimport {\n extractComponents,\n extractStyles,\n getFile,\n getFileSummary,\n} from \"../../lib/figma-client.ts\";\n\nexport default tool({\n id: \"get-file\",\n description:\n \"Get detailed information about a Figma file including components, styles, and structure. Returns file metadata, component list, and style information.\",\n inputSchema: defineSchema((v) => v.object({\n fileKey: v.string().describe(\"The file key (from the Figma URL)\"),\n includeComponents: v\n .boolean()\n .default(true)\n .describe(\"Include component information\"),\n includeStyles: v.boolean().default(true).describe(\"Include style information\"),\n depth: v\n .number()\n .min(1)\n .max(10)\n .optional()\n .describe(\"Depth of nodes to traverse (default: all)\"),\n }))(),\n async execute({ fileKey, includeComponents, includeStyles, depth }) {\n const file = await getFile(fileKey, { depth });\n\n return {\n summary: getFileSummary(file),\n url: `https://www.figma.com/file/${fileKey}`,\n thumbnailUrl: file.thumbnailUrl,\n pages: file.document.children?.map((page) => ({\n id: page.id,\n name: page.name,\n type: page.type,\n })) ?? [],\n ...(includeComponents ? { components: extractComponents(file) } : {}),\n ...(includeStyles ? { styles: extractStyles(file) } : {}),\n };\n },\n});\n",
251
- "tools/list-files.ts": "import { tool } from \"veryfront/tool\";\nimport { defineSchema } from \"veryfront/schemas\";\nimport { getProjectFiles, getTeamProjects } from \"../../lib/figma-client.ts\";\n\nexport default tool({\n id: \"list-files\",\n description:\n \"List Figma files in a team project. Returns file names, keys, thumbnails, and last modified dates.\",\n inputSchema: defineSchema((v) => v.object({\n teamId: v.string().describe(\"The team ID to list projects from\"),\n projectId: v\n .string()\n .optional()\n .describe(\"Optional project ID to filter files. If not provided, lists all projects\"),\n limit: v.number().min(1).max(50).default(20).describe(\"Maximum number of files to return\"),\n }))(),\n async execute({ teamId, projectId, limit }) {\n if (projectId) {\n const { files } = await getProjectFiles(projectId);\n return files.slice(0, limit).map((file) => ({\n key: file.key,\n name: file.name,\n thumbnailUrl: file.thumbnail_url,\n lastModified: file.last_modified,\n url: `https://www.figma.com/file/${file.key}`,\n }));\n }\n\n const { projects } = await getTeamProjects(teamId);\n return {\n projects: projects.slice(0, limit).map((project) => ({\n id: project.id,\n name: project.name,\n })),\n message: \"Use project IDs to get files with the projectId parameter\",\n };\n },\n});\n",
252
- "tools/list-projects.ts": "import { tool } from \"veryfront/tool\";\nimport { defineSchema } from \"veryfront/schemas\";\nimport { getProjectFiles, getTeamProjects } from \"../../lib/figma-client.ts\";\n\nexport default tool({\n id: \"list-projects\",\n description:\n \"List all projects in a Figma team. Optionally include file counts and recent files for each project.\",\n inputSchema: defineSchema((v) => v.object({\n teamId: v.string().describe(\"The team ID to list projects from\"),\n includeFiles: v.boolean().default(false).describe(\"Include recent files for each project\"),\n filesPerProject: v\n .number()\n .min(1)\n .max(10)\n .default(5)\n .describe(\"Number of recent files to include per project (if includeFiles is true)\"),\n limit: v.number().min(1).max(50).default(20).describe(\"Maximum number of projects to return\"),\n }))(),\n async execute({ teamId, includeFiles, filesPerProject, limit }) {\n const { projects: allProjects } = await getTeamProjects(teamId);\n const projects = allProjects.slice(0, limit);\n\n if (!includeFiles) {\n return { projects: projects.map(({ id, name }) => ({ id, name })) };\n }\n\n const projectsWithFiles = await Promise.all(\n projects.map(async ({ id, name }) => {\n try {\n const { files } = await getProjectFiles(id);\n const recentFiles = files.slice(0, filesPerProject).map((file) => ({\n key: file.key,\n name: file.name,\n thumbnailUrl: file.thumbnail_url,\n lastModified: file.last_modified,\n url: `https://www.figma.com/file/${file.key}`,\n }));\n\n return { id, name, fileCount: files.length, recentFiles };\n } catch (error) {\n return {\n id,\n name,\n fileCount: 0,\n recentFiles: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n );\n\n return { projects: projectsWithFiles, totalProjects: projects.length };\n },\n});\n",
253
251
  "tools/post-comment.ts": "import { tool } from \"veryfront/tool\";\nimport { defineSchema } from \"veryfront/schemas\";\nimport { postComment } from \"../../lib/figma-client.ts\";\n\nexport default tool({\n id: \"post-comment\",\n description:\n \"Post a comment on a Figma file. Can be a new comment or a reply to an existing comment thread.\",\n inputSchema: defineSchema((v) => v.object({\n fileKey: v.string().describe(\"The file key (from the Figma URL)\"),\n message: v.string().min(1).describe(\"The comment message to post\"),\n parentId: v\n .string()\n .optional()\n .describe(\"ID of parent comment to reply to (for threaded replies)\"),\n nodeId: v.string().optional().describe(\"ID of the Figma node to attach the comment to\"),\n x: v.number().optional().describe(\"X coordinate for comment placement (0-1, relative to canvas)\"),\n y: v.number().optional().describe(\"Y coordinate for comment placement (0-1, relative to canvas)\"),\n }))(),\n async execute({ fileKey, message, parentId, nodeId, x, y }) {\n const clientMeta: { x?: number; y?: number; node_id?: string[] } = {};\n\n if (x !== undefined) clientMeta.x = x;\n if (y !== undefined) clientMeta.y = y;\n if (nodeId) clientMeta.node_id = [nodeId];\n\n const comment = await postComment(fileKey, message, {\n client_meta: Object.keys(clientMeta).length ? clientMeta : undefined,\n parent_id: parentId,\n });\n\n return {\n success: true,\n comment: {\n id: comment.id,\n message: comment.message,\n author: {\n handle: comment.user.handle,\n avatar: comment.user.img_url,\n },\n createdAt: comment.created_at,\n isReply: Boolean(comment.parent_id),\n fileUrl: `https://www.figma.com/file/${fileKey}`,\n },\n };\n },\n});\n"
254
252
  }
255
253
  },
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.700",
3
+ "version": "0.1.703",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": "P2D",
@@ -0,0 +1,59 @@
1
+ import type { AgUiRuntimeStreamEvent } from "../ag-ui/browser-encoder.js";
2
+ import type { ForkPart, ForkRuntimeStep, ForkRuntimeStreamLogger } from "./fork-runtime-stream.js";
3
+ type ForkToolCallPart = Extract<ForkPart, {
4
+ type: "tool-call";
5
+ }>;
6
+ type ForkToolResultPart = Extract<ForkPart, {
7
+ type: "tool-result";
8
+ }>;
9
+ export interface RecoveredToolObservation {
10
+ sawInputStart: boolean;
11
+ sawInputDelta: boolean;
12
+ sawInputAvailable: boolean;
13
+ sawOutputAvailable: boolean;
14
+ sawOutputError: boolean;
15
+ }
16
+ /** State for fork recovered parts. */
17
+ export interface ForkRecoveredPartsState {
18
+ toolCalls: Map<string, RecoveredToolObservation>;
19
+ emittedToolCallIds: Set<string>;
20
+ emittedToolResultIds: Set<string>;
21
+ logger?: ForkRuntimeStreamLogger;
22
+ }
23
+ type ForkRuntimeToolCallState = RecoveredToolObservation & {
24
+ toolName: string;
25
+ inputText: string;
26
+ input: Record<string, unknown>;
27
+ };
28
+ /** State for fork runtime stream mapping. */
29
+ export type ForkRuntimeStreamMappingState = {
30
+ toolCalls: Map<string, ForkRuntimeToolCallState>;
31
+ emittedToolCallIds: Set<string>;
32
+ emittedToolResultIds: Set<string>;
33
+ logger?: ForkRuntimeStreamLogger;
34
+ };
35
+ /** State for framework stream.
36
+ * @deprecated Use ForkRuntimeStreamMappingState.
37
+ */
38
+ export type FrameworkStreamState = ForkRuntimeStreamMappingState;
39
+ /** Builds recovered step parts. */
40
+ export declare function buildRecoveredStepParts(step: ForkRuntimeStep, state: ForkRecoveredPartsState): Array<ForkToolCallPart | ForkToolResultPart>;
41
+ export declare function getParsedStreamedToolInput(inputText: string): Record<string, unknown> | null;
42
+ /** State for create fork runtime stream mapping. */
43
+ export declare function createForkRuntimeStreamMappingState(input?: {
44
+ logger?: ForkRuntimeStreamLogger;
45
+ }): ForkRuntimeStreamMappingState;
46
+ /** Map AG-UI runtime event to fork parts. */
47
+ export declare function mapAgUiRuntimeEventToForkParts(event: AgUiRuntimeStreamEvent, state: ForkRuntimeStreamMappingState): ForkPart[];
48
+ /** State for create framework stream.
49
+ * @deprecated Use createForkRuntimeStreamMappingState.
50
+ */
51
+ export declare function createFrameworkStreamState(input?: {
52
+ logger?: ForkRuntimeStreamLogger;
53
+ }): ForkRuntimeStreamMappingState;
54
+ /** Handles map framework event to fork parts.
55
+ * @deprecated Use mapAgUiRuntimeEventToForkParts.
56
+ */
57
+ export declare function mapFrameworkEventToForkParts(event: AgUiRuntimeStreamEvent, state: ForkRuntimeStreamMappingState): ForkPart[];
58
+ export {};
59
+ //# sourceMappingURL=fork-runtime-part-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork-runtime-part-mapper.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/streaming/fork-runtime-part-mapper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAM1E,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnG,KAAK,gBAAgB,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AACjE,KAAK,kBAAkB,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC,CAAC;AAGrE,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,sCAAsC;AACtC,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACjD,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,uBAAuB,CAAC;CAClC;AAED,KAAK,wBAAwB,GAAG,wBAAwB,GAAG;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,6CAA6C;AAC7C,MAAM,MAAM,6BAA6B,GAAG;IAC1C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACjD,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,uBAAuB,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAUjE,mCAAmC;AACnC,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,uBAAuB,GAC7B,KAAK,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,CAyD9C;AAMD,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAe5F;AAsBD,oDAAoD;AACpD,wBAAgB,mCAAmC,CACjD,KAAK,GAAE;IAAE,MAAM,CAAC,EAAE,uBAAuB,CAAA;CAAO,GAC/C,6BAA6B,CAO/B;AAED,6CAA6C;AAC7C,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,sBAAsB,EAC7B,KAAK,EAAE,6BAA6B,GACnC,QAAQ,EAAE,CAqJZ;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,GAAE;IAAE,MAAM,CAAC,EAAE,uBAAuB,CAAA;CAAO,GAC/C,6BAA6B,CAE/B;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,sBAAsB,EAC7B,KAAK,EAAE,6BAA6B,GACnC,QAAQ,EAAE,CAEZ"}
@@ -0,0 +1,246 @@
1
+ import { isRecord } from "../../chat/conversation.js";
2
+ import { safeJsonParse } from "../../chat/provider-errors.js";
3
+ import { mergeToolInputDelta, parseToolInputObject, stripLeadingEmptyObjectPlaceholder, } from "./data-stream.js";
4
+ function warnForkRuntimeStream(logger, message, metadata) {
5
+ logger?.warn(message, metadata);
6
+ }
7
+ /** Builds recovered step parts. */
8
+ export function buildRecoveredStepParts(step, state) {
9
+ const recoveredParts = [];
10
+ for (const toolCall of step.toolCalls) {
11
+ if (state.emittedToolCallIds.has(toolCall.toolCallId)) {
12
+ continue;
13
+ }
14
+ const streamedCall = state.toolCalls.get(toolCall.toolCallId);
15
+ warnForkRuntimeStream(state.logger, "Child fork recovered missing tool-call from final step", {
16
+ toolCallId: toolCall.toolCallId,
17
+ toolName: toolCall.toolName,
18
+ sawInputStart: streamedCall?.sawInputStart ?? false,
19
+ sawInputDelta: streamedCall?.sawInputDelta ?? false,
20
+ sawInputAvailable: streamedCall?.sawInputAvailable ?? false,
21
+ sawOutputAvailable: streamedCall?.sawOutputAvailable ?? false,
22
+ sawOutputError: streamedCall?.sawOutputError ?? false,
23
+ });
24
+ state.emittedToolCallIds.add(toolCall.toolCallId);
25
+ recoveredParts.push({
26
+ type: "tool-call",
27
+ toolCallId: toolCall.toolCallId,
28
+ toolName: toolCall.toolName,
29
+ input: toolCall.input,
30
+ });
31
+ }
32
+ for (const toolResult of step.toolResults) {
33
+ if (state.emittedToolResultIds.has(toolResult.toolCallId)) {
34
+ continue;
35
+ }
36
+ const streamedCall = state.toolCalls.get(toolResult.toolCallId);
37
+ warnForkRuntimeStream(state.logger, "Child fork recovered missing tool-result from final step", {
38
+ toolCallId: toolResult.toolCallId,
39
+ toolName: toolResult.toolName,
40
+ sawInputStart: streamedCall?.sawInputStart ?? false,
41
+ sawInputDelta: streamedCall?.sawInputDelta ?? false,
42
+ sawInputAvailable: streamedCall?.sawInputAvailable ?? false,
43
+ sawOutputAvailable: streamedCall?.sawOutputAvailable ?? false,
44
+ sawOutputError: streamedCall?.sawOutputError ?? false,
45
+ });
46
+ state.emittedToolResultIds.add(toolResult.toolCallId);
47
+ recoveredParts.push({
48
+ type: "tool-result",
49
+ toolCallId: toolResult.toolCallId,
50
+ toolName: toolResult.toolName,
51
+ input: toolResult.input,
52
+ output: toolResult.output,
53
+ });
54
+ }
55
+ return recoveredParts;
56
+ }
57
+ function isEmptyRecord(value) {
58
+ return Object.keys(value).length === 0;
59
+ }
60
+ export function getParsedStreamedToolInput(inputText) {
61
+ const strippedInputText = stripLeadingEmptyObjectPlaceholder(inputText).trim();
62
+ const normalizedInputText = strippedInputText.startsWith('"')
63
+ ? `{${strippedInputText}`
64
+ : strippedInputText;
65
+ if (normalizedInputText.length === 0) {
66
+ return {};
67
+ }
68
+ const parsed = safeJsonParse(normalizedInputText);
69
+ if (!parsed.ok) {
70
+ return null;
71
+ }
72
+ return isRecord(parsed.value) ? Object.fromEntries(Object.entries(parsed.value)) : {};
73
+ }
74
+ function buildToolCallPartIfNeeded(toolCallId, state) {
75
+ const toolCall = state.toolCalls.get(toolCallId);
76
+ if (!toolCall || state.emittedToolCallIds.has(toolCallId)) {
77
+ return [];
78
+ }
79
+ state.emittedToolCallIds.add(toolCallId);
80
+ return [
81
+ {
82
+ type: "tool-call",
83
+ toolCallId,
84
+ toolName: toolCall.toolName,
85
+ input: toolCall.input,
86
+ },
87
+ ];
88
+ }
89
+ /** State for create fork runtime stream mapping. */
90
+ export function createForkRuntimeStreamMappingState(input = {}) {
91
+ return {
92
+ toolCalls: new Map(),
93
+ emittedToolCallIds: new Set(),
94
+ emittedToolResultIds: new Set(),
95
+ ...(input.logger ? { logger: input.logger } : {}),
96
+ };
97
+ }
98
+ /** Map AG-UI runtime event to fork parts. */
99
+ export function mapAgUiRuntimeEventToForkParts(event, state) {
100
+ switch (event.type) {
101
+ case "reasoning-delta":
102
+ return typeof event.delta === "string"
103
+ ? [{ type: "reasoning-delta", text: event.delta }]
104
+ : [];
105
+ case "text-delta":
106
+ return typeof event.delta === "string" ? [{ type: "text-delta", text: event.delta }] : [];
107
+ case "tool-input-start": {
108
+ const toolCallId = typeof event.toolCallId === "string" ? event.toolCallId : null;
109
+ const toolName = typeof event.toolName === "string" ? event.toolName : null;
110
+ if (!toolCallId || !toolName) {
111
+ return [];
112
+ }
113
+ const existing = state.toolCalls.get(toolCallId);
114
+ state.toolCalls.set(toolCallId, {
115
+ toolName,
116
+ inputText: existing?.inputText ?? "",
117
+ input: existing?.input ?? {},
118
+ sawInputStart: true,
119
+ sawInputDelta: existing?.sawInputDelta ?? false,
120
+ sawInputAvailable: existing?.sawInputAvailable ?? false,
121
+ sawOutputAvailable: existing?.sawOutputAvailable ?? false,
122
+ sawOutputError: existing?.sawOutputError ?? false,
123
+ });
124
+ return [{ type: "tool-input-start", toolCallId, toolName }];
125
+ }
126
+ case "tool-input-delta": {
127
+ const inputToolCallId = typeof event.toolCallId === "string" ? event.toolCallId : null;
128
+ const inputDelta = typeof event.inputTextDelta === "string" ? event.inputTextDelta : null;
129
+ if (!inputToolCallId || !inputDelta) {
130
+ return [];
131
+ }
132
+ const existing = state.toolCalls.get(inputToolCallId);
133
+ if (existing) {
134
+ existing.inputText = mergeToolInputDelta(existing.inputText, inputDelta);
135
+ existing.sawInputDelta = true;
136
+ const parsedInput = getParsedStreamedToolInput(existing.inputText);
137
+ if (parsedInput) {
138
+ existing.input = parsedInput;
139
+ }
140
+ }
141
+ else {
142
+ warnForkRuntimeStream(state.logger, "Child fork received tool-input-delta before tool-input-start", {
143
+ toolCallId: inputToolCallId,
144
+ deltaLength: inputDelta.length,
145
+ });
146
+ }
147
+ return [{ type: "tool-input-delta", toolCallId: inputToolCallId, delta: inputDelta }];
148
+ }
149
+ case "tool-input-available": {
150
+ const toolCallId = typeof event.toolCallId === "string" ? event.toolCallId : null;
151
+ const toolName = typeof event.toolName === "string" ? event.toolName : null;
152
+ if (!toolCallId || !toolName) {
153
+ return [];
154
+ }
155
+ const input = parseToolInputObject(event.input);
156
+ const existing = state.toolCalls.get(toolCallId);
157
+ const resolvedInput = existing && isEmptyRecord(input) && !isEmptyRecord(existing.input)
158
+ ? existing.input
159
+ : input;
160
+ state.toolCalls.set(toolCallId, {
161
+ toolName,
162
+ inputText: "",
163
+ input: resolvedInput,
164
+ sawInputStart: existing?.sawInputStart ?? false,
165
+ sawInputDelta: existing?.sawInputDelta ?? false,
166
+ sawInputAvailable: true,
167
+ sawOutputAvailable: existing?.sawOutputAvailable ?? false,
168
+ sawOutputError: existing?.sawOutputError ?? false,
169
+ });
170
+ return buildToolCallPartIfNeeded(toolCallId, state);
171
+ }
172
+ case "tool-output-available": {
173
+ if (event.preliminary === true) {
174
+ return [];
175
+ }
176
+ const toolCallId = typeof event.toolCallId === "string" ? event.toolCallId : null;
177
+ if (!toolCallId) {
178
+ return [];
179
+ }
180
+ const call = state.toolCalls.get(toolCallId);
181
+ if (!call) {
182
+ return [];
183
+ }
184
+ call.sawOutputAvailable = true;
185
+ const parts = [
186
+ ...buildToolCallPartIfNeeded(toolCallId, state),
187
+ ];
188
+ state.emittedToolResultIds.add(toolCallId);
189
+ parts.push({
190
+ type: "tool-result",
191
+ toolCallId,
192
+ toolName: call.toolName,
193
+ input: call.input,
194
+ output: Object.hasOwn(event, "output") ? event.output : null,
195
+ });
196
+ return parts;
197
+ }
198
+ case "tool-output-error":
199
+ case "tool-input-error": {
200
+ const toolCallId = typeof event.toolCallId === "string" ? event.toolCallId : null;
201
+ if (!toolCallId) {
202
+ return [];
203
+ }
204
+ const call = state.toolCalls.get(toolCallId);
205
+ const errorText = typeof event.errorText === "string"
206
+ ? event.errorText
207
+ : typeof event.error === "string"
208
+ ? event.error
209
+ : "Tool execution failed";
210
+ if (call) {
211
+ call.sawOutputError = true;
212
+ }
213
+ const parts = [
214
+ ...buildToolCallPartIfNeeded(toolCallId, state),
215
+ ];
216
+ parts.push({
217
+ type: "tool-error",
218
+ toolCallId,
219
+ toolName: call?.toolName ?? "unknown",
220
+ input: call?.input ?? {},
221
+ error: new Error(errorText),
222
+ });
223
+ return parts;
224
+ }
225
+ case "error": {
226
+ const errorText = typeof event.errorText === "string"
227
+ ? event.errorText
228
+ : "Framework stream failed";
229
+ return [{ type: "error", error: new Error(errorText) }];
230
+ }
231
+ default:
232
+ return [];
233
+ }
234
+ }
235
+ /** State for create framework stream.
236
+ * @deprecated Use createForkRuntimeStreamMappingState.
237
+ */
238
+ export function createFrameworkStreamState(input = {}) {
239
+ return createForkRuntimeStreamMappingState(input);
240
+ }
241
+ /** Handles map framework event to fork parts.
242
+ * @deprecated Use mapAgUiRuntimeEventToForkParts.
243
+ */
244
+ export function mapFrameworkEventToForkParts(event, state) {
245
+ return mapAgUiRuntimeEventToForkParts(event, state);
246
+ }
@@ -1,6 +1,7 @@
1
1
  import { type HostToolSet, type HostToolTraceAttributes, type Tool, type TraceHostToolsOptions } from "../../tool/index.js";
2
- import type { AgUiRuntimeStreamEvent } from "../ag-ui/browser-encoder.js";
3
2
  import type { AgentResponse, Message as AgentMessage } from "../schemas/index.js";
3
+ export { buildRecoveredStepParts, createForkRuntimeStreamMappingState, createFrameworkStreamState, mapAgUiRuntimeEventToForkParts, mapFrameworkEventToForkParts, } from "./fork-runtime-part-mapper.js";
4
+ export type { ForkRecoveredPartsState, ForkRuntimeStreamMappingState, FrameworkStreamState, RecoveredToolObservation, } from "./fork-runtime-part-mapper.js";
4
5
  interface ForkStreamPart {
5
6
  type: "reasoning-delta" | "text-delta";
6
7
  text: string;
@@ -56,25 +57,6 @@ export interface ForkRuntimeStep {
56
57
  }>;
57
58
  finishReason: string | null;
58
59
  }
59
- interface RecoveredToolObservation {
60
- sawInputStart: boolean;
61
- sawInputDelta: boolean;
62
- sawInputAvailable: boolean;
63
- sawOutputAvailable: boolean;
64
- sawOutputError: boolean;
65
- }
66
- /** State for fork recovered parts. */
67
- export interface ForkRecoveredPartsState {
68
- toolCalls: Map<string, RecoveredToolObservation>;
69
- emittedToolCallIds: Set<string>;
70
- emittedToolResultIds: Set<string>;
71
- logger?: ForkRuntimeStreamLogger;
72
- }
73
- type ForkRuntimeToolCallState = RecoveredToolObservation & {
74
- toolName: string;
75
- inputText: string;
76
- input: Record<string, unknown>;
77
- };
78
60
  type StreamedToolCallState = {
79
61
  toolCallId: string;
80
62
  toolName: string;
@@ -94,17 +76,6 @@ type StreamedStepState = {
94
76
  messages: StreamedMessage[];
95
77
  streamError?: Error;
96
78
  };
97
- /** State for fork runtime stream mapping. */
98
- export type ForkRuntimeStreamMappingState = {
99
- toolCalls: Map<string, ForkRuntimeToolCallState>;
100
- emittedToolCallIds: Set<string>;
101
- emittedToolResultIds: Set<string>;
102
- logger?: ForkRuntimeStreamLogger;
103
- };
104
- /** State for framework stream.
105
- * @deprecated Use ForkRuntimeStreamMappingState.
106
- */
107
- export type FrameworkStreamState = ForkRuntimeStreamMappingState;
108
79
  /** Public API contract for fork part. */
109
80
  export type ForkPart = ForkStreamPart | ForkToolInputStartPart | ForkToolInputDeltaPart | ForkToolCallPart | ForkToolResultPart | ForkToolErrorPart | ForkErrorPart;
110
81
  /** Public API contract for fork runtime stream logger. */
@@ -253,23 +224,4 @@ export declare function resolveForkStepResponse(input: {
253
224
  currentMessages: readonly AgentMessage[];
254
225
  streamedStepState: StreamedStepState;
255
226
  }): Promise<AgentResponse>;
256
- /** Builds recovered step parts. */
257
- export declare function buildRecoveredStepParts(step: ForkRuntimeStep, state: ForkRecoveredPartsState): Array<ForkToolCallPart | ForkToolResultPart>;
258
- /** State for create fork runtime stream mapping. */
259
- export declare function createForkRuntimeStreamMappingState(input?: {
260
- logger?: ForkRuntimeStreamLogger;
261
- }): ForkRuntimeStreamMappingState;
262
- /** Map AG-UI runtime event to fork parts. */
263
- export declare function mapAgUiRuntimeEventToForkParts(event: AgUiRuntimeStreamEvent, state: ForkRuntimeStreamMappingState): ForkPart[];
264
- /** State for create framework stream.
265
- * @deprecated Use createForkRuntimeStreamMappingState.
266
- */
267
- export declare function createFrameworkStreamState(input?: {
268
- logger?: ForkRuntimeStreamLogger;
269
- }): ForkRuntimeStreamMappingState;
270
- /** Handles map framework event to fork parts.
271
- * @deprecated Use mapAgUiRuntimeEventToForkParts.
272
- */
273
- export declare function mapFrameworkEventToForkParts(event: AgUiRuntimeStreamEvent, state: ForkRuntimeStreamMappingState): ForkPart[];
274
- export {};
275
227
  //# sourceMappingURL=fork-runtime-stream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fork-runtime-stream.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/streaming/fork-runtime-stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fork-runtime-stream.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/streaming/fork-runtime-stream.ts"],"names":[],"mappings":"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"}