specrails-desktop 2.46.0 → 2.47.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.
Files changed (94) hide show
  1. package/client/dist/assets/{ActivityFeedPage-CsHQPpvl.js → ActivityFeedPage-DSCpSOGV.js} +1 -1
  2. package/client/dist/assets/{AgentBrowserCapture-BVcCK7x0.js → AgentBrowserCapture-mc1c5pgS.js} +1 -1
  3. package/client/dist/assets/{AgentModeAnalyticsPane-C5F3m29G.js → AgentModeAnalyticsPane--UkamBTm.js} +2 -2
  4. package/client/dist/assets/{AgentModeCodePane-C5QuKsu0.js → AgentModeCodePane-DJCswsvU.js} +2 -2
  5. package/client/dist/assets/{AgentModeJobsPane-rnD-EPMd.js → AgentModeJobsPane-Dw3DNFkh.js} +1 -1
  6. package/client/dist/assets/{AgentsPage-DiyJWZcU.js → AgentsPage-ChElPUL9.js} +1 -1
  7. package/client/dist/assets/{AnalyticsPage-Dkmb0dnd.js → AnalyticsPage-BGtkFHBp.js} +1 -1
  8. package/client/dist/assets/{CodePage-C0dH99-t.js → CodePage-BBnw3VGn.js} +1 -1
  9. package/client/dist/assets/{DesktopAnalyticsPage-DuTjr2n8.js → DesktopAnalyticsPage-B85tNScc.js} +1 -1
  10. package/client/dist/assets/{DocsDialog-BVZJZHVR.js → DocsDialog-D4cXrOMl.js} +1 -1
  11. package/client/dist/assets/{DocsPage-D6KHTv8V.js → DocsPage-BCAbC6qy.js} +1 -1
  12. package/client/dist/assets/{ExportDropdown-pWZGYCv3.js → ExportDropdown-BwuvqS2Y.js} +1 -1
  13. package/client/dist/assets/{InteractiveJobComposer-Ck3PQxjN.js → InteractiveJobComposer-Coq-Zhk0.js} +2 -2
  14. package/client/dist/assets/{JobDetailModal-DkoMH3ie.js → JobDetailModal--Mjam0Nc.js} +1 -1
  15. package/client/dist/assets/{JobDetailPage-CBVivcl2.js → JobDetailPage-B6ShWSBh.js} +1 -1
  16. package/client/dist/assets/{JobsPage-CzxEeca9.js → JobsPage-DHU_ep_B.js} +1 -1
  17. package/client/dist/assets/{LoopBuilderPage-CtmOE4-b.js → LoopBuilderPage-Byvq8Oqx.js} +1 -1
  18. package/client/dist/assets/{LoopPreviewModal-BYeLjQbr.js → LoopPreviewModal-BMC9Mgj1.js} +1 -1
  19. package/client/dist/assets/{LoopsPage-6iW7g25k.js → LoopsPage-CFGl-Nw8.js} +1 -1
  20. package/client/dist/assets/{MinimizedChatsContext-B6wVevPq.js → MinimizedChatsContext-DHjHBYqa.js} +1 -1
  21. package/client/dist/assets/{PluginsPage-Bf1z3WPF.js → PluginsPage-BHygRnW6.js} +1 -1
  22. package/client/dist/assets/{ProjectSettingsDialog-DsCRIc4v.js → ProjectSettingsDialog-nspqxH-M.js} +1 -1
  23. package/client/dist/assets/{RepositoryDeliveries-BQm_3TO8.js → RepositoryDeliveries-Dq9NJOWi.js} +1 -1
  24. package/client/dist/assets/{RepositoryScopeSelector-DnAFtjTz.js → RepositoryScopeSelector-C3jKG2z0.js} +1 -1
  25. package/client/dist/assets/{ReviewPacketPage-CaXAwtR7.js → ReviewPacketPage-C9mqhi65.js} +1 -1
  26. package/client/dist/assets/{TemplatePreviewModal-9aRFpJ_J.js → TemplatePreviewModal-BmwoAjOr.js} +1 -1
  27. package/client/dist/assets/{TicketDetailModalContext-B1X5glzV.js → TicketDetailModalContext-lYmoONrd.js} +1 -1
  28. package/client/dist/assets/{Trans-BwLgX6n7.js → Trans-C0KyPo2O.js} +1 -1
  29. package/client/dist/assets/agentRuntime-62GWdc26.js +1 -0
  30. package/client/dist/assets/agentRuntime-BN1mKAuY.js +1 -0
  31. package/client/dist/assets/agentRuntime-BNBCzQLM.js +1 -0
  32. package/client/dist/assets/agentRuntime-BQE_K1GG.js +1 -0
  33. package/client/dist/assets/agentRuntime-CCU3HCtS.js +1 -0
  34. package/client/dist/assets/agentRuntime-DT72Bpdv.js +1 -0
  35. package/client/dist/assets/agentRuntime-ZfMPeeiP.js +1 -0
  36. package/client/dist/assets/agentRuntime-g3W8Ry4d.js +1 -0
  37. package/client/dist/assets/{agents-IUOgqT5t.js → agents-BIT1UdTy.js} +1 -1
  38. package/client/dist/assets/{agents-DaYcxAr1.js → agents-C7fKfvm8.js} +1 -1
  39. package/client/dist/assets/{agents-ms7TwG16.js → agents-CST-lpYX.js} +1 -1
  40. package/client/dist/assets/{agents-Bvyi3y6R.js → agents-Cm2JYrAa.js} +1 -1
  41. package/client/dist/assets/{agents-BHp0_FQt.js → agents-DsgGMGwU.js} +1 -1
  42. package/client/dist/assets/{agents-45GbINfh.js → agents-DyI4rbHa.js} +1 -1
  43. package/client/dist/assets/{agents-rzPnqoBR.js → agents-H6tVQUNP.js} +1 -1
  44. package/client/dist/assets/{agents-DMKFStHL.js → agents-_5mJMkAE.js} +1 -1
  45. package/client/dist/assets/{formatDistanceToNow-CeZv93iR.js → formatDistanceToNow-D44phX1J.js} +1 -1
  46. package/client/dist/assets/{getTimezoneOffsetInMilliseconds-DxAkjvJb.js → getTimezoneOffsetInMilliseconds-EAh9LFSx.js} +1 -1
  47. package/client/dist/assets/{index-DYoyDWim.js → index-DgMBighL.js} +9 -9
  48. package/client/dist/assets/{jira-api-ChjVGJx_.js → jira-api-BQR6G0YY.js} +1 -1
  49. package/client/dist/assets/{narration-D-e9ssxA.js → narration-B1uGfofH.js} +1 -1
  50. package/client/dist/assets/{narration-DnrKC3mF.js → narration-BKcL4Srl.js} +1 -1
  51. package/client/dist/assets/{narration-CvQdWdR5.js → narration-BtjKyHVM.js} +1 -1
  52. package/client/dist/assets/{narration-BPMOQPFe.js → narration-CqNvgRi9.js} +1 -1
  53. package/client/dist/assets/{narration-DKLjXIFI.js → narration-DiPyj06T.js} +1 -1
  54. package/client/dist/assets/{narration-4OSg0b5-.js → narration-DrBAf8uv.js} +1 -1
  55. package/client/dist/assets/{narration-Dypjxeel.js → narration-OyujFouL.js} +1 -1
  56. package/client/dist/assets/{narration-BSldQfjd.js → narration-UWi_xIZ-.js} +1 -1
  57. package/client/dist/assets/{project-repositories-BvBj9XH9.js → project-repositories-GRYdjlKB.js} +1 -1
  58. package/client/dist/assets/{spending-DNM6NAoA.js → spending-CN9PHM65.js} +1 -1
  59. package/client/dist/assets/{useDesktop-mxHVQOdx.js → useDesktop-iius_s5d.js} +1 -1
  60. package/client/dist/assets/{useSharedWebSocket-DnxHj8jP.js → useSharedWebSocket-D7hkZ3Ka.js} +2 -2
  61. package/client/dist/index.html +16 -16
  62. package/docs/plans/implementation-efficiency-artifact.json +18 -0
  63. package/docs/plans/implementation-efficiency-evaluation.json +1817 -0
  64. package/docs/plans/implementation-efficiency-evaluation.md +41 -0
  65. package/docs/plans/implementation-efficiency-progress.md +48 -0
  66. package/docs/plans/implementation-efficiency-release.md +41 -0
  67. package/docs/plans/implementation-efficiency.md +124 -0
  68. package/package.json +1 -1
  69. package/server/dist/agent-runtime-bridge.js +29 -25
  70. package/server/dist/agent-runtime-controls-router.js +8 -0
  71. package/server/dist/agent-runtime-controls.js +57 -10
  72. package/server/dist/agent-runtime-effective-config.js +32 -0
  73. package/server/dist/agent-runtime-events.js +46 -0
  74. package/server/dist/agent-runtime-history.js +47 -0
  75. package/server/dist/agent-runtime-loader.js +84 -5
  76. package/server/dist/agent-runtime-metrics.js +76 -0
  77. package/server/dist/agent-runtime-package.js +205 -0
  78. package/server/dist/agent-runtime-settings-router.js +25 -4
  79. package/server/dist/agent-runtime-settings.js +26 -0
  80. package/server/dist/loop-executors.js +2 -2
  81. package/server/dist/loop-run-manager.js +10 -2
  82. package/server/dist/mcp/tools/rails.js +1 -0
  83. package/server/dist/rail-isolated-launch.js +1 -0
  84. package/server/dist/rails-router.js +26 -0
  85. package/server/dist/schemas/agent-runtime.schema.json +18 -1
  86. package/server/dist/schemas/fixtures/runtime-efficiency-summary.v1.json +790 -0
  87. package/client/dist/assets/agentRuntime-BUagD2I_.js +0 -1
  88. package/client/dist/assets/agentRuntime-BkL70WtX.js +0 -1
  89. package/client/dist/assets/agentRuntime-CWXVqgqE.js +0 -1
  90. package/client/dist/assets/agentRuntime-CvNBdUAe.js +0 -1
  91. package/client/dist/assets/agentRuntime-D4RmeuNY.js +0 -1
  92. package/client/dist/assets/agentRuntime-DTidBWKg.js +0 -1
  93. package/client/dist/assets/agentRuntime-DhKYfyaU.js +0 -1
  94. package/client/dist/assets/agentRuntime-LL8_GLx9.js +0 -1
