Skip to content

Comments

feat: add toolkit node tracking to execution telemetry#9073

Merged
benceruleanlu merged 1 commit intomainfrom
telemetry/toolkit-tracking
Feb 22, 2026
Merged

feat: add toolkit node tracking to execution telemetry#9073
benceruleanlu merged 1 commit intomainfrom
telemetry/toolkit-tracking

Conversation

@christian-byrne
Copy link
Contributor

@christian-byrne christian-byrne commented Feb 22, 2026

Summary

Add toolkit (Essentials) node tracking to execution telemetry, enabling measurement of toolkit node adoption and popularity.

Changes

  • What: Add has_toolkit_nodes, toolkit_node_names, and toolkit_node_count fields to ExecutionContext and RunButtonProperties. Toolkit nodes are identified via a hardcoded set of node type names (10 novel Essentials nodes) and by python_module === 'comfy_essentials' for blueprint nodes. Detection runs inside the existing reduceAllNodes() traversal — no additional graph walks.

Review Focus

  • Toolkit node identification is frontend-only (no backend flag) — uses two mechanisms: hardcoded TOOLKIT_NODE_NAMES set and TOOLKIT_BLUEPRINT_MODULES for blueprints
  • API node overlap is intentional — a node can appear in both api_node_names and toolkit_node_names
  • Blueprint detection via python_module automatically picks up new essentials blueprints without code changes

┆Issue is synchronized with this Notion page by Unito

@christian-byrne christian-byrne requested a review from a team as a code owner February 22, 2026 02:36
@christian-byrne christian-byrne self-assigned this Feb 22, 2026
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Feb 22, 2026
@dosubot
Copy link

dosubot bot commented Feb 22, 2026

Related Documentation

Checked 0 published document(s) in 1 knowledge base(s). No updates required.

How did I do? Any feedback?  Join Discord

@github-actions
Copy link

github-actions bot commented Feb 22, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 02/22/2026, 03:56:59 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Feb 22, 2026

Playwright: ✅ 528 passed, 0 failed · 3 flaky

