specrails-desktop 2.64.2 → 2.65.1
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/cli/dist/status.js +3 -0
- package/client/dist/assets/ActivityFeedPage-ByVKYII-.js +1 -0
- package/client/dist/assets/AgentBrowserCapture-BGUTjhUr.js +1 -0
- package/client/dist/assets/AgentModeAnalyticsPane-CtOLDDjB.js +2 -0
- package/client/dist/assets/AgentModeCodePane-CDhUKarT.js +2 -0
- package/client/dist/assets/AgentModeJobsPane-BAa_oEHJ.js +1 -0
- package/client/dist/assets/AgentsPage-D32hG4Ve.js +120 -0
- package/client/dist/assets/AnalyticsPage-BU50zeG6.js +5 -0
- package/client/dist/assets/BudgetCard-DP_jxwaD.js +55 -0
- package/client/dist/assets/CodePage-jiYnKGpp.js +3 -0
- package/client/dist/assets/CostValue-Bvn8674q.js +1 -0
- package/client/dist/assets/DesktopAnalyticsPage-CF__H4e3.js +1 -0
- package/client/dist/assets/DocView-RrAp70zp.js +11 -0
- package/client/dist/assets/DocsDialog-DkqHU-JF.js +1 -0
- package/client/dist/assets/DocsPage-C6X089zC.js +1 -0
- package/client/dist/assets/ExportDropdown-C5-o8y3K.js +1 -0
- package/client/dist/assets/HelpHint-Crf9_uoR.js +1 -0
- package/client/dist/assets/IntegrationsPage-aflU3KHK.js +1 -0
- package/client/dist/assets/InteractiveJobComposer-CEMMhyyJ.js +19 -0
- package/client/dist/assets/JobDetailModal-BVJ6hyRs.js +1 -0
- package/client/dist/assets/JobDetailPage-DHzBUmox.js +1 -0
- package/client/dist/assets/JobsPage-o-LAqkwC.js +1 -0
- package/client/dist/assets/LoopBuilderPage-DbSVmXBM.js +1 -0
- package/client/dist/assets/LoopPreviewModal-DbJcVyN1.js +1 -0
- package/client/dist/assets/{LoopWindowSurface-DE0v2K1p.js → LoopWindowSurface-Co1ZK26V.js} +1 -1
- package/client/dist/assets/LoopsPage-C4lgkPXB.js +2 -0
- package/client/dist/assets/MinimizedChatsContext-742ypO8n.js +1 -0
- package/client/dist/assets/PluginsPage-Acks9ges.js +2 -0
- package/client/dist/assets/RailTrack-BfLmBzBh.js +1 -0
- package/client/dist/assets/{RepositoryScopeSelector-2eSqR9WK.js → RepositoryScopeSelector-DcxbKI9w.js} +1 -1
- package/client/dist/assets/ReviewPacketPage-CAVSIOAJ.js +7 -0
- package/client/dist/assets/TemplatePreviewModal-C23SYCTm.js +1 -0
- package/client/dist/assets/TicketDetailModalContext-B-Gtm6Ob.js +23 -0
- package/client/dist/assets/Trans-C6J0cLyh.js +1 -0
- package/client/dist/assets/a11y-prefs-BqoP5goK.js +1 -0
- package/client/dist/assets/activity-BBWfoUOG.js +1 -0
- package/client/dist/assets/activity-BM_skann.js +1 -0
- package/client/dist/assets/activity-Cevl82ke.js +1 -0
- package/client/dist/assets/activity-CmACk5W5.js +1 -0
- package/client/dist/assets/activity-D9LBw3PQ.js +1 -0
- package/client/dist/assets/activity-Dspbb9lz.js +1 -0
- package/client/dist/assets/activity-FPjYIjv9.js +1 -0
- package/client/dist/assets/activity-nLCKMUKt.js +1 -0
- package/client/dist/assets/addspec-BI4jDMhA.js +1 -0
- package/client/dist/assets/addspec-BldTv7Tl.js +1 -0
- package/client/dist/assets/addspec-Cdq-2EcC.js +1 -0
- package/client/dist/assets/addspec-DH5M16BQ.js +1 -0
- package/client/dist/assets/addspec-DOFo9pD5.js +1 -0
- package/client/dist/assets/addspec-DPkwhdmL.js +1 -0
- package/client/dist/assets/addspec-Dzy12Pv3.js +1 -0
- package/client/dist/assets/addspec-skTs6EEW.js +1 -0
- package/client/dist/assets/agent-B_UEUy7Y.js +1 -0
- package/client/dist/assets/agent-BarjlhTA.js +1 -0
- package/client/dist/assets/agent-BfqIITo5.js +1 -0
- package/client/dist/assets/agent-Bt9a7Kyj.js +1 -0
- package/client/dist/assets/agent-C3689RwP.js +1 -0
- package/client/dist/assets/agent-CrmboTAi.js +1 -0
- package/client/dist/assets/agent-DcsoTnuE.js +1 -0
- package/client/dist/assets/agent-GDZoYwd4.js +1 -0
- package/client/dist/assets/{agentRuntime-es2ymSl-.js → agentRuntime-BYH70bKY.js} +1 -1
- package/client/dist/assets/agentRuntime-BijLh8I9.js +1 -0
- package/client/dist/assets/{agentRuntime-BzuwQQgn.js → agentRuntime-BvyuETPe.js} +1 -1
- package/client/dist/assets/{agentRuntime-BDvbJMmS.js → agentRuntime-C2WI6HQh.js} +1 -1
- package/client/dist/assets/{agentRuntime-BKJfv5YD.js → agentRuntime-CZPIlQsr.js} +1 -1
- package/client/dist/assets/{agentRuntime-DiCldqGG.js → agentRuntime-D2dDvCyJ.js} +1 -1
- package/client/dist/assets/agentRuntime-DWZedEbn.js +1 -0
- package/client/dist/assets/agentRuntime-DkIruUNw.js +1 -0
- package/client/dist/assets/agents-35_PDKx9.js +1 -0
- package/client/dist/assets/agents-8fZnHhEQ.js +1 -0
- package/client/dist/assets/agents-Bgimtw8z.js +1 -0
- package/client/dist/assets/agents-C4P160Us.js +1 -0
- package/client/dist/assets/agents-Clg67zbp.js +1 -0
- package/client/dist/assets/agents-DJfF4o6G.js +1 -0
- package/client/dist/assets/agents-Dc9-Y5cw.js +1 -0
- package/client/dist/assets/agents-EN1Zl4YZ.js +1 -0
- package/client/dist/assets/agentstudio-Bm4-NYaG.js +1 -0
- package/client/dist/assets/agentstudio-CD1fuj2o.js +1 -0
- package/client/dist/assets/agentstudio-CQGWFSst.js +1 -0
- package/client/dist/assets/agentstudio-CqVSb65S.js +1 -0
- package/client/dist/assets/agentstudio-DIE_HjsX.js +1 -0
- package/client/dist/assets/agentstudio-D_OmQK-k.js +1 -0
- package/client/dist/assets/agentstudio-Djz9aUfb.js +1 -0
- package/client/dist/assets/agentstudio-Qa3v9o5J.js +1 -0
- package/client/dist/assets/{aiedit-DNXxq_Dr.js → aiedit-1VzLs37W.js} +1 -1
- package/client/dist/assets/{aiedit-DCjA7jLJ.js → aiedit-BNp6GSik.js} +1 -1
- package/client/dist/assets/{aiedit-BoG24nlg.js → aiedit-BOY5xRPi.js} +1 -1
- package/client/dist/assets/{aiedit-iIjz2_Qk.js → aiedit-BrqMZvbc.js} +1 -1
- package/client/dist/assets/{aiedit-CjlSRQVP.js → aiedit-CVgtl7hm.js} +1 -1
- package/client/dist/assets/{aiedit-DQ-0_pvE.js → aiedit-CrFW9Jd2.js} +1 -1
- package/client/dist/assets/{aiedit-olnv3QSt.js → aiedit-YE2lILp7.js} +1 -1
- package/client/dist/assets/{aiedit-B0KUbpB6.js → aiedit-iA_R1AVQ.js} +1 -1
- package/client/dist/assets/analytics-3w0t-4ic.js +1 -0
- package/client/dist/assets/analytics-BRi4KQD6.js +1 -0
- package/client/dist/assets/analytics-BtjAqzke.js +1 -0
- package/client/dist/assets/analytics-COSQ1h47.js +1 -0
- package/client/dist/assets/analytics-CP2HjESk.js +1 -0
- package/client/dist/assets/analytics-DY65TC62.js +1 -0
- package/client/dist/assets/analytics-Den_vvxn.js +1 -0
- package/client/dist/assets/analytics-LmBS96O8.js +1 -0
- package/client/dist/assets/api-DOGbyfTO.js +2 -0
- package/client/dist/assets/builder-BMVvSr4v.js +1 -0
- package/client/dist/assets/builder-BN-MuLZt.js +1 -0
- package/client/dist/assets/builder-BQOZi4CF.js +1 -0
- package/client/dist/assets/builder-BjUPjsyu.js +1 -0
- package/client/dist/assets/builder-BoBtN18T.js +1 -0
- package/client/dist/assets/builder-C5g5NhxL.js +1 -0
- package/client/dist/assets/builder-RUHXw3yx.js +1 -0
- package/client/dist/assets/builder-fyS_AiyC.js +1 -0
- package/client/dist/assets/button-CHPkroew.js +1 -0
- package/client/dist/assets/chat-C9L5T7KI.js +1 -0
- package/client/dist/assets/chevron-right-CwMAj0w_.js +1 -0
- package/client/dist/assets/chevron-up-BAMuP0XD.js +1 -0
- package/client/dist/assets/chunk-OB3PAWPO-BBaq6pUk.js +3 -0
- package/client/dist/assets/code-4le5IIbf.js +1 -0
- package/client/dist/assets/code-B-jCVIbm.js +1 -0
- package/client/dist/assets/code-BRfrn5ix.js +1 -0
- package/client/dist/assets/code-CC9NCrDM.js +1 -0
- package/client/dist/assets/code-CK6pm8wY.js +1 -0
- package/client/dist/assets/code-DDiOzd6c.js +1 -0
- package/client/dist/assets/code-tGifiyf5.js +1 -0
- package/client/dist/assets/code-xkn8kQTg.js +1 -0
- package/client/dist/assets/commands-Bv1QshHR.js +1 -0
- package/client/dist/assets/commands-BvxTxboW.js +1 -0
- package/client/dist/assets/commands-C5ORR0fO.js +1 -0
- package/client/dist/assets/commands-CBKMFSTV.js +1 -0
- package/client/dist/assets/commands-CFJIRsJv.js +1 -0
- package/client/dist/assets/commands-D9o3ZcXl.js +1 -0
- package/client/dist/assets/commands-DNox0Edk.js +1 -0
- package/client/dist/assets/commands-DmIUMLdV.js +1 -0
- package/client/dist/assets/common-5H4TkaoI.js +1 -0
- package/client/dist/assets/common-9S3OdPjx.js +1 -0
- package/client/dist/assets/common-BqnwIcjs.js +1 -0
- package/client/dist/assets/common-CQP3VafS.js +1 -0
- package/client/dist/assets/common-CZnAfkB2.js +1 -0
- package/client/dist/assets/common-D5sNttV4.js +1 -0
- package/client/dist/assets/common-k_qX9nlv.js +1 -0
- package/client/dist/assets/common-s4HIi9XI.js +1 -0
- package/client/dist/assets/compass-B7guwBlY.js +1 -0
- package/client/dist/assets/confirm-dialog-ChZdHL3Q.js +1 -0
- package/client/dist/assets/copy-DOPlLymH.js +1 -0
- package/client/dist/assets/core-BozBzB6Y.js +1 -0
- package/client/dist/assets/dashboard-6zGLGcEz.js +1 -0
- package/client/dist/assets/dashboard-8Gi0FBDq.js +1 -0
- package/client/dist/assets/dashboard-B7E5YrSy.js +1 -0
- package/client/dist/assets/dashboard-BhdKV8xK.js +1 -0
- package/client/dist/assets/dashboard-Bu3zzH_s.js +1 -0
- package/client/dist/assets/dashboard-Ce_6rELA.js +1 -0
- package/client/dist/assets/dashboard-DWY-oz8P.js +1 -0
- package/client/dist/assets/dashboard-gUzlWk0o.js +1 -0
- package/client/dist/assets/date-input-Cdlr8kHz.js +1 -0
- package/client/dist/assets/dialog-C23lB2iP.js +5 -0
- package/client/dist/assets/dist-Di-oOFkX.js +1 -0
- package/client/dist/assets/dist-js-CBmS6MsJ.js +1 -0
- package/client/dist/assets/{dist-js-Rlh4FLH5.js → dist-js-DaJmKapi.js} +1 -1
- package/client/dist/assets/dropdown-menu-Bfp2CK6H.js +1 -0
- package/client/dist/assets/empty-state-D5w9OWj-.js +1 -0
- package/client/dist/assets/es2015-DfnECntk.js +41 -0
- package/client/dist/assets/esm-BKF6CE7v.js +1 -0
- package/client/dist/assets/event-BEnMLqAi.js +1 -0
- package/client/dist/assets/explore--NOz9LCN.js +1 -0
- package/client/dist/assets/explore-B2ulH6dO.js +1 -0
- package/client/dist/assets/explore-BD-QiLdg.js +1 -0
- package/client/dist/assets/explore-BOqd4_1j.js +1 -0
- package/client/dist/assets/explore-Be_Zh5zu.js +1 -0
- package/client/dist/assets/explore-CLjzPSKo.js +1 -0
- package/client/dist/assets/explore-D_-vHm29.js +1 -0
- package/client/dist/assets/explore-yEQTF6ro.js +1 -0
- package/client/dist/assets/file-text-CNXzL3wj.js +1 -0
- package/client/dist/assets/format-BODoFIw6.js +1 -0
- package/client/dist/assets/formatDistanceToNow-DLMIOS0N.js +1 -0
- package/client/dist/assets/getTimezoneOffsetInMilliseconds-O61feXch.js +1 -0
- package/client/dist/assets/git-compare-arrows-Cu6tICCq.js +1 -0
- package/client/dist/assets/humanise-command-CB4ybLwq.js +1 -0
- package/client/dist/assets/inbox-BLZ8cm6_.js +1 -0
- package/client/dist/assets/inbox-BQ3VmNYY.js +1 -0
- package/client/dist/assets/inbox-BdcXWCuT.js +1 -0
- package/client/dist/assets/inbox-CF1PHjns.js +1 -0
- package/client/dist/assets/inbox-CFNPDhso.js +1 -0
- package/client/dist/assets/inbox-DIttK_NW.js +1 -0
- package/client/dist/assets/inbox-Dfdv1Ykl.js +1 -0
- package/client/dist/assets/inbox-JS1inmeO.js +1 -0
- package/client/dist/assets/index-4UWY7Xyz.css +2 -0
- package/client/dist/assets/index-DHzB0T26.js +120 -0
- package/client/dist/assets/integrations-BcKgzgPD.js +1 -0
- package/client/dist/assets/integrations-BmX_XyJq.js +1 -0
- package/client/dist/assets/integrations-CHpwMjlY.js +1 -0
- package/client/dist/assets/integrations-CT3kr8e-.js +1 -0
- package/client/dist/assets/integrations-C_5XAkgz.js +1 -0
- package/client/dist/assets/integrations-Ct9zLX7N.js +1 -0
- package/client/dist/assets/integrations-DEYemxUv.js +1 -0
- package/client/dist/assets/integrations-DWvsB_WB.js +1 -0
- package/client/dist/assets/{jira-Cq6yvN4q.js → jira-B_ERkFRv.js} +1 -1
- package/client/dist/assets/jira-Bn-A5lwD.js +1 -0
- package/client/dist/assets/jira-C71Ybnhp.js +1 -0
- package/client/dist/assets/jira-CkwjeJz6.js +1 -0
- package/client/dist/assets/jira-D9pSLXjI.js +1 -0
- package/client/dist/assets/jira-DBRS_lcp.js +1 -0
- package/client/dist/assets/jira-DHS6CsKh.js +1 -0
- package/client/dist/assets/jira-MInHRUb1.js +1 -0
- package/client/dist/assets/jira-api-DHme7Upx.js +1 -0
- package/client/dist/assets/jobs-BMLTDo63.js +1 -0
- package/client/dist/assets/jobs-BO8q4Mi1.js +1 -0
- package/client/dist/assets/jobs-Ck8uOWMM.js +1 -0
- package/client/dist/assets/jobs-CyFfPCpg.js +1 -0
- package/client/dist/assets/jobs-DT5s4fZ6.js +1 -0
- package/client/dist/assets/jobs-DZAgVPcD.js +1 -0
- package/client/dist/assets/jobs-b5gPYaKr.js +1 -0
- package/client/dist/assets/jobs-xsZK1440.js +1 -0
- package/client/dist/assets/launch-forecast-BTa-p3RP.js +1 -0
- package/client/dist/assets/{loop-layout-DtxX27Jz.css → loop-layout-DLioOiRN.css} +1 -1
- package/client/dist/assets/loop-layout-Sl9cfTvs.js +7 -0
- package/client/dist/assets/loops-BEEOVJDR.js +1 -0
- package/client/dist/assets/loops-BcrQ2vk7.js +1 -0
- package/client/dist/assets/loops-BjWxzJIZ.js +1 -0
- package/client/dist/assets/loops-BogV595N.js +1 -0
- package/client/dist/assets/loops-CU0BLZiz.js +1 -0
- package/client/dist/assets/loops-CrNBgi1G.js +1 -0
- package/client/dist/assets/loops-CwalwS_i.js +1 -0
- package/client/dist/assets/loops-_TDVN-fX.js +1 -0
- package/client/dist/assets/mcp-BNs8gxoL.js +1 -0
- package/client/dist/assets/mcp-BvRh_xO5.js +1 -0
- package/client/dist/assets/mcp-C2F1pghi.js +1 -0
- package/client/dist/assets/mcp-D9RLKAs2.js +1 -0
- package/client/dist/assets/mcp-DAghcsR0.js +1 -0
- package/client/dist/assets/mcp-DWWAPi1G.js +1 -0
- package/client/dist/assets/mcp-DbGSFC3f.js +1 -0
- package/client/dist/assets/mcp-FelCicrv.js +1 -0
- package/client/dist/assets/narration-C3NBkAR4.js +1 -0
- package/client/dist/assets/narration-CkoJq-Lf.js +1 -0
- package/client/dist/assets/narration-Cr0NeW9K.js +1 -0
- package/client/dist/assets/narration-DJUXOs-W.js +1 -0
- package/client/dist/assets/narration-DgL8TMvN.js +1 -0
- package/client/dist/assets/narration-DjBafgv0.js +1 -0
- package/client/dist/assets/narration-Dle6Iv0c.js +1 -0
- package/client/dist/assets/narration-MYlfktga.js +1 -0
- package/client/dist/assets/nav-BSQ8KW1c.js +1 -0
- package/client/dist/assets/nav-BauVof8Z.js +1 -0
- package/client/dist/assets/nav-BfOAH1se.js +1 -0
- package/client/dist/assets/nav-D3bOsipX.js +1 -0
- package/client/dist/assets/nav-DOMMhlLx.js +1 -0
- package/client/dist/assets/nav-DPzVlgZU.js +1 -0
- package/client/dist/assets/nav-DZJbFbah.js +1 -0
- package/client/dist/assets/nav-D_5aojd2.js +1 -0
- package/client/dist/assets/notify-error-BsWANx1T.js +1 -0
- package/client/dist/assets/onboarding-BdZQnNm3.js +1 -0
- package/client/dist/assets/onboarding-CJQEv1vp.js +1 -0
- package/client/dist/assets/onboarding-CWJGYUW3.js +1 -0
- package/client/dist/assets/onboarding-ChfYN7dA.js +1 -0
- package/client/dist/assets/onboarding-CjvDUR3V.js +1 -0
- package/client/dist/assets/onboarding-I6vS-zTB.js +1 -0
- package/client/dist/assets/onboarding-dgC_9dTB.js +1 -0
- package/client/dist/assets/onboarding-mlXSyKzX.js +1 -0
- package/client/dist/assets/origin-03nTuaOb.js +1 -0
- package/client/dist/assets/packet-BjpyRnZr.js +1 -0
- package/client/dist/assets/packet-BwgG5mBt.js +1 -0
- package/client/dist/assets/packet-C3eAUFkV.js +1 -0
- package/client/dist/assets/packet-C8wZuSld.js +1 -0
- package/client/dist/assets/packet-CNXEy_85.js +1 -0
- package/client/dist/assets/packet-DsV5Aa_8.js +1 -0
- package/client/dist/assets/packet-aasskOE7.js +1 -0
- package/client/dist/assets/packet-phxCc2gJ.js +1 -0
- package/client/dist/assets/page-header-BStSHkP8.js +1 -0
- package/client/dist/assets/project-repositories-DJPeAVBK.js +1 -0
- package/client/dist/assets/{provider-capabilities-lePfeT_Y.js → provider-capabilities-DtwcTme4.js} +1 -1
- package/client/dist/assets/recovery-BPDOsC92.js +1 -0
- package/client/dist/assets/recovery-BluNHoXM.js +1 -0
- package/client/dist/assets/recovery-CRvEmB0C.js +1 -0
- package/client/dist/assets/recovery-CeIoRnkR.js +1 -0
- package/client/dist/assets/recovery-DHCo8KGi.js +1 -0
- package/client/dist/assets/recovery-OxAIpbBF.js +1 -0
- package/client/dist/assets/recovery-XXexYGOJ.js +1 -0
- package/client/dist/assets/recovery-pITlc--v.js +1 -0
- package/client/dist/assets/refresh-cw-DfyTkbsf.js +1 -0
- package/client/dist/assets/select-xA3pSmqE.js +1 -0
- package/client/dist/assets/settings--yzDbX9r.js +1 -0
- package/client/dist/assets/settings-5_heTv8s.js +1 -0
- package/client/dist/assets/settings-BSf27MDg.js +1 -0
- package/client/dist/assets/settings-BSj6FakR.js +1 -0
- package/client/dist/assets/settings-BZDo_8Nn.js +1 -0
- package/client/dist/assets/settings-BdWgmNc0.js +1 -0
- package/client/dist/assets/settings-DRouxKqb.js +1 -0
- package/client/dist/assets/settings-DnWFoY-F.js +1 -0
- package/client/dist/assets/setup-BJWy62ri.js +1 -0
- package/client/dist/assets/setup-BgKOIuzc.js +1 -0
- package/client/dist/assets/setup-BvVIyUlz.js +1 -0
- package/client/dist/assets/setup-BxCk2pe1.js +1 -0
- package/client/dist/assets/setup-C-xQTL7R.js +1 -0
- package/client/dist/assets/setup-CbaVoiwV.js +1 -0
- package/client/dist/assets/setup-DxTBkX3P.js +1 -0
- package/client/dist/assets/setup-oGoVAzOD.js +1 -0
- package/client/dist/assets/specs-7tAb4IKr.js +1 -0
- package/client/dist/assets/specs-BUcY4s5v.js +1 -0
- package/client/dist/assets/specs-Bk5LeBAA.js +1 -0
- package/client/dist/assets/specs-CAA4Lrlg.js +1 -0
- package/client/dist/assets/specs-CS091AnA.js +1 -0
- package/client/dist/assets/specs-DJ6gmFcK.js +1 -0
- package/client/dist/assets/specs-GfCcrBSC.js +1 -0
- package/client/dist/assets/specs-xQgyc7WL.js +1 -0
- package/client/dist/assets/spending-CVH8VREb.js +1 -0
- package/client/dist/assets/square-Co6h5vZg.js +1 -0
- package/client/dist/assets/tauri-shell-43ixPGfa.js +2 -0
- package/client/dist/assets/terminal-0v9sBylD.js +1 -0
- package/client/dist/assets/terminal-AbUAmCxE.js +1 -0
- package/client/dist/assets/terminal-BJayIbIP.js +1 -0
- package/client/dist/assets/terminal-C2RUlXyi.js +1 -0
- package/client/dist/assets/terminal-CMmSb_Nj.js +1 -0
- package/client/dist/assets/terminal-DKWjj7HJ.js +1 -0
- package/client/dist/assets/terminal-KlFu7_pV.js +1 -0
- package/client/dist/assets/terminal-i99yqFvm.js +1 -0
- package/client/dist/assets/tickets-846Oq3i3.js +1 -0
- package/client/dist/assets/tickets-B5LJTe_b.js +1 -0
- package/client/dist/assets/tickets-Bfo2GGmH.js +1 -0
- package/client/dist/assets/tickets-BhdZ1yY2.js +1 -0
- package/client/dist/assets/tickets-CgjWJHAW.js +1 -0
- package/client/dist/assets/tickets-Ct9DbDUR.js +1 -0
- package/client/dist/assets/tickets-rptLEJB1.js +1 -0
- package/client/dist/assets/tickets-xQ6DpYdu.js +1 -0
- package/client/dist/assets/trending-up-BGvb4zZt.js +1 -0
- package/client/dist/assets/undo-6zuS4-sL.js +1 -0
- package/client/dist/assets/undo-BeM4gDOP.js +1 -0
- package/client/dist/assets/undo-BeppX8xS.js +1 -0
- package/client/dist/assets/undo-BqvNZ5MG.js +1 -0
- package/client/dist/assets/undo-BzwEPf_k.js +1 -0
- package/client/dist/assets/undo-CJ9Cu1NN.js +1 -0
- package/client/dist/assets/undo-ds8nMFbX.js +1 -0
- package/client/dist/assets/undo-x_gA-knG.js +1 -0
- package/client/dist/assets/useDesktop-BuOp2-MR.js +1 -0
- package/client/dist/assets/useRuntimeRuns-BRS6ncnO.js +1 -0
- package/client/dist/assets/utils-ELimjS2Y.js +1 -0
- package/client/dist/assets/wrench-Br2n1Lxd.js +1 -0
- package/client/dist/index.html +75 -60
- package/docs/ci-cd.md +29 -1
- package/docs/cli.md +10 -31
- package/docs/codex.md +1 -1
- package/docs/creating-specs.md +15 -12
- package/docs/customizing.md +16 -13
- package/docs/getting-started.md +12 -11
- package/docs/guide/de/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/de/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/de/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/de/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/de/getting-started/6-universal-search.md +34 -0
- package/docs/guide/de/insights/1-analytics-and-cost-tracking.md +20 -6
- package/docs/guide/de/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/de/insights/3-code-explorer.md +1 -1
- package/docs/guide/de/integrations/1-ai-providers.md +1 -1
- package/docs/guide/de/integrations/2-plugins.md +1 -1
- package/docs/guide/de/integrations/3-jira-integration.md +3 -3
- package/docs/guide/de/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/de/integrations/5-mcp-server.md +1 -1
- package/docs/guide/de/integrations/6-agent-chat.md +12 -5
- package/docs/guide/de/integrations/8-flow-mode.md +69 -0
- package/docs/guide/de/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/de/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/de/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/de/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/de/settings/1-themes.md +1 -1
- package/docs/guide/de/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/de/settings/5-project-environment.md +1 -1
- package/docs/guide/de/settings/6-updates.md +24 -0
- package/docs/guide/de/settings/7-existing-projects.md +33 -0
- package/docs/guide/de/settings/8-accessibility.md +23 -0
- package/docs/guide/de/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/de/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/de/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/en/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/en/getting-started/1-what-is-specrails.md +1 -1
- package/docs/guide/en/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/en/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/en/getting-started/5-the-dashboard-tour.md +52 -0
- package/docs/guide/en/getting-started/6-universal-search.md +34 -0
- package/docs/guide/en/insights/1-analytics-and-cost-tracking.md +24 -10
- package/docs/guide/en/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/en/insights/3-code-explorer.md +5 -5
- package/docs/guide/en/integrations/1-ai-providers.md +1 -1
- package/docs/guide/en/integrations/2-plugins.md +1 -1
- package/docs/guide/en/integrations/3-jira-integration.md +4 -4
- package/docs/guide/en/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/en/integrations/5-mcp-server.md +4 -4
- package/docs/guide/en/integrations/6-agent-chat.md +12 -5
- package/docs/guide/en/integrations/8-flow-mode.md +69 -0
- package/docs/guide/en/pipeline/1-rails-and-jobs.md +22 -3
- package/docs/guide/en/pipeline/2-the-job-detail-view.md +19 -7
- package/docs/guide/en/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/en/pipeline/5-the-loop-builder.md +2 -2
- package/docs/guide/en/settings/1-themes.md +1 -1
- package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/en/settings/5-project-environment.md +1 -1
- package/docs/guide/en/settings/6-updates.md +24 -0
- package/docs/guide/en/settings/7-existing-projects.md +33 -0
- package/docs/guide/en/settings/8-accessibility.md +23 -0
- package/docs/guide/en/specs/1-specs-and-the-backlog.md +42 -6
- package/docs/guide/en/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/en/specs/3-add-spec-explore-mode.md +2 -2
- package/docs/guide/es/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +1 -1
- package/docs/guide/es/agents/3-customizing-models-per-agent.md +2 -2
- package/docs/guide/es/agents/4-custom-agents-catalog.md +1 -1
- package/docs/guide/es/getting-started/1-what-is-specrails.md +3 -3
- package/docs/guide/es/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/es/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/es/getting-started/5-the-dashboard-tour.md +52 -0
- package/docs/guide/es/getting-started/6-universal-search.md +34 -0
- package/docs/guide/es/insights/1-analytics-and-cost-tracking.md +26 -12
- package/docs/guide/es/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/es/insights/3-code-explorer.md +5 -5
- package/docs/guide/es/integrations/1-ai-providers.md +1 -1
- package/docs/guide/es/integrations/2-plugins.md +1 -1
- package/docs/guide/es/integrations/3-jira-integration.md +4 -4
- package/docs/guide/es/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/es/integrations/5-mcp-server.md +4 -4
- package/docs/guide/es/integrations/6-agent-chat.md +14 -7
- package/docs/guide/es/integrations/7-local-engines.md +1 -1
- package/docs/guide/es/integrations/8-flow-mode.md +69 -0
- package/docs/guide/es/pipeline/1-rails-and-jobs.md +33 -13
- package/docs/guide/es/pipeline/2-the-job-detail-view.md +38 -26
- package/docs/guide/es/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/es/pipeline/5-the-loop-builder.md +4 -4
- package/docs/guide/es/settings/1-themes.md +1 -1
- package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +10 -10
- package/docs/guide/es/settings/5-project-environment.md +1 -1
- package/docs/guide/es/settings/6-updates.md +24 -0
- package/docs/guide/es/settings/7-existing-projects.md +33 -0
- package/docs/guide/es/settings/8-accessibility.md +23 -0
- package/docs/guide/es/specs/1-specs-and-the-backlog.md +43 -7
- package/docs/guide/es/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/es/specs/3-add-spec-explore-mode.md +3 -3
- package/docs/guide/fr/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/fr/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/fr/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/fr/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/fr/getting-started/6-universal-search.md +34 -0
- package/docs/guide/fr/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/fr/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/fr/insights/3-code-explorer.md +1 -1
- package/docs/guide/fr/integrations/1-ai-providers.md +1 -1
- package/docs/guide/fr/integrations/2-plugins.md +1 -1
- package/docs/guide/fr/integrations/3-jira-integration.md +3 -3
- package/docs/guide/fr/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/fr/integrations/5-mcp-server.md +1 -1
- package/docs/guide/fr/integrations/6-agent-chat.md +11 -4
- package/docs/guide/fr/integrations/8-flow-mode.md +69 -0
- package/docs/guide/fr/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/fr/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/fr/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/fr/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/fr/settings/1-themes.md +1 -1
- package/docs/guide/fr/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/fr/settings/5-project-environment.md +1 -1
- package/docs/guide/fr/settings/6-updates.md +24 -0
- package/docs/guide/fr/settings/7-existing-projects.md +33 -0
- package/docs/guide/fr/settings/8-accessibility.md +23 -0
- package/docs/guide/fr/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/fr/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/fr/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/it/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/it/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/it/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/it/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/it/getting-started/6-universal-search.md +34 -0
- package/docs/guide/it/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/it/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/it/insights/3-code-explorer.md +1 -1
- package/docs/guide/it/integrations/1-ai-providers.md +1 -1
- package/docs/guide/it/integrations/2-plugins.md +1 -1
- package/docs/guide/it/integrations/3-jira-integration.md +3 -3
- package/docs/guide/it/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/it/integrations/5-mcp-server.md +1 -1
- package/docs/guide/it/integrations/6-agent-chat.md +11 -4
- package/docs/guide/it/integrations/8-flow-mode.md +69 -0
- package/docs/guide/it/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/it/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/it/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/it/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/it/settings/1-themes.md +1 -1
- package/docs/guide/it/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/it/settings/5-project-environment.md +1 -1
- package/docs/guide/it/settings/6-updates.md +24 -0
- package/docs/guide/it/settings/7-existing-projects.md +33 -0
- package/docs/guide/it/settings/8-accessibility.md +23 -0
- package/docs/guide/it/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/it/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/it/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/ja/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/ja/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/ja/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/ja/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/ja/getting-started/6-universal-search.md +34 -0
- package/docs/guide/ja/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/ja/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/ja/insights/3-code-explorer.md +1 -1
- package/docs/guide/ja/integrations/1-ai-providers.md +1 -1
- package/docs/guide/ja/integrations/2-plugins.md +1 -1
- package/docs/guide/ja/integrations/3-jira-integration.md +3 -3
- package/docs/guide/ja/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/ja/integrations/5-mcp-server.md +1 -1
- package/docs/guide/ja/integrations/6-agent-chat.md +11 -4
- package/docs/guide/ja/integrations/8-flow-mode.md +69 -0
- package/docs/guide/ja/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/ja/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/ja/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/ja/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/ja/settings/1-themes.md +1 -1
- package/docs/guide/ja/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/ja/settings/5-project-environment.md +1 -1
- package/docs/guide/ja/settings/6-updates.md +24 -0
- package/docs/guide/ja/settings/7-existing-projects.md +33 -0
- package/docs/guide/ja/settings/8-accessibility.md +23 -0
- package/docs/guide/ja/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/ja/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/ja/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/pt/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/pt/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/pt/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/pt/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/pt/getting-started/6-universal-search.md +34 -0
- package/docs/guide/pt/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/pt/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/pt/insights/3-code-explorer.md +1 -1
- package/docs/guide/pt/integrations/1-ai-providers.md +1 -1
- package/docs/guide/pt/integrations/2-plugins.md +1 -1
- package/docs/guide/pt/integrations/3-jira-integration.md +3 -3
- package/docs/guide/pt/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/pt/integrations/5-mcp-server.md +1 -1
- package/docs/guide/pt/integrations/6-agent-chat.md +12 -5
- package/docs/guide/pt/integrations/8-flow-mode.md +69 -0
- package/docs/guide/pt/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/pt/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/pt/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/pt/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/pt/settings/1-themes.md +1 -1
- package/docs/guide/pt/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/pt/settings/5-project-environment.md +1 -1
- package/docs/guide/pt/settings/6-updates.md +24 -0
- package/docs/guide/pt/settings/7-existing-projects.md +33 -0
- package/docs/guide/pt/settings/8-accessibility.md +23 -0
- package/docs/guide/pt/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/pt/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/pt/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/guide/zh/agents/1-meet-the-agents.md +1 -1
- package/docs/guide/zh/getting-started/2-installing-and-first-run.md +2 -0
- package/docs/guide/zh/getting-started/3-try-the-sample-project.md +35 -0
- package/docs/guide/zh/getting-started/{4-the-dashboard-tour.md → 5-the-dashboard-tour.md} +7 -3
- package/docs/guide/zh/getting-started/6-universal-search.md +34 -0
- package/docs/guide/zh/insights/1-analytics-and-cost-tracking.md +18 -4
- package/docs/guide/zh/insights/2-the-integrated-terminal.md +1 -1
- package/docs/guide/zh/insights/3-code-explorer.md +1 -1
- package/docs/guide/zh/integrations/1-ai-providers.md +1 -1
- package/docs/guide/zh/integrations/2-plugins.md +1 -1
- package/docs/guide/zh/integrations/3-jira-integration.md +3 -3
- package/docs/guide/zh/integrations/4-mobile-companion.md +1 -1
- package/docs/guide/zh/integrations/5-mcp-server.md +1 -1
- package/docs/guide/zh/integrations/6-agent-chat.md +11 -4
- package/docs/guide/zh/integrations/8-flow-mode.md +69 -0
- package/docs/guide/zh/pipeline/1-rails-and-jobs.md +21 -1
- package/docs/guide/zh/pipeline/2-the-job-detail-view.md +12 -0
- package/docs/guide/zh/pipeline/3-reviewing-a-delivery.md +43 -0
- package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/zh/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/zh/settings/1-themes.md +1 -1
- package/docs/guide/zh/settings/3-pipeline-telemetry-and-diagnostics.md +2 -2
- package/docs/guide/zh/settings/5-project-environment.md +1 -1
- package/docs/guide/zh/settings/6-updates.md +24 -0
- package/docs/guide/zh/settings/7-existing-projects.md +33 -0
- package/docs/guide/zh/settings/8-accessibility.md +23 -0
- package/docs/guide/zh/specs/1-specs-and-the-backlog.md +41 -3
- package/docs/guide/zh/specs/2-add-spec-quick-mode.md +1 -1
- package/docs/guide/zh/specs/3-add-spec-explore-mode.md +1 -1
- package/docs/internals/README.md +8 -0
- package/docs/internals/adding-a-provider.md +19 -2
- package/docs/internals/agent-actions-audit.md +101 -0
- package/docs/internals/agent-sessions.md +36 -1
- package/docs/internals/api-reference.md +190 -45
- package/docs/internals/architecture.md +53 -47
- package/docs/internals/companion-inbox-decisions.md +42 -0
- package/docs/internals/companion-rails-as-loops-contract.md +17 -6
- package/docs/internals/configuration.md +140 -9
- package/docs/internals/core-runtime-updates.md +4 -4
- package/docs/internals/existing-project-anchoring.md +168 -0
- package/docs/internals/flow-mode.md +668 -0
- package/docs/internals/legacy-implementation-notes.md +13 -0
- package/docs/internals/local-testing-feedback-2026-10.md +210 -0
- package/docs/internals/mcp-mission-audit.md +4 -0
- package/docs/internals/mission-rail-cards.md +10 -5
- package/docs/internals/mission-read-only-policy.md +152 -0
- package/docs/internals/modal-standard.md +181 -0
- package/docs/internals/openspec-workflow.md +32 -0
- package/docs/internals/operations-runbook.md +30 -0
- package/docs/internals/profiles.md +6 -3
- package/docs/internals/programmatic-agent-runtime.md +8 -0
- package/docs/internals/project-builder.md +1 -1
- package/docs/internals/review-packet.md +161 -9
- package/docs/internals/safe-pr-review-flow.md +135 -6
- package/docs/internals/source-map.md +413 -18
- package/docs/internals/spec-addenda.md +10 -0
- package/docs/internals/spec-triage.md +140 -0
- package/docs/internals/visual-design-audit.md +15 -2
- package/docs/local-providers.md +3 -0
- package/docs/mcp.md +21 -3
- package/docs/platforms/macos.md +1 -1
- package/docs/platforms/windows.md +2 -2
- package/docs/running-pipelines.md +22 -6
- package/docs/tracking-cost.md +54 -10
- package/local-runner/dist/specrails-local-runner.js +3851 -1178
- package/mcp-bridge/dist/specrails-mcp.js +3864 -1143
- package/package.json +10 -9
- package/server/dist/agent-mcp-config.js +37 -1
- package/server/dist/api-version.js +19 -0
- package/server/dist/command-resolver.js +4 -2
- package/server/dist/core-compat.js +1 -1
- package/server/dist/core-execution.js +2 -1
- package/server/dist/core-update-manager.js +71 -13
- package/server/dist/db/job-search.js +248 -0
- package/server/dist/db/jobs.js +6 -0
- package/server/dist/db/migrations.js +239 -0
- package/server/dist/db.js +9 -2
- package/server/dist/desktop-db.js +99 -5
- package/server/dist/desktop-router.js +126 -13
- package/server/dist/docs-router.js +67 -1
- package/server/dist/feature-flags.js +22 -0
- package/server/dist/index.js +30 -15
- package/server/dist/jira/jira-adf.js +13 -1
- package/server/dist/jira/jira-clarifications.js +146 -0
- package/server/dist/jira/jira-client.js +8 -1
- package/server/dist/jira/jira-db.js +41 -0
- package/server/dist/jira/jira-sync-manager.js +328 -25
- package/server/dist/mcp/guide.js +17 -7
- package/server/dist/mcp/tools/agents.js +1 -1
- package/server/dist/mcp/tools/analytics.js +15 -3
- package/server/dist/mcp/tools/app-settings.js +14 -1
- package/server/dist/mcp/tools/chat.js +1 -1
- package/server/dist/mcp/tools/env.js +4 -2
- package/server/dist/mcp/tools/jobs.js +96 -7
- package/server/dist/mcp/tools/loops.js +1 -1
- package/server/dist/mcp/tools/meta.js +10 -13
- package/server/dist/mcp/tools/rails.js +15 -1
- package/server/dist/mcp/tools/setup.js +1 -1
- package/server/dist/mcp/tools/specs.js +8 -5
- package/server/dist/mcp/tools/support.js +6 -3
- package/server/dist/mcp/tools/types.js +38 -1
- package/server/dist/mobile/mobile-admin-router.js +0 -16
- package/server/dist/mobile/mobile-gateway.js +0 -18
- package/server/dist/mobile/mobile-inbox.js +240 -0
- package/server/dist/mobile/mobile-missions.js +6 -8
- package/server/dist/mobile/mobile-router.js +9 -9
- package/server/dist/mobile/mobile-webrtc-peer.js +4 -54
- package/server/dist/mobile/mobile-ws.js +27 -4
- package/server/dist/modules/accounting/runtime/ai-invocations.js +4 -0
- package/server/dist/modules/accounting/runtime/decision-times.js +102 -0
- package/server/dist/modules/accounting/runtime/loop-economics.js +284 -0
- package/server/dist/modules/accounting/runtime/spending.js +7 -2
- package/server/dist/modules/accounting/runtime/what-if.js +87 -0
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +86 -5
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-controls.js +28 -2
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-metrics.js +15 -2
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings-router.js +21 -2
- package/server/dist/modules/agent-runtime/runtime/core-capabilities.js +55 -0
- package/server/dist/modules/agent-sessions/adapters/host-process.js +1 -1
- package/server/dist/modules/agent-sessions/domain/availability.js +16 -0
- package/server/dist/modules/agent-sessions/domain/protocol.js +8 -1
- package/server/dist/modules/agent-sessions/index.js +3 -1
- package/server/dist/modules/agent-sessions/runtime/core-sessions-availability.js +16 -0
- package/server/dist/modules/agents/runtime/agent-refine-manager.js +3 -1
- package/server/dist/modules/agents/runtime/agent-store.js +60 -73
- package/server/dist/modules/audit/adapters/http.js +66 -0
- package/server/dist/modules/audit/adapters/runtime.js +60 -0
- package/server/dist/modules/audit/adapters/sqlite.js +73 -0
- package/server/dist/modules/audit/application.js +190 -0
- package/server/dist/modules/audit/domain.js +434 -0
- package/server/dist/modules/audit/index.js +27 -0
- package/server/dist/modules/audit/ports.js +2 -0
- package/server/dist/modules/browser/runtime/browser-capture-manager.js +18 -141
- package/server/dist/modules/browser/runtime/browser-capture-types.js +1 -10
- package/server/dist/modules/browser/runtime/browser-playwright.js +0 -19
- package/server/dist/modules/code/runtime/file-provenance.js +23 -0
- package/server/dist/modules/conversations/runtime/chat-manager.js +5 -2
- package/server/dist/modules/delivery/adapters/decisions/chains.js +1 -0
- package/server/dist/modules/delivery/adapters/decisions/create.js +19 -1
- package/server/dist/modules/delivery/adapters/decisions/discard.js +2 -0
- package/server/dist/modules/delivery/adapters/decisions/local-changes.js +427 -0
- package/server/dist/modules/delivery/adapters/decisions/merge-local.js +80 -6
- package/server/dist/modules/delivery/adapters/decisions/observations.js +5 -0
- package/server/dist/modules/delivery/adapters/decisions/ownership.js +2 -1
- package/server/dist/modules/delivery/adapters/decisions/transitions.js +9 -0
- package/server/dist/modules/delivery/adapters/review-wip-store.js +37 -0
- package/server/dist/modules/delivery/domain/review-wip.js +71 -0
- package/server/dist/modules/delivery/index.js +9 -1
- package/server/dist/modules/delivery/runtime/delivery-changes.js +355 -0
- package/server/dist/modules/delivery/runtime/delivery-evidence.js +249 -8
- package/server/dist/modules/delivery/runtime/flow-review-legacy.js +99 -0
- package/server/dist/modules/delivery/runtime/flow-review-outcome.js +107 -0
- package/server/dist/modules/delivery/runtime/flow-worktree-handoff.js +32 -0
- package/server/dist/modules/delivery/runtime/flow-worktree-return.js +87 -0
- package/server/dist/modules/delivery/runtime/isolated-worktree.js +380 -0
- package/server/dist/modules/delivery/runtime/local-restore-branch.js +325 -0
- package/server/dist/modules/delivery/runtime/local-restore-resolver.js +48 -0
- package/server/dist/modules/delivery/runtime/local-stash.js +423 -0
- package/server/dist/modules/delivery/runtime/multi-repo-execution.js +27 -1
- package/server/dist/modules/delivery/runtime/phase3-harvest.js +40 -0
- package/server/dist/modules/delivery/runtime/pr-body.js +50 -0
- package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +169 -166
- package/server/dist/modules/delivery/runtime/rail-launch-parser.js +5 -2
- package/server/dist/modules/delivery/runtime/rail-pr-decision.js +7 -1
- package/server/dist/modules/delivery/runtime/rail-pr-store.js +193 -12
- package/server/dist/modules/delivery/runtime/rails-router.js +267 -5
- package/server/dist/modules/delivery/runtime/review-brief.js +208 -0
- package/server/dist/modules/delivery/runtime/review-packet.js +41 -2
- package/server/dist/modules/delivery/runtime/review-wip-gate.js +67 -0
- package/server/dist/modules/delivery/runtime/run-records.js +267 -0
- package/server/dist/modules/delivery/runtime/run-review-diagnosis.js +102 -0
- package/server/dist/modules/execution/adapters/budget-storage.js +76 -0
- package/server/dist/modules/execution/application/enforce-budget.js +17 -2
- package/server/dist/modules/execution/domain/agent-env.js +98 -0
- package/server/dist/modules/execution/domain/daily-budget.js +36 -0
- package/server/dist/modules/execution/domain/spend-caps.js +166 -0
- package/server/dist/modules/execution/index.js +34 -1
- package/server/dist/modules/execution/runtime/budget-overview.js +76 -0
- package/server/dist/modules/execution/runtime/daily-budget-gate.js +86 -0
- package/server/dist/modules/execution/runtime/interactive-job-session.js +8 -0
- package/server/dist/modules/execution/runtime/launch-forecast.js +33 -0
- package/server/dist/modules/execution/runtime/queue-manager.js +54 -15
- package/server/dist/modules/execution/runtime/run-duration-stats.js +31 -13
- package/server/dist/modules/flow/adapters/bindings.js +1089 -0
- package/server/dist/modules/flow/adapters/http.js +147 -0
- package/server/dist/modules/flow/adapters/sqlite.js +121 -0
- package/server/dist/modules/flow/application.js +805 -0
- package/server/dist/modules/flow/domain.js +790 -0
- package/server/dist/modules/flow/index.js +34 -0
- package/server/dist/modules/flow/ports.js +2 -0
- package/server/dist/modules/inbox/adapters/http.js +21 -0
- package/server/dist/modules/inbox/adapters/project-source.js +233 -0
- package/server/dist/modules/inbox/application.js +28 -0
- package/server/dist/modules/inbox/domain.js +43 -0
- package/server/dist/modules/inbox/index.js +10 -0
- package/server/dist/modules/inbox/ports.js +2 -0
- package/server/dist/modules/loops/runtime/loop-definition-run.js +9 -0
- package/server/dist/modules/loops/runtime/loop-definition.js +5 -2
- package/server/dist/modules/loops/runtime/loop-executors.js +90 -9
- package/server/dist/modules/loops/runtime/loop-factory.js +30 -2
- package/server/dist/modules/loops/runtime/loop-flow-spec-recipe.js +166 -0
- package/server/dist/modules/loops/runtime/loop-graph.js +1 -1
- package/server/dist/modules/loops/runtime/loop-role-engines.js +4 -1
- package/server/dist/modules/loops/runtime/loop-run-manager.js +267 -10
- package/server/dist/modules/loops/runtime/loop-runs-store.js +21 -5
- package/server/dist/modules/loops/runtime/loop-templates.js +55 -12
- package/server/dist/modules/missions/runtime/agent-chat-manager.js +283 -20
- package/server/dist/modules/missions/runtime/agent-chat-router.js +96 -21
- package/server/dist/modules/missions/runtime/agent-failure-briefing.js +11 -3
- package/server/dist/modules/missions/runtime/agent-fence-promotion.js +9 -1
- package/server/dist/modules/missions/runtime/agent-flow-prompt.js +64 -0
- package/server/dist/modules/missions/runtime/agent-input-store.js +9 -4
- package/server/dist/modules/missions/runtime/agent-operator-prompt.js +100 -14
- package/server/dist/modules/missions/runtime/agent-session-store.js +88 -27
- package/server/dist/modules/missions/runtime/core-session-runner.js +89 -9
- package/server/dist/modules/missions/runtime/flow-turn-context.js +17 -0
- package/server/dist/modules/missions/runtime/mission-core-sessions.js +295 -55
- package/server/dist/modules/missions/runtime/mission-run-notify.js +2 -0
- package/server/dist/modules/missions/runtime/mission-session-projector.js +56 -19
- package/server/dist/modules/missions/runtime/mission-tool-policy.js +47 -0
- package/server/dist/modules/onboarding/adapters/http.js +78 -0
- package/server/dist/modules/onboarding/adapters/providers.js +41 -0
- package/server/dist/modules/onboarding/adapters/runtime.js +130 -0
- package/server/dist/modules/onboarding/application.js +133 -0
- package/server/dist/modules/onboarding/catalog.js +217 -0
- package/server/dist/modules/onboarding/domain.js +102 -0
- package/server/dist/modules/onboarding/index.js +20 -0
- package/server/dist/modules/onboarding/ports.js +2 -0
- package/server/dist/modules/project-rules/adapters/http.js +91 -0
- package/server/dist/modules/project-rules/domain.js +122 -0
- package/server/dist/modules/project-rules/runtime/rules-inventory-runs.js +97 -0
- package/server/dist/modules/project-rules/runtime/rules-store.js +109 -0
- package/server/dist/modules/project-settings/adapters/http.js +13 -0
- package/server/dist/modules/project-settings/adapters/sqlite.js +78 -8
- package/server/dist/modules/project-settings/domain.js +47 -1
- package/server/dist/modules/project-settings/index.js +7 -1
- package/server/dist/modules/recovery/adapters/sqlite.js +28 -0
- package/server/dist/modules/recovery/domain.js +162 -0
- package/server/dist/modules/recovery/index.js +16 -0
- package/server/dist/modules/specs/adapters/timeline-http.js +101 -0
- package/server/dist/modules/specs/domain/handoff-labels.js +371 -0
- package/server/dist/modules/specs/domain/handoff.js +260 -0
- package/server/dist/modules/specs/domain/non-goals.js +101 -0
- package/server/dist/modules/specs/domain/timeline.js +164 -0
- package/server/dist/modules/specs/domain/triage.js +320 -0
- package/server/dist/modules/specs/runtime/contract-refine-runner.js +3 -2
- package/server/dist/modules/specs/runtime/generated-spec-parser.js +75 -0
- package/server/dist/modules/specs/runtime/proposal-manager.js +4 -3
- package/server/dist/modules/specs/runtime/smash-runner.js +2 -1
- package/server/dist/modules/specs/runtime/spec-addenda.js +31 -0
- package/server/dist/modules/specs/runtime/spec-draft-parser.js +6 -1
- package/server/dist/modules/specs/runtime/spec-generation.js +431 -0
- package/server/dist/modules/specs/runtime/spec-handoff.js +103 -0
- package/server/dist/modules/specs/runtime/spec-history.js +376 -0
- package/server/dist/modules/specs/runtime/spec-launcher-manager.js +4 -3
- package/server/dist/modules/specs/runtime/spec-search.js +117 -0
- package/server/dist/modules/specs/runtime/ticket-store.js +47 -2
- package/server/dist/modules/specs/runtime/ticket-trash-service.js +62 -0
- package/server/dist/modules/specs/runtime/ticket-trash.js +193 -0
- package/server/dist/modules/specs/runtime/triage-runner.js +171 -0
- package/server/dist/modules/specs/runtime/triage.js +365 -0
- package/server/dist/modules/terminals/domain/app-urls.js +96 -0
- package/server/dist/modules/terminals/runtime/app-urls.js +77 -0
- package/server/dist/modules/terminals/runtime/background-process-service.js +25 -28
- package/server/dist/project-env.js +60 -0
- package/server/dist/project-git.js +65 -0
- package/server/dist/project-registry.js +264 -27
- package/server/dist/project-router-background-processes.js +27 -3
- package/server/dist/project-router-git.js +30 -0
- package/server/dist/project-router-helpers.js +5 -30
- package/server/dist/project-router-jobs.js +49 -1
- package/server/dist/project-router-loop-runs.js +72 -2
- package/server/dist/project-router-rules.js +54 -0
- package/server/dist/project-router-search.js +52 -0
- package/server/dist/project-router-settings.js +6 -0
- package/server/dist/project-router-setup.js +1 -1
- package/server/dist/project-router-spending.js +138 -0
- package/server/dist/project-router-tickets.js +246 -427
- package/server/dist/project-router.js +7 -0
- package/server/dist/providers/claude-adapter.js +25 -3
- package/server/dist/providers/codex-adapter.js +9 -1
- package/server/dist/providers/gemini-adapter.js +6 -1
- package/server/dist/providers/kimi-adapter.js +2 -0
- package/server/dist/providers/local-adapter.js +2 -0
- package/server/dist/providers/runtime.js +8 -0
- package/server/dist/schemas/agent-runtime.schema.json +3 -1
- package/server/dist/schemas/workflow-definition.schema.json +1 -0
- package/server/dist/setup-manager.js +19 -1
- package/server/dist/transient-children.js +25 -8
- package/server/dist/update-channel.js +21 -0
- package/server/dist/util/search-snippet.js +74 -0
- package/server/dist/worktree-manager.js +19 -8
- package/client/dist/assets/ActivityFeedPage-Dtp7EyHc.js +0 -1
- package/client/dist/assets/AgentBrowserCapture-CLqlEFw8.js +0 -1
- package/client/dist/assets/AgentModeAnalyticsPane-B8_hM3Tw.js +0 -2
- package/client/dist/assets/AgentModeCodePane-CNF8ZNjE.js +0 -2
- package/client/dist/assets/AgentModeJobsPane-CJpJbO9m.js +0 -1
- package/client/dist/assets/AgentsPage-BC8XSR79.js +0 -120
- package/client/dist/assets/AnalyticsPage-Cdv4jLtW.js +0 -1
- package/client/dist/assets/BarChart-BDMqVFJy.js +0 -55
- package/client/dist/assets/CodePage-DI1kegAr.js +0 -3
- package/client/dist/assets/DesktopAnalyticsPage-Bdp8E8U6.js +0 -1
- package/client/dist/assets/DocsDialog-Bm4RS7FX.js +0 -11
- package/client/dist/assets/DocsPage-DihYcU8r.js +0 -11
- package/client/dist/assets/ExportDropdown-Bb1lHx3r.js +0 -1
- package/client/dist/assets/IntegrationsPage-EAipiDWm.js +0 -1
- package/client/dist/assets/InteractiveJobComposer-BO6ASN-2.js +0 -19
- package/client/dist/assets/JobDetailModal-CuPYq7tP.js +0 -1
- package/client/dist/assets/JobDetailPage-BusMjJi9.js +0 -1
- package/client/dist/assets/JobsPage-C0QbsF2d.js +0 -1
- package/client/dist/assets/LoopBuilderPage-B7TlU4iS.js +0 -1
- package/client/dist/assets/LoopPreviewModal-BRWtXOD2.js +0 -1
- package/client/dist/assets/LoopsPage-C4q1DmCE.js +0 -2
- package/client/dist/assets/MinimizedChatsContext-DHfigjHS.js +0 -1
- package/client/dist/assets/PluginsPage-Z1JHSMdR.js +0 -2
- package/client/dist/assets/ProjectSettingsDialog-BUNj0tvN.js +0 -1
- package/client/dist/assets/RepositoryDeliveries-B4ybHOyB.js +0 -5
- package/client/dist/assets/ReviewPacketPage-hwfPNjyy.js +0 -4
- package/client/dist/assets/TemplatePreviewModal-V7FpMWuw.js +0 -1
- package/client/dist/assets/TicketDetailModalContext-Dkwo2cDs.js +0 -16
- package/client/dist/assets/Trans-BbFxRFtR.js +0 -1
- package/client/dist/assets/activity-B-rp4h_v.js +0 -1
- package/client/dist/assets/activity-C6kJpm9q.js +0 -1
- package/client/dist/assets/activity-CGx4kb_j.js +0 -1
- package/client/dist/assets/activity-CnoX2bH7.js +0 -1
- package/client/dist/assets/activity-DAyekdlt.js +0 -1
- package/client/dist/assets/activity-DCxtpT7j.js +0 -1
- package/client/dist/assets/activity-DiyjsgQV.js +0 -1
- package/client/dist/assets/activity-JzwRaWPD.js +0 -1
- package/client/dist/assets/addspec-BOvgmcgk.js +0 -1
- package/client/dist/assets/addspec-Clmyfn_R.js +0 -1
- package/client/dist/assets/addspec-CsNaBpHp.js +0 -1
- package/client/dist/assets/addspec-D2tvWmmV.js +0 -1
- package/client/dist/assets/addspec-D3nFwvD0.js +0 -1
- package/client/dist/assets/addspec-DVLEhK3w.js +0 -1
- package/client/dist/assets/addspec-DXbK-tb0.js +0 -1
- package/client/dist/assets/addspec-OHG8DFEn.js +0 -1
- package/client/dist/assets/agent-5bSixVzz.js +0 -1
- package/client/dist/assets/agent-BR4EHfhq.js +0 -1
- package/client/dist/assets/agent-C0IKkJP8.js +0 -1
- package/client/dist/assets/agent-C7li9ayC.js +0 -1
- package/client/dist/assets/agent-D0dRmEen.js +0 -1
- package/client/dist/assets/agent-DZVGHm7H.js +0 -1
- package/client/dist/assets/agent-Dip4h2YE.js +0 -1
- package/client/dist/assets/agent-Pp-P-n1p.js +0 -1
- package/client/dist/assets/agentRuntime-BxF81z52.js +0 -1
- package/client/dist/assets/agentRuntime-BxYS5V7u.js +0 -1
- package/client/dist/assets/agentRuntime-Dc9HG3BA.js +0 -1
- package/client/dist/assets/agents-B6ZsnARo.js +0 -1
- package/client/dist/assets/agents-BORdhe0K.js +0 -1
- package/client/dist/assets/agents-C6aq9Oqs.js +0 -1
- package/client/dist/assets/agents-Cbsc4bcX.js +0 -1
- package/client/dist/assets/agents-D0uYR6hq.js +0 -1
- package/client/dist/assets/agents-Doe1sHY5.js +0 -1
- package/client/dist/assets/agents-DyNi_I9m.js +0 -1
- package/client/dist/assets/agents-StKxiTg0.js +0 -1
- package/client/dist/assets/agentstudio-7cYCXn-L.js +0 -1
- package/client/dist/assets/agentstudio-BHWQh8G3.js +0 -1
- package/client/dist/assets/agentstudio-BjnWHyRs.js +0 -1
- package/client/dist/assets/agentstudio-BkV8vcK4.js +0 -1
- package/client/dist/assets/agentstudio-BzugqB_N.js +0 -1
- package/client/dist/assets/agentstudio-CWbp7KvH.js +0 -1
- package/client/dist/assets/agentstudio-DG6plf5o.js +0 -1
- package/client/dist/assets/agentstudio-DkZVF-Cc.js +0 -1
- package/client/dist/assets/analytics-B1DIQd4m.js +0 -1
- package/client/dist/assets/analytics-BAIZ9vE_.js +0 -1
- package/client/dist/assets/analytics-BTqgmgBd.js +0 -1
- package/client/dist/assets/analytics-BWynXPEm.js +0 -1
- package/client/dist/assets/analytics-DGcUsQ44.js +0 -1
- package/client/dist/assets/analytics-GnSnpJ4W.js +0 -1
- package/client/dist/assets/analytics-TWgYaoO0.js +0 -1
- package/client/dist/assets/analytics-kJy6Tuko.js +0 -1
- package/client/dist/assets/atom-one-dark-qiGhVQxg.js +0 -1
- package/client/dist/assets/builder-B9gorTnT.js +0 -1
- package/client/dist/assets/builder-Bvw5s3Mi.js +0 -1
- package/client/dist/assets/builder-CL5l4dU3.js +0 -1
- package/client/dist/assets/builder-CVDTVrQX.js +0 -1
- package/client/dist/assets/builder-CpS9liE9.js +0 -1
- package/client/dist/assets/builder-DNctIL9Q.js +0 -1
- package/client/dist/assets/builder-De2NxX6o.js +0 -1
- package/client/dist/assets/builder-DeYT7Y-m.js +0 -1
- package/client/dist/assets/button-4FS1ZDTp.js +0 -1
- package/client/dist/assets/chat-D_I7nU5K.js +0 -1
- package/client/dist/assets/chevron-up-6EFqEHBj.js +0 -1
- package/client/dist/assets/chunk-OB3PAWPO-B1EMk45A.js +0 -3
- package/client/dist/assets/clsx-CjueKrWZ.js +0 -1
- package/client/dist/assets/code-B37GRg9C.js +0 -1
- package/client/dist/assets/code-BBOEZbf9.js +0 -1
- package/client/dist/assets/code-BRm-jcyx.js +0 -1
- package/client/dist/assets/code-CF7w62CR.js +0 -1
- package/client/dist/assets/code-CLuvJt2r.js +0 -1
- package/client/dist/assets/code-D0RCm59f.js +0 -1
- package/client/dist/assets/code-DaZ-ZwCT.js +0 -1
- package/client/dist/assets/code-iIHkGaCL.js +0 -1
- package/client/dist/assets/commands-0XjAftla.js +0 -1
- package/client/dist/assets/commands-BAWSYHjQ.js +0 -1
- package/client/dist/assets/commands-BBwowgiE.js +0 -1
- package/client/dist/assets/commands-BacjIZLN.js +0 -1
- package/client/dist/assets/commands-Bs62IAZ3.js +0 -1
- package/client/dist/assets/commands-CLPdh-Hh.js +0 -1
- package/client/dist/assets/commands-DlbFzgrp.js +0 -1
- package/client/dist/assets/commands-LjPSsi5F.js +0 -1
- package/client/dist/assets/common-Bdi0qN4S.js +0 -1
- package/client/dist/assets/common-Bhb9zN1P.js +0 -1
- package/client/dist/assets/common-BykKlZg1.js +0 -1
- package/client/dist/assets/common-CvnNNSJA.js +0 -1
- package/client/dist/assets/common-D5zk_mqq.js +0 -1
- package/client/dist/assets/common-DQNO_al5.js +0 -1
- package/client/dist/assets/common-Dax30Vmp.js +0 -1
- package/client/dist/assets/common-DkllpVSb.js +0 -1
- package/client/dist/assets/core-B3mKBIh5.js +0 -1
- package/client/dist/assets/dashboard-B1ndRHuC.js +0 -1
- package/client/dist/assets/dashboard-BX7KXiqA.js +0 -1
- package/client/dist/assets/dashboard-B_BSNxcN.js +0 -1
- package/client/dist/assets/dashboard-CCeFN7-V.js +0 -1
- package/client/dist/assets/dashboard-CRl0WtFJ.js +0 -1
- package/client/dist/assets/dashboard-XGdQ5mjw.js +0 -1
- package/client/dist/assets/dashboard-_oltA6Jd.js +0 -1
- package/client/dist/assets/dashboard-bAuf5KVk.js +0 -1
- package/client/dist/assets/dialog-DtdR05v1.js +0 -45
- package/client/dist/assets/dist-js-CJ_2XX1Y.js +0 -1
- package/client/dist/assets/event-Bt7f3wXe.js +0 -1
- package/client/dist/assets/explore-BG99VGpL.js +0 -1
- package/client/dist/assets/explore-C0TjprJW.js +0 -1
- package/client/dist/assets/explore-C2dgEo7q.js +0 -1
- package/client/dist/assets/explore-C8NDHbob.js +0 -1
- package/client/dist/assets/explore-CWWgzQGR.js +0 -1
- package/client/dist/assets/explore-CcQXpdtS.js +0 -1
- package/client/dist/assets/explore-DgBACn39.js +0 -1
- package/client/dist/assets/explore-DsXAgnmJ.js +0 -1
- package/client/dist/assets/file-text-C0blZHLh.js +0 -1
- package/client/dist/assets/formatDistanceToNow-NjPHBLfB.js +0 -1
- package/client/dist/assets/getTimezoneOffsetInMilliseconds-vJ7qUoqN.js +0 -1
- package/client/dist/assets/git-branch-yf6LE1Bw.js +0 -1
- package/client/dist/assets/index-BgbCbIua.css +0 -2
- package/client/dist/assets/index-Ce4yZtKf.js +0 -83
- package/client/dist/assets/integrations-BkpRUbvp.js +0 -1
- package/client/dist/assets/integrations-Bo8qbJf4.js +0 -1
- package/client/dist/assets/integrations-CmSrKzZb.js +0 -1
- package/client/dist/assets/integrations-DGtq26Rr.js +0 -1
- package/client/dist/assets/integrations-De38GFnQ.js +0 -1
- package/client/dist/assets/integrations-Dw6zdtb-.js +0 -1
- package/client/dist/assets/integrations-Dwl9KQp0.js +0 -1
- package/client/dist/assets/integrations-Refg_d2I.js +0 -1
- package/client/dist/assets/jira-B6OYw4CJ.js +0 -1
- package/client/dist/assets/jira-BTF6RaOe.js +0 -1
- package/client/dist/assets/jira-CEetIB2q.js +0 -1
- package/client/dist/assets/jira-CIzsZLw5.js +0 -1
- package/client/dist/assets/jira-Daw9tmpI.js +0 -1
- package/client/dist/assets/jira-FXr7u2lh.js +0 -1
- package/client/dist/assets/jira-LaNQn7yl.js +0 -1
- package/client/dist/assets/jira-api-Cabj-H0J.js +0 -1
- package/client/dist/assets/job-time-BCL7wee9.js +0 -1
- package/client/dist/assets/jobs-ARwD85B9.js +0 -1
- package/client/dist/assets/jobs-BMF1w4WT.js +0 -1
- package/client/dist/assets/jobs-CBfzGLwm.js +0 -1
- package/client/dist/assets/jobs-CPjiluBY.js +0 -1
- package/client/dist/assets/jobs-CQQd58pY.js +0 -1
- package/client/dist/assets/jobs-De3EqaO0.js +0 -1
- package/client/dist/assets/jobs-Du9-Ei9a.js +0 -1
- package/client/dist/assets/jobs-qMHbnxwC.js +0 -1
- package/client/dist/assets/layers-BCLTgHXO.js +0 -1
- package/client/dist/assets/loader-circle-BqV9xYGf.js +0 -1
- package/client/dist/assets/loop-layout-CyXj9223.js +0 -7
- package/client/dist/assets/loops-B2PhQLKR.js +0 -1
- package/client/dist/assets/loops-BqbF46st.js +0 -1
- package/client/dist/assets/loops-CINnHbfI.js +0 -1
- package/client/dist/assets/loops-D-3XhH04.js +0 -1
- package/client/dist/assets/loops-DKkEEjZ_.js +0 -1
- package/client/dist/assets/loops-DzWR5-v6.js +0 -1
- package/client/dist/assets/loops-WyWDkhok.js +0 -1
- package/client/dist/assets/loops-scD5fIBf.js +0 -1
- package/client/dist/assets/mcp-6rMoZfEO.js +0 -1
- package/client/dist/assets/mcp-BD8sL5mP.js +0 -1
- package/client/dist/assets/mcp-BkcA3I5s.js +0 -1
- package/client/dist/assets/mcp-CCpSelOh.js +0 -1
- package/client/dist/assets/mcp-CUAN6ORK.js +0 -1
- package/client/dist/assets/mcp-CqbRxRTE.js +0 -1
- package/client/dist/assets/mcp-DP2YfVhO.js +0 -1
- package/client/dist/assets/mcp-DUVQamDz.js +0 -1
- package/client/dist/assets/narration-BEKMVxGm.js +0 -1
- package/client/dist/assets/narration-CjLwGKap.js +0 -1
- package/client/dist/assets/narration-DANWuGsW.js +0 -1
- package/client/dist/assets/narration-DGeEDWiT.js +0 -1
- package/client/dist/assets/narration-DJgpGwIP.js +0 -1
- package/client/dist/assets/narration-DbHnz0qV.js +0 -1
- package/client/dist/assets/narration-bZSsTZG8.js +0 -1
- package/client/dist/assets/narration-i6aKJKEc.js +0 -1
- package/client/dist/assets/nav--u7iPYlS.js +0 -1
- package/client/dist/assets/nav-C5Jgfaby.js +0 -1
- package/client/dist/assets/nav-CAna_Wpt.js +0 -1
- package/client/dist/assets/nav-CCLqeyHo.js +0 -1
- package/client/dist/assets/nav-Cf3c90Jk.js +0 -1
- package/client/dist/assets/nav-DMYQaQjR.js +0 -1
- package/client/dist/assets/nav-Df_PkZ9F.js +0 -1
- package/client/dist/assets/nav-VyNGBJwj.js +0 -1
- package/client/dist/assets/packet-8nn9RsU7.js +0 -1
- package/client/dist/assets/packet-B0H15elv.js +0 -1
- package/client/dist/assets/packet-BQvBgrwh.js +0 -1
- package/client/dist/assets/packet-BR7mO0-a.js +0 -1
- package/client/dist/assets/packet-BgcQ6q_K.js +0 -1
- package/client/dist/assets/packet-D2s92Jnn.js +0 -1
- package/client/dist/assets/packet-YbtcD1HS.js +0 -1
- package/client/dist/assets/packet-c0Qj_9eX.js +0 -1
- package/client/dist/assets/project-repositories-Cnnuj9Ia.js +0 -1
- package/client/dist/assets/rotate-ccw-DalJAQQX.js +0 -1
- package/client/dist/assets/settings-B1NV8Ow9.js +0 -1
- package/client/dist/assets/settings-BQ8XFZeE.js +0 -1
- package/client/dist/assets/settings-BRkxfBbO.js +0 -1
- package/client/dist/assets/settings-C_CcU1dP.js +0 -1
- package/client/dist/assets/settings-Cto9n0eL.js +0 -1
- package/client/dist/assets/settings-Pyw8uYtL.js +0 -1
- package/client/dist/assets/settings-b3HVCNNd.js +0 -1
- package/client/dist/assets/settings-hdive4u6.js +0 -1
- package/client/dist/assets/setup-Be485n2u.js +0 -1
- package/client/dist/assets/setup-CKGUxKr-.js +0 -1
- package/client/dist/assets/setup-Ck1Uwd7_.js +0 -1
- package/client/dist/assets/setup-Cm774a6v.js +0 -1
- package/client/dist/assets/setup-DIqMQpxt.js +0 -1
- package/client/dist/assets/setup-DfCsoNFL.js +0 -1
- package/client/dist/assets/setup-DkeE8mP0.js +0 -1
- package/client/dist/assets/setup-xVntVaz1.js +0 -1
- package/client/dist/assets/specs-Bqvtz2kz.js +0 -1
- package/client/dist/assets/specs-CKes-kz6.js +0 -1
- package/client/dist/assets/specs-CfXxPDNB.js +0 -1
- package/client/dist/assets/specs-CyF9HuTI.js +0 -1
- package/client/dist/assets/specs-DMj035Mt.js +0 -1
- package/client/dist/assets/specs-DfIdoU5L.js +0 -1
- package/client/dist/assets/specs-j5pGLQeU.js +0 -1
- package/client/dist/assets/specs-xW5pkkB7.js +0 -1
- package/client/dist/assets/spending-CQnrWiR3.js +0 -1
- package/client/dist/assets/square-D0JTbRSR.js +0 -1
- package/client/dist/assets/tauri-shell-DE6LfGPw.js +0 -2
- package/client/dist/assets/terminal-BAzpHtpY.js +0 -1
- package/client/dist/assets/terminal-C7dHeR3x.js +0 -1
- package/client/dist/assets/terminal-CMla5Qsz.js +0 -1
- package/client/dist/assets/terminal-CdNXH-n9.js +0 -1
- package/client/dist/assets/terminal-Cw5bZsmV.js +0 -1
- package/client/dist/assets/terminal-DFUP4eNv.js +0 -1
- package/client/dist/assets/terminal-DGqljeK_.js +0 -1
- package/client/dist/assets/terminal-cU70NodO.js +0 -1
- package/client/dist/assets/tickets--tiSOCcn.js +0 -1
- package/client/dist/assets/tickets-BUJ3DMWU.js +0 -1
- package/client/dist/assets/tickets-C1WNPODq.js +0 -1
- package/client/dist/assets/tickets-CDjhWmiE.js +0 -1
- package/client/dist/assets/tickets-CLgPC3uO.js +0 -1
- package/client/dist/assets/tickets-D41ZMQpf.js +0 -1
- package/client/dist/assets/tickets-DEaQC06P.js +0 -1
- package/client/dist/assets/tickets-kcMzbLCp.js +0 -1
- package/client/dist/assets/trash-D8zYUmTg.js +0 -1
- package/client/dist/assets/useDesktop-BjLT0_EE.js +0 -1
- package/client/dist/assets/useRuntimeRuns-C97qEqMg.js +0 -1
- package/client/dist/assets/useSharedWebSocket-Bj4LMp7b.js +0 -2
- package/client/dist/assets/utils-BC4DHlz2.js +0 -1
- package/docs/guide/en/getting-started/4-the-dashboard-tour.md +0 -48
- package/docs/guide/es/getting-started/4-the-dashboard-tour.md +0 -48
- package/server/dist/mobile/mobile-preview-channel.js +0 -179
- package/server/dist/mobile/mobile-preview.js +0 -366
- package/server/dist/modules/browser/domain/preview-origins.js +0 -117
- package/server/dist/modules/browser/runtime/preview-targets.js +0 -80
- /package/client/dist/assets/{atom-one-dark-B-oHczHB.css → DocView-B-oHczHB.css} +0 -0
- /package/docs/guide/de/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/en/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/es/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/fr/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/it/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/ja/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/pt/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
- /package/docs/guide/zh/getting-started/{3-adding-your-first-project.md → 4-adding-your-first-project.md} +0 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-BbYvbtY8.js";import{t as r}from"./react-dom-DDD8FYaU.js";import{p as i}from"./chunk-OB3PAWPO-BBaq6pUk.js";import{_ as a,a as o,t as s}from"./api-DOGbyfTO.js";import{t as c}from"./Trans-C6J0cLyh.js";import{n as l,t as u}from"./createLucideIcon-DtODIU64.js";import{n as d,s as f}from"./provider-capabilities-DtwcTme4.js";import{a as p,i as m,n as h,r as g,t as _}from"./spending-CVH8VREb.js";import{t as v}from"./chevron-right-CwMAj0w_.js";import{t as y}from"./refresh-cw-DfyTkbsf.js";import{t as b}from"./triangle-alert-Cxpn8bqr.js";import{n as x}from"./utils-ELimjS2Y.js";import{n as S,r as C}from"./useDesktop-BuOp2-MR.js";import{t as w}from"./formatDistanceToNow-DLMIOS0N.js";import{a as ee,i as te,n as ne,r as re,t as ie}from"./select-xA3pSmqE.js";import{t as T}from"./format-BODoFIw6.js";import{Cn as ae,E,Nn as oe,On as se,Tt as ce,dt as le,p as D,pt as O}from"./index-DHzB0T26.js";import{t as ue}from"./page-header-BStSHkP8.js";import{t as de}from"./ExportDropdown-C5-o8y3K.js";import{$ as k,A as fe,At as A,B as j,Bt as pe,C as me,Ct as M,D as he,Dt as N,E as ge,Et as P,F as _e,Ft as F,G as ve,H as I,Ht as ye,I as L,It as be,K as R,L as z,Lt as xe,M as Se,N as Ce,Nt as B,O as we,Ot as Te,P as V,Q as Ee,R as De,S as Oe,St as ke,T as Ae,Tt as je,U as Me,V as Ne,Vt as Pe,W as Fe,X as Ie,Y as Le,_ as Re,_t as ze,a as Be,at as Ve,b as He,c as Ue,dt as We,et as Ge,g as Ke,gt as qe,h as Je,ht as Ye,i as Xe,it as Ze,j as Qe,jt as $e,kt as et,l as tt,lt as nt,m as rt,mt as it,n as at,nt as ot,o as H,ot as st,p as ct,pt as lt,q as ut,r as dt,rt as ft,s as pt,st as mt,t as ht,tt as gt,u as _t,ut as vt,v as yt,vt as bt,w as xt,wt as St,xt as Ct,y as wt,yt as U,z as Tt,zt as Et}from"./BudgetCard-DP_jxwaD.js";import{t as Dt}from"./CostValue-Bvn8674q.js";var Ot={name:`arrow-down-right`,size:24,node:[[`path`,{d:`m7 7 10 10`,key:`1fmybs`}],[`path`,{d:`M17 7v10H7`,key:`6fjiku`}]]};Ot.node;var kt=u(Ot),At={name:`scale`,size:24,node:[[`path`,{d:`M12 3v18`,key:`108xh3`}],[`path`,{d:`m19 8 3 8a5 5 0 0 1-6 0zV7`,key:`zcdpyk`}],[`path`,{d:`M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1`,key:`1yorad`}],[`path`,{d:`m5 8 3 8a5 5 0 0 1-6 0zV7`,key:`eua70x`}],[`path`,{d:`M7 21h10`,key:`1b0cd5`}]]};At.node;var jt=u(At),Mt={name:`timer`,size:24,node:[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]};Mt.node;var Nt=u(Mt),W=e(t()),G=n(),Pt=[`job`,`explore-spec`,`quick-spec`,`ai-edit`,`chat-sidebar`,`spec-launcher`,`proposal`,`agent-studio`,`setup`,`smash`,`file-summary`,`loop`,`flow`,`triage`];function Ft({data:e,loading:t,period:n}){let{t:r}=l(`analytics`),i=ye();if(t&&!e)return(0,G.jsx)(D,{className:`h-44`});if(!e)return null;let a=e.summary.totalCostUsd,o=e.summary.totalRuns,s=e.summary.totalTokens,c=e.summary.totalEstimatedCostUsd??0,u=typeof e.summary.pricedRuns==`number`||typeof e.summary.unpricedRuns==`number`,d=e.summary.unpricedRuns??0,f=e.summary.pricedRuns??(u?Math.max(0,o-d):o),m=u&&o>0&&f===0&&d>0,g=f>0&&d>0,v=typeof e.summary.usageReportedRuns==`number`||typeof e.summary.usageUnavailableRuns==`number`,y=e.summary.usageUnavailableRuns??0,b=e.summary.usageReportedRuns??(v?Math.max(0,o-y):o),x=v&&o>0&&b===0&&y>0,S=b>0&&y>0,C=d>0?null:e.summary.deltaPct,w=e.trackingStartedAt,ee=c>0,te=e.bySurface.map(e=>e.surface).filter(e=>!Pt.includes(e)),ne=[...Pt,...te].map(t=>{let n=e.bySurface.find(e=>e.surface===t);return{surface:t,costUsd:n?.costUsd??0,count:n?.count??0}}),re=n?r(`windowLabels.${n}`):null,ie=i.ready&&i.snapshot!=null&&a>0&&!m&&Pe(e.byProvider,i);return(0,G.jsxs)(`section`,{"aria-labelledby":`spending-hero-title`,className:`rounded-xl border border-border/50 bg-card p-5`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-end justify-between gap-3 mb-4`,children:[(0,G.jsxs)(`div`,{children:[(0,G.jsxs)(`h2`,{id:`spending-hero-title`,className:`text-strong text-foreground mb-1`,children:[r(`hero.spending`),re&&(0,G.jsxs)(`span`,{"data-testid":`hero-window-label`,children:[` · `,re]})]}),(0,G.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[(0,G.jsx)(`div`,{className:`text-display-xl num`,"data-testid":m?`hero-cost-unavailable`:void 0,title:m?r(`hero.costUnavailableTooltip`):void 0,children:(0,G.jsx)(Dt,{usd:a,estimated:ee,unavailable:m,className:ie?`text-muted-foreground`:void 0})}),C!==null&&(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-0.5 text-label ${C>=0?`text-accent-warning`:`text-accent-success`}`,children:[C>=0?(0,G.jsx)(p,{className:`w-3 h-3`}):(0,G.jsx)(kt,{className:`w-3 h-3`}),r(`hero.vsPrev`,{pct:Math.abs(C).toFixed(0)})]})]}),ie&&(0,G.jsx)(`p`,{className:`text-caption text-muted-foreground mt-0.5`,"data-testid":`hero-api-equivalent`,children:r(`hero.apiEquivalent`)}),(0,G.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1 num flex items-center gap-2`,children:[(0,G.jsx)(`span`,{children:r(`hero.invocations`,{count:o})}),x?(0,G.jsxs)(`span`,{"data-testid":`hero-usage-unavailable`,className:`text-muted-foreground`,title:r(`hero.usageUnavailableTooltip`),children:[r(`hero.usageUnavailable`),(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,r(`hero.usageUnavailableTooltip`),`)`]})]}):S&&s!=null?(0,G.jsxs)(`span`,{className:`text-muted-foreground`,title:r(`hero.usagePartiallyUnavailableTooltip`),children:[r(`hero.usagePartiallyUnavailable`,{tokens:E(s),count:y}),(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,r(`hero.usagePartiallyUnavailableTooltip`),`)`]})]}):s!=null&&s>0?(0,G.jsxs)(`span`,{className:`text-muted-foreground`,title:r(`hero.tokensTooltip`),children:[r(`hero.tokens`,{tokens:E(s)}),(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,r(`hero.tokensTooltip`),`)`]})]}):null,m&&(0,G.jsxs)(`span`,{className:`text-muted-foreground`,title:r(`hero.costUnavailableTooltip`),children:[r(`hero.costUnavailable`),(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,r(`hero.costUnavailableTooltip`),`)`]})]}),g&&(0,G.jsxs)(`span`,{"data-testid":`hero-cost-partial`,className:`text-muted-foreground`,title:r(`hero.costPartiallyUnavailableTooltip`),children:[r(`hero.costPartiallyUnavailable`,{count:d}),(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,r(`hero.costPartiallyUnavailableTooltip`),`)`]})]}),ee&&(0,G.jsxs)(`span`,{className:`text-caption text-muted-foreground`,title:r(`hero.includesEstimatedTooltip`,{amount:T(c)}),children:[r(`hero.includesEstimated`,{amount:T(c)}),(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,r(`hero.includesEstimatedTooltip`,{amount:T(c)}),`)`]})]})]})]}),o===0&&w&&(0,G.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:r(`hero.trackingStarted`,{date:w.slice(0,10)})})]}),o===0?(0,G.jsxs)(`div`,{className:`rounded-lg border border-dashed border-border/40 p-6 text-center`,children:[(0,G.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:r(`hero.emptyState`)}),(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:w?r(`hero.trackingStarted`,{date:w.slice(0,10)}):r(`hero.trackingStartedFallback`)})]}):m?(0,G.jsx)(`div`,{className:`rounded-lg border border-dashed border-border/40 p-4 text-xs text-muted-foreground`,children:r(`hero.costUnavailableTooltip`)}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`h-3 w-full rounded-full overflow-hidden bg-background-deep flex`,children:ne.map(e=>{let t=a>0?e.costUsd/a*100:0;return t===0?null:(0,G.jsx)(`div`,{className:`h-full ${_[e.surface].dot}`,style:{width:`${t}%`},title:r(`hero.segmentTitle`,{label:h[e.surface],value:T(e.costUsd)})},e.surface)})}),ee&&a>0&&(0,G.jsxs)(`div`,{className:`mt-2 flex items-center gap-3`,"data-testid":`hero-estimate-split`,children:[(0,G.jsxs)(`div`,{className:`h-1.5 flex-1 rounded-full overflow-hidden bg-background-deep flex`,children:[(0,G.jsx)(`div`,{className:`h-full bg-foreground/50`,style:{width:`${Math.max(0,100-c/a*100)}%`}}),(0,G.jsx)(`div`,{className:`h-full`,style:{width:`${Math.min(100,c/a*100)}%`,backgroundImage:`repeating-linear-gradient(135deg, var(--color-foreground) 0 2px, transparent 2px 5px)`,opacity:.5}})]}),(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-3 text-caption text-muted-foreground shrink-0`,children:[(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,G.jsx)(`span`,{"aria-hidden":!0,className:`h-2 w-2 rounded-sm bg-foreground/50`}),r(`hero.legendBilled`)]}),(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,G.jsx)(`span`,{"aria-hidden":!0,className:`h-2 w-2 rounded-sm`,style:{backgroundImage:`repeating-linear-gradient(135deg, var(--color-foreground) 0 1px, transparent 1px 3px)`,opacity:.6}}),r(`hero.legendEstimated`)]})]})]}),(0,G.jsx)(`div`,{className:`mt-3 flex flex-wrap items-center gap-x-5 gap-y-1.5 text-xs`,children:ne.filter(e=>e.costUsd>0).map(e=>(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 num`,children:[(0,G.jsx)(`span`,{className:`w-2 h-2 rounded-full ${_[e.surface].dot}`}),(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:h[e.surface]}),(0,G.jsx)(`span`,{className:`text-foreground font-medium`,children:T(e.costUsd)}),(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:`·`}),(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:e.count})]},e.surface))})]})]})}var It={claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`},Lt={claude:`bg-accent-info`,codex:`bg-accent-highlight`,gemini:`bg-accent-success`,kimi:`bg-accent-secondary`};function Rt(e){return T(e)}function zt(e){return It[e]??e}function Bt(e){return Lt[e]??`bg-accent-secondary`}function Vt({data:e,loading:t}){let{t:n}=l(`analytics`);if(t&&!e)return(0,G.jsx)(D,{className:`h-32`});if(!e||e.byProvider.length===0||e.byProvider.length===1)return null;let r=e.byProvider.reduce((e,t)=>e+t.costUsd+t.estimatedCostUsd,0),i=e.byProvider.some(e=>typeof e.unpricedCount==`number`?e.unpricedCount>0:e.count>0&&e.costUsd===0&&e.estimatedCostUsd===0);return(0,G.jsxs)(`div`,{className:`rounded-xl border border-border/50 bg-card/40 p-4`,children:[(0,G.jsx)(`div`,{className:`flex items-baseline justify-between mb-3`,children:(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`div`,{className:`text-caption text-muted-foreground`,children:n(`providerCard.title`)}),(0,G.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:(0,G.jsx)(c,{ns:`analytics`,i18nKey:`providerCard.description`,components:{tilde:(0,G.jsx)(`span`,{className:`font-medium`})}})})]})}),r===0&&(0,G.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:n(i?`providerCard.costUnavailableTooltip`:`providerCard.noCost`)}),r>0&&(0,G.jsx)(G.Fragment,{children:(0,G.jsx)(`div`,{className:`h-2 w-full rounded-full overflow-hidden bg-background-deep flex mb-3`,children:e.byProvider.map(e=>{let t=e.costUsd+e.estimatedCostUsd,i=r>0?t/r*100:0;if(i===0)return null;let a=`${e.costUsd===0&&e.estimatedCostUsd>0?`~`:``}${Rt(t)}`;return(0,G.jsx)(`div`,{className:`h-full ${Bt(e.provider)}`,style:{width:`${i}%`},title:n(`providerCard.segmentTitle`,{label:zt(e.provider),value:a,count:e.count})},e.provider)})})}),(0,G.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2 ${r>0?``:`mt-3`}`,children:e.byProvider.map(e=>(0,G.jsx)(Ht,{entry:e},e.provider))})]})}function Ht({entry:e}){let{t}=l(`analytics`),n=e.costUsd+e.estimatedCostUsd,r=e.costUsd===0&&e.estimatedCostUsd>0,i=e.unpricedCount??(e.count>0&&e.costUsd===0&&e.estimatedCostUsd===0?e.count:0),a=e.pricedCount??Math.max(0,e.count-i),o=e.count>0&&i>0&&a===0,s=a>0&&i>0;return(0,G.jsxs)(`div`,{className:`flex items-center gap-2.5 rounded-md border border-border/30 px-2.5 py-1.5`,children:[(0,G.jsx)(`span`,{className:`w-2 h-2 rounded-full shrink-0 ${Bt(e.provider)}`}),(0,G.jsx)(`span`,{className:`text-label`,children:zt(e.provider)}),(0,G.jsx)(`span`,{className:`text-caption text-muted-foreground num`,children:t(`runs`,{count:e.count})}),o?(0,G.jsxs)(`span`,{className:`ml-auto text-label text-muted-foreground`,title:t(`providerCard.costUnavailableTooltip`),children:[t(`providerCard.costUnavailable`),(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,t(`providerCard.costUnavailableTooltip`),`)`]})]}):(0,G.jsxs)(`span`,{className:`ml-auto text-label num`,title:s?t(`providerCard.costPartiallyUnavailableTooltip`):void 0,children:[r?`~`:``,Rt(n),s&&(0,G.jsx)(`span`,{className:`ml-1 font-normal text-muted-foreground`,children:t(`providerCard.costPartiallyUnavailable`,{count:i})}),s&&t(`providerCard.costPartiallyUnavailableTooltip`)?(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,s?t(`providerCard.costPartiallyUnavailableTooltip`):void 0,`)`]}):null]})]})}var Ut=Math.cos,Wt=Math.sin,K=Math.sqrt,Gt=Math.PI;Gt/2;var Kt=2*Gt,qt={draw(e,t){let n=K(t/Gt);e.moveTo(n,0),e.arc(0,0,n,0,Kt)}},Jt={draw(e,t){let n=K(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Yt=K(1/3),Xt=Yt*2,Zt={draw(e,t){let n=K(t/Xt),r=n*Yt;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},Qt={draw(e,t){let n=K(t),r=-n/2;e.rect(r,r,n,n)}},$t=.8908130915292852,en=Wt(Gt/10)/Wt(7*Gt/10),tn=Wt(Kt/10)*en,nn=-Ut(Kt/10)*en,rn={draw(e,t){let n=K(t*$t),r=tn*n,i=nn*n;e.moveTo(0,-n),e.lineTo(r,i);for(let t=1;t<5;++t){let a=Kt*t/5,o=Ut(a),s=Wt(a);e.lineTo(s*n,-o*n),e.lineTo(o*r-s*i,s*r+o*i)}e.closePath()}},an=K(3),on={draw(e,t){let n=-K(t/(an*3));e.moveTo(0,n*2),e.lineTo(-an*n,-n),e.lineTo(an*n,-n),e.closePath()}},q=-.5,J=K(3)/2,sn=1/K(12),cn=(sn/2+1)*3,ln={draw(e,t){let n=K(t/cn),r=n/2,i=n*sn,a=r,o=n*sn+n,s=-a,c=o;e.moveTo(r,i),e.lineTo(a,o),e.lineTo(s,c),e.lineTo(q*r-J*i,J*r+q*i),e.lineTo(q*a-J*o,J*a+q*o),e.lineTo(q*s-J*c,J*s+q*c),e.lineTo(q*r+J*i,q*i-J*r),e.lineTo(q*a+J*o,q*o-J*a),e.lineTo(q*s+J*c,q*c-J*s),e.closePath()}};function un(e,t){let n=null,r=M(i);e=typeof e==`function`?e:St(e||qt),t=typeof t==`function`?t:St(t===void 0?64:+t);function i(){let i;if(n||=i=r(),e.apply(this,arguments).draw(n,+t.apply(this,arguments)),i)return n=null,i+``||null}return i.type=function(t){return arguments.length?(e=typeof t==`function`?t:St(t),i):e},i.size=function(e){return arguments.length?(t=typeof e==`function`?e:St(+e),i):t},i.context=function(e){return arguments.length?(n=e??null,i):n},i}var dn=[`type`,`size`,`sizeType`];function fn(){return fn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},fn.apply(null,arguments)}function pn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function mn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?pn(Object(n),!0).forEach(function(t){hn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function hn(e,t,n){return(t=gn(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gn(e){var t=_n(e,`string`);return typeof t==`symbol`?t:t+``}function _n(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function vn(e,t){if(e==null)return{};var n,r,i=yn(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function yn(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}var bn={symbolCircle:qt,symbolCross:Jt,symbolDiamond:Zt,symbolSquare:Qt,symbolStar:rn,symbolTriangle:on,symbolWye:ln},xn=Math.PI/180,Sn=e=>bn[`symbol${B(e)}`]||qt,Cn=(e,t,n)=>{if(t===`area`)return e;switch(n){case`cross`:return 5*e*e/9;case`diamond`:return .5*e*e/Math.sqrt(3);case`square`:return e*e;case`star`:var r=18*xn;return 1.25*e*e*(Math.tan(r)-Math.tan(r*2)*Math.tan(r)**2);case`triangle`:return Math.sqrt(3)*e*e/4;case`wye`:return(21-10*Math.sqrt(3))*e*e/8;default:return Math.PI*e*e/4}},wn=(e,t)=>{bn[`symbol${B(e)}`]=t},Tn=e=>{var t=e.type,n=t===void 0?`circle`:t,r=e.size,i=r===void 0?64:r,a=e.sizeType,o=a===void 0?`area`:a,s=mn(mn({},vn(e,dn)),{},{type:n,size:i,sizeType:o}),c=`circle`;typeof n==`string`&&(c=n);var l=()=>{var e=Sn(c),t=un().type(e).size(Cn(i,o,c))();if(t!==null)return t},u=s.className,d=s.cx,f=s.cy,p=xe(s);return $e(d)&&$e(f)&&$e(i)?W.createElement(`path`,fn({},p,{className:x(`recharts-symbols`,u),transform:`translate(${d}, ${f})`,d:l()})):null};Tn.registerSymbol=wn;function En(){return En=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},En.apply(null,arguments)}function Dn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function On(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Dn(Object(n),!0).forEach(function(t){kn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Dn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function kn(e,t,n){return(t=An(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function An(e){var t=jn(e,`string`);return typeof t==`symbol`?t:t+``}function jn(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var Y=32,Mn={align:`center`,iconSize:14,inactiveColor:`#ccc`,layout:`horizontal`,verticalAlign:`middle`,labelStyle:{}};function Nn(e){if(typeof e==`object`&&e&&`strokeDasharray`in e)return String(e.strokeDasharray)}function Pn(e){var t=e.data,n=e.iconType,r=e.inactiveColor,i=Y/2,a=Y/6,o=Y/3,s=t.inactive?r:t.color,c=n??t.type;if(c===`none`)return null;if(c===`plainline`)return W.createElement(`line`,{strokeWidth:4,fill:`none`,stroke:s,strokeDasharray:Nn(t.payload),x1:0,y1:i,x2:Y,y2:i,className:`recharts-legend-icon`});if(c===`line`)return W.createElement(`path`,{strokeWidth:4,fill:`none`,stroke:s,d:`M0,${i}h${o}
|
|
2
|
+
A${a},${a},0,1,1,${2*o},${i}
|
|
3
|
+
H${Y}M${2*o},${i}
|
|
4
|
+
A${a},${a},0,1,1,${o},${i}`,className:`recharts-legend-icon`});if(c===`rect`)return W.createElement(`path`,{stroke:`none`,fill:s,d:`M0,${Y/8}h${Y}v${Y*3/4}h${-Y}z`,className:`recharts-legend-icon`});if(W.isValidElement(t.legendIcon)){var l=On({},t);return delete l.legendIcon,W.cloneElement(t.legendIcon,l)}return W.createElement(Tn,{fill:s,cx:i,cy:i,size:Y,sizeType:`diameter`,type:c})}function Fn(e){var t=e.payload,n=e.iconSize,r=e.layout,i=e.formatter,a=e.inactiveColor,o=e.iconType,s=e.labelStyle,c={x:0,y:0,width:Y,height:Y},l={display:r===`horizontal`?`inline-block`:`block`,marginRight:10,whiteSpace:`nowrap`},u={display:`inline-block`,verticalAlign:`middle`,marginRight:4};return t.map((t,r)=>{var d=t.formatter||i,f=x({"recharts-legend-item":!0,[`legend-item-${r}`]:!0,inactive:t.inactive});if(t.type===`none`)return null;var p=typeof s==`object`?On({},s):{};p.color=t.inactive?a:p.color||t.color,p.whiteSpace??=`normal`,p.overflowWrap??=`break-word`;var m=d?d(t.value,t,r):t.value;return W.createElement(`li`,En({className:f,style:l,key:`legend-item-${r}`},Ct(e,t,r)),W.createElement(be,{width:n,height:n,viewBox:c,style:u,"aria-label":t.value==null?`legend icon`:`${t.value} legend icon`},W.createElement(Pn,{data:t,iconType:o,inactiveColor:a})),W.createElement(`span`,{className:`recharts-legend-item-text`,style:p},m))})}var In=e=>{var t=U(e,Mn),n=t.payload,r=t.layout,i=t.align;if(!n||!n.length)return null;var a={padding:0,margin:0,textAlign:r===`horizontal`?i:`left`};return W.createElement(`ul`,{className:`recharts-default-legend`,style:a},W.createElement(Fn,En({},t,{payload:n})))};function Ln(){return ze(it)}var Rn=Ye([st,Ve,mt],(e,t,n)=>({x:n.left||0,y:n.top||0,width:Math.max(e-(n.left||0)-(n.right||0),0),height:Math.max(t-(n.top||0)-(n.bottom||0),0)}));function zn(e,t){return e===`start`&&t===`start`?``:`translate(${e===`inherit`?`0`:{start:`0`,middle:`-50%`,end:`-100%`}[e]}, ${{start:`0`,middle:`-50%`,end:`-100%`}[t]??`0`})`}var Bn=e(r()),Vn=[`contextPayload`];function Hn(){return Hn=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Hn.apply(null,arguments)}function Un(e,t){return Jn(e)||qn(e,t)||Gn(e,t)||Wn()}function Wn(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
5
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Gn(e,t){if(e){if(typeof e==`string`)return Kn(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Kn(e,t):void 0}}function Kn(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function qn(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function Jn(e){if(Array.isArray(e))return e}function Yn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function X(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Yn(Object(n),!0).forEach(function(t){Xn(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yn(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Xn(e,t,n){return(t=Zn(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Zn(e){var t=Qn(e,`string`);return typeof t==`symbol`?t:t+``}function Qn(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function $n(e,t){if(e==null)return{};var n,r,i=er(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function er(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function tr(e){return e.value}function nr(e){var t=e.contextPayload,n=$n(e,Vn),r=bt(t,e.payloadUniqBy,tr),i=X(X({},n),{},{payload:r});return W.isValidElement(e.content)?W.cloneElement(e.content,i):typeof e.content==`function`?W.createElement(e.content,i):W.createElement(In,i)}function rr(e){return e===`left`||e===`right`||e===`insideLeft`||e===`insideRight`?`vertical`:`horizontal`}function ir(e,t){return t==null?null:N(t)?Rn(e):ft(e)}function ar(e,t,n){return e===`top`?{top:n.height+t}:e===`bottom`?{top:-n.height-t}:e===`left`?{left:n.width+t}:e===`right`?{left:-n.width-t}:{}}function or(e,t,n,r,i,a){var o=t.layout,s=t.align,c=t.verticalAlign,l,u;return(!e||(e.left===void 0||e.left===null)&&(e.right===void 0||e.right===null))&&(l=s===`center`&&o===`vertical`?{left:((r||0)-a.width)/2}:s===`right`?{right:n&&n.right||0}:{left:n&&n.left||0}),(!e||(e.top===void 0||e.top===null)&&(e.bottom===void 0||e.bottom===null))&&(u=c===`middle`?{top:((i||0)-a.height)/2}:c===`bottom`?{bottom:n&&n.bottom||0}:{top:n&&n.top||0}),X(X({},l),u)}function sr(e){var t=e.align,n=e.layout,r=e.verticalAlign,i=e.itemSorter,a=e.position,o=e.offset,s=qe();return(0,W.useLayoutEffect)(()=>{s(R({align:t,layout:n,verticalAlign:r,itemSorter:i,position:a,offset:o}))},[s,t,n,r,i,a,o]),null}function cr(e){var t=e.width,n=e.height,r=qe();return(0,W.useLayoutEffect)(()=>{r(ut({width:t,height:n}))},[r,t,n]),(0,W.useLayoutEffect)(()=>()=>{r(ut({width:0,height:0}))},[r]),null}function lr(e,t,n,r){return e===`vertical`&&t!=null?{height:t}:e===`horizontal`?{width:n||r}:null}var ur={align:`center`,iconSize:14,inactiveColor:`#ccc`,itemSorter:`value`,labelStyle:{},layout:`auto`,verticalAlign:`bottom`,offset:0};function dr(e){var t=U(e,ur),n=e.layout&&e.layout!==`auto`?e.layout:rr(t.position),r=Ln(),i=je(),a=k(),o=ze(e=>ir(e,t.position)),s=t.width,c=t.height,l=t.wrapperStyle,u=t.portal,d=u==null&&(t.position==null||N(t.position)),f=Un(lt([r]),2),p=f[0],m=f[1],h=Ee(),g=Ie();if(h==null||g==null||t.position!=null&&o==null)return null;var _=lr(n,c,s,h-(a?.left||0)-(a?.right||0)),v=t.position==null?null:P({viewBox:o??{x:0,y:0,width:h,height:g},position:t.position,offset:t.offset??0}),y=ar(t.position,t.offset??0,p),b=n===`vertical`?(o?.width??0)/2:o?.width??0,x=n===`horizontal`?(o?.height??0)/2:o?.height??0,S=v?{width:`max-content`,height:`max-content`,maxWidth:b,maxHeight:x,overflowY:`auto`,top:v.y+(y.top??0),left:v.x+(y.left??0),transform:zn(v.horizontalAnchor,v.verticalAnchor)}:or(l,t,a,h,g,p),C=u?l:X(X({position:`absolute`,width:_?.width||s||`auto`,height:_?.height||c||`auto`},S),l),w=u??i;return w==null||r==null?null:(0,Bn.createPortal)(W.createElement(`div`,{className:`recharts-legend-wrapper`,style:C,ref:m},W.createElement(sr,{layout:n,align:t.align,verticalAlign:t.verticalAlign,itemSorter:t.itemSorter,position:t.position,offset:t.offset}),d&&W.createElement(cr,p),W.createElement(nr,Hn({},t,{layout:n},_,{margin:a,chartWidth:h,chartHeight:g,contextPayload:r}))),w)}var fr=W.memo(dr,ve);fr.displayName=`Legend`;var pr=[`option`];function mr(){return mr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},mr.apply(null,arguments)}function hr(e,t){if(e==null)return{};var n,r,i=gr(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function gr(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function _r(e){return W.createElement(Tn,e)}function vr(e){var t=e.option,n=hr(e,pr);return typeof t==`string`?W.createElement(he,{option:W.createElement(Tn,mr({type:t},n)),DefaultShape:_r,shapeProps:n}):W.createElement(he,{option:t,DefaultShape:_r,shapeProps:n})}var yr=Ye([(e,t,n,r,i,a,o)=>Me(e,void 0,void 0,o),(e,t,n,r,i,a,o)=>De(e,`xAxis`,t,o),(e,t,n,r,i,a,o)=>Tt(e,`xAxis`,t,o),(e,t,n,r,i,a,o)=>De(e,`yAxis`,n,o),(e,t,n,r,i,a,o)=>Tt(e,`yAxis`,n,o),(e,t,n,r)=>Ne(e,`zAxis`,r,!1),Ye([j,(e,t,n,r,i)=>i],(e,t)=>e.filter(e=>e.type===`scatter`).find(e=>e.id===t)),(e,t,n,r,i,a)=>a],(e,t,n,r,i,a,o,s)=>{var c=e.chartData,l=e.dataStartIndex,u=e.dataEndIndex;if(o!=null){var d=o?.data!=null&&o.data.length>0?o.data:c?.slice(l,u+1);if(!(d==null||t==null||r==null||n==null||i==null||n?.length===0||i?.length===0))return Lr({displayedData:d,xAxis:t,yAxis:r,zAxis:a,scatterSettings:o,xAxisTicks:n,yAxisTicks:i,cells:s})}}),br=[`id`],xr=[`onMouseEnter`,`onClick`,`onMouseLeave`],Sr=[`animationBegin`,`animationDuration`,`animationEasing`,`hide`,`isAnimationActive`,`legendType`,`lineJointType`,`lineType`,`shape`,`xAxisId`,`yAxisId`,`zAxisId`];function Cr(e,t){if(e==null)return{};var n,r,i=wr(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function wr(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function Z(){return Z=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Z.apply(null,arguments)}function Tr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Q(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?Tr(Object(n),!0).forEach(function(t){Er(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Tr(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function Er(e,t,n){return(t=Dr(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Dr(e){var t=Or(e,`string`);return typeof t==`symbol`?t:t+``}function Or(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var kr=e=>{var t=e.dataKey,n=e.name,r=e.fill,i=e.legendType;return[{inactive:e.hide,dataKey:t,type:i,color:r,value:vt(n,t),payload:e}]},Ar=W.memo(e=>{var t=e.dataKey,n=e.points,r=e.stroke,i=e.strokeWidth,a=e.fill,o=e.name,s=e.hide,c=e.formatter,l=e.tooltipType,u=e.id,d={dataDefinedOnItem:n?.map(e=>e.tooltipPayload),getPosition:e=>{var t;return n==null||(t=n[Number(e)])==null?void 0:t.tooltipPosition},settings:{stroke:r,strokeWidth:i,fill:a,nameKey:void 0,dataKey:t,name:vt(o,t),hide:s,type:l,color:a,unit:``,formatter:c,graphicalItemId:u}};return W.createElement(me,{tooltipEntrySettings:d})});function jr(e){var t=e.points,n=e.props,r=n.line,i=n.lineType,a=n.lineJointType;if(!r)return null;var o=Et(n),s=pe(r),c,l;if(i===`joint`)c=t.map(e=>({x:e.cx??null,y:e.cy??null}));else if(i===`fitting`){var u=Te(t),d=u.xmin,f=u.xmax,p=u.a,m=u.b,h=e=>p*e+m;c=[{x:d,y:h(d)},{x:f,y:h(f)}]}var g=Q(Q(Q({},o),{},{fill:`none`,stroke:o&&o.fill},s),{},{points:c});return l=W.isValidElement(r)?W.cloneElement(r,g):typeof r==`function`?r(g):W.createElement(Fe,Z({},g,{type:a})),W.createElement(F,{className:`recharts-scatter-line`,key:`recharts-scatter-line`},l)}function Mr(e){var t=e.showLabels,n=e.points,r=e.children,i=Ge(),a=(0,W.useMemo)(()=>n?.map(e=>{var t={x:e.x??0,y:e.y??0,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width};return Q(Q({},t),{},{value:void 0,payload:e.payload,viewBox:t,parentViewBox:i,fill:void 0})}),[i,n]);return W.createElement(fe,{value:t?a:void 0},r)}function Nr(e){var t=e.entry,n=e.index,r=e.shape,i=e.activeShape,a=e.baseProps,o=e.id,s=e.restOfAllOtherProps,c=e.animationElapsedTime,l=e.isAnimating,u=e.isEntrance,d=e.onMouseEnterFromContext,f=e.onMouseLeaveFromContext,p=e.onClickFromContext,m=i!=null&&i!==!1,h=ze((0,W.useMemo)(()=>{var e=String(n);return t=>m&&L(t)===e},[m,n]))??!1,g=h&&i!=null&&i!==!1?i:r,_=Q(Q(Q({},a),t),{},{isActive:h,index:n,animationElapsedTime:c,isAnimating:l,isEntrance:u,[Ze]:String(o)});return W.createElement(_e,{zIndex:h?I.activeDot:void 0},W.createElement(F,Z({className:`recharts-scatter-symbol`},Ct(s,t,n),{onMouseEnter:d(t,n),onMouseLeave:f(t,n),onClick:p(t,n)}),W.createElement(vr,Z({option:g},_))))}function Pr(e){var t=e.points,n=e.allOtherScatterProps,r=e.animationElapsedTime,i=e.isAnimating,a=e.isEntrance,o=n.shape,s=n.activeShape,c=n.dataKey,l=n.id,u=Cr(n,br),d=n.onMouseEnter,f=n.onClick,p=n.onMouseLeave,m=Cr(n,xr),h=Ae(d,c,l),g=ge(p),_=xt(f,c,l);if(!ke(t))return null;var v=Et(u);return W.createElement(W.Fragment,null,W.createElement(jr,{points:t,props:u}),t.map((e,t)=>W.createElement(Nr,{key:`symbol-${e?.cx}-${e?.cy}-${e?.size}-${t}`,entry:e,index:t,shape:o,activeShape:s,baseProps:v,id:l,restOfAllOtherProps:m,animationElapsedTime:r,isAnimating:i,isEntrance:a,onMouseEnterFromContext:h,onMouseLeaveFromContext:g,onClickFromContext:_})))}var Fr=(e,t)=>e==null?[]:t===1?e.flatMap(e=>e.status===`removed`?[]:[e.next]):e.flatMap(e=>e.status===`removed`?[]:e.status===`matched`?[Q(Q({},e.next),{},{cx:e.next.cx==null?void 0:et(e.prev.cx,e.next.cx,t),cy:e.next.cy==null?void 0:et(e.prev.cy,e.next.cy,t),size:et(e.prev.size,e.next.size,t)})]:[Q(Q({},e.next),{},{size:et(0,e.next.size,t)})]);function Ir(e){var t=e.previousPointsRef,n=e.props,r=n.points,i=n.isAnimationActive,a=n.animationBegin,o=n.animationDuration,s=n.animationEasing,c=n.animationInterpolateFn,l=wt(),u=l.isAnimating,d=l.handleAnimationStart,f=l.handleAnimationEnd,p=Le();return p==null?null:W.createElement(Mr,{showLabels:!u,points:r},W.createElement(yt,{animationInput:n,animationIdPrefix:`recharts-scatter-`,items:r,previousItemsRef:t,isAnimationActive:i,animationBegin:a,animationDuration:o,animationEasing:s,onAnimationStart:d,onAnimationEnd:f,animationInterpolateFn:c,animationMatchBy:n.animationMatchBy,layout:p},(e,t,r)=>W.createElement(F,null,W.createElement(Pr,{points:e,allOtherScatterProps:n,showLabels:!u,animationElapsedTime:t,isAnimating:u||t<1,isEntrance:r}))),n.children,W.createElement(Qe,{label:n.label}))}function Lr(e){var t=e.displayedData,n=e.xAxis,r=e.yAxis,i=e.zAxis,a=e.scatterSettings,o=e.xAxisTicks,s=e.yAxisTicks,c=e.cells,l=A(n.dataKey)?a.dataKey:n.dataKey,u=A(r.dataKey)?a.dataKey:r.dataKey,d=i&&i.dataKey,f=i?i.range:z.range,p=f&&f[0],m=n.scale.bandwidth?n.scale.bandwidth():0,h=r.scale.bandwidth?r.scale.bandwidth():0;return t.map((e,t)=>{var f=We(e,l),g=We(e,u),_=!A(d)&&We(e,d)||`-`,v=[{name:A(n.dataKey)?a.name:n.name||String(n.dataKey),unit:n.unit||``,value:f,payload:e,dataKey:l,type:a.tooltipType,graphicalItemId:a.id},{name:A(r.dataKey)?a.name:r.name||String(r.dataKey),unit:r.unit||``,value:g,payload:e,dataKey:u,type:a.tooltipType,graphicalItemId:a.id}];_!==`-`&&i!=null&&v.push({name:i.name||i.dataKey,unit:i.unit||``,value:_,payload:e,dataKey:d,type:a.tooltipType,graphicalItemId:a.id});var y=nt({axis:n,ticks:o,bandSize:m,entry:e,index:t,dataKey:l}),b=nt({axis:r,ticks:s,bandSize:h,entry:e,index:t,dataKey:u}),x=_!==`-`&&i!=null?i.scale.map(_):p,S=x==null?0:Math.sqrt(Math.max(x,0)/Math.PI);return Q(Q({},e),{},{cx:y,cy:b,x:y==null?void 0:y-S,y:b==null?void 0:b-S,width:2*S,height:2*S,size:x,node:{x:f,y:g,z:_},tooltipPayload:v,tooltipPosition:{x:y,y:b},payload:e},c&&c[t]&&c[t].props)})}var Rr=(e,t,n)=>({x:e.cx,y:e.cy,value:Number(n===`x`?e.node.x:e.node.y),errorVal:We(e,t)});function zr(e){var t=e.hide,n=e.points,r=e.className,i=e.needClip,a=e.xAxisId,o=e.yAxisId,s=e.id,c=(0,W.useRef)(null);if(t)return null;var l=x(`recharts-scatter`,r),u=s;return W.createElement(_e,{zIndex:e.zIndex},W.createElement(F,{className:l,clipPath:i?`url(#clipPath-${u})`:void 0,id:s},i&&W.createElement(`defs`,null,W.createElement(pt,{clipPathId:u,xAxisId:a,yAxisId:o})),W.createElement(tt,{xAxisId:a,yAxisId:o,data:n,dataPointFormatter:Rr,errorBarOffset:0},W.createElement(F,{key:`recharts-scatter-symbols`},W.createElement(Ir,{props:e,previousPointsRef:c})))))}var Br={xAxisId:0,yAxisId:0,zAxisId:0,label:!1,line:!1,legendType:`circle`,lineType:`joint`,lineJointType:`linear`,shape:`circle`,hide:!1,isAnimationActive:`auto`,animationBegin:0,animationDuration:400,animationEasing:`linear`,animationMatchBy:He,animationInterpolateFn:Fr,zIndex:I.scatter};function Vr(e){var t=U(e,Br),n=t.animationBegin,r=t.animationDuration,i=t.animationEasing,a=t.hide,o=t.isAnimationActive,s=t.legendType,c=t.lineJointType,l=t.lineType,u=t.shape,d=t.xAxisId,f=t.yAxisId,p=t.zAxisId,m=Cr(t,Sr),h=Ue(d,f).needClip,g=(0,W.useMemo)(()=>we(e.children,Se),[e.children]),_=ot(),v=ze(t=>yr(t,d,f,p,e.id,g,_));return h==null||v==null?null:W.createElement(W.Fragment,null,W.createElement(Ar,{dataKey:e.dataKey,points:v,stroke:e.stroke,strokeWidth:e.strokeWidth,fill:e.fill,name:e.name,hide:e.hide,formatter:e.formatter,tooltipType:e.tooltipType,id:e.id}),W.createElement(zr,Z({},m,{xAxisId:d,yAxisId:f,zAxisId:p,lineType:l,lineJointType:c,legendType:s,shape:u,hide:a,isAnimationActive:o,animationBegin:n,animationDuration:r,animationEasing:i,points:v,needClip:h})))}function Hr(e){var t=U(e,Br),n=ot();return W.createElement(Re,{id:t.id,type:`scatter`},e=>W.createElement(W.Fragment,null,W.createElement(Oe,{legendPayload:kr(t)}),W.createElement(Ke,{type:`scatter`,id:e,data:t.data,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:t.zAxisId,dataKey:t.dataKey,hide:t.hide,name:t.name,tooltipType:t.tooltipType,isPanorama:n}),W.createElement(Vr,Z({},t,{id:e}))))}var Ur=W.memo(Hr,ve);Ur.displayName=`Scatter`;function Wr(e){var t=qe(),n=(0,W.useRef)(null);return(0,W.useLayoutEffect)(()=>{n.current===null?t(ct(e)):n.current!==e&&t(Je({prev:n.current,next:e})),n.current=e},[e,t]),(0,W.useLayoutEffect)(()=>()=>{n.current&&=(t(rt(n.current)),null)},[t]),null}var Gr={zAxisId:0,range:z.range,scale:z.scale,type:z.type};function Kr(e){var t=U(e,Gr);return W.createElement(Wr,{domain:t.domain,id:t.zAxisId,dataKey:t.dataKey,name:t.name,unit:t.unit,range:t.range,scale:t.scale,type:t.type,allowDuplicatedCategory:z.allowDuplicatedCategory,allowDataOverflow:z.allowDataOverflow,reversed:z.reversed,includeHidden:z.includeHidden})}Kr.displayName=`ZAxis`;var qr=[`item`],Jr=(0,W.forwardRef)((e,t)=>W.createElement(dt,{chartName:`ScatterChart`,defaultTooltipEventType:`item`,validateTooltipEventTypes:qr,tooltipPayloadSearcher:V,categoricalChartProps:e,ref:t}));function Yr({active:e,label:t,payload:n,formatValue:r=e=>T(e)}){if(!e||!n||n.length===0)return null;let i=n.filter(e=>typeof e.value==`number`&&e.value!==0);if(i.length===0)return null;let a=i.reduce((e,t)=>e+t.value,0);return(0,G.jsxs)(`div`,{className:`rounded-card border border-border bg-popover px-3 py-2 text-popover-foreground shadow-2`,children:[t!==void 0&&(0,G.jsx)(`div`,{className:`text-caption text-muted-foreground mb-1 num`,children:t}),(0,G.jsx)(`ul`,{className:`space-y-0.5`,children:i.map(e=>(0,G.jsxs)(`li`,{className:`flex items-center gap-2 text-caption`,children:[(0,G.jsx)(`span`,{"aria-hidden":!0,className:`h-2 w-2 rounded-full shrink-0`,style:{backgroundColor:e.color}}),(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:e.name}),(0,G.jsx)(`span`,{className:`ml-auto pl-4 num text-foreground`,children:r(e.value)})]},String(e.name)))}),i.length>1&&(0,G.jsx)(`div`,{className:`mt-1 flex items-center border-t border-border/60 pt-1 text-caption`,children:(0,G.jsx)(`span`,{className:`ml-auto num font-medium text-foreground`,children:r(a)})})]})}function Xr({data:e,loading:t}){let{t:n}=l(`analytics`),r=oe();if(t&&!e)return(0,G.jsx)(D,{className:`h-[220px]`});if(!e)return null;let i=[...r.chart,r.xterm.brightBlue,r.xterm.brightMagenta],o={jobs:n(`surfaces.job`),explore:n(`surfaces.exploreSpec`),quick:n(`surfaces.quickSpec`),refine:n(`surfaces.aiEdit`),fileSummaries:n(`surfaces.fileSummary`),smash:n(`surfaces.smash`),loop:n(`surfaces.loop`),others:n(`models.others`)},s=e=>e.jobsCostUsd+e.exploreCostUsd+e.quickCostUsd+e.aiEditCostUsd+(e.fileSummaryCostUsd??0)+(e.smashCostUsd??0)+(e.loopCostUsd??0),c=e=>Math.max(0,(e.totalCostUsd??0)-s(e)),u=e.dailyTimeline.map(e=>({date:ce(g(e.date),`d MMM`,{locale:a()}),[o.jobs]:e.jobsCostUsd,[o.explore]:e.exploreCostUsd,[o.quick]:e.quickCostUsd,[o.refine]:e.aiEditCostUsd,[o.fileSummaries]:e.fileSummaryCostUsd??0,[o.smash]:e.smashCostUsd??0,[o.loop]:e.loopCostUsd??0,[o.others]:c(e)})),d=e.dailyTimeline.every(e=>s(e)+c(e)===0),f=e.dailyTimeline.reduce((e,t)=>e+(t.unpricedCount??0),0),p=d&&f>0,m=!d&&f>0;return(0,G.jsxs)(`div`,{className:`rounded-xl border border-border/50 bg-card/40 p-4`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,G.jsx)(`h2`,{className:`text-strong`,children:n(`timeline.title`)}),(0,G.jsx)(`span`,{className:`text-caption text-muted-foreground`,children:m?n(`timeline.costPartiallyUnavailable`,{count:f}):n(`timeline.subtitle`)})]}),p?(0,G.jsx)(`div`,{"data-testid":`timeline-cost-unavailable`,className:`h-40 flex items-center justify-center text-xs text-muted-foreground`,children:n(`timeline.costUnavailable`)}):d?(0,G.jsx)(`div`,{className:`h-40 flex items-center justify-center text-xs text-muted-foreground`,children:n(`timeline.empty`)}):(0,G.jsx)(`div`,{className:`h-[220px]`,children:(0,G.jsx)(gt,{width:`100%`,height:`100%`,children:(0,G.jsxs)(at,{data:u,barCategoryGap:`28%`,margin:{top:10,right:10,left:-8,bottom:0},children:[(0,G.jsx)(_t,{strokeDasharray:`2 4`,stroke:`currentColor`,className:`text-border/30`,vertical:!1}),(0,G.jsx)(Be,{dataKey:`date`,tick:{fontSize:11},tickLine:!1,stroke:`currentColor`,className:`text-muted-foreground num`}),(0,G.jsx)(Xe,{tick:{fontSize:11},tickLine:!1,axisLine:!1,stroke:`currentColor`,className:`text-muted-foreground num`,tickFormatter:e=>T(e)}),(0,G.jsx)(Ce,{content:(0,G.jsx)(Yr,{}),cursor:{fill:`var(--color-accent)`,fillOpacity:.25}}),(0,G.jsx)(fr,{iconType:`circle`,iconSize:8,wrapperStyle:{fontSize:11}}),(0,G.jsx)(H,{dataKey:o.jobs,stackId:`a`,fill:i[0]}),(0,G.jsx)(H,{dataKey:o.explore,stackId:`a`,fill:i[1]}),(0,G.jsx)(H,{dataKey:o.quick,stackId:`a`,fill:i[2]}),(0,G.jsx)(H,{dataKey:o.refine,stackId:`a`,fill:i[3]}),(0,G.jsx)(H,{dataKey:o.fileSummaries,stackId:`a`,fill:i[4]}),(0,G.jsx)(H,{dataKey:o.smash,stackId:`a`,fill:i[5]}),(0,G.jsx)(H,{dataKey:o.loop,stackId:`a`,fill:i[6]}),(0,G.jsx)(H,{dataKey:o.others,stackId:`a`,fill:`var(--color-muted-foreground)`,radius:[3,3,0,0]})]})})})]})}function Zr(e){return e==null?`—`:T(e)}function Qr(e){return e==null?`—`:e<1e3?`${e} ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${Math.floor(e/6e4)}m ${Math.floor(e%6e4/1e3)}s`}function $r({values:e}){let t=Math.max(1e-4,...e);return(0,G.jsx)(`div`,{className:`flex items-end gap-[1px] h-5`,children:e.map((e,n)=>(0,G.jsx)(`div`,{className:`w-[3px] rounded-sm bg-foreground/40`,style:{height:`${Math.max(2,e/t*20)}px`}},n))})}function ei({mode:e,label:t,accentClass:n}){let{t:r}=l(`analytics`),i=e.mode===`explore`&&e.totalRuns<5,a=(e.estimatedCostUsd??0)>0,o=e.avgCostPerSpec==null&&(e.unpricedCount??0)>0;return(0,G.jsxs)(`div`,{className:`flex-1 p-4 first:pr-2 last:pl-2`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,G.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full ${n}`}),(0,G.jsx)(`span`,{className:`text-label text-muted-foreground`,children:t})]}),i?(0,G.jsxs)(`div`,{className:`py-3`,children:[(0,G.jsx)(`p`,{className:`text-sm text-foreground`,children:r(`quickVsExplore.sparseCta`)}),(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:r(`quickVsExplore.runsSoFar`,{count:e.totalRuns})})]}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`text-3xl font-semibold num tracking-tight`,"data-estimated":a?`true`:void 0,title:o?r(`quickVsExplore.costUnavailableTooltip`):a?r(`quickVsExplore.estimatedTooltip`):void 0,children:[a&&e.avgCostPerSpec!=null?`~`:``,Zr(e.avgCostPerSpec)]}),(0,G.jsx)(`div`,{className:`text-caption text-muted-foreground mt-0.5`,children:r(o?`quickVsExplore.costUnavailable`:`quickVsExplore.perSpec`)}),(0,G.jsx)(`div`,{className:`mt-3`,children:(0,G.jsx)($r,{values:e.sparkline.length>0?e.sparkline:[0]})}),(0,G.jsxs)(`div`,{className:`mt-3 space-y-0.5 text-xs num text-muted-foreground`,children:[(0,G.jsx)(`div`,{children:(0,G.jsx)(c,{ns:`analytics`,i18nKey:`quickVsExplore.createdRuns`,values:{created:e.ticketsCreated,runs:e.totalRuns},components:{strong:(0,G.jsx)(`span`,{className:`text-foreground font-medium`})}})}),(0,G.jsx)(`div`,{children:r(`quickVsExplore.avgDuration`,{duration:Qr(e.avgDurationMs)})}),(0,G.jsx)(`div`,{className:`truncate`,children:e.dominantModel??`—`})]})]})]})}function ti({data:e,loading:t}){let{t:n}=l(`analytics`);if(t&&!e)return(0,G.jsx)(D,{className:`h-[220px]`});if(!e)return null;let r=e.byMode.find(e=>e.mode===`quick`),i=e.byMode.find(e=>e.mode===`explore`);if(!r||!i)return null;let a=r.avgCostPerSpec&&i.avgCostPerSpec&&r.avgCostPerSpec>0?i.avgCostPerSpec/r.avgCostPerSpec:null,o=a!==null&&r.totalRuns>=1&&i.totalRuns>=5,s=(r.estimatedCostUsd??0)>0||(i.estimatedCostUsd??0)>0;return(0,G.jsxs)(`div`,{className:`rounded-xl border border-border/50 bg-card/40`,children:[(0,G.jsx)(`div`,{className:`px-4 pt-3 pb-1`,children:(0,G.jsx)(`h2`,{className:`text-strong`,children:n(`quickVsExplore.title`)})}),(0,G.jsxs)(`div`,{className:`flex divide-x divide-border/40`,children:[(0,G.jsx)(ei,{mode:r,label:n(`quickVsExplore.quick`),accentClass:`bg-accent-secondary`}),(0,G.jsx)(ei,{mode:i,label:n(`quickVsExplore.explore`),accentClass:`bg-accent-highlight`})]}),o&&(0,G.jsx)(`div`,{className:`px-4 pb-3 -mt-1`,children:(0,G.jsx)(`div`,{className:`text-center text-caption text-muted-foreground num`,children:(0,G.jsxs)(`span`,{className:`px-2`,children:[`━━━━━━ `,n(`quickVsExplore.ratio`,{ratio:a.toFixed(1)}),` ━━━━━━`]})})}),s&&(0,G.jsx)(`div`,{className:`px-4 pb-3 -mt-1`,"data-testid":`quick-vs-explore-estimated-footnote`,children:(0,G.jsx)(`p`,{className:`text-caption text-muted-foreground`,children:n(`quickVsExplore.estimatedFootnote`)})})]})}function ni(e){return T(e)}function ri({data:e,loading:t}){let{t:n}=l(`analytics`),r=e?.agentMissions;if(t||!r||r.summary.turns===0)return null;let{summary:i,topConversations:o}=r,s=i.estimatedCostUsd>0,c=i.prevTotalCostUsd>0?(i.totalCostUsd-i.prevTotalCostUsd)/i.prevTotalCostUsd*100:null;return(0,G.jsxs)(`div`,{className:`rounded-xl border border-border/50 bg-card p-4`,"data-testid":`agent-missions-card`,children:[(0,G.jsxs)(`div`,{className:`mb-3 flex items-center gap-2`,children:[(0,G.jsx)(se,{className:`h-4 w-4 text-accent-highlight`}),(0,G.jsx)(`h3`,{className:`text-strong`,children:n(`agentMissions.title`)}),(0,G.jsx)(`span`,{className:`text-caption text-muted-foreground`,children:n(`agentMissions.subtitle`)})]}),(0,G.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[(0,G.jsxs)(`span`,{className:`text-3xl font-semibold num tracking-tight`,"data-estimated":s?`true`:void 0,title:s?n(`agentMissions.estimatedNote`):void 0,children:[s?`~`:``,ni(i.totalCostUsd),s&&n(`agentMissions.estimatedNote`)?(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,s?n(`agentMissions.estimatedNote`):void 0,`)`]}):null]}),c!==null&&(0,G.jsxs)(`span`,{className:c>0?`text-xs text-accent-warning`:`text-xs text-accent-success`,children:[c>0?`+`:``,c.toFixed(0),`% `,n(`agentMissions.vsPrev`)]})]}),(0,G.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:n(`agentMissions.turnsAndTokens`,{turns:i.turns,tokens:E(i.tokensIn+i.tokensOut)})}),(i.flowTurns??0)>0&&(0,G.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,"data-testid":`agent-missions-flow`,children:n(`agentMissions.flowShare`,{cost:ni(i.flowCostUsd??0),turns:i.flowTurns})}),o.length>0&&(0,G.jsx)(`ul`,{className:`mt-3 space-y-1 border-t border-border/40 pt-2`,children:o.map(e=>(0,G.jsxs)(`li`,{className:`flex items-center gap-2 text-xs`,children:[(0,G.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-foreground`,children:e.title?.trim()||n(`agentMissions.untitled`)}),(0,G.jsxs)(`span`,{className:`shrink-0 text-caption text-muted-foreground`,children:[e.turns,` · `,e.lastAt?w(new Date(e.lastAt),{addSuffix:!0,locale:a()}):`—`]}),(0,G.jsxs)(`span`,{className:`shrink-0 num font-medium`,children:[e.estimatedCostUsd>0?`~`:``,ni(e.costUsd)]})]},e.conversationId??`unknown`))})]})}function ii({slug:e,className:t}){let{text:n,known:r}=O(e);return n?r?(0,G.jsx)(`span`,{className:t,title:e??void 0,children:n}):(0,G.jsx)(`span`,{className:`${t??``} font-mono`.trim(),children:n}):null}function ai({data:e,loading:t,onSelectModel:n,activeModel:r}){let{t:i}=l(`analytics`);if(t&&!e)return(0,G.jsx)(D,{className:`h-[220px]`});if(!e)return null;let a=e.summary.totalCostUsd,o=e.byModel.slice(0,5),s=o.reduce((e,t)=>e+t.costUsd,0),c=Math.max(0,a-s),u=c>=.005;return(0,G.jsxs)(`div`,{className:`rounded-xl border border-border/50 bg-card/40 p-4`,children:[(0,G.jsx)(`h2`,{className:`text-strong mb-3`,children:i(`models.title`)}),o.length===0?(0,G.jsx)(`div`,{className:`h-32 flex items-center justify-center text-xs text-muted-foreground`,children:i(`models.empty`)}):(0,G.jsxs)(`ul`,{className:`space-y-1.5`,children:[o.map(e=>{let t=a>0?e.costUsd/a*100:0,o=r===e.model,s=(e.estimatedCostUsd??0)>0,c=e.unpricedCount??0,l=Math.max(0,e.count-c),u=e.count>0&&c>0&&l===0,d=l>0&&c>0;return(0,G.jsx)(`li`,{children:(0,G.jsxs)(`button`,{type:`button`,"aria-pressed":o,onClick:()=>n(e.model,e.provider),className:`w-full text-left group rounded-md px-2 py-1.5 transition-colors ${o?`bg-accent-highlight/10 ring-1 ring-accent-highlight/30`:`hover:bg-accent/30`}`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between text-label mb-1 num`,children:[(0,G.jsx)(`span`,{className:`truncate font-medium`,children:(0,G.jsx)(ii,{slug:e.model})}),(0,G.jsxs)(`span`,{className:`text-muted-foreground`,"data-testid":u?`model-cost-unavailable`:void 0,title:u?i(`models.costUnavailableTooltip`):d?i(`models.costPartiallyUnavailableTooltip`):s?i(`models.estimatedTooltip`):void 0,children:[u?i(`models.costUnavailableWithRuns`,{count:e.count}):(0,G.jsxs)(G.Fragment,{children:[s?`~`:``,T(e.costUsd),` · `,e.count,d&&(0,G.jsx)(`span`,{className:`ml-1`,children:i(`models.costPartiallyUnavailable`,{count:c})})]}),(u?i(`models.costUnavailableTooltip`):d?i(`models.costPartiallyUnavailableTooltip`):s&&i(`models.estimatedTooltip`))?(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,u?i(`models.costUnavailableTooltip`):d?i(`models.costPartiallyUnavailableTooltip`):s?i(`models.estimatedTooltip`):void 0,`)`]}):null]})]}),(0,G.jsx)(`div`,{className:`h-1.5 rounded-full bg-background-deep overflow-hidden`,children:(0,G.jsx)(`div`,{className:`h-full ${o?`bg-accent-highlight`:`bg-foreground/40 group-hover:bg-foreground/60`} transition-colors`,style:{width:`${t}%`}})})]})},`${e.provider??`claude`}:${e.model}`)}),u&&(0,G.jsx)(`li`,{"data-testid":`model-others`,children:(0,G.jsxs)(`div`,{className:`w-full rounded-md px-2 py-1.5`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between text-label mb-1 num`,children:[(0,G.jsx)(`span`,{className:`truncate font-medium text-muted-foreground`,children:i(`models.others`)}),(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:T(c)})]}),(0,G.jsx)(`div`,{className:`h-1.5 rounded-full bg-background-deep overflow-hidden`,children:(0,G.jsx)(`div`,{className:`h-full bg-foreground/25`,style:{width:`${a>0?c/a*100:0}%`}})})]})})]})]})}var oi={job:`var(--color-accent-info)`,"quick-spec":`var(--color-accent-secondary)`,"explore-spec":`var(--color-accent-highlight)`,"ai-edit":`var(--color-accent-success)`,smash:`var(--color-accent-warning)`,"file-summary":`var(--color-accent-flow)`,loop:`var(--color-accent-primary)`,"chat-sidebar":`var(--color-accent-info)`,"spec-launcher":`var(--color-accent-secondary)`,proposal:`var(--color-accent-highlight)`,"agent-studio":`var(--color-accent-success)`,setup:`var(--color-accent-primary)`,flow:`var(--color-accent-flow)`,triage:`var(--color-accent-warning)`},si={job:`circle`,"quick-spec":`square`,"explore-spec":`triangle`,"ai-edit":`diamond`,smash:`cross`,"file-summary":`star`,loop:`wye`,"chat-sidebar":`square`,"spec-launcher":`triangle`,proposal:`diamond`,"agent-studio":`cross`,setup:`star`,flow:`circle`,triage:`wye`};function ci({surface:e}){return(0,G.jsx)(`svg`,{className:`w-2 h-2 shrink-0 overflow-visible`,viewBox:`0 0 8 8`,"aria-hidden":!0,children:(0,G.jsx)(Tn,{type:si[e]??`circle`,cx:4,cy:4,size:40,sizeType:`area`,fill:oi[e]??`var(--color-muted-foreground)`})})}var li=Object.keys(h);function ui({data:e,loading:t,onSelectPoint:n}){let{t:r}=l(`analytics`);if(t&&!e)return(0,G.jsx)(D,{className:`h-[260px]`});if(!e)return null;let i=li.map(t=>({surface:t,points:e.scatter.filter(e=>e.surface===t).map(e=>({id:e.id,x:e.numTurns??Math.round((e.durationMs??0)/1e3),y:e.costUsd,surface:t,ticketId:e.ticketId,startedAt:e.startedAt,raw:e}))})),a=e.scatter.length===0,o=e.summary.unpricedRuns??0,s=a&&o>0,c=!a&&o>0,u=e.scatterTruncated===!0,d=e.scatterTotal??e.scatter.length;return(0,G.jsxs)(`div`,{className:`rounded-xl border border-border/50 bg-card/40 p-4`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,G.jsx)(`h2`,{className:`text-strong`,children:r(`scatter.title`)}),(0,G.jsx)(`div`,{className:`flex flex-wrap items-center gap-2 text-caption`,children:i.filter(e=>e.points.length>0).map(e=>(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,G.jsx)(ci,{surface:e.surface}),(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:h[e.surface]})]},e.surface))})]}),u&&!a&&(0,G.jsx)(`div`,{"data-testid":`scatter-truncation-notice`,className:`mb-2 text-caption text-accent-warning`,children:r(`scatter.truncated`,{shown:e.scatter.length,total:d})}),c&&(0,G.jsx)(`div`,{"data-testid":`scatter-cost-partial-notice`,className:`mb-2 text-caption text-muted-foreground`,children:r(`scatter.costPartiallyUnavailable`,{count:o})}),s?(0,G.jsx)(`div`,{"data-testid":`scatter-cost-unavailable`,className:`h-40 flex items-center justify-center text-xs text-muted-foreground`,children:r(`scatter.costUnavailable`)}):a?(0,G.jsx)(`div`,{className:`h-40 flex items-center justify-center text-xs text-muted-foreground`,children:r(`scatter.empty`)}):(0,G.jsx)(`div`,{className:`h-[260px]`,children:(0,G.jsx)(gt,{width:`100%`,height:`100%`,children:(0,G.jsxs)(Jr,{margin:{top:10,right:10,left:-8,bottom:5},children:[(0,G.jsx)(_t,{strokeDasharray:`2 4`,stroke:`currentColor`,className:`text-border/30`}),(0,G.jsx)(Be,{type:`number`,dataKey:`x`,name:`turns`,tick:{fontSize:12},stroke:`currentColor`,className:`text-muted-foreground`,label:{value:r(`scatter.turnsLabel`),position:`insideBottomRight`,offset:-2,fontSize:12,fill:`currentColor`}}),(0,G.jsx)(Xe,{type:`number`,dataKey:`y`,name:`cost`,tick:{fontSize:12},stroke:`currentColor`,className:`text-muted-foreground`,tickFormatter:e=>T(e)}),(0,G.jsx)(Kr,{range:[40,80]}),(0,G.jsx)(Ce,{cursor:{strokeDasharray:`3 3`},contentStyle:{backgroundColor:`var(--color-popover)`,border:`1px solid var(--color-border)`,color:`var(--color-popover-foreground)`,fontSize:12,borderRadius:6},formatter:(e,t)=>{let n=String(t);return n===`cost`&&typeof e==`number`?[T(e),r(`scatter.costLabel`)]:[String(e),n===`turns`?r(`scatter.turnsLabel`):n]}}),i.map(e=>(0,G.jsx)(Ur,{data:e.points,fill:oi[e.surface],shape:si[e.surface]??`circle`,onClick:e=>{let t=e;t?.raw&&n(t.raw)}},e.surface))]})})})]})}function di({data:e,loading:t,onSelectTicket:n}){let{t:r}=l(`analytics`);if(t&&!e)return(0,G.jsx)(D,{className:`h-40`});if(!e)return null;let i=e.topTickets;return(0,G.jsxs)(`div`,{className:`rounded-xl border border-border/50 bg-card/40 p-4`,children:[(0,G.jsx)(`h2`,{className:`text-strong mb-3`,children:r(`topTickets.title`)}),i.length===0?(0,G.jsx)(`div`,{className:`h-32 flex items-center justify-center text-xs text-muted-foreground`,children:r(`topTickets.empty`)}):(0,G.jsx)(`ul`,{className:`divide-y divide-border/30`,children:i.map((e,t)=>{let i=Object.entries(e.bySurface).filter(([,e])=>e.count>0).map(([e,t])=>r(`topTickets.breakdownItem`,{n:t.count,label:h[e].toLowerCase()})).join(` + `),a=e.isUnattributed,o=a?r(`topTickets.unattributed`):e.ticketTitle?`#${e.ticketId} ${e.ticketTitle}`:r(`topTickets.deletedTicket`,{id:e.ticketId}),s=!e.ticketTitle&&!a?`opacity-50`:``,c=e.unpricedCount??0,l=e.totalRuns>0&&c===e.totalRuns,u=c>0&&!l;return(0,G.jsx)(`li`,{children:(0,G.jsxs)(`button`,{type:`button`,onClick:()=>n(e.ticketId),className:`w-full text-left flex items-center justify-between gap-3 py-2 px-1 hover:bg-accent/30 rounded transition-colors ${s}`,disabled:a,children:[(0,G.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,G.jsx)(`div`,{className:`text-sm truncate`,children:o}),(0,G.jsx)(`div`,{className:`text-caption text-muted-foreground truncate`,children:i||`—`})]}),(0,G.jsxs)(`div`,{className:`text-right num`,children:[(0,G.jsx)(`div`,{className:`text-sm font-medium`,title:l?r(`topTickets.costUnavailableTooltip`):u?r(`topTickets.costPartiallyUnavailableTooltip`):void 0,children:l?r(`topTickets.costUnavailable`):T(e.totalCostUsd)}),u&&(0,G.jsx)(`div`,{className:`text-caption text-muted-foreground`,children:r(`topTickets.costPartiallyUnavailable`,{count:c})}),(0,G.jsx)(`div`,{className:`text-caption text-muted-foreground`,children:r(`runs`,{count:e.totalRuns})})]})]})},`${e.ticketId??`u`}-${t}`)})})]})}var fi={claude:`Claude`,codex:`Codex`,gemini:`Gemini`,kimi:`Kimi`};function pi(e){return fi[e]??e}function mi(e){return!!e&&!(e in fi)}function hi(e){return e==null?`—`:T(e)}function gi(e){return e==null?`—`:E(e)}function _i(e){return e.surface_ref_id?.startsWith(`contract-refine:`)?!0:e.surface===`explore-spec`&&e.ticket_id!=null&&e.conversation_id!=null&&e.surface_ref_id===e.conversation_id&&e.model==null}function vi(e){let t=new Map;for(let n of e)n.model&&(n.conversation_id&&t.set(`conversation:${n.conversation_id}`,n.model),n.ticket_id!=null&&n.surface===`explore-spec`&&t.set(`ticket:${n.ticket_id}:explore-spec`,n.model),n.ticket_id!=null&&n.surface===`quick-spec`&&t.set(`ticket:${n.ticket_id}:quick-spec`,n.model));return t}function yi(e,t){if(e.model)return e.model;if(!_i(e))return null;if(e.conversation_id){let n=t.get(`conversation:${e.conversation_id}`);if(n)return n}return e.ticket_id==null?null:t.get(`ticket:${e.ticket_id}:${e.surface}`)??null}function bi({rows:e,loading:t,truncated:n,totalAvailable:r,tableFilters:i,onTableFiltersChange:a}){let{t:o,i18n:s}=l(`analytics`),[c,u]=(0,W.useState)(null),d=vi(e),f=new Set(e.map(e=>e.provider??`claude`)).size>1,p=n||r>e.length;return(0,G.jsxs)(`div`,{className:`rounded-xl border border-border/50 bg-card/40 p-4`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 mb-3`,children:[(0,G.jsx)(`h2`,{className:`text-strong`,children:o(`table.title`)}),(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-caption`,children:[(0,G.jsxs)(`select`,{value:i.status??``,onChange:e=>a({...i,status:e.target.value||void 0}),className:`h-7 px-2 rounded-md bg-background-deep border border-border/60 text-xs`,"aria-label":o(`table.statusFilterAria`),children:[(0,G.jsx)(`option`,{value:``,children:o(`table.allStatus`)}),(0,G.jsx)(`option`,{value:`success`,children:o(`table.success`)}),(0,G.jsx)(`option`,{value:`failed`,children:o(`table.failed`)}),(0,G.jsx)(`option`,{value:`aborted`,children:o(`table.aborted`)})]}),(0,G.jsx)(`input`,{type:`number`,step:`0.01`,min:`0`,placeholder:o(`table.minCostPlaceholder`,{amount:T(0)}),value:i.minCostUsd??``,onChange:e=>{let t=e.target.value===``?void 0:parseFloat(e.target.value);a({...i,minCostUsd:Number.isNaN(t)?void 0:t})},className:`h-7 w-24 px-2 rounded-md bg-background-deep border border-border/60 text-xs num`,"aria-label":o(`table.minCostFilterAria`)})]})]}),t?(0,G.jsx)(D,{className:`h-32`}):e.length===0?(0,G.jsx)(`div`,{className:`h-32 flex items-center justify-center text-xs text-muted-foreground`,children:o(`table.empty`)}):(0,G.jsx)(`div`,{className:`overflow-x-auto`,children:(0,G.jsxs)(`table`,{className:`w-full text-label num`,children:[(0,G.jsx)(`thead`,{className:`text-xs text-muted-foreground`,children:(0,G.jsxs)(`tr`,{className:`text-left`,children:[(0,G.jsx)(`th`,{className:`font-medium px-2 py-2`,children:o(`table.colSurface`)}),(0,G.jsx)(`th`,{className:`font-medium px-2 py-2`,children:o(`table.colTicket`)}),(0,G.jsx)(`th`,{className:`font-medium px-2 py-2 text-right`,children:o(`table.colCost`)}),(0,G.jsx)(`th`,{className:`font-medium px-2 py-2 text-right`,children:o(`table.colTurns`)}),(0,G.jsx)(`th`,{className:`font-medium px-2 py-2 text-right`,children:o(`table.colTokens`)}),(0,G.jsx)(`th`,{className:`font-medium px-2 py-2`,children:o(`table.colModel`)}),f&&(0,G.jsx)(`th`,{className:`font-medium px-2 py-2`,children:o(`table.colProvider`)}),(0,G.jsx)(`th`,{className:`font-medium px-2 py-2`,children:o(`table.colStatus`)}),(0,G.jsx)(`th`,{className:`font-medium px-2 py-2`,children:o(`table.colStarted`)})]})}),(0,G.jsx)(`tbody`,{children:e.map(e=>{let t=e.surface,n=_[t],r=(e.tokens_in??0)+(e.tokens_out??0)+(e.tokens_cache_read??0)+(e.tokens_cache_create??0),i=_i(e),a=i?o(`table.contractLayer`):h[t],l=yi(e,d);return(0,G.jsxs)(`tr`,{onClick:()=>u(c===e.id?null:e.id),className:`border-t border-border/30 hover:bg-accent/30 cursor-pointer ${c===e.id?`bg-accent/30`:``}`,children:[(0,G.jsx)(`td`,{className:`px-2 py-2`,children:(0,G.jsx)(`button`,{type:`button`,"aria-expanded":c===e.id,onClick:t=>{t.stopPropagation(),u(c===e.id?null:e.id)},className:`text-left rounded focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:(0,G.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 px-2 h-5 rounded-full text-caption font-medium ${n.bg} ${n.text}`,children:[(0,G.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full ${n.dot}`}),a]})})}),(0,G.jsx)(`td`,{className:`px-2 py-2 max-w-[260px]`,children:e.ticket_id==null?e.ticket_title?(0,G.jsxs)(`span`,{className:`truncate block text-muted-foreground italic`,title:o(`table.provisionalTitleTooltip`),children:[e.ticket_title,(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,o(`table.provisionalTitleTooltip`),`)`]})]}):(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:`—`}):(0,G.jsxs)(`span`,{className:`truncate block`,children:[`#`,e.ticket_id,` `,i?(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:o(`table.contractLayerRefinement`)}):e.ticket_title??(0,G.jsx)(`span`,{className:`text-muted-foreground italic`,children:o(`table.deleted`)})]})}),(0,G.jsx)(`td`,{className:`px-2 py-2 text-right font-medium`,children:e.total_cost_usd_estimated===1&&e.total_cost_usd!=null?(0,G.jsx)(Dt,{usd:e.total_cost_usd,estimated:!0,className:`text-muted-foreground`}):e.total_cost_usd==null&&mi(e.provider)?(0,G.jsxs)(`span`,{title:o(`table.costUnknownLocalTooltip`),"data-testid":`cost-unknown-local`,className:`text-muted-foreground`,children:[`—`,(0,G.jsxs)(`span`,{className:`sr-only`,children:[` (`,o(`table.costUnknownLocalTooltip`),`)`]})]}):hi(e.total_cost_usd)}),(0,G.jsx)(`td`,{className:`px-2 py-2 text-right`,children:gi(e.num_turns)}),(0,G.jsx)(`td`,{className:`px-2 py-2 text-right`,children:r>0?gi(r):`—`}),(0,G.jsxs)(`td`,{className:`px-2 py-2 max-w-[180px] truncate`,children:[l?(0,G.jsx)(ii,{slug:l}):`—`,l&&!e.model?(0,G.jsx)(`span`,{className:`ml-1 text-caption text-muted-foreground`,children:o(`table.inferred`)}):null]}),f&&(0,G.jsx)(`td`,{className:`px-2 py-2 text-muted-foreground`,children:pi(e.provider??`claude`)}),(0,G.jsx)(`td`,{className:`px-2 py-2`,children:(0,G.jsxs)(`span`,{className:`inline-flex items-center`,children:[e.status===`success`?(0,G.jsx)(ae,{className:`w-3 h-3 text-accent-success`,"aria-hidden":!0}):e.status===`failed`?(0,G.jsx)(b,{className:`w-3 h-3 text-accent-warning`,"aria-hidden":!0}):(0,G.jsx)(m,{className:`w-3 h-3 text-muted-foreground`,"aria-hidden":!0}),(0,G.jsx)(`span`,{className:`ml-1 text-muted-foreground`,children:o(`table.statusValue.${e.status}`)})]})}),(0,G.jsx)(`td`,{className:`px-2 py-2 text-muted-foreground num`,children:xi(e.started_at,s.language)})]},e.id)})})]})}),p&&e.length>0&&(0,G.jsx)(`div`,{className:`mt-2 text-caption text-muted-foreground`,children:o(`table.truncated`,{shown:e.length,total:r.toLocaleString(s.language)})})]})}function xi(e,t){let n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString(t,{dateStyle:`short`,timeStyle:`short`})}var Si=e=>Number.isSafeInteger(e)&&e>=0,Ci=e=>e===null||typeof e==`number`&&Number.isFinite(e)&&e>=0,wi=e=>{let t=e;return!!t&&Si(t.measured)&&Si(t.pending)&&Si(t.unknown)&&Ci(t.medianMs)&&Ci(t.p90Ms)},Ti=e=>{let t=e;return!!t&&Si(t.deliveries)&&wi(t.toDecision)&&wi(t.toMerge)};function Ei(e){let t=e;if(!t||!Ti(t.project)||!Array.isArray(t.byLoop)||t.byLoop.some(e=>!Ti(e)||typeof e.loopName!=`string`))throw Error(`Invalid decision times`);return t}function Di(e){let t=e/6e4;if(t<60)return{value:String(Math.max(0,Math.round(t))),unit:`minutes`};let n=t/60;if(n<48)return{value:n<10?n.toFixed(1):String(Math.round(n)),unit:`hours`};let r=n/24;return{value:r<10?r.toFixed(1):String(Math.round(r)),unit:`days`}}function Oi({projectId:e,period:t,from:n,to:r}){let{t:i}=l(`analytics`),a=(0,W.useRef)(new Map),o=new URLSearchParams({period:t});t===`custom`&&n&&r&&(o.set(`from`,n),o.set(`to`,r));let c=`${e}?${o.toString()}`,[u,d]=(0,W.useState)({key:c,loading:!0,error:!1});(0,W.useEffect)(()=>{if(t===`custom`&&(!n||!r))return;let e=!0,i=new AbortController;return d({key:c,loading:!0,error:!1}),(async()=>{try{let t=await fetch(`${s()}/analytics/decision-times?${c.slice(c.indexOf(`?`)+1)}`,{signal:i.signal});if(!t.ok)throw Error(`Decision times unavailable`);let n=Ei(await t.json());if(!e)return;a.current.set(c,n),d({key:c,loading:!1,error:!1})}catch{e&&d({key:c,loading:!1,error:!0})}})(),()=>{e=!1,i.abort()}},[c,t,n,r]);let f=a.current.get(c),p=u.key!==c||u.loading,m=u.key===c&&u.error,h=e=>{if(e===null)return i(`decisionTimes.unknownValue`);let{value:t,unit:n}=Di(e);return i(`decisionTimes.units.${n}`,{value:t})},g=(e,t,n)=>(0,G.jsxs)(`div`,{className:`rounded-lg border border-border/40 bg-background/40 p-3`,"data-testid":n,children:[(0,G.jsx)(`p`,{className:`text-caption text-muted-foreground`,children:e}),(0,G.jsxs)(`div`,{className:`mt-1 flex items-baseline gap-3`,children:[(0,G.jsx)(`span`,{className:`text-2xl font-semibold num tracking-tight`,children:h(t.medianMs)}),(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:i(`decisionTimes.median`)})]}),(0,G.jsxs)(`p`,{className:`text-xs text-muted-foreground num`,children:[i(`decisionTimes.p90`),` `,(0,G.jsx)(`span`,{className:`text-foreground`,children:h(t.p90Ms)})]}),(0,G.jsx)(`p`,{className:`mt-2 text-caption text-muted-foreground num`,children:i(`decisionTimes.counts`,{measured:t.measured,pending:t.pending,unknown:t.unknown})})]});return(0,G.jsxs)(`section`,{className:`rounded-xl border border-border/50 bg-card p-4 space-y-3`,"aria-label":i(`decisionTimes.title`),"data-testid":`decision-times-card`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(Nt,{className:`h-4 w-4 text-accent-highlight`,"aria-hidden":`true`}),(0,G.jsx)(`h3`,{className:`text-strong`,children:i(`decisionTimes.title`)}),(0,G.jsx)(`span`,{className:`text-caption text-muted-foreground`,children:i(`decisionTimes.subtitle`)})]}),m&&(0,G.jsx)(`p`,{role:`status`,className:`text-xs text-destructive`,children:i(`decisionTimes.unavailable`)}),!f&&p&&(0,G.jsx)(`p`,{role:`status`,className:`text-xs text-muted-foreground`,children:i(`decisionTimes.loading`)}),f&&f.project.deliveries===0&&(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,"data-testid":`decision-times-empty`,children:i(`decisionTimes.empty`)}),f&&f.project.deliveries>0&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2`,children:[g(i(`decisionTimes.toDecision`),f.project.toDecision,`decision-times-to-decision`),g(i(`decisionTimes.toMerge`),f.project.toMerge,`decision-times-to-merge`)]}),f.byLoop.length>0&&(0,G.jsx)(`div`,{className:`overflow-x-auto`,children:(0,G.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,G.jsx)(`caption`,{className:`sr-only`,children:i(`decisionTimes.byLoop`)}),(0,G.jsx)(`thead`,{children:(0,G.jsxs)(`tr`,{className:`text-left text-muted-foreground`,children:[(0,G.jsx)(`th`,{scope:`col`,className:`py-1.5 pr-3 font-normal`,children:i(`decisionTimes.loop`)}),(0,G.jsx)(`th`,{scope:`col`,className:`py-1.5 pr-3 font-normal text-right`,children:i(`decisionTimes.deliveries`)}),(0,G.jsx)(`th`,{scope:`col`,className:`py-1.5 pr-3 font-normal text-right`,children:i(`decisionTimes.decisionMedianP90`)}),(0,G.jsx)(`th`,{scope:`col`,className:`py-1.5 font-normal text-right`,children:i(`decisionTimes.mergeMedianP90`)})]})}),(0,G.jsx)(`tbody`,{children:f.byLoop.map(e=>(0,G.jsxs)(`tr`,{className:`border-t border-border/30`,children:[(0,G.jsx)(`th`,{scope:`row`,className:`py-1.5 pr-3 text-left font-normal`,children:e.loopName||i(`decisionTimes.unnamedLoop`)}),(0,G.jsx)(`td`,{className:`py-1.5 pr-3 text-right num`,children:e.deliveries}),(0,G.jsxs)(`td`,{className:`py-1.5 pr-3 text-right num`,children:[h(e.toDecision.medianMs),` · `,h(e.toDecision.p90Ms)]}),(0,G.jsxs)(`td`,{className:`py-1.5 text-right num`,children:[h(e.toMerge.medianMs),` · `,h(e.toMerge.p90Ms)]})]},e.loopId??`name:${e.loopName}`))})]})}),(0,G.jsx)(`p`,{className:`text-caption text-muted-foreground`,children:i(`decisionTimes.note`)})]})]})}var ki=e=>Number.isSafeInteger(e)&&e>=0,$=e=>e===null||typeof e==`number`&&Number.isFinite(e)&&e>=0,Ai=e=>{let t=e;return!!t&&typeof t.hasData==`boolean`&&[t.delivered,t.merged,t.discarded].every(ki)&&$(t.discardRate)&&!!t.cost&&$(t.cost.avgCostUsd)&&$(t.cost.estimatedShare)&&ki(t.cost.unpricedDeliveries)&&!!t.rounds&&$(t.rounds.reviewPerDelivery)&&$(t.rounds.fixerPerDelivery)&&!!t.decisionTimes?.toDecision&&!!t.decisionTimes?.toMerge&&(t.escapedDefects===null||ki(t.escapedDefects))};function ji(e){let t=e;if(!t||!Ai(t.project)||!Array.isArray(t.byLoop)||t.byLoop.some(e=>!Ai(e)||typeof e.loopName!=`string`))throw Error(`Invalid loop economics`);return t}var Mi=e=>(Math.round(e*10)/10).toString(),Ni=e=>`${Math.round(e*100)}%`;function Pi({projectId:e,period:t,from:n,to:r}){let{t:i}=l(`analytics`),a=(0,W.useRef)(new Map),o=new URLSearchParams({period:t});t===`custom`&&n&&r&&(o.set(`from`,n),o.set(`to`,r));let c=`${e}?${o.toString()}`,[u,d]=(0,W.useState)({key:c,loading:!0,error:!1});(0,W.useEffect)(()=>{if(t===`custom`&&(!n||!r))return;let e=!0,i=new AbortController;return d({key:c,loading:!0,error:!1}),(async()=>{try{let t=await fetch(`${s()}/analytics/loop-economics?${c.slice(c.indexOf(`?`)+1)}`,{signal:i.signal});if(!t.ok)throw Error(`Loop economics unavailable`);let n=ji(await t.json());if(!e)return;a.current.set(c,n),d({key:c,loading:!1,error:!1})}catch{e&&d({key:c,loading:!1,error:!0})}})(),()=>{e=!1,i.abort()}},[c,t,n,r]);let f=a.current.get(c),p=u.key!==c||u.loading,m=u.key===c&&u.error,h=i(`loopEconomics.unknownValue`),g=e=>{if(e===null)return h;let{value:t,unit:n}=Di(e);return i(`decisionTimes.units.${n}`,{value:t})},_=e=>{if(e.cost.avgCostUsd===null)return(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:h});let t=e.cost.estimatedShare;return(0,G.jsxs)(`span`,{className:`inline-flex flex-col items-end leading-tight`,children:[(0,G.jsx)(Dt,{usd:e.cost.avgCostUsd,estimated:t!==null&&t>0}),t!==null&&t>0&&(0,G.jsx)(`span`,{className:`text-caption text-accent-warning`,children:i(`loopEconomics.estimatedShare`,{share:Ni(t)})}),e.cost.unpricedDeliveries>0&&(0,G.jsx)(`span`,{className:`text-caption text-muted-foreground`,children:i(`loopEconomics.unpriced`,{count:e.cost.unpricedDeliveries})})]})},v=e=>e===null?(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:h}):e,y=(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:i(`loopEconomics.noData`)}),b=[`delivered`,`merged`,`discarded`,`avgCost`,`toDecision`,`toMerge`,`reviewRounds`,`fixerRounds`,`escapedDefects`,`requirementsDemonstrated`,`triageAccuracy`],x=e=>[e.delivered,e.merged,(0,G.jsxs)(`span`,{children:[e.discarded,e.discardRate!==null&&(0,G.jsxs)(`span`,{className:`text-muted-foreground`,children:[` · `,Ni(e.discardRate)]})]},`d`),_(e),`${g(e.decisionTimes.toDecision.medianMs)} · ${g(e.decisionTimes.toDecision.p90Ms)}`,`${g(e.decisionTimes.toMerge.medianMs)} · ${g(e.decisionTimes.toMerge.p90Ms)}`,v(e.rounds.reviewPerDelivery===null?null:Mi(e.rounds.reviewPerDelivery)),v(e.rounds.fixerPerDelivery===null?null:Mi(e.rounds.fixerPerDelivery)),e.escapedDefects===null?y:e.escapedDefects,e.requirementsDemonstrated===null?y:(0,G.jsxs)(`span`,{children:[e.requirementsDemonstrated.demonstrated,`/`,e.requirementsDemonstrated.total,e.requirementsDemonstrated.total>0&&(0,G.jsxs)(`span`,{className:`text-muted-foreground`,children:[` · `,Ni(e.requirementsDemonstrated.demonstrated/e.requirementsDemonstrated.total)]})]},`r`),e.triageAccuracy===null?y:`${e.triageAccuracy.matched}/${e.triageAccuracy.total}`];return(0,G.jsxs)(`section`,{className:`rounded-xl border border-border/50 bg-card p-4 space-y-3`,"aria-label":i(`loopEconomics.title`),"data-testid":`loop-economics-card`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(jt,{className:`h-4 w-4 text-accent-highlight`,"aria-hidden":`true`}),(0,G.jsx)(`h3`,{className:`text-strong`,children:i(`loopEconomics.title`)}),(0,G.jsx)(`span`,{className:`text-caption text-muted-foreground`,children:i(`loopEconomics.subtitle`)})]}),m&&(0,G.jsx)(`p`,{role:`status`,className:`text-xs text-destructive`,children:i(`loopEconomics.unavailable`)}),!f&&p&&(0,G.jsx)(`p`,{role:`status`,className:`text-xs text-muted-foreground`,children:i(`loopEconomics.loading`)}),f&&f.byLoop.length===0&&(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,"data-testid":`loop-economics-empty`,children:i(`loopEconomics.empty`)}),f&&f.byLoop.length>0&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`overflow-x-auto`,children:(0,G.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,G.jsx)(`caption`,{className:`sr-only`,children:i(`loopEconomics.title`)}),(0,G.jsx)(`thead`,{children:(0,G.jsxs)(`tr`,{className:`text-left text-muted-foreground`,children:[(0,G.jsx)(`th`,{scope:`col`,className:`py-1.5 pr-3 font-normal`,children:i(`loopEconomics.columns.loop`)}),b.map(e=>(0,G.jsx)(`th`,{scope:`col`,className:`py-1.5 pr-3 font-normal text-right whitespace-nowrap`,children:i(`loopEconomics.columns.${e}`)},e))]})}),(0,G.jsx)(`tbody`,{children:f.byLoop.map(e=>(0,G.jsxs)(`tr`,{className:`border-t border-border/30`,"data-testid":`loop-economics-row`,children:[(0,G.jsx)(`th`,{scope:`row`,className:`py-1.5 pr-3 text-left font-normal whitespace-nowrap`,children:e.loopName||i(`loopEconomics.unnamedLoop`)}),e.hasData?x(e).map((e,t)=>(0,G.jsx)(`td`,{className:`py-1.5 pr-3 text-right num whitespace-nowrap`,children:e},b[t])):(0,G.jsx)(`td`,{colSpan:b.length,className:`py-1.5 pr-3 text-left text-muted-foreground`,children:i(`loopEconomics.noData`)})]},e.loopId??`name:${e.loopName}`))})]})}),(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:i(`loopEconomics.note`)}),f.sources.escapedDefects===`untracked`&&(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,"data-testid":`loop-economics-untracked`,children:i(`loopEconomics.escapedUntracked`)})]})]})}var Fi=[{value:`7d`,labelKey:`periods.d7`},{value:`30d`,labelKey:`periods.d30`},{value:`90d`,labelKey:`periods.d90`},{value:`all`,labelKey:`periods.all`}],Ii=[{value:`all`,labelKey:`page.all`},{value:`job`,labelKey:`surfaces.job`},{value:`explore-spec`,labelKey:`surfaces.exploreSpec`},{value:`quick-spec`,labelKey:`surfaces.quickSpec`},{value:`ai-edit`,labelKey:`surfaces.aiEdit`},{value:`smash`,labelKey:`surfaces.smash`},{value:`file-summary`,labelKey:`surfaces.fileSummary`},{value:`loop`,labelKey:`surfaces.loop`}];function Li(e){let t=new URLSearchParams;return e.period&&t.set(`period`,e.period),e.from&&t.set(`from`,e.from),e.to&&t.set(`to`,e.to),e.surface&&e.surface.length>0&&t.set(`surface`,e.surface.join(`,`)),e.provider&&e.provider.length>0&&t.set(`provider`,e.provider.join(`,`)),e.model&&e.model.length>0&&t.set(`model`,e.model.join(`,`)),e.modelKeys&&e.modelKeys.length>0&&e.model&&e.modelKeys.length===e.model.length&&t.set(`modelProvider`,e.modelKeys.map(e=>e.provider).join(`,`)),e.status&&t.set(`status`,e.status),typeof e.minCostUsd==`number`&&t.set(`minCostUsd`,String(e.minCostUsd)),typeof e.ticketId==`number`&&t.set(`ticketId`,String(e.ticketId)),typeof e.tzOffsetMinutes==`number`&&t.set(`tzOffsetMinutes`,String(e.tzOffsetMinutes)),e.sortBy&&t.set(`sortBy`,e.sortBy),t.toString()}function Ri(){let{t:e}=l(`analytics`),{activeProjectId:t,projects:n}=C(),[r,a]=i(),c=(0,W.useRef)(null),[u,p]=(0,W.useState)(()=>r.get(le)===`budget`),m=(0,W.useCallback)(()=>{u&&(c.current?.scrollIntoView?.({block:`start`,behavior:`smooth`}),p(!1))},[u]),h=r.get(le)===`budget`;(0,W.useEffect)(()=>{h&&p(!0)},[h]);let g=n.find(e=>e.id===t),_=g?S(g):[`claude`],b=_.length>1,x=r.get(`period`)??`30d`,w=(r.get(`surface`)??``).split(`,`).filter(Boolean),T=(r.get(`provider`)??``).split(`,`).filter(Boolean),ae=r.get(`ticketId`),E=(r.get(`model`)??``).split(`,`).filter(Boolean),oe=(r.get(`modelProvider`)??``).split(`,`).filter(Boolean),se=E.length>0&&E.length===oe.length?E.map((e,t)=>({provider:oe[t],model:e})):void 0,ce=(0,W.useMemo)(()=>-new Date().getTimezoneOffset(),[]),[D,O]=(0,W.useState)({period:x,surface:w.length>0?w:void 0,provider:T.length>0?T:void 0,ticketId:ae?Number(ae):void 0,model:E.length>0?E:void 0,modelKeys:se,tzOffsetMinutes:ce}),[k,fe]=(0,W.useState)(null),[A,j]=(0,W.useState)(!0),[pe,me]=(0,W.useState)(null),[M,he]=(0,W.useState)({}),[N,ge]=(0,W.useState)(null),[P,_e]=(0,W.useState)(`recency`),F=(0,W.useRef)(new Map),ve=(0,W.useRef)(0);(0,W.useEffect)(()=>{let e=new URLSearchParams;e.set(`period`,D.period),D.surface&&D.surface.length>0&&e.set(`surface`,D.surface.join(`,`)),D.provider&&D.provider.length>0&&e.set(`provider`,D.provider.join(`,`)),D.ticketId&&e.set(`ticketId`,String(D.ticketId)),D.model&&D.model.length>0&&(e.set(`model`,D.model.join(`,`)),D.modelKeys&&D.modelKeys.length===D.model.length&&e.set(`modelProvider`,D.modelKeys.map(e=>e.provider).join(`,`))),u&&e.set(le,`budget`),a(e,{replace:!0})},[D.period,D.surface,D.provider,D.ticketId,D.model,D.modelKeys,u,a]);let I=(0,W.useCallback)(async()=>{if(!t)return;let e=++ve.current;me(null);let n=`${t}:${Li(D)}`,r=F.current.get(n);r?(fe(r),j(!1)):j(!0);try{let t=await fetch(`${s()}/spending?${Li(D)}`);if(!t.ok)throw Error(`HTTP ${t.status}`);if(e!==ve.current)return;let r=await t.json();F.current.set(n,r),fe(r),j(!1)}catch(t){if(e!==ve.current)return;me(t.message),j(!1)}},[t,D]),ye=(0,W.useRef)(0),L=(0,W.useCallback)(async()=>{if(!t)return;let e=++ye.current,n={...D};M.model&&(n.model=[M.model],n.modelKeys=void 0),M.status&&(n.status=M.status),typeof M.minCostUsd==`number`&&(n.minCostUsd=M.minCostUsd),n.sortBy=P;try{let t=await fetch(`${s()}/invocations?${Li(n)}&limit=100`);if(!t.ok)throw Error(`HTTP ${t.status}`);let r=await t.json();if(e!==ye.current)return;ge(r)}catch{if(e!==ye.current)return;ge(null)}},[t,D,M,P]),be=(0,W.useRef)(t);(0,W.useEffect)(()=>{be.current!==t&&(be.current=t,fe(null),ge(null),j(!0))},[t]),(0,W.useEffect)(()=>{I()},[I]),(0,W.useEffect)(()=>{L()},[L]);let R=(0,W.useRef)(null),z=o();(0,W.useEffect)(()=>{let e=`analytics-spending`;return z.registerHandler(e,e=>{let n=e;n.type===`spending.invalidated`&&n.projectId===t&&(R.current&&clearTimeout(R.current),R.current=setTimeout(()=>{F.current.clear(),I(),L()},500))}),()=>{z.unregisterHandler(e),R.current&&clearTimeout(R.current)}},[z,t,I,L]);function xe(e){if(e===`all`){O(e=>({...e,surface:void 0}));return}O(t=>{let n=t.surface??[],r=n.includes(e)?n.filter(t=>t!==e):[...n,e];return{...t,surface:r.length>0?r:void 0}})}let Se=(0,W.useCallback)((e,t)=>{O(n=>{if(n.model?.length===1&&n.model[0]===e&&(t===void 0||n.modelKeys?.length===1&&n.modelKeys[0].provider===t))return{...n,model:void 0,modelKeys:void 0};let r=(k?.byModel??[]).filter(n=>n.model===e&&(t===void 0||n.provider===t)).map(e=>({provider:e.provider,model:e.model})),i=r.length>0?r.map(e=>e.model):[e];return{...n,model:i,modelKeys:r.length>0?r:void 0}})},[k]);function Ce(){O(e=>({...e,model:void 0,modelKeys:void 0}))}function B(e){if(e===`all`){O(e=>({...e,provider:void 0}));return}O(t=>{let n=t.provider??[],r=n.includes(e)?n.filter(t=>t!==e):[...n,e];return{...t,provider:r.length>0?r:void 0}})}let we=D.surface,Te=!we||we.length===0,V=D.provider,Ee=!V||V.length===0,De=(0,W.useMemo)(()=>{let e={period:D.period};return D.surface&&D.surface.length>0&&(e.surface=D.surface.join(`,`)),D.provider&&D.provider.length>0&&(e.provider=D.provider.join(`,`)),D.ticketId&&(e.ticketId=String(D.ticketId)),e},[D]),Oe=k?k.summary.totalRuns===0:!1;return(0,G.jsxs)(`div`,{className:`flex flex-col gap-6 p-4 pb-12`,children:[(0,G.jsxs)(`div`,{className:`sticky top-0 z-10 -mx-4 px-4 py-3 bg-background border-b border-border/40`,children:[(0,G.jsx)(ue,{title:e(`page.title`),description:e(`page.subtitle`),titleExtra:(0,G.jsxs)(G.Fragment,{children:[D.ticketId&&(0,G.jsx)(`button`,{type:`button`,onClick:()=>O(e=>({...e,ticketId:void 0})),className:`inline-flex items-center gap-1 h-6 px-2 rounded-full text-caption font-medium bg-accent-highlight/15 text-accent-highlight ring-1 ring-accent-highlight/30 hover:bg-accent-highlight/25`,children:e(`page.ticketChip`,{id:D.ticketId})}),D.model&&D.model.length>0&&(0,G.jsxs)(`button`,{type:`button`,"data-testid":`analytics-model-chip`,onClick:Ce,title:e(`page.clearModelFilter`),className:`inline-flex items-center gap-1 h-6 px-2 rounded-full text-caption font-medium bg-accent-highlight/15 text-accent-highlight ring-1 ring-accent-highlight/30 hover:bg-accent-highlight/25`,children:[e(`page.modelChip`,{model:D.model[0]}),(0,G.jsx)(`span`,{"aria-hidden":!0,className:`opacity-70`,children:`×`})]})]}),actions:(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`flex items-center gap-1 rounded-md border border-border/60 bg-card/40 p-0.5`,children:Fi.map(t=>(0,G.jsx)(`button`,{type:`button`,"aria-pressed":D.period===t.value,onClick:()=>O(e=>({...e,period:t.value})),className:`px-2.5 h-6 rounded text-caption font-medium transition-colors ${D.period===t.value?`bg-accent text-foreground`:`text-muted-foreground hover:text-foreground`}`,children:e(t.labelKey)},t.value))}),(0,G.jsx)(de,{baseUrl:`${s()}/analytics/export`,params:De,disabled:Oe}),(0,G.jsx)(`button`,{type:`button`,onClick:()=>{F.current.clear(),I(),L()},className:`h-7 w-7 inline-flex items-center justify-center rounded-md border border-border/60 bg-card/50 text-muted-foreground hover:text-foreground hover:bg-accent/60`,title:e(`common:actions.refresh`),"aria-label":e(`common:actions.refresh`),children:(0,G.jsx)(y,{className:`w-3 h-3`})})]})}),(0,G.jsx)(`div`,{className:`mt-3 flex flex-wrap items-center gap-1.5`,children:Ii.map(t=>{let n=t.value===`all`?Te:we?.includes(t.value)??!1;return(0,G.jsx)(`button`,{type:`button`,"aria-pressed":n,onClick:()=>xe(t.value),className:`h-7 px-3 rounded-full text-caption font-medium transition-all ${n?`bg-foreground/10 text-foreground ring-1 ring-foreground/20`:`text-muted-foreground hover:text-foreground hover:bg-accent/40`}`,children:e(t.labelKey)},t.value)})}),b&&(0,G.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-1.5`,"data-testid":`analytics-provider-chips`,children:[(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground mr-1`,children:e(`page.engine`)}),_.length>4?(0,G.jsxs)(ie,{value:Ee?`all`:V?.length===1?V[0]:``,onValueChange:e=>e===`all`?B(`all`):O(t=>({...t,provider:[e]})),children:[(0,G.jsx)(te,{className:`h-7 w-auto min-w-[8rem] gap-2`,"aria-label":e(`page.engine`),"data-testid":`analytics-provider-select`,children:(0,G.jsx)(ee,{placeholder:e(`page.all`)})}),(0,G.jsxs)(ne,{children:[(0,G.jsx)(re,{value:`all`,children:e(`page.all`)}),_.map(e=>(0,G.jsx)(re,{value:e,children:f(e)},e))]})]}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`button`,{type:`button`,"aria-pressed":Ee,onClick:()=>B(`all`),className:`h-7 px-3 rounded-full text-caption font-medium transition-all ${Ee?`bg-foreground/10 text-foreground ring-1 ring-foreground/20`:`text-muted-foreground hover:text-foreground hover:bg-accent/40`}`,children:e(`page.all`)}),_.map(t=>{let n=V?.includes(t)??!1;return(0,G.jsxs)(`button`,{type:`button`,"aria-pressed":n,onClick:()=>B(t),className:`h-7 px-3 rounded-full text-caption font-medium transition-all ${n?`bg-foreground/10 text-foreground ring-1 ring-foreground/20`:`text-muted-foreground hover:text-foreground hover:bg-accent/40`}`,children:[f(t),d(t)&&(0,G.jsx)(`span`,{className:`ml-1 rounded-full bg-accent-secondary/15 px-1.5 text-xs text-accent-secondary`,children:e(`page.localEngine`)})]},t)})]})]})]}),pe&&(0,G.jsxs)(`div`,{role:`alert`,className:`rounded-lg border border-accent-warning/30 bg-accent-warning/10 p-4 flex items-center justify-between gap-3`,children:[(0,G.jsx)(`p`,{className:`text-sm text-accent-warning`,children:e(`page.failedToLoad`)}),(0,G.jsxs)(`button`,{type:`button`,onClick:()=>I(),className:`flex items-center gap-1.5 h-7 px-3 rounded-md text-xs text-accent-warning border border-accent-warning/30 hover:bg-accent-warning/10`,children:[(0,G.jsx)(y,{className:`w-3 h-3`}),e(`common:actions.retry`)]})]}),(0,G.jsx)(Ft,{data:k,loading:A,period:D.period}),!1,t&&(0,G.jsx)(`div`,{ref:c,children:(0,G.jsx)(ht,{projectId:t,onReady:m,refreshKey:k?.summary?.totalCostUsd??null})}),(0,G.jsx)(Vt,{data:k,loading:A}),(0,G.jsx)(Xr,{data:k,loading:A}),(0,G.jsxs)(`div`,{className:`grid grid-cols-1 lg:grid-cols-2 gap-4`,children:[(0,G.jsx)(ti,{data:k,loading:A}),(0,G.jsx)(ai,{data:k,loading:A,onSelectModel:Se,activeModel:D.model?.[0]})]}),(0,G.jsx)(di,{data:k,loading:A,onSelectTicket:e=>O(t=>({...t,ticketId:e??void 0}))}),(0,G.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-end gap-1.5`,"data-testid":`analytics-table-sort`,children:[(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground mr-1`,children:e(`table.sortLabel`)}),[`recency`,`cost`].map(t=>(0,G.jsx)(`button`,{type:`button`,"data-testid":`analytics-table-sort-${t}`,"aria-pressed":P===t,onClick:()=>_e(t),className:`h-6 px-2.5 rounded-full text-caption font-medium transition-all ${P===t?`bg-foreground/10 text-foreground ring-1 ring-foreground/20`:`text-muted-foreground hover:text-foreground hover:bg-accent/40`}`,children:e(t===`recency`?`table.sortRecency`:`table.sortCost`)},t))]}),(0,G.jsx)(bi,{rows:N?.rows??[],loading:A&&!N,truncated:(N?.truncated??!1)||(N?.totalAvailable??0)>(N?.rows.length??0),totalAvailable:N?.totalAvailable??0,tableFilters:M,onTableFiltersChange:he})]}),(0,G.jsxs)(`details`,{className:`group rounded-lg border border-border/40`,"data-testid":`analytics-more-breakdowns`,children:[(0,G.jsxs)(`summary`,{className:`flex cursor-pointer list-none items-center gap-1.5 rounded-lg px-4 py-3 text-sm font-medium text-foreground hover:bg-accent/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden`,children:[(0,G.jsx)(v,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground motion-safe:transition-transform motion-safe:duration-150 group-open:rotate-90`,"aria-hidden":!0}),e(`page.moreBreakdowns`)]}),(0,G.jsxs)(`div`,{className:`flex flex-col gap-6 px-4 pb-4 pt-2`,children:[(0,G.jsx)(ri,{data:k,loading:A}),t&&(0,G.jsx)(Oi,{projectId:t,period:D.period,from:D.from,to:D.to}),t&&(0,G.jsx)(Pi,{projectId:t,period:D.period,from:D.from,to:D.to}),(0,G.jsx)(ui,{data:k,loading:A,onSelectPoint:e=>{he(e=>({...e})),O(t=>({...t,ticketId:e.ticketId??void 0}))}})]})]})]})}export{Ri as default};
|