@@ -1 +1 @@
1
- import{t as e}from"./createLucideIcon-Bjbbp_KS.js";import{a as t}from"./useDesktop-mxHVQOdx.js";var n=e(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]);async function r(e){let t=await e.text(),n=t?JSON.parse(t):{};if(!e.ok)throw Error(n.error||`Request failed (${e.status})`);return n}function i(e){return e??t()}var a=e=>({method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),o={getConnection(e){return fetch(`${i(e)}/jira/connection`).then(e=>r(e))},test(e,t){return fetch(`${i(t)}/jira/test`,a(e)).then(e=>r(e))},discoverProjects(e,t){return fetch(`${i(t)}/jira/discover-projects`,a(e)).then(e=>r(e))},discoverStatuses(e,t){return fetch(`${i(t)}/jira/discover-statuses`,a(e)).then(e=>r(e))},connect(e,t){return fetch(`${i(t)}/jira/connect`,a(e)).then(e=>r(e))},setEnabled(e,t){return fetch(`${i(t)}/jira/connection`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:e})}).then(e=>r(e))},patchConnection(e,t){return fetch(`${i(t)}/jira/connection`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>r(e))},listStatuses(e){return fetch(`${i(e)}/jira/statuses`).then(e=>r(e))},moveSpecToStatus(e,t,n){return fetch(`${i(n)}/jira/specs/${e}/move-to-status`,a({status:t})).then(e=>r(e))},discardSpec(e,t,n){return fetch(`${i(n)}/jira/specs/${e}/discard`,a({comment:t})).then(e=>r(e))},getSpecDetails(e,t){return fetch(`${i(t)}/jira/specs/${e}/details`).then(e=>r(e))},disconnect(e){return fetch(`${i(e)}/jira/connection`,{method:`DELETE`}).then(e=>r(e))},syncNow(e){return fetch(`${i(e)}/jira/sync`,{method:`POST`}).then(e=>r(e))},resume(e){return fetch(`${i(e)}/jira/resume`,{method:`POST`}).then(e=>r(e))},listOutbox(e,t){let n=e?`?state=${e}`:``;return fetch(`${i(t)}/jira/outbox${n}`).then(e=>r(e))},retryOutbox(e,t){return fetch(`${i(t)}/jira/outbox/${e}/retry`,{method:`POST`}).then(e=>r(e))}};export{n,o as t};
1
+ import{t as e}from"./createLucideIcon-Bjbbp_KS.js";import{a as t}from"./useDesktop-iius_s5d.js";var n=e(`wrench`,[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]);async function r(e){let t=await e.text(),n=t?JSON.parse(t):{};if(!e.ok)throw Error(n.error||`Request failed (${e.status})`);return n}function i(e){return e??t()}var a=e=>({method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),o={getConnection(e){return fetch(`${i(e)}/jira/connection`).then(e=>r(e))},test(e,t){return fetch(`${i(t)}/jira/test`,a(e)).then(e=>r(e))},discoverProjects(e,t){return fetch(`${i(t)}/jira/discover-projects`,a(e)).then(e=>r(e))},discoverStatuses(e,t){return fetch(`${i(t)}/jira/discover-statuses`,a(e)).then(e=>r(e))},connect(e,t){return fetch(`${i(t)}/jira/connect`,a(e)).then(e=>r(e))},setEnabled(e,t){return fetch(`${i(t)}/jira/connection`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:e})}).then(e=>r(e))},patchConnection(e,t){return fetch(`${i(t)}/jira/connection`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>r(e))},listStatuses(e){return fetch(`${i(e)}/jira/statuses`).then(e=>r(e))},moveSpecToStatus(e,t,n){return fetch(`${i(n)}/jira/specs/${e}/move-to-status`,a({status:t})).then(e=>r(e))},discardSpec(e,t,n){return fetch(`${i(n)}/jira/specs/${e}/discard`,a({comment:t})).then(e=>r(e))},getSpecDetails(e,t){return fetch(`${i(t)}/jira/specs/${e}/details`).then(e=>r(e))},disconnect(e){return fetch(`${i(e)}/jira/connection`,{method:`DELETE`}).then(e=>r(e))},syncNow(e){return fetch(`${i(e)}/jira/sync`,{method:`POST`}).then(e=>r(e))},resume(e){return fetch(`${i(e)}/jira/resume`,{method:`POST`}).then(e=>r(e))},listOutbox(e,t){let n=e?`?state=${e}`:``;return fetch(`${i(t)}/jira/outbox${n}`).then(e=>r(e))},retryOutbox(e,t){return fetch(`${i(t)}/jira/outbox/${e}/retry`,{method:`POST`}).then(e=>r(e))}};export{n,o as t};
@@ -1 +1 @@
1
- var e=`Verlauf`,t=`Protokoll`,n=`Bisher ist nichts passiert.`,r=`Für diesen Lauf wurde keine Aktivität erfasst.`,i={range:`Solche Läufe dauerten {{low}}–{{high}} min (letzte {{count}})`,elapsed:`Läuft seit {{minutes}} min`},a=`Aus dem erstellt, was während des Laufs tatsächlich passiert ist.`,o={start:`Schritt {{step}}: {{title}}`,startRetry:`Schritt {{step}}: {{title}} — Versuch {{iteration}}`,done:`Schritt {{step}} abgeschlossen`,doneTimed:`Schritt {{step}} in {{seconds}} s abgeschlossen`,failed:`Schritt {{step}} war nicht erfolgreich`,interrupted:`Schritt {{step}} wurde vor dem Ende abgebrochen`,doneTimedMin:`Schritt {{step}} in {{minutes}} min abgeschlossen`,role:{work:`nimmt die Änderungen vor`,verify:`prüft, ob es funktioniert`,decide:`entscheidet, ob es fertig ist`,fix:`behebt, was fehlschlug`},stalled:`Schritt {{step}} hing – {{idleMinutes}} Min. ohne Aktivität, daher hat die App ihn beendet`,startResume:`Schritt {{step}}: {{title}} – Fortsetzung nach einem Hänger`,providerLimit:`Schritt {{step}} gestoppt — das Nutzungslimit des Anbieters ist erreicht`,recovered:`Schritt {{step}} nach dem Fortsetzen abgeschlossen`},s={another:`Noch nicht fertig — nächste Runde`,satisfied:`Ziel erreicht — weiter`},c={reading:`Liest {{target}}`,readingBare:`Liest den Code`,editing:`Ändert {{target}}`,editingBare:`Ändert den Code`,writing:`Schreibt {{target}}`,writingBare:`Schreibt neuen Code`,searching:`Sucht nach {{target}}`,searchingBare:`Sucht im Code`,running:`Führt {{target}} aus`,runningBare:`Führt einen Befehl aus`,working:`Arbeitet an {{target}}`,workingBare:`Arbeitet`,exploring:`Sieht den Code durch`,exploringBare:`Sieht den Code durch`,testing:`Führt die Tests aus`,building:`Baut das Projekt`,typechecking:`Prüft die Typen`,linting:`Prüft den Codestil`,installing:`Installiert Abhängigkeiten`,savingWork:`Sichert die Arbeit`,checkingSpec:`Prüft die Spec`,bookkeeping:`Notiert eigene Aufzeichnungen`,bookkeepingBare:`Notiert eigene Aufzeichnungen`,writingSpec:`Schreibt den Plan`,writingSpecBare:`Schreibt den Plan`,writingFiles:`Schreibt {{files}} Dateien ({{names}}…)`,readingFiles:`Liest {{files}} Dateien ({{names}}…)`,editingFiles:`Ändert {{files}} Dateien ({{names}}…)`,delegating:`Übergibt an {{target}}`,delegatingBare:`Übergibt an einen Spezialisten`,phase:{architect:`Entwurf der Änderung (Architekt)`,developer:`Umsetzung der Änderung (Entwickler)`,verify:`Ausführen der Verifikationsbefehle`,reviewer:`Prüfung der Umsetzung (Reviewer)`,archive:`Archivierung der geprüften Änderung`,stopped:`Die Laufzeit wurde gestoppt: {{target}}`,corrections:`Korrekturen gehen an den Entwickler zurück`,resumed:`Gespeicherte Ausführung wird fortgesetzt`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
1
+ var e=`Verlauf`,t=`Protokoll`,n=`Bisher ist nichts passiert.`,r=`Für diesen Lauf wurde keine Aktivität erfasst.`,i={range:`Solche Läufe dauerten {{low}}–{{high}} min (letzte {{count}})`,elapsed:`Läuft seit {{minutes}} min`},a=`Aus dem erstellt, was während des Laufs tatsächlich passiert ist.`,o={start:`Schritt {{step}}: {{title}}`,startRetry:`Schritt {{step}}: {{title}} — Versuch {{iteration}}`,done:`Schritt {{step}} abgeschlossen`,doneTimed:`Schritt {{step}} in {{seconds}} s abgeschlossen`,failed:`Schritt {{step}} war nicht erfolgreich`,interrupted:`Schritt {{step}} wurde vor dem Ende abgebrochen`,doneTimedMin:`Schritt {{step}} in {{minutes}} min abgeschlossen`,role:{work:`nimmt die Änderungen vor`,verify:`prüft, ob es funktioniert`,decide:`entscheidet, ob es fertig ist`,fix:`behebt, was fehlschlug`},stalled:`Schritt {{step}} hing – {{idleMinutes}} Min. ohne Aktivität, daher hat die App ihn beendet`,startResume:`Schritt {{step}}: {{title}} – Fortsetzung nach einem Hänger`,providerLimit:`Schritt {{step}} gestoppt — das Nutzungslimit des Anbieters ist erreicht`,recovered:`Schritt {{step}} nach dem Fortsetzen abgeschlossen`},s={another:`Noch nicht fertig — nächste Runde`,satisfied:`Ziel erreicht — weiter`},c={reading:`Liest {{target}}`,readingBare:`Liest den Code`,editing:`Ändert {{target}}`,editingBare:`Ändert den Code`,writing:`Schreibt {{target}}`,writingBare:`Schreibt neuen Code`,searching:`Sucht nach {{target}}`,searchingBare:`Sucht im Code`,running:`Führt {{target}} aus`,runningBare:`Führt einen Befehl aus`,working:`Arbeitet an {{target}}`,workingBare:`Arbeitet`,exploring:`Sieht den Code durch`,exploringBare:`Sieht den Code durch`,testing:`Führt die Tests aus`,building:`Baut das Projekt`,typechecking:`Prüft die Typen`,linting:`Prüft den Codestil`,installing:`Installiert Abhängigkeiten`,savingWork:`Sichert die Arbeit`,checkingSpec:`Prüft die Spec`,bookkeeping:`Notiert eigene Aufzeichnungen`,bookkeepingBare:`Notiert eigene Aufzeichnungen`,writingSpec:`Schreibt den Plan`,writingSpecBare:`Schreibt den Plan`,writingFiles:`Schreibt {{files}} Dateien ({{names}}…)`,readingFiles:`Liest {{files}} Dateien ({{names}}…)`,editingFiles:`Ändert {{files}} Dateien ({{names}}…)`,delegating:`Übergibt an {{target}}`,delegatingBare:`Übergibt an einen Spezialisten`,phase:{architect:`Entwurf der Änderung (Architekt)`,developer:`Umsetzung der Änderung (Entwickler)`,verify:`Ausführen der Verifikationsbefehle`,reviewer:`Prüfung der Umsetzung (Reviewer)`,archive:`Archivierung der geprüften Änderung`,stopped:`Die Laufzeit wurde gestoppt: {{target}}`,corrections:`Korrekturen gehen an den Entwickler zurück`,resumed:`Gespeicherte Ausführung wird fortgesetzt`},check:{started:`Prüfe {{target}}`,passed:`Prüfung bestanden: {{target}}`,failed:`Prüfung fehlgeschlagen: {{target}}`,reused:`Geprüftes Ergebnis wiederverwenden: {{target}}`,invalidated:`Vorheriges Ergebnis ungültig: {{target}}`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
@@ -1 +1 @@
1
- var e=`过程`,t=`日志`,n=`还没有发生任何事。`,r=`本次运行没有记录到活动。`,i={range:`同类运行耗时 {{low}}–{{high}} 分钟(最近 {{count}} 次)`,elapsed:`已运行 {{minutes}} 分钟`},a=`根据运行期间真实发生的事情生成。`,o={start:`第 {{step}} 步:{{title}}`,startRetry:`第 {{step}} 步:{{title}} — 第 {{iteration}} 次尝试`,done:`第 {{step}} 步完成`,doneTimed:`第 {{step}} 步用 {{seconds}} 秒完成`,failed:`第 {{step}} 步未成功`,interrupted:`第 {{step}} 步在完成前被中断`,doneTimedMin:`第 {{step}} 步用 {{minutes}} 分钟完成`,role:{work:`进行修改`,verify:`验证是否可用`,decide:`判断是否完成`,fix:`修复失败的部分`},stalled:`第 {{step}} 步停滞:{{idleMinutes}} 分钟无活动,应用已将其停止`,startResume:`第 {{step}} 步:{{title}}——停滞后恢复`,providerLimit:`步骤 {{step}} 已停止 — 已达到提供商用量限额`,recovered:`恢复后步骤 {{step}} 已完成`},s={another:`还没完成 — 再来一轮`,satisfied:`目标达成 — 继续`},c={reading:`正在读取 {{target}}`,readingBare:`正在读取代码`,editing:`正在修改 {{target}}`,editingBare:`正在修改代码`,writing:`正在编写 {{target}}`,writingBare:`正在编写新代码`,searching:`正在搜索 {{target}}`,searchingBare:`正在搜索代码`,running:`正在运行 {{target}}`,runningBare:`正在运行命令`,working:`正在处理 {{target}}`,workingBare:`正在工作`,exploring:`正在查看代码`,exploringBare:`正在查看代码`,testing:`正在运行测试`,building:`正在构建项目`,typechecking:`正在检查类型`,linting:`正在检查代码风格`,installing:`正在安装依赖`,savingWork:`正在保存工作`,checkingSpec:`正在检查规格`,bookkeeping:`正在记录自己的笔记`,bookkeepingBare:`正在记录自己的笔记`,writingSpec:`正在编写计划`,writingSpecBare:`正在编写计划`,writingFiles:`正在写入 {{files}} 个文件({{names}}…)`,readingFiles:`正在读取 {{files}} 个文件({{names}}…)`,editingFiles:`正在修改 {{files}} 个文件({{names}}…)`,delegating:`移交给 {{target}}`,delegatingBare:`移交给专家`,phase:{architect:`设计变更(架构师)`,developer:`实现变更(开发者)`,verify:`运行验证命令`,reviewer:`审阅实现(审阅者)`,archive:`归档已审阅的变更`,stopped:`运行引擎已停止:{{target}}`,corrections:`将修正返回给开发者`,resumed:`正在恢复已保存的执行`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
1
+ var e=`过程`,t=`日志`,n=`还没有发生任何事。`,r=`本次运行没有记录到活动。`,i={range:`同类运行耗时 {{low}}–{{high}} 分钟(最近 {{count}} 次)`,elapsed:`已运行 {{minutes}} 分钟`},a=`根据运行期间真实发生的事情生成。`,o={start:`第 {{step}} 步:{{title}}`,startRetry:`第 {{step}} 步:{{title}} — 第 {{iteration}} 次尝试`,done:`第 {{step}} 步完成`,doneTimed:`第 {{step}} 步用 {{seconds}} 秒完成`,failed:`第 {{step}} 步未成功`,interrupted:`第 {{step}} 步在完成前被中断`,doneTimedMin:`第 {{step}} 步用 {{minutes}} 分钟完成`,role:{work:`进行修改`,verify:`验证是否可用`,decide:`判断是否完成`,fix:`修复失败的部分`},stalled:`第 {{step}} 步停滞:{{idleMinutes}} 分钟无活动,应用已将其停止`,startResume:`第 {{step}} 步:{{title}}——停滞后恢复`,providerLimit:`步骤 {{step}} 已停止 — 已达到提供商用量限额`,recovered:`恢复后步骤 {{step}} 已完成`},s={another:`还没完成 — 再来一轮`,satisfied:`目标达成 — 继续`},c={reading:`正在读取 {{target}}`,readingBare:`正在读取代码`,editing:`正在修改 {{target}}`,editingBare:`正在修改代码`,writing:`正在编写 {{target}}`,writingBare:`正在编写新代码`,searching:`正在搜索 {{target}}`,searchingBare:`正在搜索代码`,running:`正在运行 {{target}}`,runningBare:`正在运行命令`,working:`正在处理 {{target}}`,workingBare:`正在工作`,exploring:`正在查看代码`,exploringBare:`正在查看代码`,testing:`正在运行测试`,building:`正在构建项目`,typechecking:`正在检查类型`,linting:`正在检查代码风格`,installing:`正在安装依赖`,savingWork:`正在保存工作`,checkingSpec:`正在检查规格`,bookkeeping:`正在记录自己的笔记`,bookkeepingBare:`正在记录自己的笔记`,writingSpec:`正在编写计划`,writingSpecBare:`正在编写计划`,writingFiles:`正在写入 {{files}} 个文件({{names}}…)`,readingFiles:`正在读取 {{files}} 个文件({{names}}…)`,editingFiles:`正在修改 {{files}} 个文件({{names}}…)`,delegating:`移交给 {{target}}`,delegatingBare:`移交给专家`,phase:{architect:`设计变更(架构师)`,developer:`实现变更(开发者)`,verify:`运行验证命令`,reviewer:`审阅实现(审阅者)`,archive:`归档已审阅的变更`,stopped:`运行引擎已停止:{{target}}`,corrections:`将修正返回给开发者`,resumed:`正在恢复已保存的执行`},check:{started:`正在检查 {{target}}`,passed:`检查通过:{{target}}`,failed:`检查失败:{{target}}`,reused:`复用已验证的结果:{{target}}`,invalidated:`先前结果已失效:{{target}}`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
@@ -1 +1 @@
1
- var e=`Relato`,t=`Registro`,n=`Todavía no ha pasado nada.`,r=`No se registró actividad en esta ejecución.`,i={range:`Ejecuciones como esta han tardado {{low}}–{{high}} min (últimas {{count}})`,elapsed:`Lleva {{minutes}} min`},a=`Construido a partir de lo que realmente ocurrió durante la ejecución.`,o={start:`Paso {{step}}: {{title}}`,startRetry:`Paso {{step}}: {{title}} — intento {{iteration}}`,done:`Paso {{step}} terminado`,doneTimed:`Paso {{step}} terminado en {{seconds}} s`,failed:`El paso {{step}} no salió bien`,interrupted:`El paso {{step}} se interrumpió antes de terminar`,doneTimedMin:`Paso {{step}} terminado en {{minutes}} min`,role:{work:`haciendo los cambios`,verify:`comprobando que funciona`,decide:`decidiendo si está terminado`,fix:`arreglando lo que falló`},stalled:`El paso {{step}} se atascó: sin actividad durante {{idleMinutes}} min, así que la app lo detuvo`,startResume:`Paso {{step}}: {{title}} — reanudando tras un atasco`,providerLimit:`Paso {{step}} detenido — se alcanzó el límite de uso del proveedor`,recovered:`Paso {{step}} completado tras reanudar`},s={another:`Aún no está — otra vuelta`,satisfied:`Objetivo cumplido — seguimos`},c={reading:`Leyendo {{target}}`,readingBare:`Leyendo el código`,editing:`Cambiando {{target}}`,editingBare:`Cambiando el código`,writing:`Escribiendo {{target}}`,writingBare:`Escribiendo código nuevo`,searching:`Buscando {{target}}`,searchingBare:`Buscando en el código`,running:`Ejecutando {{target}}`,runningBare:`Ejecutando un comando`,working:`Trabajando en {{target}}`,workingBare:`Trabajando`,exploring:`Revisando el código`,exploringBare:`Revisando el código`,testing:`Ejecutando los tests`,building:`Compilando el proyecto`,typechecking:`Comprobando los tipos`,linting:`Revisando el estilo del código`,installing:`Instalando dependencias`,savingWork:`Guardando el trabajo`,checkingSpec:`Comprobando la spec`,bookkeeping:`Anotando sus propias notas`,bookkeepingBare:`Anotando sus propias notas`,writingSpec:`Escribiendo el plan`,writingSpecBare:`Escribiendo el plan`,writingFiles:`Escribiendo {{files}} archivos ({{names}}…)`,readingFiles:`Leyendo {{files}} archivos ({{names}}…)`,editingFiles:`Cambiando {{files}} archivos ({{names}}…)`,delegating:`Pasando el trabajo al {{target}}`,delegatingBare:`Pasando el trabajo a un especialista`,phase:{architect:`Diseñando el cambio (arquitecto)`,developer:`Implementando el cambio (desarrollador)`,verify:`Ejecutando los comandos de verificación`,reviewer:`Revisando la implementación (revisor)`,archive:`Archivando el cambio revisado`,stopped:`El motor se detuvo: {{target}}`,corrections:`Devolviendo correcciones al desarrollador`,resumed:`Reanudando la ejecución guardada`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
1
+ var e=`Relato`,t=`Registro`,n=`Todavía no ha pasado nada.`,r=`No se registró actividad en esta ejecución.`,i={range:`Ejecuciones como esta han tardado {{low}}–{{high}} min (últimas {{count}})`,elapsed:`Lleva {{minutes}} min`},a=`Construido a partir de lo que realmente ocurrió durante la ejecución.`,o={start:`Paso {{step}}: {{title}}`,startRetry:`Paso {{step}}: {{title}} — intento {{iteration}}`,done:`Paso {{step}} terminado`,doneTimed:`Paso {{step}} terminado en {{seconds}} s`,failed:`El paso {{step}} no salió bien`,interrupted:`El paso {{step}} se interrumpió antes de terminar`,doneTimedMin:`Paso {{step}} terminado en {{minutes}} min`,role:{work:`haciendo los cambios`,verify:`comprobando que funciona`,decide:`decidiendo si está terminado`,fix:`arreglando lo que falló`},stalled:`El paso {{step}} se atascó: sin actividad durante {{idleMinutes}} min, así que la app lo detuvo`,startResume:`Paso {{step}}: {{title}} — reanudando tras un atasco`,providerLimit:`Paso {{step}} detenido — se alcanzó el límite de uso del proveedor`,recovered:`Paso {{step}} completado tras reanudar`},s={another:`Aún no está — otra vuelta`,satisfied:`Objetivo cumplido — seguimos`},c={reading:`Leyendo {{target}}`,readingBare:`Leyendo el código`,editing:`Cambiando {{target}}`,editingBare:`Cambiando el código`,writing:`Escribiendo {{target}}`,writingBare:`Escribiendo código nuevo`,searching:`Buscando {{target}}`,searchingBare:`Buscando en el código`,running:`Ejecutando {{target}}`,runningBare:`Ejecutando un comando`,working:`Trabajando en {{target}}`,workingBare:`Trabajando`,exploring:`Revisando el código`,exploringBare:`Revisando el código`,testing:`Ejecutando los tests`,building:`Compilando el proyecto`,typechecking:`Comprobando los tipos`,linting:`Revisando el estilo del código`,installing:`Instalando dependencias`,savingWork:`Guardando el trabajo`,checkingSpec:`Comprobando la spec`,bookkeeping:`Anotando sus propias notas`,bookkeepingBare:`Anotando sus propias notas`,writingSpec:`Escribiendo el plan`,writingSpecBare:`Escribiendo el plan`,writingFiles:`Escribiendo {{files}} archivos ({{names}}…)`,readingFiles:`Leyendo {{files}} archivos ({{names}}…)`,editingFiles:`Cambiando {{files}} archivos ({{names}}…)`,delegating:`Pasando el trabajo al {{target}}`,delegatingBare:`Pasando el trabajo a un especialista`,phase:{architect:`Diseñando el cambio (arquitecto)`,developer:`Implementando el cambio (desarrollador)`,verify:`Ejecutando los comandos de verificación`,reviewer:`Revisando la implementación (revisor)`,archive:`Archivando el cambio revisado`,stopped:`El motor se detuvo: {{target}}`,corrections:`Devolviendo correcciones al desarrollador`,resumed:`Reanudando la ejecución guardada`},check:{started:`Comprobando {{target}}`,passed:`Comprobación superada: {{target}}`,failed:`Comprobación fallida: {{target}}`,reused:`Reutilizando el resultado verificado: {{target}}`,invalidated:`Resultado anterior invalidado: {{target}}`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
@@ -1 +1 @@
1
- var e=`Relato`,t=`Registo`,n=`Ainda não aconteceu nada.`,r=`Não foi registada atividade nesta execução.`,i={range:`Execuções como esta levaram {{low}}–{{high}} min (últimas {{count}})`,elapsed:`A correr há {{minutes}} min`},a=`Construído a partir do que realmente aconteceu durante a execução.`,o={start:`Passo {{step}}: {{title}}`,startRetry:`Passo {{step}}: {{title}} — tentativa {{iteration}}`,done:`Passo {{step}} concluído`,doneTimed:`Passo {{step}} concluído em {{seconds}} s`,failed:`O passo {{step}} não correu bem`,interrupted:`O passo {{step}} foi interrompido antes de terminar`,doneTimedMin:`Passo {{step}} concluído em {{minutes}} min`,role:{work:`a fazer as alterações`,verify:`a comprovar que funciona`,decide:`a decidir se está terminado`,fix:`a corrigir o que falhou`},stalled:`O passo {{step}} travou — sem atividade durante {{idleMinutes}} min, por isso a app parou-o`,startResume:`Passo {{step}}: {{title}} — a retomar após travar`,providerLimit:`Passo {{step}} parado — o limite de utilização do fornecedor foi atingido`,recovered:`Passo {{step}} concluído após retomar`},s={another:`Ainda não está — outra volta`,satisfied:`Objetivo cumprido — a seguir`},c={reading:`A ler {{target}}`,readingBare:`A ler o código`,editing:`A alterar {{target}}`,editingBare:`A alterar o código`,writing:`A escrever {{target}}`,writingBare:`A escrever código novo`,searching:`A procurar {{target}}`,searchingBare:`A procurar no código`,running:`A executar {{target}}`,runningBare:`A executar um comando`,working:`A trabalhar em {{target}}`,workingBare:`A trabalhar`,exploring:`A percorrer o código`,exploringBare:`A percorrer o código`,testing:`A executar os testes`,building:`A compilar o projeto`,typechecking:`A verificar os tipos`,linting:`A verificar o estilo do código`,installing:`A instalar dependências`,savingWork:`A guardar o trabalho`,checkingSpec:`A verificar a spec`,bookkeeping:`A registar as suas notas`,bookkeepingBare:`A registar as suas notas`,writingSpec:`A escrever o plano`,writingSpecBare:`A escrever o plano`,writingFiles:`A escrever {{files}} ficheiros ({{names}}…)`,readingFiles:`A ler {{files}} ficheiros ({{names}}…)`,editingFiles:`A alterar {{files}} ficheiros ({{names}}…)`,delegating:`A passar o trabalho ao {{target}}`,delegatingBare:`A passar o trabalho a um especialista`,phase:{architect:`A desenhar a alteração (arquiteto)`,developer:`A implementar a alteração (programador)`,verify:`A executar os comandos de verificação`,reviewer:`A rever a implementação (revisor)`,archive:`A arquivar a alteração revista`,stopped:`O motor parou: {{target}}`,corrections:`A devolver correções ao programador`,resumed:`Retomando a execução guardada`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
1
+ var e=`Relato`,t=`Registo`,n=`Ainda não aconteceu nada.`,r=`Não foi registada atividade nesta execução.`,i={range:`Execuções como esta levaram {{low}}–{{high}} min (últimas {{count}})`,elapsed:`A correr há {{minutes}} min`},a=`Construído a partir do que realmente aconteceu durante a execução.`,o={start:`Passo {{step}}: {{title}}`,startRetry:`Passo {{step}}: {{title}} — tentativa {{iteration}}`,done:`Passo {{step}} concluído`,doneTimed:`Passo {{step}} concluído em {{seconds}} s`,failed:`O passo {{step}} não correu bem`,interrupted:`O passo {{step}} foi interrompido antes de terminar`,doneTimedMin:`Passo {{step}} concluído em {{minutes}} min`,role:{work:`a fazer as alterações`,verify:`a comprovar que funciona`,decide:`a decidir se está terminado`,fix:`a corrigir o que falhou`},stalled:`O passo {{step}} travou — sem atividade durante {{idleMinutes}} min, por isso a app parou-o`,startResume:`Passo {{step}}: {{title}} — a retomar após travar`,providerLimit:`Passo {{step}} parado — o limite de utilização do fornecedor foi atingido`,recovered:`Passo {{step}} concluído após retomar`},s={another:`Ainda não está — outra volta`,satisfied:`Objetivo cumprido — a seguir`},c={reading:`A ler {{target}}`,readingBare:`A ler o código`,editing:`A alterar {{target}}`,editingBare:`A alterar o código`,writing:`A escrever {{target}}`,writingBare:`A escrever código novo`,searching:`A procurar {{target}}`,searchingBare:`A procurar no código`,running:`A executar {{target}}`,runningBare:`A executar um comando`,working:`A trabalhar em {{target}}`,workingBare:`A trabalhar`,exploring:`A percorrer o código`,exploringBare:`A percorrer o código`,testing:`A executar os testes`,building:`A compilar o projeto`,typechecking:`A verificar os tipos`,linting:`A verificar o estilo do código`,installing:`A instalar dependências`,savingWork:`A guardar o trabalho`,checkingSpec:`A verificar a spec`,bookkeeping:`A registar as suas notas`,bookkeepingBare:`A registar as suas notas`,writingSpec:`A escrever o plano`,writingSpecBare:`A escrever o plano`,writingFiles:`A escrever {{files}} ficheiros ({{names}}…)`,readingFiles:`A ler {{files}} ficheiros ({{names}}…)`,editingFiles:`A alterar {{files}} ficheiros ({{names}}…)`,delegating:`A passar o trabalho ao {{target}}`,delegatingBare:`A passar o trabalho a um especialista`,phase:{architect:`A desenhar a alteração (arquiteto)`,developer:`A implementar a alteração (programador)`,verify:`A executar os comandos de verificação`,reviewer:`A rever a implementação (revisor)`,archive:`A arquivar a alteração revista`,stopped:`O motor parou: {{target}}`,corrections:`A devolver correções ao programador`,resumed:`Retomando a execução guardada`},check:{started:`A verificar {{target}}`,passed:`Verificação aprovada: {{target}}`,failed:`Verificação falhou: {{target}}`,reused:`A reutilizar o resultado verificado: {{target}}`,invalidated:`Resultado anterior invalidado: {{target}}`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
@@ -1 +1 @@
1
- var e=`経過`,t=`ログ`,n=`まだ何も起きていません。`,r=`この実行では活動が記録されませんでした。`,i={range:`同種の実行は {{low}}〜{{high}} 分かかっています(直近 {{count}} 件)`,elapsed:`実行中 {{minutes}} 分`},a=`実行中に実際に起きたことから作成しています。`,o={start:`ステップ {{step}}:{{title}}`,startRetry:`ステップ {{step}}:{{title}} — {{iteration}} 回目`,done:`ステップ {{step}} 完了`,doneTimed:`ステップ {{step}} を {{seconds}} 秒で完了`,failed:`ステップ {{step}} は成功しませんでした`,interrupted:`ステップ {{step}} は完了前に中断されました`,doneTimedMin:`ステップ {{step}} を {{minutes}} 分で完了`,role:{work:`変更を加えています`,verify:`動作を確認しています`,decide:`完了かどうか判断しています`,fix:`失敗した箇所を修正しています`},stalled:`ステップ {{step}} が停止:{{idleMinutes}} 分間活動がなかったため、アプリが停止しました`,startResume:`ステップ {{step}}:{{title}} — 停止後に再開`,providerLimit:`ステップ {{step}} 停止 — プロバイダーの利用上限に達しました`,recovered:`再開後にステップ {{step}} が完了`},s={another:`まだ未達 — もう一周`,satisfied:`目標達成 — 次へ`},c={reading:`{{target}} を読んでいます`,readingBare:`コードを読んでいます`,editing:`{{target}} を変更しています`,editingBare:`コードを変更しています`,writing:`{{target}} を書いています`,writingBare:`新しいコードを書いています`,searching:`{{target}} を検索しています`,searchingBare:`コードを検索しています`,running:`{{target}} を実行しています`,runningBare:`コマンドを実行しています`,working:`{{target}} を進めています`,workingBare:`作業中`,exploring:`コードを見ています`,exploringBare:`コードを見ています`,testing:`テストを実行しています`,building:`プロジェクトをビルドしています`,typechecking:`型を確認しています`,linting:`コードスタイルを確認しています`,installing:`依存関係をインストールしています`,savingWork:`作業を保存しています`,checkingSpec:`仕様を確認しています`,bookkeeping:`自分用のメモを記録しています`,bookkeepingBare:`自分用のメモを記録しています`,writingSpec:`計画を書いています`,writingSpecBare:`計画を書いています`,writingFiles:`{{files}} 個のファイルを書いています({{names}}…)`,readingFiles:`{{files}} 個のファイルを読んでいます({{names}}…)`,editingFiles:`{{files}} 個のファイルを変更しています({{names}}…)`,delegating:`{{target}} に引き継いでいます`,delegatingBare:`担当に引き継いでいます`,phase:{architect:`変更を設計中(アーキテクト)`,developer:`変更を実装中(デベロッパー)`,verify:`検証コマンドを実行中`,reviewer:`実装をレビュー中(レビュアー)`,archive:`レビュー済みの変更をアーカイブ中`,stopped:`実行エンジンが停止しました: {{target}}`,corrections:`修正をデベロッパーに差し戻し中`,resumed:`保存した実行を再開しています`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
1
+ var e=`経過`,t=`ログ`,n=`まだ何も起きていません。`,r=`この実行では活動が記録されませんでした。`,i={range:`同種の実行は {{low}}〜{{high}} 分かかっています(直近 {{count}} 件)`,elapsed:`実行中 {{minutes}} 分`},a=`実行中に実際に起きたことから作成しています。`,o={start:`ステップ {{step}}:{{title}}`,startRetry:`ステップ {{step}}:{{title}} — {{iteration}} 回目`,done:`ステップ {{step}} 完了`,doneTimed:`ステップ {{step}} を {{seconds}} 秒で完了`,failed:`ステップ {{step}} は成功しませんでした`,interrupted:`ステップ {{step}} は完了前に中断されました`,doneTimedMin:`ステップ {{step}} を {{minutes}} 分で完了`,role:{work:`変更を加えています`,verify:`動作を確認しています`,decide:`完了かどうか判断しています`,fix:`失敗した箇所を修正しています`},stalled:`ステップ {{step}} が停止:{{idleMinutes}} 分間活動がなかったため、アプリが停止しました`,startResume:`ステップ {{step}}:{{title}} — 停止後に再開`,providerLimit:`ステップ {{step}} 停止 — プロバイダーの利用上限に達しました`,recovered:`再開後にステップ {{step}} が完了`},s={another:`まだ未達 — もう一周`,satisfied:`目標達成 — 次へ`},c={reading:`{{target}} を読んでいます`,readingBare:`コードを読んでいます`,editing:`{{target}} を変更しています`,editingBare:`コードを変更しています`,writing:`{{target}} を書いています`,writingBare:`新しいコードを書いています`,searching:`{{target}} を検索しています`,searchingBare:`コードを検索しています`,running:`{{target}} を実行しています`,runningBare:`コマンドを実行しています`,working:`{{target}} を進めています`,workingBare:`作業中`,exploring:`コードを見ています`,exploringBare:`コードを見ています`,testing:`テストを実行しています`,building:`プロジェクトをビルドしています`,typechecking:`型を確認しています`,linting:`コードスタイルを確認しています`,installing:`依存関係をインストールしています`,savingWork:`作業を保存しています`,checkingSpec:`仕様を確認しています`,bookkeeping:`自分用のメモを記録しています`,bookkeepingBare:`自分用のメモを記録しています`,writingSpec:`計画を書いています`,writingSpecBare:`計画を書いています`,writingFiles:`{{files}} 個のファイルを書いています({{names}}…)`,readingFiles:`{{files}} 個のファイルを読んでいます({{names}}…)`,editingFiles:`{{files}} 個のファイルを変更しています({{names}}…)`,delegating:`{{target}} に引き継いでいます`,delegatingBare:`担当に引き継いでいます`,phase:{architect:`変更を設計中(アーキテクト)`,developer:`変更を実装中(デベロッパー)`,verify:`検証コマンドを実行中`,reviewer:`実装をレビュー中(レビュアー)`,archive:`レビュー済みの変更をアーカイブ中`,stopped:`実行エンジンが停止しました: {{target}}`,corrections:`修正をデベロッパーに差し戻し中`,resumed:`保存した実行を再開しています`},check:{started:`{{target}} を検証中`,passed:`検証成功: {{target}}`,failed:`検証失敗: {{target}}`,reused:`検証済み結果を再利用: {{target}}`,invalidated:`以前の結果は無効: {{target}}`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
@@ -1 +1 @@
1
- var e=`Racconto`,t=`Registro`,n=`Non è ancora successo nulla.`,r=`Nessuna attività registrata per questa esecuzione.`,i={range:`Esecuzioni come questa hanno richiesto {{low}}–{{high}} min (ultime {{count}})`,elapsed:`In corso da {{minutes}} min`},a=`Costruito da ciò che è realmente accaduto durante l'esecuzione.`,o={start:`Passo {{step}}: {{title}}`,startRetry:`Passo {{step}}: {{title}} — tentativo {{iteration}}`,done:`Passo {{step}} completato`,doneTimed:`Passo {{step}} completato in {{seconds}} s`,failed:`Il passo {{step}} non è riuscito`,interrupted:`Il passo {{step}} è stato interrotto prima di finire`,doneTimedMin:`Passo {{step}} completato in {{minutes}} min`,role:{work:`sta applicando le modifiche`,verify:`sta verificando che funzioni`,decide:`sta decidendo se è finito`,fix:`sta correggendo ciò che è fallito`},stalled:`Il passo {{step}} si è bloccato — nessuna attività per {{idleMinutes}} min, quindi l'app l'ha fermato`,startResume:`Passo {{step}}: {{title}} — ripresa dopo un blocco`,providerLimit:`Passo {{step}} fermato — raggiunto il limite d'uso del provider`,recovered:`Passaggio {{step}} completato dopo la ripresa`},s={another:`Non ancora — un altro giro`,satisfied:`Obiettivo raggiunto — si procede`},c={reading:`Sta leggendo {{target}}`,readingBare:`Sta leggendo il codice`,editing:`Sta modificando {{target}}`,editingBare:`Sta modificando il codice`,writing:`Sta scrivendo {{target}}`,writingBare:`Sta scrivendo nuovo codice`,searching:`Sta cercando {{target}}`,searchingBare:`Sta cercando nel codice`,running:`Sta eseguendo {{target}}`,runningBare:`Sta eseguendo un comando`,working:`Sta lavorando su {{target}}`,workingBare:`Al lavoro`,exploring:`Sta esaminando il codice`,exploringBare:`Sta esaminando il codice`,testing:`Sta eseguendo i test`,building:`Sta compilando il progetto`,typechecking:`Sta verificando i tipi`,linting:`Sta verificando lo stile del codice`,installing:`Sta installando le dipendenze`,savingWork:`Sta salvando il lavoro`,checkingSpec:`Sta verificando la spec`,bookkeeping:`Sta annotando i propri appunti`,bookkeepingBare:`Sta annotando i propri appunti`,writingSpec:`Sta scrivendo il piano`,writingSpecBare:`Sta scrivendo il piano`,writingFiles:`Sta scrivendo {{files}} file ({{names}}…)`,readingFiles:`Sta leggendo {{files}} file ({{names}}…)`,editingFiles:`Sta modificando {{files}} file ({{names}}…)`,delegating:`Passa il lavoro al {{target}}`,delegatingBare:`Passa il lavoro a uno specialista`,phase:{architect:`Progettazione della modifica (architetto)`,developer:`Implementazione della modifica (sviluppatore)`,verify:`Esecuzione dei comandi di verifica`,reviewer:`Revisione dell’implementazione (revisore)`,archive:`Archiviazione della modifica revisionata`,stopped:`Il motore si è fermato: {{target}}`,corrections:`Correzioni rinviate allo sviluppatore`,resumed:`Ripresa dell’esecuzione salvata`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
1
+ var e=`Racconto`,t=`Registro`,n=`Non è ancora successo nulla.`,r=`Nessuna attività registrata per questa esecuzione.`,i={range:`Esecuzioni come questa hanno richiesto {{low}}–{{high}} min (ultime {{count}})`,elapsed:`In corso da {{minutes}} min`},a=`Costruito da ciò che è realmente accaduto durante l'esecuzione.`,o={start:`Passo {{step}}: {{title}}`,startRetry:`Passo {{step}}: {{title}} — tentativo {{iteration}}`,done:`Passo {{step}} completato`,doneTimed:`Passo {{step}} completato in {{seconds}} s`,failed:`Il passo {{step}} non è riuscito`,interrupted:`Il passo {{step}} è stato interrotto prima di finire`,doneTimedMin:`Passo {{step}} completato in {{minutes}} min`,role:{work:`sta applicando le modifiche`,verify:`sta verificando che funzioni`,decide:`sta decidendo se è finito`,fix:`sta correggendo ciò che è fallito`},stalled:`Il passo {{step}} si è bloccato — nessuna attività per {{idleMinutes}} min, quindi l'app l'ha fermato`,startResume:`Passo {{step}}: {{title}} — ripresa dopo un blocco`,providerLimit:`Passo {{step}} fermato — raggiunto il limite d'uso del provider`,recovered:`Passaggio {{step}} completato dopo la ripresa`},s={another:`Non ancora — un altro giro`,satisfied:`Obiettivo raggiunto — si procede`},c={reading:`Sta leggendo {{target}}`,readingBare:`Sta leggendo il codice`,editing:`Sta modificando {{target}}`,editingBare:`Sta modificando il codice`,writing:`Sta scrivendo {{target}}`,writingBare:`Sta scrivendo nuovo codice`,searching:`Sta cercando {{target}}`,searchingBare:`Sta cercando nel codice`,running:`Sta eseguendo {{target}}`,runningBare:`Sta eseguendo un comando`,working:`Sta lavorando su {{target}}`,workingBare:`Al lavoro`,exploring:`Sta esaminando il codice`,exploringBare:`Sta esaminando il codice`,testing:`Sta eseguendo i test`,building:`Sta compilando il progetto`,typechecking:`Sta verificando i tipi`,linting:`Sta verificando lo stile del codice`,installing:`Sta installando le dipendenze`,savingWork:`Sta salvando il lavoro`,checkingSpec:`Sta verificando la spec`,bookkeeping:`Sta annotando i propri appunti`,bookkeepingBare:`Sta annotando i propri appunti`,writingSpec:`Sta scrivendo il piano`,writingSpecBare:`Sta scrivendo il piano`,writingFiles:`Sta scrivendo {{files}} file ({{names}}…)`,readingFiles:`Sta leggendo {{files}} file ({{names}}…)`,editingFiles:`Sta modificando {{files}} file ({{names}}…)`,delegating:`Passa il lavoro al {{target}}`,delegatingBare:`Passa il lavoro a uno specialista`,phase:{architect:`Progettazione della modifica (architetto)`,developer:`Implementazione della modifica (sviluppatore)`,verify:`Esecuzione dei comandi di verifica`,reviewer:`Revisione dell’implementazione (revisore)`,archive:`Archiviazione della modifica revisionata`,stopped:`Il motore si è fermato: {{target}}`,corrections:`Correzioni rinviate allo sviluppatore`,resumed:`Ripresa dell’esecuzione salvata`},check:{started:`Verifica di {{target}}`,passed:`Verifica superata: {{target}}`,failed:`Verifica fallita: {{target}}`,reused:`Riutilizzo del risultato verificato: {{target}}`,invalidated:`Risultato precedente invalidato: {{target}}`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-CNC7AqOf.js";var t=e({activity:()=>l,aiNote:()=>o,decision:()=>c,default:()=>d,emptyLive:()=>r,emptySettled:()=>i,modeLog:()=>`Log`,modeNarrated:()=>n,repeats:()=>u,step:()=>s,waiting:()=>a}),n=`Story`,r=`Nothing has happened yet.`,i=`No activity was recorded for this run.`,a={range:`Runs like this have taken {{low}}–{{high}} min (last {{count}})`,elapsed:`Running for {{minutes}} min`},o=`Built from what actually happened during the run.`,s={start:`Step {{step}}: {{title}}`,startRetry:`Step {{step}}: {{title}} — attempt {{iteration}}`,done:`Finished step {{step}}`,doneTimed:`Finished step {{step}} in {{seconds}}s`,failed:`Step {{step}} did not succeed`,interrupted:`Step {{step}} was interrupted before it finished`,doneTimedMin:`Finished step {{step}} in {{minutes}} min`,role:{work:`making the changes`,verify:`checking it works`,decide:`deciding whether it's done`,fix:`fixing what failed`},stalled:`Step {{step}} stalled — no activity for {{idleMinutes}} min, so the app stopped it`,startResume:`Step {{step}}: {{title}} — resuming after a stall`,providerLimit:`Step {{step}} stopped — the provider's usage limit was reached`,recovered:`Step {{step}} completed after resuming`},c={another:`Not done yet — going round again`,satisfied:`Goal met — moving on`},l={reading:`Reading {{target}}`,readingBare:`Reading the code`,editing:`Changing {{target}}`,editingBare:`Changing the code`,writing:`Writing {{target}}`,writingBare:`Writing new code`,searching:`Searching for {{target}}`,searchingBare:`Searching the code`,running:`Running {{target}}`,runningBare:`Running a command`,working:`Working on {{target}}`,workingBare:`Working`,exploring:`Looking through the code`,exploringBare:`Looking through the code`,testing:`Running the tests`,building:`Building the project`,typechecking:`Checking the types`,linting:`Checking code style`,installing:`Installing dependencies`,savingWork:`Saving the work`,checkingSpec:`Checking the spec`,bookkeeping:`Recording its own notes`,bookkeepingBare:`Recording its own notes`,writingSpec:`Writing the plan`,writingSpecBare:`Writing the plan`,writingFiles:`Writing {{files}} files ({{names}}…)`,readingFiles:`Reading {{files}} files ({{names}}…)`,editingFiles:`Changing {{files}} files ({{names}}…)`,delegating:`Handing off to the {{target}}`,delegatingBare:`Handing off to a specialist`,phase:{architect:`Designing the change (architect)`,developer:`Implementing the change (developer)`,verify:`Running the verification commands`,reviewer:`Reviewing the implementation (reviewer)`,archive:`Archiving the reviewed change`,stopped:`The runtime stopped: {{target}}`,corrections:`Sending corrections back to the developer`,resumed:`Resuming the saved execution`}},u=`×{{count}}`,d={modeNarrated:n,modeLog:`Log`,emptyLive:r,emptySettled:i,waiting:a,aiNote:o,step:s,decision:c,activity:l,repeats:u};export{t};
1
+ import{r as e}from"./rolldown-runtime-CNC7AqOf.js";var t=e({activity:()=>l,aiNote:()=>o,decision:()=>c,default:()=>d,emptyLive:()=>r,emptySettled:()=>i,modeLog:()=>`Log`,modeNarrated:()=>n,repeats:()=>u,step:()=>s,waiting:()=>a}),n=`Story`,r=`Nothing has happened yet.`,i=`No activity was recorded for this run.`,a={range:`Runs like this have taken {{low}}–{{high}} min (last {{count}})`,elapsed:`Running for {{minutes}} min`},o=`Built from what actually happened during the run.`,s={start:`Step {{step}}: {{title}}`,startRetry:`Step {{step}}: {{title}} — attempt {{iteration}}`,done:`Finished step {{step}}`,doneTimed:`Finished step {{step}} in {{seconds}}s`,failed:`Step {{step}} did not succeed`,interrupted:`Step {{step}} was interrupted before it finished`,doneTimedMin:`Finished step {{step}} in {{minutes}} min`,role:{work:`making the changes`,verify:`checking it works`,decide:`deciding whether it's done`,fix:`fixing what failed`},stalled:`Step {{step}} stalled — no activity for {{idleMinutes}} min, so the app stopped it`,startResume:`Step {{step}}: {{title}} — resuming after a stall`,providerLimit:`Step {{step}} stopped — the provider's usage limit was reached`,recovered:`Step {{step}} completed after resuming`},c={another:`Not done yet — going round again`,satisfied:`Goal met — moving on`},l={reading:`Reading {{target}}`,readingBare:`Reading the code`,editing:`Changing {{target}}`,editingBare:`Changing the code`,writing:`Writing {{target}}`,writingBare:`Writing new code`,searching:`Searching for {{target}}`,searchingBare:`Searching the code`,running:`Running {{target}}`,runningBare:`Running a command`,working:`Working on {{target}}`,workingBare:`Working`,exploring:`Looking through the code`,exploringBare:`Looking through the code`,testing:`Running the tests`,building:`Building the project`,typechecking:`Checking the types`,linting:`Checking code style`,installing:`Installing dependencies`,savingWork:`Saving the work`,checkingSpec:`Checking the spec`,bookkeeping:`Recording its own notes`,bookkeepingBare:`Recording its own notes`,writingSpec:`Writing the plan`,writingSpecBare:`Writing the plan`,writingFiles:`Writing {{files}} files ({{names}}…)`,readingFiles:`Reading {{files}} files ({{names}}…)`,editingFiles:`Changing {{files}} files ({{names}}…)`,delegating:`Handing off to the {{target}}`,delegatingBare:`Handing off to a specialist`,phase:{architect:`Designing the change (architect)`,developer:`Implementing the change (developer)`,verify:`Running the verification commands`,reviewer:`Reviewing the implementation (reviewer)`,archive:`Archiving the reviewed change`,stopped:`The runtime stopped: {{target}}`,corrections:`Sending corrections back to the developer`,resumed:`Resuming the saved execution`},check:{started:`Checking {{target}}`,passed:`Check passed: {{target}}`,failed:`Check failed: {{target}}`,reused:`Reusing verified result: {{target}}`,invalidated:`Previous result invalidated: {{target}}`}},u=`×{{count}}`,d={modeNarrated:n,modeLog:`Log`,emptyLive:r,emptySettled:i,waiting:a,aiNote:o,step:s,decision:c,activity:l,repeats:u};export{t};
@@ -1 +1 @@
1
- var e=`Récit`,t=`Journal`,n=`Rien ne s'est encore passé.`,r=`Aucune activité enregistrée pour cette exécution.`,i={range:`Les exécutions de ce type ont pris {{low}}–{{high}} min (dernières {{count}})`,elapsed:`En cours depuis {{minutes}} min`},a=`Construit à partir de ce qui s'est réellement passé pendant l'exécution.`,o={start:`Étape {{step}} : {{title}}`,startRetry:`Étape {{step}} : {{title}} — tentative {{iteration}}`,done:`Étape {{step}} terminée`,doneTimed:`Étape {{step}} terminée en {{seconds}} s`,failed:`L'étape {{step}} n'a pas abouti`,interrupted:`L'étape {{step}} a été interrompue avant la fin`,doneTimedMin:`Étape {{step}} terminée en {{minutes}} min`,role:{work:`réalisation des changements`,verify:`vérification du fonctionnement`,decide:`décision : est-ce terminé ?`,fix:`correction de ce qui a échoué`},stalled:`L'étape {{step}} s'est bloquée — aucune activité pendant {{idleMinutes}} min, l'app l'a donc arrêtée`,startResume:`Étape {{step}} : {{title}} — reprise après un blocage`,providerLimit:`Étape {{step}} arrêtée — la limite d'utilisation du fournisseur a été atteinte`,recovered:`Étape {{step}} terminée après reprise`},s={another:`Pas encore fini — nouveau tour`,satisfied:`Objectif atteint — on continue`},c={reading:`Lecture de {{target}}`,readingBare:`Lecture du code`,editing:`Modification de {{target}}`,editingBare:`Modification du code`,writing:`Écriture de {{target}}`,writingBare:`Écriture de nouveau code`,searching:`Recherche de {{target}}`,searchingBare:`Recherche dans le code`,running:`Exécution de {{target}}`,runningBare:`Exécution d'une commande`,working:`Travail sur {{target}}`,workingBare:`Travail en cours`,exploring:`Exploration du code`,exploringBare:`Exploration du code`,testing:`Exécution des tests`,building:`Compilation du projet`,typechecking:`Vérification des types`,linting:`Vérification du style`,installing:`Installation des dépendances`,savingWork:`Enregistrement du travail`,checkingSpec:`Vérification de la spec`,bookkeeping:`Prise de ses propres notes`,bookkeepingBare:`Prise de ses propres notes`,writingSpec:`Rédaction du plan`,writingSpecBare:`Rédaction du plan`,writingFiles:`Écriture de {{files}} fichiers ({{names}}…)`,readingFiles:`Lecture de {{files}} fichiers ({{names}}…)`,editingFiles:`Modification de {{files}} fichiers ({{names}}…)`,delegating:`Transmission au {{target}}`,delegatingBare:`Transmission à un spécialiste`,phase:{architect:`Conception du changement (architecte)`,developer:`Implémentation du changement (développeur)`,verify:`Exécution des commandes de vérification`,reviewer:`Relecture de l’implémentation (relecteur)`,archive:`Archivage du changement relu`,stopped:`Le moteur s’est arrêté : {{target}}`,corrections:`Renvoi des corrections au développeur`,resumed:`Reprise de l’exécution enregistrée`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
1
+ var e=`Récit`,t=`Journal`,n=`Rien ne s'est encore passé.`,r=`Aucune activité enregistrée pour cette exécution.`,i={range:`Les exécutions de ce type ont pris {{low}}–{{high}} min (dernières {{count}})`,elapsed:`En cours depuis {{minutes}} min`},a=`Construit à partir de ce qui s'est réellement passé pendant l'exécution.`,o={start:`Étape {{step}} : {{title}}`,startRetry:`Étape {{step}} : {{title}} — tentative {{iteration}}`,done:`Étape {{step}} terminée`,doneTimed:`Étape {{step}} terminée en {{seconds}} s`,failed:`L'étape {{step}} n'a pas abouti`,interrupted:`L'étape {{step}} a été interrompue avant la fin`,doneTimedMin:`Étape {{step}} terminée en {{minutes}} min`,role:{work:`réalisation des changements`,verify:`vérification du fonctionnement`,decide:`décision : est-ce terminé ?`,fix:`correction de ce qui a échoué`},stalled:`L'étape {{step}} s'est bloquée — aucune activité pendant {{idleMinutes}} min, l'app l'a donc arrêtée`,startResume:`Étape {{step}} : {{title}} — reprise après un blocage`,providerLimit:`Étape {{step}} arrêtée — la limite d'utilisation du fournisseur a été atteinte`,recovered:`Étape {{step}} terminée après reprise`},s={another:`Pas encore fini — nouveau tour`,satisfied:`Objectif atteint — on continue`},c={reading:`Lecture de {{target}}`,readingBare:`Lecture du code`,editing:`Modification de {{target}}`,editingBare:`Modification du code`,writing:`Écriture de {{target}}`,writingBare:`Écriture de nouveau code`,searching:`Recherche de {{target}}`,searchingBare:`Recherche dans le code`,running:`Exécution de {{target}}`,runningBare:`Exécution d'une commande`,working:`Travail sur {{target}}`,workingBare:`Travail en cours`,exploring:`Exploration du code`,exploringBare:`Exploration du code`,testing:`Exécution des tests`,building:`Compilation du projet`,typechecking:`Vérification des types`,linting:`Vérification du style`,installing:`Installation des dépendances`,savingWork:`Enregistrement du travail`,checkingSpec:`Vérification de la spec`,bookkeeping:`Prise de ses propres notes`,bookkeepingBare:`Prise de ses propres notes`,writingSpec:`Rédaction du plan`,writingSpecBare:`Rédaction du plan`,writingFiles:`Écriture de {{files}} fichiers ({{names}}…)`,readingFiles:`Lecture de {{files}} fichiers ({{names}}…)`,editingFiles:`Modification de {{files}} fichiers ({{names}}…)`,delegating:`Transmission au {{target}}`,delegatingBare:`Transmission à un spécialiste`,phase:{architect:`Conception du changement (architecte)`,developer:`Implémentation du changement (développeur)`,verify:`Exécution des commandes de vérification`,reviewer:`Relecture de l’implémentation (relecteur)`,archive:`Archivage du changement relu`,stopped:`Le moteur s’est arrêté : {{target}}`,corrections:`Renvoi des corrections au développeur`,resumed:`Reprise de l’exécution enregistrée`},check:{started:`Vérification de {{target}}`,passed:`Vérification réussie : {{target}}`,failed:`Vérification échouée : {{target}}`,reused:`Réutilisation du résultat vérifié : {{target}}`,invalidated:`Résultat précédent invalidé : {{target}}`}},l=`×{{count}}`,u={modeNarrated:e,modeLog:t,emptyLive:n,emptySettled:r,waiting:i,aiNote:a,step:o,decision:s,activity:c,repeats:l};export{c as activity,a as aiNote,s as decision,u as default,n as emptyLive,r as emptySettled,t as modeLog,e as modeNarrated,l as repeats,o as step,i as waiting};
@@ -1 +1 @@
1
- import{l as e}from"./useSharedWebSocket-DnxHj8jP.js";function t(e){return e?e.repositories?.length?e.repositories:[{id:`primary-${e.id}`,projectId:e.id,name:e.name,path:e.path,isPrimary:!0,kind:`git`,integrationBranch:null,addedAt:e.added_at}]:[]}function n(t,n){let r=`${e}/api/projects/${encodeURIComponent(t)}`;return n?`${r}/repositories/${encodeURIComponent(n)}`:r}export{n,t};
1
+ import{l as e}from"./useSharedWebSocket-D7hkZ3Ka.js";function t(e){return e?e.repositories?.length?e.repositories:[{id:`primary-${e.id}`,projectId:e.id,name:e.name,path:e.path,isPrimary:!0,kind:`git`,integrationBranch:null,addedAt:e.added_at}]:[]}function n(t,n){let r=`${e}/api/projects/${encodeURIComponent(t)}`;return n?`${r}/repositories/${encodeURIComponent(n)}`:r}export{n,t};
@@ -1 +1 @@
1
- import{h as e}from"./useSharedWebSocket-DnxHj8jP.js";import{t}from"./createLucideIcon-Bjbbp_KS.js";var n=t(`arrow-up-right`,[[`path`,{d:`M7 7h10v10`,key:`1tivn9`}],[`path`,{d:`M7 17 17 7`,key:`1vkiza`}]]),r={job:`analytics:surfaces.job`,"quick-spec":`analytics:surfaces.quickSpec`,"explore-spec":`analytics:surfaces.exploreSpec`,"ai-edit":`analytics:surfaces.aiEdit`,smash:`analytics:surfaces.smash`,"file-summary":`analytics:surfaces.fileSummary`,loop:`analytics:surfaces.loop`,"chat-sidebar":`analytics:surfaces.chatSidebar`,"spec-launcher":`analytics:surfaces.specLauncher`,proposal:`analytics:surfaces.proposal`,"agent-studio":`analytics:surfaces.agentStudio`,setup:`analytics:surfaces.setup`},i={bg:`bg-muted/40`,text:`text-muted-foreground`,ring:`ring-border/40`,dot:`bg-muted-foreground`},a={job:{bg:`bg-accent-info/15`,text:`text-accent-info`,ring:`ring-accent-info/40`,dot:`bg-accent-info`},"quick-spec":{bg:`bg-accent-secondary/15`,text:`text-accent-secondary`,ring:`ring-accent-secondary/40`,dot:`bg-accent-secondary`},"explore-spec":{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"ai-edit":{bg:`bg-accent-success/15`,text:`text-accent-success`,ring:`ring-accent-success/40`,dot:`bg-accent-success`},smash:{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"file-summary":{bg:`bg-accent-warning/15`,text:`text-accent-warning`,ring:`ring-accent-warning/40`,dot:`bg-accent-warning`},loop:{bg:`bg-accent-primary/15`,text:`text-accent-primary`,ring:`ring-accent-primary/40`,dot:`bg-accent-primary`},"chat-sidebar":{bg:`bg-accent-info/15`,text:`text-accent-info`,ring:`ring-accent-info/40`,dot:`bg-accent-info`},"spec-launcher":{bg:`bg-accent-secondary/15`,text:`text-accent-secondary`,ring:`ring-accent-secondary/40`,dot:`bg-accent-secondary`},proposal:{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"agent-studio":{bg:`bg-accent-success/15`,text:`text-accent-success`,ring:`ring-accent-success/40`,dot:`bg-accent-success`},setup:{bg:`bg-accent-primary/15`,text:`text-accent-primary`,ring:`ring-accent-primary/40`,dot:`bg-accent-primary`}};function o(e,t){return new Proxy(e,{get(e,n,r){return typeof n==`string`&&!(n in e)?t(n):Reflect.get(e,n,r)}})}var s=o(Object.defineProperties({},Object.fromEntries(Object.keys(r).map(t=>[t,{get:()=>e.t(r[t]),enumerable:!0}]))),e=>e),c=o(a,()=>i);export{s as n,n as r,c as t};
1
+ import{h as e}from"./useSharedWebSocket-D7hkZ3Ka.js";import{t}from"./createLucideIcon-Bjbbp_KS.js";var n=t(`arrow-up-right`,[[`path`,{d:`M7 7h10v10`,key:`1tivn9`}],[`path`,{d:`M7 17 17 7`,key:`1vkiza`}]]),r={job:`analytics:surfaces.job`,"quick-spec":`analytics:surfaces.quickSpec`,"explore-spec":`analytics:surfaces.exploreSpec`,"ai-edit":`analytics:surfaces.aiEdit`,smash:`analytics:surfaces.smash`,"file-summary":`analytics:surfaces.fileSummary`,loop:`analytics:surfaces.loop`,"chat-sidebar":`analytics:surfaces.chatSidebar`,"spec-launcher":`analytics:surfaces.specLauncher`,proposal:`analytics:surfaces.proposal`,"agent-studio":`analytics:surfaces.agentStudio`,setup:`analytics:surfaces.setup`},i={bg:`bg-muted/40`,text:`text-muted-foreground`,ring:`ring-border/40`,dot:`bg-muted-foreground`},a={job:{bg:`bg-accent-info/15`,text:`text-accent-info`,ring:`ring-accent-info/40`,dot:`bg-accent-info`},"quick-spec":{bg:`bg-accent-secondary/15`,text:`text-accent-secondary`,ring:`ring-accent-secondary/40`,dot:`bg-accent-secondary`},"explore-spec":{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"ai-edit":{bg:`bg-accent-success/15`,text:`text-accent-success`,ring:`ring-accent-success/40`,dot:`bg-accent-success`},smash:{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"file-summary":{bg:`bg-accent-warning/15`,text:`text-accent-warning`,ring:`ring-accent-warning/40`,dot:`bg-accent-warning`},loop:{bg:`bg-accent-primary/15`,text:`text-accent-primary`,ring:`ring-accent-primary/40`,dot:`bg-accent-primary`},"chat-sidebar":{bg:`bg-accent-info/15`,text:`text-accent-info`,ring:`ring-accent-info/40`,dot:`bg-accent-info`},"spec-launcher":{bg:`bg-accent-secondary/15`,text:`text-accent-secondary`,ring:`ring-accent-secondary/40`,dot:`bg-accent-secondary`},proposal:{bg:`bg-accent-highlight/15`,text:`text-accent-highlight`,ring:`ring-accent-highlight/40`,dot:`bg-accent-highlight`},"agent-studio":{bg:`bg-accent-success/15`,text:`text-accent-success`,ring:`ring-accent-success/40`,dot:`bg-accent-success`},setup:{bg:`bg-accent-primary/15`,text:`text-accent-primary`,ring:`ring-accent-primary/40`,dot:`bg-accent-primary`}};function o(e,t){return new Proxy(e,{get(e,n,r){return typeof n==`string`&&!(n in e)?t(n):Reflect.get(e,n,r)}})}var s=o(Object.defineProperties({},Object.fromEntries(Object.keys(r).map(t=>[t,{get:()=>e.t(r[t]),enumerable:!0}]))),e=>e),c=o(a,()=>i);export{s as n,n as r,c as t};
@@ -1 +1 @@
1
- import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{t as r}from"./react-dom-DiWzBDP9.js";import{h as i,l as a,r as o}from"./useSharedWebSocket-DnxHj8jP.js";var s=e(t(),1),c=e(r(),1);function l(e){if(!e||typeof document>`u`)return;let t=document.head||document.getElementsByTagName(`head`)[0],n=document.createElement(`style`);n.type=`text/css`,t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}var u=e=>{switch(e){case`success`:return p;case`info`:return h;case`warning`:return m;case`error`:return g;default:return null}},d=Array(12).fill(0),f=({visible:e,className:t})=>s.createElement(`div`,{className:[`sonner-loading-wrapper`,t].filter(Boolean).join(` `),"data-visible":e},s.createElement(`div`,{className:`sonner-spinner`},d.map((e,t)=>s.createElement(`div`,{className:`sonner-loading-bar`,key:`spinner-bar-${t}`})))),p=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z`,clipRule:`evenodd`})),m=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z`,clipRule:`evenodd`})),h=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z`,clipRule:`evenodd`})),g=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z`,clipRule:`evenodd`})),_=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`},s.createElement(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),s.createElement(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})),v=()=>{let[e,t]=s.useState(document.hidden);return s.useEffect(()=>{let e=()=>{t(document.hidden)};return document.addEventListener(`visibilitychange`,e),()=>window.removeEventListener(`visibilitychange`,e)},[]),e},y=1,b=new class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}),this.publish=e=>{this.subscribers.forEach(t=>t(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{let{message:t,...n}=e,r=typeof e?.id==`number`||e.id?.length>0?e.id:y++,i=this.toasts.find(e=>e.id===r),a=e.dismissible===void 0||e.dismissible;return this.dismissedToasts.has(r)&&this.dismissedToasts.delete(r),i?this.toasts=this.toasts.map(n=>n.id===r?(this.publish({...n,...e,id:r,title:t}),{...n,...e,id:r,dismissible:a,title:t}):n):this.addToast({title:t,...n,dismissible:a,id:r}),r},this.dismiss=e=>(e?(this.dismissedToasts.add(e),requestAnimationFrame(()=>this.subscribers.forEach(t=>t({id:e,dismiss:!0})))):this.toasts.forEach(e=>{this.subscribers.forEach(t=>t({id:e.id,dismiss:!0}))}),e),this.message=(e,t)=>this.create({...t,message:e}),this.error=(e,t)=>this.create({...t,message:e,type:`error`}),this.success=(e,t)=>this.create({...t,type:`success`,message:e}),this.info=(e,t)=>this.create({...t,type:`info`,message:e}),this.warning=(e,t)=>this.create({...t,type:`warning`,message:e}),this.loading=(e,t)=>this.create({...t,type:`loading`,message:e}),this.promise=(e,t)=>{if(!t)return;let n;t.loading!==void 0&&(n=this.create({...t,promise:e,type:`loading`,message:t.loading,description:typeof t.description==`function`?void 0:t.description}));let r=Promise.resolve(e instanceof Function?e():e),i=n!==void 0,a,o=r.then(async e=>{if(a=[`resolve`,e],s.isValidElement(e))i=!1,this.create({id:n,type:`default`,message:e});else if(S(e)&&!e.ok){i=!1;let r=typeof t.error==`function`?await t.error(`HTTP error! status: ${e.status}`):t.error,a=typeof t.description==`function`?await t.description(`HTTP error! status: ${e.status}`):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}else if(e instanceof Error){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}else if(t.success!==void 0){i=!1;let r=typeof t.success==`function`?await t.success(e):t.success,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`success`,description:a,...o})}}).catch(async e=>{if(a=[`reject`,e],t.error!==void 0){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}}).finally(()=>{i&&(this.dismiss(n),n=void 0),t.finally==null||t.finally.call(t)}),c=()=>new Promise((e,t)=>o.then(()=>a[0]===`reject`?t(a[1]):e(a[1])).catch(t));return typeof n!=`string`&&typeof n!=`number`?{unwrap:c}:Object.assign(n,{unwrap:c})},this.custom=(e,t)=>{let n=t?.id||y++;return this.create({jsx:e(n),id:n,...t}),n},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},x=(e,t)=>{let n=t?.id||y++;return b.addToast({title:e,...t,id:n}),n},S=e=>e&&typeof e==`object`&&`ok`in e&&typeof e.ok==`boolean`&&`status`in e&&typeof e.status==`number`,C=Object.assign(x,{success:b.success,info:b.info,warning:b.warning,error:b.error,custom:b.custom,message:b.message,promise:b.promise,dismiss:b.dismiss,loading:b.loading},{getHistory:()=>b.toasts,getToasts:()=>b.getActiveToasts()});l(`[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}`);function w(e){return e.label!==void 0}var T=3,E=`24px`,D=`16px`,O=4e3,k=356,A=14,j=45,ee=200;function M(...e){return e.filter(Boolean).join(` `)}function N(e){let[t,n]=e.split(`-`),r=[];return t&&r.push(t),n&&r.push(n),r}var P=e=>{let{invert:t,toast:n,unstyled:r,interacting:i,setHeights:a,visibleToasts:o,heights:c,index:l,toasts:d,expanded:p,removeToast:m,defaultRichColors:h,closeButton:g,style:y,cancelButtonStyle:b,actionButtonStyle:x,className:S=``,descriptionClassName:C=``,duration:T,position:E,gap:D,expandByDefault:k,classNames:A,icons:P,closeButtonAriaLabel:te=`Close toast`}=e,[F,I]=s.useState(null),[L,R]=s.useState(null),[z,B]=s.useState(!1),[V,H]=s.useState(!1),[U,W]=s.useState(!1),[ne,re]=s.useState(!1),[ie,G]=s.useState(!1),[ae,K]=s.useState(0),[oe,se]=s.useState(0),q=s.useRef(n.duration||T||O),ce=s.useRef(null),J=s.useRef(null),le=l===0,ue=l+1<=o,Y=n.type,X=n.dismissible!==!1,de=n.className||``,fe=n.descriptionClassName||``,pe=s.useMemo(()=>c.findIndex(e=>e.toastId===n.id)||0,[c,n.id]),me=s.useMemo(()=>n.closeButton??g,[n.closeButton,g]),he=s.useMemo(()=>n.duration||T||O,[n.duration,T]),ge=s.useRef(0),Z=s.useRef(0),_e=s.useRef(0),Q=s.useRef(null),[ve,ye]=E.split(`-`),be=s.useMemo(()=>c.reduce((e,t,n)=>n>=pe?e:e+t.height,0),[c,pe]),xe=v(),Se=n.invert||t,Ce=Y===`loading`;Z.current=s.useMemo(()=>pe*D+be,[pe,be]),s.useEffect(()=>{q.current=he},[he]),s.useEffect(()=>{B(!0)},[]),s.useEffect(()=>{let e=J.current;if(e){let t=e.getBoundingClientRect().height;return se(t),a(e=>[{toastId:n.id,height:t,position:n.position},...e]),()=>a(e=>e.filter(e=>e.toastId!==n.id))}},[a,n.id]),s.useLayoutEffect(()=>{if(!z)return;let e=J.current,t=e.style.height;e.style.height=`auto`;let r=e.getBoundingClientRect().height;e.style.height=t,se(r),a(e=>e.find(e=>e.toastId===n.id)?e.map(e=>e.toastId===n.id?{...e,height:r}:e):[{toastId:n.id,height:r,position:n.position},...e])},[z,n.title,n.description,a,n.id,n.jsx,n.action,n.cancel]);let $=s.useCallback(()=>{H(!0),K(Z.current),a(e=>e.filter(e=>e.toastId!==n.id)),setTimeout(()=>{m(n)},ee)},[n,m,a,Z]);s.useEffect(()=>{if(n.promise&&Y===`loading`||n.duration===1/0||n.type===`loading`)return;let e;return p||i||xe?(()=>{if(_e.current<ge.current){let e=new Date().getTime()-ge.current;q.current-=e}_e.current=new Date().getTime()})():q.current!==1/0&&(ge.current=new Date().getTime(),e=setTimeout(()=>{n.onAutoClose==null||n.onAutoClose.call(n,n),$()},q.current)),()=>clearTimeout(e)},[p,i,n,Y,xe,$]),s.useEffect(()=>{n.delete&&($(),n.onDismiss==null||n.onDismiss.call(n,n))},[$,n.delete]);function we(){return P?.loading?s.createElement(`div`,{className:M(A?.loader,n?.classNames?.loader,`sonner-loader`),"data-visible":Y===`loading`},P.loading):s.createElement(f,{className:M(A?.loader,n?.classNames?.loader),visible:Y===`loading`})}let Te=n.icon||P?.[Y]||u(Y);return s.createElement(`li`,{tabIndex:0,ref:J,className:M(S,de,A?.toast,n?.classNames?.toast,A?.default,A?.[Y],n?.classNames?.[Y]),"data-sonner-toast":``,"data-rich-colors":n.richColors??h,"data-styled":!(n.jsx||n.unstyled||r),"data-mounted":z,"data-promise":!!n.promise,"data-swiped":ie,"data-removed":V,"data-visible":ue,"data-y-position":ve,"data-x-position":ye,"data-index":l,"data-front":le,"data-swiping":U,"data-dismissible":X,"data-type":Y,"data-invert":Se,"data-swipe-out":ne,"data-swipe-direction":L,"data-expanded":!!(p||k&&z),"data-testid":n.testId,style:{"--index":l,"--toasts-before":l,"--z-index":d.length-l,"--offset":`${V?ae:Z.current}px`,"--initial-height":k?`auto`:`${oe}px`,...y,...n.style},onDragEnd:()=>{W(!1),I(null),Q.current=null},onPointerDown:e=>{e.button!==2&&(Ce||!X||(ce.current=new Date,K(Z.current),e.target.setPointerCapture(e.pointerId),e.target.tagName!==`BUTTON`&&(W(!0),Q.current={x:e.clientX,y:e.clientY})))},onPointerUp:()=>{if(ne||!X)return;Q.current=null;let e=Number(J.current?.style.getPropertyValue(`--swipe-amount-x`).replace(`px`,``)||0),t=Number(J.current?.style.getPropertyValue(`--swipe-amount-y`).replace(`px`,``)||0),r=new Date().getTime()-ce.current?.getTime(),i=F===`x`?e:t,a=Math.abs(i)/r;if(Math.abs(i)>=j||a>.11){K(Z.current),n.onDismiss==null||n.onDismiss.call(n,n),R(F===`x`?e>0?`right`:`left`:t>0?`down`:`up`),$(),re(!0);return}else{var o,s;(o=J.current)==null||o.style.setProperty(`--swipe-amount-x`,`0px`),(s=J.current)==null||s.style.setProperty(`--swipe-amount-y`,`0px`)}G(!1),W(!1),I(null)},onPointerMove:t=>{var n,r;if(!Q.current||!X||window.getSelection()?.toString().length>0)return;let i=t.clientY-Q.current.y,a=t.clientX-Q.current.x,o=e.swipeDirections??N(E);!F&&(Math.abs(a)>1||Math.abs(i)>1)&&I(Math.abs(a)>Math.abs(i)?`x`:`y`);let s={x:0,y:0},c=e=>1/(1.5+Math.abs(e)/20);if(F===`y`){if(o.includes(`top`)||o.includes(`bottom`))if(o.includes(`top`)&&i<0||o.includes(`bottom`)&&i>0)s.y=i;else{let e=i*c(i);s.y=Math.abs(e)<Math.abs(i)?e:i}}else if(F===`x`&&(o.includes(`left`)||o.includes(`right`)))if(o.includes(`left`)&&a<0||o.includes(`right`)&&a>0)s.x=a;else{let e=a*c(a);s.x=Math.abs(e)<Math.abs(a)?e:a}(Math.abs(s.x)>0||Math.abs(s.y)>0)&&G(!0),(n=J.current)==null||n.style.setProperty(`--swipe-amount-x`,`${s.x}px`),(r=J.current)==null||r.style.setProperty(`--swipe-amount-y`,`${s.y}px`)}},me&&!n.jsx&&Y!==`loading`?s.createElement(`button`,{"aria-label":te,"data-disabled":Ce,"data-close-button":!0,onClick:Ce||!X?()=>{}:()=>{$(),n.onDismiss==null||n.onDismiss.call(n,n)},className:M(A?.closeButton,n?.classNames?.closeButton)},P?.close??_):null,(Y||n.icon||n.promise)&&n.icon!==null&&(P?.[Y]!==null||n.icon)?s.createElement(`div`,{"data-icon":``,className:M(A?.icon,n?.classNames?.icon)},n.promise||n.type===`loading`&&!n.icon?n.icon||we():null,n.type===`loading`?null:Te):null,s.createElement(`div`,{"data-content":``,className:M(A?.content,n?.classNames?.content)},s.createElement(`div`,{"data-title":``,className:M(A?.title,n?.classNames?.title)},n.jsx?n.jsx:typeof n.title==`function`?n.title():n.title),n.description?s.createElement(`div`,{"data-description":``,className:M(C,fe,A?.description,n?.classNames?.description)},typeof n.description==`function`?n.description():n.description):null),s.isValidElement(n.cancel)?n.cancel:n.cancel&&w(n.cancel)?s.createElement(`button`,{"data-button":!0,"data-cancel":!0,style:n.cancelButtonStyle||b,onClick:e=>{w(n.cancel)&&X&&(n.cancel.onClick==null||n.cancel.onClick.call(n.cancel,e),$())},className:M(A?.cancelButton,n?.classNames?.cancelButton)},n.cancel.label):null,s.isValidElement(n.action)?n.action:n.action&&w(n.action)?s.createElement(`button`,{"data-button":!0,"data-action":!0,style:n.actionButtonStyle||x,onClick:e=>{w(n.action)&&(n.action.onClick==null||n.action.onClick.call(n.action,e),!e.defaultPrevented&&$())},className:M(A?.actionButton,n?.classNames?.actionButton)},n.action.label):null)};function te(){if(typeof window>`u`||typeof document>`u`)return`ltr`;let e=document.documentElement.getAttribute(`dir`);return e===`auto`||!e?window.getComputedStyle(document.documentElement).direction:e}function F(e,t){let n={};return[e,t].forEach((e,t)=>{let r=t===1,i=r?`--mobile-offset`:`--offset`,a=r?D:E;function o(e){[`top`,`right`,`bottom`,`left`].forEach(t=>{n[`${i}-${t}`]=typeof e==`number`?`${e}px`:e})}typeof e==`number`||typeof e==`string`?o(e):typeof e==`object`?[`top`,`right`,`bottom`,`left`].forEach(t=>{e[t]===void 0?n[`${i}-${t}`]=a:n[`${i}-${t}`]=typeof e[t]==`number`?`${e[t]}px`:e[t]}):o(a)}),n}var I=s.forwardRef(function(e,t){let{id:n,invert:r,position:i=`bottom-right`,hotkey:a=[`altKey`,`KeyT`],expand:o,closeButton:l,className:u,offset:d,mobileOffset:f,theme:p=`light`,richColors:m,duration:h,style:g,visibleToasts:_=T,toastOptions:v,dir:y=te(),gap:x=A,icons:S,containerAriaLabel:C=`Notifications`}=e,[w,E]=s.useState([]),D=s.useMemo(()=>n?w.filter(e=>e.toasterId===n):w.filter(e=>!e.toasterId),[w,n]),O=s.useMemo(()=>Array.from(new Set([i].concat(D.filter(e=>e.position).map(e=>e.position)))),[D,i]),[j,ee]=s.useState([]),[M,N]=s.useState(!1),[I,L]=s.useState(!1),[R,z]=s.useState(p===`system`?typeof window<`u`&&window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:p),B=s.useRef(null),V=a.join(`+`).replace(/Key/g,``).replace(/Digit/g,``),H=s.useRef(null),U=s.useRef(!1),W=s.useCallback(e=>{E(t=>(t.find(t=>t.id===e.id)?.delete||b.dismiss(e.id),t.filter(({id:t})=>t!==e.id)))},[]);return s.useEffect(()=>b.subscribe(e=>{if(e.dismiss){requestAnimationFrame(()=>{E(t=>t.map(t=>t.id===e.id?{...t,delete:!0}:t))});return}setTimeout(()=>{c.flushSync(()=>{E(t=>{let n=t.findIndex(t=>t.id===e.id);return n===-1?[e,...t]:[...t.slice(0,n),{...t[n],...e},...t.slice(n+1)]})})})}),[w]),s.useEffect(()=>{if(p!==`system`){z(p);return}if(p===`system`&&(window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?z(`dark`):z(`light`)),typeof window>`u`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`);try{e.addEventListener(`change`,({matches:e})=>{z(e?`dark`:`light`)})}catch{e.addListener(({matches:e})=>{try{z(e?`dark`:`light`)}catch(e){console.error(e)}})}},[p]),s.useEffect(()=>{w.length<=1&&N(!1)},[w]),s.useEffect(()=>{let e=e=>{if(a.every(t=>e[t]||e.code===t)){var t;N(!0),(t=B.current)==null||t.focus()}e.code===`Escape`&&(document.activeElement===B.current||B.current?.contains(document.activeElement))&&N(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[a]),s.useEffect(()=>{if(B.current)return()=>{H.current&&(H.current.focus({preventScroll:!0}),H.current=null,U.current=!1)}},[B.current]),s.createElement(`section`,{ref:t,"aria-label":`${C} ${V}`,tabIndex:-1,"aria-live":`polite`,"aria-relevant":`additions text`,"aria-atomic":`false`,suppressHydrationWarning:!0},O.map((t,n)=>{let[i,a]=t.split(`-`);return D.length?s.createElement(`ol`,{key:t,dir:y===`auto`?te():y,tabIndex:-1,ref:B,className:u,"data-sonner-toaster":!0,"data-sonner-theme":R,"data-y-position":i,"data-x-position":a,style:{"--front-toast-height":`${j[0]?.height||0}px`,"--width":`${k}px`,"--gap":`${x}px`,...g,...F(d,f)},onBlur:e=>{U.current&&!e.currentTarget.contains(e.relatedTarget)&&(U.current=!1,H.current&&=(H.current.focus({preventScroll:!0}),null))},onFocus:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||U.current||(U.current=!0,H.current=e.relatedTarget)},onMouseEnter:()=>N(!0),onMouseMove:()=>N(!0),onMouseLeave:()=>{I||N(!1)},onDragEnd:()=>N(!1),onPointerDown:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||L(!0)},onPointerUp:()=>L(!1)},D.filter(e=>!e.position&&n===0||e.position===t).map((n,i)=>s.createElement(P,{key:n.id,icons:S,index:i,toast:n,defaultRichColors:m,duration:v?.duration??h,className:v?.className,descriptionClassName:v?.descriptionClassName,invert:r,visibleToasts:_,closeButton:v?.closeButton??l,interacting:I,position:t,style:v?.style,unstyled:v?.unstyled,classNames:v?.classNames,cancelButtonStyle:v?.cancelButtonStyle,actionButtonStyle:v?.actionButtonStyle,closeButtonAriaLabel:v?.closeButtonAriaLabel,removeToast:W,toasts:D.filter(e=>e.position==n.position),heights:j.filter(e=>e.position==n.position),setHeights:ee,expandByDefault:o,gap:x,expanded:M,swipeDirections:e.swipeDirections}))):null}))}),L=null;function R(e){L=e}function z(){if(!L)throw Error(`getApiBase called with no active project — call setActiveProjectId first`);return`${a}/api/projects/${L}`}var B=new Map;function V(e,t){return`${e}:${t}`}function H(e){return(e instanceof Error?e.message:e==null?``:String(e)).trim()||`Request failed`}function U(e){if(!e)return;let t=`${e}:`;for(let e of B.keys())e.startsWith(t)&&B.delete(e)}function W({namespace:e,projectId:t,initialValue:n,fetcher:r,pollInterval:i=0}){let a=t?V(t,e):null,[o,c]=(0,s.useState)(()=>a&&B.has(a)?B.get(a):n),[l,u]=(0,s.useState)(()=>!a||!B.has(a)),[d,f]=(0,s.useState)(l),[p,m]=(0,s.useState)(null),h=(0,s.useRef)(r);h.current=r;let g=(0,s.useRef)(n);g.current=n;let _=(0,s.useRef)(a);_.current=a;let v=(0,s.useRef)(0),y=(0,s.useRef)(null),b=(0,s.useCallback)(async(e,t,n)=>{let r=++v.current;y.current?.abort();let i=new AbortController;y.current=i,n&&_.current===e&&(f(!0),m(null));try{let n=await h.current({projectId:t,signal:i.signal});if(i.signal.aborted||r!==v.current)return;B.set(e,n),_.current===e&&(c(n),m(null))}catch(t){if(i.signal.aborted||r!==v.current)return;_.current===e&&m(H(t))}finally{r===v.current&&(y.current===i&&(y.current=null),_.current===e&&(f(!1),u(!1)))}},[]);return(0,s.useEffect)(()=>{if(v.current+=1,y.current?.abort(),y.current=null,m(null),!a||!t){c(g.current),u(!0),f(!1);return}let e=B.has(a);e?(c(B.get(a)),u(!1),f(!1)):(c(g.current),u(!0),f(!0)),b(a,t,!e);let n;return i>0&&(n=setInterval(()=>{b(a,t,!1)},i)),()=>{v.current+=1,y.current?.abort(),y.current=null,n&&clearInterval(n)}},[a,t,i,b]),{data:o,isLoading:d,isFirstLoad:l,error:p,refresh:(0,s.useCallback)(async()=>{!a||!t||await b(a,t,!0)},[a,t,b])}}var ne=n();function re(e){return e.providers&&e.providers.length>0?e.providers:[e.provider]}var ie=(0,s.createContext)(null),G=`specrails-desktop:activeProjectId`;function ae(e){try{e?localStorage.setItem(G,e):localStorage.removeItem(G)}catch{}}function K(){try{return localStorage.getItem(G)}catch{return null}}function oe({children:e,isolated:t=!1}){let n=(0,s.useCallback)(e=>{t||ae(e)},[t]),[r,c]=(0,s.useState)([]),[l,u]=(0,s.useState)(null),[d,f]=(0,s.useState)(!0),[p,m]=(0,s.useState)(!1),h=(0,s.useRef)(null),g=(0,s.useRef)(new Set),_=(0,s.useRef)(!1),v=(0,s.useRef)(0),y=(0,s.useRef)(null),b=(0,s.useRef)(null),x=(0,s.useRef)(0),S=(0,s.useCallback)(e=>{n(e),R(e),u(t=>(t!==null&&t!==e&&(h.current&&clearTimeout(h.current),m(!0),h.current=setTimeout(()=>m(!1),400)),e))},[n]),{registerHandler:w,unregisterHandler:T,connectionStatus:E}=o(),D=(0,s.useCallback)(async function e(){if(!_.current||y.current)return;b.current&&clearTimeout(b.current);let r=new AbortController;y.current=r;let i=v.current,o=setTimeout(()=>r.abort(),8e3);try{let e=await fetch(`${a}/api/projects`,{signal:r.signal});if(!e.ok)throw Error(`HTTP ${e.status}`);let o=await e.json();if(!Array.isArray(o.projects))throw Error(`Invalid project snapshot`);if(!_.current||r.signal.aborted||i!==v.current)return;c(o.projects);let s=o.projects;u(e=>{if(e&&s.some(t=>t.id===e))return e;let r=t?null:K(),i=r&&s.some(e=>e.id===r)?r:null;return n(i),R(i),i}),x.current=0,f(!1)}catch{if(_.current&&i===v.current){let t=Math.min(500*2**Math.min(x.current++,5),1e4);b.current=setTimeout(()=>{e()},t)}}finally{clearTimeout(o),y.current===r&&(y.current=null)}},[t,n]);(0,s.useEffect)(()=>{_.current=!0,D();let e=()=>{D()};return window.addEventListener(`online`,e),window.addEventListener(`focus`,e),()=>{_.current=!1,v.current++,y.current?.abort(),y.current=null,b.current&&clearTimeout(b.current),h.current&&clearTimeout(h.current),window.removeEventListener(`online`,e),window.removeEventListener(`focus`,e)}},[D]);let O=(0,s.useRef)(E),k=(0,s.useRef)(E===`connected`);(0,s.useEffect)(()=>{E===`connected`&&(k.current&&O.current!==`connected`&&D(),k.current=!0),O.current=E},[E,D]);let A=(0,s.useCallback)(e=>{if(!e||typeof e!=`object`)return;let r=e;if(typeof r.type==`string`){if(r.type===`desktop.projects`){if(!Array.isArray(r.projects))return;v.current++,x.current=0,b.current&&clearTimeout(b.current);let e=r.projects;c(e),u(r=>{let i;if(r&&e.find(e=>e.id===r))i=r;else{let n=t?null:K();i=n&&e.find(e=>e.id===n)?n:!t&&e.length>0?e[0].id:null}return n(i),R(i),i}),f(!1)}else if(r.type===`desktop.project_added`){let e=r.project;if(!e||typeof e.id!=`string`)return;v.current++,c(t=>t.find(t=>t.id===e.id)?t:[...t,e]),g.current.has(e.id)?g.current.delete(e.id):t||(C.success(i.t(`nav:projects.added`,{name:e.name})),S(e.id))}else if(r.type===`providers.detected_changed`)D();else if(r.type===`desktop.project_removed`){let e=r.projectId;if(typeof e!=`string`)return;v.current++,t||C.success(i.t(`nav:projects.removed`)),U(e),c(t=>t.filter(t=>t.id!==e)),u(t=>t===e?(n(null),R(null),null):t)}}},[D,S,t,n]);(0,s.useLayoutEffect)(()=>(w(`desktop`,A),()=>T(`desktop`)),[A,w,T]);let j=(0,s.useRef)(0);(0,s.useEffect)(()=>{let e=()=>{let e=Date.now();e-j.current<6e4||(j.current=e,fetch(`${a}/api/providers/detected?refresh=1`).catch(()=>{}))};return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[]);let ee=(0,s.useCallback)(async(e,t,n,r)=>{try{let i={path:e};n&&n.length>0&&(i.providers=n),t&&(i.name=t),r?.length&&(i.repositories=r);let a=await fetch(`/api/projects`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)});if(!a.ok){let e=await a.json();throw Error(e.error??`HTTP ${a.status}`)}let o=await a.json();return g.current.add(o.project.id),v.current++,c(e=>e.find(e=>e.id===o.project.id)?e:[...e,o.project]),S(o.project.id),o}catch(e){throw console.error(`[useDesktop] addProject error:`,e),e}},[S]),M=(0,s.useCallback)(async e=>{try{let t=await fetch(`${a}/api/projects/${e}`,{method:`DELETE`});if(!t.ok){let e=await t.json();throw Error(e.error??`HTTP ${t.status}`)}U(e),v.current++,c(t=>t.filter(t=>t.id!==e)),u(t=>t===e?(n(null),R(null),null):t)}catch(e){throw console.error(`[useDesktop] removeProject error:`,e),e}},[n]),N=(0,s.useMemo)(()=>({projects:r,activeProjectId:l,setActiveProjectId:S,addProject:ee,removeProject:M,refreshProjects:D,isLoading:d,isSwitchingProject:p}),[r,l,S,ee,M,D,d,p]);return(0,ne.jsx)(ie.Provider,{value:N,children:e})}var se={projects:[],activeProjectId:null,setActiveProjectId:()=>{},addProject:async()=>null,removeProject:async()=>{},refreshProjects:async()=>{},isLoading:!1,isSwitchingProject:!1};function q(){return(0,s.useContext)(ie)??se}export{z as a,W as i,re as n,I as o,q as r,C as s,oe as t};
1
+ import{a as e}from"./rolldown-runtime-CNC7AqOf.js";import{n as t,t as n}from"./jsx-runtime-zu2_FqZY.js";import{t as r}from"./react-dom-DiWzBDP9.js";import{h as i,l as a,r as o}from"./useSharedWebSocket-D7hkZ3Ka.js";var s=e(t(),1),c=e(r(),1);function l(e){if(!e||typeof document>`u`)return;let t=document.head||document.getElementsByTagName(`head`)[0],n=document.createElement(`style`);n.type=`text/css`,t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}var u=e=>{switch(e){case`success`:return p;case`info`:return h;case`warning`:return m;case`error`:return g;default:return null}},d=Array(12).fill(0),f=({visible:e,className:t})=>s.createElement(`div`,{className:[`sonner-loading-wrapper`,t].filter(Boolean).join(` `),"data-visible":e},s.createElement(`div`,{className:`sonner-spinner`},d.map((e,t)=>s.createElement(`div`,{className:`sonner-loading-bar`,key:`spinner-bar-${t}`})))),p=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z`,clipRule:`evenodd`})),m=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z`,clipRule:`evenodd`})),h=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z`,clipRule:`evenodd`})),g=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`},s.createElement(`path`,{fillRule:`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z`,clipRule:`evenodd`})),_=s.createElement(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`},s.createElement(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),s.createElement(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})),v=()=>{let[e,t]=s.useState(document.hidden);return s.useEffect(()=>{let e=()=>{t(document.hidden)};return document.addEventListener(`visibilitychange`,e),()=>window.removeEventListener(`visibilitychange`,e)},[]),e},y=1,b=new class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}),this.publish=e=>{this.subscribers.forEach(t=>t(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{let{message:t,...n}=e,r=typeof e?.id==`number`||e.id?.length>0?e.id:y++,i=this.toasts.find(e=>e.id===r),a=e.dismissible===void 0||e.dismissible;return this.dismissedToasts.has(r)&&this.dismissedToasts.delete(r),i?this.toasts=this.toasts.map(n=>n.id===r?(this.publish({...n,...e,id:r,title:t}),{...n,...e,id:r,dismissible:a,title:t}):n):this.addToast({title:t,...n,dismissible:a,id:r}),r},this.dismiss=e=>(e?(this.dismissedToasts.add(e),requestAnimationFrame(()=>this.subscribers.forEach(t=>t({id:e,dismiss:!0})))):this.toasts.forEach(e=>{this.subscribers.forEach(t=>t({id:e.id,dismiss:!0}))}),e),this.message=(e,t)=>this.create({...t,message:e}),this.error=(e,t)=>this.create({...t,message:e,type:`error`}),this.success=(e,t)=>this.create({...t,type:`success`,message:e}),this.info=(e,t)=>this.create({...t,type:`info`,message:e}),this.warning=(e,t)=>this.create({...t,type:`warning`,message:e}),this.loading=(e,t)=>this.create({...t,type:`loading`,message:e}),this.promise=(e,t)=>{if(!t)return;let n;t.loading!==void 0&&(n=this.create({...t,promise:e,type:`loading`,message:t.loading,description:typeof t.description==`function`?void 0:t.description}));let r=Promise.resolve(e instanceof Function?e():e),i=n!==void 0,a,o=r.then(async e=>{if(a=[`resolve`,e],s.isValidElement(e))i=!1,this.create({id:n,type:`default`,message:e});else if(S(e)&&!e.ok){i=!1;let r=typeof t.error==`function`?await t.error(`HTTP error! status: ${e.status}`):t.error,a=typeof t.description==`function`?await t.description(`HTTP error! status: ${e.status}`):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}else if(e instanceof Error){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}else if(t.success!==void 0){i=!1;let r=typeof t.success==`function`?await t.success(e):t.success,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`success`,description:a,...o})}}).catch(async e=>{if(a=[`reject`,e],t.error!==void 0){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!s.isValidElement(r)?r:{message:r};this.create({id:n,type:`error`,description:a,...o})}}).finally(()=>{i&&(this.dismiss(n),n=void 0),t.finally==null||t.finally.call(t)}),c=()=>new Promise((e,t)=>o.then(()=>a[0]===`reject`?t(a[1]):e(a[1])).catch(t));return typeof n!=`string`&&typeof n!=`number`?{unwrap:c}:Object.assign(n,{unwrap:c})},this.custom=(e,t)=>{let n=t?.id||y++;return this.create({jsx:e(n),id:n,...t}),n},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},x=(e,t)=>{let n=t?.id||y++;return b.addToast({title:e,...t,id:n}),n},S=e=>e&&typeof e==`object`&&`ok`in e&&typeof e.ok==`boolean`&&`status`in e&&typeof e.status==`number`,C=Object.assign(x,{success:b.success,info:b.info,warning:b.warning,error:b.error,custom:b.custom,message:b.message,promise:b.promise,dismiss:b.dismiss,loading:b.loading},{getHistory:()=>b.toasts,getToasts:()=>b.getActiveToasts()});l(`[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}`);function w(e){return e.label!==void 0}var T=3,E=`24px`,D=`16px`,O=4e3,k=356,A=14,j=45,ee=200;function M(...e){return e.filter(Boolean).join(` `)}function N(e){let[t,n]=e.split(`-`),r=[];return t&&r.push(t),n&&r.push(n),r}var P=e=>{let{invert:t,toast:n,unstyled:r,interacting:i,setHeights:a,visibleToasts:o,heights:c,index:l,toasts:d,expanded:p,removeToast:m,defaultRichColors:h,closeButton:g,style:y,cancelButtonStyle:b,actionButtonStyle:x,className:S=``,descriptionClassName:C=``,duration:T,position:E,gap:D,expandByDefault:k,classNames:A,icons:P,closeButtonAriaLabel:te=`Close toast`}=e,[F,I]=s.useState(null),[L,R]=s.useState(null),[z,B]=s.useState(!1),[V,H]=s.useState(!1),[U,W]=s.useState(!1),[ne,re]=s.useState(!1),[ie,G]=s.useState(!1),[ae,K]=s.useState(0),[oe,se]=s.useState(0),q=s.useRef(n.duration||T||O),ce=s.useRef(null),J=s.useRef(null),le=l===0,ue=l+1<=o,Y=n.type,X=n.dismissible!==!1,de=n.className||``,fe=n.descriptionClassName||``,pe=s.useMemo(()=>c.findIndex(e=>e.toastId===n.id)||0,[c,n.id]),me=s.useMemo(()=>n.closeButton??g,[n.closeButton,g]),he=s.useMemo(()=>n.duration||T||O,[n.duration,T]),ge=s.useRef(0),Z=s.useRef(0),_e=s.useRef(0),Q=s.useRef(null),[ve,ye]=E.split(`-`),be=s.useMemo(()=>c.reduce((e,t,n)=>n>=pe?e:e+t.height,0),[c,pe]),xe=v(),Se=n.invert||t,Ce=Y===`loading`;Z.current=s.useMemo(()=>pe*D+be,[pe,be]),s.useEffect(()=>{q.current=he},[he]),s.useEffect(()=>{B(!0)},[]),s.useEffect(()=>{let e=J.current;if(e){let t=e.getBoundingClientRect().height;return se(t),a(e=>[{toastId:n.id,height:t,position:n.position},...e]),()=>a(e=>e.filter(e=>e.toastId!==n.id))}},[a,n.id]),s.useLayoutEffect(()=>{if(!z)return;let e=J.current,t=e.style.height;e.style.height=`auto`;let r=e.getBoundingClientRect().height;e.style.height=t,se(r),a(e=>e.find(e=>e.toastId===n.id)?e.map(e=>e.toastId===n.id?{...e,height:r}:e):[{toastId:n.id,height:r,position:n.position},...e])},[z,n.title,n.description,a,n.id,n.jsx,n.action,n.cancel]);let $=s.useCallback(()=>{H(!0),K(Z.current),a(e=>e.filter(e=>e.toastId!==n.id)),setTimeout(()=>{m(n)},ee)},[n,m,a,Z]);s.useEffect(()=>{if(n.promise&&Y===`loading`||n.duration===1/0||n.type===`loading`)return;let e;return p||i||xe?(()=>{if(_e.current<ge.current){let e=new Date().getTime()-ge.current;q.current-=e}_e.current=new Date().getTime()})():q.current!==1/0&&(ge.current=new Date().getTime(),e=setTimeout(()=>{n.onAutoClose==null||n.onAutoClose.call(n,n),$()},q.current)),()=>clearTimeout(e)},[p,i,n,Y,xe,$]),s.useEffect(()=>{n.delete&&($(),n.onDismiss==null||n.onDismiss.call(n,n))},[$,n.delete]);function we(){return P?.loading?s.createElement(`div`,{className:M(A?.loader,n?.classNames?.loader,`sonner-loader`),"data-visible":Y===`loading`},P.loading):s.createElement(f,{className:M(A?.loader,n?.classNames?.loader),visible:Y===`loading`})}let Te=n.icon||P?.[Y]||u(Y);return s.createElement(`li`,{tabIndex:0,ref:J,className:M(S,de,A?.toast,n?.classNames?.toast,A?.default,A?.[Y],n?.classNames?.[Y]),"data-sonner-toast":``,"data-rich-colors":n.richColors??h,"data-styled":!(n.jsx||n.unstyled||r),"data-mounted":z,"data-promise":!!n.promise,"data-swiped":ie,"data-removed":V,"data-visible":ue,"data-y-position":ve,"data-x-position":ye,"data-index":l,"data-front":le,"data-swiping":U,"data-dismissible":X,"data-type":Y,"data-invert":Se,"data-swipe-out":ne,"data-swipe-direction":L,"data-expanded":!!(p||k&&z),"data-testid":n.testId,style:{"--index":l,"--toasts-before":l,"--z-index":d.length-l,"--offset":`${V?ae:Z.current}px`,"--initial-height":k?`auto`:`${oe}px`,...y,...n.style},onDragEnd:()=>{W(!1),I(null),Q.current=null},onPointerDown:e=>{e.button!==2&&(Ce||!X||(ce.current=new Date,K(Z.current),e.target.setPointerCapture(e.pointerId),e.target.tagName!==`BUTTON`&&(W(!0),Q.current={x:e.clientX,y:e.clientY})))},onPointerUp:()=>{if(ne||!X)return;Q.current=null;let e=Number(J.current?.style.getPropertyValue(`--swipe-amount-x`).replace(`px`,``)||0),t=Number(J.current?.style.getPropertyValue(`--swipe-amount-y`).replace(`px`,``)||0),r=new Date().getTime()-ce.current?.getTime(),i=F===`x`?e:t,a=Math.abs(i)/r;if(Math.abs(i)>=j||a>.11){K(Z.current),n.onDismiss==null||n.onDismiss.call(n,n),R(F===`x`?e>0?`right`:`left`:t>0?`down`:`up`),$(),re(!0);return}else{var o,s;(o=J.current)==null||o.style.setProperty(`--swipe-amount-x`,`0px`),(s=J.current)==null||s.style.setProperty(`--swipe-amount-y`,`0px`)}G(!1),W(!1),I(null)},onPointerMove:t=>{var n,r;if(!Q.current||!X||window.getSelection()?.toString().length>0)return;let i=t.clientY-Q.current.y,a=t.clientX-Q.current.x,o=e.swipeDirections??N(E);!F&&(Math.abs(a)>1||Math.abs(i)>1)&&I(Math.abs(a)>Math.abs(i)?`x`:`y`);let s={x:0,y:0},c=e=>1/(1.5+Math.abs(e)/20);if(F===`y`){if(o.includes(`top`)||o.includes(`bottom`))if(o.includes(`top`)&&i<0||o.includes(`bottom`)&&i>0)s.y=i;else{let e=i*c(i);s.y=Math.abs(e)<Math.abs(i)?e:i}}else if(F===`x`&&(o.includes(`left`)||o.includes(`right`)))if(o.includes(`left`)&&a<0||o.includes(`right`)&&a>0)s.x=a;else{let e=a*c(a);s.x=Math.abs(e)<Math.abs(a)?e:a}(Math.abs(s.x)>0||Math.abs(s.y)>0)&&G(!0),(n=J.current)==null||n.style.setProperty(`--swipe-amount-x`,`${s.x}px`),(r=J.current)==null||r.style.setProperty(`--swipe-amount-y`,`${s.y}px`)}},me&&!n.jsx&&Y!==`loading`?s.createElement(`button`,{"aria-label":te,"data-disabled":Ce,"data-close-button":!0,onClick:Ce||!X?()=>{}:()=>{$(),n.onDismiss==null||n.onDismiss.call(n,n)},className:M(A?.closeButton,n?.classNames?.closeButton)},P?.close??_):null,(Y||n.icon||n.promise)&&n.icon!==null&&(P?.[Y]!==null||n.icon)?s.createElement(`div`,{"data-icon":``,className:M(A?.icon,n?.classNames?.icon)},n.promise||n.type===`loading`&&!n.icon?n.icon||we():null,n.type===`loading`?null:Te):null,s.createElement(`div`,{"data-content":``,className:M(A?.content,n?.classNames?.content)},s.createElement(`div`,{"data-title":``,className:M(A?.title,n?.classNames?.title)},n.jsx?n.jsx:typeof n.title==`function`?n.title():n.title),n.description?s.createElement(`div`,{"data-description":``,className:M(C,fe,A?.description,n?.classNames?.description)},typeof n.description==`function`?n.description():n.description):null),s.isValidElement(n.cancel)?n.cancel:n.cancel&&w(n.cancel)?s.createElement(`button`,{"data-button":!0,"data-cancel":!0,style:n.cancelButtonStyle||b,onClick:e=>{w(n.cancel)&&X&&(n.cancel.onClick==null||n.cancel.onClick.call(n.cancel,e),$())},className:M(A?.cancelButton,n?.classNames?.cancelButton)},n.cancel.label):null,s.isValidElement(n.action)?n.action:n.action&&w(n.action)?s.createElement(`button`,{"data-button":!0,"data-action":!0,style:n.actionButtonStyle||x,onClick:e=>{w(n.action)&&(n.action.onClick==null||n.action.onClick.call(n.action,e),!e.defaultPrevented&&$())},className:M(A?.actionButton,n?.classNames?.actionButton)},n.action.label):null)};function te(){if(typeof window>`u`||typeof document>`u`)return`ltr`;let e=document.documentElement.getAttribute(`dir`);return e===`auto`||!e?window.getComputedStyle(document.documentElement).direction:e}function F(e,t){let n={};return[e,t].forEach((e,t)=>{let r=t===1,i=r?`--mobile-offset`:`--offset`,a=r?D:E;function o(e){[`top`,`right`,`bottom`,`left`].forEach(t=>{n[`${i}-${t}`]=typeof e==`number`?`${e}px`:e})}typeof e==`number`||typeof e==`string`?o(e):typeof e==`object`?[`top`,`right`,`bottom`,`left`].forEach(t=>{e[t]===void 0?n[`${i}-${t}`]=a:n[`${i}-${t}`]=typeof e[t]==`number`?`${e[t]}px`:e[t]}):o(a)}),n}var I=s.forwardRef(function(e,t){let{id:n,invert:r,position:i=`bottom-right`,hotkey:a=[`altKey`,`KeyT`],expand:o,closeButton:l,className:u,offset:d,mobileOffset:f,theme:p=`light`,richColors:m,duration:h,style:g,visibleToasts:_=T,toastOptions:v,dir:y=te(),gap:x=A,icons:S,containerAriaLabel:C=`Notifications`}=e,[w,E]=s.useState([]),D=s.useMemo(()=>n?w.filter(e=>e.toasterId===n):w.filter(e=>!e.toasterId),[w,n]),O=s.useMemo(()=>Array.from(new Set([i].concat(D.filter(e=>e.position).map(e=>e.position)))),[D,i]),[j,ee]=s.useState([]),[M,N]=s.useState(!1),[I,L]=s.useState(!1),[R,z]=s.useState(p===`system`?typeof window<`u`&&window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:p),B=s.useRef(null),V=a.join(`+`).replace(/Key/g,``).replace(/Digit/g,``),H=s.useRef(null),U=s.useRef(!1),W=s.useCallback(e=>{E(t=>(t.find(t=>t.id===e.id)?.delete||b.dismiss(e.id),t.filter(({id:t})=>t!==e.id)))},[]);return s.useEffect(()=>b.subscribe(e=>{if(e.dismiss){requestAnimationFrame(()=>{E(t=>t.map(t=>t.id===e.id?{...t,delete:!0}:t))});return}setTimeout(()=>{c.flushSync(()=>{E(t=>{let n=t.findIndex(t=>t.id===e.id);return n===-1?[e,...t]:[...t.slice(0,n),{...t[n],...e},...t.slice(n+1)]})})})}),[w]),s.useEffect(()=>{if(p!==`system`){z(p);return}if(p===`system`&&(window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?z(`dark`):z(`light`)),typeof window>`u`)return;let e=window.matchMedia(`(prefers-color-scheme: dark)`);try{e.addEventListener(`change`,({matches:e})=>{z(e?`dark`:`light`)})}catch{e.addListener(({matches:e})=>{try{z(e?`dark`:`light`)}catch(e){console.error(e)}})}},[p]),s.useEffect(()=>{w.length<=1&&N(!1)},[w]),s.useEffect(()=>{let e=e=>{if(a.every(t=>e[t]||e.code===t)){var t;N(!0),(t=B.current)==null||t.focus()}e.code===`Escape`&&(document.activeElement===B.current||B.current?.contains(document.activeElement))&&N(!1)};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[a]),s.useEffect(()=>{if(B.current)return()=>{H.current&&(H.current.focus({preventScroll:!0}),H.current=null,U.current=!1)}},[B.current]),s.createElement(`section`,{ref:t,"aria-label":`${C} ${V}`,tabIndex:-1,"aria-live":`polite`,"aria-relevant":`additions text`,"aria-atomic":`false`,suppressHydrationWarning:!0},O.map((t,n)=>{let[i,a]=t.split(`-`);return D.length?s.createElement(`ol`,{key:t,dir:y===`auto`?te():y,tabIndex:-1,ref:B,className:u,"data-sonner-toaster":!0,"data-sonner-theme":R,"data-y-position":i,"data-x-position":a,style:{"--front-toast-height":`${j[0]?.height||0}px`,"--width":`${k}px`,"--gap":`${x}px`,...g,...F(d,f)},onBlur:e=>{U.current&&!e.currentTarget.contains(e.relatedTarget)&&(U.current=!1,H.current&&=(H.current.focus({preventScroll:!0}),null))},onFocus:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||U.current||(U.current=!0,H.current=e.relatedTarget)},onMouseEnter:()=>N(!0),onMouseMove:()=>N(!0),onMouseLeave:()=>{I||N(!1)},onDragEnd:()=>N(!1),onPointerDown:e=>{e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||L(!0)},onPointerUp:()=>L(!1)},D.filter(e=>!e.position&&n===0||e.position===t).map((n,i)=>s.createElement(P,{key:n.id,icons:S,index:i,toast:n,defaultRichColors:m,duration:v?.duration??h,className:v?.className,descriptionClassName:v?.descriptionClassName,invert:r,visibleToasts:_,closeButton:v?.closeButton??l,interacting:I,position:t,style:v?.style,unstyled:v?.unstyled,classNames:v?.classNames,cancelButtonStyle:v?.cancelButtonStyle,actionButtonStyle:v?.actionButtonStyle,closeButtonAriaLabel:v?.closeButtonAriaLabel,removeToast:W,toasts:D.filter(e=>e.position==n.position),heights:j.filter(e=>e.position==n.position),setHeights:ee,expandByDefault:o,gap:x,expanded:M,swipeDirections:e.swipeDirections}))):null}))}),L=null;function R(e){L=e}function z(){if(!L)throw Error(`getApiBase called with no active project — call setActiveProjectId first`);return`${a}/api/projects/${L}`}var B=new Map;function V(e,t){return`${e}:${t}`}function H(e){return(e instanceof Error?e.message:e==null?``:String(e)).trim()||`Request failed`}function U(e){if(!e)return;let t=`${e}:`;for(let e of B.keys())e.startsWith(t)&&B.delete(e)}function W({namespace:e,projectId:t,initialValue:n,fetcher:r,pollInterval:i=0}){let a=t?V(t,e):null,[o,c]=(0,s.useState)(()=>a&&B.has(a)?B.get(a):n),[l,u]=(0,s.useState)(()=>!a||!B.has(a)),[d,f]=(0,s.useState)(l),[p,m]=(0,s.useState)(null),h=(0,s.useRef)(r);h.current=r;let g=(0,s.useRef)(n);g.current=n;let _=(0,s.useRef)(a);_.current=a;let v=(0,s.useRef)(0),y=(0,s.useRef)(null),b=(0,s.useCallback)(async(e,t,n)=>{let r=++v.current;y.current?.abort();let i=new AbortController;y.current=i,n&&_.current===e&&(f(!0),m(null));try{let n=await h.current({projectId:t,signal:i.signal});if(i.signal.aborted||r!==v.current)return;B.set(e,n),_.current===e&&(c(n),m(null))}catch(t){if(i.signal.aborted||r!==v.current)return;_.current===e&&m(H(t))}finally{r===v.current&&(y.current===i&&(y.current=null),_.current===e&&(f(!1),u(!1)))}},[]);return(0,s.useEffect)(()=>{if(v.current+=1,y.current?.abort(),y.current=null,m(null),!a||!t){c(g.current),u(!0),f(!1);return}let e=B.has(a);e?(c(B.get(a)),u(!1),f(!1)):(c(g.current),u(!0),f(!0)),b(a,t,!e);let n;return i>0&&(n=setInterval(()=>{b(a,t,!1)},i)),()=>{v.current+=1,y.current?.abort(),y.current=null,n&&clearInterval(n)}},[a,t,i,b]),{data:o,isLoading:d,isFirstLoad:l,error:p,refresh:(0,s.useCallback)(async()=>{!a||!t||await b(a,t,!0)},[a,t,b])}}var ne=n();function re(e){return e.providers&&e.providers.length>0?e.providers:[e.provider]}var ie=(0,s.createContext)(null),G=`specrails-desktop:activeProjectId`;function ae(e){try{e?localStorage.setItem(G,e):localStorage.removeItem(G)}catch{}}function K(){try{return localStorage.getItem(G)}catch{return null}}function oe({children:e,isolated:t=!1}){let n=(0,s.useCallback)(e=>{t||ae(e)},[t]),[r,c]=(0,s.useState)([]),[l,u]=(0,s.useState)(null),[d,f]=(0,s.useState)(!0),[p,m]=(0,s.useState)(!1),h=(0,s.useRef)(null),g=(0,s.useRef)(new Set),_=(0,s.useRef)(!1),v=(0,s.useRef)(0),y=(0,s.useRef)(null),b=(0,s.useRef)(null),x=(0,s.useRef)(0),S=(0,s.useCallback)(e=>{n(e),R(e),u(t=>(t!==null&&t!==e&&(h.current&&clearTimeout(h.current),m(!0),h.current=setTimeout(()=>m(!1),400)),e))},[n]),{registerHandler:w,unregisterHandler:T,connectionStatus:E}=o(),D=(0,s.useCallback)(async function e(){if(!_.current||y.current)return;b.current&&clearTimeout(b.current);let r=new AbortController;y.current=r;let i=v.current,o=setTimeout(()=>r.abort(),8e3);try{let e=await fetch(`${a}/api/projects`,{signal:r.signal});if(!e.ok)throw Error(`HTTP ${e.status}`);let o=await e.json();if(!Array.isArray(o.projects))throw Error(`Invalid project snapshot`);if(!_.current||r.signal.aborted||i!==v.current)return;c(o.projects);let s=o.projects;u(e=>{if(e&&s.some(t=>t.id===e))return e;let r=t?null:K(),i=r&&s.some(e=>e.id===r)?r:null;return n(i),R(i),i}),x.current=0,f(!1)}catch{if(_.current&&i===v.current){let t=Math.min(500*2**Math.min(x.current++,5),1e4);b.current=setTimeout(()=>{e()},t)}}finally{clearTimeout(o),y.current===r&&(y.current=null)}},[t,n]);(0,s.useEffect)(()=>{_.current=!0,D();let e=()=>{D()};return window.addEventListener(`online`,e),window.addEventListener(`focus`,e),()=>{_.current=!1,v.current++,y.current?.abort(),y.current=null,b.current&&clearTimeout(b.current),h.current&&clearTimeout(h.current),window.removeEventListener(`online`,e),window.removeEventListener(`focus`,e)}},[D]);let O=(0,s.useRef)(E),k=(0,s.useRef)(E===`connected`);(0,s.useEffect)(()=>{E===`connected`&&(k.current&&O.current!==`connected`&&D(),k.current=!0),O.current=E},[E,D]);let A=(0,s.useCallback)(e=>{if(!e||typeof e!=`object`)return;let r=e;if(typeof r.type==`string`){if(r.type===`desktop.projects`){if(!Array.isArray(r.projects))return;v.current++,x.current=0,b.current&&clearTimeout(b.current);let e=r.projects;c(e),u(r=>{let i;if(r&&e.find(e=>e.id===r))i=r;else{let n=t?null:K();i=n&&e.find(e=>e.id===n)?n:!t&&e.length>0?e[0].id:null}return n(i),R(i),i}),f(!1)}else if(r.type===`desktop.project_added`){let e=r.project;if(!e||typeof e.id!=`string`)return;v.current++,c(t=>t.find(t=>t.id===e.id)?t:[...t,e]),g.current.has(e.id)?g.current.delete(e.id):t||(C.success(i.t(`nav:projects.added`,{name:e.name})),S(e.id))}else if(r.type===`providers.detected_changed`)D();else if(r.type===`desktop.project_removed`){let e=r.projectId;if(typeof e!=`string`)return;v.current++,t||C.success(i.t(`nav:projects.removed`)),U(e),c(t=>t.filter(t=>t.id!==e)),u(t=>t===e?(n(null),R(null),null):t)}}},[D,S,t,n]);(0,s.useLayoutEffect)(()=>(w(`desktop`,A),()=>T(`desktop`)),[A,w,T]);let j=(0,s.useRef)(0);(0,s.useEffect)(()=>{let e=()=>{let e=Date.now();e-j.current<6e4||(j.current=e,fetch(`${a}/api/providers/detected?refresh=1`).catch(()=>{}))};return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[]);let ee=(0,s.useCallback)(async(e,t,n,r)=>{try{let i={path:e};n&&n.length>0&&(i.providers=n),t&&(i.name=t),r?.length&&(i.repositories=r);let a=await fetch(`/api/projects`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)});if(!a.ok){let e=await a.json();throw Error(e.error??`HTTP ${a.status}`)}let o=await a.json();return g.current.add(o.project.id),v.current++,c(e=>e.find(e=>e.id===o.project.id)?e:[...e,o.project]),S(o.project.id),o}catch(e){throw console.error(`[useDesktop] addProject error:`,e),e}},[S]),M=(0,s.useCallback)(async e=>{try{let t=await fetch(`${a}/api/projects/${e}`,{method:`DELETE`});if(!t.ok){let e=await t.json();throw Error(e.error??`HTTP ${t.status}`)}U(e),v.current++,c(t=>t.filter(t=>t.id!==e)),u(t=>t===e?(n(null),R(null),null):t)}catch(e){throw console.error(`[useDesktop] removeProject error:`,e),e}},[n]),N=(0,s.useMemo)(()=>({projects:r,activeProjectId:l,setActiveProjectId:S,addProject:ee,removeProject:M,refreshProjects:D,isLoading:d,isSwitchingProject:p}),[r,l,S,ee,M,D,d,p]);return(0,ne.jsx)(ie.Provider,{value:N,children:e})}var se={projects:[],activeProjectId:null,setActiveProjectId:()=>{},addProject:async()=>null,removeProject:async()=>{},refreshProjects:async()=>{},isLoading:!1,isSwitchingProject:!1};function q(){return(0,s.useContext)(ie)??se}export{z as a,W as i,re as n,I as o,q as r,C as s,oe as t};