@loicngr/kobo 1.11.37 → 1.11.39

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 (86) hide show
  1. package/AGENTS.md +3 -1
  2. package/CHANGELOG.md +8 -0
  3. package/dist/server/index.js +9 -0
  4. package/dist/server/routes/workspaces.js +39 -18
  5. package/dist/server/services/agent/engines/claude-code/engine.js +11 -0
  6. package/dist/server/services/agent/engines/codex/event-mapper.js +3 -1
  7. package/dist/server/services/agent/event-router.js +1 -1
  8. package/dist/server/services/agent/orchestrator.js +73 -10
  9. package/dist/server/services/auto-loop-service.js +3 -3
  10. package/dist/server/services/pr-watcher-service.js +5 -3
  11. package/dist/server/services/websocket-service.js +10 -2
  12. package/dist/server/services/workspace-service.js +8 -4
  13. package/package.json +2 -2
  14. package/src/client/dist/pwa/assets/{ActivityFeed-C_-hxIo8.js → ActivityFeed-BzzvcOmq.js} +2 -2
  15. package/src/client/dist/pwa/assets/{ActivityFeed-BDyFBoxd.css → ActivityFeed-Chsw1Mh7.css} +1 -1
  16. package/src/client/dist/pwa/assets/{ChangelogPage-CBlGJ4zT.js → ChangelogPage-D8563008.js} +1 -1
  17. package/src/client/dist/pwa/assets/ComparisonPanel-Bd0X08sg.js +2 -0
  18. package/src/client/dist/pwa/assets/ComparisonPanel-CRRaDs2D.css +1 -0
  19. package/src/client/dist/pwa/assets/{CreatePage-ArmtcF4d.js → CreatePage-Bon8qIka.js} +1 -1
  20. package/src/client/dist/pwa/assets/DashboardPage-D8g7_r4S.css +1 -0
  21. package/src/client/dist/pwa/assets/DashboardPage-DYxdxEul.js +1 -0
  22. package/src/client/dist/pwa/assets/{DiffViewer-CaT7vuSr.js → DiffViewer-BpsLNxnj.js} +3 -3
  23. package/src/client/dist/pwa/assets/{DocumentsPanel-A0isCTaI.js → DocumentsPanel-BJsJ0fNs.js} +1 -1
  24. package/src/client/dist/pwa/assets/{DrawerToggleButton-T70fh8dp.js → DrawerToggleButton-BVLO5K5d.js} +1 -1
  25. package/src/client/dist/pwa/assets/{GitPanel-CAvk0G7h.js → GitPanel-Cal_wzC0.js} +3 -3
  26. package/src/client/dist/pwa/assets/{HealthPage-D8Mr0V6w.js → HealthPage-RFZS7Lao.js} +1 -1
  27. package/src/client/dist/pwa/assets/{MainLayout-x6Es4Da-.js → MainLayout-vvyiRcql.js} +2 -2
  28. package/src/client/dist/pwa/assets/{QBtnDropdown-CQqzzlFI.js → QBtnDropdown-X8oNU5Mb.js} +1 -1
  29. package/src/client/dist/pwa/assets/{QDrawer-Cwj2qh0r.js → QDrawer-Cij17skX.js} +1 -1
  30. package/src/client/dist/pwa/assets/{QSelect-BSPtuXJg.js → QSelect-xd-AlGo_.js} +1 -1
  31. package/src/client/dist/pwa/assets/{QTooltip-DC_kDKku.js → QTooltip-CwcCGSWq.js} +1 -1
  32. package/src/client/dist/pwa/assets/{SchedulePanel-9aJSoz6Y.js → SchedulePanel-CXRUsz6G.js} +1 -1
  33. package/src/client/dist/pwa/assets/{SearchPage-BjNvtE_U.js → SearchPage-DopbgLxh.js} +1 -1
  34. package/src/client/dist/pwa/assets/{SettingsPage-CvLnT73V.js → SettingsPage-Jx6TnOzR.js} +1 -1
  35. package/src/client/dist/pwa/assets/{SplitWorkspacePage-DTao0DHr.js → SplitWorkspacePage-D7lGFRKs.js} +1 -1
  36. package/src/client/dist/pwa/assets/{TerminalPanel-BrKIW-bJ.js → TerminalPanel-DI8DHb9e.js} +1 -1
  37. package/src/client/dist/pwa/assets/{TouchPan-_n1AQgoo.js → TouchPan-B3nrkCY8.js} +1 -1
  38. package/src/client/dist/pwa/assets/{TourReplayButton-CJF3nVvn.js → TourReplayButton-DU1UShMY.js} +1 -1
  39. package/src/client/dist/pwa/assets/{WorkspaceAttentionLabels-CxesUiIm.js → WorkspaceAttentionLabels-C-yN5IX8.js} +1 -1
  40. package/src/client/dist/pwa/assets/{WorkspacePage-DoXtwpjV.css → WorkspacePage-BAC6u9OP.css} +1 -1
  41. package/src/client/dist/pwa/assets/WorkspacePage-DKRpdpPg.js +4 -0
  42. package/src/client/dist/pwa/assets/{browser-DGWpkvN3.js → browser-f9MHQjfi.js} +1 -1
  43. package/src/client/dist/pwa/assets/{build-path-tree-Ba1dSLgi.js → build-path-tree-BWBzP8os.js} +1 -1
  44. package/src/client/dist/pwa/assets/{de-DVK21RB6.js → de-QkDLrcGq.js} +1 -1
  45. package/src/client/dist/pwa/assets/{documents-BMHzjW_g.js → documents-C2cLnEBQ.js} +1 -1
  46. package/src/client/dist/pwa/assets/{editor.api-CYTuNwqu.js → editor.api-sw146MWN.js} +1 -1
  47. package/src/client/dist/pwa/assets/{efforts-BPlRSHXp.js → efforts-C5ZZgCH4.js} +1 -1
  48. package/src/client/dist/pwa/assets/{engineFeatures-DVB2rklO.js → engineFeatures-CAVMDawq.js} +1 -1
  49. package/src/client/dist/pwa/assets/{es-C8cQwDZM.js → es-BgQFKlo8.js} +1 -1
  50. package/src/client/dist/pwa/assets/{expand-template-Cj82YE-O.js → expand-template-B6xAlAaM.js} +1 -1
  51. package/src/client/dist/pwa/assets/{format-Dk7O3LhA.js → format-BwWP6Aay.js} +1 -1
  52. package/src/client/dist/pwa/assets/{formatters-TGjvs7Ca.js → formatters-DyWtO-nR.js} +1 -1
  53. package/src/client/dist/pwa/assets/{fr-BVOMZ2Bl.js → fr-DAdLWjNM.js} +1 -1
  54. package/src/client/dist/pwa/assets/{freemarker2-39lO_dWH.js → freemarker2-DZ5Hm8UH.js} +1 -1
  55. package/src/client/dist/pwa/assets/{handlebars-M_0V82cD.js → handlebars-BRUGpTA7.js} +1 -1
  56. package/src/client/dist/pwa/assets/{html-yILqYDsl.js → html-DNOayNNs.js} +1 -1
  57. package/src/client/dist/pwa/assets/i18n-CBez_vip.js +1 -0
  58. package/src/client/dist/pwa/assets/index-VL3fI9a3.js +20 -0
  59. package/src/client/dist/pwa/assets/{it-CxkAoOj4.js → it-Bumaewp1.js} +1 -1
  60. package/src/client/dist/pwa/assets/{javascript-DrW-amDc.js → javascript-C0tDQU3z.js} +1 -1
  61. package/src/client/dist/pwa/assets/{liquid-D_mXmUoL.js → liquid-CN46O6OF.js} +1 -1
  62. package/src/client/dist/pwa/assets/{mdx-E8O3lvR5.js → mdx-DM-lrr8Q.js} +1 -1
  63. package/src/client/dist/pwa/assets/{monaco-contributions-C2K3sl_V.js → monaco-contributions-CkN7y-8c.js} +1 -1
  64. package/src/client/dist/pwa/assets/{monaco.contribution-DLhHQIJn.js → monaco.contribution-2BcAOLjc.js} +2 -2
  65. package/src/client/dist/pwa/assets/{network-auth-BUwWtnui.js → network-auth-KYS4snQH.js} +1 -1
  66. package/src/client/dist/pwa/assets/{notify-theme-1mOpY2vN.js → notify-theme-a91Tcr6o.js} +1 -1
  67. package/src/client/dist/pwa/assets/{pending-diff-open-BL7dKRqF.js → pending-diff-open-DOtELZfB.js} +1 -1
  68. package/src/client/dist/pwa/assets/{permissionModes-BtC3_P-P.js → permissionModes-C-9Crj-c.js} +1 -1
  69. package/src/client/dist/pwa/assets/{project-color-BFBFZWeG.js → project-color-BRe4oyNx.js} +1 -1
  70. package/src/client/dist/pwa/assets/{python-DoZAYim6.js → python-BRpJG6sZ.js} +1 -1
  71. package/src/client/dist/pwa/assets/{razor-9bZ30g2y.js → razor-CehCmvHl.js} +1 -1
  72. package/src/client/dist/pwa/assets/{render-chat-markdown-7EtWNjG0.js → render-chat-markdown-DlbQLZ02.js} +1 -1
  73. package/src/client/dist/pwa/assets/{typescript-C1CBfL3L.js → typescript-Dt_8mVuj.js} +1 -1
  74. package/src/client/dist/pwa/assets/{use-tours-BJ81clv6.js → use-tours-CSVM_54K.js} +1 -1
  75. package/src/client/dist/pwa/assets/{workspace-templates-r1-bipjM.js → workspace-templates-GCObcjO6.js} +1 -1
  76. package/src/client/dist/pwa/assets/{xml-COuu5isK.js → xml-_gOwdzB4.js} +1 -1
  77. package/src/client/dist/pwa/assets/{yaml-ChZ7WqaJ.js → yaml-BxeBqpGf.js} +1 -1
  78. package/src/client/dist/pwa/index.html +1 -1
  79. package/src/client/dist/pwa/sw.js +1 -1
  80. package/src/client/dist/pwa/assets/ComparisonPanel-DZAE2X9j.js +0 -2
  81. package/src/client/dist/pwa/assets/ComparisonPanel-x1iuICgd.css +0 -1
  82. package/src/client/dist/pwa/assets/DashboardPage-DsWn5cWl.css +0 -1
  83. package/src/client/dist/pwa/assets/DashboardPage-eQTCXcdz.js +0 -1
  84. package/src/client/dist/pwa/assets/WorkspacePage-MxBE0mr3.js +0 -4
  85. package/src/client/dist/pwa/assets/i18n-2UeMfd5m.js +0 -1
  86. package/src/client/dist/pwa/assets/index-BJU5dnkF.js +0 -20