📊 Browser Reports
  • chromium: View Report (✅ 515 / ❌ 0 / ⚠️ 3 / ⏭️ 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 Feb 22, 2026

📝 Walkthrough

Walkthrough

Adds canonical toolkit node constants, extends telemetry types to carry toolkit metrics, implements toolkit-node detection and counting in the Mixpanel telemetry provider, and adds comprehensive tests covering detection, deduplication, blueprint mapping, and fallback behaviors.

Changes

Cohort / File(s) Summary
Toolkit Constants
src/constants/toolkitNodes.ts
Adds TOOLKIT_NODE_NAMES (readonly set of image/video/API toolkit node names) and TOOLKIT_BLUEPRINT_MODULES (readonly set with 'comfy_essentials').
Telemetry Types
src/platform/telemetry/types.ts
Adds toolkit fields to RunButtonProperties and ExecutionContext: has_toolkit_nodes: boolean, toolkit_node_names: string[], and toolkit_node_count: number.
Telemetry Provider
src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.ts
Imports toolkit constants and updates getExecutionContext to detect toolkit nodes by type or blueprint python_module, increment toolkit_node_count, set has_toolkit_nodes, and populate deduplicated toolkit_node_names.
Provider Tests
src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.test.ts
Adds tests for toolkit detection scenarios: no toolkit nodes, individual toolkit types, blueprint-module detection, deduplication, API/toolkit overlap, and fallback when nodeDef is missing.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 I nibble at nodes, both blur and slice,
I tally each toolkit and make counts precise,
Blueprints and names in a tidy array,
Telemetry hops forward—hooray, hooray! 🥕✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add toolkit node tracking to execution telemetry' clearly and concisely describes the main change—adding telemetry tracking for toolkit nodes.
Description check ✅ Passed The description includes all required template sections: Summary explains the purpose, Changes details the core additions, and Review Focus highlights design decisions including frontend-only identification and intentional overlap.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch telemetry/toolkit-tracking

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

@github-actions
Copy link

github-actions bot commented Feb 22, 2026

📦 Bundle: 4.37 MB gzip ⚪ 0 B

Details

Summary

  • Raw size: 20.5 MB baseline 20.5 MB — ⚪ 0 B
  • Gzip: 4.37 MB baseline 4.37 MB — ⚪ 0 B
  • Brotli: 3.37 MB baseline 3.37 MB — ⚪ 0 B
  • Bundles: 223 current • 223 baseline

Category Glance
Vendor & Third-Party ⚪ 0 B (8.83 MB) · Other ⚪ 0 B (7.61 MB) · Data & Services ⚪ 0 B (2.51 MB) · Graph Workspace ⚪ 0 B (942 kB) · Panels & Settings ⚪ 0 B (436 kB) · Views & Navigation ⚪ 0 B (68.8 kB) · + 5 more

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

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-BM9pD7sf.js 21.5 kB 21.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Graph Workspace — 942 kB (baseline 942 kB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-CxR1BLr5.js 942 kB 942 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Views & Navigation — 68.8 kB (baseline 68.8 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudAuthTimeoutView-BSaseV8T.js 4.91 kB 4.91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudForgotPasswordView-LM0bimeg.js 5.56 kB 5.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudLayoutView-0omAj7jF.js 6.43 kB 6.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudLoginView-BlyM6BZP.js 10 kB 10 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSignupView-C5laMkDP.js 7.41 kB 7.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSorryContactSupportView-Bi8IsTTh.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSubscriptionRedirectView-C1sH30R7.js 4.71 kB 4.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudSurveyView-Dbp5UEPC.js 15.5 kB 15.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-vBPh8yaQ.js 296 B 296 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserCheckView-CFJDZ1nN.js 8.41 kB 8.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserSelectView-CrDQnIZU.js 4.5 kB 4.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Panels & Settings — 436 kB (baseline 436 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AboutPanel-CjTnQEKL.js 9.79 kB 9.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudRemoteConfig-CDxaijw1.js 1.44 kB 1.44 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/config-QxkqTZy6.js 996 B 996 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ExtensionPanel-C6K3G3zn.js 9.38 kB 9.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/KeybindingPanel-D7Q8k_fL.js 12.3 kB 12.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LegacyCreditsPanel-DYMEw_4z.js 20.6 kB 20.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/refreshRemoteConfig-BrNxXGF6.js 1.14 kB 1.14 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SecretsPanel-CdQprvio.js 21.5 kB 21.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ServerConfigPanel-dGSlXYWN.js 6.44 kB 6.44 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-3cK4vYSX.js 27.9 kB 27.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-AqJa7Oe1.js 28.7 kB 28.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BOcWl0Qp.js 34.2 kB 34.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BodhSOuG.js 30.5 kB 30.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CCD8qxmc.js 27.8 kB 27.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CVDNuOXV.js 23.9 kB 23.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DLodCRRz.js 24.5 kB 24.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DLqeCT09.js 38.5 kB 38.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DP-OgTXN.js 29.9 kB 29.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRIXyZ_Z.js 28.8 kB 28.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-IRk9rDbu.js 32.4 kB 32.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanel-BF4JuSuX.js 18.6 kB 18.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserPanel-C2qbqsVZ.js 6.16 kB 6.16 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
User & Accounts — 16 kB (baseline 16 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-BrFD4m1R.js 3.4 kB 3.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auth-BUjoT5Jd.js 357 B 357 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/firebaseAuthStore-AvTO3bX0.js 790 B 790 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/PasswordFields-koUYSkkX.js 4.51 kB 4.51 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SignUpForm-_b4ROX_D.js 3.01 kB 3.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UpdatePasswordContent-C7HRLDpG.js 2.37 kB 2.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspaceProfilePic-BRX_wv6S.js 1.57 kB 1.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Editors & Dialogs — 738 B (baseline 738 B) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-B63pvikf.js 738 B 738 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
UI Components — 43.2 kB (baseline 43.2 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/Button-DcjgQBBu.js 2.98 kB 2.98 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-lmHOydPu.js 1.24 kB 1.24 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudFeedbackTopbarButton-C5QU85zd.js 1.6 kB 1.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyQueueButton-CVVD7SM0.js 795 B 795 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyQueueButton-DyBOV4wh.js 8.02 kB 8.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ScrubableNumberInput-D7H0v_Kw.js 5.94 kB 5.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscribeButton-CKehKZhZ.js 2.35 kB 2.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-0OM2g_KN.js 7.45 kB 7.45 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-DkTACzmk.js 1.17 kB 1.17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useTerminalTabs-ClTg11b0.js 9.85 kB 9.85 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-DRxh3QrM.js 1.84 kB 1.84 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Data & Services — 2.51 MB (baseline 2.51 MB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/api-D8sq1QxZ.js 652 kB 652 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/audioService-DXJS30qu.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/bootstrapStore-oD3oLlQL.js 2.08 kB 2.08 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/dialogService-Bg61Oofp.js 727 B 727 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/dialogService-DoFPvBrW.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/keybindingService-YL3zwhzW.js 6.52 kB 6.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/load3dService-DiBoek64.js 91 kB 91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/releaseStore-CVJHi9t1.js 762 B 762 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/releaseStore-LvxpQx36.js 7.96 kB 7.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/serverConfigStore-B17wcfZ1.js 2.32 kB 2.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settingStore-D1RzUe4J.js 746 B 746 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/systemStatsStore-V9BT4CVE.js 12.7 kB 12.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/userStore-CEIjstek.js 1.85 kB 1.85 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/workflowDraftStore-DoEyfc3j.js 738 B 738 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
Utilities & Hooks — 57.7 kB (baseline 57.7 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/_plugin-vue_export-helper-CY4XIWDa.js 315 B 315 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/audioUtils-BhU8uOXK.js 858 B 858 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-m-0Os8lq.js 7 kB 7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/envUtil-BQSmRN2Q.js 466 B 466 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-DOdPeMQc.js 1.56 kB 1.56 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SkeletonUtils-BputJAFn.js 133 B 133 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/subscriptionCheckoutUtil-C8C64hjm.js 2.53 kB 2.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useCurrentUser-DSwSFXCa.js 724 B 724 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useErrorHandling-CBdnMLnk.js 1.5 kB 1.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useExternalLink-D8coCOeM.js 1.66 kB 1.66 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useFeatureFlags-BxKm0y3c.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3d-BizjGfh1.js 861 B 861 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3d-BVXOXrhp.js 14.6 kB 14.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3dViewer-CpQ-JP6f.js 840 B 840 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useLoad3dViewer-DziYcKnC.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useSubscriptionCredits-nPZ4vjse.js 2.75 kB 2.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useWorkspaceSwitch-Dam3bT75.js 1.25 kB 1.25 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/useWorkspaceUI-PVMT6X9c.js 3 kB 3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Vendor & Third-Party — 8.83 MB (baseline 8.83 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-axios-Cp6hch1I.js 70.7 kB 70.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-chart-BxkFiWzp.js 399 kB 399 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-firebase-BvMr43CG.js 836 kB 836 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-i18n-DccD0mxo.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-markdown-D5S6AC80.js 103 kB 103 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-BzNZEmD_.js 1.52 MB 1.52 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-Ca9moc73.js 1.73 MB 1.73 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-CWMIYdD2.js 379 kB 379 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-sentry-SQwstEKc.js 182 kB 182 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-LBLOE6BD.js 1.8 MB 1.8 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-CHaNo_rA.js 634 kB 634 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-core-CmHHRvL9.js 311 kB 311 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vueuse-B4hGe0IQ.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-vkxZGffR.js 374 kB 374 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-yjs-CP_4YO8u.js 143 kB 143 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-zod-DcCUUPIi.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.61 MB (baseline 7.61 MB) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/AnimationControls-BuN89WBW.js 4.61 kB 4.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ApiNodesSignInContent-1YjVaHoW.js 2.69 kB 2.69 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/AudioPreviewPlayer-DCoX-uhi.js 10.9 kB 10.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/auto-BTnZwrs2.js 1.7 kB 1.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/BaseViewTemplate-sbUO3_hD.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CancelSubscriptionDialogContent-DhrredM6.js 4.79 kB 4.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/changeTracker-Dh83NLta.js 9.38 kB 9.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/changeTracker-DTwXs-iO.js 759 B 759 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudBadges-BHpfQZk6.js 1.37 kB 1.37 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudRunButtonWrapper-wHgI_0yl.js 1.68 kB 1.68 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudSessionCookie-BBpIAwsM.js 3.1 kB 3.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/cloudSubscription-B00-Z8qY.js 1.33 kB 1.33 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/comfy-logo-single-DhnNuB-i.js 198 B 198 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ComfyOrgHeader-CKD9vwNi.js 910 B 910 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BIWmUVEc.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BOt38VCw.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C0NcxRH3.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C2xuXGb5.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CmiKIQwc.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DMwP8S5e.js 16.7 kB 16.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwBt3HhT.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-JX559A2n.js 15.1 kB 15.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-n_2KJWcD.js 15.2 kB 15.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-OO-8nFm9.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-wq2Y-YKn.js 17.5 kB 17.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/constants-BIWjk1ar.js 579 B 579 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/core-CiKRLoPj.js 72.8 kB 72.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CreateWorkspaceDialogContent-CZ9b9KI7.js 5.53 kB 5.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CurrentUserPopoverWorkspace-BTMV4Uth.js 19.8 kB 19.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/DeleteWorkspaceDialogContent-C9gw1Ok8.js 4.23 kB 4.23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/EditWorkspaceDialogContent-RcI3GDFa.js 5.33 kB 5.33 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/GlobalToast-CD6bUWOo.js 2.91 kB 2.91 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/graphHasMissingNodes-B2GvipcE.js 761 B 761 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/groupNode-yG7drrRx.js 71.8 kB 71.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-_ix-_aGb.js 518 kB 518 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-Bx5xAAgN.js 199 B 199 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/InviteMemberDialogContent-CtMRhzmW.js 7.38 kB 7.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/InviteMemberUpsellDialogContent-BEesnuLN.js 3.83 kB 3.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-QLfyKhBu.js 12.3 kB 12.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LeaveWorkspaceDialogContent-CvInQp3L.js 4.06 kB 4.06 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-B9gfZYSt.js 1.07 kB 1.07 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3D-CQ_RFTM2.js 16.2 kB 16.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/load3d-CrVwjQBT.js 14.7 kB 14.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3DConfiguration-knlxZfgd.js 6.27 kB 6.27 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3DControls-DFUQGPxk.js 30.9 kB 30.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3dViewerContent-CqyJcpKl.js 995 B 995 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Load3dViewerContent-CvL9GGfH.js 23 kB 23 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BA2V8d-C.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BccLgA47.js 168 kB 168 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C-ZfUqj4.js 194 kB 194 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-C1DJg0HU.js 123 kB 123 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CjFsXT_Y.js 160 kB 160 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CNIsXuKE.js 147 kB 147 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CqcSAz7B.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DDxNg4P1.js 174 kB 174 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DQHvUyvV.js 139 kB 139 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Dr-RBucI.js 122 kB 122 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Gap3UP2p.js 142 kB 142 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-D3QRJ6eZ.js 1.82 kB 1.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-vXuump5i.js 1.43 kB 1.43 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-XsW6Reb5.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaOtherTop-Crhpst_D.js 1.02 kB 1.02 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaTextTop-DLkC3BlW.js 1.01 kB 1.01 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-Dxvkupp8.js 2.77 kB 2.77 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nightlyBadges-ukRM5D_Y.js 1 kB 1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-2U4KtUml.js 360 kB 360 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-5rcOJVex.js 391 kB 391 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BTBSP0IQ.js 480 kB 480 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BZEpP7w6.js 383 kB 383 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C-Tw-7I_.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-C76rbmLh.js 441 kB 441 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CxxD1ymF.js 395 kB 395 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DciNsuYe.js 392 kB 392 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-G7wcMpUD.js 356 kB 356 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-nGdg-hIO.js 388 kB 388 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-xiPSrG6S.js 440 kB 440 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeTemplates-O2vbucvu.js 9.3 kB 9.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Popover-BFioAN8e.js 3.65 kB 3.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Preview3d-DCPcVPCf.js 4.82 kB 4.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-DeIFnh1k.js 665 B 665 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/RemoveMemberDialogContent-DDQzZ4uW.js 4.04 kB 4.04 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/RevokeInviteDialogContent-Avy85y-0.js 3.96 kB 3.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-DLICfi3-.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/saveMesh-DINZ7Bbw.js 3.38 kB 3.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SelectValue-bibvA8E3.js 8.94 kB 8.94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SignInContent-CgUubjui.js 18.9 kB 18.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/signInSchema-CHXN3L2F.js 1.53 kB 1.53 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-DdhXSGsd.js 3.52 kB 3.52 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/src-1EXhnvTZ.js 251 B 251 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscribeToRun-7E8xERYS.js 2.2 kB 2.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanelContentWorkspace-BqNmHbPj.js 932 B 932 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionPanelContentWorkspace-BV7AreVN.js 21.6 kB 21.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionRequiredDialogContent-Bc1bp9Fr.js 26.2 kB 26.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/SubscriptionRequiredDialogContentWorkspace-vJbWjRmm.js 45.8 kB 45.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/telemetry-zZf2dHJ2.js 226 B 226 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/types-DT3N7am7.js 204 B 204 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/ValueControlPopover-sXJEBtto.js 4.92 kB 4.92 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/VideoPlayOverlay-vVfixIxQ.js 1.35 kB 1.35 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-DTUjK0ZE.js 445 B 445 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-BPh1lTyF.js 283 B 283 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-xcXafMSV.js 3.19 kB 3.19 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-tDqjft7_.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-cmpN9z2D.js 2.9 kB 2.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-BaSczjNZ.js 3.61 kB 3.61 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-BV2GfN2g.js 3.1 kB 3.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCrop-CUHykh8s.js 22.1 kB 22.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber-BHRg3rO-.js 469 B 469 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputNumber-DNtA6XkW.js 18.6 kB 18.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-Cu2WRFHM.js 1.86 kB 1.86 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-1Fl4ror4.js 1.95 kB 1.95 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLegacy-DqVkLzig.js 747 B 747 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-DbQVdecX.js 2.93 kB 2.93 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-COB1L9Pj.js 1.1 kB 1.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetRecordAudio-bqz5fyWP.js 17.3 kB 17.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetSelect-D1WN5HV_.js 57.6 kB 57.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-Dw918e6W.js 3.13 kB 3.13 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-VrAZFEEv.js 6.8 kB 6.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-BtuQMzwn.js 393 B 393 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetWithControl-B6rWjtXe.js 4.11 kB 4.11 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WorkspacePanelContent-BQz4gVzi.js 29.3 kB 29.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/constants/toolkitNodes.ts`:
- Around line 13-20: The entry 'image compare' in TOOLKIT_NODE_NAMES likely has
incorrect casing and will fail case-sensitive set membership checks; verify the
canonical node type string (e.g., "Image Compare") and update the
TOOLKIT_NODE_NAMES set to the exact canonical casing, or instead normalize case
when checking membership (update the detection code that references
TOOLKIT_NODE_NAMES to compare using a consistent transform such as
.toLowerCase() against a lowercased set). Ensure you reference the
TOOLKIT_NODE_NAMES constant and the specific 'image compare' entry when making
the change.

In `@src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.test.ts`:
- Around line 1-68: Wrap the module-level mutable test state in a vi.hoisted()
container: replace the top-level mutable variables mockNodeDefsByName and
mockNodes with a single hoisted object (e.g., const hoisted = vi.hoisted(() =>
({ mockNodeDefsByName: {}, mockNodes: [] }))) and update all mocks and test
helpers to reference hoisted().mockNodeDefsByName and hoisted().mockNodes; also
update the beforeEach reset logic to clear hoisted().mockNodeDefsByName and
hoisted().mockNodes instead of the original top-level variables so each test
gets an isolated containerized state; ensure functions that read these
(useNodeDefStore and reduceAllNodes) access the hoisted properties.

Comment on lines 13 to 20
export const TOOLKIT_NODE_NAMES: ReadonlySet<string> = new Set([
// Image Tools
'ImageCrop',
'ImageRotate',
'ImageBlur',
'ImageInvert',
'image compare',
'Canny',
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Confirm canonical casing for image compare.

Set membership is case-sensitive; if the node type is actually Image Compare (or similar), this entry won’t match and toolkit detection will miss it. Please verify the canonical node type and adjust or normalize casing in detection.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/constants/toolkitNodes.ts` around lines 13 - 20, The entry 'image
compare' in TOOLKIT_NODE_NAMES likely has incorrect casing and will fail
case-sensitive set membership checks; verify the canonical node type string
(e.g., "Image Compare") and update the TOOLKIT_NODE_NAMES set to the exact
canonical casing, or instead normalize case when checking membership (update the
detection code that references TOOLKIT_NODE_NAMES to compare using a consistent
transform such as .toLowerCase() against a lowercased set). Ensure you reference
the TOOLKIT_NODE_NAMES constant and the specific 'image compare' entry when
making the change.

@christian-byrne christian-byrne marked this pull request as draft February 22, 2026 02:50
Add has_toolkit_nodes, toolkit_node_names, and toolkit_node_count to
execution context and run button events. Toolkit nodes are identified
by a hardcoded set of node type names and by python_module matching
comfy_essentials for blueprint nodes.

Amp-Thread-ID: https://ampcode.com/threads/T-019c832e-de07-776b-ba61-088be848f96f
@christian-byrne christian-byrne force-pushed the telemetry/toolkit-tracking branch from 9825076 to afee55d Compare February 22, 2026 03:55
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: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.ts`:
- Around line 292-294: The Run Button telemetry payload in
MixpanelTelemetryProvider (around the trackRunButton/RUN_BUTTON_CLICKED
handling) omits the toolkit_node_count from ExecutionContext; update the payload
construction to include toolkit_node_count: executionContext.toolkit_node_count
(alongside has_toolkit_nodes and toolkit_node_names) so the RunButtonProperties
sent by trackRunButton contains the toolkit count for consistent analytics.

@christian-byrne christian-byrne marked this pull request as ready for review February 22, 2026 04:48
@benceruleanlu benceruleanlu removed their assignment Feb 22, 2026
@benceruleanlu benceruleanlu merged commit 16ddcfd into main Feb 22, 2026
28 checks passed
@benceruleanlu benceruleanlu deleted the telemetry/toolkit-tracking branch February 22, 2026 05:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants