@loicngr/kobo 2.1.21 → 2.1.23

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 (93) hide show
  1. package/AGENTS.md +69 -4
  2. package/CHANGELOG.md +9 -0
  3. package/CONFIGURATION.md +112 -2
  4. package/dist/mcp-server/kobo-tasks-server.js +4 -4
  5. package/dist/server/index.js +21 -6
  6. package/dist/server/services/agent/engines/claude-code/engine.js +5 -2
  7. package/dist/server/services/agent/engines/codex/engine.js +3 -0
  8. package/dist/server/services/agent/orchestrator.js +2 -0
  9. package/dist/server/services/agent/turn-liveness.js +1 -1
  10. package/dist/server/services/dev-server-service.js +41 -13
  11. package/dist/server/services/lifecycle-hook-service.js +29 -2
  12. package/dist/server/services/settings-service.js +66 -0
  13. package/dist/server/utils/script-runner.js +3 -1
  14. package/dist/shared/launch-instructions.js +8 -4
  15. package/dist/shared/memory-tools.js +2 -2
  16. package/docker-compose.vps.yml +1 -1
  17. package/docs/deployment-vps.md +36 -10
  18. package/docs/getting-started.md +11 -0
  19. package/package.json +1 -1
  20. package/scripts/kobo-update +25 -13
  21. package/src/client/dist/pwa/assets/ActivityFeed-1OKX_g3B.js +2 -0
  22. package/src/client/dist/pwa/assets/{ActivityFeed-DdJvMzRI.css → ActivityFeed-CmAFv-2c.css} +1 -1
  23. package/src/client/dist/pwa/assets/{AutoLoopFinalReviewSettings-f4VDR5dd.js → AutoLoopFinalReviewSettings-VoA9uBw0.js} +1 -1
  24. package/src/client/dist/pwa/assets/{ChangelogPage-dEWpjTlp.js → ChangelogPage-DHl3hD3t.js} +1 -1
  25. package/src/client/dist/pwa/assets/{ComparisonPanel-Bwbqgvr4.js → ComparisonPanel-D6EKTtni.js} +1 -1
  26. package/src/client/dist/pwa/assets/{CreatePage-CCCCAhrx.js → CreatePage-CZzEOVVq.js} +1 -1
  27. package/src/client/dist/pwa/assets/{DashboardPage-3byhBITf.js → DashboardPage-DjLoUvjA.js} +1 -1
  28. package/src/client/dist/pwa/assets/{DiffViewer-Bj_NTfCF.js → DiffViewer-BQ6OEmoi.js} +3 -3
  29. package/src/client/dist/pwa/assets/{DocumentsPanel-xyLDV3T1.js → DocumentsPanel-yrQviqCd.js} +1 -1
  30. package/src/client/dist/pwa/assets/{DrawerToggleButton-pwBSstQP.js → DrawerToggleButton-D5qNeXnn.js} +1 -1
  31. package/src/client/dist/pwa/assets/{GitPanel-DvIdrkVw.js → GitPanel-DCXlhcAD.js} +3 -3
  32. package/src/client/dist/pwa/assets/{HealthPage-BSwhZQRo.js → HealthPage-COicuNQn.js} +1 -1
  33. package/src/client/dist/pwa/assets/{MainLayout-DZJ9BvZw.js → MainLayout-ZcExZTqC.js} +2 -2
  34. package/src/client/dist/pwa/assets/{MemoryPanel-ChR032zP.js → MemoryPanel-D73Qz9f7.js} +1 -1
  35. package/src/client/dist/pwa/assets/{MemoryProposalList-BRKSoS4K.js → MemoryProposalList-BGlq2DkD.js} +1 -1
  36. package/src/client/dist/pwa/assets/{QBtnDropdown-o3QH0Bb8.js → QBtnDropdown-CykBCmwa.js} +1 -1
  37. package/src/client/dist/pwa/assets/{QExpansionItem-BhFHiyq9.js → QExpansionItem-CAW9J1Uv.js} +1 -1
  38. package/src/client/dist/pwa/assets/{QScrollArea-BsNY6slB.js → QScrollArea-C_d-8eO7.js} +1 -1
  39. package/src/client/dist/pwa/assets/{QSelect-bEq3g_io.js → QSelect-C1AN93yA.js} +1 -1
  40. package/src/client/dist/pwa/assets/{QTooltip-xYZ6KNu2.js → QTooltip-C9qaLW_h.js} +1 -1
  41. package/src/client/dist/pwa/assets/{SchedulePanel-DIFv_FTY.js → SchedulePanel-CQpzDhq7.js} +1 -1
  42. package/src/client/dist/pwa/assets/{SearchPage-BqTBIt5E.js → SearchPage-fZlSSEu_.js} +1 -1
  43. package/src/client/dist/pwa/assets/{SettingsPage-BRvUAZ5r.css → SettingsPage-BCOF0ssp.css} +1 -1
  44. package/src/client/dist/pwa/assets/SettingsPage-eyJZxeCJ.js +9 -0
  45. package/src/client/dist/pwa/assets/{SplitWorkspacePage-D6r2pl5g.js → SplitWorkspacePage-CfeO6TZb.js} +1 -1
  46. package/src/client/dist/pwa/assets/{TerminalPanel-CladK9Vv.js → TerminalPanel-CfDZOteT.js} +1 -1
  47. package/src/client/dist/pwa/assets/{ToolCallItem-CdzEME4w.js → ToolCallItem-CHE6tylq.js} +2 -2
  48. package/src/client/dist/pwa/assets/{TouchPan-B4gQPwGN.js → TouchPan-Csev_qU6.js} +1 -1
  49. package/src/client/dist/pwa/assets/{TourReplayButton-B0j6AZwU.js → TourReplayButton-Crr7tF1b.js} +1 -1
  50. package/src/client/dist/pwa/assets/{WorkspaceAttentionLabels-CeVhoidC.js → WorkspaceAttentionLabels-DpUZOiJv.js} +1 -1
  51. package/src/client/dist/pwa/assets/{WorkspacePage-w2bF8wTd.css → WorkspacePage-Bk-WWOYM.css} +1 -1
  52. package/src/client/dist/pwa/assets/{WorkspacePage-CK5XCuG_.js → WorkspacePage-_QSKLO42.js} +3 -3
  53. package/src/client/dist/pwa/assets/{browser-B8tNScg1.js → browser-o7ftkZex.js} +1 -1
  54. package/src/client/dist/pwa/assets/{build-path-tree-kmVAcvs_.js → build-path-tree-D6dZQpIb.js} +1 -1
  55. package/src/client/dist/pwa/assets/{custom-sounds-CJwd-8TL.js → custom-sounds-DVX9zCET.js} +1 -1
  56. package/src/client/dist/pwa/assets/{de-BaO6kbdO.js → de-DOE4H_Jf.js} +2 -2
  57. package/src/client/dist/pwa/assets/{editor.api-CgbPVW9s.js → editor.api-C8TYnUXm.js} +1 -1
  58. package/src/client/dist/pwa/assets/{efforts-y7Wf_Rgd.js → efforts-DfsG0_o0.js} +1 -1
  59. package/src/client/dist/pwa/assets/{es-DTvSsbD0.js → es-BW57JPlm.js} +2 -2
  60. package/src/client/dist/pwa/assets/{expand-template-BFbbjj7X.js → expand-template-CJZlWMfI.js} +1 -1
  61. package/src/client/dist/pwa/assets/{format-BETfc4z9.js → format-DOCqk2Dn.js} +1 -1
  62. package/src/client/dist/pwa/assets/{formatters-C22K9vlC.js → formatters-BFocC6LJ.js} +1 -1
  63. package/src/client/dist/pwa/assets/{fr-BH7V66Yz.js → fr-DnmIKHaQ.js} +2 -2
  64. package/src/client/dist/pwa/assets/{freemarker2-DiRVvp9O.js → freemarker2-CfME4WOK.js} +1 -1
  65. package/src/client/dist/pwa/assets/{handlebars-BLYRroSQ.js → handlebars-uvKdDnJl.js} +1 -1
  66. package/src/client/dist/pwa/assets/{html-DAW2vteY.js → html-BrEPgLuD.js} +1 -1
  67. package/src/client/dist/pwa/assets/i18n-BmTCjikk.js +1 -0
  68. package/src/client/dist/pwa/assets/{index-CbyHfF8I.js → index-z1Oh2-I_.js} +4 -4
  69. package/src/client/dist/pwa/assets/{it-DZGbkkoy.js → it-DSrEQgZQ.js} +2 -2
  70. package/src/client/dist/pwa/assets/{javascript-Bb5J8n0k.js → javascript-KH2xP4lQ.js} +1 -1
  71. package/src/client/dist/pwa/assets/{liquid-Dqx3adnJ.js → liquid-D08TlsVs.js} +1 -1
  72. package/src/client/dist/pwa/assets/{mdx-D_7igLV3.js → mdx-y74A51cS.js} +1 -1
  73. package/src/client/dist/pwa/assets/{monaco-contributions-C-0CbrAy.js → monaco-contributions-Cx8iaAhd.js} +1 -1
  74. package/src/client/dist/pwa/assets/{monaco.contribution-c6JPBEZI.js → monaco.contribution-CFq0guCl.js} +2 -2
  75. package/src/client/dist/pwa/assets/{network-auth-BE4qbvWm.js → network-auth-DnGOOzCV.js} +1 -1
  76. package/src/client/dist/pwa/assets/{notify-theme-BVFBBGrJ.js → notify-theme-B9lUAgQl.js} +1 -1
  77. package/src/client/dist/pwa/assets/{project-color-CHOR2jB5.js → project-color-TgENPFLi.js} +1 -1
  78. package/src/client/dist/pwa/assets/{python-Dqubw1F5.js → python-Cy3bAVPq.js} +1 -1
  79. package/src/client/dist/pwa/assets/{razor-BQphc9Kt.js → razor-gD9QOuiV.js} +1 -1
  80. package/src/client/dist/pwa/assets/{typescript-Dep00l0X.js → typescript-CEItY0bH.js} +1 -1
  81. package/src/client/dist/pwa/assets/{use-search-index-status-CQHHvHwM.js → use-search-index-status-BtJ0pOy9.js} +1 -1
  82. package/src/client/dist/pwa/assets/{use-tours-IVbXTmz2.js → use-tours-COLDth2h.js} +2 -2
  83. package/src/client/dist/pwa/assets/{use-worktree-restore-B3s5xDGR.js → use-worktree-restore-CShbwpGy.js} +1 -1
  84. package/src/client/dist/pwa/assets/{workspace-templates-CyuTpztP.js → workspace-templates-BOMNQgBl.js} +1 -1
  85. package/src/client/dist/pwa/assets/{xml-BMS2dvaF.js → xml-BJvL5qcE.js} +1 -1
  86. package/src/client/dist/pwa/assets/{yaml-CYw92aic.js → yaml-DtkVRZaX.js} +1 -1
  87. package/src/client/dist/pwa/index.html +1 -1
  88. package/src/client/dist/pwa/sw.js +1 -1
  89. package/src/mcp-server/README.md +13 -0
  90. package/src/mcp-server/kobo-tasks-server.ts +5 -4
  91. package/src/client/dist/pwa/assets/ActivityFeed-DiUxnmGJ.js +0 -2
  92. package/src/client/dist/pwa/assets/SettingsPage-BLD0xWFB.js +0 -9
  93. package/src/client/dist/pwa/assets/i18n-DnuTmw3O.js +0 -1
@@ -1,7 +1,7 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MainLayout-DZJ9BvZw.js","assets/reactivity.esm-bundler-DY1JkAEA.js","assets/runtime-core.esm-bundler-Bqg71Vll.js","assets/dom-BtYTvLeN.js","assets/QBtn-BUSdPaf4.js","assets/use-dark-BHObfh0O.js","assets/detached-fullscreen-Du3TcYdX.js","assets/use-id-BrdYXce0.js","assets/QList-Cx1UfaUm.js","assets/QSelect-bEq3g_io.js","assets/private.use-form-DY1BkePL.js","assets/QItemSection-MdJ1_ZK7.js","assets/use-tours-IVbXTmz2.js","assets/use-tours-CTZuBZOi.css","assets/QChip-Be16M4Ig.js","assets/ToolCallItem-CdzEME4w.js","assets/QTooltip-xYZ6KNu2.js","assets/render-chat-markdown-CafzCcmu.js","assets/defineProperty-BbfpZ9Tg.js","assets/ToolCallItem-m-YnWEbv.css","assets/use-worktree-restore-B3s5xDGR.js","assets/use-worktree-restore-B-9jHocY.css","assets/QBadge-CW3Lw-kL.js","assets/ClosePopup-CRV2hxHS.js","assets/use-is-mobile-CDB_rzM9.js","assets/permissionModes-DLWiBfdb.js","assets/efforts-y7Wf_Rgd.js","assets/WorkspaceAttentionLabels-CeVhoidC.js","assets/formatters-C22K9vlC.js","assets/WorkspaceAttentionLabels-B9LE8HtU.css","assets/custom-sounds-CJwd-8TL.js","assets/TouchPan-B4gQPwGN.js","assets/QBanner-BT2ZemYu.js","assets/AutoLoopFinalReviewSettings-f4VDR5dd.js","assets/AutoLoopFinalReviewSettings-Q-OlSQ1c.css","assets/project-color-CHOR2jB5.js","assets/SettingsPage-BLD0xWFB.js","assets/QExpansionItem-BhFHiyq9.js","assets/use-slide-transition-B_Nu6u-t.js","assets/QBtnDropdown-o3QH0Bb8.js","assets/QBtnGroup-CnM4vSJA.js","assets/MemoryProposalList-BRKSoS4K.js","assets/MemoryProposalList-OmDpl3o5.css","assets/QPage-CqkGHokx.js","assets/DrawerToggleButton-pwBSstQP.js","assets/TourReplayButton-B0j6AZwU.js","assets/workspace-templates-CyuTpztP.js","assets/workspace-page-layout-Dw9NhZsL.js","assets/SettingsPage-BRvUAZ5r.css","assets/MainLayout-DoAEgANU.css","assets/DashboardPage-3byhBITf.js","assets/QMarkupTable-UhP7fVUp.js","assets/DashboardPage-CtaHaVdf.css","assets/WorkspacePage-CK5XCuG_.js","assets/QSpinnerDots-xdWyaE1i.js","assets/clipboard-t9qe6lK7.js","assets/expand-template-BFbbjj7X.js","assets/expand-template-CTUNyJrv.css","assets/use-search-index-status-CQHHvHwM.js","assets/WorkspacePage-w2bF8wTd.css","assets/SplitWorkspacePage-D6r2pl5g.js","assets/SplitWorkspacePage-lWQO8xro.css","assets/CreatePage-CCCCAhrx.js","assets/QBtnToggle-DccOOtbh.js","assets/CreatePage-DxOes_cF.css","assets/SearchPage-BqTBIt5E.js","assets/SearchPage-BGc1oQSM.css","assets/HealthPage-BSwhZQRo.js","assets/HealthPage-Cnlhrn--.css","assets/ChangelogPage-dEWpjTlp.js","assets/ChangelogPage-DVyx9ZjV.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MainLayout-ZcExZTqC.js","assets/reactivity.esm-bundler-DY1JkAEA.js","assets/runtime-core.esm-bundler-Bqg71Vll.js","assets/dom-BtYTvLeN.js","assets/QBtn-BUSdPaf4.js","assets/use-dark-BHObfh0O.js","assets/detached-fullscreen-Du3TcYdX.js","assets/use-id-BrdYXce0.js","assets/QList-Cx1UfaUm.js","assets/QSelect-C1AN93yA.js","assets/private.use-form-DY1BkePL.js","assets/QItemSection-MdJ1_ZK7.js","assets/use-tours-COLDth2h.js","assets/use-tours-CTZuBZOi.css","assets/QChip-Be16M4Ig.js","assets/ToolCallItem-CHE6tylq.js","assets/QTooltip-C9qaLW_h.js","assets/render-chat-markdown-CafzCcmu.js","assets/defineProperty-BbfpZ9Tg.js","assets/ToolCallItem-m-YnWEbv.css","assets/use-worktree-restore-CShbwpGy.js","assets/use-worktree-restore-B-9jHocY.css","assets/QBadge-CW3Lw-kL.js","assets/ClosePopup-CRV2hxHS.js","assets/use-is-mobile-CDB_rzM9.js","assets/permissionModes-DLWiBfdb.js","assets/efforts-DfsG0_o0.js","assets/WorkspaceAttentionLabels-DpUZOiJv.js","assets/formatters-BFocC6LJ.js","assets/WorkspaceAttentionLabels-B9LE8HtU.css","assets/custom-sounds-DVX9zCET.js","assets/TouchPan-Csev_qU6.js","assets/QBanner-BT2ZemYu.js","assets/AutoLoopFinalReviewSettings-VoA9uBw0.js","assets/AutoLoopFinalReviewSettings-Q-OlSQ1c.css","assets/project-color-TgENPFLi.js","assets/SettingsPage-eyJZxeCJ.js","assets/QExpansionItem-CAW9J1Uv.js","assets/use-slide-transition-B_Nu6u-t.js","assets/QBtnDropdown-CykBCmwa.js","assets/QBtnGroup-CnM4vSJA.js","assets/MemoryProposalList-BGlq2DkD.js","assets/MemoryProposalList-OmDpl3o5.css","assets/QPage-CqkGHokx.js","assets/DrawerToggleButton-D5qNeXnn.js","assets/TourReplayButton-Crr7tF1b.js","assets/workspace-templates-BOMNQgBl.js","assets/workspace-page-layout-Dw9NhZsL.js","assets/SettingsPage-BCOF0ssp.css","assets/MainLayout-DoAEgANU.css","assets/DashboardPage-DjLoUvjA.js","assets/QMarkupTable-UhP7fVUp.js","assets/DashboardPage-CtaHaVdf.css","assets/WorkspacePage-_QSKLO42.js","assets/QSpinnerDots-xdWyaE1i.js","assets/clipboard-t9qe6lK7.js","assets/expand-template-CJZlWMfI.js","assets/expand-template-CTUNyJrv.css","assets/use-search-index-status-BtJ0pOy9.js","assets/WorkspacePage-Bk-WWOYM.css","assets/SplitWorkspacePage-CfeO6TZb.js","assets/SplitWorkspacePage-lWQO8xro.css","assets/CreatePage-CZzEOVVq.js","assets/QBtnToggle-DccOOtbh.js","assets/CreatePage-DxOes_cF.css","assets/SearchPage-fZlSSEu_.js","assets/SearchPage-BGc1oQSM.css","assets/HealthPage-COicuNQn.js","assets/HealthPage-Cnlhrn--.css","assets/ChangelogPage-DHl3hD3t.js","assets/ChangelogPage-DVyx9ZjV.css"])))=>i.map(i=>d[i]);
2
2
  import{C as e,D as t,E as n,M as r,S as i,a,b as o,c as s,f as c,g as l,o as u,p as d,pt as f,u as p,v as m}from"./reactivity.esm-bundler-DY1JkAEA.js";import{C as h,F as g,J as _,L as v,M as y,N as b,O as x,P as S,R as C,T as w,V as T,Y as E,_ as D,b as O,d as k,f as A,j as ee,k as te,l as j,p as ne,r as M,s as re,u as ie,w as ae,y as N}from"./runtime-core.esm-bundler-Bqg71Vll.js";import{D as oe,E as se,F as ce,G as le,H as ue,J as de,K as fe,L as pe,M as P,N as me,O as he,Q as ge,R as _e,U as ve,V as ye,W as be,_ as xe,a as Se,b as Ce,d as we,f as Te,g as Ee,i as F,m as De,n as Oe,p as ke,q as Ae,r as je,t as Me,v as Ne,z as Pe}from"./dom-BtYTvLeN.js";import{_ as Fe,g as Ie,h as Le,l as Re,m as ze,o as Be,s as Ve,t as He,u as Ue}from"./QBtn-BUSdPaf4.js";import{n as We,t as Ge}from"./use-dark-BHObfh0O.js";import{S as Ke,_ as qe,a as Je,b as Ye,c as Xe,d as Ze,g as Qe,h as $e,o as et,r as tt,s as nt,u as rt,v as it,x as at,y as ot}from"./detached-fullscreen-Du3TcYdX.js";import{t as st}from"./defineProperty-BbfpZ9Tg.js";import{t as ct}from"./use-id-BrdYXce0.js";import{i as lt,n as ut,r as dt}from"./private.use-form-DY1BkePL.js";import{a as ft,i as pt,n as mt,r as ht,t as gt}from"./use-checkbox-v4aAbE6K.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var _t=[`sm`,`md`,`lg`,`xl`],{passive:vt}=P,yt=ye({width:0,height:0,name:`xs`,sizes:{sm:600,md:1024,lg:1440,xl:1920},lt:{sm:!0,md:!0,lg:!0,xl:!0},gt:{xs:!1,sm:!1,md:!1,lg:!1},xs:!0,sm:!1,md:!1,lg:!1,xl:!1,orientation:{type:`portrait-primary`,angle:0,portrait:!0,landscape:!1}},{setSizes:me,setDebounce:me,install({$q:e,onSSRHydrated:t}){if(e.screen=this,this.__installed){e.config.screen!==void 0&&(e.config.screen.bodyClasses?this.__update(!0):document.body.classList.remove(`screen--${this.name}`));return}let{visualViewport:n}=window,r=n||window,i=document.scrollingElement||document.documentElement,a=n===void 0||ve.is.mobile?()=>[Math.max(window.innerWidth,i.clientWidth),Math.max(window.innerHeight,i.clientHeight)]:()=>[n.width*n.scale+window.innerWidth-i.clientWidth,n.height*n.scale+window.innerHeight-i.clientHeight],o=e.config.screen?.bodyClasses===!0;this.__update=e=>{let[t,n]=a();if(n!==this.height&&(this.height=n),t!==this.width)this.width=t;else if(e!==!0)return;let r=this.sizes;this.gt.xs=t>=r.sm,this.gt.sm=t>=r.md,this.gt.md=t>=r.lg,this.gt.lg=t>=r.xl,this.lt.sm=t<r.sm,this.lt.md=t<r.md,this.lt.lg=t<r.lg,this.lt.xl=t<r.xl,this.xs=this.lt.sm,this.sm=this.gt.xs&&this.lt.md,this.md=this.gt.sm&&this.lt.lg,this.lg=this.gt.md&&this.lt.xl,this.xl=this.gt.lg,r=this.xs&&`xs`||this.sm&&`sm`||this.md&&`md`||this.lg&&`lg`||`xl`,r!==this.name&&(o&&(document.body.classList.remove(`screen--${this.name}`),document.body.classList.add(`screen--${r}`)),this.name=r)};let s,c={},l=16;this.setSizes=e=>{_t.forEach(t=>{e[t]!==void 0&&(c[t]=e[t])})},this.setDebounce=e=>{l=e};let u=()=>{let e=getComputedStyle(document.body);e.getPropertyValue(`--q-size-sm`)&&_t.forEach(t=>{this.sizes[t]=Number.parseInt(e.getPropertyValue(`--q-size-${t}`),10)}),this.setSizes=e=>{_t.forEach(t=>{e[t]&&(this.sizes[t]=e[t])}),this.__update(!0)},this.setDebounce=e=>{s!==void 0&&(s.flush?.(),r.removeEventListener(`resize`,s,vt)),s=e>0?Fe(this.__update,e):this.__update,r.addEventListener(`resize`,s,vt)},this.setDebounce(l),Object.keys(c).length===0?this.__update():(this.setSizes(c),c=void 0),o&&this.name===`xs`&&document.body.classList.add(`screen--xs`);let{orientation:t}=window.screen,n=()=>{let{type:e,angle:n}=t,r=e.startsWith(`portrait`);Object.assign(this.orientation,{type:e,angle:n,portrait:r,landscape:!r})};n(),t.addEventListener(`change`,n,vt)};be.value?t.push(u):u()}}),bt=`data-dark-auto`,xt=ye({isActive:!1,mode:!1},{__media:void 0,set(e){xt.mode=e,e===`auto`?(xt.__media===void 0&&(xt.__media=window.matchMedia(`(prefers-color-scheme: dark)`),xt.__updateMedia=()=>{xt.set(`auto`)},xt.__media.addListener(xt.__updateMedia)),e=xt.__media.matches):xt.__media!==void 0&&(xt.__media.removeListener(xt.__updateMedia),xt.__media=void 0),xt.isActive=e===!0,document.body.classList.remove(`body--${e===!0?`light`:`dark`}`),document.body.classList.add(`body--${e===!0?`dark`:`light`}`)},toggle(){xt.set(!xt.isActive)},install({$q:e,ssrContext:t,onSSRHydrated:n}){if(e.dark=this,!this.__installed){if(be.value){if(document.body.hasAttribute(bt)){this.mode=`auto`,n.push(()=>{document.body.removeAttribute(bt),this.mode===`auto`&&this.set(`auto`)});return}this.set(document.body.classList.contains(`body--dark`));return}this.set(e.config.dark??!1)}}});function St(e,t,n=document.body){if(typeof e!=`string`)throw TypeError(`Expected a string as propName`);if(typeof t!=`string`)throw TypeError(`Expected a string as value`);if(!(n instanceof Element))throw TypeError(`Expected a DOM element`);n.style.setProperty(`--q-${e}`,t)}function Ct(e){if(e.ios)return`ios`;if(e.android)return`android`}function wt({is:e,has:t,within:n},r){let i=[e.desktop?`desktop`:`mobile`,`${t.touch?``:`no-`}touch`];if(e.mobile){let t=Ct(e);t!==void 0&&i.push(`platform-`+t)}if(e.nativeMobile){let t=e.nativeMobileWrapper,n=r[t];i.push(t,`native-mobile`),e.ios&&(n===void 0||n.iosStatusBarPadding)?i.push(`q-ios-padding`):e.android&&(n===void 0||n.androidStatusBarPadding!==!1)&&i.push(`q-safe-area-padding`)}else e.electron?i.push(`electron`):e.bex&&i.push(`bex`);return n.iframe&&i.push(`within-iframe`),i}function Tt(){let{is:e}=ve,t=document.body.className,n=new Set(t.replaceAll(/ {2}/g,` `).split(` `));if(!e.nativeMobile&&!e.electron&&!e.bex){if(e.desktop)n.delete(`mobile`),n.delete(`platform-ios`),n.delete(`platform-android`),n.add(`desktop`);else if(e.mobile){n.delete(`desktop`),n.add(`mobile`),n.delete(`platform-ios`),n.delete(`platform-android`);let t=Ct(e);t!==void 0&&n.add(`platform-${t}`)}}ve.has.touch&&(n.delete(`no-touch`),n.add(`touch`)),ve.within.iframe&&n.add(`within-iframe`);let r=[...n].join(` `);t!==r&&(document.body.className=r)}function Et(e){for(let t in e)St(t,e[t])}var Dt={install(e){if(!this.__installed){if(be.value)Tt();else{let{$q:t}=e;t.config.brand!==void 0&&Et(t.config.brand),document.body.classList.add(...wt(ve,t.config))}ve.is.ios&&document.body.addEventListener(`touchstart`,me),window.addEventListener(`keydown`,oe,!0)}}},Ot=()=>!0;function kt(e){return typeof e==`string`&&e!==``&&e!==`/`&&e!==`#/`}function At(e){return e.startsWith(`#`)&&(e=e.slice(1)),e.startsWith(`/`)||(e=`/`+e),e.endsWith(`/`)&&(e=e.slice(0,-1)),`#`+e}function jt(e){if(e.backButtonExit===!1)return()=>!1;if(e.backButtonExit===`*`)return Ot;let t=[`#/`];return Array.isArray(e.backButtonExit)&&t.push(...e.backButtonExit.filter(kt).map(At)),()=>t.includes(window.location.hash)}var Mt={__history:[],add:me,remove:me,install({$q:e}){if(this.__installed)return;let{cordova:t,capacitor:n}=ve.is;if(!t&&!n)return;let r=e.config[t?`cordova`:`capacitor`];if(r?.backButton===!1||n&&(window.Capacitor===void 0||window.Capacitor.Plugins.App===void 0))return;this.add=e=>{e.condition===void 0&&(e.condition=Ot),this.__history.push(e)},this.remove=e=>{let t=this.__history.indexOf(e);t!==-1&&this.__history.splice(t,1)};let i=jt({backButtonExit:!0,...r}),a=()=>{if(this.__history.length!==0){let e=this.__history.at(-1);e.condition()&&(this.__history.pop(),e.handler())}else i()?navigator.app.exitApp():window.history.back()};t?document.addEventListener(`deviceready`,()=>{document.addEventListener(`backbutton`,a,!1)}):window.Capacitor.Plugins.App.addListener(`backButton`,a)}},Nt={isoName:`en-US`,nativeName:`English (US)`,label:{clear:`Clear`,ok:`OK`,cancel:`Cancel`,close:`Close`,set:`Set`,select:`Select`,reset:`Reset`,remove:`Remove`,update:`Update`,create:`Create`,search:`Search`,filter:`Filter`,refresh:`Refresh`,minimum:`Minimum`,maximum:`Maximum`,range:`Range`,noValue:`No value`,resize:`Resize`,expand:e=>e?`Expand "${e}"`:`Expand`,collapse:e=>e?`Collapse "${e}"`:`Collapse`},date:{days:`Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday`.split(`_`),daysShort:`Sun_Mon_Tue_Wed_Thu_Fri_Sat`.split(`_`),months:`January_February_March_April_May_June_July_August_September_October_November_December`.split(`_`),monthsShort:`Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec`.split(`_`),firstDayOfWeek:0,format24h:!1,pluralDay:`days`,prevMonth:`Previous month`,nextMonth:`Next month`,prevYear:`Previous year`,nextYear:`Next year`,today:`Today`,prevRangeYears:e=>`Previous ${e} years`,nextRangeYears:e=>`Next ${e} years`,hour:`Hour`,minute:`Minute`,second:`Second`,now:`Current time`},table:{noData:`No data available`,noResults:`No matching records found`,loading:`Loading...`,selectedRecords:e=>e===1?`1 record selected.`:(e===0?`No`:e)+` records selected.`,recordsPerPage:`Records per page:`,allRows:`All`,pagination:(e,t,n)=>e+`–`+t+` of `+n,columns:`Columns`,selectAllRows:`Select all rows`,selectRow:`Select row`},pagination:{label:`Pagination`,first:`First page`,prev:`Previous page`,next:`Next page`,last:`Last page`},carousel:{prevSlide:`Previous slide`,nextSlide:`Next slide`},colorPicker:{spectrum:`Spectrum`,tune:`Tune`,palette:`Palette`,value:`Color value`,hue:`Hue`,alpha:`Opacity`,saturation:`Saturation`,brightness:`Brightness`},uploader:{addFiles:`Pick files`,upload:`Upload files`,abort:`Abort upload`,removeQueued:`Remove queued files`,removeUploaded:`Remove uploaded files`,removeFile:`Remove file`},editor:{toolbar:`Editor toolbar`,url:`URL`,bold:`Bold`,italic:`Italic`,strikethrough:`Strikethrough`,underline:`Underline`,unorderedList:`Unordered List`,orderedList:`Ordered List`,subscript:`Subscript`,superscript:`Superscript`,hyperlink:`Hyperlink`,toggleFullscreen:`Toggle Fullscreen`,quote:`Quote`,left:`Left align`,center:`Center align`,right:`Right align`,justify:`Justify align`,print:`Print`,outdent:`Decrease indentation`,indent:`Increase indentation`,removeFormat:`Remove formatting`,formatting:`Formatting`,fontSize:`Font Size`,align:`Align`,hr:`Insert Horizontal Rule`,undo:`Undo`,redo:`Redo`,heading1:`Heading 1`,heading2:`Heading 2`,heading3:`Heading 3`,heading4:`Heading 4`,heading5:`Heading 5`,heading6:`Heading 6`,paragraph:`Paragraph`,code:`Code`,size1:`Very small`,size2:`A bit small`,size3:`Normal`,size4:`Medium-large`,size5:`Big`,size6:`Very big`,size7:`Maximum`,defaultFont:`Default Font`,viewSource:`View Source`},tree:{noNodes:`No nodes available`,noResults:`No matching nodes found`}};function Pt(e){return e.split(/[-_]/).map((e,t)=>t===0?e.toLowerCase():t>1||e.length<4?e.toUpperCase():e[0].toUpperCase()+e.slice(1).toLowerCase())}function Ft(){let e=Array.isArray(navigator.languages)&&navigator.languages.length!==0?navigator.languages[0]:navigator.language;if(typeof e==`string`)return Pt(e).join(`-`)}function It(e){try{let{language:t,script:n,region:r}=new Intl.Locale(e).maximize();return{language:t,script:n,region:r}}catch{}}function Lt(e,t){if(typeof e!=`string`||!Array.isArray(t))return;let n=new Map;for(let e of t){if(typeof e!=`string`)continue;let t=e.toLowerCase().replaceAll(`_`,`-`);n.has(t)||n.set(t,e)}if(n.size===0)return;let r=Pt(e),i=[];for(let e=r.length;e>1;e--)i.push(r.slice(0,e).join(`-`));if(r.length>2&&r[1].length===4){let e=[r[0],...r.slice(2)];for(let t=e.length;t>1;t--)i.push(e.slice(0,t).join(`-`))}i.push(r[0]);for(let e of i){let t=n.get(e.toLowerCase());if(t!==void 0)return t}let a=It(r.join(`-`));if(a===void 0)return;let o=It(a.language).region,s;for(let[e,t]of n){let n=It(e);if(n===void 0||n.language!==a.language)continue;let r=(n.script===a.script?4:0)+(n.region===a.region?2:0)+ +(n.region===o),i=e.split(`-`).length;(s===void 0||r>s.score||r===s.score&&i<s.depth)&&(s={tag:t,score:r,depth:i})}return s?.tag}var Rt=ye({__qLang:{}},{getLocale:Ft,getClosestIsoName:Lt,set(e=Nt,t){let n={...e,rtl:e.rtl===!0,getLocale:Ft,getClosestIsoName:Lt};if(n.set=Rt.set,Rt.__langConfig===void 0||!Rt.__langConfig.noHtmlAttrs){let e=document.documentElement;e.setAttribute(`dir`,n.rtl?`rtl`:`ltr`),e.setAttribute(`lang`,n.isoName)}for(let e of Object.keys(Rt.__qLang))e in n||delete Rt.__qLang[e];Object.assign(Rt.__qLang,n)},install({$q:e,lang:t,ssrContext:n}){e.lang=Rt.__qLang,Rt.__langConfig=e.config.lang,this.__installed?t!==void 0&&this.set(t):(this.props=new Proxy(this.__qLang,{get:Reflect.get,ownKeys(e){return Reflect.ownKeys(e).filter(e=>e!==`set`&&e!==`getLocale`&&e!==`getClosestIsoName`)}}),this.set(t||Nt))}}),zt={name:`material-icons`,type:{positive:`check_circle`,negative:`warning`,info:`info`,warning:`priority_high`},arrow:{up:`arrow_upward`,right:`arrow_forward`,down:`arrow_downward`,left:`arrow_back`,dropdown:`arrow_drop_down`},chevron:{left:`chevron_left`,right:`chevron_right`},colorPicker:{spectrum:`gradient`,tune:`tune`,palette:`style`},pullToRefresh:{icon:`refresh`},carousel:{left:`chevron_left`,right:`chevron_right`,up:`keyboard_arrow_up`,down:`keyboard_arrow_down`,navigationIcon:`lens`},chip:{remove:`cancel`,selected:`check`},datetime:{arrowLeft:`chevron_left`,arrowRight:`chevron_right`,now:`access_time`,today:`today`},editor:{bold:`format_bold`,italic:`format_italic`,strikethrough:`strikethrough_s`,underline:`format_underlined`,unorderedList:`format_list_bulleted`,orderedList:`format_list_numbered`,subscript:`vertical_align_bottom`,superscript:`vertical_align_top`,hyperlink:`link`,toggleFullscreen:`fullscreen`,quote:`format_quote`,left:`format_align_left`,center:`format_align_center`,right:`format_align_right`,justify:`format_align_justify`,print:`print`,outdent:`format_indent_decrease`,indent:`format_indent_increase`,removeFormat:`format_clear`,formatting:`text_format`,fontSize:`format_size`,align:`format_align_left`,hr:`remove`,undo:`undo`,redo:`redo`,heading:`format_size`,code:`code`,size:`format_size`,font:`font_download`,viewSource:`code`},expansionItem:{icon:`keyboard_arrow_down`,denseIcon:`arrow_drop_down`},fab:{icon:`add`,activeIcon:`close`},field:{clear:`cancel`,error:`error`},pagination:{first:`first_page`,prev:`keyboard_arrow_left`,next:`keyboard_arrow_right`,last:`last_page`},rating:{icon:`grade`},stepper:{done:`check`,active:`edit`,error:`warning`},tabs:{left:`chevron_left`,right:`chevron_right`,up:`keyboard_arrow_up`,down:`keyboard_arrow_down`},table:{arrowUp:`arrow_upward`,warning:`warning`,firstPage:`first_page`,prevPage:`chevron_left`,nextPage:`chevron_right`,lastPage:`last_page`},tree:{icon:`play_arrow`},uploader:{done:`done`,clear:`clear`,add:`add_box`,upload:`cloud_upload`,removeQueue:`clear_all`,removeUploaded:`done_all`}},Bt=ye({iconMapFn:null,__qIconSet:{}},{set(e,t){let n={...e};n.set=Bt.set,Object.assign(Bt.__qIconSet,n)},install({$q:e,iconSet:t,ssrContext:n}){e.config.iconMapFn!==void 0&&(this.iconMapFn=e.config.iconMapFn),e.iconSet=this.__qIconSet,le(e,`iconMapFn`,()=>this.iconMapFn,e=>{this.iconMapFn=e}),this.__installed?t!==void 0&&this.set(t):(this.props=new Proxy(this.__qIconSet,{get:Reflect.get,ownKeys(e){return Reflect.ownKeys(e).filter(e=>e!==`set`)}}),this.set(t||zt))}});function Vt(e){return e.constructor===ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function Ht(e,t,n){return typeof e==`function`&&e!==n&&typeof t==`function`&&t!==n}function Ut(e,t){if(e===t)return!0;if(e!==null&&t!==null&&typeof e==`object`&&typeof t==`object`){if(e.constructor!==t.constructor)return!1;let n,r;if(e.constructor===Array){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!Ut(e[r],t[r]))return!1;return!0}if(e.constructor===Map){if(e.size!==t.size)return!1;let n=e.entries();for(r=n.next();!r.done;){if(!t.has(r.value[0]))return!1;r=n.next()}for(n=e.entries(),r=n.next();!r.done;){if(!Ut(r.value[1],t.get(r.value[0])))return!1;r=n.next()}return!0}if(e.constructor===Set){if(e.size!==t.size)return!1;let n=e.entries();for(r=n.next();!r.done;){if(!t.has(r.value[0]))return!1;r=n.next()}return!0}if(e.constructor===ArrayBuffer||e.constructor===DataView){if(e.byteLength!==t.byteLength)return!1;e=Vt(e),t=Vt(t)}if(ArrayBuffer.isView(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(e[r]!==t[r])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(Ht(e.valueOf,t.valueOf,Object.prototype.valueOf))return e.valueOf()===t.valueOf();if(Ht(e.toString,t.toString,Object.prototype.toString))return e.toString()===t.toString();let i=Object.keys(e).filter(t=>e[t]!==void 0);if(n=i.length,n!==Object.keys(t).filter(e=>t[e]!==void 0).length)return!1;for(r=n;r--!==0;){let n=i[r];if(!Ut(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function Wt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Gt(e){return Object.prototype.toString.call(e)===`[object Date]`}function Kt(e){return Object.prototype.toString.call(e)===`[object RegExp]`}function qt(e){return typeof e==`number`&&Number.isFinite(e)}var Jt={deepEqual:Ut,object:Wt,date:Gt,regexp:Kt,number:qt},Yt=[ue,Dt,xt,yt,Mt,Rt,Bt];function Xt(e,t){let n=de(e);n.config.globalProperties=t.config.globalProperties;let{reload:r,...i}=t._context;return Object.assign(n._context,i),n}function Zt(e,t){t.forEach(t=>{t.install(e),t.__installed=!0})}function Qt(e,t,n){e.config.globalProperties.$q=n.$q,e.provide(`_q_`,n.$q),Zt(n,Yt),t.components!==void 0&&Object.values(t.components).forEach(t=>{Wt(t)&&t.name!==void 0&&e.component(t.name,t)}),t.directives!==void 0&&Object.values(t.directives).forEach(t=>{Wt(t)&&t.name!==void 0&&e.directive(t.name,t)}),t.plugins!==void 0&&Zt(n,Object.values(t.plugins).filter(e=>typeof e.install==`function`&&!Yt.includes(e))),be.value&&(n.$q.onSSRHydrated=()=>{n.onSSRHydrated.forEach(e=>{e()}),n.$q.onSSRHydrated=()=>{}})}var $t={name:`Quasar`,version:`2.34.0`,install:function(e,t={}){let n={version:`2.34.0`};Ne?n.config=t.config||{}:(t.config!==void 0&&Object.assign(xe,t.config),n.config={...xe},Ee()),Qt(e,t,{parentApp:e,$q:n,lang:t.lang,iconSet:t.iconSet,onSSRHydrated:[]})},lang:Rt,iconSet:Bt},en=Pe({name:`QCardSection`,props:{tag:{type:String,default:`div`},horizontal:Boolean},setup(e,{slots:t}){let n=j(()=>`q-card__section q-card__section--${e.horizontal?`horiz row no-wrap`:`vert`}`);return()=>h(e.tag,{class:n.value},De(t.default))}}),tn=ze({xs:2,sm:4,md:6,lg:10,xl:14});function nn(e){return{transform:`scaleX(${e})`}}var rn=Pe({name:`QLinearProgress`,props:{...We,...Ie,value:{type:Number,default:0},buffer:Number,color:String,trackColor:String,reverse:Boolean,stripe:Boolean,indeterminate:Boolean,query:Boolean,rounded:Boolean,animationSpeed:{type:[String,Number],default:2100},instantFeedback:Boolean},setup(e,{slots:t}){let n=we(),r=Ge(e,n),i=j(()=>e.indeterminate||e.query),a=j(()=>({...tn(e.size),"--q-linear-progress-speed":`${e.animationSpeed}ms`})),o=j(()=>`q-linear-progress`+(e.color===void 0?``:` text-${e.color}`)+(e.reverse||e.query?` q-linear-progress--reverse`:``)+(e.rounded?` rounded-borders`:``)),s=j(()=>nn(e.buffer===void 0?1:e.buffer)),c=j(()=>`with${e.instantFeedback?`out`:``}-transition`),l=j(()=>`q-linear-progress__track absolute-full q-linear-progress__track--${c.value} q-linear-progress__track--${r()?`dark`:`light`}`+(e.trackColor===void 0?``:` bg-${e.trackColor}`)),u=j(()=>nn(i.value?1:e.value)),d=j(()=>`q-linear-progress__model absolute-full q-linear-progress__model--${c.value} q-linear-progress__model--${i.value?`in`:``}determinate`),f=j(()=>({width:`${e.value*100}%`})),p=j(()=>`q-linear-progress__stripe absolute-${e.reverse?`right`:`left`} q-linear-progress__stripe--${c.value}`);return()=>{let n=[h(`div`,{class:l.value,style:s.value}),h(`div`,{class:d.value,style:u.value})];return e.stripe&&!i.value&&n.push(h(`div`,{class:p.value,style:f.value})),h(`div`,{class:o.value,style:a.value,role:`progressbar`,"aria-valuemin":0,"aria-valuemax":1,"aria-valuenow":e.indeterminate||e.query?void 0:e.value},Te(t.default,n))}}}),an=Pe({name:`QCard`,props:{...We,tag:{type:String,default:`div`},square:Boolean,flat:Boolean,bordered:Boolean},setup(e,{slots:t}){let n=we(),r=Ge(e,n),i=j(()=>`q-card`+(r()?` q-card--dark q-dark`:``)+(e.bordered?` q-card--bordered`:``)+(e.square?` q-card--square no-border-radius`:``)+(e.flat?` q-card--flat no-shadow`:``));return()=>h(e.tag,{class:i.value},De(t.default))}});function on(e,t,n){let r;function i(){r!==void 0&&(Mt.remove(r),r=void 0)}return ee(()=>{e.value&&i()}),{removeFromHistory:i,addToHistory(){r={condition:()=>n.value,handler:t},Mt.add(r)}}}function sn(e,t){let{proxy:n}=O(),r=null;function i(t){r=e.noRefocus||t===!0?null:document.activeElement}function a(e){r=e||null}function o(){r=null}function s(e){return(e?.type.indexOf(`key`)===0?r.closest(`[tabindex]:not([tabindex^="-"])`):void 0)||r}function c(e){if(r===null)return;let t=s(e);r=null;let i=$e.indexOf(n);if(i!==-1){for(let e=$e.length-1;e>i;e--)if($e[e].__adoptRefocusTarget?.(t,n.contentEl)===!0)return}Xe(()=>{t.isConnected&&rt(t)})}function l(e){r!==null&&(r.isConnected&&rt(s(e)),r=null)}function u(n,i){return t()?(!e.noRefocus&&(r===null||i?.contains(r)===!0)&&(r=n),!0):!1}return{captureRefocusTarget:i,setRefocusTarget:a,clearRefocusTarget:o,restoreFocus:c,restoreFocusSync:l,adoptRefocusTarget:u}}var cn=[Element,String,Object],ln=[null,document,document.body,document.scrollingElement,document.documentElement];function un(e,t){let n=je(t);if(n!==void 0&&n!==window&&!(n instanceof Element)&&!ln.includes(n)&&(console.warn(`[Quasar] scroll-target: the specified value is not an Element nor a component with a root element; falling back to auto detection`),n=void 0),n===void 0){if(e==null)return window;n=e.closest(`.scroll,.scroll-y,.overflow-auto`)}return ln.includes(n)?window:n}function dn(e){return e===window?window.scrollY:e.scrollTop}function fn(e){return e===window?window.scrollX:e.scrollLeft}function pn(e,t,n=0,r){let i=r===void 0?performance.now():r,a=dn(e);if(n<=0){a!==t&&hn(e,t);return}requestAnimationFrame(r=>{let o=r-i,s=a+(t-a)/Math.max(o,n)*o;hn(e,s),s!==t&&pn(e,t,n-o,r)})}function mn(e,t,n=0,r){let i=r===void 0?performance.now():r,a=fn(e);if(n<=0){a!==t&&gn(e,t);return}requestAnimationFrame(r=>{let o=r-i,s=a+(t-a)/Math.max(o,n)*o;gn(e,s),s!==t&&mn(e,t,n-o,r)})}function hn(e,t){if(e===window){window.scrollTo(window.scrollX,t);return}e.scrollTop=t}function gn(e,t){if(e===window){window.scrollTo(t,window.scrollY);return}e.scrollLeft=t}function _n(e,t,n){if(n){pn(e,t,n);return}hn(e,t)}function vn(e,t,n){if(n){mn(e,t,n);return}gn(e,t)}var yn;function bn(){if(yn!==void 0)return yn;let e=document.createElement(`p`),t=document.createElement(`div`);Oe(e,{width:`100%`,height:`200px`}),Oe(t,{position:`absolute`,top:`0px`,left:`0px`,visibility:`hidden`,width:`200px`,height:`150px`,overflow:`hidden`}),t.append(e),document.body.append(t);let n=e.offsetWidth;t.style.overflow=`scroll`;let r=e.offsetWidth;return n===r&&(r=t.clientWidth),t.remove(),yn=n-r,yn}var xn=0,Sn,Cn,wn,Tn=!1,En,Dn,On=!1,kn,An=null,jn=new Set;function Mn(e){jn.add(e)}function Nn(e){jn.delete(e)}function Pn(e){Tn||(Tn=!0,requestAnimationFrame(()=>{Tn=!1;let{height:t,scale:n}=e.target;if(Math.abs(n-1)>.01)return;let{clientHeight:r,scrollTop:i}=document.scrollingElement;(wn===void 0||t!==window.innerHeight)&&(wn=r-t,document.scrollingElement.scrollTop=i),i>wn&&(document.scrollingElement.scrollTop-=Math.ceil((i-wn)/8))}))}function Fn(e){let t=document.body;if(e===`add`){Sn=fn(window),Cn=dn(window),kn=window.location.pathname,On=ve.is.ios;let e=[`q-document--prevent-scroll`];On?(En=t.style.left,Dn=t.style.top,t.style.left=`-${Sn}px`,t.style.top=`-${Cn}px`,e.push(`q-document--pin-body`)):(e.push(`q-document--clip-scroll`),window.innerWidth-document.documentElement.clientWidth>0&&e.push(`q-document--reserve-scrollbar`)),document.documentElement.classList.add(...e),document.qScrollPrevented=!0,On&&(window.scrollTo(0,0),window.visualViewport?.addEventListener(`resize`,Pn,P.passiveCapture),window.visualViewport?.addEventListener(`scroll`,Pn,P.passiveCapture),window.scrollTo(0,0))}else On&&(window.visualViewport?.removeEventListener(`resize`,Pn,P.passiveCapture),window.visualViewport?.removeEventListener(`scroll`,Pn,P.passiveCapture)),document.documentElement.classList.remove(`q-document--prevent-scroll`,`q-document--clip-scroll`,`q-document--reserve-scrollbar`,`q-document--pin-body`),document.qScrollPrevented=!1,On&&(t.style.left=En,t.style.top=Dn),On&&window.location.pathname===kn&&(fn(window)!==Sn||dn(window)!==Cn)?window.scrollTo(Sn,Cn):jn.forEach(e=>{e()}),wn=void 0}function In(e){let t=`add`;if(e===!0){if(xn++,An!==null){clearTimeout(An),An=null;return}if(xn>1)return}else{if(xn===0||(xn--,xn>0))return;if(t=`remove`,On&&ve.is.nativeMobile){An!==null&&clearTimeout(An),An=setTimeout(()=>{Fn(t),An=null},100);return}}Fn(t)}function Ln(){let e;return{preventBodyScroll(t){t!==e&&(e!==void 0||t)&&(e=t,In(t))}}}var Rn=[];function zn(e){Rn.at(-1)(e)}function Bn(e){Rn.push(e),Rn.length===1&&document.body.addEventListener(`focusin`,zn)}function Vn(e){let t=Rn.indexOf(e);t!==-1&&(Rn.splice(t,1),Rn.length===0&&document.body.removeEventListener(`focusin`,zn))}var Hn=0,Un={standard:`fixed-full flex-center`,top:`fixed-top justify-center`,bottom:`fixed-bottom justify-center`,right:`fixed-right items-center`,left:`fixed-left items-center`},Wn={standard:[`scale`,`scale`],top:[`slide-down`,`slide-up`],bottom:[`slide-up`,`slide-down`],right:[`slide-left`,`slide-right`],left:[`slide-right`,`slide-left`]},Gn=Pe({name:`QDialog`,inheritAttrs:!1,props:{...Ye,...qe,transitionShow:String,transitionHide:String,persistent:Boolean,autoClose:Boolean,allowFocusOutside:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,backdropFilter:String,position:{type:String,default:`standard`,validator:e=>[`standard`,`top`,`bottom`,`left`,`right`].includes(e)}},emits:[...ot,`shake`,`click`,`escapeKey`],setup(e,{slots:t,emit:n,attrs:r}){let a=O(),o=we(),s=i(null),c=i(null),l=m(!1),u=m(!1),d=m(null),f=null,p=!1,g=!1,v=!1,y=j(()=>!e.persistent&&!e.noRouteDismiss&&!e.seamless),{preventBodyScroll:b}=Ln(),{registerTransitionEnd:x}=Ke(e),{registerTick:S,removeTick:C}=at(),{transitionProps:w,transitionStyle:T}=Qe(e,()=>Wn[e.position][0],()=>Wn[e.position][1]),E=j(()=>T()+(e.backdropFilter===void 0?``:`;backdrop-filter:${e.backdropFilter};-webkit-backdrop-filter:${e.backdropFilter}`)),{showPortal:D,hidePortal:k,portalIsOpening:A,renderPortal:te}=nt(a,c,Oe,`dialog`),{captureRefocusTarget:ne,setRefocusTarget:M,clearRefocusTarget:re,restoreFocus:ie,adoptRefocusTarget:ae}=sn(e,()=>!e.noFocus&&A()),{hide:N}=it({showing:l,hideOnRouteChange:y,handleShow:ge,handleHide:_e,handleRouteChange:ve,processOnMount:!0}),{addToHistory:oe,removeFromHistory:se}=on(l,N,y),ce=j(()=>`q-dialog__inner flex no-pointer-events q-dialog__inner--${e.maximized?`maximized`:`minimized`} q-dialog__inner--${e.position} ${Un[e.position]}`+(u.value?` q-dialog__inner--animating`:``)+(d.value===null?``:` q-dialog__inner--keyboard`)+(e.fullWidth?` q-dialog__inner--fullwidth`:``)+(e.fullHeight?` q-dialog__inner--fullheight`:``)+(e.square?` q-dialog__inner--square`:``)),le=j(()=>l.value&&!e.seamless),ue=j(()=>e.autoClose?{onClick:Te}:{}),de=j(()=>`q-dialog fullscreen no-pointer-events q-dialog--${le.value?`modal`:`seamless`}`);_(()=>e.maximized,e=>{l.value&&Ce(e)}),_(le,e=>{b(e),e?(Bn(F),Je(xe)):(Vn(F),et(xe))});function pe(){let{offsetTop:e,height:t,scale:n}=window.visualViewport,{innerHeight:r}=window;if(Math.abs(n-1)>.01||r-t<1){d.value=null;return}let i=Math.round(e),a=Math.round(r-e-t),o=d.value;(o===null||o.top!==i||o.bottom!==a)&&(d.value={top:i,bottom:a,height:Math.round(t)})}function me(e){let t=e?`addEventListener`:`removeEventListener`;v=e,window.visualViewport?.[t](`resize`,pe,P.passive),window.visualViewport?.[t](`scroll`,pe,P.passive),e&&window.visualViewport!==void 0?pe():d.value=null}function he(){let t=d.value;return t===null?T():`${T()};--q-dialog-viewport-height:${t.height}px`+(e.position===`bottom`?``:`;top:${t.top}px`)+(e.position===`top`?``:`;bottom:${t.bottom}px`)}function ge(t){oe(),ne(),Ce(e.maximized),D(),u.value=!0,o.platform.is.ios&&me(!0),e.noFocus?C():(document.activeElement?.blur(),S(ye)),x(()=>{if(o.platform.is.ios){if(!e.seamless&&document.activeElement){let{top:e,bottom:t}=document.activeElement.getBoundingClientRect(),{innerHeight:n}=window,r=window.visualViewport?.height??n;e>0&&t>r/2&&(document.scrollingElement.scrollTop=Math.min(document.scrollingElement.scrollHeight-r,t>=n?1/0:Math.ceil(document.scrollingElement.scrollTop+t-r/2))),document.activeElement.scrollIntoView()}g=!0,c.value.click(),g=!1}D(!0),u.value=!1,n(`show`,t)})}function _e(e){C(),se(),Se(!0),u.value=!0,k(),ie(e),x(()=>{k(!0),u.value=!1,n(`hide`,e)})}function ve(){re()}function ye(e){Xe(()=>{let t=c.value;if(t!==null&&t.contains!==void 0){if(e!==void 0){let n=t.querySelector(e);if(n!==null){n.focus({preventScroll:!0});return}}t.contains(document.activeElement)||(t=t.querySelector(`[autofocus][tabindex], [data-autofocus][tabindex]`)||t.querySelector(`[autofocus] [tabindex], [data-autofocus] [tabindex]`)||t.querySelector(`[autofocus], [data-autofocus]`)||t,t.focus({preventScroll:!0}))}})}function be(e){e&&typeof e.focus==`function`?e.focus({preventScroll:!0}):ye(),n(`shake`);let t=c.value;t!==null&&(t.classList.remove(`q-animate--scale`),t.classList.add(`q-animate--scale`),f!==null&&clearTimeout(f),f=setTimeout(()=>{f=null,c.value!==null&&(t.classList.remove(`q-animate--scale`),ye())},170))}function xe(t){e.seamless||(e.persistent||e.noEscDismiss?!e.maximized&&!e.noShake&&be():(n(`escapeKey`),N(t)))}function Se(t){f!==null&&(clearTimeout(f),f=null),(t||l.value)&&(Ce(!1),v&&me(!1),e.seamless||(b(!1),Vn(F),et(xe))),t||re()}function Ce(e){e?p||=(Hn<1&&document.body.classList.add(`q-body--dialog`),Hn++,!0):p&&=(Hn<2&&document.body.classList.remove(`q-body--dialog`),Hn--,!1)}function Te(e){g||(N(e),n(`click`,e))}function Ee(t){t.button===0&&(!e.persistent&&!e.noBackdropDismiss?N(t):e.noShake||be())}function F(t){!e.allowFocusOutside&&!A()&&!Me(c.value,t.target)&&!tt(c.value,t.target)&&ye(`[tabindex]:not([tabindex="-1"])`)}Object.assign(a.proxy,{focus:ye,shake:be,__updateRefocusTarget:M,__adoptRefocusTarget:ae,__getAriaModalEl:()=>le.value?s.value:null}),ee(Se);function Oe(){return h(`div`,{ref:s,role:`dialog`,"aria-modal":le.value?`true`:`false`,...r,class:[de.value,r.class]},[h(fe,{name:`q-transition--fade`,appear:!0},()=>le.value?h(`div`,{class:`q-dialog__backdrop fixed-full`,style:E.value,"aria-hidden":`true`,onMousedown:Ee}):null),h(fe,w(),()=>l.value?h(`div`,{ref:c,class:ce.value,style:he(),tabindex:-1,...ue.value},De(t.default)):null)])}return te}}),Kn=typeof window<`u`,qn,Jn=e=>qn=e,Yn=Symbol();function Xn(e){return e&&typeof e==`object`&&Object.prototype.toString.call(e)===`[object Object]`&&typeof e.toJSON!=`function`}var Zn=typeof window==`object`&&window.window===window?window:typeof self==`object`&&self.self===self?self:typeof global==`object`&&global.global===global?global:typeof globalThis==`object`?globalThis:{HTMLElement:null};function Qn(e,{autoBom:t=!1}={}){return t&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([``,e],{type:e.type}):e}function $n(e,t,n){let r=new XMLHttpRequest;r.open(`GET`,e),r.responseType=`blob`,r.onload=function(){ir(r.response,t,n)},r.onerror=function(){console.error(`could not download file`)},r.send()}function er(e){let t=new XMLHttpRequest;t.open(`HEAD`,e,!1);try{t.send()}catch{}return t.status>=200&&t.status<=299}function tr(e){try{e.dispatchEvent(new MouseEvent(`click`))}catch{let t=new MouseEvent(`click`,{bubbles:!0,cancelable:!0,view:window,detail:0,screenX:80,screenY:20,clientX:80,clientY:20,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null});e.dispatchEvent(t)}}var nr=typeof navigator==`object`?navigator:{userAgent:``},rr=/Macintosh/.test(nr.userAgent)&&/AppleWebKit/.test(nr.userAgent)&&!/Safari/.test(nr.userAgent),ir=Kn?typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype&&!rr?ar:`msSaveOrOpenBlob`in nr?or:sr:()=>{};function ar(e,t=`download`,n){let r=document.createElement(`a`);r.download=t,r.rel=`noopener`,typeof e==`string`?(r.href=e,r.origin===location.origin?tr(r):er(r.href)?$n(e,t,n):(r.target=`_blank`,tr(r))):(r.href=URL.createObjectURL(e),setTimeout(function(){URL.revokeObjectURL(r.href)},4e4),setTimeout(function(){tr(r)},0))}function or(e,t=`download`,n){if(typeof e==`string`){if(er(e))$n(e,t,n);else{let t=document.createElement(`a`);t.href=e,t.target=`_blank`,setTimeout(function(){tr(t)})}}else navigator.msSaveOrOpenBlob(Qn(e,n),t)}function sr(e,t,n,r){if(r||=open(``,`_blank`),r&&(r.document.title=r.document.body.innerText=`downloading...`),typeof e==`string`)return $n(e,t,n);let i=e.type===`application/octet-stream`,a=/constructor/i.test(String(Zn.HTMLElement))||`safari`in Zn,o=/CriOS\/[\d]+/.test(navigator.userAgent);if((o||i&&a||rr)&&typeof FileReader<`u`){let t=new FileReader;t.onloadend=function(){let e=t.result;if(typeof e!=`string`)throw r=null,Error(`Wrong reader.result type`);e=o?e:e.replace(/^data:[^;]*;/,`data:attachment/file;`),r?r.location.href=e:location.assign(e),r=null},t.readAsDataURL(e)}else{let t=URL.createObjectURL(e);r?r.location.assign(t):location.href=t,r=null,setTimeout(function(){URL.revokeObjectURL(t)},4e4)}}var{assign:cr}=Object;function lr(){let e=a(!0),t=e.run(()=>m({})),n=[],r=[],i=c({install(e){Jn(i),i._a=e,e.provide(Yn,i),e.config.globalProperties.$pinia=i,r.forEach(e=>n.push(e)),r=[]},use(e){return this._a?n.push(e):r.push(e),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}var ur=()=>{};function dr(e,t,n,r=ur){e.add(t);let i=()=>{e.delete(t)&&r()};return!n&&u()&&d(i),i}function fr(e,...t){e.forEach(e=>{e(...t)})}var pr=e=>e(),mr=Symbol(),hr=Symbol();function gr(e,t){e instanceof Map&&t instanceof Map?t.forEach((t,n)=>e.set(n,t)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(let n in t){if(!Object.hasOwn(t,n))continue;let r=t[n],i=e[n];e[n]=Xn(i)&&Xn(r)&&Object.hasOwn(e,n)&&!p(r)&&!s(r)?gr(i,r):r}return e}var _r=Symbol();function vr(e){return!e||typeof e!=`object`||!Object.hasOwn(e,_r)}var{assign:yr}=Object;function br(e){return!!(p(e)&&e.effect)}function xr(e,n,r,i){let{state:a,actions:o,getters:s}=n,l=r.state.value[e],u;function d(){return l||(r.state.value[e]=a?a():{}),yr(t(r.state.value[e]),o,Object.keys(s||{}).reduce((t,n)=>(t[n]=c(j(()=>{Jn(r);let t=r._s.get(e);return s[n].call(t,t)})),t),{}))}return u=Sr(e,d,n,r,i,!0),u}function Sr(t,n,r={},i,o,c){let u,d=yr({actions:{}},r),f={deep:!0},m,h,g=new Set,v=new Set,y,b=i.state.value[t];!c&&!b&&(i.state.value[t]={});let S;function C(e){let n;m=h=!1,typeof e==`function`?(e(i.state.value[t]),n={type:`patch function`,storeId:t,events:y}):(gr(i.state.value[t],e),n={type:`patch object`,payload:e,storeId:t,events:y});let r=S=Symbol();x().then(()=>{S===r&&(m=!0)}),h=!0,fr(g,n,i.state.value[t])}let w=c?function(){let{state:e}=r,t=e?e():{};this.$patch(e=>{yr(e,t)})}:ur;function T(){u.stop(),g.clear(),v.clear(),i._s.delete(t)}let E=(e,n=``)=>{if(mr in e)return e[hr]=n,e;let r=function(){Jn(i);let n=Array.from(arguments),a=new Set,o=new Set;function s(e){a.add(e)}function c(e){o.add(e)}fr(v,{args:n,name:r[hr],store:O,after:s,onError:c});let l;try{l=e.apply(this&&this.$id===t?this:O,n)}catch(e){throw fr(o,e),e}return l instanceof Promise?l.then(e=>(fr(a,e),e)).catch(e=>(fr(o,e),Promise.reject(e))):(fr(a,l),l)};return r[mr]=!0,r[hr]=n,r},D={_p:i,$id:t,$onAction:dr.bind(null,v),$patch:C,$reset:w,$subscribe(e,n={}){if(g.has(e))return ur;let r=dr(g,e,n.detached,()=>a()),a=u.run(()=>_(()=>i.state.value[t],r=>{(n.flush===`sync`?h:m)&&e({storeId:t,type:`direct`,events:y},r)},yr({},f,n)));return r},$dispose:T},O=l(D);i._s.set(t,O);let k=(i._a&&i._a.runWithContext||pr)(()=>i._e.run(()=>(u=a()).run(()=>n({action:E}))));for(let e in k){let n=k[e];p(n)&&!br(n)||s(n)?c||(b&&vr(n)&&(p(n)?n.value=b[e]:((n instanceof Set||n instanceof Map)&&n.clear(),gr(n,b[e]))),i.state.value[t][e]=n):typeof n==`function`&&(k[e]=E(n,e),d.actions[e]=n)}return yr(O,k),yr(e(O),k),Object.defineProperty(O,"$state",{get:()=>i.state.value[t],set:e=>{C(t=>{yr(t,e)})}}),i._p.forEach(e=>{let t=u.run(()=>e({store:O,app:i._a,pinia:i,options:d}));yr(O,t)}),b&&c&&r.hydrate&&r.hydrate(O.$state,b),m=!0,h=!0,O}function Cr(e,t,n){let r,i=typeof t==`function`;r=i?n:t;function a(n,a){let o=ae();return n||=o?w(Yn,null):null,n&&Jn(n),n=qn,n._s.has(e)||(i?Sr(e,t,r,n):xr(e,r,n)),n._s.get(e)}return a.$id=e,a}function wr(t){let r=e(t),i={};for(let e in r){let a=r[e];a?.effect?i[e]=j({get:()=>t[e],set(n){t[e]=n}}):(p(a)||s(a))&&(i[e]=n(t,e))}return i}var Tr=typeof window<`u`,Er=(e,t=!1)=>t?Symbol.for(e):Symbol(e),Dr=(e,t,n)=>Or({l:e,k:t,s:n}),Or=e=>JSON.stringify(e).replace(/\u2028/g,`\\u2028`).replace(/\u2029/g,`\\u2029`).replace(/\u0027/g,`\\u0027`),I=e=>typeof e==`number`&&isFinite(e),kr=e=>zr(e)===`[object Date]`,Ar=e=>zr(e)===`[object RegExp]`,jr=e=>W(e)&&Object.keys(e).length===0,L=Object.assign,Mr=Object.create,R=(e=null)=>Mr(e),Nr,Pr=()=>Nr||=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:R(),Fr=Object.prototype.hasOwnProperty;function Ir(e,t){return Fr.call(e,t)}var z=Array.isArray,B=e=>typeof e==`function`,V=e=>typeof e==`string`,H=e=>typeof e==`boolean`,U=e=>typeof e==`object`&&!!e,Lr=e=>U(e)&&B(e.then)&&B(e.catch),Rr=Object.prototype.toString,zr=e=>Rr.call(e),W=e=>zr(e)===`[object Object]`,Br=e=>e==null?``:z(e)||W(e)&&e.toString===Rr?JSON.stringify(e,null,2):String(e);function Vr(e,t=``){return e.reduce((e,n,r)=>r===0?e+n:e+t+n,``)}function Hr(e,t){typeof console<`u`&&(console.warn(`[intlify] `+e),t&&console.warn(t.stack))}function Ur(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&apos;`).replace(/\//g,`&#x2F;`).replace(/=/g,`&#x3D;`)}function Wr(e){return e.replace(/&(?![a-z0-9#]{2,6};)/gi,`&amp;`).replace(/"/g,`&quot;`).replace(/'/g,`&apos;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}var Gr=/^javascript:/i,Kr=/^(?:href|src|action|formaction)$/i,qr=/&#(?:x([0-9a-f]+)|(\d+));?/gi,Jr=/&(?:Tab|NewLine);/g,Yr=/&colon;?/gi,Xr=/[\u0000-\u0020\u007f-\u009f]/g,Zr=/(?:^|[\s"'<>/])on\w+\s*=\s*["']?[^"'>]+["']?/i,Qr=/(^|[\s"'<>/])on(\w+\s*=)/gi,$r=/(^|[\s"'<>/])((?:href|src|action|formaction)\s*=\s*)([^\s"'=<>`]+)/gi;function ei(e,t,n){let r=t||n;if(!r)return e;let i=Number.parseInt(r,t?16:10);return i<=127?String.fromCharCode(i):e}function ti(e){let t=e.replace(qr,ei).replace(Jr,``).replace(Yr,`:`).replace(Xr,``);return Gr.test(t)}function ni(e){let t=/url\s*\(/gi,n=``,r=0,i;for(;(i=t.exec(e))!==null;){let a=i.index,o=t.lastIndex-1,s=o+1,c=1,l=null;for(;s<e.length;s++){let t=e[s];if(l){t===l&&(l=null);continue}if(t===`"`||t===`'`)l=t;else if(t===`(`)c++;else if(t===`)`&&(c--,c===0))break}if(c!==0)break;let u=e.slice(o+1,s).trim(),d=u.startsWith(`"`)&&u.endsWith(`"`)||u.startsWith(`'`)&&u.endsWith(`'`)?u.slice(1,-1).trim():u;n+=e.slice(r,a),n+=ti(d)?`url(about:blank)`:e.slice(a,s+1),r=s+1}return n+e.slice(r)}function ri(e,t){return Kr.test(e)&&ti(t)?`about:blank`:Wr(e.toLowerCase()===`style`?ni(t):t)}function ii(e){return e=e.replace(/([\w:-]+)\s*=\s*"([^"]*)"/g,(e,t,n)=>`${t}="${ri(t,n)}"`),e=e.replace(/([\w:-]+)\s*=\s*'([^']*)'/g,(e,t,n)=>`${t}='${ri(t,n)}'`),Zr.test(e)&&(e=e.replace(Qr,`$1&#111;n$2`)),e=e.replace($r,(e,t,n,r)=>ti(r)?`${t}${n}about:blank`:e),e}var ai=e=>!U(e)||z(e);function oi(e,t){if(ai(e)||ai(t))throw Error(`Invalid value`);let n=[{src:e,des:t}];for(;n.length;){let{src:e,des:t}=n.pop();Object.keys(e).forEach(r=>{if(r===`__proto__`)return;let i=e[r];if(z(i)){let e=[];e.length=i.length,t[r]=e,n.push({src:i,des:e})}else U(i)?((!U(t[r])||z(t[r]))&&(t[r]=R()),n.push({src:i,des:t[r]})):t[r]=i})}}function si(e,t,n){return{line:e,column:t,offset:n}}function ci(e,t,n){let r={start:e,end:t};return n!=null&&(r.source=n),r}var G={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16};G.EXPECTED_TOKEN,G.INVALID_TOKEN_IN_PLACEHOLDER,G.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,G.UNKNOWN_ESCAPE_SEQUENCE,G.INVALID_UNICODE_ESCAPE_SEQUENCE,G.UNBALANCED_CLOSING_BRACE,G.UNTERMINATED_CLOSING_BRACE,G.EMPTY_PLACEHOLDER,G.NOT_ALLOW_NEST_PLACEHOLDER,G.INVALID_LINKED_FORMAT,G.MUST_HAVE_MESSAGES_IN_PLURAL,G.UNEXPECTED_EMPTY_LINKED_MODIFIER,G.UNEXPECTED_EMPTY_LINKED_KEY,G.UNEXPECTED_LEXICAL_ANALYSIS,G.UNHANDLED_CODEGEN_NODE_TYPE,G.UNHANDLED_MINIFIER_NODE_TYPE;function li(e,t,n={}){let{domain:r,messages:i,args:a}=n,o=SyntaxError(String(e));return o.code=e,t&&(o.location=t),o.domain=r,o}function ui(e){throw e}var di=` `,fi=`\r`,pi=`
3
3
  `,mi=`\u2028`,hi=`\u2029`;function gi(e){let t=e,n=0,r=1,i=1,a=0,o=e=>t[e]===fi&&t[e+1]===pi,s=e=>t[e]===pi,c=e=>t[e]===hi,l=e=>t[e]===mi,u=e=>o(e)||s(e)||c(e)||l(e),d=()=>n,f=()=>r,p=()=>i,m=()=>a,h=e=>o(e)||c(e)||l(e)?pi:t[e],g=()=>h(n),_=()=>h(n+a);function v(){return a=0,u(n)&&(r++,i=0),o(n)&&n++,n++,i++,t[n]}function y(){return o(n+a)&&a++,a++,t[n+a]}function b(){n=0,r=1,i=1,a=0}function x(e=0){a=e}function S(){let e=n+a;for(;e!==n;)v();a=0}return{index:d,line:f,column:p,peekOffset:m,charAt:h,currentChar:g,currentPeek:_,next:v,peek:y,reset:b,resetPeek:x,skipToPeek:S}}var _i=void 0,vi=`'`,yi=`tokenizer`;function bi(e,t={}){let n=t.location!==!1,r=gi(e),i=()=>r.index(),a=()=>si(r.line(),r.column(),r.index()),o=a(),s=i(),c={currentType:13,offset:s,startLoc:o,endLoc:o,lastType:13,lastOffset:s,lastStartLoc:o,lastEndLoc:o,braceNest:0,inLinked:!1,text:``},l=()=>c,{onError:u}=t;function d(e,t,r,...i){let a=l();if(t.column+=r,t.offset+=r,u){let r=li(e,n?ci(a.startLoc,t):null,{domain:yi,args:i});u(r)}}function f(e,t,r){e.endLoc=a(),e.currentType=t;let i={type:t};return n&&(i.loc=ci(e.startLoc,e.endLoc)),r!=null&&(i.value=r),i}let p=e=>f(e,13);function m(e,t){return e.currentChar()===t?(e.next(),t):(d(G.EXPECTED_TOKEN,a(),0,t),``)}function h(e){let t=``;for(;e.currentPeek()===di||e.currentPeek()===pi;)t+=e.currentPeek(),e.peek();return t}function g(e){let t=h(e);return e.skipToPeek(),t}function _(e){if(e===_i)return!1;let t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t===95}function v(e){if(e===_i)return!1;let t=e.charCodeAt(0);return t>=48&&t<=57}function y(e,t){let{currentType:n}=t;if(n!==2)return!1;h(e);let r=_(e.currentPeek());return e.resetPeek(),r}function b(e,t){let{currentType:n}=t;if(n!==2)return!1;h(e);let r=v(e.currentPeek()===`-`?e.peek():e.currentPeek());return e.resetPeek(),r}function x(e,t){let{currentType:n}=t;if(n!==2)return!1;h(e);let r=e.currentPeek()===vi;return e.resetPeek(),r}function S(e,t){let{currentType:n}=t;if(n!==7)return!1;h(e);let r=e.currentPeek()===`.`;return e.resetPeek(),r}function C(e,t){let{currentType:n}=t;if(n!==8)return!1;h(e);let r=_(e.currentPeek());return e.resetPeek(),r}function w(e,t){let{currentType:n}=t;if(n!==7&&n!==11)return!1;h(e);let r=e.currentPeek()===`:`;return e.resetPeek(),r}function T(e,t){let{currentType:n}=t;if(n!==9)return!1;let r=()=>{let t=e.currentPeek();return t===`{`?_(e.peek()):t===`@`||t===`|`||t===`:`||t===`.`||t===di||!t?!1:t===pi?(e.peek(),r()):D(e,!1)},i=r();return e.resetPeek(),i}function E(e){h(e);let t=e.currentPeek()===`|`;return e.resetPeek(),t}function D(e,t=!0){let n=(t=!1,r=``)=>{let i=e.currentPeek();return i===`{`||i===`@`||!i?t:i===`|`?r!==di&&r!==pi:i===di?(e.peek(),n(!0,di)):i!==pi||(e.peek(),n(!0,pi))},r=n();return t&&e.resetPeek(),r}function O(e,t){let n=e.currentChar();if(n!==_i)return t(n)?(e.next(),n):null}function k(e){let t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t>=48&&t<=57||t===95||t===36}function A(e){return O(e,k)}function ee(e){let t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t>=48&&t<=57||t===95||t===36||t===45}function te(e){return O(e,ee)}function j(e){let t=e.charCodeAt(0);return t>=48&&t<=57}function ne(e){return O(e,j)}function M(e){let t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function re(e){return O(e,M)}function ie(e){let t=``,n=``;for(;t=ne(e);)n+=t;return n}function ae(e){let t=``;for(;;){let n=e.currentChar();if(n===`\\`){let r=e.peek();r===`{`||r===`}`||r===`@`||r===`|`||r===`\\`?(t+=n+r,e.next(),e.next()):(e.resetPeek(),t+=n,e.next())}else if(n===`{`||n===`}`||n===`@`||n===`|`||!n)break;else if(n===di||n===pi){if(D(e))t+=n,e.next();else if(E(e))break;else t+=n,e.next()}else t+=n,e.next()}return t}function N(e){g(e);let t=``,n=``;for(;t=te(e);)n+=t;let r=e.currentChar();if(r&&r!==`}`&&r!==_i&&r!==di&&r!==pi&&r!==` `){let t=fe(e);return d(G.INVALID_TOKEN_IN_PLACEHOLDER,a(),0,n+t),n+t}return e.currentChar()===_i&&d(G.UNTERMINATED_CLOSING_BRACE,a(),0),n}function oe(e){g(e);let t=``;return e.currentChar()===`-`?(e.next(),t+=`-${ie(e)}`):t+=ie(e),e.currentChar()===_i&&d(G.UNTERMINATED_CLOSING_BRACE,a(),0),t}function se(e){return e!==vi&&e!==pi}function ce(e){g(e),m(e,`'`);let t=``,n=``;for(;t=O(e,se);)n+=t===`\\`?le(e):t;let r=e.currentChar();return r===pi||r===_i?(d(G.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,a(),0),r===pi&&(e.next(),m(e,`'`)),n):(m(e,`'`),n)}function le(e){let t=e.currentChar();switch(t){case`\\`:case`'`:return e.next(),`\\${t}`;case`u`:return ue(e,t,4);case`U`:return ue(e,t,6);default:return d(G.UNKNOWN_ESCAPE_SEQUENCE,a(),0,t),``}}function ue(e,t,n){m(e,t);let r=``;for(let i=0;i<n;i++){let n=re(e);if(!n){d(G.INVALID_UNICODE_ESCAPE_SEQUENCE,a(),0,`\\${t}${r}${e.currentChar()}`);break}r+=n}return`\\${t}${r}`}function de(e){return e!==`{`&&e!==`}`&&e!==di&&e!==pi}function fe(e){g(e);let t=``,n=``;for(;t=O(e,de);)n+=t;return n}function pe(e){let t=``,n=``;for(;t=A(e);)n+=t;return n}function P(e){let t=n=>{let r=e.currentChar();return r===`{`||r===`@`||r===`|`||r===`(`||r===`)`||!r||r===di?n:(n+=r,e.next(),t(n))};return t(``)}function me(e){g(e);let t=m(e,`|`);return g(e),t}function he(e,t){let n=null;switch(e.currentChar()){case`{`:return t.braceNest>=1&&d(G.NOT_ALLOW_NEST_PLACEHOLDER,a(),0),e.next(),n=f(t,2,`{`),g(e),t.braceNest++,n;case`}`:return t.braceNest>0&&t.currentType===2&&d(G.EMPTY_PLACEHOLDER,a(),0),e.next(),n=f(t,3,`}`),t.braceNest--,t.braceNest>0&&g(e),t.inLinked&&t.braceNest===0&&(t.inLinked=!1),n;case`@`:return t.braceNest>0&&d(G.UNTERMINATED_CLOSING_BRACE,a(),0),n=ge(e,t)||p(t),t.braceNest=0,n;default:{let r=!0,i=!0,o=!0;if(E(e))return t.braceNest>0&&d(G.UNTERMINATED_CLOSING_BRACE,a(),0),n=f(t,1,me(e)),t.braceNest=0,t.inLinked=!1,n;if(t.braceNest>0&&(t.currentType===4||t.currentType===5||t.currentType===6))return d(G.UNTERMINATED_CLOSING_BRACE,a(),0),t.braceNest=0,_e(e,t);if(r=y(e,t))return n=f(t,4,N(e)),g(e),n;if(i=b(e,t))return n=f(t,5,oe(e)),g(e),n;if(o=x(e,t))return n=f(t,6,ce(e)),g(e),n;if(!r&&!i&&!o)return n=f(t,12,fe(e)),d(G.INVALID_TOKEN_IN_PLACEHOLDER,a(),0,n.value),g(e),n;break}}return n}function ge(e,t){let{currentType:n}=t,r=null,i=e.currentChar();switch((n===7||n===8||n===11||n===9)&&(i===pi||i===di)&&d(G.INVALID_LINKED_FORMAT,a(),0),i){case`@`:return e.next(),r=f(t,7,`@`),t.inLinked=!0,r;case`.`:return g(e),e.next(),f(t,8,`.`);case`:`:return g(e),e.next(),f(t,9,`:`);default:return E(e)?(r=f(t,1,me(e)),t.braceNest=0,t.inLinked=!1,r):S(e,t)||w(e,t)?(g(e),ge(e,t)):C(e,t)?(g(e),f(t,11,pe(e))):T(e,t)?(g(e),i===`{`?he(e,t)||r:f(t,10,P(e))):(n===7&&d(G.INVALID_LINKED_FORMAT,a(),0),t.braceNest=0,t.inLinked=!1,_e(e,t))}}function _e(e,t){let n={type:13};if(t.braceNest>0)return he(e,t)||p(t);if(t.inLinked)return ge(e,t)||p(t);switch(e.currentChar()){case`{`:return he(e,t)||p(t);case`}`:return d(G.UNBALANCED_CLOSING_BRACE,a(),0),e.next(),f(t,3,`}`);case`@`:return ge(e,t)||p(t);default:if(E(e))return n=f(t,1,me(e)),t.braceNest=0,t.inLinked=!1,n;if(D(e))return f(t,0,ae(e))}return n}function ve(){let{currentType:e,offset:t,startLoc:n,endLoc:o}=c;return c.lastType=e,c.lastOffset=t,c.lastStartLoc=n,c.lastEndLoc=o,c.offset=i(),c.startLoc=a(),r.currentChar()===_i?f(c,13):_e(r,c)}return{nextToken:ve,currentOffset:i,currentPosition:a,context:l}}var xi=`parser`,Si=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g,Ci=/\\([\\@{}|])/g;function wi(e,t){return t}function Ti(e,t,n){switch(e){case`\\\\`:return`\\`;case`\\'`:return`'`;default:{let e=parseInt(t||n,16);return e<=55295||e>=57344?String.fromCodePoint(e):`�`}}}function Ei(e={}){let t=e.location!==!1,{onError:n}=e;function r(e,r,i,a,...o){let s=e.currentPosition();if(s.offset+=a,s.column+=a,n){let e=li(r,t?ci(i,s):null,{domain:xi,args:o});n(e)}}function i(e,n,r){let i={type:e};return t&&(i.start=n,i.end=n,i.loc={start:r,end:r}),i}function a(e,n,r,i){t&&(e.end=n,e.loc&&(e.loc.end=r))}function o(e,t){let n=e.context(),r=i(3,n.offset,n.startLoc);return r.value=t.replace(Ci,wi),a(r,e.currentOffset(),e.currentPosition()),r}function s(e,t){let{lastOffset:n,lastStartLoc:r}=e.context(),o=i(5,n,r);return o.index=parseInt(t,10),e.nextToken(),a(o,e.currentOffset(),e.currentPosition()),o}function c(e,t){let{lastOffset:n,lastStartLoc:r}=e.context(),o=i(4,n,r);return o.key=t,e.nextToken(),a(o,e.currentOffset(),e.currentPosition()),o}function l(e,t){let{lastOffset:n,lastStartLoc:r}=e.context(),o=i(9,n,r);return o.value=t.replace(Si,Ti),e.nextToken(),a(o,e.currentOffset(),e.currentPosition()),o}function u(e){let t=e.nextToken(),n=e.context(),{lastOffset:o,lastStartLoc:s}=n,c=i(8,o,s);return t.type===11?(t.value??r(e,G.UNEXPECTED_LEXICAL_ANALYSIS,n.lastStartLoc,0,Di(t)),c.value=t.value||``,a(c,e.currentOffset(),e.currentPosition()),{node:c}):(r(e,G.UNEXPECTED_EMPTY_LINKED_MODIFIER,n.lastStartLoc,0),c.value=``,a(c,o,s),{nextConsumeToken:t,node:c})}function d(e,t){let n=e.context(),r=i(7,n.offset,n.startLoc);return r.value=t,a(r,e.currentOffset(),e.currentPosition()),r}function f(e){let t=e.context(),n=i(6,t.offset,t.startLoc),o=e.nextToken();if(o.type===8){let t=u(e);n.modifier=t.node,o=t.nextConsumeToken||e.nextToken()}switch(o.type!==9&&r(e,G.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Di(o)),o=e.nextToken(),o.type===2&&(o=e.nextToken()),o.type){case 10:o.value??r(e,G.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Di(o)),n.key=d(e,o.value||``);break;case 4:o.value??r(e,G.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Di(o)),n.key=c(e,o.value||``);break;case 5:o.value??r(e,G.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Di(o)),n.key=s(e,o.value||``);break;case 6:o.value??r(e,G.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Di(o)),n.key=l(e,o.value||``);break;default:{r(e,G.UNEXPECTED_EMPTY_LINKED_KEY,t.lastStartLoc,0);let s=e.context(),c=i(7,s.offset,s.startLoc);return c.value=``,a(c,s.offset,s.startLoc),n.key=c,a(n,s.offset,s.startLoc),{nextConsumeToken:o,node:n}}}return a(n,e.currentOffset(),e.currentPosition()),{node:n}}function p(e){let t=e.context(),n=i(2,t.currentType===1?e.currentOffset():t.offset,t.currentType===1?t.endLoc:t.startLoc);n.items=[];let u=null;do{let i=u||e.nextToken();switch(u=null,i.type){case 0:i.value??r(e,G.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Di(i)),n.items.push(o(e,i.value||``));break;case 5:i.value??r(e,G.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Di(i)),n.items.push(s(e,i.value||``));break;case 4:i.value??r(e,G.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Di(i)),n.items.push(c(e,i.value||``));break;case 6:i.value??r(e,G.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,0,Di(i)),n.items.push(l(e,i.value||``));break;case 7:{let t=f(e);n.items.push(t.node),u=t.nextConsumeToken||null;break}}}while(t.currentType!==13&&t.currentType!==1);return a(n,t.currentType===1?t.lastOffset:e.currentOffset(),t.currentType===1?t.lastEndLoc:e.currentPosition()),n}function m(e,t,n,o){let s=e.context(),c=o.items.length===0,l=i(1,t,n);l.cases=[],l.cases.push(o);do{let t=p(e);c||=t.items.length===0,l.cases.push(t)}while(s.currentType!==13);return c&&r(e,G.MUST_HAVE_MESSAGES_IN_PLURAL,n,0),a(l,e.currentOffset(),e.currentPosition()),l}function h(e){let t=e.context(),{offset:n,startLoc:r}=t,i=p(e);return t.currentType===13?i:m(e,n,r,i)}function g(n){let o=bi(n,L({},e)),s=o.context(),c=i(0,s.offset,s.startLoc);return t&&c.loc&&(c.loc.source=n),c.body=h(o),e.onCacheKey&&(c.cacheKey=e.onCacheKey(n)),s.currentType!==13&&r(o,G.UNEXPECTED_LEXICAL_ANALYSIS,s.lastStartLoc,0,n[s.offset]||``),a(c,o.currentOffset(),o.currentPosition()),c}return{parse:g}}function Di(e){if(e.type===13)return`EOF`;let t=(e.value||``).replace(/\r?\n/gu,`\\n`);return t.length>10?t.slice(0,9)+`…`:t}function Oi(e,t={}){let n={ast:e,helpers:new Set};return{context:()=>n,helper:e=>(n.helpers.add(e),e)}}function ki(e,t){for(let n=0;n<e.length;n++)Ai(e[n],t)}function Ai(e,t){switch(e.type){case 1:ki(e.cases,t),t.helper(`plural`);break;case 2:ki(e.items,t);break;case 6:Ai(e.key,t),t.helper(`linked`),t.helper(`type`);break;case 5:t.helper(`interpolate`),t.helper(`list`);break;case 4:t.helper(`interpolate`),t.helper(`named`)}}function ji(e,t={}){let n=Oi(e);n.helper(`normalize`),e.body&&Ai(e.body,n);let r=n.context();e.helpers=Array.from(r.helpers)}function Mi(e){let t=e.body;return t.type===2?Ni(t):t.cases.forEach(e=>Ni(e)),e}function Ni(e){if(e.items.length===1){let t=e.items[0];(t.type===3||t.type===9)&&(e.static=t.value,delete t.value)}else{let t=[];for(let n=0;n<e.items.length;n++){let r=e.items[n];if(r.type!==3&&r.type!==9||r.value==null)break;t.push(r.value)}if(t.length===e.items.length){e.static=Vr(t);for(let t=0;t<e.items.length;t++){let n=e.items[t];(n.type===3||n.type===9)&&delete n.value}}}}function Pi(e){switch(e.t=e.type,e.type){case 0:{let t=e;Pi(t.body),t.b=t.body,delete t.body;break}case 1:{let t=e,n=t.cases;for(let e=0;e<n.length;e++)Pi(n[e]);t.c=n,delete t.cases;break}case 2:{let t=e,n=t.items;for(let e=0;e<n.length;e++)Pi(n[e]);t.i=n,delete t.items,t.static&&(t.s=t.static,delete t.static);break}case 3:case 9:case 8:case 7:{let t=e;t.value&&(t.v=t.value,delete t.value);break}case 6:{let t=e;Pi(t.key),t.k=t.key,delete t.key,t.modifier&&(Pi(t.modifier),t.m=t.modifier,delete t.modifier);break}case 5:{let t=e;t.i=t.index,delete t.index;break}case 4:{let t=e;t.k=t.key,delete t.key;break}}delete e.type}function Fi(e,t){let{filename:n,breakLineCode:r,needIndent:i}=t,a=t.location!==!1,o={filename:n,code:``,column:1,line:1,offset:0,map:void 0,breakLineCode:r,needIndent:i,indentLevel:0};a&&e.loc&&(o.source=e.loc.source);let s=()=>o;function c(e,t){o.code+=e}function l(e,t=!0){let n=t?r:``;c(i?n+` `.repeat(e):n)}function u(e=!0){let t=++o.indentLevel;e&&l(t)}function d(e=!0){let t=--o.indentLevel;e&&l(t)}function f(){l(o.indentLevel)}return{context:s,push:c,indent:u,deindent:d,newline:f,helper:e=>`_${e}`,needIndent:()=>o.needIndent}}function Ii(e,t){let{helper:n}=e;e.push(`${n(`linked`)}(`),Bi(e,t.key),t.modifier?(e.push(`, `),Bi(e,t.modifier),e.push(`, _type`)):e.push(`, undefined, _type`),e.push(`)`)}function Li(e,t){let{helper:n,needIndent:r}=e;e.push(`${n(`normalize`)}([`),e.indent(r());let i=t.items.length;for(let n=0;n<i&&(Bi(e,t.items[n]),n!==i-1);n++)e.push(`, `);e.deindent(r()),e.push(`])`)}function Ri(e,t){let{helper:n,needIndent:r}=e;if(t.cases.length>1){e.push(`${n(`plural`)}([`),e.indent(r());let i=t.cases.length;for(let n=0;n<i&&(Bi(e,t.cases[n]),n!==i-1);n++)e.push(`, `);e.deindent(r()),e.push(`])`)}}function zi(e,t){t.body?Bi(e,t.body):e.push(`null`)}function Bi(e,t){let{helper:n}=e;switch(t.type){case 0:zi(e,t);break;case 1:Ri(e,t);break;case 2:Li(e,t);break;case 6:Ii(e,t);break;case 8:e.push(JSON.stringify(t.value),t);break;case 7:e.push(JSON.stringify(t.value),t);break;case 5:e.push(`${n(`interpolate`)}(${n(`list`)}(${t.index}))`,t);break;case 4:e.push(`${n(`interpolate`)}(${n(`named`)}(${JSON.stringify(t.key)}))`,t);break;case 9:e.push(JSON.stringify(t.value),t);break;case 3:e.push(JSON.stringify(t.value),t)}}var Vi=(e,t={})=>{let n=V(t.mode)?t.mode:`normal`,r=V(t.filename)?t.filename:`message.intl`;t.sourceMap;let i=t.breakLineCode==null?n===`arrow`?`;`:`
4
- `:t.breakLineCode,a=t.needIndent?t.needIndent:n!==`arrow`,o=e.helpers||[],s=Fi(e,{filename:r,breakLineCode:i,needIndent:a});s.push(n===`normal`?`function __msg__ (ctx) {`:`(ctx) => {`),s.indent(a),o.length>0&&(s.push(`const { ${Vr(o.map(e=>`${e}: _${e}`),`, `)} } = ctx`),s.newline()),s.push(`return `),Bi(s,e),s.deindent(a),s.push(`}`),delete e.helpers;let{code:c,map:l}=s.context();return{ast:e,code:c,map:l?l.toJSON():void 0}};function Hi(e,t={}){let n=L({},t),r=!!n.jit,i=!!n.minify,a=n.optimize==null||n.optimize,o=Ei(n).parse(e);return r?(a&&Mi(o),i&&Pi(o),{ast:o,code:``}):(ji(o,n),Vi(o,n))}function Ui(){typeof __INTLIFY_DROP_MESSAGE_COMPILER__!=`boolean`&&(Pr().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function Wi(e){return U(e)&&ea(e)===0&&(Ir(e,`b`)||Ir(e,`body`))}var Gi=[`b`,`body`];function Ki(e){return sa(e,Gi)}var qi=[`c`,`cases`];function Ji(e){return sa(e,qi,[])}var Yi=[`s`,`static`];function Xi(e){return sa(e,Yi)}var Zi=[`i`,`items`];function Qi(e){return sa(e,Zi,[])}var $i=[`t`,`type`];function ea(e){return sa(e,$i)}var ta=[`v`,`value`];function na(e,t){let n=sa(e,ta);if(n!=null)return n;throw la(t)}var ra=[`m`,`modifier`];function ia(e){return sa(e,ra)}var aa=[`k`,`key`];function oa(e){let t=sa(e,aa);if(t)return t;throw la(6)}function sa(e,t,n){for(let n=0;n<t.length;n++){let r=t[n];if(Ir(e,r)&&e[r]!=null)return e[r]}return n}var ca=[...Gi,...qi,...Yi,...Zi,...aa,...ra,...ta,...$i];function la(e){return Error(`unhandled node type: ${e}`)}function ua(e){return t=>da(t,e)}function da(e,t){let n=Ki(t);if(n==null)throw la(0);if(ea(n)===1){let t=Ji(n);return e.plural(t.reduce((t,n)=>[...t,fa(e,n)],[]))}return fa(e,n)}function fa(e,t){let n=Xi(t);if(n!=null)return e.type===`text`?n:e.normalize([n]);{let n=Qi(t).reduce((t,n)=>[...t,pa(e,n)],[]);return e.normalize(n)}}function pa(e,t){let n=ea(t);switch(n){case 3:return na(t,n);case 9:return na(t,n);case 4:{let r=t;if(Ir(r,`k`)&&r.k)return e.interpolate(e.named(r.k));if(Ir(r,`key`)&&r.key)return e.interpolate(e.named(r.key));throw la(n)}case 5:{let r=t;if(Ir(r,`i`)&&I(r.i))return e.interpolate(e.list(r.i));if(Ir(r,`index`)&&I(r.index))return e.interpolate(e.list(r.index));throw la(n)}case 6:{let n=t,r=ia(n),i=oa(n);return e.linked(pa(e,i),r?pa(e,r):void 0,e.type)}case 7:return na(t,n);case 8:return na(t,n);default:throw Error(`unhandled node on format message part: ${n}`)}}var ma=e=>e,ha=R();function ga(e,t={}){let n=!1,r=t.onError||ui;return t.onError=e=>{n=!0,r(e)},{...Hi(e,t),detectError:n}}function _a(e,t){if(!__INTLIFY_DROP_MESSAGE_COMPILER__&&V(e)){H(t.warnHtmlMessage)&&t.warnHtmlMessage;let n=(t.onCacheKey||ma)(e),r=ha[n];if(r)return r;let{ast:i,detectError:a}=ga(e,{...t,location:!1,jit:!0}),o=ua(i);return a?o:ha[n]=o}{let t=e.cacheKey;return t?ha[t]||(ha[t]=ua(e)):ua(e)}}var va={INVALID_ARGUMENT:17,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_NON_STRING_MESSAGE:20,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23};function ya(e){return li(e,null,void 0)}va.INVALID_ARGUMENT,va.INVALID_DATE_ARGUMENT,va.INVALID_ISO_DATE_ARGUMENT,va.NOT_SUPPORT_NON_STRING_MESSAGE,va.NOT_SUPPORT_LOCALE_PROMISE_VALUE,va.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION,va.NOT_SUPPORT_LOCALE_TYPE;function ba(e,t){return t.locale==null?Sa(e.locale):Sa(t.locale)}var xa;function Sa(e){if(V(e))return e;if(B(e)){if(e.resolvedOnce&&xa!=null)return xa;if(e.constructor.name===`Function`){let t=e();if(Lr(t))throw ya(va.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return xa=t}throw ya(va.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}throw ya(va.NOT_SUPPORT_LOCALE_TYPE)}function Ca(e,t,n){return[...new Set([n,...z(t)?t:U(t)?Object.keys(t).filter(e=>e!=="default"):V(t)?[t]:[n]])]}function wa(e,t,n){let r=V(n)?n:Ba,i=e,a;U(t)?(i.__localeChainObjectCache||=new WeakMap,a=i.__localeChainObjectCache.get(t),a||(a=new Map,i.__localeChainObjectCache.set(t,a))):(i.__localeChainCache||=new Map,a=i.__localeChainCache.get(t),a||(a=new Map,i.__localeChainCache.set(t,a)));let o=a.get(r);if(o)return o;let s=[],c=[n];for(;z(c);)c=Ta(s,c,t);let l=z(t)||!W(t)?t:t.default?t.default:null;return c=V(l)?[l]:l,z(c)&&Ta(s,c,!1),a.set(r,s),s}function Ta(e,t,n){let r=!0;for(let i=0;i<t.length&&H(r);i++){let a=t[i];V(a)&&(r=Ea(e,t[i],n))}return r}function Ea(e,t,n){let r,i=t.split(`-`);do r=Da(e,i.join(`-`),n),i.splice(-1,1);while(i.length&&r===!0);return r}function Da(e,t,n){let r=!1;if(!e.includes(t)&&(r=!0,t)){r=t[t.length-1]!==`!`;let i=t.replace(/!/g,``);e.push(i),(z(n)||W(n))&&n[i]&&(r=n[i])}return r}var Oa=[];Oa[0]={w:[0],i:[3,0],"[":[4],o:[7]},Oa[1]={w:[1],".":[2],"[":[4],o:[7]},Oa[2]={w:[2],i:[3,0],0:[3,0]},Oa[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]},Oa[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]},Oa[5]={"'":[4,0],o:8,l:[5,0]},Oa[6]={'"':[4,0],o:8,l:[6,0]};var ka=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function Aa(e){return ka.test(e)}function ja(e){let t=e.charCodeAt(0);return t===e.charCodeAt(e.length-1)&&(t===34||t===39)?e.slice(1,-1):e}function Ma(e){if(e==null)return`o`;switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return`i`;case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return`w`}return`i`}function Na(e){let t=e.trim();return e.charAt(0)===`0`&&isNaN(parseInt(e))?!1:Aa(t)?ja(t):`*`+t}function Pa(e){let t=[],n=-1,r=0,i=0,a,o,s,c,l,u,d,f=[];f[0]=()=>{o===void 0?o=s:o+=s},f[1]=()=>{o!==void 0&&(t.push(o),o=void 0)},f[2]=()=>{f[0](),i++},f[3]=()=>{if(i>0)i--,r=4,f[0]();else{if(i=0,o===void 0||(o=Na(o),o===!1))return!1;f[1]()}};function p(){let t=e[n+1];if(r===5&&t===`'`||r===6&&t===`"`)return n++,s=`\\`+t,f[0](),!0}for(;r!==null;)if(n++,a=e[n],!(a===`\\`&&p())){if(c=Ma(a),d=Oa[r],l=d[c]||d.l||8,l===8||(r=l[0],l[1]!==void 0&&(u=f[l[1]],u&&(s=a,u()===!1))))return;if(r===7)return t}}var Fa=new Map;function Ia(e,t){return U(e)?e[t]:null}function La(e,t){if(!U(e))return null;let n=Fa.get(t);if(n||(n=Pa(t),n&&Fa.set(t,n)),!n)return null;let r=n.length,i=e,a=0;for(;a<r;){let e=n[a];if(ca.includes(e)&&Wi(i)||!U(i)||!Ir(i,e))return null;let t=i[e];if(t===void 0||B(i))return null;i=t,a++}return i}var Ra={NOT_FOUND_KEY:1,FALLBACK_TO_TRANSLATE:2,CANNOT_FORMAT_NUMBER:3,FALLBACK_TO_NUMBER_FORMAT:4,CANNOT_FORMAT_DATE:5,FALLBACK_TO_DATE_FORMAT:6,EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER:7,INVALID_NUMBER_ARGUMENT:8,INVALID_DATE_ARGUMENT:9};Ra.NOT_FOUND_KEY,Ra.FALLBACK_TO_TRANSLATE,Ra.CANNOT_FORMAT_NUMBER,Ra.FALLBACK_TO_NUMBER_FORMAT,Ra.CANNOT_FORMAT_DATE,Ra.FALLBACK_TO_DATE_FORMAT,Ra.EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER,Ra.INVALID_NUMBER_ARGUMENT,Ra.INVALID_DATE_ARGUMENT;var za=`11.4.12`,Ba=`en-US`,Va=e=>`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function Ha(){return{upper:(e,t)=>t===`text`&&V(e)?e.toUpperCase():t===`vnode`&&U(e)&&`__v_isVNode`in e?e.children.toUpperCase():e,lower:(e,t)=>t===`text`&&V(e)?e.toLowerCase():t===`vnode`&&U(e)&&`__v_isVNode`in e?e.children.toLowerCase():e,capitalize:(e,t)=>t===`text`&&V(e)?Va(e):t===`vnode`&&U(e)&&`__v_isVNode`in e?Va(e.children):e}}var Ua;function Wa(e){Ua=e}var Ga;function Ka(e){Ga=e}var qa;function Ja(e){qa=e}var Ya=null,Xa=e=>{Ya=e},Za=()=>Ya,Qa=0;function $a(e={}){let t=B(e.onWarn)?e.onWarn:Hr,n=V(e.version)?e.version:za,r=V(e.locale)||B(e.locale)?e.locale:Ba,i=B(r)?Ba:r,a=z(e.fallbackLocale)||W(e.fallbackLocale)||V(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:i,o=W(e.messages)?e.messages:eo(i),s=W(e.datetimeFormats)?e.datetimeFormats:eo(i),c=W(e.numberFormats)?e.numberFormats:eo(i),l=L(R(),e.modifiers,Ha()),u=e.pluralRules||R(),d=B(e.missing)?e.missing:null,f=H(e.missingWarn)||Ar(e.missingWarn)?e.missingWarn:!0,p=H(e.fallbackWarn)||Ar(e.fallbackWarn)?e.fallbackWarn:!0,m=!!e.fallbackFormat,h=!!e.unresolving,g=B(e.postTranslation)?e.postTranslation:null,_=W(e.processor)?e.processor:null,v=!H(e.warnHtmlMessage)||e.warnHtmlMessage,y=!!e.escapeParameter,b=B(e.messageCompiler)?e.messageCompiler:Ua,x=B(e.messageResolver)?e.messageResolver:Ga||Ia,S=B(e.localeFallbacker)?e.localeFallbacker:qa||Ca,C=U(e.fallbackContext)?e.fallbackContext:void 0,w=e,T=U(w.__datetimeFormatters)?w.__datetimeFormatters:new Map,E=U(w.__numberFormatters)?w.__numberFormatters:new Map,D=U(w.__meta)?w.__meta:{};Qa++;let O={version:n,cid:Qa,locale:r,fallbackLocale:a,messages:o,modifiers:l,pluralRules:u,missing:d,missingWarn:f,fallbackWarn:p,fallbackFormat:m,unresolving:h,postTranslation:g,processor:_,warnHtmlMessage:v,escapeParameter:y,messageCompiler:b,messageResolver:x,localeFallbacker:S,fallbackContext:C,onWarn:t,__meta:D};return O.datetimeFormats=s,O.numberFormats=c,O.__datetimeFormatters=T,O.__numberFormatters=E,O}var eo=e=>({[e]:R()});function to(e,t,n,r,i){let{missing:a,onWarn:o}=e;if(a!==null){let r=a(e,n,t,i);return V(r)?r:t}return t}function no(e,t){let n=e;U(t)?n.__localeChainObjectCache?.delete(t):n.__localeChainCache?.delete(t)}function ro(e,t,n){no(e,n),e.fallbackContext&&no(e.fallbackContext,n),e.localeFallbacker(e,n,t)}function io(e,t){return e!==t&&e.split(`-`)[0]===t.split(`-`)[0]}function ao(e,t){let n=t.indexOf(e);if(n===-1)return!1;for(let r=n+1;r<t.length;r++)if(io(e,t[r]))return!0;return!1}function oo(e,t,n,r,i,a,o){let{fallbackLocale:s,localeFallbacker:c,onWarn:l}=e,u=c(e,s,n);for(let n=0;n<u.length;n++){let a=u[n],s=(r[a]||{})[t];if(W(s)&&V(a))return a;to(e,t,a,i,o)}return null}function so(e,t,n){let r=`${e}__${t}`;return W(n)&&!jr(n)&&(r=`${r}__${JSON.stringify(n)}`),r}function co(e,t,n){for(let r in n){let n=`${t}__${r}`;for(let t of e.keys())(t===n||t.startsWith(`${n}__`))&&e.delete(t)}}function lo(e,t,n,r){let[,i,a,o]=e,s=n;return V(i)?t.key=i:W(i)&&Object.keys(i).forEach(e=>{r.includes(e)?s[e]=i[e]:t[e]=i[e]}),V(a)?t.locale=a:W(a)&&(s=a),W(o)&&(s=o),s}var uo=typeof Intl<`u`;uo&&Intl.DateTimeFormat,uo&&Intl.NumberFormat;function fo(e,...t){let{datetimeFormats:n,unresolving:r,onWarn:i}=e,{__datetimeFormatters:a}=e;if(!V(t[0])&&!kr(t[0])&&!I(t[0]))return``;let[o,s,c,l]=mo(...t),u=H(c.missingWarn)?c.missingWarn:e.missingWarn,d=H(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,f=!!c.part,p=ba(e,c);if(!V(o)||o===``){let e=new Intl.DateTimeFormat(p.replace(/!/g,``),l);return f?e.formatToParts(s):e.format(s)}let m=oo(e,o,p,n,u,d,`datetime format`);if(!V(m))return r?-1:o;let h=n[m][o],g=so(m,o,l),_=a.get(g);return _||(_=new Intl.DateTimeFormat(m,L({},h,l)),a.set(g,_)),f?_.formatToParts(s):_.format(s)}var po=[`localeMatcher`,`weekday`,`era`,`year`,`month`,`day`,`hour`,`minute`,`second`,`timeZoneName`,`formatMatcher`,`hour12`,`timeZone`,`dateStyle`,`timeStyle`,`calendar`,`dayPeriod`,`numberingSystem`,`hourCycle`,`fractionalSecondDigits`];function mo(...e){let[t]=e,n=R(),r=R(),i;if(V(t)){let e=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!e)throw ya(va.INVALID_ISO_DATE_ARGUMENT);let n=e[3]?e[3].trim().startsWith(`T`)?`${e[1].trim()}${e[3].trim()}`:`${e[1].trim()}T${e[3].trim()}`:e[1].trim();i=new Date(n);try{i.toISOString()}catch{throw ya(va.INVALID_ISO_DATE_ARGUMENT)}}else if(kr(t)){if(isNaN(t.getTime()))throw ya(va.INVALID_DATE_ARGUMENT);i=t}else if(I(t))i=t;else throw ya(va.INVALID_ARGUMENT);let a=lo(e,n,r,po);return[n.key||``,i,n,a]}function ho(e,t,n){co(e.__datetimeFormatters,t,n)}function go(e,...t){let{numberFormats:n,unresolving:r,onWarn:i}=e,{__numberFormatters:a}=e;if(!I(t[0]))return``;let[o,s,c,l]=vo(...t),u=H(c.missingWarn)?c.missingWarn:e.missingWarn,d=H(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,f=!!c.part,p=ba(e,c);if(!V(o)||o===``){let e=new Intl.NumberFormat(p.replace(/!/g,``),l);return f?e.formatToParts(s):e.format(s)}let m=oo(e,o,p,n,u,d,`number format`);if(!V(m))return r?-1:o;let h=n[m][o],g=so(m,o,l),_=a.get(g);return _||(_=new Intl.NumberFormat(m,L({},h,l)),a.set(g,_)),f?_.formatToParts(s):_.format(s)}var _o=[`localeMatcher`,`style`,`currency`,`currencyDisplay`,`currencySign`,`useGrouping`,`minimumIntegerDigits`,`minimumFractionDigits`,`maximumFractionDigits`,`minimumSignificantDigits`,`maximumSignificantDigits`,`compactDisplay`,`notation`,`signDisplay`,`unit`,`unitDisplay`,`roundingMode`,`roundingPriority`,`roundingIncrement`,`trailingZeroDisplay`];function vo(...e){let[t]=e,n=R(),r=R();if(!I(t))throw ya(va.INVALID_ARGUMENT);let i=t,a=lo(e,n,r,_o);return[n.key||``,i,n,a]}function yo(e,t,n){co(e.__numberFormatters,t,n)}var bo=e=>e,xo=e=>``,So=`text`,Co=e=>e.length===0?``:Vr(e),wo=Br;function To(e,t){return e=Math.abs(e),t===2?e===1?0:1:Math.min(e,2)}function Eo(e){let t=I(e.pluralIndex)?e.pluralIndex:-1;return I(e.named?.count)?e.named.count:I(e.named?.n)?e.named.n:t}function Do(e={}){let t=e.locale,n=Eo(e),r=V(t)&&B(e.pluralRules?.[t])?e.pluralRules[t]:To,i=r===To?void 0:To,a=e=>e[r(n,e.length,i)],o=e.list||[],s=e=>o[e],c=e.named||R();I(e.pluralIndex)&&(c.count||=e.pluralIndex,c.n||=e.pluralIndex);let l=e=>c[e];function u(t,n){return(B(e.messages)?e.messages(t,!!n):U(e.messages)?e.messages[t]:!1)||(e.parent?e.parent.message(t):xo)}let d=t=>e.modifiers?e.modifiers[t]:bo,f=B(e.processor?.normalize)?e.processor.normalize:Co,p=B(e.processor?.interpolate)?e.processor.interpolate:wo,m={list:s,named:l,plural:a,linked:(e,...t)=>{let[n,r]=t,i=`text`,a=``;t.length===1?U(n)?(a=n.modifier||a,i=n.type||i):V(n)&&(a=n||a):t.length===2&&(V(n)&&(a=n||a),V(r)&&(i=r||i));let o=u(e,!0)(m),s=o===``||o===void 0?e:o,c=i===`vnode`&&z(s)&&a?s[0]:s;return a?d(a)(c,i):c},message:u,type:V(e.processor?.type)?e.processor.type:So,interpolate:p,normalize:f,values:L(R(),o,c)};return m}var Oo=()=>``,ko=e=>B(e);function Ao(e,...t){let{fallbackFormat:n,postTranslation:r,unresolving:i,messageCompiler:a,fallbackLocale:o,messages:s}=e,[c,l]=Fo(...t),u=H(l.missingWarn)?l.missingWarn:e.missingWarn,d=H(l.fallbackWarn)?l.fallbackWarn:e.fallbackWarn,f=H(l.escapeParameter)?l.escapeParameter:e.escapeParameter,p=!!l.resolvedMessage,m=V(l.default)||H(l.default)?H(l.default)?a?c:()=>c:l.default:n?a?c:()=>c:null,h=n||m!=null&&(V(m)||B(m)),g=ba(e,l);f&&jo(l);let[_,v,y]=p?[c,g,s[g]||R()]:Mo(e,c,g,o,d,u),b=_,x=c;if(!p&&!(V(b)||Wi(b)||ko(b))&&h&&(b=m,x=b),!p&&(!(V(b)||Wi(b)||ko(b))||!V(v)))return i?-1:c;let S=!1,C=ko(b)?b:No(e,c,v,b,x,()=>{S=!0});if(S)return b;let w=Po(e,C,Do(Lo(e,v,y,l))),T=r?r(w,c):w;return f&&V(T)&&(T=ii(T)),T}function jo(e){z(e.list)?e.list=e.list.map(e=>V(e)?Ur(e):e):U(e.named)&&Object.keys(e.named).forEach(t=>{V(e.named[t])&&(e.named[t]=Ur(e.named[t]))})}function Mo(e,t,n,r,i,a){let{messages:o,onWarn:s,messageResolver:c,localeFallbacker:l}=e,u=l(e,r,n),d=R(),f,p=null;for(let n=0;n<u.length&&(f=u[n],d=o[f]||R(),(p=c(d,t))===null&&(p=d[t]),!(V(p)||Wi(p)||ko(p)));n++)if(!ao(f,u)){let n=to(e,t,f,a,`translate`);n!==t&&(p=n)}return[p,f,d]}function No(e,t,n,r,i,a){let{messageCompiler:o,warnHtmlMessage:s}=e;if(ko(r)){let e=r;return e.locale=e.locale||n,e.key=e.key||t,e}if(o==null){let e=(()=>r);return e.locale=n,e.key=t,e}let c=o(r,Io(e,n,i,r,s,a));return c.locale=n,c.key=t,c.source=r,c}function Po(e,t,n){return t(n)}function Fo(...e){let[t,n,r]=e,i=R();if(!V(t)&&!I(t)&&!ko(t)&&!Wi(t))throw ya(va.INVALID_ARGUMENT);let a=I(t)?String(t):(ko(t),t);return I(n)?i.plural=n:V(n)?i.default=n:W(n)&&!jr(n)?i.named=n:z(n)&&(i.list=n),I(r)?i.plural=r:V(r)?i.default=r:W(r)&&L(i,r),[a,i]}function Io(e,t,n,r,i,a){return{locale:t,key:n,warnHtmlMessage:i,onError:e=>{throw a&&a(e),e},onCacheKey:e=>Dr(t,n,e)}}function Lo(e,t,n,r){let{modifiers:i,pluralRules:a,messageResolver:o,fallbackLocale:s,fallbackWarn:c,missingWarn:l,fallbackContext:u}=e,d={locale:t,modifiers:i,pluralRules:a,messages:(r,i)=>{let a=o(n,r);if(a==null&&(u||i)){let[n,,i]=Mo(u||e,r,t,s,c,l);a=n??o(i,r)}if(V(a)||Wi(a)){let n=!1,i=No(e,r,t,a,r,()=>{n=!0});return n?Oo:i}return ko(a)?a:Oo}};return e.processor&&(d.processor=e.processor),r.list&&(d.list=r.list),r.named&&(d.named=r.named),I(r.plural)&&(d.pluralIndex=r.plural),d}Ui();var Ro=`11.4.12`;function zo(){typeof __INTLIFY_DROP_MESSAGE_COMPILER__!=`boolean`&&(Pr().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}var K={UNEXPECTED_RETURN_TYPE:24,INVALID_ARGUMENT:25,MUST_BE_CALL_SETUP_TOP:26,NOT_INSTALLED:27,REQUIRED_VALUE:28,INVALID_VALUE:29,CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:30,NOT_INSTALLED_WITH_PROVIDE:31,UNEXPECTED_ERROR:32,NOT_COMPATIBLE_LEGACY_VUE_I18N:33,NOT_AVAILABLE_COMPOSITION_IN_LEGACY:34};function Bo(e,...t){return li(e,null,void 0)}K.UNEXPECTED_RETURN_TYPE,K.INVALID_ARGUMENT,K.MUST_BE_CALL_SETUP_TOP,K.NOT_INSTALLED,K.UNEXPECTED_ERROR,K.REQUIRED_VALUE,K.INVALID_VALUE,K.CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN,K.NOT_INSTALLED_WITH_PROVIDE,K.NOT_COMPATIBLE_LEGACY_VUE_I18N,K.NOT_AVAILABLE_COMPOSITION_IN_LEGACY;var Vo=Er(`__translateVNode`),Ho=Er(`__datetimeParts`),Uo=Er(`__numberParts`),Wo=Er(`__setPluralRules`);Er(`__intlifyMeta`);var Go=Er(`__injectWithOption`),Ko=Er(`__dispose`),qo={FALLBACK_TO_ROOT:10,NOT_FOUND_PARENT_SCOPE:11,IGNORE_OBJ_FLATTEN:12,DEPRECATE_LEGACY_MODE:13,DEPRECATE_TRANSLATE_CUSTOME_DIRECTIVE:14,DUPLICATE_USE_I18N_CALLING:15};qo.FALLBACK_TO_ROOT,qo.NOT_FOUND_PARENT_SCOPE,qo.IGNORE_OBJ_FLATTEN,qo.DEPRECATE_LEGACY_MODE,qo.DEPRECATE_TRANSLATE_CUSTOME_DIRECTIVE,qo.DUPLICATE_USE_I18N_CALLING;var Jo=null;{let e=Pr().__VUE_INSTANCE_SETTERS__;z(e)&&e.push(e=>{Jo=e})}function Yo(e){if(!U(e)||Wi(e))return e;for(let t in e)if(Ir(e,t)){if(!t.includes(`.`))U(e[t])&&Yo(e[t]);else{let n=t.split(`.`),r=n.length-1,i=e,a=!1;for(let e=0;e<r;e++){if(n[e]===`__proto__`)throw Error(`unsafe key: ${n[e]}`);if(n[e]in i||(i[n[e]]=R()),!U(i[n[e]])){a=!0;break}i=i[n[e]]}if(a||(Wi(i)?ca.includes(n[r])||delete e[t]:(i[n[r]]=e[t],delete e[t])),!Wi(i)){let e=i[n[r]];U(e)&&Yo(e)}}}return e}function Xo(e,t){let{messages:n,__i18n:r,messageResolver:i,flatJson:a}=t,o=W(n)?n:z(r)?R():{[e]:R()};if(z(r)&&r.forEach(e=>{if(`locale`in e&&`resource`in e){let{locale:t,resource:n}=e;t?(o[t]=o[t]||R(),oi(n,o[t])):oi(n,o)}else V(e)&&oi(JSON.parse(e),o)}),i==null&&a)for(let e in o)Ir(o,e)&&Yo(o[e]);return o}function Zo(e){return e.type}function Qo(e,t,n){let r=U(t.messages)?t.messages:R();`__i18nGlobal`in n&&(r=Xo(e.locale.value,{messages:r,__i18n:n.__i18nGlobal}));let i=Object.keys(r);if(i.length&&i.forEach(t=>{e.mergeLocaleMessage(t,r[t])}),U(t.datetimeFormats)){let n=Object.keys(t.datetimeFormats);n.length&&n.forEach(n=>{e.mergeDateTimeFormat(n,t.datetimeFormats[n])})}if(U(t.numberFormats)){let n=Object.keys(t.numberFormats);n.length&&n.forEach(n=>{e.mergeNumberFormat(n,t.numberFormats[n])})}}function $o(e){return D(re,null,e,0)}function es(){return Jo??O()}var ts=()=>[],ns=()=>!1,rs=0;function is(e){return((t,n,r,i)=>e(n,r,es()||void 0,i))}function as(e={}){let{__root:t,__injectWithOption:n}=e,r=t===void 0,a=e.flatJson,o=Tr?m:i,s=!H(e.inheritLocale)||e.inheritLocale,c=o(t&&s?t.locale.value:V(e.locale)?e.locale:Ba),l=o(t&&s?t.fallbackLocale.value:V(e.fallbackLocale)||z(e.fallbackLocale)||W(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:c.value),u=o(Xo(c.value,e)),d=o(W(e.datetimeFormats)?e.datetimeFormats:{[c.value]:{}}),f=o(W(e.numberFormats)?e.numberFormats:{[c.value]:{}}),p=t?t.missingWarn:H(e.missingWarn)||Ar(e.missingWarn)?e.missingWarn:!0,h=t?t.fallbackWarn:H(e.fallbackWarn)||Ar(e.fallbackWarn)?e.fallbackWarn:!0,g=t?t.fallbackRoot:!H(e.fallbackRoot)||e.fallbackRoot,v=!!e.fallbackFormat,y=B(e.missing)?e.missing:null,b=B(e.missing)?is(e.missing):null,x=B(e.postTranslation)?e.postTranslation:null,S=t?t.warnHtmlMessage:!H(e.warnHtmlMessage)||e.warnHtmlMessage,C=!!e.escapeParameter,w=t?t.modifiers:W(e.modifiers)?e.modifiers:{},T=e.pluralRules||t&&t.pluralRules,E;E=(()=>{r&&Xa(null);let t={version:Ro,locale:c.value,fallbackLocale:l.value,messages:u.value,modifiers:w,pluralRules:T,missing:b===null?void 0:b,missingWarn:p,fallbackWarn:h,fallbackFormat:v,unresolving:!0,postTranslation:x===null?void 0:x,warnHtmlMessage:S,escapeParameter:C,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:`vue`}};t.datetimeFormats=d.value,t.numberFormats=f.value,t.__datetimeFormatters=W(E)?E.__datetimeFormatters:void 0,t.__numberFormatters=W(E)?E.__numberFormatters:void 0;let n=$a(t);return r&&Xa(n),n})(),ro(E,c.value,l.value);function D(){return[c.value,l.value,u.value,d.value,f.value]}let O=j({get:()=>c.value,set:e=>{E.locale=e,c.value=e}});function k(e){r||(E.fallbackContext=t?Za():void 0);try{ro(E,c.value,e)}finally{r||(E.fallbackContext=void 0)}}let A=j({get:()=>l.value,set:e=>{l.value=e,E.fallbackLocale=l.value,k(l.value)}}),ee=j(()=>u.value),te=j(()=>d.value),ne=j(()=>f.value);function M(){return B(x)?x:null}function re(e){x=e,E.postTranslation=e}function ie(){return y}function ae(e){e!==null&&(b=is(e)),y=e,E.missing=b}let N=(e,n,i,a,o,s)=>{D();let c;try{r||(E.fallbackContext=t?Za():void 0),c=e(E)}finally{r||(E.fallbackContext=void 0)}if(i!==`translate exists`&&I(c)&&c===-1||i===`translate exists`&&!c){let[e,r]=n();return t&&g?a(t):o(e)}if(s(c))return c;throw Bo(K.UNEXPECTED_RETURN_TYPE)};function oe(...e){return N(t=>Reflect.apply(Ao,null,[t,...e]),()=>Fo(...e),`translate`,t=>Reflect.apply(t.t,t,[...e]),e=>e,e=>V(e))}function se(...e){let[t,n,r]=e;if(r&&!U(r))throw Bo(K.INVALID_ARGUMENT);return oe(t,n,L({resolvedMessage:!0},r||{}))}function ce(...e){return N(t=>Reflect.apply(fo,null,[t,...e]),()=>mo(...e),`datetime format`,t=>Reflect.apply(t.d,t,[...e]),()=>``,e=>V(e)||z(e))}function le(...e){return N(t=>Reflect.apply(go,null,[t,...e]),()=>vo(...e),`number format`,t=>Reflect.apply(t.n,t,[...e]),()=>``,e=>V(e)||z(e))}function ue(e){return e.map(e=>V(e)||I(e)||H(e)?$o(String(e)):e)}let de={normalize:ue,interpolate:e=>e,type:`vnode`};function fe(...e){return N(t=>{let n,r=t;try{r.processor=de,n=Reflect.apply(Ao,null,[r,...e])}finally{r.processor=null}return n},()=>Fo(...e),`translate`,t=>t[Vo](...e),e=>[$o(e)],e=>z(e))}function pe(...e){return N(t=>Reflect.apply(go,null,[t,...e]),()=>vo(...e),`number format`,t=>t[Uo](...e),ts,e=>V(e)||z(e))}function P(...e){return N(t=>Reflect.apply(fo,null,[t,...e]),()=>mo(...e),`datetime format`,t=>t[Ho](...e),ts,e=>V(e)||z(e))}function me(e){T=e,E.pluralRules=T}function he(e,t){return N(()=>{if(!e)return!1;let n=V(t)?t:c.value,r=V(t)?[n]:wa(E,l.value,n);for(let t=0;t<r.length;t++){let n=ve(r[t]),i=E.messageResolver(n,e);if(i===null&&(i=n[e]),Wi(i)||ko(i)||V(i))return!0}return!1},()=>[e],`translate exists`,n=>Reflect.apply(n.te,n,[e,t]),ns,e=>H(e))}function ge(e){let t=null,n=wa(E,l.value,c.value);for(let r=0;r<n.length;r++){let i=u.value[n[r]]||{},a=E.messageResolver(i,e);if(a!=null){t=a;break}}return t}function _e(e){return ge(e)??(t&&t.tm(e)||{})}function ve(e){return u.value[e]||{}}function ye(e,t){if(a){let n={[e]:t};for(let e in n)Ir(n,e)&&Yo(n[e]);t=n[e]}u.value[e]=t,E.messages=u.value}function be(e,t){u.value[e]=u.value[e]||{};let n={[e]:t};if(a)for(let e in n)Ir(n,e)&&Yo(n[e]);t=n[e],oi(t,u.value[e]),E.messages=u.value}function xe(e){return d.value[e]||{}}function Se(e,t){d.value[e]=t,E.datetimeFormats=d.value,ho(E,e,t)}function Ce(e,t){d.value[e]=L(d.value[e]||{},t),E.datetimeFormats=d.value,ho(E,e,t)}function we(e){return f.value[e]||{}}function Te(e,t){f.value[e]=t,E.numberFormats=f.value,yo(E,e,t)}function Ee(e,t){f.value[e]=L(f.value[e]||{},t),E.numberFormats=f.value,yo(E,e,t)}rs++,_(l,()=>k(l.value),{deep:!0,flush:`sync`}),t&&Tr&&(_(t.locale,e=>{s&&(c.value=e,E.locale=e,ro(E,c.value,l.value))}),_(t.fallbackLocale,e=>{s&&(l.value=e,E.fallbackLocale=l.value,ro(E,c.value,l.value))}));let F={id:rs,locale:O,fallbackLocale:A,get inheritLocale(){return s},set inheritLocale(e){s=e,e&&t&&(O.value=t.locale.value,A.value=t.fallbackLocale.value)},get availableLocales(){return Object.keys(u.value).sort()},messages:ee,get modifiers(){return w},get pluralRules(){return T||{}},get isGlobal(){return r},get missingWarn(){return p},set missingWarn(e){p=e,E.missingWarn=p},get fallbackWarn(){return h},set fallbackWarn(e){h=e,E.fallbackWarn=h},get fallbackRoot(){return g},set fallbackRoot(e){g=e},get fallbackFormat(){return v},set fallbackFormat(e){v=e,E.fallbackFormat=v},get warnHtmlMessage(){return S},set warnHtmlMessage(e){S=e,E.warnHtmlMessage=e},get escapeParameter(){return C},set escapeParameter(e){C=e,E.escapeParameter=e},t:oe,getLocaleMessage:ve,setLocaleMessage:ye,mergeLocaleMessage:be,getPostTranslationHandler:M,setPostTranslationHandler:re,getMissingHandler:ie,setMissingHandler:ae,[Wo]:me};return F.datetimeFormats=te,F.numberFormats=ne,F.rt=se,F.te=he,F.tm=_e,F.d=ce,F.n=le,F.getDateTimeFormat=xe,F.setDateTimeFormat=Se,F.mergeDateTimeFormat=Ce,F.getNumberFormat=we,F.setNumberFormat=Te,F.mergeNumberFormat=Ee,F[Go]=n,F[Vo]=fe,F[Ho]=P,F[Uo]=pe,F}var os={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e===`parent`||e===`global`,default:`parent`},i18n:{type:Object}};function ss({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((e,t)=>[...e,...t.type===M?t.children:[t]],[]):t.reduce((t,n)=>{let r=e[n];return r&&(t[n]=r()),t},R())}function cs(){return M}var ls=N({name:`i18n-t`,props:L({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>I(e)||!isNaN(e)}},os),setup(e,t){let{slots:n,attrs:r}=t,i=e.i18n||bs({useScope:e.scope,__useComponent:!0});return()=>{let a=()=>{let r=Object.keys(n).filter(e=>e[0]!==`_`),a=R();e.locale&&(a.locale=e.locale),e.plural!==void 0&&(a.plural=V(e.plural)?+e.plural:e.plural);let o=ss(t,r);return i[Vo](e.keypath,o,a)},o=L(R(),r),s=V(e.tag)||U(e.tag)?e.tag:cs();return U(s)?h(s,o,{default:a}):h(s,o,a())}}});function us(e){return z(e)&&!V(e[0])}function ds(e,t,n,r){let{slots:i,attrs:a}=t;return()=>{let t=()=>{let t={part:!0},a=R();e.locale&&(t.locale=e.locale),V(e.format)?t.key=e.format:U(e.format)&&(V(e.format.key)&&(t.key=e.format.key),a=Object.keys(e.format).reduce((t,r)=>n.includes(r)?L(R(),t,{[r]:e.format[r]}):t,R()));let o=r(e.value,t,a),s=[t.key];return z(o)?s=o.map((e,t)=>{let n=i[e.type],r=n?n({[e.type]:e.value,index:t,parts:o}):[e.value];return us(r)&&(r[0].key=`${e.type}-${t}`),r}):V(o)&&(s=[o]),s},o=L(R(),a),s=V(e.tag)||U(e.tag)?e.tag:cs();return U(s)?h(s,o,{default:t}):h(s,o,t())}}var fs=N({name:`i18n-n`,props:L({value:{type:Number,required:!0},format:{type:[String,Object]}},os),setup(e,t){let n=e.i18n||bs({useScope:e.scope,__useComponent:!0});return ds(e,t,_o,(...e)=>n[Uo](...e))}});function ps(e,t){let n=e;if(e.mode===`composition`)return n.__getInstance(t)||e.global;{let r=n.__getInstance(t);return r==null?e.global.__composer:r.__composer}}function ms(e){let t=t=>{let{instance:n,value:r}=t;if(!n||!n.$)throw Bo(K.UNEXPECTED_ERROR);let i=ps(e,n.$),a=hs(r);return[Reflect.apply(i.t,i,[...gs(a)]),i]};return{created:(e,n)=>{let[r,i]=t(n);Tr&&(e.__i18nWatcher=_(i.locale,()=>{n.instance&&n.instance.$forceUpdate()})),e.__composer=i,e.textContent=r},unmounted:e=>{Tr&&e.__i18nWatcher&&(e.__i18nWatcher(),e.__i18nWatcher=void 0,delete e.__i18nWatcher),e.__composer&&(e.__composer=void 0,delete e.__composer)},beforeUpdate:(e,{value:t})=>{if(e.__composer){let n=e.__composer,r=hs(t);e.textContent=Reflect.apply(n.t,n,[...gs(r)])}},getSSRProps:e=>{let[n]=t(e);return{textContent:n}}}}function hs(e){if(V(e))return{path:e};if(W(e)){if(!(`path`in e))throw Bo(K.REQUIRED_VALUE,`path`);return e}throw Bo(K.INVALID_VALUE)}function gs(e){let{path:t,locale:n,args:r,choice:i,plural:a}=e,o={},s=r||{};return V(n)&&(o.locale=n),I(i)&&(o.plural=i),I(a)&&(o.plural=a),[t,s,o]}function _s(e,t,...n){let r=W(n[0])?n[0]:{};(!H(r.globalInstall)||r.globalInstall)&&([ls.name,`I18nT`].forEach(t=>e.component(t,ls)),[fs.name,`I18nN`].forEach(t=>e.component(t,fs)),[js.name,`I18nD`].forEach(t=>e.component(t,js))),e.directive(`t`,ms(t))}var vs=Er(`global-vue-i18n`);function ys(e={}){let t=!H(e.globalInjection)||e.globalInjection,n=new Map,[r,i]=xs(e,!1),a=Er(``);function o(e){return n.get(e)||null}function s(e,t){n.set(e,t)}function c(e){n.delete(e)}let l={get mode(){return`composition`},async install(e,...n){if(e.__VUE_I18N_SYMBOL__=a,e.provide(e.__VUE_I18N_SYMBOL__,l),W(n[0])){let e=n[0];l.__composerExtend=e.__composerExtend,l.__vueI18nExtend=e.__vueI18nExtend}let r=null;t&&(r=As(e,l.global)),_s(e,l,...n);let i=e.unmount;e.unmount=()=>{r&&r(),l.dispose(),i()}},get global(){return i},dispose(){r.stop()},__instances:n,__getInstance:o,__setInstance:s,__deleteInstance:c};return l}function bs(e={}){let t=es();if(t==null)throw Bo(K.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw Bo(K.NOT_INSTALLED);let n=Ss(t),r=ws(n),i=Zo(t),a=Cs(e,i);if(a===`global`)return Qo(r,e,i),r;if(a===`parent`){let i=Ts(n,t,e.__useComponent);return i??=r,i}if(a===`isolated`){if(n.mode!==`composition`)throw Bo(K.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);let i=n,a=L({},e);a.__root=Ts(n,t)||r;let o=as(a);return i.__composerExtend&&(o[Ko]=i.__composerExtend(o)),u()&&d(()=>{let e=o[Ko];e&&(e(),delete o[Ko])}),o}let o=n,s=o.__getInstance(t);if(s==null){let n=L({},e);`__i18n`in i&&(n.__i18n=i.__i18n),r&&(n.__root=r),s=as(n),o.__composerExtend&&(s[Ko]=o.__composerExtend(s)),Ds(o,t,s),o.__setInstance(t,s)}return s}function xs(e,t){let n=a(),r=n.run(()=>as(e));if(r==null)throw Bo(K.UNEXPECTED_ERROR);return[n,r]}function Ss(e){let t=w(e.isCE?vs:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw Bo(e.isCE?K.NOT_INSTALLED_WITH_PROVIDE:K.UNEXPECTED_ERROR);return t}function Cs(e,t){return jr(e)?`__i18n`in t?`local`:`global`:e.useScope?e.useScope:`local`}function ws(e){return e.mode===`composition`?e.global:e.global.__composer}function Ts(e,t,n=!1){let r=null,i=t.root,a=Es(t,n);for(;a!=null;){let t=e;if(e.mode===`composition`&&(r=t.__getInstance(a)),r!=null||i===a)break;a=a.parent}return r}function Es(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function Ds(e,t,n){S(()=>{},t),g(()=>{let r=n;e.__deleteInstance(t);let i=r[Ko];i&&(i(),delete r[Ko])},t)}var Os=[`locale`,`fallbackLocale`,`availableLocales`],ks=[`t`,`rt`,`d`,`n`,`tm`,`te`];function As(e,t){let n=Object.create(null);return Os.forEach(e=>{let r=Object.getOwnPropertyDescriptor(t,e);if(!r)throw Bo(K.UNEXPECTED_ERROR);let i=p(r.value)?{get(){return r.value.value},set(e){r.value.value=e}}:{get(){return r.get&&r.get()}};Object.defineProperty(n,e,i)}),e.config.globalProperties.$i18n=n,ks.forEach(n=>{let r=Object.getOwnPropertyDescriptor(t,n);if(!r||!r.value)throw Bo(K.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${n}`,r)}),()=>{delete e.config.globalProperties.$i18n,ks.forEach(t=>{delete e.config.globalProperties[`$${t}`]})}}var js=N({name:`i18n-d`,props:L({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},os),setup(e,t){let n=e.i18n||bs({useScope:e.scope,__useComponent:!0});return ds(e,t,po,(...e)=>n[Ho](...e))}});zo(),Wa(_a),Ka(La),Ja(wa);var Ms={"groupMessage.title":`Group message`,"groupMessage.description":`Send the same instruction to several workspaces.`,"groupMessage.devServerRunning":`Only workspaces with a running development server`,"groupMessage.tags":`Tags`,"groupMessage.statuses":`Workspace statuses`,"groupMessage.filtersHint":`At least one selected tag AND one selected status. Empty filters include all live workspaces.`,"groupMessage.selected":`{count} recipients selected`,"groupMessage.selectAll":`Select all`,"groupMessage.selectNone":`Select none`,"groupMessage.nextIteration":`Next auto-loop iteration`,"groupMessage.immediate":`Normal chat delivery`,"groupMessage.empty":`No workspace matches these filters.`,"groupMessage.content":`Message`,"groupMessage.deliveryHint":`Auto-loops receive the instruction next iteration, without stopping. Other workspaces receive a chat message, resuming inactive agents when needed.`,"groupMessage.limit":`Select at most 200 workspaces per message.`,"groupMessage.finished":`Delivery results`,"groupMessage.inProgress":`Sending group message`,"groupMessage.serverContinues":`The server continues delivery if you close this window. Queued means saved for a future iteration, not yet processed.`,"groupMessage.unknownHint":`Delivery is uncertain for some workspaces. Read their chat before sending another message.`,"groupMessage.retryHint":`Your original recipients and message are saved. Retry checks or resumes this same request without duplicating accepted deliveries.`,"groupMessage.retry":`Check this delivery`,"groupMessage.newMessage":`New message`,"groupMessage.send":`Send to {count} workspaces`,"groupMessage.state.pending":`Pending`,"groupMessage.state.sending":`Sending`,"groupMessage.state.sent":`Sent`,"groupMessage.state.queued":`Queued for auto-loop`,"groupMessage.state.rejected":`Rejected`,"groupMessage.state.unknown":`Delivery uncertain`,"groupMessage.state.not_sent":`Not sent`,"tours.home.groupMessage.title":`Message several workspaces`,"tours.home.groupMessage.description":`Filter by tags, workspace statuses and running development servers, check the recipient list, and send one instruction. Auto-loops receive it next iteration. Each workspace has its own delivery result.`,"autoLoop.finalReview.title":`Final review settings`,"autoLoop.finalReview.description":`After all tasks and final checks, a separate reviewer checks the changes. The final working session fixes the findings, then a fresh review runs until no findings remain.`,"autoLoop.finalReview.enabled":`Automatic final review`,"autoLoop.finalReview.configure":`Configure reviewer`,"autoLoop.finalReview.save":`Save review settings`,"autoLoop.finalReview.hint":`Fresh read-only review, then return to the final working session to fix findings. Settings are saved with this workspace.`,"autoLoop.finalReview.loadFailed":`Could not load final review settings.`,"autoLoop.finalReview.saveFailed":`Could not save final review settings.`,"autoLoop.finalReview.cycle":`Review cycle {count}`,"autoLoop.finalReview.findings":`{count} findings`,"autoLoop.finalReview.disabled":`Disabled`,"autoLoop.finalReview.pending":`Final review scheduled`,"autoLoop.finalReview.reviewing":`Final review in progress`,"autoLoop.finalReview.fixing":`Fixing review findings`,"autoLoop.finalReview.completed":`Final review passed`,"autoLoop.finalReview.blocked":`Final review needs attention`,"reviewReturn.title":`Review return`,"reviewReturn.reviewing":`Review in progress. The return to the original session is saved.`,"reviewReturn.ready":`Review complete. Returning to the original session.`,"reviewReturn.dispatching":`Sending the review summary to the original session.`,"reviewReturn.unknown":`The server stopped before delivery was confirmed. The original session may already have received the summary.`,"reviewReturn.blocked":`The return to the original session needs attention.`,"reviewReturn.retry":`Retry return`,"reviewReturn.cancel":`Cancel return`,"reviewReturn.retryUnknown":`Retry delivery (may send the summary twice)`,"reviewReturn.actionFailed":`Could not update the review return.`,"memory.panel.contextsHint":`What was sent to the LLM for this conversation.`,"memory.panel.entriesHint":`Persistent notes you can edit or reuse.`,"memory.panel.proposalsHint":`Agent suggestions awaiting your approval or rejection.`,"memory.panel.operationsHint":`A log of memory reads and changes.`,"memory.panel.openDialog":`Open memory in a dialog`,"memory.panel.closeDialog":`Close memory dialog`,"tours.workspace.memorySettings.title":`Manage the three levels`,"tours.workspace.memorySettings.description":`This link opens Memory settings: global for all projects, project for its workspaces, workspace for this mission. Each level can be cleared independently after confirmation; this does not remove information already sent to the LLM.`,"tours.settings.memoryModes.title":`Choose a memory mode`,"tours.settings.memoryModes.description":`Hybrid is the default: the agent saves workspace notes and proposes project/global changes for approval. Manual: only you write. Automatic: the agent writes at all three levels. Click Save to apply the mode.`,"tours.settings.skills.title":`Choose a skill suite`,"tours.settings.skills.description":`Start with Standard: no extension is required. Superpowers, gstack, ECC and their combinations target skills already installed and available to your chosen engine. Selecting a suite changes agent instructions; it does not install skills or grant permissions. Custom lets you edit those instructions. Save your choice to apply it.`,"tours.settings.git.description":`Choose when agents may commit, push or publish. Set Git conventions and branch prefixes.`,"tours.settings.git.title":`Git workflow`,"settings.reviewPromptHint":`Instructions sent to the agent when starting a code review.`,"settings.help.git":`Commit, push and publication preferences, Git conventions and branch prefixes.`,"settings.nav.promptTemplates":`Prompt templates`,"memory.scope.label":`Memory scope`,"settings.nav.memory":`Memory`,"settings.help.memory":`Choose how Kōbō uses memory and manage global, project and workspace memories.`,"memory.settings.title":`Memory`,"memory.panel.title":`Memory`,"memory.panel.contexts":`Contexts delivered to this conversation`,"memory.panel.noContext":`No memory context has been delivered to this conversation.`,"memory.panel.contextStats":`{tokens} estimated tokens · {cumulative} cumulative · {remaining} remaining · {omitted} omitted`,"memory.panel.entries":`Available memories`,"memory.panel.proposals":`Pending proposals`,"memory.panel.operations":`Workspace operations`,"memory.panel.add":`Add memory`,"memory.panel.clearWorkspace":`Clear workspace memory`,"memory.panel.settingsLink":`Manage global and project memory in Settings`,"memory.panel.clearConfirm":`Clear {entries} memories and {proposals} proposals from this workspace?`,"memory.panel.confirmClear":`Clear workspace memory`,"memory.panel.promoteTo":`Promote to`,"memory.panel.loading":`Loading workspace memory…`,"memory.panel.loadFailed":`Could not load workspace memory.`,"memory.panel.archived":`Archived`,"memory.panel.purged":`Worktree purged`,"memory.panel.changed":`Changed since this context`,"memory.panel.deleted":`Deleted since this context`,"memory.panel.truncated":`(text truncated)`,"memory.engine.codex":`Codex`,"memory.tool.unexplainedError":`The memory tool returned no details. If the retrieval budget is exhausted, stop reading; saving remains available subject to permissions. A new conversation or confirmed context compaction renews the retrieval budget, not a new message.`,"memory.engine.claude-code":`Claude Code`,"memory.context.state.failed":`Failed`,"memory.context.state.prepared":`Prepared`,"memory.context.state.submitted":`Submitted`,"memory.context.state.initialized":`Initialized`,"memory.context.state.unknown":`Unknown delivery`,"memory.settings.intro":`Memory stores explicit notes for future agent sessions. It does not replace provider or chat history.`,"memory.settings.mode":`Automatic memory behavior`,"memory.settings.mode.manual":`Manual`,"memory.settings.modeHint.manual":`Agents can read memory. Only you can create or change notes.`,"memory.settings.mode.automatic":`Automatic`,"memory.settings.modeHint.automatic":`Agents may retrieve and update relevant memories automatically.`,"memory.settings.mode.hybrid":`Hybrid`,"memory.settings.modeHint.hybrid":`Agents can update workspace memory directly. Project and global changes require your approval.`,"memory.settings.saveNote":`Mode changes are part of Settings and apply when you save. Leaving without saving keeps the previous mode.`,"memory.settings.manageTitle":`Browse and manage memory`,"memory.settings.independentNote":`Creating, editing, approving and clearing memory take effect immediately, independently of the Settings save button.`,"memory.settings.add":`Add memory`,"memory.settings.clear":`Clear this scope…`,"memory.settings.clearConfirmTitle":`Clear this memory scope?`,"memory.settings.clearConfirm":`This will remove {entries} memories and {proposals} pending proposals from the selected {scope} scope.`,"memory.settings.clearWarning":`This only clears Kōbō memory data. It does not delete previous provider conversations or chat history.`,"memory.settings.confirmClear":`Clear scope`,"memory.settings.cancel":`Cancel`,"memory.settings.loadFailed":`Could not load memory scopes.`,"memory.settings.saveFailed":`Could not save this memory change.`,"memory.settings.clearFailed":`Could not preview or clear this memory scope.`,"memory.settings.clearConflict":`Memory changed after the preview. The counts have been refreshed; review them before confirming again.`,"memory.settings.loadMoreScopes":`Load more scopes`,"memory.entry.loadMore":`Load more memories`,"memory.settings.loadingScopes":`Loading scopes…`,"memory.settings.deleteConfirmTitle":`Confirm memory deletion`,"memory.settings.deleteConfirm":`Delete “{title}” from {scope}?`,"memory.settings.deleteConfirmAction":`Delete memory`,"memory.scope.choose":`Choose a scope`,"memory.scope.global":`Global`,"memory.scope.project":`Project`,"memory.scope.workspace":`Workspace`,"memory.entry.empty":`No memories in this scope.`,"memory.entry.revision":`Revision {revision}`,"memory.entry.edit":`Edit`,"memory.entry.editAria":`Edit {title}`,"memory.entry.delete":`Delete`,"memory.entry.deleteAria":`Delete {title}`,"memory.entry.promote":`Promote`,"memory.entry.promoteAria":`Promote {title}`,"memory.editor.key":`Stable key`,"memory.editor.title":`Title`,"memory.editor.body":`Memory`,"memory.editor.save":`Save memory`,"memory.editor.saving":`Saving…`,"memory.editor.cancel":`Cancel`,"memory.editor.conflict":`This memory changed elsewhere. Reload it or keep your draft and explicitly rebase it on the current revision.`,"memory.editor.reload":`Reload current`,"memory.editor.rebase":`Keep draft and rebase`,"memory.proposal.empty":`No pending proposals.`,"memory.proposal.approve":`Approve`,"memory.proposal.approveAria":`Approve {title}`,"memory.proposal.reject":`Reject`,"memory.proposal.rejectAria":`Reject {title}`,"memory.operation.empty":`No memory operations yet.`,"memory.operation.created":`Memory created`,"memory.operation.updated":`Memory updated`,"memory.operation.deleted":`Memory deleted`,"memory.operation.proposed":`Change proposed`,"memory.operation.approved":`Proposal approved`,"memory.operation.rejected":`Proposal rejected`,"memory.operation.promoted":`Memory promoted`,"memory.operation.cleared":`Scope cleared`,"memory.operation.read":`Memory returned by a read`,"memory.operation.humanActor":`You`,"memory.operation.internalActor":`Agent · {engine}`,"memory.operation.externalActor":`{name} via {transport}`,"memory.operation.loadMore":`Load older operations`,"memory.operation.loading":`Loading…`,"settings.nav.git":`Git`,"integration.direct":`Direct connection`,"integration.directHint":`Optional: configure a trusted MCP command on this server without Claude configuration. Put credentials in environment variables. Saving replaces the entire connection; enable the integration separately.`,"integration.agentScope":`Enabled connections are supplied to Claude Code and Codex on the next agent launch or resume. Stop a running agent to apply changes. Personal MCP configurations remain independent.`,"integration.directOverrides":`The saved direct connection takes priority. Delete it to use a Claude MCP entry.`,"integration.stored":`A private connection is saved. Its values are never returned to the browser.`,"integration.example":`Example: {example}`,"integration.tokenExample":`YOUR_NOTION_TOKEN`,"integration.packageExample":`your-mcp-package`,"integration.variableExample":`YOUR_VARIABLE`,"integration.valueExample":`your-value`,"integration.command":`Executable`,"integration.args":`Arguments (JSON array)`,"integration.environment":`Environment and credentials (JSON object)`,"integration.failed":`Could not load or save the connection. Check the JSON fields and local storage.`,"integration.saved":`Connection saved. Enable the integration and use Test connection when ready.`,"integration.save":`Replace connection`,"integration.clear":`Remove direct connection`,"settings.notificationSoundReady":`Ready tone`,"settings.customSounds":`Imported sounds`,"settings.customSoundsHint":`Import your own notification sounds ({count} max, {size} MB each, .wav .mp3 .ogg .webm). They are stored in the Kōbō data directory and appear in every sound selector below.`,"settings.customSoundsImport":`Import a sound`,"settings.customSoundsFull":`Limit reached ({count} sounds). Delete one before importing another.`,"settings.customSoundsError.type":`Unsupported format. Use a .wav, .mp3, .ogg or .webm file.`,"settings.customSoundsError.size":`File too large. The limit is {size} MB.`,"settings.customSoundsError.count":`Limit reached ({count} sounds). Delete one before importing another.`,"settings.customSoundsError.failed":`Could not complete this action. Check the connection and try again.`,"setup.check.worktrees":`Worktree directory`,"setup.fix.worktrees":`Check the worktree destination in Settings and its write permissions.`,"setup.title":`First mission setup`,"setup.intro":`Choose an engine and a local Git project. No skills or integrations are required.`,"setup.project":`Local project directory`,"setup.credentials":`Authenticate on this server with claude /login or codex login, or configure your provider API key. These checks do not send a paid prompt.`,"setup.permissions":`Start with a plan. Choose execution permissions explicitly in the creation form; a worktree does not isolate your machine.`,"setup.check":`Check environment`,"setup.failed":`Could not complete this action. Check the connection and try again.`,"setup.start":`Describe my first mission`,"setup.settings":`Open settings`,"setup.skip":`Skip for now`,"setup.status.ok":`Available`,"setup.status.missing":`Missing`,"setup.status.error":`Needs attention`,"setup.status.unknown":`Not verified`,"setup.check.node":`Node.js`,"setup.check.platform":`Platform`,"setup.check.git":`Git`,"setup.check.shell":`Bash`,"setup.check.storage":`Data directory`,"setup.check.runtime":`Engine package`,"setup.check.authentication":`Authentication`,"setup.check.model":`Model access`,"setup.check.repository":`Git repository`,"setup.check.firstCommit":`First commit`,"setup.check.projectWritable":`Project write access`,"setup.fix.node":`Install Node.js 24.15 or newer.`,"setup.fix.platform":`Use Linux, macOS or WSL2; native Windows is unsupported.`,"setup.fix.git":`Install Git on this server.`,"setup.fix.shell":`Install Bash on this server.`,"setup.fix.storage":`Check KOBO_HOME and its directory permissions.`,"setup.fix.runtime":`Reinstall Kōbō with its optional runtime dependencies.`,"setup.fix.authentication":`Log in to the selected provider. The first mission verifies access.`,"setup.fix.model":`Choose Auto or a model available to your account.`,"setup.fix.repository":`Choose an existing Git working directory.`,"setup.fix.firstCommit":`Create the first commit in this project before creating a worktree.`,"setup.fix.projectWritable":`Choose a writable project directory.`,"handoff.freshTitle":`Continue in a fresh session`,"handoff.switchTitle":`Change LLM`,"handoff.warning":`The current work stops immediately. A fresh session continues automatically in the same workspace, keeping tasks and history.`,"handoff.generate":`Generate a handoff with the current agent`,"handoff.generateHint":`Turn off if its quota is exhausted. Kōbō will pass the objective, tasks, Git state and history without calling the current LLM.`,"handoff.start":`Start fresh session`,"handoff.stopping":`Stopping the current agent`,"handoff.generating":`Preparing the handoff`,"handoff.starting":`Starting the fresh session`,"handoff.completed":`Fresh session started`,"handoff.failed":`Handoff failed`,"handoff.interrupted":`Handoff interrupted`,"handoff.cancelled":`Handoff cancelled`,"handoff.skip":`Continue without LLM summary`,"handoff.cancel":`Cancel handoff`,"handoff.report":`Read handoff`,"handoff.source":`Previous session`,"handoff.progress":`Session handoff in progress`,"handoff.blocked":`Resolve or cancel the handoff to continue.`,"handoff.error":`Could not prepare the session handoff.`,"handoff.loadFailed":`Could not load the handoff status.`,"handoff.status":`Session handoff`,"chat.externalLlm":`External LLM · {name}`,"search.indexing":`Indexing history: {processed}/{total}. Results are partial.`,"search.indexUnavailable":`Search index unavailable. Try again later.`,"blockers.setupConfiguration":`No setup script is configured. Add one in the Scripts section of settings.`,"blockers.noWorkspace":`Select a workspace to use this action.`,"blockers.purged":`Restore the worktree from the workspace banner before this action.`,"blockers.archived":`Unarchive the workspace from its menu to use this action.`,"blockers.operation":`Wait for the current operation to finish.`,"blockers.agentBusy":`Wait for the turn to finish or stop the agent from the conversation.`,"blockers.configuration":`Configure this feature in the project settings.`,"blockers.settings":`Open settings`,"workspaceSort.label":`Sort workspaces`,"workspaceSort.activity":`Last activity`,"workspaceSort.created":`Creation date`,"workspaceSort.name":`Name`,"workspaceSort.attention":`Attention priority`,"workspaceSort.asc":`Ascending`,"workspaceSort.desc":`Descending`,"workspaceSort.hint":`Sort within each group, including archives. Viewing a workspace does not change its last activity.`,"model.tooltip":`Model used by the agent for this workspace`,"reasoning.tooltip":`Reasoning level used by the agent for this workspace`,"thinking.label":`Thinking`,"thinking.noDetails":`The agent is thinking…`,"common.save":`Save`,"common.duplicate":`Duplicate`,"common.confirm":`Confirm`,"common.cancel":`Cancel`,"common.open":`Open`,"common.retry":`Retry`,"common.delete":`Delete`,"common.close":`Close`,"workspace.deleteTitle":`Delete workspace`,"workspace.deleteTypeBranch":`Retype the branch name to confirm`,"workspace.deleteConsequences":`This removes the worktree and the whole conversation.`,"workspace.deleteFailed":`Could not delete the workspace.`,"workspace.archiveFailed":`Could not archive the workspace.`,"tasks.updateFailed":`Could not update the task.`,"dashboard.tooltip":`Dashboard`,"dashboard.title":`Dashboard`,"dashboard.count":`{n} workspace | {n} workspaces`,"dashboard.empty":`No active workspace.`,"dashboard.workspace":`Workspace`,"dashboard.status":`Status`,"dashboard.attention":`Attention`,"dashboard.pr":`PR`,"dashboard.diff":`Diff`,"dashboard.activity":`Activity`,"dashboard.prOpen":`open`,"reliability.title":`Model reliability`,"reliability.subtitle":`How each engine and model actually ended on this machine.`,"reliability.empty":`No session has ended yet.`,"reliability.loadFailed":`Could not load the reliability figures.`,"reliability.engine":`Engine`,"reliability.model":`Model`,"reliability.sessions":`Sessions`,"reliability.completed":`Completed`,"reliability.watchdog":`Watchdog`,"reliability.killed":`Stopped`,"reliability.errors":`Errors`,"reliability.unknown":`Unknown`,"reliability.median":`Median`,"reliability.durationSeconds":`{s}s`,"reliability.durationMinutes":`{m}m {s}s`,"reliability.durationHours":`{h}h {m}m`,"reliability.reset":`Reset: count only sessions ended from now on`,"reliability.since":`Since {date}`,"reliability.showAll":`Show all`,"update.available":`A newer Kōbō is available: {version}`,"update.how":`How to update`,"common.dismiss":`Dismiss`,"common.details":`Details`,"common.ok":`OK`,"whatsNew.title":`What's new`,"common.loading":`Loading...`,"common.search":`Search...`,"common.refresh":`Refresh`,"common.copy":`Copy`,"common.copied":`Copied to clipboard`,"common.copyFailed":`Copy failed`,"common.add":`Add`,"folderPicker.title":`Choose a folder`,"folderPicker.parent":`Parent folder`,"folderPicker.empty":`No subfolders`,"folderPicker.select":`Select this folder`,"common.start":`Start`,"common.stop":`Stop`,"common.archive":`Archive`,"common.unarchive":`Unarchive`,"common.selectWorkspace":`Select a workspace`,"common.noResults":`No results for "{query}"`,"common.send":`send`,"common.newLine":`new line`,"common.history":`history`,"common.justNow":`just now`,"common.minutesAgo":`{count}m ago`,"common.hoursAgo":`{count}h ago`,"common.daysAgo":`{count}d ago`,"model.auto":`Auto`,"model.opus55":`Opus 5.5`,"model.opus55Description":`For complex work and everyday tasks, 1M context`,"model.sonnet55":`Sonnet 5.5`,"model.sonnet55Description":`Efficient for routine tasks, 1M context`,"model.gpt61sol":`GPT-6.1 Sol`,"model.gpt61solDescription":`Latest workhorse model for coding and everyday work`,"model.gpt6sol":`GPT-6 Sol`,"model.gpt6solDescription":`Previous-generation workhorse model`,"model.gpt6luna":`GPT-6 Luna`,"model.gpt6lunaDescription":`Fast model for easier tasks`,"model.fable51":`Fable 5.1`,"model.fable5":`Fable 5`,"model.fable5Description":`For demanding, long-running tasks`,"model.mythos51":`Mythos 5.1 (Glasswing)`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable51Description":`Most capable model - replaces Fable 5, 1M context, adaptive thinking`,"model.mythos51Description":`Fable 5.1 offered by invitation only through Project Glasswing`,"model.mythos5Description":`Fable 5.1 without safety classifiers — limited access (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude picks the optimal model`,"model.opus5Description":`For complex agentic coding and enterprise work, 1M context`,"model.opus48Description":`Most capable Opus — long-horizon agentic coding, 1M context by default, high effort default`,"model.opus47ClassicDescription":`Latest Opus, most capable`,"model.opus471mDescription":`Latest Opus, 1M context`,"model.opusClassicDescription":`Most powerful`,"model.opus1mDescription":`Most powerful, 1M context`,"model.sonnet5Description":`Best mix of speed and intelligence, 1M context`,"model.sonnetClassicDescription":`Balanced`,"model.sonnet1mDescription":`Balanced, 1M context`,"model.haikuDescription":`Fastest`,"model.gpt6astra":`GPT-6 Astra`,"model.gpt6astraDescription":`Most capable frontier model, 1M context (requires ChatGPT auth)`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`Older-generation workhorse model`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Balanced agentic coding model for everyday work (requires ChatGPT auth)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Fast and affordable agentic coding model (requires ChatGPT auth)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Legacy coding model`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Default fallback — strong reasoning, works with API key auth`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Fast and efficient — best for responsive tasks and subagents`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimized for professional work and long-running agents`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Coding-specialized model for complex software engineering`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`none`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Let the engine pick the default`,"reasoning.minimalDescription":`Fastest, shallowest reasoning`,"reasoning.noneDescription":`No additional reasoning`,"reasoning.lowDescription":`Faster, less depth`,"reasoning.mediumDescription":`Balanced`,"reasoning.highDescription":`More depth`,"reasoning.xhighDescription":`Extended depth, long-horizon tasks`,"reasoning.maxDescription":`Maximum depth`,"agentPermissionMode.label":`Permission mode`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Accept edits`,"agentPermissionMode.interactive":`Interactive`,"agentPermissionMode.tooltip":`How the agent handles tool permissions. Plan: read-only, no writes. Bypass: skip every prompt. Strict: auto-accept file edits, respect allow/deny lists for the rest. Interactive: ask the user before each tool via the permission panel.`,"agentPermissionMode.autoLoopOverride":`Auto-loop forces a non-plan mode — Plan blocks the MCP tools and edits the loop relies on. Pick Bypass, Strict, or Interactive instead.`,"agentPermissionMode.autoLoopLocked":`Locked to Bypass while auto-loop is on — any other mode would stall the loop on permission prompts. AskUserQuestion still works.`,"workspaceList.title":`Workspaces`,"workspaceList.a11y.groupToggle":`{group} group, {count} workspaces`,"workspaceList.a11y.list":`Workspaces`,"workspaceList.a11y.card":`{name}, {status}`,"workspaceList.needsAttention":`Needs Attention`,"workspaceList.running":`Running`,"workspaceList.idle":`Idle`,"workspaceList.archived":`Archived`,"workspaceList.archivedToast":`“{name}” archived`,"workspaceList.archivedUndo":`Undo`,"workspaceList.unarchiveFailed":`Could not unarchive this workspace`,"workspaceList.noWorkspaces":`No workspaces yet`,"workspaceList.loadFailed":`Could not load your workspaces`,"workspaceList.loadFailedHint":`This is a connection failure, not an empty account.`,"workspaceList.footer":`{count} workspace | {count} workspaces`,"workspaceList.footerRunning":`{count} running`,"workspaceList.deleteDialog.title":`Delete workspace?`,"workspaceList.deleteDialog.deleteLocal":`Delete local branch`,"workspaceList.deleteDialog.deleteRemote":`Delete remote branch`,"workspaceList.deleteDialog.warning":`Warning: this action is irreversible on the remote.`,"workspaceList.deleteArchivedDialog.tooltip":`Delete all archived workspaces`,"workspaceList.deleteArchivedDialog.title":`Delete all archived workspaces?`,"workspaceList.deleteArchivedDialog.message":`This will permanently delete the {count} archived workspaces. This action cannot be undone.`,"workspaceList.deleteArchivedDialog.typeCount":`Type {count} to confirm`,"workspacePage.configure":`Configure`,"workspacePage.permissions":`Permissions`,"workspacePage.selectWorkspace":`Select a workspace to begin`,"workspacePage.commandPalettePlaceholder":`Search commands…`,"workspacePage.commandPaletteEmpty":`No matching command`,"workspacePage.commandFocusChat":`Focus chat input`,"workspacePage.commandSearchHistory":`Search workspace history`,"workspacePage.commandTogglePanel":`Show or hide side panel`,"workspacePage.commandStartAgent":`Start agent`,"workspacePage.commandStopAgent":`Stop agent`,"workspacePage.commandOpenSettings":`Open settings`,"workspacePage.commandOpenCreate":`Create a workspace`,"workspacePage.commandOpenSearch":`Global search`,"workspacePage.commandOpenHealth":`Health page`,"workspacePage.commandOpenChangelog":`Changelog`,"workspacePage.commandGroupWorkspaces":`Switch to a workspace`,"workspacePage.commandPaletteHint":`Command palette`,"workspacePage.session":`Session #{n}`,"workspacePage.newSession":`+ New session`,"workspacePage.renameSession":`Rename`,"workspacePage.renameSessionTitle":`Rename session`,"workspacePage.sessionNameLabel":`Session name`,"workspacePage.sessionEndedNotice":`This session has ended. Create a new session to continue.`,"workspacePage.renameFailed":`Rename failed`,"workspacePage.copySessionId":`Copy session ID`,"workspacePage.deleteSession":`Delete session`,"workspacePage.deleteSessionTitle":`Delete session?`,"workspacePage.deleteSessionConfirm":`This permanently deletes this session and its conversation history.`,"workspacePage.deleteSessionFailed":`Failed to delete session`,"workspacePage.noEngineSessionId":`No engine session ID yet — the agent hasn't started this session`,"workspacePage.createSessionFailed":`Failed to create session`,"workspacePage.startFailed":`Start failed`,"workspacePage.stopFailed":`Stop failed`,"workspacePage.interrupt":`Interrupt`,"workspacePage.interrupted":`Agent interrupted — waiting for your next message`,"workspacePage.lastAgentEvent":`Last event {when}`,"workspacePage.agentStopping":`Stopping…`,"workspacePage.agentNotRunning":`No agent process — status is stale`,"contextMenu.restoreWorktree":`Restore worktree`,"workspacePage.restoringWorktree":`Restoring…`,"workspacePage.worktreeRestoreSuccess":`Worktree restored`,"workspacePage.worktreeRestoreLimitations":`Recreates committed Git files. Dependencies and previously discarded local files are not restored.`,"workspacePage.restoreError.not-found":`This workspace no longer exists. Refresh the workspace list.`,"workspacePage.restoreError.not-purged":`This workspace is not marked as purged. Refresh it and check its working directory.`,"workspacePage.restoreError.workspace-busy":`Another operation is running on this workspace. Wait for it to finish, then retry.`,"workspacePage.restoreError.worktree-not-owned":`This worktree is not managed by Kōbō. Restore it manually in its original project.`,"workspacePage.restoreError.project-unavailable":`The original project is unavailable. Reconnect its disk or restore the project at its original path, then retry.`,"workspacePage.restoreError.path-conflict":`The worktree path is occupied by another folder or checkout. Move the conflicting folder or follow the manual recovery instructions in Details.`,"workspacePage.restoreError.branch-in-use":`The working branch is already checked out elsewhere. Use that checkout or release the branch from it before retrying.`,"workspacePage.restoreError.recovery-source-unavailable":`The working branch and saved commit could not be found. Check remote access or follow the manual recovery instructions in Details.`,"workspacePage.restoreError.git-failed":`Restoration failed. Check Git access and disk permissions, then retry. Details opens the manual recovery guide.`,"workspacePage.archivedBanner":`Archived workspace — read-only`,"workspacePage.worktreePurgedBanner":`Worktree deleted — history kept`,"workspacePage.worktreePurgedTooltip":`Restore worktree recreates the working directory and unarchives this workspace. Chat history, tasks and sessions are preserved. No agent or dev server is started.`,"workspacePage.pendingInitialPromptBanner":`An initial prompt is pending — the agent never received it (setup script crashed or the workspace was never started). Click Start to send it now.`,"workspacePage.unarchived":`Workspace unarchived`,"workspacePage.unarchiveFailed":`Unarchive failed`,"workspacePage.interruptFailed":`Interrupt failed`,"workspacePage.interruptHint":`Interrupt the current turn without ending the session.`,"workspacePage.interruptTooltip":`Soft interrupt (like Escape) — stops the current tool but keeps the session alive`,"workspacePage.pendingNextRun":`Applied on next start`,"workspacePage.activeSessionModel":`Active: {model}`,"workspacePage.activeSessionModelTooltip":`Model currently used by the selected session`,"workspacePage.switchEngine":`Switch engine`,"workspacePage.switchEngineHint":`Continue this workspace with another agent engine`,"workspacePage.moreActions":`More actions`,"workspacePage.switchEngineTitle":`Switch agent engine`,"workspacePage.switchEngineWarning":`The current agent will be stopped and a fresh session will start in the same worktree.`,"workspacePage.engineLabel":`Engine`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Handoff for the new engine`,"workspacePage.engineHandoffHint":`Review or edit the context that will be sent to the new agent.`,"workspacePage.confirmSwitchEngine":`Switch engine`,"workspacePage.switchEngineFailed":`Failed to switch engine`,"whip.dispatchFailed":`Unable to send the whip message`,"whip.phrase1":`Continue, please.`,"whip.phrase2":`Keep working through the task list.`,"whip.phrase3":`Please proceed with the next step.`,"whip.phrase4":`Check progress and continue.`,"whip.phrase5":`Continue within the agreed scope.`,"search.title":`Search`,"search.tooltip":`Search across agent history`,"search.placeholder":`Search across all agent messages…`,"search.includeArchived":`Include archived workspaces`,"search.loading":`Searching…`,"search.noResults":`No matches`,"search.error":`Search failed: {message}`,"search.resultCount":`{n} result(s)`,"search.eventType.userMessage":`You`,"search.eventType.agentOutput":`Agent`,"activityFeed.empty":`No activity yet`,"activityFeed.emptyHint":`Start a workspace to see agent output here`,"activityFeed.initialPrompt":`Initial Prompt`,"activityFeed.you":`You`,"activityFeed.agent":`Agent`,"activityFeed.question":`Question`,"activityFeed.goToPrevious":`Go to previous message`,"activityFeed.scrollToBottom":`Scroll to bottom`,"activityFeed.sendAnswers":`Send answers`,"agentBusy.banner":`Agent is busy`,"agentBusy.subagentsRunning":`1 sub-agent running | {n} sub-agents running`,"agentBusy.viewSubagents":`View sub-agents`,"agentBusy.pendingMessage":`Waiting — agent is busy`,"terminal.title":`Terminal`,"terminal.open":`Open terminal`,"terminal.close":`Close terminal`,"terminal.noWorkspace":`Select a workspace`,"terminal.noWorktree":`Worktree not created yet`,"terminal.error":`Terminal error`,"terminal.exited":`Terminal exited`,"terminal.disconnected":`Connection lost`,"terminal.outputMayBeMissing":`[Connection interrupted. Some terminal output may be missing.]`,"terminal.reconnecting":`Reconnecting… (attempt {attempt} of {max})`,"terminal.reconnect":`Reconnect`,"chatInput.placeholder":`Message... (/ for skills)`,"chatInput.fileSearchHint":`search a file`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Attach image`,"chatInput.queueBanner":`Message queued — will be sent when the agent finishes`,"chatInput.forceQueue":`Force send`,"chatInput.searchHistory":`search`,"chatInput.commandPalette":`commands`,"chatInput.shortcuts":`Keyboard shortcuts`,"chatInput.cancelQueue":`Cancel Queue`,"chatInput.autoLoopBanner":`Auto-loop is running — stop it to send a message`,"chatInput.awaitingUserBanner":`The agent is waiting for your answer above — reply via the question panel`,"chatInput.autoLoopStop":`Stop`,"koboCommand.checkProgressDesc":`Verify progress on tasks and acceptance criteria`,"chatInput.uploading":`Uploading...`,"voice.title":`Voice transcription`,"voice.enabled":`Enable local voice transcription`,"voice.pttKey":`Push-to-talk key`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Ctrl+Space`,"voice.language":`Language (auto or code)`,"voice.model":`Active model`,"voice.commandPath":`Whisper binary path (optional)`,"voice.ffmpegPath":`ffmpeg binary path (optional)`,"voice.temperature":`Temperature`,"voice.temperatureHint":`Lower is more deterministic; higher can be more flexible but less stable.`,"voice.initialPrompt":`Initial prompt (optional)`,"voice.initialPromptHint":`Optional context to help Whisper with names, jargon, or domain vocabulary.`,"voice.translateToEnglish":`Translate to English`,"voice.translateToEnglishHint":`When enabled, non-English speech is translated to English instead of transcribed as-is.`,"voice.suppressNst":`Suppress non-speech tokens`,"voice.suppressNstHint":`Attempts to reduce non-speech artifacts in the transcript.`,"voice.installLink":`Install whisper.cpp`,"voice.installGuideTitle":`Installation guide`,"voice.installGuideIntro":`Install whisper.cpp and ffmpeg, then set the binary paths below if needed.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`After CMake build, the Whisper binary is usually at: whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Then set "Whisper binary path" and "ffmpeg binary path" in this section (or leave empty if they are in PATH).`,"voice.noneModel":`No active model`,"voice.notInstalled":`not installed`,"voice.download":`Download`,"voice.delete":`Delete`,"voice.holdToTalk":`Hold to talk`,"voice.recording":`Recording...`,"voice.transcribing":`Transcribing...`,"voice.notSupported":`Voice recording is not supported in this browser`,"voice.errorMicPermission":`Microphone permission denied`,"voice.errorTranscription":`Voice transcription failed`,"voice.downloadFailed":`Model download failed`,"voice.deleteFailed":`Model deletion failed`,"voice.errorDisabled":`Voice transcription is disabled in settings`,"voice.errorModelMissing":`No active voice model is configured`,"voice.errorModelNotInstalled":`The active voice model is not installed`,"voice.errorAudioInvalid":`Audio capture is invalid or empty`,"voice.errorLanguageInvalid":`Voice language configuration is invalid`,"voice.errorRuntimeMissing":`Whisper runtime is not installed or not in PATH`,"voice.maxDurationReached":`Maximum recording duration reached`,"voice.runtimeReady":`Runtime ready: {command}`,"voice.runtimeMissing":`Runtime missing: {command}`,"voice.ffmpegReady":`ffmpeg ready`,"voice.ffmpegMissing":`ffmpeg missing`,"voice.sectionRuntime":`Runtime status`,"voice.sectionActivation":`Activation`,"voice.sectionModels":`Whisper models`,"voice.sectionAdvanced":`Advanced options`,"voice.sectionBehavior":`Transcription behavior`,"voice.sectionBinaries":`Binary paths`,"voice.downloadModels":`Download a model`,"voice.cancelFailed":`Failed to cancel the download`,"attachments.error.upload":`Upload failed. Remove the attachment and try again.`,"attachments.add":`Attach files`,"attachments.remove":`Remove attachment`,"attachments.hint":`Paste or drop files here · {count} maximum · {size} MB each · {total} MB total`,"attachments.error.type":`Use PNG, JPEG, GIF or WebP images, PDF, Markdown or text documents (TXT, CSV, JSON, YAML, XML, LOG, RST, TOML).`,"attachments.error.size":`Each file must be non-empty and no larger than 50 MB.`,"attachments.error.count":`You can attach up to 10 files.`,"attachments.error.total":`Attachments must total no more than 50 MB.`,"attachments.descriptionRequired":`Enter a description or attach a file.`,"createPage.title":`Create a workspace`,"createPage.fromTemplate":`From a template`,"createPage.fromTemplateNone":`None`,"createPage.saveAsTemplate":`Save as template`,"createPage.saveTemplateTitle":`Save this form as a template`,"createPage.saveTemplateName":`Template name`,"createPage.saveTemplateOverwrite":`A template named “{name}” exists. Overwrite it?`,"createPage.templateSaved":`Template “{name}” saved`,"createPage.templateApplied":`Template “{name}” applied`,"createPage.duplicatedFrom":`Duplicated from “{name}”`,"createPage.duplicateLoadFailed":`Could not load the workspace to duplicate.`,"createPage.templateSaveFailed":`Could not save the template.`,"createPage.presetProjectUnknown":`This template targets a project that is no longer configured; the current project was kept.`,"createPage.copySuffix":`(copy)`,"createPage.subtitle":`Describe the mission, choose a project, then configure the agent.`,"createPage.sectionMission":`Mission`,"createPage.sectionMissionHint":`Give the agent a clear objective and the context needed to complete it.`,"createPage.workspaceNameLabel":`Workspace name`,"createPage.descriptionLabel":`Mission description`,"createPage.tagsLabel":`Tags`,"createPage.tagsHint":`Classify this workspace`,"createPage.sources":`Optional sources`,"createPage.sectionGit":`Git project`,"createPage.sectionGitHint":`Choose the repository, source branch and worktree mode.`,"createPage.worktreeMode":`Worktree mode`,"createPage.worktreeNew":`New isolated worktree`,"createPage.worktreeExisting":`Reuse an existing worktree`,"createPage.projectLabel":`Project`,"createPage.sourceBranch":`Source branch`,"createPage.workingBranchPreview":`Working branch preview`,"createPage.branchNamePending":`workspace-name`,"createPage.sectionAgent":`Agent`,"createPage.sectionAgentHint":`Review the execution defaults or enable automation.`,"createPage.configureAgent":`Configure the agent`,"createPage.advancedOptions":`Advanced options`,"createPage.keyboardHint":`Press Ctrl/Cmd + Enter to create the workspace.`,"createPage.createWorkspace":`Create workspace`,"createPage.compareEngines":`Compare two engines`,"createPage.engineA":`Engine A`,"createPage.engineB":`Engine B`,"createPage.compareBrainstormLocked":`Comparison mode: each engine brainstorms on the model and effort set in its own block above.`,"createPage.compareEnginesHint":`Creates two workspaces from this task, one per engine, in sibling worktrees. Their diffs can then be compared side by side.`,"createPage.compareNeedsNewWorktree":`Comparing two engines needs two new worktrees. Turn off “use an existing worktree” first.`,"createPage.compareNeedsSecondEngine":`Pick a second engine, different from the first, to compare against.`,"comparison.title":`Engine comparison`,"comparison.hint":`The same task, run by each engine in its own worktree.`,"comparison.engine":`Engine`,"comparison.status":`Status`,"comparison.tasks":`Tasks`,"comparison.commits":`Commits`,"comparison.files":`Files`,"comparison.diff":`Diff`,"comparison.messages":`Messages`,"comparison.messagesTitle":`Agent messages / your messages`,"comparison.questions":`Questions`,"comparison.tools":`Tools`,"comparison.errors":`Errors`,"comparison.tokens":`Tokens`,"comparison.tokensTitle":`Input / output tokens`,"comparison.sessions":`Sessions`,"comparison.duration":`Time`,"comparison.exportCsv":`Export as CSV`,"comparison.open":`Open`,"comparison.current":`This one`,"comparison.archived":`archived`,"comparison.incomplete":`Only one workspace of this comparison exists. The other was never created, or has been deleted.`,"createPage.comparisonPartial":`Only {count} of {total} workspaces were created. The one that exists is usable on its own; delete it if you would rather start over.`,"createPage.notionEnabled":`Notion enabled`,"createPage.importNotion":`Import from Notion`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`URL must start with https://www.notion.so/ or https://app.notion.com/`,"createPage.notionAutoExtract":`Subtasks and acceptance criteria will be extracted automatically.`,"createPage.notionPanelChoiceLabel":`This URL points to a sub-page (?p=). Which one do you want to work on?`,"createPage.notionPanelOption":`Sub-page (panel)`,"createPage.notionPanelOptionDesc":`The page you were viewing — recommended`,"createPage.notionParentOption":`Parent page`,"createPage.notionParentOptionDesc":`The epic / database it belongs to`,"createPage.importSentry":`Import Sentry`,"createPage.sentryEnabled":`Sentry enabled`,"createPage.sentryPlaceholder":`https://your-org.sentry.io/issues/123456`,"createPage.sentryValidation":`URL must point to a Sentry issue (/issues/<id>)`,"createPage.sentryAutoExtract":`Sentry issue will be imported automatically`,"createPage.sentryExtractHint":`Kobo will extract the issue and write it to .ai/thoughts/`,"createPage.importPr":`Import from a PR`,"createPage.importPrRequiresProject":`Choose a project first`,"createPage.importPrNotSupported":`This project's forge does not support listing pull requests`,"createPage.lockedToPr":`Locked to PR #{number}`,"createPage.prReadyToCreate":`PR #{number} imported — ready to create the workspace.`,"createPage.prResumeIntro":`Resuming work on the existing pull request #{number} "{title}" ({url}).`,"createPage.unlockPrCheckout":`Unlock`,"createPage.workspaceName":`Workspace name (defaults to Notion page title)`,"createPage.workspaceNamePlaceholder":`Workspace name...`,"createPage.instructions":`Additional instructions (optional)...`,"createPage.instructionsPlaceholder":`Describe the task...`,"createPage.tasks":`Tasks ({count})`,"createPage.addTask":`Add a task...`,"createPage.acceptanceCriteria":`Acceptance Criteria ({count})`,"createPage.addCriterion":`Add a criterion...`,"createPage.projectPath":`Enter the project path`,"createPage.branchType":`Branch type`,"createPage.branch":`Branch`,"createPage.noBranches":`No branches found`,"createPage.enterPath":`Enter a project path`,"createPage.skipSetupScript":`Skip setup script`,"createPage.worktreePickerLabel":`Existing worktree`,"createPage.noOrphanWorktrees":`No orphan worktrees in this project`,"createPage.pickWorktreeRequired":`Please pick a worktree to attach`,"createPage.notionExtractHint":`Subtasks and acceptance criteria will be extracted from the Notion page.`,"createPage.errorCreating":`Error creating workspace.`,"createPage.branchAdjusted":"Branch already existed — created `{branch}` instead. The matching worktree folder uses the same suffix.","createPage.localSourceFallback":`Workspace created from the local branch (origin unreachable) — the base may be stale.`,"createPage.validationNotionUrl":`Please paste a valid Notion URL (https://www.notion.so/... or https://app.notion.com/...).`,"createPage.validationDescription":`Please describe the task.`,"createPage.validationName":`Please provide a workspace name.`,"createPage.validationPath":`Please enter the project path.`,"createPage.validationBranch":`Please select a branch.`,"createPage.validationFocusHint":`The field to fix is highlighted below.`,"createPage.progress.validate":`Validating the request…`,"createPage.progress.fetch-source-branch":`Fetching the source branch from origin…`,"createPage.progress.inspect-worktree":`Inspecting the existing worktree…`,"createPage.progress.extract-notion":`Extracting the Notion page…`,"createPage.progress.extract-sentry":`Extracting the Sentry issue…`,"createPage.progress.create-record":`Creating the workspace…`,"createPage.progress.create-tasks":`Creating tasks and acceptance criteria…`,"createPage.progress.create-worktree":`Creating the git worktree…`,"createPage.progress.write-conventions":`Writing git conventions…`,"createPage.progress.write-context-files":`Writing context files…`,"createPage.progress.build-prompt":`Building the initial prompt…`,"createPage.progress.setup-script":`Running your setup script…`,"createPage.progress.start-agent":`Starting the agent…`,"createPage.progress.rollback":`Undoing the failed creation…`,"createPage.progress.done":`Done`,"createPage.progress.step":`Step {index} of {total}`,"createPage.errorAtStep":`Creation failed at step "{step}": {message}`,"createPage.override.title":`Two of your choices were overridden`,"createPage.override.setup-script-forced":`Setup script skipped: re-running it on a worktree you already prepared could destroy its contents.`,"createPage.override.permission-mode-downgraded":`Permission mode moved from Plan to Bypass: an auto-loop cannot run in Plan, which blocks tools and edits.`,"settings.title":`Settings`,"settings.language":`Language`,"settings.projectColor":`Color`,"settings.projectColorClear":`Clear`,"settings.projectColorDefault":`Default (grey)`,"settings.workspaceListSection":`Workspace list`,"settings.flattenWorkspaceList":`Flatten workspace list`,"settings.flattenWorkspaceListHint":`Show all workspaces in a single flat list with a project badge, instead of grouping by project.`,"workflow.title":`Git workflow`,"workflow.hint":`These preferences guide agents; they do not replace sandbox permissions. More restrictive user instructions take priority. Publication never authorizes merging. New workspaces keep a snapshot of these choices.`,"workflow.commit":`Commit`,"workflow.push":`Push`,"workflow.publish":`Publish PR/MR or comments`,"workflow.manual":`Manual — explicit request`,"workflow.automatic":`Automatic — when needed`,"workflow.inherit":`Inherit`,"workflow.locked":`Stop the agent to change these preferences. A running session already received them.`,"workflow.updateFailed":`Could not save the workflow preference. Check the connection and try again.`,"workflow.save":`Save workflow preferences`,"workflow.saved":`Workflow preferences saved.`,"workflow.planExecution":`Plan can prepare the mission. Execution requires choosing a supported execution permission mode explicitly, then resuming the loop.`,"settings.skillSuite.standard":`Standard (no extensions)`,"settings.skillSuite.standardHint":`Built-in workflow with no external skill suite required.`,"settings.skillSuite.section":`Skill suite`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Custom`,"settings.skillSuite.superpowersHint":`Opinionated TDD / brainstorm / plan workflow (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Garry Tan's stack — /review, /ship, /qa, /office-hours, etc. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Both suites stack — superpowers for process discipline (brainstorm / TDD / plans / principles-level review), gstack for concrete workflows (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`affaan-m's agent-harness framework — agents, skills, rules and hooks for planning, testing, implementing, reviewing and memorizing (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`All three stack — superpowers for process discipline, gstack for concrete workflows, ECC for structured multi-agent review/implementation passes.`,"settings.skillSuite.customHint":`Compose the five prompts below from any templates you choose, then edit them freely.`,"settings.skillSuite.reloadDefaults":`Reload defaults`,"settings.skillSuite.reloadDefaultsConfirm":`Replace the five custom prompts with the agnostic defaults?`,"settings.skillSuite.customPrompts":`Custom prompts`,"settings.skillSuite.agnostic":`Agnostic baseline`,"settings.skillSuite.importPrompt":`Import a template`,"settings.skillSuite.imported":`Template imported. You can now edit it.`,"settings.skillSuite.importFailed":`Unable to import the template`,"settings.skillSuite.reviewTemplate":`Review template`,"settings.skillSuite.autoLoopReviewGate":`Auto-loop review gate`,"settings.skillSuite.autoLoopGroomingIntro":`Auto-loop grooming intro`,"settings.skillSuite.qaTemplate":`QA template`,"settings.skillSuite.brainstormingInstruction":`Brainstorming-phase instruction`,"settings.global":`Global`,"settings.projects":`Projects`,"settings.globalSettings":`Global Settings`,"settings.defaultModel":`Default model`,"settings.defaultModelClaude":`Default model (Claude Code)`,"settings.defaultModelCodex":`Default model (OpenAI Codex)`,"settings.agentPermissions":`Agent permissions`,"settings.skipPermissions":`Skip permission prompts (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Warning: disabling this will cause all tool permissions (Write, Edit, Bash...) to be auto-denied in headless mode. The agent will only be able to read.`,"settings.notifications":`Notifications`,"settings.browserNotifications":`Browser notifications when agent finishes`,"settings.audioNotifications":`Sound notification when agent finishes`,"settings.enableBrowserNotifications":`Enable browser notifications`,"settings.testBrowserNotification":`Test notification`,"settings.browserNotificationGranted":`Browser notifications allowed`,"settings.browserNotificationDenied":`Browser notifications blocked`,"settings.browserNotificationAsk":`Browser permission required`,"settings.browserNotificationUnsupported":`Browser notifications unavailable`,"settings.browserNotificationPermissionNeeded":`Allow browser notifications to send a test.`,"settings.browserNotificationTestTitle":`Kōbō notification test`,"settings.browserNotificationTestBody":`Browser notifications are working.`,"settings.enableAudio":`Enable audio`,"settings.notificationSound":`Notification sound`,"settings.notificationSoundHint":`Played when the agent finishes or requests permission.`,"settings.questionSound":`Question sound`,"settings.questionSoundHint":`Played only when the agent asks you a question.`,"settings.workspaceCreatedSound":`Workspace creation sound`,"settings.workspaceCreatedSoundHint":`Played after a workspace is created.`,"settings.notificationSoundPreview":`Preview`,"settings.notificationVolume":`Volume`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Agent errors`,"settings.agentErrorSoundHint":`Played for quota, rate-limit, and agent errors.`,"settings.notificationSoundBasic":`Basic notification`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Work`,"settings.notificationSoundTravailTermine":`Work done`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`It's gonna blow`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR and CI`,"settings.soundGeneral":`General sound`,"settings.soundNone":`No sound`,"settings.prCiFailedSound":`CI failed`,"settings.prCiRecoveredSound":`CI recovered`,"settings.prChangesRequestedSound":`Changes requested`,"settings.prApprovedSound":`PR approved`,"settings.prMergeConflictSound":`Merge conflict`,"settings.prReadyToMergeSound":`Ready to merge`,"settings.prMergedSound":`PR merged`,"settings.prCiFailedSoundHint":`Played when CI changes to a failed state.`,"settings.prCiRecoveredSoundHint":`Played when CI recovers from a failure.`,"settings.prChangesRequestedSoundHint":`Played when a review requests changes.`,"settings.prApprovedSoundHint":`Played when the pull request is approved.`,"settings.prMergeConflictSoundHint":`Played when a merge conflict is detected.`,"settings.prReadyToMergeSoundHint":`Played when the pull request becomes ready to merge.`,"settings.prMergedSoundHint":`Played when the pull request is merged.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Default permission mode`,"settings.defaultPermissionModeClaude":`Default permission mode (Claude Code)`,"settings.defaultPermissionModeCodex":`Default permission mode (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Mode applied when creating a new workspace. Plan = read-only first, Bypass = skip prompts, Strict = auto-accept edits with allow-list, Interactive = ask before each tool.`,"settings.activityFeed":`Activity feed`,"settings.verboseMessages":`Show verbose system messages (task_progress, task_started)`,"settings.showThinkingBlocks":`Show agent thinking blocks`,"settings.whipSettings":`Whip`,"settings.whipSettingsHint":`Configure the optional whip shortcut and volume.`,"settings.whipEnabled":`Enable whip`,"settings.whipEnabledHint":`Shows the interactive whip control in eligible running workspaces.`,"settings.whipVolume":`Whip volume`,"settings.whipVolumeMasterAudioDisabled":`Master audio is off. Enable audio notifications to adjust the whip volume; your saved value is preserved.`,"whip.overlayLabel":`Interactive whip`,"whip.overlayInstructions":`Move the pointer to control the whip. Press Enter or Space to crack it. Press Escape to close.`,"settings.whipShortcut":`Whip shortcut`,"settings.whipShortcutHint":`Click, then press the shortcut to use.`,"settings.whipShortcutRecording":`Press a shortcut…`,"settings.whipShortcutButtonLabel":`Whip shortcut: {shortcut}`,"settings.whipShortcutRecordingLabel":`Recording whip shortcut. Press a shortcut…`,"settings.whipShortcutReset":`Reset shortcut`,"settings.whipShortcutReserved":`This shortcut is reserved by the browser.`,"settings.testIntegration":`Test connection`,"pwa.offline":`You are offline. Chat and agents require the Kōbō server.`,"pwa.reconnecting":`Reconnecting to the Kōbō server…`,"pwa.installReady":`Install Kōbō as an app.`,"pwa.install":`Install`,"pwa.ignore":`Ignore`,"pwa.updateReady":`A Kōbō update is available.`,"pwa.reload":`Reload`,"chat.searchWorkspaceHistory":`Search workspace history`,"chat.historySearch.user":`You`,"chat.historySearch.agent":`Agent`,"chat.openInGitDiff":`Open in Git diff`,"timeline.title":`Session timeline`,"timeline.export":`Export diagnostic`,"timeline.unnamed":`Agent session`,"timeline.tools":`{count} tools`,"timeline.errors":`{count} errors`,"settings.availableVariables":`Available template variables`,"settings.prPromptTemplate":`PR prompt template`,"settings.prPromptPlaceholder":`Instructions for the agent when creating GitHub PRs...`,"settings.prPromptHint":`Use the template variables listed above (double curly brace syntax).`,"settings.reviewPromptTemplate":`Review prompt template`,"settings.reviewPromptPlaceholder":`Instructions for the agent when reviewing branch changes...`,"settings.ciFixPromptTemplate":`CI fix prompt template`,"settings.ciFixPromptHint":`Sent to the agent when a workspace has failing CI. Variables (double-brace syntax): pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Ask the agent to diagnose and fix the failing CI jobs...`,"settings.finalizationPromptTemplate":`Auto-loop finalization prompt`,"settings.finalizationPromptHint":`Default prompt for the final auto-loop iteration (last quality checks). Used when a project leaves its own finalization prompt empty.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Notion initial prompt`,"settings.notionInitialPrompt.help":`Appended to the workspace creation prompt when the workspace has a Notion ticket. Variables: {variables}.`,"settings.notionInitialPrompt.project":`Notion initial prompt (override)`,"settings.sentryInitialPrompt":`Sentry initial prompt`,"settings.sentryInitialPrompt.help":`Appended to the workspace creation prompt when the workspace has a Sentry issue. Variables: {variables}.`,"settings.sentryInitialPrompt.project":`Sentry initial prompt (override)`,"settings.initialPrompt.inheritHint":`Leave blank to inherit. Type any whitespace character to disable injection at this level.`,"settings.resetToDefault":`Reset to default`,"settings.resetFailed":`Failed to load default value`,"settings.sentryIntegration":`Sentry integration`,"settings.var.prNumber":`PR number (e.g., 42)`,"settings.var.prUrl":`Full URL of the created PR`,"settings.var.branchName":`Working branch name`,"settings.var.sourceBranch":`Source branch the PR targets`,"settings.var.workspaceName":`Workspace name`,"settings.var.projectName":`Last segment of the project path`,"settings.var.notionUrl":`Notion URL if set, empty otherwise`,"settings.var.commits":`Bulleted commit list between source and head`,"settings.var.diffStats":`Git shortstat summary (files, insertions, deletions)`,"settings.var.tasks":`Regular tasks as a checkbox list`,"settings.var.acceptanceCriteria":`Acceptance criteria as a checkbox list`,"settings.gitConventions":`Git conventions (global)`,"settings.gitConventionsPlaceholder":`# Git conventions...`,"settings.gitConventionsHint":`These conventions are written to .ai/.git-conventions.md in each new workspace and must be followed by the agent before any git operation. Overridden by per-project conventions if defined.`,"settings.setupScript":`Setup script`,"settings.cleanupScript":`Cleanup script`,"settings.archiveScript":`Archive script`,"settings.archiveScriptHint":`Shell script run server-side in the worktree when a workspace is archived. Leave empty to disable.`,"settings.archiveScriptPlaceholder":`e.g. clean up containers, free disk space…`,"settings.hook.sessionEndedTitle":`Hook: session ended`,"settings.hook.sessionEndedHint":`Runs when an agent session ends, whatever the reason. Reads KOBO_SESSION_END_REASON (completed / error / killed / watchdog), KOBO_SESSION_STOP_CAUSE, KOBO_AUTOLOOP_ACTIVE, KOBO_SESSION_ID and KOBO_SESSION_EXIT_CODE. Empty = disabled.`,"settings.hook.sessionEndedPlaceholder":`e.g. npm test, or notify a chat channel…`,"settings.hook.prMergedTitle":`Hook: PR merged`,"settings.hook.prMergedHint":`Runs when a PR is detected as merged, before the workspace is archived or purged — the worktree is still on disk. Reads KOBO_PR_NUMBER and KOBO_PR_URL. Empty = disabled.`,"settings.hook.prMergedPlaceholder":`e.g. trigger a deployment, tag a release…`,"settings.hook.autoLoopDisabledTitle":`Hook: auto-loop stopped`,"settings.hook.autoLoopDisabledHint":`Runs whenever auto-loop is disabled, by Kōbō or by you. Reads KOBO_AUTOLOOP_REASON (completed / stall / error / user-action / awaiting-clarification) and KOBO_TASKS_PENDING. Empty = disabled.`,"settings.hook.autoLoopDisabledPlaceholder":`e.g. send a notification when the loop stalls…`,"settings.changeSourceBranchScript":`Change-source-branch script`,"settings.changeSourceBranchScript.help":`Replaces the built-in cherry-pick when non-empty. The script owns git, PR base, force-push and conflicts; Kōbō still refuses while the agent is running and updates the source-branch metadata on exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — new source branch chosen in the dialog
4
+ `:t.breakLineCode,a=t.needIndent?t.needIndent:n!==`arrow`,o=e.helpers||[],s=Fi(e,{filename:r,breakLineCode:i,needIndent:a});s.push(n===`normal`?`function __msg__ (ctx) {`:`(ctx) => {`),s.indent(a),o.length>0&&(s.push(`const { ${Vr(o.map(e=>`${e}: _${e}`),`, `)} } = ctx`),s.newline()),s.push(`return `),Bi(s,e),s.deindent(a),s.push(`}`),delete e.helpers;let{code:c,map:l}=s.context();return{ast:e,code:c,map:l?l.toJSON():void 0}};function Hi(e,t={}){let n=L({},t),r=!!n.jit,i=!!n.minify,a=n.optimize==null||n.optimize,o=Ei(n).parse(e);return r?(a&&Mi(o),i&&Pi(o),{ast:o,code:``}):(ji(o,n),Vi(o,n))}function Ui(){typeof __INTLIFY_DROP_MESSAGE_COMPILER__!=`boolean`&&(Pr().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function Wi(e){return U(e)&&ea(e)===0&&(Ir(e,`b`)||Ir(e,`body`))}var Gi=[`b`,`body`];function Ki(e){return sa(e,Gi)}var qi=[`c`,`cases`];function Ji(e){return sa(e,qi,[])}var Yi=[`s`,`static`];function Xi(e){return sa(e,Yi)}var Zi=[`i`,`items`];function Qi(e){return sa(e,Zi,[])}var $i=[`t`,`type`];function ea(e){return sa(e,$i)}var ta=[`v`,`value`];function na(e,t){let n=sa(e,ta);if(n!=null)return n;throw la(t)}var ra=[`m`,`modifier`];function ia(e){return sa(e,ra)}var aa=[`k`,`key`];function oa(e){let t=sa(e,aa);if(t)return t;throw la(6)}function sa(e,t,n){for(let n=0;n<t.length;n++){let r=t[n];if(Ir(e,r)&&e[r]!=null)return e[r]}return n}var ca=[...Gi,...qi,...Yi,...Zi,...aa,...ra,...ta,...$i];function la(e){return Error(`unhandled node type: ${e}`)}function ua(e){return t=>da(t,e)}function da(e,t){let n=Ki(t);if(n==null)throw la(0);if(ea(n)===1){let t=Ji(n);return e.plural(t.reduce((t,n)=>[...t,fa(e,n)],[]))}return fa(e,n)}function fa(e,t){let n=Xi(t);if(n!=null)return e.type===`text`?n:e.normalize([n]);{let n=Qi(t).reduce((t,n)=>[...t,pa(e,n)],[]);return e.normalize(n)}}function pa(e,t){let n=ea(t);switch(n){case 3:return na(t,n);case 9:return na(t,n);case 4:{let r=t;if(Ir(r,`k`)&&r.k)return e.interpolate(e.named(r.k));if(Ir(r,`key`)&&r.key)return e.interpolate(e.named(r.key));throw la(n)}case 5:{let r=t;if(Ir(r,`i`)&&I(r.i))return e.interpolate(e.list(r.i));if(Ir(r,`index`)&&I(r.index))return e.interpolate(e.list(r.index));throw la(n)}case 6:{let n=t,r=ia(n),i=oa(n);return e.linked(pa(e,i),r?pa(e,r):void 0,e.type)}case 7:return na(t,n);case 8:return na(t,n);default:throw Error(`unhandled node on format message part: ${n}`)}}var ma=e=>e,ha=R();function ga(e,t={}){let n=!1,r=t.onError||ui;return t.onError=e=>{n=!0,r(e)},{...Hi(e,t),detectError:n}}function _a(e,t){if(!__INTLIFY_DROP_MESSAGE_COMPILER__&&V(e)){H(t.warnHtmlMessage)&&t.warnHtmlMessage;let n=(t.onCacheKey||ma)(e),r=ha[n];if(r)return r;let{ast:i,detectError:a}=ga(e,{...t,location:!1,jit:!0}),o=ua(i);return a?o:ha[n]=o}{let t=e.cacheKey;return t?ha[t]||(ha[t]=ua(e)):ua(e)}}var va={INVALID_ARGUMENT:17,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_NON_STRING_MESSAGE:20,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23};function ya(e){return li(e,null,void 0)}va.INVALID_ARGUMENT,va.INVALID_DATE_ARGUMENT,va.INVALID_ISO_DATE_ARGUMENT,va.NOT_SUPPORT_NON_STRING_MESSAGE,va.NOT_SUPPORT_LOCALE_PROMISE_VALUE,va.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION,va.NOT_SUPPORT_LOCALE_TYPE;function ba(e,t){return t.locale==null?Sa(e.locale):Sa(t.locale)}var xa;function Sa(e){if(V(e))return e;if(B(e)){if(e.resolvedOnce&&xa!=null)return xa;if(e.constructor.name===`Function`){let t=e();if(Lr(t))throw ya(va.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return xa=t}throw ya(va.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}throw ya(va.NOT_SUPPORT_LOCALE_TYPE)}function Ca(e,t,n){return[...new Set([n,...z(t)?t:U(t)?Object.keys(t).filter(e=>e!=="default"):V(t)?[t]:[n]])]}function wa(e,t,n){let r=V(n)?n:Ba,i=e,a;U(t)?(i.__localeChainObjectCache||=new WeakMap,a=i.__localeChainObjectCache.get(t),a||(a=new Map,i.__localeChainObjectCache.set(t,a))):(i.__localeChainCache||=new Map,a=i.__localeChainCache.get(t),a||(a=new Map,i.__localeChainCache.set(t,a)));let o=a.get(r);if(o)return o;let s=[],c=[n];for(;z(c);)c=Ta(s,c,t);let l=z(t)||!W(t)?t:t.default?t.default:null;return c=V(l)?[l]:l,z(c)&&Ta(s,c,!1),a.set(r,s),s}function Ta(e,t,n){let r=!0;for(let i=0;i<t.length&&H(r);i++){let a=t[i];V(a)&&(r=Ea(e,t[i],n))}return r}function Ea(e,t,n){let r,i=t.split(`-`);do r=Da(e,i.join(`-`),n),i.splice(-1,1);while(i.length&&r===!0);return r}function Da(e,t,n){let r=!1;if(!e.includes(t)&&(r=!0,t)){r=t[t.length-1]!==`!`;let i=t.replace(/!/g,``);e.push(i),(z(n)||W(n))&&n[i]&&(r=n[i])}return r}var Oa=[];Oa[0]={w:[0],i:[3,0],"[":[4],o:[7]},Oa[1]={w:[1],".":[2],"[":[4],o:[7]},Oa[2]={w:[2],i:[3,0],0:[3,0]},Oa[3]={i:[3,0],0:[3,0],w:[1,1],".":[2,1],"[":[4,1],o:[7,1]},Oa[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],o:8,l:[4,0]},Oa[5]={"'":[4,0],o:8,l:[5,0]},Oa[6]={'"':[4,0],o:8,l:[6,0]};var ka=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function Aa(e){return ka.test(e)}function ja(e){let t=e.charCodeAt(0);return t===e.charCodeAt(e.length-1)&&(t===34||t===39)?e.slice(1,-1):e}function Ma(e){if(e==null)return`o`;switch(e.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return e;case 95:case 36:case 45:return`i`;case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return`w`}return`i`}function Na(e){let t=e.trim();return e.charAt(0)===`0`&&isNaN(parseInt(e))?!1:Aa(t)?ja(t):`*`+t}function Pa(e){let t=[],n=-1,r=0,i=0,a,o,s,c,l,u,d,f=[];f[0]=()=>{o===void 0?o=s:o+=s},f[1]=()=>{o!==void 0&&(t.push(o),o=void 0)},f[2]=()=>{f[0](),i++},f[3]=()=>{if(i>0)i--,r=4,f[0]();else{if(i=0,o===void 0||(o=Na(o),o===!1))return!1;f[1]()}};function p(){let t=e[n+1];if(r===5&&t===`'`||r===6&&t===`"`)return n++,s=`\\`+t,f[0](),!0}for(;r!==null;)if(n++,a=e[n],!(a===`\\`&&p())){if(c=Ma(a),d=Oa[r],l=d[c]||d.l||8,l===8||(r=l[0],l[1]!==void 0&&(u=f[l[1]],u&&(s=a,u()===!1))))return;if(r===7)return t}}var Fa=new Map;function Ia(e,t){return U(e)?e[t]:null}function La(e,t){if(!U(e))return null;let n=Fa.get(t);if(n||(n=Pa(t),n&&Fa.set(t,n)),!n)return null;let r=n.length,i=e,a=0;for(;a<r;){let e=n[a];if(ca.includes(e)&&Wi(i)||!U(i)||!Ir(i,e))return null;let t=i[e];if(t===void 0||B(i))return null;i=t,a++}return i}var Ra={NOT_FOUND_KEY:1,FALLBACK_TO_TRANSLATE:2,CANNOT_FORMAT_NUMBER:3,FALLBACK_TO_NUMBER_FORMAT:4,CANNOT_FORMAT_DATE:5,FALLBACK_TO_DATE_FORMAT:6,EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER:7,INVALID_NUMBER_ARGUMENT:8,INVALID_DATE_ARGUMENT:9};Ra.NOT_FOUND_KEY,Ra.FALLBACK_TO_TRANSLATE,Ra.CANNOT_FORMAT_NUMBER,Ra.FALLBACK_TO_NUMBER_FORMAT,Ra.CANNOT_FORMAT_DATE,Ra.FALLBACK_TO_DATE_FORMAT,Ra.EXPERIMENTAL_CUSTOM_MESSAGE_COMPILER,Ra.INVALID_NUMBER_ARGUMENT,Ra.INVALID_DATE_ARGUMENT;var za=`11.4.12`,Ba=`en-US`,Va=e=>`${e.charAt(0).toLocaleUpperCase()}${e.substr(1)}`;function Ha(){return{upper:(e,t)=>t===`text`&&V(e)?e.toUpperCase():t===`vnode`&&U(e)&&`__v_isVNode`in e?e.children.toUpperCase():e,lower:(e,t)=>t===`text`&&V(e)?e.toLowerCase():t===`vnode`&&U(e)&&`__v_isVNode`in e?e.children.toLowerCase():e,capitalize:(e,t)=>t===`text`&&V(e)?Va(e):t===`vnode`&&U(e)&&`__v_isVNode`in e?Va(e.children):e}}var Ua;function Wa(e){Ua=e}var Ga;function Ka(e){Ga=e}var qa;function Ja(e){qa=e}var Ya=null,Xa=e=>{Ya=e},Za=()=>Ya,Qa=0;function $a(e={}){let t=B(e.onWarn)?e.onWarn:Hr,n=V(e.version)?e.version:za,r=V(e.locale)||B(e.locale)?e.locale:Ba,i=B(r)?Ba:r,a=z(e.fallbackLocale)||W(e.fallbackLocale)||V(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:i,o=W(e.messages)?e.messages:eo(i),s=W(e.datetimeFormats)?e.datetimeFormats:eo(i),c=W(e.numberFormats)?e.numberFormats:eo(i),l=L(R(),e.modifiers,Ha()),u=e.pluralRules||R(),d=B(e.missing)?e.missing:null,f=H(e.missingWarn)||Ar(e.missingWarn)?e.missingWarn:!0,p=H(e.fallbackWarn)||Ar(e.fallbackWarn)?e.fallbackWarn:!0,m=!!e.fallbackFormat,h=!!e.unresolving,g=B(e.postTranslation)?e.postTranslation:null,_=W(e.processor)?e.processor:null,v=!H(e.warnHtmlMessage)||e.warnHtmlMessage,y=!!e.escapeParameter,b=B(e.messageCompiler)?e.messageCompiler:Ua,x=B(e.messageResolver)?e.messageResolver:Ga||Ia,S=B(e.localeFallbacker)?e.localeFallbacker:qa||Ca,C=U(e.fallbackContext)?e.fallbackContext:void 0,w=e,T=U(w.__datetimeFormatters)?w.__datetimeFormatters:new Map,E=U(w.__numberFormatters)?w.__numberFormatters:new Map,D=U(w.__meta)?w.__meta:{};Qa++;let O={version:n,cid:Qa,locale:r,fallbackLocale:a,messages:o,modifiers:l,pluralRules:u,missing:d,missingWarn:f,fallbackWarn:p,fallbackFormat:m,unresolving:h,postTranslation:g,processor:_,warnHtmlMessage:v,escapeParameter:y,messageCompiler:b,messageResolver:x,localeFallbacker:S,fallbackContext:C,onWarn:t,__meta:D};return O.datetimeFormats=s,O.numberFormats=c,O.__datetimeFormatters=T,O.__numberFormatters=E,O}var eo=e=>({[e]:R()});function to(e,t,n,r,i){let{missing:a,onWarn:o}=e;if(a!==null){let r=a(e,n,t,i);return V(r)?r:t}return t}function no(e,t){let n=e;U(t)?n.__localeChainObjectCache?.delete(t):n.__localeChainCache?.delete(t)}function ro(e,t,n){no(e,n),e.fallbackContext&&no(e.fallbackContext,n),e.localeFallbacker(e,n,t)}function io(e,t){return e!==t&&e.split(`-`)[0]===t.split(`-`)[0]}function ao(e,t){let n=t.indexOf(e);if(n===-1)return!1;for(let r=n+1;r<t.length;r++)if(io(e,t[r]))return!0;return!1}function oo(e,t,n,r,i,a,o){let{fallbackLocale:s,localeFallbacker:c,onWarn:l}=e,u=c(e,s,n);for(let n=0;n<u.length;n++){let a=u[n],s=(r[a]||{})[t];if(W(s)&&V(a))return a;to(e,t,a,i,o)}return null}function so(e,t,n){let r=`${e}__${t}`;return W(n)&&!jr(n)&&(r=`${r}__${JSON.stringify(n)}`),r}function co(e,t,n){for(let r in n){let n=`${t}__${r}`;for(let t of e.keys())(t===n||t.startsWith(`${n}__`))&&e.delete(t)}}function lo(e,t,n,r){let[,i,a,o]=e,s=n;return V(i)?t.key=i:W(i)&&Object.keys(i).forEach(e=>{r.includes(e)?s[e]=i[e]:t[e]=i[e]}),V(a)?t.locale=a:W(a)&&(s=a),W(o)&&(s=o),s}var uo=typeof Intl<`u`;uo&&Intl.DateTimeFormat,uo&&Intl.NumberFormat;function fo(e,...t){let{datetimeFormats:n,unresolving:r,onWarn:i}=e,{__datetimeFormatters:a}=e;if(!V(t[0])&&!kr(t[0])&&!I(t[0]))return``;let[o,s,c,l]=mo(...t),u=H(c.missingWarn)?c.missingWarn:e.missingWarn,d=H(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,f=!!c.part,p=ba(e,c);if(!V(o)||o===``){let e=new Intl.DateTimeFormat(p.replace(/!/g,``),l);return f?e.formatToParts(s):e.format(s)}let m=oo(e,o,p,n,u,d,`datetime format`);if(!V(m))return r?-1:o;let h=n[m][o],g=so(m,o,l),_=a.get(g);return _||(_=new Intl.DateTimeFormat(m,L({},h,l)),a.set(g,_)),f?_.formatToParts(s):_.format(s)}var po=[`localeMatcher`,`weekday`,`era`,`year`,`month`,`day`,`hour`,`minute`,`second`,`timeZoneName`,`formatMatcher`,`hour12`,`timeZone`,`dateStyle`,`timeStyle`,`calendar`,`dayPeriod`,`numberingSystem`,`hourCycle`,`fractionalSecondDigits`];function mo(...e){let[t]=e,n=R(),r=R(),i;if(V(t)){let e=t.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!e)throw ya(va.INVALID_ISO_DATE_ARGUMENT);let n=e[3]?e[3].trim().startsWith(`T`)?`${e[1].trim()}${e[3].trim()}`:`${e[1].trim()}T${e[3].trim()}`:e[1].trim();i=new Date(n);try{i.toISOString()}catch{throw ya(va.INVALID_ISO_DATE_ARGUMENT)}}else if(kr(t)){if(isNaN(t.getTime()))throw ya(va.INVALID_DATE_ARGUMENT);i=t}else if(I(t))i=t;else throw ya(va.INVALID_ARGUMENT);let a=lo(e,n,r,po);return[n.key||``,i,n,a]}function ho(e,t,n){co(e.__datetimeFormatters,t,n)}function go(e,...t){let{numberFormats:n,unresolving:r,onWarn:i}=e,{__numberFormatters:a}=e;if(!I(t[0]))return``;let[o,s,c,l]=vo(...t),u=H(c.missingWarn)?c.missingWarn:e.missingWarn,d=H(c.fallbackWarn)?c.fallbackWarn:e.fallbackWarn,f=!!c.part,p=ba(e,c);if(!V(o)||o===``){let e=new Intl.NumberFormat(p.replace(/!/g,``),l);return f?e.formatToParts(s):e.format(s)}let m=oo(e,o,p,n,u,d,`number format`);if(!V(m))return r?-1:o;let h=n[m][o],g=so(m,o,l),_=a.get(g);return _||(_=new Intl.NumberFormat(m,L({},h,l)),a.set(g,_)),f?_.formatToParts(s):_.format(s)}var _o=[`localeMatcher`,`style`,`currency`,`currencyDisplay`,`currencySign`,`useGrouping`,`minimumIntegerDigits`,`minimumFractionDigits`,`maximumFractionDigits`,`minimumSignificantDigits`,`maximumSignificantDigits`,`compactDisplay`,`notation`,`signDisplay`,`unit`,`unitDisplay`,`roundingMode`,`roundingPriority`,`roundingIncrement`,`trailingZeroDisplay`];function vo(...e){let[t]=e,n=R(),r=R();if(!I(t))throw ya(va.INVALID_ARGUMENT);let i=t,a=lo(e,n,r,_o);return[n.key||``,i,n,a]}function yo(e,t,n){co(e.__numberFormatters,t,n)}var bo=e=>e,xo=e=>``,So=`text`,Co=e=>e.length===0?``:Vr(e),wo=Br;function To(e,t){return e=Math.abs(e),t===2?e===1?0:1:Math.min(e,2)}function Eo(e){let t=I(e.pluralIndex)?e.pluralIndex:-1;return I(e.named?.count)?e.named.count:I(e.named?.n)?e.named.n:t}function Do(e={}){let t=e.locale,n=Eo(e),r=V(t)&&B(e.pluralRules?.[t])?e.pluralRules[t]:To,i=r===To?void 0:To,a=e=>e[r(n,e.length,i)],o=e.list||[],s=e=>o[e],c=e.named||R();I(e.pluralIndex)&&(c.count||=e.pluralIndex,c.n||=e.pluralIndex);let l=e=>c[e];function u(t,n){return(B(e.messages)?e.messages(t,!!n):U(e.messages)?e.messages[t]:!1)||(e.parent?e.parent.message(t):xo)}let d=t=>e.modifiers?e.modifiers[t]:bo,f=B(e.processor?.normalize)?e.processor.normalize:Co,p=B(e.processor?.interpolate)?e.processor.interpolate:wo,m={list:s,named:l,plural:a,linked:(e,...t)=>{let[n,r]=t,i=`text`,a=``;t.length===1?U(n)?(a=n.modifier||a,i=n.type||i):V(n)&&(a=n||a):t.length===2&&(V(n)&&(a=n||a),V(r)&&(i=r||i));let o=u(e,!0)(m),s=o===``||o===void 0?e:o,c=i===`vnode`&&z(s)&&a?s[0]:s;return a?d(a)(c,i):c},message:u,type:V(e.processor?.type)?e.processor.type:So,interpolate:p,normalize:f,values:L(R(),o,c)};return m}var Oo=()=>``,ko=e=>B(e);function Ao(e,...t){let{fallbackFormat:n,postTranslation:r,unresolving:i,messageCompiler:a,fallbackLocale:o,messages:s}=e,[c,l]=Fo(...t),u=H(l.missingWarn)?l.missingWarn:e.missingWarn,d=H(l.fallbackWarn)?l.fallbackWarn:e.fallbackWarn,f=H(l.escapeParameter)?l.escapeParameter:e.escapeParameter,p=!!l.resolvedMessage,m=V(l.default)||H(l.default)?H(l.default)?a?c:()=>c:l.default:n?a?c:()=>c:null,h=n||m!=null&&(V(m)||B(m)),g=ba(e,l);f&&jo(l);let[_,v,y]=p?[c,g,s[g]||R()]:Mo(e,c,g,o,d,u),b=_,x=c;if(!p&&!(V(b)||Wi(b)||ko(b))&&h&&(b=m,x=b),!p&&(!(V(b)||Wi(b)||ko(b))||!V(v)))return i?-1:c;let S=!1,C=ko(b)?b:No(e,c,v,b,x,()=>{S=!0});if(S)return b;let w=Po(e,C,Do(Lo(e,v,y,l))),T=r?r(w,c):w;return f&&V(T)&&(T=ii(T)),T}function jo(e){z(e.list)?e.list=e.list.map(e=>V(e)?Ur(e):e):U(e.named)&&Object.keys(e.named).forEach(t=>{V(e.named[t])&&(e.named[t]=Ur(e.named[t]))})}function Mo(e,t,n,r,i,a){let{messages:o,onWarn:s,messageResolver:c,localeFallbacker:l}=e,u=l(e,r,n),d=R(),f,p=null;for(let n=0;n<u.length&&(f=u[n],d=o[f]||R(),(p=c(d,t))===null&&(p=d[t]),!(V(p)||Wi(p)||ko(p)));n++)if(!ao(f,u)){let n=to(e,t,f,a,`translate`);n!==t&&(p=n)}return[p,f,d]}function No(e,t,n,r,i,a){let{messageCompiler:o,warnHtmlMessage:s}=e;if(ko(r)){let e=r;return e.locale=e.locale||n,e.key=e.key||t,e}if(o==null){let e=(()=>r);return e.locale=n,e.key=t,e}let c=o(r,Io(e,n,i,r,s,a));return c.locale=n,c.key=t,c.source=r,c}function Po(e,t,n){return t(n)}function Fo(...e){let[t,n,r]=e,i=R();if(!V(t)&&!I(t)&&!ko(t)&&!Wi(t))throw ya(va.INVALID_ARGUMENT);let a=I(t)?String(t):(ko(t),t);return I(n)?i.plural=n:V(n)?i.default=n:W(n)&&!jr(n)?i.named=n:z(n)&&(i.list=n),I(r)?i.plural=r:V(r)?i.default=r:W(r)&&L(i,r),[a,i]}function Io(e,t,n,r,i,a){return{locale:t,key:n,warnHtmlMessage:i,onError:e=>{throw a&&a(e),e},onCacheKey:e=>Dr(t,n,e)}}function Lo(e,t,n,r){let{modifiers:i,pluralRules:a,messageResolver:o,fallbackLocale:s,fallbackWarn:c,missingWarn:l,fallbackContext:u}=e,d={locale:t,modifiers:i,pluralRules:a,messages:(r,i)=>{let a=o(n,r);if(a==null&&(u||i)){let[n,,i]=Mo(u||e,r,t,s,c,l);a=n??o(i,r)}if(V(a)||Wi(a)){let n=!1,i=No(e,r,t,a,r,()=>{n=!0});return n?Oo:i}return ko(a)?a:Oo}};return e.processor&&(d.processor=e.processor),r.list&&(d.list=r.list),r.named&&(d.named=r.named),I(r.plural)&&(d.pluralIndex=r.plural),d}Ui();var Ro=`11.4.12`;function zo(){typeof __INTLIFY_DROP_MESSAGE_COMPILER__!=`boolean`&&(Pr().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}var K={UNEXPECTED_RETURN_TYPE:24,INVALID_ARGUMENT:25,MUST_BE_CALL_SETUP_TOP:26,NOT_INSTALLED:27,REQUIRED_VALUE:28,INVALID_VALUE:29,CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN:30,NOT_INSTALLED_WITH_PROVIDE:31,UNEXPECTED_ERROR:32,NOT_COMPATIBLE_LEGACY_VUE_I18N:33,NOT_AVAILABLE_COMPOSITION_IN_LEGACY:34};function Bo(e,...t){return li(e,null,void 0)}K.UNEXPECTED_RETURN_TYPE,K.INVALID_ARGUMENT,K.MUST_BE_CALL_SETUP_TOP,K.NOT_INSTALLED,K.UNEXPECTED_ERROR,K.REQUIRED_VALUE,K.INVALID_VALUE,K.CANNOT_SETUP_VUE_DEVTOOLS_PLUGIN,K.NOT_INSTALLED_WITH_PROVIDE,K.NOT_COMPATIBLE_LEGACY_VUE_I18N,K.NOT_AVAILABLE_COMPOSITION_IN_LEGACY;var Vo=Er(`__translateVNode`),Ho=Er(`__datetimeParts`),Uo=Er(`__numberParts`),Wo=Er(`__setPluralRules`);Er(`__intlifyMeta`);var Go=Er(`__injectWithOption`),Ko=Er(`__dispose`),qo={FALLBACK_TO_ROOT:10,NOT_FOUND_PARENT_SCOPE:11,IGNORE_OBJ_FLATTEN:12,DEPRECATE_LEGACY_MODE:13,DEPRECATE_TRANSLATE_CUSTOME_DIRECTIVE:14,DUPLICATE_USE_I18N_CALLING:15};qo.FALLBACK_TO_ROOT,qo.NOT_FOUND_PARENT_SCOPE,qo.IGNORE_OBJ_FLATTEN,qo.DEPRECATE_LEGACY_MODE,qo.DEPRECATE_TRANSLATE_CUSTOME_DIRECTIVE,qo.DUPLICATE_USE_I18N_CALLING;var Jo=null;{let e=Pr().__VUE_INSTANCE_SETTERS__;z(e)&&e.push(e=>{Jo=e})}function Yo(e){if(!U(e)||Wi(e))return e;for(let t in e)if(Ir(e,t)){if(!t.includes(`.`))U(e[t])&&Yo(e[t]);else{let n=t.split(`.`),r=n.length-1,i=e,a=!1;for(let e=0;e<r;e++){if(n[e]===`__proto__`)throw Error(`unsafe key: ${n[e]}`);if(n[e]in i||(i[n[e]]=R()),!U(i[n[e]])){a=!0;break}i=i[n[e]]}if(a||(Wi(i)?ca.includes(n[r])||delete e[t]:(i[n[r]]=e[t],delete e[t])),!Wi(i)){let e=i[n[r]];U(e)&&Yo(e)}}}return e}function Xo(e,t){let{messages:n,__i18n:r,messageResolver:i,flatJson:a}=t,o=W(n)?n:z(r)?R():{[e]:R()};if(z(r)&&r.forEach(e=>{if(`locale`in e&&`resource`in e){let{locale:t,resource:n}=e;t?(o[t]=o[t]||R(),oi(n,o[t])):oi(n,o)}else V(e)&&oi(JSON.parse(e),o)}),i==null&&a)for(let e in o)Ir(o,e)&&Yo(o[e]);return o}function Zo(e){return e.type}function Qo(e,t,n){let r=U(t.messages)?t.messages:R();`__i18nGlobal`in n&&(r=Xo(e.locale.value,{messages:r,__i18n:n.__i18nGlobal}));let i=Object.keys(r);if(i.length&&i.forEach(t=>{e.mergeLocaleMessage(t,r[t])}),U(t.datetimeFormats)){let n=Object.keys(t.datetimeFormats);n.length&&n.forEach(n=>{e.mergeDateTimeFormat(n,t.datetimeFormats[n])})}if(U(t.numberFormats)){let n=Object.keys(t.numberFormats);n.length&&n.forEach(n=>{e.mergeNumberFormat(n,t.numberFormats[n])})}}function $o(e){return D(re,null,e,0)}function es(){return Jo??O()}var ts=()=>[],ns=()=>!1,rs=0;function is(e){return((t,n,r,i)=>e(n,r,es()||void 0,i))}function as(e={}){let{__root:t,__injectWithOption:n}=e,r=t===void 0,a=e.flatJson,o=Tr?m:i,s=!H(e.inheritLocale)||e.inheritLocale,c=o(t&&s?t.locale.value:V(e.locale)?e.locale:Ba),l=o(t&&s?t.fallbackLocale.value:V(e.fallbackLocale)||z(e.fallbackLocale)||W(e.fallbackLocale)||e.fallbackLocale===!1?e.fallbackLocale:c.value),u=o(Xo(c.value,e)),d=o(W(e.datetimeFormats)?e.datetimeFormats:{[c.value]:{}}),f=o(W(e.numberFormats)?e.numberFormats:{[c.value]:{}}),p=t?t.missingWarn:H(e.missingWarn)||Ar(e.missingWarn)?e.missingWarn:!0,h=t?t.fallbackWarn:H(e.fallbackWarn)||Ar(e.fallbackWarn)?e.fallbackWarn:!0,g=t?t.fallbackRoot:!H(e.fallbackRoot)||e.fallbackRoot,v=!!e.fallbackFormat,y=B(e.missing)?e.missing:null,b=B(e.missing)?is(e.missing):null,x=B(e.postTranslation)?e.postTranslation:null,S=t?t.warnHtmlMessage:!H(e.warnHtmlMessage)||e.warnHtmlMessage,C=!!e.escapeParameter,w=t?t.modifiers:W(e.modifiers)?e.modifiers:{},T=e.pluralRules||t&&t.pluralRules,E;E=(()=>{r&&Xa(null);let t={version:Ro,locale:c.value,fallbackLocale:l.value,messages:u.value,modifiers:w,pluralRules:T,missing:b===null?void 0:b,missingWarn:p,fallbackWarn:h,fallbackFormat:v,unresolving:!0,postTranslation:x===null?void 0:x,warnHtmlMessage:S,escapeParameter:C,messageResolver:e.messageResolver,messageCompiler:e.messageCompiler,__meta:{framework:`vue`}};t.datetimeFormats=d.value,t.numberFormats=f.value,t.__datetimeFormatters=W(E)?E.__datetimeFormatters:void 0,t.__numberFormatters=W(E)?E.__numberFormatters:void 0;let n=$a(t);return r&&Xa(n),n})(),ro(E,c.value,l.value);function D(){return[c.value,l.value,u.value,d.value,f.value]}let O=j({get:()=>c.value,set:e=>{E.locale=e,c.value=e}});function k(e){r||(E.fallbackContext=t?Za():void 0);try{ro(E,c.value,e)}finally{r||(E.fallbackContext=void 0)}}let A=j({get:()=>l.value,set:e=>{l.value=e,E.fallbackLocale=l.value,k(l.value)}}),ee=j(()=>u.value),te=j(()=>d.value),ne=j(()=>f.value);function M(){return B(x)?x:null}function re(e){x=e,E.postTranslation=e}function ie(){return y}function ae(e){e!==null&&(b=is(e)),y=e,E.missing=b}let N=(e,n,i,a,o,s)=>{D();let c;try{r||(E.fallbackContext=t?Za():void 0),c=e(E)}finally{r||(E.fallbackContext=void 0)}if(i!==`translate exists`&&I(c)&&c===-1||i===`translate exists`&&!c){let[e,r]=n();return t&&g?a(t):o(e)}if(s(c))return c;throw Bo(K.UNEXPECTED_RETURN_TYPE)};function oe(...e){return N(t=>Reflect.apply(Ao,null,[t,...e]),()=>Fo(...e),`translate`,t=>Reflect.apply(t.t,t,[...e]),e=>e,e=>V(e))}function se(...e){let[t,n,r]=e;if(r&&!U(r))throw Bo(K.INVALID_ARGUMENT);return oe(t,n,L({resolvedMessage:!0},r||{}))}function ce(...e){return N(t=>Reflect.apply(fo,null,[t,...e]),()=>mo(...e),`datetime format`,t=>Reflect.apply(t.d,t,[...e]),()=>``,e=>V(e)||z(e))}function le(...e){return N(t=>Reflect.apply(go,null,[t,...e]),()=>vo(...e),`number format`,t=>Reflect.apply(t.n,t,[...e]),()=>``,e=>V(e)||z(e))}function ue(e){return e.map(e=>V(e)||I(e)||H(e)?$o(String(e)):e)}let de={normalize:ue,interpolate:e=>e,type:`vnode`};function fe(...e){return N(t=>{let n,r=t;try{r.processor=de,n=Reflect.apply(Ao,null,[r,...e])}finally{r.processor=null}return n},()=>Fo(...e),`translate`,t=>t[Vo](...e),e=>[$o(e)],e=>z(e))}function pe(...e){return N(t=>Reflect.apply(go,null,[t,...e]),()=>vo(...e),`number format`,t=>t[Uo](...e),ts,e=>V(e)||z(e))}function P(...e){return N(t=>Reflect.apply(fo,null,[t,...e]),()=>mo(...e),`datetime format`,t=>t[Ho](...e),ts,e=>V(e)||z(e))}function me(e){T=e,E.pluralRules=T}function he(e,t){return N(()=>{if(!e)return!1;let n=V(t)?t:c.value,r=V(t)?[n]:wa(E,l.value,n);for(let t=0;t<r.length;t++){let n=ve(r[t]),i=E.messageResolver(n,e);if(i===null&&(i=n[e]),Wi(i)||ko(i)||V(i))return!0}return!1},()=>[e],`translate exists`,n=>Reflect.apply(n.te,n,[e,t]),ns,e=>H(e))}function ge(e){let t=null,n=wa(E,l.value,c.value);for(let r=0;r<n.length;r++){let i=u.value[n[r]]||{},a=E.messageResolver(i,e);if(a!=null){t=a;break}}return t}function _e(e){return ge(e)??(t&&t.tm(e)||{})}function ve(e){return u.value[e]||{}}function ye(e,t){if(a){let n={[e]:t};for(let e in n)Ir(n,e)&&Yo(n[e]);t=n[e]}u.value[e]=t,E.messages=u.value}function be(e,t){u.value[e]=u.value[e]||{};let n={[e]:t};if(a)for(let e in n)Ir(n,e)&&Yo(n[e]);t=n[e],oi(t,u.value[e]),E.messages=u.value}function xe(e){return d.value[e]||{}}function Se(e,t){d.value[e]=t,E.datetimeFormats=d.value,ho(E,e,t)}function Ce(e,t){d.value[e]=L(d.value[e]||{},t),E.datetimeFormats=d.value,ho(E,e,t)}function we(e){return f.value[e]||{}}function Te(e,t){f.value[e]=t,E.numberFormats=f.value,yo(E,e,t)}function Ee(e,t){f.value[e]=L(f.value[e]||{},t),E.numberFormats=f.value,yo(E,e,t)}rs++,_(l,()=>k(l.value),{deep:!0,flush:`sync`}),t&&Tr&&(_(t.locale,e=>{s&&(c.value=e,E.locale=e,ro(E,c.value,l.value))}),_(t.fallbackLocale,e=>{s&&(l.value=e,E.fallbackLocale=l.value,ro(E,c.value,l.value))}));let F={id:rs,locale:O,fallbackLocale:A,get inheritLocale(){return s},set inheritLocale(e){s=e,e&&t&&(O.value=t.locale.value,A.value=t.fallbackLocale.value)},get availableLocales(){return Object.keys(u.value).sort()},messages:ee,get modifiers(){return w},get pluralRules(){return T||{}},get isGlobal(){return r},get missingWarn(){return p},set missingWarn(e){p=e,E.missingWarn=p},get fallbackWarn(){return h},set fallbackWarn(e){h=e,E.fallbackWarn=h},get fallbackRoot(){return g},set fallbackRoot(e){g=e},get fallbackFormat(){return v},set fallbackFormat(e){v=e,E.fallbackFormat=v},get warnHtmlMessage(){return S},set warnHtmlMessage(e){S=e,E.warnHtmlMessage=e},get escapeParameter(){return C},set escapeParameter(e){C=e,E.escapeParameter=e},t:oe,getLocaleMessage:ve,setLocaleMessage:ye,mergeLocaleMessage:be,getPostTranslationHandler:M,setPostTranslationHandler:re,getMissingHandler:ie,setMissingHandler:ae,[Wo]:me};return F.datetimeFormats=te,F.numberFormats=ne,F.rt=se,F.te=he,F.tm=_e,F.d=ce,F.n=le,F.getDateTimeFormat=xe,F.setDateTimeFormat=Se,F.mergeDateTimeFormat=Ce,F.getNumberFormat=we,F.setNumberFormat=Te,F.mergeNumberFormat=Ee,F[Go]=n,F[Vo]=fe,F[Ho]=P,F[Uo]=pe,F}var os={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:e=>e===`parent`||e===`global`,default:`parent`},i18n:{type:Object}};function ss({slots:e},t){return t.length===1&&t[0]==="default"?(e.default?e.default():[]).reduce((e,t)=>[...e,...t.type===M?t.children:[t]],[]):t.reduce((t,n)=>{let r=e[n];return r&&(t[n]=r()),t},R())}function cs(){return M}var ls=N({name:`i18n-t`,props:L({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:e=>I(e)||!isNaN(e)}},os),setup(e,t){let{slots:n,attrs:r}=t,i=e.i18n||bs({useScope:e.scope,__useComponent:!0});return()=>{let a=()=>{let r=Object.keys(n).filter(e=>e[0]!==`_`),a=R();e.locale&&(a.locale=e.locale),e.plural!==void 0&&(a.plural=V(e.plural)?+e.plural:e.plural);let o=ss(t,r);return i[Vo](e.keypath,o,a)},o=L(R(),r),s=V(e.tag)||U(e.tag)?e.tag:cs();return U(s)?h(s,o,{default:a}):h(s,o,a())}}});function us(e){return z(e)&&!V(e[0])}function ds(e,t,n,r){let{slots:i,attrs:a}=t;return()=>{let t=()=>{let t={part:!0},a=R();e.locale&&(t.locale=e.locale),V(e.format)?t.key=e.format:U(e.format)&&(V(e.format.key)&&(t.key=e.format.key),a=Object.keys(e.format).reduce((t,r)=>n.includes(r)?L(R(),t,{[r]:e.format[r]}):t,R()));let o=r(e.value,t,a),s=[t.key];return z(o)?s=o.map((e,t)=>{let n=i[e.type],r=n?n({[e.type]:e.value,index:t,parts:o}):[e.value];return us(r)&&(r[0].key=`${e.type}-${t}`),r}):V(o)&&(s=[o]),s},o=L(R(),a),s=V(e.tag)||U(e.tag)?e.tag:cs();return U(s)?h(s,o,{default:t}):h(s,o,t())}}var fs=N({name:`i18n-n`,props:L({value:{type:Number,required:!0},format:{type:[String,Object]}},os),setup(e,t){let n=e.i18n||bs({useScope:e.scope,__useComponent:!0});return ds(e,t,_o,(...e)=>n[Uo](...e))}});function ps(e,t){let n=e;if(e.mode===`composition`)return n.__getInstance(t)||e.global;{let r=n.__getInstance(t);return r==null?e.global.__composer:r.__composer}}function ms(e){let t=t=>{let{instance:n,value:r}=t;if(!n||!n.$)throw Bo(K.UNEXPECTED_ERROR);let i=ps(e,n.$),a=hs(r);return[Reflect.apply(i.t,i,[...gs(a)]),i]};return{created:(e,n)=>{let[r,i]=t(n);Tr&&(e.__i18nWatcher=_(i.locale,()=>{n.instance&&n.instance.$forceUpdate()})),e.__composer=i,e.textContent=r},unmounted:e=>{Tr&&e.__i18nWatcher&&(e.__i18nWatcher(),e.__i18nWatcher=void 0,delete e.__i18nWatcher),e.__composer&&(e.__composer=void 0,delete e.__composer)},beforeUpdate:(e,{value:t})=>{if(e.__composer){let n=e.__composer,r=hs(t);e.textContent=Reflect.apply(n.t,n,[...gs(r)])}},getSSRProps:e=>{let[n]=t(e);return{textContent:n}}}}function hs(e){if(V(e))return{path:e};if(W(e)){if(!(`path`in e))throw Bo(K.REQUIRED_VALUE,`path`);return e}throw Bo(K.INVALID_VALUE)}function gs(e){let{path:t,locale:n,args:r,choice:i,plural:a}=e,o={},s=r||{};return V(n)&&(o.locale=n),I(i)&&(o.plural=i),I(a)&&(o.plural=a),[t,s,o]}function _s(e,t,...n){let r=W(n[0])?n[0]:{};(!H(r.globalInstall)||r.globalInstall)&&([ls.name,`I18nT`].forEach(t=>e.component(t,ls)),[fs.name,`I18nN`].forEach(t=>e.component(t,fs)),[js.name,`I18nD`].forEach(t=>e.component(t,js))),e.directive(`t`,ms(t))}var vs=Er(`global-vue-i18n`);function ys(e={}){let t=!H(e.globalInjection)||e.globalInjection,n=new Map,[r,i]=xs(e,!1),a=Er(``);function o(e){return n.get(e)||null}function s(e,t){n.set(e,t)}function c(e){n.delete(e)}let l={get mode(){return`composition`},async install(e,...n){if(e.__VUE_I18N_SYMBOL__=a,e.provide(e.__VUE_I18N_SYMBOL__,l),W(n[0])){let e=n[0];l.__composerExtend=e.__composerExtend,l.__vueI18nExtend=e.__vueI18nExtend}let r=null;t&&(r=As(e,l.global)),_s(e,l,...n);let i=e.unmount;e.unmount=()=>{r&&r(),l.dispose(),i()}},get global(){return i},dispose(){r.stop()},__instances:n,__getInstance:o,__setInstance:s,__deleteInstance:c};return l}function bs(e={}){let t=es();if(t==null)throw Bo(K.MUST_BE_CALL_SETUP_TOP);if(!t.isCE&&t.appContext.app!=null&&!t.appContext.app.__VUE_I18N_SYMBOL__)throw Bo(K.NOT_INSTALLED);let n=Ss(t),r=ws(n),i=Zo(t),a=Cs(e,i);if(a===`global`)return Qo(r,e,i),r;if(a===`parent`){let i=Ts(n,t,e.__useComponent);return i??=r,i}if(a===`isolated`){if(n.mode!==`composition`)throw Bo(K.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);let i=n,a=L({},e);a.__root=Ts(n,t)||r;let o=as(a);return i.__composerExtend&&(o[Ko]=i.__composerExtend(o)),u()&&d(()=>{let e=o[Ko];e&&(e(),delete o[Ko])}),o}let o=n,s=o.__getInstance(t);if(s==null){let n=L({},e);`__i18n`in i&&(n.__i18n=i.__i18n),r&&(n.__root=r),s=as(n),o.__composerExtend&&(s[Ko]=o.__composerExtend(s)),Ds(o,t,s),o.__setInstance(t,s)}return s}function xs(e,t){let n=a(),r=n.run(()=>as(e));if(r==null)throw Bo(K.UNEXPECTED_ERROR);return[n,r]}function Ss(e){let t=w(e.isCE?vs:e.appContext.app.__VUE_I18N_SYMBOL__);if(!t)throw Bo(e.isCE?K.NOT_INSTALLED_WITH_PROVIDE:K.UNEXPECTED_ERROR);return t}function Cs(e,t){return jr(e)?`__i18n`in t?`local`:`global`:e.useScope?e.useScope:`local`}function ws(e){return e.mode===`composition`?e.global:e.global.__composer}function Ts(e,t,n=!1){let r=null,i=t.root,a=Es(t,n);for(;a!=null;){let t=e;if(e.mode===`composition`&&(r=t.__getInstance(a)),r!=null||i===a)break;a=a.parent}return r}function Es(e,t=!1){return e==null?null:t&&e.vnode.ctx||e.parent}function Ds(e,t,n){S(()=>{},t),g(()=>{let r=n;e.__deleteInstance(t);let i=r[Ko];i&&(i(),delete r[Ko])},t)}var Os=[`locale`,`fallbackLocale`,`availableLocales`],ks=[`t`,`rt`,`d`,`n`,`tm`,`te`];function As(e,t){let n=Object.create(null);return Os.forEach(e=>{let r=Object.getOwnPropertyDescriptor(t,e);if(!r)throw Bo(K.UNEXPECTED_ERROR);let i=p(r.value)?{get(){return r.value.value},set(e){r.value.value=e}}:{get(){return r.get&&r.get()}};Object.defineProperty(n,e,i)}),e.config.globalProperties.$i18n=n,ks.forEach(n=>{let r=Object.getOwnPropertyDescriptor(t,n);if(!r||!r.value)throw Bo(K.UNEXPECTED_ERROR);Object.defineProperty(e.config.globalProperties,`$${n}`,r)}),()=>{delete e.config.globalProperties.$i18n,ks.forEach(t=>{delete e.config.globalProperties[`$${t}`]})}}var js=N({name:`i18n-d`,props:L({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},os),setup(e,t){let n=e.i18n||bs({useScope:e.scope,__useComponent:!0});return ds(e,t,po,(...e)=>n[Ho](...e))}});zo(),Wa(_a),Ka(La),Ja(wa);var Ms={"groupMessage.title":`Group message`,"groupMessage.description":`Send the same instruction to several workspaces.`,"groupMessage.devServerRunning":`Only workspaces with a running development server`,"groupMessage.tags":`Tags`,"groupMessage.statuses":`Workspace statuses`,"groupMessage.filtersHint":`At least one selected tag AND one selected status. Empty filters include all live workspaces.`,"groupMessage.selected":`{count} recipients selected`,"groupMessage.selectAll":`Select all`,"groupMessage.selectNone":`Select none`,"groupMessage.nextIteration":`Next auto-loop iteration`,"groupMessage.immediate":`Normal chat delivery`,"groupMessage.empty":`No workspace matches these filters.`,"groupMessage.content":`Message`,"groupMessage.deliveryHint":`Auto-loops receive the instruction next iteration, without stopping. Other workspaces receive a chat message, resuming inactive agents when needed.`,"groupMessage.limit":`Select at most 200 workspaces per message.`,"groupMessage.finished":`Delivery results`,"groupMessage.inProgress":`Sending group message`,"groupMessage.serverContinues":`The server continues delivery if you close this window. Queued means saved for a future iteration, not yet processed.`,"groupMessage.unknownHint":`Delivery is uncertain for some workspaces. Read their chat before sending another message.`,"groupMessage.retryHint":`Your original recipients and message are saved. Retry checks or resumes this same request without duplicating accepted deliveries.`,"groupMessage.retry":`Check this delivery`,"groupMessage.newMessage":`New message`,"groupMessage.send":`Send to {count} workspaces`,"groupMessage.state.pending":`Pending`,"groupMessage.state.sending":`Sending`,"groupMessage.state.sent":`Sent`,"groupMessage.state.queued":`Queued for auto-loop`,"groupMessage.state.rejected":`Rejected`,"groupMessage.state.unknown":`Delivery uncertain`,"groupMessage.state.not_sent":`Not sent`,"tours.home.groupMessage.title":`Message several workspaces`,"tours.home.groupMessage.description":`Filter by tags, workspace statuses and running development servers, check the recipient list, and send one instruction. Auto-loops receive it next iteration. Each workspace has its own delivery result.`,"autoLoop.finalReview.title":`Final review settings`,"autoLoop.finalReview.description":`After all tasks and final checks, a separate reviewer checks the changes. The final working session fixes the findings, then a fresh review runs until no findings remain.`,"autoLoop.finalReview.enabled":`Automatic final review`,"autoLoop.finalReview.configure":`Configure reviewer`,"autoLoop.finalReview.save":`Save review settings`,"autoLoop.finalReview.hint":`Fresh read-only review, then return to the final working session to fix findings. Settings are saved with this workspace.`,"autoLoop.finalReview.loadFailed":`Could not load final review settings.`,"autoLoop.finalReview.saveFailed":`Could not save final review settings.`,"autoLoop.finalReview.cycle":`Review cycle {count}`,"autoLoop.finalReview.findings":`{count} findings`,"autoLoop.finalReview.disabled":`Disabled`,"autoLoop.finalReview.pending":`Final review scheduled`,"autoLoop.finalReview.reviewing":`Final review in progress`,"autoLoop.finalReview.fixing":`Fixing review findings`,"autoLoop.finalReview.completed":`Final review passed`,"autoLoop.finalReview.blocked":`Final review needs attention`,"reviewReturn.title":`Review return`,"reviewReturn.reviewing":`Review in progress. The return to the original session is saved.`,"reviewReturn.ready":`Review complete. Returning to the original session.`,"reviewReturn.dispatching":`Sending the review summary to the original session.`,"reviewReturn.unknown":`The server stopped before delivery was confirmed. The original session may already have received the summary.`,"reviewReturn.blocked":`The return to the original session needs attention.`,"reviewReturn.retry":`Retry return`,"reviewReturn.cancel":`Cancel return`,"reviewReturn.retryUnknown":`Retry delivery (may send the summary twice)`,"reviewReturn.actionFailed":`Could not update the review return.`,"memory.panel.contextsHint":`What was sent to the LLM for this conversation.`,"memory.panel.entriesHint":`Persistent notes you can edit or reuse.`,"memory.panel.proposalsHint":`Agent suggestions awaiting your approval or rejection.`,"memory.panel.operationsHint":`A log of memory reads and changes.`,"memory.panel.openDialog":`Open memory in a dialog`,"memory.panel.closeDialog":`Close memory dialog`,"tours.workspace.memorySettings.title":`Manage the three levels`,"tours.workspace.memorySettings.description":`This link opens Memory settings: global for all projects, project for its workspaces, workspace for this mission. Each level can be cleared independently after confirmation; this does not remove information already sent to the LLM.`,"tours.settings.memoryModes.title":`Choose a memory mode`,"tours.settings.memoryModes.description":`Hybrid is the default: the agent saves workspace notes and proposes project/global changes for approval. Manual: only you write. Automatic: the agent writes at all three levels. Click Save to apply the mode.`,"tours.settings.skills.title":`Choose a skill suite`,"tours.settings.skills.description":`Start with Standard: no extension is required. Superpowers, gstack, ECC and their combinations target skills already installed and available to your chosen engine. Selecting a suite changes agent instructions; it does not install skills or grant permissions. Custom lets you edit those instructions. Save your choice to apply it.`,"tours.settings.git.description":`Choose when agents may commit, push or publish. Set Git conventions and branch prefixes.`,"tours.settings.git.title":`Git workflow`,"settings.reviewPromptHint":`Instructions sent to the agent when starting a code review.`,"settings.help.git":`Commit, push and publication preferences, Git conventions and branch prefixes.`,"settings.nav.promptTemplates":`Prompt templates`,"memory.scope.label":`Memory scope`,"settings.nav.memory":`Memory`,"settings.help.memory":`Choose how Kōbō uses memory and manage global, project and workspace memories.`,"memory.settings.title":`Memory`,"memory.panel.title":`Memory`,"memory.panel.contexts":`Contexts delivered to this conversation`,"memory.panel.noContext":`No memory context has been delivered to this conversation.`,"memory.panel.contextStats":`{tokens} estimated tokens · {cumulative} cumulative · {remaining} remaining · {omitted} omitted`,"memory.panel.entries":`Available memories`,"memory.panel.proposals":`Pending proposals`,"memory.panel.operations":`Workspace operations`,"memory.panel.add":`Add memory`,"memory.panel.clearWorkspace":`Clear workspace memory`,"memory.panel.settingsLink":`Manage global and project memory in Settings`,"memory.panel.clearConfirm":`Clear {entries} memories and {proposals} proposals from this workspace?`,"memory.panel.confirmClear":`Clear workspace memory`,"memory.panel.promoteTo":`Promote to`,"memory.panel.loading":`Loading workspace memory…`,"memory.panel.loadFailed":`Could not load workspace memory.`,"memory.panel.archived":`Archived`,"memory.panel.purged":`Worktree purged`,"memory.panel.changed":`Changed since this context`,"memory.panel.deleted":`Deleted since this context`,"memory.panel.truncated":`(text truncated)`,"memory.engine.codex":`Codex`,"memory.tool.unexplainedError":`The memory tool returned no details. If the retrieval budget is exhausted, stop reading; saving remains available subject to permissions. A new conversation or confirmed context compaction renews the retrieval budget, not a new message.`,"memory.engine.claude-code":`Claude Code`,"memory.context.state.failed":`Failed`,"memory.context.state.prepared":`Prepared`,"memory.context.state.submitted":`Submitted`,"memory.context.state.initialized":`Initialized`,"memory.context.state.unknown":`Unknown delivery`,"memory.settings.intro":`Memory stores explicit notes for future agent sessions. It does not replace provider or chat history.`,"memory.settings.mode":`Automatic memory behavior`,"memory.settings.mode.manual":`Manual`,"memory.settings.modeHint.manual":`Agents can read memory. Only you can create or change notes.`,"memory.settings.mode.automatic":`Automatic`,"memory.settings.modeHint.automatic":`Agents may retrieve and update relevant memories automatically.`,"memory.settings.mode.hybrid":`Hybrid`,"memory.settings.modeHint.hybrid":`Agents can update workspace memory directly. Project and global changes require your approval.`,"memory.settings.saveNote":`Mode changes are part of Settings and apply when you save. Leaving without saving keeps the previous mode.`,"memory.settings.manageTitle":`Browse and manage memory`,"memory.settings.independentNote":`Creating, editing, approving and clearing memory take effect immediately, independently of the Settings save button.`,"memory.settings.add":`Add memory`,"memory.settings.clear":`Clear this scope…`,"memory.settings.clearConfirmTitle":`Clear this memory scope?`,"memory.settings.clearConfirm":`This will remove {entries} memories and {proposals} pending proposals from the selected {scope} scope.`,"memory.settings.clearWarning":`This only clears Kōbō memory data. It does not delete previous provider conversations or chat history.`,"memory.settings.confirmClear":`Clear scope`,"memory.settings.cancel":`Cancel`,"memory.settings.loadFailed":`Could not load memory scopes.`,"memory.settings.saveFailed":`Could not save this memory change.`,"memory.settings.clearFailed":`Could not preview or clear this memory scope.`,"memory.settings.clearConflict":`Memory changed after the preview. The counts have been refreshed; review them before confirming again.`,"memory.settings.loadMoreScopes":`Load more scopes`,"memory.entry.loadMore":`Load more memories`,"memory.settings.loadingScopes":`Loading scopes…`,"memory.settings.deleteConfirmTitle":`Confirm memory deletion`,"memory.settings.deleteConfirm":`Delete “{title}” from {scope}?`,"memory.settings.deleteConfirmAction":`Delete memory`,"memory.scope.choose":`Choose a scope`,"memory.scope.global":`Global`,"memory.scope.project":`Project`,"memory.scope.workspace":`Workspace`,"memory.entry.empty":`No memories in this scope.`,"memory.entry.revision":`Revision {revision}`,"memory.entry.edit":`Edit`,"memory.entry.editAria":`Edit {title}`,"memory.entry.delete":`Delete`,"memory.entry.deleteAria":`Delete {title}`,"memory.entry.promote":`Promote`,"memory.entry.promoteAria":`Promote {title}`,"memory.editor.key":`Stable key`,"memory.editor.title":`Title`,"memory.editor.body":`Memory`,"memory.editor.save":`Save memory`,"memory.editor.saving":`Saving…`,"memory.editor.cancel":`Cancel`,"memory.editor.conflict":`This memory changed elsewhere. Reload it or keep your draft and explicitly rebase it on the current revision.`,"memory.editor.reload":`Reload current`,"memory.editor.rebase":`Keep draft and rebase`,"memory.proposal.empty":`No pending proposals.`,"memory.proposal.approve":`Approve`,"memory.proposal.approveAria":`Approve {title}`,"memory.proposal.reject":`Reject`,"memory.proposal.rejectAria":`Reject {title}`,"memory.operation.empty":`No memory operations yet.`,"memory.operation.created":`Memory created`,"memory.operation.updated":`Memory updated`,"memory.operation.deleted":`Memory deleted`,"memory.operation.proposed":`Change proposed`,"memory.operation.approved":`Proposal approved`,"memory.operation.rejected":`Proposal rejected`,"memory.operation.promoted":`Memory promoted`,"memory.operation.cleared":`Scope cleared`,"memory.operation.read":`Memory returned by a read`,"memory.operation.humanActor":`You`,"memory.operation.internalActor":`Agent · {engine}`,"memory.operation.externalActor":`{name} via {transport}`,"memory.operation.loadMore":`Load older operations`,"memory.operation.loading":`Loading…`,"settings.nav.git":`Git`,"integration.direct":`Direct connection`,"integration.directHint":`Optional: configure a trusted MCP command on this server without Claude configuration. Put credentials in environment variables. Saving replaces the entire connection; enable the integration separately.`,"integration.agentScope":`Enabled connections are supplied to Claude Code and Codex on the next agent launch or resume. Stop a running agent to apply changes. Personal MCP configurations remain independent.`,"integration.directOverrides":`The saved direct connection takes priority. Delete it to use a Claude MCP entry.`,"integration.stored":`A private connection is saved. Its values are never returned to the browser.`,"integration.example":`Example: {example}`,"integration.tokenExample":`YOUR_NOTION_TOKEN`,"integration.packageExample":`your-mcp-package`,"integration.variableExample":`YOUR_VARIABLE`,"integration.valueExample":`your-value`,"integration.command":`Executable`,"integration.args":`Arguments (JSON array)`,"integration.environment":`Environment and credentials (JSON object)`,"integration.failed":`Could not load or save the connection. Check the JSON fields and local storage.`,"integration.saved":`Connection saved. Enable the integration and use Test connection when ready.`,"integration.save":`Replace connection`,"integration.clear":`Remove direct connection`,"settings.notificationSoundReady":`Ready tone`,"settings.customSounds":`Imported sounds`,"settings.customSoundsHint":`Import your own notification sounds ({count} max, {size} MB each, .wav .mp3 .ogg .webm). They are stored in the Kōbō data directory and appear in every sound selector below.`,"settings.customSoundsImport":`Import a sound`,"settings.customSoundsFull":`Limit reached ({count} sounds). Delete one before importing another.`,"settings.customSoundsError.type":`Unsupported format. Use a .wav, .mp3, .ogg or .webm file.`,"settings.customSoundsError.size":`File too large. The limit is {size} MB.`,"settings.customSoundsError.count":`Limit reached ({count} sounds). Delete one before importing another.`,"settings.customSoundsError.failed":`Could not complete this action. Check the connection and try again.`,"setup.check.worktrees":`Worktree directory`,"setup.fix.worktrees":`Check the worktree destination in Settings and its write permissions.`,"setup.title":`First mission setup`,"setup.intro":`Choose an engine and a local Git project. No skills or integrations are required.`,"setup.project":`Local project directory`,"setup.credentials":`Authenticate on this server with claude /login or codex login, or configure your provider API key. These checks do not send a paid prompt.`,"setup.permissions":`Start with a plan. Choose execution permissions explicitly in the creation form; a worktree does not isolate your machine.`,"setup.check":`Check environment`,"setup.failed":`Could not complete this action. Check the connection and try again.`,"setup.start":`Describe my first mission`,"setup.settings":`Open settings`,"setup.skip":`Skip for now`,"setup.status.ok":`Available`,"setup.status.missing":`Missing`,"setup.status.error":`Needs attention`,"setup.status.unknown":`Not verified`,"setup.check.node":`Node.js`,"setup.check.platform":`Platform`,"setup.check.git":`Git`,"setup.check.shell":`Bash`,"setup.check.storage":`Data directory`,"setup.check.runtime":`Engine package`,"setup.check.authentication":`Authentication`,"setup.check.model":`Model access`,"setup.check.repository":`Git repository`,"setup.check.firstCommit":`First commit`,"setup.check.projectWritable":`Project write access`,"setup.fix.node":`Install Node.js 24.15 or newer.`,"setup.fix.platform":`Use Linux, macOS or WSL2; native Windows is unsupported.`,"setup.fix.git":`Install Git on this server.`,"setup.fix.shell":`Install Bash on this server.`,"setup.fix.storage":`Check KOBO_HOME and its directory permissions.`,"setup.fix.runtime":`Reinstall Kōbō with its optional runtime dependencies.`,"setup.fix.authentication":`Log in to the selected provider. The first mission verifies access.`,"setup.fix.model":`Choose Auto or a model available to your account.`,"setup.fix.repository":`Choose an existing Git working directory.`,"setup.fix.firstCommit":`Create the first commit in this project before creating a worktree.`,"setup.fix.projectWritable":`Choose a writable project directory.`,"handoff.freshTitle":`Continue in a fresh session`,"handoff.switchTitle":`Change LLM`,"handoff.warning":`The current work stops immediately. A fresh session continues automatically in the same workspace, keeping tasks and history.`,"handoff.generate":`Generate a handoff with the current agent`,"handoff.generateHint":`Turn off if its quota is exhausted. Kōbō will pass the objective, tasks, Git state and history without calling the current LLM.`,"handoff.start":`Start fresh session`,"handoff.stopping":`Stopping the current agent`,"handoff.generating":`Preparing the handoff`,"handoff.starting":`Starting the fresh session`,"handoff.completed":`Fresh session started`,"handoff.failed":`Handoff failed`,"handoff.interrupted":`Handoff interrupted`,"handoff.cancelled":`Handoff cancelled`,"handoff.skip":`Continue without LLM summary`,"handoff.cancel":`Cancel handoff`,"handoff.report":`Read handoff`,"handoff.source":`Previous session`,"handoff.progress":`Session handoff in progress`,"handoff.blocked":`Resolve or cancel the handoff to continue.`,"handoff.error":`Could not prepare the session handoff.`,"handoff.loadFailed":`Could not load the handoff status.`,"handoff.status":`Session handoff`,"chat.externalLlm":`External LLM · {name}`,"search.indexing":`Indexing history: {processed}/{total}. Results are partial.`,"search.indexUnavailable":`Search index unavailable. Try again later.`,"blockers.setupConfiguration":`No setup script is configured. Add one in the Scripts section of settings.`,"blockers.noWorkspace":`Select a workspace to use this action.`,"blockers.purged":`Restore the worktree from the workspace banner before this action.`,"blockers.archived":`Unarchive the workspace from its menu to use this action.`,"blockers.operation":`Wait for the current operation to finish.`,"blockers.agentBusy":`Wait for the turn to finish or stop the agent from the conversation.`,"blockers.configuration":`Configure this feature in the project settings.`,"blockers.settings":`Open settings`,"workspaceSort.label":`Sort workspaces`,"workspaceSort.activity":`Last activity`,"workspaceSort.created":`Creation date`,"workspaceSort.name":`Name`,"workspaceSort.attention":`Attention priority`,"workspaceSort.asc":`Ascending`,"workspaceSort.desc":`Descending`,"workspaceSort.hint":`Sort within each group, including archives. Viewing a workspace does not change its last activity.`,"model.tooltip":`Model used by the agent for this workspace`,"reasoning.tooltip":`Reasoning level used by the agent for this workspace`,"thinking.label":`Thinking`,"thinking.noDetails":`The agent is thinking…`,"common.save":`Save`,"common.duplicate":`Duplicate`,"common.confirm":`Confirm`,"common.cancel":`Cancel`,"common.open":`Open`,"common.retry":`Retry`,"common.delete":`Delete`,"common.close":`Close`,"workspace.deleteTitle":`Delete workspace`,"workspace.deleteTypeBranch":`Retype the branch name to confirm`,"workspace.deleteConsequences":`This removes the worktree and the whole conversation.`,"workspace.deleteFailed":`Could not delete the workspace.`,"workspace.archiveFailed":`Could not archive the workspace.`,"tasks.updateFailed":`Could not update the task.`,"dashboard.tooltip":`Dashboard`,"dashboard.title":`Dashboard`,"dashboard.count":`{n} workspace | {n} workspaces`,"dashboard.empty":`No active workspace.`,"dashboard.workspace":`Workspace`,"dashboard.status":`Status`,"dashboard.attention":`Attention`,"dashboard.pr":`PR`,"dashboard.diff":`Diff`,"dashboard.activity":`Activity`,"dashboard.prOpen":`open`,"reliability.title":`Model reliability`,"reliability.subtitle":`How each engine and model actually ended on this machine.`,"reliability.empty":`No session has ended yet.`,"reliability.loadFailed":`Could not load the reliability figures.`,"reliability.engine":`Engine`,"reliability.model":`Model`,"reliability.sessions":`Sessions`,"reliability.completed":`Completed`,"reliability.watchdog":`Watchdog`,"reliability.killed":`Stopped`,"reliability.errors":`Errors`,"reliability.unknown":`Unknown`,"reliability.median":`Median`,"reliability.durationSeconds":`{s}s`,"reliability.durationMinutes":`{m}m {s}s`,"reliability.durationHours":`{h}h {m}m`,"reliability.reset":`Reset: count only sessions ended from now on`,"reliability.since":`Since {date}`,"reliability.showAll":`Show all`,"update.available":`A newer Kōbō is available: {version}`,"update.how":`How to update`,"common.dismiss":`Dismiss`,"common.details":`Details`,"common.ok":`OK`,"whatsNew.title":`What's new`,"common.loading":`Loading...`,"common.search":`Search...`,"common.refresh":`Refresh`,"common.copy":`Copy`,"common.copied":`Copied to clipboard`,"common.copyFailed":`Copy failed`,"common.add":`Add`,"folderPicker.title":`Choose a folder`,"folderPicker.parent":`Parent folder`,"folderPicker.empty":`No subfolders`,"folderPicker.select":`Select this folder`,"common.start":`Start`,"common.stop":`Stop`,"common.archive":`Archive`,"common.unarchive":`Unarchive`,"common.selectWorkspace":`Select a workspace`,"common.noResults":`No results for "{query}"`,"common.send":`send`,"common.newLine":`new line`,"common.history":`history`,"common.justNow":`just now`,"common.minutesAgo":`{count}m ago`,"common.hoursAgo":`{count}h ago`,"common.daysAgo":`{count}d ago`,"model.auto":`Auto`,"model.opus55":`Opus 5.5`,"model.opus55Description":`For complex work and everyday tasks, 1M context`,"model.sonnet55":`Sonnet 5.5`,"model.sonnet55Description":`Efficient for routine tasks, 1M context`,"model.gpt61sol":`GPT-6.1 Sol`,"model.gpt61solDescription":`Latest workhorse model for coding and everyday work`,"model.gpt6sol":`GPT-6 Sol`,"model.gpt6solDescription":`Previous-generation workhorse model`,"model.gpt6luna":`GPT-6 Luna`,"model.gpt6lunaDescription":`Fast model for easier tasks`,"model.fable51":`Fable 5.1`,"model.fable5":`Fable 5`,"model.fable5Description":`For demanding, long-running tasks`,"model.mythos51":`Mythos 5.1 (Glasswing)`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable51Description":`Most capable model - replaces Fable 5, 1M context, adaptive thinking`,"model.mythos51Description":`Fable 5.1 offered by invitation only through Project Glasswing`,"model.mythos5Description":`Fable 5.1 without safety classifiers — limited access (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude picks the optimal model`,"model.opus5Description":`For complex agentic coding and enterprise work, 1M context`,"model.opus48Description":`Most capable Opus — long-horizon agentic coding, 1M context by default, high effort default`,"model.opus47ClassicDescription":`Latest Opus, most capable`,"model.opus471mDescription":`Latest Opus, 1M context`,"model.opusClassicDescription":`Most powerful`,"model.opus1mDescription":`Most powerful, 1M context`,"model.sonnet5Description":`Best mix of speed and intelligence, 1M context`,"model.sonnetClassicDescription":`Balanced`,"model.sonnet1mDescription":`Balanced, 1M context`,"model.haikuDescription":`Fastest`,"model.gpt6astra":`GPT-6 Astra`,"model.gpt6astraDescription":`Most capable frontier model, 1M context (requires ChatGPT auth)`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`Older-generation workhorse model`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Balanced agentic coding model for everyday work (requires ChatGPT auth)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Fast and affordable agentic coding model (requires ChatGPT auth)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Legacy coding model`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Default fallback — strong reasoning, works with API key auth`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Fast and efficient — best for responsive tasks and subagents`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimized for professional work and long-running agents`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Coding-specialized model for complex software engineering`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`none`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Let the engine pick the default`,"reasoning.minimalDescription":`Fastest, shallowest reasoning`,"reasoning.noneDescription":`No additional reasoning`,"reasoning.lowDescription":`Faster, less depth`,"reasoning.mediumDescription":`Balanced`,"reasoning.highDescription":`More depth`,"reasoning.xhighDescription":`Extended depth, long-horizon tasks`,"reasoning.maxDescription":`Maximum depth`,"agentPermissionMode.label":`Permission mode`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Accept edits`,"agentPermissionMode.interactive":`Interactive`,"agentPermissionMode.tooltip":`How the agent handles tool permissions. Plan: read-only, no writes. Bypass: skip every prompt. Strict: auto-accept file edits, respect allow/deny lists for the rest. Interactive: ask the user before each tool via the permission panel.`,"agentPermissionMode.autoLoopOverride":`Auto-loop forces a non-plan mode — Plan blocks the MCP tools and edits the loop relies on. Pick Bypass, Strict, or Interactive instead.`,"agentPermissionMode.autoLoopLocked":`Locked to Bypass while auto-loop is on — any other mode would stall the loop on permission prompts. AskUserQuestion still works.`,"workspaceList.title":`Workspaces`,"workspaceList.a11y.groupToggle":`{group} group, {count} workspaces`,"workspaceList.a11y.list":`Workspaces`,"workspaceList.a11y.card":`{name}, {status}`,"workspaceList.needsAttention":`Needs Attention`,"workspaceList.running":`Running`,"workspaceList.idle":`Idle`,"workspaceList.archived":`Archived`,"workspaceList.archivedToast":`“{name}” archived`,"workspaceList.archivedUndo":`Undo`,"workspaceList.unarchiveFailed":`Could not unarchive this workspace`,"workspaceList.noWorkspaces":`No workspaces yet`,"workspaceList.loadFailed":`Could not load your workspaces`,"workspaceList.loadFailedHint":`This is a connection failure, not an empty account.`,"workspaceList.footer":`{count} workspace | {count} workspaces`,"workspaceList.footerRunning":`{count} running`,"workspaceList.deleteDialog.title":`Delete workspace?`,"workspaceList.deleteDialog.deleteLocal":`Delete local branch`,"workspaceList.deleteDialog.deleteRemote":`Delete remote branch`,"workspaceList.deleteDialog.warning":`Warning: this action is irreversible on the remote.`,"workspaceList.deleteArchivedDialog.tooltip":`Delete all archived workspaces`,"workspaceList.deleteArchivedDialog.title":`Delete all archived workspaces?`,"workspaceList.deleteArchivedDialog.message":`This will permanently delete the {count} archived workspaces. This action cannot be undone.`,"workspaceList.deleteArchivedDialog.typeCount":`Type {count} to confirm`,"workspacePage.configure":`Configure`,"workspacePage.permissions":`Permissions`,"workspacePage.selectWorkspace":`Select a workspace to begin`,"workspacePage.commandPalettePlaceholder":`Search commands…`,"workspacePage.commandPaletteEmpty":`No matching command`,"workspacePage.commandFocusChat":`Focus chat input`,"workspacePage.commandSearchHistory":`Search workspace history`,"workspacePage.commandTogglePanel":`Show or hide side panel`,"workspacePage.commandStartAgent":`Start agent`,"workspacePage.commandStopAgent":`Stop agent`,"workspacePage.commandOpenSettings":`Open settings`,"workspacePage.commandOpenCreate":`Create a workspace`,"workspacePage.commandOpenSearch":`Global search`,"workspacePage.commandOpenHealth":`Health page`,"workspacePage.commandOpenChangelog":`Changelog`,"workspacePage.commandGroupWorkspaces":`Switch to a workspace`,"workspacePage.commandPaletteHint":`Command palette`,"workspacePage.session":`Session #{n}`,"workspacePage.newSession":`+ New session`,"workspacePage.renameSession":`Rename`,"workspacePage.renameSessionTitle":`Rename session`,"workspacePage.sessionNameLabel":`Session name`,"workspacePage.sessionEndedNotice":`This session has ended. Create a new session to continue.`,"workspacePage.renameFailed":`Rename failed`,"workspacePage.copySessionId":`Copy session ID`,"workspacePage.deleteSession":`Delete session`,"workspacePage.deleteSessionTitle":`Delete session?`,"workspacePage.deleteSessionConfirm":`This permanently deletes this session and its conversation history.`,"workspacePage.deleteSessionFailed":`Failed to delete session`,"workspacePage.noEngineSessionId":`No engine session ID yet — the agent hasn't started this session`,"workspacePage.createSessionFailed":`Failed to create session`,"workspacePage.startFailed":`Start failed`,"workspacePage.stopFailed":`Stop failed`,"workspacePage.interrupt":`Interrupt`,"workspacePage.interrupted":`Agent interrupted — waiting for your next message`,"workspacePage.lastAgentEvent":`Last event {when}`,"workspacePage.agentStopping":`Stopping…`,"workspacePage.agentNotRunning":`No agent process — status is stale`,"contextMenu.restoreWorktree":`Restore worktree`,"workspacePage.restoringWorktree":`Restoring…`,"workspacePage.worktreeRestoreSuccess":`Worktree restored`,"workspacePage.worktreeRestoreLimitations":`Recreates committed Git files. Dependencies and previously discarded local files are not restored.`,"workspacePage.restoreError.not-found":`This workspace no longer exists. Refresh the workspace list.`,"workspacePage.restoreError.not-purged":`This workspace is not marked as purged. Refresh it and check its working directory.`,"workspacePage.restoreError.workspace-busy":`Another operation is running on this workspace. Wait for it to finish, then retry.`,"workspacePage.restoreError.worktree-not-owned":`This worktree is not managed by Kōbō. Restore it manually in its original project.`,"workspacePage.restoreError.project-unavailable":`The original project is unavailable. Reconnect its disk or restore the project at its original path, then retry.`,"workspacePage.restoreError.path-conflict":`The worktree path is occupied by another folder or checkout. Move the conflicting folder or follow the manual recovery instructions in Details.`,"workspacePage.restoreError.branch-in-use":`The working branch is already checked out elsewhere. Use that checkout or release the branch from it before retrying.`,"workspacePage.restoreError.recovery-source-unavailable":`The working branch and saved commit could not be found. Check remote access or follow the manual recovery instructions in Details.`,"workspacePage.restoreError.git-failed":`Restoration failed. Check Git access and disk permissions, then retry. Details opens the manual recovery guide.`,"workspacePage.archivedBanner":`Archived workspace — read-only`,"workspacePage.worktreePurgedBanner":`Worktree deleted — history kept`,"workspacePage.worktreePurgedTooltip":`Restore worktree recreates the working directory and unarchives this workspace. Chat history, tasks and sessions are preserved. No agent or dev server is started.`,"workspacePage.pendingInitialPromptBanner":`An initial prompt is pending — the agent never received it (setup script crashed or the workspace was never started). Click Start to send it now.`,"workspacePage.unarchived":`Workspace unarchived`,"workspacePage.unarchiveFailed":`Unarchive failed`,"workspacePage.interruptFailed":`Interrupt failed`,"workspacePage.interruptHint":`Interrupt the current turn without ending the session.`,"workspacePage.interruptTooltip":`Soft interrupt (like Escape) — stops the current tool but keeps the session alive`,"workspacePage.pendingNextRun":`Applied on next start`,"workspacePage.activeSessionModel":`Active: {model}`,"workspacePage.activeSessionModelTooltip":`Model currently used by the selected session`,"workspacePage.switchEngine":`Switch engine`,"workspacePage.switchEngineHint":`Continue this workspace with another agent engine`,"workspacePage.moreActions":`More actions`,"workspacePage.switchEngineTitle":`Switch agent engine`,"workspacePage.switchEngineWarning":`The current agent will be stopped and a fresh session will start in the same worktree.`,"workspacePage.engineLabel":`Engine`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Handoff for the new engine`,"workspacePage.engineHandoffHint":`Review or edit the context that will be sent to the new agent.`,"workspacePage.confirmSwitchEngine":`Switch engine`,"workspacePage.switchEngineFailed":`Failed to switch engine`,"whip.dispatchFailed":`Unable to send the whip message`,"whip.phrase1":`Continue, please.`,"whip.phrase2":`Keep working through the task list.`,"whip.phrase3":`Please proceed with the next step.`,"whip.phrase4":`Check progress and continue.`,"whip.phrase5":`Continue within the agreed scope.`,"search.title":`Search`,"search.tooltip":`Search across agent history`,"search.placeholder":`Search across all agent messages…`,"search.includeArchived":`Include archived workspaces`,"search.loading":`Searching…`,"search.noResults":`No matches`,"search.error":`Search failed: {message}`,"search.resultCount":`{n} result(s)`,"search.eventType.userMessage":`You`,"search.eventType.agentOutput":`Agent`,"activityFeed.empty":`No activity yet`,"activityFeed.emptyHint":`Start a workspace to see agent output here`,"activityFeed.initialPrompt":`Initial Prompt`,"activityFeed.you":`You`,"activityFeed.agent":`Agent`,"activityFeed.question":`Question`,"activityFeed.goToPrevious":`Go to previous message`,"activityFeed.scrollToBottom":`Scroll to bottom`,"activityFeed.sendAnswers":`Send answers`,"agentBusy.banner":`Agent is busy`,"agentBusy.subagentsRunning":`1 sub-agent running | {n} sub-agents running`,"agentBusy.viewSubagents":`View sub-agents`,"agentBusy.pendingMessage":`Waiting — agent is busy`,"terminal.title":`Terminal`,"terminal.open":`Open terminal`,"terminal.close":`Close terminal`,"terminal.noWorkspace":`Select a workspace`,"terminal.noWorktree":`Worktree not created yet`,"terminal.error":`Terminal error`,"terminal.exited":`Terminal exited`,"terminal.disconnected":`Connection lost`,"terminal.outputMayBeMissing":`[Connection interrupted. Some terminal output may be missing.]`,"terminal.reconnecting":`Reconnecting… (attempt {attempt} of {max})`,"terminal.reconnect":`Reconnect`,"chatInput.placeholder":`Message... (/ for skills)`,"chatInput.fileSearchHint":`search a file`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Attach image`,"chatInput.queueBanner":`Message queued — will be sent when the agent finishes`,"chatInput.forceQueue":`Force send`,"chatInput.searchHistory":`search`,"chatInput.commandPalette":`commands`,"chatInput.shortcuts":`Keyboard shortcuts`,"chatInput.cancelQueue":`Cancel Queue`,"chatInput.autoLoopBanner":`Auto-loop is running — stop it to send a message`,"chatInput.awaitingUserBanner":`The agent is waiting for your answer above — reply via the question panel`,"chatInput.autoLoopStop":`Stop`,"koboCommand.checkProgressDesc":`Verify progress on tasks and acceptance criteria`,"chatInput.uploading":`Uploading...`,"voice.title":`Voice transcription`,"voice.enabled":`Enable local voice transcription`,"voice.pttKey":`Push-to-talk key`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Ctrl+Space`,"voice.language":`Language (auto or code)`,"voice.model":`Active model`,"voice.commandPath":`Whisper binary path (optional)`,"voice.ffmpegPath":`ffmpeg binary path (optional)`,"voice.temperature":`Temperature`,"voice.temperatureHint":`Lower is more deterministic; higher can be more flexible but less stable.`,"voice.initialPrompt":`Initial prompt (optional)`,"voice.initialPromptHint":`Optional context to help Whisper with names, jargon, or domain vocabulary.`,"voice.translateToEnglish":`Translate to English`,"voice.translateToEnglishHint":`When enabled, non-English speech is translated to English instead of transcribed as-is.`,"voice.suppressNst":`Suppress non-speech tokens`,"voice.suppressNstHint":`Attempts to reduce non-speech artifacts in the transcript.`,"voice.installLink":`Install whisper.cpp`,"voice.installGuideTitle":`Installation guide`,"voice.installGuideIntro":`Install whisper.cpp and ffmpeg, then set the binary paths below if needed.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`After CMake build, the Whisper binary is usually at: whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Then set "Whisper binary path" and "ffmpeg binary path" in this section (or leave empty if they are in PATH).`,"voice.noneModel":`No active model`,"voice.notInstalled":`not installed`,"voice.download":`Download`,"voice.delete":`Delete`,"voice.holdToTalk":`Hold to talk`,"voice.recording":`Recording...`,"voice.transcribing":`Transcribing...`,"voice.notSupported":`Voice recording is not supported in this browser`,"voice.errorMicPermission":`Microphone permission denied`,"voice.errorTranscription":`Voice transcription failed`,"voice.downloadFailed":`Model download failed`,"voice.deleteFailed":`Model deletion failed`,"voice.errorDisabled":`Voice transcription is disabled in settings`,"voice.errorModelMissing":`No active voice model is configured`,"voice.errorModelNotInstalled":`The active voice model is not installed`,"voice.errorAudioInvalid":`Audio capture is invalid or empty`,"voice.errorLanguageInvalid":`Voice language configuration is invalid`,"voice.errorRuntimeMissing":`Whisper runtime is not installed or not in PATH`,"voice.maxDurationReached":`Maximum recording duration reached`,"voice.runtimeReady":`Runtime ready: {command}`,"voice.runtimeMissing":`Runtime missing: {command}`,"voice.ffmpegReady":`ffmpeg ready`,"voice.ffmpegMissing":`ffmpeg missing`,"voice.sectionRuntime":`Runtime status`,"voice.sectionActivation":`Activation`,"voice.sectionModels":`Whisper models`,"voice.sectionAdvanced":`Advanced options`,"voice.sectionBehavior":`Transcription behavior`,"voice.sectionBinaries":`Binary paths`,"voice.downloadModels":`Download a model`,"voice.cancelFailed":`Failed to cancel the download`,"attachments.error.upload":`Upload failed. Remove the attachment and try again.`,"attachments.add":`Attach files`,"attachments.remove":`Remove attachment`,"attachments.hint":`Paste or drop files here · {count} maximum · {size} MB each · {total} MB total`,"attachments.error.type":`Use PNG, JPEG, GIF or WebP images, PDF, Markdown or text documents (TXT, CSV, JSON, YAML, XML, LOG, RST, TOML).`,"attachments.error.size":`Each file must be non-empty and no larger than 50 MB.`,"attachments.error.count":`You can attach up to 10 files.`,"attachments.error.total":`Attachments must total no more than 50 MB.`,"attachments.descriptionRequired":`Enter a description or attach a file.`,"createPage.title":`Create a workspace`,"createPage.fromTemplate":`From a template`,"createPage.fromTemplateNone":`None`,"createPage.saveAsTemplate":`Save as template`,"createPage.saveTemplateTitle":`Save this form as a template`,"createPage.saveTemplateName":`Template name`,"createPage.saveTemplateOverwrite":`A template named “{name}” exists. Overwrite it?`,"createPage.templateSaved":`Template “{name}” saved`,"createPage.templateApplied":`Template “{name}” applied`,"createPage.duplicatedFrom":`Duplicated from “{name}”`,"createPage.duplicateLoadFailed":`Could not load the workspace to duplicate.`,"createPage.templateSaveFailed":`Could not save the template.`,"createPage.presetProjectUnknown":`This template targets a project that is no longer configured; the current project was kept.`,"createPage.copySuffix":`(copy)`,"createPage.subtitle":`Describe the mission, choose a project, then configure the agent.`,"createPage.sectionMission":`Mission`,"createPage.sectionMissionHint":`Give the agent a clear objective and the context needed to complete it.`,"createPage.workspaceNameLabel":`Workspace name`,"createPage.descriptionLabel":`Mission description`,"createPage.tagsLabel":`Tags`,"createPage.tagsHint":`Classify this workspace`,"createPage.sources":`Optional sources`,"createPage.sectionGit":`Git project`,"createPage.sectionGitHint":`Choose the repository, source branch and worktree mode.`,"createPage.worktreeMode":`Worktree mode`,"createPage.worktreeNew":`New isolated worktree`,"createPage.worktreeExisting":`Reuse an existing worktree`,"createPage.projectLabel":`Project`,"createPage.sourceBranch":`Source branch`,"createPage.workingBranchPreview":`Working branch preview`,"createPage.branchNamePending":`workspace-name`,"createPage.sectionAgent":`Agent`,"createPage.sectionAgentHint":`Review the execution defaults or enable automation.`,"createPage.configureAgent":`Configure the agent`,"createPage.advancedOptions":`Advanced options`,"createPage.keyboardHint":`Press Ctrl/Cmd + Enter to create the workspace.`,"createPage.createWorkspace":`Create workspace`,"createPage.compareEngines":`Compare two engines`,"createPage.engineA":`Engine A`,"createPage.engineB":`Engine B`,"createPage.compareBrainstormLocked":`Comparison mode: each engine brainstorms on the model and effort set in its own block above.`,"createPage.compareEnginesHint":`Creates two workspaces from this task, one per engine, in sibling worktrees. Their diffs can then be compared side by side.`,"createPage.compareNeedsNewWorktree":`Comparing two engines needs two new worktrees. Turn off “use an existing worktree” first.`,"createPage.compareNeedsSecondEngine":`Pick a second engine, different from the first, to compare against.`,"comparison.title":`Engine comparison`,"comparison.hint":`The same task, run by each engine in its own worktree.`,"comparison.engine":`Engine`,"comparison.status":`Status`,"comparison.tasks":`Tasks`,"comparison.commits":`Commits`,"comparison.files":`Files`,"comparison.diff":`Diff`,"comparison.messages":`Messages`,"comparison.messagesTitle":`Agent messages / your messages`,"comparison.questions":`Questions`,"comparison.tools":`Tools`,"comparison.errors":`Errors`,"comparison.tokens":`Tokens`,"comparison.tokensTitle":`Input / output tokens`,"comparison.sessions":`Sessions`,"comparison.duration":`Time`,"comparison.exportCsv":`Export as CSV`,"comparison.open":`Open`,"comparison.current":`This one`,"comparison.archived":`archived`,"comparison.incomplete":`Only one workspace of this comparison exists. The other was never created, or has been deleted.`,"createPage.comparisonPartial":`Only {count} of {total} workspaces were created. The one that exists is usable on its own; delete it if you would rather start over.`,"createPage.notionEnabled":`Notion enabled`,"createPage.importNotion":`Import from Notion`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`URL must start with https://www.notion.so/ or https://app.notion.com/`,"createPage.notionAutoExtract":`Subtasks and acceptance criteria will be extracted automatically.`,"createPage.notionPanelChoiceLabel":`This URL points to a sub-page (?p=). Which one do you want to work on?`,"createPage.notionPanelOption":`Sub-page (panel)`,"createPage.notionPanelOptionDesc":`The page you were viewing — recommended`,"createPage.notionParentOption":`Parent page`,"createPage.notionParentOptionDesc":`The epic / database it belongs to`,"createPage.importSentry":`Import Sentry`,"createPage.sentryEnabled":`Sentry enabled`,"createPage.sentryPlaceholder":`https://your-org.sentry.io/issues/123456`,"createPage.sentryValidation":`URL must point to a Sentry issue (/issues/<id>)`,"createPage.sentryAutoExtract":`Sentry issue will be imported automatically`,"createPage.sentryExtractHint":`Kobo will extract the issue and write it to .ai/thoughts/`,"createPage.importPr":`Import from a PR`,"createPage.importPrRequiresProject":`Choose a project first`,"createPage.importPrNotSupported":`This project's forge does not support listing pull requests`,"createPage.lockedToPr":`Locked to PR #{number}`,"createPage.prReadyToCreate":`PR #{number} imported — ready to create the workspace.`,"createPage.prResumeIntro":`Resuming work on the existing pull request #{number} "{title}" ({url}).`,"createPage.unlockPrCheckout":`Unlock`,"createPage.workspaceName":`Workspace name (defaults to Notion page title)`,"createPage.workspaceNamePlaceholder":`Workspace name...`,"createPage.instructions":`Additional instructions (optional)...`,"createPage.instructionsPlaceholder":`Describe the task...`,"createPage.tasks":`Tasks ({count})`,"createPage.addTask":`Add a task...`,"createPage.acceptanceCriteria":`Acceptance Criteria ({count})`,"createPage.addCriterion":`Add a criterion...`,"createPage.projectPath":`Enter the project path`,"createPage.branchType":`Branch type`,"createPage.branch":`Branch`,"createPage.noBranches":`No branches found`,"createPage.enterPath":`Enter a project path`,"createPage.skipSetupScript":`Skip setup script`,"createPage.worktreePickerLabel":`Existing worktree`,"createPage.noOrphanWorktrees":`No orphan worktrees in this project`,"createPage.pickWorktreeRequired":`Please pick a worktree to attach`,"createPage.notionExtractHint":`Subtasks and acceptance criteria will be extracted from the Notion page.`,"createPage.errorCreating":`Error creating workspace.`,"createPage.branchAdjusted":"Branch already existed — created `{branch}` instead. The matching worktree folder uses the same suffix.","createPage.localSourceFallback":`Workspace created from the local branch (origin unreachable) — the base may be stale.`,"createPage.validationNotionUrl":`Please paste a valid Notion URL (https://www.notion.so/... or https://app.notion.com/...).`,"createPage.validationDescription":`Please describe the task.`,"createPage.validationName":`Please provide a workspace name.`,"createPage.validationPath":`Please enter the project path.`,"createPage.validationBranch":`Please select a branch.`,"createPage.validationFocusHint":`The field to fix is highlighted below.`,"createPage.progress.validate":`Validating the request…`,"createPage.progress.fetch-source-branch":`Fetching the source branch from origin…`,"createPage.progress.inspect-worktree":`Inspecting the existing worktree…`,"createPage.progress.extract-notion":`Extracting the Notion page…`,"createPage.progress.extract-sentry":`Extracting the Sentry issue…`,"createPage.progress.create-record":`Creating the workspace…`,"createPage.progress.create-tasks":`Creating tasks and acceptance criteria…`,"createPage.progress.create-worktree":`Creating the git worktree…`,"createPage.progress.write-conventions":`Writing git conventions…`,"createPage.progress.write-context-files":`Writing context files…`,"createPage.progress.build-prompt":`Building the initial prompt…`,"createPage.progress.setup-script":`Running your setup script…`,"createPage.progress.start-agent":`Starting the agent…`,"createPage.progress.rollback":`Undoing the failed creation…`,"createPage.progress.done":`Done`,"createPage.progress.step":`Step {index} of {total}`,"createPage.errorAtStep":`Creation failed at step "{step}": {message}`,"createPage.override.title":`Two of your choices were overridden`,"createPage.override.setup-script-forced":`Setup script skipped: re-running it on a worktree you already prepared could destroy its contents.`,"createPage.override.permission-mode-downgraded":`Permission mode moved from Plan to Bypass: an auto-loop cannot run in Plan, which blocks tools and edits.`,"settings.title":`Settings`,"settings.language":`Language`,"settings.projectColor":`Color`,"settings.projectColorClear":`Clear`,"settings.projectColorDefault":`Default (grey)`,"settings.workspaceListSection":`Workspace list`,"settings.flattenWorkspaceList":`Flatten workspace list`,"settings.flattenWorkspaceListHint":`Show all workspaces in a single flat list with a project badge, instead of grouping by project.`,"workflow.title":`Git workflow`,"workflow.hint":`These preferences guide agents; they do not replace sandbox permissions. More restrictive user instructions take priority. Publication never authorizes merging. New workspaces keep a snapshot of these choices.`,"workflow.commit":`Commit`,"workflow.push":`Push`,"workflow.publish":`Publish PR/MR or comments`,"workflow.manual":`Manual — explicit request`,"workflow.automatic":`Automatic — when needed`,"workflow.inherit":`Inherit`,"workflow.locked":`Stop the agent to change these preferences. A running session already received them.`,"workflow.updateFailed":`Could not save the workflow preference. Check the connection and try again.`,"workflow.save":`Save workflow preferences`,"workflow.saved":`Workflow preferences saved.`,"workflow.planExecution":`Plan can prepare the mission. Execution requires choosing a supported execution permission mode explicitly, then resuming the loop.`,"settings.skillSuite.standard":`Standard (no extensions)`,"settings.skillSuite.standardHint":`Built-in workflow with no external skill suite required.`,"settings.skillSuite.section":`Skill suite`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Custom`,"settings.skillSuite.superpowersHint":`Opinionated TDD / brainstorm / plan workflow (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Garry Tan's stack — /review, /ship, /qa, /office-hours, etc. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Both suites stack — superpowers for process discipline (brainstorm / TDD / plans / principles-level review), gstack for concrete workflows (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`affaan-m's agent-harness framework — agents, skills, rules and hooks for planning, testing, implementing, reviewing and memorizing (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`All three stack — superpowers for process discipline, gstack for concrete workflows, ECC for structured multi-agent review/implementation passes.`,"settings.skillSuite.customHint":`Compose the five prompts below from any templates you choose, then edit them freely.`,"settings.skillSuite.reloadDefaults":`Reload defaults`,"settings.skillSuite.reloadDefaultsConfirm":`Replace the five custom prompts with the agnostic defaults?`,"settings.skillSuite.customPrompts":`Custom prompts`,"settings.skillSuite.agnostic":`Agnostic baseline`,"settings.skillSuite.importPrompt":`Import a template`,"settings.skillSuite.imported":`Template imported. You can now edit it.`,"settings.skillSuite.importFailed":`Unable to import the template`,"settings.skillSuite.reviewTemplate":`Review template`,"settings.skillSuite.autoLoopReviewGate":`Auto-loop review gate`,"settings.skillSuite.autoLoopGroomingIntro":`Auto-loop grooming intro`,"settings.skillSuite.qaTemplate":`QA template`,"settings.skillSuite.brainstormingInstruction":`Brainstorming-phase instruction`,"settings.global":`Global`,"settings.projects":`Projects`,"settings.globalSettings":`Global Settings`,"settings.defaultModel":`Default model`,"settings.defaultModelClaude":`Default model (Claude Code)`,"settings.defaultModelCodex":`Default model (OpenAI Codex)`,"settings.agentPermissions":`Agent permissions`,"settings.skipPermissions":`Skip permission prompts (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Warning: disabling this will cause all tool permissions (Write, Edit, Bash...) to be auto-denied in headless mode. The agent will only be able to read.`,"settings.notifications":`Notifications`,"settings.browserNotifications":`Browser notifications when agent finishes`,"settings.audioNotifications":`Sound notification when agent finishes`,"settings.enableBrowserNotifications":`Enable browser notifications`,"settings.testBrowserNotification":`Test notification`,"settings.browserNotificationGranted":`Browser notifications allowed`,"settings.browserNotificationDenied":`Browser notifications blocked`,"settings.browserNotificationAsk":`Browser permission required`,"settings.browserNotificationUnsupported":`Browser notifications unavailable`,"settings.browserNotificationPermissionNeeded":`Allow browser notifications to send a test.`,"settings.browserNotificationTestTitle":`Kōbō notification test`,"settings.browserNotificationTestBody":`Browser notifications are working.`,"settings.enableAudio":`Enable audio`,"settings.notificationSound":`Notification sound`,"settings.notificationSoundHint":`Played when the agent finishes or requests permission.`,"settings.questionSound":`Question sound`,"settings.questionSoundHint":`Played only when the agent asks you a question.`,"settings.workspaceCreatedSound":`Workspace creation sound`,"settings.workspaceCreatedSoundHint":`Played after a workspace is created.`,"settings.notificationSoundPreview":`Preview`,"settings.notificationVolume":`Volume`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Agent errors`,"settings.agentErrorSoundHint":`Played for quota, rate-limit, and agent errors.`,"settings.notificationSoundBasic":`Basic notification`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Work`,"settings.notificationSoundTravailTermine":`Work done`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`It's gonna blow`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR and CI`,"settings.soundGeneral":`General sound`,"settings.soundNone":`No sound`,"settings.prCiFailedSound":`CI failed`,"settings.prCiRecoveredSound":`CI recovered`,"settings.prChangesRequestedSound":`Changes requested`,"settings.prApprovedSound":`PR approved`,"settings.prMergeConflictSound":`Merge conflict`,"settings.prReadyToMergeSound":`Ready to merge`,"settings.prMergedSound":`PR merged`,"settings.prCiFailedSoundHint":`Played when CI changes to a failed state.`,"settings.prCiRecoveredSoundHint":`Played when CI recovers from a failure.`,"settings.prChangesRequestedSoundHint":`Played when a review requests changes.`,"settings.prApprovedSoundHint":`Played when the pull request is approved.`,"settings.prMergeConflictSoundHint":`Played when a merge conflict is detected.`,"settings.prReadyToMergeSoundHint":`Played when the pull request becomes ready to merge.`,"settings.prMergedSoundHint":`Played when the pull request is merged.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Default permission mode`,"settings.defaultPermissionModeClaude":`Default permission mode (Claude Code)`,"settings.defaultPermissionModeCodex":`Default permission mode (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Mode applied when creating a new workspace. Plan = read-only first, Bypass = skip prompts, Strict = auto-accept edits with allow-list, Interactive = ask before each tool.`,"settings.activityFeed":`Activity feed`,"settings.verboseMessages":`Show verbose system messages (task_progress, task_started)`,"settings.showThinkingBlocks":`Show agent thinking blocks`,"settings.whipSettings":`Whip`,"settings.whipSettingsHint":`Configure the optional whip shortcut and volume.`,"settings.whipEnabled":`Enable whip`,"settings.whipEnabledHint":`Shows the interactive whip control in eligible running workspaces.`,"settings.whipVolume":`Whip volume`,"settings.whipVolumeMasterAudioDisabled":`Master audio is off. Enable audio notifications to adjust the whip volume; your saved value is preserved.`,"whip.overlayLabel":`Interactive whip`,"whip.overlayInstructions":`Move the pointer to control the whip. Press Enter or Space to crack it. Press Escape to close.`,"settings.whipShortcut":`Whip shortcut`,"settings.whipShortcutHint":`Click, then press the shortcut to use.`,"settings.whipShortcutRecording":`Press a shortcut…`,"settings.whipShortcutButtonLabel":`Whip shortcut: {shortcut}`,"settings.whipShortcutRecordingLabel":`Recording whip shortcut. Press a shortcut…`,"settings.whipShortcutReset":`Reset shortcut`,"settings.whipShortcutReserved":`This shortcut is reserved by the browser.`,"settings.testIntegration":`Test connection`,"pwa.offline":`You are offline. Chat and agents require the Kōbō server.`,"pwa.reconnecting":`Reconnecting to the Kōbō server…`,"pwa.installReady":`Install Kōbō as an app.`,"pwa.install":`Install`,"pwa.ignore":`Ignore`,"pwa.updateReady":`A Kōbō update is available.`,"pwa.reload":`Reload`,"chat.searchWorkspaceHistory":`Search workspace history`,"chat.historySearch.user":`You`,"chat.historySearch.agent":`Agent`,"chat.openInGitDiff":`Open in Git diff`,"timeline.title":`Session timeline`,"timeline.export":`Export diagnostic`,"timeline.unnamed":`Agent session`,"timeline.tools":`{count} tools`,"timeline.errors":`{count} errors`,"settings.availableVariables":`Available template variables`,"settings.prPromptTemplate":`PR prompt template`,"settings.prPromptPlaceholder":`Instructions for the agent when creating GitHub PRs...`,"settings.prPromptHint":`Use the template variables listed above (double curly brace syntax).`,"settings.reviewPromptTemplate":`Review prompt template`,"settings.reviewPromptPlaceholder":`Instructions for the agent when reviewing branch changes...`,"settings.ciFixPromptTemplate":`CI fix prompt template`,"settings.ciFixPromptHint":`Sent to the agent when a workspace has failing CI. Variables (double-brace syntax): pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Ask the agent to diagnose and fix the failing CI jobs...`,"settings.finalizationPromptTemplate":`Auto-loop finalization prompt`,"settings.finalizationPromptHint":`Default prompt for the final auto-loop iteration (last quality checks). Used when a project leaves its own finalization prompt empty.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Notion initial prompt`,"settings.notionInitialPrompt.help":`Appended to the workspace creation prompt when the workspace has a Notion ticket. Variables: {variables}.`,"settings.notionInitialPrompt.project":`Notion initial prompt (override)`,"settings.sentryInitialPrompt":`Sentry initial prompt`,"settings.sentryInitialPrompt.help":`Appended to the workspace creation prompt when the workspace has a Sentry issue. Variables: {variables}.`,"settings.sentryInitialPrompt.project":`Sentry initial prompt (override)`,"settings.initialPrompt.inheritHint":`Leave blank to inherit. Type any whitespace character to disable injection at this level.`,"settings.resetToDefault":`Reset to default`,"settings.resetFailed":`Failed to load default value`,"settings.sentryIntegration":`Sentry integration`,"settings.var.prNumber":`PR number (e.g., 42)`,"settings.var.prUrl":`Full URL of the created PR`,"settings.var.branchName":`Working branch name`,"settings.var.sourceBranch":`Source branch the PR targets`,"settings.var.workspaceName":`Workspace name`,"settings.var.projectName":`Last segment of the project path`,"settings.var.notionUrl":`Notion URL if set, empty otherwise`,"settings.var.commits":`Bulleted commit list between source and head`,"settings.var.diffStats":`Git shortstat summary (files, insertions, deletions)`,"settings.var.tasks":`Regular tasks as a checkbox list`,"settings.var.acceptanceCriteria":`Acceptance criteria as a checkbox list`,"settings.gitConventions":`Git conventions (global)`,"settings.gitConventionsPlaceholder":`# Git conventions...`,"settings.gitConventionsHint":`These conventions are written to .ai/.git-conventions.md in each new workspace and must be followed by the agent before any git operation. Overridden by per-project conventions if defined.`,"settings.setupScript":`Setup script`,"settings.cleanupScript":`Cleanup script`,"settings.archiveScript":`Archive script`,"settings.archiveScriptHint":`Shell script run server-side in the worktree when a workspace is archived. Leave empty to disable.`,"settings.archiveScriptPlaceholder":`e.g. clean up containers, free disk space…`,"settings.stopDevServersOnShutdown":`Stop development servers when Kōbō exits`,"settings.stopDevServersOnShutdownHint":`Enabled by default. Disable to keep Docker containers running through updates. Local processes always stop. Shutdown scripts still run.`,"settings.hook.shutdownTitle":`Hook: Kōbō shutdown`,"settings.hook.shutdownHint":`Runs in each existing worktree, including archived ones, after agents and local processes stop, before automatic Docker shutdown. Limit: 1 minute per script. PROJECT_NAME and INSTANCE identify its Docker stack; PROJECT_NAME is empty when no instance is known. A project override replaces this script. Docker commands here can stop containers even when automatic shutdown is disabled.`,"settings.hook.shutdownPlaceholder":`e.g. stop this workspace’s Docker containers…`,"tours.settings.shutdown.title":`Kōbō shutdown`,"tours.settings.shutdown.description":`Choose whether Kōbō stops Docker containers when it exits. The global hook runs in each existing worktree (1-minute limit); a project script can override it. Local processes always stop.`,"settings.hook.sessionEndedTitle":`Hook: session ended`,"settings.hook.sessionEndedHint":`Runs when an agent session ends, whatever the reason. Reads KOBO_SESSION_END_REASON (completed / error / killed / watchdog), KOBO_SESSION_STOP_CAUSE, KOBO_AUTOLOOP_ACTIVE, KOBO_SESSION_ID and KOBO_SESSION_EXIT_CODE. Empty = disabled.`,"settings.hook.sessionEndedPlaceholder":`e.g. npm test, or notify a chat channel…`,"settings.hook.prMergedTitle":`Hook: PR merged`,"settings.hook.prMergedHint":`Runs when a PR is detected as merged, before the workspace is archived or purged — the worktree is still on disk. Reads KOBO_PR_NUMBER and KOBO_PR_URL. Empty = disabled.`,"settings.hook.prMergedPlaceholder":`e.g. trigger a deployment, tag a release…`,"settings.hook.autoLoopDisabledTitle":`Hook: auto-loop stopped`,"settings.hook.autoLoopDisabledHint":`Runs whenever auto-loop is disabled, by Kōbō or by you. Reads KOBO_AUTOLOOP_REASON (completed / stall / error / user-action / awaiting-clarification) and KOBO_TASKS_PENDING. Empty = disabled.`,"settings.hook.autoLoopDisabledPlaceholder":`e.g. send a notification when the loop stalls…`,"settings.changeSourceBranchScript":`Change-source-branch script`,"settings.changeSourceBranchScript.help":`Replaces the built-in cherry-pick when non-empty. The script owns git, PR base, force-push and conflicts; Kōbō still refuses while the agent is running and updates the source-branch metadata on exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — new source branch chosen in the dialog
5
5
  KOBO_OLD_BASE — workspace’s previous source branch
6
6
  KOBO_WORKING_BRANCH — workspace’s working branch
7
7
  KOBO_WORKTREE_PATH — absolute path of the worktree (also cwd)
@@ -11,10 +11,10 @@ KOBO_WORKSPACE_ID — Kōbō workspace id (stable across renames)
11
11
  KOBO_WORKSPACE_NAME — workspace display name
12
12
  KOBO_FORGE — resolved forge: github / gitlab / none
13
13
  KOBO_PR_NUMBER — PR/MR number on the resolved forge (empty if none open)`,"settings.changeSourceBranchScript.placeholder":`#!/usr/bin/env bash
14
- # your script — use $KOBO_NEW_BASE / $KOBO_OLD_BASE / $KOBO_WORKING_BRANCH …`,"settings.changeSourceBranchScript.resetDefault":`Reset to Kōbō default`,"settings.changeSourceBranchScript.replaceConfirmTitle":`Reset the script?`,"settings.changeSourceBranchScript.replaceConfirm":`Your edits will be replaced by the Kōbō default script. Continue?`,"settings.cleanupScriptHint":`Shell script run in the worktree after the agent finishes a session. In auto-loop mode it runs only once every task is done. Leave empty to disable.`,"settings.cleanupScriptPlaceholder":`e.g. remove temp files, stop containers…`,"settings.cleanupScriptMode":`When to run`,"settings.cleanupScriptMode.idle":`After every session — even if tasks remain`,"settings.cleanupScriptMode.noTasks":`Only when no Kōbō task remains`,"settings.cleanupScriptOnlyOnChanges":`Run only if files were modified, added or deleted`,"settings.cleanupScriptMode.inherit":`Inherit global setting`,"settings.taskPromptTemplate":`Task prompt`,"settings.taskPromptTemplatePlaceholder":`Prompt automatically inserted into the task description…`,"settings.taskPromptTemplateHint":`Automatically injected into the task description on the creation page when this project is selected. Left untouched, it is replaced when you switch projects; once you edit it, your text is kept.`,"settings.setupScriptPlaceholder":`npm install`,"settings.setupScriptHint":`Executed with bash in the worktree after creation, before the agent starts. No shebang needed. If it fails, the workspace is set to error. Timeout: 5 minutes.`,"settings.e2e.title":`E2E tests`,"settings.e2e.framework":`Framework`,"settings.e2e.frameworkNone":`None`,"settings.e2e.frameworkOther":`Other`,"settings.e2e.skill":`Skill (optional)`,"settings.e2e.skillPlaceholder":`e.g. cypress-tester`,"settings.e2e.prompt":`Custom guidance (optional)`,"settings.e2e.promptPlaceholder":`e.g. use page-object pattern, target data-testid attributes`,"settings.e2e.helpText":`When configured, the auto-loop grooming agent inserts E2E sub-tasks for user-visible features.`,"settings.finalization.title":`Auto-loop finalization`,"settings.finalization.helpText":`Optional: a prompt the agent runs as the very last auto-loop iteration. Typically used for final quality checks (lint, typecheck, tests). The grooming step will create a [FINAL]-prefixed task that uses this prompt.`,"settings.finalization.prompt":`Finalization prompt`,"settings.finalization.promptPlaceholder":`e.g. Run npm run lint and npm test, then mark this task done.`,"settings.editorCommand":`Editor command`,"settings.editorCommandPlaceholder":`code, phpstorm, subl, vim...`,"settings.editorCommandHint":`Command used to open the worktree in your editor. The worktree path is passed as argument.`,"settings.fileManagerCommand":`File manager command`,"settings.fileManagerCommandPlaceholder":`xdg-open, open, nautilus, dolphin, explorer...`,"settings.fileManagerCommandHint":`Command used to open the worktree in your file manager. The worktree path is passed as argument. Leave empty to hide the button.`,"settings.terminalCommand":`Terminal command`,"settings.terminalCommandHint":`Command to launch your terminal in the worktree. Optional {path} placeholder for the directory.`,"settings.terminalCommandPlaceholder":`kitty · alacritty · gnome-terminal --working-directory={path}`,"settings.mcpSelection":`Claude MCP selection`,"settings.mcpAutoSelect":`Auto (first matching active MCP)`,"settings.notionMcp":`Notion MCP key`,"settings.sentryMcp":`Sentry MCP key`,"settings.mcpSelectionHint":`Active entries are read from ~/.claude.json. Leave Auto to use default matching behavior.`,"settings.configuredProjects":`Configured projects`,"settings.noProjects":`No projects configured`,"settings.addProject":`Add project`,"settings.copyFrom":`Copy settings from`,"settings.copyFromPlaceholder":`(none — start from defaults)`,"settings.copyFromHint":`Copies all settings except path, display name, and source branch.`,"settings.copyFromConfirmTitle":`Overwrite current values?`,"settings.copyFromConfirm":`This will overwrite the current form values with settings from "{project}". Continue?`,"settings.newProject":`New project`,"settings.editProject":`Edit project`,"help.title":`Help`,"help.tours":`Guided tours`,"help.steps":`{n} step | {n} steps`,"help.markAllSeen":`Mark all as seen`,"help.markAllSeenHint":`Marks current tours as seen without starting them.`,"help.resetAll":`Reset all tours`,"help.resetAllHint":`Runs the home tour now; each screen replays its own on next visit.`,"help.status.unseen":`not seen`,"help.status.partial":`partly seen`,"help.status.seen":`seen`,"help.replayThis":`Replay this screen's tour`,"tours.next":`Next`,"tours.prev":`Back`,"tours.done":`Done`,"tours.exitConfirm":`Quit the guided tour? It will not start again on its own; you can replay it anytime from the Help menu.`,"tours.home.title":`Getting around`,"tours.home.list.title":`Workspaces`,"tours.home.list.description":`Every mission lives here with its status. Badges flag a failing CI, a review asking for changes or a PR ready to merge. Drag the inner edge of a side panel with a mouse or finger to resize it. Header buttons wrap when space is limited.`,"tours.home.create.title":`Create a workspace`,"tours.home.create.description":`A workspace is a git worktree, a branch and an agent session for one task.`,"tours.home.search.title":`Search`,"tours.home.search.description":`Filter the list by name. The search icon at the top opens full-text search across agent conversations.`,"tours.home.dashboard.title":`Dashboard`,"tours.home.dashboard.description":`One table for every active workspace: status, attention, PR, diff, activity, plus engine reliability.`,"tours.home.health.title":`Health and changelog`,"tours.home.health.description":`Check the database, runtimes and active agents. The button next to it lists what changed in each release.`,"tours.home.settings.title":`Settings`,"tours.home.settings.description":`Engines, integrations, automation, worktrees and projects. Now create your first workspace.`,"tours.create.title":`Creating a workspace`,"tours.create.project.title":`Project and branch`,"tours.create.project.description":`Pick the project and the branch the worktree starts from.`,"tours.create.mission.title":`Mission`,"tours.create.mission.description":`Describe the task, or import it from a Notion page or a Sentry issue.`,"tours.create.template.title":`Templates`,"tours.create.template.description":`Apply a saved preset, or save this form as one. "Duplicate" on a workspace card opens this form prefilled.`,"tours.create.engine.title":`Engine and model`,"tours.create.engine.description":`Claude Code or Codex, the model, the reasoning effort and what the agent may do without asking.`,"tours.create.brainstorm.title":`Brainstorm on another model`,"tours.create.brainstorm.description":`Run the first brainstorming session on a different model, then switch back for the iterations.`,"tours.create.autoloop.title":`Auto-loop`,"tours.create.autoloop.description":`Let the agent complete the tasks and final checks. An optional independent final review repeats after corrections until there are no findings; stalled work pauses for attention.`,"tours.create.finalReview.title":`Configure the final review`,"tours.create.finalReview.description":`Choose the reviewer engine, model, reasoning effort and instructions in advance. The review runs in a separate read-only session; the original agent fixes findings and repeats the review until none remain.`,"tours.workspace.finalReview.title":`Final review and corrections`,"tours.workspace.finalReview.description":`Configure the optional final reviewer here, before it starts. Once tasks and final checks pass, a separate session reviews the work. Findings return to the original session for automatic corrections and another review. Closing Kōbō preserves the cycle.`,"tours.workspace.reviewReturn.title":`Return from a review`,"tours.workspace.reviewReturn.description":`The summary returns to the original session, even after restarting Kōbō. If delivery is uncertain, inspect that conversation before Retry; Cancel abandons the return. Manual reviews wait for your instructions before fixes; auto-loop reviews correct findings automatically.`,"tours.create.comparison.title":`Compare two engines`,"tours.create.comparison.description":`Create two sibling workspaces on the same task and compare their commits, tasks and activity.`,"tours.workspace.sessions.title":`Workspace sessions`,"tours.workspace.sessions.description":`Click the title to choose, create or rename a session, or copy its identifier.`,"tours.workspace.actions.title":`Workspace actions`,"tours.workspace.actions.description":`The ⋯ menu groups side-by-side view, the command palette, the side panel and the guided tour.`,"tours.workspace.title":`Inside a workspace`,"tours.workspace.chat.title":`Conversation`,"tours.workspace.chat.description":`The agent output, live: messages, tool calls, questions and errors.`,"tours.workspace.input.title":`Talk to the agent`,"tours.workspace.input.description":`Send a message, use slash commands, dictate by voice or attach files.`,"tours.workspace.selectors.title":`Session settings`,"tours.workspace.selectors.description":`Open Configure to adjust model, effort, permissions and auto-loop. The current engine is shown there.`,"tours.workspace.status.title":`Status`,"tours.workspace.status.description":`The current session state; stop it here when needed.`,"tours.workspace.git.title":`Git`,"tours.workspace.git.description":`Commits, diff, push, rebase and the PR for this branch.`,"tours.workspace.tasks.title":`Tasks`,"tours.workspace.tasks.description":`What the agent plans to do, and the acceptance criteria it must meet.`,"tours.workspace.timeline.title":`Timeline`,"tours.workspace.timeline.description":`Every session of this workspace; open an older one to read it.`,"tours.workspace.subagents.title":`Sub-agents`,"tours.workspace.subagents.description":`Follow the sub-agents the agent spawned, with their live progress.`,"tours.workspace.documents.title":`Documents`,"tours.workspace.documents.description":`Plans and files the agent wrote, browsable without leaving the chat.`,"tours.workspace.schedule.title":`Schedule`,"tours.workspace.schedule.description":`Wake-ups and crons that restart the agent later.`,"tours.workspace.memory.title":`Workspace memory`,"tours.workspace.memory.description":`Inspect memory delivered to the selected conversation, pending proposals and workspace operations. Clearing it does not change provider chat history.`,"tours.workspace.handoff.title":`Continue with fresh context`,"tours.workspace.handoff.description":`Long conversation? Start a fresh session here, or use “Change LLM”. Current work stops immediately and the new session continues automatically in the same workspace. The handoff summary is optional: turn it off if the current LLM has no quota left. Progress, the report and a link to the previous session appear below this button.`,"tours.workspace.terminal.title":`Terminal`,"tours.workspace.terminal.description":`A shell inside the worktree, without leaving Kōbō.`,"tours.gitPr.title":`Pull request`,"tours.gitPr.panel.title":`PR status`,"tours.gitPr.panel.description":`CI result, review decision and reviewers, refreshed every 30 seconds.`,"tours.gitPr.actions.title":`Git actions`,"tours.gitPr.actions.description":`Push, pull, rebase or change the base branch. During a conflict a button lets the agent resolve it.`,"tours.gitPr.attention.title":`Attention badges`,"tours.gitPr.attention.description":`The card shows a failing CI, requested changes or a PR ready to merge.`,"tours.settings.title":`Settings`,"tours.settings.engines.title":`Engines and models`,"tours.settings.engines.description":`Default models, permission modes and automatic retry limits.`,"tours.settings.integrations.title":`Integrations`,"tours.settings.integrations.description":`Notion and Sentry connections, plus Bitbucket credentials. GitHub and GitLab use your local CLI login.`,"tours.settings.automation.title":`Automation`,"tours.settings.automation.description":`Setup and cleanup scripts, lifecycle hooks, prompt templates, workspace templates and skills.`,"tours.settings.worktrees.title":`Worktrees`,"tours.settings.memory.title":`Memory`,"tours.settings.memory.description":`Choose Manual, Automatic or Hybrid behavior, then browse scopes and inspect or clear their exact memory data. CRUD and clear operations take effect immediately; changing the mode uses the Settings save button.`,"tours.settings.worktrees.description":`Where worktrees live, how long merged ones are kept, and automatic purge.`,"tours.settings.projects.title":`Projects`,"tours.settings.projects.description":`Registered projects and their per-project overrides.`,"tours.settings.misc.title":`General, voice, notifications, export`,"tours.settings.misc.description":`Language, network access, dictation, sounds and browser notifications, and a full export of your settings.`,"tours.dashboard.title":`Dashboard`,"tours.dashboard.overview.title":`Overview`,"tours.dashboard.overview.description":`Every active workspace in one table; click a row to open it.`,"tours.dashboard.reliability.title":`Engine reliability`,"tours.dashboard.reliability.description":`Sessions, errors and durations per engine and model.`,"tours.health.title":`Health`,"tours.health.checks.title":`Checks`,"tours.health.checks.description":`Environment, database, runtimes, workspaces and sessions.`,"tours.health.active.title":`Active state`,"tours.health.active.description":`Quota back-offs, pending wake-ups and running auto-loops right now.`,"tours.search.title":`Search`,"tours.search.input.title":`Query`,"tours.search.input.description":`Matches workspace names and agent conversations.`,"tours.search.archived.title":`Archived`,"tours.search.archived.description":`Include archived workspaces in the results.`,"tours.changelog.title":`What's new`,"tours.changelog.list.title":`Releases`,"tours.changelog.list.description":`What changed in each version, newest first.`,"settings.projectGroup.identity":`Identity`,"settings.projectGroup.defaults":`Defaults`,"settings.projectGroup.prompts":`Prompts`,"settings.projectGroup.scripts":`Scripts`,"settings.projectPath":`Project path`,"settings.projectPathPlaceholder":`/path/to/project`,"settings.displayName":`Display name`,"settings.displayNamePlaceholder":`My project`,"settings.defaultSourceBranch":`Default source branch`,"settings.defaultModel.project":`Default model`,"settings.skipPermissions.project":`Skip permission prompts`,"settings.prPromptTemplate.project":`PR prompt template`,"settings.prPromptPlaceholder.project":`Project-specific instructions for PR creation...`,"settings.reviewPromptTemplate.project":`Review prompt template`,"settings.ciFixPromptTemplate.project":`CI fix prompt template`,"settings.gitConventions.project":`Git conventions (project override)`,"settings.gitConventionsEmpty":`Leave empty to use the global conventions.`,"settings.notionStatus":`Notion ticket status`,"settings.notionStatusProperty":`Property name`,"settings.notionStatusPropertyPlaceholder":`État, Status...`,"settings.notionInProgressStatus":`Value to set`,"settings.notionInProgressStatusPlaceholder":`In progress, En cours...`,"settings.notionStatusHint":`When a workspace is created with a Notion ticket, the specified property is set to this value. Both fields are required. Leave empty to disable.`,"settings.notionAssignee":`Notion assignment`,"settings.notionAssigneeHint":`When a workspace is created with a Notion ticket, the user authenticated with the Notion MCP is added to this People property — only if it doesn't already have an assignee. Leave empty to disable.`,"settings.notionAssigneeProperty":`Property name`,"settings.notionAssigneePropertyPlaceholder":`Developers, Assignees...`,"settings.notionUserId":`Your Notion UUID`,"settings.notionUserIdPlaceholder":`135d872b-594c-8126-9604-00024ad6e5b5`,"settings.notionUserIdHint":`Pick your account from the list. Notion rejects bot assignment in People properties — this field is required to enable auto-assignment.`,"settings.notionUsersRefresh":`Refresh`,"settings.notionUsersLoading":`Loading Notion users…`,"settings.notionUsersLoadFailed":`Failed to load list: {error}`,"settings.notionUsersManualFallback":`List unavailable — paste your Notion UUID manually.`,"settings.devServer":`Dev server`,"settings.devServerStart":`Script start`,"settings.devServerStartPlaceholder":`npm run dev`,"settings.devServerStop":`Script stop`,"settings.devServerStopPlaceholder":`Optional — the process will be killed automatically if empty`,"settings.selectProject":`Select a project or add a new one`,"settings.projectPathRequired":`Project path is required.`,"settings.useGlobal":`Use global`,"settings.saved":`Global settings saved.`,"settings.unsavedChanges":`Unsaved changes`,"settings.nav.general":`General`,"settings.nav.agents":`Agents`,"settings.nav.skills":`Skills`,"settings.nav.prompts":`Prompts`,"settings.nav.scripts":`Scripts`,"settings.nav.workspaceTemplates":`Workspace templates`,"workspaceTemplates.title":`Workspace templates`,"workspaceTemplates.hint":`Saved presets of the create form. Pick one on the create page; to change one, load it there, adjust, and save it again under the same name.`,"workspaceTemplates.empty":`No template yet. Fill the create form and use “Save as template”.`,"workspaceTemplates.anyProject":`Any project`,"workspaceTemplates.rename":`Rename`,"workspaceTemplates.renameTitle":`Rename the template`,"workspaceTemplates.deleteConfirm":`Delete the template “{name}”?`,"workspaceTemplates.deleted":`Template “{name}” deleted`,"settings.nav.notion":`Notion`,"settings.nav.forge":`Forge`,"settings.bitbucketCommunity":`Bitbucket Community`,"settings.bitbucketCommunityHint":`Credentials are kept locally and used only by bkt.`,"settings.bitbucketUsername":`Atlassian email`,"settings.bitbucketToken":`Bitbucket API token`,"settings.nav.sentry":`Sentry`,"settings.nav.voice":`Voice`,"settings.nav.notifications":`Notifications`,"settings.nav.worktrees":`Worktrees`,"settings.nav.export":`Export`,"settings.help.general":`Language, network access, and the defaults every project inherits.`,"settings.help.agents":`Default models and permission modes, plus automatic retry limits.`,"settings.help.skills":`Which skill suites the agent is told to use.`,"settings.help.prompts":`Agent instructions after opening a PR/MR, for code review, CI fixes and finalization.`,"settings.help.scripts":`Setup, cleanup and change-source-branch scripts, plus lifecycle hooks.`,"settings.help.notion":`Import a Notion page as the source of truth of a workspace.`,"settings.help.sentry":`Create a workspace from a Sentry issue.`,"settings.help.forge":`Bitbucket credentials. GitHub and GitLab use your authenticated gh/glab CLI; choose the forge per project.`,"settings.help.voice":`Dictation and push-to-talk.`,"settings.help.notifications":`Sounds, browser notifications and the unanswered-question reminder.`,"settings.help.worktrees":`Where worktrees are created, retention and automatic purge.`,"settings.help.projects":`Registered projects and their per-project overrides.`,"settings.help.templates":`Prompt templates expanded in the chat input.`,"settings.help.workspaceTemplates":`Saved presets of the create form.`,"settings.help.export":`Export and import every setting as JSON.`,"settings.openNav":`Open navigation`,"settings.saveError":`Error saving settings.`,"settings.projectSaved":`Project saved.`,"settings.projectSaveError":`Error saving project.`,"settings.projectDeleted":`Project deleted.`,"settings.deleteProjectConfirmTitle":`Delete project?`,"settings.deleteProjectConfirmMessage":`Remove "{name}" from your projects? This only deletes its Kōbō settings — your code and worktrees are left untouched.`,"settings.projectDeleteError":`Error deleting project.`,"templates.title":`Templates`,"templates.newTemplate":`New template`,"templates.editTemplate":`Edit template`,"templates.deleteTemplate":`Delete template`,"templates.deleteConfirm":`Delete template '/{slug}'?`,"templates.deleteConfirmMessage":`This cannot be undone.`,"templates.slug":`Slug`,"templates.slugHint":`Lowercase letters, digits, hyphens. Max 64 chars.`,"templates.slugInvalid":`Slug must contain only lowercase letters, digits, and hyphens`,"templates.slugDuplicate":`A template with this slug already exists`,"templates.description":`Description`,"templates.descriptionHint":`Short label shown in the dropdown.`,"templates.descriptionRequired":`Description is required`,"templates.contentRequired":`Content is required`,"templates.content":`Content`,"templates.contentHint":`Template content. Use {variable_name} for substitutions.`,"templates.availableVars":`Available variables`,"templates.filePath":`File: {path}`,"templates.empty":`No templates yet.`,"templates.createFailed":`Failed to create template`,"templates.updateFailed":`Failed to update template`,"templates.deleteFailed":`Failed to delete template`,"templates.save":`Save`,"templates.create":`Create`,"templates.reloadDefaults":`Reload default templates`,"templates.reloadDefaultsHint":`Only adds default templates that are missing. Existing templates (modified or not) are never overwritten.`,"templates.reloadDefaultsConfirmMessage":`This action will add any missing default templates back to the list. Existing templates — including ones you've customized — will not be touched. If you want to restore a default template you've modified, delete it first, then run this action.`,"templates.reloadDefaultsSuccess":`{added} added, {kept} kept`,"templates.reloadDefaultsFailed":`Failed to reload default templates`,"templates.resetToDefault":`Reset to default`,"templates.resetConfirmTitle":`Reset template to default?`,"templates.resetConfirmMessage":`This overwrites your local changes to /{slug} with the built-in default. This cannot be undone.`,"templates.resetSuccess":`Template /{slug} reset to default`,"templates.resetFailed":`Failed to reset template`,"chatInput.dropdownSkills":`Claude skills`,"chatInput.dropdownKobo":`Kōbō commands`,"chatInput.dropdownTemplates":`Templates`,"documents.title":`Documents`,"documents.empty":`No documents found`,"documents.refresh":`Refresh`,"documents.back":`Back`,"documents.loadFailed":`Failed to load document`,"git.title":`Git`,"git.outputDialogTitle":`Git reported an error`,"git.statsFailed":`Git status could not be read`,"git.section.repository":`Repository`,"git.section.changes":`Changes`,"git.section.pullRequest":`Pull request`,"git.section.actions":`Actions`,"git.actions.more":`More`,"git.localOnly":`local only`,"git.pushed":`pushed`,"git.unpushed":`{count} unpushed`,"git.commits":`{count} commit | {count} commits`,"git.commits.loading":`Loading commits…`,"git.commits.empty":`No commits on this branch`,"git.commits.pushed":`Pushed`,"git.commits.unpushed":`Not pushed`,"git.commits.clickToAppend":`click to append SHA to chat`,"git.commits.diffThisCommit":`Diff this commit (vs parent)`,"git.compareCommits":`Compare commits…`,"git.files":`{count} file | {count} files`,"git.staged":`{count} staged`,"git.modified":`{count} modified`,"git.untracked":`{count} untracked`,"git.workingTreeEmpty":`No uncommitted changes`,"git.fileStaged":`Staged`,"git.fileModified":`Modified`,"git.fileUntracked":`Untracked`,"git.push":`Push`,"git.forcePush":`Force push`,"git.forcePushToggle":`Force push (--force-with-lease)`,"git.pushRejectedHistory":`Push rejected: the local and remote branches have different histories. After rebasing published commits, use Force push with confirmation. Otherwise, fetch and integrate the remote changes before trying again.`,"git.pushRejectedLease":`Force push rejected: the remote branch has changed since your last fetch. Fetch and review those changes before trying again.`,"git.pushFailed":`Could not push the branch. Open the details to see why.`,"git.pushBlockedByOperation":`Finish or abort the current {operation} first`,"git.pushUpToDate":`Nothing to push: the branch is already up to date on origin`,"git.forcePushHint":`Safer than plain --force: the push is rejected if the remote has commits you haven’t seen. Use after rebasing or amending already-pushed commits.`,"git.branchForcePushed":`Branch force-pushed`,"git.pull":`Pull`,"git.pullNoUpstream":`No upstream set for this branch — push it first to enable pull.`,"git.sync":`Sync`,"git.createPrNoRemote":`Push the branch first`,"git.viewRequest":`View {request}`,"git.createRequest":`Create {request}`,"git.changeRequestBase":`Change {request} base branch`,"git.forgeCliMissing":`{cli} is not installed — install it to use {request} features`,"git.forgeNotAuthenticated":`Not authenticated — run {cli} auth login`,"settings.forge":`Forge`,"settings.forge.auto":`Auto-detect`,"settings.forge.github":`GitHub`,"settings.forge.gitlab":`GitLab`,"settings.forge.bitbucketCommunity":`Bitbucket Community (bkt)`,"settings.forge.none":`None`,"git.pullConfirmTitle":`Pull branch?`,"git.pullConfirmMessage":`Pull {branch} from remote (fast-forward only).`,"git.branchPulled":`Branch pulled`,"git.pullFailed":`Pull failed`,"git.renameBranch":`Rename branch`,"git.renameBranchPrompt":"Rename `{branch}` to:","git.renameBranchSuccess":"Branch renamed to `{branch}`","git.renameBranchFailed":`Failed to rename branch`,"git.renameBranchExists":"Branch `{branch}` already exists locally or on origin","git.diff":`Diff`,"git.diffReview":`Diff`,"git.diffReviewTooltip":`Open the diff viewer in Review mode — inline comments + batch submit to the agent`,"pr.baseChanged":`PR base changed: {oldBase} → {newBase}`,"pr.openPr":`Open PR`,"pr.openWorkspace":`Open workspace`,"pr.dismiss":`Dismiss`,"git.rebase":`Rebase`,"git.rebaseConfirmTitle":`Rebase branch?`,"git.rebaseConfirmMessage":`Rebase onto {branch}. This may cause conflicts.`,"git.rebaseSuccess":`Rebase completed`,"git.rebaseFailed":`Rebase failed`,"git.merge":`Merge`,"git.fetch":`Fetch`,"git.fetchSuccess":`Repository fetched`,"git.fetchFailed":`Fetch failed: {error}`,"git.mergeConfirmTitle":`Merge branch?`,"git.mergeConfirmMessage":`Merge {branch} into this branch. This may cause conflicts.`,"git.mergeSuccess":`Merge completed`,"git.mergeFailed":`Merge failed`,"git.commitFailed":`Commit failed`,"git.commitChanges":`Commit changes`,"git.commitDialogTitle":`Commit uncommitted changes`,"git.commitDialogDescription":`Enter your own message or ask the agent to inspect and create the commit.`,"git.commitMessage":`Commit message`,"git.commitManual":`Commit`,"git.commitWithAgent":`Ask agent`,"git.commitAgentSuccess":`Commit request sent to the agent`,"git.discardFailed":`Discard failed`,"git.conflictTitleMerge":`Merge conflicts detected`,"git.conflictTitleRebase":`Rebase conflicts detected`,"git.operationPausedTitle":`Git operation ready to continue`,"git.operationPausedSubtitle":`No files are in conflict. Git is simply waiting for you to continue the operation.`,"git.conflictSubtitle":`{count} file(s) have conflicts. Choose how to continue.`,"git.conflictAbortConfirmTitle":`Discard the conflict resolution?`,"git.conflictAbortConfirmMessage":`Everything you resolved in this {op} is thrown away and the worktree goes back to its pre-{op} state. This cannot be undone.`,"git.conflictAbort":`Abort`,"git.conflictContinue":`Continue`,"git.conflictContinued":`Git operation continued`,"git.conflictResolveWithAgent":`Ask agent to resolve`,"git.conflictAborted":`Operation aborted`,"git.conflictHandoffSuccess":`Agent is resolving the conflicts`,"git.dirtyTitleRebase":`Uncommitted changes block the rebase`,"git.dirtyTitleMerge":`Uncommitted changes block the merge`,"git.dirtyTitlePull":`Uncommitted changes block the pull`,"git.dirtySubtitle":`{modified} modified, {staged} staged, {untracked} untracked. Choose how to proceed.`,"git.dirtyStash":`Stash & retry`,"git.dirtyCommit":`Commit first`,"git.dirtyCommitPlaceholder":`Commit message`,"git.dirtyCommitConfirm":`Commit & retry`,"git.dirtyDiscard":`Discard changes`,"git.dirtyDiscardConfirmTitle":`Discard all uncommitted changes?`,"git.dirtyDiscardConfirmMessage":`Tracked changes will be lost (git reset --hard). Untracked files are kept. This cannot be undone.`,"git.pushConfirmTitle":`Push branch?`,"git.pushConfirmMessage":`Push {branch} to remote.`,"git.pushConfirmMessagePrefix":`Push branch`,"git.pushConfirmMessageSuffix":`to remote.`,"git.changePrBaseTitle":`Change base branch`,"git.changePrBaseMessage":`Enter the new target branch for the {request}.`,"git.changePrBaseSuccess":`{request} base branch updated`,"git.changePrBaseFailed":`Failed to change {request} base branch`,"git.mergeRequest":`Merge {request}`,"git.mergeRequestConfirmTitle":`Merge {request}?`,"git.mergeRequestConfirmMessage":`This merges the open {request} into its target branch.`,"git.mergeRequestSuccess":`{request} merged`,"git.mergeRequestFailed":`Failed to merge {request}`,"git.deleteRemoteBranch":`Delete remote branch`,"git.deleteRemoteBranchTitle":`Delete remote branch?`,"git.deleteRemoteBranchMessage":`The request was merged. Delete the remote branch {branch}?`,"git.deleteRemoteBranchSuccess":`Remote branch {branch} deleted`,"git.deleteRemoteBranchFailed":`Failed to delete remote branch`,"git.changeSourceBranch":`Change source branch`,"git.changeSourceBranchTitle":`Change source branch`,"git.changeSourceBranchMessage":`Pick the new source branch. The working branch will be rebuilt on top of it.`,"git.changeSourceBranchDone":`Source branch changed to {branch}`,"git.changeSourceBranchAligned":`Source branch changed to {branch} (branch had no own commits)`,"git.changeSourceBranchTooMany":`The branch has too many own commits ({n}) — rebase it manually`,"git.changeSourceBranchDirty":`Commit or stash your changes before changing the source branch`,"git.changeSourceBranchAgentRunning":`Stop the agent before changing the source branch`,"git.changeSourceBranchErrorTitle":`Source branch change failed`,"git.changeSourceBranchErrorOngoing":`A {op} operation is still in progress on the worktree. Abort it to return to a clean state.`,"git.changeSourceBranchErrorAbort":`Abort the operation`,"git.changeSourceBranchLoading":`Changing source branch…`,"git.changeSourceForcePushTitle":`Force-push the rewritten branch?`,"git.changeSourceForcePushMessage":`The branch history was rewritten. Force-push it to the remote with --force-with-lease?`,"git.changeSourceForcePushDone":`Branch force-pushed`,"git.openEditor":`Open in editor`,"git.openEditorFailed":`Failed to open editor`,"git.branchPushed":`Branch pushed`,"git.pushFirst":`Branch is not on remote. Click Push first.`,"git.unpushedCommits":`Local commits are not pushed. Click Push first.`,"git.from":`from`,"git.aheadBehindTooltip":`{ahead} commits ahead, {behind} behind {source}`,"git.divergence.title":`Branch divergence`,"git.divergence.subtitle":`vs {source}`,"git.divergence.ahead":`↑ {count} ahead`,"git.divergence.behind":`↓ {count} behind`,"git.divergence.empty.ahead":`No commits ahead.`,"git.divergence.empty.behind":`No commits behind.`,"git.divergence.close":`Close`,"git.divergence.loading":`Loading commits…`,"git.divergence.failed":`Failed to load divergence`,"git.divergence.retry":`Retry`,"git.prCreated":`{request} #{n} created`,"git.pr.author":`Author`,"git.pr.reviewers":`Reviewers`,"git.pr.assignees":`Assignees`,"git.pr.labels":`Labels`,"git.pr.changesRequestedBadge":`Changes requested`,"git.pr.approvedBadge":`Approved`,"git.pr.ci.passed":`CI passed`,"git.pr.ci.failed":`CI failed`,"git.pr.ci.pending":`CI running`,"git.pr.ci.failedCount":`{n} failed`,"git.pr.ci.pendingCount":`{n} pending`,"git.pr.ci.passedCount":`{n} passed`,"git.pr.ci.skippedCount":`{n} skipped`,"git.pr.ci.showPassed":`Show {n} passing jobs`,"git.pr.ci.hidePassed":`Hide passing jobs`,"toast.prChangesRequested":`PR #{n} has changes requested`,"toast.prApproved":`PR #{n} has been approved`,"toast.prReadyToMerge":`PR #{n} is ready to merge`,"toast.prCiFailed":`CI failed for PR #{n}`,"toast.prCiRecovered":`CI recovered for PR #{n}`,"toast.prMergeConflict":`PR #{n} has merge conflicts`,"toast.prMerged":`PR #{n} has been merged`,"devServer.title":`Dev Server`,"devServer.noWorkspace":`No workspace selected`,"devServer.notConfigured":`Not configured —`,"devServer.goToSettings":`Settings`,"devServer.logs":`Logs`,"devServer.running":`Running`,"devServer.starting":`Starting`,"devServer.stopping":`Stopping`,"devServer.error":`Error`,"devServer.stopped":`Stopped`,"devServer.unknown":`Unknown`,"devServer.containers":`{count} container | {count} containers`,"devServer.logDialog.title":`Logs Dev Server`,"devServer.logDialog.empty":`No logs available`,"notion.title":`Notion`,"tasks.title":`Tasks`,"notion.addTask":`Add task`,"notion.noUrl":`No Notion URL`,"notion.subtasks":`{done}/{total} subtasks`,"notion.noTasks":`No tasks`,"notion.newTask":`New task... (Enter to add, Esc to cancel)`,"acceptance.title":`Acceptance Criteria`,"acceptance.addCriterion":`Add criterion`,"acceptance.newCriterion":`New criterion... (Enter to add, Esc to cancel)`,"acceptance.empty":`No acceptance criteria`,"tasks.askProgress":`Ask agent to review progress`,"agentTodos.title":`Agent Todos`,"agentTodos.empty":`No agent todos`,"subagents.title":`Sub-agents`,"subagents.empty":`No sub-agent activity yet`,"subagents.tools":`{count} tools`,"subagents.running":`Running: `,"subagents.status.running":`Running`,"subagents.status.done":`Completed`,"subagents.status.failed":`Failed`,"subagents.status.stopped":`Stopped`,"subagents.ambient":`Background watcher`,"subagents.ambientTooltip":`Background watcher (e.g. Monitor): not counted as agent activity`,"subagents.stop":`Stop this sub-agent`,"subagents.stopAll":`Stop all`,"subagents.stopFailed":`Could not stop the sub-agent: {error}`,"subagents.activity":`Sub-agent activity`,"subagents.noActivity":`No provider-visible activity yet`,"chat.subagentActivity":`Sub-agent activity`,"chat.openSubagentActivity":`Open this sub-agent in the side panel`,"stats.resetsAt":`Resets {value}`,"stats.usageBucket":`Usage bucket {n}`,"quotaFooter.lastUpdated":`Last update: {time}`,"quotaFooter.empty":`Loading…`,"quotaFooter.popover.title":`Claude Code usage`,"quotaFooter.popover.refreshNow":`Refresh now`,"quotaFooter.popover.resetsIn":`Resets at {value}`,"quotaFooter.popover.unauthenticated":`Auth required`,"quotaFooter.popover.unauthenticatedHint":`Run "claude" once to authenticate.`,"quotaFooter.popover.error":`Error`,"quotaFooter.bucket.fiveHour":`5-hour`,"quotaFooter.bucket.sevenDay":`7-day`,"agent.error.spawn_failed":`Failed to launch the agent`,"agent.error.parse_error":`Unable to parse an agent message`,"agent.error.rate_limit":`Rate limit hit`,"agent.error.resume_failed":`Session not found — starting fresh`,"agent.error.other":`Agent error`,"quotaBackoff.banner.title":`Auto-resume at {time}`,"quotaBackoff.banner.transientTitle":`Auto-resume after interruption at {time}`,"quotaBackoff.resumeNow":`Resume now`,"quotaBackoff.banner.tooltip":`Claude quota exhausted. Auto-loop will resume automatically when the quota resets at {resets_at}.`,"quotaBackoff.banner.cancel":`Cancel resume`,"quotaBackoff.cancelled":`Auto-resume cancelled — you can re-engage manually anytime`,"rateLimitType.fiveHour":`5h session`,"rateLimitType.sevenDay":`Weekly`,"tooltip.addTask":`Add task`,"tooltip.removeTask":`Remove task`,"tooltip.addCriterion":`Add criterion`,"tooltip.removeCriterion":`Remove criterion`,"tooltip.startDevServer":`Start dev server`,"tooltip.stopDevServer":`Stop dev server`,"tooltip.closeDiffViewer":`Close diff viewer`,"tooltip.refreshLogs":`Refresh logs`,"tooltip.closeDialog":`Close`,"tooltip.refreshGitStats":`Refresh Git stats`,"tooltip.removeImage":`Remove image`,"tooltip.sendMessage":`Send message`,"tools.title":`Tools`,"tools.runSetupScript":`Re-run setup script`,"tools.runSetupScriptTooltip":`Execute the project setup script in the worktree`,"tools.runSetupScriptConfirm":`Re-run the setup script in this workspace? Existing artifacts may be overwritten.`,"tools.runSetupScriptBusy":`Cannot re-run setup while the agent is working.`,"tools.noSetupScript":`No setup script configured —`,"tools.setupScriptSuccess":`Setup script completed successfully.`,"tools.setupScriptFailed":`Setup script failed.`,"tools.openNotion":`Open in Notion`,"tools.openSentry":`Open in Sentry`,"tools.review":`Review changes`,"tools.reviewTooltip":`Ask the agent to review the changes on this branch`,"tools.reviewBusy":`Agent is busy — wait until it's idle`,"tools.fixCi":`Fix CI`,"tools.fixCiTooltip":`Ask the agent to diagnose and fix the failing CI jobs`,"tools.fixCiLaunched":`Fix-CI action dispatched to the agent`,"tools.fixCiFailed":`Failed to launch the Fix-CI action`,"tools.openFileManager":`Open in file manager`,"tools.openFileManagerTooltip":`Open the worktree folder in your configured file manager`,"tools.openFileManagerFailed":`Failed to open the file manager`,"tools.openTerminal":`Open in terminal`,"tools.openTerminalTooltip":`Open the worktree in your configured terminal`,"tools.openTerminalFailed":`Failed to open terminal`,"review.title":`Start review`,"review.subtitle":`Ask the agent to review your changes and provide feedback.`,"review.additionalInstructions":`Additional instructions (optional)`,"review.additionalInstructionsPlaceholder":`Add any specific instructions for the review…`,"review.newSession":`New session`,"review.newSessionHint":`Start a fresh agent session instead of continuing the current one.`,"review.newSessionRequired":`A new session is required for different agent settings or an automatic return.`,"review.returnToSession":`Return to the current session after the review`,"review.returnToSessionHint":`Resume this session with the reviewer’s final summary. If disabled, continue in the review session.`,"review.readOnlyForced":`A review that returns to this session runs read-only (Plan): it cannot modify files or ask questions.`,"review.returnUnavailable":`The current session must have started before it can be resumed.`,"review.start":`Start Review`,"review.cancel":`Cancel`,"review.launched":`Review started`,"review.failed":`Failed to start review`,"diff.title":`Diff`,"diff.side":`Side`,"diff.inline":`Inline`,"diff.hideUnchanged":`Hide unchanged code`,"diff.showUnchanged":`Show unchanged code`,"diff.showUntracked":`Show untracked files`,"diff.hideUntracked":`Hide untracked files`,"diff.rollbackToRemote":`Rollback to remote`,"diff.rollbackConfirm":`Reset {path} to its remote (origin) version? Local edits to this file will be lost.`,"diff.rollbackConfirmOk":`Rollback`,"diff.rollbackDone":`File reset to remote version`,"diff.rollbackDoneRemote":`File reset to remote version`,"diff.rollbackDoneHead":`Local edits discarded (file reset to last commit)`,"diff.rollbackDoneDeleted":`Untracked file deleted`,"diff.deleteUntracked":`Delete untracked file`,"diff.deleteUntrackedConfirm":`Permanently delete {path}? This file is not tracked — its content will be lost.`,"diff.deleteUntrackedConfirmOk":`Delete`,"diff.rollbackFailed":`Rollback failed`,"diff.rollbackFailedDetail":`Rollback failed: {error}`,"diff.modeInspect":`Edit`,"diff.modeReview":`Review`,"diff.addComment":`Add comment`,"diff.replyComment":`Reply`,"diff.editComment":`Edit`,"diff.deleteComment":`Delete`,"diff.deleteCommentConfirm":`Delete this comment?`,"diff.commentPlaceholder":`Write a review comment… (Markdown supported)`,"diff.reviewDraft":`Review draft`,"diff.reviewEmpty":`No comments yet — hover a line in the diff and click + to add one.`,"diff.reviewGlobalPlaceholder":`Add an overall review message (optional)`,"diff.submitReview":`Submit review ({n})`,"diff.reviewPending":`A review is already being sent.`,"diff.reviewEmptySubmission":`The review is empty.`,"diff.reviewNotAccepted":`The message was not accepted. Your review has been kept.`,"diff.reviewSubmitted":`Review submitted to agent`,"diff.reviewSubmitFailed":`Failed to submit review: {error}`,"diff.scopeBranch":`Branch`,"diff.scopeUnpushed":`Unpushed`,"diff.noChanges":`No changes`,"diff.searchFiles":`Search files…`,"diff.noFileMatch":`No file matches`,"diff.selectFile":`Select a file to view diff`,"diff.fileLoadFailed":`This diff could not be loaded`,"diff.fileLoadFailedHint":`The file is unchanged on disk — only its diff failed to load.`,"diff.fileListLoadFailed":`The file list could not be loaded`,"diff.fileListLoadFailedHint":`This is a failed request, not a branch without changes.`,"diff.addToChat":`Add to chat`,"diff.compareTitle":`Compare commits`,"diff.compareFrom":`From`,"diff.compareTo":`To`,"diff.compareSubmit":`Compare`,"diff.compareSourceBase":`{branch} (branch base)`,"diff.commitsReadOnly":`read-only`,"diffViewer.save":`Save`,"diffViewer.savedAt":`Saved`,"diffViewer.saveFailed":`Save failed`,"diffViewer.saveFailedDetail":`Save failed: {error}`,"diffViewer.unsavedChanges.title":`Unsaved changes`,"diffViewer.unsavedChanges.message":`You have unsaved edits. What do you want to do?`,"diffViewer.unsavedChanges.save":`Save`,"diffViewer.unsavedChanges.cancel":`Cancel`,"diffViewer.conflict.title":`File changed on disk`,"diffViewer.conflict.message":`The file was modified outside Kōbō since you opened it.`,"diffViewer.conflict.reload":`Reload (discard local)`,"diffViewer.conflict.keep":`Keep mine`,"diffViewer.conflict.overwrite":`Overwrite anyway`,"diffViewer.conflict.overwriteHint":`Replaces the file on disk with your version. The other change is lost.`,"diffViewer.conflict.keepHint":`Keeps your edits in the editor and accepts the new on-disk signature, so the next save works.`,"diffViewer.saveBlocked":`The agent is running — stop it to save your edits.`,"diffViewer.unsavedBanner":`Unsaved edits. Stop the agent to save them.`,"diffViewer.closeConfirm.title":`Unsaved changes`,"diffViewer.closeConfirm.message":`This file has edits that were never saved. Closing the diff viewer discards them.`,"diffViewer.closeConfirm.discard":`Close without saving`,"diffViewer.criteriaRail":`Review checklist`,"diffViewer.criteriaRailShow":`Show the review checklist`,"diffViewer.criteriaRailHide":`Hide the review checklist`,"diffViewer.fileTreeShow":`Show the file tree`,"diffViewer.fileTreeHide":`Hide the file tree`,"diffViewer.closeConfirm.saveAndClose":`Save and close`,"diffViewer.agentRunning":`Agent runs — stop it to edit`,"diffViewer.fileDeleted":`File deleted`,"notification.agentFinished":`{name} — Agent finished`,"notification.agentQuestion":`{name} — Agent is asking a question`,"notification.awaitingReminder":`{name} - still waiting for you ({minutes} min)`,"notification.agentPermissionRequest":`{name} — Agent is requesting a permission`,"notification.autoLoopCompleted":`{name} — Auto-loop completed`,"notification.autoLoopWaitingForSlot":`{name} - Auto-loop is waiting for a free agent slot ({running}/{limit} running)`,"notification.autoLoopStalled":`{name} — Auto-loop stalled (no progress)`,"notification.autoLoopError":`{name} — Auto-loop stopped on error`,"notification.autoLoopAwaitingClarification":`{name} — Auto-loop paused, waiting for your clarification`,"notification.autoLoopPermissionOverridden":`{name} — Auto-loop promoted plan mode to bypass`,"notification.agentError":`{name} — Agent error`,"contextMenu.rename":`Rename`,"contextMenu.editDescription":`Edit description`,"contextMenu.copyPath":`Copy worktree path`,"contextMenu.copyWorkspaceId":`Copy workspace ID`,"contextMenu.openEditor":`Open in editor`,"contextMenu.openFileManager":`Open in file manager`,"contextMenu.unarchiveDisabledPurged":`Restore the worktree first using Restore worktree, or recreate it manually. Kōbō detects matching worktrees automatically.`,"workspaceList.unarchiveBlockedPurged":`Restore the worktree first using Restore worktree, or recreate it manually. Kōbō detects matching worktrees automatically.`,"contextMenu.purgeWorktree":`Free disk space (delete worktree)`,"contextMenu.purgeWorktreeTooltip":`Deletes the worktree from disk to reclaim space — chat / session history is preserved. Auto-archives the workspace.`,"contextMenu.purgeWorktreeDialogTitle":`Free disk space?`,"contextMenu.purgeWorktreeDialogMessage":`The worktree folder for «{name}» will be deleted from disk. Chat and session history are kept. The workspace is auto-archived. This cannot be undone in the current version.`,"contextMenu.purgeWorktreeDialogConfirm":`Delete the worktree`,"contextMenu.purgeWorktreeSuccess":`Worktree deleted — disk space reclaimed.`,"settings.autoPurgeOnPrMerged":`Auto-purge worktree on PR merged`,"settings.autoPurgeOnPrMergedHint":`When ON, the worktree is deleted from disk as soon as the PR is merged (in addition to the auto-archive). Chat history is kept.`,"settings.autoLoopMaxRetries":`Maximum automatic retries`,"settings.awaitingUserReminder":`Unanswered question reminder`,"settings.awaitingUserReminderHint":`Minutes a workspace may wait for your answer before Kōbō reminds you, then again at each further interval. 0 disables it.`,"settings.localeLoadFailed":`Could not load that language; staying in the current one.`,"settings.autoLoopMaxRetriesHint":`Pauses the mission after this many temporary engine or server failures. Quotas wait for their reset and do not consume this limit.`,"settings.retentionTitle":`Conversation history retention (off by default)`,"settings.retentionWarning":`Turning this on permanently deletes agent conversation history from the database, starting with everything already older than the window. Deleted events cannot be recovered.`,"settings.retentionHint":`Runs once at server start-up. Workspaces, tasks, sessions, branches and worktrees are never touched — only the recorded agent output.`,"settings.retentionDaysLabel":`Delete events older than (days)`,"settings.retentionDaysHint":`0 — the default — keeps every event for ever. Set a value to enable retention.`,"settings.retentionKeepLabel":`Events always kept per workspace`,"settings.retentionKeepHint":`The most recent events of each workspace survive whatever their age, so an old but still-open workspace keeps a readable history. Suggested: 5000.`,"settings.retentionDisabledHint":`Retention is disabled: nothing will ever be deleted.`,"settings.retentionConfirmTitle":`Permanently delete conversation history?`,"settings.retentionConfirmMessage":`Keeping only {days} day(s) of history will permanently delete {count} of the {total} recorded agent events at the next server start-up, including everything already older than that. This cannot be undone. Continue?`,"settings.retentionConfirmMessageUnknown":`Keeping only {days} day(s) of history will permanently delete every older agent event at the next server start-up, including everything already accumulated. The exact volume could not be counted. This cannot be undone. Continue?`,"settings.purgeDocsTitle":`How purge works — restore & permissions`,"settings.purgeDocsRestoreTitle":`Restoring a purged worktree (auto-detected)`,"settings.purgeDocsRestoreIntro":`A purged workspace keeps its chat history and PR metadata but the worktree folder is gone. Rebuild it manually with one of these commands — Kōbō detects the folder reappearing within 30 seconds and automatically reactivates the workspace (unarchive + clear purge flag):`,"settings.purgeDocsRestoreCommands":`# GitHub (using gh CLI):
14
+ # your script — use $KOBO_NEW_BASE / $KOBO_OLD_BASE / $KOBO_WORKING_BRANCH …`,"settings.changeSourceBranchScript.resetDefault":`Reset to Kōbō default`,"settings.changeSourceBranchScript.replaceConfirmTitle":`Reset the script?`,"settings.changeSourceBranchScript.replaceConfirm":`Your edits will be replaced by the Kōbō default script. Continue?`,"settings.cleanupScriptHint":`Shell script run in the worktree after the agent finishes a session. In auto-loop mode it runs only once every task is done. Leave empty to disable.`,"settings.cleanupScriptPlaceholder":`e.g. remove temp files, stop containers…`,"settings.cleanupScriptMode":`When to run`,"settings.cleanupScriptMode.idle":`After every session — even if tasks remain`,"settings.cleanupScriptMode.noTasks":`Only when no Kōbō task remains`,"settings.cleanupScriptOnlyOnChanges":`Run only if files were modified, added or deleted`,"settings.cleanupScriptMode.inherit":`Inherit global setting`,"settings.taskPromptTemplate":`Task prompt`,"settings.taskPromptTemplatePlaceholder":`Prompt automatically inserted into the task description…`,"settings.taskPromptTemplateHint":`Automatically injected into the task description on the creation page when this project is selected. Left untouched, it is replaced when you switch projects; once you edit it, your text is kept.`,"settings.setupScriptPlaceholder":`npm install`,"settings.setupScriptHint":`Executed with bash in the worktree after creation, before the agent starts. No shebang needed. If it fails, the workspace is set to error. Timeout: 5 minutes.`,"settings.e2e.title":`E2E tests`,"settings.e2e.framework":`Framework`,"settings.e2e.frameworkNone":`None`,"settings.e2e.frameworkOther":`Other`,"settings.e2e.skill":`Skill (optional)`,"settings.e2e.skillPlaceholder":`e.g. cypress-tester`,"settings.e2e.prompt":`Custom guidance (optional)`,"settings.e2e.promptPlaceholder":`e.g. use page-object pattern, target data-testid attributes`,"settings.e2e.helpText":`When configured, the auto-loop grooming agent inserts E2E sub-tasks for user-visible features.`,"settings.finalization.title":`Auto-loop finalization`,"settings.finalization.helpText":`Optional: a prompt the agent runs as the very last auto-loop iteration. Typically used for final quality checks (lint, typecheck, tests). The grooming step will create a [FINAL]-prefixed task that uses this prompt.`,"settings.finalization.prompt":`Finalization prompt`,"settings.finalization.promptPlaceholder":`e.g. Run npm run lint and npm test, then mark this task done.`,"settings.editorCommand":`Editor command`,"settings.editorCommandPlaceholder":`code, phpstorm, subl, vim...`,"settings.editorCommandHint":`Command used to open the worktree in your editor. The worktree path is passed as argument.`,"settings.fileManagerCommand":`File manager command`,"settings.fileManagerCommandPlaceholder":`xdg-open, open, nautilus, dolphin, explorer...`,"settings.fileManagerCommandHint":`Command used to open the worktree in your file manager. The worktree path is passed as argument. Leave empty to hide the button.`,"settings.terminalCommand":`Terminal command`,"settings.terminalCommandHint":`Command to launch your terminal in the worktree. Optional {path} placeholder for the directory.`,"settings.terminalCommandPlaceholder":`kitty · alacritty · gnome-terminal --working-directory={path}`,"settings.mcpSelection":`Claude MCP selection`,"settings.mcpAutoSelect":`Auto (first matching active MCP)`,"settings.notionMcp":`Notion MCP key`,"settings.sentryMcp":`Sentry MCP key`,"settings.mcpSelectionHint":`Active entries are read from ~/.claude.json. Leave Auto to use default matching behavior.`,"settings.configuredProjects":`Configured projects`,"settings.noProjects":`No projects configured`,"settings.addProject":`Add project`,"settings.copyFrom":`Copy settings from`,"settings.copyFromPlaceholder":`(none — start from defaults)`,"settings.copyFromHint":`Copies all settings except path, display name, and source branch.`,"settings.copyFromConfirmTitle":`Overwrite current values?`,"settings.copyFromConfirm":`This will overwrite the current form values with settings from "{project}". Continue?`,"settings.newProject":`New project`,"settings.editProject":`Edit project`,"help.title":`Help`,"help.tours":`Guided tours`,"help.steps":`{n} step | {n} steps`,"help.markAllSeen":`Mark all as seen`,"help.markAllSeenHint":`Marks current tours as seen without starting them.`,"help.resetAll":`Reset all tours`,"help.resetAllHint":`Runs the home tour now; each screen replays its own on next visit.`,"help.status.unseen":`not seen`,"help.status.partial":`partly seen`,"help.status.seen":`seen`,"help.replayThis":`Replay this screen's tour`,"tours.next":`Next`,"tours.prev":`Back`,"tours.done":`Done`,"tours.exitConfirm":`Quit the guided tour? It will not start again on its own; you can replay it anytime from the Help menu.`,"tours.home.title":`Getting around`,"tours.home.list.title":`Workspaces`,"tours.home.list.description":`Every mission lives here with its status. Badges flag a failing CI, a review asking for changes or a PR ready to merge. Drag the inner edge of a side panel with a mouse or finger to resize it. Header buttons wrap when space is limited.`,"tours.home.create.title":`Create a workspace`,"tours.home.create.description":`A workspace is a git worktree, a branch and an agent session for one task.`,"tours.home.search.title":`Search`,"tours.home.search.description":`Filter the list by name. The search icon at the top opens full-text search across agent conversations.`,"tours.home.dashboard.title":`Dashboard`,"tours.home.dashboard.description":`One table for every active workspace: status, attention, PR, diff, activity, plus engine reliability.`,"tours.home.health.title":`Health and changelog`,"tours.home.health.description":`Check the database, runtimes and active agents. The button next to it lists what changed in each release.`,"tours.home.settings.title":`Settings`,"tours.home.settings.description":`Engines, integrations, automation, worktrees and projects. Now create your first workspace.`,"tours.create.title":`Creating a workspace`,"tours.create.project.title":`Project and branch`,"tours.create.project.description":`Pick the project and the branch the worktree starts from.`,"tours.create.mission.title":`Mission`,"tours.create.mission.description":`Describe the task, or import it from a Notion page or a Sentry issue.`,"tours.create.template.title":`Templates`,"tours.create.template.description":`Apply a saved preset, or save this form as one. "Duplicate" on a workspace card opens this form prefilled.`,"tours.create.engine.title":`Engine and model`,"tours.create.engine.description":`Claude Code or Codex, the model, the reasoning effort and what the agent may do without asking.`,"tours.create.brainstorm.title":`Brainstorm on another model`,"tours.create.brainstorm.description":`Run the first brainstorming session on a different model, then switch back for the iterations.`,"tours.create.autoloop.title":`Auto-loop`,"tours.create.autoloop.description":`Let the agent complete the tasks and final checks. An optional independent final review repeats after corrections until there are no findings; stalled work pauses for attention.`,"tours.create.finalReview.title":`Configure the final review`,"tours.create.finalReview.description":`Choose the reviewer engine, model, reasoning effort and instructions in advance. The review runs in a separate read-only session; the original agent fixes findings and repeats the review until none remain.`,"tours.workspace.finalReview.title":`Final review and corrections`,"tours.workspace.finalReview.description":`Configure the optional final reviewer here, before it starts. Once tasks and final checks pass, a separate session reviews the work. Findings return to the original session for automatic corrections and another review. Closing Kōbō preserves the cycle.`,"tours.workspace.reviewReturn.title":`Return from a review`,"tours.workspace.reviewReturn.description":`The summary returns to the original session, even after restarting Kōbō. If delivery is uncertain, inspect that conversation before Retry; Cancel abandons the return. Manual reviews wait for your instructions before fixes; auto-loop reviews correct findings automatically.`,"tours.create.comparison.title":`Compare two engines`,"tours.create.comparison.description":`Create two sibling workspaces on the same task and compare their commits, tasks and activity.`,"tours.workspace.sessions.title":`Workspace sessions`,"tours.workspace.sessions.description":`Click the title to choose, create or rename a session, or copy its identifier.`,"tours.workspace.actions.title":`Workspace actions`,"tours.workspace.actions.description":`The ⋯ menu groups side-by-side view, the command palette, the side panel and the guided tour.`,"tours.workspace.title":`Inside a workspace`,"tours.workspace.chat.title":`Conversation`,"tours.workspace.chat.description":`The agent output, live: messages, tool calls, questions and errors.`,"tours.workspace.input.title":`Talk to the agent`,"tours.workspace.input.description":`Send a message, use slash commands, dictate by voice or attach files.`,"tours.workspace.selectors.title":`Session settings`,"tours.workspace.selectors.description":`Open Configure to adjust model, effort, permissions and auto-loop. The current engine is shown there.`,"tours.workspace.status.title":`Status`,"tours.workspace.status.description":`The current session state; stop it here when needed.`,"tours.workspace.git.title":`Git`,"tours.workspace.git.description":`Commits, diff, push, rebase and the PR for this branch.`,"tours.workspace.tasks.title":`Tasks`,"tours.workspace.tasks.description":`What the agent plans to do, and the acceptance criteria it must meet.`,"tours.workspace.timeline.title":`Timeline`,"tours.workspace.timeline.description":`Every session of this workspace; open an older one to read it.`,"tours.workspace.subagents.title":`Sub-agents`,"tours.workspace.subagents.description":`Follow the sub-agents the agent spawned, with their live progress.`,"tours.workspace.documents.title":`Documents`,"tours.workspace.documents.description":`Plans and files the agent wrote, browsable without leaving the chat.`,"tours.workspace.schedule.title":`Schedule`,"tours.workspace.schedule.description":`Wake-ups and crons that restart the agent later.`,"tours.workspace.memory.title":`Workspace memory`,"tours.workspace.memory.description":`Inspect memory delivered to the selected conversation, pending proposals and workspace operations. Clearing it does not change provider chat history.`,"tours.workspace.handoff.title":`Continue with fresh context`,"tours.workspace.handoff.description":`Long conversation? Start a fresh session here, or use “Change LLM”. Current work stops immediately and the new session continues automatically in the same workspace. The handoff summary is optional: turn it off if the current LLM has no quota left. Progress, the report and a link to the previous session appear below this button.`,"tours.workspace.terminal.title":`Terminal`,"tours.workspace.terminal.description":`A shell inside the worktree, without leaving Kōbō.`,"tours.gitPr.title":`Pull request`,"tours.gitPr.panel.title":`PR status`,"tours.gitPr.panel.description":`CI result, review decision and reviewers, refreshed every 30 seconds.`,"tours.gitPr.actions.title":`Git actions`,"tours.gitPr.actions.description":`Push, pull, rebase or change the base branch. During a conflict a button lets the agent resolve it.`,"tours.gitPr.attention.title":`Attention badges`,"tours.gitPr.attention.description":`The card shows a failing CI, requested changes or a PR ready to merge.`,"tours.settings.title":`Settings`,"tours.settings.engines.title":`Engines and models`,"tours.settings.engines.description":`Default models, permission modes and automatic retry limits.`,"tours.settings.integrations.title":`Integrations`,"tours.settings.integrations.description":`Notion and Sentry connections, plus Bitbucket credentials. GitHub and GitLab use your local CLI login.`,"tours.settings.automation.title":`Automation`,"tours.settings.automation.description":`Setup and cleanup scripts, lifecycle hooks, prompt templates, workspace templates and skills.`,"tours.settings.worktrees.title":`Worktrees`,"tours.settings.memory.title":`Memory`,"tours.settings.memory.description":`Choose Manual, Automatic or Hybrid behavior, then browse scopes and inspect or clear their exact memory data. CRUD and clear operations take effect immediately; changing the mode uses the Settings save button.`,"tours.settings.worktrees.description":`Where worktrees live, how long merged ones are kept, and automatic purge.`,"tours.settings.projects.title":`Projects`,"tours.settings.projects.description":`Registered projects and their per-project overrides.`,"tours.settings.misc.title":`General, voice, notifications, export`,"tours.settings.misc.description":`Language, network access, dictation, sounds and browser notifications, and a full export of your settings.`,"tours.dashboard.title":`Dashboard`,"tours.dashboard.overview.title":`Overview`,"tours.dashboard.overview.description":`Every active workspace in one table; click a row to open it.`,"tours.dashboard.reliability.title":`Engine reliability`,"tours.dashboard.reliability.description":`Sessions, errors and durations per engine and model.`,"tours.health.title":`Health`,"tours.health.checks.title":`Checks`,"tours.health.checks.description":`Environment, database, runtimes, workspaces and sessions.`,"tours.health.active.title":`Active state`,"tours.health.active.description":`Quota back-offs, pending wake-ups and running auto-loops right now.`,"tours.search.title":`Search`,"tours.search.input.title":`Query`,"tours.search.input.description":`Matches workspace names and agent conversations.`,"tours.search.archived.title":`Archived`,"tours.search.archived.description":`Include archived workspaces in the results.`,"tours.changelog.title":`What's new`,"tours.changelog.list.title":`Releases`,"tours.changelog.list.description":`What changed in each version, newest first.`,"settings.projectGroup.identity":`Identity`,"settings.projectGroup.defaults":`Defaults`,"settings.projectGroup.prompts":`Prompts`,"settings.projectGroup.scripts":`Scripts`,"settings.projectPath":`Project path`,"settings.projectPathPlaceholder":`/path/to/project`,"settings.displayName":`Display name`,"settings.displayNamePlaceholder":`My project`,"settings.defaultSourceBranch":`Default source branch`,"settings.defaultModel.project":`Default model`,"settings.skipPermissions.project":`Skip permission prompts`,"settings.prPromptTemplate.project":`PR prompt template`,"settings.prPromptPlaceholder.project":`Project-specific instructions for PR creation...`,"settings.reviewPromptTemplate.project":`Review prompt template`,"settings.ciFixPromptTemplate.project":`CI fix prompt template`,"settings.gitConventions.project":`Git conventions (project override)`,"settings.gitConventionsEmpty":`Leave empty to use the global conventions.`,"settings.notionStatus":`Notion ticket status`,"settings.notionStatusProperty":`Property name`,"settings.notionStatusPropertyPlaceholder":`État, Status...`,"settings.notionInProgressStatus":`Value to set`,"settings.notionInProgressStatusPlaceholder":`In progress, En cours...`,"settings.notionStatusHint":`When a workspace is created with a Notion ticket, the specified property is set to this value. Both fields are required. Leave empty to disable.`,"settings.notionAssignee":`Notion assignment`,"settings.notionAssigneeHint":`When a workspace is created with a Notion ticket, the user authenticated with the Notion MCP is added to this People property — only if it doesn't already have an assignee. Leave empty to disable.`,"settings.notionAssigneeProperty":`Property name`,"settings.notionAssigneePropertyPlaceholder":`Developers, Assignees...`,"settings.notionUserId":`Your Notion UUID`,"settings.notionUserIdPlaceholder":`135d872b-594c-8126-9604-00024ad6e5b5`,"settings.notionUserIdHint":`Pick your account from the list. Notion rejects bot assignment in People properties — this field is required to enable auto-assignment.`,"settings.notionUsersRefresh":`Refresh`,"settings.notionUsersLoading":`Loading Notion users…`,"settings.notionUsersLoadFailed":`Failed to load list: {error}`,"settings.notionUsersManualFallback":`List unavailable — paste your Notion UUID manually.`,"settings.devServer":`Dev server`,"settings.devServerStart":`Script start`,"settings.devServerStartPlaceholder":`npm run dev`,"settings.devServerStop":`Script stop`,"settings.devServerStopPlaceholder":`Optional — the process will be killed automatically if empty`,"settings.selectProject":`Select a project or add a new one`,"settings.projectPathRequired":`Project path is required.`,"settings.useGlobal":`Use global`,"settings.saved":`Global settings saved.`,"settings.unsavedChanges":`Unsaved changes`,"settings.nav.general":`General`,"settings.nav.agents":`Agents`,"settings.nav.skills":`Skills`,"settings.nav.prompts":`Prompts`,"settings.nav.scripts":`Scripts`,"settings.nav.workspaceTemplates":`Workspace templates`,"workspaceTemplates.title":`Workspace templates`,"workspaceTemplates.hint":`Saved presets of the create form. Pick one on the create page; to change one, load it there, adjust, and save it again under the same name.`,"workspaceTemplates.empty":`No template yet. Fill the create form and use “Save as template”.`,"workspaceTemplates.anyProject":`Any project`,"workspaceTemplates.rename":`Rename`,"workspaceTemplates.renameTitle":`Rename the template`,"workspaceTemplates.deleteConfirm":`Delete the template “{name}”?`,"workspaceTemplates.deleted":`Template “{name}” deleted`,"settings.nav.notion":`Notion`,"settings.nav.forge":`Forge`,"settings.bitbucketCommunity":`Bitbucket Community`,"settings.bitbucketCommunityHint":`Credentials are kept locally and used only by bkt.`,"settings.bitbucketUsername":`Atlassian email`,"settings.bitbucketToken":`Bitbucket API token`,"settings.nav.sentry":`Sentry`,"settings.nav.voice":`Voice`,"settings.nav.notifications":`Notifications`,"settings.nav.worktrees":`Worktrees`,"settings.nav.export":`Export`,"settings.help.general":`Language, network access, and the defaults every project inherits.`,"settings.help.agents":`Default models and permission modes, plus automatic retry limits.`,"settings.help.skills":`Which skill suites the agent is told to use.`,"settings.help.prompts":`Agent instructions after opening a PR/MR, for code review, CI fixes and finalization.`,"settings.help.scripts":`Setup, cleanup and change-source-branch scripts, plus lifecycle hooks.`,"settings.help.notion":`Import a Notion page as the source of truth of a workspace.`,"settings.help.sentry":`Create a workspace from a Sentry issue.`,"settings.help.forge":`Bitbucket credentials. GitHub and GitLab use your authenticated gh/glab CLI; choose the forge per project.`,"settings.help.voice":`Dictation and push-to-talk.`,"settings.help.notifications":`Sounds, browser notifications and the unanswered-question reminder.`,"settings.help.worktrees":`Where worktrees are created, retention and automatic purge.`,"settings.help.projects":`Registered projects and their per-project overrides.`,"settings.help.templates":`Prompt templates expanded in the chat input.`,"settings.help.workspaceTemplates":`Saved presets of the create form.`,"settings.help.export":`Export and import every setting as JSON.`,"settings.openNav":`Open navigation`,"settings.saveError":`Error saving settings.`,"settings.projectSaved":`Project saved.`,"settings.projectSaveError":`Error saving project.`,"settings.projectDeleted":`Project deleted.`,"settings.deleteProjectConfirmTitle":`Delete project?`,"settings.deleteProjectConfirmMessage":`Remove "{name}" from your projects? This only deletes its Kōbō settings — your code and worktrees are left untouched.`,"settings.projectDeleteError":`Error deleting project.`,"templates.title":`Templates`,"templates.newTemplate":`New template`,"templates.editTemplate":`Edit template`,"templates.deleteTemplate":`Delete template`,"templates.deleteConfirm":`Delete template '/{slug}'?`,"templates.deleteConfirmMessage":`This cannot be undone.`,"templates.slug":`Slug`,"templates.slugHint":`Lowercase letters, digits, hyphens. Max 64 chars.`,"templates.slugInvalid":`Slug must contain only lowercase letters, digits, and hyphens`,"templates.slugDuplicate":`A template with this slug already exists`,"templates.description":`Description`,"templates.descriptionHint":`Short label shown in the dropdown.`,"templates.descriptionRequired":`Description is required`,"templates.contentRequired":`Content is required`,"templates.content":`Content`,"templates.contentHint":`Template content. Use {variable_name} for substitutions.`,"templates.availableVars":`Available variables`,"templates.filePath":`File: {path}`,"templates.empty":`No templates yet.`,"templates.createFailed":`Failed to create template`,"templates.updateFailed":`Failed to update template`,"templates.deleteFailed":`Failed to delete template`,"templates.save":`Save`,"templates.create":`Create`,"templates.reloadDefaults":`Reload default templates`,"templates.reloadDefaultsHint":`Only adds default templates that are missing. Existing templates (modified or not) are never overwritten.`,"templates.reloadDefaultsConfirmMessage":`This action will add any missing default templates back to the list. Existing templates — including ones you've customized — will not be touched. If you want to restore a default template you've modified, delete it first, then run this action.`,"templates.reloadDefaultsSuccess":`{added} added, {kept} kept`,"templates.reloadDefaultsFailed":`Failed to reload default templates`,"templates.resetToDefault":`Reset to default`,"templates.resetConfirmTitle":`Reset template to default?`,"templates.resetConfirmMessage":`This overwrites your local changes to /{slug} with the built-in default. This cannot be undone.`,"templates.resetSuccess":`Template /{slug} reset to default`,"templates.resetFailed":`Failed to reset template`,"chatInput.dropdownSkills":`Claude skills`,"chatInput.dropdownKobo":`Kōbō commands`,"chatInput.dropdownTemplates":`Templates`,"documents.title":`Documents`,"documents.empty":`No documents found`,"documents.refresh":`Refresh`,"documents.back":`Back`,"documents.loadFailed":`Failed to load document`,"git.title":`Git`,"git.outputDialogTitle":`Git reported an error`,"git.statsFailed":`Git status could not be read`,"git.section.repository":`Repository`,"git.section.changes":`Changes`,"git.section.pullRequest":`Pull request`,"git.section.actions":`Actions`,"git.actions.more":`More`,"git.localOnly":`local only`,"git.pushed":`pushed`,"git.unpushed":`{count} unpushed`,"git.commits":`{count} commit | {count} commits`,"git.commits.loading":`Loading commits…`,"git.commits.empty":`No commits on this branch`,"git.commits.pushed":`Pushed`,"git.commits.unpushed":`Not pushed`,"git.commits.clickToAppend":`click to append SHA to chat`,"git.commits.diffThisCommit":`Diff this commit (vs parent)`,"git.compareCommits":`Compare commits…`,"git.files":`{count} file | {count} files`,"git.staged":`{count} staged`,"git.modified":`{count} modified`,"git.untracked":`{count} untracked`,"git.workingTreeEmpty":`No uncommitted changes`,"git.fileStaged":`Staged`,"git.fileModified":`Modified`,"git.fileUntracked":`Untracked`,"git.push":`Push`,"git.forcePush":`Force push`,"git.forcePushToggle":`Force push (--force-with-lease)`,"git.pushRejectedHistory":`Push rejected: the local and remote branches have different histories. After rebasing published commits, use Force push with confirmation. Otherwise, fetch and integrate the remote changes before trying again.`,"git.pushRejectedLease":`Force push rejected: the remote branch has changed since your last fetch. Fetch and review those changes before trying again.`,"git.pushFailed":`Could not push the branch. Open the details to see why.`,"git.pushBlockedByOperation":`Finish or abort the current {operation} first`,"git.pushUpToDate":`Nothing to push: the branch is already up to date on origin`,"git.forcePushHint":`Safer than plain --force: the push is rejected if the remote has commits you haven’t seen. Use after rebasing or amending already-pushed commits.`,"git.branchForcePushed":`Branch force-pushed`,"git.pull":`Pull`,"git.pullNoUpstream":`No upstream set for this branch — push it first to enable pull.`,"git.sync":`Sync`,"git.createPrNoRemote":`Push the branch first`,"git.viewRequest":`View {request}`,"git.createRequest":`Create {request}`,"git.changeRequestBase":`Change {request} base branch`,"git.forgeCliMissing":`{cli} is not installed — install it to use {request} features`,"git.forgeNotAuthenticated":`Not authenticated — run {cli} auth login`,"settings.forge":`Forge`,"settings.forge.auto":`Auto-detect`,"settings.forge.github":`GitHub`,"settings.forge.gitlab":`GitLab`,"settings.forge.bitbucketCommunity":`Bitbucket Community (bkt)`,"settings.forge.none":`None`,"git.pullConfirmTitle":`Pull branch?`,"git.pullConfirmMessage":`Pull {branch} from remote (fast-forward only).`,"git.branchPulled":`Branch pulled`,"git.pullFailed":`Pull failed`,"git.renameBranch":`Rename branch`,"git.renameBranchPrompt":"Rename `{branch}` to:","git.renameBranchSuccess":"Branch renamed to `{branch}`","git.renameBranchFailed":`Failed to rename branch`,"git.renameBranchExists":"Branch `{branch}` already exists locally or on origin","git.diff":`Diff`,"git.diffReview":`Diff`,"git.diffReviewTooltip":`Open the diff viewer in Review mode — inline comments + batch submit to the agent`,"pr.baseChanged":`PR base changed: {oldBase} → {newBase}`,"pr.openPr":`Open PR`,"pr.openWorkspace":`Open workspace`,"pr.dismiss":`Dismiss`,"git.rebase":`Rebase`,"git.rebaseConfirmTitle":`Rebase branch?`,"git.rebaseConfirmMessage":`Rebase onto {branch}. This may cause conflicts.`,"git.rebaseSuccess":`Rebase completed`,"git.rebaseFailed":`Rebase failed`,"git.merge":`Merge`,"git.fetch":`Fetch`,"git.fetchSuccess":`Repository fetched`,"git.fetchFailed":`Fetch failed: {error}`,"git.mergeConfirmTitle":`Merge branch?`,"git.mergeConfirmMessage":`Merge {branch} into this branch. This may cause conflicts.`,"git.mergeSuccess":`Merge completed`,"git.mergeFailed":`Merge failed`,"git.commitFailed":`Commit failed`,"git.commitChanges":`Commit changes`,"git.commitDialogTitle":`Commit uncommitted changes`,"git.commitDialogDescription":`Enter your own message or ask the agent to inspect and create the commit.`,"git.commitMessage":`Commit message`,"git.commitManual":`Commit`,"git.commitWithAgent":`Ask agent`,"git.commitAgentSuccess":`Commit request sent to the agent`,"git.discardFailed":`Discard failed`,"git.conflictTitleMerge":`Merge conflicts detected`,"git.conflictTitleRebase":`Rebase conflicts detected`,"git.operationPausedTitle":`Git operation ready to continue`,"git.operationPausedSubtitle":`No files are in conflict. Git is simply waiting for you to continue the operation.`,"git.conflictSubtitle":`{count} file(s) have conflicts. Choose how to continue.`,"git.conflictAbortConfirmTitle":`Discard the conflict resolution?`,"git.conflictAbortConfirmMessage":`Everything you resolved in this {op} is thrown away and the worktree goes back to its pre-{op} state. This cannot be undone.`,"git.conflictAbort":`Abort`,"git.conflictContinue":`Continue`,"git.conflictContinued":`Git operation continued`,"git.conflictResolveWithAgent":`Ask agent to resolve`,"git.conflictAborted":`Operation aborted`,"git.conflictHandoffSuccess":`Agent is resolving the conflicts`,"git.dirtyTitleRebase":`Uncommitted changes block the rebase`,"git.dirtyTitleMerge":`Uncommitted changes block the merge`,"git.dirtyTitlePull":`Uncommitted changes block the pull`,"git.dirtySubtitle":`{modified} modified, {staged} staged, {untracked} untracked. Choose how to proceed.`,"git.dirtyStash":`Stash & retry`,"git.dirtyCommit":`Commit first`,"git.dirtyCommitPlaceholder":`Commit message`,"git.dirtyCommitConfirm":`Commit & retry`,"git.dirtyDiscard":`Discard changes`,"git.dirtyDiscardConfirmTitle":`Discard all uncommitted changes?`,"git.dirtyDiscardConfirmMessage":`Tracked changes will be lost (git reset --hard). Untracked files are kept. This cannot be undone.`,"git.pushConfirmTitle":`Push branch?`,"git.pushConfirmMessage":`Push {branch} to remote.`,"git.pushConfirmMessagePrefix":`Push branch`,"git.pushConfirmMessageSuffix":`to remote.`,"git.changePrBaseTitle":`Change base branch`,"git.changePrBaseMessage":`Enter the new target branch for the {request}.`,"git.changePrBaseSuccess":`{request} base branch updated`,"git.changePrBaseFailed":`Failed to change {request} base branch`,"git.mergeRequest":`Merge {request}`,"git.mergeRequestConfirmTitle":`Merge {request}?`,"git.mergeRequestConfirmMessage":`This merges the open {request} into its target branch.`,"git.mergeRequestSuccess":`{request} merged`,"git.mergeRequestFailed":`Failed to merge {request}`,"git.deleteRemoteBranch":`Delete remote branch`,"git.deleteRemoteBranchTitle":`Delete remote branch?`,"git.deleteRemoteBranchMessage":`The request was merged. Delete the remote branch {branch}?`,"git.deleteRemoteBranchSuccess":`Remote branch {branch} deleted`,"git.deleteRemoteBranchFailed":`Failed to delete remote branch`,"git.changeSourceBranch":`Change source branch`,"git.changeSourceBranchTitle":`Change source branch`,"git.changeSourceBranchMessage":`Pick the new source branch. The working branch will be rebuilt on top of it.`,"git.changeSourceBranchDone":`Source branch changed to {branch}`,"git.changeSourceBranchAligned":`Source branch changed to {branch} (branch had no own commits)`,"git.changeSourceBranchTooMany":`The branch has too many own commits ({n}) — rebase it manually`,"git.changeSourceBranchDirty":`Commit or stash your changes before changing the source branch`,"git.changeSourceBranchAgentRunning":`Stop the agent before changing the source branch`,"git.changeSourceBranchErrorTitle":`Source branch change failed`,"git.changeSourceBranchErrorOngoing":`A {op} operation is still in progress on the worktree. Abort it to return to a clean state.`,"git.changeSourceBranchErrorAbort":`Abort the operation`,"git.changeSourceBranchLoading":`Changing source branch…`,"git.changeSourceForcePushTitle":`Force-push the rewritten branch?`,"git.changeSourceForcePushMessage":`The branch history was rewritten. Force-push it to the remote with --force-with-lease?`,"git.changeSourceForcePushDone":`Branch force-pushed`,"git.openEditor":`Open in editor`,"git.openEditorFailed":`Failed to open editor`,"git.branchPushed":`Branch pushed`,"git.pushFirst":`Branch is not on remote. Click Push first.`,"git.unpushedCommits":`Local commits are not pushed. Click Push first.`,"git.from":`from`,"git.aheadBehindTooltip":`{ahead} commits ahead, {behind} behind {source}`,"git.divergence.title":`Branch divergence`,"git.divergence.subtitle":`vs {source}`,"git.divergence.ahead":`↑ {count} ahead`,"git.divergence.behind":`↓ {count} behind`,"git.divergence.empty.ahead":`No commits ahead.`,"git.divergence.empty.behind":`No commits behind.`,"git.divergence.close":`Close`,"git.divergence.loading":`Loading commits…`,"git.divergence.failed":`Failed to load divergence`,"git.divergence.retry":`Retry`,"git.prCreated":`{request} #{n} created`,"git.pr.author":`Author`,"git.pr.reviewers":`Reviewers`,"git.pr.assignees":`Assignees`,"git.pr.labels":`Labels`,"git.pr.changesRequestedBadge":`Changes requested`,"git.pr.approvedBadge":`Approved`,"git.pr.ci.passed":`CI passed`,"git.pr.ci.failed":`CI failed`,"git.pr.ci.pending":`CI running`,"git.pr.ci.failedCount":`{n} failed`,"git.pr.ci.pendingCount":`{n} pending`,"git.pr.ci.passedCount":`{n} passed`,"git.pr.ci.skippedCount":`{n} skipped`,"git.pr.ci.showPassed":`Show {n} passing jobs`,"git.pr.ci.hidePassed":`Hide passing jobs`,"toast.prChangesRequested":`PR #{n} has changes requested`,"toast.prApproved":`PR #{n} has been approved`,"toast.prReadyToMerge":`PR #{n} is ready to merge`,"toast.prCiFailed":`CI failed for PR #{n}`,"toast.prCiRecovered":`CI recovered for PR #{n}`,"toast.prMergeConflict":`PR #{n} has merge conflicts`,"toast.prMerged":`PR #{n} has been merged`,"devServer.title":`Dev Server`,"devServer.noWorkspace":`No workspace selected`,"devServer.notConfigured":`Not configured —`,"devServer.goToSettings":`Settings`,"devServer.logs":`Logs`,"devServer.running":`Running`,"devServer.starting":`Starting`,"devServer.stopping":`Stopping`,"devServer.error":`Error`,"devServer.stopped":`Stopped`,"devServer.unknown":`Unknown`,"devServer.containers":`{count} container | {count} containers`,"devServer.logDialog.title":`Logs Dev Server`,"devServer.logDialog.empty":`No logs available`,"notion.title":`Notion`,"tasks.title":`Tasks`,"notion.addTask":`Add task`,"notion.noUrl":`No Notion URL`,"notion.subtasks":`{done}/{total} subtasks`,"notion.noTasks":`No tasks`,"notion.newTask":`New task... (Enter to add, Esc to cancel)`,"acceptance.title":`Acceptance Criteria`,"acceptance.addCriterion":`Add criterion`,"acceptance.newCriterion":`New criterion... (Enter to add, Esc to cancel)`,"acceptance.empty":`No acceptance criteria`,"tasks.askProgress":`Ask agent to review progress`,"agentTodos.title":`Agent Todos`,"agentTodos.empty":`No agent todos`,"subagents.title":`Sub-agents`,"subagents.empty":`No sub-agent activity yet`,"subagents.tools":`{count} tools`,"subagents.running":`Running: `,"subagents.status.running":`Running`,"subagents.status.done":`Completed`,"subagents.status.failed":`Failed`,"subagents.status.stopped":`Stopped`,"subagents.ambient":`Background watcher`,"subagents.ambientTooltip":`Background watcher (e.g. Monitor): not counted as agent activity`,"subagents.stop":`Stop this sub-agent`,"subagents.stopAll":`Stop all`,"subagents.stopFailed":`Could not stop the sub-agent: {error}`,"subagents.activity":`Sub-agent activity`,"subagents.noActivity":`No provider-visible activity yet`,"chat.subagentActivity":`Sub-agent activity`,"chat.openSubagentActivity":`Open this sub-agent in the side panel`,"stats.resetsAt":`Resets {value}`,"stats.usageBucket":`Usage bucket {n}`,"quotaFooter.lastUpdated":`Last update: {time}`,"quotaFooter.empty":`Loading…`,"quotaFooter.popover.title":`Claude Code usage`,"quotaFooter.popover.refreshNow":`Refresh now`,"quotaFooter.popover.resetsIn":`Resets at {value}`,"quotaFooter.popover.unauthenticated":`Auth required`,"quotaFooter.popover.unauthenticatedHint":`Run "claude" once to authenticate.`,"quotaFooter.popover.error":`Error`,"quotaFooter.bucket.fiveHour":`5-hour`,"quotaFooter.bucket.sevenDay":`7-day`,"agent.error.spawn_failed":`Failed to launch the agent`,"agent.error.parse_error":`Unable to parse an agent message`,"agent.error.rate_limit":`Rate limit hit`,"agent.error.resume_failed":`Session not found — starting fresh`,"agent.error.other":`Agent error`,"quotaBackoff.banner.title":`Auto-resume at {time}`,"quotaBackoff.banner.transientTitle":`Auto-resume after interruption at {time}`,"quotaBackoff.resumeNow":`Resume now`,"quotaBackoff.banner.tooltip":`Claude quota exhausted. Auto-loop will resume automatically when the quota resets at {resets_at}.`,"quotaBackoff.banner.cancel":`Cancel resume`,"quotaBackoff.cancelled":`Auto-resume cancelled — you can re-engage manually anytime`,"rateLimitType.fiveHour":`5h session`,"rateLimitType.sevenDay":`Weekly`,"tooltip.addTask":`Add task`,"tooltip.removeTask":`Remove task`,"tooltip.addCriterion":`Add criterion`,"tooltip.removeCriterion":`Remove criterion`,"tooltip.startDevServer":`Start dev server`,"tooltip.stopDevServer":`Stop dev server`,"tooltip.closeDiffViewer":`Close diff viewer`,"tooltip.refreshLogs":`Refresh logs`,"tooltip.closeDialog":`Close`,"tooltip.refreshGitStats":`Refresh Git stats`,"tooltip.removeImage":`Remove image`,"tooltip.sendMessage":`Send message`,"tools.title":`Tools`,"tools.runSetupScript":`Re-run setup script`,"tools.runSetupScriptTooltip":`Execute the project setup script in the worktree`,"tools.runSetupScriptConfirm":`Re-run the setup script in this workspace? Existing artifacts may be overwritten.`,"tools.runSetupScriptBusy":`Cannot re-run setup while the agent is working.`,"tools.noSetupScript":`No setup script configured —`,"tools.setupScriptSuccess":`Setup script completed successfully.`,"tools.setupScriptFailed":`Setup script failed.`,"tools.openNotion":`Open in Notion`,"tools.openSentry":`Open in Sentry`,"tools.review":`Review changes`,"tools.reviewTooltip":`Ask the agent to review the changes on this branch`,"tools.reviewBusy":`Agent is busy — wait until it's idle`,"tools.fixCi":`Fix CI`,"tools.fixCiTooltip":`Ask the agent to diagnose and fix the failing CI jobs`,"tools.fixCiLaunched":`Fix-CI action dispatched to the agent`,"tools.fixCiFailed":`Failed to launch the Fix-CI action`,"tools.openFileManager":`Open in file manager`,"tools.openFileManagerTooltip":`Open the worktree folder in your configured file manager`,"tools.openFileManagerFailed":`Failed to open the file manager`,"tools.openTerminal":`Open in terminal`,"tools.openTerminalTooltip":`Open the worktree in your configured terminal`,"tools.openTerminalFailed":`Failed to open terminal`,"review.title":`Start review`,"review.subtitle":`Ask the agent to review your changes and provide feedback.`,"review.additionalInstructions":`Additional instructions (optional)`,"review.additionalInstructionsPlaceholder":`Add any specific instructions for the review…`,"review.newSession":`New session`,"review.newSessionHint":`Start a fresh agent session instead of continuing the current one.`,"review.newSessionRequired":`A new session is required for different agent settings or an automatic return.`,"review.returnToSession":`Return to the current session after the review`,"review.returnToSessionHint":`Resume this session with the reviewer’s final summary. If disabled, continue in the review session.`,"review.readOnlyForced":`A review that returns to this session runs read-only (Plan): it cannot modify files or ask questions.`,"review.returnUnavailable":`The current session must have started before it can be resumed.`,"review.start":`Start Review`,"review.cancel":`Cancel`,"review.launched":`Review started`,"review.failed":`Failed to start review`,"diff.title":`Diff`,"diff.side":`Side`,"diff.inline":`Inline`,"diff.hideUnchanged":`Hide unchanged code`,"diff.showUnchanged":`Show unchanged code`,"diff.showUntracked":`Show untracked files`,"diff.hideUntracked":`Hide untracked files`,"diff.rollbackToRemote":`Rollback to remote`,"diff.rollbackConfirm":`Reset {path} to its remote (origin) version? Local edits to this file will be lost.`,"diff.rollbackConfirmOk":`Rollback`,"diff.rollbackDone":`File reset to remote version`,"diff.rollbackDoneRemote":`File reset to remote version`,"diff.rollbackDoneHead":`Local edits discarded (file reset to last commit)`,"diff.rollbackDoneDeleted":`Untracked file deleted`,"diff.deleteUntracked":`Delete untracked file`,"diff.deleteUntrackedConfirm":`Permanently delete {path}? This file is not tracked — its content will be lost.`,"diff.deleteUntrackedConfirmOk":`Delete`,"diff.rollbackFailed":`Rollback failed`,"diff.rollbackFailedDetail":`Rollback failed: {error}`,"diff.modeInspect":`Edit`,"diff.modeReview":`Review`,"diff.addComment":`Add comment`,"diff.replyComment":`Reply`,"diff.editComment":`Edit`,"diff.deleteComment":`Delete`,"diff.deleteCommentConfirm":`Delete this comment?`,"diff.commentPlaceholder":`Write a review comment… (Markdown supported)`,"diff.reviewDraft":`Review draft`,"diff.reviewEmpty":`No comments yet — hover a line in the diff and click + to add one.`,"diff.reviewGlobalPlaceholder":`Add an overall review message (optional)`,"diff.submitReview":`Submit review ({n})`,"diff.reviewPending":`A review is already being sent.`,"diff.reviewEmptySubmission":`The review is empty.`,"diff.reviewNotAccepted":`The message was not accepted. Your review has been kept.`,"diff.reviewSubmitted":`Review submitted to agent`,"diff.reviewSubmitFailed":`Failed to submit review: {error}`,"diff.scopeBranch":`Branch`,"diff.scopeUnpushed":`Unpushed`,"diff.noChanges":`No changes`,"diff.searchFiles":`Search files…`,"diff.noFileMatch":`No file matches`,"diff.selectFile":`Select a file to view diff`,"diff.fileLoadFailed":`This diff could not be loaded`,"diff.fileLoadFailedHint":`The file is unchanged on disk — only its diff failed to load.`,"diff.fileListLoadFailed":`The file list could not be loaded`,"diff.fileListLoadFailedHint":`This is a failed request, not a branch without changes.`,"diff.addToChat":`Add to chat`,"diff.compareTitle":`Compare commits`,"diff.compareFrom":`From`,"diff.compareTo":`To`,"diff.compareSubmit":`Compare`,"diff.compareSourceBase":`{branch} (branch base)`,"diff.commitsReadOnly":`read-only`,"diffViewer.save":`Save`,"diffViewer.savedAt":`Saved`,"diffViewer.saveFailed":`Save failed`,"diffViewer.saveFailedDetail":`Save failed: {error}`,"diffViewer.unsavedChanges.title":`Unsaved changes`,"diffViewer.unsavedChanges.message":`You have unsaved edits. What do you want to do?`,"diffViewer.unsavedChanges.save":`Save`,"diffViewer.unsavedChanges.cancel":`Cancel`,"diffViewer.conflict.title":`File changed on disk`,"diffViewer.conflict.message":`The file was modified outside Kōbō since you opened it.`,"diffViewer.conflict.reload":`Reload (discard local)`,"diffViewer.conflict.keep":`Keep mine`,"diffViewer.conflict.overwrite":`Overwrite anyway`,"diffViewer.conflict.overwriteHint":`Replaces the file on disk with your version. The other change is lost.`,"diffViewer.conflict.keepHint":`Keeps your edits in the editor and accepts the new on-disk signature, so the next save works.`,"diffViewer.saveBlocked":`The agent is running — stop it to save your edits.`,"diffViewer.unsavedBanner":`Unsaved edits. Stop the agent to save them.`,"diffViewer.closeConfirm.title":`Unsaved changes`,"diffViewer.closeConfirm.message":`This file has edits that were never saved. Closing the diff viewer discards them.`,"diffViewer.closeConfirm.discard":`Close without saving`,"diffViewer.criteriaRail":`Review checklist`,"diffViewer.criteriaRailShow":`Show the review checklist`,"diffViewer.criteriaRailHide":`Hide the review checklist`,"diffViewer.fileTreeShow":`Show the file tree`,"diffViewer.fileTreeHide":`Hide the file tree`,"diffViewer.closeConfirm.saveAndClose":`Save and close`,"diffViewer.agentRunning":`Agent runs — stop it to edit`,"diffViewer.fileDeleted":`File deleted`,"notification.agentFinished":`{name} — Agent finished`,"notification.agentQuestion":`{name} — Agent is asking a question`,"notification.awaitingReminder":`{name} - still waiting for you ({minutes} min)`,"notification.agentPermissionRequest":`{name} — Agent is requesting a permission`,"notification.autoLoopCompleted":`{name} — Auto-loop completed`,"notification.autoLoopWaitingForSlot":`{name} - Auto-loop is waiting for a free agent slot ({running}/{limit} running)`,"notification.autoLoopStalled":`{name} — Auto-loop stalled (no progress)`,"notification.autoLoopError":`{name} — Auto-loop stopped on error`,"notification.autoLoopAwaitingClarification":`{name} — Auto-loop paused, waiting for your clarification`,"notification.autoLoopPermissionOverridden":`{name} — Auto-loop promoted plan mode to bypass`,"notification.agentError":`{name} — Agent error`,"contextMenu.rename":`Rename`,"contextMenu.editDescription":`Edit description`,"contextMenu.copyPath":`Copy worktree path`,"contextMenu.copyWorkspaceId":`Copy workspace ID`,"contextMenu.openEditor":`Open in editor`,"contextMenu.openFileManager":`Open in file manager`,"contextMenu.unarchiveDisabledPurged":`Restore the worktree first using Restore worktree, or recreate it manually. Kōbō detects matching worktrees automatically.`,"workspaceList.unarchiveBlockedPurged":`Restore the worktree first using Restore worktree, or recreate it manually. Kōbō detects matching worktrees automatically.`,"contextMenu.purgeWorktree":`Free disk space (delete worktree)`,"contextMenu.purgeWorktreeTooltip":`Deletes the worktree from disk to reclaim space — chat / session history is preserved. Auto-archives the workspace.`,"contextMenu.purgeWorktreeDialogTitle":`Free disk space?`,"contextMenu.purgeWorktreeDialogMessage":`The worktree folder for «{name}» will be deleted from disk. Chat and session history are kept. The workspace is auto-archived. This cannot be undone in the current version.`,"contextMenu.purgeWorktreeDialogConfirm":`Delete the worktree`,"contextMenu.purgeWorktreeSuccess":`Worktree deleted — disk space reclaimed.`,"settings.autoPurgeOnPrMerged":`Auto-purge worktree on PR merged`,"settings.autoPurgeOnPrMergedHint":`When ON, the worktree is deleted from disk as soon as the PR is merged (in addition to the auto-archive). Chat history is kept.`,"settings.showProgressBars":`Show progress bars`,"settings.showProgressBarsHint":`Enabled by default. Hiding bars does not dismiss activities or stop their tracking. Changes apply as soon as you save.`,"tours.settings.progressBars.title":`Progress bars`,"tours.settings.progressBars.description":`Show or hide the bars above the message input. Tracking continues while they are hidden.`,"settings.agentWatchdogEnabled":`Enable agent inactivity watchdogs`,"settings.agentWatchdogHint":`Off by default. When enabled, Kōbō can stop Claude or Codex after prolonged silence, including tools, subagents and compaction. Applies on the next agent start or resume.`,"tours.settings.agentWatchdog.title":`Agent inactivity watchdogs`,"tours.settings.agentWatchdog.description":`Leave this off to let long tasks wait silently. Enable it to automatically close stalled sessions. Changes apply on the next agent start or resume.`,"settings.autoLoopMaxRetries":`Maximum automatic retries`,"settings.awaitingUserReminder":`Unanswered question reminder`,"settings.awaitingUserReminderHint":`Minutes a workspace may wait for your answer before Kōbō reminds you, then again at each further interval. 0 disables it.`,"settings.localeLoadFailed":`Could not load that language; staying in the current one.`,"settings.autoLoopMaxRetriesHint":`Pauses the mission after this many temporary engine or server failures. Quotas wait for their reset and do not consume this limit.`,"settings.retentionTitle":`Conversation history retention (off by default)`,"settings.retentionWarning":`Turning this on permanently deletes agent conversation history from the database, starting with everything already older than the window. Deleted events cannot be recovered.`,"settings.retentionHint":`Runs once at server start-up. Workspaces, tasks, sessions, branches and worktrees are never touched — only the recorded agent output.`,"settings.retentionDaysLabel":`Delete events older than (days)`,"settings.retentionDaysHint":`0 — the default — keeps every event for ever. Set a value to enable retention.`,"settings.retentionKeepLabel":`Events always kept per workspace`,"settings.retentionKeepHint":`The most recent events of each workspace survive whatever their age, so an old but still-open workspace keeps a readable history. Suggested: 5000.`,"settings.retentionDisabledHint":`Retention is disabled: nothing will ever be deleted.`,"settings.retentionConfirmTitle":`Permanently delete conversation history?`,"settings.retentionConfirmMessage":`Keeping only {days} day(s) of history will permanently delete {count} of the {total} recorded agent events at the next server start-up, including everything already older than that. This cannot be undone. Continue?`,"settings.retentionConfirmMessageUnknown":`Keeping only {days} day(s) of history will permanently delete every older agent event at the next server start-up, including everything already accumulated. The exact volume could not be counted. This cannot be undone. Continue?`,"settings.purgeDocsTitle":`How purge works — restore & permissions`,"settings.purgeDocsRestoreTitle":`Restoring a purged worktree (auto-detected)`,"settings.purgeDocsRestoreIntro":`A purged workspace keeps its chat history and PR metadata but the worktree folder is gone. Rebuild it manually with one of these commands — Kōbō detects the folder reappearing within 30 seconds and automatically reactivates the workspace (unarchive + clear purge flag):`,"settings.purgeDocsRestoreCommands":`# GitHub (using gh CLI):
15
15
  gh pr checkout [pr-number] --recurse-submodules
16
16
 
17
17
  # Or directly via git (works on GitHub even after branch deletion):
18
18
  git fetch origin pull/[pr-number]/head:[branch-name]
19
19
  git worktree add [path] [branch-name]`,"settings.purgeDocsRestoreFootnote":`GitHub keeps the PR head ref accessible long after the source branch is deleted (months / years). Auto-detection runs in the 30s watcher — no UI action needed once the folder is back.`,"settings.purgeDocsPermissionsTitle":`Avoiding permission errors during purge`,"settings.purgeDocsPermissionsIntro":`Docker often leaves root-owned files in node_modules / vendor inside the worktree. When Kōbō tries to remove them, you hit EACCES / EPERM and the purge fails. Two ways to prevent it:`,"settings.purgeDocsPermissionsDocker":'Configure your container to run as your host user — USER directive in the Dockerfile, or `user: "${UID}:${GID}"` in docker-compose (with UID/GID exported in your shell).',"settings.purgeDocsPermissionsAcl":`Pre-seed the worktrees root with a default ACL — safety net that works in MOST cases (ext4/btrfs/xfs + standard Docker bind mount). Each new file then inherits an access entry for your user, on top of the nominal owner:`,"settings.purgeDocsPermissionsAclCommand":` setfacl -d -m u:$(whoami):rwX [worktrees-root]`,"settings.purgeDocsPermissionsFootnote":"ACL limitations: do NOT work on named Docker volumes (use a bind mount), filesystems without ACL support (NTFS, exFAT, tmpfs), strict SELinux with `:Z`, or when Docker `userns-remap` is enabled. The most reliable solution remains configuring the user inside the container (option 1). Tip: `rwX` (capital X) only adds the executable bit on directories and already-executable files — cleaner than `rwx` which would make every text file executable.","settings.purgeDocsPermissionsRecoverTitle":`Unblock an already-broken worktree (existing root-owned files)`,"settings.purgeDocsPermissionsRecoverIntro":`If you end up with a worktree already full of root-owned files (Docker has run, vendor / node_modules are stuck), the preventive ACL above is not enough — you need to fix EXISTING files. Two approaches, both run from inside the worktree folder:`,"settings.purgeDocsPermissionsRecoverAclIntro":`Option A — Recursive ACL (preserves root ownership for audit, just adds access for your user alongside):`,"settings.purgeDocsPermissionsRecoverAclCommand":`# set default ACL for future files AND grant access to everything existing
20
- sudo setfacl -Rd -m u:$(whoami):rwX . && sudo setfacl -R -m u:$(whoami):rwX .`,"settings.purgeDocsPermissionsRecoverChownIntro":`Option B — Take ownership (simpler, loses the "created by root in container" trace but rarely matters):`,"settings.purgeDocsPermissionsRecoverChownCommand":` sudo chown -R $(whoami):$(whoami) .`,"settings.purgeDocsPermissionsRecoverFootnote":"Tip: you can run these commands directly on the worktrees root (e.g. `~/.worktrees/`) to cover all existing AND future workspaces at once. Once done, Kōbō purge will work without permission errors.","contextMenu.runSetup":`Run setup script`,"contextMenu.exportEvents":`Export events (CSV)`,"contextMenu.dismissChangesRequested":`Mark 'Changes requested' as seen`,"contextMenu.dismissCiFailure":`Mark 'CI failure' as seen`,"contextMenu.restoreChangesRequested":`Mark 'Changes requested' as unseen`,"contextMenu.restoreCiFailure":`Mark 'CI failure' as unseen`,"contextMenu.exportingEvents":`Preparing export…`,"contextMenu.exportEventsError":`Event export failed`,"contextMenu.openNotion":`Open in Notion`,"contextMenu.openSentry":`Open in Sentry`,"contextMenu.openPr":`Open PR`,"contextMenu.ignorePrWatch":`Ignore PR checks`,"contextMenu.resumePrWatch":`Resume PR checks`,"contextMenu.prWatchToggleFailed":`Failed to update PR checks setting`,"workspace.favorite":`Mark as favorite`,"workspace.unfavorite":`Remove from favorites`,"workspace.showFavoritesOnly":`Show favorites only`,"workspace.tagFilter":`Filter by tags`,"workspace.tagFilterActive":`Filter by tags ({count} selected)`,"workspace.tagFilterClear":`Clear`,"workspace.tagFilterEmpty":`No tags yet. Define them in Settings, then assign them from a workspace menu.`,"workspace.searchArchivedToggle":`Also search archived workspaces`,"workspace.descriptionPlaceholder":`Add a short description`,"workspace.descriptionDialogHint":`Plain text, 200 characters max. Leave empty to clear.`,"workspace.descriptionTooLong":`Description must be 200 characters or fewer.`,"workspace.descriptionSaveFailed":`Failed to save description.`,"workspace.agentDescriptionTooltip":`Live status maintained by the agent`,"mcp.tool.setWorkspaceDescription":`Set the workspace short description (≤ 200 chars).`,"tags.manage":`Manage tags`,"tags.manageTitle":`Manage workspace tags`,"tags.noTagsDefined":`No tags defined. Add some in Settings > Global > Tags.`,"tags.orphanedHint":`{count} tag(s) are no longer in the global catalog. Uncheck to remove them.`,"settings.tagsTitle":`Workspace tags`,"settings.tagsHint":`Define the tags you can assign to workspaces. Type to add, click the cross to remove.`,"settings.tagsLabel":`Available tags`,"settings.branchPrefixesTitle":`Branch prefixes`,"settings.branchPrefixesHint":`Manage the git branch prefixes available on the workspace creation page. The first one is pre-selected by default.`,"settings.branchPrefixesEmpty":`No branch prefix defined. Add at least one below.`,"settings.branchPrefixesAddLabel":`New prefix`,"settings.branchPrefixesEditHint":`Click to rename`,"settings.branchPrefixesMoveUp":`Move up`,"settings.branchPrefixesMoveDown":`Move down`,"settings.worktreesTitle":`Git worktrees`,"settings.worktreesHint":`Choose where new workspace worktrees are created. Relative paths are project-relative; Linux/macOS and Windows absolute paths, $HOME, ~, and %USERPROFILE% are supported.`,"settings.worktreesPathLabel":`Worktrees path`,"settings.worktreesPathRequired":`Worktrees path is required.`,"settings.worktreesPrefixByProject":`Prefix worktrees by project name`,"settings.worktreesPrefixByProjectHint":`Place each worktree under a sub-directory named after the project, to avoid collisions when multiple projects share the same worktrees root.`,"settings.shareTitle":`Share configuration`,"settings.shareHint":`Export your settings, templates and tags as a JSON bundle. MCP API keys are stripped from exports for security.`,"settings.exportConfig":`Export`,"settings.importConfig":`Import`,"settings.exportSuccess":`Configuration exported`,"settings.importSuccess":`Configuration imported`,"settings.importConfirmTitle":`Import configuration`,"settings.importConfirmMessage":`This will replace your current settings, templates and tags. Your MCP keys are preserved. Continue?`,"settings.mcp.title":`External LLM connections (MCP)`,"settings.mcp.hint":`Connect an MCP client to create, archive, purge, delete or restore workspaces, resume a PR and talk to your agents.`,"settings.mcp.remoteDisabled":`Remote connections require network access and a server restart after enabling it.`,"settings.mcp.clientName":`Client name (optional)`,"settings.mcp.connection":`Connection`,"settings.mcp.local":`Local HTTP`,"settings.mcp.remote":`Remote HTTP`,"settings.mcp.proxy":`Reverse proxy`,"settings.mcp.stdio":`Local stdio`,"settings.mcp.copyUrl":`Copy URL`,"settings.mcp.copyConfig":`Copy configuration`,"settings.mcp.copyWithToken":`Copy with token`,"settings.mcp.genericFormat":`These examples use a generic mcpServers format. Adapt the container format to your MCP client. Token placeholders are kept in previews.`,"settings.mcp.tokenUnavailable":`No token is available. Enable network access before copying authenticated configuration.`,"settings.mcp.stdioUnavailable":`The stdio entrypoint is unavailable in this installation. Use HTTP or build Kōbō first.`,"settings.mcp.copyFailed":`Could not copy to the clipboard.`,"tours.settings.mcp.title":`Connect an external LLM`,"tours.settings.mcp.description":`Copy an HTTP or stdio configuration to connect an external assistant. It can create a workspace with the form options, resume a PR, manage archiving, deletion or restoration, and communicate with your agents.`,"settings.network.title":`Network access`,"settings.network.hint":`Control Kōbō from another device on your trusted LAN. Off = localhost only. On = reachable on your network, protected by a token. Restart Kōbō after toggling.`,"settings.network.enable":`Enable network access`,"settings.network.behindProxy":`Behind a reverse proxy`,"settings.network.behindProxyHint":`Kōbō can no longer tell your own machine apart from a proxied request — even localhost will need the token from now on. Enable this only if a reverse proxy (Traefik, nginx, Caddy…) sits in front of Kōbō.`,"settings.network.restartRequired":`Restart Kōbō to apply the new bind address.`,"settings.network.token":`Access token`,"settings.network.copy":`Copy`,"settings.network.copied":`Copied`,"settings.network.regenerate":`Regenerate`,"settings.network.regenerateConfirm":`Regenerate the token? Connected devices will need the new token.`,"settings.network.urls":`LAN URLs`,"settings.network.scan":`Scan to connect`,"settings.network.noUrls":`No LAN address detected.`,"settings.network.loadFailed":`Failed to load network access settings.`,"settings.network.updateFailed":`Failed to update network access settings.`,"settings.unsavedChanges.title":`Unsaved changes`,"settings.unsavedChanges.message":`This project has unsaved changes. Switching projects will discard them.`,"settings.unsavedChanges.discard":`Discard and switch`,"settings.unsavedChanges.cancel":`Cancel`,"settings.loadFailed":`Settings could not be loaded`,"settings.loadFailedHint":`Saving is disabled: the form is showing default values, and writing them would overwrite your real configuration.`,"health.title":`Health`,"health.tooltip":`System health`,"changelog.title":`Changelog`,"changelog.tooltip":`What's new in Kōbō`,"changelog.empty":`No changelog available.`,"changelog.current":`current`,"changelog.currentVersion":`Current version: v{version}`,"health.envTitle":`Environment`,"health.version":`Version`,"health.koboHome":`Kōbō home`,"health.dbTitle":`Database`,"health.dbPath":`Path`,"health.dbSize":`Size`,"health.schemaVersion":`Schema version`,"health.settingsSchemaVersion":`Settings schema`,"health.runtimesTitle":`Agent runtimes`,"health.claudeCliTitle":`Claude Code`,"health.claudeCliMissing":`claude not on PATH`,"health.codexCliTitle":`OpenAI Codex`,"health.codexCliMissing":`codex binary not resolvable`,"health.forgeCliTitle":`Forge CLI (gh / glab)`,"health.forgeCliMissing":`Neither gh nor glab found — pull requests and CI watching are unavailable`,"health.workspacesTitle":`Workspaces`,"health.workspacesCount":`{total} total, {archived} archived`,"health.worktreesMissing":`{count} worktree(s) missing on disk`,"health.sessionsTitle":`Agent sessions`,"health.sessionsOrphaned":`{n} orphaned running session(s)`,"health.integrationsTitle":`Integrations`,"health.integrationConfigured":`configured`,"health.integrationMissing":`not configured`,"health.integrationDisabled":`disabled`,"settings.integrationEnabled":`Enable integration`,"health.activeTitle":`Active state`,"health.activeQuotaBackoffs":`Pending quota backoffs`,"health.activeWakeups":`Scheduled wakeups`,"health.activeAutoLoop":`Auto-loop running`,"health.activeAgentSessions":`Live agent sessions`,"health.activeDevServers":`Running dev servers`,"health.noneActive":`None.`,"health.quotaResumeAt":`resumes at {time}`,"health.wakeupAt":`wakes at {time}`,"health.startedAgo":`started {time} ago`,"health.autoLoopReady":`ready, iterating`,"health.autoLoopGrooming":`grooming in progress`,"session.started":`Session started`,"session.ended":`Session ended`,"session.compacted":`Context compacted`,"session.endedCompleted":`Turn finished — send a message to continue`,"session.endedKilled":`Session stopped`,"session.endedError":`Session ended on an error`,"session.endedWatchdog":`Session force-closed after a period of inactivity`,"tool.running":`Running...`,"activity.raw_lines":`Raw output lines ({n})`,"api.timeout":`The request timed out after {seconds} seconds.`,"api.mutationTimeout":`The request timed out after {seconds} seconds. The operation may still be running. Refresh its status before trying again.`,"activity.sessionsError":`Could not load sessions: {message}`,"activity.historyError":`Could not load conversation history: {message}`,"activity.loading_older":`Loading older messages…`,"activity.compacting":`Compacting context…`,"activity.prev_user_message":`Previous user message`,"activity.scroll_to_bottom":`Scroll to bottom`,"activity.empty":`Nothing yet`,"activity.emptyHint":`The agent output will show up here as soon as a session starts.`,"activity.a11y.region":`Agent activity announcements`,"activity.a11y.agentSaid":`Agent: {text}`,"activity.a11y.toolStarted":`Tool {name} started`,"activity.a11y.toolFinished":`Tool {name} finished`,"activity.a11y.toolFailed":`Tool {name} failed`,"chat.systemPrompt":`Kōbō instructions`,"chat.agent":`Agent`,"chat.cleanupScript":`Cleanup script`,"chat.archiveScript":`Archive script`,"chat.setupScript":`Setup script`,"chat.hookScript":`Hook {event}`,"chat.scriptDone":`Done`,"chat.scriptComplete":`[{phase}] Complete`,"chat.scriptError":`[{phase}] Error: {message}`,"chat.unknownError":`unknown`,"chat.you":`You`,"chat.session":`Session`,"chat.nActions":`{n} action | {n} actions`,"chat.lastUpdatedAt":`Last updated at {time}`,"chat.scrollToTurnTop":`Scroll to top of this message`,"migration.backing_up":`Backing up the database…`,"migration.running":`Migrating agent data — {processed}/{total}`,"migration.error":`Migration failed`,"migration.backup_location":`A backup was saved at {path}. Restart Kōbō to retry.`,"migration.retry":`Restart Kōbō to retry.`,"engine.select":`Engine`,"engine.model":`Model`,"engine.effort":`Reasoning effort`,"wakeup.scheduledIn":`Next wakeup in {n}s`,"wakeup.scheduledAt":`Next wakeup at {time}`,"wakeup.firing":`Waking up...`,"wakeup.reason":`Reason: {reason}`,"wakeup.cancel":`Cancel this wakeup`,"wakeup.pendingIndicator":`Wakeup scheduled`,"cron.pendingIndicator":`{n} cron(s) scheduled`,"schedule.tabLabel":`Schedule`,"schedule.admissionTitle":`New automatic session currently unavailable.`,"schedule.admissionHint":`Deadlines are unchanged. Delivery into an existing conversation follows its own rules.`,"schedule.admission.not-found":`Workspace not found.`,"schedule.admission.archived":`Workspace archived.`,"schedule.admission.purged":`Restore the worktree first.`,"schedule.admission.shutdown":`Server is shutting down.`,"schedule.admission.lifecycle":`A workspace operation is in progress.`,"schedule.admission.active-session":`The current session has not closed yet.`,"schedule.admission.awaiting-user":`A user answer is required.`,"schedule.admission.compacting":`Context compaction is in progress.`,"schedule.admission.quota":`Waiting for quota recovery.`,"schedule.admission.blocked":`Auto-loop is blocked; resolve its reported cause.`,"schedule.admission.capacity":`Concurrency limit reached: {running}/{limit} sessions.`,"schedule.panelTitle":`Automation`,"schedule.panelDescription":`Wake this workspace later or run instructions on a schedule.`,"schedule.activeTitle":`Active schedules`,"schedule.emptyTitle":`Nothing scheduled`,"schedule.emptyDescription":`Create a wakeup or recurring task below.`,"schedule.cancelWakeup":`Cancel this wakeup`,"schedule.cancelCron":`Delete this recurring task`,"schedule.createTitle":`Create a schedule`,"schedule.createDescription":`Choose when and how the agent should run.`,"schedule.typeWakeup":`One-time wakeup`,"schedule.typeRecurring":`Recurring task`,"schedule.wakeupDescription":`Run the prompt once after a delay.`,"schedule.cronDescription":`Run the prompt repeatedly on a fixed schedule.`,"schedule.promptHint":`Instructions that will be sent to the agent`,"schedule.frequencyTitle":`Frequency`,"schedule.advancedDescription":`Use a raw cron expression`,"schedule.cronExpressionLabel":`Cron expression`,"schedule.sessionModeTitle":`Execution session`,"schedule.modeResume":`Resume session`,"schedule.oneShotHint":`Remove this schedule after its first run.`,"schedule.wakeupTitle":`Wakeup pending`,"schedule.cronsTitle":`Recurring schedules`,"schedule.noWakeup":`No wakeup scheduled`,"schedule.noCrons":`No cron scheduled`,"schedule.invalidCron":`Inactive: invalid expression. Remove and recreate this schedule.`,"schedule.nextFireAt":`next at {time}`,"schedule.lastFiredAt":`last fired {time} ago`,"schedule.addCronTitle":`Add a recurring task`,"schedule.addWakeupTitle":`Schedule a wakeup`,"schedule.every":`Every`,"schedule.unitMinutes":`minutes`,"schedule.unitHours":`hours`,"schedule.unitDays":`days`,"schedule.daysDriftWarning":`The interval may shrink to 1 day at the end of the month (cron limitation).`,"schedule.advancedExpression":`Advanced expression (optional)`,"schedule.advancedHint":`Raw cron (e.g. */15 * * * *) or {'@'}hourly/{'@'}daily — overrides the picker when set.`,"schedule.promptLabel":`Prompt`,"schedule.labelOptional":`Label (optional)`,"schedule.delayMinutes":`Delay (minutes)`,"schedule.modeFresh":`New session`,"schedule.oneShot":`Run only once`,"schedule.addCronBtn":`Add cron`,"schedule.addWakeupBtn":`Schedule wakeup`,"schedule.cronCreated":`Recurring task added`,"schedule.wakeupCreated":`Wakeup scheduled`,"askUserQuestion.title":`The agent is asking a question`,"askUserQuestion.submit":`Submit answer`,"askUserQuestion.multiSelectHint":`Select one or more options`,"askUserQuestion.otherOption":`Other`,"askUserQuestion.otherOptionHint":`specify in your next chat message`,"askUserQuestion.freeFormLabel":`Specify your answer`,"askUserQuestion.freeFormHint":`This answer will be sent directly to the agent.`,"askUserQuestion.noPending":`No pending question`,"askUserQuestion.next":`Next`,"askUserQuestion.previous":`Previous`,"askUserQuestion.cancel":`Cancel`,"askUserQuestion.cancelTooltip":`Skip this question — the agent will proceed without an answer`,"askUserQuestion.collapse":`Collapse the question panel`,"askUserQuestion.expand":`Expand the question panel`,"permissionRequest.title":`The agent wants to use a tool`,"permissionRequest.allow":`Allow`,"permissionRequest.allowOnce":`Allow once`,"permissionRequest.allowTurn":`Allow this turn`,"permissionRequest.operationUnavailable":`Operation details unavailable; approve once or the entire tool.`,"permissionRequest.allowOperation":`Always this operation`,"permissionRequest.allowTool":`Always this tool`,"permissionRequest.deny":`Deny`,"permissionRequest.tool":`Tool`,"permissionRequest.input":`Input`,"permissionRequest.rawInput":`Technical details`,"permissionRequest.collapse":`Collapse the permission panel`,"permissionRequest.expand":`Expand the permission panel`,"permissionRequest.denied":`denied by user`,"workspaceStatus.created":`created`,"workspaceStatus.extracting":`extracting`,"workspaceStatus.brainstorming":`brainstorming`,"workspaceStatus.compacting":`compacting`,"chatInput.compactingBanner":`Context compaction in progress. Sending will be available when it finishes.`,"workspaceStatus.executing":`running`,"workspaceStatus.awaitingUser":`awaiting your answer`,"workspaceStatus.completed":`completed`,"workspaceStatus.idle":`idle`,"workspaceStatus.error":`error`,"workspaceStatus.quota":`quota reached`,"workspaceStatus.retrying":`auto-resuming`,"workspaceList.prOpen":`#{n} — Pull request open`,"workspaceList.prWatchDisabledIndicator":`PR checks ignored for this workspace`,"workspaceList.prChangesRequested":`#{n} — Changes requested`,"workspaceList.attentionCiFailed":`CI failed`,"workspaceList.attentionChangesRequested":`Changes requested`,"workspaceList.attentionReadyToMerge":`Ready to merge`,"autoLoop.status.active":`Active`,"autoLoop.status.waiting":`Waiting`,"autoLoop.status.blocked":`Blocked`,"autoLoop.status.completed":`Completed`,"autoLoop.status.stopped":`Stopped`,"autoLoop.phase.grooming":`Preparation`,"autoLoop.phase.execution":`Execution`,"autoLoop.phase.finalization":`Finalization`,"autoLoop.iteration":`Iteration {count}`,"autoLoop.resume":`Resume auto-loop`,"autoLoop.retryAt":`Retry scheduled for`,"autoLoop.actionFailed":`The action could not be completed.`,"autoLoop.messages.count":`{count} queued instruction(s)`,"autoLoop.messages.pending":`Queued`,"autoLoop.messages.dispatching":`Sending`,"autoLoop.messages.unknown":`Delivery unknown`,"autoLoop.messages.delivered":`Delivered`,"autoLoop.messages.cancel":`Cancel instruction`,"autoLoop.messages.acknowledge":`Mark as received`,"autoLoop.messages.retry":`Send again`,"autoLoop.messages.unknownHelp":`Delivery could not be confirmed. Check the conversation before deciding. Sending again may duplicate an instruction already received.`,"autoLoop.reason.quota":`Waiting for provider quota.`,"autoLoop.reason.transient":`Recovering after a temporary interruption.`,"autoLoop.reason.awaiting-user":`Waiting for your answer.`,"autoLoop.reason.capacity-or-lifecycle":`Waiting for an available agent slot.`,"autoLoop.reason.message-delivery-unknown":`Resolve the instruction with unknown delivery before resuming.`,"autoLoop.reason.error":`The loop needs attention before it can continue.`,"autoLoop.reason.stall":`No progress detected. Review the last session before resuming.`,"autoLoop.reason.awaiting-clarification":`A clarification is needed before continuing.`,"autoLoop.toggle":`Auto-loop`,"autoLoop.start":`Start auto-loop`,"autoLoop.prepare":`Prepare for auto-loop`,"autoLoop.reprepare":`Re-prepare for auto-loop`,"autoLoop.reprepareTooltip":`Re-run the grooming pass to add or refresh tasks before resuming the loop`,"autoLoop.prepareBusy":`Wait for the agent to finish before preparing`,"autoLoop.forceReady":`I know what I'm doing — skip grooming`,"autoLoop.forceReadyConfirm":`Skip grooming and mark auto-loop ready? This may cause the loop to stall if tasks aren't atomic.`,"autoLoop.stop":`Stop auto-loop`,"autoLoop.notReady":`Run 'Prepare for auto-loop' first`,"autoLoop.noTasks":`Add tasks first`,"autoLoop.progress":`Auto-loop · {done}/{total} tasks`,"autoLoop.preparing":`Auto-loop · preparing`,"autoLoop.preparingTooltip":`Grooming in progress — the agent is creating / reviewing tasks. The loop will start running once it calls mark_auto_loop_ready.`,"autoLoop.running":`Auto-loop running`,"autoLoop.startInMode":`Start in auto-loop mode`,"autoLoop.brainstormModelPrefix":`Brainstorm:`,"autoLoop.brainstormModelTooltip":`Model used only for the initial brainstorming session — every task after that uses the model picked above`,"autoLoop.brainstormReasoningPrefix":`Brainstorm:`,"autoLoop.brainstormReasoningTooltip":`Reasoning level used only for the initial brainstorming session`,"autoLoop.executionModelPrefix":`Loop:`,"autoLoop.executionModelTooltip":`Model used for every auto-loop task after the initial brainstorming session`,"autoLoop.sessionMode.perTask":`New session per task`,"autoLoop.sessionMode.label":`Session:`,"autoLoop.sessionMode.perTaskTooltip":`Each task starts a fresh Claude Code session with no memory of prior tasks`,"autoLoop.sessionMode.continuous":`Continuous session`,"autoLoop.sessionMode.continuousTooltip":`All tasks run in the same session — the agent keeps full context, but the session grows longer over time`,"koboCommand.prepAutoloopDesc":`Prepare tasks for auto-loop mode (groom for atomicity)`,"staleSessionBanner.title":`Auto-loop running`,"staleSessionBanner.message":`You're viewing an older session — the agent is currently working in the latest one.`,"staleSessionBanner.staleTitle":`Older session`,"staleSessionBanner.staleMessage":`You're viewing an older session — messages you send go to this session, not the latest one.`,"staleSessionBanner.switchToCurrent":`Switch to current`,"network.login.title":`Network access`,"network.login.description":`This Kōbō requires a token to be controlled from the network. Paste the token shown in Settings on the host machine.`,"network.login.tokenLabel":`Token`,"network.login.tokenPlaceholder":`Paste your token`,"network.login.connect":`Connect`,"network.login.invalid":`Invalid token`,"network.login.serverError":`Server error — try again.`,"network.login.unreachable":`Kōbō is unreachable — check your connection.`,"layout.toggleWorkspaces":`Toggle workspaces panel`,"layout.togglePanel":`Toggle side panel`,"unsaved.title":`Leave without saving?`,"unsaved.message":`You have unsaved changes. Leaving this page discards them.`,"unsaved.leave":`Leave`,"unsaved.stay":`Stay`,"prCheckout.staleRetriesExhausted":`The repository state kept changing while we tried to apply your choices. Close this dialog and try again from the pull request picker.`,"prPicker.title":`Import from a pull request`,"prPicker.filterAll":`All`,"prPicker.filterMine":`Mine`,"prPicker.filterReviewRequested":`Review requested`,"prPicker.searchPlaceholder":`Search pull requests…`,"prPicker.loadMore":`Load more`,"prPicker.empty":`No open pull request matches.`,"prPicker.forkNotSupported":`This PR comes from a fork; Kōbō cannot check it out.`,"prPicker.loadFailed":`Failed to load pull requests.`,"prPicker.badge.workspaceExists":`Already open in Kōbō`,"prPicker.badge.worktreePresent":`Worktree present`,"prPicker.badge.localBranch":`Local branch`,"prPicker.badge.new":`New`,"prPicker.badge.draft":`Draft`,"prCheckout.title":`Prepare the worktree`,"prCheckout.apply":`Apply`,"prCheckout.cancel":`Cancel`,"prCheckout.retry":`Retry`,"prCheckout.diagnoseFailed":`Failed to diagnose the pull request.`,"prCheckout.resolveFailed":`Failed to resolve the pull request checkout.`,"prCheckout.path.required":`Enter a worktree path that does not already exist.`,"prCheckout.workspace.restoreNotAvailable":"Restoring a purged workspace isn't available yet from here. Recreate its worktree folder on disk (e.g. `git worktree add`) and Kōbō will reattach it automatically within about 30 seconds.","prCheckout.staleReloaded":`The repository changed; the diagnosis has been refreshed.`,"prCheckout.step.blocked":`Cannot continue`,"prCheckout.step.path":`Worktree location`,"prCheckout.step.workspace":`Existing workspace`,"prCheckout.step.worktree":`Existing worktree`,"prCheckout.step.operation":`Git operation in progress`,"prCheckout.step.changes":`Uncommitted changes`,"prCheckout.step.divergence":`Local branch vs origin`,"prCheckout.workspace.activeHint":`A workspace named "{name}" already tracks this branch.`,"prCheckout.workspace.open":`Open that workspace`,"prCheckout.workspace.continue":`Continue on another path`,"prCheckout.workspace.unarchive":`Unarchive and open it`,"prCheckout.workspace.restore":`Recreate its worktree`,"prCheckout.worktree.orphanHint":`A worktree already sits on this branch at {path}.`,"prCheckout.worktree.attach":`Attach it`,"prCheckout.worktree.branchInUse":`This branch is already checked out. Attach its existing worktree.`,"prCheckout.worktree.createElsewhere":`Create another one elsewhere`,"prCheckout.operation.hint":`A {operation} is in progress in that worktree.`,"prCheckout.operation.abort":`Abort it`,"prCheckout.operation.cancel":`Leave it alone and stop here`,"prCheckout.changes.hint":`{modified} modified, {staged} staged, {untracked} untracked.`,"prCheckout.changes.stash":`Stash them`,"prCheckout.changes.commit":`Commit them`,"prCheckout.changes.discard":`Discard them (kept as a labelled stash)`,"prCheckout.changes.keepResetConflict":`Keeping local changes is incompatible with a hard reset. Stash or commit them first, or keep the branch.`,"prCheckout.changes.keep":`Keep them as they are`,"prCheckout.divergence.behindHint":`Your branch is {behind} commit(s) behind origin.`,"prCheckout.divergence.aheadHint":`Your branch has {ahead} unpushed commit(s).`,"prCheckout.divergence.divergedHint":`{ahead} ahead, {behind} behind origin.`,"prCheckout.divergence.notFastForward":`Fast-forward is unavailable: the branch contains local commits.`,"prCheckout.divergence.fastForward":`Fast-forward to origin`,"prCheckout.divergence.rebase":`Rebase onto origin`,"prCheckout.divergence.resetHard":`Reset to origin (a backup branch is created first)`,"prCheckout.divergence.keep":`Keep the local state`,"prCheckout.blocked.forgeUnavailable":`The forge CLI is missing or not authenticated.`,"prCheckout.blocked.forkPr":`This PR comes from a fork; Kōbō cannot check it out.`,"prCheckout.blocked.headBranchDeleted":`The branch no longer exists on the remote.`,"prCheckout.blocked.indexLock":`Another git process is running (index.lock is present).`,"prCheckout.blocked.pathOccupied":`{path} already exists and is not a worktree.`,"prCheckout.blocked.worktreeOtherBranch":`{path} is a worktree on another branch ({branch}).`,"prCheckout.blocked.noCommonAncestor":`A local branch named {branch} exists with unrelated history.`,"split.title":`Double workspace`,"split.open":`Open side by side`,"split.openBeside":`Open beside`,"split.close":`Close split view`,"split.left":`Left workspace`,"split.right":`Right workspace`,"split.choose":`Choose a workspace`,"split.recipient":`Send to: {name}`,"absence.title":`Since your last visit`,"settings.activityDigestHint":`Show a summary of events that occurred while you were away. Turning this off hides the entry and stops collecting new events without deleting existing history.`,"absence.pending":`Changes to review`,"absence.retention":`Significant activity from the last 30 days, recorded since this feature was installed. Visit tracking is local to this browser.`,"absence.since":`Since {date}`,"absence.error":`Unable to load activity.`,"absence.retry":`Retry`,"absence.empty":`No new activity.`,"absence.more":`Load more`,"absence.markRead":`Mark displayed events as read`,"absence.kind.question":`Question asked`,"absence.kind.permission":`Approval requested`,"absence.kind.completed":`Session completed`,"absence.kind.error":`Agent error`,"absence.kind.pr-merged":`PR merged`,"absence.kind.pr-approved":`PR approved`,"absence.kind.pr-changes-requested":`Changes requested`,"absence.kind.pr-ci-failed":`CI failed`,"absence.kind.pr-ci-recovered":`CI recovered`,"absence.kind.pr-merge-conflict":`Merge conflict`,"absence.kind.pr-ready-to-merge":`PR ready to merge`,"absence.kind.archived":`Workspace archived`,"absence.kind.purged":`Worktree purged`,"absence.kind.restored":`Worktree restored`,"tours.split.controls.title":`Two independent workspaces`,"tours.split.controls.description":`Choose one workspace per pane. Resize the divider; each conversation keeps its own recipient and panels.`,"tours.home.sort.title":`Sort workspaces`,"tours.home.sort.description":`Choose the order and direction within each group. Your choice is remembered.`,"tours.home.activity.title":`Review activity after an absence`,"tours.home.activity.description":`At the bottom of the left drawer, find questions, session endings, errors and PR changes since your last visit.`,"progress.title":`Activities`,"progress.status.running":`Running`,"progress.status.succeeded":`Succeeded`,"progress.status.failed":`Failed`,"progress.status.interrupted":`Reporting interrupted`,"progress.dismiss":`Hide {label}`,"progress.dismissHint":`Hide this activity without stopping its work`,"progress.others":`See others ({count})`,"progress.collapse":`Show less`,"progress.loadError":`Could not load activities.`,"progress.dismissError":`Could not hide this activity. Try its close button again.`,"progress.retry":`Retry`,"tours.workspace.progress.title":`Activity progress`,"tours.workspace.progress.description":`Agents and their delegates report long-running work above the message field. Three activities are shown initially; expand to see the others. Values are agent-reported, not verification. Success disappears after five seconds; failures stay visible. Closing hides only that activity without cancelling work.`},Ns=`modulepreload`,Ps=function(e){return`/`+e},Fs={},Is=function(e){return e.pathname.endsWith(`.css`)},Ls=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=Ps(t,n);let r=s(t);if(r.href in Fs)return;Fs[r.href]=!0;let i=Is(r);if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let o=document.createElement(`link`);if(o.rel=i?`stylesheet`:Ns,i||(o.as=`script`),o.crossOrigin=``,o.href=r.href,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),i)return new Promise((e,t)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${r}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Rs=`kobo:locale`,zs=[`en`,`fr`,`de`,`es`,`it`];function Bs(e){return zs.includes(e)}function Vs(){let e=localStorage.getItem(Rs);if(e&&Bs(e))return e;let t=navigator.language.split(`-`)[0];return t&&Bs(t)?(localStorage.setItem(Rs,t),t):(localStorage.setItem(Rs,`en`),`en`)}var Hs=Vs(),Us=ys({legacy:!1,locale:Hs,fallbackLocale:`en`,messages:{en:Ms}}),Ws=new Set([`en`]),Gs={fr:()=>Ls(()=>import(`./fr-BH7V66Yz.js`),[]),de:()=>Ls(()=>import(`./de-BaO6kbdO.js`),[]),es:()=>Ls(()=>import(`./es-DTvSsbD0.js`),[]),it:()=>Ls(()=>import(`./it-DZGbkkoy.js`),[])},Ks=0;async function qs(e){let t=++Ks;if(!Ws.has(e)&&e!==`en`){let t=await Gs[e]();Us.global.setLocaleMessage(e,t.default),Ws.add(e)}t===Ks&&(Us.global.locale.value=e,Js(e))}function Js(e){typeof document<`u`&&(document.documentElement.lang=e)}Js(Hs);var Ys=class extends Error{constructor(e,t,n,r){super(e),st(this,`status`,void 0),st(this,`code`,void 0),st(this,`body`,void 0),this.name=`ApiError`,this.status=t,this.code=n,this.body=r}},Xs=class extends Error{constructor(e,t=!1){super(Us.global.t(t?`api.mutationTimeout`:`api.timeout`,{seconds:e/1e3})),st(this,`timeoutMs`,void 0),st(this,`executionMayContinue`,void 0),this.name=`ApiTimeoutError`,this.timeoutMs=e,this.executionMayContinue=t}},Zs=3e4;function Qs(e,t=`GET`){let n=e.split(`?`)[0]??e,r=t.toUpperCase();return n.startsWith(`/api/voice/`)&&n.endsWith(`/transcribe`)||n.endsWith(`/run-setup-script`)||n===`/api/workspaces`&&t===`POST`?33e4:n.startsWith(`/api/dev-server/`)&&n.endsWith(`/start`)||r===`POST`&&/^\/api\/workspaces\/[^/]+\/(archive|start-review|switch-engine)$/.test(n)||r===`DELETE`&&/^\/api\/workspaces\/[^/]+$/.test(n)||r===`POST`&&/^\/api\/dev-server\/[^/]+\/stop$/.test(n)||n.startsWith(`/api/git/`)||n.startsWith(`/api/pull-requests`)||/\/(push|force-push|pull|fetch|rebase|merge|git\/[^/]+|change-source-branch|change-pr-base|merge-pr|restore-worktree|purge-worktree|open-pr|rename-branch|resync-branch)$/.test(n)?18e4:/\/(attachments|sounds|events\.csv|diagnostic\.json)$/.test(n)?9e4:Zs}function $s(e,t){let n=e.trim();if(n.length===0)return{message:`HTTP ${t}`,code:void 0};try{let e=JSON.parse(n),r=typeof e.code==`string`?e.code:void 0;return typeof e.error==`string`&&e.error.length>0?{message:e.error,code:r}:typeof e.message==`string`&&e.message.length>0?{message:e.message,code:r}:{message:`HTTP ${t}`,code:r}}catch{return{message:n.slice(0,500),code:void 0}}}function ec(e,t,n=`GET`){if(t?.aborted)throw t.reason??new DOMException(`Aborted`,`AbortError`);let r=new AbortController,i=!1,a=null,o=()=>{r.abort(t?.reason),s()},s=()=>{a!==null&&clearTimeout(a),a=null,t?.removeEventListener(`abort`,o)};t?.addEventListener(`abort`,o,{once:!0}),e>0&&(a=setTimeout(()=>{i=!0,r.abort(),s()},e));let c=()=>i?new Xs(e,![`GET`,`HEAD`].includes(n.toUpperCase())):r.signal.reason??new DOMException(`Aborted`,`AbortError`);async function l(e){if(r.signal.aborted)throw c();let t=()=>{},n=new Promise((e,n)=>{t=()=>n(c()),r.signal.addEventListener(`abort`,t,{once:!0})});try{return await Promise.race([e(),n])}finally{r.signal.removeEventListener(`abort`,t)}}return{signal:r.signal,run:l,dispose:s}}function tc(e,t){let{body:n,timeoutMs:r,signal:i,statusOnlySuccess:a,headers:o,...s}=e,c={...s,signal:t};if(n!==void 0){if(typeof n==`string`||n instanceof FormData||n instanceof Blob||n instanceof URLSearchParams||n instanceof ArrayBuffer||ArrayBuffer.isView(n))c.body=n,o&&(c.headers=o);else{c.body=JSON.stringify(n);let e=new Headers(o);e.has(`Content-Type`)||e.set(`Content-Type`,`application/json`),c.headers=Object.fromEntries(e.entries())}}else o&&(c.headers=o);return c}async function q(e){let t=await e.text(),{message:n,code:r}=$s(t,e.status);return new Ys(n,e.status,r,t)}function nc(e){try{e.body?.cancel().catch(()=>{})}catch{}}async function J(e,t={}){let n=ec(t.timeoutMs??Qs(e,t.method),t.signal,t.method);try{let r=await n.run(()=>fetch(e,tc(t,n.signal)));t.statusOnlySuccess&&r.ok&&nc(r),(t.statusOnlySuccess&&r.ok||r.status===204||r.body===null||t.method===`HEAD`)&&n.dispose();let i=new Set([`json`,`text`,`blob`,`arrayBuffer`,`formData`,`bytes`]);return new Proxy(r,{get(e,t){let r=Reflect.get(e,t,e);return i.has(t)&&typeof r==`function`?async(...t)=>{try{return await n.run(()=>r.apply(e,t))}finally{n.dispose()}}:typeof r==`function`?r.bind(e):r}})}catch(e){throw n.dispose(),e}}function rc(e,t={}){return J(e,{...t,statusOnlySuccess:!0})}async function ic(e,t={}){let n=ec(t.timeoutMs??Qs(e,t.method),t.signal,t.method);try{let r=await n.run(()=>fetch(e,tc(t,n.signal)));return nc(r),{ok:r.ok,status:r.status}}finally{n.dispose()}}async function ac(e,t={}){let n=await J(e,t);if(!n.ok)throw await q(n);await n.text()}async function Y(e,t={}){let n=ec(t.timeoutMs??Qs(e,t.method),t.signal,t.method);try{return await n.run(async()=>{let r=await fetch(e,tc(t,n.signal));if(!r.ok)throw await q(r);if(r.status===204)return;let i=await r.text();if(i.length!==0)try{return JSON.parse(i)}catch(e){throw new Ys(`Server returned a non-JSON body for a successful response: ${e instanceof Error?e.message:String(e)}`,r.status,void 0,i)}})}finally{n.dispose()}}var oc=Cr(`migration`,()=>{let e=m({state:`idle`});async function t(){try{let t=await J(`/api/migration/status`);if(!t.ok)return;e.value=await t.json()}catch{}}function n(t){e.value={...t}}return{status:e,fetchInitial:t,update:n}}),sc={class:`text-h6`},cc={class:`text-h6`},lc={class:`text-h6 text-negative`},uc={class:`q-mt-sm`},dc={key:0,class:`q-mt-md text-caption`},fc={class:`q-mt-md text-caption`},pc=N({__name:`MigrationOverlay`,setup(e){let{t}=bs(),n=oc(),i=j(()=>[`backing-up`,`running`,`error`].includes(n.status.state));return S(()=>{n.fetchInitial()}),(e,a)=>(v(),k(Gn,{modelValue:i.value,"onUpdate:modelValue":a[0]||=e=>i.value=e,persistent:``,"no-backdrop-dismiss":``},{default:E(()=>[D(an,{style:{"min-width":`400px`}},{default:E(()=>[r(n).status.state===`backing-up`?(v(),k(en,{key:0},{default:E(()=>[ie(`div`,sc,f(r(t)(`migration.backing_up`)),1),D(Ue,{class:`q-mt-md`})]),_:1})):r(n).status.state===`running`?(v(),k(en,{key:1},{default:E(()=>[ie(`div`,cc,f(r(t)(`migration.running`,{processed:r(n).status.processed,total:r(n).status.total})),1),D(rn,{value:r(n).status.total>0?r(n).status.processed/r(n).status.total:0,class:`q-mt-md`},null,8,[`value`])]),_:1})):r(n).status.state===`error`?(v(),k(en,{key:2},{default:E(()=>[ie(`div`,lc,f(r(t)(`migration.error`)),1),ie(`div`,uc,f(r(n).status.errorMessage),1),r(n).status.backupPath?(v(),ne(`div`,dc,f(r(t)(`migration.backup_location`,{path:r(n).status.backupPath})),1)):A(``,!0),ie(`div`,fc,f(r(t)(`migration.retry`)),1)]),_:1})):A(``,!0)]),_:1})]),_:1},8,[`modelValue`]))}});function mc(e){if(e.codePointAt(0)!==111||e.codePointAt(1)!==110)return!1;let t=e.codePointAt(2);return t>=65&&t<=90}function hc(e,t){let n=Object.keys(e);if(n.length!==Object.keys(t).length)return!0;for(let r of n)if(e[r]!==t[r]||!(r in t))return!0;return!1}function gc(){let e=O(),{attrs:t}=e,n={listeners:m({}),attributes:m({})};function r(){let r={},i={};for(let e in t)e!==`class`&&e!==`style`&&!mc(e)&&(r[e]=t[e]);for(let t in e.vnode.props)mc(t)&&(i[t]=e.vnode.props[t]);hc(r,n.attributes.value)&&(n.attributes.value=r),hc(i,n.listeners.value)&&(n.listeners.value=i)}return y(r),r(),n}function _c({validate:e,resetValidation:t,requiresQForm:n}){let r=w(Ce,!1);if(r!==!1){let{props:n,proxy:i}=O();Object.assign(i,{validate:e,resetValidation:t}),_(()=>n.disable,e=>{e?(typeof t==`function`&&t(),r.unbindComponent(i)):r.bindComponent(i)}),S(()=>{n.disable||r.bindComponent(i)}),ee(()=>{n.disable||r.unbindComponent(i)})}else n&&console.error(`Parent QForm not found on useFormChild()!`)}var vc=/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,yc=/^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,bc=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,xc=/^rgb\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5])\)$/,Sc=/^rgba\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),(0(\.[\d]+)?|1(\.0+)?)\)$/,Cc=/^-?[\d]+\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$/,wc=/^([0-1]?\d|2[0-3]):[0-5]\d$/,Tc=/^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/,Ec=/^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/,Dc=/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,Oc={date:e=>Cc.test(e),time:e=>wc.test(e),fulltime:e=>Tc.test(e),timeOrFulltime:e=>Ec.test(e),email:e=>Dc.test(e),hexColor:e=>vc.test(e),hexaColor:e=>yc.test(e),hexOrHexaColor:e=>bc.test(e),rgbColor:e=>xc.test(e),rgbaColor:e=>Sc.test(e),rgbOrRgbaColor:e=>xc.test(e)||Sc.test(e),hexOrRgbColor:e=>vc.test(e)||xc.test(e),hexaOrRgbaColor:e=>yc.test(e)||Sc.test(e),anyColor:e=>bc.test(e)||xc.test(e)||Sc.test(e)},kc=[!0,!1,`ondemand`],Ac={modelValue:{},error:{type:Boolean,default:null},errorMessage:String,noErrorIcon:Boolean,rules:Array,reactiveRules:Boolean,lazyRules:{type:[Boolean,String],default:!1,validator:e=>kc.includes(e)}};function jc(e,t){let{props:n,proxy:r}=O(),i=m(!1),a=m(null),o=m(!1);_c({validate:y,resetValidation:v});let s=0,c,l=!1,u=!1,d=j(()=>n.rules!==void 0&&n.rules!==null&&n.rules.length!==0),f=j(()=>!n.disable&&d.value&&!t.value),p=j(()=>n.error===!0||i.value),h=j(()=>typeof n.errorMessage==`string`&&n.errorMessage.length!==0?n.errorMessage:a.value);_(()=>n.modelValue,()=>{o.value=!0,f.value&&(n.lazyRules===!1||n.lazyRules===!0&&i.value)&&b()});function g(){n.lazyRules!==`ondemand`&&f.value&&o.value&&b()}_(()=>n.reactiveRules,e=>{e?c===void 0&&(c=_(()=>n.rules,g,{immediate:!0,deep:!0})):c!==void 0&&(c(),c=void 0)},{immediate:!0}),_(()=>n.lazyRules,g),_(e,e=>{e?o.value=!0:n.lazyRules!==`ondemand`&&(f.value?b():!n.disable&&d.value&&t.value&&(u=!0))});function v(){s++,t.value=!1,o.value=!1,i.value=!1,a.value=null,u=!1,b.cancel()}function y(e=n.modelValue){if(n.disable||!d.value)return!0;let r=++s,c=n.modelValue;u=!1;let p=()=>{let e=u;u=!1,!l&&n.modelValue!==c&&f.value&&n.lazyRules!==`ondemand`&&(n.lazyRules===!1||i.value||e)&&b()},m=t.value?()=>{}:()=>{o.value=!0},h=(e,n)=>{e&&m(),i.value=e,a.value=n||null,t.value=!1},g=[];for(let t=0;t<n.rules.length;t++){let r=n.rules[t],i;if(typeof r==`function`?i=r(e,Oc):typeof r==`string`&&(Oc[r]===void 0?(console.error(`Unknown validation pattern rule: "${r}"`),i=!1):i=Oc[r](e)),i===!1||typeof i==`string`)return h(!0,i),!1;i!==!0&&i!==void 0&&g.push(i)}return g.length===0?(h(!1),!0):(t.value=!0,Promise.all(g).then(e=>{if(e===void 0||!Array.isArray(e)||e.length===0)return r===s&&(h(!1),p()),!0;let t=e.find(e=>e===!1||typeof e==`string`);return r===s&&(h(t!==void 0,t),p()),t===void 0},e=>(r===s&&(console.error(e),h(!0),p()),!1)))}let b=Fe(y,0);return ee(()=>{l=!0,c?.(),b.cancel()}),Object.assign(r,{resetValidation:v,validate:y}),le(r,`hasError`,()=>p.value),{isDirtyModel:o,hasRules:d,hasError:p,errorMessage:h,validate:y,resetValidation:v}}function Mc(e){return e!=null&&String(e).length!==0}var Nc={...We,...Ac,label:String,stackLabel:Boolean,hint:String,hideHint:Boolean,prefix:String,suffix:String,labelColor:String,color:String,bgColor:String,filled:Boolean,outlined:Boolean,borderless:Boolean,standout:[Boolean,String],square:Boolean,loading:Boolean,labelSlot:Boolean,bottomSlots:Boolean,hideBottomSpace:Boolean,rounded:Boolean,dense:Boolean,itemAligned:Boolean,counter:Boolean,clearable:Boolean,clearIcon:String,disable:Boolean,readonly:Boolean,autofocus:Boolean,for:String,maxlength:[Number,String]},Pc=[`update:modelValue`,`clear`,`focus`,`blur`];function Fc({requiredForAttr:e=!0,tagProp:t,changeEvent:n=!1}={}){let{props:r}=O(),a=Ge(r,we()),o=ct({required:e,getValue:()=>r.for});return{requiredForAttr:e,changeEvent:n,tag:t?{get value(){return r.tag}}:{value:`label`},isDark:a,editable:j(()=>!r.disable&&!r.readonly),innerLoading:m(!1),focused:m(!1),hasPopupOpen:!1,splitAttrs:gc(),targetUid:o,rootRef:i(null),targetRef:i(null),controlRef:i(null)}}var Ic={class:`q-field__prepend q-field__marginal row no-wrap items-center`,key:`prepend`,onClick:ce},Lc={class:`q-field__append q-field__marginal row no-wrap items-center`,key:`append`,onClick:ce},Rc=`input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), a[href], [tabindex]:not([disabled]), [contenteditable]:not([contenteditable="false"])`,zc={class:`q-field__control-container col relative-position row no-wrap q-anchor--skip`},Bc={class:`q-field__prefix no-pointer-events row items-center`},Vc={class:`q-field__suffix no-pointer-events row items-center`},Hc={class:`q-field__inner relative-position col self-stretch`},Uc={class:`q-field__before q-field__marginal row no-wrap items-center`,onClick:ce},Wc={class:`q-field__after q-field__marginal row no-wrap items-center`,onClick:ce},Gc={};function Kc(e,t){return t.focused.value&&typeof e.standout==`string`&&e.standout.length!==0}function qc(e,t){return t===null?null:h(`div`,{key:e,class:`q-field__append q-field__marginal row no-wrap items-center q-anchor--skip`},t)}function Jc(e){let{props:t,emit:n,slots:r,attrs:i,proxy:a}=O(),o=we(),s=null;e.hasValue===void 0&&(e.hasValue=j(()=>Mc(t.modelValue))),e.emitValue===void 0&&(e.emitValue=e=>{n(`update:modelValue`,e)}),e.controlEvents===void 0&&(e.controlEvents={onFocusin:M,onFocusout:re,onPopupShow:ie,onPopupHide:ae}),Object.assign(e,{clearValue:N,onControlFocusin:M,onControlFocusout:re,focus:k}),e.computedCounter===void 0&&(e.computedCounter=j(()=>{if(t.counter){let e=typeof t.modelValue==`string`||typeof t.modelValue==`number`?String(t.modelValue).length:Array.isArray(t.modelValue)?t.modelValue.length:0,n=t.maxlength===void 0?t.maxValues:t.maxlength;return e+(n===void 0?``:` / `+n)}}));let{isDirtyModel:c,hasRules:l,hasError:u,errorMessage:d,resetValidation:f}=jc(e.focused,e.innerLoading),p=j(()=>u.value&&e.targetUid.value?`${e.targetUid.value}_error`:void 0);function m(e){if(u.value!==!0)return Gc;let n={"aria-invalid":`true`};return p.value!==void 0&&(!t.hideBottomSpace||t.counter||r.counter!==void 0||d.value!==null||r.error!==void 0)&&(n[`aria-errormessage`]=e?.[`aria-errormessage`]===void 0?p.value:e[`aria-errormessage`],n[`aria-describedby`]=e?.[`aria-describedby`]===void 0?p.value:`${e[`aria-describedby`]} ${p.value}`),n}Object.assign(e,{hasError:u,errorMessage:d,errorMessageId:p,getErrorAriaAttrs:m});let g=e.floatingLabel===void 0?j(()=>t.stackLabel||e.focused.value||e.hasValue.value):j(()=>t.stackLabel||e.focused.value||e.floatingLabel.value),_=j(()=>t.bottomSlots||t.hint!==void 0||l.value||t.counter||t.error!==null),v=j(()=>`q-field row no-wrap items-start q-field--`+(t.filled?`filled`:t.outlined?`outlined`:t.borderless?`borderless`:t.standout?`standout`:`standard`)+(e.fieldClass===void 0?``:` ${e.fieldClass.value}`)+(t.rounded?` q-field--rounded`:``)+(t.square?` q-field--square`:``)+(g.value?` q-field--float`:``)+(C.value?` q-field--labeled`:``)+(t.dense?` q-field--dense`:``)+(t.itemAligned?` q-field--item-aligned q-item-type`:``)+(e.isDark()?` q-field--dark`:``)+(e.getControl===void 0?` q-field--auto-height`:``)+(e.focused.value?` q-field--focused`:``)+(u.value?` q-field--error`:Kc(t,e)?` q-field--standout-custom`:``)+(u.value||e.focused.value?` q-field--highlighted`:``)+(!t.hideBottomSpace&&_.value?` q-field--with-bottom`:``)+(t.disable?` q-field--disabled`:t.readonly?` q-field--readonly`:``)),y=j(()=>`q-field__control relative-position row no-wrap`+(t.bgColor===void 0?``:` bg-${t.bgColor}`)+(u.value?` text-negative`:Kc(t,e)?` ${t.standout}`:t.color===void 0?``:` text-${t.color}`)),C=j(()=>t.labelSlot||t.label!==void 0),w=j(()=>`q-field__label no-pointer-events absolute ellipsis`+(t.labelColor!==void 0&&!u.value?` text-${t.labelColor}`:``)),T=j(()=>le({id:e.targetUid.value,editable:e.editable.value,focused:e.focused.value,floatingLabel:g.value,modelValue:t.modelValue,emitValue:e.emitValue,ariaInvalid:u.value===!0?`true`:void 0,ariaDescribedby:p.value,ariaErrormessage:p.value},`field`,()=>e.rootRef.value)),E=j(()=>{let n={};return e.targetUid.value&&(n.for=e.targetUid.value),t.disable&&(n[`aria-disabled`]=`true`),n});function D(){let t=document.activeElement,n=e.targetRef?.value;n&&(t===null||t.id!==e.targetUid.value)&&(n.hasAttribute(`tabindex`)||(n=n.querySelector(`[tabindex]`)),n!==t&&n?.focus({preventScroll:!0}))}function k(){Xe(D)}function A(t){let n=t.target,r=e.targetUid.value===null?null:document.getElementById(e.targetUid.value);if(!(r!==null&&n.contains(r)&&(r.focus({preventScroll:!0}),document.activeElement===r))){for(let e of n.querySelectorAll(Rc))if(e.focus({preventScroll:!0}),document.activeElement===e)return}}function ne(){Ze(D);let t=document.activeElement;t!==null&&e.rootRef.value.contains(t)&&t.blur()}function M(r){s!==null&&(clearTimeout(s),s=null),!t.disable&&!e.focused.value&&(e.focused.value=!0,n(`focus`,r))}function re(t,r){s!==null&&clearTimeout(s),s=setTimeout(()=>{s=null,!(document.hasFocus()&&(e.hasPopupOpen||e.controlRef===void 0||e.controlRef.value===null||e.controlRef.value.contains(document.activeElement)))&&(e.focused.value&&(e.focused.value=!1,n(`blur`,t)),r?.())},0)}function ie(t){e.hasPopupOpen=!0,M(t)}function ae(t){e.hasPopupOpen=!1,re(t)}function N(r){_e(r),o.platform.is.mobile?e.rootRef.value.contains(document.activeElement)&&document.activeElement.blur():(e.targetRef?.value||e.rootRef.value).focus(),t.type===`file`&&(e.inputRef.value.value=null),e.onClear?.(),n(`update:modelValue`,null),e.changeEvent&&n(`change`,null),n(`clear`,t.modelValue),x(()=>{let e=c.value;f(),c.value=e})}function oe(e){[13,32].includes(e.keyCode)&&N(e)}function se(){let n=[];r.prepend!==void 0&&n.push(h(`div`,Ic,r.prepend())),n.push(h(`div`,zc,ue())),u.value&&!t.noErrorIcon&&n.push(qc(`error`,[h(Re,{name:o.iconSet.field.error,color:`negative`})]));let i=t.loading||e.innerLoading.value?r.loading===void 0?e.shouldHideLoadingIndicator?.()?null:[h(Ue,{color:t.color})]:r.loading():null;return i===null?t.clearable&&e.hasValue.value&&e.editable.value&&n.push(qc(`inner-clearable-append`,[h(Re,{class:`q-field__focusable-action`,name:t.clearIcon||o.iconSet.field.clear,tabindex:0,role:`button`,"aria-hidden":`false`,"aria-label":o.lang.label.clear,onKeyup:oe,onClick:N})])):n.push(qc(`inner-loading-append`,i)),r.append!==void 0&&n.push(h(`div`,Lc,r.append())),e.getInnerAppend!==void 0&&n.push(qc(`inner-append`,e.getInnerAppend())),e.getControlChild!==void 0&&n.push(e.getControlChild()),n}function ue(){let n=[];return t.prefix!==void 0&&t.prefix!==null&&n.push(h(`div`,Bc,t.prefix)),e.getShadowControl!==void 0&&e.hasShadow.value&&n.push(e.getShadowControl()),C.value&&n.push(h(`div`,{class:w.value},De(r.label,t.label))),e.getControl===void 0?r.rawControl===void 0?r.control!==void 0&&n.push(h(`div`,{ref:e.targetRef,class:`q-field__native row`,tabindex:-1,...e.splitAttrs.attributes.value,"data-autofocus":t.autofocus||void 0,onFocus:A},r.control(T.value))):n.push(r.rawControl()):n.push(e.getControl()),t.suffix!==void 0&&t.suffix!==null&&n.push(h(`div`,Vc,t.suffix)),n.concat(De(r.default))}let de=null,fe=!1;function pe(){let n,i;u.value?d.value===null?(n=De(r.error),i=`q--slot-error`):(n=[h(`div`,{role:`alert`},d.value)],i=`q--slot-error-${d.value}`):(!t.hideHint||e.focused.value)&&(t.hint===void 0?(n=De(r.hint),i=`q--slot-hint`):(n=[h(`div`,t.hint)],i=`q--slot-hint-${t.hint}`));let a=t.counter||r.counter!==void 0;if(!t.hideBottomSpace||a||n!==void 0)return i!==de&&(fe=de!==null,de=i),h(`div`,{class:`q-field__bottom row items-start q-field__bottom--`+(t.hideBottomSpace?`stale`:`animated`),onClick:ce},[h(`div`,{key:i,id:u.value===!0?p.value:void 0,class:`q-field__messages col`+(fe&&!t.hideBottomSpace?` q-field__messages--animated`:``)},n),a?h(`div`,{class:`q-field__counter`},r.counter===void 0?e.computedCounter.value:r.counter()):null])}let P=!1;return b(()=>{P=!0}),te(()=>{P&&t.autofocus&&a.focus()}),t.autofocus&&S(()=>{a.focus()}),ee(()=>{s!==null&&clearTimeout(s)}),Object.assign(a,{focus:k,blur:ne}),function(){let n=e.getControl===void 0&&r.control===void 0?{...e.splitAttrs.attributes.value,"data-autofocus":t.autofocus||void 0,...E.value}:E.value;return h(e.tag.value,{ref:e.rootRef,class:[v.value,i.class],style:i.style,...n},[r.before===void 0?null:h(`div`,Uc,r.before()),h(`div`,Hc,[h(`div`,{ref:e.controlRef,class:y.value,tabindex:-1,...e.controlEvents},se()),_.value?pe():null]),r.after===void 0?null:h(`div`,Wc,r.after())])}}var Yc={date:`####/##/##`,datetime:`####/##/## ##:##`,time:`##:##`,fulltime:`##:##:##`,phone:`(###) ### - ####`,card:`#### #### #### ####`},Xc={"[\\d]":e=>{let t=e.codePointAt(0);return t>47&&t<58},"[a-zA-Z]":e=>{let t=e.codePointAt(0);return t>64&&t<91||t>96&&t<123},"[0-9a-zA-Z]":e=>{let t=e.codePointAt(0);return t>47&&t<58||t>64&&t<91||t>96&&t<123}},{tokenMap:Zc,tokenKeys:Qc}=$c({"#":{pattern:`[\\d]`,negate:`[^\\d]`},S:{pattern:`[a-zA-Z]`,negate:`[^a-zA-Z]`},N:{pattern:`[0-9a-zA-Z]`,negate:`[^0-9a-zA-Z]`},A:{pattern:`[a-zA-Z]`,negate:`[^a-zA-Z]`,transform:e=>e.toLocaleUpperCase()},a:{pattern:`[a-zA-Z]`,negate:`[^a-zA-Z]`,transform:e=>e.toLocaleLowerCase()},X:{pattern:`[0-9a-zA-Z]`,negate:`[^0-9a-zA-Z]`,transform:e=>e.toLocaleUpperCase()},x:{pattern:`[0-9a-zA-Z]`,negate:`[^0-9a-zA-Z]`,transform:e=>e.toLocaleLowerCase()}});function $c(e){let t=Object.keys(e),n={};return t.forEach(t=>{let r=e[t],i;if(Object.hasOwn(Xc,r.pattern))i=Xc[r.pattern];else{let e=new RegExp(r.pattern);i=t=>e.test(t)}n[t]={...r,test:i}}),{tokenMap:n,tokenKeys:t}}function el(e){return RegExp("\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|(["+e.join(``)+`])|(.)`,`g`)}var tl=[`insertText`,`deleteContentBackward`,`deleteContentForward`,`deleteWordBackward`,`deleteWordForward`,`deleteByCut`],nl=/[.*+?^${}()|[\]\\]/g,rl=el(Qc),X=String.fromCodePoint(1),il={mask:String,reverseFillMask:Boolean,fillMask:[Boolean,String],unmaskedValue:Boolean,maskTokens:Object};function al(e,t,n,r,i){let a,o,s,c,l,u,d,f=j(()=>{if(e.maskTokens===void 0||e.maskTokens===null)return{tokenMap:Zc,tokenRegexMask:rl};let{tokenMap:t}=$c(e.maskTokens),n={...Zc,...t};return{tokenMap:n,tokenRegexMask:el(Object.keys(n))}}),p=m(null),h=m(v());function g(){return e.autogrow||[`textarea`,`text`,`search`,`url`,`tel`,`password`].includes(e.type)}_(()=>e.type+e.autogrow,b),_(()=>e.mask,n=>{if(n!==void 0)w(h.value,!0);else{let n=te(p.value?ne(h.value,d):h.value);b(),e.modelValue!==n&&t(`update:modelValue`,n)}}),_(()=>e.fillMask+e.reverseFillMask,()=>{p.value&&w(h.value,!0)}),_(()=>e.unmaskedValue,()=>{p.value&&w(h.value)}),_(()=>e.maskTokens,()=>{p.value&&w(h.value,!0)},{deep:!0});function v(){if(b(),p.value){let t=k(te(e.modelValue));return d=t.length,e.fillMask===!1?t:M(t)}return d=0,e.modelValue}function y(e){if(e<a.length)return a.slice(-e);let t=``,n=a,r=n.indexOf(X);if(r!==-1){for(let r=e-n.length;r>0;r--)t+=X;n=n.slice(0,r)+t+n.slice(r)}return n}function b(){if(p.value=e.mask!==void 0&&e.mask.length!==0&&g(),!p.value){c=void 0,a=``,o=``;return}let t=Yc[e.mask]===void 0?e.mask:Yc[e.mask],n=typeof e.fillMask==`string`&&e.fillMask.length!==0?e.fillMask.slice(0,1):`_`,r=n.replace(nl,String.raw`\$&`),i=[],l=[],u=[],d=e.reverseFillMask,m=``,h=``;t.replace(f.value.tokenRegexMask,(e,t,n,r,a)=>{if(r!==void 0){let e=f.value.tokenMap[r];u.push(e),h=e.negate,d&&=(l.push({c:e,overflow:!0}),!1),l.push({c:e});return}if(n!==void 0)m=`\\`+(n===`\\`?``:n),u.push(n);else{let e=t===void 0?a:t;m=e===`\\`?String.raw`\\\\`:e.replace(nl,String.raw`\\$&`),u.push(e)}i.push(`([^`+m+`]+)?`+m+`?`)});let _=[...new Set(u.filter(e=>typeof e!=`string`).map(({pattern:e})=>e))],v=RegExp(`^`+i.join(``)+`(`+(m===``?`.`:`[^`+m+`]`)+`+)?`+(m===``?``:`[`+m+`]*`)+`$`),y=l.length-1,b=_.length===1?h:`(?:`+_.map(e=>`(?!`+e+`)`).join(``)+String.raw`[\s\S])`,x=({c:e,overflow:t})=>t===!0?`(?:`+b+`+)?(`+e.pattern+`+)?(?:`+b+`+)?(`+e.pattern+`+)?`:`(?:`+b+`+)?(`+e.pattern+`)?`,S=l.map((t,n)=>{let i=x(t);return n===0&&e.reverseFillMask?RegExp(`^`+r+`*`+i):RegExp(n===y?`^`+i+`(`+(h===``?`.`:h)+`+)?`+(e.reverseFillMask?`$`:r+`*`):`^`+i)});s=u,c=t=>{let n=v.exec(e.reverseFillMask?t:t.slice(0,u.length+1));n!==null&&(t=n.slice(1).join(``));let r=[],i=S.length;for(let e=0,n=t;e<i;e++){let t=S[e].exec(n);if(t===null)break;n=n.slice(t.shift().length),r.push(...t)}return r.length===0?t:r.join(``)},a=u.map(e=>typeof e==`string`?e:X).join(``),o=a.split(X).join(n)}function S(t,n){let r=t.length,i=e.reverseFillMask?y(r):a,o=e.reverseFillMask?s.length-r:0,c=e.reverseFillMask?0:Math.min(n,r),l=e.reverseFillMask?r-n:r;return e=>{if(i[e]!==X||e>=c&&e<l)return!1;let n=s[o+e];return n===void 0||typeof n==`string`||n.test(t[e])}}function C(e,t,n){let r=S(e,n),i=0;for(let e=0;e<t;e++)r(e)&&i++;return i}function w(t,s,c){let u=r.value,f=u?.selectionEnd??0,p=u===null?0:u.value.length-f,m=s!==!0&&typeof h.value==`string`&&tl.includes(c)?ee(h.value,d,t,c):te(t),g;s===!0&&u!==null&&a.length!==0&&(g=C(u.value,f,d)),s===!0&&b();let _=k(m,s),v=e.fillMask===!1?_:M(_),y=_.length,S=h.value!==v,w=S||y!==d;d=y;let T=e.fillMask!==!1&&y===0;u!==null&&u.value!==v&&(u.value=v),S&&(h.value=v),u!==null&&document.activeElement===u&&x(()=>{if(T){let t=e.reverseFillMask?o.length:0;u.setSelectionRange(t,t,`forward`);return}if(g!==void 0){let e=0,t=0;for(;e<v.length&&t<g;)t=C(v,e+1,y),e++;u.setSelectionRange(e,e,`forward`);return}if(c===`insertFromPaste`&&!e.reverseFillMask){let e=u.selectionEnd,t=f-1;for(let n=l;n<=t&&n<e;n++)a[n]!==X&&t++;E.right(u,t);return}if([`deleteContentBackward`,`deleteContentForward`].includes(c)){let t=e.reverseFillMask?f===0?+(v.length>_.length):Math.max(0,v.length-(T?0:Math.min(_.length,p)+1))+1:f;u.setSelectionRange(t,t,`forward`);return}if(e.reverseFillMask){if(w){let e=Math.max(0,v.length-(T?0:Math.min(_.length,p+1)));e===1&&f===1?u.setSelectionRange(e,e,`forward`):E.rightReverse(u,e)}else{let e=v.length-p;u.setSelectionRange(e,e,`backward`)}}else if(w){let e=Math.max(0,a.indexOf(X),Math.min(_.length,f)-1);E.right(u,e)}else{let e=f-1;E.right(u,e)}});let D=e.unmaskedValue?te(_):v;String(e.modelValue)!==D&&(e.modelValue!==null||D!==``)?n(D,!0):i!==void 0&&i()}function T(e,t,n){let r=k(te(e.value));t=Math.max(0,a.indexOf(X),Math.min(r.length,t)),l=t,e.setSelectionRange(t,n,`forward`)}let E={left(e,t){let n=!a.slice(t-1).includes(X),r=Math.max(0,t-1);for(;r>=0;r--)if(a[r]===X){t=r,n&&t++;break}if(r<0&&a[t]!==void 0&&a[t]!==X)return E.right(e,0);t>=0&&e.setSelectionRange(t,t,`backward`)},right(e,t){let n=e.value.length,r=Math.min(n,t+1);for(;r<=n;r++)if(a[r]===X){t=r;break}else a[r-1]===X&&(t=r);if(r>n&&a[t-1]!==void 0&&a[t-1]!==X)return E.left(e,n);e.setSelectionRange(t,t,`forward`)},leftReverse(e,t){let n=y(e.value.length),r=Math.max(0,t-1);for(;r>=0;r--)if(n[r-1]===X){t=r;break}else if(n[r]===X&&(t=r,r===0))break;if(r<0&&n[t]!==void 0&&n[t]!==X)return E.rightReverse(e,0);t>=0&&e.setSelectionRange(t,t,`backward`)},rightReverse(e,t){let n=e.value.length,r=y(n),i=!r.slice(0,t+1).includes(X),a=Math.min(n,t+1);for(;a<=n;a++)if(r[a-1]===X){t=a,t>0&&i&&t--;break}if(a>n&&r[t-1]!==void 0&&r[t-1]!==X)return E.leftReverse(e,n);e.setSelectionRange(t,t,`forward`)}};function D(e){t(`click`,e),u=void 0}function O(n){if(t(`keydown`,n),n.defaultPrevented||n.altKey||he(n))return;let i=r.value,a=i.selectionStart,o=i.selectionEnd;if(n.shiftKey||(u=void 0),n.keyCode===37||n.keyCode===39){n.shiftKey&&u===void 0&&(u=i.selectionDirection===`forward`?a:o);let t=E[(n.keyCode===39?`right`:`left`)+(e.reverseFillMask?`Reverse`:``)];if(n.preventDefault(),t(i,u===a?o:a),n.shiftKey){let e=i.selectionStart;i.setSelectionRange(Math.min(u,e),Math.max(u,e),`forward`)}}else n.keyCode===8&&!e.reverseFillMask&&a===o?(E.left(i,a),i.setSelectionRange(i.selectionStart,o,`backward`)):n.keyCode===46&&e.reverseFillMask&&a===o&&(E.rightReverse(i,o),i.setSelectionRange(a,i.selectionEnd,`forward`))}function k(t,n){if(t==null||t===``)return``;if(e.reverseFillMask)return A(t,n);let r=s,i=0,a=``;for(let e=0;e<r.length;e++){let o=t[i],s=r[e];if(typeof s==`string`)a+=s,n===!0&&o===s&&i++;else if(o!==void 0&&s.test(o))a+=s.transform===void 0?o:s.transform(o),i++;else return a}return a}function A(e,t){let n=s,r=a.indexOf(X),i=e.length-1,o=``,c=``;for(let a=n.length-1;a>=0&&i!==-1;a--){let s=n[a],l=e[i];if(typeof s==`string`)c=s+c,t===!0&&l===s&&i--;else if(l!==void 0&&s.test(l)){o=c+o,c=``;do o=(s.transform===void 0?l:s.transform(l))+o,i--,l=e[i];while(r===a&&l!==void 0&&s.test(l))}else return o}return o}function ee(t,n,r,i){let a=t.length,o=r.length,c=Math.min(a,o),l=0;for(;l<c&&t[l]===r[l];)l++;let u=0;for(;u<c-l&&t[a-1-u]===r[o-1-u];)u++;let d=S(t,n),f=``,p=``;for(let e=0;e<l;e++)d(e)&&(f+=t[e]);for(let e=a-u;e<a;e++)d(e)&&(p+=t[e]);let m=``,h=r.slice(l,o-u);if(h.length!==0){if(e.reverseFillMask)for(let e of h)s.some(t=>typeof t!=`string`&&t.test(e))&&(m+=e);else{let e=s.filter(e=>typeof e!=`string`),t=f.length;for(let n of h)e[t]!==void 0&&e[t].test(n)&&(m+=n,t++)}}else if(!e.reverseFillMask&&l+u<a){let e=!1;for(let t=l;t<a-u;t++)if(d(t)){e=!0;break}e||(i===`deleteContentForward`?p=p.slice(1):f=f.slice(0,-1))}return f+m+p}function te(e){return typeof e!=`string`||c===void 0?typeof e==`number`?c(String(e)):e:c(e)}function ne(t,n){return n>=t.length?t:e.reverseFillMask?t.slice(t.length-n):t.slice(0,n)}function M(t){return o.length-t.length<=0?t:e.reverseFillMask&&t.length!==0?o.slice(0,-t.length)+t:t+o.slice(t.length)}return{innerValue:h,hasMask:p,moveCursorForPaste:T,updateMaskValue:w,onMaskedKeydown:O,onMaskedClick:D}}var ol=typeof CSS>`u`||CSS.supports(`field-sizing`,`content`)?void 0:sl;function sl(e,t,n,r){let i=null;function a(){i!==null&&(cancelAnimationFrame(i),i=null)}function o(){i===null&&(i=requestAnimationFrame(()=>{i=null;let e=n.value;if(e!==null){let t=e.parentNode.style,{scrollTop:n}=e,{overflowY:i,maxHeight:a}=r.platform.is.firefox?{}:window.getComputedStyle(e),o=i!==void 0&&i!==`scroll`;o&&(e.style.overflowY=`hidden`),t.marginBottom=e.scrollHeight-1+`px`,e.style.height=`1px`,e.style.height=e.scrollHeight+`px`,o&&(e.style.overflowY=Number.parseInt(a,10)<e.scrollHeight?`auto`:`hidden`),t.marginBottom=``,e.scrollTop=n}}))}return _(()=>e.autogrow,e=>{if(e)x(o);else if(n.value!==null){a();let{style:e}=n.value;e.overflowY=``,e.height=t.rows>0?`auto`:``}}),_(()=>e.dense,()=>{e.autogrow&&x(o)}),S(()=>{e.autogrow&&o()}),ee(a),o}function cl(e,t){function n(){let t=e.modelValue;try{let e=new DataTransfer;return Object(t)===t&&(`length`in t?[...t]:[t]).forEach(t=>{e.items.add(t)}),{files:e.files}}catch{return{files:void 0}}}return j(t?()=>{if(e.type===`file`)return n()}:n)}var ll=/[\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFF9F\u4E00-\u9FAF\u3400-\u4DBF]/,ul=/[\u4E00-\u9FFF\u3400-\u4DBF\u{20000}-\u{2A6DF}\u{2A700}-\u{2B73F}\u{2B740}-\u{2B81F}\u{2B820}-\u{2CEAF}\uF900-\uFAFF\u3300-\u33FF\uFE30-\uFE4F\uF900-\uFAFF\u{2F800}-\u{2FA1F}]/u,dl=/[\u3131-\u314E\u314F-\u3163\uAC00-\uD7A3]/,fl=/[a-z0-9_ -]$/i;function pl(e){return function(t){if(t.type===`compositionend`||t.type===`change`){if(!t.target.qComposing)return;t.target.qComposing=!1,e(t)}else t.type===`compositionupdate`&&!t.target.qComposing&&typeof t.data==`string`&&(ve.is.firefox?!fl.test(t.data):ll.test(t.data)||ul.test(t.data)||dl.test(t.data))&&(t.target.qComposing=!0)}}var ml=Pe({name:`QInput`,inheritAttrs:!1,props:{...Nc,...il,...lt,modelValue:[String,Number,FileList],modelModifiers:Object,shadowText:String,type:{type:String,default:`text`},debounce:[String,Number],autogrow:Boolean,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},emits:[...Pc,`paste`,`change`,`keydown`,`click`,`animationend`],setup(e,{emit:t,attrs:n}){let{proxy:r}=O(),a=we(),o={},s=NaN,c=!1,l=!1,u=null,d,f=i(null),p=dt(e),{innerValue:m,hasMask:g,moveCursorForPaste:v,updateMaskValue:y,onMaskedKeydown:b,onMaskedClick:S}=al(e,t,ue,f,()=>{de(),delete o.value}),C=cl(e,!0),w=j(()=>Mc(m.value)),T=pl(se);function E(e){if(g.value&&e.type===`compositionstart`){e.target.qComposing=!0;return}T(e)}let D=Fc({changeEvent:!0}),k=j(()=>e.type===`textarea`||e.autogrow),A=ol?.(e,n,f,a),te=j(()=>k.value||[`text`,`search`,`url`,`tel`,`password`].includes(e.type)),ne=j(()=>{let t={...D.splitAttrs.listeners.value,onInput:se,onPaste:oe,onChange:P,onBlur:me,onFocus:pe};return t.onCompositionstart=t.onCompositionupdate=t.onCompositionend=E,g.value&&(t.onKeydown=b,t.onClick=S),A&&e.autogrow&&(t.onAnimationend=ce),t}),M=j(()=>{let t={tabindex:0,"data-autofocus":e.autofocus||void 0,rows:e.type===`textarea`?6:void 0,"aria-label":e.label,name:p(),...D.splitAttrs.attributes.value,id:D.targetUid.value,maxlength:e.maxlength,disabled:e.disable,readonly:e.readonly};return k.value||(t.type=e.type),e.autogrow&&(t.rows=1),t});_(()=>e.type,()=>{f.value&&(f.value.value=e.modelValue)}),_(()=>e.modelValue,t=>{if(d!==void 0&&(de(),c=!1,l=!1,delete o.value),g.value){if(l&&(l=!1,String(t)===s))return;y(t)}else m.value!==t&&(m.value=t,e.type===`number`&&Object.hasOwn(o,`value`)&&(c?c=!1:delete o.value),e.modelModifiers?.trim===!0&&Object.hasOwn(o,`value`)&&(typeof o.value!=`string`||o.value.trim()!==t)&&delete o.value);A&&e.autogrow&&x(A)});function re(){let e=document.activeElement;f.value!==null&&f.value!==e&&(e===null||e.id!==D.targetUid.value)&&f.value.focus({preventScroll:!0})}function ie(){Xe(re)}function ae(){Ze(re);let e=document.activeElement;e!==null&&D.rootRef.value.contains(e)&&e.blur()}function N(){f.value?.select()}function oe(n){if(g.value&&e.reverseFillMask!==!0){let e=n.target;v(e,e.selectionStart,e.selectionEnd)}t(`paste`,n)}function se(n){if(!n||!n.target)return;if(e.type===`file`){t(`update:modelValue`,n.target.files);return}let r=n.target.value;if(n.target.qComposing){o.value=r;return}if(g.value)y(r,!1,n.inputType);else if(e.modelModifiers?.trim===!0&&(o.value=r),ue(r),te.value&&n.target===document.activeElement){let{selectionStart:e,selectionEnd:t}=n.target;e!==void 0&&t!==void 0&&x(()=>{n.target===document.activeElement&&r.indexOf(n.target.value)===0&&n.target.setSelectionRange(e,t)})}A&&e.autogrow&&A()}function ce(e){t(`animationend`,e),A()}function ue(n,r){d=()=>{u=null,e.type!==`number`&&(e.modelModifiers?.trim!==!0||g.value)&&Object.hasOwn(o,`value`)&&delete o.value,e.modelValue!==n&&s!==n&&(s=n,r===!0&&(l=!0),t(`update:modelValue`,n),x(()=>{s===n&&(s=NaN)})),d=void 0},e.type===`number`&&(c=!0,o.value=n);let i=()=>{g.value?delete o.value:o.value=n};e.modelModifiers?.lazy===!0?i():e.debounce===void 0?d():(u!==null&&clearTimeout(u),i(),u=setTimeout(d,e.debounce))}function de(){u!==null&&(clearTimeout(u),u=null),d=void 0}function fe(){de(),c=!1,l=!1,delete o.value}function P(e){E(e),u!==null&&(clearTimeout(u),u=null),d?.(),t(`change`,e.target.value)}function me(t){t!==void 0&&pe(t),u!==null&&(clearTimeout(u),u=null),d?.(),c=!1,l=!1,delete o.value,e.type!==`file`&&setTimeout(()=>{f.value!==null&&(f.value.value=m.value===void 0?``:m.value)},0)}function he(){return Object.hasOwn(o,`value`)?o.value:m.value===void 0?``:m.value}ee(()=>{me()}),Object.assign(D,{innerValue:m,fieldClass:j(()=>`q-${k.value?`textarea`:`input`}`+(e.autogrow?` q-textarea--autogrow`:``)),hasShadow:j(()=>e.type!==`file`&&typeof e.shadowText==`string`&&e.shadowText.length!==0),inputRef:f,emitValue:ue,onClear:fe,hasValue:w,floatingLabel:j(()=>w.value&&(e.type!==`number`||Number.isFinite(Number(m.value)))||Mc(e.displayValue)),getControl:()=>{let t=M.value;return h(k.value?`textarea`:`input`,{ref:f,class:[`q-field__native q-placeholder`,e.inputClass],style:e.inputStyle,...t,...D.getErrorAriaAttrs(t),...ne.value,...e.type===`file`?C.value:{value:he()}})},getShadowControl:()=>h(`div`,{class:`q-field__native q-field__shadow absolute-bottom no-pointer-events`+(k.value?``:` text-no-wrap`)},[h(`span`,{class:`invisible`},he()),h(`span`,e.shadowText)])});let ge=Jc(D);return Object.assign(r,{focus:ie,blur:ae,select:N,getNativeElement:()=>f.value}),le(r,`nativeEl`,()=>f.value),ge}}),hl=Pe({name:`QCardActions`,props:{...Ve,vertical:Boolean},setup(e,{slots:t}){let n=Be(e),r=j(()=>`q-card__actions ${n()} q-card__actions--${e.vertical?`vert column`:`horiz row`}`);return()=>h(`div`,{class:r.value},De(t.default))}}),gl=`kobo:network-token`;function _l(){try{return localStorage.getItem(gl)}catch{return null}}function vl(e){try{localStorage.setItem(gl,e),window.dispatchEvent(new Event(`kobo:auth-token-changed`))}catch{}}function yl(e){try{let t=new URL(e,window.location.origin);return t.origin===window.location.origin&&t.pathname.startsWith(`/api/`)}catch{return typeof e==`string`&&e.startsWith(`/api/`)}}function bl(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}token=${encodeURIComponent(t)}`:e}var xl=m(!1);function Sl(){xl.value=!0}function Cl(){xl.value=!1}var wl={class:`text-h6`},Tl={class:`text-caption text-kobo-3 q-mt-sm`},El=N({__name:`NetworkLoginDialog`,setup(e){let{t}=bs(),n=j({get:()=>xl.value,set:e=>{e||Cl()}}),i=m(``),a=m(!1),o=m(!1),s=m(``);async function c(){let e=i.value.trim();if(e){a.value=!0,o.value=!1;try{let n=await ic(`/api/settings/network/ping`,{headers:{"X-Kobo-Token":e}});if(n.ok){vl(e),Cl(),window.location.reload();return}s.value=n.status===401?t(`network.login.invalid`):t(`network.login.serverError`),o.value=!0}catch{s.value=t(`network.login.unreachable`),o.value=!0}finally{a.value=!1}}}return(e,l)=>(v(),k(Gn,{modelValue:n.value,"onUpdate:modelValue":l[1]||=e=>n.value=e,persistent:``},{default:E(()=>[D(an,{style:{"min-width":`320px`,"max-width":`90vw`}},{default:E(()=>[D(en,null,{default:E(()=>[ie(`div`,wl,f(r(t)(`network.login.title`)),1),ie(`div`,Tl,f(r(t)(`network.login.description`)),1)]),_:1}),D(en,null,{default:E(()=>[D(ml,{modelValue:i.value,"onUpdate:modelValue":l[0]||=e=>i.value=e,label:r(t)(`network.login.tokenLabel`),placeholder:r(t)(`network.login.tokenPlaceholder`),error:o.value,"error-message":s.value,autofocus:``,dense:``,outlined:``,onKeyup:ge(c,[`enter`])},null,8,[`modelValue`,`label`,`placeholder`,`error`,`error-message`])]),_:1}),D(hl,{align:`right`},{default:E(()=>[D(He,{label:r(t)(`network.login.connect`),color:`primary`,loading:a.value,unelevated:``,onClick:c},null,8,[`label`,`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]))}}),Dl=new WeakMap;function Ol(e){return Dl.get(e)}function kl(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{...t}]))}function Al(e){let t=new Set,n=_(()=>e.queuedMessages,()=>{for(let n of t)n(kl(e.queuedMessages))},{deep:!0,flush:`sync`});return{queue:(...t)=>e.queueMessage(...t),cancel:(...t)=>e.cancelQueuedMessage(...t),flush:(...t)=>e.flushQueuedMessage(...t),subscribe(n){return t.add(n),n(kl(e.queuedMessages)),()=>{t.delete(n)}},dispose(){n(),t.clear()}}}function jl(e,t){Dl.set(e,t);let n=t.subscribe(t=>{e.queuedMessages=t});return()=>{n(),Dl.delete(e)}}var Ml=Cr(`templates`,{state:()=>({templates:[],defaultSlugs:[],loading:!1,loaded:!1}),getters:{isDefault:e=>t=>e.defaultSlugs.includes(t)},actions:{async fetchTemplates(){if(!this.loading){this.loading=!0;try{let e=await J(`/api/templates`);if(!e.ok)throw await q(e);let t=await e.json();this.templates=t.templates,this.defaultSlugs=t.defaultSlugs??[],this.loaded=!0}catch(e){console.error(`[templates store] fetchTemplates failed:`,e)}finally{this.loading=!1}}},async createTemplate(e){let t=await J(`/api/templates`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}let n=await t.json();return this.templates.push(n),n},async updateTemplate(e,t){let n=await J(`/api/templates/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json(),i=this.templates.findIndex(t=>t.slug===e);return i>=0&&(this.templates[i]=r),r},async reloadDefaults(){let e=await J(`/api/templates/reload-defaults`,{method:`POST`});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??`HTTP ${e.status}`)}let t=await e.json();return t.added.length>0&&await this.fetchTemplates(),t},async deleteTemplate(e){let t=await rc(`/api/templates/${encodeURIComponent(e)}`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}this.templates=this.templates.filter(t=>t.slug!==e)},async resetToDefault(e){let t=await J(`/api/templates/${encodeURIComponent(e)}/reset-default`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({error:`Reset failed`}));throw Error(e.error??`Reset failed`)}let{template:n}=await t.json(),r=this.templates.findIndex(t=>t.slug===e);return r>=0?this.templates[r]=n:this.templates.push(n),n}}}),Nl=Pe({name:`QAvatar`,props:{...Ie,fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},setup(e,{slots:t}){let n=j(()=>`q-avatar`+(e.color?` bg-${e.color}`:``)+(e.textColor?` text-${e.textColor} q-chip--colored`:``)+(e.square?` q-avatar--square`:e.rounded?` rounded-borders`:``)),r=j(()=>e.fontSize?{fontSize:e.fontSize}:null);return()=>{let i=e.icon===void 0?void 0:[h(Re,{name:e.icon})],a={class:n.value};return e.size!==void 0&&(a.style=Le(e.size)),h(`div`,a,[h(`div`,{class:`q-avatar__content row flex-center overflow-hidden`,style:r.value},ke(t.default,i))])}}}),Pl=0,Fl={},Il={},Ll={},Rl={},zl=/^\s*$/,Bl=[],Vl=[void 0,null,!0,!1,``],Hl=[`top-left`,`top-right`,`bottom-left`,`bottom-right`,`top`,`bottom`,`left`,`right`,`center`],Ul=[`top-left`,`top-right`,`bottom-left`,`bottom-right`],Wl={positive:{icon:e=>e.iconSet.type.positive,color:`positive`},negative:{icon:e=>e.iconSet.type.negative,color:`negative`},warning:{icon:e=>e.iconSet.type.warning,color:`warning`,textColor:`dark`},info:{icon:e=>e.iconSet.type.info,color:`info`},ongoing:{group:!1,timeout:0,spinner:!0,color:`grey-8`}};function Gl(e,t,n){if(!e)return Jl(`parameter required`);let r,i={textColor:`white`};if(e.ignoreDefaults||Object.assign(i,Fl),Wt(e)||(i.type&&Object.assign(i,Wl[i.type]),e={message:e}),Object.assign(i,Wl[e.type||i.type],e),typeof i.icon==`function`&&(i.icon=i.icon(t)),i.spinner=i.spinner?i.spinner===!0?Ue:c(i.spinner):!1,i.meta={hasMedia:!!(i.spinner||i.icon||i.avatar),hasText:ql(i.message)||ql(i.caption)},i.position){if(!Hl.includes(i.position))return Jl(`wrong position`,e)}else i.position=`bottom`;if(Vl.includes(i.timeout))i.timeout=5e3;else{let t=Number.parseFloat(i.timeout);if(!Number.isFinite(t)||t<0)return Jl(`wrong timeout`,e);i.timeout=t}i.timeout===0?i.progress=!1:i.progress&&(i.meta.progressClass=`q-notification__progress`+(i.progressClass?` ${i.progressClass}`:``),i.meta.progressStyle={animationDuration:`${i.timeout+1e3}ms`});let a=[...Array.isArray(e.actions)?e.actions:[],...!e.ignoreDefaults&&Array.isArray(Fl.actions)?Fl.actions:[],...Array.isArray(Wl[e.type]?.actions)?Wl[e.type].actions:[]],{closeBtn:o}=i;if(o&&a.push({label:typeof o==`string`?o:t.lang.label.close}),i.actions=a.map(({handler:e,noDismiss:t,...n})=>({flat:!0,...n,onClick:typeof e==`function`?()=>{e(),t||s()}:()=>{s()}})),i.multiLine===void 0&&(i.multiLine=i.actions.length>1),Object.assign(i.meta,{class:`q-notification row items-stretch q-notification--${i.multiLine?`multi-line`:`standard`}`+(i.color===void 0?``:` bg-${i.color}`)+(i.textColor===void 0?``:` text-${i.textColor}`)+(i.classes===void 0?``:` ${i.classes}`),wrapperClass:`q-notification__wrapper col relative-position border-radius-inherit `+(i.multiLine?`column no-wrap justify-center`:`row items-center`),contentClass:`q-notification__content row items-center`+(i.multiLine?``:` col`),leftClass:i.meta.hasText?`additional`:`single`,attrs:{role:`alert`,...i.attrs}}),i.group===!1?(i.group=void 0,i.meta.group=void 0):((i.group===void 0||i.group===!0)&&(i.group=[i.message,i.caption,i.multiLine,...i.actions.map(e=>`${e.label}*${e.icon}`)].join(`|`)),i.meta.group=i.group+`|`+i.position),i.actions.length===0?i.actions=void 0:i.meta.actionsClass=`q-notification__actions row items-center `+(i.multiLine?`justify-end`:`col-auto`)+(i.meta.hasMedia?` q-notification__actions--with-media`:``),n!==void 0){n.notif.meta.timer&&(clearTimeout(n.notif.meta.timer),n.notif.meta.timer=void 0),i.meta.uid=n.notif.meta.uid;let e=Ll[i.position].value.indexOf(n.notif);Ll[i.position].value[e]=i}else{let t=Il[i.meta.group];if(t===void 0){if(i.meta.uid=Pl++,i.meta.badge=1,[`left`,`right`,`center`].includes(i.position))Ll[i.position].value.splice(Math.floor(Ll[i.position].value.length/2),0,i);else{let e=i.position.includes(`top`)?`unshift`:`push`;Ll[i.position].value[e](i)}i.group!==void 0&&(Il[i.meta.group]=i)}else{if(t.meta.timer&&(clearTimeout(t.meta.timer),t.meta.timer=void 0),i.badgePosition!==void 0){if(!Ul.includes(i.badgePosition))return Jl(`wrong badgePosition`,e)}else i.badgePosition=`top-${i.position.includes(`left`)?`right`:`left`}`;i.meta.uid=t.meta.uid,i.meta.badge=t.meta.badge+1,i.meta.badgeClass=`q-notification__badge q-notification__badge--${i.badgePosition}`+(i.badgeColor===void 0?``:` bg-${i.badgeColor}`)+(i.badgeTextColor===void 0?``:` text-${i.badgeTextColor}`)+(i.badgeClass?` ${i.badgeClass}`:``);let n=Ll[i.position].value.indexOf(t);Ll[i.position].value[n]=Il[i.meta.group]=i}}let s=()=>{Kl(i),r=void 0};if(i.timeout>0&&(i.meta.timer=setTimeout(()=>{i.meta.timer=void 0,s()},i.timeout+1e3)),i.group!==void 0)return t=>{t===void 0?s():Jl(`trying to update a grouped one which is forbidden`,e)};if(r={dismiss:s,config:e,notif:i},n!==void 0){Object.assign(n,r);return}return e=>{r!==void 0&&(e===void 0?r.dismiss():Gl({...r.config,...e,group:!1,position:i.position},t,r))}}function Kl(e){e.meta.timer&&(clearTimeout(e.meta.timer),e.meta.timer=void 0);let t=Ll[e.position].value.indexOf(e);if(t!==-1){e.group!==void 0&&delete Il[e.meta.group];let n=Bl[String(e.meta.uid)];if(n){let{width:e,height:t}=getComputedStyle(n);n.style.left=`${n.offsetLeft}px`,n.style.width=e,n.style.height=t}Ll[e.position].value.splice(t,1),typeof e.onDismiss==`function`&&e.onDismiss()}}function ql(e){return e!=null&&!zl.test(e)}function Jl(e,t){return console.error(`Notify: ${e}`,t),!1}function Yl(){return Pe({name:`QNotifications`,devtools:{hide:!0},setup(){return()=>h(`div`,{class:`q-notifications`},Hl.map(e=>h(Ae,{key:e,class:Rl[e],tag:`div`,name:`q-notification--${e}`},()=>Ll[e].value.map(e=>{let t=e.meta,n=[];if(t.hasMedia&&(e.spinner?n.push(h(e.spinner,{class:`q-notification__spinner q-notification__spinner--`+t.leftClass,color:e.spinnerColor,size:e.spinnerSize})):e.icon?n.push(h(Re,{class:`q-notification__icon q-notification__icon--`+t.leftClass,name:e.icon,color:e.iconColor,size:e.iconSize,role:`img`})):e.avatar&&n.push(h(Nl,{class:`q-notification__avatar q-notification__avatar--`+t.leftClass},()=>h(`img`,{src:e.avatar,"aria-hidden":`true`})))),t.hasText){let t,r={class:`q-notification__message col`};if(e.html)r.innerHTML=e.caption?`<div>${e.message}</div><div class="q-notification__caption">${e.caption}</div>`:e.message;else{let n=[e.message];t=e.caption?[h(`div`,n),h(`div`,{class:`q-notification__caption`},[e.caption])]:n}n.push(h(`div`,r,t))}let r=[h(`div`,{class:t.contentClass},n)];return e.progress&&r.push(h(`div`,{key:`${t.uid}|p|${t.badge}`,class:t.progressClass,style:t.progressStyle})),e.actions&&r.push(h(`div`,{class:t.actionsClass},e.actions.map(e=>h(He,e)))),t.badge>1&&r.push(h(`div`,{key:`${t.uid}|${t.badge}`,class:e.meta.badgeClass,style:e.badgeStyle},[t.badge])),h(`div`,{ref:e=>{Bl[String(t.uid)]=e},key:t.uid,class:t.class,...t.attrs},[h(`div`,{class:t.wrapperClass},r)])}))))}})}var Xl={setDefaults(e){Wt(e)&&Object.assign(Fl,e)},registerType(e,t){Wt(t)&&(Wl[e]=t)},install({$q:e,parentApp:t}){if(e.notify=this.create=t=>Gl(t,e),e.notify.setDefaults=this.setDefaults,e.notify.registerType=this.registerType,e.config.notify!==void 0&&this.setDefaults(e.config.notify),!this.__installed){Hl.forEach(e=>{Ll[e]=m([]);let t=e===`left`||e===`center`||e===`right`?`center`:e.includes(`top`)?`top`:`bottom`,n=e.includes(`left`)?`start`:e.includes(`right`)?`end`:`center`;Rl[e]=`q-notifications__list q-notifications__list--${t} fixed column no-wrap ${e===`left`||e===`right`?`items-${e===`left`?`start`:`end`} justify-center`:e===`center`?`flex-center`:`items-${n}`}`});let e=F(`q-notify`);Xt(Yl(),t).mount(e)}}},Zl=class{constructor(){st(this,`pending`,new Map)}wait(e,t,n){return new Promise((r,i)=>{let a=setTimeout(()=>o(Error(n)),3e4),o=e=>{clearTimeout(a),this.pending.delete(t),e?i(e):r()};this.pending.set(t,{workspaceId:e,finish:o})})}settle(e,t,n){let r=this.pending.get(t);r?.workspaceId===e&&r.finish(n)}disconnect(e){for(let t of this.pending.values())t.finish(Error(e))}},Ql=new Map,$l=m(0);function eu(){$l.value++}function tu(e){e.reconnectTimer&&=(clearTimeout(e.reconnectTimer),void 0)}function nu(e){let t=Ql.get(e);t&&(tu(t),t.ws&&(t.ws.onclose=null,t.ws.readyState===WebSocket.OPEN&&t.ws.close()),t.onDataDisposable?.dispose(),t.terminal.dispose(),Ql.delete(e),eu())}var ru=5e3,iu=Cr(`agent-stream`,()=>{let e=i(new Map),t=i(new Map),n=i(new Map),r=i(new Map),a=i(new Map),o=i(new Map),s=i(new Map),c=i(new Map),l=m(new Map),u=i(new Map);function d(e,t){f(e);let n=0;for(let[r,i]of u.value.get(e)??[])t(r)&&(n+=i);return n}function f(e){l.value.get(e)}function p(e){l.value.set(e,(l.value.get(e)??0)+1)}function h(e){return l.value.get(e)??0}function g(e){let t=c.value.get(e);return t||(t=new Set,c.value.set(e,t)),t}function _(e){return f(e),s.value.get(e)??!1}function v(e,t){(s.value.get(e)??!1)!==t&&(s.value.set(e,t),p(e))}function y(t){return f(t),e.value.get(t)??[]}function b(e){return f(e),t.value.get(e)??[]}function x(e){return f(e),n.value.get(e)??[]}function S(e){return f(e),r.value.get(e)??[]}function C(e){return f(e),a.value.get(e)}function w(e){return f(e),o.value.get(e)??!0}function T(i,o,s,c,l,d=!0){let f=e.value.get(i)??[],m=t.value.get(i)??[],h=n.value.get(i)??[],_=r.value.get(i)??[],v=g(i);if(c&&v.has(c))return;if(d){let e=u.value.get(i)??new Map;e.set(l??null,(e.get(l??null)??0)+1),u.value.set(i,e)}let y=f.length===0;f.push(o),m.push(s??new Date().toISOString()),h.push(l??null),_.push(c??null),c&&v.add(c),e.value.set(i,f),t.value.set(i,m),n.value.set(i,h),r.value.set(i,_),y&&c&&a.value.set(i,c),E(i,f,m,h,_),p(i)}function E(e,t,n,r,i){let s=t.length-ru;if(s<=0)return;let c=s+500-1,l=i.slice(0,c),u=g(e);for(let e of l)e&&u.delete(e);t.splice(0,c),n.splice(0,c),r.splice(0,c),i.splice(0,c);let d=i.find(e=>typeof e==`string`);d?a.value.set(e,d):a.value.delete(e),o.value.set(e,!0)}function D(i,o,s,c){let l=e.value.get(i)??[],u=t.value.get(i)??[],d=n.value.get(i)??[],f=r.value.get(i)??[],m=g(i),h=[];for(let e=0;e<o.length;e++){let t=o[e];if(!t)continue;let n=c.eventIds[e]??null;n&&m.has(n)||(l.push(t),u.push(s[e]??new Date().toISOString()),d.push(c.sessionIds[e]??null),f.push(n),n&&m.add(n),h.push(e))}if(h.length===0)return h;if(e.value.set(i,l),t.value.set(i,u),n.value.set(i,d),r.value.set(i,f),!a.value.has(i)){let e=f.find(e=>typeof e==`string`);e&&a.value.set(i,e)}return E(i,l,u,d,f),p(i),h}function O(i,s,c,l){let u=[...s],d=c?[...c]:s.map(()=>new Date().toISOString()),f=l?.sessionIds?[...l.sessionIds]:s.map(()=>null),m=l?.eventIds?[...l.eventIds]:s.map(()=>null);e.value.set(i,u),t.value.set(i,d),n.value.set(i,f),r.value.set(i,m);let h=g(i);h.clear();for(let e of m)e&&h.add(e);l?.oldestId?a.value.set(i,l.oldestId):a.value.delete(i),l&&typeof l.hasMoreOlder==`boolean`?o.value.set(i,l.hasMoreOlder):o.value.delete(i),E(i,u,d,f,m),p(i)}function k(i,s,c,l){if(s.length===0){o.value.set(i,l.hasMoreOlder),p(i);return}let u=e.value.get(i)??[],d=t.value.get(i)??[],f=n.value.get(i)??[],m=r.value.get(i)??[],h=l.sessionIds??s.map(()=>null),_=l.eventIds??s.map(()=>null);e.value.set(i,[...s,...u]),t.value.set(i,[...c,...d]),n.value.set(i,[...h,...f]),r.value.set(i,[..._,...m]);let v=g(i);for(let e of _)e&&v.add(e);l.oldestId&&a.value.set(i,l.oldestId),o.value.set(i,l.hasMoreOlder),p(i)}function A(i,a){let o=e.value.get(i),s=r.value.get(i);if(!o||!s)return;let c=s.indexOf(a);if(c===-1)return;let l=t.value.get(i),u=n.value.get(i);o.splice(c,1),s.splice(c,1),l&&l.splice(c,1),u&&u.splice(c,1),g(i).delete(a),p(i)}function ee(i){e.value.delete(i),t.value.delete(i),n.value.delete(i),r.value.delete(i),a.value.delete(i),o.value.delete(i),s.value.delete(i),c.value.delete(i),u.value.delete(i),p(i)}return{events:e,timestamps:t,sessionIds:n,eventIds:r,versions:l,versionFor:h,liveAppendCountFor:d,eventsFor:y,timestampsFor:b,sessionIdsFor:x,eventIdsFor:S,oldestIdFor:C,hasMoreOlderFor:w,isCompacting:_,setCompacting:v,append:T,merge:D,reset:O,prepend:k,removeByEventId:A,clear:ee}}),au=Cr(`auto-loop-review`,{state:()=>({finalReviews:{},returns:{},finalVersions:{},returnVersions:{}}),actions:{setFinalReview(e,t){this.finalVersions[e]=(this.finalVersions[e]??0)+1,this.finalReviews[e]=t},async fetchFinalReview(e){let t=(this.finalVersions[e]??0)+1;this.finalVersions[e]=t;let n=await Y(`/api/workspaces/${e}/auto-loop/final-review`,{cache:`no-store`});this.finalVersions[e]===t&&(this.finalReviews[e]=n)},async saveFinalReview(e,t){let n=(this.finalVersions[e]??0)+1;this.finalVersions[e]=n;let r=await Y(`/api/workspaces/${e}/auto-loop/final-review`,{method:`PATCH`,body:{configuration:t}});this.finalVersions[e]===n&&(this.finalReviews[e]=r)},setReturn(e,t){this.returnVersions[e]=(this.returnVersions[e]??0)+1,this.returns[e]=t},async fetchReturn(e){e in this.returns||(this.returns[e]=null);let t=(this.returnVersions[e]??0)+1;this.returnVersions[e]=t;let n=await Y(`/api/workspaces/${e}/review-return`,{cache:`no-store`});this.returnVersions[e]===t&&(this.returns[e]=n)},async resolveReturn(e,t){await Y(`/api/workspaces/${e}/review-return/${t}`,{method:`POST`}),await this.fetchReturn(e)},async refreshKnown(){await Promise.allSettled([...Object.keys(this.finalReviews).map(e=>this.fetchFinalReview(e)),...Object.keys(this.returns).map(e=>this.fetchReturn(e))])},forget(e){this.finalVersions[e]=(this.finalVersions[e]??0)+1,this.returnVersions[e]=(this.returnVersions[e]??0)+1,delete this.finalReviews[e],delete this.returns[e]}}}),ou=5e3,su=Cr(`progress-bars`,()=>{let e=m(null),t=m(null),n=m({}),r=m({}),i=m(null),a=null,o=m(Date.now()),s=m(0),c=0,l=0,u,f=j(()=>Object.values(n.value).filter(e=>!e.dismissed&&!r.value[e.id]&&!(e.status===`succeeded`&&e.completedAt&&Date.parse(e.completedAt)+5e3<=o.value+s.value)).sort((e,t)=>e.createdAt.localeCompare(t.createdAt)||e.id.localeCompare(t.id)));function p(){clearTimeout(u),u=void 0,o.value=Date.now(),i.value===`dismiss`&&!f.value.some(e=>e.id===a)&&(i.value=null,a=null);let e=f.value.flatMap(e=>e.status===`succeeded`&&e.completedAt?[Date.parse(e.completedAt)+ou-s.value]:[]);e.length&&(u=setTimeout(p,Math.max(1,Math.min(...e)-Date.now())))}function h(){c++,l++,clearTimeout(u),u=void 0,e.value=null,t.value=null,n.value={},r.value={},i.value=null,a=null,s.value=0,o.value=Date.now()}function g(n,r){(e.value!==n||t.value!==r)&&(h(),e.value=n,t.value=r)}function _(r){if(r.workspaceId!==e.value||r.sessionId!==t.value)return;let i=n.value[r.id];i&&r.revision<=i.revision||!i&&Object.keys(n.value).length>=1e3||(n.value[r.id]={...r,dismissed:r.dismissed||i?.dismissed===!0,dismissedAt:i?.dismissedAt??r.dismissedAt},p())}async function v(){if(!e.value||!t.value)return;let n={workspaceId:e.value,sessionId:t.value},r=c,a=++l,o=()=>r===c&&a===l,u=0;try{do{let e=await Y(`/api/progress-bars?${new URLSearchParams({...n,limit:`100`,offset:String(u)})}`);if(!o())return;let t=Date.parse(e.serverTime);Number.isFinite(t)&&(s.value=t-Date.now());for(let t of e.items)_(t);p();let r=e.nextOffset;if(r!==null&&(r<=u||r>=1e3))break;u=r}while(u!==null);o()&&i.value===`load`&&(i.value=null)}catch{o()&&(i.value=`load`)}}async function y(o){if(!e.value||!t.value||!n.value[o]||r.value[o])return!1;let s=c;r.value[o]=!0,i.value=null,a=null,p();try{let n=await Y(`/api/progress-bars/${encodeURIComponent(o)}/dismiss`,{method:`POST`,body:{workspaceId:e.value,sessionId:t.value}});return s===c&&(_(n),!0)}catch{return s===c&&!n.value[o]?.dismissed&&(i.value=`dismiss`,a=o),!1}finally{s===c&&(delete r.value[o],p())}}return d(h),{workspaceId:e,sessionId:t,records:n,pendingDismissals:r,error:i,visible:f,selectScope:g,apply:_,refresh:v,dismiss:y,reset:h}});function cu(e){return!!e&&e.state!==`completed`&&e.state!==`cancelled`}function lu(){let e=null;return{begin(){return e?.abort(),e=new AbortController,e.signal},isCurrent(t){return e!==null&&e.signal===t&&!t.aborted},abort(){e?.abort(),e=null}}}function uu(e){return(e instanceof DOMException||typeof e==`object`&&!!e)&&e.name===`AbortError`}function du(e){return![`local_bash`,`local_workflow`,`mcp_task`].includes(e.taskType??``)}function fu(e){return e.state===`OPEN`&&e.reviewDecision===`CHANGES_REQUESTED`&&e.reviewers.some(e=>e.state===`CHANGES_REQUESTED`)}function pu(e){return e.state===`OPEN`&&e.ci.rollup===`FAILURE`}function mu(e){return e?pu(e)||fu(e):!1}var hu=[`executing`,`extracting`,`brainstorming`,`compacting`];function gu(e){return!!e&&hu.includes(e)}function _u(e,t){return gu(e)&&!t}function vu(e,t,n){return _u(e,!t||n)}var yu=[`created`,`extracting`,`brainstorming`,`executing`,`compacting`,`awaiting-user`,`completed`,`idle`,`error`,`quota`],bu={created:`workspaceStatus.created`,extracting:`workspaceStatus.extracting`,brainstorming:`workspaceStatus.brainstorming`,executing:`workspaceStatus.executing`,compacting:`workspaceStatus.compacting`,"awaiting-user":`workspaceStatus.awaitingUser`,completed:`workspaceStatus.completed`,idle:`workspaceStatus.idle`,error:`workspaceStatus.error`,quota:`workspaceStatus.quota`};function xu(e){return e?bu[e]??null:null}async function Su(e){let t=await e.json().catch(()=>({}));return{ok:!0,branch:t.branch??``,upToDate:t.upToDate===!0}}var Cu=class extends Error{constructor(e,t,n){super(e),st(this,`code`,void 0),st(this,`operation`,void 0),this.name=`WorkspaceActionError`,this.code=t,this.operation=n}};function wu(e){return e===`running`?`in_progress`:e}var Tu=5e3,Eu=500,Du=null,Ou=0,ku=0,Au=new Map,ju=new Map,Mu=new Map,Nu=new WeakMap;function Pu(e){let t=Nu.get(e);return t||(t=new Map,Nu.set(e,t)),t}var Fu=new Map,Iu=new Map,Lu=new WeakMap;function Ru(e){ju.set(e,(ju.get(e)??0)+1)}function zu(e,t,n){let r={...e},i=new Set([...Object.keys(e),...Object.keys(t)]);for(let a of i){let i=t[a],o=e[a],s=(ju.get(a)??0)!==(n.get(a)??0),c=i?Date.parse(i.updatedAt):NaN,l=o?Date.parse(o.updatedAt):NaN;(s||Number.isFinite(c)&&c>l)&&(i?r[a]=i:delete r[a])}return r}function Bu(e){return e===`claude-code`?`claude-code`:null}var Z=Cr(`workspace`,{state:()=>({workspaces:[],selectedWorkspaceId:null,tasks:[],activityFeeds:{},activityFeedIds:{},activityCounts:{},subagents:{},agentTodos:{},sessions:[],loadingSessions:{},sessionsErrors:{},selectedSessionId:null,archivedWorkspaces:[],archivedLoaded:!1,restoringWorktreeIds:[],workspaceLifecycleVersion:0,workspaceLifecycleVersions:{},listRequestVersion:0,archivedListRequestVersion:0,loading:!1,listLoadError:null,listPollFailureStreak:0,activeListLoadFailed:!1,loadingOlderEvents:!1,hasMoreEvents:{},providerUsage:{},chatDraft:``,queuedMessages:{},activeAgentSessionIds:{},settledAgentSessionIds:{},gitRefreshTrigger:0,gitStatsCache:{},pendingWakeups:{},pendingQuotaBackoffs:{},pendingDeferred:{},pendingQueue:{},prSnapshots:{},autoLoopStates:{},autoLoopMessages:{},autoLoopMessageVersions:{},autoLoopSnapshotVersion:0,autoLoopMessageKeys:{},autoLoopQueueTransfers:{},crons:{},creationProgress:null,agentLiveness:{},agentLivenessLoaded:{}}),getters:{selectedWorkspace:e=>e.workspaces.find(t=>t.id===e.selectedWorkspaceId)??e.archivedWorkspaces.find(t=>t.id===e.selectedWorkspaceId)??null,needsAttention(e){return e.workspaces.filter(t=>[`error`,`quota`,`awaiting-user`].includes(t.status)||mu(e.prSnapshots[t.id])||!gu(t.status)&&!!e.prSnapshots[t.id]?.readyToMerge)},running(e){return e.workspaces.filter(t=>gu(t.status)&&!mu(e.prSnapshots[t.id]))},idle(e){return e.workspaces.filter(t=>[`completed`,`idle`,`created`].includes(t.status)&&!mu(e.prSnapshots[t.id])&&!e.prSnapshots[t.id]?.readyToMerge)},favorites(e){return e.workspaces.filter(e=>e.favoritedAt!==null)},currentAgentTodos:e=>e.selectedWorkspaceId?e.agentTodos[e.selectedWorkspaceId]??[]:[],currentSubagents:e=>{if(!e.selectedWorkspaceId)return[];let t=e.subagents[e.selectedWorkspaceId]??{};return Object.values(t).filter(du).sort((e,t)=>e.startedAt.localeCompare(t.startedAt))},currentBusySubagentCount(){return this.currentSubagents.filter(e=>e.status===`running`&&!e.ambient).length},activityFeed:e=>{if(!e.selectedWorkspaceId)return[];let t=e.activityFeeds[e.selectedWorkspaceId]??[];if(!e.selectedSessionId)return e.sessions.length===0?t:[];let n=e.sessions.find(t=>t.id===e.selectedSessionId)?.engineSessionId??null,r=e.sessions.length>0?e.sessions[e.sessions.length-1].id:null,i=e.selectedSessionId===r;return t.filter(t=>t.sessionId?t.sessionId===e.selectedSessionId||n!==null&&t.sessionId===n:i)},acceptanceCriteria:e=>e.tasks.filter(e=>e.isAcceptanceCriterion),archived:e=>e.archivedWorkspaces,currentProviderUsage(e){let t=e.workspaces.find(t=>t.id===e.selectedWorkspaceId);if(!t)return null;let n=Bu(t.engine);return n?e.providerUsage[n]??null:null}},actions:{clearWorkspaceLocalState(e){delete this.activityFeeds[e],delete this.activityFeedIds[e],delete this.activityCounts[e],delete this.subagents[e],delete this.agentTodos[e],delete this.hasMoreEvents[e],delete this.gitStatsCache[e],delete this.pendingWakeups[e],delete this.pendingQuotaBackoffs[e],delete this.pendingDeferred[e],delete this.pendingQueue[e],delete this.prSnapshots[e],delete this.autoLoopStates[e],delete this.autoLoopMessages[e],delete this.autoLoopMessageKeys[e],delete this.crons[e],delete this.activeAgentSessionIds[e];for(let t of Object.keys(this.queuedMessages))t.startsWith(`${e}:`)&&delete this.queuedMessages[t];Au.delete(e),ju.delete(e),Mu.delete(e),Pu(this).get(e)?.abort(),Pu(this).delete(e),delete this.loadingSessions[e],delete this.sessionsErrors[e],Fu.delete(e),iu().clear(e),localStorage.removeItem(`kobo:session:${e}`)},setCreationProgress(e){this.creationProgress=e},clearCreationProgress(){this.creationProgress=null},async toggleFavorite(e){let t=this.workspaces.find(t=>t.id===e);if(!t)return;let n=t.favoritedAt,r=n===null,i=r?new Date().toISOString():null;this.workspaces=this.workspaces.map(t=>t.id===e?{...t,favoritedAt:i}:t);try{let t=await J(`/api/workspaces/${e}/favorite`,{method:r?`POST`:`DELETE`});if(!t.ok)throw await q(t);let n=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t)}catch(t){throw this.workspaces=this.workspaces.map(t=>t.id===e?{...t,favoritedAt:n}:t),t}},async togglePrWatch(e){let t=this.workspaces.find(t=>t.id===e);if(!t)return;let n=t.prWatchDisabledAt===null,r=n?new Date().toISOString():null;this.workspaces=this.workspaces.map(t=>t.id===e?{...t,prWatchDisabledAt:r}:t);try{let t=await J(`/api/workspaces/${e}/pr-watch-disabled`,{method:n?`POST`:`DELETE`});if(!t.ok)throw await q(t);if(n){let n=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t),delete this.prSnapshots[e],Ru(e)}else{let{workspace:n,prSnapshot:r}=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t),r?this.prSnapshots[e]=r:delete this.prSnapshots[e],Ru(e)}}catch(n){throw this.workspaces=this.workspaces.map(n=>n.id===e?{...n,prWatchDisabledAt:t.prWatchDisabledAt}:n),n}},async setWorkspaceTags(e,t){let n=this.workspaces.find(t=>t.id===e);if(!n)return;let r=n.tags,i=[...t];this.workspaces=this.workspaces.map(t=>t.id===e?{...t,tags:i}:t);try{let n=await J(`/api/workspaces/${e}/tags`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tags:t})});if(!n.ok)throw await q(n);let r=await n.json();this.workspaces=this.workspaces.map(t=>t.id===e?r:t)}catch(t){throw this.workspaces=this.workspaces.map(t=>t.id===e?{...t,tags:r}:t),t}},async fetchOrphanWorktrees(e){return Y(`/api/git/orphan-worktrees?projectPath=${encodeURIComponent(e)}`,{cache:`no-store`})},async fetchWorkspaces(){let e=++this.listRequestVersion,t=new Map(Au),n=this.workspaceLifecycleVersion;this.loading=!0;try{let r=await Y(`/api/workspaces`);if(e!==this.listRequestVersion||n!==this.workspaceLifecycleVersion)return;let i=new Map(this.workspaces.map(e=>[e.id,e]));this.workspaces=(Array.isArray(r)?r:r.workspaces??[]).map(e=>(Au.get(e.id)??0)===(t.get(e.id)??0)?e:i.get(e.id)??e),this.listLoadError=null,this.activeListLoadFailed=!1,this.listPollFailureStreak=0;for(let e of this.workspaces)iu().setCompacting(e.id,e.status===`compacting`),[`completed`,`idle`,`error`,`quota`].includes(e.status)&&this.finalizeRunningSubagents(e.id)}catch(t){if(e!==this.listRequestVersion||n!==this.workspaceLifecycleVersion)return;this.listLoadError=t instanceof Error?t.message:String(t),this.activeListLoadFailed=!0,console.error(`[workspace store] fetchWorkspaces failed:`,t)}finally{e===this.listRequestVersion&&(this.loading=!1)}},async retryLoadWorkspaces(){await this.fetchWorkspaces(),this.archivedLoaded&&await this.fetchArchivedWorkspaces()},async fetchArchivedWorkspaces(){let e=++this.archivedListRequestVersion,t=new Map(Au),n=this.workspaceLifecycleVersion;try{let r=await Y(`/api/workspaces/archived`);if(e!==this.archivedListRequestVersion||n!==this.workspaceLifecycleVersion)return;let i=new Map(this.archivedWorkspaces.map(e=>[e.id,e]));this.archivedWorkspaces=r.map(e=>(Au.get(e.id)??0)===(t.get(e.id)??0)?e:i.get(e.id)??e),this.archivedLoaded=!0,this.activeListLoadFailed||(this.listLoadError=null)}catch(t){if(e!==this.archivedListRequestVersion||n!==this.workspaceLifecycleVersion)return;this.listLoadError=t instanceof Error?t.message:String(t),console.error(`[workspace store] fetchArchivedWorkspaces failed:`,t)}},async fetchWorkspaceDetails(e){let t=this.workspaceLifecycleVersions[e]??0,n=(Fu.get(e)??0)+1;Fu.set(e,n);let r=Au.get(e)??0;try{let i=await Y(`/api/workspaces/${e}`);if(this.selectedWorkspaceId!==e||Fu.get(e)!==n)return;if(t===(this.workspaceLifecycleVersions[e]??0)){let t=(Au.get(e)??0)!==r,n=i.workspace??i,a=t?{}:n;typeof a.status==`string`&&iu().setCompacting(e,a.status===`compacting`);let o=this.workspaces.findIndex(t=>t.id===e);if(o>=0)this.workspaces[o]={...this.workspaces[o],...a};else{let t=this.archivedWorkspaces.findIndex(t=>t.id===e);t>=0?this.archivedWorkspaces[t]={...this.archivedWorkspaces[t],...a}:a?.archivedAt&&this.archivedWorkspaces.unshift(a)}}i.tasks&&(this.tasks=i.tasks),`agentLiveness`in i&&(Au.get(e)??0)===r&&this.applyAgentLiveness(e,i.agentLiveness)}catch(e){console.error(`[workspace store] fetchWorkspaceDetails failed:`,e)}},applyAgentLiveness(e,t){if(this.agentLivenessLoaded={...this.agentLivenessLoaded,[e]:!0},t){this.agentLiveness={...this.agentLiveness,[e]:t};return}if(e in this.agentLiveness){let t={...this.agentLiveness};delete t[e],this.agentLiveness=t}},async createWorkspace(e,t=[]){try{let n=JSON.stringify(e);if(t.length>0){n=new FormData,n.append(`workspace`,JSON.stringify(e));for(let e of t)n.append(`attachments`,e)}let r=await J(`/api/workspaces`,{method:`POST`,...typeof n==`string`?{headers:{"Content-Type":`application/json`}}:{},body:n});if(!r.ok){let e=await r.json().catch(()=>({}));throw new Cu(typeof e.error==`string`?e.error:`HTTP ${r.status}`,typeof e.step==`string`?e.step:void 0)}let i=r.headers.get(`X-Kobo-Branch-Adjusted`)===`1`,a=r.headers.get(`X-Kobo-Source-Fallback`)===`local`,o=await r.json(),s=o.workspace??o;this.invalidateWorkspaceLifecycleReads(s.id);let c=this.workspaces.findIndex(e=>e.id===s.id);return c>=0?this.workspaces[c]=s:this.workspaces.push(s),e.autoLoop&&this.fetchAutoLoopStates(),s._branchAdjusted=i,s._sourceFallback=a,s}catch(e){throw console.error(`[workspace store] createWorkspace failed:`,e),e}},async startWorkspace(e,t,n,r){try{await Y(`/api/workspaces/${e}/start`,{method:`POST`,body:{prompt:t,agentSessionId:n,resume:r}}),await this.fetchWorkspaces()}catch(e){throw console.error(`[workspace store] startWorkspace failed:`,e),e}},async previewEngineHandoff(e,t){let n=await J(`/api/workspaces/${e}/engine-handoff-preview`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({engine:t})}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);return r.handoff},async switchEngine(e,t){let n=await J(`/api/workspaces/${e}/switch-engine`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);let i=r.workspace,a=this.workspaces.findIndex(t=>t.id===e);return a>=0&&(this.workspaces[a]=i),await this.fetchSessions(e,r.sessionId),{sessionId:r.sessionId}},async stopWorkspace(e){try{await ac(`/api/workspaces/${e}/stop`,{method:`POST`}),await this.fetchWorkspaces()}catch(e){throw console.error(`[workspace store] stopWorkspace failed:`,e),e}},async interruptAgent(e,t={}){try{let n=await rc(`/api/workspaces/${e}/interrupt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>void 0),t=typeof e==`object`&&e&&!Array.isArray(e)?e:void 0,r=typeof t?.error==`string`?t.error:`HTTP ${n.status}`,i=t?.code;throw new Cu(r,n.status===409&&(i===`no_agent_running`||i===`session_not_active`)||n.status===500&&i===`interrupt_failed`?i:void 0)}}catch(e){throw console.error(`[workspace store] interruptAgent failed:`,e),e}},async stopSubagents(e,t){try{let n=await J(`/api/workspaces/${e}/subagents/stop`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t===void 0?{}:{id:t})}),r=await n.json().catch(()=>void 0),i=typeof r==`object`&&r&&!Array.isArray(r)?r:void 0;if(!n.ok)throw new Cu(typeof i?.error==`string`?i.error:`HTTP ${n.status}`,typeof i?.code==`string`?i.code:void 0);return typeof i?.stopped==`number`?i.stopped:0}catch(e){throw console.error(`[workspace store] stopSubagents failed:`,e),e}},async deleteWorkspace(e,t){try{let n=await J(`/api/workspaces/${e}`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t??{})});if(!n.ok)throw await q(n);let r=[];if(n.status===200){let e=await n.json().catch(()=>({}));r=Array.isArray(e.warnings)?e.warnings:[]}return this.workspaces=this.workspaces.filter(t=>t.id!==e),this.archivedWorkspaces=this.archivedWorkspaces.filter(t=>t.id!==e),this.clearWorkspaceLocalState(e),nu(e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]),{warnings:r}}catch(e){throw console.error(`[workspace store] deleteWorkspace failed:`,e),e}},async deleteAllArchived(e){try{let t=this.archivedWorkspaces.map(e=>e.id),n=await J(`/api/workspaces/archived`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e??{})});if(!n.ok)throw await q(n);let r=await n.json().catch(()=>({})),i=typeof r.deleted==`number`?r.deleted:0,a=Array.isArray(r.warnings)?r.warnings:[];this.archivedWorkspaces=[];for(let e of t)this.clearWorkspaceLocalState(e),nu(e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]);return{deleted:i,warnings:a,ids:t}}catch(e){throw console.error(`[workspace store] deleteAllArchived failed:`,e),e}},async updateModel(e,t){try{let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({model:t})});if(!n.ok)throw await q(n);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateModel failed:`,e),e}},async updateWorkspaceDescription(e,t){let n=this.workspaces.findIndex(t=>t.id===e);if(n<0)throw Error(`Workspace '${e}' not found in store`);let r=this.workspaces[n].description;this.workspaces[n]={...this.workspaces[n],description:t};try{let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({description:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json();this.workspaces=this.workspaces.map(t=>t.id===e?{...t,...r}:t)}catch(n){let i=this.workspaces.findIndex(t=>t.id===e);throw i>=0&&this.workspaces[i].description===t&&(this.workspaces[i]={...this.workspaces[i],description:r}),n}},async updateReasoningEffort(e,t){try{let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({reasoningEffort:t})});if(!n.ok)throw await q(n);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateReasoningEffort failed:`,e),e}},async renameWorkspaceBranch(e,t){let n=await J(`/api/workspaces/${e}/rename-branch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({newName:t})}),r=await n.json().catch(()=>null);if(!n.ok)throw new Cu(r?.error??`Rename failed`,r?.code);let i=r,a=this.workspaces.findIndex(t=>t.id===e);return a>=0&&(this.workspaces[a]=i),i},async resyncWorkspaceBranch(e){let t=await J(`/api/workspaces/${e}/resync-branch`,{method:`POST`});if(!t.ok)throw await q(t);let n=await t.json();if(n.changed){let t=this.workspaces.findIndex(t=>t.id===e);t>=0&&(this.workspaces[t]={...this.workspaces[t],workingBranch:n.workingBranch})}return n},async updateAgentPermissionMode(e,t){try{let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({agentPermissionMode:t})});if(!n.ok)throw await q(n);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateAgentPermissionMode failed:`,e),e}},async updateWorkflowPolicy(e,t){let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({workflowPolicy:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw new Cu(e.error??`HTTP ${n.status}`,e.code)}let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)},async pushBranch(e,t={}){let n=await J(`/api/workspaces/${e}/push`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({force:t.force===!0})});if(!n.ok){let e=await n.json().catch(()=>({error:`Push failed`}));throw new Cu(e.error??`Push failed`,e.code,e.operation)}return Su(n)},async forcePushBranch(e){let t=await J(`/api/workspaces/${e}/force-push`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({error:`Push failed`}));throw new Cu(e.error??`Push failed`,e.code,e.operation)}return Su(t)},async fetchGitStats(e,t={}){let n=await Y(`/api/workspaces/${e}/git-stats${t.freshFetch?`?freshFetch=1`:``}`,{signal:t.signal,timeoutMs:6e4});return this.gitStatsCache[e]=n,n},async fetchBranchDivergence(e,t={}){let n=await J(`/api/workspaces/${e}/branch-divergence?limit=${t.limit??50}`,{signal:t.signal});if(!n.ok)throw await q(n);return await n.json()},async openPullRequest(e){let t=await J(`/api/workspaces/${e}/open-pr`,{method:`POST`}),n=await t.json().catch(()=>null);if(!t.ok)throw new Cu(n?.error??`Open PR failed`,n?.code);return n},async archiveWorkspace(e){try{let t=await J(`/api/workspaces/${e}/archive`,{method:`POST`});if(!t.ok)throw await q(t);let n=await t.json();return this.workspaces=this.workspaces.filter(t=>t.id!==e),this.archivedLoaded&&this.archivedWorkspaces.unshift(n),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]),n}catch(e){throw console.error(`[workspace store] archiveWorkspace failed:`,e),e}},invalidateWorkspaceLifecycleReads(e){this.workspaceLifecycleVersion+=1,e&&(this.workspaceLifecycleVersions[e]=(this.workspaceLifecycleVersions[e]??0)+1)},applyRestoredWorkspace(e){this.invalidateWorkspaceLifecycleReads(e.id);let t=this.workspaces.findIndex(t=>t.id===e.id);t===-1?this.workspaces.unshift(e):this.workspaces[t]=e,this.archivedWorkspaces=this.archivedWorkspaces.filter(t=>t.id!==e.id)},restoreWorktree(e){let t=Lu.get(this);t||(t=new Map,Lu.set(this,t));let n=t.get(e);if(n)return n;let r=this.workspaceLifecycleVersions[e]??0;this.restoringWorktreeIds.push(e);let i=(async()=>{try{let t=await J(`/api/workspaces/${e}/restore-worktree`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({}));throw new Cu(e.error??`HTTP ${t.status}`,e.code)}let{workspace:n}=await t.json();return r===(this.workspaceLifecycleVersions[e]??0)&&this.applyRestoredWorkspace(n),n}finally{this.restoringWorktreeIds=this.restoringWorktreeIds.filter(t=>t!==e),t.delete(e)}})();return t.set(e,i),i},async unarchiveWorkspace(e){try{let t=await J(`/api/workspaces/${e}/unarchive`,{method:`POST`});if(!t.ok){if(t.status===409){let e=await t.json().catch(()=>({})),n=Error(e.error??`worktree-purged`);throw n.code=`worktree-purged`,n}throw await q(t)}let n=await t.json();return this.archivedWorkspaces=this.archivedWorkspaces.filter(t=>t.id!==e),this.workspaces.unshift(n),n}catch(e){throw console.error(`[workspace store] unarchiveWorkspace failed:`,e),e}},async createTask(e,t,n){try{await ac(`/api/workspaces/${e}/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t,isAcceptanceCriterion:n})}),await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] createTask failed:`,e),e}},async updateTaskTitle(e,t,n){try{await ac(`/api/workspaces/${e}/tasks/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:n})}),await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] updateTaskTitle failed:`,e),e}},async deleteTask(e,t){try{await ac(`/api/workspaces/${e}/tasks/${t}`,{method:`DELETE`}),await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] deleteTask failed:`,e),e}},cancelSessionReads(e){for(let[t,n]of Pu(this))e&&e!==t||(n.abort(),Pu(this).delete(t),delete this.loadingSessions[t])},selectWorkspace(e){this.cancelSessionReads(),this.selectedWorkspaceId=e,this.selectedSessionId=null,this.sessions=[],this.tasks=[],this.markRead(e),this.fetchWorkspaceDetails(e),this.fetchSessions(e),this.fetchPendingQuotaBackoff(e),this.fetchGitStats(e).catch(()=>{}),this.activityFeeds[e]?.length||If().subscribe(e)},async fetchSessions(e,t){let n=Pu(this);n.get(e)?.abort();let r=new AbortController;n.set(e,r);let i=(Mu.get(e)??0)+1;Mu.set(e,i),this.loadingSessions[e]=!0,delete this.sessionsErrors[e];try{let n=await J(`/api/workspaces/${e}/sessions`,{signal:r.signal});if(!n.ok)throw await q(n);let a=await n.json();if(this.selectedWorkspaceId!==e||Mu.get(e)!==i)return;if(this.sessions=a,t===null){this.selectSession(null);return}if(t&&this.sessions.some(e=>e.id===t)){this.selectSession(t);return}let o=this.selectedSessionId&&this.sessions.some(e=>e.id===this.selectedSessionId);if(this.sessions.length>0&&!o){let t=localStorage.getItem(`kobo:session:${e}`),n=this.sessions.filter(e=>(e.activationOrder??0)>=0),r=t?n.find(e=>e.id===t):null;this.selectSession(r?.id??n[0]?.id??null)}}catch(t){if(uu(t)||r.signal.aborted)return;Mu.get(e)===i&&(this.sessionsErrors[e]=t instanceof Error?t.message:String(t)),console.error(`[workspace store] fetchSessions failed:`,t)}finally{n.get(e)===r&&n.delete(e),Mu.get(e)===i&&delete this.loadingSessions[e]}},async fetchOlderEvents(e){if(this.loadingOlderEvents||this.hasMoreEvents[e]===!1)return!1;let t=this.activityFeeds[e];if(!t?.length)return!1;let n=t[0].id;this.loadingOlderEvents=!0;try{let t=await J(`/api/workspaces/${e}/events?before=${encodeURIComponent(n)}&limit=100`);if(!t.ok)throw await q(t);let r=await t.json();if(this.hasMoreEvents[e]=r.hasMore,r.events.length>0){let e=If();for(let t of r.events)e._routeMessage(t)}return r.events.length>0}catch(e){return console.error(`[workspace store] fetchOlderEvents failed:`,e),!1}finally{this.loadingOlderEvents=!1}},selectSession(e){if(this.selectedSessionId=e,this.selectedWorkspaceId){let t=`kobo:session:${this.selectedWorkspaceId}`;e===null?localStorage.removeItem(t):localStorage.setItem(t,e)}},async createSession(e){try{let t=await J(`/api/workspaces/${e}/sessions`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}let n=await t.json();return this.selectedWorkspaceId===e&&(this.sessions.unshift(n),this.selectSession(n.id)),n}catch(e){throw console.error(`[workspace store] createSession failed:`,e),e}},async renameWorkspace(e,t){let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]={...this.workspaces[i],...r});let a=this.archivedWorkspaces.findIndex(t=>t.id===e);a>=0&&(this.archivedWorkspaces[a]={...this.archivedWorkspaces[a],...r})},async renameSession(e,t,n){let r=await J(`/api/workspaces/${e}/sessions/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:n})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`HTTP ${r.status}`)}let i=await r.json().catch(()=>null),a=this.sessions.find(e=>e.id===t);a&&(a.name=i?.name??n)},async deleteSession(e,t){let n=await J(`/api/workspaces/${e}/sessions/${t}`,{method:`DELETE`}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);let i=this.selectedSessionId===t,a=r.workspace;if(a){let t=this.workspaces.findIndex(t=>t.id===e);t>=0&&(this.workspaces[t]=a)}await this.fetchSessions(e),i&&this.selectedWorkspaceId===e&&this.selectSession(this.sessions[0]?.id??null)},addActivityItem(e,t){if(this.activityFeeds[e]||(this.activityFeeds[e]=[]),this.activityFeedIds[e]||(this.activityFeedIds[e]=new Set),this.activityCounts[e]||(this.activityCounts[e]={toolUses:0,agentMessages:0,userMessages:0,errors:0}),t.meta?.sender!==`user`&&t.meta?.sender!==`system-prompt`)for(let t of this.activityFeeds[e])t.meta?.pending&&(t.meta.pending=!1);if(!this.activityFeedIds[e].has(t.id)){this.activityFeedIds[e].add(t.id),this.activityFeeds[e].push(t);let n=this.activityCounts[e];t.type===`tool_use`?n.toolUses++:t.type===`error`&&n.errors++,t.meta?.sender===`user`?n.userMessages++:t.type===`text`&&t.meta?.sender!==`system-prompt`&&n.agentMessages++}let n=this.activityFeeds[e];if(n.length>Tu){let t=n.splice(0,n.length-Tu),r=this.activityFeedIds[e];for(let e of t)r.delete(e.id)}},removeActivityItem(e,t){let n=this.activityFeeds[e],r=this.activityFeedIds[e];if(!n||!r)return;let i=n.findIndex(e=>e.id===t);if(i<0)return;let[a]=n.splice(i,1);r.delete(t);let o=this.activityCounts[e];o&&a&&(a.type===`tool_use`?o.toolUses=Math.max(0,o.toolUses-1):a.type===`error`&&(o.errors=Math.max(0,o.errors-1)),a.meta?.sender===`user`?o.userMessages=Math.max(0,o.userMessages-1):a.type===`text`&&a.meta?.sender!==`system-prompt`&&(o.agentMessages=Math.max(0,o.agentMessages-1)))},clearActivityFeed(e){e?(delete this.activityFeeds[e],delete this.activityFeedIds[e],delete this.activityCounts[e]):(this.activityFeeds={},this.activityFeedIds={},this.activityCounts={})},applyUsageSnapshot(e){this.providerUsage[e.providerId]=e.snapshot},async requestUsageRefresh(e){try{await ac(`/api/usage/${e}/refresh`,{method:`POST`})}catch(e){console.error(`[workspace store] requestUsageRefresh failed:`,e)}},triggerGitRefresh(){this.gitRefreshTrigger++,this.schedulePrSnapshotsRefresh()},schedulePrSnapshotsRefresh(){Du!==null&&clearTimeout(Du),Du=setTimeout(()=>{Du=null,this.fetchPrSnapshots()},Eu)},async fetchPrSnapshots(){let e=++ku,t=new Map(ju);try{let n=await J(`/api/workspaces/pr-states`,{cache:`no-store`});if(!n.ok)return;let r=await n.json();if(e!==ku)return;this.prSnapshots=zu(r,this.prSnapshots,t)}catch(e){console.error(`[workspace-store] fetchPrSnapshots failed:`,e)}},async fetchWorkspacesInfo(){let e=this.workspaceLifecycleVersion,t=++Ou,n=new Map(Au),r=new Map(ju),i=new Map(Iu);try{let a=await Y(`/api/workspaces/info`,{cache:`no-store`});if(this.listPollFailureStreak=0,this.activeListLoadFailed=!1,this.listLoadError=null,t!==Ou||e!==this.workspaceLifecycleVersion)return;if(this.agentLiveness=a.agentLiveness??{},a.pendingInputs)for(let e of a.workspaces){if((Iu.get(e.id)??0)!==(i.get(e.id)??0))continue;let t=this.pendingQueue[e.id]??[],n=new Map(t.map(e=>[e.toolCallId,e])),r=(a.pendingInputs[e.id]??[]).map(e=>{let t=n.get(e.toolCallId);return t&&Jt.deepEqual(t,e)?t:e});if(!(r.length===t.length&&r.every((e,n)=>e===t[n]))){this.clearAllPending(e.id);for(let t of r)this.enqueuePending(e.id,t)}}let o={...this.agentLivenessLoaded};for(let e of a.workspaces)o[e.id]=!0;this.agentLivenessLoaded=o;let s=new Map(this.workspaces.map(e=>[e.id,e]));this.workspaces=a.workspaces.map(e=>{let t=s.get(e.id),r=(Au.get(e.id)??0)!==(n.get(e.id)??0);return t&&r?{...e,...t}:e});for(let e of this.workspaces)iu().setCompacting(e.id,e.status===`compacting`),[`completed`,`idle`,`error`,`quota`].includes(e.status)&&this.finalizeRunningSubagents(e.id);this.prSnapshots=zu(a.prSnapshots,this.prSnapshots,r);let c={...this.gitStatsCache};for(let[e,t]of Object.entries(a.gitStats)){let n=c[e];(!n||(t.computedAt??0)>=(n.computedAt??0))&&(c[e]=t)}this.gitStatsCache=c}catch(e){console.error(`[workspace-store] fetchWorkspacesInfo failed:`,e),this.listPollFailureStreak+=1,this.listPollFailureStreak>=2&&(this.activeListLoadFailed=!0,this.listLoadError=e instanceof Error?e.message:String(e))}},async refreshPrSnapshot(e){try{let t=await J(`/api/workspaces/pr-snapshot/refresh/${e}`,{method:`POST`});if(t.status===404){let t={...this.prSnapshots};return delete t[e],this.prSnapshots=t,Ru(e),null}if(!t.ok)return console.error(`[workspace-store] refreshPrSnapshot non-OK:`,t.status),null;let n=await t.json();return this.prSnapshots={...this.prSnapshots,[e]:n.snapshot},Ru(e),n.snapshot}catch(e){return console.error(`[workspace-store] refreshPrSnapshot failed:`,e),null}},async fetchAutoLoopStates(){let e=++this.autoLoopSnapshotVersion,t=au(),n={...t.finalReviews};try{let r=await J(`/api/workspaces/auto-loop-states`,{cache:`no-store`});if(!r.ok)return;let i=await r.json();if(e===this.autoLoopSnapshotVersion){for(let[e,r]of Object.entries(i))t.finalReviews[e]!==n[e]&&t.finalReviews[e]&&(r.finalReview=t.finalReviews[e]);this.autoLoopStates=i}}catch(e){console.error(`[workspace-store] fetchAutoLoopStates failed:`,e)}},async fetchAutoLoopMessages(e){let t=(this.autoLoopMessageVersions[e]??0)+1;this.autoLoopMessageVersions[e]=t;let n=await J(`/api/workspaces/${e}/auto-loop/messages`,{cache:`no-store`});if(n.ok){let r=await n.json();this.autoLoopMessageVersions[e]===t&&(this.autoLoopMessages[e]=r)}},async queueAutoLoopMessage(e,t){let n=this.autoLoopMessageKeys[e];(!n||n.content!==t)&&(n={content:t,id:Array.from(crypto.getRandomValues(new Uint32Array(4)),e=>e.toString(16)).join(`-`)},this.autoLoopMessageKeys[e]=n);let r=await rc(`/api/workspaces/${e}/auto-loop/messages`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({content:t,clientMessageId:n.id})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`HTTP ${r.status}`)}delete this.autoLoopMessageKeys[e],await this.fetchAutoLoopMessages(e).catch(()=>{})},async resolveAutoLoopMessage(e,t,n){let r=await rc(`/api/workspaces/${e}/auto-loop/messages/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:n})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`HTTP ${r.status}`)}await this.fetchAutoLoopMessages(e)},async enableAutoLoop(e){let t=await rc(`/api/workspaces/${e}/auto-loop`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}await this.fetchAutoLoopStates()},async disableAutoLoop(e){let t=await rc(`/api/workspaces/${e}/auto-loop`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}await this.fetchAutoLoopStates()},async forceAutoLoopReady(e){await ac(`/api/workspaces/${e}/auto-loop-ready`,{method:`POST`}),await this.fetchAutoLoopStates()},setAutoLoopState(e,t){this.autoLoopStates[e]=t},clearAutoLoopState(e){delete this.autoLoopStates[e],delete this.autoLoopMessages[e],delete this.autoLoopMessageKeys[e]},async fetchCrons(e){try{let t=await J(`/api/workspaces/${e}/crons`);if(!t.ok)return;let n=await t.json();this.crons[e]=n.crons}catch(e){console.error(`[workspace-store] fetchCrons failed:`,e)}},async cancelCron(e,t){let n=this.crons[e]??[];this.crons[e]=n.filter(e=>e.id!==t);try{await ac(`/api/workspaces/${e}/crons/${t}`,{method:`DELETE`})}catch(t){throw this.crons[e]=n,t}},async createCron(e,t){let n=await rc(`/api/workspaces/${e}/crons`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}await this.fetchCrons(e)},async scheduleManualWakeup(e,t){let n=await J(`/api/workspaces/${e}/pending-wakeup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json();r.pending&&(this.pendingWakeups[e]=r.pending)},async fetchPendingWakeup(e){try{let t=await J(`/api/workspaces/${e}/pending-wakeup`,{cache:`no-store`});if(!t.ok)return;let n=await t.json();n?this.pendingWakeups[e]=n:delete this.pendingWakeups[e]}catch(e){console.error(`[workspace-store] fetchPendingWakeup failed:`,e)}},setPendingWakeup(e,t){this.pendingWakeups[e]=t},clearPendingWakeup(e){delete this.pendingWakeups[e]},async cancelPendingWakeup(e){let t=this.pendingWakeups[e]!==void 0;delete this.pendingWakeups[e];try{await ac(`/api/workspaces/${e}/pending-wakeup`,{method:`DELETE`})}catch(n){console.error(`[workspace-store] cancelPendingWakeup failed:`,n),t&&await this.fetchPendingWakeup(e)}},async fetchPendingQuotaBackoff(e){try{let t=await J(`/api/workspaces/${e}/quota-backoff`,{cache:`no-store`});if(!t.ok)return;let n=await t.json();n?this.pendingQuotaBackoffs[e]={...n,reason:n.reason===`transient`?`transient`:`quota`}:delete this.pendingQuotaBackoffs[e]}catch(e){console.error(`[workspace-store] fetchPendingQuotaBackoff failed:`,e)}},setPendingQuotaBackoff(e,t){this.pendingQuotaBackoffs[e]=t},clearPendingQuotaBackoff(e){delete this.pendingQuotaBackoffs[e]},async cancelQuotaBackoff(e){let t=this.pendingQuotaBackoffs[e]!==void 0;delete this.pendingQuotaBackoffs[e];try{await ac(`/api/workspaces/${e}/quota-backoff`,{method:`DELETE`})}catch(n){console.error(`[workspace-store] cancelQuotaBackoff failed:`,n),t&&await this.fetchPendingQuotaBackoff(e)}},async resumeQuotaBackoffNow(e){await this.fetchSessions(e);let t=this.sessions[0];t&&(t.status===`completed`||t.status===`error`)?await this.startWorkspace(e,void 0,t.id,!0):await this.startWorkspace(e)},enqueuePending(e,t){Iu.set(e,(Iu.get(e)??0)+1);let n=this.pendingQueue[e]??[];n.some(e=>e.toolCallId===t.toolCallId)||(n.push(t),this.pendingQueue[e]=n,t.kind===`question`&&(this.pendingDeferred[e]={toolCallId:t.toolCallId,toolName:t.toolName,input:t.input,agentSessionId:t.agentSessionId}))},peekPending(e){return this.pendingQueue[e]?.[0]},dequeuePending(e){Iu.set(e,(Iu.get(e)??0)+1);let t=this.pendingQueue[e];if(!t||t.length===0)return;let n=t.shift();t.length===0&&delete this.pendingQueue[e];let r=this.pendingQueue[e]?.[0];return r&&r.kind===`question`?this.pendingDeferred[e]={toolCallId:r.toolCallId,toolName:r.toolName,input:r.input,agentSessionId:r.agentSessionId}:delete this.pendingDeferred[e],n},clearPendingForSession(e,t){if(Iu.set(e,(Iu.get(e)??0)+1),t===null)return;let n=this.pendingQueue[e];if(!n)return;let r=n.filter(e=>e.agentSessionId!==t);r.length===0?delete this.pendingQueue[e]:this.pendingQueue[e]=r;let i=this.pendingDeferred[e];i&&i.agentSessionId===t&&delete this.pendingDeferred[e]},clearAllPending(e){Iu.set(e,(Iu.get(e)??0)+1),delete this.pendingQueue[e],delete this.pendingDeferred[e]},setPendingDeferred(e,t){this.enqueuePending(e,{kind:`question`,agentSessionId:t.agentSessionId,toolCallId:t.toolCallId,toolName:t.toolName,input:t.input})},clearPendingDeferred(e,t=null){if(t===null){this.clearAllPending(e);return}this.clearPendingForSession(e,t)},getPendingDeferred(e){let t=this.peekPending(e);if(t?.kind===`question`)return{toolCallId:t.toolCallId,toolName:t.toolName,input:t.input,agentSessionId:t.agentSessionId}},async submitDeferredAnswer(e,t,n,r,i){let a=await rc(`/api/workspaces/${e}/deferred-tool-use/answer`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answers:t,toolCallId:n,awaitingFreeForm:r,response:i})});if(!a.ok){let t=(await a.json().catch(()=>({}))).error??`HTTP ${a.status}`;if(/no deferred tool use pending|no agent running|no active engine process|no pending callback/i.test(t)){console.warn(`[workspace] submitDeferredAnswer: deferred callback expired — clearing zombie panel locally`),this.dequeuePending(e),this.fetchWorkspaces();return}throw Error(t)}this.dequeuePending(e),this.fetchWorkspaces()},async cancelDeferredAnswer(e,t,n){let r=await rc(`/api/workspaces/${e}/deferred-tool-use/cancel`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reason:t,toolCallId:n})});if(!r.ok){let t=(await r.json().catch(()=>({}))).error??`HTTP ${r.status}`;if(/no deferred tool use pending/i.test(t)){console.warn(`[workspace] cancelDeferredAnswer: backend has no pending — clearing zombie panel locally`),this.dequeuePending(e),this.fetchWorkspaces();return}throw Error(t)}this.dequeuePending(e),this.fetchWorkspaces()},async submitDeferredPermission(e,t,n,r,i=`once`){let a=await rc(`/api/workspaces/${e}/deferred-permission/decision`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({toolCallId:t,decision:n,reason:r,scope:i})});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error??`HTTP ${a.status}`)}this.dequeuePending(e),this.fetchWorkspaces()},updateAgentTodos(e,t){this.agentTodos[e]=t},agentTaskCreate(e,t,n){let r=this.agentTodos[e]?[...this.agentTodos[e]]:[];r.some(e=>e.id===t)||(r.push({id:t,content:n.subject||n.description||``,status:`pending`,activeForm:n.activeForm}),this.agentTodos[e]=r)},agentTaskSetNumber(e,t,n){let r=this.agentTodos[e];r&&(this.agentTodos[e]=r.map(e=>e.id===t?{...e,taskNumber:n}:e))},agentTaskUpdate(e,t,n){let r=this.agentTodos[e];if(r){if(n.status===`deleted`){this.agentTodos[e]=r.filter(e=>e.taskNumber!==t);return}this.agentTodos[e]=r.map(e=>e.taskNumber===t?{...e,status:n.status?wu(n.status):e.status,content:n.content??e.content,activeForm:n.activeForm??e.activeForm}:e)}},finalizeRunningSubagents(e,t){let n=this.subagents[e];if(!n)return;let r=new Date().toISOString();for(let e of Object.keys(n)){let i=n[e];t&&i.sessionId&&i.sessionId!==t||i.status===`running`&&(n[e]={...i,status:`done`,updatedAt:r})}},upsertSubagent(e,t){this.subagents[e]||(this.subagents[e]={});let n=this.subagents[e],r=new Set([t.toolUseId,...t.taskId?[t.taskId]:[]]),i=Object.entries(n).filter(([e,t])=>r.has(e)||r.has(t.toolUseId)||!!t.taskId&&r.has(t.taskId)).sort(([,e],[,t])=>e.startedAt.localeCompare(t.startedAt)),a=i[0]?.[1];if(a&&a.status!==`running`&&t.status===`running`&&t.phase===`progress`)return;for(let[e]of i)delete n[e];let o=t.taskId??i.map(([,e])=>e.taskId).find(e=>!!e),s=a&&t.toolUseId===o?a.toolUseId:t.toolUseId,c=new Date().toISOString(),l=t.status??a?.status??`running`,u=t.phase===`started`?t.ambient===!0:t.ambient??a?.ambient,d=t.sessionId||a?.sessionId,f=t.threadIds?.length?[...new Set([...a?.threadIds??[],...t.threadIds])]:a?.threadIds;n[o??s]={toolUseId:s,...o?{taskId:o}:{},...f?.length?{threadIds:f}:{},description:t.description&&(!a||t.phase===`started`||!a.description)?t.description:a?.description??t.description??``,taskType:t.taskType??a?.taskType,status:l,...u?{ambient:!0}:{},...d?{sessionId:d}:{},lastToolName:t.lastToolName??a?.lastToolName,lastDescription:t.lastDescription??a?.lastDescription,totalTokens:t.totalTokens??a?.totalTokens,toolUses:t.toolUses??a?.toolUses,durationMs:t.durationMs??a?.durationMs,startedAt:a?.startedAt??c,updatedAt:c}},async markRead(e){try{await ac(`/api/workspaces/${e}/mark-read`,{method:`POST`});let t=this.workspaces.findIndex(t=>t.id===e);t>=0&&(this.workspaces[t]={...this.workspaces[t],hasUnread:!1})}catch(e){console.error(`[workspace store] markRead failed:`,e)}},async purgeWorktree(e){try{let t=await J(`/api/workspaces/${e}/purge-worktree`,{method:`POST`}),n=await t.json();if(!t.ok)return{ok:!1,error:n.error??`HTTP ${t.status}`};let r=n.workspace;return r&&(this.updateWorkspaceFromEvent(e,{archivedAt:r.archivedAt,worktreePurgedAt:r.worktreePurgedAt,worktreePurgeRestoreData:r.worktreePurgeRestoreData}),r.archivedAt&&this.archivedLoaded&&(this.archivedWorkspaces.some(t=>t.id===e)||this.archivedWorkspaces.unshift(r),this.workspaces=this.workspaces.filter(t=>t.id!==e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]))),{ok:!0,warnings:n.warnings??[]}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}},async dismissPrAttention(e,t){let n=this.prSnapshots[e];if(n)try{await ac(`/api/workspaces/${e}/dismiss-pr-attention`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:t,prUpdatedAt:n.updatedAt})});let r=t===`changes-requested`?{prChangesDismissedAt:n.updatedAt}:{prCiFailureDismissedAt:n.updatedAt};this.updateWorkspaceFromEvent(e,r)}catch(e){console.error(`[workspace store] dismissPrAttention failed:`,e)}},async restorePrAttention(e,t){try{await ac(`/api/workspaces/${e}/restore-pr-attention`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:t})});let n=t===`changes-requested`?{prChangesDismissedAt:null}:{prCiFailureDismissedAt:null};this.updateWorkspaceFromEvent(e,n)}catch(e){console.error(`[workspace store] restorePrAttention failed:`,e)}},queuedMessageKey(e,t){return`${e}:${t}`},getQueuedMessage(e,t){return t?this.queuedMessages[this.queuedMessageKey(e,t)]:void 0},queueMessage(e,t,n){let r=Ol(this);if(r)return r.queue(e,t,n);this.queuedMessages[this.queuedMessageKey(e,n)]={content:t,sessionId:n}},cancelQueuedMessage(e,t){let n=Ol(this);if(n)return n.cancel(e,t);t&&delete this.queuedMessages[this.queuedMessageKey(e,t)]},async flushQueuedMessage(e,t){let n=Ol(this);if(n)return n.flush(e,t);let r=this.getQueuedMessage(e,t);if(!r)return;if(this.autoLoopStates[e]?.auto_loop??this.workspaces.find(t=>t.id===e)?.autoLoop){let n=this.queuedMessageKey(e,t);if(this.autoLoopQueueTransfers[n])return;this.autoLoopQueueTransfers[n]=!0;try{await this.queueAutoLoopMessage(e,r.content),this.getQueuedMessage(e,t)?.content===r.content&&this.cancelQueuedMessage(e,t)}catch{}finally{delete this.autoLoopQueueTransfers[n]}return}let i=If();i.isCompacting(e)||(this.cancelQueuedMessage(e,t),i.sendChatMessage(e,r.content,t))},setActiveAgentSession(e,t){this.activeAgentSessionIds[e]=t,delete this.settledAgentSessionIds[e]},markAgentTurnSettled(e,t){this.activeAgentSessionIds[e]===t&&(this.settledAgentSessionIds[e]=t)},isAgentTurnSettled(e){let t=this.activeAgentSessionIds[e];return t!==void 0&&this.settledAgentSessionIds[e]===t},clearActiveAgentSession(e,t){this.activeAgentSessionIds[e]===t&&(delete this.activeAgentSessionIds[e],delete this.settledAgentSessionIds[e])},clearActiveAgentSessionOwner(e){delete this.activeAgentSessionIds[e],delete this.settledAgentSessionIds[e]},updateWorkspaceFromEvent(e,t){Au.set(e,(Au.get(e)??0)+1);let n=this.workspaces.findIndex(t=>t.id===e);if(n>=0&&(this.workspaces[n]={...this.workspaces[n],...t}),t.status!==void 0){if(iu().setCompacting(e,t.status===`compacting`),e in this.agentLivenessLoaded){let t={...this.agentLivenessLoaded};delete t[e],this.agentLivenessLoaded=t}e===this.selectedWorkspaceId&&this.fetchWorkspaceDetails(e)}if(t.status&&[`completed`,`idle`,`error`,`quota`].includes(t.status)){let t=this.activityFeeds[e];if(t)for(let e of t)e.meta?.pending&&(e.meta.pending=!1);let n=this.subagents[e];if(n)for(let[e,t]of Object.entries(n))t.status===`running`&&(n[e]={...t,status:`done`})}}}}),Vu=Cr(`session-handoff`,{state:()=>({current:{},versions:{},selectedTargets:{},selectedSources:{},followedHandoffs:{},loadErrors:{}}),getters:{isActive:e=>t=>[`stopping`,`generating`,`starting`].includes(e.current[t]?.state??``),isBlocking:e=>t=>cu(e.current[t])},actions:{apply(e,t=!1){let n=this.current[e.workspaceId];if(n&&Date.parse(n.updatedAt)>Date.parse(e.updatedAt))return;this.versions[e.workspaceId]=(this.versions[e.workspaceId]??0)+1,this.current[e.workspaceId]=e,this.loadErrors[e.workspaceId]=null,(t||this.isActive(e.workspaceId))&&(this.followedHandoffs[e.workspaceId]=e.id);let r=this.followedHandoffs[e.workspaceId]===e.id;cu(e)||delete this.followedHandoffs[e.workspaceId];let i=Z(),a=`${e.id}:${e.targetSessionId}:${e.state===`cancelled`?`cancelled`:`restored`}`;r&&[`failed`,`interrupted`,`cancelled`].includes(e.state)&&i.selectedWorkspaceId===e.workspaceId&&this.selectedSources[e.workspaceId]!==a&&(this.selectedSources[e.workspaceId]=a,i.fetchSessions(e.workspaceId,e.sourceSessionId)),r&&e.state===`completed`&&e.targetSessionId&&i.selectedWorkspaceId===e.workspaceId&&this.selectedTargets[e.workspaceId]!==e.id&&(this.selectedTargets[e.workspaceId]=e.id,i.fetchSessions(e.workspaceId,e.targetSessionId))},async refresh(e){let t=this.versions[e]??0;try{let{handoff:n}=await Y(`/api/workspaces/${e}/session-handoffs/current`);if((this.versions[e]??0)!==t)return;this.loadErrors[e]=null,n?this.apply(n):this.current[e]=null}catch(t){throw this.loadErrors[e]=t instanceof Error?t.message:String(t),t}},async start(e,t){let n=this.versions[e]??0,{handoff:r}=await Y(`/api/workspaces/${e}/session-handoffs`,{method:`POST`,body:t}),i=this.current[e];return this.apply((this.versions[e]??0)!==n&&i?.id===r.id?i:r,!0),r},async decide(e,t,n){let r=this.versions[e]??0,{handoff:i}=await Y(`/api/workspaces/${e}/session-handoffs/${t}/decision`,{method:`POST`,body:{action:n}}),a=this.current[e];return this.apply((this.versions[e]??0)!==r&&a?.id===i.id?a:i,!0),i}}}),Hu=`custom:`,Uu=RegExp(`^[A-Za-z0-9_-]{12}$`),Wu=[`.wav`,`.mp3`,`.ogg`,`.webm`],Gu=[...Object.values({".wav":`audio/wav`,".mp3":`audio/mpeg`,".ogg":`audio/ogg`,".webm":`audio/webm`}),...Wu].join(`,`),Ku=2097152;function qu(e){return`${Hu}${e}`}function Ju(e){return typeof e==`string`&&e.startsWith(`custom:`)&&Uu.test(e.slice(7))}function Yu(e){return Ju(e)?e.slice(7):``}function Xu(e){let t=/\.[^.\\/]+$/.exec(e)?.[0]?.toLowerCase()??``;return Wu.includes(t)?t:null}var Zu=`/sounds`,Qu=[{id:`neutral.wav`,labelKey:`settings.notificationSoundBasic`},{id:`ready.wav`,labelKey:`settings.notificationSoundReady`}],$u=`neutral.wav`,ed=`inherit`,td=[`audioPrCiFailedSound`,`audioPrCiRecoveredSound`,`audioPrChangesRequestedSound`,`audioPrApprovedSound`,`audioPrMergeConflictSound`,`audioPrReadyToMergeSound`,`audioPrMergedSound`],nd=[`audioPrCiFailedEnabled`,`audioPrCiFailedVolume`,`audioPrCiRecoveredEnabled`,`audioPrCiRecoveredVolume`,`audioPrChangesRequestedEnabled`,`audioPrChangesRequestedVolume`,`audioPrApprovedEnabled`,`audioPrApprovedVolume`,`audioPrMergeConflictEnabled`,`audioPrMergeConflictVolume`,`audioPrReadyToMergeEnabled`,`audioPrReadyToMergeVolume`,`audioPrMergedEnabled`,`audioPrMergedVolume`],rd={audioPrCiFailedSound:ed,audioPrCiRecoveredSound:ed,audioPrChangesRequestedSound:ed,audioPrApprovedSound:ed,audioPrMergeConflictSound:ed,audioPrReadyToMergeSound:ed,audioPrMergedSound:ed,audioPrCiFailedEnabled:!1,audioPrCiFailedVolume:1,audioPrCiRecoveredEnabled:!1,audioPrCiRecoveredVolume:1,audioPrChangesRequestedEnabled:!1,audioPrChangesRequestedVolume:1,audioPrApprovedEnabled:!1,audioPrApprovedVolume:1,audioPrMergeConflictEnabled:!1,audioPrMergeConflictVolume:1,audioPrReadyToMergeEnabled:!1,audioPrReadyToMergeVolume:1,audioPrMergedEnabled:!1,audioPrMergedVolume:1},id=new Map;function ad(e){let t=new Map;for(let n of e){let e=Ju(n)?n:qu(n);Ju(e)&&t.set(e,id.get(e)??sd(e))}id.clear();for(let[e,n]of t)id.set(e,n)}function od(e,t){id.has(e)&&id.set(e,t)}function sd(e){return`/api/sounds/${Yu(e)}/file`}function cd(e){return Ju(e)?id.has(e):Qu.some(t=>t.id===e)}function ld(e){return typeof e==`string`&&(Ju(e)||Qu.some(t=>t.id===e))}function ud(e){return ld(e)?e:$u}function dd(e){return e===`none`||e===`inherit`||ld(e)?e:ed}function fd(e){return e&&cd(e)?e:$u}function pd(e){if(e===`none`)return null;if(e!==`inherit`)return typeof e==`string`&&cd(e)?e:void 0}function md(e){let t=fd(e);return Ju(t)?id.get(t)??sd(t):`${Zu}/${t}`}var hd=`mod+shift+x`,gd=[`mod`,`ctrl`,`meta`,`alt`,`shift`],_d=new Set([`mod+w`,`mod+shift+w`,`ctrl+w`,`ctrl+shift+w`,`meta+w`,`meta+shift+w`]),vd=new Set([`control`,...gd]);function yd(e){return _d.has(e)}function bd(e){if(typeof e!=`string`||e.length===0||e!==e.toLowerCase()||yd(e))return null;let t=e.split(`+`);if(t.some(e=>e.length===0))return null;let n=t.at(-1);if(!n||!/^[a-z0-9][a-z0-9_-]*$/.test(n)||vd.has(n))return null;let r=t.slice(0,-1),i=new Set,a=-1;for(let e of r){let t=gd.indexOf(e);if(t<=a)return null;a=t,i.add(e)}return{modifiers:i,key:n}}var xd=new Set([`control`,`meta`,`alt`,`shift`]),Sd={" ":`space`,"+":`plus`,"-":`minus`,"=":`equal`,",":`comma`,".":`period`,"/":`slash`,"\\":`backslash`,";":`semicolon`,"'":`quote`,"[":`bracketleft`,"]":`bracketright`,"`":`backquote`};function Cd(e){let t=Sd[e]??e.toLowerCase();return/^[a-z0-9][a-z0-9_-]*$/.test(t)?t:null}function wd(e=globalThis.navigator?.platform??``){return/mac|iphone|ipad|ipod/i.test(e)?`mac`:`other`}function Td(e,t){if(e.key===`Escape`)return{status:`cancelled`};if(xd.has(e.key.toLowerCase()))return{status:`pending`};let n=Cd(e.key);if(!n)return{status:`pending`};let r=new Set;(t===`mac`?e.metaKey:e.ctrlKey)&&r.add(`mod`),t===`mac`&&e.ctrlKey&&r.add(`ctrl`),t===`other`&&e.metaKey&&r.add(`meta`),e.altKey&&r.add(`alt`),e.shiftKey&&r.add(`shift`);let i=[...gd.filter(e=>r.has(e)),n].join(`+`);return yd(i)?{status:`reserved`}:{status:`accepted`,shortcut:i}}function Ed(e,t,n){let r=bd(t),i=Cd(e.key);if(!r||!i||i!==r.key)return!1;let a=r.modifiers.has(`ctrl`)||n===`other`&&r.modifiers.has(`mod`),o=r.modifiers.has(`meta`)||n===`mac`&&r.modifiers.has(`mod`);return e.ctrlKey===a&&e.metaKey===o&&e.altKey===r.modifiers.has(`alt`)&&e.shiftKey===r.modifiers.has(`shift`)}function Dd(e){return{space:`Space`,arrowup:`↑`,arrowdown:`↓`,arrowleft:`←`,arrowright:`→`}[e]??e.toUpperCase()}function Od(e,t){let n=bd(e);return n?t===`mac`?`${[n.modifiers.has(`mod`)||n.modifiers.has(`meta`)?`⌘`:``,n.modifiers.has(`ctrl`)?`⌃`:``,n.modifiers.has(`alt`)?`⌥`:``,n.modifiers.has(`shift`)?`⇧`:``].join(``)}${Dd(n.key)}`:[n.modifiers.has(`mod`)||n.modifiers.has(`ctrl`)?`Ctrl`:``,n.modifiers.has(`meta`)?`Meta`:``,n.modifiers.has(`alt`)?`Alt`:``,n.modifiers.has(`shift`)?`Shift`:``,Dd(n.key)].filter(Boolean).join(`+`):e}var kd=`.worktrees`,Ad=[`commit`,`push`,`publish`],jd={commit:`manual`,push:`manual`,publish:`manual`};function Md(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>Ad.includes(e)&&(t===`manual`||t===`automatic`))}function Nd(...e){let t={...jd};for(let n of e)Md(n)&&Object.assign(t,n);return t}function Pd(e){return btoa(e).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}var Fd=Cr(`settings`,{state:()=>({global:{workflowPolicy:{...jd},memoryMode:`hybrid`,onboardingComplete:!1,defaultModelByEngine:{"claude-code":`claude-sonnet-5-5`,codex:`auto`},dangerouslySkipPermissions:!0,prPromptTemplate:``,reviewPromptTemplate:``,ciFixPromptTemplate:``,finalizationPrompt:``,notionInitialPromptTemplate:``,sentryInitialPromptTemplate:``,gitConventions:``,editorCommand:``,fileManagerCommand:``,terminalCommand:``,autoPurgeOnPrMerged:!1,autoLoopMaxRetries:5,awaitingUserReminderMinutes:0,activityDigestEnabled:!0,wsEventsRetentionDays:0,wsEventsKeepPerWorkspace:0,browserNotifications:!0,audioNotifications:!1,audioQuestionNotifications:!1,audioWorkspaceCreatedNotifications:!1,audioAgentErrorNotifications:!1,audioNotificationSound:`neutral.wav`,audioQuestionSound:`inherit`,audioWorkspaceCreatedSound:`inherit`,audioAgentErrorSound:`inherit`,...rd,audioNotificationVolume:1,audioQuestionVolume:1,audioWorkspaceCreatedVolume:1,audioAgentErrorVolume:1,notionStatusProperty:``,notionInProgressStatus:``,notionAssigneeProperty:``,notionUserId:``,defaultPermissionModeByEngine:{"claude-code":`plan`,codex:`plan`},notionMcpKey:``,sentryMcpKey:``,bitbucketToken:``,bitbucketUsername:``,notionEnabled:!1,sentryEnabled:!1,showThinkingBlocks:!0,whipEnabled:!1,whipShortcut:hd,whipVolume:1,tags:[],branchPrefixes:[],setupScript:``,cleanupScript:``,cleanupScriptMode:`no-tasks`,cleanupScriptOnlyOnChanges:!1,archiveScript:``,changeSourceBranchScript:``,sessionEndedScript:``,prMergedScript:``,autoLoopDisabledScript:``,worktreesPath:kd,worktreesPrefixByProject:!1,voiceEnabled:!1,voicePttKey:`alt`,voiceLanguage:`auto`,voiceModel:null,voiceCommandPath:``,voiceFfmpegPath:``,voiceTemperature:0,voicePrompt:``,voiceTranslateToEnglish:!1,voiceSuppressNonSpeechTokens:!0,flattenWorkspaceList:!1,skillSuite:`standard`,customReviewTemplate:``,customAutoLoopReviewGate:``,customAutoLoopGroomingIntro:``,customQaPromptTemplate:``,customBrainstormingInstruction:``},voiceModels:[],voiceModelsLoading:!1,voiceModelsDir:``,voiceRuntime:null,activeMcpServers:[],projects:[],loading:!1,loaded:!1,loadError:null,showVerboseSystemMessages:localStorage.getItem(`kobo:showVerboseSystemMessages`)===`true`}),getters:{getProjectByPath:e=>t=>e.projects.find(e=>e.path===t)??null,projectPaths:e=>e.projects.map(e=>e.path)},actions:{_assertLoaded(){if(!this.loaded)throw Error(`Settings were never loaded successfully — refusing to overwrite the stored configuration`)},async fetchSettings(){this.loading=!0;try{let e=await Y(`/api/settings`);this.global=e.global,this.projects=e.projects,this.loadError=null,this.loaded=!0}catch(e){this.loadError=e instanceof Error?e.message:String(e),this.loaded=!1,console.error(`[settings store] fetchSettings failed:`,e)}finally{this.loading=!1}},async fetchActiveMcpServers(){try{this.activeMcpServers=await Y(`/api/settings/mcp-servers`)}catch(e){console.error(`[settings store] fetchActiveMcpServers failed:`,e),this.activeMcpServers=[]}},async fetchGlobalDefaults(){return Y(`/api/settings/defaults`)},async previewRetention(e,t){return Y(`/api/settings/ws-events-retention-preview?days=${e}&keep=${t}`)},async updateGlobal(e){this._assertLoaded(),this.global=await Y(`/api/settings/global`,{method:`PUT`,body:e})},async upsertProject(e,t){this._assertLoaded();let n=await Y(`/api/settings/projects/${Pd(e)}`,{method:`PUT`,body:t}),r=this.projects.findIndex(t=>t.path===e);r>=0?this.projects[r]=n:this.projects.push(n)},toggleVerboseSystemMessages(){this.setVerboseSystemMessages(!this.showVerboseSystemMessages)},setVerboseSystemMessages(e){this.showVerboseSystemMessages=e,localStorage.setItem(`kobo:showVerboseSystemMessages`,String(e))},async deleteProject(e){this._assertLoaded(),await Y(`/api/settings/projects/${Pd(e)}`,{method:`DELETE`}),this.projects=this.projects.filter(t=>t.path!==e)},async fetchVoiceModels(){this.voiceModelsLoading=!0;try{let e=await Y(`/api/voice/models`);this.voiceModels=e.available,this.voiceModelsDir=e.modelsDir,this.global.voiceModel=e.activeModel}catch(e){console.error(`[settings store] fetchVoiceModels failed:`,e)}finally{this.voiceModelsLoading=!1}},async cancelVoiceModelDownload(e){try{await Y(`/api/voice/models/${encodeURIComponent(e)}/download`,{method:`DELETE`})}catch(e){if(!(e instanceof Ys)||e.status!==404)throw e}await this.fetchVoiceModels()},async fetchVoiceRuntime(){try{this.voiceRuntime=await Y(`/api/voice/runtime`)}catch(e){console.error(`[settings store] fetchVoiceRuntime failed:`,e)}},async downloadVoiceModel(e){await Y(`/api/voice/models/${encodeURIComponent(e)}/download`,{method:`POST`}),await this.fetchVoiceModels()},async deleteVoiceModel(e){await Y(`/api/voice/models/${encodeURIComponent(e)}`,{method:`DELETE`}),await this.fetchVoiceModels()}}});function Id(e,t){let n=e=>e.split(`.`).map(e=>Number.parseInt(e,10)||0),r=n(e),i=n(t),a=Math.max(r.length,i.length);for(let e=0;e<a;e++){let t=(r[e]??0)-(i[e]??0);if(t!==0)return t}return 0}var Ld=`kobo:dismissed-update-version`,Rd=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/,zd=e=>typeof e==`string`&&Rd.test(e),Bd=Cr(`update`,()=>{let e=m(null),t=m(null),n=m(localStorage.getItem(Ld)),r=m(null),i=m(null),a=m(`unknown`),o=null,s=j(()=>t.value&&e.value&&Id(t.value,e.value)>0&&t.value!==n.value?t.value:null);function c(n){if(!zd(n.currentVersion))return;let o=typeof n.lastAttemptAt==`string`&&Number.isFinite(Date.parse(n.lastAttemptAt))?n.lastAttemptAt:null;r.value&&(!o||Date.parse(o)<Date.parse(r.value))||(e.value=n.currentVersion,zd(n.latestVersion)&&(t.value=n.latestVersion),o&&(r.value=o),typeof n.lastSuccessAt==`string`&&(i.value=n.lastSuccessAt),(n.checkStatus===`success`||n.checkStatus===`failed`||n.checkStatus===`unknown`)&&(a.value=n.checkStatus))}function l(){return o||(o=(async()=>{try{let e=await J(`/api/changelog`);e.ok&&c(await e.json())}catch{}finally{o=null}})(),o)}function u(){let e=s.value;e&&(n.value=e,localStorage.setItem(Ld,e))}return{currentVersion:e,latestVersion:t,availableVersion:s,lastAttemptAt:r,lastSuccessAt:i,checkStatus:a,applySnapshot:c,refreshSnapshot:l,dismissUpdate:u}}),Vd=new Set([`output`,`complete`,`error`]);function Hd(e){if(!e.startsWith(`hook:`))return null;let t=e.slice(5),n=t.lastIndexOf(`:`);if(n<=0)return null;let r=t.slice(0,n),i=t.slice(n+1);return Vd.has(i)?{event:r,kind:i}:null}function Ud(e){return`hook:${e}`}function Wd(e){return e.startsWith(`hook:`)}var Gd=6e3,Kd={timeout:0,closeBtn:!0},qd=typeof window<`u`&&window.parent!==window&&new URLSearchParams(window.location.search).get(`pane`)===`1`;function Jd(e,t=window.location.pathname){return`${t}?pane=1#/workspace/${encodeURIComponent(e)}`}function Yd(e){let t=Number(e??50);return Number.isFinite(t)?Math.max(25,Math.min(75,t)):50}function Xd(e,t){return e&&e!==t?{left:e,right:t}:{left:t}}var Zd=null;function Qd(e,t){return t.name===`split`&&e.name===`split`&&e.fullPath===Zd}async function $d(e,t){let n={name:`split`,query:t},r=e.resolve(n).fullPath;if(!(e.currentRoute.value.fullPath===r||Zd)){Zd=r;try{await e.replace(n)}finally{Zd=null}}}function ef(e,t){return e||Object.keys(t).length>0}var tf=new Map,nf=[],rf=!1;function af(e){let t=md(e),n=tf.get(t);return n||(n=new Audio(t),tf.set(t,n)),n}function of(e,t){let n=new Audio(md(fd(e)));n.preload=`auto`,n.volume=t,n.play().catch(()=>{})}function sf(){qd||`Notification`in window&&Notification.permission==="default"&&Notification.requestPermission()}function cf(e){return typeof e!=`number`||!Number.isFinite(e)?1:Math.max(0,Math.min(1,e))}function lf(){let e=nf.shift();if(!e){rf=!1;return}rf=!0;let t=af(fd(e.soundId));t.volume=e.volume,t.currentTime=0;let n=!1,r=()=>{n||(n=!0,t.removeEventListener(`ended`,r),t.removeEventListener(`error`,r),lf())};t.addEventListener(`ended`,r,{once:!0}),t.addEventListener(`error`,r,{once:!0}),t.play().catch(r)}function uf(e,t){let n={soundId:fd(e),volume:cf(t)};if(document.visibilityState===`hidden`){of(n.soundId,n.volume);return}nf.push(n),rf||lf()}function df(e,t){let n=af(fd(e));n.volume=cf(t),n.currentTime=0,n.play().catch(()=>{})}function ff(e,t,n,r,i,a){if(qd)return;let o=Fd();if(!document.hasFocus()&&o.global.browserNotifications&&`Notification`in window&&Notification.permission===`granted`){let r=new Notification(e,{body:t,icon:`/favicon.ico`});n&&(r.onclick=()=>{window.focus(),window.location.hash=`#/workspace/${n}`,r.close()})}(a??o.global.audioNotifications)&&r!==null&&uf(r&&r.length>0?r:o.global.audioNotificationSound??`neutral.wav`,i??o.global.audioNotificationVolume)}function pf(e,t){let n=[{label:t.retryLabel,color:`white`,handler:t.onRetry}];t.detailsLabel&&t.onDetails&&n.push({label:t.detailsLabel,color:`white`,handler:t.onDetails}),n.push({label:t.dismissLabel,color:`grey-5`}),Xl.create({type:`negative`,position:`top`,multiLine:!0,message:e,timeout:0,actions:n})}function mf(e){return(typeof e==`string`?Array.from(e.replace(/[\p{Cc}\s]+/gu,` `).replace(/\p{Cs}/gu,`�`).trim()).slice(0,100).join(``):``)||`External MCP client`}function hf(e){if(!e||typeof e!=`object`)return;let t=e;if(!(t.kind!==`mcp`||t.transport!==`http`&&t.transport!==`stdio`))return{kind:`mcp`,clientName:mf(t.clientName),transport:t.transport}}var gf=new Map,_f=Cr(`devServer`,{state:()=>({statuses:{},logs:{}}),getters:{getStatus:e=>t=>e.statuses[t]??null},actions:{async fetchStatus(e){let t=(gf.get(e)??0)+1;gf.set(e,t);let n=this.statuses[e];try{let r=await Y(`/api/dev-server/${e}/status`);gf.get(e)===t&&this.statuses[e]===n&&(this.statuses[e]=r)}catch(e){console.error(`[dev-server store] fetchStatus failed:`,e)}},async startDevServer(e){try{let t=await J(`/api/dev-server/${e}/start`,{method:`POST`});if(!t.ok)throw await q(t);let n=await t.json();this.statuses[e]=n}catch(e){throw console.error(`[dev-server store] startDevServer failed:`,e),e}},async stopDevServer(e){try{let t=await J(`/api/dev-server/${e}/stop`,{method:`POST`});if(!t.ok)throw await q(t);let n=await t.json();this.statuses[e]=n}catch(e){throw console.error(`[dev-server store] stopDevServer failed:`,e),e}},async fetchLogs(e,t=200){try{let n=await J(`/api/dev-server/${e}/logs?tail=${t}`);if(!n.ok)throw await q(n);let r=await n.json();return this.logs[e]=r.logs,r.logs}catch(e){return console.error(`[dev-server store] fetchLogs failed:`,e),``}},updateFromWsEvent(e,t){this.statuses[e]=t}}});function vf(e,t){return JSON.stringify([e,t??``])}async function yf(e,t){let n=await J(e,t);if(!n.ok)throw await q(n);if(n.status!==204)return await n.json()}var bf=Cr(`memory`,()=>{let e=m(null),t=m({}),n=m({}),r=m([]),i=m({}),a=m({}),o=m({}),s=m({}),c=m({}),l=m({}),u=m({}),d=m({}),f=m({}),p=m({}),h=m({}),g=lu(),_=new Map,v=new Set;function y(e,t){return vf(e,t)}function b(e,n){return t.value[y(e,n)]}function x(e,t){return r.value.includes(y(e,t))}async function S(i,a,o=!1){let s=y(i,a);e.value=s;let c=g.begin();(!o||!t.value[s])&&(n.value[s]=!0);let l=a?`?sessionId=${encodeURIComponent(a)}`:``;try{let e=await yf(`/api/memory/workspaces/${encodeURIComponent(i)}/view${l}`,{signal:c});if(!g.isCurrent(c))return;t.value[s]=e,r.value=r.value.filter(e=>e!==s);for(let t of e.scopes)v.add(t.id)}catch(e){if(uu(e)||!g.isCurrent(c))return;throw e}finally{g.isCurrent(c)&&delete n.value[s]}}function C(e){let t=_.get(e);return t||(t=lu(),_.set(e,t)),t}async function w(r,i){let a=y(r,i),o=t.value[a];if(e.value!==a||!o?.entriesNextCursor||n.value[a])return;let s=g.begin();n.value[a]=!0;try{let t=await yf(`/api/memory/entries?${new URLSearchParams({workspaceId:r,cursor:o.entriesNextCursor})}`,{signal:s});if(!g.isCurrent(s)||e.value!==a)return;o.entries=[...new Map([...o.entries,...t.items].map(e=>[e.id,e])).values()],o.entriesNextCursor=t.nextCursor}catch(e){if(uu(e)||!g.isCurrent(s))return;throw e}finally{delete n.value[a]}}async function T(e,t=!1,n=!1){let r=e?`workspace:${e}`:`all`,a=C(`scopes:${r}`).begin();(!t||!i.value[r])&&(l.value[r]=!0);let o=i.value[r],s=new URLSearchParams;e&&s.set(`workspaceId`,e),n&&o?.nextCursor&&s.set(`cursor`,o.nextCursor);let c=s.size?`?${s}`:``;try{let e=await yf(`/api/memory/scopes${c}`,{signal:a});if(!C(`scopes:${r}`).isCurrent(a))return;let t=n&&o?[...o.items,...e.items]:e.items,s=[...new Map(t.map(e=>[e.id,e])).values()];i.value[r]={...e,items:s};for(let t of e.items)v.add(t.id)}catch(e){if(uu(e)||!C(`scopes:${r}`).isCurrent(a))return;throw e}finally{C(`scopes:${r}`).isCurrent(a)&&delete l.value[r]}}function E(e){return T(e,!0,!0)}function D(e){return!!i.value[e?`workspace:${e}`:`all`]?.nextCursor}function O(e){return i.value[e?`workspace:${e}`:`all`]?.items??[]}async function k(e,t=``,n=!1){let r=`${e}\u0000${t}`,i=C(`entries:${r}`).begin(),o=a.value[r];u.value[r]=!0;let s=n?o?.nextCursor:void 0,c=new URLSearchParams({scopeId:e});t&&c.set(`query`,t),s&&c.set(`cursor`,s);try{let t=await yf(`/api/memory/entries?${c}`,{signal:i});if(!C(`entries:${r}`).isCurrent(i))return;a.value[r]=n&&o?{...t,items:[...o.items,...t.items]}:t,v.add(e)}catch(e){if(uu(e)||!C(`entries:${r}`).isCurrent(i))return;throw e}finally{C(`entries:${r}`).isCurrent(i)&&delete u.value[r]}}function A(e,t=``){return a.value[`${e}\u0000${t}`]?.items??[]}function ee(e,t=``){return!!a.value[`${e}\u0000${t}`]?.nextCursor}async function te(e,t=!1){let n=C(`proposals:${e}`).begin();try{let t=await yf(`/api/memory/proposals?scopeId=${encodeURIComponent(e)}`,{signal:n});C(`proposals:${e}`).isCurrent(n)&&(o.value[e]=t.items)}catch(r){if(uu(r)||!C(`proposals:${e}`).isCurrent(n)||t)return;throw r}}function j(e){return o.value[e]??[]}function ne(e){return(e??Object.keys(o.value)).reduce((e,t)=>e+(o.value[t]?.length??0),0)}async function M(e,t=!1){let n=C(`operations:${e}`).begin(),r=t?c.value[e]:void 0,i=new URLSearchParams({scopeId:e,limit:`50`});r&&i.set(`afterCursor`,r),d.value[e]=!0;try{let r=await yf(`/api/memory/operations?${i}`,{signal:n});if(!C(`operations:${e}`).isCurrent(n))return;s.value[e]=t?[...s.value[e]??[],...r.items]:r.items,c.value[e]=r.nextCursor,v.add(e)}catch(t){if(uu(t)||!C(`operations:${e}`).isCurrent(n))return;throw t}finally{C(`operations:${e}`).isCurrent(n)&&delete d.value[e]}}function re(e){return s.value[e]??[]}function ie(e){return c.value[e]}async function ae(e,t=!1){let n=`workspace-operations:${e}`,r=C(n).begin(),i=t?p.value[e]:void 0,a=new URLSearchParams({workspaceId:e,limit:`50`});i&&a.set(`afterCursor`,i),h.value[e]=!0;try{let i=await yf(`/api/memory/operations?${a}`,{signal:r});if(!C(n).isCurrent(r))return;let o=[...t?f.value[e]??[]:[],...i.items];f.value[e]=[...new Map(o.map(e=>[e.id,e])).values()],p.value[e]=i.nextCursor}catch(e){if(uu(e)||!C(n).isCurrent(r))return;throw e}finally{C(n).isCurrent(r)&&delete h.value[e]}}function N(e){return f.value[e]??[]}function oe(e){return p.value[e]}function se(n){if(n.journalOnly){for(let e of v)e===n.scopeId&&M(e);for(let e of Object.keys(f.value)){let r=Object.entries(t.value).some(([t,r])=>{let[i]=JSON.parse(t);return i===e&&r.scopes.some(e=>e.id===n.scopeId)});(n.level===`global`||r)&&ae(e)}return}let l=e=>e.id===n.scopeId?{...e,revision:n.revision,generation:n.generation}:e;for(let e of Object.values(i.value))e.items=e.items.map(l);for(let[i,a]of Object.entries(t.value))if(a.scopes=a.scopes.map(l),n.level===`global`||a.scopes.some(e=>e.id===n.scopeId)){r.value.includes(i)||r.value.push(i);let t=JSON.parse(i);i===e.value&&S(t[0],t[1]||void 0,!0)}for(let e of Object.keys(f.value)){let r=Object.entries(t.value).some(([t,r])=>{let[i]=JSON.parse(t);return i===e&&r.scopes.some(e=>e.id===n.scopeId)});(n.level===`global`||r)&&ae(e)}for(let e of v)if(e===n.scopeId){for(let t of Object.keys(a.value))t.startsWith(`${e}\u0000`)&&delete a.value[t];delete o.value[e],delete s.value[e],delete c.value[e],k(e,``),te(e,!0),M(e)}}async function ce(){let t=e.value;if(t){let[e,n]=JSON.parse(t);await S(e,n||void 0,!0),f.value[e]&&await ae(e)}for(let e of v)await Promise.all([k(e,``),te(e,!0),M(e)])}function le(e){let n=[...Object.values(i.value).flatMap(e=>e.items),...Object.values(t.value).flatMap(e=>e.scopes)].find(t=>t.id===e);if(n){se({scopeId:e,level:n.level,revision:n.revision+1,generation:n.generation,operationId:0});return}for(let t of Object.keys(a.value))t.startsWith(`${e}\u0000`)&&delete a.value[t];delete o.value[e],delete s.value[e],delete c.value[e]}async function ue(e,t,n){let r=await yf(e,{method:t,...n===void 0?{}:{body:JSON.stringify(n),headers:{"Content-Type":`application/json`}}}),i=n&&typeof n==`object`?n:{},a=[i.scopeId,i.sourceScopeId,i.targetScopeId].filter(e=>typeof e==`string`),s=/\/proposals\/([^/]+)\//.exec(e)?.[1];if(s)for(let[e,t]of Object.entries(o.value))t.some(e=>e.id===decodeURIComponent(s))&&a.push(e);for(let e of new Set(a))le(e);return r}function de(e){return ue(`/api/memory/entries`,`POST`,e)}function fe(e,t){return ue(`/api/memory/entries/${encodeURIComponent(e.id)}`,`PATCH`,{scopeId:e.scopeId,expectedRevision:e.revision,...t})}function pe(e){return ue(`/api/memory/entries/${encodeURIComponent(e.id)}`,`DELETE`,{scopeId:e.scopeId,expectedRevision:e.revision})}function P(e,t){return ue(`/api/memory/proposals/${encodeURIComponent(e)}/${t}`,`POST`)}function me(e,t){return ue(`/api/memory/entries/${encodeURIComponent(e.id)}/promote`,`POST`,{sourceScopeId:e.scopeId,targetScopeId:t})}async function he(e){return yf(`/api/memory/scopes/${encodeURIComponent(e)}/clear-preview`)}function ge(e,t){return ue(`/api/memory/scopes/${encodeURIComponent(e)}/clear`,`POST`,{expectedRevision:t,scopeId:e})}return{activeWorkspaceKey:e,workspaceViews:t,loadingWorkspaceKeys:n,invalidatedWorkspaceKeys:r,scopesByKey:i,entriesByKey:a,proposalsByScope:o,operationsByScope:s,operationsCursors:c,loadingScopes:l,loadingEntries:u,loadingOperations:d,workspaceOperationsById:f,workspaceOperationsCursors:p,loadingWorkspaceOperations:h,workspaceView:b,isWorkspaceInvalidated:x,loadWorkspace:S,loadMoreWorkspaceEntries:w,loadScopes:T,loadMoreScopes:E,hasMoreScopes:D,scopesFor:O,loadEntries:k,entriesFor:A,hasMoreEntries:ee,loadProposals:te,proposalsFor:j,pendingProposalCount:ne,loadOperations:M,operationsFor:re,operationsCursor:ie,loadWorkspaceOperations:ae,workspaceOperationsFor:N,workspaceOperationsCursor:oe,invalidate:se,refreshVisibleData:ce,createEntry:de,updateEntry:fe,deleteEntry:pe,decideProposal:P,promoteEntry:me,previewClear:he,clearScope:ge}}),Q=Us.global.t,xf=new Zl,Sf=0,Cf={"pr:ci-failed":{soundKey:`audioPrCiFailedSound`,enabledKey:`audioPrCiFailedEnabled`,volumeKey:`audioPrCiFailedVolume`},"pr:ci-recovered":{soundKey:`audioPrCiRecoveredSound`,enabledKey:`audioPrCiRecoveredEnabled`,volumeKey:`audioPrCiRecoveredVolume`},"pr:changes-requested":{soundKey:`audioPrChangesRequestedSound`,enabledKey:`audioPrChangesRequestedEnabled`,volumeKey:`audioPrChangesRequestedVolume`},"pr:approved":{soundKey:`audioPrApprovedSound`,enabledKey:`audioPrApprovedEnabled`,volumeKey:`audioPrApprovedVolume`},"pr:merge-conflict":{soundKey:`audioPrMergeConflictSound`,enabledKey:`audioPrMergeConflictEnabled`,volumeKey:`audioPrMergeConflictVolume`},"pr:ready-to-merge":{soundKey:`audioPrReadyToMergeSound`,enabledKey:`audioPrReadyToMergeEnabled`,volumeKey:`audioPrReadyToMergeVolume`},"pr:merged":{soundKey:`audioPrMergedSound`,enabledKey:`audioPrMergedEnabled`,volumeKey:`audioPrMergedVolume`}};function wf(e,t,n){let r=Fd().global,i=Cf[n];ff(e,void 0,t,pd(r[i.soundKey]),Number(r[i.volumeKey]),!!r[i.enabledKey])}function Tf(e,t){let n=[];return t&&n.push({label:Q(`pr.openPr`),color:`white`,noDismiss:!0,handler:()=>window.open(t,`_blank`)}),n.push({label:Q(`pr.openWorkspace`),color:`white`,noDismiss:!0,handler:()=>{window.location.hash=`#/workspace/${e}`}}),n.push({label:Q(`pr.dismiss`),color:`white`}),n}var Ef=null,Df=null,Of=0,kf=!1,Af=!1,jf=!1;function Mf(e){jf=e}function Nf(e,t,n){if(t.kind!==`session:started`)return;let r=Z();if(n){r.setActiveAgentSession(e,n);let t=r.peekPending(e);t&&t.agentSessionId===n&&r.dequeuePending(e)}let i=r.workspaces.find(t=>t.id===e);i&&(i.status===`completed`||i.status===`idle`||i.status===`error`||i.status===`quota`)&&r.updateWorkspaceFromEvent(e,{status:`executing`}),!jf&&n&&r.selectedWorkspaceId===e&&r.selectedSessionId!==n&&r.fetchSessions(e,n).catch(e=>{console.error(`[websocket] fetchSessions on session:started failed:`,e)})}function Pf(e,t){let n=Z();if(t.kind===`tool:call`&&t.name===`TodoWrite`){let r=t.input?.todos;return Array.isArray(r)&&n.updateAgentTodos(e,r.map(e=>({content:typeof e.content==`string`?e.content:``,status:typeof e.status==`string`?e.status:`pending`,activeForm:typeof e.activeForm==`string`?e.activeForm:void 0}))),!0}if(t.kind===`tool:call`&&t.name===`TaskCreate`){let r=t.input??{};return n.agentTaskCreate(e,t.toolCallId,{subject:typeof r.subject==`string`?r.subject:void 0,description:typeof r.description==`string`?r.description:void 0,activeForm:typeof r.activeForm==`string`?r.activeForm:void 0}),!0}if(t.kind===`tool:result`&&typeof t.output==`string`){let r=t.output.match(/^Task #(\d+) created successfully/);if(r)return n.agentTaskSetNumber(e,t.toolCallId,Number(r[1])),!0}if(t.kind===`tool:call`&&t.name===`TaskUpdate`){let r=t.input??{},i=r.task_id??r.taskId??r.id,a=typeof i==`number`?i:typeof i==`string`?Number(i):NaN;return Number.isFinite(a)&&n.agentTaskUpdate(e,a,{status:typeof r.status==`string`?r.status:void 0,content:typeof r.subject==`string`?r.subject:void 0,activeForm:typeof r.activeForm==`string`?r.activeForm:void 0}),!0}return!1}function Ff(e,t,n,r,i){let a=iu(),o=Z().activeAgentSessionIds[e],s=!i||!o||i===o;if(t.kind===`session:compacting`){!jf&&s&&a.setCompacting(e,t.active);return}a.append(e,t,n,r,i,!jf),!jf&&s&&(t.kind===`session:compacted`||t.kind===`message:text`||t.kind===`tool:call`)&&a.setCompacting(e,!1),Nf(e,t,i??void 0);let c=Z();if(t.kind===`session:user-input-requested`){if(t.requestKind===`question`?c.enqueuePending(e,{kind:`question`,agentSessionId:i??null,toolCallId:t.toolCallId,toolName:t.toolName,input:t.payload}):c.enqueuePending(e,{kind:`permission`,agentSessionId:i??null,toolCallId:t.toolCallId,toolName:t.toolName,toolInput:t.payload}),If().isCompacting(e)||c.updateWorkspaceFromEvent(e,{status:`awaiting-user`}),!jf){let n=c.workspaces.find(t=>t.id===e)?.name??``,r=t.requestKind===`question`?Q(`notification.agentQuestion`,{name:n}):Q(`notification.agentPermissionRequest`,{name:n}),i=Fd().global;ff(r,void 0,e,t.requestKind===`question`?i.audioQuestionSound:void 0,t.requestKind===`question`?i.audioQuestionVolume:void 0,i.audioQuestionNotifications)}return}if(t.kind===`subagent:progress`){c.upsertSubagent(e,{toolUseId:t.toolCallId,threadIds:t.threadIds,taskId:t.taskId,sessionId:i,status:t.status,phase:t.phase,ambient:t.ambient,description:t.description,taskType:t.taskType,lastToolName:t.lastToolName,totalTokens:t.totalTokens,toolUses:t.toolUses,durationMs:t.durationMs});return}if(!Pf(e,t)){if(t.kind===`tool:call`&&t.name===`Bash`){let n=t.input,r=`${n?.command??``} ${n?.description??``}`;/\bgit\b|commit|push|pull|merge|rebase|checkout|branch/i.test(r)&&c.triggerGitRefresh(),/\bgit\s+branch\s+-m\b/i.test(r)&&setTimeout(()=>{c.resyncWorkspaceBranch(e).catch(e=>{console.error(`[websocket] Branch resync failed:`,e)})},2500),/\bgh\s+pr\s+create\b/i.test(r)&&setTimeout(()=>c.triggerGitRefresh(),3e3)}if(t.kind!==`session:started`){if(t.kind===`turn:completed`){i&&c.markAgentTurnSettled(e,i);return}if(t.kind===`session:ended`){i&&c.clearPendingForSession(e,i);let n=c.activeAgentSessionIds[e];if(t.superseded===!0||typeof i==`string`&&i.length>0&&n!==void 0&&i!==n){Ol(c)||c.cancelQueuedMessage(e,i),i&&(c.clearActiveAgentSession(e,i),c.finalizeRunningSubagents(e,i));return}jf||a.setCompacting(e,!1),i?c.clearActiveAgentSession(e,i):c.clearActiveAgentSessionOwner(e);let r=c.workspaces.find(t=>t.id===e)?.status===`quota`?`quota`:t.reason===`completed`?`completed`:t.reason===`error`?`error`:`idle`;c.updateWorkspaceFromEvent(e,{status:r}),i&&t.reason===`completed`&&!Ol(c)&&c.flushQueuedMessage(e,i),c.finalizeRunningSubagents(e),c.fetchWorkspaces(),!jf&&t.reason!==`killed`&&t.reason!==`error`&&c.autoLoopStates[e]?.auto_loop!==!0&&ff(Q(`notification.agentFinished`,{name:c.workspaces.find(t=>t.id===e)?.name??``}),void 0,e);return}if(t.kind===`error`&&(t.category===`quota`&&(c.updateWorkspaceFromEvent(e,{status:`quota`}),c.fetchWorkspaces()),!jf)){let t=Fd().global;ff(Q(`notification.agentError`,{name:c.workspaces.find(t=>t.id===e)?.name??``}),void 0,e,t.audioAgentErrorSound,t.audioAgentErrorVolume,t.audioAgentErrorNotifications)}}}}var If=Cr(`websocket`,{state:()=>({connected:!1,reconnecting:!1,reconnectAttempt:0,lastEventId:null,pendingSyncRequests:[],_replaying:!1,_drainInProgress:!1,_refreshAfterSync:!1,_workspacesToRefreshAfterDrain:new Set}),actions:{connect(){if(Ef)return;if(kf=!0,Af||(Af=!0,window.addEventListener(`online`,()=>{kf&&this.connect()}),window.addEventListener(`offline`,()=>{this.connected=!1,this.reconnecting=kf,this.pendingSyncRequests=[],xf.disconnect(Q(`network.login.unreachable`));let e=Ef;Ef=null,e?.close(),Df&&=(clearTimeout(Df),null)})),!navigator.onLine){this.connected=!1,this.reconnecting=!0,this.pendingSyncRequests=[];return}let e=bl(`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}/ws`,_l()),t=new WebSocket(e);Ef=t,t.addEventListener(`open`,()=>{if(Ef!==t)return;this.connected=!0,Bd().refreshSnapshot(),this.reconnecting=!1,Of=0,this.reconnectAttempt=0;let e=Z().workspaces.map(e=>e.id);for(let t of e)this._send({type:`subscribe`,payload:{workspaceId:t}});bf().refreshVisibleData().catch(e=>{console.error(`[websocket] memory refresh after reconnect failed:`,e)}),this._refreshAfterSync=!0,this.lastEventId?this._send({type:`sync:request`,payload:{lastEventId:this.lastEventId,workspaceIds:e}}):(this._refreshAfterSync=!1,this.refreshLiveState())}),t.addEventListener(`message`,e=>{if(Ef===t)try{let t=JSON.parse(e.data);this._routeMessage(t)}catch{}}),t.addEventListener(`close`,()=>{Ef===t&&(xf.disconnect(Q(`network.login.unreachable`)),this.connected=!1,this.pendingSyncRequests=[],Ef=null,kf&&this._scheduleReconnect())}),t.addEventListener(`error`,()=>{})},async refreshLiveState(){let e=Z(),t=new Set(e.workspaces.map(e=>e.id));if(await e.fetchWorkspacesInfo(),!this.connected)return;for(let n of e.workspaces)t.has(n.id)||(this._refreshAfterSync=!0,this.subscribe(n.id));let n=_f(),r=new Set(Object.keys(n.statuses));e.selectedWorkspaceId&&r.add(e.selectedWorkspaceId);let i=new Set(Object.keys(e.autoLoopMessages));e.selectedWorkspaceId&&i.add(e.selectedWorkspaceId);let a=Vu(),o=new Set(Object.keys(a.current));e.selectedWorkspaceId&&o.add(e.selectedWorkspaceId),await Promise.allSettled([e.fetchAutoLoopStates(),su().refresh(),au().refreshKnown(),...[...o].map(e=>a.refresh(e)),...[...i].map(t=>e.fetchAutoLoopMessages(t)),...[...r].map(e=>n.fetchStatus(e))])},disconnect(){xf.disconnect(Q(`network.login.unreachable`)),kf=!1,this.pendingSyncRequests=[],Df&&=(clearTimeout(Df),null),Ef&&=(Ef.close(),null),this.connected=!1,this.reconnecting=!1,this.reconnectAttempt=0},subscribe(e){this._drainInProgress&&this._workspacesToRefreshAfterDrain.add(e),this._send({type:`subscribe`,payload:{workspaceId:e}}),this._send({type:`sync:request`,payload:{workspaceIds:[e]}})},unsubscribe(e){this._send({type:`unsubscribe`,payload:{workspaceId:e}})},subscribeChannel(e){this._send({type:`subscribe`,payload:{workspaceId:e}})},isCompacting(e){let t=Z();return(t.workspaces.find(t=>t.id===e)??t.archivedWorkspaces.find(t=>t.id===e))?.status===`compacting`||iu().isCompacting(e)},sendChatMessage(e,t,n,r,i=!1,a){if(this.isCompacting(e)||!this._send({type:`chat:message`,payload:{workspaceId:e,content:t,sessionId:n,agentPermissionModeOverride:r,force:i,clientMessageId:a}}))return!1;let o=Z(),s=o.workspaces.find(t=>t.id===e);return s&&(s.status===`completed`||s.status===`idle`||s.status===`error`||s.status===`quota`)&&o.updateWorkspaceFromEvent(e,{status:`executing`}),!0},sendChatMessageConfirmed(e,t,n){let r=`${Array.from(crypto.getRandomValues(new Uint32Array(4)),e=>e.toString(16)).join(`-`)}-${++Sf}`,i=xf.wait(e,r,Q(`network.login.unreachable`));return this.sendChatMessage(e,t,n,void 0,!1,r)||xf.settle(e,r,Error(Q(`network.login.unreachable`))),i},_send(e){if(Ef&&Ef.readyState===WebSocket.OPEN&&navigator.onLine){try{Ef.send(JSON.stringify(e))}catch{return!1}if(e.type===`sync:request`){let t=e.payload;this.pendingSyncRequests.push([...t?.workspaceIds??Z().workspaces.map(e=>e.id)])}return!0}return!1},isSyncPending(e){return this.pendingSyncRequests.some(t=>t.includes(e))},isConnected(){return Ef!==null&&Ef.readyState===WebSocket.OPEN},_scheduleReconnect(){if(Df)return;if(!kf||!navigator.onLine){this.reconnecting=kf;return}let e=Math.min(1e3*2**Of,3e4),t=Math.round(e*(.8+Math.random()*.4));Of++,this.reconnecting=!0,this.reconnectAttempt=Of,Of===4&&_l()&&Sl(),Df=setTimeout(()=>{Df=null,this.connect()},t)},_routeMessage(e){let t=Z();e.replayable!==!1&&e.id?this.lastEventId=e.id:e.replayable!==!1&&e.eventId&&(this.lastEventId=e.eventId);let n=e.payload??{},r=e.workspaceId??n.workspaceId??``,i=Hd(e.type);if(i){let n=Ud(i.event),a=e.createdAt??new Date().toISOString(),o=Q(`chat.hookScript`,{event:i.event}),s=i.kind===`output`?e.payload?.text??``:i.kind===`complete`?e.payload?.hadOutput===!1?Q(`chat.scriptDone`):Q(`chat.scriptComplete`,{phase:o}):Q(`chat.scriptError`,{phase:o,message:e.payload?.message??Q(`chat.unknownError`)});t.addActivityItem(r,{id:e.id??`${n}-${i.kind}-${Date.now()}`,type:`text`,content:s,timestamp:a,meta:{sender:n}});return}switch(e.type){case`memory:changed`:{let e=n.level;typeof n.scopeId==`string`&&(e===`global`||e===`project`||e===`workspace`)&&typeof n.revision==`number`&&typeof n.generation==`number`&&typeof n.operationId==`number`&&bf().invalidate({scopeId:n.scopeId,level:e,revision:n.revision,generation:n.generation,operationId:n.operationId,...n.journalOnly===!0?{journalOnly:!0}:{}});break}case`progress:changed`:if(!e.workspaceId||!e.sessionId||this._replaying||n.workspaceId!==e.workspaceId||n.sessionId!==e.sessionId)break;typeof n.id==`string`&&typeof n.revision==`number`&&su().apply(n);break;case`workspace:handoff`:{if(!r||this._replaying)break;let e=n.handoff;e?.workspaceId===r&&typeof e.id==`string`&&typeof e.state==`string`&&Vu().apply(e);break}case`kobo:update-checked`:Bd().applySnapshot(n);break;case`workspace:configuration`:if(!r||this._replaying||typeof n.engine!=`string`||typeof n.model!=`string`||typeof n.reasoningEffort!=`string`||![`plan`,`bypass`,`strict`,`interactive`].includes(n.agentPermissionMode))break;t.updateWorkspaceFromEvent(r,{engine:n.engine,model:n.model,reasoningEffort:n.reasoningEffort,agentPermissionMode:n.agentPermissionMode});break;case`workspace:status`:{if(!r||this._replaying||typeof n.status!=`string`)break;let e=t.activeAgentSessionIds[r];if(e&&typeof n.sessionId==`string`&&e!==n.sessionId)break;t.updateWorkspaceFromEvent(r,{status:n.status});break}case`chat:accepted`:{if(typeof n.clientMessageId==`string`){r&&xf.settle(r,n.clientMessageId);break}let e=typeof n.sessionId==`string`?n.sessionId:void 0;r&&e&&t.cancelQueuedMessage(r,e);break}case`chat:rejected`:{if(typeof n.clientMessageId==`string`){r&&xf.settle(r,n.clientMessageId,Error(typeof n.message==`string`?n.message:Q(`network.login.unreachable`)));break}let e=typeof n.sessionId==`string`?n.sessionId:void 0,i=typeof n.content==`string`?n.content:void 0,a=typeof n.message==`string`?n.message:Q(`network.login.unreachable`);if(r&&i){let n=(t.activityFeeds[r]??[]).find(e=>e.meta?.sender===`user`&&e.meta?.pending&&e.content===i);n&&t.removeActivityItem(r,n.id),e&&t.queueMessage(r,i,e)}Xl.create({type:`negative`,message:a,position:`top`,timeout:0});break}case`agent:event`:{if(!r)break;let t=e.createdAt;Ff(r,n,t,e.id??e.eventId,e.sessionId??null);break}case`agent:progress`:n.tasks&&Array.isArray(n.tasks)&&(t.tasks=n.tasks);break;case`user:message`:if(r&&typeof n.clientMessageId==`string`&&xf.settle(r,n.clientMessageId),r&&n.content){let i=n.content,a=n.sender??`user`,o=hf(n.source),s=e.sessionId,c=e.id??e.eventId??`user-${Date.now()}`,l=typeof e.createdAt==`string`?e.createdAt:void 0,u=l??new Date().toISOString(),d=t.activityFeeds[r]??[];if(!o&&a===`user`&&d.some(e=>e.meta?.sender===`user`&&e.content===i&&e.meta?.pending)){let e=d.findIndex(e=>e.meta?.sender===`user`&&e.content===i&&e.meta?.pending);e>=0&&(d[e]={...d[e],id:c,sessionId:s,...l?{timestamp:l}:{}})}else t.addActivityItem(r,{id:c,type:`text`,content:i,timestamp:u,sessionId:s,meta:{sender:a,...o?{source:o}:{}}})}break;case`sync:empty`:case`sync:error`:this.pendingSyncRequests.shift();break;case`sync:response`:{let e=this.pendingSyncRequests[0];this._replaying=!0,Mf(!0);try{let e=n.events??[],r=n.mode===`delta`?`delta`:`snapshot`,i=new Map;for(let t of e)if(t.type!==`sync:response`){if(t.type===`agent:event`&&t.workspaceId){let e=i.get(t.workspaceId)??{events:[],timestamps:[],sessionIds:[],eventIds:[],oldestId:void 0};e.events.push(t.payload),e.timestamps.push(t.createdAt),e.sessionIds.push(t.sessionId??null),e.eventIds.push(t.id??null),e.oldestId||=t.id,i.set(t.workspaceId,e);continue}this._routeMessage(t)}if(i.size>0){let e=iu();for(let[t,{events:n,timestamps:a,sessionIds:o,eventIds:s,oldestId:c}]of i){let i=r===`delta`?e.merge(t,n,a,{sessionIds:o,eventIds:s}):n.map((e,t)=>t);r===`snapshot`&&e.reset(t,n,a,{oldestId:c,hasMoreOlder:!0,sessionIds:o,eventIds:s}),r===`snapshot`&&Z().updateAgentTodos(t,[]);for(let e of i){let r=n[e];if(!r)continue;let i=o[e]??null;if(r.kind===`session:user-input-requested`){r.requestKind===`question`?Z().enqueuePending(t,{kind:`question`,agentSessionId:i,toolCallId:r.toolCallId,toolName:r.toolName,input:r.payload}):Z().enqueuePending(t,{kind:`permission`,agentSessionId:i,toolCallId:r.toolCallId,toolName:r.toolName,toolInput:r.payload});continue}if(r.kind===`session:started`){if(i){let e=Z();e.setActiveAgentSession(t,i);let n=e.peekPending(t);n&&n.agentSessionId===i&&e.dequeuePending(t)}continue}if(r.kind===`session:ended`){let e=Z();i?(e.clearPendingForSession(t,i),Ol(e)||e.cancelQueuedMessage(t,i),e.clearActiveAgentSession(t,i),e.finalizeRunningSubagents(t,i)):r.superseded!==!0&&(e.clearActiveAgentSessionOwner(t),e.finalizeRunningSubagents(t));continue}if(r.kind===`subagent:progress`){Z().upsertSubagent(t,{toolUseId:r.toolCallId,threadIds:r.threadIds,taskId:r.taskId,sessionId:i,status:r.status,phase:r.phase,ambient:r.ambient,description:r.description,taskType:r.taskType,lastToolName:r.lastToolName,totalTokens:r.totalTokens,toolUses:r.toolUses,durationMs:r.durationMs});continue}Pf(t,r)}}}let a=this.lastEventId,o=e.findLast(e=>e.replayable!==!1&&typeof e.id==`string`);if(o&&(this.lastEventId=o.id),n.truncated===!0&&o&&this.lastEventId!==a)this._drainInProgress=!0,this._send({type:`sync:request`,payload:{lastEventId:this.lastEventId,workspaceIds:t.workspaces.map(e=>e.id)}});else if(this._drainInProgress&&(this._drainInProgress=!1,this._workspacesToRefreshAfterDrain.size>0)){let e=[...this._workspacesToRefreshAfterDrain];this._workspacesToRefreshAfterDrain.clear(),this._send({type:`sync:request`,payload:{lastEventId:this.lastEventId,workspaceIds:e}})}}finally{if(this._replaying=!1,Mf(!1),e){let t=this.pendingSyncRequests.indexOf(e);t!==-1&&this.pendingSyncRequests.splice(t,1)}this._refreshAfterSync&&this.pendingSyncRequests.length===0&&(this._refreshAfterSync=!1,this.refreshLiveState())}break}case`usage:snapshot`:{let e=n;e.providerId&&e.snapshot&&t.applyUsageSnapshot({providerId:e.providerId,snapshot:e.snapshot});break}case`devserver:status`:{let e=_f();r&&e.updateFromWsEvent(r,n);break}case`task:updated`:r&&t.fetchWorkspaceDetails(r);break;case`setup:output`:t.addActivityItem(r,{id:e.id??`setup-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`setup:complete`:t.addActivityItem(r,{id:e.id??`setup-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?Q(`chat.scriptDone`):Q(`chat.scriptComplete`,{phase:`setup`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`setup:error`:t.addActivityItem(r,{id:e.id??`setup-error-${Date.now()}`,type:`text`,content:Q(`chat.scriptError`,{phase:`setup`,message:e.payload?.message??Q(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`cleanup:output`:t.addActivityItem(r,{id:e.id??`cleanup-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`cleanup:complete`:t.addActivityItem(r,{id:e.id??`cleanup-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?Q(`chat.scriptDone`):Q(`chat.scriptComplete`,{phase:`cleanup`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`cleanup:error`:t.addActivityItem(r,{id:e.id??`cleanup-error-${Date.now()}`,type:`text`,content:Q(`chat.scriptError`,{phase:`cleanup`,message:e.payload?.message??Q(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`archive:output`:t.addActivityItem(r,{id:e.id??`archive-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`archive:complete`:t.addActivityItem(r,{id:e.id??`archive-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?Q(`chat.scriptDone`):Q(`chat.scriptComplete`,{phase:`archive`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`archive:error`:t.addActivityItem(r,{id:e.id??`archive-error-${Date.now()}`,type:`text`,content:Q(`chat.scriptError`,{phase:`archive`,message:e.payload?.message??Q(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`workspace:unread`:if(r){let e=n.hasUnread??!1;t.updateWorkspaceFromEvent(r,{hasUnread:e})}break;case`workspace:awaiting-reminder`:{let e=n;if(!e.workspaceId)break;let t=Fd().global,r=Q(`notification.awaitingReminder`,{name:e.workspaceName??``,minutes:e.waitingMinutes??0});if(ff(r,void 0,e.workspaceId,t.audioQuestionSound,t.audioQuestionVolume,t.audioQuestionNotifications),document.hasFocus()){let t=e.workspaceId;Xl.create({type:`info`,position:`top`,timeout:1e4,message:r,actions:[{label:Q(`common.open`),color:`white`,handler:()=>{window.location.hash=`#/workspace/${t}`}}]})}break}case`workspace:pr-attention-dismissed`:if(r){let e=n.kind,i=n.prUpdatedAt;e&&i&&t.updateWorkspaceFromEvent(r,e===`changes-requested`?{prChangesDismissedAt:i}:{prCiFailureDismissedAt:i})}break;case`workspace:description-updated`:{if(!r)break;let e=n.description??null;t.updateWorkspaceFromEvent(r,{description:e});break}case`workspace:agent-description-updated`:{if(!r)break;let e=n.agentDescription??null;t.updateWorkspaceFromEvent(r,{agentDescription:e});break}case`cron:created`:{if(!r)break;let e=n.cron;if(!e)break;let i=t.crons[r]??[];i.some(t=>t.id===e.id)||(t.crons[r]=[...i,e]);let a=t.autoLoopStates[r];a&&(a.crons_count=t.crons[r].length);break}case`cron:fired`:{if(!r)break;let e=n,i=t.crons[r]??[];t.crons[r]=i.map(t=>t.id===e.id?{...t,nextFireAt:e.nextFireAt??t.nextFireAt,lastFiredAt:e.lastFiredAt??new Date().toISOString()}:t);break}case`cron:cancelled`:{if(!r)break;let e=n.id;if(!e)break;t.crons[r]=(t.crons[r]??[]).filter(t=>t.id!==e);let i=t.autoLoopStates[r];i&&(i.crons_count=t.crons[r].length);break}case`cron:updated`:{if(!r)break;let e=n.crons;if(Array.isArray(e)){t.crons[r]=e;let n=t.autoLoopStates[r];n&&(n.crons_count=e.length)}break}case`workspace:archived`:case`workspace:unarchived`:case`workspace:worktree-restored`:case`workspace:worktree-purged`:{let i=n.workspace;e.type===`workspace:worktree-restored`&&i&&i.id===r?t.applyRestoredWorkspace(i):t.invalidateWorkspaceLifecycleReads(r),(e.type===`workspace:archived`||e.type===`workspace:worktree-purged`)&&r&&nu(r),e.type===`workspace:archived`&&r&&t.selectedWorkspaceId===r&&(t.selectedWorkspaceId=null),t.fetchWorkspaces(),t.archivedLoaded&&t.fetchArchivedWorkspaces();break}case`workspace:deleted`:r&&au().forget(r),t.invalidateWorkspaceLifecycleReads(r),r&&nu(r),r&&t.selectedWorkspaceId===r&&(t.selectedWorkspaceId=null),t.fetchWorkspaces(),t.archivedLoaded&&t.fetchArchivedWorkspaces();break;case`pr:base-changed`:{if(!r)break;let e=n,i=e.oldBase??``,a=e.newBase??``;t.updateWorkspaceFromEvent(r,{sourceBranch:a}),Xl.create({type:`info`,position:`top`,timeout:Gd,message:Q(`pr.baseChanged`,{oldBase:i,newBase:a}),actions:Tf(r,e.prUrl)}),ff(Q(`pr.baseChanged`,{oldBase:i,newBase:a}),void 0,r);break}case`pr:ci-failed`:case`pr:ci-recovered`:case`pr:merge-conflict`:case`pr:merged`:{if(!r)break;let i=e.type,a=n,o=a.prNumber??0,s={"pr:ci-failed":{key:`toast.prCiFailed`,type:`negative`,timeout:0},"pr:ci-recovered":{key:`toast.prCiRecovered`,type:`positive`,timeout:5e3},"pr:merge-conflict":{key:`toast.prMergeConflict`,type:`warning`,timeout:Gd},"pr:merged":{key:`toast.prMerged`,type:`positive`,timeout:5e3}}[i],c=Q(s.key,{n:o});Xl.create({type:s.type,position:`top`,timeout:s.timeout,message:c,actions:Tf(r,a.prUrl)}),wf(c,r,i),i!==`pr:merged`&&t.refreshPrSnapshot(r);break}case`pr:changes-requested`:{if(!r)break;let e=n,i=Q(`toast.prChangesRequested`,{n:e.prNumber??0});Xl.create({type:`warning`,position:`top`,timeout:Gd,message:i,actions:Tf(r,e.prUrl)}),wf(i,r,`pr:changes-requested`),t.refreshPrSnapshot(r);break}case`pr:approved`:{if(!r)break;let e=n,i=Q(`toast.prApproved`,{n:e.prNumber??0});Xl.create({type:`positive`,position:`top`,timeout:5e3,message:i,actions:Tf(r,e.prUrl)}),wf(i,r,`pr:approved`),t.refreshPrSnapshot(r);break}case`pr:ready-to-merge`:{if(!r)break;let e=n,i=Q(`toast.prReadyToMerge`,{n:e.prNumber??0});Xl.create({type:`positive`,position:`top`,timeout:5e3,message:i,actions:Tf(r,e.prUrl)}),wf(i,r,`pr:ready-to-merge`),t.refreshPrSnapshot(r);break}case`wakeup:scheduled`:if(r){let e=n;typeof e.targetAt==`string`&&t.setPendingWakeup(r,{targetAt:e.targetAt,reason:e.reason})}break;case`wakeup:cancelled`:case`wakeup:fired`:case`wakeup:skipped`:r&&t.clearPendingWakeup(r);break;case`agent:quota-recovered`:r&&(t.clearPendingQuotaBackoff(r),t.updateWorkspaceFromEvent(r,{status:`executing`}));break;case`agent:quota-backoff`:{if(!r)break;let e=n;typeof e.targetAt==`string`&&typeof e.source==`string`&&t.setPendingQuotaBackoff(r,{targetAt:e.targetAt,resetsAt:e.resetsAt??null,source:e.source,reason:e.reason===`transient`?`transient`:`quota`});break}case`agent:quota-backoff-cancelled`:r&&(t.clearPendingQuotaBackoff(r),n.reason===`completed`&&t.fetchWorkspaces());break;case`review:return-status`:r&&au().setReturn(r,e.payload??null);break;case`autoloop:final-review`:{if(!r)break;let e=n;au().setFinalReview(r,e);let i=t.autoLoopStates[r];i&&(i.finalReview=e);break}case`autoloop:messages`:r&&t.fetchAutoLoopMessages(r).catch(()=>{});break;case`autoloop:state`:case`autoloop:enabled`:case`autoloop:iteration-started`:case`autoloop:ready-flipped`:t.fetchAutoLoopStates();break;case`autoloop:permission-overridden`:r&&ff(Q(`notification.autoLoopPermissionOverridden`,{name:t.workspaces.find(e=>e.id===r)?.name??``}),void 0,r);break;case`autoloop:waiting-for-slot`:{if(!r)break;let e=n,i=t.workspaces.find(e=>e.id===r)?.name??``;Xl.create({type:`info`,position:`top`,timeout:6e3,message:Q(`notification.autoLoopWaitingForSlot`,{name:i,running:e.running??0,limit:e.limit??0})});break}case`autoloop:disabled`:if(t.fetchAutoLoopStates(),r){let e=n?.reason,i=t.workspaces.find(e=>e.id===r)?.name??``,a=e===`error`?`notification.autoLoopError`:e===`stall`?`notification.autoLoopStalled`:e===`completed`?`notification.autoLoopCompleted`:e===`awaiting-clarification`?`notification.autoLoopAwaitingClarification`:null;a&&ff(Q(a,{name:i}),void 0,r)}break;case`workspace:create-progress`:{let e=typeof n.step==`string`?n.step:``,r=typeof n.creationId==`string`?n.creationId:``;r&&e&&t.setCreationProgress({creationId:r,step:e,index:typeof n.index==`number`?n.index:0,total:typeof n.total==`number`?n.total:0});break}case`workspace:create-failed`:{let e=typeof n.creationId==`string`?n.creationId:``,r=typeof n.step==`string`?n.step:``;e&&r&&t.setCreationProgress({creationId:e,step:r,index:-1,total:0});break}case`migration:progress`:case`migration:error`:oc().update(n)}}}}),Lf=N({__name:`App`,setup(e){let t=If(),n=Ml(),r=Z(),i=qd?window.parent.koboWorkspaceQueues:void 0,a;if(i)a=jl(r,i);else{let e=Al(r);window.koboWorkspaceQueues=e,a=()=>{e.dispose(),delete window.koboWorkspaceQueues}}return S(()=>{t.connect(),n.fetchTemplates(),sf()}),g(()=>{a?.(),t.disconnect()}),(e,t)=>{let n=T(`router-view`);return v(),ne(M,null,[D(n),D(pc),D(El)],64)}}}),Rf=e=>e,zf=Rf,Bf=Rf,Vf=Rf(()=>lr()),Hf={true:`inset`,item:`item-inset`,"item-thumbnail":`item-thumbnail-inset`},Uf={xs:2,sm:4,md:8,lg:16,xl:24},Wf=Pe({name:`QSeparator`,props:{...We,spaced:[Boolean,String],inset:[Boolean,String],vertical:Boolean,color:String,size:String},setup(e){let t=we(),n=Ge(e,t),r=j(()=>e.vertical?`vertical`:`horizontal`),i=j(()=>` q-separator--${r.value}`),a=j(()=>e.inset?`${i.value}-${Hf[e.inset]}`:``),o=j(()=>`q-separator${i.value}${a.value}`+(e.color===void 0?``:` bg-${e.color}`)+(n()?` q-separator--dark`:``)),s=j(()=>{let t={};if(e.size!==void 0&&(t[e.vertical?`width`:`height`]=e.size),e.spaced){let n=e.spaced===!0?`${Uf.md}px`:e.spaced in Uf?`${Uf[e.spaced]}px`:e.spaced,r=e.vertical?[`Left`,`Right`]:[`Top`,`Bottom`];t[`margin${r[0]}`]=t[`margin${r[1]}`]=n}return t});return()=>h(`hr`,{class:o.value,style:s.value,"aria-orientation":r.value})}}),Gf=()=>h(`svg`,{key:`svg`,class:`q-radio__bg absolute non-selectable`,viewBox:`0 0 24 24`},[h(`path`,{d:`M12,22a10,10 0 0 1 -10,-10a10,10 0 0 1 10,-10a10,10 0 0 1 10,10a10,10 0 0 1 -10,10m0,-22a12,12 0 0 0 -12,12a12,12 0 0 0 12,12a12,12 0 0 0 12,-12a12,12 0 0 0 -12,-12`}),h(`path`,{class:`q-radio__check`,d:`M12,6a6,6 0 0 0 -6,6a6,6 0 0 0 6,6a6,6 0 0 0 6,-6a6,6 0 0 0 -6,-6`})]);function Kf(e){(e.keyCode===13||e.keyCode===32)&&_e(e)}var qf=Pe({name:`QRadio`,props:{...We,...Ie,...lt,modelValue:{required:!0},val:{required:!0},label:String,leftLabel:Boolean,checkedIcon:String,uncheckedIcon:String,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},emits:[`update:modelValue`],setup(t,{slots:n,emit:r}){let{proxy:a}=O(),o=we(),s=Ge(t,o),c=i(null),{refocusTargetEl:l,refocusTarget:u}=ft(t,c),d=j(()=>e(t.modelValue)===e(t.val)),f=j(()=>`q-radio cursor-pointer no-outline row inline no-wrap items-center`+(t.disable?` disabled`:``)+(s()?` q-radio--dark`:``)+(t.dense?` q-radio--dense`:``)+(t.leftLabel?` reverse`:``)),p=j(()=>{let e=t.color!==void 0&&(t.keepColor||d.value)?` text-${t.color}`:``;return`q-radio__inner relative-position q-radio__inner--${d.value?`truthy`:`falsy`}${e}`}),m=j(()=>(d.value?t.checkedIcon:t.uncheckedIcon)||null),g=j(()=>t.disable?-1:t.tabindex||0),_=ut(()=>{let e={type:`radio`};return t.name!==void 0&&Object.assign(e,{".checked":d.value,"^checked":d.value?`checked`:void 0,name:t.name,value:t.val}),e});function v(e){e!==void 0&&(_e(e),u(e)),!t.disable&&!d.value&&r(`update:modelValue`,t.val,e)}function y(e){(e.keyCode===13||e.keyCode===32)&&v(e)}Object.assign(a,{set:v});let b=Gf();return()=>{let e=m.value===null?[b]:[h(`div`,{key:`icon`,class:`q-radio__icon-container absolute-full flex flex-center no-wrap`},[h(Re,{class:`q-radio__icon`,name:m.value})])];t.disable||_(e,`unshift`,` q-radio__native q-ma-none q-pa-none`);let r=[h(`div`,{class:p.value,style:pt(t.size),"aria-hidden":`true`},e)];l.value!==null&&r.push(l.value);let i=t.label===void 0?De(n.default):Te(n.default,[t.label]);return i!==void 0&&r.push(h(`div`,{class:`q-radio__label q-anchor--skip`},i)),h(`div`,{ref:c,class:f.value,tabindex:g.value,role:`radio`,"aria-label":t.label,"aria-checked":d.value?`true`:`false`,"aria-disabled":t.disable?`true`:void 0,onClick:v,onKeydown:Kf,onKeyup:y},r)}}}),Jf=()=>h(`div`,{key:`svg`,class:`q-checkbox__bg absolute`},[h(`svg`,{class:`q-checkbox__svg fit absolute-full`,viewBox:`0 0 24 24`},[h(`path`,{class:`q-checkbox__truthy`,fill:`none`,d:`M1.73,12.91 8.1,19.28 22.79,4.59`}),h(`path`,{class:`q-checkbox__indet`,d:`M4,14H20V10H4`})])]),Yf=Pe({name:`QCheckbox`,props:ht,emits:mt,setup(e){let t=Jf();function n(n,r){let i=j(()=>(n.value?e.checkedIcon:r.value?e.indeterminateIcon:e.uncheckedIcon)||null);return()=>i.value===null?[t]:[h(`div`,{key:`icon`,class:`q-checkbox__icon-container absolute-full flex flex-center no-wrap`},[h(Re,{class:`q-checkbox__icon`,name:i.value})])]}return gt(`checkbox`,n)}}),Xf=Pe({name:`QToggle`,props:{...ht,icon:String,iconColor:String},emits:mt,setup(e){function t(t,n){let r=j(()=>(t.value?e.checkedIcon:n.value?e.indeterminateIcon:e.uncheckedIcon)||e.icon),i=j(()=>t.value?e.iconColor:null);return()=>[h(`div`,{class:`q-toggle__track`}),h(`div`,{class:`q-toggle__thumb absolute flex flex-center no-wrap`},r.value===void 0?void 0:[h(Re,{name:r.value,color:i.value})])]}return gt(`toggle`,t)}}),Zf={radio:qf,checkbox:Yf,toggle:Xf},Qf=Object.keys(Zf);function $f(e,t){if(typeof e==`function`)return e;let n=e===void 0?t:e;return e=>e[n]}var ep=Pe({name:`QOptionGroup`,props:{...We,modelValue:{required:!0},options:{type:Array,validator:e=>e.every(Wt),default:()=>[]},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],name:String,type:{type:String,default:`radio`,validator:e=>Qf.includes(e)},color:String,keepColor:Boolean,dense:Boolean,size:String,leftLabel:Boolean,inline:Boolean,disable:Boolean},emits:[`update:modelValue`],setup(t,{emit:n,slots:r}){let a=we(),o=Array.isArray(t.modelValue);t.type===`radio`?o&&console.error(`q-option-group: model should not be array`):o||console.error(`q-option-group: model should be array in your case`);let s=Ge(t,a),c=j(()=>Zf[t.type]),l=i(null),u=j(()=>$f(t.optionValue,`value`)),d=j(()=>$f(t.optionLabel,`label`)),f=j(()=>$f(t.optionDisable,`disable`)),p=j(()=>t.options.map(e=>({val:u.value(e),name:e.name===void 0?t.name:e.name,disable:t.disable||f.value(e),leftLabel:e.leftLabel===void 0?t.leftLabel:e.leftLabel,color:e.color===void 0?t.color:e.color,checkedIcon:e.checkedIcon,uncheckedIcon:e.uncheckedIcon,dark:e.dark===void 0?s():e.dark,size:e.size===void 0?t.size:e.size,dense:t.dense,keepColor:e.keepColor===void 0?t.keepColor:e.keepColor}))),m=j(()=>{let n=e(t.modelValue),r=p.value,i=r.findIndex(t=>!t.disable&&e(t.val)===n);return i===-1?r.findIndex(e=>!e.disable):i}),g=j(()=>`q-option-group q-gutter-x-sm`+(t.inline?` q-option-group--inline`:``)),_=j(()=>{let e={role:t.type===`radio`?`radiogroup`:`group`};return t.disable&&(e[`aria-disabled`]=`true`),e});function v(e){n(`update:modelValue`,e)}function y(r){let i=r.keyCode===37||r.keyCode===38?-1:+(r.keyCode===39||r.keyCode===40);if(i===0)return;let o=l.value.getElementsByClassName(`q-radio`),s=Array.prototype.indexOf.call(o,r.target);if(s===-1)return;_e(r);let c=(r.keyCode===37||r.keyCode===39)&&a.lang.rtl===!0?-i:i,u=p.value,d=u.length,f=s;do f=(f+c+d)%d;while(f!==s&&u[f].disable);f!==s&&(o[f].focus(),e(u[f].val)!==e(t.modelValue)&&n(`update:modelValue`,u[f].val))}return()=>h(`div`,{ref:l,class:g.value,..._.value,onKeydown:t.type===`radio`?y:void 0},t.options.map((e,n)=>{let i=r[`label-`+n]===void 0?r.label===void 0?void 0:()=>r.label(e):()=>r[`label-`+n](e);return h(`div`,[h(c.value,{label:i===void 0?d.value(e):null,modelValue:t.modelValue,"onUpdate:modelValue":v,...p.value[n],tabindex:t.type===`radio`?n===m.value?0:-1:void 0},i)])}))}}),tp=()=>!0;function np(e){let t={};return e.forEach(e=>{t[e]=tp}),t}function rp(e){return e===void 0?`programmatic`:e.type.indexOf(`key`)===0?`escape`:`backdrop`}function ip(){let{emit:e,proxy:t}=O(),n=i(null),r=null;function a(){r=null,n.value.show()}function o(){n.value.hide()}function s(t){e(`ok`,t),o()}function c(){r=`cancel`,o()}function l(t){e(`hide`,r===null?rp(t):r)}return Object.assign(t,{show:a,hide:o}),{dialogRef:n,onDialogHide:l,onDialogOK:s,onDialogCancel:c}}var ap=[`ok`,`hide`];ip.emits=ap,ip.emitsObject=np(ap);var op=Pe({name:`DialogPluginComponent`,props:{...We,title:String,message:String,prompt:Object,options:Object,progress:[Boolean,Object],html:Boolean,ok:{type:[String,Object,Boolean],default:!0},cancel:[String,Object,Boolean],focus:{type:String,default:`ok`,validator:e=>[`ok`,`cancel`,`none`].includes(e)},stackButtons:Boolean,color:String,cardClass:[String,Array,Object],cardStyle:[String,Array,Object]},emits:[`ok`,`hide`],setup(t){let n=we(),r=Ge(t,n),{dialogRef:i,onDialogHide:a,onDialogOK:o,onDialogCancel:s}=ip(),c=m(t.prompt===void 0?t.options===void 0?void 0:t.options.model:t.prompt.model),l=j(()=>`q-dialog-plugin`+(r()?` q-dialog-plugin--dark q-dark`:``)+(t.progress===!1?``:` q-dialog-plugin--progress`)),u=j(()=>t.color||(r()?`amber`:`primary`)),d=j(()=>t.progress===!1?null:Wt(t.progress)?{component:t.progress.spinner||Ue,props:{color:t.progress.color||u.value}}:{component:Ue,props:{color:u.value}}),f=j(()=>t.prompt!==void 0||t.options!==void 0),p=j(()=>{if(!f.value)return{};let{model:e,isValid:n,items:r,...i}=t.prompt===void 0?t.options:t.prompt;return i}),g=j(()=>Wt(t.ok)||t.ok===!0?n.lang.label.ok:t.ok),v=j(()=>Wt(t.cancel)||t.cancel===!0?n.lang.label.cancel:t.cancel),y=j(()=>t.prompt===void 0?t.options!==void 0&&t.options.isValid!==void 0&&!t.options.isValid(c.value):t.prompt.isValid!==void 0&&!t.prompt.isValid(c.value)),b=j(()=>({color:u.value,label:g.value,ripple:!1,disable:y.value,...Wt(t.ok)?t.ok:{flat:!0},"data-autofocus":t.focus===`ok`&&!f.value||void 0,onClick:S})),x=j(()=>({color:u.value,label:v.value,ripple:!1,...Wt(t.cancel)?t.cancel:{flat:!0},"data-autofocus":t.focus===`cancel`&&!f.value||void 0,onClick:s}));_(()=>t.prompt&&t.prompt.model,C),_(()=>t.options&&t.options.model,C);function S(){o(e(c.value))}function C(e){c.value=e}function w(e){!y.value&&t.prompt.type!==`textarea`&&se(e,13)&&S()}function T(e,n){return t.html?h(en,{class:e,innerHTML:n}):h(en,{class:e},()=>n)}function E(){return[h(ml,{color:u.value,dense:!0,autofocus:!0,dark:r(),...p.value,modelValue:c.value,"onUpdate:modelValue":C,onKeyup:w})]}function D(){return[h(ep,{color:u.value,options:t.options.items,dark:r(),...p.value,modelValue:c.value,"onUpdate:modelValue":C})]}function O(){let e=[];return t.cancel&&e.push(h(He,x.value)),t.ok&&e.push(h(He,b.value)),h(hl,{class:t.stackButtons?`items-end`:``,vertical:t.stackButtons,align:`right`},()=>e)}function k(){let e=[];return t.title&&e.push(T(`q-dialog__title`,t.title)),t.progress!==!1&&e.push(h(en,{class:`q-dialog__progress`},()=>h(d.value.component,d.value.props))),t.message&&e.push(T(`q-dialog__message`,t.message)),t.prompt===void 0?t.options!==void 0&&e.push(h(Wf,{dark:r()}),h(en,{class:`scroll q-dialog-plugin__form`},D),h(Wf,{dark:r()})):e.push(h(en,{class:`scroll q-dialog-plugin__form`},E)),(t.ok||t.cancel)&&e.push(O()),e}function A(){return[h(an,{class:[l.value,t.cardClass],style:t.cardStyle,dark:r()},k)]}return()=>h(Gn,{ref:i,onHide:a},A)}});function sp(e,t){for(let n in t)n!==`spinner`&&Object(t[n])===t[n]&&!Array.isArray(t[n])?(e[n]=Object(e[n])===e[n]?{...e[n]}:{},sp(e[n],t[n])):e[n]=t[n]}function cp(e,t,n){return r=>{let a,o,s=t&&r.component!==void 0;if(s){let{component:e,componentProps:t}=r;a=typeof e==`string`?n.component(e):e,o=t||{}}else{let{class:t,style:n,...i}=r;a=e,o=i,t!==void 0&&(i.cardClass=t),n!==void 0&&(i.cardStyle=n)}let c,l=!1,u=i(null),d=F(!1,`dialog`),f=e=>{if(u.value?.[e]!==void 0){u.value[e]();return}let t=c.$.subTree?.component;for(;t;){if(typeof t.proxy?.[e]==`function`){t.proxy[e]();return}t=t.subTree?.component}console.error(`[Quasar] Incorrectly defined Dialog component`)},p=[],m=[],g={onOk(e){return p.push(e),g},onCancel(e){return m.push(e),g},onDismiss(e){return p.push(e),m.push(e),g},hide(){return f(`hide`),g},update(e){if(c!==null){if(s)Object.assign(o,e);else{let{class:t,style:n,...r}=e;t!==void 0&&(r.cardClass=t),n!==void 0&&(r.cardStyle=n),sp(o,r)}c.$forceUpdate()}return g}},_=e=>{l=!0,p.forEach(t=>{t(e)})},v=e=>{y.unmount(d),Se(d),y=null,c=null,l||m.forEach(t=>{t(e)})},y=Xt({name:`QGlobalDialog`,setup:()=>()=>h(a,{...o,ref:u,onOk:_,onHide:v,onVnodeMounted(...e){typeof o.onVnodeMounted==`function`&&o.onVnodeMounted(...e),x(()=>f(`show`))}})},n);return c=y.mount(d),g}}var lp={install({$q:e,parentApp:t}){e.dialog=this.create=cp(op,!0,t)}},up=new Map;function dp(e,t){up.set(e,t)}function fp(e){up.delete(e)}function pp(){let e=[];for(let[t,n]of up)try{n()&&e.push(t)}catch{}return e}function mp(){return pp().length>0}var hp=e=>e.startsWith(`/`);function gp(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function _p(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&gp(e.default)}var $=Object.assign;function vp(e,t){let n={};for(let r in t){let i=t[r];n[r]=bp(i)?i.map(e):e(i)}return n}var yp=()=>{},bp=Array.isArray;function xp(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var Sp=Symbol(``),Cp=function(e){return e[e.aborted=4]=`aborted`,e[e.cancelled=8]=`cancelled`,e[e.duplicated=16]=`duplicated`,e}({});function wp(e,t){return $(Error(),{type:e,[Sp]:!0},t)}function Tp(e,t){return e instanceof Error&&Sp in e&&(t==null||!!(e.type&t))}var Ep=Symbol(``),Dp=Symbol(``),Op=Symbol(``),kp=Symbol(``),Ap=Symbol(``);function jp(){return w(Op)}function Mp(e){return w(kp)}var Np=typeof document<`u`,Pp=/#/g,Fp=/&/g,Ip=/\//g,Lp=/=/g,Rp=/\?/g,zp=/\+/g,Bp=/%5B/g,Vp=/%5D/g,Hp=/%5E/g,Up=/%60/g,Wp=/%7B/g,Gp=/%7C/g,Kp=/%7D/g,qp=/%20/g;function Jp(e){return e==null?``:encodeURI(``+e).replace(Gp,`|`).replace(Bp,`[`).replace(Vp,`]`)}function Yp(e){return Jp(e).replace(Wp,`{`).replace(Kp,`}`).replace(Hp,`^`)}function Xp(e){return Jp(e).replace(zp,`%2B`).replace(qp,`+`).replace(Pp,`%23`).replace(Fp,`%26`).replace(Up,"`").replace(Wp,`{`).replace(Kp,`}`).replace(Hp,`^`)}function Zp(e){return Xp(e).replace(Lp,`%3D`)}function Qp(e){return Jp(e).replace(Pp,`%23`).replace(Rp,`%3F`)}function $p(e){return Qp(e).replace(Ip,`%2F`)}function em(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{}return``+e}var tm=/\/$/,nm=e=>e.replace(tm,``);function rm(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=dm(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:em(o)}}function im(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function am(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function om(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&sm(t.matched[r],n.matched[i])&&cm(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function sm(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function cm(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!lm(e[n],t[n]))return!1;return!0}function lm(e,t){return bp(e)?um(e,t):bp(t)?um(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function um(e,t){return bp(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function dm(e,t){if(hp(e))return e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o<r.length;o++)if(s=r[o],s!==`.`){if(s===`..`)a>1&&a--;else break}return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var fm={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0};function pm(e){if(!e){if(Np){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^/]+/,``)}else e=`/`}return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),nm(e)}var mm=/^[^#]+#/;function hm(e,t){return e.replace(mm,`#`)+t}function gm(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var _m=()=>history.scrollRestoration===`manual`?{left:window.scrollX,top:window.scrollY}:null;function vm(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`),i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=gm(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function ym(e,t){return(history.state?history.state.position-t:-1)+e}var bm=new Map;function xm(e){bm.set(e,_m())}function Sm(e){let t=bm.get(e);return bm.delete(e),t}function Cm(e){return typeof e==`string`||e&&typeof e==`object`}function wm(e){return typeof e==`string`||typeof e==`symbol`}function Tm(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;e<n.length;++e){let r=n[e].replace(zp,` `),i=r.indexOf(`=`),a=em(i<0?r:r.slice(0,i)),o=i<0?null:em(r.slice(i+1));if(a in t){let e=t[a];bp(e)||(e=t[a]=[e]),e.push(o)}else t[a]=o}return t}function Em(e){let t=``;for(let n in e){let r=e[n];if(n=Zp(n),r==null){r!==void 0&&(t+=(t.length?`&`:``)+n);continue}(bp(r)?r.map(e=>e&&Xp(e)):[r&&Xp(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function Dm(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=bp(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}function Om(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function km(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(wp(4,{from:n,to:t})):e instanceof Error?c(e):Cm(e)?c(wp(2,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,l)),d=Promise.resolve(u);e.length<3&&(d=d.then(l)),d.catch(e=>c(e))})}function Am(e,t,n,r,i=e=>e()){let a=[];for(let o of e)for(let e in o.components){let s=o.components[e];if(t===`beforeRouteEnter`||o.instances[e]){if(gp(s)){let c=(s.__vccOpts||s)[t];c&&a.push(km(c,n,r,o,e,i))}else{let c=s();a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=_p(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&km(c,n,r,o,e,i)()}))}}}return a}function jm(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;o<a;o++){let a=t.matched[o];a&&(e.matched.find(e=>sm(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>sm(e,s))||i.push(s))}return[n,r,i]}var Mm=()=>location.protocol+`//`+location.host;function Nm(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),am(n,``)}return am(n,e)+r+i}function Pm(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=Nm(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:`pop`,direction:u?u>0?`forward`:`back`:``})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){let{history:e}=window;e.state&&e.replaceState($({},e.state,{scroll:_m()}),``)}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),{pauseListeners:c,listen:l,destroy:d}}function Fm(e,t,n,r=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:null}}function Im(e){let{history:t,location:n}=window,r={value:Nm(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:Mm()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,$({},t.state,Fm(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=$({},i.value,t.state,{forward:e,scroll:_m()});a(o.current,o,!0),a(e,$({},Fm(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function Lm(e){e=pm(e);let t=Im(e),n=Pm(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=$({location:``,base:e,go:r,createHref:hm.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function Rm(e){return e=location.host?e||location.pathname+location.search:``,e.includes(`#`)||(e+=`#`),Lm(e)}var zm={type:0,value:``},Bm=/[a-zA-Z0-9_]/;function Vm(e){if(!e)return[[]];if(e===`/`)return[[zm]];if(!hp(e))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=0,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===0?a.push({type:0,value:l}):n===1||n===2||n===3?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;s<e.length;)switch(c=e[s++],n){case 0:c===`\\`?(r=n,n=4):c===`/`?(l&&d(),o()):c===`:`?(d(),n=1):f();break;case 4:f(),n=r;break;case 1:c===`(`?n=2:Bm.test(c)?f():(d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--);break;case 2:c===`)`?u[u.length-1]==`\\`?u=u.slice(0,-1)+c:n=3:u+=c;break;case 3:d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--,u=``;break;default:t(`Unknown state`)}return n===2&&t(`Unfinished custom RegExp for param "${l}"`),d(),o(),i}var Hm=`[^/]+?`,Um={sensitive:!1,strict:!1,start:!0,end:!0},Wm=/[.+*?^${}()[\]/\\]/g;function Gm(e,t){let n=$({},Um,t),r=[],i=n.start?`^`:``,a=[];for(let t of e){let e=t.length?[]:[90];n.strict&&!t.length&&(i+=`/`);for(let r=0;r<t.length;r++){let o=t[r],s=40+(n.sensitive?.25:0);if(o.type===0)r||(i+=`/`),i+=o.value.replace(Wm,`\\$&`),s+=40;else if(o.type===1){let{value:e,repeatable:n,optional:c,regexp:l}=o;a.push({name:e,repeatable:n,optional:c});let u=l||Hm;if(u!==Hm){s+=10;try{RegExp(`(${u})`)}catch(t){throw Error(`Invalid custom RegExp for param "${e}" (${u}): `+t.message)}}let d=n?`((?:${u})(?:/(?:${u}))*)`:`(${u})`;r||(d=c&&t.length<2?`(?:/${d})`:`/`+d),c&&(d+=`?`),i+=d,s+=20,c&&(s+=-8),n&&(s+=-20),u===`.*`&&(s+=-50)}e.push(s)}r.push(e)}if(n.strict&&n.end){let e=r.length-1;r[e][r[e].length-1]+=.7000000000000001}n.strict||(i+=`/?`),n.end?i+=`$`:n.strict&&!i.endsWith(`/`)&&(i+=`(?:/|$)`);let o=new RegExp(i,n.sensitive?``:`i`);function s(e){let t=e.match(o),n={};if(!t)return null;for(let e=1;e<t.length;e++){let r=t[e]||``,i=a[e-1];n[i.name]=r&&i.repeatable?r.split(`/`):r}return n}function c(t){let n=``,r=!1;for(let i of e){(!r||!n.endsWith(`/`))&&(n+=`/`),r=!1;for(let e of i)if(e.type===0)n+=e.value;else if(e.type===1){let{value:a,repeatable:o,optional:s}=e,c=a in t?t[a]:``;if(bp(c)&&!o)throw Error(`Provided param "${a}" is an array but it is not repeatable (* or + modifiers)`);let l=bp(c)?c.join(`/`):c;if(!l){if(s)i.length<2&&(n.endsWith(`/`)?n=n.slice(0,-1):r=!0);else throw Error(`Missing required param "${a}"`)}n+=l}}return n||`/`}return{re:o,score:r,keys:a,parse:s,stringify:c}}function Km(e,t){let n=0;for(;n<e.length&&n<t.length;){let r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===80?-1:1:e.length>t.length?t.length===1&&t[0]===80?1:-1:0}function qm(e,t){let n=0,r=e.score,i=t.score;for(;n<r.length&&n<i.length;){let e=Km(r[n],i[n]);if(e)return e;n++}if(Math.abs(i.length-r.length)===1){if(Jm(r))return 1;if(Jm(i))return-1}return i.length-r.length}function Jm(e){let t=e[e.length-1];return e.length>0&&t[t.length-1]<0}var Ym={strict:!1,end:!0,sensitive:!1};function Xm(e,t,n){let r=$(Gm(Vm(e.path),n),{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Zm(e,t){let n=[],r=new Map;t=xp(Ym,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=$m(e);s.aliasOf=r&&r.record;let l=xp(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push($m($({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&!hp(u)){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=Xm(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!th(d)&&o(e.name)),ah(d)&&c(d),s.children){let e=s.children;for(let t=0;t<e.length;t++)a(e[t],d,r&&r.children[t])}r||=d}return f?()=>{o(f)}:yp}function o(e){if(wm(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=rh(e,n);n.splice(t,0,e),e.record.name&&!th(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw wp(1,{location:e});s=i.record.name,a=$(Qm(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&Qm(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name,i.keys.forEach(e=>{e.optional&&!a[e.name]&&delete a[e.name]}));else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw wp(1,{location:e,currentLocation:t});s=i.record.name,a=$({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:nh(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function Qm(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function $m(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:eh(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function eh(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function th(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function nh(e){return e.reduce((e,t)=>$(e,t.meta),{})}function rh(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;qm(e,t[i])<0?r=i:n=i+1}let i=ih(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function ih(e){let t=e;for(;t=t.parent;)if(ah(t)&&qm(e,t)===0)return t}function ah({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function oh(e){let t=w(Op),n=w(kp),i=j(()=>{let n=r(e.to);return t.resolve(n)}),a=j(()=>{let{matched:e}=i.value,{length:t}=e,r=e[t-1],a=n.matched;if(!r||!a.length)return-1;let o=a.findIndex(sm.bind(null,r));if(o>-1)return o;let s=dh(e[t-2]);return t>1&&dh(r)===s&&a[a.length-1].path!==s?a.findIndex(sm.bind(null,e[t-2])):o}),o=j(()=>a.value>-1&&uh(n.params,i.value.params)),s=j(()=>a.value>-1&&a.value===n.matched.length-1&&cm(n.params,i.value.params));function c(n={}){if(lh(n)){let n=t[r(e.replace)?`replace`:`push`](r(e.to)).catch(yp);return e.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>n),n}return Promise.resolve()}return{route:i,href:j(()=>i.value.href),isActive:o,isExactActive:s,navigate:c}}function sh(e){return e.length===1?e[0]:e}var ch=N({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:oh,setup(e,{slots:t}){let n=l(oh(e)),{options:r}=w(Op),i=j(()=>({[fh(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[fh(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&sh(t.default(n));return e.custom?r:h(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function lh(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(e.button===void 0||e.button===0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function uh(e,t){for(let n in t){let r=t[n],i=e[n];if(bp(r)){if(!bp(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}else if(r!==i)return!1}return!0}function dh(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var fh=(e,t,n)=>e??t??n,ph=N({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){let i=w(Ap),a=j(()=>e.route||i.value),o=w(Dp,0),s=j(()=>{let e=r(o),{matched:t}=a.value,n;for(;(n=t[e])&&!n.components;)e++;return e}),c=j(()=>a.value.matched[s.value]);C(Dp,j(()=>s.value+1)),C(Ep,c),C(Ap,a);let l=m();return _(()=>[l.value,c.value,e.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!sm(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let r=a.value,i=e.name,o=c.value,s=o&&o.components[i];if(!s)return mh(n.default,{Component:s,route:r});let u=o.props[i],d=u?u===!0?r.params:typeof u==`function`?u(r):u:null,f=h(s,$({},d,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(o.instances[i]=null)},ref:l}));return mh(n.default,{Component:f,route:r})||f}}});function mh(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var hh=ph;function gh(e){let t=Zm(e.routes,e),n=e.parseQuery||Tm,a=e.stringifyQuery||Em,s=e.history,c=Om(),l=Om(),u=Om(),d=i(fm),f=i(0),p=fm;Np&&e.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let m=vp.bind(null,e=>``+e),h=vp.bind(null,$p),g=vp.bind(null,em);function _(e,n){let r,i;wm(e)?(r=t.getRecordMatcher(e),i=n):i=e;let a=t.addRoute(i,r);return f.value++,()=>{a(),f.value++}}function v(e){let n=t.getRecordMatcher(e);n&&(t.removeRoute(n),f.value++)}function y(){t.clearRoutes(),f.value++}function b(){return t.getRoutes().map(e=>e.record)}function S(e){return!!t.getRecordMatcher(e)}function C(e,r){if(f.value,typeof e==`string`){r||=e.startsWith(`/`)?fm:d.value;let i=rm(n,e,r.path),a=t.resolve({path:i.path},r),o=s.createHref(i.fullPath);return $(i,a,{params:g(a.params),redirectedFrom:void 0,href:o})}r=$({},r||(e.path!=null&&e.path.startsWith(`/`)&&!(`name`in e&&e.name)?fm:d.value));let i;if(e.path!=null)i=$({},e,{path:rm(n,e.path,r.path).path});else{let t=$({},e.params);for(let e in t)t[e]??delete t[e];i=$({},e,{params:h(t)}),r.params=h(r.params)}let o=t.resolve(i,r),c=e.hash||``;o.params=m(g(o.params));let l=im(a,$({},e,{hash:Yp(c),path:o.path})),u=s.createHref(l);return $({fullPath:l,hash:c,query:a===Em?Dm(e.query):e.query||{}},o,{redirectedFrom:void 0,href:u})}function w(e){return typeof e==`string`?rm(n,e,d.value.path):$({},e)}function T(e,t){if(p!==e)return wp(8,{from:t,to:e})}function E(e){return k(e)}function D(e){return E($(w(e),{replace:!0}))}function O(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=w(i):{path:i},i.params={}),$({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function k(e,t){let n=p=C(e),r=d.value,i=e.state,o=e.force,s=e.replace===!0,c=O(n,r);if(c)return k($(w(c),{state:typeof c==`object`?$({},i,c.state):i,force:o,replace:s}),t||n);let l=n;l.redirectedFrom=t;let u;return!o&&om(a,r,n)&&(u=wp(16,{to:l,from:r}),le(r,r,!0,!1)),(u?Promise.resolve(u):te(l,r)).catch(e=>Tp(e)?Tp(e,2)?e:ce(e):oe(e,l,r)).then(e=>{if(e){if(Tp(e,2))return k($({replace:s},w(e.to),{state:typeof e.to==`object`?$({},i,e.to.state):i,force:o}),t||l)}else e=ne(l,r,!0,s,i);return j(l,r,e),e})}function A(e,t){let n=T(e,t);return n?Promise.reject(n):Promise.resolve()}function ee(e){let t=fe.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function te(e,t){let n,[r,i,a]=jm(e,t);n=Am(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(km(r,e,t))});let o=A.bind(null,e,t);return n.push(o),P(n).then(()=>{n=[];for(let r of c.list())n.push(km(r,e,t));return n.push(o),P(n)}).then(()=>{n=Am(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(km(r,e,t))});return n.push(o),P(n)}).then(()=>{n=[];for(let r of a)if(r.beforeEnter){if(bp(r.beforeEnter))for(let i of r.beforeEnter)n.push(km(i,e,t));else n.push(km(r.beforeEnter,e,t))}return n.push(o),P(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=Am(a,`beforeRouteEnter`,e,t,ee),n.push(o),P(n))).then(()=>{n=[];for(let r of l.list())n.push(km(r,e,t));return n.push(o),P(n)}).catch(e=>Tp(e,8)?e:Promise.reject(e))}function j(e,t,n){u.list().forEach(r=>ee(()=>r(e,t,n)))}function ne(e,t,n,r,i){let a=T(e,t);if(a)return a;let o=t===fm,c=Np?history.state:{};n&&(r||o?s.replace(e.fullPath,$({scroll:o&&c&&c.scroll},i)):s.push(e.fullPath,i)),d.value=e,le(e,t,n,o),ce()}let M;function re(){M||=s.listen((e,t,n)=>{if(!pe.listening)return;let r=C(e),i=O(r,pe.currentRoute.value);if(i){k($(i,{replace:!0,force:!0}),r).catch(yp);return}p=r;let a=d.value;Np&&n.delta&&xm(ym(a.fullPath,n.delta)),te(r,a).catch(e=>Tp(e,12)?e:Tp(e,2)?(k($(w(e.to),{force:!0}),r).then(e=>{Tp(e,20)&&!n.delta&&n.type===`pop`&&s.go(-1,!1)}).catch(yp),Promise.reject()):(n.delta&&s.go(-n.delta,!1),oe(e,r,a))).then(e=>{e||=ne(r,a,!1),e&&(n.delta&&!Tp(e,8)?s.go(-n.delta,!1):n.type===`pop`&&Tp(e,20)&&s.go(-1,!1)),j(r,a,e)}).catch(yp)})}let ie=Om(),ae=Om(),N;function oe(e,t,n){ce(e);let r=ae.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function se(){return N&&d.value!==fm?Promise.resolve():new Promise((e,t)=>{ie.add([e,t])})}function ce(e){return N||(N=!e,re(),ie.list().forEach(([t,n])=>e?n(e):t()),ie.reset()),e}function le(t,n,r,i){let{scrollBehavior:a}=e;if(!Np||!a)return Promise.resolve();let o=!r&&Sm(ym(t.fullPath,0))||(i||!r)&&history.state&&history.state.scroll||null;return x().then(()=>a(t,n,o)).then(e=>t===d.value&&e&&vm(e)).catch(e=>t===d.value&&oe(e,t,n))}let ue=e=>s.go(e),de,fe=new Set,pe={currentRoute:d,listening:!0,addRoute:_,removeRoute:v,clearRoutes:y,hasRoute:S,getRoutes:b,resolve:C,options:e,push:E,replace:D,go:ue,back:()=>ue(-1),forward:()=>ue(1),beforeEach:c.add,beforeResolve:l.add,afterEach:u.add,onError:ae.add,isReady:se,install(e){e.component(`RouterLink`,ch),e.component(`RouterView`,hh),e.config.globalProperties.$router=pe,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>r(d)}),Np&&!de&&d.value===fm&&(de=!0,E(s.location).catch(e=>{}));let t={};for(let e in fm)Object.defineProperty(t,e,{get:()=>d.value[e],enumerable:!0});e.provide(Op,pe),e.provide(kp,o(t)),e.provide(Ap,d);let n=e.unmount;fe.add(e),e.unmount=function(){fe.delete(e),fe.size<1&&(p=fm,M&&M(),M=null,d.value=fm,de=!1,N=!1),n()}}};function P(e){return e.reduce((e,t)=>e.then(()=>ee(t)),Promise.resolve())}return pe}var _h=[{path:`/`,component:()=>Ls(()=>import(`./MainLayout-DZJ9BvZw.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])),children:[{path:``,redirect:{name:`workspace`}},{path:`dashboard`,name:`dashboard`,component:()=>Ls(()=>import(`./DashboardPage-3byhBITf.js`),__vite__mapDeps([50,1,2,3,4,51,5,12,6,13,16,7,27,28,29,32,43,45,52]))},{path:`workspace/:id?`,name:`workspace`,component:()=>Ls(()=>import(`./WorkspacePage-CK5XCuG_.js`).then(e=>e.t),__vite__mapDeps([53,1,2,3,4,54,8,5,9,6,10,11,12,13,14,37,7,38,20,16,21,17,18,22,23,24,25,26,55,32,28,43,56,57,58,47,36,31,39,40,41,42,30,35,44,45,46,48,59]))},{path:`split`,name:`split`,component:()=>Ls(()=>import(`./SplitWorkspacePage-D6r2pl5g.js`),__vite__mapDeps([60,1,2,3,4,5,7,9,6,10,11,12,13,14,31,43,47,61]))},{path:`create`,name:`create`,component:()=>Ls(()=>import(`./CreatePage-CCCCAhrx.js`),__vite__mapDeps([62,1,2,3,4,54,8,5,9,6,10,11,12,13,14,37,7,38,16,22,63,40,25,26,32,33,34,35,43,44,24,45,56,57,46,64]))},{path:`settings`,name:`settings`,component:()=>Ls(()=>import(`./SettingsPage-BLD0xWFB.js`),__vite__mapDeps([36,1,2,3,4,5,10,8,9,6,11,12,13,14,37,7,38,31,16,23,24,25,39,40,41,42,30,32,35,43,44,45,46,47,48]))},{path:`search`,name:`search`,component:()=>Ls(()=>import(`./SearchPage-BqTBIt5E.js`),__vite__mapDeps([65,1,2,4,3,12,6,13,22,28,43,44,16,7,24,45,58,66]))},{path:`health`,name:`health`,component:()=>Ls(()=>import(`./HealthPage-BSwhZQRo.js`),__vite__mapDeps([67,1,2,3,4,8,5,11,12,6,13,22,43,44,16,7,24,45,68]))},{path:`changelog`,name:`changelog`,component:()=>Ls(()=>import(`./ChangelogPage-dEWpjTlp.js`),__vite__mapDeps([69,1,2,4,3,12,6,13,17,18,14,5,43,44,16,7,24,45,70]))}]},{path:`/:catchAll(.*)*`,redirect:`/`}],vh=Bf(()=>{let e=gh({scrollBehavior:()=>({left:0,top:0}),routes:_h,history:Rm()});e.beforeEach((e,t)=>{if(Qd(e,t)||e.fullPath===t.fullPath||!mp())return!0;let n=Us.global.t;return new Promise(e=>{lp.create({title:n(`unsaved.title`),message:n(`unsaved.message`),dark:!0,cancel:{flat:!0,label:n(`unsaved.stay`),color:`grey-5`},ok:{flat:!0,label:n(`unsaved.leave`),color:`negative`}}).onOk(()=>e(!0)).onCancel(()=>e(!1))})});let t=()=>{let e=Z();return ef(mp(),Ol(e)?{}:e.queuedMessages)};return window.addEventListener(`beforeunload`,e=>{t()&&(e.preventDefault(),e.returnValue=``)}),qd&&(window.koboPane={hasUnsavedWork:t,ready:()=>e.currentRoute.value.name!=null,navigate:t=>e.push({name:`workspace`,params:{id:t}}),workspaceId:()=>typeof e.currentRoute.value.params.id==`string`?e.currentRoute.value.params.id:void 0}),e});async function yh(e,t){let n=e(Lf);n.use($t,t);let r=typeof Vf==`function`?await Vf({}):Vf;n.use(r);let i=c(typeof vh==`function`?await vh({store:r}):vh);return r.use(({store:e})=>{e.router=i}),{app:n,store:r,router:i}}var bh={config:{dark:!0,brand:{primary:`#6c63ff`,secondary:`#26a69a`,accent:`#9c27b0`,dark:`#1a1a2e`,"dark-page":`#1a1a2e`,positive:`#21ba45`,negative:`#c10015`,info:`#31ccec`,warning:`#f2c037`}},plugins:{Notify:Xl,Dialog:lp}},xh=function(){return!!(window.location.hostname===`localhost`||window.location.hostname===`[::1]`||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/))},Sh;typeof window<`u`&&(Sh=typeof Promise<`u`?new Promise(function(e){return window.addEventListener(`load`,e)}):{then:function(e){return window.addEventListener(`load`,e)}});function Ch(e,t){t===void 0&&(t={});var n=t.registrationOptions;n===void 0&&(n={}),delete t.registrationOptions;var r=function(e){for(var n=[],r=arguments.length-1;r-->0;)n[r]=arguments[r+1];t&&t[e]&&t[e].apply(t,n)};`serviceWorker`in navigator&&Sh.then(function(){xh()?(Eh(e,r,n),navigator.serviceWorker.ready.then(function(e){r(`ready`,e)}).catch(function(e){return wh(r,e)})):(Th(e,r,n),navigator.serviceWorker.ready.then(function(e){r(`ready`,e)}).catch(function(e){return wh(r,e)}))})}function wh(e,t){navigator.onLine||e(`offline`),e(`error`,t)}function Th(e,t,n){navigator.serviceWorker.register(e,n).then(function(e){if(t(`registered`,e),e.waiting){t(`updated`,e);return}e.onupdatefound=function(){t(`updatefound`,e);var n=e.installing;n.onstatechange=function(){n.state===`installed`&&(navigator.serviceWorker.controller?t(`updated`,e):t(`cached`,e))}}}).catch(function(e){return wh(t,e)})}function Eh(e,t,n){fetch(e).then(function(r){r.status===404?(t(`error`,Error(`Service worker not found at `+e)),Dh()):r.headers.get(`content-type`).indexOf(`javascript`)===-1?(t(`error`,Error(`Expected `+e+` to have javascript content-type, but received `+r.headers.get(`content-type`))),Dh()):Th(e,t,n)}).catch(function(e){return wh(t,e)})}function Dh(){`serviceWorker`in navigator&&navigator.serviceWorker.ready.then(function(e){e.unregister()}).catch(function(e){return wh(emit,e)})}Ch(`/sw.js`);var Oh=`/`;async function kh({app:e,router:t,store:n},r){let i=!1,a=e=>{try{return t.resolve(e).href}catch{}return Object(e)===e?null:e},o=e=>{if(i=!0,typeof e==`string`&&/^https?:\/\//.test(e)){window.location.href=e;return}let t=a(e);t!==null&&(window.location.href=t,window.location.reload())},s=window.location.hash.slice(1)||`/`;for(let a=0;i===!1&&a<r.length;a++)try{await r[a]({app:e,router:t,store:n,ssrContext:null,redirect:o,urlPath:s,publicPath:Oh})}catch(e){i||console.error(`[Quasar] boot error:`,e);return}i||(e.use(t),e.mount(`#q-app`))}yh(de,bh).then(e=>{let[t,n]=Promise.allSettled===void 0?[`all`,e=>e.map(e=>e.default)]:[`allSettled`,e=>e.map(e=>{if(e.status===`rejected`){console.error(`[Quasar] boot error:`,e.reason);return}return e.value.default})];return Promise[t]([Ls(()=>import(`./i18n-DnuTmw3O.js`),[]),Ls(()=>import(`./network-auth-BE4qbvWm.js`),[]),Ls(()=>import(`./notify-theme-BVFBBGrJ.js`),[])]).then(t=>{kh(e,n(t).filter(e=>typeof e==`function`))})});export{md as $,Cr as $t,Id as A,yl as At,$u as B,Ys as Bt,Yd as C,Xl as Ct,Kd as D,bl as Dt,Gd as E,Sl as Et,Td as F,Jc as Ft,td as G,ic as Gt,ed as H,ac as Ht,wd as I,Pc as It,dd as J,Us as Jt,sd as K,q as Kt,Od as L,Nc as Lt,Ad as M,ml as Mt,Nd as N,pl as Nt,Wd as O,_l as Ot,kd as P,Mc as Pt,ad as Q,bs as Qt,Ed as R,Fc as Rt,qd as S,$l as St,$d as T,Ml as Tt,Qu as U,J as Ut,rd as V,Y as Vt,nd as W,rc as Wt,ud as X,qs as Xt,pd as Y,Hs as Yt,od as Z,Ls as Zt,mf as _,rn as _n,iu as _t,jp as a,Mn as an,Z as at,df as b,qt as bn,nu as bt,ep as c,un as cn,vu as ct,qf as d,cn as dn,pu as dt,wr as en,Gu as et,Wf as f,vn as fn,du as ft,_f as g,an as gn,au as gt,bf as h,on as hn,su as ht,Mp as i,Ln as in,Cu as it,Fd as j,hl as jt,Bd as k,vl as kt,Xf as l,bn as ln,xu as lt,If as m,sn as mn,uu as mt,Cp as n,Bn as nn,Xu as nt,dp as o,Nn as on,yu as ot,zf as p,_n as pn,lu as pt,cd as q,Js as qt,Tp as r,Vn as rn,Vu as rt,fp as s,fn as sn,gu as st,ch as t,Gn as tn,Ku as tt,Yf as u,dn as un,fu as ut,hf as v,en as vn,eu as vt,Xd as w,Nl as wt,Jd as x,Wt as xn,Ql as xt,pf as y,Ut as yn,tu as yt,hd as z,gc as zt};
20
+ sudo setfacl -Rd -m u:$(whoami):rwX . && sudo setfacl -R -m u:$(whoami):rwX .`,"settings.purgeDocsPermissionsRecoverChownIntro":`Option B — Take ownership (simpler, loses the "created by root in container" trace but rarely matters):`,"settings.purgeDocsPermissionsRecoverChownCommand":` sudo chown -R $(whoami):$(whoami) .`,"settings.purgeDocsPermissionsRecoverFootnote":"Tip: you can run these commands directly on the worktrees root (e.g. `~/.worktrees/`) to cover all existing AND future workspaces at once. Once done, Kōbō purge will work without permission errors.","contextMenu.runSetup":`Run setup script`,"contextMenu.exportEvents":`Export events (CSV)`,"contextMenu.dismissChangesRequested":`Mark 'Changes requested' as seen`,"contextMenu.dismissCiFailure":`Mark 'CI failure' as seen`,"contextMenu.restoreChangesRequested":`Mark 'Changes requested' as unseen`,"contextMenu.restoreCiFailure":`Mark 'CI failure' as unseen`,"contextMenu.exportingEvents":`Preparing export…`,"contextMenu.exportEventsError":`Event export failed`,"contextMenu.openNotion":`Open in Notion`,"contextMenu.openSentry":`Open in Sentry`,"contextMenu.openPr":`Open PR`,"contextMenu.ignorePrWatch":`Ignore PR checks`,"contextMenu.resumePrWatch":`Resume PR checks`,"contextMenu.prWatchToggleFailed":`Failed to update PR checks setting`,"workspace.favorite":`Mark as favorite`,"workspace.unfavorite":`Remove from favorites`,"workspace.showFavoritesOnly":`Show favorites only`,"workspace.tagFilter":`Filter by tags`,"workspace.tagFilterActive":`Filter by tags ({count} selected)`,"workspace.tagFilterClear":`Clear`,"workspace.tagFilterEmpty":`No tags yet. Define them in Settings, then assign them from a workspace menu.`,"workspace.searchArchivedToggle":`Also search archived workspaces`,"workspace.descriptionPlaceholder":`Add a short description`,"workspace.descriptionDialogHint":`Plain text, 200 characters max. Leave empty to clear.`,"workspace.descriptionTooLong":`Description must be 200 characters or fewer.`,"workspace.descriptionSaveFailed":`Failed to save description.`,"workspace.agentDescriptionTooltip":`Live status maintained by the agent`,"mcp.tool.setWorkspaceDescription":`Set the workspace short description (≤ 200 chars).`,"tags.manage":`Manage tags`,"tags.manageTitle":`Manage workspace tags`,"tags.noTagsDefined":`No tags defined. Add some in Settings > Global > Tags.`,"tags.orphanedHint":`{count} tag(s) are no longer in the global catalog. Uncheck to remove them.`,"settings.tagsTitle":`Workspace tags`,"settings.tagsHint":`Define the tags you can assign to workspaces. Type to add, click the cross to remove.`,"settings.tagsLabel":`Available tags`,"settings.branchPrefixesTitle":`Branch prefixes`,"settings.branchPrefixesHint":`Manage the git branch prefixes available on the workspace creation page. The first one is pre-selected by default.`,"settings.branchPrefixesEmpty":`No branch prefix defined. Add at least one below.`,"settings.branchPrefixesAddLabel":`New prefix`,"settings.branchPrefixesEditHint":`Click to rename`,"settings.branchPrefixesMoveUp":`Move up`,"settings.branchPrefixesMoveDown":`Move down`,"settings.worktreesTitle":`Git worktrees`,"settings.worktreesHint":`Choose where new workspace worktrees are created. Relative paths are project-relative; Linux/macOS and Windows absolute paths, $HOME, ~, and %USERPROFILE% are supported.`,"settings.worktreesPathLabel":`Worktrees path`,"settings.worktreesPathRequired":`Worktrees path is required.`,"settings.worktreesPrefixByProject":`Prefix worktrees by project name`,"settings.worktreesPrefixByProjectHint":`Place each worktree under a sub-directory named after the project, to avoid collisions when multiple projects share the same worktrees root.`,"settings.shareTitle":`Share configuration`,"settings.shareHint":`Export your settings, templates and tags as a JSON bundle. MCP API keys are stripped from exports for security.`,"settings.exportConfig":`Export`,"settings.importConfig":`Import`,"settings.exportSuccess":`Configuration exported`,"settings.importSuccess":`Configuration imported`,"settings.importConfirmTitle":`Import configuration`,"settings.importConfirmMessage":`This will replace your current settings, templates and tags. Your MCP keys are preserved. Continue?`,"settings.mcp.title":`External LLM connections (MCP)`,"settings.mcp.hint":`Connect an MCP client to create, archive, purge, delete or restore workspaces, resume a PR and talk to your agents.`,"settings.mcp.remoteDisabled":`Remote connections require network access and a server restart after enabling it.`,"settings.mcp.clientName":`Client name (optional)`,"settings.mcp.connection":`Connection`,"settings.mcp.local":`Local HTTP`,"settings.mcp.remote":`Remote HTTP`,"settings.mcp.proxy":`Reverse proxy`,"settings.mcp.stdio":`Local stdio`,"settings.mcp.copyUrl":`Copy URL`,"settings.mcp.copyConfig":`Copy configuration`,"settings.mcp.copyWithToken":`Copy with token`,"settings.mcp.genericFormat":`These examples use a generic mcpServers format. Adapt the container format to your MCP client. Token placeholders are kept in previews.`,"settings.mcp.tokenUnavailable":`No token is available. Enable network access before copying authenticated configuration.`,"settings.mcp.stdioUnavailable":`The stdio entrypoint is unavailable in this installation. Use HTTP or build Kōbō first.`,"settings.mcp.copyFailed":`Could not copy to the clipboard.`,"tours.settings.mcp.title":`Connect an external LLM`,"tours.settings.mcp.description":`Copy an HTTP or stdio configuration to connect an external assistant. It can create a workspace with the form options, resume a PR, manage archiving, deletion or restoration, and communicate with your agents.`,"settings.network.title":`Network access`,"settings.network.hint":`Control Kōbō from another device on your trusted LAN. Off = localhost only. On = reachable on your network, protected by a token. Restart Kōbō after toggling.`,"settings.network.enable":`Enable network access`,"settings.network.behindProxy":`Behind a reverse proxy`,"settings.network.behindProxyHint":`Kōbō can no longer tell your own machine apart from a proxied request — even localhost will need the token from now on. Enable this only if a reverse proxy (Traefik, nginx, Caddy…) sits in front of Kōbō.`,"settings.network.restartRequired":`Restart Kōbō to apply the new bind address.`,"settings.network.token":`Access token`,"settings.network.copy":`Copy`,"settings.network.copied":`Copied`,"settings.network.regenerate":`Regenerate`,"settings.network.regenerateConfirm":`Regenerate the token? Connected devices will need the new token.`,"settings.network.urls":`LAN URLs`,"settings.network.scan":`Scan to connect`,"settings.network.noUrls":`No LAN address detected.`,"settings.network.loadFailed":`Failed to load network access settings.`,"settings.network.updateFailed":`Failed to update network access settings.`,"settings.unsavedChanges.title":`Unsaved changes`,"settings.unsavedChanges.message":`This project has unsaved changes. Switching projects will discard them.`,"settings.unsavedChanges.discard":`Discard and switch`,"settings.unsavedChanges.cancel":`Cancel`,"settings.loadFailed":`Settings could not be loaded`,"settings.loadFailedHint":`Saving is disabled: the form is showing default values, and writing them would overwrite your real configuration.`,"health.title":`Health`,"health.tooltip":`System health`,"changelog.title":`Changelog`,"changelog.tooltip":`What's new in Kōbō`,"changelog.empty":`No changelog available.`,"changelog.current":`current`,"changelog.currentVersion":`Current version: v{version}`,"health.envTitle":`Environment`,"health.version":`Version`,"health.koboHome":`Kōbō home`,"health.dbTitle":`Database`,"health.dbPath":`Path`,"health.dbSize":`Size`,"health.schemaVersion":`Schema version`,"health.settingsSchemaVersion":`Settings schema`,"health.runtimesTitle":`Agent runtimes`,"health.claudeCliTitle":`Claude Code`,"health.claudeCliMissing":`claude not on PATH`,"health.codexCliTitle":`OpenAI Codex`,"health.codexCliMissing":`codex binary not resolvable`,"health.forgeCliTitle":`Forge CLI (gh / glab)`,"health.forgeCliMissing":`Neither gh nor glab found — pull requests and CI watching are unavailable`,"health.workspacesTitle":`Workspaces`,"health.workspacesCount":`{total} total, {archived} archived`,"health.worktreesMissing":`{count} worktree(s) missing on disk`,"health.sessionsTitle":`Agent sessions`,"health.sessionsOrphaned":`{n} orphaned running session(s)`,"health.integrationsTitle":`Integrations`,"health.integrationConfigured":`configured`,"health.integrationMissing":`not configured`,"health.integrationDisabled":`disabled`,"settings.integrationEnabled":`Enable integration`,"health.activeTitle":`Active state`,"health.activeQuotaBackoffs":`Pending quota backoffs`,"health.activeWakeups":`Scheduled wakeups`,"health.activeAutoLoop":`Auto-loop running`,"health.activeAgentSessions":`Live agent sessions`,"health.activeDevServers":`Running dev servers`,"health.noneActive":`None.`,"health.quotaResumeAt":`resumes at {time}`,"health.wakeupAt":`wakes at {time}`,"health.startedAgo":`started {time} ago`,"health.autoLoopReady":`ready, iterating`,"health.autoLoopGrooming":`grooming in progress`,"session.started":`Session started`,"session.ended":`Session ended`,"session.compacted":`Context compacted`,"session.endedCompleted":`Turn finished — send a message to continue`,"session.endedKilled":`Session stopped`,"session.endedError":`Session ended on an error`,"session.endedWatchdog":`Session force-closed after a period of inactivity`,"tool.running":`Running...`,"activity.raw_lines":`Raw output lines ({n})`,"api.timeout":`The request timed out after {seconds} seconds.`,"api.mutationTimeout":`The request timed out after {seconds} seconds. The operation may still be running. Refresh its status before trying again.`,"activity.sessionsError":`Could not load sessions: {message}`,"activity.historyError":`Could not load conversation history: {message}`,"activity.loading_older":`Loading older messages…`,"activity.compacting":`Compacting context…`,"activity.prev_user_message":`Previous user message`,"activity.scroll_to_bottom":`Scroll to bottom`,"activity.empty":`Nothing yet`,"activity.emptyHint":`The agent output will show up here as soon as a session starts.`,"activity.a11y.region":`Agent activity announcements`,"activity.a11y.agentSaid":`Agent: {text}`,"activity.a11y.toolStarted":`Tool {name} started`,"activity.a11y.toolFinished":`Tool {name} finished`,"activity.a11y.toolFailed":`Tool {name} failed`,"chat.systemPrompt":`Kōbō instructions`,"chat.agent":`Agent`,"chat.cleanupScript":`Cleanup script`,"chat.archiveScript":`Archive script`,"chat.setupScript":`Setup script`,"chat.hookScript":`Hook {event}`,"chat.scriptDone":`Done`,"chat.scriptComplete":`[{phase}] Complete`,"chat.scriptError":`[{phase}] Error: {message}`,"chat.unknownError":`unknown`,"chat.you":`You`,"chat.session":`Session`,"chat.nActions":`{n} action | {n} actions`,"chat.lastUpdatedAt":`Last updated at {time}`,"chat.scrollToTurnTop":`Scroll to top of this message`,"migration.backing_up":`Backing up the database…`,"migration.running":`Migrating agent data — {processed}/{total}`,"migration.error":`Migration failed`,"migration.backup_location":`A backup was saved at {path}. Restart Kōbō to retry.`,"migration.retry":`Restart Kōbō to retry.`,"engine.select":`Engine`,"engine.model":`Model`,"engine.effort":`Reasoning effort`,"wakeup.scheduledIn":`Next wakeup in {n}s`,"wakeup.scheduledAt":`Next wakeup at {time}`,"wakeup.firing":`Waking up...`,"wakeup.reason":`Reason: {reason}`,"wakeup.cancel":`Cancel this wakeup`,"wakeup.pendingIndicator":`Wakeup scheduled`,"cron.pendingIndicator":`{n} cron(s) scheduled`,"schedule.tabLabel":`Schedule`,"schedule.admissionTitle":`New automatic session currently unavailable.`,"schedule.admissionHint":`Deadlines are unchanged. Delivery into an existing conversation follows its own rules.`,"schedule.admission.not-found":`Workspace not found.`,"schedule.admission.archived":`Workspace archived.`,"schedule.admission.purged":`Restore the worktree first.`,"schedule.admission.shutdown":`Server is shutting down.`,"schedule.admission.lifecycle":`A workspace operation is in progress.`,"schedule.admission.active-session":`The current session has not closed yet.`,"schedule.admission.awaiting-user":`A user answer is required.`,"schedule.admission.compacting":`Context compaction is in progress.`,"schedule.admission.quota":`Waiting for quota recovery.`,"schedule.admission.blocked":`Auto-loop is blocked; resolve its reported cause.`,"schedule.admission.capacity":`Concurrency limit reached: {running}/{limit} sessions.`,"schedule.panelTitle":`Automation`,"schedule.panelDescription":`Wake this workspace later or run instructions on a schedule.`,"schedule.activeTitle":`Active schedules`,"schedule.emptyTitle":`Nothing scheduled`,"schedule.emptyDescription":`Create a wakeup or recurring task below.`,"schedule.cancelWakeup":`Cancel this wakeup`,"schedule.cancelCron":`Delete this recurring task`,"schedule.createTitle":`Create a schedule`,"schedule.createDescription":`Choose when and how the agent should run.`,"schedule.typeWakeup":`One-time wakeup`,"schedule.typeRecurring":`Recurring task`,"schedule.wakeupDescription":`Run the prompt once after a delay.`,"schedule.cronDescription":`Run the prompt repeatedly on a fixed schedule.`,"schedule.promptHint":`Instructions that will be sent to the agent`,"schedule.frequencyTitle":`Frequency`,"schedule.advancedDescription":`Use a raw cron expression`,"schedule.cronExpressionLabel":`Cron expression`,"schedule.sessionModeTitle":`Execution session`,"schedule.modeResume":`Resume session`,"schedule.oneShotHint":`Remove this schedule after its first run.`,"schedule.wakeupTitle":`Wakeup pending`,"schedule.cronsTitle":`Recurring schedules`,"schedule.noWakeup":`No wakeup scheduled`,"schedule.noCrons":`No cron scheduled`,"schedule.invalidCron":`Inactive: invalid expression. Remove and recreate this schedule.`,"schedule.nextFireAt":`next at {time}`,"schedule.lastFiredAt":`last fired {time} ago`,"schedule.addCronTitle":`Add a recurring task`,"schedule.addWakeupTitle":`Schedule a wakeup`,"schedule.every":`Every`,"schedule.unitMinutes":`minutes`,"schedule.unitHours":`hours`,"schedule.unitDays":`days`,"schedule.daysDriftWarning":`The interval may shrink to 1 day at the end of the month (cron limitation).`,"schedule.advancedExpression":`Advanced expression (optional)`,"schedule.advancedHint":`Raw cron (e.g. */15 * * * *) or {'@'}hourly/{'@'}daily — overrides the picker when set.`,"schedule.promptLabel":`Prompt`,"schedule.labelOptional":`Label (optional)`,"schedule.delayMinutes":`Delay (minutes)`,"schedule.modeFresh":`New session`,"schedule.oneShot":`Run only once`,"schedule.addCronBtn":`Add cron`,"schedule.addWakeupBtn":`Schedule wakeup`,"schedule.cronCreated":`Recurring task added`,"schedule.wakeupCreated":`Wakeup scheduled`,"askUserQuestion.title":`The agent is asking a question`,"askUserQuestion.submit":`Submit answer`,"askUserQuestion.multiSelectHint":`Select one or more options`,"askUserQuestion.otherOption":`Other`,"askUserQuestion.otherOptionHint":`specify in your next chat message`,"askUserQuestion.freeFormLabel":`Specify your answer`,"askUserQuestion.freeFormHint":`This answer will be sent directly to the agent.`,"askUserQuestion.noPending":`No pending question`,"askUserQuestion.next":`Next`,"askUserQuestion.previous":`Previous`,"askUserQuestion.cancel":`Cancel`,"askUserQuestion.cancelTooltip":`Skip this question — the agent will proceed without an answer`,"askUserQuestion.collapse":`Collapse the question panel`,"askUserQuestion.expand":`Expand the question panel`,"permissionRequest.title":`The agent wants to use a tool`,"permissionRequest.allow":`Allow`,"permissionRequest.allowOnce":`Allow once`,"permissionRequest.allowTurn":`Allow this turn`,"permissionRequest.operationUnavailable":`Operation details unavailable; approve once or the entire tool.`,"permissionRequest.allowOperation":`Always this operation`,"permissionRequest.allowTool":`Always this tool`,"permissionRequest.deny":`Deny`,"permissionRequest.tool":`Tool`,"permissionRequest.input":`Input`,"permissionRequest.rawInput":`Technical details`,"permissionRequest.collapse":`Collapse the permission panel`,"permissionRequest.expand":`Expand the permission panel`,"permissionRequest.denied":`denied by user`,"workspaceStatus.created":`created`,"workspaceStatus.extracting":`extracting`,"workspaceStatus.brainstorming":`brainstorming`,"workspaceStatus.compacting":`compacting`,"chatInput.compactingBanner":`Context compaction in progress. Sending will be available when it finishes.`,"workspaceStatus.executing":`running`,"workspaceStatus.awaitingUser":`awaiting your answer`,"workspaceStatus.completed":`completed`,"workspaceStatus.idle":`idle`,"workspaceStatus.error":`error`,"workspaceStatus.quota":`quota reached`,"workspaceStatus.retrying":`auto-resuming`,"workspaceList.prOpen":`#{n} — Pull request open`,"workspaceList.prWatchDisabledIndicator":`PR checks ignored for this workspace`,"workspaceList.prChangesRequested":`#{n} — Changes requested`,"workspaceList.attentionCiFailed":`CI failed`,"workspaceList.attentionChangesRequested":`Changes requested`,"workspaceList.attentionReadyToMerge":`Ready to merge`,"autoLoop.status.active":`Active`,"autoLoop.status.waiting":`Waiting`,"autoLoop.status.blocked":`Blocked`,"autoLoop.status.completed":`Completed`,"autoLoop.status.stopped":`Stopped`,"autoLoop.phase.grooming":`Preparation`,"autoLoop.phase.execution":`Execution`,"autoLoop.phase.finalization":`Finalization`,"autoLoop.iteration":`Iteration {count}`,"autoLoop.resume":`Resume auto-loop`,"autoLoop.retryAt":`Retry scheduled for`,"autoLoop.actionFailed":`The action could not be completed.`,"autoLoop.messages.count":`{count} queued instruction(s)`,"autoLoop.messages.pending":`Queued`,"autoLoop.messages.dispatching":`Sending`,"autoLoop.messages.unknown":`Delivery unknown`,"autoLoop.messages.delivered":`Delivered`,"autoLoop.messages.cancel":`Cancel instruction`,"autoLoop.messages.acknowledge":`Mark as received`,"autoLoop.messages.retry":`Send again`,"autoLoop.messages.unknownHelp":`Delivery could not be confirmed. Check the conversation before deciding. Sending again may duplicate an instruction already received.`,"autoLoop.reason.quota":`Waiting for provider quota.`,"autoLoop.reason.transient":`Recovering after a temporary interruption.`,"autoLoop.reason.awaiting-user":`Waiting for your answer.`,"autoLoop.reason.capacity-or-lifecycle":`Waiting for an available agent slot.`,"autoLoop.reason.message-delivery-unknown":`Resolve the instruction with unknown delivery before resuming.`,"autoLoop.reason.error":`The loop needs attention before it can continue.`,"autoLoop.reason.stall":`No progress detected. Review the last session before resuming.`,"autoLoop.reason.awaiting-clarification":`A clarification is needed before continuing.`,"autoLoop.toggle":`Auto-loop`,"autoLoop.start":`Start auto-loop`,"autoLoop.prepare":`Prepare for auto-loop`,"autoLoop.reprepare":`Re-prepare for auto-loop`,"autoLoop.reprepareTooltip":`Re-run the grooming pass to add or refresh tasks before resuming the loop`,"autoLoop.prepareBusy":`Wait for the agent to finish before preparing`,"autoLoop.forceReady":`I know what I'm doing — skip grooming`,"autoLoop.forceReadyConfirm":`Skip grooming and mark auto-loop ready? This may cause the loop to stall if tasks aren't atomic.`,"autoLoop.stop":`Stop auto-loop`,"autoLoop.notReady":`Run 'Prepare for auto-loop' first`,"autoLoop.noTasks":`Add tasks first`,"autoLoop.progress":`Auto-loop · {done}/{total} tasks`,"autoLoop.preparing":`Auto-loop · preparing`,"autoLoop.preparingTooltip":`Grooming in progress — the agent is creating / reviewing tasks. The loop will start running once it calls mark_auto_loop_ready.`,"autoLoop.running":`Auto-loop running`,"autoLoop.startInMode":`Start in auto-loop mode`,"autoLoop.brainstormModelPrefix":`Brainstorm:`,"autoLoop.brainstormModelTooltip":`Model used only for the initial brainstorming session — every task after that uses the model picked above`,"autoLoop.brainstormReasoningPrefix":`Brainstorm:`,"autoLoop.brainstormReasoningTooltip":`Reasoning level used only for the initial brainstorming session`,"autoLoop.executionModelPrefix":`Loop:`,"autoLoop.executionModelTooltip":`Model used for every auto-loop task after the initial brainstorming session`,"autoLoop.sessionMode.perTask":`New session per task`,"autoLoop.sessionMode.label":`Session:`,"autoLoop.sessionMode.perTaskTooltip":`Each task starts a fresh Claude Code session with no memory of prior tasks`,"autoLoop.sessionMode.continuous":`Continuous session`,"autoLoop.sessionMode.continuousTooltip":`All tasks run in the same session — the agent keeps full context, but the session grows longer over time`,"koboCommand.prepAutoloopDesc":`Prepare tasks for auto-loop mode (groom for atomicity)`,"staleSessionBanner.title":`Auto-loop running`,"staleSessionBanner.message":`You're viewing an older session — the agent is currently working in the latest one.`,"staleSessionBanner.staleTitle":`Older session`,"staleSessionBanner.staleMessage":`You're viewing an older session — messages you send go to this session, not the latest one.`,"staleSessionBanner.switchToCurrent":`Switch to current`,"network.login.title":`Network access`,"network.login.description":`This Kōbō requires a token to be controlled from the network. Paste the token shown in Settings on the host machine.`,"network.login.tokenLabel":`Token`,"network.login.tokenPlaceholder":`Paste your token`,"network.login.connect":`Connect`,"network.login.invalid":`Invalid token`,"network.login.serverError":`Server error — try again.`,"network.login.unreachable":`Kōbō is unreachable — check your connection.`,"layout.toggleWorkspaces":`Toggle workspaces panel`,"layout.togglePanel":`Toggle side panel`,"unsaved.title":`Leave without saving?`,"unsaved.message":`You have unsaved changes. Leaving this page discards them.`,"unsaved.leave":`Leave`,"unsaved.stay":`Stay`,"prCheckout.staleRetriesExhausted":`The repository state kept changing while we tried to apply your choices. Close this dialog and try again from the pull request picker.`,"prPicker.title":`Import from a pull request`,"prPicker.filterAll":`All`,"prPicker.filterMine":`Mine`,"prPicker.filterReviewRequested":`Review requested`,"prPicker.searchPlaceholder":`Search pull requests…`,"prPicker.loadMore":`Load more`,"prPicker.empty":`No open pull request matches.`,"prPicker.forkNotSupported":`This PR comes from a fork; Kōbō cannot check it out.`,"prPicker.loadFailed":`Failed to load pull requests.`,"prPicker.badge.workspaceExists":`Already open in Kōbō`,"prPicker.badge.worktreePresent":`Worktree present`,"prPicker.badge.localBranch":`Local branch`,"prPicker.badge.new":`New`,"prPicker.badge.draft":`Draft`,"prCheckout.title":`Prepare the worktree`,"prCheckout.apply":`Apply`,"prCheckout.cancel":`Cancel`,"prCheckout.retry":`Retry`,"prCheckout.diagnoseFailed":`Failed to diagnose the pull request.`,"prCheckout.resolveFailed":`Failed to resolve the pull request checkout.`,"prCheckout.path.required":`Enter a worktree path that does not already exist.`,"prCheckout.workspace.restoreNotAvailable":"Restoring a purged workspace isn't available yet from here. Recreate its worktree folder on disk (e.g. `git worktree add`) and Kōbō will reattach it automatically within about 30 seconds.","prCheckout.staleReloaded":`The repository changed; the diagnosis has been refreshed.`,"prCheckout.step.blocked":`Cannot continue`,"prCheckout.step.path":`Worktree location`,"prCheckout.step.workspace":`Existing workspace`,"prCheckout.step.worktree":`Existing worktree`,"prCheckout.step.operation":`Git operation in progress`,"prCheckout.step.changes":`Uncommitted changes`,"prCheckout.step.divergence":`Local branch vs origin`,"prCheckout.workspace.activeHint":`A workspace named "{name}" already tracks this branch.`,"prCheckout.workspace.open":`Open that workspace`,"prCheckout.workspace.continue":`Continue on another path`,"prCheckout.workspace.unarchive":`Unarchive and open it`,"prCheckout.workspace.restore":`Recreate its worktree`,"prCheckout.worktree.orphanHint":`A worktree already sits on this branch at {path}.`,"prCheckout.worktree.attach":`Attach it`,"prCheckout.worktree.branchInUse":`This branch is already checked out. Attach its existing worktree.`,"prCheckout.worktree.createElsewhere":`Create another one elsewhere`,"prCheckout.operation.hint":`A {operation} is in progress in that worktree.`,"prCheckout.operation.abort":`Abort it`,"prCheckout.operation.cancel":`Leave it alone and stop here`,"prCheckout.changes.hint":`{modified} modified, {staged} staged, {untracked} untracked.`,"prCheckout.changes.stash":`Stash them`,"prCheckout.changes.commit":`Commit them`,"prCheckout.changes.discard":`Discard them (kept as a labelled stash)`,"prCheckout.changes.keepResetConflict":`Keeping local changes is incompatible with a hard reset. Stash or commit them first, or keep the branch.`,"prCheckout.changes.keep":`Keep them as they are`,"prCheckout.divergence.behindHint":`Your branch is {behind} commit(s) behind origin.`,"prCheckout.divergence.aheadHint":`Your branch has {ahead} unpushed commit(s).`,"prCheckout.divergence.divergedHint":`{ahead} ahead, {behind} behind origin.`,"prCheckout.divergence.notFastForward":`Fast-forward is unavailable: the branch contains local commits.`,"prCheckout.divergence.fastForward":`Fast-forward to origin`,"prCheckout.divergence.rebase":`Rebase onto origin`,"prCheckout.divergence.resetHard":`Reset to origin (a backup branch is created first)`,"prCheckout.divergence.keep":`Keep the local state`,"prCheckout.blocked.forgeUnavailable":`The forge CLI is missing or not authenticated.`,"prCheckout.blocked.forkPr":`This PR comes from a fork; Kōbō cannot check it out.`,"prCheckout.blocked.headBranchDeleted":`The branch no longer exists on the remote.`,"prCheckout.blocked.indexLock":`Another git process is running (index.lock is present).`,"prCheckout.blocked.pathOccupied":`{path} already exists and is not a worktree.`,"prCheckout.blocked.worktreeOtherBranch":`{path} is a worktree on another branch ({branch}).`,"prCheckout.blocked.noCommonAncestor":`A local branch named {branch} exists with unrelated history.`,"split.title":`Double workspace`,"split.open":`Open side by side`,"split.openBeside":`Open beside`,"split.close":`Close split view`,"split.left":`Left workspace`,"split.right":`Right workspace`,"split.choose":`Choose a workspace`,"split.recipient":`Send to: {name}`,"absence.title":`Since your last visit`,"settings.activityDigestHint":`Show a summary of events that occurred while you were away. Turning this off hides the entry and stops collecting new events without deleting existing history.`,"absence.pending":`Changes to review`,"absence.retention":`Significant activity from the last 30 days, recorded since this feature was installed. Visit tracking is local to this browser.`,"absence.since":`Since {date}`,"absence.error":`Unable to load activity.`,"absence.retry":`Retry`,"absence.empty":`No new activity.`,"absence.more":`Load more`,"absence.markRead":`Mark displayed events as read`,"absence.kind.question":`Question asked`,"absence.kind.permission":`Approval requested`,"absence.kind.completed":`Session completed`,"absence.kind.error":`Agent error`,"absence.kind.pr-merged":`PR merged`,"absence.kind.pr-approved":`PR approved`,"absence.kind.pr-changes-requested":`Changes requested`,"absence.kind.pr-ci-failed":`CI failed`,"absence.kind.pr-ci-recovered":`CI recovered`,"absence.kind.pr-merge-conflict":`Merge conflict`,"absence.kind.pr-ready-to-merge":`PR ready to merge`,"absence.kind.archived":`Workspace archived`,"absence.kind.purged":`Worktree purged`,"absence.kind.restored":`Worktree restored`,"tours.split.controls.title":`Two independent workspaces`,"tours.split.controls.description":`Choose one workspace per pane. Resize the divider; each conversation keeps its own recipient and panels.`,"tours.home.sort.title":`Sort workspaces`,"tours.home.sort.description":`Choose the order and direction within each group. Your choice is remembered.`,"tours.home.activity.title":`Review activity after an absence`,"tours.home.activity.description":`At the bottom of the left drawer, find questions, session endings, errors and PR changes since your last visit.`,"progress.title":`Activities`,"progress.status.running":`Running`,"progress.status.succeeded":`Succeeded`,"progress.status.failed":`Failed`,"progress.status.interrupted":`Reporting interrupted`,"progress.dismiss":`Hide {label}`,"progress.dismissHint":`Hide this activity without stopping its work`,"progress.others":`See others ({count})`,"progress.collapse":`Show less`,"progress.loadError":`Could not load activities.`,"progress.dismissError":`Could not hide this activity. Try its close button again.`,"progress.retry":`Retry`,"tours.workspace.progress.title":`Activity progress`,"tours.workspace.progress.description":`Agents and their delegates report long-running work above the message field. Three activities are shown initially; expand to see the others. Values are agent-reported, not verification. Success disappears after five seconds; failures stay visible. Closing hides only that activity without cancelling work.`},Ns=`modulepreload`,Ps=function(e){return`/`+e},Fs={},Is=function(e){return e.pathname.endsWith(`.css`)},Ls=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=Ps(t,n);let r=s(t);if(r.href in Fs)return;Fs[r.href]=!0;let i=Is(r);if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let o=document.createElement(`link`);if(o.rel=i?`stylesheet`:Ns,i||(o.as=`script`),o.crossOrigin=``,o.href=r.href,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),i)return new Promise((e,t)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${r}`)))})}).filter(e=>e!==void 0))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Rs=`kobo:locale`,zs=[`en`,`fr`,`de`,`es`,`it`];function Bs(e){return zs.includes(e)}function Vs(){let e=localStorage.getItem(Rs);if(e&&Bs(e))return e;let t=navigator.language.split(`-`)[0];return t&&Bs(t)?(localStorage.setItem(Rs,t),t):(localStorage.setItem(Rs,`en`),`en`)}var Hs=Vs(),Us=ys({legacy:!1,locale:Hs,fallbackLocale:`en`,messages:{en:Ms}}),Ws=new Set([`en`]),Gs={fr:()=>Ls(()=>import(`./fr-DnmIKHaQ.js`),[]),de:()=>Ls(()=>import(`./de-DOE4H_Jf.js`),[]),es:()=>Ls(()=>import(`./es-BW57JPlm.js`),[]),it:()=>Ls(()=>import(`./it-DSrEQgZQ.js`),[])},Ks=0;async function qs(e){let t=++Ks;if(!Ws.has(e)&&e!==`en`){let t=await Gs[e]();Us.global.setLocaleMessage(e,t.default),Ws.add(e)}t===Ks&&(Us.global.locale.value=e,Js(e))}function Js(e){typeof document<`u`&&(document.documentElement.lang=e)}Js(Hs);var Ys=class extends Error{constructor(e,t,n,r){super(e),st(this,`status`,void 0),st(this,`code`,void 0),st(this,`body`,void 0),this.name=`ApiError`,this.status=t,this.code=n,this.body=r}},Xs=class extends Error{constructor(e,t=!1){super(Us.global.t(t?`api.mutationTimeout`:`api.timeout`,{seconds:e/1e3})),st(this,`timeoutMs`,void 0),st(this,`executionMayContinue`,void 0),this.name=`ApiTimeoutError`,this.timeoutMs=e,this.executionMayContinue=t}},Zs=3e4;function Qs(e,t=`GET`){let n=e.split(`?`)[0]??e,r=t.toUpperCase();return n.startsWith(`/api/voice/`)&&n.endsWith(`/transcribe`)||n.endsWith(`/run-setup-script`)||n===`/api/workspaces`&&t===`POST`?33e4:n.startsWith(`/api/dev-server/`)&&n.endsWith(`/start`)||r===`POST`&&/^\/api\/workspaces\/[^/]+\/(archive|start-review|switch-engine)$/.test(n)||r===`DELETE`&&/^\/api\/workspaces\/[^/]+$/.test(n)||r===`POST`&&/^\/api\/dev-server\/[^/]+\/stop$/.test(n)||n.startsWith(`/api/git/`)||n.startsWith(`/api/pull-requests`)||/\/(push|force-push|pull|fetch|rebase|merge|git\/[^/]+|change-source-branch|change-pr-base|merge-pr|restore-worktree|purge-worktree|open-pr|rename-branch|resync-branch)$/.test(n)?18e4:/\/(attachments|sounds|events\.csv|diagnostic\.json)$/.test(n)?9e4:Zs}function $s(e,t){let n=e.trim();if(n.length===0)return{message:`HTTP ${t}`,code:void 0};try{let e=JSON.parse(n),r=typeof e.code==`string`?e.code:void 0;return typeof e.error==`string`&&e.error.length>0?{message:e.error,code:r}:typeof e.message==`string`&&e.message.length>0?{message:e.message,code:r}:{message:`HTTP ${t}`,code:r}}catch{return{message:n.slice(0,500),code:void 0}}}function ec(e,t,n=`GET`){if(t?.aborted)throw t.reason??new DOMException(`Aborted`,`AbortError`);let r=new AbortController,i=!1,a=null,o=()=>{r.abort(t?.reason),s()},s=()=>{a!==null&&clearTimeout(a),a=null,t?.removeEventListener(`abort`,o)};t?.addEventListener(`abort`,o,{once:!0}),e>0&&(a=setTimeout(()=>{i=!0,r.abort(),s()},e));let c=()=>i?new Xs(e,![`GET`,`HEAD`].includes(n.toUpperCase())):r.signal.reason??new DOMException(`Aborted`,`AbortError`);async function l(e){if(r.signal.aborted)throw c();let t=()=>{},n=new Promise((e,n)=>{t=()=>n(c()),r.signal.addEventListener(`abort`,t,{once:!0})});try{return await Promise.race([e(),n])}finally{r.signal.removeEventListener(`abort`,t)}}return{signal:r.signal,run:l,dispose:s}}function tc(e,t){let{body:n,timeoutMs:r,signal:i,statusOnlySuccess:a,headers:o,...s}=e,c={...s,signal:t};if(n!==void 0){if(typeof n==`string`||n instanceof FormData||n instanceof Blob||n instanceof URLSearchParams||n instanceof ArrayBuffer||ArrayBuffer.isView(n))c.body=n,o&&(c.headers=o);else{c.body=JSON.stringify(n);let e=new Headers(o);e.has(`Content-Type`)||e.set(`Content-Type`,`application/json`),c.headers=Object.fromEntries(e.entries())}}else o&&(c.headers=o);return c}async function q(e){let t=await e.text(),{message:n,code:r}=$s(t,e.status);return new Ys(n,e.status,r,t)}function nc(e){try{e.body?.cancel().catch(()=>{})}catch{}}async function J(e,t={}){let n=ec(t.timeoutMs??Qs(e,t.method),t.signal,t.method);try{let r=await n.run(()=>fetch(e,tc(t,n.signal)));t.statusOnlySuccess&&r.ok&&nc(r),(t.statusOnlySuccess&&r.ok||r.status===204||r.body===null||t.method===`HEAD`)&&n.dispose();let i=new Set([`json`,`text`,`blob`,`arrayBuffer`,`formData`,`bytes`]);return new Proxy(r,{get(e,t){let r=Reflect.get(e,t,e);return i.has(t)&&typeof r==`function`?async(...t)=>{try{return await n.run(()=>r.apply(e,t))}finally{n.dispose()}}:typeof r==`function`?r.bind(e):r}})}catch(e){throw n.dispose(),e}}function rc(e,t={}){return J(e,{...t,statusOnlySuccess:!0})}async function ic(e,t={}){let n=ec(t.timeoutMs??Qs(e,t.method),t.signal,t.method);try{let r=await n.run(()=>fetch(e,tc(t,n.signal)));return nc(r),{ok:r.ok,status:r.status}}finally{n.dispose()}}async function ac(e,t={}){let n=await J(e,t);if(!n.ok)throw await q(n);await n.text()}async function Y(e,t={}){let n=ec(t.timeoutMs??Qs(e,t.method),t.signal,t.method);try{return await n.run(async()=>{let r=await fetch(e,tc(t,n.signal));if(!r.ok)throw await q(r);if(r.status===204)return;let i=await r.text();if(i.length!==0)try{return JSON.parse(i)}catch(e){throw new Ys(`Server returned a non-JSON body for a successful response: ${e instanceof Error?e.message:String(e)}`,r.status,void 0,i)}})}finally{n.dispose()}}var oc=Cr(`migration`,()=>{let e=m({state:`idle`});async function t(){try{let t=await J(`/api/migration/status`);if(!t.ok)return;e.value=await t.json()}catch{}}function n(t){e.value={...t}}return{status:e,fetchInitial:t,update:n}}),sc={class:`text-h6`},cc={class:`text-h6`},lc={class:`text-h6 text-negative`},uc={class:`q-mt-sm`},dc={key:0,class:`q-mt-md text-caption`},fc={class:`q-mt-md text-caption`},pc=N({__name:`MigrationOverlay`,setup(e){let{t}=bs(),n=oc(),i=j(()=>[`backing-up`,`running`,`error`].includes(n.status.state));return S(()=>{n.fetchInitial()}),(e,a)=>(v(),k(Gn,{modelValue:i.value,"onUpdate:modelValue":a[0]||=e=>i.value=e,persistent:``,"no-backdrop-dismiss":``},{default:E(()=>[D(an,{style:{"min-width":`400px`}},{default:E(()=>[r(n).status.state===`backing-up`?(v(),k(en,{key:0},{default:E(()=>[ie(`div`,sc,f(r(t)(`migration.backing_up`)),1),D(Ue,{class:`q-mt-md`})]),_:1})):r(n).status.state===`running`?(v(),k(en,{key:1},{default:E(()=>[ie(`div`,cc,f(r(t)(`migration.running`,{processed:r(n).status.processed,total:r(n).status.total})),1),D(rn,{value:r(n).status.total>0?r(n).status.processed/r(n).status.total:0,class:`q-mt-md`},null,8,[`value`])]),_:1})):r(n).status.state===`error`?(v(),k(en,{key:2},{default:E(()=>[ie(`div`,lc,f(r(t)(`migration.error`)),1),ie(`div`,uc,f(r(n).status.errorMessage),1),r(n).status.backupPath?(v(),ne(`div`,dc,f(r(t)(`migration.backup_location`,{path:r(n).status.backupPath})),1)):A(``,!0),ie(`div`,fc,f(r(t)(`migration.retry`)),1)]),_:1})):A(``,!0)]),_:1})]),_:1},8,[`modelValue`]))}});function mc(e){if(e.codePointAt(0)!==111||e.codePointAt(1)!==110)return!1;let t=e.codePointAt(2);return t>=65&&t<=90}function hc(e,t){let n=Object.keys(e);if(n.length!==Object.keys(t).length)return!0;for(let r of n)if(e[r]!==t[r]||!(r in t))return!0;return!1}function gc(){let e=O(),{attrs:t}=e,n={listeners:m({}),attributes:m({})};function r(){let r={},i={};for(let e in t)e!==`class`&&e!==`style`&&!mc(e)&&(r[e]=t[e]);for(let t in e.vnode.props)mc(t)&&(i[t]=e.vnode.props[t]);hc(r,n.attributes.value)&&(n.attributes.value=r),hc(i,n.listeners.value)&&(n.listeners.value=i)}return y(r),r(),n}function _c({validate:e,resetValidation:t,requiresQForm:n}){let r=w(Ce,!1);if(r!==!1){let{props:n,proxy:i}=O();Object.assign(i,{validate:e,resetValidation:t}),_(()=>n.disable,e=>{e?(typeof t==`function`&&t(),r.unbindComponent(i)):r.bindComponent(i)}),S(()=>{n.disable||r.bindComponent(i)}),ee(()=>{n.disable||r.unbindComponent(i)})}else n&&console.error(`Parent QForm not found on useFormChild()!`)}var vc=/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,yc=/^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,bc=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,xc=/^rgb\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5])\)$/,Sc=/^rgba\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),(0(\.[\d]+)?|1(\.0+)?)\)$/,Cc=/^-?[\d]+\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])$/,wc=/^([0-1]?\d|2[0-3]):[0-5]\d$/,Tc=/^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/,Ec=/^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/,Dc=/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,Oc={date:e=>Cc.test(e),time:e=>wc.test(e),fulltime:e=>Tc.test(e),timeOrFulltime:e=>Ec.test(e),email:e=>Dc.test(e),hexColor:e=>vc.test(e),hexaColor:e=>yc.test(e),hexOrHexaColor:e=>bc.test(e),rgbColor:e=>xc.test(e),rgbaColor:e=>Sc.test(e),rgbOrRgbaColor:e=>xc.test(e)||Sc.test(e),hexOrRgbColor:e=>vc.test(e)||xc.test(e),hexaOrRgbaColor:e=>yc.test(e)||Sc.test(e),anyColor:e=>bc.test(e)||xc.test(e)||Sc.test(e)},kc=[!0,!1,`ondemand`],Ac={modelValue:{},error:{type:Boolean,default:null},errorMessage:String,noErrorIcon:Boolean,rules:Array,reactiveRules:Boolean,lazyRules:{type:[Boolean,String],default:!1,validator:e=>kc.includes(e)}};function jc(e,t){let{props:n,proxy:r}=O(),i=m(!1),a=m(null),o=m(!1);_c({validate:y,resetValidation:v});let s=0,c,l=!1,u=!1,d=j(()=>n.rules!==void 0&&n.rules!==null&&n.rules.length!==0),f=j(()=>!n.disable&&d.value&&!t.value),p=j(()=>n.error===!0||i.value),h=j(()=>typeof n.errorMessage==`string`&&n.errorMessage.length!==0?n.errorMessage:a.value);_(()=>n.modelValue,()=>{o.value=!0,f.value&&(n.lazyRules===!1||n.lazyRules===!0&&i.value)&&b()});function g(){n.lazyRules!==`ondemand`&&f.value&&o.value&&b()}_(()=>n.reactiveRules,e=>{e?c===void 0&&(c=_(()=>n.rules,g,{immediate:!0,deep:!0})):c!==void 0&&(c(),c=void 0)},{immediate:!0}),_(()=>n.lazyRules,g),_(e,e=>{e?o.value=!0:n.lazyRules!==`ondemand`&&(f.value?b():!n.disable&&d.value&&t.value&&(u=!0))});function v(){s++,t.value=!1,o.value=!1,i.value=!1,a.value=null,u=!1,b.cancel()}function y(e=n.modelValue){if(n.disable||!d.value)return!0;let r=++s,c=n.modelValue;u=!1;let p=()=>{let e=u;u=!1,!l&&n.modelValue!==c&&f.value&&n.lazyRules!==`ondemand`&&(n.lazyRules===!1||i.value||e)&&b()},m=t.value?()=>{}:()=>{o.value=!0},h=(e,n)=>{e&&m(),i.value=e,a.value=n||null,t.value=!1},g=[];for(let t=0;t<n.rules.length;t++){let r=n.rules[t],i;if(typeof r==`function`?i=r(e,Oc):typeof r==`string`&&(Oc[r]===void 0?(console.error(`Unknown validation pattern rule: "${r}"`),i=!1):i=Oc[r](e)),i===!1||typeof i==`string`)return h(!0,i),!1;i!==!0&&i!==void 0&&g.push(i)}return g.length===0?(h(!1),!0):(t.value=!0,Promise.all(g).then(e=>{if(e===void 0||!Array.isArray(e)||e.length===0)return r===s&&(h(!1),p()),!0;let t=e.find(e=>e===!1||typeof e==`string`);return r===s&&(h(t!==void 0,t),p()),t===void 0},e=>(r===s&&(console.error(e),h(!0),p()),!1)))}let b=Fe(y,0);return ee(()=>{l=!0,c?.(),b.cancel()}),Object.assign(r,{resetValidation:v,validate:y}),le(r,`hasError`,()=>p.value),{isDirtyModel:o,hasRules:d,hasError:p,errorMessage:h,validate:y,resetValidation:v}}function Mc(e){return e!=null&&String(e).length!==0}var Nc={...We,...Ac,label:String,stackLabel:Boolean,hint:String,hideHint:Boolean,prefix:String,suffix:String,labelColor:String,color:String,bgColor:String,filled:Boolean,outlined:Boolean,borderless:Boolean,standout:[Boolean,String],square:Boolean,loading:Boolean,labelSlot:Boolean,bottomSlots:Boolean,hideBottomSpace:Boolean,rounded:Boolean,dense:Boolean,itemAligned:Boolean,counter:Boolean,clearable:Boolean,clearIcon:String,disable:Boolean,readonly:Boolean,autofocus:Boolean,for:String,maxlength:[Number,String]},Pc=[`update:modelValue`,`clear`,`focus`,`blur`];function Fc({requiredForAttr:e=!0,tagProp:t,changeEvent:n=!1}={}){let{props:r}=O(),a=Ge(r,we()),o=ct({required:e,getValue:()=>r.for});return{requiredForAttr:e,changeEvent:n,tag:t?{get value(){return r.tag}}:{value:`label`},isDark:a,editable:j(()=>!r.disable&&!r.readonly),innerLoading:m(!1),focused:m(!1),hasPopupOpen:!1,splitAttrs:gc(),targetUid:o,rootRef:i(null),targetRef:i(null),controlRef:i(null)}}var Ic={class:`q-field__prepend q-field__marginal row no-wrap items-center`,key:`prepend`,onClick:ce},Lc={class:`q-field__append q-field__marginal row no-wrap items-center`,key:`append`,onClick:ce},Rc=`input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), a[href], [tabindex]:not([disabled]), [contenteditable]:not([contenteditable="false"])`,zc={class:`q-field__control-container col relative-position row no-wrap q-anchor--skip`},Bc={class:`q-field__prefix no-pointer-events row items-center`},Vc={class:`q-field__suffix no-pointer-events row items-center`},Hc={class:`q-field__inner relative-position col self-stretch`},Uc={class:`q-field__before q-field__marginal row no-wrap items-center`,onClick:ce},Wc={class:`q-field__after q-field__marginal row no-wrap items-center`,onClick:ce},Gc={};function Kc(e,t){return t.focused.value&&typeof e.standout==`string`&&e.standout.length!==0}function qc(e,t){return t===null?null:h(`div`,{key:e,class:`q-field__append q-field__marginal row no-wrap items-center q-anchor--skip`},t)}function Jc(e){let{props:t,emit:n,slots:r,attrs:i,proxy:a}=O(),o=we(),s=null;e.hasValue===void 0&&(e.hasValue=j(()=>Mc(t.modelValue))),e.emitValue===void 0&&(e.emitValue=e=>{n(`update:modelValue`,e)}),e.controlEvents===void 0&&(e.controlEvents={onFocusin:M,onFocusout:re,onPopupShow:ie,onPopupHide:ae}),Object.assign(e,{clearValue:N,onControlFocusin:M,onControlFocusout:re,focus:k}),e.computedCounter===void 0&&(e.computedCounter=j(()=>{if(t.counter){let e=typeof t.modelValue==`string`||typeof t.modelValue==`number`?String(t.modelValue).length:Array.isArray(t.modelValue)?t.modelValue.length:0,n=t.maxlength===void 0?t.maxValues:t.maxlength;return e+(n===void 0?``:` / `+n)}}));let{isDirtyModel:c,hasRules:l,hasError:u,errorMessage:d,resetValidation:f}=jc(e.focused,e.innerLoading),p=j(()=>u.value&&e.targetUid.value?`${e.targetUid.value}_error`:void 0);function m(e){if(u.value!==!0)return Gc;let n={"aria-invalid":`true`};return p.value!==void 0&&(!t.hideBottomSpace||t.counter||r.counter!==void 0||d.value!==null||r.error!==void 0)&&(n[`aria-errormessage`]=e?.[`aria-errormessage`]===void 0?p.value:e[`aria-errormessage`],n[`aria-describedby`]=e?.[`aria-describedby`]===void 0?p.value:`${e[`aria-describedby`]} ${p.value}`),n}Object.assign(e,{hasError:u,errorMessage:d,errorMessageId:p,getErrorAriaAttrs:m});let g=e.floatingLabel===void 0?j(()=>t.stackLabel||e.focused.value||e.hasValue.value):j(()=>t.stackLabel||e.focused.value||e.floatingLabel.value),_=j(()=>t.bottomSlots||t.hint!==void 0||l.value||t.counter||t.error!==null),v=j(()=>`q-field row no-wrap items-start q-field--`+(t.filled?`filled`:t.outlined?`outlined`:t.borderless?`borderless`:t.standout?`standout`:`standard`)+(e.fieldClass===void 0?``:` ${e.fieldClass.value}`)+(t.rounded?` q-field--rounded`:``)+(t.square?` q-field--square`:``)+(g.value?` q-field--float`:``)+(C.value?` q-field--labeled`:``)+(t.dense?` q-field--dense`:``)+(t.itemAligned?` q-field--item-aligned q-item-type`:``)+(e.isDark()?` q-field--dark`:``)+(e.getControl===void 0?` q-field--auto-height`:``)+(e.focused.value?` q-field--focused`:``)+(u.value?` q-field--error`:Kc(t,e)?` q-field--standout-custom`:``)+(u.value||e.focused.value?` q-field--highlighted`:``)+(!t.hideBottomSpace&&_.value?` q-field--with-bottom`:``)+(t.disable?` q-field--disabled`:t.readonly?` q-field--readonly`:``)),y=j(()=>`q-field__control relative-position row no-wrap`+(t.bgColor===void 0?``:` bg-${t.bgColor}`)+(u.value?` text-negative`:Kc(t,e)?` ${t.standout}`:t.color===void 0?``:` text-${t.color}`)),C=j(()=>t.labelSlot||t.label!==void 0),w=j(()=>`q-field__label no-pointer-events absolute ellipsis`+(t.labelColor!==void 0&&!u.value?` text-${t.labelColor}`:``)),T=j(()=>le({id:e.targetUid.value,editable:e.editable.value,focused:e.focused.value,floatingLabel:g.value,modelValue:t.modelValue,emitValue:e.emitValue,ariaInvalid:u.value===!0?`true`:void 0,ariaDescribedby:p.value,ariaErrormessage:p.value},`field`,()=>e.rootRef.value)),E=j(()=>{let n={};return e.targetUid.value&&(n.for=e.targetUid.value),t.disable&&(n[`aria-disabled`]=`true`),n});function D(){let t=document.activeElement,n=e.targetRef?.value;n&&(t===null||t.id!==e.targetUid.value)&&(n.hasAttribute(`tabindex`)||(n=n.querySelector(`[tabindex]`)),n!==t&&n?.focus({preventScroll:!0}))}function k(){Xe(D)}function A(t){let n=t.target,r=e.targetUid.value===null?null:document.getElementById(e.targetUid.value);if(!(r!==null&&n.contains(r)&&(r.focus({preventScroll:!0}),document.activeElement===r))){for(let e of n.querySelectorAll(Rc))if(e.focus({preventScroll:!0}),document.activeElement===e)return}}function ne(){Ze(D);let t=document.activeElement;t!==null&&e.rootRef.value.contains(t)&&t.blur()}function M(r){s!==null&&(clearTimeout(s),s=null),!t.disable&&!e.focused.value&&(e.focused.value=!0,n(`focus`,r))}function re(t,r){s!==null&&clearTimeout(s),s=setTimeout(()=>{s=null,!(document.hasFocus()&&(e.hasPopupOpen||e.controlRef===void 0||e.controlRef.value===null||e.controlRef.value.contains(document.activeElement)))&&(e.focused.value&&(e.focused.value=!1,n(`blur`,t)),r?.())},0)}function ie(t){e.hasPopupOpen=!0,M(t)}function ae(t){e.hasPopupOpen=!1,re(t)}function N(r){_e(r),o.platform.is.mobile?e.rootRef.value.contains(document.activeElement)&&document.activeElement.blur():(e.targetRef?.value||e.rootRef.value).focus(),t.type===`file`&&(e.inputRef.value.value=null),e.onClear?.(),n(`update:modelValue`,null),e.changeEvent&&n(`change`,null),n(`clear`,t.modelValue),x(()=>{let e=c.value;f(),c.value=e})}function oe(e){[13,32].includes(e.keyCode)&&N(e)}function se(){let n=[];r.prepend!==void 0&&n.push(h(`div`,Ic,r.prepend())),n.push(h(`div`,zc,ue())),u.value&&!t.noErrorIcon&&n.push(qc(`error`,[h(Re,{name:o.iconSet.field.error,color:`negative`})]));let i=t.loading||e.innerLoading.value?r.loading===void 0?e.shouldHideLoadingIndicator?.()?null:[h(Ue,{color:t.color})]:r.loading():null;return i===null?t.clearable&&e.hasValue.value&&e.editable.value&&n.push(qc(`inner-clearable-append`,[h(Re,{class:`q-field__focusable-action`,name:t.clearIcon||o.iconSet.field.clear,tabindex:0,role:`button`,"aria-hidden":`false`,"aria-label":o.lang.label.clear,onKeyup:oe,onClick:N})])):n.push(qc(`inner-loading-append`,i)),r.append!==void 0&&n.push(h(`div`,Lc,r.append())),e.getInnerAppend!==void 0&&n.push(qc(`inner-append`,e.getInnerAppend())),e.getControlChild!==void 0&&n.push(e.getControlChild()),n}function ue(){let n=[];return t.prefix!==void 0&&t.prefix!==null&&n.push(h(`div`,Bc,t.prefix)),e.getShadowControl!==void 0&&e.hasShadow.value&&n.push(e.getShadowControl()),C.value&&n.push(h(`div`,{class:w.value},De(r.label,t.label))),e.getControl===void 0?r.rawControl===void 0?r.control!==void 0&&n.push(h(`div`,{ref:e.targetRef,class:`q-field__native row`,tabindex:-1,...e.splitAttrs.attributes.value,"data-autofocus":t.autofocus||void 0,onFocus:A},r.control(T.value))):n.push(r.rawControl()):n.push(e.getControl()),t.suffix!==void 0&&t.suffix!==null&&n.push(h(`div`,Vc,t.suffix)),n.concat(De(r.default))}let de=null,fe=!1;function pe(){let n,i;u.value?d.value===null?(n=De(r.error),i=`q--slot-error`):(n=[h(`div`,{role:`alert`},d.value)],i=`q--slot-error-${d.value}`):(!t.hideHint||e.focused.value)&&(t.hint===void 0?(n=De(r.hint),i=`q--slot-hint`):(n=[h(`div`,t.hint)],i=`q--slot-hint-${t.hint}`));let a=t.counter||r.counter!==void 0;if(!t.hideBottomSpace||a||n!==void 0)return i!==de&&(fe=de!==null,de=i),h(`div`,{class:`q-field__bottom row items-start q-field__bottom--`+(t.hideBottomSpace?`stale`:`animated`),onClick:ce},[h(`div`,{key:i,id:u.value===!0?p.value:void 0,class:`q-field__messages col`+(fe&&!t.hideBottomSpace?` q-field__messages--animated`:``)},n),a?h(`div`,{class:`q-field__counter`},r.counter===void 0?e.computedCounter.value:r.counter()):null])}let P=!1;return b(()=>{P=!0}),te(()=>{P&&t.autofocus&&a.focus()}),t.autofocus&&S(()=>{a.focus()}),ee(()=>{s!==null&&clearTimeout(s)}),Object.assign(a,{focus:k,blur:ne}),function(){let n=e.getControl===void 0&&r.control===void 0?{...e.splitAttrs.attributes.value,"data-autofocus":t.autofocus||void 0,...E.value}:E.value;return h(e.tag.value,{ref:e.rootRef,class:[v.value,i.class],style:i.style,...n},[r.before===void 0?null:h(`div`,Uc,r.before()),h(`div`,Hc,[h(`div`,{ref:e.controlRef,class:y.value,tabindex:-1,...e.controlEvents},se()),_.value?pe():null]),r.after===void 0?null:h(`div`,Wc,r.after())])}}var Yc={date:`####/##/##`,datetime:`####/##/## ##:##`,time:`##:##`,fulltime:`##:##:##`,phone:`(###) ### - ####`,card:`#### #### #### ####`},Xc={"[\\d]":e=>{let t=e.codePointAt(0);return t>47&&t<58},"[a-zA-Z]":e=>{let t=e.codePointAt(0);return t>64&&t<91||t>96&&t<123},"[0-9a-zA-Z]":e=>{let t=e.codePointAt(0);return t>47&&t<58||t>64&&t<91||t>96&&t<123}},{tokenMap:Zc,tokenKeys:Qc}=$c({"#":{pattern:`[\\d]`,negate:`[^\\d]`},S:{pattern:`[a-zA-Z]`,negate:`[^a-zA-Z]`},N:{pattern:`[0-9a-zA-Z]`,negate:`[^0-9a-zA-Z]`},A:{pattern:`[a-zA-Z]`,negate:`[^a-zA-Z]`,transform:e=>e.toLocaleUpperCase()},a:{pattern:`[a-zA-Z]`,negate:`[^a-zA-Z]`,transform:e=>e.toLocaleLowerCase()},X:{pattern:`[0-9a-zA-Z]`,negate:`[^0-9a-zA-Z]`,transform:e=>e.toLocaleUpperCase()},x:{pattern:`[0-9a-zA-Z]`,negate:`[^0-9a-zA-Z]`,transform:e=>e.toLocaleLowerCase()}});function $c(e){let t=Object.keys(e),n={};return t.forEach(t=>{let r=e[t],i;if(Object.hasOwn(Xc,r.pattern))i=Xc[r.pattern];else{let e=new RegExp(r.pattern);i=t=>e.test(t)}n[t]={...r,test:i}}),{tokenMap:n,tokenKeys:t}}function el(e){return RegExp("\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|(["+e.join(``)+`])|(.)`,`g`)}var tl=[`insertText`,`deleteContentBackward`,`deleteContentForward`,`deleteWordBackward`,`deleteWordForward`,`deleteByCut`],nl=/[.*+?^${}()|[\]\\]/g,rl=el(Qc),X=String.fromCodePoint(1),il={mask:String,reverseFillMask:Boolean,fillMask:[Boolean,String],unmaskedValue:Boolean,maskTokens:Object};function al(e,t,n,r,i){let a,o,s,c,l,u,d,f=j(()=>{if(e.maskTokens===void 0||e.maskTokens===null)return{tokenMap:Zc,tokenRegexMask:rl};let{tokenMap:t}=$c(e.maskTokens),n={...Zc,...t};return{tokenMap:n,tokenRegexMask:el(Object.keys(n))}}),p=m(null),h=m(v());function g(){return e.autogrow||[`textarea`,`text`,`search`,`url`,`tel`,`password`].includes(e.type)}_(()=>e.type+e.autogrow,b),_(()=>e.mask,n=>{if(n!==void 0)w(h.value,!0);else{let n=te(p.value?ne(h.value,d):h.value);b(),e.modelValue!==n&&t(`update:modelValue`,n)}}),_(()=>e.fillMask+e.reverseFillMask,()=>{p.value&&w(h.value,!0)}),_(()=>e.unmaskedValue,()=>{p.value&&w(h.value)}),_(()=>e.maskTokens,()=>{p.value&&w(h.value,!0)},{deep:!0});function v(){if(b(),p.value){let t=k(te(e.modelValue));return d=t.length,e.fillMask===!1?t:M(t)}return d=0,e.modelValue}function y(e){if(e<a.length)return a.slice(-e);let t=``,n=a,r=n.indexOf(X);if(r!==-1){for(let r=e-n.length;r>0;r--)t+=X;n=n.slice(0,r)+t+n.slice(r)}return n}function b(){if(p.value=e.mask!==void 0&&e.mask.length!==0&&g(),!p.value){c=void 0,a=``,o=``;return}let t=Yc[e.mask]===void 0?e.mask:Yc[e.mask],n=typeof e.fillMask==`string`&&e.fillMask.length!==0?e.fillMask.slice(0,1):`_`,r=n.replace(nl,String.raw`\$&`),i=[],l=[],u=[],d=e.reverseFillMask,m=``,h=``;t.replace(f.value.tokenRegexMask,(e,t,n,r,a)=>{if(r!==void 0){let e=f.value.tokenMap[r];u.push(e),h=e.negate,d&&=(l.push({c:e,overflow:!0}),!1),l.push({c:e});return}if(n!==void 0)m=`\\`+(n===`\\`?``:n),u.push(n);else{let e=t===void 0?a:t;m=e===`\\`?String.raw`\\\\`:e.replace(nl,String.raw`\\$&`),u.push(e)}i.push(`([^`+m+`]+)?`+m+`?`)});let _=[...new Set(u.filter(e=>typeof e!=`string`).map(({pattern:e})=>e))],v=RegExp(`^`+i.join(``)+`(`+(m===``?`.`:`[^`+m+`]`)+`+)?`+(m===``?``:`[`+m+`]*`)+`$`),y=l.length-1,b=_.length===1?h:`(?:`+_.map(e=>`(?!`+e+`)`).join(``)+String.raw`[\s\S])`,x=({c:e,overflow:t})=>t===!0?`(?:`+b+`+)?(`+e.pattern+`+)?(?:`+b+`+)?(`+e.pattern+`+)?`:`(?:`+b+`+)?(`+e.pattern+`)?`,S=l.map((t,n)=>{let i=x(t);return n===0&&e.reverseFillMask?RegExp(`^`+r+`*`+i):RegExp(n===y?`^`+i+`(`+(h===``?`.`:h)+`+)?`+(e.reverseFillMask?`$`:r+`*`):`^`+i)});s=u,c=t=>{let n=v.exec(e.reverseFillMask?t:t.slice(0,u.length+1));n!==null&&(t=n.slice(1).join(``));let r=[],i=S.length;for(let e=0,n=t;e<i;e++){let t=S[e].exec(n);if(t===null)break;n=n.slice(t.shift().length),r.push(...t)}return r.length===0?t:r.join(``)},a=u.map(e=>typeof e==`string`?e:X).join(``),o=a.split(X).join(n)}function S(t,n){let r=t.length,i=e.reverseFillMask?y(r):a,o=e.reverseFillMask?s.length-r:0,c=e.reverseFillMask?0:Math.min(n,r),l=e.reverseFillMask?r-n:r;return e=>{if(i[e]!==X||e>=c&&e<l)return!1;let n=s[o+e];return n===void 0||typeof n==`string`||n.test(t[e])}}function C(e,t,n){let r=S(e,n),i=0;for(let e=0;e<t;e++)r(e)&&i++;return i}function w(t,s,c){let u=r.value,f=u?.selectionEnd??0,p=u===null?0:u.value.length-f,m=s!==!0&&typeof h.value==`string`&&tl.includes(c)?ee(h.value,d,t,c):te(t),g;s===!0&&u!==null&&a.length!==0&&(g=C(u.value,f,d)),s===!0&&b();let _=k(m,s),v=e.fillMask===!1?_:M(_),y=_.length,S=h.value!==v,w=S||y!==d;d=y;let T=e.fillMask!==!1&&y===0;u!==null&&u.value!==v&&(u.value=v),S&&(h.value=v),u!==null&&document.activeElement===u&&x(()=>{if(T){let t=e.reverseFillMask?o.length:0;u.setSelectionRange(t,t,`forward`);return}if(g!==void 0){let e=0,t=0;for(;e<v.length&&t<g;)t=C(v,e+1,y),e++;u.setSelectionRange(e,e,`forward`);return}if(c===`insertFromPaste`&&!e.reverseFillMask){let e=u.selectionEnd,t=f-1;for(let n=l;n<=t&&n<e;n++)a[n]!==X&&t++;E.right(u,t);return}if([`deleteContentBackward`,`deleteContentForward`].includes(c)){let t=e.reverseFillMask?f===0?+(v.length>_.length):Math.max(0,v.length-(T?0:Math.min(_.length,p)+1))+1:f;u.setSelectionRange(t,t,`forward`);return}if(e.reverseFillMask){if(w){let e=Math.max(0,v.length-(T?0:Math.min(_.length,p+1)));e===1&&f===1?u.setSelectionRange(e,e,`forward`):E.rightReverse(u,e)}else{let e=v.length-p;u.setSelectionRange(e,e,`backward`)}}else if(w){let e=Math.max(0,a.indexOf(X),Math.min(_.length,f)-1);E.right(u,e)}else{let e=f-1;E.right(u,e)}});let D=e.unmaskedValue?te(_):v;String(e.modelValue)!==D&&(e.modelValue!==null||D!==``)?n(D,!0):i!==void 0&&i()}function T(e,t,n){let r=k(te(e.value));t=Math.max(0,a.indexOf(X),Math.min(r.length,t)),l=t,e.setSelectionRange(t,n,`forward`)}let E={left(e,t){let n=!a.slice(t-1).includes(X),r=Math.max(0,t-1);for(;r>=0;r--)if(a[r]===X){t=r,n&&t++;break}if(r<0&&a[t]!==void 0&&a[t]!==X)return E.right(e,0);t>=0&&e.setSelectionRange(t,t,`backward`)},right(e,t){let n=e.value.length,r=Math.min(n,t+1);for(;r<=n;r++)if(a[r]===X){t=r;break}else a[r-1]===X&&(t=r);if(r>n&&a[t-1]!==void 0&&a[t-1]!==X)return E.left(e,n);e.setSelectionRange(t,t,`forward`)},leftReverse(e,t){let n=y(e.value.length),r=Math.max(0,t-1);for(;r>=0;r--)if(n[r-1]===X){t=r;break}else if(n[r]===X&&(t=r,r===0))break;if(r<0&&n[t]!==void 0&&n[t]!==X)return E.rightReverse(e,0);t>=0&&e.setSelectionRange(t,t,`backward`)},rightReverse(e,t){let n=e.value.length,r=y(n),i=!r.slice(0,t+1).includes(X),a=Math.min(n,t+1);for(;a<=n;a++)if(r[a-1]===X){t=a,t>0&&i&&t--;break}if(a>n&&r[t-1]!==void 0&&r[t-1]!==X)return E.leftReverse(e,n);e.setSelectionRange(t,t,`forward`)}};function D(e){t(`click`,e),u=void 0}function O(n){if(t(`keydown`,n),n.defaultPrevented||n.altKey||he(n))return;let i=r.value,a=i.selectionStart,o=i.selectionEnd;if(n.shiftKey||(u=void 0),n.keyCode===37||n.keyCode===39){n.shiftKey&&u===void 0&&(u=i.selectionDirection===`forward`?a:o);let t=E[(n.keyCode===39?`right`:`left`)+(e.reverseFillMask?`Reverse`:``)];if(n.preventDefault(),t(i,u===a?o:a),n.shiftKey){let e=i.selectionStart;i.setSelectionRange(Math.min(u,e),Math.max(u,e),`forward`)}}else n.keyCode===8&&!e.reverseFillMask&&a===o?(E.left(i,a),i.setSelectionRange(i.selectionStart,o,`backward`)):n.keyCode===46&&e.reverseFillMask&&a===o&&(E.rightReverse(i,o),i.setSelectionRange(a,i.selectionEnd,`forward`))}function k(t,n){if(t==null||t===``)return``;if(e.reverseFillMask)return A(t,n);let r=s,i=0,a=``;for(let e=0;e<r.length;e++){let o=t[i],s=r[e];if(typeof s==`string`)a+=s,n===!0&&o===s&&i++;else if(o!==void 0&&s.test(o))a+=s.transform===void 0?o:s.transform(o),i++;else return a}return a}function A(e,t){let n=s,r=a.indexOf(X),i=e.length-1,o=``,c=``;for(let a=n.length-1;a>=0&&i!==-1;a--){let s=n[a],l=e[i];if(typeof s==`string`)c=s+c,t===!0&&l===s&&i--;else if(l!==void 0&&s.test(l)){o=c+o,c=``;do o=(s.transform===void 0?l:s.transform(l))+o,i--,l=e[i];while(r===a&&l!==void 0&&s.test(l))}else return o}return o}function ee(t,n,r,i){let a=t.length,o=r.length,c=Math.min(a,o),l=0;for(;l<c&&t[l]===r[l];)l++;let u=0;for(;u<c-l&&t[a-1-u]===r[o-1-u];)u++;let d=S(t,n),f=``,p=``;for(let e=0;e<l;e++)d(e)&&(f+=t[e]);for(let e=a-u;e<a;e++)d(e)&&(p+=t[e]);let m=``,h=r.slice(l,o-u);if(h.length!==0){if(e.reverseFillMask)for(let e of h)s.some(t=>typeof t!=`string`&&t.test(e))&&(m+=e);else{let e=s.filter(e=>typeof e!=`string`),t=f.length;for(let n of h)e[t]!==void 0&&e[t].test(n)&&(m+=n,t++)}}else if(!e.reverseFillMask&&l+u<a){let e=!1;for(let t=l;t<a-u;t++)if(d(t)){e=!0;break}e||(i===`deleteContentForward`?p=p.slice(1):f=f.slice(0,-1))}return f+m+p}function te(e){return typeof e!=`string`||c===void 0?typeof e==`number`?c(String(e)):e:c(e)}function ne(t,n){return n>=t.length?t:e.reverseFillMask?t.slice(t.length-n):t.slice(0,n)}function M(t){return o.length-t.length<=0?t:e.reverseFillMask&&t.length!==0?o.slice(0,-t.length)+t:t+o.slice(t.length)}return{innerValue:h,hasMask:p,moveCursorForPaste:T,updateMaskValue:w,onMaskedKeydown:O,onMaskedClick:D}}var ol=typeof CSS>`u`||CSS.supports(`field-sizing`,`content`)?void 0:sl;function sl(e,t,n,r){let i=null;function a(){i!==null&&(cancelAnimationFrame(i),i=null)}function o(){i===null&&(i=requestAnimationFrame(()=>{i=null;let e=n.value;if(e!==null){let t=e.parentNode.style,{scrollTop:n}=e,{overflowY:i,maxHeight:a}=r.platform.is.firefox?{}:window.getComputedStyle(e),o=i!==void 0&&i!==`scroll`;o&&(e.style.overflowY=`hidden`),t.marginBottom=e.scrollHeight-1+`px`,e.style.height=`1px`,e.style.height=e.scrollHeight+`px`,o&&(e.style.overflowY=Number.parseInt(a,10)<e.scrollHeight?`auto`:`hidden`),t.marginBottom=``,e.scrollTop=n}}))}return _(()=>e.autogrow,e=>{if(e)x(o);else if(n.value!==null){a();let{style:e}=n.value;e.overflowY=``,e.height=t.rows>0?`auto`:``}}),_(()=>e.dense,()=>{e.autogrow&&x(o)}),S(()=>{e.autogrow&&o()}),ee(a),o}function cl(e,t){function n(){let t=e.modelValue;try{let e=new DataTransfer;return Object(t)===t&&(`length`in t?[...t]:[t]).forEach(t=>{e.items.add(t)}),{files:e.files}}catch{return{files:void 0}}}return j(t?()=>{if(e.type===`file`)return n()}:n)}var ll=/[\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\uFF00-\uFF9F\u4E00-\u9FAF\u3400-\u4DBF]/,ul=/[\u4E00-\u9FFF\u3400-\u4DBF\u{20000}-\u{2A6DF}\u{2A700}-\u{2B73F}\u{2B740}-\u{2B81F}\u{2B820}-\u{2CEAF}\uF900-\uFAFF\u3300-\u33FF\uFE30-\uFE4F\uF900-\uFAFF\u{2F800}-\u{2FA1F}]/u,dl=/[\u3131-\u314E\u314F-\u3163\uAC00-\uD7A3]/,fl=/[a-z0-9_ -]$/i;function pl(e){return function(t){if(t.type===`compositionend`||t.type===`change`){if(!t.target.qComposing)return;t.target.qComposing=!1,e(t)}else t.type===`compositionupdate`&&!t.target.qComposing&&typeof t.data==`string`&&(ve.is.firefox?!fl.test(t.data):ll.test(t.data)||ul.test(t.data)||dl.test(t.data))&&(t.target.qComposing=!0)}}var ml=Pe({name:`QInput`,inheritAttrs:!1,props:{...Nc,...il,...lt,modelValue:[String,Number,FileList],modelModifiers:Object,shadowText:String,type:{type:String,default:`text`},debounce:[String,Number],autogrow:Boolean,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},emits:[...Pc,`paste`,`change`,`keydown`,`click`,`animationend`],setup(e,{emit:t,attrs:n}){let{proxy:r}=O(),a=we(),o={},s=NaN,c=!1,l=!1,u=null,d,f=i(null),p=dt(e),{innerValue:m,hasMask:g,moveCursorForPaste:v,updateMaskValue:y,onMaskedKeydown:b,onMaskedClick:S}=al(e,t,ue,f,()=>{de(),delete o.value}),C=cl(e,!0),w=j(()=>Mc(m.value)),T=pl(se);function E(e){if(g.value&&e.type===`compositionstart`){e.target.qComposing=!0;return}T(e)}let D=Fc({changeEvent:!0}),k=j(()=>e.type===`textarea`||e.autogrow),A=ol?.(e,n,f,a),te=j(()=>k.value||[`text`,`search`,`url`,`tel`,`password`].includes(e.type)),ne=j(()=>{let t={...D.splitAttrs.listeners.value,onInput:se,onPaste:oe,onChange:P,onBlur:me,onFocus:pe};return t.onCompositionstart=t.onCompositionupdate=t.onCompositionend=E,g.value&&(t.onKeydown=b,t.onClick=S),A&&e.autogrow&&(t.onAnimationend=ce),t}),M=j(()=>{let t={tabindex:0,"data-autofocus":e.autofocus||void 0,rows:e.type===`textarea`?6:void 0,"aria-label":e.label,name:p(),...D.splitAttrs.attributes.value,id:D.targetUid.value,maxlength:e.maxlength,disabled:e.disable,readonly:e.readonly};return k.value||(t.type=e.type),e.autogrow&&(t.rows=1),t});_(()=>e.type,()=>{f.value&&(f.value.value=e.modelValue)}),_(()=>e.modelValue,t=>{if(d!==void 0&&(de(),c=!1,l=!1,delete o.value),g.value){if(l&&(l=!1,String(t)===s))return;y(t)}else m.value!==t&&(m.value=t,e.type===`number`&&Object.hasOwn(o,`value`)&&(c?c=!1:delete o.value),e.modelModifiers?.trim===!0&&Object.hasOwn(o,`value`)&&(typeof o.value!=`string`||o.value.trim()!==t)&&delete o.value);A&&e.autogrow&&x(A)});function re(){let e=document.activeElement;f.value!==null&&f.value!==e&&(e===null||e.id!==D.targetUid.value)&&f.value.focus({preventScroll:!0})}function ie(){Xe(re)}function ae(){Ze(re);let e=document.activeElement;e!==null&&D.rootRef.value.contains(e)&&e.blur()}function N(){f.value?.select()}function oe(n){if(g.value&&e.reverseFillMask!==!0){let e=n.target;v(e,e.selectionStart,e.selectionEnd)}t(`paste`,n)}function se(n){if(!n||!n.target)return;if(e.type===`file`){t(`update:modelValue`,n.target.files);return}let r=n.target.value;if(n.target.qComposing){o.value=r;return}if(g.value)y(r,!1,n.inputType);else if(e.modelModifiers?.trim===!0&&(o.value=r),ue(r),te.value&&n.target===document.activeElement){let{selectionStart:e,selectionEnd:t}=n.target;e!==void 0&&t!==void 0&&x(()=>{n.target===document.activeElement&&r.indexOf(n.target.value)===0&&n.target.setSelectionRange(e,t)})}A&&e.autogrow&&A()}function ce(e){t(`animationend`,e),A()}function ue(n,r){d=()=>{u=null,e.type!==`number`&&(e.modelModifiers?.trim!==!0||g.value)&&Object.hasOwn(o,`value`)&&delete o.value,e.modelValue!==n&&s!==n&&(s=n,r===!0&&(l=!0),t(`update:modelValue`,n),x(()=>{s===n&&(s=NaN)})),d=void 0},e.type===`number`&&(c=!0,o.value=n);let i=()=>{g.value?delete o.value:o.value=n};e.modelModifiers?.lazy===!0?i():e.debounce===void 0?d():(u!==null&&clearTimeout(u),i(),u=setTimeout(d,e.debounce))}function de(){u!==null&&(clearTimeout(u),u=null),d=void 0}function fe(){de(),c=!1,l=!1,delete o.value}function P(e){E(e),u!==null&&(clearTimeout(u),u=null),d?.(),t(`change`,e.target.value)}function me(t){t!==void 0&&pe(t),u!==null&&(clearTimeout(u),u=null),d?.(),c=!1,l=!1,delete o.value,e.type!==`file`&&setTimeout(()=>{f.value!==null&&(f.value.value=m.value===void 0?``:m.value)},0)}function he(){return Object.hasOwn(o,`value`)?o.value:m.value===void 0?``:m.value}ee(()=>{me()}),Object.assign(D,{innerValue:m,fieldClass:j(()=>`q-${k.value?`textarea`:`input`}`+(e.autogrow?` q-textarea--autogrow`:``)),hasShadow:j(()=>e.type!==`file`&&typeof e.shadowText==`string`&&e.shadowText.length!==0),inputRef:f,emitValue:ue,onClear:fe,hasValue:w,floatingLabel:j(()=>w.value&&(e.type!==`number`||Number.isFinite(Number(m.value)))||Mc(e.displayValue)),getControl:()=>{let t=M.value;return h(k.value?`textarea`:`input`,{ref:f,class:[`q-field__native q-placeholder`,e.inputClass],style:e.inputStyle,...t,...D.getErrorAriaAttrs(t),...ne.value,...e.type===`file`?C.value:{value:he()}})},getShadowControl:()=>h(`div`,{class:`q-field__native q-field__shadow absolute-bottom no-pointer-events`+(k.value?``:` text-no-wrap`)},[h(`span`,{class:`invisible`},he()),h(`span`,e.shadowText)])});let ge=Jc(D);return Object.assign(r,{focus:ie,blur:ae,select:N,getNativeElement:()=>f.value}),le(r,`nativeEl`,()=>f.value),ge}}),hl=Pe({name:`QCardActions`,props:{...Ve,vertical:Boolean},setup(e,{slots:t}){let n=Be(e),r=j(()=>`q-card__actions ${n()} q-card__actions--${e.vertical?`vert column`:`horiz row`}`);return()=>h(`div`,{class:r.value},De(t.default))}}),gl=`kobo:network-token`;function _l(){try{return localStorage.getItem(gl)}catch{return null}}function vl(e){try{localStorage.setItem(gl,e),window.dispatchEvent(new Event(`kobo:auth-token-changed`))}catch{}}function yl(e){try{let t=new URL(e,window.location.origin);return t.origin===window.location.origin&&t.pathname.startsWith(`/api/`)}catch{return typeof e==`string`&&e.startsWith(`/api/`)}}function bl(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}token=${encodeURIComponent(t)}`:e}var xl=m(!1);function Sl(){xl.value=!0}function Cl(){xl.value=!1}var wl={class:`text-h6`},Tl={class:`text-caption text-kobo-3 q-mt-sm`},El=N({__name:`NetworkLoginDialog`,setup(e){let{t}=bs(),n=j({get:()=>xl.value,set:e=>{e||Cl()}}),i=m(``),a=m(!1),o=m(!1),s=m(``);async function c(){let e=i.value.trim();if(e){a.value=!0,o.value=!1;try{let n=await ic(`/api/settings/network/ping`,{headers:{"X-Kobo-Token":e}});if(n.ok){vl(e),Cl(),window.location.reload();return}s.value=n.status===401?t(`network.login.invalid`):t(`network.login.serverError`),o.value=!0}catch{s.value=t(`network.login.unreachable`),o.value=!0}finally{a.value=!1}}}return(e,l)=>(v(),k(Gn,{modelValue:n.value,"onUpdate:modelValue":l[1]||=e=>n.value=e,persistent:``},{default:E(()=>[D(an,{style:{"min-width":`320px`,"max-width":`90vw`}},{default:E(()=>[D(en,null,{default:E(()=>[ie(`div`,wl,f(r(t)(`network.login.title`)),1),ie(`div`,Tl,f(r(t)(`network.login.description`)),1)]),_:1}),D(en,null,{default:E(()=>[D(ml,{modelValue:i.value,"onUpdate:modelValue":l[0]||=e=>i.value=e,label:r(t)(`network.login.tokenLabel`),placeholder:r(t)(`network.login.tokenPlaceholder`),error:o.value,"error-message":s.value,autofocus:``,dense:``,outlined:``,onKeyup:ge(c,[`enter`])},null,8,[`modelValue`,`label`,`placeholder`,`error`,`error-message`])]),_:1}),D(hl,{align:`right`},{default:E(()=>[D(He,{label:r(t)(`network.login.connect`),color:`primary`,loading:a.value,unelevated:``,onClick:c},null,8,[`label`,`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]))}}),Dl=new WeakMap;function Ol(e){return Dl.get(e)}function kl(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{...t}]))}function Al(e){let t=new Set,n=_(()=>e.queuedMessages,()=>{for(let n of t)n(kl(e.queuedMessages))},{deep:!0,flush:`sync`});return{queue:(...t)=>e.queueMessage(...t),cancel:(...t)=>e.cancelQueuedMessage(...t),flush:(...t)=>e.flushQueuedMessage(...t),subscribe(n){return t.add(n),n(kl(e.queuedMessages)),()=>{t.delete(n)}},dispose(){n(),t.clear()}}}function jl(e,t){Dl.set(e,t);let n=t.subscribe(t=>{e.queuedMessages=t});return()=>{n(),Dl.delete(e)}}var Ml=Cr(`templates`,{state:()=>({templates:[],defaultSlugs:[],loading:!1,loaded:!1}),getters:{isDefault:e=>t=>e.defaultSlugs.includes(t)},actions:{async fetchTemplates(){if(!this.loading){this.loading=!0;try{let e=await J(`/api/templates`);if(!e.ok)throw await q(e);let t=await e.json();this.templates=t.templates,this.defaultSlugs=t.defaultSlugs??[],this.loaded=!0}catch(e){console.error(`[templates store] fetchTemplates failed:`,e)}finally{this.loading=!1}}},async createTemplate(e){let t=await J(`/api/templates`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}let n=await t.json();return this.templates.push(n),n},async updateTemplate(e,t){let n=await J(`/api/templates/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json(),i=this.templates.findIndex(t=>t.slug===e);return i>=0&&(this.templates[i]=r),r},async reloadDefaults(){let e=await J(`/api/templates/reload-defaults`,{method:`POST`});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??`HTTP ${e.status}`)}let t=await e.json();return t.added.length>0&&await this.fetchTemplates(),t},async deleteTemplate(e){let t=await rc(`/api/templates/${encodeURIComponent(e)}`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}this.templates=this.templates.filter(t=>t.slug!==e)},async resetToDefault(e){let t=await J(`/api/templates/${encodeURIComponent(e)}/reset-default`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({error:`Reset failed`}));throw Error(e.error??`Reset failed`)}let{template:n}=await t.json(),r=this.templates.findIndex(t=>t.slug===e);return r>=0?this.templates[r]=n:this.templates.push(n),n}}}),Nl=Pe({name:`QAvatar`,props:{...Ie,fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},setup(e,{slots:t}){let n=j(()=>`q-avatar`+(e.color?` bg-${e.color}`:``)+(e.textColor?` text-${e.textColor} q-chip--colored`:``)+(e.square?` q-avatar--square`:e.rounded?` rounded-borders`:``)),r=j(()=>e.fontSize?{fontSize:e.fontSize}:null);return()=>{let i=e.icon===void 0?void 0:[h(Re,{name:e.icon})],a={class:n.value};return e.size!==void 0&&(a.style=Le(e.size)),h(`div`,a,[h(`div`,{class:`q-avatar__content row flex-center overflow-hidden`,style:r.value},ke(t.default,i))])}}}),Pl=0,Fl={},Il={},Ll={},Rl={},zl=/^\s*$/,Bl=[],Vl=[void 0,null,!0,!1,``],Hl=[`top-left`,`top-right`,`bottom-left`,`bottom-right`,`top`,`bottom`,`left`,`right`,`center`],Ul=[`top-left`,`top-right`,`bottom-left`,`bottom-right`],Wl={positive:{icon:e=>e.iconSet.type.positive,color:`positive`},negative:{icon:e=>e.iconSet.type.negative,color:`negative`},warning:{icon:e=>e.iconSet.type.warning,color:`warning`,textColor:`dark`},info:{icon:e=>e.iconSet.type.info,color:`info`},ongoing:{group:!1,timeout:0,spinner:!0,color:`grey-8`}};function Gl(e,t,n){if(!e)return Jl(`parameter required`);let r,i={textColor:`white`};if(e.ignoreDefaults||Object.assign(i,Fl),Wt(e)||(i.type&&Object.assign(i,Wl[i.type]),e={message:e}),Object.assign(i,Wl[e.type||i.type],e),typeof i.icon==`function`&&(i.icon=i.icon(t)),i.spinner=i.spinner?i.spinner===!0?Ue:c(i.spinner):!1,i.meta={hasMedia:!!(i.spinner||i.icon||i.avatar),hasText:ql(i.message)||ql(i.caption)},i.position){if(!Hl.includes(i.position))return Jl(`wrong position`,e)}else i.position=`bottom`;if(Vl.includes(i.timeout))i.timeout=5e3;else{let t=Number.parseFloat(i.timeout);if(!Number.isFinite(t)||t<0)return Jl(`wrong timeout`,e);i.timeout=t}i.timeout===0?i.progress=!1:i.progress&&(i.meta.progressClass=`q-notification__progress`+(i.progressClass?` ${i.progressClass}`:``),i.meta.progressStyle={animationDuration:`${i.timeout+1e3}ms`});let a=[...Array.isArray(e.actions)?e.actions:[],...!e.ignoreDefaults&&Array.isArray(Fl.actions)?Fl.actions:[],...Array.isArray(Wl[e.type]?.actions)?Wl[e.type].actions:[]],{closeBtn:o}=i;if(o&&a.push({label:typeof o==`string`?o:t.lang.label.close}),i.actions=a.map(({handler:e,noDismiss:t,...n})=>({flat:!0,...n,onClick:typeof e==`function`?()=>{e(),t||s()}:()=>{s()}})),i.multiLine===void 0&&(i.multiLine=i.actions.length>1),Object.assign(i.meta,{class:`q-notification row items-stretch q-notification--${i.multiLine?`multi-line`:`standard`}`+(i.color===void 0?``:` bg-${i.color}`)+(i.textColor===void 0?``:` text-${i.textColor}`)+(i.classes===void 0?``:` ${i.classes}`),wrapperClass:`q-notification__wrapper col relative-position border-radius-inherit `+(i.multiLine?`column no-wrap justify-center`:`row items-center`),contentClass:`q-notification__content row items-center`+(i.multiLine?``:` col`),leftClass:i.meta.hasText?`additional`:`single`,attrs:{role:`alert`,...i.attrs}}),i.group===!1?(i.group=void 0,i.meta.group=void 0):((i.group===void 0||i.group===!0)&&(i.group=[i.message,i.caption,i.multiLine,...i.actions.map(e=>`${e.label}*${e.icon}`)].join(`|`)),i.meta.group=i.group+`|`+i.position),i.actions.length===0?i.actions=void 0:i.meta.actionsClass=`q-notification__actions row items-center `+(i.multiLine?`justify-end`:`col-auto`)+(i.meta.hasMedia?` q-notification__actions--with-media`:``),n!==void 0){n.notif.meta.timer&&(clearTimeout(n.notif.meta.timer),n.notif.meta.timer=void 0),i.meta.uid=n.notif.meta.uid;let e=Ll[i.position].value.indexOf(n.notif);Ll[i.position].value[e]=i}else{let t=Il[i.meta.group];if(t===void 0){if(i.meta.uid=Pl++,i.meta.badge=1,[`left`,`right`,`center`].includes(i.position))Ll[i.position].value.splice(Math.floor(Ll[i.position].value.length/2),0,i);else{let e=i.position.includes(`top`)?`unshift`:`push`;Ll[i.position].value[e](i)}i.group!==void 0&&(Il[i.meta.group]=i)}else{if(t.meta.timer&&(clearTimeout(t.meta.timer),t.meta.timer=void 0),i.badgePosition!==void 0){if(!Ul.includes(i.badgePosition))return Jl(`wrong badgePosition`,e)}else i.badgePosition=`top-${i.position.includes(`left`)?`right`:`left`}`;i.meta.uid=t.meta.uid,i.meta.badge=t.meta.badge+1,i.meta.badgeClass=`q-notification__badge q-notification__badge--${i.badgePosition}`+(i.badgeColor===void 0?``:` bg-${i.badgeColor}`)+(i.badgeTextColor===void 0?``:` text-${i.badgeTextColor}`)+(i.badgeClass?` ${i.badgeClass}`:``);let n=Ll[i.position].value.indexOf(t);Ll[i.position].value[n]=Il[i.meta.group]=i}}let s=()=>{Kl(i),r=void 0};if(i.timeout>0&&(i.meta.timer=setTimeout(()=>{i.meta.timer=void 0,s()},i.timeout+1e3)),i.group!==void 0)return t=>{t===void 0?s():Jl(`trying to update a grouped one which is forbidden`,e)};if(r={dismiss:s,config:e,notif:i},n!==void 0){Object.assign(n,r);return}return e=>{r!==void 0&&(e===void 0?r.dismiss():Gl({...r.config,...e,group:!1,position:i.position},t,r))}}function Kl(e){e.meta.timer&&(clearTimeout(e.meta.timer),e.meta.timer=void 0);let t=Ll[e.position].value.indexOf(e);if(t!==-1){e.group!==void 0&&delete Il[e.meta.group];let n=Bl[String(e.meta.uid)];if(n){let{width:e,height:t}=getComputedStyle(n);n.style.left=`${n.offsetLeft}px`,n.style.width=e,n.style.height=t}Ll[e.position].value.splice(t,1),typeof e.onDismiss==`function`&&e.onDismiss()}}function ql(e){return e!=null&&!zl.test(e)}function Jl(e,t){return console.error(`Notify: ${e}`,t),!1}function Yl(){return Pe({name:`QNotifications`,devtools:{hide:!0},setup(){return()=>h(`div`,{class:`q-notifications`},Hl.map(e=>h(Ae,{key:e,class:Rl[e],tag:`div`,name:`q-notification--${e}`},()=>Ll[e].value.map(e=>{let t=e.meta,n=[];if(t.hasMedia&&(e.spinner?n.push(h(e.spinner,{class:`q-notification__spinner q-notification__spinner--`+t.leftClass,color:e.spinnerColor,size:e.spinnerSize})):e.icon?n.push(h(Re,{class:`q-notification__icon q-notification__icon--`+t.leftClass,name:e.icon,color:e.iconColor,size:e.iconSize,role:`img`})):e.avatar&&n.push(h(Nl,{class:`q-notification__avatar q-notification__avatar--`+t.leftClass},()=>h(`img`,{src:e.avatar,"aria-hidden":`true`})))),t.hasText){let t,r={class:`q-notification__message col`};if(e.html)r.innerHTML=e.caption?`<div>${e.message}</div><div class="q-notification__caption">${e.caption}</div>`:e.message;else{let n=[e.message];t=e.caption?[h(`div`,n),h(`div`,{class:`q-notification__caption`},[e.caption])]:n}n.push(h(`div`,r,t))}let r=[h(`div`,{class:t.contentClass},n)];return e.progress&&r.push(h(`div`,{key:`${t.uid}|p|${t.badge}`,class:t.progressClass,style:t.progressStyle})),e.actions&&r.push(h(`div`,{class:t.actionsClass},e.actions.map(e=>h(He,e)))),t.badge>1&&r.push(h(`div`,{key:`${t.uid}|${t.badge}`,class:e.meta.badgeClass,style:e.badgeStyle},[t.badge])),h(`div`,{ref:e=>{Bl[String(t.uid)]=e},key:t.uid,class:t.class,...t.attrs},[h(`div`,{class:t.wrapperClass},r)])}))))}})}var Xl={setDefaults(e){Wt(e)&&Object.assign(Fl,e)},registerType(e,t){Wt(t)&&(Wl[e]=t)},install({$q:e,parentApp:t}){if(e.notify=this.create=t=>Gl(t,e),e.notify.setDefaults=this.setDefaults,e.notify.registerType=this.registerType,e.config.notify!==void 0&&this.setDefaults(e.config.notify),!this.__installed){Hl.forEach(e=>{Ll[e]=m([]);let t=e===`left`||e===`center`||e===`right`?`center`:e.includes(`top`)?`top`:`bottom`,n=e.includes(`left`)?`start`:e.includes(`right`)?`end`:`center`;Rl[e]=`q-notifications__list q-notifications__list--${t} fixed column no-wrap ${e===`left`||e===`right`?`items-${e===`left`?`start`:`end`} justify-center`:e===`center`?`flex-center`:`items-${n}`}`});let e=F(`q-notify`);Xt(Yl(),t).mount(e)}}},Zl=class{constructor(){st(this,`pending`,new Map)}wait(e,t,n){return new Promise((r,i)=>{let a=setTimeout(()=>o(Error(n)),3e4),o=e=>{clearTimeout(a),this.pending.delete(t),e?i(e):r()};this.pending.set(t,{workspaceId:e,finish:o})})}settle(e,t,n){let r=this.pending.get(t);r?.workspaceId===e&&r.finish(n)}disconnect(e){for(let t of this.pending.values())t.finish(Error(e))}},Ql=new Map,$l=m(0);function eu(){$l.value++}function tu(e){e.reconnectTimer&&=(clearTimeout(e.reconnectTimer),void 0)}function nu(e){let t=Ql.get(e);t&&(tu(t),t.ws&&(t.ws.onclose=null,t.ws.readyState===WebSocket.OPEN&&t.ws.close()),t.onDataDisposable?.dispose(),t.terminal.dispose(),Ql.delete(e),eu())}var ru=5e3,iu=Cr(`agent-stream`,()=>{let e=i(new Map),t=i(new Map),n=i(new Map),r=i(new Map),a=i(new Map),o=i(new Map),s=i(new Map),c=i(new Map),l=m(new Map),u=i(new Map);function d(e,t){f(e);let n=0;for(let[r,i]of u.value.get(e)??[])t(r)&&(n+=i);return n}function f(e){l.value.get(e)}function p(e){l.value.set(e,(l.value.get(e)??0)+1)}function h(e){return l.value.get(e)??0}function g(e){let t=c.value.get(e);return t||(t=new Set,c.value.set(e,t)),t}function _(e){return f(e),s.value.get(e)??!1}function v(e,t){(s.value.get(e)??!1)!==t&&(s.value.set(e,t),p(e))}function y(t){return f(t),e.value.get(t)??[]}function b(e){return f(e),t.value.get(e)??[]}function x(e){return f(e),n.value.get(e)??[]}function S(e){return f(e),r.value.get(e)??[]}function C(e){return f(e),a.value.get(e)}function w(e){return f(e),o.value.get(e)??!0}function T(i,o,s,c,l,d=!0){let f=e.value.get(i)??[],m=t.value.get(i)??[],h=n.value.get(i)??[],_=r.value.get(i)??[],v=g(i);if(c&&v.has(c))return;if(d){let e=u.value.get(i)??new Map;e.set(l??null,(e.get(l??null)??0)+1),u.value.set(i,e)}let y=f.length===0;f.push(o),m.push(s??new Date().toISOString()),h.push(l??null),_.push(c??null),c&&v.add(c),e.value.set(i,f),t.value.set(i,m),n.value.set(i,h),r.value.set(i,_),y&&c&&a.value.set(i,c),E(i,f,m,h,_),p(i)}function E(e,t,n,r,i){let s=t.length-ru;if(s<=0)return;let c=s+500-1,l=i.slice(0,c),u=g(e);for(let e of l)e&&u.delete(e);t.splice(0,c),n.splice(0,c),r.splice(0,c),i.splice(0,c);let d=i.find(e=>typeof e==`string`);d?a.value.set(e,d):a.value.delete(e),o.value.set(e,!0)}function D(i,o,s,c){let l=e.value.get(i)??[],u=t.value.get(i)??[],d=n.value.get(i)??[],f=r.value.get(i)??[],m=g(i),h=[];for(let e=0;e<o.length;e++){let t=o[e];if(!t)continue;let n=c.eventIds[e]??null;n&&m.has(n)||(l.push(t),u.push(s[e]??new Date().toISOString()),d.push(c.sessionIds[e]??null),f.push(n),n&&m.add(n),h.push(e))}if(h.length===0)return h;if(e.value.set(i,l),t.value.set(i,u),n.value.set(i,d),r.value.set(i,f),!a.value.has(i)){let e=f.find(e=>typeof e==`string`);e&&a.value.set(i,e)}return E(i,l,u,d,f),p(i),h}function O(i,s,c,l){let u=[...s],d=c?[...c]:s.map(()=>new Date().toISOString()),f=l?.sessionIds?[...l.sessionIds]:s.map(()=>null),m=l?.eventIds?[...l.eventIds]:s.map(()=>null);e.value.set(i,u),t.value.set(i,d),n.value.set(i,f),r.value.set(i,m);let h=g(i);h.clear();for(let e of m)e&&h.add(e);l?.oldestId?a.value.set(i,l.oldestId):a.value.delete(i),l&&typeof l.hasMoreOlder==`boolean`?o.value.set(i,l.hasMoreOlder):o.value.delete(i),E(i,u,d,f,m),p(i)}function k(i,s,c,l){if(s.length===0){o.value.set(i,l.hasMoreOlder),p(i);return}let u=e.value.get(i)??[],d=t.value.get(i)??[],f=n.value.get(i)??[],m=r.value.get(i)??[],h=l.sessionIds??s.map(()=>null),_=l.eventIds??s.map(()=>null);e.value.set(i,[...s,...u]),t.value.set(i,[...c,...d]),n.value.set(i,[...h,...f]),r.value.set(i,[..._,...m]);let v=g(i);for(let e of _)e&&v.add(e);l.oldestId&&a.value.set(i,l.oldestId),o.value.set(i,l.hasMoreOlder),p(i)}function A(i,a){let o=e.value.get(i),s=r.value.get(i);if(!o||!s)return;let c=s.indexOf(a);if(c===-1)return;let l=t.value.get(i),u=n.value.get(i);o.splice(c,1),s.splice(c,1),l&&l.splice(c,1),u&&u.splice(c,1),g(i).delete(a),p(i)}function ee(i){e.value.delete(i),t.value.delete(i),n.value.delete(i),r.value.delete(i),a.value.delete(i),o.value.delete(i),s.value.delete(i),c.value.delete(i),u.value.delete(i),p(i)}return{events:e,timestamps:t,sessionIds:n,eventIds:r,versions:l,versionFor:h,liveAppendCountFor:d,eventsFor:y,timestampsFor:b,sessionIdsFor:x,eventIdsFor:S,oldestIdFor:C,hasMoreOlderFor:w,isCompacting:_,setCompacting:v,append:T,merge:D,reset:O,prepend:k,removeByEventId:A,clear:ee}}),au=Cr(`auto-loop-review`,{state:()=>({finalReviews:{},returns:{},finalVersions:{},returnVersions:{}}),actions:{setFinalReview(e,t){this.finalVersions[e]=(this.finalVersions[e]??0)+1,this.finalReviews[e]=t},async fetchFinalReview(e){let t=(this.finalVersions[e]??0)+1;this.finalVersions[e]=t;let n=await Y(`/api/workspaces/${e}/auto-loop/final-review`,{cache:`no-store`});this.finalVersions[e]===t&&(this.finalReviews[e]=n)},async saveFinalReview(e,t){let n=(this.finalVersions[e]??0)+1;this.finalVersions[e]=n;let r=await Y(`/api/workspaces/${e}/auto-loop/final-review`,{method:`PATCH`,body:{configuration:t}});this.finalVersions[e]===n&&(this.finalReviews[e]=r)},setReturn(e,t){this.returnVersions[e]=(this.returnVersions[e]??0)+1,this.returns[e]=t},async fetchReturn(e){e in this.returns||(this.returns[e]=null);let t=(this.returnVersions[e]??0)+1;this.returnVersions[e]=t;let n=await Y(`/api/workspaces/${e}/review-return`,{cache:`no-store`});this.returnVersions[e]===t&&(this.returns[e]=n)},async resolveReturn(e,t){await Y(`/api/workspaces/${e}/review-return/${t}`,{method:`POST`}),await this.fetchReturn(e)},async refreshKnown(){await Promise.allSettled([...Object.keys(this.finalReviews).map(e=>this.fetchFinalReview(e)),...Object.keys(this.returns).map(e=>this.fetchReturn(e))])},forget(e){this.finalVersions[e]=(this.finalVersions[e]??0)+1,this.returnVersions[e]=(this.returnVersions[e]??0)+1,delete this.finalReviews[e],delete this.returns[e]}}}),ou=5e3,su=Cr(`progress-bars`,()=>{let e=m(null),t=m(null),n=m({}),r=m({}),i=m(null),a=null,o=m(Date.now()),s=m(0),c=0,l=0,u,f=j(()=>Object.values(n.value).filter(e=>!e.dismissed&&!r.value[e.id]&&!(e.status===`succeeded`&&e.completedAt&&Date.parse(e.completedAt)+5e3<=o.value+s.value)).sort((e,t)=>e.createdAt.localeCompare(t.createdAt)||e.id.localeCompare(t.id)));function p(){clearTimeout(u),u=void 0,o.value=Date.now(),i.value===`dismiss`&&!f.value.some(e=>e.id===a)&&(i.value=null,a=null);let e=f.value.flatMap(e=>e.status===`succeeded`&&e.completedAt?[Date.parse(e.completedAt)+ou-s.value]:[]);e.length&&(u=setTimeout(p,Math.max(1,Math.min(...e)-Date.now())))}function h(){c++,l++,clearTimeout(u),u=void 0,e.value=null,t.value=null,n.value={},r.value={},i.value=null,a=null,s.value=0,o.value=Date.now()}function g(n,r){(e.value!==n||t.value!==r)&&(h(),e.value=n,t.value=r)}function _(r){if(r.workspaceId!==e.value||r.sessionId!==t.value)return;let i=n.value[r.id];i&&r.revision<=i.revision||!i&&Object.keys(n.value).length>=1e3||(n.value[r.id]={...r,dismissed:r.dismissed||i?.dismissed===!0,dismissedAt:i?.dismissedAt??r.dismissedAt},p())}async function v(){if(!e.value||!t.value)return;let n={workspaceId:e.value,sessionId:t.value},r=c,a=++l,o=()=>r===c&&a===l,u=0;try{do{let e=await Y(`/api/progress-bars?${new URLSearchParams({...n,limit:`100`,offset:String(u)})}`);if(!o())return;let t=Date.parse(e.serverTime);Number.isFinite(t)&&(s.value=t-Date.now());for(let t of e.items)_(t);p();let r=e.nextOffset;if(r!==null&&(r<=u||r>=1e3))break;u=r}while(u!==null);o()&&i.value===`load`&&(i.value=null)}catch{o()&&(i.value=`load`)}}async function y(o){if(!e.value||!t.value||!n.value[o]||r.value[o])return!1;let s=c;r.value[o]=!0,i.value=null,a=null,p();try{let n=await Y(`/api/progress-bars/${encodeURIComponent(o)}/dismiss`,{method:`POST`,body:{workspaceId:e.value,sessionId:t.value}});return s===c&&(_(n),!0)}catch{return s===c&&!n.value[o]?.dismissed&&(i.value=`dismiss`,a=o),!1}finally{s===c&&(delete r.value[o],p())}}return d(h),{workspaceId:e,sessionId:t,records:n,pendingDismissals:r,error:i,visible:f,selectScope:g,apply:_,refresh:v,dismiss:y,reset:h}});function cu(e){return!!e&&e.state!==`completed`&&e.state!==`cancelled`}function lu(){let e=null;return{begin(){return e?.abort(),e=new AbortController,e.signal},isCurrent(t){return e!==null&&e.signal===t&&!t.aborted},abort(){e?.abort(),e=null}}}function uu(e){return(e instanceof DOMException||typeof e==`object`&&!!e)&&e.name===`AbortError`}function du(e){return![`local_bash`,`local_workflow`,`mcp_task`].includes(e.taskType??``)}function fu(e){return e.state===`OPEN`&&e.reviewDecision===`CHANGES_REQUESTED`&&e.reviewers.some(e=>e.state===`CHANGES_REQUESTED`)}function pu(e){return e.state===`OPEN`&&e.ci.rollup===`FAILURE`}function mu(e){return e?pu(e)||fu(e):!1}var hu=[`executing`,`extracting`,`brainstorming`,`compacting`];function gu(e){return!!e&&hu.includes(e)}function _u(e,t){return gu(e)&&!t}function vu(e,t,n){return _u(e,!t||n)}var yu=[`created`,`extracting`,`brainstorming`,`executing`,`compacting`,`awaiting-user`,`completed`,`idle`,`error`,`quota`],bu={created:`workspaceStatus.created`,extracting:`workspaceStatus.extracting`,brainstorming:`workspaceStatus.brainstorming`,executing:`workspaceStatus.executing`,compacting:`workspaceStatus.compacting`,"awaiting-user":`workspaceStatus.awaitingUser`,completed:`workspaceStatus.completed`,idle:`workspaceStatus.idle`,error:`workspaceStatus.error`,quota:`workspaceStatus.quota`};function xu(e){return e?bu[e]??null:null}async function Su(e){let t=await e.json().catch(()=>({}));return{ok:!0,branch:t.branch??``,upToDate:t.upToDate===!0}}var Cu=class extends Error{constructor(e,t,n){super(e),st(this,`code`,void 0),st(this,`operation`,void 0),this.name=`WorkspaceActionError`,this.code=t,this.operation=n}};function wu(e){return e===`running`?`in_progress`:e}var Tu=5e3,Eu=500,Du=null,Ou=0,ku=0,Au=new Map,ju=new Map,Mu=new Map,Nu=new WeakMap;function Pu(e){let t=Nu.get(e);return t||(t=new Map,Nu.set(e,t)),t}var Fu=new Map,Iu=new Map,Lu=new WeakMap;function Ru(e){ju.set(e,(ju.get(e)??0)+1)}function zu(e,t,n){let r={...e},i=new Set([...Object.keys(e),...Object.keys(t)]);for(let a of i){let i=t[a],o=e[a],s=(ju.get(a)??0)!==(n.get(a)??0),c=i?Date.parse(i.updatedAt):NaN,l=o?Date.parse(o.updatedAt):NaN;(s||Number.isFinite(c)&&c>l)&&(i?r[a]=i:delete r[a])}return r}function Bu(e){return e===`claude-code`?`claude-code`:null}var Z=Cr(`workspace`,{state:()=>({workspaces:[],selectedWorkspaceId:null,tasks:[],activityFeeds:{},activityFeedIds:{},activityCounts:{},subagents:{},agentTodos:{},sessions:[],loadingSessions:{},sessionsErrors:{},selectedSessionId:null,archivedWorkspaces:[],archivedLoaded:!1,restoringWorktreeIds:[],workspaceLifecycleVersion:0,workspaceLifecycleVersions:{},listRequestVersion:0,archivedListRequestVersion:0,loading:!1,listLoadError:null,listPollFailureStreak:0,activeListLoadFailed:!1,loadingOlderEvents:!1,hasMoreEvents:{},providerUsage:{},chatDraft:``,queuedMessages:{},activeAgentSessionIds:{},settledAgentSessionIds:{},gitRefreshTrigger:0,gitStatsCache:{},pendingWakeups:{},pendingQuotaBackoffs:{},pendingDeferred:{},pendingQueue:{},prSnapshots:{},autoLoopStates:{},autoLoopMessages:{},autoLoopMessageVersions:{},autoLoopSnapshotVersion:0,autoLoopMessageKeys:{},autoLoopQueueTransfers:{},crons:{},creationProgress:null,agentLiveness:{},agentLivenessLoaded:{}}),getters:{selectedWorkspace:e=>e.workspaces.find(t=>t.id===e.selectedWorkspaceId)??e.archivedWorkspaces.find(t=>t.id===e.selectedWorkspaceId)??null,needsAttention(e){return e.workspaces.filter(t=>[`error`,`quota`,`awaiting-user`].includes(t.status)||mu(e.prSnapshots[t.id])||!gu(t.status)&&!!e.prSnapshots[t.id]?.readyToMerge)},running(e){return e.workspaces.filter(t=>gu(t.status)&&!mu(e.prSnapshots[t.id]))},idle(e){return e.workspaces.filter(t=>[`completed`,`idle`,`created`].includes(t.status)&&!mu(e.prSnapshots[t.id])&&!e.prSnapshots[t.id]?.readyToMerge)},favorites(e){return e.workspaces.filter(e=>e.favoritedAt!==null)},currentAgentTodos:e=>e.selectedWorkspaceId?e.agentTodos[e.selectedWorkspaceId]??[]:[],currentSubagents:e=>{if(!e.selectedWorkspaceId)return[];let t=e.subagents[e.selectedWorkspaceId]??{};return Object.values(t).filter(du).sort((e,t)=>e.startedAt.localeCompare(t.startedAt))},currentBusySubagentCount(){return this.currentSubagents.filter(e=>e.status===`running`&&!e.ambient).length},activityFeed:e=>{if(!e.selectedWorkspaceId)return[];let t=e.activityFeeds[e.selectedWorkspaceId]??[];if(!e.selectedSessionId)return e.sessions.length===0?t:[];let n=e.sessions.find(t=>t.id===e.selectedSessionId)?.engineSessionId??null,r=e.sessions.length>0?e.sessions[e.sessions.length-1].id:null,i=e.selectedSessionId===r;return t.filter(t=>t.sessionId?t.sessionId===e.selectedSessionId||n!==null&&t.sessionId===n:i)},acceptanceCriteria:e=>e.tasks.filter(e=>e.isAcceptanceCriterion),archived:e=>e.archivedWorkspaces,currentProviderUsage(e){let t=e.workspaces.find(t=>t.id===e.selectedWorkspaceId);if(!t)return null;let n=Bu(t.engine);return n?e.providerUsage[n]??null:null}},actions:{clearWorkspaceLocalState(e){delete this.activityFeeds[e],delete this.activityFeedIds[e],delete this.activityCounts[e],delete this.subagents[e],delete this.agentTodos[e],delete this.hasMoreEvents[e],delete this.gitStatsCache[e],delete this.pendingWakeups[e],delete this.pendingQuotaBackoffs[e],delete this.pendingDeferred[e],delete this.pendingQueue[e],delete this.prSnapshots[e],delete this.autoLoopStates[e],delete this.autoLoopMessages[e],delete this.autoLoopMessageKeys[e],delete this.crons[e],delete this.activeAgentSessionIds[e];for(let t of Object.keys(this.queuedMessages))t.startsWith(`${e}:`)&&delete this.queuedMessages[t];Au.delete(e),ju.delete(e),Mu.delete(e),Pu(this).get(e)?.abort(),Pu(this).delete(e),delete this.loadingSessions[e],delete this.sessionsErrors[e],Fu.delete(e),iu().clear(e),localStorage.removeItem(`kobo:session:${e}`)},setCreationProgress(e){this.creationProgress=e},clearCreationProgress(){this.creationProgress=null},async toggleFavorite(e){let t=this.workspaces.find(t=>t.id===e);if(!t)return;let n=t.favoritedAt,r=n===null,i=r?new Date().toISOString():null;this.workspaces=this.workspaces.map(t=>t.id===e?{...t,favoritedAt:i}:t);try{let t=await J(`/api/workspaces/${e}/favorite`,{method:r?`POST`:`DELETE`});if(!t.ok)throw await q(t);let n=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t)}catch(t){throw this.workspaces=this.workspaces.map(t=>t.id===e?{...t,favoritedAt:n}:t),t}},async togglePrWatch(e){let t=this.workspaces.find(t=>t.id===e);if(!t)return;let n=t.prWatchDisabledAt===null,r=n?new Date().toISOString():null;this.workspaces=this.workspaces.map(t=>t.id===e?{...t,prWatchDisabledAt:r}:t);try{let t=await J(`/api/workspaces/${e}/pr-watch-disabled`,{method:n?`POST`:`DELETE`});if(!t.ok)throw await q(t);if(n){let n=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t),delete this.prSnapshots[e],Ru(e)}else{let{workspace:n,prSnapshot:r}=await t.json();this.workspaces=this.workspaces.map(t=>t.id===e?n:t),r?this.prSnapshots[e]=r:delete this.prSnapshots[e],Ru(e)}}catch(n){throw this.workspaces=this.workspaces.map(n=>n.id===e?{...n,prWatchDisabledAt:t.prWatchDisabledAt}:n),n}},async setWorkspaceTags(e,t){let n=this.workspaces.find(t=>t.id===e);if(!n)return;let r=n.tags,i=[...t];this.workspaces=this.workspaces.map(t=>t.id===e?{...t,tags:i}:t);try{let n=await J(`/api/workspaces/${e}/tags`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tags:t})});if(!n.ok)throw await q(n);let r=await n.json();this.workspaces=this.workspaces.map(t=>t.id===e?r:t)}catch(t){throw this.workspaces=this.workspaces.map(t=>t.id===e?{...t,tags:r}:t),t}},async fetchOrphanWorktrees(e){return Y(`/api/git/orphan-worktrees?projectPath=${encodeURIComponent(e)}`,{cache:`no-store`})},async fetchWorkspaces(){let e=++this.listRequestVersion,t=new Map(Au),n=this.workspaceLifecycleVersion;this.loading=!0;try{let r=await Y(`/api/workspaces`);if(e!==this.listRequestVersion||n!==this.workspaceLifecycleVersion)return;let i=new Map(this.workspaces.map(e=>[e.id,e]));this.workspaces=(Array.isArray(r)?r:r.workspaces??[]).map(e=>(Au.get(e.id)??0)===(t.get(e.id)??0)?e:i.get(e.id)??e),this.listLoadError=null,this.activeListLoadFailed=!1,this.listPollFailureStreak=0;for(let e of this.workspaces)iu().setCompacting(e.id,e.status===`compacting`),[`completed`,`idle`,`error`,`quota`].includes(e.status)&&this.finalizeRunningSubagents(e.id)}catch(t){if(e!==this.listRequestVersion||n!==this.workspaceLifecycleVersion)return;this.listLoadError=t instanceof Error?t.message:String(t),this.activeListLoadFailed=!0,console.error(`[workspace store] fetchWorkspaces failed:`,t)}finally{e===this.listRequestVersion&&(this.loading=!1)}},async retryLoadWorkspaces(){await this.fetchWorkspaces(),this.archivedLoaded&&await this.fetchArchivedWorkspaces()},async fetchArchivedWorkspaces(){let e=++this.archivedListRequestVersion,t=new Map(Au),n=this.workspaceLifecycleVersion;try{let r=await Y(`/api/workspaces/archived`);if(e!==this.archivedListRequestVersion||n!==this.workspaceLifecycleVersion)return;let i=new Map(this.archivedWorkspaces.map(e=>[e.id,e]));this.archivedWorkspaces=r.map(e=>(Au.get(e.id)??0)===(t.get(e.id)??0)?e:i.get(e.id)??e),this.archivedLoaded=!0,this.activeListLoadFailed||(this.listLoadError=null)}catch(t){if(e!==this.archivedListRequestVersion||n!==this.workspaceLifecycleVersion)return;this.listLoadError=t instanceof Error?t.message:String(t),console.error(`[workspace store] fetchArchivedWorkspaces failed:`,t)}},async fetchWorkspaceDetails(e){let t=this.workspaceLifecycleVersions[e]??0,n=(Fu.get(e)??0)+1;Fu.set(e,n);let r=Au.get(e)??0;try{let i=await Y(`/api/workspaces/${e}`);if(this.selectedWorkspaceId!==e||Fu.get(e)!==n)return;if(t===(this.workspaceLifecycleVersions[e]??0)){let t=(Au.get(e)??0)!==r,n=i.workspace??i,a=t?{}:n;typeof a.status==`string`&&iu().setCompacting(e,a.status===`compacting`);let o=this.workspaces.findIndex(t=>t.id===e);if(o>=0)this.workspaces[o]={...this.workspaces[o],...a};else{let t=this.archivedWorkspaces.findIndex(t=>t.id===e);t>=0?this.archivedWorkspaces[t]={...this.archivedWorkspaces[t],...a}:a?.archivedAt&&this.archivedWorkspaces.unshift(a)}}i.tasks&&(this.tasks=i.tasks),`agentLiveness`in i&&(Au.get(e)??0)===r&&this.applyAgentLiveness(e,i.agentLiveness)}catch(e){console.error(`[workspace store] fetchWorkspaceDetails failed:`,e)}},applyAgentLiveness(e,t){if(this.agentLivenessLoaded={...this.agentLivenessLoaded,[e]:!0},t){this.agentLiveness={...this.agentLiveness,[e]:t};return}if(e in this.agentLiveness){let t={...this.agentLiveness};delete t[e],this.agentLiveness=t}},async createWorkspace(e,t=[]){try{let n=JSON.stringify(e);if(t.length>0){n=new FormData,n.append(`workspace`,JSON.stringify(e));for(let e of t)n.append(`attachments`,e)}let r=await J(`/api/workspaces`,{method:`POST`,...typeof n==`string`?{headers:{"Content-Type":`application/json`}}:{},body:n});if(!r.ok){let e=await r.json().catch(()=>({}));throw new Cu(typeof e.error==`string`?e.error:`HTTP ${r.status}`,typeof e.step==`string`?e.step:void 0)}let i=r.headers.get(`X-Kobo-Branch-Adjusted`)===`1`,a=r.headers.get(`X-Kobo-Source-Fallback`)===`local`,o=await r.json(),s=o.workspace??o;this.invalidateWorkspaceLifecycleReads(s.id);let c=this.workspaces.findIndex(e=>e.id===s.id);return c>=0?this.workspaces[c]=s:this.workspaces.push(s),e.autoLoop&&this.fetchAutoLoopStates(),s._branchAdjusted=i,s._sourceFallback=a,s}catch(e){throw console.error(`[workspace store] createWorkspace failed:`,e),e}},async startWorkspace(e,t,n,r){try{await Y(`/api/workspaces/${e}/start`,{method:`POST`,body:{prompt:t,agentSessionId:n,resume:r}}),await this.fetchWorkspaces()}catch(e){throw console.error(`[workspace store] startWorkspace failed:`,e),e}},async previewEngineHandoff(e,t){let n=await J(`/api/workspaces/${e}/engine-handoff-preview`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({engine:t})}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);return r.handoff},async switchEngine(e,t){let n=await J(`/api/workspaces/${e}/switch-engine`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);let i=r.workspace,a=this.workspaces.findIndex(t=>t.id===e);return a>=0&&(this.workspaces[a]=i),await this.fetchSessions(e,r.sessionId),{sessionId:r.sessionId}},async stopWorkspace(e){try{await ac(`/api/workspaces/${e}/stop`,{method:`POST`}),await this.fetchWorkspaces()}catch(e){throw console.error(`[workspace store] stopWorkspace failed:`,e),e}},async interruptAgent(e,t={}){try{let n=await rc(`/api/workspaces/${e}/interrupt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>void 0),t=typeof e==`object`&&e&&!Array.isArray(e)?e:void 0,r=typeof t?.error==`string`?t.error:`HTTP ${n.status}`,i=t?.code;throw new Cu(r,n.status===409&&(i===`no_agent_running`||i===`session_not_active`)||n.status===500&&i===`interrupt_failed`?i:void 0)}}catch(e){throw console.error(`[workspace store] interruptAgent failed:`,e),e}},async stopSubagents(e,t){try{let n=await J(`/api/workspaces/${e}/subagents/stop`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t===void 0?{}:{id:t})}),r=await n.json().catch(()=>void 0),i=typeof r==`object`&&r&&!Array.isArray(r)?r:void 0;if(!n.ok)throw new Cu(typeof i?.error==`string`?i.error:`HTTP ${n.status}`,typeof i?.code==`string`?i.code:void 0);return typeof i?.stopped==`number`?i.stopped:0}catch(e){throw console.error(`[workspace store] stopSubagents failed:`,e),e}},async deleteWorkspace(e,t){try{let n=await J(`/api/workspaces/${e}`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t??{})});if(!n.ok)throw await q(n);let r=[];if(n.status===200){let e=await n.json().catch(()=>({}));r=Array.isArray(e.warnings)?e.warnings:[]}return this.workspaces=this.workspaces.filter(t=>t.id!==e),this.archivedWorkspaces=this.archivedWorkspaces.filter(t=>t.id!==e),this.clearWorkspaceLocalState(e),nu(e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]),{warnings:r}}catch(e){throw console.error(`[workspace store] deleteWorkspace failed:`,e),e}},async deleteAllArchived(e){try{let t=this.archivedWorkspaces.map(e=>e.id),n=await J(`/api/workspaces/archived`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e??{})});if(!n.ok)throw await q(n);let r=await n.json().catch(()=>({})),i=typeof r.deleted==`number`?r.deleted:0,a=Array.isArray(r.warnings)?r.warnings:[];this.archivedWorkspaces=[];for(let e of t)this.clearWorkspaceLocalState(e),nu(e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]);return{deleted:i,warnings:a,ids:t}}catch(e){throw console.error(`[workspace store] deleteAllArchived failed:`,e),e}},async updateModel(e,t){try{let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({model:t})});if(!n.ok)throw await q(n);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateModel failed:`,e),e}},async updateWorkspaceDescription(e,t){let n=this.workspaces.findIndex(t=>t.id===e);if(n<0)throw Error(`Workspace '${e}' not found in store`);let r=this.workspaces[n].description;this.workspaces[n]={...this.workspaces[n],description:t};try{let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({description:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json();this.workspaces=this.workspaces.map(t=>t.id===e?{...t,...r}:t)}catch(n){let i=this.workspaces.findIndex(t=>t.id===e);throw i>=0&&this.workspaces[i].description===t&&(this.workspaces[i]={...this.workspaces[i],description:r}),n}},async updateReasoningEffort(e,t){try{let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({reasoningEffort:t})});if(!n.ok)throw await q(n);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateReasoningEffort failed:`,e),e}},async renameWorkspaceBranch(e,t){let n=await J(`/api/workspaces/${e}/rename-branch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({newName:t})}),r=await n.json().catch(()=>null);if(!n.ok)throw new Cu(r?.error??`Rename failed`,r?.code);let i=r,a=this.workspaces.findIndex(t=>t.id===e);return a>=0&&(this.workspaces[a]=i),i},async resyncWorkspaceBranch(e){let t=await J(`/api/workspaces/${e}/resync-branch`,{method:`POST`});if(!t.ok)throw await q(t);let n=await t.json();if(n.changed){let t=this.workspaces.findIndex(t=>t.id===e);t>=0&&(this.workspaces[t]={...this.workspaces[t],workingBranch:n.workingBranch})}return n},async updateAgentPermissionMode(e,t){try{let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({agentPermissionMode:t})});if(!n.ok)throw await q(n);let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)}catch(e){throw console.error(`[workspace store] updateAgentPermissionMode failed:`,e),e}},async updateWorkflowPolicy(e,t){let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({workflowPolicy:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw new Cu(e.error??`HTTP ${n.status}`,e.code)}let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]=r)},async pushBranch(e,t={}){let n=await J(`/api/workspaces/${e}/push`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({force:t.force===!0})});if(!n.ok){let e=await n.json().catch(()=>({error:`Push failed`}));throw new Cu(e.error??`Push failed`,e.code,e.operation)}return Su(n)},async forcePushBranch(e){let t=await J(`/api/workspaces/${e}/force-push`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({error:`Push failed`}));throw new Cu(e.error??`Push failed`,e.code,e.operation)}return Su(t)},async fetchGitStats(e,t={}){let n=await Y(`/api/workspaces/${e}/git-stats${t.freshFetch?`?freshFetch=1`:``}`,{signal:t.signal,timeoutMs:6e4});return this.gitStatsCache[e]=n,n},async fetchBranchDivergence(e,t={}){let n=await J(`/api/workspaces/${e}/branch-divergence?limit=${t.limit??50}`,{signal:t.signal});if(!n.ok)throw await q(n);return await n.json()},async openPullRequest(e){let t=await J(`/api/workspaces/${e}/open-pr`,{method:`POST`}),n=await t.json().catch(()=>null);if(!t.ok)throw new Cu(n?.error??`Open PR failed`,n?.code);return n},async archiveWorkspace(e){try{let t=await J(`/api/workspaces/${e}/archive`,{method:`POST`});if(!t.ok)throw await q(t);let n=await t.json();return this.workspaces=this.workspaces.filter(t=>t.id!==e),this.archivedLoaded&&this.archivedWorkspaces.unshift(n),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]),n}catch(e){throw console.error(`[workspace store] archiveWorkspace failed:`,e),e}},invalidateWorkspaceLifecycleReads(e){this.workspaceLifecycleVersion+=1,e&&(this.workspaceLifecycleVersions[e]=(this.workspaceLifecycleVersions[e]??0)+1)},applyRestoredWorkspace(e){this.invalidateWorkspaceLifecycleReads(e.id);let t=this.workspaces.findIndex(t=>t.id===e.id);t===-1?this.workspaces.unshift(e):this.workspaces[t]=e,this.archivedWorkspaces=this.archivedWorkspaces.filter(t=>t.id!==e.id)},restoreWorktree(e){let t=Lu.get(this);t||(t=new Map,Lu.set(this,t));let n=t.get(e);if(n)return n;let r=this.workspaceLifecycleVersions[e]??0;this.restoringWorktreeIds.push(e);let i=(async()=>{try{let t=await J(`/api/workspaces/${e}/restore-worktree`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({}));throw new Cu(e.error??`HTTP ${t.status}`,e.code)}let{workspace:n}=await t.json();return r===(this.workspaceLifecycleVersions[e]??0)&&this.applyRestoredWorkspace(n),n}finally{this.restoringWorktreeIds=this.restoringWorktreeIds.filter(t=>t!==e),t.delete(e)}})();return t.set(e,i),i},async unarchiveWorkspace(e){try{let t=await J(`/api/workspaces/${e}/unarchive`,{method:`POST`});if(!t.ok){if(t.status===409){let e=await t.json().catch(()=>({})),n=Error(e.error??`worktree-purged`);throw n.code=`worktree-purged`,n}throw await q(t)}let n=await t.json();return this.archivedWorkspaces=this.archivedWorkspaces.filter(t=>t.id!==e),this.workspaces.unshift(n),n}catch(e){throw console.error(`[workspace store] unarchiveWorkspace failed:`,e),e}},async createTask(e,t,n){try{await ac(`/api/workspaces/${e}/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t,isAcceptanceCriterion:n})}),await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] createTask failed:`,e),e}},async updateTaskTitle(e,t,n){try{await ac(`/api/workspaces/${e}/tasks/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:n})}),await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] updateTaskTitle failed:`,e),e}},async deleteTask(e,t){try{await ac(`/api/workspaces/${e}/tasks/${t}`,{method:`DELETE`}),await this.fetchWorkspaceDetails(e)}catch(e){throw console.error(`[workspace store] deleteTask failed:`,e),e}},cancelSessionReads(e){for(let[t,n]of Pu(this))e&&e!==t||(n.abort(),Pu(this).delete(t),delete this.loadingSessions[t])},selectWorkspace(e){this.cancelSessionReads(),this.selectedWorkspaceId=e,this.selectedSessionId=null,this.sessions=[],this.tasks=[],this.markRead(e),this.fetchWorkspaceDetails(e),this.fetchSessions(e),this.fetchPendingQuotaBackoff(e),this.fetchGitStats(e).catch(()=>{}),this.activityFeeds[e]?.length||If().subscribe(e)},async fetchSessions(e,t){let n=Pu(this);n.get(e)?.abort();let r=new AbortController;n.set(e,r);let i=(Mu.get(e)??0)+1;Mu.set(e,i),this.loadingSessions[e]=!0,delete this.sessionsErrors[e];try{let n=await J(`/api/workspaces/${e}/sessions`,{signal:r.signal});if(!n.ok)throw await q(n);let a=await n.json();if(this.selectedWorkspaceId!==e||Mu.get(e)!==i)return;if(this.sessions=a,t===null){this.selectSession(null);return}if(t&&this.sessions.some(e=>e.id===t)){this.selectSession(t);return}let o=this.selectedSessionId&&this.sessions.some(e=>e.id===this.selectedSessionId);if(this.sessions.length>0&&!o){let t=localStorage.getItem(`kobo:session:${e}`),n=this.sessions.filter(e=>(e.activationOrder??0)>=0),r=t?n.find(e=>e.id===t):null;this.selectSession(r?.id??n[0]?.id??null)}}catch(t){if(uu(t)||r.signal.aborted)return;Mu.get(e)===i&&(this.sessionsErrors[e]=t instanceof Error?t.message:String(t)),console.error(`[workspace store] fetchSessions failed:`,t)}finally{n.get(e)===r&&n.delete(e),Mu.get(e)===i&&delete this.loadingSessions[e]}},async fetchOlderEvents(e){if(this.loadingOlderEvents||this.hasMoreEvents[e]===!1)return!1;let t=this.activityFeeds[e];if(!t?.length)return!1;let n=t[0].id;this.loadingOlderEvents=!0;try{let t=await J(`/api/workspaces/${e}/events?before=${encodeURIComponent(n)}&limit=100`);if(!t.ok)throw await q(t);let r=await t.json();if(this.hasMoreEvents[e]=r.hasMore,r.events.length>0){let e=If();for(let t of r.events)e._routeMessage(t)}return r.events.length>0}catch(e){return console.error(`[workspace store] fetchOlderEvents failed:`,e),!1}finally{this.loadingOlderEvents=!1}},selectSession(e){if(this.selectedSessionId=e,this.selectedWorkspaceId){let t=`kobo:session:${this.selectedWorkspaceId}`;e===null?localStorage.removeItem(t):localStorage.setItem(t,e)}},async createSession(e){try{let t=await J(`/api/workspaces/${e}/sessions`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}let n=await t.json();return this.selectedWorkspaceId===e&&(this.sessions.unshift(n),this.selectSession(n.id)),n}catch(e){throw console.error(`[workspace store] createSession failed:`,e),e}},async renameWorkspace(e,t){let n=await J(`/api/workspaces/${e}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json(),i=this.workspaces.findIndex(t=>t.id===e);i>=0&&(this.workspaces[i]={...this.workspaces[i],...r});let a=this.archivedWorkspaces.findIndex(t=>t.id===e);a>=0&&(this.archivedWorkspaces[a]={...this.archivedWorkspaces[a],...r})},async renameSession(e,t,n){let r=await J(`/api/workspaces/${e}/sessions/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:n})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`HTTP ${r.status}`)}let i=await r.json().catch(()=>null),a=this.sessions.find(e=>e.id===t);a&&(a.name=i?.name??n)},async deleteSession(e,t){let n=await J(`/api/workspaces/${e}/sessions/${t}`,{method:`DELETE`}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error??`HTTP ${n.status}`);let i=this.selectedSessionId===t,a=r.workspace;if(a){let t=this.workspaces.findIndex(t=>t.id===e);t>=0&&(this.workspaces[t]=a)}await this.fetchSessions(e),i&&this.selectedWorkspaceId===e&&this.selectSession(this.sessions[0]?.id??null)},addActivityItem(e,t){if(this.activityFeeds[e]||(this.activityFeeds[e]=[]),this.activityFeedIds[e]||(this.activityFeedIds[e]=new Set),this.activityCounts[e]||(this.activityCounts[e]={toolUses:0,agentMessages:0,userMessages:0,errors:0}),t.meta?.sender!==`user`&&t.meta?.sender!==`system-prompt`)for(let t of this.activityFeeds[e])t.meta?.pending&&(t.meta.pending=!1);if(!this.activityFeedIds[e].has(t.id)){this.activityFeedIds[e].add(t.id),this.activityFeeds[e].push(t);let n=this.activityCounts[e];t.type===`tool_use`?n.toolUses++:t.type===`error`&&n.errors++,t.meta?.sender===`user`?n.userMessages++:t.type===`text`&&t.meta?.sender!==`system-prompt`&&n.agentMessages++}let n=this.activityFeeds[e];if(n.length>Tu){let t=n.splice(0,n.length-Tu),r=this.activityFeedIds[e];for(let e of t)r.delete(e.id)}},removeActivityItem(e,t){let n=this.activityFeeds[e],r=this.activityFeedIds[e];if(!n||!r)return;let i=n.findIndex(e=>e.id===t);if(i<0)return;let[a]=n.splice(i,1);r.delete(t);let o=this.activityCounts[e];o&&a&&(a.type===`tool_use`?o.toolUses=Math.max(0,o.toolUses-1):a.type===`error`&&(o.errors=Math.max(0,o.errors-1)),a.meta?.sender===`user`?o.userMessages=Math.max(0,o.userMessages-1):a.type===`text`&&a.meta?.sender!==`system-prompt`&&(o.agentMessages=Math.max(0,o.agentMessages-1)))},clearActivityFeed(e){e?(delete this.activityFeeds[e],delete this.activityFeedIds[e],delete this.activityCounts[e]):(this.activityFeeds={},this.activityFeedIds={},this.activityCounts={})},applyUsageSnapshot(e){this.providerUsage[e.providerId]=e.snapshot},async requestUsageRefresh(e){try{await ac(`/api/usage/${e}/refresh`,{method:`POST`})}catch(e){console.error(`[workspace store] requestUsageRefresh failed:`,e)}},triggerGitRefresh(){this.gitRefreshTrigger++,this.schedulePrSnapshotsRefresh()},schedulePrSnapshotsRefresh(){Du!==null&&clearTimeout(Du),Du=setTimeout(()=>{Du=null,this.fetchPrSnapshots()},Eu)},async fetchPrSnapshots(){let e=++ku,t=new Map(ju);try{let n=await J(`/api/workspaces/pr-states`,{cache:`no-store`});if(!n.ok)return;let r=await n.json();if(e!==ku)return;this.prSnapshots=zu(r,this.prSnapshots,t)}catch(e){console.error(`[workspace-store] fetchPrSnapshots failed:`,e)}},async fetchWorkspacesInfo(){let e=this.workspaceLifecycleVersion,t=++Ou,n=new Map(Au),r=new Map(ju),i=new Map(Iu);try{let a=await Y(`/api/workspaces/info`,{cache:`no-store`});if(this.listPollFailureStreak=0,this.activeListLoadFailed=!1,this.listLoadError=null,t!==Ou||e!==this.workspaceLifecycleVersion)return;if(this.agentLiveness=a.agentLiveness??{},a.pendingInputs)for(let e of a.workspaces){if((Iu.get(e.id)??0)!==(i.get(e.id)??0))continue;let t=this.pendingQueue[e.id]??[],n=new Map(t.map(e=>[e.toolCallId,e])),r=(a.pendingInputs[e.id]??[]).map(e=>{let t=n.get(e.toolCallId);return t&&Jt.deepEqual(t,e)?t:e});if(!(r.length===t.length&&r.every((e,n)=>e===t[n]))){this.clearAllPending(e.id);for(let t of r)this.enqueuePending(e.id,t)}}let o={...this.agentLivenessLoaded};for(let e of a.workspaces)o[e.id]=!0;this.agentLivenessLoaded=o;let s=new Map(this.workspaces.map(e=>[e.id,e]));this.workspaces=a.workspaces.map(e=>{let t=s.get(e.id),r=(Au.get(e.id)??0)!==(n.get(e.id)??0);return t&&r?{...e,...t}:e});for(let e of this.workspaces)iu().setCompacting(e.id,e.status===`compacting`),[`completed`,`idle`,`error`,`quota`].includes(e.status)&&this.finalizeRunningSubagents(e.id);this.prSnapshots=zu(a.prSnapshots,this.prSnapshots,r);let c={...this.gitStatsCache};for(let[e,t]of Object.entries(a.gitStats)){let n=c[e];(!n||(t.computedAt??0)>=(n.computedAt??0))&&(c[e]=t)}this.gitStatsCache=c}catch(e){console.error(`[workspace-store] fetchWorkspacesInfo failed:`,e),this.listPollFailureStreak+=1,this.listPollFailureStreak>=2&&(this.activeListLoadFailed=!0,this.listLoadError=e instanceof Error?e.message:String(e))}},async refreshPrSnapshot(e){try{let t=await J(`/api/workspaces/pr-snapshot/refresh/${e}`,{method:`POST`});if(t.status===404){let t={...this.prSnapshots};return delete t[e],this.prSnapshots=t,Ru(e),null}if(!t.ok)return console.error(`[workspace-store] refreshPrSnapshot non-OK:`,t.status),null;let n=await t.json();return this.prSnapshots={...this.prSnapshots,[e]:n.snapshot},Ru(e),n.snapshot}catch(e){return console.error(`[workspace-store] refreshPrSnapshot failed:`,e),null}},async fetchAutoLoopStates(){let e=++this.autoLoopSnapshotVersion,t=au(),n={...t.finalReviews};try{let r=await J(`/api/workspaces/auto-loop-states`,{cache:`no-store`});if(!r.ok)return;let i=await r.json();if(e===this.autoLoopSnapshotVersion){for(let[e,r]of Object.entries(i))t.finalReviews[e]!==n[e]&&t.finalReviews[e]&&(r.finalReview=t.finalReviews[e]);this.autoLoopStates=i}}catch(e){console.error(`[workspace-store] fetchAutoLoopStates failed:`,e)}},async fetchAutoLoopMessages(e){let t=(this.autoLoopMessageVersions[e]??0)+1;this.autoLoopMessageVersions[e]=t;let n=await J(`/api/workspaces/${e}/auto-loop/messages`,{cache:`no-store`});if(n.ok){let r=await n.json();this.autoLoopMessageVersions[e]===t&&(this.autoLoopMessages[e]=r)}},async queueAutoLoopMessage(e,t){let n=this.autoLoopMessageKeys[e];(!n||n.content!==t)&&(n={content:t,id:Array.from(crypto.getRandomValues(new Uint32Array(4)),e=>e.toString(16)).join(`-`)},this.autoLoopMessageKeys[e]=n);let r=await rc(`/api/workspaces/${e}/auto-loop/messages`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({content:t,clientMessageId:n.id})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`HTTP ${r.status}`)}delete this.autoLoopMessageKeys[e],await this.fetchAutoLoopMessages(e).catch(()=>{})},async resolveAutoLoopMessage(e,t,n){let r=await rc(`/api/workspaces/${e}/auto-loop/messages/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:n})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`HTTP ${r.status}`)}await this.fetchAutoLoopMessages(e)},async enableAutoLoop(e){let t=await rc(`/api/workspaces/${e}/auto-loop`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}await this.fetchAutoLoopStates()},async disableAutoLoop(e){let t=await rc(`/api/workspaces/${e}/auto-loop`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}await this.fetchAutoLoopStates()},async forceAutoLoopReady(e){await ac(`/api/workspaces/${e}/auto-loop-ready`,{method:`POST`}),await this.fetchAutoLoopStates()},setAutoLoopState(e,t){this.autoLoopStates[e]=t},clearAutoLoopState(e){delete this.autoLoopStates[e],delete this.autoLoopMessages[e],delete this.autoLoopMessageKeys[e]},async fetchCrons(e){try{let t=await J(`/api/workspaces/${e}/crons`);if(!t.ok)return;let n=await t.json();this.crons[e]=n.crons}catch(e){console.error(`[workspace-store] fetchCrons failed:`,e)}},async cancelCron(e,t){let n=this.crons[e]??[];this.crons[e]=n.filter(e=>e.id!==t);try{await ac(`/api/workspaces/${e}/crons/${t}`,{method:`DELETE`})}catch(t){throw this.crons[e]=n,t}},async createCron(e,t){let n=await rc(`/api/workspaces/${e}/crons`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}await this.fetchCrons(e)},async scheduleManualWakeup(e,t){let n=await J(`/api/workspaces/${e}/pending-wakeup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`HTTP ${n.status}`)}let r=await n.json();r.pending&&(this.pendingWakeups[e]=r.pending)},async fetchPendingWakeup(e){try{let t=await J(`/api/workspaces/${e}/pending-wakeup`,{cache:`no-store`});if(!t.ok)return;let n=await t.json();n?this.pendingWakeups[e]=n:delete this.pendingWakeups[e]}catch(e){console.error(`[workspace-store] fetchPendingWakeup failed:`,e)}},setPendingWakeup(e,t){this.pendingWakeups[e]=t},clearPendingWakeup(e){delete this.pendingWakeups[e]},async cancelPendingWakeup(e){let t=this.pendingWakeups[e]!==void 0;delete this.pendingWakeups[e];try{await ac(`/api/workspaces/${e}/pending-wakeup`,{method:`DELETE`})}catch(n){console.error(`[workspace-store] cancelPendingWakeup failed:`,n),t&&await this.fetchPendingWakeup(e)}},async fetchPendingQuotaBackoff(e){try{let t=await J(`/api/workspaces/${e}/quota-backoff`,{cache:`no-store`});if(!t.ok)return;let n=await t.json();n?this.pendingQuotaBackoffs[e]={...n,reason:n.reason===`transient`?`transient`:`quota`}:delete this.pendingQuotaBackoffs[e]}catch(e){console.error(`[workspace-store] fetchPendingQuotaBackoff failed:`,e)}},setPendingQuotaBackoff(e,t){this.pendingQuotaBackoffs[e]=t},clearPendingQuotaBackoff(e){delete this.pendingQuotaBackoffs[e]},async cancelQuotaBackoff(e){let t=this.pendingQuotaBackoffs[e]!==void 0;delete this.pendingQuotaBackoffs[e];try{await ac(`/api/workspaces/${e}/quota-backoff`,{method:`DELETE`})}catch(n){console.error(`[workspace-store] cancelQuotaBackoff failed:`,n),t&&await this.fetchPendingQuotaBackoff(e)}},async resumeQuotaBackoffNow(e){await this.fetchSessions(e);let t=this.sessions[0];t&&(t.status===`completed`||t.status===`error`)?await this.startWorkspace(e,void 0,t.id,!0):await this.startWorkspace(e)},enqueuePending(e,t){Iu.set(e,(Iu.get(e)??0)+1);let n=this.pendingQueue[e]??[];n.some(e=>e.toolCallId===t.toolCallId)||(n.push(t),this.pendingQueue[e]=n,t.kind===`question`&&(this.pendingDeferred[e]={toolCallId:t.toolCallId,toolName:t.toolName,input:t.input,agentSessionId:t.agentSessionId}))},peekPending(e){return this.pendingQueue[e]?.[0]},dequeuePending(e){Iu.set(e,(Iu.get(e)??0)+1);let t=this.pendingQueue[e];if(!t||t.length===0)return;let n=t.shift();t.length===0&&delete this.pendingQueue[e];let r=this.pendingQueue[e]?.[0];return r&&r.kind===`question`?this.pendingDeferred[e]={toolCallId:r.toolCallId,toolName:r.toolName,input:r.input,agentSessionId:r.agentSessionId}:delete this.pendingDeferred[e],n},clearPendingForSession(e,t){if(Iu.set(e,(Iu.get(e)??0)+1),t===null)return;let n=this.pendingQueue[e];if(!n)return;let r=n.filter(e=>e.agentSessionId!==t);r.length===0?delete this.pendingQueue[e]:this.pendingQueue[e]=r;let i=this.pendingDeferred[e];i&&i.agentSessionId===t&&delete this.pendingDeferred[e]},clearAllPending(e){Iu.set(e,(Iu.get(e)??0)+1),delete this.pendingQueue[e],delete this.pendingDeferred[e]},setPendingDeferred(e,t){this.enqueuePending(e,{kind:`question`,agentSessionId:t.agentSessionId,toolCallId:t.toolCallId,toolName:t.toolName,input:t.input})},clearPendingDeferred(e,t=null){if(t===null){this.clearAllPending(e);return}this.clearPendingForSession(e,t)},getPendingDeferred(e){let t=this.peekPending(e);if(t?.kind===`question`)return{toolCallId:t.toolCallId,toolName:t.toolName,input:t.input,agentSessionId:t.agentSessionId}},async submitDeferredAnswer(e,t,n,r,i){let a=await rc(`/api/workspaces/${e}/deferred-tool-use/answer`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({answers:t,toolCallId:n,awaitingFreeForm:r,response:i})});if(!a.ok){let t=(await a.json().catch(()=>({}))).error??`HTTP ${a.status}`;if(/no deferred tool use pending|no agent running|no active engine process|no pending callback/i.test(t)){console.warn(`[workspace] submitDeferredAnswer: deferred callback expired — clearing zombie panel locally`),this.dequeuePending(e),this.fetchWorkspaces();return}throw Error(t)}this.dequeuePending(e),this.fetchWorkspaces()},async cancelDeferredAnswer(e,t,n){let r=await rc(`/api/workspaces/${e}/deferred-tool-use/cancel`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({reason:t,toolCallId:n})});if(!r.ok){let t=(await r.json().catch(()=>({}))).error??`HTTP ${r.status}`;if(/no deferred tool use pending/i.test(t)){console.warn(`[workspace] cancelDeferredAnswer: backend has no pending — clearing zombie panel locally`),this.dequeuePending(e),this.fetchWorkspaces();return}throw Error(t)}this.dequeuePending(e),this.fetchWorkspaces()},async submitDeferredPermission(e,t,n,r,i=`once`){let a=await rc(`/api/workspaces/${e}/deferred-permission/decision`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({toolCallId:t,decision:n,reason:r,scope:i})});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error??`HTTP ${a.status}`)}this.dequeuePending(e),this.fetchWorkspaces()},updateAgentTodos(e,t){this.agentTodos[e]=t},agentTaskCreate(e,t,n){let r=this.agentTodos[e]?[...this.agentTodos[e]]:[];r.some(e=>e.id===t)||(r.push({id:t,content:n.subject||n.description||``,status:`pending`,activeForm:n.activeForm}),this.agentTodos[e]=r)},agentTaskSetNumber(e,t,n){let r=this.agentTodos[e];r&&(this.agentTodos[e]=r.map(e=>e.id===t?{...e,taskNumber:n}:e))},agentTaskUpdate(e,t,n){let r=this.agentTodos[e];if(r){if(n.status===`deleted`){this.agentTodos[e]=r.filter(e=>e.taskNumber!==t);return}this.agentTodos[e]=r.map(e=>e.taskNumber===t?{...e,status:n.status?wu(n.status):e.status,content:n.content??e.content,activeForm:n.activeForm??e.activeForm}:e)}},finalizeRunningSubagents(e,t){let n=this.subagents[e];if(!n)return;let r=new Date().toISOString();for(let e of Object.keys(n)){let i=n[e];t&&i.sessionId&&i.sessionId!==t||i.status===`running`&&(n[e]={...i,status:`done`,updatedAt:r})}},upsertSubagent(e,t){this.subagents[e]||(this.subagents[e]={});let n=this.subagents[e],r=new Set([t.toolUseId,...t.taskId?[t.taskId]:[]]),i=Object.entries(n).filter(([e,t])=>r.has(e)||r.has(t.toolUseId)||!!t.taskId&&r.has(t.taskId)).sort(([,e],[,t])=>e.startedAt.localeCompare(t.startedAt)),a=i[0]?.[1];if(a&&a.status!==`running`&&t.status===`running`&&t.phase===`progress`)return;for(let[e]of i)delete n[e];let o=t.taskId??i.map(([,e])=>e.taskId).find(e=>!!e),s=a&&t.toolUseId===o?a.toolUseId:t.toolUseId,c=new Date().toISOString(),l=t.status??a?.status??`running`,u=t.phase===`started`?t.ambient===!0:t.ambient??a?.ambient,d=t.sessionId||a?.sessionId,f=t.threadIds?.length?[...new Set([...a?.threadIds??[],...t.threadIds])]:a?.threadIds;n[o??s]={toolUseId:s,...o?{taskId:o}:{},...f?.length?{threadIds:f}:{},description:t.description&&(!a||t.phase===`started`||!a.description)?t.description:a?.description??t.description??``,taskType:t.taskType??a?.taskType,status:l,...u?{ambient:!0}:{},...d?{sessionId:d}:{},lastToolName:t.lastToolName??a?.lastToolName,lastDescription:t.lastDescription??a?.lastDescription,totalTokens:t.totalTokens??a?.totalTokens,toolUses:t.toolUses??a?.toolUses,durationMs:t.durationMs??a?.durationMs,startedAt:a?.startedAt??c,updatedAt:c}},async markRead(e){try{await ac(`/api/workspaces/${e}/mark-read`,{method:`POST`});let t=this.workspaces.findIndex(t=>t.id===e);t>=0&&(this.workspaces[t]={...this.workspaces[t],hasUnread:!1})}catch(e){console.error(`[workspace store] markRead failed:`,e)}},async purgeWorktree(e){try{let t=await J(`/api/workspaces/${e}/purge-worktree`,{method:`POST`}),n=await t.json();if(!t.ok)return{ok:!1,error:n.error??`HTTP ${t.status}`};let r=n.workspace;return r&&(this.updateWorkspaceFromEvent(e,{archivedAt:r.archivedAt,worktreePurgedAt:r.worktreePurgedAt,worktreePurgeRestoreData:r.worktreePurgeRestoreData}),r.archivedAt&&this.archivedLoaded&&(this.archivedWorkspaces.some(t=>t.id===e)||this.archivedWorkspaces.unshift(r),this.workspaces=this.workspaces.filter(t=>t.id!==e),this.selectedWorkspaceId===e&&(this.selectedWorkspaceId=null,this.tasks=[]))),{ok:!0,warnings:n.warnings??[]}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}},async dismissPrAttention(e,t){let n=this.prSnapshots[e];if(n)try{await ac(`/api/workspaces/${e}/dismiss-pr-attention`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:t,prUpdatedAt:n.updatedAt})});let r=t===`changes-requested`?{prChangesDismissedAt:n.updatedAt}:{prCiFailureDismissedAt:n.updatedAt};this.updateWorkspaceFromEvent(e,r)}catch(e){console.error(`[workspace store] dismissPrAttention failed:`,e)}},async restorePrAttention(e,t){try{await ac(`/api/workspaces/${e}/restore-pr-attention`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:t})});let n=t===`changes-requested`?{prChangesDismissedAt:null}:{prCiFailureDismissedAt:null};this.updateWorkspaceFromEvent(e,n)}catch(e){console.error(`[workspace store] restorePrAttention failed:`,e)}},queuedMessageKey(e,t){return`${e}:${t}`},getQueuedMessage(e,t){return t?this.queuedMessages[this.queuedMessageKey(e,t)]:void 0},queueMessage(e,t,n){let r=Ol(this);if(r)return r.queue(e,t,n);this.queuedMessages[this.queuedMessageKey(e,n)]={content:t,sessionId:n}},cancelQueuedMessage(e,t){let n=Ol(this);if(n)return n.cancel(e,t);t&&delete this.queuedMessages[this.queuedMessageKey(e,t)]},async flushQueuedMessage(e,t){let n=Ol(this);if(n)return n.flush(e,t);let r=this.getQueuedMessage(e,t);if(!r)return;if(this.autoLoopStates[e]?.auto_loop??this.workspaces.find(t=>t.id===e)?.autoLoop){let n=this.queuedMessageKey(e,t);if(this.autoLoopQueueTransfers[n])return;this.autoLoopQueueTransfers[n]=!0;try{await this.queueAutoLoopMessage(e,r.content),this.getQueuedMessage(e,t)?.content===r.content&&this.cancelQueuedMessage(e,t)}catch{}finally{delete this.autoLoopQueueTransfers[n]}return}let i=If();i.isCompacting(e)||(this.cancelQueuedMessage(e,t),i.sendChatMessage(e,r.content,t))},setActiveAgentSession(e,t){this.activeAgentSessionIds[e]=t,delete this.settledAgentSessionIds[e]},markAgentTurnSettled(e,t){this.activeAgentSessionIds[e]===t&&(this.settledAgentSessionIds[e]=t)},isAgentTurnSettled(e){let t=this.activeAgentSessionIds[e];return t!==void 0&&this.settledAgentSessionIds[e]===t},clearActiveAgentSession(e,t){this.activeAgentSessionIds[e]===t&&(delete this.activeAgentSessionIds[e],delete this.settledAgentSessionIds[e])},clearActiveAgentSessionOwner(e){delete this.activeAgentSessionIds[e],delete this.settledAgentSessionIds[e]},updateWorkspaceFromEvent(e,t){Au.set(e,(Au.get(e)??0)+1);let n=this.workspaces.findIndex(t=>t.id===e);if(n>=0&&(this.workspaces[n]={...this.workspaces[n],...t}),t.status!==void 0){if(iu().setCompacting(e,t.status===`compacting`),e in this.agentLivenessLoaded){let t={...this.agentLivenessLoaded};delete t[e],this.agentLivenessLoaded=t}e===this.selectedWorkspaceId&&this.fetchWorkspaceDetails(e)}if(t.status&&[`completed`,`idle`,`error`,`quota`].includes(t.status)){let t=this.activityFeeds[e];if(t)for(let e of t)e.meta?.pending&&(e.meta.pending=!1);let n=this.subagents[e];if(n)for(let[e,t]of Object.entries(n))t.status===`running`&&(n[e]={...t,status:`done`})}}}}),Vu=Cr(`session-handoff`,{state:()=>({current:{},versions:{},selectedTargets:{},selectedSources:{},followedHandoffs:{},loadErrors:{}}),getters:{isActive:e=>t=>[`stopping`,`generating`,`starting`].includes(e.current[t]?.state??``),isBlocking:e=>t=>cu(e.current[t])},actions:{apply(e,t=!1){let n=this.current[e.workspaceId];if(n&&Date.parse(n.updatedAt)>Date.parse(e.updatedAt))return;this.versions[e.workspaceId]=(this.versions[e.workspaceId]??0)+1,this.current[e.workspaceId]=e,this.loadErrors[e.workspaceId]=null,(t||this.isActive(e.workspaceId))&&(this.followedHandoffs[e.workspaceId]=e.id);let r=this.followedHandoffs[e.workspaceId]===e.id;cu(e)||delete this.followedHandoffs[e.workspaceId];let i=Z(),a=`${e.id}:${e.targetSessionId}:${e.state===`cancelled`?`cancelled`:`restored`}`;r&&[`failed`,`interrupted`,`cancelled`].includes(e.state)&&i.selectedWorkspaceId===e.workspaceId&&this.selectedSources[e.workspaceId]!==a&&(this.selectedSources[e.workspaceId]=a,i.fetchSessions(e.workspaceId,e.sourceSessionId)),r&&e.state===`completed`&&e.targetSessionId&&i.selectedWorkspaceId===e.workspaceId&&this.selectedTargets[e.workspaceId]!==e.id&&(this.selectedTargets[e.workspaceId]=e.id,i.fetchSessions(e.workspaceId,e.targetSessionId))},async refresh(e){let t=this.versions[e]??0;try{let{handoff:n}=await Y(`/api/workspaces/${e}/session-handoffs/current`);if((this.versions[e]??0)!==t)return;this.loadErrors[e]=null,n?this.apply(n):this.current[e]=null}catch(t){throw this.loadErrors[e]=t instanceof Error?t.message:String(t),t}},async start(e,t){let n=this.versions[e]??0,{handoff:r}=await Y(`/api/workspaces/${e}/session-handoffs`,{method:`POST`,body:t}),i=this.current[e];return this.apply((this.versions[e]??0)!==n&&i?.id===r.id?i:r,!0),r},async decide(e,t,n){let r=this.versions[e]??0,{handoff:i}=await Y(`/api/workspaces/${e}/session-handoffs/${t}/decision`,{method:`POST`,body:{action:n}}),a=this.current[e];return this.apply((this.versions[e]??0)!==r&&a?.id===i.id?a:i,!0),i}}}),Hu=`custom:`,Uu=RegExp(`^[A-Za-z0-9_-]{12}$`),Wu=[`.wav`,`.mp3`,`.ogg`,`.webm`],Gu=[...Object.values({".wav":`audio/wav`,".mp3":`audio/mpeg`,".ogg":`audio/ogg`,".webm":`audio/webm`}),...Wu].join(`,`),Ku=2097152;function qu(e){return`${Hu}${e}`}function Ju(e){return typeof e==`string`&&e.startsWith(`custom:`)&&Uu.test(e.slice(7))}function Yu(e){return Ju(e)?e.slice(7):``}function Xu(e){let t=/\.[^.\\/]+$/.exec(e)?.[0]?.toLowerCase()??``;return Wu.includes(t)?t:null}var Zu=`/sounds`,Qu=[{id:`neutral.wav`,labelKey:`settings.notificationSoundBasic`},{id:`ready.wav`,labelKey:`settings.notificationSoundReady`}],$u=`neutral.wav`,ed=`inherit`,td=[`audioPrCiFailedSound`,`audioPrCiRecoveredSound`,`audioPrChangesRequestedSound`,`audioPrApprovedSound`,`audioPrMergeConflictSound`,`audioPrReadyToMergeSound`,`audioPrMergedSound`],nd=[`audioPrCiFailedEnabled`,`audioPrCiFailedVolume`,`audioPrCiRecoveredEnabled`,`audioPrCiRecoveredVolume`,`audioPrChangesRequestedEnabled`,`audioPrChangesRequestedVolume`,`audioPrApprovedEnabled`,`audioPrApprovedVolume`,`audioPrMergeConflictEnabled`,`audioPrMergeConflictVolume`,`audioPrReadyToMergeEnabled`,`audioPrReadyToMergeVolume`,`audioPrMergedEnabled`,`audioPrMergedVolume`],rd={audioPrCiFailedSound:ed,audioPrCiRecoveredSound:ed,audioPrChangesRequestedSound:ed,audioPrApprovedSound:ed,audioPrMergeConflictSound:ed,audioPrReadyToMergeSound:ed,audioPrMergedSound:ed,audioPrCiFailedEnabled:!1,audioPrCiFailedVolume:1,audioPrCiRecoveredEnabled:!1,audioPrCiRecoveredVolume:1,audioPrChangesRequestedEnabled:!1,audioPrChangesRequestedVolume:1,audioPrApprovedEnabled:!1,audioPrApprovedVolume:1,audioPrMergeConflictEnabled:!1,audioPrMergeConflictVolume:1,audioPrReadyToMergeEnabled:!1,audioPrReadyToMergeVolume:1,audioPrMergedEnabled:!1,audioPrMergedVolume:1},id=new Map;function ad(e){let t=new Map;for(let n of e){let e=Ju(n)?n:qu(n);Ju(e)&&t.set(e,id.get(e)??sd(e))}id.clear();for(let[e,n]of t)id.set(e,n)}function od(e,t){id.has(e)&&id.set(e,t)}function sd(e){return`/api/sounds/${Yu(e)}/file`}function cd(e){return Ju(e)?id.has(e):Qu.some(t=>t.id===e)}function ld(e){return typeof e==`string`&&(Ju(e)||Qu.some(t=>t.id===e))}function ud(e){return ld(e)?e:$u}function dd(e){return e===`none`||e===`inherit`||ld(e)?e:ed}function fd(e){return e&&cd(e)?e:$u}function pd(e){if(e===`none`)return null;if(e!==`inherit`)return typeof e==`string`&&cd(e)?e:void 0}function md(e){let t=fd(e);return Ju(t)?id.get(t)??sd(t):`${Zu}/${t}`}var hd=`mod+shift+x`,gd=[`mod`,`ctrl`,`meta`,`alt`,`shift`],_d=new Set([`mod+w`,`mod+shift+w`,`ctrl+w`,`ctrl+shift+w`,`meta+w`,`meta+shift+w`]),vd=new Set([`control`,...gd]);function yd(e){return _d.has(e)}function bd(e){if(typeof e!=`string`||e.length===0||e!==e.toLowerCase()||yd(e))return null;let t=e.split(`+`);if(t.some(e=>e.length===0))return null;let n=t.at(-1);if(!n||!/^[a-z0-9][a-z0-9_-]*$/.test(n)||vd.has(n))return null;let r=t.slice(0,-1),i=new Set,a=-1;for(let e of r){let t=gd.indexOf(e);if(t<=a)return null;a=t,i.add(e)}return{modifiers:i,key:n}}var xd=new Set([`control`,`meta`,`alt`,`shift`]),Sd={" ":`space`,"+":`plus`,"-":`minus`,"=":`equal`,",":`comma`,".":`period`,"/":`slash`,"\\":`backslash`,";":`semicolon`,"'":`quote`,"[":`bracketleft`,"]":`bracketright`,"`":`backquote`};function Cd(e){let t=Sd[e]??e.toLowerCase();return/^[a-z0-9][a-z0-9_-]*$/.test(t)?t:null}function wd(e=globalThis.navigator?.platform??``){return/mac|iphone|ipad|ipod/i.test(e)?`mac`:`other`}function Td(e,t){if(e.key===`Escape`)return{status:`cancelled`};if(xd.has(e.key.toLowerCase()))return{status:`pending`};let n=Cd(e.key);if(!n)return{status:`pending`};let r=new Set;(t===`mac`?e.metaKey:e.ctrlKey)&&r.add(`mod`),t===`mac`&&e.ctrlKey&&r.add(`ctrl`),t===`other`&&e.metaKey&&r.add(`meta`),e.altKey&&r.add(`alt`),e.shiftKey&&r.add(`shift`);let i=[...gd.filter(e=>r.has(e)),n].join(`+`);return yd(i)?{status:`reserved`}:{status:`accepted`,shortcut:i}}function Ed(e,t,n){let r=bd(t),i=Cd(e.key);if(!r||!i||i!==r.key)return!1;let a=r.modifiers.has(`ctrl`)||n===`other`&&r.modifiers.has(`mod`),o=r.modifiers.has(`meta`)||n===`mac`&&r.modifiers.has(`mod`);return e.ctrlKey===a&&e.metaKey===o&&e.altKey===r.modifiers.has(`alt`)&&e.shiftKey===r.modifiers.has(`shift`)}function Dd(e){return{space:`Space`,arrowup:`↑`,arrowdown:`↓`,arrowleft:`←`,arrowright:`→`}[e]??e.toUpperCase()}function Od(e,t){let n=bd(e);return n?t===`mac`?`${[n.modifiers.has(`mod`)||n.modifiers.has(`meta`)?`⌘`:``,n.modifiers.has(`ctrl`)?`⌃`:``,n.modifiers.has(`alt`)?`⌥`:``,n.modifiers.has(`shift`)?`⇧`:``].join(``)}${Dd(n.key)}`:[n.modifiers.has(`mod`)||n.modifiers.has(`ctrl`)?`Ctrl`:``,n.modifiers.has(`meta`)?`Meta`:``,n.modifiers.has(`alt`)?`Alt`:``,n.modifiers.has(`shift`)?`Shift`:``,Dd(n.key)].filter(Boolean).join(`+`):e}var kd=`.worktrees`,Ad=[`commit`,`push`,`publish`],jd={commit:`manual`,push:`manual`,publish:`manual`};function Md(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.entries(e).every(([e,t])=>Ad.includes(e)&&(t===`manual`||t===`automatic`))}function Nd(...e){let t={...jd};for(let n of e)Md(n)&&Object.assign(t,n);return t}function Pd(e){return btoa(e).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}var Fd=Cr(`settings`,{state:()=>({global:{workflowPolicy:{...jd},memoryMode:`hybrid`,onboardingComplete:!1,defaultModelByEngine:{"claude-code":`claude-sonnet-5-5`,codex:`auto`},dangerouslySkipPermissions:!0,prPromptTemplate:``,reviewPromptTemplate:``,ciFixPromptTemplate:``,finalizationPrompt:``,notionInitialPromptTemplate:``,sentryInitialPromptTemplate:``,gitConventions:``,editorCommand:``,fileManagerCommand:``,terminalCommand:``,autoPurgeOnPrMerged:!1,autoLoopMaxRetries:5,agentWatchdogEnabled:!1,showProgressBars:!0,stopDevServersOnShutdown:!0,awaitingUserReminderMinutes:0,activityDigestEnabled:!0,wsEventsRetentionDays:0,wsEventsKeepPerWorkspace:0,browserNotifications:!0,audioNotifications:!1,audioQuestionNotifications:!1,audioWorkspaceCreatedNotifications:!1,audioAgentErrorNotifications:!1,audioNotificationSound:`neutral.wav`,audioQuestionSound:`inherit`,audioWorkspaceCreatedSound:`inherit`,audioAgentErrorSound:`inherit`,...rd,audioNotificationVolume:1,audioQuestionVolume:1,audioWorkspaceCreatedVolume:1,audioAgentErrorVolume:1,notionStatusProperty:``,notionInProgressStatus:``,notionAssigneeProperty:``,notionUserId:``,defaultPermissionModeByEngine:{"claude-code":`plan`,codex:`plan`},notionMcpKey:``,sentryMcpKey:``,bitbucketToken:``,bitbucketUsername:``,notionEnabled:!1,sentryEnabled:!1,showThinkingBlocks:!0,whipEnabled:!1,whipShortcut:hd,whipVolume:1,tags:[],branchPrefixes:[],setupScript:``,cleanupScript:``,cleanupScriptMode:`no-tasks`,cleanupScriptOnlyOnChanges:!1,archiveScript:``,changeSourceBranchScript:``,sessionEndedScript:``,shutdownScript:``,prMergedScript:``,autoLoopDisabledScript:``,worktreesPath:kd,worktreesPrefixByProject:!1,voiceEnabled:!1,voicePttKey:`alt`,voiceLanguage:`auto`,voiceModel:null,voiceCommandPath:``,voiceFfmpegPath:``,voiceTemperature:0,voicePrompt:``,voiceTranslateToEnglish:!1,voiceSuppressNonSpeechTokens:!0,flattenWorkspaceList:!1,skillSuite:`standard`,customReviewTemplate:``,customAutoLoopReviewGate:``,customAutoLoopGroomingIntro:``,customQaPromptTemplate:``,customBrainstormingInstruction:``},voiceModels:[],voiceModelsLoading:!1,voiceModelsDir:``,voiceRuntime:null,activeMcpServers:[],projects:[],loading:!1,loaded:!1,loadError:null,showVerboseSystemMessages:localStorage.getItem(`kobo:showVerboseSystemMessages`)===`true`}),getters:{getProjectByPath:e=>t=>e.projects.find(e=>e.path===t)??null,projectPaths:e=>e.projects.map(e=>e.path)},actions:{_assertLoaded(){if(!this.loaded)throw Error(`Settings were never loaded successfully — refusing to overwrite the stored configuration`)},async fetchSettings(){this.loading=!0;try{let e=await Y(`/api/settings`);this.global=e.global,this.projects=e.projects,this.loadError=null,this.loaded=!0}catch(e){this.loadError=e instanceof Error?e.message:String(e),this.loaded=!1,console.error(`[settings store] fetchSettings failed:`,e)}finally{this.loading=!1}},async fetchActiveMcpServers(){try{this.activeMcpServers=await Y(`/api/settings/mcp-servers`)}catch(e){console.error(`[settings store] fetchActiveMcpServers failed:`,e),this.activeMcpServers=[]}},async fetchGlobalDefaults(){return Y(`/api/settings/defaults`)},async previewRetention(e,t){return Y(`/api/settings/ws-events-retention-preview?days=${e}&keep=${t}`)},async updateGlobal(e){this._assertLoaded(),this.global=await Y(`/api/settings/global`,{method:`PUT`,body:e})},async upsertProject(e,t){this._assertLoaded();let n=await Y(`/api/settings/projects/${Pd(e)}`,{method:`PUT`,body:t}),r=this.projects.findIndex(t=>t.path===e);r>=0?this.projects[r]=n:this.projects.push(n)},toggleVerboseSystemMessages(){this.setVerboseSystemMessages(!this.showVerboseSystemMessages)},setVerboseSystemMessages(e){this.showVerboseSystemMessages=e,localStorage.setItem(`kobo:showVerboseSystemMessages`,String(e))},async deleteProject(e){this._assertLoaded(),await Y(`/api/settings/projects/${Pd(e)}`,{method:`DELETE`}),this.projects=this.projects.filter(t=>t.path!==e)},async fetchVoiceModels(){this.voiceModelsLoading=!0;try{let e=await Y(`/api/voice/models`);this.voiceModels=e.available,this.voiceModelsDir=e.modelsDir,this.global.voiceModel=e.activeModel}catch(e){console.error(`[settings store] fetchVoiceModels failed:`,e)}finally{this.voiceModelsLoading=!1}},async cancelVoiceModelDownload(e){try{await Y(`/api/voice/models/${encodeURIComponent(e)}/download`,{method:`DELETE`})}catch(e){if(!(e instanceof Ys)||e.status!==404)throw e}await this.fetchVoiceModels()},async fetchVoiceRuntime(){try{this.voiceRuntime=await Y(`/api/voice/runtime`)}catch(e){console.error(`[settings store] fetchVoiceRuntime failed:`,e)}},async downloadVoiceModel(e){await Y(`/api/voice/models/${encodeURIComponent(e)}/download`,{method:`POST`}),await this.fetchVoiceModels()},async deleteVoiceModel(e){await Y(`/api/voice/models/${encodeURIComponent(e)}`,{method:`DELETE`}),await this.fetchVoiceModels()}}});function Id(e,t){let n=e=>e.split(`.`).map(e=>Number.parseInt(e,10)||0),r=n(e),i=n(t),a=Math.max(r.length,i.length);for(let e=0;e<a;e++){let t=(r[e]??0)-(i[e]??0);if(t!==0)return t}return 0}var Ld=`kobo:dismissed-update-version`,Rd=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/,zd=e=>typeof e==`string`&&Rd.test(e),Bd=Cr(`update`,()=>{let e=m(null),t=m(null),n=m(localStorage.getItem(Ld)),r=m(null),i=m(null),a=m(`unknown`),o=null,s=j(()=>t.value&&e.value&&Id(t.value,e.value)>0&&t.value!==n.value?t.value:null);function c(n){if(!zd(n.currentVersion))return;let o=typeof n.lastAttemptAt==`string`&&Number.isFinite(Date.parse(n.lastAttemptAt))?n.lastAttemptAt:null;r.value&&(!o||Date.parse(o)<Date.parse(r.value))||(e.value=n.currentVersion,zd(n.latestVersion)&&(t.value=n.latestVersion),o&&(r.value=o),typeof n.lastSuccessAt==`string`&&(i.value=n.lastSuccessAt),(n.checkStatus===`success`||n.checkStatus===`failed`||n.checkStatus===`unknown`)&&(a.value=n.checkStatus))}function l(){return o||(o=(async()=>{try{let e=await J(`/api/changelog`);e.ok&&c(await e.json())}catch{}finally{o=null}})(),o)}function u(){let e=s.value;e&&(n.value=e,localStorage.setItem(Ld,e))}return{currentVersion:e,latestVersion:t,availableVersion:s,lastAttemptAt:r,lastSuccessAt:i,checkStatus:a,applySnapshot:c,refreshSnapshot:l,dismissUpdate:u}}),Vd=new Set([`output`,`complete`,`error`]);function Hd(e){if(!e.startsWith(`hook:`))return null;let t=e.slice(5),n=t.lastIndexOf(`:`);if(n<=0)return null;let r=t.slice(0,n),i=t.slice(n+1);return Vd.has(i)?{event:r,kind:i}:null}function Ud(e){return`hook:${e}`}function Wd(e){return e.startsWith(`hook:`)}var Gd=6e3,Kd={timeout:0,closeBtn:!0},qd=typeof window<`u`&&window.parent!==window&&new URLSearchParams(window.location.search).get(`pane`)===`1`;function Jd(e,t=window.location.pathname){return`${t}?pane=1#/workspace/${encodeURIComponent(e)}`}function Yd(e){let t=Number(e??50);return Number.isFinite(t)?Math.max(25,Math.min(75,t)):50}function Xd(e,t){return e&&e!==t?{left:e,right:t}:{left:t}}var Zd=null;function Qd(e,t){return t.name===`split`&&e.name===`split`&&e.fullPath===Zd}async function $d(e,t){let n={name:`split`,query:t},r=e.resolve(n).fullPath;if(!(e.currentRoute.value.fullPath===r||Zd)){Zd=r;try{await e.replace(n)}finally{Zd=null}}}function ef(e,t){return e||Object.keys(t).length>0}var tf=new Map,nf=[],rf=!1;function af(e){let t=md(e),n=tf.get(t);return n||(n=new Audio(t),tf.set(t,n)),n}function of(e,t){let n=new Audio(md(fd(e)));n.preload=`auto`,n.volume=t,n.play().catch(()=>{})}function sf(){qd||`Notification`in window&&Notification.permission==="default"&&Notification.requestPermission()}function cf(e){return typeof e!=`number`||!Number.isFinite(e)?1:Math.max(0,Math.min(1,e))}function lf(){let e=nf.shift();if(!e){rf=!1;return}rf=!0;let t=af(fd(e.soundId));t.volume=e.volume,t.currentTime=0;let n=!1,r=()=>{n||(n=!0,t.removeEventListener(`ended`,r),t.removeEventListener(`error`,r),lf())};t.addEventListener(`ended`,r,{once:!0}),t.addEventListener(`error`,r,{once:!0}),t.play().catch(r)}function uf(e,t){let n={soundId:fd(e),volume:cf(t)};if(document.visibilityState===`hidden`){of(n.soundId,n.volume);return}nf.push(n),rf||lf()}function df(e,t){let n=af(fd(e));n.volume=cf(t),n.currentTime=0,n.play().catch(()=>{})}function ff(e,t,n,r,i,a){if(qd)return;let o=Fd();if(!document.hasFocus()&&o.global.browserNotifications&&`Notification`in window&&Notification.permission===`granted`){let r=new Notification(e,{body:t,icon:`/favicon.ico`});n&&(r.onclick=()=>{window.focus(),window.location.hash=`#/workspace/${n}`,r.close()})}(a??o.global.audioNotifications)&&r!==null&&uf(r&&r.length>0?r:o.global.audioNotificationSound??`neutral.wav`,i??o.global.audioNotificationVolume)}function pf(e,t){let n=[{label:t.retryLabel,color:`white`,handler:t.onRetry}];t.detailsLabel&&t.onDetails&&n.push({label:t.detailsLabel,color:`white`,handler:t.onDetails}),n.push({label:t.dismissLabel,color:`grey-5`}),Xl.create({type:`negative`,position:`top`,multiLine:!0,message:e,timeout:0,actions:n})}function mf(e){return(typeof e==`string`?Array.from(e.replace(/[\p{Cc}\s]+/gu,` `).replace(/\p{Cs}/gu,`�`).trim()).slice(0,100).join(``):``)||`External MCP client`}function hf(e){if(!e||typeof e!=`object`)return;let t=e;if(!(t.kind!==`mcp`||t.transport!==`http`&&t.transport!==`stdio`))return{kind:`mcp`,clientName:mf(t.clientName),transport:t.transport}}var gf=new Map,_f=Cr(`devServer`,{state:()=>({statuses:{},logs:{}}),getters:{getStatus:e=>t=>e.statuses[t]??null},actions:{async fetchStatus(e){let t=(gf.get(e)??0)+1;gf.set(e,t);let n=this.statuses[e];try{let r=await Y(`/api/dev-server/${e}/status`);gf.get(e)===t&&this.statuses[e]===n&&(this.statuses[e]=r)}catch(e){console.error(`[dev-server store] fetchStatus failed:`,e)}},async startDevServer(e){try{let t=await J(`/api/dev-server/${e}/start`,{method:`POST`});if(!t.ok)throw await q(t);let n=await t.json();this.statuses[e]=n}catch(e){throw console.error(`[dev-server store] startDevServer failed:`,e),e}},async stopDevServer(e){try{let t=await J(`/api/dev-server/${e}/stop`,{method:`POST`});if(!t.ok)throw await q(t);let n=await t.json();this.statuses[e]=n}catch(e){throw console.error(`[dev-server store] stopDevServer failed:`,e),e}},async fetchLogs(e,t=200){try{let n=await J(`/api/dev-server/${e}/logs?tail=${t}`);if(!n.ok)throw await q(n);let r=await n.json();return this.logs[e]=r.logs,r.logs}catch(e){return console.error(`[dev-server store] fetchLogs failed:`,e),``}},updateFromWsEvent(e,t){this.statuses[e]=t}}});function vf(e,t){return JSON.stringify([e,t??``])}async function yf(e,t){let n=await J(e,t);if(!n.ok)throw await q(n);if(n.status!==204)return await n.json()}var bf=Cr(`memory`,()=>{let e=m(null),t=m({}),n=m({}),r=m([]),i=m({}),a=m({}),o=m({}),s=m({}),c=m({}),l=m({}),u=m({}),d=m({}),f=m({}),p=m({}),h=m({}),g=lu(),_=new Map,v=new Set;function y(e,t){return vf(e,t)}function b(e,n){return t.value[y(e,n)]}function x(e,t){return r.value.includes(y(e,t))}async function S(i,a,o=!1){let s=y(i,a);e.value=s;let c=g.begin();(!o||!t.value[s])&&(n.value[s]=!0);let l=a?`?sessionId=${encodeURIComponent(a)}`:``;try{let e=await yf(`/api/memory/workspaces/${encodeURIComponent(i)}/view${l}`,{signal:c});if(!g.isCurrent(c))return;t.value[s]=e,r.value=r.value.filter(e=>e!==s);for(let t of e.scopes)v.add(t.id)}catch(e){if(uu(e)||!g.isCurrent(c))return;throw e}finally{g.isCurrent(c)&&delete n.value[s]}}function C(e){let t=_.get(e);return t||(t=lu(),_.set(e,t)),t}async function w(r,i){let a=y(r,i),o=t.value[a];if(e.value!==a||!o?.entriesNextCursor||n.value[a])return;let s=g.begin();n.value[a]=!0;try{let t=await yf(`/api/memory/entries?${new URLSearchParams({workspaceId:r,cursor:o.entriesNextCursor})}`,{signal:s});if(!g.isCurrent(s)||e.value!==a)return;o.entries=[...new Map([...o.entries,...t.items].map(e=>[e.id,e])).values()],o.entriesNextCursor=t.nextCursor}catch(e){if(uu(e)||!g.isCurrent(s))return;throw e}finally{delete n.value[a]}}async function T(e,t=!1,n=!1){let r=e?`workspace:${e}`:`all`,a=C(`scopes:${r}`).begin();(!t||!i.value[r])&&(l.value[r]=!0);let o=i.value[r],s=new URLSearchParams;e&&s.set(`workspaceId`,e),n&&o?.nextCursor&&s.set(`cursor`,o.nextCursor);let c=s.size?`?${s}`:``;try{let e=await yf(`/api/memory/scopes${c}`,{signal:a});if(!C(`scopes:${r}`).isCurrent(a))return;let t=n&&o?[...o.items,...e.items]:e.items,s=[...new Map(t.map(e=>[e.id,e])).values()];i.value[r]={...e,items:s};for(let t of e.items)v.add(t.id)}catch(e){if(uu(e)||!C(`scopes:${r}`).isCurrent(a))return;throw e}finally{C(`scopes:${r}`).isCurrent(a)&&delete l.value[r]}}function E(e){return T(e,!0,!0)}function D(e){return!!i.value[e?`workspace:${e}`:`all`]?.nextCursor}function O(e){return i.value[e?`workspace:${e}`:`all`]?.items??[]}async function k(e,t=``,n=!1){let r=`${e}\u0000${t}`,i=C(`entries:${r}`).begin(),o=a.value[r];u.value[r]=!0;let s=n?o?.nextCursor:void 0,c=new URLSearchParams({scopeId:e});t&&c.set(`query`,t),s&&c.set(`cursor`,s);try{let t=await yf(`/api/memory/entries?${c}`,{signal:i});if(!C(`entries:${r}`).isCurrent(i))return;a.value[r]=n&&o?{...t,items:[...o.items,...t.items]}:t,v.add(e)}catch(e){if(uu(e)||!C(`entries:${r}`).isCurrent(i))return;throw e}finally{C(`entries:${r}`).isCurrent(i)&&delete u.value[r]}}function A(e,t=``){return a.value[`${e}\u0000${t}`]?.items??[]}function ee(e,t=``){return!!a.value[`${e}\u0000${t}`]?.nextCursor}async function te(e,t=!1){let n=C(`proposals:${e}`).begin();try{let t=await yf(`/api/memory/proposals?scopeId=${encodeURIComponent(e)}`,{signal:n});C(`proposals:${e}`).isCurrent(n)&&(o.value[e]=t.items)}catch(r){if(uu(r)||!C(`proposals:${e}`).isCurrent(n)||t)return;throw r}}function j(e){return o.value[e]??[]}function ne(e){return(e??Object.keys(o.value)).reduce((e,t)=>e+(o.value[t]?.length??0),0)}async function M(e,t=!1){let n=C(`operations:${e}`).begin(),r=t?c.value[e]:void 0,i=new URLSearchParams({scopeId:e,limit:`50`});r&&i.set(`afterCursor`,r),d.value[e]=!0;try{let r=await yf(`/api/memory/operations?${i}`,{signal:n});if(!C(`operations:${e}`).isCurrent(n))return;s.value[e]=t?[...s.value[e]??[],...r.items]:r.items,c.value[e]=r.nextCursor,v.add(e)}catch(t){if(uu(t)||!C(`operations:${e}`).isCurrent(n))return;throw t}finally{C(`operations:${e}`).isCurrent(n)&&delete d.value[e]}}function re(e){return s.value[e]??[]}function ie(e){return c.value[e]}async function ae(e,t=!1){let n=`workspace-operations:${e}`,r=C(n).begin(),i=t?p.value[e]:void 0,a=new URLSearchParams({workspaceId:e,limit:`50`});i&&a.set(`afterCursor`,i),h.value[e]=!0;try{let i=await yf(`/api/memory/operations?${a}`,{signal:r});if(!C(n).isCurrent(r))return;let o=[...t?f.value[e]??[]:[],...i.items];f.value[e]=[...new Map(o.map(e=>[e.id,e])).values()],p.value[e]=i.nextCursor}catch(e){if(uu(e)||!C(n).isCurrent(r))return;throw e}finally{C(n).isCurrent(r)&&delete h.value[e]}}function N(e){return f.value[e]??[]}function oe(e){return p.value[e]}function se(n){if(n.journalOnly){for(let e of v)e===n.scopeId&&M(e);for(let e of Object.keys(f.value)){let r=Object.entries(t.value).some(([t,r])=>{let[i]=JSON.parse(t);return i===e&&r.scopes.some(e=>e.id===n.scopeId)});(n.level===`global`||r)&&ae(e)}return}let l=e=>e.id===n.scopeId?{...e,revision:n.revision,generation:n.generation}:e;for(let e of Object.values(i.value))e.items=e.items.map(l);for(let[i,a]of Object.entries(t.value))if(a.scopes=a.scopes.map(l),n.level===`global`||a.scopes.some(e=>e.id===n.scopeId)){r.value.includes(i)||r.value.push(i);let t=JSON.parse(i);i===e.value&&S(t[0],t[1]||void 0,!0)}for(let e of Object.keys(f.value)){let r=Object.entries(t.value).some(([t,r])=>{let[i]=JSON.parse(t);return i===e&&r.scopes.some(e=>e.id===n.scopeId)});(n.level===`global`||r)&&ae(e)}for(let e of v)if(e===n.scopeId){for(let t of Object.keys(a.value))t.startsWith(`${e}\u0000`)&&delete a.value[t];delete o.value[e],delete s.value[e],delete c.value[e],k(e,``),te(e,!0),M(e)}}async function ce(){let t=e.value;if(t){let[e,n]=JSON.parse(t);await S(e,n||void 0,!0),f.value[e]&&await ae(e)}for(let e of v)await Promise.all([k(e,``),te(e,!0),M(e)])}function le(e){let n=[...Object.values(i.value).flatMap(e=>e.items),...Object.values(t.value).flatMap(e=>e.scopes)].find(t=>t.id===e);if(n){se({scopeId:e,level:n.level,revision:n.revision+1,generation:n.generation,operationId:0});return}for(let t of Object.keys(a.value))t.startsWith(`${e}\u0000`)&&delete a.value[t];delete o.value[e],delete s.value[e],delete c.value[e]}async function ue(e,t,n){let r=await yf(e,{method:t,...n===void 0?{}:{body:JSON.stringify(n),headers:{"Content-Type":`application/json`}}}),i=n&&typeof n==`object`?n:{},a=[i.scopeId,i.sourceScopeId,i.targetScopeId].filter(e=>typeof e==`string`),s=/\/proposals\/([^/]+)\//.exec(e)?.[1];if(s)for(let[e,t]of Object.entries(o.value))t.some(e=>e.id===decodeURIComponent(s))&&a.push(e);for(let e of new Set(a))le(e);return r}function de(e){return ue(`/api/memory/entries`,`POST`,e)}function fe(e,t){return ue(`/api/memory/entries/${encodeURIComponent(e.id)}`,`PATCH`,{scopeId:e.scopeId,expectedRevision:e.revision,...t})}function pe(e){return ue(`/api/memory/entries/${encodeURIComponent(e.id)}`,`DELETE`,{scopeId:e.scopeId,expectedRevision:e.revision})}function P(e,t){return ue(`/api/memory/proposals/${encodeURIComponent(e)}/${t}`,`POST`)}function me(e,t){return ue(`/api/memory/entries/${encodeURIComponent(e.id)}/promote`,`POST`,{sourceScopeId:e.scopeId,targetScopeId:t})}async function he(e){return yf(`/api/memory/scopes/${encodeURIComponent(e)}/clear-preview`)}function ge(e,t){return ue(`/api/memory/scopes/${encodeURIComponent(e)}/clear`,`POST`,{expectedRevision:t,scopeId:e})}return{activeWorkspaceKey:e,workspaceViews:t,loadingWorkspaceKeys:n,invalidatedWorkspaceKeys:r,scopesByKey:i,entriesByKey:a,proposalsByScope:o,operationsByScope:s,operationsCursors:c,loadingScopes:l,loadingEntries:u,loadingOperations:d,workspaceOperationsById:f,workspaceOperationsCursors:p,loadingWorkspaceOperations:h,workspaceView:b,isWorkspaceInvalidated:x,loadWorkspace:S,loadMoreWorkspaceEntries:w,loadScopes:T,loadMoreScopes:E,hasMoreScopes:D,scopesFor:O,loadEntries:k,entriesFor:A,hasMoreEntries:ee,loadProposals:te,proposalsFor:j,pendingProposalCount:ne,loadOperations:M,operationsFor:re,operationsCursor:ie,loadWorkspaceOperations:ae,workspaceOperationsFor:N,workspaceOperationsCursor:oe,invalidate:se,refreshVisibleData:ce,createEntry:de,updateEntry:fe,deleteEntry:pe,decideProposal:P,promoteEntry:me,previewClear:he,clearScope:ge}}),Q=Us.global.t,xf=new Zl,Sf=0,Cf={"pr:ci-failed":{soundKey:`audioPrCiFailedSound`,enabledKey:`audioPrCiFailedEnabled`,volumeKey:`audioPrCiFailedVolume`},"pr:ci-recovered":{soundKey:`audioPrCiRecoveredSound`,enabledKey:`audioPrCiRecoveredEnabled`,volumeKey:`audioPrCiRecoveredVolume`},"pr:changes-requested":{soundKey:`audioPrChangesRequestedSound`,enabledKey:`audioPrChangesRequestedEnabled`,volumeKey:`audioPrChangesRequestedVolume`},"pr:approved":{soundKey:`audioPrApprovedSound`,enabledKey:`audioPrApprovedEnabled`,volumeKey:`audioPrApprovedVolume`},"pr:merge-conflict":{soundKey:`audioPrMergeConflictSound`,enabledKey:`audioPrMergeConflictEnabled`,volumeKey:`audioPrMergeConflictVolume`},"pr:ready-to-merge":{soundKey:`audioPrReadyToMergeSound`,enabledKey:`audioPrReadyToMergeEnabled`,volumeKey:`audioPrReadyToMergeVolume`},"pr:merged":{soundKey:`audioPrMergedSound`,enabledKey:`audioPrMergedEnabled`,volumeKey:`audioPrMergedVolume`}};function wf(e,t,n){let r=Fd().global,i=Cf[n];ff(e,void 0,t,pd(r[i.soundKey]),Number(r[i.volumeKey]),!!r[i.enabledKey])}function Tf(e,t){let n=[];return t&&n.push({label:Q(`pr.openPr`),color:`white`,noDismiss:!0,handler:()=>window.open(t,`_blank`)}),n.push({label:Q(`pr.openWorkspace`),color:`white`,noDismiss:!0,handler:()=>{window.location.hash=`#/workspace/${e}`}}),n.push({label:Q(`pr.dismiss`),color:`white`}),n}var Ef=null,Df=null,Of=0,kf=!1,Af=!1,jf=!1;function Mf(e){jf=e}function Nf(e,t,n){if(t.kind!==`session:started`)return;let r=Z();if(n){r.setActiveAgentSession(e,n);let t=r.peekPending(e);t&&t.agentSessionId===n&&r.dequeuePending(e)}let i=r.workspaces.find(t=>t.id===e);i&&(i.status===`completed`||i.status===`idle`||i.status===`error`||i.status===`quota`)&&r.updateWorkspaceFromEvent(e,{status:`executing`}),!jf&&n&&r.selectedWorkspaceId===e&&r.selectedSessionId!==n&&r.fetchSessions(e,n).catch(e=>{console.error(`[websocket] fetchSessions on session:started failed:`,e)})}function Pf(e,t){let n=Z();if(t.kind===`tool:call`&&t.name===`TodoWrite`){let r=t.input?.todos;return Array.isArray(r)&&n.updateAgentTodos(e,r.map(e=>({content:typeof e.content==`string`?e.content:``,status:typeof e.status==`string`?e.status:`pending`,activeForm:typeof e.activeForm==`string`?e.activeForm:void 0}))),!0}if(t.kind===`tool:call`&&t.name===`TaskCreate`){let r=t.input??{};return n.agentTaskCreate(e,t.toolCallId,{subject:typeof r.subject==`string`?r.subject:void 0,description:typeof r.description==`string`?r.description:void 0,activeForm:typeof r.activeForm==`string`?r.activeForm:void 0}),!0}if(t.kind===`tool:result`&&typeof t.output==`string`){let r=t.output.match(/^Task #(\d+) created successfully/);if(r)return n.agentTaskSetNumber(e,t.toolCallId,Number(r[1])),!0}if(t.kind===`tool:call`&&t.name===`TaskUpdate`){let r=t.input??{},i=r.task_id??r.taskId??r.id,a=typeof i==`number`?i:typeof i==`string`?Number(i):NaN;return Number.isFinite(a)&&n.agentTaskUpdate(e,a,{status:typeof r.status==`string`?r.status:void 0,content:typeof r.subject==`string`?r.subject:void 0,activeForm:typeof r.activeForm==`string`?r.activeForm:void 0}),!0}return!1}function Ff(e,t,n,r,i){let a=iu(),o=Z().activeAgentSessionIds[e],s=!i||!o||i===o;if(t.kind===`session:compacting`){!jf&&s&&a.setCompacting(e,t.active);return}a.append(e,t,n,r,i,!jf),!jf&&s&&(t.kind===`session:compacted`||t.kind===`message:text`||t.kind===`tool:call`)&&a.setCompacting(e,!1),Nf(e,t,i??void 0);let c=Z();if(t.kind===`session:user-input-requested`){if(t.requestKind===`question`?c.enqueuePending(e,{kind:`question`,agentSessionId:i??null,toolCallId:t.toolCallId,toolName:t.toolName,input:t.payload}):c.enqueuePending(e,{kind:`permission`,agentSessionId:i??null,toolCallId:t.toolCallId,toolName:t.toolName,toolInput:t.payload}),If().isCompacting(e)||c.updateWorkspaceFromEvent(e,{status:`awaiting-user`}),!jf){let n=c.workspaces.find(t=>t.id===e)?.name??``,r=t.requestKind===`question`?Q(`notification.agentQuestion`,{name:n}):Q(`notification.agentPermissionRequest`,{name:n}),i=Fd().global;ff(r,void 0,e,t.requestKind===`question`?i.audioQuestionSound:void 0,t.requestKind===`question`?i.audioQuestionVolume:void 0,i.audioQuestionNotifications)}return}if(t.kind===`subagent:progress`){c.upsertSubagent(e,{toolUseId:t.toolCallId,threadIds:t.threadIds,taskId:t.taskId,sessionId:i,status:t.status,phase:t.phase,ambient:t.ambient,description:t.description,taskType:t.taskType,lastToolName:t.lastToolName,totalTokens:t.totalTokens,toolUses:t.toolUses,durationMs:t.durationMs});return}if(!Pf(e,t)){if(t.kind===`tool:call`&&t.name===`Bash`){let n=t.input,r=`${n?.command??``} ${n?.description??``}`;/\bgit\b|commit|push|pull|merge|rebase|checkout|branch/i.test(r)&&c.triggerGitRefresh(),/\bgit\s+branch\s+-m\b/i.test(r)&&setTimeout(()=>{c.resyncWorkspaceBranch(e).catch(e=>{console.error(`[websocket] Branch resync failed:`,e)})},2500),/\bgh\s+pr\s+create\b/i.test(r)&&setTimeout(()=>c.triggerGitRefresh(),3e3)}if(t.kind!==`session:started`){if(t.kind===`turn:completed`){i&&c.markAgentTurnSettled(e,i);return}if(t.kind===`session:ended`){i&&c.clearPendingForSession(e,i);let n=c.activeAgentSessionIds[e];if(t.superseded===!0||typeof i==`string`&&i.length>0&&n!==void 0&&i!==n){Ol(c)||c.cancelQueuedMessage(e,i),i&&(c.clearActiveAgentSession(e,i),c.finalizeRunningSubagents(e,i));return}jf||a.setCompacting(e,!1),i?c.clearActiveAgentSession(e,i):c.clearActiveAgentSessionOwner(e);let r=c.workspaces.find(t=>t.id===e)?.status===`quota`?`quota`:t.reason===`completed`?`completed`:t.reason===`error`?`error`:`idle`;c.updateWorkspaceFromEvent(e,{status:r}),i&&t.reason===`completed`&&!Ol(c)&&c.flushQueuedMessage(e,i),c.finalizeRunningSubagents(e),c.fetchWorkspaces(),!jf&&t.reason!==`killed`&&t.reason!==`error`&&c.autoLoopStates[e]?.auto_loop!==!0&&ff(Q(`notification.agentFinished`,{name:c.workspaces.find(t=>t.id===e)?.name??``}),void 0,e);return}if(t.kind===`error`&&(t.category===`quota`&&(c.updateWorkspaceFromEvent(e,{status:`quota`}),c.fetchWorkspaces()),!jf)){let t=Fd().global;ff(Q(`notification.agentError`,{name:c.workspaces.find(t=>t.id===e)?.name??``}),void 0,e,t.audioAgentErrorSound,t.audioAgentErrorVolume,t.audioAgentErrorNotifications)}}}}var If=Cr(`websocket`,{state:()=>({connected:!1,reconnecting:!1,reconnectAttempt:0,lastEventId:null,pendingSyncRequests:[],_replaying:!1,_drainInProgress:!1,_refreshAfterSync:!1,_workspacesToRefreshAfterDrain:new Set}),actions:{connect(){if(Ef)return;if(kf=!0,Af||(Af=!0,window.addEventListener(`online`,()=>{kf&&this.connect()}),window.addEventListener(`offline`,()=>{this.connected=!1,this.reconnecting=kf,this.pendingSyncRequests=[],xf.disconnect(Q(`network.login.unreachable`));let e=Ef;Ef=null,e?.close(),Df&&=(clearTimeout(Df),null)})),!navigator.onLine){this.connected=!1,this.reconnecting=!0,this.pendingSyncRequests=[];return}let e=bl(`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}/ws`,_l()),t=new WebSocket(e);Ef=t,t.addEventListener(`open`,()=>{if(Ef!==t)return;this.connected=!0,Bd().refreshSnapshot(),this.reconnecting=!1,Of=0,this.reconnectAttempt=0;let e=Z().workspaces.map(e=>e.id);for(let t of e)this._send({type:`subscribe`,payload:{workspaceId:t}});bf().refreshVisibleData().catch(e=>{console.error(`[websocket] memory refresh after reconnect failed:`,e)}),this._refreshAfterSync=!0,this.lastEventId?this._send({type:`sync:request`,payload:{lastEventId:this.lastEventId,workspaceIds:e}}):(this._refreshAfterSync=!1,this.refreshLiveState())}),t.addEventListener(`message`,e=>{if(Ef===t)try{let t=JSON.parse(e.data);this._routeMessage(t)}catch{}}),t.addEventListener(`close`,()=>{Ef===t&&(xf.disconnect(Q(`network.login.unreachable`)),this.connected=!1,this.pendingSyncRequests=[],Ef=null,kf&&this._scheduleReconnect())}),t.addEventListener(`error`,()=>{})},async refreshLiveState(){let e=Z(),t=new Set(e.workspaces.map(e=>e.id));if(await e.fetchWorkspacesInfo(),!this.connected)return;for(let n of e.workspaces)t.has(n.id)||(this._refreshAfterSync=!0,this.subscribe(n.id));let n=_f(),r=new Set(Object.keys(n.statuses));e.selectedWorkspaceId&&r.add(e.selectedWorkspaceId);let i=new Set(Object.keys(e.autoLoopMessages));e.selectedWorkspaceId&&i.add(e.selectedWorkspaceId);let a=Vu(),o=new Set(Object.keys(a.current));e.selectedWorkspaceId&&o.add(e.selectedWorkspaceId),await Promise.allSettled([e.fetchAutoLoopStates(),su().refresh(),au().refreshKnown(),...[...o].map(e=>a.refresh(e)),...[...i].map(t=>e.fetchAutoLoopMessages(t)),...[...r].map(e=>n.fetchStatus(e))])},disconnect(){xf.disconnect(Q(`network.login.unreachable`)),kf=!1,this.pendingSyncRequests=[],Df&&=(clearTimeout(Df),null),Ef&&=(Ef.close(),null),this.connected=!1,this.reconnecting=!1,this.reconnectAttempt=0},subscribe(e){this._drainInProgress&&this._workspacesToRefreshAfterDrain.add(e),this._send({type:`subscribe`,payload:{workspaceId:e}}),this._send({type:`sync:request`,payload:{workspaceIds:[e]}})},unsubscribe(e){this._send({type:`unsubscribe`,payload:{workspaceId:e}})},subscribeChannel(e){this._send({type:`subscribe`,payload:{workspaceId:e}})},isCompacting(e){let t=Z();return(t.workspaces.find(t=>t.id===e)??t.archivedWorkspaces.find(t=>t.id===e))?.status===`compacting`||iu().isCompacting(e)},sendChatMessage(e,t,n,r,i=!1,a){if(this.isCompacting(e)||!this._send({type:`chat:message`,payload:{workspaceId:e,content:t,sessionId:n,agentPermissionModeOverride:r,force:i,clientMessageId:a}}))return!1;let o=Z(),s=o.workspaces.find(t=>t.id===e);return s&&(s.status===`completed`||s.status===`idle`||s.status===`error`||s.status===`quota`)&&o.updateWorkspaceFromEvent(e,{status:`executing`}),!0},sendChatMessageConfirmed(e,t,n){let r=`${Array.from(crypto.getRandomValues(new Uint32Array(4)),e=>e.toString(16)).join(`-`)}-${++Sf}`,i=xf.wait(e,r,Q(`network.login.unreachable`));return this.sendChatMessage(e,t,n,void 0,!1,r)||xf.settle(e,r,Error(Q(`network.login.unreachable`))),i},_send(e){if(Ef&&Ef.readyState===WebSocket.OPEN&&navigator.onLine){try{Ef.send(JSON.stringify(e))}catch{return!1}if(e.type===`sync:request`){let t=e.payload;this.pendingSyncRequests.push([...t?.workspaceIds??Z().workspaces.map(e=>e.id)])}return!0}return!1},isSyncPending(e){return this.pendingSyncRequests.some(t=>t.includes(e))},isConnected(){return Ef!==null&&Ef.readyState===WebSocket.OPEN},_scheduleReconnect(){if(Df)return;if(!kf||!navigator.onLine){this.reconnecting=kf;return}let e=Math.min(1e3*2**Of,3e4),t=Math.round(e*(.8+Math.random()*.4));Of++,this.reconnecting=!0,this.reconnectAttempt=Of,Of===4&&_l()&&Sl(),Df=setTimeout(()=>{Df=null,this.connect()},t)},_routeMessage(e){let t=Z();e.replayable!==!1&&e.id?this.lastEventId=e.id:e.replayable!==!1&&e.eventId&&(this.lastEventId=e.eventId);let n=e.payload??{},r=e.workspaceId??n.workspaceId??``,i=Hd(e.type);if(i){let n=Ud(i.event),a=e.createdAt??new Date().toISOString(),o=Q(`chat.hookScript`,{event:i.event}),s=i.kind===`output`?e.payload?.text??``:i.kind===`complete`?e.payload?.hadOutput===!1?Q(`chat.scriptDone`):Q(`chat.scriptComplete`,{phase:o}):Q(`chat.scriptError`,{phase:o,message:e.payload?.message??Q(`chat.unknownError`)});t.addActivityItem(r,{id:e.id??`${n}-${i.kind}-${Date.now()}`,type:`text`,content:s,timestamp:a,meta:{sender:n}});return}switch(e.type){case`memory:changed`:{let e=n.level;typeof n.scopeId==`string`&&(e===`global`||e===`project`||e===`workspace`)&&typeof n.revision==`number`&&typeof n.generation==`number`&&typeof n.operationId==`number`&&bf().invalidate({scopeId:n.scopeId,level:e,revision:n.revision,generation:n.generation,operationId:n.operationId,...n.journalOnly===!0?{journalOnly:!0}:{}});break}case`progress:changed`:if(!e.workspaceId||!e.sessionId||this._replaying||n.workspaceId!==e.workspaceId||n.sessionId!==e.sessionId)break;typeof n.id==`string`&&typeof n.revision==`number`&&su().apply(n);break;case`workspace:handoff`:{if(!r||this._replaying)break;let e=n.handoff;e?.workspaceId===r&&typeof e.id==`string`&&typeof e.state==`string`&&Vu().apply(e);break}case`kobo:update-checked`:Bd().applySnapshot(n);break;case`workspace:configuration`:if(!r||this._replaying||typeof n.engine!=`string`||typeof n.model!=`string`||typeof n.reasoningEffort!=`string`||![`plan`,`bypass`,`strict`,`interactive`].includes(n.agentPermissionMode))break;t.updateWorkspaceFromEvent(r,{engine:n.engine,model:n.model,reasoningEffort:n.reasoningEffort,agentPermissionMode:n.agentPermissionMode});break;case`workspace:status`:{if(!r||this._replaying||typeof n.status!=`string`)break;let e=t.activeAgentSessionIds[r];if(e&&typeof n.sessionId==`string`&&e!==n.sessionId)break;t.updateWorkspaceFromEvent(r,{status:n.status});break}case`chat:accepted`:{if(typeof n.clientMessageId==`string`){r&&xf.settle(r,n.clientMessageId);break}let e=typeof n.sessionId==`string`?n.sessionId:void 0;r&&e&&t.cancelQueuedMessage(r,e);break}case`chat:rejected`:{if(typeof n.clientMessageId==`string`){r&&xf.settle(r,n.clientMessageId,Error(typeof n.message==`string`?n.message:Q(`network.login.unreachable`)));break}let e=typeof n.sessionId==`string`?n.sessionId:void 0,i=typeof n.content==`string`?n.content:void 0,a=typeof n.message==`string`?n.message:Q(`network.login.unreachable`);if(r&&i){let n=(t.activityFeeds[r]??[]).find(e=>e.meta?.sender===`user`&&e.meta?.pending&&e.content===i);n&&t.removeActivityItem(r,n.id),e&&t.queueMessage(r,i,e)}Xl.create({type:`negative`,message:a,position:`top`,timeout:0});break}case`agent:event`:{if(!r)break;let t=e.createdAt;Ff(r,n,t,e.id??e.eventId,e.sessionId??null);break}case`agent:progress`:n.tasks&&Array.isArray(n.tasks)&&(t.tasks=n.tasks);break;case`user:message`:if(r&&typeof n.clientMessageId==`string`&&xf.settle(r,n.clientMessageId),r&&n.content){let i=n.content,a=n.sender??`user`,o=hf(n.source),s=e.sessionId,c=e.id??e.eventId??`user-${Date.now()}`,l=typeof e.createdAt==`string`?e.createdAt:void 0,u=l??new Date().toISOString(),d=t.activityFeeds[r]??[];if(!o&&a===`user`&&d.some(e=>e.meta?.sender===`user`&&e.content===i&&e.meta?.pending)){let e=d.findIndex(e=>e.meta?.sender===`user`&&e.content===i&&e.meta?.pending);e>=0&&(d[e]={...d[e],id:c,sessionId:s,...l?{timestamp:l}:{}})}else t.addActivityItem(r,{id:c,type:`text`,content:i,timestamp:u,sessionId:s,meta:{sender:a,...o?{source:o}:{}}})}break;case`sync:empty`:case`sync:error`:this.pendingSyncRequests.shift();break;case`sync:response`:{let e=this.pendingSyncRequests[0];this._replaying=!0,Mf(!0);try{let e=n.events??[],r=n.mode===`delta`?`delta`:`snapshot`,i=new Map;for(let t of e)if(t.type!==`sync:response`){if(t.type===`agent:event`&&t.workspaceId){let e=i.get(t.workspaceId)??{events:[],timestamps:[],sessionIds:[],eventIds:[],oldestId:void 0};e.events.push(t.payload),e.timestamps.push(t.createdAt),e.sessionIds.push(t.sessionId??null),e.eventIds.push(t.id??null),e.oldestId||=t.id,i.set(t.workspaceId,e);continue}this._routeMessage(t)}if(i.size>0){let e=iu();for(let[t,{events:n,timestamps:a,sessionIds:o,eventIds:s,oldestId:c}]of i){let i=r===`delta`?e.merge(t,n,a,{sessionIds:o,eventIds:s}):n.map((e,t)=>t);r===`snapshot`&&e.reset(t,n,a,{oldestId:c,hasMoreOlder:!0,sessionIds:o,eventIds:s}),r===`snapshot`&&Z().updateAgentTodos(t,[]);for(let e of i){let r=n[e];if(!r)continue;let i=o[e]??null;if(r.kind===`session:user-input-requested`){r.requestKind===`question`?Z().enqueuePending(t,{kind:`question`,agentSessionId:i,toolCallId:r.toolCallId,toolName:r.toolName,input:r.payload}):Z().enqueuePending(t,{kind:`permission`,agentSessionId:i,toolCallId:r.toolCallId,toolName:r.toolName,toolInput:r.payload});continue}if(r.kind===`session:started`){if(i){let e=Z();e.setActiveAgentSession(t,i);let n=e.peekPending(t);n&&n.agentSessionId===i&&e.dequeuePending(t)}continue}if(r.kind===`session:ended`){let e=Z();i?(e.clearPendingForSession(t,i),Ol(e)||e.cancelQueuedMessage(t,i),e.clearActiveAgentSession(t,i),e.finalizeRunningSubagents(t,i)):r.superseded!==!0&&(e.clearActiveAgentSessionOwner(t),e.finalizeRunningSubagents(t));continue}if(r.kind===`subagent:progress`){Z().upsertSubagent(t,{toolUseId:r.toolCallId,threadIds:r.threadIds,taskId:r.taskId,sessionId:i,status:r.status,phase:r.phase,ambient:r.ambient,description:r.description,taskType:r.taskType,lastToolName:r.lastToolName,totalTokens:r.totalTokens,toolUses:r.toolUses,durationMs:r.durationMs});continue}Pf(t,r)}}}let a=this.lastEventId,o=e.findLast(e=>e.replayable!==!1&&typeof e.id==`string`);if(o&&(this.lastEventId=o.id),n.truncated===!0&&o&&this.lastEventId!==a)this._drainInProgress=!0,this._send({type:`sync:request`,payload:{lastEventId:this.lastEventId,workspaceIds:t.workspaces.map(e=>e.id)}});else if(this._drainInProgress&&(this._drainInProgress=!1,this._workspacesToRefreshAfterDrain.size>0)){let e=[...this._workspacesToRefreshAfterDrain];this._workspacesToRefreshAfterDrain.clear(),this._send({type:`sync:request`,payload:{lastEventId:this.lastEventId,workspaceIds:e}})}}finally{if(this._replaying=!1,Mf(!1),e){let t=this.pendingSyncRequests.indexOf(e);t!==-1&&this.pendingSyncRequests.splice(t,1)}this._refreshAfterSync&&this.pendingSyncRequests.length===0&&(this._refreshAfterSync=!1,this.refreshLiveState())}break}case`usage:snapshot`:{let e=n;e.providerId&&e.snapshot&&t.applyUsageSnapshot({providerId:e.providerId,snapshot:e.snapshot});break}case`devserver:status`:{let e=_f();r&&e.updateFromWsEvent(r,n);break}case`task:updated`:r&&t.fetchWorkspaceDetails(r);break;case`setup:output`:t.addActivityItem(r,{id:e.id??`setup-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`setup:complete`:t.addActivityItem(r,{id:e.id??`setup-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?Q(`chat.scriptDone`):Q(`chat.scriptComplete`,{phase:`setup`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`setup:error`:t.addActivityItem(r,{id:e.id??`setup-error-${Date.now()}`,type:`text`,content:Q(`chat.scriptError`,{phase:`setup`,message:e.payload?.message??Q(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`setup`}});break;case`cleanup:output`:t.addActivityItem(r,{id:e.id??`cleanup-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`cleanup:complete`:t.addActivityItem(r,{id:e.id??`cleanup-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?Q(`chat.scriptDone`):Q(`chat.scriptComplete`,{phase:`cleanup`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`cleanup:error`:t.addActivityItem(r,{id:e.id??`cleanup-error-${Date.now()}`,type:`text`,content:Q(`chat.scriptError`,{phase:`cleanup`,message:e.payload?.message??Q(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`cleanup`}});break;case`archive:output`:t.addActivityItem(r,{id:e.id??`archive-${Date.now()}`,type:`text`,content:e.payload?.text??``,timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`archive:complete`:t.addActivityItem(r,{id:e.id??`archive-complete-${Date.now()}`,type:`text`,content:e.payload?.hadOutput===!1?Q(`chat.scriptDone`):Q(`chat.scriptComplete`,{phase:`archive`}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`archive:error`:t.addActivityItem(r,{id:e.id??`archive-error-${Date.now()}`,type:`text`,content:Q(`chat.scriptError`,{phase:`archive`,message:e.payload?.message??Q(`chat.unknownError`)}),timestamp:e.createdAt??new Date().toISOString(),meta:{sender:`archive`}});break;case`workspace:unread`:if(r){let e=n.hasUnread??!1;t.updateWorkspaceFromEvent(r,{hasUnread:e})}break;case`workspace:awaiting-reminder`:{let e=n;if(!e.workspaceId)break;let t=Fd().global,r=Q(`notification.awaitingReminder`,{name:e.workspaceName??``,minutes:e.waitingMinutes??0});if(ff(r,void 0,e.workspaceId,t.audioQuestionSound,t.audioQuestionVolume,t.audioQuestionNotifications),document.hasFocus()){let t=e.workspaceId;Xl.create({type:`info`,position:`top`,timeout:1e4,message:r,actions:[{label:Q(`common.open`),color:`white`,handler:()=>{window.location.hash=`#/workspace/${t}`}}]})}break}case`workspace:pr-attention-dismissed`:if(r){let e=n.kind,i=n.prUpdatedAt;e&&i&&t.updateWorkspaceFromEvent(r,e===`changes-requested`?{prChangesDismissedAt:i}:{prCiFailureDismissedAt:i})}break;case`workspace:description-updated`:{if(!r)break;let e=n.description??null;t.updateWorkspaceFromEvent(r,{description:e});break}case`workspace:agent-description-updated`:{if(!r)break;let e=n.agentDescription??null;t.updateWorkspaceFromEvent(r,{agentDescription:e});break}case`cron:created`:{if(!r)break;let e=n.cron;if(!e)break;let i=t.crons[r]??[];i.some(t=>t.id===e.id)||(t.crons[r]=[...i,e]);let a=t.autoLoopStates[r];a&&(a.crons_count=t.crons[r].length);break}case`cron:fired`:{if(!r)break;let e=n,i=t.crons[r]??[];t.crons[r]=i.map(t=>t.id===e.id?{...t,nextFireAt:e.nextFireAt??t.nextFireAt,lastFiredAt:e.lastFiredAt??new Date().toISOString()}:t);break}case`cron:cancelled`:{if(!r)break;let e=n.id;if(!e)break;t.crons[r]=(t.crons[r]??[]).filter(t=>t.id!==e);let i=t.autoLoopStates[r];i&&(i.crons_count=t.crons[r].length);break}case`cron:updated`:{if(!r)break;let e=n.crons;if(Array.isArray(e)){t.crons[r]=e;let n=t.autoLoopStates[r];n&&(n.crons_count=e.length)}break}case`workspace:archived`:case`workspace:unarchived`:case`workspace:worktree-restored`:case`workspace:worktree-purged`:{let i=n.workspace;e.type===`workspace:worktree-restored`&&i&&i.id===r?t.applyRestoredWorkspace(i):t.invalidateWorkspaceLifecycleReads(r),(e.type===`workspace:archived`||e.type===`workspace:worktree-purged`)&&r&&nu(r),e.type===`workspace:archived`&&r&&t.selectedWorkspaceId===r&&(t.selectedWorkspaceId=null),t.fetchWorkspaces(),t.archivedLoaded&&t.fetchArchivedWorkspaces();break}case`workspace:deleted`:r&&au().forget(r),t.invalidateWorkspaceLifecycleReads(r),r&&nu(r),r&&t.selectedWorkspaceId===r&&(t.selectedWorkspaceId=null),t.fetchWorkspaces(),t.archivedLoaded&&t.fetchArchivedWorkspaces();break;case`pr:base-changed`:{if(!r)break;let e=n,i=e.oldBase??``,a=e.newBase??``;t.updateWorkspaceFromEvent(r,{sourceBranch:a}),Xl.create({type:`info`,position:`top`,timeout:Gd,message:Q(`pr.baseChanged`,{oldBase:i,newBase:a}),actions:Tf(r,e.prUrl)}),ff(Q(`pr.baseChanged`,{oldBase:i,newBase:a}),void 0,r);break}case`pr:ci-failed`:case`pr:ci-recovered`:case`pr:merge-conflict`:case`pr:merged`:{if(!r)break;let i=e.type,a=n,o=a.prNumber??0,s={"pr:ci-failed":{key:`toast.prCiFailed`,type:`negative`,timeout:0},"pr:ci-recovered":{key:`toast.prCiRecovered`,type:`positive`,timeout:5e3},"pr:merge-conflict":{key:`toast.prMergeConflict`,type:`warning`,timeout:Gd},"pr:merged":{key:`toast.prMerged`,type:`positive`,timeout:5e3}}[i],c=Q(s.key,{n:o});Xl.create({type:s.type,position:`top`,timeout:s.timeout,message:c,actions:Tf(r,a.prUrl)}),wf(c,r,i),i!==`pr:merged`&&t.refreshPrSnapshot(r);break}case`pr:changes-requested`:{if(!r)break;let e=n,i=Q(`toast.prChangesRequested`,{n:e.prNumber??0});Xl.create({type:`warning`,position:`top`,timeout:Gd,message:i,actions:Tf(r,e.prUrl)}),wf(i,r,`pr:changes-requested`),t.refreshPrSnapshot(r);break}case`pr:approved`:{if(!r)break;let e=n,i=Q(`toast.prApproved`,{n:e.prNumber??0});Xl.create({type:`positive`,position:`top`,timeout:5e3,message:i,actions:Tf(r,e.prUrl)}),wf(i,r,`pr:approved`),t.refreshPrSnapshot(r);break}case`pr:ready-to-merge`:{if(!r)break;let e=n,i=Q(`toast.prReadyToMerge`,{n:e.prNumber??0});Xl.create({type:`positive`,position:`top`,timeout:5e3,message:i,actions:Tf(r,e.prUrl)}),wf(i,r,`pr:ready-to-merge`),t.refreshPrSnapshot(r);break}case`wakeup:scheduled`:if(r){let e=n;typeof e.targetAt==`string`&&t.setPendingWakeup(r,{targetAt:e.targetAt,reason:e.reason})}break;case`wakeup:cancelled`:case`wakeup:fired`:case`wakeup:skipped`:r&&t.clearPendingWakeup(r);break;case`agent:quota-recovered`:r&&(t.clearPendingQuotaBackoff(r),t.updateWorkspaceFromEvent(r,{status:`executing`}));break;case`agent:quota-backoff`:{if(!r)break;let e=n;typeof e.targetAt==`string`&&typeof e.source==`string`&&t.setPendingQuotaBackoff(r,{targetAt:e.targetAt,resetsAt:e.resetsAt??null,source:e.source,reason:e.reason===`transient`?`transient`:`quota`});break}case`agent:quota-backoff-cancelled`:r&&(t.clearPendingQuotaBackoff(r),n.reason===`completed`&&t.fetchWorkspaces());break;case`review:return-status`:r&&au().setReturn(r,e.payload??null);break;case`autoloop:final-review`:{if(!r)break;let e=n;au().setFinalReview(r,e);let i=t.autoLoopStates[r];i&&(i.finalReview=e);break}case`autoloop:messages`:r&&t.fetchAutoLoopMessages(r).catch(()=>{});break;case`autoloop:state`:case`autoloop:enabled`:case`autoloop:iteration-started`:case`autoloop:ready-flipped`:t.fetchAutoLoopStates();break;case`autoloop:permission-overridden`:r&&ff(Q(`notification.autoLoopPermissionOverridden`,{name:t.workspaces.find(e=>e.id===r)?.name??``}),void 0,r);break;case`autoloop:waiting-for-slot`:{if(!r)break;let e=n,i=t.workspaces.find(e=>e.id===r)?.name??``;Xl.create({type:`info`,position:`top`,timeout:6e3,message:Q(`notification.autoLoopWaitingForSlot`,{name:i,running:e.running??0,limit:e.limit??0})});break}case`autoloop:disabled`:if(t.fetchAutoLoopStates(),r){let e=n?.reason,i=t.workspaces.find(e=>e.id===r)?.name??``,a=e===`error`?`notification.autoLoopError`:e===`stall`?`notification.autoLoopStalled`:e===`completed`?`notification.autoLoopCompleted`:e===`awaiting-clarification`?`notification.autoLoopAwaitingClarification`:null;a&&ff(Q(a,{name:i}),void 0,r)}break;case`workspace:create-progress`:{let e=typeof n.step==`string`?n.step:``,r=typeof n.creationId==`string`?n.creationId:``;r&&e&&t.setCreationProgress({creationId:r,step:e,index:typeof n.index==`number`?n.index:0,total:typeof n.total==`number`?n.total:0});break}case`workspace:create-failed`:{let e=typeof n.creationId==`string`?n.creationId:``,r=typeof n.step==`string`?n.step:``;e&&r&&t.setCreationProgress({creationId:e,step:r,index:-1,total:0});break}case`migration:progress`:case`migration:error`:oc().update(n)}}}}),Lf=N({__name:`App`,setup(e){let t=If(),n=Ml(),r=Z(),i=qd?window.parent.koboWorkspaceQueues:void 0,a;if(i)a=jl(r,i);else{let e=Al(r);window.koboWorkspaceQueues=e,a=()=>{e.dispose(),delete window.koboWorkspaceQueues}}return S(()=>{t.connect(),n.fetchTemplates(),sf()}),g(()=>{a?.(),t.disconnect()}),(e,t)=>{let n=T(`router-view`);return v(),ne(M,null,[D(n),D(pc),D(El)],64)}}}),Rf=e=>e,zf=Rf,Bf=Rf,Vf=Rf(()=>lr()),Hf={true:`inset`,item:`item-inset`,"item-thumbnail":`item-thumbnail-inset`},Uf={xs:2,sm:4,md:8,lg:16,xl:24},Wf=Pe({name:`QSeparator`,props:{...We,spaced:[Boolean,String],inset:[Boolean,String],vertical:Boolean,color:String,size:String},setup(e){let t=we(),n=Ge(e,t),r=j(()=>e.vertical?`vertical`:`horizontal`),i=j(()=>` q-separator--${r.value}`),a=j(()=>e.inset?`${i.value}-${Hf[e.inset]}`:``),o=j(()=>`q-separator${i.value}${a.value}`+(e.color===void 0?``:` bg-${e.color}`)+(n()?` q-separator--dark`:``)),s=j(()=>{let t={};if(e.size!==void 0&&(t[e.vertical?`width`:`height`]=e.size),e.spaced){let n=e.spaced===!0?`${Uf.md}px`:e.spaced in Uf?`${Uf[e.spaced]}px`:e.spaced,r=e.vertical?[`Left`,`Right`]:[`Top`,`Bottom`];t[`margin${r[0]}`]=t[`margin${r[1]}`]=n}return t});return()=>h(`hr`,{class:o.value,style:s.value,"aria-orientation":r.value})}}),Gf=()=>h(`svg`,{key:`svg`,class:`q-radio__bg absolute non-selectable`,viewBox:`0 0 24 24`},[h(`path`,{d:`M12,22a10,10 0 0 1 -10,-10a10,10 0 0 1 10,-10a10,10 0 0 1 10,10a10,10 0 0 1 -10,10m0,-22a12,12 0 0 0 -12,12a12,12 0 0 0 12,12a12,12 0 0 0 12,-12a12,12 0 0 0 -12,-12`}),h(`path`,{class:`q-radio__check`,d:`M12,6a6,6 0 0 0 -6,6a6,6 0 0 0 6,6a6,6 0 0 0 6,-6a6,6 0 0 0 -6,-6`})]);function Kf(e){(e.keyCode===13||e.keyCode===32)&&_e(e)}var qf=Pe({name:`QRadio`,props:{...We,...Ie,...lt,modelValue:{required:!0},val:{required:!0},label:String,leftLabel:Boolean,checkedIcon:String,uncheckedIcon:String,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},emits:[`update:modelValue`],setup(t,{slots:n,emit:r}){let{proxy:a}=O(),o=we(),s=Ge(t,o),c=i(null),{refocusTargetEl:l,refocusTarget:u}=ft(t,c),d=j(()=>e(t.modelValue)===e(t.val)),f=j(()=>`q-radio cursor-pointer no-outline row inline no-wrap items-center`+(t.disable?` disabled`:``)+(s()?` q-radio--dark`:``)+(t.dense?` q-radio--dense`:``)+(t.leftLabel?` reverse`:``)),p=j(()=>{let e=t.color!==void 0&&(t.keepColor||d.value)?` text-${t.color}`:``;return`q-radio__inner relative-position q-radio__inner--${d.value?`truthy`:`falsy`}${e}`}),m=j(()=>(d.value?t.checkedIcon:t.uncheckedIcon)||null),g=j(()=>t.disable?-1:t.tabindex||0),_=ut(()=>{let e={type:`radio`};return t.name!==void 0&&Object.assign(e,{".checked":d.value,"^checked":d.value?`checked`:void 0,name:t.name,value:t.val}),e});function v(e){e!==void 0&&(_e(e),u(e)),!t.disable&&!d.value&&r(`update:modelValue`,t.val,e)}function y(e){(e.keyCode===13||e.keyCode===32)&&v(e)}Object.assign(a,{set:v});let b=Gf();return()=>{let e=m.value===null?[b]:[h(`div`,{key:`icon`,class:`q-radio__icon-container absolute-full flex flex-center no-wrap`},[h(Re,{class:`q-radio__icon`,name:m.value})])];t.disable||_(e,`unshift`,` q-radio__native q-ma-none q-pa-none`);let r=[h(`div`,{class:p.value,style:pt(t.size),"aria-hidden":`true`},e)];l.value!==null&&r.push(l.value);let i=t.label===void 0?De(n.default):Te(n.default,[t.label]);return i!==void 0&&r.push(h(`div`,{class:`q-radio__label q-anchor--skip`},i)),h(`div`,{ref:c,class:f.value,tabindex:g.value,role:`radio`,"aria-label":t.label,"aria-checked":d.value?`true`:`false`,"aria-disabled":t.disable?`true`:void 0,onClick:v,onKeydown:Kf,onKeyup:y},r)}}}),Jf=()=>h(`div`,{key:`svg`,class:`q-checkbox__bg absolute`},[h(`svg`,{class:`q-checkbox__svg fit absolute-full`,viewBox:`0 0 24 24`},[h(`path`,{class:`q-checkbox__truthy`,fill:`none`,d:`M1.73,12.91 8.1,19.28 22.79,4.59`}),h(`path`,{class:`q-checkbox__indet`,d:`M4,14H20V10H4`})])]),Yf=Pe({name:`QCheckbox`,props:ht,emits:mt,setup(e){let t=Jf();function n(n,r){let i=j(()=>(n.value?e.checkedIcon:r.value?e.indeterminateIcon:e.uncheckedIcon)||null);return()=>i.value===null?[t]:[h(`div`,{key:`icon`,class:`q-checkbox__icon-container absolute-full flex flex-center no-wrap`},[h(Re,{class:`q-checkbox__icon`,name:i.value})])]}return gt(`checkbox`,n)}}),Xf=Pe({name:`QToggle`,props:{...ht,icon:String,iconColor:String},emits:mt,setup(e){function t(t,n){let r=j(()=>(t.value?e.checkedIcon:n.value?e.indeterminateIcon:e.uncheckedIcon)||e.icon),i=j(()=>t.value?e.iconColor:null);return()=>[h(`div`,{class:`q-toggle__track`}),h(`div`,{class:`q-toggle__thumb absolute flex flex-center no-wrap`},r.value===void 0?void 0:[h(Re,{name:r.value,color:i.value})])]}return gt(`toggle`,t)}}),Zf={radio:qf,checkbox:Yf,toggle:Xf},Qf=Object.keys(Zf);function $f(e,t){if(typeof e==`function`)return e;let n=e===void 0?t:e;return e=>e[n]}var ep=Pe({name:`QOptionGroup`,props:{...We,modelValue:{required:!0},options:{type:Array,validator:e=>e.every(Wt),default:()=>[]},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],name:String,type:{type:String,default:`radio`,validator:e=>Qf.includes(e)},color:String,keepColor:Boolean,dense:Boolean,size:String,leftLabel:Boolean,inline:Boolean,disable:Boolean},emits:[`update:modelValue`],setup(t,{emit:n,slots:r}){let a=we(),o=Array.isArray(t.modelValue);t.type===`radio`?o&&console.error(`q-option-group: model should not be array`):o||console.error(`q-option-group: model should be array in your case`);let s=Ge(t,a),c=j(()=>Zf[t.type]),l=i(null),u=j(()=>$f(t.optionValue,`value`)),d=j(()=>$f(t.optionLabel,`label`)),f=j(()=>$f(t.optionDisable,`disable`)),p=j(()=>t.options.map(e=>({val:u.value(e),name:e.name===void 0?t.name:e.name,disable:t.disable||f.value(e),leftLabel:e.leftLabel===void 0?t.leftLabel:e.leftLabel,color:e.color===void 0?t.color:e.color,checkedIcon:e.checkedIcon,uncheckedIcon:e.uncheckedIcon,dark:e.dark===void 0?s():e.dark,size:e.size===void 0?t.size:e.size,dense:t.dense,keepColor:e.keepColor===void 0?t.keepColor:e.keepColor}))),m=j(()=>{let n=e(t.modelValue),r=p.value,i=r.findIndex(t=>!t.disable&&e(t.val)===n);return i===-1?r.findIndex(e=>!e.disable):i}),g=j(()=>`q-option-group q-gutter-x-sm`+(t.inline?` q-option-group--inline`:``)),_=j(()=>{let e={role:t.type===`radio`?`radiogroup`:`group`};return t.disable&&(e[`aria-disabled`]=`true`),e});function v(e){n(`update:modelValue`,e)}function y(r){let i=r.keyCode===37||r.keyCode===38?-1:+(r.keyCode===39||r.keyCode===40);if(i===0)return;let o=l.value.getElementsByClassName(`q-radio`),s=Array.prototype.indexOf.call(o,r.target);if(s===-1)return;_e(r);let c=(r.keyCode===37||r.keyCode===39)&&a.lang.rtl===!0?-i:i,u=p.value,d=u.length,f=s;do f=(f+c+d)%d;while(f!==s&&u[f].disable);f!==s&&(o[f].focus(),e(u[f].val)!==e(t.modelValue)&&n(`update:modelValue`,u[f].val))}return()=>h(`div`,{ref:l,class:g.value,..._.value,onKeydown:t.type===`radio`?y:void 0},t.options.map((e,n)=>{let i=r[`label-`+n]===void 0?r.label===void 0?void 0:()=>r.label(e):()=>r[`label-`+n](e);return h(`div`,[h(c.value,{label:i===void 0?d.value(e):null,modelValue:t.modelValue,"onUpdate:modelValue":v,...p.value[n],tabindex:t.type===`radio`?n===m.value?0:-1:void 0},i)])}))}}),tp=()=>!0;function np(e){let t={};return e.forEach(e=>{t[e]=tp}),t}function rp(e){return e===void 0?`programmatic`:e.type.indexOf(`key`)===0?`escape`:`backdrop`}function ip(){let{emit:e,proxy:t}=O(),n=i(null),r=null;function a(){r=null,n.value.show()}function o(){n.value.hide()}function s(t){e(`ok`,t),o()}function c(){r=`cancel`,o()}function l(t){e(`hide`,r===null?rp(t):r)}return Object.assign(t,{show:a,hide:o}),{dialogRef:n,onDialogHide:l,onDialogOK:s,onDialogCancel:c}}var ap=[`ok`,`hide`];ip.emits=ap,ip.emitsObject=np(ap);var op=Pe({name:`DialogPluginComponent`,props:{...We,title:String,message:String,prompt:Object,options:Object,progress:[Boolean,Object],html:Boolean,ok:{type:[String,Object,Boolean],default:!0},cancel:[String,Object,Boolean],focus:{type:String,default:`ok`,validator:e=>[`ok`,`cancel`,`none`].includes(e)},stackButtons:Boolean,color:String,cardClass:[String,Array,Object],cardStyle:[String,Array,Object]},emits:[`ok`,`hide`],setup(t){let n=we(),r=Ge(t,n),{dialogRef:i,onDialogHide:a,onDialogOK:o,onDialogCancel:s}=ip(),c=m(t.prompt===void 0?t.options===void 0?void 0:t.options.model:t.prompt.model),l=j(()=>`q-dialog-plugin`+(r()?` q-dialog-plugin--dark q-dark`:``)+(t.progress===!1?``:` q-dialog-plugin--progress`)),u=j(()=>t.color||(r()?`amber`:`primary`)),d=j(()=>t.progress===!1?null:Wt(t.progress)?{component:t.progress.spinner||Ue,props:{color:t.progress.color||u.value}}:{component:Ue,props:{color:u.value}}),f=j(()=>t.prompt!==void 0||t.options!==void 0),p=j(()=>{if(!f.value)return{};let{model:e,isValid:n,items:r,...i}=t.prompt===void 0?t.options:t.prompt;return i}),g=j(()=>Wt(t.ok)||t.ok===!0?n.lang.label.ok:t.ok),v=j(()=>Wt(t.cancel)||t.cancel===!0?n.lang.label.cancel:t.cancel),y=j(()=>t.prompt===void 0?t.options!==void 0&&t.options.isValid!==void 0&&!t.options.isValid(c.value):t.prompt.isValid!==void 0&&!t.prompt.isValid(c.value)),b=j(()=>({color:u.value,label:g.value,ripple:!1,disable:y.value,...Wt(t.ok)?t.ok:{flat:!0},"data-autofocus":t.focus===`ok`&&!f.value||void 0,onClick:S})),x=j(()=>({color:u.value,label:v.value,ripple:!1,...Wt(t.cancel)?t.cancel:{flat:!0},"data-autofocus":t.focus===`cancel`&&!f.value||void 0,onClick:s}));_(()=>t.prompt&&t.prompt.model,C),_(()=>t.options&&t.options.model,C);function S(){o(e(c.value))}function C(e){c.value=e}function w(e){!y.value&&t.prompt.type!==`textarea`&&se(e,13)&&S()}function T(e,n){return t.html?h(en,{class:e,innerHTML:n}):h(en,{class:e},()=>n)}function E(){return[h(ml,{color:u.value,dense:!0,autofocus:!0,dark:r(),...p.value,modelValue:c.value,"onUpdate:modelValue":C,onKeyup:w})]}function D(){return[h(ep,{color:u.value,options:t.options.items,dark:r(),...p.value,modelValue:c.value,"onUpdate:modelValue":C})]}function O(){let e=[];return t.cancel&&e.push(h(He,x.value)),t.ok&&e.push(h(He,b.value)),h(hl,{class:t.stackButtons?`items-end`:``,vertical:t.stackButtons,align:`right`},()=>e)}function k(){let e=[];return t.title&&e.push(T(`q-dialog__title`,t.title)),t.progress!==!1&&e.push(h(en,{class:`q-dialog__progress`},()=>h(d.value.component,d.value.props))),t.message&&e.push(T(`q-dialog__message`,t.message)),t.prompt===void 0?t.options!==void 0&&e.push(h(Wf,{dark:r()}),h(en,{class:`scroll q-dialog-plugin__form`},D),h(Wf,{dark:r()})):e.push(h(en,{class:`scroll q-dialog-plugin__form`},E)),(t.ok||t.cancel)&&e.push(O()),e}function A(){return[h(an,{class:[l.value,t.cardClass],style:t.cardStyle,dark:r()},k)]}return()=>h(Gn,{ref:i,onHide:a},A)}});function sp(e,t){for(let n in t)n!==`spinner`&&Object(t[n])===t[n]&&!Array.isArray(t[n])?(e[n]=Object(e[n])===e[n]?{...e[n]}:{},sp(e[n],t[n])):e[n]=t[n]}function cp(e,t,n){return r=>{let a,o,s=t&&r.component!==void 0;if(s){let{component:e,componentProps:t}=r;a=typeof e==`string`?n.component(e):e,o=t||{}}else{let{class:t,style:n,...i}=r;a=e,o=i,t!==void 0&&(i.cardClass=t),n!==void 0&&(i.cardStyle=n)}let c,l=!1,u=i(null),d=F(!1,`dialog`),f=e=>{if(u.value?.[e]!==void 0){u.value[e]();return}let t=c.$.subTree?.component;for(;t;){if(typeof t.proxy?.[e]==`function`){t.proxy[e]();return}t=t.subTree?.component}console.error(`[Quasar] Incorrectly defined Dialog component`)},p=[],m=[],g={onOk(e){return p.push(e),g},onCancel(e){return m.push(e),g},onDismiss(e){return p.push(e),m.push(e),g},hide(){return f(`hide`),g},update(e){if(c!==null){if(s)Object.assign(o,e);else{let{class:t,style:n,...r}=e;t!==void 0&&(r.cardClass=t),n!==void 0&&(r.cardStyle=n),sp(o,r)}c.$forceUpdate()}return g}},_=e=>{l=!0,p.forEach(t=>{t(e)})},v=e=>{y.unmount(d),Se(d),y=null,c=null,l||m.forEach(t=>{t(e)})},y=Xt({name:`QGlobalDialog`,setup:()=>()=>h(a,{...o,ref:u,onOk:_,onHide:v,onVnodeMounted(...e){typeof o.onVnodeMounted==`function`&&o.onVnodeMounted(...e),x(()=>f(`show`))}})},n);return c=y.mount(d),g}}var lp={install({$q:e,parentApp:t}){e.dialog=this.create=cp(op,!0,t)}},up=new Map;function dp(e,t){up.set(e,t)}function fp(e){up.delete(e)}function pp(){let e=[];for(let[t,n]of up)try{n()&&e.push(t)}catch{}return e}function mp(){return pp().length>0}var hp=e=>e.startsWith(`/`);function gp(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function _p(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&gp(e.default)}var $=Object.assign;function vp(e,t){let n={};for(let r in t){let i=t[r];n[r]=bp(i)?i.map(e):e(i)}return n}var yp=()=>{},bp=Array.isArray;function xp(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var Sp=Symbol(``),Cp=function(e){return e[e.aborted=4]=`aborted`,e[e.cancelled=8]=`cancelled`,e[e.duplicated=16]=`duplicated`,e}({});function wp(e,t){return $(Error(),{type:e,[Sp]:!0},t)}function Tp(e,t){return e instanceof Error&&Sp in e&&(t==null||!!(e.type&t))}var Ep=Symbol(``),Dp=Symbol(``),Op=Symbol(``),kp=Symbol(``),Ap=Symbol(``);function jp(){return w(Op)}function Mp(e){return w(kp)}var Np=typeof document<`u`,Pp=/#/g,Fp=/&/g,Ip=/\//g,Lp=/=/g,Rp=/\?/g,zp=/\+/g,Bp=/%5B/g,Vp=/%5D/g,Hp=/%5E/g,Up=/%60/g,Wp=/%7B/g,Gp=/%7C/g,Kp=/%7D/g,qp=/%20/g;function Jp(e){return e==null?``:encodeURI(``+e).replace(Gp,`|`).replace(Bp,`[`).replace(Vp,`]`)}function Yp(e){return Jp(e).replace(Wp,`{`).replace(Kp,`}`).replace(Hp,`^`)}function Xp(e){return Jp(e).replace(zp,`%2B`).replace(qp,`+`).replace(Pp,`%23`).replace(Fp,`%26`).replace(Up,"`").replace(Wp,`{`).replace(Kp,`}`).replace(Hp,`^`)}function Zp(e){return Xp(e).replace(Lp,`%3D`)}function Qp(e){return Jp(e).replace(Pp,`%23`).replace(Rp,`%3F`)}function $p(e){return Qp(e).replace(Ip,`%2F`)}function em(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{}return``+e}var tm=/\/$/,nm=e=>e.replace(tm,``);function rm(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=dm(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:em(o)}}function im(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function am(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function om(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&sm(t.matched[r],n.matched[i])&&cm(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function sm(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function cm(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!lm(e[n],t[n]))return!1;return!0}function lm(e,t){return bp(e)?um(e,t):bp(t)?um(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function um(e,t){return bp(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function dm(e,t){if(hp(e))return e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o<r.length;o++)if(s=r[o],s!==`.`){if(s===`..`)a>1&&a--;else break}return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var fm={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0};function pm(e){if(!e){if(Np){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^/]+/,``)}else e=`/`}return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),nm(e)}var mm=/^[^#]+#/;function hm(e,t){return e.replace(mm,`#`)+t}function gm(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var _m=()=>history.scrollRestoration===`manual`?{left:window.scrollX,top:window.scrollY}:null;function vm(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`),i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=gm(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function ym(e,t){return(history.state?history.state.position-t:-1)+e}var bm=new Map;function xm(e){bm.set(e,_m())}function Sm(e){let t=bm.get(e);return bm.delete(e),t}function Cm(e){return typeof e==`string`||e&&typeof e==`object`}function wm(e){return typeof e==`string`||typeof e==`symbol`}function Tm(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;e<n.length;++e){let r=n[e].replace(zp,` `),i=r.indexOf(`=`),a=em(i<0?r:r.slice(0,i)),o=i<0?null:em(r.slice(i+1));if(a in t){let e=t[a];bp(e)||(e=t[a]=[e]),e.push(o)}else t[a]=o}return t}function Em(e){let t=``;for(let n in e){let r=e[n];if(n=Zp(n),r==null){r!==void 0&&(t+=(t.length?`&`:``)+n);continue}(bp(r)?r.map(e=>e&&Xp(e)):[r&&Xp(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function Dm(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=bp(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}function Om(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function km(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(wp(4,{from:n,to:t})):e instanceof Error?c(e):Cm(e)?c(wp(2,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,l)),d=Promise.resolve(u);e.length<3&&(d=d.then(l)),d.catch(e=>c(e))})}function Am(e,t,n,r,i=e=>e()){let a=[];for(let o of e)for(let e in o.components){let s=o.components[e];if(t===`beforeRouteEnter`||o.instances[e]){if(gp(s)){let c=(s.__vccOpts||s)[t];c&&a.push(km(c,n,r,o,e,i))}else{let c=s();a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=_p(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&km(c,n,r,o,e,i)()}))}}}return a}function jm(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;o<a;o++){let a=t.matched[o];a&&(e.matched.find(e=>sm(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>sm(e,s))||i.push(s))}return[n,r,i]}var Mm=()=>location.protocol+`//`+location.host;function Nm(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),am(n,``)}return am(n,e)+r+i}function Pm(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=Nm(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:`pop`,direction:u?u>0?`forward`:`back`:``})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){let{history:e}=window;e.state&&e.replaceState($({},e.state,{scroll:_m()}),``)}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),{pauseListeners:c,listen:l,destroy:d}}function Fm(e,t,n,r=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:null}}function Im(e){let{history:t,location:n}=window,r={value:Nm(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:Mm()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,$({},t.state,Fm(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=$({},i.value,t.state,{forward:e,scroll:_m()});a(o.current,o,!0),a(e,$({},Fm(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function Lm(e){e=pm(e);let t=Im(e),n=Pm(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=$({location:``,base:e,go:r,createHref:hm.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function Rm(e){return e=location.host?e||location.pathname+location.search:``,e.includes(`#`)||(e+=`#`),Lm(e)}var zm={type:0,value:``},Bm=/[a-zA-Z0-9_]/;function Vm(e){if(!e)return[[]];if(e===`/`)return[[zm]];if(!hp(e))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=0,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===0?a.push({type:0,value:l}):n===1||n===2||n===3?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;s<e.length;)switch(c=e[s++],n){case 0:c===`\\`?(r=n,n=4):c===`/`?(l&&d(),o()):c===`:`?(d(),n=1):f();break;case 4:f(),n=r;break;case 1:c===`(`?n=2:Bm.test(c)?f():(d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--);break;case 2:c===`)`?u[u.length-1]==`\\`?u=u.slice(0,-1)+c:n=3:u+=c;break;case 3:d(),n=0,c!==`*`&&c!==`?`&&c!==`+`&&s--,u=``;break;default:t(`Unknown state`)}return n===2&&t(`Unfinished custom RegExp for param "${l}"`),d(),o(),i}var Hm=`[^/]+?`,Um={sensitive:!1,strict:!1,start:!0,end:!0},Wm=/[.+*?^${}()[\]/\\]/g;function Gm(e,t){let n=$({},Um,t),r=[],i=n.start?`^`:``,a=[];for(let t of e){let e=t.length?[]:[90];n.strict&&!t.length&&(i+=`/`);for(let r=0;r<t.length;r++){let o=t[r],s=40+(n.sensitive?.25:0);if(o.type===0)r||(i+=`/`),i+=o.value.replace(Wm,`\\$&`),s+=40;else if(o.type===1){let{value:e,repeatable:n,optional:c,regexp:l}=o;a.push({name:e,repeatable:n,optional:c});let u=l||Hm;if(u!==Hm){s+=10;try{RegExp(`(${u})`)}catch(t){throw Error(`Invalid custom RegExp for param "${e}" (${u}): `+t.message)}}let d=n?`((?:${u})(?:/(?:${u}))*)`:`(${u})`;r||(d=c&&t.length<2?`(?:/${d})`:`/`+d),c&&(d+=`?`),i+=d,s+=20,c&&(s+=-8),n&&(s+=-20),u===`.*`&&(s+=-50)}e.push(s)}r.push(e)}if(n.strict&&n.end){let e=r.length-1;r[e][r[e].length-1]+=.7000000000000001}n.strict||(i+=`/?`),n.end?i+=`$`:n.strict&&!i.endsWith(`/`)&&(i+=`(?:/|$)`);let o=new RegExp(i,n.sensitive?``:`i`);function s(e){let t=e.match(o),n={};if(!t)return null;for(let e=1;e<t.length;e++){let r=t[e]||``,i=a[e-1];n[i.name]=r&&i.repeatable?r.split(`/`):r}return n}function c(t){let n=``,r=!1;for(let i of e){(!r||!n.endsWith(`/`))&&(n+=`/`),r=!1;for(let e of i)if(e.type===0)n+=e.value;else if(e.type===1){let{value:a,repeatable:o,optional:s}=e,c=a in t?t[a]:``;if(bp(c)&&!o)throw Error(`Provided param "${a}" is an array but it is not repeatable (* or + modifiers)`);let l=bp(c)?c.join(`/`):c;if(!l){if(s)i.length<2&&(n.endsWith(`/`)?n=n.slice(0,-1):r=!0);else throw Error(`Missing required param "${a}"`)}n+=l}}return n||`/`}return{re:o,score:r,keys:a,parse:s,stringify:c}}function Km(e,t){let n=0;for(;n<e.length&&n<t.length;){let r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===80?-1:1:e.length>t.length?t.length===1&&t[0]===80?1:-1:0}function qm(e,t){let n=0,r=e.score,i=t.score;for(;n<r.length&&n<i.length;){let e=Km(r[n],i[n]);if(e)return e;n++}if(Math.abs(i.length-r.length)===1){if(Jm(r))return 1;if(Jm(i))return-1}return i.length-r.length}function Jm(e){let t=e[e.length-1];return e.length>0&&t[t.length-1]<0}var Ym={strict:!1,end:!0,sensitive:!1};function Xm(e,t,n){let r=$(Gm(Vm(e.path),n),{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function Zm(e,t){let n=[],r=new Map;t=xp(Ym,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=$m(e);s.aliasOf=r&&r.record;let l=xp(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push($m($({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&!hp(u)){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=Xm(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!th(d)&&o(e.name)),ah(d)&&c(d),s.children){let e=s.children;for(let t=0;t<e.length;t++)a(e[t],d,r&&r.children[t])}r||=d}return f?()=>{o(f)}:yp}function o(e){if(wm(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=rh(e,n);n.splice(t,0,e),e.record.name&&!th(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw wp(1,{location:e});s=i.record.name,a=$(Qm(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&Qm(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name,i.keys.forEach(e=>{e.optional&&!a[e.name]&&delete a[e.name]}));else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw wp(1,{location:e,currentLocation:t});s=i.record.name,a=$({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:nh(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function Qm(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function $m(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:eh(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function eh(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function th(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function nh(e){return e.reduce((e,t)=>$(e,t.meta),{})}function rh(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;qm(e,t[i])<0?r=i:n=i+1}let i=ih(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function ih(e){let t=e;for(;t=t.parent;)if(ah(t)&&qm(e,t)===0)return t}function ah({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function oh(e){let t=w(Op),n=w(kp),i=j(()=>{let n=r(e.to);return t.resolve(n)}),a=j(()=>{let{matched:e}=i.value,{length:t}=e,r=e[t-1],a=n.matched;if(!r||!a.length)return-1;let o=a.findIndex(sm.bind(null,r));if(o>-1)return o;let s=dh(e[t-2]);return t>1&&dh(r)===s&&a[a.length-1].path!==s?a.findIndex(sm.bind(null,e[t-2])):o}),o=j(()=>a.value>-1&&uh(n.params,i.value.params)),s=j(()=>a.value>-1&&a.value===n.matched.length-1&&cm(n.params,i.value.params));function c(n={}){if(lh(n)){let n=t[r(e.replace)?`replace`:`push`](r(e.to)).catch(yp);return e.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>n),n}return Promise.resolve()}return{route:i,href:j(()=>i.value.href),isActive:o,isExactActive:s,navigate:c}}function sh(e){return e.length===1?e[0]:e}var ch=N({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:oh,setup(e,{slots:t}){let n=l(oh(e)),{options:r}=w(Op),i=j(()=>({[fh(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[fh(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&sh(t.default(n));return e.custom?r:h(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function lh(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(e.button===void 0||e.button===0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function uh(e,t){for(let n in t){let r=t[n],i=e[n];if(bp(r)){if(!bp(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}else if(r!==i)return!1}return!0}function dh(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var fh=(e,t,n)=>e??t??n,ph=N({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){let i=w(Ap),a=j(()=>e.route||i.value),o=w(Dp,0),s=j(()=>{let e=r(o),{matched:t}=a.value,n;for(;(n=t[e])&&!n.components;)e++;return e}),c=j(()=>a.value.matched[s.value]);C(Dp,j(()=>s.value+1)),C(Ep,c),C(Ap,a);let l=m();return _(()=>[l.value,c.value,e.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!sm(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let r=a.value,i=e.name,o=c.value,s=o&&o.components[i];if(!s)return mh(n.default,{Component:s,route:r});let u=o.props[i],d=u?u===!0?r.params:typeof u==`function`?u(r):u:null,f=h(s,$({},d,t,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(o.instances[i]=null)},ref:l}));return mh(n.default,{Component:f,route:r})||f}}});function mh(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var hh=ph;function gh(e){let t=Zm(e.routes,e),n=e.parseQuery||Tm,a=e.stringifyQuery||Em,s=e.history,c=Om(),l=Om(),u=Om(),d=i(fm),f=i(0),p=fm;Np&&e.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let m=vp.bind(null,e=>``+e),h=vp.bind(null,$p),g=vp.bind(null,em);function _(e,n){let r,i;wm(e)?(r=t.getRecordMatcher(e),i=n):i=e;let a=t.addRoute(i,r);return f.value++,()=>{a(),f.value++}}function v(e){let n=t.getRecordMatcher(e);n&&(t.removeRoute(n),f.value++)}function y(){t.clearRoutes(),f.value++}function b(){return t.getRoutes().map(e=>e.record)}function S(e){return!!t.getRecordMatcher(e)}function C(e,r){if(f.value,typeof e==`string`){r||=e.startsWith(`/`)?fm:d.value;let i=rm(n,e,r.path),a=t.resolve({path:i.path},r),o=s.createHref(i.fullPath);return $(i,a,{params:g(a.params),redirectedFrom:void 0,href:o})}r=$({},r||(e.path!=null&&e.path.startsWith(`/`)&&!(`name`in e&&e.name)?fm:d.value));let i;if(e.path!=null)i=$({},e,{path:rm(n,e.path,r.path).path});else{let t=$({},e.params);for(let e in t)t[e]??delete t[e];i=$({},e,{params:h(t)}),r.params=h(r.params)}let o=t.resolve(i,r),c=e.hash||``;o.params=m(g(o.params));let l=im(a,$({},e,{hash:Yp(c),path:o.path})),u=s.createHref(l);return $({fullPath:l,hash:c,query:a===Em?Dm(e.query):e.query||{}},o,{redirectedFrom:void 0,href:u})}function w(e){return typeof e==`string`?rm(n,e,d.value.path):$({},e)}function T(e,t){if(p!==e)return wp(8,{from:t,to:e})}function E(e){return k(e)}function D(e){return E($(w(e),{replace:!0}))}function O(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=w(i):{path:i},i.params={}),$({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function k(e,t){let n=p=C(e),r=d.value,i=e.state,o=e.force,s=e.replace===!0,c=O(n,r);if(c)return k($(w(c),{state:typeof c==`object`?$({},i,c.state):i,force:o,replace:s}),t||n);let l=n;l.redirectedFrom=t;let u;return!o&&om(a,r,n)&&(u=wp(16,{to:l,from:r}),le(r,r,!0,!1)),(u?Promise.resolve(u):te(l,r)).catch(e=>Tp(e)?Tp(e,2)?e:ce(e):oe(e,l,r)).then(e=>{if(e){if(Tp(e,2))return k($({replace:s},w(e.to),{state:typeof e.to==`object`?$({},i,e.to.state):i,force:o}),t||l)}else e=ne(l,r,!0,s,i);return j(l,r,e),e})}function A(e,t){let n=T(e,t);return n?Promise.reject(n):Promise.resolve()}function ee(e){let t=fe.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function te(e,t){let n,[r,i,a]=jm(e,t);n=Am(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(km(r,e,t))});let o=A.bind(null,e,t);return n.push(o),P(n).then(()=>{n=[];for(let r of c.list())n.push(km(r,e,t));return n.push(o),P(n)}).then(()=>{n=Am(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(km(r,e,t))});return n.push(o),P(n)}).then(()=>{n=[];for(let r of a)if(r.beforeEnter){if(bp(r.beforeEnter))for(let i of r.beforeEnter)n.push(km(i,e,t));else n.push(km(r.beforeEnter,e,t))}return n.push(o),P(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=Am(a,`beforeRouteEnter`,e,t,ee),n.push(o),P(n))).then(()=>{n=[];for(let r of l.list())n.push(km(r,e,t));return n.push(o),P(n)}).catch(e=>Tp(e,8)?e:Promise.reject(e))}function j(e,t,n){u.list().forEach(r=>ee(()=>r(e,t,n)))}function ne(e,t,n,r,i){let a=T(e,t);if(a)return a;let o=t===fm,c=Np?history.state:{};n&&(r||o?s.replace(e.fullPath,$({scroll:o&&c&&c.scroll},i)):s.push(e.fullPath,i)),d.value=e,le(e,t,n,o),ce()}let M;function re(){M||=s.listen((e,t,n)=>{if(!pe.listening)return;let r=C(e),i=O(r,pe.currentRoute.value);if(i){k($(i,{replace:!0,force:!0}),r).catch(yp);return}p=r;let a=d.value;Np&&n.delta&&xm(ym(a.fullPath,n.delta)),te(r,a).catch(e=>Tp(e,12)?e:Tp(e,2)?(k($(w(e.to),{force:!0}),r).then(e=>{Tp(e,20)&&!n.delta&&n.type===`pop`&&s.go(-1,!1)}).catch(yp),Promise.reject()):(n.delta&&s.go(-n.delta,!1),oe(e,r,a))).then(e=>{e||=ne(r,a,!1),e&&(n.delta&&!Tp(e,8)?s.go(-n.delta,!1):n.type===`pop`&&Tp(e,20)&&s.go(-1,!1)),j(r,a,e)}).catch(yp)})}let ie=Om(),ae=Om(),N;function oe(e,t,n){ce(e);let r=ae.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function se(){return N&&d.value!==fm?Promise.resolve():new Promise((e,t)=>{ie.add([e,t])})}function ce(e){return N||(N=!e,re(),ie.list().forEach(([t,n])=>e?n(e):t()),ie.reset()),e}function le(t,n,r,i){let{scrollBehavior:a}=e;if(!Np||!a)return Promise.resolve();let o=!r&&Sm(ym(t.fullPath,0))||(i||!r)&&history.state&&history.state.scroll||null;return x().then(()=>a(t,n,o)).then(e=>t===d.value&&e&&vm(e)).catch(e=>t===d.value&&oe(e,t,n))}let ue=e=>s.go(e),de,fe=new Set,pe={currentRoute:d,listening:!0,addRoute:_,removeRoute:v,clearRoutes:y,hasRoute:S,getRoutes:b,resolve:C,options:e,push:E,replace:D,go:ue,back:()=>ue(-1),forward:()=>ue(1),beforeEach:c.add,beforeResolve:l.add,afterEach:u.add,onError:ae.add,isReady:se,install(e){e.component(`RouterLink`,ch),e.component(`RouterView`,hh),e.config.globalProperties.$router=pe,Object.defineProperty(e.config.globalProperties,"$route",{enumerable:!0,get:()=>r(d)}),Np&&!de&&d.value===fm&&(de=!0,E(s.location).catch(e=>{}));let t={};for(let e in fm)Object.defineProperty(t,e,{get:()=>d.value[e],enumerable:!0});e.provide(Op,pe),e.provide(kp,o(t)),e.provide(Ap,d);let n=e.unmount;fe.add(e),e.unmount=function(){fe.delete(e),fe.size<1&&(p=fm,M&&M(),M=null,d.value=fm,de=!1,N=!1),n()}}};function P(e){return e.reduce((e,t)=>e.then(()=>ee(t)),Promise.resolve())}return pe}var _h=[{path:`/`,component:()=>Ls(()=>import(`./MainLayout-ZcExZTqC.js`).then(e=>e.t),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])),children:[{path:``,redirect:{name:`workspace`}},{path:`dashboard`,name:`dashboard`,component:()=>Ls(()=>import(`./DashboardPage-DjLoUvjA.js`),__vite__mapDeps([50,1,2,3,4,51,5,12,6,13,16,7,27,28,29,32,43,45,52]))},{path:`workspace/:id?`,name:`workspace`,component:()=>Ls(()=>import(`./WorkspacePage-_QSKLO42.js`).then(e=>e.t),__vite__mapDeps([53,1,2,3,4,54,8,5,9,6,10,11,12,13,14,37,7,38,20,16,21,17,18,22,23,24,25,26,55,32,28,43,56,57,58,47,36,31,39,40,41,42,30,35,44,45,46,48,59]))},{path:`split`,name:`split`,component:()=>Ls(()=>import(`./SplitWorkspacePage-CfeO6TZb.js`),__vite__mapDeps([60,1,2,3,4,5,7,9,6,10,11,12,13,14,31,43,47,61]))},{path:`create`,name:`create`,component:()=>Ls(()=>import(`./CreatePage-CZzEOVVq.js`),__vite__mapDeps([62,1,2,3,4,54,8,5,9,6,10,11,12,13,14,37,7,38,16,22,63,40,25,26,32,33,34,35,43,44,24,45,56,57,46,64]))},{path:`settings`,name:`settings`,component:()=>Ls(()=>import(`./SettingsPage-eyJZxeCJ.js`),__vite__mapDeps([36,1,2,3,4,5,10,8,9,6,11,12,13,14,37,7,38,31,16,23,24,25,39,40,41,42,30,32,35,43,44,45,46,47,48]))},{path:`search`,name:`search`,component:()=>Ls(()=>import(`./SearchPage-fZlSSEu_.js`),__vite__mapDeps([65,1,2,4,3,12,6,13,22,28,43,44,16,7,24,45,58,66]))},{path:`health`,name:`health`,component:()=>Ls(()=>import(`./HealthPage-COicuNQn.js`),__vite__mapDeps([67,1,2,3,4,8,5,11,12,6,13,22,43,44,16,7,24,45,68]))},{path:`changelog`,name:`changelog`,component:()=>Ls(()=>import(`./ChangelogPage-DHl3hD3t.js`),__vite__mapDeps([69,1,2,4,3,12,6,13,17,18,14,5,43,44,16,7,24,45,70]))}]},{path:`/:catchAll(.*)*`,redirect:`/`}],vh=Bf(()=>{let e=gh({scrollBehavior:()=>({left:0,top:0}),routes:_h,history:Rm()});e.beforeEach((e,t)=>{if(Qd(e,t)||e.fullPath===t.fullPath||!mp())return!0;let n=Us.global.t;return new Promise(e=>{lp.create({title:n(`unsaved.title`),message:n(`unsaved.message`),dark:!0,cancel:{flat:!0,label:n(`unsaved.stay`),color:`grey-5`},ok:{flat:!0,label:n(`unsaved.leave`),color:`negative`}}).onOk(()=>e(!0)).onCancel(()=>e(!1))})});let t=()=>{let e=Z();return ef(mp(),Ol(e)?{}:e.queuedMessages)};return window.addEventListener(`beforeunload`,e=>{t()&&(e.preventDefault(),e.returnValue=``)}),qd&&(window.koboPane={hasUnsavedWork:t,ready:()=>e.currentRoute.value.name!=null,navigate:t=>e.push({name:`workspace`,params:{id:t}}),workspaceId:()=>typeof e.currentRoute.value.params.id==`string`?e.currentRoute.value.params.id:void 0}),e});async function yh(e,t){let n=e(Lf);n.use($t,t);let r=typeof Vf==`function`?await Vf({}):Vf;n.use(r);let i=c(typeof vh==`function`?await vh({store:r}):vh);return r.use(({store:e})=>{e.router=i}),{app:n,store:r,router:i}}var bh={config:{dark:!0,brand:{primary:`#6c63ff`,secondary:`#26a69a`,accent:`#9c27b0`,dark:`#1a1a2e`,"dark-page":`#1a1a2e`,positive:`#21ba45`,negative:`#c10015`,info:`#31ccec`,warning:`#f2c037`}},plugins:{Notify:Xl,Dialog:lp}},xh=function(){return!!(window.location.hostname===`localhost`||window.location.hostname===`[::1]`||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/))},Sh;typeof window<`u`&&(Sh=typeof Promise<`u`?new Promise(function(e){return window.addEventListener(`load`,e)}):{then:function(e){return window.addEventListener(`load`,e)}});function Ch(e,t){t===void 0&&(t={});var n=t.registrationOptions;n===void 0&&(n={}),delete t.registrationOptions;var r=function(e){for(var n=[],r=arguments.length-1;r-->0;)n[r]=arguments[r+1];t&&t[e]&&t[e].apply(t,n)};`serviceWorker`in navigator&&Sh.then(function(){xh()?(Eh(e,r,n),navigator.serviceWorker.ready.then(function(e){r(`ready`,e)}).catch(function(e){return wh(r,e)})):(Th(e,r,n),navigator.serviceWorker.ready.then(function(e){r(`ready`,e)}).catch(function(e){return wh(r,e)}))})}function wh(e,t){navigator.onLine||e(`offline`),e(`error`,t)}function Th(e,t,n){navigator.serviceWorker.register(e,n).then(function(e){if(t(`registered`,e),e.waiting){t(`updated`,e);return}e.onupdatefound=function(){t(`updatefound`,e);var n=e.installing;n.onstatechange=function(){n.state===`installed`&&(navigator.serviceWorker.controller?t(`updated`,e):t(`cached`,e))}}}).catch(function(e){return wh(t,e)})}function Eh(e,t,n){fetch(e).then(function(r){r.status===404?(t(`error`,Error(`Service worker not found at `+e)),Dh()):r.headers.get(`content-type`).indexOf(`javascript`)===-1?(t(`error`,Error(`Expected `+e+` to have javascript content-type, but received `+r.headers.get(`content-type`))),Dh()):Th(e,t,n)}).catch(function(e){return wh(t,e)})}function Dh(){`serviceWorker`in navigator&&navigator.serviceWorker.ready.then(function(e){e.unregister()}).catch(function(e){return wh(emit,e)})}Ch(`/sw.js`);var Oh=`/`;async function kh({app:e,router:t,store:n},r){let i=!1,a=e=>{try{return t.resolve(e).href}catch{}return Object(e)===e?null:e},o=e=>{if(i=!0,typeof e==`string`&&/^https?:\/\//.test(e)){window.location.href=e;return}let t=a(e);t!==null&&(window.location.href=t,window.location.reload())},s=window.location.hash.slice(1)||`/`;for(let a=0;i===!1&&a<r.length;a++)try{await r[a]({app:e,router:t,store:n,ssrContext:null,redirect:o,urlPath:s,publicPath:Oh})}catch(e){i||console.error(`[Quasar] boot error:`,e);return}i||(e.use(t),e.mount(`#q-app`))}yh(de,bh).then(e=>{let[t,n]=Promise.allSettled===void 0?[`all`,e=>e.map(e=>e.default)]:[`allSettled`,e=>e.map(e=>{if(e.status===`rejected`){console.error(`[Quasar] boot error:`,e.reason);return}return e.value.default})];return Promise[t]([Ls(()=>import(`./i18n-BmTCjikk.js`),[]),Ls(()=>import(`./network-auth-DnGOOzCV.js`),[]),Ls(()=>import(`./notify-theme-B9lUAgQl.js`),[])]).then(t=>{kh(e,n(t).filter(e=>typeof e==`function`))})});export{md as $,Cr as $t,Id as A,yl as At,$u as B,Ys as Bt,Yd as C,Xl as Ct,Kd as D,bl as Dt,Gd as E,Sl as Et,Td as F,Jc as Ft,td as G,ic as Gt,ed as H,ac as Ht,wd as I,Pc as It,dd as J,Us as Jt,sd as K,q as Kt,Od as L,Nc as Lt,Ad as M,ml as Mt,Nd as N,pl as Nt,Wd as O,_l as Ot,kd as P,Mc as Pt,ad as Q,bs as Qt,Ed as R,Fc as Rt,qd as S,$l as St,$d as T,Ml as Tt,Qu as U,J as Ut,rd as V,Y as Vt,nd as W,rc as Wt,ud as X,qs as Xt,pd as Y,Hs as Yt,od as Z,Ls as Zt,mf as _,rn as _n,iu as _t,jp as a,Mn as an,Z as at,df as b,qt as bn,nu as bt,ep as c,un as cn,vu as ct,qf as d,cn as dn,pu as dt,wr as en,Gu as et,Wf as f,vn as fn,du as ft,_f as g,an as gn,au as gt,bf as h,on as hn,su as ht,Mp as i,Ln as in,Cu as it,Fd as j,hl as jt,Bd as k,vl as kt,Xf as l,bn as ln,xu as lt,If as m,sn as mn,uu as mt,Cp as n,Bn as nn,Xu as nt,dp as o,Nn as on,yu as ot,zf as p,_n as pn,lu as pt,cd as q,Js as qt,Tp as r,Vn as rn,Vu as rt,fp as s,fn as sn,gu as st,ch as t,Gn as tn,Ku as tt,Yf as u,dn as un,fu as ut,hf as v,en as vn,eu as vt,Xd as w,Nl as wt,Jd as x,Wt as xn,Ql as xt,pf as y,Ut as yn,tu as yt,hd as z,gc as zt};