specrails-desktop 2.20.1 → 2.22.0
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 +3 -2
- package/client/dist/assets/{ActivityFeedPage-3WSqRYVx.js → ActivityFeedPage-roDyKGuv.js} +1 -1
- package/client/dist/assets/AgentBrowserCapture-BsXnWa4j.js +1 -0
- package/client/dist/assets/{AgentModeCodePane-Cnsea6eZ.js → AgentModeCodePane-o97EJvbJ.js} +2 -2
- package/client/dist/assets/AgentModeJobsPane-CLtpPxPM.js +1 -0
- package/client/dist/assets/AgentsPage-eNSo_ZcC.js +86 -0
- package/client/dist/assets/AnalyticsPage-cAJ60_Ex.js +1 -0
- package/client/dist/assets/{BarChart-C6If656N.js → BarChart-NLtK7xAY.js} +1 -1
- package/client/dist/assets/CodePage-B5rum8ZB.js +2 -0
- package/client/dist/assets/DesktopAnalyticsPage-DSuvG6Tq.js +1 -0
- package/client/dist/assets/DocsDialog-Bo38G3Yc.js +11 -0
- package/client/dist/assets/DocsPage-BNkiBBrC.js +11 -0
- package/client/dist/assets/{ExportDropdown-CezTK0EX.js → ExportDropdown-DCV8PN4-.js} +1 -1
- package/client/dist/assets/IntegrationsPage-BMJOzpPz.js +3 -0
- package/client/dist/assets/InteractiveJobComposer-aLduNs5R.js +19 -0
- package/client/dist/assets/JobDetailModal-kpkUWJIS.js +1 -0
- package/client/dist/assets/JobDetailPage-CFeqlrPU.js +1 -0
- package/client/dist/assets/JobsPage-fuwhXy2I.js +1 -0
- package/client/dist/assets/LoopBuilderPage-DP66322C.js +7 -0
- package/client/dist/assets/LoopPreviewModal-CpmBhE31.js +1 -0
- package/client/dist/assets/LoopsPage-CvQ18VUx.js +1 -0
- package/client/dist/assets/ProjectSettingsDialog-Deq4pwvq.js +1 -0
- package/client/dist/assets/TemplatePreviewModal-DziOj2Ct.js +1 -0
- package/client/dist/assets/agent-Csh4kP2S.js +1 -0
- package/client/dist/assets/agent-Cz_jgQX32.js +1 -0
- package/client/dist/assets/agent-D3vcIvaz2.js +1 -0
- package/client/dist/assets/agent-Dnbt0V4e.js +1 -0
- package/client/dist/assets/agent-HolR7QrZ.js +1 -0
- package/client/dist/assets/agent-Ka0rRWJy.js +1 -0
- package/client/dist/assets/agent-Te3yysMd.js +1 -0
- package/client/dist/assets/agent-vM4_iLDk2.js +1 -0
- package/client/dist/assets/{upload-CRtTj4Co.js → brain-kFJuEDNH.js} +1 -1
- package/client/dist/assets/{browser-DEEO-OSi.js → browser-BPkhILSJ.js} +1 -1
- package/client/dist/assets/{browser-BTivfZKE2.js → browser-BijVYG0Y2.js} +1 -1
- package/client/dist/assets/{browser-bpO3onlS.js → browser-BqLqJVVT.js} +1 -1
- package/client/dist/assets/{browser-DlSXtfu5.js → browser-Cc0iDqUi.js} +1 -1
- package/client/dist/assets/browser-CdS6O1Qb.js +1 -0
- package/client/dist/assets/{browser-BKP6hqQC2.js → browser-Cvg-QHvd2.js} +1 -1
- package/client/dist/assets/{browser-INCUyduh.js → browser-FRv8P02E.js} +1 -1
- package/client/dist/assets/{browser-DlKLfT612.js → browser-rWKj-RR_2.js} +1 -1
- package/client/dist/assets/code-BRcDlze52.js +1 -0
- package/client/dist/assets/code-BdMy3Ffq.js +1 -0
- package/client/dist/assets/code-CeQ0FZpC.js +1 -0
- package/client/dist/assets/code-CqCcRThR.js +1 -0
- package/client/dist/assets/code-DgeHz9CB.js +1 -0
- package/client/dist/assets/code-DzC1rMk12.js +1 -0
- package/client/dist/assets/code-UPVvmAKM2.js +1 -0
- package/client/dist/assets/code-thSEptMx.js +1 -0
- package/client/dist/assets/{common-QjVnq9XP2.js → common-BM3LFLCE2.js} +1 -1
- package/client/dist/assets/{common-CeQUwuHt2.js → common-Bwafujnc2.js} +1 -1
- package/client/dist/assets/{common-Bb64s3Bm.js → common-C-vU-j-I.js} +1 -1
- package/client/dist/assets/{common-KbQuTSGg.js → common-C5HKSbbz.js} +1 -1
- package/client/dist/assets/{common-BPQQkgJZ.js → common-CYaT2yHp.js} +1 -1
- package/client/dist/assets/{common-DPxotRK9.js → common-DhWTkocg.js} +1 -1
- package/client/dist/assets/{common-k5MTOHpn.js → common-DiPTT7V_2.js} +1 -1
- package/client/dist/assets/{common-C8ZD5upH2.js → common-DmqBPwZG.js} +1 -1
- package/client/dist/assets/{cssMode-DsArsSCT.js → cssMode-DBHbkBvI.js} +1 -1
- package/client/dist/assets/dashboard-BaStj_a_.js +1 -0
- package/client/dist/assets/dashboard-Bi6ugu5Q.js +1 -0
- package/client/dist/assets/dashboard-BmqTn3L02.js +1 -0
- package/client/dist/assets/dashboard-CvT8lOCT.js +1 -0
- package/client/dist/assets/dashboard-D7Pmeavq2.js +1 -0
- package/client/dist/assets/dashboard-DAnWdAac2.js +1 -0
- package/client/dist/assets/dashboard-JnYy2WLg.js +1 -0
- package/client/dist/assets/dashboard-L47YsFS_.js +1 -0
- package/client/dist/assets/{dist-js-BQn4yxaw.js → dist-js-BZSiJDbG.js} +1 -1
- package/client/dist/assets/{dist-js-BAWSqVtr.js → dist-js-DKpmIJlQ.js} +1 -1
- package/client/dist/assets/{editor.main-G3Sl9C67.js → editor.main-C9J2ikJK.js} +2 -2
- package/client/dist/assets/{freemarker2-pBzQNgFi.js → freemarker2-J5iIIIK-.js} +1 -1
- package/client/dist/assets/{handlebars-CtBTCnBI.js → handlebars-DSw1l_tw.js} +1 -1
- package/client/dist/assets/{html-Dx3DYBzY.js → html-h2-wE1Lj.js} +1 -1
- package/client/dist/assets/{htmlMode-In7frFOo.js → htmlMode-Cc_ij7lW.js} +1 -1
- package/client/dist/assets/index-DM6heiGa.js +155 -0
- package/client/dist/assets/index-DPX6_xIC.css +2 -0
- package/client/dist/assets/{javascript-BKcn-YkN.js → javascript-C1q3xv6N.js} +1 -1
- package/client/dist/assets/jira-B3613-gj.js +1 -0
- package/client/dist/assets/jira-BHAKtc4B.js +1 -0
- package/client/dist/assets/jira-Be369RIR2.js +1 -0
- package/client/dist/assets/jira-CPpgA-5z2.js +1 -0
- package/client/dist/assets/jira-D5efgwp_.js +1 -0
- package/client/dist/assets/jira-DS7ownDy.js +1 -0
- package/client/dist/assets/jira-bDs7Im2C.js +1 -0
- package/client/dist/assets/jira-uNH1gETL2.js +1 -0
- package/client/dist/assets/jobs-1GV2-4zd2.js +1 -0
- package/client/dist/assets/jobs-26F9gGcE.js +1 -0
- package/client/dist/assets/jobs-BgQzB0Sx2.js +1 -0
- package/client/dist/assets/jobs-BqWui9_f.js +1 -0
- package/client/dist/assets/jobs-CE8qeIYj.js +1 -0
- package/client/dist/assets/jobs-D5sZzgLs.js +1 -0
- package/client/dist/assets/jobs-DzeuASRf.js +1 -0
- package/client/dist/assets/jobs-Wh7dn28q2.js +1 -0
- package/client/dist/assets/{jsonMode-jNREoQ3C.js → jsonMode-CeaCdEhr.js} +1 -1
- package/client/dist/assets/{lib-C-g8QbZl.js → lib-B2nCKzmA.js} +1 -1
- package/client/dist/assets/{liquid-CtRkGqBu.js → liquid-eFsVK0V-.js} +1 -1
- package/client/dist/assets/loops-BvEenWBy.js +1 -0
- package/client/dist/assets/loops-CBiWd9Hf.js +1 -0
- package/client/dist/assets/loops-DNGiYKll2.js +1 -0
- package/client/dist/assets/{loops-Y3FQsUCh.js → loops-DjOtVXRo.js} +1 -1
- package/client/dist/assets/loops-HTHf-xu32.js +1 -0
- package/client/dist/assets/loops-YYV2bwjd.js +1 -0
- package/client/dist/assets/loops-hXgncEpF2.js +1 -0
- package/client/dist/assets/loops-kYbydDyN.js +1 -0
- package/client/dist/assets/{lspLanguageFeatures-Cl3gvD_W.js → lspLanguageFeatures-DT3-bbhn.js} +1 -1
- package/client/dist/assets/{mdx-B_nJldHz.js → mdx-Fuwnh1cX.js} +1 -1
- package/client/dist/assets/{monaco.contribution-PUeaZk8T.js → monaco.contribution-Desq7oq4.js} +2 -2
- package/client/dist/assets/{python-DS1Ce-A6.js → python-BgoEs6Cj.js} +1 -1
- package/client/dist/assets/{razor-L41Qg9OK.js → razor-CM1sPMMq.js} +1 -1
- package/client/dist/assets/{settings-BPq9nCJm.js → settings-BOHOmHkb.js} +1 -1
- package/client/dist/assets/{settings-r8Qq2Gzp2.js → settings-BlEA_7h02.js} +1 -1
- package/client/dist/assets/{settings-C-m3yEZ2.js → settings-BsJMsWGc.js} +1 -1
- package/client/dist/assets/{settings-zZr7NzuB.js → settings-D6qY9_UI.js} +1 -1
- package/client/dist/assets/{settings-VgCsjaYf.js → settings-DZJeXoRV.js} +1 -1
- package/client/dist/assets/settings-Mr7MnJbf.js +1 -0
- package/client/dist/assets/{settings-BWHGtmU12.js → settings-TNga5gIF2.js} +1 -1
- package/client/dist/assets/{settings-DZj7Uqy32.js → settings-lFoaYT-s2.js} +1 -1
- package/client/dist/assets/setup-B590KsTX.js +1 -0
- package/client/dist/assets/setup-BkyGoby6.js +1 -0
- package/client/dist/assets/setup-CEj6uY3-2.js +1 -0
- package/client/dist/assets/setup-CbIerFGf2.js +1 -0
- package/client/dist/assets/setup-CmU6bTCV2.js +1 -0
- package/client/dist/assets/setup-D674kWQH.js +1 -0
- package/client/dist/assets/setup-VNqXyB6Y.js +1 -0
- package/client/dist/assets/setup-iY8vH8pB.js +1 -0
- package/client/dist/assets/specs-C9Sd7BhH2.js +1 -0
- package/client/dist/assets/specs-CBDvEYKv.js +1 -0
- package/client/dist/assets/specs-CIPr9reA2.js +1 -0
- package/client/dist/assets/specs-CWtKcVDC.js +1 -0
- package/client/dist/assets/specs-CmEZY57v.js +1 -0
- package/client/dist/assets/specs-D2clrt2c2.js +1 -0
- package/client/dist/assets/specs-DTplt2XM.js +1 -0
- package/client/dist/assets/specs-PozUNhqb.js +1 -0
- package/client/dist/assets/{tsMode-BC1g186U.js → tsMode-BmT8WogI.js} +1 -1
- package/client/dist/assets/{typescript-BGlRGvJW.js → typescript-CQrQPsoW.js} +1 -1
- package/client/dist/assets/upload-CLAzW1mS.js +1 -0
- package/client/dist/assets/{value-D9aLbxw-.js → value-DSwzyyWR.js} +1 -1
- package/client/dist/assets/{workers-CXcXtO3b.js → workers-U0UXyLUf.js} +1 -1
- package/client/dist/assets/{xml-JdZZaIhJ.js → xml-WRxJs8_I.js} +1 -1
- package/client/dist/assets/{yaml-Cm82BVBt.js → yaml-CjpSTjJU.js} +1 -1
- package/client/dist/index.html +14 -14
- package/docs/customizing.md +2 -2
- package/docs/gemini.md +15 -4
- package/docs/guide/de/insights/3-code-explorer.md +6 -0
- package/docs/guide/de/integrations/3-jira-integration.md +1 -1
- package/docs/guide/de/integrations/6-agent-chat.md +5 -0
- package/docs/guide/de/pipeline/1-rails-and-jobs.md +6 -6
- package/docs/guide/de/pipeline/2-the-job-detail-view.md +27 -2
- package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +9 -5
- package/docs/guide/de/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/de/specs/1-specs-and-the-backlog.md +3 -2
- package/docs/guide/en/insights/3-code-explorer.md +6 -0
- package/docs/guide/en/integrations/3-jira-integration.md +1 -1
- package/docs/guide/en/integrations/6-agent-chat.md +5 -0
- package/docs/guide/en/pipeline/1-rails-and-jobs.md +6 -6
- package/docs/guide/en/pipeline/2-the-job-detail-view.md +27 -2
- package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +10 -4
- package/docs/guide/en/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/en/specs/1-specs-and-the-backlog.md +3 -2
- package/docs/guide/es/insights/3-code-explorer.md +6 -0
- package/docs/guide/es/integrations/3-jira-integration.md +1 -1
- package/docs/guide/es/integrations/6-agent-chat.md +5 -0
- package/docs/guide/es/pipeline/1-rails-and-jobs.md +6 -6
- package/docs/guide/es/pipeline/2-the-job-detail-view.md +27 -2
- package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +9 -5
- package/docs/guide/es/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/es/specs/1-specs-and-the-backlog.md +3 -2
- package/docs/guide/fr/insights/3-code-explorer.md +6 -0
- package/docs/guide/fr/integrations/3-jira-integration.md +1 -1
- package/docs/guide/fr/integrations/6-agent-chat.md +5 -0
- package/docs/guide/fr/pipeline/1-rails-and-jobs.md +6 -6
- package/docs/guide/fr/pipeline/2-the-job-detail-view.md +27 -2
- package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +9 -5
- package/docs/guide/fr/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/fr/specs/1-specs-and-the-backlog.md +3 -2
- package/docs/guide/it/insights/3-code-explorer.md +6 -0
- package/docs/guide/it/integrations/3-jira-integration.md +1 -1
- package/docs/guide/it/integrations/6-agent-chat.md +5 -0
- package/docs/guide/it/pipeline/1-rails-and-jobs.md +6 -6
- package/docs/guide/it/pipeline/2-the-job-detail-view.md +27 -2
- package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +10 -6
- package/docs/guide/it/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/it/specs/1-specs-and-the-backlog.md +3 -2
- package/docs/guide/ja/insights/3-code-explorer.md +6 -0
- package/docs/guide/ja/integrations/3-jira-integration.md +1 -1
- package/docs/guide/ja/integrations/6-agent-chat.md +5 -0
- package/docs/guide/ja/pipeline/1-rails-and-jobs.md +6 -6
- package/docs/guide/ja/pipeline/2-the-job-detail-view.md +27 -2
- package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +9 -5
- package/docs/guide/ja/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/ja/specs/1-specs-and-the-backlog.md +3 -2
- package/docs/guide/pt/insights/3-code-explorer.md +6 -0
- package/docs/guide/pt/integrations/3-jira-integration.md +1 -1
- package/docs/guide/pt/integrations/6-agent-chat.md +5 -0
- package/docs/guide/pt/pipeline/1-rails-and-jobs.md +6 -6
- package/docs/guide/pt/pipeline/2-the-job-detail-view.md +27 -2
- package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +9 -5
- package/docs/guide/pt/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/pt/specs/1-specs-and-the-backlog.md +3 -2
- package/docs/guide/zh/insights/3-code-explorer.md +6 -0
- package/docs/guide/zh/integrations/3-jira-integration.md +1 -1
- package/docs/guide/zh/integrations/6-agent-chat.md +5 -0
- package/docs/guide/zh/pipeline/1-rails-and-jobs.md +6 -6
- package/docs/guide/zh/pipeline/2-the-job-detail-view.md +27 -2
- package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +10 -6
- package/docs/guide/zh/pipeline/5-the-loop-builder.md +1 -1
- package/docs/guide/zh/specs/1-specs-and-the-backlog.md +3 -2
- package/docs/internals/README.md +5 -0
- package/docs/internals/adding-a-provider.md +15 -3
- package/docs/internals/api-reference.md +6 -5
- package/docs/internals/browser-capture-performance.md +93 -0
- package/docs/internals/code-explorer-story.md +135 -0
- package/docs/internals/gemini-mcp-registration.md +53 -0
- package/docs/internals/interactive-jobs.md +212 -0
- package/docs/internals/loop-step-log-explorer.md +146 -0
- package/docs/internals/safe-pr-review-flow.md +367 -0
- package/docs/mcp.md +1 -1
- package/docs/running-pipelines.md +6 -2
- package/package.json +1 -1
- package/server/dist/agent-chat-manager.js +211 -0
- package/server/dist/agent-chat-registry.js +20 -0
- package/server/dist/agent-chat-router.js +22 -0
- package/server/dist/agent-mcp-config.js +45 -4
- package/server/dist/agent-operator-prompt.js +149 -56
- package/server/dist/agent-store.js +25 -0
- package/server/dist/agent-tier.js +6 -1
- package/server/dist/browser-capture-manager.js +184 -34
- package/server/dist/browser-playwright.js +98 -13
- package/server/dist/code-explorer-router.js +92 -0
- package/server/dist/db.js +102 -0
- package/server/dist/file-provenance.js +54 -1
- package/server/dist/file-story-manager.js +170 -0
- package/server/dist/file-story.js +148 -0
- package/server/dist/file-summary-generator.js +5 -4
- package/server/dist/git-guardrails.js +62 -0
- package/server/dist/index.js +5 -0
- package/server/dist/integration-branch.js +63 -0
- package/server/dist/interactive-job-session.js +226 -18
- package/server/dist/jira/jira-adf.js +9 -0
- package/server/dist/jira/jira-materializer.js +27 -4
- package/server/dist/jira/jira-status-resolver.js +12 -4
- package/server/dist/jira/jira-sync-manager.js +130 -2
- package/server/dist/jira-router.js +1 -1
- package/server/dist/loop-effect.js +12 -0
- package/server/dist/loop-executors.js +92 -22
- package/server/dist/loop-run-manager.js +354 -28
- package/server/dist/mcp/guide.js +18 -7
- package/server/dist/mcp/tools/jira.js +1 -1
- package/server/dist/mcp/tools/jobs.js +14 -5
- package/server/dist/mcp/tools/rails.js +137 -12
- package/server/dist/mcp/tools/specs.js +35 -9
- package/server/dist/mcp/tools/types.js +49 -0
- package/server/dist/mobile/mobile-ws.js +4 -0
- package/server/dist/path-resolver.js +46 -0
- package/server/dist/pr-body.js +240 -0
- package/server/dist/pr-naming.js +210 -0
- package/server/dist/pr-publisher.js +68 -0
- package/server/dist/project-registry.js +77 -17
- package/server/dist/project-router-jobs.js +53 -13
- package/server/dist/project-router-settings.js +33 -0
- package/server/dist/project-router-terminals.js +16 -0
- package/server/dist/project-router-tickets.js +57 -3
- package/server/dist/project-router.js +52 -13
- package/server/dist/queue-manager.js +268 -83
- package/server/dist/rail-isolated-launch.js +324 -34
- package/server/dist/rail-isolation.js +32 -5
- package/server/dist/rail-pr-decision.js +519 -0
- package/server/dist/rail-pr-delivery.js +75 -0
- package/server/dist/rail-pr-store.js +175 -0
- package/server/dist/rail-worktrees-store.js +18 -0
- package/server/dist/rails-router.js +241 -17
- package/server/dist/rails-store.js +78 -1
- package/server/dist/setup-prerequisites.js +105 -0
- package/server/dist/smash-runner.js +3 -1
- package/server/dist/ticket-store.js +7 -3
- package/server/dist/workspace-resolution.js +27 -0
- package/server/dist/worktree-manager.js +42 -7
- package/server/dist/worktree-overlay.js +261 -0
- package/client/dist/assets/AgentBrowserCapture-BlGDZahz.js +0 -1
- package/client/dist/assets/AgentModeJobsPane-CyNR-9BO.js +0 -1
- package/client/dist/assets/AgentsPage-dNsEsY_x.js +0 -86
- package/client/dist/assets/AnalyticsPage-BAxmR0HQ.js +0 -1
- package/client/dist/assets/CodePage-Crc4BBQN.js +0 -2
- package/client/dist/assets/DesktopAnalyticsPage-IXSnbCce.js +0 -1
- package/client/dist/assets/DocsDialog-Bc4hx7oW.js +0 -11
- package/client/dist/assets/DocsPage-bEU4t9c6.js +0 -11
- package/client/dist/assets/IntegrationsPage-wq2CezEL.js +0 -3
- package/client/dist/assets/JobDetailPage-BBcPk3j8.js +0 -1
- package/client/dist/assets/JobsPage-DXrSPlwa.js +0 -1
- package/client/dist/assets/LogViewer-BoYbwvbU.js +0 -16
- package/client/dist/assets/LoopBuilderPage-CiUMAuWz.js +0 -7
- package/client/dist/assets/LoopsPage-Xrp6W5XW.js +0 -1
- package/client/dist/assets/ProjectSettingsDialog-BU98L5JD.js +0 -1
- package/client/dist/assets/agent-B7GdHP3Z.js +0 -1
- package/client/dist/assets/agent-BHmcgoJf.js +0 -1
- package/client/dist/assets/agent-BdY_fii4.js +0 -1
- package/client/dist/assets/agent-C32FOi9v.js +0 -1
- package/client/dist/assets/agent-CiFQxoaZ2.js +0 -1
- package/client/dist/assets/agent-CtAag7V6.js +0 -1
- package/client/dist/assets/agent-DE4Mp1fY2.js +0 -1
- package/client/dist/assets/agent-DK8qovyG2.js +0 -1
- package/client/dist/assets/browser-ZB1afzjZ.js +0 -1
- package/client/dist/assets/code-BFxE1Yt62.js +0 -1
- package/client/dist/assets/code-BefYOm5Q.js +0 -1
- package/client/dist/assets/code-BkXpJt99.js +0 -1
- package/client/dist/assets/code-C6Sq7_t8.js +0 -1
- package/client/dist/assets/code-CGj3w-2N.js +0 -1
- package/client/dist/assets/code-Dfsxc9o82.js +0 -1
- package/client/dist/assets/code-Y5urks5s2.js +0 -1
- package/client/dist/assets/code-wtcs0ivb.js +0 -1
- package/client/dist/assets/dashboard-B8032psZ.js +0 -1
- package/client/dist/assets/dashboard-BHGKtxty2.js +0 -1
- package/client/dist/assets/dashboard-CXnoUgN22.js +0 -1
- package/client/dist/assets/dashboard-Ccyxqy7d.js +0 -1
- package/client/dist/assets/dashboard-CoED_41r.js +0 -1
- package/client/dist/assets/dashboard-Dc5ZAgMN.js +0 -1
- package/client/dist/assets/dashboard-JMY8ueD3.js +0 -1
- package/client/dist/assets/dashboard-tkWr1aHD2.js +0 -1
- package/client/dist/assets/index-BHPbzyg6.css +0 -2
- package/client/dist/assets/index-n2PmJGF6.js +0 -152
- package/client/dist/assets/jira-BcZzX9122.js +0 -1
- package/client/dist/assets/jira-CTYs7LA12.js +0 -1
- package/client/dist/assets/jira-D2nN39e92.js +0 -1
- package/client/dist/assets/jira-DJxmIkyr.js +0 -1
- package/client/dist/assets/jira-DXMoAKWD.js +0 -1
- package/client/dist/assets/jira-IhC1ROIc.js +0 -1
- package/client/dist/assets/jira-Iw575fN8.js +0 -1
- package/client/dist/assets/jira-kbWZY7jH.js +0 -1
- package/client/dist/assets/jobs-BqF79kHz2.js +0 -1
- package/client/dist/assets/jobs-C1XM5urS.js +0 -1
- package/client/dist/assets/jobs-C5UjG0262.js +0 -1
- package/client/dist/assets/jobs-DBfaHTxC.js +0 -1
- package/client/dist/assets/jobs-DM4BDPdg.js +0 -1
- package/client/dist/assets/jobs-Da5OkZmf2.js +0 -1
- package/client/dist/assets/jobs-JJdnuQ03.js +0 -1
- package/client/dist/assets/jobs-SI34ML8I.js +0 -1
- package/client/dist/assets/loops-BR4FmOv12.js +0 -1
- package/client/dist/assets/loops-BgX_uudn.js +0 -1
- package/client/dist/assets/loops-Bpl2j2LP.js +0 -1
- package/client/dist/assets/loops-CQuuMlyZ.js +0 -1
- package/client/dist/assets/loops-DW8hSMdS2.js +0 -1
- package/client/dist/assets/loops-Q2muu8hW2.js +0 -1
- package/client/dist/assets/loops-q7CNDvfK.js +0 -1
- package/client/dist/assets/settings-CY8udi0e.js +0 -1
- package/client/dist/assets/setup-CNMdCHHt2.js +0 -1
- package/client/dist/assets/setup-Cag4XrbL2.js +0 -1
- package/client/dist/assets/setup-D9IHGoWU.js +0 -1
- package/client/dist/assets/setup-Dg6Ba3JT.js +0 -1
- package/client/dist/assets/setup-DyK36RIW.js +0 -1
- package/client/dist/assets/setup-G4ZvDKxX.js +0 -1
- package/client/dist/assets/setup-aTlGxuwi2.js +0 -1
- package/client/dist/assets/setup-kWsoAeHQ.js +0 -1
- package/client/dist/assets/specs-BFSUPa122.js +0 -1
- package/client/dist/assets/specs-BMzip1WY2.js +0 -1
- package/client/dist/assets/specs-BYeAbIEy.js +0 -1
- package/client/dist/assets/specs-C-mtLcXw.js +0 -1
- package/client/dist/assets/specs-CAzpvADd2.js +0 -1
- package/client/dist/assets/specs-CyRIw_IR.js +0 -1
- package/client/dist/assets/specs-DMm7gB_l.js +0 -1
- package/client/dist/assets/specs-DuottM0Z.js +0 -1
- /package/client/dist/assets/{abap-CpHUwCVK.js → abap-D0E4FfVW.js} +0 -0
- /package/client/dist/assets/{activity-DemHQS7l.js → activity--iN4Ad2R2.js} +0 -0
- /package/client/dist/assets/{activity-B_71BWg3.js → activity-6hM_ZSg9.js} +0 -0
- /package/client/dist/assets/{activity-DHv2V5Oi.js → activity-BZNfOdiS.js} +0 -0
- /package/client/dist/assets/{activity-D0rfjQzT2.js → activity-BuVo5sPB.js} +0 -0
- /package/client/dist/assets/{activity-BpTTj_PH.js → activity-CIOLxGvh.js} +0 -0
- /package/client/dist/assets/{activity-D2e62vbV2.js → activity-D2r2h3SE2.js} +0 -0
- /package/client/dist/assets/{activity-Ch-wbr0C2.js → activity-DtxrAUMo2.js} +0 -0
- /package/client/dist/assets/{addon-image-Ba-TY3wr.js → addon-image-CwoZj17F.js} +0 -0
- /package/client/dist/assets/{addon-ligatures-T4ARLiuu.js → addon-ligatures-CWDrED80.js} +0 -0
- /package/client/dist/assets/{addon-webgl-Cd73n8eh.js → addon-webgl-DMbGeI_u.js} +0 -0
- /package/client/dist/assets/{addspec-xwRX_Pnf.js → addspec-BMtLZLW62.js} +0 -0
- /package/client/dist/assets/{addspec-l_zU5gla.js → addspec-CP0HRuxY.js} +0 -0
- /package/client/dist/assets/{addspec-Dio-H5z0.js → addspec-CRuvWn8d.js} +0 -0
- /package/client/dist/assets/{addspec-D6L4ZteP.js → addspec-D-JLDsUV.js} +0 -0
- /package/client/dist/assets/{addspec-CrEm6Fzr2.js → addspec-DfhDbg5c.js} +0 -0
- /package/client/dist/assets/{addspec-B6Ns8KU02.js → addspec-bsNDdqRm2.js} +0 -0
- /package/client/dist/assets/{addspec-qGyH7MHy2.js → addspec-mgPOt5q02.js} +0 -0
- /package/client/dist/assets/{agents-OzxCLVW1.js → agents-78bTZGZh.js} +0 -0
- /package/client/dist/assets/{agents-hv3sqmPm2.js → agents-BLhWCmDS2.js} +0 -0
- /package/client/dist/assets/{agents-CHgCudUV.js → agents-BUdEi3-N.js} +0 -0
- /package/client/dist/assets/{agents-Dumx4JiM2.js → agents-BpoUaoW92.js} +0 -0
- /package/client/dist/assets/{agents-CnaPeSyw.js → agents-CWo-KyAB.js} +0 -0
- /package/client/dist/assets/{agents-Xh-zYHUx2.js → agents-DDtCJ5M02.js} +0 -0
- /package/client/dist/assets/{agents-DuhLEaQ_.js → agents-bvyRLczL.js} +0 -0
- /package/client/dist/assets/{agentstudio-CCthUdzR.js → agentstudio-BMQxc_bz.js} +0 -0
- /package/client/dist/assets/{agentstudio-CcH8Ckql2.js → agentstudio-COZriimI2.js} +0 -0
- /package/client/dist/assets/{agentstudio-Bo91kfUd2.js → agentstudio-CWgXG5W52.js} +0 -0
- /package/client/dist/assets/{agentstudio-VJOa_NVO.js → agentstudio-C_Jq8Tl4.js} +0 -0
- /package/client/dist/assets/{agentstudio-BIxikDf_.js → agentstudio-Dtq3dGYk.js} +0 -0
- /package/client/dist/assets/{agentstudio-Bz8cP8_c.js → agentstudio-jKMTdT70.js} +0 -0
- /package/client/dist/assets/{agentstudio-DARgYg5Z2.js → agentstudio-sI27TpBu2.js} +0 -0
- /package/client/dist/assets/{aiedit-5ZXN4cep2.js → aiedit-6CHdb_iv2.js} +0 -0
- /package/client/dist/assets/{aiedit-B7gAJZVC.js → aiedit-B03pD_Na.js} +0 -0
- /package/client/dist/assets/{aiedit-D92V-kUW.js → aiedit-BtRqRxML.js} +0 -0
- /package/client/dist/assets/{aiedit-D9ualLVJ.js → aiedit-eMN4eQPF.js} +0 -0
- /package/client/dist/assets/{aiedit-h48tJU0V2.js → aiedit-hknZlly82.js} +0 -0
- /package/client/dist/assets/{aiedit-xkA_mR2a2.js → aiedit-igmw-ZoZ2.js} +0 -0
- /package/client/dist/assets/{aiedit-7B2dvCv-.js → aiedit-pc5JDUq1.js} +0 -0
- /package/client/dist/assets/{analytics-slx4X1mu2.js → analytics-BWMUZ2Pq2.js} +0 -0
- /package/client/dist/assets/{analytics-uRNP6yAJ.js → analytics-Bj-SmKHa.js} +0 -0
- /package/client/dist/assets/{analytics-WF1I49ln.js → analytics-C5dpiS0o.js} +0 -0
- /package/client/dist/assets/{analytics-CBvaxOId.js → analytics-CCprAqk3.js} +0 -0
- /package/client/dist/assets/{analytics-BakymH7Z2.js → analytics-CR1TJqUi2.js} +0 -0
- /package/client/dist/assets/{analytics-B7bPj6u_2.js → analytics-DfNdXR0y2.js} +0 -0
- /package/client/dist/assets/{analytics-DZ74aQ54.js → analytics-rmHuJv0V.js} +0 -0
- /package/client/dist/assets/{apex-DlD7oJX6.js → apex-D_X_8J4d.js} +0 -0
- /package/client/dist/assets/{atom-one-dark-BrRN8wBy.js → atom-one-dark-BMDPFwRZ.js} +0 -0
- /package/client/dist/assets/{attachments-C11tOKZ_.js → attachments-BgBNSqQd.js} +0 -0
- /package/client/dist/assets/{attachments-Bnbyj2PN.js → attachments-BjyMmrwE.js} +0 -0
- /package/client/dist/assets/{attachments-CIeLa8l12.js → attachments-C9GTTJsx2.js} +0 -0
- /package/client/dist/assets/{attachments-DslHfa-L.js → attachments-DCZOL1RU.js} +0 -0
- /package/client/dist/assets/{attachments-C-gyrCOb.js → attachments-DL-bPy9E.js} +0 -0
- /package/client/dist/assets/{attachments-Cxrs0pyL2.js → attachments-DPCmkFZu2.js} +0 -0
- /package/client/dist/assets/{attachments-TTPsc0a52.js → attachments-rNn1ekRy2.js} +0 -0
- /package/client/dist/assets/{azcli-CmXFAbc-.js → azcli-PZLnZ3jH.js} +0 -0
- /package/client/dist/assets/{bat-DdNJq4hH.js → bat-KlBOxpO4.js} +0 -0
- /package/client/dist/assets/{bicep-Bppz7WOA.js → bicep-CgG9oF3V.js} +0 -0
- /package/client/dist/assets/{cameligo-0MRMdSmg.js → cameligo-6R45j6Ph.js} +0 -0
- /package/client/dist/assets/{chat-BvHrebKC2.js → chat-BgL3zv6x2.js} +0 -0
- /package/client/dist/assets/{chat-CZyiLJvQ.js → chat-Bh3NdgJs.js} +0 -0
- /package/client/dist/assets/{chat-DKYP7NnC.js → chat-Bom6bqK3.js} +0 -0
- /package/client/dist/assets/{chat-5mdg_YIc2.js → chat-DdwZjT8K2.js} +0 -0
- /package/client/dist/assets/{chat-wkTIy9rX.js → chat-Dnwg-NpQ.js} +0 -0
- /package/client/dist/assets/{chat-BpYxnkr4.js → chat-DsbwJhus.js} +0 -0
- /package/client/dist/assets/{chat-BGax2nV62.js → chat-vylxqR0P2.js} +0 -0
- /package/client/dist/assets/{clojure-B5dKj863.js → clojure-CLAAMO7J.js} +0 -0
- /package/client/dist/assets/{clsx-1dnHRn8W.js → clsx-CNmW0Nip.js} +0 -0
- /package/client/dist/assets/{coffee-DSbWjzk7.js → coffee-AruSygo-.js} +0 -0
- /package/client/dist/assets/{commands-uz_uKT242.js → commands-C4Y3C-PF2.js} +0 -0
- /package/client/dist/assets/{commands-Bb7MnPqn2.js → commands-CSDs9q_2.js} +0 -0
- /package/client/dist/assets/{commands-C_7zZwJf.js → commands-DkU0qliq.js} +0 -0
- /package/client/dist/assets/{commands-D_6B8lfU.js → commands-JWMfGDmr.js} +0 -0
- /package/client/dist/assets/{commands-DBc5llLi2.js → commands-RHOchN4n2.js} +0 -0
- /package/client/dist/assets/{commands-CQkdthjF.js → commands-u-4eEHCN.js} +0 -0
- /package/client/dist/assets/{commands-DhZNhSbl.js → commands-xHDDGfcP2.js} +0 -0
- /package/client/dist/assets/{cpp-SBF8SAh9.js → cpp-DEE5r4Pw.js} +0 -0
- /package/client/dist/assets/{csharp-Lzuq_1t-.js → csharp-BVXJUvbK.js} +0 -0
- /package/client/dist/assets/{csp-BEzxZqi1.js → csp-cXOF0JoV.js} +0 -0
- /package/client/dist/assets/{css-C3D3PKln.js → css-C_zQuAoy.js} +0 -0
- /package/client/dist/assets/{cypher-CQ3dEPmv.js → cypher-t95m_Q-O.js} +0 -0
- /package/client/dist/assets/{dart-DCPmxolI.js → dart-B4r1Tg-e.js} +0 -0
- /package/client/dist/assets/{dockerfile-B_2_aaTO.js → dockerfile-6mt7zHQw.js} +0 -0
- /package/client/dist/assets/{ecl-rADUeXsV.js → ecl-DEY_Fz_Q.js} +0 -0
- /package/client/dist/assets/{editor.api2-T7u8kQWG.js → editor.api2-C3B0tp2x.js} +0 -0
- /package/client/dist/assets/{elixir-DOd-TuJO.js → elixir-R6-q1c5t.js} +0 -0
- /package/client/dist/assets/{explore-BHEhNekP2.js → explore-B7fblXBb2.js} +0 -0
- /package/client/dist/assets/{explore-DAsroA482.js → explore-BHtEpoNN2.js} +0 -0
- /package/client/dist/assets/{explore-UwHHj2ux.js → explore-C0k8HrkN.js} +0 -0
- /package/client/dist/assets/{explore-DaXiW9-6.js → explore-CNBzrEPS.js} +0 -0
- /package/client/dist/assets/{explore-CWlAXx0f2.js → explore-D_mWBYCS2.js} +0 -0
- /package/client/dist/assets/{explore-DG1CtYqT.js → explore-Dahc1lOx.js} +0 -0
- /package/client/dist/assets/{explore-DMSGAnhK.js → explore-UvW1jEMa.js} +0 -0
- /package/client/dist/assets/{flow9-Bf7zg_j0.js → flow9-CNQvHBOt.js} +0 -0
- /package/client/dist/assets/{format-command-BHymDa4r.js → format-command-CuWuRvka.js} +0 -0
- /package/client/dist/assets/{fsharp-BqROZjbA.js → fsharp-vPZkFXwv.js} +0 -0
- /package/client/dist/assets/{go-oQTP5uLe.js → go-KUzBMYJ_.js} +0 -0
- /package/client/dist/assets/{graphql-CSHfTU3q.js → graphql-C3W0rCsD.js} +0 -0
- /package/client/dist/assets/{hcl-CeG-RoFJ.js → hcl-BOOMFSNX.js} +0 -0
- /package/client/dist/assets/{ini-B2Dv4ohc.js → ini-CFat1WJr.js} +0 -0
- /package/client/dist/assets/{integrations-CAF21FbQ.js → integrations-4KZnYECp.js} +0 -0
- /package/client/dist/assets/{integrations-CHCgning2.js → integrations-7W266oqF2.js} +0 -0
- /package/client/dist/assets/{integrations-B-JVE1_D.js → integrations-BNuauK3o.js} +0 -0
- /package/client/dist/assets/{integrations-BAujIDoE.js → integrations-CHy8tnpV.js} +0 -0
- /package/client/dist/assets/{integrations-DS5FFMes.js → integrations-Cl_wD5AI.js} +0 -0
- /package/client/dist/assets/{integrations-axZN4--n2.js → integrations-Cy8nZ_dv2.js} +0 -0
- /package/client/dist/assets/{integrations-CtsOpq2D2.js → integrations-zMqY4VU12.js} +0 -0
- /package/client/dist/assets/{java-aUDDeufb.js → java-Dee-CNAM.js} +0 -0
- /package/client/dist/assets/{julia-C5LbruO5.js → julia-CGNlLYuU.js} +0 -0
- /package/client/dist/assets/{kotlin-C6mOuSKk.js → kotlin-CY7lhknJ.js} +0 -0
- /package/client/dist/assets/{less-D5qC3caW.js → less-D0KN7hfJ.js} +0 -0
- /package/client/dist/assets/{lexon-Dr2La-fj.js → lexon-CuRJufPs.js} +0 -0
- /package/client/dist/assets/{lua-Zy6u5z6Z.js → lua-DHvH62Zf.js} +0 -0
- /package/client/dist/assets/{m3-C7XHeDz_.js → m3-tlthQ8Fo.js} +0 -0
- /package/client/dist/assets/{markdown-PiF7r-2h.js → markdown-Dbx1LgUZ.js} +0 -0
- /package/client/dist/assets/{mcp-B_nWlxZa2.js → mcp-CjVKXAhD2.js} +0 -0
- /package/client/dist/assets/{mcp-B8omp_Cd.js → mcp-Dcl-XxkR.js} +0 -0
- /package/client/dist/assets/{mcp-DTCCrYHz2.js → mcp-DtbxuH3V2.js} +0 -0
- /package/client/dist/assets/{mcp-DytBbASZ.js → mcp-H-gnQUdN.js} +0 -0
- /package/client/dist/assets/{mcp-D_oPS6Zc.js → mcp-N1nzp8oL.js} +0 -0
- /package/client/dist/assets/{mcp-Cb2jtHP72.js → mcp-XJNRfxVp2.js} +0 -0
- /package/client/dist/assets/{mcp-DPqm2C8-.js → mcp-sRmWE8WJ.js} +0 -0
- /package/client/dist/assets/{mips-nn07GiyE.js → mips-D_O3IUz_.js} +0 -0
- /package/client/dist/assets/{msdax-DaKFVMST.js → msdax-C_ZmCnRt.js} +0 -0
- /package/client/dist/assets/{mysql-C6d6xrbU.js → mysql-C-dCEYSX.js} +0 -0
- /package/client/dist/assets/{nav-Cibp2KWF.js → nav-40HzpIFb.js} +0 -0
- /package/client/dist/assets/{nav-DtTnF9xd.js → nav-8yPhBn00.js} +0 -0
- /package/client/dist/assets/{nav-Danf5sRf2.js → nav-B6PkGfTk2.js} +0 -0
- /package/client/dist/assets/{nav-Bqhyfbcj2.js → nav-BHqMLrS72.js} +0 -0
- /package/client/dist/assets/{nav-CQb9y1km.js → nav-CGy4yx3C.js} +0 -0
- /package/client/dist/assets/{nav-BAsYcqdw2.js → nav-CXEDcRdv2.js} +0 -0
- /package/client/dist/assets/{nav-BRrNlZkr.js → nav-EI_OhEAo.js} +0 -0
- /package/client/dist/assets/{objective-c-B6KMtI-k.js → objective-c-DZY9Aqxd.js} +0 -0
- /package/client/dist/assets/{pascal-DYr8MPE7.js → pascal-BVHLXoor.js} +0 -0
- /package/client/dist/assets/{pascaligo-B3pd-jJ_.js → pascaligo-XdG_6u3k.js} +0 -0
- /package/client/dist/assets/{perl-z2xUzoaL.js → perl-b9QV0BcD.js} +0 -0
- /package/client/dist/assets/{pgsql-DUvT-09-.js → pgsql-Du5FDOgT.js} +0 -0
- /package/client/dist/assets/{php-CGyOmJfy.js → php-WJD0z2Z_.js} +0 -0
- /package/client/dist/assets/{pla-CMqgvyD0.js → pla-CbciTf2w.js} +0 -0
- /package/client/dist/assets/{postiats-Dx5LUn4Z.js → postiats-C1QxmvVq.js} +0 -0
- /package/client/dist/assets/{powerquery-DazYxvJ6.js → powerquery-BEYDhPLZ.js} +0 -0
- /package/client/dist/assets/{powershell-B3nwlDka.js → powershell-CfaYw4XL.js} +0 -0
- /package/client/dist/assets/{protobuf-BGuu2u2s.js → protobuf-pwZEDOYa.js} +0 -0
- /package/client/dist/assets/{pug-Dbte1MXA.js → pug-5ftqSPVe.js} +0 -0
- /package/client/dist/assets/{qsharp-DJLwBOvG.js → qsharp-uI6qZMq4.js} +0 -0
- /package/client/dist/assets/{r-DmGBRSHj.js → r-BK54P1EG.js} +0 -0
- /package/client/dist/assets/{redis-VvUYn0a4.js → redis-DI0yd7kN.js} +0 -0
- /package/client/dist/assets/{redshift-6GdDrxg3.js → redshift-Dov26eyI.js} +0 -0
- /package/client/dist/assets/{restructuredtext-CfAB8aRU.js → restructuredtext-QqJ_1dC-.js} +0 -0
- /package/client/dist/assets/{ruby-CIYK6MXY.js → ruby-5WjveeVb.js} +0 -0
- /package/client/dist/assets/{rust-CTHZfjj9.js → rust-BzVSfqFH.js} +0 -0
- /package/client/dist/assets/{sb-CkKTdkz_.js → sb-DMIUfT-3.js} +0 -0
- /package/client/dist/assets/{scala-Bx-Wr9TM.js → scala-CSKA7lqt.js} +0 -0
- /package/client/dist/assets/{scheme-Dcfi6f83.js → scheme-CojOP2Qc.js} +0 -0
- /package/client/dist/assets/{scss-ByL-7PFQ.js → scss-DoBZGJG6.js} +0 -0
- /package/client/dist/assets/{shell-Csnb9Yqd.js → shell-YOaE4udl.js} +0 -0
- /package/client/dist/assets/{solidity-Dbw5-0QP.js → solidity-l3jSyVLu.js} +0 -0
- /package/client/dist/assets/{sophia-ZQ3saZQx.js → sophia-BhSGTaQJ.js} +0 -0
- /package/client/dist/assets/{sparql-BEtOel8u.js → sparql-qhk6QD9w.js} +0 -0
- /package/client/dist/assets/{sql-DGPDbzB7.js → sql-DoO3y21-.js} +0 -0
- /package/client/dist/assets/{st-GeW2MOgh.js → st-ChZAY8oG.js} +0 -0
- /package/client/dist/assets/{swift-BVYTN8jq.js → swift-D290Tr7_.js} +0 -0
- /package/client/dist/assets/{systemverilog-Deg2a8Lr.js → systemverilog-DsxzgJ-o.js} +0 -0
- /package/client/dist/assets/{tcl-6DnLmROF.js → tcl-BKDUHAAR.js} +0 -0
- /package/client/dist/assets/{terminal-CDiOAmBd2.js → terminal-BRm03iFA2.js} +0 -0
- /package/client/dist/assets/{terminal-CJN-mQMc.js → terminal-De2Brd23.js} +0 -0
- /package/client/dist/assets/{terminal-CYB4TiAd.js → terminal-DxQWCqSD2.js} +0 -0
- /package/client/dist/assets/{terminal-DsaDTq5N2.js → terminal-WSAvHXoU.js} +0 -0
- /package/client/dist/assets/{terminal-DTQ_dPqi2.js → terminal-Z7KsDM_n.js} +0 -0
- /package/client/dist/assets/{terminal-58ReNaya.js → terminal-cqfd3EDV.js} +0 -0
- /package/client/dist/assets/{terminal-DawP8xNL.js → terminal-xGbCZJHg.js} +0 -0
- /package/client/dist/assets/{tickets-DoRTUYRT.js → tickets-B7zT4IRf.js} +0 -0
- /package/client/dist/assets/{tickets-DBfFePwk2.js → tickets-BoXom7l8.js} +0 -0
- /package/client/dist/assets/{tickets-DvohTziT2.js → tickets-C3b8cHhd2.js} +0 -0
- /package/client/dist/assets/{tickets-Da15iaRw.js → tickets-CFXnJsYF.js} +0 -0
- /package/client/dist/assets/{tickets-CujsZvkf.js → tickets-CWYFvx1W2.js} +0 -0
- /package/client/dist/assets/{tickets-Df6pee-O2.js → tickets-DTHo9c3C.js} +0 -0
- /package/client/dist/assets/{tickets-CNvIilmP.js → tickets-SuX_HkK4.js} +0 -0
- /package/client/dist/assets/{twig-XbbXW9Yz.js → twig-UpZQaM8G.js} +0 -0
- /package/client/dist/assets/{typespec-CRlV8GhI.js → typespec-DzaKvN8i.js} +0 -0
- /package/client/dist/assets/{vb-BHE2izPH.js → vb-CZpbb7tk.js} +0 -0
- /package/client/dist/assets/{wgsl-Bf5vkfmY.js → wgsl-CNt3OIvl.js} +0 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OVERLAY_MANIFEST = void 0;
|
|
7
|
+
exports.applyWorktreeOverlay = applyWorktreeOverlay;
|
|
8
|
+
/**
|
|
9
|
+
* Per-run worktree overlay — materializes a project's framework surface INTO an
|
|
10
|
+
* isolated rail worktree.
|
|
11
|
+
*
|
|
12
|
+
* Why: `git worktree add` materializes only TRACKED files. A RELOCATED project's
|
|
13
|
+
* framework surface (`.claude/commands/specrails/*.md`, the `sr-*` agents,
|
|
14
|
+
* skills, rules, `.mcp.json`, the seeded instruction file) lives in
|
|
15
|
+
* `~/.specrails/projects/<slug>/workspace/`, NOT the repo — so a worktree spawn
|
|
16
|
+
* finds no `/specrails:*` commands and the claude CLI reports
|
|
17
|
+
* `Unknown command: /specrails:implement` while the loop "succeeds" through
|
|
18
|
+
* verify/fix without implementing (live evidence: run 01f41203). Legacy
|
|
19
|
+
* (in-repo) projects have the sibling problem for their UNTRACKED `.claude`
|
|
20
|
+
* entries: present on disk in the repo, absent from the checkout.
|
|
21
|
+
*
|
|
22
|
+
* Mechanics — a MERGE-overlay under `<worktree>/<providerDir>/`:
|
|
23
|
+
* - For each source entry missing in the worktree, SYMLINK it (dir symlink when
|
|
24
|
+
* the whole dir is absent, per-file/per-child when partially present). The
|
|
25
|
+
* checkout's own content is NEVER overwritten — tracked files always win.
|
|
26
|
+
* - `agent-memory` is linked like everything else: all runs SHARE agent memory,
|
|
27
|
+
* exactly matching the pre-isolation shared-cwd semantics (deliberate).
|
|
28
|
+
* - The providerDir ROOT itself is never linked (a real dir is created) so
|
|
29
|
+
* nested pipeline worktrees (`.claude/worktrees/**`) stay LOCAL to this
|
|
30
|
+
* worktree instead of colliding in the shared workspace. The source's
|
|
31
|
+
* `worktrees` entry is skipped for the same reason.
|
|
32
|
+
* - `.mcp.json` and the provider instruction file (CLAUDE.md / AGENTS.md /
|
|
33
|
+
* GEMINI.md) are COPIED (spawn-local), only when the checkout lacks them.
|
|
34
|
+
* - Windows: junction fallback for dirs, then a dereferencing copy (the
|
|
35
|
+
* explore-cwd precedent).
|
|
36
|
+
*
|
|
37
|
+
* Idempotent + resume-safe: every created entry is recorded in a manifest
|
|
38
|
+
* (`.sr-rail-overlay.json`, itself overlay-owned) whose UNION across passes is
|
|
39
|
+
* returned as `createdPaths` — the caller excludes those paths from
|
|
40
|
+
* `commitWorktree`'s `git add -A` so overlay scaffolding NEVER lands on the
|
|
41
|
+
* ticket branch / PR. Failures degrade per entry into `warnings` (the spawn
|
|
42
|
+
* proceeds — a partial surface beats an aborted rail); this function never
|
|
43
|
+
* throws.
|
|
44
|
+
*/
|
|
45
|
+
const fs_1 = __importDefault(require("fs"));
|
|
46
|
+
const path_1 = __importDefault(require("path"));
|
|
47
|
+
/** Overlay manifest filename (worktree root). Overlay-owned + git-excluded. */
|
|
48
|
+
exports.OVERLAY_MANIFEST = '.sr-rail-overlay.json';
|
|
49
|
+
/** providerDir children that must NEVER be linked into a worktree: nested
|
|
50
|
+
* pipeline worktrees must stay local to THIS worktree (linking would share
|
|
51
|
+
* them across concurrent rails — collisions). */
|
|
52
|
+
const SKIP_PROVIDER_ENTRIES = new Set(['worktrees']);
|
|
53
|
+
function errMsg(err) {
|
|
54
|
+
return err instanceof Error ? err.message : String(err);
|
|
55
|
+
}
|
|
56
|
+
/** True when `p` resolves (following symlinks) to a directory. */
|
|
57
|
+
function isDir(p) {
|
|
58
|
+
try {
|
|
59
|
+
return fs_1.default.statSync(p).isDirectory();
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** lstat that returns null instead of throwing. */
|
|
66
|
+
function lstatSafe(p) {
|
|
67
|
+
try {
|
|
68
|
+
return fs_1.default.lstatSync(p);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** Read a prior pass's manifest — tolerant of absence/corruption. */
|
|
75
|
+
function readManifest(manifestPath) {
|
|
76
|
+
try {
|
|
77
|
+
const raw = JSON.parse(fs_1.default.readFileSync(manifestPath, 'utf-8'));
|
|
78
|
+
const paths = Array.isArray(raw) ? raw : raw?.paths;
|
|
79
|
+
return Array.isArray(paths) ? paths.filter((p) => typeof p === 'string') : [];
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create `dest` as a link to `src` (symlink on POSIX; junction-then-symlink on
|
|
87
|
+
* Windows for dirs), degrading to a dereferencing COPY when links fail.
|
|
88
|
+
* Records `rel` on success; pushes a warning on total failure.
|
|
89
|
+
*/
|
|
90
|
+
function linkOrCopyEntry(src, dest, rel, created, warnings) {
|
|
91
|
+
const srcIsDir = isDir(src);
|
|
92
|
+
let linked = false;
|
|
93
|
+
if (process.platform === 'win32' && srcIsDir) {
|
|
94
|
+
try {
|
|
95
|
+
fs_1.default.symlinkSync(src, dest, 'junction');
|
|
96
|
+
linked = true;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
/* fall through */
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (!linked) {
|
|
103
|
+
try {
|
|
104
|
+
fs_1.default.symlinkSync(src, dest);
|
|
105
|
+
linked = true;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
/* fall through to copy */
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (!linked) {
|
|
112
|
+
// Copy fallback (Windows without symlink rights, exotic filesystems).
|
|
113
|
+
// Dereference so workspace-internal symlinks become real files.
|
|
114
|
+
try {
|
|
115
|
+
if (srcIsDir)
|
|
116
|
+
fs_1.default.cpSync(src, dest, { recursive: true, dereference: true });
|
|
117
|
+
else
|
|
118
|
+
fs_1.default.copyFileSync(src, dest);
|
|
119
|
+
linked = true;
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
warnings.push(`failed to link ${rel}: ${errMsg(err)}`);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
created.push(rel);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Merge `src` into `dest` non-destructively:
|
|
130
|
+
* - dest missing → link (whole entry).
|
|
131
|
+
* - dest is OUR prior link → re-claim (record) without touching it.
|
|
132
|
+
* - dest is a real dir AND src is a dir → recurse per child (per-file links
|
|
133
|
+
* where the checkout is partially present).
|
|
134
|
+
* - anything else → skip (the checkout's content always wins).
|
|
135
|
+
*/
|
|
136
|
+
function mergeLink(src, dest, rel, created, warnings) {
|
|
137
|
+
const destSt = lstatSafe(dest);
|
|
138
|
+
if (!destSt) {
|
|
139
|
+
linkOrCopyEntry(src, dest, rel, created, warnings);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (destSt.isSymbolicLink()) {
|
|
143
|
+
// Idempotent re-claim of a link a prior pass created; a foreign symlink
|
|
144
|
+
// (brought by the checkout) is left alone and NOT claimed.
|
|
145
|
+
try {
|
|
146
|
+
if (path_1.default.resolve(path_1.default.dirname(dest), fs_1.default.readlinkSync(dest)) === path_1.default.resolve(src))
|
|
147
|
+
created.push(rel);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
/* unreadable link — leave it */
|
|
151
|
+
}
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (destSt.isDirectory() && isDir(src)) {
|
|
155
|
+
let entries;
|
|
156
|
+
try {
|
|
157
|
+
entries = fs_1.default.readdirSync(src);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
warnings.push(`failed to read ${rel}: ${errMsg(err)}`);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
for (const name of entries) {
|
|
164
|
+
mergeLink(path_1.default.join(src, name), path_1.default.join(dest, name), `${rel}/${name}`, created, warnings);
|
|
165
|
+
}
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
// dest exists as a file (or src is a file while dest is a dir) — never overwrite.
|
|
169
|
+
}
|
|
170
|
+
/** Copy `src` → `dest` only when `dest` does not exist. Records `rel`. */
|
|
171
|
+
function copyIfAbsent(src, dest, rel, created, warnings) {
|
|
172
|
+
if (!fs_1.default.existsSync(src))
|
|
173
|
+
return;
|
|
174
|
+
if (lstatSafe(dest))
|
|
175
|
+
return; // checkout (or a prior pass, re-claimed via manifest) wins
|
|
176
|
+
try {
|
|
177
|
+
fs_1.default.copyFileSync(src, dest);
|
|
178
|
+
created.push(rel);
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
warnings.push(`failed to copy ${rel}: ${errMsg(err)}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Apply the overlay. Never throws; see the module header for semantics.
|
|
186
|
+
*/
|
|
187
|
+
function applyWorktreeOverlay(input) {
|
|
188
|
+
const { worktreePath, sourceRoot, providerDir, instructionsFilename } = input;
|
|
189
|
+
const warnings = [];
|
|
190
|
+
const created = [];
|
|
191
|
+
const manifestPath = path_1.default.join(worktreePath, exports.OVERLAY_MANIFEST);
|
|
192
|
+
const prior = readManifest(manifestPath);
|
|
193
|
+
try {
|
|
194
|
+
if (!isDir(worktreePath)) {
|
|
195
|
+
warnings.push(`worktree dir missing: ${worktreePath}`);
|
|
196
|
+
return { createdPaths: prior, warnings };
|
|
197
|
+
}
|
|
198
|
+
if (path_1.default.resolve(sourceRoot) === path_1.default.resolve(worktreePath)) {
|
|
199
|
+
// Paranoia: never overlay a worktree onto itself.
|
|
200
|
+
return { createdPaths: prior, warnings };
|
|
201
|
+
}
|
|
202
|
+
// 1. providerDir merge-overlay (commands/agents/skills/rules/settings/…).
|
|
203
|
+
const srcProvider = path_1.default.join(sourceRoot, providerDir);
|
|
204
|
+
if (isDir(srcProvider)) {
|
|
205
|
+
const destProvider = path_1.default.join(worktreePath, providerDir);
|
|
206
|
+
// The providerDir root is ALWAYS a real local dir (never a link) so
|
|
207
|
+
// nested `.claude/worktrees/**` stay local — see the module header.
|
|
208
|
+
let providerReady = true;
|
|
209
|
+
const destSt = lstatSafe(destProvider);
|
|
210
|
+
if (!destSt) {
|
|
211
|
+
try {
|
|
212
|
+
fs_1.default.mkdirSync(destProvider, { recursive: true });
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
warnings.push(`failed to create ${providerDir}: ${errMsg(err)}`);
|
|
216
|
+
providerReady = false;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
else if (!destSt.isDirectory()) {
|
|
220
|
+
warnings.push(`${providerDir} exists in the checkout but is not a directory — skipping the framework overlay`);
|
|
221
|
+
providerReady = false;
|
|
222
|
+
}
|
|
223
|
+
if (providerReady) {
|
|
224
|
+
let entries = [];
|
|
225
|
+
try {
|
|
226
|
+
entries = fs_1.default.readdirSync(srcProvider);
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
warnings.push(`failed to read source ${providerDir}: ${errMsg(err)}`);
|
|
230
|
+
}
|
|
231
|
+
for (const name of entries) {
|
|
232
|
+
if (SKIP_PROVIDER_ENTRIES.has(name))
|
|
233
|
+
continue;
|
|
234
|
+
mergeLink(path_1.default.join(srcProvider, name), path_1.default.join(destProvider, name), `${providerDir}/${name}`, created, warnings);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// 2. `.mcp.json` — COPY (spawn-local), only when the checkout lacks one.
|
|
239
|
+
copyIfAbsent(path_1.default.join(sourceRoot, '.mcp.json'), path_1.default.join(worktreePath, '.mcp.json'), '.mcp.json', created, warnings);
|
|
240
|
+
// 3. Provider instruction file — COPY when the source has one and the
|
|
241
|
+
// checkout doesn't (a repo-tracked CLAUDE.md always wins).
|
|
242
|
+
copyIfAbsent(path_1.default.join(sourceRoot, instructionsFilename), path_1.default.join(worktreePath, instructionsFilename), instructionsFilename, created, warnings);
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
warnings.push(`overlay failed: ${errMsg(err)}`);
|
|
246
|
+
}
|
|
247
|
+
// Union with the prior manifest so a RESUMED worktree keeps every overlay
|
|
248
|
+
// entry excluded from commits, then persist (the manifest is overlay-owned).
|
|
249
|
+
const all = [...new Set([...prior, ...created])];
|
|
250
|
+
if (all.length > 0) {
|
|
251
|
+
try {
|
|
252
|
+
fs_1.default.writeFileSync(manifestPath, JSON.stringify({ version: 1, paths: all }, null, 2));
|
|
253
|
+
if (!all.includes(exports.OVERLAY_MANIFEST))
|
|
254
|
+
all.push(exports.OVERLAY_MANIFEST);
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
warnings.push(`failed to write overlay manifest: ${errMsg(err)}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return { createdPaths: all, warnings };
|
|
261
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./chunk-BNv3lrIs.js";import{Cn as t,Kn as n,Ln as r,Rn as i,j as a,n as o,r as s}from"./index-n2PmJGF6.js";var c=e(n(),1),l=t();function u({projectId:e,conversationId:t}){let{t:n}=i(`agent`),{closeBrowser:u,queueCapture:d}=o(),f=(0,c.useMemo)(()=>`agent-${t??`home`}-${Math.round(performance.now())}`,[t]),p=async e=>{try{if(!t)throw Error(n(`workspace.requiresConversation`));let i=await(await fetch(e.screenshotDataUrl)).blob();d(await s(t,new File([i],`capture-${Date.now()}.png`,{type:`image/png`}))),r.success(n(`workspace.browserCaptured`)),u()}catch(e){r.error(e instanceof Error?e.message:n(`workspace.uploadFailed`))}};return(0,l.jsx)(a,{open:!0,onClose:u,projectId:e,pendingSpecId:f,confirmLabel:n(`workspace.browserConfirm`),onCaptured:e=>{p(e)}})}export{u as AgentBrowserCapture};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./chunk-BNv3lrIs.js";import{n as t}from"./auth-Cvsb7-Ek.js";import{$ as n,Cn as r,Dt as i,Et as a,F as o,G as s,H as c,Ht as l,I as u,J as d,K as f,Kn as p,L as m,Ln as h,M as g,Q as _,R as v,Rn as y,Sn as b,Tt as x,U as S,V as C,W as w,Z as T,dn as E,fn as D,g as O,n as k,q as A,tn as j,tt as M,un as N,wn as P}from"./index-n2PmJGF6.js";import{t as F}from"./format-command-BHymDa4r.js";import{n as I,t as L}from"./LogViewer-BoYbwvbU.js";var R=e(p(),1),z=[1e3,2e3,4e3,8e3,16e3];function B(e,n){let[r,i]=(0,R.useState)(`connecting`),a=(0,R.useRef)(null),o=(0,R.useRef)(0),s=(0,R.useRef)(null),c=(0,R.useRef)(n);c.current=n;let l=(0,R.useCallback)(()=>{let n=t(),r=n?new WebSocket(e,[`specrails-desktop`,n]):new WebSocket(e);a.current=r,i(`connecting`),r.onopen=()=>{o.current=0,i(`connected`)},r.onmessage=e=>{try{let t=JSON.parse(e.data);c.current(t)}catch{}},r.onclose=()=>{a.current=null;let e=o.current;if(e>=z.length){i(`disconnected`);return}let t=z[e];o.current+=1,s.current=setTimeout(l,t)}},[e]);return(0,R.useEffect)(()=>(l(),()=>{s.current&&clearTimeout(s.current);let e=a.current;e&&(e.onopen=null,e.onmessage=null,e.onclose=null,e.onerror=null,e.close()),a.current=null}),[l]),{connectionStatus:r}}var V=r();function H(e,t){let n=new Date(t).getTime()-new Date(e).getTime();if(n<0)return`—`;let r=Math.round(n/1e3);if(r<60)return`${r}s`;let i=Math.floor(r/60),a=r%60;return i<60?`${i}m ${a}s`:`${Math.floor(i/60)}h ${i%60}m`}var U={running:{variant:`running`,labelKey:`statusLabel.running`,tooltipKey:`statusTooltip.running`},completed:{variant:`success`,labelKey:`statusLabel.completed`,tooltipKey:`statusTooltip.completed`},failed:{variant:`failed`,labelKey:`statusLabel.failed`,tooltipKey:`statusTooltip.failed`},canceled:{variant:`canceled`,labelKey:`statusLabel.canceled`,tooltipKey:`statusTooltip.canceled`},queued:{variant:`queued`,labelKey:`statusLabel.queued`,tooltipKey:`statusTooltip.queued`},zombie_terminated:{variant:`failed`,labelKey:`statusLabel.zombie`,tooltipKey:`statusTooltip.zombie`}};function W({jobId:e,onClose:t}){let{t:n}=y(`jobs`),[r,i]=(0,R.useState)(null),[a,p]=(0,R.useState)([]),[b,x]=(0,R.useState)([]),[E,k]=(0,R.useState)({}),[j,N]=(0,R.useState)(!0),[F,z]=(0,R.useState)(!1),[W,G]=(0,R.useState)(!1);(0,R.useEffect)(()=>{async function t(){try{let t=await fetch(`${P()}/jobs/${e}`);if(t.status===404){z(!0);return}if(!t.ok)throw Error(`Failed to fetch job`);let n=await t.json();if(i(n.job),p(n.events),n.phaseDefinitions){x(n.phaseDefinitions);let e={};for(let t of n.phaseDefinitions)e[t.key]=`idle`;k(e)}}catch{z(!0)}finally{N(!1)}}t()},[e]);let K=(0,R.useRef)([]),q=(0,R.useRef)(null),J=(0,R.useCallback)(()=>{q.current=null;let e=K.current;e.length!==0&&(K.current=[],p(t=>{let n=[...t,...e];return n.length>1e4?n.slice(n.length-8e3):n}))},[]);(0,R.useEffect)(()=>()=>{q.current&&cancelAnimationFrame(q.current)},[]),B(g,(0,R.useCallback)(t=>{let n=t;if(n.type===`event`&&n.jobId===e){let t={id:Date.now(),job_id:e,seq:0,event_type:n.event_type,source:n.source,payload:n.payload,timestamp:n.timestamp};K.current.push(t),q.current||=requestAnimationFrame(J)}else if(n.type===`log`&&n.processId===e&&n.source===`stderr`){let t={id:Date.now(),job_id:e,seq:0,event_type:`log`,source:`stderr`,payload:JSON.stringify({line:n.line}),timestamp:n.timestamp};K.current.push(t),q.current||=requestAnimationFrame(J)}else if(n.type===`phase`){let e=n.phase,t=n.state;k(n=>({...n,[e]:t}))}else if(n.type===`queue`){let t=n.jobs?.find(t=>t.id===e);t&&r&&i(e=>e&&{...e,status:t.status})}},[e,r,J])),(0,R.useEffect)(()=>{function e(e){e.key===`Escape`&&t()}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t]);async function Y(){try{let t=await fetch(`${P()}/jobs/${e}`,{method:`DELETE`});if(t.ok)h.success(n(`modal.toast.cancelSignalSent`),{description:n(`modal.toast.cancelSignalSentDescription`)});else{let e=await t.json();h.error(n(`modal.toast.cancelFailed`),{description:e.error})}}catch{h.error(n(`modal.toast.networkError`))}}let X=r?U[r.status]??U.queued:U.queued,Z=r?.status===`running`,{panelRef:Q,panelStyle:$,headerHandleProps:ee,resizeHandles:te,isFloating:ne,guardBackdrop:re}=d();return(0,V.jsx)(m,{delayDuration:400,children:(0,V.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-stretch justify-center`,children:[(0,V.jsx)(`div`,{className:`absolute inset-0 bg-black/50 backdrop-blur-sm`,onClick:re(t)}),(0,V.jsxs)(`div`,{ref:Q,className:`relative w-full m-3 rounded-xl glass-card border border-border/30 flex flex-col animate-in fade-in zoom-in-95 duration-200 overflow-hidden`,style:$,children:[(0,V.jsxs)(`div`,{...ee,className:`flex items-center justify-between px-4 py-3 border-b border-border/30${ne?` cursor-grab active:cursor-grabbing`:``}`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[r&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(o,{children:[(0,V.jsx)(v,{asChild:!0,children:(0,V.jsx)(`div`,{children:(0,V.jsx)(T,{variant:X.variant,children:n(X.labelKey)})})}),(0,V.jsx)(u,{children:n(X.tooltipKey)})]}),(0,V.jsx)(`code`,{className:`text-xs font-mono text-foreground/80 truncate`,children:r.command}),(0,V.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:O(new Date(r.started_at),{addSuffix:!0,locale:D()})}),r.total_cost_usd!=null&&r.total_cost_usd>0&&(0,V.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[`$`,r.total_cost_usd.toFixed(4)]}),r.finished_at&&(0,V.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:H(r.started_at,r.finished_at)})]}),j&&(0,V.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:n(`common:states.loading`)})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[b.length>0&&(0,V.jsx)(`div`,{className:`mr-3`,children:(0,V.jsx)(I,{phases:E,phaseDefinitions:b})}),Z&&(0,V.jsx)(_,{variant:`ghost`,size:`sm`,onClick:()=>G(!0),className:`h-7 text-destructive hover:text-destructive hover:bg-destructive/10`,children:n(`common:actions.cancel`)}),(0,V.jsxs)(o,{children:[(0,V.jsx)(v,{asChild:!0,children:(0,V.jsx)(`a`,{href:`/jobs/${e}`,target:`_blank`,rel:`noopener noreferrer`,className:`h-7 w-7 flex items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-surface/50 transition-colors`,children:(0,V.jsx)(l,{className:`w-3.5 h-3.5`})})}),(0,V.jsx)(u,{children:n(`modal.openInNewTab`)})]}),(0,V.jsx)(`button`,{onClick:t,className:`h-7 w-7 flex items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-surface/50 transition-colors cursor-pointer`,children:(0,V.jsx)(M,{className:`w-4 h-4`})})]})]}),(0,V.jsx)(`div`,{className:`flex-1 overflow-hidden relative`,children:F?(0,V.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,V.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:n(`modal.notFound`)})}):(0,V.jsx)(L,{events:a,isLoading:j})})]}),(0,V.jsx)(A,{handles:te}),(0,V.jsx)(C,{open:W,onOpenChange:G,children:(0,V.jsxs)(c,{className:`max-w-sm`,children:[(0,V.jsxs)(s,{children:[(0,V.jsx)(f,{children:n(`modal.cancelConfirmTitle`)}),(0,V.jsx)(S,{children:n(`modal.cancelConfirmDescription`)})]}),(0,V.jsxs)(w,{children:[(0,V.jsx)(_,{variant:`ghost`,size:`sm`,onClick:()=>G(!1),children:n(`modal.keepRunning`)}),(0,V.jsx)(_,{variant:`destructive`,size:`sm`,onClick:()=>{G(!1),Y()},children:n(`modal.cancelJob`)})]})]})})]})})}var G=360,K=480,q={running:`running`,completed:`success`,failed:`failed`,canceled:`canceled`,queued:`queued`};function J({projectId:e}){let{t}=y(`agent`),{t:r}=y(`jobs`),{closeJobsPane:o}=k(),{projects:s}=N(),c=s.find(t=>t.id===e)?.provider,[l,u]=(0,R.useState)(K),[d,f]=(0,R.useState)(!1),[p,m]=(0,R.useState)(null),{data:h,isFirstLoad:g,refresh:_}=E({namespace:`agent-jobs`,projectId:e,initialValue:[],fetcher:async()=>{let e=await fetch(`${P()}/jobs?limit=50`);return e.ok?(await e.json()).jobs:[]},pollInterval:5e3}),{registerHandler:v,unregisterHandler:S}=b(),C=(0,R.useRef)(e);C.current=e;let w=(0,R.useRef)(_);w.current=_,(0,R.useEffect)(()=>(v(`agent-jobs-pane`,e=>{let t=e;t.type===`queue`&&(t.projectId&&t.projectId!==C.current||w.current())}),()=>S(`agent-jobs-pane`)),[v,S]);let A=(0,R.useCallback)(e=>{let t=e.clientX,n=l,r=window.innerWidth-G;try{e.currentTarget.setPointerCapture(e.pointerId)}catch{}let i=e=>{u(Math.min(Math.max(n+(t-e.clientX),G),r))},a=()=>{window.removeEventListener(`pointermove`,i),window.removeEventListener(`pointerup`,a),window.removeEventListener(`pointercancel`,a)};window.addEventListener(`pointermove`,i),window.addEventListener(`pointerup`,a),window.addEventListener(`pointercancel`,a)},[l]);return(0,V.jsxs)(`div`,{className:n(`flex h-full flex-col overflow-hidden border-l border-border bg-background`,d&&`absolute inset-0 z-30 border-l-0`),style:d?void 0:{width:l,flexShrink:0},children:[(0,V.jsx)(`div`,{className:`relative flex items-center`,children:!d&&(0,V.jsx)(`div`,{role:`separator`,"aria-orientation":`vertical`,onPointerDown:A,className:`absolute left-0 top-0 h-full w-1.5 -translate-x-full cursor-col-resize select-none touch-none hover:bg-accent-primary/20`,title:t(`workspace.resizeJobs`)})}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border/60 bg-surface/40 px-3 py-1.5`,children:[(0,V.jsx)(`span`,{className:`text-xs font-medium text-foreground/70`,children:t(`workspace.jobs`)}),(0,V.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>f(e=>!e),"aria-label":t(d?`restore`:`maximize`),title:t(d?`restore`:`maximize`),className:`rounded-md p-1 text-foreground/60 hover:bg-surface hover:text-foreground`,children:d?(0,V.jsx)(x,{className:`h-4 w-4`}):(0,V.jsx)(a,{className:`h-4 w-4`})}),(0,V.jsx)(`button`,{type:`button`,onClick:o,"aria-label":t(`workspace.closeJobs`),title:t(`workspace.closeJobs`),className:`rounded-md p-1 text-foreground/60 hover:bg-surface hover:text-foreground`,children:(0,V.jsx)(M,{className:`h-4 w-4`})})]})]}),(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-2`,children:g?(0,V.jsx)(`div`,{className:`flex h-24 items-center justify-center text-muted-foreground`,children:(0,V.jsx)(i,{className:`h-4 w-4 animate-spin`})}):h.length===0?(0,V.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-2 text-center text-muted-foreground`,children:[(0,V.jsx)(j,{className:`h-6 w-6 opacity-40`}),(0,V.jsx)(`p`,{className:`text-xs`,children:t(`workspace.noJobs`)})]}):(0,V.jsx)(`ul`,{className:`space-y-1`,children:h.map(e=>(0,V.jsx)(`li`,{children:(0,V.jsxs)(`button`,{type:`button`,onClick:()=>m(e.id),className:n(`flex w-full flex-col gap-1 rounded-lg border border-border/50 bg-surface/30 px-2.5 py-2 text-left transition-colors`,`hover:border-accent-primary/40 hover:bg-surface/60`),children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(T,{variant:q[e.status]??`queued`,children:r(`statusLabel.${e.status in q?e.status:`queued`}`)}),e.status===`running`&&(0,V.jsx)(i,{className:`h-3 w-3 animate-spin text-accent-primary`}),(0,V.jsx)(`span`,{className:`ml-auto text-[10px] text-muted-foreground`,children:O(new Date(e.started_at),{addSuffix:!0,locale:D()})})]}),(0,V.jsx)(`code`,{className:`truncate font-mono text-xs text-foreground/85`,children:F(e.command,c)})]})},e.id))})}),p&&(0,V.jsx)(W,{jobId:p,onClose:()=>m(null)})]})}export{J as AgentModeJobsPane};
|