@@ -1,4 +1,4 @@
1
- import{St as e,rt as t}from"./index-BJU5dnkF.js";var n;function r(e){if(e.length===0)throw Error(`Invalid tail call`);return[e.slice(0,e.length-1),e[e.length-1]]}function i(e,t,n=(e,t)=>e===t){if(e===t)return!0;if(!e||!t||e.length!==t.length)return!1;for(let r=0,i=e.length;r<i;r++)if(!n(e[r],t[r]))return!1;return!0}function a(e,t){let n=e.length-1;t<n&&(e[t]=e[n]),e.pop()}function o(e,t,n){return s(e.length,r=>n(e[r],t))}function s(e,t){let n=0,r=e-1;for(;n<=r;){let e=(n+r)/2|0,i=t(e);if(i<0)n=e+1;else if(i>0)r=e-1;else return e}return-(n+1)}function c(e,t,n){if(e|=0,e>=t.length)throw TypeError(`invalid index`);let r=t[Math.floor(t.length*Math.random())],i=[],a=[],o=[];for(let e of t){let t=n(e,r);t<0?i.push(e):t>0?a.push(e):o.push(e)}return e<i.length?c(e,i,n):e<i.length+o.length?o[0]:c(e-(i.length+o.length),a,n)}function l(e,t){let n=[],r;for(let i of e.slice(0).sort(t))!r||t(r[0],i)!==0?(r=[i],n.push(r)):r.push(i);return n}function*u(e,t){let n,r;for(let i of e)r!==void 0&&t(r,i)?n.push(i):(n&&(yield n),n=[i]),r=i;n&&(yield n)}function d(e,t){for(let n=0;n<=e.length;n++)t(n===0?void 0:e[n-1],n===e.length?void 0:e[n])}function f(e,t){for(let n=0;n<e.length;n++)t(n===0?void 0:e[n-1],e[n],n+1===e.length?void 0:e[n+1])}function p(e){return e.filter(e=>!!e)}function m(e){let t=0;for(let n=0;n<e.length;n++)e[n]&&(e[t]=e[n],t+=1);e.length=t}function h(e){return!Array.isArray(e)||e.length===0}function g(e){return Array.isArray(e)&&e.length>0}function _(e,t=e=>e){let n=new Set;return e.filter(e=>{let r=t(e);return!n.has(r)&&(n.add(r),!0)})}function v(e,t){let n=typeof t==`number`?e:0;typeof t==`number`?n=e:(n=0,t=e);let r=[];if(n<=t)for(let e=n;e<t;e++)r.push(e);else for(let e=n;e>t;e--)r.push(e);return r}function y(e,t,n){let r=e.slice(0,t),i=e.slice(t);return r.concat(n,i)}function b(e,t){let n=e.indexOf(t);n>-1&&(e.splice(n,1),e.unshift(t))}function x(e,t){let n=e.indexOf(t);n>-1&&(e.splice(n,1),e.push(t))}function S(e,t){for(let n of t)e.push(n)}function C(e,t){let n=[];for(let r of e){let e=t(r);e!==void 0&&n.push(e)}return n}function w(e){return Array.isArray(e)?e:[e]}function ee(e,t,n){let r=ne(e,t),i=e.length,a=n.length;e.length=i+a;for(let t=i-1;t>=r;t--)e[t+a]=e[t];for(let t=0;t<a;t++)e[t+r]=n[t]}function te(e,t,n,r){let i=ne(e,t),a=e.splice(i,n);return a===void 0&&(a=[]),ee(e,i,r),a}function ne(e,t){return t<0?Math.max(t+e.length,0):Math.min(t,e.length)}var re;(function(e){function t(e){return e<0}e.isLessThan=t;function n(e){return e<=0}e.isLessThanOrEqual=n;function r(e){return e>0}e.isGreaterThan=r;function i(e){return e===0}e.isNeitherLessOrGreaterThan=i,e.greaterThan=1,e.lessThan=-1,e.neitherLessOrGreaterThan=0})(re||={});function ie(e,t){return(n,r)=>t(e(n),e(r))}function ae(...e){return(t,n)=>{for(let r of e){let e=r(t,n);if(!re.isNeitherLessOrGreaterThan(e))return e}return re.neitherLessOrGreaterThan}}var oe=(e,t)=>e-t,se=(e,t)=>oe(+!!e,+!!t);function ce(e){return(t,n)=>-e(t,n)}function le(e){return(t,n)=>t===void 0?n===void 0?re.neitherLessOrGreaterThan:re.lessThan:n===void 0?re.greaterThan:e(t,n)}var ue=class{constructor(e){this.firstIdx=0,this.items=e,this.lastIdx=this.items.length-1}get length(){return this.lastIdx-this.firstIdx+1}takeWhile(e){let t=this.firstIdx;for(;t<this.items.length&&e(this.items[t]);)t++;let n=t===this.firstIdx?null:this.items.slice(this.firstIdx,t);return this.firstIdx=t,n}peek(){if(this.length!==0)return this.items[this.firstIdx]}dequeue(){let e=this.items[this.firstIdx];return this.firstIdx++,e}takeCount(e){let t=this.items.slice(this.firstIdx,this.firstIdx+e);return this.firstIdx+=e,t}},de=class e{constructor(e){this.iterate=e}toArray(){let e=[];return this.iterate(t=>(e.push(t),!0)),e}filter(t){return new e(e=>this.iterate(n=>!t(n)||e(n)))}map(t){return new e(e=>this.iterate(n=>e(t(n))))}findLast(e){let t;return this.iterate(n=>(e(n)&&(t=n),!0)),t}findLastMaxBy(e){let t,n=!0;return this.iterate(r=>((n||re.isGreaterThan(e(r,t)))&&(n=!1,t=r),!0)),t}};n=de,n.empty=new n(e=>{});var fe=class e{constructor(e){this._indexMap=e}static createSortPermutation(t,n){let r=Array.from(t.keys()).sort((e,r)=>n(t[e],t[r]));return new e(r)}apply(e){return e.map((t,n)=>e[this._indexMap[n]])}inverse(){let t=this._indexMap.slice();for(let e=0;e<this._indexMap.length;e++)t[this._indexMap[e]]=e;return new e(t)}};function pe(e){return e.reduce((e,t)=>e+t,0)}var me=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?Ee.isErrorNoTelemetry(e)?new Ee(e.message+`
1
+ import{St as e,rt as t}from"./index-VL3fI9a3.js";var n;function r(e){if(e.length===0)throw Error(`Invalid tail call`);return[e.slice(0,e.length-1),e[e.length-1]]}function i(e,t,n=(e,t)=>e===t){if(e===t)return!0;if(!e||!t||e.length!==t.length)return!1;for(let r=0,i=e.length;r<i;r++)if(!n(e[r],t[r]))return!1;return!0}function a(e,t){let n=e.length-1;t<n&&(e[t]=e[n]),e.pop()}function o(e,t,n){return s(e.length,r=>n(e[r],t))}function s(e,t){let n=0,r=e-1;for(;n<=r;){let e=(n+r)/2|0,i=t(e);if(i<0)n=e+1;else if(i>0)r=e-1;else return e}return-(n+1)}function c(e,t,n){if(e|=0,e>=t.length)throw TypeError(`invalid index`);let r=t[Math.floor(t.length*Math.random())],i=[],a=[],o=[];for(let e of t){let t=n(e,r);t<0?i.push(e):t>0?a.push(e):o.push(e)}return e<i.length?c(e,i,n):e<i.length+o.length?o[0]:c(e-(i.length+o.length),a,n)}function l(e,t){let n=[],r;for(let i of e.slice(0).sort(t))!r||t(r[0],i)!==0?(r=[i],n.push(r)):r.push(i);return n}function*u(e,t){let n,r;for(let i of e)r!==void 0&&t(r,i)?n.push(i):(n&&(yield n),n=[i]),r=i;n&&(yield n)}function d(e,t){for(let n=0;n<=e.length;n++)t(n===0?void 0:e[n-1],n===e.length?void 0:e[n])}function f(e,t){for(let n=0;n<e.length;n++)t(n===0?void 0:e[n-1],e[n],n+1===e.length?void 0:e[n+1])}function p(e){return e.filter(e=>!!e)}function m(e){let t=0;for(let n=0;n<e.length;n++)e[n]&&(e[t]=e[n],t+=1);e.length=t}function h(e){return!Array.isArray(e)||e.length===0}function g(e){return Array.isArray(e)&&e.length>0}function _(e,t=e=>e){let n=new Set;return e.filter(e=>{let r=t(e);return!n.has(r)&&(n.add(r),!0)})}function v(e,t){let n=typeof t==`number`?e:0;typeof t==`number`?n=e:(n=0,t=e);let r=[];if(n<=t)for(let e=n;e<t;e++)r.push(e);else for(let e=n;e>t;e--)r.push(e);return r}function y(e,t,n){let r=e.slice(0,t),i=e.slice(t);return r.concat(n,i)}function b(e,t){let n=e.indexOf(t);n>-1&&(e.splice(n,1),e.unshift(t))}function x(e,t){let n=e.indexOf(t);n>-1&&(e.splice(n,1),e.push(t))}function S(e,t){for(let n of t)e.push(n)}function C(e,t){let n=[];for(let r of e){let e=t(r);e!==void 0&&n.push(e)}return n}function w(e){return Array.isArray(e)?e:[e]}function ee(e,t,n){let r=ne(e,t),i=e.length,a=n.length;e.length=i+a;for(let t=i-1;t>=r;t--)e[t+a]=e[t];for(let t=0;t<a;t++)e[t+r]=n[t]}function te(e,t,n,r){let i=ne(e,t),a=e.splice(i,n);return a===void 0&&(a=[]),ee(e,i,r),a}function ne(e,t){return t<0?Math.max(t+e.length,0):Math.min(t,e.length)}var re;(function(e){function t(e){return e<0}e.isLessThan=t;function n(e){return e<=0}e.isLessThanOrEqual=n;function r(e){return e>0}e.isGreaterThan=r;function i(e){return e===0}e.isNeitherLessOrGreaterThan=i,e.greaterThan=1,e.lessThan=-1,e.neitherLessOrGreaterThan=0})(re||={});function ie(e,t){return(n,r)=>t(e(n),e(r))}function ae(...e){return(t,n)=>{for(let r of e){let e=r(t,n);if(!re.isNeitherLessOrGreaterThan(e))return e}return re.neitherLessOrGreaterThan}}var oe=(e,t)=>e-t,se=(e,t)=>oe(+!!e,+!!t);function ce(e){return(t,n)=>-e(t,n)}function le(e){return(t,n)=>t===void 0?n===void 0?re.neitherLessOrGreaterThan:re.lessThan:n===void 0?re.greaterThan:e(t,n)}var ue=class{constructor(e){this.firstIdx=0,this.items=e,this.lastIdx=this.items.length-1}get length(){return this.lastIdx-this.firstIdx+1}takeWhile(e){let t=this.firstIdx;for(;t<this.items.length&&e(this.items[t]);)t++;let n=t===this.firstIdx?null:this.items.slice(this.firstIdx,t);return this.firstIdx=t,n}peek(){if(this.length!==0)return this.items[this.firstIdx]}dequeue(){let e=this.items[this.firstIdx];return this.firstIdx++,e}takeCount(e){let t=this.items.slice(this.firstIdx,this.firstIdx+e);return this.firstIdx+=e,t}},de=class e{constructor(e){this.iterate=e}toArray(){let e=[];return this.iterate(t=>(e.push(t),!0)),e}filter(t){return new e(e=>this.iterate(n=>!t(n)||e(n)))}map(t){return new e(e=>this.iterate(n=>e(t(n))))}findLast(e){let t;return this.iterate(n=>(e(n)&&(t=n),!0)),t}findLastMaxBy(e){let t,n=!0;return this.iterate(r=>((n||re.isGreaterThan(e(r,t)))&&(n=!1,t=r),!0)),t}};n=de,n.empty=new n(e=>{});var fe=class e{constructor(e){this._indexMap=e}static createSortPermutation(t,n){let r=Array.from(t.keys()).sort((e,r)=>n(t[e],t[r]));return new e(r)}apply(e){return e.map((t,n)=>e[this._indexMap[n]])}inverse(){let t=this._indexMap.slice();for(let e=0;e<this._indexMap.length;e++)t[this._indexMap[e]]=e;return new e(t)}};function pe(e){return e.reduce((e,t)=>e+t,0)}var me=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?Ee.isErrorNoTelemetry(e)?new Ee(e.message+`
2
2
 
3
3
  `+e.stack):Error(e.message+`
4
4
 
@@ -1 +1 @@
1
- import{xt as e}from"./index-BJU5dnkF.js";function t(){let{t}=e();function n(e){let n=typeof e==`string`?new Date(e).getTime():e.getTime(),r=Date.now()-n,i=Math.floor(r/6e4);if(i<1)return t(`common.justNow`);if(i<60)return t(`common.minutesAgo`,{count:i});let a=Math.floor(i/60);if(a<24)return t(`common.hoursAgo`,{count:a});let o=Math.floor(a/24);return t(`common.daysAgo`,{count:o})}return{timeAgo:n}}export{t};
1
+ import{xt as e}from"./index-VL3fI9a3.js";function t(){let{t}=e();function n(e){let n=typeof e==`string`?new Date(e).getTime():e.getTime(),r=Date.now()-n,i=Math.floor(r/6e4);if(i<1)return t(`common.justNow`);if(i<60)return t(`common.minutesAgo`,{count:i});let a=Math.floor(i/60);if(a<24)return t(`common.hoursAgo`,{count:a});let o=Math.floor(a/24);return t(`common.daysAgo`,{count:o})}return{timeAgo:n}}export{t};
@@ -14,4 +14,4 @@ KOBO_PR_NUMBER — numéro de PR/MR sur la forge résolue (vide si aucune o
14
14
  # Ou directement via git (fonctionne sur GitHub même après suppression de la branche) :
15
15
  git fetch origin pull/[numéro-pr]/head:[nom-branche]
16
16
  git worktree add [chemin] [nom-branche]`,"settings.purgeDocsRestoreFootnote":`GitHub conserve la ref HEAD de la PR bien après la suppression de la branche source (mois / années). L'auto-détection tourne dans le watcher 30s — pas besoin d'action dans l'UI une fois le dossier recréé.`,"settings.purgeDocsPermissionsTitle":`Éviter les erreurs de permissions pendant la suppression`,"settings.purgeDocsPermissionsIntro":`Docker laisse souvent des fichiers root-owned dans node_modules / vendor à l'intérieur du worktree. Quand Kōbō essaie de les supprimer, tu tombes sur EACCES / EPERM et la purge échoue. Deux moyens de prévenir :`,"settings.purgeDocsPermissionsDocker":'Configurer ton conteneur pour qu\'il tourne sous ton utilisateur hôte — directive USER dans le Dockerfile, ou `user: "${UID}:${GID}"` dans docker-compose (avec UID/GID exportés dans ton shell).',"settings.purgeDocsPermissionsAcl":`Pré-définir un ACL par défaut sur la racine des worktrees — filet de sécurité qui marche dans la PLUPART des cas (ext4/btrfs/xfs + bind mount Docker classique). Chaque nouveau fichier hérite alors d'une entrée d'accès pour ton user, en plus du propriétaire nominal :`,"settings.purgeDocsPermissionsAclCommand":` setfacl -d -m u:$(whoami):rwX [racine-worktrees]`,"settings.purgeDocsPermissionsFootnote":"Limites des ACL : ne marchent PAS sur les volumes Docker nommés (utilise un bind mount), filesystems sans support ACL (NTFS, exFAT, tmpfs), SELinux strict avec `:Z`, ou `userns-remap` Docker activé. La solution la plus fiable reste de configurer le user dans le conteneur (option 1). Astuce : `rwX` (X majuscule) n'ajoute le bit exécutable qu'aux dossiers et fichiers déjà exécutables — plus propre que `rwx` qui rendrait exécutables tous les fichiers texte.","settings.purgeDocsPermissionsRecoverTitle":`Débloquer un worktree déjà cassé (fichiers root-owned existants)`,"settings.purgeDocsPermissionsRecoverIntro":`Si tu te retrouves avec un worktree déjà rempli de fichiers root-owned (Docker a déjà tourné, vendor / node_modules sont coincés), les ACL préventives ci-dessus ne suffisent pas — il faut traiter les fichiers EXISTANTS. Deux approches, à exécuter dans le dossier du worktree :`,"settings.purgeDocsPermissionsRecoverAclIntro":`Option A — ACL récursive (préserve l'ownership root pour audit, t'ajoute juste un accès en parallèle) :`,"settings.purgeDocsPermissionsRecoverAclCommand":`# pose l'ACL par défaut pour les futurs fichiers ET donne accès à tout l'existant
17
- sudo setfacl -Rd -m u:$(whoami):rwX . && sudo setfacl -R -m u:$(whoami):rwX .`,"settings.purgeDocsPermissionsRecoverChownIntro":`Option B — Reprendre la propriété (plus simple, perd l'info "créé par root dans le conteneur" mais osef en pratique) :`,"settings.purgeDocsPermissionsRecoverChownCommand":` sudo chown -R $(whoami):$(whoami) .`,"settings.purgeDocsPermissionsRecoverFootnote":"Astuce : tu peux exécuter ces commandes directement sur la racine de tes worktrees (ex. `~/.worktrees/`) pour couvrir tous les workspaces existants ET futurs d'un seul coup. Une fois fait, la purge Kōbō fonctionnera sans erreur de permission.","contextMenu.runSetup":`Lancer le script de setup`,"contextMenu.exportEvents":`Exporter les events (CSV)`,"contextMenu.dismissChangesRequested":`Marquer « Modifications demandées » comme vu`,"contextMenu.dismissCiFailure":`Marquer « CI en échec » comme vu`,"contextMenu.restoreChangesRequested":`Marquer « Modifications demandées » comme non vu`,"contextMenu.restoreCiFailure":`Marquer « CI en échec » comme non vu`,"contextMenu.exportingEvents":`Préparation de l'export…`,"contextMenu.exportEventsError":`Échec de l'export des events`,"contextMenu.openNotion":`Ouvrir dans Notion`,"contextMenu.openSentry":`Ouvrir dans Sentry`,"contextMenu.openPr":`Ouvrir la PR`,"contextMenu.ignorePrWatch":`Ignorer les checks PR`,"contextMenu.resumePrWatch":`Réactiver les checks PR`,"contextMenu.prWatchToggleFailed":`Échec de la mise à jour des checks PR`,"workspace.favorite":`Ajouter aux favoris`,"workspace.unfavorite":`Retirer des favoris`,"workspace.showFavoritesOnly":`Afficher uniquement les favoris`,"workspace.searchArchivedToggle":`Inclure les workspaces archivés dans la recherche`,"workspace.descriptionPlaceholder":`Ajouter une courte description`,"workspace.descriptionDialogHint":`Texte brut, 200 caractères maximum. Laisser vide pour effacer.`,"workspace.descriptionTooLong":`La description doit faire 200 caractères ou moins.`,"workspace.descriptionSaveFailed":`Échec de l'enregistrement de la description.`,"workspace.agentDescriptionTooltip":`État en direct maintenu par l'agent`,"mcp.tool.setWorkspaceDescription":`Définit la courte description du workspace (≤ 200 caractères).`,"tags.manage":`Gérer les tags`,"tags.manageTitle":`Gérer les tags du workspace`,"tags.noTagsDefined":`Aucun tag défini. Ajoutes-en dans Paramètres > Global > Tags.`,"tags.orphanedHint":`{count} tag(s) ne sont plus dans le catalogue global. Décoche-les pour les retirer.`,"settings.tagsTitle":`Tags des workspaces`,"settings.tagsHint":`Définis les tags assignables aux workspaces. Tape pour ajouter, clique la croix pour retirer.`,"settings.tagsLabel":`Tags disponibles`,"settings.branchPrefixesTitle":`Préfixes de branche`,"settings.branchPrefixesHint":`Gérez les préfixes de branche Git disponibles sur la page de création. Le premier est présélectionné par défaut.`,"settings.branchPrefixesEmpty":`Aucun préfixe de branche défini. Ajoutez-en au moins un ci-dessous.`,"settings.branchPrefixesAddLabel":`Nouveau préfixe`,"settings.branchPrefixesEditHint":`Cliquer pour renommer`,"settings.branchPrefixesMoveUp":`Monter`,"settings.branchPrefixesMoveDown":`Descendre`,"settings.worktreesTitle":`Worktrees Git`,"settings.worktreesHint":`Choisis où créer les worktrees des nouveaux workspaces. Les chemins relatifs sont résolus depuis le projet ; les chemins absolus Linux/macOS et Windows, $HOME, ~ et %USERPROFILE% sont supportés.`,"settings.worktreesPathLabel":`Chemin des worktrees`,"settings.worktreesPathRequired":`Le chemin des worktrees est requis.`,"settings.worktreesPrefixByProject":`Préfixer les worktrees par le nom du projet`,"settings.worktreesPrefixByProjectHint":`Place chaque worktree dans un sous-dossier nommé d'après le projet, pour éviter les collisions quand plusieurs projets partagent la même racine.`,"settings.shareTitle":`Partager la configuration`,"settings.shareHint":`Exporte tes paramètres, templates et tags en bundle JSON. Les clés MCP sont retirées à l’export pour la sécurité.`,"settings.exportConfig":`Exporter`,"settings.importConfig":`Importer`,"settings.exportSuccess":`Configuration exportée`,"settings.importSuccess":`Configuration importée`,"settings.importConfirmTitle":`Importer la configuration`,"settings.importConfirmMessage":`Cela remplacera tes paramètres, templates et tags actuels. Tes clés MCP seront conservées. Continuer ?`,"settings.network.title":`Accès réseau`,"settings.network.hint":`Pilote Kōbō depuis un autre appareil de ton LAN de confiance. Off = localhost uniquement. On = accessible sur ton réseau, protégé par un token. Redémarre Kōbō après bascule.`,"settings.network.enable":`Activer l'accès réseau`,"settings.network.behindProxy":`Derrière un reverse proxy`,"settings.network.behindProxyHint":`Kōbō ne peut plus distinguer ta propre machine d'une requête relayée — même le localhost devra présenter le token désormais. N'active ceci que si un reverse proxy (Traefik, nginx, Caddy…) est devant Kōbō.`,"settings.network.restartRequired":`Redémarre Kōbō pour appliquer la nouvelle adresse de bind.`,"settings.network.token":`Token d'accès`,"settings.network.copy":`Copier`,"settings.network.copied":`Copié`,"settings.network.regenerate":`Régénérer`,"settings.network.regenerateConfirm":`Régénérer le token ? Les appareils connectés devront utiliser le nouveau token.`,"settings.network.urls":`URLs LAN`,"settings.network.scan":`Scanner pour se connecter`,"settings.network.noUrls":`Aucune adresse LAN détectée.`,"settings.network.loadFailed":`Échec du chargement des réglages d'accès réseau.`,"settings.network.updateFailed":`Échec de la mise à jour des réglages d'accès réseau.`,"settings.unsavedChanges.title":`Modifications non enregistrées`,"settings.unsavedChanges.message":`Ce projet a des modifications non enregistrées. Changer de projet les annulera.`,"settings.unsavedChanges.discard":`Ignorer et changer`,"settings.unsavedChanges.cancel":`Annuler`,"settings.loadFailed":`Les réglages n’ont pas pu être chargés`,"settings.loadFailedHint":`L’enregistrement est désactivé : le formulaire affiche les valeurs par défaut, et les écrire remplacerait votre configuration réelle.`,"health.title":`Santé`,"health.tooltip":`Santé du système`,"changelog.title":`Journal des changements`,"changelog.tooltip":`Quoi de neuf dans Kōbō`,"changelog.empty":`Aucun changelog disponible.`,"changelog.current":`actuelle`,"changelog.currentVersion":`Version actuelle : v{version}`,"health.envTitle":`Environnement`,"health.version":`Version`,"health.koboHome":`Kōbō home`,"health.dbTitle":`Base de données`,"health.dbPath":`Chemin`,"health.dbSize":`Taille`,"health.schemaVersion":`Version du schéma`,"health.settingsSchemaVersion":`Schéma settings`,"health.runtimesTitle":`Moteurs d'agent`,"health.claudeCliTitle":`Claude Code`,"health.claudeCliMissing":`claude introuvable dans le PATH`,"health.codexCliTitle":`OpenAI Codex`,"health.codexCliMissing":`binaire codex introuvable`,"health.forgeCliTitle":`CLI de forge (gh / glab)`,"health.forgeCliMissing":`Ni gh ni glab trouvés — pull requests et surveillance de CI indisponibles`,"health.workspacesTitle":`Workspaces`,"health.workspacesCount":`{total} au total, {archived} archivés`,"health.worktreesMissing":`{count} worktree(s) manquant(s) sur le disque`,"health.sessionsTitle":`Sessions agent`,"health.sessionsOrphaned":`{n} session(s) orpheline(s) marquées running`,"health.integrationsTitle":`Intégrations`,"health.integrationConfigured":`configurée`,"health.integrationMissing":`non configurée`,"health.integrationDisabled":`désactivée`,"settings.integrationEnabled":`Activer l’intégration`,"health.activeTitle":`État actif`,"health.activeQuotaBackoffs":`Quota backoffs en attente`,"health.activeWakeups":`Wakeups programmés`,"health.activeAutoLoop":`Auto-loop en cours`,"health.activeAgentSessions":`Sessions agent en cours`,"health.activeDevServers":`Serveurs de dev lancés`,"health.noneActive":`Aucun.`,"health.quotaResumeAt":`reprise à {time}`,"health.wakeupAt":`réveil à {time}`,"health.startedAgo":`démarré il y a {time}`,"health.autoLoopReady":`prêt, itération en cours`,"health.autoLoopGrooming":`grooming en cours`,"session.started":`Session démarrée`,"session.ended":`Session terminée`,"session.compacted":`Contexte compacté`,"session.endedCompleted":`Tour terminé — envoyez un message pour continuer`,"session.endedKilled":`Session arrêtée`,"session.endedError":`Session terminée sur une erreur`,"session.endedWatchdog":`Session fermée de force après une période d'inactivité`,"tool.running":`En cours...`,"activity.raw_lines":`Lignes de sortie brutes ({n})`,"activity.loading_older":`Chargement des messages plus anciens…`,"activity.compacting":`Compaction du contexte…`,"activity.prev_user_message":`Message utilisateur précédent`,"activity.scroll_to_bottom":`Défiler vers le bas`,"activity.empty":`Rien pour l’instant`,"activity.emptyHint":`La sortie de l’agent s’affichera ici dès qu’une session démarrera.`,"activity.a11y.region":`Annonces d’activité de l’agent`,"activity.a11y.agentSaid":`Agent : {text}`,"activity.a11y.toolStarted":`Outil {name} démarré`,"activity.a11y.toolFinished":`Outil {name} terminé`,"activity.a11y.toolFailed":`Outil {name} en échec`,"chat.systemPrompt":`Prompt système`,"chat.agent":`Agent`,"chat.cleanupScript":`Script de cleanup`,"chat.archiveScript":`Script d'archivage`,"chat.setupScript":`Script de setup`,"chat.hookScript":`Hook {event}`,"chat.scriptDone":`Fait`,"chat.scriptComplete":`[{phase}] Terminé`,"chat.scriptError":`[{phase}] Erreur : {message}`,"chat.unknownError":`inconnue`,"chat.you":`Vous`,"chat.session":`Session`,"chat.nActions":`{n} action | {n} actions`,"chat.lastUpdatedAt":`Dernière mise à jour à {time}`,"chat.scrollToTurnTop":`Défiler vers le haut du message`,"migration.backing_up":`Sauvegarde de la base de données…`,"migration.running":`Migration des données d'agent — {processed}/{total}`,"migration.error":`Échec de la migration`,"migration.backup_location":`Une sauvegarde a été enregistrée à {path}. Redémarre Kōbō pour réessayer.`,"migration.retry":`Redémarre Kōbō pour réessayer.`,"engine.select":`Moteur`,"engine.model":`Modèle`,"engine.effort":`Effort de réflexion`,"wakeup.scheduledIn":`Prochain réveil dans {n}s`,"wakeup.scheduledAt":`Prochain réveil à {time}`,"wakeup.firing":`Réveil en cours…`,"wakeup.reason":`Raison : {reason}`,"wakeup.cancel":`Annuler ce réveil`,"wakeup.pendingIndicator":`Réveil programmé`,"cron.pendingIndicator":`{n} cron(s) programmé(s)`,"schedule.tabLabel":`Programmation`,"schedule.panelTitle":`Automatisation`,"schedule.panelDescription":`Réveiller ce workspace plus tard ou exécuter des instructions selon un planning.`,"schedule.activeTitle":`Planifications actives`,"schedule.emptyTitle":`Aucune planification`,"schedule.emptyDescription":`Créez un réveil ponctuel ou une tâche récurrente ci-dessous.`,"schedule.cancelWakeup":`Annuler ce réveil`,"schedule.cancelCron":`Supprimer cette tâche récurrente`,"schedule.createTitle":`Créer une planification`,"schedule.createDescription":`Choisissez quand et comment l'agent doit s'exécuter.`,"schedule.typeWakeup":`Réveil ponctuel`,"schedule.typeRecurring":`Tâche récurrente`,"schedule.wakeupDescription":`Exécuter le prompt une fois après un délai.`,"schedule.cronDescription":`Exécuter le prompt régulièrement selon une fréquence fixe.`,"schedule.promptHint":`Instructions qui seront envoyées à l'agent`,"schedule.frequencyTitle":`Fréquence`,"schedule.advancedDescription":`Utiliser une expression cron brute`,"schedule.cronExpressionLabel":`Expression cron`,"schedule.sessionModeTitle":`Session d'exécution`,"schedule.modeResume":`Reprendre la session`,"schedule.oneShotHint":`Supprimer cette planification après sa première exécution.`,"schedule.wakeupTitle":`Wakeup en attente`,"schedule.cronsTitle":`Tâches récurrentes`,"schedule.noWakeup":`Aucun wakeup programmé`,"schedule.noCrons":`Aucun cron programmé`,"schedule.nextFireAt":`prochain à {time}`,"schedule.lastFiredAt":`dernier fire il y a {time}`,"schedule.addCronTitle":`Ajouter une tâche récurrente`,"schedule.addWakeupTitle":`Programmer un réveil`,"schedule.every":`Toutes les`,"schedule.unitMinutes":`minutes`,"schedule.unitHours":`heures`,"schedule.unitDays":`jours`,"schedule.daysDriftWarning":`L'intervalle peut se réduire à 1 jour en fin de mois (limitation du format cron).`,"schedule.advancedExpression":`Expression avancée (optionnel)`,"schedule.advancedHint":`Cron brut (ex. */15 * * * *) ou {'@'}hourly/{'@'}daily — remplace le sélecteur si rempli.`,"schedule.promptLabel":`Prompt`,"schedule.labelOptional":`Libellé (optionnel)`,"schedule.delayMinutes":`Délai (minutes)`,"schedule.modeFresh":`Nouvelle session`,"schedule.oneShot":`Une seule fois`,"schedule.addCronBtn":`Ajouter le cron`,"schedule.addWakeupBtn":`Programmer le réveil`,"schedule.cronCreated":`Tâche récurrente ajoutée`,"schedule.wakeupCreated":`Réveil programmé`,"askUserQuestion.title":`L'agent te pose une question`,"askUserQuestion.submit":`Envoyer la réponse`,"askUserQuestion.multiSelectHint":`Sélectionne une ou plusieurs options`,"askUserQuestion.otherOption":`Autre`,"askUserQuestion.otherOptionHint":`précisez dans votre prochain message`,"askUserQuestion.freeFormLabel":`Précisez votre réponse`,"askUserQuestion.freeFormHint":`Cette réponse sera envoyée directement à l'agent.`,"askUserQuestion.noPending":`Aucune question en attente`,"askUserQuestion.next":`Suivant`,"askUserQuestion.previous":`Précédent`,"askUserQuestion.cancel":`Annuler`,"askUserQuestion.cancelTooltip":`Sauter cette question — l'agent continuera sans réponse`,"askUserQuestion.collapse":`Réduire le panneau de question`,"askUserQuestion.expand":`Agrandir le panneau de question`,"permissionRequest.title":`L'agent veut utiliser un outil`,"permissionRequest.allow":`Autoriser`,"permissionRequest.allowOnce":`Autoriser une fois`,"permissionRequest.allowTurn":`Autoriser ce tour`,"permissionRequest.allowOperation":`Toujours cette opération`,"permissionRequest.allowTool":`Toujours cet outil`,"permissionRequest.deny":`Refuser`,"permissionRequest.tool":`Outil`,"permissionRequest.input":`Entrée`,"permissionRequest.rawInput":`Détails techniques`,"permissionRequest.collapse":`Réduire le panneau de permission`,"permissionRequest.expand":`Agrandir le panneau de permission`,"permissionRequest.denied":`refusé par l'utilisateur`,"workspaceStatus.created":`créé`,"workspaceStatus.extracting":`extraction`,"workspaceStatus.brainstorming":`brainstorming`,"workspaceStatus.executing":`en cours`,"workspaceStatus.awaitingUser":`en attente de ta réponse`,"workspaceStatus.completed":`terminé`,"workspaceStatus.idle":`inactif`,"workspaceStatus.error":`erreur`,"workspaceStatus.quota":`quota atteint`,"workspaceStatus.retrying":`reprise automatique`,"workspaceList.prOpen":`#{n} — Pull request ouverte`,"workspaceList.prWatchDisabledIndicator":`Checks PR ignorés pour ce workspace`,"workspaceList.prChangesRequested":`#{n} — Modifications demandées`,"workspaceList.attentionCiFailed":`CI en échec`,"workspaceList.attentionChangesRequested":`Modifications demandées`,"workspaceList.attentionReadyToMerge":`Prêt à merger`,"autoLoop.toggle":`Auto-loop`,"autoLoop.start":`Démarrer l'auto-loop`,"autoLoop.prepare":`Préparer pour auto-loop`,"autoLoop.reprepare":`Re-préparer pour auto-loop`,"autoLoop.reprepareTooltip":`Relancer la phase de grooming pour ajouter ou rafraîchir les tâches avant de relancer la boucle`,"autoLoop.prepareBusy":`Attendre la fin de l'agent avant de préparer`,"autoLoop.forceReady":`Je sais ce que je fais — passer le grooming`,"autoLoop.forceReadyConfirm":`Passer le grooming et marquer auto-loop prêt ? La boucle peut stagner si les tâches ne sont pas atomiques.`,"autoLoop.stop":`Arrêter l'auto-loop`,"autoLoop.notReady":`Lancer d'abord « Préparer pour auto-loop »`,"autoLoop.noTasks":`Ajouter d'abord des tâches`,"autoLoop.progress":`Auto-loop · {done}/{total} tâches`,"autoLoop.preparing":`Auto-loop · préparation`,"autoLoop.preparingTooltip":`Grooming en cours — l'agent crée / révise les tâches. La boucle démarrera quand il appellera mark_auto_loop_ready.`,"autoLoop.running":`Auto-loop en cours`,"autoLoop.startInMode":`Démarrer en mode auto-loop`,"autoLoop.brainstormModelPrefix":`Brainstorm :`,"autoLoop.brainstormModelTooltip":`Modèle utilisé uniquement pour la session de brainstorming initiale — chaque tâche ensuite utilise le modèle choisi au-dessus`,"autoLoop.brainstormReasoningPrefix":`Brainstorm :`,"autoLoop.brainstormReasoningTooltip":`Niveau de raisonnement utilisé uniquement pour la session de brainstorming initiale`,"autoLoop.executionModelPrefix":`Loop :`,"autoLoop.executionModelTooltip":`Modèle utilisé pour chaque tâche de l'auto-loop après la session de brainstorming initiale`,"autoLoop.sessionMode.perTask":`Nouvelle session par tâche`,"autoLoop.sessionMode.label":`Session :`,"autoLoop.sessionMode.perTaskTooltip":`Chaque tâche démarre une session Claude Code neuve, sans mémoire des tâches précédentes`,"autoLoop.sessionMode.continuous":`Session continue`,"autoLoop.sessionMode.continuousTooltip":`Toutes les tâches s'enchaînent dans la même session — l'agent garde tout le contexte, mais la session s'allonge au fil du temps`,"koboCommand.prepAutoloopDesc":`Préparer les tâches pour le mode auto-loop (atomicité)`,"staleSessionBanner.title":`Auto-loop en cours`,"staleSessionBanner.message":`Vous consultez une ancienne session — l'agent travaille actuellement dans la dernière.`,"staleSessionBanner.staleTitle":`Session précédente`,"staleSessionBanner.staleMessage":`Vous consultez une ancienne session — les messages envoyés iront dans cette session, pas la dernière.`,"staleSessionBanner.switchToCurrent":`Basculer sur la session active`,"network.login.title":`Accès réseau`,"network.login.description":`Ce Kōbō nécessite un token pour être piloté depuis le réseau. Colle le token affiché dans les Réglages sur la machine hôte.`,"network.login.tokenLabel":`Token`,"network.login.tokenPlaceholder":`Colle ton token`,"network.login.connect":`Se connecter`,"network.login.invalid":`Token invalide`,"network.login.serverError":`Erreur serveur — réessaie.`,"network.login.unreachable":`Kōbō est injoignable — vérifie ta connexion.`,"layout.toggleWorkspaces":`Afficher/masquer les espaces de travail`,"layout.togglePanel":`Afficher/masquer le panneau latéral`,"unsaved.title":`Quitter sans enregistrer ?`,"unsaved.message":`Vous avez des modifications non enregistrées. Quitter cette page les abandonne.`,"unsaved.leave":`Quitter`,"unsaved.stay":`Rester`,"prCheckout.staleRetriesExhausted":`L'état du dépôt a continué de changer pendant l'application de vos choix. Fermez cette fenêtre et réessayez depuis le sélecteur de pull request.`,"prPicker.title":`Importer depuis une pull request`,"prPicker.filterAll":`Toutes`,"prPicker.filterMine":`Les miennes`,"prPicker.filterReviewRequested":`Revue demandée`,"prPicker.searchPlaceholder":`Rechercher des pull requests…`,"prPicker.loadMore":`Charger plus`,"prPicker.empty":`Aucune pull request ouverte ne correspond.`,"prPicker.forkNotSupported":`Cette PR provient d'un fork ; Kōbō ne peut pas la checkout.`,"prPicker.loadFailed":`Échec du chargement des pull requests.`,"prPicker.badge.workspaceExists":`Déjà ouverte dans Kōbō`,"prPicker.badge.worktreePresent":`Worktree présente`,"prPicker.badge.localBranch":`Branche locale`,"prPicker.badge.new":`Nouvelle`,"prPicker.badge.draft":`Brouillon`,"prCheckout.title":`Préparer la worktree`,"prCheckout.apply":`Appliquer`,"prCheckout.cancel":`Annuler`,"prCheckout.retry":`Réessayer`,"prCheckout.diagnoseFailed":`Échec du diagnostic de la pull request.`,"prCheckout.resolveFailed":`Échec de la résolution du checkout de la pull request.`,"prCheckout.path.required":`Saisir un chemin de worktree qui n'existe pas encore.`,"prCheckout.workspace.restoreNotAvailable":"La restauration d'un workspace purgé n'est pas encore possible depuis cet écran. Recréez son dossier de worktree sur le disque (par ex. `git worktree add`) : Kōbō le rattachera automatiquement sous 30 secondes environ.","prCheckout.staleReloaded":`Le dépôt a changé ; le diagnostic a été rafraîchi.`,"prCheckout.step.blocked":`Impossible de continuer`,"prCheckout.step.path":`Emplacement de la worktree`,"prCheckout.step.workspace":`Workspace existant`,"prCheckout.step.worktree":`Worktree existante`,"prCheckout.step.operation":`Opération git en cours`,"prCheckout.step.changes":`Modifications non commitées`,"prCheckout.step.divergence":`Branche locale vs origin`,"prCheckout.workspace.activeHint":`Un workspace nommé « {name} » suit déjà cette branche.`,"prCheckout.workspace.open":`Ouvrir ce workspace`,"prCheckout.workspace.continue":`Continuer sur un autre chemin`,"prCheckout.workspace.unarchive":`Désarchiver et l'ouvrir`,"prCheckout.workspace.restore":`Recréer sa worktree`,"prCheckout.worktree.orphanHint":`Une worktree existe déjà sur cette branche à {path}.`,"prCheckout.worktree.attach":`L'attacher`,"prCheckout.worktree.branchInUse":`Cette branche est déjà extraite. Rattachez son worktree existant.`,"prCheckout.worktree.createElsewhere":`En créer une autre ailleurs`,"prCheckout.operation.hint":`Un {operation} est en cours dans cette worktree.`,"prCheckout.operation.abort":`Abandonner`,"prCheckout.operation.cancel":`Ne pas y toucher et s'arrêter ici`,"prCheckout.changes.hint":`{modified} modifié(s), {staged} indexé(s), {untracked} non suivi(s).`,"prCheckout.changes.stash":`Les stash`,"prCheckout.changes.commit":`Les commit`,"prCheckout.changes.discard":`Les abandonner (conservées dans un stash étiqueté)`,"prCheckout.changes.keepResetConflict":`Conserver les modifications est incompatible avec un reset. Faites un stash ou un commit, ou conservez la branche.`,"prCheckout.changes.keep":`Les laisser telles quelles`,"prCheckout.divergence.behindHint":`Votre branche a {behind} commit(s) de retard sur origin.`,"prCheckout.divergence.aheadHint":`Votre branche a {ahead} commit(s) non pushé(s).`,"prCheckout.divergence.divergedHint":`{ahead} en avance, {behind} en retard sur origin.`,"prCheckout.divergence.fastForward":`Fast-forward vers origin`,"prCheckout.divergence.rebase":`Rebase sur origin`,"prCheckout.divergence.resetHard":`Réinitialiser sur origin (une branche de sauvegarde est créée d'abord)`,"prCheckout.divergence.keep":`Conserver l'état local`,"prCheckout.blocked.forgeUnavailable":`Le CLI de la forge est absent ou non authentifié.`,"prCheckout.blocked.forkPr":`Cette PR provient d'un fork ; Kōbō ne peut pas la checkout.`,"prCheckout.blocked.headBranchDeleted":`La branche n'existe plus sur le remote.`,"prCheckout.blocked.indexLock":`Un autre processus git est en cours (index.lock est présent).`,"prCheckout.blocked.pathOccupied":`{path} existe déjà et n'est pas une worktree.`,"prCheckout.blocked.worktreeOtherBranch":`{path} est une worktree sur une autre branche ({branch}).`,"prCheckout.blocked.noCommonAncestor":`Une branche locale nommée {branch} existe avec un historique sans rapport.`,"split.title":`Vue double workspace`,"split.open":`Ouvrir côte à côte`,"split.openBeside":`Ouvrir à côté`,"split.close":`Fermer la vue double`,"split.left":`Workspace de gauche`,"split.right":`Workspace de droite`,"split.choose":`Choisir un workspace`,"split.recipient":`Envoyer à : {name}`,"absence.title":`Depuis ta dernière visite`,"absence.pending":`Changements à consulter`,"absence.retention":`Activité importante des 30 derniers jours, enregistrée depuis l’installation de cette fonctionnalité. Le suivi des visites est propre à ce navigateur.`,"absence.since":`Depuis le {date}`,"absence.error":`Impossible de charger l’activité.`,"absence.retry":`Réessayer`,"absence.empty":`Aucune nouvelle activité.`,"absence.more":`Charger la suite`,"absence.markRead":`Marquer les événements affichés comme lus`,"absence.kind.question":`Question posée`,"absence.kind.permission":`Autorisation demandée`,"absence.kind.completed":`Session terminée`,"absence.kind.error":`Erreur de l’agent`,"absence.kind.pr-merged":`PR mergée`,"absence.kind.pr-approved":`PR approuvée`,"absence.kind.pr-changes-requested":`Modifications demandées`,"absence.kind.pr-ci-failed":`CI en échec`,"absence.kind.pr-ci-recovered":`CI rétablie`,"absence.kind.pr-merge-conflict":`Conflit de merge`,"absence.kind.pr-ready-to-merge":`PR prête à merger`,"absence.kind.archived":`Workspace archivé`,"absence.kind.purged":`Worktree purgé`,"absence.kind.restored":`Worktree restauré`,"tours.split.controls.title":`Deux workspaces indépendants`,"tours.split.controls.description":`Choisis un workspace par panneau. Redimensionne la séparation ; chaque conversation garde son destinataire et ses panneaux.`,"tours.home.sort.title":`Trier les workspaces`,"tours.home.sort.description":`Choisis l’ordre et le sens dans chaque groupe. Ton choix est mémorisé.`,"tours.home.activity.title":`Consulter l’activité après une absence`,"tours.home.activity.description":`En bas du drawer gauche, retrouve les questions, fins de session, erreurs et changements de PR survenus pendant ton absence.`};export{e as default};
17
+ sudo setfacl -Rd -m u:$(whoami):rwX . && sudo setfacl -R -m u:$(whoami):rwX .`,"settings.purgeDocsPermissionsRecoverChownIntro":`Option B — Reprendre la propriété (plus simple, perd l'info "créé par root dans le conteneur" mais osef en pratique) :`,"settings.purgeDocsPermissionsRecoverChownCommand":` sudo chown -R $(whoami):$(whoami) .`,"settings.purgeDocsPermissionsRecoverFootnote":"Astuce : tu peux exécuter ces commandes directement sur la racine de tes worktrees (ex. `~/.worktrees/`) pour couvrir tous les workspaces existants ET futurs d'un seul coup. Une fois fait, la purge Kōbō fonctionnera sans erreur de permission.","contextMenu.runSetup":`Lancer le script de setup`,"contextMenu.exportEvents":`Exporter les events (CSV)`,"contextMenu.dismissChangesRequested":`Marquer « Modifications demandées » comme vu`,"contextMenu.dismissCiFailure":`Marquer « CI en échec » comme vu`,"contextMenu.restoreChangesRequested":`Marquer « Modifications demandées » comme non vu`,"contextMenu.restoreCiFailure":`Marquer « CI en échec » comme non vu`,"contextMenu.exportingEvents":`Préparation de l'export…`,"contextMenu.exportEventsError":`Échec de l'export des events`,"contextMenu.openNotion":`Ouvrir dans Notion`,"contextMenu.openSentry":`Ouvrir dans Sentry`,"contextMenu.openPr":`Ouvrir la PR`,"contextMenu.ignorePrWatch":`Ignorer les checks PR`,"contextMenu.resumePrWatch":`Réactiver les checks PR`,"contextMenu.prWatchToggleFailed":`Échec de la mise à jour des checks PR`,"workspace.favorite":`Ajouter aux favoris`,"workspace.unfavorite":`Retirer des favoris`,"workspace.showFavoritesOnly":`Afficher uniquement les favoris`,"workspace.searchArchivedToggle":`Inclure les workspaces archivés dans la recherche`,"workspace.descriptionPlaceholder":`Ajouter une courte description`,"workspace.descriptionDialogHint":`Texte brut, 200 caractères maximum. Laisser vide pour effacer.`,"workspace.descriptionTooLong":`La description doit faire 200 caractères ou moins.`,"workspace.descriptionSaveFailed":`Échec de l'enregistrement de la description.`,"workspace.agentDescriptionTooltip":`État en direct maintenu par l'agent`,"mcp.tool.setWorkspaceDescription":`Définit la courte description du workspace (≤ 200 caractères).`,"tags.manage":`Gérer les tags`,"tags.manageTitle":`Gérer les tags du workspace`,"tags.noTagsDefined":`Aucun tag défini. Ajoutes-en dans Paramètres > Global > Tags.`,"tags.orphanedHint":`{count} tag(s) ne sont plus dans le catalogue global. Décoche-les pour les retirer.`,"settings.tagsTitle":`Tags des workspaces`,"settings.tagsHint":`Définis les tags assignables aux workspaces. Tape pour ajouter, clique la croix pour retirer.`,"settings.tagsLabel":`Tags disponibles`,"settings.branchPrefixesTitle":`Préfixes de branche`,"settings.branchPrefixesHint":`Gérez les préfixes de branche Git disponibles sur la page de création. Le premier est présélectionné par défaut.`,"settings.branchPrefixesEmpty":`Aucun préfixe de branche défini. Ajoutez-en au moins un ci-dessous.`,"settings.branchPrefixesAddLabel":`Nouveau préfixe`,"settings.branchPrefixesEditHint":`Cliquer pour renommer`,"settings.branchPrefixesMoveUp":`Monter`,"settings.branchPrefixesMoveDown":`Descendre`,"settings.worktreesTitle":`Worktrees Git`,"settings.worktreesHint":`Choisis où créer les worktrees des nouveaux workspaces. Les chemins relatifs sont résolus depuis le projet ; les chemins absolus Linux/macOS et Windows, $HOME, ~ et %USERPROFILE% sont supportés.`,"settings.worktreesPathLabel":`Chemin des worktrees`,"settings.worktreesPathRequired":`Le chemin des worktrees est requis.`,"settings.worktreesPrefixByProject":`Préfixer les worktrees par le nom du projet`,"settings.worktreesPrefixByProjectHint":`Place chaque worktree dans un sous-dossier nommé d'après le projet, pour éviter les collisions quand plusieurs projets partagent la même racine.`,"settings.shareTitle":`Partager la configuration`,"settings.shareHint":`Exporte tes paramètres, templates et tags en bundle JSON. Les clés MCP sont retirées à l’export pour la sécurité.`,"settings.exportConfig":`Exporter`,"settings.importConfig":`Importer`,"settings.exportSuccess":`Configuration exportée`,"settings.importSuccess":`Configuration importée`,"settings.importConfirmTitle":`Importer la configuration`,"settings.importConfirmMessage":`Cela remplacera tes paramètres, templates et tags actuels. Tes clés MCP seront conservées. Continuer ?`,"settings.network.title":`Accès réseau`,"settings.network.hint":`Pilote Kōbō depuis un autre appareil de ton LAN de confiance. Off = localhost uniquement. On = accessible sur ton réseau, protégé par un token. Redémarre Kōbō après bascule.`,"settings.network.enable":`Activer l'accès réseau`,"settings.network.behindProxy":`Derrière un reverse proxy`,"settings.network.behindProxyHint":`Kōbō ne peut plus distinguer ta propre machine d'une requête relayée — même le localhost devra présenter le token désormais. N'active ceci que si un reverse proxy (Traefik, nginx, Caddy…) est devant Kōbō.`,"settings.network.restartRequired":`Redémarre Kōbō pour appliquer la nouvelle adresse de bind.`,"settings.network.token":`Token d'accès`,"settings.network.copy":`Copier`,"settings.network.copied":`Copié`,"settings.network.regenerate":`Régénérer`,"settings.network.regenerateConfirm":`Régénérer le token ? Les appareils connectés devront utiliser le nouveau token.`,"settings.network.urls":`URLs LAN`,"settings.network.scan":`Scanner pour se connecter`,"settings.network.noUrls":`Aucune adresse LAN détectée.`,"settings.network.loadFailed":`Échec du chargement des réglages d'accès réseau.`,"settings.network.updateFailed":`Échec de la mise à jour des réglages d'accès réseau.`,"settings.unsavedChanges.title":`Modifications non enregistrées`,"settings.unsavedChanges.message":`Ce projet a des modifications non enregistrées. Changer de projet les annulera.`,"settings.unsavedChanges.discard":`Ignorer et changer`,"settings.unsavedChanges.cancel":`Annuler`,"settings.loadFailed":`Les réglages n’ont pas pu être chargés`,"settings.loadFailedHint":`L’enregistrement est désactivé : le formulaire affiche les valeurs par défaut, et les écrire remplacerait votre configuration réelle.`,"health.title":`Santé`,"health.tooltip":`Santé du système`,"changelog.title":`Journal des changements`,"changelog.tooltip":`Quoi de neuf dans Kōbō`,"changelog.empty":`Aucun changelog disponible.`,"changelog.current":`actuelle`,"changelog.currentVersion":`Version actuelle : v{version}`,"health.envTitle":`Environnement`,"health.version":`Version`,"health.koboHome":`Kōbō home`,"health.dbTitle":`Base de données`,"health.dbPath":`Chemin`,"health.dbSize":`Taille`,"health.schemaVersion":`Version du schéma`,"health.settingsSchemaVersion":`Schéma settings`,"health.runtimesTitle":`Moteurs d'agent`,"health.claudeCliTitle":`Claude Code`,"health.claudeCliMissing":`claude introuvable dans le PATH`,"health.codexCliTitle":`OpenAI Codex`,"health.codexCliMissing":`binaire codex introuvable`,"health.forgeCliTitle":`CLI de forge (gh / glab)`,"health.forgeCliMissing":`Ni gh ni glab trouvés — pull requests et surveillance de CI indisponibles`,"health.workspacesTitle":`Workspaces`,"health.workspacesCount":`{total} au total, {archived} archivés`,"health.worktreesMissing":`{count} worktree(s) manquant(s) sur le disque`,"health.sessionsTitle":`Sessions agent`,"health.sessionsOrphaned":`{n} session(s) orpheline(s) marquées running`,"health.integrationsTitle":`Intégrations`,"health.integrationConfigured":`configurée`,"health.integrationMissing":`non configurée`,"health.integrationDisabled":`désactivée`,"settings.integrationEnabled":`Activer l’intégration`,"health.activeTitle":`État actif`,"health.activeQuotaBackoffs":`Quota backoffs en attente`,"health.activeWakeups":`Wakeups programmés`,"health.activeAutoLoop":`Auto-loop en cours`,"health.activeAgentSessions":`Sessions agent en cours`,"health.activeDevServers":`Serveurs de dev lancés`,"health.noneActive":`Aucun.`,"health.quotaResumeAt":`reprise à {time}`,"health.wakeupAt":`réveil à {time}`,"health.startedAgo":`démarré il y a {time}`,"health.autoLoopReady":`prêt, itération en cours`,"health.autoLoopGrooming":`grooming en cours`,"session.started":`Session démarrée`,"session.ended":`Session terminée`,"session.compacted":`Contexte compacté`,"session.endedCompleted":`Tour terminé — envoyez un message pour continuer`,"session.endedKilled":`Session arrêtée`,"session.endedError":`Session terminée sur une erreur`,"session.endedWatchdog":`Session fermée de force après une période d'inactivité`,"tool.running":`En cours...`,"activity.raw_lines":`Lignes de sortie brutes ({n})`,"activity.loading_older":`Chargement des messages plus anciens…`,"activity.compacting":`Compaction du contexte…`,"activity.prev_user_message":`Message utilisateur précédent`,"activity.scroll_to_bottom":`Défiler vers le bas`,"activity.empty":`Rien pour l’instant`,"activity.emptyHint":`La sortie de l’agent s’affichera ici dès qu’une session démarrera.`,"activity.a11y.region":`Annonces d’activité de l’agent`,"activity.a11y.agentSaid":`Agent : {text}`,"activity.a11y.toolStarted":`Outil {name} démarré`,"activity.a11y.toolFinished":`Outil {name} terminé`,"activity.a11y.toolFailed":`Outil {name} en échec`,"chat.systemPrompt":`Prompt système`,"chat.agent":`Agent`,"chat.cleanupScript":`Script de cleanup`,"chat.archiveScript":`Script d'archivage`,"chat.setupScript":`Script de setup`,"chat.hookScript":`Hook {event}`,"chat.scriptDone":`Fait`,"chat.scriptComplete":`[{phase}] Terminé`,"chat.scriptError":`[{phase}] Erreur : {message}`,"chat.unknownError":`inconnue`,"chat.you":`Vous`,"chat.session":`Session`,"chat.nActions":`{n} action | {n} actions`,"chat.lastUpdatedAt":`Dernière mise à jour à {time}`,"chat.scrollToTurnTop":`Défiler vers le haut du message`,"migration.backing_up":`Sauvegarde de la base de données…`,"migration.running":`Migration des données d'agent — {processed}/{total}`,"migration.error":`Échec de la migration`,"migration.backup_location":`Une sauvegarde a été enregistrée à {path}. Redémarre Kōbō pour réessayer.`,"migration.retry":`Redémarre Kōbō pour réessayer.`,"engine.select":`Moteur`,"engine.model":`Modèle`,"engine.effort":`Effort de réflexion`,"wakeup.scheduledIn":`Prochain réveil dans {n}s`,"wakeup.scheduledAt":`Prochain réveil à {time}`,"wakeup.firing":`Réveil en cours…`,"wakeup.reason":`Raison : {reason}`,"wakeup.cancel":`Annuler ce réveil`,"wakeup.pendingIndicator":`Réveil programmé`,"cron.pendingIndicator":`{n} cron(s) programmé(s)`,"schedule.tabLabel":`Programmation`,"schedule.panelTitle":`Automatisation`,"schedule.panelDescription":`Réveiller ce workspace plus tard ou exécuter des instructions selon un planning.`,"schedule.activeTitle":`Planifications actives`,"schedule.emptyTitle":`Aucune planification`,"schedule.emptyDescription":`Créez un réveil ponctuel ou une tâche récurrente ci-dessous.`,"schedule.cancelWakeup":`Annuler ce réveil`,"schedule.cancelCron":`Supprimer cette tâche récurrente`,"schedule.createTitle":`Créer une planification`,"schedule.createDescription":`Choisissez quand et comment l'agent doit s'exécuter.`,"schedule.typeWakeup":`Réveil ponctuel`,"schedule.typeRecurring":`Tâche récurrente`,"schedule.wakeupDescription":`Exécuter le prompt une fois après un délai.`,"schedule.cronDescription":`Exécuter le prompt régulièrement selon une fréquence fixe.`,"schedule.promptHint":`Instructions qui seront envoyées à l'agent`,"schedule.frequencyTitle":`Fréquence`,"schedule.advancedDescription":`Utiliser une expression cron brute`,"schedule.cronExpressionLabel":`Expression cron`,"schedule.sessionModeTitle":`Session d'exécution`,"schedule.modeResume":`Reprendre la session`,"schedule.oneShotHint":`Supprimer cette planification après sa première exécution.`,"schedule.wakeupTitle":`Wakeup en attente`,"schedule.cronsTitle":`Tâches récurrentes`,"schedule.noWakeup":`Aucun wakeup programmé`,"schedule.noCrons":`Aucun cron programmé`,"schedule.nextFireAt":`prochain à {time}`,"schedule.lastFiredAt":`dernier fire il y a {time}`,"schedule.addCronTitle":`Ajouter une tâche récurrente`,"schedule.addWakeupTitle":`Programmer un réveil`,"schedule.every":`Toutes les`,"schedule.unitMinutes":`minutes`,"schedule.unitHours":`heures`,"schedule.unitDays":`jours`,"schedule.daysDriftWarning":`L'intervalle peut se réduire à 1 jour en fin de mois (limitation du format cron).`,"schedule.advancedExpression":`Expression avancée (optionnel)`,"schedule.advancedHint":`Cron brut (ex. */15 * * * *) ou {'@'}hourly/{'@'}daily — remplace le sélecteur si rempli.`,"schedule.promptLabel":`Prompt`,"schedule.labelOptional":`Libellé (optionnel)`,"schedule.delayMinutes":`Délai (minutes)`,"schedule.modeFresh":`Nouvelle session`,"schedule.oneShot":`Une seule fois`,"schedule.addCronBtn":`Ajouter le cron`,"schedule.addWakeupBtn":`Programmer le réveil`,"schedule.cronCreated":`Tâche récurrente ajoutée`,"schedule.wakeupCreated":`Réveil programmé`,"askUserQuestion.title":`L'agent te pose une question`,"askUserQuestion.submit":`Envoyer la réponse`,"askUserQuestion.multiSelectHint":`Sélectionne une ou plusieurs options`,"askUserQuestion.otherOption":`Autre`,"askUserQuestion.otherOptionHint":`précisez dans votre prochain message`,"askUserQuestion.freeFormLabel":`Précisez votre réponse`,"askUserQuestion.freeFormHint":`Cette réponse sera envoyée directement à l'agent.`,"askUserQuestion.noPending":`Aucune question en attente`,"askUserQuestion.next":`Suivant`,"askUserQuestion.previous":`Précédent`,"askUserQuestion.cancel":`Annuler`,"askUserQuestion.cancelTooltip":`Sauter cette question — l'agent continuera sans réponse`,"askUserQuestion.collapse":`Réduire le panneau de question`,"askUserQuestion.expand":`Agrandir le panneau de question`,"permissionRequest.title":`L'agent veut utiliser un outil`,"permissionRequest.allow":`Autoriser`,"permissionRequest.allowOnce":`Autoriser une fois`,"permissionRequest.allowTurn":`Autoriser ce tour`,"permissionRequest.allowOperation":`Toujours cette opération`,"permissionRequest.allowTool":`Toujours cet outil`,"permissionRequest.deny":`Refuser`,"permissionRequest.tool":`Outil`,"permissionRequest.input":`Entrée`,"permissionRequest.rawInput":`Détails techniques`,"permissionRequest.collapse":`Réduire le panneau de permission`,"permissionRequest.expand":`Agrandir le panneau de permission`,"permissionRequest.denied":`refusé par l'utilisateur`,"workspaceStatus.created":`créé`,"workspaceStatus.extracting":`extraction`,"workspaceStatus.brainstorming":`brainstorming`,"workspaceStatus.compacting":`compaction`,"chatInput.compactingBanner":`Compaction du contexte en cours. L’envoi sera disponible à la fin.`,"workspaceStatus.executing":`en cours`,"workspaceStatus.awaitingUser":`en attente de ta réponse`,"workspaceStatus.completed":`terminé`,"workspaceStatus.idle":`inactif`,"workspaceStatus.error":`erreur`,"workspaceStatus.quota":`quota atteint`,"workspaceStatus.retrying":`reprise automatique`,"workspaceList.prOpen":`#{n} — Pull request ouverte`,"workspaceList.prWatchDisabledIndicator":`Checks PR ignorés pour ce workspace`,"workspaceList.prChangesRequested":`#{n} — Modifications demandées`,"workspaceList.attentionCiFailed":`CI en échec`,"workspaceList.attentionChangesRequested":`Modifications demandées`,"workspaceList.attentionReadyToMerge":`Prêt à merger`,"autoLoop.toggle":`Auto-loop`,"autoLoop.start":`Démarrer l'auto-loop`,"autoLoop.prepare":`Préparer pour auto-loop`,"autoLoop.reprepare":`Re-préparer pour auto-loop`,"autoLoop.reprepareTooltip":`Relancer la phase de grooming pour ajouter ou rafraîchir les tâches avant de relancer la boucle`,"autoLoop.prepareBusy":`Attendre la fin de l'agent avant de préparer`,"autoLoop.forceReady":`Je sais ce que je fais — passer le grooming`,"autoLoop.forceReadyConfirm":`Passer le grooming et marquer auto-loop prêt ? La boucle peut stagner si les tâches ne sont pas atomiques.`,"autoLoop.stop":`Arrêter l'auto-loop`,"autoLoop.notReady":`Lancer d'abord « Préparer pour auto-loop »`,"autoLoop.noTasks":`Ajouter d'abord des tâches`,"autoLoop.progress":`Auto-loop · {done}/{total} tâches`,"autoLoop.preparing":`Auto-loop · préparation`,"autoLoop.preparingTooltip":`Grooming en cours — l'agent crée / révise les tâches. La boucle démarrera quand il appellera mark_auto_loop_ready.`,"autoLoop.running":`Auto-loop en cours`,"autoLoop.startInMode":`Démarrer en mode auto-loop`,"autoLoop.brainstormModelPrefix":`Brainstorm :`,"autoLoop.brainstormModelTooltip":`Modèle utilisé uniquement pour la session de brainstorming initiale — chaque tâche ensuite utilise le modèle choisi au-dessus`,"autoLoop.brainstormReasoningPrefix":`Brainstorm :`,"autoLoop.brainstormReasoningTooltip":`Niveau de raisonnement utilisé uniquement pour la session de brainstorming initiale`,"autoLoop.executionModelPrefix":`Loop :`,"autoLoop.executionModelTooltip":`Modèle utilisé pour chaque tâche de l'auto-loop après la session de brainstorming initiale`,"autoLoop.sessionMode.perTask":`Nouvelle session par tâche`,"autoLoop.sessionMode.label":`Session :`,"autoLoop.sessionMode.perTaskTooltip":`Chaque tâche démarre une session Claude Code neuve, sans mémoire des tâches précédentes`,"autoLoop.sessionMode.continuous":`Session continue`,"autoLoop.sessionMode.continuousTooltip":`Toutes les tâches s'enchaînent dans la même session — l'agent garde tout le contexte, mais la session s'allonge au fil du temps`,"koboCommand.prepAutoloopDesc":`Préparer les tâches pour le mode auto-loop (atomicité)`,"staleSessionBanner.title":`Auto-loop en cours`,"staleSessionBanner.message":`Vous consultez une ancienne session — l'agent travaille actuellement dans la dernière.`,"staleSessionBanner.staleTitle":`Session précédente`,"staleSessionBanner.staleMessage":`Vous consultez une ancienne session — les messages envoyés iront dans cette session, pas la dernière.`,"staleSessionBanner.switchToCurrent":`Basculer sur la session active`,"network.login.title":`Accès réseau`,"network.login.description":`Ce Kōbō nécessite un token pour être piloté depuis le réseau. Colle le token affiché dans les Réglages sur la machine hôte.`,"network.login.tokenLabel":`Token`,"network.login.tokenPlaceholder":`Colle ton token`,"network.login.connect":`Se connecter`,"network.login.invalid":`Token invalide`,"network.login.serverError":`Erreur serveur — réessaie.`,"network.login.unreachable":`Kōbō est injoignable — vérifie ta connexion.`,"layout.toggleWorkspaces":`Afficher/masquer les espaces de travail`,"layout.togglePanel":`Afficher/masquer le panneau latéral`,"unsaved.title":`Quitter sans enregistrer ?`,"unsaved.message":`Vous avez des modifications non enregistrées. Quitter cette page les abandonne.`,"unsaved.leave":`Quitter`,"unsaved.stay":`Rester`,"prCheckout.staleRetriesExhausted":`L'état du dépôt a continué de changer pendant l'application de vos choix. Fermez cette fenêtre et réessayez depuis le sélecteur de pull request.`,"prPicker.title":`Importer depuis une pull request`,"prPicker.filterAll":`Toutes`,"prPicker.filterMine":`Les miennes`,"prPicker.filterReviewRequested":`Revue demandée`,"prPicker.searchPlaceholder":`Rechercher des pull requests…`,"prPicker.loadMore":`Charger plus`,"prPicker.empty":`Aucune pull request ouverte ne correspond.`,"prPicker.forkNotSupported":`Cette PR provient d'un fork ; Kōbō ne peut pas la checkout.`,"prPicker.loadFailed":`Échec du chargement des pull requests.`,"prPicker.badge.workspaceExists":`Déjà ouverte dans Kōbō`,"prPicker.badge.worktreePresent":`Worktree présente`,"prPicker.badge.localBranch":`Branche locale`,"prPicker.badge.new":`Nouvelle`,"prPicker.badge.draft":`Brouillon`,"prCheckout.title":`Préparer la worktree`,"prCheckout.apply":`Appliquer`,"prCheckout.cancel":`Annuler`,"prCheckout.retry":`Réessayer`,"prCheckout.diagnoseFailed":`Échec du diagnostic de la pull request.`,"prCheckout.resolveFailed":`Échec de la résolution du checkout de la pull request.`,"prCheckout.path.required":`Saisir un chemin de worktree qui n'existe pas encore.`,"prCheckout.workspace.restoreNotAvailable":"La restauration d'un workspace purgé n'est pas encore possible depuis cet écran. Recréez son dossier de worktree sur le disque (par ex. `git worktree add`) : Kōbō le rattachera automatiquement sous 30 secondes environ.","prCheckout.staleReloaded":`Le dépôt a changé ; le diagnostic a été rafraîchi.`,"prCheckout.step.blocked":`Impossible de continuer`,"prCheckout.step.path":`Emplacement de la worktree`,"prCheckout.step.workspace":`Workspace existant`,"prCheckout.step.worktree":`Worktree existante`,"prCheckout.step.operation":`Opération git en cours`,"prCheckout.step.changes":`Modifications non commitées`,"prCheckout.step.divergence":`Branche locale vs origin`,"prCheckout.workspace.activeHint":`Un workspace nommé « {name} » suit déjà cette branche.`,"prCheckout.workspace.open":`Ouvrir ce workspace`,"prCheckout.workspace.continue":`Continuer sur un autre chemin`,"prCheckout.workspace.unarchive":`Désarchiver et l'ouvrir`,"prCheckout.workspace.restore":`Recréer sa worktree`,"prCheckout.worktree.orphanHint":`Une worktree existe déjà sur cette branche à {path}.`,"prCheckout.worktree.attach":`L'attacher`,"prCheckout.worktree.branchInUse":`Cette branche est déjà extraite. Rattachez son worktree existant.`,"prCheckout.worktree.createElsewhere":`En créer une autre ailleurs`,"prCheckout.operation.hint":`Un {operation} est en cours dans cette worktree.`,"prCheckout.operation.abort":`Abandonner`,"prCheckout.operation.cancel":`Ne pas y toucher et s'arrêter ici`,"prCheckout.changes.hint":`{modified} modifié(s), {staged} indexé(s), {untracked} non suivi(s).`,"prCheckout.changes.stash":`Les stash`,"prCheckout.changes.commit":`Les commit`,"prCheckout.changes.discard":`Les abandonner (conservées dans un stash étiqueté)`,"prCheckout.changes.keepResetConflict":`Conserver les modifications est incompatible avec un reset. Faites un stash ou un commit, ou conservez la branche.`,"prCheckout.changes.keep":`Les laisser telles quelles`,"prCheckout.divergence.behindHint":`Votre branche a {behind} commit(s) de retard sur origin.`,"prCheckout.divergence.aheadHint":`Votre branche a {ahead} commit(s) non pushé(s).`,"prCheckout.divergence.divergedHint":`{ahead} en avance, {behind} en retard sur origin.`,"prCheckout.divergence.fastForward":`Fast-forward vers origin`,"prCheckout.divergence.rebase":`Rebase sur origin`,"prCheckout.divergence.resetHard":`Réinitialiser sur origin (une branche de sauvegarde est créée d'abord)`,"prCheckout.divergence.keep":`Conserver l'état local`,"prCheckout.blocked.forgeUnavailable":`Le CLI de la forge est absent ou non authentifié.`,"prCheckout.blocked.forkPr":`Cette PR provient d'un fork ; Kōbō ne peut pas la checkout.`,"prCheckout.blocked.headBranchDeleted":`La branche n'existe plus sur le remote.`,"prCheckout.blocked.indexLock":`Un autre processus git est en cours (index.lock est présent).`,"prCheckout.blocked.pathOccupied":`{path} existe déjà et n'est pas une worktree.`,"prCheckout.blocked.worktreeOtherBranch":`{path} est une worktree sur une autre branche ({branch}).`,"prCheckout.blocked.noCommonAncestor":`Une branche locale nommée {branch} existe avec un historique sans rapport.`,"split.title":`Vue double workspace`,"split.open":`Ouvrir côte à côte`,"split.openBeside":`Ouvrir à côté`,"split.close":`Fermer la vue double`,"split.left":`Workspace de gauche`,"split.right":`Workspace de droite`,"split.choose":`Choisir un workspace`,"split.recipient":`Envoyer à : {name}`,"absence.title":`Depuis ta dernière visite`,"absence.pending":`Changements à consulter`,"absence.retention":`Activité importante des 30 derniers jours, enregistrée depuis l’installation de cette fonctionnalité. Le suivi des visites est propre à ce navigateur.`,"absence.since":`Depuis le {date}`,"absence.error":`Impossible de charger l’activité.`,"absence.retry":`Réessayer`,"absence.empty":`Aucune nouvelle activité.`,"absence.more":`Charger la suite`,"absence.markRead":`Marquer les événements affichés comme lus`,"absence.kind.question":`Question posée`,"absence.kind.permission":`Autorisation demandée`,"absence.kind.completed":`Session terminée`,"absence.kind.error":`Erreur de l’agent`,"absence.kind.pr-merged":`PR mergée`,"absence.kind.pr-approved":`PR approuvée`,"absence.kind.pr-changes-requested":`Modifications demandées`,"absence.kind.pr-ci-failed":`CI en échec`,"absence.kind.pr-ci-recovered":`CI rétablie`,"absence.kind.pr-merge-conflict":`Conflit de merge`,"absence.kind.pr-ready-to-merge":`PR prête à merger`,"absence.kind.archived":`Workspace archivé`,"absence.kind.purged":`Worktree purgé`,"absence.kind.restored":`Worktree restauré`,"tours.split.controls.title":`Deux workspaces indépendants`,"tours.split.controls.description":`Choisis un workspace par panneau. Redimensionne la séparation ; chaque conversation garde son destinataire et ses panneaux.`,"tours.home.sort.title":`Trier les workspaces`,"tours.home.sort.description":`Choisis l’ordre et le sens dans chaque groupe. Ton choix est mémorisé.`,"tours.home.activity.title":`Consulter l’activité après une absence`,"tours.home.activity.description":`En bas du drawer gauche, retrouve les questions, fins de session, erreurs et changements de PR survenus pendant ton absence.`};export{e as default};
@@ -1,3 +1,3 @@
1
- import{n as e}from"./editor.api-CYTuNwqu.js";var t=[`assign`,`flush`,`ftl`,`return`,`global`,`import`,`include`,`break`,`continue`,`local`,`nested`,`nt`,`setting`,`stop`,`t`,`lt`,`rt`,`fallback`],n=[`attempt`,`autoesc`,`autoEsc`,`compress`,`comment`,`escape`,`noescape`,`function`,`if`,`list`,`items`,`sep`,`macro`,`noparse`,`noParse`,`noautoesc`,`noAutoEsc`,`outputformat`,`switch`,`visit`,`recurse`],r={close:`>`,id:`angle`,open:`<`},i={close:`\\]`,id:`bracket`,open:`\\[`},a={close:`[>\\]]`,id:`auto`,open:`[<\\[]`},o={close:`\\}`,id:`dollar`,open1:`\\$`,open2:`\\{`},s={close:`\\]`,id:`bracket`,open1:`\\[`,open2:`=`};function c(r){return{brackets:[[`<`,`>`],[`[`,`]`],[`(`,`)`],[`{`,`}`]],comments:{blockComment:[`${r.open}--`,`--${r.close}`]},autoCloseBefore:`
1
+ import{n as e}from"./editor.api-sw146MWN.js";var t=[`assign`,`flush`,`ftl`,`return`,`global`,`import`,`include`,`break`,`continue`,`local`,`nested`,`nt`,`setting`,`stop`,`t`,`lt`,`rt`,`fallback`],n=[`attempt`,`autoesc`,`autoEsc`,`compress`,`comment`,`escape`,`noescape`,`function`,`if`,`list`,`items`,`sep`,`macro`,`noparse`,`noParse`,`noautoesc`,`noAutoEsc`,`outputformat`,`switch`,`visit`,`recurse`],r={close:`>`,id:`angle`,open:`<`},i={close:`\\]`,id:`bracket`,open:`\\[`},a={close:`[>\\]]`,id:`auto`,open:`[<\\[]`},o={close:`\\}`,id:`dollar`,open1:`\\$`,open2:`\\{`},s={close:`\\]`,id:`bracket`,open1:`\\[`,open2:`=`};function c(r){return{brackets:[[`<`,`>`],[`[`,`]`],[`(`,`)`],[`{`,`}`]],comments:{blockComment:[`${r.open}--`,`--${r.close}`]},autoCloseBefore:`
2
2
  \r }]),.:;=`,autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`,notIn:[`string`]},{open:`'`,close:`'`,notIn:[`string`]}],surroundingPairs:[{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`}],folding:{markers:{start:RegExp(`${r.open}#(?:${n.join(`|`)})([^/${r.close}]*(?!/)${r.close})[^${r.open}]*$`),end:RegExp(`${r.open}/#(?:${n.join(`|`)})[\\r\\n\\t ]*>`)}},onEnterRules:[{beforeText:RegExp(`${r.open}#(?!(?:${t.join(`|`)}))([a-zA-Z_]+)([^/${r.close}]*(?!/)${r.close})[^${r.open}]*$`),afterText:RegExp(`^${r.open}/#([a-zA-Z_]+)[\\r\\n\\t ]*${r.close}$`),action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`${r.open}#(?!(?:${t.join(`|`)}))([a-zA-Z_]+)([^/${r.close}]*(?!/)${r.close})[^${r.open}]*$`),action:{indentAction:e.IndentAction.Indent}}]}}function l(){return{brackets:[[`<`,`>`],[`[`,`]`],[`(`,`)`],[`{`,`}`]],autoCloseBefore:`
3
3
  \r }]),.:;=`,autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`,notIn:[`string`]},{open:`'`,close:`'`,notIn:[`string`]}],surroundingPairs:[{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`}],folding:{markers:{start:RegExp(`[<\\[]#(?:${n.join(`|`)})([^/>\\]]*(?!/)[>\\]])[^<\\[]*$`),end:RegExp(`[<\\[]/#(?:${n.join(`|`)})[\\r\\n\\t ]*>`)}},onEnterRules:[{beforeText:RegExp(`[<\\[]#(?!(?:${t.join(`|`)}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),afterText:RegExp(`^[<\\[]/#([a-zA-Z_]+)[\\r\\n\\t ]*[>\\]]$`),action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`[<\\[]#(?!(?:${t.join(`|`)}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),action:{indentAction:e.IndentAction.Indent}}]}}function u(e,t){let n=`_${e.id}_${t.id}`,r=e=>e.replace(/__id__/g,n),i=e=>{let t=e.source.replace(/__id__/g,n);return new RegExp(t,e.flags)};return{unicode:!0,includeLF:!1,start:r(`default__id__`),ignoreCase:!1,defaultToken:`invalid`,tokenPostfix:`.freemarker2`,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`<`,close:`>`,token:`delimiter.angle`}],[r(`open__id__`)]:new RegExp(e.open),[r(`close__id__`)]:new RegExp(e.close),[r(`iOpen1__id__`)]:new RegExp(t.open1),[r(`iOpen2__id__`)]:new RegExp(t.open2),[r(`iClose__id__`)]:new RegExp(t.close),[r(`startTag__id__`)]:i(/(@open__id__)(#)/),[r(`endTag__id__`)]:i(/(@open__id__)(\/#)/),[r(`startOrEndTag__id__`)]:i(/(@open__id__)(\/?#)/),[r(`closeTag1__id__`)]:i(/((?:@blank)*)(@close__id__)/),[r(`closeTag2__id__`)]:i(/((?:@blank)*\/?)(@close__id__)/),blank:/[ \t\n\r]/,keywords:[`false`,`true`,`in`,`as`,`using`],directiveStartCloseTag1:/attempt|recover|sep|auto[eE]sc|no(?:autoe|AutoE)sc|compress|default|no[eE]scape|comment|no[pP]arse/,directiveStartCloseTag2:/else|break|continue|return|stop|flush|t|lt|rt|nt|nested|recurse|fallback|ftl/,directiveStartBlank:/if|else[iI]f|list|for[eE]ach|switch|case|assign|global|local|include|import|function|macro|transform|visit|stop|return|call|setting|output[fF]ormat|nested|recurse|escape|ftl|items/,directiveEndCloseTag1:/if|list|items|sep|recover|attempt|for[eE]ach|local|global|assign|function|macro|output[fF]ormat|auto[eE]sc|no(?:autoe|AutoE)sc|compress|transform|switch|escape|no[eE]scape/,escapedChar:/\\(?:[ntrfbgla\\'"\{=]|(?:x[0-9A-Fa-f]{1,4}))/,asciiDigit:/[0-9]/,integer:/[0-9]+/,nonEscapedIdStartChar:/[\$@-Z_a-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u1FFF\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183-\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3006\u3031-\u3035\u303B-\u303C\u3040-\u318F\u31A0-\u31BA\u31F0-\u31FF\u3300-\u337F\u3400-\u4DB5\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,escapedIdChar:/\\[\-\.:#]/,idStartChar:/(?:@nonEscapedIdStartChar)|(?:@escapedIdChar)/,id:/(?:@idStartChar)(?:(?:@idStartChar)|(?:@asciiDigit))*/,specialHashKeys:/\*\*|\*|false|true|in|as|using/,namedSymbols:/&lt;=|&gt;=|\\lte|\\lt|&lt;|\\gte|\\gt|&gt;|&amp;&amp;|\\and|-&gt;|->|==|!=|\+=|-=|\*=|\/=|%=|\+\+|--|<=|&&|\|\||:|\.\.\.|\.\.\*|\.\.<|\.\.!|\?\?|=|<|\+|-|\*|\/|%|\||\.\.|\?|!|&|\.|,|;/,arrows:[`->`,`-&gt;`],delimiters:[`;`,`:`,`,`,`.`],stringOperators:[`lte`,`lt`,`gte`,`gt`],noParseTags:[`noparse`,`noParse`,`comment`],tokenizer:{[r(`default__id__`)]:[{include:r(`@directive_token__id__`)},{include:r(`@interpolation_and_text_token__id__`)}],[r(`fmExpression__id__.directive`)]:[{include:r(`@blank_and_expression_comment_token__id__`)},{include:r(`@directive_end_token__id__`)},{include:r(`@expression_token__id__`)}],[r(`fmExpression__id__.interpolation`)]:[{include:r(`@blank_and_expression_comment_token__id__`)},{include:r(`@expression_token__id__`)},{include:r(`@greater_operators_token__id__`)}],[r(`inParen__id__.plain`)]:[{include:r(`@blank_and_expression_comment_token__id__`)},{include:r(`@directive_end_token__id__`)},{include:r(`@expression_token__id__`)}],[r(`inParen__id__.gt`)]:[{include:r(`@blank_and_expression_comment_token__id__`)},{include:r(`@expression_token__id__`)},{include:r(`@greater_operators_token__id__`)}],[r(`noSpaceExpression__id__`)]:[{include:r(`@no_space_expression_end_token__id__`)},{include:r(`@directive_end_token__id__`)},{include:r(`@expression_token__id__`)}],[r(`unifiedCall__id__`)]:[{include:r(`@unified_call_token__id__`)}],[r(`singleString__id__`)]:[{include:r(`@string_single_token__id__`)}],[r(`doubleString__id__`)]:[{include:r(`@string_double_token__id__`)}],[r(`rawSingleString__id__`)]:[{include:r(`@string_single_raw_token__id__`)}],[r(`rawDoubleString__id__`)]:[{include:r(`@string_double_raw_token__id__`)}],[r(`expressionComment__id__`)]:[{include:r(`@expression_comment_token__id__`)}],[r(`noParse__id__`)]:[{include:r(`@no_parse_token__id__`)}],[r(`terseComment__id__`)]:[{include:r(`@terse_comment_token__id__`)}],[r(`directive_token__id__`)]:[[i(/(?:@startTag__id__)(@directiveStartCloseTag1)(?:@closeTag1__id__)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`},{cases:{"@noParseTags":{token:`tag`,next:r(`@noParse__id__.$3`)},"@default":{token:`tag`}}},{token:`delimiter.directive`},{token:`@brackets.directive`}]],[i(/(?:@startTag__id__)(@directiveStartCloseTag2)(?:@closeTag2__id__)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag`},{token:`delimiter.directive`},{token:`@brackets.directive`}]],[i(/(?:@startTag__id__)(@directiveStartBlank)(@blank)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag`},{token:``,next:r(`@fmExpression__id__.directive`)}]],[i(/(?:@endTag__id__)(@directiveEndCloseTag1)(?:@closeTag1__id__)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag`},{token:`delimiter.directive`},{token:`@brackets.directive`}]],[i(/(@open__id__)(@)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`,next:r(`@unifiedCall__id__`)}]],[i(/(@open__id__)(\/@)((?:(?:@id)(?:\.(?:@id))*)?)(?:@closeTag1__id__)/),[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag`},{token:`delimiter.directive`},{token:`@brackets.directive`}]],[i(/(@open__id__)#--/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:{token:`comment`,next:r(`@terseComment__id__`)}],[i(/(?:@startOrEndTag__id__)([a-zA-Z_]+)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag.invalid`,next:r(`@fmExpression__id__.directive`)}]]],[r(`interpolation_and_text_token__id__`)]:[[i(/(@iOpen1__id__)(@iOpen2__id__)/),[{token:t.id===`bracket`?`@brackets.interpolation`:`delimiter.interpolation`},{token:t.id===`bracket`?`delimiter.interpolation`:`@brackets.interpolation`,next:r(`@fmExpression__id__.interpolation`)}]],[/[\$#<\[\{]|(?:@blank)+|[^\$<#\[\{\n\r\t ]+/,{token:`source`}]],[r(`string_single_token__id__`)]:[[/[^'\\]/,{token:`string`}],[/@escapedChar/,{token:`string.escape`}],[/'/,{token:`string`,next:`@pop`}]],[r(`string_double_token__id__`)]:[[/[^"\\]/,{token:`string`}],[/@escapedChar/,{token:`string.escape`}],[/"/,{token:`string`,next:`@pop`}]],[r(`string_single_raw_token__id__`)]:[[/[^']+/,{token:`string.raw`}],[/'/,{token:`string.raw`,next:`@pop`}]],[r(`string_double_raw_token__id__`)]:[[/[^"]+/,{token:`string.raw`}],[/"/,{token:`string.raw`,next:`@pop`}]],[r(`expression_token__id__`)]:[[/(r?)(['"])/,{cases:{"r'":[{token:`keyword`},{token:`string.raw`,next:r(`@rawSingleString__id__`)}],'r"':[{token:`keyword`},{token:`string.raw`,next:r(`@rawDoubleString__id__`)}],"'":[{token:`source`},{token:`string`,next:r(`@singleString__id__`)}],'"':[{token:`source`},{token:`string`,next:r(`@doubleString__id__`)}]}}],[/(?:@integer)(?:\.(?:@integer))?/,{cases:{"(?:@integer)":{token:`number`},"@default":{token:`number.float`}}}],[/(\.)(@blank*)(@specialHashKeys)/,[{token:`delimiter`},{token:``},{token:`identifier`}]],[/(?:@namedSymbols)/,{cases:{"@arrows":{token:`meta.arrow`},"@delimiters":{token:`delimiter`},"@default":{token:`operators`}}}],[/@id/,{cases:{"@keywords":{token:`keyword.$0`},"@stringOperators":{token:`operators`},"@default":{token:`identifier`}}}],[/[\[\]\(\)\{\}]/,{cases:{"\\[":{cases:{"$S2==gt":{token:`@brackets`,next:r(`@inParen__id__.gt`)},"@default":{token:`@brackets`,next:r(`@inParen__id__.plain`)}}},"\\]":{cases:{...t.id===`bracket`?{"$S2==interpolation":{token:`@brackets.interpolation`,next:`@popall`}}:{},...e.id===`bracket`?{"$S2==directive":{token:`@brackets.directive`,next:`@popall`}}:{},[r(`$S1==inParen__id__`)]:{token:`@brackets`,next:`@pop`},"@default":{token:`@brackets`}}},"\\(":{token:`@brackets`,next:r(`@inParen__id__.gt`)},"\\)":{cases:{[r(`$S1==inParen__id__`)]:{token:`@brackets`,next:`@pop`},"@default":{token:`@brackets`}}},"\\{":{cases:{"$S2==gt":{token:`@brackets`,next:r(`@inParen__id__.gt`)},"@default":{token:`@brackets`,next:r(`@inParen__id__.plain`)}}},"\\}":{cases:{...t.id===`bracket`?{}:{"$S2==interpolation":{token:`@brackets.interpolation`,next:`@popall`}},[r(`$S1==inParen__id__`)]:{token:`@brackets`,next:`@pop`},"@default":{token:`@brackets`}}}}}],[/\$\{/,{token:`delimiter.invalid`}]],[r(`blank_and_expression_comment_token__id__`)]:[[/(?:@blank)+/,{token:``}],[/[<\[][#!]--/,{token:`comment`,next:r(`@expressionComment__id__`)}]],[r(`directive_end_token__id__`)]:[[/>/,e.id===`bracket`?{token:`operators`}:{token:`@brackets.directive`,next:`@popall`}],[i(/(\/)(@close__id__)/),[{token:`delimiter.directive`},{token:`@brackets.directive`,next:`@popall`}]]],[r(`greater_operators_token__id__`)]:[[/>/,{token:`operators`}],[/>=/,{token:`operators`}]],[r(`no_space_expression_end_token__id__`)]:[[/(?:@blank)+/,{token:``,switchTo:r(`@fmExpression__id__.directive`)}]],[r(`unified_call_token__id__`)]:[[/(@id)((?:@blank)+)/,[{token:`tag`},{token:``,next:r(`@fmExpression__id__.directive`)}]],[i(/(@id)(\/?)(@close__id__)/),[{token:`tag`},{token:`delimiter.directive`},{token:`@brackets.directive`,next:`@popall`}]],[/./,{token:`@rematch`,next:r(`@noSpaceExpression__id__`)}]],[r(`no_parse_token__id__`)]:[[i(/(@open__id__)(\/#?)([a-zA-Z]+)((?:@blank)*)(@close__id__)/),{cases:{"$S2==$3":[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag`},{token:``},{token:`@brackets.directive`,next:`@popall`}],"$S2==comment":[{token:`comment`},{token:`comment`},{token:`comment`},{token:`comment`},{token:`comment`}],"@default":[{token:`source`},{token:`source`},{token:`source`},{token:`source`},{token:`source`}]}}],[/[^<\[\-]+|[<\[\-]/,{cases:{"$S2==comment":{token:`comment`},"@default":{token:`source`}}}]],[r(`expression_comment_token__id__`)]:[[/--[>\]]/,{token:`comment`,next:`@pop`}],[/[^\->\]]+|[>\]\-]/,{token:`comment`}]],[r(`terse_comment_token__id__`)]:[[i(/--(?:@close__id__)/),{token:`comment`,next:`@popall`}],[/[^<\[\-]+|[<\[\-]/,{token:`comment`}]]}}}function d(e){let t=u(r,e),n=u(i,e),o=u(a,e);return{...t,...n,...o,unicode:!0,includeLF:!1,start:`default_auto_${e.id}`,ignoreCase:!1,defaultToken:`invalid`,tokenPostfix:`.freemarker2`,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`<`,close:`>`,token:`delimiter.angle`}],tokenizer:{...t.tokenizer,...n.tokenizer,...o.tokenizer}}}var f={conf:c(r),language:u(r,o)},p={conf:c(i),language:u(i,o)},m={conf:c(r),language:u(r,s)},h={conf:c(i),language:u(i,s)},g={conf:l(),language:d(o)},_={conf:l(),language:d(s)};export{m as TagAngleInterpolationBracket,f as TagAngleInterpolationDollar,_ as TagAutoInterpolationBracket,g as TagAutoInterpolationDollar,h as TagBracketInterpolationBracket,p as TagBracketInterpolationDollar};
@@ -1 +1 @@
1
- import{n as e}from"./editor.api-CYTuNwqu.js";var t=[`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`keygen`,`link`,`menuitem`,`meta`,`param`,`source`,`track`,`wbr`],n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:[`{{!--`,`--}}`]},brackets:[[`<!--`,`-->`],[`<`,`>`],[`{{`,`}}`],[`{`,`}`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`<`,close:`>`},{open:`"`,close:`"`},{open:`'`,close:`'`}],onEnterRules:[{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),action:{indentAction:e.IndentAction.Indent}}]},r={defaultToken:``,tokenPostfix:``,tokenizer:{root:[[/\{\{!--/,`comment.block.start.handlebars`,`@commentBlock`],[/\{\{!/,`comment.start.handlebars`,`@comment`],[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.root`}],[/<!DOCTYPE/,`metatag.html`,`@doctype`],[/<!--/,`comment.html`,`@commentHtml`],[/(<)(\w+)(\/>)/,[`delimiter.html`,`tag.html`,`delimiter.html`]],[/(<)(script)/,[`delimiter.html`,{token:`tag.html`,next:`@script`}]],[/(<)(style)/,[`delimiter.html`,{token:`tag.html`,next:`@style`}]],[/(<)([:\w]+)/,[`delimiter.html`,{token:`tag.html`,next:`@otherTag`}]],[/(<\/)(\w+)/,[`delimiter.html`,{token:`tag.html`,next:`@otherTag`}]],[/</,`delimiter.html`],[/\{/,`delimiter.html`],[/[^<{]+/]],doctype:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.comment`}],[/[^>]+/,`metatag.content.html`],[/>/,`metatag.html`,`@pop`]],comment:[[/\}\}/,`comment.end.handlebars`,`@pop`],[/./,`comment.content.handlebars`]],commentBlock:[[/--\}\}/,`comment.block.end.handlebars`,`@pop`],[/./,`comment.content.handlebars`]],commentHtml:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.comment`}],[/-->/,`comment.html`,`@pop`],[/[^-]+/,`comment.content.html`],[/./,`comment.content.html`]],otherTag:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.otherTag`}],[/\/?>/,`delimiter.html`,`@pop`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/]],script:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.script`}],[/type/,`attribute.name`,`@scriptAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter.html`,next:`@scriptEmbedded.text/javascript`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,[`delimiter.html`,`tag.html`,{token:`delimiter.html`,next:`@pop`}]]],scriptAfterType:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.scriptAfterType`}],[/=/,`delimiter`,`@scriptAfterTypeEquals`],[/>/,{token:`delimiter.html`,next:`@scriptEmbedded.text/javascript`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptAfterTypeEquals:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.scriptAfterTypeEquals`}],[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/>/,{token:`delimiter.html`,next:`@scriptEmbedded.text/javascript`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptWithCustomType:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.scriptWithCustomType.$S2`}],[/>/,{token:`delimiter.html`,next:`@scriptEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptEmbedded:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInEmbeddedState.scriptEmbedded.$S2`,nextEmbedded:`@pop`}],[/<\/script/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}]],style:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.style`}],[/type/,`attribute.name`,`@styleAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter.html`,next:`@styleEmbedded.text/css`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,[`delimiter.html`,`tag.html`,{token:`delimiter.html`,next:`@pop`}]]],styleAfterType:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.styleAfterType`}],[/=/,`delimiter`,`@styleAfterTypeEquals`],[/>/,{token:`delimiter.html`,next:`@styleEmbedded.text/css`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleAfterTypeEquals:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.styleAfterTypeEquals`}],[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/>/,{token:`delimiter.html`,next:`@styleEmbedded.text/css`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleWithCustomType:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.styleWithCustomType.$S2`}],[/>/,{token:`delimiter.html`,next:`@styleEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleEmbedded:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInEmbeddedState.styleEmbedded.$S2`,nextEmbedded:`@pop`}],[/<\/style/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}]],handlebarsInSimpleState:[[/\{\{\{?/,`delimiter.handlebars`],[/\}\}\}?/,{token:`delimiter.handlebars`,switchTo:`@$S2.$S3`}],{include:`handlebarsRoot`}],handlebarsInEmbeddedState:[[/\{\{\{?/,`delimiter.handlebars`],[/\}\}\}?/,{token:`delimiter.handlebars`,switchTo:`@$S2.$S3`,nextEmbedded:`$S3`}],{include:`handlebarsRoot`}],handlebarsRoot:[[/"[^"]*"/,`string.handlebars`],[/[#/][^\s}]+/,`keyword.helper.handlebars`],[/else\b/,`keyword.helper.handlebars`],[/[\s]+/],[/[^}]/,`variable.parameter.handlebars`]]}};export{n as conf,r as language};
1
+ import{n as e}from"./editor.api-sw146MWN.js";var t=[`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`keygen`,`link`,`menuitem`,`meta`,`param`,`source`,`track`,`wbr`],n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:[`{{!--`,`--}}`]},brackets:[[`<!--`,`-->`],[`<`,`>`],[`{{`,`}}`],[`{`,`}`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`<`,close:`>`},{open:`"`,close:`"`},{open:`'`,close:`'`}],onEnterRules:[{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),afterText:/^<\/(\w[\w\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),action:{indentAction:e.IndentAction.Indent}}]},r={defaultToken:``,tokenPostfix:``,tokenizer:{root:[[/\{\{!--/,`comment.block.start.handlebars`,`@commentBlock`],[/\{\{!/,`comment.start.handlebars`,`@comment`],[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.root`}],[/<!DOCTYPE/,`metatag.html`,`@doctype`],[/<!--/,`comment.html`,`@commentHtml`],[/(<)(\w+)(\/>)/,[`delimiter.html`,`tag.html`,`delimiter.html`]],[/(<)(script)/,[`delimiter.html`,{token:`tag.html`,next:`@script`}]],[/(<)(style)/,[`delimiter.html`,{token:`tag.html`,next:`@style`}]],[/(<)([:\w]+)/,[`delimiter.html`,{token:`tag.html`,next:`@otherTag`}]],[/(<\/)(\w+)/,[`delimiter.html`,{token:`tag.html`,next:`@otherTag`}]],[/</,`delimiter.html`],[/\{/,`delimiter.html`],[/[^<{]+/]],doctype:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.comment`}],[/[^>]+/,`metatag.content.html`],[/>/,`metatag.html`,`@pop`]],comment:[[/\}\}/,`comment.end.handlebars`,`@pop`],[/./,`comment.content.handlebars`]],commentBlock:[[/--\}\}/,`comment.block.end.handlebars`,`@pop`],[/./,`comment.content.handlebars`]],commentHtml:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.comment`}],[/-->/,`comment.html`,`@pop`],[/[^-]+/,`comment.content.html`],[/./,`comment.content.html`]],otherTag:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.otherTag`}],[/\/?>/,`delimiter.html`,`@pop`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/]],script:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.script`}],[/type/,`attribute.name`,`@scriptAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter.html`,next:`@scriptEmbedded.text/javascript`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,[`delimiter.html`,`tag.html`,{token:`delimiter.html`,next:`@pop`}]]],scriptAfterType:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.scriptAfterType`}],[/=/,`delimiter`,`@scriptAfterTypeEquals`],[/>/,{token:`delimiter.html`,next:`@scriptEmbedded.text/javascript`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptAfterTypeEquals:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.scriptAfterTypeEquals`}],[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/>/,{token:`delimiter.html`,next:`@scriptEmbedded.text/javascript`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptWithCustomType:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.scriptWithCustomType.$S2`}],[/>/,{token:`delimiter.html`,next:`@scriptEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptEmbedded:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInEmbeddedState.scriptEmbedded.$S2`,nextEmbedded:`@pop`}],[/<\/script/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}]],style:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.style`}],[/type/,`attribute.name`,`@styleAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter.html`,next:`@styleEmbedded.text/css`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,[`delimiter.html`,`tag.html`,{token:`delimiter.html`,next:`@pop`}]]],styleAfterType:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.styleAfterType`}],[/=/,`delimiter`,`@styleAfterTypeEquals`],[/>/,{token:`delimiter.html`,next:`@styleEmbedded.text/css`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleAfterTypeEquals:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.styleAfterTypeEquals`}],[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/>/,{token:`delimiter.html`,next:`@styleEmbedded.text/css`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleWithCustomType:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInSimpleState.styleWithCustomType.$S2`}],[/>/,{token:`delimiter.html`,next:`@styleEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleEmbedded:[[/\{\{/,{token:`@rematch`,switchTo:`@handlebarsInEmbeddedState.styleEmbedded.$S2`,nextEmbedded:`@pop`}],[/<\/style/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}]],handlebarsInSimpleState:[[/\{\{\{?/,`delimiter.handlebars`],[/\}\}\}?/,{token:`delimiter.handlebars`,switchTo:`@$S2.$S3`}],{include:`handlebarsRoot`}],handlebarsInEmbeddedState:[[/\{\{\{?/,`delimiter.handlebars`],[/\}\}\}?/,{token:`delimiter.handlebars`,switchTo:`@$S2.$S3`,nextEmbedded:`$S3`}],{include:`handlebarsRoot`}],handlebarsRoot:[[/"[^"]*"/,`string.handlebars`],[/[#/][^\s}]+/,`keyword.helper.handlebars`],[/else\b/,`keyword.helper.handlebars`],[/[\s]+/],[/[^}]/,`variable.parameter.handlebars`]]}};export{n as conf,r as language};
@@ -1 +1 @@
1
- import{n as e}from"./editor.api-CYTuNwqu.js";var t=[`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`keygen`,`link`,`menuitem`,`meta`,`param`,`source`,`track`,`wbr`],n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:[`<!--`,`-->`]},brackets:[[`<!--`,`-->`],[`<`,`>`],[`{`,`}`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`}],onEnterRules:[{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),action:{indentAction:e.IndentAction.Indent}}],folding:{markers:{start:RegExp(`^\\s*<!--\\s*#region\\b.*-->`),end:RegExp(`^\\s*<!--\\s*#endregion\\b.*-->`)}}},r={defaultToken:``,tokenPostfix:`.html`,ignoreCase:!0,tokenizer:{root:[[/<!DOCTYPE/,`metatag`,`@doctype`],[/<!--/,`comment`,`@comment`],[/(<)((?:[\w\-]+:)?[\w\-]+)(\s*)(\/>)/,[`delimiter`,`tag`,``,`delimiter`]],[/(<)(script)/,[`delimiter`,{token:`tag`,next:`@script`}]],[/(<)(style)/,[`delimiter`,{token:`tag`,next:`@style`}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,[`delimiter`,{token:`tag`,next:`@otherTag`}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,[`delimiter`,{token:`tag`,next:`@otherTag`}]],[/</,`delimiter`],[/[^<]+/]],doctype:[[/[^>]+/,`metatag.content`],[/>/,`metatag`,`@pop`]],comment:[[/-->/,`comment`,`@pop`],[/[^-]+/,`comment.content`],[/./,`comment.content`]],otherTag:[[/\/?>/,`delimiter`,`@pop`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/]],script:[[/type/,`attribute.name`,`@scriptAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,[`delimiter`,`tag`,{token:`delimiter`,next:`@pop`}]]],scriptAfterType:[[/=/,`delimiter`,`@scriptAfterTypeEquals`],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptAfterTypeEquals:[[/"module"/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.text/javascript`}],[/'module'/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.text/javascript`}],[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptWithCustomType:[[/>/,{token:`delimiter`,next:`@scriptEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptEmbedded:[[/<\/script/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}],[/[^<]+/,``]],style:[[/type/,`attribute.name`,`@styleAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,[`delimiter`,`tag`,{token:`delimiter`,next:`@pop`}]]],styleAfterType:[[/=/,`delimiter`,`@styleAfterTypeEquals`],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleWithCustomType:[[/>/,{token:`delimiter`,next:`@styleEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleEmbedded:[[/<\/style/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}],[/[^<]+/,``]]}};export{n as conf,r as language};
1
+ import{n as e}from"./editor.api-sw146MWN.js";var t=[`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`keygen`,`link`,`menuitem`,`meta`,`param`,`source`,`track`,`wbr`],n={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,comments:{blockComment:[`<!--`,`-->`]},brackets:[[`<!--`,`-->`],[`<`,`>`],[`{`,`}`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`}],onEnterRules:[{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),afterText:/^<\/([_:\w][_:\w-.\d]*)\s*>$/i,action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`<(?!(?:${t.join(`|`)}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`,`i`),action:{indentAction:e.IndentAction.Indent}}],folding:{markers:{start:RegExp(`^\\s*<!--\\s*#region\\b.*-->`),end:RegExp(`^\\s*<!--\\s*#endregion\\b.*-->`)}}},r={defaultToken:``,tokenPostfix:`.html`,ignoreCase:!0,tokenizer:{root:[[/<!DOCTYPE/,`metatag`,`@doctype`],[/<!--/,`comment`,`@comment`],[/(<)((?:[\w\-]+:)?[\w\-]+)(\s*)(\/>)/,[`delimiter`,`tag`,``,`delimiter`]],[/(<)(script)/,[`delimiter`,{token:`tag`,next:`@script`}]],[/(<)(style)/,[`delimiter`,{token:`tag`,next:`@style`}]],[/(<)((?:[\w\-]+:)?[\w\-]+)/,[`delimiter`,{token:`tag`,next:`@otherTag`}]],[/(<\/)((?:[\w\-]+:)?[\w\-]+)/,[`delimiter`,{token:`tag`,next:`@otherTag`}]],[/</,`delimiter`],[/[^<]+/]],doctype:[[/[^>]+/,`metatag.content`],[/>/,`metatag`,`@pop`]],comment:[[/-->/,`comment`,`@pop`],[/[^-]+/,`comment.content`],[/./,`comment.content`]],otherTag:[[/\/?>/,`delimiter`,`@pop`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/]],script:[[/type/,`attribute.name`,`@scriptAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/(<\/)(script\s*)(>)/,[`delimiter`,`tag`,{token:`delimiter`,next:`@pop`}]]],scriptAfterType:[[/=/,`delimiter`,`@scriptAfterTypeEquals`],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptAfterTypeEquals:[[/"module"/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.text/javascript`}],[/'module'/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.text/javascript`}],[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@scriptWithCustomType.$1`}],[/>/,{token:`delimiter`,next:`@scriptEmbedded`,nextEmbedded:`text/javascript`}],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptWithCustomType:[[/>/,{token:`delimiter`,next:`@scriptEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/script\s*>/,{token:`@rematch`,next:`@pop`}]],scriptEmbedded:[[/<\/script/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}],[/[^<]+/,``]],style:[[/type/,`attribute.name`,`@styleAfterType`],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/(<\/)(style\s*)(>)/,[`delimiter`,`tag`,{token:`delimiter`,next:`@pop`}]]],styleAfterType:[[/=/,`delimiter`,`@styleAfterTypeEquals`],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleAfterTypeEquals:[[/"([^"]*)"/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/'([^']*)'/,{token:`attribute.value`,switchTo:`@styleWithCustomType.$1`}],[/>/,{token:`delimiter`,next:`@styleEmbedded`,nextEmbedded:`text/css`}],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleWithCustomType:[[/>/,{token:`delimiter`,next:`@styleEmbedded.$S2`,nextEmbedded:`$S2`}],[/"([^"]*)"/,`attribute.value`],[/'([^']*)'/,`attribute.value`],[/[\w\-]+/,`attribute.name`],[/=/,`delimiter`],[/[ \t\r\n]+/],[/<\/style\s*>/,{token:`@rematch`,next:`@pop`}]],styleEmbedded:[[/<\/style/,{token:`@rematch`,next:`@pop`,nextEmbedded:`@pop`}],[/[^<]+/,``]]}};export{n as conf,r as language};
@@ -0,0 +1 @@
1
+ import{$ as e,et as t,nt as n,tt as r,u as i}from"./index-VL3fI9a3.js";var a=i(async({app:i})=>{if(i.use(t),r!==`en`)try{await n(r)}catch(e){console.error(`[i18n] could not load the saved locale, staying in English:`,e)}e(r)});export{a as default};