Skip to content

feat: add Ingest API codegen with Zod schema generation#9932

Merged
dante01yoon merged 7 commits intomainfrom
feat/ingest-api-codegen
Mar 15, 2026
Merged

feat: add Ingest API codegen with Zod schema generation#9932
dante01yoon merged 7 commits intomainfrom
feat/ingest-api-codegen

Conversation

@dante01yoon
Copy link
Collaborator

@dante01yoon dante01yoon commented Mar 15, 2026

Summary

  • Add packages/ingest-types/ package that auto-generates TypeScript types and Zod schemas from the Ingest service OpenAPI spec
  • Uses @hey-api/openapi-ts with built-in Zod plugin (Zod v3 compatible)
  • Filters out overlapping endpoints shared with the local ComfyUI Python backend
  • Generates 493 TypeScript types and 256 Zod schemas covering cloud-only endpoints
  • Configure knip to ignore generated files

CI automation

The cloud repo pushes generated types to this repo (push model, no private repo cloning).
See: Comfy-Org/cloud#2858

How endpoint filtering works

Codegen targets are controlled by the exclude list in packages/ingest-types/openapi-ts.config.ts. Everything in the Ingest openapi.yaml is included except overlapping endpoints that also exist in the local ComfyUI Python backend:

Excluded (overlapping with ComfyUI Python):
/prompt, /queue, /history, /object_info, /features, /settings, /system_stats, /interrupt, /upload/*, /view, /jobs, /userdata, /webhooks/*, /internal/*

Included (cloud-only, codegen targets):
/workspaces/*, /billing/*, /secrets/*, /assets/*, /tasks/*, /auth/*, /workflows/*, /workspace/*, /user, /settings/{key}, /tags, /feedback, /invite_code/*, /experiment/models/*, /global_subgraphs/*

Follow-up: replace manual types with generated ones

This PR only sets up the codegen infrastructure. A follow-up PR should replace manually maintained types with imports from @comfyorg/ingest-types:

File Lines Current Replace with
src/platform/workspace/api/workspaceApi.ts ~270 TS interfaces import type { ... } from '@comfyorg/ingest-types'
src/platform/secrets/types.ts ~32 TS interfaces import type { ... } from '@comfyorg/ingest-types'
src/platform/assets/schemas/assetSchema.ts ~125 Zod schemas import { ... } from '@comfyorg/ingest-types/zod'
src/platform/assets/schemas/mediaAssetSchema.ts ~50 Zod schemas import { ... } from '@comfyorg/ingest-types/zod'
src/platform/tasks/services/taskService.ts ~70 Zod schemas import { ... } from '@comfyorg/ingest-types/zod'
src/platform/workspace/workspaceTypes.ts ~6 TS interface export type { ... } from '@comfyorg/ingest-types'

Test plan

  • pnpm generate in packages/ingest-types/ produces types.gen.ts and zod.gen.ts
  • pnpm typecheck passes
  • Pre-commit hooks pass (lint, typecheck, format)
  • Generated Zod schemas validate correct data and reject invalid data
  • No import conflicts with existing code (generated types are isolated in separate package)

dante01yoon and others added 2 commits March 14, 2026 22:48
- Add packages/ingest-types/ with generated TypeScript types and Zod
  schemas from the Ingest OpenAPI spec (cloud-only endpoints)
- Filter out overlapping endpoints (/prompt, /queue, /history, etc.)
  that are shared with ComfyUI Python backend
- Add CI workflow to auto-regenerate types when Ingest spec changes
- Generate 493 TypeScript types and 256 Zod schemas covering
  workspaces, billing, secrets, assets, tasks, and more

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link

github-actions bot commented Mar 15, 2026

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 03/15/2026, 12:46:23 PM UTC

Links

@github-actions
Copy link

github-actions bot commented Mar 15, 2026

🎭 Playwright: ✅ 556 passed, 0 failed · 7 flaky

📊 Browser Reports
  • chromium: View Report (✅ 543 / ❌ 0 / ⚠️ 7 / ⏭️ 10)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 10 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 15, 2026

📝 Walkthrough

Walkthrough

A new package @comfyorg/ingest-types is introduced with automated OpenAPI TypeScript type and Zod schema generation. The package provides centralized exports of generated API types for validation and type safety across the monorepo.

Changes

Cohort / File(s) Summary
Package Configuration
knip.config.ts
Added workspace entry for packages/ingest-types with project patterns and explicit entry point; extended ignoreBinaries to include "generate" and expanded ignored files list for auto-generated API types.
Package Manifest
packages/ingest-types/package.json
Established new package with module exports (root and zod-specific), generate script with post-processing for Zod imports, dependencies on zod and @hey-api/openapi-ts, and nx tags for shared types.
OpenAPI Code Generation
packages/ingest-types/openapi-ts.config.ts
Configured OpenAPI TypeScript generator with input/output settings, parser filters excluding internal endpoints (prompt, queue, history, object_info, etc.), and plugins for TypeScript and Zod schema generation.
Generated Type Exports
packages/ingest-types/src/index.ts
Barrel export aggregating 497+ type names from types.gen, providing a unified public API surface for generated API types.
Generated Zod Schemas
packages/ingest-types/src/zod.gen.ts
Auto-generated Zod schema definitions (1930 lines) covering requests, responses, data structures, and validation constraints for workflows, billing, assets, secrets, users, invites, and related API entities.
Build & Metadata Configuration
packages/ingest-types/tsconfig.json, packages/ingest-types/.gitignore, .gitattributes
Added TypeScript config extending root tsconfig with src directory settings; git ignore patterns for openapi.yaml and crash logs; marked generated type files as linguist-generated.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

🐰 Hop hop, new types arise,
From OpenAPI specs and Zod's device,
Generated schemas dance and play,
Validation flows the rabbit way! 🎉

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: adding a new package for Ingest API code generation with Zod schema support.
Description check ✅ Passed The description comprehensively covers the changes, including summary, dependencies, filtering logic, follow-up work, and test plan, matching the template structure.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
End-To-End Regression Coverage For Fixes ✅ Passed PR title uses 'feat:' prefix indicating a feature addition, and commit messages contain no bug-fix language. This PR adds Ingest API codegen infrastructure with Zod schema generation, which is a feature, not a bug fix.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/ingest-api-codegen
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@socket-security
Copy link

socket-security bot commented Mar 15, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​hey-api/​openapi-ts@​0.93.09910010096100

View full report

@github-actions
Copy link

github-actions bot commented Mar 15, 2026

📦 Bundle: 4.99 MB gzip 🟢 -24 B

Details

Summary

  • Raw size: 23 MB baseline 23 MB — ⚪ 0 B
  • Gzip: 4.99 MB baseline 4.99 MB — 🟢 -24 B
  • Brotli: 3.85 MB baseline 3.85 MB — 🔴 +15 B
  • Bundles: 235 current • 235 baseline • 112 added / 112 removed

Category Glance
Vendor & Third-Party ⚪ 0 B (9.78 MB) · Other ⚪ 0 B (8.21 MB) · Data & Services ⚪ 0 B (3.17 MB) · Graph Workspace ⚪ 0 B (1.08 MB) · Panels & Settings ⚪ 0 B (460 kB) · Editors & Dialogs ⚪ 0 B (81.8 kB) · + 5 more

App Entry Points — 21.7 kB (baseline 21.7 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-Czn9v0Kx.js (new) 21.7 kB 🔴 +21.7 kB 🔴 +7.72 kB 🔴 +6.65 kB
assets/index-uPDuYeYi.js (removed) 21.7 kB 🟢 -21.7 kB 🟢 -7.71 kB 🟢 -6.64 kB

Status: 1 added / 1 removed

Graph Workspace — 1.08 MB (baseline 1.08 MB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BU2fwC6I.js (new) 1.08 MB 🔴 +1.08 MB 🔴 +230 kB 🔴 +174 kB
assets/GraphView-BxBFwS5Z.js (removed) 1.08 MB 🟢 -1.08 MB 🟢 -230 kB 🟢 -174 kB

Status: 1 added / 1 removed

Views & Navigation — 75.3 kB (baseline 75.3 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-D2edo4Nb.js (removed) 15.6 kB 🟢 -15.6 kB 🟢 -3.38 kB 🟢 -2.88 kB
assets/CloudSurveyView-DPv3YgTc.js (new) 15.6 kB 🔴 +15.6 kB 🔴 +3.38 kB 🔴 +2.88 kB
assets/CloudLoginView-CsmtmqbE.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.26 kB 🟢 -2.89 kB
assets/CloudLoginView-tNY8q52u.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.26 kB 🔴 +2.89 kB
assets/CloudSignupView-B9Qw9HUi.js (removed) 9.52 kB 🟢 -9.52 kB 🟢 -2.76 kB 🟢 -2.42 kB
assets/CloudSignupView-Ds00Xgql.js (new) 9.52 kB 🔴 +9.52 kB 🔴 +2.75 kB 🔴 +2.41 kB
assets/UserCheckView-Bg1nSua0.js (removed) 9.01 kB 🟢 -9.01 kB 🟢 -2.31 kB 🟢 -2.01 kB
assets/UserCheckView-DXP_GzoP.js (new) 9.01 kB 🔴 +9.01 kB 🔴 +2.31 kB 🔴 +2.01 kB
assets/CloudLayoutView-BhaKXe46.js (removed) 7.3 kB 🟢 -7.3 kB 🟢 -2.26 kB 🟢 -1.96 kB
assets/CloudLayoutView-DPXzgDhT.js (new) 7.3 kB 🔴 +7.3 kB 🔴 +2.26 kB 🔴 +1.96 kB
assets/CloudForgotPasswordView-DLiKOBTc.js (removed) 5.73 kB 🟢 -5.73 kB 🟢 -1.99 kB 🟢 -1.75 kB
assets/CloudForgotPasswordView-DLT_Knxx.js (new) 5.73 kB 🔴 +5.73 kB 🔴 +1.99 kB 🔴 +1.75 kB
assets/CloudAuthTimeoutView-Cb8nKasF.js (removed) 5.09 kB 🟢 -5.09 kB 🟢 -1.83 kB 🟢 -1.6 kB
assets/CloudAuthTimeoutView-CewRYc45.js (new) 5.09 kB 🔴 +5.09 kB 🔴 +1.83 kB 🔴 +1.6 kB
assets/CloudSubscriptionRedirectView-Cx4sYJg8.js (removed) 4.93 kB 🟢 -4.93 kB 🟢 -1.84 kB 🟢 -1.62 kB
assets/CloudSubscriptionRedirectView-zJKomJyy.js (new) 4.93 kB 🔴 +4.93 kB 🔴 +1.84 kB 🔴 +1.62 kB
assets/UserSelectView-C-RZj0KR.js (new) 4.67 kB 🔴 +4.67 kB 🔴 +1.73 kB 🔴 +1.53 kB
assets/UserSelectView-DZjJn7Nz.js (removed) 4.67 kB 🟢 -4.67 kB 🟢 -1.73 kB 🟢 -1.53 kB
assets/CloudSorryContactSupportView-DVucrv0K.js 1.21 kB 1.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-BE0wPzm2.js 385 B 385 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

Panels & Settings — 460 kB (baseline 460 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/KeybindingPanel-BMPiGj6n.js (removed) 28.8 kB 🟢 -28.8 kB 🟢 -6.14 kB 🟢 -5.46 kB
assets/KeybindingPanel-Cfa-8qZt.js (new) 28.8 kB 🔴 +28.8 kB 🔴 +6.14 kB 🔴 +5.48 kB
assets/SecretsPanel-BQxjBKaw.js (removed) 22.3 kB 🟢 -22.3 kB 🟢 -5.41 kB 🟢 -4.75 kB
assets/SecretsPanel-CfUJSgbJ.js (new) 22.3 kB 🔴 +22.3 kB 🔴 +5.41 kB 🔴 +4.77 kB
assets/LegacyCreditsPanel-80ElA9nQ.js (removed) 21.2 kB 🟢 -21.2 kB 🟢 -5.67 kB 🟢 -4.99 kB
assets/LegacyCreditsPanel-BYFVKdlK.js (new) 21.2 kB 🔴 +21.2 kB 🔴 +5.66 kB 🔴 +4.99 kB
assets/SubscriptionPanel-BneWEe45.js (new) 19.1 kB 🔴 +19.1 kB 🔴 +4.83 kB 🔴 +4.23 kB
assets/SubscriptionPanel-CSXBczO3.js (removed) 19.1 kB 🟢 -19.1 kB 🟢 -4.82 kB 🟢 -4.24 kB
assets/AboutPanel-Dp0-TApK.js (new) 11.9 kB 🔴 +11.9 kB 🔴 +3.3 kB 🔴 +2.96 kB
assets/AboutPanel-eVCKm6ge.js (removed) 11.9 kB 🟢 -11.9 kB 🟢 -3.3 kB 🟢 -2.95 kB
assets/ExtensionPanel-BsVHqZ0T.js (new) 9.54 kB 🔴 +9.54 kB 🔴 +2.71 kB 🔴 +2.4 kB
assets/ExtensionPanel-I4Dy5Kfu.js (removed) 9.54 kB 🟢 -9.54 kB 🟢 -2.71 kB 🟢 -2.41 kB
assets/ServerConfigPanel-BBJpgImU.js (removed) 6.62 kB 🟢 -6.62 kB 🟢 -2.19 kB 🟢 -1.96 kB
assets/ServerConfigPanel-DesnPRbi.js (new) 6.62 kB 🔴 +6.62 kB 🔴 +2.19 kB 🔴 +1.96 kB
assets/UserPanel-BPWGKUEq.js (new) 6.33 kB 🔴 +6.33 kB 🔴 +2.05 kB 🔴 +1.8 kB
assets/UserPanel-BpzWVl7A.js (removed) 6.33 kB 🟢 -6.33 kB 🟢 -2.05 kB 🟢 -1.8 kB
assets/cloudRemoteConfig-2o8GkRWs.js (new) 1.62 kB 🔴 +1.62 kB 🔴 +798 B 🔴 +683 B
assets/cloudRemoteConfig-C1bt4Zs2.js (removed) 1.62 kB 🟢 -1.62 kB 🟢 -800 B 🟢 -681 B
assets/refreshRemoteConfig-BXVvUQPz.js (removed) 1.45 kB 🟢 -1.45 kB 🟢 -650 B 🟢 -552 B
assets/refreshRemoteConfig-CKH_alxH.js (new) 1.45 kB 🔴 +1.45 kB 🔴 +648 B 🔴 +553 B
assets/config-BazmIiy7.js 1.79 kB 1.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-4x1YHshq.js 28.9 kB 28.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-9RehNOAa.js 28.9 kB 28.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CgIImzXZ.js 34.4 kB 34.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-ChUKcC_S.js 28 kB 28 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CyVE159k.js 30.1 kB 30.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DcAJ3VeS.js 32.6 kB 32.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DcxL5WJ9.js 24 kB 24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DPGGy1ee.js 30.7 kB 30.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-fYZUwZW3.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-JqHYHJz0.js 38.8 kB 38.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-WgI_mXzx.js 24.6 kB 24.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 10 added / 10 removed

User & Accounts — 16.6 kB (baseline 16.6 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-BPZO4cIY.js (new) 3.57 kB 🔴 +3.57 kB 🔴 +1.26 kB 🔴 +1.07 kB
assets/auth-DkFcza7K.js (removed) 3.57 kB 🟢 -3.57 kB 🟢 -1.26 kB 🟢 -1.07 kB
assets/SignUpForm-CNLD7uar.js (new) 3.18 kB 🔴 +3.18 kB 🔴 +1.29 kB 🔴 +1.15 kB
assets/SignUpForm-DmF_4VqQ.js (removed) 3.18 kB 🟢 -3.18 kB 🟢 -1.29 kB 🟢 -1.15 kB
assets/UpdatePasswordContent-CGixaXPn.js (new) 2.44 kB 🔴 +2.44 kB 🔴 +1.09 kB 🔴 +968 B
assets/UpdatePasswordContent-YMtAgfvz.js (removed) 2.44 kB 🟢 -2.44 kB 🟢 -1.09 kB 🟢 -969 B
assets/firebaseAuthStore-DSqhJMbP.js (new) 788 B 🔴 +788 B 🔴 +386 B 🔴 +343 B
assets/firebaseAuthStore-wUFa0V9V.js (removed) 788 B 🟢 -788 B 🟢 -385 B 🟢 -344 B
assets/auth-4WdtoQUg.js (removed) 313 B 🟢 -313 B 🟢 -198 B 🟢 -173 B
assets/auth-tk6OSPJU.js (new) 313 B 🔴 +313 B 🔴 +198 B 🔴 +188 B
assets/PasswordFields-DcCUqFkG.js 4.68 kB 4.68 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-CVvFhrNa.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Editors & Dialogs — 81.8 kB (baseline 81.8 kB) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useShareDialog-CbAkVjUC.js (removed) 81 kB 🟢 -81 kB 🟢 -16.9 kB 🟢 -14.5 kB
assets/useShareDialog-ChESZbUg.js (new) 81 kB 🔴 +81 kB 🔴 +16.9 kB 🔴 +14.4 kB
assets/useSubscriptionDialog-BFEVInuM.js (removed) 736 B 🟢 -736 B 🟢 -378 B 🟢 -329 B
assets/useSubscriptionDialog-Cl8zPAE_.js (new) 736 B 🔴 +736 B 🔴 +376 B 🔴 +329 B

Status: 2 added / 2 removed

UI Components — 59 kB (baseline 59 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-DH1GX6IY.js (removed) 14.3 kB 🟢 -14.3 kB 🟢 -4 kB 🟢 -3.58 kB
assets/ComfyQueueButton-Y0I7BQqG.js (new) 14.3 kB 🔴 +14.3 kB 🔴 +4 kB 🔴 +3.58 kB
assets/useTerminalTabs-B66koeCC.js (new) 10.4 kB 🔴 +10.4 kB 🔴 +3.5 kB 🔴 +3.08 kB
assets/useTerminalTabs-ofJT_47R.js (removed) 10.4 kB 🟢 -10.4 kB 🟢 -3.5 kB 🟢 -3.08 kB
assets/SubscribeButton-BE0eovsh.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.04 kB 🟢 -918 B
assets/SubscribeButton-D9xBsZar.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +1.04 kB 🔴 +916 B
assets/cloudFeedbackTopbarButton-CFbPs96E.js (new) 1.43 kB 🔴 +1.43 kB 🔴 +742 B 🔴 +658 B
assets/cloudFeedbackTopbarButton-DTNhstw4.js (removed) 1.43 kB 🟢 -1.43 kB 🟢 -741 B 🟢 -663 B
assets/ComfyQueueButton-CWalOw-X.js (removed) 793 B 🟢 -793 B 🟢 -394 B 🟢 -352 B
assets/ComfyQueueButton-CZ78jY8A.js (new) 793 B 🔴 +793 B 🔴 +393 B 🔴 +350 B
assets/Button-CzCLfUsG.js 3.42 kB 3.42 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-B8l4Ioh2.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/FormSearchInput-BpEgMicB.js 3.94 kB 3.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-Dx7LngHp.js 6.27 kB 6.27 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/toggle-group-By5E1G-i.js 4.03 kB 4.03 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-Bnm3BoM3.js 7.53 kB 7.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-XBmTe5nW.js 1.24 kB 1.24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-C5HuExH9.js 2.04 kB 2.04 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 5 added / 5 removed

Data & Services — 3.17 MB (baseline 3.17 MB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-CdvXzRgr.js (removed) 2.15 MB 🟢 -2.15 MB 🟢 -495 kB 🟢 -370 kB
assets/dialogService-QTsb0lsu.js (new) 2.15 MB 🔴 +2.15 MB 🔴 +495 kB 🔴 +370 kB
assets/api-Bsz7cux6.js (removed) 862 kB 🟢 -862 kB 🟢 -206 kB 🟢 -162 kB
assets/api-EzCMtncY.js (new) 862 kB 🔴 +862 kB 🔴 +206 kB 🔴 +162 kB
assets/load3dService-BrjHUaak.js (new) 93.3 kB 🔴 +93.3 kB 🔴 +19.8 kB 🔴 +17 kB
assets/load3dService-CYtnHqzJ.js (removed) 93.3 kB 🟢 -93.3 kB 🟢 -19.8 kB 🟢 -17 kB
assets/extensionStore-BRPzNv33.js (removed) 19.9 kB 🟢 -19.9 kB 🟢 -6.7 kB 🟢 -5.87 kB
assets/extensionStore-DrHKVvXO.js (new) 19.9 kB 🔴 +19.9 kB 🔴 +6.7 kB 🔴 +5.87 kB
assets/workflowShareService-MH1WSfEB.js (new) 14.1 kB 🔴 +14.1 kB 🔴 +4.32 kB 🔴 +3.8 kB
assets/workflowShareService-v0Uv9ITF.js (removed) 14.1 kB 🟢 -14.1 kB 🟢 -4.32 kB 🟢 -3.8 kB
assets/releaseStore-AOzj539o.js (new) 8.07 kB 🔴 +8.07 kB 🔴 +2.26 kB 🔴 +1.98 kB
assets/releaseStore-DMpKjnSv.js (removed) 8.07 kB 🟢 -8.07 kB 🟢 -2.25 kB 🟢 -1.98 kB
assets/keybindingService-D8jfxPAM.js (new) 6.99 kB 🔴 +6.99 kB 🔴 +1.74 kB 🔴 +1.49 kB
assets/keybindingService-Dre4LgTP.js (removed) 6.99 kB 🟢 -6.99 kB 🟢 -1.73 kB 🟢 -1.49 kB
assets/userStore-DnC83AXs.js (new) 2.24 kB 🔴 +2.24 kB 🔴 +870 B 🔴 +759 B
assets/userStore-uUsw0KB0.js (removed) 2.24 kB 🟢 -2.24 kB 🟢 -869 B 🟢 -765 B
assets/bootstrapStore-5rPEproV.js (new) 2.11 kB 🔴 +2.11 kB 🔴 +889 B 🔴 +809 B
assets/bootstrapStore-ceewq-F2.js (removed) 2.11 kB 🟢 -2.11 kB 🟢 -891 B 🟢 -807 B
assets/audioService-BehI35KS.js (removed) 1.75 kB 🟢 -1.75 kB 🟢 -865 B 🟢 -746 B
assets/audioService-CMTeC6C0.js (new) 1.75 kB 🔴 +1.75 kB 🔴 +863 B 🔴 +747 B
assets/releaseStore-ClKzCt7N.js (new) 760 B 🔴 +760 B 🔴 +384 B 🔴 +346 B
assets/releaseStore-DdV9BELo.js (removed) 760 B 🟢 -760 B 🟢 -384 B 🟢 -340 B
assets/workflowDraftStore-CaUW2jTI.js (removed) 736 B 🟢 -736 B 🟢 -378 B 🟢 -334 B
assets/workflowDraftStore-NH-H-frM.js (new) 736 B 🔴 +736 B 🔴 +375 B 🔴 +336 B
assets/dialogService-B9_w395O.js (removed) 725 B 🟢 -725 B 🟢 -366 B 🟢 -329 B
assets/dialogService-CQ7wPUMo.js (new) 725 B 🔴 +725 B 🔴 +366 B 🔴 +329 B
assets/settingStore-DhHRUWXp.js (removed) 723 B 🟢 -723 B 🟢 -373 B 🟢 -328 B
assets/settingStore-EEfG1UJ6.js (new) 723 B 🔴 +723 B 🔴 +369 B 🔴 +327 B
assets/assetsStore-BFXhE_bj.js (new) 722 B 🔴 +722 B 🔴 +369 B 🔴 +328 B
assets/assetsStore-C9PfcxQt.js (removed) 722 B 🟢 -722 B 🟢 -369 B 🟢 -329 B
assets/serverConfigStore-BMw7voHC.js 2.35 kB 2.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 15 added / 15 removed

Utilities & Hooks — 68.9 kB (baseline 68.9 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useLoad3dViewer-2iJ2oeYR.js (new) 15.1 kB 🔴 +15.1 kB 🔴 +3.42 kB 🔴 +3.02 kB
assets/useLoad3dViewer-BSJ3HtLL.js (removed) 15.1 kB 🟢 -15.1 kB 🟢 -3.42 kB 🟢 -3.03 kB
assets/useLoad3d-BNmE7YJT.js (new) 14.6 kB 🔴 +14.6 kB 🔴 +3.65 kB 🔴 +3.23 kB
assets/useLoad3d-sV4PKRUa.js (removed) 14.6 kB 🟢 -14.6 kB 🟢 -3.65 kB 🟢 -3.23 kB
assets/useFeatureFlags-B4RdRbXy.js (removed) 5.78 kB 🟢 -5.78 kB 🟢 -1.75 kB 🟢 -1.48 kB
assets/useFeatureFlags-PsfUM3eW.js (new) 5.78 kB 🔴 +5.78 kB 🔴 +1.75 kB 🔴 +1.48 kB
assets/useWorkspaceUI--R3vc9aT.js (removed) 3.34 kB 🟢 -3.34 kB 🟢 -978 B 🟢 -812 B
assets/useWorkspaceUI-BAjwd2OP.js (new) 3.34 kB 🔴 +3.34 kB 🔴 +977 B 🔴 +812 B
assets/subscriptionCheckoutUtil-BWXrwXTa.js (removed) 3.04 kB 🟢 -3.04 kB 🟢 -1.31 kB 🟢 -1.15 kB
assets/subscriptionCheckoutUtil-Ccaxs8DC.js (new) 3.04 kB 🔴 +3.04 kB 🔴 +1.31 kB 🔴 +1.15 kB
assets/useUpstreamValue-BFLPRE-X.js (new) 2.08 kB 🔴 +2.08 kB 🔴 +803 B 🔴 +719 B
assets/useUpstreamValue-BkvWtA1F.js (removed) 2.08 kB 🟢 -2.08 kB 🟢 -803 B 🟢 -718 B
assets/useErrorHandling-BPMjGFrB.js (removed) 1.54 kB 🟢 -1.54 kB 🟢 -649 B 🟢 -550 B
assets/useErrorHandling-NUUh5tK0.js (new) 1.54 kB 🔴 +1.54 kB 🔴 +649 B 🔴 +554 B
assets/audioUtils-BjMi9MGT.js (new) 958 B 🔴 +958 B 🔴 +563 B 🔴 +495 B
assets/audioUtils-Bm2Ei2cL.js (removed) 958 B 🟢 -958 B 🟢 -564 B 🟢 -497 B
assets/useLoad3d-DMHSimja.js (removed) 859 B 🟢 -859 B 🟢 -423 B 🟢 -377 B
assets/useLoad3d-DYBjNWnb.js (new) 859 B 🔴 +859 B 🔴 +423 B 🔴 +379 B
assets/useLoad3dViewer-C5f_GiuN.js (new) 838 B 🔴 +838 B 🔴 +407 B 🔴 +369 B
assets/useLoad3dViewer-DKIfFtdF.js (removed) 838 B 🟢 -838 B 🟢 -407 B 🟢 -366 B
assets/useWorkspaceSwitch-GArZwMWb.js (new) 747 B 🔴 +747 B 🔴 +383 B 🔴 +328 B
assets/useWorkspaceSwitch-nYjZQ3CY.js (removed) 747 B 🟢 -747 B 🟢 -385 B 🟢 -329 B
assets/useCurrentUser-B6dVLIDt.js (removed) 722 B 🟢 -722 B 🟢 -372 B 🟢 -330 B
assets/useCurrentUser-DzcQCluw.js (new) 722 B 🔴 +722 B 🔴 +370 B 🔴 +331 B
assets/_plugin-vue_export-helper-DqNI4win.js 365 B 365 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/assetMetadataUtils-Cu1m4aen.js 4.78 kB 4.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-BoDX6eKf.js 8.89 kB 8.89 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-BOOGgtql.js 489 B 489 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-AGO63igr.js 1.59 kB 1.59 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-BrLYgVOH.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-_Rbq0GZz.js 3.04 kB 3.04 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 removed

Vendor & Third-Party — 9.78 MB (baseline 9.78 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-B-zaJ78_.js 93 kB 93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-QIvOlSgA.js 411 kB 411 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-firebase-x5F51RZV.js 1.01 MB 1.01 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-i18n-TjUfhse9.js 140 kB 140 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-BAquA4iy.js 110 kB 110 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-DD8n2cnE.js 1.76 MB 1.76 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-DGRjWEoA.js 1.75 MB 1.75 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-CCjqphhL.js 474 kB 474 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-sentry-Dn2jSJwd.js 267 kB 267 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-D0iKHrgP.js 1.83 MB 1.83 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-bePjZBYs.js 737 kB 737 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-Ba0aGEmU.js 328 kB 328 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-DrtiTSko.js 136 kB 136 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-DZ7n4cB7.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-yjs-B0izGxZ6.js 246 kB 246 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-zod-W_VsqAhz.js 111 kB 111 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 8.21 MB (baseline 8.21 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-D9C4jBBe.js (removed) 75.7 kB 🟢 -75.7 kB 🟢 -19.5 kB 🟢 -16.7 kB
assets/core-DH175rLe.js (new) 75.7 kB 🔴 +75.7 kB 🔴 +19.5 kB 🔴 +16.7 kB
assets/groupNode-CUsPgvya.js (removed) 73.9 kB 🟢 -73.9 kB 🟢 -18.5 kB 🟢 -16.2 kB
assets/groupNode-DlQUhneB.js (new) 73.9 kB 🔴 +73.9 kB 🔴 +18.5 kB 🔴 +16.2 kB
assets/WidgetSelect-B96StZUD.js (removed) 63.2 kB 🟢 -63.2 kB 🟢 -13.8 kB 🟢 -11.9 kB
assets/WidgetSelect-C3WbR9Fe.js (new) 63.2 kB 🔴 +63.2 kB 🔴 +13.8 kB 🔴 +11.9 kB
assets/SubscriptionRequiredDialogContentWorkspace-DMboqq_F.js (removed) 47.1 kB 🟢 -47.1 kB 🟢 -8.75 kB 🟢 -7.56 kB
assets/SubscriptionRequiredDialogContentWorkspace-DTmVOjiD.js (new) 47.1 kB 🔴 +47.1 kB 🔴 +8.75 kB 🔴 +7.58 kB
assets/WidgetPainter-DdYgfggj.js (new) 33.1 kB 🔴 +33.1 kB 🔴 +8.01 kB 🔴 +7.1 kB
assets/WidgetPainter-O7lk9fU_.js (removed) 33.1 kB 🟢 -33.1 kB 🟢 -8.01 kB 🟢 -7.12 kB
assets/Load3DControls-CwIK7-cc.js (new) 32.1 kB 🔴 +32.1 kB 🔴 +5.47 kB 🔴 +4.76 kB
assets/Load3DControls-M-DM_foc.js (removed) 32.1 kB 🟢 -32.1 kB 🟢 -5.47 kB 🟢 -4.76 kB
assets/WorkspacePanelContent-AFRYoGr3.js (new) 29.7 kB 🔴 +29.7 kB 🔴 +6.22 kB 🔴 +5.48 kB
assets/WorkspacePanelContent-D89zd_1C.js (removed) 29.7 kB 🟢 -29.7 kB 🟢 -6.22 kB 🟢 -5.45 kB
assets/SubscriptionRequiredDialogContent-Cf0KAPCW.js (removed) 26.1 kB 🟢 -26.1 kB 🟢 -6.61 kB 🟢 -5.83 kB
assets/SubscriptionRequiredDialogContent-UOpuzgZW.js (new) 26.1 kB 🔴 +26.1 kB 🔴 +6.61 kB 🔴 +5.85 kB
assets/Load3dViewerContent-BFi2TXiG.js (new) 24.3 kB 🔴 +24.3 kB 🔴 +5.31 kB 🔴 +4.62 kB
assets/Load3dViewerContent-D6-o6THj.js (removed) 24.3 kB 🟢 -24.3 kB 🟢 -5.32 kB 🟢 -4.63 kB
assets/WidgetImageCrop-Crs4AVBS.js (removed) 23.1 kB 🟢 -23.1 kB 🟢 -5.75 kB 🟢 -5.08 kB
assets/WidgetImageCrop-DLNbu1bC.js (new) 23.1 kB 🔴 +23.1 kB 🔴 +5.75 kB 🔴 +5.06 kB
assets/SubscriptionPanelContentWorkspace-3t6ZqIGW.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.17 kB 🟢 -4.55 kB
assets/SubscriptionPanelContentWorkspace-CYjYrKYG.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.17 kB 🔴 +4.56 kB
assets/CurrentUserPopoverWorkspace-CpNZMDY0.js (new) 20.8 kB 🔴 +20.8 kB 🔴 +4.99 kB 🔴 +4.45 kB
assets/CurrentUserPopoverWorkspace-J3ru3ZDU.js (removed) 20.8 kB 🟢 -20.8 kB 🟢 -4.99 kB 🟢 -4.45 kB
assets/SignInContent-DipHViRm.js (new) 20 kB 🔴 +20 kB 🔴 +5.16 kB 🔴 +4.5 kB
assets/SignInContent-DlBu4Qtl.js (removed) 20 kB 🟢 -20 kB 🟢 -5.16 kB 🟢 -4.5 kB
assets/WidgetInputNumber-C0L6JFoM.js (new) 19.1 kB 🔴 +19.1 kB 🔴 +4.84 kB 🔴 +4.29 kB
assets/WidgetInputNumber-DiFHcxf7.js (removed) 19.1 kB 🟢 -19.1 kB 🟢 -4.84 kB 🟢 -4.3 kB
assets/WidgetRecordAudio-Bu4XfYpP.js (new) 17.9 kB 🔴 +17.9 kB 🔴 +5.09 kB 🔴 +4.57 kB
assets/WidgetRecordAudio-cJOQUbus.js (removed) 17.9 kB 🟢 -17.9 kB 🟢 -5.09 kB 🟢 -4.57 kB
assets/Load3D-7isBbLgw.js (removed) 16.8 kB 🟢 -16.8 kB 🟢 -4.11 kB 🟢 -3.6 kB
assets/Load3D-DKGma1yt.js (new) 16.8 kB 🔴 +16.8 kB 🔴 +4.11 kB 🔴 +3.6 kB
assets/load3d-Cn-tWdQM.js (removed) 14.8 kB 🟢 -14.8 kB 🟢 -4.2 kB 🟢 -3.65 kB
assets/load3d-ZAtuEDNh.js (new) 14.8 kB 🔴 +14.8 kB 🔴 +4.2 kB 🔴 +3.64 kB
assets/WidgetCurve-CIUTRDfC.js (removed) 11.7 kB 🟢 -11.7 kB 🟢 -3.89 kB 🟢 -3.5 kB
assets/WidgetCurve-CUdX07Kw.js (new) 11.7 kB 🔴 +11.7 kB 🔴 +3.89 kB 🔴 +3.5 kB
assets/AudioPreviewPlayer-Bs9L4alo.js (removed) 11.2 kB 🟢 -11.2 kB 🟢 -3.3 kB 🟢 -2.96 kB
assets/AudioPreviewPlayer-vg93e38n.js (new) 11.2 kB 🔴 +11.2 kB 🔴 +3.3 kB 🔴 +2.95 kB
assets/nodeTemplates-CNE8y3JL.js (removed) 9.33 kB 🟢 -9.33 kB 🟢 -3.28 kB 🟢 -2.88 kB
assets/nodeTemplates-D7679Nto.js (new) 9.33 kB 🔴 +9.33 kB 🔴 +3.28 kB 🔴 +2.88 kB
assets/InviteMemberDialogContent-C2mFFAJp.js (new) 7.53 kB 🔴 +7.53 kB 🔴 +2.36 kB 🔴 +2.06 kB
assets/InviteMemberDialogContent-D5zKdiTW.js (removed) 7.53 kB 🟢 -7.53 kB 🟢 -2.35 kB 🟢 -2.06 kB
assets/Load3DConfiguration-BtN_XYfT.js (new) 6.55 kB 🔴 +6.55 kB 🔴 +2.03 kB 🔴 +1.77 kB
assets/Load3DConfiguration-c6spx2uU.js (removed) 6.55 kB 🟢 -6.55 kB 🟢 -2.03 kB 🟢 -1.77 kB
assets/onboardingCloudRoutes-Bwunky8Y.js (new) 6.15 kB 🔴 +6.15 kB 🔴 +1.91 kB 🔴 +1.66 kB
assets/onboardingCloudRoutes-DUZc9cXi.js (removed) 6.15 kB 🟢 -6.15 kB 🟢 -1.91 kB 🟢 -1.67 kB
assets/WidgetWithControl-Csf-VHBt.js (removed) 5.76 kB 🟢 -5.76 kB 🟢 -2.25 kB 🟢 -2.01 kB
assets/WidgetWithControl-Daqm3tti.js (new) 5.76 kB 🔴 +5.76 kB 🔴 +2.25 kB 🔴 +2.02 kB
assets/CreateWorkspaceDialogContent-BNqim5o9.js (new) 5.71 kB 🔴 +5.71 kB 🔴 +2.05 kB 🔴 +1.79 kB
assets/CreateWorkspaceDialogContent-DCUqI38T.js (removed) 5.71 kB 🟢 -5.71 kB 🟢 -2.05 kB 🟢 -1.78 kB
assets/FreeTierDialogContent-7M_RSxaE.js (removed) 5.54 kB 🟢 -5.54 kB 🟢 -1.93 kB 🟢 -1.72 kB
assets/FreeTierDialogContent-DIyg8vHp.js (new) 5.54 kB 🔴 +5.54 kB 🔴 +1.93 kB 🔴 +1.71 kB
assets/EditWorkspaceDialogContent-BVYdu9C4.js (new) 5.51 kB 🔴 +5.51 kB 🔴 +2.01 kB 🔴 +1.76 kB
assets/EditWorkspaceDialogContent-F3__FwVP.js (removed) 5.51 kB 🟢 -5.51 kB 🟢 -2.01 kB 🟢 -1.76 kB
assets/ValueControlPopover-DvyMoOlv.js (removed) 5.1 kB 🟢 -5.1 kB 🟢 -1.82 kB 🟢 -1.63 kB
assets/ValueControlPopover-GkthBRtO.js (new) 5.1 kB 🔴 +5.1 kB 🔴 +1.82 kB 🔴 +1.62 kB
assets/Preview3d-BZRhFtST.js (removed) 5.08 kB 🟢 -5.08 kB 🟢 -1.67 kB 🟢 -1.46 kB
assets/Preview3d-CpZL8mF_.js (new) 5.08 kB 🔴 +5.08 kB 🔴 +1.67 kB 🔴 +1.45 kB
assets/WidgetTextarea-BZXxo41e.js (removed) 5.03 kB 🟢 -5.03 kB 🟢 -1.96 kB 🟢 -1.73 kB
assets/WidgetTextarea-CxCgpmzK.js (new) 5.03 kB 🔴 +5.03 kB 🔴 +1.96 kB 🔴 +1.75 kB
assets/CancelSubscriptionDialogContent-BHWuNqAd.js (new) 4.98 kB 🔴 +4.98 kB 🔴 +1.84 kB 🔴 +1.61 kB
assets/CancelSubscriptionDialogContent-CxLneyiG.js (removed) 4.98 kB 🟢 -4.98 kB 🟢 -1.84 kB 🟢 -1.62 kB
assets/tierBenefits-B0lSfuhI.js (new) 4.47 kB 🔴 +4.47 kB 🔴 +1.58 kB 🔴 +1.37 kB
assets/tierBenefits-m5c9GWBG.js (removed) 4.47 kB 🟢 -4.47 kB 🟢 -1.58 kB 🟢 -1.36 kB
assets/DeleteWorkspaceDialogContent-BN0zTAKt.js (new) 4.41 kB 🔴 +4.41 kB 🔴 +1.69 kB 🔴 +1.47 kB
assets/DeleteWorkspaceDialogContent-DA1kh0m1.js (removed) 4.41 kB 🟢 -4.41 kB 🟢 -1.69 kB 🟢 -1.47 kB
assets/LeaveWorkspaceDialogContent-77JgL8CU.js (new) 4.24 kB 🔴 +4.24 kB 🔴 +1.64 kB 🔴 +1.42 kB
assets/LeaveWorkspaceDialogContent-DCIp9Ugs.js (removed) 4.24 kB 🟢 -4.24 kB 🟢 -1.64 kB 🟢 -1.42 kB
assets/RemoveMemberDialogContent-BRjQ3xSo.js (new) 4.22 kB 🔴 +4.22 kB 🔴 +1.59 kB 🔴 +1.39 kB
assets/RemoveMemberDialogContent-DPkLmf6a.js (removed) 4.22 kB 🟢 -4.22 kB 🟢 -1.59 kB 🟢 -1.39 kB
assets/RevokeInviteDialogContent-BAR3SX7U.js (removed) 4.13 kB 🟢 -4.13 kB 🟢 -1.6 kB 🟢 -1.4 kB
assets/RevokeInviteDialogContent-BXSiXCEr.js (new) 4.13 kB 🔴 +4.13 kB 🔴 +1.6 kB 🔴 +1.4 kB
assets/InviteMemberUpsellDialogContent-B-w_12oG.js (removed) 4.03 kB 🟢 -4.03 kB 🟢 -1.46 kB 🟢 -1.28 kB
assets/InviteMemberUpsellDialogContent-CsIK9oWm.js (new) 4.03 kB 🔴 +4.03 kB 🔴 +1.46 kB 🔴 +1.28 kB
assets/cloudSessionCookie-BOvBv9vD.js (removed) 3.9 kB 🟢 -3.9 kB 🟢 -1.38 kB 🟢 -1.2 kB
assets/cloudSessionCookie-C79OEfRr.js (new) 3.9 kB 🔴 +3.9 kB 🔴 +1.38 kB 🔴 +1.2 kB
assets/saveMesh-CsHAopF7.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -1.46 kB 🟢 -1.3 kB
assets/saveMesh-hPJ_r-26.js (new) 3.42 kB 🔴 +3.42 kB 🔴 +1.46 kB 🔴 +1.3 kB
assets/GlobalToast-Cjv7DJFT.js (removed) 3.04 kB 🟢 -3.04 kB 🟢 -1.26 kB 🟢 -1.08 kB
assets/GlobalToast-CXmMc21n.js (new) 3.04 kB 🔴 +3.04 kB 🔴 +1.26 kB 🔴 +1.08 kB
assets/SubscribeToRun-BgORBVoh.js (new) 2.13 kB 🔴 +2.13 kB 🔴 +977 B 🔴 +871 B
assets/SubscribeToRun-C0FoHOG1.js (removed) 2.13 kB 🟢 -2.13 kB 🟢 -977 B 🟢 -878 B
assets/CloudRunButtonWrapper-Cnd5nz8f.js (removed) 1.76 kB 🟢 -1.76 kB 🟢 -809 B 🟢 -740 B
assets/CloudRunButtonWrapper-DRbgTRUr.js (new) 1.76 kB 🔴 +1.76 kB 🔴 +811 B 🔴 +742 B
assets/cloudBadges-BFj982Lk.js (removed) 1.53 kB 🟢 -1.53 kB 🟢 -788 B 🟢 -692 B
assets/cloudBadges-K6KbaKHl.js (new) 1.53 kB 🔴 +1.53 kB 🔴 +787 B 🔴 +700 B
assets/previousFullPath-Bjg3MZla.js (new) 1.53 kB 🔴 +1.53 kB 🔴 +691 B 🔴 +600 B
assets/previousFullPath-DVhcI05Z.js (removed) 1.53 kB 🟢 -1.53 kB 🟢 -692 B 🟢 -619 B
assets/cloudSubscription-BEUuCg9y.js (new) 1.45 kB 🔴 +1.45 kB 🔴 +707 B 🔴 +605 B
assets/cloudSubscription-DjlC2zAs.js (removed) 1.45 kB 🟢 -1.45 kB 🟢 -706 B 🟢 -612 B
assets/Load3D-BZdIuFk_.js (removed) 1.07 kB 🟢 -1.07 kB 🟢 -495 B 🟢 -445 B
assets/Load3D-CaIxSXZb.js (new) 1.07 kB 🔴 +1.07 kB 🔴 +494 B 🔴 +442 B
assets/nightlyBadges-CXBjvDM_.js (removed) 1.06 kB 🟢 -1.06 kB 🟢 -553 B 🟢 -500 B
assets/nightlyBadges-DF5LI6UU.js (new) 1.06 kB 🔴 +1.06 kB 🔴 +554 B 🔴 +496 B
assets/Load3dViewerContent-Dxqnn_Vy.js (new) 993 B 🔴 +993 B 🔴 +463 B 🔴 +417 B
assets/Load3dViewerContent-v1-Tit22.js (removed) 993 B 🟢 -993 B 🟢 -465 B 🟢 -417 B
assets/SubscriptionPanelContentWorkspace-BSjC8tUU.js (removed) 920 B 🟢 -920 B 🟢 -438 B 🟢 -379 B
assets/SubscriptionPanelContentWorkspace-IjS57fk5.js (new) 920 B 🔴 +920 B 🔴 +436 B 🔴 +381 B
assets/graphHasMissingNodes-DekfbCCj.js (removed) 822 B 🟢 -822 B 🟢 -413 B 🟢 -348 B
assets/graphHasMissingNodes-fprqsIv7.js (new) 822 B 🔴 +822 B 🔴 +414 B 🔴 +347 B
assets/WidgetLegacy-CjsY5Eh6.js (removed) 744 B 🟢 -744 B 🟢 -384 B 🟢 -340 B
assets/WidgetLegacy-cloBM3HB.js (new) 744 B 🔴 +744 B 🔴 +382 B 🔴 +338 B
assets/changeTracker-B-VESS32.js (removed) 720 B 🟢 -720 B 🟢 -370 B 🟢 -330 B
assets/changeTracker-BeJTbFeH.js (new) 720 B 🔴 +720 B 🔴 +370 B 🔴 +326 B
assets/AnimationControls-D_ssPKpl.js 4.78 kB 4.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-122DuhFE.js 2.86 kB 2.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-Da_dLKSr.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-BO4bu8SW.js 1.92 kB 1.92 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single--m8ho-x0.js 272 B 272 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-B5_02-pL.js 960 B 960 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-6C7uscef.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-aHWGoXwC.js 15.3 kB 15.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B0dAi43J.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Bm9EUr3J.js 17.2 kB 17.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Bp4kggpz.js 17.8 kB 17.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CfrqwZHT.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CWNMjnpx.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D6U7YFhN.js 17.8 kB 17.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DC5sgzz0.js 19.1 kB 19.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Dm1AG3mI.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-pcbFneET.js 16.3 kB 16.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-CDJrbKEX.js 766 B 766 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-CfPFpEth.js 553 kB 553 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-E31GmVX_.js 137 B 137 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Loader-D9NTeFNU.js 1.26 kB 1.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BIs1qLld.js 204 kB 204 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BUVqJDoB.js 187 kB 187 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BYJEKs0c.js 162 kB 162 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CBpFsmCa.js 168 kB 168 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CduD3FWK.js 165 kB 165 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CE7GagrW.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CO5hcLH6.js 171 kB 171 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Cpo91t82.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Db-L7jAY.js 196 kB 196 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DbpvTHsj.js 228 kB 228 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-ULS0BFNt.js 163 kB 163 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-lR1JiQqq.js 1.98 kB 1.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-DDwe88_i.js 1.59 kB 1.59 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-B3Ndzn8y.js 2.02 kB 2.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-DLyNtqwJ.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-BPdj4Cu9.js 1.06 kB 1.06 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-DKoWz3mq.js 2.94 kB 2.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/NightlySurveyController-BJ7Yfxt0.js 9.5 kB 9.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BhazHjGG.js 373 kB 373 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BHJWB8Hi.js 411 kB 411 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BLiR_Cci.js 423 kB 423 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BwxSR87L.js 500 kB 500 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C109fHHV.js 459 kB 459 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CeR-W4r5.js 406 kB 406 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CVv25Zq-.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CYNwkBlA.js 403 kB 403 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DGeylh_m.js 458 kB 458 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Dimlxn51.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DXcKksxR.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-xbED3XYT.js 3.77 kB 3.77 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-DBfy44LZ.js 2.02 kB 2.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-BkB8Nehs.js 9.8 kB 9.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-Cp3pGVrA.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-BYG1u0oC.js 3.57 kB 3.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-C5oPOZUH.js 290 B 290 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionBenefits-CecH6qXS.js 2.28 kB 2.28 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-7ZMuZPoG.js 443 B 443 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Textarea-BCdbAQYh.js 1.42 kB 1.42 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-BqIM6TDt.js 313 B 313 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-BEMiTJfJ.js 1.51 kB 1.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DloL8--t.js 3.5 kB 3.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BR7_6Tzc.js 3.62 kB 3.62 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-C7hcUvUl.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-Br2tE61m.js 2.41 kB 2.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-7LajmWlG.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-BP4f8SEB.js 3.8 kB 3.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-DRrbKltR.js 7.78 kB 7.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-DZD-PABh.js 3.09 kB 3.09 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-DQtrhTV6.js 2.37 kB 2.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-CifbFnvo.js 3.13 kB 3.13 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-U-tRpxOF.js 1.52 kB 1.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-CMqqTQxu.js 3.73 kB 3.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-ju3asrao.js 416 B 416 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 52 added / 52 removed

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
.github/workflows/api-update-ingest-api-types.yaml (1)

10-16: Consider adding workflow concurrency to avoid duplicate update runs.

Multiple dispatches close together can produce redundant generation/PR attempts.

⚙️ Suggested hardening
 jobs:
   update-ingest-types:
+    concurrency:
+      group: ingest-api-types-update
+      cancel-in-progress: true
     runs-on: ubuntu-latest
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/api-update-ingest-api-types.yaml around lines 10 - 16, The
workflow can trigger duplicate runs; add a top-level concurrency stanza to
prevent overlapping executions by defining concurrency: with a stable group
(e.g., "update-ingest-types-${{ github.ref }}") and cancel-in-progress: true so
only the newest run proceeds; place this top-level (not inside steps) to apply
to the update-ingest-types job and other jobs if needed.
packages/ingest-types/package.json (1)

11-11: Make the post-generation Zod import rewrite more resilient.

Current replacement only handles one exact string occurrence.

♻️ Suggested update
-    "generate": "openapi-ts && node -e \"const fs=require('fs'); ['src/zod.gen.ts'].forEach(f => fs.writeFileSync(f, fs.readFileSync(f,'utf8').replace(\\\"from 'zod/v3'\\\", \\\"from 'zod'\\\")));\""
+    "generate": "openapi-ts && node -e \"const fs=require('fs');const f='src/zod.gen.ts';const s=fs.readFileSync(f,'utf8');fs.writeFileSync(f,s.replace(/from ['\\\"]zod\\/v3['\\\"]/g, \\\"from 'zod'\\\"));\""
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/ingest-types/package.json` at line 11, The post-generation rewrite
in the "generate" npm script currently does a single exact string replacement of
"from 'zod/v3'" in 'src/zod.gen.ts' which misses other quote styles or multiple
occurrences; update the Node one-liner in the "generate" script to perform a
global, regex-based replacement (e.g., match from\s+['"]zod\/v3['"] with the
global flag) and write back the file so all occurrences and quote variations are
replaced with from 'zod'; keep it applied to the same target files (e.g.,
'src/zod.gen.ts') so the generated output is robust.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In @.github/workflows/api-update-ingest-api-types.yaml:
- Around line 10-16: The workflow can trigger duplicate runs; add a top-level
concurrency stanza to prevent overlapping executions by defining concurrency:
with a stable group (e.g., "update-ingest-types-${{ github.ref }}") and
cancel-in-progress: true so only the newest run proceeds; place this top-level
(not inside steps) to apply to the update-ingest-types job and other jobs if
needed.

In `@packages/ingest-types/package.json`:
- Line 11: The post-generation rewrite in the "generate" npm script currently
does a single exact string replacement of "from 'zod/v3'" in 'src/zod.gen.ts'
which misses other quote styles or multiple occurrences; update the Node
one-liner in the "generate" script to perform a global, regex-based replacement
(e.g., match from\s+['"]zod\/v3['"] with the global flag) and write back the
file so all occurrences and quote variations are replaced with from 'zod'; keep
it applied to the same target files (e.g., 'src/zod.gen.ts') so the generated
output is robust.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 10d9b780-f630-4765-ae9e-00b60d78528c

📥 Commits

Reviewing files that changed from the base of the PR and between 74a48ab and c8990c3.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (9)
  • .github/workflows/api-update-ingest-api-types.yaml
  • knip.config.ts
  • packages/ingest-types/.gitignore
  • packages/ingest-types/openapi-ts.config.ts
  • packages/ingest-types/package.json
  • packages/ingest-types/src/index.ts
  • packages/ingest-types/src/types.gen.ts
  • packages/ingest-types/src/zod.gen.ts
  • packages/ingest-types/tsconfig.json

@github-actions
Copy link

github-actions bot commented Mar 15, 2026

⚡ Performance Report

No regressions detected.

All metrics
Metric Baseline PR (n=3) Δ Sig
canvas-idle: style recalcs 12 12 +0% z=0.7
canvas-idle: layouts 0 0 -100% variance too high
canvas-idle: task duration 362ms 349ms -4% z=-1.0
canvas-idle: DOM nodes 37 24 -35% z=-0.5
canvas-idle: script duration 22ms 22ms +1% z=-0.7
canvas-idle: event listeners 12 6 -49% variance too high
canvas-mouse-sweep: style recalcs 81 77 -6% z=-2.7
canvas-mouse-sweep: layouts 12 12 +0%
canvas-mouse-sweep: task duration 923ms 816ms -12% z=-1.8
canvas-mouse-sweep: DOM nodes 66 61 -8% z=-3.4
canvas-mouse-sweep: script duration 136ms 131ms -4% z=-1.1
canvas-mouse-sweep: event listeners 6 5 -22%
dom-widget-clipping: style recalcs 14 15 +5%
dom-widget-clipping: layouts 0 0 variance too high
dom-widget-clipping: task duration 343ms 348ms +2% z=-0.6
dom-widget-clipping: DOM nodes 23 39 +66% z=0.9
dom-widget-clipping: script duration 65ms 65ms -1% z=-0.8
dom-widget-clipping: event listeners 2 8 +283% variance too high
large-graph-idle: style recalcs 13 13 +3%
large-graph-idle: layouts 1 0 -50%
large-graph-idle: task duration 493ms 476ms -3%
large-graph-idle: DOM nodes 53 40 -24%
large-graph-idle: script duration 93ms 89ms -5%
large-graph-idle: event listeners 17 11 -37%
large-graph-pan: style recalcs 70 71 +0%
large-graph-pan: layouts 0 0 +0%
large-graph-pan: task duration 1001ms 1010ms +1%
large-graph-pan: DOM nodes 22 22 +0%
large-graph-pan: script duration 387ms 399ms +3%
large-graph-pan: event listeners 6 6 +0%
subgraph-dom-widget-clipping: style recalcs 51 49 -3% z=-1.6
subgraph-dom-widget-clipping: layouts 1 0 -50%
subgraph-dom-widget-clipping: task duration 376ms 357ms -5% z=-1.6
subgraph-dom-widget-clipping: DOM nodes 53 38 -29% z=-64.3
subgraph-dom-widget-clipping: script duration 125ms 120ms -4% z=-2.5
subgraph-dom-widget-clipping: event listeners 19 14 -29%
subgraph-idle: style recalcs 13 12 -5% z=0.1
subgraph-idle: layouts 0 0 -100% variance too high
subgraph-idle: task duration 351ms 336ms -4% z=-1.1
subgraph-idle: DOM nodes 39 24 -39% z=-0.6
subgraph-idle: script duration 18ms 17ms -6% z=-1.0
subgraph-idle: event listeners 12 6 -49% variance too high
subgraph-mouse-sweep: style recalcs 78 78 +0% z=-0.6
subgraph-mouse-sweep: layouts 16 16 +0%
subgraph-mouse-sweep: task duration 666ms 631ms -5% z=-0.9
subgraph-mouse-sweep: DOM nodes 78 79 +1% z=-0.6
subgraph-mouse-sweep: script duration 98ms 92ms -6% z=-1.2
subgraph-mouse-sweep: event listeners 11 11 +0%
Historical variance (last 2 runs)
Metric μ σ CV
canvas-idle: style recalcs 12 1 8.1%
canvas-idle: layouts 0 0 141.4%
canvas-idle: task duration 400ms 54ms 13.5%
canvas-idle: DOM nodes 30 10 35.0%
canvas-idle: script duration 26ms 6ms 22.2%
canvas-idle: event listeners 9 4 52.7%
canvas-mouse-sweep: style recalcs 83 2 2.8%
canvas-mouse-sweep: layouts 12 0 0.0%
canvas-mouse-sweep: task duration 991ms 97ms 9.7%
canvas-mouse-sweep: DOM nodes 67 2 2.8%
canvas-mouse-sweep: script duration 144ms 11ms 7.8%
canvas-mouse-sweep: event listeners 6 0 0.0%
dom-widget-clipping: style recalcs 14 0 0.0%
dom-widget-clipping: layouts 0 0 141.4%
dom-widget-clipping: task duration 372ms 41ms 10.9%
dom-widget-clipping: DOM nodes 30 10 32.0%
dom-widget-clipping: script duration 70ms 8ms 10.8%
dom-widget-clipping: event listeners 5 4 82.9%
subgraph-dom-widget-clipping: style recalcs 51 1 1.4%
subgraph-dom-widget-clipping: layouts 1 0 0.0%
subgraph-dom-widget-clipping: task duration 391ms 21ms 5.3%
subgraph-dom-widget-clipping: DOM nodes 53 0 0.4%
subgraph-dom-widget-clipping: script duration 127ms 3ms 2.2%
subgraph-dom-widget-clipping: event listeners 19 0 0.0%
subgraph-idle: style recalcs 12 1 10.0%
subgraph-idle: layouts 0 0 141.4%
subgraph-idle: task duration 384ms 46ms 11.9%
subgraph-idle: DOM nodes 31 12 37.9%
subgraph-idle: script duration 21ms 4ms 18.4%
subgraph-idle: event listeners 9 4 52.7%
subgraph-mouse-sweep: style recalcs 81 4 5.5%
subgraph-mouse-sweep: layouts 16 0 0.0%
subgraph-mouse-sweep: task duration 804ms 195ms 24.2%
subgraph-mouse-sweep: DOM nodes 82 5 6.3%
subgraph-mouse-sweep: script duration 106ms 11ms 10.8%
subgraph-mouse-sweep: event listeners 11 0 0.0%
Raw data
{
  "timestamp": "2026-03-15T12:50:29.046Z",
  "gitSha": "6339bae6282784197ae6367492ece7e5b08e7861",
  "branch": "feat/ingest-api-codegen",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2021.3219999999978,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 9.667,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 340.74199999999996,
      "heapDeltaBytes": -5056940,
      "domNodes": 25,
      "jsHeapTotalBytes": 24117248,
      "scriptDurationMs": 20.389999999999997,
      "eventListeners": 6
    },
    {
      "name": "canvas-idle",
      "durationMs": 2028.3620000000155,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 9.022,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 345.479,
      "heapDeltaBytes": 1059952,
      "domNodes": 22,
      "jsHeapTotalBytes": 19922944,
      "scriptDurationMs": 20.528,
      "eventListeners": 6
    },
    {
      "name": "canvas-idle",
      "durationMs": 2033.871999999974,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 11.301,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 359.33899999999994,
      "heapDeltaBytes": 1118628,
      "domNodes": 25,
      "jsHeapTotalBytes": 15728640,
      "scriptDurationMs": 25.685000000000002,
      "eventListeners": 6
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 2027.1040000000085,
      "styleRecalcs": 82,
      "styleRecalcDurationMs": 44.42400000000001,
      "layouts": 12,
      "layoutDurationMs": 3.698,
      "taskDurationMs": 1015.6500000000002,
      "heapDeltaBytes": 20178496,
      "domNodes": 68,
      "jsHeapTotalBytes": 15204352,
      "scriptDurationMs": 141.815,
      "eventListeners": 6
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1793.9839999999663,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 33.89300000000001,
      "layouts": 12,
      "layoutDurationMs": 3.042,
      "taskDurationMs": 722.5509999999999,
      "heapDeltaBytes": -3338836,
      "domNodes": 57,
      "jsHeapTotalBytes": 19398656,
      "scriptDurationMs": 126.79499999999999,
      "eventListeners": 4
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1800.235999999984,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 35.751,
      "layouts": 12,
      "layoutDurationMs": 3.501,
      "taskDurationMs": 709.1379999999999,
      "heapDeltaBytes": -3163040,
      "domNodes": 58,
      "jsHeapTotalBytes": 20447232,
      "scriptDurationMs": 125.67200000000001,
      "eventListeners": 4
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 582.4530000000436,
      "styleRecalcs": 16,
      "styleRecalcDurationMs": 14.123000000000001,
      "layouts": 1,
      "layoutDurationMs": 0.32500000000000007,
      "taskDurationMs": 362.078,
      "heapDeltaBytes": 13319012,
      "domNodes": 68,
      "jsHeapTotalBytes": 16515072,
      "scriptDurationMs": 64.548,
      "eventListeners": 19
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 574.8669999999834,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 10.139,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 350.40500000000003,
      "heapDeltaBytes": 12950600,
      "domNodes": 24,
      "jsHeapTotalBytes": 15466496,
      "scriptDurationMs": 67.69,
      "eventListeners": 2
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 544.6230000000014,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 10.207,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 332.664,
      "heapDeltaBytes": 12639784,
      "domNodes": 24,
      "jsHeapTotalBytes": 16252928,
      "scriptDurationMs": 61.693999999999996,
      "eventListeners": 2
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2012.9860000000122,
      "styleRecalcs": 14,
      "styleRecalcDurationMs": 14.395999999999999,
      "layouts": 1,
      "layoutDurationMs": 0.19800000000000004,
      "taskDurationMs": 485.394,
      "heapDeltaBytes": 16935584,
      "domNodes": 69,
      "jsHeapTotalBytes": 9437184,
      "scriptDurationMs": 89.333,
      "eventListeners": 23
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2002.6740000000132,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 10.33,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 474.42699999999996,
      "heapDeltaBytes": 16406972,
      "domNodes": 26,
      "jsHeapTotalBytes": 8245248,
      "scriptDurationMs": 88.84700000000001,
      "eventListeners": 6
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2002.4760000000015,
      "styleRecalcs": 13,
      "styleRecalcDurationMs": 10.769999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 469.201,
      "heapDeltaBytes": 15493400,
      "domNodes": 26,
      "jsHeapTotalBytes": 9056256,
      "scriptDurationMs": 87.96300000000001,
      "eventListeners": 4
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2102.4509999999736,
      "styleRecalcs": 70,
      "styleRecalcDurationMs": 16.083,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 981.1270000000001,
      "heapDeltaBytes": 2614256,
      "domNodes": 20,
      "jsHeapTotalBytes": 9756672,
      "scriptDurationMs": 373.603,
      "eventListeners": 6
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2103.7660000000074,
      "styleRecalcs": 71,
      "styleRecalcDurationMs": 17.183,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1048.381,
      "heapDeltaBytes": 4010188,
      "domNodes": 24,
      "jsHeapTotalBytes": 8712192,
      "scriptDurationMs": 431.464,
      "eventListeners": 6
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2094.196000000011,
      "styleRecalcs": 71,
      "styleRecalcDurationMs": 16.929,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 999.7510000000001,
      "heapDeltaBytes": 2528160,
      "domNodes": 22,
      "jsHeapTotalBytes": 7921664,
      "scriptDurationMs": 392.989,
      "eventListeners": 6
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 588.4200000000419,
      "styleRecalcs": 49,
      "styleRecalcDurationMs": 12.435,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 360.62899999999996,
      "heapDeltaBytes": 12721592,
      "domNodes": 24,
      "jsHeapTotalBytes": 16515072,
      "scriptDurationMs": 123.16800000000002,
      "eventListeners": 8
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 564.91299999999,
      "styleRecalcs": 51,
      "styleRecalcDurationMs": 16.559,
      "layouts": 1,
      "layoutDurationMs": 0.304,
      "taskDurationMs": 364.738,
      "heapDeltaBytes": 13293064,
      "domNodes": 68,
      "jsHeapTotalBytes": 16777216,
      "scriptDurationMs": 120.37499999999999,
      "eventListeners": 25
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 533.1600000000094,
      "styleRecalcs": 48,
      "styleRecalcDurationMs": 11.652999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 344.6979999999999,
      "heapDeltaBytes": 13016552,
      "domNodes": 22,
      "jsHeapTotalBytes": 16252928,
      "scriptDurationMs": 116.97900000000001,
      "eventListeners": 8
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1994.8969999999804,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 9.591,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 332.037,
      "heapDeltaBytes": 314624,
      "domNodes": 23,
      "jsHeapTotalBytes": 18350080,
      "scriptDurationMs": 17.706999999999997,
      "eventListeners": 6
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2019.8519999999576,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 10.735999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 337.54300000000006,
      "heapDeltaBytes": 952004,
      "domNodes": 24,
      "jsHeapTotalBytes": 18087936,
      "scriptDurationMs": 16.532999999999998,
      "eventListeners": 6
    },
    {
      "name": "subgraph-idle",
      "durationMs": 1998.0259999999817,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 9.618,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 337.233,
      "heapDeltaBytes": 352904,
      "domNodes": 24,
      "jsHeapTotalBytes": 16252928,
      "scriptDurationMs": 17.522999999999996,
      "eventListeners": 6
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1685.7380000000148,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 34.992,
      "layouts": 16,
      "layoutDurationMs": 4.2589999999999995,
      "taskDurationMs": 617.713,
      "heapDeltaBytes": 14793136,
      "domNodes": 64,
      "jsHeapTotalBytes": 12320768,
      "scriptDurationMs": 92.72899999999998,
      "eventListeners": 4
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1712.2719999999845,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 35.916,
      "layouts": 16,
      "layoutDurationMs": 4.263,
      "taskDurationMs": 617.789,
      "heapDeltaBytes": -7687504,
      "domNodes": 64,
      "jsHeapTotalBytes": 18612224,
      "scriptDurationMs": 90.548,
      "eventListeners": 6
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1723.263999999972,
      "styleRecalcs": 80,
      "styleRecalcDurationMs": 41.391,
      "layouts": 17,
      "layoutDurationMs": 4.38,
      "taskDurationMs": 656.712,
      "heapDeltaBytes": -6697144,
      "domNodes": 109,
      "jsHeapTotalBytes": 17039360,
      "scriptDurationMs": 92.894,
      "eventListeners": 23
    }
  ]
}

@dante01yoon dante01yoon marked this pull request as ready for review March 15, 2026 02:31
@dante01yoon dante01yoon requested review from a team as code owners March 15, 2026 02:31
@dosubot dosubot bot added the size:XXL This PR changes 1000+ lines, ignoring generated files. label Mar 15, 2026
Instead of cloning the private cloud repo from the frontend CI
(security risk), the workflow now receives the OpenAPI spec via
repository_dispatch payload or workflow_dispatch URL input.

The cloud repo should push the spec to this workflow, not the
other way around.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
.github/workflows/api-update-ingest-api-types.yaml (1)

59-62: Harden curl with timeout/retry controls.

The spec download currently has no timeout or retry policy, so transient network failures can fail or hang the job unnecessarily.

🌐 Proposed resilient download command
       - name: Download OpenAPI spec
         run: |
-          curl -fSL "${{ steps.resolve.outputs.spec_url }}" -o packages/ingest-types/openapi.yaml
+          curl --fail --show-error --silent --location \
+            --retry 3 --retry-delay 2 --retry-all-errors \
+            --connect-timeout 15 --max-time 120 \
+            "${{ steps.resolve.outputs.spec_url }}" \
+            --output packages/ingest-types/openapi.yaml
           echo "Downloaded OpenAPI spec from cloud@${{ steps.resolve.outputs.commit }}"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/api-update-ingest-api-types.yaml around lines 59 - 62, The
"Download OpenAPI spec" step currently runs curl without any timeout or retry
controls; update that command in the workflow to harden the download by adding
sensible curl retry and timeout flags (e.g., --retry, --retry-delay,
--connect-timeout, --max-time) while keeping -fSL/-s behavior; ensure the step
still fails on non-2xx responses (keep --fail/-f) and document the chosen values
in a comment or step name so transient network errors are retried but the job
won't hang indefinitely.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/api-update-ingest-api-types.yaml:
- Around line 27-29: The permissions block currently grants broad write scopes
("contents: write" and "pull-requests: write"); tighten it to least privilege by
replacing those with minimal read or none values and rely on the external secret
token for elevated operations—e.g., change "contents: write" to "contents: read"
(or remove if not needed) and remove or set "pull-requests" to "none" since PR
creation uses secrets.PR_GH_TOKEN; update the permissions stanza in the workflow
to only include the specific permissions required for the ingest job.
- Around line 48-57: In the "Resolve inputs" step (id: resolve) validate and
sanitize the incoming repository_dispatch payload and inputs before writing to
$GITHUB_OUTPUT: trim and remove any newlines/whitespace from spec_url and
commit, enforce spec_url starts with "https://" and contains no
whitespace/newlines, and validate commit against a SHA pattern (e.g.
^[0-9a-fA-F]{7,40}$); if validation fails, exit non‑zero with a clear error.
After sanitizing, write outputs using a safe write (e.g. printf '%s\n'
"$spec_url" >> $GITHUB_OUTPUT and printf '%s\n' "$commit" >> $GITHUB_OUTPUT) so
injected newlines or special chars cannot break downstream curl or branch-name
construction. Ensure this logic runs for both repository_dispatch and normal
input branches.

---

Nitpick comments:
In @.github/workflows/api-update-ingest-api-types.yaml:
- Around line 59-62: The "Download OpenAPI spec" step currently runs curl
without any timeout or retry controls; update that command in the workflow to
harden the download by adding sensible curl retry and timeout flags (e.g.,
--retry, --retry-delay, --connect-timeout, --max-time) while keeping -fSL/-s
behavior; ensure the step still fails on non-2xx responses (keep --fail/-f) and
document the chosen values in a comment or step name so transient network errors
are retried but the job won't hang indefinitely.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 789db585-967a-4e41-9c59-97f686c28a8e

📥 Commits

Reviewing files that changed from the base of the PR and between 750c4a2 and 71f07f9.

📒 Files selected for processing (1)
  • .github/workflows/api-update-ingest-api-types.yaml

The cloud repo will push generated types to this repo instead.
See: Comfy-Org/cloud push-ingest-types-to-frontend.yml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Contributor

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is really nice.

- Add generated files to .gitattributes (linguist-generated)
- Use replaceAll for robust zod/v3 import rewrite

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/ingest-types/package.json (1)

11-11: Harden Line 11 import rewrite against generator formatting drift.

The current replaceAll("from 'zod/v3'", ...) only matches single-quoted imports. If codegen emits from "zod/v3" with double quotes, the replacement is skipped and imports remain incompatible.

Proposed patch
-    "generate": "openapi-ts && node -e \"const fs=require('fs'); ['src/zod.gen.ts'].forEach(f => fs.writeFileSync(f, fs.readFileSync(f,'utf8').replaceAll(\\\"from 'zod/v3'\\\", \\\"from 'zod'\\\")));\""
+    "generate": "openapi-ts && node -e \"const fs=require('fs'); const f='src/zod.gen.ts'; const s=fs.readFileSync(f,'utf8').replace(/from\\s+[\\\"']zod\\/v3[\\\"']/g, \\\"from 'zod'\\\"); fs.writeFileSync(f, s);\""
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/ingest-types/package.json` at line 11, The generate script's
post-processing replaceAll only matches single-quoted imports and can miss
double-quoted outputs; update the "generate" script that writes 'src/zod.gen.ts'
to use a regex-based replace that matches both single and double quotes (e.g., a
pattern like from ['"]zod\/v3['"] with global flag) so all occurrences are
rewritten to the desired import form, and ensure the regex is correctly escaped
for the JSON string in the package.json "generate" value.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@packages/ingest-types/package.json`:
- Line 11: The generate script's post-processing replaceAll only matches
single-quoted imports and can miss double-quoted outputs; update the "generate"
script that writes 'src/zod.gen.ts' to use a regex-based replace that matches
both single and double quotes (e.g., a pattern like from ['"]zod\/v3['"] with
global flag) so all occurrences are rewritten to the desired import form, and
ensure the regex is correctly escaped for the JSON string in the package.json
"generate" value.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 19a60d6e-4a8a-47c2-8d91-781add5e7bae

📥 Commits

Reviewing files that changed from the base of the PR and between 71f07f9 and 33d3f09.

📒 Files selected for processing (2)
  • .gitattributes
  • packages/ingest-types/package.json
✅ Files skipped from review due to trivial changes (1)
  • .gitattributes

@dante01yoon dante01yoon merged commit a4952e9 into main Mar 15, 2026
35 checks passed
@dante01yoon dante01yoon deleted the feat/ingest-api-codegen branch March 15, 2026 12:53
@mrlubos
Copy link

mrlubos commented Mar 15, 2026

@dante01yoon @christian-byrne feedback on @hey-api is always welcome!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants