@openhands/agent-canvas 1.5.0 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/{acp-providers-BQwoUBpe.js → acp-providers-DerAmTyY.js} +1 -1
- package/build/assets/{active-backend-context-BCXRv5pm.js → active-backend-context-DHhm10VS.js} +1 -1
- package/build/assets/{add-backend-modal-BKHzq5no.js → add-backend-modal-BoMkMyLB.js} +1 -1
- package/build/assets/{agent-profiles-settings-CEp5CIz8.js → agent-profiles-settings-CYPloKYK.js} +1 -1
- package/build/assets/{agent-server-compatibility-D6DSanlx.js → agent-server-compatibility-C0MtTTwb.js} +1 -1
- package/build/assets/{agent-server-conversation-service.api-cylugfDz.js → agent-server-conversation-service.api-lzc8dabY.js} +4 -4
- package/build/assets/{agent-settings-C-tann3x.js → agent-settings-GwiXe_6k.js} +1 -1
- package/build/assets/agent-settings-OdsyI2gX.js +1 -0
- package/build/assets/{alert-banner-Dd4woGbm.js → alert-banner-Dh51WURQ.js} +1 -1
- package/build/assets/{api-key-entry-screen-Bll_CkuQ.js → api-key-entry-screen-2gsoZAOK.js} +1 -1
- package/build/assets/app-settings-CD9euh81.js +1 -0
- package/build/assets/{automation-detail-Z9dN2f5l.js → automation-detail-Bn8q0AG3.js} +1 -1
- package/build/assets/{automation-export-D5uL0Tf8.js → automation-export-Djc8Tf0M.js} +1 -1
- package/build/assets/{automations-list-BMOWcqzZ.js → automations-list-Dtiolk1h.js} +1 -1
- package/build/assets/{back-nav-button-ZUDTMOTB.js → back-nav-button-DVknCcSP.js} +1 -1
- package/build/assets/backend-form-modal-B8GtBA-J.js +1 -0
- package/build/assets/{backend-synced-settings-badge-Db_REKVw.js → backend-synced-settings-badge-yVh6Kf4E.js} +1 -1
- package/build/assets/{base-modal-Cb0C6m0Q.js → base-modal-CIF_785P.js} +1 -1
- package/build/assets/{brand-button-2Tp3aXk1.js → brand-button-B1izLAdR.js} +1 -1
- package/build/assets/{browser-QYLVr1kS.js → browser-DKaeq_sT.js} +2 -2
- package/build/assets/browser-store-BI6uklCG.js +1 -0
- package/build/assets/{browser-tab-BTTP1OE2.js → browser-tab-qb_ftCxW.js} +1 -1
- package/build/assets/{circle-plus-check-toggle-QQJKUnF6.js → circle-plus-check-toggle-DoFIjVE0.js} +1 -1
- package/build/assets/client-source-CtQjJEy6.js +1 -0
- package/build/assets/cloud-funnel-analytics-uzzLlLuj.js +1 -0
- package/build/assets/{color-themes-bVMmJJG6.js → color-themes-CHizm1xF.js} +1 -1
- package/build/assets/{combobox-caret-A5jMVHgE.js → combobox-caret-CxZpqoSR.js} +1 -1
- package/build/assets/{command-menu-BMVEme4H.js → command-menu-oTvKDU3Y.js} +1 -1
- package/build/assets/{command-store-jrWX_CcW.js → command-store-D8J5LMW1.js} +1 -1
- package/build/assets/{condenser-settings-CIa6eyB4.js → condenser-settings-Q1rHh4Qe.js} +1 -1
- package/build/assets/{confirmation-modal-4n_944zq.js → confirmation-modal-DGBWM2Ls.js} +1 -1
- package/build/assets/{context-menu-list-item-DvfFic5I.js → context-menu-list-item-6psNyl7X.js} +1 -1
- package/build/assets/conversation-B8d8_Upd.js +1 -0
- package/build/assets/{conversation-D4o4dG2t.js → conversation-Lmqm6VJC.js} +20 -20
- package/build/assets/conversation-panel-B8n40Swu.js +1 -0
- package/build/assets/{conversation-service.api-0JG_fF9d.js → conversation-service.api-D8QU-BiL.js} +1 -1
- package/build/assets/conversation-state-store-B2Bp32XI.js +1 -0
- package/build/assets/{conversation-store-BCSpLuEf.js → conversation-store-LptbOvKa.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-Dp4Q_hXi.js → copy-to-clipboard-button-CFzH_NOX.js} +1 -1
- package/build/assets/{device-verify-CM086oKs.js → device-verify-WBSjJBLH.js} +1 -1
- package/build/assets/{dropdown-classes-DZq0BQjb.js → dropdown-classes-D3wMJlXT.js} +1 -1
- package/build/assets/{ellipsis-button-TPJdyxnK.js → ellipsis-button-CbNnHlIq.js} +1 -1
- package/build/assets/{entry.client-DypYHsYm.js → entry.client-Dnnak-Hq.js} +2 -2
- package/build/assets/{enum-filter-dropdown-CW_mBg0e.js → enum-filter-dropdown-JLYv1t8L.js} +1 -1
- package/build/assets/{environment-switch-overlay-6laJch-9.js → environment-switch-overlay-B1PFO8P8.js} +1 -1
- package/build/assets/{extensions-hub-BJFbFfKS.js → extensions-hub-DqvwvpCi.js} +1 -1
- package/build/assets/{extensions-navigation-DqSl7CJw.js → extensions-navigation-BMc9Nluv.js} +1 -1
- package/build/assets/{files-tab-c316dKAq.js → files-tab-BAkaV4aO.js} +1 -1
- package/build/assets/{files-tab-store-tfCav6bB.js → files-tab-store-DJsPxYdg.js} +1 -1
- package/build/assets/{git-provider-icon-DUb2pEos.js → git-provider-icon-xvbukHaT.js} +1 -1
- package/build/assets/{home-D7ds4Jyw.js → home-D01kSnmo.js} +1 -1
- package/build/assets/home-NZO2bF4N.js +1 -0
- package/build/assets/index-home-BsI6i0TC.js +1 -0
- package/build/assets/{install-server-modal-CvHvzZj3.js → install-server-modal-BYjqoRyX.js} +1 -1
- package/build/assets/{launch-A47TK2Me.js → launch-DlXspDku.js} +1 -1
- package/build/assets/lesson-plan-cNUjpdFx.js +4 -0
- package/build/assets/{llm-not-configured-banner-B7DR8SPs.js → llm-not-configured-banner-DUPyoFIZ.js} +7 -7
- package/build/assets/{llm-settings-Cvi7q4ox.js → llm-settings-Cs_iieFY.js} +1 -1
- package/build/assets/llm-settings-J2ke2foG.js +1 -0
- package/build/assets/{llm-subscription-service-Cz1yBBvE.js → llm-subscription-service-C0zN0-rH.js} +1 -1
- package/build/assets/{manage-backends-modal-DAVhNUCe.js → manage-backends-modal-nMoCZ2a0.js} +1 -1
- package/build/assets/manifest-f1b46f62.js +1 -0
- package/build/assets/{map-provider-XSFHmdDs.js → map-provider-BbIb12oh.js} +1 -1
- package/build/assets/{markdown-renderer-B6cJJ_MN.js → markdown-renderer-B4V2OMFP.js} +1 -1
- package/build/assets/{mcp-BwssgMpg.js → mcp-kZM-cAZw.js} +1 -1
- package/build/assets/{messages-D8MeG2ZQ.js → messages-CJAv5n4j.js} +1 -1
- package/build/assets/{model-selector-BxTbbKub.js → model-selector-D51W2Q9b.js} +1 -1
- package/build/assets/{navigation-link-imH6S7h2.js → navigation-link-D8hfwvxI.js} +1 -1
- package/build/assets/{onboarding-CyicadGt.js → onboarding-Dx8n8HFr.js} +1 -1
- package/build/assets/onboarding-modal-Bxuxpfdz.js +1 -0
- package/build/assets/{organization-service.api-QknzKDh3.js → organization-service.api-Da2jiuBS.js} +1 -1
- package/build/assets/{path-utils-BECGet7G.js → path-utils-D53ZHUQU.js} +1 -1
- package/build/assets/{planner-tab-DPKHmMAX.js → planner-tab-BM-pKx0z.js} +1 -1
- package/build/assets/{plugins-management-service-DuTTxquo.js → plugins-management-service-DISfOL13.js} +1 -1
- package/build/assets/{profiles-service.api-D6jvZOWu.js → profiles-service.api-DWetW2TL.js} +1 -1
- package/build/assets/providers-C7lMslCi.js +1 -0
- package/build/assets/{proxy-CuhhyjdX.js → proxy-G4ce0fnQ.js} +1 -1
- package/build/assets/{recommended-automations-launcher-DA6DWS7V.js → recommended-automations-launcher-BWRRvMPE.js} +1 -1
- package/build/assets/root-layout-ClEl-JlJ.js +2 -0
- package/build/assets/root-oT83qVlk.js +2 -0
- package/build/assets/{runtime-waiting-state-DeD9G7yJ.js → runtime-waiting-state-CnyVhX4T.js} +1 -1
- package/build/assets/{schema-field-BOLdL_U7.js → schema-field-CwdqUOnE.js} +1 -1
- package/build/assets/{sdk-section-page-ZIltERxf.js → sdk-section-page-Cwj0T4gF.js} +1 -1
- package/build/assets/{sdk-settings-schema-Ba_Pa9uf.js → sdk-settings-schema-CLR01YIK.js} +1 -1
- package/build/assets/{secrets-service-50DElFny.js → secrets-service-Ch7RH8eH.js} +1 -1
- package/build/assets/{secrets-settings-Digl7JLe.js → secrets-settings-Bc_pBX6F.js} +1 -1
- package/build/assets/{settings-dropdown-input-BD5C9fBn.js → settings-dropdown-input-Dhx9ErGd.js} +1 -1
- package/build/assets/{settings-index-CODBijya.js → settings-index-BzSIM1-N.js} +1 -1
- package/build/assets/{settings-input-CzNOq-Pj.js → settings-input-BsgQWS5R.js} +1 -1
- package/build/assets/{settings-list-classes-CuxH9ZoR.js → settings-list-classes-DSJJX99U.js} +1 -1
- package/build/assets/{settings-modal-BcSWpKI0.js → settings-modal-BnZ7mMu7.js} +1 -1
- package/build/assets/settings-n9a395O0.js +1 -0
- package/build/assets/{settings-service.api-Bsu1PvYO.js → settings-service.api-DPTFyRXL.js} +1 -1
- package/build/assets/{settings-switch-DqmHAfWJ.js → settings-switch-Bes8dIlV.js} +1 -1
- package/build/assets/{settings-utils-B1lBErvV.js → settings-utils-DzCVfiR3.js} +1 -1
- package/build/assets/{shared-conversation-CDskdmrb.js → shared-conversation-CIDDti9I.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-DmCmZgq1.js → sidebar-mobile-menu-toggle-CTX7J4wM.js} +1 -1
- package/build/assets/{sidebar-nav-link-DMc8AIe7.js → sidebar-nav-link-CHqyFXwV.js} +1 -1
- package/build/assets/{sidebar-store-DXWSCFpa.js → sidebar-store-uiUXBU1N.js} +1 -1
- package/build/assets/{skill-card-pill-row-DOIWjiMF.js → skill-card-pill-row-BPYKQ3IN.js} +1 -1
- package/build/assets/{skills-plugins-DLgINYuY.js → skills-plugins-HZEbNDmX.js} +1 -1
- package/build/assets/{skills-settings-DPiCWalR.js → skills-settings-BdqijFlC.js} +1 -1
- package/build/assets/{task-list-tab-CuhcDycu.js → task-list-tab-DyfgG4MC.js} +1 -1
- package/build/assets/telemetry-SHxpVxk8.js +2 -0
- package/build/assets/{terminal-CVqF-tCD.js → terminal-BDTa1HEr.js} +1 -1
- package/build/assets/{typography-CQn9wyEX.js → typography-CzfoD9DY.js} +1 -1
- package/build/assets/{use-acp-credential-form-LlfZO_DD.js → use-acp-credential-form-DHd_Id-q.js} +1 -1
- package/build/assets/{use-activate-agent-profile-DpQjsXM0.js → use-activate-agent-profile-BRDdSwQ0.js} +1 -1
- package/build/assets/{use-active-agent-profile-Gw_uJujV.js → use-active-agent-profile-BMDTXsay.js} +1 -1
- package/build/assets/{use-active-conversation-B0sttISF.js → use-active-conversation-BbeVgedA.js} +1 -1
- package/build/assets/{use-agent-profiles-LHZEK0Gg.js → use-agent-profiles-Dn_S_Tkz.js} +1 -1
- package/build/assets/{use-agent-state-C5uA0bRj.js → use-agent-state-5qM3X30V.js} +1 -1
- package/build/assets/{use-backends-health-DKt1SmiU.js → use-backends-health-BagmAE_W.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-BAtqsbCi.js → use-can-manage-org-profiles-CyYqfzeo.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-C8m1oBy4.js → use-cloud-current-user-id-BwMX7jHW.js} +1 -1
- package/build/assets/use-config-B39iHYFi.js +1 -0
- package/build/assets/{use-create-conversation-CWQGNQ9J.js → use-create-conversation-CkKUQVbP.js} +1 -1
- package/build/assets/{use-create-secret-BIrsX3OB.js → use-create-secret-DEgM0MXZ.js} +1 -1
- package/build/assets/{use-event-store-CsD17BKu.js → use-event-store-Bbaz51GR.js} +1 -1
- package/build/assets/{use-handle-plan-click-DEuO7Byo.js → use-handle-plan-click-BFcE0Xms.js} +1 -1
- package/build/assets/{use-launch-skill-in-chat-CdHOoQGM.js → use-launch-skill-in-chat-DJWEfVc5.js} +1 -1
- package/build/assets/{use-llm-profiles-DQpQxVOD.js → use-llm-profiles-CgRtnj74.js} +1 -1
- package/build/assets/{use-plugins-marketplace-Bkk07W_M.js → use-plugins-marketplace-DOJp9rlE.js} +1 -1
- package/build/assets/use-runtime-is-ready-ziHQvXZQ.js +1 -0
- package/build/assets/{use-save-agent-profile-BxEsjnW0.js → use-save-agent-profile-i4FcEP98.js} +1 -1
- package/build/assets/{use-save-settings-ioSUMqbE.js → use-save-settings-DiDEbIJw.js} +1 -1
- package/build/assets/{use-settings-DNJC4gqu.js → use-settings-BeJap6YL.js} +1 -1
- package/build/assets/{use-settings-nav-items-BUsrDbVR.js → use-settings-nav-items-D5JJjFHJ.js} +1 -1
- package/build/assets/{use-skills-BsmKm23M.js → use-skills-Blpg2BqE.js} +1 -1
- package/build/assets/{use-task-list-rs7Xbzl8.js → use-task-list-CfisapBW.js} +1 -1
- package/build/assets/use-tracking-DFoPQUSU.js +1 -0
- package/build/assets/{use-user-conversation-B337kUKB.js → use-user-conversation-BrN2xeQU.js} +1 -1
- package/build/assets/{vendor~browser-tab-Xn94EtUo.js → vendor~browser-tab-CsMb-pta.js} +1 -1
- package/build/assets/{vendor~browser-5Njjw1Cl.js → vendor~browser-wXQ-WZEC.js} +1 -1
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-BIieS_OD.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-eGLBu60s.js} +2 -2
- package/build/assets/{vendor~files-tab-CiC3-lGh.js → vendor~files-tab-B-5fBohe.js} +1 -1
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DWteoTyr.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD7v71DM.js} +1 -1
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-tlf6AnDe.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BT05Osu4.js} +1 -1
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-B8XNNEQZ.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-COhHANvV.js} +1 -1
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Dc5nKwLO.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DgzWSMRc.js} +1 -1
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CnJRLn5s.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DqZatR3B.js} +1 -1
- package/build/assets/{vendor~launch-28DK5Rsl.js → vendor~launch-_Km3J77E.js} +1 -1
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~g9hift2g-DmmpG9SI.js → vendor~module-D5a_AClf.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-lYNG9C1U.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-BrguKXCn.js} +1 -1
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation-Zhq6xAxR.js → vendor~root-layout~index-home~home~conversation-panel~conversation-BTvhGHHG.js} +1 -1
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-B81b08bw.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-BOKQkbc6.js} +1 -1
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-jpyLM1Nn.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-cFNmfAE6.js} +1 -1
- package/build/assets/{verification-settings-HRgEM-_3.js → verification-settings-C8KzAdAX.js} +1 -1
- package/build/index.html +4 -4
- package/config/defaults.json +1 -1
- package/dist/api/cloud/conversation-service.api.cjs +1 -1
- package/dist/api/cloud/conversation-service.api.js +4 -4
- package/dist/api/option-service/option-service.api.cjs +1 -1
- package/dist/api/option-service/option-service.api.cjs.map +1 -1
- package/dist/api/option-service/option-service.api.js +0 -1
- package/dist/api/option-service/option-service.api.js.map +1 -1
- package/dist/api/option-service/option.types.d.ts +0 -1
- package/dist/components/features/backends/backend-form-modal.cjs +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
- package/dist/components/features/backends/backend-form-modal.d.ts +1 -1
- package/dist/components/features/backends/backend-form-modal.js +137 -144
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- package/dist/components/providers/agent-server-ui-providers.cjs +1 -1
- package/dist/components/providers/agent-server-ui-providers.cjs.map +1 -1
- package/dist/components/providers/agent-server-ui-providers.d.ts +4 -2
- package/dist/components/providers/agent-server-ui-providers.js +9 -2
- package/dist/components/providers/agent-server-ui-providers.js.map +1 -1
- package/dist/components/providers/index.cjs +1 -1
- package/dist/components/providers/index.d.ts +1 -2
- package/dist/components/providers/index.js +0 -1
- package/dist/components/providers/telemetry-provider.cjs +2 -0
- package/dist/components/providers/telemetry-provider.cjs.map +1 -0
- package/dist/components/providers/telemetry-provider.d.ts +6 -0
- package/dist/components/providers/telemetry-provider.js +64 -0
- package/dist/components/providers/telemetry-provider.js.map +1 -0
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/contexts/conversation-websocket-context.cjs +3 -3
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js +197 -204
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/hooks/mutation/use-save-settings.cjs +1 -1
- package/dist/hooks/mutation/use-save-settings.cjs.map +1 -1
- package/dist/hooks/mutation/use-save-settings.d.ts +3 -1
- package/dist/hooks/mutation/use-save-settings.js +6 -5
- package/dist/hooks/mutation/use-save-settings.js.map +1 -1
- package/dist/hooks/query/use-task-polling.cjs +1 -1
- package/dist/hooks/query/use-task-polling.cjs.map +1 -1
- package/dist/hooks/query/use-task-polling.d.ts +19 -3
- package/dist/hooks/query/use-task-polling.js +36 -35
- package/dist/hooks/query/use-task-polling.js.map +1 -1
- package/dist/hooks/use-telemetry.cjs +1 -1
- package/dist/hooks/use-telemetry.cjs.map +1 -1
- package/dist/hooks/use-telemetry.d.ts +3 -3
- package/dist/hooks/use-telemetry.js +16 -22
- package/dist/hooks/use-telemetry.js.map +1 -1
- package/dist/hooks/use-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +3 -4
- package/dist/hooks/use-tracking.js +37 -37
- package/dist/hooks/use-tracking.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/lib/index.d.ts +2 -2
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +2 -2
- package/dist/package.js.map +1 -1
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +66 -68
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/conversation.cjs +1 -1
- package/dist/routes/conversation.cjs.map +1 -1
- package/dist/routes/conversation.js +1 -1
- package/dist/routes/conversation.js.map +1 -1
- package/dist/routes/llm-settings.cjs +1 -1
- package/dist/routes/llm-settings.cjs.map +1 -1
- package/dist/routes/llm-settings.js +4 -1
- package/dist/routes/llm-settings.js.map +1 -1
- package/dist/services/cloud-funnel-analytics.cjs +1 -1
- package/dist/services/cloud-funnel-analytics.cjs.map +1 -1
- package/dist/services/cloud-funnel-analytics.d.ts +3 -11
- package/dist/services/cloud-funnel-analytics.js +16 -30
- package/dist/services/cloud-funnel-analytics.js.map +1 -1
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.d.ts +46 -9
- package/dist/services/telemetry.js +181 -72
- package/dist/services/telemetry.js.map +1 -1
- package/dist/themes/color-themes.cjs.map +1 -1
- package/dist/themes/color-themes.d.ts +3 -6
- package/dist/themes/color-themes.js.map +1 -1
- package/dist/utils/error-handler.cjs +1 -1
- package/dist/utils/error-handler.cjs.map +1 -1
- package/dist/utils/error-handler.d.ts +1 -4
- package/dist/utils/error-handler.js +6 -7
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/map-provider.cjs +1 -1
- package/dist/utils/map-provider.cjs.map +1 -1
- package/dist/utils/map-provider.d.ts +1 -0
- package/dist/utils/map-provider.js +2 -1
- package/dist/utils/map-provider.js.map +1 -1
- package/package.json +2 -2
- package/build/assets/agent-settings-DGUKNSnU.js +0 -1
- package/build/assets/app-settings-BpViWwpC.js +0 -1
- package/build/assets/backend-form-modal-DhBT8P4g.js +0 -1
- package/build/assets/browser-store-BGXOGo-R.js +0 -1
- package/build/assets/client-source-Biqarhgr.js +0 -1
- package/build/assets/cloud-funnel-analytics-D-27T5Ao.js +0 -1
- package/build/assets/conversation-CHnEXGRM.js +0 -1
- package/build/assets/conversation-panel-11FjLCId.js +0 -1
- package/build/assets/conversation-state-store-JiUQp02U.js +0 -1
- package/build/assets/handle-capture-consent-DDnXMC9Y.js +0 -1
- package/build/assets/home-BQ-DC06B.js +0 -1
- package/build/assets/index-home-BRFDWs_4.js +0 -1
- package/build/assets/lesson-plan-DSf95kQ2.js +0 -4
- package/build/assets/llm-settings-Ch4ZbW3c.js +0 -1
- package/build/assets/manifest-958c741a.js +0 -1
- package/build/assets/onboarding-modal-DQwihcTz.js +0 -1
- package/build/assets/option-service.api-DAkg_F7p.js +0 -1
- package/build/assets/package-Dk_VtWJ4.js +0 -1
- package/build/assets/providers-B8pxQK8x.js +0 -1
- package/build/assets/root-BhP6bTBB.js +0 -2
- package/build/assets/root-layout-oBaHHW4s.js +0 -2
- package/build/assets/settings-BfgLHsgd.js +0 -1
- package/build/assets/telemetry-DHiTRl5_.js +0 -2
- package/build/assets/use-config-CXy4vD0H.js +0 -1
- package/build/assets/use-runtime-is-ready-D4pkGT6E.js +0 -1
- package/build/assets/use-tracking-poxQHMwR.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ljq5gbus-B2XD4bi2.js +0 -1
- package/dist/components/providers/posthog-wrapper.cjs +0 -2
- package/dist/components/providers/posthog-wrapper.cjs.map +0 -1
- package/dist/components/providers/posthog-wrapper.d.ts +0 -4
- package/dist/components/providers/posthog-wrapper.js +0 -49
- package/dist/components/providers/posthog-wrapper.js.map +0 -1
- package/dist/node_modules/posthog-js/react/dist/esm/index.cjs +0 -2
- package/dist/node_modules/posthog-js/react/dist/esm/index.cjs.map +0 -1
- package/dist/node_modules/posthog-js/react/dist/esm/index.js +0 -113
- package/dist/node_modules/posthog-js/react/dist/esm/index.js.map +0 -1
- package/dist/utils/handle-capture-consent.cjs +0 -2
- package/dist/utils/handle-capture-consent.cjs.map +0 -1
- package/dist/utils/handle-capture-consent.d.ts +0 -7
- package/dist/utils/handle-capture-consent.js +0 -8
- package/dist/utils/handle-capture-consent.js.map +0 -1
- /package/build/assets/{__vite-browser-external-DU-Cb_sT.js → __vite-browser-external-BQUj0sYu.js} +0 -0
- /package/build/assets/{agent-server-ui-style-scope-COnDHTm5.js → agent-server-ui-style-scope-qhnhZHBV.js} +0 -0
- /package/build/assets/{automation-BVEmGghX.js → automation-LZB0MjdV.js} +0 -0
- /package/build/assets/{canvas-ui-BhxjoA1f.js → canvas-ui-COgjltGz.js} +0 -0
- /package/build/assets/{checkmark-DhcMGwtO.js → checkmark-h7udgXMM.js} +0 -0
- /package/build/assets/{close-DO5Rq_CS.js → close-DLFb5kfv.js} +0 -0
- /package/build/assets/{code-tag-BvjtzUsr.js → code-tag-DYlAhEQY.js} +0 -0
- /package/build/assets/{conversation-local-storage-B31voBg7.js → conversation-local-storage-F6zVMM--.js} +0 -0
- /package/build/assets/{conversation-tab-empty-state-BUhKVwoi.js → conversation-tab-empty-state-CNUmIms2.js} +0 -0
- /package/build/assets/{copy-DLUw2us-.js → copy-BLmGeJcd.js} +0 -0
- /package/build/assets/{dist-Dj01FXbZ.js → dist-CodhvuAP.js} +0 -0
- /package/build/assets/{environment-switch-store-D9hB9PvY.js → environment-switch-store-DkjlKWzN.js} +0 -0
- /package/build/assets/{extension-module-card-classes-BlO4w702.js → extension-module-card-classes-9V3J9J_b.js} +0 -0
- /package/build/assets/{folder-ynxP2EIL.js → folder-Bk311brm.js} +0 -0
- /package/build/assets/{form-control-classes-CvUaw8_L.js → form-control-classes-CbdN5aO3.js} +0 -0
- /package/build/assets/{get-language-from-path-rWEQrOGU.js → get-language-from-path-DBqBsCWH.js} +0 -0
- /package/build/assets/{git-status-mapper-C3rfzUex.js → git-status-mapper-DnL9OC8_.js} +0 -0
- /package/build/assets/{iconBase-CuvxAQZ5.js → iconBase-Dz51Zn5x.js} +0 -0
- /package/build/assets/{link-external-BVDiJfZt.js → link-external-CaBmUEs_.js} +0 -0
- /package/build/assets/{llm-subscription-BkdHwtQe.js → llm-subscription-DtsX5Lhg.js} +0 -0
- /package/build/assets/{loading-spinner-Txxx1I1p.js → loading-spinner-BcdnT0mN.js} +0 -0
- /package/build/assets/{middleware-CWYDMVuG.js → middleware-DYHYNAnP.js} +0 -0
- /package/build/assets/{modal-backdrop-Dsmzgr5s.js → modal-backdrop-zVwfOJZr.js} +0 -0
- /package/build/assets/{modal-body-CDZdZ-eT.js → modal-body-Cc2zp0xb.js} +0 -0
- /package/build/assets/{modal-classes-B4oit_4c.js → modal-classes-3qT9Ap7Q.js} +0 -0
- /package/build/assets/{modal-close-button-DQElFMPo.js → modal-close-button-BcIBUdSq.js} +0 -0
- /package/build/assets/{navigation-context-SjzfpygH.js → navigation-context-DPs2G0X8.js} +0 -0
- /package/build/assets/{objectWithoutPropertiesLoose-CQwg6tC0.js → objectWithoutPropertiesLoose-BgYIAs2y.js} +0 -0
- /package/build/assets/{openhands-logo-C-gDp1wr.js → openhands-logo-bcNw5bkY.js} +0 -0
- /package/build/assets/{plan-components-CgPHWz3E.js → plan-components-BdZXPyZU.js} +0 -0
- /package/build/assets/{react-ao3tWj6K.js → react-DPDgL6du.js} +0 -0
- /package/build/assets/{search-pb4UKTfK.js → search-BgOCR7_c.js} +0 -0
- /package/build/assets/{segmented-toggle-C1-ZVyr5.js → segmented-toggle-kzwZkLaj.js} +0 -0
- /package/build/assets/{settings-gear-D_HVvE5L.js → settings-gear-MXCyZW0x.js} +0 -0
- /package/build/assets/{settings-like-page-layout-classes-DLrsPCaI.js → settings-like-page-layout-classes-Cdl6jOe5.js} +0 -0
- /package/build/assets/{settings-DksoDv5z.js → settings-mQUckT0g.js} +0 -0
- /package/build/assets/{settings-section-header-context-C2MUIG88.js → settings-section-header-context-COMOIaxV.js} +0 -0
- /package/build/assets/{sidebar-layout-Cn6eQaEI.js → sidebar-layout-Bm7pa3Vk.js} +0 -0
- /package/build/assets/{skills-CH4xgIh-.js → skills-EqzxYBvT.js} +0 -0
- /package/build/assets/{styled-tooltip-CvsjHuIf.js → styled-tooltip-B14i_Uac.js} +0 -0
- /package/build/assets/{switch-skeleton-BpSOvZ-n.js → switch-skeleton-DqQwalyu.js} +0 -0
- /package/build/assets/{terminal-Dokfkxn0.js → terminal-Cgf___rK.js} +0 -0
- /package/build/assets/{toggle-switch-CS0ClOy2.js → toggle-switch-DX_k418f.js} +0 -0
- /package/build/assets/{u-check-circle-DPWVO-9N.js → u-check-circle-BqoIxNz_.js} +0 -0
- /package/build/assets/{u-check-circle-half-BGNAAjOW.js → u-check-circle-half-MsShT8Ec.js} +0 -0
- /package/build/assets/{u-edit-BIskOoEG.js → u-edit-DL5LgKon.js} +0 -0
- /package/build/assets/{use-breakpoint-OjLm94cF.js → use-breakpoint-BP3lqLMx.js} +0 -0
- /package/build/assets/{use-click-outside-element-Jpt2WWd7.js → use-click-outside-element-D9BYdANT.js} +0 -0
- /package/build/assets/{use-is-authed-Dvbpiu3B.js → use-is-authed-BezEyfeh.js} +0 -0
- /package/build/assets/{use-onboarding-completion-DkRpDTsD.js → use-onboarding-completion-C_Swglzp.js} +0 -0
- /package/build/assets/{v4-DPgam_jW.js → v4-DbCkTSoU.js} +0 -0
- /package/build/assets/{vendor~browser-BvEKaLBz.js → vendor~browser-By2MVv_N.js} +0 -0
- /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-CznX01nZ.js → vendor~conversation-panel~conversation~alert-banner-CxfzCmkN.js} +0 -0
- /package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BuL5kjfS.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-FghQ3Z1a.js} +0 -0
- /package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-DUYl8gbZ.js → vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-mC0v44WR.js} +0 -0
- /package/build/assets/{vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-pIgQDxTc.js → vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-C4-GDgiF.js} +0 -0
- /package/build/assets/{vendor~terminal-jAaNQWS9.js → vendor~terminal-CnKZILnC.js} +0 -0
- /package/build/assets/{x-mark-C5przfXl.js → x-mark-Batp6gXa.js} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../services/telemetry.cjs`);let t=require(`react`);function n(){let
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../services/telemetry.cjs`);let t=require(`react`);function n(){let n=(0,t.useSyncExternalStore)(e.subscribeTelemetryConsent,e.getTelemetryConsent,()=>`pending`),r=(0,t.useRef)(!1);(0,t.useEffect)(()=>{r.current||(r.current=!0,e.trackInstall())},[]),(0,t.useEffect)(()=>{n===`granted`&&e.trackSessionStart()},[n]);let i=(0,t.useCallback)(()=>e.setTelemetryConsent(`granted`),[]),a=(0,t.useCallback)(()=>e.setTelemetryConsent(`denied`),[]),o=(0,t.useCallback)((t,n)=>{e.trackEvent(t,n)},[]),s=(0,t.useCallback)(()=>e.clearTelemetryData(),[]);return{consent:n,isEnabled:n===`granted`,showConsentPrompt:n===`pending`,grantConsent:i,denyConsent:a,track:o,clearData:s}}exports.useTelemetry=n;
|
|
2
2
|
//# sourceMappingURL=use-telemetry.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-telemetry.cjs","names":[],"sources":["../../src/hooks/use-telemetry.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"use-telemetry.cjs","names":[],"sources":["../../src/hooks/use-telemetry.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useSyncExternalStore } from \"react\";\nimport {\n getTelemetryConsent,\n setTelemetryConsent,\n trackInstall,\n trackSessionStart,\n trackEvent,\n clearTelemetryData,\n subscribeTelemetryConsent,\n type TelemetryConsent,\n} from \"#/services/telemetry\";\n\nexport interface UseTelemetryReturn {\n /** Current consent status */\n consent: TelemetryConsent;\n /** Whether telemetry is enabled (consent granted) */\n isEnabled: boolean;\n /** Whether consent prompt should be shown */\n showConsentPrompt: boolean;\n /** Grant consent and enable telemetry */\n grantConsent: () => Promise<void>;\n /** Deny consent and disable telemetry */\n denyConsent: () => Promise<void>;\n /** Track a custom event (only if consent granted) */\n track: (eventName: string, properties?: Record<string, unknown>) => void;\n /** Clear all telemetry data */\n clearData: () => Promise<void>;\n}\n\n/**\n * Hook for managing telemetry consent and tracking.\n *\n * TRACKING BEHAVIOR:\n * - Install event: Sent immediately on first mount, regardless of consent status.\n * This is anonymous and allows us to track library adoption.\n * - Session/custom events: Only sent after user grants consent.\n *\n * This hook handles:\n * - Sending install event immediately on first use\n * - Showing consent prompt for ongoing tracking\n * - Tracking session start when consent is granted\n * - Providing a simple API for tracking custom events\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { consent, showConsentPrompt, grantConsent, denyConsent, track } = useTelemetry();\n *\n * useEffect(() => {\n * track('component_mounted', { component: 'MyComponent' });\n * }, [track]);\n *\n * if (showConsentPrompt) {\n * return <ConsentBanner onAccept={grantConsent} onDecline={denyConsent} />;\n * }\n *\n * return <div>...</div>;\n * }\n * ```\n */\nexport function useTelemetry(): UseTelemetryReturn {\n const consent = useSyncExternalStore<TelemetryConsent>(\n subscribeTelemetryConsent,\n getTelemetryConsent,\n () => \"pending\",\n );\n\n // Track install immediately on first mount (regardless of consent)\n // This only fires once per installation due to localStorage deduplication\n //\n // PRIVACY NOTE: This sends an anonymous install event before the user grants consent.\n // Data collected: browser platform, user agent, referrer, origin URL, embedded status.\n // A random PostHog distinct_id is generated (not tied to user identity).\n // Users can prevent this by setting VITE_DO_NOT_TRACK=1 or browser's DNT setting.\n // This approach uses \"legitimate interest\" under GDPR Article 6(1)(f) for basic\n // aggregate analytics. No cross-site tracking, no advertising, no user profiles.\n const hasTrackedInstall = useRef(false);\n useEffect(() => {\n if (!hasTrackedInstall.current) {\n hasTrackedInstall.current = true;\n void trackInstall();\n }\n }, []);\n\n // Track session start when consent is granted\n useEffect(() => {\n if (consent === \"granted\") {\n void trackSessionStart();\n }\n }, [consent]);\n\n const grantConsent = useCallback(() => setTelemetryConsent(\"granted\"), []);\n\n const denyConsent = useCallback(() => setTelemetryConsent(\"denied\"), []);\n\n const track = useCallback(\n (eventName: string, properties?: Record<string, unknown>) => {\n void trackEvent(eventName, properties);\n },\n [],\n );\n\n const clearData = useCallback(() => clearTelemetryData(), []);\n\n return {\n consent,\n isEnabled: consent === \"granted\",\n showConsentPrompt: consent === \"pending\",\n grantConsent,\n denyConsent,\n track,\n clearData,\n };\n}\n"],"mappings":"iHA4DA,SAAgB,GAAmC,CACjD,IAAM,GAAA,EAAA,EAAA,sBACJ,EAAA,0BACA,EAAA,wBACM,UACP,CAWK,GAAA,EAAA,EAAA,QAA2B,GAAM,EACvC,EAAA,EAAA,eAAgB,CACT,EAAkB,UACrB,EAAkB,QAAU,GACvB,EAAA,cAAc,GAEpB,EAAE,CAAC,EAGN,EAAA,EAAA,eAAgB,CACV,IAAY,WACT,EAAA,mBAAmB,EAEzB,CAAC,EAAQ,CAAC,CAEb,IAAM,GAAA,EAAA,EAAA,iBAAiC,EAAA,oBAAoB,UAAU,CAAE,EAAE,CAAC,CAEpE,GAAA,EAAA,EAAA,iBAAgC,EAAA,oBAAoB,SAAS,CAAE,EAAE,CAAC,CAElE,GAAA,EAAA,EAAA,cACH,EAAmB,IAAyC,CACtD,EAAA,WAAW,EAAW,EAAW,EAExC,EAAE,CACH,CAEK,GAAA,EAAA,EAAA,iBAA8B,EAAA,oBAAoB,CAAE,EAAE,CAAC,CAE7D,MAAO,CACL,UACA,UAAW,IAAY,UACvB,kBAAmB,IAAY,UAC/B,eACA,cACA,QACA,YACD"}
|
|
@@ -7,13 +7,13 @@ export interface UseTelemetryReturn {
|
|
|
7
7
|
/** Whether consent prompt should be shown */
|
|
8
8
|
showConsentPrompt: boolean;
|
|
9
9
|
/** Grant consent and enable telemetry */
|
|
10
|
-
grantConsent: () => void
|
|
10
|
+
grantConsent: () => Promise<void>;
|
|
11
11
|
/** Deny consent and disable telemetry */
|
|
12
|
-
denyConsent: () => void
|
|
12
|
+
denyConsent: () => Promise<void>;
|
|
13
13
|
/** Track a custom event (only if consent granted) */
|
|
14
14
|
track: (eventName: string, properties?: Record<string, unknown>) => void;
|
|
15
15
|
/** Clear all telemetry data */
|
|
16
|
-
clearData: () => void
|
|
16
|
+
clearData: () => Promise<void>;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* Hook for managing telemetry consent and tracking.
|
|
@@ -1,26 +1,20 @@
|
|
|
1
|
-
import { clearTelemetryData as e, getTelemetryConsent as t, setTelemetryConsent as n,
|
|
2
|
-
import { useCallback as
|
|
1
|
+
import { clearTelemetryData as e, getTelemetryConsent as t, setTelemetryConsent as n, subscribeTelemetryConsent as r, trackEvent as i, trackInstall as a, trackSessionStart as o } from "../services/telemetry.js";
|
|
2
|
+
import { useCallback as s, useEffect as c, useRef as l, useSyncExternalStore as u } from "react";
|
|
3
3
|
//#region src/hooks/use-telemetry.ts
|
|
4
|
-
function
|
|
5
|
-
let
|
|
6
|
-
|
|
7
|
-
f.current || (f.current = !0,
|
|
8
|
-
}, []),
|
|
9
|
-
|
|
10
|
-
}, [
|
|
11
|
-
let p =
|
|
12
|
-
|
|
13
|
-
}, []),
|
|
14
|
-
await n("denied"), d("denied");
|
|
15
|
-
}, []), h = o((e, t) => {
|
|
16
|
-
u === "granted" && r(e, t);
|
|
17
|
-
}, [u]), g = o(() => {
|
|
18
|
-
e(), d("pending");
|
|
19
|
-
}, []);
|
|
4
|
+
function d() {
|
|
5
|
+
let d = u(r, t, () => "pending"), f = l(!1);
|
|
6
|
+
c(() => {
|
|
7
|
+
f.current || (f.current = !0, a());
|
|
8
|
+
}, []), c(() => {
|
|
9
|
+
d === "granted" && o();
|
|
10
|
+
}, [d]);
|
|
11
|
+
let p = s(() => n("granted"), []), m = s(() => n("denied"), []), h = s((e, t) => {
|
|
12
|
+
i(e, t);
|
|
13
|
+
}, []), g = s(() => e(), []);
|
|
20
14
|
return {
|
|
21
|
-
consent:
|
|
22
|
-
isEnabled:
|
|
23
|
-
showConsentPrompt:
|
|
15
|
+
consent: d,
|
|
16
|
+
isEnabled: d === "granted",
|
|
17
|
+
showConsentPrompt: d === "pending",
|
|
24
18
|
grantConsent: p,
|
|
25
19
|
denyConsent: m,
|
|
26
20
|
track: h,
|
|
@@ -28,6 +22,6 @@ function u() {
|
|
|
28
22
|
};
|
|
29
23
|
}
|
|
30
24
|
//#endregion
|
|
31
|
-
export {
|
|
25
|
+
export { d as useTelemetry };
|
|
32
26
|
|
|
33
27
|
//# sourceMappingURL=use-telemetry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-telemetry.js","names":[],"sources":["../../src/hooks/use-telemetry.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"use-telemetry.js","names":[],"sources":["../../src/hooks/use-telemetry.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useSyncExternalStore } from \"react\";\nimport {\n getTelemetryConsent,\n setTelemetryConsent,\n trackInstall,\n trackSessionStart,\n trackEvent,\n clearTelemetryData,\n subscribeTelemetryConsent,\n type TelemetryConsent,\n} from \"#/services/telemetry\";\n\nexport interface UseTelemetryReturn {\n /** Current consent status */\n consent: TelemetryConsent;\n /** Whether telemetry is enabled (consent granted) */\n isEnabled: boolean;\n /** Whether consent prompt should be shown */\n showConsentPrompt: boolean;\n /** Grant consent and enable telemetry */\n grantConsent: () => Promise<void>;\n /** Deny consent and disable telemetry */\n denyConsent: () => Promise<void>;\n /** Track a custom event (only if consent granted) */\n track: (eventName: string, properties?: Record<string, unknown>) => void;\n /** Clear all telemetry data */\n clearData: () => Promise<void>;\n}\n\n/**\n * Hook for managing telemetry consent and tracking.\n *\n * TRACKING BEHAVIOR:\n * - Install event: Sent immediately on first mount, regardless of consent status.\n * This is anonymous and allows us to track library adoption.\n * - Session/custom events: Only sent after user grants consent.\n *\n * This hook handles:\n * - Sending install event immediately on first use\n * - Showing consent prompt for ongoing tracking\n * - Tracking session start when consent is granted\n * - Providing a simple API for tracking custom events\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { consent, showConsentPrompt, grantConsent, denyConsent, track } = useTelemetry();\n *\n * useEffect(() => {\n * track('component_mounted', { component: 'MyComponent' });\n * }, [track]);\n *\n * if (showConsentPrompt) {\n * return <ConsentBanner onAccept={grantConsent} onDecline={denyConsent} />;\n * }\n *\n * return <div>...</div>;\n * }\n * ```\n */\nexport function useTelemetry(): UseTelemetryReturn {\n const consent = useSyncExternalStore<TelemetryConsent>(\n subscribeTelemetryConsent,\n getTelemetryConsent,\n () => \"pending\",\n );\n\n // Track install immediately on first mount (regardless of consent)\n // This only fires once per installation due to localStorage deduplication\n //\n // PRIVACY NOTE: This sends an anonymous install event before the user grants consent.\n // Data collected: browser platform, user agent, referrer, origin URL, embedded status.\n // A random PostHog distinct_id is generated (not tied to user identity).\n // Users can prevent this by setting VITE_DO_NOT_TRACK=1 or browser's DNT setting.\n // This approach uses \"legitimate interest\" under GDPR Article 6(1)(f) for basic\n // aggregate analytics. No cross-site tracking, no advertising, no user profiles.\n const hasTrackedInstall = useRef(false);\n useEffect(() => {\n if (!hasTrackedInstall.current) {\n hasTrackedInstall.current = true;\n void trackInstall();\n }\n }, []);\n\n // Track session start when consent is granted\n useEffect(() => {\n if (consent === \"granted\") {\n void trackSessionStart();\n }\n }, [consent]);\n\n const grantConsent = useCallback(() => setTelemetryConsent(\"granted\"), []);\n\n const denyConsent = useCallback(() => setTelemetryConsent(\"denied\"), []);\n\n const track = useCallback(\n (eventName: string, properties?: Record<string, unknown>) => {\n void trackEvent(eventName, properties);\n },\n [],\n );\n\n const clearData = useCallback(() => clearTelemetryData(), []);\n\n return {\n consent,\n isEnabled: consent === \"granted\",\n showConsentPrompt: consent === \"pending\",\n grantConsent,\n denyConsent,\n track,\n clearData,\n };\n}\n"],"mappings":";;;AA4DA,SAAgB,IAAmC;CACjD,IAAM,IAAU,EACd,GACA,SACM,UACP,EAWK,IAAoB,EAAO,GAAM;AASvC,CARA,QAAgB;AACd,EAAK,EAAkB,YACrB,EAAkB,UAAU,IACvB,GAAc;IAEpB,EAAE,CAAC,EAGN,QAAgB;AACd,EAAI,MAAY,aACT,GAAmB;IAEzB,CAAC,EAAQ,CAAC;CAEb,IAAM,IAAe,QAAkB,EAAoB,UAAU,EAAE,EAAE,CAAC,EAEpE,IAAc,QAAkB,EAAoB,SAAS,EAAE,EAAE,CAAC,EAElE,IAAQ,GACX,GAAmB,MAAyC;AACtD,IAAW,GAAW,EAAW;IAExC,EAAE,CACH,EAEK,IAAY,QAAkB,GAAoB,EAAE,EAAE,CAAC;AAE7D,QAAO;EACL;EACA,WAAW,MAAY;EACvB,mBAAmB,MAAY;EAC/B;EACA;EACA;EACA;EACD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../services/telemetry.cjs`),t=require(`./query/use-settings.cjs`);var n=()=>{let{data:n}=t.useSettings(),r={current_url:window.location.href,user_email:n?.email||n?.git_user_email||null},i=(t,n={})=>{e.trackEvent(t,{...n,...r})};return{trackLoginButtonClick:({provider:e})=>{i(`login_button_clicked`,{provider:e})},trackConversationCreated:({conversationId:e,taskId:t,hasRepository:n,gitProvider:r,hasWorkspace:a,workspaceMode:o,hasInitialQuery:s,agentType:c,hasParentConversation:l,entryPoint:u})=>{i(`conversation_created`,{conversation_id:e,task_id:t,is_start_task:e.startsWith(`task-`),has_repository:n,git_provider:r,has_workspace:a,workspace_mode:o,has_initial_query:s,agent_type:c,has_parent_conversation:l,entry_point:u})},trackPushButtonClick:()=>{i(`push_button_clicked`)},trackPullButtonClick:()=>{i(`pull_button_clicked`)},trackCreatePrButtonClick:()=>{i(`create_pr_button_clicked`)},trackUserSignupCompleted:()=>{i(`user_signup_completed`,{signup_timestamp:new Date().toISOString()})},trackPrebuiltAutomationEnabled:({automationId:e,automationName:t,automationCategory:n})=>{i(`prebuilt_automation_enabled`,{automation_id:e,automation_name:t,automation_category:n})},trackInitialQuerySubmitted:({entryPoint:e,queryCharacterLength:t,replayJsonSize:n})=>{i(`initial_query_submitted`,{entry_point:e,query_character_length:t,replay_json_size:n})},trackUserMessageSent:({sessionMessageCount:e,currentMessageLength:t})=>{i(`user_message_sent`,{session_message_count:e,current_message_length:t})},trackDownloadVsCodeButtonClicked:()=>{i(`download_via_vscode_button_clicked`)},trackSettingsSaved:({llmModel:e,llmApiKeySet:t,searchApiKeySet:n,remoteRuntimeResourceFactor:r})=>{i(`settings_saved`,{LLM_MODEL:e,LLM_API_KEY_SET:t,SEARCH_API_KEY_SET:n,REMOTE_RUNTIME_RESOURCE_FACTOR:r})},trackMcpConfigUpdated:({sseServersCount:e,stdioServersCount:t})=>{i(`mcp_config_updated`,{has_mcp_config:!0,sse_servers_count:e,stdio_servers_count:t})},trackDownloadTrajectoryButtonClicked:()=>{i(`download_trajectory_button_clicked`)},trackConversationExported:e=>{i(`conversation_exported`,{format:e})},trackAutomationCreated:({backendKind:e})=>{i(`automation_created`,{backend_kind:e})},trackAutomationExecuted:({backendKind:e})=>{i(`automation_executed`,{backend_kind:e})},trackAutomationDeleted:({backendKind:e})=>{i(`automation_deleted`,{backend_kind:e})},trackAutomationDeactivated:({backendKind:e})=>{i(`automation_deactivated`,{backend_kind:e})},trackAutomationEdited:({backendKind:e})=>{i(`automation_edited`,{backend_kind:e})},trackAutomationExported:({backendKind:e})=>{i(`automation_exported`,{backend_kind:e})},trackAutomationImported:({backendKind:e})=>{i(`automation_imported`,{backend_kind:e})},trackBackendAdded:({backendKind:e,connectionMethod:t,isOpenhandsCloud:n,isCustomHost:r,hasApiKey:a,source:o})=>{i(`backend_added`,{backend_kind:e,connection_method:t,is_openhands_cloud:n,is_custom_host:r,has_api_key:a,source:o})},trackOnboardingStarted:()=>{i(`onboarding_started`)},trackOnboardingStepViewed:({step:e,stepIndex:t,totalSteps:n,agent:r})=>{i(`onboarding_step_viewed`,{step:e,step_index:t,total_steps:n,agent:r})},trackOnboardingCompleted:({agent:e})=>{i(`onboarding_completed`,{agent:e})},trackOnboardingSkipped:({step:e,stepIndex:t,totalSteps:n,agent:r})=>{i(`onboarding_skipped`,{step:e,step_index:t,total_steps:n,agent:r})}}};exports.useTracking=n;
|
|
2
2
|
//# sourceMappingURL=use-tracking.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-tracking.cjs","names":[],"sources":["../../src/hooks/use-tracking.ts"],"sourcesContent":["import { usePostHog } from \"posthog-js/react\";\nimport { useSettings } from \"./query/use-settings\";\nimport { Provider } from \"#/types/settings\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { WorkspaceMode } from \"#/api/conversation-metadata-store\";\nimport type { CloudConnectionSource } from \"#/services/cloud-funnel-analytics\";\n\n/**\n * Hook that provides tracking functions with automatic data collection\n * from available hooks (settings, etc.)\n *\n * All events require explicit user consent (user_consents_to_analytics === true).\n * Events are silently dropped when:\n * - posthog is not initialized (VITE_POSTHOG_CLIENT_KEY not set)\n * - user_consents_to_analytics is false or null (consent not yet collected)\n */\nexport const useTracking = () => {\n const posthog = usePostHog();\n const { data: settings } = useSettings();\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n user_email: settings?.email || settings?.git_user_email || null,\n };\n\n /**\n * Capture an event only when PostHog is available and the user has\n * explicitly consented. null and false are both treated as \"not consented\".\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n if (!posthog || settings?.user_consents_to_analytics !== true) return;\n posthog.capture(event, { ...properties, ...commonProperties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_created\", {\n conversation_id: conversationId,\n task_id: taskId,\n is_start_task: conversationId.startsWith(\"task-\"),\n has_repository: hasRepository,\n git_provider: gitProvider,\n has_workspace: hasWorkspace,\n workspace_mode: workspaceMode,\n has_initial_query: hasInitialQuery,\n agent_type: agentType,\n has_parent_conversation: hasParentConversation,\n entry_point: entryPoint,\n });\n };\n\n const trackPushButtonClick = () => {\n track(\"push_button_clicked\");\n };\n\n const trackPullButtonClick = () => {\n track(\"pull_button_clicked\");\n };\n\n const trackCreatePrButtonClick = () => {\n track(\"create_pr_button_clicked\");\n };\n\n const trackUserSignupCompleted = () => {\n track(\"user_signup_completed\", {\n signup_timestamp: new Date().toISOString(),\n });\n };\n\n const trackPrebuiltAutomationEnabled = ({\n automationId,\n automationName,\n automationCategory,\n }: {\n automationId?: string;\n automationName: string;\n automationCategory?: string;\n }) => {\n track(\"prebuilt_automation_enabled\", {\n automation_id: automationId,\n automation_name: automationName,\n automation_category: automationCategory,\n });\n };\n\n const trackInitialQuerySubmitted = ({\n entryPoint,\n queryCharacterLength,\n replayJsonSize,\n }: {\n entryPoint: string;\n queryCharacterLength: number;\n replayJsonSize?: number;\n }) => {\n track(\"initial_query_submitted\", {\n entry_point: entryPoint,\n query_character_length: queryCharacterLength,\n replay_json_size: replayJsonSize,\n });\n };\n\n const trackUserMessageSent = ({\n sessionMessageCount,\n currentMessageLength,\n }: {\n sessionMessageCount: number;\n currentMessageLength: number;\n }) => {\n track(\"user_message_sent\", {\n session_message_count: sessionMessageCount,\n current_message_length: currentMessageLength,\n });\n };\n\n const trackDownloadVsCodeButtonClicked = () => {\n track(\"download_via_vscode_button_clicked\");\n };\n\n const trackSettingsSaved = ({\n llmModel,\n llmApiKeySet,\n searchApiKeySet,\n remoteRuntimeResourceFactor,\n }: {\n llmModel: unknown;\n llmApiKeySet: \"SET\" | \"UNSET\";\n searchApiKeySet: \"SET\" | \"UNSET\";\n remoteRuntimeResourceFactor?: unknown;\n }) => {\n track(\"settings_saved\", {\n LLM_MODEL: llmModel,\n LLM_API_KEY_SET: llmApiKeySet,\n SEARCH_API_KEY_SET: searchApiKeySet,\n REMOTE_RUNTIME_RESOURCE_FACTOR: remoteRuntimeResourceFactor,\n });\n };\n\n const trackMcpConfigUpdated = ({\n sseServersCount,\n stdioServersCount,\n }: {\n sseServersCount: number;\n stdioServersCount: number;\n }) => {\n track(\"mcp_config_updated\", {\n has_mcp_config: true,\n sse_servers_count: sseServersCount,\n stdio_servers_count: stdioServersCount,\n });\n };\n\n const trackDownloadTrajectoryButtonClicked = () => {\n track(\"download_trajectory_button_clicked\");\n };\n\n const trackConversationExported = (format: \"markdown\" | \"html\") => {\n track(\"conversation_exported\", { format });\n };\n\n const trackAutomationCreated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeactivated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deactivated\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n isOpenhandsCloud,\n isCustomHost,\n hasApiKey,\n source,\n }: {\n backendKind: BackendKind;\n connectionMethod: \"manual\" | \"cloud_login\";\n isOpenhandsCloud: boolean;\n isCustomHost: boolean;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n }) => {\n track(\"backend_added\", {\n backend_kind: backendKind,\n connection_method: connectionMethod,\n is_openhands_cloud: isOpenhandsCloud,\n is_custom_host: isCustomHost,\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreated,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDeactivated,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-tracking.cjs","names":[],"sources":["../../src/hooks/use-tracking.ts"],"sourcesContent":["import { useSettings } from \"./query/use-settings\";\nimport { Provider } from \"#/types/settings\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { WorkspaceMode } from \"#/api/conversation-metadata-store\";\nimport type { CloudConnectionSource } from \"#/services/cloud-funnel-analytics\";\nimport { trackEvent } from \"#/services/telemetry\";\n\n/**\n * Hook that provides tracking functions with automatic data collection\n * from available hooks (settings, etc.)\n *\n * All events require explicit user consent. The shared PostHog client enforces\n * the canonical consent configured by telemetry.ts; this hook must not gate on\n * backend settings because they can be stale while a backend changes.\n */\nexport const useTracking = () => {\n const { data: settings } = useSettings();\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n user_email: settings?.email || settings?.git_user_email || null,\n };\n\n /**\n * PostHog enforces the canonical consent state configured by telemetry.ts.\n * Backend settings are not a capture gate because they can be stale while a\n * backend is being added or switched.\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n void trackEvent(event, { ...properties, ...commonProperties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_created\", {\n conversation_id: conversationId,\n task_id: taskId,\n is_start_task: conversationId.startsWith(\"task-\"),\n has_repository: hasRepository,\n git_provider: gitProvider,\n has_workspace: hasWorkspace,\n workspace_mode: workspaceMode,\n has_initial_query: hasInitialQuery,\n agent_type: agentType,\n has_parent_conversation: hasParentConversation,\n entry_point: entryPoint,\n });\n };\n\n const trackPushButtonClick = () => {\n track(\"push_button_clicked\");\n };\n\n const trackPullButtonClick = () => {\n track(\"pull_button_clicked\");\n };\n\n const trackCreatePrButtonClick = () => {\n track(\"create_pr_button_clicked\");\n };\n\n const trackUserSignupCompleted = () => {\n track(\"user_signup_completed\", {\n signup_timestamp: new Date().toISOString(),\n });\n };\n\n const trackPrebuiltAutomationEnabled = ({\n automationId,\n automationName,\n automationCategory,\n }: {\n automationId?: string;\n automationName: string;\n automationCategory?: string;\n }) => {\n track(\"prebuilt_automation_enabled\", {\n automation_id: automationId,\n automation_name: automationName,\n automation_category: automationCategory,\n });\n };\n\n const trackInitialQuerySubmitted = ({\n entryPoint,\n queryCharacterLength,\n replayJsonSize,\n }: {\n entryPoint: string;\n queryCharacterLength: number;\n replayJsonSize?: number;\n }) => {\n track(\"initial_query_submitted\", {\n entry_point: entryPoint,\n query_character_length: queryCharacterLength,\n replay_json_size: replayJsonSize,\n });\n };\n\n const trackUserMessageSent = ({\n sessionMessageCount,\n currentMessageLength,\n }: {\n sessionMessageCount: number;\n currentMessageLength: number;\n }) => {\n track(\"user_message_sent\", {\n session_message_count: sessionMessageCount,\n current_message_length: currentMessageLength,\n });\n };\n\n const trackDownloadVsCodeButtonClicked = () => {\n track(\"download_via_vscode_button_clicked\");\n };\n\n const trackSettingsSaved = ({\n llmModel,\n llmApiKeySet,\n searchApiKeySet,\n remoteRuntimeResourceFactor,\n }: {\n llmModel: unknown;\n llmApiKeySet: \"SET\" | \"UNSET\";\n searchApiKeySet: \"SET\" | \"UNSET\";\n remoteRuntimeResourceFactor?: unknown;\n }) => {\n track(\"settings_saved\", {\n LLM_MODEL: llmModel,\n LLM_API_KEY_SET: llmApiKeySet,\n SEARCH_API_KEY_SET: searchApiKeySet,\n REMOTE_RUNTIME_RESOURCE_FACTOR: remoteRuntimeResourceFactor,\n });\n };\n\n const trackMcpConfigUpdated = ({\n sseServersCount,\n stdioServersCount,\n }: {\n sseServersCount: number;\n stdioServersCount: number;\n }) => {\n track(\"mcp_config_updated\", {\n has_mcp_config: true,\n sse_servers_count: sseServersCount,\n stdio_servers_count: stdioServersCount,\n });\n };\n\n const trackDownloadTrajectoryButtonClicked = () => {\n track(\"download_trajectory_button_clicked\");\n };\n\n const trackConversationExported = (format: \"markdown\" | \"html\") => {\n track(\"conversation_exported\", { format });\n };\n\n const trackAutomationCreated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeactivated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deactivated\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n isOpenhandsCloud,\n isCustomHost,\n hasApiKey,\n source,\n }: {\n backendKind: BackendKind;\n connectionMethod: \"manual\" | \"cloud_login\";\n isOpenhandsCloud: boolean;\n isCustomHost: boolean;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n }) => {\n track(\"backend_added\", {\n backend_kind: backendKind,\n connection_method: connectionMethod,\n is_openhands_cloud: isOpenhandsCloud,\n is_custom_host: isCustomHost,\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreated,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDeactivated,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"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"}
|
|
@@ -6,10 +6,9 @@ import type { CloudConnectionSource } from "#/services/cloud-funnel-analytics";
|
|
|
6
6
|
* Hook that provides tracking functions with automatic data collection
|
|
7
7
|
* from available hooks (settings, etc.)
|
|
8
8
|
*
|
|
9
|
-
* All events require explicit user consent
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* - user_consents_to_analytics is false or null (consent not yet collected)
|
|
9
|
+
* All events require explicit user consent. The shared PostHog client enforces
|
|
10
|
+
* the canonical consent configured by telemetry.ts; this hook must not gate on
|
|
11
|
+
* backend settings because they can be stale while a backend changes.
|
|
13
12
|
*/
|
|
14
13
|
export declare const useTracking: () => {
|
|
15
14
|
trackLoginButtonClick: ({ provider }: {
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { trackEvent as e } from "../services/telemetry.js";
|
|
2
2
|
import { useSettings as t } from "./query/use-settings.js";
|
|
3
3
|
//#region src/hooks/use-tracking.ts
|
|
4
4
|
var n = () => {
|
|
5
|
-
let
|
|
5
|
+
let { data: n } = t(), r = {
|
|
6
6
|
current_url: window.location.href,
|
|
7
|
-
user_email:
|
|
8
|
-
},
|
|
9
|
-
|
|
10
|
-
...
|
|
11
|
-
...
|
|
7
|
+
user_email: n?.email || n?.git_user_email || null
|
|
8
|
+
}, i = (t, n = {}) => {
|
|
9
|
+
e(t, {
|
|
10
|
+
...n,
|
|
11
|
+
...r
|
|
12
12
|
});
|
|
13
13
|
};
|
|
14
14
|
return {
|
|
15
15
|
trackLoginButtonClick: ({ provider: e }) => {
|
|
16
|
-
|
|
16
|
+
i("login_button_clicked", { provider: e });
|
|
17
17
|
},
|
|
18
|
-
trackConversationCreated: ({ conversationId: e, taskId: t, hasRepository: n, gitProvider: r, hasWorkspace:
|
|
19
|
-
|
|
18
|
+
trackConversationCreated: ({ conversationId: e, taskId: t, hasRepository: n, gitProvider: r, hasWorkspace: a, workspaceMode: o, hasInitialQuery: s, agentType: c, hasParentConversation: l, entryPoint: u }) => {
|
|
19
|
+
i("conversation_created", {
|
|
20
20
|
conversation_id: e,
|
|
21
21
|
task_id: t,
|
|
22
22
|
is_start_task: e.startsWith("task-"),
|
|
23
23
|
has_repository: n,
|
|
24
24
|
git_provider: r,
|
|
25
|
-
has_workspace:
|
|
25
|
+
has_workspace: a,
|
|
26
26
|
workspace_mode: o,
|
|
27
27
|
has_initial_query: s,
|
|
28
28
|
agent_type: c,
|
|
@@ -31,42 +31,42 @@ var n = () => {
|
|
|
31
31
|
});
|
|
32
32
|
},
|
|
33
33
|
trackPushButtonClick: () => {
|
|
34
|
-
|
|
34
|
+
i("push_button_clicked");
|
|
35
35
|
},
|
|
36
36
|
trackPullButtonClick: () => {
|
|
37
|
-
|
|
37
|
+
i("pull_button_clicked");
|
|
38
38
|
},
|
|
39
39
|
trackCreatePrButtonClick: () => {
|
|
40
|
-
|
|
40
|
+
i("create_pr_button_clicked");
|
|
41
41
|
},
|
|
42
42
|
trackUserSignupCompleted: () => {
|
|
43
|
-
|
|
43
|
+
i("user_signup_completed", { signup_timestamp: (/* @__PURE__ */ new Date()).toISOString() });
|
|
44
44
|
},
|
|
45
45
|
trackPrebuiltAutomationEnabled: ({ automationId: e, automationName: t, automationCategory: n }) => {
|
|
46
|
-
|
|
46
|
+
i("prebuilt_automation_enabled", {
|
|
47
47
|
automation_id: e,
|
|
48
48
|
automation_name: t,
|
|
49
49
|
automation_category: n
|
|
50
50
|
});
|
|
51
51
|
},
|
|
52
52
|
trackInitialQuerySubmitted: ({ entryPoint: e, queryCharacterLength: t, replayJsonSize: n }) => {
|
|
53
|
-
|
|
53
|
+
i("initial_query_submitted", {
|
|
54
54
|
entry_point: e,
|
|
55
55
|
query_character_length: t,
|
|
56
56
|
replay_json_size: n
|
|
57
57
|
});
|
|
58
58
|
},
|
|
59
59
|
trackUserMessageSent: ({ sessionMessageCount: e, currentMessageLength: t }) => {
|
|
60
|
-
|
|
60
|
+
i("user_message_sent", {
|
|
61
61
|
session_message_count: e,
|
|
62
62
|
current_message_length: t
|
|
63
63
|
});
|
|
64
64
|
},
|
|
65
65
|
trackDownloadVsCodeButtonClicked: () => {
|
|
66
|
-
|
|
66
|
+
i("download_via_vscode_button_clicked");
|
|
67
67
|
},
|
|
68
68
|
trackSettingsSaved: ({ llmModel: e, llmApiKeySet: t, searchApiKeySet: n, remoteRuntimeResourceFactor: r }) => {
|
|
69
|
-
|
|
69
|
+
i("settings_saved", {
|
|
70
70
|
LLM_MODEL: e,
|
|
71
71
|
LLM_API_KEY_SET: t,
|
|
72
72
|
SEARCH_API_KEY_SET: n,
|
|
@@ -74,54 +74,54 @@ var n = () => {
|
|
|
74
74
|
});
|
|
75
75
|
},
|
|
76
76
|
trackMcpConfigUpdated: ({ sseServersCount: e, stdioServersCount: t }) => {
|
|
77
|
-
|
|
77
|
+
i("mcp_config_updated", {
|
|
78
78
|
has_mcp_config: !0,
|
|
79
79
|
sse_servers_count: e,
|
|
80
80
|
stdio_servers_count: t
|
|
81
81
|
});
|
|
82
82
|
},
|
|
83
83
|
trackDownloadTrajectoryButtonClicked: () => {
|
|
84
|
-
|
|
84
|
+
i("download_trajectory_button_clicked");
|
|
85
85
|
},
|
|
86
86
|
trackConversationExported: (e) => {
|
|
87
|
-
|
|
87
|
+
i("conversation_exported", { format: e });
|
|
88
88
|
},
|
|
89
89
|
trackAutomationCreated: ({ backendKind: e }) => {
|
|
90
|
-
|
|
90
|
+
i("automation_created", { backend_kind: e });
|
|
91
91
|
},
|
|
92
92
|
trackAutomationExecuted: ({ backendKind: e }) => {
|
|
93
|
-
|
|
93
|
+
i("automation_executed", { backend_kind: e });
|
|
94
94
|
},
|
|
95
95
|
trackAutomationDeleted: ({ backendKind: e }) => {
|
|
96
|
-
|
|
96
|
+
i("automation_deleted", { backend_kind: e });
|
|
97
97
|
},
|
|
98
98
|
trackAutomationDeactivated: ({ backendKind: e }) => {
|
|
99
|
-
|
|
99
|
+
i("automation_deactivated", { backend_kind: e });
|
|
100
100
|
},
|
|
101
101
|
trackAutomationEdited: ({ backendKind: e }) => {
|
|
102
|
-
|
|
102
|
+
i("automation_edited", { backend_kind: e });
|
|
103
103
|
},
|
|
104
104
|
trackAutomationExported: ({ backendKind: e }) => {
|
|
105
|
-
|
|
105
|
+
i("automation_exported", { backend_kind: e });
|
|
106
106
|
},
|
|
107
107
|
trackAutomationImported: ({ backendKind: e }) => {
|
|
108
|
-
|
|
108
|
+
i("automation_imported", { backend_kind: e });
|
|
109
109
|
},
|
|
110
|
-
trackBackendAdded: ({ backendKind: e, connectionMethod: t, isOpenhandsCloud: n, isCustomHost: r, hasApiKey:
|
|
111
|
-
|
|
110
|
+
trackBackendAdded: ({ backendKind: e, connectionMethod: t, isOpenhandsCloud: n, isCustomHost: r, hasApiKey: a, source: o }) => {
|
|
111
|
+
i("backend_added", {
|
|
112
112
|
backend_kind: e,
|
|
113
113
|
connection_method: t,
|
|
114
114
|
is_openhands_cloud: n,
|
|
115
115
|
is_custom_host: r,
|
|
116
|
-
has_api_key:
|
|
116
|
+
has_api_key: a,
|
|
117
117
|
source: o
|
|
118
118
|
});
|
|
119
119
|
},
|
|
120
120
|
trackOnboardingStarted: () => {
|
|
121
|
-
|
|
121
|
+
i("onboarding_started");
|
|
122
122
|
},
|
|
123
123
|
trackOnboardingStepViewed: ({ step: e, stepIndex: t, totalSteps: n, agent: r }) => {
|
|
124
|
-
|
|
124
|
+
i("onboarding_step_viewed", {
|
|
125
125
|
step: e,
|
|
126
126
|
step_index: t,
|
|
127
127
|
total_steps: n,
|
|
@@ -129,10 +129,10 @@ var n = () => {
|
|
|
129
129
|
});
|
|
130
130
|
},
|
|
131
131
|
trackOnboardingCompleted: ({ agent: e }) => {
|
|
132
|
-
|
|
132
|
+
i("onboarding_completed", { agent: e });
|
|
133
133
|
},
|
|
134
134
|
trackOnboardingSkipped: ({ step: e, stepIndex: t, totalSteps: n, agent: r }) => {
|
|
135
|
-
|
|
135
|
+
i("onboarding_skipped", {
|
|
136
136
|
step: e,
|
|
137
137
|
step_index: t,
|
|
138
138
|
total_steps: n,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-tracking.js","names":[],"sources":["../../src/hooks/use-tracking.ts"],"sourcesContent":["import { usePostHog } from \"posthog-js/react\";\nimport { useSettings } from \"./query/use-settings\";\nimport { Provider } from \"#/types/settings\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { WorkspaceMode } from \"#/api/conversation-metadata-store\";\nimport type { CloudConnectionSource } from \"#/services/cloud-funnel-analytics\";\n\n/**\n * Hook that provides tracking functions with automatic data collection\n * from available hooks (settings, etc.)\n *\n * All events require explicit user consent (user_consents_to_analytics === true).\n * Events are silently dropped when:\n * - posthog is not initialized (VITE_POSTHOG_CLIENT_KEY not set)\n * - user_consents_to_analytics is false or null (consent not yet collected)\n */\nexport const useTracking = () => {\n const posthog = usePostHog();\n const { data: settings } = useSettings();\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n user_email: settings?.email || settings?.git_user_email || null,\n };\n\n /**\n * Capture an event only when PostHog is available and the user has\n * explicitly consented. null and false are both treated as \"not consented\".\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n if (!posthog || settings?.user_consents_to_analytics !== true) return;\n posthog.capture(event, { ...properties, ...commonProperties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_created\", {\n conversation_id: conversationId,\n task_id: taskId,\n is_start_task: conversationId.startsWith(\"task-\"),\n has_repository: hasRepository,\n git_provider: gitProvider,\n has_workspace: hasWorkspace,\n workspace_mode: workspaceMode,\n has_initial_query: hasInitialQuery,\n agent_type: agentType,\n has_parent_conversation: hasParentConversation,\n entry_point: entryPoint,\n });\n };\n\n const trackPushButtonClick = () => {\n track(\"push_button_clicked\");\n };\n\n const trackPullButtonClick = () => {\n track(\"pull_button_clicked\");\n };\n\n const trackCreatePrButtonClick = () => {\n track(\"create_pr_button_clicked\");\n };\n\n const trackUserSignupCompleted = () => {\n track(\"user_signup_completed\", {\n signup_timestamp: new Date().toISOString(),\n });\n };\n\n const trackPrebuiltAutomationEnabled = ({\n automationId,\n automationName,\n automationCategory,\n }: {\n automationId?: string;\n automationName: string;\n automationCategory?: string;\n }) => {\n track(\"prebuilt_automation_enabled\", {\n automation_id: automationId,\n automation_name: automationName,\n automation_category: automationCategory,\n });\n };\n\n const trackInitialQuerySubmitted = ({\n entryPoint,\n queryCharacterLength,\n replayJsonSize,\n }: {\n entryPoint: string;\n queryCharacterLength: number;\n replayJsonSize?: number;\n }) => {\n track(\"initial_query_submitted\", {\n entry_point: entryPoint,\n query_character_length: queryCharacterLength,\n replay_json_size: replayJsonSize,\n });\n };\n\n const trackUserMessageSent = ({\n sessionMessageCount,\n currentMessageLength,\n }: {\n sessionMessageCount: number;\n currentMessageLength: number;\n }) => {\n track(\"user_message_sent\", {\n session_message_count: sessionMessageCount,\n current_message_length: currentMessageLength,\n });\n };\n\n const trackDownloadVsCodeButtonClicked = () => {\n track(\"download_via_vscode_button_clicked\");\n };\n\n const trackSettingsSaved = ({\n llmModel,\n llmApiKeySet,\n searchApiKeySet,\n remoteRuntimeResourceFactor,\n }: {\n llmModel: unknown;\n llmApiKeySet: \"SET\" | \"UNSET\";\n searchApiKeySet: \"SET\" | \"UNSET\";\n remoteRuntimeResourceFactor?: unknown;\n }) => {\n track(\"settings_saved\", {\n LLM_MODEL: llmModel,\n LLM_API_KEY_SET: llmApiKeySet,\n SEARCH_API_KEY_SET: searchApiKeySet,\n REMOTE_RUNTIME_RESOURCE_FACTOR: remoteRuntimeResourceFactor,\n });\n };\n\n const trackMcpConfigUpdated = ({\n sseServersCount,\n stdioServersCount,\n }: {\n sseServersCount: number;\n stdioServersCount: number;\n }) => {\n track(\"mcp_config_updated\", {\n has_mcp_config: true,\n sse_servers_count: sseServersCount,\n stdio_servers_count: stdioServersCount,\n });\n };\n\n const trackDownloadTrajectoryButtonClicked = () => {\n track(\"download_trajectory_button_clicked\");\n };\n\n const trackConversationExported = (format: \"markdown\" | \"html\") => {\n track(\"conversation_exported\", { format });\n };\n\n const trackAutomationCreated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeactivated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deactivated\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n isOpenhandsCloud,\n isCustomHost,\n hasApiKey,\n source,\n }: {\n backendKind: BackendKind;\n connectionMethod: \"manual\" | \"cloud_login\";\n isOpenhandsCloud: boolean;\n isCustomHost: boolean;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n }) => {\n track(\"backend_added\", {\n backend_kind: backendKind,\n connection_method: connectionMethod,\n is_openhands_cloud: isOpenhandsCloud,\n is_custom_host: isCustomHost,\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreated,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDeactivated,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":";;;AAgBA,IAAa,UAAoB;CAC/B,IAAM,IAAU,GAAY,EACtB,EAAE,MAAM,MAAa,GAAa,EAGlC,IAAmB;EACvB,aAAa,OAAO,SAAS;EAC7B,YAAY,GAAU,SAAS,GAAU,kBAAkB;EAC5D,EAMK,KAAS,GAAe,IAAsC,EAAE,KAAK;AACrE,GAAC,KAAW,GAAU,+BAA+B,MACzD,EAAQ,QAAQ,GAAO;GAAE,GAAG;GAAY,GAAG;GAAkB,CAAC;;AAwRhE,QAAO;EACL,wBAtR6B,EAAE,kBAAuC;AACtE,KAAM,wBAAwB,EAAE,aAAU,CAAC;;EAsR3C,2BAnRgC,EAChC,mBACA,WACA,kBACA,gBACA,iBACA,kBACA,oBACA,cACA,0BACA,oBAYI;AACJ,KAAM,wBAAwB;IAC5B,iBAAiB;IACjB,SAAS;IACT,eAAe,EAAe,WAAW,QAAQ;IACjD,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,mBAAmB;IACnB,YAAY;IACZ,yBAAyB;IACzB,aAAa;IACd,CAAC;;EAiPF,4BA9OiC;AACjC,KAAM,sBAAsB;;EA8O5B,4BA3OiC;AACjC,KAAM,sBAAsB;;EA2O5B,gCAxOqC;AACrC,KAAM,2BAA2B;;EAwOjC,gCArOqC;AACrC,KAAM,yBAAyB,EAC7B,mCAAkB,IAAI,MAAM,EAAC,aAAa,EAC3C,CAAC;;EAmOF,iCAhOsC,EACtC,iBACA,mBACA,4BAKI;AACJ,KAAM,+BAA+B;IACnC,eAAe;IACf,iBAAiB;IACjB,qBAAqB;IACtB,CAAC;;EAoNF,6BAjNkC,EAClC,eACA,yBACA,wBAKI;AACJ,KAAM,2BAA2B;IAC/B,aAAa;IACb,wBAAwB;IACxB,kBAAkB;IACnB,CAAC;;EAqMF,uBAlM4B,EAC5B,wBACA,8BAII;AACJ,KAAM,qBAAqB;IACzB,uBAAuB;IACvB,wBAAwB;IACzB,CAAC;;EAyLF,wCAtL6C;AAC7C,KAAM,qCAAqC;;EAsL3C,qBAnL0B,EAC1B,aACA,iBACA,oBACA,qCAMI;AACJ,KAAM,kBAAkB;IACtB,WAAW;IACX,iBAAiB;IACjB,oBAAoB;IACpB,gCAAgC;IACjC,CAAC;;EAoKF,wBAjK6B,EAC7B,oBACA,2BAII;AACJ,KAAM,sBAAsB;IAC1B,gBAAgB;IAChB,mBAAmB;IACnB,qBAAqB;IACtB,CAAC;;EAuJF,4CApJiD;AACjD,KAAM,qCAAqC;;EAoJ3C,4BAjJiC,MAAgC;AACjE,KAAM,yBAAyB,EAAE,WAAQ,CAAC;;EAiJ1C,yBA9I8B,EAC9B,qBAGI;AACJ,KAAM,sBAAsB,EAAE,cAAc,GAAa,CAAC;;EA0I1D,0BAvI+B,EAC/B,qBAGI;AACJ,KAAM,uBAAuB,EAAE,cAAc,GAAa,CAAC;;EAmI3D,yBAhI8B,EAC9B,qBAGI;AACJ,KAAM,sBAAsB,EAAE,cAAc,GAAa,CAAC;;EA4H1D,6BAzHkC,EAClC,qBAGI;AACJ,KAAM,0BAA0B,EAAE,cAAc,GAAa,CAAC;;EAqH9D,wBAlH6B,EAC7B,qBAGI;AACJ,KAAM,qBAAqB,EAAE,cAAc,GAAa,CAAC;;EA8GzD,0BA3G+B,EAC/B,qBAGI;AACJ,KAAM,uBAAuB,EAAE,cAAc,GAAa,CAAC;;EAuG3D,0BApG+B,EAC/B,qBAGI;AACJ,KAAM,uBAAuB,EAAE,cAAc,GAAa,CAAC;;EAgG3D,oBA7FyB,EACzB,gBACA,qBACA,qBACA,iBACA,cACA,gBAQI;AACJ,KAAM,iBAAiB;IACrB,cAAc;IACd,mBAAmB;IACnB,oBAAoB;IACpB,gBAAgB;IAChB,aAAa;IACb;IACD,CAAC;;EAwEF,8BArEmC;AACnC,KAAM,qBAAqB;;EAqE3B,4BAlEiC,EACjC,SACA,cACA,eACA,eAMI;AACJ,KAAM,0BAA0B;IAC9B;IACA,YAAY;IACZ,aAAa;IACb;IACD,CAAC;;EAmDF,2BAhDgC,EAAE,eAA+B;AACjE,KAAM,wBAAwB,EAAE,UAAO,CAAC;;EAgDxC,yBA7C8B,EAC9B,SACA,cACA,eACA,eAMI;AACJ,KAAM,sBAAsB;IAC1B;IACA,YAAY;IACZ,aAAa;IACb;IACD,CAAC;;EA8BH"}
|
|
1
|
+
{"version":3,"file":"use-tracking.js","names":[],"sources":["../../src/hooks/use-tracking.ts"],"sourcesContent":["import { useSettings } from \"./query/use-settings\";\nimport { Provider } from \"#/types/settings\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { WorkspaceMode } from \"#/api/conversation-metadata-store\";\nimport type { CloudConnectionSource } from \"#/services/cloud-funnel-analytics\";\nimport { trackEvent } from \"#/services/telemetry\";\n\n/**\n * Hook that provides tracking functions with automatic data collection\n * from available hooks (settings, etc.)\n *\n * All events require explicit user consent. The shared PostHog client enforces\n * the canonical consent configured by telemetry.ts; this hook must not gate on\n * backend settings because they can be stale while a backend changes.\n */\nexport const useTracking = () => {\n const { data: settings } = useSettings();\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n user_email: settings?.email || settings?.git_user_email || null,\n };\n\n /**\n * PostHog enforces the canonical consent state configured by telemetry.ts.\n * Backend settings are not a capture gate because they can be stale while a\n * backend is being added or switched.\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n void trackEvent(event, { ...properties, ...commonProperties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_created\", {\n conversation_id: conversationId,\n task_id: taskId,\n is_start_task: conversationId.startsWith(\"task-\"),\n has_repository: hasRepository,\n git_provider: gitProvider,\n has_workspace: hasWorkspace,\n workspace_mode: workspaceMode,\n has_initial_query: hasInitialQuery,\n agent_type: agentType,\n has_parent_conversation: hasParentConversation,\n entry_point: entryPoint,\n });\n };\n\n const trackPushButtonClick = () => {\n track(\"push_button_clicked\");\n };\n\n const trackPullButtonClick = () => {\n track(\"pull_button_clicked\");\n };\n\n const trackCreatePrButtonClick = () => {\n track(\"create_pr_button_clicked\");\n };\n\n const trackUserSignupCompleted = () => {\n track(\"user_signup_completed\", {\n signup_timestamp: new Date().toISOString(),\n });\n };\n\n const trackPrebuiltAutomationEnabled = ({\n automationId,\n automationName,\n automationCategory,\n }: {\n automationId?: string;\n automationName: string;\n automationCategory?: string;\n }) => {\n track(\"prebuilt_automation_enabled\", {\n automation_id: automationId,\n automation_name: automationName,\n automation_category: automationCategory,\n });\n };\n\n const trackInitialQuerySubmitted = ({\n entryPoint,\n queryCharacterLength,\n replayJsonSize,\n }: {\n entryPoint: string;\n queryCharacterLength: number;\n replayJsonSize?: number;\n }) => {\n track(\"initial_query_submitted\", {\n entry_point: entryPoint,\n query_character_length: queryCharacterLength,\n replay_json_size: replayJsonSize,\n });\n };\n\n const trackUserMessageSent = ({\n sessionMessageCount,\n currentMessageLength,\n }: {\n sessionMessageCount: number;\n currentMessageLength: number;\n }) => {\n track(\"user_message_sent\", {\n session_message_count: sessionMessageCount,\n current_message_length: currentMessageLength,\n });\n };\n\n const trackDownloadVsCodeButtonClicked = () => {\n track(\"download_via_vscode_button_clicked\");\n };\n\n const trackSettingsSaved = ({\n llmModel,\n llmApiKeySet,\n searchApiKeySet,\n remoteRuntimeResourceFactor,\n }: {\n llmModel: unknown;\n llmApiKeySet: \"SET\" | \"UNSET\";\n searchApiKeySet: \"SET\" | \"UNSET\";\n remoteRuntimeResourceFactor?: unknown;\n }) => {\n track(\"settings_saved\", {\n LLM_MODEL: llmModel,\n LLM_API_KEY_SET: llmApiKeySet,\n SEARCH_API_KEY_SET: searchApiKeySet,\n REMOTE_RUNTIME_RESOURCE_FACTOR: remoteRuntimeResourceFactor,\n });\n };\n\n const trackMcpConfigUpdated = ({\n sseServersCount,\n stdioServersCount,\n }: {\n sseServersCount: number;\n stdioServersCount: number;\n }) => {\n track(\"mcp_config_updated\", {\n has_mcp_config: true,\n sse_servers_count: sseServersCount,\n stdio_servers_count: stdioServersCount,\n });\n };\n\n const trackDownloadTrajectoryButtonClicked = () => {\n track(\"download_trajectory_button_clicked\");\n };\n\n const trackConversationExported = (format: \"markdown\" | \"html\") => {\n track(\"conversation_exported\", { format });\n };\n\n const trackAutomationCreated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeactivated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deactivated\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n isOpenhandsCloud,\n isCustomHost,\n hasApiKey,\n source,\n }: {\n backendKind: BackendKind;\n connectionMethod: \"manual\" | \"cloud_login\";\n isOpenhandsCloud: boolean;\n isCustomHost: boolean;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n }) => {\n track(\"backend_added\", {\n backend_kind: backendKind,\n connection_method: connectionMethod,\n is_openhands_cloud: isOpenhandsCloud,\n is_custom_host: isCustomHost,\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreated,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDeactivated,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./_virtual/_rolldown/runtime.cjs`);const e=require(`./components/features/browser/browser-snapshot.cjs`),t=require(`./components/features/browser/empty-browser-message.cjs`),n=require(`./components/features/browser/browser.cjs`),r=require(`./i18n/resources.cjs`),i=require(`./i18n/index.cjs`),a=require(`./query-client-config.cjs`),o=require(`./services/telemetry.cjs`),s=require(`./components/features/chat/chat-interface.cjs`),c=require(`./components/features/conversation/conversation-main/chat-interface-wrapper.cjs`),l=require(`./components/features/conversation/conversation-loading.cjs`),u=require(`./components/features/conversation/metrics-modal/metrics-modal.cjs`),d=require(`./components/features/conversation/conversation-name.cjs`),f=require(`./components/features/conversation/conversation-name-with-status.cjs`),p=require(`./components/features/conversation/conversation-tabs/conversation-tabs.cjs`),m=require(`./components/features/conversation/conversation-main/conversation-main.cjs`),h=require(`./routes/conversation.cjs`),g=require(`./components/features/files/file-item.cjs`),_=require(`./components/features/files/file-list.cjs`),v=require(`./components/features/settings/upgrade-button.cjs`),y=require(`./components/features/settings/banner-message.cjs`),b=require(`./components/features/settings/upgrade-banner.cjs`),x=require(`./components/features/settings/mobile-header.cjs`),S=require(`./components/features/settings/settings-navigation.cjs`),C=require(`./components/features/settings/settings-layout.cjs`),w=require(`./styles/agent-server-ui-style-scope.cjs`),T=require(`./routes/app-settings.cjs`),E=require(`./routes/llm-settings.cjs`),D=require(`./routes/mcp-settings.cjs`),O=require(`./routes/secrets-settings.cjs`),k=require(`./components/features/conversation-panel/conversation-panel.cjs`),A=require(`./components/features/sidebar/sidebar.cjs`),j=require(`./components/features/sidebar/avatar.cjs`),M=require(`./components/features/sidebar/user-avatar.cjs`),N=require(`./components/features/conversation-panel/conversation-panel-wrapper.cjs`),P=require(`./components/features/terminal/terminal.cjs`),F=require(`./components/providers/agent-server-ui-root.cjs`),I=require(`./components/providers/agent-server-ui-providers.cjs`),L=require(`./hooks/use-telemetry.cjs`),R=require(`./components/features/analytics/telemetry-consent-banner.cjs`);require(`./lib/index.cjs`),exports.AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES=w.AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES,exports.AGENT_SERVER_UI_DEFAULT_THEME=w.AGENT_SERVER_UI_DEFAULT_THEME,exports.AGENT_SERVER_UI_SCOPE_ATTRIBUTE=w.AGENT_SERVER_UI_SCOPE_ATTRIBUTE,exports.AGENT_SERVER_UI_SCOPE_SELECTOR=w.AGENT_SERVER_UI_SCOPE_SELECTOR,exports.AgentServerUIProviders=I.AgentServerUIProviders,exports.AgentServerUIRoot=F.AgentServerUIRoot,exports.AppSettings=T.default,exports.AvailableLanguages=i.AvailableLanguages,exports.Avatar=j.Avatar,exports.BannerMessage=y.BannerMessage,exports.BrowserPanel=n.BrowserPanel,exports.BrowserSnapshot=e.BrowserSnapshot,exports.ChatInterfaceWrapper=c.ChatInterfaceWrapper,exports.ChatPanel=s.ChatInterface,exports.ConversationLoading=l.ConversationLoading,exports.ConversationMain=m.ConversationMain,exports.ConversationName=d.ConversationName,exports.ConversationNameWithStatus=f.ConversationNameWithStatus,exports.ConversationPanel=k.ConversationPanel,exports.ConversationPanelWrapper=N.ConversationPanelWrapper,exports.ConversationTabs=p.ConversationTabs,exports.ConversationView=h.default,exports.DEFAULT_AGENT_SERVER_ANALYTICS=I.DEFAULT_AGENT_SERVER_ANALYTICS,exports.EmptyBrowserMessage=t.EmptyBrowserMessage,exports.FileExplorer=_.FileList,exports.FileItem=g.FileItem,exports.FileList=_.FileList,exports.LLMSettings=E.LlmSettingsScreen,exports.MCPSettings=D.MCPSettingsScreen,exports.MetricsModal=u.MetricsModal,exports.MobileHeader=x.MobileHeader,exports.OPENHANDS_I18N_NAMESPACE=i.OPENHANDS_I18N_NAMESPACE,exports.SecretsSettings=O.default,exports.SettingsLayout=C.SettingsLayout,exports.SettingsNavigation=S.SettingsNavigation,exports.SettingsPanel=C.SettingsLayout,exports.Sidebar=A.Sidebar,exports.TelemetryConsentBanner=R.TelemetryConsentBanner,exports.TerminalPanel=P.default,exports.UpgradeBanner=b.UpgradeBanner,exports.UpgradeButton=v.UpgradeButton,exports.UserAvatar=M.UserAvatar,exports.clearTelemetryData=o.clearTelemetryData,exports.createAgentServerI18n=i.createAgentServerI18n,exports.createAgentServerQueryClient=a.createAgentServerQueryClient,exports.getDefaultI18n=i.getDefaultI18n,exports.getDefaultQueryClient=a.getDefaultQueryClient,exports.getI18n=i.getI18n,exports.
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./_virtual/_rolldown/runtime.cjs`);const e=require(`./components/features/browser/browser-snapshot.cjs`),t=require(`./components/features/browser/empty-browser-message.cjs`),n=require(`./components/features/browser/browser.cjs`),r=require(`./i18n/resources.cjs`),i=require(`./i18n/index.cjs`),a=require(`./query-client-config.cjs`),o=require(`./services/telemetry.cjs`),s=require(`./components/features/chat/chat-interface.cjs`),c=require(`./components/features/conversation/conversation-main/chat-interface-wrapper.cjs`),l=require(`./components/features/conversation/conversation-loading.cjs`),u=require(`./components/features/conversation/metrics-modal/metrics-modal.cjs`),d=require(`./components/features/conversation/conversation-name.cjs`),f=require(`./components/features/conversation/conversation-name-with-status.cjs`),p=require(`./components/features/conversation/conversation-tabs/conversation-tabs.cjs`),m=require(`./components/features/conversation/conversation-main/conversation-main.cjs`),h=require(`./routes/conversation.cjs`),g=require(`./components/features/files/file-item.cjs`),_=require(`./components/features/files/file-list.cjs`),v=require(`./components/features/settings/upgrade-button.cjs`),y=require(`./components/features/settings/banner-message.cjs`),b=require(`./components/features/settings/upgrade-banner.cjs`),x=require(`./components/features/settings/mobile-header.cjs`),S=require(`./components/features/settings/settings-navigation.cjs`),C=require(`./components/features/settings/settings-layout.cjs`),w=require(`./styles/agent-server-ui-style-scope.cjs`),T=require(`./routes/app-settings.cjs`),E=require(`./routes/llm-settings.cjs`),D=require(`./routes/mcp-settings.cjs`),O=require(`./routes/secrets-settings.cjs`),k=require(`./components/features/conversation-panel/conversation-panel.cjs`),A=require(`./components/features/sidebar/sidebar.cjs`),j=require(`./components/features/sidebar/avatar.cjs`),M=require(`./components/features/sidebar/user-avatar.cjs`),N=require(`./components/features/conversation-panel/conversation-panel-wrapper.cjs`),P=require(`./components/features/terminal/terminal.cjs`),F=require(`./components/providers/agent-server-ui-root.cjs`),I=require(`./components/providers/agent-server-ui-providers.cjs`),L=require(`./hooks/use-telemetry.cjs`),R=require(`./components/features/analytics/telemetry-consent-banner.cjs`);require(`./lib/index.cjs`),exports.AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES=w.AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES,exports.AGENT_SERVER_UI_DEFAULT_THEME=w.AGENT_SERVER_UI_DEFAULT_THEME,exports.AGENT_SERVER_UI_SCOPE_ATTRIBUTE=w.AGENT_SERVER_UI_SCOPE_ATTRIBUTE,exports.AGENT_SERVER_UI_SCOPE_SELECTOR=w.AGENT_SERVER_UI_SCOPE_SELECTOR,exports.AgentServerUIProviders=I.AgentServerUIProviders,exports.AgentServerUIRoot=F.AgentServerUIRoot,exports.AppSettings=T.default,exports.AvailableLanguages=i.AvailableLanguages,exports.Avatar=j.Avatar,exports.BannerMessage=y.BannerMessage,exports.BrowserPanel=n.BrowserPanel,exports.BrowserSnapshot=e.BrowserSnapshot,exports.ChatInterfaceWrapper=c.ChatInterfaceWrapper,exports.ChatPanel=s.ChatInterface,exports.ConversationLoading=l.ConversationLoading,exports.ConversationMain=m.ConversationMain,exports.ConversationName=d.ConversationName,exports.ConversationNameWithStatus=f.ConversationNameWithStatus,exports.ConversationPanel=k.ConversationPanel,exports.ConversationPanelWrapper=N.ConversationPanelWrapper,exports.ConversationTabs=p.ConversationTabs,exports.ConversationView=h.default,exports.DEFAULT_AGENT_SERVER_ANALYTICS=I.DEFAULT_AGENT_SERVER_ANALYTICS,exports.EmptyBrowserMessage=t.EmptyBrowserMessage,exports.FileExplorer=_.FileList,exports.FileItem=g.FileItem,exports.FileList=_.FileList,exports.LLMSettings=E.LlmSettingsScreen,exports.MCPSettings=D.MCPSettingsScreen,exports.MetricsModal=u.MetricsModal,exports.MobileHeader=x.MobileHeader,exports.OPENHANDS_I18N_NAMESPACE=i.OPENHANDS_I18N_NAMESPACE,exports.SecretsSettings=O.default,exports.SettingsLayout=C.SettingsLayout,exports.SettingsNavigation=S.SettingsNavigation,exports.SettingsPanel=C.SettingsLayout,exports.Sidebar=A.Sidebar,exports.TelemetryConsentBanner=R.TelemetryConsentBanner,exports.TerminalPanel=P.default,exports.UpgradeBanner=b.UpgradeBanner,exports.UpgradeButton=v.UpgradeButton,exports.UserAvatar=M.UserAvatar,exports.clearTelemetryData=o.clearTelemetryData,exports.configureTelemetry=o.configureTelemetry,exports.createAgentServerI18n=i.createAgentServerI18n,exports.createAgentServerQueryClient=a.createAgentServerQueryClient,exports.getDefaultI18n=i.getDefaultI18n,exports.getDefaultQueryClient=a.getDefaultQueryClient,exports.getI18n=i.getI18n,exports.getQueryClient=a.getQueryClient,exports.getTelemetryConsent=o.getTelemetryConsent,exports.isTelemetryEnabled=o.isTelemetryEnabled,exports.queryClient=a.queryClient,exports.setI18n=i.setI18n,exports.setQueryClient=a.setQueryClient,exports.setTelemetryConsent=o.setTelemetryConsent,exports.trackEvent=o.trackEvent,exports.trackInstall=o.trackInstall,exports.trackSessionStart=o.trackSessionStart,exports.translationResources=r.translationResources,exports.useTelemetry=L.useTelemetry,exports.waitForI18n=i.waitForI18n;
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { BrowserPanel as n } from "./components/features/browser/browser.js";
|
|
|
4
4
|
import { translationResources as r } from "./i18n/resources.js";
|
|
5
5
|
import { AvailableLanguages as i, OPENHANDS_I18N_NAMESPACE as a, createAgentServerI18n as o, getDefaultI18n as s, getI18n as c, setI18n as l, waitForI18n as u } from "./i18n/index.js";
|
|
6
6
|
import { createAgentServerQueryClient as d, getDefaultQueryClient as f, getQueryClient as p, queryClient as m, setQueryClient as h } from "./query-client-config.js";
|
|
7
|
-
import { clearTelemetryData as g,
|
|
7
|
+
import { clearTelemetryData as g, configureTelemetry as _, getTelemetryConsent as v, isTelemetryEnabled as y, setTelemetryConsent as b, trackEvent as x, trackInstall as S, trackSessionStart as C } from "./services/telemetry.js";
|
|
8
8
|
import { ChatInterface as w } from "./components/features/chat/chat-interface.js";
|
|
9
9
|
import { ChatInterfaceWrapper as T } from "./components/features/conversation/conversation-main/chat-interface-wrapper.js";
|
|
10
10
|
import { ConversationLoading as E } from "./components/features/conversation/conversation-loading.js";
|
|
@@ -38,4 +38,4 @@ import { AgentServerUIProviders as ne, DEFAULT_AGENT_SERVER_ANALYTICS as re } fr
|
|
|
38
38
|
import { useTelemetry as ie } from "./hooks/use-telemetry.js";
|
|
39
39
|
import { TelemetryConsentBanner as ae } from "./components/features/analytics/telemetry-consent-banner.js";
|
|
40
40
|
import "./lib/index.js";
|
|
41
|
-
export { B as AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES, V as AGENT_SERVER_UI_DEFAULT_THEME, H as AGENT_SERVER_UI_SCOPE_ATTRIBUTE, U as AGENT_SERVER_UI_SCOPE_SELECTOR, ne as AgentServerUIProviders, te as AgentServerUIRoot, W as AppSettings, i as AvailableLanguages, X as Avatar, F as BannerMessage, n as BrowserPanel, e as BrowserSnapshot, T as ChatInterfaceWrapper, w as ChatPanel, E as ConversationLoading, ee as ConversationMain, O as ConversationName, k as ConversationNameWithStatus, J as ConversationPanel, Q as ConversationPanelWrapper, A as ConversationTabs, j as ConversationView, re as DEFAULT_AGENT_SERVER_ANALYTICS, t as EmptyBrowserMessage, N as FileExplorer, M as FileItem, N as FileList, G as LLMSettings, K as MCPSettings, D as MetricsModal, L as MobileHeader, a as OPENHANDS_I18N_NAMESPACE, q as SecretsSettings, z as SettingsLayout, R as SettingsNavigation, z as SettingsPanel, Y as Sidebar, ae as TelemetryConsentBanner, $ as TerminalPanel, I as UpgradeBanner, P as UpgradeButton, Z as UserAvatar, g as clearTelemetryData, o as createAgentServerI18n, d as createAgentServerQueryClient, s as getDefaultI18n, f as getDefaultQueryClient, c as getI18n,
|
|
41
|
+
export { B as AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES, V as AGENT_SERVER_UI_DEFAULT_THEME, H as AGENT_SERVER_UI_SCOPE_ATTRIBUTE, U as AGENT_SERVER_UI_SCOPE_SELECTOR, ne as AgentServerUIProviders, te as AgentServerUIRoot, W as AppSettings, i as AvailableLanguages, X as Avatar, F as BannerMessage, n as BrowserPanel, e as BrowserSnapshot, T as ChatInterfaceWrapper, w as ChatPanel, E as ConversationLoading, ee as ConversationMain, O as ConversationName, k as ConversationNameWithStatus, J as ConversationPanel, Q as ConversationPanelWrapper, A as ConversationTabs, j as ConversationView, re as DEFAULT_AGENT_SERVER_ANALYTICS, t as EmptyBrowserMessage, N as FileExplorer, M as FileItem, N as FileList, G as LLMSettings, K as MCPSettings, D as MetricsModal, L as MobileHeader, a as OPENHANDS_I18N_NAMESPACE, q as SecretsSettings, z as SettingsLayout, R as SettingsNavigation, z as SettingsPanel, Y as Sidebar, ae as TelemetryConsentBanner, $ as TerminalPanel, I as UpgradeBanner, P as UpgradeButton, Z as UserAvatar, g as clearTelemetryData, _ as configureTelemetry, o as createAgentServerI18n, d as createAgentServerQueryClient, s as getDefaultI18n, f as getDefaultQueryClient, c as getI18n, p as getQueryClient, v as getTelemetryConsent, y as isTelemetryEnabled, m as queryClient, l as setI18n, h as setQueryClient, b as setTelemetryConsent, x as trackEvent, S as trackInstall, C as trackSessionStart, r as translationResources, ie as useTelemetry, u as waitForI18n };
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -4,10 +4,10 @@ export * from "../components/files";
|
|
|
4
4
|
export * from "../components/settings";
|
|
5
5
|
export * from "../components/sidebar";
|
|
6
6
|
export * from "../components/terminal";
|
|
7
|
-
export { AgentServerUIProviders, AgentServerUIRoot, DEFAULT_AGENT_SERVER_ANALYTICS, type AgentServerUIAnalyticsConfig, type AgentServerUIProvidersProps, type AgentServerUIRootProps, } from "../components/providers";
|
|
7
|
+
export { AgentServerUIProviders, AgentServerUIRoot, DEFAULT_AGENT_SERVER_ANALYTICS, type AgentServerUIAnalyticsConfig, type AgentServerUIPostHogAnalyticsConfig, type AgentServerUIProvidersProps, type AgentServerUIRootProps, } from "../components/providers";
|
|
8
8
|
export { createAgentServerQueryClient, getDefaultQueryClient, getQueryClient, queryClient, setQueryClient, } from "../query-client-config";
|
|
9
9
|
export { AvailableLanguages, OPENHANDS_I18N_NAMESPACE, createAgentServerI18n, getDefaultI18n, getI18n, setI18n, translationResources, waitForI18n, } from "../i18n";
|
|
10
10
|
export { AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES, AGENT_SERVER_UI_DEFAULT_THEME, AGENT_SERVER_UI_SCOPE_ATTRIBUTE, AGENT_SERVER_UI_SCOPE_SELECTOR, type AgentServerUICssVariableName, type AgentServerUIStyleOverrides, type AgentServerUITheme, } from "../styles/agent-server-ui-style-scope";
|
|
11
11
|
export { TelemetryConsentBanner } from "../components/features/analytics/telemetry-consent-banner";
|
|
12
12
|
export { useTelemetry, type UseTelemetryReturn } from "../hooks/use-telemetry";
|
|
13
|
-
export { getTelemetryConsent, setTelemetryConsent, isTelemetryEnabled, trackInstall, trackSessionStart, trackEvent, clearTelemetryData,
|
|
13
|
+
export { configureTelemetry, getTelemetryConsent, setTelemetryConsent, isTelemetryEnabled, trackInstall, trackSessionStart, trackEvent, clearTelemetryData, type TelemetryConfig, type TelemetryConfiguration, type TelemetryConsent, } from "../services/telemetry";
|
package/dist/package.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`./_virtual/_rolldown/runtime.cjs`);var e={name:`@openhands/agent-canvas`,version:`1.5.
|
|
1
|
+
require(`./_virtual/_rolldown/runtime.cjs`);var e={name:`@openhands/agent-canvas`,version:`1.5.2`,description:`Agent Canvas UI for OpenHands - run AI coding agents with a visual interface`,license:`MIT`,private:!1,type:`module`,repository:{type:`git`,url:`https://github.com/OpenHands/agent-canvas`},homepage:`https://github.com/OpenHands/agent-canvas#readme`,bugs:{url:`https://github.com/OpenHands/agent-canvas/issues`},bin:{"agent-canvas":`bin/agent-canvas.mjs`},engines:{node:`>=22.12.0`},dependencies:{"@heroui/react":`2.8.10`,"@microlink/react-json-view":`1.31.20`,"@monaco-editor/react":`4.7.0`,"@openhands/extensions":`0.9.0`,"@openhands/typescript-client":`1.34.0`,"@react-router/node":`7.17.0`,"@react-router/serve":`7.17.0`,"@tailwindcss/vite":`4.2.4`,"@tanstack/react-query":`5.100.9`,"@types/shell-quote":`1.7.5`,"@uidotdev/usehooks":`2.4.1`,"@xterm/addon-fit":`0.11.0`,"@xterm/xterm":`6.0.0`,axios:`1.16.0`,"class-variance-authority":`0.7.1`,clsx:`2.1.1`,downshift:`9.3.2`,"framer-motion":`12.38.0`,httpxy:`0.5.3`,i18next:`26.0.8`,"i18next-browser-languagedetector":`8.2.1`,"i18next-http-backend":`4.0.0`,isbot:`5.1.39`,"lucide-react":`1.14.0`,"monaco-editor":`0.55.1`,"posthog-js":`1.372.6`,react:`19.2.5`,"react-dom":`19.2.5`,"react-hot-toast":`2.6.0`,"react-i18next":`17.0.6`,"react-icons":`5.6.0`,"react-markdown":`10.1.0`,"react-router":`7.17.0`,"react-syntax-highlighter":`16.1.1`,"rehype-raw":`7.0.0`,"rehype-sanitize":`6.0.0`,"remark-breaks":`4.0.0`,"remark-gfm":`4.0.1`,"shell-quote":`1.8.4`,sirv:`3.0.2`,"sirv-cli":`3.0.1`,"socket.io-client":`4.8.3`,"tailwind-merge":`3.5.0`,"tailwind-scrollbar":`4.0.2`,"unist-util-visit":`5.1.0`,uuid:`14.0.0`,vite:`8.0.10`,winston:`3.19.0`,"winston-daily-rotate-file":`5.0.0`,zustand:`5.0.12`},scripts:{dev:`node --env-file-if-exists=.env scripts/dev-with-automation.mjs`,"dev:static":`node --env-file-if-exists=.env scripts/dev-static.mjs`,"dev:extra-backend":`node --env-file-if-exists=.env scripts/dev-extra-backend.mjs`,"dev:minimal":`node --env-file-if-exists=.env scripts/dev-safe.mjs`,"dev:frontend":`npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev`,"dev:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev`,build:`npm run build:app`,"build:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router build`,start:`npx sirv-cli build/ --single`,test:`npm run make-i18n && vitest run`,"test:e2e":`playwright test --pass-with-no-tests`,"test:e2e:live":`node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs`,"test:e2e:mock-llm":`playwright test --config=playwright.mock-llm.config.ts`,"test:e2e:mock-llm:docker":`playwright test --config=playwright.mock-llm-docker.config.ts`,"test:coverage":`npm run make-i18n && vitest run --coverage`,dev_wsl:`VITE_WATCH_USE_POLLING=true vite`,preview:`vite preview`,"make-i18n":`node scripts/make-i18n-translations.cjs`,prelint:`npm run make-i18n`,lint:`npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}`,"lint:fix":`eslint src --fix && prettier --write src/**/*.{ts,tsx}`,prepare:`husky`,typecheck:`react-router typegen && tsc`,"typecheck:staged":`react-router typegen && npx tsc --noEmit --skipLibCheck`,"check-translation-completeness":`node scripts/check-translation-completeness.cjs`,"build:app":`npm run make-i18n && react-router build`,"build:lib":`npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true vite build && tsc -p tsconfig.lib.json`,"build:docker":`node scripts/docker-build.mjs`,"example:acp-docker:env":`node scripts/gen-acp-docker-env.mjs`},"lint-staged":{"src/**/*.{ts,tsx,js}":[`eslint --fix`,`prettier --write`],"src/**/*.{ts,tsx}":[`node scripts/run-staged-typecheck.mjs`],"src/**/*":[`npm run check-translation-completeness`]},devDependencies:{"@eslint/eslintrc":`3.3.1`,"@eslint/js":`9.39.4`,"@mswjs/socket.io-binding":`0.2.0`,"@playwright/test":`1.59.1`,"@react-router/dev":`7.17.0`,"@tailwindcss/typography":`0.5.19`,"@tanstack/eslint-plugin-query":`5.100.9`,"@testing-library/dom":`10.4.1`,"@testing-library/jest-dom":`6.9.1`,"@testing-library/react":`16.3.2`,"@testing-library/user-event":`14.6.1`,"@types/mdast":`4.0.4`,"@types/node":`25.6.0`,"@types/react":`19.2.14`,"@types/react-dom":`19.2.3`,"@types/react-syntax-highlighter":`15.5.13`,"@typescript-eslint/eslint-plugin":`8.59.2`,"@typescript-eslint/parser":`8.59.2`,"@vercel/react-router":`1.3.0`,"@vitest/coverage-v8":`4.1.5`,"cross-env":`10.1.0`,eslint:`9.39.4`,"eslint-config-prettier":`10.1.8`,"eslint-import-resolver-typescript":`4.4.4`,"eslint-plugin-i18next":`6.1.4`,"eslint-plugin-import-x":`4.16.2`,"eslint-plugin-jsx-a11y":`6.10.2`,"eslint-plugin-prettier":`5.5.5`,"eslint-plugin-react":`7.37.5`,"eslint-plugin-react-hooks":`7.1.1`,"eslint-plugin-unused-imports":`4.4.1`,globals:`16.5.0`,husky:`9.1.7`,jsdom:`29.1.1`,"lint-staged":`16.4.0`,msw:`2.14.2`,"postcss-prefix-selector":`2.1.1`,prettier:`3.8.3`,tailwindcss:`4.2.4`,typescript:`6.0.3`,"vite-plugin-svgr":`5.2.0`,vitest:`4.1.5`},packageManager:`npm@10.5.0`,volta:{node:`22.12.0`},msw:{workerDirectory:[`public`]},overrides:{"@vercel/static-config":{ajv:`8.20.0`},dompurify:`3.4.7`},main:`./dist/index.cjs`,module:`./dist/index.js`,types:`./dist/index.d.ts`,files:[`dist`,`bin`,`build`,`config`,`scripts`,`tools`],exports:{".":{types:`./dist/index.d.ts`,import:`./dist/index.js`,require:`./dist/index.cjs`},"./browser":{types:`./dist/components/browser/index.d.ts`,import:`./dist/components/browser/index.js`,require:`./dist/components/browser/index.cjs`},"./conversation":{types:`./dist/components/conversation/index.d.ts`,import:`./dist/components/conversation/index.js`,require:`./dist/components/conversation/index.cjs`},"./files":{types:`./dist/components/files/index.d.ts`,import:`./dist/components/files/index.js`,require:`./dist/components/files/index.cjs`},"./settings":{types:`./dist/components/settings/index.d.ts`,import:`./dist/components/settings/index.js`,require:`./dist/components/settings/index.cjs`},"./sidebar":{types:`./dist/components/sidebar/index.d.ts`,import:`./dist/components/sidebar/index.js`,require:`./dist/components/sidebar/index.cjs`},"./terminal":{types:`./dist/components/terminal/index.d.ts`,import:`./dist/components/terminal/index.js`,require:`./dist/components/terminal/index.cjs`},"./i18n":{types:`./dist/i18n/index.d.ts`,import:`./dist/i18n/index.js`,require:`./dist/i18n/index.cjs`},"./package.json":`./package.json`},peerDependencies:{react:`19.2.5`,"react-dom":`19.2.5`,"react-router":`7.17.0`}};exports.default=e;
|
|
2
2
|
//# sourceMappingURL=package.cjs.map
|