[backport core/1.45] Add Desktop telemetry event sink (#12802)#12994
[backport core/1.45] Add Desktop telemetry event sink (#12802)#12994benceruleanlu wants to merge 7 commits into
Conversation
Adds `@comfyorg/comfyui-desktop-bridge-types` as a workspace package in the frontend monorepo and changes the frontend app dependency to `workspace:*`. Adds a dedicated `Publish Desktop Bridge Types` workflow for publishing `packages/comfyui-desktop-bridge-types` by its own package version, without coupling it to the generated `@comfyorg/comfyui-frontend-types` release. The generated frontend types package still emits a concrete `@comfyorg/comfyui-desktop-bridge-types@0.1.2` dependency instead of leaking workspace/catalog protocol references. The Desktop2 missing-model path uses `window.__comfyDesktop2.isRemote()` when available, but falls back to the legacy `window.__comfyDesktop2Remote` marker so frontend rollout stays compatible with older Desktop builds. Paired Desktop PR: Comfy-Org/Comfy-Desktop#1112 (cherry picked from commit 05efee0)
Move run-button context assembly out of telemetry providers so telemetry can initialize without importing app-mode/workspace state. - **What**: Providers now accept completed `RunButtonProperties`; run-button call sites use a workspace composable to build that payload. - **Dependencies**: None. (cherry picked from commit bc885f3)
|
Important Review skippedIgnore keyword(s) in the title. ⛔ Ignored keywords (2)
Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Codecov Report❌ Patch coverage is
@@ Coverage Diff @@
## core/1.45 #12994 +/- ##
=============================================
+ Coverage 60.60% 60.68% +0.08%
=============================================
Files 1424 1426 +2
Lines 73031 73159 +128
Branches 19382 19403 +21
=============================================
+ Hits 44258 44395 +137
+ Misses 28299 28290 -9
Partials 474 474
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 2 files with indirect coverage changes 🚀 New features to boost your workflow:
|
|
Better, some things dropped that don't exist in 45, core addition is here though |
📦 Bundle Size
⚡ Performance Report
Show regressions
All metrics
Historical variance (last 15 runs)
Trend (last 15 commits on main)
Raw data{
"timestamp": "2026-06-19T17:55:40.979Z",
"gitSha": "21ecb5c8df68c0c8a2e82f51d8ffc2fde3d61101",
"branch": "bl/backport-12802-core-1.45",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2042.7839999999833,
"styleRecalcs": 8,
"styleRecalcDurationMs": 7.719,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 480.731,
"heapDeltaBytes": 36095276,
"heapUsedBytes": 88986820,
"domNodes": -274,
"jsHeapTotalBytes": 35868672,
"scriptDurationMs": 21.085,
"eventListeners": -174,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-idle",
"durationMs": 2078.41499999995,
"styleRecalcs": 9,
"styleRecalcDurationMs": 9.665000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 507.336,
"heapDeltaBytes": 17857008,
"heapUsedBytes": 86659688,
"domNodes": -303,
"jsHeapTotalBytes": 39276544,
"scriptDurationMs": 22.591,
"eventListeners": -187,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "canvas-mouse-sweep",
"durationMs": 2093.1850000000054,
"styleRecalcs": 79,
"styleRecalcDurationMs": 51.525,
"layouts": 12,
"layoutDurationMs": 7.832999999999999,
"taskDurationMs": 1049.3220000000001,
"heapDeltaBytes": 10093496,
"heapUsedBytes": 78477228,
"domNodes": -241,
"jsHeapTotalBytes": 35344384,
"scriptDurationMs": 144.753,
"eventListeners": -180,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1820.8170000000337,
"styleRecalcs": 72,
"styleRecalcDurationMs": 41.241,
"layouts": 12,
"layoutDurationMs": 4.14,
"taskDurationMs": 872.12,
"heapDeltaBytes": 27722592,
"heapUsedBytes": 80981628,
"domNodes": -233,
"jsHeapTotalBytes": 30101504,
"scriptDurationMs": 130.581,
"eventListeners": -192,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1738.0559999999718,
"styleRecalcs": 31,
"styleRecalcDurationMs": 17.823999999999998,
"layouts": 6,
"layoutDurationMs": 0.5630000000000002,
"taskDurationMs": 346.698,
"heapDeltaBytes": 1501940,
"heapUsedBytes": 59895844,
"domNodes": 77,
"jsHeapTotalBytes": 26476544,
"scriptDurationMs": 23.896,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1782.3419999999714,
"styleRecalcs": 30,
"styleRecalcDurationMs": 18.341,
"layouts": 6,
"layoutDurationMs": 0.624,
"taskDurationMs": 407.84099999999995,
"heapDeltaBytes": 14116468,
"heapUsedBytes": 67331372,
"domNodes": -231,
"jsHeapTotalBytes": 23810048,
"scriptDurationMs": 23.706999999999997,
"eventListeners": -174,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "dom-widget-clipping",
"durationMs": 621.9839999999976,
"styleRecalcs": 12,
"styleRecalcDurationMs": 10.229000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 432.981,
"heapDeltaBytes": 4384208,
"heapUsedBytes": 72576008,
"domNodes": -283,
"jsHeapTotalBytes": 6508544,
"scriptDurationMs": 63.60399999999999,
"eventListeners": -198,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 591.9619999999668,
"styleRecalcs": 10,
"styleRecalcDurationMs": 7.275,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 385.034,
"heapDeltaBytes": -2729464,
"heapUsedBytes": 49700332,
"domNodes": -274,
"jsHeapTotalBytes": -2404352,
"scriptDurationMs": 58.24999999999999,
"eventListeners": -170,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666682,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-idle",
"durationMs": 2058.8010000000168,
"styleRecalcs": 10,
"styleRecalcDurationMs": 11.134,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 691.0540000000001,
"heapDeltaBytes": 20528632,
"heapUsedBytes": 103235664,
"domNodes": -285,
"jsHeapTotalBytes": 42610688,
"scriptDurationMs": 120.475,
"eventListeners": -188,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "large-graph-idle",
"durationMs": 2004.1410000000042,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.191,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 554.3340000000001,
"heapDeltaBytes": -10192792,
"heapUsedBytes": 60763952,
"domNodes": 20,
"jsHeapTotalBytes": 11939840,
"scriptDurationMs": 98.18999999999998,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2085.286999999994,
"styleRecalcs": 67,
"styleRecalcDurationMs": 16.381000000000004,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1101.158,
"heapDeltaBytes": 2190808,
"heapUsedBytes": 56483920,
"domNodes": -277,
"jsHeapTotalBytes": 262144,
"scriptDurationMs": 411.682,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2137.832000000003,
"styleRecalcs": 69,
"styleRecalcDurationMs": 19.521000000000004,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1213.012,
"heapDeltaBytes": 12975316,
"heapUsedBytes": 85462660,
"domNodes": 16,
"jsHeapTotalBytes": 16834560,
"scriptDurationMs": 496.8210000000001,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3112.667999999985,
"styleRecalcs": 61,
"styleRecalcDurationMs": 14.549,
"layouts": 60,
"layoutDurationMs": 7.704999999999999,
"taskDurationMs": 1347.753,
"heapDeltaBytes": 13472580,
"heapUsedBytes": 69236136,
"domNodes": 2,
"jsHeapTotalBytes": 524288,
"scriptDurationMs": 510.36800000000005,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-zoom",
"durationMs": 3200.080000000071,
"styleRecalcs": 62,
"styleRecalcDurationMs": 15.279000000000002,
"layouts": 60,
"layoutDurationMs": 7.693999999999999,
"taskDurationMs": 1393.892,
"heapDeltaBytes": 57153632,
"heapUsedBytes": 111347980,
"domNodes": 4,
"jsHeapTotalBytes": 44564480,
"scriptDurationMs": 509.77700000000004,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "minimap-idle",
"durationMs": 1993.8599999999838,
"styleRecalcs": 8,
"styleRecalcDurationMs": 9.275000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 558.106,
"heapDeltaBytes": 10348436,
"heapUsedBytes": 69248008,
"domNodes": 16,
"jsHeapTotalBytes": 5767168,
"scriptDurationMs": 101.87400000000001,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "minimap-idle",
"durationMs": 2013.6849999998958,
"styleRecalcs": 7,
"styleRecalcDurationMs": 6.644000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 609.127,
"heapDeltaBytes": 51310936,
"heapUsedBytes": 103768236,
"domNodes": -270,
"jsHeapTotalBytes": 40894464,
"scriptDurationMs": 107.58300000000001,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 572.4769999999921,
"styleRecalcs": 46,
"styleRecalcDurationMs": 10.836,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 376.37600000000003,
"heapDeltaBytes": 7719540,
"heapUsedBytes": 66299204,
"domNodes": 18,
"jsHeapTotalBytes": 17301504,
"scriptDurationMs": 123.28699999999999,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 580.4929999999331,
"styleRecalcs": 47,
"styleRecalcDurationMs": 12.879999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 393.178,
"heapDeltaBytes": 13293436,
"heapUsedBytes": 68656240,
"domNodes": 20,
"jsHeapTotalBytes": 18350080,
"scriptDurationMs": 130.12900000000002,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-idle",
"durationMs": 2009.3219999999974,
"styleRecalcs": 6,
"styleRecalcDurationMs": 5.844,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 386.4310000000001,
"heapDeltaBytes": 19902948,
"heapUsedBytes": 64646436,
"domNodes": -274,
"jsHeapTotalBytes": 17825792,
"scriptDurationMs": 18.059999999999995,
"eventListeners": -157,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-idle",
"durationMs": 2006.528000000003,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.528,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 396.57499999999993,
"heapDeltaBytes": 11813600,
"heapUsedBytes": 64294324,
"domNodes": -269,
"jsHeapTotalBytes": 15421440,
"scriptDurationMs": 16.325,
"eventListeners": -181,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1746.0640000000467,
"styleRecalcs": 72,
"styleRecalcDurationMs": 38.904999999999994,
"layouts": 16,
"layoutDurationMs": 4.715999999999999,
"taskDurationMs": 808.833,
"heapDeltaBytes": 26229724,
"heapUsedBytes": 79442184,
"domNodes": -231,
"jsHeapTotalBytes": 31936512,
"scriptDurationMs": 102.94500000000001,
"eventListeners": -195,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1756.9320000000062,
"styleRecalcs": 77,
"styleRecalcDurationMs": 42.11300000000001,
"layouts": 16,
"layoutDurationMs": 4.983,
"taskDurationMs": 812.807,
"heapDeltaBytes": 8020672,
"heapUsedBytes": 76437292,
"domNodes": -237,
"jsHeapTotalBytes": 36392960,
"scriptDurationMs": 104.84900000000002,
"eventListeners": -192,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-transition-enter",
"durationMs": 1133.7470000000849,
"styleRecalcs": 16,
"styleRecalcDurationMs": 29.567999999999998,
"layouts": 4,
"layoutDurationMs": 14.406999999999996,
"taskDurationMs": 788.3830000000003,
"heapDeltaBytes": 4215228,
"heapUsedBytes": 79037640,
"domNodes": 13513,
"jsHeapTotalBytes": 15728640,
"scriptDurationMs": 33.689,
"eventListeners": 2527,
"totalBlockingTimeMs": 161,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8525.433000000021,
"styleRecalcs": 251,
"styleRecalcDurationMs": 56.793,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4437.9039999999995,
"heapDeltaBytes": 83882872,
"heapUsedBytes": 135783208,
"domNodes": -310,
"jsHeapTotalBytes": 74448896,
"scriptDurationMs": 1396.306,
"eventListeners": -180,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "viewport-pan-sweep",
"durationMs": 8546.024999999987,
"styleRecalcs": 251,
"styleRecalcDurationMs": 54.745000000000005,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 4612.739,
"heapDeltaBytes": 67339028,
"heapUsedBytes": 148405924,
"domNodes": -286,
"jsHeapTotalBytes": 83972096,
"scriptDurationMs": 1579.836,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 13513.418000000001,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 13495.948999999999,
"heapDeltaBytes": -12145200,
"heapUsedBytes": 167702344,
"domNodes": -3288,
"jsHeapTotalBytes": 19398656,
"scriptDurationMs": 659.67,
"eventListeners": -16462,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.80000000000291
},
{
"name": "vue-large-graph-idle",
"durationMs": 13007.960000000025,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 12988.292000000001,
"heapDeltaBytes": -38469248,
"heapUsedBytes": 164982132,
"domNodes": -3308,
"jsHeapTotalBytes": 17010688,
"scriptDurationMs": 584.195,
"eventListeners": -16474,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.220000000000073,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-pan",
"durationMs": 15311.780999999995,
"styleRecalcs": 76,
"styleRecalcDurationMs": 20.793000000000006,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15286.671999999999,
"heapDeltaBytes": -33673652,
"heapUsedBytes": 163474796,
"domNodes": -3300,
"jsHeapTotalBytes": 17563648,
"scriptDurationMs": 928.9409999999999,
"eventListeners": -16466,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.223333333333237,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-pan",
"durationMs": 14718.386999999893,
"styleRecalcs": 67,
"styleRecalcDurationMs": 18.496000000000013,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 14694.438000000002,
"heapDeltaBytes": -39434220,
"heapUsedBytes": 177549592,
"domNodes": -8329,
"jsHeapTotalBytes": 26017792,
"scriptDurationMs": 921.0019999999998,
"eventListeners": -16464,
"totalBlockingTimeMs": 90,
"frameDurationMs": 17.220000000000073,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "workflow-execution",
"durationMs": 467.4400000000105,
"styleRecalcs": 18,
"styleRecalcDurationMs": 26.439999999999998,
"layouts": 5,
"layoutDurationMs": 1.479,
"taskDurationMs": 133.065,
"heapDeltaBytes": 5308916,
"heapUsedBytes": 64759156,
"domNodes": 168,
"jsHeapTotalBytes": 3145728,
"scriptDurationMs": 23.088,
"eventListeners": 69,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "workflow-execution",
"durationMs": 182.82199999998738,
"styleRecalcs": 11,
"styleRecalcDurationMs": 21.841,
"layouts": 5,
"layoutDurationMs": 1.767,
"taskDurationMs": 155.81199999999998,
"heapDeltaBytes": -5303120,
"heapUsedBytes": 48553720,
"domNodes": -173,
"jsHeapTotalBytes": -1880064,
"scriptDurationMs": 19.643,
"eventListeners": -126,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000273
}
]
} |
- initialize a Desktop-only telemetry provider in ComfyUI_frontend - forward existing typed telemetry events through `window.__comfyDesktop2.Telemetry.capture` using the existing event names - move the Desktop 2 bridge typing to the shared ambient types and let run/execution telemetry fire when any provider is registered - Desktop PR: Comfy-Org/Comfy-Desktop#1069 - `pnpm typecheck` - `pnpm format:check` - `pnpm lint` - `pnpm knip` - `pnpm test:unit src/platform/missingModel/missingModelDownload.test.ts src/platform/telemetry/initDesktopTelemetry.test.ts src/platform/telemetry/providers/desktop/DesktopTelemetryProvider.test.ts` - YAML lint over tracked YAML files with `.yamllint` [MAR-240](https://linear.app/comfyorg/issue/MAR-240/frontend-telemetry-pipeline-for-desktop-app-eventsink-refactor) (cherry picked from commit 5acd76c)
cbd8976 to
a6e7fac
Compare
Summary
Backports #12802 on top of the #12925 core/1.45 backport branch so Desktop host telemetry can register a host sink and forward supported telemetry events through the Desktop bridge.
Changes
Review Focus
Cherry-pick conflicts were in refreshRemoteConfig and executionStore execution_success handling. I kept the release-branch remote config shape and added only the unauthenticated fetch helper needed for host telemetry bootstrap. I trimmed main-only host sink methods/events and test fixture fields that do not exist on core/1.45, and kept dock_state out of this release backport stack.
Validation: pnpm typecheck via amend hook; pnpm test:unit src/platform/telemetry/initHostTelemetry.test.ts src/platform/telemetry/providers/host/HostTelemetrySink.test.ts src/stores/executionStore.test.ts. Pre-push knip passed; it still reports the existing flac metadata tag hint.